diff --git a/extensions/cornerstone/src/Viewport/OHIFCornerstoneViewport.tsx b/extensions/cornerstone/src/Viewport/OHIFCornerstoneViewport.tsx index d150c44e0cf..6fcca0b045a 100644 --- a/extensions/cornerstone/src/Viewport/OHIFCornerstoneViewport.tsx +++ b/extensions/cornerstone/src/Viewport/OHIFCornerstoneViewport.tsx @@ -89,280 +89,297 @@ function areEqual(prevProps, nextProps) { } } } - return true; } // Todo: This should be done with expose of internal API similar to react-vtkjs-viewport // Then we don't need to worry about the re-renders if the props change. -const OHIFCornerstoneViewport = React.memo(props => { - const { - viewportIndex, - displaySets, - dataSource, - viewportOptions, - displaySetOptions, - servicesManager, - onElementEnabled, - onElementDisabled, - // Note: you SHOULD NOT use the initialImageIdOrIndex for manipulation - // of the imageData in the OHIFCornerstoneViewport. This prop is used - // to set the initial state of the viewport's first image to render - initialImageIndex, - } = props; - - const [scrollbarHeight, setScrollbarHeight] = useState('100px'); - - const elementRef = useRef(); - - const { - measurementService, - displaySetService, - toolbarService, - toolGroupService, - syncGroupService, - cornerstoneViewportService, - cornerstoneCacheService, - viewportGridService, - } = servicesManager.services; - - // useCallback for scroll bar height calculation - const setImageScrollBarHeight = useCallback(() => { - const scrollbarHeight = `${elementRef.current.clientHeight - 20}px`; - setScrollbarHeight(scrollbarHeight); - }, [elementRef]); - - // useCallback for onResize - const onResize = useCallback(() => { - if (elementRef.current) { - cornerstoneViewportService.resize(); - setImageScrollBarHeight(); - } - }, [elementRef]); - - const cleanUpServices = useCallback(() => { - const viewportInfo = cornerstoneViewportService.getViewportInfoByIndex( - viewportIndex - ); - - if (!viewportInfo) { - return; - } - - const viewportId = viewportInfo.getViewportId(); - const renderingEngineId = viewportInfo.getRenderingEngineId(); - const syncGroups = viewportInfo.getSyncGroups(); - - toolGroupService.removeViewportFromToolGroup(viewportId, renderingEngineId); - - syncGroupService.removeViewportFromSyncGroup( - viewportId, - renderingEngineId, - syncGroups - ); - }, [viewportIndex, viewportOptions.viewportId]); - - const elementEnabledHandler = useCallback( - evt => { - // check this is this element reference and return early if doesn't match - if (evt.detail.element !== elementRef.current) { - return; +const OHIFCornerstoneViewport = React.memo( + React.forwardRef((props, ref) => { + const { + viewportIndex, + displaySets, + dataSource, + viewportOptions, + displaySetOptions, + servicesManager, + onElementEnabled, + onElementDisabled, + // Note: you SHOULD NOT use the initialImageIdOrIndex for manipulation + // of the imageData in the OHIFCornerstoneViewport. This prop is used + // to set the initial state of the viewport's first image to render + initialImageIndex, + disableViewportImageScrollbar, + disableViewportOverlay, + disableViewportImageSliceLoadingIndicator, + disableViewportOrientationMarkers, + } = props; + + const [scrollbarHeight, setScrollbarHeight] = useState('100px'); + + const elementRef = useRef(); + + React.useImperativeHandle(ref, () => elementRef.current); + + const { + measurementService, + displaySetService, + toolbarService, + toolGroupService, + syncGroupService, + cornerstoneViewportService, + cornerstoneCacheService, + viewportGridService, + } = servicesManager.services; + + // useCallback for scroll bar height calculation + const setImageScrollBarHeight = useCallback(() => { + const scrollbarHeight = `${elementRef.current.clientHeight - 20}px`; + setScrollbarHeight(scrollbarHeight); + }, [elementRef]); + + // useCallback for onResize + const onResize = useCallback(() => { + if (elementRef.current) { + cornerstoneViewportService.resize(); + setImageScrollBarHeight(); } + }, [elementRef]); - const { viewportId, element } = evt.detail; - const viewportInfo = cornerstoneViewportService.getViewportInfo( - viewportId + const cleanUpServices = useCallback(() => { + const viewportInfo = cornerstoneViewportService.getViewportInfoByIndex( + viewportIndex ); - const viewportIndex = viewportInfo.getViewportIndex(); - setEnabledElement(viewportIndex, element); + if (!viewportInfo) { + return; + } + const viewportId = viewportInfo.getViewportId(); const renderingEngineId = viewportInfo.getRenderingEngineId(); - const toolGroupId = viewportInfo.getToolGroupId(); const syncGroups = viewportInfo.getSyncGroups(); - toolGroupService.addViewportToToolGroup( + toolGroupService.removeViewportFromToolGroup( viewportId, - renderingEngineId, - toolGroupId + renderingEngineId ); - syncGroupService.addViewportToSyncGroup( + syncGroupService.removeViewportFromSyncGroup( viewportId, renderingEngineId, syncGroups ); + }, [viewportIndex, viewportOptions.viewportId]); - if (onElementEnabled) { - onElementEnabled(evt); - } - }, - [viewportIndex, onElementEnabled, toolGroupService] - ); - - // disable the element upon unmounting - useEffect(() => { - cornerstoneViewportService.enableViewport( - viewportIndex, - viewportOptions, - elementRef.current - ); + const elementEnabledHandler = useCallback( + evt => { + // check this is this element reference and return early if doesn't match + if (evt.detail.element !== elementRef.current) { + return; + } - eventTarget.addEventListener( - Enums.Events.ELEMENT_ENABLED, - elementEnabledHandler - ); + const { viewportId, element } = evt.detail; + const viewportInfo = cornerstoneViewportService.getViewportInfo( + viewportId + ); + const viewportIndex = viewportInfo.getViewportIndex(); - setImageScrollBarHeight(); + setEnabledElement(viewportIndex, element); - return () => { - cleanUpServices(); + const renderingEngineId = viewportInfo.getRenderingEngineId(); + const toolGroupId = viewportInfo.getToolGroupId(); + const syncGroups = viewportInfo.getSyncGroups(); - cornerstoneViewportService.disableElement(viewportIndex); + toolGroupService.addViewportToToolGroup( + viewportId, + renderingEngineId, + toolGroupId + ); - if (onElementDisabled) { - const viewportInfo = cornerstoneViewportService.getViewportInfoByIndex( - viewportIndex + syncGroupService.addViewportToSyncGroup( + viewportId, + renderingEngineId, + syncGroups ); - onElementDisabled(viewportInfo); - } + if (onElementEnabled) { + onElementEnabled(evt); + } + }, + [viewportIndex, onElementEnabled, toolGroupService] + ); + + // disable the element upon unmounting + useEffect(() => { + cornerstoneViewportService.enableViewport( + viewportIndex, + viewportOptions, + elementRef.current + ); - eventTarget.removeEventListener( + eventTarget.addEventListener( Enums.Events.ELEMENT_ENABLED, elementEnabledHandler ); - }; - }, []); - - // subscribe to displaySet metadata invalidation (updates) - // Currently, if the metadata changes we need to re-render the display set - // for it to take effect in the viewport. As we deal with scaling in the loading, - // we need to remove the old volume from the cache, and let the - // viewport to re-add it which will use the new metadata. Otherwise, the - // viewport will use the cached volume and the new metadata will not be used. - // Note: this approach does not actually end of sending network requests - // and it uses the network cache - useEffect(() => { - const { unsubscribe } = displaySetService.subscribe( - displaySetService.EVENTS.DISPLAY_SET_SERIES_METADATA_INVALIDATED, - async invalidatedDisplaySetInstanceUID => { - const viewportInfo = cornerstoneViewportService.getViewportInfoByIndex( - viewportIndex - ); - if (viewportInfo.hasDisplaySet(invalidatedDisplaySetInstanceUID)) { - const viewportData = viewportInfo.getViewportData(); - const newViewportData = await cornerstoneCacheService.invalidateViewportData( - viewportData, - invalidatedDisplaySetInstanceUID, - dataSource, - displaySetService + setImageScrollBarHeight(); + + return () => { + cleanUpServices(); + + cornerstoneViewportService.disableElement(viewportIndex); + + if (onElementDisabled) { + const viewportInfo = cornerstoneViewportService.getViewportInfoByIndex( + viewportIndex ); - const keepCamera = true; - cornerstoneViewportService.updateViewport( - viewportIndex, - newViewportData, - keepCamera + onElementDisabled(viewportInfo); + } + + eventTarget.removeEventListener( + Enums.Events.ELEMENT_ENABLED, + elementEnabledHandler + ); + }; + }, []); + + // subscribe to displaySet metadata invalidation (updates) + // Currently, if the metadata changes we need to re-render the display set + // for it to take effect in the viewport. As we deal with scaling in the loading, + // we need to remove the old volume from the cache, and let the + // viewport to re-add it which will use the new metadata. Otherwise, the + // viewport will use the cached volume and the new metadata will not be used. + // Note: this approach does not actually end of sending network requests + // and it uses the network cache + useEffect(() => { + const { unsubscribe } = displaySetService.subscribe( + displaySetService.EVENTS.DISPLAY_SET_SERIES_METADATA_INVALIDATED, + async invalidatedDisplaySetInstanceUID => { + const viewportInfo = cornerstoneViewportService.getViewportInfoByIndex( + viewportIndex ); + + if (viewportInfo.hasDisplaySet(invalidatedDisplaySetInstanceUID)) { + const viewportData = viewportInfo.getViewportData(); + const newViewportData = await cornerstoneCacheService.invalidateViewportData( + viewportData, + invalidatedDisplaySetInstanceUID, + dataSource, + displaySetService + ); + + const keepCamera = true; + cornerstoneViewportService.updateViewport( + viewportIndex, + newViewportData, + keepCamera + ); + } } + ); + return () => { + unsubscribe(); + }; + }, [viewportIndex]); + + useEffect(() => { + // handle the default viewportType to be stack + if (!viewportOptions.viewportType) { + viewportOptions.viewportType = STACK; } - ); - return () => { - unsubscribe(); - }; - }, [viewportIndex]); - - useEffect(() => { - // handle the default viewportType to be stack - if (!viewportOptions.viewportType) { - viewportOptions.viewportType = STACK; - } - const loadViewportData = async () => { - const viewportData = await cornerstoneCacheService.createViewportData( + const loadViewportData = async () => { + const viewportData = await cornerstoneCacheService.createViewportData( + displaySets, + viewportOptions, + dataSource, + initialImageIndex + ); + + cornerstoneViewportService.setViewportData( + viewportIndex, + viewportData, + viewportOptions, + displaySetOptions + ); + }; + + loadViewportData(); + }, [viewportOptions, displaySets, dataSource]); + + /** + * There are two scenarios for jump to click + * 1. Current viewports contain the displaySet that the annotation was drawn on + * 2. Current viewports don't contain the displaySet that the annotation was drawn on + * and we need to change the viewports displaySet for jumping. + * Since measurement_jump happens via events and listeners, the former case is handled + * by the measurement_jump direct callback, but the latter case is handled first by + * the viewportGrid to set the correct displaySet on the viewport, AND THEN we check + * the cache for jumping to see if there is any jump queued, then we jump to the correct slice. + */ + useEffect(() => { + const unsubscribeFromJumpToMeasurementEvents = _subscribeToJumpToMeasurementEvents( + measurementService, + displaySetService, + elementRef, + viewportIndex, displaySets, - viewportOptions, - dataSource, - initialImageIndex + viewportGridService, + cornerstoneViewportService ); - cornerstoneViewportService.setViewportData( + _checkForCachedJumpToMeasurementEvents( + measurementService, + displaySetService, + elementRef, viewportIndex, - viewportData, - viewportOptions, - displaySetOptions + displaySets, + viewportGridService, + cornerstoneViewportService ); - }; - - loadViewportData(); - }, [viewportOptions, displaySets, dataSource]); - - /** - * There are two scenarios for jump to click - * 1. Current viewports contain the displaySet that the annotation was drawn on - * 2. Current viewports don't contain the displaySet that the annotation was drawn on - * and we need to change the viewports displaySet for jumping. - * Since measurement_jump happens via events and listeners, the former case is handled - * by the measurement_jump direct callback, but the latter case is handled first by - * the viewportGrid to set the correct displaySet on the viewport, AND THEN we check - * the cache for jumping to see if there is any jump queued, then we jump to the correct slice. - */ - useEffect(() => { - const unsubscribeFromJumpToMeasurementEvents = _subscribeToJumpToMeasurementEvents( - measurementService, - displaySetService, - elementRef, - viewportIndex, - displaySets, - viewportGridService, - cornerstoneViewportService - ); - _checkForCachedJumpToMeasurementEvents( - measurementService, - displaySetService, - elementRef, - viewportIndex, - displaySets, - viewportGridService, - cornerstoneViewportService + return () => { + unsubscribeFromJumpToMeasurementEvents(); + }; + }, [displaySets, elementRef, viewportIndex]); + + return ( +
+ +
e.preventDefault()} + onMouseDown={e => e.preventDefault()} + ref={elementRef} + >
+ +
); - - return () => { - unsubscribeFromJumpToMeasurementEvents(); - }; - }, [displaySets, elementRef, viewportIndex]); - - return ( -
- -
e.preventDefault()} - onMouseDown={e => e.preventDefault()} - ref={elementRef} - >
- -
- ); -}, areEqual); + }), + areEqual +); function _subscribeToJumpToMeasurementEvents( measurementService, diff --git a/extensions/cornerstone/src/Viewport/Overlays/CornerstoneOverlays.tsx b/extensions/cornerstone/src/Viewport/Overlays/CornerstoneOverlays.tsx index 160b6b294e5..025586537d3 100644 --- a/extensions/cornerstone/src/Viewport/Overlays/CornerstoneOverlays.tsx +++ b/extensions/cornerstone/src/Viewport/Overlays/CornerstoneOverlays.tsx @@ -7,6 +7,12 @@ import ViewportImageSliceLoadingIndicator from './ViewportImageSliceLoadingIndic function CornerstoneOverlays(props) { const { viewportIndex, element, scrollbarHeight, servicesManager } = props; + const { + disableViewportImageScrollbar, + disableViewportOverlay, + disableViewportImageSliceLoadingIndicator, + disableViewportOrientationMarkers, + } = props; const { cornerstoneViewportService } = servicesManager.services; const [imageSliceData, setImageSliceData] = useState({ imageIndex: 0, @@ -47,33 +53,41 @@ function CornerstoneOverlays(props) { return (
- - - - + {!disableViewportImageScrollbar && ( + + )} + {!disableViewportOverlay && ( + + )} + {!disableViewportImageSliceLoadingIndicator && ( + + )} + {!disableViewportOrientationMarkers && ( + + )}
); } diff --git a/extensions/cornerstone/src/Viewport/Overlays/ViewportOverlay.tsx b/extensions/cornerstone/src/Viewport/Overlays/ViewportOverlay.tsx index b9e542b94ce..ccd1a303bd8 100644 --- a/extensions/cornerstone/src/Viewport/Overlays/ViewportOverlay.tsx +++ b/extensions/cornerstone/src/Viewport/Overlays/ViewportOverlay.tsx @@ -243,7 +243,7 @@ function _getInstanceNumberFromVolume( viewportIndex, cornerstoneViewportService ) { - const volumes = viewportData.volumes; + const volumes = viewportData.data.map(d => d.volume); // Todo: support fusion of acquisition plane which has instanceNumber if (!volumes || volumes.length > 1) { diff --git a/extensions/cornerstone/src/commandsModule.ts b/extensions/cornerstone/src/commandsModule.ts index b57e07d77f9..205f964919b 100644 --- a/extensions/cornerstone/src/commandsModule.ts +++ b/extensions/cornerstone/src/commandsModule.ts @@ -287,12 +287,9 @@ const commandsModule = ({ servicesManager }) => { if (viewport instanceof StackViewport) { viewport.resetProperties(); - viewport.resetCamera(); - } else { - // Todo: add reset properties for volume viewport - viewport.resetCamera(); } + viewport.resetCamera(); viewport.render(); }, scaleViewport: ({ direction }) => { @@ -449,6 +446,11 @@ const commandsModule = ({ servicesManager }) => { }; const definitions = { + getActiveViewportEnabledElement: { + commandFn: actions.getActiveViewportEnabledElement, + storeContexts: [], + options: {}, + }, setWindowLevel: { commandFn: actions.setWindowLevel, storeContexts: [], diff --git a/extensions/cornerstone/src/index.tsx b/extensions/cornerstone/src/index.tsx index 5259b267cee..b4ef9666bb7 100644 --- a/extensions/cornerstone/src/index.tsx +++ b/extensions/cornerstone/src/index.tsx @@ -18,8 +18,13 @@ import SegmentationService from './services/SegmentationService'; import CornerstoneCacheService from './services/CornerstoneCacheService'; import { toolNames } from './initCornerstoneTools'; -import { getEnabledElement, reset as enabledElementReset } from './state'; +import { + getEnabledElement, + setEnabledElement, + reset as enabledElementReset, +} from './state'; import CornerstoneViewportService from './services/ViewportService/CornerstoneViewportService'; + import dicomLoaderService from './utils/dicomLoaderService'; import { registerColormap } from './utils/colormap/transferFunctionHelpers'; @@ -33,13 +38,14 @@ const Component = React.lazy(() => { ); }); -const OHIFCornerstoneViewport = props => { +const OHIFCornerstoneViewport = React.forwardRef((props, ref) => { return ( Loading...}> - + ); -}; +}); +OHIFCornerstoneViewport.displayName = 'OHIFCornerstoneViewport'; /** * @@ -90,7 +96,7 @@ const cornerstoneExtension: Types.Extensions.Extension = { }, getHangingProtocolModule, getViewportModule({ servicesManager, commandsManager }) { - const ExtendedOHIFCornerstoneViewport = props => { + const ExtendedOHIFCornerstoneViewport = React.forwardRef((props, ref) => { // const onNewImageHandler = jumpData => { // commandsManager.runCommand('jumpToImage', jumpData); // }; @@ -98,13 +104,14 @@ const cornerstoneExtension: Types.Extensions.Extension = { return ( ); - }; + }); return [ { @@ -129,6 +136,7 @@ const cornerstoneExtension: Types.Extensions.Extension = { return { cornerstone, cornerstoneTools }; }, getEnabledElement, + setEnabledElement, dicomLoaderService, registerColormap, }, diff --git a/extensions/cornerstone/src/init.tsx b/extensions/cornerstone/src/init.tsx index 8c7aad4bdcd..efee5ade99d 100644 --- a/extensions/cornerstone/src/init.tsx +++ b/extensions/cornerstone/src/init.tsx @@ -84,8 +84,9 @@ export default async function init({ uiNotificationService.show({ title: 'Cross Origin Isolation', message: - 'Cross Origin Isolation is not enabled, volume rendering will not work (e.g., MPR)', - type: 'warning', + 'Cross Origin Isolation is not enabled, volume rendering will be less performant', + type: 'info', + duration: 1000, }); } @@ -374,7 +375,7 @@ export default async function init({ // check if reference lines are active const referenceLinesEnabled = - toolGroup._toolInstances['ReferenceLines'].mode === + toolGroup._toolInstances?.['ReferenceLines']?.mode === Enums.ToolModes.Enabled; if (!referenceLinesEnabled) { diff --git a/extensions/cornerstone/src/initCornerstoneTools.js b/extensions/cornerstone/src/initCornerstoneTools.js index 80dc0678b35..209f832d8b2 100644 --- a/extensions/cornerstone/src/initCornerstoneTools.js +++ b/extensions/cornerstone/src/initCornerstoneTools.js @@ -23,6 +23,7 @@ import { addTool, annotation, ReferenceLinesTool, + TrackballRotateTool, } from '@cornerstonejs/tools'; export default function initCornerstoneTools(configuration = {}) { @@ -48,6 +49,7 @@ export default function initCornerstoneTools(configuration = {}) { addTool(CrosshairsTool); addTool(SegmentationDisplayTool); addTool(ReferenceLinesTool); + addTool(TrackballRotateTool); // Modify annotation tools to use dashed lines on SR const annotationStyle = { @@ -86,6 +88,7 @@ const toolNames = { Crosshairs: CrosshairsTool.toolName, SegmentationDisplay: SegmentationDisplayTool.toolName, ReferenceLines: ReferenceLinesTool.toolName, + TrackballRotateTool: TrackballRotateTool.toolName, }; export { toolNames }; diff --git a/extensions/cornerstone/src/initWADOImageLoader.js b/extensions/cornerstone/src/initWADOImageLoader.js index c072184ee5a..14c02f5af72 100644 --- a/extensions/cornerstone/src/initWADOImageLoader.js +++ b/extensions/cornerstone/src/initWADOImageLoader.js @@ -53,6 +53,7 @@ export default function initWADOImageLoader( // Until the default is set to true (which is the case for cornerstone3D), // we should set this flag to false. convertFloatPixelDataToInt: false, + use16BitDataType: true, }, beforeSend: function(xhr) { const headers = userAuthenticationService.getAuthorizationHeader(); @@ -78,6 +79,7 @@ export default function initWADOImageLoader( errorInterceptor: error => { errorHandler.getHTTPErrorHandler(error); }, + withCredentials: true, }); initWebWorkers(appConfig); diff --git a/extensions/cornerstone/src/services/CornerstoneCacheService/CornerstoneCacheService.ts b/extensions/cornerstone/src/services/CornerstoneCacheService/CornerstoneCacheService.ts index 01a359368d0..401c308e89d 100644 --- a/extensions/cornerstone/src/services/CornerstoneCacheService/CornerstoneCacheService.ts +++ b/extensions/cornerstone/src/services/CornerstoneCacheService/CornerstoneCacheService.ts @@ -1,5 +1,9 @@ import { ServicesManager } from '@ohif/core'; import { cache as cs3DCache, Enums, volumeLoader } from '@cornerstonejs/core'; +import { utils } from '@ohif/core'; +import sortImageIdsAndGetSpacing from './sortImageIdsAndGetSpacing'; +import makeVolumeMetadata from './makeVolumeMetadata'; +import { vec3 } from 'gl-matrix'; import getCornerstoneViewportType from '../../utils/getCornerstoneViewportType'; import { @@ -66,7 +70,8 @@ class CornerstoneCacheService { ); } - if (cs3DViewportType === Enums.ViewportType.ORTHOGRAPHIC) { + if (cs3DViewportType === Enums.ViewportType.ORTHOGRAPHIC + || cs3DViewportType === Enums.ViewportType.VOLUME_3D) { viewportData = await this._getVolumeViewportData(dataSource, displaySets); } @@ -187,8 +192,34 @@ class CornerstoneCacheService { dataSource ); + const MAX_VOLUME_SIZE = 400; + const volumeMetadata = makeVolumeMetadata(volumeImageIds); + const { ImageOrientationPatient: chi } = volumeMetadata; + const rowCosineVec = vec3.fromValues(chi[0], chi[1], chi[2]); + const colCosineVec = vec3.fromValues(chi[3], chi[4], chi[5]); + const scanAxisNormal = vec3.create(); + vec3.cross(scanAxisNormal, rowCosineVec, colCosineVec); + const { sortedImageIds } = sortImageIdsAndGetSpacing( + volumeImageIds, + scanAxisNormal + ); + + const distributedCopy = (items, n) => { + const elements = [items[0]]; + const totalItems = items.length - 2; + const interval = totalItems / (n - 2); + for (let i = 1; i < n - 1; i++) { + elements.push(items[Math.floor(i * interval)]); + } + elements.push(items[items.length - 1]); + return elements; + }; + volume = await volumeLoader.createAndCacheVolume(volumeId, { - imageIds: volumeImageIds, + imageIds: + volumeImageIds.length > MAX_VOLUME_SIZE + ? distributedCopy(sortedImageIds, MAX_VOLUME_SIZE) + : volumeImageIds, }); this.volumeImageIds.set( diff --git a/extensions/cornerstone/src/services/CornerstoneCacheService/makeVolumeMetadata.ts b/extensions/cornerstone/src/services/CornerstoneCacheService/makeVolumeMetadata.ts new file mode 100644 index 00000000000..f7529399946 --- /dev/null +++ b/extensions/cornerstone/src/services/CornerstoneCacheService/makeVolumeMetadata.ts @@ -0,0 +1,89 @@ +import { metaData } from '@cornerstonejs/core'; +import type { Types } from '@cornerstonejs/core'; + +/** + * It creates a metadata object for a volume given the imageIds that compose it. + * It uses the first imageId to get the metadata. + * + * @param imageIds - array of imageIds + * @returns The volume metadata + */ +export default function makeVolumeMetadata( + imageIds: Array +): Types.Metadata { + const imageId0 = imageIds[0]; + + const { + pixelRepresentation, + bitsAllocated, + bitsStored, + highBit, + photometricInterpretation, + samplesPerPixel, + } = metaData.get('imagePixelModule', imageId0); + + // Add list of VOIs stored on the DICOM. + const voiLut = []; + + const voiLutModule = metaData.get('voiLutModule', imageId0); + + // voiLutModule is not always present + let voiLUTFunction; + if (voiLutModule) { + const { windowWidth, windowCenter } = voiLutModule; + voiLUTFunction = voiLutModule?.voiLUTFunction; + + if (Array.isArray(windowWidth)) { + for (let i = 0; i < windowWidth.length; i++) { + voiLut.push({ + windowWidth: windowWidth[i], + windowCenter: windowCenter[i], + }); + } + } else { + voiLut.push({ + windowWidth: windowWidth, + windowCenter: windowCenter, + }); + } + } else { + voiLut.push({ + windowWidth: undefined, + windowCenter: undefined, + }); + } + + const { modality, seriesInstanceUID } = metaData.get( + 'generalSeriesModule', + imageId0 + ); + + const { + imageOrientationPatient, + pixelSpacing, + frameOfReferenceUID, + columns, + rows, + } = metaData.get('imagePlaneModule', imageId0); + + // Map to dcmjs-style keywords. This is becoming the standard and makes it + // Easier to swap out cornerstoneWADOImageLoader at a later date. + return { + BitsAllocated: bitsAllocated, + BitsStored: bitsStored, + SamplesPerPixel: samplesPerPixel, + HighBit: highBit, + PhotometricInterpretation: photometricInterpretation, + PixelRepresentation: pixelRepresentation, + Modality: modality, + ImageOrientationPatient: imageOrientationPatient, + PixelSpacing: pixelSpacing, + FrameOfReferenceUID: frameOfReferenceUID, + Columns: columns, + Rows: rows, + // This is a reshaped object and not a dicom tag: + voiLut, + VOILUTFunction: voiLUTFunction, + SeriesInstanceUID: seriesInstanceUID, + }; +} diff --git a/extensions/cornerstone/src/services/CornerstoneCacheService/sortImageIdsAndGetSpacing.ts b/extensions/cornerstone/src/services/CornerstoneCacheService/sortImageIdsAndGetSpacing.ts new file mode 100644 index 00000000000..42d51c7a1ca --- /dev/null +++ b/extensions/cornerstone/src/services/CornerstoneCacheService/sortImageIdsAndGetSpacing.ts @@ -0,0 +1,141 @@ +import { vec3 } from 'gl-matrix'; +import { metaData } from '@cornerstonejs/core'; +import type { Types } from '@cornerstonejs/core'; + +type SortedImageIdsItem = { + zSpacing: number; + origin: Types.Point3; + sortedImageIds: Array; +}; +/** + * Given an array of imageIds, sort them based on their imagePositionPatient, and + * also returns the spacing between images and the origin of the reference image + * + * @param imageIds - array of imageIds + * @param scanAxisNormal - [x, y, z] array or gl-matrix vec3 + * + * @returns The sortedImageIds, zSpacing, and origin of the first image in the series. + */ +export default function sortImageIdsAndGetSpacing( + imageIds: Array, + scanAxisNormal: vec3 // Get gl matrix types? +): SortedImageIdsItem { + const { imagePositionPatient: referenceImagePositionPatient } = metaData.get( + 'imagePlaneModule', + imageIds[0] + ); + + const refIppVec = vec3.create(); + + // Check if we are using wadouri scheme + const usingWadoUri = imageIds[0].split(':')[0] === 'wadouri' + + vec3.set( + refIppVec, + referenceImagePositionPatient[0], + referenceImagePositionPatient[1], + referenceImagePositionPatient[2] + ); + + let sortedImageIds: string[]; + let zSpacing: number; + + function getDistance(imageId: string) { + const { imagePositionPatient } = metaData.get('imagePlaneModule', imageId); + + const positionVector = vec3.create(); + + vec3.sub( + positionVector, + referenceImagePositionPatient, + imagePositionPatient + ); + + return vec3.dot(positionVector, scanAxisNormal); + } + + /** + * If we are using wadors and so have all image metadata cached ahead of time, + * then sort by image position in 3D space, and calculate average slice + * spacing from the entire volume. If not, then use the sampled images (1st + * and middle) to calculate slice spacing, and use the provided imageId order. + * Correct sorting must be done ahead of time. + */ + if (!usingWadoUri) { + const distanceImagePairs = imageIds.map((imageId) => { + const distance = getDistance(imageId); + + return { + distance, + imageId, + }; + }); + + distanceImagePairs.sort((a, b) => b.distance - a.distance); + + sortedImageIds = distanceImagePairs.map((a) => a.imageId); + const numImages = distanceImagePairs.length; + + // Calculated average spacing. + // We would need to resample if these are not similar. + // It should be up to the host app to do this if it needed to. + zSpacing = + Math.abs( + distanceImagePairs[numImages - 1].distance - + distanceImagePairs[0].distance + ) / + (numImages - 1); + } else { + // Using wadouri, so we have only prefetched the first, middle, and last + // images for metadata. Assume initial imageId array order is pre-sorted, + // but check orientation. + const prefetchedImageIds = [ + imageIds[0], + imageIds[Math.floor(imageIds.length / 2)], + ]; + sortedImageIds = imageIds; + const firstImageDistance = getDistance(prefetchedImageIds[0]); + const middleImageDistance = getDistance(prefetchedImageIds[1]); + if (firstImageDistance - middleImageDistance < 0) { + sortedImageIds.reverse(); + } + + // Calculate average spacing between the first and middle prefetched images, + // otherwise fall back to DICOM `spacingBetweenSlices` + const metadataForMiddleImage = metaData.get( + 'imagePlaneModule', + prefetchedImageIds[1] + ); + if (!metadataForMiddleImage) { + throw new Error('Incomplete metadata required for volume construction.'); + } + + const positionVector = vec3.create(); + + vec3.sub( + positionVector, + referenceImagePositionPatient, + metadataForMiddleImage.imagePositionPatient + ); + const distanceBetweenFirstAndMiddleImages = vec3.dot( + positionVector, + scanAxisNormal + ); + zSpacing = + Math.abs(distanceBetweenFirstAndMiddleImages) / + Math.floor(imageIds.length / 2); + } + + const { imagePositionPatient: origin } = metaData.get( + 'imagePlaneModule', + sortedImageIds[0] + ); + + const result: SortedImageIdsItem = { + zSpacing, + origin, + sortedImageIds, + }; + + return result; +} diff --git a/extensions/cornerstone/src/services/ViewportService/CornerstoneViewportService.ts b/extensions/cornerstone/src/services/ViewportService/CornerstoneViewportService.ts index 05e4e382c13..5d8143ddf2f 100644 --- a/extensions/cornerstone/src/services/ViewportService/CornerstoneViewportService.ts +++ b/extensions/cornerstone/src/services/ViewportService/CornerstoneViewportService.ts @@ -6,6 +6,7 @@ import { getRenderingEngine, utilities as csUtils, VolumeViewport, + BaseVolumeViewport, cache, } from '@cornerstonejs/core'; @@ -31,6 +32,8 @@ import JumpPresets from '../../utils/JumpPresets'; const EVENTS = { VIEWPORT_DATA_CHANGED: 'event::cornerstoneViewportService:viewportDataChanged', + VIEWPORT_STACK_SET: 'event::cornerstone::viewportservice:viewportstackset', + VIEWPORT_VOLUME_SET: 'event::cornerstone::viewportservice:viewportvolumeset', }; /** @@ -227,6 +230,7 @@ class CornerstoneViewportService implements IViewportService { const type = viewportInfo.getViewportType(); const background = viewportInfo.getBackground(); const orientation = viewportInfo.getOrientation(); + const displayArea = viewportInfo.getDisplayArea(); const viewportInput: Types.PublicViewportInput = { viewportId, @@ -235,6 +239,7 @@ class CornerstoneViewportService implements IViewportService { defaultOptions: { background, orientation, + displayArea, }, }; @@ -341,11 +346,54 @@ class CornerstoneViewportService implements IViewportService { properties.invert = voiInverted; } + //Applying Zoom, Pan & WL values from State management + const { + StateManagementService, + HangingProtocolService, + } = this.servicesManager.services; + + const previousViewportState = this._getPreviousViewportState( + HangingProtocolService, + StateManagementService + ); + + if (previousViewportState) { + properties.voiRange = previousViewportState.prop.voiRange; + initialImageIndexToUse = this._getInitialImageIndex( + imageIds.length, + Math.round(imageIds.length / previousViewportState.imageFactor), + null + ); + } + viewport.setStack(imageIds, initialImageIndexToUse).then(() => { viewport.setProperties(properties); + if (previousViewportState) { + viewport.setCamera(previousViewportState.camera); + } + this._broadcastEvent(EVENTS.VIEWPORT_STACK_SET, { + viewport, + imageIds, + initialImageIndexToUse, + }); }); } + private _getPreviousViewportState( + HangingProtocolService: any, + StateManagementService: any + ) { + const currentHangingProtocol: string = HangingProtocolService.protocol.id; + if (currentHangingProtocol.toLowerCase().includes('axial')) { + return StateManagementService.getViewportState('axial'); + } else if (currentHangingProtocol.toLowerCase().includes('coronal')) { + return StateManagementService.getViewportState('coronal'); + } else if (currentHangingProtocol.toLowerCase().includes('sagittal')) { + return StateManagementService.getViewportState('sagittal'); + } + return null; + } + private _getInitialImageIndexForStackViewport( viewportInfo: ViewportInfo, imageIds?: string[] @@ -585,6 +633,11 @@ class CornerstoneViewportService implements IViewportService { } viewport.render(); + + this._broadcastEvent(EVENTS.VIEWPORT_VOLUME_SET, { + viewport, + volumeInputArray, + }); } // Todo: keepCamera is an interim solution until we have a better solution for @@ -643,7 +696,7 @@ class CornerstoneViewportService implements IViewportService { } _setDisplaySets( - viewport: StackViewport | VolumeViewport, + viewport: StackViewport | VolumeViewport | VolumeViewport3D, viewportData: StackViewportData | VolumeViewportData, viewportInfo: ViewportInfo ): void { @@ -653,7 +706,7 @@ class CornerstoneViewportService implements IViewportService { viewportData as StackViewportData, viewportInfo ); - } else if (viewport instanceof VolumeViewport) { + } else if (viewport instanceof BaseVolumeViewport) { this._setVolumeViewport( viewport, viewportData as VolumeViewportData, diff --git a/extensions/cornerstone/src/services/ViewportService/Viewport.ts b/extensions/cornerstone/src/services/ViewportService/Viewport.ts index 03fce0312ce..099f8c60c10 100644 --- a/extensions/cornerstone/src/services/ViewportService/Viewport.ts +++ b/extensions/cornerstone/src/services/ViewportService/Viewport.ts @@ -18,8 +18,9 @@ export type ViewportOptions = { viewportType: Enums.ViewportType; toolGroupId: string; viewportId: string; - orientation?: Types.Orientation; + orientation?: Enums.OrientationAxis; background?: Types.Point3; + displayArea?: Types.DisplayArea; syncGroups?: SyncGroup[]; initialImageOptions?: InitialImageOptions; customViewportProps?: Record; @@ -36,6 +37,7 @@ export type PublicViewportOptions = { viewportId?: string; orientation?: string; background?: Types.Point3; + displayArea?: Types.DisplayArea; syncGroups?: SyncGroup[]; initialImageOptions?: InitialImageOptions; customViewportProps?: Record; @@ -232,10 +234,14 @@ class ViewportInfo { return this.viewportOptions.background || [0, 0, 0]; } - public getOrientation(): Types.Orientation { + public getOrientation(): Enums.OrientationAxis { return this.viewportOptions.orientation; } + public getDisplayArea(): Types.DisplayArea { + return this.viewportOptions.displayArea; + } + public getInitialImageOptions(): InitialImageOptions { return this.viewportOptions.initialImageOptions; } diff --git a/extensions/cornerstone/src/state.ts b/extensions/cornerstone/src/state.ts index e1d67a56159..0891c8be2ef 100644 --- a/extensions/cornerstone/src/state.ts +++ b/extensions/cornerstone/src/state.ts @@ -27,7 +27,9 @@ const setEnabledElement = ( * * @return {HTMLElement} Active viewport element. */ -const getEnabledElement = viewportIndex => { +const getEnabledElement = ( + viewportIndex: number +): { element: HTMLElement; context: string } => { return state.enabledElements[viewportIndex]; }; diff --git a/extensions/cornerstone/src/utils/dicomLoaderService.js b/extensions/cornerstone/src/utils/dicomLoaderService.js index 54836fc1277..b21acea4fea 100644 --- a/extensions/cornerstone/src/utils/dicomLoaderService.js +++ b/extensions/cornerstone/src/utils/dicomLoaderService.js @@ -62,7 +62,8 @@ const wadorsRetriever = ( seriesInstanceUID, sopInstanceUID, headers = DICOMWeb.getAuthorizationHeader(), - errorInterceptor = errorHandler.getHTTPErrorHandler() + errorInterceptor = errorHandler.getHTTPErrorHandler(), + withCredentials = true ) => { const config = { url, @@ -75,6 +76,7 @@ const wadorsRetriever = ( studyInstanceUID, seriesInstanceUID, sopInstanceUID, + withCredentials }); }; diff --git a/extensions/cornerstone/src/utils/getCornerstoneViewportType.ts b/extensions/cornerstone/src/utils/getCornerstoneViewportType.ts index 2e19312b6fd..23ad9a02571 100644 --- a/extensions/cornerstone/src/utils/getCornerstoneViewportType.ts +++ b/extensions/cornerstone/src/utils/getCornerstoneViewportType.ts @@ -2,6 +2,7 @@ import { Enums } from '@cornerstonejs/core'; const STACK = 'stack'; const VOLUME = 'volume'; +const VOLUME_3D = 'volume3d'; export default function getCornerstoneViewportType( viewportType: string @@ -14,6 +15,10 @@ export default function getCornerstoneViewportType( return Enums.ViewportType.ORTHOGRAPHIC; } + if (viewportType.toLowerCase() === VOLUME_3D) { + return Enums.ViewportType.VOLUME_3D; + } + throw new Error( `Invalid viewport type: ${viewportType}. Valid types are: stack, volume` ); diff --git a/extensions/cornerstone/src/utils/interleaveCenterLoader.ts b/extensions/cornerstone/src/utils/interleaveCenterLoader.ts index 0047f0ac0ab..8d29f58fdef 100644 --- a/extensions/cornerstone/src/utils/interleaveCenterLoader.ts +++ b/extensions/cornerstone/src/utils/interleaveCenterLoader.ts @@ -81,9 +81,13 @@ export default function interleaveCenterLoader({ return; } - const requestImageIds = requests.map(request => { - return request.imageId; - }); + const requestImageIds = requests + .filter(request => { + return request?.imageId; + }) + .map(request => { + return request.imageId; + }); const imageIds = getInterleavedFrames(requestImageIds); diff --git a/extensions/default/src/DicomJSONDataSource/index.js b/extensions/default/src/DicomJSONDataSource/index.js index 241d430af9e..3570f0c3321 100644 --- a/extensions/default/src/DicomJSONDataSource/index.js +++ b/extensions/default/src/DicomJSONDataSource/index.js @@ -40,10 +40,22 @@ const findStudies = (key, value) => { return studies; }; +let _dicomJsonConfig = null; + function createDicomJSONApi(dicomJsonConfig) { - const { name, wadoRoot } = dicomJsonConfig; + var { name, wadoRoot } = dicomJsonConfig; + const init = config => { + _dicomJsonConfig = config; + name = _dicomJsonConfig.name; + wadoRoot = _dicomJsonConfig.wadoRoot; + }; + + init(dicomJsonConfig); const implementation = { + updateConfig: (dicomWebConfig) => { + init(dicomWebConfig); + }, initialize: async ({ params, query, url }) => { if (!url) url = query.get('url'); let metaData = getMetaDataByURL(url); @@ -239,12 +251,12 @@ function createDicomJSONApi(dicomJsonConfig) { const imageId = getImageId({ instance, frame: i, - config: dicomJsonConfig, + config: _dicomJsonConfig, }); imageIds.push(imageId); } } else { - const imageId = getImageId({ instance, config: dicomJsonConfig }); + const imageId = getImageId({ instance, config: _dicomJsonConfig }); imageIds.push(imageId); } }); diff --git a/extensions/default/src/DicomWebDataSource/index.js b/extensions/default/src/DicomWebDataSource/index.js index ccb61f620e0..d4e84d590c4 100644 --- a/extensions/default/src/DicomWebDataSource/index.js +++ b/extensions/default/src/DicomWebDataSource/index.js @@ -1,3 +1,4 @@ +import { pubSubServiceInterface } from '@ohif/core'; import { api } from 'dicomweb-client'; import { DicomMetadataStore, @@ -35,7 +36,9 @@ const ImplementationVersionName = 'OHIF-VIEWER-2.0.0'; const EXPLICIT_VR_LITTLE_ENDIAN = '1.2.840.10008.1.2.1'; const metadataProvider = classes.MetadataProvider; - +let _dicomWebConfig = null; +let _qidoDicomWebClient = null; +let _wadoDicomWebClient = null; /** * * @param {string} name - Data source name @@ -49,48 +52,67 @@ const metadataProvider = classes.MetadataProvider; * @param {bool} lazyLoadStudy - "enableStudyLazyLoad"; Request series meta async instead of blocking * @param {string|bool} singlepart - indicates of the retrieves can fetch singlepart. Options are bulkdata, video, image or boolean true */ -function createDicomWebApi(dicomWebConfig, userAuthenticationService) { - const { - qidoRoot, - wadoRoot, - enableStudyLazyLoad, - supportsFuzzyMatching, - supportsWildcard, - supportsReject, - staticWado, - singlepart, - } = dicomWebConfig; - - const qidoConfig = { - url: qidoRoot, - staticWado, - singlepart, - headers: userAuthenticationService.getAuthorizationHeader(), - errorInterceptor: errorHandler.getHTTPErrorHandler(), - }; - - const wadoConfig = { - url: wadoRoot, - staticWado, - singlepart, - headers: userAuthenticationService.getAuthorizationHeader(), - errorInterceptor: errorHandler.getHTTPErrorHandler(), +function createDicomWebApi(webConfig, userAuthenticationService) { + const initClients = config => { + _dicomWebConfig = config; + + const qidoConfig = { + url: config.qidoRoot, + staticWado: config.staticWado, + singlepart: config.singlepart, + headers: userAuthenticationService.getAuthorizationHeader(), + errorInterceptor: errorHandler.getHTTPErrorHandler(), + }; + + const wadoConfig = { + url: config.wadoRoot, + staticWado: config.staticWado, + singlepart: config.singlepart, + headers: userAuthenticationService.getAuthorizationHeader(), + errorInterceptor: errorHandler.getHTTPErrorHandler(), + }; + + // TODO -> Two clients sucks, but its better than 1000. + // TODO -> We'll need to merge auth later. + _qidoDicomWebClient = config.staticWado + ? new StaticWadoClient(qidoConfig) + : new api.DICOMwebClient(qidoConfig); + + _wadoDicomWebClient = config.staticWado + ? new StaticWadoClient(wadoConfig) + : new api.DICOMwebClient(wadoConfig); }; - // TODO -> Two clients sucks, but its better than 1000. - // TODO -> We'll need to merge auth later. - const qidoDicomWebClient = staticWado - ? new StaticWadoClient(qidoConfig) - : new api.DICOMwebClient(qidoConfig); + initClients(webConfig); - const wadoDicomWebClient = staticWado - ? new StaticWadoClient(wadoConfig) - : new api.DICOMwebClient(wadoConfig); + const pubSubService = Object.assign( + { + EVENTS: { + NEW_STUDY: 'event::DicomWebDatasource::NEW_STUDY', + }, + listeners: [], + }, + pubSubServiceInterface + ); const implementation = { + updateConfig: dicomWebConfig => { + initClients(dicomWebConfig); + }, + onNewStudy: callback => { + pubSubService.subscribe(pubSubService.EVENTS.NEW_STUDY, callback); + }, + setNewStudy: ({ studyInstanceUIDs, seriesInstanceUIDs }) => { + pubSubService._broadcastEvent(pubSubService.EVENTS.NEW_STUDY, { + studyInstanceUIDs, + seriesInstanceUIDs, + }); + }, initialize: ({ params, query }) => { const { StudyInstanceUIDs: paramsStudyInstanceUIDs } = params; + const { SeriesInstanceUIDs: paramsSeriesInstanceUIDs } = params; const queryStudyInstanceUIDs = query.getAll('StudyInstanceUIDs'); + const querySeriesInstanceUIDs = query.getAll('SeriesInstanceUIDs'); const StudyInstanceUIDs = (queryStudyInstanceUIDs.length && queryStudyInstanceUIDs) || @@ -99,25 +121,41 @@ function createDicomWebApi(dicomWebConfig, userAuthenticationService) { StudyInstanceUIDs && Array.isArray(StudyInstanceUIDs) ? StudyInstanceUIDs : [StudyInstanceUIDs]; - return StudyInstanceUIDsAsArray; + + const SeriesInstanceUIDs = + querySeriesInstanceUIDs || paramsSeriesInstanceUIDs; + const SeriesInstanceUIDsAsArray = + SeriesInstanceUIDs && Array.isArray(SeriesInstanceUIDs) + ? SeriesInstanceUIDs + : [SeriesInstanceUIDs]; + + let result = { + studyInstanceUIDs: StudyInstanceUIDsAsArray, + seriesInstanceUIDs: SeriesInstanceUIDsAsArray, + filters: null, + sortCriteria: null, + sortFunction: null, + }; + + return result; }, query: { studies: { mapParams: mapParams.bind(), - search: async function (origParams) { + search: async function(origParams) { const headers = userAuthenticationService.getAuthorizationHeader(); if (headers) { - qidoDicomWebClient.headers = headers; + _qidoDicomWebClient.headers = headers; } const { studyInstanceUid, seriesInstanceUid, ...mappedParams } = mapParams(origParams, { - supportsFuzzyMatching, - supportsWildcard, + supportsFuzzyMatching: _dicomWebConfig.supportsFuzzyMatching, + supportsWildcard: _dicomWebConfig.supportsWildcard, }) || {}; const results = await qidoSearch( - qidoDicomWebClient, + _qidoDicomWebClient, undefined, undefined, mappedParams @@ -129,14 +167,14 @@ function createDicomWebApi(dicomWebConfig, userAuthenticationService) { }, series: { // mapParams: mapParams.bind(), - search: async function (studyInstanceUid) { + search: async function(studyInstanceUid) { const headers = userAuthenticationService.getAuthorizationHeader(); if (headers) { - qidoDicomWebClient.headers = headers; + _qidoDicomWebClient.headers = headers; } const results = await seriesInStudy( - qidoDicomWebClient, + _qidoDicomWebClient, studyInstanceUid ); @@ -148,12 +186,12 @@ function createDicomWebApi(dicomWebConfig, userAuthenticationService) { search: (studyInstanceUid, queryParameters) => { const headers = userAuthenticationService.getAuthorizationHeader(); if (headers) { - qidoDicomWebClient.headers = headers; + _qidoDicomWebClient.headers = headers; } qidoSearch.call( undefined, - qidoDicomWebClient, + _qidoDicomWebClient, studyInstanceUid, null, queryParameters @@ -174,7 +212,7 @@ function createDicomWebApi(dicomWebConfig, userAuthenticationService) { * or is already retrieved, or a promise to a URL for such use if a BulkDataURI */ directURL: params => { - return getDirectURL(wadoRoot, params); + return getDirectURL(_wadoDicomWebClient.wadoRoot, params); }, series: { metadata: async ({ @@ -183,10 +221,11 @@ function createDicomWebApi(dicomWebConfig, userAuthenticationService) { sortCriteria, sortFunction, madeInClient = false, + withCredentials = !!webConfig.withCredentials } = {}) => { const headers = userAuthenticationService.getAuthorizationHeader(); if (headers) { - wadoDicomWebClient.headers = headers; + _wadoDicomWebClient.headers = headers; } if (!StudyInstanceUID) { @@ -195,13 +234,14 @@ function createDicomWebApi(dicomWebConfig, userAuthenticationService) { ); } - if (enableStudyLazyLoad) { + if (_dicomWebConfig.enableStudyLazyLoad) { return implementation._retrieveSeriesMetadataAsync( StudyInstanceUID, filters, sortCriteria, sortFunction, - madeInClient + madeInClient, + withCredentials ); } @@ -210,7 +250,8 @@ function createDicomWebApi(dicomWebConfig, userAuthenticationService) { filters, sortCriteria, sortFunction, - madeInClient + madeInClient, + withCredentials ); }, }, @@ -220,7 +261,7 @@ function createDicomWebApi(dicomWebConfig, userAuthenticationService) { dicom: async dataset => { const headers = userAuthenticationService.getAuthorizationHeader(); if (headers) { - wadoDicomWebClient.headers = headers; + _wadoDicomWebClient.headers = headers; } const meta = { @@ -244,7 +285,7 @@ function createDicomWebApi(dicomWebConfig, userAuthenticationService) { datasets: [part10Buffer], }; - await wadoDicomWebClient.storeInstances(options); + await _wadoDicomWebClient.storeInstances(options); }, }, _retrieveSeriesMetadataSync: async ( @@ -252,18 +293,20 @@ function createDicomWebApi(dicomWebConfig, userAuthenticationService) { filters, sortCriteria, sortFunction, - madeInClient + madeInClient, + withCredentials ) => { const enableStudyLazyLoad = false; // data is all SOPInstanceUIDs const data = await retrieveStudyMetadata( - wadoDicomWebClient, + _wadoDicomWebClient, StudyInstanceUID, enableStudyLazyLoad, filters, sortCriteria, - sortFunction + sortFunction, + withCredentials ); // first naturalize the data @@ -323,7 +366,8 @@ function createDicomWebApi(dicomWebConfig, userAuthenticationService) { filters, sortCriteria, sortFunction, - madeInClient = false + madeInClient = false, + withCredentials = false ) => { const enableStudyLazyLoad = true; // Get Series @@ -331,12 +375,13 @@ function createDicomWebApi(dicomWebConfig, userAuthenticationService) { preLoadData: seriesSummaryMetadata, promises: seriesPromises, } = await retrieveStudyMetadata( - wadoDicomWebClient, + _wadoDicomWebClient, StudyInstanceUID, enableStudyLazyLoad, filters, sortCriteria, - sortFunction + sortFunction, + withCredentials ); /** @@ -366,8 +411,7 @@ function createDicomWebApi(dicomWebConfig, userAuthenticationService) { // any implementation that stores static copies of the metadata StudyInstanceUID: naturalized.StudyInstanceUID, }; - // Todo: this needs to be from wado dicom web client - return qidoDicomWebClient.retrieveBulkData(options).then(val => { + return _qidoDicomWebClient.retrieveBulkData(options).then(val => { const ret = (val && val[0]) || undefined; value.Value = ret; return ret; @@ -384,9 +428,6 @@ function createDicomWebApi(dicomWebConfig, userAuthenticationService) { // Adding instanceMetadata to OHIF MetadataProvider naturalizedInstances.forEach((instance, index) => { - instance.wadoRoot = dicomWebConfig.wadoRoot; - instance.wadoUri = dicomWebConfig.wadoUri; - const imageId = implementation.getImageIdsForInstance({ instance, }); @@ -434,6 +475,23 @@ function createDicomWebApi(dicomWebConfig, userAuthenticationService) { setSuccessFlag(); }, deleteStudyMetadataPromise, + async getImageIdsForStudy(StudyInstanceUID) { + const seriesMetadata = await this.query.series.search(StudyInstanceUID); + const seriesDatasets = await Promise.all( + seriesMetadata.map(seriesMetadata => + _wadoDicomWebClient.retrieveSeriesMetadata({ + studyInstanceUID: StudyInstanceUID, + seriesInstanceUID: seriesMetadata.seriesInstanceUid, + }) + ) + ); + return seriesDatasets.map(instances => { + const naturalizedInstance = instances.map(naturalizeDataset); + return this.getImageIdsForDisplaySet({ + images: naturalizedInstance, + }); + }); + }, getImageIdsForDisplaySet(displaySet) { const images = displaySet.images; const imageIds = []; @@ -465,14 +523,14 @@ function createDicomWebApi(dicomWebConfig, userAuthenticationService) { const imageIds = getImageId({ instance, frame, - config: dicomWebConfig, + config: _dicomWebConfig, }); return imageIds; }, }; - if (supportsReject) { - implementation.reject = dcm4cheeReject(wadoRoot); + if (_dicomWebConfig.supportsReject) { + implementation.reject = dcm4cheeReject(_dicomWebConfig.wadoRoot); } return IWebApiDataSource.create(implementation); diff --git a/extensions/default/src/DicomWebDataSource/retrieveStudyMetadata.js b/extensions/default/src/DicomWebDataSource/retrieveStudyMetadata.js index faf5e2c9010..4d3f077e1a1 100644 --- a/extensions/default/src/DicomWebDataSource/retrieveStudyMetadata.js +++ b/extensions/default/src/DicomWebDataSource/retrieveStudyMetadata.js @@ -1,3 +1,4 @@ +import deepEqual from './utils/deepEqual.js'; import RetrieveMetadata from './wado/retrieveMetadata.js'; const moduleName = 'RetrieveStudyMetadata'; @@ -21,7 +22,8 @@ export function retrieveStudyMetadata( enableStudyLazyLoad, filters, sortCriteria, - sortFunction + sortFunction, + withCredentials ) { // @TODO: Whenever a study metadata request has failed, its related promise will be rejected once and for all // and further requests for that metadata will always fail. On failure, we probably need to remove the @@ -40,7 +42,15 @@ export function retrieveStudyMetadata( // Already waiting on result? Return cached promise if (StudyMetaDataPromises.has(StudyInstanceUID)) { - return StudyMetaDataPromises.get(StudyInstanceUID); + const filtersArray = StudyMetaDataPromises.get(StudyInstanceUID); + + const foundFilter = filtersArray.find((item, index, obj) => { + return deepEqual(item.filters, filters); + }); + + if (foundFilter) { + return foundFilter.promise; + } } // Create a promise to handle the data retrieval @@ -51,14 +61,25 @@ export function retrieveStudyMetadata( enableStudyLazyLoad, filters, sortCriteria, - sortFunction + sortFunction, + withCredentials ).then(function(data) { resolve(data); }, reject); }); + let filtersArray; + // Store the promise in cache - StudyMetaDataPromises.set(StudyInstanceUID, promise); + if (StudyMetaDataPromises.has(StudyInstanceUID)) { + filtersArray = StudyMetaDataPromises.get(StudyInstanceUID); + } else { + filtersArray = []; + + StudyMetaDataPromises.set(filtersArray); + } + + filtersArray.push({ promise, filters }); return promise; } diff --git a/extensions/default/src/DicomWebDataSource/utils/deepEqual.js b/extensions/default/src/DicomWebDataSource/utils/deepEqual.js new file mode 100644 index 00000000000..d1d27e6fc28 --- /dev/null +++ b/extensions/default/src/DicomWebDataSource/utils/deepEqual.js @@ -0,0 +1,22 @@ +export default function deepEqual(object1, object2) { + const keys1 = Object.keys(object1); + const keys2 = Object.keys(object2); + if (keys1.length !== keys2.length) { + return false; + } + for (const key of keys1) { + const val1 = object1[key]; + const val2 = object2[key]; + const areObjects = isObject(val1) && isObject(val2); + if ( + (areObjects && !deepEqual(val1, val2)) || + (!areObjects && val1 !== val2) + ) { + return false; + } + } + return true; +} +function isObject(object) { + return object != null && typeof object === 'object'; +} diff --git a/extensions/default/src/DicomWebDataSource/wado/retrieveMetadata.js b/extensions/default/src/DicomWebDataSource/wado/retrieveMetadata.js index d70a2cdccd0..7a1862d510c 100644 --- a/extensions/default/src/DicomWebDataSource/wado/retrieveMetadata.js +++ b/extensions/default/src/DicomWebDataSource/wado/retrieveMetadata.js @@ -17,7 +17,8 @@ async function RetrieveMetadata( enableStudyLazyLoad, filters = {}, sortCriteria, - sortFunction + sortFunction, + withCredentials ) { const RetrieveMetadataLoader = enableStudyLazyLoad !== false @@ -29,7 +30,8 @@ async function RetrieveMetadata( studyInstanceUid, filters, sortCriteria, - sortFunction + sortFunction, + withCredentials ); const data = await retrieveMetadataLoader.execLoad(); diff --git a/extensions/default/src/DicomWebDataSource/wado/retrieveMetadataLoader.js b/extensions/default/src/DicomWebDataSource/wado/retrieveMetadataLoader.js index 49302f7a835..c917e03f1d0 100644 --- a/extensions/default/src/DicomWebDataSource/wado/retrieveMetadataLoader.js +++ b/extensions/default/src/DicomWebDataSource/wado/retrieveMetadataLoader.js @@ -19,13 +19,15 @@ export default class RetrieveMetadataLoader { studyInstanceUID, filters = {}, sortCriteria, - sortFunction + sortFunction, + withCredentials ) { this.client = client; this.studyInstanceUID = studyInstanceUID; this.filters = filters; this.sortCriteria = sortCriteria; this.sortFunction = sortFunction; + this.withCredentials = withCredentials; } async execLoad() { diff --git a/extensions/default/src/DicomWebDataSource/wado/retrieveMetadataLoaderAsync.js b/extensions/default/src/DicomWebDataSource/wado/retrieveMetadataLoaderAsync.js index 096c3c8183f..f1b9043c71a 100644 --- a/extensions/default/src/DicomWebDataSource/wado/retrieveMetadataLoaderAsync.js +++ b/extensions/default/src/DicomWebDataSource/wado/retrieveMetadataLoaderAsync.js @@ -15,7 +15,8 @@ import RetrieveMetadataLoader from './retrieveMetadataLoader'; function makeSeriesAsyncLoader( client, studyInstanceUID, - seriesInstanceUIDList + seriesInstanceUIDList, + withCredentials ) { return Object.freeze({ hasNext() { @@ -26,6 +27,7 @@ function makeSeriesAsyncLoader( return client.retrieveSeriesMetadata({ studyInstanceUID, seriesInstanceUID, + withCredentials }); }, }); @@ -47,17 +49,19 @@ export default class RetrieveMetadataLoaderAsync extends RetrieveMetadataLoader studyInstanceUID, filters: { seriesInstanceUID } = {}, client, + withCredentials } = this; if (seriesInstanceUID) { const options = { studyInstanceUID, queryParams: { SeriesInstanceUID: seriesInstanceUID }, + withCredentials }; preLoaders.push(client.searchForSeries.bind(client, options)); } // Fallback preloader - preLoaders.push(client.searchForSeries.bind(client, { studyInstanceUID })); + preLoaders.push(client.searchForSeries.bind(client, { studyInstanceUID, withCredentials })); yield* preLoaders; } @@ -80,14 +84,15 @@ export default class RetrieveMetadataLoaderAsync extends RetrieveMetadataLoader } async load(preLoadData) { - const { client, studyInstanceUID } = this; + const { client, studyInstanceUID, withCredentials } = this; const seriesInstanceUIDs = preLoadData.map(s => s.SeriesInstanceUID); const seriesAsyncLoader = makeSeriesAsyncLoader( client, studyInstanceUID, - seriesInstanceUIDs + seriesInstanceUIDs, + withCredentials ); const promises = []; diff --git a/extensions/default/src/DicomWebDataSource/wado/retrieveMetadataLoaderSync.js b/extensions/default/src/DicomWebDataSource/wado/retrieveMetadataLoaderSync.js index 6ca47ce9db2..25554331b32 100644 --- a/extensions/default/src/DicomWebDataSource/wado/retrieveMetadataLoaderSync.js +++ b/extensions/default/src/DicomWebDataSource/wado/retrieveMetadataLoaderSync.js @@ -12,10 +12,11 @@ import RetrieveMetadataLoader from './retrieveMetadataLoader'; */ export default class RetrieveMetadataLoaderSync extends RetrieveMetadataLoader { getOptions() { - const { studyInstanceUID, filters } = this; + const { studyInstanceUID, filters, withCredentials } = this; const options = { studyInstanceUID, + withCredentials, }; const { seriesInstanceUID } = filters; @@ -35,6 +36,7 @@ export default class RetrieveMetadataLoaderSync extends RetrieveMetadataLoader { studyInstanceUID, filters: { seriesInstanceUID } = {}, client, + withCredentials, } = this; if (seriesInstanceUID) { @@ -42,12 +44,13 @@ export default class RetrieveMetadataLoaderSync extends RetrieveMetadataLoader { client.retrieveSeriesMetadata.bind(client, { studyInstanceUID, seriesInstanceUID, + withCredentials }) ); } loaders.push( - client.retrieveStudyMetadata.bind(client, { studyInstanceUID }) + client.retrieveStudyMetadata.bind(client, { studyInstanceUID, withCredentials }) ); yield* loaders; diff --git a/extensions/default/src/ViewerLayout/index.tsx b/extensions/default/src/ViewerLayout/index.tsx index 46df33cd551..5fd6fcb59d6 100644 --- a/extensions/default/src/ViewerLayout/index.tsx +++ b/extensions/default/src/ViewerLayout/index.tsx @@ -33,6 +33,8 @@ function ViewerLayout({ rightPanels = [], leftPanelDefaultClosed = false, rightPanelDefaultClosed = false, + disableHeader = false, + viewerLayoutHeight = 'calc(100vh - 52px)', }) { const [appConfig] = useAppConfig(); const navigate = useNavigate(); @@ -41,13 +43,21 @@ function ViewerLayout({ const onClickReturnButton = () => { const { pathname } = location; const dataSourceIdx = pathname.indexOf('/', 1); - const search = - dataSourceIdx === -1 - ? undefined - : `datasources=${pathname.substring(dataSourceIdx + 1)}`; + const query = new URLSearchParams(window.location.search); + const configUrl = query.get('configUrl'); + + const searchQuery = new URLSearchParams(); + if (dataSourceIdx !== -1) { + searchQuery.append('datasources', pathname.substring(dataSourceIdx + 1)); + } + + if (configUrl) { + searchQuery.append('configUrl', configUrl); + } + navigate({ pathname: '/', - search, + search: decodeURIComponent(searchQuery.toString()), }); }; @@ -71,7 +81,7 @@ function ViewerLayout({ onClick: () => show({ content: AboutModal, - title: 'About OHIF Viewer', + title: 'About Rapid AI Viewer', contentProps: { versionNumber, buildNumber }, }), }, @@ -200,21 +210,23 @@ function ViewerLayout({ return (
-
- -
- -
-
-
+ {!disableHeader && ( +
+ +
+ +
+
+
+ )}
{showLoadingIndicator && ( @@ -270,6 +282,8 @@ ViewerLayout.propTypes = { rightPanelDefaultClosed: PropTypes.bool.isRequired, /** Responsible for rendering our grid of viewports; provided by consuming application */ children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]).isRequired, + disableHeader: PropTypes.bool.isRequired, + viewerLayoutHeight: PropTypes.string.isRequired, }; export default ViewerLayout; diff --git a/package.json b/package.json index a9464a4d0e9..46c63b74f61 100644 --- a/package.json +++ b/package.json @@ -147,5 +147,8 @@ }, "resolutions": { "**/@babel/runtime": "^7.20.13" + }, + "publishConfig": { + "registry": "https://nexus.infrastructure.rapid-sys.com/repository/npm-internal" } } diff --git a/platform/core/src/DataSources/IWebApiDataSource.js b/platform/core/src/DataSources/IWebApiDataSource.js index 2cf785be335..aa3880036fb 100644 --- a/platform/core/src/DataSources/IWebApiDataSource.js +++ b/platform/core/src/DataSources/IWebApiDataSource.js @@ -21,6 +21,10 @@ function create({ deleteStudyMetadataPromise, getImageIdsForDisplaySet, getImageIdsForInstance, + getImageIdsForStudy = null, + onNewStudy = null, + setNewStudy = null, + updateConfig = null, }) { const defaultQuery = { studies: { @@ -37,7 +41,7 @@ function create({ * @param {number} params.resultsPerPage */ mapParams: params => params, - requestResults: () => {}, + requestResults: () => { }, processResults: results => results, }, series: {}, @@ -66,6 +70,10 @@ function create({ deleteStudyMetadataPromise, getImageIdsForDisplaySet, getImageIdsForInstance, + getImageIdsForStudy, + setNewStudy, + onNewStudy, + updateConfig, }; } diff --git a/platform/ui/src/components/AboutModal/AboutModal.tsx b/platform/ui/src/components/AboutModal/AboutModal.tsx index d4eed452c89..9a53070a544 100644 --- a/platform/ui/src/components/AboutModal/AboutModal.tsx +++ b/platform/ui/src/components/AboutModal/AboutModal.tsx @@ -58,19 +58,19 @@ const AboutModal = ({ buildNumber, versionNumber }) => {
{renderRowTitle('Important Links')}
- + Visit the forum Report an issue - + More details @@ -80,14 +80,9 @@ const AboutModal = ({ buildNumber, versionNumber }) => {
- {/* */} diff --git a/platform/ui/src/components/Header/Header.tsx b/platform/ui/src/components/Header/Header.tsx index e444fb6ac05..a7ffccb8bc8 100644 --- a/platform/ui/src/components/Header/Header.tsx +++ b/platform/ui/src/components/Header/Header.tsx @@ -4,43 +4,73 @@ import { useTranslation } from 'react-i18next'; import classNames from 'classnames'; import { NavBar, Svg, Icon, IconButton, Dropdown } from '../'; -function Header({ children, menuOptions, isReturnEnabled, onClickReturnButton, isSticky, WhiteLabeling }) { +function Header({ + children, + menuOptions, + isReturnEnabled, + onClickReturnButton, + isSticky, + WhiteLabeling, +}) { const { t } = useTranslation('Header'); + const [matches, setMatches] = React.useState( + window.matchMedia('(min-width: 600px)').matches + ); + + React.useEffect(() => { + window + .matchMedia('(min-width: 600px)') + .addEventListener('change', e => setMatches(e.matches)); + }, []); // TODO: this should be passed in as a prop instead and the react-router-dom // dependency should be dropped const onClickReturn = () => { if (isReturnEnabled && onClickReturnButton) { - onClickReturnButton() + onClickReturnButton(); } }; - const CustomLogo = (React) => { - return WhiteLabeling.createLogoComponentFn(React) - } + const CustomLogo = React => { + return WhiteLabeling.createLogoComponentFn(React); + }; return ( - +
{/* // TODO: Should preserve filter/sort // Either injected service? Or context (like react router's `useLocation`?) */}
- {isReturnEnabled && } -
{WhiteLabeling ? CustomLogo(React) : }
+ {isReturnEnabled && ( + + )} + {Boolean(matches) && ( +
+ {WhiteLabeling ? CustomLogo(React) : }{' '} +
+ )}
{children}
- - {t('INVESTIGATIONAL USE ONLY')} - + {Boolean(matches) ? ( + + {t('INVESTIGATIONAL USE ONLY')} + + ) : null} { const [showPatientInfo, setShowPatientInfo] = useState(patientInfoVisibility); @@ -64,7 +66,7 @@ const ViewportActionBar = ({ return (
{label} {showStatus && getStatusComponent()}
-
+
{studyDate} @@ -125,19 +127,21 @@ const ViewportActionBar = ({
)} -
- -
+ {showPatientInfoIcon && ( +
+ +
+ )}
); }; @@ -148,6 +152,7 @@ ViewportActionBar.propTypes = { showCine: PropTypes.bool, cineProps: PropTypes.object, showPatientInfo: PropTypes.bool, + showPatientInfoIcon: PropTypes.bool, studyData: PropTypes.shape({ // useAltStyling: PropTypes.bool, @@ -175,6 +180,7 @@ ViewportActionBar.defaultProps = { showStatus: true, showNavArrows: true, showPatientInfo: false, + showPatientInfoIcon: true, }; export default ViewportActionBar; diff --git a/platform/ui/src/components/ViewportPane/ViewportPane.tsx b/platform/ui/src/components/ViewportPane/ViewportPane.tsx index 842997e1e94..b888081073b 100644 --- a/platform/ui/src/components/ViewportPane/ViewportPane.tsx +++ b/platform/ui/src/components/ViewportPane/ViewportPane.tsx @@ -59,6 +59,7 @@ function ViewportPane({ // https://reactjs.org/docs/events.html#mouse-events // https://stackoverflow.com/questions/8378243/catch-scrolling-event-on-overflowhidden-element onMouseDown={onInteractionHandler} + onTouchStart={onInteractionHandler} onDoubleClick={onDoubleClick} onClick={onInteractionHandler} onScroll={onInteractionHandler} @@ -66,8 +67,10 @@ function ViewportPane({ className={classnames( 'w-full h-full rounded-md overflow-hidden hover:border-primary-light transition duration-300 group', { - 'border-2 border-primary-light': isActive, - 'border-2 border-transparent': !isActive, + 'border-2 border-primary-light': + isActive && !customStyle?.ohifDisableBorder, + 'border-2 border-transparent': + !isActive && !customStyle?.ohifDisableBorder, }, className )} @@ -79,8 +82,10 @@ function ViewportPane({ className={classnames( 'rounded-md w-full h-full overflow-hidden group-hover:border-transparent', { - 'border border-transparent': isActive, - 'border border-secondary-light': !isActive, + 'border border-transparent': + isActive && !customStyle?.ohifDisableBorder, + 'border border-secondary-light': + !isActive && !customStyle?.ohifDisableBorder, }, className )} @@ -108,7 +113,7 @@ ViewportPane.propTypes = { onDoubleClick: PropTypes.func, }; -const noop = () => {}; +const noop = () => { }; ViewportPane.defaultProps = { onInteraction: noop, diff --git a/platform/viewer-static/LICENSE b/platform/viewer-static/LICENSE new file mode 100644 index 00000000000..8b0905575ef --- /dev/null +++ b/platform/viewer-static/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015 Open Health Imaging Foundation + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/platform/viewer-static/README.md b/platform/viewer-static/README.md new file mode 100644 index 00000000000..f4d26aa6a60 --- /dev/null +++ b/platform/viewer-static/README.md @@ -0,0 +1,49 @@ +# ohif-viewer-static + +@ischemaview/ohif-viewer built and bundled into static assets + + +## Build +### Prerequisite +yarn install run on ````root```` project or ````platform/viewer```` +> NOTE: yarn@^1.18.0 required with workspaces-experimental=true. required. See [README of ohif-monorepo](https://github.com/ischemaview/rapid-dicom-viewer#to-develop) +### Build +````bash +# From within the platform/viewer-static directory +yarn build + +OR + +npm run build +```` + +## Publish +````bash +# From within the platform/viewer-static directory +npm publish + +OR + +yarn publish +```` +> NOTE: Nexus repository authentication required + +## Installation +```` +npm install @ischemaview/ohif-static-assets +```` + +### Copy via postinstall script (optional) +````bash +snippet of consuming projects package.json: + +{ + ... + "scripts": { + "postinstall": "./node_modules/@ischemaview/ohif-viewer-static/scripts/copy-folder-recursive-cli ./node_modules/@ischemaview/ohif-viewer--static/dist " + }, + .... +} + +# Where is the desired location for static assets +```` diff --git a/platform/viewer-static/dist/205.bundle.89155e0eacfb8efa042a.js b/platform/viewer-static/dist/205.bundle.89155e0eacfb8efa042a.js new file mode 100644 index 00000000000..6c512f9444d --- /dev/null +++ b/platform/viewer-static/dist/205.bundle.89155e0eacfb8efa042a.js @@ -0,0 +1,3 @@ +/*! For license information please see 205.bundle.89155e0eacfb8efa042a.js.LICENSE.txt */ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[205],{36205:function(t,r,e){e.r(r);var n=e(32735),o=e(60216),i=e.n(o);function a(t){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},a(t)}function c(){c=function(){return t};var t={},r=Object.prototype,e=r.hasOwnProperty,n="function"==typeof Symbol?Symbol:{},o=n.iterator||"@@iterator",i=n.asyncIterator||"@@asyncIterator",u=n.toStringTag||"@@toStringTag";function l(t,r,e){return Object.defineProperty(t,r,{value:e,enumerable:!0,configurable:!0,writable:!0}),t[r]}try{l({},"")}catch(t){l=function(t,r,e){return t[r]=e}}function f(t,r,e,n){var o=r&&r.prototype instanceof p?r:p,i=Object.create(o.prototype),a=new O(n||[]);return i._invoke=function(t,r,e){var n="suspendedStart";return function(o,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===o)throw i;return _()}for(e.method=o,e.arg=i;;){var a=e.delegate;if(a){var c=E(a,e);if(c){if(c===h)continue;return c}}if("next"===e.method)e.sent=e._sent=e.arg;else if("throw"===e.method){if("suspendedStart"===n)throw n="completed",e.arg;e.dispatchException(e.arg)}else"return"===e.method&&e.abrupt("return",e.arg);n="executing";var u=s(t,r,e);if("normal"===u.type){if(n=e.done?"completed":"suspendedYield",u.arg===h)continue;return{value:u.arg,done:e.done}}"throw"===u.type&&(n="completed",e.method="throw",e.arg=u.arg)}}}(t,e,a),i}function s(t,r,e){try{return{type:"normal",arg:t.call(r,e)}}catch(t){return{type:"throw",arg:t}}}t.wrap=f;var h={};function p(){}function y(){}function d(){}var v={};l(v,o,(function(){return this}));var m=Object.getPrototypeOf,g=m&&m(m(j([])));g&&g!==r&&e.call(g,o)&&(v=g);var w=d.prototype=p.prototype=Object.create(v);function b(t){["next","throw","return"].forEach((function(r){l(t,r,(function(t){return this._invoke(r,t)}))}))}function x(t,r){function n(o,i,c,u){var l=s(t[o],t,i);if("throw"!==l.type){var f=l.arg,h=f.value;return h&&"object"==a(h)&&e.call(h,"__await")?r.resolve(h.__await).then((function(t){n("next",t,c,u)}),(function(t){n("throw",t,c,u)})):r.resolve(h).then((function(t){f.value=t,c(f)}),(function(t){return n("throw",t,c,u)}))}u(l.arg)}var o;this._invoke=function(t,e){function i(){return new r((function(r,o){n(t,e,r,o)}))}return o=o?o.then(i,i):i()}}function E(t,r){var e=t.iterator[r.method];if(void 0===e){if(r.delegate=null,"throw"===r.method){if(t.iterator.return&&(r.method="return",r.arg=void 0,E(t,r),"throw"===r.method))return h;r.method="throw",r.arg=new TypeError("The iterator does not provide a 'throw' method")}return h}var n=s(e,t.iterator,r.arg);if("throw"===n.type)return r.method="throw",r.arg=n.arg,r.delegate=null,h;var o=n.arg;return o?o.done?(r[t.resultName]=o.value,r.next=t.nextLoc,"return"!==r.method&&(r.method="next",r.arg=void 0),r.delegate=null,h):o:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,h)}function L(t){var r={tryLoc:t[0]};1 in t&&(r.catchLoc=t[1]),2 in t&&(r.finallyLoc=t[2],r.afterLoc=t[3]),this.tryEntries.push(r)}function S(t){var r=t.completion||{};r.type="normal",delete r.arg,t.completion=r}function O(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(L,this),this.reset(!0)}function j(t){if(t){var r=t[o];if(r)return r.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,i=function r(){for(;++n=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var c=e.call(i,"catchLoc"),u=e.call(i,"finallyLoc");if(c&&u){if(this.prev=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&e.call(o,"finallyLoc")&&this.prev=0;--r){var e=this.tryEntries[r];if(e.finallyLoc===t)return this.complete(e.completion,e.afterLoc),S(e),h}},catch:function(t){for(var r=this.tryEntries.length-1;r>=0;--r){var e=this.tryEntries[r];if(e.tryLoc===t){var n=e.completion;if("throw"===n.type){var o=n.arg;S(e)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,r,e){return this.delegate={iterator:j(t),resultName:r,nextLoc:e},"next"===this.method&&(this.arg=void 0),h}},t}function u(t,r,e,n,o,i,a){try{var c=t[i](a),u=c.value}catch(t){return void e(t)}c.done?r(u):Promise.resolve(u).then(n,o)}function l(t,r){return function(t){if(Array.isArray(t))return t}(t)||function(t,r){var e=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null==e)return;var n,o,i=[],a=!0,c=!1;try{for(e=e.call(t);!(a=(n=e.next()).done)&&(i.push(n.value),!r||i.length!==r);a=!0);}catch(t){c=!0,o=t}finally{try{a||null==e.return||e.return()}finally{if(c)throw o}}return i}(t,r)||function(t,r){if(!t)return;if("string"==typeof t)return f(t,r);var e=Object.prototype.toString.call(t).slice(8,-1);"Object"===e&&t.constructor&&(e=t.constructor.name);if("Map"===e||"Set"===e)return Array.from(t);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return f(t,r)}(t,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function f(t,r){(null==r||r>t.length)&&(r=t.length);for(var e=0,n=new Array(r);e1)throw new Error("OHIFCornerstoneVideoViewport: only one display set is supported for dicom video right now");var e=r[0].videoUrl,o="video/mp4",i=l((0,n.useState)(null),2),a=i[0],f=i[1];return(0,n.useEffect)((function(){var t=function(){var t,r=(t=c().mark((function t(){return c().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e;case 2:f(e);case 3:case"end":return t.stop()}}),t)})),function(){var r=this,e=arguments;return new Promise((function(n,o){var i=t.apply(r,e);function a(t){u(i,n,o,a,c,"next",t)}function c(t){u(i,n,o,a,c,"throw",t)}a(void 0)}))});return function(){return r.apply(this,arguments)}}();t()}),[e]),n.createElement("div",{className:"bg-primary-black w-full h-full"},n.createElement("video",{src:a,controls:!0,controlsList:"nodownload",preload:"auto",className:"w-full h-full"},n.createElement("source",{src:a,type:o}),n.createElement("source",{src:a,type:o}),"Video src/type not supported:"," ",n.createElement("a",{href:a},a," of type ",o)))}s.propTypes={displaySets:i().arrayOf(i().object).isRequired},r.default=s}}]); +//# sourceMappingURL=205.bundle.89155e0eacfb8efa042a.js.map \ No newline at end of file diff --git a/platform/viewer-static/dist/205.bundle.89155e0eacfb8efa042a.js.LICENSE.txt b/platform/viewer-static/dist/205.bundle.89155e0eacfb8efa042a.js.LICENSE.txt new file mode 100644 index 00000000000..ae386fb79c9 --- /dev/null +++ b/platform/viewer-static/dist/205.bundle.89155e0eacfb8efa042a.js.LICENSE.txt @@ -0,0 +1 @@ +/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ diff --git a/platform/viewer-static/dist/205.bundle.89155e0eacfb8efa042a.js.map b/platform/viewer-static/dist/205.bundle.89155e0eacfb8efa042a.js.map new file mode 100644 index 00000000000..d1d36091b54 --- /dev/null +++ b/platform/viewer-static/dist/205.bundle.89155e0eacfb8efa042a.js.map @@ -0,0 +1 @@ +{"version":3,"file":"205.bundle.89155e0eacfb8efa042a.js","mappings":";uXACA,4gGAAAA,GAAA,wBAAAA,EAAA,sBAAAA,GAAA,iBAAAA,GAAA,0oDAAAA,EAAA,yBAAAA,GAAA,IAAAA,EAAA,uBAAAA,GAAA,4bAAAA,EAAA,yBAAAA,GAAA,IAAAA,EAAA,uBAAAA,GAAA,yhBAAAA,EAAA,yBAAAA,GAAA,IAAAA,EAAA,uBAAAA,GAAA,qGAAAA,EAAA,yBAAAA,GAAA,IAAAA,EAAA,uBAAAA,GAAA,+0CAEA,SAASC,EAAT,GAAuD,IAAfC,EAAe,EAAfA,YACtC,GAAIA,GAAeA,EAAYC,OAAS,EACtC,MAAM,IAAIC,MACR,6FAIJ,IAAQC,EAAaH,EAAY,GAAzBG,SACFC,EAAW,YACjB,KAAsBC,EAAAA,EAAAA,UAAS,MAA/B,GAAOC,EAAP,KAAYC,EAAZ,KAYA,OAVAC,EAAAA,EAAAA,YAAU,WACR,IAAMC,EAAI,gCAAG,8FACLN,EADK,OAEXI,EAAOJ,GAFI,yNAAH,qDAKVM,MACC,CAACN,IAIF,uBAAKO,UAAU,kCACb,yBACEC,IAAKL,EACLM,UAAQ,EACRC,aAAa,aACbC,QAAQ,OACRJ,UAAU,iBAEV,0BAAQC,IAAKL,EAAKS,KAAMX,IACxB,0BAAQO,IAAKL,EAAKS,KAAMX,IAR1B,gCASgC,IAC9B,qBAAGY,KAAMV,GACNA,EADH,YACiBF,KAOzBL,EAA6BkB,UAAY,CACvCjB,YAAakB,IAAAA,QAAkBA,IAAAA,QAAkBC,YAGnD","sources":["file:////Users/HemantP/Documents/RapidAI/RapidOHIFViewer/extensions/dicom-video/src/viewports/OHIFCornerstoneVideoViewport.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\n\nfunction OHIFCornerstoneVideoViewport({ displaySets }) {\n if (displaySets && displaySets.length > 1) {\n throw new Error(\n 'OHIFCornerstoneVideoViewport: only one display set is supported for dicom video right now'\n );\n }\n\n const { videoUrl } = displaySets[0];\n const mimeType = 'video/mp4';\n const [url, setUrl] = useState(null);\n\n useEffect(() => {\n const load = async () => {\n await videoUrl;\n setUrl(videoUrl);\n };\n\n load();\n }, [videoUrl]);\n\n // Need to copies of the source to fix a firefox bug\n return (\n
\n \n \n \n Video src/type not supported:{' '}\n \n {url} of type {mimeType}\n \n \n
\n );\n}\n\nOHIFCornerstoneVideoViewport.propTypes = {\n displaySets: PropTypes.arrayOf(PropTypes.object).isRequired,\n};\n\nexport default OHIFCornerstoneVideoViewport;\n"],"names":["i","OHIFCornerstoneVideoViewport","displaySets","length","Error","videoUrl","mimeType","useState","url","setUrl","useEffect","load","className","src","controls","controlsList","preload","type","href","propTypes","PropTypes","isRequired"],"sourceRoot":""} \ No newline at end of file diff --git a/platform/viewer-static/dist/295.bundle.e0f1160b465b6ccc903c.js b/platform/viewer-static/dist/295.bundle.e0f1160b465b6ccc903c.js new file mode 100644 index 00000000000..f42c2e7a085 --- /dev/null +++ b/platform/viewer-static/dist/295.bundle.e0f1160b465b6ccc903c.js @@ -0,0 +1,3 @@ +/*! For license information please see 295.bundle.e0f1160b465b6ccc903c.js.LICENSE.txt */ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[295],{56295:function(t,r,e){e.r(r);var n=e(32735),o=e(60216),i=e.n(o);function a(t){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},a(t)}function c(){c=function(){return t};var t={},r=Object.prototype,e=r.hasOwnProperty,n="function"==typeof Symbol?Symbol:{},o=n.iterator||"@@iterator",i=n.asyncIterator||"@@asyncIterator",u=n.toStringTag||"@@toStringTag";function l(t,r,e){return Object.defineProperty(t,r,{value:e,enumerable:!0,configurable:!0,writable:!0}),t[r]}try{l({},"")}catch(t){l=function(t,r,e){return t[r]=e}}function f(t,r,e,n){var o=r&&r.prototype instanceof p?r:p,i=Object.create(o.prototype),a=new j(n||[]);return i._invoke=function(t,r,e){var n="suspendedStart";return function(o,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===o)throw i;return _()}for(e.method=o,e.arg=i;;){var a=e.delegate;if(a){var c=E(a,e);if(c){if(c===h)continue;return c}}if("next"===e.method)e.sent=e._sent=e.arg;else if("throw"===e.method){if("suspendedStart"===n)throw n="completed",e.arg;e.dispatchException(e.arg)}else"return"===e.method&&e.abrupt("return",e.arg);n="executing";var u=s(t,r,e);if("normal"===u.type){if(n=e.done?"completed":"suspendedYield",u.arg===h)continue;return{value:u.arg,done:e.done}}"throw"===u.type&&(n="completed",e.method="throw",e.arg=u.arg)}}}(t,e,a),i}function s(t,r,e){try{return{type:"normal",arg:t.call(r,e)}}catch(t){return{type:"throw",arg:t}}}t.wrap=f;var h={};function p(){}function y(){}function v(){}var d={};l(d,o,(function(){return this}));var m=Object.getPrototypeOf,g=m&&m(m(O([])));g&&g!==r&&e.call(g,o)&&(d=g);var w=v.prototype=p.prototype=Object.create(d);function b(t){["next","throw","return"].forEach((function(r){l(t,r,(function(t){return this._invoke(r,t)}))}))}function x(t,r){function n(o,i,c,u){var l=s(t[o],t,i);if("throw"!==l.type){var f=l.arg,h=f.value;return h&&"object"==a(h)&&e.call(h,"__await")?r.resolve(h.__await).then((function(t){n("next",t,c,u)}),(function(t){n("throw",t,c,u)})):r.resolve(h).then((function(t){f.value=t,c(f)}),(function(t){return n("throw",t,c,u)}))}u(l.arg)}var o;this._invoke=function(t,e){function i(){return new r((function(r,o){n(t,e,r,o)}))}return o=o?o.then(i,i):i()}}function E(t,r){var e=t.iterator[r.method];if(void 0===e){if(r.delegate=null,"throw"===r.method){if(t.iterator.return&&(r.method="return",r.arg=void 0,E(t,r),"throw"===r.method))return h;r.method="throw",r.arg=new TypeError("The iterator does not provide a 'throw' method")}return h}var n=s(e,t.iterator,r.arg);if("throw"===n.type)return r.method="throw",r.arg=n.arg,r.delegate=null,h;var o=n.arg;return o?o.done?(r[t.resultName]=o.value,r.next=t.nextLoc,"return"!==r.method&&(r.method="next",r.arg=void 0),r.delegate=null,h):o:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,h)}function L(t){var r={tryLoc:t[0]};1 in t&&(r.catchLoc=t[1]),2 in t&&(r.finallyLoc=t[2],r.afterLoc=t[3]),this.tryEntries.push(r)}function S(t){var r=t.completion||{};r.type="normal",delete r.arg,t.completion=r}function j(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(L,this),this.reset(!0)}function O(t){if(t){var r=t[o];if(r)return r.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,i=function r(){for(;++n=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var c=e.call(i,"catchLoc"),u=e.call(i,"finallyLoc");if(c&&u){if(this.prev=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&e.call(o,"finallyLoc")&&this.prev=0;--r){var e=this.tryEntries[r];if(e.finallyLoc===t)return this.complete(e.completion,e.afterLoc),S(e),h}},catch:function(t){for(var r=this.tryEntries.length-1;r>=0;--r){var e=this.tryEntries[r];if(e.tryLoc===t){var n=e.completion;if("throw"===n.type){var o=n.arg;S(e)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,r,e){return this.delegate={iterator:O(t),resultName:r,nextLoc:e},"next"===this.method&&(this.arg=void 0),h}},t}function u(t,r,e,n,o,i,a){try{var c=t[i](a),u=c.value}catch(t){return void e(t)}c.done?r(u):Promise.resolve(u).then(n,o)}function l(t,r){return function(t){if(Array.isArray(t))return t}(t)||function(t,r){var e=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null==e)return;var n,o,i=[],a=!0,c=!1;try{for(e=e.call(t);!(a=(n=e.next()).done)&&(i.push(n.value),!r||i.length!==r);a=!0);}catch(t){c=!0,o=t}finally{try{a||null==e.return||e.return()}finally{if(c)throw o}}return i}(t,r)||function(t,r){if(!t)return;if("string"==typeof t)return f(t,r);var e=Object.prototype.toString.call(t).slice(8,-1);"Object"===e&&t.constructor&&(e=t.constructor.name);if("Map"===e||"Set"===e)return Array.from(t);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return f(t,r)}(t,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function f(t,r){(null==r||r>t.length)&&(r=t.length);for(var e=0,n=new Array(r);e1)throw new Error("OHIFCornerstonePdfViewport: only one display set is supported for dicom pdf right now");var a=r[0].pdfUrl;return(0,n.useEffect)((function(){var t=function(){var t,r=(t=c().mark((function t(){return c().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,a;case 2:i(a);case 3:case"end":return t.stop()}}),t)})),function(){var r=this,e=arguments;return new Promise((function(n,o){var i=t.apply(r,e);function a(t){u(i,n,o,a,c,"next",t)}function c(t){u(i,n,o,a,c,"throw",t)}a(void 0)}))});return function(){return r.apply(this,arguments)}}();t()}),[a]),n.createElement("div",{className:"bg-primary-black w-full h-full"},n.createElement("object",{data:o,type:"application/pdf",className:"w-full h-full"},n.createElement("div",null,"No online PDF viewer installed")))}s.propTypes={displaySets:i().arrayOf(i().object).isRequired},r.default=s}}]); +//# sourceMappingURL=295.bundle.e0f1160b465b6ccc903c.js.map \ No newline at end of file diff --git a/platform/viewer-static/dist/295.bundle.e0f1160b465b6ccc903c.js.LICENSE.txt b/platform/viewer-static/dist/295.bundle.e0f1160b465b6ccc903c.js.LICENSE.txt new file mode 100644 index 00000000000..ae386fb79c9 --- /dev/null +++ b/platform/viewer-static/dist/295.bundle.e0f1160b465b6ccc903c.js.LICENSE.txt @@ -0,0 +1 @@ +/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ diff --git a/platform/viewer-static/dist/295.bundle.e0f1160b465b6ccc903c.js.map b/platform/viewer-static/dist/295.bundle.e0f1160b465b6ccc903c.js.map new file mode 100644 index 00000000000..8d05771d9f7 --- /dev/null +++ b/platform/viewer-static/dist/295.bundle.e0f1160b465b6ccc903c.js.map @@ -0,0 +1 @@ +{"version":3,"file":"295.bundle.e0f1160b465b6ccc903c.js","mappings":";uXACA,4gGAAAA,GAAA,wBAAAA,EAAA,sBAAAA,GAAA,iBAAAA,GAAA,0oDAAAA,EAAA,yBAAAA,GAAA,IAAAA,EAAA,uBAAAA,GAAA,4bAAAA,EAAA,yBAAAA,GAAA,IAAAA,EAAA,uBAAAA,GAAA,yhBAAAA,EAAA,yBAAAA,GAAA,IAAAA,EAAA,uBAAAA,GAAA,qGAAAA,EAAA,yBAAAA,GAAA,IAAAA,EAAA,uBAAAA,GAAA,+0CAEA,SAASC,EAAT,GAAqD,IAAfC,EAAe,EAAfA,YACpC,KAAsBC,EAAAA,EAAAA,UAAS,MAA/B,GAAOC,EAAP,KAAYC,EAAZ,KAEA,GAAIH,GAAeA,EAAYI,OAAS,EACtC,MAAM,IAAIC,MACR,yFAIJ,IAAQC,EAAWN,EAAY,GAAvBM,OAWR,OATAC,EAAAA,EAAAA,YAAU,WACR,IAAMC,EAAI,gCAAG,8FACLF,EADK,OAEXH,EAAOG,GAFI,yNAAH,qDAKVE,MACC,CAACF,IAGF,uBAAKG,UAAU,kCACb,0BAAQC,KAAMR,EAAKS,KAAK,kBAAkBF,UAAU,iBAClD,+DAMRV,EAA2Ba,UAAY,CACrCZ,YAAaa,IAAAA,QAAkBA,IAAAA,QAAkBC,YAGnD","sources":["file:////Users/HemantP/Documents/RapidAI/RapidOHIFViewer/extensions/dicom-pdf/src/viewports/OHIFCornerstonePdfViewport.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\n\nfunction OHIFCornerstonePdfViewport({ displaySets }) {\n const [url, setUrl] = useState(null);\n\n if (displaySets && displaySets.length > 1) {\n throw new Error(\n 'OHIFCornerstonePdfViewport: only one display set is supported for dicom pdf right now'\n );\n }\n\n const { pdfUrl } = displaySets[0];\n\n useEffect(() => {\n const load = async () => {\n await pdfUrl;\n setUrl(pdfUrl);\n };\n\n load();\n }, [pdfUrl]);\n\n return (\n
\n \n
No online PDF viewer installed
\n
\n
\n );\n}\n\nOHIFCornerstonePdfViewport.propTypes = {\n displaySets: PropTypes.arrayOf(PropTypes.object).isRequired,\n};\n\nexport default OHIFCornerstonePdfViewport;\n"],"names":["i","OHIFCornerstonePdfViewport","displaySets","useState","url","setUrl","length","Error","pdfUrl","useEffect","load","className","data","type","propTypes","PropTypes","isRequired"],"sourceRoot":""} \ No newline at end of file diff --git a/platform/viewer-static/dist/365.bundle.19b2f551ebb505a4a54d.js b/platform/viewer-static/dist/365.bundle.19b2f551ebb505a4a54d.js new file mode 100644 index 00000000000..78592bb950b --- /dev/null +++ b/platform/viewer-static/dist/365.bundle.19b2f551ebb505a4a54d.js @@ -0,0 +1,3 @@ +/*! For license information please see 365.bundle.19b2f551ebb505a4a54d.js.LICENSE.txt */ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[365],{68365:function(e,t,r){r.r(t),r.d(t,{default:function(){return Ke}});var n=r(32735),i=r(12788),o=function(e,t){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},o(e,t)};function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}function u(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(n=Object.getOwnPropertySymbols(e);i=t||r<0||f&&e-c>=o}function h(){var e=H();if(m(e))return y(e);u=setTimeout(h,function(e){var r=t-(e-l);return f?F(r,o-(e-c)):r}(e))}function y(e){return u=void 0,p&&n?d(e):(n=i=void 0,a)}function g(){var e=H(),r=m(e);if(n=arguments,i=this,l=e,r){if(void 0===u)return v(l);if(f)return clearTimeout(u),u=setTimeout(h,t),d(l)}return void 0===u&&(u=setTimeout(h,t)),a}return t=G(t)||0,Z(r)&&(s=!!r.leading,o=(f="maxWait"in r)?U(G(r.maxWait)||0,t):o,p="trailing"in r?!!r.trailing:p),g.cancel=function(){void 0!==u&&clearTimeout(u),c=0,n=l=i=u=void 0},g.flush=function(){return void 0===u?a:y(H())},g},z=W,B=c;var q=function(e,t,r){var n=!0,i=!0;if("function"!=typeof e)throw new TypeError("Expected a function");return B(r)&&(n="leading"in r?!!r.leading:n,i="trailing"in r?!!r.trailing:i),z(e,t,{leading:n,maxWait:t,trailing:i})},K=function(e,t,r,n){switch(t){case"debounce":return W(e,r,n);case"throttle":return q(e,r,n);default:return e}},$=function(e){return"function"==typeof e},Y=function(){return"undefined"==typeof window},J=function(e){return e instanceof Element||e instanceof HTMLDocument},Q=function(e,t,r,n){return function(i){var o=i.width,a=i.height;t((function(t){return t.width===o&&t.height===a||t.width===o&&!n||t.height===a&&!r?t:(e&&$(e)&&e(o,a),{width:o,height:a})}))}},X=function(e){function t(t){var r=e.call(this,t)||this;r.cancelHandler=function(){r.resizeHandler&&r.resizeHandler.cancel&&(r.resizeHandler.cancel(),r.resizeHandler=null)},r.attachObserver=function(){var e=r.props,t=e.targetRef,n=e.observerOptions;if(!Y()){t&&t.current&&(r.targetRef.current=t.current);var i=r.getElement();i&&(r.observableElement&&r.observableElement===i||(r.observableElement=i,r.resizeObserver.observe(i,n)))}},r.getElement=function(){var e=r.props,t=e.querySelector,n=e.targetDomEl;if(Y())return null;if(t)return document.querySelector(t);if(n&&J(n))return n;if(r.targetRef&&J(r.targetRef.current))return r.targetRef.current;var o=(0,i.findDOMNode)(r);if(!o)return null;switch(r.getRenderType()){case"renderProp":case"childFunction":case"child":case"childArray":return o;default:return o.parentElement}},r.createResizeHandler=function(e){var t=r.props,n=t.handleWidth,i=void 0===n||n,o=t.handleHeight,a=void 0===o||o,u=t.onResize;if(i||a){var l=Q(u,r.setState.bind(r),i,a);e.forEach((function(e){var t=e&&e.contentRect||{},n=t.width,i=t.height;!r.skipOnMount&&!Y()&&l({width:n,height:i}),r.skipOnMount=!1}))}},r.getRenderType=function(){var e=r.props,t=e.render,i=e.children;return $(t)?"renderProp":$(i)?"childFunction":(0,n.isValidElement)(i)?"child":Array.isArray(i)?"childArray":"parent"};var o=t.skipOnMount,a=t.refreshMode,u=t.refreshRate,l=void 0===u?1e3:u,c=t.refreshOptions;return r.state={width:void 0,height:void 0},r.skipOnMount=o,r.targetRef=(0,n.createRef)(),r.observableElement=null,Y()||(r.resizeHandler=K(r.createResizeHandler,a,l,c),r.resizeObserver=new window.ResizeObserver(r.resizeHandler)),r}return a(t,e),t.prototype.componentDidMount=function(){this.attachObserver()},t.prototype.componentDidUpdate=function(){this.attachObserver()},t.prototype.componentWillUnmount=function(){Y()||(this.resizeObserver.disconnect(),this.cancelHandler())},t.prototype.render=function(){var e,t=this.props,r=t.render,i=t.children,o=t.nodeType,a=void 0===o?"div":o,l=this.state,c={width:l.width,height:l.height,targetRef:this.targetRef};switch(this.getRenderType()){case"renderProp":return r&&r(c);case"childFunction":return(e=i)(c);case"child":if((e=i).type&&"string"==typeof e.type){var s=u(c,["targetRef"]);return(0,n.cloneElement)(e,s)}return(0,n.cloneElement)(e,c);case"childArray":return(e=i).map((function(e){return!!e&&(0,n.cloneElement)(e,c)}));default:return n.createElement(a,null)}},t}(n.PureComponent);Y()?n.useEffect:n.useLayoutEffect;var ee=r(60216),te=r.n(ee),re=r(16132),ne=r(38402),ie=r(41841),oe=r(80808),ae=r(33932),ue=r(66782),le=r(72682),ce=r(7283),se=r(21922),fe=r(33318),pe=r(70369),de=r(67013);function ve(e){var t=e.viewportData,r=e.viewportIndex,i=e.element,o=e.imageSliceData,a=e.setImageSliceData,u=e.scrollbarHeight,l=e.servicesManager.services,c=l.CineService,s=l.CornerstoneViewportService;return(0,n.useEffect)((function(){if(t){var e=s.getCornerstoneViewportByIndex(r);if(e)if(t.viewportType!==pe.Z.STACK){if(t.viewportType===pe.Z.ORTHOGRAPHIC){var n=fe.Z(e);if(!n)return;var i=n.imageIndex,o=n.numberOfSlices;a({imageIndex:i,numberOfSlices:o})}}else{var u=e.getCurrentImageIdIndex();a({imageIndex:u,numberOfSlices:t.data.imageIds.length})}}}),[r,t]),(0,n.useEffect)((function(){if((null==t?void 0:t.viewportType)===pe.Z.STACK){var e=function(e){var r=e.detail.newImageIdIndex;a({imageIndex:r,numberOfSlices:t.data.imageIds.length})};return i.addEventListener(le.Z.STACK_VIEWPORT_SCROLL,e),function(){i.removeEventListener(le.Z.STACK_VIEWPORT_SCROLL,e)}}}),[t,i]),(0,n.useEffect)((function(){if((null==t?void 0:t.viewportType)===pe.Z.ORTHOGRAPHIC){var e=function(e){var t=e.detail,r=t.imageIndex,n=t.numberOfSlices;a({imageIndex:r,numberOfSlices:n})};return i.addEventListener(le.Z.VOLUME_NEW_IMAGE,e),function(){i.removeEventListener(le.Z.VOLUME_NEW_IMAGE,e)}}}),[t,i]),n.createElement(de.Ln,{onChange:function(e){return function(e,t){var r=s.getViewportInfoByIndex(t).getViewportId(),n=s.getCornerstoneViewport(r);c.getState().isCineEnabled&&(c.stopClip(i),c.setCine({id:t,isPlaying:!1})),re.Z(n.element,{imageIndex:e,debounceLoading:!0})}(e,r)},max:o.numberOfSlices?o.numberOfSlices-1:0,height:u,value:o.imageIndex})}ve.propTypes={viewportData:te().object,viewportIndex:te().number.isRequired,element:te().instanceOf(Element),scrollbarHeight:te().string,imageSliceData:te().object.isRequired,setImageSliceData:te().func.isRequired};var me=ve,he=r(6807),ye=r(27306),ge=r(19384);function we(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==r)return;var n,i,o=[],a=!0,u=!1;try{for(r=r.call(e);!(a=(n=r.next()).done)&&(o.push(n.value),!t||o.length!==t);a=!0);}catch(e){u=!0,i=e}finally{try{a||null==r.return||r.return()}finally{if(u)throw i}}return o}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return be(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return be(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function be(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r1)return;var o=i[0],a=o.direction,u=o.imageIds,l=n.getCornerstoneViewportByIndex(r);if(!l)return;var c=l.getCamera().viewPlaneNormal,s=a.slice(6,9),f=he.cross(he.create(),c,s);if(he.length(f)e.length)&&(t=e.length);for(var r=0,n=new Array(t);re.length)&&(t=e.length);for(var r=0,n=new Array(t);re.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0;--i){var o=this.tryEntries[i],a=o.completion;if("root"===o.tryLoc)return n("end");if(o.tryLoc<=this.prev){var u=r.call(o,"catchLoc"),l=r.call(o,"finallyLoc");if(u&&l){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),I(r),s}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var i=n.arg;I(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:O(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),s}},e}function He(e,t,r,n,i,o,a){try{var u=e[o](a),l=u.value}catch(e){return void r(e)}u.done?t(l):Promise.resolve(l).then(n,i)}function Ge(e){return function(){var t=this,r=arguments;return new Promise((function(n,i){var o=e.apply(t,r);function a(e){He(o,n,i,a,u,"next",e)}function u(e){He(o,n,i,a,u,"throw",e)}a(void 0)}))}}function Ue(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==r)return;var n,i,o=[],a=!0,u=!1;try{for(r=r.call(e);!(a=(n=r.next()).done)&&(o.push(n.value),!t||o.length!==t);a=!0);}catch(e){u=!0,i=e}finally{try{a||null==r.return||r.return()}finally{if(u)throw i}}return o}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Fe(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Fe(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Fe(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n\nfunction isObject$3(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nvar isObject_1 = isObject$3;/** Detect free variable `global` from Node.js. */\n\nvar freeGlobal$1 = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;\n\nvar _freeGlobal = freeGlobal$1;var freeGlobal = _freeGlobal;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root$2 = freeGlobal || freeSelf || Function('return this')();\n\nvar _root = root$2;var root$1 = _root;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now$1 = function() {\n return root$1.Date.now();\n};\n\nvar now_1 = now$1;/** Used to match a single whitespace character. */\n\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex$1(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nvar _trimmedEndIndex = trimmedEndIndex$1;var trimmedEndIndex = _trimmedEndIndex;\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim$1(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nvar _baseTrim = baseTrim$1;var root = _root;\n\n/** Built-in value references. */\nvar Symbol$2 = root.Symbol;\n\nvar _Symbol = Symbol$2;var Symbol$1 = _Symbol;\n\n/** Used for built-in method references. */\nvar objectProto$1 = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto$1.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString$1 = objectProto$1.toString;\n\n/** Built-in value references. */\nvar symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag$1(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag$1),\n tag = value[symToStringTag$1];\n\n try {\n value[symToStringTag$1] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString$1.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag$1] = tag;\n } else {\n delete value[symToStringTag$1];\n }\n }\n return result;\n}\n\nvar _getRawTag = getRawTag$1;/** Used for built-in method references. */\n\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString$1(value) {\n return nativeObjectToString.call(value);\n}\n\nvar _objectToString = objectToString$1;var Symbol = _Symbol,\n getRawTag = _getRawTag,\n objectToString = _objectToString;\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag$1(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nvar _baseGetTag = baseGetTag$1;/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n\nfunction isObjectLike$1(value) {\n return value != null && typeof value == 'object';\n}\n\nvar isObjectLike_1 = isObjectLike$1;var baseGetTag = _baseGetTag,\n isObjectLike = isObjectLike_1;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol$1(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nvar isSymbol_1 = isSymbol$1;var baseTrim = _baseTrim,\n isObject$2 = isObject_1,\n isSymbol = isSymbol_1;\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber$1(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject$2(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject$2(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nvar toNumber_1 = toNumber$1;var isObject$1 = isObject_1,\n now = now_1,\n toNumber = toNumber_1;\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT$1 = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce$1(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT$1);\n }\n wait = toNumber(wait) || 0;\n if (isObject$1(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nvar debounce_1 = debounce$1;var debounce = debounce_1,\n isObject = isObject_1;\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nvar throttle_1 = throttle;var patchResizeHandler = function (resizeCallback, refreshMode, refreshRate, refreshOptions) {\r\n switch (refreshMode) {\r\n case 'debounce':\r\n return debounce_1(resizeCallback, refreshRate, refreshOptions);\r\n case 'throttle':\r\n return throttle_1(resizeCallback, refreshRate, refreshOptions);\r\n default:\r\n return resizeCallback;\r\n }\r\n};\r\nvar isFunction = function (fn) { return typeof fn === 'function'; };\r\nvar isSSR = function () { return typeof window === 'undefined'; };\r\nvar isDOMElement = function (element) { return element instanceof Element || element instanceof HTMLDocument; };\r\nvar createNotifier = function (onResize, setSize, handleWidth, handleHeight) {\r\n return function (_a) {\r\n var width = _a.width, height = _a.height;\r\n setSize(function (prev) {\r\n if (prev.width === width && prev.height === height) {\r\n // skip if dimensions haven't changed\r\n return prev;\r\n }\r\n if ((prev.width === width && !handleHeight) || (prev.height === height && !handleWidth)) {\r\n // process `handleHeight/handleWidth` props\r\n return prev;\r\n }\r\n if (onResize && isFunction(onResize)) {\r\n onResize(width, height);\r\n }\r\n return { width: width, height: height };\r\n });\r\n };\r\n};var ResizeDetector = /** @class */ (function (_super) {\r\n __extends(ResizeDetector, _super);\r\n function ResizeDetector(props) {\r\n var _this = _super.call(this, props) || this;\r\n _this.cancelHandler = function () {\r\n if (_this.resizeHandler && _this.resizeHandler.cancel) {\r\n // cancel debounced handler\r\n _this.resizeHandler.cancel();\r\n _this.resizeHandler = null;\r\n }\r\n };\r\n _this.attachObserver = function () {\r\n var _a = _this.props, targetRef = _a.targetRef, observerOptions = _a.observerOptions;\r\n if (isSSR()) {\r\n return;\r\n }\r\n if (targetRef && targetRef.current) {\r\n _this.targetRef.current = targetRef.current;\r\n }\r\n var element = _this.getElement();\r\n if (!element) {\r\n // can't find element to observe\r\n return;\r\n }\r\n if (_this.observableElement && _this.observableElement === element) {\r\n // element is already observed\r\n return;\r\n }\r\n _this.observableElement = element;\r\n _this.resizeObserver.observe(element, observerOptions);\r\n };\r\n _this.getElement = function () {\r\n var _a = _this.props, querySelector = _a.querySelector, targetDomEl = _a.targetDomEl;\r\n if (isSSR())\r\n return null;\r\n // in case we pass a querySelector\r\n if (querySelector)\r\n return document.querySelector(querySelector);\r\n // in case we pass a DOM element\r\n if (targetDomEl && isDOMElement(targetDomEl))\r\n return targetDomEl;\r\n // in case we pass a React ref using React.createRef()\r\n if (_this.targetRef && isDOMElement(_this.targetRef.current))\r\n return _this.targetRef.current;\r\n // the worse case when we don't receive any information from the parent and the library doesn't add any wrappers\r\n // we have to use a deprecated `findDOMNode` method in order to find a DOM element to attach to\r\n var currentElement = findDOMNode(_this);\r\n if (!currentElement)\r\n return null;\r\n var renderType = _this.getRenderType();\r\n switch (renderType) {\r\n case 'renderProp':\r\n return currentElement;\r\n case 'childFunction':\r\n return currentElement;\r\n case 'child':\r\n return currentElement;\r\n case 'childArray':\r\n return currentElement;\r\n default:\r\n return currentElement.parentElement;\r\n }\r\n };\r\n _this.createResizeHandler = function (entries) {\r\n var _a = _this.props, _b = _a.handleWidth, handleWidth = _b === void 0 ? true : _b, _c = _a.handleHeight, handleHeight = _c === void 0 ? true : _c, onResize = _a.onResize;\r\n if (!handleWidth && !handleHeight)\r\n return;\r\n var notifyResize = createNotifier(onResize, _this.setState.bind(_this), handleWidth, handleHeight);\r\n entries.forEach(function (entry) {\r\n var _a = (entry && entry.contentRect) || {}, width = _a.width, height = _a.height;\r\n var shouldSetSize = !_this.skipOnMount && !isSSR();\r\n if (shouldSetSize) {\r\n notifyResize({ width: width, height: height });\r\n }\r\n _this.skipOnMount = false;\r\n });\r\n };\r\n _this.getRenderType = function () {\r\n var _a = _this.props, render = _a.render, children = _a.children;\r\n if (isFunction(render)) {\r\n // DEPRECATED. Use `Child Function Pattern` instead\r\n return 'renderProp';\r\n }\r\n if (isFunction(children)) {\r\n return 'childFunction';\r\n }\r\n if (isValidElement(children)) {\r\n return 'child';\r\n }\r\n if (Array.isArray(children)) {\r\n // DEPRECATED. Wrap children with a single parent\r\n return 'childArray';\r\n }\r\n // DEPRECATED. Use `Child Function Pattern` instead\r\n return 'parent';\r\n };\r\n var skipOnMount = props.skipOnMount, refreshMode = props.refreshMode, _a = props.refreshRate, refreshRate = _a === void 0 ? 1000 : _a, refreshOptions = props.refreshOptions;\r\n _this.state = {\r\n width: undefined,\r\n height: undefined\r\n };\r\n _this.skipOnMount = skipOnMount;\r\n _this.targetRef = createRef();\r\n _this.observableElement = null;\r\n if (isSSR()) {\r\n return _this;\r\n }\r\n _this.resizeHandler = patchResizeHandler(_this.createResizeHandler, refreshMode, refreshRate, refreshOptions);\r\n _this.resizeObserver = new window.ResizeObserver(_this.resizeHandler);\r\n return _this;\r\n }\r\n ResizeDetector.prototype.componentDidMount = function () {\r\n this.attachObserver();\r\n };\r\n ResizeDetector.prototype.componentDidUpdate = function () {\r\n this.attachObserver();\r\n };\r\n ResizeDetector.prototype.componentWillUnmount = function () {\r\n if (isSSR()) {\r\n return;\r\n }\r\n this.resizeObserver.disconnect();\r\n this.cancelHandler();\r\n };\r\n ResizeDetector.prototype.render = function () {\r\n var _a = this.props, render = _a.render, children = _a.children, _b = _a.nodeType, WrapperTag = _b === void 0 ? 'div' : _b;\r\n var _c = this.state, width = _c.width, height = _c.height;\r\n var childProps = { width: width, height: height, targetRef: this.targetRef };\r\n var renderType = this.getRenderType();\r\n var typedChildren;\r\n switch (renderType) {\r\n case 'renderProp':\r\n return render && render(childProps);\r\n case 'childFunction':\r\n typedChildren = children;\r\n return typedChildren(childProps);\r\n case 'child':\r\n // @TODO bug prone logic\r\n typedChildren = children;\r\n if (typedChildren.type && typeof typedChildren.type === 'string') {\r\n // child is a native DOM elements such as div, span etc\r\n childProps.targetRef; var nativeProps = __rest(childProps, [\"targetRef\"]);\r\n return cloneElement(typedChildren, nativeProps);\r\n }\r\n // class or functional component otherwise\r\n return cloneElement(typedChildren, childProps);\r\n case 'childArray':\r\n typedChildren = children;\r\n return typedChildren.map(function (el) { return !!el && cloneElement(el, childProps); });\r\n default:\r\n return React.createElement(WrapperTag, null);\r\n }\r\n };\r\n return ResizeDetector;\r\n}(PureComponent));function withResizeDetector(ComponentInner, options) {\r\n if (options === void 0) { options = {}; }\r\n var ResizeDetectorHOC = /** @class */ (function (_super) {\r\n __extends(ResizeDetectorHOC, _super);\r\n function ResizeDetectorHOC() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.ref = createRef();\r\n return _this;\r\n }\r\n ResizeDetectorHOC.prototype.render = function () {\r\n var _a = this.props, forwardedRef = _a.forwardedRef, rest = __rest(_a, [\"forwardedRef\"]);\r\n var targetRef = forwardedRef !== null && forwardedRef !== void 0 ? forwardedRef : this.ref;\r\n return (React.createElement(ResizeDetector, __assign({}, options, { targetRef: targetRef }),\r\n React.createElement(ComponentInner, __assign({ targetRef: targetRef }, rest))));\r\n };\r\n return ResizeDetectorHOC;\r\n }(Component));\r\n function forwardRefWrapper(props, ref) {\r\n return React.createElement(ResizeDetectorHOC, __assign({}, props, { forwardedRef: ref }));\r\n }\r\n var name = ComponentInner.displayName || ComponentInner.name;\r\n forwardRefWrapper.displayName = \"withResizeDetector(\".concat(name, \")\");\r\n return forwardRef(forwardRefWrapper);\r\n}var useEnhancedEffect = isSSR() ? useEffect : useLayoutEffect;\r\nfunction useResizeDetector(props) {\r\n if (props === void 0) { props = {}; }\r\n var _a = props.skipOnMount, skipOnMount = _a === void 0 ? false : _a, refreshMode = props.refreshMode, _b = props.refreshRate, refreshRate = _b === void 0 ? 1000 : _b, refreshOptions = props.refreshOptions, _c = props.handleWidth, handleWidth = _c === void 0 ? true : _c, _d = props.handleHeight, handleHeight = _d === void 0 ? true : _d, targetRef = props.targetRef, observerOptions = props.observerOptions, onResize = props.onResize;\r\n var skipResize = useRef(skipOnMount);\r\n var localRef = useRef(null);\r\n var ref = (targetRef !== null && targetRef !== void 0 ? targetRef : localRef);\r\n var resizeHandler = useRef();\r\n var _e = useState({\r\n width: undefined,\r\n height: undefined\r\n }), size = _e[0], setSize = _e[1];\r\n useEnhancedEffect(function () {\r\n if (isSSR()) {\r\n return;\r\n }\r\n var notifyResize = createNotifier(onResize, setSize, handleWidth, handleHeight);\r\n var resizeCallback = function (entries) {\r\n if (!handleWidth && !handleHeight)\r\n return;\r\n entries.forEach(function (entry) {\r\n var _a = (entry && entry.contentRect) || {}, width = _a.width, height = _a.height;\r\n var shouldSetSize = !skipResize.current && !isSSR();\r\n if (shouldSetSize) {\r\n notifyResize({ width: width, height: height });\r\n }\r\n skipResize.current = false;\r\n });\r\n };\r\n resizeHandler.current = patchResizeHandler(resizeCallback, refreshMode, refreshRate, refreshOptions);\r\n var resizeObserver = new window.ResizeObserver(resizeHandler.current);\r\n if (ref.current) {\r\n // Something wrong with typings here...\r\n resizeObserver.observe(ref.current, observerOptions);\r\n }\r\n return function () {\r\n resizeObserver.disconnect();\r\n var patchedResizeHandler = resizeHandler.current;\r\n if (patchedResizeHandler && patchedResizeHandler.cancel) {\r\n patchedResizeHandler.cancel();\r\n }\r\n };\r\n }, [refreshMode, refreshRate, refreshOptions, handleWidth, handleHeight, onResize, observerOptions, ref.current]);\r\n return __assign({ ref: ref }, size);\r\n}export{ResizeDetector as default,useResizeDetector,withResizeDetector};//# sourceMappingURL=index.esm.js.map\n","import React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { Enums, Types, utilities } from '@cornerstonejs/core';\nimport { utilities as csToolsUtils } from '@cornerstonejs/tools';\nimport { ImageScrollbar } from '@ohif/ui';\n\nfunction CornerstoneImageScrollbar({\n viewportData,\n viewportIndex,\n element,\n imageSliceData,\n setImageSliceData,\n scrollbarHeight,\n servicesManager,\n}) {\n const { CineService, CornerstoneViewportService } = servicesManager.services;\n\n const onImageScrollbarChange = (imageIndex, viewportIndex) => {\n const viewportInfo = CornerstoneViewportService.getViewportInfoByIndex(\n viewportIndex\n );\n\n const viewportId = viewportInfo.getViewportId();\n const viewport = CornerstoneViewportService.getCornerstoneViewport(\n viewportId\n );\n\n const { isCineEnabled } = CineService.getState();\n\n if (isCineEnabled) {\n // on image scrollbar change, stop the CINE if it is playing\n CineService.stopClip(element);\n CineService.setCine({ id: viewportIndex, isPlaying: false });\n }\n\n csToolsUtils.jumpToSlice(viewport.element, {\n imageIndex,\n debounceLoading: true,\n });\n };\n\n useEffect(() => {\n if (!viewportData) {\n return;\n }\n\n const viewport = CornerstoneViewportService.getCornerstoneViewportByIndex(\n viewportIndex\n );\n\n if (!viewport) {\n return;\n }\n\n if (viewportData.viewportType === Enums.ViewportType.STACK) {\n const imageIndex = viewport.getCurrentImageIdIndex();\n\n setImageSliceData({\n imageIndex: imageIndex,\n numberOfSlices: viewportData.data.imageIds.length,\n });\n\n return;\n }\n\n if (viewportData.viewportType === Enums.ViewportType.ORTHOGRAPHIC) {\n const sliceData = utilities.getImageSliceDataForVolumeViewport(\n viewport as Types.IVolumeViewport\n );\n\n if (!sliceData) {\n return;\n }\n\n const { imageIndex, numberOfSlices } = sliceData;\n setImageSliceData({ imageIndex, numberOfSlices });\n }\n }, [viewportIndex, viewportData]);\n\n useEffect(() => {\n if (viewportData?.viewportType !== Enums.ViewportType.STACK) {\n return;\n }\n\n const updateStackIndex = event => {\n const { newImageIdIndex } = event.detail;\n // find the index of imageId in the imageIds\n setImageSliceData({\n imageIndex: newImageIdIndex,\n numberOfSlices: viewportData.data.imageIds.length,\n });\n };\n\n element.addEventListener(\n Enums.Events.STACK_VIEWPORT_SCROLL,\n updateStackIndex\n );\n\n return () => {\n element.removeEventListener(\n Enums.Events.STACK_VIEWPORT_SCROLL,\n updateStackIndex\n );\n };\n }, [viewportData, element]);\n\n useEffect(() => {\n if (viewportData?.viewportType !== Enums.ViewportType.ORTHOGRAPHIC) {\n return;\n }\n\n const updateVolumeIndex = event => {\n const { imageIndex, numberOfSlices } = event.detail;\n // find the index of imageId in the imageIds\n setImageSliceData({ imageIndex, numberOfSlices });\n };\n\n element.addEventListener(Enums.Events.VOLUME_NEW_IMAGE, updateVolumeIndex);\n\n return () => {\n element.removeEventListener(\n Enums.Events.VOLUME_NEW_IMAGE,\n updateVolumeIndex\n );\n };\n }, [viewportData, element]);\n\n return (\n onImageScrollbarChange(evt, viewportIndex)}\n max={\n imageSliceData.numberOfSlices ? imageSliceData.numberOfSlices - 1 : 0\n }\n height={scrollbarHeight}\n value={imageSliceData.imageIndex}\n />\n );\n}\n\nCornerstoneImageScrollbar.propTypes = {\n viewportData: PropTypes.object,\n viewportIndex: PropTypes.number.isRequired,\n element: PropTypes.instanceOf(Element),\n scrollbarHeight: PropTypes.string,\n imageSliceData: PropTypes.object.isRequired,\n setImageSliceData: PropTypes.func.isRequired,\n};\n\nexport default CornerstoneImageScrollbar;\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { vec3 } from 'gl-matrix';\nimport PropTypes from 'prop-types';\nimport { metaData, Enums, utilities } from '@cornerstonejs/core';\nimport { ViewportOverlay } from '@ohif/ui';\n\nconst EPSILON = 1e-4;\n\nfunction CornerstoneViewportOverlay({\n element,\n viewportData,\n imageSliceData,\n viewportIndex,\n servicesManager,\n}) {\n const {\n CornerstoneViewportService,\n ToolBarService,\n } = servicesManager.services;\n const [voi, setVOI] = useState({ windowCenter: null, windowWidth: null });\n const [scale, setScale] = useState(1);\n const [activeTools, setActiveTools] = useState([]);\n\n /**\n * Initial toolbar state\n */\n useEffect(() => {\n setActiveTools(ToolBarService.getActiveTools());\n }, []);\n\n useEffect(() => {\n let isMounted = true;\n const { unsubscribe } = ToolBarService.subscribe(\n ToolBarService.EVENTS.TOOL_BAR_STATE_MODIFIED,\n () => {\n if (!isMounted) {\n return;\n }\n\n setActiveTools(ToolBarService.getActiveTools());\n }\n );\n\n return () => {\n isMounted = false;\n unsubscribe();\n };\n }, []);\n\n /**\n * Updating the VOI when the viewport changes its voi\n */\n useEffect(() => {\n const updateVOI = eventDetail => {\n const { range } = eventDetail.detail;\n\n if (!range) {\n return;\n }\n\n const { lower, upper } = range;\n const { windowWidth, windowCenter } = utilities.windowLevel.toWindowLevel(\n lower,\n upper\n );\n\n setVOI({ windowCenter, windowWidth });\n };\n\n element.addEventListener(Enums.Events.VOI_MODIFIED, updateVOI);\n\n return () => {\n element.removeEventListener(Enums.Events.VOI_MODIFIED, updateVOI);\n };\n }, [viewportIndex, viewportData, voi, element]);\n\n /**\n * Updating the scale when the viewport changes its zoom\n */\n useEffect(() => {\n const updateScale = eventDetail => {\n const { previousCamera, camera } = eventDetail.detail;\n\n if (\n previousCamera.parallelScale !== camera.parallelScale ||\n previousCamera.scale !== camera.scale\n ) {\n const viewport = CornerstoneViewportService.getCornerstoneViewportByIndex(\n viewportIndex\n );\n\n if (!viewport) {\n return;\n }\n\n const imageData = viewport.getImageData();\n\n if (!imageData) {\n return;\n }\n\n if (camera.scale) {\n setScale(camera.scale);\n return;\n }\n\n const { spacing } = imageData;\n // convert parallel scale to scale\n const scale =\n (element.clientHeight * spacing[0] * 0.5) / camera.parallelScale;\n setScale(scale);\n }\n };\n\n element.addEventListener(Enums.Events.CAMERA_MODIFIED, updateScale);\n\n return () => {\n element.removeEventListener(Enums.Events.CAMERA_MODIFIED, updateScale);\n };\n }, [viewportIndex, viewportData]);\n\n const getTopLeftContent = useCallback(() => {\n const { windowWidth, windowCenter } = voi;\n\n if (activeTools.includes('WindowLevel')) {\n if (typeof windowCenter !== 'number' || typeof windowWidth !== 'number') {\n return null;\n }\n\n return (\n
\n W:\n {windowWidth.toFixed(0)}\n L:\n {windowCenter.toFixed(0)}\n
\n );\n }\n\n if (activeTools.includes('Zoom')) {\n return (\n
\n Zoom:\n {scale.toFixed(2)}x\n
\n );\n }\n\n return null;\n }, [voi, scale, activeTools]);\n\n const getTopRightContent = useCallback(() => {\n const { imageIndex, numberOfSlices } = imageSliceData;\n if (!viewportData) {\n return;\n }\n\n let instanceNumber;\n\n if (viewportData.viewportType === Enums.ViewportType.STACK) {\n instanceNumber = _getInstanceNumberFromStack(viewportData, imageIndex);\n\n if (!instanceNumber) {\n return null;\n }\n } else if (viewportData.viewportType === Enums.ViewportType.ORTHOGRAPHIC) {\n instanceNumber = _getInstanceNumberFromVolume(\n viewportData,\n imageIndex,\n viewportIndex,\n CornerstoneViewportService\n );\n }\n\n return (\n
\n I:\n \n {instanceNumber !== undefined\n ? `${instanceNumber} (${imageIndex + 1}/${numberOfSlices})`\n : `${imageIndex + 1}/${numberOfSlices}`}\n \n
\n );\n }, [imageSliceData, viewportData, viewportIndex]);\n\n if (!viewportData) {\n return null;\n }\n\n return (\n \n );\n}\n\nfunction _getInstanceNumberFromStack(viewportData, imageIndex) {\n const imageIds = viewportData.data.imageIds;\n const imageId = imageIds[imageIndex];\n\n if (!imageId) {\n return;\n }\n\n const generalImageModule = metaData.get('generalImageModule', imageId) || {};\n const { instanceNumber } = generalImageModule;\n\n const stackSize = imageIds.length;\n\n if (stackSize <= 1) {\n return;\n }\n\n return parseInt(instanceNumber);\n}\n\n// Since volume viewports can be in any view direction, they can render\n// a reconstructed image which don't have imageIds; therefore, no instance and instanceNumber\n// Here we check if viewport is in the acquisition direction and if so, we get the instanceNumber\nfunction _getInstanceNumberFromVolume(\n viewportData,\n imageIndex,\n viewportIndex,\n CornerstoneViewportService\n) {\n const volumes = viewportData.data.map(d => d.volume);\n\n // Todo: support fusion of acquisition plane which has instanceNumber\n if (!volumes || volumes.length > 1) {\n return;\n }\n\n const volume = volumes[0];\n const { direction, imageIds } = volume;\n\n const cornerstoneViewport = CornerstoneViewportService.getCornerstoneViewportByIndex(\n viewportIndex\n );\n\n if (!cornerstoneViewport) {\n return;\n }\n\n const camera = cornerstoneViewport.getCamera();\n const { viewPlaneNormal } = camera;\n // checking if camera is looking at the acquisition plane (defined by the direction on the volume)\n\n const scanAxisNormal = direction.slice(6, 9);\n\n // check if viewPlaneNormal is parallel to scanAxisNormal\n const cross = vec3.cross(vec3.create(), viewPlaneNormal, scanAxisNormal);\n const isAcquisitionPlane = vec3.length(cross) < EPSILON;\n\n if (isAcquisitionPlane) {\n const imageId = imageIds[imageIndex];\n\n if (!imageId) {\n return {};\n }\n\n const { instanceNumber } =\n metaData.get('generalImageModule', imageId) || {};\n return parseInt(instanceNumber);\n }\n}\n\nCornerstoneViewportOverlay.propTypes = {\n viewportData: PropTypes.object,\n imageIndex: PropTypes.number,\n viewportIndex: PropTypes.number,\n};\n\nexport default CornerstoneViewportOverlay;\n","import React, { useEffect, useState, useMemo } from 'react';\nimport {\n metaData,\n Enums,\n Types,\n getEnabledElement,\n utilities as csUtils,\n} from '@cornerstonejs/core';\nimport { utilities } from '@cornerstonejs/tools';\nimport PropTypes from 'prop-types';\nimport { vec3 } from 'gl-matrix';\n\nimport './ViewportOrientationMarkers.css';\n\nconst {\n getOrientationStringLPS,\n invertOrientationStringLPS,\n} = utilities.orientation;\n\nfunction ViewportOrientationMarkers({\n element,\n viewportData,\n imageSliceData,\n viewportIndex,\n servicesManager,\n orientationMarkers = ['top', 'left'],\n}) {\n // Rotation is in degrees\n const [rotation, setRotation] = useState(0);\n const [flipHorizontal, setFlipHorizontal] = useState(false);\n const [flipVertical, setFlipVertical] = useState(false);\n const { CornerstoneViewportService } = servicesManager.services;\n\n useEffect(() => {\n const cameraModifiedListener = (\n evt: Types.EventTypes.CameraModifiedEvent\n ) => {\n const { rotation, previousCamera, camera } = evt.detail;\n\n if (rotation !== undefined) {\n setRotation(rotation);\n }\n\n if (\n camera.flipHorizontal !== undefined &&\n previousCamera.flipHorizontal !== camera.flipHorizontal\n ) {\n setFlipHorizontal(camera.flipHorizontal);\n }\n\n if (\n camera.flipVertical !== undefined &&\n previousCamera.flipVertical !== camera.flipVertical\n ) {\n setFlipVertical(camera.flipVertical);\n }\n };\n\n element.addEventListener(\n Enums.Events.CAMERA_MODIFIED,\n cameraModifiedListener\n );\n\n return () => {\n element.removeEventListener(\n Enums.Events.CAMERA_MODIFIED,\n cameraModifiedListener\n );\n };\n }, []);\n\n const markers = useMemo(() => {\n if (!viewportData) {\n return '';\n }\n\n let rowCosines, columnCosines;\n if (viewportData.viewportType === 'stack') {\n const imageIndex = imageSliceData.imageIndex;\n const imageId = viewportData.data.imageIds?.[imageIndex];\n\n // Workaround for below TODO stub\n if (!imageId) {\n return false;\n }\n\n ({ rowCosines, columnCosines } =\n metaData.get('imagePlaneModule', imageId) || {});\n } else {\n if (!element || !getEnabledElement(element)) {\n return '';\n }\n\n const { viewport } = getEnabledElement(element);\n const { viewUp, viewPlaneNormal } = viewport.getCamera();\n\n const viewRight = vec3.create();\n vec3.cross(viewRight, viewUp, viewPlaneNormal);\n\n columnCosines = [-viewUp[0], -viewUp[1], -viewUp[2]];\n rowCosines = viewRight;\n }\n\n if (!rowCosines || !columnCosines || rotation === undefined) {\n return '';\n }\n\n const markers = _getOrientationMarkers(\n rowCosines,\n columnCosines,\n rotation,\n flipVertical,\n flipHorizontal\n );\n\n const ohifViewport = CornerstoneViewportService.getViewportInfoByIndex(\n viewportIndex\n );\n\n const backgroundColor = ohifViewport.getViewportOptions().background;\n\n const isLight = backgroundColor\n ? csUtils.isEqual(backgroundColor, [1, 1, 1])\n : false;\n\n return orientationMarkers.map((m, index) => (\n \n
{markers[m]}
\n
\n ));\n }, [\n viewportData,\n imageSliceData,\n rotation,\n flipVertical,\n flipHorizontal,\n orientationMarkers,\n element,\n ]);\n\n return
{markers}
;\n}\n\nViewportOrientationMarkers.propTypes = {\n percentComplete: PropTypes.number,\n error: PropTypes.object,\n};\n\nViewportOrientationMarkers.defaultProps = {\n percentComplete: 0,\n error: null,\n};\n\n/**\n *\n * Computes the orientation labels on a Cornerstone-enabled Viewport element\n * when the viewport settings change (e.g. when a horizontal flip or a rotation occurs)\n *\n * @param {*} rowCosines\n * @param {*} columnCosines\n * @param {*} rotation in degrees\n * @returns\n */\nfunction _getOrientationMarkers(\n rowCosines,\n columnCosines,\n rotation,\n flipVertical,\n flipHorizontal\n) {\n const rowString = getOrientationStringLPS(rowCosines);\n const columnString = getOrientationStringLPS(columnCosines);\n const oppositeRowString = invertOrientationStringLPS(rowString);\n const oppositeColumnString = invertOrientationStringLPS(columnString);\n\n const markers = {\n top: oppositeColumnString,\n left: oppositeRowString,\n right: rowString,\n bottom: columnString,\n };\n\n // If any vertical or horizontal flips are applied, change the orientation strings ahead of\n // the rotation applications\n if (flipVertical) {\n markers.top = invertOrientationStringLPS(markers.top);\n markers.bottom = invertOrientationStringLPS(markers.bottom);\n }\n\n if (flipHorizontal) {\n markers.left = invertOrientationStringLPS(markers.left);\n markers.right = invertOrientationStringLPS(markers.right);\n }\n\n // Swap the labels accordingly if the viewport has been rotated\n // This could be done in a more complex way for intermediate rotation values (e.g. 45 degrees)\n if (rotation === 90 || rotation === -270) {\n return {\n top: markers.left,\n left: invertOrientationStringLPS(markers.top),\n right: invertOrientationStringLPS(markers.bottom),\n bottom: markers.right, // left\n };\n } else if (rotation === -90 || rotation === 270) {\n return {\n top: invertOrientationStringLPS(markers.left),\n left: markers.top,\n bottom: markers.left,\n right: markers.bottom,\n };\n } else if (rotation === 180 || rotation === -180) {\n return {\n top: invertOrientationStringLPS(markers.top),\n left: invertOrientationStringLPS(markers.left),\n bottom: invertOrientationStringLPS(markers.bottom),\n right: invertOrientationStringLPS(markers.right),\n };\n }\n\n return markers;\n}\n\nexport default ViewportOrientationMarkers;\n","import React, { useEffect, useState, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { Enums } from '@cornerstonejs/core';\n\nfunction ViewportImageSliceLoadingIndicator({ viewportData, element }) {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(false);\n\n const loadIndicatorRef = useRef(null);\n const imageIdToBeLoaded = useRef(null);\n\n const setLoadingState = evt => {\n clearTimeout(loadIndicatorRef.current);\n\n loadIndicatorRef.current = setTimeout(() => {\n setLoading(true);\n }, 50);\n };\n\n const setFinishLoadingState = evt => {\n clearTimeout(loadIndicatorRef.current);\n\n setLoading(false);\n };\n\n const setErrorState = evt => {\n clearTimeout(loadIndicatorRef.current);\n\n if (imageIdToBeLoaded.current === evt.detail.imageId) {\n setError(evt.detail.error);\n imageIdToBeLoaded.current = null;\n }\n };\n\n useEffect(() => {\n element.addEventListener(\n Enums.Events.STACK_VIEWPORT_SCROLL,\n setLoadingState\n );\n element.addEventListener(Enums.Events.IMAGE_LOAD_ERROR, setErrorState);\n element.addEventListener(\n Enums.Events.STACK_NEW_IMAGE,\n setFinishLoadingState\n );\n\n return () => {\n element.removeEventListener(\n Enums.Events.STACK_VIEWPORT_SCROLL,\n setLoadingState\n );\n\n element.removeEventListener(\n Enums.Events.STACK_NEW_IMAGE,\n setFinishLoadingState\n );\n\n element.removeEventListener(Enums.Events.IMAGE_LOAD_ERROR, setErrorState);\n };\n }, [element, viewportData]);\n\n if (error) {\n return (\n <>\n
\n
\n

\n

Error Loading Image

\n

An error has occurred.

\n

{error}

\n

\n
\n
\n \n );\n }\n\n if (loading) {\n return (\n // IMPORTANT: we need to use the pointer-events-none class to prevent the loading indicator from\n // interacting with the mouse, since scrolling should propagate to the viewport underneath\n
\n
\n

Loading...

\n
\n
\n );\n }\n\n return null;\n}\n\nViewportImageSliceLoadingIndicator.propTypes = {\n percentComplete: PropTypes.number,\n error: PropTypes.object,\n element: PropTypes.object,\n};\n\nViewportImageSliceLoadingIndicator.defaultProps = {\n percentComplete: 0,\n error: null,\n};\n\nexport default ViewportImageSliceLoadingIndicator;\n","import React, { useEffect, useState } from 'react';\n\nimport ViewportImageScrollbar from './ViewportImageScrollbar';\nimport ViewportOverlay from './ViewportOverlay';\nimport ViewportOrientationMarkers from './ViewportOrientationMarkers';\nimport ViewportImageSliceLoadingIndicator from './ViewportImageSliceLoadingIndicator';\n\nfunction CornerstoneOverlays(props) {\n const { viewportIndex, element, scrollbarHeight, servicesManager } = props;\n const { \n disableViewportImageScrollbar,\n disableViewportOverlay,\n disableViewportImageSliceLoadingIndicator,\n disableViewportOrientationMarkers,\n } = props;\n const { CornerstoneViewportService, CornerstoneCacheService} = servicesManager.services;\n const [imageSliceData, setImageSliceData] = useState({\n imageIndex: 0,\n numberOfSlices: 0,\n });\n const [viewportData, setViewportData] = useState(null);\n\n useEffect(() => {\n const { unsubscribe } = CornerstoneViewportService.subscribe(\n CornerstoneViewportService.EVENTS.VIEWPORT_DATA_CHANGED,\n props => {\n if (props.viewportIndex !== viewportIndex) {\n return;\n }\n\n setViewportData(props.viewportData);\n }\n );\n\n return () => {\n unsubscribe();\n };\n }, [viewportIndex]);\n\n if (!element) {\n return null;\n }\n\n if (viewportData) {\n const viewportInfo = CornerstoneViewportService.getViewportInfoByIndex(\n viewportIndex\n );\n\n if (viewportInfo?.viewportOptions?.customViewportProps?.hideOverlays) {\n return null;\n }\n }\n\n return (\n
\n {!disableViewportImageScrollbar && (\n \n )}\n {!disableViewportOverlay && (\n \n )}\n {!disableViewportImageSliceLoadingIndicator && (\n \n )}\n {!disableViewportOrientationMarkers && (\n \n )}\n
\n );\n}\n\nexport default CornerstoneOverlays;\n","import React, { useEffect, useRef, useCallback, useState } from 'react';\nimport ReactResizeDetector from 'react-resize-detector';\nimport PropTypes from 'prop-types';\nimport * as cs3DTools from '@cornerstonejs/tools';\nimport {\n Enums,\n eventTarget,\n getEnabledElement,\n StackViewport,\n utilities as csUtils,\n CONSTANTS,\n} from '@cornerstonejs/core';\n\nimport { setEnabledElement } from '../state';\n\nimport './OHIFCornerstoneViewport.css';\nimport CornerstoneOverlays from './Overlays/CornerstoneOverlays';\nimport {\n IStackViewport,\n IVolumeViewport,\n} from '@cornerstonejs/core/dist/esm/types';\nimport getSOPInstanceAttributes from '../utils/measurementServiceMappings/utils/getSOPInstanceAttributes';\n\nconst STACK = 'stack';\n\nfunction areEqual(prevProps, nextProps) {\n if (nextProps.needsRerendering) {\n return false;\n }\n\n if (prevProps.displaySets.length !== nextProps.displaySets.length) {\n return false;\n }\n\n if (\n prevProps.viewportOptions.orientation !==\n nextProps.viewportOptions.orientation\n ) {\n return false;\n }\n\n if (\n prevProps.viewportOptions.viewportType !==\n nextProps.viewportOptions.viewportType\n ) {\n return false;\n }\n\n const prevDisplaySets = prevProps.displaySets;\n const nextDisplaySets = nextProps.displaySets;\n\n if (prevDisplaySets.length !== nextDisplaySets.length) {\n return false;\n }\n\n for (let i = 0; i < prevDisplaySets.length; i++) {\n const prevDisplaySet = prevDisplaySets[i];\n\n const foundDisplaySet = nextDisplaySets.find(\n nextDisplaySet =>\n nextDisplaySet.displaySetInstanceUID ===\n prevDisplaySet.displaySetInstanceUID\n );\n\n if (!foundDisplaySet) {\n return false;\n }\n\n // check they contain the same image\n if (foundDisplaySet.images?.length !== prevDisplaySet.images?.length) {\n return false;\n }\n\n // check if their imageIds are the same\n if (foundDisplaySet.images?.length) {\n for (let j = 0; j < foundDisplaySet.images.length; j++) {\n if (\n foundDisplaySet.images[j].imageId !== prevDisplaySet.images[j].imageId\n ) {\n return false;\n }\n }\n }\n }\n\n return true;\n}\n\n// Todo: This should be done with expose of internal API similar to react-vtkjs-viewport\n// Then we don't need to worry about the re-renders if the props change.\nconst OHIFCornerstoneViewport = React.memo(React.forwardRef((props, ref) => {\n const {\n viewportIndex,\n displaySets,\n dataSource,\n viewportOptions,\n displaySetOptions,\n servicesManager,\n onElementEnabled,\n onElementDisabled,\n // Note: you SHOULD NOT use the initialImageIdOrIndex for manipulation\n // of the imageData in the OHIFCornerstoneViewport. This prop is used\n // to set the initial state of the viewport's first image to render\n initialImageIndex,\n disableViewportImageScrollbar,\n disableViewportOverlay,\n disableViewportImageSliceLoadingIndicator,\n disableViewportOrientationMarkers,\n } = props;\n\n const [scrollbarHeight, setScrollbarHeight] = useState('100px');\n\n const elementRef = useRef();\n\n React.useImperativeHandle(ref, () => elementRef.current);\n\n const {\n MeasurementService,\n DisplaySetService,\n ToolBarService,\n ToolGroupService,\n SyncGroupService,\n CornerstoneViewportService,\n CornerstoneCacheService,\n ViewportGridService,\n } = servicesManager.services;\n\n // useCallback for scroll bar height calculation\n const setImageScrollBarHeight = useCallback(() => {\n const scrollbarHeight = `${elementRef.current.clientHeight - 20}px`;\n setScrollbarHeight(scrollbarHeight);\n }, [elementRef]);\n\n // useCallback for onResize\n const onResize = useCallback(() => {\n if (elementRef.current) {\n CornerstoneViewportService.resize();\n setImageScrollBarHeight();\n }\n }, [elementRef]);\n\n const elementEnabledHandler = useCallback(\n evt => {\n // check this is this element reference and return early if doesn't match\n if (evt.detail.element !== elementRef.current) {\n return;\n }\n\n const { viewportId, element } = evt.detail;\n const viewportInfo = CornerstoneViewportService.getViewportInfo(\n viewportId\n );\n const viewportIndex = viewportInfo.getViewportIndex();\n\n setEnabledElement(viewportIndex, element);\n\n const renderingEngineId = viewportInfo.getRenderingEngineId();\n const toolGroupId = viewportInfo.getToolGroupId();\n const syncGroups = viewportInfo.getSyncGroups();\n\n ToolGroupService.addViewportToToolGroup(\n viewportId,\n renderingEngineId,\n toolGroupId\n );\n\n SyncGroupService.addViewportToSyncGroup(\n viewportId,\n renderingEngineId,\n syncGroups\n );\n\n if (onElementEnabled) {\n onElementEnabled(evt);\n }\n },\n [viewportIndex, onElementEnabled, ToolGroupService]\n );\n\n // disable the element upon unmounting\n useEffect(() => {\n CornerstoneViewportService.enableViewport(\n viewportIndex,\n viewportOptions,\n elementRef.current\n );\n\n eventTarget.addEventListener(\n Enums.Events.ELEMENT_ENABLED,\n elementEnabledHandler\n );\n\n setImageScrollBarHeight();\n\n return () => {\n const viewportInfo = CornerstoneViewportService.getViewportInfoByIndex(\n viewportIndex\n );\n\n const viewportId = viewportInfo.getViewportId();\n const renderingEngineId = viewportInfo.getRenderingEngineId();\n const syncGroups = viewportInfo.getSyncGroups();\n\n ToolGroupService.removeViewportFromToolGroup(\n viewportId,\n renderingEngineId\n );\n\n SyncGroupService.removeViewportFromSyncGroup(\n viewportId,\n renderingEngineId,\n syncGroups\n );\n\n CornerstoneViewportService.disableElement(viewportIndex);\n\n if (onElementDisabled) {\n onElementDisabled(viewportInfo);\n }\n\n eventTarget.removeEventListener(\n Enums.Events.ELEMENT_ENABLED,\n elementEnabledHandler\n );\n };\n }, []);\n\n // subscribe to displaySet metadata invalidation (updates)\n // Currently, if the metadata changes we need to re-render the display set\n // for it to take effect in the viewport. As we deal with scaling in the loading,\n // we need to remove the old volume from the cache, and let the\n // viewport to re-add it which will use the new metadata. Otherwise, the\n // viewport will use the cached volume and the new metadata will not be used.\n // Note: this approach does not actually end of sending network requests\n // and it uses the network cache\n useEffect(() => {\n const { unsubscribe } = DisplaySetService.subscribe(\n DisplaySetService.EVENTS.DISPLAY_SET_SERIES_METADATA_INVALIDATED,\n async invalidatedDisplaySetInstanceUID => {\n const viewportInfo = CornerstoneViewportService.getViewportInfoByIndex(\n viewportIndex\n );\n\n if (viewportInfo.hasDisplaySet(invalidatedDisplaySetInstanceUID)) {\n const viewportData = viewportInfo.getViewportData();\n const newViewportData = await CornerstoneCacheService.invalidateViewportData(\n viewportData,\n invalidatedDisplaySetInstanceUID,\n dataSource,\n DisplaySetService\n );\n\n const keepCamera = true;\n CornerstoneViewportService.updateViewport(\n viewportIndex,\n newViewportData,\n keepCamera\n );\n }\n }\n );\n return () => {\n unsubscribe();\n };\n }, [viewportIndex]);\n\n useEffect(() => {\n // handle the default viewportType to be stack\n if (!viewportOptions.viewportType) {\n viewportOptions.viewportType = STACK;\n }\n\n const loadViewportData = async () => {\n const viewportData = await CornerstoneCacheService.createViewportData(\n displaySets,\n viewportOptions,\n dataSource,\n initialImageIndex\n );\n\n CornerstoneViewportService.setViewportData(\n viewportIndex,\n viewportData,\n viewportOptions,\n displaySetOptions\n );\n };\n\n loadViewportData();\n }, [viewportOptions, displaySets, dataSource]);\n\n /**\n * There are two scenarios for jump to click\n * 1. Current viewports contain the displaySet that the annotation was drawn on\n * 2. Current viewports don't contain the displaySet that the annotation was drawn on\n * and we need to change the viewports displaySet for jumping.\n * Since measurement_jump happens via events and listeners, the former case is handled\n * by the measurement_jump direct callback, but the latter case is handled first by\n * the viewportGrid to set the correct displaySet on the viewport, AND THEN we check\n * the cache for jumping to see if there is any jump queued, then we jump to the correct slice.\n */\n useEffect(() => {\n const unsubscribeFromJumpToMeasurementEvents = _subscribeToJumpToMeasurementEvents(\n MeasurementService,\n DisplaySetService,\n elementRef,\n viewportIndex,\n displaySets,\n ViewportGridService,\n CornerstoneViewportService\n );\n\n _checkForCachedJumpToMeasurementEvents(\n MeasurementService,\n DisplaySetService,\n elementRef,\n viewportIndex,\n displaySets,\n ViewportGridService,\n CornerstoneViewportService\n );\n\n return () => {\n unsubscribeFromJumpToMeasurementEvents();\n };\n }, [displaySets, elementRef, viewportIndex]);\n\n return (\n
\n \n e.preventDefault()}\n onMouseDown={e => e.preventDefault()}\n ref={elementRef}\n >
\n \n
\n );\n }),\n areEqual\n);\n\nfunction _subscribeToJumpToMeasurementEvents(\n MeasurementService,\n DisplaySetService,\n elementRef,\n viewportIndex,\n displaySets,\n ViewportGridService,\n CornerstoneViewportService\n) {\n const displaysUIDs = displaySets.map(\n displaySet => displaySet.displaySetInstanceUID\n );\n const { unsubscribe } = MeasurementService.subscribe(\n MeasurementService.EVENTS.JUMP_TO_MEASUREMENT,\n ({ measurement }) => {\n if (!measurement) return;\n\n // Jump the the measurement if the viewport contains the displaySetUID (fusion)\n if (displaysUIDs.includes(measurement.displaySetInstanceUID)) {\n _jumpToMeasurement(\n measurement,\n elementRef,\n viewportIndex,\n MeasurementService,\n DisplaySetService,\n ViewportGridService,\n CornerstoneViewportService\n );\n }\n }\n );\n\n return unsubscribe;\n}\n\n// Check if there is a queued jumpToMeasurement event\nfunction _checkForCachedJumpToMeasurementEvents(\n MeasurementService,\n DisplaySetService,\n elementRef,\n viewportIndex,\n displaySets,\n ViewportGridService,\n CornerstoneViewportService\n) {\n const displaysUIDs = displaySets.map(\n displaySet => displaySet.displaySetInstanceUID\n );\n\n const measurementIdToJumpTo = MeasurementService.getJumpToMeasurement(\n viewportIndex\n );\n\n if (measurementIdToJumpTo && elementRef) {\n // Jump to measurement if the measurement exists\n const measurement = MeasurementService.getMeasurement(\n measurementIdToJumpTo\n );\n\n if (displaysUIDs.includes(measurement.displaySetInstanceUID)) {\n _jumpToMeasurement(\n measurement,\n elementRef,\n viewportIndex,\n MeasurementService,\n DisplaySetService,\n ViewportGridService,\n CornerstoneViewportService\n );\n }\n }\n}\n\nfunction _jumpToMeasurement(\n measurement,\n targetElementRef,\n viewportIndex,\n MeasurementService,\n DisplaySetService,\n ViewportGridService,\n CornerstoneViewportService\n) {\n const targetElement = targetElementRef.current;\n const { displaySetInstanceUID, SOPInstanceUID, frameNumber } = measurement;\n\n if (!SOPInstanceUID) {\n console.warn('cannot jump in a non-acquisition plane measurements yet');\n }\n\n const referencedDisplaySet = DisplaySetService.getDisplaySetByUID(\n displaySetInstanceUID\n );\n\n // Todo: setCornerstoneMeasurementActive should be handled by the toolGroupManager\n // to set it properly\n // setCornerstoneMeasurementActive(measurement);\n\n ViewportGridService.setActiveViewportIndex(viewportIndex);\n\n const enableElement = getEnabledElement(targetElement);\n\n const viewportInfo = CornerstoneViewportService.getViewportInfoByIndex(\n viewportIndex\n );\n\n if (enableElement) {\n // See how the jumpToSlice() of Cornerstone3D deals with imageIdx param.\n const viewport = enableElement.viewport as IStackViewport | IVolumeViewport;\n\n let imageIdIndex = 0;\n let viewportCameraDirectionMatch = true;\n\n if (viewport instanceof StackViewport) {\n const imageIds = viewport.getImageIds();\n imageIdIndex = imageIds.findIndex(imageId => {\n const {\n SOPInstanceUID: aSOPInstanceUID,\n frameNumber: aFrameNumber,\n } = getSOPInstanceAttributes(imageId);\n return (\n aSOPInstanceUID === SOPInstanceUID &&\n (!frameNumber || frameNumber === aFrameNumber)\n );\n });\n } else {\n // for volume viewport we can't rely on the imageIdIndex since it can be\n // a reconstructed view that doesn't match the original slice numbers etc.\n const { viewPlaneNormal } = measurement.metadata;\n imageIdIndex = referencedDisplaySet.images.findIndex(\n i => i.SOPInstanceUID === SOPInstanceUID\n );\n\n const { orientation } = viewportInfo.getViewportOptions();\n\n if (\n orientation &&\n viewPlaneNormal &&\n !csUtils.isEqual(\n CONSTANTS.MPR_CAMERA_VALUES[orientation]?.viewPlaneNormal,\n viewPlaneNormal\n )\n ) {\n viewportCameraDirectionMatch = false;\n }\n }\n\n if (!viewportCameraDirectionMatch || imageIdIndex === -1) {\n return;\n }\n\n cs3DTools.utilities.jumpToSlice(targetElement, {\n imageIndex: imageIdIndex,\n });\n\n cs3DTools.annotation.selection.setAnnotationSelected(measurement.uid);\n // Jump to measurement consumed, remove.\n MeasurementService.removeJumpToMeasurement(viewportIndex);\n }\n}\n\n// Component displayName\nOHIFCornerstoneViewport.displayName = 'OHIFCornerstoneViewport';\n\nOHIFCornerstoneViewport.propTypes = {\n viewportIndex: PropTypes.number.isRequired,\n displaySets: PropTypes.array.isRequired,\n dataSource: PropTypes.object.isRequired,\n viewportOptions: PropTypes.object,\n displaySetOptions: PropTypes.arrayOf(PropTypes.any),\n servicesManager: PropTypes.object.isRequired,\n onElementEnabled: PropTypes.func,\n // Note: you SHOULD NOT use the initialImageIdOrIndex for manipulation\n // of the imageData in the OHIFCornerstoneViewport. This prop is used\n // to set the initial state of the viewport's first image to render\n initialImageIdOrIndex: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number,\n ]),\n};\n\nexport default OHIFCornerstoneViewport;\n"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__extends","TypeError","String","__","this","constructor","create","__rest","s","e","t","indexOf","getOwnPropertySymbols","i","length","propertyIsEnumerable","commonjsGlobal","globalThis","window","g","self","isObject_1","value","type","freeGlobal","freeSelf","root$2","Function","root$1","now_1","Date","now","reWhitespace","trimmedEndIndex","string","index","test","charAt","reTrimStart","_baseTrim","slice","replace","_Symbol","Symbol","Symbol$1","objectProto$1","nativeObjectToString$1","toString","symToStringTag$1","toStringTag","undefined","_getRawTag","isOwn","tag","unmasked","result","nativeObjectToString","getRawTag","objectToString","symToStringTag","baseGetTag","isObjectLike","baseTrim","isObject$2","isSymbol","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","isObject$1","toNumber","other","valueOf","isBinary","nativeMax","Math","max","nativeMin","min","debounce_1","func","wait","options","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","time","args","thisArg","apply","leadingEdge","setTimeout","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","arguments","clearTimeout","cancel","flush","debounce","isObject","throttle_1","patchResizeHandler","resizeCallback","refreshMode","refreshRate","refreshOptions","isFunction","fn","isSSR","isDOMElement","element","Element","HTMLDocument","createNotifier","onResize","setSize","handleWidth","handleHeight","_a","width","height","prev","ResizeDetector","_super","props","_this","cancelHandler","resizeHandler","attachObserver","targetRef","observerOptions","current","getElement","observableElement","resizeObserver","observe","querySelector","targetDomEl","document","currentElement","findDOMNode","getRenderType","parentElement","createResizeHandler","entries","_b","_c","notifyResize","setState","bind","forEach","entry","contentRect","skipOnMount","render","children","isValidElement","isArray","state","createRef","ResizeObserver","componentDidMount","componentDidUpdate","componentWillUnmount","disconnect","typedChildren","nodeType","WrapperTag","childProps","nativeProps","cloneElement","map","el","PureComponent","useEffect","useLayoutEffect","CornerstoneImageScrollbar","viewportData","viewportIndex","imageSliceData","setImageSliceData","scrollbarHeight","servicesManager","services","CineService","CornerstoneViewportService","viewport","getCornerstoneViewportByIndex","viewportType","Enums","sliceData","utilities","imageIndex","numberOfSlices","getCurrentImageIdIndex","data","imageIds","updateStackIndex","event","newImageIdIndex","detail","addEventListener","removeEventListener","updateVolumeIndex","onChange","evt","viewportId","getViewportInfoByIndex","getViewportId","getCornerstoneViewport","getState","isCineEnabled","stopClip","setCine","id","isPlaying","csToolsUtils","debounceLoading","onImageScrollbarChange","propTypes","PropTypes","EPSILON","CornerstoneViewportOverlay","ToolBarService","useState","windowCenter","windowWidth","voi","setVOI","scale","setScale","activeTools","setActiveTools","getActiveTools","isMounted","unsubscribe","subscribe","EVENTS","TOOL_BAR_STATE_MODIFIED","updateVOI","eventDetail","range","lower","upper","updateScale","previousCamera","camera","parallelScale","imageData","getImageData","spacing","clientHeight","getTopLeftContent","useCallback","includes","className","toFixed","getTopRightContent","instanceNumber","imageId","metaData","get","_getInstanceNumberFromStack","volumes","volume","direction","cornerstoneViewport","viewPlaneNormal","getCamera","scanAxisNormal","cross","vec3","_getInstanceNumberFromVolume","topLeft","topRight","getOrientationStringLPS","invertOrientationStringLPS","ViewportOrientationMarkers","orientationMarkers","rotation","setRotation","flipHorizontal","setFlipHorizontal","flipVertical","setFlipVertical","cameraModifiedListener","markers","useMemo","rowCosines","columnCosines","getEnabledElement","viewUp","viewRight","rowString","columnString","oppositeRowString","top","left","right","bottom","_getOrientationMarkers","backgroundColor","getViewportOptions","background","csUtils","m","key","percentComplete","error","defaultProps","ViewportImageSliceLoadingIndicator","loading","setLoading","setError","loadIndicatorRef","useRef","imageIdToBeLoaded","setLoadingState","setFinishLoadingState","setErrorState","disableViewportImageScrollbar","disableViewportOverlay","disableViewportImageSliceLoadingIndicator","disableViewportOrientationMarkers","CornerstoneCacheService","setViewportData","VIEWPORT_DATA_CHANGED","viewportInfo","viewportOptions","customViewportProps","hideOverlays","ViewportImageScrollbar","ViewportOverlay","areEqual","prevProps","nextProps","needsRerendering","displaySets","orientation","prevDisplaySets","nextDisplaySets","prevDisplaySet","foundDisplaySet","find","nextDisplaySet","displaySetInstanceUID","images","j","OHIFCornerstoneViewport","React","ref","dataSource","displaySetOptions","onElementEnabled","onElementDisabled","initialImageIndex","setScrollbarHeight","elementRef","MeasurementService","DisplaySetService","ToolGroupService","SyncGroupService","ViewportGridService","setImageScrollBarHeight","resize","elementEnabledHandler","getViewportInfo","getViewportIndex","setEnabledElement","renderingEngineId","getRenderingEngineId","toolGroupId","getToolGroupId","syncGroups","getSyncGroups","addViewportToToolGroup","addViewportToSyncGroup","enableViewport","eventTarget","removeViewportFromToolGroup","removeViewportFromSyncGroup","disableElement","DISPLAY_SET_SERIES_METADATA_INVALIDATED","invalidatedDisplaySetInstanceUID","hasDisplaySet","getViewportData","invalidateViewportData","newViewportData","updateViewport","loadViewportData","createViewportData","unsubscribeFromJumpToMeasurementEvents","displaysUIDs","displaySet","JUMP_TO_MEASUREMENT","measurement","_jumpToMeasurement","_subscribeToJumpToMeasurementEvents","measurementIdToJumpTo","getJumpToMeasurement","getMeasurement","_checkForCachedJumpToMeasurementEvents","style","onContextMenu","preventDefault","onMouseDown","targetElementRef","targetElement","SOPInstanceUID","frameNumber","console","warn","referencedDisplaySet","getDisplaySetByUID","setActiveViewportIndex","enableElement","imageIdIndex","viewportCameraDirectionMatch","StackViewport","getImageIds","findIndex","getSOPInstanceAttributes","aSOPInstanceUID","aFrameNumber","metadata","CONSTANTS","cs3DTools","uid","removeJumpToMeasurement","displayName","initialImageIdOrIndex"],"sourceRoot":""} \ No newline at end of file diff --git a/platform/viewer-static/dist/365.css b/platform/viewer-static/dist/365.css new file mode 100644 index 00000000000..fbd17ab2608 --- /dev/null +++ b/platform/viewer-static/dist/365.css @@ -0,0 +1,2 @@ +.viewport-wrapper{height:100%;position:relative;width:100%}.cornerstone-viewport-element{background-color:#000;height:100%;outline:0!important;overflow:hidden;position:relative;width:100%} +.ViewportOrientationMarkers{--marker-width:100px;--marker-height:100px;--scrollbar-width:20px;color:#ccc;font-size:15px;line-height:18px;pointer-events:none}.ViewportOrientationMarkers .orientation-marker{position:absolute}.ViewportOrientationMarkers .top-mid{left:50%;top:.6rem}.ViewportOrientationMarkers .left-mid{left:5px;top:47%}.ViewportOrientationMarkers .right-mid{left:calc(100% - var(--marker-width) - var(--scrollbar-width));top:47%}.ViewportOrientationMarkers .bottom-mid{left:47%;top:calc(100% - var(--marker-height) - .6rem)}.ViewportOrientationMarkers .right-mid .orientation-marker-value{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;min-width:var(--marker-width)}.ViewportOrientationMarkers .bottom-mid .orientation-marker-value{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;min-height:var(--marker-height)} diff --git a/platform/viewer-static/dist/36785fbd89b0e17f6099.wasm b/platform/viewer-static/dist/36785fbd89b0e17f6099.wasm new file mode 100644 index 00000000000..069fac9edeb Binary files /dev/null and b/platform/viewer-static/dist/36785fbd89b0e17f6099.wasm differ diff --git a/platform/viewer-static/dist/4f04ab70bef8f727404f.wasm b/platform/viewer-static/dist/4f04ab70bef8f727404f.wasm new file mode 100644 index 00000000000..2826eb60094 Binary files /dev/null and b/platform/viewer-static/dist/4f04ab70bef8f727404f.wasm differ diff --git a/platform/viewer-static/dist/569.bundle.5c809f7a1b9a80e0a01e.js b/platform/viewer-static/dist/569.bundle.5c809f7a1b9a80e0a01e.js new file mode 100644 index 00000000000..81d5cf1623c --- /dev/null +++ b/platform/viewer-static/dist/569.bundle.5c809f7a1b9a80e0a01e.js @@ -0,0 +1,3 @@ +/*! For license information please see 569.bundle.5c809f7a1b9a80e0a01e.js.LICENSE.txt */ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[569],{33569:function(t,e,n){n.r(e),n.d(e,{default:function(){return _}});var r=n(32735),o=n(60216),i=n.n(o),a=n(84334),c=n(72928),u=n(67013),s=n(38942);var l=function(t,e,n){var r=n.getModuleEntry("@ohif/extension-cornerstone.utilityModule.tools").exports,o=r.toolNames,i=r.Enums,a={active:[{toolName:o.WindowLevel,bindings:[{mouseButton:i.MouseBindings.Primary}]},{toolName:o.Pan,bindings:[{mouseButton:i.MouseBindings.Auxiliary}]},{toolName:o.Zoom,bindings:[{mouseButton:i.MouseBindings.Secondary}]},{toolName:o.StackScrollMouseWheel,bindings:[]}],enabled:[{toolName:o.SegmentationDisplay}]};return t.createToolGroupAndAddTools(e,a,{})};function f(t){return f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},f(t)}function p(){p=function(){return t};var t={},e=Object.prototype,n=e.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function c(t,e,n){return Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{c({},"")}catch(t){c=function(t,e,n){return t[e]=n}}function u(t,e,n,r){var o=e&&e.prototype instanceof h?e:h,i=Object.create(o.prototype),a=new L(r||[]);return i._invoke=function(t,e,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return N()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var c=x(a,n);if(c){if(c===l)continue;return c}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var u=s(t,e,n);if("normal"===u.type){if(r=n.done?"completed":"suspendedYield",u.arg===l)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(r="completed",n.method="throw",n.arg=u.arg)}}}(t,n,a),i}function s(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(t){return{type:"throw",arg:t}}}t.wrap=u;var l={};function h(){}function d(){}function y(){}var v={};c(v,o,(function(){return this}));var m=Object.getPrototypeOf,g=m&&m(m(D([])));g&&g!==e&&n.call(g,o)&&(v=g);var w=y.prototype=h.prototype=Object.create(v);function S(t){["next","throw","return"].forEach((function(e){c(t,e,(function(t){return this._invoke(e,t)}))}))}function b(t,e){function r(o,i,a,c){var u=s(t[o],t,i);if("throw"!==u.type){var l=u.arg,p=l.value;return p&&"object"==f(p)&&n.call(p,"__await")?e.resolve(p.__await).then((function(t){r("next",t,a,c)}),(function(t){r("throw",t,a,c)})):e.resolve(p).then((function(t){l.value=t,a(l)}),(function(t){return r("throw",t,a,c)}))}c(u.arg)}var o;this._invoke=function(t,n){function i(){return new e((function(e,o){r(t,n,e,o)}))}return o=o?o.then(i,i):i()}}function x(t,e){var n=t.iterator[e.method];if(void 0===n){if(e.delegate=null,"throw"===e.method){if(t.iterator.return&&(e.method="return",e.arg=void 0,x(t,e),"throw"===e.method))return l;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,t.iterator,e.arg);if("throw"===r.type)return e.method="throw",e.arg=r.arg,e.delegate=null,l;var o=r.arg;return o?o.done?(e[t.resultName]=o.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,l):o:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,l)}function E(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function I(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function L(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(E,this),this.reset(!0)}function D(t){if(t){var e=t[o];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var r=-1,i=function e(){for(;++r=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var c=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(c&&u){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),I(n),l}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var o=r.arg;I(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:D(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},t}function h(t,e,n,r,o,i,a){try{var c=t[i](a),u=c.value}catch(t){return void n(t)}c.done?e(u):Promise.resolve(u).then(r,o)}function d(t){return function(){var e=this,n=arguments;return new Promise((function(r,o){var i=t.apply(e,n);function a(t){h(i,r,o,a,c,"next",t)}function c(t){h(i,r,o,a,c,"throw",t)}a(void 0)}))}}function y(){return(y=d(p().mark((function t(e){var n,r,o,i,a,c,u,s,l,f,h,d,y;return p().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=e.segDisplaySet,r=e.viewportIndex,o=e.toolGroupId,i=e.servicesManager,a=i.services,c=a.SegmentationService,u=a.HangingProtocolService,s=a.ViewportGridService,l=n.referencedDisplaySetInstanceUID,f=null,!1,t.next=7,c.createSegmentationForSEGDisplaySet(n,f,false);case 7:return f=t.sent,c.hydrateSegmentation(n.displaySetInstanceUID),h=s.getState(),d=h.viewports,y=u.getViewportsRequireUpdate(r,l),s.setDisplaySetsForViewports(y),d.forEach((function(t,e){e!==r&&(c.shouldRenderSegmentation(t.displaySetInstanceUIDs,n.displaySetInstanceUID)&&s.setDisplaySetsForViewport({viewportIndex:e,displaySetInstanceUIDs:t.displaySetInstanceUIDs,viewportOptions:{viewportType:"volume",toolGroupId:o,initialImageOptions:{preset:"middle"}}}))})),t.abrupt("return",!0);case 14:case"end":return t.stop()}}),t)})))).apply(this,arguments)}var v=function(t){return y.apply(this,arguments)};function m(t){return m="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},m(t)}function g(){g=function(){return t};var t={},e=Object.prototype,n=e.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function c(t,e,n){return Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{c({},"")}catch(t){c=function(t,e,n){return t[e]=n}}function u(t,e,n,r){var o=e&&e.prototype instanceof f?e:f,i=Object.create(o.prototype),a=new L(r||[]);return i._invoke=function(t,e,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return N()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var c=x(a,n);if(c){if(c===l)continue;return c}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var u=s(t,e,n);if("normal"===u.type){if(r=n.done?"completed":"suspendedYield",u.arg===l)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(r="completed",n.method="throw",n.arg=u.arg)}}}(t,n,a),i}function s(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(t){return{type:"throw",arg:t}}}t.wrap=u;var l={};function f(){}function p(){}function h(){}var d={};c(d,o,(function(){return this}));var y=Object.getPrototypeOf,v=y&&y(y(D([])));v&&v!==e&&n.call(v,o)&&(d=v);var w=h.prototype=f.prototype=Object.create(d);function S(t){["next","throw","return"].forEach((function(e){c(t,e,(function(t){return this._invoke(e,t)}))}))}function b(t,e){function r(o,i,a,c){var u=s(t[o],t,i);if("throw"!==u.type){var l=u.arg,f=l.value;return f&&"object"==m(f)&&n.call(f,"__await")?e.resolve(f.__await).then((function(t){r("next",t,a,c)}),(function(t){r("throw",t,a,c)})):e.resolve(f).then((function(t){l.value=t,a(l)}),(function(t){return r("throw",t,a,c)}))}c(u.arg)}var o;this._invoke=function(t,n){function i(){return new e((function(e,o){r(t,n,e,o)}))}return o=o?o.then(i,i):i()}}function x(t,e){var n=t.iterator[e.method];if(void 0===n){if(e.delegate=null,"throw"===e.method){if(t.iterator.return&&(e.method="return",e.arg=void 0,x(t,e),"throw"===e.method))return l;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,t.iterator,e.arg);if("throw"===r.type)return e.method="throw",e.arg=r.arg,e.delegate=null,l;var o=r.arg;return o?o.done?(e[t.resultName]=o.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,l):o:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,l)}function E(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function I(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function L(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(E,this),this.reset(!0)}function D(t){if(t){var e=t[o];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var r=-1,i=function e(){for(;++r=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var c=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(c&&u){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),I(n),l}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var o=r.arg;I(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:D(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},t}function w(t,e,n,r,o,i,a){try{var c=t[i](a),u=c.value}catch(t){return void n(t)}c.done?e(u):Promise.resolve(u).then(r,o)}var S=0,b=5;function x(t,e){return new Promise((function(n,r){var o=[{type:"secondary",text:"No",value:S},{type:"primary",text:"Yes",value:b}];t.show({viewportIndex:e,type:"info",message:"Do you want to open this Segmentation?",actions:o,onSubmit:function(e){t.hide(),n(e)},onOutsideClick:function(){t.hide(),n(S)}})}))}var E=function(t){var e=t.servicesManager,n=t.segDisplaySet,r=t.viewportIndex,o=t.toolGroupId,i=void 0===o?"default":o,a=e.services.UIViewportDialogService;return new Promise(function(){var t,o=(t=g().mark((function t(o,c){var u;return g().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,x(a,r);case 2:if(t.sent!==b){t.next=8;break}return t.next=6,v({segDisplaySet:n,viewportIndex:r,toolGroupId:i,servicesManager:e});case 6:u=t.sent,o(u);case 8:case"end":return t.stop()}}),t)})),function(){var e=this,n=arguments;return new Promise((function(r,o){var i=t.apply(e,n);function a(t){w(i,r,o,a,c,"next",t)}function c(t){w(i,r,o,a,c,"throw",t)}a(void 0)}))});return function(t,e){return o.apply(this,arguments)}}())},I=n(40841),L=n.n(I);function D(){return D=Object.assign?Object.assign.bind():function(t){for(var e=1;et.length)&&(e=t.length);for(var n=0,r=new Array(e);n1)throw new Error("SEG viewport should only have a single display set");var g=n[0],w=N((0,u.O_)(),2),S=w[0],b=w[1],x=N((0,u.en)(),2),I=x[0],P=(x[1],N((0,r.useState)(!1),2)),O=(P[0],P[1]),_=N((0,r.useState)(1),2),G=_[0],T=_[1],j=N((0,r.useState)(g.isHydrated),2),A=j[0],M=j[1],F=N((0,r.useState)(!g.isLoaded),2),C=F[0],U=F[1],V=N((0,r.useState)(null),2),R=(V[0],V[1]),B=N((0,r.useState)({segmentIndex:1,totalSegments:null}),2),Y=B[0],H=B[1],Z=(0,r.useRef)(null),q=S.viewports,J=S.activeViewportIndex,W=g.getReferenceDisplaySet(),X=function(t){var e=t.images[0];return{PatientID:e.PatientID,PatientName:e.PatientName,PatientSex:e.PatientSex,PatientAge:e.PatientAge,SliceThickness:e.SliceThickness,StudyDate:e.StudyDate,SeriesDescription:e.SeriesDescription,SeriesInstanceUID:e.SeriesInstanceUID,SeriesNumber:e.SeriesNumber,ManufacturerModelName:e.ManufacturerModelName,SpacingBetweenSlices:e.SpacingBetweenSlices}}(W);Z.current={displaySet:W,metadata:X};var $=function(t){R(t.detail.element)},z=function(){R(null)},K=(0,r.useCallback)((function(){var e=p.getModuleEntry("@ohif/extension-cornerstone.viewportModule.cornerstone").component,n=Z.current.displaySet;return r.createElement(e,D({},t,{displaySets:[n,g],viewportOptions:{viewportType:"volume",toolGroupId:m,orientation:o.orientation},onElementEnabled:$,onElementDisabled:z}))}),[i,g,m]),Q=(0,r.useCallback)((function(t){t="left"===t?-1:1;var e=g.displaySetInstanceUID,n=v.getSegmentation(e).segments,r=Object.keys(n).length,o=G+t;o>r-1?o=1:0===o&&(o=r-1),v.jumpToSegmentCenter(e,o,m),T(o)}),[G]);(0,r.useEffect)((function(){C||E({servicesManager:f,viewportIndex:i,segDisplaySet:g}).then((function(t){t&&M(!0)}))}),[f,i,g,C]),(0,r.useEffect)((function(){var t=v.subscribe(v.EVENTS.SEGMENTATION_PIXEL_DATA_CREATED,(function(t){t.segDisplaySet.displaySetInstanceUID===g.displaySetInstanceUID&&U(!1)})).unsubscribe;return function(){t()}}),[g]),(0,r.useEffect)((function(){var t=v.subscribe(v.EVENTS.SEGMENT_PIXEL_DATA_CREATED,(function(t){var e=t.segmentIndex,n=t.numSegments;H({segmentIndex:e,totalSegments:n})})).unsubscribe;return function(){t()}}),[g]),(0,r.useEffect)((function(){var t=d.subscribe(d.EVENTS.DISPLAY_SETS_REMOVED,(function(t){var e=t.displaySetInstanceUIDs,n=q[J];e.includes(n.displaySetInstanceUID)&&b.setDisplaySetsForViewport({viewportIndex:J,displaySetInstanceUIDs:[]})}));return function(){t.unsubscribe()}}),[]),(0,r.useEffect)((function(){var t=y.getToolGroup(m);if(!t)return t=l(y,m,p),O(!0),function(){v.removeSegmentationRepresentationFromToolGroup(m),y.destroyToolGroup(m)}}),[]),(0,r.useEffect)((function(){return M(g.isHydrated),function(){v.removeSegmentationRepresentationFromToolGroup(m),Z.current=null}}),[g]);var tt=null;if(!Z.current||W.displaySetInstanceUID!==Z.current.displaySet.displaySetInstanceUID)return null;e&&e.length&&(tt=e.map((function(t,e){return t&&r.cloneElement(t,{viewportIndex:i,key:e})})));var et=Z.current.metadata,nt=et.PatientID,rt=et.PatientName,ot=et.PatientSex,it=et.PatientAge,at=et.SliceThickness,ct=et.ManufacturerModelName,ut=et.StudyDate,st=et.SeriesDescription,lt=et.SpacingBetweenSlices,ft=et.SeriesNumber,pt=function(){E({servicesManager:f,viewportIndex:i,segDisplaySet:g}).then((function(t){t&&M(!0)}))};return r.createElement(r.Fragment,null,r.createElement(u.uY,{onDoubleClick:function(t){t.stopPropagation(),t.preventDefault()},onArrowsClick:Q,getStatusComponent:function(){return function(t){var e=t.isHydrated,n=t.onPillClick,o=null,i=null;switch(e){case!0:i=function(){return r.createElement("div",{className:"flex items-center justify-center -mr-1 rounded-full",style:{width:"18px",height:"18px",backgroundColor:"#98e5c1",border:"solid 1.5px #000000"}},r.createElement(u.JO,{name:"exclamation",style:{color:"#000",width:"12px",height:"12px"}}))},o=function(){return r.createElement("div",null,"This Segmentation is loaded in the segmentation panel")};break;case!1:i=function(){return r.createElement("div",{className:"flex items-center justify-center -mr-1 bg-white rounded-full group-hover:bg-customblue-200",style:{width:"18px",height:"18px",border:"solid 1.5px #000000"}},r.createElement(u.JO,{name:"arrow-left",style:{color:"#000",width:"14px",height:"14px"}}))},o=function(){return r.createElement("div",null,"Click to load segmentation.")}}var a=function(){return r.createElement("div",{className:L()("group relative flex items-center justify-center px-8 rounded-full cursor-default bg-customgreen-100",{"hover:bg-customblue-100":!e,"cursor-pointer":!e}),style:{height:"24px",width:"55px"},onClick:function(){e||n&&n()}},r.createElement("div",{className:"pr-1 text-base font-medium leading-none text-black"},"SEG"),r.createElement(i,null))};return r.createElement(r.Fragment,null,o&&r.createElement(u.u,{content:r.createElement(o,null),position:"bottom-left"},r.createElement(a,null)),!o&&r.createElement(a,null))}({isHydrated:A,onPillClick:pt})},studyData:{label:c,useAltStyling:!0,studyDate:k(ut),currentSeries:ft,seriesDescription:"SEG Viewport ".concat(st),patientInformation:{patientName:rt?a.ZP.utils.formatPN(rt.Alphabetic):"",patientSex:ot||"",patientAge:it||"",MRN:nt||"",thickness:at?"".concat(at.toFixed(2),"mm"):"",spacing:void 0!==lt?"".concat(lt.toFixed(2),"mm"):"",scanner:ct||""}}}),r.createElement("div",{className:"relative flex flex-row w-full h-full overflow-hidden"},C&&r.createElement(u.LE,{className:"w-full h-full",progress:null!==Y.totalSegments?(Y.segmentIndex+1)/Y.totalSegments*100:null,textBlock:Y.totalSegments?r.createElement("span",{className:"text-white text-sm flex items-baseline space-x-2"},r.createElement("div",null,"Loading Segment"),r.createElement("div",{className:"w-3"},"".concat(Y.segmentIndex)),r.createElement("div",null,"/"),r.createElement("div",null,"".concat(Y.totalSegments))):r.createElement("span",{className:"text-white text-sm"},"Loading SEG ...")}),K(),r.createElement("div",{className:"absolute w-full"},I.viewportIndex===i&&r.createElement(u.P_,{id:"viewport-notification",message:I.message,type:I.type,actions:I.actions,onSubmit:I.onSubmit,onOutsideClick:I.onOutsideClick})),tt))}O.propTypes={displaySets:i().arrayOf(i().object),viewportIndex:i().number.isRequired,dataSource:i().object,children:i().node,customProps:i().object},O.defaultProps={customProps:{}};var _=O}}]); +//# sourceMappingURL=569.bundle.5c809f7a1b9a80e0a01e.js.map \ No newline at end of file diff --git a/platform/viewer-static/dist/569.bundle.5c809f7a1b9a80e0a01e.js.LICENSE.txt b/platform/viewer-static/dist/569.bundle.5c809f7a1b9a80e0a01e.js.LICENSE.txt new file mode 100644 index 00000000000..ae386fb79c9 --- /dev/null +++ b/platform/viewer-static/dist/569.bundle.5c809f7a1b9a80e0a01e.js.LICENSE.txt @@ -0,0 +1 @@ +/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ diff --git a/platform/viewer-static/dist/569.bundle.5c809f7a1b9a80e0a01e.js.map b/platform/viewer-static/dist/569.bundle.5c809f7a1b9a80e0a01e.js.map new file mode 100644 index 00000000000..849c435d1c0 --- /dev/null +++ b/platform/viewer-static/dist/569.bundle.5c809f7a1b9a80e0a01e.js.map @@ -0,0 +1 @@ +{"version":3,"file":"569.bundle.5c809f7a1b9a80e0a01e.js","mappings":";sNAiCA,MAjCA,SACEA,EACAC,EACAC,GAEA,IAIA,EAJsBA,EAAiBC,eACrC,mDAGyCC,QAAnCC,EAAR,EAAQA,UAAWC,EAAnB,EAAmBA,MAEbC,EAAQ,CACZC,OAAQ,CACN,CACEC,SAAUJ,EAAUK,YACpBC,SAAU,CAAC,CAAEC,YAAaN,EAAMO,cAAcC,WAEhD,CACEL,SAAUJ,EAAUU,IACpBJ,SAAU,CAAC,CAAEC,YAAaN,EAAMO,cAAcG,aAEhD,CACEP,SAAUJ,EAAUY,KACpBN,SAAU,CAAC,CAAEC,YAAaN,EAAMO,cAAcK,aAEhD,CAAET,SAAUJ,EAAUc,sBAAuBR,SAAU,KAEzDS,QAAS,CAAC,CAAEX,SAAUJ,EAAUgB,uBAGlC,OAAOrB,EAAiBsB,2BAA2BrB,EAAaM,EAAO,wPC7BzE,snNADA,oHACEgB,EADF,EACEA,cACAC,EAFF,EAEEA,cACAvB,EAHF,EAGEA,YACAwB,EAJF,EAIEA,gBAJF,EAUMA,EAAgBC,SAHlBC,EAPJ,EAOIA,oBACAC,EARJ,EAQIA,uBACAC,EATJ,EASIA,oBAGIC,EAAwBP,EAAcQ,gCAExCC,EAAiB,MAGE,EAjBzB,SAmByBL,EAAoBM,mCACzCV,EACAS,EAJqB,OAjBzB,cAmBEA,EAnBF,OAyBEL,EAAoBO,oBAAoBX,EAAcO,uBAzBxD,EA2BwBD,EAAoBM,WAAlCC,EA3BV,EA2BUA,UAEFC,EAAmBT,EAAuBU,0BAC9Cd,EACAM,GAGFD,EAAoBU,2BAA2BF,GAQ/CD,EAAUI,SAAQ,SAACC,EAAUC,GACvBA,IAAUlB,IAIWG,EAAoBgB,yBAC3CF,EAASG,uBACTrB,EAAcO,wBAIdD,EAAoBgB,0BAA0B,CAC5CrB,cAAekB,EACfE,uBAAwBH,EAASG,uBACjCE,gBAAiB,CACfC,aAAc,SACd9C,YAAAA,EACA+C,oBAAqB,CACnBC,OAAQ,iBA5DpB,mBAmES,GAnET,mEAsEA,eAtEqC,sRCCrC,i5MACA,IAAMC,EAEI,EAFJA,EAGS,EA8Bf,SAASC,EAAYC,EAAyB5B,GAC5C,OAAO,IAAI6B,SAAQ,SAASC,EAASC,GACnC,IACMC,EAAU,CACd,CACEC,KAAM,YACNC,KAAM,KACNC,MAAOT,GAET,CACEO,KAAM,UACNC,KAAM,MACNC,MAAOT,IAQXE,EAAwBQ,KAAK,CAC3BpC,cAAAA,EACAiC,KAAM,OACNI,QArBc,yCAsBdL,QAAAA,EACAM,SAVe,SAAAC,GACfX,EAAwBY,OACxBV,EAAQS,IASRE,eAAgB,WACdb,EAAwBY,OACxBV,EAAQJ,SAMhB,MA7DA,YAKG,IAJDzB,EAIC,EAJDA,gBACAF,EAGC,EAHDA,cACAC,EAEC,EAFDA,cAEC,IADDvB,YAAAA,OACC,MADa,UACb,EACOmD,EAA4B3B,EAAgBC,SAA5C0B,wBAER,OAAO,IAAIC,QAAJ,gCAAY,WAAeC,EAASC,GAAxB,uFACUJ,EACzBC,EACA5B,GAHe,mBAMI0B,EANJ,gCAOUgB,EAAqB,CAC5C3C,cAAAA,EACAC,cAAAA,EACAvB,YAAAA,EACAwB,gBAAAA,IAXa,OAOT0C,EAPS,OAcfb,EAAQa,GAdO,yNAAZ,kwCCET,IAAQC,EAAeC,EAAAA,GAAAA,WAGvB,SAASC,EAA2BC,GAClC,IACEC,EAOED,EAPFC,SACAC,EAMEF,EANFE,YACA3B,EAKEyB,EALFzB,gBACAtB,EAIE+C,EAJF/C,cACAkD,EAGEH,EAHFG,cACAjD,EAEE8C,EAFF9C,gBACAvB,EACEqE,EADFrE,iBAKF,IAFcyE,EAAAA,EAAAA,IAAe,eAArBC,EAMJnD,EAAgBC,UAHlBmD,EADF,EACEA,kBACA7E,EAFF,EAEEA,iBACA2B,EAHF,EAGEA,oBAGI1B,EAAc,GAAH,OArBa,eAqBb,YAAiCuB,GAGlD,GAAIiD,EAAYK,OAAS,EACvB,MAAM,IAAIC,MAAM,sDAGlB,IAAMxD,EAAgBkD,EAAY,GAElC,KAA4CO,EAAAA,EAAAA,MAA5C,GAAOC,EAAP,KAAqBC,EAArB,KACA,KAAiDC,EAAAA,EAAAA,MAAjD,GAAOC,EAAP,KAGA,GAHA,KAGA,GAAkDC,EAAAA,EAAAA,WAAS,GAA3D,IAA2BC,GAA3B,WACA,KAA8CD,EAAAA,EAAAA,UAAS,GAAvD,GAAOE,EAAP,KAAwBC,EAAxB,KAOA,KAAoCH,EAAAA,EAAAA,UAAS9D,EAAc4C,YAA3D,GAAOA,EAAP,KAAmBsB,EAAnB,KACA,KAAwCJ,EAAAA,EAAAA,WAAU9D,EAAcmE,UAAhE,GAAOC,EAAP,KAAqBC,EAArB,KACA,KAA8BP,EAAAA,EAAAA,UAAS,MAAvC,GAAgBQ,GAAhB,WACA,KAAoDR,EAAAA,EAAAA,UAAS,CAC3DS,aAAc,EACdC,cAAe,OAFjB,GAAOC,EAAP,KAA2BC,EAA3B,KAMMC,GAA0BC,EAAAA,EAAAA,QAAO,MAE/B/D,EAAmC6C,EAAnC7C,UAAWgE,EAAwBnB,EAAxBmB,oBAEbC,EAAuB9E,EAAc+E,yBACrCC,EAyUR,SAA0CF,GACxC,IAAMG,EAASH,EAAqBI,OAAO,GAe3C,MAdqC,CACnCC,UAAWF,EAAOE,UAClBC,YAAaH,EAAOG,YACpBC,WAAYJ,EAAOI,WACnBC,WAAYL,EAAOK,WACnBC,eAAgBN,EAAOM,eACvBC,UAAWP,EAAOO,UAClBC,kBAAmBR,EAAOQ,kBAC1BC,kBAAmBT,EAAOS,kBAC1BC,aAAcV,EAAOU,aACrBC,sBAAuBX,EAAOW,sBAC9BC,qBAAsBZ,EAAOY,sBAtVMC,CACnChB,GAGFH,EAAwBoB,QAAU,CAChCC,WAAYlB,EACZmB,SAAUjB,GAQZ,IAAMkB,EAAmB,SAAAC,GACvB7B,EAAW6B,EAAIC,OAAOC,UAGlBC,EAAoB,WACxBhC,EAAW,OAGPiC,GAAyBC,EAAAA,EAAAA,cAAY,WACzC,IAAmBC,EAAc9H,EAAiBC,eAChD,0DADM8H,UAKM5B,EACVH,EAAwBoB,QAD1BC,WAKF,OACE,gBAACS,EAAD,KACMzD,EADN,CAEEE,YAAa,CAAC4B,EAAsB9E,GACpCuB,gBAAiB,CACfC,aAAc,SACd9C,YAAaA,EACbiI,YAAapF,EAAgBoF,aAE/BT,iBAAkBA,EAClBI,kBAAmBA,OAItB,CAACrG,EAAeD,EAAetB,IAE5BkI,GAAkBJ,EAAAA,EAAAA,cACtB,SAAAK,GACEA,EAA0B,SAAdA,GAAwB,EAAI,EACxC,IAAMpG,EAAiBT,EAAcO,sBAG7BuG,EAFa1G,EAAoB2G,gBAAgBtG,GAEjDqG,SAEFE,EAAmBC,OAAOC,KAAKJ,GAAUvD,OAE3C4D,EAA0BnD,EAAkB6C,EAE5CM,EAA0BH,EAAmB,EAC/CG,EAA0B,EACW,IAA5BA,IACTA,EAA0BH,EAAmB,GAG/C5G,EAAoBgH,oBAClB3G,EACA0G,EACAzI,GAEFuF,EAAmBkD,KAErB,CAACnD,KAGHqD,EAAAA,EAAAA,YAAU,WACJjD,GAIJkD,EAAiB,CACfpH,gBAAAA,EACAD,cAAAA,EACAD,cAAAA,IACCuH,MAAK,SAAA3E,GACFA,GACFsB,GAAc,QAGjB,CAAChE,EAAiBD,EAAeD,EAAeoE,KAEnDiD,EAAAA,EAAAA,YAAU,WACR,IAAQG,EAAgBpH,EAAoBqH,UAC1CrH,EAAoBsH,OAAOC,iCAC3B,SAAAxB,GAEIA,EAAInG,cAAcO,wBAClBP,EAAcO,uBAEd8D,GAAgB,MAPdmD,YAYR,OAAO,WACLA,OAED,CAACxH,KAEJqH,EAAAA,EAAAA,YAAU,WACR,IAAQG,EAAgBpH,EAAoBqH,UAC1CrH,EAAoBsH,OAAOE,4BAC3B,YAAmC,IAAhCrD,EAAgC,EAAhCA,aAAcsD,EAAkB,EAAlBA,YACfnD,EAAsB,CACpBH,aAAAA,EACAC,cAAeqD,OALbL,YAUR,OAAO,WACLA,OAED,CAACxH,KAKJqH,EAAAA,EAAAA,YAAU,WACR,IAAMS,EAAmCxE,EAAkBmE,UACzDnE,EAAkBoE,OAAOK,sBACzB,YAAgC,IAA7B1G,EAA6B,EAA7BA,uBACK2G,EAAiBnH,EAAUgE,GAE/BxD,EAAuB4G,SAASD,EAAezH,wBAE/CoD,EAAoBrC,0BAA0B,CAC5CrB,cAAe4E,EACfxD,uBAAwB,QAMhC,OAAO,WACLyG,EAAiCN,iBAElC,KAEHH,EAAAA,EAAAA,YAAU,WACR,IAAIa,EAAYzJ,EAAiB0J,aAAazJ,GAE9C,IAAIwJ,EAYJ,OARAA,EAAYE,EACV3J,EACAC,EACAC,GAGFoF,GAAoB,GAEb,WAEL3D,EAAoBiI,8CAClB3J,GAGFD,EAAiB6J,iBAAiB5J,MAEnC,KAEH2I,EAAAA,EAAAA,YAAU,WAGR,OAFAnD,EAAclE,EAAc4C,YAErB,WAELxC,EAAoBiI,8CAClB3J,GAEFiG,EAAwBoB,QAAU,QAEnC,CAAC/F,IAGJ,IAAIuI,GAAoB,KAExB,IACG5D,EAAwBoB,SACzBjB,EAAqBvE,wBACnBoE,EAAwBoB,QAAQC,WAAWzF,sBAE7C,OAAO,KAGL0C,GAAYA,EAASM,SACvBgF,GAAoBtF,EAASuF,KAAI,SAACC,EAAOtH,GACvC,OACEsH,GACAC,EAAAA,aAAmBD,EAAO,CACxBxI,cAAAA,EACA0I,IAAKxH,QAMb,OAWIwD,EAAwBoB,QAAQE,SAVlCd,GADF,GACEA,UACAC,GAFF,GAEEA,YACAC,GAHF,GAGEA,WACAC,GAJF,GAIEA,WACAC,GALF,GAKEA,eACAK,GANF,GAMEA,sBACAJ,GAPF,GAOEA,UACAC,GARF,GAQEA,kBACAI,GATF,GASEA,qBACAF,GAVF,GAUEA,aAGIiD,GAAc,WAClBtB,EAAiB,CACfpH,gBAAAA,EACAD,cAAAA,EACAD,cAAAA,IACCuH,MAAK,SAAA3E,GACFA,GACFsB,GAAc,OAKpB,OACE,gCACE,gBAAC,KAAD,CACE2E,cAAe,SAAA1C,GACbA,EAAI2C,kBACJ3C,EAAI4C,kBAENC,cAAepC,EACfqC,mBAAoB,WAClB,OC1TK,YAA0D,IAA3BrG,EAA2B,EAA3BA,WAAYgG,EAAe,EAAfA,YACpDM,EAAiB,KACjBC,EAAa,KAEjB,OAAQvG,GACN,KAAK,EACHuG,EAAa,kBACX,uBACEC,UAAU,sDACVC,MAAO,CACLC,MAAO,OACPC,OAAQ,OACRC,gBAAiB,UACjBC,OAAQ,wBAGV,gBAAC,KAAD,CACEC,KAAK,cACLL,MAAO,CAAEM,MAAO,OAAQL,MAAO,OAAQC,OAAQ,YAKrDL,EAAiB,kBACf,qFAEF,MACF,KAAK,EACHC,EAAa,kBACX,uBACEC,UAAU,6FACVC,MAAO,CACLC,MAAO,OACPC,OAAQ,OACRE,OAAQ,wBAGV,gBAAC,KAAD,CACEC,KAAK,aACLL,MAAO,CAAEM,MAAO,OAAQL,MAAO,OAAQC,OAAQ,YAKrDL,EAAiB,kBAAM,2DAG3B,IAAMU,EAAa,kBACjB,uBACER,UAAWS,IACT,sGACA,CACE,2BAA4BjH,EAC5B,kBAAmBA,IAGvByG,MAAO,CACLE,OAAQ,OACRD,MAAO,QAETQ,QAAS,WACFlH,GACCgG,GACFA,MAKN,uBAAKQ,UAAU,sDAAf,OAGA,gBAACD,EAAD,QAIJ,OACE,gCACGD,GACC,gBAAC,IAAD,CAASa,QAAS,gBAACb,EAAD,MAAoBc,SAAS,eAC7C,gBAACJ,EAAD,QAGFV,GAAkB,gBAACU,EAAD,ODwOTK,CAAoB,CACzBrH,WAAAA,EACAgG,YAAAA,MAGJsB,UAAW,CACTC,MAAOhH,EACPiH,eAAe,EACfC,UAAWxH,EAAW2C,IACtB8E,cAAe3E,GACf4E,kBAAmB,gBAAF,OAAkB9E,IACnC+E,mBAAoB,CAClBC,YAAarF,GACTsF,EAAAA,GAAAA,MAAAA,SAAoBtF,GAAYuF,YAChC,GACJC,WAAYvF,IAAc,GAC1BwF,WAAYvF,IAAc,GAC1BwF,IAAK3F,IAAa,GAClB4F,UAAWxF,GAAiB,GAAH,OAAMA,GAAeyF,QAAQ,GAA7B,MAAsC,GAC/DC,aAC2BC,IAAzBrF,GAAA,UACOA,GAAqBmF,QAAQ,GADpC,MAEI,GACNG,QAASvF,IAAyB,OAKxC,uBAAKwD,UAAU,wDACZhF,GACC,gBAAC,KAAD,CACEgF,UAAU,gBACVgC,SACuC,OAArC3G,EAAmBD,eACbC,EAAmBF,aAAe,GAClCE,EAAmBD,cACrB,IACA,KAEN6G,UACG5G,EAAmBD,cAGlB,wBAAM4E,UAAU,oDACd,8CACA,uBAAKA,UAAU,OAAf,UAAyB3E,EAAmBF,eAC5C,gCACA,qCAASE,EAAmBD,iBAN9B,wBAAM4E,UAAU,sBAAhB,qBAYP7C,IACD,uBAAK6C,UAAU,mBACZvF,EAAoB5D,gBAAkBA,GACrC,gBAAC,KAAD,CACEqL,GAAG,wBACHhJ,QAASuB,EAAoBvB,QAC7BJ,KAAM2B,EAAoB3B,KAC1BD,QAAS4B,EAAoB5B,QAC7BM,SAAUsB,EAAoBtB,SAC9BG,eAAgBmB,EAAoBnB,kBAIzC6F,KAMTxF,EAA2BwI,UAAY,CACrCrI,YAAasI,IAAAA,QAAkBA,IAAAA,QAC/BvL,cAAeuL,IAAAA,OAAAA,WACfC,WAAYD,IAAAA,OACZvI,SAAUuI,IAAAA,KACVE,YAAaF,IAAAA,QAGfzI,EAA2B4I,aAAe,CACxCD,YAAa,IAsBf","sources":["file:////Users/HemantP/Documents/RapidAI/RapidOHIFViewer/extensions/cornerstone-dicom-seg/src/utils/initSEGToolGroup.ts","file:////Users/HemantP/Documents/RapidAI/RapidOHIFViewer/extensions/cornerstone-dicom-seg/src/utils/_hydrateSEG.ts","file:////Users/HemantP/Documents/RapidAI/RapidOHIFViewer/extensions/cornerstone-dicom-seg/src/utils/promptHydrateSEG.ts","file:////Users/HemantP/Documents/RapidAI/RapidOHIFViewer/extensions/cornerstone-dicom-seg/src/viewports/OHIFCornerstoneSEGViewport.tsx","file:////Users/HemantP/Documents/RapidAI/RapidOHIFViewer/extensions/cornerstone-dicom-seg/src/viewports/_getStatusComponent.tsx"],"sourcesContent":["function createSEGToolGroupAndAddTools(\n ToolGroupService,\n toolGroupId,\n extensionManager\n) {\n const utilityModule = extensionManager.getModuleEntry(\n '@ohif/extension-cornerstone.utilityModule.tools'\n );\n\n const { toolNames, Enums } = utilityModule.exports;\n\n const tools = {\n active: [\n {\n toolName: toolNames.WindowLevel,\n bindings: [{ mouseButton: Enums.MouseBindings.Primary }],\n },\n {\n toolName: toolNames.Pan,\n bindings: [{ mouseButton: Enums.MouseBindings.Auxiliary }],\n },\n {\n toolName: toolNames.Zoom,\n bindings: [{ mouseButton: Enums.MouseBindings.Secondary }],\n },\n { toolName: toolNames.StackScrollMouseWheel, bindings: [] },\n ],\n enabled: [{ toolName: toolNames.SegmentationDisplay }],\n };\n\n return ToolGroupService.createToolGroupAndAddTools(toolGroupId, tools, {});\n}\n\nexport default createSEGToolGroupAndAddTools;\n","async function _hydrateSEGDisplaySet({\n segDisplaySet,\n viewportIndex,\n toolGroupId,\n servicesManager,\n}) {\n const {\n SegmentationService,\n HangingProtocolService,\n ViewportGridService,\n } = servicesManager.services;\n\n const displaySetInstanceUID = segDisplaySet.referencedDisplaySetInstanceUID;\n\n let segmentationId = null;\n\n // We need the hydration to notify panels about the new segmentation added\n const suppressEvents = false;\n\n segmentationId = await SegmentationService.createSegmentationForSEGDisplaySet(\n segDisplaySet,\n segmentationId,\n suppressEvents\n );\n\n SegmentationService.hydrateSegmentation(segDisplaySet.displaySetInstanceUID);\n\n const { viewports } = ViewportGridService.getState();\n\n const updatedViewports = HangingProtocolService.getViewportsRequireUpdate(\n viewportIndex,\n displaySetInstanceUID\n );\n\n ViewportGridService.setDisplaySetsForViewports(updatedViewports);\n\n // Todo: fix this after we have a better way for stack viewport segmentations\n\n // check every viewport in the viewports to see if the displaySetInstanceUID\n // is being displayed, if so we need to update the viewport to use volume viewport\n // (if already is not using it) since Cornerstone3D currently only supports\n // volume viewport for segmentation\n viewports.forEach((viewport, index) => {\n if (index === viewportIndex) {\n return;\n }\n\n const shouldDisplaySeg = SegmentationService.shouldRenderSegmentation(\n viewport.displaySetInstanceUIDs,\n segDisplaySet.displaySetInstanceUID\n );\n\n if (shouldDisplaySeg) {\n ViewportGridService.setDisplaySetsForViewport({\n viewportIndex: index,\n displaySetInstanceUIDs: viewport.displaySetInstanceUIDs,\n viewportOptions: {\n viewportType: 'volume',\n toolGroupId,\n initialImageOptions: {\n preset: 'middle',\n },\n },\n });\n }\n });\n\n return true;\n}\n\nexport default _hydrateSEGDisplaySet;\n","import hydrateSEGDisplaySet from './_hydrateSEG';\n\nconst RESPONSE = {\n NO_NEVER: -1,\n CANCEL: 0,\n HYDRATE_SEG: 5,\n};\n\nfunction promptHydrateSEG({\n servicesManager,\n segDisplaySet,\n viewportIndex,\n toolGroupId = 'default',\n}) {\n const { UIViewportDialogService } = servicesManager.services;\n\n return new Promise(async function(resolve, reject) {\n const promptResult = await _askHydrate(\n UIViewportDialogService,\n viewportIndex\n );\n\n if (promptResult === RESPONSE.HYDRATE_SEG) {\n const isHydrated = await hydrateSEGDisplaySet({\n segDisplaySet,\n viewportIndex,\n toolGroupId,\n servicesManager,\n });\n\n resolve(isHydrated);\n }\n });\n}\n\nfunction _askHydrate(UIViewportDialogService, viewportIndex) {\n return new Promise(function(resolve, reject) {\n const message = 'Do you want to open this Segmentation?';\n const actions = [\n {\n type: 'secondary',\n text: 'No',\n value: RESPONSE.CANCEL,\n },\n {\n type: 'primary',\n text: 'Yes',\n value: RESPONSE.HYDRATE_SEG,\n },\n ];\n const onSubmit = result => {\n UIViewportDialogService.hide();\n resolve(result);\n };\n\n UIViewportDialogService.show({\n viewportIndex,\n type: 'info',\n message,\n actions,\n onSubmit,\n onOutsideClick: () => {\n UIViewportDialogService.hide();\n resolve(RESPONSE.CANCEL);\n },\n });\n });\n}\n\nexport default promptHydrateSEG;\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport OHIF, { utils } from '@ohif/core';\nimport {\n Notification,\n ViewportActionBar,\n useViewportGrid,\n useViewportDialog,\n LoadingIndicatorProgress,\n} from '@ohif/ui';\n\nimport { useTranslation } from 'react-i18next';\n\nimport createSEGToolGroupAndAddTools from '../utils/initSEGToolGroup';\nimport _hydrateSEGDisplaySet from '../utils/_hydrateSEG';\nimport promptHydrateSEG from '../utils/promptHydrateSEG';\nimport _getStatusComponent from './_getStatusComponent';\n\nconst { formatDate } = utils;\nconst SEG_TOOLGROUP_BASE_NAME = 'SEGToolGroup';\n\nfunction OHIFCornerstoneSEGViewport(props) {\n const {\n children,\n displaySets,\n viewportOptions,\n viewportIndex,\n viewportLabel,\n servicesManager,\n extensionManager,\n } = props;\n\n const { t } = useTranslation('SEGViewport');\n\n const {\n DisplaySetService,\n ToolGroupService,\n SegmentationService,\n } = servicesManager.services;\n\n const toolGroupId = `${SEG_TOOLGROUP_BASE_NAME}-${viewportIndex}`;\n\n // SEG viewport will always have a single display set\n if (displaySets.length > 1) {\n throw new Error('SEG viewport should only have a single display set');\n }\n\n const segDisplaySet = displaySets[0];\n\n const [viewportGrid, viewportGridService] = useViewportGrid();\n const [viewportDialogState, viewportDialogApi] = useViewportDialog();\n\n // States\n const [isToolGroupCreated, setToolGroupCreated] = useState(false);\n const [selectedSegment, setSelectedSegment] = useState(1);\n\n // Hydration means that the SEG is opened and segments are loaded into the\n // segmentation panel, and SEG is also rendered on any viewport that is in the\n // same frameOfReferenceUID as the referencedSeriesUID of the SEG. However,\n // loading basically means SEG loading over network and bit unpacking of the\n // SEG data.\n const [isHydrated, setIsHydrated] = useState(segDisplaySet.isHydrated);\n const [segIsLoading, setSegIsLoading] = useState(!segDisplaySet.isLoaded);\n const [element, setElement] = useState(null);\n const [processingProgress, setProcessingProgress] = useState({\n segmentIndex: 1,\n totalSegments: null,\n });\n\n // refs\n const referencedDisplaySetRef = useRef(null);\n\n const { viewports, activeViewportIndex } = viewportGrid;\n\n const referencedDisplaySet = segDisplaySet.getReferenceDisplaySet();\n const referencedDisplaySetMetadata = _getReferencedDisplaySetMetadata(\n referencedDisplaySet\n );\n\n referencedDisplaySetRef.current = {\n displaySet: referencedDisplaySet,\n metadata: referencedDisplaySetMetadata,\n };\n /**\n * OnElementEnabled callback which is called after the cornerstoneExtension\n * has enabled the element. Note: we delegate all the image rendering to\n * cornerstoneExtension, so we don't need to do anything here regarding\n * the image rendering, element enabling etc.\n */\n const onElementEnabled = evt => {\n setElement(evt.detail.element);\n };\n\n const onElementDisabled = () => {\n setElement(null);\n };\n\n const getCornerstoneViewport = useCallback(() => {\n const { component: Component } = extensionManager.getModuleEntry(\n '@ohif/extension-cornerstone.viewportModule.cornerstone'\n );\n\n const {\n displaySet: referencedDisplaySet,\n } = referencedDisplaySetRef.current;\n\n // Todo: jump to the center of the first segment\n\n return (\n \n );\n }, [viewportIndex, segDisplaySet, toolGroupId]);\n\n const onSegmentChange = useCallback(\n direction => {\n direction = direction === 'left' ? -1 : 1;\n const segmentationId = segDisplaySet.displaySetInstanceUID;\n const segmentation = SegmentationService.getSegmentation(segmentationId);\n\n const { segments } = segmentation;\n\n const numberOfSegments = Object.keys(segments).length;\n\n let newSelectedSegmentIndex = selectedSegment + direction;\n\n if (newSelectedSegmentIndex > numberOfSegments - 1) {\n newSelectedSegmentIndex = 1;\n } else if (newSelectedSegmentIndex === 0) {\n newSelectedSegmentIndex = numberOfSegments - 1;\n }\n\n SegmentationService.jumpToSegmentCenter(\n segmentationId,\n newSelectedSegmentIndex,\n toolGroupId\n );\n setSelectedSegment(newSelectedSegmentIndex);\n },\n [selectedSegment]\n );\n\n useEffect(() => {\n if (segIsLoading) {\n return;\n }\n\n promptHydrateSEG({\n servicesManager,\n viewportIndex,\n segDisplaySet,\n }).then(isHydrated => {\n if (isHydrated) {\n setIsHydrated(true);\n }\n });\n }, [servicesManager, viewportIndex, segDisplaySet, segIsLoading]);\n\n useEffect(() => {\n const { unsubscribe } = SegmentationService.subscribe(\n SegmentationService.EVENTS.SEGMENTATION_PIXEL_DATA_CREATED,\n evt => {\n if (\n evt.segDisplaySet.displaySetInstanceUID ===\n segDisplaySet.displaySetInstanceUID\n ) {\n setSegIsLoading(false);\n }\n }\n );\n\n return () => {\n unsubscribe();\n };\n }, [segDisplaySet]);\n\n useEffect(() => {\n const { unsubscribe } = SegmentationService.subscribe(\n SegmentationService.EVENTS.SEGMENT_PIXEL_DATA_CREATED,\n ({ segmentIndex, numSegments }) => {\n setProcessingProgress({\n segmentIndex,\n totalSegments: numSegments,\n });\n }\n );\n\n return () => {\n unsubscribe();\n };\n }, [segDisplaySet]);\n\n /**\n Cleanup the SEG viewport when the viewport is destroyed\n */\n useEffect(() => {\n const onDisplaySetsRemovedSubscription = DisplaySetService.subscribe(\n DisplaySetService.EVENTS.DISPLAY_SETS_REMOVED,\n ({ displaySetInstanceUIDs }) => {\n const activeViewport = viewports[activeViewportIndex];\n if (\n displaySetInstanceUIDs.includes(activeViewport.displaySetInstanceUID)\n ) {\n viewportGridService.setDisplaySetsForViewport({\n viewportIndex: activeViewportIndex,\n displaySetInstanceUIDs: [],\n });\n }\n }\n );\n\n return () => {\n onDisplaySetsRemovedSubscription.unsubscribe();\n };\n }, []);\n\n useEffect(() => {\n let toolGroup = ToolGroupService.getToolGroup(toolGroupId);\n\n if (toolGroup) {\n return;\n }\n\n toolGroup = createSEGToolGroupAndAddTools(\n ToolGroupService,\n toolGroupId,\n extensionManager\n );\n\n setToolGroupCreated(true);\n\n return () => {\n // remove the segmentation representations if seg displayset changed\n SegmentationService.removeSegmentationRepresentationFromToolGroup(\n toolGroupId\n );\n\n ToolGroupService.destroyToolGroup(toolGroupId);\n };\n }, []);\n\n useEffect(() => {\n setIsHydrated(segDisplaySet.isHydrated);\n\n return () => {\n // remove the segmentation representations if seg displayset changed\n SegmentationService.removeSegmentationRepresentationFromToolGroup(\n toolGroupId\n );\n referencedDisplaySetRef.current = null;\n };\n }, [segDisplaySet]);\n\n // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n let childrenWithProps = null;\n\n if (\n !referencedDisplaySetRef.current ||\n referencedDisplaySet.displaySetInstanceUID !==\n referencedDisplaySetRef.current.displaySet.displaySetInstanceUID\n ) {\n return null;\n }\n\n if (children && children.length) {\n childrenWithProps = children.map((child, index) => {\n return (\n child &&\n React.cloneElement(child, {\n viewportIndex,\n key: index,\n })\n );\n });\n }\n\n const {\n PatientID,\n PatientName,\n PatientSex,\n PatientAge,\n SliceThickness,\n ManufacturerModelName,\n StudyDate,\n SeriesDescription,\n SpacingBetweenSlices,\n SeriesNumber,\n } = referencedDisplaySetRef.current.metadata;\n\n const onPillClick = () => {\n promptHydrateSEG({\n servicesManager,\n viewportIndex,\n segDisplaySet,\n }).then(isHydrated => {\n if (isHydrated) {\n setIsHydrated(true);\n }\n });\n };\n\n return (\n <>\n {\n evt.stopPropagation();\n evt.preventDefault();\n }}\n onArrowsClick={onSegmentChange}\n getStatusComponent={() => {\n return _getStatusComponent({\n isHydrated,\n onPillClick,\n });\n }}\n studyData={{\n label: viewportLabel,\n useAltStyling: true,\n studyDate: formatDate(StudyDate),\n currentSeries: SeriesNumber,\n seriesDescription: `SEG Viewport ${SeriesDescription}`,\n patientInformation: {\n patientName: PatientName\n ? OHIF.utils.formatPN(PatientName.Alphabetic)\n : '',\n patientSex: PatientSex || '',\n patientAge: PatientAge || '',\n MRN: PatientID || '',\n thickness: SliceThickness ? `${SliceThickness.toFixed(2)}mm` : '',\n spacing:\n SpacingBetweenSlices !== undefined\n ? `${SpacingBetweenSlices.toFixed(2)}mm`\n : '',\n scanner: ManufacturerModelName || '',\n },\n }}\n />\n\n
\n {segIsLoading && (\n Loading SEG ...\n ) : (\n \n
Loading Segment
\n
{`${processingProgress.segmentIndex}`}
\n
/
\n
{`${processingProgress.totalSegments}`}
\n
\n )\n }\n />\n )}\n {getCornerstoneViewport()}\n
\n {viewportDialogState.viewportIndex === viewportIndex && (\n \n )}\n
\n {childrenWithProps}\n
\n \n );\n}\n\nOHIFCornerstoneSEGViewport.propTypes = {\n displaySets: PropTypes.arrayOf(PropTypes.object),\n viewportIndex: PropTypes.number.isRequired,\n dataSource: PropTypes.object,\n children: PropTypes.node,\n customProps: PropTypes.object,\n};\n\nOHIFCornerstoneSEGViewport.defaultProps = {\n customProps: {},\n};\n\nfunction _getReferencedDisplaySetMetadata(referencedDisplaySet) {\n const image0 = referencedDisplaySet.images[0];\n const referencedDisplaySetMetadata = {\n PatientID: image0.PatientID,\n PatientName: image0.PatientName,\n PatientSex: image0.PatientSex,\n PatientAge: image0.PatientAge,\n SliceThickness: image0.SliceThickness,\n StudyDate: image0.StudyDate,\n SeriesDescription: image0.SeriesDescription,\n SeriesInstanceUID: image0.SeriesInstanceUID,\n SeriesNumber: image0.SeriesNumber,\n ManufacturerModelName: image0.ManufacturerModelName,\n SpacingBetweenSlices: image0.SpacingBetweenSlices,\n };\n\n return referencedDisplaySetMetadata;\n}\n\nexport default OHIFCornerstoneSEGViewport;\n","import React from 'react';\nimport classNames from 'classnames';\nimport { Icon, Tooltip } from '@ohif/ui';\n\nimport _hydrateSEGDisplaySet from '../utils/_hydrateSEG';\n\nexport default function _getStatusComponent({ isHydrated, onPillClick }) {\n let ToolTipMessage = null;\n let StatusIcon = null;\n\n switch (isHydrated) {\n case true:\n StatusIcon = () => (\n \n \n
\n );\n\n ToolTipMessage = () => (\n
This Segmentation is loaded in the segmentation panel
\n );\n break;\n case false:\n StatusIcon = () => (\n \n \n
\n );\n\n ToolTipMessage = () =>
Click to load segmentation.
;\n }\n\n const StatusPill = () => (\n {\n if (!isHydrated) {\n if (onPillClick) {\n onPillClick();\n }\n }\n }}\n >\n
\n SEG\n
\n \n
\n );\n\n return (\n <>\n {ToolTipMessage && (\n } position=\"bottom-left\">\n \n \n )}\n {!ToolTipMessage && }\n \n );\n}\n"],"names":["ToolGroupService","toolGroupId","extensionManager","getModuleEntry","exports","toolNames","Enums","tools","active","toolName","WindowLevel","bindings","mouseButton","MouseBindings","Primary","Pan","Auxiliary","Zoom","Secondary","StackScrollMouseWheel","enabled","SegmentationDisplay","createToolGroupAndAddTools","segDisplaySet","viewportIndex","servicesManager","services","SegmentationService","HangingProtocolService","ViewportGridService","displaySetInstanceUID","referencedDisplaySetInstanceUID","segmentationId","createSegmentationForSEGDisplaySet","hydrateSegmentation","getState","viewports","updatedViewports","getViewportsRequireUpdate","setDisplaySetsForViewports","forEach","viewport","index","shouldRenderSegmentation","displaySetInstanceUIDs","setDisplaySetsForViewport","viewportOptions","viewportType","initialImageOptions","preset","RESPONSE","_askHydrate","UIViewportDialogService","Promise","resolve","reject","actions","type","text","value","show","message","onSubmit","result","hide","onOutsideClick","hydrateSEGDisplaySet","isHydrated","formatDate","utils","OHIFCornerstoneSEGViewport","props","children","displaySets","viewportLabel","useTranslation","t","DisplaySetService","length","Error","useViewportGrid","viewportGrid","viewportGridService","useViewportDialog","viewportDialogState","useState","setToolGroupCreated","selectedSegment","setSelectedSegment","setIsHydrated","isLoaded","segIsLoading","setSegIsLoading","setElement","segmentIndex","totalSegments","processingProgress","setProcessingProgress","referencedDisplaySetRef","useRef","activeViewportIndex","referencedDisplaySet","getReferenceDisplaySet","referencedDisplaySetMetadata","image0","images","PatientID","PatientName","PatientSex","PatientAge","SliceThickness","StudyDate","SeriesDescription","SeriesInstanceUID","SeriesNumber","ManufacturerModelName","SpacingBetweenSlices","_getReferencedDisplaySetMetadata","current","displaySet","metadata","onElementEnabled","evt","detail","element","onElementDisabled","getCornerstoneViewport","useCallback","Component","component","orientation","onSegmentChange","direction","segments","getSegmentation","numberOfSegments","Object","keys","newSelectedSegmentIndex","jumpToSegmentCenter","useEffect","promptHydrateSEG","then","unsubscribe","subscribe","EVENTS","SEGMENTATION_PIXEL_DATA_CREATED","SEGMENT_PIXEL_DATA_CREATED","numSegments","onDisplaySetsRemovedSubscription","DISPLAY_SETS_REMOVED","activeViewport","includes","toolGroup","getToolGroup","createSEGToolGroupAndAddTools","removeSegmentationRepresentationFromToolGroup","destroyToolGroup","childrenWithProps","map","child","React","key","onPillClick","onDoubleClick","stopPropagation","preventDefault","onArrowsClick","getStatusComponent","ToolTipMessage","StatusIcon","className","style","width","height","backgroundColor","border","name","color","StatusPill","classNames","onClick","content","position","_getStatusComponent","studyData","label","useAltStyling","studyDate","currentSeries","seriesDescription","patientInformation","patientName","OHIF","Alphabetic","patientSex","patientAge","MRN","thickness","toFixed","spacing","undefined","scanner","progress","textBlock","id","propTypes","PropTypes","dataSource","customProps","defaultProps"],"sourceRoot":""} \ No newline at end of file diff --git a/platform/viewer-static/dist/610.min.worker.js b/platform/viewer-static/dist/610.min.worker.js new file mode 100644 index 00000000000..43145d49f68 --- /dev/null +++ b/platform/viewer-static/dist/610.min.worker.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[610],{6610:function(s,e){!function(t){"object"==typeof e&&void 0!==s?s.exports=t():"function"==typeof define&&define.amd?define([],t):("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).jpeg=t()}((function(){return function s(e,t,o){function r(a,l){if(!t[a]){if(!e[a]){var n="function"==typeof require&&require;if(!l&&n)return n(a,!0);if(i)return i(a,!0);var h=new Error("Cannot find module '"+a+"'");throw h.code="MODULE_NOT_FOUND",h}var c=t[a]={exports:{}};e[a][0].call(c.exports,(function(s){return r(e[a][1][s]||s)}),c,c.exports,s,e,t,o)}return t[a].exports}for(var i="function"==typeof require&&require,a=0;a>4!=4092||65476===i;){switch(i){case 65476:this.huffTable.read(this.stream,this.HuffTab);break;case 65484:throw new Error("Program doesn't support arithmetic coding. (format throw new IOException)");case 65499:this.quantTable.read(this.stream,r.lossless.Decoder.TABLE);break;case 65501:this.restartInterval=this.readNumber();break;case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:this.readApp();break;case 65534:this.readComment();break;default:if(i>>8!=255)throw new Error("ERROR: format throw new IOException! (decode)")}i=this.stream.get16()}if(i<65472||i>65479)throw new Error("ERROR: could not handle arithmetic code!");this.frame.read(this.stream),i=this.stream.get16();do{for(;65498!==i;){switch(i){case 65476:this.huffTable.read(this.stream,this.HuffTab);break;case 65484:throw new Error("Program doesn't support arithmetic coding. (format throw new IOException)");case 65499:this.quantTable.read(this.stream,r.lossless.Decoder.TABLE);break;case 65501:this.restartInterval=this.readNumber();break;case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:this.readApp();break;case 65534:this.readComment();break;default:if(i>>8!=255)throw new Error("ERROR: format throw new IOException! (Parser.decode)")}i=this.stream.get16()}switch(this.precision=this.frame.precision,this.components=this.frame.components,this.numBytes||(this.numBytes=parseInt(Math.ceil(this.precision/8))),1==this.numBytes?this.mask=255:this.mask=65535,this.scan.read(this.stream),this.numComp=this.scan.numComp,this.selection=this.scan.selection,1===this.numBytes?3===this.numComp?(this.getter=this.getValueRGB,this.setter=this.setValueRGB,this.output=this.outputRGB):(this.getter=this.getValue8,this.setter=this.setValue8,this.output=this.outputSingle):(this.getter=this.getValue16,this.setter=this.setValue16,this.output=this.outputSingle),this.selection){case 2:this.selector=this.select2;break;case 3:this.selector=this.select3;break;case 4:this.selector=this.select4;break;case 5:this.selector=this.select5;break;case 6:this.selector=this.select6;break;case 7:this.selector=this.select7;break;default:this.selector=this.select1}for(this.scanComps=this.scan.components,this.quantTables=this.quantTable.quantTables,a=0;a=r.lossless.Decoder.RESTART_MARKER_BEGIN&&i<=r.lossless.Decoder.RESTART_MARKER_END))break}65500===i&&1===h&&(this.readNumber(),i=this.stream.get16())}while(65497!==i&&this.xLoc>1)},r.lossless.Decoder.prototype.select6=function(s){return this.getPreviousY(s)+(this.getPreviousX(s)-this.getPreviousXY(s)>>1)},r.lossless.Decoder.prototype.select7=function(s){return(this.getPreviousX(s)+this.getPreviousY(s))/2},r.lossless.Decoder.prototype.decodeRGB=function(s,e,t){var o,i,a,l,n,h,c,u;for(s[0]=this.selector(0),s[1]=this.selector(1),s[2]=this.selector(2),n=0;n=65280)return o;for(s[n]=this.IDCT_Source[0]=s[n]+this.getn(t,o,e,t),this.IDCT_Source[0]*=l[0],u=1;u<64;u+=1){if((o=this.getHuffmanValue(i,e,t))>=65280)return o;if(u+=o>>4,0==(15&o)){if(o>>4==0)break}else this.IDCT_Source[r.lossless.Decoder.IDCT_P[u]]=this.getn(t,15&o,e,t)*l[u]}}return 0},r.lossless.Decoder.prototype.decodeSingle=function(s,e,t){var o,i,a,l;for(this.restarting?(this.restarting=!1,s[0]=1<=65280)return o;if((l=(a=this.getn(s,o,e,t))>>8)>=r.lossless.Decoder.RESTART_MARKER_BEGIN&&l<=r.lossless.Decoder.RESTART_MARKER_END)return l;s[0]+=a}return 0},r.lossless.Decoder.prototype.getHuffmanValue=function(s,e,t){var o,i;if(t[0]<8?(e[0]<<=8,255===(i=this.stream.get8())&&(this.marker=this.stream.get8(),0!==this.marker&&(this.markerIndex=9)),e[0]|=i):t[0]-=8,0!=((o=s[e[0]>>t[0]])&r.lossless.Decoder.MSB)){if(0!==this.markerIndex)return this.markerIndex=0,65280|this.marker;e[0]&=65535>>16-t[0],e[0]<<=8,255===(i=this.stream.get8())&&(this.marker=this.stream.get8(),0!==this.marker&&(this.markerIndex=9)),e[0]|=i,o=s[256*(255&o)+(e[0]>>t[0])],t[0]+=8}if(t[0]+=8-(o>>8),t[0]<0)throw new Error("index="+t[0]+" temp="+e[0]+" code="+o+" in HuffmanValue()");return t[0]>16-t[0],255&o)},r.lossless.Decoder.prototype.getn=function(s,e,t,o){var r,i;if(0===e)return 0;if(16===e)return s[0]>=0?-32768:32768;if(o[0]-=e,o[0]>=0){if(o[0]>o[0],t[0]&=65535>>16-o[0]}else{if(t[0]<<=8,255===(i=this.stream.get8())&&(this.marker=this.stream.get8(),0!==this.marker&&(this.markerIndex=9)),t[0]|=i,o[0]+=8,o[0]<0){if(0!==this.markerIndex)return this.markerIndex=0,(65280|this.marker)<<8;t[0]<<=8,255===(i=this.stream.get8())&&(this.marker=this.stream.get8(),0!==this.marker&&(this.markerIndex=9)),t[0]|=i,o[0]+=8}if(o[0]<0)throw new Error("index="+o[0]+" in getn()");if(o[0]>o[0],t[0]&=65535>>16-o[0]}return r<1<0?this.getter(this.yLoc*this.xDim+this.xLoc-1,s):this.yLoc>0?this.getPreviousY(s):1<0&&this.yLoc>0?this.getter((this.yLoc-1)*this.xDim+this.xLoc-1,s):this.getPreviousY(s)},r.lossless.Decoder.prototype.getPreviousY=function(s){return this.yLoc>0?this.getter((this.yLoc-1)*this.xDim+this.xLoc,s):this.getPreviousX(s)},r.lossless.Decoder.prototype.isLastPixel=function(){return this.xLoc===this.xDim-1&&this.yLoc===this.yDim-1},r.lossless.Decoder.prototype.outputSingle=function(s){this.xLoc=this.xDim&&(this.yLoc+=1,this.xLoc=0))},r.lossless.Decoder.prototype.outputRGB=function(s){var e=this.yLoc*this.xDim+this.xLoc;this.xLoc=this.xDim&&(this.yLoc+=1,this.xLoc=0))},r.lossless.Decoder.prototype.setValue8=function(s,e){this.outputData[s]=e},r.lossless.Decoder.prototype.getValue8=function(s){return this.outputData[s]},o=new ArrayBuffer(2),new DataView(o).setInt16(0,256,!0),256===new Int16Array(o)[0]?(r.lossless.Decoder.prototype.setValue16=r.lossless.Decoder.prototype.setValue8,r.lossless.Decoder.prototype.getValue16=r.lossless.Decoder.prototype.getValue8):(r.lossless.Decoder.prototype.setValue16=function(s,e){this.outputData[s]=(255&e)<<8|e>>8&255},r.lossless.Decoder.prototype.getValue16=function(s){var e=this.outputData[s];return(255&e)<<8|e>>8&255}),r.lossless.Decoder.prototype.setValueRGB=function(s,e,t){this.outputData[3*s+t]=e},r.lossless.Decoder.prototype.getValueRGB=function(s,e){return this.outputData[3*s+e]},r.lossless.Decoder.prototype.readApp=function(){var s=0,e=this.stream.get16();for(s+=2;se)throw new Error("ERROR: frame format error");if(r=s.get8(),(a+=1)>=e)throw new Error("ERROR: frame format error [c>=Lf]");i=s.get8(),a+=1,this.components[r]||(this.components[r]=new o.lossless.ComponentSpec),this.components[r].hSamp=i>>4,this.components[r].vSamp=15&i,this.components[r].quantTableSel=s.get8(),a+=1}if(a!==e)throw new Error("ERROR: frame format error [Lf!=count]");return 1},void 0!==e&&e.exports&&(e.exports=o.lossless.FrameHeader)},{"./component-spec.js":1,"./data-stream.js":2}],5:[function(s,e,t){"use strict";var o=o||{};o.lossless=o.lossless||{},o.lossless.DataStream=o.lossless.DataStream||(void 0!==s?s("./data-stream.js"):null),o.lossless.Utils=o.lossless.Utils||(void 0!==s?s("./utils.js"):null),o.lossless.HuffmanTable=o.lossless.HuffmanTable||function(){this.l=o.lossless.Utils.createArray(4,2,16),this.th=[],this.v=o.lossless.Utils.createArray(4,2,16,200),this.tc=o.lossless.Utils.createArray(4,2),this.tc[0][0]=0,this.tc[1][0]=0,this.tc[2][0]=0,this.tc[3][0]=0,this.tc[0][1]=0,this.tc[1][1]=0,this.tc[2][1]=0,this.tc[3][1]=0,this.th[0]=0,this.th[1]=0,this.th[2]=0,this.th[3]=0},o.lossless.HuffmanTable.MSB=2147483648,o.lossless.HuffmanTable.prototype.read=function(s,e){var t,o,r,i,a,l,n=0;for(t=s.get16(),n+=2;n3)throw new Error("ERROR: Huffman table ID > 3");if((i=o>>4)>2)throw new Error("ERROR: Huffman table [Table class > 2 ]");for(this.th[r]=1,this.tc[r][i]=1,a=0;a<16;a+=1)this.l[r][i][a]=s.get8(),n+=1;for(a=0;a<16;a+=1)for(l=0;lt)throw new Error("ERROR: Huffman table format error [count>Lh]");this.v[r][i][a][l]=s.get8(),n+=1}}if(n!==t)throw new Error("ERROR: Huffman table format error [count!=Lf]");for(a=0;a<4;a+=1)for(l=0;l<2;l+=1)0!==this.tc[a][l]&&this.buildHuffTable(e[a][l],this.l[a][l],this.v[a][l]);return 1},o.lossless.HuffmanTable.prototype.buildHuffTable=function(s,e,t){var r,i,a,l,n;for(i=0,a=0;a<8;a+=1)for(l=0;l>a+1;n+=1)s[i]=t[a][l]|a+1<<8,i+=1;for(a=1;i<256;a+=1,i+=1)s[i]=a|o.lossless.HuffmanTable.MSB;for(r=1,i=0,a=8;a<16;a+=1)for(l=0;l>a-7;n+=1)s[256*r+i]=t[a][l]|a+1<<8,i+=1;if(i>=256){if(i>256)throw new Error("ERROR: Huffman table error(1)!");i=0,r+=1}}},void 0!==e&&e.exports&&(e.exports=o.lossless.HuffmanTable)},{"./data-stream.js":2,"./utils.js":10}],6:[function(s,e,t){"use strict";var o=o||{};o.lossless=o.lossless||{},o.lossless.ComponentSpec=o.lossless.ComponentSpec||(void 0!==s?s("./component-spec.js"):null),o.lossless.DataStream=o.lossless.DataStream||(void 0!==s?s("./data-stream.js"):null),o.lossless.Decoder=o.lossless.Decoder||(void 0!==s?s("./decoder.js"):null),o.lossless.FrameHeader=o.lossless.FrameHeader||(void 0!==s?s("./frame-header.js"):null),o.lossless.HuffmanTable=o.lossless.HuffmanTable||(void 0!==s?s("./huffman-table.js"):null),o.lossless.QuantizationTable=o.lossless.QuantizationTable||(void 0!==s?s("./quantization-table.js"):null),o.lossless.ScanComponent=o.lossless.ScanComponent||(void 0!==s?s("./scan-component.js"):null),o.lossless.ScanHeader=o.lossless.ScanHeader||(void 0!==s?s("./scan-header.js"):null),o.lossless.Utils=o.lossless.Utils||(void 0!==s?s("./utils.js"):null),void 0!==e&&e.exports&&(e.exports=o)},{"./component-spec.js":1,"./data-stream.js":2,"./decoder.js":3,"./frame-header.js":4,"./huffman-table.js":5,"./quantization-table.js":7,"./scan-component.js":8,"./scan-header.js":9,"./utils.js":10}],7:[function(s,e,t){"use strict";var o=o||{};o.lossless=o.lossless||{},o.lossless.DataStream=o.lossless.DataStream||(void 0!==s?s("./data-stream.js"):null),o.lossless.Utils=o.lossless.Utils||(void 0!==s?s("./utils.js"):null),o.lossless.QuantizationTable=o.lossless.QuantizationTable||function(){this.precision=[],this.tq=[],this.quantTables=o.lossless.Utils.createArray(4,64),this.tq[0]=0,this.tq[1]=0,this.tq[2]=0,this.tq[3]=0},o.lossless.QuantizationTable.enhanceQuantizationTable=function(s,e){var t;for(t=0;t<8;t+=1)s[e[0+t]]*=90,s[e[32+t]]*=90,s[e[16+t]]*=118,s[e[48+t]]*=49,s[e[40+t]]*=71,s[e[8+t]]*=126,s[e[56+t]]*=25,s[e[24+t]]*=106;for(t=0;t<8;t+=1)s[e[0+8*t]]*=90,s[e[4+8*t]]*=90,s[e[2+8*t]]*=118,s[e[6+8*t]]*=49,s[e[5+8*t]]*=71,s[e[1+8*t]]*=126,s[e[7+8*t]]*=25,s[e[3+8*t]]*=106;for(t=0;t<64;t+=1)s[t]>>=6},o.lossless.QuantizationTable.prototype.read=function(s,e){var t,r,i,a,l=0;for(t=s.get16(),l+=2;l3)throw new Error("ERROR: Quantization table ID > 3");if(this.precision[i]=r>>4,0===this.precision[i])this.precision[i]=8;else{if(1!==this.precision[i])throw new Error("ERROR: Quantization table precision error");this.precision[i]=16}if(this.tq[i]=1,8===this.precision[i]){for(a=0;a<64;a+=1){if(l>t)throw new Error("ERROR: Quantization table format error");this.quantTables[i][a]=s.get8(),l+=1}o.lossless.QuantizationTable.enhanceQuantizationTable(this.quantTables[i],e)}else{for(a=0;a<64;a+=1){if(l>t)throw new Error("ERROR: Quantization table format error");this.quantTables[i][a]=s.get16(),l+=2}o.lossless.QuantizationTable.enhanceQuantizationTable(this.quantTables[i],e)}}if(l!==t)throw new Error("ERROR: Quantization table error [count!=Lq]");return 1},void 0!==e&&e.exports&&(e.exports=o.lossless.QuantizationTable)},{"./data-stream.js":2,"./utils.js":10}],8:[function(s,e,t){"use strict";var o=o||{};o.lossless=o.lossless||{},o.lossless.ScanComponent=o.lossless.ScanComponent||function(){this.acTabSel=0,this.dcTabSel=0,this.scanCompSel=0},void 0!==e&&e.exports&&(e.exports=o.lossless.ScanComponent)},{}],9:[function(s,e,t){"use strict";var o=o||{};o.lossless=o.lossless||{},o.lossless.DataStream=o.lossless.DataStream||(void 0!==s?s("./data-stream.js"):null),o.lossless.ScanComponent=o.lossless.ScanComponent||(void 0!==s?s("./scan-component.js"):null),o.lossless.ScanHeader=o.lossless.ScanHeader||function(){this.ah=0,this.al=0,this.numComp=0,this.selection=0,this.spectralEnd=0,this.components=[]},o.lossless.ScanHeader.prototype.read=function(s){var e,t,r,i=0;for(e=s.get16(),i+=2,this.numComp=s.get8(),i+=1,t=0;te)throw new Error("ERROR: scan header format error");this.components[t].scanCompSel=s.get8(),i+=1,r=s.get8(),i+=1,this.components[t].dcTabSel=r>>4,this.components[t].acTabSel=15&r}if(this.selection=s.get8(),i+=1,this.spectralEnd=s.get8(),i+=1,r=s.get8(),this.ah=r>>4,this.al=15&r,(i+=1)!==e)throw new Error("ERROR: scan header format error [count!=Ns]");return 1},void 0!==e&&e.exports&&(e.exports=o.lossless.ScanHeader)},{"./data-stream.js":2,"./scan-component.js":8}],10:[function(s,e,t){"use strict";var o=o||{};o.lossless=o.lossless||{},o.lossless.Utils=o.lossless.Utils||{},o.lossless.Utils.createArray=function(s){var e=new Array(s||0),t=s;if(arguments.length>1)for(var r=Array.prototype.slice.call(arguments,1);t--;)e[s-1-t]=o.lossless.Utils.createArray.apply(this,r);return e},o.lossless.Utils.makeCRCTable=function(){for(var s,e=[],t=0;t<256;t++){s=t;for(var o=0;o<8;o++)s=1&s?3988292384^s>>>1:s>>>1;e[t]=s}return e},o.lossless.Utils.crc32=function(s){for(var e=new Uint8Array(s.buffer),t=o.lossless.Utils.crcTable||(o.lossless.Utils.crcTable=o.lossless.Utils.makeCRCTable()),r=-1,i=0;i>>8^t[255&(r^e[i])];return(-1^r)>>>0},void 0!==e&&e.exports&&(e.exports=o.lossless.Utils)},{}]},{},[6])(6)}))}}]); \ No newline at end of file diff --git a/platform/viewer-static/dist/610.min.worker.js.map b/platform/viewer-static/dist/610.min.worker.js.map new file mode 100644 index 00000000000..c6aa05932d9 --- /dev/null +++ b/platform/viewer-static/dist/610.min.worker.js.map @@ -0,0 +1 @@ +{"version":3,"file":"610.min.worker.js","mappings":"2EAAA,SAAUA,GAAG,GAAoB,iBAAVC,QAAoC,IAATC,EAAsBA,EAAOD,QAAQD,SAAS,GAAmB,mBAATG,QAAqBA,OAAOC,IAAKD,OAAO,GAAGH,OAAO,EAA0B,oBAATK,OAAwBA,OAA+B,oBAATC,OAAwBA,OAA6B,oBAAPC,KAAsBA,KAAYC,MAAOC,KAAOT,GAAG,CAAE,CAA9T,EAAgU,WAAqC,OAAO,SAAUU,EAAEC,EAAEC,EAAEC,GAAG,SAASC,EAAEC,EAAEC,GAAG,IAAIJ,EAAEG,GAAG,CAAC,IAAIJ,EAAEI,GAAG,CAAC,IAAIE,EAAkB,mBAATC,SAAqBA,QAAQ,IAAIF,GAAGC,EAAE,OAAOA,EAAEF,GAAE,GAAI,GAAGI,EAAE,OAAOA,EAAEJ,GAAE,GAAI,IAAIf,EAAE,IAAIoB,MAAM,uBAAuBL,EAAE,KAAK,MAAMf,EAAEqB,KAAK,mBAAmBrB,CAAC,CAAC,IAAIsB,EAAEV,EAAEG,GAAG,CAACd,QAAQ,CAAC,GAAGU,EAAEI,GAAG,GAAGQ,KAAKD,EAAErB,SAAQ,SAASS,GAAG,IAAIE,EAAED,EAAEI,GAAG,GAAGL,GAAG,OAAOI,EAAEF,GAAIF,EAAE,GAAEY,EAAEA,EAAErB,QAAQS,EAAEC,EAAEC,EAAEC,EAAE,CAAC,OAAOD,EAAEG,GAAGd,OAAO,CAA2C,IAA1C,IAAIkB,EAAkB,mBAATD,SAAqBA,QAAgBH,EAAE,EAAEA,EAAEF,EAAEW,OAAOT,IAAID,EAAED,EAAEE,IAAI,OAAOD,CAAE,CAAzb,CAA2b,CAAC,EAAE,CAAC,SAASI,EAAQhB,EAAOD,GAkCj0B,aAGA,IAAIQ,EAAOA,GAAQ,CAAC,EACpBA,EAAKgB,SAAWhB,EAAKgB,UAAY,CAAC,EAIlChB,EAAKgB,SAASC,cAAgBjB,EAAKgB,SAASC,eAAiB,WACzDlB,KAAKmB,MAAQ,EACbnB,KAAKoB,cAAgB,EACrBpB,KAAKqB,MAAQ,CACjB,EAMoB,qBADI3B,GACYA,EAAOD,UACvCC,EAAOD,QAAUQ,EAAKgB,SAASC,cAGnC,EAAE,CAAC,GAAG,EAAE,CAAC,SAASR,EAAQhB,EAAOD,GAkCjC,aAGA,IAAIQ,EAAOA,GAAQ,CAAC,EACpBA,EAAKgB,SAAWhB,EAAKgB,UAAY,CAAC,EAIlChB,EAAKgB,SAASK,WAAarB,EAAKgB,SAASK,YAAc,SAAUC,EAAMC,EAAQR,GAG3EhB,KAAKyB,OAAS,IAAIC,WAAWH,EAAMC,EAAQR,GAC3ChB,KAAK2B,MAAQ,CACjB,EAIA1B,EAAKgB,SAASK,WAAWM,UAAUC,MAAQ,WAEvC,IAAIC,GAAS9B,KAAKyB,OAAOzB,KAAK2B,QAAU,GAAK3B,KAAKyB,OAAOzB,KAAK2B,MAAQ,GAEtE,OADA3B,KAAK2B,OAAS,EACPG,CACX,EAIA7B,EAAKgB,SAASK,WAAWM,UAAUG,KAAO,WAEtC,IAAID,EAAQ9B,KAAKyB,OAAOzB,KAAK2B,OAE7B,OADA3B,KAAK2B,OAAS,EACPG,CACX,EAMoB,qBADIpC,GACYA,EAAOD,UACvCC,EAAOD,QAAUQ,EAAKgB,SAASK,WAGnC,EAAE,CAAC,GAAG,EAAE,CAAC,SAASZ,EAAQhB,EAAOD,GAkCjC,aAGA,IA8tBQgC,EA9tBJxB,EAAOA,GAAQ,CAAC,EACpBA,EAAKgB,SAAWhB,EAAKgB,UAAY,CAAC,EAClChB,EAAKgB,SAASK,WAAarB,EAAKgB,SAASK,kBAAmC,IAAZZ,EAA2BA,EAAQ,oBAAsB,MACzHT,EAAKgB,SAASe,aAAe/B,EAAKgB,SAASe,oBAAqC,IAAZtB,EAA2BA,EAAQ,sBAAwB,MAC/HT,EAAKgB,SAASgB,kBAAoBhC,EAAKgB,SAASgB,yBAA0C,IAAZvB,EAA2BA,EAAQ,2BAA6B,MAC9IT,EAAKgB,SAASiB,WAAajC,EAAKgB,SAASiB,kBAAmC,IAAZxB,EAA2BA,EAAQ,oBAAsB,MACzHT,EAAKgB,SAASkB,YAAclC,EAAKgB,SAASkB,mBAAoC,IAAZzB,EAA2BA,EAAQ,qBAAuB,MAC5HT,EAAKgB,SAASmB,MAAQnC,EAAKgB,SAASmB,aAA8B,IAAZ1B,EAA2BA,EAAQ,cAAgB,MAazGT,EAAKgB,SAASoB,QAAUpC,EAAKgB,SAASoB,SAAW,SAAUZ,EAAQa,GAC/DtC,KAAKyB,OAASA,EACdzB,KAAKuC,MAAQ,IAAItC,EAAKgB,SAASkB,YAC/BnC,KAAKwC,UAAY,IAAIvC,EAAKgB,SAASe,aACnChC,KAAKyC,WAAa,IAAIxC,EAAKgB,SAASgB,kBACpCjC,KAAK0C,KAAO,IAAIzC,EAAKgB,SAASiB,WAC9BlC,KAAK2C,GAAK1C,EAAKgB,SAASmB,MAAMQ,YAAY,GAAI,EAAG,IACjD5C,KAAK6C,QAAU5C,EAAKgB,SAASmB,MAAMQ,YAAY,EAAG,EAAG,OACrD5C,KAAK8C,YAAc,GACnB9C,KAAK+C,OAAS,GACd/C,KAAKgD,MAAQ/C,EAAKgB,SAASmB,MAAMQ,YAAY,GAAI,GACjD5C,KAAKiD,MAAQhD,EAAKgB,SAASmB,MAAMQ,YAAY,GAAI,GACjD5C,KAAKkD,KAAOjD,EAAKgB,SAASmB,MAAMQ,YAAY,GAAI,GAChD5C,KAAKmD,OAAS,EACdnD,KAAKoD,YAAc,EACnBpD,KAAKqD,QAAU,EACfrD,KAAKsD,gBAAkB,EACvBtD,KAAKuD,UAAY,EACjBvD,KAAKwD,KAAO,EACZxD,KAAKyD,KAAO,EACZzD,KAAK0D,KAAO,EACZ1D,KAAK2D,KAAO,EACZ3D,KAAKsC,SAAW,EAChBtC,KAAK4D,WAAa,KAClB5D,KAAK6D,YAAa,EAClB7D,KAAK8D,KAAO,OAEY,IAAbxB,IACPtC,KAAKsC,SAAWA,EAExB,EAKArC,EAAKgB,SAASoB,QAAQ0B,OAAS,CAAC,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAC3I,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IACnI9D,EAAKgB,SAASoB,QAAQ2B,MAAQ,CAAC,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC7I,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAChI/D,EAAKgB,SAASoB,QAAQ4B,oBAAsB,GAC5ChE,EAAKgB,SAASoB,QAAQ6B,IAAM,WAC5BjE,EAAKgB,SAASoB,QAAQ8B,qBAAuB,MAC7ClE,EAAKgB,SAASoB,QAAQ+B,mBAAqB,MAW3CnE,EAAKgB,SAASoB,QAAQT,UAAUyC,WAAa,SAAU5C,EAAQD,EAAQR,GACnE,OAAOhB,KAAKsE,OAAO7C,EAAQD,EAAQR,GAAQS,MAC/C,EAIAxB,EAAKgB,SAASoB,QAAQT,UAAU0C,OAAS,SAAU7C,EAAQD,EAAQR,EAAQsB,GAGvE,IAAIiC,EAAiC5D,EAAG6D,EAA8BC,EAAzDC,EAAU,EAAGC,EAAO,GAAcC,EAAO,GAAIjD,EAAQ,GAiBlE,QAfsB,IAAXF,IACPzB,KAAKyB,OAASA,QAGM,IAAba,IACPtC,KAAKsC,SAAWA,GAGpBtC,KAAK6E,OAAS,IAAI5E,EAAKgB,SAASK,WAAWtB,KAAKyB,OAAQD,EAAQR,GAChEhB,KAAKyB,OAAS,KAEdzB,KAAK0D,KAAO,EACZ1D,KAAK2D,KAAO,EAGI,SAFhBY,EAAUvE,KAAK6E,OAAOhD,SAGlB,MAAM,IAAIjB,MAAM,mBAKpB,IAFA2D,EAAUvE,KAAK6E,OAAOhD,QAEZ0C,GAAW,GAAO,MAAwB,QAAZA,GAAsB,CAC1D,OAAQA,GACJ,KAAK,MACDvE,KAAKwC,UAAUsC,KAAK9E,KAAK6E,OAAQ7E,KAAK6C,SACtC,MACJ,KAAK,MACD,MAAM,IAAIjC,MAAM,6EACpB,KAAK,MACDZ,KAAKyC,WAAWqC,KAAK9E,KAAK6E,OAAQ5E,EAAKgB,SAASoB,QAAQ2B,OACxD,MACJ,KAAK,MACDhE,KAAKsD,gBAAkBtD,KAAK+E,aAC5B,MACJ,KAAK,MACL,KAAK,MACL,KAAK,MACL,KAAK,MACL,KAAK,MACL,KAAK,MACL,KAAK,MACL,KAAK,MACL,KAAK,MACL,KAAK,MACL,KAAK,MACL,KAAK,MACL,KAAK,MACL,KAAK,MACL,KAAK,MACL,KAAK,MACD/E,KAAKgF,UACL,MACJ,KAAK,MACDhF,KAAKiF,cACL,MACJ,QACI,GAAKV,GAAW,GAAO,IACnB,MAAM,IAAI3D,MAAM,iDAI5B2D,EAAUvE,KAAK6E,OAAOhD,OAC1B,CAEA,GAAK0C,EAAU,OAAYA,EAAU,MACjC,MAAM,IAAI3D,MAAM,4CAGpBZ,KAAKuC,MAAMuC,KAAK9E,KAAK6E,QACrBN,EAAUvE,KAAK6E,OAAOhD,QAEtB,EAAG,CACC,KAAmB,QAAZ0C,GAAqB,CACxB,OAAQA,GACJ,KAAK,MACDvE,KAAKwC,UAAUsC,KAAK9E,KAAK6E,OAAQ7E,KAAK6C,SACtC,MACJ,KAAK,MACD,MAAM,IAAIjC,MAAM,6EACpB,KAAK,MACDZ,KAAKyC,WAAWqC,KAAK9E,KAAK6E,OAAQ5E,EAAKgB,SAASoB,QAAQ2B,OACxD,MACJ,KAAK,MACDhE,KAAKsD,gBAAkBtD,KAAK+E,aAC5B,MACJ,KAAK,MACL,KAAK,MACL,KAAK,MACL,KAAK,MACL,KAAK,MACL,KAAK,MACL,KAAK,MACL,KAAK,MACL,KAAK,MACL,KAAK,MACL,KAAK,MACL,KAAK,MACL,KAAK,MACL,KAAK,MACL,KAAK,MACL,KAAK,MACD/E,KAAKgF,UACL,MACJ,KAAK,MACDhF,KAAKiF,cACL,MACJ,QACI,GAAKV,GAAW,GAAO,IACnB,MAAM,IAAI3D,MAAM,wDAI5B2D,EAAUvE,KAAK6E,OAAOhD,OAC1B,CAmCA,OAjCA7B,KAAKkF,UAAYlF,KAAKuC,MAAM2C,UAC5BlF,KAAKmF,WAAanF,KAAKuC,MAAM4C,WAExBnF,KAAKsC,WACNtC,KAAKsC,SAAW8C,SAASC,KAAKC,KAAKtF,KAAKkF,UAAY,KAGnC,GAAjBlF,KAAKsC,SACLtC,KAAK8D,KAAO,IAEZ9D,KAAK8D,KAAO,MAGhB9D,KAAK0C,KAAKoC,KAAK9E,KAAK6E,QACpB7E,KAAKqD,QAAUrD,KAAK0C,KAAKW,QACzBrD,KAAKuD,UAAYvD,KAAK0C,KAAKa,UAEL,IAAlBvD,KAAKsC,SACgB,IAAjBtC,KAAKqD,SACLrD,KAAKuF,OAASvF,KAAKwF,YACnBxF,KAAKyF,OAASzF,KAAK0F,YACnB1F,KAAK2F,OAAS3F,KAAK4F,YAEnB5F,KAAKuF,OAASvF,KAAK6F,UACnB7F,KAAKyF,OAASzF,KAAK8F,UACnB9F,KAAK2F,OAAS3F,KAAK+F,eAGvB/F,KAAKuF,OAASvF,KAAKgG,WACnBhG,KAAKyF,OAASzF,KAAKiG,WACnBjG,KAAK2F,OAAS3F,KAAK+F,cAGf/F,KAAKuD,WACT,KAAK,EACDvD,KAAKkG,SAAWlG,KAAKmG,QACrB,MACJ,KAAK,EACDnG,KAAKkG,SAAWlG,KAAKoG,QACrB,MACJ,KAAK,EACDpG,KAAKkG,SAAWlG,KAAKqG,QACrB,MACJ,KAAK,EACDrG,KAAKkG,SAAWlG,KAAKsG,QACrB,MACJ,KAAK,EACDtG,KAAKkG,SAAWlG,KAAKuG,QACrB,MACJ,KAAK,EACDvG,KAAKkG,SAAWlG,KAAKwG,QACrB,MACJ,QACIxG,KAAKkG,SAAWlG,KAAKyG,QAO7B,IAHAzG,KAAK0G,UAAY1G,KAAK0C,KAAKyC,WAC3BnF,KAAK2G,YAAc3G,KAAKyC,WAAWkE,YAE9BhG,EAAI,EAAGA,EAAIX,KAAKqD,QAAS1C,GAAG,EAC7B6D,EAAQxE,KAAK0G,UAAU/F,GAAGiG,YAC1B5G,KAAKkD,KAAKvC,GAAKX,KAAK2G,YAAY3G,KAAKmF,WAAWX,GAAOpD,eACvDpB,KAAK+C,OAAOpC,GAAKX,KAAKmF,WAAWX,GAAOnD,MAAQrB,KAAKmF,WAAWX,GAAOrD,MACvEnB,KAAKiD,MAAMtC,GAAKX,KAAK6C,QAAQ7C,KAAK0G,UAAU/F,GAAGkG,UAAU,GACzD7G,KAAKgD,MAAMrC,GAAKX,KAAK6C,QAAQ7C,KAAK0G,UAAU/F,GAAGmG,UAAU,GAa7D,IAVA9G,KAAKwD,KAAOxD,KAAKuC,MAAMwE,KACvB/G,KAAKyD,KAAOzD,KAAKuC,MAAMyE,KACF,GAAjBhH,KAAKsC,SACLtC,KAAK4D,WAAa,IAAIlC,WAAW,IAAIuF,YAAYjH,KAAKwD,KAAOxD,KAAKyD,KAAOzD,KAAKsC,SAAWtC,KAAKqD,UAE9FrD,KAAK4D,WAAa,IAAIsD,YAAY,IAAID,YAAYjH,KAAKwD,KAAOxD,KAAKyD,KAAOzD,KAAKsC,SAAWtC,KAAKqD,UAGnGqB,GAAS,IAEI,CAIT,IAHAE,EAAK,GAAK,EACVjD,EAAM,GAAK,EAENhB,EAAI,EAAGA,EAAI,GAAIA,GAAG,EACnBgE,EAAKhE,GAAM,GAAMX,KAAKkF,UAAY,EAGtC,GAA6B,IAAzBlF,KAAKsD,gBAAuB,CAG5B,IAFAiB,EAAUvE,KAAKmH,WAAWxC,EAAMC,EAAMjD,GAElB,IAAZ4C,GAAoBvE,KAAK0D,KAAO1D,KAAKwD,MAAUxD,KAAK2D,KAAO3D,KAAKyD,MACpEzD,KAAK2F,OAAOhB,GACZJ,EAAUvE,KAAKmH,WAAWxC,EAAMC,EAAMjD,GAG1C,KACJ,CAEA,IAAK8C,EAAS,EAAGA,EAASzE,KAAKsD,kBAC3BtD,KAAK6D,WAAwB,GAAVY,EACnBF,EAAUvE,KAAKmH,WAAWxC,EAAMC,EAAMjD,GACtC3B,KAAK2F,OAAOhB,GAEI,IAAZJ,GALwCE,GAAQ,GAmBxD,GATgB,IAAZF,IACyB,IAArBvE,KAAKoD,aACLmB,EAAW,MAASvE,KAAKmD,OACzBnD,KAAKoD,YAAc,GAEnBmB,EAAUvE,KAAK6E,OAAOhD,WAIvB0C,GAAWtE,EAAKgB,SAASoB,QAAQ8B,sBACnCI,GAAWtE,EAAKgB,SAASoB,QAAQ+B,oBAClC,KAER,CAEiB,QAAZG,GAAoC,IAAZG,IACzB1E,KAAK+E,aACLR,EAAUvE,KAAK6E,OAAOhD,QAE9B,OAAsB,QAAZ0C,GAAyBvE,KAAK0D,KAAO1D,KAAKwD,MAAUxD,KAAK2D,KAAO3D,KAAKyD,MAAuB,IAAZiB,GAE1F,OAAO1E,KAAK4D,UAChB,EAIA3D,EAAKgB,SAASoB,QAAQT,UAAUuF,WAAa,SAAUC,EAAMxC,EAAMjD,GAC/D,OAAoB,GAAhB3B,KAAKqD,QACErD,KAAKqH,aAAaD,EAAMxC,EAAMjD,GACd,GAAhB3B,KAAKqD,QACLrD,KAAKsH,UAAUF,EAAMxC,EAAMjD,IAE1B,CAEhB,EAIA1B,EAAKgB,SAASoB,QAAQT,UAAU6E,QAAU,SAAUc,GAChD,OAAOvH,KAAKwH,aAAaD,EAC7B,EAIAtH,EAAKgB,SAASoB,QAAQT,UAAUuE,QAAU,SAAUoB,GAChD,OAAOvH,KAAKyH,aAAaF,EAC7B,EAIAtH,EAAKgB,SAASoB,QAAQT,UAAUwE,QAAU,SAAUmB,GAChD,OAAOvH,KAAK0H,cAAcH,EAC9B,EAIAtH,EAAKgB,SAASoB,QAAQT,UAAUyE,QAAU,SAAUkB,GAChD,OAAQvH,KAAKwH,aAAaD,GAAcvH,KAAKyH,aAAaF,GAAevH,KAAK0H,cAAcH,EAChG,EAIAtH,EAAKgB,SAASoB,QAAQT,UAAU0E,QAAU,SAAUiB,GAChD,OAAOvH,KAAKwH,aAAaD,IAAgBvH,KAAKyH,aAAaF,GAAcvH,KAAK0H,cAAcH,IAAgB,EAChH,EAIAtH,EAAKgB,SAASoB,QAAQT,UAAU2E,QAAU,SAAUgB,GAChD,OAAOvH,KAAKyH,aAAaF,IAAgBvH,KAAKwH,aAAaD,GAAcvH,KAAK0H,cAAcH,IAAgB,EAChH,EAIAtH,EAAKgB,SAASoB,QAAQT,UAAU4E,QAAU,SAAUe,GAChD,OAASvH,KAAKwH,aAAaD,GAAcvH,KAAKyH,aAAaF,IAAe,CAC9E,EAIAtH,EAAKgB,SAASoB,QAAQT,UAAU0F,UAAY,SAAUF,EAAMxC,EAAMjD,GAG9D,IAAIG,EAAO6F,EAAOC,EAAOC,EAAMC,EAAMnH,EAAGoH,EAAGC,EAM3C,IAJAZ,EAAK,GAAKpH,KAAKkG,SAAS,GACxBkB,EAAK,GAAKpH,KAAKkG,SAAS,GACxBkB,EAAK,GAAKpH,KAAKkG,SAAS,GAEnB4B,EAAO,EAAGA,EAAO9H,KAAKqD,QAASyE,GAAM,EAItC,IAHAD,EAAO7H,KAAKkD,KAAK4E,GACjBH,EAAQ3H,KAAKgD,MAAM8E,GACnBF,EAAQ5H,KAAKiD,MAAM6E,GACdnH,EAAI,EAAGA,EAAIX,KAAK+C,OAAO+E,GAAOnH,GAAG,EAAG,CACrC,IAAKoH,EAAI,EAAGA,EAAI/H,KAAK8C,YAAY9B,OAAQ+G,GAAG,EACxC/H,KAAK8C,YAAYiF,GAAK,EAK1B,IAFAjG,EAAQ9B,KAAKiI,gBAAgBL,EAAOhD,EAAMjD,KAE7B,MACT,OAAOG,EAMX,IAHAsF,EAAKU,GAAQ9H,KAAK8C,YAAY,GAAKsE,EAAKU,GAAQ9H,KAAKkI,KAAKvG,EAAOG,EAAO8C,EAAMjD,GAC9E3B,KAAK8C,YAAY,IAAM+E,EAAK,GAEvBG,EAAI,EAAGA,EAAI,GAAIA,GAAG,EAAG,CAGtB,IAFAlG,EAAQ9B,KAAKiI,gBAAgBN,EAAO/C,EAAMjD,KAE7B,MACT,OAAOG,EAKX,GAFAkG,GAAMlG,GAAS,EAEQ,IAAV,GAARA,IACD,GAAKA,GAAS,GAAO,EACjB,WAGJ9B,KAAK8C,YAAY7C,EAAKgB,SAASoB,QAAQ0B,OAAOiE,IAAMhI,KAAKkI,KAAKvG,EAAe,GAARG,EAAc8C,EAAMjD,GAASkG,EAAKG,EAE/G,CACJ,CAGJ,OAAO,CACX,EAIA/H,EAAKgB,SAASoB,QAAQT,UAAUyF,aAAe,SAAUD,EAAMxC,EAAMjD,GAGjE,IAAIG,EAAOnB,EAAGP,EAAG+H,EASjB,IAPInI,KAAK6D,YACL7D,KAAK6D,YAAa,EAClBuD,EAAK,GAAM,GAAMpH,KAAKuC,MAAM2C,UAAY,GAExCkC,EAAK,GAAKpH,KAAKkG,WAGdvF,EAAI,EAAGA,EAAIX,KAAK+C,OAAO,GAAIpC,GAAG,EAAG,CAElC,IADAmB,EAAQ9B,KAAKiI,gBAAgBjI,KAAKiD,MAAM,GAAI2B,EAAMjD,KACrC,MACT,OAAOG,EAMX,IAFAqG,GADA/H,EAAIJ,KAAKkI,KAAKd,EAAMtF,EAAO8C,EAAMjD,KAChB,IAEA1B,EAAKgB,SAASoB,QAAQ8B,sBAA0BgE,GAAYlI,EAAKgB,SAASoB,QAAQ+B,mBAC/F,OAAO+D,EAGXf,EAAK,IAAMhH,CACf,CAEA,OAAO,CACX,EAmCAH,EAAKgB,SAASoB,QAAQT,UAAUqG,gBAAkB,SAAUG,EAAOxD,EAAMjD,GAGrE,IAAId,EAAMwH,EAmBV,GAlBO,MAEH1G,EAAM,GAAK,GACXiD,EAAK,KAAO,EAEE,OADdyD,EAAQrI,KAAK6E,OAAO9C,UAEhB/B,KAAKmD,OAASnD,KAAK6E,OAAO9C,OACN,IAAhB/B,KAAKmD,SACLnD,KAAKoD,YAAc,IAG3BwB,EAAK,IAAMyD,GAEX1G,EAAM,IAAM,EAK2B,KAF3Cd,EAAOuH,EAAMxD,EAAK,IAAMjD,EAAM,KAElB1B,EAAKgB,SAASoB,QAAQ6B,KAAY,CAC1C,GAAyB,IAArBlE,KAAKoD,YAEL,OADApD,KAAKoD,YAAc,EACZ,MAASpD,KAAKmD,OAGzByB,EAAK,IAxBF,OAwBkB,GAAKjD,EAAM,GAChCiD,EAAK,KAAO,EAGE,OAFdyD,EAAQrI,KAAK6E,OAAO9C,UAGhB/B,KAAKmD,OAASnD,KAAK6E,OAAO9C,OACN,IAAhB/B,KAAKmD,SACLnD,KAAKoD,YAAc,IAI3BwB,EAAK,IAAMyD,EACXxH,EAAOuH,EAAuB,KAAR,IAAPvH,IAAuB+D,EAAK,IAAMjD,EAAM,KACvDA,EAAM,IAAM,CAChB,CAIA,GAFAA,EAAM,IAAM,GAAKd,GAAQ,GAErBc,EAAM,GAAK,EACX,MAAM,IAAIf,MAAM,SAAWe,EAAM,GAAK,SAAWiD,EAAK,GAAK,SAAW/D,EAAO,sBAGjF,OAAIc,EAAM,GAAK3B,KAAKoD,aAChBpD,KAAKoD,YAAc,EACZ,MAASpD,KAAKmD,SAGzByB,EAAK,IAnDE,OAmDc,GAAKjD,EAAM,GAClB,IAAPd,EACX,EAIAZ,EAAKgB,SAASoB,QAAQT,UAAUsG,KAAO,SAAUI,EAAMlI,EAAGwE,EAAMjD,GAG5D,IAAI4G,EAA0BF,EAK9B,GAJM,GACG,EACF,MAEG,IAANjI,EACA,OAAO,EAGX,GAAU,KAANA,EACA,OAAIkI,EAAK,IAAM,GACH,MAED,MAMf,GAFA3G,EAAM,IAAMvB,EAERuB,EAAM,IAAM,EAAG,CACf,GAAKA,EAAM,GAAK3B,KAAKoD,cAAiBpD,KAAKwI,cAEvC,OADAxI,KAAKoD,YAAc,GACX,MAASpD,KAAKmD,SAAW,EAGrCoF,EAAS3D,EAAK,IAAMjD,EAAM,GAC1BiD,EAAK,IAvBF,OAuBkB,GAAKjD,EAAM,EACpC,KAAO,CAcH,GAbAiD,EAAK,KAAO,EAGE,OAFdyD,EAAQrI,KAAK6E,OAAO9C,UAGhB/B,KAAKmD,OAASnD,KAAK6E,OAAO9C,OACN,IAAhB/B,KAAKmD,SACLnD,KAAKoD,YAAc,IAI3BwB,EAAK,IAAMyD,EACX1G,EAAM,IAAM,EAERA,EAAM,GAAK,EAAG,CACd,GAAyB,IAArB3B,KAAKoD,YAEL,OADApD,KAAKoD,YAAc,GACX,MAASpD,KAAKmD,SAAW,EAGrCyB,EAAK,KAAO,EAGE,OAFdyD,EAAQrI,KAAK6E,OAAO9C,UAGhB/B,KAAKmD,OAASnD,KAAK6E,OAAO9C,OACN,IAAhB/B,KAAKmD,SACLnD,KAAKoD,YAAc,IAI3BwB,EAAK,IAAMyD,EACX1G,EAAM,IAAM,CAChB,CAEA,GAAIA,EAAM,GAAK,EACX,MAAM,IAAIf,MAAM,SAAWe,EAAM,GAAK,cAG1C,GAAIA,EAAM,GAAK3B,KAAKoD,YAEhB,OADApD,KAAKoD,YAAc,GACX,MAASpD,KAAKmD,SAAW,EAGrCoF,EAAS3D,EAAK,IAAMjD,EAAM,GAC1BiD,EAAK,IApEF,OAoEkB,GAAKjD,EAAM,EACpC,CAMA,OAJI4G,EAzEE,GAyEgBnI,EAAI,IACtBmI,GAAyB,IAzErB,GAyEgBnI,IAGjBmI,CACX,EAIAtI,EAAKgB,SAASoB,QAAQT,UAAU4F,aAAe,SAAUD,GAGrD,OAAIvH,KAAK0D,KAAO,EACL1D,KAAKuF,OAAUvF,KAAK2D,KAAO3D,KAAKwD,KAAQxD,KAAK0D,KAAQ,EAAI6D,GACzDvH,KAAK2D,KAAO,EACZ3D,KAAKyH,aAAaF,GAEjB,GAAMvH,KAAKuC,MAAM2C,UAAY,CAE7C,EAIAjF,EAAKgB,SAASoB,QAAQT,UAAU8F,cAAgB,SAAUH,GAGtD,OAAKvH,KAAK0D,KAAO,GAAO1D,KAAK2D,KAAO,EACzB3D,KAAKuF,QAAWvF,KAAK2D,KAAO,GAAK3D,KAAKwD,KAAQxD,KAAK0D,KAAQ,EAAI6D,GAE/DvH,KAAKyH,aAAaF,EAEjC,EAIAtH,EAAKgB,SAASoB,QAAQT,UAAU6F,aAAe,SAAUF,GAGrD,OAAIvH,KAAK2D,KAAO,EACL3D,KAAKuF,QAAUvF,KAAK2D,KAAO,GAAK3D,KAAKwD,KAAQxD,KAAK0D,KAAO6D,GAEzDvH,KAAKwH,aAAaD,EAEjC,EAIAtH,EAAKgB,SAASoB,QAAQT,UAAU4G,YAAc,WAC1C,OAAQxI,KAAK0D,OAAU1D,KAAKwD,KAAO,GAAQxD,KAAK2D,OAAU3D,KAAKyD,KAAO,CAC1E,EAIAxD,EAAKgB,SAASoB,QAAQT,UAAUmE,aAAe,SAAUuC,GAChDtI,KAAK0D,KAAO1D,KAAKwD,MAAUxD,KAAK2D,KAAO3D,KAAKyD,OAC7CzD,KAAKyF,OAAUzF,KAAK2D,KAAO3D,KAAKwD,KAAQxD,KAAK0D,KAAQ1D,KAAK8D,KAAOwE,EAAK,IAEtEtI,KAAK0D,MAAM,EAEP1D,KAAK0D,MAAQ1D,KAAKwD,OAClBxD,KAAK2D,MAAM,EACX3D,KAAK0D,KAAO,GAGxB,EAIAzD,EAAKgB,SAASoB,QAAQT,UAAUgE,UAAY,SAAU0C,GAClD,IAAI9G,EAAWxB,KAAK2D,KAAO3D,KAAKwD,KAAQxD,KAAK0D,KAExC1D,KAAK0D,KAAO1D,KAAKwD,MAAUxD,KAAK2D,KAAO3D,KAAKyD,OAC7CzD,KAAKyF,OAAOjE,EAAQ8G,EAAK,GAAI,GAC7BtI,KAAKyF,OAAOjE,EAAQ8G,EAAK,GAAI,GAC7BtI,KAAKyF,OAAOjE,EAAQ8G,EAAK,GAAI,GAE7BtI,KAAK0D,MAAM,EAEP1D,KAAK0D,MAAQ1D,KAAKwD,OAClBxD,KAAK2D,MAAM,EACX3D,KAAK0D,KAAO,GAGxB,EAEAzD,EAAKgB,SAASoB,QAAQT,UAAUkE,UAAY,SAAUnE,EAAO8G,GACzDzI,KAAK4D,WAAWjC,GAAS8G,CAC7B,EAEAxI,EAAKgB,SAASoB,QAAQT,UAAUiE,UAAY,SAAUlE,GAClD,OAAO3B,KAAK4D,WAAWjC,EAC3B,GAGQF,EAAS,IAAIwF,YAAY,GAC7B,IAAIyB,SAASjH,GAAQkH,SAAS,EAAG,KAAK,GAED,MAA9B,IAAIC,WAAWnH,GAAQ,KAK9BxB,EAAKgB,SAASoB,QAAQT,UAAUqE,WAAahG,EAAKgB,SAASoB,QAAQT,UAAUkE,UAC7E7F,EAAKgB,SAASoB,QAAQT,UAAUoE,WAAa/F,EAAKgB,SAASoB,QAAQT,UAAUiE,YAI7E5F,EAAKgB,SAASoB,QAAQT,UAAUqE,WAAa,SAAUtE,EAAO8G,GAC1DzI,KAAK4D,WAAWjC,IAAiB,IAAN8G,IAAe,EAAOA,GAAO,EAAK,GACjE,EAEAxI,EAAKgB,SAASoB,QAAQT,UAAUoE,WAAa,SAAUrE,GACnD,IAAI8G,EAAMzI,KAAK4D,WAAWjC,GAC1B,OAAe,IAAN8G,IAAe,EAAOA,GAAO,EAAK,GAC/C,GAGJxI,EAAKgB,SAASoB,QAAQT,UAAU8D,YAAc,SAAU/D,EAAO8G,EAAKlB,GAEhEvH,KAAK4D,WAAmB,EAARjC,EAAY4F,GAAckB,CAC9C,EAEAxI,EAAKgB,SAASoB,QAAQT,UAAU4D,YAAc,SAAU7D,EAAO4F,GAE3D,OAAOvH,KAAK4D,WAAmB,EAARjC,EAAY4F,EACvC,EAIAtH,EAAKgB,SAASoB,QAAQT,UAAUoD,QAAU,WACtC,IAAI6D,EAAQ,EAAG7H,EAAShB,KAAK6E,OAAOhD,QAGpC,IAFAgH,GAAS,EAEFA,EAAQ7H,GACXhB,KAAK6E,OAAO9C,OACZ8G,GAAO,EAGX,OAAO7H,CACX,EAIAf,EAAKgB,SAASoB,QAAQT,UAAUqD,YAAc,WAC1C,IAAwBjE,EAApB8H,EAAK,GAAID,EAAQ,EAKrB,IAHA7H,EAAShB,KAAK6E,OAAOhD,QACrBgH,GAAS,EAEFA,EAAQ7H,GACX8H,GAAM9I,KAAK6E,OAAO9C,OAClB8G,GAAO,EAGX,OAAOC,CACX,EAIA7I,EAAKgB,SAASoB,QAAQT,UAAUmD,WAAa,WAGzC,GAAW,IAFF/E,KAAK6E,OAAOhD,QAGjB,MAAM,IAAIjB,MAAM,6DAGpB,OAAOZ,KAAK6E,OAAOhD,OACvB,EAOoB,qBADInC,GACYA,EAAOD,UACvCC,EAAOD,QAAUQ,EAAKgB,SAASoB,QAGnC,EAAE,CAAC,mBAAmB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,aAAa,KAAK,EAAE,CAAC,SAAS3B,EAAQhB,EAAOD,GAkCnK,aAGA,IAAIQ,EAAOA,GAAQ,CAAC,EACpBA,EAAKgB,SAAWhB,EAAKgB,UAAY,CAAC,EAClChB,EAAKgB,SAASC,cAAgBjB,EAAKgB,SAASC,qBAAsC,IAAZR,EAA2BA,EAAQ,uBAAyB,MAClIT,EAAKgB,SAASK,WAAarB,EAAKgB,SAASK,kBAAmC,IAAZZ,EAA2BA,EAAQ,oBAAsB,MAIzHT,EAAKgB,SAASkB,YAAclC,EAAKgB,SAASkB,aAAe,WACrDnC,KAAKmF,WAAa,GAClBnF,KAAK+G,KAAO,EACZ/G,KAAKgH,KAAO,EACZhH,KAAKqD,QAAU,EACfrD,KAAKkF,UAAY,CACrB,EAMAjF,EAAKgB,SAASkB,YAAYP,UAAUkD,KAAO,SAAUvD,GAGjD,IAAeP,EAAQL,EAAGoI,EAAGnE,EAAzBiE,EAAQ,EAgBZ,IAdA7H,EAASO,EAAKM,QACdgH,GAAS,EAET7I,KAAKkF,UAAY3D,EAAKQ,OACtB8G,GAAO,EAEP7I,KAAKgH,KAAOzF,EAAKM,QACjBgH,GAAS,EAET7I,KAAK+G,KAAOxF,EAAKM,QACjBgH,GAAS,EAET7I,KAAKqD,QAAU9B,EAAKQ,OACpB8G,GAAO,EACFlI,EAAI,EAAGA,GAAKX,KAAKqD,QAAS1C,GAAG,EAAG,CACjC,GAAIkI,EAAQ7H,EACR,MAAM,IAAIJ,MAAM,6BAMpB,GAHAmI,EAAIxH,EAAKQ,QACT8G,GAAO,IAEM7H,EACT,MAAM,IAAIJ,MAAM,qCAGpBgE,EAAOrD,EAAKQ,OACZ8G,GAAO,EAEF7I,KAAKmF,WAAW4D,KACjB/I,KAAKmF,WAAW4D,GAAK,IAAI9I,EAAKgB,SAASC,eAG3ClB,KAAKmF,WAAW4D,GAAG5H,MAAQyD,GAAQ,EACnC5E,KAAKmF,WAAW4D,GAAG1H,MAAe,GAAPuD,EAC3B5E,KAAKmF,WAAW4D,GAAG3H,cAAgBG,EAAKQ,OACxC8G,GAAO,CACX,CAEA,GAAIA,IAAU7H,EACV,MAAM,IAAIJ,MAAM,yCAGpB,OAAO,CACX,EAMoB,qBADIlB,GACYA,EAAOD,UACvCC,EAAOD,QAAUQ,EAAKgB,SAASkB,YAGnC,EAAE,CAAC,sBAAsB,EAAE,mBAAmB,IAAI,EAAE,CAAC,SAASzB,EAAQhB,EAAOD,GAkC7E,aAGA,IAAIQ,EAAOA,GAAQ,CAAC,EACpBA,EAAKgB,SAAWhB,EAAKgB,UAAY,CAAC,EAClChB,EAAKgB,SAASK,WAAarB,EAAKgB,SAASK,kBAAmC,IAAZZ,EAA2BA,EAAQ,oBAAsB,MACzHT,EAAKgB,SAASmB,MAAQnC,EAAKgB,SAASmB,aAA8B,IAAZ1B,EAA2BA,EAAQ,cAAgB,MAIzGT,EAAKgB,SAASe,aAAe/B,EAAKgB,SAASe,cAAgB,WACvDhC,KAAKc,EAAIb,EAAKgB,SAASmB,MAAMQ,YAAY,EAAG,EAAG,IAC/C5C,KAAKgJ,GAAK,GACVhJ,KAAKiJ,EAAIhJ,EAAKgB,SAASmB,MAAMQ,YAAY,EAAG,EAAG,GAAI,KACnD5C,KAAKkJ,GAAKjJ,EAAKgB,SAASmB,MAAMQ,YAAY,EAAG,GAE7C5C,KAAKkJ,GAAG,GAAG,GAAK,EAChBlJ,KAAKkJ,GAAG,GAAG,GAAK,EAChBlJ,KAAKkJ,GAAG,GAAG,GAAK,EAChBlJ,KAAKkJ,GAAG,GAAG,GAAK,EAChBlJ,KAAKkJ,GAAG,GAAG,GAAK,EAChBlJ,KAAKkJ,GAAG,GAAG,GAAK,EAChBlJ,KAAKkJ,GAAG,GAAG,GAAK,EAChBlJ,KAAKkJ,GAAG,GAAG,GAAK,EAChBlJ,KAAKgJ,GAAG,GAAK,EACbhJ,KAAKgJ,GAAG,GAAK,EACbhJ,KAAKgJ,GAAG,GAAK,EACbhJ,KAAKgJ,GAAG,GAAK,CACjB,EAMA/I,EAAKgB,SAASe,aAAakC,IAAM,WAKjCjE,EAAKgB,SAASe,aAAaJ,UAAUkD,KAAO,SAASvD,EAAMsB,GAGvD,IAAe7B,EAAQ4D,EAAMzE,EAAG4I,EAAGpI,EAAGqH,EAAlCa,EAAQ,EAKZ,IAHA7H,EAASO,EAAKM,QACdgH,GAAS,EAEFA,EAAQ7H,GAAQ,CAInB,GAFA6H,GAAO,GACP1I,EAAW,IAFXyE,EAAOrD,EAAKQ,SAGJ,EACJ,MAAM,IAAInB,MAAM,+BAIpB,IADAmI,EAAInE,GAAQ,GACJ,EACJ,MAAM,IAAIhE,MAAM,2CAMpB,IAHAZ,KAAKgJ,GAAG7I,GAAK,EACbH,KAAKkJ,GAAG/I,GAAG4I,GAAK,EAEXpI,EAAI,EAAGA,EAAI,GAAIA,GAAG,EACnBX,KAAKc,EAAEX,GAAG4I,GAAGpI,GAAKY,EAAKQ,OACvB8G,GAAO,EAGX,IAAKlI,EAAI,EAAGA,EAAI,GAAIA,GAAG,EACnB,IAAKqH,EAAI,EAAGA,EAAIhI,KAAKc,EAAEX,GAAG4I,GAAGpI,GAAIqH,GAAG,EAAG,CACnC,GAAIa,EAAQ7H,EACR,MAAM,IAAIJ,MAAM,gDAGpBZ,KAAKiJ,EAAE9I,GAAG4I,GAAGpI,GAAGqH,GAAKzG,EAAKQ,OAC1B8G,GAAO,CACX,CAER,CAEA,GAAIA,IAAU7H,EACV,MAAM,IAAIJ,MAAM,iDAGpB,IAAKD,EAAI,EAAGA,EAAI,EAAGA,GAAG,EAClB,IAAKqH,EAAI,EAAGA,EAAI,EAAGA,GAAG,EACI,IAAlBhI,KAAKkJ,GAAGvI,GAAGqH,IACXhI,KAAKmJ,eAAetG,EAAQlC,GAAGqH,GAAIhI,KAAKc,EAAEH,GAAGqH,GAAIhI,KAAKiJ,EAAEtI,GAAGqH,IAKvE,OAAO,CACX,EAWA/H,EAAKgB,SAASe,aAAaJ,UAAUuH,eAAiB,SAASC,EAAKC,EAAGC,GAGnE,IAAIC,EAAoBxB,EAAGpH,EAAGqH,EAAG5H,EAIjC,IAHO,IACP2H,EAAI,EAECpH,EAAI,EAAGA,EAAI,EAAGA,GAAG,EAClB,IAAKqH,EAAI,EAAGA,EAAIqB,EAAE1I,GAAIqH,GAAG,EACrB,IAAK5H,EAAI,EAAGA,EALb,KAK2BO,EAAI,EAAKP,GAAG,EAClCgJ,EAAIrB,GAAKuB,EAAE3I,GAAGqH,GAAOrH,EAAI,GAAM,EAC/BoH,GAAG,EAKf,IAAKpH,EAAI,EAAGoH,EAAI,IAAKpH,GAAG,EAAGoH,GAAG,EAC1BqB,EAAIrB,GAAKpH,EAAIV,EAAKgB,SAASe,aAAakC,IAM5C,IAHAqF,EAAe,EACfxB,EAAI,EAECpH,EAAI,EAAGA,EAAI,GAAIA,GAAG,EACnB,IAAKqH,EAAI,EAAGA,EAAIqB,EAAE1I,GAAIqH,GAAG,EAAG,CACxB,IAAK5H,EAAI,EAAGA,EArBb,KAqB2BO,EAAI,EAAKP,GAAG,EAClCgJ,EAAoB,IAAfG,EAAsBxB,GAAKuB,EAAE3I,GAAGqH,GAAOrH,EAAI,GAAM,EACtDoH,GAAG,EAGP,GAAIA,GAAK,IAAK,CACV,GAAIA,EAAI,IACJ,MAAM,IAAInH,MAAM,kCAGpBmH,EAAI,EACJwB,GAAc,CAClB,CACJ,CAER,EAMoB,qBADI7J,GACYA,EAAOD,UACvCC,EAAOD,QAAUQ,EAAKgB,SAASe,aAGnC,EAAE,CAAC,mBAAmB,EAAE,aAAa,KAAK,EAAE,CAAC,SAAStB,EAAQhB,EAAOD,GAIrE,aAQA,IAAIQ,EAAOA,GAAQ,CAAC,EAMpBA,EAAKgB,SAAWhB,EAAKgB,UAAY,CAAC,EAGlChB,EAAKgB,SAASC,cAAgBjB,EAAKgB,SAASC,qBAAsC,IAAZR,EAA2BA,EAAQ,uBAAyB,MAClIT,EAAKgB,SAASK,WAAarB,EAAKgB,SAASK,kBAAmC,IAAZZ,EAA2BA,EAAQ,oBAAsB,MACzHT,EAAKgB,SAASoB,QAAUpC,EAAKgB,SAASoB,eAAgC,IAAZ3B,EAA2BA,EAAQ,gBAAkB,MAC/GT,EAAKgB,SAASkB,YAAclC,EAAKgB,SAASkB,mBAAoC,IAAZzB,EAA2BA,EAAQ,qBAAuB,MAC5HT,EAAKgB,SAASe,aAAe/B,EAAKgB,SAASe,oBAAqC,IAAZtB,EAA2BA,EAAQ,sBAAwB,MAC/HT,EAAKgB,SAASgB,kBAAoBhC,EAAKgB,SAASgB,yBAA0C,IAAZvB,EAA2BA,EAAQ,2BAA6B,MAC9IT,EAAKgB,SAASuI,cAAgBvJ,EAAKgB,SAASuI,qBAAsC,IAAZ9I,EAA2BA,EAAQ,uBAAyB,MAClIT,EAAKgB,SAASiB,WAAajC,EAAKgB,SAASiB,kBAAmC,IAAZxB,EAA2BA,EAAQ,oBAAsB,MACzHT,EAAKgB,SAASmB,MAAQnC,EAAKgB,SAASmB,aAA8B,IAAZ1B,EAA2BA,EAAQ,cAAgB,MAKrF,qBADIhB,GACYA,EAAOD,UACvCC,EAAOD,QAAUQ,EAGrB,EAAE,CAAC,sBAAsB,EAAE,mBAAmB,EAAE,eAAe,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,aAAa,KAAK,EAAE,CAAC,SAASS,EAAQhB,EAAOD,GAkCpO,aAGA,IAAIQ,EAAOA,GAAQ,CAAC,EACpBA,EAAKgB,SAAWhB,EAAKgB,UAAY,CAAC,EAClChB,EAAKgB,SAASK,WAAarB,EAAKgB,SAASK,kBAAmC,IAAZZ,EAA2BA,EAAQ,oBAAsB,MACzHT,EAAKgB,SAASmB,MAAQnC,EAAKgB,SAASmB,aAA8B,IAAZ1B,EAA2BA,EAAQ,cAAgB,MAIzGT,EAAKgB,SAASgB,kBAAoBhC,EAAKgB,SAASgB,mBAAqB,WACjEjC,KAAKkF,UAAY,GACjBlF,KAAKyJ,GAAK,GACVzJ,KAAK2G,YAAc1G,EAAKgB,SAASmB,MAAMQ,YAAY,EAAG,IAEtD5C,KAAKyJ,GAAG,GAAK,EACbzJ,KAAKyJ,GAAG,GAAK,EACbzJ,KAAKyJ,GAAG,GAAK,EACbzJ,KAAKyJ,GAAG,GAAK,CACjB,EAMAxJ,EAAKgB,SAASgB,kBAAkByH,yBAA2B,SAAS7B,EAAMO,GAGtE,IAAIzH,EAEJ,IAAKA,EAAI,EAAGA,EAAI,EAAGA,GAAG,EAClBkH,EAAKO,EAAM,EAAUzH,KAAO,GAC5BkH,EAAKO,EAAM,GAAUzH,KAAO,GAC5BkH,EAAKO,EAAM,GAAUzH,KAAO,IAC5BkH,EAAKO,EAAM,GAAUzH,KAAO,GAC5BkH,EAAKO,EAAM,GAAUzH,KAAO,GAC5BkH,EAAKO,EAAM,EAAUzH,KAAO,IAC5BkH,EAAKO,EAAM,GAAUzH,KAAO,GAC5BkH,EAAKO,EAAM,GAAUzH,KAAO,IAGhC,IAAKA,EAAI,EAAGA,EAAI,EAAGA,GAAG,EAClBkH,EAAKO,EAAM,EAAK,EAAIzH,KAAQ,GAC5BkH,EAAKO,EAAM,EAAK,EAAIzH,KAAQ,GAC5BkH,EAAKO,EAAM,EAAK,EAAIzH,KAAQ,IAC5BkH,EAAKO,EAAM,EAAK,EAAIzH,KAAQ,GAC5BkH,EAAKO,EAAM,EAAK,EAAIzH,KAAQ,GAC5BkH,EAAKO,EAAM,EAAK,EAAIzH,KAAQ,IAC5BkH,EAAKO,EAAM,EAAK,EAAIzH,KAAQ,GAC5BkH,EAAKO,EAAM,EAAK,EAAIzH,KAAQ,IAGhC,IAAKA,EAAI,EAAGA,EAAI,GAAIA,GAAG,EACnBkH,EAAKlH,KAAO,CAEpB,EAKAV,EAAKgB,SAASgB,kBAAkBL,UAAUkD,KAAO,SAAUvD,EAAM6G,GAG7D,IAAepH,EAAQ4D,EAAMzE,EAAGQ,EAA5BkI,EAAQ,EAKZ,IAHA7H,EAASO,EAAKM,QACdgH,GAAS,EAEFA,EAAQ7H,GAAQ,CAKnB,GAHA6H,GAAO,GACP1I,EAAW,IAFXyE,EAAOrD,EAAKQ,SAIJ,EACJ,MAAM,IAAInB,MAAM,oCAKpB,GAFAZ,KAAKkF,UAAU/E,GAAKyE,GAAQ,EAEF,IAAtB5E,KAAKkF,UAAU/E,GACfH,KAAKkF,UAAU/E,GAAK,MACjB,IAA0B,IAAtBH,KAAKkF,UAAU/E,GAGtB,MAAM,IAAIS,MAAM,6CAFhBZ,KAAKkF,UAAU/E,GAAK,EAGxB,CAIA,GAFAH,KAAKyJ,GAAGtJ,GAAK,EAEa,IAAtBH,KAAKkF,UAAU/E,GAAU,CACzB,IAAKQ,EAAI,EAAGA,EAAI,GAAIA,GAAG,EAAG,CACtB,GAAIkI,EAAQ7H,EACR,MAAM,IAAIJ,MAAM,0CAGpBZ,KAAK2G,YAAYxG,GAAGQ,GAAKY,EAAKQ,OAC9B8G,GAAO,CACX,CAEA5I,EAAKgB,SAASgB,kBAAkByH,yBAAyB1J,KAAK2G,YAAYxG,GAAIiI,EAClF,KAAO,CACH,IAAKzH,EAAI,EAAGA,EAAI,GAAIA,GAAG,EAAG,CACtB,GAAIkI,EAAQ7H,EACR,MAAM,IAAIJ,MAAM,0CAGpBZ,KAAK2G,YAAYxG,GAAGQ,GAAKY,EAAKM,QAC9BgH,GAAS,CACb,CAEA5I,EAAKgB,SAASgB,kBAAkByH,yBAAyB1J,KAAK2G,YAAYxG,GAAIiI,EAClF,CACJ,CAEA,GAAIS,IAAU7H,EACV,MAAM,IAAIJ,MAAM,+CAGpB,OAAO,CACX,EAOoB,qBADIlB,GACYA,EAAOD,UACvCC,EAAOD,QAAUQ,EAAKgB,SAASgB,kBAGnC,EAAE,CAAC,mBAAmB,EAAE,aAAa,KAAK,EAAE,CAAC,SAASvB,EAAQhB,EAAOD,GAkCrE,aAGA,IAAIQ,EAAOA,GAAQ,CAAC,EACpBA,EAAKgB,SAAWhB,EAAKgB,UAAY,CAAC,EAIlChB,EAAKgB,SAASuI,cAAgBvJ,EAAKgB,SAASuI,eAAiB,WACzDxJ,KAAK8G,SAAW,EAChB9G,KAAK6G,SAAW,EAChB7G,KAAK4G,YAAc,CACvB,EAOoB,qBADIlH,GACYA,EAAOD,UACvCC,EAAOD,QAAUQ,EAAKgB,SAASuI,cAGnC,EAAE,CAAC,GAAG,EAAE,CAAC,SAAS9I,EAAQhB,EAAOD,GAkCjC,aAGA,IAAIQ,EAAOA,GAAQ,CAAC,EACpBA,EAAKgB,SAAWhB,EAAKgB,UAAY,CAAC,EAClChB,EAAKgB,SAASK,WAAarB,EAAKgB,SAASK,kBAAmC,IAAZZ,EAA2BA,EAAQ,oBAAsB,MACzHT,EAAKgB,SAASuI,cAAgBvJ,EAAKgB,SAASuI,qBAAsC,IAAZ9I,EAA2BA,EAAQ,uBAAyB,MAIlIT,EAAKgB,SAASiB,WAAajC,EAAKgB,SAASiB,YAAc,WACnDlC,KAAK2J,GAAK,EACV3J,KAAK4J,GAAK,EACV5J,KAAKqD,QAAU,EACfrD,KAAKuD,UAAY,EACjBvD,KAAK6J,YAAc,EACnB7J,KAAKmF,WAAa,EACtB,EAKAlF,EAAKgB,SAASiB,WAAWN,UAAUkD,KAAO,SAASvD,GAG/C,IAAeP,EAAQL,EAAGiE,EAAtBiE,EAAQ,EAQZ,IANA7H,EAASO,EAAKM,QACdgH,GAAS,EAET7I,KAAKqD,QAAU9B,EAAKQ,OACpB8G,GAAO,EAEFlI,EAAI,EAAGA,EAAIX,KAAKqD,QAAS1C,GAAG,EAAG,CAGhC,GAFAX,KAAKmF,WAAWxE,GAAK,IAAIV,EAAKgB,SAASuI,cAEnCX,EAAQ7H,EACR,MAAM,IAAIJ,MAAM,mCAGpBZ,KAAKmF,WAAWxE,GAAGiG,YAAcrF,EAAKQ,OACtC8G,GAAO,EAEPjE,EAAOrD,EAAKQ,OACZ8G,GAAO,EAEP7I,KAAKmF,WAAWxE,GAAGkG,SAAYjC,GAAQ,EACvC5E,KAAKmF,WAAWxE,GAAGmG,SAAmB,GAAPlC,CACnC,CAaA,GAXA5E,KAAKuD,UAAYhC,EAAKQ,OACtB8G,GAAO,EAEP7I,KAAK6J,YAActI,EAAKQ,OACxB8G,GAAO,EAEPjE,EAAOrD,EAAKQ,OACZ/B,KAAK2J,GAAM/E,GAAQ,EACnB5E,KAAK4J,GAAa,GAAPhF,GACXiE,GAAO,KAEO7H,EACV,MAAM,IAAIJ,MAAM,+CAGpB,OAAO,CACX,EAOoB,qBADIlB,GACYA,EAAOD,UACvCC,EAAOD,QAAUQ,EAAKgB,SAASiB,WAGnC,EAAE,CAAC,mBAAmB,EAAE,sBAAsB,IAAI,GAAG,CAAC,SAASxB,EAAQhB,EAAOD,GAkC9E,aAGA,IAAIQ,EAAOA,GAAQ,CAAC,EACpBA,EAAKgB,SAAWhB,EAAKgB,UAAY,CAAC,EAIlChB,EAAKgB,SAASmB,MAAQnC,EAAKgB,SAASmB,OAAS,CAAC,EAM9CnC,EAAKgB,SAASmB,MAAMQ,YAAc,SAAU5B,GACxC,IAAI8I,EAAM,IAAIC,MAAM/I,GAAU,GAC1BL,EAAIK,EAER,GAAIgJ,UAAUhJ,OAAS,EAEnB,IADA,IAAIiJ,EAAOF,MAAMnI,UAAUsI,MAAMnJ,KAAKiJ,UAAW,GAC3CrJ,KAAKmJ,EAAI9I,EAAO,EAAIL,GAAKV,EAAKgB,SAASmB,MAAMQ,YAAYuH,MAAMnK,KAAMiK,GAG/E,OAAOH,CACX,EAIA7J,EAAKgB,SAASmB,MAAMgI,aAAe,WAG/B,IAFA,IAAIrB,EACAsB,EAAW,GACPjK,EAAG,EAAGA,EAAI,IAAKA,IAAI,CACvB2I,EAAI3I,EACJ,IAAI,IAAI2H,EAAG,EAAGA,EAAI,EAAGA,IACjBgB,EAAQ,EAAFA,EAAQ,WAAcA,IAAM,EAAOA,IAAM,EAEnDsB,EAASjK,GAAK2I,CAClB,CACA,OAAOsB,CACX,EAEApK,EAAKgB,SAASmB,MAAMkI,MAAQ,SAASC,GAKjC,IAJA,IAAIC,EAAY,IAAI9I,WAAW6I,EAAS9I,QACpC4I,EAAWpK,EAAKgB,SAASmB,MAAMiI,WAAapK,EAAKgB,SAASmB,MAAMiI,SAAWpK,EAAKgB,SAASmB,MAAMgI,gBAC/FK,GAAM,EAED9J,EAAI,EAAGA,EAAI6J,EAAUxJ,OAAQL,IAClC8J,EAAOA,IAAQ,EAAKJ,EAAgC,KAAtBI,EAAMD,EAAU7J,KAGlD,QAAgB,EAAR8J,KAAgB,CAC5B,EAMoB,qBADI/K,GACYA,EAAOD,UACvCC,EAAOD,QAAUQ,EAAKgB,SAASmB,MAGrC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GA1tDiW,CA0tD7V,EACf,G","sources":["webpack:///../codecs/jpegLossless.js"],"sourcesContent":["(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.jpeg = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o> 4) !== 0x0FFC) || (current === 0xFFC4))) { // SOF 0~15\n switch (current) {\n case 0xFFC4: // DHT\n this.huffTable.read(this.stream, this.HuffTab);\n break;\n case 0xFFCC: // DAC\n throw new Error(\"Program doesn't support arithmetic coding. (format throw new IOException)\");\n case 0xFFDB:\n this.quantTable.read(this.stream, jpeg.lossless.Decoder.TABLE);\n break;\n case 0xFFDD:\n this.restartInterval = this.readNumber();\n break;\n case 0xFFE0:\n case 0xFFE1:\n case 0xFFE2:\n case 0xFFE3:\n case 0xFFE4:\n case 0xFFE5:\n case 0xFFE6:\n case 0xFFE7:\n case 0xFFE8:\n case 0xFFE9:\n case 0xFFEA:\n case 0xFFEB:\n case 0xFFEC:\n case 0xFFED:\n case 0xFFEE:\n case 0xFFEF:\n this.readApp();\n break;\n case 0xFFFE:\n this.readComment();\n break;\n default:\n if ((current >> 8) !== 0xFF) {\n throw new Error(\"ERROR: format throw new IOException! (decode)\");\n }\n }\n\n current = this.stream.get16();\n }\n\n if ((current < 0xFFC0) || (current > 0xFFC7)) {\n throw new Error(\"ERROR: could not handle arithmetic code!\");\n }\n\n this.frame.read(this.stream);\n current = this.stream.get16();\n\n do {\n while (current !== 0x0FFDA) { // SOS\n switch (current) {\n case 0xFFC4: // DHT\n this.huffTable.read(this.stream, this.HuffTab);\n break;\n case 0xFFCC: // DAC\n throw new Error(\"Program doesn't support arithmetic coding. (format throw new IOException)\");\n case 0xFFDB:\n this.quantTable.read(this.stream, jpeg.lossless.Decoder.TABLE);\n break;\n case 0xFFDD:\n this.restartInterval = this.readNumber();\n break;\n case 0xFFE0:\n case 0xFFE1:\n case 0xFFE2:\n case 0xFFE3:\n case 0xFFE4:\n case 0xFFE5:\n case 0xFFE6:\n case 0xFFE7:\n case 0xFFE8:\n case 0xFFE9:\n case 0xFFEA:\n case 0xFFEB:\n case 0xFFEC:\n case 0xFFED:\n case 0xFFEE:\n case 0xFFEF:\n this.readApp();\n break;\n case 0xFFFE:\n this.readComment();\n break;\n default:\n if ((current >> 8) !== 0xFF) {\n throw new Error(\"ERROR: format throw new IOException! (Parser.decode)\");\n }\n }\n\n current = this.stream.get16();\n }\n\n this.precision = this.frame.precision;\n this.components = this.frame.components;\n\n if (!this.numBytes) {\n this.numBytes = parseInt(Math.ceil(this.precision / 8));\n }\n\n if (this.numBytes == 1) {\n this.mask = 0xFF;\n } else {\n this.mask = 0xFFFF;\n }\n\n this.scan.read(this.stream);\n this.numComp = this.scan.numComp;\n this.selection = this.scan.selection;\n\n if (this.numBytes === 1) {\n if (this.numComp === 3) {\n this.getter = this.getValueRGB;\n this.setter = this.setValueRGB;\n this.output = this.outputRGB;\n } else {\n this.getter = this.getValue8;\n this.setter = this.setValue8;\n this.output = this.outputSingle;\n }\n } else {\n this.getter = this.getValue16;\n this.setter = this.setValue16;\n this.output = this.outputSingle;\n }\n\n switch (this.selection) {\n case 2:\n this.selector = this.select2;\n break;\n case 3:\n this.selector = this.select3;\n break;\n case 4:\n this.selector = this.select4;\n break;\n case 5:\n this.selector = this.select5;\n break;\n case 6:\n this.selector = this.select6;\n break;\n case 7:\n this.selector = this.select7;\n break;\n default:\n this.selector = this.select1;\n break;\n }\n\n this.scanComps = this.scan.components;\n this.quantTables = this.quantTable.quantTables;\n\n for (i = 0; i < this.numComp; i+=1) {\n compN = this.scanComps[i].scanCompSel;\n this.qTab[i] = this.quantTables[this.components[compN].quantTableSel];\n this.nBlock[i] = this.components[compN].vSamp * this.components[compN].hSamp;\n this.dcTab[i] = this.HuffTab[this.scanComps[i].dcTabSel][0];\n this.acTab[i] = this.HuffTab[this.scanComps[i].acTabSel][1];\n }\n\n this.xDim = this.frame.dimX;\n this.yDim = this.frame.dimY;\n if (this.numBytes == 1) {\n this.outputData = new Uint8Array(new ArrayBuffer(this.xDim * this.yDim * this.numBytes * this.numComp));\n } else {\n this.outputData = new Uint16Array(new ArrayBuffer(this.xDim * this.yDim * this.numBytes * this.numComp));\n }\n\n scanNum+=1;\n\n while (true) { // Decode one scan\n temp[0] = 0;\n index[0] = 0;\n\n for (i = 0; i < 10; i+=1) {\n pred[i] = (1 << (this.precision - 1));\n }\n\n if (this.restartInterval === 0) {\n current = this.decodeUnit(pred, temp, index);\n\n while ((current === 0) && ((this.xLoc < this.xDim) && (this.yLoc < this.yDim))) {\n this.output(pred);\n current = this.decodeUnit(pred, temp, index);\n }\n\n break; //current=MARKER\n }\n\n for (mcuNum = 0; mcuNum < this.restartInterval; mcuNum+=1) {\n this.restarting = (mcuNum == 0);\n current = this.decodeUnit(pred, temp, index);\n this.output(pred);\n\n if (current !== 0) {\n break;\n }\n }\n\n if (current === 0) {\n if (this.markerIndex !== 0) {\n current = (0xFF00 | this.marker);\n this.markerIndex = 0;\n } else {\n current = this.stream.get16();\n }\n }\n\n if (!((current >= jpeg.lossless.Decoder.RESTART_MARKER_BEGIN) &&\n (current <= jpeg.lossless.Decoder.RESTART_MARKER_END))) {\n break; //current=MARKER\n }\n }\n\n if ((current === 0xFFDC) && (scanNum === 1)) { //DNL\n this.readNumber();\n current = this.stream.get16();\n }\n } while ((current !== 0xFFD9) && ((this.xLoc < this.xDim) && (this.yLoc < this.yDim)) && (scanNum === 0));\n\n return this.outputData;\n };\n\n\n\n jpeg.lossless.Decoder.prototype.decodeUnit = function (prev, temp, index) {\n if (this.numComp == 1) {\n return this.decodeSingle(prev, temp, index);\n } else if (this.numComp == 3) {\n return this.decodeRGB(prev, temp, index);\n } else {\n return -1;\n }\n };\n\n\n\n jpeg.lossless.Decoder.prototype.select1 = function (compOffset) {\n return this.getPreviousX(compOffset);\n };\n\n\n\n jpeg.lossless.Decoder.prototype.select2 = function (compOffset) {\n return this.getPreviousY(compOffset);\n };\n\n\n\n jpeg.lossless.Decoder.prototype.select3 = function (compOffset) {\n return this.getPreviousXY(compOffset);\n };\n\n\n\n jpeg.lossless.Decoder.prototype.select4 = function (compOffset) {\n return (this.getPreviousX(compOffset) + this.getPreviousY(compOffset)) - this.getPreviousXY(compOffset);\n };\n\n\n\n jpeg.lossless.Decoder.prototype.select5 = function (compOffset) {\n return this.getPreviousX(compOffset) + ((this.getPreviousY(compOffset) - this.getPreviousXY(compOffset)) >> 1);\n };\n\n\n\n jpeg.lossless.Decoder.prototype.select6 = function (compOffset) {\n return this.getPreviousY(compOffset) + ((this.getPreviousX(compOffset) - this.getPreviousXY(compOffset)) >> 1);\n };\n\n\n\n jpeg.lossless.Decoder.prototype.select7 = function (compOffset) {\n return ((this.getPreviousX(compOffset) + this.getPreviousY(compOffset)) / 2);\n };\n\n\n\n jpeg.lossless.Decoder.prototype.decodeRGB = function (prev, temp, index) {\n /*jslint bitwise: true */\n\n var value, actab, dctab, qtab, ctrC, i, k, j;\n\n prev[0] = this.selector(0);\n prev[1] = this.selector(1);\n prev[2] = this.selector(2);\n\n for (ctrC = 0; ctrC < this.numComp; ctrC+=1) {\n qtab = this.qTab[ctrC];\n actab = this.acTab[ctrC];\n dctab = this.dcTab[ctrC];\n for (i = 0; i < this.nBlock[ctrC]; i+=1) {\n for (k = 0; k < this.IDCT_Source.length; k+=1) {\n this.IDCT_Source[k] = 0;\n }\n\n value = this.getHuffmanValue(dctab, temp, index);\n\n if (value >= 0xFF00) {\n return value;\n }\n\n prev[ctrC] = this.IDCT_Source[0] = prev[ctrC] + this.getn(index, value, temp, index);\n this.IDCT_Source[0] *= qtab[0];\n\n for (j = 1; j < 64; j+=1) {\n value = this.getHuffmanValue(actab, temp, index);\n\n if (value >= 0xFF00) {\n return value;\n }\n\n j += (value >> 4);\n\n if ((value & 0x0F) === 0) {\n if ((value >> 4) === 0) {\n break;\n }\n } else {\n this.IDCT_Source[jpeg.lossless.Decoder.IDCT_P[j]] = this.getn(index, value & 0x0F, temp, index) * qtab[j];\n }\n }\n }\n }\n\n return 0;\n };\n\n\n\n jpeg.lossless.Decoder.prototype.decodeSingle = function (prev, temp, index) {\n /*jslint bitwise: true */\n\n var value, i, n, nRestart;\n\n if (this.restarting) {\n this.restarting = false;\n prev[0] = (1 << (this.frame.precision - 1));\n } else {\n prev[0] = this.selector();\n }\n\n for (i = 0; i < this.nBlock[0]; i+=1) {\n value = this.getHuffmanValue(this.dcTab[0], temp, index);\n if (value >= 0xFF00) {\n return value;\n }\n\n n = this.getn(prev, value, temp, index);\n nRestart = (n >> 8);\n\n if ((nRestart >= jpeg.lossless.Decoder.RESTART_MARKER_BEGIN) && (nRestart <= jpeg.lossless.Decoder.RESTART_MARKER_END)) {\n return nRestart;\n }\n\n prev[0] += n;\n }\n\n return 0;\n };\n\n\n\n // Huffman table for fast search: (HuffTab) 8-bit Look up table 2-layer search architecture, 1st-layer represent 256 node (8 bits) if codeword-length > 8\n // bits, then the entry of 1st-layer = (# of 2nd-layer table) | MSB and it is stored in the 2nd-layer Size of tables in each layer are 256.\n // HuffTab[*][*][0-256] is always the only 1st-layer table.\n //\n // An entry can be: (1) (# of 2nd-layer table) | MSB , for code length > 8 in 1st-layer (2) (Code length) << 8 | HuffVal\n //\n // HuffmanValue(table HuffTab[x][y] (ex) HuffmanValue(HuffTab[1][0],...)\n // ):\n // return: Huffman Value of table\n // 0xFF?? if it receives a MARKER\n // Parameter: table HuffTab[x][y] (ex) HuffmanValue(HuffTab[1][0],...)\n // temp temp storage for remainded bits\n // index index to bit of temp\n // in FILE pointer\n // Effect:\n // temp store new remainded bits\n // index change to new index\n // in change to new position\n // NOTE:\n // Initial by temp=0; index=0;\n // NOTE: (explain temp and index)\n // temp: is always in the form at calling time or returning time\n // | byte 4 | byte 3 | byte 2 | byte 1 |\n // | 0 | 0 | 00000000 | 00000??? | if not a MARKER\n // ^index=3 (from 0 to 15)\n // 321\n // NOTE (marker and marker_index):\n // If get a MARKER from 'in', marker=the low-byte of the MARKER\n // and marker_index=9\n // If marker_index=9 then index is always > 8, or HuffmanValue()\n // will not be called\n jpeg.lossless.Decoder.prototype.getHuffmanValue = function (table, temp, index) {\n /*jslint bitwise: true */\n\n var code, input, mask;\n mask = 0xFFFF;\n\n if (index[0] < 8) {\n temp[0] <<= 8;\n input = this.stream.get8();\n if (input === 0xFF) {\n this.marker = this.stream.get8();\n if (this.marker !== 0) {\n this.markerIndex = 9;\n }\n }\n temp[0] |= input;\n } else {\n index[0] -= 8;\n }\n\n code = table[temp[0] >> index[0]];\n\n if ((code & jpeg.lossless.Decoder.MSB) !== 0) {\n if (this.markerIndex !== 0) {\n this.markerIndex = 0;\n return 0xFF00 | this.marker;\n }\n\n temp[0] &= (mask >> (16 - index[0]));\n temp[0] <<= 8;\n input = this.stream.get8();\n\n if (input === 0xFF) {\n this.marker = this.stream.get8();\n if (this.marker !== 0) {\n this.markerIndex = 9;\n }\n }\n\n temp[0] |= input;\n code = table[((code & 0xFF) * 256) + (temp[0] >> index[0])];\n index[0] += 8;\n }\n\n index[0] += 8 - (code >> 8);\n\n if (index[0] < 0) {\n throw new Error(\"index=\" + index[0] + \" temp=\" + temp[0] + \" code=\" + code + \" in HuffmanValue()\");\n }\n\n if (index[0] < this.markerIndex) {\n this.markerIndex = 0;\n return 0xFF00 | this.marker;\n }\n\n temp[0] &= (mask >> (16 - index[0]));\n return code & 0xFF;\n };\n\n\n\n jpeg.lossless.Decoder.prototype.getn = function (PRED, n, temp, index) {\n /*jslint bitwise: true */\n\n var result, one, n_one, mask, input;\n one = 1;\n n_one = -1;\n mask = 0xFFFF;\n\n if (n === 0) {\n return 0;\n }\n\n if (n === 16) {\n if (PRED[0] >= 0) {\n return -32768;\n } else {\n return 32768;\n }\n }\n\n index[0] -= n;\n\n if (index[0] >= 0) {\n if ((index[0] < this.markerIndex) && !this.isLastPixel()) { // this was corrupting the last pixel in some cases\n this.markerIndex = 0;\n return (0xFF00 | this.marker) << 8;\n }\n\n result = temp[0] >> index[0];\n temp[0] &= (mask >> (16 - index[0]));\n } else {\n temp[0] <<= 8;\n input = this.stream.get8();\n\n if (input === 0xFF) {\n this.marker = this.stream.get8();\n if (this.marker !== 0) {\n this.markerIndex = 9;\n }\n }\n\n temp[0] |= input;\n index[0] += 8;\n\n if (index[0] < 0) {\n if (this.markerIndex !== 0) {\n this.markerIndex = 0;\n return (0xFF00 | this.marker) << 8;\n }\n\n temp[0] <<= 8;\n input = this.stream.get8();\n\n if (input === 0xFF) {\n this.marker = this.stream.get8();\n if (this.marker !== 0) {\n this.markerIndex = 9;\n }\n }\n\n temp[0] |= input;\n index[0] += 8;\n }\n\n if (index[0] < 0) {\n throw new Error(\"index=\" + index[0] + \" in getn()\");\n }\n\n if (index[0] < this.markerIndex) {\n this.markerIndex = 0;\n return (0xFF00 | this.marker) << 8;\n }\n\n result = temp[0] >> index[0];\n temp[0] &= (mask >> (16 - index[0]));\n }\n\n if (result < (one << (n - 1))) {\n result += (n_one << n) + 1;\n }\n\n return result;\n };\n\n\n\n jpeg.lossless.Decoder.prototype.getPreviousX = function (compOffset) {\n /*jslint bitwise: true */\n\n if (this.xLoc > 0) {\n return this.getter((((this.yLoc * this.xDim) + this.xLoc) - 1), compOffset);\n } else if (this.yLoc > 0) {\n return this.getPreviousY(compOffset);\n } else {\n return (1 << (this.frame.precision - 1));\n }\n };\n\n\n\n jpeg.lossless.Decoder.prototype.getPreviousXY = function (compOffset) {\n /*jslint bitwise: true */\n\n if ((this.xLoc > 0) && (this.yLoc > 0)) {\n return this.getter(((((this.yLoc - 1) * this.xDim) + this.xLoc) - 1), compOffset);\n } else {\n return this.getPreviousY(compOffset);\n }\n };\n\n\n\n jpeg.lossless.Decoder.prototype.getPreviousY = function (compOffset) {\n /*jslint bitwise: true */\n\n if (this.yLoc > 0) {\n return this.getter((((this.yLoc - 1) * this.xDim) + this.xLoc), compOffset);\n } else {\n return this.getPreviousX(compOffset);\n }\n };\n\n\n\n jpeg.lossless.Decoder.prototype.isLastPixel = function () {\n return (this.xLoc === (this.xDim - 1)) && (this.yLoc === (this.yDim - 1));\n };\n\n\n\n jpeg.lossless.Decoder.prototype.outputSingle = function (PRED) {\n if ((this.xLoc < this.xDim) && (this.yLoc < this.yDim)) {\n this.setter((((this.yLoc * this.xDim) + this.xLoc)), this.mask & PRED[0]);\n\n this.xLoc+=1;\n\n if (this.xLoc >= this.xDim) {\n this.yLoc+=1;\n this.xLoc = 0;\n }\n }\n };\n\n\n\n jpeg.lossless.Decoder.prototype.outputRGB = function (PRED) {\n var offset = ((this.yLoc * this.xDim) + this.xLoc);\n\n if ((this.xLoc < this.xDim) && (this.yLoc < this.yDim)) {\n this.setter(offset, PRED[0], 0);\n this.setter(offset, PRED[1], 1);\n this.setter(offset, PRED[2], 2);\n\n this.xLoc+=1;\n\n if (this.xLoc >= this.xDim) {\n this.yLoc+=1;\n this.xLoc = 0;\n }\n }\n };\n\n jpeg.lossless.Decoder.prototype.setValue8 = function (index, val) {\n this.outputData[index] = val;\n };\n\n jpeg.lossless.Decoder.prototype.getValue8 = function (index) {\n return this.outputData[index]; // mask should not be necessary because outputData is either Int8Array or Int16Array\n };\n\n var littleEndian = (function() {\n var buffer = new ArrayBuffer(2);\n new DataView(buffer).setInt16(0, 256, true /* littleEndian */);\n // Int16Array uses the platform's endianness.\n return new Int16Array(buffer)[0] === 256;\n })();\n\n if (littleEndian) {\n // just reading from an array is fine then. Int16Array will use platform endianness.\n jpeg.lossless.Decoder.prototype.setValue16 = jpeg.lossless.Decoder.prototype.setValue8;\n jpeg.lossless.Decoder.prototype.getValue16 = jpeg.lossless.Decoder.prototype.getValue8;\n }\n else {\n // If platform is big-endian, we will need to convert to little-endian\n jpeg.lossless.Decoder.prototype.setValue16 = function (index, val) {\n this.outputData[index] = ((val & 0xFF) << 8) | ((val >> 8) & 0xFF);\n };\n\n jpeg.lossless.Decoder.prototype.getValue16 = function (index) {\n var val = this.outputData[index];\n return ((val & 0xFF) << 8) | ((val >> 8) & 0xFF);\n };\n }\n\n jpeg.lossless.Decoder.prototype.setValueRGB = function (index, val, compOffset) {\n // this.outputData.setUint8(index * 3 + compOffset, val);\n this.outputData[index * 3 + compOffset] = val;\n };\n\n jpeg.lossless.Decoder.prototype.getValueRGB = function (index, compOffset) {\n // return this.outputData.getUint8(index * 3 + compOffset);\n return this.outputData[index * 3 + compOffset];\n };\n\n\n\n jpeg.lossless.Decoder.prototype.readApp = function() {\n var count = 0, length = this.stream.get16();\n count += 2;\n\n while (count < length) {\n this.stream.get8();\n count+=1;\n }\n\n return length;\n };\n\n\n\n jpeg.lossless.Decoder.prototype.readComment = function () {\n var sb = \"\", count = 0, length;\n\n length = this.stream.get16();\n count += 2;\n\n while (count < length) {\n sb += this.stream.get8();\n count+=1;\n }\n\n return sb;\n };\n\n\n\n jpeg.lossless.Decoder.prototype.readNumber = function() {\n var Ld = this.stream.get16();\n\n if (Ld !== 4) {\n throw new Error(\"ERROR: Define number format throw new IOException [Ld!=4]\");\n }\n\n return this.stream.get16();\n };\n\n\n\n /*** Exports ***/\n\n var moduleType = typeof module;\n if ((moduleType !== 'undefined') && module.exports) {\n module.exports = jpeg.lossless.Decoder;\n }\n\n },{\"./data-stream.js\":2,\"./frame-header.js\":4,\"./huffman-table.js\":5,\"./quantization-table.js\":7,\"./scan-header.js\":9,\"./utils.js\":10}],4:[function(require,module,exports){\n /*\n * Copyright (C) 2015 Michael Martinez\n * Changes: Added support for selection values 2-7, fixed minor bugs &\n * warnings, split into multiple class files, and general clean up.\n *\n * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT.\n */\n\n /*\n * Copyright (C) Helmut Dersch\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n /*jslint browser: true, node: true */\n /*global require, module */\n\n \"use strict\";\n\n /*** Imports ***/\n var jpeg = jpeg || {};\n jpeg.lossless = jpeg.lossless || {};\n jpeg.lossless.ComponentSpec = jpeg.lossless.ComponentSpec || ((typeof require !== 'undefined') ? require('./component-spec.js') : null);\n jpeg.lossless.DataStream = jpeg.lossless.DataStream || ((typeof require !== 'undefined') ? require('./data-stream.js') : null);\n\n\n /*** Constructor ***/\n jpeg.lossless.FrameHeader = jpeg.lossless.FrameHeader || function () {\n this.components = []; // Components\n this.dimX = 0; // Number of samples per line\n this.dimY = 0; // Number of lines\n this.numComp = 0; // Number of component in the frame\n this.precision = 0; // Sample Precision (from the original image)\n };\n\n\n\n /*** Prototype Methods ***/\n\n jpeg.lossless.FrameHeader.prototype.read = function (data) {\n /*jslint bitwise: true */\n\n var count = 0, length, i, c, temp;\n\n length = data.get16();\n count += 2;\n\n this.precision = data.get8();\n count+=1;\n\n this.dimY = data.get16();\n count += 2;\n\n this.dimX = data.get16();\n count += 2;\n\n this.numComp = data.get8();\n count+=1;\n for (i = 1; i <= this.numComp; i+=1) {\n if (count > length) {\n throw new Error(\"ERROR: frame format error\");\n }\n\n c = data.get8();\n count+=1;\n\n if (count >= length) {\n throw new Error(\"ERROR: frame format error [c>=Lf]\");\n }\n\n temp = data.get8();\n count+=1;\n\n if (!this.components[c]) {\n this.components[c] = new jpeg.lossless.ComponentSpec();\n }\n\n this.components[c].hSamp = temp >> 4;\n this.components[c].vSamp = temp & 0x0F;\n this.components[c].quantTableSel = data.get8();\n count+=1;\n }\n\n if (count !== length) {\n throw new Error(\"ERROR: frame format error [Lf!=count]\");\n }\n\n return 1;\n };\n\n\n /*** Exports ***/\n\n var moduleType = typeof module;\n if ((moduleType !== 'undefined') && module.exports) {\n module.exports = jpeg.lossless.FrameHeader;\n }\n\n },{\"./component-spec.js\":1,\"./data-stream.js\":2}],5:[function(require,module,exports){\n /*\n * Copyright (C) 2015 Michael Martinez\n * Changes: Added support for selection values 2-7, fixed minor bugs &\n * warnings, split into multiple class files, and general clean up.\n *\n * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT.\n */\n\n /*\n * Copyright (C) Helmut Dersch\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n /*jslint browser: true, node: true */\n /*global require, module */\n\n \"use strict\";\n\n /*** Imports ***/\n var jpeg = jpeg || {};\n jpeg.lossless = jpeg.lossless || {};\n jpeg.lossless.DataStream = jpeg.lossless.DataStream || ((typeof require !== 'undefined') ? require('./data-stream.js') : null);\n jpeg.lossless.Utils = jpeg.lossless.Utils || ((typeof require !== 'undefined') ? require('./utils.js') : null);\n\n\n /*** Constructor ***/\n jpeg.lossless.HuffmanTable = jpeg.lossless.HuffmanTable || function () {\n this.l = jpeg.lossless.Utils.createArray(4, 2, 16);\n this.th = [];\n this.v = jpeg.lossless.Utils.createArray(4, 2, 16, 200);\n this.tc = jpeg.lossless.Utils.createArray(4, 2);\n\n this.tc[0][0] = 0;\n this.tc[1][0] = 0;\n this.tc[2][0] = 0;\n this.tc[3][0] = 0;\n this.tc[0][1] = 0;\n this.tc[1][1] = 0;\n this.tc[2][1] = 0;\n this.tc[3][1] = 0;\n this.th[0] = 0;\n this.th[1] = 0;\n this.th[2] = 0;\n this.th[3] = 0;\n };\n\n\n\n /*** Static Pseudo-constants ***/\n\n jpeg.lossless.HuffmanTable.MSB = 0x80000000;\n\n\n /*** Prototype Methods ***/\n\n jpeg.lossless.HuffmanTable.prototype.read = function(data, HuffTab) {\n /*jslint bitwise: true */\n\n var count = 0, length, temp, t, c, i, j;\n\n length = data.get16();\n count += 2;\n\n while (count < length) {\n temp = data.get8();\n count+=1;\n t = temp & 0x0F;\n if (t > 3) {\n throw new Error(\"ERROR: Huffman table ID > 3\");\n }\n\n c = temp >> 4;\n if (c > 2) {\n throw new Error(\"ERROR: Huffman table [Table class > 2 ]\");\n }\n\n this.th[t] = 1;\n this.tc[t][c] = 1;\n\n for (i = 0; i < 16; i+=1) {\n this.l[t][c][i] = data.get8();\n count+=1;\n }\n\n for (i = 0; i < 16; i+=1) {\n for (j = 0; j < this.l[t][c][i]; j+=1) {\n if (count > length) {\n throw new Error(\"ERROR: Huffman table format error [count>Lh]\");\n }\n\n this.v[t][c][i][j] = data.get8();\n count+=1;\n }\n }\n }\n\n if (count !== length) {\n throw new Error(\"ERROR: Huffman table format error [count!=Lf]\");\n }\n\n for (i = 0; i < 4; i+=1) {\n for (j = 0; j < 2; j+=1) {\n if (this.tc[i][j] !== 0) {\n this.buildHuffTable(HuffTab[i][j], this.l[i][j], this.v[i][j]);\n }\n }\n }\n\n return 1;\n };\n\n\n\n // Build_HuffTab()\n // Parameter: t table ID\n // c table class ( 0 for DC, 1 for AC )\n // L[i] # of codewords which length is i\n // V[i][j] Huffman Value (length=i)\n // Effect:\n // build up HuffTab[t][c] using L and V.\n jpeg.lossless.HuffmanTable.prototype.buildHuffTable = function(tab, L, V) {\n /*jslint bitwise: true */\n\n var currentTable, temp, k, i, j, n;\n temp = 256;\n k = 0;\n\n for (i = 0; i < 8; i+=1) { // i+1 is Code length\n for (j = 0; j < L[i]; j+=1) {\n for (n = 0; n < (temp >> (i + 1)); n+=1) {\n tab[k] = V[i][j] | ((i + 1) << 8);\n k+=1;\n }\n }\n }\n\n for (i = 1; k < 256; i+=1, k+=1) {\n tab[k] = i | jpeg.lossless.HuffmanTable.MSB;\n }\n\n currentTable = 1;\n k = 0;\n\n for (i = 8; i < 16; i+=1) { // i+1 is Code length\n for (j = 0; j < L[i]; j+=1) {\n for (n = 0; n < (temp >> (i - 7)); n+=1) {\n tab[(currentTable * 256) + k] = V[i][j] | ((i + 1) << 8);\n k+=1;\n }\n\n if (k >= 256) {\n if (k > 256) {\n throw new Error(\"ERROR: Huffman table error(1)!\");\n }\n\n k = 0;\n currentTable+=1;\n }\n }\n }\n };\n\n\n /*** Exports ***/\n\n var moduleType = typeof module;\n if ((moduleType !== 'undefined') && module.exports) {\n module.exports = jpeg.lossless.HuffmanTable;\n }\n\n },{\"./data-stream.js\":2,\"./utils.js\":10}],6:[function(require,module,exports){\n /*jslint browser: true, node: true */\n /*global require, module */\n\n \"use strict\";\n\n /*** Imports ****/\n\n /**\n * jpeg\n * @type {*|{}}\n */\n var jpeg = jpeg || {};\n\n /**\n * jpeg.lossless\n * @type {*|{}}\n */\n jpeg.lossless = jpeg.lossless || {};\n\n\n jpeg.lossless.ComponentSpec = jpeg.lossless.ComponentSpec || ((typeof require !== 'undefined') ? require('./component-spec.js') : null);\n jpeg.lossless.DataStream = jpeg.lossless.DataStream || ((typeof require !== 'undefined') ? require('./data-stream.js') : null);\n jpeg.lossless.Decoder = jpeg.lossless.Decoder || ((typeof require !== 'undefined') ? require('./decoder.js') : null);\n jpeg.lossless.FrameHeader = jpeg.lossless.FrameHeader || ((typeof require !== 'undefined') ? require('./frame-header.js') : null);\n jpeg.lossless.HuffmanTable = jpeg.lossless.HuffmanTable || ((typeof require !== 'undefined') ? require('./huffman-table.js') : null);\n jpeg.lossless.QuantizationTable = jpeg.lossless.QuantizationTable || ((typeof require !== 'undefined') ? require('./quantization-table.js') : null);\n jpeg.lossless.ScanComponent = jpeg.lossless.ScanComponent || ((typeof require !== 'undefined') ? require('./scan-component.js') : null);\n jpeg.lossless.ScanHeader = jpeg.lossless.ScanHeader || ((typeof require !== 'undefined') ? require('./scan-header.js') : null);\n jpeg.lossless.Utils = jpeg.lossless.Utils || ((typeof require !== 'undefined') ? require('./utils.js') : null);\n\n\n /*** Exports ***/\n var moduleType = typeof module;\n if ((moduleType !== 'undefined') && module.exports) {\n module.exports = jpeg;\n }\n\n },{\"./component-spec.js\":1,\"./data-stream.js\":2,\"./decoder.js\":3,\"./frame-header.js\":4,\"./huffman-table.js\":5,\"./quantization-table.js\":7,\"./scan-component.js\":8,\"./scan-header.js\":9,\"./utils.js\":10}],7:[function(require,module,exports){\n /*\n * Copyright (C) 2015 Michael Martinez\n * Changes: Added support for selection values 2-7, fixed minor bugs &\n * warnings, split into multiple class files, and general clean up.\n *\n * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT.\n */\n\n /*\n * Copyright (C) Helmut Dersch\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n /*jslint browser: true, node: true */\n /*global require, module */\n\n \"use strict\";\n\n /*** Imports ***/\n var jpeg = jpeg || {};\n jpeg.lossless = jpeg.lossless || {};\n jpeg.lossless.DataStream = jpeg.lossless.DataStream || ((typeof require !== 'undefined') ? require('./data-stream.js') : null);\n jpeg.lossless.Utils = jpeg.lossless.Utils || ((typeof require !== 'undefined') ? require('./utils.js') : null);\n\n\n /*** Constructor ***/\n jpeg.lossless.QuantizationTable = jpeg.lossless.QuantizationTable || function () {\n this.precision = []; // Quantization precision 8 or 16\n this.tq = []; // 1: this table is presented\n this.quantTables = jpeg.lossless.Utils.createArray(4, 64); // Tables\n\n this.tq[0] = 0;\n this.tq[1] = 0;\n this.tq[2] = 0;\n this.tq[3] = 0;\n };\n\n\n\n /*** Static Methods ***/\n\n jpeg.lossless.QuantizationTable.enhanceQuantizationTable = function(qtab, table) {\n /*jslint bitwise: true */\n\n var i;\n\n for (i = 0; i < 8; i+=1) {\n qtab[table[(0 * 8) + i]] *= 90;\n qtab[table[(4 * 8) + i]] *= 90;\n qtab[table[(2 * 8) + i]] *= 118;\n qtab[table[(6 * 8) + i]] *= 49;\n qtab[table[(5 * 8) + i]] *= 71;\n qtab[table[(1 * 8) + i]] *= 126;\n qtab[table[(7 * 8) + i]] *= 25;\n qtab[table[(3 * 8) + i]] *= 106;\n }\n\n for (i = 0; i < 8; i+=1) {\n qtab[table[0 + (8 * i)]] *= 90;\n qtab[table[4 + (8 * i)]] *= 90;\n qtab[table[2 + (8 * i)]] *= 118;\n qtab[table[6 + (8 * i)]] *= 49;\n qtab[table[5 + (8 * i)]] *= 71;\n qtab[table[1 + (8 * i)]] *= 126;\n qtab[table[7 + (8 * i)]] *= 25;\n qtab[table[3 + (8 * i)]] *= 106;\n }\n\n for (i = 0; i < 64; i+=1) {\n qtab[i] >>= 6;\n }\n };\n\n\n /*** Prototype Methods ***/\n\n jpeg.lossless.QuantizationTable.prototype.read = function (data, table) {\n /*jslint bitwise: true */\n\n var count = 0, length, temp, t, i;\n\n length = data.get16();\n count += 2;\n\n while (count < length) {\n temp = data.get8();\n count+=1;\n t = temp & 0x0F;\n\n if (t > 3) {\n throw new Error(\"ERROR: Quantization table ID > 3\");\n }\n\n this.precision[t] = temp >> 4;\n\n if (this.precision[t] === 0) {\n this.precision[t] = 8;\n } else if (this.precision[t] === 1) {\n this.precision[t] = 16;\n } else {\n throw new Error(\"ERROR: Quantization table precision error\");\n }\n\n this.tq[t] = 1;\n\n if (this.precision[t] === 8) {\n for (i = 0; i < 64; i+=1) {\n if (count > length) {\n throw new Error(\"ERROR: Quantization table format error\");\n }\n\n this.quantTables[t][i] = data.get8();\n count+=1;\n }\n\n jpeg.lossless.QuantizationTable.enhanceQuantizationTable(this.quantTables[t], table);\n } else {\n for (i = 0; i < 64; i+=1) {\n if (count > length) {\n throw new Error(\"ERROR: Quantization table format error\");\n }\n\n this.quantTables[t][i] = data.get16();\n count += 2;\n }\n\n jpeg.lossless.QuantizationTable.enhanceQuantizationTable(this.quantTables[t], table);\n }\n }\n\n if (count !== length) {\n throw new Error(\"ERROR: Quantization table error [count!=Lq]\");\n }\n\n return 1;\n };\n\n\n\n /*** Exports ***/\n\n var moduleType = typeof module;\n if ((moduleType !== 'undefined') && module.exports) {\n module.exports = jpeg.lossless.QuantizationTable;\n }\n\n },{\"./data-stream.js\":2,\"./utils.js\":10}],8:[function(require,module,exports){\n /*\n * Copyright (C) 2015 Michael Martinez\n * Changes: Added support for selection values 2-7, fixed minor bugs &\n * warnings, split into multiple class files, and general clean up.\n *\n * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT.\n */\n\n /*\n * Copyright (C) Helmut Dersch\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n /*jslint browser: true, node: true */\n /*global require, module */\n\n \"use strict\";\n\n /*** Imports ***/\n var jpeg = jpeg || {};\n jpeg.lossless = jpeg.lossless || {};\n\n\n /*** Constructor ***/\n jpeg.lossless.ScanComponent = jpeg.lossless.ScanComponent || function () {\n this.acTabSel = 0; // AC table selector\n this.dcTabSel = 0; // DC table selector\n this.scanCompSel = 0; // Scan component selector\n };\n\n\n\n /*** Exports ***/\n\n var moduleType = typeof module;\n if ((moduleType !== 'undefined') && module.exports) {\n module.exports = jpeg.lossless.ScanComponent;\n }\n\n },{}],9:[function(require,module,exports){\n /*\n * Copyright (C) 2015 Michael Martinez\n * Changes: Added support for selection values 2-7, fixed minor bugs &\n * warnings, split into multiple class files, and general clean up.\n *\n * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT.\n */\n\n /*\n * Copyright (C) Helmut Dersch\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n /*jslint browser: true, node: true */\n /*global require, module */\n\n \"use strict\";\n\n /*** Imports ***/\n var jpeg = jpeg || {};\n jpeg.lossless = jpeg.lossless || {};\n jpeg.lossless.DataStream = jpeg.lossless.DataStream || ((typeof require !== 'undefined') ? require('./data-stream.js') : null);\n jpeg.lossless.ScanComponent = jpeg.lossless.ScanComponent || ((typeof require !== 'undefined') ? require('./scan-component.js') : null);\n\n\n /*** Constructor ***/\n jpeg.lossless.ScanHeader = jpeg.lossless.ScanHeader || function () {\n this.ah = 0;\n this.al = 0;\n this.numComp = 0; // Number of components in the scan\n this.selection = 0; // Start of spectral or predictor selection\n this.spectralEnd = 0; // End of spectral selection\n this.components = [];\n };\n\n\n /*** Prototype Methods ***/\n\n jpeg.lossless.ScanHeader.prototype.read = function(data) {\n /*jslint bitwise: true */\n\n var count = 0, length, i, temp;\n\n length = data.get16();\n count += 2;\n\n this.numComp = data.get8();\n count+=1;\n\n for (i = 0; i < this.numComp; i+=1) {\n this.components[i] = new jpeg.lossless.ScanComponent();\n\n if (count > length) {\n throw new Error(\"ERROR: scan header format error\");\n }\n\n this.components[i].scanCompSel = data.get8();\n count+=1;\n\n temp = data.get8();\n count+=1;\n\n this.components[i].dcTabSel = (temp >> 4);\n this.components[i].acTabSel = (temp & 0x0F);\n }\n\n this.selection = data.get8();\n count+=1;\n\n this.spectralEnd = data.get8();\n count+=1;\n\n temp = data.get8();\n this.ah = (temp >> 4);\n this.al = (temp & 0x0F);\n count+=1;\n\n if (count !== length) {\n throw new Error(\"ERROR: scan header format error [count!=Ns]\");\n }\n\n return 1;\n };\n\n\n\n /*** Exports ***/\n\n var moduleType = typeof module;\n if ((moduleType !== 'undefined') && module.exports) {\n module.exports = jpeg.lossless.ScanHeader;\n }\n\n },{\"./data-stream.js\":2,\"./scan-component.js\":8}],10:[function(require,module,exports){\n /*\n * Copyright (C) 2015 Michael Martinez\n * Changes: Added support for selection values 2-7, fixed minor bugs &\n * warnings, split into multiple class files, and general clean up.\n *\n * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT.\n */\n\n /*\n * Copyright (C) Helmut Dersch\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n /*jslint browser: true, node: true */\n /*global require, module */\n\n \"use strict\";\n\n /*** Imports ***/\n var jpeg = jpeg || {};\n jpeg.lossless = jpeg.lossless || {};\n\n\n /*** Constructor ***/\n jpeg.lossless.Utils = jpeg.lossless.Utils || {};\n\n\n /*** Static methods ***/\n\n // http://stackoverflow.com/questions/966225/how-can-i-create-a-two-dimensional-array-in-javascript\n jpeg.lossless.Utils.createArray = function (length) {\n var arr = new Array(length || 0),\n i = length;\n\n if (arguments.length > 1) {\n var args = Array.prototype.slice.call(arguments, 1);\n while(i--) arr[length-1 - i] = jpeg.lossless.Utils.createArray.apply(this, args);\n }\n\n return arr;\n };\n\n\n // http://stackoverflow.com/questions/18638900/javascript-crc32\n jpeg.lossless.Utils.makeCRCTable = function(){\n var c;\n var crcTable = [];\n for(var n =0; n < 256; n++){\n c = n;\n for(var k =0; k < 8; k++){\n c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n crcTable[n] = c;\n }\n return crcTable;\n };\n\n jpeg.lossless.Utils.crc32 = function(dataView) {\n var uint8view = new Uint8Array(dataView.buffer);\n var crcTable = jpeg.lossless.Utils.crcTable || (jpeg.lossless.Utils.crcTable = jpeg.lossless.Utils.makeCRCTable());\n var crc = 0 ^ (-1);\n\n for (var i = 0; i < uint8view.length; i++ ) {\n crc = (crc >>> 8) ^ crcTable[(crc ^ uint8view[i]) & 0xFF];\n }\n\n return (crc ^ (-1)) >>> 0;\n };\n\n\n /*** Exports ***/\n\n var moduleType = typeof module;\n if ((moduleType !== 'undefined') && module.exports) {\n module.exports = jpeg.lossless.Utils;\n }\n\n},{}]},{},[6])(6)\n});\n"],"names":["f","exports","module","define","amd","window","global","self","this","jpeg","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length","lossless","ComponentSpec","hSamp","quantTableSel","vSamp","DataStream","data","offset","buffer","Uint8Array","index","prototype","get16","value","get8","HuffmanTable","QuantizationTable","ScanHeader","FrameHeader","Utils","Decoder","numBytes","frame","huffTable","quantTable","scan","DU","createArray","HuffTab","IDCT_Source","nBlock","acTab","dcTab","qTab","marker","markerIndex","numComp","restartInterval","selection","xDim","yDim","xLoc","yLoc","outputData","restarting","mask","IDCT_P","TABLE","MAX_HUFFMAN_SUBTREE","MSB","RESTART_MARKER_BEGIN","RESTART_MARKER_END","decompress","decode","current","compN","mcuNum","scanNum","pred","temp","stream","read","readNumber","readApp","readComment","precision","components","parseInt","Math","ceil","getter","getValueRGB","setter","setValueRGB","output","outputRGB","getValue8","setValue8","outputSingle","getValue16","setValue16","selector","select2","select3","select4","select5","select6","select7","select1","scanComps","quantTables","scanCompSel","dcTabSel","acTabSel","dimX","dimY","ArrayBuffer","Uint16Array","decodeUnit","prev","decodeSingle","decodeRGB","compOffset","getPreviousX","getPreviousY","getPreviousXY","actab","dctab","qtab","ctrC","k","j","getHuffmanValue","getn","nRestart","table","input","PRED","result","isLastPixel","val","DataView","setInt16","Int16Array","count","sb","c","th","v","tc","buildHuffTable","tab","L","V","currentTable","ScanComponent","tq","enhanceQuantizationTable","ah","al","spectralEnd","arr","Array","arguments","args","slice","apply","makeCRCTable","crcTable","crc32","dataView","uint8view","crc"],"sourceRoot":""} \ No newline at end of file diff --git a/platform/viewer-static/dist/62ab5d58a2bea7b5a1dc.wasm b/platform/viewer-static/dist/62ab5d58a2bea7b5a1dc.wasm new file mode 100644 index 00000000000..aab6671410f Binary files /dev/null and b/platform/viewer-static/dist/62ab5d58a2bea7b5a1dc.wasm differ diff --git a/platform/viewer-static/dist/65916ef3def695744bda.wasm b/platform/viewer-static/dist/65916ef3def695744bda.wasm new file mode 100644 index 00000000000..1bb417256fd Binary files /dev/null and b/platform/viewer-static/dist/65916ef3def695744bda.wasm differ diff --git a/platform/viewer-static/dist/75788f12450d4c5ed494.wasm b/platform/viewer-static/dist/75788f12450d4c5ed494.wasm new file mode 100644 index 00000000000..827651b36cb Binary files /dev/null and b/platform/viewer-static/dist/75788f12450d4c5ed494.wasm differ diff --git a/platform/viewer-static/dist/75a0c2dfe07b824c7d21.wasm b/platform/viewer-static/dist/75a0c2dfe07b824c7d21.wasm new file mode 100644 index 00000000000..f8b19d1ac3b Binary files /dev/null and b/platform/viewer-static/dist/75a0c2dfe07b824c7d21.wasm differ diff --git a/platform/viewer-static/dist/799.bundle.2ef6f5cf10afff0b9cec.js b/platform/viewer-static/dist/799.bundle.2ef6f5cf10afff0b9cec.js new file mode 100644 index 00000000000..ebfaecfd7e8 --- /dev/null +++ b/platform/viewer-static/dist/799.bundle.2ef6f5cf10afff0b9cec.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[799],{91799:function(e,t,n){n.r(t);var r=n(32735),a=n(60216),i=n.n(a),o=n(72928),l=n(84334),s=n(67013),c=n(38942),u=n(41841),m=n(72682),f=n(74099),d=n(56789);function p(){return p=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n {\n if (!cines || !cines[viewportIndex] || !element) {\n return;\n }\n\n const cine = cines[viewportIndex];\n const isPlaying = cine.isPlaying || false;\n const frameRate = cine.frameRate || 24;\n\n const validFrameRate = Math.max(frameRate, 1);\n\n if (isPlaying) {\n cineService.playClip(element, {\n framesPerSecond: validFrameRate,\n });\n } else {\n cineService.stopClip(element);\n }\n };\n\n useEffect(() => {\n if (isTracked) {\n annotation.config.style.setViewportToolStyles(viewportId, {\n global: {\n lineDash: '',\n },\n });\n\n CornerstoneViewportService.getRenderingEngine().renderViewport(\n viewportId\n );\n\n return;\n }\n\n annotation.config.style.setViewportToolStyles(`viewport-${viewportIndex}`, {\n global: {\n lineDash: '4,4',\n },\n });\n\n CornerstoneViewportService.getRenderingEngine().renderViewport(viewportId);\n\n return () => {\n annotation.config.style.setViewportToolStyles(viewportId, {});\n };\n }, [isTracked]);\n\n // unmount cleanup\n useEffect(() => {\n eventTarget.addEventListener(\n Enums.Events.STACK_VIEWPORT_NEW_STACK,\n cineHandler\n );\n\n return () => {\n cineService.setCine({ id: viewportIndex, isPlaying: false });\n eventTarget.removeEventListener(\n Enums.Events.STACK_VIEWPORT_NEW_STACK,\n cineHandler\n );\n };\n }, [element]);\n\n useEffect(() => {\n if (!cines || !cines[viewportIndex] || !element) {\n return;\n }\n\n cineHandler();\n\n return () => {\n if (element && cines?.[viewportIndex]?.isPlaying) {\n cineService.stopClip(element);\n }\n };\n }, [cines, viewportIndex, cineService, element, cineHandler]);\n\n if (trackedSeries.includes(SeriesInstanceUID) !== isTracked) {\n setIsTracked(!isTracked);\n }\n\n /**\n * OnElementEnabled callback which is called after the cornerstoneExtension\n * has enabled the element. Note: we delegate all the image rendering to\n * cornerstoneExtension, so we don't need to do anything here regarding\n * the image rendering, element enabling etc.\n */\n const onElementEnabled = evt => {\n setElement(evt.detail.element);\n };\n\n function switchMeasurement(direction) {\n const newTrackedMeasurementUID = _getNextMeasurementUID(\n direction,\n servicesManager,\n trackedMeasurementUID,\n trackedMeasurements\n );\n\n if (!newTrackedMeasurementUID) {\n return;\n }\n\n setTrackedMeasurementUID(newTrackedMeasurementUID);\n\n MeasurementService.jumpToMeasurement(\n viewportIndex,\n newTrackedMeasurementUID\n );\n }\n\n const getCornerstoneViewport = () => {\n const { component: Component } = extensionManager.getModuleEntry(\n '@ohif/extension-cornerstone.viewportModule.cornerstone'\n );\n\n return ;\n };\n\n const cine = cines[viewportIndex];\n const isPlaying = (cine && cine.isPlaying) || false;\n\n return (\n <>\n {\n evt.stopPropagation();\n evt.preventDefault();\n }}\n useAltStyling={isTracked}\n onArrowsClick={direction => switchMeasurement(direction)}\n getStatusComponent={() => _getStatusComponent(isTracked)}\n studyData={{\n label: viewportLabel,\n studyDate: formatDate(SeriesDate), // TODO: This is series date. Is that ok?\n currentSeries: SeriesNumber, // TODO - switch entire currentSeries to be UID based or actual position based\n seriesDescription: SeriesDescription,\n patientInformation: {\n patientName: PatientName\n ? OHIF.utils.formatPN(PatientName.Alphabetic)\n : '',\n patientSex: PatientSex || '',\n patientAge: PatientAge || '',\n MRN: PatientID || '',\n thickness: SliceThickness\n ? `${parseFloat(SliceThickness).toFixed(2)}mm`\n : '',\n spacing:\n SpacingBetweenSlices !== undefined\n ? `${parseFloat(SpacingBetweenSlices).toFixed(2)}mm`\n : '',\n scanner: ManufacturerModelName || '',\n },\n }}\n showNavArrows={!isCineEnabled}\n showCine={isCineEnabled}\n cineProps={{\n isPlaying,\n onClose: () => commandsManager.runCommand('toggleCine'),\n onPlayPauseChange: isPlaying =>\n cineService.setCine({\n id: activeViewportIndex,\n isPlaying,\n }),\n onFrameRateChange: frameRate =>\n cineService.setCine({\n id: activeViewportIndex,\n frameRate,\n }),\n }}\n />\n {/* TODO: Viewport interface to accept stack or layers of content like this? */}\n
\n {getCornerstoneViewport()}\n
\n {viewportDialogState.viewportIndex === viewportIndex && (\n \n )}\n
\n
\n \n );\n}\n\nTrackedCornerstoneViewport.propTypes = {\n displaySets: PropTypes.arrayOf(PropTypes.object.isRequired).isRequired,\n viewportIndex: PropTypes.number.isRequired,\n dataSource: PropTypes.object,\n children: PropTypes.node,\n customProps: PropTypes.object,\n};\n\nTrackedCornerstoneViewport.defaultProps = {\n customProps: {},\n};\n\nfunction _getNextMeasurementUID(\n direction,\n servicesManager,\n trackedMeasurementId,\n trackedMeasurements\n) {\n const { MeasurementService } = servicesManager.services;\n const measurements = MeasurementService.getMeasurements();\n\n const { trackedSeries } = trackedMeasurements.context;\n\n // Get the potentially trackable measurements for this series,\n // The measurements to jump between are the same\n // regardless if this series is tracked or not.\n\n const filteredMeasurements = measurements.filter(m =>\n trackedSeries.includes(m.referenceSeriesUID)\n );\n\n if (!filteredMeasurements.length) {\n // No measurements on this series.\n return;\n }\n\n const measurementCount = filteredMeasurements.length;\n\n const uids = filteredMeasurements.map(fm => fm.uid);\n let measurementIndex = uids.findIndex(uid => uid === trackedMeasurementId);\n\n if (measurementIndex === -1) {\n // Not tracking a measurement, or previous measurement now deleted, revert to 0.\n measurementIndex = 0;\n } else {\n if (direction === 'left') {\n measurementIndex--;\n\n if (measurementIndex < 0) {\n measurementIndex = measurementCount - 1;\n }\n } else if (direction === 'right') {\n measurementIndex++;\n\n if (measurementIndex === measurementCount) {\n measurementIndex = 0;\n }\n }\n }\n\n const newTrackedMeasurementId = uids[measurementIndex];\n\n return newTrackedMeasurementId;\n}\n\nfunction _getStatusComponent(isTracked) {\n const trackedIcon = isTracked ? 'tracked' : 'dotted-circle';\n\n return (\n
\n \n
\n \n
\n
\n \n {isTracked ? (\n <>\n Series is\n tracked and\n can be viewed
in the measurement panel\n \n ) : (\n <>\n Measurements for\n untracked \n series
will not be shown in the
measurements\n panel\n \n )}\n
\n
\n
\n }\n >\n \n \n
\n );\n}\n\nexport default TrackedCornerstoneViewport;\n"],"names":["formatDate","utils","TrackedCornerstoneViewport","props","children","displaySets","viewportIndex","viewportLabel","servicesManager","extensionManager","commandsManager","useTranslation","t","services","MeasurementService","CornerstoneViewportService","displaySet","trackedMeasurements","useTrackedMeasurements","activeViewportIndex","useViewportGrid","useCine","isCineEnabled","cines","cineService","viewportDialogState","useViewportDialog","useState","isTracked","setIsTracked","trackedMeasurementUID","setTrackedMeasurementUID","element","setElement","trackedSeries","context","viewportId","getViewportId","SeriesDate","Modality","SeriesDescription","SeriesInstanceUID","SeriesNumber","images","PatientID","PatientName","PatientSex","PatientAge","SliceThickness","SpacingBetweenSlices","ManufacturerModelName","cineHandler","cine","isPlaying","frameRate","validFrameRate","Math","max","playClip","framesPerSecond","stopClip","useEffect","annotation","global","lineDash","getRenderingEngine","renderViewport","eventTarget","Enums","setCine","id","includes","onElementEnabled","evt","detail","Component","onDoubleClick","stopPropagation","preventDefault","useAltStyling","onArrowsClick","direction","newTrackedMeasurementUID","trackedMeasurementId","measurements","getMeasurements","filteredMeasurements","filter","m","referenceSeriesUID","length","measurementCount","uids","map","fm","uid","measurementIndex","findIndex","_getNextMeasurementUID","jumpToMeasurement","switchMeasurement","getStatusComponent","trackedIcon","className","position","content","name","_getStatusComponent","studyData","label","studyDate","currentSeries","seriesDescription","patientInformation","patientName","OHIF","Alphabetic","patientSex","patientAge","MRN","thickness","parseFloat","toFixed","spacing","undefined","scanner","showNavArrows","showCine","cineProps","onClose","runCommand","onPlayPauseChange","onFrameRateChange","getModuleEntry","component","message","type","actions","onSubmit","onOutsideClick","propTypes","PropTypes","isRequired","dataSource","customProps","defaultProps"],"sourceRoot":""} \ No newline at end of file diff --git a/platform/viewer-static/dist/888.min.worker.js b/platform/viewer-static/dist/888.min.worker.js new file mode 100644 index 00000000000..4cfcce95536 --- /dev/null +++ b/platform/viewer-static/dist/888.min.worker.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[888],{1888:function(e,n){var r={Unkown:0,Grayscale:1,AdobeRGB:2,RGB:3,CYMK:4},o=function(){"use strict";var e=new Int32Array([0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63]),n=4017,o=799,a=3406,t=2276,s=1567,i=3784,c=5793,l=2896;function f(){}function u(e,n){for(var r,o,a=0,t=[],s=16;s>0&&!e[s-1];)s--;t.push({children:[],index:0});var i,c=t[0];for(r=0;r0;)c=t.pop();for(c.index++,t.push(c);t.length<=r;)t.push(i={children:[],index:0}),c.children[c.index]=i.children,c=i;a++}r+10)return m--,v>>m&1;if(255==(v=n[r++])){var e=n[r++];if(e)throw"unexpected marker: "+(v<<8|e).toString(16)}return m=7,v>>>7}function d(e){for(var n,r=e;null!==(n=p());){if("number"==typeof(r=r[n]))return r;if("object"!=typeof r)throw"invalid huffman sequence"}return null}function k(e){for(var n=0;e>0;){var r=p();if(null===r)return;n=n<<1|r,e--}return n}function w(e){var n=k(e);return n>=1<0)P--;else for(var o=s,a=i;o<=a;){var t=d(n.huffmanTableAC),c=15&t,f=t>>4;if(0!==c){var u=e[o+=f];n.blockData[r+u]=w(c)*(1<>4,0===u)t<15?(P=k(t)+(1<>4;if(0!==i){var l=e[t+=c];n.blockData[r+l]=w(i),t++}else{if(c<15)break;t+=16}}};var G,M,z,H,R=0;for(M=1==q?a[0].blocksPerLine*a[0].blocksPerColumn:f*o.mcusPerColumn,t||(t=M);R=65488&&G<=65495))break;r+=2}return r-b}function v(e,r,f){var u,h,b,v,m,p,d,k,w,C,P=e.quantizationTable;for(C=0;C<64;C++)f[C]=e.blockData[r+C]*P[C];for(C=0;C<8;++C){var g=8*C;0!==f[1+g]||0!==f[2+g]||0!==f[3+g]||0!==f[4+g]||0!==f[5+g]||0!==f[6+g]||0!==f[7+g]?(u=c*f[0+g]+128>>8,h=c*f[4+g]+128>>8,b=f[2+g],v=f[6+g],m=l*(f[1+g]-f[7+g])+128>>8,k=l*(f[1+g]+f[7+g])+128>>8,p=f[3+g]<<4,d=f[5+g]<<4,w=u-h+1>>1,u=u+h+1>>1,h=w,w=b*i+v*s+128>>8,b=b*s-v*i+128>>8,v=w,w=m-d+1>>1,m=m+d+1>>1,d=w,w=k+p+1>>1,p=k-p+1>>1,k=w,w=u-v+1>>1,u=u+v+1>>1,v=w,w=h-b+1>>1,h=h+b+1>>1,b=w,w=m*t+k*a+2048>>12,m=m*a-k*t+2048>>12,k=w,w=p*o+d*n+2048>>12,p=p*n-d*o+2048>>12,d=w,f[0+g]=u+k,f[7+g]=u-k,f[1+g]=h+d,f[6+g]=h-d,f[2+g]=b+p,f[5+g]=b-p,f[3+g]=v+m,f[4+g]=v-m):(w=c*f[0+g]+512>>10,f[0+g]=w,f[1+g]=w,f[2+g]=w,f[3+g]=w,f[4+g]=w,f[5+g]=w,f[6+g]=w,f[7+g]=w)}for(C=0;C<8;++C){var y=C;0!==f[8+y]||0!==f[16+y]||0!==f[24+y]||0!==f[32+y]||0!==f[40+y]||0!==f[48+y]||0!==f[56+y]?(u=c*f[0+y]+2048>>12,h=c*f[32+y]+2048>>12,b=f[16+y],v=f[48+y],m=l*(f[8+y]-f[56+y])+2048>>12,k=l*(f[8+y]+f[56+y])+2048>>12,p=f[24+y],d=f[40+y],w=u-h+1>>1,u=u+h+1>>1,h=w,w=b*i+v*s+2048>>12,b=b*s-v*i+2048>>12,v=w,w=m-d+1>>1,m=m+d+1>>1,d=w,w=k+p+1>>1,p=k-p+1>>1,k=w,w=u-v+1>>1,u=u+v+1>>1,v=w,w=h-b+1>>1,h=h+b+1>>1,b=w,w=m*t+k*a+2048>>12,m=m*a-k*t+2048>>12,k=w,w=p*o+d*n+2048>>12,p=p*n-d*o+2048>>12,d=w,f[0+y]=u+k,f[56+y]=u-k,f[8+y]=h+d,f[48+y]=h-d,f[16+y]=b+p,f[40+y]=b-p,f[24+y]=v+m,f[32+y]=v-m):(w=c*f[C+0]+8192>>14,f[0+y]=w,f[8+y]=w,f[16+y]=w,f[24+y]=w,f[32+y]=w,f[40+y]=w,f[48+y]=w,f[56+y]=w)}for(C=0;C<64;++C){var D=r+C,L=f[C];L=L<=-2056/e.bitConversion?0:L>=2024/e.bitConversion?255/e.bitConversion:L+2056/e.bitConversion>>4,e.blockData[D]=L}}function m(e,n){for(var r=n.blocksPerLine,o=n.blocksPerColumn,a=new Int32Array(64),t=0;t=255?255:0|e}return f.prototype={load:function(e){var n=function(e){this.parse(e),this.onload&&this.onload()}.bind(this);if(e.indexOf("data:")>-1){for(var r=e.indexOf("base64,")+7,o=atob(e.substring(r)),a=new Uint8Array(o.length),t=o.length-1;t>=0;t--)a[t]=o.charCodeAt(t);n(o)}else{var s=new XMLHttpRequest;s.open("GET",e,!0),s.responseType="arraybuffer",s.onload=function(){var e=new Uint8Array(s.response);n(e)}.bind(this),s.send(null)}},parse:function(n){function o(){var e=n[c]<<8|n[c+1];return c+=2,e}function a(){var e=o(),r=n.subarray(c,c+e-2);return c+=r.length,r}function t(e){for(var n=Math.ceil(e.samplesPerLine/8/e.maxH),r=Math.ceil(e.scanLines/8/e.maxV),o=0;o>4==0)for(k=0;k<64;k++)y[e[k]]=n[c++];else{if(g>>4!=1)throw"DQT: invalid table spec";for(k=0;k<64;k++)y[e[k]]=o()}h[15&g]=y}break;case 65472:case 65473:case 65474:if(s)throw"Only single frame JPEGs supported";o(),(s={}).extended=65473===d,s.progressive=65474===d,s.precision=n[c++],s.scanLines=o(),s.samplesPerLine=o(),s.components=[],s.componentIds={};var D,L=n[c++],x=0,T=0;for(J=0;J>4,U=15&n[c+1];x>4==0?p:v)[15&G]=u(M,H)}break;case 65501:o(),i=o();break;case 65498:o();var R=n[c++],V=[];for(J=0;J>4],S.huffmanTableAC=v[15&B],V.push(S)}var O=n[c++],X=n[c++],j=n[c++],E=b(n,c,s,V,i,O,X,j>>4,15&j);c+=E;break;case 65535:255!==n[c]&&c--;break;default:if(255==n[c-3]&&n[c-2]>=192&&n[c-2]<=254){c-=3;break}throw"unknown JPEG marker "+d.toString(16)}d=o()}switch(this.width=s.samplesPerLine,this.height=s.scanLines,this.jfif=l,this.adobe=f,this.components=[],s.components.length){case 1:this.colorspace=r.Grayscale;break;case 3:this.adobe?this.colorspace=r.AdobeRGB:this.colorspace=r.RGB;break;case 4:this.colorspace=r.CYMK;break;default:this.colorspace=r.Unknown}for(var J=0;J 0 && !codeLengths[length - 1]) length--;\n code.push({ children: [], index: 0 });\n var p = code[0],\n q;\n for (i = 0; i < length; i++) {\n for (j = 0; j < codeLengths[i]; j++) {\n p = code.pop();\n p.children[p.index] = values[k];\n while (p.index > 0) {\n p = code.pop();\n }\n p.index++;\n code.push(p);\n while (code.length <= i) {\n code.push((q = { children: [], index: 0 }));\n p.children[p.index] = q.children;\n p = q;\n }\n k++;\n }\n if (i + 1 < length) {\n // p here points to last code\n code.push((q = { children: [], index: 0 }));\n p.children[p.index] = q.children;\n p = q;\n }\n }\n return code[0].children;\n }\n\n function getBlockBufferOffset(component, row, col) {\n return 64 * ((component.blocksPerLine + 1) * row + col);\n }\n\n function decodeScan(\n data,\n offset,\n frame,\n components,\n resetInterval,\n spectralStart,\n spectralEnd,\n successivePrev,\n successive\n ) {\n var precision = frame.precision;\n var samplesPerLine = frame.samplesPerLine;\n var scanLines = frame.scanLines;\n var mcusPerLine = frame.mcusPerLine;\n var progressive = frame.progressive;\n var maxH = frame.maxH,\n maxV = frame.maxV;\n\n var startOffset = offset,\n bitsData = 0,\n bitsCount = 0;\n\n function readBit() {\n if (bitsCount > 0) {\n bitsCount--;\n return (bitsData >> bitsCount) & 1;\n }\n bitsData = data[offset++];\n if (bitsData == 0xff) {\n var nextByte = data[offset++];\n if (nextByte) {\n throw 'unexpected marker: ' +\n ((bitsData << 8) | nextByte).toString(16);\n }\n // unstuff 0\n }\n bitsCount = 7;\n return bitsData >>> 7;\n }\n\n function decodeHuffman(tree) {\n var node = tree;\n var bit;\n while ((bit = readBit()) !== null) {\n node = node[bit];\n if (typeof node === 'number') return node;\n if (typeof node !== 'object') throw 'invalid huffman sequence';\n }\n return null;\n }\n\n function receive(length) {\n var n = 0;\n while (length > 0) {\n var bit = readBit();\n if (bit === null) return;\n n = (n << 1) | bit;\n length--;\n }\n return n;\n }\n\n function receiveAndExtend(length) {\n var n = receive(length);\n if (n >= 1 << (length - 1)) return n;\n return n + (-1 << length) + 1;\n }\n\n function decodeBaseline(component, offset) {\n var t = decodeHuffman(component.huffmanTableDC);\n var diff = t === 0 ? 0 : receiveAndExtend(t);\n component.blockData[offset] = component.pred += diff;\n var k = 1;\n while (k < 64) {\n var rs = decodeHuffman(component.huffmanTableAC);\n var s = rs & 15,\n r = rs >> 4;\n if (s === 0) {\n if (r < 15) break;\n k += 16;\n continue;\n }\n k += r;\n var z = dctZigZag[k];\n component.blockData[offset + z] = receiveAndExtend(s);\n k++;\n }\n }\n\n function decodeDCFirst(component, offset) {\n var t = decodeHuffman(component.huffmanTableDC);\n var diff = t === 0 ? 0 : receiveAndExtend(t) << successive;\n component.blockData[offset] = component.pred += diff;\n }\n\n function decodeDCSuccessive(component, offset) {\n component.blockData[offset] |= readBit() << successive;\n }\n\n var eobrun = 0;\n function decodeACFirst(component, offset) {\n if (eobrun > 0) {\n eobrun--;\n return;\n }\n var k = spectralStart,\n e = spectralEnd;\n while (k <= e) {\n var rs = decodeHuffman(component.huffmanTableAC);\n var s = rs & 15,\n r = rs >> 4;\n if (s === 0) {\n if (r < 15) {\n eobrun = receive(r) + (1 << r) - 1;\n break;\n }\n k += 16;\n continue;\n }\n k += r;\n var z = dctZigZag[k];\n component.blockData[offset + z] =\n receiveAndExtend(s) * (1 << successive);\n k++;\n }\n }\n\n var successiveACState = 0,\n successiveACNextValue;\n function decodeACSuccessive(component, offset) {\n var k = spectralStart,\n e = spectralEnd,\n r = 0;\n while (k <= e) {\n var z = dctZigZag[k];\n switch (successiveACState) {\n case 0: // initial state\n var rs = decodeHuffman(component.huffmanTableAC);\n var s = rs & 15;\n r = rs >> 4;\n if (s === 0) {\n if (r < 15) {\n eobrun = receive(r) + (1 << r);\n successiveACState = 4;\n } else {\n r = 16;\n successiveACState = 1;\n }\n } else {\n if (s !== 1) throw 'invalid ACn encoding';\n successiveACNextValue = receiveAndExtend(s);\n successiveACState = r ? 2 : 3;\n }\n continue;\n case 1: // skipping r zero items\n case 2:\n if (component.blockData[offset + z]) {\n component.blockData[offset + z] += readBit() << successive;\n } else {\n r--;\n if (r === 0) successiveACState = successiveACState == 2 ? 3 : 0;\n }\n break;\n case 3: // set value for a zero item\n if (component.blockData[offset + z]) {\n component.blockData[offset + z] += readBit() << successive;\n } else {\n component.blockData[offset + z] =\n successiveACNextValue << successive;\n successiveACState = 0;\n }\n break;\n case 4: // eob\n if (component.blockData[offset + z]) {\n component.blockData[offset + z] += readBit() << successive;\n }\n break;\n }\n k++;\n }\n if (successiveACState === 4) {\n eobrun--;\n if (eobrun === 0) successiveACState = 0;\n }\n }\n\n function decodeMcu(component, decode, mcu, row, col) {\n var mcuRow = (mcu / mcusPerLine) | 0;\n var mcuCol = mcu % mcusPerLine;\n var blockRow = mcuRow * component.v + row;\n var blockCol = mcuCol * component.h + col;\n var offset = getBlockBufferOffset(component, blockRow, blockCol);\n decode(component, offset);\n }\n\n function decodeBlock(component, decode, mcu) {\n var blockRow = (mcu / component.blocksPerLine) | 0;\n var blockCol = mcu % component.blocksPerLine;\n var offset = getBlockBufferOffset(component, blockRow, blockCol);\n decode(component, offset);\n }\n\n var componentsLength = components.length;\n var component, i, j, k, n;\n var decodeFn;\n if (progressive) {\n if (spectralStart === 0)\n decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive;\n else decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive;\n } else {\n decodeFn = decodeBaseline;\n }\n\n var mcu = 0,\n marker;\n var mcuExpected;\n if (componentsLength == 1) {\n mcuExpected = components[0].blocksPerLine * components[0].blocksPerColumn;\n } else {\n mcuExpected = mcusPerLine * frame.mcusPerColumn;\n }\n if (!resetInterval) {\n resetInterval = mcuExpected;\n }\n\n var h, v;\n while (mcu < mcuExpected) {\n // reset interval stuff\n for (i = 0; i < componentsLength; i++) {\n components[i].pred = 0;\n }\n eobrun = 0;\n\n if (componentsLength == 1) {\n component = components[0];\n for (n = 0; n < resetInterval; n++) {\n decodeBlock(component, decodeFn, mcu);\n mcu++;\n }\n } else {\n for (n = 0; n < resetInterval; n++) {\n for (i = 0; i < componentsLength; i++) {\n component = components[i];\n h = component.h;\n v = component.v;\n for (j = 0; j < v; j++) {\n for (k = 0; k < h; k++) {\n decodeMcu(component, decodeFn, mcu, j, k);\n }\n }\n }\n mcu++;\n }\n }\n\n // find marker\n bitsCount = 0;\n marker = (data[offset] << 8) | data[offset + 1];\n if (marker <= 0xff00) {\n throw 'marker was not found';\n }\n\n if (marker >= 0xffd0 && marker <= 0xffd7) {\n // RSTx\n offset += 2;\n } else {\n break;\n }\n }\n\n return offset - startOffset;\n }\n\n // A port of poppler's IDCT method which in turn is taken from:\n // Christoph Loeffler, Adriaan Ligtenberg, George S. Moschytz,\n // \"Practical Fast 1-D DCT Algorithms with 11 Multiplications\",\n // IEEE Intl. Conf. on Acoustics, Speech & Signal Processing, 1989,\n // 988-991.\n function quantizeAndInverse(component, blockBufferOffset, p) {\n var qt = component.quantizationTable;\n var v0, v1, v2, v3, v4, v5, v6, v7, t;\n var i;\n\n // dequant\n for (i = 0; i < 64; i++) {\n p[i] = component.blockData[blockBufferOffset + i] * qt[i];\n }\n\n // inverse DCT on rows\n for (i = 0; i < 8; ++i) {\n var row = 8 * i;\n\n // check for all-zero AC coefficients\n if (\n p[1 + row] === 0 &&\n p[2 + row] === 0 &&\n p[3 + row] === 0 &&\n p[4 + row] === 0 &&\n p[5 + row] === 0 &&\n p[6 + row] === 0 &&\n p[7 + row] === 0\n ) {\n t = (dctSqrt2 * p[0 + row] + 512) >> 10;\n p[0 + row] = t;\n p[1 + row] = t;\n p[2 + row] = t;\n p[3 + row] = t;\n p[4 + row] = t;\n p[5 + row] = t;\n p[6 + row] = t;\n p[7 + row] = t;\n continue;\n }\n\n // stage 4\n v0 = (dctSqrt2 * p[0 + row] + 128) >> 8;\n v1 = (dctSqrt2 * p[4 + row] + 128) >> 8;\n v2 = p[2 + row];\n v3 = p[6 + row];\n v4 = (dctSqrt1d2 * (p[1 + row] - p[7 + row]) + 128) >> 8;\n v7 = (dctSqrt1d2 * (p[1 + row] + p[7 + row]) + 128) >> 8;\n v5 = p[3 + row] << 4;\n v6 = p[5 + row] << 4;\n\n // stage 3\n t = (v0 - v1 + 1) >> 1;\n v0 = (v0 + v1 + 1) >> 1;\n v1 = t;\n t = (v2 * dctSin6 + v3 * dctCos6 + 128) >> 8;\n v2 = (v2 * dctCos6 - v3 * dctSin6 + 128) >> 8;\n v3 = t;\n t = (v4 - v6 + 1) >> 1;\n v4 = (v4 + v6 + 1) >> 1;\n v6 = t;\n t = (v7 + v5 + 1) >> 1;\n v5 = (v7 - v5 + 1) >> 1;\n v7 = t;\n\n // stage 2\n t = (v0 - v3 + 1) >> 1;\n v0 = (v0 + v3 + 1) >> 1;\n v3 = t;\n t = (v1 - v2 + 1) >> 1;\n v1 = (v1 + v2 + 1) >> 1;\n v2 = t;\n t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12;\n v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12;\n v7 = t;\n t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12;\n v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12;\n v6 = t;\n\n // stage 1\n p[0 + row] = v0 + v7;\n p[7 + row] = v0 - v7;\n p[1 + row] = v1 + v6;\n p[6 + row] = v1 - v6;\n p[2 + row] = v2 + v5;\n p[5 + row] = v2 - v5;\n p[3 + row] = v3 + v4;\n p[4 + row] = v3 - v4;\n }\n\n // inverse DCT on columns\n for (i = 0; i < 8; ++i) {\n var col = i;\n\n // check for all-zero AC coefficients\n if (\n p[1 * 8 + col] === 0 &&\n p[2 * 8 + col] === 0 &&\n p[3 * 8 + col] === 0 &&\n p[4 * 8 + col] === 0 &&\n p[5 * 8 + col] === 0 &&\n p[6 * 8 + col] === 0 &&\n p[7 * 8 + col] === 0\n ) {\n t = (dctSqrt2 * p[i + 0] + 8192) >> 14;\n p[0 * 8 + col] = t;\n p[1 * 8 + col] = t;\n p[2 * 8 + col] = t;\n p[3 * 8 + col] = t;\n p[4 * 8 + col] = t;\n p[5 * 8 + col] = t;\n p[6 * 8 + col] = t;\n p[7 * 8 + col] = t;\n continue;\n }\n\n // stage 4\n v0 = (dctSqrt2 * p[0 * 8 + col] + 2048) >> 12;\n v1 = (dctSqrt2 * p[4 * 8 + col] + 2048) >> 12;\n v2 = p[2 * 8 + col];\n v3 = p[6 * 8 + col];\n v4 = (dctSqrt1d2 * (p[1 * 8 + col] - p[7 * 8 + col]) + 2048) >> 12;\n v7 = (dctSqrt1d2 * (p[1 * 8 + col] + p[7 * 8 + col]) + 2048) >> 12;\n v5 = p[3 * 8 + col];\n v6 = p[5 * 8 + col];\n\n // stage 3\n t = (v0 - v1 + 1) >> 1;\n v0 = (v0 + v1 + 1) >> 1;\n v1 = t;\n t = (v2 * dctSin6 + v3 * dctCos6 + 2048) >> 12;\n v2 = (v2 * dctCos6 - v3 * dctSin6 + 2048) >> 12;\n v3 = t;\n t = (v4 - v6 + 1) >> 1;\n v4 = (v4 + v6 + 1) >> 1;\n v6 = t;\n t = (v7 + v5 + 1) >> 1;\n v5 = (v7 - v5 + 1) >> 1;\n v7 = t;\n\n // stage 2\n t = (v0 - v3 + 1) >> 1;\n v0 = (v0 + v3 + 1) >> 1;\n v3 = t;\n t = (v1 - v2 + 1) >> 1;\n v1 = (v1 + v2 + 1) >> 1;\n v2 = t;\n t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12;\n v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12;\n v7 = t;\n t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12;\n v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12;\n v6 = t;\n\n // stage 1\n p[0 * 8 + col] = v0 + v7;\n p[7 * 8 + col] = v0 - v7;\n p[1 * 8 + col] = v1 + v6;\n p[6 * 8 + col] = v1 - v6;\n p[2 * 8 + col] = v2 + v5;\n p[5 * 8 + col] = v2 - v5;\n p[3 * 8 + col] = v3 + v4;\n p[4 * 8 + col] = v3 - v4;\n }\n\n // convert to 8-bit integers\n for (i = 0; i < 64; ++i) {\n var index = blockBufferOffset + i;\n var q = p[i];\n q =\n q <= -2056 / component.bitConversion\n ? 0\n : q >= 2024 / component.bitConversion\n ? 255 / component.bitConversion\n : (q + 2056 / component.bitConversion) >> 4;\n component.blockData[index] = q;\n }\n }\n\n function buildComponentData(frame, component) {\n var lines = [];\n var blocksPerLine = component.blocksPerLine;\n var blocksPerColumn = component.blocksPerColumn;\n var samplesPerLine = blocksPerLine << 3;\n var computationBuffer = new Int32Array(64);\n\n var i,\n j,\n ll = 0;\n for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {\n for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {\n var offset = getBlockBufferOffset(component, blockRow, blockCol);\n quantizeAndInverse(component, offset, computationBuffer);\n }\n }\n return component.blockData;\n }\n\n function clampToUint8(a) {\n return a <= 0 ? 0 : a >= 255 ? 255 : a | 0;\n }\n\n constructor.prototype = {\n load: function load(path) {\n var handleData = function(data) {\n this.parse(data);\n if (this.onload) this.onload();\n }.bind(this);\n\n if (path.indexOf('data:') > -1) {\n var offset = path.indexOf('base64,') + 7;\n var data = atob(path.substring(offset));\n var arr = new Uint8Array(data.length);\n for (var i = data.length - 1; i >= 0; i--) {\n arr[i] = data.charCodeAt(i);\n }\n handleData(data);\n } else {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', path, true);\n xhr.responseType = 'arraybuffer';\n xhr.onload = function() {\n // TODO catch parse error\n var data = new Uint8Array(xhr.response);\n handleData(data);\n }.bind(this);\n xhr.send(null);\n }\n },\n parse: function parse(data) {\n function readUint16() {\n var value = (data[offset] << 8) | data[offset + 1];\n offset += 2;\n return value;\n }\n\n function readDataBlock() {\n var length = readUint16();\n var array = data.subarray(offset, offset + length - 2);\n offset += array.length;\n return array;\n }\n\n function prepareComponents(frame) {\n var mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / frame.maxH);\n var mcusPerColumn = Math.ceil(frame.scanLines / 8 / frame.maxV);\n for (var i = 0; i < frame.components.length; i++) {\n component = frame.components[i];\n var blocksPerLine = Math.ceil(\n (Math.ceil(frame.samplesPerLine / 8) * component.h) / frame.maxH\n );\n var blocksPerColumn = Math.ceil(\n (Math.ceil(frame.scanLines / 8) * component.v) / frame.maxV\n );\n var blocksPerLineForMcu = mcusPerLine * component.h;\n var blocksPerColumnForMcu = mcusPerColumn * component.v;\n\n var blocksBufferSize =\n 64 * blocksPerColumnForMcu * (blocksPerLineForMcu + 1);\n component.blockData = new Int16Array(blocksBufferSize);\n component.blocksPerLine = blocksPerLine;\n component.blocksPerColumn = blocksPerColumn;\n }\n frame.mcusPerLine = mcusPerLine;\n frame.mcusPerColumn = mcusPerColumn;\n }\n\n var offset = 0,\n length = data.length;\n var jfif = null;\n var adobe = null;\n var pixels = null;\n var frame, resetInterval;\n var quantizationTables = [];\n var huffmanTablesAC = [],\n huffmanTablesDC = [];\n var fileMarker = readUint16();\n if (fileMarker != 0xffd8) {\n // SOI (Start of Image)\n throw 'SOI not found';\n }\n\n fileMarker = readUint16();\n while (fileMarker != 0xffd9) {\n // EOI (End of image)\n var i, j, l;\n switch (fileMarker) {\n case 0xffe0: // APP0 (Application Specific)\n case 0xffe1: // APP1\n case 0xffe2: // APP2\n case 0xffe3: // APP3\n case 0xffe4: // APP4\n case 0xffe5: // APP5\n case 0xffe6: // APP6\n case 0xffe7: // APP7\n case 0xffe8: // APP8\n case 0xffe9: // APP9\n case 0xffea: // APP10\n case 0xffeb: // APP11\n case 0xffec: // APP12\n case 0xffed: // APP13\n case 0xffee: // APP14\n case 0xffef: // APP15\n case 0xfffe: // COM (Comment)\n var appData = readDataBlock();\n\n if (fileMarker === 0xffe0) {\n if (\n appData[0] === 0x4a &&\n appData[1] === 0x46 &&\n appData[2] === 0x49 &&\n appData[3] === 0x46 &&\n appData[4] === 0\n ) {\n // 'JFIF\\x00'\n jfif = {\n version: { major: appData[5], minor: appData[6] },\n densityUnits: appData[7],\n xDensity: (appData[8] << 8) | appData[9],\n yDensity: (appData[10] << 8) | appData[11],\n thumbWidth: appData[12],\n thumbHeight: appData[13],\n thumbData: appData.subarray(\n 14,\n 14 + 3 * appData[12] * appData[13]\n ),\n };\n }\n }\n // TODO APP1 - Exif\n if (fileMarker === 0xffee) {\n if (\n appData[0] === 0x41 &&\n appData[1] === 0x64 &&\n appData[2] === 0x6f &&\n appData[3] === 0x62 &&\n appData[4] === 0x65 &&\n appData[5] === 0\n ) {\n // 'Adobe\\x00'\n adobe = {\n version: appData[6],\n flags0: (appData[7] << 8) | appData[8],\n flags1: (appData[9] << 8) | appData[10],\n transformCode: appData[11],\n };\n }\n }\n break;\n\n case 0xffdb: // DQT (Define Quantization Tables)\n var quantizationTablesLength = readUint16();\n var quantizationTablesEnd = quantizationTablesLength + offset - 2;\n while (offset < quantizationTablesEnd) {\n var quantizationTableSpec = data[offset++];\n var tableData = new Int32Array(64);\n if (quantizationTableSpec >> 4 === 0) {\n // 8 bit values\n for (j = 0; j < 64; j++) {\n var z = dctZigZag[j];\n tableData[z] = data[offset++];\n }\n } else if (quantizationTableSpec >> 4 === 1) {\n //16 bit\n for (j = 0; j < 64; j++) {\n var zz = dctZigZag[j];\n tableData[zz] = readUint16();\n }\n } else throw 'DQT: invalid table spec';\n quantizationTables[quantizationTableSpec & 15] = tableData;\n }\n break;\n\n case 0xffc0: // SOF0 (Start of Frame, Baseline DCT)\n case 0xffc1: // SOF1 (Start of Frame, Extended DCT)\n case 0xffc2: // SOF2 (Start of Frame, Progressive DCT)\n if (frame) {\n throw 'Only single frame JPEGs supported';\n }\n readUint16(); // skip data length\n frame = {};\n frame.extended = fileMarker === 0xffc1;\n frame.progressive = fileMarker === 0xffc2;\n frame.precision = data[offset++];\n frame.scanLines = readUint16();\n frame.samplesPerLine = readUint16();\n frame.components = [];\n frame.componentIds = {};\n var componentsCount = data[offset++],\n componentId;\n var maxH = 0,\n maxV = 0;\n for (i = 0; i < componentsCount; i++) {\n componentId = data[offset];\n var h = data[offset + 1] >> 4;\n var v = data[offset + 1] & 15;\n if (maxH < h) maxH = h;\n if (maxV < v) maxV = v;\n var qId = data[offset + 2];\n l = frame.components.push({\n h: h,\n v: v,\n quantizationTable: quantizationTables[qId],\n quantizationTableId: qId,\n bitConversion: 255 / ((1 << frame.precision) - 1),\n });\n frame.componentIds[componentId] = l - 1;\n offset += 3;\n }\n frame.maxH = maxH;\n frame.maxV = maxV;\n prepareComponents(frame);\n break;\n\n case 0xffc4: // DHT (Define Huffman Tables)\n var huffmanLength = readUint16();\n for (i = 2; i < huffmanLength; ) {\n var huffmanTableSpec = data[offset++];\n var codeLengths = new Uint8Array(16);\n var codeLengthSum = 0;\n for (j = 0; j < 16; j++, offset++)\n codeLengthSum += codeLengths[j] = data[offset];\n var huffmanValues = new Uint8Array(codeLengthSum);\n for (j = 0; j < codeLengthSum; j++, offset++)\n huffmanValues[j] = data[offset];\n i += 17 + codeLengthSum;\n\n (huffmanTableSpec >> 4 === 0 ? huffmanTablesDC : huffmanTablesAC)[\n huffmanTableSpec & 15\n ] = buildHuffmanTable(codeLengths, huffmanValues);\n }\n break;\n\n case 0xffdd: // DRI (Define Restart Interval)\n readUint16(); // skip data length\n resetInterval = readUint16();\n break;\n\n case 0xffda: // SOS (Start of Scan)\n var scanLength = readUint16();\n var selectorsCount = data[offset++];\n var components = [],\n component;\n for (i = 0; i < selectorsCount; i++) {\n var componentIndex = frame.componentIds[data[offset++]];\n component = frame.components[componentIndex];\n var tableSpec = data[offset++];\n component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4];\n component.huffmanTableAC = huffmanTablesAC[tableSpec & 15];\n components.push(component);\n }\n var spectralStart = data[offset++];\n var spectralEnd = data[offset++];\n var successiveApproximation = data[offset++];\n var processed = decodeScan(\n data,\n offset,\n frame,\n components,\n resetInterval,\n spectralStart,\n spectralEnd,\n successiveApproximation >> 4,\n successiveApproximation & 15\n );\n offset += processed;\n break;\n case 0xffff: // Fill bytes\n if (data[offset] !== 0xff) {\n // Avoid skipping a valid marker.\n offset--;\n }\n break;\n default:\n if (\n data[offset - 3] == 0xff &&\n data[offset - 2] >= 0xc0 &&\n data[offset - 2] <= 0xfe\n ) {\n // could be incorrect encoding -- last 0xFF byte of the previous\n // block was eaten by the encoder\n offset -= 3;\n break;\n }\n throw 'unknown JPEG marker ' + fileMarker.toString(16);\n }\n fileMarker = readUint16();\n }\n\n this.width = frame.samplesPerLine;\n this.height = frame.scanLines;\n this.jfif = jfif;\n this.adobe = adobe;\n this.components = [];\n switch (frame.components.length) {\n case 1:\n this.colorspace = ColorSpace.Grayscale;\n break;\n case 3:\n if (this.adobe) this.colorspace = ColorSpace.AdobeRGB;\n else this.colorspace = ColorSpace.RGB;\n break;\n case 4:\n this.colorspace = ColorSpace.CYMK;\n break;\n default:\n this.colorspace = ColorSpace.Unknown;\n }\n for (var i = 0; i < frame.components.length; i++) {\n var component = frame.components[i];\n if (\n !component.quantizationTable &&\n component.quantizationTableId !== null\n )\n component.quantizationTable =\n quantizationTables[component.quantizationTableId];\n this.components.push({\n output: buildComponentData(frame, component),\n scaleX: component.h / frame.maxH,\n scaleY: component.v / frame.maxV,\n blocksPerLine: component.blocksPerLine,\n blocksPerColumn: component.blocksPerColumn,\n bitConversion: component.bitConversion,\n });\n }\n },\n getData16: function getData16(width, height) {\n if (this.components.length !== 1) throw 'Unsupported color mode';\n var scaleX = this.width / width,\n scaleY = this.height / height;\n\n var component, componentScaleX, componentScaleY;\n var x, y, i;\n var offset = 0;\n var numComponents = this.components.length;\n var dataLength = width * height * numComponents;\n var data = new Uint16Array(dataLength);\n var componentLine;\n\n // lineData is reused for all components. Assume first component is\n // the biggest\n var lineData = new Uint16Array(\n (this.components[0].blocksPerLine << 3) *\n this.components[0].blocksPerColumn *\n 8\n );\n\n // First construct image data ...\n for (i = 0; i < numComponents; i++) {\n component = this.components[i];\n var blocksPerLine = component.blocksPerLine;\n var blocksPerColumn = component.blocksPerColumn;\n var samplesPerLine = blocksPerLine << 3;\n\n var j,\n k,\n ll = 0;\n var lineOffset = 0;\n for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {\n var scanLine = blockRow << 3;\n for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {\n var bufferOffset = getBlockBufferOffset(\n component,\n blockRow,\n blockCol\n );\n var offset = 0,\n sample = blockCol << 3;\n for (j = 0; j < 8; j++) {\n var lineOffset = (scanLine + j) * samplesPerLine;\n for (k = 0; k < 8; k++) {\n lineData[lineOffset + sample + k] =\n component.output[bufferOffset + offset++];\n }\n }\n }\n }\n\n componentScaleX = component.scaleX * scaleX;\n componentScaleY = component.scaleY * scaleY;\n offset = i;\n\n var cx, cy;\n var index;\n for (y = 0; y < height; y++) {\n for (x = 0; x < width; x++) {\n cy = 0 | (y * componentScaleY);\n cx = 0 | (x * componentScaleX);\n index = cy * samplesPerLine + cx;\n data[offset] = lineData[index];\n offset += numComponents;\n }\n }\n }\n return data;\n },\n getData: function getData(width, height) {\n var scaleX = this.width / width,\n scaleY = this.height / height;\n\n var component, componentScaleX, componentScaleY;\n var x, y, i;\n var offset = 0;\n var Y, Cb, Cr, K, C, M, Ye, R, G, B;\n var colorTransform;\n var numComponents = this.components.length;\n var dataLength = width * height * numComponents;\n var data = new Uint8Array(dataLength);\n var componentLine;\n\n // lineData is reused for all components. Assume first component is\n // the biggest\n var lineData = new Uint8Array(\n (this.components[0].blocksPerLine << 3) *\n this.components[0].blocksPerColumn *\n 8\n );\n\n // First construct image data ...\n for (i = 0; i < numComponents; i++) {\n component = this.components[i];\n var blocksPerLine = component.blocksPerLine;\n var blocksPerColumn = component.blocksPerColumn;\n var samplesPerLine = blocksPerLine << 3;\n\n var j,\n k,\n ll = 0;\n var lineOffset = 0;\n for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {\n var scanLine = blockRow << 3;\n for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {\n var bufferOffset = getBlockBufferOffset(\n component,\n blockRow,\n blockCol\n );\n var offset = 0,\n sample = blockCol << 3;\n for (j = 0; j < 8; j++) {\n var lineOffset = (scanLine + j) * samplesPerLine;\n for (k = 0; k < 8; k++) {\n lineData[lineOffset + sample + k] =\n component.output[bufferOffset + offset++] *\n component.bitConversion;\n }\n }\n }\n }\n\n componentScaleX = component.scaleX * scaleX;\n componentScaleY = component.scaleY * scaleY;\n offset = i;\n\n var cx, cy;\n var index;\n for (y = 0; y < height; y++) {\n for (x = 0; x < width; x++) {\n cy = 0 | (y * componentScaleY);\n cx = 0 | (x * componentScaleX);\n index = cy * samplesPerLine + cx;\n data[offset] = lineData[index];\n offset += numComponents;\n }\n }\n }\n\n // ... then transform colors, if necessary\n switch (numComponents) {\n case 1:\n case 2:\n break;\n // no color conversion for one or two compoenents\n\n case 3:\n // The default transform for three components is true\n colorTransform = true;\n // The adobe transform marker overrides any previous setting\n if (this.adobe && this.adobe.transformCode) colorTransform = true;\n else if (typeof this.colorTransform !== 'undefined')\n colorTransform = !!this.colorTransform;\n\n if (colorTransform) {\n for (i = 0; i < dataLength; i += numComponents) {\n Y = data[i];\n Cb = data[i + 1];\n Cr = data[i + 2];\n\n R = clampToUint8(Y - 179.456 + 1.402 * Cr);\n G = clampToUint8(Y + 135.459 - 0.344 * Cb - 0.714 * Cr);\n B = clampToUint8(Y - 226.816 + 1.772 * Cb);\n\n data[i] = R;\n data[i + 1] = G;\n data[i + 2] = B;\n }\n }\n break;\n case 4:\n if (!this.adobe) throw 'Unsupported color mode (4 components)';\n // The default transform for four components is false\n colorTransform = false;\n // The adobe transform marker overrides any previous setting\n if (this.adobe && this.adobe.transformCode) colorTransform = true;\n else if (typeof this.colorTransform !== 'undefined')\n colorTransform = !!this.colorTransform;\n\n if (colorTransform) {\n for (i = 0; i < dataLength; i += numComponents) {\n Y = data[i];\n Cb = data[i + 1];\n Cr = data[i + 2];\n\n C = clampToUint8(434.456 - Y - 1.402 * Cr);\n M = clampToUint8(119.541 - Y + 0.344 * Cb + 0.714 * Cr);\n Y = clampToUint8(481.816 - Y - 1.772 * Cb);\n\n data[i] = C;\n data[i + 1] = M;\n data[i + 2] = Y;\n // K is unchanged\n }\n }\n break;\n default:\n throw 'Unsupported color mode';\n }\n return data;\n },\n };\n\n return constructor;\n})();\n\n/*** EXPORTS FROM exports-loader ***/\nmodule.exports = {\n JpegImage\n};\n"],"names":["ColorSpace","Unkown","Grayscale","AdobeRGB","RGB","CYMK","JpegImage","dctZigZag","Int32Array","dctCos1","dctSin1","dctCos3","dctSin3","dctCos6","dctSin6","dctSqrt2","dctSqrt1d2","constructor","buildHuffmanTable","codeLengths","values","i","j","k","code","length","push","children","index","q","p","pop","getBlockBufferOffset","component","row","col","blocksPerLine","decodeScan","data","offset","frame","components","resetInterval","spectralStart","spectralEnd","successivePrev","successive","precision","samplesPerLine","scanLines","mcusPerLine","progressive","startOffset","maxH","maxV","bitsData","bitsCount","readBit","nextByte","toString","decodeHuffman","tree","bit","node","receive","n","receiveAndExtend","eobrun","successiveACNextValue","successiveACState","decodeMcu","decode","mcu","mcuCol","v","h","decodeBlock","decodeFn","componentsLength","t","huffmanTableDC","diff","blockData","pred","e","rs","huffmanTableAC","s","r","z","marker","mcuExpected","blocksPerColumn","mcusPerColumn","quantizeAndInverse","blockBufferOffset","v0","v1","v2","v3","v4","v5","v6","v7","qt","quantizationTable","bitConversion","buildComponentData","computationBuffer","blockRow","blockCol","clampToUint8","a","prototype","load","path","handleData","this","parse","onload","bind","indexOf","atob","substring","arr","Uint8Array","charCodeAt","xhr","XMLHttpRequest","open","responseType","response","send","readUint16","value","readDataBlock","array","subarray","prepareComponents","Math","ceil","blocksPerLineForMcu","blocksBufferSize","Int16Array","jfif","adobe","quantizationTables","huffmanTablesAC","huffmanTablesDC","fileMarker","l","appData","version","major","minor","densityUnits","xDensity","yDensity","thumbWidth","thumbHeight","thumbData","flags0","flags1","transformCode","quantizationTablesEnd","quantizationTableSpec","tableData","extended","componentIds","componentId","componentsCount","qId","quantizationTableId","huffmanLength","huffmanTableSpec","codeLengthSum","huffmanValues","selectorsCount","componentIndex","tableSpec","successiveApproximation","processed","width","height","colorspace","Unknown","output","scaleX","scaleY","getData16","componentScaleX","componentScaleY","x","y","numComponents","Uint16Array","lineData","lineOffset","scanLine","bufferOffset","sample","getData","Y","Cb","Cr","C","M","R","G","B","colorTransform","dataLength","module","exports"],"sourceRoot":""} \ No newline at end of file diff --git a/platform/viewer-static/dist/953.bundle.4f8ebdb6dbbe345ef09d.js b/platform/viewer-static/dist/953.bundle.4f8ebdb6dbbe345ef09d.js new file mode 100644 index 00000000000..12a3a5c1a86 --- /dev/null +++ b/platform/viewer-static/dist/953.bundle.4f8ebdb6dbbe345ef09d.js @@ -0,0 +1,3 @@ +/*! For license information please see 953.bundle.4f8ebdb6dbbe345ef09d.js.LICENSE.txt */ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[953],{27953:function(e,t,r){r.r(t);var n=r(32735),o=r(60216),i=r.n(o),a=r(72928),c=r(84334),u=r(38942),l=r(94709),s=r(67013),f=r(40841),d=r.n(f);function p(e){return p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p(e)}function h(){h=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n="function"==typeof Symbol?Symbol:{},o=n.iterator||"@@iterator",i=n.asyncIterator||"@@asyncIterator",a=n.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function u(e,t,r,n){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new k(n||[]);return i._invoke=function(e,t,r){var n="suspendedStart";return function(o,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===o)throw i;return L()}for(r.method=o,r.arg=i;;){var a=r.delegate;if(a){var c=x(a,r);if(c){if(c===s)continue;return c}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var u=l(e,t,r);if("normal"===u.type){if(n=r.done?"completed":"suspendedYield",u.arg===s)continue;return{value:u.arg,done:r.done}}"throw"===u.type&&(n="completed",r.method="throw",r.arg=u.arg)}}}(e,r,a),i}function l(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var s={};function f(){}function d(){}function m(){}var y={};c(y,o,(function(){return this}));var v=Object.getPrototypeOf,g=v&&v(v(D([])));g&&g!==t&&r.call(g,o)&&(y=g);var w=m.prototype=f.prototype=Object.create(y);function b(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function n(o,i,a,c){var u=l(e[o],e,i);if("throw"!==u.type){var s=u.arg,f=s.value;return f&&"object"==p(f)&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){n("next",e,a,c)}),(function(e){n("throw",e,a,c)})):t.resolve(f).then((function(e){s.value=e,a(s)}),(function(e){return n("throw",e,a,c)}))}c(u.arg)}var o;this._invoke=function(e,r){function i(){return new t((function(t,o){n(e,r,t,o)}))}return o=o?o.then(i,i):i()}}function x(e,t){var r=e.iterator[t.method];if(void 0===r){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,x(e,t),"throw"===t.method))return s;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return s}var n=l(r,e.iterator,t.arg);if("throw"===n.type)return t.method="throw",t.arg=n.arg,t.delegate=null,s;var o=n.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,s):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,s)}function E(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function I(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function k(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(E,this),this.reset(!0)}function D(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,i=function t(){for(;++n=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var c=r.call(i,"catchLoc"),u=r.call(i,"finallyLoc");if(c&&u){if(this.prev=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),I(r),s}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var o=n.arg;I(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:D(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),s}},e}function m(e,t,r,n,o,i,a){try{var c=e[i](a),u=c.value}catch(e){return void r(e)}c.done?t(u):Promise.resolve(u).then(n,o)}function y(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var i=e.apply(t,r);function a(e){m(i,n,o,a,c,"next",e)}function c(e){m(i,n,o,a,c,"throw",e)}a(void 0)}))}}function v(){return v=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);r1)throw new Error("SR viewport should only have a single display set");var I,k,D=f[0],L=g((0,s.O_)(),2),P=L[0],O=L[1],N=g((0,s.en)(),2),j=N[0],T=(N[1],g((0,n.useState)(0),2)),C=T[0],M=T[1],_=g((0,n.useState)(1),2),A=_[0],U=_[1],R=g((0,n.useState)(null),2),G=R[0],F=R[1],V=g((0,n.useState)(null),2),B=V[0],Y=V[1],H=g((0,n.useState)(D.isHydrated),2),J=(H[0],H[1]),q=g((0,n.useState)(null),2),Z=q[0],$=q[1],z=P.viewports,K=P.activeViewportIndex;if(y.registeredExtensionIds.includes("@ohif/extension-measurement-tracking")){var Q=y.getModuleEntry("@ohif/extension-measurement-tracking.contextModule.TrackedMeasurementsContext"),W=g((0,n.useContext)(Q.context),2);I=W[0],k=W[1]}var X=(0,n.useCallback)((function(e){var t=D.measurements;(0,l.l2)(Z,t.map((function(e){return e.TrackingUniqueIdentifier})),e)}),[Z,C,D]),ee=function(e){$(e.detail.element)},te=(0,n.useCallback)((function(e){var t=D.StudyInstanceUID,r=D.displaySetInstanceUID,n=D.sopClassUids;t&&r&&(n&&n.length>1&&console.warn("More than one SOPClassUID in the same series is not yet supported."),function(e,t,r){return x.apply(this,arguments)}(D,e,S).then((function(t){var r=t.referencedDisplaySet,n=t.referencedDisplaySetMetadata;if(M(e),F(r),Y(n),r.displaySetInstanceUID===(null==G?void 0:G.displaySetInstanceUID)){var o=D.measurements,i=E.getViewportInfoByIndex(p),a=E.getCornerstoneViewport(i.getViewportId()),c=a.getImageIds().indexOf(o[e].imageId);-1!==c&&a.setImageIdIndex(c)}})))}),[a,D,G,p]),re=(0,n.useCallback)((function(){if(!G)return null;var t=y.getModuleEntry("@ohif/extension-cornerstone.viewportModule.cornerstone").component,r=D.measurements[C];if(!r)return null;var o=G.images.findIndex((function(e){return e.imageId===r.imageId}));return n.createElement(t,v({},e,{displaySets:[G],viewportOptions:{toolGroupId:"".concat("SRToolGroup")},onElementEnabled:ee,initialImageIndex:o}))}),[G,p,C]),ne=(0,n.useCallback)((function(e){var t=C;"right"===e?++t>=A&&(t=0):--t<0&&(t=A-1),X(t),te(t)}),[C,A,te,X]);(0,n.useEffect)((function(){var e=S.subscribe(S.EVENTS.DISPLAY_SETS_REMOVED,(function(e){var t=e.displaySetInstanceUIDs,r=z[K];t.includes(r.displaySetInstanceUID)&&O.setDisplaySetsForViewport({viewportIndex:K,displaySetInstanceUIDs:[]})}));return function(){e.unsubscribe()}}),[]),(0,n.useEffect)((function(){D.isLoaded||D.load(),J(D.isHydrated);var e=D.measurements.length;U(e)}),[D]),(0,n.useEffect)((function(){Z&&D.isLoaded&&X(C)}),[C,Z,X,D]);var oe=(null===(t=I)||void 0===t||null===(r=t.context)||void 0===r||null===(o=r.trackedSeries)||void 0===o?void 0:o.length)>0;(0,n.useEffect)((function(){var e,t,r;oe=(null===(e=I)||void 0===e||null===(t=e.context)||void 0===t||null===(r=t.trackedSeries)||void 0===r?void 0:r.length)>0}),[I]),(0,n.useEffect)((function(){te(C)}),[a,D]);var ie=null;if(!G||!B)return null;i&&i.length&&(ie=i.map((function(e,t){return e&&n.cloneElement(e,{viewportIndex:p,key:t})})));var ae=B.PatientID,ce=B.PatientName,ue=B.PatientSex,le=B.PatientAge,se=B.SliceThickness,fe=B.ManufacturerModelName,de=B.StudyDate,pe=B.SeriesDescription,he=B.SpacingBetweenSlices,me=B.SeriesNumber;return n.createElement(n.Fragment,null,n.createElement(s.uY,{onDoubleClick:function(e){e.stopPropagation(),e.preventDefault()},onArrowsClick:ne,getStatusComponent:function(){return function(e){var t=e.srDisplaySet,r=e.viewportIndex,o=e.isRehydratable,i=e.isLocked,a=e.sendTrackedMeasurementsEvent,c=function(){a("RESTORE_PROMPT_HYDRATE_SR",{displaySetInstanceUID:t.displaySetInstanceUID,viewportIndex:r})},u=o&&!i?3:o&&i?2:1,l=null,f=null;switch(u){case 1:f=function(){return n.createElement("div",{className:"flex items-center justify-center -mr-1 rounded-full",style:{width:"18px",height:"18px",backgroundColor:"#98e5c1",border:"solid 1.5px #000000"}},n.createElement(s.JO,{name:"exclamation",style:{color:"#000",width:"12px",height:"12px"}}))},l=function(){return n.createElement("div",null,"This structured report is not compatible",n.createElement("br",null),"with this application.")};break;case 2:f=function(){return n.createElement("div",{className:"flex items-center justify-center -mr-1 bg-black rounded-full",style:{width:"18px",height:"18px"}},n.createElement(s.JO,{name:"lock",style:{color:"#05D97C",width:"8px",height:"11px"}}))},l=function(){return n.createElement("div",null,"This structured report is currently read-only",n.createElement("br",null),"because you are tracking measurements in",n.createElement("br",null),"another viewport.")};break;case 3:f=function(){return n.createElement("div",{className:"flex items-center justify-center -mr-1 bg-white rounded-full group-hover:bg-customblue-200",style:{width:"18px",height:"18px",border:"solid 1.5px #000000"}},n.createElement(s.JO,{name:"arrow-left",style:{color:"#000",width:"14px",height:"14px"}}))},l=function(){return n.createElement("div",null,"Click to restore measurements.")}}var p=function(){return n.createElement("div",{className:d()("group relative flex items-center justify-center px-2 rounded-full cursor-default bg-customgreen-100",{"hover:bg-customblue-100":3===u,"cursor-pointer":3===u}),style:{height:"24px",width:"55px"},onClick:function(){3===u&&c&&c()}},n.createElement("span",{className:"pr-1 text-lg font-bold leading-none text-black"},"SR"),n.createElement(f,null))};return n.createElement(n.Fragment,null,l&&n.createElement(s.u,{content:n.createElement(l,null),position:"bottom-left"},n.createElement(p,null)),!l&&n.createElement(p,null))}({srDisplaySet:D,viewportIndex:p,isTracked:!1,isRehydratable:D.isRehydratable,isLocked:oe,sendTrackedMeasurementsEvent:k})},studyData:{label:h,useAltStyling:!0,studyDate:b(de),currentSeries:me,seriesDescription:pe,patientInformation:{patientName:ce?c.ZP.utils.formatPN(ce.Alphabetic):"",patientSex:ue||"",patientAge:le||"",MRN:ae||"",thickness:se?"".concat(se.toFixed(2),"mm"):"",spacing:void 0!==he?"".concat(he.toFixed(2),"mm"):"",scanner:fe||""}}}),n.createElement("div",{className:"relative flex flex-row w-full h-full overflow-hidden"},re(),n.createElement("div",{className:"absolute w-full"},j.viewportIndex===p&&n.createElement(s.P_,{message:j.message,type:j.type,actions:j.actions,onSubmit:j.onSubmit,onOutsideClick:j.onOutsideClick})),ie))}function x(){return(x=y(h().mark((function e(t,r,n){var o,i,a,c,u,l;return h().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return o=t.measurements,i=o[r],a=i.displaySetInstanceUID,c=n.getDisplaySetByUID(a),u=c.images[0],l={PatientID:u.PatientID,PatientName:u.PatientName,PatientSex:u.PatientSex,PatientAge:u.PatientAge,SliceThickness:u.SliceThickness,StudyDate:u.StudyDate,SeriesDescription:u.SeriesDescription,SeriesInstanceUID:u.SeriesInstanceUID,SeriesNumber:u.SeriesNumber,ManufacturerModelName:u.ManufacturerModelName,SpacingBetweenSlices:u.SpacingBetweenSlices},e.abrupt("return",{referencedDisplaySetMetadata:l,referencedDisplaySet:c});case 7:case"end":return e.stop()}}),e)})))).apply(this,arguments)}S.propTypes={displaySets:i().arrayOf(i().object),viewportIndex:i().number.isRequired,dataSource:i().object,children:i().node,customProps:i().object},S.defaultProps={customProps:{}},t.default=S}}]); +//# sourceMappingURL=953.bundle.4f8ebdb6dbbe345ef09d.js.map \ No newline at end of file diff --git a/platform/viewer-static/dist/953.bundle.4f8ebdb6dbbe345ef09d.js.LICENSE.txt b/platform/viewer-static/dist/953.bundle.4f8ebdb6dbbe345ef09d.js.LICENSE.txt new file mode 100644 index 00000000000..ae386fb79c9 --- /dev/null +++ b/platform/viewer-static/dist/953.bundle.4f8ebdb6dbbe345ef09d.js.LICENSE.txt @@ -0,0 +1 @@ +/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ diff --git a/platform/viewer-static/dist/953.bundle.4f8ebdb6dbbe345ef09d.js.map b/platform/viewer-static/dist/953.bundle.4f8ebdb6dbbe345ef09d.js.map new file mode 100644 index 00000000000..bea614b18be --- /dev/null +++ b/platform/viewer-static/dist/953.bundle.4f8ebdb6dbbe345ef09d.js.map @@ -0,0 +1 @@ +{"version":3,"file":"953.bundle.4f8ebdb6dbbe345ef09d.js","mappings":";kcACA,4gGAAAA,GAAA,wBAAAA,EAAA,sBAAAA,GAAA,iBAAAA,GAAA,0oDAAAA,EAAA,yBAAAA,GAAA,IAAAA,EAAA,uBAAAA,GAAA,4bAAAA,EAAA,yBAAAA,GAAA,IAAAA,EAAA,uBAAAA,GAAA,yhBAAAA,EAAA,yBAAAA,GAAA,IAAAA,EAAA,uBAAAA,GAAA,qGAAAA,EAAA,yBAAAA,GAAA,IAAAA,EAAA,uBAAAA,GAAA,svDAeA,IAAQC,EAAeC,EAAAA,GAAAA,WAOvB,SAASC,EAA0BC,GAAO,UAEtCC,EAOED,EAPFC,SACAC,EAMEF,EANFE,WACAC,EAKEH,EALFG,YACAC,EAIEJ,EAJFI,cACAC,EAGEL,EAHFK,cACAC,EAEEN,EAFFM,gBACAC,EACEP,EADFO,iBAKF,IAFcC,EAAAA,EAAAA,IAAe,cAArBC,EAKJH,EAAgBI,UAFlBC,EADF,EACEA,kBACAC,EAFF,EAEEA,2BAIF,GAAIT,EAAYU,OAAS,EACvB,MAAM,IAAIC,MAAM,qDAGlB,IAkBIC,EACAC,EAnBEC,EAAed,EAAY,GAEjC,KAA4Ce,EAAAA,EAAAA,MAA5C,GAAOC,EAAP,KAAqBC,EAArB,KACA,KAAiDC,EAAAA,EAAAA,MAAjD,GAAOC,EAAP,KACA,GADA,KACA,GAAsDC,EAAAA,EAAAA,UAAS,GAA/D,IAAOC,EAAP,KAA4BC,EAA5B,KACA,KAAgDF,EAAAA,EAAAA,UAAS,GAAzD,GAAOG,EAAP,KAAyBC,EAAzB,KACA,KAAkEJ,EAAAA,EAAAA,UAChE,MADF,GAAOK,EAAP,KAAkCC,EAAlC,KAGA,KAGIN,EAAAA,EAAAA,UAAS,MAHb,GACEO,EADF,KAEEC,EAFF,KAIA,KAAoCR,EAAAA,EAAAA,UAASN,EAAae,YAA1D,GAAmBC,GAAnB,WACA,KAA8BV,EAAAA,EAAAA,UAAS,MAAvC,GAAOW,EAAP,KAAgBC,EAAhB,KACQC,EAAmCjB,EAAnCiB,UAAWC,EAAwBlB,EAAxBkB,oBAWnB,GALwC9B,EAAiB+B,uBAAuBC,SAhDhF,wCAqDqC,CACnC,IAAMC,EAAgBjC,EAAiBkC,eACrC,iFAFiC,KAKEC,EAAAA,EAAAA,YAAWF,EAAcG,SAL3B,GAQjC5B,EARiC,KASjCC,EATiC,KAkBrC,IAAM4B,GAAyBC,EAAAA,EAAAA,cAC7B,SAAArB,GACE,IAAQsB,EAAiB7B,EAAjB6B,cAERC,EAAAA,EAAAA,IACEb,EACAY,EAAaE,KAAI,SAAAC,GAAW,OAAIA,EAAYC,4BAC5C1B,KAGJ,CAACU,EAASV,EAAqBP,IAS3BkC,GAAmB,SAAAC,GACvBjB,EAAWiB,EAAIC,OAAOnB,UAGlBoB,IAAiBT,EAAAA,EAAAA,cACrB,SAAAU,GACE,IACEC,EAGEvC,EAHFuC,iBACAC,EAEExC,EAFFwC,sBACAC,EACEzC,EADFyC,aAGGF,GAAqBC,IAItBC,GAAgBA,EAAa7C,OAAS,GAGxC8C,QAAQC,KACN,+EA4R0C,EAArCC,EAAAA,kCAxRTA,CACE5C,EACAsC,EACA5C,GACAmD,MAAK,YAA4D,IAAzDC,EAAyD,EAAzDA,qBAAsBjC,EAAmC,EAAnCA,6BAK9B,GAJAL,EAAuB8B,GACvB1B,EAA6BkC,GAC7BhC,EAAgCD,GAG9BiC,EAAqBN,yBACrB7B,aADA,EACAA,EAA2B6B,uBAC3B,CACA,IAAQX,EAAiB7B,EAAjB6B,aAMFkB,EAAepD,EAA2BqD,uBAC9C7D,GAGI8D,EAAatD,EAA2BuD,uBAC5CH,EAAaI,iBAKTC,EAFWH,EAAWI,cAEEC,QAC5BzB,EAAaS,GAAwBiB,UAGjB,IAAlBH,GACFH,EAAWO,gBAAgBJ,UAKnC,CAACnE,EAAYe,EAAcW,EAA2BxB,IAGlD+D,IAAyBtB,EAAAA,EAAAA,cAAY,WACzC,IAAKjB,EACH,OAAO,KAGT,IAAmB8C,EAAcnE,EAAiBkC,eAChD,0DADMkC,UAKF1B,EADmBhC,EAAjB6B,aACyBtB,GAEjC,IAAKyB,EACH,OAAO,KAGT,IAAM2B,EAAoBhD,EAA0BiD,OAAOC,WACzD,SAAAC,GAAK,OAAIA,EAAMP,UAAYvB,EAAYuB,WAGzC,OACE,gBAACE,EAAD,KACM1E,EADN,CAIEG,YAAa,CAACyB,GACdoD,gBAAiB,CACfC,YAAa,GAAF,OArLU,gBAuLvB9B,iBAAkBA,GAClByB,kBAAmBA,OAGtB,CAAChD,EAA2BxB,EAAeoB,IAExC0D,IAAsBrC,EAAAA,EAAAA,cAC1B,SAAAsC,GACE,IAAI5B,EAAyB/B,EAEX,UAAd2D,IACF5B,GAE8B7B,IAC5B6B,EAAyB,KAG3BA,EAE6B,IAC3BA,EAAyB7B,EAAmB,GAIhDkB,EAAuBW,GACvBD,GAAeC,KAEjB,CACE/B,EACAE,EACA4B,GACAV,KAOJwC,EAAAA,EAAAA,YAAU,WACR,IAAMC,EAAmC1E,EAAkB2E,UACzD3E,EAAkB4E,OAAOC,sBACzB,YAAgC,IAA7BC,EAA6B,EAA7BA,uBACKC,EAAiBtD,EAAUC,GAE/BoD,EAAuBlD,SAASmD,EAAejC,wBAE/CrC,EAAoBuE,0BAA0B,CAC5CvF,cAAeiC,EACfoD,uBAAwB,QAMhC,OAAO,WACLJ,EAAiCO,iBAElC,KASHR,EAAAA,EAAAA,YAAU,WACHnE,EAAa4E,UAChB5E,EAAa6E,OAEf7D,EAAchB,EAAae,YAE3B,IAAM+D,EAAkB9E,EAAa6B,aAAajC,OAClDc,EAAoBoE,KACnB,CAAC9E,KAMJmE,EAAAA,EAAAA,YAAU,WACHlD,GAAYjB,EAAa4E,UAG9BjD,EAAuBpB,KACtB,CAACA,EAAqBU,EAASU,EAAwB3B,IAM1D,IAAI+E,IAA8B,QAAnB,EAAAjF,SAAA,mBAAqB4B,eAArB,mBAA8BsD,qBAA9B,eAA6CpF,QAAS,GACrEuE,EAAAA,EAAAA,YAAU,WAAM,UACdY,IAA8B,QAAnB,EAAAjF,SAAA,mBAAqB4B,eAArB,mBAA8BsD,qBAA9B,eAA6CpF,QAAS,IAChE,CAACE,KAMJqE,EAAAA,EAAAA,YAAU,WACR9B,GAAe9B,KACd,CAACtB,EAAYe,IAGhB,IAAIiF,GAAoB,KAExB,IAAKtE,IAA8BE,EACjC,OAAO,KAGL7B,GAAYA,EAASY,SACvBqF,GAAoBjG,EAAS+C,KAAI,SAACmD,EAAOC,GACvC,OACED,GACAE,EAAAA,aAAmBF,EAAO,CACxB/F,cAAAA,EACAkG,IAAKF,QAMb,IACEG,GAUEzE,EAVFyE,UACAC,GASE1E,EATF0E,YACAC,GAQE3E,EARF2E,WACAC,GAOE5E,EAPF4E,WACAC,GAME7E,EANF6E,eACAC,GAKE9E,EALF8E,sBACAC,GAIE/E,EAJF+E,UACAC,GAGEhF,EAHFgF,kBACAC,GAEEjF,EAFFiF,qBACAC,GACElF,EADFkF,aAIF,OACE,gCACE,gBAAC,KAAD,CACEC,cAAe,SAAA7D,GACbA,EAAI8D,kBACJ9D,EAAI+D,kBAENC,cAAelC,GACfmC,mBAAoB,kBAgG5B,YAMG,IALDpG,EAKC,EALDA,aACAb,EAIC,EAJDA,cACAkH,EAGC,EAHDA,eACAtB,EAEC,EAFDA,SACAhF,EACC,EADDA,6BAEMuG,EAAc,WAClBvG,EAA6B,4BAA6B,CACxDyC,sBAAuBxC,EAAawC,sBACpCrD,cAAAA,KAOEoH,EACJF,IAAmBtB,EAAW,EAAIsB,GAAkBtB,EAAW,EAAI,EACjEyB,EAAiB,KACjBC,EAAa,KAEjB,OAAQF,GACN,KAAK,EACHE,EAAa,kBACX,uBACEC,UAAU,sDACVC,MAAO,CACLC,MAAO,OACPC,OAAQ,OACRC,gBAAiB,UACjBC,OAAQ,wBAGV,gBAAC,KAAD,CACEC,KAAK,cACLL,MAAO,CAAEM,MAAO,OAAQL,MAAO,OAAQC,OAAQ,YAKrDL,EAAiB,kBACf,sEAEE,2BAFF,2BAMF,MACF,KAAK,EACHC,EAAa,kBACX,uBACEC,UAAU,+DACVC,MAAO,CACLC,MAAO,OACPC,OAAQ,SAGV,gBAAC,KAAD,CACEG,KAAK,OACLL,MAAO,CAAEM,MAAO,UAAWL,MAAO,MAAOC,OAAQ,YAKvDL,EAAiB,kBACf,2EAEE,2BAFF,2CAIE,2BAJF,sBAQF,MACF,KAAK,EACHC,EAAa,kBACX,uBACEC,UAAU,6FACVC,MAAO,CACLC,MAAO,OACPC,OAAQ,OACRE,OAAQ,wBAGV,gBAAC,KAAD,CACEC,KAAK,aACLL,MAAO,CAAEM,MAAO,OAAQL,MAAO,OAAQC,OAAQ,YAKrDL,EAAiB,kBAAM,8DAG3B,IAAMU,EAAa,kBACjB,uBACER,UAAWS,IACT,sGACA,CACE,0BAAqC,IAAVZ,EAC3B,iBAA4B,IAAVA,IAGtBI,MAAO,CACLE,OAAQ,OACRD,MAAO,QAETQ,QAAS,WACO,IAAVb,GACED,GACFA,MAKN,wBAAMI,UAAU,kDAAhB,MACA,gBAACD,EAAD,QAIJ,OACE,gCACGD,GACC,gBAAC,IAAD,CAASa,QAAS,gBAACb,EAAD,MAAoBc,SAAS,eAC7C,gBAACJ,EAAD,QAGFV,GAAkB,gBAACU,EAAD,OA/NhBK,CAAoB,CAClBvH,aAAAA,EACAb,cAAAA,EACAqI,WAAW,EACXnB,eAAgBrG,EAAaqG,eAC7BtB,SAAAA,GACAhF,6BAAAA,KAGJ0H,UAAW,CACTC,MAAOtI,EACPuI,eAAe,EACfC,UAAWhJ,EAAWgH,IACtBiC,cAAe9B,GACf+B,kBAAmBjC,GACnBkC,mBAAoB,CAClBC,YAAazC,GACT0C,EAAAA,GAAAA,MAAAA,SAAoB1C,GAAY2C,YAChC,GACJC,WAAY3C,IAAc,GAC1B4C,WAAY3C,IAAc,GAC1B4C,IAAK/C,IAAa,GAClBgD,UAAW5C,GAAiB,GAAH,OAAMA,GAAe6C,QAAQ,GAA7B,MAAsC,GAC/DC,aAC2BC,IAAzB3C,GAAA,UACOA,GAAqByC,QAAQ,GADpC,MAEI,GACNG,QAAS/C,IAAyB,OAKxC,uBAAKe,UAAU,wDACZxD,KACD,uBAAKwD,UAAU,mBACZrG,EAAoBlB,gBAAkBA,GACrC,gBAAC,KAAD,CACEwJ,QAAStI,EAAoBsI,QAC7BC,KAAMvI,EAAoBuI,KAC1BC,QAASxI,EAAoBwI,QAC7BC,SAAUzI,EAAoByI,SAC9BC,eAAgB1I,EAAoB0I,kBAIzC9D,uCAkBT,WACE+D,EACAzI,EACAb,GAHF,wFAKUmC,EAAiBmH,EAAjBnH,aACFG,EAAcH,EAAatB,GAEzBiC,EAA0BR,EAA1BQ,sBAEFM,EAAuBpD,EAAkBuJ,mBAC7CzG,GAGI0G,EAASpG,EAAqBc,OAAO,GACrC/C,EAA+B,CACnCyE,UAAW4D,EAAO5D,UAClBC,YAAa2D,EAAO3D,YACpBC,WAAY0D,EAAO1D,WACnBC,WAAYyD,EAAOzD,WACnBC,eAAgBwD,EAAOxD,eACvBE,UAAWsD,EAAOtD,UAClBC,kBAAmBqD,EAAOrD,kBAC1BsD,kBAAmBD,EAAOC,kBAC1BpD,aAAcmD,EAAOnD,aACrBJ,sBAAuBuD,EAAOvD,sBAC9BG,qBAAsBoD,EAAOpD,sBA1BjC,kBA6BS,CAAEjF,6BAAAA,EAA8BiC,qBAAAA,IA7BzC,kEAZAhE,EAA0BsK,UAAY,CACpClK,YAAamK,IAAAA,QAAkBA,IAAAA,QAC/BlK,cAAekK,IAAAA,OAAAA,WACfpK,WAAYoK,IAAAA,OACZrK,SAAUqK,IAAAA,KACVC,YAAaD,IAAAA,QAGfvK,EAA0ByK,aAAe,CACvCD,YAAa,IAkLf","sources":["file:////Users/HemantP/Documents/RapidAI/RapidOHIFViewer/extensions/cornerstone-dicom-sr/src/viewports/OHIFCornerstoneSRViewport.tsx"],"sourcesContent":["import React, { useCallback, useContext, useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport OHIF, { utils } from '@ohif/core';\nimport { useTranslation } from 'react-i18next';\nimport { setTrackingUniqueIdentifiersForElement } from '../tools/modules/dicomSRModule';\n\nimport {\n Notification,\n ViewportActionBar,\n useViewportGrid,\n useViewportDialog,\n Tooltip,\n Icon,\n} from '@ohif/ui';\nimport classNames from 'classnames';\n\nconst { formatDate } = utils;\n\nconst MEASUREMENT_TRACKING_EXTENSION_ID =\n '@ohif/extension-measurement-tracking';\n\nconst SR_TOOLGROUP_BASE_NAME = 'SRToolGroup';\n\nfunction OHIFCornerstoneSRViewport(props) {\n const {\n children,\n dataSource,\n displaySets,\n viewportIndex,\n viewportLabel,\n servicesManager,\n extensionManager,\n } = props;\n\n const { t } = useTranslation('SRViewport');\n\n const {\n DisplaySetService,\n CornerstoneViewportService,\n } = servicesManager.services;\n\n // SR viewport will always have a single display set\n if (displaySets.length > 1) {\n throw new Error('SR viewport should only have a single display set');\n }\n\n const srDisplaySet = displaySets[0];\n\n const [viewportGrid, viewportGridService] = useViewportGrid();\n const [viewportDialogState, viewportDialogApi] = useViewportDialog();\n const [measurementSelected, setMeasurementSelected] = useState(0);\n const [measurementCount, setMeasurementCount] = useState(1);\n const [activeImageDisplaySetData, setActiveImageDisplaySetData] = useState(\n null\n );\n const [\n referencedDisplaySetMetadata,\n setReferencedDisplaySetMetadata,\n ] = useState(null);\n const [isHydrated, setIsHydrated] = useState(srDisplaySet.isHydrated);\n const [element, setElement] = useState(null);\n const { viewports, activeViewportIndex } = viewportGrid;\n\n // Optional hook into tracking extension, if present.\n let trackedMeasurements;\n let sendTrackedMeasurementsEvent;\n\n const hasMeasurementTrackingExtension = extensionManager.registeredExtensionIds.includes(\n MEASUREMENT_TRACKING_EXTENSION_ID\n );\n\n // TODO: this is a hook that fails if we register/de-register\n if (hasMeasurementTrackingExtension) {\n const contextModule = extensionManager.getModuleEntry(\n '@ohif/extension-measurement-tracking.contextModule.TrackedMeasurementsContext'\n );\n\n const useTrackedMeasurements = () => useContext(contextModule.context);\n\n [\n trackedMeasurements,\n sendTrackedMeasurementsEvent,\n ] = useTrackedMeasurements();\n }\n\n /**\n * Store the tracking identifiers per viewport in order to be able to\n * show the SR measurements on the referenced image on the correct viewport,\n * when multiple viewports are used.\n */\n const setTrackingIdentifiers = useCallback(\n measurementSelected => {\n const { measurements } = srDisplaySet;\n\n setTrackingUniqueIdentifiersForElement(\n element,\n measurements.map(measurement => measurement.TrackingUniqueIdentifier),\n measurementSelected\n );\n },\n [element, measurementSelected, srDisplaySet]\n );\n\n /**\n * OnElementEnabled callback which is called after the cornerstoneExtension\n * has enabled the element. Note: we delegate all the image rendering to\n * cornerstoneExtension, so we don't need to do anything here regarding\n * the image rendering, element enabling etc.\n */\n const onElementEnabled = evt => {\n setElement(evt.detail.element);\n };\n\n const updateViewport = useCallback(\n newMeasurementSelected => {\n const {\n StudyInstanceUID,\n displaySetInstanceUID,\n sopClassUids,\n } = srDisplaySet;\n\n if (!StudyInstanceUID || !displaySetInstanceUID) {\n return;\n }\n\n if (sopClassUids && sopClassUids.length > 1) {\n // Todo: what happens if there are multiple SOP Classes? Why we are\n // not throwing an error?\n console.warn(\n 'More than one SOPClassUID in the same series is not yet supported.'\n );\n }\n\n _getViewportReferencedDisplaySetData(\n srDisplaySet,\n newMeasurementSelected,\n DisplaySetService\n ).then(({ referencedDisplaySet, referencedDisplaySetMetadata }) => {\n setMeasurementSelected(newMeasurementSelected);\n setActiveImageDisplaySetData(referencedDisplaySet);\n setReferencedDisplaySetMetadata(referencedDisplaySetMetadata);\n\n if (\n referencedDisplaySet.displaySetInstanceUID ===\n activeImageDisplaySetData?.displaySetInstanceUID\n ) {\n const { measurements } = srDisplaySet;\n\n // it means that we have a new referenced display set, and the\n // imageIdIndex will handle it by updating the viewport, but if they\n // are the same we just need to use MeasurementService to jump to the\n // new measurement\n const viewportInfo = CornerstoneViewportService.getViewportInfoByIndex(\n viewportIndex\n );\n\n const csViewport = CornerstoneViewportService.getCornerstoneViewport(\n viewportInfo.getViewportId()\n );\n\n const imageIds = csViewport.getImageIds();\n\n const imageIdIndex = imageIds.indexOf(\n measurements[newMeasurementSelected].imageId\n );\n\n if (imageIdIndex !== -1) {\n csViewport.setImageIdIndex(imageIdIndex);\n }\n }\n });\n },\n [dataSource, srDisplaySet, activeImageDisplaySetData, viewportIndex]\n );\n\n const getCornerstoneViewport = useCallback(() => {\n if (!activeImageDisplaySetData) {\n return null;\n }\n\n const { component: Component } = extensionManager.getModuleEntry(\n '@ohif/extension-cornerstone.viewportModule.cornerstone'\n );\n\n const { measurements } = srDisplaySet;\n const measurement = measurements[measurementSelected];\n\n if (!measurement) {\n return null;\n }\n\n const initialImageIndex = activeImageDisplaySetData.images.findIndex(\n image => image.imageId === measurement.imageId\n );\n\n return (\n \n );\n }, [activeImageDisplaySetData, viewportIndex, measurementSelected]);\n\n const onMeasurementChange = useCallback(\n direction => {\n let newMeasurementSelected = measurementSelected;\n\n if (direction === 'right') {\n newMeasurementSelected++;\n\n if (newMeasurementSelected >= measurementCount) {\n newMeasurementSelected = 0;\n }\n } else {\n newMeasurementSelected--;\n\n if (newMeasurementSelected < 0) {\n newMeasurementSelected = measurementCount - 1;\n }\n }\n\n setTrackingIdentifiers(newMeasurementSelected);\n updateViewport(newMeasurementSelected);\n },\n [\n measurementSelected,\n measurementCount,\n updateViewport,\n setTrackingIdentifiers,\n ]\n );\n\n /**\n Cleanup the SR viewport when the viewport is destroyed\n */\n useEffect(() => {\n const onDisplaySetsRemovedSubscription = DisplaySetService.subscribe(\n DisplaySetService.EVENTS.DISPLAY_SETS_REMOVED,\n ({ displaySetInstanceUIDs }) => {\n const activeViewport = viewports[activeViewportIndex];\n if (\n displaySetInstanceUIDs.includes(activeViewport.displaySetInstanceUID)\n ) {\n viewportGridService.setDisplaySetsForViewport({\n viewportIndex: activeViewportIndex,\n displaySetInstanceUIDs: [],\n });\n }\n }\n );\n\n return () => {\n onDisplaySetsRemovedSubscription.unsubscribe();\n };\n }, []);\n\n /**\n * Loading the measurements from the SR viewport, which goes through the\n * isHydratable check, the outcome for the isHydrated state here is always FALSE\n * since we don't do the hydration here. Todo: can't we just set it as false? why\n * we are changing the state here? isHydrated is always false at this stage, and\n * if it is hydrated we don't event use the SR viewport.\n */\n useEffect(() => {\n if (!srDisplaySet.isLoaded) {\n srDisplaySet.load();\n }\n setIsHydrated(srDisplaySet.isHydrated);\n\n const numMeasurements = srDisplaySet.measurements.length;\n setMeasurementCount(numMeasurements);\n }, [srDisplaySet]);\n\n /**\n * Hook to update the tracking identifiers when the selected measurement changes or\n * the element changes\n */\n useEffect(() => {\n if (!element || !srDisplaySet.isLoaded) {\n return;\n }\n setTrackingIdentifiers(measurementSelected);\n }, [measurementSelected, element, setTrackingIdentifiers, srDisplaySet]);\n\n /**\n * Todo: what is this, not sure what it does regarding the react aspect,\n * it is updating a local variable? which is not state.\n */\n let isLocked = trackedMeasurements?.context?.trackedSeries?.length > 0;\n useEffect(() => {\n isLocked = trackedMeasurements?.context?.trackedSeries?.length > 0;\n }, [trackedMeasurements]);\n\n /**\n * Data fetching for the SR displaySet, which updates the measurements and\n * also gets the referenced image displaySet that SR is based on.\n */\n useEffect(() => {\n updateViewport(measurementSelected);\n }, [dataSource, srDisplaySet]);\n\n // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n let childrenWithProps = null;\n\n if (!activeImageDisplaySetData || !referencedDisplaySetMetadata) {\n return null;\n }\n\n if (children && children.length) {\n childrenWithProps = children.map((child, index) => {\n return (\n child &&\n React.cloneElement(child, {\n viewportIndex,\n key: index,\n })\n );\n });\n }\n\n const {\n PatientID,\n PatientName,\n PatientSex,\n PatientAge,\n SliceThickness,\n ManufacturerModelName,\n StudyDate,\n SeriesDescription,\n SpacingBetweenSlices,\n SeriesNumber,\n } = referencedDisplaySetMetadata;\n\n // TODO -> disabled double click for now: onDoubleClick={_onDoubleClick}\n return (\n <>\n {\n evt.stopPropagation();\n evt.preventDefault();\n }}\n onArrowsClick={onMeasurementChange}\n getStatusComponent={() =>\n _getStatusComponent({\n srDisplaySet,\n viewportIndex,\n isTracked: false,\n isRehydratable: srDisplaySet.isRehydratable,\n isLocked,\n sendTrackedMeasurementsEvent,\n })\n }\n studyData={{\n label: viewportLabel,\n useAltStyling: true,\n studyDate: formatDate(StudyDate),\n currentSeries: SeriesNumber,\n seriesDescription: SeriesDescription,\n patientInformation: {\n patientName: PatientName\n ? OHIF.utils.formatPN(PatientName.Alphabetic)\n : '',\n patientSex: PatientSex || '',\n patientAge: PatientAge || '',\n MRN: PatientID || '',\n thickness: SliceThickness ? `${SliceThickness.toFixed(2)}mm` : '',\n spacing:\n SpacingBetweenSlices !== undefined\n ? `${SpacingBetweenSlices.toFixed(2)}mm`\n : '',\n scanner: ManufacturerModelName || '',\n },\n }}\n />\n\n
\n {getCornerstoneViewport()}\n
\n {viewportDialogState.viewportIndex === viewportIndex && (\n \n )}\n
\n {childrenWithProps}\n
\n \n );\n}\n\nOHIFCornerstoneSRViewport.propTypes = {\n displaySets: PropTypes.arrayOf(PropTypes.object),\n viewportIndex: PropTypes.number.isRequired,\n dataSource: PropTypes.object,\n children: PropTypes.node,\n customProps: PropTypes.object,\n};\n\nOHIFCornerstoneSRViewport.defaultProps = {\n customProps: {},\n};\n\nasync function _getViewportReferencedDisplaySetData(\n displaySet,\n measurementSelected,\n DisplaySetService\n) {\n const { measurements } = displaySet;\n const measurement = measurements[measurementSelected];\n\n const { displaySetInstanceUID } = measurement;\n\n const referencedDisplaySet = DisplaySetService.getDisplaySetByUID(\n displaySetInstanceUID\n );\n\n const image0 = referencedDisplaySet.images[0];\n const referencedDisplaySetMetadata = {\n PatientID: image0.PatientID,\n PatientName: image0.PatientName,\n PatientSex: image0.PatientSex,\n PatientAge: image0.PatientAge,\n SliceThickness: image0.SliceThickness,\n StudyDate: image0.StudyDate,\n SeriesDescription: image0.SeriesDescription,\n SeriesInstanceUID: image0.SeriesInstanceUID,\n SeriesNumber: image0.SeriesNumber,\n ManufacturerModelName: image0.ManufacturerModelName,\n SpacingBetweenSlices: image0.SpacingBetweenSlices,\n };\n\n return { referencedDisplaySetMetadata, referencedDisplaySet };\n}\n\nfunction _getStatusComponent({\n srDisplaySet,\n viewportIndex,\n isRehydratable,\n isLocked,\n sendTrackedMeasurementsEvent,\n}) {\n const onPillClick = () => {\n sendTrackedMeasurementsEvent('RESTORE_PROMPT_HYDRATE_SR', {\n displaySetInstanceUID: srDisplaySet.displaySetInstanceUID,\n viewportIndex,\n });\n };\n\n // 1 - Incompatible\n // 2 - Locked\n // 3 - Rehydratable / Open\n const state =\n isRehydratable && !isLocked ? 3 : isRehydratable && isLocked ? 2 : 1;\n let ToolTipMessage = null;\n let StatusIcon = null;\n\n switch (state) {\n case 1:\n StatusIcon = () => (\n \n \n
\n );\n\n ToolTipMessage = () => (\n
\n This structured report is not compatible\n
\n with this application.\n
\n );\n break;\n case 2:\n StatusIcon = () => (\n \n \n
\n );\n\n ToolTipMessage = () => (\n
\n This structured report is currently read-only\n
\n because you are tracking measurements in\n
\n another viewport.\n
\n );\n break;\n case 3:\n StatusIcon = () => (\n \n \n \n );\n\n ToolTipMessage = () =>
Click to restore measurements.
;\n }\n\n const StatusPill = () => (\n {\n if (state === 3) {\n if (onPillClick) {\n onPillClick();\n }\n }\n }}\n >\n SR\n \n \n );\n\n return (\n <>\n {ToolTipMessage && (\n } position=\"bottom-left\">\n \n \n )}\n {!ToolTipMessage && }\n \n );\n}\n\n// function _onDoubleClick() {\n// const cancelActiveManipulatorsForElement = cornerstoneTools.getModule(\n// 'manipulatorState'\n// ).setters.cancelActiveManipulatorsForElement;\n// const enabledElements = cornerstoneTools.store.state.enabledElements;\n// enabledElements.forEach(element => {\n// cancelActiveManipulatorsForElement(element);\n// });\n// }\n\nexport default OHIFCornerstoneSRViewport;\n"],"names":["i","formatDate","utils","OHIFCornerstoneSRViewport","props","children","dataSource","displaySets","viewportIndex","viewportLabel","servicesManager","extensionManager","useTranslation","t","services","DisplaySetService","CornerstoneViewportService","length","Error","trackedMeasurements","sendTrackedMeasurementsEvent","srDisplaySet","useViewportGrid","viewportGrid","viewportGridService","useViewportDialog","viewportDialogState","useState","measurementSelected","setMeasurementSelected","measurementCount","setMeasurementCount","activeImageDisplaySetData","setActiveImageDisplaySetData","referencedDisplaySetMetadata","setReferencedDisplaySetMetadata","isHydrated","setIsHydrated","element","setElement","viewports","activeViewportIndex","registeredExtensionIds","includes","contextModule","getModuleEntry","useContext","context","setTrackingIdentifiers","useCallback","measurements","setTrackingUniqueIdentifiersForElement","map","measurement","TrackingUniqueIdentifier","onElementEnabled","evt","detail","updateViewport","newMeasurementSelected","StudyInstanceUID","displaySetInstanceUID","sopClassUids","console","warn","_getViewportReferencedDisplaySetData","then","referencedDisplaySet","viewportInfo","getViewportInfoByIndex","csViewport","getCornerstoneViewport","getViewportId","imageIdIndex","getImageIds","indexOf","imageId","setImageIdIndex","Component","component","initialImageIndex","images","findIndex","image","viewportOptions","toolGroupId","onMeasurementChange","direction","useEffect","onDisplaySetsRemovedSubscription","subscribe","EVENTS","DISPLAY_SETS_REMOVED","displaySetInstanceUIDs","activeViewport","setDisplaySetsForViewport","unsubscribe","isLoaded","load","numMeasurements","isLocked","trackedSeries","childrenWithProps","child","index","React","key","PatientID","PatientName","PatientSex","PatientAge","SliceThickness","ManufacturerModelName","StudyDate","SeriesDescription","SpacingBetweenSlices","SeriesNumber","onDoubleClick","stopPropagation","preventDefault","onArrowsClick","getStatusComponent","isRehydratable","onPillClick","state","ToolTipMessage","StatusIcon","className","style","width","height","backgroundColor","border","name","color","StatusPill","classNames","onClick","content","position","_getStatusComponent","isTracked","studyData","label","useAltStyling","studyDate","currentSeries","seriesDescription","patientInformation","patientName","OHIF","Alphabetic","patientSex","patientAge","MRN","thickness","toFixed","spacing","undefined","scanner","message","type","actions","onSubmit","onOutsideClick","displaySet","getDisplaySetByUID","image0","SeriesInstanceUID","propTypes","PropTypes","customProps","defaultProps"],"sourceRoot":""} \ No newline at end of file diff --git a/platform/viewer-static/dist/9795c8d354bb490dd997.wasm b/platform/viewer-static/dist/9795c8d354bb490dd997.wasm new file mode 100644 index 00000000000..90655f9b1d8 Binary files /dev/null and b/platform/viewer-static/dist/9795c8d354bb490dd997.wasm differ diff --git a/platform/viewer-static/dist/_headers b/platform/viewer-static/dist/_headers new file mode 100644 index 00000000000..dfe145ba770 --- /dev/null +++ b/platform/viewer-static/dist/_headers @@ -0,0 +1,6 @@ +/* + # Ensure the examples are cross-origin isolated so that + # we can use SharedArrayBuffer + # See https://developer.mozilla.org/en-US/docs/Web/API/crossOriginIsolated + Cross-Origin-Embedder-Policy: require-corp + Cross-Origin-Opener-Policy: same-origin diff --git a/platform/viewer-static/dist/_redirects b/platform/viewer-static/dist/_redirects new file mode 100644 index 00000000000..9730bd0d3c5 --- /dev/null +++ b/platform/viewer-static/dist/_redirects @@ -0,0 +1,6 @@ +# Specific to our deploy-preview +# Our docs are published using CircleCI + GitBook +# Confgure redirects using netlify.toml + +# Spa +/* /index.html 200 diff --git a/platform/viewer-static/dist/app-config.js b/platform/viewer-static/dist/app-config.js new file mode 100644 index 00000000000..fd54c84c70f --- /dev/null +++ b/platform/viewer-static/dist/app-config.js @@ -0,0 +1 @@ +window.config={routerBasename:"/",extensions:[],modes:[],showStudyList:!0,omitQuotationForMultipartRequest:!0,showLoadingIndicator:!0,maxCacheSize:314572800,maxNumRequests:{interaction:100,thumbnail:0,prefetch:10},dataSources:[{friendlyName:"dcmjs DICOMWeb Server",namespace:"@ohif/extension-default.dataSourcesModule.dicomweb",sourceName:"dicomweb",configuration:{name:"aws",wadoUriRoot:"https://d3vr5l0dy050o5.cloudfront.net/dicomweb",qidoRoot:"https://d3vr5l0dy050o5.cloudfront.net/dicomweb",wadoRoot:"https://d3vr5l0dy050o5.cloudfront.net/dicomweb",qidoSupportsIncludeField:!1,supportsReject:!1,imageRendering:"wadors",thumbnailRendering:"wadors",enableStudyLazyLoad:!0,supportsFuzzyMatching:!1,supportsWildcard:!0,staticWado:!0,singlepart:"bulkdata,video,pdf"}},{friendlyName:"dicom json",namespace:"@ohif/extension-default.dataSourcesModule.dicomjson",sourceName:"dicomjson",configuration:{name:"json"}},{friendlyName:"dicom local",namespace:"@ohif/extension-default.dataSourcesModule.dicomlocal",sourceName:"dicomlocal",configuration:{}}],httpErrorHandler:e=>{console.warn(e.status),console.warn("test, navigate to https://ohif.org/")},whiteLabeling:{createLogoComponentFn:function(e){return e.createElement("a",{target:"_self",rel:"noopener noreferrer",className:"text-purple-600 line-through",href:"/"},e.createElement("img",{src:"./logo.svg",className:"w-12"}))}},defaultDataSourceName:"dicomweb",hotkeys:[{commandName:"incrementActiveViewport",label:"Next Viewport",keys:["right"]},{commandName:"decrementActiveViewport",label:"Previous Viewport",keys:["left"]},{commandName:"rotateViewportCW",label:"Rotate Right",keys:["r"]},{commandName:"rotateViewportCCW",label:"Rotate Left",keys:["l"]},{commandName:"invertViewport",label:"Invert",keys:["i"]},{commandName:"flipViewportHorizontal",label:"Flip Horizontally",keys:["h"]},{commandName:"flipViewportVertical",label:"Flip Vertically",keys:["v"]},{commandName:"scaleUpViewport",label:"Zoom In",keys:["+"]},{commandName:"scaleDownViewport",label:"Zoom Out",keys:["-"]},{commandName:"fitViewportToWindow",label:"Zoom to Fit",keys:["="]},{commandName:"resetViewport",label:"Reset",keys:["space"]},{commandName:"nextImage",label:"Next Image",keys:["down"]},{commandName:"previousImage",label:"Previous Image",keys:["up"]},{commandName:"setToolActive",commandOptions:{toolName:"Zoom"},label:"Zoom",keys:["z"]},{commandName:"windowLevelPreset1",label:"W/L Preset 1",keys:["1"]},{commandName:"windowLevelPreset2",label:"W/L Preset 2",keys:["2"]},{commandName:"windowLevelPreset3",label:"W/L Preset 3",keys:["3"]},{commandName:"windowLevelPreset4",label:"W/L Preset 4",keys:["4"]},{commandName:"windowLevelPreset5",label:"W/L Preset 5",keys:["5"]},{commandName:"windowLevelPreset6",label:"W/L Preset 6",keys:["6"]},{commandName:"windowLevelPreset7",label:"W/L Preset 7",keys:["7"]},{commandName:"windowLevelPreset8",label:"W/L Preset 8",keys:["8"]},{commandName:"windowLevelPreset9",label:"W/L Preset 9",keys:["9"]}]}; diff --git a/platform/viewer-static/dist/app.bundle.00de56b42a10ddc08bcf.js b/platform/viewer-static/dist/app.bundle.00de56b42a10ddc08bcf.js new file mode 100644 index 00000000000..2a339f31cc0 --- /dev/null +++ b/platform/viewer-static/dist/app.bundle.00de56b42a10ddc08bcf.js @@ -0,0 +1,3 @@ +/*! For license information please see app.bundle.00de56b42a10ddc08bcf.js.LICENSE.txt */ +(function(){var __webpack_modules__={64291:function(e){e.exports=function(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i},e.exports.default=e.exports,e.exports.__esModule=!0},98387:function(e){e.exports=function(e,t){if(null==e)return{};var n,r,a={},i=Object.keys(e);for(r=0;r=0||(a[n]=e[n]);return a},e.exports.default=e.exports,e.exports.__esModule=!0},40990:function(e){function t(n,r){return e.exports=t=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},e.exports.default=e.exports,e.exports.__esModule=!0,t(n,r)}e.exports=t,e.exports.default=e.exports,e.exports.__esModule=!0},43408:function(e,t,n){var r=n(94325),a=n(91682),i=n(52510),o=n(41420);e.exports=function(e,t){return r(e)||a(e,t)||i(e,t)||o()},e.exports.default=e.exports,e.exports.__esModule=!0},59571:function(e,t,n){var r=n(60123),a=n(36506),i=n(52510),o=n(67331);e.exports=function(e){return r(e)||a(e)||i(e)||o()},e.exports.default=e.exports,e.exports.__esModule=!0},87002:function(e){function t(n){return"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?(e.exports=t=function(e){return typeof e},e.exports.default=e.exports,e.exports.__esModule=!0):(e.exports=t=function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e.exports.default=e.exports,e.exports.__esModule=!0),t(n)}e.exports=t,e.exports.default=e.exports,e.exports.__esModule=!0},52510:function(e,t,n){var r=n(64291);e.exports=function(e,t){if(e){if("string"==typeof e)return r(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?r(e,t):void 0}},e.exports.default=e.exports,e.exports.__esModule=!0},67945:function(e,t,n){e.exports=n(11602)},19013:function(e,t,n){"use strict";n.d(t,{ZP:function(){return y}});var r=n(47169),a=n(94378),i=n(92393),o=n(43739);function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function u(e){for(var t=1;ta&&(a=i);return{min:r,max:a}}function d(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;if(t<0&&n>1){for(var r=e.length,a=r/n,i=new Float64Array(a),o=0,s=0;o1&&void 0!==arguments[1]?arguments[1]:0,n=e||[];n.length<=t;)n.push(null);return n}function v(e){return Object.prototype.toString.call(e).slice(8,-1)}var m={computeRange:d,createRangeHelper:function(){var e=Number.MAX_VALUE,t=-Number.MAX_VALUE,n=0,r=0;return{add:function(a){e>a&&(e=a),tn&&(n=i)}return n}};function p(e,t){function n(){t.ranges=null,e.modified()}function r(r){if(r<0)return!1;var a=e.getNumberOfComponents(),o=t.values.length/(a>0?a:1);if(r===o)return!0;if(r>o){var s=t.values;return t.values=(0,i.B5)(t.dataType,(r+o)*a),t.values.set(s),!0}return t.size=r*a,n(),!0}t.classHierarchy.push("vtkDataArray"),e.initialize=function(){r(0)},e.getElementComponentSize=function(){return t.values.BYTES_PER_ELEMENT},e.getComponent=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return t.values[e*t.numberOfComponents+n]},e.setComponent=function(e,r,a){a!==t.values[e*t.numberOfComponents+r]&&(t.values[e*t.numberOfComponents+r]=a,n())},e.getValue=function(n){var r=n/t.numberOfComponents,a=n%t.numberOfComponents;return e.getComponent(r,a)},e.setValue=function(n,r){var a=n/t.numberOfComponents,i=n%t.numberOfComponents;e.setComponent(a,i,r)},e.getData=function(){return t.size===t.values.length?t.values:t.values.subarray(0,t.size)},e.getRange=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:-1,r=n<0?t.numberOfComponents:n,a=null;return t.ranges||(t.ranges=f(t.ranges,t.numberOfComponents)),(a=t.ranges[r])?(t.rangeTuple[0]=a.min,t.rangeTuple[1]=a.max,t.rangeTuple):(a=d(e.getData(),n,t.numberOfComponents),t.ranges[r]=a,t.rangeTuple[0]=a.min,t.rangeTuple[1]=a.max,t.rangeTuple)},e.setRange=function(e,n){t.ranges||(t.ranges=f(t.ranges,t.numberOfComponents));var r={min:e.min,max:e.max};return t.ranges[n]=r,t.rangeTuple[0]=r.min,t.rangeTuple[1]=r.max,t.rangeTuple},e.setTuple=function(e,n){for(var r=e*t.numberOfComponents,a=0;a1&&void 0!==arguments[1]?arguments[1]:[],r=t.numberOfComponents||1,a=e*r;switch(r){case 4:n[3]=t.values[a+3];case 3:n[2]=t.values[a+2];case 2:n[1]=t.values[a+1];case 1:n[0]=t.values[a];break;default:for(var i=r-1;i>=0;--i)n[i]=t.values[a+i]}return n},e.getTuples=function(n,r){var a=(null!=n?n:0)*t.numberOfComponents,i=(null!=r?r:e.getNumberOfTuples())*t.numberOfComponents,o=e.getData().subarray(a,i);return o.length>0?o:null},e.getTupleLocation=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;return e*t.numberOfComponents},e.getNumberOfComponents=function(){return t.numberOfComponents},e.getNumberOfValues=function(){return t.size},e.getNumberOfTuples=function(){return t.size/t.numberOfComponents},e.getDataType=function(){return t.dataType},e.newClone=function(){return A({empty:!0,name:t.name,dataType:t.dataType,numberOfComponents:t.numberOfComponents})},e.getName=function(){return t.name||(e.modified(),t.name="vtkDataArray".concat(e.getMTime())),t.name},e.setData=function(e,r){t.values=e,t.size=e.length,t.dataType=v(e),r&&(t.numberOfComponents=r),t.size%t.numberOfComponents!=0&&(t.numberOfComponents=1),n()},e.getState=function(){if(t.deleted)return null;var n=u(u({},t),{},{vtkClass:e.getClassName()});n.values=Array.from(n.values),delete n.buffer,Object.keys(n).forEach((function(e){n[e]||delete n[e]}));var r={};return Object.keys(n).sort().forEach((function(e){r[e]=n[e]})),r.mtime&&delete r.mtime,r},e.deepCopy=function(t){e.shallowCopy(t),e.setData(t.getData().slice())},e.interpolateTuple=function(n,r,a,i,o,s){var u=t.numberOfComponents||1;u===r.getNumberOfComponents()&&u===i.getNumberOfComponents()||l("numberOfComponents must match");var c=r.getTuple(a),d=i.getTuple(o),f=[];switch(f.length=u,u){case 4:f[3]=c[3]+(d[3]-c[3])*s;case 3:f[2]=c[2]+(d[2]-c[2])*s;case 2:f[1]=c[1]+(d[1]-c[1])*s;case 1:f[0]=c[0]+(d[0]-c[0])*s;break;default:for(var v=0;v2&&void 0!==arguments[2]?arguments[2]:{};if(Object.assign(t,h,r),!t.empty&&!t.values&&!t.size)throw new TypeError("Cannot create vtkDataArray object without: size > 0, values");(t.values?Array.isArray(t.values)&&(t.values=(0,i.MR)(t.dataType,t.values)):t.values=(0,i.B5)(t.dataType,t.size),t.values)&&(t.size=null!==(n=t.size)&&void 0!==n?n:t.values.length,t.dataType=v(t.values));(0,i.j6)(e,t),(0,i.t8)(e,t,["name","numberOfComponents"]),p(e,t)}var A=(0,i.WL)(g,"vtkDataArray"),y=u(u({newInstance:A,extend:g},m),a.ZP)},94378:function(e,t,n){"use strict";n.d(t,{Tu:function(){return r},ZP:function(){return a}});var r={VOID:"",CHAR:"Int8Array",SIGNED_CHAR:"Int8Array",UNSIGNED_CHAR:"Uint8Array",SHORT:"Int16Array",UNSIGNED_SHORT:"Uint16Array",INT:"Int32Array",UNSIGNED_INT:"Uint32Array",FLOAT:"Float32Array",DOUBLE:"Float64Array"},a={DefaultDataType:r.FLOAT,DataTypeByteSize:{Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},VtkDataTypes:r}},92780:function(e,t,n){"use strict";n.d(t,{ZP:function(){return r.g}});n(11381),n(92393),n(69329);var r=n(43739)},69329:function(e,t,n){"use strict";n.d(t,{B0:function(){return o},Ib:function(){return i},Wd:function(){return r},qt:function(){return a}});var r=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],a=[1,0,0,0,1,0,0,0,1],i=1e-6,o=1e-12},43739:function(e,t,n){"use strict";n.d(t,{B:function(){return A},D:function(){return Xe},G:function(){return ut},H:function(){return Ve},I:function(){return ze},J:function(){return We},K:function(){return S},N:function(){return O},O:function(){return ft},P:function(){return ce},Q:function(){return Ze},R:function(){return P},a:function(){return ge},b:function(){return Ee},c:function(){return Ke},d:function(){return Q},e:function(){return $e},f:function(){return J},g:function(){return At},h:function(){return je},i:function(){return dt},j:function(){return Re},k:function(){return z},l:function(){return B},m:function(){return Y},n:function(){return W},o:function(){return G},p:function(){return oe},r:function(){return g},s:function(){return U},u:function(){return Ye}});var r=n(92577),a=n(21930),i=n(11381),o=n.n(i),s=n(92393),u=n(69329),l=s.ZP.vtkErrorMacro,c=s.ZP.vtkWarningMacro,d=0;function f(e){return function(){return l("vtkMath::".concat(e," - NOT IMPLEMENTED"))}}function v(e,t,n,r){for(var a,i=0;i0&&void 0!==arguments[0]?arguments[0]:3,t=Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,r=1/0,a=t,i=e.length;a1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,r=-1/0,a=t,i=e.length;a1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,r=1/0,a=-1/0,i=t,o=e.length;i=0;--a)if(n[a]0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=t-e;return e+n*Math.random()}var F=f("gaussian");function B(e,t,n){return n[0]=e[0]+t[0],n[1]=e[1]+t[1],n[2]=e[2]+t[2],n}function U(e,t,n){return n[0]=e[0]-t[0],n[1]=e[1]-t[1],n[2]=e[2]-t[2],n}function V(e,t){return e[0]*=t,e[1]*=t,e[2]*=t,e}function j(e,t){return e[0]*=t,e[1]*=t,e}function G(e,t,n,r){return r[0]=e[0]+t[0]*n,r[1]=e[1]+t[1]*n,r[2]=e[2]+t[2]*n,r}function H(e,t,n,r){return r[0]=e[0]+t[0]*n,r[1]=e[1]+t[1]*n,r}function Q(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function q(e,t,n){n[0]=e[0]*t[0],n[1]=e[0]*t[1],n[2]=e[0]*t[2],n[3]=e[1]*t[0],n[4]=e[1]*t[1],n[5]=e[1]*t[2],n[6]=e[2]*t[0],n[7]=e[2]*t[1],n[8]=e[2]*t[2]}function z(e,t,n){var r=e[1]*t[2]-e[2]*t[1],a=e[2]*t[0]-e[0]*t[2],i=e[0]*t[1]-e[1]*t[0];return n[0]=r,n[1]=a,n[2]=i,n}function W(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:3;switch(t){case 1:return Math.abs(e);case 2:return Math.sqrt(e[0]*e[0]+e[1]*e[1]);case 3:return Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2]);default:for(var n=0,r=0;ru&&s>l?(a=0,i=1,o=2):u>l?(a=1,i=2,o=0):(a=2,i=0,o=1);var d=e[a]/c,f=e[i]/c,v=e[o]/c,m=Math.sqrt(d*d+v*v);if(0!==r){var p=Math.sin(r),h=Math.cos(r);t&&(t[a]=(v*h-d*f*p)/m,t[i]=p*m,t[o]=(-d*h-f*v*p)/m),n&&(n[a]=(-v*p-d*f*h)/m,n[i]=h*m,n[o]=(d*p-f*v*h)/m)}else t&&(t[a]=v/m,t[i]=0,t[o]=-d/m),n&&(n[a]=-d*f/m,n[i]=m,n[o]=-f*v/m)}function K(e,t,n){var r=Q(t,t);if(0===r)return n[0]=0,n[1]=0,n[2]=0,!1;for(var a=Q(e,t)/r,i=0;i<3;i++)n[i]=t[i];return V(n,a),!0}function X(e,t){return e[0]*t[0]+e[1]*t[1]}function $(e,t,n){var r=X(t,t);if(0===r)return n[0]=0,n[1]=0,!1;for(var a=X(e,t)/r,i=0;i<2;i++)n[i]=t[i];return j(n,a),!0}function J(e,t){return(e[0]-t[0])*(e[0]-t[0])+(e[1]-t[1])*(e[1]-t[1])+(e[2]-t[2])*(e[2]-t[2])}function ee(e,t){var n=[0,0,0];return z(e,t,n),Math.atan2(W(n),Q(e,t))}function te(e,t,n){var r=Math.abs(e-n);return 1/Math.sqrt(2*Math.PI*t)*Math.exp(-Math.pow(r,2)/(2*t))}function ne(e,t,n){var r=Math.abs(e-n);return Math.exp(-Math.pow(r,2)/(2*t))}function re(e,t,n){n[0]=e[0]*t[0],n[1]=e[0]*t[1],n[2]=e[1]*t[0],n[3]=e[1]*t[1]}function ae(e){return Math.sqrt(e[0]*e[0]+e[1]*e[1])}function ie(e){var t=ae(e);return 0!==t&&(e[0]/=t,e[1]/=t),t}function oe(){for(var e=arguments.length,t=new Array(e),n=0;na&&(a=r),(r=Math.abs(e[3*o+2]))>a&&(a=r),i[o]=1/a;a=i[0]*Math.abs(e[0]),n=0,(r=i[1]*Math.abs(e[3]))>=a&&(a=r,n=1),(r=i[2]*Math.abs(e[6]))>=a&&(n=2),0!==n&&(v(e,3,n,0),i[n]=i[0]),t[0]=n,e[3]/=e[0],e[6]/=e[0],e[4]-=e[3]*e[1],e[7]-=e[6]*e[1],a=i[1]*Math.abs(e[4]),n=1,(r=i[2]*Math.abs(e[7]))>=a&&(n=2,v(e,3,1,2),i[2]=i[1]),t[1]=n,e[7]/=e[4],e[5]-=e[3]*e[2],e[8]-=e[6]*e[2]+e[7]*e[5],t[2]=2}function ue(e,t,n){var r=n[t[0]];n[t[0]]=n[0],n[0]=r,r=n[t[1]],n[t[1]]=n[1],n[1]=r-e[3]*n[0],r=n[t[2]],n[t[2]]=n[2],n[2]=r-e[6]*n[0]-e[7]*n[1],n[2]/=e[8],n[1]=(n[1]-e[5]*n[2])/e[4],n[0]=(n[0]-e[1]*n[1]-e[2]*n[2])/e[0]}function le(e,t,n){var r=e[0],a=e[1],i=e[2],o=e[3],s=e[4],u=e[5],l=e[6],c=e[7],d=e[8],f=+oe(s,c,u,d),v=-oe(o,l,u,d),m=+oe(o,l,s,c),p=-oe(a,c,i,d),h=+oe(r,l,i,d),g=-oe(r,l,a,c),A=+oe(a,s,i,u),y=-oe(r,o,i,u),S=+oe(r,o,a,s),b=r*f+a*v+i*m,w=f*t[0]+p*t[1]+A*t[2],I=v*t[0]+h*t[1]+y*t[2],E=m*t[0]+g*t[1]+S*t[2];n[0]=w/b,n[1]=I/b,n[2]=E/b}function ce(e,t,n){var r=e[0]*t[0]+e[1]*t[1]+e[2]*t[2],a=e[3]*t[0]+e[4]*t[1]+e[5]*t[2],i=e[6]*t[0]+e[7]*t[1]+e[8]*t[2];n[0]=r,n[1]=a,n[2]=i}function de(e,t,n){for(var r=(0,a.Z)(e),i=(0,a.Z)(t),o=0;o<3;o++)n[o]=r[0]*i[o]+r[1]*i[o+3]+r[2]*i[o+6],n[o+3]=r[3]*i[o]+r[4]*i[o+3]+r[5]*i[o+6],n[o+6]=r[6]*i[o]+r[7]*i[o+3]+r[8]*i[o+6]}function fe(e,t,n,r,i,o,s){r!==i&&l("Number of columns of A must match number of rows of B.");for(var u=(0,a.Z)(e),c=(0,a.Z)(t),d=0;d2&&void 0!==arguments[2]?arguments[2]:u.Ib;if(e.length!==t.length)return!1;function r(e,r){return Math.abs(e-t[r])<=n}return e.every(r)}var ge=he;function Ae(e){for(var t=0;t<3;t++)e[3*t]=e[3*t+1]=e[3*t+2]=0,e[3*t+t]=1}function ye(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:u.Ib;return ge(e,u.Wd,t)}function be(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:u.Ib;return ge(e,u.qt,t)}function we(e,t){var n=e[0]*e[0],r=e[0]*e[1],a=e[0]*e[2],i=e[0]*e[3],o=e[1]*e[1],s=e[2]*e[2],u=e[3]*e[3],l=e[1]*e[2],c=e[1]*e[3],d=e[2]*e[3],f=o+s+u,v=1/(n+f),m=(n-f)*v;v*=2,t[0]=o*v+m,t[3]=(l+i)*v,t[6]=(c-a)*v,t[1]=(l-i)*v,t[4]=s*v+m,t[7]=(d+r)*v,t[2]=(c+a)*v,t[5]=(d-r)*v,t[8]=u*v+m}function Ie(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(!"".concat(e).includes("e"))return+"".concat(Math.round("".concat(e,"e+").concat(t)),"e-").concat(t);var n="".concat(e).split("e"),r="";return+n[1]+t>0&&(r="+"),+"".concat(Math.round("".concat(+n[0],"e").concat(r).concat(+n[1]+t)),"e-").concat(t)}function Ee(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[0,0,0],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;return t[0]=Ie(e[0],n),t[1]=Ie(e[1],n),t[2]=Ie(e[2],n),t}function Ce(e,t,n,r){var a,i,o,s,l,d,f,v,h,g,A,y,S,b,w,I,E=p(t),C=p(t),D=function(e,t,n){b=e[t],S=e[n],e[t]=b-y*(S+b*g),e[n]=S+y*(b-S*g)};for(ye(t,r),l=0;l3&&Math.abs(n[l])+b===Math.abs(n[l])&&Math.abs(n[s])+b===Math.abs(n[s]))e[l*t+s]=0;else if(Math.abs(e[l*t+s])>f){for(S=n[s]-n[l],Math.abs(S)+b===Math.abs(S)?h=e[l*t+s]/S:(v=.5*S/e[l*t+s],h=1/(Math.abs(v)+Math.sqrt(1+v*v)),v<0&&(h=-h)),w=1/Math.sqrt(1+h*h),g=(y=h*w)/(1+w),S=h*e[l*t+s],C[l]-=S,C[s]+=S,n[l]-=S,n[s]+=S,e[l*t+s]=0,i=0;i<=l-1;i++)D(e,i*t+l,i*t+s);for(i=l+1;i<=s-1;i++)D(e,l*t+i,i*t+s);for(i=s+1;i=20)return c("vtkMath::Jacobi: Error extracting eigenfunctions"),0;for(i=0;i=I||Math.abs(n[a]-I)>1)+(1&t);for(d=0,a=0;a=0&&d++;if(d<_)for(a=0;a(r=u>s?u:s)?l:r,a[o]=1,0!==r&&(a[o]/=r)}var c=Math.abs(t[0])*a[0],d=Math.abs(t[3])*a[1],f=Math.abs(t[6])*a[2];i[0]=0,d>=(r=c)&&(r=d,i[0]=1),f>=r&&(i[0]=2),0!==i[0]&&(m(t,3,i[0],0),a[i[0]]=a[0]);var v=Math.abs(t[4])*a[1],h=Math.abs(t[7])*a[2];i[1]=1,h>=(r=v)&&(i[1]=2,m(t,3,1,2)),i[2]=2;var g=0;if(pe(t)<0){g=1;for(var A=0;A<9;A++)t[A]=-t[A]}var y=p(4);if(De(t,y),we(y,t),g)for(var S=0;S<9;S++)t[S]=-t[S];1!==i[1]&&m(t,3,i[1],1),0!==i[0]&&m(t,3,i[0],0)}function Oe(e,t,n){var r,i,o,s,u,l;if(Ce((0,a.Z)(e),3,t,n),t[0]!==t[1]||t[0]!==t[2]){for(ve(n,n),r=0;r<3;r++)if(t[(r+1)%3]===t[(r+2)%3]){for(l=Math.abs(n[3*r]),s=0,i=1;i<3;i++)l<(u=Math.abs(n[3*r+i]))&&(l=u,s=i);s!==r&&(u=t[s],t[s]=t[r],t[r]=u,v(n,3,r,s)),n[3*s+s]<0&&(n[3*s]=-n[3*s],n[3*s+1]=-n[3*s+1],n[3*s+2]=-n[3*s+2]),o=(s+2)%3,n[3*(i=(s+1)%3)]=0,n[3*i+1]=0,n[3*i+2]=0,n[3*i+i]=1;var c=z([n[3*s],n[3*s+1],n[3*s+2]],[n[3*i],n[3*i+1],n[3*i+2]],[]);Y(c);for(var d=z(c,[n[3*s],n[3*s+1],n[3*s+2]],[]),f=0;f<3;f++)n[3*o+f]=c[f],n[3*i+f]=d[f];return void ve(n,n)}for(l=Math.abs(n[0]),s=0,r=1;r<3;r++)l<(u=Math.abs(n[3*r]))&&(l=u,s=r);if(0!==s){var m=t[s];t[s]=t[0],t[0]=m,v(n,3,s,0)}if(Math.abs(n[4])o&&(o=d);if(0===o)return c("Unable to factor linear system"),0;v[r]=1/o}for(a=0;a=o&&(o=l,f=r)}if(a!==f){for(i=0;i=0)for(i=o;i<=a-1;i++)u-=e[a*r+i]*n[i];else 0!==u&&(o=a);n[a]=u}for(a=r-1;a>=0;a--){for(u=n[a],i=a+1;i3&&void 0!==arguments[3]?arguments[3]:null,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,i=r||p(n),o=a||p(n);if(0===Te(e,i,n))return null;for(var s=0;sr&&(r=Math.abs(e[a*t+i]));for(var o=0;o6&&void 0!==arguments[6])||arguments[6];if(eu.B0&&(m=0,v[d]=0);if(m&&1===a)return c("Detected homogeneous system (Y=0), calling SolveHomogeneousLeastSquares()"),Fe(e,t,n,i);if(m)g=1;else for(d=0;d1&&void 0!==arguments[1]?arguments[1]:[0,.5,1];switch(e.length){case 3:return t[0]=17*parseInt(e[0],16)/255,t[1]=17*parseInt(e[1],16)/255,t[2]=17*parseInt(e[2],16)/255,t;case 4:return t[0]=17*parseInt(e[1],16)/255,t[1]=17*parseInt(e[2],16)/255,t[2]=17*parseInt(e[3],16)/255,t;case 6:return t[0]=parseInt(e.substr(0,2),16)/255,t[1]=parseInt(e.substr(2,2),16)/255,t[2]=parseInt(e.substr(4,2),16)/255,t;case 7:return t[0]=parseInt(e.substr(1,2),16)/255,t[1]=parseInt(e.substr(3,2),16)/255,t[2]=parseInt(e.substr(5,2),16)/255,t;case 9:return t[0]=parseInt(e.substr(1,2),16)/255,t[1]=parseInt(e.substr(3,2),16)/255,t[2]=parseInt(e.substr(5,2),16)/255,t[3]=parseInt(e.substr(7,2),16)/255,t;default:return t}}function Ve(e,t){var n,a,i=(0,r.Z)(e,3),o=i[0],s=i[1],u=i[2],l=1/6,c=o,d=o;s>c?c=s:sc?c=u:u0?(c-d)/c:0)>0?(n=o===c?l*(s-u)/(c-d):s===c?1/3+l*(u-o)/(c-d):2/3+l*(o-s)/(c-d))<0&&(n+=1):n=0,t[0]=n,t[1]=a,t[2]=f}function je(e,t){var n,a,i,o=(0,r.Z)(e,3),s=o[0],u=o[1],l=o[2],c=1/3,d=1/6,f=2/3,v=5/6;s>d&&s<=c?(a=1,n=(c-s)/d,i=0):s>c&&s<=.5?(a=1,i=(s-c)/d,n=0):s>.5&&s<=f?(i=1,a=(f-s)/d,n=0):s>f&&s<=v?(i=1,n=(s-f)/d,a=0):s>v&&s<=1?(n=1,i=(1-s)/d,a=0):(n=1,a=s/d,i=0),n=u*n+(1-u),a=u*a+(1-u),i=u*i+(1-u),n*=l,a*=l,i*=l,t[0]=n,t[1]=a,t[2]=i}function Ge(e,t){var n=(0,r.Z)(e,3),a=(n[0]+16)/116,i=n[1]/500+a,o=a-n[2]/200;a=Math.pow(a,3)>.008856?Math.pow(a,3):(a-16/116)/7.787,i=Math.pow(i,3)>.008856?Math.pow(i,3):(i-16/116)/7.787,o=Math.pow(o,3)>.008856?Math.pow(o,3):(o-16/116)/7.787;t[0]=.9505*i,t[1]=1*a,t[2]=1.089*o}function He(e,t){var n=(0,r.Z)(e,3),a=n[0]/.9505,i=n[1]/1,o=n[2]/1.089;a=a>.008856?Math.pow(a,1/3):7.787*a+16/116,i=i>.008856?Math.pow(i,1/3):7.787*i+16/116,o=o>.008856?Math.pow(o,1/3):7.787*o+16/116,t[0]=116*i-16,t[1]=500*(a-i),t[2]=200*(i-o)}function Qe(e,t){var n=(0,r.Z)(e,3),a=n[0],i=n[1],o=n[2],s=3.2406*a+-1.5372*i+-.4986*o,u=-.9689*a+1.8758*i+.0415*o,l=.0557*a+-.204*i+1.057*o;s>.0031308?s=1.055*Math.pow(s,1/2.4)-.055:s*=12.92,u>.0031308?u=1.055*Math.pow(u,1/2.4)-.055:u*=12.92,l>.0031308?l=1.055*Math.pow(l,1/2.4)-.055:l*=12.92;var c=s;c1&&(s/=c,u/=c,l/=c),s<0&&(s=0),u<0&&(u=0),l<0&&(l=0),t[0]=s,t[1]=u,t[2]=l}function qe(e,t){var n=(0,r.Z)(e,3),a=n[0],i=n[1],o=n[2];a>.04045?a=Math.pow((a+.055)/1.055,2.4):a/=12.92,i>.04045?i=Math.pow((i+.055)/1.055,2.4):i/=12.92,o>.04045?o=Math.pow((o+.055)/1.055,2.4):o/=12.92,t[0]=.4124*a+.3576*i+.1805*o,t[1]=.2126*a+.7152*i+.0722*o,t[2]=.0193*a+.1192*i+.9505*o}function ze(e,t){var n=[0,0,0];qe(e,n),He(n,t)}function We(e,t){var n=[0,0,0];Ge(e,n),Qe(n,t)}function Ye(e){return e[0]=1,e[1]=-1,e[2]=1,e[3]=-1,e[4]=1,e[5]=-1,e}function Ze(e){return!(e[1]-e[0]<0)}function Ke(e,t,n){return n[0]=Math.min(e[0],t[0]),n[1]=Math.max(e[0],t[0]),n[2]=Math.min(e[1],t[1]),n[3]=Math.max(e[1],t[1]),n[4]=Math.min(e[2],t[2]),n[5]=Math.max(e[2],t[2]),n}function Xe(e,t,n){return en?n:e}function $e(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[0,0,0];return r[0]=Xe(e[0],t[0],n[0]),r[1]=Xe(e[1],t[1],n[1]),r[2]=Xe(e[2],t[2],n[2]),r}function Je(e,t){var n=0;return t[0]!==t[1]&&(n=((n=et[1]?t[1]:e)-t[0])/(t[1]-t[0])),n}var et=f("GetScalarTypeFittingRange"),tt=f("GetAdjustedScalarRange");function nt(e,t){if(!e||!t)return 0;for(var n=0;n<6;n+=2)if(e[n]t[n+1]||e[n+1]t[n+1])return 0;return 1}function rt(e,t,n){if(!e||!t)return 0;for(var r=0;r<6;r+=2)if(e[r]+n[r/2]t[r+1]||e[r+1]+n[r/2]t[r+1])return 0;return 1}function at(e,t,n){if(!e||!t||!n)return 0;for(var r=0;r<3;r++)if(e[r]+n[r]t[2*r+1])return 0;return 1}function it(e,t,n,r){for(var a=p(3),i=p(3),o=p(3),s=p(3),u=p(3),l=p(3),c=0;c<3;++c)a[c]=e[c]-t[c],i[c]=t[c]-n[c],o[c]=n[c]-e[c],s[c]=-a[c],u[c]=-i[c],l[c]=-o[c];var d=W(s),f=W(u),v=W(o),m=p(3);z(a,i,m);for(var h=W(m),g=d*f*v/(2*h),A=2*h*h,y=f*f*Q(a,l)/A,S=v*v*Q(s,i)/A,b=d*d*Q(o,u)/A,w=0;w<3;++w)r[w]=y*e[w]+S*t[w]+b*n[w];return g}var ot=1/0,st=-1/0,ut=function(e){return!Number.isFinite(e)},lt=Number.isFinite,ct=Number.isNaN,dt=ct;function ft(){return[].concat([Number.MAX_VALUE,-Number.MAX_VALUE,Number.MAX_VALUE,-Number.MAX_VALUE,Number.MAX_VALUE,-Number.MAX_VALUE])}function vt(e){for(var t=-1,n=-1,r=0;rt&&(n=r,t=a)}return n}function mt(e){var t=Math.floor(255*e);return t>15?t.toString(16):"0".concat(t.toString(16))}function pt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"#";return"".concat(t).concat(e.map(mt).join(""))}function ht(e){return Math.round(255*e)}function gt(e){return 3===e.length?"rgb(".concat(e.map(ht).join(", "),")"):"rgba(".concat(ht(e[0]||0),", ").concat(ht(e[1]||0),", ").concat(ht(e[2]||0),", ").concat(e[3]||0,")")}var At={Pi:h,radiansFromDegrees:g,degreesFromRadians:A,round:y,floor:S,ceil:b,ceilLog2:_,min:w,max:I,arrayMin:E,arrayMax:C,arrayRange:D,isPowerOfTwo:P,nearestPowerOfTwo:O,factorial:M,binomial:T,beginCombination:x,nextCombination:R,randomSeed:L,getSeed:k,random:N,gaussian:F,add:B,subtract:U,multiplyScalar:V,multiplyScalar2D:j,multiplyAccumulate:G,multiplyAccumulate2D:H,dot:Q,outer:q,cross:z,norm:W,normalize:Y,perpendiculars:Z,projectVector:K,projectVector2D:$,distance2BetweenPoints:J,angleBetweenVectors:ee,gaussianAmplitude:te,gaussianWeight:ne,dot2D:X,outer2D:re,norm2D:ae,normalize2D:ie,determinant2x2:oe,LUFactor3x3:se,LUSolve3x3:ue,linearSolve3x3:le,multiply3x3_vect3:ce,multiply3x3_mat3:de,multiplyMatrix:fe,transpose3x3:ve,invert3x3:me,identity3x3:Ae,identity:ye,isIdentity:Se,isIdentity3x3:be,determinant3x3:pe,quaternionToMatrix3x3:we,areEquals:he,areMatricesEqual:ge,roundNumber:Ie,roundVector:Ee,matrix3x3ToQuaternion:De,multiplyQuaternion:_e,orthogonalize3x3:Me,diagonalize3x3:Oe,singularValueDecomposition3x3:Pe,solveLinearSystem:Re,invertMatrix:Le,luFactorLinearSystem:Te,luSolveLinearSystem:xe,estimateMatrixCondition:ke,jacobi:Ne,jacobiN:Ce,solveHomogeneousLeastSquares:Fe,solveLeastSquares:Be,hex2float:Ue,rgb2hsv:Ve,hsv2rgb:je,lab2xyz:Ge,xyz2lab:He,xyz2rgb:Qe,rgb2xyz:qe,rgb2lab:ze,lab2rgb:We,uninitializeBounds:Ye,areBoundsInitialized:Ze,computeBoundsFromPoints:Ke,clampValue:Xe,clampVector:$e,clampAndNormalizeValue:Je,getScalarTypeFittingRange:et,getAdjustedScalarRange:tt,extentIsWithinOtherExtent:nt,boundsIsWithinOtherBounds:rt,pointIsWithinBounds:at,solve3PointCircle:it,inf:ot,negInf:st,isInf:ut,isNan:ct,isNaN:ct,isFinite:lt,createUninitializedBounds:ft,getMajorAxisIndex:vt,floatToHex2:mt,floatRGB2HexCode:pt,float2CssRGBA:gt}},81291:function(e,t,n){"use strict";n.d(t,{Z:function(){return m}});var r=n(21930),a=n(8821),i=n(85169),o=n(64950),s=n(82451),u=n(6807),l=n(43739),c=n(69329),d=function(e){return e},f=1e-6,v=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];(0,a.Z)(this,e),this.matrix=o.identity(new Float64Array(16)),this.tmp=new Float64Array(3),this.angleConv=t?s.c$:d}return(0,i.Z)(e,[{key:"rotateFromDirections",value:function(e,t){var n=new Float64Array(3),r=new Float64Array(3),a=new Float64Array(16);u.set(n,e[0],e[1],e[2]),u.set(r,t[0],t[1],t[2]),u.normalize(n,n),u.normalize(r,r);var i=u.dot(n,r);return i>=1||(u.cross(this.tmp,n,r),u.length(this.tmp)1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:-1;if((0,l.a)(c.Wd,this.matrix))return this;for(var r=-1===n?e.length:t+3*n,a=t;a=0?t.annotationArray[a].annotation!==r&&(t.annotationArray[a].annotation=r,i=!0):(t.annotationArray.push({value:n,annotation:r}),a=t.annotationArray.length-1,i=!0),i&&(e.updateAnnotatedValueMap(),e.modified()),a},e.getNumberOfAnnotatedValues=function(){return t.annotationArray.length},e.getAnnotatedValue=function(e){return e<0||e>=t.annotationArray.length?null:t.annotationArray[e].value},e.getAnnotation=function(e){return void 0===t.annotationArray[e]?null:t.annotationArray[e].annotation},e.getAnnotatedValueIndex=function(n){return t.annotationArray.length?e.checkForAnnotatedValue(n):-1},e.removeAnnotation=function(n){var r=e.checkForAnnotatedValue(n),a=r>=0;return a&&(t.annotationArray.splice(r,1),e.updateAnnotatedValueMap(),e.modified()),a},e.resetAnnotations=function(){t.annotationArray=[],t.annotatedValueMap=[],e.modified()},e.getAnnotationColor=function(n,r){if(t.indexedLookup){var a=e.getAnnotatedValueIndex(n);e.getIndexedColor(a,r)}else e.getColor(parseFloat(n),r),r[3]=1},e.checkForAnnotatedValue=function(t){return e.getAnnotatedValueIndexInternal(t)},e.getAnnotatedValueIndexInternal=function(e){if(void 0!==t.annotatedValueMap[e]){var n=t.annotationArray.length;return t.annotatedValueMap[e]%n}return-1},e.getIndexedColor=function(e,t){t[0]=0,t[1]=0,t[2]=0,t[3]=0},e.updateAnnotatedValueMap=function(){t.annotatedValueMap=[];for(var e=t.annotationArray.length,n=0;n1?e.mapVectorsThroughTable(t,s,l.RGBA,-1,-1):(v<0&&(v=0),v>=o&&(v=o-1),e.mapScalarsThroughTable(t,s,l.RGBA,v))}return s},e.mapVectorsToMagnitude=function(e,t,n){for(var r=e.getNumberOfTuples(),a=e.getNumberOfComponents(),i=t.getData(),o=e.getData(),s=0;s=d&&(l=d-1)):(-1===u&&(u=e.getVectorSize()),u<=0?(l=0,u=d):(l<0&&(l=0),l>=d&&(l=d-1),l+u>d&&(u=d-l)),s!==c.MAGNITUDE||1!==d&&1!==u||(s=c.COMPONENT));var f=0;switch(l>0&&(f=l),s){case c.COMPONENT:e.mapScalarsThroughTable(t,n,r,f);break;case c.RGBCOLORS:break;case c.MAGNITUDE:default:var v=i.ZP.newInstance({numberOfComponents:1,values:new Float32Array(t.getNumberOfTuples())});e.mapVectorsToMagnitude(t,v,u),e.mapScalarsThroughTable(v,n,r,0)}},e.luminanceToRGBA=function(e,t,n,r){for(var a=r(n),i=t.getData(),o=e.getData(),s=i.length,u=0,l=0;l=1&&n.getDataType()===d.UNSIGNED_CHAR)return n;var s=i.ZP.newInstance({numberOfComponents:4,empty:!0,size:4*a,dataType:d.UNSIGNED_CHAR});if(a<=0)return s;o=(o=o>0?o:0)<1?o:1;var u=m;switch(n.getDataType()!==d.FLOAT&&n.getDataType()!==d.DOUBLE||(u=p),r){case 1:e.luminanceToRGBA(s,n,o,u);break;case 2:e.luminanceAlphaToRGBA(s,n,u);break;case 3:e.rGBToRGBA(s,n,o,u);break;case 4:e.rGBAToRGBA(s,n,o,u);break;default:return v("Cannot convert colors"),null}return s},e.usingLogScale=function(){return!1},e.getNumberOfAvailableColors=function(){return 16777216},e.setRange=function(t,n){return e.setMappingRange(t,n)},e.getRange=function(){return e.getMappingRange()}}var g={alpha:1,vectorComponent:0,vectorSize:-1,vectorMode:c.COMPONENT,mappingRange:null,annotationArray:null,annotatedValueMap:null,indexedLookup:!1};function A(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,g,n),a.ZP.obj(e,t),t.mappingRange=[0,255],t.annotationArray=[],t.annotatedValueMap=[],a.ZP.setGet(e,t,["vectorSize","vectorComponent","vectorMode","alpha","indexedLookup"]),a.ZP.setArray(e,t,["mappingRange"],2),a.ZP.getArray(e,t,["mappingRange"]),h(e,t)}var y=function(e){for(var t=1;tt?o:t,e[2]=un?l:n,e[4]=cr?d:r,e}function g(e,t){if(0===t.length)return e;if(Array.isArray(t[0]))for(var n=0;no?t:o,e[2]=n,e[3]=n>l?n:l,e[4]=r,e[5]=r>d?r:d,i!==t||u!==n||c!==r}function S(e,t,n,r){var a=(0,s.Z)(e,6),i=a[0],o=a[1],u=a[2],l=a[3],c=a[4],d=a[5];return e[0]=t=0?(e[0]*=t,e[1]*=t):(e[0]=t*e[1],e[1]=t*e[0]),n>=0?(e[2]*=n,e[3]*=n):(e[2]=n*e[3],e[3]=n*e[2]),r>=0?(e[4]*=r,e[5]*=r):(e[4]=r*e[5],e[5]=r*e[4]),!0)}function I(e){return[.5*(e[0]+e[1]),.5*(e[2]+e[3]),.5*(e[4]+e[5])]}function E(e,t){return e[2*t+1]-e[2*t]}function C(e){return[E(e,0),E(e,1),E(e,2)]}function D(e){return e.slice(0,2)}function _(e){return e.slice(2,4)}function M(e){return e.slice(4,6)}function O(e){var t=C(e);return t[0]>t[1]?t[0]>t[2]?t[0]:t[2]:t[1]>t[2]?t[1]:t[2]}function P(e){if(v(e)){var t=C(e);return Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2])}return null}function T(e){return[e[0],e[2],e[4]]}function x(e){return[e[1],e[3],e[5]]}function R(e,t){return e<=0&&t>=0||e>=0&&t<=0}function L(e,t){for(var n=0,r=0;r<2;r++)for(var a=2;a<4;a++)for(var i=4;i<6;i++)t[n]=[e[r],e[a],e[i]],n++;return t}function k(e,t,n){return t[0]=e[0],t[1]=e[2],t[2]=e[4],n[0]=e[1],n[1]=e[3],n[2]=e[5],t}function N(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return t[0]=.5*(e[1]-e[0]),t[1]=.5*(e[3]-e[2]),t[2]=.5*(e[5]-e[4]),t}function F(e,t,n,r){for(var a=[].concat(d),i=e.getData(),o=0;oe[2*c+1]?(o[c]=0,l[c]=e[2*c+1],i=!1):o[c]=2;if(i)return r[0]=t[0],r[1]=t[1],r[2]=t[2],a[0]=0,1;for(var d=0;d<3;d++)2!==o[d]&&0!==n[d]?u[d]=(l[d]-t[d])/n[d]:u[d]=-1;for(var f=0;f<3;f++)u[s]1||u[s]<0)return 0;a[0]=u[s];for(var v=0;v<3;v++)if(s!==v){if(r[v]=t[v]+u[s]*n[v],r[v]e[2*v+1])return 0}else r[v]=l[v];return 1}function U(e,t,n){for(var r=[],a=0,i=1,o=1,s=4;s<=5;++s){r[2]=e[s];for(var u=2;u<=3;++u){r[1]=e[u];for(var c=0;c<=1;++c)if(r[0]=e[c],a=l.ZP.evaluate(n,t,r),o&&(i=a>=0?1:-1,o=0),0===a||i>0&&a<0||i<0&&a>0)return 1}}return 0}function V(e,t){if(!v(e)||!v(t))return!1;for(var n,r=[0,0,0,0,0,0],a=0;a<3;a++)if(n=!1,t[2*a]>=e[2*a]&&t[2*a]<=e[2*a+1]?(n=!0,r[2*a]=t[2*a]):e[2*a]>=t[2*a]&&e[2*a]<=t[2*a+1]&&(n=!0,r[2*a]=e[2*a]),t[2*a+1]>=e[2*a]&&t[2*a+1]<=e[2*a+1]?(n=!0,r[2*a+1]=t[2*a+1]):e[2*a+1]>=t[2*a]&&e[2*a+1]<=t[2*a+1]&&(n=!0,r[2*a+1]=e[2*a+1]),!n)return!1;return e[0]=r[0],e[1]=r[1],e[2]=r[2],e[3]=r[3],e[4]=r[4],e[5]=r[5],!0}function j(e,t){if(!v(e)||!v(t))return!1;for(var n=0;n<3;n++)if(!(t[2*n]>=e[2*n]&&t[2*n]<=e[2*n+1]||e[2*n]>=t[2*n]&&e[2*n]<=t[2*n+1]||t[2*n+1]>=e[2*n]&&t[2*n+1]<=e[2*n+1]||e[2*n+1]>=t[2*n]&&e[2*n+1]<=t[2*n+1]))return!1;return!0}function G(e,t,n,r){return!(te[1])&&(!(ne[3])&&!(re[5]))}function H(e,t,n){for(var r=[[0,1,2,3,4,5,6,7],[0,1,4,5,2,3,6,7],[0,2,4,6,1,3,5,7]],a=[0,0,0,0,0,0,0,0],i=0,o=0;o<2;o++)for(var s=2;s<4;s++)for(var u=4;u<6;u++){var c=[e[o],e[s],e[u]];a[i++]=l.ZP.evaluate(n,t,c)}for(var d=2;d--&&!(R(a[r[d][0]],a[r[d][4]])&&R(a[r[d][1]],a[r[d][5]])&&R(a[r[d][2]],a[r[d][6]])&&R(a[r[d][3]],a[r[d][7]])););if(d<0)return!1;for(var f=Math.sign(n[d]),v=Math.abs((e[2*d+1]-e[2*d])*n[d]),m=f>0?1:0,p=0;p<4;p++)if(0!==v){var h=Math.abs(a[r[d][p]])/v;f>0&&hm&&(m=h)}var g=(1-m)*e[2*d]+m*e[2*d+1];return f>0?e[2*d]=g:e[2*d+1]=g,!0}var Q=function(){function e(t){(0,a.Z)(this,e),this.bounds=t,this.bounds||(this.bounds=new Float64Array(d))}return(0,i.Z)(e,[{key:"getBounds",value:function(){return this.bounds}},{key:"equals",value:function(e){return f(this.bounds,e)}},{key:"isValid",value:function(){return v(this.bounds)}},{key:"setBounds",value:function(e){return m(this.bounds,e)}},{key:"reset",value:function(){return p(this.bounds)}},{key:"addPoint",value:function(){for(var e=arguments.length,t=new Array(e),n=0;n=0&&e=0},e.getArrayName=function(e){var n=t.arrays[e];return n?n.data.getName():""},e.getCopyFieldFlags=function(){return t.copyFieldFlags},e.getFlag=function(e){return t.copyFieldFlags[e]},e.passData=function(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:-1;n.getArrays().forEach((function(u){var l=e.getFlag(u.getName());if(!1!==l&&(!t.doCopyAllOff||!0===l)&&u){var c=e.getArrayByName(u.getName());if(c)if(u.getNumberOfComponents()===c.getNumberOfComponents())if(r>-1&&r-1?i:r;c.insertTuple(d,u.getTuple(r))}else c.insertTuples(0,u.getTuples());else s("Unhandled case in passData");else if(r<0||r>u.getNumberOfTuples())e.addArray(u),n.getAttributes(u).forEach((function(t){e.setAttribute(u,t)}));else{var f=u.getNumberOfComponents(),v=u.getNumberOfValues(),m=i>-1?i:r;v<=m*f&&(v=(m+1)*f),(c=o.ZP.newInstance({name:u.getName(),dataType:u.getDataType(),numberOfComponents:f,values:a.ZP.newTypedArray(u.getDataType(),v),size:0})).insertTuple(m,u.getTuple(r)),e.addArray(c),n.getAttributes(u).forEach((function(t){e.setAttribute(c,t)}))}}}))},e.interpolateData=function(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:-1,l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:-1,c=arguments.length>4&&void 0!==arguments[4]?arguments[4]:.5;n.getArrays().forEach((function(d){var f=e.getFlag(d.getName());if(!1!==f&&(!t.doCopyAllOff||!0===f)&&d){var v=e.getArrayByName(d.getName());if(v)if(d.getNumberOfComponents()===v.getNumberOfComponents())if(r>-1&&r-1?l:r;v.interpolateTuple(m,d,r,d,i,c),u("Unexpected case in interpolateData")}else v.insertTuples(d.getTuples());else s("Unhandled case in interpolateData");else if(r<0||i<0||r>d.getNumberOfTuples())e.addArray(d),n.getAttributes(d).forEach((function(t){e.setAttribute(d,t)}));else{var p=d.getNumberOfComponents(),h=d.getNumberOfValues(),g=l>-1?l:r;h<=g*p&&(h=(g+1)*p),(v=o.ZP.newInstance({name:d.getName(),dataType:d.getDataType(),numberOfComponents:p,values:a.ZP.newTypedArray(d.getDataType(),h),size:0})).interpolateTuple(g,d,r,d,i,c),e.addArray(v),n.getAttributes(d).forEach((function(t){e.setAttribute(v,t)}))}}}))},e.copyFieldOn=function(e){t.copyFieldFlags[e]=!0},e.copyFieldOff=function(e){t.copyFieldFlags[e]=!1},e.copyAllOn=function(){t.doCopyAllOn&&!t.doCopyAllOff||(t.doCopyAllOn=!0,t.doCopyAllOff=!1,e.modified())},e.copyAllOff=function(){!t.doCopyAllOn&&t.doCopyAllOff||(t.doCopyAllOn=!1,t.doCopyAllOff=!0,e.modified())},e.clearFieldFlags=function(){t.copyFieldFlags={}},e.deepCopy=function(e){t.arrays=e.getArrays().map((function(e){var t=e.newClone();return t.deepCopy(e),{data:t}}))},e.copyFlags=function(e){return e.getCopyFieldFlags().map((function(e){return e}))},e.reset=function(){return t.arrays.forEach((function(e){return e.data.reset()}))},e.getMTime=function(){return t.arrays.reduce((function(e,t){return t.data.getMTime()>e?t.data.getMTime():e}),t.mtime)},e.getNumberOfComponents=function(){return t.arrays.reduce((function(e,t){return e+t.data.getNumberOfComponents()}),0)},e.getNumberOfTuples=function(){return t.arrays.length>0?t.arrays[0].getNumberOfTuples():0},e.getState=function(){var e=n();return e&&(e.arrays=t.arrays.map((function(e){return{data:e.data.getState()}}))),e}}var c={arrays:[],copyFieldFlags:[],doCopyAllOn:!0,doCopyAllOff:!1};function d(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,c,n),a.ZP.obj(e,t),l(e,t)}var f={newInstance:a.ZP.newInstance(d,"vtkFieldData"),extend:d},v={AttributeCopyOperations:{COPYTUPLE:0,INTERPOLATE:1,PASSDATA:2,ALLCOPY:3},AttributeLimitTypes:{MAX:0,EXACT:1,NOLIMIT:2},AttributeTypes:{SCALARS:0,VECTORS:1,NORMALS:2,TCOORDS:3,TENSORS:4,GLOBALIDS:5,PEDIGREEIDS:6,EDGEFLAG:7,NUM_ATTRIBUTES:8},CellGhostTypes:{DUPLICATECELL:1,HIGHCONNECTIVITYCELL:2,LOWCONNECTIVITYCELL:4,REFINEDCELL:8,EXTERIORCELL:16,HIDDENCELL:32},DesiredOutputPrecision:{DEFAULT:0,SINGLE:1,DOUBLE:2},PointGhostTypes:{DUPLICATEPOINT:1,HIDDENPOINT:2},ghostArrayName:"vtkGhostType"};function m(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}var p=v.AttributeTypes,h=v.AttributeCopyOperations,g=a.ZP.vtkWarningMacro;function A(e,t){var n=["Scalars","Vectors","Normals","TCoords","Tensors","GlobalIds","PedigreeIds"];function r(e){var t=n.find((function(t){return p[t.toUpperCase()]===e||"number"!=typeof e&&t.toLowerCase()===e.toLowerCase()}));return void 0===t&&(t=null),t}t.classHierarchy.push("vtkDataSetAttributes"),e.checkNumberOfComponents=function(e){return!0},e.setAttribute=function(n,a){var i=r(a);if(n&&"PEDIGREEIDS"===i.toUpperCase()&&!n.isA("vtkDataArray"))return g("Cannot set attribute ".concat(i,". The attribute must be a vtkDataArray.")),-1;if(n&&!e.checkNumberOfComponents(n,i))return g("Cannot set attribute ".concat(i,". Incorrect number of components.")),-1;var o=t["active".concat(i)];if(o>=0&&o=0&&n2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,y,n),f.extend(e,t,n),a.ZP.setGet(e,t,["activeScalars","activeNormals","activeTCoords","activeVectors","activeTensors","activeGlobalIds","activePedigreeIds"]),t.arrays||(t.arrays={}),A(e,t)}var b=function(e){for(var t=1;t1&&void 0!==arguments[1]&&arguments[1];n(e,r),E.forEach((function(n){t[n]=b.newInstance(),t[n].shallowCopy(e.getReferenceByName(n))}))}}var D={};function _(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,D,n),a.ZP.obj(e,t),a.ZP.setGet(e,t,E),C(e,t)}var M=function(e){for(var t=1;te[1]||e[2]>e[3]||e[4]>e[5]?v.EMPTY:3===t?v.XYZ_GRID:2===t?e[0]===e[1]?v.YZ_PLANE:e[2]===e[3]?v.XZ_PLANE:v.XY_PLANE:1===t?e[0]1&&(n*=t[r]-1)}return n},e.getNumberOfPoints=function(){var t=e.getDimensions();return t[0]*t[1]*t[2]},e.getPoint=function(n){var r=e.getDimensions();if(0===r[0]||0===r[1]||0===r[2])return A("Requesting a point from an empty image."),null;var a=new Float64Array(3);switch(t.dataDescription){case c.EMPTY:return null;case c.SINGLE_POINT:break;case c.X_LINE:a[0]=n;break;case c.Y_LINE:a[1]=n;break;case c.Z_LINE:a[2]=n;break;case c.XY_PLANE:a[0]=n%r[0],a[1]=n/r[0];break;case c.YZ_PLANE:a[1]=n%r[1],a[2]=n/r[1];break;case c.XZ_PLANE:a[0]=n%r[0],a[2]=n/r[0];break;case c.XYZ_GRID:a[0]=n%r[0],a[1]=n/r[0]%r[1],a[2]=n/(r[0]*r[1]);break;default:A("Invalid dataDescription")}var i=[0,0,0];return e.indexToWorld(a,i),i},e.getBounds=function(){return e.extentToBounds(e.getSpatialExtent())},e.extentToBounds=function(t){for(var n=[[t[0],t[2],t[4]],[t[1],t[2],t[4]],[t[0],t[3],t[4]],[t[1],t[3],t[4]],[t[0],t[2],t[5]],[t[1],t[2],t[5]],[t[0],t[3],t[5]],[t[1],t[3],t[5]]],r=(0,a.Z)(s.ZP.INIT_BOUNDS),i=[],o=0;o<8;++o)e.indexToWorld(n[o],i),s.ZP.addPoint.apply(s.ZP,[r].concat(i));return r},e.getSpatialExtent=function(){return s.ZP.inflate((0,a.Z)(t.extent),.5)},e.computeTransforms=function(){p.fromTranslation(t.indexToWorld,t.origin),t.indexToWorld[0]=t.direction[0],t.indexToWorld[1]=t.direction[1],t.indexToWorld[2]=t.direction[2],t.indexToWorld[4]=t.direction[3],t.indexToWorld[5]=t.direction[4],t.indexToWorld[6]=t.direction[5],t.indexToWorld[8]=t.direction[6],t.indexToWorld[9]=t.direction[7],t.indexToWorld[10]=t.direction[8],p.scale(t.indexToWorld,t.indexToWorld,t.spacing),p.invert(t.worldToIndex,t.indexToWorld)},e.indexToWorld=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return h.transformMat4(n,e,t.indexToWorld),n},e.indexToWorldVec3=e.indexToWorld,e.worldToIndex=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return h.transformMat4(n,e,t.worldToIndex),n},e.worldToIndexVec3=e.worldToIndex,e.indexToWorldBounds=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r=[0,0,0],a=[0,0,0];s.ZP.computeCornerPoints(e,r,a);var i=[0,0,0],u=[0,0,0];return h.transformMat4(i,r,t.indexToWorld),h.transformMat4(u,a,t.indexToWorld),(0,o.c)(i,u,n)},e.worldToIndexBounds=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r=[0,0,0],a=[0,0,0];s.ZP.computeCornerPoints(e,r,a);var i=[0,0,0],u=[0,0,0];return h.transformMat4(i,r,t.worldToIndex),h.transformMat4(u,a,t.worldToIndex),(0,o.c)(i,u,n)},e.onModified(e.computeTransforms),e.computeTransforms(),e.getCenter=function(){return s.ZP.getCenter(e.getBounds())},e.computeHistogram=function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=[0,0,0,0,0,0];e.worldToIndexBounds(t,r);var a=[0,0,0],i=[0,0,0];s.ZP.computeCornerPoints(r,a,i),(0,o.b)(a,a),(0,o.b)(i,i);var u=e.getDimensions();(0,o.e)(a,[0,0,0],[u[0]-1,u[1]-1,u[2]-1],a),(0,o.e)(i,[0,0,0],[u[0]-1,u[1]-1,u[2]-1],i);for(var l=u[0],c=u[0]*u[1],d=e.getPointData().getScalars().getData(),f=-1/0,v=1/0,m=0,p=0,h=0,g=a[2];g<=i[2];g++)for(var A=a[1];A<=i[1];A++)for(var y=a[0]+A*l+g*c,S=a[0];S<=i[0];S++){if(!n||n([S,A,g],r)){var b=d[y];b>f&&(f=b),b0?p/h:0,I=h?Math.abs(m/h-w*w):0,E=Math.sqrt(I);return{minimum:v,maximum:f,average:w,variance:I,sigma:E,count:h}},e.computeIncrements=function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=[],r=t,a=0;a<3;++a)n[a]=r,r*=e[2*a+1]-e[2*a]+1;return n},e.computeOffsetIndex=function(t){var n=(0,r.Z)(t,3),a=n[0],i=n[1],o=n[2],s=e.getExtent(),u=e.getPointData().getScalars().getNumberOfComponents(),l=e.computeIncrements(s,u);return Math.floor((Math.round(a)-s[0])*l[0]+(Math.round(i)-s[2])*l[1]+(Math.round(o)-s[4])*l[2])},e.getOffsetIndexFromWorld=function(t){for(var n=e.getExtent(),r=e.worldToIndex(t),a=0;a<3;++a)if(r[a]n[2*a+1])return A("GetScalarPointer: Pixel ".concat(r," is not in memory. Current extent = ").concat(n)),NaN;return e.computeOffsetIndex(r)},e.getScalarValueFromWorld=function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=e.getPointData().getScalars().getNumberOfComponents();if(n<0||n>=r)return A("GetScalarPointer: Scalar Component ".concat(n," is not within bounds. Current Scalar numberOfComponents: ").concat(r)),NaN;var a=e.getOffsetIndexFromWorld(t);return Number.isNaN(a)?a:e.getPointData().getScalars().getComponent(a,n)}}var S={direction:null,indexToWorld:null,worldToIndex:null,spacing:[1,1,1],origin:[0,0,0],extent:[0,-1,0,-1,0,-1],dataDescription:c.EMPTY};function b(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,S,n),u.ZP.extend(e,t,n),t.direction?Array.isArray(t.direction)&&(t.direction=new Float64Array(t.direction.slice(0,9))):t.direction=g.identity(new Float64Array(9)),t.indexToWorld=new Float64Array(16),t.worldToIndex=new Float64Array(16),i.ZP.get(e,t,["indexToWorld","worldToIndex"]),i.ZP.setGetArray(e,t,["origin","spacing"],3),i.ZP.setGetArray(e,t,["direction"],9),i.ZP.getArray(e,t,["extent"],6),y(e,t)}var w={newInstance:i.ZP.newInstance(b,"vtkImageData"),extend:b}},17394:function(e,t,n){"use strict";n.d(t,{ZP:function(){return u}});var r=n(92393),a=r.ZP.vtkErrorMacro;function i(e,t){t.classHierarchy.push("vtkPiecewiseFunction"),e.getSize=function(){return t.nodes.length},e.getType=function(){var e,n=0,r=0;t.nodes.length>0&&(n=t.nodes[0].y);for(var a=1;an)switch(r){case 0:case 1:r=1;break;default:r=3}else switch(r){case 0:case 2:r=2;break;default:r=3}if(n=e,3===r)break}switch(r){case 0:return"Constant";case 1:return"NonDecreasing";case 2:return"NonIncreasing";default:return"Varied"}},e.getDataPointer=function(){var e=t.nodes.length;if(t.function=null,e>0){t.function=[];for(var n=0;n0?t.nodes[n-1].x:t.clamping?-Number.MAX_VALUE:t.nodes[0].x},e.getNodeValue=function(e,n){var r=t.nodes.length;return e<0||e>=r?(a("Index out of range!"),-1):(n[0]=t.nodes[e].x,n[1]=t.nodes[e].y,n[2]=t.nodes[e].midpoint,n[3]=t.nodes[e].sharpness,1)},e.setNodeValue=function(n,r){var i=t.nodes.length;if(n<0||n>=i)return a("Index out of range!"),-1;var o=t.nodes[n].x;return t.nodes[n].x=r[0],t.nodes[n].y=r[1],t.nodes[n].midpoint=r[2],t.nodes[n].sharpness=r[3],o!==r[0]?e.sortAndUpdateRange():e.modified(),1},e.addPoint=function(t,n){return e.addPointLong(t,n,.5,0)},e.addPointLong=function(n,r,i,o){if(i<0||i>1)return a("Midpoint outside range [0.0, 1.0]"),-1;if(o<0||o>1)return a("Sharpness outside range [0.0, 1.0]"),-1;t.allowDuplicateScalars||e.removePoint(n);var s,u={x:n,y:r,midpoint:i,sharpness:o};for(t.nodes.push(u),e.sortAndUpdateRange(),s=0;s=t.nodes.length)return-1;var a=r,i=!1;return t.nodes.splice(r,1),0!==r&&r!==t.nodes.length||(i=e.updateRange()),i||e.modified(),a},e.removeAllPoints=function(){t.nodes=[],e.sortAndUpdateRange()},e.addSegment=function(n,r,a,i){e.sortAndUpdateRange();for(var o=0;o=n&&t.nodes[o].x<=a?t.nodes.splice(o,1):o++;e.addPoint(n,r,.5,0),e.addPoint(a,i,.5,0)},e.getValue=function(t){var n=[];return e.getTable(t,t,1,n),n[0]},e.adjustRange=function(n){if(n.length<2)return 0;var r=e.getRange();r[0]n[1]?e.addPoint(n[1],e.getValue(n[1])):e.addPoint(n[1],e.getValue(r[1])),e.sortAndUpdateRange();for(var a=0;a=n[0]&&t.nodes[a].x<=n[1]?t.nodes.splice(a,1):++a;return e.sortAndUpdateRange(),1},e.estimateMinNumberOfSamples=function(t,n){var r=e.findMinimumXDistance();return Math.ceil((n-t)/r)},e.findMinimumXDistance=function(){var e=t.nodes.length;if(e<2)return-1;for(var n=t.nodes[1].x-t.nodes[0].x,r=0;r4&&void 0!==arguments[4]?arguments[4]:1,s=0,u=t.nodes.length,l=0;0!==u&&(l=t.nodes[u-1].y);var c=0,d=0,f=0,v=0,m=0,p=0,h=0;for(i=0;i1?e+i/(r-1)*(n-e):.5*(e+n);st.nodes[s].x;)++s.99999&&(p=.99999));if(s>=u)a[g]=t.clamping?l:0;else if(0===s)a[g]=t.clamping?t.nodes[0].y:0;else{var A=(c-d)/(f-d);if(A=A.99){if(A<.5){a[g]=v;continue}a[g]=m;continue}if(h<.01){a[g]=(1-A)*v+A*m;continue}A<.5?A=.5*Math.pow(2*A,1+10*h):A>.5&&(A=1-.5*Math.pow(2*(1-A),1+10*h));var y=A*A,S=y*A,b=2*S-3*y+1,w=-2*S+3*y,I=S-2*y+A,E=S-y,C=m-v,D=(1-h)*C;a[g]=b*v+w*m+I*D+E*D;var _=vm?v:m;a[g]=a[g]<_?_:a[g],a[g]=a[g]>M?M:a[g]}}}}var o={range:[0,0],clamping:!0,allowDuplicateScalars:!1};function s(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,o,n),r.ZP.obj(e,t),t.nodes=[],r.ZP.setGet(e,t,["allowDuplicateScalars","clamping"]),r.ZP.setArray(e,t,["range"],2),r.ZP.getArray(e,t,["range"]),i(e,t)}var u={newInstance:r.ZP.newInstance(s,"vtkPiecewiseFunction"),extend:s}},57019:function(e,t,n){"use strict";n.d(t,{ZP:function(){return S}});var r=n(47169),a=n(43739),i=n(92393);function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}var s=1e-6,u="coincide",l="disjoint";function c(e,t,n){var r=n[0]*(e[0]-t[0])+n[1]*(e[1]-t[1])+n[2]*(e[2]-t[2]);return Math.abs(r)}function d(e,t,n,r){var i=[];(0,a.s)(e,t,i);var o=(0,a.d)(n,i);r[0]=e[0]-o*n[0],r[1]=e[1]-o*n[1],r[2]=e[2]-o*n[2]}function f(e,t,n){var r=(0,a.d)(e,t),i=(0,a.d)(t,t);return 0===i&&(i=1),n[0]=e[0]-r*t[0]/i,n[1]=e[1]-r*t[1]/i,n[2]=e[2]-r*t[2]/i,n}function v(e,t,n,r){var i=[];(0,a.s)(e,t,i);var o=(0,a.d)(n,i),s=(0,a.d)(n,n);0!==s?(r[0]=e[0]-o*n[0]/s,r[1]=e[1]-o*n[1]/s,r[2]=e[2]-o*n[2]/s):(r[0]=e[0],r[1]=e[1],r[2]=e[2])}function m(e,t,n,r){var i={intersection:!1,betweenPoints:!1,t:Number.MAX_VALUE,x:[]},o=[],u=[];(0,a.s)(t,e,o),(0,a.s)(n,e,u);var l=(0,a.d)(r,u),c=(0,a.d)(r,o);return(c<0?-c:c)<=(l<0?-l*s:l*s)||(i.t=l/c,i.x[0]=e[0]+i.t*o[0],i.x[1]=e[1]+i.t*o[1],i.x[2]=e[2]+i.t*o[2],i.intersection=!0,i.betweenPoints=i.t>=0&&i.t<=1),i}function p(e,t,n,r){var i={intersection:!1,l0:[],l1:[],error:null},o=[];(0,a.k)(t,r,o);var c,d=o.map((function(e){return Math.abs(e)}));if(d[0]+d[1]+d[2]d[1]&&d[0]>d[2]?"x":d[1]>d[2]?"y":"z";var v=[],m=-(0,a.d)(t,e),p=-(0,a.d)(r,n);switch(c){case"x":v[0]=0,v[1]=(p*t[2]-m*r[2])/o[0],v[2]=(m*r[1]-p*t[1])/o[0];break;case"y":v[0]=(m*r[2]-p*t[2])/o[1],v[1]=0,v[2]=(p*t[0]-m*r[0])/o[1];break;case"z":v[0]=(p*t[1]-m*r[1])/o[2],v[1]=(m*r[0]-p*t[0])/o[2],v[2]=0}return i.l0=v,(0,a.l)(v,o,i.l1),i.intersection=!0,i}var h={evaluate:function(e,t,n){return e[0]*(n[0]-t[0])+e[1]*(n[1]-t[1])+e[2]*(n[2]-t[2])},distanceToPlane:c,projectPoint:d,projectVector:f,generalizedProjectPoint:v,intersectWithLine:m,intersectWithPlane:p,DISJOINT:l,COINCIDE:u};function g(e,t){t.classHierarchy.push("vtkPlane"),e.distanceToPlane=function(e){return c(e,t.origin,t.normal)},e.projectPoint=function(e,n){d(e,t.origin,t.normal,n)},e.projectVector=function(e,n){return f(e,t.normal,n)},e.push=function(e){if(0!==e)for(var n=0;n<3;n++)t.origin[n]+=e*t.normal[n]},e.generalizedProjectPoint=function(e,n){v(e,t.origin,t.normal,n)},e.evaluateFunction=function(e,n,r){return Array.isArray(e)?t.normal[0]*(e[0]-t.origin[0])+t.normal[1]*(e[1]-t.origin[1])+t.normal[2]*(e[2]-t.origin[2]):t.normal[0]*(e-t.origin[0])+t.normal[1]*(n-t.origin[1])+t.normal[2]*(r-t.origin[2])},e.evaluateGradient=function(e){return[t.normal[0],t.normal[1],t.normal[2]]},e.intersectWithLine=function(e,n){return m(e,n,t.origin,t.normal)},e.intersectWithPlane=function(e,n){return p(e,n,t.origin,t.normal)}}var A={normal:[0,0,1],origin:[0,0,0]};function y(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,A,n),i.ZP.obj(e,t),i.ZP.setGetArray(e,t,["normal","origin"],3),g(e,t)}var S=function(e){for(var t=1;t=0&&n2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,i,n),r.ZP.obj(e,t),r.ZP.algo(e,t,1,0),t.clippingPlanes||(t.clippingPlanes=[]),a(e,t)}}},91119:function(e,t,n){"use strict";n.d(t,{ZP:function(){return m}});var r=n(21930),a=n(64950),i=n(21330),o=n(6807),s=n(48530),u=n(92393),l=n(43739),c=u.ZP.vtkDebugMacro;function d(e,t){t.classHierarchy.push("vtkCamera");var n=new Float64Array(3),u=new Float64Array([0,0,-1]),d=new Float64Array([0,1,0]),f=a.identity(new Float64Array(16)),v=a.identity(new Float64Array(16)),m=new Float64Array(3),p=new Float64Array(3),h=new Float64Array(3),g=a.identity(new Float64Array(16)),A=a.identity(new Float64Array(16)),y=new Float64Array(3),S=new Float64Array(3);function b(){t.viewPlaneNormal[0]=-t.directionOfProjection[0],t.viewPlaneNormal[1]=-t.directionOfProjection[1],t.viewPlaneNormal[2]=-t.directionOfProjection[2]}e.orthogonalizeViewUp=function(){var n=e.getViewMatrix();t.viewUp[0]=n[4],t.viewUp[1]=n[5],t.viewUp[2]=n[6],e.modified()},e.setPosition=function(n,r,a){n===t.position[0]&&r===t.position[1]&&a===t.position[2]||(t.position[0]=n,t.position[1]=r,t.position[2]=a,e.computeDistance(),e.modified())},e.setFocalPoint=function(n,r,a){n===t.focalPoint[0]&&r===t.focalPoint[1]&&a===t.focalPoint[2]||(t.focalPoint[0]=n,t.focalPoint[1]=r,t.focalPoint[2]=a,e.computeDistance(),e.modified())},e.setDistance=function(n){if(t.distance!==n){t.distance=n,t.distance<1e-20&&(t.distance=1e-20,c("Distance is set to minimum."));var r=t.directionOfProjection;t.focalPoint[0]=t.position[0]+r[0]*t.distance,t.focalPoint[1]=t.position[1]+r[1]*t.distance,t.focalPoint[2]=t.position[2]+r[2]*t.distance,e.modified()}},e.computeDistance=function(){var e=t.focalPoint[0]-t.position[0],n=t.focalPoint[1]-t.position[1],r=t.focalPoint[2]-t.position[2];if(t.distance=Math.sqrt(e*e+n*n+r*r),t.distance<1e-20){t.distance=1e-20,c("Distance is set to minimum.");var a=t.directionOfProjection;t.focalPoint[0]=t.position[0]+a[0]*t.distance,t.focalPoint[1]=t.position[1]+a[1]*t.distance,t.focalPoint[2]=t.position[2]+a[2]*t.distance}t.directionOfProjection[0]=e/t.distance,t.directionOfProjection[1]=n/t.distance,t.directionOfProjection[2]=r/t.distance,b()},e.dolly=function(n){if(!(n<=0)){var r=t.distance/n;e.setPosition(t.focalPoint[0]-r*t.directionOfProjection[0],t.focalPoint[1]-r*t.directionOfProjection[1],t.focalPoint[2]-r*t.directionOfProjection[2])}},e.roll=function(n){var r=t.position,o=t.focalPoint,s=t.viewUp,u=new Float64Array([s[0],s[1],s[2],0]);a.identity(g);var c=new Float64Array([o[0]-r[0],o[1]-r[1],o[2]-r[2]]);a.rotate(g,g,(0,l.r)(n),c),i.transformMat4(u,u,g),t.viewUp[0]=u[0],t.viewUp[1]=u[1],t.viewUp[2]=u[2],e.modified()},e.azimuth=function(n){var r=t.focalPoint;a.identity(A),a.translate(A,A,r),a.rotate(A,A,(0,l.r)(n),t.viewUp),a.translate(A,A,[-r[0],-r[1],-r[2]]),o.transformMat4(y,t.position,A),e.setPosition(y[0],y[1],y[2])},e.yaw=function(n){var r=t.position;a.identity(A),a.translate(A,A,r),a.rotate(A,A,(0,l.r)(n),t.viewUp),a.translate(A,A,[-r[0],-r[1],-r[2]]),o.transformMat4(S,t.focalPoint,A),e.setFocalPoint(S[0],S[1],S[2])},e.elevation=function(n){var r=t.focalPoint,i=e.getViewMatrix(),s=[-i[0],-i[1],-i[2]];a.identity(A),a.translate(A,A,r),a.rotate(A,A,(0,l.r)(n),s),a.translate(A,A,[-r[0],-r[1],-r[2]]),o.transformMat4(y,t.position,A),e.setPosition(y[0],y[1],y[2])},e.pitch=function(n){var i=t.position,s=e.getViewMatrix(),u=[s[0],s[1],s[2]];a.identity(A),a.translate(A,A,i),a.rotate(A,A,(0,l.r)(n),u),a.translate(A,A,[-i[0],-i[1],-i[2]]),o.transformMat4(S,t.focalPoint,A),e.setFocalPoint.apply(e,(0,r.Z)(S))},e.zoom=function(n){n<=0||(t.parallelProjection?t.parallelScale/=n:t.viewAngle/=n,e.modified())},e.translate=function(n,r,a){var i=[n,r,a];(0,l.l)(t.position,i,t.position),(0,l.l)(t.focalPoint,i,t.focalPoint),e.computeDistance(),e.modified()},e.applyTransform=function(n){var a=[].concat((0,r.Z)(t.viewUp),[1]),o=[],s=[],u=[];a[0]+=t.position[0],a[1]+=t.position[1],a[2]+=t.position[2],i.transformMat4(o,[].concat((0,r.Z)(t.position),[1]),n),i.transformMat4(s,[].concat((0,r.Z)(t.focalPoint),[1]),n),i.transformMat4(u,a,n),u[0]-=o[0],u[1]-=o[1],u[2]-=o[2],e.setPosition.apply(e,(0,r.Z)(o.slice(0,3))),e.setFocalPoint.apply(e,(0,r.Z)(s.slice(0,3))),e.setViewUp.apply(e,(0,r.Z)(u.slice(0,3)))},e.getThickness=function(){return t.clippingRange[1]-t.clippingRange[0]},e.setThickness=function(n){var r=n;r<1e-20&&(r=1e-20,c("Thickness is set to minimum.")),e.setClippingRange(t.clippingRange[0],t.clippingRange[0]+r)},e.setThicknessFromFocalPoint=function(n){var r=n;r<1e-20&&(r=1e-20,c("Thickness is set to minimum.")),e.setClippingRange(t.distance-r/2,t.distance+r/2)},e.setRoll=function(e){},e.getRoll=function(){},e.setObliqueAngles=function(e,t){},e.getOrientation=function(){},e.getOrientationWXYZ=function(){},e.getFrustumPlanes=function(e){},e.getCameraLightTransformMatrix=function(e){return a.copy(e,t.cameraLightTransform),e},e.computeCameraLightTransform=function(){a.copy(f,e.getViewMatrix()),a.invert(f,f),a.fromScaling(v,[t.distance,t.distance,t.distance]),a.multiply(f,f,v),a.identity(t.cameraLightTransform),a.translate(t.cameraLightTransform,f,[0,0,-1])},e.deepCopy=function(e){},e.physicalOrientationToWorldDirection=function(e){var t=s.al(e[0],e[1],e[2],e[3]),n=s.Ue(),r=s.al(0,0,1,0);return s.Kx(n,t),s.Jp(r,t,r),s.Jp(r,r,n),[r[0],r[1],r[2]]},e.getPhysicalToWorldMatrix=function(t){e.getWorldToPhysicalMatrix(t),a.invert(t,t)},e.getWorldToPhysicalMatrix=function(e){a.identity(e);var n=[3];(0,l.k)(t.physicalViewNorth,t.physicalViewUp,n),e[0]=n[0],e[1]=n[1],e[2]=n[2],e[4]=t.physicalViewUp[0],e[5]=t.physicalViewUp[1],e[6]=t.physicalViewUp[2],e[8]=-t.physicalViewNorth[0],e[9]=-t.physicalViewNorth[1],e[10]=-t.physicalViewNorth[2],a.transpose(e,e),o.set(m,1/t.physicalScale,1/t.physicalScale,1/t.physicalScale),a.scale(e,e,m),a.translate(e,e,t.physicalTranslation)},e.computeViewParametersFromViewMatrix=function(r){a.invert(f,r),o.transformMat4(m,n,f),e.computeDistance();var i=t.distance;e.setPosition(m[0],m[1],m[2]),o.transformMat4(p,u,f),o.subtract(p,p,m),o.normalize(p,p),e.setDirectionOfProjection(p[0],p[1],p[2]),o.transformMat4(h,d,f),o.subtract(h,h,m),o.normalize(h,h),e.setViewUp(h[0],h[1],h[2]),e.setDistance(i)},e.computeViewParametersFromPhysicalMatrix=function(t){e.getWorldToPhysicalMatrix(f),a.multiply(f,t,f),e.computeViewParametersFromViewMatrix(f)},e.setViewMatrix=function(n){t.viewMatrix=n,t.viewMatrix&&(a.copy(f,t.viewMatrix),e.computeViewParametersFromViewMatrix(f),a.transpose(t.viewMatrix,t.viewMatrix))},e.getViewMatrix=function(){if(t.viewMatrix)return t.viewMatrix;a.lookAt(f,t.position,t.focalPoint,t.viewUp),a.transpose(f,f);var e=new Float64Array(16);return a.copy(e,f),e},e.setProjectionMatrix=function(e){t.projectionMatrix=e},e.getProjectionMatrix=function(e,n,r){var i=new Float64Array(16);if(a.identity(i),t.projectionMatrix){var s=1/t.physicalScale;return o.set(m,s,s,s),a.copy(i,t.projectionMatrix),a.scale(i,i,m),a.transpose(i,i),i}a.identity(f);var u=t.clippingRange[1]-t.clippingRange[0],c=[t.clippingRange[0]+(n+1)*u/2,t.clippingRange[0]+(r+1)*u/2];if(t.parallelProjection){var d=t.parallelScale*e,v=t.parallelScale,p=(t.windowCenter[0]-1)*d,h=(t.windowCenter[0]+1)*d,g=(t.windowCenter[1]-1)*v,A=(t.windowCenter[1]+1)*v;a.ortho(f,p,h,g,A,c[0],c[1]),a.transpose(f,f)}else{if(t.useOffAxisProjection)throw new Error("Off-Axis projection is not supported at this time");var y,S,b=Math.tan((0,l.r)(t.viewAngle)/2);!0===t.useHorizontalViewAngle?(y=t.clippingRange[0]*b,S=t.clippingRange[0]*b/e):(y=t.clippingRange[0]*b*e,S=t.clippingRange[0]*b);var w=(t.windowCenter[0]-1)*y,I=(t.windowCenter[0]+1)*y,E=(t.windowCenter[1]-1)*S,C=(t.windowCenter[1]+1)*S,D=c[0],_=c[1];f[0]=2*D/(I-w),f[5]=2*D/(C-E),f[2]=(w+I)/(I-w),f[6]=(E+C)/(C-E),f[10]=-(D+_)/(_-D),f[14]=-1,f[11]=-2*D*_/(_-D),f[15]=0}return a.copy(i,f),i},e.getCompositeProjectionMatrix=function(t,n,r){var i=e.getViewMatrix(),o=e.getProjectionMatrix(t,n,r);return a.multiply(o,i,o),o},e.setDirectionOfProjection=function(e,n,r){if(t.directionOfProjection[0]!==e||t.directionOfProjection[1]!==n||t.directionOfProjection[2]!==r){t.directionOfProjection[0]=e,t.directionOfProjection[1]=n,t.directionOfProjection[2]=r;var a=t.directionOfProjection;t.focalPoint[0]=t.position[0]+a[0]*t.distance,t.focalPoint[1]=t.position[1]+a[1]*t.distance,t.focalPoint[2]=t.position[2]+a[2]*t.distance,b()}},e.setDeviceAngles=function(n,r,i,s){var u=[3];(0,l.k)(t.physicalViewNorth,t.physicalViewUp,u);var c=a.identity(new Float64Array(16));a.rotate(c,c,(0,l.r)(n),t.physicalViewUp),a.rotate(c,c,(0,l.r)(r),u),a.rotate(c,c,(0,l.r)(i),t.physicalViewNorth),a.rotate(c,c,(0,l.r)(-s),t.physicalViewUp);var d=new Float64Array([-t.physicalViewUp[0],-t.physicalViewUp[1],-t.physicalViewUp[2]]),f=new Float64Array(t.physicalViewNorth);o.transformMat4(d,d,c),o.transformMat4(f,f,c),e.setDirectionOfProjection(d[0],d[1],d[2]),e.setViewUp(f[0],f[1],f[2]),e.modified()},e.setOrientationWXYZ=function(t,n,i,u){var c=a.identity(new Float64Array(16));if(0!==t&&(0!==n||0!==i||0!==u)){var d=(0,l.r)(t),f=s.Ue();s.yY(f,[n,i,u],d),a.fromQuat(c,f)}var v=new Float64Array(3);o.transformMat4(v,[0,0,-1],c);var m=new Float64Array(3);o.transformMat4(m,[0,1,0],c),e.setDirectionOfProjection.apply(e,(0,r.Z)(v)),e.setViewUp.apply(e,(0,r.Z)(m)),e.modified()},e.computeClippingRange=function(e){var n,r;n=t.viewPlaneNormal,r=t.position;for(var a=-n[0],i=-n[1],o=-n[2],s=-(a*r[0]+i*r[1]+o*r[2]),u=[a*e[0]+i*e[2]+o*e[4]+s,1e-18],l=0;l<2;l++)for(var c=0;c<2;c++)for(var d=0;d<2;d++){var f=a*e[d]+i*e[2+c]+o*e[4+l]+s;u[0]=fu[1]?f:u[1]}return u}}var f={position:[0,0,1],focalPoint:[0,0,0],viewUp:[0,1,0],directionOfProjection:[0,0,-1],parallelProjection:!1,useHorizontalViewAngle:!1,viewAngle:30,parallelScale:1,clippingRange:[.01,1000.01],windowCenter:[0,0],viewPlaneNormal:[0,0,1],useOffAxisProjection:!1,screenBottomLeft:[-.5,-.5,-.5],screenBottomRight:[.5,-.5,-.5],screenTopRight:[.5,.5,-.5],freezeFocalPoint:!1,projectionMatrix:null,viewMatrix:null,cameraLightTransform:a.create(),physicalTranslation:[0,0,0],physicalScale:1,physicalViewUp:[0,1,0],physicalViewNorth:[0,0,-1]};function v(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,f,n),u.ZP.obj(e,t),u.ZP.get(e,t,["distance"]),u.ZP.setGet(e,t,["parallelProjection","useHorizontalViewAngle","viewAngle","parallelScale","useOffAxisProjection","freezeFocalPoint","physicalScale"]),u.ZP.getArray(e,t,["directionOfProjection","viewPlaneNormal","position","focalPoint"]),u.ZP.setGetArray(e,t,["clippingRange","windowCenter"],2),u.ZP.setGetArray(e,t,["viewUp","screenBottomLeft","screenBottomRight","screenTopRight","physicalTranslation","physicalViewUp","physicalViewNorth"],3),d(e,t)}var m={newInstance:u.ZP.newInstance(v,"vtkCamera"),extend:v}},92632:function(e,t,n){"use strict";n.d(t,{ZP:function(){return b}});var r=n(47169),a=n(92393),i=n(43739),o=n(62504),s={ColorSpace:{RGB:0,HSV:1,LAB:2,DIVERGING:3},Scale:{LINEAR:0,LOG10:1}};function u(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}var l=s.ColorSpace,c=s.Scale,d=o.ZP.ScalarMappingTarget,f=a.ZP.vtkDebugMacro,v=a.ZP.vtkErrorMacro,m=a.ZP.vtkWarningMacro;function p(e,t){var n=e[0],r=e[1],a=e[2],i=Math.sqrt(n*n+r*r+a*a),o=i>.001?Math.acos(n/i):0,s=o>.001?Math.atan2(a,r):0;t[0]=i,t[1]=o,t[2]=s}function h(e,t){if(e[0]>=t-.1)return e[2];var n=e[1]*Math.sqrt(t*t-e[0]*e[0])/(e[0]*Math.sin(e[1]));return e[2]>-.3*Math.PI?e[2]+n:e[2]-n}function g(e,t,n,r){var a=[],o=[];(0,i.I)(t,a),(0,i.I)(n,o);var s=[],u=[];p(a,s),p(o,u);var l=e;if(s[1]>.05&&u[1]>.05&&function(e,t){var n=e-t;for(n<0&&(n=-n);n>=2*Math.PI;)n-=2*Math.PI;return n>Math.PI&&(n=2*Math.PI-n),n}(s[2],u[2])>.33*Math.PI){var c=Math.max(s[0],u[0]);c=Math.max(88,c),e<.5?(u[0]=c,u[1]=0,u[2]=0,l*=2):(s[0]=c,s[1]=0,s[2]=0,l=2*l-1)}s[1]<.05&&u[1]>.05?s[2]=h(u,s[0]):u[1]<.05&&s[1]>.05&&(u[2]=h(s,u[0]));var d=[];d[0]=(1-l)*s[0]+l*u[0],d[1]=(1-l)*s[1]+l*u[1],d[2]=(1-l)*s[2]+l*u[2];var f=[];!function(e,t){var n=e[0],r=e[1],a=e[2];t[0]=n*Math.cos(r),t[1]=n*Math.sin(r)*Math.cos(a),t[2]=n*Math.sin(r)*Math.sin(a)}(d,f),(0,i.J)(f,r)}function A(e,t){t.classHierarchy.push("vtkColorTransferFunction"),e.getSize=function(){return t.nodes.length},e.addRGBPoint=function(t,n,r,a){return e.addRGBPointLong(t,n,r,a,.5,0)},e.addRGBPointLong=function(n,r,a,i){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:.5,s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;if(o<0||o>1)return v("Midpoint outside range [0.0, 1.0]"),-1;if(s<0||s>1)return v("Sharpness outside range [0.0, 1.0]"),-1;t.allowDuplicateScalars||e.removePoint(n);var u={x:n,r:r,g:a,b:i,midpoint:o,sharpness:s};t.nodes.push(u),e.sortAndUpdateRange();for(var l=0;l4&&void 0!==arguments[4]?arguments[4]:.5,s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,u=[],l=[n,r,a];return(0,i.h)(l,u),e.addRGBPoint(t,u[0],u[1],u[2],o,s)},e.setNodes=function(n){if(t.nodes!==n){var r=JSON.stringify(t.nodes);t.nodes=n;var a=JSON.stringify(t.nodes);if(e.sortAndUpdateRange()||r!==a)return e.modified(),!0}return!1},e.sortAndUpdateRange=function(){var n=JSON.stringify(t.nodes);t.nodes.sort((function(e,t){return e.x-t.x}));var r=JSON.stringify(t.nodes),a=e.updateRange();return a||n===r?a:(e.modified(),!0)},e.updateRange=function(){var n=[2];n[0]=t.mappingRange[0],n[1]=t.mappingRange[1];var r=t.nodes.length;return r?(t.mappingRange[0]=t.nodes[0].x,t.mappingRange[1]=t.nodes[r-1].x):(t.mappingRange[0]=0,t.mappingRange[1]=0),(n[0]!==t.mappingRange[0]||n[1]!==t.mappingRange[1])&&(e.modified(),!0)},e.removePoint=function(n){for(var r=0;r=t.nodes.length)return-1;var i=!1;return t.nodes.splice(r,1),0!==r&&r!==t.nodes.length||(i=e.updateRange()),i||e.modified(),a},e.movePoint=function(n,r){if(n!==r){e.removePoint(r);for(var a=0;a=n&&t.nodes[c].x<=o?t.nodes.splice(c,1):c++;e.addRGBPointLong(n,r,a,i,.5,0),e.addRGBPointLong(o,s,u,l,.5,0),e.modified()},e.addHSVSegment=function(t,n,r,a,o,s,u,l){var c=[n,r,a],d=[s,u,l],f=[],v=[];(0,i.h)(c,f),(0,i.h)(d,v),e.addRGBSegment(t,f[0],f[1],f[2],o,v[0],v[1],v[2])},e.mapValue=function(t){var n=[];return e.getColor(t,n),[Math.floor(255*n[0]+.5),Math.floor(255*n[1]+.5),Math.floor(255*n[2]+.5),255]},e.getColor=function(n,r){if(t.indexedLookup){var a=e.getSize(),i=e.getAnnotatedValueIndexInternal(n);if(i<0||0===a)e.getNanColor(r);else{var o=[];e.getNodeValue(i%a,o),r[0]=o.r,r[1]=o.g,r[2]=o.b}}else e.getTable(n,n,1,r)},e.getRedValue=function(t){var n=[];return e.getColor(t,n),n[0]},e.getGreenValue=function(t){var n=[];return e.getColor(t,n),n[1]},e.getBlueValue=function(t){var n=[];return e.getColor(t,n),n[2]},e.getTable=function(n,r,a,o){if((0,i.i)(n)||(0,i.i)(r))for(var s=0;s0);var D=0,_=0,M=0;C&&(D=Math.log10(n),_=Math.log10(r));for(var O=0;O1?C?(M=D+O/(a-1)*(_-D),h=Math.pow(10,M)):h=n+O/(a-1)*(r-n):C?(M=.5*(D+_),h=Math.pow(10,M)):h=.5*(n+r),t.discretize){var T=t.mappingRange;if(h>=T[0]&&h<=T[1]){var x=t.numberOfValues,R=T[1]-T[0];if(x<=1)h=T[0]+R/2;else{var L=(h-T[0])/R,k=(0,i.K)(x*L);h=T[0]+k/(x-1)*R}}}for(;ut.nodes[u].x;)++u.99999&&(w=.99999));if(h>t.mappingRange[1])o[P]=0,o[P+1]=0,o[P+2]=0,t.clamping&&(e.getUseAboveRangeColor()?(o[P]=t.aboveRangeColor[0],o[P+1]=t.aboveRangeColor[1],o[P+2]=t.aboveRangeColor[2]):(o[P]=f,o[P+1]=m,o[P+2]=p));else if(h0&&(o[P]=t.nodes[0].r,o[P+1]=t.nodes[0].g,o[P+2]=t.nodes[0].b));else if(0===u&&(Math.abs(h-n)<1e-6||t.discretize))d>0?(o[P]=t.nodes[0].r,o[P+1]=t.nodes[0].g,o[P+2]=t.nodes[0].b):(o[P]=0,o[P+1]=0,o[P+2]=0);else{var N=0;if(N=(N=C?(M-A)/(y-A):(h-A)/(y-A)).99){if(N<.5){o[P]=S[0],o[P+1]=S[1],o[P+2]=S[2];continue}o[P]=b[0],o[P+1]=b[1],o[P+2]=b[2];continue}if(I<.01){if(t.colorSpace===l.RGB)o[P]=(1-N)*S[0]+N*b[0],o[P+1]=(1-N)*S[1]+N*b[1],o[P+2]=(1-N)*S[2]+N*b[2];else if(t.colorSpace===l.HSV){var F=[],B=[];(0,i.H)(S,F),(0,i.H)(b,B),t.hSVWrap&&(F[0]-B[0]>.5||B[0]-F[0]>.5)&&(F[0]>B[0]?F[0]-=1:B[0]-=1);var U=[];U[0]=(1-N)*F[0]+N*B[0],U[0]<0&&(U[0]+=1),U[1]=(1-N)*F[1]+N*B[1],U[2]=(1-N)*F[2]+N*B[2],(0,i.h)(U,E),o[P]=E[0],o[P+1]=E[1],o[P+2]=E[2]}else if(t.colorSpace===l.LAB){var V=[],j=[];(0,i.I)(S,V),(0,i.I)(b,j);var G=[];G[0]=(1-N)*V[0]+N*j[0],G[1]=(1-N)*V[1]+N*j[1],G[2]=(1-N)*V[2]+N*j[2],(0,i.J)(G,E),o[P]=E[0],o[P+1]=E[1],o[P+2]=E[2]}else t.colorSpace===l.DIVERGING?(g(N,S,b,E),o[P]=E[0],o[P+1]=E[1],o[P+2]=E[2]):v("ColorSpace set to invalid value.",t.colorSpace);continue}N<.5?N=.5*Math.pow(2*N,1+10*I):N>.5&&(N=1-.5*Math.pow(2*(1-N),1+10*I));var H=N*N,Q=H*N,q=2*Q-3*H+1,z=-2*Q+3*H,W=Q-2*H+N,Y=Q-H,Z=void 0;if(t.colorSpace===l.RGB)for(var K=0;K<3;K++)Z=(1-I)*(b[K]-S[K]),o[P+K]=q*S[K]+z*b[K]+W*Z+Y*Z;else if(t.colorSpace===l.HSV){var X=[],$=[];(0,i.H)(S,X),(0,i.H)(b,$),t.hSVWrap&&(X[0]-$[0]>.5||$[0]-X[0]>.5)&&(X[0]>$[0]?X[0]-=1:$[0]-=1);for(var J=[],ee=0;ee<3;ee++)Z=(1-I)*($[ee]-X[ee]),J[ee]=q*X[ee]+z*$[ee]+W*Z+Y*Z,0===ee&&J[ee]<0&&(J[ee]+=1);(0,i.h)(J,E),o[P]=E[0],o[P+1]=E[1],o[P+2]=E[2]}else if(t.colorSpace===l.LAB){var te=[],ne=[];(0,i.I)(S,te),(0,i.I)(b,ne);for(var re=[],ae=0;ae<3;ae++)Z=(1-I)*(ne[ae]-te[ae]),re[ae]=q*te[ae]+z*ne[ae]+W*Z+Y*Z;(0,i.J)(re,E),o[P]=E[0],o[P+1]=E[1],o[P+2]=E[2]}else t.colorSpace===l.DIVERGING?(g(N,S,b,E),o[P]=E[0],o[P+1]=E[1],o[P+2]=E[2]):v("ColorSpace set to invalid value.");for(var ie=0;ie<3;ie++)o[P+ie]=o[P+ie]<0?0:o[P+ie],o[P+ie]=o[P+ie]>1?1:o[P+ie]}}}},e.getUint8Table=function(n,r,a){var i=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(e.getMTime()<=t.buildTime&&t.tableSize===a&&t.tableWithAlpha!==i)return t.table;if(0===t.nodes.length)return v("Attempting to lookup a value with no points in the function"),t.table;var o=i?4:3;t.tableSize===a&&t.tableWithAlpha===i||(t.table=new Uint8Array(a*o),t.tableSize=a,t.tableWithAlpha=i);var s=[];e.getTable(n,r,a,s);for(var u=0;u1&&(o=(r-n)/(a-1));for(var s=0;s=t.nodes.length?(v("Index out of range!"),-1):(n[0]=t.nodes[e].x,n[1]=t.nodes[e].r,n[2]=t.nodes[e].g,n[3]=t.nodes[e].b,n[4]=t.nodes[e].midpoint,n[5]=t.nodes[e].sharpness,1)},e.setNodeValue=function(n,r){if(n<0||n>=t.nodes.length)return v("Index out of range!"),-1;var a=t.nodes[n].x;return t.nodes[n].x=r[0],t.nodes[n].r=r[1],t.nodes[n].g=r[2],t.nodes[n].b=r[3],t.nodes[n].midpoint=r[4],t.nodes[n].sharpness=r[5],a!==r[0]?e.sortAndUpdateRange():e.modified(),1},e.getNumberOfAvailableColors=function(){return t.indexedLookup&&e.getSize()?e.getSize():t.tableSize?t.tableSize:16777216},e.getIndexedColor=function(t,n){var r=e.getSize();if(r>0&&t>=0){var a=[];e.getNodeValue(t%r,a);for(var i=0;i<3;++i)n[i]=a[i+1];n[3]=1}else e.getNanColor(n),n[3]=1},e.fillFromDataPointer=function(t,n){if(!(t<=0)&&n){e.removeAllPoints();for(var r=0;rn[1]?(e.getColor(n[1],a),e.addRGBPoint(n[1],a[0],a[1],a[2])):(e.getColor(r[1],a),e.addRGBPoint(n[1],a[0],a[1],a[2])),e.sortAndUpdateRange();for(var i=0;i=n[0]&&t.nodes[i].x<=n[1]?t.nodes.splice(i,1):++i;return 1},e.estimateMinNumberOfSamples=function(t,n){var r=e.findMinimumXDistance();return Math.ceil((n-t)/r)},e.findMinimumXDistance=function(){if(t.nodes.length<2)return-1;for(var e=Number.MAX_VALUE,n=0;n2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,y,n),o.ZP.extend(e,t,n),t.table=[],t.nodes=[],t.nanColor=[.5,0,0,1],t.belowRangeColor=[0,0,0,1],t.aboveRangeColor=[1,1,1,1],t.buildTime={},a.ZP.obj(t.buildTime),a.ZP.get(e,t,["buildTime","mappingRange"]),a.ZP.setGet(e,t,["useAboveRangeColor","useBelowRangeColor","colorSpace","discretize","numberOfValues"]),a.ZP.setArray(e,t,["nanColor","belowRangeColor","aboveRangeColor"],4),a.ZP.getArray(e,t,["nanColor","belowRangeColor","aboveRangeColor"]),A(e,t)}var b=function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:0;a=e}var s={getResolveCoincidentTopologyAsString:function(){return i[a]},getResolveCoincidentTopologyPolygonOffsetFaces:function(){return r},getResolveCoincidentTopology:function(){return a},setResolveCoincidentTopology:o,setResolveCoincidentTopologyPolygonOffsetFaces:function(e){r=e},setResolveCoincidentTopologyToDefault:function(){o(0)},setResolveCoincidentTopologyToOff:function(){o(0)},setResolveCoincidentTopologyToPolygonOffset:function(){o(1)}},u=n(92393);function l(e,t,n){n.forEach((function(n){e["get".concat(n.method)]=function(){return t[n.key]},e["set".concat(n.method)]=function(e,r){t[n.key]={factor:e,offset:r}}}))}var c=["Polygon","Line","Point"],d={};l(d,{Polygon:{factor:2,offset:0},Line:{factor:1,offset:-1},Point:{factor:0,offset:-2}},c.map((function(e){return{key:e,method:"ResolveCoincidentTopology".concat(e,"OffsetParameters")}})));var f={implementCoincidentTopologyMethods:function(e,t){void 0===t.resolveCoincidentTopology&&(t.resolveCoincidentTopology=!1),u.ZP.setGet(e,t,["resolveCoincidentTopology"]),t.topologyOffset={Polygon:{factor:0,offset:0},Line:{factor:0,offset:0},Point:{factor:0,offset:0}},Object.keys(s).forEach((function(t){e[t]=s[t]})),Object.keys(d).forEach((function(t){e[t]=d[t]})),l(e,t.topologyOffset,c.map((function(e){return{key:e,method:"RelativeCoincidentTopology".concat(e,"OffsetParameters")}}))),e.getCoincidentTopologyPolygonOffsetParameters=function(){var t=d.getResolveCoincidentTopologyPolygonOffsetParameters(),n=e.getRelativeCoincidentTopologyPolygonOffsetParameters();return{factor:t.factor+n.factor,offset:t.offset+n.offset}},e.getCoincidentTopologyLineOffsetParameters=function(){var t=d.getResolveCoincidentTopologyLineOffsetParameters(),n=e.getRelativeCoincidentTopologyLineOffsetParameters();return{factor:t.factor+n.factor,offset:t.offset+n.offset}},e.getCoincidentTopologyPointOffsetParameter=function(){var t=d.getResolveCoincidentTopologyPointOffsetParameters(),n=e.getRelativeCoincidentTopologyPointOffsetParameters();return{factor:t.factor+n.factor,offset:t.offset+n.offset}}},staticOffsetAPI:d,otherStaticMethods:s,CATEGORIES:c}},43083:function(e,t,n){"use strict";n.d(t,{ZP:function(){return r}});var r={ColorMode:{DEFAULT:0,MAP_SCALARS:1,DIRECT_SCALARS:2},GetArray:{BY_ID:0,BY_NAME:1},ScalarMode:{DEFAULT:0,USE_POINT_DATA:1,USE_CELL_DATA:2,USE_POINT_FIELD_DATA:3,USE_CELL_FIELD_DATA:4,USE_FIELD_DATA:5}}},18876:function(e,t,n){"use strict";n.d(t,{ZP:function(){return f}});var r=n(47169),a=n(92393),i={CoordinateSystem:{DISPLAY:0,WORLD:1}};function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}var s=i.CoordinateSystem;function u(e){return function(){return a.ZP.vtkErrorMacro("vtkProp::".concat(e," - NOT IMPLEMENTED"))}}function l(e,t){t.classHierarchy.push("vtkProp"),e.getMTime=function(){for(var e=t.mtime,n=0;ne&&(e=r)}return e},e.processSelectorPixelBuffers=function(e,t){},e.getNestedProps=function(){return null},e.getActors=function(){return[]},e.getActors2D=function(){return[]},e.getVolumes=function(){return[]},e.pick=u("pick"),e.hasKey=u("hasKey"),e.getNestedVisibility=function(){return t.visibility&&(!t._parentProp||t._parentProp.getNestedVisibility())},e.getNestedPickable=function(){return t.pickable&&(!t._parentProp||t._parentProp.getNestedPickable())},e.getNestedDragable=function(){return t.dragable&&(!t._parentProp||t._parentProp.getNestedDragable())},e.getRedrawMTime=function(){return t.mtime},e.setEstimatedRenderTime=function(e){t.estimatedRenderTime=e,t.savedEstimatedRenderTime=e},e.restoreEstimatedRenderTime=function(){t.estimatedRenderTime=t.savedEstimatedRenderTime},e.addEstimatedRenderTime=function(e){t.estimatedRenderTime+=e},e.setAllocatedRenderTime=function(e){t.allocatedRenderTime=e,t.savedEstimatedRenderTime=t.estimatedRenderTime,t.estimatedRenderTime=0},e.getSupportsSelection=function(){return!1},e.getTextures=function(){return t.textures},e.hasTexture=function(e){return-1!==t.textures.indexOf(e)},e.addTexture=function(n){n&&!e.hasTexture(n)&&(t.textures=t.textures.concat(n),e.modified())},e.removeTexture=function(n){var r=t.textures.filter((function(e){return e!==n}));t.textures.length!==r.length&&(t.textures=r,e.modified())},e.removeAllTextures=function(){t.textures=[],e.modified()},e.setCoordinateSystemToWorld=function(){return e.setCoordinateSystem(s.WORLD)},e.setCoordinateSystemToDisplay=function(){return e.setCoordinateSystem(s.DISPLAY)}}var c={allocatedRenderTime:10,coordinateSystem:s.WORLD,dragable:!0,estimatedRenderTime:0,paths:null,pickable:!0,renderTimeMultiplier:1,savedEstimatedRenderTime:0,textures:[],useBounds:!0,visibility:!0};function d(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,c,n),a.ZP.obj(e,t),a.ZP.get(e,t,["estimatedRenderTime","allocatedRenderTime"]),a.ZP.setGet(e,t,["_parentProp","coordinateSystem","dragable","pickable","renderTimeMultiplier","useBounds","visibility"]),a.ZP.moveToProtected(e,t,["parentProp"]),l(e,t)}var f=function(e){for(var t=1;tt.matrixMTime.getMTime()){a.identity(t.matrix),t.userMatrix&&a.multiply(t.matrix,t.matrix,t.userMatrix),a.translate(t.matrix,t.matrix,t.origin),a.translate(t.matrix,t.matrix,t.position),a.multiply(t.matrix,t.matrix,t.rotation),a.scale(t.matrix,t.matrix,t.scale),a.translate(t.matrix,t.matrix,[-t.origin[0],-t.origin[1],-t.origin[2]]),a.transpose(t.matrix,t.matrix),t.isIdentity=!0;for(var n=0;n<4;++n)for(var r=0;r<4;++r)(n===r?1:0)!==t.matrix[n+4*r]&&(t.isIdentity=!1);t.matrixMTime.modified()}},e.getCenter=function(){return o.ZP.getCenter(t.bounds)},e.getLength=function(){return o.ZP.getLength(t.bounds)},e.getXRange=function(){return o.ZP.getXRange(t.bounds)},e.getYRange=function(){return o.ZP.getYRange(t.bounds)},e.getZRange=function(){return o.ZP.getZRange(t.bounds)},e.getUserMatrix=function(){return t.userMatrix},e.onModified((function(){e.computeMatrix()}))}var c={origin:[0,0,0],position:[0,0,0],orientation:[0,0,0],rotation:null,scale:[1,1,1],bounds:[1,-1,1,-1,1,-1],userMatrix:null,userMatrixMTime:null,cachedProp3D:null,isIdentity:!0,matrixMTime:null};function d(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,c,n),u.ZP.extend(e,t,n),t.matrixMTime={},i.ZP.obj(t.matrixMTime),i.ZP.get(e,t,["bounds","isIdentity"]),i.ZP.getArray(e,t,["orientation"]),i.ZP.setGetArray(e,t,["origin","position","scale"],3),t.matrix=a.identity(new Float64Array(16)),t.rotation=a.identity(new Float64Array(16)),t.userMatrix=a.identity(new Float64Array(16)),t.transform=null,l(e,t)}var f={newInstance:i.ZP.newInstance(d,"vtkProp3D"),extend:d}},67267:function(e,t,n){"use strict";n.d(t,{ZP:function(){return v}});var r=n(47169),a=n(92393),i=n(31426);function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}var s=i.ZP.Representation,u=i.ZP.Interpolation;function l(e){return function(){return a.ZP.vtkErrorMacro("vtkProperty::".concat(e," - NOT IMPLEMENTED"))}}function c(e,t){t.classHierarchy.push("vtkProperty"),e.setColor=function(n,r,a){Array.isArray(n)?t.color[0]===n[0]&&t.color[1]===n[1]&&t.color[2]===n[2]||(t.color[0]=n[0],t.color[1]=n[1],t.color[2]=n[2],e.modified()):t.color[0]===n&&t.color[1]===r&&t.color[2]===a||(t.color[0]=n,t.color[1]=r,t.color[2]=a,e.modified()),e.setDiffuseColor(t.color),e.setAmbientColor(t.color),e.setSpecularColor(t.color)},e.computeCompositeColor=l("ComputeCompositeColor"),e.getColor=function(){var e=0;t.ambient+t.diffuse+t.specular>0&&(e=1/(t.ambient+t.diffuse+t.specular));for(var n=0;n<3;n++)t.color[n]=e*(t.ambient*t.ambientColor[n]+t.diffuse*t.diffuseColor[n]+t.specular*t.specularColor[n]);return[].concat(t.color)},e.setSpecularPower=function(n){var r=1/Math.max(1,n);t.roughness===r&&t.specularPower===n||(t.specularPower=n,t.roughness=r,e.modified())},e.addShaderVariable=l("AddShaderVariable"),e.setInterpolationToFlat=function(){return e.setInterpolation(u.FLAT)},e.setInterpolationToGouraud=function(){return e.setInterpolation(u.GOURAUD)},e.setInterpolationToPhong=function(){return e.setInterpolation(u.PHONG)},e.getInterpolationAsString=function(){return a.ZP.enumToString(u,t.interpolation)},e.setRepresentationToWireframe=function(){return e.setRepresentation(s.WIREFRAME)},e.setRepresentationToSurface=function(){return e.setRepresentation(s.SURFACE)},e.setRepresentationToPoints=function(){return e.setRepresentation(s.POINTS)},e.getRepresentationAsString=function(){return a.ZP.enumToString(s,t.representation)}}var d={color:[1,1,1],ambientColor:[1,1,1],diffuseColor:[1,1,1],specularColor:[1,1,1],edgeColor:[0,0,0],ambient:0,diffuse:1,metallic:0,roughness:.6,normalStrength:1,emission:1,baseIOR:1.45,specular:0,specularPower:1,opacity:1,interpolation:u.GOURAUD,representation:s.SURFACE,edgeVisibility:!1,backfaceCulling:!1,frontfaceCulling:!1,pointSize:1,lineWidth:1,lighting:!0,shading:!1,materialName:null};function f(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,d,n),a.ZP.obj(e,t),a.ZP.setGet(e,t,["lighting","interpolation","ambient","diffuse","metallic","roughness","normalStrength","emission","baseIOR","specular","specularPower","opacity","edgeVisibility","lineWidth","pointSize","backfaceCulling","frontfaceCulling","representation","diffuseTexture","metallicTexture","roughnessTexture","normalTexture","ambientOcclusionTexture","emissionTexture"]),a.ZP.setGetArray(e,t,["ambientColor","specularColor","diffuseColor","edgeColor"],3),c(e,t)}var v=function(e){for(var t=1;t2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,c,n),a.ZP.obj(e,t),a.ZP.get(e,t,["_openGLRenderWindow"]),a.ZP.moveToProtected(e,t,["openGLRenderWindow"]),l(e,t)}var f=s(s({newInstance:a.ZP.newInstance(d),extend:d},{}),i.Z)},18361:function(e,t,n){"use strict";n.d(t,{L:function(){return r},Z:function(){return a}});var r={ARRAY_BUFFER:0,ELEMENT_ARRAY_BUFFER:1,TEXTURE_BUFFER:2},a={ObjectType:r}},68397:function(e,t,n){"use strict";n.d(t,{ZP:function(){return f}});var r=n(64950),a=n(81911),i=n(92393),o=n(8723),s=n(91158);function u(e,t){t.classHierarchy.push("vtkOpenGLCamera"),e.buildPass=function(n){n&&(t.openGLRenderer=e.getFirstAncestorOfType("vtkOpenGLRenderer"),t._openGLRenderWindow=t.openGLRenderer.getParent(),t.context=t._openGLRenderWindow.getContext())},e.opaquePass=function(e){if(e){var n=t.openGLRenderer.getTiledSizeAndOrigin();t.context.viewport(n.lowerLeftU,n.lowerLeftV,n.usize,n.vsize),t.context.scissor(n.lowerLeftU,n.lowerLeftV,n.usize,n.vsize)}},e.translucentPass=e.opaquePass,e.opaqueZBufferPass=e.opaquePass,e.volumePass=e.opaquePass,e.getKeyMatrices=function(n){if(n!==t.lastRenderer||t._openGLRenderWindow.getMTime()>t.keyMatrixTime.getMTime()||e.getMTime()>t.keyMatrixTime.getMTime()||n.getMTime()>t.keyMatrixTime.getMTime()||t.renderable.getMTime()>t.keyMatrixTime.getMTime()){r.copy(t.keyMatrices.wcvc,t.renderable.getViewMatrix()),a.fromMat4(t.keyMatrices.normalMatrix,t.keyMatrices.wcvc),a.invert(t.keyMatrices.normalMatrix,t.keyMatrices.normalMatrix),r.transpose(t.keyMatrices.wcvc,t.keyMatrices.wcvc);var i=t.openGLRenderer.getAspectRatio();r.copy(t.keyMatrices.vcpc,t.renderable.getProjectionMatrix(i,-1,1)),r.transpose(t.keyMatrices.vcpc,t.keyMatrices.vcpc),r.multiply(t.keyMatrices.wcpc,t.keyMatrices.vcpc,t.keyMatrices.wcvc),t.keyMatrixTime.modified(),t.lastRenderer=n}return t.keyMatrices}}var l={context:null,lastRenderer:null,keyMatrixTime:null,keyMatrices:null};function c(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,l,n),o.Z.extend(e,t,n),t.keyMatrixTime={},(0,i.j6)(t.keyMatrixTime),t.keyMatrices={normalMatrix:new Float64Array(9),vcpc:new Float64Array(16),wcvc:new Float64Array(16),wcpc:new Float64Array(16)},(0,i.g2)(e,t,["context","keyMatrixTime"]),u(e,t)}var d=(0,i.WL)(c),f={newInstance:d,extend:c};(0,s.vw)("vtkCamera",d)},33611:function(e,t,n){"use strict";n.d(t,{ZP:function(){return c}});var r=n(92393),a=n(82331),i=n(94378),o=n(96436);function s(e,t){t.classHierarchy.push("vtkFramebuffer"),e.getBothMode=function(){return t.context.FRAMEBUFFER},e.saveCurrentBindingsAndBuffers=function(t){var n=void 0!==t?t:e.getBothMode();e.saveCurrentBindings(n),e.saveCurrentBuffers(n)},e.saveCurrentBindings=function(e){if(t.context){var n=t.context;t.previousDrawBinding=n.getParameter(t.context.FRAMEBUFFER_BINDING),t.previousActiveFramebuffer=t._openGLRenderWindow.getActiveFramebuffer()}else(0,r.E0)("you must set the OpenGLRenderWindow before calling saveCurrentBindings")},e.saveCurrentBuffers=function(e){},e.restorePreviousBindingsAndBuffers=function(t){var n=void 0!==t?t:e.getBothMode();e.restorePreviousBindings(n),e.restorePreviousBuffers(n)},e.restorePreviousBindings=function(e){if(t.context){var n=t.context;n.bindFramebuffer(n.FRAMEBUFFER,t.previousDrawBinding),t._openGLRenderWindow.setActiveFramebuffer(t.previousActiveFramebuffer)}else(0,r.E0)("you must set the OpenGLRenderWindow before calling restorePreviousBindings")},e.restorePreviousBuffers=function(e){},e.bind=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,r=n;null===r&&(r=t.context.FRAMEBUFFER),t.context.bindFramebuffer(r,t.glFramebuffer);for(var a=0;a1&&void 0!==arguments[1]?arguments[1]:0,a=t.context;if(a){var i=a.COLOR_ATTACHMENT0;if(n>0){if(!t._openGLRenderWindow.getWebgl2())return void(0,r.E0)("Using multiple framebuffer attachments requires WebGL 2");i+=n}t.colorBuffers[n]=e,a.framebufferTexture2D(a.FRAMEBUFFER,i,a.TEXTURE_2D,e.getHandle(),0)}else(0,r.E0)("you must set the OpenGLRenderWindow before calling setColorBuffer")},e.removeColorBuffer=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,n=t.context;if(n){var a=n.COLOR_ATTACHMENT0;if(e>0){if(!t._openGLRenderWindow.getWebgl2())return void(0,r.E0)("Using multiple framebuffer attachments requires WebGL 2");a+=e}n.framebufferTexture2D(n.FRAMEBUFFER,a,n.TEXTURE_2D,null,0),t.colorBuffers=t.colorBuffers.splice(e,1)}else(0,r.E0)("you must set the OpenGLRenderWindow before calling removeColorBuffer")},e.setDepthBuffer=function(e){if(t.context)if(t._openGLRenderWindow.getWebgl2()){var n=t.context;n.framebufferTexture2D(n.FRAMEBUFFER,n.DEPTH_ATTACHMENT,n.TEXTURE_2D,e.getHandle(),0)}else(0,r.E0)("Attaching depth buffer textures to fbo requires WebGL 2");else(0,r.E0)("you must set the OpenGLRenderWindow before calling setDepthBuffer")},e.removeDepthBuffer=function(){if(t.context)if(t._openGLRenderWindow.getWebgl2()){var e=t.context;e.framebufferTexture2D(e.FRAMEBUFFER,e.DEPTH_ATTACHMENT,e.TEXTURE_2D,null,0)}else(0,r.E0)("Attaching depth buffer textures to framebuffers requires WebGL 2");else(0,r.E0)("you must set the OpenGLRenderWindow before calling removeDepthBuffer")},e.getGLFramebuffer=function(){return t.glFramebuffer},e.setOpenGLRenderWindow=function(n){t._openGLRenderWindow!==n&&(e.releaseGraphicsResources(),t._openGLRenderWindow=n,t.context=null,n&&(t.context=t._openGLRenderWindow.getContext()))},e.releaseGraphicsResources=function(){t.glFramebuffer&&t.context.deleteFramebuffer(t.glFramebuffer)},e.getSize=function(){var e=[0,0];return null!==t.glFramebuffer&&(e[0]=t.glFramebuffer.width,e[1]=t.glFramebuffer.height),e},e.populateFramebuffer=function(){if(t.context){e.bind();var n=t.context,s=a.ZP.newInstance();s.setOpenGLRenderWindow(t._openGLRenderWindow),s.setMinificationFilter(o.wn.LINEAR),s.setMagnificationFilter(o.wn.LINEAR),s.create2DFromRaw(t.glFramebuffer.width,t.glFramebuffer.height,4,i.Tu.UNSIGNED_CHAR,null),e.setColorBuffer(s),t.depthTexture=n.createRenderbuffer(),n.bindRenderbuffer(n.RENDERBUFFER,t.depthTexture),n.renderbufferStorage(n.RENDERBUFFER,n.DEPTH_COMPONENT16,t.glFramebuffer.width,t.glFramebuffer.height),n.framebufferRenderbuffer(n.FRAMEBUFFER,n.DEPTH_ATTACHMENT,n.RENDERBUFFER,t.depthTexture)}else(0,r.E0)("you must set the OpenGLRenderWindow before calling populateFrameBuffer")},e.getColorTexture=function(){return t.colorBuffers[0]}}var u={glFramebuffer:null,colorBuffers:null,depthTexture:null,previousDrawBinding:0,previousReadBinding:0,previousDrawBuffer:0,previousReadBuffer:0,previousActiveFramebuffer:null};function l(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,u,n),(0,r.j6)(e,t),t.colorBuffers&&(0,r.E0)("you cannot initialize colorBuffers through the constructor. You should call setColorBuffer() instead."),t.colorBuffers=[],(0,r.c$)(e,t,["colorBuffers"]),s(e,t)}var c={newInstance:(0,r.WL)(l,"vtkFramebuffer"),extend:l}},1464:function(e,t,n){"use strict";n.d(t,{ZP:function(){return b}});var r=n(92393),a=n(6807),i=n(64950),o=n(48530),s=n(12261),u=n(18361),l=n(31426),c=r.ZP.vtkErrorMacro;function d(e,t){t.classHierarchy.push("vtkOpenGLCellArrayBufferObject"),e.setType(u.L.ARRAY_BUFFER),e.createVBO=function(n,r,a,i){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null;if(!n.getData()||!n.getData().length)return t.elementCount=0,0;t.blockSize=3,t.vertexOffset=0,t.normalOffset=0,t.tCoordOffset=0,t.tCoordComponents=0,t.colorComponents=0,t.colorOffset=0,t.customData=[];var c=i.points.getData(),d=null,f=null,v=null,m=i.colors?i.colors.getNumberOfComponents():0,p=i.tcoords?i.tcoords.getNumberOfComponents():0;i.normals&&(t.normalOffset=4*t.blockSize,t.blockSize+=3,d=i.normals.getData()),i.customAttributes&&i.customAttributes.forEach((function(e){e&&(t.customData.push({data:e.getData(),offset:4*t.blockSize,components:e.getNumberOfComponents(),name:e.getName()}),t.blockSize+=e.getNumberOfComponents())})),i.tcoords&&(t.tCoordOffset=4*t.blockSize,t.tCoordComponents=p,t.blockSize+=p,f=i.tcoords.getData()),i.colors?(t.colorComponents=i.colors.getNumberOfComponents(),t.colorOffset=0,v=i.colors.getData(),t.colorBO||(t.colorBO=s.ZP.newInstance()),t.colorBO.setOpenGLRenderWindow(t._openGLRenderWindow)):t.colorBO=null,t.stride=4*t.blockSize;var h,g=0,A=0,y=0,S=0,b=0,w=0,I={anythingToPoints:function(e,t,n){for(var r=0;r2)for(var r=0;r2){for(var r=0;r1?2*(e-1):0},polysToWireframe:function(e,t){return e>2?2*e:0},stripsToWireframe:function(e,t){return e>2?4*e-6:0},polysToSurface:function(e,t){return e>2?3*(e-2):0},stripsToSurface:function(e,t,n){return e>2?3*(e-2):0}},C=null,D=null;a===l.hX.POINTS||"verts"===r?(C=I.anythingToPoints,D=E.anythingToPoints):a===l.hX.WIREFRAME||"lines"===r?(C=I["".concat(r,"ToWireframe")],D=E["".concat(r,"ToWireframe")]):(C=I["".concat(r,"ToSurface")],D=E["".concat(r,"ToSurface")]);for(var _=n.getData(),M=_.length,O=0,P=0;P0&&(Math.abs(N)/k>1e6||Math.abs(Math.log10(k))>3||0===k&&N>1e6);if(j){for(var G=new Float64Array(3),H=new Float64Array(3),Q=0;Q<3;++Q){var q=i.points.getRange(Q),z=q[1]-q[0];G[Q]=.5*(q[1]+q[0]),H[Q]=z>0?1/z:1}e.setCoordShiftAndScale(G,H)}else!0===t.coordShiftAndScaleEnabled&&e.setCoordShiftAndScale(null,null);if(o)if(o.points||o.cells){var W=new Int32Array(O+o.points.length);W.set(o.points),o.points=W;var Y=new Int32Array(O+o.cells.length);Y.set(o.cells),o.cells=Y}else o.points=new Int32Array(O),o.cells=new Int32Array(O);var Z=i.vertexOffset;h=function(e){if(o&&(o.points[Z]=e,o.cells[Z]=w),++Z,g=3*e,t.coordShiftAndScaleEnabled?(x[R++]=(c[g++]-t.coordShift[0])*t.coordScale[0],x[R++]=(c[g++]-t.coordShift[1])*t.coordScale[1],x[R++]=(c[g++]-t.coordShift[2])*t.coordScale[2]):(x[R++]=c[g++],x[R++]=c[g++],x[R++]=c[g++]),null!==d&&(A=i.haveCellNormals?3*(w+i.cellOffset):3*e,x[R++]=d[A++],x[R++]=d[A++],x[R++]=d[A++]),t.customData.forEach((function(t){b=e*t.components;for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,f,n),s.ZP.extend(e,t,n),r.ZP.setGet(e,t,["colorBO","elementCount","stride","colorBOStride","vertexOffset","normalOffset","tCoordOffset","tCoordComponents","colorOffset","colorComponents","customData"]),r.ZP.get(e,t,["coordShift","coordScale","coordShiftAndScaleEnabled","inverseShiftAndScaleMatrix"]),d(e,t)}var m={newInstance:r.ZP.newInstance(v),extend:v},p=n(94143),h=n(93800),g={Start:0,Points:0,Lines:1,Tris:2,TriStrips:3,TrisEdges:4,TriStripsEdges:5,End:6};function A(e,t){t.classHierarchy.push("vtkOpenGLHelper"),e.setOpenGLRenderWindow=function(e){t.context=e.getContext(),t.program.setContext(t.context),t.VAO.setOpenGLRenderWindow(e),t.CABO.setOpenGLRenderWindow(e)},e.releaseGraphicsResources=function(e){t.VAO.releaseGraphicsResources(),t.CABO.releaseGraphicsResources(),t.CABO.setElementCount(0)},e.drawArrays=function(n,r,a,i){if(t.CABO.getElementCount()){var o=e.getOpenGLMode(a),s=e.haveWideLines(n,r),u=t.context,l=u.getParameter(u.DEPTH_WRITEMASK);t.pointPicking&&u.depthMask(!1),o===u.LINES&&s?(e.updateShaders(n,r,i),u.drawArraysInstanced(o,0,t.CABO.getElementCount(),2*Math.ceil(r.getProperty().getLineWidth()))):(u.lineWidth(r.getProperty().getLineWidth()),e.updateShaders(n,r,i),u.drawArrays(o,0,t.CABO.getElementCount()),u.lineWidth(1));var c=(o===u.POINTS?1:0)||(o===u.LINES?2:3);return t.pointPicking&&u.depthMask(l),t.CABO.getElementCount()/c}return 0},e.getOpenGLMode=function(e){if(t.pointPicking)return t.context.POINTS;var n=t.primitiveType;return e===l.hX.POINTS||n===g.Points?t.context.POINTS:e===l.hX.WIREFRAME||n===g.Lines||n===g.TrisEdges||n===g.TriStripsEdges?t.context.LINES:t.context.TRIANGLES},e.haveWideLines=function(e,n){return n.getProperty().getLineWidth()>1&&!(t.CABO.getOpenGLRenderWindow()&&t.CABO.getOpenGLRenderWindow().getHardwareMaximumLineWidth()>=n.getProperty().getLineWidth())},e.getNeedToRebuildShaders=function(t,n,r){return!!(r.getNeedToRebuildShaders(e,t,n)||0===e.getProgram()||e.getShaderSourceTime().getMTime() 0.0)"," {"," float offset = float(gl_InstanceID / 2) * lineWidthStepSize - halfLineWidth;"," vec4 tmpPos = gl_Position;"," vec3 tmpPos2 = tmpPos.xyz / tmpPos.w;"," tmpPos2.x = tmpPos2.x + 2.0 * mod(float(gl_InstanceID), 2.0) * offset / viewportSize[0];"," tmpPos2.y = tmpPos2.y + 2.0 * mod(float(gl_InstanceID + 1), 2.0) * offset / viewportSize[1];"," gl_Position = vec4(tmpPos2.xyz * tmpPos.w, tmpPos.w);"," }"]).result),n.Vertex=i},e.getPointPickingPrimitiveSize=function(){return t.primitiveType===g.Points?2:t.primitiveType===g.Lines?4:6}}var y={context:null,program:null,shaderSourceTime:null,VAO:null,attributeUpdateTime:null,CABO:null,primitiveType:0,pointPicking:!1};function S(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,y,n),r.ZP.obj(e,t),t.shaderSourceTime={},r.ZP.obj(t.shaderSourceTime),t.attributeUpdateTime={},r.ZP.obj(t.attributeUpdateTime),r.ZP.setGet(e,t,["program","shaderSourceTime","VAO","attributeUpdateTime","CABO","primitiveType","pointPicking"]),t.program=p.Z.newInstance(),t.VAO=h.ZP.newInstance(),t.CABO=m.newInstance(),A(e,t)}var b={newInstance:r.ZP.newInstance(S),extend:S,primTypes:g}},61690:function(e,t,n){"use strict";n.d(t,{ZP:function(){return _}});var r=n(64950),a=n(24513),i=n(92393),o=n(19013),s=n(94378),u=n(1464),l=n(43739),c=n(82331),d=n(94143),f=n(8723),v=n(31426),m=n(96436),p=n(79034),h=n(76236),g=n(85886),A=n(61875),y=n(91158),S=i.E0,b=a.Z.SlicingMode;function w(e,t,n){if(t.apply(e)){var r=e.getIndependentComponents();return"".concat(e.getMTime(),"-").concat(r,"-").concat(n)}return"0"}function I(e,t){t.classHierarchy.push("vtkOpenGLImageMapper"),e.buildPass=function(n){if(n){t.currentRenderPass=null,t.openGLImageSlice=e.getFirstAncestorOfType("vtkOpenGLImageSlice"),t.openGLRenderer=e.getFirstAncestorOfType("vtkOpenGLRenderer"),t._openGLRenderWindow=t.openGLRenderer.getParent(),t.context=t._openGLRenderWindow.getContext(),t.tris.setOpenGLRenderWindow(t._openGLRenderWindow),t.openGLTexture.setOpenGLRenderWindow(t._openGLRenderWindow),t.colorTexture.setOpenGLRenderWindow(t._openGLRenderWindow),t.pwfTexture.setOpenGLRenderWindow(t._openGLRenderWindow);var r=t.openGLRenderer.getRenderable();t.openGLCamera=t.openGLRenderer.getViewNodeFor(r.getActiveCamera()),t.renderable.getSliceAtFocalPoint()&&t.renderable.setSliceFromCamera(r.getActiveCamera())}},e.translucentPass=function(n,r){n&&(t.currentRenderPass=r,e.render())},e.opaqueZBufferPass=function(n){n&&(t.haveSeenDepthRequest=!0,t.renderDepth=!0,e.render(),t.renderDepth=!1)},e.opaquePass=function(t){t&&e.render()},e.getCoincidentParameters=function(e,n){return t.renderable.getResolveCoincidentTopology()?t.renderable.getCoincidentTopologyPolygonOffsetParameters():null},e.render=function(){var n=t.openGLImageSlice.getRenderable(),r=t.openGLRenderer.getRenderable();e.renderPiece(r,n)},e.buildShaders=function(n,r,a){e.getShaderTemplate(n,r,a),t.lastRenderPassShaderReplacement&&t.lastRenderPassShaderReplacement(n),e.replaceShaderValues(n,r,a)},e.getShaderTemplate=function(e,t,n){e.Vertex=h.v,e.Fragment=g.v,e.Geometry=""},e.replaceShaderValues=function(n,r,a){var i=n.Vertex,o=n.Fragment;i=d.Z.substitute(i,"//VTK::Camera::Dec",["uniform mat4 MCPCMatrix;"]).result,i=d.Z.substitute(i,"//VTK::PositionVC::Impl",[" gl_Position = MCPCMatrix * vertexMC;"]).result,i=d.Z.substitute(i,"//VTK::TCoord::Impl","tcoordVCVSOutput = tcoordMC;").result,i=d.Z.substitute(i,"//VTK::TCoord::Dec","attribute vec2 tcoordMC; varying vec2 tcoordVCVSOutput;").result;var s=t.openGLTexture.getComponents(),u=a.getProperty().getIndependentComponents(),l=["varying vec2 tcoordVCVSOutput;","uniform float cshift0;","uniform float cscale0;","uniform float pwfshift0;","uniform float pwfscale0;","uniform sampler2D texture1;","uniform sampler2D colorTexture1;","uniform sampler2D pwfTexture1;","uniform float opacity;"];if(u){for(var c=1;c6&&((0,i.E0)("OpenGL has a limit of 6 clipping planes"),s=6),a=d.Z.substitute(a,"//VTK::Clip::Dec",["uniform int numClipPlanes;","uniform vec4 clipPlanes[6];","varying float clipDistancesVSOutput[6];"]).result,a=d.Z.substitute(a,"//VTK::Clip::Impl",["for (int planeNum = 0; planeNum < 6; planeNum++)"," {"," if (planeNum >= numClipPlanes)"," {"," break;"," }"," clipDistancesVSOutput[planeNum] = dot(clipPlanes[planeNum], vertexMC);"," }"]).result,o=d.Z.substitute(o,"//VTK::Clip::Dec",["uniform int numClipPlanes;","varying float clipDistancesVSOutput[6];"]).result,o=d.Z.substitute(o,"//VTK::Clip::Impl",["for (int planeNum = 0; planeNum < 6; planeNum++)"," {"," if (planeNum >= numClipPlanes)"," {"," break;"," }"," if (clipDistancesVSOutput[planeNum] < 0.0) discard;"," }"]).result}e.Vertex=a,e.Fragment=o},e.getNeedToRebuildShaders=function(e,n,r){var a=t.openGLTexture.getComponents(),i=r.getProperty().getIndependentComponents(),o=!1;return!t.currentRenderPass&&t.lastRenderPassShaderReplacement&&(o=!0,t.lastRenderPassShaderReplacement=null),t.currentRenderPass&&t.currentRenderPass.getShaderReplacement()!==t.lastRenderPassShaderReplacement&&(t.lastRenderPassShaderReplacement=t.currentRenderPass.getShaderReplacement(),o=!0),!(!o&&t.lastHaveSeenDepthRequest===t.haveSeenDepthRequest&&0!==e.getProgram()&&t.lastTextureComponents===a&&t.lastIndependentComponents===i)&&(t.lastHaveSeenDepthRequest=t.haveSeenDepthRequest,t.lastTextureComponents=a,t.lastIndependentComponents=i,!0)},e.updateShaders=function(n,r,a){if(t.lastBoundBO=n,e.getNeedToRebuildShaders(n,r,a)){var i={Vertex:null,Fragment:null,Geometry:null};e.buildShaders(i,r,a);var o=t._openGLRenderWindow.getShaderCache().readyShaderProgramArray(i.Vertex,i.Fragment,i.Geometry);o!==n.getProgram()&&(n.setProgram(o),n.getVAO().releaseGraphicsResources()),n.getShaderSourceTime().modified()}else t._openGLRenderWindow.getShaderCache().readyShaderProgram(n.getProgram());n.getVAO().bind(),e.setMapperShaderParameters(n,r,a),e.setCameraShaderParameters(n,r,a),e.setPropertyShaderParameters(n,r,a)},e.setMapperShaderParameters=function(n,a,o){n.getCABO().getElementCount()&&(t.VBOBuildTime>n.getAttributeUpdateTime().getMTime()||n.getShaderSourceTime().getMTime()>n.getAttributeUpdateTime().getMTime())&&(n.getProgram().isAttributeUsed("vertexMC")&&(n.getVAO().addAttributeArray(n.getProgram(),n.getCABO(),"vertexMC",n.getCABO().getVertexOffset(),n.getCABO().getStride(),t.context.FLOAT,3,t.context.FALSE)||S("Error setting vertexMC in shader VAO.")),n.getProgram().isAttributeUsed("tcoordMC")&&n.getCABO().getTCoordOffset()&&(n.getVAO().addAttributeArray(n.getProgram(),n.getCABO(),"tcoordMC",n.getCABO().getTCoordOffset(),n.getCABO().getStride(),t.context.FLOAT,n.getCABO().getTCoordComponents(),t.context.FALSE)||S("Error setting tcoordMC in shader VAO.")),n.getAttributeUpdateTime().modified());var s=t.openGLTexture.getTextureUnit();n.getProgram().setUniformi("texture1",s);var u=t.openGLTexture.getComponents(),l=o.getProperty().getIndependentComponents();if(l)for(var c=0;c6&&((0,i.E0)("OpenGL has a limit of 6 clipping planes"),x=6);var R=n.getCABO().getCoordShiftAndScaleEnabled()?n.getCABO().getInverseShiftAndScaleMatrix():null,L=R?r.copy(t.imagematinv,o.getMatrix()):o.getMatrix();R&&(r.transpose(L,L),r.multiply(L,L,R),r.transpose(L,L)),r.transpose(t.imagemat,t.currentInput.getIndexToWorld()),r.multiply(t.imagematinv,L,t.imagemat);for(var k=[],N=0;N1?1:0;var $=[b.X,b.Y,b.Z].includes(t.renderable.getSlicingMode())?G:Q,J=a.getSpatialExtent(),ee=i.getData(),te=null;if(j===b.I){te=new ee.constructor(W[2]*W[1]*c);for(var ne=0,re=0;re2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,E,n),f.Z.extend(e,t,n),A.Z.implementReplaceShaderCoincidentOffset(e,t,n),t.tris=u.ZP.newInstance(),t.openGLTexture=c.ZP.newInstance(),t.colorTexture=c.ZP.newInstance(),t.pwfTexture=c.ZP.newInstance(),t.imagemat=r.identity(new Float64Array(16)),t.imagematinv=r.identity(new Float64Array(16)),(0,i.g2)(e,t,[]),t.VBOBuildTime={},(0,i.j6)(t.VBOBuildTime),I(e,t)}var D=(0,i.WL)(C,"vtkOpenGLImageMapper"),_={newInstance:D,extend:C};(0,y.vw)("vtkImageMapper",D)},48019:function(e,t,n){"use strict";n.d(t,{ZP:function(){return d}});var r=n(64950),a=n(92393),i=n(8723),o=n(91158);function s(e,t){t.classHierarchy.push("vtkOpenGLImageSlice"),e.buildPass=function(n){if(t.renderable&&t.renderable.getVisibility()&&n){if(!t.renderable)return;t._openGLRenderWindow=e.getFirstAncestorOfType("vtkOpenGLRenderWindow"),t.openGLRenderer=e.getFirstAncestorOfType("vtkOpenGLRenderer"),t.context=t._openGLRenderWindow.getContext(),e.prepareNodes(),e.addMissingNode(t.renderable.getMapper()),e.removeUnusedNodes()}},e.traverseOpaqueZBufferPass=function(t){e.traverseOpaquePass(t)},e.traverseOpaquePass=function(n){t.renderable&&t.renderable.getNestedVisibility()&&t.renderable.getIsOpaque()&&(!t.openGLRenderer.getSelector()||t.renderable.getNestedPickable())&&(e.apply(n,!0),t.children.forEach((function(e){e.traverse(n)})),e.apply(n,!1))},e.traverseTranslucentPass=function(n){!t.renderable||!t.renderable.getNestedVisibility()||t.renderable.getIsOpaque()||t.openGLRenderer.getSelector()&&!t.renderable.getNestedPickable()||(e.apply(n,!0),t.children.forEach((function(e){e.traverse(n)})),e.apply(n,!1))},e.queryPass=function(e,n){if(e){if(!t.renderable||!t.renderable.getVisibility())return;t.renderable.getIsOpaque()?n.incrementOpaqueActorCount():n.incrementTranslucentActorCount()}},e.opaqueZBufferPass=function(t,n){return e.opaquePass(t,n)},e.opaquePass=function(e,n){e&&t.context.depthMask(!0)},e.translucentPass=function(e,n){t.context.depthMask(!e)},e.getKeyMatrices=function(){return t.renderable.getMTime()>t.keyMatrixTime.getMTime()&&(r.copy(t.keyMatrices.mcwc,t.renderable.getMatrix()),r.transpose(t.keyMatrices.mcwc,t.keyMatrices.mcwc),t.keyMatrixTime.modified()),t.keyMatrices}}var u={context:null,keyMatrixTime:null,keyMatrices:null};function l(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,u,n),i.Z.extend(e,t,n),t.keyMatrixTime={},(0,a.j6)(t.keyMatrixTime,{mtime:0}),t.keyMatrices={mcwc:r.identity(new Float64Array(16))},(0,a.g2)(e,t,["context"]),s(e,t)}var c=(0,a.WL)(l,"vtkOpenGLImageSlice"),d={newInstance:c,extend:l};(0,o.vw)("vtkImageSlice",c)},25116:function(e,t,n){"use strict";n.d(t,{ZP:function(){return d}});var r=n(92393),a=n(8723),i=n(91158),o=r.eR;function s(e,t){t.classHierarchy.push("vtkOpenGLPixelSpaceCallbackMapper"),e.opaquePass=function(n,r){t.openGLRenderer=e.getFirstAncestorOfType("vtkOpenGLRenderer"),t._openGLRenderWindow=t.openGLRenderer.getParent();var a=t.openGLRenderer.getAspectRatio(),i=t.openGLRenderer?t.openGLRenderer.getRenderable().getActiveCamera():null,s=t.openGLRenderer.getTiledSizeAndOrigin(),u=null;if(t.renderable.getUseZValues()){var l=r.getZBufferTexture(),c=Math.floor(l.getWidth()),d=Math.floor(l.getHeight()),f=t._openGLRenderWindow.getContext();l.bind();var v=r.getFramebuffer();v?v.saveCurrentBindingsAndBuffers():o("No framebuffer to save/restore");var m=f.createFramebuffer();f.bindFramebuffer(f.FRAMEBUFFER,m),f.framebufferTexture2D(f.FRAMEBUFFER,f.COLOR_ATTACHMENT0,f.TEXTURE_2D,l.getHandle(),0),f.checkFramebufferStatus(f.FRAMEBUFFER)===f.FRAMEBUFFER_COMPLETE&&(u=new Uint8Array(c*d*4),f.viewport(0,0,c,d),f.readPixels(0,0,c,d,f.RGBA,f.UNSIGNED_BYTE,u)),v&&v.restorePreviousBindingsAndBuffers(),f.deleteFramebuffer(m)}t.renderable.invokeCallback(t.renderable.getInputData(),i,a,s,u)},e.queryPass=function(e,n){e&&t.renderable.getUseZValues()&&n.requestDepth()}}var u={};function l(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,u,n),a.Z.extend(e,t,n),s(e,t)}var c=(0,r.WL)(l,"vtkOpenGLPixelSpaceCallbackMapper"),d={newInstance:c,extend:l};(0,i.vw)("vtkPixelSpaceCallbackMapper",c)},63046:function(e,t,n){"use strict";n.d(t,{ZP:function(){return d}});var r=n(92393),a=n(8723),i=n(91158),o=r.eR;function s(e,t){t.classHierarchy.push("vtkOpenGLRenderer"),e.buildPass=function(n){if(n){if(!t.renderable)return;e.updateLights(),e.prepareNodes(),e.addMissingNode(t.renderable.getActiveCamera()),e.addMissingNodes(t.renderable.getViewPropsWithNestedProps()),e.removeUnusedNodes()}},e.updateLights=function(){for(var e=0,n=t.renderable.getLightsByReference(),r=0;r0&&e++;return e||(o("No lights are on, creating one."),t.renderable.createLight()),e},e.opaqueZBufferPass=function(n){if(n){var r=0,a=t.context;t.renderable.getTransparent()||(t.context.clearColor(1,0,0,1),r|=a.COLOR_BUFFER_BIT),t.renderable.getPreserveDepthBuffer()||(a.clearDepth(1),r|=a.DEPTH_BUFFER_BIT,t.context.depthMask(!0));var i=e.getTiledSizeAndOrigin();a.enable(a.SCISSOR_TEST),a.scissor(i.lowerLeftU,i.lowerLeftV,i.usize,i.vsize),a.viewport(i.lowerLeftU,i.lowerLeftV,i.usize,i.vsize),a.colorMask(!0,!0,!0,!0),r&&a.clear(r),a.enable(a.DEPTH_TEST)}},e.cameraPass=function(t){t&&e.clear()},e.getAspectRatio=function(){var e=t._parent.getSizeByReference(),n=t.renderable.getViewportByReference();return e[0]*(n[2]-n[0])/((n[3]-n[1])*e[1])},e.getTiledSizeAndOrigin=function(){var e=t.renderable.getViewportByReference(),n=[0,0,1,1],r=e[0]-n[0],a=e[1]-n[1],i=t._parent.normalizedDisplayToDisplay(r,a),o=Math.round(i[0]),s=Math.round(i[1]),u=e[2]-n[0],l=e[3]-n[1],c=t._parent.normalizedDisplayToDisplay(u,l),d=Math.round(c[0])-o,f=Math.round(c[1])-s;return d<0&&(d=0),f<0&&(f=0),{usize:d,vsize:f,lowerLeftU:o,lowerLeftV:s}},e.clear=function(){var n=0,r=t.context;if(!t.renderable.getTransparent()){var a=t.renderable.getBackgroundByReference();t.context.clearColor(a[0],a[1],a[2],a[3]),n|=r.COLOR_BUFFER_BIT}t.renderable.getPreserveDepthBuffer()||(r.clearDepth(1),n|=r.DEPTH_BUFFER_BIT,t.context.depthMask(!0)),r.colorMask(!0,!0,!0,!0);var i=e.getTiledSizeAndOrigin();r.enable(r.SCISSOR_TEST),r.scissor(i.lowerLeftU,i.lowerLeftV,i.usize,i.vsize),r.viewport(i.lowerLeftU,i.lowerLeftV,i.usize,i.vsize),n&&r.clear(n),r.enable(r.DEPTH_TEST)},e.releaseGraphicsResources=function(){null!==t.selector&&t.selector.releaseGraphicsResources()},e.setOpenGLRenderWindow=function(n){t._openGLRenderWindow!==n&&(e.releaseGraphicsResources(),t._openGLRenderWindow=n,t.context=null,n&&(t.context=t._openGLRenderWindow.getContext()))}}var u={context:null,selector:null};function l(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,u,n),a.Z.extend(e,t,n),(0,r.U2)(e,t,["shaderCache"]),(0,r.g2)(e,t,["selector"]),(0,r.B6)(e,t,["openGLRenderWindow"]),s(e,t)}var c=(0,r.WL)(l,"vtkOpenGLRenderer"),d={newInstance:c,extend:l};(0,i.vw)("vtkRenderer",c)},61875:function(e,t,n){"use strict";n.d(t,{Z:function(){return a}});var r=n(94143);var a={implementReplaceShaderCoincidentOffset:function(e,t){e.replaceShaderCoincidentOffset=function(n,a,i){var o=e.getCoincidentParameters(a,i);if(o&&(0!==o.factor||0!==o.offset)){var s=n.Fragment;s=r.Z.substitute(s,"//VTK::Coincident::Dec",["uniform float cfactor;","uniform float coffset;"]).result,t.context.getExtension("EXT_frag_depth")&&(0!==o.factor?(s=r.Z.substitute(s,"//VTK::UniformFlow::Impl",["float cscale = length(vec2(dFdx(gl_FragCoord.z),dFdy(gl_FragCoord.z)));","//VTK::UniformFlow::Impl"],!1).result,s=r.Z.substitute(s,"//VTK::Depth::Impl","gl_FragDepthEXT = gl_FragCoord.z + cfactor*cscale + 0.000016*coffset;").result):s=r.Z.substitute(s,"//VTK::Depth::Impl","gl_FragDepthEXT = gl_FragCoord.z + 0.000016*coffset;").result),t._openGLRenderWindow.getWebgl2()&&(0!==o.factor?(s=r.Z.substitute(s,"//VTK::UniformFlow::Impl",["float cscale = length(vec2(dFdx(gl_FragCoord.z),dFdy(gl_FragCoord.z)));","//VTK::UniformFlow::Impl"],!1).result,s=r.Z.substitute(s,"//VTK::Depth::Impl","gl_FragDepth = gl_FragCoord.z + cfactor*cscale + 0.000016*coffset;").result):s=r.Z.substitute(s,"//VTK::Depth::Impl","gl_FragDepth = gl_FragCoord.z + 0.000016*coffset;").result),n.Fragment=s}}}}},94143:function(e,t,n){"use strict";n.d(t,{Z:function(){return v}});var r=n(92393),a=r.ZP.vtkErrorMacro;function i(e,t){t.classHierarchy.push("vtkShader"),e.compile=function(){var e=t.context.VERTEX_SHADER;if(!t.source||!t.source.length||"Unknown"===t.shaderType)return!1;if(0!==t.handle&&(t.context.deleteShader(t.handle),t.handle=0),"Fragment"===t.shaderType)e=t.context.FRAGMENT_SHADER;else e=t.context.VERTEX_SHADER;if(t.handle=t.context.createShader(e),t.context.shaderSource(t.handle,t.source),t.context.compileShader(t.handle),!t.context.getShaderParameter(t.handle,t.context.COMPILE_STATUS)){var n=t.context.getShaderInfoLog(t.handle);return a("Error compiling shader '".concat(t.source,"': ").concat(n)),t.context.deleteShader(t.handle),t.handle=0,!1}return!0},e.cleanup=function(){"Unknown"!==t.shaderType&&0!==t.handle&&(t.context.deleteShader(t.handle),t.handle=0,t.dirty=!0)}}var o={shaderType:"Unknown",source:"",error:"",handle:0,dirty:!1,context:null};function s(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,o,n),r.ZP.obj(e,t),r.ZP.setGet(e,t,["shaderType","source","error","handle","context"]),i(e,t)}var u={newInstance:r.ZP.newInstance(s,"vtkShader"),extend:s},l=r.ZP.vtkErrorMacro;function c(e,t){t.classHierarchy.push("vtkShaderProgram"),e.compileShader=function(){return t.vertexShader.compile()?t.fragmentShader.compile()?e.attachShader(t.vertexShader)&&e.attachShader(t.fragmentShader)?e.link()?(e.setCompiled(!0),1):(l("Links failed: ".concat(t.error)),0):(l(t.error),0):(l(t.fragmentShader.getSource().split("\n").map((function(e,t){return"".concat(t,": ").concat(e)})).join("\n")),l(t.fragmentShader.getError()),0):(l(t.vertexShader.getSource().split("\n").map((function(e,t){return"".concat(t,": ").concat(e)})).join("\n")),l(t.vertexShader.getError()),0)},e.cleanup=function(){"Unknown"!==t.shaderType&&0!==t.handle&&(t.context.deleteShader(t.handle),t.handle=0)},e.bind=function(){return!(!t.linked&&!e.link())&&(t.context.useProgram(t.handle),e.setBound(!0),!0)},e.isBound=function(){return!!t.bound},e.release=function(){t.context.useProgram(null),e.setBound(!1)},e.setContext=function(e){t.vertexShader.setContext(e),t.fragmentShader.setContext(e),t.geometryShader.setContext(e)},e.link=function(){if(t.inked)return!0;if(0===t.handle)return t.error="Program has not been initialized, and/or does not have shaders.",!1;if(t.uniformLocs={},t.context.linkProgram(t.handle),!t.context.getProgramParameter(t.handle,t.context.LINK_STATUS)){var n=t.context.getProgramInfoLog(t.handle);return l("Error linking shader ".concat(n)),t.handle=0,!1}return e.setLinked(!0),t.attributeLocs={},!0},e.setUniformMatrix=function(n,r){var a=e.findUniform(n);if(-1===a)return t.error="Could not set uniform ".concat(n," . No such uniform."),!1;var i=new Float32Array(r);return t.context.uniformMatrix4fv(a,!1,i),!0},e.setUniformMatrix3x3=function(n,r){var a=e.findUniform(n);if(-1===a)return t.error="Could not set uniform ".concat(n," . No such uniform."),!1;var i=new Float32Array(r);return t.context.uniformMatrix3fv(a,!1,i),!0},e.setUniformf=function(n,r){var a=e.findUniform(n);return-1===a?(t.error="Could not set uniform ".concat(n," . No such uniform."),!1):(t.context.uniform1f(a,r),!0)},e.setUniformfv=function(n,r){var a=e.findUniform(n);return-1===a?(t.error="Could not set uniform ".concat(n," . No such uniform."),!1):(t.context.uniform1fv(a,r),!0)},e.setUniformi=function(n,r){var a=e.findUniform(n);return-1===a?(t.error="Could not set uniform ".concat(n," . No such uniform."),!1):(t.context.uniform1i(a,r),!0)},e.setUniformiv=function(n,r){var a=e.findUniform(n);return-1===a?(t.error="Could not set uniform ".concat(n," . No such uniform."),!1):(t.context.uniform1iv(a,r),!0)},e.setUniform2f=function(n,r,a){var i=e.findUniform(n);if(-1===i)return t.error="Could not set uniform ".concat(n," . No such uniform."),!1;if(void 0===a)throw new RangeError("Invalid number of values for array");return t.context.uniform2f(i,r,a),!0},e.setUniform2fv=function(n,r){var a=e.findUniform(n);return-1===a?(t.error="Could not set uniform ".concat(n," . No such uniform."),!1):(t.context.uniform2fv(a,r),!0)},e.setUniform2i=function(n,r,a){var i=e.findUniform(n);if(-1===i)return t.error="Could not set uniform ".concat(n," . No such uniform."),!1;if(void 0===a)throw new RangeError("Invalid number of values for array");return t.context.uniform2i(i,r,a),!0},e.setUniform2iv=function(n,r){var a=e.findUniform(n);return-1===a?(t.error="Could not set uniform ".concat(n," . No such uniform."),!1):(t.context.uniform2iv(a,r),!0)},e.setUniform3f=function(n,r,a,i){var o=e.findUniform(n);if(-1===o)return t.error="Could not set uniform ".concat(n," . No such uniform."),!1;if(void 0===i)throw new RangeError("Invalid number of values for array");return t.context.uniform3f(o,r,a,i),!0},e.setUniform3fArray=function(n,r){var a=e.findUniform(n);if(-1===a)return t.error="Could not set uniform ".concat(n," . No such uniform."),!1;if(!Array.isArray(r)||3!==r.length)throw new RangeError("Invalid number of values for array");return t.context.uniform3f(a,r[0],r[1],r[2]),!0},e.setUniform3fv=function(n,r){var a=e.findUniform(n);return-1===a?(t.error="Could not set uniform ".concat(n," . No such uniform."),!1):(t.context.uniform3fv(a,r),!0)},e.setUniform3i=function(n){var r=e.findUniform(n);if(-1===r)return t.error="Could not set uniform ".concat(n," . No such uniform."),!1;for(var a=arguments.length,i=new Array(a>1?a-1:0),o=1;o1?a-1:0),o=1;o1?a-1:0),o=1;o2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,d,n),t.attributesLocs={},t.uniformLocs={},t.vertexShader=u.newInstance(),t.vertexShader.setShaderType("Vertex"),t.fragmentShader=u.newInstance(),t.fragmentShader.setShaderType("Fragment"),t.geometryShader=u.newInstance(),t.geometryShader.setShaderType("Geometry"),r.ZP.obj(e,t),r.ZP.get(e,t,["lastCameraMTime"]),r.ZP.setGet(e,t,["error","handle","compiled","bound","md5Hash","vertexShader","fragmentShader","geometryShader","linked"]),c(e,t)}var v={newInstance:r.ZP.newInstance(f,"vtkShaderProgram"),extend:f,substitute:function(e,t,n,r){var a="string"==typeof n?n:n.join("\n"),i=!1===r?t:new RegExp(t,"g"),o=e.replace(i,a);return{replace:o!==a,result:o}}}},82331:function(e,t,n){"use strict";n.d(t,{ZP:function(){return E}});var r=n(47169),a=n(96436),i=new Float32Array(1),o=new Int32Array(i.buffer);var s={fromHalf:function(e){var t=(32768&e)>>15,n=(31744&e)>>10,r=1023&e;return 0===n?(t?-1:1)*Math.pow(2,-14)*(r/Math.pow(2,10)):31===n?r?NaN:1/0*(t?-1:1):(t?-1:1)*Math.pow(2,n-15)*(1+r/Math.pow(2,10))},toHalf:function(e){i[0]=e;var t=o[0],n=t>>16&32768,r=t>>12&2047,a=t>>23&255;return a<103?n:a>142?(n|=31744,n|=(255===a?0:1)&&8388607&t):a<113?n|=((r|=2048)>>114-a)+(r>>113-a&1):(n|=a-112<<10|r>>1,n+=1&r)}},u=n(92393),l=n(19013),c=n(43739),d=n(8723),f=n(91158);function v(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}var m=a.ZP.Wrap,p=a.ZP.Filter,h=l.ZP.VtkDataTypes,g=u.eR,A=u.E0,y=u.t7;function S(e,t){var n=this;function r(e,n){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a=[],i=t.width*t.height*t.components;if(r&&(i*=t.depth),e!==h.FLOAT&&t.openGLDataType===t.context.FLOAT)for(var o=0;oi?n[o].subarray(0,i):n[o];a.push(new Float32Array(u))}else a.push(null);if(e!==h.UNSIGNED_CHAR&&t.openGLDataType===t.context.UNSIGNED_BYTE)for(var l=0;li?n[l].subarray(0,i):n[l];a.push(new Uint8Array(c))}else a.push(null);var d=t.context.getExtension("OES_texture_half_float"),f=t._openGLRenderWindow.getWebgl2()?t.openGLDataType===t.context.HALF_FLOAT:d&&t.openGLDataType===d.HALF_FLOAT_OES;if(f)for(var v=0;v=a&&(b=a-1);var w=y-S,I=1-w;S=S*r*i,b=b*r*i;for(var E=0;E=r&&(M=r-1);var O=D-_;_*=i,M*=i;for(var P=0;Pa[u]&&(a[u]=n[o]),o++;for(var l=[],c=[],d=0;d2048||a<-2048||a>2048)return!1}return!0}(r,a)&&!i)}t.classHierarchy.push("vtkOpenGLTexture"),e.render=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;if(n?t._openGLRenderWindow=n:(t.openGLRenderer=e.getFirstAncestorOfType("vtkOpenGLRenderer"),t._openGLRenderWindow=t.openGLRenderer.getParent()),t.context=t._openGLRenderWindow.getContext(),t.renderable.getInterpolate()?(t.generateMipmap?e.setMinificationFilter(p.LINEAR_MIPMAP_LINEAR):e.setMinificationFilter(p.LINEAR),e.setMagnificationFilter(p.LINEAR)):(e.setMinificationFilter(p.NEAREST),e.setMagnificationFilter(p.NEAREST)),t.renderable.getRepeat()&&(e.setWrapR(m.REPEAT),e.setWrapS(m.REPEAT),e.setWrapT(m.REPEAT)),t.renderable.getInputData()&&t.renderable.setImage(null),!t.handle||t.renderable.getMTime()>t.textureBuildTime.getMTime()){if(null!==t.renderable.getImage()&&(t.renderable.getInterpolate()&&(t.generateMipmap=!0,e.setMinificationFilter(p.LINEAR_MIPMAP_LINEAR)),t.renderable.getImage()&&t.renderable.getImageLoaded()&&(e.create2DFromImage(t.renderable.getImage()),e.activate(),e.sendParameters(),t.textureBuildTime.modified())),null!==t.renderable.getCanvas()){t.renderable.getInterpolate()&&(t.generateMipmap=!0,e.setMinificationFilter(p.LINEAR_MIPMAP_LINEAR));var r=t.renderable.getCanvas();e.create2DFromRaw(r.width,r.height,4,h.UNSIGNED_CHAR,r,!0),e.activate(),e.sendParameters(),t.textureBuildTime.modified()}if(null!==t.renderable.getJsImageData()){var a=t.renderable.getJsImageData();t.renderable.getInterpolate()&&(t.generateMipmap=!0,e.setMinificationFilter(p.LINEAR_MIPMAP_LINEAR)),e.create2DFromRaw(a.width,a.height,4,h.UNSIGNED_CHAR,a.data,!0),e.activate(),e.sendParameters(),t.textureBuildTime.modified()}var i=t.renderable.getInputData(0);if(i&&i.getPointData().getScalars()){for(var o=i.getExtent(),s=i.getPointData().getScalars(),u=[],l=0;lt.sendParametersTime.getMTime()&&e.sendParameters()},e.isBound=function(){var e=!1;if(t.context&&t.handle){var n=0;if(t.target===t.context.TEXTURE_2D)n=t.context.TEXTURE_BINDING_2D;else y("impossible case");e=t.context.getIntegerv(n)===t.handle}return e},e.sendParameters=function(){t.context.texParameteri(t.target,t.context.TEXTURE_WRAP_S,e.getOpenGLWrapMode(t.wrapS)),t.context.texParameteri(t.target,t.context.TEXTURE_WRAP_T,e.getOpenGLWrapMode(t.wrapT)),t._openGLRenderWindow.getWebgl2()&&t.context.texParameteri(t.target,t.context.TEXTURE_WRAP_R,e.getOpenGLWrapMode(t.wrapR)),t.context.texParameteri(t.target,t.context.TEXTURE_MIN_FILTER,e.getOpenGLFilterMode(t.minificationFilter)),t.context.texParameteri(t.target,t.context.TEXTURE_MAG_FILTER,e.getOpenGLFilterMode(t.magnificationFilter)),t._openGLRenderWindow.getWebgl2()&&(t.context.texParameteri(t.target,t.context.TEXTURE_BASE_LEVEL,t.baseLevel),t.context.texParameteri(t.target,t.context.TEXTURE_MAX_LEVEL,t.maxLevel)),t.sendParametersTime.modified()},e.getInternalFormat=function(n,r){return t._forceInternalFormat||(t.internalFormat=e.getDefaultInternalFormat(n,r)),t.internalFormat||g("Unable to find suitable internal format for T=".concat(n," NC= ").concat(r)),t.internalFormat},e.getDefaultInternalFormat=function(e,r){var a=0;return(a=t._openGLRenderWindow.getDefaultTextureInternalFormat(e,r,!1))||(a=n._openGLRenderWindow.getDefaultTextureInternalFormat(e,r,!0))||(g("Unsupported internal texture type!"),g("Unable to find suitable internal format for T=".concat(e," NC= ").concat(r))),a},e.setInternalFormat=function(n){t._forceInternalFormat=!0,n!==t.internalFormat&&(t.internalFormat=n,e.modified())},e.getFormat=function(n,r){return t.format=e.getDefaultFormat(n,r),t.format},e.getDefaultFormat=function(e,n){if(t._openGLRenderWindow.getWebgl2())switch(n){case 1:return t.context.RED;case 2:return t.context.RG;case 3:default:return t.context.RGB;case 4:return t.context.RGBA}else switch(n){case 1:return t.context.LUMINANCE;case 2:return t.context.LUMINANCE_ALPHA;case 3:default:return t.context.RGB;case 4:return t.context.RGBA}},e.resetFormatAndType=function(){t.format=0,t.internalFormat=0,t._forceInternalFormat=!1,t.openGLDataType=0},e.getDefaultDataType=function(e){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(t._openGLRenderWindow.getWebgl2())switch(e){case h.UNSIGNED_CHAR:return t.context.UNSIGNED_BYTE;case n&&h.SHORT:case n&&h.UNSIGNED_SHORT:return t.context.HALF_FLOAT;case h.FLOAT:case h.VOID:default:return t.context.FLOAT}switch(e){case h.UNSIGNED_CHAR:return t.context.UNSIGNED_BYTE;case h.FLOAT:case h.VOID:default:if(t.context.getExtension("OES_texture_float")&&t.context.getExtension("OES_texture_float_linear"))return t.context.FLOAT;var r=t.context.getExtension("OES_texture_half_float");return r&&t.context.getExtension("OES_texture_half_float_linear")?r.HALF_FLOAT_OES:t.context.UNSIGNED_BYTE}},e.getOpenGLDataType=function(n){var r=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return t.openGLDataType||(t.openGLDataType=e.getDefaultDataType(n,r)),t.openGLDataType},e.getShiftAndScale=function(){var e=0,n=1;switch(t.openGLDataType){case t.context.BYTE:e=(n=127.5)-128;break;case t.context.UNSIGNED_BYTE:n=255,e=0;break;case t.context.SHORT:e=(n=32767.5)-32768;break;case t.context.UNSIGNED_SHORT:n=65536,e=0;break;case t.context.INT:e=(n=2147483647.5)-2147483648;break;case t.context.UNSIGNED_INT:n=4294967295,e=0;case t.context.FLOAT:}return{shift:e,scale:n}},e.getOpenGLFilterMode=function(e){switch(e){case p.NEAREST:return t.context.NEAREST;case p.LINEAR:return t.context.LINEAR;case p.NEAREST_MIPMAP_NEAREST:return t.context.NEAREST_MIPMAP_NEAREST;case p.NEAREST_MIPMAP_LINEAR:return t.context.NEAREST_MIPMAP_LINEAR;case p.LINEAR_MIPMAP_NEAREST:return t.context.LINEAR_MIPMAP_NEAREST;case p.LINEAR_MIPMAP_LINEAR:return t.context.LINEAR_MIPMAP_LINEAR;default:return t.context.NEAREST}},e.getOpenGLWrapMode=function(e){switch(e){case m.CLAMP_TO_EDGE:return t.context.CLAMP_TO_EDGE;case m.REPEAT:return t.context.REPEAT;case m.MIRRORED_REPEAT:return t.context.MIRRORED_REPEAT;default:return t.context.CLAMP_TO_EDGE}},e.create2DFromRaw=function(n,i,o,s,u){var l=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(e.getOpenGLDataType(s),e.getInternalFormat(s,o),e.getFormat(s,o),!t.internalFormat||!t.format||!t.openGLDataType)return A("Failed to determine texture parameters."),!1;t.target=t.context.TEXTURE_2D,t.components=o,t.width=n,t.height=i,t.depth=1,t.numberOfDimensions=2,t._openGLRenderWindow.activateTexture(e),e.createTexture(),e.bind();var c=[u],d=r(s,c),f=a(d);return t.context.pixelStorei(t.context.UNPACK_FLIP_Y_WEBGL,l),t.context.pixelStorei(t.context.UNPACK_ALIGNMENT,1),t.context.texImage2D(t.target,0,t.internalFormat,t.width,t.height,0,t.format,t.openGLDataType,f[0]),t.generateMipmap&&t.context.generateMipmap(t.target),l&&t.context.pixelStorei(t.context.UNPACK_FLIP_Y_WEBGL,!1),e.deactivate(),!0},e.createCubeFromRaw=function(n,i,o,s,l){if(e.getOpenGLDataType(s),e.getInternalFormat(s,o),e.getFormat(s,o),!t.internalFormat||!t.format||!t.openGLDataType)return A("Failed to determine texture parameters."),!1;t.target=t.context.TEXTURE_CUBE_MAP,t.components=o,t.width=n,t.height=i,t.depth=1,t.numberOfDimensions=2,t._openGLRenderWindow.activateTexture(e),t.maxLevel=l.length/6-1,e.createTexture(),e.bind();for(var c=a(r(s,l)),d=[],f=t.width,v=t.height,m=0;m=1&&w>=1;){var I=null;S<=t.maxLevel&&(I=d[6*S+y]),t.context.texImage2D(t.context.TEXTURE_CUBE_MAP_POSITIVE_X+y,S,t.internalFormat,b,w,0,t.format,t.openGLDataType,I),S++,b/=2,w/=2}return e.deactivate(),!0},e.createDepthFromRaw=function(n,r,a,i){return e.getOpenGLDataType(a),t.format=t.context.DEPTH_COMPONENT,t._openGLRenderWindow.getWebgl2()?a===h.FLOAT?t.internalFormat=t.context.DEPTH_COMPONENT32F:t.internalFormat=t.context.DEPTH_COMPONENT16:t.internalFormat=t.context.DEPTH_COMPONENT,t.internalFormat&&t.format&&t.openGLDataType?(t.target=t.context.TEXTURE_2D,t.components=1,t.width=n,t.height=r,t.depth=1,t.numberOfDimensions=2,t._openGLRenderWindow.activateTexture(e),e.createTexture(),e.bind(),t.context.pixelStorei(t.context.UNPACK_ALIGNMENT,1),t.context.texImage2D(t.target,0,t.internalFormat,t.width,t.height,0,t.format,t.openGLDataType,i),t.generateMipmap&&t.context.generateMipmap(t.target),e.deactivate(),!0):(A("Failed to determine texture parameters."),!1)},e.create2DFromImage=function(n){if(e.getOpenGLDataType(h.UNSIGNED_CHAR),e.getInternalFormat(h.UNSIGNED_CHAR,4),e.getFormat(h.UNSIGNED_CHAR,4),!t.internalFormat||!t.format||!t.openGLDataType)return A("Failed to determine texture parameters."),!1;t.target=t.context.TEXTURE_2D,t.components=4,t.width=n.width,t.height=n.height,t.depth=1,t.numberOfDimensions=2,t._openGLRenderWindow.activateTexture(e),e.createTexture(),e.bind(),t.context.pixelStorei(t.context.UNPACK_ALIGNMENT,1);var r=!(0,c.R)(n.width)||!(0,c.R)(n.height),a=document.createElement("canvas");a.width=r?(0,c.N)(n.width):n.width,a.height=r?(0,c.N)(n.height):n.height;var i=a.getContext("2d");i.translate(0,a.height),i.scale(1,-1),i.drawImage(n,0,0,n.width,n.height,0,0,a.width,a.height);var o=a;return t.context.texImage2D(t.target,0,t.internalFormat,t.format,t.openGLDataType,o),t.generateMipmap&&t.context.generateMipmap(t.target),e.deactivate(),!0},e.create3DFromRaw=function(n,i,o,s,u,l){if(e.getOpenGLDataType(u,!0),e.getInternalFormat(u,s),e.getFormat(u,s),!t.internalFormat||!t.format||!t.openGLDataType)return A("Failed to determine texture parameters."),!1;t.target=t.context.TEXTURE_3D,t.components=s,t.width=n,t.height=i,t.depth=o,t.numberOfDimensions=3,t._openGLRenderWindow.activateTexture(e),e.createTexture(),e.bind();var c=a(r(u,[l],!0));return t.context.texImage3D(t.target,0,t.internalFormat,t.width,t.height,t.depth,0,t.format,t.openGLDataType,c[0]),t.generateMipmap&&t.context.generateMipmap(t.target),e.deactivate(),!0},e.create3DFilterableFromRaw=function(n,r,a,s,u,l){for(var d=arguments.length>6&&void 0!==arguments[6]&&arguments[6],f=n*r*a,v=[],m=[],p=0;p4096&&(P===h.FLOAT||s>=3)&&(x=4096);var R=1,L=1;f>x*x&&(L=R=Math.ceil(Math.sqrt(f/(x*x))));var k=Math.sqrt(f)/R;k=(0,c.N)(k);var N,F=Math.floor(k*R/n),B=Math.ceil(a/F),U=(0,c.N)(r*B/L);t.width=k,t.height=U,t._openGLRenderWindow.activateTexture(e),e.createTexture(),e.bind(),t.volumeInfo.xreps=F,t.volumeInfo.yreps=B,t.volumeInfo.xstride=R,t.volumeInfo.ystride=L,t.volumeInfo.offset=M.offset,t.volumeInfo.scale=M.scale;var V=k*U*s;N=P===h.FLOAT?new Float32Array(V):new Uint8Array(V);for(var j=0,G=Math.floor(n/R),H=Math.floor(r/L),Q=0;Q2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,b,n),d.Z.extend(e,t,n),t.sendParametersTime={},(0,u.j6)(t.sendParametersTime,{mtime:0}),t.textureBuildTime={},(0,u.j6)(t.textureBuildTime,{mtime:0}),(0,u.t8)(e,t,["format","openGLDataType"]),(0,u.g2)(e,t,["keyMatrixTime","minificationFilter","magnificationFilter","wrapS","wrapT","wrapR","generateMipmap"]),(0,u.U2)(e,t,["width","height","volumeInfo","components","handle","target"]),S(e,t)}var I=(0,u.WL)(w,"vtkOpenGLTexture"),E=function(e){for(var t=1;t0&&(t.instancingExtension?t.instancingExtension.vertexAttribDivisorANGLE(o.index+u,1):n.vertexAttribDivisor(o.index+u,1))}},e.release=function(){if(e.isReady()&&t.supported)t.extension?t.extension.bindVertexArrayOES(null):t.context.bindVertexArray(null);else if(e.isReady())for(var n=t.context,r=0;r0&&(t.instancingExtension?t.instancingExtension.vertexAttribDivisorANGLE(o.index+u,0):n.vertexAttribDivisor(o.index+u,0)),n.disableVertexAttribArray(o.index+u)}},e.shaderProgramChanged=function(){e.release(),t.handleVAO&&(t.extension?t.extension.deleteVertexArrayOES(t.handleVAO):t.context.deleteVertexArray(t.handleVAO)),t.handleVAO=0,t.handleProgram=0},e.releaseGraphicsResources=function(){e.shaderProgramChanged(),t.handleVAO&&(t.extension?t.extension.deleteVertexArrayOES(t.handleVAO):t.context.deleteVertexArray(t.handleVAO)),t.handleVAO=0,t.supported=!0,t.handleProgram=0},e.addAttributeArray=function(t,n,r,a,i,o,s,u){return e.addAttributeArrayWithDivisor(t,n,r,a,i,o,s,u,0,!1)},e.addAttributeArrayWithDivisor=function(n,r,i,o,s,u,l,c,d,f){if(!n)return!1;if(!n.isBound()||0===r.getHandle()||r.getType()!==a.L.ARRAY_BUFFER)return!1;if(0===t.handleProgram&&(t.handleProgram=n.getHandle()),e.isReady()||e.initialize(),!e.isReady()||t.handleProgram!==n.getHandle())return!1;var v=t.context,m={};if(m.name=i,m.index=v.getAttribLocation(t.handleProgram,i),m.offset=o,m.stride=s,m.type=u,m.size=l,m.normalize=c,m.isMatrix=f,m.divisor=d,-1===m.Index)return!1;if(r.bind(),v.enableVertexAttribArray(m.index),v.vertexAttribPointer(m.index,m.size,m.type,m.normalize,m.stride,m.offset),d>0&&(t.instancingExtension?t.instancingExtension.vertexAttribDivisorANGLE(m.index,1):v.vertexAttribDivisor(m.index,1)),m.buffer=r.getHandle(),!t.supported){for(var p=!1,h=0;h0&&(t.instancingExtension?t.instancingExtension.vertexAttribDivisorANGLE(v+m,1):f.vertexAttribDivisor(v+m,1));return!0},e.removeAttributeArray=function(n){if(!e.isReady()||0===t.handleProgram)return!1;if(!t.supported)for(var r=0;r2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,o,n),t.buffers=[],r.ZP.obj(e,t),r.ZP.get(e,t,["supported"]),r.ZP.setGet(e,t,["forceEmulation"]),i(e,t)}var u={newInstance:r.ZP.newInstance(s,"vtkOpenGLVertexArrayObject"),extend:s}},91158:function(e,t,n){"use strict";n.d(t,{ZP:function(){return c},vw:function(){return o}});var r=n(92393),a=n(65667),i=Object.create(null);function o(e,t){i[e]=t}function s(e,t){t.classHierarchy.push("vtkOpenGLViewNodeFactory")}var u={};function l(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,u,n),t.overrides=i,a.ZP.extend(e,t,n),s(0,t)}var c={newInstance:r.ZP.newInstance(l,"vtkOpenGLViewNodeFactory"),extend:l}},73716:function(e,t,n){"use strict";n.d(t,{ZP:function(){return f}});var r=n(64950),a=n(81911),i=n(92393),o=n(8723),s=n(91158);function u(e,t){t.classHierarchy.push("vtkOpenGLVolume"),e.buildPass=function(n){t.renderable&&t.renderable.getVisibility()&&n&&(t._openGLRenderWindow=e.getFirstAncestorOfType("vtkOpenGLRenderWindow"),t.openGLRenderer=e.getFirstAncestorOfType("vtkOpenGLRenderer"),t.context=t._openGLRenderWindow.getContext(),e.prepareNodes(),e.addMissingNode(t.renderable.getMapper()),e.removeUnusedNodes())},e.queryPass=function(e,n){if(e){if(!t.renderable||!t.renderable.getVisibility())return;n.incrementVolumeCount()}},e.traverseVolumePass=function(n){t.renderable&&t.renderable.getNestedVisibility()&&(!t.openGLRenderer.getSelector()||t.renderable.getNestedPickable())&&(e.apply(n,!0),t.children[0].traverse(n),e.apply(n,!1))},e.volumePass=function(e){t.renderable&&t.renderable.getVisibility()&&t.context.depthMask(!e)},e.getKeyMatrices=function(){return t.renderable.getMTime()>t.keyMatrixTime.getMTime()&&(t.renderable.computeMatrix(),r.copy(t.MCWCMatrix,t.renderable.getMatrix()),r.transpose(t.MCWCMatrix,t.MCWCMatrix),t.renderable.getIsIdentity()?a.identity(t.normalMatrix):(a.fromMat4(t.normalMatrix,t.MCWCMatrix),a.invert(t.normalMatrix,t.normalMatrix)),t.keyMatrixTime.modified()),{mcwc:t.MCWCMatrix,normalMatrix:t.normalMatrix}}}var l={};function c(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,l,n),o.Z.extend(e,t,n),t.keyMatrixTime={},(0,i.j6)(t.keyMatrixTime,{mtime:0}),t.normalMatrix=new Float64Array(9),t.MCWCMatrix=new Float64Array(16),(0,i.g2)(e,t,["context"]),u(e,t)}var d=(0,i.WL)(c,"vtkOpenGLVolume"),f={newInstance:d,extend:c};(0,s.vw)("vtkVolume",d)},78901:function(e,t,n){"use strict";n.d(t,{ZP:function(){return O}});var r=n(47169),a=n(92393),i=n(6807),o=n(64950),s=n(81911),u=n(19013),l=n(94378),c=n(1464),d=n(43739),f=n(33611),v=n(82331),m=n(94143),p=n(93800),h=n(8723),g=n(31426),A=n(96436),y=n(63138),S=n(17236),b=n(91158);function w(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}var I=a.t7,E=a.E0;function C(e,t){t.classHierarchy.push("vtkOpenGLVolumeMapper"),e.buildPass=function(){t.zBufferTexture=null},e.opaqueZBufferPass=function(e,n){if(e){var r=n.getZBufferTexture();r!==t.zBufferTexture&&(t.zBufferTexture=r)}},e.volumePass=function(n,r){if(n){t._openGLRenderWindow=e.getFirstAncestorOfType("vtkOpenGLRenderWindow"),t.context=t._openGLRenderWindow.getContext(),t.tris.setOpenGLRenderWindow(t._openGLRenderWindow),t.jitterTexture.setOpenGLRenderWindow(t._openGLRenderWindow),t.framebuffer.setOpenGLRenderWindow(t._openGLRenderWindow),t.scalarTexture.setOpenGLRenderWindow(t._openGLRenderWindow),t.colorTexture.setOpenGLRenderWindow(t._openGLRenderWindow),t.opacityTexture.setOpenGLRenderWindow(t._openGLRenderWindow),t.openGLVolume=e.getFirstAncestorOfType("vtkOpenGLVolume");var a=t.openGLVolume.getRenderable();t.openGLRenderer=e.getFirstAncestorOfType("vtkOpenGLRenderer");var i=t.openGLRenderer.getRenderable();t.openGLCamera=t.openGLRenderer.getViewNodeFor(i.getActiveCamera()),e.renderPiece(i,a)}},e.buildShaders=function(t,n,r){e.getShaderTemplate(t,n,r),e.replaceShaderValues(t,n,r)},e.getShaderTemplate=function(e,t,n){e.Vertex="//VTK::System::Dec\n\n/*=========================================================================\n\n Program: Visualization Toolkit\n Module: vtkPolyDataVS.glsl\n\n Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen\n All rights reserved.\n See Copyright.txt or http://www.kitware.com/Copyright.htm for details.\n\n This software is distributed WITHOUT ANY WARRANTY; without even\n the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR\n PURPOSE. See the above copyright notice for more information.\n\n=========================================================================*/\n\nattribute vec4 vertexDC;\n\nvarying vec3 vertexVCVSOutput;\nuniform mat4 PCVCMatrix;\n\nuniform float dcxmin;\nuniform float dcxmax;\nuniform float dcymin;\nuniform float dcymax;\n\nvoid main()\n{\n // dcsmall is the device coords reduced to the\n // x y area covered by the volume\n vec4 dcsmall = vec4(\n dcxmin + 0.5 * (vertexDC.x + 1.0) * (dcxmax - dcxmin),\n dcymin + 0.5 * (vertexDC.y + 1.0) * (dcymax - dcymin),\n vertexDC.z,\n vertexDC.w);\n vec4 vcpos = PCVCMatrix * dcsmall;\n vertexVCVSOutput = vcpos.xyz/vcpos.w;\n gl_Position = dcsmall;\n}\n",e.Fragment="//VTK::System::Dec\n\n/*=========================================================================\n\n Program: Visualization Toolkit\n Module: vtkVolumeFS.glsl\n\n Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen\n All rights reserved.\n See Copyright.txt or http://www.kitware.com/Copyright.htm for details.\n\n This software is distributed WITHOUT ANY WARRANTY; without even\n the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR\n PURPOSE. See the above copyright notice for more information.\n\n=========================================================================*/\n// Template for the volume mappers fragment shader\n\n// the output of this shader\n//VTK::Output::Dec\n\nvarying vec3 vertexVCVSOutput;\n\n// first declare the settings from the mapper\n// that impact the code paths in here\n\n// always set vtkNumComponents 1,2,3,4\n//VTK::NumComponents\n\n// possibly define vtkTrilinearOn\n//VTK::TrilinearOn\n\n// possibly define vtkIndependentComponents\n//VTK::IndependentComponentsOn\n\n// possibly define any \"proportional\" components\n//VTK::vtkProportionalComponents\n\n// Define the blend mode to use\n#define vtkBlendMode //VTK::BlendMode\n\n// Possibly define vtkImageLabelOutlineOn\n//VTK::ImageLabelOutlineOn\n\n#ifdef vtkImageLabelOutlineOn\nuniform int outlineThickness;\nuniform float outlineOpacity;\nuniform float vpWidth;\nuniform float vpHeight;\nuniform float vpOffsetX;\nuniform float vpOffsetY;\nuniform mat4 PCWCMatrix;\nuniform mat4 vWCtoIDX;\n#endif\n\n// define vtkLightComplexity\n//VTK::LightComplexity\n#if vtkLightComplexity > 0\nuniform float vSpecularPower;\nuniform float vAmbient;\nuniform float vDiffuse;\nuniform float vSpecular;\n//VTK::Light::Dec\n#endif\n\n//VTK::VolumeShadowOn\n//VTK::SurfaceShadowOn\n//VTK::localAmbientOcclusionOn\n//VTK::LAO::Dec\n//VTK::VolumeShadow::Dec\n\n// define vtkComputeNormalFromOpacity\n//VTK::vtkComputeNormalFromOpacity\n\n// possibly define vtkGradientOpacityOn\n//VTK::GradientOpacityOn\n#ifdef vtkGradientOpacityOn\nuniform float goscale0;\nuniform float goshift0;\nuniform float gomin0;\nuniform float gomax0;\n#if defined(vtkIndependentComponentsOn) && (vtkNumComponents > 1)\nuniform float goscale1;\nuniform float goshift1;\nuniform float gomin1;\nuniform float gomax1;\n#if vtkNumComponents >= 3\nuniform float goscale2;\nuniform float goshift2;\nuniform float gomin2;\nuniform float gomax2;\n#endif\n#if vtkNumComponents >= 4\nuniform float goscale3;\nuniform float goshift3;\nuniform float gomin3;\nuniform float gomax3;\n#endif\n#endif\n#endif\n\n// if you want to see the raw tiled\n// data in webgl1 uncomment the following line\n// #define debugtile\n\n// camera values\nuniform float camThick;\nuniform float camNear;\nuniform float camFar;\nuniform int cameraParallel;\n\n// values describing the volume geometry\nuniform vec3 vOriginVC;\nuniform vec3 vSpacing;\nuniform ivec3 volumeDimensions; // 3d texture dimensions\nuniform vec3 vPlaneNormal0;\nuniform float vPlaneDistance0;\nuniform vec3 vPlaneNormal1;\nuniform float vPlaneDistance1;\nuniform vec3 vPlaneNormal2;\nuniform float vPlaneDistance2;\nuniform vec3 vPlaneNormal3;\nuniform float vPlaneDistance3;\nuniform vec3 vPlaneNormal4;\nuniform float vPlaneDistance4;\nuniform vec3 vPlaneNormal5;\nuniform float vPlaneDistance5;\n\n//VTK::ClipPlane::Dec\n\n// opacity and color textures\nuniform sampler2D otexture;\nuniform float oshift0;\nuniform float oscale0;\nuniform sampler2D ctexture;\nuniform float cshift0;\nuniform float cscale0;\n\n// jitter texture\nuniform sampler2D jtexture;\n\n// some 3D texture values\nuniform float sampleDistance;\nuniform vec3 vVCToIJK;\n\n// the heights defined below are the locations\n// for the up to four components of the tfuns\n// the tfuns have a height of 2XnumComps pixels so the\n// values are computed to hit the middle of the two rows\n// for that component\n#ifdef vtkIndependentComponentsOn\n#if vtkNumComponents == 2\nuniform float mix0;\nuniform float mix1;\n#define height0 0.25\n#define height1 0.75\n#endif\n#if vtkNumComponents == 3\nuniform float mix0;\nuniform float mix1;\nuniform float mix2;\n#define height0 0.17\n#define height1 0.5\n#define height2 0.83\n#endif\n#if vtkNumComponents == 4\nuniform float mix0;\nuniform float mix1;\nuniform float mix2;\nuniform float mix3;\n#define height0 0.125\n#define height1 0.375\n#define height2 0.625\n#define height3 0.875\n#endif\n#endif\n\n#if vtkNumComponents >= 2\nuniform float oshift1;\nuniform float oscale1;\nuniform float cshift1;\nuniform float cscale1;\n#endif\n#if vtkNumComponents >= 3\nuniform float oshift2;\nuniform float oscale2;\nuniform float cshift2;\nuniform float cscale2;\n#endif\n#if vtkNumComponents >= 4\nuniform float oshift3;\nuniform float oscale3;\nuniform float cshift3;\nuniform float cscale3;\n#endif\n\nuniform vec4 ipScalarRangeMin;\nuniform vec4 ipScalarRangeMax;\n\n// declaration for intermixed geometry\n//VTK::ZBuffer::Dec\n\n//=======================================================================\n// global and custom variables (a temporary section before photorealistics rendering module is complete)\nvec3 rayDirVC;\nfloat sampleDistanceISVS;\nfloat sampleDistanceIS;\n\n#define SQRT3 1.7321\n#define INV4PI 0.0796\n#define EPSILON 0.001\n#define PI 3.1415\n#define PI2 9.8696\n\n//=======================================================================\n// Webgl2 specific version of functions\n#if __VERSION__ == 300\n\nuniform highp sampler3D texture1;\n\nvec4 getTextureValue(vec3 pos)\n{\n vec4 tmp = texture(texture1, pos);\n#if vtkNumComponents == 1\n tmp.a = tmp.r;\n#endif\n#if vtkNumComponents == 2\n tmp.a = tmp.g;\n#endif\n#if vtkNumComponents == 3\n tmp.a = length(tmp.rgb);\n#endif\n return tmp;\n}\n\n//=======================================================================\n// WebGL1 specific version of functions\n#else\n\nuniform sampler2D texture1;\n\nuniform float texWidth;\nuniform float texHeight;\nuniform int xreps;\nuniform int xstride;\nuniform int ystride;\n\n// if computing trilinear values from multiple z slices\n#ifdef vtkTrilinearOn\nvec4 getTextureValue(vec3 ijk)\n{\n float zoff = 1.0/float(volumeDimensions.z);\n vec4 val1 = getOneTextureValue(ijk);\n vec4 val2 = getOneTextureValue(vec3(ijk.xy, ijk.z + zoff));\n\n float indexZ = float(volumeDimensions)*ijk.z;\n float zmix = indexZ - floor(indexZ);\n\n return mix(val1, val2, zmix);\n}\n\nvec4 getOneTextureValue(vec3 ijk)\n#else // nearest or fast linear\nvec4 getTextureValue(vec3 ijk)\n#endif\n{\n vec3 tdims = vec3(volumeDimensions);\n\n#ifdef debugtile\n vec2 tpos = vec2(ijk.x, ijk.y);\n vec4 tmp = texture2D(texture1, tpos);\n tmp.a = 1.0;\n\n#else\n int z = int(ijk.z * tdims.z);\n int yz = z / xreps;\n int xz = z - yz*xreps;\n\n int tileWidth = volumeDimensions.x/xstride;\n int tileHeight = volumeDimensions.y/ystride;\n\n xz *= tileWidth;\n yz *= tileHeight;\n\n float ni = float(xz) + (ijk.x*float(tileWidth));\n float nj = float(yz) + (ijk.y*float(tileHeight));\n\n vec2 tpos = vec2(ni/texWidth, nj/texHeight);\n\n vec4 tmp = texture2D(texture1, tpos);\n\n#if vtkNumComponents == 1\n tmp.a = tmp.r;\n#endif\n#if vtkNumComponents == 2\n tmp.g = tmp.a;\n#endif\n#if vtkNumComponents == 3\n tmp.a = length(tmp.rgb);\n#endif\n#endif\n\n return tmp;\n}\n\n// End of Webgl1 specific code\n//=======================================================================\n#endif\n\n//=======================================================================\n// transformation between VC and IS space\n\n// convert vector position from idx to vc\n#if vtkLightComplexity > 0\nvec3 IStoVC(vec3 posIS){\n vec3 posVC = posIS / vVCToIJK;\n return posVC.x * vPlaneNormal0 + \n posVC.y * vPlaneNormal2 + \n posVC.z * vPlaneNormal4 + \n vOriginVC;\n}\n\n// convert vector position from vc to idx\nvec3 VCtoIS(vec3 posVC){\n posVC = posVC - vOriginVC;\n posVC = vec3(\n dot(posVC, vPlaneNormal0),\n dot(posVC, vPlaneNormal2),\n dot(posVC, vPlaneNormal4)); \n return posVC * vVCToIJK;\n}\n#endif\n\n//Rotate vector to view coordinate\n#if (vtkLightComplexity > 0) || (defined vtkGradientOpacityOn)\nvoid rotateToViewCoord(inout vec3 dirIS){\n dirIS.xyz =\n dirIS.x * vPlaneNormal0 +\n dirIS.y * vPlaneNormal2 +\n dirIS.z * vPlaneNormal4;\n}\n\n//Rotate vector to idx coordinate\nvec3 rotateToIDX(vec3 dirVC){\n vec3 dirIS;\n dirIS.xyz = vec3(\n dot(dirVC, vPlaneNormal0),\n dot(dirVC, vPlaneNormal2),\n dot(dirVC, vPlaneNormal4)); \n return dirIS;\n}\n#endif\n\n//=======================================================================\n// Given a normal compute the gradient opacity factors\nfloat computeGradientOpacityFactor(\n float normalMag, float goscale, float goshift, float gomin, float gomax)\n{\n#if defined(vtkGradientOpacityOn)\n return clamp(normalMag * goscale + goshift, gomin, gomax);\n#else\n return 1.0;\n#endif\n}\n\n//=======================================================================\n// compute the normal and gradient magnitude for a position, uses forward difference\n#if (vtkLightComplexity > 0) || (defined vtkGradientOpacityOn)\n #ifdef vtkComputeNormalFromOpacity\n #ifdef vtkGradientOpacityOn\n vec4 computeNormalForDensity(vec3 pos, float scalar, vec3 tstep, out mat3 scalarInterp, out vec3 secondaryGradientMag)\n {\n vec4 result;\n scalarInterp[0][0] = getTextureValue(pos + vec3(tstep.x, 0.0, 0.0)).a;\n scalarInterp[0][1] = getTextureValue(pos + vec3(0.0, tstep.y, 0.0)).a;\n scalarInterp[0][2] = getTextureValue(pos + vec3(0.0, 0.0, tstep.z)).a;\n // look up scalar values for computing secondary gradient\n scalarInterp[1][0] = getTextureValue(pos + vec3(2.0*tstep.x, 0.0, 0.0)).a;\n scalarInterp[1][1] = getTextureValue(pos + vec3(0.0, 2.0*tstep.y, 0.0)).a;\n scalarInterp[1][2] = getTextureValue(pos + vec3(0.0, 0.0, 2.0*tstep.z)).a;\n scalarInterp[2][0] = getTextureValue(pos + vec3(tstep.x, tstep.y, 0.0)).a;\n scalarInterp[2][1] = getTextureValue(pos + vec3(tstep.x, 0.0, tstep.z)).a;\n scalarInterp[2][2] = getTextureValue(pos + vec3(0.0, tstep.y, tstep.z)).a;\n result.x = scalarInterp[0][0] - scalar;\n result.y = scalarInterp[0][1] - scalar;\n result.z = scalarInterp[0][2] - scalar;\n // divide by spacing\n result.xyz /= vSpacing;\n result.w = length(result.xyz);\n rotateToViewCoord(result.xyz);\n secondaryGradientMag.x = length(vec3(scalarInterp[1][0] - scalarInterp[0][0],\n scalarInterp[2][0] - scalarInterp[0][0],\n scalarInterp[2][1] - scalarInterp[0][0]) / vSpacing);\n secondaryGradientMag.y = length(vec3(scalarInterp[2][0] - scalarInterp[0][1],\n scalarInterp[1][1] - scalarInterp[0][1],\n scalarInterp[2][2] - scalarInterp[0][1]) / vSpacing);\n secondaryGradientMag.z = length(vec3(scalarInterp[2][1] - scalarInterp[0][2],\n scalarInterp[2][2] - scalarInterp[0][2],\n scalarInterp[1][2] - scalarInterp[0][2]) / vSpacing);\n if (length(result.xyz) > 0.0) {\n return vec4(normalize(result.xyz),result.w);\n } else {\n return vec4(0.0);\n }\n }\n\n vec4 computeDensityNormal(float scalar, float gradientMag, mat3 scalarInterp, vec3 secondaryGradientMag)\n {\n vec4 opacityG;\n vec3 opacityInterp = vec3(0.0);\n float opacity = texture2D(otexture, vec2(scalar * oscale0 + oshift0, 0.5)).r;\n if (gradientMag >= 0.0){\n opacity *= computeGradientOpacityFactor(gradientMag, goscale0, goshift0, gomin0, gomax0);\n }\n opacityInterp.x = texture2D(otexture, vec2(scalarInterp[0][0] * oscale0 + oshift0, 0.5)).r; \n if (secondaryGradientMag.x >= 0.0){\n opacityInterp.x *= computeGradientOpacityFactor(secondaryGradientMag.x, goscale0, goshift0, gomin0, gomax0);\n }\n \n opacityInterp.y = texture2D(otexture, vec2(scalarInterp[0][1] * oscale0 + oshift0, 0.5)).r;\n if (secondaryGradientMag.y >= 0.0){\n opacityInterp.y *= computeGradientOpacityFactor(secondaryGradientMag.y, goscale0, goshift0, gomin0, gomax0);\n }\n\n opacityInterp.z = texture2D(otexture, vec2(scalarInterp[0][2] * oscale0 + oshift0, 0.5)).r;\n if (secondaryGradientMag.z >= 0.0){\n opacityInterp.z *= computeGradientOpacityFactor(secondaryGradientMag.z, goscale0, goshift0, gomin0, gomax0);\n }\n\n opacityG.xyz = opacityInterp - vec3(opacity,opacity,opacity);\n // divide by spacing\n opacityG.xyz /= vSpacing;\n opacityG.w = length(opacityG.xyz);\n rotateToViewCoord(opacityG.xyz);\n if (length(opacityG.xyz) > 0.0) { \n return vec4(normalize(opacityG.xyz),opacityG.w);\n } else {\n return vec4(0.0);\n }\n } \n\n #else\n //if gradient opacity not on but using density gradient\n vec4 computeDensityNormal(float scalar, vec3 scalarInterp) \n { \n vec4 opacityG; \n float opacity = texture2D(otexture, vec2(scalar * oscale0 + oshift0, 0.5)).r; \n opacityG.x = texture2D(otexture, vec2(scalarInterp.x * oscale0 + oshift0, 0.5)).r - opacity; \n opacityG.y = texture2D(otexture, vec2(scalarInterp.y * oscale0 + oshift0, 0.5)).r - opacity; \n opacityG.z = texture2D(otexture, vec2(scalarInterp.z * oscale0 + oshift0, 0.5)).r - opacity; \n // divide by spacing \n opacityG.xyz /= vSpacing; \n opacityG.w = length(opacityG.xyz); \n // rotate to View Coords \n rotateToViewCoord(opacityG.xyz);\n if (length(opacityG.xyz) > 0.0) { \n return vec4(normalize(opacityG.xyz),opacityG.w); \n } else { \n return vec4(0.0); \n } \n } \n vec4 computeNormalForDensity(vec3 pos, float scalar, vec3 tstep, out vec3 scalarInterp) \n { \n vec4 result; \n scalarInterp.x = getTextureValue(pos + vec3(tstep.x, 0.0, 0.0)).a; \n scalarInterp.y = getTextureValue(pos + vec3(0.0, tstep.y, 0.0)).a; \n scalarInterp.z = getTextureValue(pos + vec3(0.0, 0.0, tstep.z)).a; \n result.x = scalarInterp.x - scalar; \n result.y = scalarInterp.y - scalar; \n result.z = scalarInterp.z - scalar; \n // divide by spacing\n result.xyz /= vSpacing;\n result.w = length(result.xyz); \n // rotate to View Coords \n rotateToViewCoord(result.xyz); \n if (length(result.xyz) > 0.0) { \n return vec4(normalize(result.xyz),result.w); \n } else { \n return vec4(0.0); \n } \n } \n #endif\n #endif\n // compute scalar density\n vec4 computeNormal(vec3 pos, float scalar, vec3 tstep) \n { \n vec4 result; \n result.x = getTextureValue(pos + vec3(tstep.x, 0.0, 0.0)).a - scalar; \n result.y = getTextureValue(pos + vec3(0.0, tstep.y, 0.0)).a - scalar; \n result.z = getTextureValue(pos + vec3(0.0, 0.0, tstep.z)).a - scalar; \n // divide by spacing \n result.xyz /= vSpacing; \n result.w = length(result.xyz);\n if (result.w > 0.0){\n // rotate to View Coords \n rotateToViewCoord(result.xyz);\n return vec4(normalize(result.xyz),result.w); \n } else {\n return vec4(0.0);\n }\n } \n#endif\n\n#ifdef vtkImageLabelOutlineOn\nvec3 fragCoordToIndexSpace(vec4 fragCoord) {\n vec4 pcPos = vec4(\n (fragCoord.x / vpWidth - vpOffsetX - 0.5) * 2.0,\n (fragCoord.y / vpHeight - vpOffsetY - 0.5) * 2.0,\n (fragCoord.z - 0.5) * 2.0,\n 1.0);\n\n vec4 worldCoord = PCWCMatrix * pcPos;\n vec4 vertex = (worldCoord/worldCoord.w);\n\n vec3 index = (vWCtoIDX * vertex).xyz;\n\n // half voxel fix for labelmapOutline \n return (index + vec3(0.5)) / vec3(volumeDimensions);\n}\n#endif\n\n//=======================================================================\n// compute the normals and gradient magnitudes for a position\n// for independent components\nmat4 computeMat4Normal(vec3 pos, vec4 tValue, vec3 tstep)\n{\n mat4 result;\n vec4 distX = getTextureValue(pos + vec3(tstep.x, 0.0, 0.0)) - tValue;\n vec4 distY = getTextureValue(pos + vec3(0.0, tstep.y, 0.0)) - tValue;\n vec4 distZ = getTextureValue(pos + vec3(0.0, 0.0, tstep.z)) - tValue;\n\n // divide by spacing\n distX /= vSpacing.x;\n distY /= vSpacing.y;\n distZ /= vSpacing.z;\n\n mat3 rot;\n rot[0] = vPlaneNormal0;\n rot[1] = vPlaneNormal2;\n rot[2] = vPlaneNormal4;\n\n#if !defined(vtkComponent0Proportional)\n result[0].xyz = vec3(distX.r, distY.r, distZ.r);\n result[0].a = length(result[0].xyz);\n result[0].xyz *= rot;\n if (result[0].w > 0.0)\n {\n result[0].xyz /= result[0].w;\n }\n#endif\n\n// optionally compute the 2nd component\n#if vtkNumComponents >= 2 && !defined(vtkComponent1Proportional)\n result[1].xyz = vec3(distX.g, distY.g, distZ.g);\n result[1].a = length(result[1].xyz);\n result[1].xyz *= rot;\n if (result[1].w > 0.0)\n {\n result[1].xyz /= result[1].w;\n }\n#endif\n\n// optionally compute the 3rd component\n#if vtkNumComponents >= 3 && !defined(vtkComponent2Proportional)\n result[2].xyz = vec3(distX.b, distY.b, distZ.b);\n result[2].a = length(result[2].xyz);\n result[2].xyz *= rot;\n if (result[2].w > 0.0)\n {\n result[2].xyz /= result[2].w;\n }\n#endif\n\n// optionally compute the 4th component\n#if vtkNumComponents >= 4 && !defined(vtkComponent3Proportional)\n result[3].xyz = vec3(distX.a, distY.a, distZ.a);\n result[3].a = length(result[3].xyz);\n result[3].xyz *= rot;\n if (result[3].w > 0.0)\n {\n result[3].xyz /= result[3].w;\n }\n#endif\n\n return result;\n}\n\n//=======================================================================\n// global shadow - secondary ray\n#if defined(VolumeShadowOn) || defined(localAmbientOcclusionOn)\nfloat random()\n{ \n float rand = fract(sin(dot(gl_FragCoord.xy,vec2(12.9898,78.233)))*43758.5453123);\n float jitter=texture2D(jtexture,gl_FragCoord.xy/32.).r;\n uint pcg_state = floatBitsToUint(jitter);\n uint state = pcg_state;\n pcg_state = pcg_state * uint(747796405) + uint(2891336453);\n uint word = ((state >> ((state >> uint(28)) + uint(4))) ^ state) * uint(277803737);\n return (float((((word >> uint(22)) ^ word) >> 1 ))/float(2147483647) + rand)/2.0;\n}\n#endif\n\n#ifdef VolumeShadowOn\n// henyey greenstein phase function\nfloat phase_function(float cos_angle)\n{\n // divide by 2.0 instead of 4pi to increase intensity\n return ((1.0-anisotropy2)/pow(1.0+anisotropy2-2.0*anisotropy*cos_angle, 1.5))/2.0;\n}\n\n// Computes the intersection between a ray and a box\nstruct Hit\n{\n float tmin;\n float tmax;\n};\n\nstruct Ray\n{\n vec3 origin;\n vec3 dir;\n vec3 invDir;\n};\n\nbool BBoxIntersect(vec3 boundMin, vec3 boundMax, const Ray r, out Hit hit)\n{\n vec3 tbot = r.invDir * (boundMin - r.origin);\n vec3 ttop = r.invDir * (boundMax - r.origin);\n vec3 tmin = min(ttop, tbot);\n vec3 tmax = max(ttop, tbot);\n vec2 t = max(tmin.xx, tmin.yz);\n float t0 = max(t.x, t.y);\n t = min(tmax.xx, tmax.yz);\n float t1 = min(t.x, t.y);\n hit.tmin = t0;\n hit.tmax = t1;\n return t1 > max(t0,0.0);\n}\n\n// As BBoxIntersect requires the inverse of the ray coords,\n// this function is used to avoid numerical issues\nvoid safe_0_vector(inout Ray ray)\n{\n if(abs(ray.dir.x) < EPSILON) ray.dir.x = sign(ray.dir.x) * EPSILON;\n if(abs(ray.dir.y) < EPSILON) ray.dir.y = sign(ray.dir.y) * EPSILON;\n if(abs(ray.dir.z) < EPSILON) ray.dir.z = sign(ray.dir.z) * EPSILON;\n}\n\nfloat volume_shadow(vec3 posIS, vec3 lightDirNormIS)\n{\n float shadow = 1.0;\n float opacity = 0.0;\n\n // modify sample distance with a random number between 0.8 and 1.0\n float sampleDistanceISVS_jitter = sampleDistanceISVS * mix(0.8, 1.0, random());\n float opacityPrev = texture2D(otexture, vec2(getTextureValue(posIS).r * oscale0 + oshift0, 0.5)).r;\n \n // in case the first sample near surface has a very tiled light ray, we need to offset start position \n posIS += sampleDistanceISVS_jitter * lightDirNormIS; \n\n // compute the start and end points for the ray\n Ray ray;\n Hit hit; \n ray.origin = posIS;\n ray.dir = lightDirNormIS;\n safe_0_vector(ray);\n ray.invDir = 1.0/ray.dir;\n \n if(!BBoxIntersect(vec3(0.0),vec3(1.0), ray, hit))\n {\n return 1.0;\n }\n vec4 scalar = vec4(0.0);\n float maxdist = hit.tmax;\n if(maxdist < EPSILON) {\n return 1.0;\n }\n\n // interpolate shadow ray length between: 1 unit of sample distance in IS to SQRT3, based on globalIlluminationReach\n float maxgi = mix(sampleDistanceISVS_jitter,SQRT3,giReach);\n maxdist = min(maxdist,maxgi);\n\n // support gradient opacity\n #ifdef vtkGradientOpacityOn\n vec4 normal;\n #endif\n\n vec3 current_step = sampleDistanceISVS_jitter * lightDirNormIS;\n float maxSteps = ceil(maxdist/sampleDistanceISVS_jitter);\n float opacityDelta = 0.0;\n\n for (float i = 0.0; i < maxSteps; i++)\n {\n scalar = getTextureValue(posIS);\n opacity = texture2D(otexture, vec2(scalar.r * oscale0 + oshift0, 0.5)).r;\n #ifdef vtkGradientOpacityOn \n normal = computeNormal(posIS, scalar.a, vec3(1.0/vec3(volumeDimensions))); \n opacity *= computeGradientOpacityFactor(normal.w, goscale0, goshift0, gomin0, gomax0);\n #endif \n shadow *= 1.0 - opacity;\n\n // optimization: early termination\n if (shadow < EPSILON){\n return 0.0;\n }\n\n // optimization: increase/decrease sample distance based on changed in opacity value\n opacityDelta = opacityPrev - opacity;\n opacityPrev = opacity;\n if (opacityDelta > 0.0){\n current_step *= 0.9;\n } else if (opacityDelta < 0.0){\n current_step *= 1.1;\n }\n posIS += current_step;\n }\n\n return shadow; \n}\n\nvec3 applyShadowRay(vec3 tColor, vec3 posIS, vec3 viewDirectionVC)\n{\n vec3 vertLight = vec3(0.0);\n vec3 secondary_contrib = vec3(0.0);\n // here we assume only positional light, no effect of cones\n for (int i = 0; i < lightNum; i++)\n {\n #if(vtkLightComplexity==3)\n if (lightPositional[i] == 1){\n vertLight = lightPositionVC[i] - IStoVC(posIS);\n }else{\n vertLight = - lightDirectionVC[i];\n }\n #else\n vertLight = - lightDirectionVC[i];\n #endif\n // here we assume achromatic light, only intensity\n float dDotL = dot(viewDirectionVC, normalize(vertLight));\n // isotropic scatter returns 0.5 instead of 1/4pi to increase intensity\n float phase_attenuation = 0.5;\n if (abs(anisotropy) > EPSILON){\n phase_attenuation = phase_function(dDotL);\n }\n float vol_shadow = volume_shadow(posIS, normalize(rotateToIDX(vertLight)));\n secondary_contrib += tColor * vDiffuse * lightColor[i] * vol_shadow * phase_attenuation; \n secondary_contrib += tColor * vAmbient;\n } \n return secondary_contrib;\n}\n#endif\n\n//=======================================================================\n// local ambient occlusion\n#ifdef localAmbientOcclusionOn\nvec3 sample_direction_uniform(int i)\n{\n float rand = random() * 0.5;\n float theta = PI2 * (kernelSample[i][0] + rand);\n float phi = acos(2.0 * (kernelSample[i][1] + rand) -1.0) / 2.5;\n return normalize(vec3(cos(theta)*sin(phi), sin(theta)*sin(phi), cos(phi)));\n}\n\n// return a matrix that transform startDir into z axis; startDir should be normalized\nmat3 zBaseRotationalMatrix(vec3 startDir){\n vec3 axis = cross(startDir, vec3(0.0,0.0,1.0));\n float cosA = startDir.z;\n float k = 1.0 / (1.0 + cosA);\n mat3 matrix = mat3((axis.x * axis.x * k) + cosA, (axis.y * axis.x * k) - axis.z, (axis.z * axis.x * k) + axis.y,\n (axis.x * axis.y * k) + axis.z, (axis.y * axis.y * k) + cosA, (axis.z * axis.y * k) - axis.x,\n (axis.x * axis.z * k) - axis.y, (axis.y * axis.z * k) + axis.x, (axis.z * axis.z * k) + cosA);\n return matrix;\n}\n\nfloat computeLAO(vec3 posIS, float opacity, vec3 lightDir, vec4 normal){\n // apply LAO only at selected locations, otherwise return full brightness\n if (normal.w > 0.0 && opacity > 0.05){\n float total_transmittance = 0.0;\n mat3 inverseRotateBasis = inverse(zBaseRotationalMatrix(normalize(-normal.xyz)));\n vec3 currPos, randomDirStep;\n float weight, transmittance, opacity;\n for (int i = 0; i < kernelSize; i++)\n {\n randomDirStep = inverseRotateBasis * sample_direction_uniform(i) * sampleDistanceIS;\n weight = 1.0 - dot(normalize(lightDir), normalize(randomDirStep));\n currPos = posIS;\n transmittance = 1.0;\n for (int j = 0; j < kernelRadius ; j++){\n currPos += randomDirStep;\n // check if it's at clipping plane, if so return full brightness\n if (all(greaterThan(currPos, vec3(EPSILON))) && all(lessThan(currPos,vec3(1.0-EPSILON)))){\n opacity = texture2D(otexture, vec2(getTextureValue(currPos).r * oscale0 + oshift0, 0.5)).r;\n #ifdef vtkGradientOpacityOn\n opacity *= computeGradientOpacityFactor(normal.w, goscale0, goshift0, gomin0, gomax0);\n #endif\n transmittance *= 1.0 - opacity;\n }\n else{\n break;\n }\n }\n total_transmittance += transmittance / float(kernelRadius) * weight;\n\n // early termination if fully translucent\n if (total_transmittance > 1.0 - EPSILON){\n return 1.0;\n }\n }\n // average transmittance and reduce variance\n return clamp(total_transmittance / float(kernelSize), 0.3, 1.0); \n } else {\n return 1.0;\n }\n}\n#endif\n\n//=======================================================================\n// surface light contribution\n#if vtkLightComplexity > 0\n void applyLighting(inout vec3 tColor, vec4 normal)\n {\n vec3 diffuse = vec3(0.0, 0.0, 0.0);\n vec3 specular = vec3(0.0, 0.0, 0.0);\n float df, sf = 0.0;\n for (int i = 0; i < lightNum; i++){\n df = abs(dot(normal.rgb, -lightDirectionVC[i]));\n diffuse += df * lightColor[i];\n sf = pow( abs(dot(lightHalfAngleVC[i],normal.rgb)), vSpecularPower);\n specular += sf * lightColor[i];\n }\n tColor.rgb = tColor.rgb*(diffuse*vDiffuse + vAmbient) + specular*vSpecular;\n }\n #ifdef SurfaceShadowOn\n #if vtkLightComplexity < 3\n vec3 applyLightingDirectional(vec3 posIS, vec4 tColor, vec4 normal)\n {\n // everything in VC\n vec3 diffuse = vec3(0.0);\n vec3 specular = vec3(0.0);\n #ifdef localAmbientOcclusionOn\n vec3 ambient = vec3(0.0);\n #endif \n vec3 vertLightDirection;\n for (int i = 0; i < lightNum; i++){\n float ndotL,vdotR;\n vertLightDirection = lightDirectionVC[i];\n ndotL = dot(normal.xyz, vertLightDirection);\n if (ndotL < 0.0 && twoSidedLighting)\n {\n ndotL = -ndotL;\n }\n if (ndotL > 0.0)\n {\n diffuse += ndotL * lightColor[i];\n //specular\n vdotR = dot(-rayDirVC, normalize(2.0 * ndotL * -normal.xyz + vertLightDirection));\n if (vdotR > 0.0)\n {\n specular += pow(vdotR, vSpecularPower) * lightColor[i];\n }\n }\n #ifdef localAmbientOcclusionOn\n ambient += computeLAO(posIS, tColor.a, vertLightDirection, normal);\n #endif\n } \n #ifdef localAmbientOcclusionOn\n return tColor.rgb * (diffuse * vDiffuse + vAmbient * ambient) + specular*vSpecular;\n #else \n return tColor.rgb * (diffuse * vDiffuse + vAmbient) + specular*vSpecular;\n #endif \n }\n #else\n vec3 applyLightingPositional(vec3 posIS, vec4 tColor, vec4 normal, vec3 posVC)\n {\n // everything in VC\n vec3 diffuse = vec3(0.0);\n vec3 specular = vec3(0.0);\n #ifdef localAmbientOcclusionOn\n vec3 ambient = vec3(0.0);\n #endif \n vec3 vertLightDirection;\n for (int i = 0; i < lightNum; i++){\n float distance,attenuation,ndotL,vdotR;\n vec3 lightDir;\n if (lightPositional[i] == 1){\n lightDir = lightDirectionVC[i];\n vertLightDirection = posVC - lightPositionVC[i]; \n distance = length(vertLightDirection);\n vertLightDirection = normalize(vertLightDirection);\n attenuation = 1.0 / (lightAttenuation[i].x\n + lightAttenuation[i].y * distance\n + lightAttenuation[i].z * distance * distance);\n // per OpenGL standard cone angle is 90 or less for a spot light\n if (lightConeAngle[i] <= 90.0){\n float coneDot = dot(vertLightDirection, lightDir);\n if (coneDot >= cos(radians(lightConeAngle[i]))){ // if inside cone\n attenuation = attenuation * pow(coneDot, lightExponent[i]);\n }\n else {\n attenuation = 0.0;\n }\n }\n ndotL = dot(normal.xyz, vertLightDirection);\n if (ndotL < 0.0 && twoSidedLighting)\n {\n ndotL = -ndotL;\n }\n if (ndotL > 0.0)\n {\n diffuse += ndotL * attenuation * lightColor[i];\n //specular\n vdotR = dot(-rayDirVC, normalize(2.0 * ndotL * -normal.xyz + vertLightDirection));\n if (vdotR > 0.0)\n {\n specular += pow(vdotR, vSpecularPower) * attenuation * lightColor[i];\n }\n }\n #ifdef localAmbientOcclusionOn\n ambient += computeLAO(posIS, tColor.a, vertLightDirection, normal);\n #endif \n } else {\n vertLightDirection = lightDirectionVC[i];\n ndotL = dot(normal.xyz, vertLightDirection);\n if (ndotL < 0.0 && twoSidedLighting)\n {\n ndotL = -ndotL;\n }\n if (ndotL > 0.0)\n {\n diffuse += ndotL * lightColor[i];\n //specular\n vdotR = dot(-rayDirVC, normalize(2.0 * ndotL * -normal.xyz + vertLightDirection));\n if (vdotR > 0.0)\n {\n specular += pow(vdotR, vSpecularPower) * lightColor[i];\n }\n }\n #ifdef localAmbientOcclusionOn\n ambient += computeLAO(posIS, tColor.a, vertLightDirection, normal);\n #endif \n }\n }\n #ifdef localAmbientOcclusionOn\n return tColor.rgb * (diffuse * vDiffuse + vAmbient * ambient) + specular*vSpecular;\n #else \n return tColor.rgb * (diffuse * vDiffuse + vAmbient) + specular*vSpecular;\n #endif\n }\n #endif \n #endif\n#endif\n\n//=======================================================================\n// Given a texture value compute the color and opacity\n//\nvec4 getColorForValue(vec4 tValue, vec3 posIS, vec3 tstep)\n{\n#ifdef vtkImageLabelOutlineOn\n vec3 centerPosIS = fragCoordToIndexSpace(gl_FragCoord); // pos in texture space\n vec4 centerValue = getTextureValue(centerPosIS);\n bool pixelOnBorder = false;\n vec4 tColor = texture2D(ctexture, vec2(centerValue.r * cscale0 + cshift0, 0.5));\n\n // Get alpha of segment from opacity function.\n tColor.a = texture2D(otexture, vec2(centerValue.r * oscale0 + oshift0, 0.5)).r;\n\n // Only perform outline check on fragments rendering voxels that aren't invisible.\n // Saves a bunch of needless checks on the background.\n // TODO define epsilon when building shader?\n if (float(tColor.a) > 0.01) {\n for (int i = -outlineThickness; i <= outlineThickness; i++) {\n for (int j = -outlineThickness; j <= outlineThickness; j++) {\n if (i == 0 || j == 0) {\n continue;\n }\n\n vec4 neighborPixelCoord = vec4(gl_FragCoord.x + float(i),\n gl_FragCoord.y + float(j),\n gl_FragCoord.z, gl_FragCoord.w);\n\n vec3 neighborPosIS = fragCoordToIndexSpace(neighborPixelCoord);\n vec4 value = getTextureValue(neighborPosIS);\n\n // If any of my neighbours are not the same value as I\n // am, this means I am on the border of the segment.\n // We can break the loops\n if (any(notEqual(value, centerValue))) {\n pixelOnBorder = true;\n break;\n }\n }\n\n if (pixelOnBorder == true) {\n break;\n }\n }\n\n // If I am on the border, I am displayed at full opacity\n if (pixelOnBorder == true) {\n tColor.a = outlineOpacity;\n }\n }\n\n#else\n // compute the normal and gradient magnitude if needed\n // We compute it as a vec4 if possible otherwise a mat4\n //\n vec4 goFactor = vec4(1.0,1.0,1.0,1.0);\n\n // compute the normal vectors as needed\n #if (vtkLightComplexity > 0) || defined(vtkGradientOpacityOn)\n #if defined(vtkIndependentComponentsOn) && (vtkNumComponents > 1)\n mat4 normalMat = computeMat4Normal(posIS, tValue, tstep);\n #if !defined(vtkComponent0Proportional)\n vec4 normal0 = normalMat[0];\n #endif\n #if !defined(vtkComponent1Proportional)\n vec4 normal1 = normalMat[1];\n #endif\n #if vtkNumComponents > 2\n #if !defined(vtkComponent2Proportional)\n vec4 normal2 = normalMat[2];\n #endif\n #if vtkNumComponents > 3\n #if !defined(vtkComponent3Proportional)\n vec4 normal3 = normalMat[3];\n #endif\n #endif\n #endif\n #else\n vec4 normalLight;\n #ifdef vtkComputeNormalFromOpacity\n #ifdef vtkGradientOpacityOn\n mat3 scalarInterp; \n vec3 secondaryGradientMag; \n vec4 normal0 = computeNormalForDensity(posIS, tValue.a, tstep, scalarInterp, secondaryGradientMag); \n normalLight = computeDensityNormal(tValue.a, normal0.w, scalarInterp,secondaryGradientMag); \n if (length(normalLight) == 0.0){ \n normalLight = normal0; \n } \n #else\n vec3 scalarInterp; \n vec4 normal0 = computeNormalForDensity(posIS, tValue.a, tstep, scalarInterp); \n if (length(normal0)>0.0){ \n normalLight = computeDensityNormal(tValue.a,scalarInterp); \n if (length(normalLight)==0.0){ \n normalLight = normal0; \n } \n } \n #endif\n #else \n vec4 normal0 = computeNormal(posIS, tValue.a, tstep); \n normalLight = normal0; \n #endif\n #endif\n #endif\n\n // compute gradient opacity factors as needed\n #if defined(vtkGradientOpacityOn)\n #if !defined(vtkComponent0Proportional)\n goFactor.x =\n computeGradientOpacityFactor(normal0.a, goscale0, goshift0, gomin0, gomax0);\n #endif\n #if defined(vtkIndependentComponentsOn) && (vtkNumComponents > 1)\n #if !defined(vtkComponent1Proportional)\n goFactor.y =\n computeGradientOpacityFactor(normal1.a, goscale1, goshift1, gomin1, gomax1);\n #endif\n #if vtkNumComponents > 2\n #if !defined(vtkComponent2Proportional)\n goFactor.z =\n computeGradientOpacityFactor(normal2.a, goscale2, goshift2, gomin2, gomax2);\n #endif\n #if vtkNumComponents > 3\n #if !defined(vtkComponent3Proportional)\n goFactor.w =\n computeGradientOpacityFactor(normal3.a, goscale3, goshift3, gomin3, gomax3);\n #endif\n #endif\n #endif\n #endif\n #endif\n\n // single component is always independent\n #if vtkNumComponents == 1\n vec4 tColor = texture2D(ctexture, vec2(tValue.r * cscale0 + cshift0, 0.5));\n tColor.a = goFactor.x*texture2D(otexture, vec2(tValue.r * oscale0 + oshift0, 0.5)).r;\n if (tColor.a < EPSILON){\n return vec4(0.0);\n } \n #endif\n\n #if defined(vtkIndependentComponentsOn) && vtkNumComponents >= 2\n vec4 tColor = mix0*texture2D(ctexture, vec2(tValue.r * cscale0 + cshift0, height0));\n #if !defined(vtkComponent0Proportional)\n tColor.a = goFactor.x*mix0*texture2D(otexture, vec2(tValue.r * oscale0 + oshift0, height0)).r;\n #else\n float pwfValue = texture2D(otexture, vec2(tValue.r * oscale0 + oshift0, height0)).r;\n tColor *= pwfValue;\n tColor.a *= mix(pwfValue, 1.0, (1.0 - mix0));\n #endif\n\n vec3 tColor1 = mix1*texture2D(ctexture, vec2(tValue.g * cscale1 + cshift1, height1)).rgb;\n #if !defined(vtkComponent1Proportional)\n tColor.a += goFactor.y*mix1*texture2D(otexture, vec2(tValue.g * oscale1 + oshift1, height1)).r;\n #else\n float pwfValue = texture2D(otexture, vec2(tValue.g * oscale1 + oshift1, height1)).r;\n tColor1 *= pwfValue;\n tColor.a *= mix(pwfValue, 1.0, (1.0 - mix1));\n #endif\n\n #if vtkNumComponents >= 3\n vec3 tColor2 = mix2*texture2D(ctexture, vec2(tValue.b * cscale2 + cshift2, height2)).rgb;\n #if !defined(vtkComponent2Proportional)\n tColor.a += goFactor.z*mix2*texture2D(otexture, vec2(tValue.b * oscale2 + oshift2, height2)).r;\n #else\n float pwfValue = texture2D(otexture, vec2(tValue.b * oscale2 + oshift2, height2)).r;\n tColor2 *= pwfValue;\n tColor.a *= mix(pwfValue, 1.0, (1.0 - mix2));\n #endif\n\n #if vtkNumComponents >= 4\n vec3 tColor3 = mix3*texture2D(ctexture, vec2(tValue.a * cscale3 + cshift3, height3)).rgb;\n #if !defined(vtkComponent3Proportional)\n tColor.a += goFactor.w*mix3*texture2D(otexture, vec2(tValue.a * oscale3 + oshift3, height3)).r;\n #else\n float pwfValue = texture2D(otexture, vec2(tValue.a * oscale3 + oshift3, height3)).r;\n tColor3 *= pwfValue;\n tColor.a *= mix(pwfValue, 1.0, (1.0 - mix3));\n #endif\n #endif\n #endif\n #else // then not independent\n\n #if vtkNumComponents == 2\n float lum = tValue.r * cscale0 + cshift0;\n float alpha = goFactor.x*texture2D(otexture, vec2(tValue.a * oscale1 + oshift1, 0.5)).r;\n vec4 tColor = vec4(lum, lum, lum, alpha);\n #endif\n #if vtkNumComponents == 3\n vec4 tColor;\n tColor.r = tValue.r * cscale0 + cshift0;\n tColor.g = tValue.g * cscale1 + cshift1;\n tColor.b = tValue.b * cscale2 + cshift2;\n tColor.a = goFactor.x*texture2D(otexture, vec2(tValue.a * oscale0 + oshift0, 0.5)).r;\n #endif\n #if vtkNumComponents == 4\n vec4 tColor;\n tColor.r = tValue.r * cscale0 + cshift0;\n tColor.g = tValue.g * cscale1 + cshift1;\n tColor.b = tValue.b * cscale2 + cshift2;\n tColor.a = goFactor.x*texture2D(otexture, vec2(tValue.a * oscale3 + oshift3, 0.5)).r;\n #endif\n #endif // dependent\n\n // apply lighting if requested as appropriate\n #if vtkLightComplexity > 0\n #if !defined(vtkComponent0Proportional) \n #if vtkNumComponents == 1\n \n #ifdef SurfaceShadowOn\n #if vtkLightComplexity < 3\n vec3 tColorS = applyLightingDirectional(posIS, tColor, normalLight);\n #else\n vec3 tColorS = applyLightingPositional(posIS, tColor, normalLight, IStoVC(posIS));\n #endif\n #endif\n\n #ifdef VolumeShadowOn\n vec3 tColorVS = applyShadowRay(tColor.rgb, posIS, rayDirVC);\n #ifdef SurfaceShadowOn\n float vol_coef = volumetricScatteringBlending * (1.0 - tColor.a / 2.0) * (1.0 - atan(normalLight.w) * INV4PI);\n tColor.rgb = (1.0-vol_coef) * tColorS + vol_coef * tColorVS;\n #else\n tColor.rgb = tColorVS;\n #endif\n #else\n tColor.rgb = tColorS;\n #endif\n \n #else\n applyLighting(tColor.rgb, normal0);\n #endif\n #endif\n\n #if defined(vtkIndependentComponentsOn) && vtkNumComponents >= 2\n #if !defined(vtkComponent1Proportional)\n applyLighting(tColor1, normal1);\n #endif\n #if vtkNumComponents >= 3\n #if !defined(vtkComponent2Proportional)\n applyLighting(tColor2, normal2);\n #endif\n #if vtkNumComponents >= 4\n #if !defined(vtkComponent3Proportional)\n applyLighting(tColor3, normal3);\n #endif\n #endif\n #endif\n #endif\n #endif\n\n// perform final independent blend as needed\n#if defined(vtkIndependentComponentsOn) && vtkNumComponents >= 2\n tColor.rgb += tColor1;\n#if vtkNumComponents >= 3\n tColor.rgb += tColor2;\n#if vtkNumComponents >= 4\n tColor.rgb += tColor3;\n#endif\n#endif\n#endif\n\n#endif\n\n\n\n\n\n\n\nreturn tColor;\n}\n\nbool valueWithinScalarRange(vec4 val, vec4 min, vec4 max) {\n bool withinRange = false;\n #if vtkNumComponents == 1\n if (val.r >= min.r && val.r <= max.r) {\n withinRange = true;\n }\n #endif\n #if defined(vtkIndependentComponentsOn) && vtkNumComponents == 2\n if (val.r >= min.r && val.r <= max.r &&\n val.g >= min.g && val.g <= max.g) {\n withinRange = true;\n }\n #endif\n #if defined(vtkIndependentComponentsOn) && vtkNumComponents >= 3\n if (all(greaterThanEqual(val, ipScalarRangeMin)) &&\n all(lessThanEqual(val, ipScalarRangeMax))) {\n withinRange = true;\n }\n #endif\n return withinRange;\n}\n\n//=======================================================================\n// Apply the specified blend mode operation along the ray's path.\n//\nvoid applyBlend(vec3 posIS, vec3 endIS, vec3 tdims)\n{\n vec3 tstep = 1.0/tdims;\n\n // start slightly inside and apply some jitter\n vec3 delta = endIS - posIS;\n vec3 stepIS = normalize(delta)*sampleDistanceIS;\n float raySteps = length(delta)/sampleDistanceIS;\n\n // avoid 0.0 jitter\n float jitter = 0.01 + 0.99*texture2D(jtexture, gl_FragCoord.xy/32.0).r;\n float stepsTraveled = jitter;\n\n // local vars for the loop\n vec4 color = vec4(0.0, 0.0, 0.0, 0.0);\n vec4 tValue;\n vec4 tColor;\n\n // if we have less than one step then pick the middle point\n // as our value\n // if (raySteps <= 1.0)\n // {\n // posIS = (posIS + endIS)*0.5;\n // }\n\n // Perform initial step at the volume boundary\n // compute the scalar\n tValue = getTextureValue(posIS);\n\n #if vtkBlendMode == 0 // COMPOSITE_BLEND\n // now map through opacity and color\n tColor = getColorForValue(tValue, posIS, tstep);\n\n // handle very thin volumes\n if (raySteps <= 1.0)\n {\n tColor.a = 1.0 - pow(1.0 - tColor.a, raySteps);\n gl_FragData[0] = tColor;\n return;\n }\n\n tColor.a = 1.0 - pow(1.0 - tColor.a, jitter);\n color = vec4(tColor.rgb*tColor.a, tColor.a);\n posIS += (jitter*stepIS);\n\n for (int i = 0; i < //VTK::MaximumSamplesValue ; ++i)\n {\n if (stepsTraveled + 1.0 >= raySteps) { break; }\n\n // compute the scalar\n tValue = getTextureValue(posIS);\n\n // now map through opacity and color\n tColor = getColorForValue(tValue, posIS, tstep);\n\n float mix = (1.0 - color.a);\n\n // this line should not be needed but nvidia seems to not handle\n // the break correctly on windows/chrome 58 angle\n //mix = mix * sign(max(raySteps - stepsTraveled - 1.0, 0.0));\n\n color = color + vec4(tColor.rgb*tColor.a, tColor.a)*mix;\n stepsTraveled++;\n posIS += stepIS;\n if (color.a > 0.99) { color.a = 1.0; break; }\n }\n\n if (color.a < 0.99 && (raySteps - stepsTraveled) > 0.0)\n {\n posIS = endIS;\n\n // compute the scalar\n tValue = getTextureValue(posIS);\n\n // now map through opacity and color\n tColor = getColorForValue(tValue, posIS, tstep);\n tColor.a = 1.0 - pow(1.0 - tColor.a, raySteps - stepsTraveled);\n\n float mix = (1.0 - color.a);\n color = color + vec4(tColor.rgb*tColor.a, tColor.a)*mix;\n }\n\n gl_FragData[0] = vec4(color.rgb/color.a, color.a);\n #endif\n #if vtkBlendMode == 1 || vtkBlendMode == 2\n // MAXIMUM_INTENSITY_BLEND || MINIMUM_INTENSITY_BLEND\n // Find maximum/minimum intensity along the ray.\n\n // Define the operation we will use (min or max)\n #if vtkBlendMode == 1\n #define OP max\n #else\n #define OP min\n #endif\n\n // If the clipping range is shorter than the sample distance\n // we can skip the sampling loop along the ray.\n if (raySteps <= 1.0)\n {\n gl_FragData[0] = getColorForValue(tValue, posIS, tstep);\n return;\n }\n\n vec4 value = tValue;\n posIS += (jitter*stepIS);\n\n // Sample along the ray until MaximumSamplesValue,\n // ending slightly inside the total distance\n for (int i = 0; i < //VTK::MaximumSamplesValue ; ++i)\n {\n // If we have reached the last step, break\n if (stepsTraveled + 1.0 >= raySteps) { break; }\n\n // compute the scalar\n tValue = getTextureValue(posIS);\n\n // Update the maximum value if necessary\n value = OP(tValue, value);\n\n // Otherwise, continue along the ray\n stepsTraveled++;\n posIS += stepIS;\n }\n\n // Perform the last step along the ray using the\n // residual distance\n posIS = endIS;\n tValue = getTextureValue(posIS);\n value = OP(tValue, value);\n\n // Now map through opacity and color\n gl_FragData[0] = getColorForValue(value, posIS, tstep);\n #endif\n #if vtkBlendMode == 3 || vtkBlendMode == 4 //AVERAGE_INTENSITY_BLEND || ADDITIVE_BLEND\n vec4 sum = vec4(0.);\n\n if (valueWithinScalarRange(tValue, ipScalarRangeMin, ipScalarRangeMax)) {\n sum += tValue;\n }\n\n if (raySteps <= 1.0) {\n gl_FragData[0] = getColorForValue(sum, posIS, tstep);\n return;\n }\n\n posIS += (jitter*stepIS);\n\n // Sample along the ray until MaximumSamplesValue,\n // ending slightly inside the total distance\n for (int i = 0; i < //VTK::MaximumSamplesValue ; ++i)\n {\n // If we have reached the last step, break\n if (stepsTraveled + 1.0 >= raySteps) { break; }\n\n // compute the scalar\n tValue = getTextureValue(posIS);\n\n // One can control the scalar range by setting the AverageIPScalarRange to disregard scalar values, not in the range of interest, from the average computation.\n // Notes:\n // - We are comparing all values in the texture to see if any of them\n // are outside of the scalar range. In the future we might want to allow\n // scalar ranges for each component.\n if (valueWithinScalarRange(tValue, ipScalarRangeMin, ipScalarRangeMax)) {\n // Sum the values across each step in the path\n sum += tValue;\n }\n stepsTraveled++;\n posIS += stepIS;\n }\n\n // Perform the last step along the ray using the\n // residual distance\n posIS = endIS;\n\n // compute the scalar\n tValue = getTextureValue(posIS);\n\n // One can control the scalar range by setting the IPScalarRange to disregard scalar values, not in the range of interest, from the average computation\n if (valueWithinScalarRange(tValue, ipScalarRangeMin, ipScalarRangeMax)) {\n sum += tValue;\n\n stepsTraveled++;\n }\n\n #if vtkBlendMode == 3 // Average\n sum /= vec4(stepsTraveled, stepsTraveled, stepsTraveled, 1.0);\n #endif\n\n gl_FragData[0] = getColorForValue(sum, posIS, tstep);\n #endif\n #if vtkBlendMode == 5 // RADON\n float normalizedRayIntensity = 1.0;\n\n // handle very thin volumes\n if (raySteps <= 1.0)\n {\n tValue = getTextureValue(posIS);\n normalizedRayIntensity = normalizedRayIntensity - sampleDistance*texture2D(otexture, vec2(tValue.r * oscale0 + oshift0, 0.5)).r;\n gl_FragData[0] = texture2D(ctexture, vec2(normalizedRayIntensity * cscale0 + cshift0, 0.5));\n return;\n }\n\n posIS += (jitter*stepIS);\n\n for (int i = 0; i < //VTK::MaximumSamplesValue ; ++i)\n {\n if (stepsTraveled + 1.0 >= raySteps) { break; }\n\n // compute the scalar value\n tValue = getTextureValue(posIS);\n\n // Convert scalar value to normalizedRayIntensity coefficient and accumulate normalizedRayIntensity\n normalizedRayIntensity = normalizedRayIntensity - sampleDistance*texture2D(otexture, vec2(tValue.r * oscale0 + oshift0, 0.5)).r;\n\n posIS += stepIS;\n stepsTraveled++;\n }\n\n // map normalizedRayIntensity to color\n gl_FragData[0] = texture2D(ctexture, vec2(normalizedRayIntensity * cscale0 + cshift0, 0.5));\n\n #endif\n}\n\n//=======================================================================\n// Compute a new start and end point for a given ray based\n// on the provided bounded clipping plane (aka a rectangle)\nvoid getRayPointIntersectionBounds(\n vec3 rayPos, vec3 rayDir,\n vec3 planeDir, float planeDist,\n inout vec2 tbounds, vec3 vPlaneX, vec3 vPlaneY,\n float vSize1, float vSize2)\n{\n float result = dot(rayDir, planeDir);\n if (abs(result) < 1e-6)\n {\n return;\n }\n result = -1.0 * (dot(rayPos, planeDir) + planeDist) / result;\n vec3 xposVC = rayPos + rayDir*result;\n vec3 vxpos = xposVC - vOriginVC;\n vec2 vpos = vec2(\n dot(vxpos, vPlaneX),\n dot(vxpos, vPlaneY));\n\n // on some apple nvidia systems this does not work\n // if (vpos.x < 0.0 || vpos.x > vSize1 ||\n // vpos.y < 0.0 || vpos.y > vSize2)\n // even just\n // if (vpos.x < 0.0 || vpos.y < 0.0)\n // fails\n // so instead we compute a value that represents in and out\n //and then compute the return using this value\n float xcheck = max(0.0, vpos.x * (vpos.x - vSize1)); // 0 means in bounds\n float check = sign(max(xcheck, vpos.y * (vpos.y - vSize2))); // 0 means in bounds, 1 = out\n\n tbounds = mix(\n vec2(min(tbounds.x, result), max(tbounds.y, result)), // in value\n tbounds, // out value\n check); // 0 in 1 out\n}\n\n//=======================================================================\n// given a\n// - ray direction (rayDir)\n// - starting point (vertexVCVSOutput)\n// - bounding planes of the volume\n// - optionally depth buffer values\n// - far clipping plane\n// compute the start/end distances of the ray we need to cast\nvec2 computeRayDistances(vec3 rayDir, vec3 tdims)\n{\n vec2 dists = vec2(100.0*camFar, -1.0);\n\n vec3 vSize = vSpacing*tdims;\n\n // all this is in View Coordinates\n getRayPointIntersectionBounds(vertexVCVSOutput, rayDir,\n vPlaneNormal0, vPlaneDistance0, dists, vPlaneNormal2, vPlaneNormal4,\n vSize.y, vSize.z);\n getRayPointIntersectionBounds(vertexVCVSOutput, rayDir,\n vPlaneNormal1, vPlaneDistance1, dists, vPlaneNormal2, vPlaneNormal4,\n vSize.y, vSize.z);\n getRayPointIntersectionBounds(vertexVCVSOutput, rayDir,\n vPlaneNormal2, vPlaneDistance2, dists, vPlaneNormal0, vPlaneNormal4,\n vSize.x, vSize.z);\n getRayPointIntersectionBounds(vertexVCVSOutput, rayDir,\n vPlaneNormal3, vPlaneDistance3, dists, vPlaneNormal0, vPlaneNormal4,\n vSize.x, vSize.z);\n getRayPointIntersectionBounds(vertexVCVSOutput, rayDir,\n vPlaneNormal4, vPlaneDistance4, dists, vPlaneNormal0, vPlaneNormal2,\n vSize.x, vSize.y);\n getRayPointIntersectionBounds(vertexVCVSOutput, rayDir,\n vPlaneNormal5, vPlaneDistance5, dists, vPlaneNormal0, vPlaneNormal2,\n vSize.x, vSize.y);\n\n //VTK::ClipPlane::Impl\n\n // do not go behind front clipping plane\n dists.x = max(0.0,dists.x);\n\n // do not go PAST far clipping plane\n float farDist = -camThick/rayDir.z;\n dists.y = min(farDist,dists.y);\n\n // Do not go past the zbuffer value if set\n // This is used for intermixing opaque geometry\n //VTK::ZBuffer::Impl\n\n return dists;\n}\n\n//=======================================================================\n// Compute the index space starting position (pos) and end\n// position\n//\nvoid computeIndexSpaceValues(out vec3 pos, out vec3 endPos, vec3 rayDir, vec2 dists)\n{\n // compute starting and ending values in volume space\n pos = vertexVCVSOutput + dists.x*rayDir;\n pos = pos - vOriginVC;\n // convert to volume basis and origin\n pos = vec3(\n dot(pos, vPlaneNormal0),\n dot(pos, vPlaneNormal2),\n dot(pos, vPlaneNormal4));\n\n endPos = vertexVCVSOutput + dists.y*rayDir;\n endPos = endPos - vOriginVC;\n endPos = vec3(\n dot(endPos, vPlaneNormal0),\n dot(endPos, vPlaneNormal2),\n dot(endPos, vPlaneNormal4));\n\n float delta = length(endPos - pos);\n\n pos *= vVCToIJK;\n endPos *= vVCToIJK;\n\n float delta2 = length(endPos - pos);\n sampleDistanceIS = sampleDistance*delta2/delta;\n #ifdef VolumeShadowOn\n sampleDistanceISVS = sampleDistanceIS * volumeShadowSamplingDistFactor;\n #endif\n}\n\nvoid main()\n{\n\n if (cameraParallel == 1)\n {\n // Camera is parallel, so the rayDir is just the direction of the camera.\n rayDirVC = vec3(0.0, 0.0, -1.0);\n } else {\n // camera is at 0,0,0 so rayDir for perspective is just the vc coord\n rayDirVC = normalize(vertexVCVSOutput);\n }\n\n vec3 tdims = vec3(volumeDimensions);\n\n // compute the start and end points for the ray\n vec2 rayStartEndDistancesVC = computeRayDistances(rayDirVC, tdims);\n\n // do we need to composite? aka does the ray have any length\n // If not, bail out early\n if (rayStartEndDistancesVC.y <= rayStartEndDistancesVC.x)\n {\n discard;\n }\n\n // IS = Index Space\n vec3 posIS;\n vec3 endIS;\n computeIndexSpaceValues(posIS, endIS, rayDirVC, rayStartEndDistancesVC);\n\n // Perform the blending operation along the ray\n applyBlend(posIS, endIS, tdims);\n}\n",e.Geometry=""},e.replaceShaderValues=function(n,r,a){var o=n.Fragment;a.getProperty().getInterpolationType()===y.ZG.LINEAR&&(o=m.Z.substitute(o,"//VTK::TrilinearOn","#define vtkTrilinearOn").result),!0===a.getProperty().getUseLabelOutline()&&(o=m.Z.substitute(o,"//VTK::ImageLabelOutlineOn","#define vtkImageLabelOutlineOn").result);var s=t.scalarTexture.getComponents();o=m.Z.substitute(o,"//VTK::NumComponents","#define vtkNumComponents ".concat(s)).result;var u=a.getProperty().getIndependentComponents();if(u){o=m.Z.substitute(o,"//VTK::IndependentComponentsOn","#define vtkIndependentComponentsOn").result;for(var l=[],c=0;c0&&(o=m.Z.substitute(o,"//VTK::vtkProportionalComponents",l.join("\n")).result)}var d=t.currentInput.getSpatialExtent(),f=t.currentInput.getSpacing(),v=new Float64Array(3);i.set(v,(d[1]-d[0])*f[0],(d[3]-d[2])*f[1],(d[5]-d[4])*f[2]);var p=i.length(v)/t.renderable.getSampleDistance();o=m.Z.substitute(o,"//VTK::MaximumSamplesValue","".concat(Math.ceil(p))).result,o=m.Z.substitute(o,"//VTK::LightComplexity","#define vtkLightComplexity ".concat(t.lastLightComplexity)).result,t.lastLightComplexity>0&&(t.renderable.getVolumetricScatteringBlending()>0&&(o=m.Z.substitute(o,"//VTK::VolumeShadowOn","#define VolumeShadowOn").result),t.renderable.getVolumetricScatteringBlending()<1&&(o=m.Z.substitute(o,"//VTK::SurfaceShadowOn","#define SurfaceShadowOn").result),0===t.renderable.getVolumetricScatteringBlending()&&t.renderable.getLocalAmbientOcclusion()&&a.getProperty().getAmbient()>0&&(o=m.Z.substitute(o,"//VTK::localAmbientOcclusionOn","#define localAmbientOcclusionOn").result)),t.gopacity=a.getProperty().getUseGradientOpacity(0);for(var h=1;u&&!t.gopacity&&h0&&(a=m.Z.substitute(a,"//VTK::VolumeShadow::Dec",["uniform float volumetricScatteringBlending;","uniform float giReach;","uniform float volumeShadowSamplingDistFactor;","uniform float anisotropy;","uniform float anisotropy2;"],!1).result),0===t.renderable.getVolumetricScatteringBlending()&&t.renderable.getLocalAmbientOcclusion()&&r.getProperty().getAmbient()>0&&(a=m.Z.substitute(a,"//VTK::LAO::Dec",["uniform int kernelRadius;","uniform vec2 kernelSample[".concat(t.renderable.getLAOKernelRadius(),"];"),"uniform int kernelSize;"],!1).result),e.Fragment=a}},e.replaceShaderClippingPlane=function(e,n,r){var a=e.Fragment;if(t.renderable.getClippingPlanes().length>0){var i=t.renderable.getClippingPlanes().length;a=m.Z.substitute(a,"//VTK::ClipPlane::Dec",["uniform vec3 vClipPlaneNormals[6];","uniform float vClipPlaneDistances[6];","//VTK::ClipPlane::Dec"],!1).result,a=m.Z.substitute(a,"//VTK::ClipPlane::Impl",["for(int i = 0; i < ".concat(i,"; i++) {")," float rayDirRatio = dot(rayDir, vClipPlaneNormals[i]);"," float equationResult = dot(vertexVCVSOutput, vClipPlaneNormals[i]) + vClipPlaneDistances[i];"," if (rayDirRatio == 0.0)"," {"," if (equationResult < 0.0) dists.x = dists.y;"," continue;"," }"," float result = -1.0 * equationResult / rayDirRatio;"," if (rayDirRatio < 0.0) dists.y = min(dists.y, result);"," else dists.x = max(dists.x, result);","}","//VTK::ClipPlane::Impl"],!1).result}e.Fragment=a},e.getNeedToRebuildShaders=function(n,a,o){var s=0;o.getProperty().getShade()&&t.renderable.getBlendMode()===S.bt.COMPOSITE_BLEND&&(s=0,t.numberOfLights=0,a.getLights().forEach((function(e){e.getSwitch()>0&&(t.numberOfLights++,0===s&&(s=1)),1===s&&(t.numberOfLights>1||1!==e.getIntensity()||!e.lightTypeIsHeadLight())&&(s=2),s<3&&e.getPositional()&&(s=3)})));var u=!1;t.lastLightComplexity!==s&&(t.lastLightComplexity=s,u=!0);var l=t.scalarTexture.getComponents(),c=o.getProperty().getIndependentComponents(),d=!1,f=[];if(c){for(var v=0;v0&&(d=!0)}var m=t.currentInput.getSpatialExtent(),p=t.currentInput.getSpacing(),h=new Float64Array(3);i.set(h,(m[1]-m[0])*p[0],(m[3]-m[2])*p[1],(m[5]-m[4])*p[2]);var g=i.length(h)/t.renderable.getSampleDistance(),A={interpolationType:o.getProperty().getInterpolationType(),useLabelOutline:o.getProperty().getUseLabelOutline(),numComp:l,usesProportionalComponents:d,iComps:c,maxSamples:g,useGradientOpacity:o.getProperty().getUseGradientOpacity(0),blendMode:t.renderable.getBlendMode(),proportionalComponents:f};return t.previousState&&t.previousState.interpolationType===A.interpolationType&&t.previousState.useLabelOutline===A.useLabelOutline&&t.previousState.numComp===A.numComp&&t.previousState.usesProportionalComponents===A.usesProportionalComponents&&t.previousState.iComps===A.iComps&&t.previousState.maxSamples===A.maxSamples&&t.previousState.useGradientOpacity===A.useGradientOpacity&&t.previousState.blendMode===A.blendMode&&function(e,t){if(e.length!==t.length)return!1;for(var n=0;ne.getAttributeUpdateTime().getMTime()||e.getShaderSourceTime().getMTime()>e.getAttributeUpdateTime().getMTime())&&(a.isAttributeUsed("vertexDC")&&(e.getVAO().addAttributeArray(a,e.getCABO(),"vertexDC",e.getCABO().getVertexOffset(),e.getCABO().getStride(),t.context.FLOAT,3,t.context.FALSE)||E("Error setting vertexDC in shader VAO.")),e.getAttributeUpdateTime().modified()),a.setUniformi("texture1",t.scalarTexture.getTextureUnit()),a.setUniformf("sampleDistance",t.renderable.getSampleDistance());for(var i=t.scalarTexture.getVolumeInfo(),o=t.renderable.getIpScalarRange(),s=[],u=[],l=0;l<4;l++)s[l]=o[0]*i.dataComputedScale[l]+i.dataComputedOffset[l],u[l]=o[1]*i.dataComputedScale[l]+i.dataComputedOffset[l],s[l]=(s[l]-i.offset[l])/i.scale[l],u[l]=(u[l]-i.offset[l])/i.scale[l];if(a.setUniform4f("ipScalarRangeMin",s[0],s[1],s[2],s[3]),a.setUniform4f("ipScalarRangeMax",u[0],u[1],u[2],u[3]),null!==t.zBufferTexture){a.setUniformi("zBufferTexture",t.zBufferTexture.getTextureUnit());var c=t._useSmallViewport?[t._smallViewportWidth,t._smallViewportHeight]:t._openGLRenderWindow.getFramebufferSize();a.setUniformf("vpWidth",c[0]),a.setUniformf("vpHeight",c[1])}},e.setCameraShaderParameters=function(n,r,a){var u=t.openGLCamera.getKeyMatrices(r),l=t.openGLVolume.getKeyMatrices();o.multiply(t.modelToView,u.wcvc,l.mcwc);var c=n.getProgram(),d=t.openGLCamera.getRenderable(),f=d.getClippingRange();c.setUniformf("camThick",f[1]-f[0]),c.setUniformf("camNear",f[0]),c.setUniformf("camFar",f[1]);for(var v=t.currentInput.getBounds(),m=t.currentInput.getDimensions(),p=new Float64Array(3),h=new Float64Array(3),g=1,A=-1,y=1,S=-1,b=0;b<8;++b){if(i.set(p,v[b%2],v[2+Math.floor(b/2)%2],v[4+Math.floor(b/4)]),i.transformMat4(p,p,t.modelToView),!d.getParallelProjection()){i.normalize(h,p);var w=-f[0]/p[2];i.scale(p,h,w)}i.transformMat4(p,p,u.vcpc),g=Math.min(p[0],g),A=Math.max(p[0],A),y=Math.min(p[1],y),S=Math.max(p[1],S)}c.setUniformf("dcxmin",g),c.setUniformf("dcxmax",A),c.setUniformf("dcymin",y),c.setUniformf("dcymax",S),c.isUniformUsed("cameraParallel")&&c.setUniformi("cameraParallel",d.getParallelProjection());var E=t.currentInput.getSpatialExtent(),C=t.currentInput.getSpacing(),D=new Float64Array(3);i.set(D,(E[1]-E[0])*C[0],(E[3]-E[2])*C[1],(E[5]-E[4])*C[2]),c.setUniform3f("vSpacing",C[0],C[1],C[2]),i.set(p,E[0],E[2],E[4]),t.currentInput.indexToWorldVec3(p,p),i.transformMat4(p,p,t.modelToView),c.setUniform3f("vOriginVC",p[0],p[1],p[2]);var _=t.currentInput.getIndexToWorld();o.multiply(t.idxToView,t.modelToView,_),s.multiply(t.idxNormalMatrix,u.normalMatrix,l.normalMatrix),s.multiply(t.idxNormalMatrix,t.idxNormalMatrix,t.currentInput.getDirectionByReference());var M=i.length(D)/t.renderable.getSampleDistance();M>t.renderable.getMaximumSamplesPerRay()&&I("The number of steps required ".concat(Math.ceil(M)," is larger than the\n specified maximum number of steps ").concat(t.renderable.getMaximumSamplesPerRay(),".\n Please either change the\n volumeMapper sampleDistance or its maximum number of samples."));var O=new Float64Array(3);if(i.set(O,1,1,1),i.divide(O,O,D),c.setUniform3f("vVCToIJK",O[0],O[1],O[2]),c.setUniform3i("volumeDimensions",m[0],m[1],m[2]),!t._openGLRenderWindow.getWebgl2()){var P=t.scalarTexture.getVolumeInfo();c.setUniformf("texWidth",t.scalarTexture.getWidth()),c.setUniformf("texHeight",t.scalarTexture.getHeight()),c.setUniformi("xreps",P.xreps),c.setUniformi("xstride",P.xstride),c.setUniformi("ystride",P.ystride)}for(var T=new Float64Array(3),x=new Float64Array(3),R=0;R<6;++R){switch(R){case 1:i.set(T,-1,0,0),i.set(x,E[0],E[2],E[4]);break;case 2:i.set(T,0,1,0),i.set(x,E[1],E[3],E[5]);break;case 3:i.set(T,0,-1,0),i.set(x,E[0],E[2],E[4]);break;case 4:i.set(T,0,0,1),i.set(x,E[1],E[3],E[5]);break;case 5:i.set(T,0,0,-1),i.set(x,E[0],E[2],E[4]);break;default:i.set(T,1,0,0),i.set(x,E[1],E[3],E[5])}i.transformMat3(T,T,t.idxNormalMatrix),i.transformMat4(x,x,t.idxToView);var L=-1*i.dot(x,T);c.setUniform3f("vPlaneNormal".concat(R),T[0],T[1],T[2]),c.setUniformf("vPlaneDistance".concat(R),L)}if(a.getProperty().getUseLabelOutline()){var k=t.currentInput.getWorldToIndex();c.setUniformMatrix("vWCtoIDX",k),o.invert(t.projectionToWorld,u.wcpc),c.setUniformMatrix("PCWCMatrix",t.projectionToWorld);var N=e.getRenderTargetSize();c.setUniformf("vpWidth",N[0]),c.setUniformf("vpHeight",N[1]);var F=e.getRenderTargetOffset();c.setUniformf("vpOffsetX",F[0]/N[0]),c.setUniformf("vpOffsetY",F[1]/N[1])}if(o.invert(t.projectionToView,u.vcpc),c.setUniformMatrix("PCVCMatrix",t.projectionToView),0!==t.lastLightComplexity){var B=0,U=[],V=[],j=[];if(r.getLights().forEach((function(e){if(e.getSwitch()>0){var t=e.getColor(),n=e.getIntensity();U[0+3*B]=t[0]*n,U[1+3*B]=t[1]*n,U[2+3*B]=t[2]*n;var r=e.getDirection();i.set(T,r[0],r[1],r[2]),i.transformMat3(T,T,u.normalMatrix),i.normalize(T,T),V[0+3*B]=T[0],V[1+3*B]=T[1],V[2+3*B]=T[2],j[0+3*B]=-.5*T[0],j[1+3*B]=-.5*T[1],j[2+3*B]=-.5*(T[2]-1),B++}})),c.setUniformi("twoSidedLighting",r.getTwoSidedLighting()),c.setUniformi("lightNum",B),c.setUniform3fv("lightColor",U),c.setUniform3fv("lightDirectionVC",V),c.setUniform3fv("lightHalfAngleVC",j),3===t.lastLightComplexity){B=0;var G=[],H=[],Q=[],q=[],z=[];r.getLights().forEach((function(e){if(e.getSwitch()>0){var n=e.getAttenuationValues();H[0+3*B]=n[0],H[1+3*B]=n[1],H[2+3*B]=n[2],q[B]=e.getExponent(),Q[B]=e.getConeAngle(),z[B]=e.getPositional();var r=e.getTransformedPosition();i.transformMat4(r,r,t.modelToView),G[0+3*B]=r[0],G[1+3*B]=r[1],G[2+3*B]=r[2],B+=1}})),c.setUniform3fv("lightPositionVC",G),c.setUniform3fv("lightAttenuation",H),c.setUniformfv("lightConeAngle",Q),c.setUniformfv("lightExponent",q),c.setUniformiv("lightPositional",z)}if(t.renderable.getVolumetricScatteringBlending()>0&&(c.setUniformf("giReach",t.renderable.getGlobalIlluminationReach()),c.setUniformf("volumetricScatteringBlending",t.renderable.getVolumetricScatteringBlending()),c.setUniformf("volumeShadowSamplingDistFactor",t.renderable.getVolumeShadowSamplingDistFactor()),c.setUniformf("anisotropy",t.renderable.getAnisotropy()),c.setUniformf("anisotropy2",Math.pow(t.renderable.getAnisotropy(),2))),0===t.renderable.getVolumetricScatteringBlending()&&t.renderable.getLocalAmbientOcclusion()&&a.getProperty().getAmbient()>0){var W=t.renderable.getLAOKernelSize();c.setUniformi("kernelSize",W);for(var Y=[],Z=0;Z=2)for(var l=0;l0&&(a.setUniformf("vAmbient",o.getAmbient()),a.setUniformf("vDiffuse",o.getDiffuse()),a.setUniformf("vSpecular",o.getSpecular()),a.setUniformf("vSpecularPower",o.getSpecularPower()))},e.getClippingPlaneShaderParameters=function(e,n,r){if(t.renderable.getClippingPlanes().length>0){for(var a=t.openGLCamera.getKeyMatrices(n),o=[],s=[],u=t.renderable.getClippingPlanes(),l=u.length,c=0;c1.5&&(t._useSmallViewport=!0),t._animationRateSubscription||(t._animationRateSubscription=a.onAnimationFrameRateUpdate((function(){if(t.renderable.getAutoAdjustSampleDistances()){var e=a.getRecentAnimationFrameRate(),n=a.getDesiredUpdateRate()/e;(n>1.15||n<.85)&&(t._lastScale*=n),t._lastScale>400&&(t._lastScale=400),t._lastScale<1.5&&(t._lastScale=1.5)}else t._lastScale=t.renderable.getImageSampleDistance()*t.renderable.getImageSampleDistance();var r=t._openGLRenderWindow.getFramebufferSize();t._smallViewportWidth=Math.ceil(r[0]/Math.sqrt(t._lastScale)),t._smallViewportHeight=Math.ceil(r[1]/Math.sqrt(t._lastScale))}))),t._useSmallViewport){var i=t._openGLRenderWindow.getFramebufferSize();if(t._smallViewportHeight>i[1]&&(t._smallViewportHeight=i[1]),t._smallViewportWidth>i[0]&&(t._smallViewportWidth=i[0]),t.framebuffer.saveCurrentBindingsAndBuffers(),null===t.framebuffer.getGLFramebuffer())t.framebuffer.create(i[0],i[1]),t.framebuffer.populateFramebuffer();else{var o=t.framebuffer.getSize();o[0]===i[0]&&o[1]===i[1]||(t.framebuffer.create(i[0],i[1]),t.framebuffer.populateFramebuffer())}t.framebuffer.bind();var s=t.context;s.clearColor(0,0,0,0),s.colorMask(!0,!0,!0,!0),s.clear(s.COLOR_BUFFER_BIT),s.viewport(0,0,t._smallViewportWidth,t._smallViewportHeight),t.fvp=[t._smallViewportWidth/i[0],t._smallViewportHeight/i[1]]}t.context.disable(t.context.DEPTH_TEST),e.updateBufferObjects(n,r),r.getProperty().getInterpolationType()===y.ZG.NEAREST?(t.scalarTexture.setMinificationFilter(A.wn.NEAREST),t.scalarTexture.setMagnificationFilter(A.wn.NEAREST)):(t.scalarTexture.setMinificationFilter(A.wn.LINEAR),t.scalarTexture.setMagnificationFilter(A.wn.LINEAR)),t.lastBoundBO=null,null!==t.zBufferTexture&&t.zBufferTexture.activate()},e.renderPieceDraw=function(n,r){var a=t.context;t.scalarTexture.activate(),t.opacityTexture.activate(),t.colorTexture.activate(),t.jitterTexture.activate(),e.updateShaders(t.tris,n,r),a.drawArrays(a.TRIANGLES,0,t.tris.getCABO().getElementCount()),t.tris.getVAO().release(),t.scalarTexture.deactivate(),t.colorTexture.deactivate(),t.opacityTexture.deactivate(),t.jitterTexture.deactivate()},e.renderPieceFinish=function(e,n){if(null!==t.zBufferTexture&&t.zBufferTexture.deactivate(),t._useSmallViewport){if(t.framebuffer.restorePreviousBindingsAndBuffers(),null===t.copyShader){t.copyShader=t._openGLRenderWindow.getShaderCache().readyShaderProgramArray(["//VTK::System::Dec","attribute vec4 vertexDC;","uniform vec2 tfactor;","varying vec2 tcoord;","void main() { tcoord = vec2(vertexDC.x*0.5 + 0.5, vertexDC.y*0.5 + 0.5) * tfactor; gl_Position = vertexDC; }"].join("\n"),["//VTK::System::Dec","//VTK::Output::Dec","uniform sampler2D texture1;","varying vec2 tcoord;","void main() { gl_FragData[0] = texture2D(texture1,tcoord); }"].join("\n"),"");var r=t.copyShader;t.copyVAO=p.ZP.newInstance(),t.copyVAO.setOpenGLRenderWindow(t._openGLRenderWindow),t.tris.getCABO().bind(),t.copyVAO.addAttributeArray(r,t.tris.getCABO(),"vertexDC",t.tris.getCABO().getVertexOffset(),t.tris.getCABO().getStride(),t.context.FLOAT,3,t.context.FALSE)||E("Error setting vertexDC in copy shader VAO.")}else t._openGLRenderWindow.getShaderCache().readyShaderProgram(t.copyShader);var a=t._openGLRenderWindow.getFramebufferSize();t.context.viewport(0,0,a[0],a[1]);var i=t.framebuffer.getColorTexture();i.activate(),t.copyShader.setUniformi("texture",i.getTextureUnit()),t.copyShader.setUniform2f("tfactor",t.fvp[0],t.fvp[1]);var o=t.context;o.blendFuncSeparate(o.ONE,o.ONE_MINUS_SRC_ALPHA,o.ONE,o.ONE_MINUS_SRC_ALPHA),t.context.drawArrays(t.context.TRIANGLES,0,t.tris.getCABO().getElementCount()),i.deactivate(),o.blendFuncSeparate(o.SRC_ALPHA,o.ONE_MINUS_SRC_ALPHA,o.ONE,o.ONE_MINUS_SRC_ALPHA)}},e.renderPiece=function(n,r){e.invokeEvent({type:"StartEvent"}),t.renderable.update(),t.currentInput=t.renderable.getInputData(),e.invokeEvent({type:"EndEvent"}),t.currentInput?(e.renderPieceStart(n,r),e.renderPieceDraw(n,r),e.renderPieceFinish(n,r)):E("No input!")},e.computeBounds=function(n,r){e.getInput()?t.bounds=e.getInput().getBounds():(0,d.u)(t.Bounds)},e.updateBufferObjects=function(t,n){e.getNeedToRebuildBufferObjects(t,n)&&e.buildBufferObjects(t,n)},e.getNeedToRebuildBufferObjects=function(n,r){return t.VBOBuildTime.getMTime()1?1:-1,L[3*k+2]=-1;var N=new Uint16Array(8);N[0]=3,N[1]=0,N[2]=1,N[3]=3,N[4]=3,N[5]=0,N[6]=3,N[7]=2;var F=u.ZP.newInstance({numberOfComponents:3,values:L});F.setName("points");var B=u.ZP.newInstance({numberOfComponents:1,values:N});t.tris.getCABO().createVBO(B,"polys",g.hX.SURFACE,{points:F,cellOffset:0})}t.VBOBuildTime.modified()}}}}var D={context:null,VBOBuildTime:null,scalarTexture:null,scalarTextureString:null,opacityTexture:null,opacityTextureString:null,colorTexture:null,colorTextureString:null,jitterTexture:null,tris:null,framebuffer:null,copyShader:null,copyVAO:null,lastXYF:1,targetXYF:1,zBufferTexture:null,lastZBufferTexture:null,lastLightComplexity:0,fullViewportTime:1,idxToView:null,idxNormalMatrix:null,modelToView:null,projectionToView:null,avgWindowArea:0,avgFrameTime:0};function _(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,D,n),h.Z.extend(e,t,n),t.VBOBuildTime={},(0,a.j6)(t.VBOBuildTime,{mtime:0}),t.tris=c.ZP.newInstance(),t.scalarTexture=v.ZP.newInstance(),t.opacityTexture=v.ZP.newInstance(),t.colorTexture=v.ZP.newInstance(),t.jitterTexture=v.ZP.newInstance(),t.jitterTexture.setWrapS(A.Eq.REPEAT),t.jitterTexture.setWrapT(A.Eq.REPEAT),t.framebuffer=f.ZP.newInstance(),t.idxToView=o.identity(new Float64Array(16)),t.idxNormalMatrix=s.identity(new Float64Array(9)),t.modelToView=o.identity(new Float64Array(16)),t.projectionToView=o.identity(new Float64Array(16)),t.projectionToWorld=o.identity(new Float64Array(16)),t._lastScale=1,(0,a.g2)(e,t,["context"]),C(e,t)}var M=(0,a.WL)(_,"vtkOpenGLVolumeMapper"),O={newInstance:M,extend:_};(0,b.vw)("vtkVolumeMapper",M)},85886:function(e,t,n){"use strict";n.d(t,{v:function(){return r}});var r="//VTK::System::Dec\n\n/*=========================================================================\n\n Program: Visualization Toolkit\n Module: vtkPolyDataFS.glsl\n\n Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen\n All rights reserved.\n See Copyright.txt or http://www.kitware.com/Copyright.htm for details.\n\n This software is distributed WITHOUT ANY WARRANTY; without even\n the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR\n PURPOSE. See the above copyright notice for more information.\n\n=========================================================================*/\n// Template for the polydata mappers fragment shader\n\nuniform int PrimitiveIDOffset;\n\n// VC position of this fragment\n//VTK::PositionVC::Dec\n\n// optional color passed in from the vertex shader, vertexColor\n//VTK::Color::Dec\n\n// optional surface normal declaration\n//VTK::Normal::Dec\n\n// extra lighting parameters\n//VTK::Light::Dec\n\n// Texture coordinates\n//VTK::TCoord::Dec\n\n// picking support\n//VTK::Picking::Dec\n\n// Depth Peeling Support\n//VTK::DepthPeeling::Dec\n\n// clipping plane vars\n//VTK::Clip::Dec\n\n// the output of this shader\n//VTK::Output::Dec\n\n// Apple Bug\n//VTK::PrimID::Dec\n\n// handle coincident offsets\n//VTK::Coincident::Dec\n\n//VTK::ZBuffer::Dec\n\nvoid main()\n{\n // VC position of this fragment. This should not branch/return/discard.\n //VTK::PositionVC::Impl\n\n // Place any calls that require uniform flow (e.g. dFdx) here.\n //VTK::UniformFlow::Impl\n\n // Set gl_FragDepth here (gl_FragCoord.z by default)\n //VTK::Depth::Impl\n\n // Early depth peeling abort:\n //VTK::DepthPeeling::PreColor\n\n // Apple Bug\n //VTK::PrimID::Impl\n\n //VTK::Clip::Impl\n\n //VTK::Color::Impl\n\n // Generate the normal if we are not passed in one\n //VTK::Normal::Impl\n\n //VTK::TCoord::Impl\n\n //VTK::Light::Impl\n\n if (gl_FragData[0].a <= 0.0)\n {\n discard;\n }\n\n //VTK::DepthPeeling::Impl\n\n //VTK::Picking::Impl\n\n // handle coincident offsets\n //VTK::Coincident::Impl\n\n //VTK::ZBuffer::Impl\n\n //VTK::RenderPassFragmentShader::Impl\n}\n"},76236:function(e,t,n){"use strict";n.d(t,{v:function(){return r}});var r="//VTK::System::Dec\n\n/*=========================================================================\n\n Program: Visualization Toolkit\n Module: vtkPolyDataVS.glsl\n\n Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen\n All rights reserved.\n See Copyright.txt or http://www.kitware.com/Copyright.htm for details.\n\n This software is distributed WITHOUT ANY WARRANTY; without even\n the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR\n PURPOSE. See the above copyright notice for more information.\n\n=========================================================================*/\n\nattribute vec4 vertexMC;\n\n// frag position in VC\n//VTK::PositionVC::Dec\n\n// optional normal declaration\n//VTK::Normal::Dec\n\n// extra lighting parameters\n//VTK::Light::Dec\n\n// Texture coordinates\n//VTK::TCoord::Dec\n\n// material property values\n//VTK::Color::Dec\n\n// clipping plane vars\n//VTK::Clip::Dec\n\n// camera and actor matrix values\n//VTK::Camera::Dec\n\n// Apple Bug\n//VTK::PrimID::Dec\n\n// picking support\n//VTK::Picking::Dec\n\nvoid main()\n{\n //VTK::Color::Impl\n\n //VTK::Normal::Impl\n\n //VTK::TCoord::Impl\n\n //VTK::Clip::Impl\n\n //VTK::PrimID::Impl\n\n //VTK::PositionVC::Impl\n\n //VTK::Light::Impl\n\n //VTK::Picking::Impl\n}\n"},8723:function(e,t,n){"use strict";n.d(t,{Z:function(){return u}});var r=n(92393),a=r.ZP.vtkErrorMacro;function i(e,t){t.classHierarchy.push("vtkViewNode"),e.build=function(e){},e.render=function(e){},e.traverse=function(n){var r=n.getTraverseOperation(),a=e[r];if(a)a(n);else{e.apply(n,!0);for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,o,n),r.ZP.obj(e,t),r.ZP.event(e,t,"event"),t._renderableChildMap=new Map,r.ZP.get(e,t,["visited"]),r.ZP.setGet(e,t,["_parent","renderable","myFactory"]),r.ZP.getArray(e,t,["children"]),r.ZP.moveToProtected(e,t,["parent"]),i(e,t)}var u={newInstance:r.ZP.newInstance(s,"vtkViewNode"),extend:s,PASS_TYPES:["Build","Render"]}},65667:function(e,t,n){"use strict";n.d(t,{ZP:function(){return s}});var r=n(92393);function a(e,t){t.overrides||(t.overrides={}),t.classHierarchy.push("vtkViewNodeFactory"),e.createNode=function(n){if(n.isDeleted())return null;for(var r=0,a=n.getClassName(r++),i=!1,o=Object.keys(t.overrides);a&&!i;)-1!==o.indexOf(a)?i=!0:a=n.getClassName(r++);if(!i)return null;var s=t.overrides[a]();return s.setMyFactory(e),s},e.registerOverride=function(e,n){t.overrides[e]=n}}var i={};function o(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,i,n),r.ZP.obj(e,t),a(e,t)}var s={newInstance:r.ZP.newInstance(o,"vtkViewNodeFactory"),extend:o}},92393:function(e,t,n){"use strict";n.d(t,{tS:function(){return ns},ZP:function(){return ss},U2:function(){return qo},c$:function(){return Ko},B6:function(){return Jo},WL:function(){return ts},B5:function(){return ko},MR:function(){return No},j6:function(){return Ho},t8:function(){return Yo},g2:function(){return Zo},DV:function(){return $o},eR:function(){return Po},E0:function(){return To},t7:function(){return xo}});var r=n(92577),a=n(36655),i=n(47169),o=n(21930),s=n(45901);function u(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}function l(e,t,n){return l=u()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var a=new(Function.bind.apply(e,r));return n&&(0,s.Z)(a,n.prototype),a},l.apply(null,arguments)}var c,d=Object.prototype.toString,f=function(e){var t=d.call(e),n="[object Arguments]"===t;return n||(n="[object Array]"!==t&&null!==e&&"object"==typeof e&&"number"==typeof e.length&&e.length>=0&&"[object Function]"===d.call(e.callee)),n};if(!Object.keys){var v=Object.prototype.hasOwnProperty,m=Object.prototype.toString,p=f,h=Object.prototype.propertyIsEnumerable,g=!h.call({toString:null},"toString"),A=h.call((function(){}),"prototype"),y=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],S=function(e){var t=e.constructor;return t&&t.prototype===e},b={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$onmozfullscreenchange:!0,$onmozfullscreenerror:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},w=function(){if("undefined"==typeof window)return!1;for(var e in window)try{if(!b["$"+e]&&v.call(window,e)&&null!==window[e]&&"object"==typeof window[e])try{S(window[e])}catch(e){return!0}}catch(e){return!0}return!1}();c=function(e){var t=null!==e&&"object"==typeof e,n="[object Function]"===m.call(e),r=p(e),a=t&&"[object String]"===m.call(e),i=[];if(!t&&!n&&!r)throw new TypeError("Object.keys called on a non-object");var o=A&&n;if(a&&e.length>0&&!v.call(e,0))for(var s=0;s0)for(var u=0;u1&&"boolean"!=typeof t)throw new z('"allowMissing" argument must be a boolean');var n=fe(e),r=n.length>0?n[0]:"",a=ve("%"+r+"%",t),i=a.name,o=a.value,s=!1,u=a.alias;u&&(r=u[0],se(n,oe([0,1],u)));for(var l=1,c=!0;l=n.length){var m=Y(o,d);o=(c=!!m)&&"get"in m&&!("originalValue"in m.get)?m.get:o[d]}else c=ie(o,d),o=o[d];c&&!s&&(te[i]=o)}}return o},pe={exports:{}};!function(e){var t=G,n=me,r=n("%Function.prototype.apply%"),a=n("%Function.prototype.call%"),i=n("%Reflect.apply%",!0)||t.call(a,r),o=n("%Object.getOwnPropertyDescriptor%",!0),s=n("%Object.defineProperty%",!0),u=n("%Math.max%");if(s)try{s({},"a",{value:1})}catch(e){s=null}e.exports=function(e){var n=i(t,a,arguments);if(o&&s){var r=o(n,"length");r.configurable&&s(n,"length",{value:1+u(0,e.length-(arguments.length-1))})}return n};var l=function(){return i(t,r,arguments)};s?s(e.exports,"apply",{value:l}):e.exports.apply=l}(pe);var he=me,ge=pe.exports,Ae=ge(he("String.prototype.indexOf")),ye=function(e,t){var n=he(e,!!t);return"function"==typeof n&&Ae(e,".prototype.")>-1?ge(n):n},Se=R(),be=ye("Object.prototype.toString"),we=function(e){return!(Se&&e&&"object"==typeof e&&Symbol.toStringTag in e)&&"[object Arguments]"===be(e)},Ie=function(e){return!!we(e)||null!==e&&"object"==typeof e&&"number"==typeof e.length&&e.length>=0&&"[object Array]"!==be(e)&&"[object Function]"===be(e.callee)},Ee=function(){return we(arguments)}();we.isLegacyArguments=Ie;var Ce=Ee?we:Ie,De=P,_e="function"==typeof Symbol&&"symbol"==typeof Symbol("foo"),Me=Object.prototype.toString,Oe=Array.prototype.concat,Pe=Object.defineProperty,Te=Pe&&function(){var e={};try{for(var t in Pe(e,"x",{enumerable:!1,value:e}),e)return!1;return e.x===e}catch(e){return!1}}(),xe=function(e,t,n,r){var a;(!(t in e)||"function"==typeof(a=r)&&"[object Function]"===Me.call(a)&&r())&&(Te?Pe(e,t,{configurable:!0,enumerable:!1,value:n,writable:!0}):e[t]=n)},Re=function(e,t){var n=arguments.length>2?arguments[2]:{},r=De(t);_e&&(r=Oe.call(r,Object.getOwnPropertySymbols(t)));for(var a=0;a1)for(var n=1;n=e.length;return r||(n=e[t],t+=1),{done:r,value:n}}}},pr=function(e,t){if(ir(e)||rr(e))return mr(e);if(or(e)){var n=0;return{next:function(){var t=function(e,t){if(t+1>=e.length)return t+1;var n=fr(e,t);if(n<55296||n>56319)return t+1;var r=fr(e,t+1);return r<56320||r>57343?t+1:t+2}(e,n),r=vr(e,n,t);return n=t,{done:t>e.length,value:r}}}}return t&&void 0!==e["_es6-shim iterator_"]?e["_es6-shim iterator_"]():void 0};if(ur||lr){var hr=sn,gr=vn,Ar=cr("Map.prototype.forEach",!0),yr=cr("Set.prototype.forEach",!0);if(void 0===Jn||!Jn.versions||!Jn.versions.node)var Sr=cr("Map.prototype.iterator",!0),br=cr("Set.prototype.iterator",!0),wr=function(e){var t=!1;return{next:function(){try{return{done:t,value:t?void 0:e.next()}}catch(e){return t=!0,{done:!0,value:void 0}}}}};var Ir=cr("Map.prototype.@@iterator",!0)||cr("Map.prototype._es6-shim iterator_",!0),Er=cr("Set.prototype.@@iterator",!0)||cr("Set.prototype._es6-shim iterator_",!0);er.exports=function(e){return function(e){if(hr(e)){if(Sr)return wr(Sr(e));if(Ir)return Ir(e);if(Ar){var t=[];return Ar(e,(function(e,n){dr(t,[n,e])})),mr(t)}}if(gr(e)){if(br)return wr(br(e));if(Er)return Er(e);if(yr){var n=[];return yr(e,(function(e){dr(n,e)})),mr(n)}}}(e)||pr(e)}}else er.exports=function(e){if(null!=e)return pr(e,!0)}}var Cr=zt(Object.freeze({__proto__:null,default:{}})),Dr="function"==typeof Map&&Map.prototype,_r=Object.getOwnPropertyDescriptor&&Dr?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,Mr=Dr&&_r&&"function"==typeof _r.get?_r.get:null,Or=Dr&&Map.prototype.forEach,Pr="function"==typeof Set&&Set.prototype,Tr=Object.getOwnPropertyDescriptor&&Pr?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,xr=Pr&&Tr&&"function"==typeof Tr.get?Tr.get:null,Rr=Pr&&Set.prototype.forEach,Lr="function"==typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,kr="function"==typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,Nr="function"==typeof WeakRef&&WeakRef.prototype?WeakRef.prototype.deref:null,Fr=Boolean.prototype.valueOf,Br=Object.prototype.toString,Ur=Function.prototype.toString,Vr=String.prototype.match,jr=String.prototype.slice,Gr=String.prototype.replace,Hr=String.prototype.toUpperCase,Qr=String.prototype.toLowerCase,qr=RegExp.prototype.test,zr=Array.prototype.concat,Wr=Array.prototype.join,Yr=Array.prototype.slice,Zr=Math.floor,Kr="function"==typeof BigInt?BigInt.prototype.valueOf:null,Xr=Object.getOwnPropertySymbols,$r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol.prototype.toString:null,Jr="function"==typeof Symbol&&"object"==typeof Symbol.iterator,ea="function"==typeof Symbol&&Symbol.toStringTag&&(typeof Symbol.toStringTag===Jr||"symbol")?Symbol.toStringTag:null,ta=Object.prototype.propertyIsEnumerable,na=("function"==typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(e){return e.__proto__}:null);function ra(e,t){if(e===1/0||e===-1/0||e!=e||e&&e>-1e3&&e<1e3||qr.call(/e/,t))return t;var n=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if("number"==typeof e){var r=e<0?-Zr(-e):Zr(e);if(r!==e){var a=String(r),i=jr.call(t,a.length+1);return Gr.call(a,n,"$&_")+"."+Gr.call(Gr.call(i,/([0-9]{3})/g,"$&_"),/_$/,"")}}return Gr.call(t,n,"$&_")}var aa=Cr.custom,ia=aa&&la(aa)?aa:null;function oa(e,t,n){var r="double"===(n.quoteStyle||t)?'"':"'";return r+e+r}function sa(e){return Gr.call(String(e),/"/g,""")}function ua(e){return!("[object Array]"!==fa(e)||ea&&"object"==typeof e&&ea in e)}function la(e){if(Jr)return e&&"object"==typeof e&&e instanceof Symbol;if("symbol"==typeof e)return!0;if(!e||"object"!=typeof e||!$r)return!1;try{return $r.call(e),!0}catch(e){}return!1}var ca=Object.prototype.hasOwnProperty||function(e){return e in this};function da(e,t){return ca.call(e,t)}function fa(e){return Br.call(e)}function va(e,t){if(e.indexOf)return e.indexOf(t);for(var n=0,r=e.length;nt.maxStringLength){var n=e.length-t.maxStringLength,r="... "+n+" more character"+(n>1?"s":"");return ma(jr.call(e,0,t.maxStringLength),t)+r}return oa(Gr.call(Gr.call(e,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,pa),"single",t)}function pa(e){var t=e.charCodeAt(0),n={8:"b",9:"t",10:"n",12:"f",13:"r"}[t];return n?"\\"+n:"\\x"+(t<16?"0":"")+Hr.call(t.toString(16))}function ha(e){return"Object("+e+")"}function ga(e){return e+" { ? }"}function Aa(e,t,n,r){return e+" ("+t+") {"+(r?ya(n,r):Wr.call(n,", "))+"}"}function ya(e,t){if(0===e.length)return"";var n="\n"+t.prev+t.base;return n+Wr.call(e,","+n)+"\n"+t.prev}function Sa(e,t){var n=ua(e),r=[];if(n){r.length=e.length;for(var a=0;a0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(da(i,"numericSeparator")&&"boolean"!=typeof i.numericSeparator)throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var s=i.numericSeparator;if(void 0===t)return"undefined";if(null===t)return"null";if("boolean"==typeof t)return t?"true":"false";if("string"==typeof t)return ma(t,i);if("number"==typeof t){if(0===t)return 1/0/t>0?"0":"-0";var u=String(t);return s?ra(t,u):u}if("bigint"==typeof t){var l=String(t)+"n";return s?ra(t,l):l}var c=void 0===i.depth?5:i.depth;if(void 0===r&&(r=0),r>=c&&c>0&&"object"==typeof t)return ua(t)?"[Array]":"[Object]";var d=function(e,t){var n;if("\t"===e.indent)n="\t";else{if(!("number"==typeof e.indent&&e.indent>0))return null;n=Wr.call(Array(e.indent+1)," ")}return{base:n,prev:Wr.call(Array(t+1),n)}}(i,r);if(void 0===a)a=[];else if(va(a,t)>=0)return"[Circular]";function f(t,n,o){if(n&&(a=Yr.call(a)).push(n),o){var s={depth:i.depth};return da(i,"quoteStyle")&&(s.quoteStyle=i.quoteStyle),e(t,s,r+1,a)}return e(t,i,r+1,a)}if("function"==typeof t){var v=function(e){if(e.name)return e.name;var t=Vr.call(Ur.call(e),/^function\s*([\w$]+)/);if(t)return t[1];return null}(t),m=Sa(t,f);return"[Function"+(v?": "+v:" (anonymous)")+"]"+(m.length>0?" { "+Wr.call(m,", ")+" }":"")}if(la(t)){var p=Jr?Gr.call(String(t),/^(Symbol\(.*\))_[^)]*$/,"$1"):$r.call(t);return"object"!=typeof t||Jr?p:ha(p)}if(function(e){if(!e||"object"!=typeof e)return!1;if("undefined"!=typeof HTMLElement&&e instanceof HTMLElement)return!0;return"string"==typeof e.nodeName&&"function"==typeof e.getAttribute}(t)){for(var h="<"+Qr.call(String(t.nodeName)),g=t.attributes||[],A=0;A"}if(ua(t)){if(0===t.length)return"[]";var y=Sa(t,f);return d&&!function(e){for(var t=0;t=0)return!1;return!0}(y)?"["+ya(y,d)+"]":"[ "+Wr.call(y,", ")+" ]"}if(function(e){return!("[object Error]"!==fa(e)||ea&&"object"==typeof e&&ea in e)}(t)){var S=Sa(t,f);return"cause"in t&&!ta.call(t,"cause")?"{ ["+String(t)+"] "+Wr.call(zr.call("[cause]: "+f(t.cause),S),", ")+" }":0===S.length?"["+String(t)+"]":"{ ["+String(t)+"] "+Wr.call(S,", ")+" }"}if("object"==typeof t&&o){if(ia&&"function"==typeof t[ia])return t[ia]();if("symbol"!==o&&"function"==typeof t.inspect)return t.inspect()}if(function(e){if(!Mr||!e||"object"!=typeof e)return!1;try{Mr.call(e);try{xr.call(e)}catch(e){return!0}return e instanceof Map}catch(e){}return!1}(t)){var b=[];return Or.call(t,(function(e,n){b.push(f(n,t,!0)+" => "+f(e,t))})),Aa("Map",Mr.call(t),b,d)}if(function(e){if(!xr||!e||"object"!=typeof e)return!1;try{xr.call(e);try{Mr.call(e)}catch(e){return!0}return e instanceof Set}catch(e){}return!1}(t)){var w=[];return Rr.call(t,(function(e){w.push(f(e,t))})),Aa("Set",xr.call(t),w,d)}if(function(e){if(!Lr||!e||"object"!=typeof e)return!1;try{Lr.call(e,Lr);try{kr.call(e,kr)}catch(e){return!0}return e instanceof WeakMap}catch(e){}return!1}(t))return ga("WeakMap");if(function(e){if(!kr||!e||"object"!=typeof e)return!1;try{kr.call(e,kr);try{Lr.call(e,Lr)}catch(e){return!0}return e instanceof WeakSet}catch(e){}return!1}(t))return ga("WeakSet");if(function(e){if(!Nr||!e||"object"!=typeof e)return!1;try{return Nr.call(e),!0}catch(e){}return!1}(t))return ga("WeakRef");if(function(e){return!("[object Number]"!==fa(e)||ea&&"object"==typeof e&&ea in e)}(t))return ha(f(Number(t)));if(function(e){if(!e||"object"!=typeof e||!Kr)return!1;try{return Kr.call(e),!0}catch(e){}return!1}(t))return ha(f(Kr.call(t)));if(function(e){return!("[object Boolean]"!==fa(e)||ea&&"object"==typeof e&&ea in e)}(t))return ha(Fr.call(t));if(function(e){return!("[object String]"!==fa(e)||ea&&"object"==typeof e&&ea in e)}(t))return ha(f(String(t)));if(!function(e){return!("[object Date]"!==fa(e)||ea&&"object"==typeof e&&ea in e)}(t)&&!function(e){return!("[object RegExp]"!==fa(e)||ea&&"object"==typeof e&&ea in e)}(t)){var I=Sa(t,f),E=na?na(t)===Object.prototype:t instanceof Object||t.constructor===Object,C=t instanceof Object?"":"null prototype",D=!E&&ea&&Object(t)===t&&ea in t?jr.call(fa(t),8,-1):C?"Object":"",_=(E||"function"!=typeof t.constructor?"":t.constructor.name?t.constructor.name+" ":"")+(D||C?"["+Wr.call(zr.call([],D||[],C||[]),": ")+"] ":"");return 0===I.length?_+"{}":d?_+"{"+ya(I,d)+"}":_+"{ "+Wr.call(I,", ")+" }"}return String(t)},Ea=ba("%TypeError%"),Ca=ba("%WeakMap%",!0),Da=ba("%Map%",!0),_a=wa("WeakMap.prototype.get",!0),Ma=wa("WeakMap.prototype.set",!0),Oa=wa("WeakMap.prototype.has",!0),Pa=wa("Map.prototype.get",!0),Ta=wa("Map.prototype.set",!0),xa=wa("Map.prototype.has",!0),Ra=function(e,t){for(var n,r=e;null!==(n=r.next);r=n)if(n.key===t)return r.next=n.next,n.next=e.next,e.next=n,n},La=Object.prototype.hasOwnProperty,ka=Object.prototype.toString,Na=function(e,t,n){if("[object Function]"!==ka.call(t))throw new TypeError("iterator must be a function");var r=e.length;if(r===+r)for(var a=0;a-1}return!!$a&&function(e){var t=!1;return Ga(Xa,(function(n,r){if(!t)try{t=n.call(e)===r}catch(e){}})),t}(e)},fi=P,vi=function(e){return null!=e},mi=T(),pi=ye,hi=Object,gi=pi("Array.prototype.push"),Ai=pi("Object.prototype.propertyIsEnumerable"),yi=mi?Object.getOwnPropertySymbols:null,Si=function(e,t){if(!vi(e))throw new TypeError("target must be an object");var n,r,a,i,o,s,u,l=hi(e);for(n=1;n=0;a--)if(h[a]!=g[a])return!1;for(a=h.length-1;a>=0;a--)if(!lo(e[i=h[a]],t[i],n,r))return!1;var A=Gi(e),y=Gi(t);if(A!==y)return!1;if("Set"===A||"Set"===y)return function(e,t,n,r){if(ro(e)!==ro(t))return!1;var a,i,o,s=Hi(e),u=Hi(t);for(;(a=s.next())&&!a.done;)if(a.value&&"object"==typeof a.value)o||(o=new Ki),eo(o,a.value);else if(!no(t,a.value)){if(n.strict)return!1;if(!so(e,t,a.value))return!1;o||(o=new Ki),eo(o,a.value)}if(o){for(;(i=u.next())&&!i.done;)if(i.value&&"object"==typeof i.value){if(!ao(o,i.value,n.strict,r))return!1}else if(!n.strict&&!no(e,i.value)&&!ao(o,i.value,n.strict,r))return!1;return 0===ro(o)}return!0}(e,t,n,r);if("Map"===A)return function(e,t,n,r){if(Ji(e)!==Ji(t))return!1;var a,i,o,s,u,l,c=Hi(e),d=Hi(t);for(;(a=c.next())&&!a.done;)if(s=a.value[0],u=a.value[1],s&&"object"==typeof s)o||(o=new Ki),eo(o,s);else if(void 0===(l=$i(t,s))&&!Xi(t,s)||!lo(u,l,n,r)){if(n.strict)return!1;if(!oo(e,t,s,u,n,r))return!1;o||(o=new Ki),eo(o,s)}if(o){for(;(i=d.next())&&!i.done;)if(s=i.value[0],l=i.value[1],s&&"object"==typeof s){if(!uo(o,e,s,l,n,r))return!1}else if(!(n.strict||e.has(s)&&lo($i(e,s),l,n,r)||uo(o,e,s,l,zi({},n,{strict:!1}),r)))return!1;return 0===ro(o)}return!0}(e,t,n,r);return!0}(e,t,a,r)}function co(e){return!(!e||"object"!=typeof e||"number"!=typeof e.length)&&("function"==typeof e.copy&&"function"==typeof e.slice&&(!(e.length>0&&"number"!=typeof e[0])&&!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))))}var fo=n(88095),vo=n(8821),mo=n(85169),po=n(2312);function ho(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=(0,po.Z)(e)););return e}function go(){return go="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(e,t,n){var r=ho(e,t);if(r){var a=Object.getOwnPropertyDescriptor(r,t);return a.get?a.get.call(arguments.length<3?e:n):a.value}},go.apply(this,arguments)}var Ao=n(82248),yo=n(17245);function So(e){var t="function"==typeof Map?new Map:void 0;return So=function(e){if(null===e||(n=e,-1===Function.toString.call(n).indexOf("[native code]")))return e;var n;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,r)}function r(){return l(e,arguments,(0,po.Z)(this).constructor)}return r.prototype=Object.create(e.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),(0,s.Z)(r,e)},So(e)}function bo(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=(0,po.Z)(e);if(t){var a=(0,po.Z)(this).constructor;n=Reflect.construct(r,arguments,a)}else n=r.apply(this,arguments);return(0,yo.Z)(this,n)}}var wo=function(e){(0,Ao.Z)(n,e);var t=bo(n);function n(){return(0,vo.Z)(this,n),t.apply(this,arguments)}return(0,mo.Z)(n,[{key:"push",value:function(){for(var e=0;e1?t-1:0),r=1;r1?n-1:0),a=1;a0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};Uo(t);var n=[];if(Number.isInteger(t.mtime)||(t.mtime=++Co),"classHierarchy"in t){if(!(t.classHierarchy instanceof wo)){for(var r=new wo,a=0;a0&&void 0!==arguments[0]?arguments[0]:0;return t.classHierarchy[t.classHierarchy.length-1-e]},e.set=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=!1;return Object.keys(n).forEach((function(s){var u=a?null:e["set".concat(Fo(s))];u&&Array.isArray(n[s])&&u.length>1?i=u.apply(void 0,(0,o.Z)(n[s]))||i:u?i=u(n[s])||i:(-1!==["mtime"].indexOf(s)||r||xo("Warning: Set value to model directly ".concat(s,", ").concat(n[s])),i=t[s]!==n[s]||i,t[s]=n[s])})),i},e.get=function(){for(var e=arguments.length,n=new Array(e),r=0;r1&&void 0!==arguments[1]&&arguments[1];if(n.getClassName()!==e.getClassName())throw new Error("Cannot ShallowCopy ".concat(n.getClassName()," into ").concat(e.getClassName()));var a=n.get(),i=Object.keys(t).sort(),o=Object.keys(a).sort();o.forEach((function(e){var n=i.indexOf(e);-1===n?r&&Po("add ".concat(e," in shallowCopy")):i.splice(n,1),t[e]=a[e]})),i.length&&r&&Po("Untouched keys: ".concat(i.join(", "))),e.modified()},e.toJSON=function(){return e.getState()},e}Lo.Float32Array=Float32Array,Lo.Float64Array=Float64Array,Lo.Uint8Array=Uint8Array,Lo.Int8Array=Int8Array,Lo.Uint16Array=Uint16Array,Lo.Int16Array=Int16Array,Lo.Uint32Array=Uint32Array,Lo.Int32Array=Int32Array,Lo.Uint8ClampedArray=Uint8ClampedArray;var Qo={object:function(e,t,n){return function(){return Eo({},t[n.name])}}};function qo(e,t,n){n.forEach((function(n){if("object"===(0,a.Z)(n)){var r=Qo[n.type];e["get".concat(Bo(n.name))]=r?r(e,t,n):function(){return t[n.name]}}else e["get".concat(Bo(n))]=function(){return t[n]}}))}var zo={enum:function(e,t,n){return function(r){if("string"==typeof r){if(void 0!==n.enum[r])return t[n.name]!==n.enum[r]&&(t[n.name]=n.enum[r],e.modified(),!0);throw To("Set Enum with invalid argument ".concat(n,", ").concat(r)),new RangeError("Set Enum with invalid string argument")}if("number"==typeof r){if(t[n.name]!==r){if(-1!==Object.keys(n.enum).map((function(e){return n.enum[e]})).indexOf(r))return t[n.name]=r,e.modified(),!0;throw To("Set Enum outside numeric range ".concat(n,", ").concat(r)),new RangeError("Set Enum outside numeric range")}return!1}throw To("Set Enum with invalid argument (String/Number) ".concat(n,", ").concat(r)),new TypeError("Set Enum with invalid argument (String/Number)")}},object:function(e,t,n){return function(r){return!lo(t[n.name],r,a,Qi())&&(t[n.name]=r,e.modified(),!0);var a}}};function Wo(e){if("object"===(0,a.Z)(e)){var t=zo[e.type];if(t)return function(n,r){return t(n,r,e)};throw To("No setter for field ".concat(e)),new TypeError("No setter for field")}return function(t,n){return function(r){return n.deleted?(To("instance deleted - cannot call any method"),!1):n[e]!==r&&(n[e]=r,t.modified(),!0)}}}function Yo(e,t,n){n.forEach((function(n){"object"===(0,a.Z)(n)?e["set".concat(Bo(n.name))]=Wo(n)(e,t):e["set".concat(Bo(n))]=Wo(n)(e,t)}))}function Zo(e,t,n){qo(e,t,n),Yo(e,t,n)}function Ko(e,t,n){n.forEach((function(n){e["get".concat(Bo(n))]=function(){return t[n]?Array.from(t[n]):t[n]},e["get".concat(Bo(n),"ByReference")]=function(){return t[n]}}))}function Xo(e,t,n,r){var a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:void 0;n.forEach((function(n){if(t[n]&&r&&t[n].length!==r)throw new RangeError("Invalid initial number of values for array (".concat(n,")"));e["set".concat(Bo(n))]=function(){if(t.deleted)return To("instance deleted - cannot call any method"),!1;for(var i=arguments.length,o=new Array(i),s=0;s=0)&&(l=l[0],c=!0),null==l)u=t[n]!==l;else{if(r&&l.length!==r){if(!(l.length4&&void 0!==arguments[4]?arguments[4]:void 0;Ko(e,t,n),Xo(e,t,n,r,a)}function Jo(e,t,n){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},n={},r={};return e(r,n,t),Object.freeze(r)};return t&&fo.Z.register(t,n),n}function ns(){for(var e=arguments.length,t=new Array(e),n=0;n2&&void 0!==arguments[2]?arguments[2]:{};t.keystore=Object.assign(t.keystore||{},n),e.setKey=function(e,n){t.keystore[e]=n},e.getKey=function(e){return t.keystore[e]},e.getAllKeys=function(){return Object.keys(t.keystore)},e.deleteKey=function(e){return delete t.keystore[e]},e.clearKeystore=function(){return e.getAllKeys().forEach((function(e){return delete t.keystore[e]}))}}var is=1,os="__root__";var ss={algo:function(e,t,n,r){function a(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;t.deleted?To("instance deleted - cannot call any method"):r>=t.numberOfInputs?To("algorithm ".concat(e.getClassName()," only has ").concat(t.numberOfInputs," input ports. To add more input ports, use addInputData()")):(t.inputData[r]!==n||t.inputConnection[r])&&(t.inputData[r]=n,t.inputConnection[r]=null,e.modified&&e.modified())}function i(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(t.deleted)To("instance deleted - cannot call any method");else{if(r>=t.numberOfInputs){var a="algorithm ".concat(e.getClassName()," only has ");return a+="".concat(t.numberOfInputs),void To(a+=" input ports. To add more input ports, use addInputConnection()")}t.inputData[r]=null,t.inputConnection[r]=n}}function o(){for(var e=t.numberOfInputs;e&&!t.inputData[e-1]&&!t.inputConnection[e-1];)e--;return e===t.numberOfInputs&&t.numberOfInputs++,e}function s(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return t.deleted?(To("instance deleted - cannot call any method"),null):(e.shouldUpdate()&&e.update(),t.output[n])}if(t.inputData?t.inputData=t.inputData.map(fo.Z):t.inputData=[],t.inputConnection?t.inputConnection=t.inputConnection.map(fo.Z):t.inputConnection=[],t.output?t.output=t.output.map(fo.Z):t.output=[],t.inputArrayToProcess?t.inputArrayToProcess=t.inputArrayToProcess.map(fo.Z):t.inputArrayToProcess=[],t.numberOfInputs=n,e.shouldUpdate=function(){for(var n=e.getMTime(),a=1/0,i=r;i--;){if(!t.output[i]||t.output[i].isDeleted())return!0;var o=t.output[i].getMTime();if(oa)return!0}return!1},t.numberOfInputs){for(var u=t.numberOfInputs;u--;)t.inputData.push(null),t.inputConnection.push(null);e.setInputData=a,e.setInputConnection=i,e.addInputData=function(e){t.deleted?To("instance deleted - cannot call any method"):a(e,o())},e.addInputConnection=function(e){t.deleted?To("instance deleted - cannot call any method"):i(e,o())},e.getInputData=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return t.inputConnection[e]&&(t.inputData[e]=t.inputConnection[e]()),t.inputData[e]},e.getInputConnection=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return t.inputConnection[e]}}r&&(e.getOutputData=s,e.getOutputPort=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,n=function(){return s(t)};return n.filter=e,n}),e.update=function(){var n=[];if(t.numberOfInputs)for(var r=0;r3&&void 0!==arguments[3]?arguments[3]:"Scalars";t.inputArrayToProcess.length1&&void 0!==arguments[1]?arguments[1]:0;if(!e.apply)return console.error("Invalid callback for event ".concat(n)),null;if(t.deleted)return To("instance deleted - cannot call any method"),null;var i=o++;return a.push([i,e,r]),a.sort((function(e,t){return t[2]-e[2]})),u(i)},e.delete=function(){i(),a.forEach((function(e){return s((0,r.Z)(e,1)[0])}))}},EVENT_ABORT:es,formatBytesToProperUnit:function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1e3,r=["TB","GB","MB","KB"],a=Number(e),i="B";a>n;)a/=n,i=r.pop();return"".concat(a.toFixed(t)," ").concat(i)},formatNumbersWithThousandSeparator:function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:" ",n=[],r=e;r>1e3;)n.push("000".concat(r%1e3).slice(-3)),r=Math.floor(r/1e3);return r>0&&n.push(r),n.reverse(),n.join(t)},get:qo,getArray:Ko,getCurrentGlobalMTime:function(){return Co},getStateArrayMapFunc:jo,isVtkObject:rs,keystore:as,measurePromiseExecution:function(e,t){var n=performance.now();e.finally((function(){var e=performance.now()-n;t(e)}))},moveToProtected:Jo,newInstance:ts,newTypedArray:ko,newTypedArrayFrom:No,normalizeWheel:function(e){var t=0,n=0,r=0,a=0;return"detail"in e&&(n=e.detail),"wheelDelta"in e&&(n=-e.wheelDelta/120),"wheelDeltaY"in e&&(n=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=n,n=0),r=10*t,a=10*n,"deltaY"in e&&(a=e.deltaY),"deltaX"in e&&(r=e.deltaX),(r||a)&&e.deltaMode&&(1===e.deltaMode?(r*=40,a*=40):(r*=800,a*=800)),r&&!t&&(t=r<1?-1:1),a&&!n&&(n=a<1?-1:1),{spinX:t,spinY:n,pixelX:r,pixelY:a}},obj:Ho,proxy:function(e,t){as(e,t);var n=e.delete;t.proxyId="".concat(is++),t.ui=JSON.parse(JSON.stringify(t.ui||[])),qo(e,t,["proxyId","proxyGroup","proxyName"]),Zo(e,t,["proxyManager"]);var r={},a={};function o(e,t){a[t]||(a[t]=[]);for(var n=a[t],i=0;i0&&void 0!==arguments[0]?arguments[0]:os;return a[e]}function u(){for(var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:os,r=[],a=t.proxyId,i=s(n)||[],o=0;o1&&void 0!==arguments[1]&&arguments[1];if(t.propertyLinkMap[e])return t.propertyLinkMap[e];var r=null,a=[],o=0,s=!1;function u(n){var u=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(s)return null;var l=[],c=null;for(o=a.length;o--;){var d=a[o];d.instance===n?c=d:l.push(d)}if(!c)return null;var f=c.instance["get".concat(Bo(c.propertyName))]();if(!Vo(f,r)||u){for(r=f,s=!0;l.length;){var v=l.pop();v.instance.set((0,i.Z)({},v.propertyName,r))}s=!1}return t.propertyLinkMap[e].persistent&&(t.propertyLinkMap[e].value=f),f}function l(e,t){var n=[];for(o=a.length;o--;){var r=a[o];r.instance!==e||r.propertyName!==t&&void 0!==t||(r.subscription.unsubscribe(),n.push(o))}for(;n.length;)a.splice(n.pop(),1)}function c(n,r){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2],s=n.onModified(u),c=a[0];return a.push({instance:n,propertyName:r,subscription:s}),o&&(t.propertyLinkMap[e].persistent&&void 0!==t.propertyLinkMap[e].value?n.set((0,i.Z)({},r,t.propertyLinkMap[e].value)):c&&u(c.instance,!0)),{unsubscribe:function(){return l(n,r)}}}function d(){for(;a.length;)a.pop().subscription.unsubscribe()}var f={bind:c,unbind:l,unsubscribe:d,persistent:n};return t.propertyLinkMap[e]=f,f},e.listPropertyNames=function(){return u().map((function(e){return e.name}))},e.getPropertyByName=function(e){return u().find((function(t){return t.name===e}))},e.getPropertyDomainByName=function(e){return(r[e]||{}).domain},e.getProxySection=function(){return{id:t.proxyId,name:t.proxyGroup,ui:t.ui,properties:u()}},e.delete=function(){for(var r=Object.keys(t.propertyLinkMap),a=r.length;a--;)t.propertyLinkMap[r[a]].unsubscribe();Object.keys(t.propertyLinkSubscribers).forEach(e.gcPropertyLinks),n()},e.getState=function(){return null},Go((function(){if(t.links)for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};function a(e){for(var n=Object.keys(e),r=n.length;r--;){var a=n[r];t[a].set(e[a])}}t.this=e;for(var i=Object.keys(r),o=i.length,s=function(){var s=i[o];t[s]=r[s];var u=n[s];e["set".concat(Bo(s))]=function(n){n!==t[s]&&(t[s]=n,a(u[n]),e.modified())}};o--;)s();i.length&&qo(e,t,i)},safeArrays:Uo,set:Yo,setArray:Xo,setGet:Zo,setGetArray:$o,setImmediate:Go,setLoggerFunction:function(e,t){Oo[e]&&(Oo[e]=t||Mo)},throttle:function(e,t){var n=!1,r=null;function a(){n=!1,null!==r&&(i.apply(void 0,(0,o.Z)(r)),r=null)}function i(){for(var i=arguments.length,o=new Array(i),s=0;s2&&void 0!==arguments[2]?arguments[2]:[],a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];if(rs(t)){if(a.indexOf(t)>=0)return r;a.push(t);var i=n(t);void 0!==i&&r.push(i);var o=t.get();Object.keys(o).forEach((function(t){var i=o[t];Array.isArray(i)?i.forEach((function(t){e(t,n,r,a)})):e(i,n,r,a)}))}return r},TYPED_ARRAYS:Lo,uncapitalize:function(e){return e.charAt(0).toLowerCase()+e.slice(1)},VOID:Do,vtkDebugMacro:Po,vtkErrorMacro:To,vtkInfoMacro:function(){Oo.info.apply(Oo,arguments)},vtkLogMacro:function(){Oo.log.apply(Oo,arguments)},vtkOnceErrorMacro:function(e){Ro[e]||(Oo.error(e),Ro[e]=!0)},vtkWarningMacro:xo}},88095:function(e,t,n){"use strict";n.d(t,{I:function(){return s},Z:function(){return l}});var r=n(36655),a=n(47169),i=n(61651);function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}var s=n.n(i)()(),u={vtkObject:function(){return null}};function l(e){if(null==e)return e;if(e.isA)return e;if(!e.vtkClass)return s.console&&s.console.error&&s.console.error("Invalid VTK object"),null;var t=u[e.vtkClass];if(!t)return s.console&&s.console.error&&s.console.error("No vtk class found for Object of type ".concat(e.vtkClass)),null;var n=function(e){for(var t=1;t0)&&!(r=i.next()).done;)o.push(r.value)}catch(e){a={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(a)throw a.error}}return o};Object.defineProperty(t,"__esModule",{value:!0});var o=n(32735),s=n(37725),u={immediate:!1};t.useMachine=function(e,t){void 0===t&&(t=u);var n=t.context,l=t.guards,c=t.actions,d=t.activities,f=t.services,v=t.delays,m=t.immediate,p=t.state,h=a(t,["context","guards","actions","activities","services","delays","immediate","state"]),g={context:n,guards:l,actions:c,activities:d,services:f,delays:v},A=o.useRef(null);null===A.current&&(A.current=e.withConfig(g,r(r({},e.context),n)));var y=o.useRef(null);null===y.current&&(y.current=s.interpret(A.current,h).onTransition((function(e){e.changed&&E(e)})));var S=y.current;o.useEffect((function(){Object.assign(S.machine.options.actions,c)}),[c]),o.useEffect((function(){Object.assign(S.machine.options.services,f)}),[f]);var b=p?s.State.create(p):S.initialState,w=i(o.useState((function(){return b})),2),I=w[0],E=w[1];return m&&S.start(),o.useEffect((function(){return S.start(p?b:void 0),function(){S.stop()}}),[]),[I,S.send,S]},t.useService=function(e){var t=i(o.useState(e.state),2),n=t[0],r=t[1];return o.useEffect((function(){r(e.state);var t=e.subscribe((function(e){e.changed&&r(e)}));return function(){t.unsubscribe()}}),[e]),[n,e.send,e]};var l=n(73509);t.useActor=l.useActor},73509:function(e,t,n){"use strict";var r=this&&this.__read||function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,a,i=n.call(e),o=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)o.push(r.value)}catch(e){a={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(a)throw a.error}}return o};Object.defineProperty(t,"__esModule",{value:!0});var a=n(32735);t.useActor=function(e){var t=r(a.useState(void 0),2),n=t[0],i=t[1],o=a.useRef(e);return a.useEffect((function(){if(e){o.current=e;var t=e.subscribe(i);return function(){t.unsubscribe()}}}),[e]),[n,o.current?o.current.send:function(){}]}},64790:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function e(t){if("string"==typeof t)return t;if("function"==typeof t)return t.displayName||(0,a.default)(t);if((0,i.isForwardRef)({type:t,$$typeof:i.Element}))return t.displayName;if((0,i.isMemo)(t))return e(t.type);return null};var r,a=(r=n(61706))&&r.__esModule?r:{default:r},i=n(72594)},80222:function(e,t,n){"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var a=((r=n(45787))&&r.__esModule?r:{default:r}).default;t.default=a},21312:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return(0,a.default)(e.bind(),{typeName:t,typeChecker:n,isRequired:(0,a.default)(e.isRequired.bind(),{typeName:t,typeChecker:n,typeRequired:!0})})};var r,a=(r=n(51138))&&r.__esModule?r:{default:r}},48833:function(e){"use strict";function t(){return null}function n(){return t}t.isRequired=t,e.exports={and:n,between:n,booleanSome:n,childrenHavePropXorChildren:n,childrenOf:n,childrenOfType:n,childrenSequenceOf:n,componentWithName:n,disallowedIf:n,elementType:n,empty:n,explicitNull:n,forbidExtraProps:Object,integer:n,keysOf:n,mutuallyExclusiveProps:n,mutuallyExclusiveTrueProps:n,nChildren:n,nonNegativeInteger:t,nonNegativeNumber:n,numericString:n,object:n,or:n,predicate:n,range:n,ref:n,requiredBy:n,restrictedProp:n,sequenceOf:n,shape:n,stringEndsWith:n,stringStartsWith:n,uniqueArray:n,uniqueArrayOf:n,valuesOf:n,withShape:n}},32522:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=n(32735),a=o(n(80222)),i=o(n(21312));function o(e){return e&&e.__esModule?e:{default:e}}var s=Object.prototype.isPrototypeOf;function u(e,t,n){var i,o=e[t];return!("function"!=typeof(i=o)||s.call(r.Component,i)||r.PureComponent&&s.call(r.PureComponent,i))||function(e){if(!(0,a.default)(e))return!1;var t=Object.keys(e);return 1===t.length&&"current"===t[0]}(o)?null:new TypeError("".concat(t," in ").concat(n," must be a ref"))}function l(e,t,n){var r=e[t];if(null==r)return null;for(var a=arguments.length,i=new Array(a>3?a-3:0),o=3;o0&&void 0!==arguments[0]&&(n=o(arguments[0]));var l=r(e,0);return a(l,e,t,0,n),l}},14141:function(e,t,n){"use strict";var r=n(26506),a=n(73235),i=n(52361),o=n(90010),s=o(),u=n(1009),l=a(s);r(l,{getPolyfill:o,implementation:i,shim:u}),e.exports=l},90010:function(e,t,n){"use strict";var r=n(52361);e.exports=function(){return Array.prototype.flat||r}},1009:function(e,t,n){"use strict";var r=n(26506),a=n(37687),i=n(90010);e.exports=function(){var e=i();return r(Array.prototype,{flat:e},{flat:function(){return Array.prototype.flat!==e}}),a("flat"),e}},97079:function(e,t){"use strict";t.Z=function(e,t){if(e&&t){var n=Array.isArray(t)?t:t.split(","),r=e.name||"",a=(e.type||"").toLowerCase(),i=a.replace(/\/.*$/,"");return n.some((function(e){var t=e.trim().toLowerCase();return"."===t.charAt(0)?r.toLowerCase().endsWith(t):t.endsWith("/*")?i===t.replace(/\/.*$/,""):a===t}))}return!0}},28943:function(){function e(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function t(e,t){for(var n=0;n\n".concat(l.default,"\n\n").concat(u.default,"\n");var v="autofocus",m="disabled",p=function(t){r(o,t);var i=a(o);function o(){var t;return e(this,o),(t=i.call(this))._disabled=!1,t._internals=t.attachInternals(),t.attachShadow({mode:"open",delegatesFocus:!0}).appendChild(Object(d.cloneTemplate)(f)),t._buttonEl=t.shadowRoot.querySelector('[part="button"]'),t._errorMessageEl=t.shadowRoot.querySelector('[part="error-message"]'),t._buttonElObserver=new MutationObserver((function(e){e.forEach((function(e){if(e.target===t._buttonEl&&"attributes"===e.type){var n=e.attributeName;if(o.observedAttributes.includes(n)){var r=t.getAttribute(n),a=t._buttonEl.getAttribute(n);r!==a&&t.setAttribute(n,a)}}}))})),t}return n(o,[{key:"connectedCallback",value:function(){var e=this;this._buttonElObserver.observe(this._buttonEl,{attributes:!0}),o.observedAttributes.forEach((function(t){var n=t;if(e.hasOwnProperty(n)){var r=e[n];delete e[n],e[n]=r}}))}},{key:"disconnectedCallback",value:function(){this._buttonElObserver.disconnect()}},{key:"attributeChangedCallback",value:function(e,t,n){switch(e){case v:this._buttonEl.setAttribute(e,n);break;case m:this.disabled=null!==n}}},{key:"formAssociatedCallback",value:function(e){}},{key:"formDisabledCallback",value:function(e){this.disabled=e}},{key:"formResetCallback",value:function(){}},{key:"formStateRestoreCallback",value:function(e,t){}},{key:"form",get:function(){return this._internals.form}},{key:"labels",get:function(){return this.ownerDocument.querySelectorAll('label[for="'.concat(this.id,'"]'))}},{key:"validationMessage",get:function(){return this._buttonEl.validationMessage}},{key:"validity",get:function(){return this._buttonEl.validity}},{key:"willValidate",get:function(){return this._buttonEl.willValidate}},{key:"disabled",get:function(){return this._disabled},set:function(e){var t=!!e;t!==this._disabled&&(this._disabled=t,this._buttonEl.disabled=t,this.toggleAttribute(m,t))}},{key:"name",get:function(){return this._buttonEl.name},set:function(e){this._buttonEl.name=e}},{key:"checkValidity",value:function(){var e=this._buttonEl.checkValidity();return Object(c.toggleElementState)(this,c.PSEUDO_INVALID,!this.validity.valid),this._errorMessageEl.textContent=this.validationMessage,e}},{key:"reportValidity",value:function(){return this._buttonEl.reportValidity()}},{key:"setCustomValidity",value:function(e){this._buttonEl.setCustomValidity(e),this.checkValidity()}}],[{key:"formAssociated",get:function(){return!0}},{key:"observedAttributes",get:function(){return[v,m,"name"]}}]),o}(o(HTMLElement))},"./src/components/rapid-checkbox-group/rapid-checkbox-group.html":function(e,t,n){"use strict";n.r(t),t.default='
'},"./src/components/rapid-checkbox-group/rapid-checkbox-group.scss":function(e,t,n){"use strict";n.r(t),t.default=":host {\n min-width: 100px;\n min-height: 25px;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n padding: 16px;\n outline-style: none;\n}\n\n:host(:disabled) {\n color: var(--rapid-theme-color-tertiary, --rapid-color-gray-600);\n}\n\n:host([hidden]) {\n display: none;\n}\n\ndiv.group {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n}\n\nrapid-checkbox {\n margin-top: 5px;\n margin-bottom: 5px;\n}\nrapid-checkbox:first-of-type {\n margin-top: 0;\n}\nrapid-checkbox:last-of-type {\n margin-bottom: 0;\n}\n\n:host(:disabled) {\n color: var(--rapid-theme-color-tertiary, currentColor);\n}"},"./src/components/rapid-checkbox-group/rapid-checkbox-group.ts":function(t,i,s){"use strict";s.r(i),s.d(i,"RapidCheckboxGroupElement",(function(){return h}));var u=s("./src/utils/fix_webkit_bug216985.ts"),l=s("./src/utils/multipe-values.ts"),c=s("./src/components/rapid-checkbox-group/rapid-checkbox-group.html"),d=s("./src/components/rapid-checkbox-group/rapid-checkbox-group.scss"),f=document.createElement("template");f.innerHTML="\n\n").concat(c.default,"\n");var v="disabled",m="readonly",p="value",h=function(t){r(o,t);var i=a(o);function o(){var t;return e(this,o),(t=i.call(this))._value="",t._checkboxEls=[],t._updateValue=function(e){var n=t._checkboxEls.filter((function(e){return e.checked})).map((function(e){return e.dataset.value}));t.value=Object(l.serializeValues)(n)},t.attachShadow({mode:"open",delegatesFocus:!0}).appendChild(Object(u.cloneTemplate)(f)),t._optionElsObserver=new MutationObserver((function(){return t._updateOptions()})),t}return n(o,[{key:"connectedCallback",value:function(){var e=this;this._updateOptions(),this._optionElsObserver.observe(this,{subtree:!0,childList:!0,attributes:!0,attributeFilter:["value"],characterData:!0}),this.shadowRoot.addEventListener("change",this._updateValue),o.observedAttributes.forEach((function(t){var n=t;if(e.hasOwnProperty(n)){var r=e[n];delete e[n],e[n]=r}}))}},{key:"disconnectedCallback",value:function(){this._optionElsObserver.disconnect(),this.shadowRoot.removeEventListener("change",this._updateValue)}},{key:"adoptedCallback",value:function(){}},{key:"attributeChangedCallback",value:function(e,t,n){switch(e){case v:this._checkboxEls.forEach((function(e){return e.disabled=null!==n}));break;case m:this._checkboxEls.forEach((function(e){return e.readOnly=null!==n}));break;case p:this.value=n}}},{key:"disabled",get:function(){return this.hasAttribute(v)},set:function(e){this.toggleAttribute(v,e)}},{key:"readOnly",get:function(){return this.hasAttribute(m)},set:function(e){this.toggleAttribute(m,e)}},{key:"value",get:function(){return this._value},set:function(e){e=e||"";var t=this._value!==e;this._value=e;var n=Object(l.parseValues)(e);this._checkboxEls.forEach((function(e){var t=e.dataset.value;e.checked=n.includes(t)})),Array.from(this.querySelectorAll("option")).forEach((function(e){e.selected=n.includes(e.value)})),!t||this.disabled||this.readOnly||this.dispatchEvent(new Event("change",{bubbles:!0,cancelable:!1,composed:!1}))}},{key:"_updateOptions",value:function(){var e=this;Array.from(this.shadowRoot.querySelectorAll("rapid-checkbox")).forEach((function(e){e.remove()})),Array.from(this.querySelectorAll("option")).forEach((function(t){var n=e.ownerDocument.createElement("rapid-checkbox");n.dataset.value=t.value,n.disabled=e.disabled,n.readOnly=e.readOnly,n.textContent=t.textContent,e.shadowRoot.appendChild(n)})),this._checkboxEls=Array.from(this.shadowRoot.querySelectorAll("rapid-checkbox")),this.value=this._value}}],[{key:"observedAttributes",get:function(){return[v,m,p]}}]),o}(o(HTMLElement))},"./src/components/rapid-checkbox/rapid-checkbox.html":function(e,t,n){"use strict";n.r(t),t.default=''},"./src/components/rapid-checkbox/rapid-checkbox.scss":function(e,t,n){"use strict";n.r(t),t.default=":host {\n display: inline-block;\n outline-style: none;\n user-select: none;\n}\n\n:host([hidden]) {\n display: none;\n}\n\nlabel {\n display: inline-flex;\n flex-direction: row;\n align-items: center;\n}\n\nbutton {\n margin: 0;\n border-style: none;\n padding: 0;\n vertical-align: bottom;\n border-style: solid;\n border-width: 1px;\n border-color: var(--rapid-color-gray-600);\n border-radius: 3px;\n color: inherit;\n background-color: inherit;\n}\nbutton:enabled {\n cursor: pointer;\n}\nbutton:disabled {\n border-color: var(--rapid-color-gray-750);\n}\nbutton:focus {\n outline-style: solid;\n outline-width: 1px;\n}\n\nrapid-icon {\n width: 24px;\n height: 24px;\n visibility: hidden;\n}\n\nslot[_has_content] {\n display: inline-block;\n padding-left: 10px;\n}\n\n:host([_rapid-checked]) rapid-icon {\n visibility: visible;\n}\n\n:host([_rapid-disabled]) {\n color: var(--rapid-color-gray-600);\n}"},"./src/components/rapid-checkbox/rapid-checkbox.ts":function(t,i,s){"use strict";s.r(i),s.d(i,"RapidCheckboxElement",(function(){return h}));var u=s("./src/components/rapid-checkbox/rapid-checkbox.html"),l=s("./src/components/rapid-checkbox/rapid-checkbox.scss"),c=s("./src/utils/element-state.ts"),d=s("./src/utils/fix_webkit_bug216985.ts"),f=document.createElement("template");f.innerHTML="\n\n").concat(u.default,"\n");var v="checked",m="disabled",p="readonly",h=function(t){r(o,t);var i=a(o);function o(){var t;return e(this,o),(t=i.call(this))._checked=!1,t._toggleCheckedState=function(e){t.disabled||t.readOnly||(t.checked=!t.checked)},t._toggleSlotState=function(e){var n=t._slotEl.assignedNodes();t._slotEl.toggleAttribute("_has_content",n.length>0)},t.attachShadow({mode:"open",delegatesFocus:!0}).appendChild(Object(d.cloneTemplate)(f)),t._buttonEl=t.shadowRoot.querySelector("button"),t._slotEl=t.shadowRoot.querySelector("slot"),t}return n(o,[{key:"connectedCallback",value:function(){var e=this;this._buttonEl.addEventListener("click",this._toggleCheckedState),this._slotEl.addEventListener("slotchange",this._toggleSlotState),o.observedAttributes.forEach((function(t){var n=t;if(e.hasOwnProperty(n)){var r=e[n];delete e[n],e[n]=r}}))}},{key:"disconnectedCallback",value:function(){this._buttonEl.removeEventListener("click",this._toggleCheckedState),this._slotEl.removeEventListener("slotchange",this._toggleSlotState)}},{key:"attributeChangedCallback",value:function(e,t,n){switch(e){case v:this.checked=null!==n;break;case m:Object(c.toggleElementState)(this,c.PSEUDO_DISABLED,null!==n),this._buttonEl.toggleAttribute(m,null!==n);break;case p:this.readOnly=null!==n,Object(c.toggleElementState)(this,c.PSEUDO_READONLY,null!==n)}}},{key:"checked",get:function(){return this._checked},set:function(e){var t=this._checked!==e;this._checked=e,Object(c.toggleElementState)(this,c.PSEUDO_CHECKED,this._checked),!t||this.disabled||this.readOnly||this.dispatchEvent(new Event("change",{bubbles:!0,cancelable:!1,composed:!1}))}},{key:"disabled",get:function(){return this.hasAttribute(m)},set:function(e){this.toggleAttribute(m,e)}},{key:"readOnly",get:function(){return this.hasAttribute(p)},set:function(e){this.toggleAttribute(p,e)}}],[{key:"observedAttributes",get:function(){return[v,m,p]}}]),o}(o(HTMLElement))},"./src/components/rapid-form-field/rapid-form-field.html":function(e,t,n){"use strict";n.r(t),t.default='\n\n
\n'},"./src/components/rapid-form-field/rapid-form-field.scss":function(e,t,n){"use strict";n.r(t),t.default=":host {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: stretch;\n position: relative;\n}\n\n:host([hidden]) {\n display: none;\n}\n\n[part=label] {\n padding: var(--rapid-form-field-padding, 16px);\n overflow-wrap: anywhere;\n word-break: break-word;\n}\n[part=label]:empty {\n display: none;\n}\n\n[part=control] {\n display: flex;\n flex-direction: row;\n justify-content: stretch;\n}\n[part=control] > *::part(error-message) {\n display: none;\n}\n\n::slotted(*) {\n flex-grow: 1;\n flex-shrink: 1;\n}\n\n[part=error-message] {\n max-width: fit-content;\n display: none;\n margin: 5px 0;\n color: var(--rapid-theme-color-negative, --rapid-color-red);\n}\n\n:host([_rapid-invalid]) [part=error-message]:not(:empty),\n:host(:invalid) [part=error-message]:not(:empty) {\n display: block;\n}"},"./src/components/rapid-form-field/rapid-form-field.ts":function(t,i,s){"use strict";s.r(i),s.d(i,"RapidFormFieldElement",(function(){return m}));var u=s("./src/utils/element-state.ts"),l=s("./src/utils/fix_webkit_bug216985.ts"),c=s("./src/components/rapid-form-field/rapid-form-field.html"),d=s("./src/components/rapid-form-field/rapid-form-field.scss"),f=document.createElement("template");f.innerHTML="\n\n").concat(c.default,"\n");var v="label",m=function(t){r(o,t);var i=a(o);function o(){var t;return e(this,o),(t=i.call(this))._focusControl=function(){var e=t.control;e&&e.focus()},t.attachShadow({mode:"open"}).appendChild(Object(l.cloneTemplate)(f)),t._labelEl=t.shadowRoot.querySelector('[part="label"]'),t._controlEl=t.shadowRoot.querySelector('[part="control"]'),t._controlObserver=new MutationObserver((function(){return t._syncPseudoAttributes()})),t._errorMessageEl=t.shadowRoot.querySelector('[part="error-message"]'),t}return n(o,[{key:"connectedCallback",value:function(){var e=this;this._addControlListeners(),this._syncPseudoAttributes(),this._controlObserver.observe(this,{childList:!0,subtree:!0,attributes:!0,attributeFilter:o._pseudoAttrsToSync}),this._labelEl.addEventListener("click",this._focusControl),o.observedAttributes.forEach((function(t){var n=t;if(e.hasOwnProperty(n)){var r=e[n];delete e[n],e[n]=r}}))}},{key:"disconnectedCallback",value:function(){this._controlObserver.disconnect(),this._labelEl.removeEventListener("click",this._focusControl)}},{key:"attributeChangedCallback",value:function(e,t,n){if(e===v)this._labelEl.textContent=n}},{key:"control",get:function(){return this._controlEl.assignedElements().filter((function(e){return e instanceof HTMLElement})).map((function(e){return e})).find((function(e){return e.constructor.formAssociated}))}},{key:"form",get:function(){var e=null,t=this.control;return t&&(e=t.form),e}},{key:"label",get:function(){return this.getAttribute(v)},set:function(e){e?this.setAttribute(v,e):this.removeAttribute(v)}},{key:"validationMessage",get:function(){var e;return(null===(e=this._controlEl.assignedElements().find((function(e){return e.validationMessage})))||void 0===e?void 0:e.validationMessage)||""}},{key:"_syncPseudoAttributes",value:function(){var e=this;this.control&&o._pseudoAttrsToSync.forEach((function(t){var n=e._controlEl.assignedElements().some((function(e){return e.hasAttribute(t)}));Object(u.toggleElementState)(e,t,n),e._errorMessageEl.textContent=e.validationMessage}))}},{key:"_addControlListeners",value:function(){var e=this;this._controlEl.addEventListener("slotchange",(function(t){e._errorMessageEl.textContent=e.validationMessage}))}}],[{key:"observedAttributes",get:function(){return[v]}}]),o}(o(HTMLElement));m._pseudoAttrsToSync=[u.PSEUDO_INVALID,u.PSEUDO_READONLY]},"./src/components/rapid-form-fieldset/rapid-form-fieldset.html":function(e,t,n){"use strict";n.r(t),t.default='
\n \n
\n \n
\n
\n'},"./src/components/rapid-form-fieldset/rapid-form-fieldset.scss":function(e,t,n){"use strict";n.r(t),t.default=":host {\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: stretch;\n margin: 12px 0;\n}\n\n:host([hidden]) {\n display: none;\n}\n\n[part=fieldset] {\n margin: 0;\n border-style: none;\n padding: 0;\n}\n\n[part=legend] {\n margin: 15px 16px;\n}\n[part=legend]:empty {\n display: none;\n}\n\n[part=content] {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n}"},"./src/components/rapid-form-fieldset/rapid-form-fieldset.ts":function(t,i,s){"use strict";s.r(i),s.d(i,"RapidFormFieldsetElement",(function(){return y}));var u=s("./src/utils/html-collection.ts"),l=s("./src/utils/element-state.ts"),c=s("./src/utils/fix_webkit_bug216985.ts"),d=s("./src/components/rapid-form-fieldset/rapid-form-fieldset.html"),f=s("./src/components/rapid-form-fieldset/rapid-form-fieldset.scss"),v=s("./src/components/rapid-input-datetime-field/rapid-input-datetime-field.ts"),m=s("./src/components/rapid-form-field/rapid-form-field.ts"),p=document.createElement("template");p.innerHTML="\n\n").concat(d.default,"\n");var h="disabled",g="legend",A="name",y=function(t){r(o,t);var i=a(o);function o(){var t;return e(this,o),(t=i.call(this))._internals=t.attachInternals(),t.attachShadow({mode:"open"}).appendChild(Object(c.cloneTemplate)(p)),t._fieldsetEl=t.shadowRoot.querySelector("fieldset"),t._legendEl=t.shadowRoot.querySelector("legend"),t._slotEl=t.shadowRoot.querySelector("slot"),t._fieldObserver=new MutationObserver((function(e){t._syncPseudoAttributes(),e.forEach((function(e){"childList"===e.type&&e.addedNodes.forEach((function(e){if(e.nodeType===Node.ELEMENT_NODE){var n=e;if(n.constructor.formAssociated){var r=n;r.disabled!==t.disabled&&r.formDisabledCallback(t.disabled)}}}))}))})),t}return n(o,[{key:"connectedCallback",value:function(){var e=this;this._syncPseudoAttributes(),this._fieldObserver.observe(this,{childList:!0,subtree:!0,attributes:!0,attributeFilter:o._pseudoAttrsToSync}),v.RapidInputDateTimeFieldElement.observedAttributes.forEach((function(t){var n=t;if(e.hasOwnProperty(n)){var r=e[n];delete e[n],e[n]=r}}))}},{key:"disconnectedCallback",value:function(){this._fieldObserver.disconnect()}},{key:"attributeChangedCallback",value:function(e,t,n){switch(e){case h:this._fieldsetEl.setAttribute(e,n);var r=null!==n;Array.from(this.elements).forEach((function(e){if(e.constructor.formAssociated){var t=e;t.disabled!==r&&t.formDisabledCallback(r)}}));break;case g:this._legendEl.textContent=n}}},{key:"disabled",get:function(){return this.hasAttribute(h)},set:function(e){this.toggleAttribute(h,e)}},{key:"legend",get:function(){return this.getAttribute(g)},set:function(e){e?this.setAttribute(g,e):this.removeAttribute(g)}},{key:"name",get:function(){return this.getAttribute(A)},set:function(e){e?this.setAttribute(A,e):this.removeAttribute(A)}},{key:"type",get:function(){return"fieldset"}},{key:"elements",get:function(){var e=this._slotEl.assignedElements().reduce((function(e,t){return t instanceof m.RapidFormFieldElement&&t.control&&e.push(t.control),e}),[]);return new u.RapidHTMLCollection(e)}},{key:"form",get:function(){return this._internals.form}},{key:"validationMessage",get:function(){return this._internals.validationMessage}},{key:"validity",get:function(){return this._internals.validity}},{key:"willValidate",get:function(){return this._internals.willValidate}},{key:"checkValidity",value:function(){return this._internals.checkValidity()}},{key:"reportValidity",value:function(){return this._internals.reportValidity()}},{key:"setCustomValidity",value:function(e){this._internals.setValidity({customError:!!e},e),this.checkValidity()}},{key:"_syncPseudoAttributes",value:function(){var e=this,t=Array.from(this.elements);o._pseudoAttrsToSync.forEach((function(n){var r=t.every((function(e){return e.hasAttribute(n)}));Object(l.toggleElementState)(e,n,r)}))}}],[{key:"formAssociated",get:function(){return!0}},{key:"observedAttributes",get:function(){return[h,g]}}]),o}(o(HTMLElement));y._pseudoAttrsToSync=[l.PSEUDO_READONLY]},"./src/components/rapid-icon-button/rapid-icon-button.html":function(e,t,n){"use strict";n.r(t),t.default='\n'},"./src/components/rapid-icon-button/rapid-icon-button.scss":function(e,t,n){"use strict";n.r(t),t.default=":host {\n display: inline-block;\n}\n\n:host([hidden]) {\n display: none;\n}\n\n[part=button] {\n display: inline-flex;\n align-items: center;\n background-color: transparent;\n margin: 0;\n border-style: none;\n padding: 0;\n vertical-align: bottom;\n color: inherit;\n font: inherit;\n text-align: inherit;\n}\n[part=button]:enabled {\n cursor: pointer;\n}\n[part=button]:focus {\n outline-style: none;\n}\n[part=button]:disabled {\n color: var(--rapid-theme-color-tertiary, currentColor);\n}\n\n[part=icon] {\n display: inline-flex;\n}"},"./src/components/rapid-icon-button/rapid-icon-button.ts":function(t,i,s){"use strict";s.r(i),s.d(i,"RapidIconButtonElement",(function(){return m}));var u=s("./src/utils/fix_webkit_bug216985.ts"),l=s("./src/components/rapid-icon-button/rapid-icon-button.html"),c=s("./src/components/rapid-icon-button/rapid-icon-button.scss"),d=document.createElement("template");d.innerHTML="\n\n").concat(l.default,"\n");var f="disabled",v="icon",m=function(t){r(o,t);var i=a(o);function o(){var t;return e(this,o),(t=i.call(this))._preventClickEventWhenDisabled=function(e){t.disabled&&e.stopImmediatePropagation()},t.attachShadow({mode:"open"}).appendChild(Object(u.cloneTemplate)(d)),t._buttonEl=t.shadowRoot.querySelector('[part="button"]'),t.addEventListener("click",t._preventClickEventWhenDisabled),t}return n(o,[{key:"connectedCallback",value:function(){var e=this;o.observedAttributes.forEach((function(t){var n=t;if(e.hasOwnProperty(n)){var r=e[n];delete e[n],e[n]=r}}))}},{key:"disconnectedCallback",value:function(){}},{key:"adoptedCallback",value:function(){}},{key:"attributeChangedCallback",value:function(e,t,n){switch(e){case f:this._buttonEl.disabled=null!==n;break;case v:this.shadowRoot.querySelector("rapid-icon").name=n}}},{key:"disabled",get:function(){return this.hasAttribute(f)},set:function(e){this.toggleAttribute(f,e)}},{key:"icon",get:function(){return this.getAttribute(v)},set:function(e){e?this.setAttribute(v,e):this.removeAttribute(v)}}],[{key:"observedAttributes",get:function(){return[f,v]}}]),o}(o(HTMLElement))},"./src/components/rapid-icon/rapid-icon.html":function(e,t,n){"use strict";n.r(t),t.default=""},"./src/components/rapid-icon/rapid-icon.scss":function(e,t,n){"use strict";n.r(t),t.default=":host {\n display: inline-block;\n contain: content;\n vertical-align: bottom;\n}\n:host[hidden] {\n display: none;\n}\n\nsvg {\n width: 100%;\n height: 100%;\n fill: currentColor;\n stroke: currentColor;\n stroke-width: 0;\n}"},"./src/components/rapid-icon/rapid-icon.ts":function(t,i,s){"use strict";s.r(i),s.d(i,"RapidIconElement",(function(){return m}));var u=s("./src/utils/fix_webkit_bug216985.ts"),l=s("./src/components/rapid-icon/rapid-icon.html"),c=s("./src/components/rapid-icon/rapid-icon.scss"),d=s("./src/icons/index.ts"),f=document.createElement("template");f.innerHTML="\n\n").concat(l.default,"\n");var v="name",m=function(t){r(o,t);var i=a(o);function o(){var t;return e(this,o),(t=i.call(this)).attachShadow({mode:"open"}).appendChild(Object(u.cloneTemplate)(f)),t}return n(o,[{key:"connectedCallback",value:function(){var e=this;o.observedAttributes.forEach((function(t){e._upgradeProperty(t)}))}},{key:"disconnectedCallback",value:function(){}},{key:"_upgradeProperty",value:function(e){if(this.hasOwnProperty(e)){var t=this[e];delete this[e],this[e]=t}}},{key:"attributeChangedCallback",value:function(e,t,n){if(e===v){var r=d.icons[n];if(r){var a=document.createElement("template");a.innerHTML=r;var i=this.shadowRoot.querySelector("svg");i&&i.parentNode.replaceChild(a.content,i)}}}},{key:"name",get:function(){return this.getAttribute(v)},set:function(e){e?this.setAttribute(v,e):this.removeAttribute(v)}}],[{key:"observedAttributes",get:function(){return[v]}}]),o}(o(HTMLElement))},"./src/components/rapid-input-checkbox/rapid-input-checkbox.html":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n
\n
\n'},"./src/components/rapid-input-checkbox/rapid-input-checkbox.scss":function(e,t,n){"use strict";n.r(t),t.default=":host {\n width: 100px;\n min-height: 25px;\n display: inline-flex;\n flex-direction: column;\n align-items: stretch;\n outline-style: none;\n outline-offset: -1px;\n}\n\n:host(:disabled) {\n color: var(--rapid-theme-color-tertiary, --rapid-color-gray-600);\n}\n\n:host([hidden]) {\n display: none;\n}\n\n[part=checkbox] {\n flex-grow: 1;\n height: 22px;\n outline-style: none;\n padding: var(--rapid-input-checkbox-padding, 16px);\n vertical-align: bottom;\n color: currentColor;\n background-color: inherit;\n font: inherit;\n text-align: inherit;\n text-overflow: ellipsis;\n}\n\n[part=tooltip] {\n max-width: fit-content;\n display: none;\n margin: 5px 0;\n}\n\n:host(:focus-within:not([_rapid-invalid])) [part=tooltip]:not(:empty) {\n display: block;\n}\n\n[part=error-message] {\n max-width: fit-content;\n display: none;\n margin: 5px 0;\n color: var(--rapid-theme-color-negative, --rapid-color-red);\n}\n\n:host([_rapid-invalid]) [part=error-message]:not(:empty),\n:host(:invalid) [part=error-message]:not(:empty) {\n display: block;\n}"},"./src/components/rapid-input-checkbox/rapid-input-checkbox.ts":function(t,i,s){"use strict";s.r(i),s.d(i,"RapidInputCheckboxElement",(function(){return S}));var u=s("./src/utils/element-state.ts"),l=s("./src/utils/fix_webkit_bug216985.ts"),c=s("./src/components/rapid-input-checkbox/rapid-input-checkbox.html"),d=s("./src/components/rapid-input-checkbox/rapid-input-checkbox.scss"),f=document.createElement("template");f.innerHTML="\n\n").concat(c.default,"\n");var v="checked",m="disabled",p="name",h="readonly",g="tooltip",A="value",y="change",S=function(t){r(o,t);var i=a(o);function o(){var t;return e(this,o),(t=i.call(this))._checked=!1,t._disabled=!1,t._name="",t._readOnly=!1,t._tooltip="",t._value="on",t._updateInternals=function(e){t.checked=t._checkboxEl.checked},t._internals=t.attachInternals(),t.attachShadow({mode:"open",delegatesFocus:!0}).appendChild(Object(l.cloneTemplate)(f)),t._checkboxEl=t.shadowRoot.querySelector('[part="checkbox"]'),t._tooltipEl=t.shadowRoot.querySelector('[part="tooltip"]'),t._errorMessageEl=t.shadowRoot.querySelector('[part="error-message"]'),t._checkboxEl.addEventListener("change",t._updateInternals),t}return n(o,[{key:"connectedCallback",value:function(){var e=this;o.observedAttributes.forEach((function(t){var n=t;if(e.hasOwnProperty(n)){var r=e[n];delete e[n],e[n]=r}}))}},{key:"disconnectedCallback",value:function(){}},{key:"adoptedCallback",value:function(){}},{key:"attributeChangedCallback",value:function(e,t,n){if(t!==n)switch(e){case v:this.checked=null!==n;break;case m:this.disabled=null!==n;break;case p:this.name=n;break;case h:this.readOnly=null!==n;break;case g:this.tooltip=n;break;case A:this.value=n}}},{key:"formAssociatedCallback",value:function(e){}},{key:"formDisabledCallback",value:function(e){this.disabled=e}},{key:"formResetCallback",value:function(){this.value=this.getAttribute(A)||""}},{key:"formStateRestoreCallback",value:function(e,t){}},{key:"form",get:function(){return this._internals.form}},{key:"labels",get:function(){return this._internals.labels}},{key:"validationMessage",get:function(){return this._internals.validationMessage}},{key:"validity",get:function(){return this._internals.validity}},{key:"willValidate",get:function(){return this._internals.willValidate}},{key:"checked",get:function(){return this._checked},set:function(e){this._checked!==e&&(this._checked=e,(this._checkboxEl.checked=e)&&(this._checkboxEl.checked=e),this._internals.setFormValue(this.checked?this.value:""),this.disabled||this.readOnly||this.dispatchEvent(new Event(y,{bubbles:!0,cancelable:!1,composed:!1})),this.checkValidity())}},{key:"disabled",get:function(){return this._disabled},set:function(e){this._disabled!==e&&(this._disabled=e,this._checkboxEl.disabled=e,this.toggleAttribute(m,e))}},{key:"name",get:function(){return this._name},set:function(e){e="".concat(e),this._name!==e&&(this._name=e,this.setAttribute(p,e))}},{key:"readOnly",get:function(){return this._readOnly},set:function(e){this._readOnly!==e&&(this._readOnly=e,this._checkboxEl.readOnly=e,this.toggleAttribute(h,e),Object(u.toggleElementState)(this,u.PSEUDO_READONLY,e),this.checkValidity())}},{key:"tooltip",get:function(){return this._tooltip},set:function(e){e="".concat(e),this._tooltip!==e&&(this._tooltip=e,this._tooltipEl.textContent=e,this.setAttribute(g,e))}},{key:"value",get:function(){return this._value},set:function(e){e=null!==e?"".concat(e):"",this._value!==e&&(this._value=e,this._internals.setFormValue(this.checked?e:""),this.disabled||this.readOnly||this.dispatchEvent(new Event(y,{bubbles:!0,cancelable:!1,composed:!1})),this.checkValidity())}},{key:"checkValidity",value:function(){var e=this._internals.checkValidity();return Object(u.toggleElementState)(this,u.PSEUDO_INVALID,!this.validity.valid),this._errorMessageEl.textContent=this.validationMessage,e}},{key:"reportValidity",value:function(){return this._internals.reportValidity()}},{key:"setCustomValidity",value:function(e){this._internals.setValidity({customError:!!e},e),this.checkValidity()}}],[{key:"formAssociated",get:function(){return!0}},{key:"observedAttributes",get:function(){return[v,m,h,g,A]}}]),o}(o(HTMLElement))},"./src/components/rapid-input-datetime-field/rapid-input-datetime-field.html":function(e,t,n){"use strict";n.r(t),t.default='
\n \n \n \n \n
\n
\n
\n'},"./src/components/rapid-input-datetime-field/rapid-input-datetime-field.scss":function(e,t,n){"use strict";n.r(t),t.default=":host {\n width: 100px;\n min-height: 25px;\n display: inline-flex;\n flex-direction: column;\n align-items: stretch;\n outline-style: none;\n outline-offset: -1px;\n}\n\n:host(:disabled) {\n color: var(--rapid-theme-color-tertiary, --rapid-color-gray-600);\n}\n\n:host([hidden]) {\n display: none;\n}\n\n.main {\n flex-grow: 1;\n display: flex;\n flex-direction: row;\n justify-content: stretch;\n align-items: stretch;\n position: relative;\n outline-style: none;\n}\n.main.desktop:focus-within {\n outline-style: solid;\n outline-width: 1px;\n outline-color: inherit;\n}\n\n[part=placeholder] {\n flex-grow: 1;\n flex-shrink: 1;\n appearance: none;\n -webkit-appearance: none;\n margin: 0;\n outline-style: none;\n border-style: solid;\n border-width: 1px;\n border-color: var(--rapid-color-gray-600);\n border-radius: inherit;\n padding: var(--rapid-input-datetime-field-padding, 16px);\n overflow-x: hidden;\n color: currentColor;\n background-color: inherit;\n font: inherit;\n text-align: inherit;\n text-overflow: ellipsis;\n}\n[part=placeholder]::placeholder {\n color: var(--rapid-theme-color-tertiary, currentColor);\n}\n\n:host(:focus-within) [part=placeholder],\n:host(:not([_rapid-blank])) [part=placeholder] {\n visibility: hidden;\n}\n\n.desktop [part=placeholder]:enabled:read-write {\n padding-right: calc(12px + 16px + var(--rapid-input-datetime-field-padding, 16px));\n}\n\n[part=icon] {\n display: none;\n position: absolute;\n top: calc(50% - 24px / 2);\n right: var(--rapid-input-datetime-field-padding, 16px);\n width: 24px;\n height: 24px;\n color: currentColor;\n}\n\n.desktop [part=placeholder]:enabled:read-write ~ [part=icon] {\n display: block;\n}\n\n[part=input] {\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n appearance: none;\n -webkit-appearance: none;\n margin: 0;\n outline-style: none;\n border-style: solid;\n border-width: 1px;\n border-color: var(--rapid-color-gray-600);\n border-radius: inherit;\n padding: var(--rapid-input-datetime-field-padding, 16px);\n color: transparent;\n background-color: transparent;\n font: inherit;\n text-align: inherit;\n text-overflow: ellipsis;\n overflow-x: hidden;\n}\n[part=input]::-webkit-calendar-picker-indicator {\n display: none;\n background-image: none;\n outline-style: none;\n}\n[part=input]::-webkit-date-and-time-value {\n margin-right: 0;\n}\n\n:host([_rapid-active]) [part=input],\n:host(:not([_rapid-blank])) [part=input] {\n color: currentColor;\n background-color: inherit;\n}\n\n[part=input]:enabled:read-write::-webkit-calendar-picker-indicator {\n display: unset;\n}\n\n[part=tooltip] {\n max-width: fit-content;\n display: none;\n margin: 5px 0;\n}\n\n:host(:focus-within:not([_rapid-invalid])) [part=tooltip]:not(:empty) {\n display: block;\n}\n\n[part=error-message] {\n max-width: fit-content;\n display: none;\n margin: 5px 0;\n color: var(--rapid-theme-color-negative, --rapid-color-red);\n}\n\n:host([_rapid-invalid]) [part=error-message]:not(:empty),\n:host(:invalid) [part=error-message]:not(:empty) {\n display: block;\n}"},"./src/components/rapid-input-datetime-field/rapid-input-datetime-field.ts":function(t,i,s){"use strict";s.r(i),s.d(i,"RapidInputDateTimeFieldElement",(function(){return I}));var u=s("./src/utils/element-state.ts"),l=s("./src/utils/fix_webkit_bug216985.ts"),c=s("./src/utils/layout-types.ts"),d=s("./src/components/rapid-input-datetime-field/rapid-input-datetime-field.html"),f=s("./src/components/rapid-input-datetime-field/rapid-input-datetime-field.scss"),v=document.createElement("template");v.innerHTML="\n\n").concat(d.default,"\n");var m="disabled",p="max",h="min",g="name",A="placeholder",y="readonly",S="required",b="tooltip",w="value",I=function(t){r(o,t);var i=a(o);function o(){var t;return e(this,o),(t=i.call(this))._disabled=!1,t._max="",t._min="",t._name="",t._placeholder="",t._readOnly=!1,t._required=!1,t._tooltip="",t._value="",t._internals=t.attachInternals(),t.attachShadow({mode:"open",delegatesFocus:!0}).appendChild(Object(l.cloneTemplate)(v)),t._mainDivEl=t.shadowRoot.querySelector(".main"),t._placeholderEl=t.shadowRoot.querySelector('[part="placeholder"]'),t._inputEl=t.shadowRoot.querySelector('[part="input"]'),t._tooltipEl=t.shadowRoot.querySelector('[part="tooltip"]'),t._errorMessageEl=t.shadowRoot.querySelector('[part="error-message"]'),t._inputEl.addEventListener("input",(function(){var e=t._inputEl.value,n=/^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2})/.exec(e);n&&(e=n[1]),t.value=e})),t._inputEl.addEventListener("focus",(function(){return t.showPicker()})),t._inputEl.addEventListener("blur",(function(){return t.hidePicker()})),t.addEventListener("focus",(function(){t._inputEl.click(),t._inputEl.focus()})),t._inputEl.addEventListener("keyup",(function(){return t.checkValidity()})),t._inputEl.addEventListener("blur",(function(){t._inputEl.validity.badInput&&(t._inputEl.value=""),t.checkValidity()})),t._inputEl.step="any",t}return n(o,[{key:"connectedCallback",value:function(){var e=this;Object(u.toggleElementState)(this,u.PSEUDO_BLANK,""===this.value),o.observedAttributes.forEach((function(t){var n=t;if(e.hasOwnProperty(n)){var r=e[n];delete e[n],e[n]=r}})),this.layoutTypeChangeCallback(null,Object(c.getLayoutType)())}},{key:"disconnectedCallback",value:function(){this.layoutTypeChangeCallback(Object(c.getLayoutType)(),null)}},{key:"adoptedCallback",value:function(){}},{key:"attributeChangedCallback",value:function(e,t,n){if(t!==n)switch(e){case m:this.disabled=null!==n;break;case y:this.readOnly=null!==n;break;case S:this.required=null!==n;break;case p:this.max=n;break;case h:this.min=n;break;case g:this.name=n;break;case A:this.placeholder=n;break;case b:this.tooltip=n;break;case w:this.value=n}}},{key:"formAssociatedCallback",value:function(e){}},{key:"formDisabledCallback",value:function(e){this.disabled=e}},{key:"formResetCallback",value:function(){this.value=this.getAttribute(w)||""}},{key:"formStateRestoreCallback",value:function(e,t){}},{key:"layoutTypeChangeCallback",value:function(e,t){e&&this._mainDivEl.classList.remove(e),t&&this._mainDivEl.classList.add(t)}},{key:"form",get:function(){return this._internals.form}},{key:"labels",get:function(){return this._internals.labels}},{key:"validationMessage",get:function(){return this._inputEl.validationMessage}},{key:"validity",get:function(){return this._inputEl.validity}},{key:"willValidate",get:function(){return this._inputEl.willValidate}},{key:"disabled",get:function(){return this._disabled},set:function(e){this._disabled!==e&&(this._disabled=e,this._placeholderEl.disabled=e,this._inputEl.disabled=e,this.toggleAttribute(m,e))}},{key:"max",get:function(){return this._max},set:function(e){e="".concat(e),this._max!==e&&(this._max=e,this._inputEl.max=e,this.setAttribute(p,e),this.checkValidity())}},{key:"min",get:function(){return this._min},set:function(e){e="".concat(e),this._min!==e&&(this._min=e,this._inputEl.min=e,this.setAttribute(h,e),this.checkValidity())}},{key:"name",get:function(){return this._name},set:function(e){e="".concat(e),this._name!==e&&(this._name=e,this.setAttribute(g,e))}},{key:"placeholder",get:function(){return this._placeholder},set:function(e){e="".concat(e),this._placeholder!==e&&(this._placeholder=e,this._placeholderEl.placeholder=e,this.setAttribute(A,e),this.checkValidity())}},{key:"readOnly",get:function(){return this._readOnly},set:function(e){this._readOnly!==e&&(this._readOnly=e,this._placeholderEl.readOnly=e,this._inputEl.readOnly=e,this.toggleAttribute(y,e),Object(u.toggleElementState)(this,u.PSEUDO_READONLY,e),this.checkValidity())}},{key:"required",get:function(){return this._required},set:function(e){this._required!==e&&(this._required=e,this._inputEl.required=e,this.toggleAttribute(S,e),this.checkValidity())}},{key:"tooltip",get:function(){return this._tooltip},set:function(e){e="".concat(e),this._tooltip!==e&&(this._tooltip=e,this._tooltipEl.textContent=e,this.setAttribute(b,e))}},{key:"value",get:function(){return this._value},set:function(e){e=null!==e?"".concat(e):"";var t=/^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2})$/.exec(e);e=t?t[1]:"",this._value!==e&&(this._value=e,this._inputEl.value!==e&&(this._inputEl.value=e),this._internals.setFormValue(e),Object(u.toggleElementState)(this,u.PSEUDO_BLANK,""===e),this.disabled||this.readOnly||this.dispatchEvent(new Event("change",{bubbles:!0,cancelable:!1,composed:!1})),this.checkValidity())}},{key:"valueAsNumber",get:function(){return parseFloat(this._value)},set:function(e){this.value=e.toString()}},{key:"checkValidity",value:function(){var e=this._inputEl.checkValidity();return Object(u.toggleElementState)(this,u.PSEUDO_INVALID,!this.validity.valid),this._errorMessageEl.textContent=this.validationMessage,e}},{key:"reportValidity",value:function(){return this._inputEl.reportValidity()}},{key:"setCustomValidity",value:function(e){this._inputEl.setCustomValidity(e),this.checkValidity()}},{key:"showPicker",value:function(){this.readOnly||Object(u.addElementState)(this,u.PSEUDO_ACTIVE)}},{key:"hidePicker",value:function(){Object(u.removeElementState)(this,u.PSEUDO_ACTIVE)}}],[{key:"formAssociated",get:function(){return!0}},{key:"observedAttributes",get:function(){return[m,p,h,g,A,y,S,b,w]}}]),o}(o(HTMLElement))},"./src/components/rapid-input-number-field/rapid-input-number-field.html":function(e,t,n){"use strict";n.r(t),t.default='
\n \n
\n
\n
\n'},"./src/components/rapid-input-number-field/rapid-input-number-field.scss":function(e,t,n){"use strict";n.r(t),t.default=":host {\n width: 100px;\n min-height: 25px;\n display: inline-flex;\n flex-direction: column;\n align-items: stretch;\n outline-style: none;\n outline-offset: -1px;\n}\n\n:host(:disabled) {\n color: var(--rapid-theme-color-tertiary, --rapid-color-gray-600);\n}\n\n:host([hidden]) {\n display: none;\n}\n\n.main {\n flex-grow: 1;\n display: flex;\n flex-direction: row;\n justify-content: stretch;\n align-items: stretch;\n position: relative;\n outline-style: none;\n}\n.main.desktop:focus-within {\n outline-style: solid;\n outline-width: 1px;\n outline-color: inherit;\n}\n\n[part=input] {\n flex-grow: 1;\n appearance: none;\n -webkit-appearance: none;\n margin: 0;\n outline-style: none;\n border: solid 1px var(--rapid-color-gray-600);\n border-radius: inherit;\n padding: var(--rapid-input-number-field-padding, 16px);\n overflow-x: hidden;\n color: currentColor;\n background-color: inherit;\n font: inherit;\n text-align: inherit;\n text-overflow: ellipsis;\n}\n[part=input]::placeholder {\n color: var(--rapid-theme-color-tertiary, currentColor);\n}\n\n[part=tooltip] {\n max-width: fit-content;\n display: none;\n margin: 5px 0;\n}\n\n:host(:focus-within:not([_rapid-invalid])) [part=tooltip]:not(:empty) {\n display: block;\n}\n\n[part=error-message] {\n max-width: fit-content;\n display: none;\n margin: 5px 0;\n color: var(--rapid-theme-color-negative, --rapid-color-red);\n}\n\n:host([_rapid-invalid]) [part=error-message]:not(:empty),\n:host(:invalid) [part=error-message]:not(:empty) {\n display: block;\n}"},"./src/components/rapid-input-number-field/rapid-input-number-field.ts":function(t,i,s){"use strict";s.r(i),s.d(i,"RapidInputNumberFieldElement",(function(){return E}));var u=s("./src/utils/element-state.ts"),l=s("./src/utils/fix_webkit_bug216985.ts"),c=s("./src/components/rapid-input-number-field/rapid-input-number-field.html"),d=s("./src/components/rapid-input-number-field/rapid-input-number-field.scss"),f=document.createElement("template");f.innerHTML="\n\n").concat(c.default,"\n");var v="disabled",m="inputmode",p="max",h="min",g="name",A="placeholder",y="readonly",S="required",b="step",w="tooltip",I="value",E=function(t){r(o,t);var i=a(o);function o(){var t;return e(this,o),(t=i.call(this))._disabled=!1,t._inputmode="",t._max="",t._min="",t._name="",t._placeholder="",t._readOnly=!1,t._required=!1,t._step="",t._tooltip="",t._value="",t._internals=t.attachInternals(),t.attachShadow({mode:"open",delegatesFocus:!0}).appendChild(Object(l.cloneTemplate)(f)),t._inputEl=t.shadowRoot.querySelector('[part="input"]'),t._tooltipEl=t.shadowRoot.querySelector('[part="tooltip"]'),t._errorMessageEl=t.shadowRoot.querySelector('[part="error-message"]'),t._inputEl.addEventListener("input",(function(){return t.value=t._inputEl.value})),t}return n(o,[{key:"connectedCallback",value:function(){var e=this;Object(u.toggleElementState)(this,u.PSEUDO_BLANK,""===this.value),o.observedAttributes.forEach((function(t){var n=t;if(e.hasOwnProperty(n)){var r=e[n];delete e[n],e[n]=r}}))}},{key:"disconnectedCallback",value:function(){}},{key:"adoptedCallback",value:function(){}},{key:"attributeChangedCallback",value:function(e,t,n){if(t!==n)switch(e){case v:this.disabled=null!==n;break;case m:this.inputmode=n;break;case y:this.readOnly=null!==n;break;case S:this.required=null!==n;break;case p:this.max=n;break;case h:this.min=n;break;case g:this.name=n;break;case A:this.placeholder=n;break;case b:this.step=n;break;case w:this.tooltip=n;break;case I:this.value=n}}},{key:"formAssociatedCallback",value:function(e){}},{key:"formDisabledCallback",value:function(e){this.disabled=e}},{key:"formResetCallback",value:function(){this.value=this.getAttribute(I)||""}},{key:"formStateRestoreCallback",value:function(e,t){}},{key:"form",get:function(){return this._internals.form}},{key:"labels",get:function(){return this._internals.labels}},{key:"validationMessage",get:function(){return this._inputEl.validationMessage}},{key:"validity",get:function(){return this._inputEl.validity}},{key:"willValidate",get:function(){return this._inputEl.willValidate}},{key:"disabled",get:function(){return this._disabled},set:function(e){this._disabled!==e&&(this._disabled=e,this._inputEl.disabled=e,this.toggleAttribute(v,e))}},{key:"inputmode",get:function(){return this._inputmode},set:function(e){e="".concat(e),this._inputmode!==e&&(this._inputmode=e,this._inputEl.inputMode=e,this.setAttribute(m,e),this.checkValidity())}},{key:"max",get:function(){return this._max},set:function(e){e="".concat(e),this._max!==e&&(this._max=e,this._inputEl.max=e,this.setAttribute(p,e),this.checkValidity())}},{key:"min",get:function(){return this._min},set:function(e){e="".concat(e),this._min!==e&&(this._min=e,this._inputEl.min=e,this.setAttribute(h,e),this.checkValidity())}},{key:"name",get:function(){return this._name},set:function(e){e="".concat(e),this._name!==e&&(this._name=e,this.setAttribute(g,e))}},{key:"placeholder",get:function(){return this._placeholder},set:function(e){e="".concat(e),this._placeholder!==e&&(this._placeholder=e,this._inputEl.placeholder=e,this.setAttribute(A,e),this.checkValidity())}},{key:"readOnly",get:function(){return this._readOnly},set:function(e){this._readOnly!==e&&(this._readOnly=e,this._inputEl.readOnly=e,this.toggleAttribute(y,e),Object(u.toggleElementState)(this,u.PSEUDO_READONLY,e),this.checkValidity())}},{key:"required",get:function(){return this._required},set:function(e){this._required!==e&&(this._required=e,this._inputEl.required=e,this.toggleAttribute(S,e),this.checkValidity())}},{key:"step",get:function(){return this._step},set:function(e){e="".concat(e),this._step!==e&&(this._step=e,this._inputEl.step=e,this.setAttribute(b,e),this.checkValidity())}},{key:"tooltip",get:function(){return this._tooltip},set:function(e){e="".concat(e),this._tooltip!==e&&(this._tooltip=e,this._tooltipEl.textContent=e,this.setAttribute(w,e))}},{key:"value",get:function(){return this._value},set:function(e){e=null!==e?"".concat(e):"",this._value!==e&&(this._value=e,this._inputEl.value!==e&&(this._inputEl.value=e),this._internals.setFormValue(e),Object(u.toggleElementState)(this,u.PSEUDO_BLANK,""===e),this.disabled||this.readOnly||this.dispatchEvent(new Event("change",{bubbles:!0,cancelable:!1,composed:!1})),this.checkValidity())}},{key:"valueAsNumber",get:function(){return parseFloat(this._value)},set:function(e){this.value=e.toString()}},{key:"checkValidity",value:function(){var e=this._inputEl.checkValidity();return Object(u.toggleElementState)(this,u.PSEUDO_INVALID,!this.validity.valid),this._errorMessageEl.textContent=this.validationMessage,e}},{key:"reportValidity",value:function(){return this._inputEl.reportValidity()}},{key:"setCustomValidity",value:function(e){this._inputEl.setCustomValidity(e),this.checkValidity()}}],[{key:"formAssociated",get:function(){return!0}},{key:"observedAttributes",get:function(){return[v,m,p,h,g,A,y,S,b,w,I]}}]),o}(o(HTMLElement))},"./src/components/rapid-input-password-field/rapid-input-password-field.html":function(e,t,n){"use strict";n.r(t),t.default='
\n \n \n \n
\n
\n
\n'},"./src/components/rapid-input-password-field/rapid-input-password-field.scss":function(e,t,n){"use strict";n.r(t),t.default=":host {\n width: 100px;\n min-height: 25px;\n display: inline-flex;\n flex-direction: column;\n align-items: stretch;\n outline-style: none;\n outline-offset: -1px;\n}\n\n:host(:disabled) {\n color: var(--rapid-theme-color-tertiary, --rapid-color-gray-600);\n}\n\n:host([hidden]) {\n display: none;\n}\n\n.main {\n flex-grow: 1;\n display: flex;\n flex-direction: row;\n justify-content: stretch;\n align-items: stretch;\n position: relative;\n outline-style: none;\n}\n.main.desktop:focus-within {\n outline-style: solid;\n outline-width: 1px;\n outline-color: inherit;\n}\n\n[part=input] {\n flex-grow: 1;\n flex-shrink: 1;\n appearance: none;\n -webkit-appearance: none;\n margin: 0;\n outline-style: none;\n border: solid 1px var(--rapid-color-gray-600);\n border-radius: inherit;\n padding: var(--rapid-input-text-field-padding, 16px);\n overflow-x: hidden;\n color: currentColor;\n background-color: inherit;\n font: inherit;\n text-align: inherit;\n text-overflow: ellipsis;\n}\n[part=input]::placeholder {\n color: var(--rapid-theme-color-tertiary, currentColor);\n}\n\n[part=reset] {\n display: none;\n position: absolute;\n top: calc(50% - 24px / 2);\n right: var(--rapid-input-text-field-padding, 16px);\n width: 24px;\n height: 24px;\n outline-style: none;\n}\n\n:host(:focus-within) [part=input]:enabled:read-write {\n padding-right: calc(12px + 16px + var(--rapid-input-text-field-padding, 16px));\n}\n:host(:focus-within) [part=input]:enabled:read-write ~ [part=reset] {\n display: block;\n}\n\n[part=tooltip] {\n max-width: fit-content;\n display: none;\n margin: 5px 0;\n}\n\n:host(:focus-within:not([_rapid-invalid])) [part=tooltip]:not(:empty) {\n display: block;\n}\n\n[part=error-message] {\n max-width: fit-content;\n display: none;\n margin: 5px 0;\n color: var(--rapid-theme-color-negative, --rapid-color-red);\n}\n\n:host([_rapid-invalid]) [part=error-message]:not(:empty),\n:host(:invalid) [part=error-message]:not(:empty) {\n display: block;\n}"},"./src/components/rapid-input-password-field/rapid-input-password-field.ts":function(t,i,s){"use strict";s.r(i),s.d(i,"RapidInputPasswordFieldElement",(function(){return I}));var u=s("./src/utils/element-state.ts"),l=s("./src/utils/fix_webkit_bug216985.ts"),c=s("./src/components/rapid-input-password-field/rapid-input-password-field.html"),d=s("./src/components/rapid-input-password-field/rapid-input-password-field.scss"),f=document.createElement("template");f.innerHTML="\n\n").concat(c.default,"\n");var v="disabled",m="maxlength",p="minlength",h="name",g="pattern",A="placeholder",y="readonly",S="required",b="tooltip",w="value",I=function(t){r(o,t);var i=a(o);function o(){var t;return e(this,o),(t=i.call(this))._disabled=!1,t._maxLength=-1,t._minLength=-1,t._name="",t._pattern="",t._placeholder="",t._readOnly=!1,t._required=!1,t._tooltip="",t._value="",t._internals=t.attachInternals(),t.attachShadow({mode:"open",delegatesFocus:!0}).appendChild(Object(l.cloneTemplate)(f)),t._inputEl=t.shadowRoot.querySelector('[part="input"]'),t._resetEl=t.shadowRoot.querySelector('[part="reset"]'),t._tooltipEl=t.shadowRoot.querySelector('[part="tooltip"]'),t._errorMessageEl=t.shadowRoot.querySelector('[part="error-message"]'),t._inputEl.addEventListener("input",(function(){return t.value=t._inputEl.value})),t._resetEl.addEventListener("mousedown",(function(e){e.preventDefault(),t.reset()})),t}return n(o,[{key:"connectedCallback",value:function(){var e=this;Object(u.toggleElementState)(this,u.PSEUDO_BLANK,""===this.value),o.observedAttributes.forEach((function(t){var n=t;if(e.hasOwnProperty(n)){var r=e[n];delete e[n],e[n]=r}}))}},{key:"disconnectedCallback",value:function(){}},{key:"adoptedCallback",value:function(){}},{key:"attributeChangedCallback",value:function(e,t,n){if(t!==n)switch(e){case v:this.disabled=null!==n;break;case m:this.maxLength=parseInt(n);break;case h:this.name=n;break;case p:this.minLength=parseInt(n);break;case g:this.pattern=n;break;case A:this.placeholder=n;break;case y:this.readOnly=null!==n;break;case S:this.required=null!==n;break;case b:this.tooltip=n;break;case w:this.value=n}}},{key:"formAssociatedCallback",value:function(e){}},{key:"formDisabledCallback",value:function(e){this.disabled=e}},{key:"formResetCallback",value:function(){this.value=this.getAttribute(w)||""}},{key:"formStateRestoreCallback",value:function(e,t){}},{key:"form",get:function(){return this._internals.form}},{key:"labels",get:function(){return this._internals.labels}},{key:"validationMessage",get:function(){return this._inputEl.validationMessage}},{key:"validity",get:function(){return this._inputEl.validity}},{key:"willValidate",get:function(){return this._inputEl.willValidate}},{key:"disabled",get:function(){return this._disabled},set:function(e){this._disabled!==e&&(this._disabled=e,this._inputEl.disabled=e,this.toggleAttribute(v,e))}},{key:"maxLength",get:function(){return this._maxLength},set:function(e){if(e<0)throw new DOMException("Failed to set the 'maxLength' property on 'RapidInputTextField': The value provided (".concat(e,") is not positive or 0"));isNaN(e)||this._maxLength!==e&&(this._maxLength=e,this._inputEl.maxLength=e,this.setAttribute(m,e.toString()),this.checkValidity())}},{key:"minLength",get:function(){return this._minLength},set:function(e){if(e<0)throw new DOMException("Failed to set the 'minLength' property on 'RapidInputTextField': The value provided (".concat(e,") is not positive or 0"));isNaN(e)||this._minLength!==e&&(this._minLength=e,this._inputEl.minLength=e,this.setAttribute(p,e.toString()),this.checkValidity())}},{key:"name",get:function(){return this._name},set:function(e){e="".concat(e),this._name!==e&&(this._name=e,this.setAttribute(h,e))}},{key:"pattern",get:function(){return this._pattern},set:function(e){e="".concat(e),this._pattern!==e&&(this._pattern=e,this._inputEl.pattern=e,this.setAttribute(g,e),this.checkValidity())}},{key:"placeholder",get:function(){return this._placeholder},set:function(e){e="".concat(e),this._placeholder!==e&&(this._placeholder=e,this._inputEl.placeholder=e,this.setAttribute(A,e),this.checkValidity())}},{key:"readOnly",get:function(){return this._readOnly},set:function(e){this._readOnly!==e&&(this._readOnly=e,this._inputEl.readOnly=e,this.toggleAttribute(y,e),Object(u.toggleElementState)(this,u.PSEUDO_READONLY,e),this.checkValidity())}},{key:"required",get:function(){return this._required},set:function(e){this._required!==e&&(this._required=e,this._inputEl.required=e,this.toggleAttribute(S,e),this.checkValidity())}},{key:"tooltip",get:function(){return this._tooltip},set:function(e){e="".concat(e),this._tooltip!==e&&(this._tooltip=e,this._tooltipEl.textContent=e,this.setAttribute(b,e))}},{key:"value",get:function(){return this._value},set:function(e){e=null!==e?"".concat(e):"",this._value!==e&&(this._value=e,this._inputEl.value!==e&&(this._inputEl.value=e),this._resetEl.disabled=""===e,this._internals.setFormValue(e),Object(u.toggleElementState)(this,u.PSEUDO_BLANK,""===e),this.disabled||this.readOnly||this.dispatchEvent(new Event("change",{bubbles:!0,cancelable:!1,composed:!1})),this.checkValidity())}},{key:"checkValidity",value:function(){var e=this._inputEl.checkValidity();return Object(u.toggleElementState)(this,u.PSEUDO_INVALID,!this.validity.valid),this._errorMessageEl.textContent=this.validationMessage,e}},{key:"reportValidity",value:function(){return this._inputEl.reportValidity()}},{key:"setCustomValidity",value:function(e){this._inputEl.setCustomValidity(e),this.checkValidity()}},{key:"reset",value:function(){this.value="",this._inputEl.focus()}}],[{key:"formAssociated",get:function(){return!0}},{key:"observedAttributes",get:function(){return[v,m,p,h,g,A,y,S,b,w]}}]),o}(o(HTMLElement))},"./src/components/rapid-input-phone-field/rapid-input-phone-field.html":function(e,t,n){"use strict";n.r(t),t.default='
\n \n
\n
\n
\n'},"./src/components/rapid-input-phone-field/rapid-input-phone-field.scss":function(e,t,n){"use strict";n.r(t),t.default=":host {\n width: 100px;\n min-height: 25px;\n display: inline-flex;\n flex-direction: column;\n align-items: stretch;\n outline-style: none;\n outline-offset: -1px;\n}\n\n:host(:disabled) {\n color: var(--rapid-theme-color-tertiary, --rapid-color-gray-600);\n}\n\n:host([hidden]) {\n display: none;\n}\n\n.main {\n flex-grow: 1;\n display: flex;\n flex-direction: row;\n justify-content: stretch;\n align-items: stretch;\n position: relative;\n outline-style: none;\n}\n.main.desktop:focus-within {\n outline-style: solid;\n outline-width: 1px;\n outline-color: inherit;\n}\n\n[part=input] {\n flex-grow: 1;\n appearance: none;\n -webkit-appearance: none;\n margin: 0;\n outline-style: none;\n border: solid 1px var(--rapid-color-gray-600);\n border-radius: inherit;\n padding: var(--rapid-input-phone-field-padding, 16px);\n overflow-x: hidden;\n color: currentColor;\n background-color: inherit;\n font: inherit;\n text-align: inherit;\n text-overflow: ellipsis;\n}\n[part=input]::placeholder {\n color: var(--rapid-theme-color-tertiary, currentColor);\n}\n\n[part=tooltip] {\n max-width: fit-content;\n display: none;\n margin: 5px 0;\n}\n\n:host(:focus-within:not([_rapid-invalid])) [part=tooltip]:not(:empty) {\n display: block;\n}\n\n[part=error-message] {\n max-width: fit-content;\n display: none;\n margin: 5px 0;\n color: var(--rapid-theme-color-negative, --rapid-color-red);\n}\n\n:host([_rapid-invalid]) [part=error-message]:not(:empty),\n:host(:invalid) [part=error-message]:not(:empty) {\n display: block;\n}"},"./src/components/rapid-input-phone-field/rapid-input-phone-field.ts":function(t,i,s){"use strict";s.r(i),s.d(i,"RapidInputPhoneFieldElement",(function(){return S}));var u=s("./src/utils/element-state.ts"),l=s("./src/utils/fix_webkit_bug216985.ts"),c=s("./src/components/rapid-input-phone-field/rapid-input-phone-field.html"),d=s("./src/components/rapid-input-phone-field/rapid-input-phone-field.scss"),f=document.createElement("template");f.innerHTML="\n\n").concat(c.default,"\n");var v="disabled",m="name",p="placeholder",h="readonly",g="required",A="tooltip",y="value",S=function(t){r(o,t);var i=a(o);function o(){var t;return e(this,o),(t=i.call(this))._disabled=!1,t._name="",t._placeholder="",t._readOnly=!1,t._required=!1,t._tooltip="",t._value="",t._internals=t.attachInternals(),t.attachShadow({mode:"open",delegatesFocus:!0}).appendChild(Object(l.cloneTemplate)(f)),t._inputEl=t.shadowRoot.querySelector('[part="input"]'),t._tooltipEl=t.shadowRoot.querySelector('[part="tooltip"]'),t._errorMessageEl=t.shadowRoot.querySelector('[part="error-message"]'),t._inputEl.addEventListener("input",(function(){return t.value=t._inputEl.value})),t}return n(o,[{key:"connectedCallback",value:function(){var e=this;Object(u.toggleElementState)(this,u.PSEUDO_BLANK,""===this.value),o.observedAttributes.forEach((function(t){var n=t;if(e.hasOwnProperty(n)){var r=e[n];delete e[n],e[n]=r}}))}},{key:"disconnectedCallback",value:function(){}},{key:"adoptedCallback",value:function(){}},{key:"attributeChangedCallback",value:function(e,t,n){if(t!==n)switch(e){case v:this.disabled=null!==n;break;case m:this.name=n;break;case h:this.readOnly=null!==n;break;case g:this.required=null!==n;break;case p:this.placeholder=n;break;case A:this.tooltip=n;break;case y:this.value=n}}},{key:"formAssociatedCallback",value:function(e){}},{key:"formDisabledCallback",value:function(e){this.disabled=e}},{key:"formResetCallback",value:function(){this.value=this.getAttribute(y)||""}},{key:"formStateRestoreCallback",value:function(e,t){}},{key:"form",get:function(){return this._internals.form}},{key:"labels",get:function(){return this._internals.labels}},{key:"validationMessage",get:function(){return this._inputEl.validationMessage}},{key:"validity",get:function(){return this._inputEl.validity}},{key:"willValidate",get:function(){return this._inputEl.willValidate}},{key:"disabled",get:function(){return this._disabled},set:function(e){this._disabled!==e&&(this._disabled=e,this._inputEl.disabled=e,this.toggleAttribute(v,e))}},{key:"name",get:function(){return this._name},set:function(e){e="".concat(e),this._name!==e&&(this._name=e,this.setAttribute(m,e))}},{key:"placeholder",get:function(){return this._placeholder},set:function(e){e="".concat(e),this._placeholder!==e&&(this._placeholder=e,this._inputEl.placeholder=e,this.setAttribute(p,e),this.checkValidity())}},{key:"readOnly",get:function(){return this._readOnly},set:function(e){this._readOnly!==e&&(this._readOnly=e,this._inputEl.readOnly=e,this.toggleAttribute(h,e),Object(u.toggleElementState)(this,u.PSEUDO_READONLY,e),this.checkValidity())}},{key:"required",get:function(){return this._required},set:function(e){this._required!==e&&(this._required=e,this._inputEl.required=e,this.toggleAttribute(g,e),this.checkValidity())}},{key:"tooltip",get:function(){return this._tooltip},set:function(e){e="".concat(e),this._tooltip!==e&&(this._tooltip=e,this._tooltipEl.textContent=e,this.setAttribute(A,e))}},{key:"value",get:function(){return this._value},set:function(e){e=null!==e?"".concat(e):"",this._value!==e&&(this._value=e,this._inputEl.value!==e&&(this._inputEl.value=e),this._internals.setFormValue(e),Object(u.toggleElementState)(this,u.PSEUDO_BLANK,""===e),this.disabled||this.readOnly||this.dispatchEvent(new Event("change",{bubbles:!0,cancelable:!1,composed:!1})),this.checkValidity())}},{key:"checkValidity",value:function(){var e=this._inputEl.checkValidity();return Object(u.toggleElementState)(this,u.PSEUDO_INVALID,!this.validity.valid),this._errorMessageEl.textContent=this.validationMessage,e}},{key:"reportValidity",value:function(){return this._inputEl.reportValidity()}},{key:"setCustomValidity",value:function(e){this._inputEl.setCustomValidity(e),this.checkValidity()}}],[{key:"formAssociated",get:function(){return!0}},{key:"observedAttributes",get:function(){return[v,m,p,h,g,A,y]}}]),o}(o(HTMLElement))},"./src/components/rapid-input-select-multiple/rapid-input-select-multiple.html":function(e,t,n){"use strict";n.r(t),t.default='
\n \n \n \n \n \n \n
\n
\n
\n'},"./src/components/rapid-input-select-multiple/rapid-input-select-multiple.scss":function(e,t,n){"use strict";n.r(t),t.default=":host {\n width: 100px;\n min-height: 25px;\n display: inline-flex;\n flex-direction: column;\n align-items: stretch;\n position: relative;\n outline-style: none;\n outline-offset: -1px;\n}\n\n:host(:disabled) {\n color: var(--rapid-theme-color-tertiary, --rapid-color-gray-600);\n}\n\n:host([hidden]) {\n display: none;\n}\n\n.main {\n flex-grow: 1;\n display: flex;\n flex-direction: row;\n justify-content: stretch;\n align-items: stretch;\n position: relative;\n outline-style: none;\n}\n.main.desktop:focus-within {\n outline-style: solid;\n outline-width: 1px;\n outline-color: inherit;\n}\n\n[part=input] {\n flex-grow: 1;\n flex-shrink: 1;\n appearance: none;\n -webkit-appearance: none;\n margin: 0;\n outline-style: none;\n border-style: solid;\n border-width: 1px;\n border-color: var(--rapid-color-gray-600);\n border-radius: inherit;\n padding: var(--rapid-input-select-multiple-padding, 16px);\n overflow-x: hidden;\n color: currentColor;\n background-color: inherit;\n font: inherit;\n text-align: inherit;\n}\n[part=input]::placeholder {\n color: var(--rapid-theme-color-tertiary, currentColor);\n}\n\n[part=input]:enabled:read-write {\n padding-right: calc(12px + 16px + var(--rapid-input-select-multiple-padding, 16px));\n}\n\n[part=icon] {\n display: none;\n position: absolute;\n top: calc(50% - 24px / 2);\n right: var(--rapid-input-select-multiple-padding, 16px);\n width: 24px;\n height: 24px;\n color: currentColor;\n}\n\n[part=input]:enabled:read-write ~ [part=icon] {\n display: block;\n}\n\n.selector-desktop {\n display: none;\n flex-direction: column;\n justify-content: start;\n align-items: stretch;\n position: absolute;\n box-sizing: border-box;\n top: calc(100% + 1px);\n width: 100%;\n border-style: solid;\n border-width: 1px;\n border-color: var(--rapid-color-gray-600);\n background-color: var(--rapid-theme-background-color);\n padding: var(--rapid-input-select-multiple-padding, 16px);\n z-index: 1;\n}\n.selector-desktop rapid-checkbox {\n margin-right: 10px;\n}\n\n:host(:not([disabled]):not([readonly]):focus-within) .desktop .selector-desktop {\n display: flex;\n}\n\n.selector-mobile {\n display: none;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n appearance: none;\n -webkit-appearance: none;\n margin: 0;\n outline-style: none;\n border-style: none;\n border-radius: inherit;\n padding: var(--rapid-input-select-multiple-padding, 16px);\n color: transparent;\n background-color: transparent;\n font: inherit;\n text-align: inherit;\n text-overflow: ellipsis;\n overflow-x: hidden;\n}\n\n:host(:not([disabled]):not([readonly])) .tablet .selector-mobile,\n:host(:not([disabled]):not([readonly])) .phone .selector-mobile {\n display: block;\n}\n\n[part=tooltip] {\n max-width: fit-content;\n display: none;\n margin: 5px 0;\n}\n\n:host(:focus-within:not([_rapid-invalid])) [part=tooltip]:not(:empty) {\n display: block;\n}\n\n[part=error-message] {\n max-width: fit-content;\n display: none;\n margin: 5px 0;\n color: var(--rapid-theme-color-negative, --rapid-color-red);\n}\n\n:host([_rapid-invalid]) [part=error-message]:not(:empty),\n:host(:invalid) [part=error-message]:not(:empty) {\n display: block;\n}"},"./src/components/rapid-input-select-multiple/rapid-input-select-multiple.ts":function(t,i,s){"use strict";s.r(i),s.d(i,"RapidInputSelectMultipleElement",(function(){return w}));var u=s("./src/utils/element-state.ts"),l=s("./src/utils/fix_webkit_bug216985.ts"),c=s("./src/utils/layout-types.ts"),d=s("./src/utils/multipe-values.ts"),f=s("./src/components/rapid-input-select-multiple/rapid-input-select-multiple.html"),v=s("./src/components/rapid-input-select-multiple/rapid-input-select-multiple.scss"),m=document.createElement("template");m.innerHTML="\n\n").concat(f.default,"\n");var p="disabled",h="name",g="placeholder",A="readonly",y="required",S="tooltip",b="value",w=function(t){r(o,t);var i=a(o);function o(){var t;return e(this,o),(t=i.call(this))._disabled=!1,t._name="",t._placeholder="",t._readOnly=!1,t._required=!1,t._tooltip="",t._value="",t._updateValueFromMobileSelector=function(e){var n=Array.from(t._selectorMobileEl.selectedOptions).filter((function(e){return e.selected})).map((function(e){return e.value}));t.value=Object(d.serializeValues)(n)},t._updateValueFromDesktopSelector=function(e){t.value=t._selectorDesktopEl.value},t._internals=t.attachInternals(),t._validationEl=t.ownerDocument.createElement("input"),t.attachShadow({mode:"open",delegatesFocus:!0}).appendChild(Object(l.cloneTemplate)(m)),t._mainDivEl=t.shadowRoot.querySelector(".main"),t._inputEl=t.shadowRoot.querySelector('[part="input"]'),t._selectorMobileEl=t.shadowRoot.querySelector(".selector-mobile"),t._selectorDesktopEl=t.shadowRoot.querySelector(".selector-desktop"),t._tooltipEl=t.shadowRoot.querySelector('[part="tooltip"]'),t._errorMessageEl=t.shadowRoot.querySelector('[part="error-message"]'),t._optionElsObserver=new MutationObserver((function(){return t._updateOptions()})),t.addEventListener("focus",(function(){return t._selectorDesktopEl.focus()})),t._selectorMobileEl.addEventListener("change",t._updateValueFromMobileSelector),t._selectorDesktopEl.addEventListener("change",t._updateValueFromDesktopSelector),t.addEventListener("focus",(function(){t._selectorMobileEl.focus()})),t}return n(o,[{key:"connectedCallback",value:function(){var e=this;Object(u.toggleElementState)(this,u.PSEUDO_BLANK,""===this.value),this._updateOptions(),this._optionElsObserver.observe(this,{subtree:!0,childList:!0,attributes:!0,attributeFilter:["value"],characterData:!0}),o.observedAttributes.forEach((function(t){var n=t;if(e.hasOwnProperty(n)){var r=e[n];delete e[n],e[n]=r}})),this.layoutTypeChangeCallback(null,Object(c.getLayoutType)())}},{key:"disconnectedCallback",value:function(){this._optionElsObserver.disconnect(),this.layoutTypeChangeCallback(Object(c.getLayoutType)(),null)}},{key:"adoptedCallback",value:function(){}},{key:"attributeChangedCallback",value:function(e,t,n){if(t!==n)switch(e){case p:this.disabled=null!==n;break;case h:this.name=n;break;case g:this.placeholder=n;break;case A:this.readOnly=null!==n;break;case y:this.required=null!==n;break;case S:this.tooltip=n;break;case b:this.value=n}}},{key:"formAssociatedCallback",value:function(e){}},{key:"formDisabledCallback",value:function(e){this.disabled=e}},{key:"formResetCallback",value:function(){this.value=this.getAttribute(b)||""}},{key:"formStateRestoreCallback",value:function(e,t){}},{key:"layoutTypeChangeCallback",value:function(e,t){e&&this._mainDivEl.classList.remove(e),t&&this._mainDivEl.classList.add(t)}},{key:"form",get:function(){return this._internals.form}},{key:"labels",get:function(){return this._internals.labels}},{key:"validationMessage",get:function(){return this._validationEl.validationMessage}},{key:"validity",get:function(){return this._validationEl.validity}},{key:"willValidate",get:function(){return this._validationEl.willValidate}},{key:"disabled",get:function(){return this._disabled},set:function(e){this._disabled!==e&&(this._disabled=e,this._validationEl.disabled=e,this._inputEl.disabled=e,this.toggleAttribute(p,e))}},{key:"name",get:function(){return this._name},set:function(e){e="".concat(e),this._name!==e&&(this._name=e,this.setAttribute(h,e))}},{key:"placeholder",get:function(){return this._placeholder},set:function(e){e="".concat(e),this._placeholder!==e&&(this._placeholder=e,this._inputEl.placeholder=e,this.setAttribute(g,e),this.checkValidity())}},{key:"readOnly",get:function(){return this._readOnly},set:function(e){this._readOnly!==e&&(this._readOnly=e,this._inputEl.tabIndex=e?0:-1,this.toggleAttribute(A,e),Object(u.toggleElementState)(this,u.PSEUDO_READONLY,e),this.checkValidity())}},{key:"required",get:function(){return this._required},set:function(e){this._required!==e&&(this._required=e,this._validationEl.required=e,this._inputEl.required=e,this.toggleAttribute(y,e),this.checkValidity())}},{key:"tooltip",get:function(){return this._tooltip},set:function(e){e="".concat(e),this._tooltip!==e&&(this._tooltip=e,this._tooltipEl.textContent=e,this.setAttribute(S,e))}},{key:"value",get:function(){return this._value},set:function(e){if(e=null!==e?"".concat(e):"",this._value!==e){this._value=e;var t=Object(d.parseValues)(e);Array.from(this._selectorMobileEl.querySelectorAll("option")).forEach((function(e){return e.selected=t.includes(e.value)})),this._selectorDesktopEl.value!==e&&(this._selectorDesktopEl.value=e);var n=Array.from(this.querySelectorAll("option")).filter((function(e){return t.includes(e.value)})).map((function(e){return e.textContent})).join(", ");this._inputEl.value!==n&&(this._inputEl.value=n),this._validationEl.value!==n&&(this._validationEl.value=n),this._internals.setFormValue(e),Object(u.toggleElementState)(this,u.PSEUDO_BLANK,""===e),this.disabled||this.readOnly||this.dispatchEvent(new Event("change",{bubbles:!0,cancelable:!1,composed:!1})),this.checkValidity()}}},{key:"checkValidity",value:function(){var e=this._validationEl.checkValidity();return Object(u.toggleElementState)(this,u.PSEUDO_INVALID,!this.validity.valid),this._errorMessageEl.textContent=this.validationMessage,e}},{key:"reportValidity",value:function(){return this._validationEl.reportValidity()}},{key:"setCustomValidity",value:function(e){this._validationEl.setCustomValidity(e),this.checkValidity()}},{key:"_updateOptions",value:function(){var e=this;Array.from(this._selectorMobileEl.querySelectorAll("option")).forEach((function(e){return e.remove()})),Array.from(this._selectorDesktopEl.querySelectorAll("option")).forEach((function(e){return e.remove()})),Array.from(this.querySelectorAll("option")).forEach((function(t){var n=t.getAttribute("value");if(n){var r=e.ownerDocument.createElement("option");r.setAttribute("value",n),r.textContent=t.textContent,e._selectorMobileEl.appendChild(r),e._selectorDesktopEl.appendChild(r.cloneNode(!0))}}));var t=Object(d.parseValues)(this.value);Array.from(this._selectorMobileEl.querySelectorAll("option")).forEach((function(e){return e.selected=t.includes(e.value)})),this._selectorDesktopEl.value!==this.value&&(this._selectorDesktopEl.value=this.value);var n=Array.from(this.querySelectorAll("option")).filter((function(e){return t.includes(e.value)})).map((function(e){return e.textContent})).join(", ");this._inputEl.value!==n&&(this._inputEl.value=n),this._validationEl.value!==n&&(this._validationEl.value=n),this.checkValidity()}}],[{key:"formAssociated",get:function(){return!0}},{key:"observedAttributes",get:function(){return[p,h,g,A,y,S,b]}}]),o}(o(HTMLElement))},"./src/components/rapid-input-select/rapid-input-select.html":function(e,t,n){"use strict";n.r(t),t.default='
\n \n \n \n \n \n
\n
\n
\n'},"./src/components/rapid-input-select/rapid-input-select.scss":function(e,t,n){"use strict";n.r(t),t.default=":host {\n width: 100px;\n min-height: 25px;\n display: inline-flex;\n flex-direction: column;\n align-items: stretch;\n outline-style: none;\n outline-offset: -1px;\n}\n\n:host(:disabled) {\n color: var(--rapid-theme-color-tertiary, --rapid-color-gray-600);\n}\n\n:host([hidden]) {\n display: none;\n}\n\n.main {\n flex-grow: 1;\n display: flex;\n flex-direction: row;\n justify-content: stretch;\n align-items: stretch;\n position: relative;\n outline-style: none;\n}\n.main.desktop:focus-within {\n outline-style: solid;\n outline-width: 1px;\n outline-color: inherit;\n}\n\n[part=input] {\n flex-grow: 1;\n flex-shrink: 1;\n appearance: none;\n -webkit-appearance: none;\n margin: 0;\n outline-style: none;\n border-style: solid;\n border-width: 1px;\n border-color: var(--rapid-color-gray-600);\n border-radius: inherit;\n padding: var(--rapid-input-select-padding, 16px);\n overflow-x: hidden;\n color: currentColor;\n background-color: inherit;\n font: inherit;\n text-align: inherit;\n}\n[part=input]::placeholder {\n color: var(--rapid-theme-color-tertiary, currentColor);\n}\n\n:host(:not([_rapid-readonly])) [part=input]:enabled {\n padding-right: calc(12px + 16px + var(--rapid-input-select-padding, 16px));\n}\n\n[part=icon] {\n display: none;\n position: absolute;\n top: calc(50% - 24px / 2);\n right: var(--rapid-input-select-padding, 16px);\n width: 24px;\n height: 24px;\n color: currentColor;\n}\n\n:host(:not([_rapid-readonly])) [part=input]:enabled ~ [part=icon] {\n display: block;\n}\n\n[part=select] {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n appearance: none;\n -webkit-appearance: none;\n margin: 0;\n outline-style: none;\n border-style: solid;\n border-width: 1px;\n border-color: var(--rapid-color-gray-600);\n border-radius: inherit;\n padding: var(--rapid-input-select-padding, 16px);\n color: transparent;\n background-color: transparent;\n font: inherit;\n text-align: inherit;\n text-overflow: ellipsis;\n overflow-x: hidden;\n}\n\n:host([disabled]) [part=select],\n:host([readonly]) [part=select] {\n display: none;\n}\n\n[part=select] option {\n color: black;\n background-color: white;\n}\n\n[part=tooltip] {\n max-width: fit-content;\n display: none;\n margin: 5px 0;\n}\n\n:host(:focus-within:not([_rapid-invalid])) [part=tooltip]:not(:empty) {\n display: block;\n}\n\n[part=error-message] {\n max-width: fit-content;\n display: none;\n margin: 5px 0;\n color: var(--rapid-theme-color-negative, --rapid-color-red);\n}\n\n:host([_rapid-invalid]) [part=error-message]:not(:empty),\n:host(:invalid) [part=error-message]:not(:empty) {\n display: block;\n}"},"./src/components/rapid-input-select/rapid-input-select.ts":function(t,i,s){"use strict";s.r(i),s.d(i,"RapidInputSelectElement",(function(){return S}));var u=s("./src/utils/element-state.ts"),l=s("./src/utils/fix_webkit_bug216985.ts"),c=s("./src/components/rapid-input-select/rapid-input-select.html"),d=s("./src/components/rapid-input-select/rapid-input-select.scss"),f=document.createElement("template");f.innerHTML="\n\n").concat(c.default,"\n");var v="disabled",m="name",p="placeholder",h="readonly",g="required",A="tooltip",y="value",S=function(t){r(o,t);var i=a(o);function o(){var t;return e(this,o),(t=i.call(this))._optionsUpdated=!1,t._disabled=!1,t._name="",t._placeholder="",t._readOnly=!1,t._required=!1,t._tooltip="",t._value="",t._internals=t.attachInternals(),t._validationEl=t.ownerDocument.createElement("input"),t.attachShadow({mode:"open",delegatesFocus:!0}).appendChild(Object(l.cloneTemplate)(f)),t._inputEl=t.shadowRoot.querySelector('[part="input"]'),t._selectEl=t.shadowRoot.querySelector('[part="select"]'),t._tooltipEl=t.shadowRoot.querySelector('[part="tooltip"]'),t._errorMessageEl=t.shadowRoot.querySelector('[part="error-message"]'),t._optionElsObserver=new MutationObserver((function(){return t._updateOptions()})),t._selectEl.addEventListener("change",(function(){return t.value=t._selectEl.value})),t.addEventListener("focus",(function(){t._selectEl.focus()})),t}return n(o,[{key:"connectedCallback",value:function(){var e=this;Object(u.toggleElementState)(this,u.PSEUDO_BLANK,""===this.value),this._updateOptions(),this._optionElsObserver.observe(this,{subtree:!0,childList:!0,attributes:!0,attributeFilter:["value"],characterData:!0}),o.observedAttributes.forEach((function(t){var n=t;if(e.hasOwnProperty(n)){var r=e[n];delete e[n],e[n]=r}}))}},{key:"disconnectedCallback",value:function(){this._optionElsObserver.disconnect()}},{key:"adoptedCallback",value:function(){}},{key:"attributeChangedCallback",value:function(e,t,n){if(t!==n)switch(e){case v:this.disabled=null!==n;break;case m:this.name=n;break;case p:this.placeholder=n;break;case h:this.readOnly=null!==n;break;case g:this.required=null!==n;break;case A:this.tooltip=n;break;case y:this.value=n}}},{key:"formAssociatedCallback",value:function(e){}},{key:"formDisabledCallback",value:function(e){this.disabled=e}},{key:"formResetCallback",value:function(){this.value=this.getAttribute(y)||""}},{key:"formStateRestoreCallback",value:function(e,t){}},{key:"form",get:function(){return this._internals.form}},{key:"labels",get:function(){return this._internals.labels}},{key:"validationMessage",get:function(){return this._validationEl.validationMessage}},{key:"validity",get:function(){return this._validationEl.validity}},{key:"willValidate",get:function(){return this._validationEl.willValidate}},{key:"disabled",get:function(){return this._disabled},set:function(e){this._disabled!==e&&(this._disabled=e,this._validationEl.disabled=e,this._inputEl.disabled=e,this._selectEl.disabled=e,this.toggleAttribute(v,e))}},{key:"name",get:function(){return this._name},set:function(e){e="".concat(e),this._name!==e&&(this._name=e,this.setAttribute(m,e))}},{key:"placeholder",get:function(){return this._placeholder},set:function(e){e="".concat(e),this._placeholder!==e&&(this._placeholder=e,this._inputEl.placeholder=e,this.setAttribute(p,e),this.checkValidity())}},{key:"readOnly",get:function(){return this._readOnly},set:function(e){this._readOnly!==e&&(this._readOnly=e,this._inputEl.tabIndex=e?0:-1,this.toggleAttribute(h,e),Object(u.toggleElementState)(this,u.PSEUDO_READONLY,e),this.checkValidity())}},{key:"required",get:function(){return this._required},set:function(e){this._required!==e&&(this._required=e,this._validationEl.required=e,this._inputEl.required=e,this.toggleAttribute(g,e),this.checkValidity())}},{key:"tooltip",get:function(){return this._tooltip},set:function(e){e="".concat(e),this._tooltip!==e&&(this._tooltip=e,this._tooltipEl.textContent=e,this.setAttribute(A,e))}},{key:"value",get:function(){return this._value},set:function(e){if(e=null!==e?"".concat(e):"",this._optionsUpdated&&(Array.from(this._selectEl.options).find((function(t){return t.value===e}))||(e="")),this._value!==e){this._value=e,this._selectEl.value!==e&&(this._selectEl.value=e);var t="",n=this._selectEl.selectedOptions.item(0);n&&(t=n.textContent),this._inputEl.value!==t&&(this._inputEl.value=t),this._validationEl.value!==t&&(this._validationEl.value=t),this._internals.setFormValue(e),Object(u.toggleElementState)(this,u.PSEUDO_BLANK,""===e),this.disabled||this.readOnly||this.dispatchEvent(new Event("change",{bubbles:!0,cancelable:!1,composed:!1})),this.checkValidity()}}},{key:"checkValidity",value:function(){var e=this._validationEl.checkValidity();return Object(u.toggleElementState)(this,u.PSEUDO_INVALID,!this.validity.valid),this._errorMessageEl.textContent=this.validationMessage,e}},{key:"reportValidity",value:function(){return this._validationEl.reportValidity()}},{key:"setCustomValidity",value:function(e){this._validationEl.setCustomValidity(e),this.checkValidity()}},{key:"_updateOptions",value:function(){var e=this;Array.from(this._selectEl.querySelectorAll("option")).forEach((function(e){return e.remove()})),Array.from(this.querySelectorAll("option")).forEach((function(t){var n=e.ownerDocument.createElement("option");n.setAttribute("value",t.getAttribute("value")),n.textContent=t.textContent,e._selectEl.appendChild(n)})),this._selectEl.querySelectorAll("option").length>0&&(this._optionsUpdated=!0),this._selectEl.value!==this.value&&(this._selectEl.value=this.value);var t="",n=this._selectEl.selectedOptions.item(0);n&&(t=n.textContent),this._inputEl.value!==t&&(this._inputEl.value=t),this._validationEl.value!==t&&(this._validationEl.value=t),this.checkValidity()}}],[{key:"formAssociated",get:function(){return!0}},{key:"observedAttributes",get:function(){return[v,m,p,h,g,A,y]}}]),o}(o(HTMLElement))},"./src/components/rapid-input-text-field/rapid-input-text-field.html":function(e,t,n){"use strict";n.r(t),t.default='
\n \n \n \n
\n
\n
\n'},"./src/components/rapid-input-text-field/rapid-input-text-field.scss":function(e,t,n){"use strict";n.r(t),t.default=":host {\n width: 100px;\n min-height: 25px;\n display: inline-flex;\n flex-direction: column;\n align-items: stretch;\n outline-style: none;\n outline-offset: -1px;\n}\n\n:host(:disabled) {\n color: var(--rapid-theme-color-tertiary, --rapid-color-gray-600);\n}\n\n:host([hidden]) {\n display: none;\n}\n\n.main {\n flex-grow: 1;\n display: flex;\n flex-direction: row;\n justify-content: stretch;\n align-items: stretch;\n position: relative;\n outline-style: none;\n}\n.main.desktop:focus-within {\n outline-style: solid;\n outline-width: 1px;\n outline-color: inherit;\n}\n\n[part=input] {\n flex-grow: 1;\n flex-shrink: 1;\n appearance: none;\n -webkit-appearance: none;\n margin: 0;\n outline-style: none;\n border: solid 1px var(--rapid-color-gray-600);\n border-radius: inherit;\n padding: var(--rapid-input-text-field-padding, 16px);\n overflow-x: hidden;\n color: currentColor;\n background-color: inherit;\n font: inherit;\n text-align: inherit;\n text-overflow: ellipsis;\n}\n[part=input]::placeholder {\n color: var(--rapid-theme-color-tertiary, currentColor);\n}\n\n[part=reset] {\n display: none;\n position: absolute;\n top: calc(50% - 24px / 2);\n right: var(--rapid-input-text-field-padding, 16px);\n width: 24px;\n height: 24px;\n outline-style: none;\n}\n\n:host(:focus-within) [part=input]:enabled:read-write {\n padding-right: calc(12px + 16px + var(--rapid-input-text-field-padding, 16px));\n}\n:host(:focus-within) [part=input]:enabled:read-write ~ [part=reset] {\n display: block;\n}\n\n[part=tooltip] {\n max-width: fit-content;\n display: none;\n margin: 5px 0;\n}\n\n:host(:focus-within:not([_rapid-invalid])) [part=tooltip]:not(:empty) {\n display: block;\n}\n\n[part=error-message] {\n max-width: fit-content;\n display: none;\n margin: 5px 0;\n color: var(--rapid-theme-color-negative, --rapid-color-red);\n}\n\n:host([_rapid-invalid]) [part=error-message]:not(:empty),\n:host(:invalid) [part=error-message]:not(:empty) {\n display: block;\n}"},"./src/components/rapid-input-text-field/rapid-input-text-field.ts":function(t,i,s){"use strict";s.r(i),s.d(i,"RapidInputTextFieldElement",(function(){return I}));var u=s("./src/utils/element-state.ts"),l=s("./src/utils/fix_webkit_bug216985.ts"),c=s("./src/components/rapid-input-text-field/rapid-input-text-field.html"),d=s("./src/components/rapid-input-text-field/rapid-input-text-field.scss"),f=document.createElement("template");f.innerHTML="\n\n").concat(c.default,"\n");var v="disabled",m="maxlength",p="minlength",h="name",g="pattern",A="placeholder",y="readonly",S="required",b="tooltip",w="value",I=function(t){r(o,t);var i=a(o);function o(){var t;return e(this,o),(t=i.call(this))._disabled=!1,t._maxLength=-1,t._minLength=-1,t._name="",t._pattern="",t._placeholder="",t._readOnly=!1,t._required=!1,t._tooltip="",t._value="",t._internals=t.attachInternals(),t.attachShadow({mode:"open",delegatesFocus:!0}).appendChild(Object(l.cloneTemplate)(f)),t._inputEl=t.shadowRoot.querySelector('[part="input"]'),t._resetEl=t.shadowRoot.querySelector('[part="reset"]'),t._tooltipEl=t.shadowRoot.querySelector('[part="tooltip"]'),t._errorMessageEl=t.shadowRoot.querySelector('[part="error-message"]'),t._inputEl.addEventListener("input",(function(){return t.value=t._inputEl.value})),t._resetEl.addEventListener("mousedown",(function(e){e.preventDefault(),t.reset()})),t}return n(o,[{key:"connectedCallback",value:function(){var e=this;Object(u.toggleElementState)(this,u.PSEUDO_BLANK,""===this.value),o.observedAttributes.forEach((function(t){var n=t;if(e.hasOwnProperty(n)){var r=e[n];delete e[n],e[n]=r}}))}},{key:"disconnectedCallback",value:function(){}},{key:"adoptedCallback",value:function(){}},{key:"attributeChangedCallback",value:function(e,t,n){if(t!==n)switch(e){case v:this.disabled=null!==n;break;case m:this.maxLength=parseInt(n);break;case h:this.name=n;break;case p:this.minLength=parseInt(n);break;case g:this.pattern=n;break;case A:this.placeholder=n;break;case y:this.readOnly=null!==n;break;case S:this.required=null!==n;break;case b:this.tooltip=n;break;case w:this.value=n}}},{key:"formAssociatedCallback",value:function(e){}},{key:"formDisabledCallback",value:function(e){this.disabled=e}},{key:"formResetCallback",value:function(){this.value=this.getAttribute(w)||""}},{key:"formStateRestoreCallback",value:function(e,t){}},{key:"form",get:function(){return this._internals.form}},{key:"labels",get:function(){return this._internals.labels}},{key:"validationMessage",get:function(){return this._inputEl.validationMessage}},{key:"validity",get:function(){return this._inputEl.validity}},{key:"willValidate",get:function(){return this._inputEl.willValidate}},{key:"disabled",get:function(){return this._disabled},set:function(e){this._disabled!==e&&(this._disabled=e,this._inputEl.disabled=e,this.toggleAttribute(v,e))}},{key:"maxLength",get:function(){return this._maxLength},set:function(e){if(e<0)throw new DOMException("Failed to set the 'maxLength' property on 'RapidInputTextField': The value provided (".concat(e,") is not positive or 0"));isNaN(e)||this._maxLength!==e&&(this._maxLength=e,this._inputEl.maxLength=e,this.setAttribute(m,e.toString()),this.checkValidity())}},{key:"minLength",get:function(){return this._minLength},set:function(e){if(e<0)throw new DOMException("Failed to set the 'minLength' property on 'RapidInputTextField': The value provided (".concat(e,") is not positive or 0"));isNaN(e)||this._minLength!==e&&(this._minLength=e,this._inputEl.minLength=e,this.setAttribute(p,e.toString()),this.checkValidity())}},{key:"name",get:function(){return this._name},set:function(e){e="".concat(e),this._name!==e&&(this._name=e,this.setAttribute(h,e))}},{key:"pattern",get:function(){return this._pattern},set:function(e){e="".concat(e),this._pattern!==e&&(this._pattern=e,this._inputEl.pattern=e,this.setAttribute(g,e),this.checkValidity())}},{key:"placeholder",get:function(){return this._placeholder},set:function(e){e="".concat(e),this._placeholder!==e&&(this._placeholder=e,this._inputEl.placeholder=e,this.setAttribute(A,e),this.checkValidity())}},{key:"readOnly",get:function(){return this._readOnly},set:function(e){this._readOnly!==e&&(this._readOnly=e,this._inputEl.readOnly=e,this.toggleAttribute(y,e),Object(u.toggleElementState)(this,u.PSEUDO_READONLY,e),this.checkValidity())}},{key:"required",get:function(){return this._required},set:function(e){this._required!==e&&(this._required=e,this._inputEl.required=e,this.toggleAttribute(S,e),this.checkValidity())}},{key:"tooltip",get:function(){return this._tooltip},set:function(e){e="".concat(e),this._tooltip!==e&&(this._tooltip=e,this._tooltipEl.textContent=e,this.setAttribute(b,e))}},{key:"value",get:function(){return this._value},set:function(e){e=null!==e?"".concat(e):"",this._value!==e&&(this._value=e,this._inputEl.value!==e&&(this._inputEl.value=e),this._resetEl.disabled=""===e,this._internals.setFormValue(e),Object(u.toggleElementState)(this,u.PSEUDO_BLANK,""===e),this.disabled||this.readOnly||this.dispatchEvent(new Event("change",{bubbles:!0,cancelable:!1,composed:!1})),this.checkValidity())}},{key:"checkValidity",value:function(){var e=this._inputEl.checkValidity();return Object(u.toggleElementState)(this,u.PSEUDO_INVALID,!this.validity.valid),this._errorMessageEl.textContent=this.validationMessage,e}},{key:"reportValidity",value:function(){return this._inputEl.reportValidity()}},{key:"setCustomValidity",value:function(e){this._inputEl.setCustomValidity(e),this.checkValidity()}},{key:"reset",value:function(){this.value="",this._inputEl.focus()}}],[{key:"formAssociated",get:function(){return!0}},{key:"observedAttributes",get:function(){return[v,m,p,h,g,A,y,S,b,w]}}]),o}(o(HTMLElement))},"./src/components/rapid-input-username-field/rapid-input-username-field.html":function(e,t,n){"use strict";n.r(t),t.default='
\n \n \n \n
\n
\n
\n'},"./src/components/rapid-input-username-field/rapid-input-username-field.scss":function(e,t,n){"use strict";n.r(t),t.default=":host {\n width: 100px;\n min-height: 25px;\n display: inline-flex;\n flex-direction: column;\n align-items: stretch;\n outline-style: none;\n outline-offset: -1px;\n}\n\n:host(:disabled) {\n color: var(--rapid-theme-color-tertiary, --rapid-color-gray-600);\n}\n\n:host([hidden]) {\n display: none;\n}\n\n.main {\n flex-grow: 1;\n display: flex;\n flex-direction: row;\n justify-content: stretch;\n align-items: stretch;\n position: relative;\n outline-style: none;\n}\n.main.desktop:focus-within {\n outline-style: solid;\n outline-width: 1px;\n outline-color: inherit;\n}\n\n[part=input] {\n flex-grow: 1;\n flex-shrink: 1;\n appearance: none;\n -webkit-appearance: none;\n margin: 0;\n outline-style: none;\n border: solid 1px var(--rapid-color-gray-600);\n border-radius: inherit;\n padding: var(--rapid-input-text-field-padding, 16px);\n overflow-x: hidden;\n color: currentColor;\n background-color: inherit;\n font: inherit;\n text-align: inherit;\n text-overflow: ellipsis;\n}\n[part=input]::placeholder {\n color: var(--rapid-theme-color-tertiary, currentColor);\n}\n\n[part=reset] {\n display: none;\n position: absolute;\n top: calc(50% - 24px / 2);\n right: var(--rapid-input-text-field-padding, 16px);\n width: 24px;\n height: 24px;\n outline-style: none;\n}\n\n:host(:focus-within) [part=input]:enabled:read-write {\n padding-right: calc(12px + 16px + var(--rapid-input-text-field-padding, 16px));\n}\n:host(:focus-within) [part=input]:enabled:read-write ~ [part=reset] {\n display: block;\n}\n\n[part=tooltip] {\n max-width: fit-content;\n display: none;\n margin: 5px 0;\n}\n\n:host(:focus-within:not([_rapid-invalid])) [part=tooltip]:not(:empty) {\n display: block;\n}\n\n[part=error-message] {\n max-width: fit-content;\n display: none;\n margin: 5px 0;\n color: var(--rapid-theme-color-negative, --rapid-color-red);\n}\n\n:host([_rapid-invalid]) [part=error-message]:not(:empty),\n:host(:invalid) [part=error-message]:not(:empty) {\n display: block;\n}"},"./src/components/rapid-input-username-field/rapid-input-username-field.ts":function(t,i,s){"use strict";s.r(i),s.d(i,"RapidInputUsernameFieldElement",(function(){return I}));var u=s("./src/utils/element-state.ts"),l=s("./src/utils/fix_webkit_bug216985.ts"),c=s("./src/components/rapid-input-username-field/rapid-input-username-field.html"),d=s("./src/components/rapid-input-username-field/rapid-input-username-field.scss"),f=document.createElement("template");f.innerHTML="\n\n").concat(c.default,"\n");var v="disabled",m="maxlength",p="minlength",h="name",g="pattern",A="placeholder",y="readonly",S="required",b="tooltip",w="value",I=function(t){r(o,t);var i=a(o);function o(){var t;return e(this,o),(t=i.call(this))._disabled=!1,t._maxLength=-1,t._minLength=-1,t._name="",t._pattern="",t._placeholder="",t._readOnly=!1,t._required=!1,t._tooltip="",t._value="",t._internals=t.attachInternals(),t.attachShadow({mode:"open",delegatesFocus:!0}).appendChild(Object(l.cloneTemplate)(f)),t._inputEl=t.shadowRoot.querySelector('[part="input"]'),t._resetEl=t.shadowRoot.querySelector('[part="reset"]'),t._tooltipEl=t.shadowRoot.querySelector('[part="tooltip"]'),t._errorMessageEl=t.shadowRoot.querySelector('[part="error-message"]'),t._inputEl.addEventListener("input",(function(){return t.value=t._inputEl.value})),t._resetEl.addEventListener("mousedown",(function(e){e.preventDefault(),t.reset()})),t}return n(o,[{key:"connectedCallback",value:function(){var e=this;Object(u.toggleElementState)(this,u.PSEUDO_BLANK,""===this.value),o.observedAttributes.forEach((function(t){var n=t;if(e.hasOwnProperty(n)){var r=e[n];delete e[n],e[n]=r}}))}},{key:"disconnectedCallback",value:function(){}},{key:"adoptedCallback",value:function(){}},{key:"attributeChangedCallback",value:function(e,t,n){if(t!==n)switch(e){case v:this.disabled=null!==n;break;case m:this.maxLength=parseInt(n);break;case h:this.name=n;break;case p:this.minLength=parseInt(n);break;case g:this.pattern=n;break;case A:this.placeholder=n;break;case y:this.readOnly=null!==n;break;case S:this.required=null!==n;break;case b:this.tooltip=n;break;case w:this.value=n}}},{key:"formAssociatedCallback",value:function(e){}},{key:"formDisabledCallback",value:function(e){this.disabled=e}},{key:"formResetCallback",value:function(){this.value=this.getAttribute(w)||""}},{key:"formStateRestoreCallback",value:function(e,t){}},{key:"form",get:function(){return this._internals.form}},{key:"labels",get:function(){return this._internals.labels}},{key:"validationMessage",get:function(){return this._inputEl.validationMessage}},{key:"validity",get:function(){return this._inputEl.validity}},{key:"willValidate",get:function(){return this._inputEl.willValidate}},{key:"disabled",get:function(){return this._disabled},set:function(e){this._disabled!==e&&(this._disabled=e,this._inputEl.disabled=e,this.toggleAttribute(v,e))}},{key:"maxLength",get:function(){return this._maxLength},set:function(e){if(e<0)throw new DOMException("Failed to set the 'maxLength' property on 'RapidInputTextField': The value provided (".concat(e,") is not positive or 0"));isNaN(e)||this._maxLength!==e&&(this._maxLength=e,this._inputEl.maxLength=e,this.setAttribute(m,e.toString()),this.checkValidity())}},{key:"minLength",get:function(){return this._minLength},set:function(e){if(e<0)throw new DOMException("Failed to set the 'minLength' property on 'RapidInputTextField': The value provided (".concat(e,") is not positive or 0"));isNaN(e)||this._minLength!==e&&(this._minLength=e,this._inputEl.minLength=e,this.setAttribute(p,e.toString()),this.checkValidity())}},{key:"name",get:function(){return this._name},set:function(e){e="".concat(e),this._name!==e&&(this._name=e,this.setAttribute(h,e))}},{key:"pattern",get:function(){return this._pattern},set:function(e){e="".concat(e),this._pattern!==e&&(this._pattern=e,this._inputEl.pattern=e,this.setAttribute(g,e),this.checkValidity())}},{key:"placeholder",get:function(){return this._placeholder},set:function(e){e="".concat(e),this._placeholder!==e&&(this._placeholder=e,this._inputEl.placeholder=e,this.setAttribute(A,e),this.checkValidity())}},{key:"readOnly",get:function(){return this._readOnly},set:function(e){this._readOnly!==e&&(this._readOnly=e,this._inputEl.readOnly=e,this.toggleAttribute(y,e),Object(u.toggleElementState)(this,u.PSEUDO_READONLY,e),this.checkValidity())}},{key:"required",get:function(){return this._required},set:function(e){this._required!==e&&(this._required=e,this._inputEl.required=e,this.toggleAttribute(S,e),this.checkValidity())}},{key:"tooltip",get:function(){return this._tooltip},set:function(e){e="".concat(e),this._tooltip!==e&&(this._tooltip=e,this._tooltipEl.textContent=e,this.setAttribute(b,e))}},{key:"value",get:function(){return this._value},set:function(e){e=null!==e?"".concat(e):"",this._value!==e&&(this._value=e,this._inputEl.value!==e&&(this._inputEl.value=e),this._resetEl.disabled=""===e,this._internals.setFormValue(e),Object(u.toggleElementState)(this,u.PSEUDO_BLANK,""===e),this.disabled||this.readOnly||this.dispatchEvent(new Event("change",{bubbles:!0,cancelable:!1,composed:!1})),this.checkValidity())}},{key:"checkValidity",value:function(){var e=this._inputEl.checkValidity();return Object(u.toggleElementState)(this,u.PSEUDO_INVALID,!this.validity.valid),this._errorMessageEl.textContent=this.validationMessage,e}},{key:"reportValidity",value:function(){return this._inputEl.reportValidity()}},{key:"setCustomValidity",value:function(e){this._inputEl.setCustomValidity(e),this.checkValidity()}},{key:"reset",value:function(){this.value="",this._inputEl.focus()}}],[{key:"formAssociated",get:function(){return!0}},{key:"observedAttributes",get:function(){return[v,m,p,h,g,A,y,S,b,w]}}]),o}(o(HTMLElement))},"./src/components/rapid-progress/rapid-progress.html":function(e,t,n){"use strict";n.r(t),t.default='\n'},"./src/components/rapid-progress/rapid-progress.scss":function(e,t,n){"use strict";n.r(t),t.default=":host {\n --progress-background-color: var(--rapid-theme-background-color);\n --progress-value-color: var(--rapid-color-orange);\n --progress-finished-color: var(--rapid-color-teal);\n display: inline-block;\n}\n:host[hidden] {\n display: none;\n}\n\n.progress {\n width: 100%;\n -webkit-appearance: none;\n appearance: none;\n}\n.progress::-webkit-progress-bar {\n height: 6px;\n background-color: var(--progress-background-color);\n border-radius: 3px;\n overflow: hidden;\n}\n.progress::-webkit-progress-value {\n background-color: var(--progress-value-color);\n border-radius: 3px;\n transition: width 0.5s;\n}\n\n.finished::-webkit-progress-value {\n background-color: var(--progress-finished-color);\n}"},"./src/components/rapid-progress/rapid-progress.ts":function(t,i,s){"use strict";s.r(i),s.d(i,"RapidProgressElement",(function(){return f}));var u=s("./src/components/rapid-progress/rapid-progress.html"),l=s("./src/components/rapid-progress/rapid-progress.scss"),c=document.createElement("template");c.innerHTML="\n\n").concat(u.default,"\n");var d="value",f=function(t){r(o,t);var i=a(o);function o(){var t;return e(this,o),(t=i.call(this))._min=0,t._max=100,t._value=0,t.attachShadow({mode:"open",delegatesFocus:!0}).appendChild(c.content.cloneNode(!0)),t._progressEl=t.shadowRoot.querySelector("progress"),t}return n(o,[{key:"connectedCallback",value:function(){var e=this;o.observedAttributes.forEach((function(t){var n=t;if(e.hasOwnProperty(n)){var r=e[n];delete e[n],e[n]=r}}))}},{key:"disconnectedCallback",value:function(){}},{key:"attributeChangedCallback",value:function(e,t,n){switch(e){case d:this.value=parseInt(n,10);break;case"max":this.max=parseInt(n,10)}}},{key:"value",get:function(){return this._value},set:function(e){this._value!==e&&(e=e||0,this._value=Math.min(Math.max(e,this._min),this._max),this._progressEl.value=e,this._value>=this._max?this._progressEl.classList.add("finished"):this._progressEl.classList.remove("finished"))}},{key:"max",get:function(){return this._max},set:function(e){this._max!==e&&e>0&&(e=e||100,this._max=e,this._progressEl.max=e)}}],[{key:"observedAttributes",get:function(){return[d,"max"]}}]),o}(o(HTMLElement))},"./src/icons/16x16/about-16.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/16x16/chevron-16.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/16x16/close-16.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n\n'},"./src/icons/16x16/data-16.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n \n \n\n'},"./src/icons/16x16/done-16.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n\n'},"./src/icons/16x16/eye-16.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n\n'},"./src/icons/16x16/index.ts":function(e,t,n){"use strict";n.r(t),n.d(t,"icons",(function(){return S}));var r=n("./src/icons/16x16/about-16.svg"),a=n("./src/icons/16x16/chevron-16.svg"),i=n("./src/icons/16x16/close-16.svg"),o=n("./src/icons/16x16/data-16.svg"),s=n("./src/icons/16x16/done-16.svg"),u=n("./src/icons/16x16/eye-16.svg"),l=n("./src/icons/16x16/logout-16.svg"),c=n("./src/icons/16x16/menu-16.svg"),d=n("./src/icons/16x16/notifications-16.svg"),f=n("./src/icons/16x16/pause-16.svg"),v=n("./src/icons/16x16/profile-16.svg"),m=n("./src/icons/16x16/scan-16.svg"),p=n("./src/icons/16x16/search-16.svg"),h=n("./src/icons/16x16/site-16.svg"),g=n("./src/icons/16x16/support-16.svg"),A=n("./src/icons/16x16/switch-16.svg"),y=n("./src/icons/16x16/transfer-16.svg"),S={"about-16":r.default,"chevron-16":a.default,"close-16":i.default,"data-16":o.default,"done-16":s.default,"eye-16":u.default,"logout-16":l.default,"menu-16":c.default,"notifications-16":d.default,"pause-16":f.default,"profile-16":v.default,"scan-16":m.default,"search-16":p.default,"site-16":h.default,"support-16":g.default,"switch-16":A.default,"transfer-16":y.default}},"./src/icons/16x16/logout-16.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n\n'},"./src/icons/16x16/menu-16.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n\n'},"./src/icons/16x16/notifications-16.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n\n'},"./src/icons/16x16/pause-16.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n\n'},"./src/icons/16x16/profile-16.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n\n'},"./src/icons/16x16/scan-16.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/16x16/search-16.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/16x16/site-16.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/16x16/support-16.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/16x16/switch-16.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/16x16/transfer-16.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n\n'},"./src/icons/24x24/about-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n \n\n\n'},"./src/icons/24x24/ambulance-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/24x24/app-switcher-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n\n'},"./src/icons/24x24/arrow-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/24x24/arrow-up-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/24x24/axial-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n\n'},"./src/icons/24x24/back-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/24x24/bed-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/24x24/calendar-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/24x24/camera-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/24x24/check-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/24x24/chevron-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/24x24/chevron-expand-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/24x24/clinical-info-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/24x24/clinical-trial-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/24x24/close-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/24x24/close-circle-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/24x24/controls-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/24x24/coronal-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/24x24/create-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n\n'},"./src/icons/24x24/data-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n \n \n\n'},"./src/icons/24x24/desktop-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n\n'},"./src/icons/24x24/download-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/24x24/expanded-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/24x24/expanded-closed-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/24x24/eye-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n\n'},"./src/icons/24x24/feed-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n\n'},"./src/icons/24x24/index.ts":function(e,t,n){"use strict";n.r(t),n.d(t,"icons",(function(){return ce}));var r=n("./src/icons/24x24/about-24.svg"),a=n("./src/icons/24x24/ambulance-24.svg"),i=n("./src/icons/24x24/app-switcher-24.svg"),o=n("./src/icons/24x24/arrow-24.svg"),s=n("./src/icons/24x24/arrow-up-24.svg"),u=n("./src/icons/24x24/axial-24.svg"),l=n("./src/icons/24x24/back-24.svg"),c=n("./src/icons/24x24/bed-24.svg"),d=n("./src/icons/24x24/calendar-24.svg"),f=n("./src/icons/24x24/camera-24.svg"),v=n("./src/icons/24x24/check-24.svg"),m=n("./src/icons/24x24/chevron-24.svg"),p=n("./src/icons/24x24/chevron-expand-24.svg"),h=n("./src/icons/24x24/clinical-info-24.svg"),g=n("./src/icons/24x24/clinical-trial-24.svg"),A=n("./src/icons/24x24/close-24.svg"),y=n("./src/icons/24x24/close-circle-24.svg"),S=n("./src/icons/24x24/controls-24.svg"),b=n("./src/icons/24x24/coronal-24.svg"),w=n("./src/icons/24x24/create-24.svg"),I=n("./src/icons/24x24/data-24.svg"),E=n("./src/icons/24x24/desktop-24.svg"),C=n("./src/icons/24x24/download-24.svg"),D=n("./src/icons/24x24/expanded-24.svg"),_=n("./src/icons/24x24/expanded-closed-24.svg"),M=n("./src/icons/24x24/eye-24.svg"),O=n("./src/icons/24x24/feed-24.svg"),P=n("./src/icons/24x24/levels-24.svg"),T=n("./src/icons/24x24/logout-24.svg"),x=n("./src/icons/24x24/medical-symbol-24.svg"),R=n("./src/icons/24x24/menu-24.svg"),L=n("./src/icons/24x24/messages-24.svg"),k=n("./src/icons/24x24/mip-24.svg"),N=n("./src/icons/24x24/neuro-24.svg"),F=n("./src/icons/24x24/notifications-24.svg"),B=n("./src/icons/24x24/notifications-off-24.svg"),U=n("./src/icons/24x24/notifications-on-24.svg"),V=n("./src/icons/24x24/orientation-24.svg"),j=n("./src/icons/24x24/patient-add-24.svg"),G=n("./src/icons/24x24/patient-24.svg"),H=n("./src/icons/24x24/patient-cards-24.svg"),Q=n("./src/icons/24x24/plus-24.svg"),q=n("./src/icons/24x24/profile-24.svg"),z=n("./src/icons/24x24/pulmonary-24.svg"),W=n("./src/icons/24x24/quality-24.svg"),Y=n("./src/icons/24x24/reset-24.svg"),Z=n("./src/icons/24x24/sagittal-24.svg"),K=n("./src/icons/24x24/scan-24.svg"),X=n("./src/icons/24x24/search-24.svg"),$=n("./src/icons/24x24/send-24.svg"),J=n("./src/icons/24x24/share-24.svg"),ee=n("./src/icons/24x24/site-24.svg"),te=n("./src/icons/24x24/sound-24.svg"),ne=n("./src/icons/24x24/speech-bubble-empty-24.svg"),re=n("./src/icons/24x24/spinner-24.svg"),ae=n("./src/icons/24x24/support-24.svg"),ie=n("./src/icons/24x24/system-24.svg"),oe=n("./src/icons/24x24/tracking-24.svg"),se=n("./src/icons/24x24/transfer-24.svg"),ue=n("./src/icons/24x24/usa-24.svg"),le=n("./src/icons/24x24/walk-in-24.svg"),ce={"ambulance-24":a.default,"about-24":r.default,"app-switcher-24":i.default,"arrow-24":o.default,"arrow-up-24":s.default,"axial-24":u.default,"back-24":l.default,"bed-24":c.default,"calendar-24":d.default,"camera-24":f.default,"check-24":v.default,"chevron-24":m.default,"chevron-expand-24":p.default,"clinical-info-24":h.default,"clinical-trial-24":g.default,"close-24":A.default,"close-circle-24":y.default,"controls-24":S.default,"coronal-24":b.default,"create-24":w.default,"data-24":I.default,"desktop-24":E.default,"download-24":C.default,"expanded-24":D.default,"expanded-closed-24":_.default,"eye-24":M.default,"feed-24":O.default,"levels-24":P.default,"logout-24":T.default,"medical-symbol-24":x.default,"menu-24":R.default,"messages-24":L.default,"mip-24":k.default,"neuro-24":N.default,"notifications-24":F.default,"notifications-off-24":B.default,"notifications-on-24":U.default,"orientation-24":V.default,"patient-24":G.default,"patient-add-24":j.default,"patient-cards-24":H.default,"plus-24":Q.default,"profile-24":q.default,"pulmonary-24":z.default,"quality-24":W.default,"reset-24":Y.default,"sagittal-24":Z.default,"scan-24":K.default,"search-24":X.default,"send-24":$.default,"share-24":J.default,"site-24":ee.default,"sound-24":te.default,"speech-bubble-empty-24":ne.default,"spinner-24":re.default,"support-24":ae.default,"system-24":ie.default,"tracking-24":oe.default,"transfer-24":se.default,"usa-24":ue.default,"walk-in-24":le.default}},"./src/icons/24x24/levels-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/24x24/logout-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n\n'},"./src/icons/24x24/medical-symbol-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/24x24/menu-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n\n'},"./src/icons/24x24/messages-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/24x24/mip-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n\n'},"./src/icons/24x24/neuro-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n\n'},"./src/icons/24x24/notifications-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/24x24/notifications-off-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n \n\n'},"./src/icons/24x24/notifications-on-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n\n'},"./src/icons/24x24/orientation-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/24x24/patient-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/24x24/patient-add-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/24x24/patient-cards-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/24x24/plus-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/24x24/profile-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n\n'},"./src/icons/24x24/pulmonary-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n\n'},"./src/icons/24x24/quality-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/24x24/reset-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/24x24/sagittal-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n\n'},"./src/icons/24x24/scan-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/24x24/search-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/24x24/send-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/24x24/share-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/24x24/site-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n\n'},"./src/icons/24x24/sound-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n\n'},"./src/icons/24x24/speech-bubble-empty-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n\n'},"./src/icons/24x24/spinner-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/24x24/support-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/24x24/system-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n\n'},"./src/icons/24x24/tracking-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n\n'},"./src/icons/24x24/transfer-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/24x24/usa-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n \n \n\n'},"./src/icons/24x24/walk-in-24.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/48x48/back-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/48x48/call-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/48x48/camera-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/48x48/catheter-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/48x48/chevron-left-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/48x48/chevron-right-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/48x48/close-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/48x48/comment-add-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/48x48/controls-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/48x48/create-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n\n'},"./src/icons/48x48/desktop-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/48x48/expand-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n\n'},"./src/icons/48x48/index.ts":function(e,t,n){"use strict";n.r(t),n.d(t,"icons",(function(){return K}));var r=n("./src/icons/48x48/back-48.svg"),a=n("./src/icons/48x48/call-48.svg"),i=n("./src/icons/48x48/camera-48.svg"),o=n("./src/icons/48x48/catheter-48.svg"),s=n("./src/icons/48x48/chevron-left-48.svg"),u=n("./src/icons/48x48/chevron-right-48.svg"),l=n("./src/icons/48x48/close-48.svg"),c=n("./src/icons/48x48/comment-add-48.svg"),d=n("./src/icons/48x48/controls-48.svg"),f=n("./src/icons/48x48/create-48.svg"),v=n("./src/icons/48x48/desktop-48.svg"),m=n("./src/icons/48x48/expand-48.svg"),p=n("./src/icons/48x48/medical-symbol-48.svg"),h=n("./src/icons/48x48/menu-48.svg"),g=n("./src/icons/48x48/messages-48.svg"),A=n("./src/icons/48x48/minus-48.svg"),y=n("./src/icons/48x48/mips-48.svg"),S=n("./src/icons/48x48/no-result-48.svg"),b=n("./src/icons/48x48/notifications-off-48.svg"),w=n("./src/icons/48x48/notifications-on-48.svg"),I=n("./src/icons/48x48/orientation-chest-front-48.svg"),E=n("./src/icons/48x48/orientation-chest-side-48.svg"),C=n("./src/icons/48x48/orientation-chest-top-48.svg"),D=n("./src/icons/48x48/orientation-head-front-48.svg"),_=n("./src/icons/48x48/orientation-head-rotational-48.svg"),M=n("./src/icons/48x48/orientation-head-side-48.svg"),O=n("./src/icons/48x48/orientation-head-top-48.svg"),P=n("./src/icons/48x48/patient-add-48.svg"),T=n("./src/icons/48x48/patient-timer-48.svg"),x=n("./src/icons/48x48/pause-48.svg"),R=n("./src/icons/48x48/play-48.svg"),L=n("./src/icons/48x48/plus-48.svg"),k=n("./src/icons/48x48/quality-48.svg"),N=n("./src/icons/48x48/refresh-48.svg"),F=n("./src/icons/48x48/refresh-double-48.svg"),B=n("./src/icons/48x48/report-48.svg"),U=n("./src/icons/48x48/rounded-close-48.svg"),V=n("./src/icons/48x48/scan-48.svg"),j=n("./src/icons/48x48/settings-48.svg"),G=n("./src/icons/48x48/share-48.svg"),H=n("./src/icons/48x48/spinner-48.svg"),Q=n("./src/icons/48x48/switch-48.svg"),q=n("./src/icons/48x48/tracking-48.svg"),z=n("./src/icons/48x48/transfer-48.svg"),W=n("./src/icons/48x48/wwwl-48.svg"),Y=n("./src/icons/48x48/zoom-in-48.svg"),Z=n("./src/icons/48x48/zoom-out-48.svg"),K={"back-48":r.default,"call-48":a.default,"camera-48":i.default,"catheter-48":o.default,"chevron-left-48":s.default,"chevron-right-48":u.default,"close-48":l.default,"comment-add-48":c.default,"controls-48":d.default,"create-48":f.default,"desktop-48":v.default,"expand-48":m.default,"medical-symbol-48":p.default,"menu-48":h.default,"messages-48":g.default,"minus-48":A.default,"mips-48":y.default,"no-result-48":S.default,"notifications-off-48":b.default,"notifications-on-48":w.default,"orientation-chest-front-48":I.default,"orientation-chest-side-48":E.default,"orientation-chest-top-48":C.default,"orientation-head-front-48":D.default,"orientation-head-rotational-48":_.default,"orientation-head-side-48":M.default,"orientation-head-top-48":O.default,"patient-add-48":P.default,"patient-timer-48":T.default,"pause-48":x.default,"play-48":R.default,"plus-48":L.default,"quality-48":k.default,"refresh-48":N.default,"refresh-double-48":F.default,"report-48":B.default,"rounded-close-48":U.default,"scan-48":V.default,"settings-48":j.default,"share-48":G.default,"spinner-48":H.default,"switch-48":Q.default,"tracking-48":q.default,"transfer-48":z.default,"wwwl-48":W.default,"zoom-in-48":Y.default,"zoom-out-48":Z.default}},"./src/icons/48x48/medical-symbol-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/48x48/menu-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n\n'},"./src/icons/48x48/messages-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/48x48/minus-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/48x48/mips-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n \n MIP\n \n \n\n'},"./src/icons/48x48/no-result-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n\n'},"./src/icons/48x48/notifications-off-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n \n\n'},"./src/icons/48x48/notifications-on-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n\n'},"./src/icons/48x48/orientation-chest-front-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n\n'},"./src/icons/48x48/orientation-chest-side-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n\n'},"./src/icons/48x48/orientation-chest-top-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n\n'},"./src/icons/48x48/orientation-head-front-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n\n'},"./src/icons/48x48/orientation-head-rotational-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n \n \n \n \n \n\n'},"./src/icons/48x48/orientation-head-side-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n\n'},"./src/icons/48x48/orientation-head-top-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n\n'},"./src/icons/48x48/patient-add-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/48x48/patient-timer-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n\n'},"./src/icons/48x48/pause-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n\n'},"./src/icons/48x48/play-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/48x48/plus-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/48x48/quality-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/48x48/refresh-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/48x48/refresh-double-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n\n'},"./src/icons/48x48/report-48.svg":function(e,t,n){"use strict";n.r(t),t.default=''},"./src/icons/48x48/rounded-close-48.svg":function(e,t,n){"use strict";n.r(t),t.default=''},"./src/icons/48x48/scan-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/48x48/settings-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/48x48/share-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n\n'},"./src/icons/48x48/spinner-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/48x48/switch-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/48x48/tracking-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n\n'},"./src/icons/48x48/transfer-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n\n'},"./src/icons/48x48/wwwl-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n\n'},"./src/icons/48x48/zoom-in-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/48x48/zoom-out-48.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/72x72/face-id-72.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n \n \n\n'},"./src/icons/72x72/fingerprint-id-72.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n \n \n \n \n \n \n \n \n \n\n'},"./src/icons/72x72/index.ts":function(e,t,n){"use strict";n.r(t),n.d(t,"icons",(function(){return s}));var r=n("./src/icons/72x72/face-id-72.svg"),a=n("./src/icons/72x72/fingerprint-id-72.svg"),i=n("./src/icons/72x72/spinner-72.svg"),o=n("./src/icons/72x72/tick-round-72.svg"),s={"face-id-72":r.default,"fingerprint-id-72":a.default,"spinner-72":i.default,"tick-round-72":o.default}},"./src/icons/72x72/spinner-72.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n\n'},"./src/icons/72x72/tick-round-72.svg":function(e,t,n){"use strict";n.r(t),t.default='\n \n \n \n \n\n'},"./src/icons/index.ts":function(e,t,n){"use strict";n.r(t),n.d(t,"icons",(function(){return s}));var r=n("./src/icons/16x16/index.ts"),a=n("./src/icons/24x24/index.ts"),i=n("./src/icons/48x48/index.ts"),o=n("./src/icons/72x72/index.ts"),s=Object.assign(Object.assign(Object.assign(Object.assign({},r.icons),a.icons),i.icons),o.icons)},"./src/index.ts":function(e,t,n){"use strict";n.r(t);var r=n("./src/components/index.ts");n.d(t,"RapidButtonElement",(function(){return r.RapidButtonElement})),n.d(t,"RapidFormFieldElement",(function(){return r.RapidFormFieldElement})),n.d(t,"RapidFormFieldsetElement",(function(){return r.RapidFormFieldsetElement})),n.d(t,"RapidIconElement",(function(){return r.RapidIconElement})),n.d(t,"RapidIconButtonElement",(function(){return r.RapidIconButtonElement})),n.d(t,"RapidInputDateTimeFieldElement",(function(){return r.RapidInputDateTimeFieldElement})),n.d(t,"RapidInputNumberFieldElement",(function(){return r.RapidInputNumberFieldElement})),n.d(t,"RapidInputPasswordFieldElement",(function(){return r.RapidInputPasswordFieldElement})),n.d(t,"RapidInputPhoneFieldElement",(function(){return r.RapidInputPhoneFieldElement})),n.d(t,"RapidInputSelectElement",(function(){return r.RapidInputSelectElement})),n.d(t,"RapidInputSelectMultipleElement",(function(){return r.RapidInputSelectMultipleElement})),n.d(t,"RapidInputTextFieldElement",(function(){return r.RapidInputTextFieldElement})),n.d(t,"RapidInputUsernameFieldElement",(function(){return r.RapidInputUsernameFieldElement})),n.d(t,"RapidInputCheckboxElement",(function(){return r.RapidInputCheckboxElement})),n.d(t,"RapidCheckboxElement",(function(){return r.RapidCheckboxElement})),n.d(t,"RapidCheckboxGroupElement",(function(){return r.RapidCheckboxGroupElement})),n.d(t,"RapidProgressElement",(function(){return r.RapidProgressElement}));var a=n("./src/utils/browser-utils.ts"),i=n("./src/utils/layout-types.ts"),o="";if(Object(a.isSafari)()?o="safari":Object(a.isChrome)()?o="chrome":Object(a.isEdge)()?o="edge":Object(a.isFirefox)()&&(o="firefox"),window.document.documentElement.setAttribute("data-rapid-design-system-user-agent",o),window.customElements.get("rapid-button"))throw new Error(" custom element is already defined.");if(window.RapidButtonElement=r.RapidButtonElement,window.customElements.define("rapid-button",r.RapidButtonElement),window.customElements.get("rapid-checkbox"))throw new Error(" custom element is already defined.");if(window.RapidCheckboxElement=r.RapidCheckboxElement,window.customElements.define("rapid-checkbox",r.RapidCheckboxElement),window.customElements.get("rapid-checkbox-group"))throw new Error(" custom element is already defined.");if(window.RapidCheckboxGroupElement=r.RapidCheckboxGroupElement,window.customElements.define("rapid-checkbox-group",r.RapidCheckboxGroupElement),window.customElements.get("rapid-form-field"))throw new Error(" custom element is already defined.");if(window.RapidFormFieldElement=r.RapidFormFieldElement,window.customElements.define("rapid-form-field",r.RapidFormFieldElement),window.customElements.get("rapid-form-fieldset"))throw new Error(" custom element is already defined.");if(window.RapidFormFieldsetElement=r.RapidFormFieldsetElement,window.customElements.define("rapid-form-fieldset",r.RapidFormFieldsetElement),window.customElements.get("rapid-icon"))throw new Error(" custom element is already defined.");if(window.RapidIconElement=r.RapidIconElement,window.customElements.define("rapid-icon",r.RapidIconElement),window.customElements.get("rapid-icon-button"))throw new Error(" custom element is already defined.");if(window.RapidIconButtonElement=r.RapidIconButtonElement,window.customElements.define("rapid-icon-button",r.RapidIconButtonElement),window.customElements.get("rapid-input-checkbox"))throw new Error(" custom element is already defined.");if(window.RapidInputCheckboxElement=r.RapidInputCheckboxElement,window.customElements.define("rapid-input-checkbox",r.RapidInputCheckboxElement),window.customElements.get("rapid-input-datetime-field"))throw new Error(" custom element is already defined.");if(window.RapidInputDateTimeFieldElement=r.RapidInputDateTimeFieldElement,window.customElements.define("rapid-input-datetime-field",r.RapidInputDateTimeFieldElement),window.customElements.get("rapid-input-number-field"))throw new Error(" custom element is already defined.");if(window.RapidInputNumberFieldElement=r.RapidInputNumberFieldElement,window.customElements.define("rapid-input-number-field",r.RapidInputNumberFieldElement),window.customElements.get("rapid-input-password-field"))throw new Error(" custom element is already defined.");if(window.RapidInputPasswordFieldElement=r.RapidInputPasswordFieldElement,window.customElements.define("rapid-input-password-field",r.RapidInputPasswordFieldElement),window.customElements.get("rapid-input-phone-field"))throw new Error(" custom element is already defined.");if(window.RapidInputPhoneFieldElement=r.RapidInputPhoneFieldElement,window.customElements.define("rapid-input-phone-field",r.RapidInputPhoneFieldElement),window.customElements.get("rapid-input-select"))throw new Error(" custom element is already defined.");if(window.RapidInputSelectElement=r.RapidInputSelectElement,window.customElements.define("rapid-input-select",r.RapidInputSelectElement),window.customElements.get("rapid-input-select-multiple"))throw new Error(" custom element is already defined.");if(window.RapidInputSelectMultipleElement=r.RapidInputSelectMultipleElement,window.customElements.define("rapid-input-select-multiple",r.RapidInputSelectMultipleElement),window.customElements.get("rapid-input-text-field"))throw new Error(" custom element is already defined.");if(window.RapidInputTextFieldElement=r.RapidInputTextFieldElement,window.customElements.define("rapid-input-text-field",r.RapidInputTextFieldElement),window.customElements.get("rapid-input-username-field"))throw new Error(" custom element is already defined.");if(window.RapidInputUsernameFieldElement=r.RapidInputUsernameFieldElement,window.customElements.define("rapid-input-username-field",r.RapidInputUsernameFieldElement),window.customElements.get("rapid-progress"))throw new Error(" custom element is already defined.");window.RapidProgressElement=r.RapidProgressElement,window.customElements.define("rapid-progress",r.RapidProgressElement),Object(i.init)()},"./src/utils/browser-utils.ts":function(e,t,n){"use strict";function r(){return-1!==navigator.vendor.indexOf("Apple")&&-1===navigator.userAgent.indexOf("CriOS")&&-1===navigator.userAgent.indexOf("FxiOS")}function a(){return-1!==navigator.userAgent.indexOf("Firefox")||-1!==navigator.userAgent.indexOf("FxiOS")}function i(){return-1!==navigator.userAgent.indexOf("Edge/")}function o(){return-1!==navigator.userAgent.indexOf("Edg/")}function s(){return-1!==navigator.userAgent.indexOf(" OPR/")}function u(){return-1!==navigator.vendor.indexOf("Google")&&-1!==navigator.userAgent.indexOf("Chrome")&&!i()&&!o()&&!s()||-1!==navigator.userAgent.indexOf("CriOS")}function l(){return/MSIE|Trident/.test(navigator.userAgent)}n.r(t),n.d(t,"isSafari",(function(){return r})),n.d(t,"isFirefox",(function(){return a})),n.d(t,"isEdge",(function(){return i})),n.d(t,"isChromiumEdge",(function(){return o})),n.d(t,"isOpera",(function(){return s})),n.d(t,"isChrome",(function(){return u})),n.d(t,"isInternetExplorer",(function(){return l}))},"./src/utils/element-state.ts":function(e,t,n){"use strict";n.r(t),n.d(t,"PSEUDO_ACTIVE",(function(){return r})),n.d(t,"PSEUDO_BLANK",(function(){return a})),n.d(t,"PSEUDO_INVALID",(function(){return i})),n.d(t,"PSEUDO_CHECKED",(function(){return o})),n.d(t,"PSEUDO_DISABLED",(function(){return s})),n.d(t,"PSEUDO_READONLY",(function(){return u})),n.d(t,"hasElementState",(function(){return l})),n.d(t,"addElementState",(function(){return c})),n.d(t,"removeElementState",(function(){return d})),n.d(t,"toggleElementState",(function(){return f}));var r="_rapid-active",a="_rapid-blank",i="_rapid-invalid",o="_rapid-checked",s="_rapid-disabled",u="_rapid-readonly";function l(e,t){return e.hasAttribute(t)}function c(e,t){e.toggleAttribute(t,!0)}function d(e,t){e.toggleAttribute(t,!1)}function f(e,t,n){e.toggleAttribute(t,n)}},"./src/utils/fix_webkit_bug216985.ts":function(e,t,n){"use strict";function r(e){var t=document.createDocumentFragment(),n=document.createElement("div");for(n.innerHTML=e.innerHTML;n.firstElementChild;)t.appendChild(n.firstElementChild);return t}n.r(t),n.d(t,"cloneTemplate",(function(){return r}))},"./src/utils/html-collection.ts":function(t,r,a){"use strict";a.r(r),a.d(r,"RapidHTMLCollection",(function(){return i}));var i=function(){function t(n){e(this,t),this._els=n;for(var r=0;r2&&void 0!==arguments[2]?arguments[2]:0,i=(0,r.ZP)(e),o=i.viewport;a.trackingIdentifiersByViewportId[o.id]={trackingUniqueIdentifiers:t,activeIndex:n}}function o(e){var t=(0,r.ZP)(e).viewport;return a.trackingIdentifiersByViewportId[t.id]?a.trackingIdentifiersByViewportId[t.id]:{trackingUniqueIdentifiers:[]}}},21922:function(e,t,n){"use strict";n.d(t,{K8:function(){return i},Yc:function(){return a},mc:function(){return o}});var r={DEFAULT_CONTEXT:"CORNERSTONE",enabledElements:{}},a=function(e,t,n){var a=n||r.DEFAULT_CONTEXT;r.enabledElements[e]={element:t,context:a}},i=function(e){return r.enabledElements[e]},o=function(){r.enabledElements={}}},63130:function(e,t,n){"use strict";n.d(t,{Z:function(){return a}});var r=n(27306);function a(e,t,n){if(e)return function(e){var t=r.get("instance",e);return{SOPInstanceUID:t.SOPInstanceUID,SeriesInstanceUID:t.SeriesInstanceUID,StudyInstanceUID:t.StudyInstanceUID,frameNumber:t.frameNumber||1}}(e)}},56789:function(e,t,n){"use strict";n.d(t,{Z:function(){return He},I:function(){return Ve}});var r=n(32735),a=n(60216),i=n.n(a),o=n(48710),s=n(38531),u=n(67013),l=n(37725);function c(e){return function(e){if(Array.isArray(e))return d(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return d(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return d(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1||!e.trackedSeries.includes(t.SeriesInstanceUID)},hasNotIgnoredSRSeriesForHydration:function(e,t){return!e.ignoredSRSeriesForHydration.includes(t.SeriesInstanceUID)},isNewStudy:function(e,t){return!e.ignoredSeries.includes(t.SeriesInstanceUID)&&e.trackedStudy!==t.StudyInstanceUID},isNewSeries:function(e,t){return!e.ignoredSeries.includes(t.SeriesInstanceUID)&&!e.trackedSeries.includes(t.SeriesInstanceUID)}}};function b(e){return b="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},b(e)}function w(){w=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},a=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",o=r.toStringTag||"@@toStringTag";function s(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{s({},"")}catch(e){s=function(e,t,n){return e[t]=n}}function u(e,t,n,r){var a=t&&t.prototype instanceof d?t:d,i=Object.create(a.prototype),o=new C(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(a,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===a)throw i;return _()}for(n.method=a,n.arg=i;;){var o=n.delegate;if(o){var s=S(o,n);if(s){if(s===c)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var u=l(e,t,n);if("normal"===u.type){if(r=n.done?"completed":"suspendedYield",u.arg===c)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(r="completed",n.method="throw",n.arg=u.arg)}}}(e,n,o),i}function l(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var c={};function d(){}function f(){}function v(){}var m={};s(m,a,(function(){return this}));var p=Object.getPrototypeOf,h=p&&p(p(D([])));h&&h!==t&&n.call(h,a)&&(m=h);var g=v.prototype=d.prototype=Object.create(m);function A(e){["next","throw","return"].forEach((function(t){s(e,t,(function(e){return this._invoke(t,e)}))}))}function y(e,t){function r(a,i,o,s){var u=l(e[a],e,i);if("throw"!==u.type){var c=u.arg,d=c.value;return d&&"object"==b(d)&&n.call(d,"__await")?t.resolve(d.__await).then((function(e){r("next",e,o,s)}),(function(e){r("throw",e,o,s)})):t.resolve(d).then((function(e){c.value=e,o(c)}),(function(e){return r("throw",e,o,s)}))}s(u.arg)}var a;this._invoke=function(e,n){function i(){return new t((function(t,a){r(e,n,t,a)}))}return a=a?a.then(i,i):i()}}function S(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,S(e,t),"throw"===t.method))return c;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return c}var r=l(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,c;var a=r.arg;return a?a.done?(t[e.resultName]=a.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,c):a:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,c)}function I(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(I,this),this.reset(!0)}function D(e){if(e){var t=e[a];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var s=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(s&&u){if(this.prev=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),c}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var a=r.arg;E(n)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:D(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),c}},e}function I(e,t,n,r,a,i,o){try{var s=e[i](o),u=s.value}catch(e){return void n(e)}s.done?t(u):Promise.resolve(u).then(r,a)}var E=-1,C=0,D=3;function _(e,t){return new Promise((function(n,r){var a=[{id:"prompt-begin-tracking-cancel",type:"cancel",text:"No",value:C},{id:"prompt-begin-tracking-no-do-not-ask-again",type:"secondary",text:"No, do not ask again",value:E},{id:"prompt-begin-tracking-yes",type:"primary",text:"Yes",value:D}];e.show({viewportIndex:t,id:"measurement-tracking-prompt-begin-tracking",type:"info",message:"Track measurements for this series?",actions:a,onSubmit:function(t){e.hide(),n(t)},onOutsideClick:function(){e.hide(),n(C)}})}))}var M=function(e,t,n){var r=e.servicesManager,a=(e.extensionManager,r.services.UIViewportDialogService),i=n.viewportIndex,o=n.StudyInstanceUID,s=n.SeriesInstanceUID;return new Promise(function(){var e,t=(e=w().mark((function e(t,n){var r;return w().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,_(a,i);case 2:r=e.sent,t({userResponse:r,StudyInstanceUID:o,SeriesInstanceUID:s,viewportIndex:i});case 4:case"end":return e.stop()}}),e)})),function(){var t=this,n=arguments;return new Promise((function(r,a){var i=e.apply(t,n);function o(e){I(i,r,a,o,s,"next",e)}function s(e){I(i,r,a,o,s,"throw",e)}o(void 0)}))});return function(e,n){return t.apply(this,arguments)}}())};function O(e){return O="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},O(e)}function P(){P=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},a=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",o=r.toStringTag||"@@toStringTag";function s(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{s({},"")}catch(e){s=function(e,t,n){return e[t]=n}}function u(e,t,n,r){var a=t&&t.prototype instanceof d?t:d,i=Object.create(a.prototype),o=new I(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(a,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===a)throw i;return C()}for(n.method=a,n.arg=i;;){var o=n.delegate;if(o){var s=S(o,n);if(s){if(s===c)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var u=l(e,t,n);if("normal"===u.type){if(r=n.done?"completed":"suspendedYield",u.arg===c)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(r="completed",n.method="throw",n.arg=u.arg)}}}(e,n,o),i}function l(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var c={};function d(){}function f(){}function v(){}var m={};s(m,a,(function(){return this}));var p=Object.getPrototypeOf,h=p&&p(p(E([])));h&&h!==t&&n.call(h,a)&&(m=h);var g=v.prototype=d.prototype=Object.create(m);function A(e){["next","throw","return"].forEach((function(t){s(e,t,(function(e){return this._invoke(t,e)}))}))}function y(e,t){function r(a,i,o,s){var u=l(e[a],e,i);if("throw"!==u.type){var c=u.arg,d=c.value;return d&&"object"==O(d)&&n.call(d,"__await")?t.resolve(d.__await).then((function(e){r("next",e,o,s)}),(function(e){r("throw",e,o,s)})):t.resolve(d).then((function(e){c.value=e,o(c)}),(function(e){return r("throw",e,o,s)}))}s(u.arg)}var a;this._invoke=function(e,n){function i(){return new t((function(t,a){r(e,n,t,a)}))}return a=a?a.then(i,i):i()}}function S(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,S(e,t),"throw"===t.method))return c;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return c}var r=l(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,c;var a=r.arg;return a?a.done?(t[e.resultName]=a.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,c):a:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,c)}function b(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function w(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function I(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(b,this),this.reset(!0)}function E(e){if(e){var t=e[a];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var s=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(s&&u){if(this.prev=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),w(n),c}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var a=r.arg;w(n)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:E(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),c}},e}function T(e,t,n,r,a,i,o){try{var s=e[i](o),u=s.value}catch(e){return void n(e)}s.done?t(u):Promise.resolve(u).then(r,a)}var x=0,R=1,L=2,k=3;function N(e,t){return new Promise((function(n,r){var a=[{type:"cancel",text:"Cancel",value:x},{type:"secondary",text:"Create new report",value:R},{type:"primary",text:"Add to existing report",value:L}];e.show({viewportIndex:t,type:"info",message:"Do you want to add this measurement to the existing report?",actions:a,onSubmit:function(t){e.hide(),n(t)},onOutsideClick:function(){e.hide(),n(x)}})}))}function F(e,t){return new Promise((function(n,r){var a=[{type:"cancel",text:"Cancel",value:x},{type:"secondary",text:"Save",value:R},{type:"primary",text:"Discard",value:k}];e.show({viewportIndex:t,type:"warning",message:"You have existing tracked measurements. What would you like to do with your existing tracked measurements?",actions:a,onSubmit:function(t){e.hide(),n(t)},onOutsideClick:function(){e.hide(),n(x)}})}))}var B=function(e,t,n){var r=e.servicesManager,a=(e.extensionManager,r.services.UIViewportDialogService),i=n.viewportIndex,o=n.StudyInstanceUID,s=n.SeriesInstanceUID;return new Promise(function(){var e,n=(e=P().mark((function e(n,r){var u;return P().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,N(a,i);case 2:if((u=e.sent)!==R){e.next=12;break}if(!t.isDirty){e.next=10;break}return e.next=7,F(a,i);case 7:e.t0=e.sent,e.next=11;break;case 10:e.t0=k;case 11:u=e.t0;case 12:n({userResponse:u,StudyInstanceUID:o,SeriesInstanceUID:s,viewportIndex:i,isBackupSave:!1});case 13:case"end":return e.stop()}}),e)})),function(){var t=this,n=arguments;return new Promise((function(r,a){var i=e.apply(t,n);function o(e){T(i,r,a,o,s,"next",e)}function s(e){T(i,r,a,o,s,"throw",e)}o(void 0)}))});return function(e,t){return n.apply(this,arguments)}}())};function U(e){return U="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},U(e)}function V(){V=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},a=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",o=r.toStringTag||"@@toStringTag";function s(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{s({},"")}catch(e){s=function(e,t,n){return e[t]=n}}function u(e,t,n,r){var a=t&&t.prototype instanceof d?t:d,i=Object.create(a.prototype),o=new I(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(a,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===a)throw i;return C()}for(n.method=a,n.arg=i;;){var o=n.delegate;if(o){var s=S(o,n);if(s){if(s===c)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var u=l(e,t,n);if("normal"===u.type){if(r=n.done?"completed":"suspendedYield",u.arg===c)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(r="completed",n.method="throw",n.arg=u.arg)}}}(e,n,o),i}function l(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var c={};function d(){}function f(){}function v(){}var m={};s(m,a,(function(){return this}));var p=Object.getPrototypeOf,h=p&&p(p(E([])));h&&h!==t&&n.call(h,a)&&(m=h);var g=v.prototype=d.prototype=Object.create(m);function A(e){["next","throw","return"].forEach((function(t){s(e,t,(function(e){return this._invoke(t,e)}))}))}function y(e,t){function r(a,i,o,s){var u=l(e[a],e,i);if("throw"!==u.type){var c=u.arg,d=c.value;return d&&"object"==U(d)&&n.call(d,"__await")?t.resolve(d.__await).then((function(e){r("next",e,o,s)}),(function(e){r("throw",e,o,s)})):t.resolve(d).then((function(e){c.value=e,o(c)}),(function(e){return r("throw",e,o,s)}))}s(u.arg)}var a;this._invoke=function(e,n){function i(){return new t((function(t,a){r(e,n,t,a)}))}return a=a?a.then(i,i):i()}}function S(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,S(e,t),"throw"===t.method))return c;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return c}var r=l(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,c;var a=r.arg;return a?a.done?(t[e.resultName]=a.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,c):a:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,c)}function b(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function w(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function I(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(b,this),this.reset(!0)}function E(e){if(e){var t=e[a];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var s=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(s&&u){if(this.prev=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),w(n),c}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var a=r.arg;w(n)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:E(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),c}},e}function j(e,t,n,r,a,i,o){try{var s=e[i](o),u=s.value}catch(e){return void n(e)}s.done?t(u):Promise.resolve(u).then(r,a)}var G=0,H=1,Q=3,q=4;function z(e,t){return new Promise((function(n,r){var a=[{type:"cancel",text:"No",value:G},{type:"secondary",text:"No, do not ask again for this series",value:q},{type:"primary",text:"Yes",value:Q}];e.show({viewportIndex:t,type:"info",message:"Track measurements for this series?",actions:a,onSubmit:function(t){e.hide(),n(t)},onOutsideClick:function(){e.hide(),n(G)}})}))}function W(e,t){return new Promise((function(n,r){var a=[{type:"cancel",text:"Cancel",value:G},{type:"secondary",text:"No, discard previously tracked series & measurements",value:Q},{type:"primary",text:"Yes",value:H}];e.show({viewportIndex:t,type:"warning",message:"Measurements cannot span across multiple studies. Do you want to save your tracked measurements?",actions:a,onSubmit:function(t){e.hide(),n(t)},onOutsideClick:function(){e.hide(),n(G)}})}))}var Y=function(e,t,n){var r=e.servicesManager,a=(e.extensionManager,r.services.UIViewportDialogService),i=n.viewportIndex,o=n.StudyInstanceUID,s=n.SeriesInstanceUID;return new Promise(function(){var e,n=(e=V().mark((function e(n,r){var u;return V().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,z(a,i);case 2:if((u=e.sent)!==Q){e.next=12;break}if(!t.isDirty){e.next=10;break}return e.next=7,W(a,i);case 7:e.t0=e.sent,e.next=11;break;case 10:e.t0=Q;case 11:u=e.t0;case 12:n({userResponse:u,StudyInstanceUID:o,SeriesInstanceUID:s,viewportIndex:i,isBackupSave:!1});case 13:case"end":return e.stop()}}),e)})),function(){var t=this,n=arguments;return new Promise((function(r,a){var i=e.apply(t,n);function o(e){j(i,r,a,o,s,"next",e)}function s(e){j(i,r,a,o,s,"throw",e)}o(void 0)}))});return function(e,t){return n.apply(this,arguments)}}())},Z=n(20112);function K(e){return K="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},K(e)}function X(){X=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},a=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",o=r.toStringTag||"@@toStringTag";function s(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{s({},"")}catch(e){s=function(e,t,n){return e[t]=n}}function u(e,t,n,r){var a=t&&t.prototype instanceof d?t:d,i=Object.create(a.prototype),o=new I(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(a,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===a)throw i;return C()}for(n.method=a,n.arg=i;;){var o=n.delegate;if(o){var s=S(o,n);if(s){if(s===c)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var u=l(e,t,n);if("normal"===u.type){if(r=n.done?"completed":"suspendedYield",u.arg===c)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(r="completed",n.method="throw",n.arg=u.arg)}}}(e,n,o),i}function l(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var c={};function d(){}function f(){}function v(){}var m={};s(m,a,(function(){return this}));var p=Object.getPrototypeOf,h=p&&p(p(E([])));h&&h!==t&&n.call(h,a)&&(m=h);var g=v.prototype=d.prototype=Object.create(m);function A(e){["next","throw","return"].forEach((function(t){s(e,t,(function(e){return this._invoke(t,e)}))}))}function y(e,t){function r(a,i,o,s){var u=l(e[a],e,i);if("throw"!==u.type){var c=u.arg,d=c.value;return d&&"object"==K(d)&&n.call(d,"__await")?t.resolve(d.__await).then((function(e){r("next",e,o,s)}),(function(e){r("throw",e,o,s)})):t.resolve(d).then((function(e){c.value=e,o(c)}),(function(e){return r("throw",e,o,s)}))}s(u.arg)}var a;this._invoke=function(e,n){function i(){return new t((function(t,a){r(e,n,t,a)}))}return a=a?a.then(i,i):i()}}function S(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,S(e,t),"throw"===t.method))return c;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return c}var r=l(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,c;var a=r.arg;return a?a.done?(t[e.resultName]=a.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,c):a:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,c)}function b(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function w(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function I(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(b,this),this.reset(!0)}function E(e){if(e){var t=e[a];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var s=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(s&&u){if(this.prev=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),w(n),c}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var a=r.arg;w(n)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:E(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),c}},e}function $(e,t,n,r,a,i,o){try{var s=e[i](o),u=s.value}catch(e){return void n(e)}s.done?t(u):Promise.resolve(u).then(r,a)}function J(e){return function(){var t=this,n=arguments;return new Promise((function(r,a){var i=e.apply(t,n);function o(e){$(i,r,a,o,s,"next",e)}function s(e){$(i,r,a,o,s,"throw",e)}o(void 0)}))}}function ee(){return(ee=J(X().mark((function e(t,n,r,a,i){var o,s,u,l,c,d,f;return X().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return o=t.services,s=o.DisplaySetService,u=o.UINotificationService,l=o.UIDialogService,c=l.create({showOverlay:!0,isDraggable:!1,centralize:!0,content:te}),e.prev=2,e.next=5,n.runCommand("storeMeasurements",{measurementData:a,dataSource:r,additionalFindingTypes:["ArrowAnnotate"],options:i},"CORNERSTONE_STRUCTURED_REPORT");case 5:return d=e.sent,Z.Z.addInstances([d],!0),f=s.getMostRecentDisplaySet(),u.show({title:"Create Report",message:"Measurements saved successfully",type:"success"}),e.abrupt("return",[f]);case 12:e.prev=12,e.t0=e.catch(2),u.show({title:"Create Report",message:e.t0.message||"Failed to store measurements",type:"error"});case 15:return e.prev=15,l.dismiss({id:c}),e.finish(15);case 18:case"end":return e.stop()}}),e,null,[[2,12,15,18]])})))).apply(this,arguments)}function te(){return r.createElement("div",{className:"text-primary-active"},"Loading...")}var ne=function(e,t,n,r,a){return ee.apply(this,arguments)},re={NO_NEVER:-1,CANCEL:0,CREATE_REPORT:1,ADD_SERIES:2,SET_STUDY_AND_SERIES:3,NO_NOT_FOR_SERIES:4};function ae(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function ie(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var s=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(s&&u){if(this.prev=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),w(n),c}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var a=r.arg;w(n)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:E(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),c}},e}function ve(e,t,n,r,a,i,o){try{var s=e[i](o),u=s.value}catch(e){return void n(e)}s.done?t(u):Promise.resolve(u).then(r,a)}var me=function(e,t,n){var r,a,i,o=e.servicesManager,s=e.commandsManager,u=e.extensionManager,l=o.services,c=l.UIDialogService,d=l.MeasurementService,f=l.DisplaySetService,v=void 0===n.viewportIndex?n.data.viewportIndex:n.viewportIndex,m=void 0===n.isBackupSave?n.data.isBackupSave:n.isBackupSave,p=null==n||null===(r=n.data)||void 0===r?void 0:r.StudyInstanceUID,h=null==n||null===(a=n.data)||void 0===a?void 0:a.SeriesInstanceUID,g=t.trackedStudy,A=t.trackedSeries;return new Promise(function(){var e,t=(e=fe().mark((function e(t,n){var r,a,l,y,S,b,w;return fe().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,se(c);case 2:if((r=e.sent).action!==re.CREATE_REPORT){e.next=15;break}return a=u.getDataSources(),l=a[0],y=d.getMeasurements(),S=y.filter((function(e){return g===e.referenceStudyUID&&A.includes(e.referenceSeriesUID)})),b=void 0===r.value||""===r.value?"Research Derived Series":r.value,w=ce(f),e.next=12,ne(o,s,l,S,{SeriesDescription:b,SeriesNumber:w});case 12:i=e.sent,e.next=16;break;case 15:r.action;case 16:t({userResponse:r.action,createdDisplaySetInstanceUIDs:i,StudyInstanceUID:p,SeriesInstanceUID:h,viewportIndex:v,isBackupSave:m});case 17:case"end":return e.stop()}}),e)})),function(){var t=this,n=arguments;return new Promise((function(r,a){var i=e.apply(t,n);function o(e){ve(i,r,a,o,s,"next",e)}function s(e){ve(i,r,a,o,s,"throw",e)}o(void 0)}))});return function(e,n){return t.apply(this,arguments)}}())},pe=n(27306),he=n(53794),ge=n(84334);var Ae=n(22737);function ye(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,a,i=[],o=!0,s=!1;try{for(n=n.call(e);!(o=(r=n.next()).done)&&(i.push(r.value),!t||i.length!==t);o=!0);}catch(e){s=!0,a=e}finally{try{o||null==n.return||n.return()}finally{if(s)throw a}}return i}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Se(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Se(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Se(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var s=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(s&&u){if(this.prev=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),w(n),c}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var a=r.arg;w(n)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:E(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),c}},e}function xe(e,t,n,r,a,i,o){try{var s=e[i](o),u=s.value}catch(e){return void n(e)}s.done?t(u):Promise.resolve(u).then(r,a)}var Re=0,Le=5;function ke(e,t){return new Promise((function(n,r){var a=[{type:"secondary",text:"No",value:Re},{type:"primary",text:"Yes",value:Le}];e.show({viewportIndex:t,type:"info",message:"Do you want to continue tracking measurements for this study?",actions:a,onSubmit:function(t){e.hide(),n(t)},onOutsideClick:function(){e.hide(),n(Re)}})}))}var Ne=function(e,t,n){var r=e.servicesManager,a=e.extensionManager,i=r.services,o=i.UIViewportDialogService,s=i.DisplaySetService,u=n.viewportIndex,l=n.displaySetInstanceUID,c=s.getDisplaySetByUID(l);return new Promise(function(){var e,t=(e=Te().mark((function e(t,i){var s,d,f,v;return Te().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,ke(o,u);case 2:(s=e.sent)===Le&&(console.warn("!! HYDRATING STRUCTURED REPORT"),v=_e({servicesManager:r,extensionManager:a},l),d=v.StudyInstanceUID,f=v.SeriesInstanceUIDs),t({userResponse:s,displaySetInstanceUID:n.displaySetInstanceUID,srSeriesInstanceUID:c.SeriesInstanceUID,viewportIndex:u,StudyInstanceUID:d,SeriesInstanceUIDs:f});case 5:case"end":return e.stop()}}),e)})),function(){var t=this,n=arguments;return new Promise((function(r,a){var i=e.apply(t,n);function o(e){xe(i,r,a,o,s,"next",e)}function s(e){xe(i,r,a,o,s,"throw",e)}o(void 0)}))});return function(e,n){return t.apply(this,arguments)}}())};function Fe(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,a,i=[],o=!0,s=!1;try{for(n=n.call(e);!(o=(r=n.next()).done)&&(i.push(r.value),!t||i.length!==t);o=!0);}catch(e){s=!0,a=e}finally{try{o||null==n.return||n.return()}finally{if(s)throw a}}return i}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Be(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Be(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Be(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0){var n=t.data.createdDisplaySetInstanceUIDs[0].displaySetInstanceUID;f.setDisplaySetsForViewport({viewportIndex:t.data.viewportIndex,displaySetInstanceUIDs:[n]})}},discardPreviouslyTrackedMeasurements:function(e,t){for(var r=n.services.MeasurementService,a=r.getMeasurements().filter((function(t){return e.prevTrackedSeries.includes(t.referenceSeriesUID)})).map((function(e){return e.id})),i=0;i0){var e,t=m[v];if(!t||null==t||null===(e=t.displaySetInstanceUIDs)||void 0===e||!e.length)return;var r=n.services.DisplaySetService.getDisplaySetByUID(t.displaySetInstanceUIDs[0]);r.SOPClassHandlerId===je&&!r.isLoaded&&r.load&&r.load(),r.SOPClassHandlerId===je&&!0===r.isRehydratable&&(console.log("sending event...",A),b("PROMPT_HYDRATE_SR",{displaySetInstanceUID:r.displaySetInstanceUID,SeriesInstanceUID:r.SeriesInstanceUID,viewportIndex:v}))}}),[v,b,n.services,m]),r.createElement(Ue.Provider,{value:[A,b]},l)}Ge.propTypes={children:i().oneOf([i().func,i().node]),servicesManager:i().object.isRequired,commandsManager:i().object.isRequired,extensionManager:i().object.isRequired};var He=function(e){var t=e.servicesManager,n=e.extensionManager,r=e.commandsManager,a=Ge.bind(null,{servicesManager:t,extensionManager:n,commandsManager:r});return[{name:"TrackedMeasurementsContext",context:Ue,provider:a}]}},76643:function(e,t,n){"use strict";n.d(t,{ZP:function(){return a}});n(10573);var r={getAttribute:function(e,t){return e&&e.Value&&e.Value.length?function(e){function t(e){var t=e.length;return 0==t?"0000":1==t?"000"+e:2==t?"00"+e:3==t?"0"+e:e}for(var n="",r=0;r0&&void 0!==arguments[0]?arguments[0]:{},t=e.requestOptions,n=arguments.length>1?arguments[1]:void 0,r={},a=n&&n.getAccessToken&&n.getAccessToken();return t&&t.auth?"function"==typeof t.auth?r.Authorization=t.auth(t):r.Authorization="Basic ".concat(btoa(t.auth)):a&&(r.Authorization="Bearer ".concat(a)),r},getModalities:function(e,t){if(!e&&!t)return{};var n=e||{vr:"CS",Value:[]};if(t){if(!n.vr||n.vr!==t.vr)return t;for(var r=0;r=0;--r){var i=this.tryEntries[r],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=a.call(i,"catchLoc"),u=a.call(i,"finallyLoc");if(s&&u){if(this.prev=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&a.call(r,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),f}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var a=r.arg;E(n)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:D(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),f}},e}function a(e,t,n,r,a,i,o){try{var s=e[i](o),u=s.value}catch(e){return void n(e)}s.done?t(u):Promise.resolve(u).then(r,a)}var i={create:function(e){var t,n,i=e.query,o=e.retrieve,s=e.store,u=e.reject,l=e.initialize,c=e.deleteStudyMetadataPromise,d=e.getImageIdsForDisplaySet,f=e.getImageIdsForInstance,v=e.getImageIdsForStudy,m=void 0===v?null:v,p=e.onNewStudy,h=void 0===p?null:p,g=e.setNewStudy,A=void 0===g?null:g,y=e.updateConfig,S=void 0===y?null:y,b={dicom:(t=r().mark((function e(t){return r().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:throw new Error("store.dicom(naturalizedDicom, StudyInstanceUID) not implemented for dataSource.");case 1:case"end":return e.stop()}}),e)})),n=function(){var e=this,n=arguments;return new Promise((function(r,i){var o=t.apply(e,n);function s(e){a(o,r,i,s,u,"next",e)}function u(e){a(o,r,i,s,u,"throw",e)}s(void 0)}))},function(e){return n.apply(this,arguments)})};return{query:i||{studies:{mapParams:function(e){return e},requestResults:function(){},processResults:function(e){return e}},series:{},instances:{}},retrieve:o||{series:{}},reject:u||{},store:s||b,initialize:l,deleteStudyMetadataPromise:c,getImageIdsForDisplaySet:d,getImageIdsForInstance:f,getImageIdsForStudy:m,setNewStudy:A,onNewStudy:h,updateConfig:S}}};t.Z=i},96798:function(e,t,n){"use strict";var r=n(2524);function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function i(e){if(null==e)throw new TypeError("Cannot destructure undefined")}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};i(n),o(this,e),this.getCommand=function(e,n){var r,a=[];if(n){var i=t.getContext(n);i&&a.push(i)}else Object.keys(t.contexts).forEach((function(e){a.push(t.getContext(e))}));if(0!==a.length)return a.forEach((function(t){t[e]&&(r=t[e])})),r},this.contexts={}}var t,n,u;return t=e,n=[{key:"createContext",value:function(e){if(e)return this.contexts[e]?this.clearContext(e):void(this.contexts[e]={})}},{key:"getContext",value:function(e){var t=this.contexts[e];if(t)return t}},{key:"clearContext",value:function(e){e&&(this.contexts[e]={})}},{key:"registerCommand",value:function(e,t,n){if("object"===a(n)){var r=this.getContext(e);r&&(r[t]=n)}}},{key:"runCommand",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0,a=this.getCommand(e,n);if(a){var i=a.commandFn,o=Object.assign({},a.options,t);return"function"!=typeof i?void r.Z.warn('No commandFn was defined for command "'.concat(e,'"')):i(o)}r.Z.warn('Command "'.concat(e,'" not found in current context'))}}],n&&s(t.prototype,n),u&&s(t,u),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.Z=u},68818:function(e,t,n){"use strict";var r=n(7957),a=n.n(r),i=n(2524),o=n(78034);function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function u(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:[];try{var n=this.getValidDefinitions(t);n.forEach((function(t){return e.registerHotkeys(t)})),localStorage.setItem("hotkey-definitions",JSON.stringify(n))}catch(e){var r=this._servicesManager.services.UINotificationService;r.show({title:"Hotkeys Manager",message:"Error while setting hotkeys",type:"error"})}}},{key:"setDefaultHotKeys",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=this.getValidDefinitions(e);this.hotkeyDefaults=t}},{key:"getValidDefinitions",value:function(e){return Array.isArray(e)?c(e):this._parseToArrayLike(e)}},{key:"getValidHotkeyDefinitions",value:function(e){var t=this.getValidDefinitions(e),n={};return t.forEach((function(e){var t=e.commandName,r=e.commandOptions,i=a()({commandName:t,commandOptions:r});n[i]=e})),n}},{key:"_parseToArrayLike",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=u({},t);return Object.entries(n).map((function(t){return e._parseToHotKeyObj(t[0],t[1])}))}},{key:"_parseToHotKeyObj",value:function(e,t){return u({commandName:e},t)}},{key:"registerHotkeys",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.commandName,n=e.commandOptions,r=void 0===n?{}:n,o=e.keys,s=e.label,u=e.isEditable;if(!t)throw new Error('No command was defined for hotkey "'.concat(o,'"'));var l=a()({commandName:t,commandOptions:r}),c=Object.keys(r).length?JSON.stringify(r):"no",d=this.hotkeyDefinitions[l];if(d){var f=d.keys;this._unbindHotkeys(t,f),i.Z.info("[hotkeys] Unbinding ".concat(t," with ").concat(c," options from ").concat(f))}this.hotkeyDefinitions[l]={commandName:t,commandOptions:r,keys:o,label:s,isEditable:u},this._bindHotkeys(t,r,o),i.Z.info("[hotkeys] Binding ".concat(t," with ").concat(c," options to ").concat(o))}},{key:"restoreDefaultBindings",value:function(){this.setHotkeys(this.hotkeyDefaults)}},{key:"destroy",value:function(){this.hotkeyDefaults=[],this.hotkeyDefinitions={},o.Z.reset()}},{key:"_bindHotkeys",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2?arguments[2]:void 0,a=""===r||void 0===r;if(!a){var i=r instanceof Array,s=i?r.join("+"):r;o.Z.bind(s,(function(r){r.preventDefault(),r.stopPropagation(),t._commandsManager.runCommand(e,u({evt:r},n))}))}}},{key:"_unbindHotkeys",value:function(e,t){if(""!==t&&void 0!==t)if(t instanceof Array){var n=t.join("+");this._unbindHotkeys(e,n)}else o.Z.unbind(t)}}],n&&f(t.prototype,n),r&&f(t,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.Z=v},11875:function(e,t,n){"use strict";var r=n(33464),a=n(25685);function i(e,t,n){return i=o()?Reflect.construct.bind():function(e,t,n){var r=[null];r.push.apply(r,t);var a=new(Function.bind.apply(e,r));return n&&s(a,n.prototype),a},i.apply(null,arguments)}function o(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}function s(e,t){return s=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},s(e,t)}function u(e){return function(e){if(Array.isArray(e))return l(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return l(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return l(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n1){var i=Number.parseInt(e||1),o=(r?Object.values(r[0]):[]).map((function(e){return e[0]})).filter((function(e){return void 0!==e&&"object"===g(e)})),s=(n?Object.values(n[i-1]):[]).map((function(e){return e[0]})).filter((function(e){return void 0!==e&&"object"===g(e)}));return Object.assign.apply(Object,[{frameNumber:i},t].concat(p(Object.values(o)),p(Object.values(s))))}return t};function y(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function S(e){for(var t=1;t2&&void 0!==arguments[2]?arguments[2]:{fallback:!1},r=this._getInstance(t);if(e===D)return r;if(this.customMetadata.has(e)){var a=this.customMetadata.get(e),i=(0,l.Z)(t);if(a[i])return a[i]}return this.getTagFromInstance(e,r,n)}},{key:"getTag",value:function(e,t,n){return this.get(e,t,n)}},{key:"getInstance",value:function(e){return this.get(D,e)}},{key:"getTagFromInstance",value:function(e,t){if(t)return t[e]?t[e]:this._getCornerstoneWADOImageLoaderTag(e,t)}},{key:"_getCornerstoneWADOImageLoaderTag",value:function(e,t){var n;switch(e){case C.GENERAL_SERIES_MODULE:var r,a,i=t.SeriesDate,o=t.SeriesTime;i&&(r=u().parseDA(i)),o&&(a=u().parseTM(o)),n={modality:t.Modality,seriesInstanceUID:t.SeriesInstanceUID,seriesNumber:(0,m.Z)(t.SeriesNumber),studyInstanceUID:t.StudyInstanceUID,seriesDate:r,seriesTime:a};break;case C.PATIENT_STUDY_MODULE:n={patientAge:(0,m.Z)(t.PatientAge),patientSize:(0,m.Z)(t.PatientSize),patientWeight:(0,m.Z)(t.PatientWeight)};break;case C.PATIENT_DEMOGRAPHIC_MODULE:n={patientSex:t.PatientSex};break;case C.IMAGE_PLANE_MODULE:var s,l,f,p,h=t.ImageOrientationPatient,g=function(e){var t=e.PixelSpacing,n=e.ImagerPixelSpacing,r=e.SOPClassUID,a=e.PixelSpacingCalibrationType,i=e.PixelSpacingCalibrationDescription,o=e.EstimatedRadiographicMagnificationFactor,s=e.SequenceOfUltrasoundRegions,u=["1.2.840.10008.5.1.4.1.1.1","1.2.840.10008.5.1.4.1.1.1.1","1.2.840.10008.5.1.4.1.1.1.1.1","1.2.840.10008.5.1.4.1.1.1.2","1.2.840.10008.5.1.4.1.1.1.2.1","1.2.840.10008.5.1.4.1.1.1.3","1.2.840.10008.5.1.4.1.1.1.3.1","1.2.840.10008.5.1.4.1.1.12.1","1.2.840.10008.5.1.4.1.1.12.1.1","1.2.840.10008.5.1.4.1.1.12.2","1.2.840.10008.5.1.4.1.1.12.2.1","1.2.840.10008.5.1.4.1.1.12.3"].includes(r),l="NOT_APPLICABLE";if(u&&!n)return{PixelSpacing:t,type:"UNKNOWN",isProjection:u};if(t&&n&&t===n)return{PixelSpacing:t,type:"DETECTOR",isProjection:u};if(t&&n&&t!==n)return{PixelSpacing:t,type:"CALIBRATED",isProjection:u,PixelSpacingCalibrationType:a,PixelSpacingCalibrationDescription:i};if(!t&&n){var f=n;return o?f=n.map((function(e){return e/o})):c.Z.info("EstimatedRadiographicMagnificationFactor was not present. Unable to correct ImagerPixelSpacing."),{PixelSpacing:f,isProjection:u}}if(s&&"object"===d(s))return{PixelSpacing:[10*s.PhysicalDeltaX,10*s.PhysicalDeltaY]};if(s&&Array.isArray(s)&&s.length>1)c.Z.warn("Sequence of Ultrasound Regions > one entry. This is not yet implemented, all measurements will be shown in pixels.");else if(!1===u&&!n)return{PixelSpacing:t,type:l,isProjection:u};c.Z.info("Unknown combination of PixelSpacing and ImagerPixelSpacing identified. Unable to determine spacing.")}(t),A=g.PixelSpacing;A&&(s=A[0],l=A[1]),h&&(f=h.slice(0,3),p=h.slice(3,6)),n={frameOfReferenceUID:t.FrameOfReferenceUID,rows:(0,m.Z)(t.Rows),columns:(0,m.Z)(t.Columns),imageOrientationPatient:(0,m.Z)(h),rowCosines:(0,m.Z)(f||[0,1,0]),columnCosines:(0,m.Z)(p||[0,0,-1]),imagePositionPatient:(0,m.Z)(t.ImagePositionPatient||[0,0,0]),sliceThickness:(0,m.Z)(t.SliceThickness),sliceLocation:(0,m.Z)(t.SliceLocation),pixelSpacing:(0,m.Z)(A||1),rowPixelSpacing:(0,m.Z)(s||1),columnPixelSpacing:(0,m.Z)(l||1)};break;case C.IMAGE_PIXEL_MODULE:n={samplesPerPixel:(0,m.Z)(t.SamplesPerPixel),photometricInterpretation:t.PhotometricInterpretation,rows:(0,m.Z)(t.Rows),columns:(0,m.Z)(t.Columns),bitsAllocated:(0,m.Z)(t.BitsAllocated),bitsStored:(0,m.Z)(t.BitsStored),highBit:(0,m.Z)(t.HighBit),pixelRepresentation:(0,m.Z)(t.PixelRepresentation),planarConfiguration:(0,m.Z)(t.PlanarConfiguration),pixelAspectRatio:(0,m.Z)(t.PixelAspectRatio),smallestPixelValue:(0,m.Z)(t.SmallestPixelValue),largestPixelValue:(0,m.Z)(t.LargestPixelValue),redPaletteColorLookupTableDescriptor:(0,m.Z)(t.RedPaletteColorLookupTableDescriptor),greenPaletteColorLookupTableDescriptor:(0,m.Z)(t.GreenPaletteColorLookupTableDescriptor),bluePaletteColorLookupTableDescriptor:(0,m.Z)(t.BluePaletteColorLookupTableDescriptor),redPaletteColorLookupTableData:v(t,"RedPaletteColorLookupTableData","RedPaletteColorLookupTableDescriptor"),greenPaletteColorLookupTableData:v(t,"GreenPaletteColorLookupTableData","GreenPaletteColorLookupTableDescriptor"),bluePaletteColorLookupTableData:v(t,"BluePaletteColorLookupTableData","BluePaletteColorLookupTableDescriptor")};break;case C.VOI_LUT_MODULE:var y=t.WindowCenter,S=t.WindowWidth,b=t.VOILUTFunction;if(void 0===y||void 0===S)return;var w=Array.isArray(y)?y:[y],I=Array.isArray(S)?S:[S];n={windowCenter:(0,m.Z)(w),windowWidth:(0,m.Z)(I),voiLUTFunction:b};break;case C.MODALITY_LUT_MODULE:var E=t.RescaleIntercept,D=t.RescaleSlope;if(void 0===E||void 0===D)return;n={rescaleIntercept:(0,m.Z)(t.RescaleIntercept),rescaleSlope:(0,m.Z)(t.RescaleSlope),rescaleType:t.RescaleType};break;case C.SOP_COMMON_MODULE:n={sopClassUID:t.SOPClassUID,sopInstanceUID:t.SOPInstanceUID};break;case C.PET_ISOTOPE_MODULE:var _=t.RadiopharmaceuticalInformationSequence;if(_){var M=Array.isArray(_)?_[0]:_,O=M.RadiopharmaceuticalStartTime,P=M.RadionuclideTotalDose,T=M.RadionuclideHalfLife;n={radiopharmaceuticalInfo:{radiopharmaceuticalStartTime:u().parseTM(O),radionuclideTotalDose:P,radionuclideHalfLife:T}}}break;case C.OVERLAY_PLANE_MODULE:for(var x=[],R=0;R<=30;R+=2){var L="60".concat(R.toString(16));3===L.length&&(L="600".concat(R.toString(16)));var k=t["".concat(L,"3000")];if(k){var N="".concat(L,"0010"),F="".concat(L,"0011"),B="".concat(L,"0040"),U="".concat(L,"0050"),V="".concat(L,"0022"),j="".concat(L,"1500"),G="".concat(L,"1301"),H="".concat(L,"1302"),Q="".concat(L,"1303"),q=t[U],z={rows:t[N],columns:t[F],type:t[B],x:q[0],y:q[1],pixelData:k,description:t[V],label:t[j],roiArea:t[G],roiMean:t[H],roiStandardDeviation:t[Q]};x.push(z)}}n={overlays:x};break;case C.PATIENT_MODULE:var W,Y=t.PatientName;Y&&(W=Y.Alphabetic),n={patientName:W,patientId:t.PatientID};break;case C.GENERAL_IMAGE_MODULE:n={sopInstanceUid:t.SOPInstanceUID,instanceNumber:(0,m.Z)(t.InstanceNumber),lossyImageCompression:t.LossyImageCompression,lossyImageCompressionRatio:t.LossyImageCompressionRatio,lossyImageCompressionMethod:t.LossyImageCompressionMethod};break;case C.GENERAL_STUDY_MODULE:n={studyDescription:t.StudyDescription,studyDate:t.StudyDate,studyTime:t.StudyTime,accessionNumber:t.AccessionNumber};break;case C.CINE_MODULE:n={frameTime:t.FrameTime};break;default:return}return n}},{key:"getUIDsFromImageID",value:function(e){if(e.startsWith("wadors:")||e.startsWith("streaming-wadors:")){var t=e.split("/studies/")[1].split("/");return{StudyInstanceUID:t[0],SeriesInstanceUID:t[2],SOPInstanceUID:t[4],frameNumber:t[6]}}if(e.includes("?requestType=WADO")){var n=o.parse(e);return{StudyInstanceUID:n.studyUID,SeriesInstanceUID:n.seriesUID,SOPInstanceUID:n.objectUID,frameNumber:n.frameNumber}}var r;r=/^(http|https):\/\//.test(e)?e:(0,l.Z)(e);var a=this.imageURIToUIDs.get(r),i=e.split(/\/frames\//)[1];return a&&void 0!==i?S(S({},a),{},{frameNumber:i}):a}}],n&&w(t.prototype,n),r&&w(t,r),Object.defineProperty(t,"prototype",{writable:!1}),e}(),E=new I,C={GENERAL_SERIES_MODULE:"generalSeriesModule",PATIENT_STUDY_MODULE:"patientStudyModule",IMAGE_PLANE_MODULE:"imagePlaneModule",IMAGE_PIXEL_MODULE:"imagePixelModule",VOI_LUT_MODULE:"voiLutModule",MODALITY_LUT_MODULE:"modalityLutModule",SOP_COMMON_MODULE:"sopCommonModule",PET_ISOTOPE_MODULE:"petIsotopeModule",OVERLAY_PLANE_MODULE:"overlayPlaneModule",PATIENT_DEMOGRAPHIC_MODULE:"patientDemographicModule",PATIENT_MODULE:"patientModule",GENERAL_IMAGE_MODULE:"generalImageModule",GENERAL_STUDY_MODULE:"generalStudyModule",CINE_MODULE:"cineModule"},D="instance",_={MetadataProvider:E,CommandsManager:r.Z,HotkeysManager:a.Z,ImageSet:i.Z}},22324:function(e,t,n){"use strict";n.d(t,{ZP:function(){return a}});var r={1:{description:"Soft tissue",window:"400",level:"40"},2:{description:"Lung",window:"1500",level:"-600"},3:{description:"Liver",window:"150",level:"90"},4:{description:"Bone",window:"2500",level:"480"},5:{description:"Brain",window:"80",level:"40"},6:{description:"Trest",window:"1",level:"1"},7:{description:"Empty1",window:"Empty1",level:"Empty1"},8:{description:"Empty2",window:"Empty2",level:"Empty2"},9:{description:"Empty3",window:"Empty3",level:"Empty3"},10:{description:"Empty4",window:"Empty4",level:"Empty4"}},a={hotkeyBindings:[{commandName:"setToolActive",commandOptions:{toolName:"Zoom"},label:"Zoom",keys:["z"],isEditable:!0},{commandName:"scaleUpViewport",label:"Zoom In",keys:["+"],isEditable:!0},{commandName:"scaleDownViewport",label:"Zoom Out",keys:["-"],isEditable:!0},{commandName:"fitViewportToWindow",label:"Zoom to Fit",keys:["="],isEditable:!0},{commandName:"rotateViewportCW",label:"Rotate Right",keys:["r"],isEditable:!0},{commandName:"rotateViewportCCW",label:"Rotate Left",keys:["l"],isEditable:!0},{commandName:"flipViewportHorizontal",label:"Flip Horizontally",keys:["h"],isEditable:!0},{commandName:"flipViewportVertical",label:"Flip Vertically",keys:["v"],isEditable:!0},{commandName:"toggleCine",label:"Cine",keys:["c"]},{commandName:"invertViewport",label:"Invert",keys:["i"],isEditable:!0},{commandName:"incrementActiveViewport",label:"Next Image Viewport",keys:["right"],isEditable:!0},{commandName:"decrementActiveViewport",label:"Previous Image Viewport",keys:["left"],isEditable:!0},{commandName:"nextImage",label:"Next Image",keys:["down"],isEditable:!0},{commandName:"previousImage",label:"Previous Image",keys:["up"],isEditable:!0},{commandName:"firstImage",label:"First Image",keys:["home"],isEditable:!0},{commandName:"lastImage",label:"Last Image",keys:["end"],isEditable:!0},{commandName:"resetViewport",label:"Reset",keys:["space"],isEditable:!0},{commandName:"cancelMeasurement",label:"Cancel Cornerstone Measurement",keys:["esc"]},{commandName:"setWindowLevel",commandOptions:r[1],label:"W/L Preset 1",keys:["1"]},{commandName:"setWindowLevel",commandOptions:r[2],label:"W/L Preset 2",keys:["2"]},{commandName:"setWindowLevel",commandOptions:r[3],label:"W/L Preset 3",keys:["3"]},{commandName:"setWindowLevel",commandOptions:r[4],label:"W/L Preset 4",keys:["4"]},{commandName:"setWindowLevel",commandOptions:r[5],label:"W/L Preset 5",keys:["5"]},{commandName:"setWindowLevel",commandOptions:r[6],label:"W/L Preset 6",keys:["6"]},{commandName:"setWindowLevel",commandOptions:r[7],label:"W/L Preset 7",keys:["7"]},{commandName:"setWindowLevel",commandOptions:r[8],label:"W/L Preset 8",keys:["8"]},{commandName:"setWindowLevel",commandOptions:r[9],label:"W/L Preset 9",keys:["9"]}],windowLevelPresets:r}},9159:function(e,t){"use strict";t.Z={getHTTPErrorHandler:function(){return null}}},49823:function(e,t,n){"use strict";n.d(t,{Z:function(){return m}});var r=n(4676),a=n(2524);function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function o(){o=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},a=r.iterator||"@@iterator",s=r.asyncIterator||"@@asyncIterator",u=r.toStringTag||"@@toStringTag";function l(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{l({},"")}catch(e){l=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var a=t&&t.prototype instanceof v?t:v,i=Object.create(a.prototype),o=new C(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(a,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===a)throw i;return _()}for(n.method=a,n.arg=i;;){var o=n.delegate;if(o){var s=w(o,n);if(s){if(s===f)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var u=d(e,t,n);if("normal"===u.type){if(r=n.done?"completed":"suspendedYield",u.arg===f)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(r="completed",n.method="throw",n.arg=u.arg)}}}(e,n,o),i}function d(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var f={};function v(){}function m(){}function p(){}var h={};l(h,a,(function(){return this}));var g=Object.getPrototypeOf,A=g&&g(g(D([])));A&&A!==t&&n.call(A,a)&&(h=A);var y=p.prototype=v.prototype=Object.create(h);function S(e){["next","throw","return"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(a,o,s,u){var l=d(e[a],e,o);if("throw"!==l.type){var c=l.arg,f=c.value;return f&&"object"==i(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,s,u)}),(function(e){r("throw",e,s,u)})):t.resolve(f).then((function(e){c.value=e,s(c)}),(function(e){return r("throw",e,s,u)}))}u(l.arg)}var a;this._invoke=function(e,n){function i(){return new t((function(t,a){r(e,n,t,a)}))}return a=a?a.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return f;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return f}var r=d(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,f;var a=r.arg;return a?a.done?(t[e.resultName]=a.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,f):a:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,f)}function I(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(I,this),this.reset(!0)}function D(e){if(e){var t=e[a];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var s=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(s&&u){if(this.prev=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),f}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var a=r.arg;E(n)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:D(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),f}},e}function s(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,a,i=[],o=!0,s=!1;try{for(n=n.call(e);!(o=(r=n.next()).done)&&(i.push(r.value),!t||i.length!==t);o=!0);}catch(e){s=!0,a=e}finally{try{o||null==n.return||n.return()}finally{if(s)throw a}}return i}(e,t)||l(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function u(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=l(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,a=function(){};return{s:a,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw i}}}}function l(e,t){if(e){if("string"==typeof e)return c(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(e,t):void 0}}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&void 0!==m[1]?m[1]:[],a=u(t),e.prev=2,a.s();case 4:if((i=a.n()).done){e.next=23;break}if(l=i.value,c=Array.isArray(l),e.prev=7,!c){e.next=14;break}return d=s(l,2),f=d[0],v=d[1],e.next=12,n.registerExtension(f,v,r);case 12:e.next=16;break;case 14:return e.next=16,n.registerExtension(l,{},r);case 16:e.next=21;break;case 18:e.prev=18,e.t0=e.catch(7),console.error(e.t0);case 21:e.next=4;break;case 23:e.next=28;break;case 25:e.prev=25,e.t1=e.catch(2),a.e(e.t1);case 28:return e.prev=28,a.f(),e.finish(28);case 31:case"end":return e.stop()}}),e,null,[[2,25,28,31],[7,18]])})));return function(t){return e.apply(this,arguments)}}(),this.registerExtension=function(){var e=f(o().mark((function e(t){var i,s,u,l=arguments;return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(i=l.length>1&&void 0!==l[1]?l[1]:{},s=l.length>2&&void 0!==l[2]?l[2]:[],t){e.next=4;break}throw new Error("Attempting to register a null/undefined extension.");case 4:if(u=t.id){e.next=8;break}throw a.Z.warn(t),new Error("Extension ID not set");case 8:if(!n.registeredExtensionIds.includes(u)){e.next=11;break}return a.Z.warn("Extension ID ".concat(u," has already been registered. Exiting before duplicating modules.")),e.abrupt("return");case 11:if(!t.preRegistration){e.next=14;break}return e.next=14,t.preRegistration({servicesManager:n._servicesManager,commandsManager:n._commandsManager,hotkeysManager:n._hotkeysManager,extensionManager:n,appConfig:n._appConfig,configuration:i});case 14:t.onModeEnter&&(n._extensionLifeCycleHooks.onModeEnter[u]=t.onModeEnter),t.onModeExit&&(n._extensionLifeCycleHooks.onModeExit[u]=t.onModeExit),n.moduleTypeNames.forEach((function(e){var a=n._getExtensionModule(e,t,u,i);if(a){switch(e){case r.Z.COMMANDS:n._initCommandsModule(a);break;case r.Z.DATA_SOURCE:n._initDataSourcesModule(a,u,s);break;case r.Z.HANGING_PROTOCOL:n._initHangingProtocolsModule(a,u);case r.Z.TOOLBAR:case r.Z.VIEWPORT:case r.Z.PANEL:case r.Z.SOP_CLASS_HANDLER:case r.Z.CONTEXT:case r.Z.LAYOUT_TEMPLATE:case r.Z.UTILITY:a.forEach((function(t){n.modulesMap["".concat(u,".").concat(e,".").concat(t.name)]=t}));break;default:throw new Error("Module type invalid: ".concat(e))}n.modules[e].push({extensionId:u,module:a})}})),n.registeredExtensionIds.push(u);case 18:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),this.getModuleEntry=function(e){return n.modulesMap[e]},this.getDataSources=function(e){return void 0===e&&(e=n.activeDataSource),n.dataSourceMap[e]},this.getActiveDataSource=function(){return n.dataSourceMap[n.activeDataSource]},this.getDataSource=function(){return n.dataSourceMap[n.activeDataSource]},this._getExtensionModule=function(e,t,r,i){var o,s="get"+((o=e).charAt(0).toUpperCase()+o.substring(1)),u=t[s];if(u)try{var l=u({appConfig:n._appConfig,commandsManager:n._commandsManager,servicesManager:n._servicesManager,hotkeysManager:n._hotkeysManager,extensionManager:n,configuration:i});return l||a.Z.warn("Null or undefined returned when registering the ".concat(s," module for the ").concat(r," extension")),l}catch(e){throw new Error("Exception thrown while trying to call ".concat(s," for the ").concat(r," extension"))}},this._initHangingProtocolsModule=function(e,t){var r=n._servicesManager.services.HangingProtocolService;e.forEach((function(e){var t=e.id,n=e.protocol;n&&r.addProtocol(t,n)}))},this._initCommandsModule=function(e){var t=e.definitions,r=e.defaultContext;t&&0!==Object.keys(t).length?(r=r||"VIEWER",n._commandsManager.getContext(r)||n._commandsManager.createContext(r),Object.keys(t).forEach((function(e){var a=t[e];a.context&&!n._commandsManager.getContext(a.context)&&n._commandsManager.createContext(a.context),n._commandsManager.registerCommand(a.context||r,e,a)}))):a.Z.warn("Commands Module contains no command definitions")},this.modules={},this.registeredExtensionIds=[],this.moduleTypeNames=Object.values(r.Z),this._commandsManager=i,this._servicesManager=l,this._hotkeysManager=c,this._appConfig=v,this.modulesMap={},this.moduleTypeNames.forEach((function(e){n.modules[e]=[]})),this._extensionLifeCycleHooks={onModeEnter:{},onModeExit:{}},this.dataSourceMap={},this.defaultDataSourceName=v.defaultDataSourceName,this.activeDataSource=void 0}var t,n,i;return t=e,n=[{key:"setActiveDataSource",value:function(e){this.activeDataSource=e}},{key:"onModeEnter",value:function(){var e=this.registeredExtensionIds,t=this._servicesManager,n=this._commandsManager,r=this._hotkeysManager,a=this._extensionLifeCycleHooks,i=t.services,o=i.MeasurementService,s=i.ViewportGridService;o.clearMeasurements(),s.reset(),e.forEach((function(e){var i=a.onModeEnter[e];"function"==typeof i&&i({servicesManager:t,commandsManager:n,hotkeysManager:r})}))}},{key:"onModeExit",value:function(){var e=this.registeredExtensionIds,t=this._servicesManager,n=this._commandsManager,r=this._extensionLifeCycleHooks,a=t.services,i=a.MeasurementService,o=a.ViewportGridService;i.clearMeasurements(),o.reset(),e.forEach((function(e){var a=r.onModeExit[e];"function"==typeof a&&a({servicesManager:t,commandsManager:n})}))}},{key:"_initDataSourcesModule",value:function(e,t){var n=this,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],i=this._servicesManager.services.UserAuthenticationService;e.forEach((function(e){var o="".concat(t,".").concat(r.Z.DATA_SOURCE,".").concat(e.name);a.forEach((function(t){if(t.namespace===o){var r=e.createDataSource(t.configuration,i);n.dataSourceMap[t.sourceName]?n.dataSourceMap[t.sourceName].push(r):n.dataSourceMap[t.sourceName]=[r]}}))})),e.forEach((function(e){n.modulesMap["".concat(t,".").concat(r.Z.DATA_SOURCE,".").concat(e.name)]=e}))}}],n&&v(t.prototype,n),i&&v(t,i),Object.defineProperty(t,"prototype",{writable:!1}),e}()},4676:function(e,t){"use strict";t.Z={COMMANDS:"commandsModule",DATA_SOURCE:"dataSourcesModule",PANEL:"panelModule",SOP_CLASS_HANDLER:"sopClassHandlerModule",TOOLBAR:"toolbarModule",VIEWPORT:"viewportModule",CONTEXT:"contextModule",LAYOUT_TEMPLATE:"layoutTemplateModule",HANGING_PROTOCOL:"hangingProtocolModule",UTILITY:"utilityModule"}},84334:function(e,t,n){"use strict";n.d(t,{ZP:function(){return V},dD:function(){return U}});var r=n(4676),a=n(49823),i=n(96088),o=n(16283),s=n(96798),u=n(68818),l=n(76643),c=n(9159),d=n(2524);function f(e){return f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},f(e)}var v={getNestedObject:function(e){var t={};for(var n in e)if(e.hasOwnProperty(n))for(var r=e[n],a=n.split("."),i=t;a.length;){var o=a.shift();a.length?(i[o]||(i[o]={}),i=i[o]):i[o]=r}return t},getShallowObject:function(e){var t={};return function e(t,n,r){for(var a in n)if(n.hasOwnProperty(a)){var i=t?"".concat(t,".").concat(a):a,o=n[a];"object"===f(o)?(o instanceof Array&&(i+="[]"),e(i,o,r)):r[i]=o}}("",e,t),t}};function m(e){return m="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},m(e)}function p(e){return e instanceof Object||"object"===m(e)&&null!==e}function h(e){return"string"==typeof e}var g={search:function e(t,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],i=new RegExp(n.trim(),"i");return Object.keys(t).forEach((function(o){var s=t[o];if(s){var u=h(r)?s[r]:s;h(u)&&i.test(u)&&a.push(s),p(s)&&e(s,n,r,a)}})),a},encodeId:function(e){var t=e&&e.toString?e.toString():e;return""===t||"string"!=typeof t?"_":t.replace(/[^a-zA-Z0-9-]/g,(function(e){return"_"+e[0].charCodeAt(0).toString(16)+"_"}))}},A=g,y={userLoggedIn:function(){return!1},getUserId:function(){return null},getName:function(){return null},getAccessToken:function(){return null},login:function(){return new Promise((function(e,t){return t()}))},logout:function(){return new Promise((function(e,t){return t()}))},getData:function(e){return null},setData:function(e,t){return null}},S=n(72928),b=n(22324),w=n(24910),I=n(57512),E=n(42586),C=n(34894),D=n(13527),_=n(97728),M=n(49811),O=n(27933),P=n(77631),T=n(79286),x=n(27961),R=n(20112),L=n(28250),k=n(71818);function N(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function F(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw i}}}}function m(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&void 0!==arguments[1]&&arguments[1],n=e[0],r=n.StudyInstanceUID,a=n.SeriesInstanceUID,i=h.studies.find((function(e){return e.StudyInstanceUID===r}));i||(h.studies.push(u(r)),i=h.studies[h.studies.length-1]),i.addInstancesToSeries(e),this._broadcastEvent(p.INSTANCES_ADDED,{StudyInstanceUID:r,SeriesInstanceUID:a,madeInClient:t})},addSeriesMetadata:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=e[0].StudyInstanceUID,r=g(n);r||((r=u(n)).StudyDescription=e[0].StudyDescription,e.forEach((function(e){-1===r.ModalitiesInStudy.indexOf(e.Modality)&&r.ModalitiesInStudy.push(e.Modality)})),r.NumberOfStudyRelatedSeries=e.length,h.studies.push(r)),e.forEach((function(e){var t=e.SeriesInstanceUID;r.setSeriesMetadata(t,e)})),this._broadcastEvent(p.SERIES_ADDED,{StudyInstanceUID:n,madeInClient:t})},addStudy:function(e){var t=e.StudyInstanceUID,n=h.studies.find((function(e){return e.StudyInstanceUID===t}));if(!n){var r=u(t);r.PatientID=e.PatientID,r.PatientName=e.PatientName,r.StudyDate=e.StudyDate,r.ModalitiesInStudy=e.ModalitiesInStudy,r.StudyDescription=e.StudyDescription,r.AccessionNumber=e.AccessionNumber,r.NumInstances=e.NumInstances,h.studies.push(r)}},getStudyInstanceUIDs:function(){return h.studies.map((function(e){return e.StudyInstanceUID}))},getStudy:g,getSeries:A,getInstance:function(e,t,n){var r=A(e,t);if(r)return r.instances.find((function(e){return e.SOPInstanceUID===n}))},getInstanceByImageId:function(e){var t,n=v(h.studies);try{for(n.s();!(t=n.n()).done;){var r,a=v(t.value.series);try{for(a.s();!(r=a.n()).done;){var i,o=v(r.value.instances);try{for(o.s();!(i=o.n()).done;){var s=i.value;if(s.imageId===e)return s}}catch(e){o.e(e)}finally{o.f()}}}catch(e){a.e(e)}finally{a.f()}}}catch(e){n.e(e)}finally{n.f()}},updateMetadataForSeries:function(e,t,n){var r=g(e);r&&(r.series.find((function(e){return e.SeriesInstanceUID===t})).instances.forEach((function(e){Object.keys(n).forEach((function(t){"object"===f(n[t])?e[t]=c(c({},e[t]),n[t]):e[t]=n[t]}))})),this._broadcastEvent(p.SERIES_UPDATED,{SeriesInstanceUID:t,StudyInstanceUID:e,madeInClient:!0}))}},S=Object.assign({},y,a.Z),b=S},20112:function(e,t,n){"use strict";var r=n(18817);t.Z=r.Z},97728:function(e,t,n){"use strict";n.d(t,{Z:function(){return m}});var r=n(28250),a={DISPLAY_SETS_ADDED:"event::displaySetService:displaySetsAdded",DISPLAY_SETS_CHANGED:"event::displaySetService:displaySetsChanged",DISPLAY_SETS_REMOVED:"event::displaySetService:displaySetsRemoved",DISPLAY_SET_SERIES_METADATA_INVALIDATED:"event::displaySetService:displaySetSeriesMetadataInvalidated"};function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function o(e){return function(e){if(Array.isArray(e))return c(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||l(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(e,t){for(var n=0;n=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw i}}}}function l(e,t){if(e){if("string"==typeof e)return c(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(e,t):void 0}}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&void 0!==arguments[1]?arguments[1]:{},r=n.batch,i=void 0!==r&&r,s=n.madeInClient,u=void 0!==s&&s,l=n.settings,c=void 0===l?{}:l;if(!e||!e.length)throw new Error("No instances were provided.");if(i&&!e[0].length)throw new Error("Batch displaySet creation does not contain array of array of instances.");var d=[];if(i)for(var f=0;fa[1])return n+"with value "+e+" must be between "+a[0]+" and "+a[1]},o().validators.notNull=function(e){return null==e?"Value is null":void 0};var s=o();function u(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var l=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2?arguments[2]:void 0,r=arguments.length>3?arguments[3]:void 0,a={format:"grouped"},i={passed:[],failed:[]},o={},l=!1,c=0;return t.forEach((function(t){var d,f=t.attribute;n.hasOwnProperty(f)?o[f]=n[f].callback(e,r):o[f]=null!==(d=e[f])&&void 0!==d?d:((e.images||e.others||[])[0]||{})[f];console.log("Test",f,o[f],JSON.stringify(t.constraint));var v,m=u({},f,t.constraint),p=u({},f,o[f]);try{v=s(p,m,[a])}catch(e){v=["Something went wrong during validation.",e]}v?(t.required&&(l=!0),i.failed.push({rule:t,errorMessages:v})):(c+=parseInt(t.weight||1,10),i.passed.push({rule:t}))})),l&&(c=0),{score:c,details:i,requiredFailed:l}};function c(e,t){for(var n=0;n0&&r.push({score:o,protocol:a})}else console.warn("ProtocolEngine::findMatchByStudy no matching rules - specify protocolMatchingRules",a.id)})),!r.length){var a,i=null!==(a=this.protocols.find((function(e){return"default"===e.id})))&&void 0!==a?a:this.protocols[0];return console.log("No protocol matches, defaulting to",i),[{score:0,protocol:i}]}return r.sort((function(e,t){return t.score-e.score})),console.log("ProtocolEngine::findMatchByStudy matched",r),r}},{key:"_clearMatchedProtocols",value:function(){this.matchedProtocols.clear(),this.matchedProtocolScores={}}},{key:"_largestKeyByValue",value:function(e){return Object.keys(e).reduce((function(t,n){return e[t]>e[n]?t:n}))}},{key:"_getHighestScoringProtocol",value:function(){if(Object.keys(this.matchedProtocolScores).length){var e=this._largestKeyByValue(this.matchedProtocolScores);return this.matchedProtocols.get(e)}}}])&&c(t.prototype,n),r&&c(t,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();function f(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function v(e){for(var t=1;t=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw i}}}}function g(e,t){if(e){if("string"==typeof e)return A(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?A(e,t):void 0}}function A(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n3&&void 0!==arguments[3]?arguments[3]:{};this.customAttributeRetrievalCallbacks[e]=v(v({},r),{},{id:e,name:t,callback:n})}},{key:"nextProtocolStage",value:function(){console.log("ProtocolEngine::nextProtocolStage"),this._setCurrentProtocolStage(1)||console.log("ProtocolEngine::nextProtocolStage failed")}},{key:"previousProtocolStage",value:function(){console.log("ProtocolEngine::previousProtocolStage"),this._setCurrentProtocolStage(-1)||console.log("ProtocolEngine::previousProtocolStage failed")}},{key:"runImageLoadStrategy",value:function(e){var t=(0,this.registeredImageLoadStrategies[this.activeImageLoadStrategyName])({data:e,displaySetsMatchDetails:this.displaySetMatchDetails,viewportMatchDetails:this.viewportMatchDetails});t&&(this.customImageLoadPerformed=!0,this._broadcastChange(this.EVENTS.CUSTOM_IMAGE_LOAD_PERFORMED,t))}},{key:"_validateProtocol",value:function(e){e.id=e.id||e.name;var t={toolGroupId:"default",viewportType:"stack"};return e.name=e.name||e.id,e.stages.forEach((function(e){if(e.viewports)e.viewports.forEach((function(e){e.viewportOptions=e.viewportOptions||t,e.displaySets?e.displaySets.forEach((function(e){e.options=e.options||{}})):e.displaySets=[]}));else{e.viewports=[];for(var n=e.viewportStructure.properties,r=n.rows,a=n.columns,i=0;i1)throw new Error("Cannot update viewport with multiple displaySets yet");if(0===o.displaySets.length)return s;var u=o.displaySets[0].id;if(!a.displaySetSelectors[u])return s;if(this._validateViewportSpecificMatch({displaySetInstanceUIDs:[r],viewportOptions:{},displaySetOptions:[]},o,a.displaySetSelectors),!this.displaySetMatchDetails.get(u))return s;var l=[];return i.forEach((function(e,t){var a,i,o=h(e.displaySets);try{for(o.s();!(i=o.n()).done;)if(i.value.id===u){a=!0;break}}catch(e){o.e(e)}finally{o.f()}if(a){var s=e.displaySets.reduce((function(e,t){var a=t.id,i=t.options,o=n.displaySetMatchDetails.get(a).displaySetInstanceUID;return t.id===u&&(o=r),e.displaySetInstanceUIDs.push(o),e.displaySetOptions.push(i),e}),{displaySetInstanceUIDs:[],displaySetOptions:[]}),c=s.displaySetInstanceUIDs,d=s.displaySetOptions;l.push({viewportIndex:t,displaySetInstanceUIDs:c,viewportOptions:e.viewportOptions,displaySetOptions:d})}})),l}},{key:"setProtocol",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,r=this.protocols.get(e);if(r){var a=this._validateProtocol(r);t&&this._validateOptions(t);try{this._setProtocol(a,t)}catch(e){throw console.error(e),n&&n(e),new Error(e)}}else console.warn("ProtocolEngine::setProtocol - Protocol with id ".concat(e," not found - you should register it first via addProtocol"))}},{key:"_setProtocol",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.stage=0;var n=this.protocol;this.protocol=this._copyProtocol(e);var r=e.imageLoadStrategy;r&&this.registeredImageLoadStrategies[r]instanceof Function&&(this.activeImageLoadStrategyName=r);try{this._updateViewports(t)}catch(e){throw this.protocol=n,new Error(e)}this._broadcastChange(this.EVENTS.PROTOCOL_CHANGED,{viewportMatchDetails:this.viewportMatchDetails,displaySetMatchDetails:this.displaySetMatchDetails,hpAlreadyApplied:this.hpAlreadyApplied,protocol:this.protocol})}},{key:"_getNumProtocolStages",value:function(){if(this.protocol&&this.protocol.stages&&this.protocol.stages.length)return this.protocol.stages.length}},{key:"_getCurrentStageModel",value:function(){return this.protocol.stages[this.stage]}},{key:"_updateViewports",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;if(!this._getNumProtocolStages())throw new Error("No protocol or stages found");this.hpAlreadyApplied=new Map,this.viewportMatchDetails=new Map,this.displaySetMatchDetails=new Map,this.customImageLoadPerformed=!1,t&&this._updateMatchByOptions(this.protocol,t);var n=this.protocol.displaySetSelectors,r=void 0===n?{}:n,a=this._getCurrentStageModel();if(a&&a.viewportStructure&&a.viewports&&a.viewports.length){var i=a.viewportStructure.layoutType,o=a.viewportStructure.properties;if(o){var s=o.columns,u=o.rows,l=o.layoutOptions,c=void 0===l?[]:l;this._broadcastChange(this.EVENTS.NEW_LAYOUT,{layoutType:i,numRows:u,numCols:s,layoutOptions:c});for(var d=0;d=a.viewports.length);d++){var f,v=a.viewports[d],m=h(v.displaySets);try{for(m.s();!(f=m.n()).done;){var p=f.value,g=p.id;if(!this.displaySetMatchDetails.has(g)){var A=r[g];if(A){var y=this._matchImages(A),S=y.bestMatch,b=y.matchingScores;this.displaySetMatchDetails.set(g,S),S&&(S.matchingScores=b)}else console.warn("No display set selector for",g)}}}catch(e){m.e(e)}finally{m.f()}}a.viewports.forEach((function(t,n){var r=t.viewportOptions,a=void 0===r?{}:r;e.hpAlreadyApplied.set(n,!1);var i=[];t.displaySets.forEach((function(t){var n=t.id,r=t.displaySetIndex,a=void 0===r?0:r,o=t.options,s=e.displaySetMatchDetails.get(n),u=s&&0!==a?s.matchingScores[a]:s;if(u){var l={SeriesInstanceUID:u.SeriesInstanceUID,displaySetInstanceUID:u.displaySetInstanceUID,displaySetOptions:o};i.push(l)}else console.warn("\n The hanging protocol viewport is requesting to display ".concat(n," displaySet that is not\n matched based on the provided criteria (e.g. matching rules).\n "))})),e.viewportMatchDetails.set(n,{viewportOptions:a,displaySetsInfo:i})}))}else console.log("No viewportStructure.properties in",a)}else console.log("Stage cannot be applied",a)}},{key:"_updateMatchByOptions",value:function(e,t){var n=this._servicesManager.services.DisplaySetService;t.displaySetInstanceUIDs?this._updateGlobalMatchByOptions(t,e,n):this._updateViewportSpecificMatchByOptions(t,e)}},{key:"_updateViewportSpecificMatchByOptions",value:function(e,t){var n=this,r=this._servicesManager.services.DisplaySetService,a=t.displaySetSelectors,i=void 0===a?{}:a,o=t.stages[this.stage].viewports,s=function(a){var s=e[a],u=o[a];if(u)n._validateViewportSpecificMatch(s,u,i),s.displaySetInstanceUIDs.forEach((function(e,a){var i=r.getDisplaySetByUID(e),o=u.displaySets[a].id;if(t.syncDataForViewports)n.displaySetMatchDetails.set(o,{SeriesInstanceUID:i.SeriesInstanceUID,StudyInstanceUID:i.StudyInstanceUID,displaySetInstanceUID:i.displaySetInstanceUID,matchDetails:{},matchingScores:[],sortingInfo:{}});else{var s="".concat(o,"_").concat(([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,(function(e){return(e^crypto.getRandomValues(new Uint8Array(1))[0]&15>>e/4).toString(16)})));u.displaySets[a].id=s,n.displaySetMatchDetails.set(s,{SeriesInstanceUID:i.SeriesInstanceUID,StudyInstanceUID:i.StudyInstanceUID,displaySetInstanceUID:i.displaySetInstanceUID,matchDetails:{},matchingScores:[],sortingInfo:{}})}}));else{var l,c={displaySets:[],viewportOptions:{}};null==s||null===(l=s.displaySetInstanceUIDs)||void 0===l||l.forEach((function(e,t){var i=r.getDisplaySetByUID(e),o="viewport_".concat(a,"_displaySet_").concat(t);c.displaySets.push({id:o}),n.displaySetMatchDetails.set(o,{SeriesInstanceUID:i.SeriesInstanceUID,StudyInstanceUID:i.StudyInstanceUID,displaySetInstanceUID:i.displaySetInstanceUID,matchDetails:{},matchingScores:[],sortingInfo:{}})})),o[a]=c}};for(var u in e)s(u)}},{key:"_validateViewportSpecificMatch",value:function(e,t,n){var r=this,a=this._servicesManager.services.DisplaySetService,i=t.displaySets,o=e.displaySetInstanceUIDs.length;if(i.length>0&&o!==i.length)throw new Error("The number of displaySets to set ".concat(o," does not match the number of displaySets in the protocol ").concat(i," - not currently implemented"));e.displaySetInstanceUIDs.forEach((function(e){var i,o=a.getDisplaySetByUID(e),s=h(t.displaySets);try{for(s.s();!(i=s.n()).done;){var u=i.value,l=n[u.id];l&&r._validateRequiredSelectors(l,o)}}catch(e){s.e(e)}finally{s.f()}}))}},{key:"_updateGlobalMatchByOptions",value:function(e,t,n){var r=this,a=t.displaySetSelectors,i=void 0===a?{}:a,o=t.stages[this.stage].viewports;e.displaySetInstanceUIDs.forEach((function(e){var t=n.getDisplaySetByUID(e);for(var a in i){var o=i[a];r._validateRequiredSelectors(o,t)}}));var s=new Set;o.forEach((function(e){e.displaySets.forEach((function(e){var t=e.id;r.displaySetMatchDetails.has(t)||s.add(t)}))})),Array.from(s).forEach((function(t,a){var i=e.displaySetInstanceUIDs[a],o=n.getDisplaySetByUID(i);r.displaySetMatchDetails.set(t,{SeriesInstanceUID:o.SeriesInstanceUID,StudyInstanceUID:o.StudyInstanceUID,displaySetInstanceUID:o.displaySetInstanceUID,matchDetails:{},matchingScores:[],sortingInfo:{}})}))}},{key:"_validateRequiredSelectors",value:function(e,t){var n=e.seriesMatchingRules;if(n.length){var r=n.filter((function(e){return e.required})),a=this.protocolEngine.findMatch(t,r);if(!a||0===a.score)throw new Error("The displaySetInstanceUID ".concat(t.displaySetInstanceUID," does not satisfy the required seriesMatching criteria for the protocol"))}}},{key:"_validateOptions",value:function(e){var t=this._servicesManager.services.DisplaySetService;e.displaySetInstanceUIDs&&e.displaySetInstanceUIDs.forEach((function(e){if(!t.getDisplaySetByUID(e))throw new Error("The displaySetInstanceUID ".concat(e," is not found in the displaySetService"))}))}},{key:"_matchImages",value:function(e){var t=this,n=e.studyMatchingRules,r=void 0===n?[]:n,i=e.seriesMatchingRules,o=[],s=0;console.log("ProtocolEngine::matchImages",r,i),this.studies.forEach((function(e){var n=t.displaySets.filter((function(t){return t.StudyInstanceUID===e.StudyInstanceUID})),a=t.protocolEngine.findMatch(e,r,{studies:t.studies,displaySets:n});!0!==a.requiredFailed&&(a.score,t.debug("study",e.StudyInstanceUID,"display sets #",t.displaySets.length),t.displaySets.forEach((function(n){var r,u=n.StudyInstanceUID,l=n.SeriesInstanceUID,c=n.displaySetInstanceUID;if(u===e.StudyInstanceUID){var d=t.protocolEngine.findMatch(n,i,{studies:t.studies,instance:null===(r=n.images)||void 0===r?void 0:r[0]});if(!0!==d.requiredFailed){t.debug("Found displaySet for rules",n),s=Math.max(d.score,s);var f={passed:[],failed:[]};f.passed=f.passed.concat(d.details.passed),f.passed=f.passed.concat(a.details.passed),f.failed=f.failed.concat(d.details.failed),f.failed=f.failed.concat(a.details.failed);var v=d.score+a.score,m={StudyInstanceUID:u,SeriesInstanceUID:l,displaySetInstanceUID:c,matchingScore:v,matchDetails:f,sortingInfo:{score:v,study:e.StudyInstanceUID,series:parseInt(n.SeriesNumber)}};t.debug("Adding display set",n,m),o.push(m)}else t.debug("Display set required failed",n,i)}})))})),0===o.length&&console.log("No match found");var u=(0,a.Z)({name:"score",reverse:!0},{name:"study",reverse:!0},{name:"series"});o.sort((function(e,t){return u(e.sortingInfo,t.sortingInfo)}));var l=o[0];return console.log("ProtocolEngine::matchImages bestMatch",l,o),{bestMatch:l,matchingScores:o}}},{key:"_isNextStageAvailable",value:function(){var e=this._getNumProtocolStages();return this.stage+1=0}},{key:"_setCurrentProtocolStage",value:function(e){return this.hpAlreadyApplied=new Map,!(-1===e&&!this._isPreviousStageAvailable()||1===e&&!this._isNextStageAvailable()||(this.stage+=e,this.debug("ProtocolEngine::setCurrentProtocolStage stage = ".concat(this.stage)),this._updateViewports(),this._broadcastChange(this.EVENTS.STAGE_CHANGE,{viewportMatchDetails:this.viewportMatchDetails,hpAlreadyApplied:this.hpAlreadyApplied,displaySetMatchDetails:this.displaySetMatchDetails}),0))}},{key:"debug",value:function(){var e;this.debugLogging&&(e=console).log.apply(e,arguments)}},{key:"_broadcastChange",value:function(e,t){var n=Object.keys(this.listeners).length>0,r=Array.isArray(this.listeners[e]);n&&r&&this.listeners[e].forEach((function(e){e.callback(t)}))}},{key:"_copyProtocol",value:function(e){return JSON.parse(JSON.stringify(e))}}],n&&y(t.prototype,n),i&&y(t,i),Object.defineProperty(t,"prototype",{writable:!1}),e}(),w=b,I={name:"HangingProtocolService",create:function(e){e.configuration;var t=e.commandsManager,n=e.servicesManager;return new w(t,n)}}},49811:function(e,t,n){"use strict";n.d(t,{Z:function(){return A}});var r=n(2524),a=n(33464),i=n(28250);function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function s(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&(t=this.measurements[e]),t}},{key:"createSource",value:function(e,t){var n=this;if(!e)throw new Error("Source name not provided.");if(!t)throw new Error("Source version not provided.");for(var i=Object.keys(this.sources),o=0;o2&&void 0!==arguments[2]&&arguments[2];if(this.measurements[e]){var a=s(s({},t),{},{modifiedTimestamp:Math.floor(Date.now()/1e3)});return r.Z.info("Updating internal measurement representation...",a),this.measurements[e]=a,this._broadcastEvent(this.EVENTS.MEASUREMENT_UPDATED,{source:t.source,measurement:a,notYetUpdatedAtSource:n}),a.uid}}},{key:"addRawMeasurement",value:function(e,t,n,i){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};if(this._isValidSource(e)){var u=this._getSourceToString(e);if(t)if(this._sourceHasMappings(e)){var l={};try{(l=i(n)).source=e}catch(e){return void r.Z.warn("Failed to map '".concat(u,"' measurement for annotationType ").concat(t,":"),e.message)}if(this._isValidMeasurement(l)){var c=n.id;c||(c=(0,a.Z)(),r.Z.warn("Measurement ID not found. Generating UID: ".concat(c)));var d=s(s({},l),{},{modifiedTimestamp:Math.floor(Date.now()/1e3),uid:c});return this.measurements[c]?(this.measurements[c]=d,this._broadcastEvent(this.EVENTS.MEASUREMENT_UPDATED,{source:e,measurement:d})):(r.Z.info("Measurement added.",d),this.measurements[c]=d,this._broadcastEvent(this.EVENTS.RAW_MEASUREMENT_ADDED,{source:e,measurement:d,data:n,dataSource:o})),d.id}r.Z.warn("Attempting to add or update a invalid measurement provided by '".concat(u,"'. Exiting early."))}else r.Z.warn("No measurement mappings found for '".concat(u,"' source. Exiting early."));else r.Z.warn("No source annotationType provided. Exiting early.")}else r.Z.warn("Invalid source. Exiting early.")}},{key:"annotationToMeasurement",value:function(e,t,n){if(!this._isValidSource(e))throw new Error("Invalid source.");if(!t)throw new Error("No source annotationType provided.");var i=this._getSourceToString(e);if(!this._sourceHasMappings(e))throw new Error("No measurement mappings found for '".concat(i,"' source. Exiting early."));var o={};try{(o=(0,this.mappings[e.uid].find((function(e){return e.annotationType===t})).toMeasurementSchema)(n)).source=e}catch(e){throw new Error("Failed to map '".concat(i,"' measurement for annotationType ").concat(t,": ").concat(e.message))}if(!this._isValidMeasurement(o))throw new Error("Attempting to add or update a invalid measurement provided by '".concat(i,"'. Exiting early."));var u=n.uid;u||(u=(0,a.Z)(),r.Z.info("Annotation does not have UID, Generating UID for the created Measurement: ".concat(u)));var l=s(s({},o),{},{modifiedTimestamp:Math.floor(Date.now()/1e3),uid:u});return this.measurements[u]?(this.measurements[u]=l,this._broadcastEvent(this.EVENTS.MEASUREMENT_UPDATED,{source:e,measurement:l,notYetUpdatedAtSource:!1})):(r.Z.info("Measurement added.",l),this.measurements[u]=l,this._broadcastEvent(this.EVENTS.MEASUREMENT_ADDED,{source:e,measurement:l})),l.uid}},{key:"remove",value:function(e,t,n){e&&this.measurements[e]?(delete this.measurements[e],this._broadcastEvent(this.EVENTS.MEASUREMENT_REMOVED,s({source:t,measurement:e},n))):r.Z.warn("No uid provided, or unable to find measurement by uid.")}},{key:"clearMeasurements",value:function(){var e=s({},this.measurements);this.measurements={},this._jumpToMeasurementCache={},this._broadcastEvent(this.EVENTS.MEASUREMENTS_CLEARED,{measurements:e})}},{key:"jumpToMeasurement",value:function(e,t){var n=this.measurements[t];if(n){this._addJumpToMeasurement(e,t);var a=this.EVENTS.JUMP_TO_MEASUREMENT,i=Object.keys(this.listeners).length>0,o=Array.isArray(this.listeners[a]);i&&o&&this.listeners[a].forEach((function(t){t.callback({viewportIndex:e,measurement:n})}))}else r.Z.warn("No measurement uid, or unable to find by uid.")}},{key:"getJumpToMeasurement",value:function(e){return this._jumpToMeasurementCache[e]}},{key:"removeJumpToMeasurement",value:function(e){delete this._jumpToMeasurementCache[e]}},{key:"_getSourceUID",value:function(e,t){var n=this.sources;return Object.keys(n).find((function(r){var a=n[r];return a.name===e&&a.version===t}))}},{key:"_addJumpToMeasurement",value:function(e,t){this._jumpToMeasurementCache[e]=t}},{key:"_getMappingByMeasurementSource",value:function(e,t){if(this._isValidSource(e.source))return this.mappings[e.source.uid].find((function(e){return e.annotationType===t}))}},{key:"_getMatchingMapping",value:function(e,t,n){return this.mappings[e.uid].filter((function(e){return e.annotationType===t})).find((function(e){var t=e.matchingCriteria;return n.points&&n.points.length===t.points}))}},{key:"_getSourceToString",value:function(e){return"".concat(e.name,"@").concat(e.version)}},{key:"_isValidSource",value:function(e){return e&&this.sources[e.uid]}},{key:"_sourceHasMappings",value:function(e){return Array.isArray(this.mappings[e.uid])&&this.mappings[e.uid].length}},{key:"_isValidMeasurement",value:function(e){return Object.keys(e).forEach((function(e){if(!v.includes(e))return r.Z.warn("Invalid measurement key: ".concat(e)),!1})),!0}}],n&&f(t.prototype,n),o&&f(t,o),Object.defineProperty(t,"prototype",{writable:!1}),e}(),g=h,A={name:"MeasurementService",create:function(e){e.configuration;return new g}}},96088:function(e,t,n){"use strict";n.d(t,{Z:function(){return s}});var r=n(2524);function a(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,a,i=[],o=!0,s=!1;try{for(n=n.call(e);!(o=(r=n.next()).done)&&(i.push(r.value),!t||i.length!==t);o=!0);}catch(e){s=!0,a=e}finally{try{o||null==n.return||n.return()}finally{if(s)throw a}}return i}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return i(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return i(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&void 0!==arguments[1]?arguments[1]:{};e?e.name?this.registeredServiceNames.includes(e.name)?r.Z.warn("Service name ".concat(e.name," has already been registered. Exiting before duplicating services.")):e.create?(this.services[e.name]=e.create({configuration:t,commandsManager:this._commandsManager,servicesManager:this}),this.registeredServiceNames.push(e.name)):r.Z.warn("Service create factory function not defined. Exiting early."):r.Z.warn("Service name not set. Exiting early."):r.Z.warn("Attempting to register a null/undefined service. Exiting early.")}},{key:"registerServices",value:function(e){var t=this;e.forEach((function(e){if(Array.isArray(e)){var n=a(e,2),r=n[0],i=n[1];t.registerService(r,i)}else t.registerService(e)}))}}],n&&o(t.prototype,n),i&&o(t,i),Object.defineProperty(t,"prototype",{writable:!1}),e}()},27933:function(e,t,n){"use strict";n.d(t,{Z:function(){return d}});var r=n(32005),a=n.n(r),i=n(28250);function o(e){return function(e){if(Array.isArray(e))return s(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return s(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return s(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0;){var a=r.pop();i._show(a)}}},i={_hide:function(){return console.warn("hide() NOT IMPLEMENTED")},_show:function(e){r.push(e),console.warn("show() NOT IMPLEMENTED")}};t.Z={name:n,create:function(e){e.configuration;return a}}},13527:function(e,t){"use strict";var n="UIViewportDialogService",r={name:n,hide:function(){return a._hide()},show:function(e){var t=e.viewportIndex,n=e.id,r=e.type,i=e.message,o=e.actions,s=e.onSubmit,u=e.onOutsideClick;return a._show({viewportIndex:t,id:n,type:r,message:i,actions:o,onSubmit:s,onOutsideClick:u})},setServiceImplementation:function(e){var t=e.hide,n=e.show;t&&(a._hide=t);n&&(a._show=n)}},a={_hide:function(){return console.warn("hide() NOT IMPLEMENTED")},_show:function(){return console.warn("show() NOT IMPLEMENTED")}};t.Z={name:n,create:function(e){e.configuration;return r}}},27961:function(e,t,n){"use strict";n.d(t,{Z:function(){return o}});var r="UserAuthenticationService",a={name:r,getState:function(){return i._getState()},setUser:function(e){return i._setUser(e)},getUser:function(){return i._getUser()},getAuthorizationHeader:function(){return i._getAuthorizationHeader()},handleUnauthenticated:function(){return i._handleUnauthenticated()},setServiceImplementation:function(e){var t=e.getState,n=e.setUser,r=e.getUser,a=e.getAuthorizationHeader,o=e.handleUnauthenticated,s=e.reset,u=e.set;t&&(i._getState=t);n&&(i._setUser=n);r&&(i._getUser=r);a&&(i._getAuthorizationHeader=a);o&&(i._handleUnauthenticated=o);s&&(i._reset=s);u&&(i._set=u)},reset:function(){return i._reset({})},set:function(e){return i._set(e)}},i={_getState:function(){return console.warn("getState() NOT IMPLEMENTED")},_setUser:function(){return console.warn("_setUser() NOT IMPLEMENTED")},_getUser:function(){return console.warn("_setUser() NOT IMPLEMENTED")},_getAuthorizationHeader:function(){},_handleUnauthenticated:function(){return console.warn("_handleUnauthenticated() NOT IMPLEMENTED")},_reset:function(){return console.warn("reset() NOT IMPLEMENTED")},_set:function(){return console.warn("set() NOT IMPLEMENTED")}};var o={name:r,create:function(e){e.configuration;return a}}},77631:function(e,t,n){"use strict";n.d(t,{Z:function(){return s}});var r=n(28250);function a(e,t){for(var n=0;n0,r=Array.isArray(this.listeners[e]);n&&r&&this.listeners[e].forEach((function(e){e.callback(t)}))},_unsubscribe:function(e,t){if(!this.listeners[e])return;var n=this.listeners[e];Array.isArray(n)?this.listeners[e]=n.filter((function(e){return e.id!==t})):this.listeners[e]=void 0},_isValidEvent:function(e){return Object.values(this.EVENTS).includes(e)}}},33464:function(e,t){"use strict";t.Z=function(){var e=function(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)};return e()+e()+"-"+e()+"-"+e()+"-"+e()+"-"+e()+e()+e()}},78034:function(e,t,n){"use strict";n.d(t,{Z:function(){return s}});var r,a,i=n(50542),o=n.n(i);!function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{timeout:100},n=[],r=null,a=[],i=!1,o=null,s=e.prototype.handleKey;function u(e,t,n){var r=this;if(r.recording)if("keydown"==n.type){1===e.length&&i&&c();for(var o=0;o0&&c();else s.apply(r,arguments)}function l(e){for(var t=0;t1&&1===t.length?-1:1===e.length&&t.length>1||e>t?1:-1})),e[t]=e[t].join("+")}function f(){r&&(d(n),r(n)),n=[],r=null,a=[]}function v(){clearTimeout(o),o=setTimeout(f,t.timeout)}e.prototype.record=function(e){var t=this;t.recording=!0,r=function(){t.recording=!1,e.apply(t,arguments)}},e.prototype.stopRecord=function(){this.recording=!1},e.prototype.startRecording=function(){this.recording=!0},e.prototype.handleKey=function(){var e=this;u.apply(e,arguments)},e.init()}(o()),r=o(),a=r.prototype.stopCallback,r.prototype.stopCallback=function(e,t,n){return!!this.paused||a.call(this,e,t,n)},r.prototype.pause=function(){this.paused=!0},r.prototype.unpause=function(){this.paused=!1},r.init();var s=o()},74242:function(e,t,n){"use strict";function r(e){var t=e.indexOf(":");return e.substring(t+1)}n.d(t,{Z:function(){return r}})},72928:function(e,t,n){"use strict";function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}function a(e,t){for(var n=0;n0&&e.isValidObject(t)){for(var s=0,u=i-1,l=t;s0&&e.isValidObject(t)){for(var o=0,s=i-1,u=t;o4){var a=n.indexOf(r[3]);t+=n.substring(a)+e}else t+=e;return t.replace(/\/\/+/g,"/")},s=n(33464),u=n(28266),l=function(e){return e.sort((function(e,t){return e.seriesNumber!==t.seriesNumber?e.seriesNumber-t.seriesNumber:Date.parse(e.seriesDate)-Date.parse(t.seriesDate)}))};var c=function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:512,r=atob(e),a=[],i=0;ie.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:{},t=e.search;if(t){var n=p(t),r={};return Object.entries(n).forEach((function(e){var t=f(e,2),n=t[0],a=t[1];r[m(n)]=a})),r}}},g={isValidPath:function(e){var t="/".concat(":");return e.indexOf(t)<0},parseParam:function(e){var t=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";try{return window.atob(e)}catch(t){return e}}(e);if(t&&"string"==typeof t)return t.split(";")},replaceParam:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0,r="".concat(":").concat(t);return n?e.replace(r,n):e}},A={parse:p,queryString:h,paramString:g};function y(){var e,t,n=new Promise((function(n,r){t=n,e=r}));return Object.freeze({promise:n,resolve:t,reject:e})}var S=n(78034);function b(e){return b="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},b(e)}function w(e){return function(e){if(Array.isArray(e))return I(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return I(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return I(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function I(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var s=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(s&&u){if(this.prev=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),I(n),c}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var a=r.arg;I(n)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:D(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),c}},e}function C(e,t,n,r,a,i,o){try{var s=e[i](o),u=s.value}catch(e){return void n(e)}s.done?t(u):Promise.resolve(u).then(r,a)}function D(e){return function(){var t=this,n=arguments;return new Promise((function(r,a){var i=e.apply(t,n);function o(e){C(i,r,a,o,s,"next",e)}function s(e){C(i,r,a,o,s,"throw",e)}o(void 0)}))}}function _(e,t){for(var n=0;n=e.limit)){r.next=2;break}throw new Error("Queue limit reached");case 2:for(a=u.length,i=new Array(a),o=0;o0&&0==--e.size&&(e.awaiting=null)}function T(e,t,n){return x.apply(this,arguments)}function x(){return(x=D(E().mark((function e(t,n,r){return E().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t;case 2:return e.abrupt("return",n.apply(void 0,w(r)));case 3:case"end":return e.stop()}}),e)})))).apply(this,arguments)}var R=n(53806),L=n.n(R);function k(e){return k="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},k(e)}function N(e,t){for(var n=0,r=e.length;n0){N(a[1],t.bind(null,a[0]));continue}a=a[0]}t(a)}}function F(e,t){var n=t.shift(),r=function(e,t){var n=function(e,t){if("string"==typeof t){for(var n=0,r=e.length;n=0){if(t.length>0){var a=e[r];return B(a)||(a=function(e){return[e+"",[]]}(n),e[r]=a),F(a[1],t)}return!0}return!1}function B(e){return Array.isArray(e)&&2===e.length&&"string"==typeof e[0]&&Array.isArray(e[1])}var U={addToList:function(e){if(Array.isArray(e)){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r0&&F(e,n),e}return null},getItem:function e(t,n){if(Array.isArray(t)){var r=null,a="number"==typeof n?n:-1;if("string"==typeof n){var i=n.indexOf("/");i>0?(a=parseInt(n.slice(0,i),10),i+1=0&&a0&&(t.progress=t.partial/t.total),Object.freeze(t)}function X(e,t){var n=Y(e);return W(n)?(n.awaiting=Promise.resolve(t).then((function(){Z(n)}),(function(){n.failed=!0,Z(n)})),n):null}function $(e,t){return Object.seal(Object.defineProperty(t,G,{value:e}))}function J(e,t){return null!==t&&"object"===j(t)&&t[G]===e}function ee(e){return"number"==typeof e&&e>=0&&e<=1}function te(e,t){q(e)&&Array.isArray(e.observers)&&e.observers.length>0&&e.observers.slice().forEach((function(n){if("function"==typeof n)try{n(t,e)}catch(e){}}))}var ne={createList:function(){return $(Q,{head:null,named:Object.create(null),observers:[]})},isList:q,createTask:z,isTask:W,increaseList:Y,update:function(e,t){W(e)&&ee(t)&&t<1&&e.progress!==t&&(e.progress=t,q(e.list)&&te(e.list,K(e.list)))},finish:Z,getOverallProgress:K,waitOn:X,addDeferred:function(e){var t=y(),n=X(e,t.promise);return Object.freeze({deferred:t,task:n})},setTaskName:function(e,t,n){return!(!function(e,t){if(q(e)&&W(t))for(var n=e.head;W(n);){if(n===t)return!0;n=n.next}return!1}(e,t)||null===e.named||"object"!==j(e.named)||"string"!=typeof n)&&(e.named[n]=t,!0)},getTaskByName:function(e,t){if(q(e)&&null!==e.named&&"object"===j(e.named)&&"string"==typeof t){var n=e.named[t];if(W(n))return n}return null},addObserver:function(e,t){return!(!q(e)||!Array.isArray(e.observers)||"function"!=typeof t)&&(e.observers.push(t),!0)},removeObserver:function(e,t){if(q(e)&&Array.isArray(e.observers)&&e.observers.length>0){var n=e.observers.indexOf(t);if(n>=0)return e.observers.splice(n,1),!0}return!1}},re=Object.freeze(["SEG","KO","PR","SR","RTSTRUCT"]);var ae=n(81596),ie=n(6604),oe=n(74242);var se=function(e,t,n){var r;return function(){var a=this,i=arguments,o=function(){r=null,n||e.apply(a,i)},s=n&&!r;clearTimeout(r),r=setTimeout(o,t),s&&e.apply(a,i)}};var ue=function(e,t){return Number(e.toFixed(t))},le=n(18817);var ce={guid:s.Z,ObjectPath:i,absoluteUrl:o,sortBy:u.Z,sortBySeriesDate:l,writeScript:function(e,t){var n=document.createElement("script");n.src=o(e),n.onload=function(){"function"==typeof t&&t(n)},document.body.appendChild(n)},formatDate:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"DD-MMM-YYYY";return L()(e).format(t)},formatPN:function(e){if(e)return e.replace("^",", ").replace(/\^/g," ").trim()},b64toBlob:c,urlUtil:A,imageIdToURI:oe.Z,makeDeferred:y,makeCancelable:function(e){var t=!1,n=Promise.resolve(e).then((function(e){if(t)throw Object.freeze({isCanceled:t});return e}),(function(e){if(t)throw Object.freeze({isCanceled:t,error:e});throw e}));return Object.assign(Object.create(n),{then:n.then.bind(n),cancel:function(){t=!0}})},hotkeys:S.Z,Queue:M,isDicomUid:function(e){return"string"==typeof e&&/^\d+(?:\.\d+)*$/.test(e.trim())},isEqualWithin:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1e-5;if(e.length!==t.length)return!1;for(var r=0;rn)return!1;return!0},resolveObjectPath:function e(t,n,r){if(null!==t&&"object"===k(t)&&"string"==typeof n){var a,i=n.indexOf(".");return i>=0?e(t[n.slice(0,i)],n.slice(i+1,n.length),r):void 0===(a=t[n])&&void 0!==r?r:a}},hierarchicalListUtils:V,progressTrackingUtils:ne,isLowPriorityModality:function(e){return re.includes(e)},isImage:ae.O,isDisplaySetReconstructable:ie.Z,debounce:se,roundNumber:ue,downloadCSVReport:function(e){if(0!==e.length){var t=["Patient ID","Patient Name","StudyInstanceUID","SeriesInstanceUID","SOPInstanceUID","Label"],n={};e.forEach((function(e){var t=e.referenceStudyUID,r=e.referenceSeriesUID,a=e.getReport,i=e.uid;if(a){var o=function(e,t){var n=t.instances[0];return{"Patient ID":n.PatientID,"Patient Name":n.PatientName.Alphabetic,StudyInstanceUID:e.referenceStudyUID,SeriesInstanceUID:e.referenceSeriesUID,SOPInstanceUID:e.SOPInstanceUID,Label:e.label||""}}(e,le.J.getSeries(t,r)),s=a(e);n[i]={report:s,commonRowItems:o}}else console.warn("Measurement does not have a getReport function")})),Object.keys(n).forEach((function(e){n[e].report.columns.forEach((function(e){t.includes(e)||t.push(e)}))}));var r=function(e,t){var n=[t];return Object.keys(e).forEach((function(r){var a=e[r],i=a.report,o=a.commonRowItems,s=[];Object.keys(o).forEach((function(e){var n=t.indexOf(e),r=o[e];s[n]=r})),i.columns.forEach((function(e,n){var r=t.indexOf(e),a=i.values[n];s[r]=a})),n.push(s)})),n}(n,t);!function(e){var t=encodeURI(e),n=document.createElement("a");n.setAttribute("href",t),n.setAttribute("download","MeasurementReport.csv"),document.body.appendChild(n),n.click()}("data:text/csv;charset=utf-8,"+r.map((function(e){return e.join(",")})).join("\n"))}}},de=ce},6604:function(e,t,n){"use strict";n.d(t,{Z:function(){return o}});var r=n(61606),a=n(6807);var i=.01;function o(e){if(!e.length)return{value:!1};var t=e[0],n=t.Modality,i=t.NumberOfFrames>1;if(!c.includes(n))return{value:!1};if(!i&&1===e.length)return{value:!1};var o=function(e){if(e.length<=1)return e;var t=e[Math.floor(e.length/2)],n=t.ImagePositionPatient,r=t.ImageOrientationPatient,i=a.fromValues(r[0],r[1],r[2]),o=a.fromValues(r[3],r[4],r[5]),s=a.cross(a.create(),i,o),u=(a.set(a.create(),n[0],n[1],n[2]),e.map((function(e){var t=e.ImagePositionPatient,r=a.create();return a.sub(r,n,t),{distance:a.dot(r,s),instance:e}})));return u.sort((function(e,t){return t.distance-e.distance})),u.map((function(e){return e.instance}))}(e);return i?(o[0],{value:!1}):function(e){for(var t=e[0],n=(0,r.Z)(t.Rows),a=(0,r.Z)(t.Columns),i=(0,r.Z)(t.SamplesPerPixel),o=(0,r.Z)(t.ImageOrientationPatient),c=(0,r.Z)(t.ImagePositionPatient),f=1;f2){var S=(0,r.Z)(e[e.length-1].ImagePositionPatient);if(!c||!S)return{value:!1};for(var b=l(c,S)/(e.length-1),w=c,I=1;Ii&&(l=1*u),0===l);c++);return l}}n.d(t,{Z:function(){return r}})},61606:function(e,t,n){"use strict";function r(e){return Array.isArray(e)?e.map((function(e){return void 0!==e?Number(e):e})):void 0!==e?Number(e):e}n.d(t,{Z:function(){return r}})},67013:function(e,t,n){"use strict";n.d(t,{tk:function(){return yo},zx:function(){return Bo},hE:function(){return Yo},bC:function(){return In},hd:function(){return $p},Vq:function(){return Es},Tu:function(){return C},bI:function(){return $t},kL:function(){return Ps},SV:function(){return qs},h4:function(){return eA},JO:function(){return wa},hU:function(){return nu},Ln:function(){return lA},us:function(){return vn},II:function(){return vu},OX:function(){return mA},OF:function(){return xu},LE:function(){return CA},wt:function(){return Bu},u_:function(){return Bs},DY:function(){return dn},P_:function(){return Gu},cX:function(){return $d},y1:function(){return Td},Ph:function(){return bd},hs:function(){return kv},wT:function(){return Na},aW:function(){return am},eX:function(){return um},Oh:function(){return fm},oW:function(){return gm},SI:function(){return bm},X7:function(){return Cm},YL:function(){return _m},$S:function(){return Wm},hA:function(){return Kp},u:function(){return fh},Zt:function(){return yh},ZT:function(){return Rh},ux:function(){return fi},i1:function(){return Rg},uY:function(){return Qh},mN:function(){return Wa},mQ:function(){return ng},_e:function(){return ag},CW:function(){return ri},No:function(){return cA},ZO:function(){return Ig},eJ:function(){return Cg},Ug:function(){return ha},vQ:function(){return En},zG:function(){return mn},dd:function(){return ln},md:function(){return vi},en:function(){return qa},O_:function(){return ai}});var r={};n.r(r),n.d(r,{FILE:function(){return Tt},HTML:function(){return Lt},TEXT:function(){return Rt},URL:function(){return xt}});var a=n(60216),i=n.n(a),o=i().oneOf(["thumbnail","thumbnailTracked","thumbnailNoImage"]),s=i().oneOfType([i().string,i().number]),u=i().oneOfType([i().string,i().array]),l=n(32735),c=n(89294),d=n.n(c),f=n(40841),v=n.n(f),m=n(33464);function p(){return p=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n2?n-2:0),a=2;a0&&void 0!==arguments[0]?arguments[0]:[],n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{publishSource:!0},r=n.publishSource,a=void 0===r||r,i=n.clientOffset,o=n.getSourceClientOffset,s=e.getMonitor(),u=e.getRegistry();e.dispatch(k(i)),H(t,s,u);var l=z(t,s);if(null!==l){var c=null;if(i){if(!o)throw new Error("getSourceClientOffset must be defined");Q(o),c=o(l)}e.dispatch(k(i,c));var d=u.getSource(l),f=d.beginDrag(s,l);if(null!=f){q(f),u.pinSource(l);var v=u.getSourceType(l);return{type:P,payload:{itemType:v,item:f,sourceId:l,clientOffset:i||null,sourceClientOffset:c||null,isSourcePublic:!!a}}}}else e.dispatch(j)}}function H(e,t,n){M(!t.isDragging(),"Cannot call beginDrag while dragging."),e.forEach((function(e){M(n.getSource(e),"Expected sourceIds to be registered.")}))}function Q(e){M("function"==typeof e,"When clientOffset is provided, getSourceClientOffset must be a function.")}function q(e){M(U(e),"Item must be an object.")}function z(e,t){for(var n=null,r=e.length-1;r>=0;r--)if(t.canDragSource(e[r])){n=e[r];break}return n}function W(e){return function(){if(e.getMonitor().isDragging())return{type:T}}}function Y(e,t){return null===t?null===e:Array.isArray(e)?e.some((function(e){return e===t})):e===t}function Z(e){return function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=n.clientOffset;K(t);var a=t.slice(0),i=e.getMonitor(),o=e.getRegistry();X(a,i,o);var s=i.getItemType();return $(a,o,s),J(a,i,o),{type:x,payload:{targetIds:a,clientOffset:r||null}}}}function K(e){M(Array.isArray(e),"Expected targetIds to be an array.")}function X(e,t,n){M(t.isDragging(),"Cannot call hover while not dragging."),M(!t.didDrop(),"Cannot call hover after drop.");for(var r=0;r=0;r--){var a=e[r];Y(t.getTargetType(a),n)||e.splice(r,1)}}function J(e,t,n){e.forEach((function(e){n.getTarget(e).hover(t,e)}))}function ee(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function te(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{},n=e.getMonitor(),r=e.getRegistry();ae(n);var a=oe(n);a.forEach((function(a,i){var o=ie(a,i,r,n),s={type:R,payload:{dropResult:te(te({},t),o)}};e.dispatch(s)}))}}function ae(e){M(e.isDragging(),"Cannot call drop while not dragging."),M(!e.didDrop(),"Cannot call drop twice during one drag operation.")}function ie(e,t,n,r){var a=n.getTarget(e),i=a?a.drop(r,e):void 0;return function(e){M(void 0===e||U(e),"Drop result must either be an object or undefined.")}(i),void 0===i&&(i=0===t?{}:r.getDropResult()),i}function oe(e){var t=e.getTargetIds().filter(e.canDropOnTarget,e);return t.reverse(),t}function se(e){return function(){var t=e.getMonitor(),n=e.getRegistry();!function(e){M(e.isDragging(),"Cannot call endDrag while not dragging.")}(t);var r=t.getSourceId();null!=r&&(n.getSource(r,!0).endDrag(t,r),n.unpinSource());return{type:L}}}function ue(e,t){for(var n=0;n0;r.backend&&(e&&!r.isSetUp?(r.backend.setup(),r.isSetUp=!0):!e&&r.isSetUp&&(r.backend.teardown(),r.isSetUp=!1))},this.store=t,this.monitor=n,t.subscribe(this.handleRefCountChange)}var t,n,r;return t=e,n=[{key:"receiveBackend",value:function(e){this.backend=e}},{key:"getMonitor",value:function(){return this.monitor}},{key:"getBackend",value:function(){return this.backend}},{key:"getRegistry",value:function(){return this.monitor.registry}},{key:"getActions",value:function(){var e=this,t=this.store.dispatch,n=function(e){return{beginDrag:G(e),publishDragSource:W(e),hover:Z(e),drop:re(e),endDrag:se(e)}}(this);return Object.keys(n).reduce((function(r,a){var i,o=n[a];return r[a]=(i=o,function(){for(var n=arguments.length,r=new Array(n),a=0;a2&&void 0!==arguments[2]?arguments[2]:he;if(e.length!==t.length)return!1;for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:we,t=arguments.length>1?arguments[1]:void 0,n=t.payload;switch(t.type){case O:case P:return{initialSourceClientOffset:n.sourceClientOffset,initialClientOffset:n.clientOffset,clientOffset:n.clientOffset};case x:return ge(e.clientOffset,n.clientOffset)?e:Se(Se({},e),{},{clientOffset:n.clientOffset});case L:case R:return we;default:return e}}var Ee="dnd-core/ADD_SOURCE",Ce="dnd-core/ADD_TARGET",De="dnd-core/REMOVE_SOURCE",_e="dnd-core/REMOVE_TARGET";function Me(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Oe(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:Te,t=arguments.length>1?arguments[1]:void 0,n=t.payload;switch(t.type){case P:return Oe(Oe({},e),{},{itemType:n.itemType,item:n.item,sourceId:n.sourceId,isSourcePublic:n.isSourcePublic,dropResult:null,didDrop:!1});case T:return Oe(Oe({},e),{},{isSourcePublic:!0});case x:return Oe(Oe({},e),{},{targetIds:n.targetIds});case _e:return-1===e.targetIds.indexOf(n.targetId)?e:Oe(Oe({},e),{},{targetIds:B(e.targetIds,n.targetId)});case R:return Oe(Oe({},e),{},{dropResult:n.dropResult,didDrop:!0,targetIds:[]});case L:return Oe(Oe({},e),{},{itemType:null,item:null,sourceId:null,dropResult:null,didDrop:!1,isSourcePublic:null,targetIds:[]});default:return e}}function Re(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case Ee:case Ce:return e+1;case De:case _e:return e-1;default:return e}}var Le=[],ke=[];function Ne(e,t){return e!==Le&&(e===ke||void 0===t||(n=e,t.filter((function(e){return n.indexOf(e)>-1}))).length>0);var n}function Fe(){var e=arguments.length>1?arguments[1]:void 0;switch(e.type){case x:break;case Ee:case Ce:case _e:case De:return Le;default:return ke}var t=e.payload,n=t.targetIds,r=void 0===n?[]:n,a=t.prevTargetIds,i=void 0===a?[]:a,o=V(r,i),s=o.length>0||!Ae(r,i);if(!s)return Le;var u=i[i.length-1],l=r[r.length-1];return u!==l&&(u&&o.push(u),l&&o.push(l)),o}function Be(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return e+1}function Ue(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ve(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0;return{dirtyHandlerIds:Fe(e.dirtyHandlerIds,{type:t.type,payload:Ve(Ve({},t.payload),{},{prevTargetIds:F(e,"dragOperation.targetIds",[])})}),dragOffset:Ie(e.dragOffset,t),refCount:Re(e.refCount,t),dragOperation:xe(e.dragOperation,t),stateId:Be(e.stateId)}}function He(e,t){return{x:e.x-t.x,y:e.y-t.y}}function Qe(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{handlerIds:void 0},r=n.handlerIds;M("function"==typeof e,"listener must be a function."),M(void 0===r||Array.isArray(r),"handlerIds, when specified, must be an array of strings.");var a=this.store.getState().stateId,i=function(){var n=t.store.getState(),i=n.stateId;try{i===a||i===a+1&&!Ne(n.dirtyHandlerIds,r)||e()}finally{a=i}};return this.store.subscribe(i)}},{key:"subscribeToOffsetChange",value:function(e){var t=this;M("function"==typeof e,"listener must be a function.");var n=this.store.getState().dragOffset;return this.store.subscribe((function(){var r=t.store.getState().dragOffset;r!==n&&(n=r,e())}))}},{key:"canDragSource",value:function(e){if(!e)return!1;var t=this.registry.getSource(e);return M(t,"Expected to find a valid source. sourceId=".concat(e)),!this.isDragging()&&t.canDrag(this,e)}},{key:"canDropOnTarget",value:function(e){if(!e)return!1;var t=this.registry.getTarget(e);return M(t,"Expected to find a valid target. targetId=".concat(e)),!(!this.isDragging()||this.didDrop())&&Y(this.registry.getTargetType(e),this.getItemType())&&t.canDrop(this,e)}},{key:"isDragging",value:function(){return Boolean(this.getItemType())}},{key:"isDraggingSource",value:function(e){if(!e)return!1;var t=this.registry.getSource(e,!0);return M(t,"Expected to find a valid source. sourceId=".concat(e)),!(!this.isDragging()||!this.isSourcePublic())&&this.registry.getSourceType(e)===this.getItemType()&&t.isDragging(this,e)}},{key:"isOverTarget",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{shallow:!1};if(!e)return!1;var n=t.shallow;if(!this.isDragging())return!1;var r=this.registry.getTargetType(e),a=this.getItemType();if(a&&!Y(r,a))return!1;var i=this.getTargetIds();if(!i.length)return!1;var o=i.indexOf(e);return n?o===i.length-1:o>-1}},{key:"getItemType",value:function(){return this.store.getState().dragOperation.itemType}},{key:"getItem",value:function(){return this.store.getState().dragOperation.item}},{key:"getSourceId",value:function(){return this.store.getState().dragOperation.sourceId}},{key:"getTargetIds",value:function(){return this.store.getState().dragOperation.targetIds}},{key:"getDropResult",value:function(){return this.store.getState().dragOperation.dropResult}},{key:"didDrop",value:function(){return this.store.getState().dragOperation.didDrop}},{key:"isSourcePublic",value:function(){return Boolean(this.store.getState().dragOperation.isSourcePublic)}},{key:"getInitialClientOffset",value:function(){return this.store.getState().dragOffset.initialClientOffset}},{key:"getInitialSourceClientOffset",value:function(){return this.store.getState().dragOffset.initialSourceClientOffset}},{key:"getClientOffset",value:function(){return this.store.getState().dragOffset.clientOffset}},{key:"getSourceClientOffset",value:function(){return e=this.store.getState().dragOffset,r=e.clientOffset,a=e.initialClientOffset,i=e.initialSourceClientOffset,r&&a&&i?He((n=i,{x:(t=r).x+n.x,y:t.y+n.y}),a):null;var e,t,n,r,a,i}},{key:"getDifferenceFromInitialOffset",value:function(){return e=this.store.getState().dragOffset,t=e.clientOffset,n=e.initialClientOffset,t&&n?He(t,n):null;var e,t,n}}],n&&Qe(t.prototype,n),r&&Qe(t,r),e}(),We=0;function Ye(e){return Ye="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ye(e)}function Ze(e,t){t&&Array.isArray(e)?e.forEach((function(e){return Ze(e,!1)})):M("string"==typeof e||"symbol"===Ye(e),t?"Type can only be a string, a symbol, or an array of either.":"Type can only be a string or a symbol.")}!function(e){e.SOURCE="SOURCE",e.TARGET="TARGET"}(qe||(qe={}));const Ke="undefined"!=typeof global?global:self,Xe=Ke.MutationObserver||Ke.WebKitMutationObserver;function $e(e){return function(){const t=setTimeout(r,0),n=setInterval(r,50);function r(){clearTimeout(t),clearInterval(n),e()}}}const Je="function"==typeof Xe?function(e){let t=1;const n=new Xe(e),r=document.createTextNode("");return n.observe(r,{characterData:!0}),function(){t=-t,r.data=t}}:$e;class et{call(){try{this.task&&this.task()}catch(e){this.onError(e)}finally{this.task=null,this.release(this)}}constructor(e,t){this.onError=e,this.release=t,this.task=null}}const tt=new class{enqueueTask(e){const{queue:t,requestFlush:n}=this;t.length||(n(),this.flushing=!0),t[t.length]=e}constructor(){this.queue=[],this.pendingErrors=[],this.flushing=!1,this.index=0,this.capacity=1024,this.flush=()=>{const{queue:e}=this;for(;this.indexthis.capacity){for(let t=0,n=e.length-this.index;t{this.pendingErrors.push(e),this.requestErrorThrow()},this.requestFlush=Je(this.flush),this.requestErrorThrow=$e((()=>{if(this.pendingErrors.length)throw this.pendingErrors.shift()}))}},nt=new class{create(e){const t=this.freeTasks,n=t.length?t.pop():new et(this.onError,(e=>t[t.length]=e));return n.task=e,n}constructor(e){this.onError=e,this.freeTasks=[]}}(tt.registerPendingError);function rt(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&void 0!==arguments[1]&&arguments[1];M(this.isSourceId(e),"Expected a valid source ID.");var n=t&&e===this.pinnedSourceId,r=n?this.pinnedSource:this.dragSources.get(e);return r}},{key:"getTarget",value:function(e){return M(this.isTargetId(e),"Expected a valid target ID."),this.dropTargets.get(e)}},{key:"getSourceType",value:function(e){return M(this.isSourceId(e),"Expected a valid source ID."),this.types.get(e)}},{key:"getTargetType",value:function(e){return M(this.isTargetId(e),"Expected a valid target ID."),this.types.get(e)}},{key:"isSourceId",value:function(e){return st(e)===qe.SOURCE}},{key:"isTargetId",value:function(e){return st(e)===qe.TARGET}},{key:"removeSource",value:function(e){var t,n=this;M(this.getSource(e),"Expected an existing source."),this.store.dispatch(function(e){return{type:De,payload:{sourceId:e}}}(e)),t=function(){n.dragSources.delete(e),n.types.delete(e)},tt.enqueueTask(nt.create(t))}},{key:"removeTarget",value:function(e){M(this.getTarget(e),"Expected an existing target."),this.store.dispatch(function(e){return{type:_e,payload:{targetId:e}}}(e)),this.dropTargets.delete(e),this.types.delete(e)}},{key:"pinSource",value:function(e){var t=this.getSource(e);M(t,"Expected an existing source."),this.pinnedSourceId=e,this.pinnedSource=t}},{key:"unpinSource",value:function(){M(this.pinnedSource,"No source is pinned at the time."),this.pinnedSourceId=null,this.pinnedSource=null}},{key:"addHandler",value:function(e,t,n){var r=ot(e);return this.types.set(r,t),e===qe.SOURCE?this.dragSources.set(r,n):e===qe.TARGET&&this.dropTargets.set(r,n),r}}],n&&rt(t.prototype,n),r&&rt(t,r),e}();function ct(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],a=dt(r),i=new ze(a,new lt(a)),o=new le(a,i),s=e(o,t,n);return o.receiveBackend(s),o}function dt(e){var t="undefined"!=typeof window&&window.__REDUX_DEVTOOLS_EXTENSION__;return pe(Ge,e&&t&&t({name:"dnd-core",instanceId:"dnd-core"}))}var ft=(0,l.createContext)({dragDropManager:void 0});function vt(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(e)))return;var n=[],r=!0,a=!1,i=void 0;try{for(var o,s=e[Symbol.iterator]();!(r=(o=s.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){a=!0,i=e}finally{try{r||null==s.return||s.return()}finally{if(a)throw i}}return n}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return mt(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return mt(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function mt(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var ht=0,gt=Symbol.for("__REACT_DND_CONTEXT_INSTANCE__"),At=(0,l.memo)((function(e){var t=e.children,n=function(e){if("manager"in e){return[{dragDropManager:e.manager},!1]}var t=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:yt(),n=arguments.length>2?arguments[2]:void 0,r=arguments.length>3?arguments[3]:void 0,a=t;a[gt]||(a[gt]={dragDropManager:ct(e,t,n,r)});return a[gt]}(e.backend,e.context,e.options,e.debugMode),n=!e.context;return[t,n]}(pt(e,["children"])),r=vt(n,2),a=r[0],i=r[1];return(0,l.useEffect)((function(){if(i){var e=yt();return++ht,function(){0==--ht&&(e[gt]=null)}}}),[]),(0,_.jsx)(ft.Provider,Object.assign({value:a},{children:t}),void 0)}));function yt(){return void 0!==n.g?n.g:window}function St(e){var t=null;return function(){return null==t&&(t=e()),t}}function bt(e,t){for(var n=0;n0}},{key:"leave",value:function(e){var t,n,r=this.entered.length;return this.entered=(t=this.entered.filter(this.isNodeInDocument),n=e,t.filter((function(e){return e!==n}))),r>0&&0===this.entered.length}},{key:"reset",value:function(){this.entered=[]}}])&&bt(t.prototype,n),r&&bt(t,r),e}(),It=St((function(){return/firefox/i.test(navigator.userAgent)})),Et=St((function(){return Boolean(window.safari)}));function Ct(e,t){for(var n=0;ne))return n[s];l=s-1}}var d=e-t[o=Math.max(0,l)],f=d*d;return n[o]+r[o]*d+a[o]*f+i[o]*d*f}}])&&Ct(t.prototype,n),r&&Ct(t,r),e}();function _t(e){var t=1===e.nodeType?e:e.parentElement;if(!t)return null;var n=t.getBoundingClientRect(),r=n.top;return{x:n.left,y:r}}function Mt(e){return{x:e.clientX,y:e.clientY}}function Ot(e,t,n,r,a){var i,o,s,u="IMG"===(i=t).nodeName&&(It()||!(null!==(o=document.documentElement)&&void 0!==o&&o.contains(i))),l=_t(u?e:t),c={x:n.x-l.x,y:n.y-l.y},d=e.offsetWidth,f=e.offsetHeight,v=r.anchorX,m=r.anchorY,p=function(e,t,n,r){var a=e?t.width:n,i=e?t.height:r;return Et()&&e&&(i/=window.devicePixelRatio,a/=window.devicePixelRatio),{dragPreviewWidth:a,dragPreviewHeight:i}}(u,t,d,f),h=p.dragPreviewWidth,g=p.dragPreviewHeight,A=a.offsetX,y=a.offsetY,S=0===y||y;return{x:0===A||A?A:new Dt([0,.5,1],[c.x,c.x/d*h,c.x+h-d]).interpolate(v),y:S?y:(s=new Dt([0,.5,1],[c.y,c.y/f*g,c.y+g-f]).interpolate(m),Et()&&u&&(s+=(window.devicePixelRatio-1)*g),s)}}var Pt,Tt="__NATIVE_FILE__",xt="__NATIVE_URL__",Rt="__NATIVE_TEXT__",Lt="__NATIVE_HTML__";function kt(e,t,n){var r=t.reduce((function(t,n){return t||e.getData(n)}),"");return null!=r?r:n}function Nt(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Ft=(Nt(Pt={},Tt,{exposeProperties:{files:function(e){return Array.prototype.slice.call(e.files)},items:function(e){return e.items}},matchesTypes:["Files"]}),Nt(Pt,Lt,{exposeProperties:{html:function(e,t){return kt(e,t,"")}},matchesTypes:["Html","text/html"]}),Nt(Pt,xt,{exposeProperties:{urls:function(e,t){return kt(e,t,"").split("\n")}},matchesTypes:["Url","text/uri-list"]}),Nt(Pt,Rt,{exposeProperties:{text:function(e,t){return kt(e,t,"")}},matchesTypes:["Text","text/plain"]}),Pt);function Bt(e,t){for(var n=0;n-1}))}))[0]||null}function jt(e,t){for(var n=0;n0&&a.actions.hover(t,{clientOffset:Mt(e)}),t.some((function(e){return a.monitor.canDropOnTarget(e)}))&&(e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect=a.getCurrentDropEffect())))},this.handleTopDragOverCapture=function(){a.dragOverTargetIds=[]},this.handleTopDragOver=function(e){var t=a.dragOverTargetIds;if(a.dragOverTargetIds=[],!a.monitor.isDragging())return e.preventDefault(),void(e.dataTransfer&&(e.dataTransfer.dropEffect="none"));a.altKeyPressed=e.altKey,a.actions.hover(t||[],{clientOffset:Mt(e)}),(t||[]).some((function(e){return a.monitor.canDropOnTarget(e)}))?(e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect=a.getCurrentDropEffect())):a.isDraggingNativeItem()?e.preventDefault():(e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect="none"))},this.handleTopDragLeaveCapture=function(e){a.isDraggingNativeItem()&&e.preventDefault(),a.enterLeaveCounter.leave(e.target)&&a.isDraggingNativeItem()&&setTimeout((function(){return a.endDragNativeItem()}),0)},this.handleTopDropCapture=function(e){var t;(a.dropTargetIds=[],a.isDraggingNativeItem())&&(e.preventDefault(),null===(t=a.currentNativeSource)||void 0===t||t.loadDataTransfer(e.dataTransfer));a.enterLeaveCounter.reset()},this.handleTopDrop=function(e){var t=a.dropTargetIds;a.dropTargetIds=[],a.actions.hover(t,{clientOffset:Mt(e)}),a.actions.drop({dropEffect:a.getCurrentDropEffect()}),a.isDraggingNativeItem()?a.endDragNativeItem():a.monitor.isDragging()&&a.actions.endDrag()},this.handleSelectStart=function(e){var t=e.target;"function"==typeof t.dragDrop&&("INPUT"===t.tagName||"SELECT"===t.tagName||"TEXTAREA"===t.tagName||t.isContentEditable||(e.preventDefault(),t.dragDrop()))},this.options=new Gt(n,r),this.actions=t.getActions(),this.monitor=t.getMonitor(),this.registry=t.getRegistry(),this.enterLeaveCounter=new wt(this.isNodeInDocument)}var t,n,a;return t=e,(n=[{key:"profile",value:function(){var e,t;return{sourcePreviewNodes:this.sourcePreviewNodes.size,sourcePreviewNodeOptions:this.sourcePreviewNodeOptions.size,sourceNodeOptions:this.sourceNodeOptions.size,sourceNodes:this.sourceNodes.size,dragStartSourceIds:(null===(e=this.dragStartSourceIds)||void 0===e?void 0:e.length)||0,dropTargetIds:this.dropTargetIds.length,dragEnterTargetIds:this.dragEnterTargetIds.length,dragOverTargetIds:(null===(t=this.dragOverTargetIds)||void 0===t?void 0:t.length)||0}}},{key:"window",get:function(){return this.options.window}},{key:"document",get:function(){return this.options.document}},{key:"rootElement",get:function(){return this.options.rootElement}},{key:"setup",value:function(){var e=this.rootElement;if(void 0!==e){if(e.__isReactDndBackendSetUp)throw new Error("Cannot have two HTML5 backends at the same time.");e.__isReactDndBackendSetUp=!0,this.addEventListeners(e)}}},{key:"teardown",value:function(){var e,t=this.rootElement;void 0!==t&&(t.__isReactDndBackendSetUp=!1,this.removeEventListeners(this.rootElement),this.clearCurrentDragSourceNode(),this.asyncEndDragFrameId&&(null===(e=this.window)||void 0===e||e.cancelAnimationFrame(this.asyncEndDragFrameId)))}},{key:"connectDragPreview",value:function(e,t,n){var r=this;return this.sourcePreviewNodeOptions.set(e,n),this.sourcePreviewNodes.set(e,t),function(){r.sourcePreviewNodes.delete(e),r.sourcePreviewNodeOptions.delete(e)}}},{key:"connectDragSource",value:function(e,t,n){var r=this;this.sourceNodes.set(e,t),this.sourceNodeOptions.set(e,n);var a=function(t){return r.handleDragStart(t,e)},i=function(e){return r.handleSelectStart(e)};return t.setAttribute("draggable","true"),t.addEventListener("dragstart",a),t.addEventListener("selectstart",i),function(){r.sourceNodes.delete(e),r.sourceNodeOptions.delete(e),t.removeEventListener("dragstart",a),t.removeEventListener("selectstart",i),t.setAttribute("draggable","false")}}},{key:"connectDropTarget",value:function(e,t){var n=this,r=function(t){return n.handleDragEnter(t,e)},a=function(t){return n.handleDragOver(t,e)},i=function(t){return n.handleDrop(t,e)};return t.addEventListener("dragenter",r),t.addEventListener("dragover",a),t.addEventListener("drop",i),function(){t.removeEventListener("dragenter",r),t.removeEventListener("dragover",a),t.removeEventListener("drop",i)}}},{key:"addEventListeners",value:function(e){e.addEventListener&&(e.addEventListener("dragstart",this.handleTopDragStart),e.addEventListener("dragstart",this.handleTopDragStartCapture,!0),e.addEventListener("dragend",this.handleTopDragEndCapture,!0),e.addEventListener("dragenter",this.handleTopDragEnter),e.addEventListener("dragenter",this.handleTopDragEnterCapture,!0),e.addEventListener("dragleave",this.handleTopDragLeaveCapture,!0),e.addEventListener("dragover",this.handleTopDragOver),e.addEventListener("dragover",this.handleTopDragOverCapture,!0),e.addEventListener("drop",this.handleTopDrop),e.addEventListener("drop",this.handleTopDropCapture,!0))}},{key:"removeEventListeners",value:function(e){e.removeEventListener&&(e.removeEventListener("dragstart",this.handleTopDragStart),e.removeEventListener("dragstart",this.handleTopDragStartCapture,!0),e.removeEventListener("dragend",this.handleTopDragEndCapture,!0),e.removeEventListener("dragenter",this.handleTopDragEnter),e.removeEventListener("dragenter",this.handleTopDragEnterCapture,!0),e.removeEventListener("dragleave",this.handleTopDragLeaveCapture,!0),e.removeEventListener("dragover",this.handleTopDragOver),e.removeEventListener("dragover",this.handleTopDragOverCapture,!0),e.removeEventListener("drop",this.handleTopDrop),e.removeEventListener("drop",this.handleTopDropCapture,!0))}},{key:"getCurrentSourceNodeOptions",value:function(){var e=this.monitor.getSourceId(),t=this.sourceNodeOptions.get(e);return Qt({dropEffect:this.altKeyPressed?"copy":"move"},t||{})}},{key:"getCurrentDropEffect",value:function(){return this.isDraggingNativeItem()?"copy":this.getCurrentSourceNodeOptions().dropEffect}},{key:"getCurrentSourcePreviewNodeOptions",value:function(){var e=this.monitor.getSourceId();return Qt({anchorX:.5,anchorY:.5,captureDraggingState:!1},this.sourcePreviewNodeOptions.get(e)||{})}},{key:"isDraggingNativeItem",value:function(){var e=this.monitor.getItemType();return Object.keys(r).some((function(t){return r[t]===e}))}},{key:"beginDragNativeItem",value:function(e,t){this.clearCurrentDragSourceNode(),this.currentNativeSource=function(e,t){var n=new Ut(Ft[e]);return n.loadDataTransfer(t),n}(e,t),this.currentNativeHandle=this.registry.addSource(e,this.currentNativeSource),this.actions.beginDrag([this.currentNativeHandle])}},{key:"setCurrentDragSourceNode",value:function(e){var t=this;this.clearCurrentDragSourceNode(),this.currentDragSourceNode=e,this.mouseMoveTimeoutTimer=setTimeout((function(){var e;return null===(e=t.rootElement)||void 0===e?void 0:e.addEventListener("mousemove",t.endDragIfSourceWasRemovedFromDOM,!0)}),1e3)}},{key:"clearCurrentDragSourceNode",value:function(){var e;return!!this.currentDragSourceNode&&(this.currentDragSourceNode=null,this.rootElement&&(null===(e=this.window)||void 0===e||e.clearTimeout(this.mouseMoveTimeoutTimer||void 0),this.rootElement.removeEventListener("mousemove",this.endDragIfSourceWasRemovedFromDOM,!0)),this.mouseMoveTimeoutTimer=null,!0)}},{key:"handleDragStart",value:function(e,t){e.defaultPrevented||(this.dragStartSourceIds||(this.dragStartSourceIds=[]),this.dragStartSourceIds.unshift(t))}},{key:"handleDragEnter",value:function(e,t){this.dragEnterTargetIds.unshift(t)}},{key:"handleDragOver",value:function(e,t){null===this.dragOverTargetIds&&(this.dragOverTargetIds=[]),this.dragOverTargetIds.unshift(t)}},{key:"handleDrop",value:function(e,t){this.dropTargetIds.unshift(t)}}])&&zt(t.prototype,n),a&&zt(t,a),e}(),Yt=function(e,t,n){return new Wt(e,t,n)};function Zt(e){return Zt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Zt(e)}var Kt="undefined"!==("undefined"==typeof window?"undefined":Zt(window))&&!(!("ontouchstart"in window)&&!navigator.maxTouchPoints);function Xt(e){var t=e.children,n=Yt;return console.log("using... touch backend?",Kt),l.createElement(At,{backend:n,opts:{}},t)}Xt.propTypes={children:i().any};var $t=Xt,Jt=n(38942);function en(){return en=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var ba=function(e){var t,n,r=e.name,a=Sa(e,ga);return l.createElement(l.Fragment,null,(t=r,n=function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=m?0:e.activeViewportIndex;p.lengthm;)p.pop();for(var g=0;ge.length)&&(t=e.length);for(var n=0,r=new Array(t);n browser(navigator.userAgent or res.headers['user-agent']).")},e}();function bi(e,t){return e(t={exports:{}},t.exports),t.exports}var wi=bi((function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)})),Ii=bi((function(e){var t=e.exports={version:"2.5.7"};"number"==typeof __e&&(__e=t)})),Ei=(Ii.version,function(e){return"object"==typeof e?null!==e:"function"==typeof e}),Ci=function(e){if(!Ei(e))throw TypeError(e+" is not an object!");return e},Di=function(e){try{return!!e()}catch(e){return!0}},_i=!Di((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})),Mi=wi.document,Oi=Ei(Mi)&&Ei(Mi.createElement),Pi=!_i&&!Di((function(){return 7!=Object.defineProperty((e="div",Oi?Mi.createElement(e):{}),"a",{get:function(){return 7}}).a;var e})),Ti=Object.defineProperty,xi=_i?Object.defineProperty:function(e,t,n){if(Ci(e),t=function(e,t){if(!Ei(e))return e;var n,r;if(t&&"function"==typeof(n=e.toString)&&!Ei(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!Ei(r=n.call(e)))return r;if(!t&&"function"==typeof(n=e.toString)&&!Ei(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")}(t,!0),Ci(n),Pi)try{return Ti(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e},Ri={f:xi},Li=_i?function(e,t,n){return Ri.f(e,t,function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}(1,n))}:function(e,t,n){return e[t]=n,e},ki={}.hasOwnProperty,Ni=function(e,t){return ki.call(e,t)},Fi=0,Bi=Math.random(),Ui=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++Fi+Bi).toString(36))},Vi=bi((function(e){var t=Ui("src"),n="toString",r=Function.toString,a=(""+r).split(n);Ii.inspectSource=function(e){return r.call(e)},(e.exports=function(e,n,r,i){var o="function"==typeof r;o&&(Ni(r,"name")||Li(r,"name",n)),e[n]!==r&&(o&&(Ni(r,t)||Li(r,t,e[n]?""+e[n]:a.join(String(n)))),e===wi?e[n]=r:i?e[n]?e[n]=r:Li(e,n,r):(delete e[n],Li(e,n,r)))})(Function.prototype,n,(function(){return"function"==typeof this&&this[t]||r.call(this)}))})),ji=function(e,t,n){if(function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!")}(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,a){return e.call(t,n,r,a)}}return function(){return e.apply(t,arguments)}},Gi=function(e,t,n){var r,a,i,o,s=e&Gi.F,u=e&Gi.G,l=e&Gi.S,c=e&Gi.P,d=e&Gi.B,f=u?wi:l?wi[t]||(wi[t]={}):(wi[t]||{}).prototype,v=u?Ii:Ii[t]||(Ii[t]={}),m=v.prototype||(v.prototype={});for(r in u&&(n=t),n)i=((a=!s&&f&&void 0!==f[r])?f:n)[r],o=d&&a?ji(i,wi):c&&"function"==typeof i?ji(Function.call,i):i,f&&Vi(f,r,i,e&Gi.U),v[r]!=i&&Li(v,r,o),c&&m[r]!=i&&(m[r]=i)};wi.core=Ii,Gi.F=1,Gi.G=2,Gi.S=4,Gi.P=8,Gi.B=16,Gi.W=32,Gi.U=64,Gi.R=128;var Hi=Gi,Qi={}.toString,qi=function(e){return Qi.call(e).slice(8,-1)},zi=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==qi(e)?e.split(""):Object(e)},Wi=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e},Yi=Math.ceil,Zi=Math.floor,Ki=Math.min,Xi=function(e){return e>0?Ki(function(e){return isNaN(e=+e)?0:(e>0?Zi:Yi)(e)}(e),9007199254740991):0},$i=Array.isArray||function(e){return"Array"==qi(e)},Ji=bi((function(e){var t="__core-js_shared__",n=wi[t]||(wi[t]={});(e.exports=function(e,t){return n[e]||(n[e]=void 0!==t?t:{})})("versions",[]).push({version:Ii.version,mode:"global",copyright:"© 2018 Denis Pushkarev (zloirock.ru)"})})),eo=bi((function(e){var t=Ji("wks"),n=wi.Symbol,r="function"==typeof n;(e.exports=function(e){return t[e]||(t[e]=r&&n[e]||(r?n:Ui)("Symbol."+e))}).store=t}))("species"),to=function(e,t){return new(function(e){var t;return $i(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!$i(t.prototype)||(t=void 0),Ei(t)&&null===(t=t[eo])&&(t=void 0)),void 0===t?Array:t}(e))(t)},no=function(e,t){var n=1==e,r=2==e,a=3==e,i=4==e,o=6==e,s=5==e||o,u=t||to;return function(t,l,c){for(var d,f,v=Object(Wi(t)),m=zi(v),p=ji(l,c,3),h=Xi(m.length),g=0,A=n?u(t,h):r?u(t,0):void 0;h>g;g++)if((s||g in m)&&(f=p(d=m[g],g,v),e))if(n)A[g]=f;else if(f)switch(e){case 3:return!0;case 5:return d;case 6:return g;case 2:A.push(d)}else if(i)return!1;return o?-1:a||i?i:A}},ro=function(e,t){return!!e&&Di((function(){t?e.call(null,(function(){}),1):e.call(null)}))},ao=no(2);Hi(Hi.P+Hi.F*!ro([].filter,!0),"Array",{filter:function(e){return ao(this,e,arguments[1])}});Ii.Array.filter;var io=no(1);Hi(Hi.P+Hi.F*!ro([].map,!0),"Array",{map:function(e){return io(this,e,arguments[1])}});Ii.Array.map;var oo="\t\n\v\f\r   ᠎              \u2028\u2029\ufeff",so="["+oo+"]",uo=RegExp("^"+so+so+"*"),lo=RegExp(so+so+"*$"),co=function(e,t,n){var r={},a=Di((function(){return!!oo[e]()||"​…"!="​…"[e]()})),i=r[e]=a?t(fo):oo[e];n&&(r[n]=i),Hi(Hi.P+Hi.F*a,"String",r)},fo=co.trim=function(e,t){return e=String(Wi(e)),1&t&&(e=e.replace(uo,"")),2&t&&(e=e.replace(lo,"")),e};co("trim",(function(e){return function(){return e(this,3)}}));Ii.String.trim;var vo="undefined"!=typeof window?window.navigator:void 0,mo="undefined"!=typeof process?process:void 0;var po=function(e){return new Si(e,vo,mo).detect()},ho=function(e){var t=e.href,n=e.children,r=e.showIcon,a=void 0!==r&&r;return l.createElement("a",{href:t,target:"_blank",rel:"noopener noreferrer"},l.createElement(Rh,{variant:"subtitle",component:"p",color:"primaryActive",className:"flex items-center"},n,!!a&&l.createElement(wa,{name:"external-link",className:"w-5 ml-2 text-white"})))},go=function(e){var t=e.title,n=e.value,r=e.link;return l.createElement("div",{className:"flex mb-4"},l.createElement(Rh,{variant:"subtitle",component:"p",className:"w-48 text-white"},t),r?l.createElement(ho,{href:r},n):l.createElement(Rh,{variant:"subtitle",component:"p",className:"w-48 text-white"},n))},Ao=function(e){var t=e.buildNumber,n=e.versionNumber,r=po(),a=r.os,i=r.version,o=r.name,s="".concat(o[0].toUpperCase()).concat(o.substr(1)," ").concat(i),u=function(e){return l.createElement("div",{className:"pb-3 mb-3 border-b-2 border-black"},l.createElement(Rh,{variant:"h6",className:"text-primary-light"},e))};return l.createElement("div",null,u("Important Links"),l.createElement("div",{className:"flex mb-8"},l.createElement(ho,{href:"https://community.ohif.org/",showIcon:!0},"Visit the forum"),l.createElement("span",{className:"ml-4"},l.createElement(ho,{href:"https://github.com/OHIF/Viewers/issues/new/choose",showIcon:!0},"Report an issue")),l.createElement("span",{className:"ml-4"},l.createElement(ho,{href:"https://ohif.org/",showIcon:!0},"More details"))),u("Version Information"),l.createElement("div",{className:"flex flex-col"},l.createElement(go,{title:"Repository URL",value:"https://github.com/OHIF/Viewers/tree/v3-stable",link:"https://github.com/OHIF/Viewers/tree/v3-stable"}),l.createElement(go,{title:"Version number",value:n}),l.createElement(go,{title:"Build number",value:t}),l.createElement(go,{title:"Browser",value:s}),l.createElement(go,{title:"OS",value:a})))};Ao.propTypes={buildNumber:i().string,versionNumber:i().string};var yo=Ao,So=["children","variant","color","border","size","rounded","disabled","type","fullWidth","bgColor","startIcon","endIcon","name","className","onClick"];function bo(){return bo=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var Io="default",Eo=!1,Co=!1,Do="medium",_o="none",Mo="medium",Oo="button",Po="contained",To={none:"",small:"rounded",medium:"rounded-md",large:"rounded-lg",full:"rounded-full"},xo={text:{default:"text-primary-light hover:bg-primary-light hover:text-white active:opacity-80 focus:bg-primary-light focus:text-white",primary:"text-primary-main hover:bg-primary-main hover:text-white active:opacity-80 focus:bg-primary-main focus:text-white",secondary:"text-secondary-light hover:bg-secondary-light hover:text-white active:opacity-80 focus:bg-secondary-light focus:text-white",white:"text-white hover:bg-white hover:text-black active:opacity-80 focus:bg-white focus:text-black",black:"text-black hover:bg-black hover:text-white focus:bg-black focus:text-white active:opacity-80"},outlined:{default:"text-primary-light hover:bg-primary-light hover:text-black focus:text-black focus:bg-primary-light active:opacity-80",primary:"text-primary-main hover:opacity-80 active:opacity-100 focus:opacity-80",secondary:"text-secondary-light hover:opacity-80 active:opacity-100 focus:opacity-80",white:"text-white hover:opacity-80 active:opacity-100 focus:opacity-80",black:"text-white hover:bg-primary-main focus:bg-primary-main hover:border-black focus:border-black",primaryActive:"text-primary-active hover:opacity-80 active:opacity-100 focus:opacity-80",primaryLight:"border bg-transparent border-primary-main text-white hover:opacity-80 active:opacity-100 focus:opacity-80"},contained:{default:"text-black hover:opacity-80 active:opacity-100 focus:opacity-80",primary:"text-white hover:opacity-80 active:opacity-100 focus:opacity-80",secondary:"text-white hover:opacity-80 active:opacity-100 focus:opacity-80",white:"text-black hover:opacity-80 active:opacity-100 focus:opacity-80",black:"text-white hover:opacity-80 active:opacity-100 focus:opacity-80",light:"border text-black hover:opacity-80 active:opacity-100 focus:opacity-80"},disabled:{default:"cursor-not-allowed opacity-50 text-black",primary:"cursor-not-allowed opacity-50 text-white",secondary:"cursor-not-allowed opacity-50 text-white",white:"cursor-not-allowed opacity-50 text-black",black:"cursor-not-allowed opacity-50 text-white",light:"cursor-not-allowed opacity-50 border text-black"}},Ro={text:{default:"",primary:"",secondary:"",white:"",black:""},outlined:{default:"bg-transparent",primary:"bg-transparent",secondary:"bg-transparent",black:"bg-black",white:""},contained:{default:"bg-primary-light",primary:"bg-primary-main",secondary:"bg-secondary-light",white:"bg-white",black:"bg-black",light:"bg-primary-light"},disabled:{default:"bg-primary-light",primary:"bg-primary-main",secondary:"bg-secondary-light",white:"bg-white",black:"bg-black",light:"bg-primary-light"}},Lo={none:"",light:"border border-primary-light",primary:"border border-primary-main",primaryActive:"border border-primary-active",secondary:"border border-secondary-light",white:"border border-white",black:"border border-black"},ko={small:"py-2 px-2 text-sm min-w-md",medium:"py-2 px-2 text-lg min-w-md",large:"py-2 px-6 text-xl min-w-md",initial:""},No={true:"flex w-full",false:"inline-flex"},Fo=function(e){var t=e.children,n=e.variant,r=void 0===n?Po:n,a=e.color,i=void 0===a?Io:a,o=e.border,s=void 0===o?_o:o,u=e.size,c=void 0===u?Mo:u,d=e.rounded,f=void 0===d?Do:d,m=e.disabled,p=void 0===m?Eo:m,h=e.type,g=void 0===h?Oo:h,A=e.fullWidth,y=void 0===A?Co:A,S=e.bgColor,b=void 0===S?null:S,w=e.startIcon,I=e.endIcon,E=e.name,C=e.className,D=e.onClick,_=wo(e,So),M=w&&l.createElement("div",{className:"mr-2"},l.cloneElement(w,{className:v()("w-4 h-4 fill-current")})),O=I&&l.createElement("div",{className:"ml-2"},l.cloneElement(I,{className:v()("w-4 h-4 fill-current")})),P=(0,l.useRef)(null),T=v()("leading-none font-sans text-center justify-center items-center outline-none transition duration-300 ease-in-out focus:outline-none",function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,r=Ro[e][t];return n||(n=r),"".concat(xo[e][t]," ").concat(n)}(r,i,b),Lo[s],To[f],ko[c],No[y],C);return l.createElement("button",bo({className:T,disabled:p,ref:P,onClick:function(e){P.current.blur(),p||D(e)},type:g,"data-cy":"".concat(E,"-btn")},_),M,t,O)};Fo.defaultProps={color:Io,disabled:!1,children:"",onClick:function(){}},Fo.propTypes={children:i().node,onClick:i().func.isRequired,size:i().oneOf(["small","medium","large","initial","inherit"]),rounded:i().oneOf(["none","small","medium","large","full"]),variant:i().oneOf(["text","outlined","contained","disabled"]),color:i().oneOf(["default","primary","secondary","white","black","inherit","light"]),border:i().oneOf(["none","light","default","primary","secondary","white","black"]),fullWidth:i().bool,disabled:i().bool,type:i().string,name:i().string,startIcon:i().node,endIcon:i().node,className:i().string,bgColor:i().string};var Bo=Fo,Uo=["children","className","disabled","fullWidth","color","orientation","rounded","size","variant","splitBorder"];function Vo(){return Vo=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var Go={vertical:{none:"",small:"first:rounded-t last:rounded-b",medium:"first:rounded-t-md last:rounded-b-md",large:"first:rounded-t-lg last:rounded-b-lg",full:"first:rounded-t-full last:rounded-b-full"},horizontal:{none:"",small:"first:rounded-l last:rounded-r",medium:"first:rounded-l-md last:rounded-r-md",large:"first:rounded-l-lg last:rounded-r-lg",full:"first:rounded-l-full last:rounded-r-full"}},Ho={text:{vertical:"border-t-0 border-l-0 border-r-0 last:border-b-0",horizontal:"border-l-0 border-t-0 border-b-0 last:border-r-0"},outlined:{vertical:"border border-b-0 last:border-b",horizontal:"border border-r-0 last:border-r"},contained:{vertical:"border-t-0 border-l-0 border-r-0 last:border-b-0",horizontal:"border-l-0 border-t-0 border-b-0 last:border-r-0"}},Qo={text:{default:"border-primary-light",primary:"border-primary-main",secondary:"border-secondary-light",white:"border-white",black:"border-primary-main"},outlined:{default:"",primary:"",secondary:"border border-secondary-light",white:"",black:"border-primary-main group-hover:bg-primary-main group-hover:border-black"},contained:{default:"border-white",primary:"border-white",secondary:"border-white",white:"border-black",black:"border-primary-main"}},qo={vertical:"flex-col",horizontal:"flex-row"},zo={vertical:"border-t-0 border-b-0",horizontal:"border-l-0 last:border-r-0"},Wo=function(e){var t=e.children,n=e.className,r=e.disabled,a=void 0!==r&&r,i=e.fullWidth,o=void 0!==i&&i,s=e.color,u=void 0===s?"default":s,c=e.orientation,d=void 0===c?"horizontal":c,f=e.rounded,m=void 0===f?"medium":f,p=e.size,h=void 0===p?"medium":p,g=e.variant,A=void 0===g?"outlined":g,y=e.splitBorder,S=void 0===y||y,b=jo(e,Uo),w=(0,l.useRef)(null),I=v()("border outline-none",Ho[A]&&Ho[A][d],Qo[A]&&Qo[A][u],Go[d]&&Go[d][m]);return l.createElement("div",Vo({role:"group",className:v()("group",n,qo[d],o?"flex":"inline-flex"),ref:w},b),l.Children.map(t,(function(e,n){var r=0===n,i=n===l.Children.count(t)-1,s=!r&&!i;return l.isValidElement(e)?l.cloneElement(e,{className:v()(I,e.props.className,!S&&s&&zo[d],!S&&i&&"last:border-l-0"),disabled:e.props.disabled||a,color:e.props.color||u,fullWidth:o,rounded:"none",size:e.props.size||h,variant:e.props.variant||A}):null})))};Wo.propTypes={children:i().node.isRequired,className:i().string,color:i().oneOf(["default","inherit","primary","secondary","white","black"]),disabled:i().bool,fullWidth:i().bool,orientation:i().oneOf(["vertical","horizontal"]),rounded:i().oneOf(["none","small","medium","large","full"]),size:i().oneOf(["small","medium","large","inherit"]),variant:i().oneOf(["text","outlined","contained"])};var Yo=Wo,Zo=function(e){var t=e.items;return l.createElement("div",{className:"relative bg-secondary-dark rounded z-50 block w-48",onContextMenu:function(e){return e.preventDefault()}},t.map((function(e,t){return l.createElement("div",{key:t,onClick:function(){return e.action(e)},className:"flex px-4 py-3 cursor-pointer items-center transition duration-300 hover:bg-primary-dark border-b border-primary-dark last:border-b-0"},l.createElement(Rh,null,e.label))})))};Zo.propTypes={items:i().arrayOf(i().shape({label:i().string.isRequired,actionType:i().string.isRequired,action:i().func.isRequired})).isRequired};var Ko=Zo,Xo=n(40001),$o=n.n(Xo);function Jo(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,a,i=[],o=!0,s=!1;try{for(n=n.call(e);!(o=(r=n.next()).done)&&(i.push(r.value),!t||i.length!==t);o=!0);}catch(e){s=!0,a=e}finally{try{o||null==n.return||n.return()}finally{if(s)throw a}}return i}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return es(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return es(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function es(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var Zs={none:"",small:"rounded",medium:"rounded-md",large:"rounded-lg",full:"rounded-full"},Ks={true:"cursor-not-allowed",false:""},Xs={text:{default:"text-white hover:bg-primary-light hover:text-black active:opacity-80 focus:bg-primary-light focus:text-black",primary:"text-primary-main hover:bg-primary-main hover:text-white active:opacity-80 focus:bg-primary-main focus:text-white",secondary:"text-secondary-light hover:bg-secondary-light hover:text-white active:opacity-80 focus:bg-secondary-light focus:text-white",white:"text-white hover:bg-white hover:text-black active:opacity-80 focus:bg-white focus:text-black",black:"text-black hover:bg-black hover:text-white focus:bg-black focus:text-white active:opacity-80"},outlined:{default:"border bg-trasparent border-primary-light text-white hover:opacity-80 active:opacity-100 focus:opacity-80",primary:"border bg-transparent border-primary-main text-primary-main hover:opacity-80 active:opacity-100 focus:opacity-80",secondary:"border bg-transparent border-secondary-light text-secondary-light hover:opacity-80 active:opacity-100 focus:opacity-80",white:"border bg-transparent border-white text-white hover:opacity-80 active:opacity-100 focus:opacity-80",black:"border bg-black border-primary-main text-white hover:bg-primary-main focus:bg-primary-main hover:border-black focus:border-black"},contained:{default:"bg-primary-light text-black hover:opacity-80 active:opacity-100 focus:opacity-80",primary:"bg-primary-main text-white hover:opacity-80 active:opacity-100 focus:opacity-80",secondary:"bg-secondary-light text-white hover:opacity-80 active:opacity-100 focus:opacity-80",white:"bg-white text-black hover:opacity-80 active:opacity-100 focus:opacity-80",black:"bg-black text-white hover:opacity-80 active:opacity-100 focus:opacity-80"}},$s={small:"py-2 px-2 text-base",medium:"py-3 px-3 text-lg",large:"py-4 px-4 text-xl",initial:"",toolbar:"text-lg"},Js={small:"w-4 h-4",medium:"w-5 h-5",large:"w-6 h-6",toolbar:"w-5 h-5"},eu={true:"flex w-full",false:"inline-flex"},tu=function(e){var t=e.children,n=e.variant,r=e.color,a=e.size,i=e.rounded,o=e.disabled,s=e.type,u=e.fullWidth,c=e.onClick,d=e.className,f=(e.name,e.id),m=Ys(e,zs),p=(0,l.useRef)(null);return l.createElement("button",Ws({className:v()("text-center items-center justify-center transition duration-300 ease-in-out outline-none font-bold focus:outline-none",Xs[n][r],Zs[i],$s[a],eu[u],Ks[o],d),style:{padding:"toolbar"===a?"10px":null},ref:p,onClick:function(e){p.current.blur(),c(e)},type:s,"data-cy":f},m),l.cloneElement(t,{className:v()(Js[a],"fill-current")}))};tu.defaultProps={onClick:function(){},color:"default",disabled:!1,fullWidth:!1,rounded:"medium",size:"medium",type:"button",variant:"contained"},tu.propTypes={children:i().node.isRequired,size:i().oneOf(["small","medium","large","initial","toolbar"]),rounded:i().oneOf(["none","small","medium","large","full"]),variant:i().oneOf(["text","outlined","contained"]),color:i().oneOf(["default","primary","secondary","white","black","inherit"]),fullWidth:i().bool,disabled:i().bool,type:i().string,id:i().string,className:i().node,onClick:i().func};var nu=tu,ru=["children","className","text"];function au(){return au=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var ou=function(e){var t=e.children,n=e.className,r=e.text,a=iu(e,ru);return l.createElement("label",au({className:v()("",n)},a),r,t)};ou.propTypes={children:i().node};var su=ou,uu=["id","label","containerClassName","labelClassName","className","transparent","type","value","onChange","onFocus","autoFocus","onKeyPress","onKeyDown","readOnly","disabled"];function lu(){return lu=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var du={true:"bg-transparent",false:"bg-black"},fu=function(e){var t=e.id,n=e.label,r=e.containerClassName,a=void 0===r?"":r,i=e.labelClassName,o=void 0===i?"":i,s=e.className,u=void 0===s?"":s,c=e.transparent,d=void 0!==c&&c,f=e.type,m=void 0===f?"text":f,p=e.value,h=e.onChange,g=e.onFocus,A=e.autoFocus,y=e.onKeyPress,S=e.onKeyDown,b=e.readOnly,w=e.disabled,I=cu(e,uu);return l.createElement("div",{className:v()("flex flex-col flex-1",a)},l.createElement(su,{className:o,text:n}),l.createElement("input",lu({"data-cy":"input-".concat(t),className:v()(n&&"mt-2",u,"shadow transition duration-300 appearance-none border border-primary-main hover:border-gray-500 focus:border-gray-500 focus:outline-none rounded w-full py-2 px-3 text-sm text-white leading-tight focus:outline-none",du[d],{"cursor-not-allowed":w}),disabled:w,readOnly:b,autoFocus:A,type:m,value:p,onChange:h,onFocus:g,onKeyPress:y,onKeyDown:S},I)))};fu.propTypes={label:i().string,containerClassName:i().string,labelClassName:i().string,className:i().string,transparent:i().bool,type:i().string,value:i().any,onChange:i().func,onFocus:i().func,autoFocus:i().bool,readOnly:i().bool,onKeyPress:i().func,onKeyDown:i().func,disabled:i().bool};var vu=fu,mu=function(e){var t=e.id,n=e.label,r=e.isSortable,a=e.sortDirection,i=e.onLabelClick,o=e.value,s=e.onChange,u=o.startDate,c=o.endDate;return l.createElement(Eu,{label:n,isSortable:r,sortDirection:a,onLabelClick:function(e){e.preventDefault(),i(e)}},l.createElement("div",{className:"relative"},l.createElement(vs,{id:t,startDate:u,endDate:c,onChange:s})))};mu.defaultProps={value:{},onLabelClick:function(){}},mu.propTypes={id:i().string,label:i().string.isRequired,isSortable:i().bool.isRequired,sortDirection:i().oneOf(["ascending","descending","none"]).isRequired,onLabelClick:i().func.isRequired,value:i().shape({startDate:i().string,endDate:i().string}),onChange:i().func.isRequired};var pu=mu;function hu(e){return{1:"w-1/24",2:"w-2/24",3:"w-3/24",4:"w-4/24",5:"w-5/24",6:"w-6/24",7:"w-7/24",8:"w-8/24",9:"w-9/24",10:"w-10/24",11:"w-11/24",12:"w-12/24",13:"w-13/24",14:"w-14/24",15:"w-15/24",16:"w-16/24",17:"w-17/24",18:"w-18/24",19:"w-19/24",20:"w-20/24",21:"w-21/24",22:"w-22/24",23:"w-23/24",24:"w-24/24"}[e]}function gu(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Au(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);nv)&&(U=(G=G.replace(" ",":")).length),0r&&(r=(t=t.trim()).charCodeAt(0)),r){case 38:return t.replace(h,"$1"+e.trim());case 58:return e.trim()+t.replace(h,"$1"+e.trim());default:if(0<1*n&&0u.charCodeAt(8))break;case 115:o=o.replace(u,"-webkit-"+u)+";"+o;break;case 207:case 102:o=o.replace(u,"-webkit-"+(102r.charCodeAt(0)&&(r=r.trim()),r=[r],0=4;++r,a-=4)t=1540483477*(65535&(t=255&e.charCodeAt(r)|(255&e.charCodeAt(++r))<<8|(255&e.charCodeAt(++r))<<16|(255&e.charCodeAt(++r))<<24))+(59797*(t>>>16)<<16),n=1540483477*(65535&(t^=t>>>24))+(59797*(t>>>16)<<16)^1540483477*(65535&n)+(59797*(n>>>16)<<16);switch(a){case 3:n^=(255&e.charCodeAt(r+2))<<16;case 2:n^=(255&e.charCodeAt(r+1))<<8;case 1:n=1540483477*(65535&(n^=255&e.charCodeAt(r)))+(59797*(n>>>16)<<16)}return(((n=1540483477*(65535&(n^=n>>>13))+(59797*(n>>>16)<<16))^n>>>15)>>>0).toString(36)},ll={animationIterationCount:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};var cl=/[A-Z]|^ms/g,dl=/_EMO_([^_]+?)_([^]*?)_EMO_/g,fl=function(e){return 45===e.charCodeAt(1)},vl=function(e){return null!=e&&"boolean"!=typeof e},ml=function(e){var t={};return function(n){return void 0===t[n]&&(t[n]=e(n)),t[n]}}((function(e){return fl(e)?e:e.replace(cl,"-$&").toLowerCase()})),pl=function(e,t){switch(e){case"animation":case"animationName":if("string"==typeof t)return t.replace(dl,(function(e,t,n){return gl={name:t,styles:n,next:gl},t}))}return 1===ll[e]||fl(e)||"number"!=typeof t||0===t?t:t+"px"};function hl(e,t,n,r){if(null==n)return"";if(void 0!==n.__emotion_styles)return n;switch(typeof n){case"boolean":return"";case"object":if(1===n.anim)return gl={name:n.name,styles:n.styles,next:gl},n.name;if(void 0!==n.styles){var a=n.next;if(void 0!==a)for(;void 0!==a;)gl={name:a.name,styles:a.styles,next:gl},a=a.next;return n.styles+";"}return function(e,t,n){var r="";if(Array.isArray(n))for(var a=0;a=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var Bl=n(20011),Ul=n(21930),Vl=n(42097),jl=n(36655),Gl=function(){};function Hl(e,t){return t?"-"===t[0]?e+t:e+"__"+t:e}function Ql(e,t,n){var r=[n];if(t&&e)for(var a in t)t.hasOwnProperty(a)&&t[a]&&r.push("".concat(Hl(e,a)));return r.filter((function(e){return e})).map((function(e){return String(e).trim()})).join(" ")}var ql=function(e){return Array.isArray(e)?e.filter(Boolean):"object"===(0,jl.Z)(e)&&null!==e?[e]:[]};function zl(e){return[document.documentElement,document.body,window].indexOf(e)>-1}function Wl(e){return zl(e)?window.pageYOffset:e.scrollTop}function Yl(e,t){zl(e)?window.scrollTo(0,t):e.scrollTop=t}function Zl(e,t,n,r){return n*((e=e/r-1)*e*e+1)+t}function Kl(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:200,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:Gl,a=Wl(e),i=t-a,o=10,s=0;function u(){var t=Zl(s+=o,a,i,n);Yl(e,t),s=v)return{placement:"bottom",maxHeight:t};if(I>=v&&!o)return i&&Kl(u,E,D),{placement:"bottom",maxHeight:t};if(!o&&I>=r||o&&b>=r)return i&&Kl(u,E,D),{placement:"bottom",maxHeight:o?b-A:I-A};if("auto"===a||o){var _=t,M=o?S:w;return M>=r&&(_=Math.min(M-A-s.controlHeight,t)),{placement:"top",maxHeight:_}}if("bottom"===a)return Yl(u,E),{placement:"bottom",maxHeight:t};break;case"top":if(S>=v)return{placement:"top",maxHeight:t};if(w>=v&&!o)return i&&Kl(u,C,D),{placement:"top",maxHeight:t};if(!o&&w>=r||o&&S>=r){var O=t;return(!o&&w>=r||o&&S>=r)&&(O=o?S-y:w-y),i&&Kl(u,C,D),{placement:"top",maxHeight:O}}return{placement:"bottom",maxHeight:t};default:throw new Error('Invalid placement provided "'.concat(a,'".'))}return l}var ec=function(e){return"auto"===e?"bottom":e},tc=function(e){function t(){var e,n;(0,Hu.Z)(this,t);for(var r=arguments.length,a=new Array(r),i=0;i0,m=c-d-l,p=!1;m>t&&n.isBottom&&(i&&i(e),n.isBottom=!1),v&&n.isTop&&(s&&s(e),n.isTop=!1),v&&t>m?(a&&!n.isBottom&&a(e),f.scrollTop=c,p=!0,n.isBottom=!0):!v&&-t>l&&(o&&!n.isTop&&o(e),f.scrollTop=0,p=!0,n.isTop=!0),p&&n.cancelScroll(e)})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"onWheel",(function(e){n.handleEventDelta(e,e.deltaY)})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"onTouchStart",(function(e){n.touchStart=e.changedTouches[0].clientY})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"onTouchMove",(function(e){var t=n.touchStart-e.changedTouches[0].clientY;n.handleEventDelta(e,t)})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"getScrollTarget",(function(e){n.scrollTarget=e})),n}return(0,Wu.Z)(t,e),(0,Qu.Z)(t,[{key:"componentDidMount",value:function(){this.startListening(this.scrollTarget)}},{key:"componentWillUnmount",value:function(){this.stopListening(this.scrollTarget)}},{key:"startListening",value:function(e){e&&("function"==typeof e.addEventListener&&e.addEventListener("wheel",this.onWheel,!1),"function"==typeof e.addEventListener&&e.addEventListener("touchstart",this.onTouchStart,!1),"function"==typeof e.addEventListener&&e.addEventListener("touchmove",this.onTouchMove,!1))}},{key:"stopListening",value:function(e){"function"==typeof e.removeEventListener&&e.removeEventListener("wheel",this.onWheel,!1),"function"==typeof e.removeEventListener&&e.removeEventListener("touchstart",this.onTouchStart,!1),"function"==typeof e.removeEventListener&&e.removeEventListener("touchmove",this.onTouchMove,!1)}},{key:"render",value:function(){return l.createElement(Vc,{innerRef:this.getScrollTarget},this.props.children)}}]),t}(l.Component),Jc=function(e){function t(){return(0,Hu.Z)(this,t),(0,qu.Z)(this,(0,zu.Z)(t).apply(this,arguments))}return(0,Wu.Z)(t,e),(0,Qu.Z)(t,[{key:"render",value:function(){var e=this.props,t=e.isEnabled,n=Fl(e,["isEnabled"]);return t?l.createElement($c,n):this.props.children}}]),t}(l.Component);(0,Zu.Z)(Jc,"defaultProps",{isEnabled:!0});var ed=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.isSearchable,r=t.isMulti,a=t.label,i=t.isDisabled;switch(e){case"menu":return"Use Up and Down to choose options".concat(i?"":", press Enter to select the currently focused option",", press Escape to exit the menu, press Tab to select the option and exit the menu.");case"input":return"".concat(a||"Select"," is focused ").concat(n?",type to refine list":"",", press Down to open the menu, ").concat(r?" press left to focus selected values":"");case"value":return"Use left and right to toggle between focused values, press Backspace to remove the currently focused value"}},td=function(e,t){var n=t.value,r=t.isDisabled;if(n)switch(e){case"deselect-option":case"pop-value":case"remove-value":return"option ".concat(n,", deselected.");case"select-option":return"option ".concat(n,r?" is disabled. Select another option.":", selected.")}},nd=function(e){return!!e.isDisabled},rd={clearIndicator:bc,container:function(e){var t=e.isDisabled;return{label:"container",direction:e.isRtl?"rtl":null,pointerEvents:t?"none":null,position:"relative"}},control:function(e){var t=e.isDisabled,n=e.isFocused,r=e.theme,a=r.colors,i=r.borderRadius,o=r.spacing;return{label:"control",alignItems:"center",backgroundColor:t?a.neutral5:a.neutral0,borderColor:t?a.neutral10:n?a.primary:a.neutral20,borderRadius:i,borderStyle:"solid",borderWidth:1,boxShadow:n?"0 0 0 1px ".concat(a.primary):null,cursor:"default",display:"flex",flexWrap:"wrap",justifyContent:"space-between",minHeight:o.controlHeight,outline:"0 !important",position:"relative",transition:"all 100ms","&:hover":{borderColor:n?a.primary:a.neutral30}}},dropdownIndicator:Sc,group:function(e){var t=e.theme.spacing;return{paddingBottom:2*t.baseUnit,paddingTop:2*t.baseUnit}},groupHeading:function(e){var t=e.theme.spacing;return{label:"group",color:"#999",cursor:"default",display:"block",fontSize:"75%",fontWeight:"500",marginBottom:"0.25em",paddingLeft:3*t.baseUnit,paddingRight:3*t.baseUnit,textTransform:"uppercase"}},indicatorsContainer:function(){return{alignItems:"center",alignSelf:"stretch",display:"flex",flexShrink:0}},indicatorSeparator:function(e){var t=e.isDisabled,n=e.theme,r=n.spacing.baseUnit,a=n.colors;return{label:"indicatorSeparator",alignSelf:"stretch",backgroundColor:t?a.neutral10:a.neutral20,marginBottom:2*r,marginTop:2*r,width:1}},input:function(e){var t=e.isDisabled,n=e.theme,r=n.spacing,a=n.colors;return{margin:r.baseUnit/2,paddingBottom:r.baseUnit/2,paddingTop:r.baseUnit/2,visibility:t?"hidden":"visible",color:a.neutral80}},loadingIndicator:function(e){var t=e.isFocused,n=e.size,r=e.theme,a=r.colors,i=r.spacing.baseUnit;return{label:"loadingIndicator",color:t?a.neutral60:a.neutral20,display:"flex",padding:2*i,transition:"color 150ms",alignSelf:"center",fontSize:n,lineHeight:1,marginRight:n,textAlign:"center",verticalAlign:"middle"}},loadingMessage:ac,menu:function(e){var t,n=e.placement,r=e.theme,a=r.borderRadius,i=r.spacing,o=r.colors;return t={label:"menu"},(0,Zu.Z)(t,function(e){return e?{bottom:"top",top:"bottom"}[e]:"bottom"}(n),"100%"),(0,Zu.Z)(t,"backgroundColor",o.neutral0),(0,Zu.Z)(t,"borderRadius",a),(0,Zu.Z)(t,"boxShadow","0 0 0 1px hsla(0, 0%, 0%, 0.1), 0 4px 11px hsla(0, 0%, 0%, 0.1)"),(0,Zu.Z)(t,"marginBottom",i.menuGutter),(0,Zu.Z)(t,"marginTop",i.menuGutter),(0,Zu.Z)(t,"position","absolute"),(0,Zu.Z)(t,"width","100%"),(0,Zu.Z)(t,"zIndex",1),t},menuList:function(e){var t=e.maxHeight,n=e.theme.spacing.baseUnit;return{maxHeight:t,overflowY:"auto",paddingBottom:n,paddingTop:n,position:"relative",WebkitOverflowScrolling:"touch"}},menuPortal:function(e){var t=e.rect,n=e.offset,r=e.position;return{left:t.left,position:r,top:n,width:t.width,zIndex:1}},multiValue:function(e){var t=e.theme,n=t.spacing,r=t.borderRadius;return{label:"multiValue",backgroundColor:t.colors.neutral10,borderRadius:r/2,display:"flex",margin:n.baseUnit/2,minWidth:0}},multiValueLabel:function(e){var t=e.theme,n=t.borderRadius,r=t.colors,a=e.cropWithEllipsis;return{borderRadius:n/2,color:r.neutral80,fontSize:"85%",overflow:"hidden",padding:3,paddingLeft:6,textOverflow:a?"ellipsis":null,whiteSpace:"nowrap"}},multiValueRemove:function(e){var t=e.theme,n=t.spacing,r=t.borderRadius,a=t.colors;return{alignItems:"center",borderRadius:r/2,backgroundColor:e.isFocused&&a.dangerLight,display:"flex",paddingLeft:n.baseUnit,paddingRight:n.baseUnit,":hover":{backgroundColor:a.dangerLight,color:a.danger}}},noOptionsMessage:rc,option:function(e){var t=e.isDisabled,n=e.isFocused,r=e.isSelected,a=e.theme,i=a.spacing,o=a.colors;return{label:"option",backgroundColor:r?o.primary:n?o.primary25:"transparent",color:t?o.neutral20:r?o.neutral0:"inherit",cursor:"default",display:"block",fontSize:"inherit",padding:"".concat(2*i.baseUnit,"px ").concat(3*i.baseUnit,"px"),width:"100%",userSelect:"none",WebkitTapHighlightColor:"rgba(0, 0, 0, 0)",":active":{backgroundColor:!t&&(r?o.primary:o.primary50)}}},placeholder:function(e){var t=e.theme,n=t.spacing;return{label:"placeholder",color:t.colors.neutral50,marginLeft:n.baseUnit/2,marginRight:n.baseUnit/2,position:"absolute",top:"50%",transform:"translateY(-50%)"}},singleValue:function(e){var t=e.isDisabled,n=e.theme,r=n.spacing,a=n.colors;return{label:"singleValue",color:t?a.neutral40:a.neutral80,marginLeft:r.baseUnit/2,marginRight:r.baseUnit/2,maxWidth:"calc(100% - ".concat(2*r.baseUnit,"px)"),overflow:"hidden",position:"absolute",textOverflow:"ellipsis",whiteSpace:"nowrap",top:"50%",transform:"translateY(-50%)"}},valueContainer:function(e){var t=e.theme.spacing;return{alignItems:"center",display:"flex",flex:1,flexWrap:"wrap",padding:"".concat(t.baseUnit/2,"px ").concat(2*t.baseUnit,"px"),WebkitOverflowScrolling:"touch",position:"relative",overflow:"hidden"}}};var ad,id={borderRadius:4,colors:{primary:"#2684FF",primary75:"#4C9AFF",primary50:"#B2D4FF",primary25:"#DEEBFF",danger:"#DE350B",dangerLight:"#FFBDAD",neutral0:"hsl(0, 0%, 100%)",neutral5:"hsl(0, 0%, 95%)",neutral10:"hsl(0, 0%, 90%)",neutral20:"hsl(0, 0%, 80%)",neutral30:"hsl(0, 0%, 70%)",neutral40:"hsl(0, 0%, 60%)",neutral50:"hsl(0, 0%, 50%)",neutral60:"hsl(0, 0%, 40%)",neutral70:"hsl(0, 0%, 30%)",neutral80:"hsl(0, 0%, 20%)",neutral90:"hsl(0, 0%, 10%)"},spacing:{baseUnit:4,controlHeight:38,menuGutter:8}},od={backspaceRemovesValue:!0,blurInputOnSelect:Xl(),captureMenuScroll:!Xl(),closeMenuOnSelect:!0,closeMenuOnScroll:!1,components:{},controlShouldRenderValue:!0,escapeClearsValue:!1,filterOption:function(e,t){var n=(0,Vl.Z)({ignoreCase:!0,ignoreAccents:!0,stringify:Nc,trim:!0,matchFrom:"any"},ad),r=n.ignoreCase,a=n.ignoreAccents,i=n.stringify,o=n.trim,s=n.matchFrom,u=o?kc(t):t,l=o?kc(i(e)):i(e);return r&&(u=u.toLowerCase(),l=l.toLowerCase()),a&&(u=Lc(u),l=Lc(l)),"start"===s?l.substr(0,u.length)===u:l.indexOf(u)>-1},formatGroupLabel:function(e){return e.label},getOptionLabel:function(e){return e.label},getOptionValue:function(e){return e.value},isDisabled:!1,isLoading:!1,isMulti:!1,isRtl:!1,isSearchable:!0,isOptionDisabled:nd,loadingMessage:function(){return"Loading..."},maxMenuHeight:300,minMenuHeight:140,menuIsOpen:!1,menuPlacement:"bottom",menuPosition:"absolute",menuShouldBlockScroll:!1,menuShouldScrollIntoView:!function(){try{return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}catch(e){return!1}}(),noOptionsMessage:function(){return"No options"},openMenuOnFocus:!1,openMenuOnClick:!0,options:[],pageSize:5,placeholder:"Select...",screenReaderStatus:function(e){var t=e.count;return"".concat(t," result").concat(1!==t?"s":""," available")},styles:{},tabIndex:"0",tabSelectsValue:!0},sd=1,ud=function(e){function t(e){var n;(0,Hu.Z)(this,t),n=(0,qu.Z)(this,(0,zu.Z)(t).call(this,e)),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"state",{ariaLiveSelection:"",ariaLiveContext:"",focusedOption:null,focusedValue:null,inputIsHidden:!1,isFocused:!1,menuOptions:{render:[],focusable:[]},selectValue:[]}),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"blockOptionHover",!1),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"isComposing",!1),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"clearFocusValueOnUpdate",!1),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"commonProps",void 0),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"components",void 0),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"hasGroups",!1),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"initialTouchX",0),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"initialTouchY",0),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"inputIsHiddenAfterUpdate",void 0),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"instancePrefix",""),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"openAfterFocus",!1),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"scrollToFocusedOptionOnUpdate",!1),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"userIsDragging",void 0),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"controlRef",null),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"getControlRef",(function(e){n.controlRef=e})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"focusedOptionRef",null),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"getFocusedOptionRef",(function(e){n.focusedOptionRef=e})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"menuListRef",null),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"getMenuListRef",(function(e){n.menuListRef=e})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"inputRef",null),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"getInputRef",(function(e){n.inputRef=e})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"cacheComponents",(function(e){n.components=xc({components:e})})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"focus",n.focusInput),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"blur",n.blurInput),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"onChange",(function(e,t){var r=n.props,a=r.onChange,i=r.name;a(e,(0,Vl.Z)({},t,{name:i}))})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"setValue",(function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"set-value",r=arguments.length>2?arguments[2]:void 0,a=n.props,i=a.closeMenuOnSelect,o=a.isMulti;n.onInputChange("",{action:"set-value"}),i&&(n.inputIsHiddenAfterUpdate=!o,n.onMenuClose()),n.clearFocusValueOnUpdate=!0,n.onChange(e,{action:t,option:r})})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"selectOption",(function(e){var t=n.props,r=t.blurInputOnSelect,a=t.isMulti,i=n.state.selectValue;if(a)if(n.isOptionSelected(e,i)){var o=n.getOptionValue(e);n.setValue(i.filter((function(e){return n.getOptionValue(e)!==o})),"deselect-option",e),n.announceAriaLiveSelection({event:"deselect-option",context:{value:n.getOptionLabel(e)}})}else n.isOptionDisabled(e,i)?n.announceAriaLiveSelection({event:"select-option",context:{value:n.getOptionLabel(e),isDisabled:!0}}):(n.setValue([].concat((0,Ul.Z)(i),[e]),"select-option",e),n.announceAriaLiveSelection({event:"select-option",context:{value:n.getOptionLabel(e)}}));else n.isOptionDisabled(e,i)?n.announceAriaLiveSelection({event:"select-option",context:{value:n.getOptionLabel(e),isDisabled:!0}}):(n.setValue(e,"select-option"),n.announceAriaLiveSelection({event:"select-option",context:{value:n.getOptionLabel(e)}}));r&&n.blurInput()})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"removeValue",(function(e){var t=n.state.selectValue,r=n.getOptionValue(e),a=t.filter((function(e){return n.getOptionValue(e)!==r}));n.onChange(a.length?a:null,{action:"remove-value",removedValue:e}),n.announceAriaLiveSelection({event:"remove-value",context:{value:e?n.getOptionLabel(e):""}}),n.focusInput()})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"clearValue",(function(){var e=n.props.isMulti;n.onChange(e?[]:null,{action:"clear"})})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"popValue",(function(){var e=n.state.selectValue,t=e[e.length-1],r=e.slice(0,e.length-1);n.announceAriaLiveSelection({event:"pop-value",context:{value:t?n.getOptionLabel(t):""}}),n.onChange(r.length?r:null,{action:"pop-value",removedValue:t})})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"getOptionLabel",(function(e){return n.props.getOptionLabel(e)})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"getOptionValue",(function(e){return n.props.getOptionValue(e)})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"getStyles",(function(e,t){var r=rd[e](t);r.boxSizing="border-box";var a=n.props.styles[e];return a?a(r,t):r})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"getElementId",(function(e){return"".concat(n.instancePrefix,"-").concat(e)})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"getActiveDescendentId",(function(){var e=n.props.menuIsOpen,t=n.state,r=t.menuOptions,a=t.focusedOption;if(a&&e){var i=r.focusable.indexOf(a),o=r.render[i];return o&&o.key}})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"announceAriaLiveSelection",(function(e){var t=e.event,r=e.context;n.setState({ariaLiveSelection:td(t,r)})})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"announceAriaLiveContext",(function(e){var t=e.event,r=e.context;n.setState({ariaLiveContext:ed(t,(0,Vl.Z)({},r,{label:n.props["aria-label"]}))})})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"onMenuMouseDown",(function(e){0===e.button&&(e.stopPropagation(),e.preventDefault(),n.focusInput())})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"onMenuMouseMove",(function(e){n.blockOptionHover=!1})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"onControlMouseDown",(function(e){var t=n.props.openMenuOnClick;n.state.isFocused?n.props.menuIsOpen?"INPUT"!==e.target.tagName&&n.onMenuClose():t&&n.openMenu("first"):(t&&(n.openAfterFocus=!0),n.focusInput()),"INPUT"!==e.target.tagName&&e.preventDefault()})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"onDropdownIndicatorMouseDown",(function(e){if(!(e&&"mousedown"===e.type&&0!==e.button||n.props.isDisabled)){var t=n.props,r=t.isMulti,a=t.menuIsOpen;n.focusInput(),a?(n.inputIsHiddenAfterUpdate=!r,n.onMenuClose()):n.openMenu("first"),e.preventDefault(),e.stopPropagation()}})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"onClearIndicatorMouseDown",(function(e){e&&"mousedown"===e.type&&0!==e.button||(n.clearValue(),e.stopPropagation(),n.openAfterFocus=!1,"touchend"===e.type?n.focusInput():setTimeout((function(){return n.focusInput()})))})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"onScroll",(function(e){"boolean"==typeof n.props.closeMenuOnScroll?e.target instanceof HTMLElement&&zl(e.target)&&n.props.onMenuClose():"function"==typeof n.props.closeMenuOnScroll&&n.props.closeMenuOnScroll(e)&&n.props.onMenuClose()})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"onCompositionStart",(function(){n.isComposing=!0})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"onCompositionEnd",(function(){n.isComposing=!1})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"onTouchStart",(function(e){var t=e.touches.item(0);t&&(n.initialTouchX=t.clientX,n.initialTouchY=t.clientY,n.userIsDragging=!1)})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"onTouchMove",(function(e){var t=e.touches.item(0);if(t){var r=Math.abs(t.clientX-n.initialTouchX),a=Math.abs(t.clientY-n.initialTouchY);n.userIsDragging=r>5||a>5}})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"onTouchEnd",(function(e){n.userIsDragging||(n.controlRef&&!n.controlRef.contains(e.target)&&n.menuListRef&&!n.menuListRef.contains(e.target)&&n.blurInput(),n.initialTouchX=0,n.initialTouchY=0)})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"onControlTouchEnd",(function(e){n.userIsDragging||n.onControlMouseDown(e)})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"onClearIndicatorTouchEnd",(function(e){n.userIsDragging||n.onClearIndicatorMouseDown(e)})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"onDropdownIndicatorTouchEnd",(function(e){n.userIsDragging||n.onDropdownIndicatorMouseDown(e)})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"handleInputChange",(function(e){var t=e.currentTarget.value;n.inputIsHiddenAfterUpdate=!1,n.onInputChange(t,{action:"input-change"}),n.onMenuOpen()})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"onInputFocus",(function(e){var t=n.props,r=t.isSearchable,a=t.isMulti;n.props.onFocus&&n.props.onFocus(e),n.inputIsHiddenAfterUpdate=!1,n.announceAriaLiveContext({event:"input",context:{isSearchable:r,isMulti:a}}),n.setState({isFocused:!0}),(n.openAfterFocus||n.props.openMenuOnFocus)&&n.openMenu("first"),n.openAfterFocus=!1})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"onInputBlur",(function(e){n.menuListRef&&n.menuListRef.contains(document.activeElement)?n.inputRef.focus():(n.props.onBlur&&n.props.onBlur(e),n.onInputChange("",{action:"input-blur"}),n.onMenuClose(),n.setState({focusedValue:null,isFocused:!1}))})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"onOptionHover",(function(e){n.blockOptionHover||n.state.focusedOption===e||n.setState({focusedOption:e})})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"shouldHideSelectedOptions",(function(){var e=n.props,t=e.hideSelectedOptions,r=e.isMulti;return void 0===t?r:t})),(0,Zu.Z)((0,Yu.Z)((0,Yu.Z)(n)),"onKeyDown",(function(e){var t=n.props,r=t.isMulti,a=t.backspaceRemovesValue,i=t.escapeClearsValue,o=t.inputValue,s=t.isClearable,u=t.isDisabled,l=t.menuIsOpen,c=t.onKeyDown,d=t.tabSelectsValue,f=t.openMenuOnFocus,v=n.state,m=v.focusedOption,p=v.focusedValue,h=v.selectValue;if(!(u||"function"==typeof c&&(c(e),e.defaultPrevented))){switch(n.blockOptionHover=!0,e.key){case"ArrowLeft":if(!r||o)return;n.focusValue("previous");break;case"ArrowRight":if(!r||o)return;n.focusValue("next");break;case"Delete":case"Backspace":if(o)return;if(p)n.removeValue(p);else{if(!a)return;r?n.popValue():s&&n.clearValue()}break;case"Tab":if(n.isComposing)return;if(e.shiftKey||!l||!d||!m||f&&n.isOptionSelected(m,h))return;n.selectOption(m);break;case"Enter":if(229===e.keyCode)break;if(l){if(!m)return;if(n.isComposing)return;n.selectOption(m);break}return;case"Escape":l?(n.inputIsHiddenAfterUpdate=!1,n.onInputChange("",{action:"menu-close"}),n.onMenuClose()):s&&i&&n.clearValue();break;case" ":if(o)return;if(!l){n.openMenu("first");break}if(!m)return;n.selectOption(m);break;case"ArrowUp":l?n.focusOption("up"):n.openMenu("last");break;case"ArrowDown":l?n.focusOption("down"):n.openMenu("first");break;case"PageUp":if(!l)return;n.focusOption("pageup");break;case"PageDown":if(!l)return;n.focusOption("pagedown");break;case"Home":if(!l)return;n.focusOption("first");break;case"End":if(!l)return;n.focusOption("last");break;default:return}e.preventDefault()}}));var r=e.value;n.cacheComponents=$u(n.cacheComponents,fc).bind((0,Yu.Z)((0,Yu.Z)(n))),n.cacheComponents(e.components),n.instancePrefix="react-select-"+(n.props.instanceId||++sd);var a=ql(r),i=e.menuIsOpen?n.buildMenuOptions(e,a):{render:[],focusable:[]};return n.state.menuOptions=i,n.state.selectValue=a,n}return(0,Wu.Z)(t,e),(0,Qu.Z)(t,[{key:"componentDidMount",value:function(){this.startListeningComposition(),this.startListeningToTouch(),this.props.closeMenuOnScroll&&document&&document.addEventListener&&document.addEventListener("scroll",this.onScroll,!0),this.props.autoFocus&&this.focusInput()}},{key:"UNSAFE_componentWillReceiveProps",value:function(e){var t=this.props,n=t.options,r=t.value,a=t.menuIsOpen,i=t.inputValue;if(this.cacheComponents(e.components),e.value!==r||e.options!==n||e.menuIsOpen!==a||e.inputValue!==i){var o=ql(e.value),s=e.menuIsOpen?this.buildMenuOptions(e,o):{render:[],focusable:[]},u=this.getNextFocusedValue(o),l=this.getNextFocusedOption(s.focusable);this.setState({menuOptions:s,selectValue:o,focusedOption:l,focusedValue:u})}null!=this.inputIsHiddenAfterUpdate&&(this.setState({inputIsHidden:this.inputIsHiddenAfterUpdate}),delete this.inputIsHiddenAfterUpdate)}},{key:"componentDidUpdate",value:function(e){var t,n,r,a,i,o=this.props,s=o.isDisabled,u=o.menuIsOpen,l=this.state.isFocused;(l&&!s&&e.isDisabled||l&&u&&!e.menuIsOpen)&&this.focusInput(),this.menuListRef&&this.focusedOptionRef&&this.scrollToFocusedOptionOnUpdate&&(t=this.menuListRef,n=this.focusedOptionRef,r=t.getBoundingClientRect(),a=n.getBoundingClientRect(),i=n.offsetHeight/3,a.bottom+i>r.bottom?Yl(t,Math.min(n.offsetTop+n.clientHeight-t.offsetHeight+i,t.scrollHeight)):a.top-i-1&&(o=s)}this.scrollToFocusedOptionOnUpdate=!(a&&this.menuListRef),this.inputIsHiddenAfterUpdate=!1,this.onMenuOpen(),this.setState({focusedValue:null,focusedOption:n.focusable[o]}),this.announceAriaLiveContext({event:"menu"})}},{key:"focusValue",value:function(e){var t=this.props,n=t.isMulti,r=t.isSearchable,a=this.state,i=a.selectValue,o=a.focusedValue;if(n){this.setState({focusedOption:null});var s=i.indexOf(o);o||(s=-1,this.announceAriaLiveContext({event:"value"}));var u=i.length-1,l=-1;if(i.length){switch(e){case"previous":l=0===s?0:-1===s?u:s-1;break;case"next":s>-1&&s0&&void 0!==arguments[0]?arguments[0]:"first",t=this.props.pageSize,n=this.state,r=n.focusedOption,a=n.menuOptions,i=a.focusable;if(i.length){var o=0,s=i.indexOf(r);r||(s=-1,this.announceAriaLiveContext({event:"menu"})),"up"===e?o=s>0?s-1:i.length-1:"down"===e?o=(s+1)%i.length:"pageup"===e?(o=s-t)<0&&(o=0):"pagedown"===e?(o=s+t)>i.length-1&&(o=i.length-1):"last"===e&&(o=i.length-1),this.scrollToFocusedOptionOnUpdate=!0,this.setState({focusedOption:i[o],focusedValue:null}),this.announceAriaLiveContext({event:"menu",context:{isDisabled:nd(i[o])}})}}},{key:"getTheme",value:function(){return this.props.theme?"function"==typeof this.props.theme?this.props.theme(id):(0,Vl.Z)({},id,this.props.theme):id}},{key:"getCommonProps",value:function(){var e=this.clearValue,t=this.getStyles,n=this.setValue,r=this.selectOption,a=this.props,i=a.classNamePrefix,o=a.isMulti,s=a.isRtl,u=a.options,l=this.state.selectValue,c=this.hasValue();return{cx:Ql.bind(null,i),clearValue:e,getStyles:t,getValue:function(){return l},hasValue:c,isMulti:o,isRtl:s,options:u,selectOption:r,setValue:n,selectProps:a,theme:this.getTheme()}}},{key:"getNextFocusedValue",value:function(e){if(this.clearFocusValueOnUpdate)return this.clearFocusValueOnUpdate=!1,null;var t=this.state,n=t.focusedValue,r=t.selectValue.indexOf(n);if(r>-1){if(e.indexOf(n)>-1)return n;if(r-1?t:e[0]}},{key:"hasValue",value:function(){return this.state.selectValue.length>0}},{key:"hasOptions",value:function(){return!!this.state.menuOptions.render.length}},{key:"countOptions",value:function(){return this.state.menuOptions.focusable.length}},{key:"isClearable",value:function(){var e=this.props,t=e.isClearable,n=e.isMulti;return void 0===t?n:t}},{key:"isOptionDisabled",value:function(e,t){return"function"==typeof this.props.isOptionDisabled&&this.props.isOptionDisabled(e,t)}},{key:"isOptionSelected",value:function(e,t){var n=this;if(t.indexOf(e)>-1)return!0;if("function"==typeof this.props.isOptionSelected)return this.props.isOptionSelected(e,t);var r=this.getOptionValue(e);return t.some((function(e){return n.getOptionValue(e)===r}))}},{key:"filterOption",value:function(e,t){return!this.props.filterOption||this.props.filterOption(e,t)}},{key:"formatOptionLabel",value:function(e,t){if("function"==typeof this.props.formatOptionLabel){var n=this.props.inputValue,r=this.state.selectValue;return this.props.formatOptionLabel(e,{context:t,inputValue:n,selectValue:r})}return this.getOptionLabel(e)}},{key:"formatGroupLabel",value:function(e){return this.props.formatGroupLabel(e)}},{key:"startListeningComposition",value:function(){document&&document.addEventListener&&(document.addEventListener("compositionstart",this.onCompositionStart,!1),document.addEventListener("compositionend",this.onCompositionEnd,!1))}},{key:"stopListeningComposition",value:function(){document&&document.removeEventListener&&(document.removeEventListener("compositionstart",this.onCompositionStart),document.removeEventListener("compositionend",this.onCompositionEnd))}},{key:"startListeningToTouch",value:function(){document&&document.addEventListener&&(document.addEventListener("touchstart",this.onTouchStart,!1),document.addEventListener("touchmove",this.onTouchMove,!1),document.addEventListener("touchend",this.onTouchEnd,!1))}},{key:"stopListeningToTouch",value:function(){document&&document.removeEventListener&&(document.removeEventListener("touchstart",this.onTouchStart),document.removeEventListener("touchmove",this.onTouchMove),document.removeEventListener("touchend",this.onTouchEnd))}},{key:"buildMenuOptions",value:function(e,t){var n=this,r=e.inputValue,a=void 0===r?"":r,i=e.options,o=function(e,r){var i=n.isOptionDisabled(e,t),o=n.isOptionSelected(e,t),s=n.getOptionLabel(e),u=n.getOptionValue(e);if(!(n.shouldHideSelectedOptions()&&o||!n.filterOption({label:s,value:u,data:e},a))){var l=i?void 0:function(){return n.onOptionHover(e)},c=i?void 0:function(){return n.selectOption(e)},d="".concat(n.getElementId("option"),"-").concat(r);return{innerProps:{id:d,onClick:c,onMouseMove:l,onMouseOver:l,tabIndex:-1},data:e,isDisabled:i,isSelected:o,key:d,label:s,type:"option",value:u}}};return i.reduce((function(e,t,r){if(t.options){n.hasGroups||(n.hasGroups=!0);var a=t.options.map((function(t,n){var a=o(t,"".concat(r,"-").concat(n));return a&&e.focusable.push(t),a})).filter(Boolean);if(a.length){var i="".concat(n.getElementId("group"),"-").concat(r);e.render.push({type:"group",key:i,data:t,options:a})}}else{var s=o(t,"".concat(r));s&&(e.render.push(s),e.focusable.push(t))}return e}),{render:[],focusable:[]})}},{key:"constructAriaLiveMessage",value:function(){var e=this.state,t=e.ariaLiveContext,n=e.selectValue,r=e.focusedValue,a=e.focusedOption,i=this.props,o=i.options,s=i.menuIsOpen,u=i.inputValue,l=i.screenReaderStatus,c=r?function(e){var t=e.focusedValue,n=e.getOptionLabel,r=e.selectValue;return"value ".concat(n(t)," focused, ").concat(r.indexOf(t)+1," of ").concat(r.length,".")}({focusedValue:r,getOptionLabel:this.getOptionLabel,selectValue:n}):"",d=a&&s?function(e){var t=e.focusedOption,n=e.getOptionLabel,r=e.options;return"option ".concat(n(t)," focused").concat(t.isDisabled?" disabled":"",", ").concat(r.indexOf(t)+1," of ").concat(r.length,".")}({focusedOption:a,getOptionLabel:this.getOptionLabel,options:o}):"",f=function(e){var t=e.inputValue,n=e.screenReaderMessage;return"".concat(n).concat(t?" for search term "+t:"",".")}({inputValue:u,screenReaderMessage:l({count:this.countOptions()})});return"".concat(c," ").concat(d," ").concat(f," ").concat(t)}},{key:"renderInput",value:function(){var e=this.props,t=e.isDisabled,n=e.isSearchable,r=e.inputId,a=e.inputValue,i=e.tabIndex,o=this.components.Input,s=this.state.inputIsHidden,u=r||this.getElementId("input");if(!n)return l.createElement(Uc,{id:u,innerRef:this.getInputRef,onBlur:this.onInputBlur,onChange:Gl,onFocus:this.onInputFocus,readOnly:!0,disabled:t,tabIndex:i,value:""});var c={"aria-autocomplete":"list","aria-label":this.props["aria-label"],"aria-labelledby":this.props["aria-labelledby"]},d=this.commonProps,f=d.cx,v=d.theme,m=d.selectProps;return l.createElement(o,(0,Bl.Z)({autoCapitalize:"none",autoComplete:"off",autoCorrect:"off",cx:f,getStyles:this.getStyles,id:u,innerRef:this.getInputRef,isDisabled:t,isHidden:s,onBlur:this.onInputBlur,onChange:this.handleInputChange,onFocus:this.onInputFocus,selectProps:m,spellCheck:"false",tabIndex:i,theme:v,type:"text",value:a},c))}},{key:"renderPlaceholderOrValue",value:function(){var e=this,t=this.components,n=t.MultiValue,r=t.MultiValueContainer,a=t.MultiValueLabel,i=t.MultiValueRemove,o=t.SingleValue,s=t.Placeholder,u=this.commonProps,c=this.props,d=c.controlShouldRenderValue,f=c.isDisabled,v=c.isMulti,m=c.inputValue,p=c.placeholder,h=this.state,g=h.selectValue,A=h.focusedValue,y=h.isFocused;if(!this.hasValue()||!d)return m?null:l.createElement(s,(0,Bl.Z)({},u,{key:"placeholder",isDisabled:f,isFocused:y}),p);if(v){var S=g.map((function(t,o){var s=t===A;return l.createElement(n,(0,Bl.Z)({},u,{components:{Container:r,Label:a,Remove:i},isFocused:s,isDisabled:f,key:e.getOptionValue(t),index:o,removeProps:{onClick:function(){return e.removeValue(t)},onTouchEnd:function(){return e.removeValue(t)},onMouseDown:function(e){e.preventDefault(),e.stopPropagation()}},data:t}),e.formatOptionLabel(t,"value"))}));return S}if(m)return null;var b=g[0];return l.createElement(o,(0,Bl.Z)({},u,{data:b,isDisabled:f}),this.formatOptionLabel(b,"value"))}},{key:"renderClearIndicator",value:function(){var e=this.components.ClearIndicator,t=this.commonProps,n=this.props,r=n.isDisabled,a=n.isLoading,i=this.state.isFocused;if(!this.isClearable()||!e||r||!this.hasValue()||a)return null;var o={onMouseDown:this.onClearIndicatorMouseDown,onTouchEnd:this.onClearIndicatorTouchEnd,"aria-hidden":"true"};return l.createElement(e,(0,Bl.Z)({},t,{innerProps:o,isFocused:i}))}},{key:"renderLoadingIndicator",value:function(){var e=this.components.LoadingIndicator,t=this.commonProps,n=this.props,r=n.isDisabled,a=n.isLoading,i=this.state.isFocused;if(!e||!a)return null;return l.createElement(e,(0,Bl.Z)({},t,{innerProps:{"aria-hidden":"true"},isDisabled:r,isFocused:i}))}},{key:"renderIndicatorSeparator",value:function(){var e=this.components,t=e.DropdownIndicator,n=e.IndicatorSeparator;if(!t||!n)return null;var r=this.commonProps,a=this.props.isDisabled,i=this.state.isFocused;return l.createElement(n,(0,Bl.Z)({},r,{isDisabled:a,isFocused:i}))}},{key:"renderDropdownIndicator",value:function(){var e=this.components.DropdownIndicator;if(!e)return null;var t=this.commonProps,n=this.props.isDisabled,r=this.state.isFocused,a={onMouseDown:this.onDropdownIndicatorMouseDown,onTouchEnd:this.onDropdownIndicatorTouchEnd,"aria-hidden":"true"};return l.createElement(e,(0,Bl.Z)({},t,{innerProps:a,isDisabled:n,isFocused:r}))}},{key:"renderMenu",value:function(){var e=this,t=this.components,n=t.Group,r=t.GroupHeading,a=t.Menu,i=t.MenuList,o=t.MenuPortal,s=t.LoadingMessage,u=t.NoOptionsMessage,c=t.Option,d=this.commonProps,f=this.state,v=f.focusedOption,m=f.menuOptions,p=this.props,h=p.captureMenuScroll,g=p.inputValue,A=p.isLoading,y=p.loadingMessage,S=p.minMenuHeight,b=p.maxMenuHeight,w=p.menuIsOpen,I=p.menuPlacement,E=p.menuPosition,C=p.menuPortalTarget,D=p.menuShouldBlockScroll,_=p.menuShouldScrollIntoView,M=p.noOptionsMessage,O=p.onMenuScrollToTop,P=p.onMenuScrollToBottom;if(!w)return null;var T,x=function(t){var n=v===t.data;return t.innerRef=n?e.getFocusedOptionRef:void 0,l.createElement(c,(0,Bl.Z)({},d,t,{isFocused:n}),e.formatOptionLabel(t.data,"menu"))};if(this.hasOptions())T=m.render.map((function(t){if("group"===t.type){t.type;var a=Fl(t,["type"]),i="".concat(t.key,"-heading");return l.createElement(n,(0,Bl.Z)({},d,a,{Heading:r,headingProps:{id:i},label:e.formatGroupLabel(t.data)}),t.options.map((function(e){return x(e)})))}if("option"===t.type)return x(t)}));else if(A){var R=y({inputValue:g});if(null===R)return null;T=l.createElement(s,d,R)}else{var L=M({inputValue:g});if(null===L)return null;T=l.createElement(u,d,L)}var k={minMenuHeight:S,maxMenuHeight:b,menuPlacement:I,menuPosition:E,menuShouldScrollIntoView:_},N=l.createElement(tc,(0,Bl.Z)({},d,k),(function(t){var n=t.ref,r=t.placerProps,o=r.placement,s=r.maxHeight;return l.createElement(a,(0,Bl.Z)({},d,k,{innerRef:n,innerProps:{onMouseDown:e.onMenuMouseDown,onMouseMove:e.onMenuMouseMove},isLoading:A,placement:o}),l.createElement(Jc,{isEnabled:h,onTopArrive:O,onBottomArrive:P},l.createElement(Xc,{isEnabled:D},l.createElement(i,(0,Bl.Z)({},d,{innerRef:e.getMenuListRef,isLoading:A,maxHeight:s}),T))))}));return C||"fixed"===E?l.createElement(o,(0,Bl.Z)({},d,{appendTo:C,controlElement:this.controlRef,menuPlacement:I,menuPosition:E}),N):N}},{key:"renderFormField",value:function(){var e=this,t=this.props,n=t.delimiter,r=t.isDisabled,a=t.isMulti,i=t.name,o=this.state.selectValue;if(i&&!r){if(a){if(n){var s=o.map((function(t){return e.getOptionValue(t)})).join(n);return l.createElement("input",{name:i,type:"hidden",value:s})}var u=o.length>0?o.map((function(t,n){return l.createElement("input",{key:"i-".concat(n),name:i,type:"hidden",value:e.getOptionValue(t)})})):l.createElement("input",{name:i,type:"hidden"});return l.createElement("div",null,u)}var c=o[0]?this.getOptionValue(o[0]):"";return l.createElement("input",{name:i,type:"hidden",value:c})}}},{key:"renderLiveRegion",value:function(){return this.state.isFocused?l.createElement(Bc,{"aria-live":"polite"},l.createElement("p",{id:"aria-selection-event"}," ",this.state.ariaLiveSelection),l.createElement("p",{id:"aria-context"}," ",this.constructAriaLiveMessage())):null}},{key:"render",value:function(){var e=this.components,t=e.Control,n=e.IndicatorsContainer,r=e.SelectContainer,a=e.ValueContainer,i=this.props,o=i.className,s=i.id,u=i.isDisabled,c=i.menuIsOpen,d=this.state.isFocused,f=this.commonProps=this.getCommonProps();return l.createElement(r,(0,Bl.Z)({},f,{className:o,innerProps:{id:s,onKeyDown:this.onKeyDown},isDisabled:u,isFocused:d}),this.renderLiveRegion(),l.createElement(t,(0,Bl.Z)({},f,{innerRef:this.getControlRef,innerProps:{onMouseDown:this.onControlMouseDown,onTouchEnd:this.onControlTouchEnd},isDisabled:u,isFocused:d,menuIsOpen:c}),l.createElement(a,(0,Bl.Z)({},f,{isDisabled:u}),this.renderPlaceholderOrValue(),this.renderInput()),l.createElement(n,(0,Bl.Z)({},f,{isDisabled:u}),this.renderClearIndicator(),this.renderLoadingIndicator(),this.renderIndicatorSeparator(),this.renderDropdownIndicator())),this.renderMenu(),this.renderFormField())}}]),t}(l.Component);(0,Zu.Z)(ud,"defaultProps",od);var ld,cd,dd,fd={defaultInputValue:"",defaultMenuIsOpen:!1,defaultValue:null},vd=(l.Component,ld=ud,dd=cd=function(e){function t(){var e,n;(0,Hu.Z)(this,t);for(var r=arguments.length,a=new Array(r),i=0;i1?n-1:0),a=1;ae.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&(f(n.map((function(e){return e.id}))),u(e)),0===e.length){var t=Dd(d);f([]),u(t)}}()}}))),l.createElement("div",{className:"overflow-x-hidden overflow-y-auto ohif-scrollbar max-h-64"},!!n.length&&n.map((function(e,t){var n=e.id,u=e.label,c=e.displayText,v=void 0===c?[]:c;return l.createElement(Cd,{key:n,id:n,index:t+1,label:null!=u?u:"Segmentation ".concat(t+1),displayText:v,isActive:r===n,isVisible:!d.includes(n),onClick:function(){a(n)},onEdit:function(){i(n)},onDelete:function(){o(n)},toggleVisibility:function(){s(n),d.includes(n)?f(d.filter((function(e){return e!==n}))):f([].concat(Dd(d),[n]))}})}))))};Pd.propTypes={title:i().string.isRequired,segmentations:i().array.isRequired,activeSegmentationId:i().string.isRequired,onClick:i().func.isRequired,onEdit:i().func.isRequired,onDelete:i().func.isRequired,onToggleVisibility:i().func.isRequired,onToggleVisibilityAll:i().func.isRequired},Pd.defaultProps={title:"",segmentations:[],activeSegmentationId:"",onClick:function(){},onEdit:function(){},onToggleVisibility:function(){},onToggleVisibilityAll:function(){}};var Td=Pd;function xd(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,a,i=[],o=!0,s=!1;try{for(n=n.call(e);!(o=(r=n.next()).done)&&(i.push(r.value),!t||i.length!==t);o=!0);}catch(e){s=!0,a=e}finally{try{o||null==n.return||n.return()}finally{if(s)throw a}}return i}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Rd(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Rd(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Rd(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n{void 0===e[n]?e[n]=t[n]:Jd(t[n])&&Jd(e[n])&&Object.keys(t[n]).length>0&&ef(e[n],t[n])}))}const tf={body:{},addEventListener(){},removeEventListener(){},activeElement:{blur(){},nodeName:""},querySelector:()=>null,querySelectorAll:()=>[],getElementById:()=>null,createEvent:()=>({initEvent(){}}),createElement:()=>({children:[],childNodes:[],style:{},setAttribute(){},getElementsByTagName:()=>[]}),createElementNS:()=>({}),importNode:()=>null,location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""}};function nf(){const e="undefined"!=typeof document?document:{};return ef(e,tf),e}const rf={document:tf,navigator:{userAgent:""},location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""},history:{replaceState(){},pushState(){},go(){},back(){}},CustomEvent:function(){return this},addEventListener(){},removeEventListener(){},getComputedStyle:()=>({getPropertyValue:()=>""}),Image(){},Date(){},screen:{},setTimeout(){},clearTimeout(){},matchMedia:()=>({}),requestAnimationFrame:e=>"undefined"==typeof setTimeout?(e(),null):setTimeout(e,0),cancelAnimationFrame(e){"undefined"!=typeof setTimeout&&clearTimeout(e)}};function af(){const e="undefined"!=typeof window?window:{};return ef(e,rf),e}class of extends Array{constructor(e){"number"==typeof e?super(e):(super(...e||[]),function(e){const t=e.__proto__;Object.defineProperty(e,"__proto__",{get:()=>t,set(e){t.__proto__=e}})}(this))}}function sf(e=[]){const t=[];return e.forEach((e=>{Array.isArray(e)?t.push(...sf(e)):t.push(e)})),t}function uf(e,t){return Array.prototype.filter.call(e,t)}function lf(e,t){const n=af(),r=nf();let a=[];if(!t&&e instanceof of)return e;if(!e)return new of(a);if("string"==typeof e){const n=e.trim();if(n.indexOf("<")>=0&&n.indexOf(">")>=0){let e="div";0===n.indexOf("e.split(" "))));return this.forEach((e=>{e.classList.add(...t)})),this},removeClass:function(...e){const t=sf(e.map((e=>e.split(" "))));return this.forEach((e=>{e.classList.remove(...t)})),this},hasClass:function(...e){const t=sf(e.map((e=>e.split(" "))));return uf(this,(e=>t.filter((t=>e.classList.contains(t))).length>0)).length>0},toggleClass:function(...e){const t=sf(e.map((e=>e.split(" "))));this.forEach((e=>{t.forEach((t=>{e.classList.toggle(t)}))}))},attr:function(e,t){if(1===arguments.length&&"string"==typeof e)return this[0]?this[0].getAttribute(e):void 0;for(let n=0;n=0;e-=1){const n=o[e];r&&n.listener===r||r&&n.listener&&n.listener.dom7proxy&&n.listener.dom7proxy===r?(i.removeEventListener(t,n.proxyListener,a),o.splice(e,1)):r||(i.removeEventListener(t,n.proxyListener,a),o.splice(e,1))}}}return this},trigger:function(...e){const t=af(),n=e[0].split(" "),r=e[1];for(let a=0;at>0)),a.dispatchEvent(n),a.dom7EventData=[],delete a.dom7EventData}}}return this},transitionEnd:function(e){const t=this;return e&&t.on("transitionend",(function n(r){r.target===this&&(e.call(this,r),t.off("transitionend",n))})),this},outerWidth:function(e){if(this.length>0){if(e){const e=this.styles();return this[0].offsetWidth+parseFloat(e.getPropertyValue("margin-right"))+parseFloat(e.getPropertyValue("margin-left"))}return this[0].offsetWidth}return null},outerHeight:function(e){if(this.length>0){if(e){const e=this.styles();return this[0].offsetHeight+parseFloat(e.getPropertyValue("margin-top"))+parseFloat(e.getPropertyValue("margin-bottom"))}return this[0].offsetHeight}return null},styles:function(){const e=af();return this[0]?e.getComputedStyle(this[0],null):{}},offset:function(){if(this.length>0){const e=af(),t=nf(),n=this[0],r=n.getBoundingClientRect(),a=t.body,i=n.clientTop||a.clientTop||0,o=n.clientLeft||a.clientLeft||0,s=n===e?e.scrollY:n.scrollTop,u=n===e?e.scrollX:n.scrollLeft;return{top:r.top+s-i,left:r.left+u-o}}return null},css:function(e,t){const n=af();let r;if(1===arguments.length){if("string"!=typeof e){for(r=0;r{e.apply(t,[t,n])})),this):this},html:function(e){if(void 0===e)return this[0]?this[0].innerHTML:null;for(let t=0;tt-1)return lf([]);if(e<0){const n=t+e;return lf(n<0?[]:[this[n]])}return lf([this[e]])},append:function(...e){let t;const n=nf();for(let r=0;r=0;r-=1)this[n].insertBefore(a.childNodes[r],this[n].childNodes[0])}else if(e instanceof of)for(r=0;r0?e?this[0].nextElementSibling&&lf(this[0].nextElementSibling).is(e)?lf([this[0].nextElementSibling]):lf([]):this[0].nextElementSibling?lf([this[0].nextElementSibling]):lf([]):lf([])},nextAll:function(e){const t=[];let n=this[0];if(!n)return lf([]);for(;n.nextElementSibling;){const r=n.nextElementSibling;e?lf(r).is(e)&&t.push(r):t.push(r),n=r}return lf(t)},prev:function(e){if(this.length>0){const t=this[0];return e?t.previousElementSibling&&lf(t.previousElementSibling).is(e)?lf([t.previousElementSibling]):lf([]):t.previousElementSibling?lf([t.previousElementSibling]):lf([])}return lf([])},prevAll:function(e){const t=[];let n=this[0];if(!n)return lf([]);for(;n.previousElementSibling;){const r=n.previousElementSibling;e?lf(r).is(e)&&t.push(r):t.push(r),n=r}return lf(t)},parent:function(e){const t=[];for(let n=0;n{Object.defineProperty(lf.fn,e,{value:ff[e],writable:!0})}));var vf=lf;function mf(e,t=0){return setTimeout(e,t)}function pf(){return Date.now()}function hf(e,t="x"){const n=af();let r,a,i;const o=function(e){const t=af();let n;return t.getComputedStyle&&(n=t.getComputedStyle(e,null)),!n&&e.currentStyle&&(n=e.currentStyle),n||(n=e.style),n}(e);return n.WebKitCSSMatrix?(a=o.transform||o.webkitTransform,a.split(",").length>6&&(a=a.split(", ").map((e=>e.replace(",","."))).join(", ")),i=new n.WebKitCSSMatrix("none"===a?"":a)):(i=o.MozTransform||o.OTransform||o.MsTransform||o.msTransform||o.transform||o.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,"),r=i.toString().split(",")),"x"===t&&(a=n.WebKitCSSMatrix?i.m41:16===r.length?parseFloat(r[12]):parseFloat(r[4])),"y"===t&&(a=n.WebKitCSSMatrix?i.m42:16===r.length?parseFloat(r[13]):parseFloat(r[5])),a||0}function gf(e){return"object"==typeof e&&null!==e&&e.constructor&&"Object"===Object.prototype.toString.call(e).slice(8,-1)}function Af(...e){const t=Object(e[0]),n=["__proto__","constructor","prototype"];for(let a=1;an.indexOf(e)<0));for(let n=0,r=e.length;na?"next":"prev",l=(e,t)=>"next"===u&&e>=t||"prev"===u&&e<=t,c=()=>{i=(new Date).getTime(),null===o&&(o=i);const u=Math.max(Math.min((i-o)/s,1),0),d=.5-Math.cos(u*Math.PI)/2;let f=a+d*(t-a);if(l(f,t)&&(f=t),e.wrapperEl.scrollTo({[n]:f}),l(f,t))return e.wrapperEl.style.overflow="hidden",e.wrapperEl.style.scrollSnapType="",setTimeout((()=>{e.wrapperEl.style.overflow="",e.wrapperEl.scrollTo({[n]:f})})),void r.cancelAnimationFrame(e.cssModeFrameID);e.cssModeFrameID=r.requestAnimationFrame(c)};c()}let bf,wf,If;function Ef(){return bf||(bf=function(){const e=af(),t=nf();return{smoothScroll:t.documentElement&&"scrollBehavior"in t.documentElement.style,touch:!!("ontouchstart"in e||e.DocumentTouch&&t instanceof e.DocumentTouch),passiveListener:function(){let t=!1;try{const n=Object.defineProperty({},"passive",{get(){t=!0}});e.addEventListener("testPassiveListener",null,n)}catch(e){}return t}(),gestures:"ongesturestart"in e}}()),bf}function Cf(e={}){return wf||(wf=function({userAgent:e}={}){const t=Ef(),n=af(),r=n.navigator.platform,a=e||n.navigator.userAgent,i={ios:!1,android:!1},o=n.screen.width,s=n.screen.height,u=a.match(/(Android);?[\s\/]+([\d.]+)?/);let l=a.match(/(iPad).*OS\s([\d_]+)/);const c=a.match(/(iPod)(.*OS\s([\d_]+))?/),d=!l&&a.match(/(iPhone\sOS|iOS)\s([\d_]+)/),f="Win32"===r;let v="MacIntel"===r;return!l&&v&&t.touch&&["1024x1366","1366x1024","834x1194","1194x834","834x1112","1112x834","768x1024","1024x768","820x1180","1180x820","810x1080","1080x810"].indexOf(`${o}x${s}`)>=0&&(l=a.match(/(Version)\/([\d.]+)/),l||(l=[0,1,"13_0_0"]),v=!1),u&&!f&&(i.os="android",i.android=!0),(l||d||c)&&(i.os="ios",i.ios=!0),i}(e)),wf}function Df(){return If||(If=function(){const e=af();return{isSafari:function(){const t=e.navigator.userAgent.toLowerCase();return t.indexOf("safari")>=0&&t.indexOf("chrome")<0&&t.indexOf("android")<0}(),isWebView:/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(e.navigator.userAgent)}}()),If}var _f={on(e,t,n){const r=this;if(!r.eventsListeners||r.destroyed)return r;if("function"!=typeof t)return r;const a=n?"unshift":"push";return e.split(" ").forEach((e=>{r.eventsListeners[e]||(r.eventsListeners[e]=[]),r.eventsListeners[e][a](t)})),r},once(e,t,n){const r=this;if(!r.eventsListeners||r.destroyed)return r;if("function"!=typeof t)return r;function a(...n){r.off(e,a),a.__emitterProxy&&delete a.__emitterProxy,t.apply(r,n)}return a.__emitterProxy=t,r.on(e,a,n)},onAny(e,t){const n=this;if(!n.eventsListeners||n.destroyed)return n;if("function"!=typeof e)return n;const r=t?"unshift":"push";return n.eventsAnyListeners.indexOf(e)<0&&n.eventsAnyListeners[r](e),n},offAny(e){const t=this;if(!t.eventsListeners||t.destroyed)return t;if(!t.eventsAnyListeners)return t;const n=t.eventsAnyListeners.indexOf(e);return n>=0&&t.eventsAnyListeners.splice(n,1),t},off(e,t){const n=this;return!n.eventsListeners||n.destroyed?n:n.eventsListeners?(e.split(" ").forEach((e=>{void 0===t?n.eventsListeners[e]=[]:n.eventsListeners[e]&&n.eventsListeners[e].forEach(((r,a)=>{(r===t||r.__emitterProxy&&r.__emitterProxy===t)&&n.eventsListeners[e].splice(a,1)}))})),n):n},emit(...e){const t=this;if(!t.eventsListeners||t.destroyed)return t;if(!t.eventsListeners)return t;let n,r,a;"string"==typeof e[0]||Array.isArray(e[0])?(n=e[0],r=e.slice(1,e.length),a=t):(n=e[0].events,r=e[0].data,a=e[0].context||t),r.unshift(a);return(Array.isArray(n)?n:n.split(" ")).forEach((e=>{t.eventsAnyListeners&&t.eventsAnyListeners.length&&t.eventsAnyListeners.forEach((t=>{t.apply(a,[e,...r])})),t.eventsListeners&&t.eventsListeners[e]&&t.eventsListeners[e].forEach((e=>{e.apply(a,r)}))})),t}};var Mf={updateSize:function(){const e=this;let t,n;const r=e.$el;t=void 0!==e.params.width&&null!==e.params.width?e.params.width:r[0].clientWidth,n=void 0!==e.params.height&&null!==e.params.height?e.params.height:r[0].clientHeight,0===t&&e.isHorizontal()||0===n&&e.isVertical()||(t=t-parseInt(r.css("padding-left")||0,10)-parseInt(r.css("padding-right")||0,10),n=n-parseInt(r.css("padding-top")||0,10)-parseInt(r.css("padding-bottom")||0,10),Number.isNaN(t)&&(t=0),Number.isNaN(n)&&(n=0),Object.assign(e,{width:t,height:n,size:e.isHorizontal()?t:n}))},updateSlides:function(){const e=this;function t(t){return e.isHorizontal()?t:{width:"height","margin-top":"margin-left","margin-bottom ":"margin-right","margin-left":"margin-top","margin-right":"margin-bottom","padding-left":"padding-top","padding-right":"padding-bottom",marginRight:"marginBottom"}[t]}function n(e,n){return parseFloat(e.getPropertyValue(t(n))||0)}const r=e.params,{$wrapperEl:a,size:i,rtlTranslate:o,wrongRTL:s}=e,u=e.virtual&&r.virtual.enabled,l=u?e.virtual.slides.length:e.slides.length,c=a.children(`.${e.params.slideClass}`),d=u?e.virtual.slides.length:c.length;let f=[];const v=[],m=[];let p=r.slidesOffsetBefore;"function"==typeof p&&(p=r.slidesOffsetBefore.call(e));let h=r.slidesOffsetAfter;"function"==typeof h&&(h=r.slidesOffsetAfter.call(e));const g=e.snapGrid.length,A=e.slidesGrid.length;let y=r.spaceBetween,S=-p,b=0,w=0;if(void 0===i)return;"string"==typeof y&&y.indexOf("%")>=0&&(y=parseFloat(y.replace("%",""))/100*i),e.virtualSize=-y,o?c.css({marginLeft:"",marginBottom:"",marginTop:""}):c.css({marginRight:"",marginBottom:"",marginTop:""}),r.centeredSlides&&r.cssMode&&(yf(e.wrapperEl,"--swiper-centered-offset-before",""),yf(e.wrapperEl,"--swiper-centered-offset-after",""));const I=r.grid&&r.grid.rows>1&&e.grid;let E;I&&e.grid.initSlides(d);const C="auto"===r.slidesPerView&&r.breakpoints&&Object.keys(r.breakpoints).filter((e=>void 0!==r.breakpoints[e].slidesPerView)).length>0;for(let a=0;a1&&f.push(e.virtualSize-i)}if(0===f.length&&(f=[0]),0!==r.spaceBetween){const n=e.isHorizontal()&&o?"marginLeft":t("marginRight");c.filter(((e,t)=>!r.cssMode||t!==c.length-1)).css({[n]:`${y}px`})}if(r.centeredSlides&&r.centeredSlidesBounds){let e=0;m.forEach((t=>{e+=t+(r.spaceBetween?r.spaceBetween:0)})),e-=r.spaceBetween;const t=e-i;f=f.map((e=>e<0?-p:e>t?t+h:e))}if(r.centerInsufficientSlides){let e=0;if(m.forEach((t=>{e+=t+(r.spaceBetween?r.spaceBetween:0)})),e-=r.spaceBetween,e{f[n]=e-t})),v.forEach(((e,n)=>{v[n]=e+t}))}}if(Object.assign(e,{slides:c,snapGrid:f,slidesGrid:v,slidesSizesGrid:m}),r.centeredSlides&&r.cssMode&&!r.centeredSlidesBounds){yf(e.wrapperEl,"--swiper-centered-offset-before",-f[0]+"px"),yf(e.wrapperEl,"--swiper-centered-offset-after",e.size/2-m[m.length-1]/2+"px");const t=-e.snapGrid[0],n=-e.slidesGrid[0];e.snapGrid=e.snapGrid.map((e=>e+t)),e.slidesGrid=e.slidesGrid.map((e=>e+n))}if(d!==l&&e.emit("slidesLengthChange"),f.length!==g&&(e.params.watchOverflow&&e.checkOverflow(),e.emit("snapGridLengthChange")),v.length!==A&&e.emit("slidesGridLengthChange"),r.watchSlidesProgress&&e.updateSlidesOffset(),!(u||r.cssMode||"slide"!==r.effect&&"fade"!==r.effect)){const t=`${r.containerModifierClass}backface-hidden`,n=e.$el.hasClass(t);d<=r.maxBackfaceHiddenSlides?n||e.$el.addClass(t):n&&e.$el.removeClass(t)}},updateAutoHeight:function(e){const t=this,n=[],r=t.virtual&&t.params.virtual.enabled;let a,i=0;"number"==typeof e?t.setTransition(e):!0===e&&t.setTransition(t.params.speed);const o=e=>r?t.slides.filter((t=>parseInt(t.getAttribute("data-swiper-slide-index"),10)===e))[0]:t.slides.eq(e)[0];if("auto"!==t.params.slidesPerView&&t.params.slidesPerView>1)if(t.params.centeredSlides)(t.visibleSlides||vf([])).each((e=>{n.push(e)}));else for(a=0;at.slides.length&&!r)break;n.push(o(e))}else n.push(o(t.activeIndex));for(a=0;ai?e:i}(i||0===i)&&t.$wrapperEl.css("height",`${i}px`)},updateSlidesOffset:function(){const e=this,t=e.slides;for(let n=0;n=0&&d1&&f<=t.size||d<=0&&f>=t.size)&&(t.visibleSlides.push(s),t.visibleSlidesIndexes.push(e),r.eq(e).addClass(n.slideVisibleClass)),s.progress=a?-l:l,s.originalProgress=a?-c:c}t.visibleSlides=vf(t.visibleSlides)},updateProgress:function(e){const t=this;if(void 0===e){const n=t.rtlTranslate?-1:1;e=t&&t.translate&&t.translate*n||0}const n=t.params,r=t.maxTranslate()-t.minTranslate();let{progress:a,isBeginning:i,isEnd:o}=t;const s=i,u=o;0===r?(a=0,i=!0,o=!0):(a=(e-t.minTranslate())/r,i=a<=0,o=a>=1),Object.assign(t,{progress:a,isBeginning:i,isEnd:o}),(n.watchSlidesProgress||n.centeredSlides&&n.autoHeight)&&t.updateSlidesProgress(e),i&&!s&&t.emit("reachBeginning toEdge"),o&&!u&&t.emit("reachEnd toEdge"),(s&&!i||u&&!o)&&t.emit("fromEdge"),t.emit("progress",a)},updateSlidesClasses:function(){const e=this,{slides:t,params:n,$wrapperEl:r,activeIndex:a,realIndex:i}=e,o=e.virtual&&n.virtual.enabled;let s;t.removeClass(`${n.slideActiveClass} ${n.slideNextClass} ${n.slidePrevClass} ${n.slideDuplicateActiveClass} ${n.slideDuplicateNextClass} ${n.slideDuplicatePrevClass}`),s=o?e.$wrapperEl.find(`.${n.slideClass}[data-swiper-slide-index="${a}"]`):t.eq(a),s.addClass(n.slideActiveClass),n.loop&&(s.hasClass(n.slideDuplicateClass)?r.children(`.${n.slideClass}:not(.${n.slideDuplicateClass})[data-swiper-slide-index="${i}"]`).addClass(n.slideDuplicateActiveClass):r.children(`.${n.slideClass}.${n.slideDuplicateClass}[data-swiper-slide-index="${i}"]`).addClass(n.slideDuplicateActiveClass));let u=s.nextAll(`.${n.slideClass}`).eq(0).addClass(n.slideNextClass);n.loop&&0===u.length&&(u=t.eq(0),u.addClass(n.slideNextClass));let l=s.prevAll(`.${n.slideClass}`).eq(0).addClass(n.slidePrevClass);n.loop&&0===l.length&&(l=t.eq(-1),l.addClass(n.slidePrevClass)),n.loop&&(u.hasClass(n.slideDuplicateClass)?r.children(`.${n.slideClass}:not(.${n.slideDuplicateClass})[data-swiper-slide-index="${u.attr("data-swiper-slide-index")}"]`).addClass(n.slideDuplicateNextClass):r.children(`.${n.slideClass}.${n.slideDuplicateClass}[data-swiper-slide-index="${u.attr("data-swiper-slide-index")}"]`).addClass(n.slideDuplicateNextClass),l.hasClass(n.slideDuplicateClass)?r.children(`.${n.slideClass}:not(.${n.slideDuplicateClass})[data-swiper-slide-index="${l.attr("data-swiper-slide-index")}"]`).addClass(n.slideDuplicatePrevClass):r.children(`.${n.slideClass}.${n.slideDuplicateClass}[data-swiper-slide-index="${l.attr("data-swiper-slide-index")}"]`).addClass(n.slideDuplicatePrevClass)),e.emitSlidesClasses()},updateActiveIndex:function(e){const t=this,n=t.rtlTranslate?t.translate:-t.translate,{slidesGrid:r,snapGrid:a,params:i,activeIndex:o,realIndex:s,snapIndex:u}=t;let l,c=e;if(void 0===c){for(let e=0;e=r[e]&&n=r[e]&&n=r[e]&&(c=e);i.normalizeSlideIndex&&(c<0||void 0===c)&&(c=0)}if(a.indexOf(n)>=0)l=a.indexOf(n);else{const e=Math.min(i.slidesPerGroupSkip,c);l=e+Math.floor((c-e)/i.slidesPerGroup)}if(l>=a.length&&(l=a.length-1),c===o)return void(l!==u&&(t.snapIndex=l,t.emit("snapIndexChange")));const d=parseInt(t.slides.eq(c).attr("data-swiper-slide-index")||c,10);Object.assign(t,{snapIndex:l,realIndex:d,previousIndex:o,activeIndex:c}),t.emit("activeIndexChange"),t.emit("snapIndexChange"),s!==d&&t.emit("realIndexChange"),(t.initialized||t.params.runCallbacksOnInit)&&t.emit("slideChange")},updateClickedSlide:function(e){const t=this,n=t.params,r=vf(e).closest(`.${n.slideClass}`)[0];let a,i=!1;if(r)for(let e=0;eu?u:r&&ei?"next":a=u.length&&(h=u.length-1);const g=-u[h];if(s.normalizeSlideIndex)for(let e=0;e=n&&t=n&&t=n&&(o=e)}if(i.initialized&&o!==d){if(!i.allowSlideNext&&gi.translate&&g>i.maxTranslate()&&(d||0)!==o)return!1}let A;if(o!==(c||0)&&n&&i.emit("beforeSlideChangeStart"),i.updateProgress(g),A=o>d?"next":o{i.wrapperEl.style.scrollSnapType="",i._swiperImmediateVirtual=!1}))}else{if(!i.support.smoothScroll)return Sf({swiper:i,targetPosition:n,side:e?"left":"top"}),!0;v.scrollTo({[e?"left":"top"]:n,behavior:"smooth"})}return!0}return i.setTransition(t),i.setTranslate(g),i.updateActiveIndex(o),i.updateSlidesClasses(),i.emit("beforeTransitionStart",t,r),i.transitionStart(n,A),0===t?i.transitionEnd(n,A):i.animating||(i.animating=!0,i.onSlideToWrapperTransitionEnd||(i.onSlideToWrapperTransitionEnd=function(e){i&&!i.destroyed&&e.target===this&&(i.$wrapperEl[0].removeEventListener("transitionend",i.onSlideToWrapperTransitionEnd),i.$wrapperEl[0].removeEventListener("webkitTransitionEnd",i.onSlideToWrapperTransitionEnd),i.onSlideToWrapperTransitionEnd=null,delete i.onSlideToWrapperTransitionEnd,i.transitionEnd(n,A))}),i.$wrapperEl[0].addEventListener("transitionend",i.onSlideToWrapperTransitionEnd),i.$wrapperEl[0].addEventListener("webkitTransitionEnd",i.onSlideToWrapperTransitionEnd)),!0},slideToLoop:function(e=0,t=this.params.speed,n=!0,r){if("string"==typeof e){const t=parseInt(e,10);if(!isFinite(t))throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${e}] given.`);e=t}const a=this;let i=e;return a.params.loop&&(i+=a.loopedSlides),a.slideTo(i,t,n,r)},slideNext:function(e=this.params.speed,t=!0,n){const r=this,{animating:a,enabled:i,params:o}=r;if(!i)return r;let s=o.slidesPerGroup;"auto"===o.slidesPerView&&1===o.slidesPerGroup&&o.slidesPerGroupAuto&&(s=Math.max(r.slidesPerViewDynamic("current",!0),1));const u=r.activeIndexc(e)));let v=o[f.indexOf(d)-1];if(void 0===v&&a.cssMode){let e;o.forEach(((t,n)=>{d>=t&&(e=n)})),void 0!==e&&(v=o[e>0?e-1:e])}let m=0;if(void 0!==v&&(m=s.indexOf(v),m<0&&(m=r.activeIndex-1),"auto"===a.slidesPerView&&1===a.slidesPerGroup&&a.slidesPerGroupAuto&&(m=m-r.slidesPerViewDynamic("previous",!0)+1,m=Math.max(m,0))),a.rewind&&r.isBeginning){const a=r.params.virtual&&r.params.virtual.enabled&&r.virtual?r.virtual.slides.length-1:r.slides.length-1;return r.slideTo(a,e,t,n)}return r.slideTo(m,e,t,n)},slideReset:function(e=this.params.speed,t=!0,n){return this.slideTo(this.activeIndex,e,t,n)},slideToClosest:function(e=this.params.speed,t=!0,n,r=.5){const a=this;let i=a.activeIndex;const o=Math.min(a.params.slidesPerGroupSkip,i),s=o+Math.floor((i-o)/a.params.slidesPerGroup),u=a.rtlTranslate?a.translate:-a.translate;if(u>=a.snapGrid[s]){const e=a.snapGrid[s];u-e>(a.snapGrid[s+1]-e)*r&&(i+=a.params.slidesPerGroup)}else{const e=a.snapGrid[s-1];u-e<=(a.snapGrid[s]-e)*r&&(i-=a.params.slidesPerGroup)}return i=Math.max(i,0),i=Math.min(i,a.slidesGrid.length-1),a.slideTo(i,e,t,n)},slideToClickedSlide:function(){const e=this,{params:t,$wrapperEl:n}=e,r="auto"===t.slidesPerView?e.slidesPerViewDynamic():t.slidesPerView;let a,i=e.clickedIndex;if(t.loop){if(e.animating)return;a=parseInt(vf(e.clickedSlide).attr("data-swiper-slide-index"),10),t.centeredSlides?ie.slides.length-e.loopedSlides+r/2?(e.loopFix(),i=n.children(`.${t.slideClass}[data-swiper-slide-index="${a}"]:not(.${t.slideDuplicateClass})`).eq(0).index(),mf((()=>{e.slideTo(i)}))):e.slideTo(i):i>e.slides.length-r?(e.loopFix(),i=n.children(`.${t.slideClass}[data-swiper-slide-index="${a}"]:not(.${t.slideDuplicateClass})`).eq(0).index(),mf((()=>{e.slideTo(i)}))):e.slideTo(i)}else e.slideTo(i)}};var xf={loopCreate:function(){const e=this,t=nf(),{params:n,$wrapperEl:r}=e,a=r.children().length>0?vf(r.children()[0].parentNode):r;a.children(`.${n.slideClass}.${n.slideDuplicateClass}`).remove();let i=a.children(`.${n.slideClass}`);if(n.loopFillGroupWithBlank){const e=n.slidesPerGroup-i.length%n.slidesPerGroup;if(e!==n.slidesPerGroup){for(let r=0;ri.length&&e.params.loopedSlidesLimit&&(e.loopedSlides=i.length);const o=[],s=[];i.each(((e,t)=>{vf(e).attr("data-swiper-slide-index",t)}));for(let t=0;t=0;e-=1)a.prepend(vf(o[e].cloneNode(!0)).addClass(n.slideDuplicateClass))},loopFix:function(){const e=this;e.emit("beforeLoopFix");const{activeIndex:t,slides:n,loopedSlides:r,allowSlidePrev:a,allowSlideNext:i,snapGrid:o,rtlTranslate:s}=e;let u;e.allowSlidePrev=!0,e.allowSlideNext=!0;const l=-o[t]-e.getTranslate();if(t=n.length-r){u=-n.length+t+r,u+=r;e.slideTo(u,0,!1,!0)&&0!==l&&e.setTranslate((s?-e.translate:e.translate)-l)}e.allowSlidePrev=a,e.allowSlideNext=i,e.emit("loopFix")},loopDestroy:function(){const{$wrapperEl:e,params:t,slides:n}=this;e.children(`.${t.slideClass}.${t.slideDuplicateClass},.${t.slideClass}.${t.slideBlankClass}`).remove(),n.removeAttr("data-swiper-slide-index")}};function Rf(e){const t=this,n=nf(),r=af(),a=t.touchEventsData,{params:i,touches:o,enabled:s}=t;if(!s)return;if(t.animating&&i.preventInteractionOnTransition)return;!t.animating&&i.cssMode&&i.loop&&t.loopFix();let u=e;u.originalEvent&&(u=u.originalEvent);let l=vf(u.target);if("wrapper"===i.touchEventsTarget&&!l.closest(t.wrapperEl).length)return;if(a.isTouchEvent="touchstart"===u.type,!a.isTouchEvent&&"which"in u&&3===u.which)return;if(!a.isTouchEvent&&"button"in u&&u.button>0)return;if(a.isTouched&&a.isMoved)return;const c=!!i.noSwipingClass&&""!==i.noSwipingClass,d=e.composedPath?e.composedPath():e.path;c&&u.target&&u.target.shadowRoot&&d&&(l=vf(d[0]));const f=i.noSwipingSelector?i.noSwipingSelector:`.${i.noSwipingClass}`,v=!(!u.target||!u.target.shadowRoot);if(i.noSwiping&&(v?function(e,t=this){return function t(n){if(!n||n===nf()||n===af())return null;n.assignedSlot&&(n=n.assignedSlot);const r=n.closest(e);return r||n.getRootNode?r||t(n.getRootNode().host):null}(t)}(f,l[0]):l.closest(f)[0]))return void(t.allowClick=!0);if(i.swipeHandler&&!l.closest(i.swipeHandler)[0])return;o.currentX="touchstart"===u.type?u.targetTouches[0].pageX:u.pageX,o.currentY="touchstart"===u.type?u.targetTouches[0].pageY:u.pageY;const m=o.currentX,p=o.currentY,h=i.edgeSwipeDetection||i.iOSEdgeSwipeDetection,g=i.edgeSwipeThreshold||i.iOSEdgeSwipeThreshold;if(h&&(m<=g||m>=r.innerWidth-g)){if("prevent"!==h)return;e.preventDefault()}if(Object.assign(a,{isTouched:!0,isMoved:!1,allowTouchCallbacks:!0,isScrolling:void 0,startMoving:void 0}),o.startX=m,o.startY=p,a.touchStartTime=pf(),t.allowClick=!0,t.updateSize(),t.swipeDirection=void 0,i.threshold>0&&(a.allowThresholdMove=!1),"touchstart"!==u.type){let e=!0;l.is(a.focusableElements)&&(e=!1,"SELECT"===l[0].nodeName&&(a.isTouched=!1)),n.activeElement&&vf(n.activeElement).is(a.focusableElements)&&n.activeElement!==l[0]&&n.activeElement.blur();const r=e&&t.allowTouchMove&&i.touchStartPreventDefault;!i.touchStartForcePreventDefault&&!r||l[0].isContentEditable||u.preventDefault()}t.params.freeMode&&t.params.freeMode.enabled&&t.freeMode&&t.animating&&!i.cssMode&&t.freeMode.onTouchStart(),t.emit("touchStart",u)}function Lf(e){const t=nf(),n=this,r=n.touchEventsData,{params:a,touches:i,rtlTranslate:o,enabled:s}=n;if(!s)return;let u=e;if(u.originalEvent&&(u=u.originalEvent),!r.isTouched)return void(r.startMoving&&r.isScrolling&&n.emit("touchMoveOpposite",u));if(r.isTouchEvent&&"touchmove"!==u.type)return;const l="touchmove"===u.type&&u.targetTouches&&(u.targetTouches[0]||u.changedTouches[0]),c="touchmove"===u.type?l.pageX:u.pageX,d="touchmove"===u.type?l.pageY:u.pageY;if(u.preventedByNestedSwiper)return i.startX=c,void(i.startY=d);if(!n.allowTouchMove)return vf(u.target).is(r.focusableElements)||(n.allowClick=!1),void(r.isTouched&&(Object.assign(i,{startX:c,startY:d,currentX:c,currentY:d}),r.touchStartTime=pf()));if(r.isTouchEvent&&a.touchReleaseOnEdges&&!a.loop)if(n.isVertical()){if(di.startY&&n.translate>=n.minTranslate())return r.isTouched=!1,void(r.isMoved=!1)}else if(ci.startX&&n.translate>=n.minTranslate())return;if(r.isTouchEvent&&t.activeElement&&u.target===t.activeElement&&vf(u.target).is(r.focusableElements))return r.isMoved=!0,void(n.allowClick=!1);if(r.allowTouchCallbacks&&n.emit("touchMove",u),u.targetTouches&&u.targetTouches.length>1)return;i.currentX=c,i.currentY=d;const f=i.currentX-i.startX,v=i.currentY-i.startY;if(n.params.threshold&&Math.sqrt(f**2+v**2)=25&&(e=180*Math.atan2(Math.abs(v),Math.abs(f))/Math.PI,r.isScrolling=n.isHorizontal()?e>a.touchAngle:90-e>a.touchAngle)}if(r.isScrolling&&n.emit("touchMoveOpposite",u),void 0===r.startMoving&&(i.currentX===i.startX&&i.currentY===i.startY||(r.startMoving=!0)),r.isScrolling)return void(r.isTouched=!1);if(!r.startMoving)return;n.allowClick=!1,!a.cssMode&&u.cancelable&&u.preventDefault(),a.touchMoveStopPropagation&&!a.nested&&u.stopPropagation(),r.isMoved||(a.loop&&!a.cssMode&&n.loopFix(),r.startTranslate=n.getTranslate(),n.setTransition(0),n.animating&&n.$wrapperEl.trigger("webkitTransitionEnd transitionend"),r.allowMomentumBounce=!1,!a.grabCursor||!0!==n.allowSlideNext&&!0!==n.allowSlidePrev||n.setGrabCursor(!0),n.emit("sliderFirstMove",u)),n.emit("sliderMove",u),r.isMoved=!0;let m=n.isHorizontal()?f:v;i.diff=m,m*=a.touchRatio,o&&(m=-m),n.swipeDirection=m>0?"prev":"next",r.currentTranslate=m+r.startTranslate;let p=!0,h=a.resistanceRatio;if(a.touchReleaseOnEdges&&(h=0),m>0&&r.currentTranslate>n.minTranslate()?(p=!1,a.resistance&&(r.currentTranslate=n.minTranslate()-1+(-n.minTranslate()+r.startTranslate+m)**h)):m<0&&r.currentTranslater.startTranslate&&(r.currentTranslate=r.startTranslate),n.allowSlidePrev||n.allowSlideNext||(r.currentTranslate=r.startTranslate),a.threshold>0){if(!(Math.abs(m)>a.threshold||r.allowThresholdMove))return void(r.currentTranslate=r.startTranslate);if(!r.allowThresholdMove)return r.allowThresholdMove=!0,i.startX=i.currentX,i.startY=i.currentY,r.currentTranslate=r.startTranslate,void(i.diff=n.isHorizontal()?i.currentX-i.startX:i.currentY-i.startY)}a.followFinger&&!a.cssMode&&((a.freeMode&&a.freeMode.enabled&&n.freeMode||a.watchSlidesProgress)&&(n.updateActiveIndex(),n.updateSlidesClasses()),n.params.freeMode&&a.freeMode.enabled&&n.freeMode&&n.freeMode.onTouchMove(),n.updateProgress(r.currentTranslate),n.setTranslate(r.currentTranslate))}function kf(e){const t=this,n=t.touchEventsData,{params:r,touches:a,rtlTranslate:i,slidesGrid:o,enabled:s}=t;if(!s)return;let u=e;if(u.originalEvent&&(u=u.originalEvent),n.allowTouchCallbacks&&t.emit("touchEnd",u),n.allowTouchCallbacks=!1,!n.isTouched)return n.isMoved&&r.grabCursor&&t.setGrabCursor(!1),n.isMoved=!1,void(n.startMoving=!1);r.grabCursor&&n.isMoved&&n.isTouched&&(!0===t.allowSlideNext||!0===t.allowSlidePrev)&&t.setGrabCursor(!1);const l=pf(),c=l-n.touchStartTime;if(t.allowClick){const e=u.path||u.composedPath&&u.composedPath();t.updateClickedSlide(e&&e[0]||u.target),t.emit("tap click",u),c<300&&l-n.lastClickTime<300&&t.emit("doubleTap doubleClick",u)}if(n.lastClickTime=pf(),mf((()=>{t.destroyed||(t.allowClick=!0)})),!n.isTouched||!n.isMoved||!t.swipeDirection||0===a.diff||n.currentTranslate===n.startTranslate)return n.isTouched=!1,n.isMoved=!1,void(n.startMoving=!1);let d;if(n.isTouched=!1,n.isMoved=!1,n.startMoving=!1,d=r.followFinger?i?t.translate:-t.translate:-n.currentTranslate,r.cssMode)return;if(t.params.freeMode&&r.freeMode.enabled)return void t.freeMode.onTouchEnd({currentPos:d});let f=0,v=t.slidesSizesGrid[0];for(let e=0;e=o[e]&&d=o[e]&&(f=e,v=o[o.length-1]-o[o.length-2])}let m=null,p=null;r.rewind&&(t.isBeginning?p=t.params.virtual&&t.params.virtual.enabled&&t.virtual?t.virtual.slides.length-1:t.slides.length-1:t.isEnd&&(m=0));const h=(d-o[f])/v,g=fr.longSwipesMs){if(!r.longSwipes)return void t.slideTo(t.activeIndex);"next"===t.swipeDirection&&(h>=r.longSwipesRatio?t.slideTo(r.rewind&&t.isEnd?m:f+g):t.slideTo(f)),"prev"===t.swipeDirection&&(h>1-r.longSwipesRatio?t.slideTo(f+g):null!==p&&h<0&&Math.abs(h)>r.longSwipesRatio?t.slideTo(p):t.slideTo(f))}else{if(!r.shortSwipes)return void t.slideTo(t.activeIndex);t.navigation&&(u.target===t.navigation.nextEl||u.target===t.navigation.prevEl)?u.target===t.navigation.nextEl?t.slideTo(f+g):t.slideTo(f):("next"===t.swipeDirection&&t.slideTo(null!==m?m:f+g),"prev"===t.swipeDirection&&t.slideTo(null!==p?p:f))}}function Nf(){const e=this,{params:t,el:n}=e;if(n&&0===n.offsetWidth)return;t.breakpoints&&e.setBreakpoint();const{allowSlideNext:r,allowSlidePrev:a,snapGrid:i}=e;e.allowSlideNext=!0,e.allowSlidePrev=!0,e.updateSize(),e.updateSlides(),e.updateSlidesClasses(),("auto"===t.slidesPerView||t.slidesPerView>1)&&e.isEnd&&!e.isBeginning&&!e.params.centeredSlides?e.slideTo(e.slides.length-1,0,!1,!0):e.slideTo(e.activeIndex,0,!1,!0),e.autoplay&&e.autoplay.running&&e.autoplay.paused&&e.autoplay.run(),e.allowSlidePrev=a,e.allowSlideNext=r,e.params.watchOverflow&&i!==e.snapGrid&&e.checkOverflow()}function Ff(e){const t=this;t.enabled&&(t.allowClick||(t.params.preventClicks&&e.preventDefault(),t.params.preventClicksPropagation&&t.animating&&(e.stopPropagation(),e.stopImmediatePropagation())))}function Bf(){const e=this,{wrapperEl:t,rtlTranslate:n,enabled:r}=e;if(!r)return;let a;e.previousTranslate=e.translate,e.isHorizontal()?e.translate=-t.scrollLeft:e.translate=-t.scrollTop,0===e.translate&&(e.translate=0),e.updateActiveIndex(),e.updateSlidesClasses();const i=e.maxTranslate()-e.minTranslate();a=0===i?0:(e.translate-e.minTranslate())/i,a!==e.progress&&e.updateProgress(n?-e.translate:e.translate),e.emit("setTranslate",e.translate,!1)}let Uf=!1;function Vf(){}const jf=(e,t)=>{const n=nf(),{params:r,touchEvents:a,el:i,wrapperEl:o,device:s,support:u}=e,l=!!r.nested,c="on"===t?"addEventListener":"removeEventListener",d=t;if(u.touch){const t=!("touchstart"!==a.start||!u.passiveListener||!r.passiveListeners)&&{passive:!0,capture:!1};i[c](a.start,e.onTouchStart,t),i[c](a.move,e.onTouchMove,u.passiveListener?{passive:!1,capture:l}:l),i[c](a.end,e.onTouchEnd,t),a.cancel&&i[c](a.cancel,e.onTouchEnd,t)}else i[c](a.start,e.onTouchStart,!1),n[c](a.move,e.onTouchMove,l),n[c](a.end,e.onTouchEnd,!1);(r.preventClicks||r.preventClicksPropagation)&&i[c]("click",e.onClick,!0),r.cssMode&&o[c]("scroll",e.onScroll),r.updateOnWindowResize?e[d](s.ios||s.android?"resize orientationchange observerUpdate":"resize observerUpdate",Nf,!0):e[d]("observerUpdate",Nf,!0)};var Gf={attachEvents:function(){const e=this,t=nf(),{params:n,support:r}=e;e.onTouchStart=Rf.bind(e),e.onTouchMove=Lf.bind(e),e.onTouchEnd=kf.bind(e),n.cssMode&&(e.onScroll=Bf.bind(e)),e.onClick=Ff.bind(e),r.touch&&!Uf&&(t.addEventListener("touchstart",Vf),Uf=!0),jf(e,"on")},detachEvents:function(){jf(this,"off")}};const Hf=(e,t)=>e.grid&&t.grid&&t.grid.rows>1;var Qf={setBreakpoint:function(){const e=this,{activeIndex:t,initialized:n,loopedSlides:r=0,params:a,$el:i}=e,o=a.breakpoints;if(!o||o&&0===Object.keys(o).length)return;const s=e.getBreakpoint(o,e.params.breakpointsBase,e.el);if(!s||e.currentBreakpoint===s)return;const u=(s in o?o[s]:void 0)||e.originalParams,l=Hf(e,a),c=Hf(e,u),d=a.enabled;l&&!c?(i.removeClass(`${a.containerModifierClass}grid ${a.containerModifierClass}grid-column`),e.emitContainerClasses()):!l&&c&&(i.addClass(`${a.containerModifierClass}grid`),(u.grid.fill&&"column"===u.grid.fill||!u.grid.fill&&"column"===a.grid.fill)&&i.addClass(`${a.containerModifierClass}grid-column`),e.emitContainerClasses()),["navigation","pagination","scrollbar"].forEach((t=>{const n=a[t]&&a[t].enabled,r=u[t]&&u[t].enabled;n&&!r&&e[t].disable(),!n&&r&&e[t].enable()}));const f=u.direction&&u.direction!==a.direction,v=a.loop&&(u.slidesPerView!==a.slidesPerView||f);f&&n&&e.changeDirection(),Af(e.params,u);const m=e.params.enabled;Object.assign(e,{allowTouchMove:e.params.allowTouchMove,allowSlideNext:e.params.allowSlideNext,allowSlidePrev:e.params.allowSlidePrev}),d&&!m?e.disable():!d&&m&&e.enable(),e.currentBreakpoint=s,e.emit("_beforeBreakpoint",u),v&&n&&(e.loopDestroy(),e.loopCreate(),e.updateSlides(),e.slideTo(t-r+e.loopedSlides,0,!1)),e.emit("breakpoint",u)},getBreakpoint:function(e,t="window",n){if(!e||"container"===t&&!n)return;let r=!1;const a=af(),i="window"===t?a.innerHeight:n.clientHeight,o=Object.keys(e).map((e=>{if("string"==typeof e&&0===e.indexOf("@")){const t=parseFloat(e.substr(1));return{value:i*t,point:e}}return{value:e,point:e}}));o.sort(((e,t)=>parseInt(e.value,10)-parseInt(t.value,10)));for(let e=0;e{"object"==typeof e?Object.keys(e).forEach((r=>{e[r]&&n.push(t+r)})):"string"==typeof e&&n.push(t+e)})),n}(["initialized",n.direction,{"pointer-events":!o.touch},{"free-mode":e.params.freeMode&&n.freeMode.enabled},{autoheight:n.autoHeight},{rtl:r},{grid:n.grid&&n.grid.rows>1},{"grid-column":n.grid&&n.grid.rows>1&&"column"===n.grid.fill},{android:i.android},{ios:i.ios},{"css-mode":n.cssMode},{centered:n.cssMode&&n.centeredSlides},{"watch-progress":n.watchSlidesProgress}],n.containerModifierClass);t.push(...s),a.addClass([...t].join(" ")),e.emitContainerClasses()},removeClasses:function(){const{$el:e,classNames:t}=this;e.removeClass(t.join(" ")),this.emitContainerClasses()}};var zf={init:!0,direction:"horizontal",touchEventsTarget:"wrapper",initialSlide:0,speed:300,cssMode:!1,updateOnWindowResize:!0,resizeObserver:!0,nested:!1,createElements:!1,enabled:!0,focusableElements:"input, select, option, textarea, button, video, label",width:null,height:null,preventInteractionOnTransition:!1,userAgent:null,url:null,edgeSwipeDetection:!1,edgeSwipeThreshold:20,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",breakpoints:void 0,breakpointsBase:"window",spaceBetween:0,slidesPerView:1,slidesPerGroup:1,slidesPerGroupSkip:0,slidesPerGroupAuto:!1,centeredSlides:!1,centeredSlidesBounds:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,normalizeSlideIndex:!0,centerInsufficientSlides:!1,watchOverflow:!0,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,allowTouchMove:!0,threshold:0,touchMoveStopPropagation:!1,touchStartPreventDefault:!0,touchStartForcePreventDefault:!1,touchReleaseOnEdges:!1,uniqueNavElements:!0,resistance:!0,resistanceRatio:.85,watchSlidesProgress:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,preloadImages:!0,updateOnImagesReady:!0,loop:!1,loopAdditionalSlides:0,loopedSlides:null,loopedSlidesLimit:!0,loopFillGroupWithBlank:!1,loopPreventsSlide:!0,rewind:!1,allowSlidePrev:!0,allowSlideNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",noSwipingSelector:null,passiveListeners:!0,maxBackfaceHiddenSlides:10,containerModifierClass:"swiper-",slideClass:"swiper-slide",slideBlankClass:"swiper-slide-invisible-blank",slideActiveClass:"swiper-slide-active",slideDuplicateActiveClass:"swiper-slide-duplicate-active",slideVisibleClass:"swiper-slide-visible",slideDuplicateClass:"swiper-slide-duplicate",slideNextClass:"swiper-slide-next",slideDuplicateNextClass:"swiper-slide-duplicate-next",slidePrevClass:"swiper-slide-prev",slideDuplicatePrevClass:"swiper-slide-duplicate-prev",wrapperClass:"swiper-wrapper",runCallbacksOnInit:!0,_emitClasses:!1};function Wf(e,t){return function(n={}){const r=Object.keys(n)[0],a=n[r];"object"==typeof a&&null!==a?(["navigation","pagination","scrollbar"].indexOf(r)>=0&&!0===e[r]&&(e[r]={auto:!0}),r in e&&"enabled"in a?(!0===e[r]&&(e[r]={enabled:!0}),"object"!=typeof e[r]||"enabled"in e[r]||(e[r].enabled=!0),e[r]||(e[r]={enabled:!1}),Af(t,n)):Af(t,n)):Af(t,n)}}const Yf={eventsEmitter:_f,update:Mf,translate:Of,transition:{setTransition:function(e,t){const n=this;n.params.cssMode||n.$wrapperEl.transition(e),n.emit("setTransition",e,t)},transitionStart:function(e=!0,t){const n=this,{params:r}=n;r.cssMode||(r.autoHeight&&n.updateAutoHeight(),Pf({swiper:n,runCallbacks:e,direction:t,step:"Start"}))},transitionEnd:function(e=!0,t){const n=this,{params:r}=n;n.animating=!1,r.cssMode||(n.setTransition(0),Pf({swiper:n,runCallbacks:e,direction:t,step:"End"}))}},slide:Tf,loop:xf,grabCursor:{setGrabCursor:function(e){const t=this;if(t.support.touch||!t.params.simulateTouch||t.params.watchOverflow&&t.isLocked||t.params.cssMode)return;const n="container"===t.params.touchEventsTarget?t.el:t.wrapperEl;n.style.cursor="move",n.style.cursor=e?"grabbing":"grab"},unsetGrabCursor:function(){const e=this;e.support.touch||e.params.watchOverflow&&e.isLocked||e.params.cssMode||(e["container"===e.params.touchEventsTarget?"el":"wrapperEl"].style.cursor="")}},events:Gf,breakpoints:Qf,checkOverflow:{checkOverflow:function(){const e=this,{isLocked:t,params:n}=e,{slidesOffsetBefore:r}=n;if(r){const t=e.slides.length-1,n=e.slidesGrid[t]+e.slidesSizesGrid[t]+2*r;e.isLocked=e.size>n}else e.isLocked=1===e.snapGrid.length;!0===n.allowSlideNext&&(e.allowSlideNext=!e.isLocked),!0===n.allowSlidePrev&&(e.allowSlidePrev=!e.isLocked),t&&t!==e.isLocked&&(e.isEnd=!1),t!==e.isLocked&&e.emit(e.isLocked?"lock":"unlock")}},classes:qf,images:{loadImage:function(e,t,n,r,a,i){const o=af();let s;function u(){i&&i()}vf(e).parent("picture")[0]||e.complete&&a?u():t?(s=new o.Image,s.onload=u,s.onerror=u,r&&(s.sizes=r),n&&(s.srcset=n),t&&(s.src=t)):u()},preloadImages:function(){const e=this;function t(){null!=e&&e&&!e.destroyed&&(void 0!==e.imagesLoaded&&(e.imagesLoaded+=1),e.imagesLoaded===e.imagesToLoad.length&&(e.params.updateOnImagesReady&&e.update(),e.emit("imagesReady")))}e.imagesToLoad=e.$el.find("img");for(let n=0;n1){const e=[];return vf(n.el).each((t=>{const r=Af({},n,{el:t});e.push(new Kf(r))})),e}const r=this;r.__swiper__=!0,r.support=Ef(),r.device=Cf({userAgent:n.userAgent}),r.browser=Df(),r.eventsListeners={},r.eventsAnyListeners=[],r.modules=[...r.__modules__],n.modules&&Array.isArray(n.modules)&&r.modules.push(...n.modules);const a={};r.modules.forEach((e=>{e({swiper:r,extendParams:Wf(n,a),on:r.on.bind(r),once:r.once.bind(r),off:r.off.bind(r),emit:r.emit.bind(r)})}));const i=Af({},zf,a);return r.params=Af({},i,Zf,n),r.originalParams=Af({},r.params),r.passedParams=Af({},n),r.params&&r.params.on&&Object.keys(r.params.on).forEach((e=>{r.on(e,r.params.on[e])})),r.params&&r.params.onAny&&r.onAny(r.params.onAny),r.$=vf,Object.assign(r,{enabled:r.params.enabled,el:t,classNames:[],slides:vf(),slidesGrid:[],snapGrid:[],slidesSizesGrid:[],isHorizontal:()=>"horizontal"===r.params.direction,isVertical:()=>"vertical"===r.params.direction,activeIndex:0,realIndex:0,isBeginning:!0,isEnd:!1,translate:0,previousTranslate:0,progress:0,velocity:0,animating:!1,allowSlideNext:r.params.allowSlideNext,allowSlidePrev:r.params.allowSlidePrev,touchEvents:function(){const e=["touchstart","touchmove","touchend","touchcancel"],t=["pointerdown","pointermove","pointerup"];return r.touchEventsTouch={start:e[0],move:e[1],end:e[2],cancel:e[3]},r.touchEventsDesktop={start:t[0],move:t[1],end:t[2]},r.support.touch||!r.params.simulateTouch?r.touchEventsTouch:r.touchEventsDesktop}(),touchEventsData:{isTouched:void 0,isMoved:void 0,allowTouchCallbacks:void 0,touchStartTime:void 0,isScrolling:void 0,currentTranslate:void 0,startTranslate:void 0,allowThresholdMove:void 0,focusableElements:r.params.focusableElements,lastClickTime:pf(),clickTimeout:void 0,velocities:[],allowMomentumBounce:void 0,isTouchEvent:void 0,startMoving:void 0},allowClick:!0,allowTouchMove:r.params.allowTouchMove,touches:{startX:0,startY:0,currentX:0,currentY:0,diff:0},imagesToLoad:[],imagesLoaded:0}),r.emit("_swiper"),r.params.init&&r.init(),r}enable(){const e=this;e.enabled||(e.enabled=!0,e.params.grabCursor&&e.setGrabCursor(),e.emit("enable"))}disable(){const e=this;e.enabled&&(e.enabled=!1,e.params.grabCursor&&e.unsetGrabCursor(),e.emit("disable"))}setProgress(e,t){const n=this;e=Math.min(Math.max(e,0),1);const r=n.minTranslate(),a=(n.maxTranslate()-r)*e+r;n.translateTo(a,void 0===t?0:t),n.updateActiveIndex(),n.updateSlidesClasses()}emitContainerClasses(){const e=this;if(!e.params._emitClasses||!e.el)return;const t=e.el.className.split(" ").filter((t=>0===t.indexOf("swiper")||0===t.indexOf(e.params.containerModifierClass)));e.emit("_containerClasses",t.join(" "))}getSlideClasses(e){const t=this;return t.destroyed?"":e.className.split(" ").filter((e=>0===e.indexOf("swiper-slide")||0===e.indexOf(t.params.slideClass))).join(" ")}emitSlidesClasses(){const e=this;if(!e.params._emitClasses||!e.el)return;const t=[];e.slides.each((n=>{const r=e.getSlideClasses(n);t.push({slideEl:n,classNames:r}),e.emit("_slideClass",n,r)})),e.emit("_slideClasses",t)}slidesPerViewDynamic(e="current",t=!1){const{params:n,slides:r,slidesGrid:a,slidesSizesGrid:i,size:o,activeIndex:s}=this;let u=1;if(n.centeredSlides){let e,t=r[s].swiperSlideSize;for(let n=s+1;no&&(e=!0));for(let n=s-1;n>=0;n-=1)r[n]&&!e&&(t+=r[n].swiperSlideSize,u+=1,t>o&&(e=!0))}else if("current"===e)for(let e=s+1;e=0;e-=1){a[s]-a[e]1)&&e.isEnd&&!e.params.centeredSlides?e.slideTo(e.slides.length-1,0,!1,!0):e.slideTo(e.activeIndex,0,!1,!0),a||r()),n.watchOverflow&&t!==e.snapGrid&&e.checkOverflow(),e.emit("update")}changeDirection(e,t=!0){const n=this,r=n.params.direction;return e||(e="horizontal"===r?"vertical":"horizontal"),e===r||"horizontal"!==e&&"vertical"!==e||(n.$el.removeClass(`${n.params.containerModifierClass}${r}`).addClass(`${n.params.containerModifierClass}${e}`),n.emitContainerClasses(),n.params.direction=e,n.slides.each((t=>{"vertical"===e?t.style.width="":t.style.height=""})),n.emit("changeDirection"),t&&n.update()),n}changeLanguageDirection(e){const t=this;t.rtl&&"rtl"===e||!t.rtl&&"ltr"===e||(t.rtl="rtl"===e,t.rtlTranslate="horizontal"===t.params.direction&&t.rtl,t.rtl?(t.$el.addClass(`${t.params.containerModifierClass}rtl`),t.el.dir="rtl"):(t.$el.removeClass(`${t.params.containerModifierClass}rtl`),t.el.dir="ltr"),t.update())}mount(e){const t=this;if(t.mounted)return!0;const n=vf(e||t.params.el);if(!(e=n[0]))return!1;e.swiper=t;const r=()=>`.${(t.params.wrapperClass||"").trim().split(" ").join(".")}`;let a=(()=>{if(e&&e.shadowRoot&&e.shadowRoot.querySelector){const t=vf(e.shadowRoot.querySelector(r()));return t.children=e=>n.children(e),t}return n.children?n.children(r()):vf(n).children(r())})();if(0===a.length&&t.params.createElements){const e=nf().createElement("div");a=vf(e),e.className=t.params.wrapperClass,n.append(e),n.children(`.${t.params.slideClass}`).each((e=>{a.append(e)}))}return Object.assign(t,{$el:n,el:e,$wrapperEl:a,wrapperEl:a[0],mounted:!0,rtl:"rtl"===e.dir.toLowerCase()||"rtl"===n.css("direction"),rtlTranslate:"horizontal"===t.params.direction&&("rtl"===e.dir.toLowerCase()||"rtl"===n.css("direction")),wrongRTL:"-webkit-box"===a.css("display")}),!0}init(e){const t=this;if(t.initialized)return t;return!1===t.mount(e)||(t.emit("beforeInit"),t.params.breakpoints&&t.setBreakpoint(),t.addClasses(),t.params.loop&&t.loopCreate(),t.updateSize(),t.updateSlides(),t.params.watchOverflow&&t.checkOverflow(),t.params.grabCursor&&t.enabled&&t.setGrabCursor(),t.params.preloadImages&&t.preloadImages(),t.params.loop?t.slideTo(t.params.initialSlide+t.loopedSlides,0,t.params.runCallbacksOnInit,!1,!0):t.slideTo(t.params.initialSlide,0,t.params.runCallbacksOnInit,!1,!0),t.attachEvents(),t.initialized=!0,t.emit("init"),t.emit("afterInit")),t}destroy(e=!0,t=!0){const n=this,{params:r,$el:a,$wrapperEl:i,slides:o}=n;return void 0===n.params||n.destroyed||(n.emit("beforeDestroy"),n.initialized=!1,n.detachEvents(),r.loop&&n.loopDestroy(),t&&(n.removeClasses(),a.removeAttr("style"),i.removeAttr("style"),o&&o.length&&o.removeClass([r.slideVisibleClass,r.slideActiveClass,r.slideNextClass,r.slidePrevClass].join(" ")).removeAttr("style").removeAttr("data-swiper-slide-index")),n.emit("destroy"),Object.keys(n.eventsListeners).forEach((e=>{n.off(e)})),!1!==e&&(n.$el[0].swiper=null,function(e){const t=e;Object.keys(t).forEach((e=>{try{t[e]=null}catch(e){}try{delete t[e]}catch(e){}}))}(n)),n.destroyed=!0),null}static extendDefaults(e){Af(Zf,e)}static get extendedDefaults(){return Zf}static get defaults(){return zf}static installModule(e){Kf.prototype.__modules__||(Kf.prototype.__modules__=[]);const t=Kf.prototype.__modules__;"function"==typeof e&&t.indexOf(e)<0&&t.push(e)}static use(e){return Array.isArray(e)?(e.forEach((e=>Kf.installModule(e))),Kf):(Kf.installModule(e),Kf)}}Object.keys(Yf).forEach((e=>{Object.keys(Yf[e]).forEach((t=>{Kf.prototype[t]=Yf[e][t]}))})),Kf.use([function({swiper:e,on:t,emit:n}){const r=af();let a=null,i=null;const o=()=>{e&&!e.destroyed&&e.initialized&&(n("beforeResize"),n("resize"))},s=()=>{e&&!e.destroyed&&e.initialized&&n("orientationchange")};t("init",(()=>{e.params.resizeObserver&&void 0!==r.ResizeObserver?e&&!e.destroyed&&e.initialized&&(a=new ResizeObserver((t=>{i=r.requestAnimationFrame((()=>{const{width:n,height:r}=e;let a=n,i=r;t.forEach((({contentBoxSize:t,contentRect:n,target:r})=>{r&&r!==e.el||(a=n?n.width:(t[0]||t).inlineSize,i=n?n.height:(t[0]||t).blockSize)})),a===n&&i===r||o()}))})),a.observe(e.el)):(r.addEventListener("resize",o),r.addEventListener("orientationchange",s))})),t("destroy",(()=>{i&&r.cancelAnimationFrame(i),a&&a.unobserve&&e.el&&(a.unobserve(e.el),a=null),r.removeEventListener("resize",o),r.removeEventListener("orientationchange",s)}))},function({swiper:e,extendParams:t,on:n,emit:r}){const a=[],i=af(),o=(e,t={})=>{const n=new(i.MutationObserver||i.WebkitMutationObserver)((e=>{if(1===e.length)return void r("observerUpdate",e[0]);const t=function(){r("observerUpdate",e[0])};i.requestAnimationFrame?i.requestAnimationFrame(t):i.setTimeout(t,0)}));n.observe(e,{attributes:void 0===t.attributes||t.attributes,childList:void 0===t.childList||t.childList,characterData:void 0===t.characterData||t.characterData}),a.push(n)};t({observer:!1,observeParents:!1,observeSlideChildren:!1}),n("init",(()=>{if(e.params.observer){if(e.params.observeParents){const t=e.$el.parents();for(let e=0;e{a.forEach((e=>{e.disconnect()})),a.splice(0,a.length)}))}]);var Xf=Kf;function $f(e,t,n,r){const a=nf();return e.params.createElements&&Object.keys(r).forEach((i=>{if(!n[i]&&!0===n.auto){let o=e.$el.children(`.${r[i]}`)[0];o||(o=a.createElement("div"),o.className=r[i],e.$el.append(o)),n[i]=o,t[i]=o}})),n}function Jf({swiper:e,extendParams:t,on:n,emit:r}){function a(t){let n;return t&&(n=vf(t),e.params.uniqueNavElements&&"string"==typeof t&&n.length>1&&1===e.$el.find(t).length&&(n=e.$el.find(t))),n}function i(t,n){const r=e.params.navigation;t&&t.length>0&&(t[n?"addClass":"removeClass"](r.disabledClass),t[0]&&"BUTTON"===t[0].tagName&&(t[0].disabled=n),e.params.watchOverflow&&e.enabled&&t[e.isLocked?"addClass":"removeClass"](r.lockClass))}function o(){if(e.params.loop)return;const{$nextEl:t,$prevEl:n}=e.navigation;i(n,e.isBeginning&&!e.params.rewind),i(t,e.isEnd&&!e.params.rewind)}function s(t){t.preventDefault(),(!e.isBeginning||e.params.loop||e.params.rewind)&&(e.slidePrev(),r("navigationPrev"))}function u(t){t.preventDefault(),(!e.isEnd||e.params.loop||e.params.rewind)&&(e.slideNext(),r("navigationNext"))}function l(){const t=e.params.navigation;if(e.params.navigation=$f(e,e.originalParams.navigation,e.params.navigation,{nextEl:"swiper-button-next",prevEl:"swiper-button-prev"}),!t.nextEl&&!t.prevEl)return;const n=a(t.nextEl),r=a(t.prevEl);n&&n.length>0&&n.on("click",u),r&&r.length>0&&r.on("click",s),Object.assign(e.navigation,{$nextEl:n,nextEl:n&&n[0],$prevEl:r,prevEl:r&&r[0]}),e.enabled||(n&&n.addClass(t.lockClass),r&&r.addClass(t.lockClass))}function c(){const{$nextEl:t,$prevEl:n}=e.navigation;t&&t.length&&(t.off("click",u),t.removeClass(e.params.navigation.disabledClass)),n&&n.length&&(n.off("click",s),n.removeClass(e.params.navigation.disabledClass))}t({navigation:{nextEl:null,prevEl:null,hideOnClick:!1,disabledClass:"swiper-button-disabled",hiddenClass:"swiper-button-hidden",lockClass:"swiper-button-lock",navigationDisabledClass:"swiper-navigation-disabled"}}),e.navigation={nextEl:null,$nextEl:null,prevEl:null,$prevEl:null},n("init",(()=>{!1===e.params.navigation.enabled?d():(l(),o())})),n("toEdge fromEdge lock unlock",(()=>{o()})),n("destroy",(()=>{c()})),n("enable disable",(()=>{const{$nextEl:t,$prevEl:n}=e.navigation;t&&t[e.enabled?"removeClass":"addClass"](e.params.navigation.lockClass),n&&n[e.enabled?"removeClass":"addClass"](e.params.navigation.lockClass)})),n("click",((t,n)=>{const{$nextEl:a,$prevEl:i}=e.navigation,o=n.target;if(e.params.navigation.hideOnClick&&!vf(o).is(i)&&!vf(o).is(a)){if(e.pagination&&e.params.pagination&&e.params.pagination.clickable&&(e.pagination.el===o||e.pagination.el.contains(o)))return;let t;a?t=a.hasClass(e.params.navigation.hiddenClass):i&&(t=i.hasClass(e.params.navigation.hiddenClass)),r(!0===t?"navigationShow":"navigationHide"),a&&a.toggleClass(e.params.navigation.hiddenClass),i&&i.toggleClass(e.params.navigation.hiddenClass)}}));const d=()=>{e.$el.addClass(e.params.navigation.navigationDisabledClass),c()};Object.assign(e.navigation,{enable:()=>{e.$el.removeClass(e.params.navigation.navigationDisabledClass),l(),o()},disable:d,update:o,init:l,destroy:c})}function ev(e=""){return`.${e.trim().replace(/([\.:!\/])/g,"\\$1").replace(/ /g,".")}`}function tv({swiper:e,extendParams:t,on:n,emit:r}){const a="swiper-pagination";let i;t({pagination:{el:null,bulletElement:"span",clickable:!1,hideOnClick:!1,renderBullet:null,renderProgressbar:null,renderFraction:null,renderCustom:null,progressbarOpposite:!1,type:"bullets",dynamicBullets:!1,dynamicMainBullets:1,formatFractionCurrent:e=>e,formatFractionTotal:e=>e,bulletClass:`${a}-bullet`,bulletActiveClass:`${a}-bullet-active`,modifierClass:`${a}-`,currentClass:`${a}-current`,totalClass:`${a}-total`,hiddenClass:`${a}-hidden`,progressbarFillClass:`${a}-progressbar-fill`,progressbarOppositeClass:`${a}-progressbar-opposite`,clickableClass:`${a}-clickable`,lockClass:`${a}-lock`,horizontalClass:`${a}-horizontal`,verticalClass:`${a}-vertical`,paginationDisabledClass:`${a}-disabled`}}),e.pagination={el:null,$el:null,bullets:[]};let o=0;function s(){return!e.params.pagination.el||!e.pagination.el||!e.pagination.$el||0===e.pagination.$el.length}function u(t,n){const{bulletActiveClass:r}=e.params.pagination;t[n]().addClass(`${r}-${n}`)[n]().addClass(`${r}-${n}-${n}`)}function l(){const t=e.rtl,n=e.params.pagination;if(s())return;const a=e.virtual&&e.params.virtual.enabled?e.virtual.slides.length:e.slides.length,l=e.pagination.$el;let c;const d=e.params.loop?Math.ceil((a-2*e.loopedSlides)/e.params.slidesPerGroup):e.snapGrid.length;if(e.params.loop?(c=Math.ceil((e.activeIndex-e.loopedSlides)/e.params.slidesPerGroup),c>a-1-2*e.loopedSlides&&(c-=a-2*e.loopedSlides),c>d-1&&(c-=d),c<0&&"bullets"!==e.params.paginationType&&(c=d+c)):c=void 0!==e.snapIndex?e.snapIndex:e.activeIndex||0,"bullets"===n.type&&e.pagination.bullets&&e.pagination.bullets.length>0){const r=e.pagination.bullets;let a,s,d;if(n.dynamicBullets&&(i=r.eq(0)[e.isHorizontal()?"outerWidth":"outerHeight"](!0),l.css(e.isHorizontal()?"width":"height",i*(n.dynamicMainBullets+4)+"px"),n.dynamicMainBullets>1&&void 0!==e.previousIndex&&(o+=c-(e.previousIndex-e.loopedSlides||0),o>n.dynamicMainBullets-1?o=n.dynamicMainBullets-1:o<0&&(o=0)),a=Math.max(c-o,0),s=a+(Math.min(r.length,n.dynamicMainBullets)-1),d=(s+a)/2),r.removeClass(["","-next","-next-next","-prev","-prev-prev","-main"].map((e=>`${n.bulletActiveClass}${e}`)).join(" ")),l.length>1)r.each((e=>{const t=vf(e),r=t.index();r===c&&t.addClass(n.bulletActiveClass),n.dynamicBullets&&(r>=a&&r<=s&&t.addClass(`${n.bulletActiveClass}-main`),r===a&&u(t,"prev"),r===s&&u(t,"next"))}));else{const t=r.eq(c),i=t.index();if(t.addClass(n.bulletActiveClass),n.dynamicBullets){const t=r.eq(a),o=r.eq(s);for(let e=a;e<=s;e+=1)r.eq(e).addClass(`${n.bulletActiveClass}-main`);if(e.params.loop)if(i>=r.length){for(let e=n.dynamicMainBullets;e>=0;e-=1)r.eq(r.length-e).addClass(`${n.bulletActiveClass}-main`);r.eq(r.length-n.dynamicMainBullets-1).addClass(`${n.bulletActiveClass}-prev`)}else u(t,"prev"),u(o,"next");else u(t,"prev"),u(o,"next")}}if(n.dynamicBullets){const a=Math.min(r.length,n.dynamicMainBullets+4),o=(i*a-i)/2-d*i,s=t?"right":"left";r.css(e.isHorizontal()?s:"top",`${o}px`)}}if("fraction"===n.type&&(l.find(ev(n.currentClass)).text(n.formatFractionCurrent(c+1)),l.find(ev(n.totalClass)).text(n.formatFractionTotal(d))),"progressbar"===n.type){let t;t=n.progressbarOpposite?e.isHorizontal()?"vertical":"horizontal":e.isHorizontal()?"horizontal":"vertical";const r=(c+1)/d;let a=1,i=1;"horizontal"===t?a=r:i=r,l.find(ev(n.progressbarFillClass)).transform(`translate3d(0,0,0) scaleX(${a}) scaleY(${i})`).transition(e.params.speed)}"custom"===n.type&&n.renderCustom?(l.html(n.renderCustom(e,c+1,d)),r("paginationRender",l[0])):r("paginationUpdate",l[0]),e.params.watchOverflow&&e.enabled&&l[e.isLocked?"addClass":"removeClass"](n.lockClass)}function c(){const t=e.params.pagination;if(s())return;const n=e.virtual&&e.params.virtual.enabled?e.virtual.slides.length:e.slides.length,a=e.pagination.$el;let i="";if("bullets"===t.type){let r=e.params.loop?Math.ceil((n-2*e.loopedSlides)/e.params.slidesPerGroup):e.snapGrid.length;e.params.freeMode&&e.params.freeMode.enabled&&!e.params.loop&&r>n&&(r=n);for(let n=0;n`;a.html(i),e.pagination.bullets=a.find(ev(t.bulletClass))}"fraction"===t.type&&(i=t.renderFraction?t.renderFraction.call(e,t.currentClass,t.totalClass):` / `,a.html(i)),"progressbar"===t.type&&(i=t.renderProgressbar?t.renderProgressbar.call(e,t.progressbarFillClass):``,a.html(i)),"custom"!==t.type&&r("paginationRender",e.pagination.$el[0])}function d(){e.params.pagination=$f(e,e.originalParams.pagination,e.params.pagination,{el:"swiper-pagination"});const t=e.params.pagination;if(!t.el)return;let n=vf(t.el);0!==n.length&&(e.params.uniqueNavElements&&"string"==typeof t.el&&n.length>1&&(n=e.$el.find(t.el),n.length>1&&(n=n.filter((t=>vf(t).parents(".swiper")[0]===e.el)))),"bullets"===t.type&&t.clickable&&n.addClass(t.clickableClass),n.addClass(t.modifierClass+t.type),n.addClass(e.isHorizontal()?t.horizontalClass:t.verticalClass),"bullets"===t.type&&t.dynamicBullets&&(n.addClass(`${t.modifierClass}${t.type}-dynamic`),o=0,t.dynamicMainBullets<1&&(t.dynamicMainBullets=1)),"progressbar"===t.type&&t.progressbarOpposite&&n.addClass(t.progressbarOppositeClass),t.clickable&&n.on("click",ev(t.bulletClass),(function(t){t.preventDefault();let n=vf(this).index()*e.params.slidesPerGroup;e.params.loop&&(n+=e.loopedSlides),e.slideTo(n)})),Object.assign(e.pagination,{$el:n,el:n[0]}),e.enabled||n.addClass(t.lockClass))}function f(){const t=e.params.pagination;if(s())return;const n=e.pagination.$el;n.removeClass(t.hiddenClass),n.removeClass(t.modifierClass+t.type),n.removeClass(e.isHorizontal()?t.horizontalClass:t.verticalClass),e.pagination.bullets&&e.pagination.bullets.removeClass&&e.pagination.bullets.removeClass(t.bulletActiveClass),t.clickable&&n.off("click",ev(t.bulletClass))}n("init",(()=>{!1===e.params.pagination.enabled?v():(d(),c(),l())})),n("activeIndexChange",(()=>{(e.params.loop||void 0===e.snapIndex)&&l()})),n("snapIndexChange",(()=>{e.params.loop||l()})),n("slidesLengthChange",(()=>{e.params.loop&&(c(),l())})),n("snapGridLengthChange",(()=>{e.params.loop||(c(),l())})),n("destroy",(()=>{f()})),n("enable disable",(()=>{const{$el:t}=e.pagination;t&&t[e.enabled?"removeClass":"addClass"](e.params.pagination.lockClass)})),n("lock unlock",(()=>{l()})),n("click",((t,n)=>{const a=n.target,{$el:i}=e.pagination;if(e.params.pagination.el&&e.params.pagination.hideOnClick&&i&&i.length>0&&!vf(a).hasClass(e.params.pagination.bulletClass)){if(e.navigation&&(e.navigation.nextEl&&a===e.navigation.nextEl||e.navigation.prevEl&&a===e.navigation.prevEl))return;const t=i.hasClass(e.params.pagination.hiddenClass);r(!0===t?"paginationShow":"paginationHide"),i.toggleClass(e.params.pagination.hiddenClass)}}));const v=()=>{e.$el.addClass(e.params.pagination.paginationDisabledClass),e.pagination.$el&&e.pagination.$el.addClass(e.params.pagination.paginationDisabledClass),f()};Object.assign(e.pagination,{enable:()=>{e.$el.removeClass(e.params.pagination.paginationDisabledClass),e.pagination.$el&&e.pagination.$el.removeClass(e.params.pagination.paginationDisabledClass),d(),c(),l()},disable:v,render:c,update:l,init:d,destroy:f})}function nv({swiper:e,extendParams:t,on:n,emit:r}){const a=nf();let i,o,s,u,l=!1,c=null,d=null;function f(){if(!e.params.scrollbar.el||!e.scrollbar.el)return;const{scrollbar:t,rtlTranslate:n,progress:r}=e,{$dragEl:a,$el:i}=t,u=e.params.scrollbar;let l=o,d=(s-o)*r;n?(d=-d,d>0?(l=o-d,d=0):-d+o>s&&(l=s+d)):d<0?(l=o+d,d=0):d+o>s&&(l=s-d),e.isHorizontal()?(a.transform(`translate3d(${d}px, 0, 0)`),a[0].style.width=`${l}px`):(a.transform(`translate3d(0px, ${d}px, 0)`),a[0].style.height=`${l}px`),u.hide&&(clearTimeout(c),i[0].style.opacity=1,c=setTimeout((()=>{i[0].style.opacity=0,i.transition(400)}),1e3))}function v(){if(!e.params.scrollbar.el||!e.scrollbar.el)return;const{scrollbar:t}=e,{$dragEl:n,$el:r}=t;n[0].style.width="",n[0].style.height="",s=e.isHorizontal()?r[0].offsetWidth:r[0].offsetHeight,u=e.size/(e.virtualSize+e.params.slidesOffsetBefore-(e.params.centeredSlides?e.snapGrid[0]:0)),o="auto"===e.params.scrollbar.dragSize?s*u:parseInt(e.params.scrollbar.dragSize,10),e.isHorizontal()?n[0].style.width=`${o}px`:n[0].style.height=`${o}px`,r[0].style.display=u>=1?"none":"",e.params.scrollbar.hide&&(r[0].style.opacity=0),e.params.watchOverflow&&e.enabled&&t.$el[e.isLocked?"addClass":"removeClass"](e.params.scrollbar.lockClass)}function m(t){return e.isHorizontal()?"touchstart"===t.type||"touchmove"===t.type?t.targetTouches[0].clientX:t.clientX:"touchstart"===t.type||"touchmove"===t.type?t.targetTouches[0].clientY:t.clientY}function p(t){const{scrollbar:n,rtlTranslate:r}=e,{$el:a}=n;let u;u=(m(t)-a.offset()[e.isHorizontal()?"left":"top"]-(null!==i?i:o/2))/(s-o),u=Math.max(Math.min(u,1),0),r&&(u=1-u);const l=e.minTranslate()+(e.maxTranslate()-e.minTranslate())*u;e.updateProgress(l),e.setTranslate(l),e.updateActiveIndex(),e.updateSlidesClasses()}function h(t){const n=e.params.scrollbar,{scrollbar:a,$wrapperEl:o}=e,{$el:s,$dragEl:u}=a;l=!0,i=t.target===u[0]||t.target===u?m(t)-t.target.getBoundingClientRect()[e.isHorizontal()?"left":"top"]:null,t.preventDefault(),t.stopPropagation(),o.transition(100),u.transition(100),p(t),clearTimeout(d),s.transition(0),n.hide&&s.css("opacity",1),e.params.cssMode&&e.$wrapperEl.css("scroll-snap-type","none"),r("scrollbarDragStart",t)}function g(t){const{scrollbar:n,$wrapperEl:a}=e,{$el:i,$dragEl:o}=n;l&&(t.preventDefault?t.preventDefault():t.returnValue=!1,p(t),a.transition(0),i.transition(0),o.transition(0),r("scrollbarDragMove",t))}function A(t){const n=e.params.scrollbar,{scrollbar:a,$wrapperEl:i}=e,{$el:o}=a;l&&(l=!1,e.params.cssMode&&(e.$wrapperEl.css("scroll-snap-type",""),i.transition("")),n.hide&&(clearTimeout(d),d=mf((()=>{o.css("opacity",0),o.transition(400)}),1e3)),r("scrollbarDragEnd",t),n.snapOnRelease&&e.slideToClosest())}function y(t){const{scrollbar:n,touchEventsTouch:r,touchEventsDesktop:i,params:o,support:s}=e,u=n.$el;if(!u)return;const l=u[0],c=!(!s.passiveListener||!o.passiveListeners)&&{passive:!1,capture:!1},d=!(!s.passiveListener||!o.passiveListeners)&&{passive:!0,capture:!1};if(!l)return;const f="on"===t?"addEventListener":"removeEventListener";s.touch?(l[f](r.start,h,c),l[f](r.move,g,c),l[f](r.end,A,d)):(l[f](i.start,h,c),a[f](i.move,g,c),a[f](i.end,A,d))}function S(){const{scrollbar:t,$el:n}=e;e.params.scrollbar=$f(e,e.originalParams.scrollbar,e.params.scrollbar,{el:"swiper-scrollbar"});const r=e.params.scrollbar;if(!r.el)return;let a=vf(r.el);e.params.uniqueNavElements&&"string"==typeof r.el&&a.length>1&&1===n.find(r.el).length&&(a=n.find(r.el)),a.addClass(e.isHorizontal()?r.horizontalClass:r.verticalClass);let i=a.find(`.${e.params.scrollbar.dragClass}`);0===i.length&&(i=vf(`
`),a.append(i)),Object.assign(t,{$el:a,el:a[0],$dragEl:i,dragEl:i[0]}),r.draggable&&e.params.scrollbar.el&&e.scrollbar.el&&y("on"),a&&a[e.enabled?"removeClass":"addClass"](e.params.scrollbar.lockClass)}function b(){const t=e.params.scrollbar,n=e.scrollbar.$el;n&&n.removeClass(e.isHorizontal()?t.horizontalClass:t.verticalClass),e.params.scrollbar.el&&e.scrollbar.el&&y("off")}t({scrollbar:{el:null,dragSize:"auto",hide:!1,draggable:!1,snapOnRelease:!0,lockClass:"swiper-scrollbar-lock",dragClass:"swiper-scrollbar-drag",scrollbarDisabledClass:"swiper-scrollbar-disabled",horizontalClass:"swiper-scrollbar-horizontal",verticalClass:"swiper-scrollbar-vertical"}}),e.scrollbar={el:null,dragEl:null,$el:null,$dragEl:null},n("init",(()=>{!1===e.params.scrollbar.enabled?w():(S(),v(),f())})),n("update resize observerUpdate lock unlock",(()=>{v()})),n("setTranslate",(()=>{f()})),n("setTransition",((t,n)=>{!function(t){e.params.scrollbar.el&&e.scrollbar.el&&e.scrollbar.$dragEl.transition(t)}(n)})),n("enable disable",(()=>{const{$el:t}=e.scrollbar;t&&t[e.enabled?"removeClass":"addClass"](e.params.scrollbar.lockClass)})),n("destroy",(()=>{b()}));const w=()=>{e.$el.addClass(e.params.scrollbar.scrollbarDisabledClass),e.scrollbar.$el&&e.scrollbar.$el.addClass(e.params.scrollbar.scrollbarDisabledClass),b()};Object.assign(e.scrollbar,{enable:()=>{e.$el.removeClass(e.params.scrollbar.scrollbarDisabledClass),e.scrollbar.$el&&e.scrollbar.$el.removeClass(e.params.scrollbar.scrollbarDisabledClass),S(),v(),f()},disable:w,updateSize:v,setTranslate:f,init:S,destroy:b})}function rv({swiper:e,extendParams:t,on:n}){function r(e,t){const n=function(){let e,t,n;return(r,a)=>{for(t=-1,e=r.length;e-t>1;)n=e+t>>1,r[n]<=a?t=n:e=n;return e}}();let r,a;return this.x=e,this.y=t,this.lastIndex=e.length-1,this.interpolate=function(e){return e?(a=n(this.x,e),r=a-1,(e-this.x[r])*(this.y[a]-this.y[r])/(this.x[a]-this.x[r])+this.y[r]):0},this}function a(){e.controller.control&&e.controller.spline&&(e.controller.spline=void 0,delete e.controller.spline)}t({controller:{control:void 0,inverse:!1,by:"slide"}}),e.controller={control:void 0},n("beforeInit",(()=>{e.controller.control=e.params.controller.control})),n("update",(()=>{a()})),n("resize",(()=>{a()})),n("observerUpdate",(()=>{a()})),n("setTranslate",((t,n,r)=>{e.controller.control&&e.controller.setTranslate(n,r)})),n("setTransition",((t,n,r)=>{e.controller.control&&e.controller.setTransition(n,r)})),Object.assign(e.controller,{setTranslate:function(t,n){const a=e.controller.control;let i,o;const s=e.constructor;function u(t){const n=e.rtlTranslate?-e.translate:e.translate;"slide"===e.params.controller.by&&(!function(t){e.controller.spline||(e.controller.spline=e.params.loop?new r(e.slidesGrid,t.slidesGrid):new r(e.snapGrid,t.snapGrid))}(t),o=-e.controller.spline.interpolate(-n)),o&&"container"!==e.params.controller.by||(i=(t.maxTranslate()-t.minTranslate())/(e.maxTranslate()-e.minTranslate()),o=(n-e.minTranslate())*i+t.minTranslate()),e.params.controller.inverse&&(o=t.maxTranslate()-o),t.updateProgress(o),t.setTranslate(o,e),t.updateActiveIndex(),t.updateSlidesClasses()}if(Array.isArray(a))for(let e=0;e{n.updateAutoHeight()})),n.$wrapperEl.transitionEnd((()=>{a&&(n.params.loop&&"slide"===e.params.controller.by&&n.loopFix(),n.transitionEnd())})))}if(Array.isArray(a))for(i=0;i{i(e),"BUTTON"!==e[0].tagName&&(s(e,"button"),e.on("keydown",f)),l(e,n),function(e,t){e.attr("aria-controls",t)}(e,t)},h=()=>{e.a11y.clicked=!0},g=()=>{e.a11y.clicked=!1},A=t=>{if(e.a11y.clicked)return;const n=t.target.closest(`.${e.params.slideClass}`);if(!n||!e.slides.includes(n))return;const r=e.slides.indexOf(n)===e.activeIndex,a=e.params.watchSlidesProgress&&e.visibleSlides&&e.visibleSlides.includes(n);r||a||(e.isHorizontal()?e.el.scrollLeft=0:e.el.scrollTop=0,e.slideTo(e.slides.indexOf(n),0))},y=()=>{const t=e.params.a11y;t.itemRoleDescriptionMessage&&u(vf(e.slides),t.itemRoleDescriptionMessage),t.slideRole&&s(vf(e.slides),t.slideRole);const n=e.params.loop?e.slides.filter((t=>!t.classList.contains(e.params.slideDuplicateClass))).length:e.slides.length;t.slideLabelMessage&&e.slides.each(((r,a)=>{const i=vf(r),o=e.params.loop?parseInt(i.attr("data-swiper-slide-index"),10):a;l(i,t.slideLabelMessage.replace(/\{\{index\}\}/,o+1).replace(/\{\{slidesLength\}\}/,n))}))},S=()=>{const t=e.params.a11y;e.$el.append(r);const n=e.$el;t.containerRoleDescriptionMessage&&u(n,t.containerRoleDescriptionMessage),t.containerMessage&&l(n,t.containerMessage);const a=e.$wrapperEl,i=t.id||a.attr("id")||`swiper-wrapper-${function(e=16){return"x".repeat(e).replace(/x/g,(()=>Math.round(16*Math.random()).toString(16)))}(16)}`,o=e.params.autoplay&&e.params.autoplay.enabled?"off":"polite";let s,c;!function(e,t){e.attr("id",t)}(a,i),function(e,t){e.attr("aria-live",t)}(a,o),y(),e.navigation&&e.navigation.$nextEl&&(s=e.navigation.$nextEl),e.navigation&&e.navigation.$prevEl&&(c=e.navigation.$prevEl),s&&s.length&&p(s,i,t.nextSlideMessage),c&&c.length&&p(c,i,t.prevSlideMessage),m()&&e.pagination.$el.on("keydown",ev(e.params.pagination.bulletClass),f),e.$el.on("focus",A,!0),e.$el.on("pointerdown",h,!0),e.$el.on("pointerup",g,!0)};n("beforeInit",(()=>{r=vf(``)})),n("afterInit",(()=>{e.params.a11y.enabled&&S()})),n("slidesLengthChange snapGridLengthChange slidesGridLengthChange",(()=>{e.params.a11y.enabled&&y()})),n("fromEdge toEdge afterInit lock unlock",(()=>{e.params.a11y.enabled&&function(){if(e.params.loop||e.params.rewind||!e.navigation)return;const{$nextEl:t,$prevEl:n}=e.navigation;n&&n.length>0&&(e.isBeginning?(c(n),o(n)):(d(n),i(n))),t&&t.length>0&&(e.isEnd?(c(t),o(t)):(d(t),i(t)))}()})),n("paginationUpdate",(()=>{e.params.a11y.enabled&&function(){const t=e.params.a11y;v()&&e.pagination.bullets.each((n=>{const r=vf(n);e.params.pagination.clickable&&(i(r),e.params.pagination.renderBullet||(s(r,"button"),l(r,t.paginationBulletMessage.replace(/\{\{index\}\}/,r.index()+1)))),r.is(`.${e.params.pagination.bulletActiveClass}`)?r.attr("aria-current","true"):r.removeAttr("aria-current")}))}()})),n("destroy",(()=>{e.params.a11y.enabled&&function(){let t,n;r&&r.length>0&&r.remove(),e.navigation&&e.navigation.$nextEl&&(t=e.navigation.$nextEl),e.navigation&&e.navigation.$prevEl&&(n=e.navigation.$prevEl),t&&t.off("keydown",f),n&&n.off("keydown",f),m()&&e.pagination.$el.off("keydown",ev(e.params.pagination.bulletClass),f),e.$el.off("focus",A,!0),e.$el.off("pointerdown",h,!0),e.$el.off("pointerup",g,!0)}()}))}function iv(e){return"object"==typeof e&&null!==e&&e.constructor&&"Object"===Object.prototype.toString.call(e).slice(8,-1)}function ov(e,t){const n=["__proto__","constructor","prototype"];Object.keys(t).filter((e=>n.indexOf(e)<0)).forEach((n=>{void 0===e[n]?e[n]=t[n]:iv(t[n])&&iv(e[n])&&Object.keys(t[n]).length>0?t[n].__swiper__?e[n]=t[n]:ov(e[n],t[n]):e[n]=t[n]}))}function sv(e={}){return e.navigation&&void 0===e.navigation.nextEl&&void 0===e.navigation.prevEl}function uv(e={}){return e.pagination&&void 0===e.pagination.el}function lv(e={}){return e.scrollbar&&void 0===e.scrollbar.el}function cv(e=""){const t=e.split(" ").map((e=>e.trim())).filter((e=>!!e)),n=[];return t.forEach((e=>{n.indexOf(e)<0&&n.push(e)})),n.join(" ")}const dv=["modules","init","_direction","touchEventsTarget","initialSlide","_speed","cssMode","updateOnWindowResize","resizeObserver","nested","focusableElements","_enabled","_width","_height","preventInteractionOnTransition","userAgent","url","_edgeSwipeDetection","_edgeSwipeThreshold","_freeMode","_autoHeight","setWrapperSize","virtualTranslate","_effect","breakpoints","_spaceBetween","_slidesPerView","maxBackfaceHiddenSlides","_grid","_slidesPerGroup","_slidesPerGroupSkip","_slidesPerGroupAuto","_centeredSlides","_centeredSlidesBounds","_slidesOffsetBefore","_slidesOffsetAfter","normalizeSlideIndex","_centerInsufficientSlides","_watchOverflow","roundLengths","touchRatio","touchAngle","simulateTouch","_shortSwipes","_longSwipes","longSwipesRatio","longSwipesMs","_followFinger","allowTouchMove","_threshold","touchMoveStopPropagation","touchStartPreventDefault","touchStartForcePreventDefault","touchReleaseOnEdges","uniqueNavElements","_resistance","_resistanceRatio","_watchSlidesProgress","_grabCursor","preventClicks","preventClicksPropagation","_slideToClickedSlide","_preloadImages","updateOnImagesReady","_loop","_loopAdditionalSlides","_loopedSlides","_loopedSlidesLimit","_loopFillGroupWithBlank","loopPreventsSlide","_rewind","_allowSlidePrev","_allowSlideNext","_swipeHandler","_noSwiping","noSwipingClass","noSwipingSelector","passiveListeners","containerModifierClass","slideClass","slideBlankClass","slideActiveClass","slideDuplicateActiveClass","slideVisibleClass","slideDuplicateClass","slideNextClass","slideDuplicateNextClass","slidePrevClass","slideDuplicatePrevClass","wrapperClass","runCallbacksOnInit","observer","observeParents","observeSlideChildren","a11y","_autoplay","_controller","coverflowEffect","cubeEffect","fadeEffect","flipEffect","creativeEffect","cardsEffect","hashNavigation","history","keyboard","lazy","mousewheel","_navigation","_pagination","parallax","_scrollbar","_thumbs","virtual","zoom"];const fv=(e,t)=>{let n=t.slidesPerView;if(t.breakpoints){const e=Xf.prototype.getBreakpoint(t.breakpoints),r=e in t.breakpoints?t.breakpoints[e]:void 0;r&&r.slidesPerView&&(n=r.slidesPerView)}let r=Math.ceil(parseFloat(t.loopedSlides||n,10));return r+=t.loopAdditionalSlides,r>e.length&&t.loopedSlidesLimit&&(r=e.length),r};function vv(e){return e.type&&e.type.displayName&&e.type.displayName.includes("SwiperSlide")}function mv(e){const t=[];return l.Children.toArray(e).forEach((e=>{vv(e)?t.push(e):e.props&&e.props.children&&mv(e.props.children).forEach((e=>t.push(e)))})),t}function pv(e){const t=[],n={"container-start":[],"container-end":[],"wrapper-start":[],"wrapper-end":[]};return l.Children.toArray(e).forEach((e=>{if(vv(e))t.push(e);else if(e.props&&e.props.slot&&n[e.props.slot])n[e.props.slot].push(e);else if(e.props&&e.props.children){const r=mv(e.props.children);r.length>0?r.forEach((e=>t.push(e))):n["container-end"].push(e)}else n["container-end"].push(e)})),{slides:t,slots:n}}function hv({swiper:e,slides:t,passedParams:n,changedParams:r,nextEl:a,prevEl:i,scrollbarEl:o,paginationEl:s}){const u=r.filter((e=>"children"!==e&&"direction"!==e)),{params:l,pagination:c,navigation:d,scrollbar:f,virtual:v,thumbs:m}=e;let p,h,g,A,y;r.includes("thumbs")&&n.thumbs&&n.thumbs.swiper&&l.thumbs&&!l.thumbs.swiper&&(p=!0),r.includes("controller")&&n.controller&&n.controller.control&&l.controller&&!l.controller.control&&(h=!0),r.includes("pagination")&&n.pagination&&(n.pagination.el||s)&&(l.pagination||!1===l.pagination)&&c&&!c.el&&(g=!0),r.includes("scrollbar")&&n.scrollbar&&(n.scrollbar.el||o)&&(l.scrollbar||!1===l.scrollbar)&&f&&!f.el&&(A=!0),r.includes("navigation")&&n.navigation&&(n.navigation.prevEl||i)&&(n.navigation.nextEl||a)&&(l.navigation||!1===l.navigation)&&d&&!d.prevEl&&!d.nextEl&&(y=!0);if(u.forEach((t=>{if(iv(l[t])&&iv(n[t]))ov(l[t],n[t]);else{const a=n[t];!0!==a&&!1!==a||"navigation"!==t&&"pagination"!==t&&"scrollbar"!==t?l[t]=n[t]:!1===a&&e[r=t]&&(e[r].destroy(),"navigation"===r?(l[r].prevEl=void 0,l[r].nextEl=void 0,e[r].prevEl=void 0,e[r].nextEl=void 0):(l[r].el=void 0,e[r].el=void 0))}var r})),u.includes("controller")&&!h&&e.controller&&e.controller.control&&l.controller&&l.controller.control&&(e.controller.control=l.controller.control),r.includes("children")&&t&&v&&l.virtual.enabled?(v.slides=t,v.update(!0)):r.includes("children")&&e.lazy&&e.params.lazy.enabled&&e.lazy.load(),p){m.init()&&m.update(!0)}h&&(e.controller.control=l.controller.control),g&&(s&&(l.pagination.el=s),c.init(),c.render(),c.update()),A&&(o&&(l.scrollbar.el=o),f.init(),f.updateSize(),f.setTranslate()),y&&(a&&(l.navigation.nextEl=a),i&&(l.navigation.prevEl=i),d.init(),d.update()),r.includes("allowSlideNext")&&(e.allowSlideNext=n.allowSlideNext),r.includes("allowSlidePrev")&&(e.allowSlidePrev=n.allowSlidePrev),r.includes("direction")&&e.changeDirection(n.direction,!1),e.update()}function gv(e,t){return"undefined"==typeof window?(0,l.useEffect)(e,t):(0,l.useLayoutEffect)(e,t)}const Av=(0,l.createContext)(null),yv=(0,l.createContext)(null);function Sv(){return Sv=Object.assign?Object.assign.bind():function(e){for(var t=1;te.replace(/_/,""))),s=Object.assign({},e);return Object.keys(s).forEach((s=>{void 0!==e[s]&&(o.indexOf(s)>=0?iv(e[s])?(n[s]={},a[s]={},ov(n[s],e[s]),ov(a[s],e[s])):(n[s]=e[s],a[s]=e[s]):0===s.search(/on[A-Z]/)&&"function"==typeof e[s]?t?r[`${s[2].toLowerCase()}${s.substr(3)}`]=e[s]:n.on[`${s[2].toLowerCase()}${s.substr(3)}`]=e[s]:i[s]=e[s])})),["navigation","pagination","scrollbar"].forEach((e=>{!0===n[e]&&(n[e]={}),!1===n[e]&&delete n[e]})),{params:n,passedParams:a,rest:i,events:r}}(s),{slides:O,slots:P}=pv(i),T=()=>{p(!m)};Object.assign(C.on,{_containerClasses(e,t){d(t)}});const x=()=>{if(Object.assign(C.on,M),u=!0,A.current=new Xf(C),A.current.loopCreate=()=>{},A.current.loopDestroy=()=>{},C.loop&&(A.current.loopedSlides=fv(O,C)),A.current.virtual&&A.current.params.virtual.enabled){A.current.virtual.slides=O;const e={cache:!1,slides:O,renderExternal:v,renderExternalUpdate:!1};ov(A.current.params.virtual,e),ov(A.current.originalParams.virtual,e)}};g.current||x(),A.current&&A.current.on("_beforeBreakpoint",T);return(0,l.useEffect)((()=>()=>{A.current&&A.current.off("_beforeBreakpoint",T)})),(0,l.useEffect)((()=>{!h.current&&A.current&&(A.current.emitSlidesClasses(),h.current=!0)})),gv((()=>{if(t&&(t.current=g.current),g.current)return A.current.destroyed&&x(),function({el:e,nextEl:t,prevEl:n,paginationEl:r,scrollbarEl:a,swiper:i},o){sv(o)&&t&&n&&(i.params.navigation.nextEl=t,i.originalParams.navigation.nextEl=t,i.params.navigation.prevEl=n,i.originalParams.navigation.prevEl=n),uv(o)&&r&&(i.params.pagination.el=r,i.originalParams.pagination.el=r),lv(o)&&a&&(i.params.scrollbar.el=a,i.originalParams.scrollbar.el=a),i.init(e)}({el:g.current,nextEl:b.current,prevEl:w.current,paginationEl:I.current,scrollbarEl:E.current,swiper:A.current},C),o&&o(A.current),()=>{A.current&&!A.current.destroyed&&A.current.destroy(!0,!1)}}),[]),gv((()=>{!u&&M&&A.current&&Object.keys(M).forEach((e=>{A.current.on(e,M[e])}));const e=function(e,t,n,r,a){const i=[];if(!t)return i;const o=e=>{i.indexOf(e)<0&&i.push(e)};if(n&&r){const e=r.map(a),t=n.map(a);e.join("")!==t.join("")&&o("children"),r.length!==n.length&&o("children")}return dv.filter((e=>"_"===e[0])).map((e=>e.replace(/_/,""))).forEach((n=>{if(n in e&&n in t)if(iv(e[n])&&iv(t[n])){const r=Object.keys(e[n]),a=Object.keys(t[n]);r.length!==a.length?o(n):(r.forEach((r=>{e[n][r]!==t[n][r]&&o(n)})),a.forEach((r=>{e[n][r]!==t[n][r]&&o(n)})))}else e[n]!==t[n]&&o(n)})),i}(D,y.current,O,S.current,(e=>e.key));return y.current=D,S.current=O,e.length&&A.current&&!A.current.destroyed&&hv({swiper:A.current,slides:O,passedParams:D,changedParams:e,nextEl:b.current,prevEl:w.current,scrollbarEl:E.current,paginationEl:I.current}),()=>{M&&A.current&&Object.keys(M).forEach((e=>{A.current.off(e,M[e])}))}})),gv((()=>{var e;!(e=A.current)||e.destroyed||!e.params.virtual||e.params.virtual&&!e.params.virtual.enabled||(e.updateSlides(),e.updateProgress(),e.updateSlidesClasses(),e.lazy&&e.params.lazy.enabled&&e.lazy.load(),e.parallax&&e.params.parallax&&e.params.parallax.enabled&&e.parallax.setTranslate())}),[f]),l.createElement(r,Sv({ref:g,className:cv(`${c}${n?` ${n}`:""}`)},_),l.createElement(yv.Provider,{value:A.current},P["container-start"],l.createElement(a,{className:"swiper-wrapper"},P["wrapper-start"],C.virtual?function(e,t,n){if(!n)return null;const r=e.isHorizontal()?{[e.rtlTranslate?"right":"left"]:`${n.offset}px`}:{top:`${n.offset}px`};return t.filter(((e,t)=>t>=n.from&&t<=n.to)).map((t=>l.cloneElement(t,{swiper:e,style:r})))}(A.current,O,f):!C.loop||A.current&&A.current.destroyed?O.map((e=>l.cloneElement(e,{swiper:A.current}))):function(e,t,n){const r=t.map(((t,n)=>l.cloneElement(t,{swiper:e,"data-swiper-slide-index":n})));function a(e,t,r){return l.cloneElement(e,{key:`${e.key}-duplicate-${t}-${r}`,className:`${e.props.className||""} ${n.slideDuplicateClass}`})}if(n.loopFillGroupWithBlank){const e=n.slidesPerGroup-r.length%n.slidesPerGroup;if(e!==n.slidesPerGroup)for(let t=0;t{if(t&&(t.current=c.current),c.current&&i){if(!i.destroyed)return i.on("_slideClass",v),()=>{i&&i.off("_slideClass",v)};"swiper-slide"!==d&&f("swiper-slide")}})),gv((()=>{i&&c.current&&!i.destroyed&&f(i.getSlideClasses(c.current))}),[i]);const m={isActive:d.indexOf("swiper-slide-active")>=0||d.indexOf("swiper-slide-duplicate-active")>=0,isVisible:d.indexOf("swiper-slide-visible")>=0,isDuplicate:d.indexOf("swiper-slide-duplicate")>=0,isPrev:d.indexOf("swiper-slide-prev")>=0||d.indexOf("swiper-slide-duplicate-prev")>=0,isNext:d.indexOf("swiper-slide-next")>=0||d.indexOf("swiper-slide-duplicate-next")>=0},p=()=>"function"==typeof r?r(m):r;return l.createElement(n,wv({ref:c,className:cv(`${d}${a?` ${a}`:""}`),"data-swiper-slide-index":s},u),l.createElement(Av.Provider,{value:m},o?l.createElement("div",{className:"swiper-zoom-container","data-swiper-zoom":"number"==typeof o?o:void 0},p()):p()))}));function Ev(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Cv(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&function(e,t,n,r,a,i,o,s){return l.createElement("div",{className:"collapse-sidebar relative",style:{backgroundColor:"#06081f"}},l.createElement("div",{className:"w-full"},l.createElement(bv,{onInit:function(t){e.current=t.el},simulateTouch:!1,modules:[Jf,tv,nv,av,rv],slidesPerView:3,spaceBetween:5,onSwiper:function(e){return t(e)},navigation:{prevEl:null==n?void 0:n.current,nextEl:null==r?void 0:r.current}},a.map((function(e,t){return l.createElement(Iv,{key:t},l.createElement("div",{className:v()(t===i?"bg-secondary-main text-white":"text-aqua-pale","flex cursor-pointer px-4 py-1 rounded-[4px] flex-col justify-center items-center text-center hover:text-white"),key:t,onClick:function(){o(t),s(!0)},"data-cy":"".concat(e.name,"-btn")},l.createElement("span",null,l.createElement(wa,{name:e.iconName,className:v()(t===i?"text-white":"text-primary-active"),style:{width:"22px",height:"22px"}})),l.createElement("span",{className:"text-[10px] select-none font-medium whitespace-nowrap mt-[5px]"},e.label)))})))))}(f,h,g,A,a,c,d,s),a.length>3&&l.createElement("div",{className:"text-primary-active w-full flex justify-end gap-2 bg-primary-dark py-1 px-2"},l.createElement("button",{ref:g,className:"swiper-button-prev-custom"},l.createElement(wa,{name:"icon-prev",className:v()("text-primary-active")})),l.createElement("button",{ref:A,className:"swiper-button-next-custom"},l.createElement(wa,{name:"icon-next",className:v()("text-primary-active")}))),l.createElement(b,null)):l.createElement(l.Fragment,null,(w=Array.isArray(a)?a:[a],l.createElement(l.Fragment,null,l.createElement("div",{className:v()("bg-secondary-dark h-[28px] flex items-center w-full rounded-md cursor-pointer","left"===t?"pr-2 justify-end":"pl-2 justify-start"),onClick:function(){s((function(e){return!e}))},"data-cy":"side-panel-header-".concat(t)},l.createElement(wa,{name:"navigation-panel-right-reveal",className:v()("text-primary-active","left"===t&&"transform rotate-180")})),l.createElement("div",{className:v()("flex flex-col space-y-3 mt-3")},w.map((function(e,n){return l.createElement(fh,{position:"left"===t?"right":"left",key:n,content:"".concat(e.label),className:v()("flex items-center","left"===t?"justify-end ":"justify-start ")},l.createElement(nu,{id:"".concat(e.name,"-btn"),variant:"text",color:"inherit",size:"initial",className:"text-primary-active",onClick:function(){d(n),s(!0)}},l.createElement(wa,{name:e.iconName,className:"text-primary-active",style:{width:"22px",height:"22px"}})))})))))))};Lv.defaultProps={defaultComponentOpen:null},Lv.propTypes={side:i().oneOf(["left","right"]).isRequired,className:i().string,activeTabIndex:i().number,tabs:i().oneOfType([i().arrayOf(i().shape({iconName:i().string.isRequired,iconLabel:i().string.isRequired,name:i().string.isRequired,label:i().string.isRequired,content:i().func}))])};var kv=Lv,Nv=n(25920);function Fv(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,a,i=[],o=!0,s=!1;try{for(n=n.call(e);!(o=(r=n.next()).done)&&(i.push(r.value),!t||i.length!==t);o=!0);}catch(e){s=!0,a=e}finally{try{o||null==n.return||n.return()}finally{if(s)throw a}}return i}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Bv(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Bv(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Bv(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&o<=100;return l.createElement(l.Fragment,null,l.createElement("div",null,l.createElement("div",{className:"bg-primary-dark"},l.createElement("div",{className:"container relative flex flex-col pt-5 m-auto"},l.createElement("div",{className:"flex flex-row justify-between px-12 mb-5"},l.createElement("div",{className:"flex flex-row"},l.createElement(Rh,{variant:"h4",className:"mr-6 text-primary-light"},s("Study list"))),l.createElement("div",{className:"flex flex-row"},i&&l.createElement(Bo,{rounded:"full",variant:"outlined",color:"primaryActive",border:"primaryActive",className:"mx-8",startIcon:l.createElement(wa,{name:"cancel"}),onClick:a},s("Clear filters")),l.createElement(Rh,{variant:"h4",className:"mr-2","data-cy":"num-studies"},o>100?">100":o),l.createElement(Rh,{variant:"h6",className:"self-end pb-1 text-common-light"},s("Studies"))))))),l.createElement("div",{className:"sticky z-10 border-b-4 border-black",style:{top:"52px"}},l.createElement("div",{className:"pt-3 pb-3 bg-primary-dark "},l.createElement(bu,{inputMeta:t,values:n,onValuesChange:r,sorting:u,onSortingChange:function(e){r(mm(mm({},n),e))},isSortingEnabled:c})),o>100&&l.createElement("div",{className:"container m-auto"},l.createElement("div",{className:"py-1 text-base text-center rounded-b bg-primary-main"},l.createElement("p",{className:"text-white"},s("Filter list to 100 studies or less to enable sorting"))))))};hm.propTypes={filtersMeta:i().arrayOf(i().shape({name:i().string.isRequired,displayName:i().string.isRequired,inputType:i().oneOf(["Text","MultiSelect","DateRange","None"]).isRequired,isSortable:i().bool.isRequired,gridCol:i().oneOf([1,2,3,4,5,6,7,8,9,10,11,12]).isRequired,option:i().arrayOf(i().shape({value:i().string,label:i().string}))})).isRequired,filterValues:i().object.isRequired,numOfStudies:i().number.isRequired,onChange:i().func.isRequired,clearFilters:i().func.isRequired,isFiltering:i().bool.isRequired};var gm=hm;function Am(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,a,i=[],o=!0,s=!1;try{for(n=n.call(e);!(o=(r=n.next()).done)&&(i.push(r.value),!t||i.length!==t);o=!0);}catch(e){s=!0,a=e}finally{try{o||null==n.return||n.return()}finally{if(s)throw a}}return i}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return ym(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ym(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ym(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n"))))))))};Sm.propTypes={onChangePage:i().func.isRequired,currentPage:i().number.isRequired,perPage:i().number.isRequired,onChangePerPage:i().func.isRequired};var bm=Sm,wm=function(e){var t=e.tableData,n=t.row,r=t.expandedContent,a=t.onClickRow,i=t.isExpanded;return l.createElement(l.Fragment,null,l.createElement("tr",{className:"select-none"},l.createElement("td",{className:v()("border-0 p-0",{"border-b border-secondary-light bg-primary-dark":i})},l.createElement("div",{className:v()("w-full transition duration-300",{"border border-primary-light rounded overflow-hidden mb-2 hover:border-secondary-light":i},{"border-transparent":!i})},l.createElement("table",{className:v()("w-full p-4")},l.createElement("tbody",null,l.createElement("tr",{className:v()("cursor-pointer hover:bg-secondary-main transition duration-300",{"bg-primary-dark":!i},{"bg-secondary-dark":i}),onClick:a},n.map((function(e,t){var n=e.content,r=e.title,a=e.gridCol;return l.createElement("td",{key:t,className:v()("px-4 py-2 text-base truncate",{"border-b border-secondary-light":!i},hu(a)||""),style:{maxWidth:0},title:r},l.createElement("div",{className:"flex"},0===t&&l.createElement("div",null,l.createElement(wa,{name:i?"chevron-down":"chevron-right",className:"mr-4 inline-flex"})),l.createElement("div",{className:v()({"overflow-hidden":!0},{truncate:!0})},n)))}))),i&&l.createElement("tr",{className:"w-full bg-black select-text max-h-0 overflow-hidden"},l.createElement("td",{colSpan:n.length},r))))))))};wm.propTypes={tableData:i().shape({row:i().arrayOf(i().shape({key:i().string.isRequired,content:i().node,title:i().string,gridCol:i().number.isRequired})).isRequired,expandedContent:i().node.isRequired,onClickRow:i().func.isRequired,isExpanded:i().bool.isRequired})};var Im=wm,Em=function(e){var t=e.tableDataSource;return l.createElement("div",{className:"bg-black"},l.createElement("div",{className:"container m-auto relative"},l.createElement("table",{className:"w-full text-white"},l.createElement("tbody",{"data-cy":"study-list-results"},t.map((function(e,t){return l.createElement(Im,{tableData:e,key:t})}))))))};Em.propTypes={tableDataSource:i().arrayOf(i().shape({row:i().array.isRequired,expandedContent:i().node.isRequired,onClickRow:i().func.isRequired,isExpanded:i().bool.isRequired}))};var Cm=Em,Dm=function(e){var t=e.date,n=e.modality,r=e.description;return l.createElement("div",{className:"p-2"},l.createElement("div",{className:"leading-none"},l.createElement("span",{className:"mr-2 text-base text-white"},t),l.createElement("span",{className:"px-1 text-base font-bold text-black rounded-sm bg-common-bright"},n)),l.createElement("div",{className:"pt-2 text-base leading-none truncate text-primary-light ellipse"},r||""))};Dm.propTypes={date:i().string.isRequired,modality:i().string.isRequired,description:i().string};var _m=Dm,Mm=function(e){return l.createElement("svg",e,l.createElement("title",null,"Open Health Imaging Foundation"),l.createElement("g",{fill:"#FFF",fillRule:"nonzero"},l.createElement("path",{d:"M37.709 17.613c2.593 0 4.473-2 4.473-5.206 0-3.206-1.88-5.205-4.473-5.205s-4.474 1.999-4.474 5.205c0 3.207 1.88 5.206 4.474 5.206zm0-1.148c-1.841 0-3.286-1.425-3.286-4.058 0-2.632 1.445-4.057 3.286-4.057 1.84 0 3.285 1.425 3.285 4.057 0 2.633-1.445 4.058-3.285 4.058zm7.54 3.86v-4.019h.1c.257.416.752 1.327 2.217 1.327 1.9 0 3.226-1.524 3.226-3.94 0-2.394-1.326-3.918-3.246-3.918-1.485 0-1.94.91-2.197 1.306h-.139V9.874h-1.128v10.45h1.168zm2.158-3.741c-1.405 0-2.177-1.188-2.177-2.91 0-1.702.752-2.85 2.177-2.85 1.485 0 2.217 1.247 2.217 2.85 0 1.623-.752 2.91-2.217 2.91zm8.353 1.049c1.544 0 2.672-.772 3.028-1.92l-1.128-.317c-.297.792-.985 1.188-1.9 1.188-1.37 0-2.316-.886-2.37-2.514h5.517v-.495c0-2.83-1.682-3.8-3.266-3.8-2.058 0-3.424 1.623-3.424 3.958 0 2.336 1.346 3.9 3.543 3.9zm1.96-4.573h-4.33c.079-1.182.915-2.236 2.251-2.236 1.267 0 2.079.95 2.079 2.236zm4.136 4.414v-4.572c0-1.326.822-2.078 1.94-2.078 1.084 0 1.742.707 1.742 1.9v4.75h1.168v-4.83c0-1.939-1.034-2.87-2.573-2.87-1.148 0-1.861.515-2.217 1.287h-.1V9.874H60.69v7.6h1.167zm12.292 0v-4.532h5.404v4.532h1.227V7.34h-1.227v4.513h-5.404V7.34h-1.227v10.134h1.227zm12.113.159c1.544 0 2.673-.772 3.029-1.92l-1.128-.317c-.297.792-.985 1.188-1.9 1.188-1.371 0-2.316-.886-2.37-2.514h5.517v-.495c0-2.83-1.683-3.8-3.266-3.8-2.059 0-3.425 1.623-3.425 3.958 0 2.336 1.346 3.9 3.543 3.9zm1.96-4.573h-4.33c.08-1.182.916-2.236 2.252-2.236 1.266 0 2.078.95 2.078 2.236zm5.206 4.592c1.326 0 2.019-.712 2.256-1.207h.06v1.03h1.167v-5.008c0-2.415-1.84-2.692-2.81-2.692-1.148 0-2.455.396-3.049 1.781l1.109.396c.257-.554.866-1.148 1.98-1.148 1.073 0 1.602.569 1.602 1.544v.04c0 .563-.574.514-1.96.692-1.41.183-2.948.495-2.948 2.237 0 1.484 1.148 2.335 2.593 2.335zm.178-1.049c-.93 0-1.604-.415-1.604-1.227 0-.89.812-1.168 1.722-1.286.495-.06 1.821-.198 2.02-.436v1.069c0 .95-.753 1.88-2.138 1.88zm6.61.871V7.34h-1.167v10.134h1.168zm4.711.1c.436 0 .713-.08.871-.14l-.237-1.048c-.1.02-.257.059-.515.059-.514 0-1.01-.158-1.01-1.148v-4.434h1.624v-.99h-1.623v-1.82h-1.168v1.82h-1.148v.99h1.148v4.75c0 1.327 1.069 1.96 2.058 1.96zm3.662-.1v-4.572c0-1.326.846-2.078 2-2.078 1.098 0 1.76.692 1.76 1.9v4.75h1.169v-4.83c0-1.954-1.04-2.87-2.593-2.87-1.198 0-1.88.5-2.237 1.287h-.099v-3.72h-1.168v10.133h1.168zm12.371 0V7.34h-1.227v10.134h1.227zm3.464 0v-4.75c0-1.113.811-1.9 1.722-1.9.886 0 1.504.579 1.504 1.445v5.205h1.188v-4.948c0-.98.613-1.702 1.682-1.702.831 0 1.544.44 1.544 1.563v5.087h1.168v-5.087c0-1.786-.96-2.612-2.316-2.612-1.089 0-1.885.5-2.276 1.286h-.08c-.375-.811-1.039-1.286-2.038-1.286-.99 0-1.722.475-2.039 1.286h-.099V9.874h-1.128v7.6h1.168zm13.182.178c1.326 0 2.019-.712 2.257-1.207h.059v1.03h1.168v-5.008c0-2.415-1.841-2.692-2.81-2.692-1.149 0-2.455.396-3.05 1.781l1.11.396c.257-.554.865-1.148 1.979-1.148 1.073 0 1.603.569 1.603 1.544v.04c0 .563-.574.514-1.96.692-1.41.183-2.949.495-2.949 2.237 0 1.484 1.148 2.335 2.593 2.335zm.178-1.049c-.93 0-1.603-.415-1.603-1.227 0-.89.812-1.168 1.722-1.286.495-.06 1.821-.198 2.019-.436v1.069c0 .95-.752 1.88-2.138 1.88zm8.511 3.88c1.821 0 3.286-.831 3.286-2.791V9.874h-1.128v1.207h-.119c-.257-.396-.732-1.306-2.217-1.306-1.92 0-3.246 1.524-3.246 3.86 0 2.375 1.386 3.72 3.226 3.72 1.485 0 1.96-.87 2.217-1.286h.1v1.544c0 1.267-.891 1.84-2.119 1.84-1.38 0-1.865-.727-2.177-1.147l-.93.653c.475.796 1.41 1.524 3.107 1.524zm-.04-4.177c-1.464 0-2.216-1.108-2.216-2.691 0-1.544.732-2.791 2.217-2.791 1.425 0 2.177 1.148 2.177 2.79 0 1.683-.772 2.692-2.177 2.692zm6.058-7.7c.455 0 .83-.355.83-.79 0-.436-.375-.793-.83-.793-.456 0-.832.357-.832.792 0 .436.376.792.832.792zm.574 8.868v-7.6h-1.168v7.6h1.168zm3.305 0v-4.572c0-1.326.821-2.078 1.94-2.078 1.083 0 1.742.707 1.742 1.9v4.75h1.167v-4.83c0-1.939-1.034-2.87-2.573-2.87-1.148 0-1.86.515-2.217 1.287h-.099V9.874h-1.128v7.6h1.168zm10.055 3.009c1.82 0 3.286-.831 3.286-2.791V9.874h-1.129v1.207h-.118c-.258-.396-.733-1.306-2.217-1.306-1.92 0-3.246 1.524-3.246 3.86 0 2.375 1.385 3.72 3.226 3.72 1.485 0 1.96-.87 2.217-1.286h.099v1.544c0 1.267-.89 1.84-2.118 1.84-1.38 0-1.866-.727-2.177-1.147l-.93.653c.474.796 1.41 1.524 3.107 1.524zm-.04-4.177c-1.464 0-2.216-1.108-2.216-2.691 0-1.544.732-2.791 2.216-2.791 1.425 0 2.178 1.148 2.178 2.79 0 1.683-.772 2.692-2.178 2.692zm10.768 1.168v-4.532h4.394v-1.089h-4.394V8.429h4.85V7.34h-6.077v10.134h1.227zm9.877.159c2.058 0 3.444-1.564 3.444-3.92 0-2.375-1.386-3.938-3.444-3.938-2.059 0-3.444 1.563-3.444 3.939 0 2.355 1.385 3.919 3.444 3.919zm0-1.05c-1.564 0-2.276-1.345-2.276-2.87 0-1.524.712-2.89 2.276-2.89 1.563 0 2.276 1.366 2.276 2.89 0 1.525-.713 2.87-2.276 2.87zm7.68.99c1.148 0 1.9-.613 2.256-1.385h.08v1.286h1.167v-7.6h-1.168v4.493c0 1.425-1.089 2.078-1.96 2.078-.97 0-1.662-.713-1.662-1.821v-4.75h-1.168v4.83c0 1.939 1.03 2.87 2.455 2.87zm6.808-.099v-4.572c0-1.326.822-2.078 1.94-2.078 1.084 0 1.742.707 1.742 1.9v4.75h1.168v-4.83c0-1.939-1.034-2.87-2.573-2.87-1.148 0-1.86.515-2.217 1.287h-.1V9.874h-1.127v7.6h1.167zm9.857.159c1.465 0 1.96-.91 2.217-1.327h.139v1.168h1.128V7.34h-1.168v3.741h-.099c-.257-.396-.712-1.306-2.197-1.306-1.92 0-3.246 1.524-3.246 3.919 0 2.415 1.326 3.939 3.226 3.939zm.159-1.05c-1.465 0-2.217-1.286-2.217-2.91 0-1.602.732-2.85 2.217-2.85 1.425 0 2.177 1.149 2.177 2.85 0 1.723-.772 2.91-2.177 2.91zm7.858 1.07c1.326 0 2.019-.713 2.256-1.208h.06v1.03h1.167v-5.008c0-2.415-1.84-2.692-2.81-2.692-1.148 0-2.455.396-3.048 1.781l1.108.396c.257-.554.866-1.148 1.98-1.148 1.073 0 1.603.569 1.603 1.544v.04c0 .563-.574.514-1.96.692-1.41.183-2.95.495-2.95 2.237 0 1.484 1.149 2.335 2.594 2.335zm.178-1.05c-.93 0-1.603-.415-1.603-1.227 0-.89.811-1.168 1.722-1.286.494-.06 1.82-.198 2.019-.436v1.069c0 .95-.753 1.88-2.138 1.88zm8.016.97c.436 0 .713-.079.871-.138l-.238-1.05c-.098.02-.257.06-.514.06-.515 0-1.01-.158-1.01-1.148v-4.434h1.623v-.99h-1.623v-1.82h-1.167v1.82H224.2v.99h1.148v4.75c0 1.327 1.068 1.96 2.058 1.96zm3.088-8.966c.455 0 .831-.356.831-.792 0-.435-.376-.792-.831-.792-.455 0-.831.357-.831.792 0 .436.376.792.83.792zm.574 8.867v-7.6H229.9v7.6h1.168zm5.225.159c2.059 0 3.444-1.564 3.444-3.92 0-2.375-1.385-3.938-3.444-3.938-2.058 0-3.444 1.563-3.444 3.939 0 2.355 1.386 3.919 3.444 3.919zm0-1.05c-1.563 0-2.276-1.345-2.276-2.87 0-1.524.713-2.89 2.276-2.89 1.564 0 2.277 1.366 2.277 2.89 0 1.525-.713 2.87-2.277 2.87zm6.394.891v-4.572c0-1.326.82-2.078 1.94-2.078 1.083 0 1.741.707 1.741 1.9v4.75h1.168v-4.83c0-1.939-1.034-2.87-2.573-2.87-1.148 0-1.86.515-2.217 1.287h-.1V9.874h-1.127v7.6h1.168zM22.23 0h-4.995a2.77 2.77 0 0 0-2.769 2.77v4.995a2.77 2.77 0 0 0 2.77 2.769h4.995A2.77 2.77 0 0 0 25 7.764V2.77A2.77 2.77 0 0 0 22.23 0zm-4.995 1.108h4.996c.917 0 1.661.744 1.661 1.661v4.996c0 .917-.744 1.661-1.661 1.661h-4.996a1.662 1.662 0 0 1-1.661-1.661V2.769c0-.917.744-1.661 1.661-1.661zM8.765 0H3.769A2.77 2.77 0 0 0 1 2.77v4.995a2.77 2.77 0 0 0 2.77 2.769h4.995a2.77 2.77 0 0 0 2.769-2.77V2.77A2.77 2.77 0 0 0 8.764 0zM3.769 1.108h4.996c.917 0 1.661.744 1.661 1.661v4.996c0 .917-.744 1.661-1.661 1.661H3.769a1.662 1.662 0 0 1-1.661-1.661V2.769c0-.917.744-1.661 1.661-1.661zM22.23 13.466h-4.995a2.77 2.77 0 0 0-2.769 2.77v4.995A2.77 2.77 0 0 0 17.236 24h4.995A2.77 2.77 0 0 0 25 21.23v-4.995a2.77 2.77 0 0 0-2.77-2.769zm-4.995 1.108h4.996c.917 0 1.661.744 1.661 1.661v4.996c0 .917-.744 1.661-1.661 1.661h-4.996a1.662 1.662 0 0 1-1.661-1.661v-4.996c0-.917.744-1.661 1.661-1.661zM8.765 13.466H3.769A2.77 2.77 0 0 0 1 16.236v4.995A2.77 2.77 0 0 0 3.77 24h4.995a2.77 2.77 0 0 0 2.769-2.77v-4.995a2.77 2.77 0 0 0-2.77-2.769zm-4.996 1.108h4.996c.917 0 1.661.744 1.661 1.661v4.996c0 .917-.744 1.661-1.661 1.661H3.769a1.662 1.662 0 0 1-1.661-1.661v-4.996c0-.917.744-1.661 1.661-1.661z"})))};Mm.defaultProps={width:"250",height:"24",viewBox:"0 0 250 24",xmlns:"http://www.w3.org/2000/svg"};var Om={"logo-ohif":Mm};var Pm=["name"];function Tm(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function xm(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Rm(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},i=Object.keys(e);for(r=0;r=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var Lm=function(e){var t,n,r=e.name,a=Rm(e,Pm);return l.createElement(l.Fragment,null,(t=r,n=function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n, or turn it into a ")+"drag source or a drop target itself.")}}function cp(e){var t={};return Object.keys(e).forEach((function(n){var r=e[n];if(n.endsWith("Ref"))t[n]=e[n];else{var a=function(e){return function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(!(0,l.isValidElement)(t)){var r=t;return e(r,n),r}var a=t;lp(a);var i=n?function(t){return e(t,n)}:e;return fp(a,i)}}(r);t[n]=function(){return a}}})),t}function dp(e,t){"function"==typeof e?e(t):e.current=t}function fp(e,t){var n=e.ref;return M("string"!=typeof n,"Cannot connect React DnD to an element with an existing string ref. Please convert it to use a callback ref instead, or wrap it into a or
. Read more: https://reactjs.org/docs/refs-and-the-dom.html#callback-refs"),n?(0,l.cloneElement)(e,{ref:function(e){dp(n,e),dp(t,e)}}):(0,l.cloneElement)(e,{ref:t})}function vp(e){return vp="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},vp(e)}function mp(e){return null!==e&&"object"===vp(e)&&Object.prototype.hasOwnProperty.call(e,"current")}function pp(e,t,n,r){var a=n?n.call(r,e,t):void 0;if(void 0!==a)return!!a;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var i=Object.keys(e),o=Object.keys(t);if(i.length!==o.length)return!1;for(var s=Object.prototype.hasOwnProperty.bind(t),u=0;ue.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n3?l.createElement("div",null,l.createElement("div",null,m.slice(0,3).map((function(e){return l.createElement("div",{key:e},e)}))),l.createElement(fh,{position:"right",content:l.createElement("div",{className:"text-left max-w-40"},"Series is displayed ",l.createElement("br",null)," in viewport"," ",A)},l.createElement(wa,{name:"tool-more-menu",className:"text-white py-2"}))):m.map((function(e){return l.createElement("div",{key:e},e)})))),p&&l.createElement("div",{onClick:f},l.createElement(wa,{name:"cancel",className:"w-4 text-primary-active"}))),l.createElement(kp,{displaySetInstanceUID:t,imageSrc:r,imageAltText:a,dragData:u,description:i,seriesNumber:o,numInstances:s,isActive:h,onClick:c,onDoubleClick:d}))};Hp.propTypes={dragData:i().shape({type:i().string.isRequired}),displaySetInstanceUID:i().string.isRequired,className:i().string,imageSrc:i().string,imageAltText:i().string,description:i().string.isRequired,seriesNumber:s.isRequired,numInstances:i().number.isRequired,onClick:i().func.isRequired,onDoubleClick:i().func.isRequired,onClickUntrack:i().func.isRequired,viewportIdentificator:i().array,isTracked:i().bool,isActive:i().bool.isRequired};var Qp=Hp,qp=function(e){var t=e.thumbnails,n=e.onThumbnailClick,r=e.onThumbnailDoubleClick,a=e.onClickUntrack,i=e.activeDisplaySetInstanceUIDs,o=void 0===i?[]:i;return l.createElement("div",{className:"py-3 bg-black overflow-y-hidden ohif-scrollbar"},t.map((function(e){var t=e.displaySetInstanceUID,i=e.description,s=e.dragData,u=e.seriesNumber,c=e.numInstances,d=e.modality,f=e.componentType,v=e.seriesDate,m=e.viewportIdentificator,p=e.isTracked,h=e.canReject,g=e.onReject,A=e.imageSrc,y=e.imageAltText,S=o.includes(t);switch(f){case"thumbnail":return l.createElement(kp,{key:t,displaySetInstanceUID:t,dragData:s,description:i,seriesNumber:u,numInstances:c,imageSrc:A,imageAltText:y,viewportIdentificator:m,isActive:S,onClick:function(){return n(t)},onDoubleClick:function(){return r(t)}});case"thumbnailTracked":return l.createElement(Qp,{key:t,displaySetInstanceUID:t,dragData:s,description:i,seriesNumber:u,numInstances:c,imageSrc:A,imageAltText:y,viewportIdentificator:m,isTracked:p,isActive:S,onClick:function(){return n(t)},onDoubleClick:function(){return r(t)},onClickUntrack:function(){return a(t)}});case"thumbnailNoImage":return l.createElement(Gp,{isActive:S,key:t,displaySetInstanceUID:t,dragData:s,modality:d,modalityTooltip:zp(d),seriesDate:v,description:i,canReject:h,onReject:g,onClick:function(){return n(t)},onDoubleClick:function(){return r(t)},viewportIdentificator:m});default:return l.createElement(l.Fragment,null)}})))};function zp(e){return Wp.hasOwnProperty(e)?Wp[e]:"Unknown"}qp.propTypes={thumbnails:i().arrayOf(i().shape({displaySetInstanceUID:i().string.isRequired,imageSrc:i().string,imageAltText:i().string,seriesDate:i().string,seriesNumber:s,numInstances:i().number,description:i().string,componentType:o.isRequired,viewportIdentificator:u,isTracked:i().bool,dragData:i().shape({type:i().string.isRequired})})),activeDisplaySetInstanceUIDs:i().arrayOf(i().string),onThumbnailClick:i().func.isRequired,onThumbnailDoubleClick:i().func.isRequired,onClickUntrack:i().func.isRequired};var Wp={SR:"Structured Report",SEG:"Segmentation",RT:"RT Structure Set"},Yp=qp,Zp=function(e){var t=e.type,n=e.id,r=e.icon,a=e.label,i=e.commands,o=e.onInteraction,s=e.dropdownContent,u=e.isActive,c=e.bState,d=(void 0===c?{}:c).primaryToolId,f=u||"tool"===t&&n===d,m={type:{primary:f?"text-black":"text-common-bright hover:bg-primary-dark hover:text-primary-light",secondary:f?"text-black":"text-white hover:bg-secondary-dark hover:text-white focus:bg-secondary-dark focus:text-white"}},p=f?"active":"",h=!!f&&!!s;return l.createElement("div",{key:n},l.createElement(fh,{isSticky:h,content:h?s:a,tight:h},l.createElement(nu,{variant:f?"contained":"text",size:"toolbar",className:v()("mx-1",p,m.type[t]),onClick:function(){o({itemId:n,interactionType:t,commands:i})},name:a,key:n,id:n},l.createElement(wa,{name:r}))))};Zp.defaultProps={dropdownContent:null,isActive:!1,type:"action"},Zp.propTypes={type:i().oneOf(["action","toggle","tool"]),id:i().string.isRequired,isActive:i().bool,onInteraction:i().func.isRequired,icon:i().string.isRequired,label:i().string.isRequired,dropdownContent:i().oneOfType([i().node,i().func])};var Kp=Zp,Xp=function(e){var t=e.onGetMenuItems,n=e.onSetLabel,r=e.onClose,a=e.onDelete,i=t([{label:"Delete measurement",actionType:"Delete",action:function(e){a(e),r()},value:{}},{label:"Add Label",actionType:"setLabel",action:function(e){n(e),r()},value:{}}]);return l.createElement(Ko,{items:i})};Xp.propTypes={onClose:i().func.isRequired,onSetLabel:i().func.isRequired,onDelete:i().func.isRequired,onGetMenuItems:i().func.isRequired};var $p=Xp;function Jp(){return Jp=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var s=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(s&&u){if(this.prev=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),w(n),c}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var a=r.arg;w(n)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:E(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),c}},e}function ph(e,t,n,r,a,i,o){try{var s=e[i](o),u=s.value}catch(e){return void n(e)}s.done?t(u):Promise.resolve(u).then(r,a)}function hh(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,a,i=[],o=!0,s=!1;try{for(n=n.call(e);!(o=(r=n.next()).done)&&(i.push(r.value),!t||i.length!==t);o=!0);}catch(e){s=!0,a=e}finally{try{o||null==n.return||n.return()}finally{if(s)throw a}}return i}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return gh(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return gh(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function gh(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var Ih={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",subtitle:"h6",body:"p"},Eh="inherit",Ch="initial",Dh="initial",_h=!1,Mh=!1,Oh=!1,Ph="body",Th={variant:{h1:"text-6xl",h2:"text-5xl",h3:"text-4xl",h4:"text-3xl",h5:"text-2xl",h6:"text-xl",subtitle:"text-lg",body:"text-base",caption:"text-xs",button:"text-sm uppercase",overline:"text-xs uppercase",srOnly:"absolute h-0 w-0 hidden",inherit:""},color:{initial:"text-white",inherit:"text-inherit",primary:"text-primary-main",primaryActive:"text-primary-active",secondary:"text-common-light",error:"text-red-600"},align:{inherit:"",left:"text-left",center:"text-center",right:"text-right",justify:"text-justify"},display:{initial:"",block:"block",inline:"inline"},gutterBottom:{true:"mb-3",false:""},paragraph:{true:"mb-3",false:""},noWrap:{true:"truncate",false:""}},xh=function(e){var t=e.align,n=void 0===t?Eh:t,r=e.color,a=void 0===r?Ch:r,i=e.display,o=void 0===i?Dh:i,s=e.gutterBottom,u=void 0===s?_h:s,c=e.noWrap,d=void 0===c?Mh:c,f=e.paragraph,m=void 0===f?Oh:f,p=e.variant,h=void 0===p?Ph:p,g=e.component,A=e.className,y=wh(e,Sh),S=g||(m?"p":Ih[h])||"span";return l.createElement(S,bh({className:v()("m-0 leading-tight",Th.variant[h],Th.color[a],Th.align[n],Th.gutterBottom[u],Th.paragraph[m],Th.noWrap[d],Th.display[o],A)},y))};xh.propTypes={component:i().elementType,paragraph:i().bool,display:i().oneOf(["initial","block","inline"]),variant:i().oneOf(["h1","h2","h3","h4","h5","h6","subtitle","body","caption","button","overline","srOnly","inherit"]),color:i().oneOf(["initial","inherit","primary","secondary","error"]),className:i().string,children:i().node,align:i().oneOf(["inherit","left","center","right","justify"]),gutterBottom:i().bool,noWrap:i().bool};var Rh=xh,Lh=function(e){var t=e.viewportIndex,n=e.onArrowsClick,r=e.studyData,a=e.children;return l.createElement("div",{className:"relative flex flex-col h-full"},l.createElement("div",{className:"absolute top-0 left-0 w-full"},l.createElement(Qh,{onArrowsClick:n,studyData:r}),l.createElement(Gu,{message:"Track all measurement for this series?",type:"info",actions:[{type:"cancel",text:"No",value:0},{type:"secondary",text:"No, do not ask again",value:-1},{type:"primary",text:"Yes",value:1}],onSubmit:function(e){"undefined"!=typeof window&&window.alert(e)}})),l.createElement("div",{className:"w-full h-full",id:"viewport-".concat(t)},a))};Lh.propTypes={viewportIndex:i().number.isRequired,onArrowsClick:i().func.isRequired,studyData:i().shape({label:i().string.isRequired,isTracked:i().bool.isRequired,isLocked:i().bool.isRequired,isRehydratable:i().bool.isRequired,studyDate:i().string.isRequired,currentSeries:i().number.isRequired,seriesDescription:i().string.isRequired,modality:i().string.isRequired,patientInformation:i().shape({patientName:i().string.isRequired,patientSex:i().string.isRequired,patientAge:i().string.isRequired,MRN:i().string.isRequired,thickness:i().string.isRequired,spacing:i().string.isRequired,scanner:i().string.isRequired})}).isRequired,children:i().node.isRequired};var kh="text-base text-primary-light",Nh="text-base text-white max-w-24 truncate",Fh="flex flex-col",Bh="flex flex-col ml-4";function Uh(e){for(var t=e.patientName,n=e.patientSex,r=e.patientAge,a=e.MRN,i=e.thickness,o=e.spacing,s=e.scanner,u=e.isOpen,c=e.showPatientInfoRef,d=(0,Jt.$G)("PatientInfo").t;"0"===r.charAt(0);)r=r.substr(1);return l.createElement("div",{ref:c},l.createElement(fh,{isSticky:!0,isDisabled:!u,position:"bottom-right",content:u&&l.createElement("div",{className:"flex py-2"},l.createElement("div",{className:"flex pt-1"},l.createElement(wa,{name:"info-link",className:"w-4 text-primary-main"})),l.createElement("div",{className:"flex flex-col ml-2"},l.createElement("span",{className:"text-base font-bold text-white",title:t},t),l.createElement("div",{className:"flex pb-4 mt-4 mb-4 border-b border-secondary-main"},l.createElement("div",{className:v()(Fh)},l.createElement("span",{className:v()(kh)},d("Sex")),l.createElement("span",{className:v()(Nh),title:n},n)),l.createElement("div",{className:v()(Bh)},l.createElement("span",{className:v()(kh)},d("Age")),l.createElement("span",{className:v()(Nh),title:r},r)),l.createElement("div",{className:v()(Bh)},l.createElement("span",{className:v()(kh)},d("MRN")),l.createElement("span",{className:v()(Nh),title:a},a))),l.createElement("div",{className:"flex"},l.createElement("div",{className:v()(Fh)},l.createElement("span",{className:v()(kh)},d("Thickness")),l.createElement("span",{className:v()(Nh),title:i},i)),l.createElement("div",{className:v()(Bh)},l.createElement("span",{className:v()(kh)},d("Spacing")),l.createElement("span",{className:v()(Nh),title:o},o)),l.createElement("div",{className:v()(Bh)},l.createElement("span",{className:v()(kh)},d("Scanner")),l.createElement("span",{className:v()(Nh),title:s},s)))))},l.createElement("div",{className:"relative flex justify-end cursor-pointer"},l.createElement("div",{className:"relative"},l.createElement(wa,{name:"profile",className:"w-5 text-white"}),l.createElement(wa,{name:"info-link",className:"absolute w-5 text-white bg-black",style:{right:-7,bottom:-10}})))))}Uh.propTypes={patientName:i().string,patientSex:i().string,patientAge:i().string,MRN:i().string,thickness:i().string,spacing:i().string,scanner:i().string,isOpen:i().bool,showPatientInfoRef:i().object};var Vh=Uh;function jh(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,a,i=[],o=!0,s=!1;try{for(n=n.call(e);!(o=(r=n.next()).done)&&(i.push(r.value),!t||i.length!==t);o=!0);}catch(e){s=!0,a=e}finally{try{o||null==n.return||n.return()}finally{if(s)throw a}}return i}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Gh(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Gh(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Gh(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var s=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(s&&u){if(this.prev=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),w(n),c}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var a=r.arg;w(n)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:E(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),c}},e}function Wh(e,t,n,r,a,i,o){try{var s=e[i](o),u=s.value}catch(e){return void n(e)}s.done?t(u):Promise.resolve(u).then(r,a)}function Yh(e){return function(){var t=this,n=arguments;return new Promise((function(r,a){var i=e.apply(t,n);function o(e){Wh(i,r,a,o,s,"next",e)}function s(e){Wh(i,r,a,o,s,"throw",e)}o(void 0)}))}}function Zh(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Kh(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=d?e:d}),[d]),$=(0,l.useCallback)(Yh(zh().mark((function e(){var n,a,i,u,l,c,d,f;return zh().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,s(t,R,b.width,b.height);case 2:return n=e.sent,a=n.width,i=n.height,o(E,R,t),u={height:X(i),width:X(a)},F(u),V((function(e){return Kh(Kh({},e),u)})),e.next=11,r(R,U.ref.current,A);case 11:l=e.sent,c=l.dataUrl,d=l.width,f=l.height,G((function(e){return Kh(Kh({},e),{},{src:c,width:X(d),height:X(f)})}));case 16:case"end":return e.stop()}}),e)}))),[s,t,R,b.width,b.height,o,E,X,r,U.ref,A]);return(0,l.useEffect)((function(){return a(R),function(){i(R)}}),[i,a,R]),(0,l.useEffect)((function(){null!==W.current&&clearTimeout(W.current),W.current=setTimeout((function(){W.current=null,$()}),100)}),[t,R,E,b,s,o,r,A,U.ref,d,f,$]),(0,l.useEffect)((function(){var e=b.width,t=b.height;q(Kh({},{width:ee.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw i}}}}function jg(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:[]).join("+")}(n);return l.createElement(vu,{readOnly:!0,disabled:t,value:s,onKeyDown:function(e){o.record((function(e){var t=function(e){var t=e.sequence,n=e.modifierKeys,r=t.join(" ").split("+"),a=[],i=[];return r.forEach((function(e){n&&n.includes(e)?i.push(e):a.push(e)})),[].concat(i,a)}({sequence:e,modifierKeys:i});o.unpause(),r(t)}))},onFocus:function(){o.pause(),o.startRecording()},className:a})};Zg.propTypes={keys:i().array.isRequired,onChange:i().func.isRequired,className:i().string,modifierKeys:i().array,disabled:i().bool,hotkeys:i().shape({initialize:i().func.isRequired,pause:i().func.isRequired,unpause:i().func.isRequired,startRecording:i().func.isRequired,record:i().func.isRequired}).isRequired},Zg.defaultProps={disabled:!1};var Kg=Zg;function Xg(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,a,i=[],o=!0,s=!1;try{for(n=n.call(e);!(o=(r=n.next()).done)&&(i.push(r.value),!t||i.length!==t);o=!0);}catch(e){s=!0,a=e}finally{try{o||null==n.return||n.return()}finally{if(s)throw a}}return i}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return $g(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return $g(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function $g(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,S,n),p.ZP.extend(e,t,n),m.ZP.setGet(e,t,["isPerformingCoordinateTransformation"]),y(e,t)}var w={newInstance:m.ZP.newInstance(b,"vtkSlabCamera"),extend:b},I=n(4145),E=n(41841),C=n(24613);function D(e){return D="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},D(e)}function _(){_=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},a=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",o=r.toStringTag||"@@toStringTag";function s(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{s({},"")}catch(e){s=function(e,t,n){return e[t]=n}}function u(e,t,n,r){var a=t&&t.prototype instanceof d?t:d,i=Object.create(a.prototype),o=new I(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(a,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===a)throw i;return C()}for(n.method=a,n.arg=i;;){var o=n.delegate;if(o){var s=S(o,n);if(s){if(s===c)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var u=l(e,t,n);if("normal"===u.type){if(r=n.done?"completed":"suspendedYield",u.arg===c)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(r="completed",n.method="throw",n.arg=u.arg)}}}(e,n,o),i}function l(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var c={};function d(){}function f(){}function v(){}var m={};s(m,a,(function(){return this}));var p=Object.getPrototypeOf,h=p&&p(p(E([])));h&&h!==t&&n.call(h,a)&&(m=h);var g=v.prototype=d.prototype=Object.create(m);function A(e){["next","throw","return"].forEach((function(t){s(e,t,(function(e){return this._invoke(t,e)}))}))}function y(e,t){function r(a,i,o,s){var u=l(e[a],e,i);if("throw"!==u.type){var c=u.arg,d=c.value;return d&&"object"==D(d)&&n.call(d,"__await")?t.resolve(d.__await).then((function(e){r("next",e,o,s)}),(function(e){r("throw",e,o,s)})):t.resolve(d).then((function(e){c.value=e,o(c)}),(function(e){return r("throw",e,o,s)}))}s(u.arg)}var a;this._invoke=function(e,n){function i(){return new t((function(t,a){r(e,n,t,a)}))}return a=a?a.then(i,i):i()}}function S(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,S(e,t),"throw"===t.method))return c;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return c}var r=l(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,c;var a=r.arg;return a?a.done?(t[e.resultName]=a.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,c):a:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,c)}function b(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function w(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function I(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(b,this),this.reset(!0)}function E(e){if(e){var t=e[a];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var s=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(s&&u){if(this.prev=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),w(n),c}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var a=r.arg;w(n)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:E(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),c}},e}function M(e,t,n,r,a,i,o){try{var s=e[i](o),u=s.value}catch(e){return void n(e)}s.done?t(u):Promise.resolve(u).then(r,a)}function O(e){return function(){var t=this,n=arguments;return new Promise((function(r,a){var i=e.apply(t,n);function o(e){M(i,r,a,o,s,"next",e)}function s(e){M(i,r,a,o,s,"throw",e)}o(void 0)}))}}function P(e){return function(e){if(Array.isArray(e))return T(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return T(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return T(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function T(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:{},t=e.voiRange,n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(void 0===n||this.getActor(n)){var a=this.getActors();if(a.length){var i;if(n){var o=a.find((function(e){return e.uid===n}));i=null==o?void 0:o.actor}if(i||(i=a[0].actor,n=a[0].uid),t){var s=t.lower,c=t.upper;if(i.getProperty().getRGBTransferFunction(0).setRange(s,c),!r){var d={viewportId:this.id,range:t,volumeId:n};(0,u.Z)(this.element,l.Z.VOI_MODIFIED,d)}}}}}},{key:"setVolumes",value:(m=O(_().mark((function e(t){var n,a,i,s,c,d,f,v,m,p,h,g,A=arguments;return _().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=A.length>1&&void 0!==A[1]&&A[1],a=A.length>2&&void 0!==A[2]&&A[2],i=r.ZP.getVolume(t[0].volumeId)){e.next=5;break}throw new Error("imageVolume with id: ".concat(i.volumeId," does not exist"));case 5:return s=i.metadata.FrameOfReferenceUID,e.next=8,this._isValidVolumeInputArray(t,s);case 8:this._FrameOfReferenceUID=s,c=[],d=0;case 11:if(!(d1&&void 0!==h[1]&&h[1],a=h.length>2&&void 0!==h[2]&&h[2],i=r.ZP.getVolume(t[0].volumeId)){e.next=5;break}throw new Error("imageVolume with id: ".concat(i.volumeId," does not exist"));case 5:return s=[],e.next=8,this._isValidVolumeInputArray(t,this._FrameOfReferenceUID);case 8:u=0;case 9:if(!(u1&&void 0!==arguments[1]&&arguments[1];this.removeActors(e),t&&this.render()}},{key:"setOrientation",value:function(e){console.warn('Method "setOrientation" needs implementation')}},{key:"_isValidVolumeInputArray",value:(s=O(_().mark((function e(t,n){var r,a,i,o;return _().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=t.length,a=1;case 2:if(!(ai&&(i=l,s=r[u]<0,o=u)}if(1!==i){var c="IJKXYZ"[t.slicingMode],d="IJKXYZ"[o];w("Unaccurate slicing along ".concat(c," axis which ")+"is not aligned with any IJK axis of the image data. "+"Using ".concat(d," axis as a fallback (").concat(i,"% aligned). ")+"Necessitates slice reformat that is not yet implemented. You can switch the slicing mode on your mapper to do IJK slicing instead.")}t.closestIJKAxis={ijkMode:o,flip:s}}function r(n,r){var a=e.getInputData(),i=a.getExtent(),o=[i[0],i[2],i[4]],s=e.getClosestIJKAxis().ijkMode,l=t.slice;s!==t.slicingMode&&(l=e.getSliceAtPosition(l)),o[s]+=l;var c=[0,0,0];a.indexToWorld(o,c),o[s]+=1;var d=[0,0,0];a.indexToWorld(o,d),d[0]-=c[0],d[1]-=c[1],d[2]-=c[2],u.normalize(d,d);var f=h.ZP.intersectWithLine(n,r,c,d);if(f.intersection){var v=f.x,m=[0,0,0];return a.worldToIndex(v,m),{t:f.t,absoluteIJK:m}}return null}t.classHierarchy.push("vtkImageMapper"),e.getSliceAtPosition=function(n){var r,a=e.getInputData();if(3===n.length)r=n;else if(Number.isFinite(n)){var i=a.getBounds();switch(t.slicingMode){case I.X:r=[n,(i[3]+i[2])/2,(i[5]+i[4])/2];break;case I.Y:r=[(i[1]+i[0])/2,n,(i[5]+i[4])/2];break;case I.Z:r=[(i[1]+i[0])/2,(i[3]+i[2])/2,n]}}var o=[0,0,0];a.worldToIndex(r,o);var s=a.getExtent(),u=0;switch(e.getClosestIJKAxis().ijkMode){case I.I:u=(0,p.D)(o[0],s[0],s[1]);break;case I.J:u=(0,p.D)(o[1],s[2],s[3]);break;case I.K:u=(0,p.D)(o[2],s[4],s[5]);break;default:return 0}return u},e.setSliceFromCamera=function(n){var r=n.getFocalPoint();switch(t.slicingMode){case I.I:case I.J:case I.K:var a=e.getSliceAtPosition(r);e.setSlice(a);break;case I.X:e.setSlice(r[0]);break;case I.Y:e.setSlice(r[1]);break;case I.Z:e.setSlice(r[2])}},e.setXSlice=function(t){e.setSlicingMode(I.X),e.setSlice(t)},e.setYSlice=function(t){e.setSlicingMode(I.Y),e.setSlice(t)},e.setZSlice=function(t){e.setSlicingMode(I.Z),e.setSlice(t)},e.setISlice=function(t){e.setSlicingMode(I.I),e.setSlice(t)},e.setJSlice=function(t){e.setSlicingMode(I.J),e.setSlice(t)},e.setKSlice=function(t){e.setSlicingMode(I.K),e.setSlice(t)},e.getSlicingModeNormal=function(){var n=[0,0,0],r=e.getInputData().getDirection(),a=[[r[0],r[1],r[2]],[r[3],r[4],r[5]],[r[6],r[7],r[8]]];switch(t.slicingMode){case I.X:n[0]=1;break;case I.Y:n[1]=1;break;case I.Z:n[2]=1;break;case I.I:(0,p.P)(a,[1,0,0],n);break;case I.J:(0,p.P)(a,[0,1,0],n);break;case I.K:(0,p.P)(a,[0,0,1],n)}return n},e.setSlicingMode=function(r){t.slicingMode!==r&&(t.slicingMode=r,e.getInputData()&&n(),e.modified())},e.getClosestIJKAxis=function(){return void 0!==t.closestIJKAxis&&t.closestIJKAxis.ijkMode!==I.NONE||!e.getInputData()||n(),t.closestIJKAxis},e.getBounds=function(){var n=e.getInputData();if(!n)return(0,p.O)();if(!t.useCustomExtents)return n.getBounds();var r=t.customDisplayExtent.slice(),a=e.getClosestIJKAxis().ijkMode,i=t.slice;switch(a!==t.slicingMode&&(i=e.getSliceAtPosition(t.slice)),a){case I.I:r[0]=i,r[1]=i;break;case I.J:r[2]=i,r[3]=i;break;case I.K:r[4]=i,r[5]=i}return n.extentToBounds(r)},e.getBoundsForSlice=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.slice,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,a=e.getInputData();if(!a)return(0,p.O)();var i=a.getSpatialExtent(),o=e.getClosestIJKAxis(),s=o.ijkMode,u=n;switch(s!==t.slicingMode&&(u=e.getSliceAtPosition(n)),s){case I.I:i[0]=u-r,i[1]=u+r;break;case I.J:i[2]=u-r,i[3]=u+r;break;case I.K:i[4]=u-r,i[5]=u+r}return a.extentToBounds(i)},e.getIsOpaque=function(){return!0},e.intersectWithLineForPointPicking=function(t,n){var a=r(t,n);if(a){var i=e.getInputData().getExtent(),o=[Math.round(a.absoluteIJK[0]),Math.round(a.absoluteIJK[1]),Math.round(a.absoluteIJK[2])];return o[0]i[1]||o[1]i[3]||o[2]i[5]?null:{t:a.t,ijk:o}}return null},e.intersectWithLineForCellPicking=function(t,n){var a=r(t,n);if(a){var i=e.getInputData().getExtent(),o=a.absoluteIJK,s=[Math.floor(o[0]),Math.floor(o[1]),Math.floor(o[2])];if(s[0]i[1]-1||s[1]i[3]-1||s[2]i[5]-1)return null;var u=[o[0]-s[0],o[1]-s[1],o[2]-s[2]];return{t:a.t,ijk:s,pCoords:u}}return null}}var C={displayExtent:[0,0,0,0,0,0],customDisplayExtent:[0,0,0,0],useCustomExtents:!1,slice:0,slicingMode:I.NONE,closestIJKAxis:{ijkMode:I.NONE,flip:!1},renderToRectangle:!1,sliceAtFocalPoint:!1};function D(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,C,n),m.Z.extend(e,t,n),v.ZP.get(e,t,["slicingMode"]),v.ZP.setGet(e,t,["slice","closestIJKAxis","useCustomExtents","renderToRectangle","sliceAtFocalPoint"]),v.ZP.setGetArray(e,t,["customDisplayExtent"],4),g.Z.implementCoincidentTopologyMethods(e,t),E(e,t)}var _=y(y(y({newInstance:v.ZP.newInstance(D,"vtkImageMapper"),extend:D},S),b),f.Z),M=n(97249),O=n(26334),P=n(79034).C.InterpolationType,T=v.ZP.vtkErrorMacro;function x(e,t){t.classHierarchy.push("vtkImageProperty"),e.getMTime=function(){for(var e,n=t.mtime,r=0;r<4;r++)t.componentData[r].rGBTransferFunction&&(n=n>(e=t.componentData[r].rGBTransferFunction.getMTime())?n:e),t.componentData[r].piecewiseFunction&&(n=n>(e=t.componentData[r].piecewiseFunction.getMTime())?n:e);return n},e.setRGBTransferFunction=function(n,r){var a=n,i=r;return Number.isInteger(n)||(i=n,a=0),t.componentData[a].rGBTransferFunction!==i&&(t.componentData[a].rGBTransferFunction=i,e.modified(),!0)},e.getRGBTransferFunction=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return t.componentData[e].rGBTransferFunction},e.setPiecewiseFunction=function(n,r){var a=n,i=r;return Number.isInteger(n)||(i=n,a=0),t.componentData[a].piecewiseFunction!==i&&(t.componentData[a].piecewiseFunction=i,e.modified(),!0)},e.getPiecewiseFunction=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return t.componentData[e].piecewiseFunction},e.setScalarOpacity=function(t,n){var r=t,a=n;return Number.isInteger(t)||(a=t,r=0),e.setPiecewiseFunction(r,a)},e.getScalarOpacity=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return e.getPiecewiseFunction(t)},e.setComponentWeight=function(n,r){if(n<0||n>=4)return T("Invalid index"),!1;var a=Math.min(1,Math.max(0,r));return t.componentData[n].componentWeight!==a&&(t.componentData[n].componentWeight=a,e.modified(),!0)},e.getComponentWeight=function(e){return e<0||e>=4?(T("Invalid index"),0):t.componentData[e].componentWeight},e.setInterpolationTypeToNearest=function(){return e.setInterpolationType(P.NEAREST)},e.setInterpolationTypeToLinear=function(){return e.setInterpolationType(P.LINEAR)},e.getInterpolationTypeAsString=function(){return v.ZP.enumToString(P,t.interpolationType)}}var R={independentComponents:!1,interpolationType:P.LINEAR,colorWindow:255,colorLevel:127.5,ambient:1,diffuse:0,opacity:1,useLookupTableScalarRange:!1};function L(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(Object.assign(t,R,n),v.ZP.obj(e,t),!t.componentData){t.componentData=[];for(var r=0;r<4;r++)t.componentData.push({rGBTransferFunction:null,piecewiseFunction:null,componentWeight:1})}v.ZP.setGet(e,t,["independentComponents","interpolationType","colorWindow","colorLevel","ambient","diffuse","opacity","useLookupTableScalarRange"]),x(e,t)}var k={newInstance:v.ZP.newInstance(L,"vtkImageProperty"),extend:L},N=v.ZP.vtkDebugMacro;function F(e,t){t.classHierarchy.push("vtkImageSlice"),e.getActors=function(){return e},e.getImages=function(){return e},e.getIsOpaque=function(){if(t.forceOpaque)return!0;if(t.forceTranslucent)return!1;t.property||e.getProperty();var n=t.property.getOpacity()>=1;return n=n&&(!t.mapper||t.mapper.getIsOpaque())},e.hasTranslucentPolygonalGeometry=function(){return!1},e.makeProperty=k.newInstance,e.getProperty=function(){return null===t.property&&(t.property=e.makeProperty()),t.property},e.getBounds=function(){if(null===t.mapper)return t.bounds;var n=t.mapper.getBounds();if(!n||6!==n.length)return n;if(n[0]>n[1])return t.mapperBounds=n.concat(),t.bounds=[1,-1,1,-1,1,-1],t.boundsMTime.modified(),n;var r;if(!t.mapperBounds||!(r=[n,t.mapperBounds],r[0].map((function(e,t){return r.map((function(e){return e[t]}))}))).reduce((function(e,t){return e&&t[0]===t[1]}),!0)||e.getMTime()>t.boundsMTime.getMTime()){N("Recomputing bounds..."),t.mapperBounds=n.map((function(e){return e}));var a=[];M.ZP.getCorners(n,a),e.computeMatrix();var i=new Float64Array(16);l.transpose(i,t.matrix),a.forEach((function(e){return u.transformMat4(e,e,i)})),t.bounds[0]=t.bounds[2]=t.bounds[4]=Number.MAX_VALUE,t.bounds[1]=t.bounds[3]=t.bounds[5]=-Number.MAX_VALUE,t.bounds=t.bounds.map((function(e,t){return t%2==0?a.reduce((function(e,n){return e>n[t/2]?n[t/2]:e}),e):a.reduce((function(e,n){return e1&&void 0!==arguments[1]?arguments[1]:0,a=t.mapper.getBoundsForSlice(n,r);if(!a||6!==a.length)return a;if(a[0]>a[1])return a;var i=[];M.ZP.getCorners(a,i),e.computeMatrix();var o=new Float64Array(16);l.transpose(o,t.matrix),i.forEach((function(e){return u.transformMat4(e,e,o)}));var s=[Number.MAX_VALUE,-Number.MAX_VALUE,Number.MAX_VALUE,-Number.MAX_VALUE,Number.MAX_VALUE,-Number.MAX_VALUE];return s=s.map((function(e,t){return t%2==0?i.reduce((function(e,n){return e>n[t/2]?n[t/2]:e}),e):i.reduce((function(e,n){return ee?n:e}return e},e.getRedrawMTime=function(){var e=t.mtime;if(null!==t.mapper){var n=t.mapper.getMTime();e=n>e?n:e,null!==t.mapper.getInput()&&(t.mapper.getInputAlgorithm().update(),e=(n=t.mapper.getInput().getMTime())>e?n:e)}if(null!==t.property){var r=t.property.getMTime();e=r>e?r:e,null!==t.property.getRGBTransferFunction()&&(e=(r=t.property.getRGBTransferFunction().getMTime())>e?r:e)}return e},e.getSupportsSelection=function(){return!!t.mapper&&t.mapper.getSupportsSelection()}}var B={mapper:null,property:null,bounds:[1,-1,1,-1,1,-1]};function U(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,B,n),O.ZP.extend(e,t,n),t.boundsMTime={},v.ZP.obj(t.boundsMTime),v.ZP.set(e,t,["property"]),v.ZP.setGet(e,t,["mapper"]),v.ZP.getArray(e,t,["bounds"],6),F(e,t)}var V={newInstance:v.ZP.newInstance(U,"vtkImageSlice"),extend:U},j=n(92632),G=n(4145),H=n(27306),Q=n(47313),q=n(41841),z=n(72682),W=n(24613),Y=n(82698),Z=n(85155),K=n(44460),X=n(19384),$=n(66782),J=n(94225),ee=n(41838),te=n(84585),ne=n(6),re=n(69499),ae=n(25134);function ie(e){return(0,ae.Z)(e)}function oe(e,t){var n=ie(e);return n.invert(),n.transformPoint(t)}function se(e,t){return ie(e).transformPoint(t)}var ue=n(94461),le=n(36070);function ce(e){var t=e.image;e.viewport.scale=(0,le.Z)(e.canvas,t,e.viewport.rotation).scaleFactor,e.viewport.translation.x=0,e.viewport.translation.y=0}var de=n(9940);function fe(e){var t=e.canvas,n=t.clientWidth,r=t.clientHeight;t.width===n&&t.height===r||(t.width=n,t.height=r)}function ve(e,t,n){var r=e.viewport.scale,a=(0,de.Z)(e.image,e.viewport.rotation),i=Math.round(a.width*r),o=Math.round(a.height*r),s=e.viewport.translation.x,u=e.viewport.translation.y;return i===t&&o<=n||i<=t&&o===n&&0===s&&0===u}function me(e,t,n){var r=e.viewport.scale,a=e.canvas.width/t,i=e.canvas.height/n,o=Math.sqrt(a*i);e.viewport.scale=o*r}var pe=n(77561),he=n(8602),ge=n(31906);function Ae(e){return Ae="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ae(e)}function ye(){ye=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},a=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",o=r.toStringTag||"@@toStringTag";function s(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{s({},"")}catch(e){s=function(e,t,n){return e[t]=n}}function u(e,t,n,r){var a=t&&t.prototype instanceof d?t:d,i=Object.create(a.prototype),o=new I(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(a,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===a)throw i;return C()}for(n.method=a,n.arg=i;;){var o=n.delegate;if(o){var s=S(o,n);if(s){if(s===c)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var u=l(e,t,n);if("normal"===u.type){if(r=n.done?"completed":"suspendedYield",u.arg===c)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(r="completed",n.method="throw",n.arg=u.arg)}}}(e,n,o),i}function l(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var c={};function d(){}function f(){}function v(){}var m={};s(m,a,(function(){return this}));var p=Object.getPrototypeOf,h=p&&p(p(E([])));h&&h!==t&&n.call(h,a)&&(m=h);var g=v.prototype=d.prototype=Object.create(m);function A(e){["next","throw","return"].forEach((function(t){s(e,t,(function(e){return this._invoke(t,e)}))}))}function y(e,t){function r(a,i,o,s){var u=l(e[a],e,i);if("throw"!==u.type){var c=u.arg,d=c.value;return d&&"object"==Ae(d)&&n.call(d,"__await")?t.resolve(d.__await).then((function(e){r("next",e,o,s)}),(function(e){r("throw",e,o,s)})):t.resolve(d).then((function(e){c.value=e,o(c)}),(function(e){return r("throw",e,o,s)}))}s(u.arg)}var a;this._invoke=function(e,n){function i(){return new t((function(t,a){r(e,n,t,a)}))}return a=a?a.then(i,i):i()}}function S(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,S(e,t),"throw"===t.method))return c;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return c}var r=l(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,c;var a=r.arg;return a?a.done?(t[e.resultName]=a.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,c):a:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,c)}function b(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function w(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function I(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(b,this),this.reset(!0)}function E(e){if(e){var t=e[a];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var s=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(s&&u){if(this.prev=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),w(n),c}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var a=r.arg;w(n)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:E(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),c}},e}function Se(e,t,n,r,a,i,o){try{var s=e[i](o),u=s.value}catch(e){return void n(e)}s.done?t(u):Promise.resolve(u).then(r,a)}function be(e){return function(){var t=this,n=arguments;return new Promise((function(r,a){var i=e.apply(t,n);function o(e){Se(i,r,a,o,s,"next",e)}function s(e){Se(i,r,a,o,s,"throw",e)}o(void 0)}))}}function we(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ie(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&void 0!==arguments[1]&&arguments[1],n=e.canvas.width,r=e.canvas.height;fe(e),void 0!==e.image&&(t||ve(e,n,r)?ce(e):me(e,n,r))}(t._cpuFallbackEnabledElement)},t.getFrameOfReferenceUID=function(){var e=t.getCurrentImageId();if(e){var n=H.get("imagePlaneModule",e);if(n)return n.frameOfReferenceUID}},t.createActorMapper=function(e){var t=_.newInstance();t.setInputData(e);var n=V.newInstance();return n.setMapper(t),e.getPointData().getNumberOfComponents()>1&&n.getProperty().setIndependentComponents(!1),n},t.getProperties=function(){return{voiRange:t.voiRange,rotation:t.rotationCache,interpolationType:t.interpolationType,invert:t.invert}},t.canvasToWorld=function(e){return t.useCPURendering?t.canvasToWorldCPU(e):t.canvasToWorldGPU(e)},t.worldToCanvas=function(e){return t.useCPURendering?t.worldToCanvasCPU(e):t.worldToCanvasGPU(e)},t.canvasToWorldCPU=function(e){if(t._cpuFallbackEnabledElement.image){var n=De(oe(t._cpuFallbackEnabledElement,e),2),r=n[0],a=n[1],i=t.getImageData(),o=i.origin,s=i.spacing,l=i.direction,c=u.fromValues(0,0,0),d=l.slice(0,3),f=l.slice(3,6);return u.scaleAndAdd(c,o,d,r*s[0]),u.scaleAndAdd(c,c,f,a*s[1]),c}},t.worldToCanvasCPU=function(e){var n=t.getImageData(),r=n.spacing,a=n.direction,i=n.origin,o=a.slice(0,3),s=a.slice(3,6),l=u.subtract(u.create(),e,i),c=[u.dot(l,o)/r[0],u.dot(l,s)/r[1]];return se(t._cpuFallbackEnabledElement,c)},t.canvasToWorldGPU=function(e){var n=t.getRenderer(),r=t.getVtkActiveCamera(),a=r.getClippingRange(),i=r.getDistance();r.setClippingRange(i,i+.1);var o=t.getRenderingEngine().offscreenMultiRenderWindow.getOpenGLRenderWindow(),s=o.getSize(),u=window.devicePixelRatio||1,l=[e[0]*u,e[1]*u],c=[l[0]+t.sx,l[1]+t.sy];c[1]=s[1]-c[1];var d=o.displayToWorld(c[0],c[1],0,n);return r.setClippingRange(a[0],a[1]),[d[0],d[1],d[2]]},t.worldToCanvasGPU=function(e){var n=t.getRenderer(),r=t.getVtkActiveCamera(),a=r.getClippingRange(),i=r.getDistance();r.setClippingRange(i,i+.1);var o=t.getRenderingEngine().offscreenMultiRenderWindow.getOpenGLRenderWindow(),s=o.getSize(),u=o.worldToDisplay.apply(o,Ce(e).concat([n]));u[1]=s[1]-u[1];var l=[u[0]-t.sx,u[1]-t.sy];r.setClippingRange(a[0],a[1]);var c=window.devicePixelRatio||1;return[l[0]/c,l[1]/c]},t.getCurrentImageIdIndex=function(){return t.currentImageIdIndex},t.getTargetImageIdIndex=function(){return t.targetImageIdIndex},t.getImageIds=function(){return t.imageIds},t.getCurrentImageId=function(){return t.imageIds[t.currentImageIdIndex]},t.hasImageId=function(e){return t.imageIds.includes(e)},t.hasImageURI=function(e){for(var n=t.imageIds,r=0;r0&&void 0!==arguments[0]?arguments[0]:{},t=e.voiRange,n=e.invert,r=e.interpolationType,a=e.rotation,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];void 0===t&&this.voiApplied||this.setVOI(t,i),void 0!==n&&this.setInvertColor(n),void 0!==r&&this.setInterpolationType(r),void 0!==a&&this.rotationCache!==a&&this.setRotation(this.rotationCache,a)}},{key:"resetProperties",value:function(){this.cpuRenderingInvalidated=!0,this.fillWithBackgroundColor(),this.useCPURendering&&(this._cpuFallbackEnabledElement.renderingTools={}),this._resetProperties(),this.render()}},{key:"getCamera",value:function(){return this.useCPURendering?this.getCameraCPU():Pe(ke(h.prototype),"getCamera",this).call(this)}},{key:"setCamera",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.useCPURendering?this.setCameraCPU(e):Pe(ke(h.prototype),"setCamera",this).call(this,e,t)}},{key:"_resetProperties",value:function(){this.voiApplied=!1,this.setProperties({voiRange:this.initialVOIRange,rotation:0,interpolationType:re.Z.LINEAR,invert:!1})}},{key:"_setPropertiesFromCache",value:function(){this.setProperties({voiRange:this.voiRange,rotation:this.rotation,interpolationType:this.interpolationType,invert:this.invert},!0)}},{key:"getCameraCPU",value:function(){var e=this._cpuFallbackEnabledElement,t=e.metadata,n=e.viewport,r=t.direction,a=r.slice(6,9).map((function(e){return-e})),i=r.slice(3,6).map((function(e){return-e}));if(this.rotation){var o=l.fromRotation(l.create(),this.rotation*Math.PI/180,a);i=u.transformMat4(u.create(),i,o)}var s=[this.element.clientWidth/2,this.element.clientHeight/2],c=this.canvasToWorld(s),d=this.canvasToWorld([0,0]),f=this.canvasToWorld([0,this.element.clientHeight]);return{parallelProjection:!0,focalPoint:c,position:[0,0,0],parallelScale:u.distance(d,f)/2,scale:n.scale,viewPlaneNormal:[a[0],a[1],a[2]],viewUp:[i[0],i[1],i[2]],flipHorizontal:this.flipHorizontal,flipVertical:this.flipVertical}}},{key:"setCameraCPU",value:function(e){var t=this._cpuFallbackEnabledElement,n=t.viewport,r=t.image,a=this.getCameraCPU(),i=e.focalPoint,o=e.parallelScale,s=e.scale,u=e.flipHorizontal,l=e.flipVertical,d=this.element.clientHeight;if(i){var f=this.worldToCanvasCPU(i),v=oe(this._cpuFallbackEnabledElement,f),m=this.worldToCanvasCPU(a.focalPoint),p=oe(this._cpuFallbackEnabledElement,m),h=c.Ue();c.$X(h,c.al(v[0],v[1]),c.al(p[0],p[1]));var g=function(e,t){var n=t.hflip,r=t.vflip,a=t.rotation;if(e.x*=n?-1:1,e.y*=r?-1:1,0!==a){var i=a*Math.PI/180,o=Math.cos(i),s=Math.sin(i),u=e.x*o-e.y*s,l=e.x*s+e.y*o;e.x=u,e.y=l}return e}({x:h[0],y:h[1]},n);n.translation.x-=g.x,n.translation.y-=g.y}if(o){var A=d*r.rowPixelSpacing*.5/o;n.scale=A,n.parallelScale=o}if(s){var y=r.rowPixelSpacing;n.scale=s,n.parallelScale=d*y*.5/s}void 0===u&&void 0===l||this.setFlipCPU({flipHorizontal:u,flipVertical:l}),this._cpuFallbackEnabledElement.transform=(0,ae.Z)(this._cpuFallbackEnabledElement);var S={previousCamera:a,camera:this.getCamera(),element:this.element,viewportId:this.id,renderingEngineId:this.renderingEngineId,rotation:this.rotation};(0,Z.Z)(this.element,z.Z.CAMERA_MODIFIED,S)}},{key:"setFlipCPU",value:function(e){var t=e.flipHorizontal,n=e.flipVertical,r=this._cpuFallbackEnabledElement.viewport;void 0!==t&&(r.hflip=t,this.flipHorizontal=r.hflip),void 0!==n&&(r.vflip=n,this.flipVertical=r.vflip)}},{key:"setVOI",value:function(e,t){this.useCPURendering?this.setVOICPU(e,t):this.setVOIGPU(e,t)}},{key:"setRotation",value:function(e,t){var n=this.getCamera();this.useCPURendering?this.setRotationCPU(e,t):this.setRotationGPU(e,t);var r={previousCamera:n,camera:this.getCamera(),element:this.element,viewportId:this.id,renderingEngineId:this.renderingEngineId,rotation:this.rotation};(0,Z.Z)(this.element,z.Z.CAMERA_MODIFIED,r)}},{key:"setInterpolationType",value:function(e){this.useCPURendering?this.setInterpolationTypeCPU(e):this.setInterpolationTypeGPU(e)}},{key:"setInvertColor",value:function(e){this.useCPURendering?this.setInvertColorCPU(e):this.setInvertColorGPU(e)}},{key:"setRotationCPU",value:function(e,t){this._cpuFallbackEnabledElement.viewport.rotation=t,this.rotationCache=t,this.rotation=t}},{key:"setRotationGPU",value:function(e,t){this.getVtkActiveCamera().roll(e),this.getVtkActiveCamera().roll(-t),this.rotationCache=t,this.rotation=t}},{key:"setInterpolationTypeGPU",value:function(e){var t=this.getDefaultActor();if(t){var n=t.actor;(0,Y.Z)(n)&&(n.getProperty().setInterpolationType(e),this.interpolationType=e)}}},{key:"setInterpolationTypeCPU",value:function(e){var t=this._cpuFallbackEnabledElement.viewport;e===re.Z.LINEAR?t.pixelReplication=!1:t.pixelReplication=!0,this.interpolationType=e}},{key:"setInvertColorCPU",value:function(e){var t=this._cpuFallbackEnabledElement.viewport;t&&(t.invert=e,this.invert=e)}},{key:"setInvertColorGPU",value:function(e){var t=this.getDefaultActor();if(t){var n=t.actor;if((0,Y.Z)(n))if(n.isA("vtkVolume")){var r=n.getProperty().getRGBTransferFunction(0);(!this.invert&&e||this.invert&&!e)&&(0,K.Z)(r),this.invert=e}else if(n.isA("vtkImageSlice")){var a=n.getProperty().getRGBTransferFunction(0);(!this.invert&&e||this.invert&&!e)&&(0,K.Z)(a),this.invert=e}}}},{key:"setVOICPU",value:function(e,t){var n=this._cpuFallbackEnabledElement,r=n.viewport,a=n.image;if(r&&a){if(void 0===e){var i=a.windowWidth,o=a.windowCenter,s=Array.isArray(i)?i[0]:i,u=Array.isArray(o)?o[0]:o;r.voi={windowWidth:s,windowCenter:u};var l=X.toLowHighRange(s,u);e={lower:l.lower,upper:l.upper}}else{var c=e,d=c.lower,f=c.upper,v=X.toWindowLevel(d,f),m=v.windowCenter,p=v.windowWidth;r.voi||(r.voi={windowWidth:0,windowCenter:0}),r.voi.windowWidth=p,r.voi.windowCenter=m}this.voiApplied=!0,this.voiRange=e;var h={viewportId:this.id,range:e};t||(0,Z.Z)(this.element,z.Z.VOI_MODIFIED,h)}}},{key:"setVOIGPU",value:function(e,t){var n=this.getDefaultActor();if(n){var r=n.actor;if((0,Y.Z)(r)){var a=r,i=e;if(void 0===i){var o=a.getMapper().getInputData().getPointData().getScalars().getRange();i={lower:o[0],upper:o[1]}}var s=X.toWindowLevel(i.lower,i.upper),u=s.windowWidth,l=s.windowCenter;if(a.getProperty().setColorWindow(u),a.getProperty().setColorLevel(l),this.voiApplied=!0,this.voiRange=i,!t){var c={viewportId:this.id,range:i};(0,Z.Z)(this.element,z.Z.VOI_MODIFIED,c)}}}}},{key:"_addScalingToViewport",value:function(e){if(!this.scaling.PET){var t=e.suvbw,n=e.suvlbm,r=e.suvbsa,a={};n&&(a.suvbwToSuvlbm=n/t),r&&(a.suvbwToSuvbsa=r/t),this.scaling.PET=a}}},{key:"_getNumCompsFromPhotometricInterpretation",value:function(e){var t=1;return"RGB"!==e&&-1===e.indexOf("YBR")&&"PALETTE COLOR"!==e||(t=3),t}},{key:"_getImageDataMetadata",value:function(e){var t,n,r=this.buildMetadata(e.imageId),a=r.imagePlaneModule,i=r.imagePixelModule;t=a.rowCosines,n=a.columnCosines,null!=t&&null!=n||(t=[1,0,0],n=[0,1,0]);var o=u.fromValues(t[0],t[1],t[2]),s=u.fromValues(n[0],n[1],n[2]),l=u.create();u.cross(l,o,s);var c=a.imagePositionPatient;null==c&&(c=[0,0,0]);var d=a.columnPixelSpacing||e.columnPixelSpacing,f=a.rowPixelSpacing||e.rowPixelSpacing,v=e.columns,m=e.rows,p=e.numComps||this._getNumCompsFromPhotometricInterpretation(i.photometricInterpretation);return{bitsAllocated:i.bitsAllocated,numComps:p,origin:c,direction:[].concat(Ce(o),Ce(s),Ce(l)),dimensions:[v,m,1],spacing:[d,f,1],numVoxels:v*m*1,imagePlaneModule:a,imagePixelModule:i}}},{key:"_getCameraOrientation",value:function(e){var t=e.slice(6,9).map((function(e){return-e})),n=e.slice(3,6).map((function(e){return-e}));return{viewPlaneNormal:[t[0],t[1],t[2]],viewUp:[n[0],n[1],n[2]]}}},{key:"_createVTKImageData",value:function(e){var t,n=e.origin,i=e.direction,o=e.dimensions,s=e.spacing,u=e.bitsAllocated,l=e.numComps,c=e.numVoxels,d=e.isSigned,f=(0,G.P_)().rendering,v=f.hasNorm16TextureSupport,m=f.preferSizeOverAccuracy,p=v||m;switch(u){case 8:t=new Uint8Array(c*l);break;case 16:t=p?d?new Int16Array(c*l):new Uint16Array(c*l):new Float32Array(c*l);break;case 24:t=new Uint8Array(3*c*l);break;default:console.log("bit allocation not implemented")}var h=r.ZP.newInstance({name:"Pixels",numberOfComponents:l,values:t});this._imageData=a.ZP.newInstance(),this._imageData.setDimensions(o),this._imageData.setSpacing(s),this._imageData.setDirection(i),this._imageData.setOrigin(n),this._imageData.getPointData().setScalars(h)}},{key:"setStack",value:(m=be(ye().mark((function e(t){var n,r,a,i=arguments;return ye().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=i.length>1&&void 0!==i[1]?i[1]:0,this.imageIds=t,this.currentImageIdIndex=n,this.targetImageIdIndex=n,this.stackInvalidated=!0,this.rotationCache=0,this.flipVertical=!1,this.flipHorizontal=!1,this.voiApplied=!1,this._resetProperties(),this.fillWithBackgroundColor(),this.useCPURendering&&(this._cpuFallbackEnabledElement.renderingTools={},delete this._cpuFallbackEnabledElement.viewport.colormap),e.next=14,this._setImageIdIndex(n);case 14:return r=e.sent,a={imageIds:t,viewportId:this.id,element:this.element,currentImageIdIndex:n},(0,Z.Z)(q.Z,z.Z.STACK_VIEWPORT_NEW_STACK,a),e.abrupt("return",r);case 18:case"end":return e.stop()}}),e,this)}))),function(e){return m.apply(this,arguments)})},{key:"_checkVTKImageDataMatchesCornerstoneImage",value:function(e,t){if(!t)return!1;var n=De(t.getSpacing(),2),r=n[0],a=n[1],i=De(t.getDimensions(),2),o=i[0],s=i[1],u=this._getImagePlaneModule(e.imageId),l=t.getDirection(),c=l.slice(0,3),d=l.slice(3,6),f=t.getPointData().getScalars().getDataType();return(r===e.rowPixelSpacing||null===e.rowPixelSpacing&&1===r)&&(a===e.columnPixelSpacing||null===e.columnPixelSpacing&&1===a)&&o===e.columns&&s===e.rows&&(0,$.Z)(u.rowCosines,c)&&(0,$.Z)(u.columnCosines,d)&&f===e.getPixelData().constructor.name}},{key:"_updateVTKImageDataFromCornerstoneImage",value:function(e){var t=this._getImagePlaneModule(e.imageId).imagePositionPatient;null==t&&(t=[0,0,0]),this._imageData.setOrigin(t);var n,r=e.getPixelData(),a=this._imageData.getPointData().getScalars().getData();if(e.rgba||(n=a,3*r.length==4*n.byteLength)){e.rgba||console.warn("rgba not specified but data looks rgba ish",e);for(var i=r.length/4,o=0,s=0,u=0;u=this.imageIds.length)){e.next=2;break}throw new Error("ImageIdIndex provided ".concat(t," is invalid, the stack only has ").concat(this.imageIds.length," elements"));case 2:return this.currentImageIdIndex=t,this.hasPixelSpacing=!0,e.next=6,this._loadAndDisplayImage(this.imageIds[t],t);case 6:return n=e.sent,e.abrupt("return",n);case 8:case"end":return e.stop()}}),e,this)}))),function(e){return f.apply(this,arguments)})},{key:"resetCamera",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return this.useCPURendering?this.resetCameraCPU(e,t):this.resetCameraGPU(e,t),this.rotation=0,this.rotationCache=0,!0}},{key:"resetCameraCPU",value:function(e,t){if(this._cpuFallbackEnabledElement.image){!function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],r=e.canvas,a=e.image,i=e.viewport,o=(0,le.Z)(r,a,0).scaleFactor;i.vflip=!1,i.hflip=!1,t&&(i.translation.x=0,i.translation.y=0),n&&(i.displayedArea.tlhc.x=1,i.displayedArea.tlhc.y=1,i.displayedArea.brhc.x=a.columns,i.displayedArea.brhc.y=a.rows,i.scale=o)}(this._cpuFallbackEnabledElement,e,t);var n=this._cpuFallbackEnabledElement.viewport.scale,r=this.element,a=[r.clientWidth/2,r.clientHeight/2],i=this.canvasToWorldCPU(a);this.setCameraCPU({focalPoint:i,scale:n})}}},{key:"resetCameraGPU",value:function(e,t){return this.getVtkActiveCamera().roll(this.rotationCache),Pe(ke(h.prototype),"resetCamera",this).call(this,e,t,!0)}},{key:"scroll",value:function(e){var t=this,n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a=this.imageIds,i=this.targetImageIdIndex,o=a.length,s=i+e;s=Math.max(0,s),r?s%=o:s=Math.min(o-1,s),this.targetImageIdIndex=s;var u=a[s],l=ge.ZP.isImageIdCached(u);l||!n?this.setImageIdIndex(s):(clearTimeout(this.debouncedTimeout),this.debouncedTimeout=window.setTimeout((function(){t.setImageIdIndex(s)}),40));var c={newImageIdIndex:s,imageId:u,direction:e};s!==i&&(0,Z.Z)(this.element,z.Z.STACK_VIEWPORT_SCROLL,c)}},{key:"setImageIdIndex",value:(d=be(ye().mark((function e(t){var n;return ye().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.currentImageIdIndex!==t){e.next=2;break}return e.abrupt("return",this.getCurrentImageId());case 2:return n=this._setImageIdIndex(t),e.abrupt("return",n);case 4:case"end":return e.stop()}}),e,this)}))),function(e){return d.apply(this,arguments)})},{key:"calibrateSpacing",value:function(e){var t=this.getImageIds().indexOf(e);this.stackInvalidated=!0,this._loadAndDisplayImage(e,t)}},{key:"_restoreCameraProps",value:function(e,t,n){var r=e.parallelScale,a=this.getRenderer(),i=this.getCamera(),o=i.position,s=i.focalPoint,l=u.subtract(u.create(),o,n),c=u.subtract(u.create(),s,n);this.setCameraNoEvent({parallelScale:r,position:l,focalPoint:c});var d=this.getCamera();this.triggerCameraEvent(d,t);var f={type:"ResetCameraEvent",renderer:a};a.invokeEvent(f)}},{key:"triggerCameraEvent",value:function(e,t){var n={previousCamera:t,camera:e,element:this.element,viewportId:this.id,renderingEngineId:this.renderingEngineId};this.suppressEvents||(0,Z.Z)(this.element,z.Z.CAMERA_MODIFIED,n)}},{key:"triggerCalibrationEvent",value:function(){var e=this.getImageData().imageData,t=Ie({element:this.element,viewportId:this.id,renderingEngineId:this.renderingEngineId,imageId:this.getCurrentImageId(),imageData:e,worldToIndex:e.getWorldToIndex()},this._calibrationEvent);this.suppressEvents||(0,Z.Z)(this.element,z.Z.IMAGE_SPACING_CALIBRATED,t),this._publishCalibratedEvent=!1}},{key:"getRenderer",value:function(){if(this.useCPURendering)throw this.getCPUFallbackError("getRenderer");return Pe(ke(h.prototype),"getRenderer",this).call(this)}},{key:"getDefaultActor",value:function(){if(this.useCPURendering)throw this.getCPUFallbackError("getDefaultActor");return Pe(ke(h.prototype),"getDefaultActor",this).call(this)}},{key:"getActors",value:function(){if(this.useCPURendering)throw this.getCPUFallbackError("getActors");return Pe(ke(h.prototype),"getActors",this).call(this)}},{key:"getActor",value:function(e){if(this.useCPURendering)throw this.getCPUFallbackError("getActor");return Pe(ke(h.prototype),"getActor",this).call(this,e)}},{key:"setActors",value:function(e){if(this.useCPURendering)throw this.getCPUFallbackError("setActors");return Pe(ke(h.prototype),"setActors",this).call(this,e)}},{key:"addActors",value:function(e){if(this.useCPURendering)throw this.getCPUFallbackError("addActors");return Pe(ke(h.prototype),"addActors",this).call(this,e)}},{key:"addActor",value:function(e){if(this.useCPURendering)throw this.getCPUFallbackError("addActor");return Pe(ke(h.prototype),"addActor",this).call(this,e)}},{key:"removeAllActors",value:function(){if(this.useCPURendering)throw this.getCPUFallbackError("removeAllActors");return Pe(ke(h.prototype),"removeAllActors",this).call(this)}},{key:"getCPUFallbackError",value:function(e){return new Error("method ".concat(e," cannot be used during CPU Fallback mode"))}},{key:"fillWithBackgroundColor",value:function(){var e=this.getRenderingEngine();e&&e.fillCanvasWithBackgroundColor(this.canvas,this.options.background)}},{key:"setColormap",value:function(e){this.useCPURendering?this.setColormapCPU(e):this.setColormapGPU(e)}},{key:"unsetColormap",value:function(){this.useCPURendering?this.unsetColormapCPU():this.unsetColormapGPU()}},{key:"unsetColormapCPU",value:function(){delete this._cpuFallbackEnabledElement.viewport.colormap,this._cpuFallbackEnabledElement.renderingTools={},this.cpuRenderingInvalidated=!0,this.fillWithBackgroundColor(),this.render()}},{key:"setColormapCPU",value:function(e){var t=(0,ee.y)(e.name,e);this._cpuFallbackEnabledElement.viewport.colormap=t,this._cpuFallbackEnabledElement.renderingTools={},this.fillWithBackgroundColor(),this.cpuRenderingInvalidated=!0,this.render()}},{key:"setColormapGPU",value:function(e){throw new Error("setColorMapGPU not implemented.")}},{key:"unsetColormapGPU",value:function(){throw new Error("unsetColormapGPU not implemented.")}},{key:"_getImagePlaneModule",value:function(e){var t=Ie({},H.get("imagePlaneModule",e));return t.columnPixelSpacing||(t.columnPixelSpacing=1,this.hasPixelSpacing=!1),t.rowPixelSpacing||(t.rowPixelSpacing=1,this.hasPixelSpacing=!1),t.columnCosines||(t.columnCosines=[0,1,0]),t.rowCosines||(t.rowCosines=[1,0,0]),t.imagePositionPatient||(t.imagePositionPatient=[0,0,0]),t.imageOrientationPatient||(t.imageOrientationPatient=new Float32Array([1,0,0,0,1,0])),t}}],i=[{key:"useCustomRenderingPipeline",get:function(){return(0,G.L_)()}}],n&&Oe(t.prototype,n),i&&Oe(t,i),Object.defineProperty(t,"prototype",{writable:!1}),h}(Q.Z),Fe=Ne},47313:function(e,t,n){"use strict";var r=n(81291),a=n(92780),i=n(6807),o=n(91055),s=n(71975),u=n.n(s),l=n(72682),c=n(93656),d=n(82698),f=n(39383),v=n(85155),m=n(45301),p=n(27230);function h(e){return function(e){if(Array.isArray(e))return w(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||b(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function g(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function A(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&void 0!==arguments[1]&&arguments[1];this.options=u()(e),t&&this.render()}},{key:"reset",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.options=u()(this.defaultOptions),e&&this.render()}},{key:"flip",value:function(e){var t=e.flipHorizontal,n=e.flipVertical,r=this.getDefaultImageData();if(r){var a=this.getCamera(),o=a.viewPlaneNormal,s=a.viewUp,u=a.focalPoint,l=a.position,c=i.cross(i.create(),o,s),d=i.copy(i.create(),s),f=i.negate(i.create(),o),v=i.distance(l,u),m=r.getDimensions().map((function(e){return Math.floor(e/2)})),p=[m[0],m[1],m[2]],h=r.indexToWorld(p,i.create()),g=this._getFocalPointForResetCamera(h,a,{resetPan:!0,resetToCenter:!1}),A=i.subtract(i.create(),u,g),y=i.length(A),S=function(e){var t=i.scale(i.create(),e,2*i.dot(A,e));return i.subtract(t,t,A),i.normalize(t,t),t};if(t){var b=S(d),w=i.scaleAndAdd(i.create(),g,b,y),I=i.scaleAndAdd(i.create(),w,f,v);this.setCamera({viewPlaneNormal:f,position:I,focalPoint:w}),this.flipHorizontal=!this.flipHorizontal}if(n){d=i.negate(d,s);var E=S(c),C=i.scaleAndAdd(i.create(),g,E,y),D=i.scaleAndAdd(i.create(),C,f,v);this.setCamera({focalPoint:C,viewPlaneNormal:f,viewUp:d,position:D}),this.flipVertical=!this.flipVertical}this.render()}}},{key:"getDefaultImageData",value:function(){var e=this.getDefaultActor();if(e&&(0,d.Z)(e.actor))return e.actor.getMapper().getInputData()}},{key:"getDefaultActor",value:function(){return this.getActors()[0]}},{key:"getActors",value:function(){return Array.from(this._actors.values())}},{key:"getActor",value:function(e){return this._actors.get(e)}},{key:"getActorUIDByIndex",value:function(e){var t=this.getActors()[e];if(t)return t.uid}},{key:"getActorByIndex",value:function(e){return this.getActors()[e]}},{key:"setActors",value:function(e){this.removeAllActors(),this.addActors(e,!0)}},{key:"removeActor",value:function(e){var t=this.getActor(e);t?(this.getRenderer().removeViewProp(t.actor),this._actors.delete(e)):console.warn("Actor ".concat(e," does not exist for this viewport"))}},{key:"removeActors",value:function(e){var t=this;e.forEach((function(e){t.removeActor(e)}))}},{key:"addActors",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=this.getRenderingEngine();r&&!r.hasBeenDestroyed?(e.forEach((function(e){return t.addActor(e)})),this.resetCamera(n,n)):console.warn("Viewport::addActors::Rendering engine has not been initialized or has been destroyed")}},{key:"addActor",value:function(e){var t=e.uid,n=e.actor,r=this.getRenderingEngine();if(r&&!r.hasBeenDestroyed){if(!t||!n)throw new Error("Actors should have uid and vtk Actor properties");this.getActor(t)?console.warn("Actor ".concat(t," already exists for this viewport")):(this.getRenderer().addActor(n),this._actors.set(t,Object.assign({},e)))}else console.warn("Cannot add actor UID of ".concat(t," Rendering Engine has been destroyed"))}},{key:"removeAllActors",value:function(){this.getRenderer().removeAllViewProps(),this._actors=new Map}},{key:"resetCameraNoEvent",value:function(){this._suppressCameraModifiedEvents=!0,this.resetCamera(),this._suppressCameraModifiedEvents=!1}},{key:"setCameraNoEvent",value:function(e){this._suppressCameraModifiedEvents=!0,this.setCamera(e),this._suppressCameraModifiedEvents=!1}},{key:"_getViewImageDataIntersections",value:function(e,t,n){var r,a=n[0],i=n[1],o=n[2],s=a*t[0]+i*t[1]+o*t[2],u=e.getBounds(),l=[],c=function(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=b(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,a=function(){};return{s:a,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw i}}}}(this._getEdges(u));try{for(c.s();!(r=c.n()).done;){var d=S(r.value,2),v=S(d[0],3),m=v[0],p=v[1],h=v[2],g=S(d[1],3),A=g[0],y=g[1],w=g[2];if(a*(A-m)+i*(y-p)+o*(w-h)!=0){var I=f.linePlaneIntersection([m,p,h],[A,y,w],[a,i,o,s]);this._isInBounds(I,u)&&l.push(I)}}}catch(e){c.e(e)}finally{c.f()}return l}},{key:"resetCamera",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],i=this.getRenderer();this.setCamera({flipHorizontal:!1,flipVertical:!1});var o=u()(this.getCamera()),s=i.computeVisiblePropBounds(),l=[0,0,0],c=this.getDefaultImageData();if(c){var d=c.getSpacing();s[0]=s[0]+d[0]/2,s[1]=s[1]-d[0]/2,s[2]=s[2]+d[1]/2,s[3]=s[3]-d[1]/2,s[4]=s[4]+d[2]/2,s[5]=s[5]-d[2]/2}var f=this.getVtkActiveCamera(),v=f.getViewPlaneNormal(),m=f.getViewUp();if(l[0]=(s[0]+s[1])/2,l[1]=(s[2]+s[3])/2,l[2]=(s[4]+s[5])/2,c){var h=c.getDimensions(),g=h.map((function(e){return Math.floor(e/2)})),A=[g[0],g[1],g[2]];c.indexToWorld(A,l)}var y,S=this._getWorldDistanceViewUpAndViewRight(s,m,v),b=S.widthWorld,w=S.heightWorld,I=[this.sWidth,this.sHeight],E=b/w,C=I[0]/I[1];if(E.999?[-m[2],m[0],m[1]]:m,R=this._getFocalPointForResetCamera(l,o,{resetPan:e,resetToCenter:n}),L=[R[0]+T*v[0],R[1]+T*v[1],R[2]+T*v[2]];i.resetCameraClippingRange(s);var k=[-p.Z.MAXIMUM_RAY_DISTANCE,p.Z.MAXIMUM_RAY_DISTANCE];f.setPhysicalScale(y),f.setPhysicalTranslation(-R[0],-R[1],-R[2]),this.setCamera({parallelScale:t?_:o.parallelScale,focalPoint:R,position:L,viewAngle:90,viewUp:x,clippingRange:k});var N=u()(this.getCamera());r&&this.setInitialCamera(N);var F={type:"ResetCameraEvent",renderer:i};return i.invokeEvent(F),this.triggerCameraModifiedEventIfNecessary(o,N),!0}},{key:"setInitialCamera",value:function(e){this.initialCamera=e}},{key:"getPan",value:function(){var e=this.getVtkActiveCamera().getFocalPoint(),t=this.canvasToWorld([0,0]),n=this.worldToCanvas(i.subtract(i.create(),this.initialCamera.focalPoint,t)),r=this.worldToCanvas(i.subtract(i.create(),e,t));return o.$X(o.Ue(),n,r)}},{key:"setPan",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=this.getCamera(),r=n.focalPoint,a=n.position,s=this.canvasToWorld([0,0]),u=o.$X(o.Ue(),e,this.getPan());if(!(Math.abs(u[0])<1&&Math.abs(u[1])<1)||t){var l=i.subtract(i.create(),this.canvasToWorld(u),s),c=i.subtract(i.create(),r,l),d=i.subtract(i.create(),a,l);this.setCamera(A(A({},n),{},{focalPoint:c,position:d}),t)}}},{key:"getZoom",value:function(){var e=this.getVtkActiveCamera();return this.initialCamera.parallelScale/e.getParallelScale()}},{key:"setZoom",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=this.getCamera(),r=this.initialCamera.parallelScale,a=r/e;(n.parallelScale!==a||t)&&this.setCamera(A(A({},n),{},{parallelScale:a}),t)}},{key:"_getFocalPointForViewPlaneReset",value:function(e){var t=this.getCamera(),n=t.focalPoint,r=t.viewPlaneNormal,a=this._getViewImageDataIntersections(e,n,r),i=0,o=0,s=0;return a.forEach((function(e){var t=S(e,3),n=t[0],r=t[1],a=t[2];i+=n,o+=r,s+=a})),[i/a.length,o/a.length,s/a.length]}},{key:"getCanvas",value:function(){return this.canvas}},{key:"getVtkActiveCamera",value:function(){return this.getRenderer().getActiveCamera()}},{key:"getCamera",value:function(){var e=this.getVtkActiveCamera();return{viewUp:e.getViewUp(),viewPlaneNormal:e.getViewPlaneNormal(),position:e.getPosition(),focalPoint:e.getFocalPoint(),parallelProjection:e.getParallelProjection(),parallelScale:e.getParallelScale(),viewAngle:e.getViewAngle(),flipHorizontal:this.flipHorizontal,flipVertical:this.flipVertical}}},{key:"setCamera",value:function(e){var t,n,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=this.getVtkActiveCamera(),i=u()(this.getCamera()),o=Object.assign({},i,e),s=e.viewUp,l=e.viewPlaneNormal,c=e.position,d=e.focalPoint,f=e.parallelScale,v=e.viewAngle,m=e.flipHorizontal,p=e.flipVertical,g=e.clippingRange;if(void 0!==m){var A=m&&!this.flipHorizontal||!m&&this.flipHorizontal;A&&this.flip({flipHorizontal:A})}if(void 0!==p){var y=p&&!this.flipVertical||!p&&this.flipVertical;y&&this.flip({flipVertical:y})}void 0!==s&&a.setViewUp(s),void 0!==l&&a.setDirectionOfProjection(-l[0],-l[1],-l[2]),void 0!==c&&a.setPosition.apply(a,h(c)),void 0!==d&&a.setFocalPoint.apply(a,h(d)),void 0!==f&&a.setParallelScale(f),void 0!==v&&a.setViewAngle(v),void 0!==g&&a.setClippingRange(g);var S=this.getDefaultActor();if(null!=S&&null!==(t=S.actor)&&void 0!==t&&t.isA("vtkVolume")&&this.updateClippingPlanesForActors(o),null!=S&&null!==(n=S.actor)&&void 0!==n&&n.isA("vtkImageSlice")){var b=this.getRenderer();b.resetCameraClippingRange()}r&&this.setInitialCamera(o),this.triggerCameraModifiedEventIfNecessary(i,this.getCamera())}},{key:"triggerCameraModifiedEventIfNecessary",value:function(e,t){if(!this._suppressCameraModifiedEvents&&!this.suppressEvents){var n={previousCamera:e,camera:t,element:this.element,viewportId:this.id,renderingEngineId:this.renderingEngineId,rotation:this.rotation};(0,v.Z)(this.element,l.Z.CAMERA_MODIFIED,n)}}},{key:"updateClippingPlanesForActors",value:function(e){var t=this;this.getActors().forEach((function(n){if(n.actor&&(0,d.Z)(n.actor)){var r=n.actor.getMapper().getClippingPlanes(),a=p.Z.MINIMUM_SLAB_THICKNESS;n.slabThickness&&(a=n.slabThickness);var i=e.viewPlaneNormal,o=e.focalPoint;t.setOrientationOfClippingPlanes(r,a,i,o)}}))}},{key:"setOrientationOfClippingPlanes",value:function(e,t,n,r){if(!(e.length<2)){var i=[n[0],n[1],n[2]];a.ZP.multiplyScalar(i,t),e[0].setNormal(n);var o=[0,0,0];a.ZP.subtract(r,i,o),e[0].setOrigin(o),e[1].setNormal(-n[0],-n[1],-n[2]);var s=[0,0,0];a.ZP.add(r,i,s),e[1].setOrigin(s)}}},{key:"_getWorldDistanceViewUpAndViewRight",value:function(e,t,n){var a=this._getCorners(e),o=this._getCorners(e),s=i.cross(i.create(),t,n),u=r.Z.buildFromDegree().identity().rotateFromDirections(t,[1,0,0]);a.forEach((function(e){return u.apply(e)}));for(var l=1/0,c=-1/0,d=0;d<8;d++){var f=a[d][0];f>c&&(c=f),fm&&(m=h),ha||do||fu)}},{key:"_getEdges",value:function(e){var t=S(this._getCorners(e),8),n=t[0],r=t[1],a=t[2],i=t[3],o=t[4],s=t[5],u=t[6],l=t[7];return[[n,r],[n,o],[n,a],[r,i],[r,s],[a,i],[a,u],[i,l],[o,u],[o,s],[s,l],[u,l]]}}],s=[{key:"useCustomRenderingPipeline",get:function(){return!1}}],n&&I(t.prototype,n),s&&I(t,s),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.Z=E},53103:function(e,t,n){"use strict";var r=n(6807),a=n(57019),i=n(31906),o=n(24271),s=n(27396),u=n(7283),l=n(27230),c=n(49054);function d(e){return d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},d(e)}function f(){f=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},a=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",o=r.toStringTag||"@@toStringTag";function s(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{s({},"")}catch(e){s=function(e,t,n){return e[t]=n}}function u(e,t,n,r){var a=t&&t.prototype instanceof v?t:v,i=Object.create(a.prototype),o=new C(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(a,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===a)throw i;return _()}for(n.method=a,n.arg=i;;){var o=n.delegate;if(o){var s=w(o,n);if(s){if(s===c)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var u=l(e,t,n);if("normal"===u.type){if(r=n.done?"completed":"suspendedYield",u.arg===c)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(r="completed",n.method="throw",n.arg=u.arg)}}}(e,n,o),i}function l(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var c={};function v(){}function m(){}function p(){}var h={};s(h,a,(function(){return this}));var g=Object.getPrototypeOf,A=g&&g(g(D([])));A&&A!==t&&n.call(A,a)&&(h=A);var y=p.prototype=v.prototype=Object.create(h);function S(e){["next","throw","return"].forEach((function(t){s(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(a,i,o,s){var u=l(e[a],e,i);if("throw"!==u.type){var c=u.arg,f=c.value;return f&&"object"==d(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,o,s)}),(function(e){r("throw",e,o,s)})):t.resolve(f).then((function(e){c.value=e,o(c)}),(function(e){return r("throw",e,o,s)}))}s(u.arg)}var a;this._invoke=function(e,n){function i(){return new t((function(t,a){r(e,n,t,a)}))}return a=a?a.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return c;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return c}var r=l(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,c;var a=r.arg;return a?a.done?(t[e.resultName]=a.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,c):a:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,c)}function I(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(I,this),this.reset(!0)}function D(e){if(e){var t=e[a];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var s=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(s&&u){if(this.prev=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),c}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var a=r.arg;E(n)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:D(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),c}},e}function v(e,t,n,r,a,i,o){try{var s=e[i](o),u=s.value}catch(e){return void n(e)}s.done?t(u):Promise.resolve(u).then(r,a)}function m(e){return function(){var t=this,n=arguments;return new Promise((function(r,a){var i=e.apply(t,n);function o(e){v(i,r,a,o,s,"next",e)}function s(e){v(i,r,a,o,s,"throw",e)}o(void 0)}))}}function p(e,t){for(var n=0;ns.Z)){var d=l[2],f=r.create();r.sub(f,a,u);var v=r.dot(f,n);return Math.round(Math.abs(v)/d)}};var n=t.options.orientation;if(n&&n!==c.Z.ACQUISITION){var a=t._getOrientationVectors(n),o=a.viewPlaneNormal,u=a.viewUp,l=t.getVtkActiveCamera();return l.setDirectionOfProjection(-o[0],-o[1],-o[2]),l.setViewUpFrom(u),t.resetCamera(),S(t)}return t._useAcquisitionPlaneForViewPlane=!0,t}return t=E,n=[{key:"setVolumes",value:(w=m(f().mark((function e(t){var n,r,a,o=arguments;return f().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=o.length>1&&void 0!==o[1]&&o[1],r=o.length>2&&void 0!==o[2]&&o[2],a=i.ZP.getVolume(t[0].volumeId)){e.next=5;break}throw new Error("imageVolume with id: ".concat(a.volumeId," does not exist"));case 5:return this._useAcquisitionPlaneForViewPlane&&(this._setViewPlaneToAcquisitionPlane(a),this._useAcquisitionPlaneForViewPlane=!1),e.abrupt("return",h(b(E.prototype),"setVolumes",this).call(this,t,n,r));case 7:case"end":return e.stop()}}),e,this)}))),function(e){return w.apply(this,arguments)})},{key:"addVolumes",value:(g=m(f().mark((function e(t){var n,r,a,o=arguments;return f().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=o.length>1&&void 0!==o[1]&&o[1],r=o.length>2&&void 0!==o[2]&&o[2],a=i.ZP.getVolume(t[0].volumeId)){e.next=5;break}throw new Error("imageVolume with id: ".concat(a.volumeId," does not exist"));case 5:return this._useAcquisitionPlaneForViewPlane&&(this._setViewPlaneToAcquisitionPlane(a),this._useAcquisitionPlaneForViewPlane=!1),e.abrupt("return",h(b(E.prototype),"addVolumes",this).call(this,t,n,r));case 7:case"end":return e.stop()}}),e,this)}))),function(e){return g.apply(this,arguments)})},{key:"setOrientation",value:function(e){var t,n,r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(u.Z[e]){var a=u.Z[e];t=a.viewPlaneNormal,n=a.viewUp}else{if("acquisition"!==e)throw new Error("Invalid orientation: ".concat(e,". Use Enums.OrientationAxis instead."));var i=this._getAcquisitionPlaneOrientation();t=i.viewPlaneNormal,n=i.viewUp}this.setCamera({viewPlaneNormal:t,viewUp:n}),this.resetCamera(),r&&this.render()}},{key:"_getOrientationVectors",value:function(e){if("object"===d(e)){if(e.viewPlaneNormal&&e.viewUp)return e;throw new Error("Invalid orientation object. It must contain viewPlaneNormal and viewUp")}if("string"==typeof e&&u.Z[e])return u.Z[e];throw new Error("Invalid orientation: ".concat(e,". Valid orientations are: ").concat(Object.keys(u.Z).join(", ")))}},{key:"_getAcquisitionPlaneOrientation",value:function(){var e=this.getDefaultActor();if(e){var t=e.uid,n=i.ZP.getVolume(t);if(!n)throw new Error("imageVolume with id: ".concat(t," does not exist in cache"));var r=n.direction;return{viewPlaneNormal:r.slice(6,9).map((function(e){return-e})),viewUp:r.slice(3,6).map((function(e){return-e}))}}}},{key:"_setViewPlaneToAcquisitionPlane",value:function(e){var t,n;if(e){var r=e.direction;t=r.slice(6,9).map((function(e){return-e})),n=r.slice(3,6).map((function(e){return-e}))}else{var a=this._getAcquisitionPlaneOrientation();t=a.viewPlaneNormal,n=a.viewUp}this.setCamera({viewPlaneNormal:t,viewUp:n}),this.resetCamera()}},{key:"getIntensityFromWorld",value:function(e){var t=this.getDefaultActor(),n=t.actor,r=t.uid;if(n.isA("vtkVolume")){var a=n.getMapper().getInputData(),s=i.ZP.getVolume(r),u=s.dimensions,l=(0,o.Z)(a,e),c=l[2]*u[0]*u[1]+l[1]*u[0]+l[0];return s.scalarData[c]}}},{key:"setBlendMode",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=this.getActors();t&&t.length>0&&(r=r.filter((function(e){return t.includes(e.uid)}))),r.forEach((function(t){t.actor.getMapper().setBlendMode(e)})),n&&this.render()}},{key:"resetCamera",value:function(){var e=this,t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],r=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];h(b(E.prototype),"resetCamera",this).call(this,t,n,r);var i=this.getVtkActiveCamera();i.getParallelProjection()?i.setClippingRange(-l.Z.MAXIMUM_RAY_DISTANCE,l.Z.MAXIMUM_RAY_DISTANCE):i.setClippingRange(l.Z.MINIMUM_SLAB_THICKNESS,l.Z.MAXIMUM_RAY_DISTANCE);var o=i.getViewPlaneNormal(),s=i.getFocalPoint(),u=this.getActors();return u.forEach((function(t){if(t.actor&&t.actor.isA("vtkVolume")){var n=t.actor.getMapper();if(0===n.getClippingPlanes().length){var r=a.ZP.newInstance(),i=a.ZP.newInstance(),u=[r,i],c=l.Z.MINIMUM_SLAB_THICKNESS;t.slabThickness&&(c=t.slabThickness),e.setOrientationOfClippingPlanes(u,c,o,s),n.addClippingPlane(r),n.addClippingPlane(i)}}})),!0}},{key:"setSlabThickness",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=this.getActors();t&&t.length>0&&(n=n.filter((function(e){return t.includes(e.uid)}))),n.forEach((function(t){t.actor.isA("vtkVolume")&&(t.slabThickness=e)}));var r=this.getCamera();this.updateClippingPlanesForActors(r),this.triggerCameraModifiedEventIfNecessary(r,r)}},{key:"getSlabThickness",value:function(){var e=this.getActors(),t=l.Z.MINIMUM_SLAB_THICKNESS;return e.forEach((function(e){e.slabThickness>t&&(t=e.slabThickness)})),t}}],n&&p(t.prototype,n),v&&p(t,v),Object.defineProperty(t,"prototype",{writable:!1}),E}(n(77196).Z);t.Z=w},37573:function(e,t,n){"use strict";n.d(t,{Pr:function(){return a},Uu:function(){return i}});var r=n(93656);function a(e){return r.Z.get(e)}function i(){return r.Z.getAll()}t.ZP=a},41838:function(e,t,n){"use strict";n.d(t,{y:function(){return u}});var r=n(22418),a=n(97769),i=[0,0,0,0];function o(e,t){for(var n=0,r=e.length-1;n<=r;){var a=n+Math.floor((r-n)/2),i=e[a];if(i===t)return a;t0;)a.push(e),e+=r;return a[a.length-1]=t,a}(0,1,e);for(r=0;r=0&&e1)throw new Error("HSVToRGB expects hue < 1");var r=[];if(0===t)return r[0]=n,r[1]=n,r[2]=n,r;var a=Math.floor(6*e),i=6*e-a,o=n*(1-t),s=n*(1-t*i),u=n*(1-t*(1-i));switch(a){case 0:case 6:r[0]=n,r[1]=u,r[2]=o;break;case 1:r[0]=s,r[1]=n,r[2]=o;break;case 2:r[0]=o,r[1]=n,r[2]=u;break;case 3:r[0]=o,r[1]=s,r[2]=n;break;case 4:r[0]=u,r[1]=o,r[2]=n;break;case 5:r[0]=n,r[1]=o,r[2]=s}return r}var a=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.NumberOfColors=256,this.Ramp="linear",this.TableRange=[0,255],this.HueRange=[0,.66667],this.SaturationRange=[1,1],this.ValueRange=[1,1],this.AlphaRange=[1,1],this.NaNColor=[128,0,0,255],this.BelowRangeColor=[0,0,0,255],this.UseBelowRangeColor=!0,this.AboveRangeColor=[255,255,255,255],this.UseAboveRangeColor=!0,this.InputRange=[0,255],this.Table=[]}var t,a,i;return t=e,a=[{key:"setNumberOfTableValues",value:function(e){this.NumberOfColors=e}},{key:"setRamp",value:function(e){this.Ramp=e}},{key:"setTableRange",value:function(e,t){this.TableRange[0]=e,this.TableRange[1]=t}},{key:"setHueRange",value:function(e,t){this.HueRange[0]=e,this.HueRange[1]=t}},{key:"setSaturationRange",value:function(e,t){this.SaturationRange[0]=e,this.SaturationRange[1]=t}},{key:"setValueRange",value:function(e,t){this.ValueRange[0]=e,this.ValueRange[1]=t}},{key:"setRange",value:function(e,t){this.InputRange[0]=e,this.InputRange[1]=t}},{key:"setAlphaRange",value:function(e,t){this.AlphaRange[0]=e,this.AlphaRange[1]=t}},{key:"getColor",value:function(e){return this.mapValue(e)}},{key:"build",value:function(e){if(!(this.Table.length>1)||e){this.Table=[];var t,n,a,i,o=this.NumberOfColors-1;o?(t=(this.HueRange[1]-this.HueRange[0])/o,n=(this.SaturationRange[1]-this.SaturationRange[0])/o,a=(this.ValueRange[1]-this.ValueRange[0])/o,i=(this.AlphaRange[1]-this.AlphaRange[0])/o):t=n=a=i=0;for(var s=0;s<=o;s++){var u=this.HueRange[0]+s*t,l=this.SaturationRange[0]+s*n,c=this.ValueRange[0]+s*a,d=this.AlphaRange[0]+s*i,f=r(u,l,c),v=[0,0,0,0];switch(this.Ramp){case"scurve":v[0]=Math.floor(127.5*(1+Math.cos((1-f[0])*Math.PI))),v[1]=Math.floor(127.5*(1+Math.cos((1-f[1])*Math.PI))),v[2]=Math.floor(127.5*(1+Math.cos((1-f[2])*Math.PI))),v[3]=Math.floor(255*d);break;case"linear":v[0]=Math.floor(255*f[0]+.5),v[1]=Math.floor(255*f[1]+.5),v[2]=Math.floor(255*f[2]+.5),v[3]=Math.floor(255*d+.5);break;case"sqrt":v[0]=Math.floor(255*Math.sqrt(f[0])+.5),v[1]=Math.floor(255*Math.sqrt(f[1])+.5),v[2]=Math.floor(255*Math.sqrt(f[2])+.5),v[3]=Math.floor(255*Math.sqrt(d)+.5);break;default:throw new Error("Invalid Ramp value (".concat(this.Ramp,")"))}this.Table.push(v)}this.buildSpecialColors()}}},{key:"buildSpecialColors",value:function(){var e=this.NumberOfColors,t=e+0,n=e+1,r=e+2;this.UseBelowRangeColor||0===e?this.Table[t]=this.BelowRangeColor:this.Table[t]=this.Table[0],this.UseAboveRangeColor||0===e?this.Table[n]=this.AboveRangeColor:this.Table[n]=this.Table[e-1],this.Table[r]=this.NaNColor}},{key:"mapValue",value:function(e){var t=this.getIndex(e);if(t<0)return this.NaNColor;if(0===t){if(this.UseBelowRangeColor&&ethis.TableRange[1])return this.AboveRangeColor;return this.Table[t]}},{key:"getIndex",value:function(e){var t={Range:[],MaxIndex:this.NumberOfColors-1,Shift:-this.TableRange[0],Scale:1};if(this.TableRange[1]<=this.TableRange[0]?t.Scale=Number.MAX_VALUE:t.Scale=t.MaxIndex/(this.TableRange[1]-this.TableRange[0]),t.Range[0]=this.TableRange[0],t.Range[1]=this.TableRange[1],isNaN(e))return-1;var n=function(e,t){var n;return n=et.Range[1]?t.MaxIndex+1+1.5:(e+t.Shift)*t.Scale,Math.floor(n)}(e,t);return n===this.NumberOfColors+0?n=0:n===this.NumberOfColors+1&&(n=this.NumberOfColors-1),n}},{key:"setTableValue",value:function(e,t){if(5===arguments.length&&(t=Array.prototype.slice.call(arguments,1)),e<0)throw new Error("Can't set the table value for negative index (".concat(e,")"));e>=this.NumberOfColors&&new Error("Index ".concat(e," is greater than the number of colors ").concat(this.NumberOfColors)),this.Table[e]=t,0!==e&&e!==this.NumberOfColors-1||this.buildSpecialColors()}}],a&&n(t.prototype,a),i&&n(t,i),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.Z=a},94225:function(e,t,n){"use strict";function r(){return window.performance?performance.now():Date.now()}function a(e){return function(e){if(Array.isArray(e))return i(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return i(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return i(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n>t,r=e.lut[e.lut.length-1]>>t,i=e.firstValueMapped+e.lut.length-1;return function(a){return a=i?r:e.lut[a-e.firstValueMapped]>>t}}(n):function(e,t){return function(n){return 255*((n-t)/e+.5)}}(e,t)}n.d(t,{Z:function(){return M}});var s=n(25134);function u(e,t,n){if(void 0===e)throw new Error("setToPixelCoordinateSystem: parameter enabledElement must not be undefined");if(void 0===t)throw new Error("setToPixelCoordinateSystem: parameter context must not be undefined");var r=(0,s.Z)(e,n).getMatrix();t.setTransform(r[0],r[1],r[2],r[3],r[4],r[5])}function l(e,t){var n=e.renderingTools.lastRenderedImageId,r=e.renderingTools.lastRenderedViewport;return t.imageId!==n||!r||r.windowCenter!==e.viewport.voi.windowCenter||r.windowWidth!==e.viewport.voi.windowWidth||r.invert!==e.viewport.invert||r.rotation!==e.viewport.rotation||r.hflip!==e.viewport.hflip||r.vflip!==e.viewport.vflip||r.modalityLUT!==e.viewport.modalityLUT||r.voiLUT!==e.viewport.voiLUT||r.colormap!==e.viewport.colormap}function c(e,t){var n=e.renderingTools.renderCanvas;n.width=t.width,n.height=t.height;var r=n.getContext("2d");r.fillStyle="white",r.fillRect(0,0,n.width,n.height);var a=r.getImageData(0,0,t.width,t.height);e.renderingTools.renderCanvasContext=r,e.renderingTools.renderCanvasData=a}function d(e){var t=e.image.imageId,n=e.viewport,r=e.image.color;return e.renderingTools.lastRenderedImageId=t,e.renderingTools.lastRenderedIsColor=r,e.renderingTools.lastRenderedViewport={windowCenter:n.voi.windowCenter,windowWidth:n.voi.windowWidth,invert:n.invert,rotation:n.rotation,hflip:n.hflip,vflip:n.vflip,modalityLUT:n.modalityLUT,voiLUT:n.voiLUT,colormap:n.colormap},e.renderingTools}function f(e,t){return void 0!==e.cachedLut&&e.cachedLut.windowCenter===t.voi.windowCenter&&e.cachedLut.windowWidth===t.voi.windowWidth&&e.cachedLut.invert===t.invert||(function(e,t,n,r,a){var i=e.maxPixelValue,s=e.minPixelValue,u=Math.min(s,0);if(void 0===e.cachedLut){var l=i-u+1;e.cachedLut={},e.cachedLut.lutArray=new Uint8ClampedArray(l)}var c=e.cachedLut.lutArray,d=o(Array.isArray(t)?t[0]:t,Array.isArray(n)?n[0]:n,a);if(!0===r)for(var f=s;f<=i;f++)c[f+-u]=255-d(f);else for(var v=s;v<=i;v++)c[v+-u]=d(v)}(e,t.voi.windowWidth,t.voi.windowCenter,t.invert),e.cachedLut.windowWidth=t.voi.windowWidth,e.cachedLut.windowCenter=t.voi.windowCenter,e.cachedLut.invert=t.invert),e.cachedLut.lutArray}function v(e,t,n){var a=!0===e.renderingTools.lastRenderedIsColor;e.renderingTools.renderCanvas&&a||(e.renderingTools.renderCanvas=document.createElement("canvas"));var i=e.renderingTools.renderCanvas;if(255===e.viewport.voi.windowWidth&&128===e.viewport.voi.windowCenter&&!1===e.viewport.invert&&t.getCanvas&&t.getCanvas())return t.getCanvas();if(!1===l(e,t)&&!0!==n)return i;i.width===t.width&&i.height===t.height||c(e,t);var o=r(),s=f(t,e.viewport);t.stats=t.stats||{},t.stats.lastLutGenerateTime=r()-o;var u=e.renderingTools.renderCanvasData,d=e.renderingTools.renderCanvasContext;return t.rgba?function(e,t,n){var a=r(),i=e.getPixelData();e.stats.lastGetPixelDataTime=r()-a;var o=e.minPixelValue,s=0,u=0,l=i.length;if(a=r(),o<0)for(;u0||void 0!==e.voi.windowWidth&&void 0!==e.voi.windowCenter}(e)){var n=t.maxPixelValue*t.slope+t.intercept,r=t.minPixelValue*t.slope+t.intercept,a=n-r,i=(n+r)/2;void 0===e.voi?e.voi={windowWidth:a,windowCenter:i}:(e.voi.windowWidth=a,e.voi.windowCenter=i)}}function y(e,t){return!e&&!t||!(!e||!t)&&e.id===t.id}function S(e,t,n){return void 0!==e.cachedLut&&e.cachedLut.windowCenter===t.voi.windowCenter&&e.cachedLut.windowWidth===t.voi.windowWidth&&y(e.cachedLut.modalityLUT,t.modalityLUT)&&y(e.cachedLut.voiLUT,t.voiLUT)&&e.cachedLut.invert===t.invert&&!0!==n||(A(t,e),function(e,t,n,r,a,i){var s=e.maxPixelValue,u=e.minPixelValue,l=Math.min(u,0);if(void 0===e.cachedLut){var c=s-l+1;e.cachedLut={},e.cachedLut.lutArray=new Uint8ClampedArray(c)}var d=e.cachedLut.lutArray,f=function(e,t,n){return n?function(e){var t=e.lut[0],n=e.lut[e.lut.length-1],r=e.firstValueMapped+e.lut.length;return function(a){return a=r?n:e.lut[a]}}(n):function(e,t){return function(n){return n*e+t}}(e,t)}(e.slope,e.intercept,a),v=o(t,n,i);if(e.isPreScaled)if(!0===r)for(var m=u;m<=s;m++)d[m+-l]=255-v(m);else for(var p=u;p<=s;p++)d[p+-l]=v(p);else if(!0===r)for(var h=u;h<=s;h++)d[h+-l]=255-v(f(h));else for(var g=u;g<=s;g++)d[g+-l]=v(f(g))}(e,t.voi.windowWidth,t.voi.windowCenter,t.invert,t.modalityLUT,t.voiLUT),e.cachedLut.windowWidth=t.voi.windowWidth,e.cachedLut.windowCenter=t.voi.windowCenter,e.cachedLut.invert=t.invert,e.cachedLut.voiLUT=t.voiLUT,e.cachedLut.modalityLUT=t.modalityLUT),e.cachedLut.lutArray}function b(e,t){if(void 0===e)throw new Error("drawImage: enabledElement parameter must not be undefined");var n=e.image;if(void 0===n)throw new Error("drawImage: image must be loaded before it can be drawn");var a=e.canvas.getContext("2d");a.setTransform(1,0,0,1,0,0),a.fillStyle="black",a.fillRect(0,0,e.canvas.width,e.canvas.height),a.imageSmoothingEnabled=!e.viewport.pixelReplication,u(e,a);var i=function(e,t,n){var a=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],i=!0===e.renderingTools.lastRenderedIsColor;e.renderingTools.renderCanvas&&!i||(e.renderingTools.renderCanvas=document.createElement("canvas"),c(e,t));var o=e.renderingTools.renderCanvas;if(!1===l(e,t)&&!0!==n)return o;o.width===t.width&&o.height===t.height||c(e,t),t.stats=t.stats||{};var s=e.renderingTools.renderCanvasData,u=e.renderingTools.renderCanvasContext,d=r();t.stats.lastLutGenerateTime=r()-d;var f=e.viewport;if("PT"===f.modality&&t.isPreScaled){var v=f.voi,m=v.windowWidth,A=v.windowCenter,y=A-m/2,b=255/(A+m/2-y);h(t,f.invert?function(e){return 255-(e-y)*b}:function(e){return(e-y)*b},s.data)}else{var w=S(t,f,n);a?p(t,w,s.data):g(t,w,s.data)}return d=r(),u.putImageData(s,0,0),t.stats.lastPutImageDataTime=r()-d,o}(e,n,t),o=e.viewport.displayedArea.tlhc.x-1,s=e.viewport.displayedArea.tlhc.y-1,f=e.viewport.displayedArea.brhc.x-o,v=e.viewport.displayedArea.brhc.y-s;a.drawImage(i,o,s,f,v,0,0,f,v),e.renderingTools=d(e)}var w=n(22418);var I=function(e,t,n,a){var i=r(),o=e.getPixelData();e.stats.lastGetPixelDataTime=r()-i;var s,u,l=o.length,c=e.minPixelValue,d=0,f=0;if(i=r(),u=n instanceof w.Z?n.Table:n,c<0)for(;f2&&void 0!==arguments[2]?arguments[2]:null;(0,r.T)(e,"getImageScale: parameter canvas must not be undefined"),(0,r.T)(t,"getImageScale: parameter image must not be undefined");var i=(0,a.Z)(t,n),o=t.rowPixelSpacing||1,s=t.columnPixelSpacing||1,u=1,l=1;o1&&void 0!==arguments[1]?arguments[1]:null;return(0,r.T)(e,"getImageSize: parameter image must not be undefined"),(0,r.T)(e.width,"getImageSize: parameter image must have width"),(0,r.T)(e.height,"getImageSize: parameter image must have height"),a(t)?{height:e.width,width:e.height}:{width:e.width,height:e.height}}},77561:function(e,t,n){"use strict";function r(e,t){for(var n=0;n(e=t.componentData[r].grayTransferFunction.getMTime())?n:e):3===t.componentData[r].colorChannels&&t.componentData[r].rGBTransferFunction&&(n=n>(e=t.componentData[r].rGBTransferFunction.getMTime())?n:e),t.componentData[r].scalarOpacity&&(n=n>(e=t.componentData[r].scalarOpacity.getMTime())?n:e),t.componentData[r].gradientOpacity&&(t.componentData[r].disableGradientOpacity||(n=n>(e=t.componentData[r].gradientOpacity.getMTime())?n:e));return n},e.getColorChannels=function(e){return e<0||e>3?(p("Bad index - must be between 0 and 3"),0):t.componentData[e].colorChannels},e.setGrayTransferFunction=function(n,r){var a=!1;return t.componentData[n].grayTransferFunction!==r&&(t.componentData[n].grayTransferFunction=r,a=!0),1!==t.componentData[n].colorChannels&&(t.componentData[n].colorChannels=1,a=!0),a&&e.modified(),a},e.getGrayTransferFunction=function(n){return null===t.componentData[n].grayTransferFunction&&(t.componentData[n].grayTransferFunction=c.ZP.newInstance(),t.componentData[n].grayTransferFunction.addPoint(0,0),t.componentData[n].grayTransferFunction.addPoint(1024,1),1!==t.componentData[n].colorChannels&&(t.componentData[n].colorChannels=1),e.modified()),t.componentData[n].grayTransferFunction},e.setRGBTransferFunction=function(n,r){var a=!1;return t.componentData[n].rGBTransferFunction!==r&&(t.componentData[n].rGBTransferFunction=r,a=!0),3!==t.componentData[n].colorChannels&&(t.componentData[n].colorChannels=3,a=!0),a&&e.modified(),a},e.getRGBTransferFunction=function(n){return null===t.componentData[n].rGBTransferFunction&&(t.componentData[n].rGBTransferFunction=l.ZP.newInstance(),t.componentData[n].rGBTransferFunction.addRGBPoint(0,0,0,0),t.componentData[n].rGBTransferFunction.addRGBPoint(1024,1,1,1),3!==t.componentData[n].colorChannels&&(t.componentData[n].colorChannels=3),e.modified()),t.componentData[n].rGBTransferFunction},e.setScalarOpacity=function(n,r){return t.componentData[n].scalarOpacity!==r&&(t.componentData[n].scalarOpacity=r,e.modified(),!0)},e.getScalarOpacity=function(n){return null===t.componentData[n].scalarOpacity&&(t.componentData[n].scalarOpacity=c.ZP.newInstance(),t.componentData[n].scalarOpacity.addPoint(0,1),t.componentData[n].scalarOpacity.addPoint(1024,1),e.modified()),t.componentData[n].scalarOpacity},e.setComponentWeight=function(n,r){if(n<0||n>=4)return p("Invalid index"),!1;var a=Math.min(1,Math.max(0,r));return t.componentData[n].componentWeight!==a&&(t.componentData[n].componentWeight=a,e.modified(),!0)},e.getComponentWeight=function(e){return e<0||e>=4?(p("Invalid index"),0):t.componentData[e].componentWeight},e.setInterpolationTypeToNearest=function(){return e.setInterpolationType(v.NEAREST)},e.setInterpolationTypeToLinear=function(){return e.setInterpolationType(v.LINEAR)},e.setInterpolationTypeToFastLinear=function(){return e.setInterpolationType(v.FAST_LINEAR)},e.getInterpolationTypeAsString=function(){return i.ZP.enumToString(v,t.interpolationType)};["useGradientOpacity","scalarOpacityUnitDistance","gradientOpacityMinimumValue","gradientOpacityMinimumOpacity","gradientOpacityMaximumValue","gradientOpacityMaximumOpacity","opacityMode"].forEach((function(n){var r=i.ZP.capitalize(n);e["set".concat(r)]=function(r,a){return t.componentData[r]["".concat(n)]!==a&&(t.componentData[r]["".concat(n)]=a,e.modified(),!0)}}));["useGradientOpacity","scalarOpacityUnitDistance","gradientOpacityMinimumValue","gradientOpacityMinimumOpacity","gradientOpacityMaximumValue","gradientOpacityMaximumOpacity","opacityMode"].forEach((function(n){var r=i.ZP.capitalize(n);e["get".concat(r)]=function(e){return t.componentData[e]["".concat(n)]}}))}var g={independentComponents:!0,interpolationType:v.FAST_LINEAR,shade:!1,ambient:.1,diffuse:.7,specular:.2,specularPower:10,useLabelOutline:!1,labelOutlineThickness:1,labelOutlineOpacity:1};function A(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(Object.assign(t,g,n),i.ZP.obj(e,t),!t.componentData){t.componentData=[];for(var r=0;r<4;++r)t.componentData.push({colorChannels:1,grayTransferFunction:null,rGBTransferFunction:null,scalarOpacity:null,scalarOpacityUnitDistance:1,opacityMode:m.FRACTIONAL,gradientOpacityMinimumValue:0,gradientOpacityMinimumOpacity:0,gradientOpacityMaximumValue:1,gradientOpacityMaximumOpacity:1,useGradientOpacity:!1,componentWeight:1})}i.ZP.setGet(e,t,["independentComponents","interpolationType","shade","ambient","diffuse","specular","specularPower","useLabelOutline","labelOutlineThickness","labelOutlineOpacity"]),h(e,t)}var y=function(e){for(var t=1;tn[1])return t.mapperBounds=n.concat(),t.bounds=[1,-1,1,-1,1,-1],t.boundsMTime.modified(),n;var i;if(!t.mapperBounds||!(i=[n,t.mapperBounds],i[0].map((function(e,t){return i.map((function(e){return e[t]}))}))).reduce((function(e,t){return e&&t[0]===t[1]}),!0)||e.getMTime()>t.boundsMTime.getMTime()){S("Recomputing bounds..."),t.mapperBounds=n.map((function(e){return e}));var s=[];o.ZP.getCorners(n,s),e.computeMatrix();var u=new Float64Array(16);r.transpose(u,t.matrix),s.forEach((function(e){return a.transformMat4(e,e,u)})),t.bounds[0]=t.bounds[2]=t.bounds[4]=Number.MAX_VALUE,t.bounds[1]=t.bounds[3]=t.bounds[5]=-Number.MAX_VALUE,t.bounds=t.bounds.map((function(e,t){return t%2==0?s.reduce((function(e,n){return e>n[t/2]?n[t/2]:e}),e):s.reduce((function(e,n){return ee?n:e}return e},e.getRedrawMTime=function(){var e=t.mtime;if(null!==t.mapper){var n=t.mapper.getMTime();e=n>e?n:e,null!==t.mapper.getInput()&&(t.mapper.getInputAlgorithm().update(),e=(n=t.mapper.getInput().getMTime())>e?n:e)}return e}}var w={mapper:null,property:null,bounds:[1,-1,1,-1,1,-1]};function I(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,w,n),s.ZP.extend(e,t,n),t.boundsMTime={},i.ZP.obj(t.boundsMTime),i.ZP.set(e,t,["property"]),i.ZP.setGet(e,t,["mapper"]),i.ZP.getArray(e,t,["bounds"],6),b(e,t)}var E={newInstance:i.ZP.newInstance(I,"vtkVolume"),extend:I},C=n(52670),D=n(28582),_=n(85155),M=n(72682),O=n(84585),P=n(27306),T=n(19384),x=n(45500),R=n(8602);function L(e){return L="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},L(e)}function k(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function N(e){for(var t=1;t=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var s=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(s&&u){if(this.prev=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),w(n),c}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var a=r.arg;w(n)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:E(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),c}},e}function U(e,t,n,r,a,i,o){try{var s=e[i](o),u=s.value}catch(e){return void n(e)}s.done?t(u):Promise.resolve(u).then(r,a)}function V(e){return function(){var t=this,n=arguments;return new Promise((function(r,a){var i=e.apply(t,n);function o(e){U(i,r,a,o,s,"next",e)}function s(e){U(i,r,a,o,s,"throw",e)}o(void 0)}))}}var j=R.Z.Prefetch;function G(){return(G=V(B().mark((function e(t,n){var r,a,i,o;return B().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=Q(n)){e.next=5;break}return e.next=4,q(n);case 4:r=e.sent;case 5:if(r&&void 0!==r.lower&&void 0!==r.upper){e.next=7;break}throw new Error("Could not get VOI from metadata, nor from the min max of the image middle slice");case 7:r=H(n,r),i=(a=r).lower,o=a.upper,t.getProperty().getRGBTransferFunction(0).setMappingRange(i,o);case 10:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function H(e,t){var n=e.imageIds,r=n[Math.floor(n.length/2)];return"PT"===(P.get("generalSeriesModule",r)||{}).modality&&e.isPrescaled?{lower:0,upper:5}:t}function Q(e){var t=e.imageIds,n=t[Math.floor(t.length/2)],r=P.get("voiLutModule",n);if(r&&r.windowWidth&&r.windowCenter){var a=r.windowWidth,i=r.windowCenter,o={windowWidth:Array.isArray(a)?a[0]:a,windowCenter:Array.isArray(i)?i[0]:i},s=T.toLowHighRange(Number(o.windowWidth),Number(o.windowCenter));return{lower:s.lower,upper:s.upper}}}function q(e){return z.apply(this,arguments)}function z(){return(z=V(B().mark((function e(t){var n,r,a,i,o,s,u,l,c,d,f,v,m,p,h,g,A,y,S,b,w;return B().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=t.scalarData,r=t.imageIds,a=Math.floor(r.length/2),i=t.imageIds[a],o=P.get("generalSeriesModule",i)||{},s=o.modality,u=P.get("modalityLutModule",i)||{},l=r.length,c=n.byteLength/l,d=n.length/l,f=n.BYTES_PER_ELEMENT,!(n instanceof Uint8Array)){e.next=14;break}"Uint8Array",e.next=19;break;case 14:if(!(n instanceof Float32Array)){e.next=18;break}"Float32Array",e.next=19;break;case 18:throw new Error("Unsupported array type");case 19:return v={rescaleSlope:u.rescaleSlope,rescaleIntercept:u.rescaleIntercept,modality:s},"PT"===s&&(p=P.get("scalingModule",i))&&(m=N(N({},v),{},{suvbw:p.suvbw})),h=a*c,g={priority:0,requestType:j,preScale:{enabled:!0,scalingParameters:m}},e.next=25,(0,O.loadAndCacheImage)(i,g);case 25:return A=e.sent,y=A?A.getPixelData():W(t,h,f,d),S=(0,x.Z)(y),b=S.min,w=S.max,e.abrupt("return",{lower:b,upper:w});case 29:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function W(e,t,n,r){var a=e.scalarData,i=a.volumeBuffer;a.BYTES_PER_ELEMENT!==n&&(t*=a.BYTES_PER_ELEMENT/n);var o=a.constructor,s=new o(r),u=new o(i,t,r);return s.set(u),s}var Y=function(e,t){return G.apply(this,arguments)};function Z(e){return Z="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Z(e)}function K(){K=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},a=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",o=r.toStringTag||"@@toStringTag";function s(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{s({},"")}catch(e){s=function(e,t,n){return e[t]=n}}function u(e,t,n,r){var a=t&&t.prototype instanceof d?t:d,i=Object.create(a.prototype),o=new I(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(a,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===a)throw i;return C()}for(n.method=a,n.arg=i;;){var o=n.delegate;if(o){var s=S(o,n);if(s){if(s===c)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var u=l(e,t,n);if("normal"===u.type){if(r=n.done?"completed":"suspendedYield",u.arg===c)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(r="completed",n.method="throw",n.arg=u.arg)}}}(e,n,o),i}function l(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var c={};function d(){}function f(){}function v(){}var m={};s(m,a,(function(){return this}));var p=Object.getPrototypeOf,h=p&&p(p(E([])));h&&h!==t&&n.call(h,a)&&(m=h);var g=v.prototype=d.prototype=Object.create(m);function A(e){["next","throw","return"].forEach((function(t){s(e,t,(function(e){return this._invoke(t,e)}))}))}function y(e,t){function r(a,i,o,s){var u=l(e[a],e,i);if("throw"!==u.type){var c=u.arg,d=c.value;return d&&"object"==Z(d)&&n.call(d,"__await")?t.resolve(d.__await).then((function(e){r("next",e,o,s)}),(function(e){r("throw",e,o,s)})):t.resolve(d).then((function(e){c.value=e,o(c)}),(function(e){return r("throw",e,o,s)}))}s(u.arg)}var a;this._invoke=function(e,n){function i(){return new t((function(t,a){r(e,n,t,a)}))}return a=a?a.then(i,i):i()}}function S(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,S(e,t),"throw"===t.method))return c;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return c}var r=l(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,c;var a=r.arg;return a?a.done?(t[e.resultName]=a.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,c):a:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,c)}function b(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function w(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function I(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(b,this),this.reset(!0)}function E(e){if(e){var t=e[a];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var s=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(s&&u){if(this.prev=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),w(n),c}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var a=r.arg;w(n)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:E(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),c}},e}function X(e,t,n,r,a,i,o){try{var s=e[i](o),u=s.value}catch(e){return void n(e)}s.done?t(u):Promise.resolve(u).then(r,a)}function $(e){return function(){var t=this,n=arguments;return new Promise((function(r,a){var i=e.apply(t,n);function o(e){X(i,r,a,o,s,"next",e)}function s(e){X(i,r,a,o,s,"throw",e)}o(void 0)}))}}function J(){return J=$(K().mark((function e(t,n,r){var a,i,o,s,u,l,c,d,f,v=arguments;return K().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a=v.length>3&&void 0!==v[3]&&v[3],i=t.volumeId,o=t.callback,s=t.blendMode,e.next=4,(0,C.loadVolume)(i);case 4:if(u=e.sent){e.next=7;break}throw new Error("imageVolume with id: ".concat(u.volumeId," does not exist"));case 7:if(l=u.imageData,c=u.vtkOpenGLTexture,d=(0,D.Z)(l,c),s&&d.setBlendMode(s),(f=E.newInstance()).setMapper(d),!u.imageIds){e.next=15;break}return e.next=15,Y(f,u);case 15:return o&&o({volumeActor:f,volumeId:i}),a||ee(n,r,f,i),e.abrupt("return",f);case 18:case"end":return e.stop()}}),e)}))),J.apply(this,arguments)}function ee(e,t,n,r){var a=n.getProperty().getRGBTransferFunction(0).getRange(),i={viewportId:t,range:{lower:a[0],upper:a[1]},volumeId:r};(0,_.Z)(e,M.Z.VOI_MODIFIED,i)}var te=function(e,t,n){return J.apply(this,arguments)}},28582:function(e,t,n){"use strict";n.d(t,{Z:function(){return I}});var r=n(92393),a=n(47169),i=n(43739),o=n(17236),s=n(54620),u=n(17394);function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;t=1?e:1)},e.setAnisotropy=function(e){return n.setAnisotropy((0,i.D)(e,-.99,.99))},e.setLAOKernelSize=function(e){return n.setLAOKernelSize((0,i.K)((0,i.D)(e,1,32)))},e.setLAOKernelRadius=function(e){return n.setLAOKernelRadius(e>=1?e:1)}}var p={bounds:[1,-1,1,-1,1,-1],sampleDistance:1,imageSampleDistance:1,maximumSamplesPerRay:1e3,autoAdjustSampleDistances:!0,blendMode:d.COMPOSITE_BLEND,ipScalarRange:[-1e6,1e6],filterMode:f.OFF,preferSizeOverAccuracy:!1,computeNormalFromOpacity:!1,volumetricScatteringBlending:0,globalIlluminationReach:0,volumeShadowSamplingDistFactor:5,anisotropy:0,localAmbientOcclusion:!1,LAOKernelSize:15,LAOKernelRadius:7};function h(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,p,n),s.Z.extend(e,t,n),r.ZP.setGet(e,t,["sampleDistance","imageSampleDistance","maximumSamplesPerRay","autoAdjustSampleDistances","blendMode","filterMode","preferSizeOverAccuracy","computeNormalFromOpacity","volumetricScatteringBlending","globalIlluminationReach","volumeShadowSamplingDistFactor","anisotropy","localAmbientOcclusion","LAOKernelSize","LAOKernelRadius"]),r.ZP.setGetArray(e,t,["ipScalarRange"],2),r.ZP.event(e,t,"lightingActivated"),m(e,t)}var g=c({newInstance:r.ZP.newInstance(h,"vtkVolumeMapper"),extend:h},v);function A(e,t){t.classHierarchy.push("vtkSharedVolumeMapper");var n=e.delete;e.delete=function(){t.scalarTexture=null,n()}}var y={scalarTexture:null};function S(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,y,n),g.extend(e,t,n),r.ZP.setGet(e,t,["scalarTexture"]),A(e,t)}var b={newInstance:r.ZP.newInstance(S,"vtkSharedVolumeMapper"),extend:S},w=n(4145);function I(e,t){var n=b.newInstance();(0,w.P_)().rendering.preferSizeOverAccuracy&&n.setPreferSizeOverAccuracy(!0),n.setInputData(e);var r=e.getSpacing(),a=(r[0]+r[1]+r[2])/6;return n.setMaximumSamplesPerRay(4e3),n.setSampleDistance(a),n.setScalarTexture(t),n}},93656:function(e,t){"use strict";var n={},r={get:function(e){return n[e]},set:function(e){var t=e.id;n[t]=e},delete:function(e){return delete n[e]},getAll:function(){return Object.keys(n).map((function(e){return n[e]}))}};t.Z=r},18685:function(e,t,n){"use strict";var r=n(85155),a=n(24613),i=n(41841),o=n(72682);function s(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return u(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return u(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,a=function(){};return{s:a,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw i}}}}function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);ne},this.getMaxCacheSize=function(){return t._maxCacheSize},this.getCacheSize=function(){return t._imageCacheSize+t._volumeCacheSize},this._decacheImage=function(e){var n=t._imageCache.get(e).imageLoadObject;n.cancelFn&&n.cancelFn(),n.decache&&n.decache(),t._imageCache.delete(e)},this._decacheVolume=function(e){var n=t._volumeCache.get(e),r=n.volumeLoadObject,a=n.volume;a.cancelLoading&&a.cancelLoading(),a.imageData&&(a.imageData=null),r.cancelFn&&r.cancelFn(),r.decache&&r.decache(),t._volumeCache.delete(e)},this.purgeCache=function(){for(var e=t._imageCache.keys();;){var n=e.next(),a=n.value;if(n.done)break;t.removeImageLoadObject(a),(0,r.Z)(i.Z,o.Z.IMAGE_CACHE_IMAGE_REMOVED,{imageId:a})}t.purgeVolumeCache()},this.purgeVolumeCache=function(){for(var e=t._volumeCache.keys();;){var n=e.next(),a=n.value;if(n.done)break;t.removeVolumeLoadObject(a),(0,r.Z)(i.Z,o.Z.VOLUME_CACHE_VOLUME_REMOVED,{volumeId:a})}},this.getVolumeLoadObject=function(e){if(void 0===e)throw new Error("getVolumeLoadObject: volumeId must not be undefined");var n=t._volumeCache.get(e);if(void 0!==n)return n.timeStamp=Date.now(),n.volumeLoadObject},this.getVolume=function(e){if(void 0===e)throw new Error("getVolume: volumeId must not be undefined");var n=t._volumeCache.get(e);if(void 0!==n)return n.timeStamp=Date.now(),n.volume},this.removeImageLoadObject=function(e){if(void 0===e)throw new Error("removeImageLoadObject: imageId must not be undefined");var n=t._imageCache.get(e);if(void 0===n)throw new Error("removeImageLoadObject: imageId was not present in imageCache");t._incrementImageCacheSize(-n.sizeInBytes);var a={imageId:e};(0,r.Z)(i.Z,o.Z.IMAGE_CACHE_IMAGE_REMOVED,a),t._decacheImage(e)},this.removeVolumeLoadObject=function(e){if(void 0===e)throw new Error("removeVolumeLoadObject: volumeId must not be undefined");var n=t._volumeCache.get(e);if(void 0===n)throw new Error("removeVolumeLoadObject: volumeId was not present in volumeCache");t._incrementVolumeCacheSize(-n.sizeInBytes);var a={volume:n,volumeId:e};(0,r.Z)(i.Z,o.Z.VOLUME_CACHE_VOLUME_REMOVED,a),t._decacheVolume(e)},this._incrementImageCacheSize=function(e){t._imageCacheSize+=e},this._incrementVolumeCacheSize=function(e){t._volumeCacheSize+=e},this._imageCache=new Map,this._volumeCache=new Map,this._imageCacheSize=0,this._volumeCacheSize=0,this._maxCacheSize=1073741824}var t,n,u;return t=e,(n=[{key:"getBytesAvailable",value:function(){return this.getMaxCacheSize()-this.getCacheSize()}},{key:"decacheIfNecessaryUntilBytesAvailable",value:function(e,t){var n=this.getBytesAvailable();if(n>=e)return n;var a=Array.from(this._imageCache.values());a.sort((function(e,t){return e.timeStamp>t.timeStamp?1:e.timeStamp=e)return n}}catch(e){d.e(e)}finally{d.f()}var v,m=s(u=(a=Array.from(this._imageCache.values())).map((function(e){return e.imageId})));try{for(m.s();!(v=m.n()).done;){var p=v.value;if(this.removeImageLoadObject(p),(0,r.Z)(i.Z,o.Z.IMAGE_CACHE_IMAGE_REMOVED,{imageId:p}),(n=this.getBytesAvailable())>=e)return n}}catch(e){m.e(e)}finally{m.f()}}},{key:"putImageLoadObject",value:function(e,t){var n=this;if(void 0===e)throw new Error("putImageLoadObject: imageId must not be undefined");if(void 0===t.promise)throw new Error("putImageLoadObject: imageLoadObject.promise must not be undefined");if(this._imageCache.has(e))throw new Error("putImageLoadObject: imageId already in cache");if(t.cancelFn&&"function"!=typeof t.cancelFn)throw new Error("putImageLoadObject: imageLoadObject.cancel must be a function");var a={loaded:!1,imageId:e,sharedCacheKey:void 0,imageLoadObject:t,timeStamp:Date.now(),sizeInBytes:0};return this._imageCache.set(e,a),t.promise.then((function(t){if(n._imageCache.get(e)){if(void 0===t.sizeInBytes)throw new Error("putImageLoadObject: image.sizeInBytes must not be undefined");if(void 0===t.sizeInBytes.toFixed)throw new Error("putImageLoadObject: image.sizeInBytes is not a number");if(!n.isCacheable(t.sizeInBytes))throw new Error(o.Z.CACHE_SIZE_EXCEEDED);n.decacheIfNecessaryUntilBytesAvailable(t.sizeInBytes),a.loaded=!0,a.image=t,a.sizeInBytes=t.sizeInBytes,n._incrementImageCacheSize(a.sizeInBytes);var s={image:a};(0,r.Z)(i.Z,o.Z.IMAGE_CACHE_IMAGE_ADDED,s),a.sharedCacheKey=t.sharedCacheKey}else console.warn("The image was purged from the cache before it completed loading.")})).catch((function(t){throw n._imageCache.delete(e),t}))}},{key:"getImageLoadObject",value:function(e){if(void 0===e)throw new Error("getImageLoadObject: imageId must not be undefined");var t=this._imageCache.get(e);if(void 0!==t)return t.timeStamp=Date.now(),t.imageLoadObject}},{key:"isImageIdCached",value:function(e){var t=this._imageCache.get(e);return!!t&&t.loaded}},{key:"getVolumeContainingImageId",value:function(e){for(var t=Array.from(this._volumeCache.keys()),n=(0,a.Z)(e),r=0,i=t;r-1)return{volume:s.volume,imageIdIndex:l}}}}},{key:"getCachedImageBasedOnImageURI",value:function(e){var t=(0,a.Z)(e),n=Array.from(this._imageCache.keys()).find((function(e){return(0,a.Z)(e)===t}));if(n)return this._imageCache.get(n)}},{key:"putVolumeLoadObject",value:function(e,t){var n=this;if(void 0===e)throw new Error("putVolumeLoadObject: volumeId must not be undefined");if(void 0===t.promise)throw new Error("putVolumeLoadObject: volumeLoadObject.promise must not be undefined");if(this._volumeCache.has(e))throw new Error("putVolumeLoadObject: volumeId:".concat(e," already in cache"));if(t.cancelFn&&"function"!=typeof t.cancelFn)throw new Error("putVolumeLoadObject: volumeLoadObject.cancel must be a function");var a={loaded:!1,volumeId:e,volumeLoadObject:t,timeStamp:Date.now(),sizeInBytes:0};return this._volumeCache.set(e,a),t.promise.then((function(t){if(n._volumeCache.get(e)){if(void 0===t.sizeInBytes)throw new Error("putVolumeLoadObject: volume.sizeInBytes must not be undefined");if(void 0===t.sizeInBytes.toFixed)throw new Error("putVolumeLoadObject: volume.sizeInBytes is not a number");n.decacheIfNecessaryUntilBytesAvailable(t.sizeInBytes,t.imageIds),a.volume=t,a.sizeInBytes=t.sizeInBytes,n._incrementVolumeCacheSize(a.sizeInBytes);var s={volume:a};(0,r.Z)(i.Z,o.Z.VOLUME_CACHE_VOLUME_ADDED,s)}else console.warn("The image was purged from the cache before it completed loading.")})).catch((function(t){throw n._volumeCache.delete(e),t}))}}])&&l(t.prototype,n),u&&l(t,u),Object.defineProperty(t,"prototype",{writable:!1}),e}());t.Z=c},94651:function(e,t,n){"use strict";n.d(t,{J:function(){return d},Z:function(){return f}});var r=n(92393),a=n(82331);function i(e,t){t.classHierarchy.push("vtkStreamingOpenGLTexture");var n=e.create3DFilterableFromRaw;e.create3DFilterableFromRaw=function(e,r,a,i,o,s,u){t.inputDataType=o,t.inputNumComps=i,n(e,r,a,i,o,s,u)},e.update3DFromRaw=function(n){var r=t.updatedFrames;if(r.length){var a,i;if(t._openGLRenderWindow.activateTexture(e),e.createTexture(),e.bind(),n instanceof Uint8Array)a=1,i=Uint8Array;else if(n instanceof Int16Array)a=2,i=Int16Array;else if(n instanceof Uint16Array)a=2,i=Uint16Array;else{if(!(n instanceof Float32Array))throw new Error("No support for given TypedArray.");a=4,i=Float32Array}for(var o=0;o2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,o,n),a.ZP.extend(e,t,n),i(e,t)}var u={newInstance:r.ZP.newInstance(s,"vtkStreamingOpenGLTexture"),extend:s};function l(e,t){for(var n=0;n=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,u=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return s=e.done,e},e:function(e){u=!0,o=e},f:function(){try{s||null==n.return||n.return()}finally{if(u)throw o}}}}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&void 0!==arguments[1]?arguments[1]:{priority:0,requestType:"prefetch"};if(void 0===e)throw new Error("loadImage: parameter imageId must not be undefined");return c(e,t).promise}function f(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{priority:0,requestType:"prefetch"};if(void 0===e)throw new Error("loadAndCacheImage: parameter imageId must not be undefined");var n=c(e,t);return a.Z.getImageLoadObject(e)||a.Z.putImageLoadObject(e,n).catch((function(e){console.warn(e)})),n.promise}function v(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{priority:0,requestType:"prefetch"};if(!e||0===e.length)throw new Error("loadAndCacheImages: parameter imageIds must be list of image Ids");var n=e.map((function(e){return f(e,t)}));return n}function m(e){u.Z.filterRequests((function(t){var n=t.additionalDetails;return!n.imageId||n.imageId!==e}));var t=a.Z.getImageLoadObject(e);t&&t.cancelFn()}function p(e){e.forEach((function(e){return m(e)}))}function h(){var e=u.Z.getRequestPool();Object.keys(e).forEach((function(t){var n=e[t];Object.keys(n).forEach((function(e){var t,r=n[e].pop().additionalDetails,i=r.imageId,o=r.volumeId;i?t=a.Z.getImageLoadObject(i):o&&(t=a.Z.getVolumeLoadObject(o)),t&&t.cancel()})),u.Z.clearRequestStack(t)}))}function g(e,t){l[e]=t}function A(e){var t=r;return r=e,t}function y(){Object.keys(l).forEach((function(e){return delete l[e]})),r=void 0}},4145:function(e,t,n){"use strict";function r(e,t,n,r){return new(n||(n=Promise))((function(a,i){function o(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(o,s)}u((r=r.apply(e,t||[])).next())}))}n.d(t,{P_:function(){return F},L_:function(){return x},hG:function(){return k},pv:function(){return D},Xn:function(){return U},S1:function(){return M},uF:function(){return N},Y0:function(){return T},zr:function(){return L},wy:function(){return B},dQ:function(){return P},fK:function(){return R}});const a=["geforce 320m","geforce 8600","geforce 8600m gt","geforce 8800 gs","geforce 8800 gt","geforce 9400","geforce 9400m g","geforce 9400m","geforce 9600m gt","geforce 9600m","geforce fx go5200","geforce gt 120","geforce gt 130","geforce gt 330m","geforce gtx 285","google swiftshader","intel g41","intel g45","intel gma 4500mhd","intel gma x3100","intel hd 3000","intel q45","legacy","mali-2","mali-3","mali-4","quadro fx 1500","quadro fx 4","quadro fx 5","radeon hd 2400","radeon hd 2600","radeon hd 4670","radeon hd 4850","radeon hd 4870","radeon hd 5670","radeon hd 5750","radeon hd 6290","radeon hd 6300","radeon hd 6310","radeon hd 6320","radeon hd 6490m","radeon hd 6630m","radeon hd 6750m","radeon hd 6770m","radeon hd 6970m","sgx 543","sgx543"];function i(e){return e.toLowerCase().replace(/^angle ?\((.+)\)*$/,"$1").replace(/\s(\d{1,2}gb|direct3d.+$)|\(r\)| \([^)]+\)$/g,"")}const o="undefined"==typeof window,s=(()=>{if(o)return;const{userAgent:e,platform:t,maxTouchPoints:n}=window.navigator,r=/(iphone|ipod|ipad)/i.test(e),a="iPad"===t||"MacIntel"===t&&n>0&&!window.MSStream;return{isIpad:a,isMobile:/android/i.test(e)||r||a,isSafari12:/Version\/12.+Safari/.test(e)}})();const u=[],l=[];function c(e,t){if(e===t)return 0;const n=e;e.length>t.length&&(e=t,t=n);let r=e.length,a=t.length;for(;r>0&&e.charCodeAt(~-r)===t.charCodeAt(~-a);)r--,a--;let i,o=0;for(;od?c>d?d+1:c:c>s?s+1:c;return d}function d(e){return null!=e}class f extends Error{constructor(e){super(e),Object.setPrototypeOf(this,new.target.prototype)}}const v=({mobileTiers:e=[0,15,30,60],desktopTiers:t=[0,15,30,60],override:n={},glContext:u,failIfMajorPerformanceCaveat:l=!1,benchmarksURL:v="https://unpkg.com/detect-gpu@4.0.24/dist/benchmarks"}={})=>r(void 0,void 0,void 0,(function*(){const m={};if(o)return{tier:0,type:"SSR"};const{isIpad:p=!!(null==s?void 0:s.isIpad),isMobile:h=!!(null==s?void 0:s.isMobile),screenSize:g=window.screen,loadBenchmarks:A=(e=>r(void 0,void 0,void 0,(function*(){const t=yield fetch(`${v}/${e}`).then((e=>e.json()));if(parseInt(t.shift().split(".")[0],10)<4)throw new f("Detect GPU benchmark data is out of date. Please update to version 4x");return t})))}=n;let{renderer:y}=n;const S=(e,t,n,r,a)=>({device:a,fps:r,gpu:n,isMobile:h,tier:e,type:t});let b,w="";if(y)y=i(y),b=[y];else{const e=u||function(e,t=!1){const n={alpha:!1,antialias:!1,depth:!1,failIfMajorPerformanceCaveat:t,powerPreference:"high-performance",stencil:!1};e&&delete n.powerPreference;const r=window.document.createElement("canvas"),a=r.getContext("webgl",n)||r.getContext("experimental-webgl",n);return null!=a?a:void 0}(null==s?void 0:s.isSafari12,l);if(!e)return S(0,"WEBGL_UNSUPPORTED");const t=e.getExtension("WEBGL_debug_renderer_info");if(t&&(y=e.getParameter(t.UNMASKED_RENDERER_WEBGL)),!y)return S(1,"FALLBACK");w=y,y=i(y),b=function(e,t,n){return"apple gpu"===t?function(e,t,n){if(!n)return[t];const r=function(e){const t=e.createShader(35633),n=e.createShader(35632),r=e.createProgram();if(!(n&&t&&r))return;e.shaderSource(t,"\n precision highp float;\n attribute vec3 aPosition;\n varying float vvv;\n void main() {\n vvv = 0.31622776601683794;\n gl_Position = vec4(aPosition, 1.0);\n }\n "),e.shaderSource(n,"\n precision highp float;\n varying float vvv;\n void main() {\n vec4 enc = vec4(1.0, 255.0, 65025.0, 16581375.0) * vvv;\n enc = fract(enc);\n enc -= enc.yzww * vec4(1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0, 0.0);\n gl_FragColor = enc;\n }\n "),e.compileShader(t),e.compileShader(n),e.attachShader(r,t),e.attachShader(r,n),e.linkProgram(r),e.detachShader(r,t),e.detachShader(r,n),e.deleteShader(t),e.deleteShader(n),e.useProgram(r);const a=e.createBuffer();e.bindBuffer(34962,a),e.bufferData(34962,new Float32Array([-1,-1,0,3,-1,0,-1,3,0]),35044);const i=e.getAttribLocation(r,"aPosition");e.vertexAttribPointer(i,3,5126,!1,0,0),e.enableVertexAttribArray(i),e.clearColor(1,1,1,1),e.clear(16384),e.viewport(0,0,1,1),e.drawArrays(4,0,3);const o=new Uint8Array(4);return e.readPixels(0,0,1,1,6408,5121,o),e.deleteProgram(r),e.deleteBuffer(a),o.join("")}(e),a="801621810",i="8016218135",o="80162181161",u=(null==s?void 0:s.isIpad)?[["a7",o,12],["a8",i,15],["a8x",i,15],["a9",i,15],["a9x",i,15],["a10",i,15],["a10x",i,15],["a12",a,15],["a12x",a,15],["a12z",a,15],["a14",a,15],["m1",a,15]]:[["a7",o,12],["a8",i,12],["a9",i,15],["a10",i,15],["a11",a,15],["a12",a,15],["a13",a,15],["a14",a,15]];let l;return"80162181255"===r?l=u.filter((([,,e])=>e>=14)):(l=u.filter((([,e])=>e===r)),l.length||(l=u)),l.map((([e])=>`apple ${e} gpu`))}(e,t,n):[t]}(e,y,h)}const I=(yield Promise.all(b.map((e=>r(void 0,void 0,void 0,(function*(){var t;const n=(e=>{const t=h?["adreno","apple","mali-t","mali","nvidia","powervr"]:["intel","apple","amd","radeon","nvidia","geforce"];for(const n of t)if(e.includes(n))return n})(e);if(!n)return;const r=`${h?"m":"d"}-${n}${p?"-ipad":""}.json`,a=m[r]=null!==(t=m[r])&&void 0!==t?t:A(r);let i;try{i=yield a}catch(t){if(t instanceof f)throw t;return}const o=function(e){var t;const n=(e=e.replace(/\([^)]+\)/,"")).match(/\d+/)||e.match(/(\W|^)([A-Za-z]{1,3})(\W|$)/g);return null!==(t=null==n?void 0:n.join("").replace(/\W|amd/g,""))&&void 0!==t?t:""}(e);let s=i.filter((([,e])=>e===o));s.length||(s=i.filter((([t])=>t.includes(e))));const u=s.length;if(0===u)return;let l,[d,,,v]=u>1?s.map((t=>[t,c(e,t[0])])).sort((([,e],[,t])=>e-t))[0][0]:s[0],y=Number.MAX_VALUE;const{devicePixelRatio:S}=window,b=g.width*S*g.height*S;for(const e of v){const[t,n]=e,r=t*n,a=Math.abs(b-r);ae===n?t-r:e-n));if(!I.length){const e=a.find((e=>y.includes(e)));return e?S(0,"BLOCKLISTED",e):S(1,"FALLBACK",`${y} (${w})`)}const[,E,C,D]=I[0];if(-1===E)return S(0,"BLOCKLISTED",C,E,D);const _=h?e:t;let M=0;for(let e=0;e<_.length;e++)E>=_[e]&&(M=e);return S(M,"BENCHMARK",C,E,D)}));var m=n(1087),p=n(14263);function h(e){return h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},h(e)}function g(){g=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},a=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",o=r.toStringTag||"@@toStringTag";function s(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{s({},"")}catch(e){s=function(e,t,n){return e[t]=n}}function u(e,t,n,r){var a=t&&t.prototype instanceof d?t:d,i=Object.create(a.prototype),o=new C(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(a,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===a)throw i;return _()}for(n.method=a,n.arg=i;;){var o=n.delegate;if(o){var s=w(o,n);if(s){if(s===c)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var u=l(e,t,n);if("normal"===u.type){if(r=n.done?"completed":"suspendedYield",u.arg===c)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(r="completed",n.method="throw",n.arg=u.arg)}}}(e,n,o),i}function l(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var c={};function d(){}function f(){}function v(){}var m={};s(m,a,(function(){return this}));var p=Object.getPrototypeOf,A=p&&p(p(D([])));A&&A!==t&&n.call(A,a)&&(m=A);var y=v.prototype=d.prototype=Object.create(m);function S(e){["next","throw","return"].forEach((function(t){s(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(a,i,o,s){var u=l(e[a],e,i);if("throw"!==u.type){var c=u.arg,d=c.value;return d&&"object"==h(d)&&n.call(d,"__await")?t.resolve(d.__await).then((function(e){r("next",e,o,s)}),(function(e){r("throw",e,o,s)})):t.resolve(d).then((function(e){c.value=e,o(c)}),(function(e){return r("throw",e,o,s)}))}s(u.arg)}var a;this._invoke=function(e,n){function i(){return new t((function(t,a){r(e,n,t,a)}))}return a=a?a.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return c;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return c}var r=l(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,c;var a=r.arg;return a?a.done?(t[e.resultName]=a.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,c):a:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,c)}function I(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(I,this),this.reset(!0)}function D(e){if(e){var t=e[a];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var s=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(s&&u){if(this.prev=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),c}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var a=r.arg;E(n)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:D(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),c}},e}function A(e,t,n,r,a,i,o){try{var s=e[i](o),u=s.value}catch(e){return void n(e)}s.done?t(u):Promise.resolve(u).then(r,a)}function y(e){return function(){var t=this,n=arguments;return new Promise((function(r,a){var i=e.apply(t,n);function o(e){A(i,r,a,o,s,"next",e)}function s(e){A(i,r,a,o,s,"throw",e)}o(void 0)}))}}var S=!1,b=!0,w=m.Z.AUTO,I={detectGPU:{},rendering:{preferSizeOverAccuracy:!0,useCPURendering:!1,hasNorm16TextureSupport:_()}},E={detectGPU:{},rendering:{preferSizeOverAccuracy:!0,useCPURendering:!1,hasNorm16TextureSupport:_()}};function C(){var e=document.createElement("canvas");return e.getContext("webgl2")||e.getContext("webgl")||e.getContext("experimental-webgl")}function D(){var e=C();if(e&&e.getExtension&&e.getExtension("EXT_texture_norm16"))return!0;return!1}function _(){var e=C();if(e&&e.getExtension("EXT_texture_norm16"))return!0;return!1}function M(){return O.apply(this,arguments)}function O(){return O=y(g().mark((function e(){var t,n,r=arguments;return g().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=r.length>0&&void 0!==r[0]?r[0]:{},!S){e.next=3;break}return e.abrupt("return",S);case 3:if(E=(0,p.Z)(I,t),D()){e.next=10;break}console.log("CornerstoneRender: GPU not detected, using CPU rendering"),E.rendering.useCPURendering=!0,e.next=16;break;case 10:return e.next=12,v();case 12:n=e.sent,E.detectGPU=n,console.log("CornerstoneRender: Using detect-gpu to get the GPU benchmark:",n),n.tier<1?(console.log("CornerstoneRender: GPU is not powerful enough, using CPU rendering"),E.rendering.useCPURendering=!0):console.log("CornerstoneRender: using GPU rendering");case 16:return R(w),S=!0,e.abrupt("return",S);case 19:case"end":return e.stop()}}),e)}))),O.apply(this,arguments)}function P(e){E.rendering.useCPURendering=e,S=!0}function T(){E.rendering.useCPURendering=!D()}function x(){return E.rendering.useCPURendering}function R(e){return e==m.Z.AUTO?(w=m.Z.AUTO,void(function(){try{return!!new SharedArrayBuffer(0)}catch(e){return!1}}()?(b=!0,console.log("CornerstoneRender: using SharedArrayBuffer")):(b=!1,console.warn("CornerstoneRender: SharedArray Buffer not allowed, performance may be slower.\n Try ensuring page is cross-origin isolated to enable SharedArrayBuffer.")))):e==m.Z.TRUE||1==e?(w=m.Z.TRUE,void(b=!0)):e==m.Z.FALSE||0==e?(w=m.Z.FALSE,void(b=!1)):void 0}function L(){R(w)}function k(){return b}function N(){return S}function F(){return E}function B(e){E.rendering.preferSizeOverAccuracy=e}function U(){return E.rendering.hasNorm16TextureSupport}},27306:function(e,t,n){"use strict";n.r(t),n.d(t,{addProvider:function(){return a},get:function(){return s},removeAllProviders:function(){return o},removeProvider:function(){return i}});var r=[];function a(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;for(t=0;t0;)r.pop()}function s(e,t){for(var n=0;n=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,s=!0,u=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return s=e.done,e},e:function(e){u=!0,i=e},f:function(){try{s||null==n.return||n.return()}finally{if(u)throw i}}}}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n3&&void 0!==arguments[3]?arguments[3]:0,i={requestFn:e,type:t,additionalDetails:n};void 0===this.requestPool[t][a]&&(this.requestPool[t][a]=[]),this.requestPool[t][a].push(i),this.awake?t===r.Z.Interaction&&this.startGrabbing():(this.awake=!0,this.startGrabbing())}},{key:"filterRequests",value:function(e){var t=this;Object.keys(this.requestPool).forEach((function(n){var r=t.requestPool[n];Object.keys(r).forEach((function(t){r[t]=r[t].filter((function(t){return e(t)}))}))}))}},{key:"clearRequestStack",value:function(e){if(!this.requestPool[e])throw new Error("No category for the type ".concat(e," found"));this.requestPool[e]={0:[]}}},{key:"sendRequests",value:function(e){for(var t=this,n=this.maxNumRequests[e]-this.numRequests[e],r=0;r0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,r=Array.isArray(t),s=n||{arrayMerge:i},u=s.arrayMerge||i;return r?Array.isArray(e)?u(e,t,n):a(t,n):o(e,t,n)};t.Z=s},33318:function(e,t,n){"use strict";var r=n(26333),a=n(4962);t.Z=function(e){var t=e.getCamera(),n=(0,a.Z)(e,t),i=n.spacingInNormalDirection,o=n.imageVolume;if(o){var s=t.viewPlaneNormal,u=t.focalPoint,l=e.getActors().find((function(e){return e.referenceId===o.volumeId||e.uid===o.volumeId}));l||console.warn("No actor found for with actorUID of",o.volumeId);var c=l.actor,d=(0,r.Z)(c,s,u),f=d.min,v=d.max,m=d.current,p=Math.round((v-f)/i)+1,h=(m-f)/(v-f)*p;return(h=Math.floor(h))>p-1?h=p-1:h<0&&(h=0),{numberOfSlices:p,imageIndex:h}}}},45500:function(e,t,n){"use strict";function r(e){for(var t,n=e[0],r=e[0],a=e.length,i=1;ie.length)&&(t=e.length);for(var n=0,r=new Array(t);nd&&(d=v),v2&&void 0!==arguments[2]?arguments[2]:1e-5;if(e.length!==t.length)return!1;for(var r=0;rn)return!1;return!0}n.d(t,{Z:function(){return r}})},82698:function(e,t,n){"use strict";function r(e){return!!e.isA("vtkVolume")||!!e.isA("vtkImageSlice")}n.d(t,{Z:function(){return r}})},39383:function(e,t,n){"use strict";n.r(t),n.d(t,{linePlaneIntersection:function(){return o},planeDistanceToPoint:function(){return l},planeEquation:function(){return s},threePlaneIntersection:function(){return u}});var r=n(81911);function a(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,a,i=[],o=!0,s=!1;try{for(n=n.call(e);!(o=(r=n.next()).done)&&(i.push(r.value),!t||i.length!==t);o=!0);}catch(e){s=!0,a=e}finally{try{o||null==n.return||n.return()}finally{if(s)throw a}}return i}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return i(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return i(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n2&&void 0!==arguments[2]&&arguments[2],r=a(e,4),i=r[0],o=r[1],s=r[2],u=r[3],l=a(t,3),c=l[0],d=l[1],f=l[2],v=i*c+o*d+s*f-u,m=Math.abs(v)/Math.sqrt(i*i+o*o+s*s),p=n?Math.sign(v):1;return p*m}},77937:function(e,t,n){"use strict";n.d(t,{Z:function(){return a}});var r=n(6807);function a(e,t,n,a,i,o){var s=n.min,u=n.max,l=n.current,c=r.create();r.sub(c,t,e);var d=Math.round((u-s)/i),f=(l-s)/(u-s)*d,v=Math.round(f),m=[e[0]-a[0]*f*i,e[1]-a[1]*f*i,e[2]-a[2]*f*i];(v+=o)>d?v=d:v<0&&(v=0);var p=v*i;return{newFocalPoint:m=[m[0]+a[0]*p,m[1]+a[1]*p,m[2]+a[2]*p],newPosition:[m[0]+c[0],m[1]+c[1],m[2]+c[2]]}}},24271:function(e,t,n){"use strict";function r(e,t){return e.worldToIndex(t).map(Math.round)}n.d(t,{Z:function(){return r}})},85155:function(e,t,n){"use strict";n.d(t,{Z:function(){return a}});var r=n(41841);function a(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:r.Z,t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(!t)throw new Error("Event type was not defined");var a=new CustomEvent(t,{detail:n,cancelable:!0});return e.dispatchEvent(a)}},57979:function(e,t,n){"use strict";function r(){return([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,(function(e){return(e^crypto.getRandomValues(new Uint8Array(1))[0]&15>>e/4).toString(16)}))}n.d(t,{Z:function(){return r}})},19384:function(e,t,n){"use strict";function r(e,t){var n=Math.abs(e-t);return{windowWidth:n,windowCenter:e+n/2}}function a(e,t){return{lower:t-e/2,upper:t+e/2}}n.r(t),n.d(t,{toLowHighRange:function(){return a},toWindowLevel:function(){return r}})},52670:function(e,t,n){"use strict";n.r(t),n.d(t,{createAndCacheDerivedVolume:function(){return nn},createAndCacheVolume:function(){return en},createLocalVolume:function(){return an},loadVolume:function(){return Jt},registerUnknownVolumeLoader:function(){return sn},registerVolumeLoader:function(){return on}});n(68397),n(63046),n(61690),n(48019),n(73716),n(78901),n(25116);var r=n(64950),a=n(92393),i=n(8723),o=n(65667),s=Object.create(null);function u(e,t){s[e]=t}function l(e,t){t.classHierarchy.push("vtkWebGPUViewNodeFactory")}var c={};function d(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,c,n),t.overrides=s,o.ZP.extend(e,t,n),l(0,t)}a.ZP.newInstance(d,"vtkWebGPUViewNodeFactory");function f(e,t){t.classHierarchy.push("vtkWebGPUCamera"),e.getProjectionMatrix=function(e,n,a,i){if(r.identity(e),t.renderable.getParallelProjection()){var o=t.renderable.getParallelScale(),s=o*n,u=o,l=(i[0]-1)*s,c=(i[0]+1)*s,d=(i[1]-1)*u,f=(i[1]+1)*u,v=1/(c-l),m=1/(f-d);e[0]=2*v,e[5]=2*m,e[10]=1/(a[1]-a[0]),e[12]=(c+l)*v,e[13]=(f+d)*m,e[14]=a[1]/(a[1]-a[0])}else{var p,h,g=Math.tan(Math.PI*t.renderable.getViewAngle()/360);!0===t.renderable.getUseHorizontalViewAngle()?(p=a[0]*g,h=a[0]*g/n):(p=a[0]*g*n,h=a[0]*g);var A=(i[0]-1)*p,y=(i[0]+1)*p,S=(i[1]-1)*h,b=(i[1]+1)*h;e[0]=2*a[0]/(y-A),e[5]=2*a[0]/(b-S),e[12]=(A+y)/(y-A),e[13]=(S+b)/(b-S),e[10]=0,e[14]=a[0],e[11]=-1,e[15]=0}},e.convertToOpenGLDepth=function(e){if(t.renderable.getParallelProjection())return 1-e;var n=t.renderable.getClippingRangeByReference(),r=-n[0]/e;return.5*(r=(n[0]+n[1])/(n[1]-n[0])+2*n[0]*n[1]/(r*(n[1]-n[0])))+.5},e.getKeyMatrices=function(n){var a=n.getRenderable(),i=n.getParent();if(Math.max(i.getMTime(),e.getMTime(),a.getMTime(),t.renderable.getMTime(),n.getStabilizedTime())>t.keyMatrixTime.getMTime()){var o=t.renderable.getViewMatrix();r.copy(t.keyMatrices.normalMatrix,o),t.keyMatrices.normalMatrix[3]=0,t.keyMatrices.normalMatrix[7]=0,t.keyMatrices.normalMatrix[11]=0,r.invert(t.keyMatrices.normalMatrix,t.keyMatrices.normalMatrix),r.transpose(t.keyMatrices.wcvc,o);var s=n.getStabilizedCenterByReference();r.translate(t.keyMatrices.scvc,t.keyMatrices.wcvc,s);var u=n.getAspectRatio(),l=t.renderable.getClippingRangeByReference();e.getProjectionMatrix(t.keyMatrices.vcpc,u,l,t.renderable.getWindowCenterByReference()),r.multiply(t.keyMatrices.scpc,t.keyMatrices.vcpc,t.keyMatrices.scvc),r.invert(t.keyMatrices.pcsc,t.keyMatrices.scpc),t.keyMatrixTime.modified()}return t.keyMatrices}}var v={keyMatrixTime:null,keyMatrices:null};function m(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,v,n),i.Z.extend(e,t,n),t.keyMatrixTime={},a.ZP.obj(t.keyMatrixTime),t.keyMatrices={normalMatrix:new Float64Array(16),vcpc:new Float64Array(16),pcsc:new Float64Array(16),wcvc:new Float64Array(16),scpc:new Float64Array(16),scvc:new Float64Array(16)},a.ZP.setGet(e,t,["keyMatrixTime"]),f(e,t)}var p=a.ZP.newInstance(m);u("vtkCamera",p);var h=n(6807),g=n(43739);function A(e,t){t.classHierarchy.push("vtkWebGPUBindGroup"),e.setBindables=function(n){if(t.bindables.length===n.length){for(var r=!0,a=0;ar?i:r}if(r2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,y,n),a.ZP.obj(e,t),t.bindables=[],t.bindGroupTime={},a.ZP.obj(t.bindGroupTime,{mtime:0}),a.ZP.get(e,t,["bindGroupTime","handle","sizeInBytes","usage"]),a.ZP.setGet(e,t,["label","device","arrayInformation"]),A(e,t)}var b={newInstance:a.ZP.newInstance(S),extend:S};function w(e,t){t.classHierarchy.push("vtkWebGPUShaderModule"),e.initialize=function(e,n){t.device=e,t.handle=t.device.getHandle().createShaderModule({code:n.getCode()})}}var I={device:null,handle:null};function E(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,I,n),a.ZP.obj(e,t),a.ZP.get(e,t,["lastCameraMTime"]),a.ZP.setGet(e,t,["device","handle"]),w(e,t)}var C={newInstance:a.ZP.newInstance(E,"vtkWebGPUShaderModule"),extend:E};function D(e,t){t.classHierarchy.push("vtkWebGPUShaderCache"),e.getShaderModule=function(e){for(var n=e.getType(),r=e.getHash(),a=t._shaderModules.keys(),i=0;i2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,_,n),t._shaderModules=new Map,a.ZP.obj(e,t),a.ZP.setGet(e,t,["device","window"]),D(e,t)}var O={newInstance:a.ZP.newInstance(M,"vtkWebGPUShaderCache"),extend:M,substitute:function(e,t,n){var r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],a=Array.isArray(n)?n.join("\n"):n,i=!1;-1!==e.search(t)&&(i=!0);var o="";r&&(o="g");var s=new RegExp(t,o),u=e.replace(s,a);return{replace:i,result:u}}},P=n(21930);function T(e,t){t.classHierarchy.push("vtkWebGPUPipeline"),e.getShaderDescriptions=function(){return t.shaderDescriptions},e.initialize=function(e,n){t.pipelineDescription=t.renderEncoder.getPipelineSettings(),t.pipelineDescription.primitive.topology=t.topology,t.pipelineDescription.vertex=t.vertexState,t.pipelineDescription.label=n;for(var r=[],a=0;a2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,x,n),(0,a.j6)(e,t),t.layouts=[],t.shaderDescriptions=[],(0,a.U2)(e,t,["handle","pipelineDescription"]),(0,a.g2)(e,t,["device","renderEncoder","topology","vertexState"]),T(e,t)}var L={newInstance:(0,a.WL)(R,"vtkWebGPUPipeline"),extend:R};function k(e,t){t.classHierarchy.push("vtkWebGPUShaderDescription"),e.hasOutput=function(e){return t.outputNames.includes(e)},e.addOutput=function(e,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;t.outputTypes.push(e),t.outputNames.push(n),t.outputInterpolations.push(r)},e.addBuiltinOutput=function(e,n){t.builtinOutputTypes.push(e),t.builtinOutputNames.push(n)},e.addBuiltinInput=function(e,n){t.builtinInputTypes.push(e),t.builtinInputNames.push(n)},e.replaceShaderCode=function(e,n){var r=[],a=[];if(n&&r.push(n.getShaderCode()),e||t.builtinInputNames.length){var i=[];if(i.push("struct ".concat(t.type,"Input\n{")),e)for(var o=e.getOutputNamesByReference(),s=e.getOutputTypesByReference(),u=e.getOutputInterpolationsByReference(),l=0;l1&&(i.push("};"),a=i,r[r.length-1]+=",",r.push("input: ".concat(t.type,"Input")))}if(r.length&&(t.code=O.substitute(t.code,"//VTK::IOStructs::Input",r).result),t.outputNames.length+t.builtinOutputNames.length){for(var d=["struct ".concat(t.type,"Output\n{")],f=0;f ".concat(t.type,"Output")]).result}t.code=O.substitute(t.code,"//VTK::IOStructs::Dec",a).result}}var N={type:null,hash:null,code:null,outputNames:null,outputTypes:null};function F(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,N,n),t.outputNames=[],t.outputTypes=[],t.outputInterpolations=[],t.builtinOutputNames=[],t.builtinOutputTypes=[],t.builtinInputNames=[],t.builtinInputTypes=[],a.ZP.obj(e,t),a.ZP.setGet(e,t,["type","hash","code"]),a.ZP.getArray(e,t,["outputTypes","outputNames","outputInterpolations"]),k(e,t)}var B={newInstance:a.ZP.newInstance(F,"vtkWebGPUShaderDescription"),extend:F},U={r8unorm:{numComponents:1,nativeType:Uint8Array,stride:1,elementSize:1,sampleType:"float"},r8snorm:{numComponents:1,nativeType:Int8Array,stride:1,elementSize:1,sampleType:"float"},r8uint:{numComponents:1,nativeType:Uint8Array,stride:1,elementSize:1,sampleType:"uint"},r8sint:{numComponents:1,nativeType:Int8Array,stride:1,elementSize:1,sampleType:"sint"},r16uint:{numComponents:1,nativeType:Uint16Array,stride:2,elementSize:2,sampleType:"uint"},r16sint:{numComponents:1,nativeType:Int16Array,stride:2,elementSize:2,sampleType:"sint"},r16float:{numComponents:1,nativeType:Float32Array,stride:2,elementSize:2,sampleType:"float"},rg8unorm:{numComponents:2,nativeType:Uint8Array,stride:2,elementSize:1,sampleType:"float"},rg8snorm:{numComponents:2,nativeType:Int8Array,stride:2,elementSize:1,sampleType:"float"},rg8uint:{numComponents:2,nativeType:Uint8Array,stride:2,elementSize:1,sampleType:"uint"},rg8sint:{numComponents:2,nativeType:Int8Array,stride:2,elementSize:1,sampleType:"sint"},r32uint:{numComponents:1,nativeType:Uint32Array,stride:4,elementSize:4,sampleType:"uint"},r32sint:{numComponents:1,nativeType:Int32Array,stride:4,elementSize:4,sampleType:"sint"},r32float:{numComponents:1,nativeType:Float32Array,stride:4,elementSize:4,sampleType:"unfilterable-float"},rg16uint:{numComponents:2,nativeType:Uint16Array,stride:4,elementSize:2,sampleType:"uint"},rg16sint:{numComponents:2,nativeType:Int16Array,stride:4,elementSize:2,sampleType:"sint"},rg16float:{numComponents:2,nativeType:Float32Array,stride:4,elementSize:2,sampleType:"float"},rgba8unorm:{numComponents:4,nativeType:Uint8Array,stride:4,elementSize:1,sampleType:"float"},"rgba8unorm-srgb":{numComponents:4,nativeType:Uint8Array,stride:4,elementSize:1,sampleType:"float"},rgba8snorm:{numComponents:4,nativeType:Int8Array,stride:4,elementSize:1,sampleType:"float"},rgba8uint:{numComponents:4,nativeType:Uint8Array,stride:4,elementSize:1,sampleType:"uint"},rgba8sint:{numComponents:4,nativeType:Int8Array,stride:4,elementSize:1,sampleType:"sint"},bgra8unorm:{numComponents:4,nativeType:Uint8Array,stride:4,elementSize:1,sampleType:"float"},"bgra8unorm-srgb":{numComponents:4,nativeType:Uint8Array,stride:4,elementSize:1,sampleType:"float"},rgb9e5ufloat:{numComponents:4,nativeType:Uint32Array,stride:4,sampleType:"float"},rgb10a2unorm:{numComponents:4,nativeType:Uint32Array,stride:4,sampleType:"float"},rg11b10ufloat:{numComponents:4,nativeType:Float32Array,stride:4,sampleType:"float"},rg32uint:{numComponents:2,nativeType:Uint32Array,stride:8,elementSize:4,sampleType:"uint"},rg32sint:{numComponents:2,nativeType:Int32Array,stride:8,elementSize:4,sampleType:"sint"},rg32float:{numComponents:2,nativeType:Float32Array,stride:8,elementSize:4,sampleType:"unfilterable-float"},rgba16uint:{numComponents:4,nativeType:Uint16Array,stride:8,elementSize:2,sampleType:"uint"},rgba16sint:{numComponents:4,nativeType:Int16Array,stride:8,elementSize:2,sampleType:"sint"},rgba16float:{numComponents:4,nativeType:Float32Array,stride:8,elementSize:2,sampleType:"float"},rgba32uint:{numComponents:4,nativeType:Uint32Array,stride:16,elementSize:4,sampleType:"uint"},rgba32sint:{numComponents:4,nativeType:Int32Array,stride:16,elementSize:4,sampleType:"sint"},rgba32float:{numComponents:4,nativeType:Float32Array,stride:16,elementSize:4,sampleType:"unfilterable-float"},stencil8:{numComponents:1,nativeType:Uint8Array,stride:1,elementSize:1,sampleType:"uint"},depth16unorm:{numComponents:1,nativeType:Uint16Array,stride:2,elementSize:2,sampleType:"depth"},depth24plus:{numComponents:1,nativeType:Uint32Array,stride:4,elementSize:3,sampleType:"depth"},"depth24plus-stencil8":{numComponents:2,nativeType:Uint32Array,stride:4,sampleType:"mixed"},depth32float:{numComponents:1,nativeType:Float32Array,stride:4,elementSize:4,sampleType:"depth"}};var V={getDetailsFromTextureFormat:function(e){return!e||e.length<6?0:e in U==!0?U[e]:((0,a.E0)("unknown format ".concat(e)),null)},getByteStrideFromBufferFormat:function(e){if(!e||e.length<5)return 0;var t=1;"x"===e[e.length-2]&&(t=Number(e[e.length-1]));var n=1===t?e.length-1:e.length-3,r=Number(e[n]);return Number.isNaN(r)?((0,a.E0)("unknown format ".concat(e)),0):t*(5-r/2)},getNumberOfComponentsFromBufferFormat:function(e){if(!e||e.length<5)return 0;var t=1;return"x"===e[e.length-2]&&(t=Number(e[e.length-1])),t},getNativeTypeFromBufferFormat:function(e){if(!e||e.length<5)return 0;var t;if("f"===e[0])t="Float";else if("s"===e[0])t="Int";else{if("u"!==e[0])return void(0,a.E0)("unknown format ".concat(e));t="Uint"}var n=e.split("x")[0],r=Number(n[n.length-1]);if(!Number.isNaN(r))return t+=8*(5-r/2),t+="Array";(0,a.E0)("unknown format ".concat(e))},getShaderTypeFromBufferFormat:function(e){var t;if("f"===e[0]||"n"===e[1])t="f32";else if("s"===e[0]&&"i"===e[1])t="i32";else{if("u"!==e[0]||"i"!==e[1])return void(0,a.E0)("unknown format ".concat(e));t="u32"}var n=1;return"x"===e[e.length-2]&&(n=Number(e[e.length-1])),4===n?"vec4<".concat(t,">"):3===n?"vec3<".concat(t,">"):2===n?"vec2<".concat(t,">"):t},getByteStrideFromShaderFormat:function(e){if(!e)return 0;var t=1;return"vec"===e.substring(0,3)?t=Number(e[3]):"mat"===e.substring(0,3)&&(t=e[3]*e[5]),4*t},getNativeTypeFromShaderFormat:function(e){if(e)return e.includes("f32")?"Float32Array":e.includes("i32")?"Int32Array":e.includes("u32")?"Uint32Array":void(0,a.E0)("unknown format ".concat(e))}};function j(e,t){if(e===t)return!0;if(null==e||null==t)return!1;if(e.length!==t.length)return!1;for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:"vertex",a=n;Array.isArray(a)||(a=[a]);for(var i=0;it.names[0]?1:0}))},e.removeBufferIfPresent=function(e){for(var n=0;n0&&(e+=",\n"),e="".concat(e," @location(").concat(n,") ").concat(t.inputs[r].names[a]," : ").concat(o),n++}return e},e.getVertexInputInformation=function(){var e={};if(t.inputs.length){for(var n=[],r=0,a=0;a2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,H,n),(0,a.j6)(e,t),t.bindingDescriptions=[],t.attributeDescriptions=[],t.inputs=[],(0,a.g2)(e,t,["created","device","handle","indexBuffer"]),G(e,t)}var q={newInstance:(0,a.WL)(Q,"vtkWebGPUVertexInput"),extend:Q},z="\n//VTK::Renderer::Dec\n\n//VTK::Color::Dec\n\n//VTK::Normal::Dec\n\n//VTK::TCoord::Dec\n\n//VTK::Select::Dec\n\n//VTK::Mapper::Dec\n\n//VTK::IOStructs::Dec\n\n@vertex\nfn main(\n//VTK::IOStructs::Input\n)\n//VTK::IOStructs::Output\n{\n var output : vertexOutput;\n\n // var vertex: vec4 = vertexBC;\n\n //VTK::Color::Impl\n\n //VTK::Normal::Impl\n\n //VTK::TCoord::Impl\n\n //VTK::Select::Impl\n\n //VTK::Position::Impl\n\n return output;\n}\n",W="\n//VTK::Renderer::Dec\n\n//VTK::Color::Dec\n\n//VTK::Normal::Dec\n\n//VTK::TCoord::Dec\n\n//VTK::Select::Dec\n\n//VTK::RenderEncoder::Dec\n\n//VTK::Mapper::Dec\n\n//VTK::IOStructs::Dec\n\n@fragment\nfn main(\n//VTK::IOStructs::Input\n)\n//VTK::IOStructs::Output\n{\n var output : fragmentOutput;\n\n //VTK::Color::Impl\n\n //VTK::Normal::Impl\n\n //VTK::Light::Impl\n\n //VTK::TCoord::Impl\n\n //VTK::Select::Impl\n\n // var computedColor:vec4 = vec4(1.0,0.5,0.5,1.0);\n\n //VTK::RenderEncoder::Impl\n return output;\n}\n";function Y(e,t){t.classHierarchy.push("vtkWebGPUSimpleMapper"),e.generateShaderDescriptions=function(n,r,a){var i=B.newInstance({type:"vertex",hash:n,code:t.vertexShaderTemplate}),o=B.newInstance({type:"fragment",hash:n,code:t.fragmentShaderTemplate}),s=r.getShaderDescriptions();s.push(i),s.push(o);for(var u=t.vertexShaderTemplate+t.fragmentShaderTemplate,l=new RegExp("//VTK::[^:]*::","g"),c=u.match(l).filter((function(e,t,n){return n.indexOf(e)===t})),d=c.map((function(e){return"replaceShader".concat(e.substring(7,e.length-2))})),f=0;f","@builtin(position) Position");var a=r.getCode();a=O.substitute(a,"//VTK::Position::Impl",[" output.Position = rendererUBO.SCPCMatrix*vertexBC;"]).result,r.setCode(a)},t.shaderReplacements.set("replaceShaderPosition",e.replaceShaderPosition),e.replaceShaderTCoord=function(e,t,n){t.getShaderDescription("vertex").addOutput("vec2","tcoordVS")},t.shaderReplacements.set("replaceShaderTCoord",e.replaceShaderTCoord),e.addTextureView=function(e){t.textureViews.includes(e)||t.textureViews.push(e)},e.prepareToDraw=function(n){t.renderEncoder=n,e.updateInput(),e.updateBuffers(),e.updateBindings(),e.updatePipeline()},e.updateInput=function(){},e.updateBuffers=function(){},e.updateBindings=function(){t.bindGroup.setBindables(e.getBindables())},e.computePipelineHash=function(){},e.registerDrawCallback=function(n){n.registerDrawCallback(t.pipeline,e.draw)},e.prepareAndDraw=function(n){e.prepareToDraw(n),n.setPipeline(t.pipeline),e.draw(n)},e.draw=function(e){var n=e.getBoundPipeline();e.activateBindGroup(t.bindGroup),t.WebGPURenderer&&t.WebGPURenderer.bindUBO(e),n.bindVertexInput(e,t.vertexInput);var r=t.vertexInput.getIndexBuffer();r?e.drawIndexed(r.getIndexCount(),t.numberOfInstances,0,0,0):e.draw(t.numberOfVertices,t.numberOfInstances,0,0)},e.getBindables=function(){var e=(0,P.Z)(t.additionalBindables);t.UBO&&e.push(t.UBO),t.SSBO&&e.push(t.SSBO);for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Z,n),i.Z.extend(e,t,n),t.textureViews=[],t.vertexInput=q.newInstance(),t.bindGroup=b.newInstance({label:"mapperBG"}),t.additionalBindables=[],t.fragmentShaderTemplate=t.fragmentShaderTemplate||W,t.vertexShaderTemplate=t.vertexShaderTemplate||z,t.shaderReplacements=new Map,a.ZP.get(e,t,["pipeline","vertexInput"]),a.ZP.setGet(e,t,["additionalBindables","device","fragmentShaderTemplate","interpolate","numberOfInstances","numberOfVertices","pipelineHash","shaderReplacements","SSBO","textureViews","topology","UBO","vertexShaderTemplate","WebGPURenderer"]),Y(e,t)}var X={newInstance:a.ZP.newInstance(K,"vtkWebGPUSimpleMapper"),extend:K};function $(e,t){t.classHierarchy.push("vtkWebGPUFullScreenQuad"),e.replaceShaderPosition=function(e,t,n){var r=t.getShaderDescription("vertex");r.addBuiltinOutput("vec4","@builtin(position) Position"),r.addOutput("vec4","vertexVC");var a=r.getCode();a=O.substitute(a,"//VTK::Position::Impl",["output.tcoordVS = vec2(vertexBC.x * 0.5 + 0.5, 1.0 - vertexBC.y * 0.5 - 0.5);","output.Position = vec4(vertexBC, 1.0);","output.vertexVC = vec4(vertexBC, 1);"]).result,r.setCode(a)},t.shaderReplacements.set("replaceShaderPosition",e.replaceShaderPosition),e.updateBuffers=function(){var e=t.device.getBufferManager().getFullScreenQuadBuffer();t.vertexInput.addBuffer(e,["vertexBC"]),t.numberOfVertices=6}}var J={};function ee(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,J,n),X.extend(e,t,n),$(e,t)}var te={newInstance:a.ZP.newInstance(ee,"vtkWebGPUFullScreenQuad"),extend:ee},ne=n(47169),re=n(19013),ae={BufferUsage:{Verts:0,Lines:1,Triangles:2,Strips:3,LinesFromStrips:4,LinesFromTriangles:5,Points:6,UniformArray:7,PointArray:8,NormalsFromPoints:9,Texture:10,RawVertex:11,Storage:12,Index:13},PrimitiveTypes:{Start:0,Points:0,Lines:1,Triangles:2,TriangleStrips:3,TriangleEdges:4,TriangleStripEdges:5,End:6}};function ie(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}var oe=["getMappedRange","mapAsync","unmap"];function se(e,t){t.classHierarchy.push("vtkWebGPUBuffer"),e.create=function(e,n){t.handle=t.device.getHandle().createBuffer({size:e,usage:n,label:t.label}),t.sizeInBytes=e,t.usage=n},e.write=function(e){!function(e,t,n,r){var a=r.byteLength,i=e.createBuffer({size:a,usage:GPUBufferUsage.COPY_SRC,mappedAtCreation:!0}),o=i.getMappedRange(0,a);new Uint8Array(o).set(new Uint8Array(r)),i.unmap();var s=e.createCommandEncoder();s.copyBufferToBuffer(i,0,t,n,a);var u=s.finish();e.queue.submit([u]),i.destroy()}(t.device.getHandle(),t.handle,0,e.buffer)},e.createAndWrite=function(e,n){t.handle=t.device.getHandle().createBuffer({size:e.byteLength,usage:n,mappedAtCreation:!0,label:t.label}),t.sizeInBytes=e.byteLength,t.usage=n,new Uint8Array(t.handle.getMappedRange()).set(new Uint8Array(e.buffer)),t.handle.unmap()};for(var n=function(n){e[oe[n]]=function(){var e;return(e=t.handle)[oe[n]].apply(e,arguments)}},r=0;r2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,ue,n),a.ZP.obj(e,t),a.ZP.get(e,t,["handle","sizeInBytes","usage"]),a.ZP.setGet(e,t,["strideInBytes","device","arrayInformation","label","sourceTime"]),se(e,t)}var ce=function(e){for(var t=1;t2)for(var i=0;i2){for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,De,n),ce.extend(e,t,n),a.ZP.setGet(e,t,["flatIdToPointId","flatIdToCellId","flatSize","indexCount"]),Ce(e,t)}var Me=function(e){for(var t=1;t2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Fe,n),(0,a.j6)(e,t),(0,a.g2)(e,t,["device"]),Ne(e,t)}var Ue=Pe(Pe({newInstance:(0,a.WL)(Be),extend:Be},{}),ae),Ve=Ue.BufferUsage,je=a.ZP.vtkErrorMacro;function Ge(e,t){t.classHierarchy.push("vtkWebGPUStorageBuffer"),e.addEntry=function(e,n){if(t._bufferEntryNames.has(e))je("entry named ".concat(e," already exists"));else{t._bufferEntryNames.set(e,t.bufferEntries.length);var r=V.getByteStrideFromShaderFormat(n);t.bufferEntries.push({name:e,type:n,sizeInBytes:r,offset:t.sizeInBytes,nativeType:V.getNativeTypeFromShaderFormat(n)}),t.sizeInBytes+=r}},e.send=function(e){if(!t._buffer){var n={nativeArray:t.Float32Array,usage:Ve.Storage,label:t.label};return t._buffer=e.getBufferManager().getBuffer(n),t.bindGroupTime.modified(),void t._sendTime.modified()}e.getHandle().queue.writeBuffer(t._buffer.getHandle(),0,t.arrayBuffer,0,t.sizeInBytes*t.numberOfInstances),t._sendTime.modified()},e.createView=function(e){e in t==!1&&(t.arrayBuffer||(t.arrayBuffer=new ArrayBuffer(t.sizeInBytes*t.numberOfInstances)),t[e]=a.ZP.newTypedArray(e,t.arrayBuffer))},e.setValue=function(n,r,a){var i=t._bufferEntryNames.get(n);if(void 0!==i){var o=t.bufferEntries[i];e.createView(o.nativeType);var s=t[o.nativeType];s[(o.offset+r*t.sizeInBytes)/s.BYTES_PER_ELEMENT]=a}else je("entry named ".concat(n," not found in UBO"))},e.setArray=function(n,r,a){var i=t._bufferEntryNames.get(n);if(void 0!==i){var o=t.bufferEntries[i];e.createView(o.nativeType);for(var s=t[o.nativeType],u=(o.offset+r*t.sizeInBytes)/s.BYTES_PER_ELEMENT,l=0;l,\n};\n@binding(").concat(e,") @group(").concat(n,") var ").concat(t.label,": ").concat(t.label,"Struct;\n")),r.join("\n")},e.getBindGroupEntry=function(){return{resource:{buffer:t._buffer.getHandle()}}},e.clearData=function(){t.numberOfInstances=0,t.sizeInBytes=0,t.bufferEntries=[],t._bufferEntryNames=new Map,t._buffer=null,delete t.arrayBuffer,delete t.Float32Array}}var He={bufferEntries:null,bufferEntryNames:null,sizeInBytes:0,label:null,numberOfInstances:1};function Qe(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,He,n),a.ZP.obj(e,t),t._bufferEntryNames=new Map,t.bufferEntries=[],t._sendTime={},a.ZP.obj(t._sendTime,{mtime:0}),t.bindGroupTime={},a.ZP.obj(t.bindGroupTime,{mtime:0}),t.bindGroupLayoutEntry=t.bindGroupLayoutEntry||{buffer:{type:"read-only-storage"}},a.ZP.get(e,t,["bindGroupTime"]),a.ZP.setGet(e,t,["device","bindGroupLayoutEntry","label","numberOfInstances","sizeInBytes"]),Ge(e,t)}var qe={newInstance:a.ZP.newInstance(Qe,"vtkWebGPUStorageBuffer"),extend:Qe},ze=Ue.BufferUsage,We=a.ZP.vtkErrorMacro;function Ye(e,t){t.classHierarchy.push("vtkWebGPUUniformBuffer"),e.addEntry=function(e,n){t._bufferEntryNames.has(e)?We("entry named ".concat(e," already exists")):(t.sortDirty=!0,t._bufferEntryNames.set(e,t.bufferEntries.length),t.bufferEntries.push({name:e,type:n,sizeInBytes:V.getByteStrideFromShaderFormat(n),offset:-1,nativeType:V.getNativeTypeFromShaderFormat(n),packed:!1}))},e.sortBufferEntries=function(){if(t.sortDirty){for(var e=0,n=[],r=4,a=0;a4&&(E.packed=!0,E.offset=e,n.push(E),e+=E.sizeInBytes)}for(var C=0;C ").concat(t.label,": ").concat(t.label,"Struct;")),a.join("\n")}}var Ze={bufferEntries:null,bufferEntryNames:null,sizeInBytes:0,label:null,bindGroupLayoutEntry:null,bindGroupEntry:null};function Ke(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Ze,n),a.ZP.obj(e,t),t._bufferEntryNames=new Map,t.bufferEntries=[],t.bindGroupLayoutEntry=t.bindGroupLayoutEntry||{buffer:{type:"uniform"}},t.sendTime={},a.ZP.obj(t.sendTime,{mtime:0}),t.bindGroupTime={},a.ZP.obj(t.bindGroupTime,{mtime:0}),t.sendDirty=!0,t.sortDirty=!0,a.ZP.get(e,t,["binding","bindGroupTime"]),a.ZP.setGet(e,t,["bindGroupLayoutEntry","device","label","sizeInBytes"]),Ye(e,t)}var Xe={newInstance:a.ZP.newInstance(Ke,"vtkWebGPUUniformBuffer"),extend:Ke},$e=a.eR,Je="\n//VTK::Renderer::Dec\n\n//VTK::Mapper::Dec\n\n//VTK::TCoord::Dec\n\n//VTK::RenderEncoder::Dec\n\n//VTK::IOStructs::Dec\n\n@fragment\nfn main(\n//VTK::IOStructs::Input\n)\n//VTK::IOStructs::Output\n{\n var output: fragmentOutput;\n\n var computedColor: vec4 = mapperUBO.BackgroundColor;\n\n //VTK::RenderEncoder::Impl\n return output;\n}\n",et=new Float64Array(16),tt=new Float64Array(16);function nt(e,t){t.classHierarchy.push("vtkWebGPURenderer"),e.buildPass=function(n){if(n){if(!t.renderable)return;t.camera=t.renderable.getActiveCamera(),e.updateLights(),e.prepareNodes(),e.addMissingNode(t.camera),e.addMissingNodes(t.renderable.getViewPropsWithNestedProps()),e.removeUnusedNodes(),t.webgpuCamera=e.getViewNodeFor(t.camera),e.updateStabilizedMatrix()}},e.updateStabilizedMatrix=function(){var e=t.camera.getClippingRange(),n=t.camera.getPositionByReference(),r=t.camera.getDirectionOfProjectionByReference(),a=[],i=[];h.scale(i,r,.5*(e[0]+e[1])),h.add(a,n,i),h.sub(i,a,t.stabilizedCenter),h.len(i)/(e[1]-e[0])>t.recenterThreshold&&(t.stabilizedCenter=a,t.stabilizedTime.modified())},e.updateLights=function(){for(var e=0,n=t.renderable.getLightsByReference(),r=0;r0&&e++;return e||($e("No lights are on, creating one."),t.renderable.createLight()),e},e.updateUBO=function(){var n=t.UBO.getSendTime();if(t._parent.getMTime()>n||e.getMTime()>n||t.camera.getMTime()>n||t.renderable.getMTime()>n){var r,a=t.webgpuCamera.getKeyMatrices(e);t.UBO.setArray("WCVCMatrix",a.wcvc),t.UBO.setArray("SCPCMatrix",a.scpc),t.UBO.setArray("PCSCMatrix",a.pcsc),t.UBO.setArray("SCVCMatrix",a.scvc),t.UBO.setArray("VCPCMatrix",a.vcpc),t.UBO.setArray("WCVCNormals",a.normalMatrix),t.UBO.setValue("LightCount",t.renderable.getLights().length),t.UBO.setValue("MaxEnvironmentMipLevel",null===(r=t.renderable.getEnvironmentTexture())||void 0===r?void 0:r.getMipLevel()),t.UBO.setValue("BackgroundDiffuseStrength",t.renderable.getEnvironmentTextureDiffuseStrength()),t.UBO.setValue("BackgroundSpecularStrength",t.renderable.getEnvironmentTextureSpecularStrength());var i=e.getYInvertedTiledSizeAndOrigin();t.UBO.setArray("viewportSize",[i.usize,i.vsize]),t.UBO.setValue("cameraParallel",t.camera.getParallelProjection());var o=t._parent.getDevice();t.UBO.sendIfNeeded(o)}},e.updateSSBO=function(){for(var n,r=t.renderable.getLights(),a=t.webgpuCamera.getKeyMatrices(e),i="".concat(t.renderable.getMTime()),o=0;o=90?0:2:1,c[f+1]=Math.cos((0,g.r)(r[d].getConeAngle())),c[f+2]=Math.cos((0,g.r)(r[d].getConeAngle()+r[d].getConeFalloff())),c[f+3]=0}t.SSBO.clearData(),t.SSBO.setNumberOfInstances(r.length),t.SSBO.addEntry("LightPos","vec4"),t.SSBO.addEntry("LightDir","vec4"),t.SSBO.addEntry("LightColor","vec4"),t.SSBO.addEntry("LightData","vec4"),t.SSBO.setAllInstancesFromArray("LightPos",s),t.SSBO.setAllInstancesFromArray("LightDir",u),t.SSBO.setAllInstancesFromArray("LightColor",l),t.SSBO.setAllInstancesFromArray("LightData",c);var m=t._parent.getDevice();t.SSBO.send(m)}t.lightTimeString=i},e.scissorAndViewport=function(t){var n=e.getYInvertedTiledSizeAndOrigin();t.getHandle().setViewport(n.lowerLeftU,n.lowerLeftV,n.usize,n.vsize,0,1),t.getHandle().setScissorRect(n.lowerLeftU,n.lowerLeftV,n.usize,n.vsize)},e.bindUBO=function(e){e.activateBindGroup(t.bindGroup)},e.opaquePass=function(n){n?(t.renderEncoder.begin(t._parent.getCommandEncoder()),e.updateUBO(),e.updateSSBO()):(e.scissorAndViewport(t.renderEncoder),e.clear(),t.renderEncoder.end())},e.clear=function(){var n;if(!t.renderable.getTransparent()&&!t.suppressClear){var a=t._parent.getDevice();if(!t.clearFSQ){t.clearFSQ=te.newInstance(),t.clearFSQ.setDevice(a),t.clearFSQ.setPipelineHash("clearfsq"),t.clearFSQ.setFragmentShaderTemplate(Je);var i=Xe.newInstance({label:"mapperUBO"});i.addEntry("FSQMatrix","mat4x4"),i.addEntry("BackgroundColor","vec4"),t.clearFSQ.setUBO(i),t.backgroundTex=t.renderable.getEnvironmentTexture()}if("clearfsqwithtexture"!==t.clearFSQ.getPipelineHash()&&t.renderable.getUseEnvironmentTextureAsBackground()&&null!==(n=t.backgroundTex)&&void 0!==n&&n.getImageLoaded()){t.clearFSQ.setFragmentShaderTemplate("\nfn vecToRectCoord(dir: vec3) -> vec2 {\n var tau: f32 = 6.28318530718;\n var pi: f32 = 3.14159265359;\n var out: vec2 = vec2(0.0);\n\n out.x = atan2(dir.z, dir.x) / tau;\n out.x += 0.5;\n\n var phix: f32 = length(vec2(dir.x, dir.z));\n out.y = atan2(dir.y, phix) / pi + 0.5;\n\n return out;\n}\n\n//VTK::Renderer::Dec\n\n//VTK::Mapper::Dec\n\n//VTK::TCoord::Dec\n\n//VTK::RenderEncoder::Dec\n\n//VTK::IOStructs::Dec\n\n@fragment\nfn main(\n//VTK::IOStructs::Input\n)\n//VTK::IOStructs::Output\n{\n var output: fragmentOutput;\n\n var tcoord: vec4 = vec4(input.vertexVC.xy, -1, 1);\n var V: vec4 = normalize(mapperUBO.FSQMatrix * tcoord); // vec2((input.tcoordVS.x - 0.5) * 2, -(input.tcoordVS.y - 0.5) * 2);\n // textureSampleLevel gets rid of some ugly artifacts\n var background = textureSampleLevel(EnvironmentTexture, EnvironmentTextureSampler, vecToRectCoord(V.xyz), 0);\n var computedColor: vec4 = vec4(background.rgb, 1);\n\n //VTK::RenderEncoder::Impl\n return output;\n}\n");var o=Xe.newInstance({label:"mapperUBO"});o.addEntry("FSQMatrix","mat4x4"),o.addEntry("BackgroundColor","vec4"),t.clearFSQ.setUBO(o);var s=a.getTextureManager().getTextureForVTKTexture(t.backgroundTex);if(s.getReady()){var u=s.createView("EnvironmentTexture");t.clearFSQ.setTextureViews([u]),t.backgroundTexLoaded=!0;var l=t.backgroundTex.getInterpolate()?"linear":"nearest";u.addSampler(a,{addressModeU:"repeat",addressModeV:"clamp-to-edge",addressModeW:"repeat",minFilter:l,magFilter:l,mipmapFilter:"linear"})}t.clearFSQ.setPipelineHash("clearfsqwithtexture")}else if("clearfsqwithtexture"===t.clearFSQ.getPipelineHash()&&!t.renderable.getUseEnvironmentTextureAsBackground()){t.clearFSQ=te.newInstance(),t.clearFSQ.setDevice(a),t.clearFSQ.setPipelineHash("clearfsq"),t.clearFSQ.setFragmentShaderTemplate(Je);var c=Xe.newInstance({label:"mapperUBO"});c.addEntry("FSQMatrix","mat4x4"),c.addEntry("BackgroundColor","vec4"),t.clearFSQ.setUBO(c)}var d=t.webgpuCamera.getKeyMatrices(e),f=t.renderable.getBackgroundByReference();t.clearFSQ.getUBO().setArray("BackgroundColor",f),r.transpose(tt,d.normalMatrix),r.mul(et,d.scvc,d.pcsc),r.mul(et,tt,et),t.clearFSQ.getUBO().setArray("FSQMatrix",et),t.clearFSQ.getUBO().sendIfNeeded(a),t.clearFSQ.prepareAndDraw(t.renderEncoder)}},e.translucentPass=function(n){n?t.renderEncoder.begin(t._parent.getCommandEncoder()):(e.scissorAndViewport(t.renderEncoder),t.renderEncoder.end())},e.volumeDepthRangePass=function(n){n?t.renderEncoder.begin(t._parent.getCommandEncoder()):(e.scissorAndViewport(t.renderEncoder),t.renderEncoder.end())},e.getAspectRatio=function(){var e=t._parent.getSizeByReference(),n=t.renderable.getViewportByReference();return e[0]*(n[2]-n[0])/((n[3]-n[1])*e[1])},e.convertToOpenGLDepth=function(e){return t.webgpuCamera.convertToOpenGLDepth(e)},e.getYInvertedTiledSizeAndOrigin=function(){var n=e.getTiledSizeAndOrigin(),r=t._parent.getSizeByReference();return n.lowerLeftV=r[1]-n.vsize-n.lowerLeftV,n},e.getTiledSizeAndOrigin=function(){var e=t.renderable.getViewportByReference(),n=[0,0,1,1],r=e[0]-n[0],a=e[1]-n[1],i=t._parent.normalizedDisplayToDisplay(r,a),o=Math.round(i[0]),s=Math.round(i[1]),u=e[2]-n[0],l=e[3]-n[1],c=t._parent.normalizedDisplayToDisplay(u,l),d=Math.round(c[0])-o,f=Math.round(c[1])-s;return d<0&&(d=0),f<0&&(f=0),{usize:d,vsize:f,lowerLeftU:o,lowerLeftV:s}},e.getPropFromID=function(e){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,rt,n),i.Z.extend(e,t,n),t.UBO=Xe.newInstance({label:"rendererUBO"}),t.UBO.addEntry("WCVCMatrix","mat4x4"),t.UBO.addEntry("SCPCMatrix","mat4x4"),t.UBO.addEntry("PCSCMatrix","mat4x4"),t.UBO.addEntry("SCVCMatrix","mat4x4"),t.UBO.addEntry("VCPCMatrix","mat4x4"),t.UBO.addEntry("WCVCNormals","mat4x4"),t.UBO.addEntry("viewportSize","vec2"),t.UBO.addEntry("LightCount","i32"),t.UBO.addEntry("MaxEnvironmentMipLevel","f32"),t.UBO.addEntry("BackgroundDiffuseStrength","f32"),t.UBO.addEntry("BackgroundSpecularStrength","f32"),t.UBO.addEntry("cameraParallel","u32"),t.SSBO=qe.newInstance({label:"rendererLightSSBO"}),t.lightTimeString="",t.bindGroup=b.newInstance({label:"rendererBG"}),t.bindGroup.setBindables([t.UBO,t.SSBO]),t.tmpMat4=r.identity(new Float64Array(16)),t.stabilizedTime={},(0,a.j6)(t.stabilizedTime,{mtime:0}),(0,a.U2)(e,t,["bindGroup","stabilizedTime"]),(0,a.c$)(e,t,["stabilizedCenter"]),(0,a.g2)(e,t,["renderEncoder","selector","suppressClear","UBO"]),nt(e,t)}var it=(0,a.WL)(at,"vtkWebGPURenderer");u("vtkRenderer",it);var ot=n(21330),st=n(24513);function ut(e,t){t.classHierarchy.push("vtkWebGPUSampler"),e.create=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};t.device=e,t.options.addressModeU=n.addressModeU?n.addressModeU:"clamp-to-edge",t.options.addressModeV=n.addressModeV?n.addressModeV:"clamp-to-edge",t.options.addressModeW=n.addressModeW?n.addressModeW:"clamp-to-edge",t.options.magFilter=n.magFilter?n.magFilter:"nearest",t.options.minFilter=n.minFilter?n.minFilter:"nearest",t.options.mipmapFilter=n.mipmapFilter?n.mipmapFilter:"nearest",t.options.label=t.label,t.handle=t.device.getHandle().createSampler(t.options),t.bindGroupTime.modified()},e.getShaderCode=function(e,n){return"@binding(".concat(e,") @group(").concat(n,") var ").concat(t.label,": sampler;")},e.getBindGroupEntry=function(){return{resource:t.handle}}}var lt={device:null,handle:null,label:null,options:null};function ct(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,lt,n),a.ZP.obj(e,t),t.options={},t.bindGroupLayoutEntry={visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,sampler:{}},t.bindGroupTime={},a.ZP.obj(t.bindGroupTime,{mtime:0}),a.ZP.get(e,t,["bindGroupTime","handle","options"]),a.ZP.setGet(e,t,["bindGroupLayoutEntry","device","label"]),ut(e,t)}var dt={newInstance:a.ZP.newInstance(ct),extend:ct},ft=n(79034),vt=st.Z.SlicingMode,mt="\n//VTK::Renderer::Dec\n\n//VTK::Mapper::Dec\n\n//VTK::TCoord::Dec\n\n//VTK::Image::Dec\n\n//VTK::RenderEncoder::Dec\n\n//VTK::IOStructs::Dec\n\n@fragment\nfn main(\n//VTK::IOStructs::Input\n)\n//VTK::IOStructs::Output\n{\n var output: fragmentOutput;\n\n //VTK::Image::Sample\n\n // var computedColor: vec4 = vec4(1.0,0.7, 0.5, 1.0);\n\n//VTK::RenderEncoder::Impl\n\n return output;\n}\n";var pt=new Float64Array(16),ht=new Float64Array(16),gt=new Float64Array(16),At=new Float64Array(4),yt=new Float64Array(4);function St(e,t){t.classHierarchy.push("vtkWebGPUImageMapper"),e.buildPass=function(n){if(n){t.WebGPUImageSlice=e.getFirstAncestorOfType("vtkWebGPUImageSlice"),t.WebGPURenderer=t.WebGPUImageSlice.getFirstAncestorOfType("vtkWebGPURenderer"),t.WebGPURenderWindow=t.WebGPURenderer.getParent(),t.device=t.WebGPURenderWindow.getDevice();var r=t.WebGPURenderer.getRenderable();t.renderable.getSliceAtFocalPoint()&&t.renderable.setSliceFromCamera(r.getActiveCamera())}},e.translucentPass=function(t){t&&e.render()},e.opaquePass=function(t){t&&e.render()},e.render=function(){t.renderable.update(),t.currentInput=t.renderable.getInputData(),e.prepareToDraw(t.WebGPURenderer.getRenderEncoder()),t.renderEncoder.registerDrawCallback(t.pipeline,e.draw)},e.computePipelineHash=function(){var e=t.currentInput.getExtent();e[0]===e[1]||e[2]===e[3]||e[4]===e[5]?(t.dimensions=2,t.pipelineHash="img2"):(t.dimensions=3,t.pipelineHash="img3")},e.updateUBO=function(){var n=t.UBO.getSendTime(),a=t.WebGPUImageSlice.getRenderable(),i=a.getMapper();if(e.getMTime()>n||t.renderable.getMTime()>n||a.getProperty().getMTime()>n){var o=i.getInputData(),s=t.WebGPURenderer.getStabilizedCenterByReference();r.identity(pt),r.translate(pt,pt,s);var u=a.getMatrix();r.transpose(ht,u),r.invert(ht,ht),r.multiply(pt,ht,pt);var l=o.getWorldToIndex();r.multiply(pt,l,pt),r.invert(gt,pt),r.fromTranslation(ht,[.5,.5,.5]),r.multiply(pt,ht,pt);var c=o.getDimensions();r.identity(ht),r.scale(ht,ht,[1/c[0],1/c[1],1/c[2]]),r.multiply(pt,ht,pt),t.UBO.setArray("SCTCMatrix",pt);var d=t.currentInput.getExtent(),f=t.renderable.getClosestIJKAxis().ijkMode,v=t.renderable.getSlice();f!==t.renderable.getSlicingMode()&&(v=t.renderable.getSliceAtPosition(v));var m=2,p=0,h=1;f===vt.I?(m=0,p=1,h=2):f===vt.J&&(m=1,p=2,h=0),At[m]=v,At[p]=d[2*p]-.5,At[h]=d[2*h]-.5,At[3]=1,ot.transformMat4(At,At,gt),t.UBO.setArray("Origin",At),yt[m]=v,yt[p]=d[2*p+1]+.5,yt[h]=d[2*h]-.5,yt[3]=1,ot.transformMat4(yt,yt,gt),ot.subtract(yt,yt,At),yt[3]=1,t.UBO.setArray("Axis1",yt),yt[m]=v,yt[p]=d[2*p]-.5,yt[h]=d[2*h+1]+.5,yt[3]=1,ot.transformMat4(yt,yt,gt),ot.subtract(yt,yt,At),yt[3]=1,t.UBO.setArray("Axis2",yt);for(var g=[1,1,1,1],A=[0,0,0,0],y=t.textureViews[0],S=y.getTexture().getScale(),b=y.getTexture().getNumberOfComponents(),w=0;w","@builtin(position) Position");var i=a.getCode(),o=["var pos: vec4 = mapperUBO.Origin +"," (vertexBC.x * 0.5 + 0.5) * mapperUBO.Axis1 + (vertexBC.y * 0.5 + 0.5) * mapperUBO.Axis2;","pos.w = 1.0;"];2===t.dimensions?o.push("var tcoord : vec2 = (mapperUBO.SCTCMatrix * pos).xy;"):o.push("var tcoord : vec3 = (mapperUBO.SCTCMatrix * pos).xyz;"),o.push("output.tcoordVS = tcoord;","output.Position = rendererUBO.SCPCMatrix * pos;"),i=O.substitute(i,"//VTK::Position::Impl",o).result,a.setCode(i)},a.set("replaceShaderPosition",e.replaceShaderPosition),e.replaceShaderTCoord=function(e,n,r){var a=n.getShaderDescription("vertex");2===t.dimensions?a.addOutput("vec2","tcoordVS"):a.addOutput("vec3","tcoordVS")},a.set("replaceShaderTCoord",e.replaceShaderTCoord),e.replaceShaderImage=function(e,n,r){var a=n.getShaderDescription("fragment"),i=a.getCode();i=(t.dimensions,O.substitute(i,"//VTK::Image::Sample",[" var computedColor: vec4 ="," textureSampleLevel(imgTexture, clampSampler, input.tcoordVS, 0.0);","//VTK::Image::Sample"]).result),i=O.substitute(i,"//VTK::Image::Sample",[" var coord: vec2 ="," vec2(computedColor.r * mapperUBO.cScale.r + mapperUBO.cShift.r, 0.5);"," computedColor = textureSampleLevel(tfunTexture, clampSampler, coord, 0.0);"]).result,a.setCode(i)},a.set("replaceShaderImage",e.replaceShaderImage)}var bt={rowLength:1024};function wt(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,bt,n),te.extend(e,t,n),e.setFragmentShaderTemplate(mt),t.UBO=Xe.newInstance({label:"mapperUBO"}),t.UBO.addEntry("SCTCMatrix","mat4x4"),t.UBO.addEntry("Origin","vec4"),t.UBO.addEntry("Axis2","vec4"),t.UBO.addEntry("Axis1","vec4"),t.UBO.addEntry("cScale","vec4"),t.UBO.addEntry("cShift","vec4"),t.lutBuildTime={},(0,a.j6)(t.lutBuildTime,{mtime:0}),t.imagemat=r.identity(new Float64Array(16)),t.imagematinv=r.identity(new Float64Array(16)),t.VBOBuildTime={},(0,a.j6)(t.VBOBuildTime),St(e,t)}var It=(0,a.WL)(wt,"vtkWebGPUImageMapper");function Et(e,t){t.classHierarchy.push("vtkWebGPUImageSlice"),e.buildPass=function(n){if(t.renderable&&t.renderable.getVisibility()&&n){if(!t.renderable)return;t.WebGPURenderer=e.getFirstAncestorOfType("vtkWebGPURenderer"),t.WebGPURenderWindow=t.WebGPURenderer.getFirstAncestorOfType("vtkWebGPURenderWindow"),void 0===t.propID&&(t.propID=t.WebGPURenderWindow.getUniquePropID()),e.prepareNodes(),e.addMissingNode(t.renderable.getMapper()),e.removeUnusedNodes()}},e.traverseOpaquePass=function(n){t.renderable&&t.renderable.getNestedVisibility()&&t.renderable.getIsOpaque()&&(!t.WebGPURenderer.getSelector()||t.renderable.getNestedPickable())&&(e.apply(n,!0),t.children.forEach((function(e){e.traverse(n)})),e.apply(n,!1))},e.traverseTranslucentPass=function(n){!t.renderable||!t.renderable.getNestedVisibility()||t.renderable.getIsOpaque()||t.WebGPURenderer.getSelector()&&!t.renderable.getNestedPickable()||(e.apply(n,!0),t.children.forEach((function(e){e.traverse(n)})),e.apply(n,!1))},e.queryPass=function(e,n){if(e){if(!t.renderable||!t.renderable.getVisibility())return;t.renderable.getIsOpaque()?n.incrementOpaqueActorCount():n.incrementTranslucentActorCount()}},e.getBufferShift=function(n){return e.getKeyMatrices(n),t.bufferShift},e.getKeyMatrices=function(e){if(Math.max(t.renderable.getMTime(),e.getStabilizedTime())>t.keyMatricesTime.getMTime()){t.renderable.computeMatrix();var n=t.renderable.getMatrix(),a=e.getStabilizedCenterByReference();t.bufferShift[0]=n[3]-a[0],t.bufferShift[1]=n[7]-a[1],t.bufferShift[2]=n[11]-a[2],r.transpose(t.keyMatrices.bcwc,n),t.renderable.getIsIdentity()?r.identity(t.keyMatrices.normalMatrix):(r.copy(t.keyMatrices.normalMatrix,t.keyMatrices.bcwc),t.keyMatrices.normalMatrix[3]=0,t.keyMatrices.normalMatrix[7]=0,t.keyMatrices.normalMatrix[11]=0,r.invert(t.keyMatrices.normalMatrix,t.keyMatrices.normalMatrix),r.transpose(t.keyMatrices.normalMatrix,t.keyMatrices.normalMatrix)),r.translate(t.keyMatrices.bcwc,t.keyMatrices.bcwc,[-t.bufferShift[0],-t.bufferShift[1],-t.bufferShift[2]]),r.translate(t.keyMatrices.bcsc,t.keyMatrices.bcwc,[-a[0],-a[1],-a[2]]),t.keyMatricesTime.modified()}return t.keyMatrices}}u("vtkImageMapper",It);var Ct={bufferShift:void 0,keyMatrixTime:null,keyMatrices:null,propID:void 0};function Dt(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Ct,n),i.Z.extend(e,t,n),t.keyMatricesTime={},(0,a.j6)(t.keyMatricesTime,{mtime:0}),t.keyMatrices={normalMatrix:new Float64Array(16),bcwc:new Float64Array(16),bcsc:new Float64Array(16)},t.keyMatrixTime={},(0,a.j6)(t.keyMatrixTime,{mtime:0}),t.keyMatrices={mcwc:r.identity(new Float64Array(16))},t.bufferShift=[0,0,0,0],(0,a.U2)(e,t,["propID","keyMatricesTime"]),Et(e,t)}var _t=(0,a.WL)(Dt,"vtkWebGPUImageSlice");function Mt(e,t){t.classHierarchy.push("vtkWebGPUVolume"),e.buildPass=function(n){t.renderable&&t.renderable.getVisibility()&&n&&(t.WebGPURenderer=e.getFirstAncestorOfType("vtkWebGPURenderer"),t.WebGPURenderWindow=t.WebGPURenderer.getFirstAncestorOfType("vtkWebGPURenderWindow"),void 0===t.propID&&(t.propID=t.WebGPURenderWindow.getUniquePropID()),t.renderable.getMapper().update())},e.queryPass=function(n,r){if(n){if(!t.renderable||!t.renderable.getVisibility())return;var a=t.renderable.getMapper().getBounds();if(!a||6!==a.length||a[0]>a[1])return;r.addVolume(e)}};var n=new Float64Array(3),a=new Float64Array(3);e.getBoundingCubePoints=function(e,r){var i=t.renderable.getMapper().getInputData();if(i)for(var o=i.getExtent(),s=t.renderable.getMatrix(),u=0,l=4;l<6;l++){n[2]=o[l];for(var c=2;c<4;c++){n[1]=o[c];for(var d=0;d<2;d++){n[0]=o[d],i.indexToWorld(n,a);var f=r+3*u;e[f++]=s[0]*a[0]+s[1]*a[1]+s[2]*a[2]+s[3],e[f++]=s[4]*a[0]+s[5]*a[1]+s[6]*a[2]+s[7],e[f++]=s[8]*a[0]+s[9]*a[1]+s[10]*a[2]+s[11],u++}}}},e.getKeyMatrices=function(e){if(Math.max(t.renderable.getMTime(),e.getStabilizedTime())>t.keyMatricesTime.getMTime()){t.renderable.computeMatrix();var n=t.renderable.getMatrix(),a=e.getStabilizedCenterByReference();r.transpose(t.keyMatrices.bcwc,n),r.translate(t.keyMatrices.bcsc,t.keyMatrices.bcwc,[-a[0],-a[1],-a[2]]),t.keyMatricesTime.modified()}return t.keyMatrices}}u("vtkImageSlice",_t);var Ot={propID:void 0,keyMatricesTime:null};function Pt(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Ot,n),i.Z.extend(e,t,n),t.keyMatricesTime={},a.ZP.obj(t.keyMatricesTime,{mtime:0}),t.keyMatrices={bcwc:new Float64Array(16),bcsc:new Float64Array(16)},a.ZP.get(e,t,["propID","keyMatricesTime"]),Mt(e,t)}var Tt=a.ZP.newInstance(Pt,"vtkWebGPUVolume");function xt(e,t){t.classHierarchy.push("vtkWebGPUPixelSpaceCallbackMapper"),e.opaquePass=function(n,r){t.WebGPURenderer=e.getFirstAncestorOfType("vtkWebGPURenderer"),t.WebGPURenderWindow=t.WebGPURenderer.getParent();var a=t.WebGPURenderer.getAspectRatio(),i=t.WebGPURenderer?t.WebGPURenderer.getRenderable().getActiveCamera():null,o=t.WebGPURenderer.getTiledSizeAndOrigin();t.renderable.getUseZValues(),t.renderable.invokeCallback(t.renderable.getInputData(),i,a,o,null)}}u("vtkVolume",Tt);var Rt={};function Lt(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Rt,n),i.Z.extend(e,t,n),xt(e,t)}var kt=a.ZP.newInstance(Lt,"vtkWebGPUPixelSpaceCallbackMapper");u("vtkPixelSpaceCallbackMapper",kt);var Nt=n(29919),Ft=n(71975),Bt=n.n(Ft),Ut=n(94651),Vt=n(18685),jt=n(72682),Gt=n(41841),Ht=n(85155),Qt=n(57979);function qt(e){return qt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},qt(e)}function zt(){zt=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},a=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",o=r.toStringTag||"@@toStringTag";function s(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{s({},"")}catch(e){s=function(e,t,n){return e[t]=n}}function u(e,t,n,r){var a=t&&t.prototype instanceof d?t:d,i=Object.create(a.prototype),o=new I(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(a,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===a)throw i;return C()}for(n.method=a,n.arg=i;;){var o=n.delegate;if(o){var s=S(o,n);if(s){if(s===c)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var u=l(e,t,n);if("normal"===u.type){if(r=n.done?"completed":"suspendedYield",u.arg===c)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(r="completed",n.method="throw",n.arg=u.arg)}}}(e,n,o),i}function l(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var c={};function d(){}function f(){}function v(){}var m={};s(m,a,(function(){return this}));var p=Object.getPrototypeOf,h=p&&p(p(E([])));h&&h!==t&&n.call(h,a)&&(m=h);var g=v.prototype=d.prototype=Object.create(m);function A(e){["next","throw","return"].forEach((function(t){s(e,t,(function(e){return this._invoke(t,e)}))}))}function y(e,t){function r(a,i,o,s){var u=l(e[a],e,i);if("throw"!==u.type){var c=u.arg,d=c.value;return d&&"object"==qt(d)&&n.call(d,"__await")?t.resolve(d.__await).then((function(e){r("next",e,o,s)}),(function(e){r("throw",e,o,s)})):t.resolve(d).then((function(e){c.value=e,o(c)}),(function(e){return r("throw",e,o,s)}))}s(u.arg)}var a;this._invoke=function(e,n){function i(){return new t((function(t,a){r(e,n,t,a)}))}return a=a?a.then(i,i):i()}}function S(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,S(e,t),"throw"===t.method))return c;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return c}var r=l(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,c;var a=r.arg;return a?a.done?(t[e.resultName]=a.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,c):a:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,c)}function b(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function w(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function I(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(b,this),this.reset(!0)}function E(e){if(e){var t=e[a];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var s=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(s&&u){if(this.prev=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),w(n),c}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var a=r.arg;w(n)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:E(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),c}},e}function Wt(e,t,n,r,a,i,o){try{var s=e[i](o),u=s.value}catch(e){return void n(e)}s.done?t(u):Promise.resolve(u).then(r,a)}function Yt(e){return function(){var t=this,n=arguments;return new Promise((function(r,a){var i=e.apply(t,n);function o(e){Wt(i,r,a,o,s,"next",e)}function s(e){Wt(i,r,a,o,s,"throw",e)}o(void 0)}))}}function Zt(e){var t=e.dimensions,n=e.metadata,r=e.spacing,a=e.direction,i=e.origin,o=e.scalarData,s=1;"RGB"===n.PhotometricInterpretation&&(s=3);var u=re.ZP.newInstance({name:"Pixels",numberOfComponents:s,values:o}),l=Nt.ZP.newInstance();return l.setDimensions(t),l.setSpacing(r),l.setDirection(a),l.setOrigin(i),l.getPointData().setScalars(u),l}var Kt,Xt={};function $t(e,t){var n=e.indexOf(":"),r=e.substring(0,n),a=Xt[r];if(null==a){if(void 0!==Kt)return Kt(e,t);throw new Error("loadVolumeFromVolumeLoader: no volume loader for volumeId")}var i=a(e,t);return i.promise.then((function(e){(0,Ht.Z)(Gt.Z,jt.Z.VOLUME_LOADED,{volume:e})}),(function(t){var n={volumeId:e,error:t};(0,Ht.Z)(Gt.Z,jt.Z.VOLUME_LOADED_FAILED,n)})),i}function Jt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{imageIds:[]};if(void 0===e)throw new Error("loadVolume: parameter volumeId must not be undefined");var n=Vt.Z.getVolumeLoadObject(e);return void 0!==n?n.promise:(n=$t(e,t)).promise.then((function(e){return e.imageData=Zt(e),e}))}function en(e,t){return tn.apply(this,arguments)}function tn(){return(tn=Yt(zt().mark((function e(t,n){var r;return zt().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(void 0!==t){e.next=2;break}throw new Error("createAndCacheVolume: parameter volumeId must not be undefined");case 2:if(void 0===(r=Vt.Z.getVolumeLoadObject(t))){e.next=5;break}return e.abrupt("return",r.promise);case 5:return(r=$t(t,n)).promise.then((function(e){e.imageData=Zt(e)})),Vt.Z.putVolumeLoadObject(t,r).catch((function(e){throw e})),e.abrupt("return",r.promise);case 9:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function nn(e,t){return rn.apply(this,arguments)}function rn(){return(rn=Yt(zt().mark((function e(t,n){var r,a,i,o,s,u,l,c,d,f,v,m,p,h,g,A,y,S;return zt().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=Vt.Z.getVolume(t)){e.next=3;break}throw new Error("Cannot created derived volume: Referenced volume with id ".concat(t," does not exist."));case 3:if(a=n.volumeId,i=n.targetBuffer,void 0===a&&(a=(0,Qt.Z)()),o=r.metadata,s=r.dimensions,u=r.spacing,l=r.origin,c=r.direction,d=r.scalarData,f=d.length,!i){e.next=32;break}if("Float32Array"!==i.type){e.next=14;break}v=4*f,m=Float32Array,e.next=30;break;case 14:if("Uint8Array"!==i.type){e.next=19;break}v=f,m=Uint8Array,e.next=30;break;case 19:if("Uint16Array"!==i.type){e.next=24;break}v=2*f,m=Uint16Array,e.next=30;break;case 24:if("Int16Array"!==i.type){e.next=29;break}v=2*f,m=Uint16Array,e.next=30;break;case 29:throw new Error("TargetBuffer should be Float32Array or Uint8Array");case 30:e.next=34;break;case 32:v=4*f,m=Float32Array;case 34:if(Vt.Z.isCacheable(v)){e.next=37;break}throw new Error(jt.Z.CACHE_SIZE_EXCEEDED);case 37:return null!=i&&i.sharedArrayBuffer?(h=new SharedArrayBuffer(v),p=new m(h)):p=new m(f),g=re.ZP.newInstance({name:"Pixels",numberOfComponents:1,values:p}),(A=Nt.ZP.newInstance()).setDimensions(s),A.setSpacing(u),A.setDirection(c),A.setOrigin(l),A.getPointData().setScalars(g),y=new Ut.J({volumeId:a,metadata:Bt()(o),dimensions:[s[0],s[1],s[2]],spacing:u,origin:l,direction:c,imageData:A,scalarData:p,sizeInBytes:v,referencedVolumeId:t}),S={promise:Promise.resolve(y)},e.next=49,Vt.Z.putVolumeLoadObject(a,S);case 49:return e.abrupt("return",y);case 50:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function an(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=e.scalarData,a=e.metadata,i=e.dimensions,o=e.spacing,s=e.origin,u=e.direction;if(!r||!(r instanceof Uint8Array||r instanceof Float32Array))throw new Error("To use createLocalVolume you should pass scalarData of type Uint8Array or Float32Array");void 0===t&&(t=(0,Qt.Z)());var l=Vt.Z.getVolume(t);if(l)return l;var c=i[0]*i[1]*i[2],d=r?r.buffer.byteLength:4*c,f=Vt.Z.isCacheable(d);if(!f)throw new Error(jt.Z.CACHE_SIZE_EXCEEDED);var v=re.ZP.newInstance({name:"Pixels",numberOfComponents:1,values:r}),m=Nt.ZP.newInstance();m.setDimensions(i),m.setSpacing(o),m.setDirection(u),m.setOrigin(s),m.getPointData().setScalars(v);var p=new Ut.J({volumeId:t,metadata:Bt()(a),dimensions:[i[0],i[1],i[2]],spacing:o,origin:s,direction:u,imageData:m,scalarData:r,sizeInBytes:d});if(n)return p;var h={promise:Promise.resolve(p)};return Vt.Z.putVolumeLoadObject(t,h),p}function on(e,t){Xt[e]=t}function sn(e){var t=Kt;return Kt=e,t}},95719:function(e,t){"use strict";var n;!function(e){e.ANNOTATION_ADDED="CORNERSTONE_TOOLS_ANNOTATION_ADDED",e.ANNOTATION_COMPLETED="CORNERSTONE_TOOLS_ANNOTATION_COMPLETED",e.ANNOTATION_MODIFIED="CORNERSTONE_TOOLS_ANNOTATION_MODIFIED",e.ANNOTATION_REMOVED="CORNERSTONE_TOOLS_ANNOTATION_REMOVED",e.ANNOTATION_SELECTION_CHANGE="CORNERSTONE_TOOLS_ANNOTATION_SELECTION_CHANGE",e.ANNOTATION_LOCK_CHANGE="CORNERSTONE_TOOLS_ANNOTATION_LOCK_CHANGE",e.ANNOTATION_VISIBILITY_CHANGE="CORNERSTONE_TOOLS_ANNOTATION_VISIBILITY_CHANGE",e.ANNOTATION_RENDERED="CORNERSTONE_TOOLS_ANNOTATION_RENDERED",e.SEGMENTATION_MODIFIED="CORNERSTONE_TOOLS_SEGMENTATION_MODIFIED",e.SEGMENTATION_RENDERED="CORNERSTONE_TOOLS_SEGMENTATION_RENDERED",e.SEGMENTATION_REPRESENTATION_MODIFIED="CORNERSTONE_TOOLS_SEGMENTATION_REPRESENTATION_MODIFIED",e.SEGMENTATION_REMOVED="CORNERSTONE_TOOLS_SEGMENTATION_REMOVED",e.SEGMENTATION_REPRESENTATION_REMOVED="CORNERSTONE_TOOLS_SEGMENTATION_REPRESENTATION_REMOVED",e.SEGMENTATION_DATA_MODIFIED="CORNERSTONE_TOOLS_SEGMENTATION_DATA_MODIFIED",e.KEY_DOWN="CORNERSTONE_TOOLS_KEY_DOWN",e.KEY_UP="CORNERSTONE_TOOLS_KEY_UP",e.MOUSE_DOWN="CORNERSTONE_TOOLS_MOUSE_DOWN",e.MOUSE_UP="CORNERSTONE_TOOLS_MOUSE_UP",e.MOUSE_DOWN_ACTIVATE="CORNERSTONE_TOOLS_MOUSE_DOWN_ACTIVATE",e.MOUSE_DRAG="CORNERSTONE_TOOLS_MOUSE_DRAG",e.MOUSE_MOVE="CORNERSTONE_TOOLS_MOUSE_MOVE",e.MOUSE_CLICK="CORNERSTONE_TOOLS_MOUSE_CLICK",e.MOUSE_DOUBLE_CLICK="CORNERSTONE_TOOLS_MOUSE_DOUBLE_CLICK",e.MOUSE_WHEEL="CORNERSTONE_TOOLS_MOUSE_WHEEL",e.TOUCH_START="CORNERSTONE_TOOLS_TOUCH_START",e.TOUCH_START_ACTIVATE="CORNERSTONE_TOOLS_TOUCH_START_ACTIVATE",e.TOUCH_PRESS="CORNERSTONE_TOOLS_TOUCH_PRESS",e.TOUCH_DRAG="CORNERSTONE_TOOLS_TOUCH_DRAG",e.TOUCH_END="CORNERSTONE_TOOLS_TOUCH_END",e.TOUCH_TAP="CORNERSTONE_TOOLS_TAP",e.TOUCH_SWIPE="CORNERSTONE_TOOLS_SWIPE"}(n||(n={})),t.Z=n},18546:function(e,t,n){"use strict";n.d(t,{Z:function(){return d},o:function(){return f}});var r=n(71975),a=n.n(r),i=n(57979),o=n(41841),s=n(72682),u=n(25002),l=n(32800);function c(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},r=n._getToolSpecificAnnotationsAndIndex(e,t);if(r){var a=r.toolSpecificAnnotations,i=r.index;return a[i]}},this.getNumberOfAnnotationsInFrameOfReference=function(e,t){var r=n.getFrameOfReferenceAnnotations(t);if(!r)return 0;var a=r[e];return a?a.length:0},this.getNumberOfAnnotations=function(e,t){return t?n.getNumberOfAnnotationsInFrameOfReference(e,t):n.getFramesOfReference().reduce((function(t,r){return t+n.getNumberOfAnnotationsInFrameOfReference(e,r)}),0)},this.addAnnotation=function(e){var t=e.metadata,r=t.FrameOfReferenceUID,a=t.toolName,i=n.annotations,o=i[r];o||(i[r]={},o=i[r]);var s=o[a];s||(o[a]=[],s=o[a]),s.push(e),(0,u.checkAndDefineIsLockedProperty)(e),(0,l.checkAndDefineIsVisibleProperty)(e)},this.removeAnnotation=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=n._getToolSpecificAnnotationsAndIndex(e,t);if(r){var a=r.toolSpecificAnnotations,i=r.index,o=a[0].metadata;if(a.splice(i,1),!a.length){var s=o.toolName;delete n.annotations[o.FrameOfReferenceUID][s]}}},this.saveAnnotations=function(e,t){var r=n.annotations;if(e&&t){var i=r[e];if(!i)return;var o=i[t];return a()(o)}if(e){var s=r[e];return a()(s)}return a()(r)},this.restoreAnnotations=function(e,t,r){var i=n.annotations;if(t&&r){var o=i[t];o||(i[t]={},o=i[t]),o[r]=e}else t?i[t]=e:n.annotations=a()(e)},this.removeAllAnnotations=function(){n.annotations={}},t||(t=i.Z()),this.annotations={},this.uid=t,o.Z.addEventListener(s.Z.IMAGE_VOLUME_MODIFIED,this._imageVolumeModifiedHandler)}var t,n,r;return t=e,(n=[{key:"_getToolSpecificAnnotationsAndIndex",value:function(e,t){for(var n,r=t.toolName,a=t.FrameOfReferenceUID,i=this.annotations,o=(n=a?[a]:Object.keys(i)).length,s=0;s1&&void 0!==arguments[1])||arguments[1],n=v();e&&(t?m(e,o,n):p(e,o,n)),h(n,o)}function u(){var e=v();!function(e,t){e.forEach((function(n){p(n,e,t)}))}(o,e),h(e,o)}function l(){return Array.from(o)}function c(e){return o.has(e)}function d(){return o.size}function f(e){if(e){var t=!!e.isLocked;(function(e){var t=Object.getOwnPropertyDescriptor(e,"isLocked");if(t)return t.configurable&&(t.set!==g||t.get!==A);return Object.isExtensible(e)})(e)&&Object.defineProperty(e,"isLocked",{configurable:!1,enumerable:!0,set:g,get:A}),s(e,t)}}function v(){return Object.freeze({added:[],removed:[],locked:[]})}function m(e,t,n){t.has(e)||(t.add(e),n.added.push(e))}function p(e,t,n){t.delete(e)&&n.removed.push(e)}function h(e,t){(e.added.length>0||e.removed.length>0)&&(t.forEach((function(t){e.locked.push(t)})),(0,r.Z)(a.Z,i.Z.ANNOTATION_LOCK_CHANGE,e))}function g(e){s(this,e)}function A(){return c(this)}},38402:function(e,t,n){"use strict";n.r(t),n.d(t,{deselectAnnotation:function(){return c},getAnnotationsSelected:function(){return d},getAnnotationsSelectedByToolName:function(){return f},getAnnotationsSelectedCount:function(){return m},isAnnotationSelected:function(){return v},setAnnotationSelected:function(){return u}});var r=n(85155),a=n(41841),i=n(95719),o=n(66235),s=new Set;function u(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];t?l(e,n):c(e)}function l(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=p();t||h(s,n),e&&!s.has(e)&&(s.add(e),n.added.push(e)),g(n,s)}function c(e){var t=p();e?s.delete(e)&&t.removed.push(e):h(s,t),g(t,s)}function d(){return Array.from(s)}function f(e){return d().filter((function(t){return(0,o.getAnnotation)(t).metadata.toolName===e}))}function v(e){return s.has(e)}function m(){return s.size}function p(){return Object.freeze({added:[],removed:[],selection:[]})}function h(e,t){e.forEach((function(n){e.delete(n)&&t.removed.push(n)}))}function g(e,t){(e.added.length>0||e.removed.length>0)&&(t.forEach((function(t){e.selection.push(t)})),(0,r.Z)(a.Z,i.Z.ANNOTATION_SELECTION_CHANGE,e))}},66235:function(e,t,n){"use strict";n.r(t),n.d(t,{addAnnotation:function(){return f},getAnnotation:function(){return p},getAnnotations:function(){return d},getDefaultAnnotationManager:function(){return l},getNumberOfAnnotations:function(){return v},getViewportSpecificAnnotationManager:function(){return c},removeAllAnnotations:function(){return h},removeAnnotation:function(){return m}});var r=n(80808),a=n(57979),i=n(85155),o=n(41841),s=n(95719),u=n(18546);function l(){return u.o}function c(e){return u.o}function d(e,t){var n=(0,r.ZP)(e),a=c(),i=n.FrameOfReferenceUID;return a.get(i,t)}function f(e,t){var n=c();void 0===t.annotationUID&&(t.annotationUID=a.Z()),n.addAnnotation(t);var u=(0,r.ZP)(e),l=u.renderingEngine,d=u.viewportId,f=s.Z.ANNOTATION_ADDED,v={annotation:t,viewportId:d,renderingEngineId:l.id};return(0,i.Z)(o.Z,f,v),t.annotationUID}function v(e,t){return l().getNumberOfAnnotations(e,t)}function m(e,t){var n=l();t&&(n=c());var r=n.getAnnotation(e);if(r){n.removeAnnotation(e);var a=s.Z.ANNOTATION_REMOVED,u={annotation:r,annotationManagerUID:n.uid};(0,i.Z)(o.Z,a,u)}}function p(e,t){return c().getAnnotation(e)}function h(e){var t=l();e&&(t=c()),t.removeAllAnnotations()}},32800:function(e,t,n){"use strict";n.r(t),n.d(t,{checkAndDefineIsVisibleProperty:function(){return f},isAnnotationVisible:function(){return d},setAnnotationVisibility:function(){return l},showAllAnnotations:function(){return c}});var r=n(85155),a=n(41841),i=n(66235),o=n(95719),s=n(38402),u=new Set;function l(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=v();e&&(t?m(e,u,n):p(e,u,n)),h(n)}function c(){var e=v();u.forEach((function(t){m(t,u,e)})),h(e)}function d(e){if((0,i.getAnnotation)(e))return!u.has(e)}function f(e){if(e){var t,n=null===(t=e.isVisible)||void 0===t||t;(function(e){var t=Object.getOwnPropertyDescriptor(e,"isVisible");if(t)return t.configurable&&(t.set!==g||t.get!==A);return Object.isExtensible(e)})(e)&&Object.defineProperty(e,"isVisible",{configurable:!1,enumerable:!0,set:g,get:A}),l(e.annotationUID,n)}}function v(){return Object.freeze({lastVisible:[],lastHidden:[],hidden:[]})}function m(e,t,n){t.delete(e)&&n.lastVisible.push(e)}function p(e,t,n){t.has(e)||(t.add(e),(0,s.isAnnotationSelected)(e)&&(0,s.deselectAnnotation)(e),n.lastHidden.push(e))}function h(e){(e.lastHidden.length>0||e.lastVisible.length>0)&&(u.forEach((function(t){e.hidden.push(t)})),(0,r.Z)(a.Z,o.Z.ANNOTATION_VISIBILITY_CHANGE,e))}function g(e){l(this.annotationUID,e)}function A(){return d(this.annotationUID)}},74099:function(e,t){"use strict";function n(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function r(e){for(var t=1;to&&i[0]>i[1]&&i[0]>i[2])t+=n,i[0]=0;else if(i[1]>o&&i[1]>i[0]&&i[1]>i[2])t+=r,i[1]=0;else if(i[2]>o&&i[2]>i[0]&&i[2]>i[1])t+=a,i[2]=0;else if(i[0]>o&&i[1]>o&&i[0]===i[1])t+=n+r,i[0]=0,i[1]=0;else if(i[0]>o&&i[2]>o&&i[0]===i[2])t+=n+a,i[0]=0,i[2]=0;else{if(!(i[1]>o&&i[2]>o&&i[1]===i[2]))break;t+=r+a,i[1]=0,i[2]=0}return t}function a(e){var t=e.replace("H","f");return t=(t=(t=(t=(t=(t=t.replace("F","h")).replace("R","l")).replace("L","r")).replace("A","p")).replace("P","a")).toUpperCase()}n.r(t),n.d(t,{getOrientationStringLPS:function(){return r},invertOrientationStringLPS:function(){return a}})},55328:function(e,t,n){"use strict";n.d(t,{Z:function(){return u},d:function(){return l}});var r=n(33932),a=n(53103),i=n(4962),o=n(26333),s=n(77937);function u(e,t){var n=e.type,i=t.volumeId,o=t.delta;if(e instanceof r.Z)e.scroll(o,t.debounceLoading);else{if(!(e instanceof a.Z))throw new Error("Not implemented for Viewport Type: ".concat(n));l(e,i,o)}}function l(e,t,n){var r=e.getCamera(),a=r.focalPoint,u=r.viewPlaneNormal,l=r.position,c=i.Z(e,r,t),d=c.spacingInNormalDirection,f=c.imageVolume;if(!f)throw new Error("Could not find image volume with id ".concat(t," in the viewport"));var v=e.getActor(f.volumeId);v||console.warn("No actor found for with actorUID of",f.volumeId);var m=v.actor,p=o.Z(m,u,a),h=s.Z(a,l,p,u,d,n),g=h.newFocalPoint,A=h.newPosition;e.setCamera({focalPoint:g,position:A}),e.render()}},16132:function(e,t,n){"use strict";var r=n(80808),a=n(33932),i=n(53103),o=n(33318),s=n(47331),u=n(55328);function l(e){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},l(e)}function c(){c=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},a=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",o=r.toStringTag||"@@toStringTag";function s(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{s({},"")}catch(e){s=function(e,t,n){return e[t]=n}}function u(e,t,n,r){var a=t&&t.prototype instanceof v?t:v,i=Object.create(a.prototype),o=new C(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(a,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===a)throw i;return _()}for(n.method=a,n.arg=i;;){var o=n.delegate;if(o){var s=w(o,n);if(s){if(s===f)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var u=d(e,t,n);if("normal"===u.type){if(r=n.done?"completed":"suspendedYield",u.arg===f)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(r="completed",n.method="throw",n.arg=u.arg)}}}(e,n,o),i}function d(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var f={};function v(){}function m(){}function p(){}var h={};s(h,a,(function(){return this}));var g=Object.getPrototypeOf,A=g&&g(g(D([])));A&&A!==t&&n.call(A,a)&&(h=A);var y=p.prototype=v.prototype=Object.create(h);function S(e){["next","throw","return"].forEach((function(t){s(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(a,i,o,s){var u=d(e[a],e,i);if("throw"!==u.type){var c=u.arg,f=c.value;return f&&"object"==l(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,o,s)}),(function(e){r("throw",e,o,s)})):t.resolve(f).then((function(e){c.value=e,o(c)}),(function(e){return r("throw",e,o,s)}))}s(u.arg)}var a;this._invoke=function(e,n){function i(){return new t((function(t,a){r(e,n,t,a)}))}return a=a?a.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return f;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return f}var r=d(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,f;var a=r.arg;return a?a.done?(t[e.resultName]=a.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,f):a:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,f)}function I(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(I,this),this.reset(!0)}function D(e){if(e){var t=e[a];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var s=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(s&&u){if(this.prev=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),f}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var a=r.arg;E(n)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:D(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),f}},e}function d(e,t,n,r,a,i,o){try{var s=e[i](o),u=s.value}catch(e){return void n(e)}s.done?t(u):Promise.resolve(u).then(r,a)}function f(e){return function(){var t=this,n=arguments;return new Promise((function(r,a){var i=e.apply(t,n);function o(e){d(i,r,a,o,s,"next",e)}function s(e){d(i,r,a,o,s,"throw",e)}o(void 0)}))}}function v(){return v=f(c().mark((function e(t){var n,a,i,o,s,l,d,f,v,h,g=arguments;return c().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=g.length>1&&void 0!==g[1]?g[1]:{},a=n.imageIndex,i=n.debounceLoading,o=(0,r.ZP)(t)){e.next=5;break}throw new Error("Element has been disabled");case 5:s=o.viewport,l=m(s,i),d=l.imageIndex,f=l.numberOfSlices,v=p(f,a),h=v-d,(0,u.Z)(s,{delta:h,debounceLoading:i});case 10:case"end":return e.stop()}}),e)}))),v.apply(this,arguments)}function m(e,t){if(e instanceof a.Z)return{numberOfSlices:e.getImageIds().length,imageIndex:t?e.getTargetImageIdIndex():e.getCurrentImageIdIndex()};if(e instanceof i.Z)return o.Z(e);throw new Error("Unsupported viewport type")}function p(e,t){var n=e-1;return(0,s.ZP)(t,0,n)}t.Z=function(e){return v.apply(this,arguments)}},11600:function(e,t,n){var r,a,i,o;function s(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,a,i=[],o=!0,s=!1;try{for(n=n.call(e);!(o=(r=n.next()).done)&&(i.push(r.value),!t||i.length!==t);o=!0);}catch(e){s=!0,a=e}finally{try{o||null==n.return||n.return()}finally{if(s)throw a}}return i}(e,t)||u(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function u(e,t){if(e){if("string"==typeof e)return l(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?l(e,t):void 0}}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0;--a){var i=this.tryEntries[a],o=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var s=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(s&&u){if(this.prev=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var a=r.arg;E(n)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:D(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),d}},e}function d(e,t,n,r,a,i,o){try{var s=e[i](o),u=s.value}catch(e){return void n(e)}s.done?t(u):Promise.resolve(u).then(r,a)}function f(e){return function(){var t=this,n=arguments;return new Promise((function(r,a){var i=e.apply(t,n);function o(e){d(i,r,a,o,s,"next",e)}function s(e){d(i,r,a,o,s,"throw",e)}o(void 0)}))}}function v(e,t){for(var n=0;n0&&r[0]<4?1:+(r[0]+r[1])),!a&&o&&(!(r=o.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=o.match(/Chrome\/(\d+)/))&&(a=+r[1]),e.exports=a},390:function(e,t,n){"use strict";var r=n(2868),a=n(6266),i=n(3880),o=n(8307),s=n(5904).f,u=n(1011),l=n(9081),c=n(7673),d=n(8518),f=n(5584),v=function(e){var t=function t(n,r,i){if(this instanceof t){switch(arguments.length){case 0:return new e;case 1:return new e(n);case 2:return new e(n,r)}return new e(n,r,i)}return a(e,this,arguments)};return t.prototype=e.prototype,t};e.exports=function(e,t){var n,a,p,h,g,A,y,S,b=e.target,w=e.global,I=e.stat,E=e.proto,C=w?r:I?r[b]:(r[b]||{}).prototype,D=w?l:l[b]||d(l,b,{})[b],_=D.prototype;for(p in t)n=!u(w?p:b+(I?".":"#")+p,e.forced)&&C&&f(C,p),g=D[p],n&&(A=e.dontCallGetSet?(S=s(C,p))&&S.value:C[p]),h=n&&A?A:t[p],n&&m(g)==m(h)||(y=e.bind&&n?c(h,r):e.wrap&&n?v(h):E&&o(h)?i(h):h,(e.sham||h&&h.sham||g&&g.sham)&&d(y,"sham",!0),d(D,p,y),E&&(f(l,a=b+"Prototype")||d(l,a,{}),d(l[a],p,h),e.real&&_&&!_[p]&&d(_,p,h)))}},6530:function(e){e.exports=function(e){try{return!!e()}catch(e){return!0}}},6266:function(e,t,n){var r=n(9086),a=Function.prototype,i=a.apply,o=a.call;e.exports="object"==("undefined"==typeof Reflect?"undefined":m(Reflect))&&Reflect.apply||(r?o.bind(i):function(){return o.apply(i,arguments)})},7673:function(e,t,n){var r=n(3880),a=n(5222),i=n(9086),o=r(r.bind);e.exports=function(e,t){return a(e),void 0===t?e:i?o(e,t):function(){return e.apply(t,arguments)}}},9086:function(e,t,n){var r=n(6530);e.exports=!r((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")}))},3146:function(e,t,n){var r=n(9086),a=Function.prototype.call;e.exports=r?a.bind(a):function(){return a.apply(a,arguments)}},6355:function(e,t,n){var r=n(9086),a=Function.prototype,i=a.call,o=r&&a.bind.bind(i,i);e.exports=r?o:function(e){return function(){return i.apply(e,arguments)}}},3880:function(e,t,n){var r=n(1570),a=n(6355);e.exports=function(e){if("Function"===r(e))return a(e)}},8104:function(e,t,n){var r=n(9081),a=n(2868),i=n(8307),o=function(e){return i(e)?e:void 0};e.exports=function(e,t){return arguments.length<2?o(r[e])||o(a[e]):r[e]&&r[e][t]||a[e]&&a[e][t]}},2809:function(e,t,n){var r=n(5222),a=n(1606);e.exports=function(e,t){var n=e[t];return a(n)?void 0:r(n)}},2868:function(e,t,n){var r=function(e){return e&&e.Math==Math&&e};e.exports=r("object"==("undefined"==typeof globalThis?"undefined":m(globalThis))&&globalThis)||r("object"==("undefined"==typeof window?"undefined":m(window))&&window)||r("object"==("undefined"==typeof self?"undefined":m(self))&&self)||r("object"==m(n.g)&&n.g)||function(){return this}()||Function("return this")()},5584:function(e,t,n){var r=n(3880),a=n(2058),i=r({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,t){return i(a(e),t)}},640:function(e,t,n){var r=n(7001),a=n(6530),i=n(231);e.exports=!r&&!a((function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},1251:function(e,t,n){var r=n(3880),a=n(6530),i=n(1570),o=Object,s=r("".split);e.exports=a((function(){return!o("z").propertyIsEnumerable(0)}))?function(e){return"String"==i(e)?s(e,""):o(e)}:o},8307:function(e,t,n){var r=n(2),a=r.all;e.exports=r.IS_HTMLDDA?function(e){return"function"==typeof e||e===a}:function(e){return"function"==typeof e}},1011:function(e,t,n){var r=n(6530),a=n(8307),i=/#|\.prototype\./,o=function(e,t){var n=u[s(e)];return n==c||n!=l&&(a(t)?r(t):!!t)},s=o.normalize=function(e){return String(e).replace(i,".").toLowerCase()},u=o.data={},l=o.NATIVE="N",c=o.POLYFILL="P";e.exports=o},1606:function(e){e.exports=function(e){return null==e}},3359:function(e,t,n){var r=n(8307),a=n(2),i=a.all;e.exports=a.IS_HTMLDDA?function(e){return"object"==m(e)?null!==e:r(e)||e===i}:function(e){return"object"==m(e)?null!==e:r(e)}},8367:function(e){e.exports=!0},1149:function(e,t,n){var r=n(8104),a=n(8307),i=n(5792),o=n(6046),s=Object;e.exports=o?function(e){return"symbol"==m(e)}:function(e){var t=r("Symbol");return a(t)&&i(t.prototype,s(e))}},7550:function(e,t,n){var r=n(7001),a=n(640),i=n(7139),o=n(1912),s=n(5623),u=TypeError,l=Object.defineProperty,c=Object.getOwnPropertyDescriptor;t.f=r?i?function(e,t,n){if(o(e),t=s(t),o(n),"function"==typeof e&&"prototype"===t&&"value"in n&&"writable"in n&&!n.writable){var r=c(e,t);r&&r.writable&&(e[t]=n.value,n={configurable:"configurable"in n?n.configurable:r.configurable,enumerable:"enumerable"in n?n.enumerable:r.enumerable,writable:!1})}return l(e,t,n)}:l:function(e,t,n){if(o(e),t=s(t),o(n),a)try{return l(e,t,n)}catch(e){}if("get"in n||"set"in n)throw u("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},5904:function(e,t,n){var r=n(7001),a=n(3146),i=n(1156),o=n(5595),s=n(3861),u=n(5623),l=n(5584),c=n(640),d=Object.getOwnPropertyDescriptor;t.f=r?d:function(e,t){if(e=s(e),t=u(t),c)try{return d(e,t)}catch(e){}if(l(e,t))return o(!a(i.f,e,t),e[t])}},5792:function(e,t,n){var r=n(3880);e.exports=r({}.isPrototypeOf)},1156:function(e,t){"use strict";var n={}.propertyIsEnumerable,r=Object.getOwnPropertyDescriptor,a=r&&!n.call({1:2},1);t.f=a?function(e){var t=r(this,e);return!!t&&t.enumerable}:n},9466:function(e,t,n){var r=n(3146),a=n(8307),i=n(3359),o=TypeError;e.exports=function(e,t){var n,s;if("string"===t&&a(n=e.toString)&&!i(s=r(n,e)))return s;if(a(n=e.valueOf)&&!i(s=r(n,e)))return s;if("string"!==t&&a(n=e.toString)&&!i(s=r(n,e)))return s;throw o("Can't convert object to primitive value")}},9081:function(e){e.exports={}},4980:function(e,t,n){"use strict";var r=n(1912);e.exports=function(){var e=r(this),t="";return e.hasIndices&&(t+="d"),e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.unicodeSets&&(t+="v"),e.sticky&&(t+="y"),t}},2733:function(e,t,n){var r=n(3146),a=n(5584),i=n(5792),o=n(4980),s=RegExp.prototype;e.exports=function(e){var t=e.flags;return void 0!==t||"flags"in s||a(e,"flags")||!i(s,e)?t:r(o,e)}},3604:function(e,t,n){var r=n(1606),a=TypeError;e.exports=function(e){if(r(e))throw a("Can't call method on "+e);return e}},2656:function(e,t,n){var r=n(2868),a=n(6868),i="__core-js_shared__",o=r[i]||a(i,{});e.exports=o},6315:function(e,t,n){var r=n(8367),a=n(2656);(e.exports=function(e,t){return a[e]||(a[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.26.0",mode:r?"pure":"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.26.0/LICENSE",source:"https://github.com/zloirock/core-js"})},9075:function(e,t,n){var r=n(8233),a=n(6530);e.exports=!!Object.getOwnPropertySymbols&&!a((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&r&&r<41}))},3861:function(e,t,n){var r=n(1251),a=n(3604);e.exports=function(e){return r(a(e))}},2058:function(e,t,n){var r=n(3604),a=Object;e.exports=function(e){return a(r(e))}},3957:function(e,t,n){var r=n(3146),a=n(3359),i=n(1149),o=n(2809),s=n(9466),u=n(5712),l=TypeError,c=u("toPrimitive");e.exports=function(e,t){if(!a(e)||i(e))return e;var n,u=o(e,c);if(u){if(void 0===t&&(t="default"),n=r(u,e,t),!a(n)||i(n))return n;throw l("Can't convert object to primitive value")}return void 0===t&&(t="number"),s(e,t)}},5623:function(e,t,n){var r=n(3957),a=n(1149);e.exports=function(e){var t=r(e,"string");return a(t)?t:t+""}},7265:function(e){var t=String;e.exports=function(e){try{return t(e)}catch(e){return"Object"}}},9:function(e,t,n){var r=n(3880),a=0,i=Math.random(),o=r(1..toString);e.exports=function(e){return"Symbol("+(void 0===e?"":e)+")_"+o(++a+i,36)}},6046:function(e,t,n){var r=n(9075);e.exports=r&&!Symbol.sham&&"symbol"==m(Symbol.iterator)},7139:function(e,t,n){var r=n(7001),a=n(6530);e.exports=r&&a((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},5712:function(e,t,n){var r=n(2868),a=n(6315),i=n(5584),o=n(9),s=n(9075),u=n(6046),l=a("wks"),c=r.Symbol,d=c&&c.for,f=u?c:c&&c.withoutSetter||o;e.exports=function(e){if(!i(l,e)||!s&&"string"!=typeof l[e]){var t="Symbol."+e;s&&i(c,e)?l[e]=c[e]:l[e]=u&&d?d(t):f(t)}return l[e]}},6764:function(e,t,n){var r=n(390),a=n(7001),i=n(7550).f;r({target:"Object",stat:!0,forced:Object.defineProperty!==i,sham:!a},{defineProperty:i})},8714:function(){},2149:function(e,t,n){var r=n(790);e.exports=r},8531:function(e,t,n){var r=n(6854);e.exports=r},927:function(e,t,n){e.exports=function e(t,n,r){function a(o,s){if(!n[o]){if(!t[o]){if(i)return i(o,!0);var u=new Error("Cannot find module '"+o+"'");throw u.code="MODULE_NOT_FOUND",u}var l=n[o]={exports:{}};t[o][0].call(l.exports,(function(e){return a(t[o][1][e]||e)}),l,l.exports,e,t,n,r)}return n[o].exports}for(var i=void 0,o=0;o=43)}})).catch((function(){return!1}))}(e).then((function(e){return f=e}))}function S(e){var t=v[e.name],n={};n.promise=new o((function(e,t){n.resolve=e,n.reject=t})),t.deferredOperations.push(n),t.dbReady?t.dbReady=t.dbReady.then((function(){return n.promise})):t.dbReady=n.promise}function b(e){var t=v[e.name].deferredOperations.pop();if(t)return t.resolve(),t.promise}function w(e,t){var n=v[e.name].deferredOperations.pop();if(n)return n.reject(t),n.promise}function I(e,t){return new o((function(n,r){if(v[e.name]=v[e.name]||{forages:[],db:null,dbReady:null,deferredOperations:[]},e.db){if(!t)return n(e.db);S(e),e.db.close()}var i=[e.name];t&&i.push(e.version);var o=a.open.apply(a,i);t&&(o.onupgradeneeded=function(t){var n=o.result;try{n.createObjectStore(e.storeName),t.oldVersion<=1&&n.createObjectStore(d)}catch(n){if("ConstraintError"!==n.name)throw n;console.warn('The database "'+e.name+'" has been upgraded from version '+t.oldVersion+" to version "+t.newVersion+', but the storage "'+e.storeName+'" already exists.')}}),o.onerror=function(e){e.preventDefault(),r(o.error)},o.onsuccess=function(){var t=o.result;t.onversionchange=function(e){e.target.close()},n(t),b(e)}}))}function E(e){return I(e,!1)}function C(e){return I(e,!0)}function D(e,t){if(!e.db)return!0;var n=!e.db.objectStoreNames.contains(e.storeName),r=e.versione.db.version;if(r&&(e.version!==t&&console.warn('The database "'+e.name+"\" can't be downgraded from version "+e.db.version+" to version "+e.version+"."),e.version=e.db.version),a||n){if(n){var i=e.db.version+1;i>e.version&&(e.version=i)}return!0}return!1}function _(e){return i([A(atob(e.data))],{type:e.type})}function M(e){return e&&e.__local_forage_encoded_blob}function O(e){var t=this,n=t._initReady().then((function(){var e=v[t._dbInfo.name];if(e&&e.dbReady)return e.dbReady}));return u(n,e,e),n}function P(e,t,n,r){void 0===r&&(r=1);try{var a=e.db.transaction(e.storeName,t);n(null,a)}catch(a){if(r>0&&(!e.db||"InvalidStateError"===a.name||"NotFoundError"===a.name))return o.resolve().then((function(){if(!e.db||"NotFoundError"===a.name&&!e.db.objectStoreNames.contains(e.storeName)&&e.version<=e.db.version)return e.db&&(e.version=e.db.version+1),C(e)})).then((function(){return function(e){S(e);for(var t=v[e.name],n=t.forages,r=0;r>4,c[u++]=(15&r)<<4|a>>2,c[u++]=(3&a)<<6|63&i;return l}function K(e){var t,n=new Uint8Array(e),r="";for(t=0;t>2],r+=x[(3&n[t])<<4|n[t+1]>>4],r+=x[(15&n[t+1])<<2|n[t+2]>>6],r+=x[63&n[t+2]];return n.length%3==2?r=r.substring(0,r.length-1)+"=":n.length%3==1&&(r=r.substring(0,r.length-2)+"=="),r}var X={serialize:function(e,t){var n="";if(e&&(n=Y.call(e)),e&&("[object ArrayBuffer]"===n||e.buffer&&"[object ArrayBuffer]"===Y.call(e.buffer))){var r,a=L;e instanceof ArrayBuffer?(r=e,a+=N):(r=e.buffer,"[object Int8Array]"===n?a+=B:"[object Uint8Array]"===n?a+=U:"[object Uint8ClampedArray]"===n?a+=V:"[object Int16Array]"===n?a+=j:"[object Uint16Array]"===n?a+=H:"[object Int32Array]"===n?a+=G:"[object Uint32Array]"===n?a+=Q:"[object Float32Array]"===n?a+=q:"[object Float64Array]"===n?a+=z:t(new Error("Failed to get type for BinaryArray"))),t(a+K(r))}else if("[object Blob]"===n){var i=new FileReader;i.onload=function(){var n="~~local_forage_type~"+e.type+"~"+K(this.result);t(L+F+n)},i.readAsArrayBuffer(e)}else try{t(JSON.stringify(e))}catch(n){console.error("Couldn't convert value into a JSON string: ",e),t(null,n)}},deserialize:function(e){if(e.substring(0,k)!==L)return JSON.parse(e);var t,n=e.substring(W),r=e.substring(k,W);if(r===F&&R.test(n)){var a=n.match(R);t=a[1],n=n.substring(a[0].length)}var o=Z(n);switch(r){case N:return o;case F:return i([o],{type:t});case B:return new Int8Array(o);case U:return new Uint8Array(o);case V:return new Uint8ClampedArray(o);case j:return new Int16Array(o);case H:return new Uint16Array(o);case G:return new Int32Array(o);case Q:return new Uint32Array(o);case q:return new Float32Array(o);case z:return new Float64Array(o);default:throw new Error("Unkown type: "+r)}},stringToBuffer:Z,bufferToString:K};function $(e,t,n,r){e.executeSql("CREATE TABLE IF NOT EXISTS "+t.storeName+" (id INTEGER PRIMARY KEY, key unique, value)",[],n,r)}function J(e,t,n,r,a,i){e.executeSql(n,r,a,(function(e,o){o.code===o.SYNTAX_ERR?e.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name = ?",[t.storeName],(function(e,s){s.rows.length?i(e,o):$(e,t,(function(){e.executeSql(n,r,a,i)}),i)}),i):i(e,o)}),i)}function ee(e,t,n,r){var a=this;e=l(e);var i=new o((function(i,o){a.ready().then((function(){void 0===t&&(t=null);var s=t,u=a._dbInfo;u.serializer.serialize(t,(function(t,l){l?o(l):u.db.transaction((function(n){J(n,u,"INSERT OR REPLACE INTO "+u.storeName+" (key, value) VALUES (?, ?)",[e,t],(function(){i(s)}),(function(e,t){o(t)}))}),(function(t){if(t.code===t.QUOTA_ERR){if(r>0)return void i(ee.apply(a,[e,s,n,r-1]));o(t)}}))}))})).catch(o)}));return s(i,n),i}function te(e){return new o((function(t,n){e.transaction((function(r){r.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'",[],(function(n,r){for(var a=[],i=0;i0}var ie={_driver:"localStorageWrapper",_initStorage:function(e){var t={};if(e)for(var n in e)t[n]=e[n];return t.keyPrefix=re(e,this._defaultConfig),ae()?(this._dbInfo=t,t.serializer=X,o.resolve()):o.reject()},_support:function(){try{return"undefined"!=typeof localStorage&&"setItem"in localStorage&&!!localStorage.setItem}catch(e){return!1}}(),iterate:function(e,t){var n=this,r=n.ready().then((function(){for(var t=n._dbInfo,r=t.keyPrefix,a=r.length,i=localStorage.length,o=1,s=0;s=0;n--){var r=localStorage.key(n);0===r.indexOf(e)&&localStorage.removeItem(r)}}));return s(n,e),n},length:function(e){var t=this.keys().then((function(e){return e.length}));return s(t,e),t},key:function(e,t){var n=this,r=n.ready().then((function(){var t,r=n._dbInfo;try{t=localStorage.key(e)}catch(e){t=null}return t&&(t=t.substring(r.keyPrefix.length)),t}));return s(r,t),r},keys:function(e){var t=this,n=t.ready().then((function(){for(var e=t._dbInfo,n=localStorage.length,r=[],a=0;a=0;t--){var n=localStorage.key(t);0===n.indexOf(e)&&localStorage.removeItem(n)}})):o.reject("Invalid arguments"),s(r,t),r}},oe=function(e,t){return e===t||"number"==typeof e&&"number"==typeof t&&isNaN(e)&&isNaN(t)},se=function(e,t){for(var n=e.length,r=0;r=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(t.windowBits>=0&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new s,this.strm.avail_out=0;var n=r.inflateInit2(this.strm,t.windowBits);if(n!==v)throw new Error(o[n]);if(this.header=new u,r.inflateGetHeader(this.strm,this.header),t.dictionary&&("string"==typeof t.dictionary?t.dictionary=i.string2buf(t.dictionary):"[object ArrayBuffer]"===l.call(t.dictionary)&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(n=r.inflateSetDictionary(this.strm,t.dictionary))!==v))throw new Error(o[n])}y.prototype.push=function(e,t){var n,a,o,s=this.strm,u=this.options.chunkSize,c=this.options.dictionary;if(this.ended)return!1;for(a=t===~~t?t:!0===t?f:d,"[object ArrayBuffer]"===l.call(e)?s.input=new Uint8Array(e):s.input=e,s.next_in=0,s.avail_in=s.input.length;;){for(0===s.avail_out&&(s.output=new Uint8Array(u),s.next_out=0,s.avail_out=u),(n=r.inflate(s,a))===p&&c&&((n=r.inflateSetDictionary(s,c))===v?n=r.inflate(s,a):n===g&&(n=p));s.avail_in>0&&n===m&&s.state.wrap>0&&0!==e[s.next_in];)r.inflateReset(s),n=r.inflate(s,a);switch(n){case h:case g:case p:case A:return this.onEnd(n),this.ended=!0,!1}if(o=s.avail_out,s.next_out&&(0===s.avail_out||n===m))if("string"===this.options.to){var y=i.utf8border(s.output,s.next_out),S=s.next_out-y,b=i.buf2string(s.output,y);s.next_out=S,s.avail_out=u-S,S&&s.output.set(s.output.subarray(y,y+S),0),this.onData(b)}else this.onData(s.output.length===s.next_out?s.output:s.output.subarray(0,s.next_out));if(n!==v||0!==o){if(n===m)return n=r.inflateEnd(this.strm),this.onEnd(n),this.ended=!0,!0;if(0===s.avail_in)break}}return!0},y.prototype.onData=function(e){this.chunks.push(e)},y.prototype.onEnd=function(e){e===v&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=a.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},e.exports.Hq=function(e,t){return(t=t||{}).raw=!0,function(e,t){var n=new y(t);if(n.push(e),n.err)throw n.msg||o[n.err];return n.result}(e,t)},n(2436)},7609:function(e){"use strict";var t=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};e.exports.assign=function(e){for(var n=Array.prototype.slice.call(arguments,1);n.length;){var r=n.shift();if(r){if("object"!=m(r))throw new TypeError(r+"must be non-object");for(var a in r)t(r,a)&&(e[a]=r[a])}}return e},e.exports.flattenChunks=function(e){for(var t=0,n=0,r=e.length;n=252?6:r>=248?5:r>=240?4:r>=224?3:r>=192?2:1;n[254]=n[254]=1,e.exports.string2buf=function(e){if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(e);var t,n,r,a,i,o=e.length,s=0;for(a=0;a>>6,t[i++]=128|63&n):n<65536?(t[i++]=224|n>>>12,t[i++]=128|n>>>6&63,t[i++]=128|63&n):(t[i++]=240|n>>>18,t[i++]=128|n>>>12&63,t[i++]=128|n>>>6&63,t[i++]=128|63&n);return t},e.exports.buf2string=function(e,r){var a,i,o=r||e.length;if("function"==typeof TextDecoder&&TextDecoder.prototype.decode)return(new TextDecoder).decode(e.subarray(0,r));var s=new Array(2*o);for(i=0,a=0;a4)s[i++]=65533,a+=l-1;else{for(u&=2===l?31:3===l?15:7;l>1&&a1?s[i++]=65533:u<65536?s[i++]=u:(u-=65536,s[i++]=55296|u>>10&1023,s[i++]=56320|1023&u)}}}return function(e,n){if(n<65534&&e.subarray&&t)return String.fromCharCode.apply(null,e.length===n?e:e.subarray(0,n));for(var r="",a=0;ae.length&&(t=e.length);for(var r=t-1;r>=0&&128==(192&e[r]);)r--;return r<0||0===r?t:r+n[e[r]]>t?r:t}},5530:function(e){"use strict";e.exports=function(e,t,n,r){for(var a=65535&e|0,i=e>>>16&65535|0,o=0;0!==n;){n-=o=n>2e3?2e3:n;do{i=i+(a=a+t[r++]|0)|0}while(--o);a%=65521,i%=65521}return a|i<<16|0}},2436:function(e){"use strict";e.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},1383:function(e){"use strict";var t=new Uint32Array(function(){for(var e,t=[],n=0;n<256;n++){e=n;for(var r=0;r<8;r++)e=1&e?3988292384^e>>>1:e>>>1;t[n]=e}return t}());e.exports=function(e,n,r,a){var i=t,o=a+r;e^=-1;for(var s=a;s>>8^i[255&(e^n[s])];return-1^e}},8235:function(e){"use strict";e.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}},8121:function(e){"use strict";var t=16209;e.exports=function(e,n){var r,a,i,o,s,u,l,c,d,f,v,m,p,h,g,A,y,S,b,w,I,E,C,D,_=e.state;r=e.next_in,C=e.input,a=r+(e.avail_in-5),i=e.next_out,D=e.output,o=i-(n-e.avail_out),s=i+(e.avail_out-257),u=_.dmax,l=_.wsize,c=_.whave,d=_.wnext,f=_.window,v=_.hold,m=_.bits,p=_.lencode,h=_.distcode,g=(1<<_.lenbits)-1,A=(1<<_.distbits)-1;e:do{m<15&&(v+=C[r++]<>>=S=y>>>24,m-=S,0==(S=y>>>16&255))D[i++]=65535&y;else{if(!(16&S)){if(0==(64&S)){y=p[(65535&y)+(v&(1<>>=S,m-=S),m<15&&(v+=C[r++]<>>=S=y>>>24,m-=S,!(16&(S=y>>>16&255))){if(0==(64&S)){y=h[(65535&y)+(v&(1<u){e.msg="invalid distance too far back",_.mode=t;break e}if(v>>>=S,m-=S,w>(S=i-o)){if((S=w-S)>c&&_.sane){e.msg="invalid distance too far back",_.mode=t;break e}if(I=0,E=f,0===d){if(I+=l-S,S2;)D[i++]=E[I++],D[i++]=E[I++],D[i++]=E[I++],b-=3;b&&(D[i++]=E[I++],b>1&&(D[i++]=E[I++]))}else{I=i-w;do{D[i++]=D[I++],D[i++]=D[I++],D[i++]=D[I++],b-=3}while(b>2);b&&(D[i++]=D[I++],b>1&&(D[i++]=D[I++]))}break}}break}}while(r>3,v&=(1<<(m-=b<<3))-1,e.next_in=r,e.next_out=i,e.avail_in=r>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)};function P(){this.strm=null,this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}var T,x,R=function(e){if(!e)return 1;var t=e.state;return!t||t.strm!==e||t.mode16211?1:0},L=function(e){if(R(e))return m;var t=e.state;return e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=y,t.last=0,t.havedict=0,t.flags=-1,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new Int32Array(852),t.distcode=t.distdyn=new Int32Array(592),t.sane=1,t.back=-1,d},k=function(e){if(R(e))return m;var t=e.state;return t.wsize=0,t.whave=0,t.wnext=0,L(e)},N=function(e,t){var n;if(R(e))return m;var r=e.state;return t<0?(n=0,t=-t):(n=5+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?m:(null!==r.window&&r.wbits!==t&&(r.window=null),r.wrap=n,r.wbits=t,k(e))},F=function(e,t){if(!e)return m;var n=new P;e.state=n,n.strm=e,n.window=null,n.mode=y;var r=N(e,t);return r!==d&&(e.state=null),r},B=!0,U=function(e){if(B){T=new Int32Array(512),x=new Int32Array(32);for(var t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(o(1,e.lens,0,288,T,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;o(2,e.lens,0,32,x,0,e.work,{bits:5}),B=!1}e.lencode=T,e.lenbits=9,e.distcode=x,e.distbits=5},V=function(e,t,n,r){var a,i=e.state;return null===i.window&&(i.wsize=1<=i.wsize?(i.window.set(t.subarray(n-i.wsize,n),0),i.wnext=0,i.whave=i.wsize):((a=i.wsize-i.wnext)>r&&(a=r),i.window.set(t.subarray(n-r,n-r+a),i.wnext),(r-=a)?(i.window.set(t.subarray(n-r,n),0),i.wnext=r,i.whave=i.wsize):(i.wnext+=a,i.wnext===i.wsize&&(i.wnext=0),i.whave>>8&255,n.check=a(n.check,ne,2,0),N=0,F=0,n.mode=16181;break}if(n.head&&(n.head.done=!1),!(1&n.wrap)||(((255&N)<<8)+(N>>8))%31){e.msg="incorrect header check",n.mode=_;break}if((15&N)!==A){e.msg="unknown compression method",n.mode=_;break}if(F-=4,X=8+(15&(N>>>=4)),0===n.wbits&&(n.wbits=X),X>15||X>n.wbits){e.msg="invalid window size",n.mode=_;break}n.dmax=1<>8&1),512&n.flags&&4&n.wrap&&(ne[0]=255&N,ne[1]=N>>>8&255,n.check=a(n.check,ne,2,0)),N=0,F=0,n.mode=16182;case 16182:for(;F<32;){if(0===L)break e;L--,N+=s[T++]<>>8&255,ne[2]=N>>>16&255,ne[3]=N>>>24&255,n.check=a(n.check,ne,4,0)),N=0,F=0,n.mode=16183;case 16183:for(;F<16;){if(0===L)break e;L--,N+=s[T++]<>8),512&n.flags&&4&n.wrap&&(ne[0]=255&N,ne[1]=N>>>8&255,n.check=a(n.check,ne,2,0)),N=0,F=0,n.mode=16184;case 16184:if(1024&n.flags){for(;F<16;){if(0===L)break e;L--,N+=s[T++]<>>8&255,n.check=a(n.check,ne,2,0)),N=0,F=0}else n.head&&(n.head.extra=null);n.mode=16185;case 16185:if(1024&n.flags&&((G=n.length)>L&&(G=L),G&&(n.head&&(X=n.head.extra_len-n.length,n.head.extra||(n.head.extra=new Uint8Array(n.head.extra_len)),n.head.extra.set(s.subarray(T,T+G),X)),512&n.flags&&4&n.wrap&&(n.check=a(n.check,s,G,T)),L-=G,T+=G,n.length-=G),n.length))break e;n.length=0,n.mode=16186;case 16186:if(2048&n.flags){if(0===L)break e;G=0;do{X=s[T+G++],n.head&&X&&n.length<65536&&(n.head.name+=String.fromCharCode(X))}while(X&&G>9&1,n.head.done=!0),e.adler=n.check=0,n.mode=b;break;case 16189:for(;F<32;){if(0===L)break e;L--,N+=s[T++]<>>=7&F,F-=7&F,n.mode=D;break}for(;F<3;){if(0===L)break e;L--,N+=s[T++]<>>=1)){case 0:n.mode=16193;break;case 1:if(U(n),n.mode=E,t===c){N>>>=2,F-=2;break e}break;case 2:n.mode=16196;break;case 3:e.msg="invalid block type",n.mode=_}N>>>=2,F-=2;break;case 16193:for(N>>>=7&F,F-=7&F;F<32;){if(0===L)break e;L--,N+=s[T++]<>>16^65535)){e.msg="invalid stored block lengths",n.mode=_;break}if(n.length=65535&N,N=0,F=0,n.mode=I,t===c)break e;case I:n.mode=16195;case 16195:if(G=n.length){if(G>L&&(G=L),G>k&&(G=k),0===G)break e;P.set(s.subarray(T,T+G),x),L-=G,T+=G,k-=G,x+=G,n.length-=G;break}n.mode=b;break;case 16196:for(;F<14;){if(0===L)break e;L--,N+=s[T++]<>>=5,F-=5,n.ndist=1+(31&N),N>>>=5,F-=5,n.ncode=4+(15&N),N>>>=4,F-=4,n.nlen>286||n.ndist>30){e.msg="too many length or distance symbols",n.mode=_;break}n.have=0,n.mode=16197;case 16197:for(;n.have>>=3,F-=3}for(;n.have<19;)n.lens[re[n.have++]]=0;if(n.lencode=n.lendyn,n.lenbits=7,J={bits:n.lenbits},$=o(0,n.lens,0,19,n.lencode,0,n.work,J),n.lenbits=J.bits,$){e.msg="invalid code lengths set",n.mode=_;break}n.have=0,n.mode=16198;case 16198:for(;n.have>>16&255,W=65535&te,!((q=te>>>24)<=F);){if(0===L)break e;L--,N+=s[T++]<>>=q,F-=q,n.lens[n.have++]=W;else{if(16===W){for(ee=q+2;F>>=q,F-=q,0===n.have){e.msg="invalid bit length repeat",n.mode=_;break}X=n.lens[n.have-1],G=3+(3&N),N>>>=2,F-=2}else if(17===W){for(ee=q+3;F>>=q)),N>>>=3,F-=3}else{for(ee=q+7;F>>=q)),N>>>=7,F-=7}if(n.have+G>n.nlen+n.ndist){e.msg="invalid bit length repeat",n.mode=_;break}for(;G--;)n.lens[n.have++]=X}}if(n.mode===_)break;if(0===n.lens[256]){e.msg="invalid code -- missing end-of-block",n.mode=_;break}if(n.lenbits=9,J={bits:n.lenbits},$=o(1,n.lens,0,n.nlen,n.lencode,0,n.work,J),n.lenbits=J.bits,$){e.msg="invalid literal/lengths set",n.mode=_;break}if(n.distbits=6,n.distcode=n.distdyn,J={bits:n.distbits},$=o(2,n.lens,n.nlen,n.ndist,n.distcode,0,n.work,J),n.distbits=J.bits,$){e.msg="invalid distances set",n.mode=_;break}if(n.mode=E,t===c)break e;case E:n.mode=C;case C:if(L>=6&&k>=258){e.next_out=x,e.avail_out=k,e.next_in=T,e.avail_in=L,n.hold=N,n.bits=F,i(e,j),x=e.next_out,P=e.output,k=e.avail_out,T=e.next_in,s=e.input,L=e.avail_in,N=n.hold,F=n.bits,n.mode===b&&(n.back=-1);break}for(n.back=0;z=(te=n.lencode[N&(1<>>16&255,W=65535&te,!((q=te>>>24)<=F);){if(0===L)break e;L--,N+=s[T++]<>Y)])>>>16&255,W=65535&te,!(Y+(q=te>>>24)<=F);){if(0===L)break e;L--,N+=s[T++]<>>=Y,F-=Y,n.back+=Y}if(N>>>=q,F-=q,n.back+=q,n.length=W,0===z){n.mode=16205;break}if(32&z){n.back=-1,n.mode=b;break}if(64&z){e.msg="invalid literal/length code",n.mode=_;break}n.extra=15&z,n.mode=16201;case 16201:if(n.extra){for(ee=n.extra;F>>=n.extra,F-=n.extra,n.back+=n.extra}n.was=n.length,n.mode=16202;case 16202:for(;z=(te=n.distcode[N&(1<>>16&255,W=65535&te,!((q=te>>>24)<=F);){if(0===L)break e;L--,N+=s[T++]<>Y)])>>>16&255,W=65535&te,!(Y+(q=te>>>24)<=F);){if(0===L)break e;L--,N+=s[T++]<>>=Y,F-=Y,n.back+=Y}if(N>>>=q,F-=q,n.back+=q,64&z){e.msg="invalid distance code",n.mode=_;break}n.offset=W,n.extra=15&z,n.mode=16203;case 16203:if(n.extra){for(ee=n.extra;F>>=n.extra,F-=n.extra,n.back+=n.extra}if(n.offset>n.dmax){e.msg="invalid distance too far back",n.mode=_;break}n.mode=16204;case 16204:if(0===k)break e;if(G=j-k,n.offset>G){if((G=n.offset-G)>n.whave&&n.sane){e.msg="invalid distance too far back",n.mode=_;break}G>n.wnext?(G-=n.wnext,H=n.wsize-G):H=n.wnext-G,G>n.length&&(G=n.length),Q=n.window}else Q=P,H=x-n.offset,G=n.length;G>k&&(G=k),k-=G,n.length-=G;do{P[x++]=Q[H++]}while(--G);0===n.length&&(n.mode=C);break;case 16205:if(0===k)break e;P[x++]=n.length,k--,n.mode=C;break;case D:if(n.wrap){for(;F<32;){if(0===L)break e;L--,N|=s[T++]<=1&&0===R[C];C--);if(D>C&&(D=C),0===C)return u[l++]=20971520,u[l++]=20971520,d.bits=1,0;for(E=1;E0&&(0===e||1!==C))return-1;for(L[1]=0,w=1;w<15;w++)L[w+1]=L[w]+R[w];for(I=0;I852||2===e&&P>592)return 1;for(;;){A=w-M,c[I]+1=g?(y=k[c[I]-g],S=x[c[I]-g]):(y=96,S=0),f=1<>M)+(v-=f)]=A<<24|y<<16|S|0}while(0!==v);for(f=1<>=1;if(0!==f?(T&=f-1,T+=f):T=0,I++,0==--R[w]){if(w===C)break;w=i[o+c[I]]}if(w>D&&(T&p)!==m){for(0===M&&(M=D),h+=E,O=1<<(_=w-M);_+M852||2===e&&P>592)return 1;u[m=T&p]=D<<24|_<<16|h-l|0}}return 0!==T&&(u[h+T]=w-M<<24|64<<16|0),d.bits=D,0}},5710:function(e){"use strict";e.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},8894:function(e){"use strict";e.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},6479:function(e,t,n){e.exports=n(2149)},9131:function(e,t,n){e.exports=n(5723)}},t={};function n(r){var a=t[r];if(void 0!==a)return a.exports;var i=t[r]={exports:{}};return e[r](i,i.exports,n),i.exports}n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.g=function(){if("object"==("undefined"==typeof globalThis?"undefined":m(globalThis)))return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==("undefined"==typeof window?"undefined":m(window)))return window}}(),n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},function(){var e;n.g.importScripts&&(e=n.g.location+"");var t=n.g.document;if(!e&&t&&(t.currentScript&&(e=t.currentScript.src),!e)){var r=t.getElementsByTagName("script");r.length&&(e=r[r.length-1].src)}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),n.p=e}();var r={};return function(){"use strict";function e(e,t,n){if(void 0===e)throw new Error("decodeRGB: rgbBuffer must not be undefined");if(e.length%3!=0)throw new Error("decodeRGB: rgbBuffer length must be divisible by 3");var r=e.length/3,a=0,i=0;if(n)for(var o=0;o>t;return r}function l(e,t,n){var r=e.columns*e.rows,a=e.pixelData,i=e.redPaletteColorLookupTableData,s=e.greenPaletteColorLookupTableData,u=e.bluePaletteColorLookupTableData,l=e.redPaletteColorLookupTableData.length,c=0,d=0,f=e.redPaletteColorLookupTableDescriptor[1],v=8===e.redPaletteColorLookupTableDescriptor[2]?0:8,m=o(i,v),p=o(s,v),h=o(u,v);if(n)for(var g=0;gf+l-1?A=l-1:A-=f,t[d++]=m[A],t[d++]=p[A],t[d++]=h[A],t[d++]=255}else for(var y=0;yf+l-1?S=l-1:S-=f,t[d++]=m[S],t[d++]=p[S],t[d++]=h[S]}}function d(e,t){if(e.elements[t]&&6===e.elements[t].length)return[e.uint16(t,0),e.uint16(t,1),e.uint16(t,2)]}function m(e,t,n){for(var r=[],a=e.elements[t],i=0;i0?0:e.uint16("x00280103")},y=function(e,t,n){var r=[],a=e.string(t);if(a){var i=a.split("\\");if(!(n&&i.length>s&1}t.push({rows:b(e["".concat(r,"0010")]),columns:b(e["".concat(r,"0011")]),type:S(e["".concat(r,"0040")]),x:b(e["".concat(r,"0050")],1)-1,y:b(e["".concat(r,"0050")],0)-1,pixelData:i,description:S(e["".concat(r,"0022")]),label:S(e["".concat(r,"1500")]),roiArea:S(e["".concat(r,"1301")]),roiMean:S(e["".concat(r,"1302")]),roiStandardDeviation:S(e["".concat(r,"1303")])})}}return{overlays:t}}(r):"transferSyntax"===e?{transferSyntaxUID:S(r["00020010"])}:"petSeriesModule"===e?{correctedImage:S(r["00280051"]),units:S(r["00541001"]),decayCorrection:S(r["00541102"])}:"petImageModule"===e?{frameReferenceTime:b(r["00541300"]),actualFrameDuration:b(r["00181242"])}:void 0}};function _(e,t,n){if(n+e.length>t.length)return!1;for(var r=n,a=0;a2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,i=Re.cornerstone,o=a||F(),s=function(e){if("function"==typeof o.errorInterceptor){var t=new Error("request failed");t.request=e,t.response=e.response,t.status=e.status,o.errorInterceptor(t)}},u=new XMLHttpRequest,l=new Promise((function(a,l){var c;o.open(u,e,n,r);var d=o.beforeSend(u,t,n,r);u.responseType="arraybuffer";var f,v=Object.assign({},n,d);Object.keys(v).forEach((function(t){null!==v[t]&&("Accept"===t&&-1!==e.indexOf("accept=")||u.setRequestHeader(t,v[t]))})),r.deferred={resolve:a,reject:l},r.url=e,r.imageId=t,u.onloadstart=function(n){o.onloadstart&&o.onloadstart(n,r);var a={url:e,imageId:t};i.triggerEvent(i.events,"cornerstoneimageloadstart",a)},u.onloadend=function(n){o.onloadend&&o.onloadend(n,r);var a={url:e,imageId:t};i.triggerEvent(i.events,"cornerstoneimageloadend",a)},u.onreadystatechange=function(e){o.onreadystatechange?o.onreadystatechange(e,r):4===u.readyState&&(200===u.status?o.beforeProcessing(u).then(a).catch((function(){s(u),l(u)})):(s(u),l(u)))},u.onprogress=function(n){var a,s,u=n.loaded;n.lengthComputable&&(a=n.total,s=Math.round(u/a*100)),o.onprogress&&o.onprogress(n,r);var l={url:e,imageId:t,loaded:u,total:a,percentComplete:s};i.triggerEvent(i.events,i.EVENTS.IMAGE_LOAD_PROGRESS,l)},u.onerror=function(){s(u),l(u)},u.onabort=function(){s(u),l(u)},null!=o&&null!==(c=o.cache)&&void 0!==c&&c.readCacheProxy&&o.readCache?null==o||null===(f=o.cache)||void 0===f||f.readCacheProxy(u,e,a).then((function(e){e||u.send()})):u.send()}));return l.xhr=u,l},U={xhrRequest:B,setOptions:N,getOptions:F};function V(e){for(var t=0;t2&&void 0!==arguments[2]?arguments[2]:"application/octet-stream",r={Accept:n};return new Promise((function(n,a){var i=B(e,t,r),o=i.xhr;i.then((function(e){var t=new Uint8Array(e),r=o.getResponseHeader("Content-Type")||"application/octet-stream";if(-1!==r.indexOf("multipart")){var i=M(t,"\r\n\r\n");-1===i&&a(new Error("invalid response - no multipart mime header"));var s=G(t,0,i).split("\r\n"),u=V(s);u||a(new Error("invalid response - no boundary marker"));var l=i+4,c=M(t,u,l);-1===c&&a(new Error("invalid response - terminating boundary not found"));var d=c-l-2;n({contentType:j(s),imageFrame:{pixelData:new Uint8Array(e,l,d)}})}else n({contentType:r,imageFrame:{pixelData:t}})}),a)}))},Q=n(9131);function q(e,t,n){return t in e?Q(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var z=function(e){var t=Re.cornerstone.metaData.get("imagePixelModule",e);return{samplesPerPixel:t.samplesPerPixel,photometricInterpretation:t.photometricInterpretation,planarConfiguration:t.planarConfiguration,rows:t.rows,columns:t.columns,bitsAllocated:t.bitsAllocated,bitsStored:t.bitsStored,pixelRepresentation:t.pixelRepresentation,smallestPixelValue:t.smallestPixelValue,largestPixelValue:t.largestPixelValue,redPaletteColorLookupTableDescriptor:t.redPaletteColorLookupTableDescriptor,greenPaletteColorLookupTableDescriptor:t.greenPaletteColorLookupTableDescriptor,bluePaletteColorLookupTableDescriptor:t.bluePaletteColorLookupTableDescriptor,redPaletteColorLookupTableData:t.redPaletteColorLookupTableData,greenPaletteColorLookupTableData:t.greenPaletteColorLookupTableData,bluePaletteColorLookupTableData:t.bluePaletteColorLookupTableData,pixelData:void 0}};function W(){return new Worker(n.p+"index.worker.min.worker.js")}var Y,Z=0,K=[],X=[],$=F(),J={maxWebWorkers:navigator.hardwareConcurrency||1,startWebWorkersOnDemand:!0,webWorkerTaskPaths:[],taskConfiguration:{decodeTask:{initializeCodecsOnStartup:!1,strict:$.strict}}},ee={maxWebWorkers:0,numWebWorkers:0,numTasksQueued:0,numTasksExecuting:0,numTasksCompleted:0,totalTaskTimeInMS:0,totalTimeDelayedInMS:0};function te(){if(K.length){for(var e=0;e=Y.maxWebWorkers)){var e=new W;X.push({worker:e,status:"initializing"}),e.addEventListener("message",ne),e.postMessage({taskType:"initialize",workerIndex:X.length-1,config:Y})}}function ae(e){if((Y=e=e||J).maxWebWorkers=Y.maxWebWorkers||navigator.hardwareConcurrency||1,!Y.startWebWorkersOnDemand)for(var t=0;t2&&void 0!==arguments[2]?arguments[2]:0,r=arguments.length>3?arguments[3]:void 0;Y||ae();var a,i={},o=new Promise((function(e,t){i={resolve:e,reject:t}}));for(a=0;a1&&void 0!==arguments[1]?arguments[1]:0,n=0;n4&&void 0!==arguments[4]?arguments[4]:{},i=arguments.length>5?arguments[5]:void 0;switch(t){case"1.2.840.10008.1.2":case"1.2.840.10008.1.2.1":case"1.2.840.10008.1.2.2":case"1.2.840.10008.1.2.1.99":case"1.2.840.10008.1.2.5":case"1.2.840.10008.1.2.4.51":case"1.2.840.10008.1.2.4.57":case"1.2.840.10008.1.2.4.70":case"1.2.840.10008.1.2.4.80":case"1.2.840.10008.1.2.4.81":case"1.2.840.10008.1.2.4.90":case"1.2.840.10008.1.2.4.91":case"3.2.840.10008.1.2.4.96":return le(e,t,n,a,i);case"1.2.840.10008.1.2.4.50":return 8!==e.bitsAllocated||3!==e.samplesPerPixel&&4!==e.samplesPerPixel?le(e,t,n,a,i):se(e,n,r)}return Promise.reject(new Error("No decoder for transfer syntax ".concat(t)))};function de(e){return"RGB"===e||"PALETTE COLOR"===e||"YBR_FULL"===e||"YBR_FULL_422"===e||"YBR_PARTIAL_422"===e||"YBR_PARTIAL_420"===e||"YBR_RCT"===e||"YBR_ICT"===e}function fe(n,r,a){0===n.planarConfiguration?e(n.pixelData,r,a):t(n.pixelData,r,a)}function ve(e,t,n){if("RGB"===e.photometricInterpretation)fe(e,t,n);else if("YBR_RCT"===e.photometricInterpretation)fe(e,t,n);else if("YBR_ICT"===e.photometricInterpretation)fe(e,t,n);else if("PALETTE COLOR"===e.photometricInterpretation)l(e,t,n);else if("YBR_FULL_422"===e.photometricInterpretation)!function(e,t,n){if(void 0===e)throw new Error("decodeRGB: ybrBuffer must not be undefined");if(e.length%2!=0)throw new Error("decodeRGB: ybrBuffer length must be divisble by 3");var r=e.length/2,a=0,i=0;if(n)for(var o=0;o3&&void 0!==arguments[3]?arguments[3]:{},a=!0;if(void 0!==r.useRGBA&&(a=r.useRGBA),r.preScale={enabled:!(!r.preScale||void 0===r.preScale.enabled)&&r.preScale.enabled},!t||!t.length)return Promise.reject(new Error("The file does not contain image data."));var i=Re.cornerstone,o=document.createElement("canvas"),s=z(e);if(r.preScale.enabled){var u=ge(i.metaData,e);u&&(r.preScale=ye(ye({},r.preScale),{},{scalingParameters:u}))}var l=F(),c=l.decodeConfig,d=ce(s,n,t,o,r,c),f=c.convertFloatPixelDataToInt,v=c.use16BitDataType;return new Promise((function(t,s){d.then((function(s){if(r.skipCreateImage)return t(s);var u=!1;if(r.targetBuffer){var l,c,d=r.targetBuffer;l=d.offset,c=d.length;var m,p,h=r.targetBuffer,g=h.arrayBuffer,A=h.type;switch(null==c&&(c=s.pixelDataLength),null==l&&(l=0),A){case"Uint8Array":m=Uint8Array;break;case v&&"Uint16Array":m=Uint16Array;break;case v&&"Int16Array":m=Int16Array;break;case"Float32Array":m=Float32Array;break;default:throw new Error("target array for image does not have a valid type.")}if(c!==s.pixelDataLength)throw new Error("target array for image does not have the same length as the decoded image length.");p=g?new m(g,l,c):new m(s.pixelData),s.pixelData=p,u=!0}u||Ie(s);var y=i.metaData.get("imagePlaneModule",e)||{},S=i.metaData.get("voiLutModule",e)||{},b=i.metaData.get("modalityLutModule",e)||{},w=i.metaData.get("sopCommonModule",e)||{},I=de(s.photometricInterpretation);if(I){if(a){if(!me(s,n)){o.height=s.rows,o.width=s.columns;var E=o.getContext("2d").createImageData(s.columns,s.rows);ve(s,E.data,a),s.imageData=E,s.pixelData=E.data}}else if(me(s,n)){var C=new Uint8ClampedArray(s.pixelData.length/4*3);s.pixelData=Ee(s.pixelData,C)}else if("PALETTE COLOR"===s.photometricInterpretation){o.height=s.rows,o.width=s.columns;var D=o.getContext("2d").createImageData(s.columns,s.rows);ve(s,D.data,!0);var _=new D.data.constructor(D.data.length/4*3);s.pixelData=Ee(D.data,_)}var M=oe(s.pixelData);s.smallestPixelValue=M.min,s.largestPixelValue=M.max}var O={imageId:e,color:I,columnPixelSpacing:y.columnPixelSpacing,columns:s.columns,height:s.rows,preScale:s.preScale,intercept:b.rescaleIntercept?b.rescaleIntercept:0,slope:b.rescaleSlope?b.rescaleSlope:1,invert:"MONOCHROME1"===s.photometricInterpretation,minPixelValue:s.smallestPixelValue,maxPixelValue:s.largestPixelValue,rowPixelSpacing:y.rowPixelSpacing,rows:s.rows,sizeInBytes:s.pixelData.byteLength,width:s.columns,windowCenter:S.windowCenter?S.windowCenter[0]:void 0,windowWidth:S.windowWidth?S.windowWidth[0]:void 0,voiLUTFunction:S.voiLUTFunction?S.voiLUTFunction:void 0,decodeTimeInMS:s.decodeTimeInMS,floatPixelData:void 0,imageFrame:s,rgba:I&&a};if(s.pixelData instanceof Float32Array&&f){var P=s.pixelData,T=we(P);O.minPixelValue=T.min,O.maxPixelValue=T.max,O.slope=T.slope,O.intercept=T.intercept,O.floatPixelData=P,O.getPixelData=function(){return T.intPixelData}}else O.getPixelData=function(){return s.pixelData};if(O.color&&(O.getCanvas=function(){return Se===e||(o.height=O.rows,o.width=O.columns,o.getContext("2d").putImageData(s.imageData,0,0),Se=e),o}),b.modalityLUTSequence&&b.modalityLUTSequence.length>0&&be(w.sopClassUID)&&(O.modalityLUT=b.modalityLUTSequence[0]),S.voiLUTSequence&&S.voiLUTSequence.length>0&&(O.voiLUT=S.voiLUTSequence[0]),O.color&&(O.windowWidth=255,O.windowCenter=127),void 0===O.windowCenter||void 0===O.windowWidth){var x=O.maxPixelValue*O.slope+O.intercept,R=O.minPixelValue*O.slope+O.intercept;O.windowWidth=x-R,O.windowCenter=(x+R)/2}t(O)}),s)}))};function De(e){var t="1.2.840.10008.1.2";if(!e)return t;var n=e.split(";"),r={};n.forEach((function(e){var t=e.split("=");if(2===t.length){var n=t[1].trim().replace(/"/g,"");r[t[0].trim()]=n}}));var a={"image/jpeg":"1.2.840.10008.1.2.4.50","image/x-dicom-rle":"1.2.840.10008.1.2.5","image/x-jls":"1.2.840.10008.1.2.4.80","image/jls":"1.2.840.10008.1.2.4.80","image/jll":"1.2.840.10008.1.2.4.70","image/jp2":"1.2.840.10008.1.2.4.90","image/jpx":"1.2.840.10008.1.2.4.92","image/jphc":"3.2.840.10008.1.2.4.96","image/jxl":"1.2.840.10008.1.2.4.140"};return r["transfer-syntax"]?r["transfer-syntax"]:e&&!Object.keys(r).length&&a[e]?a[e]:r.type&&a[r.type]?a[r.type]:a[e]?a[e]:t}function _e(){return Re.cornerstone.imageRetrievalPoolManager}var Me,Oe,Pe=function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=_e(),a=(new Date).getTime(),i=new Promise((function(i,o){var s=n.requestType||"interaction",u=n.additionalDetails||{imageId:e},l=void 0===n.priority?5:n.priority,c=n.addToBeginning||!1,d=e.substring(7);r.addRequest(function(e,t,r){return H(e,t,r).then((function(e){var r=De(e.contentType),s=e.imageFrame.pixelData;Ce(t,s,r,n).then((function(e){var t=(new Date).getTime();e.loadTimeInMS=t-a,i(e)}),o)}),o).catch((function(e){o(e)}))}.bind(t,d,e,"multipart/related; type=application/octet-stream; transfer-syntax=*"),s,u,l,c)}));return{promise:i,cancelFn:void 0}},Te={metaData:{getNumberString:function(e,t,n){var r=S(e,t,n);if(void 0!==r)return parseFloat(r)},getNumberValue:b,getNumberValues:w,getValue:S,metaDataProvider:D},findIndexOfString:M,getPixelData:H,loadImage:Pe,metaDataManager:C,register:function(e){e.registerImageLoader("wadors",Pe),e.metaData.addProvider(D)}},xe=function(e){Te.register(e),it.register(e)},Re={set cornerstone(e){xe(Me=e)},get cornerstone(){if(!Me){if(!window||!window.cornerstone)throw new Error("cornerstoneWADOImageLoader requires a copy of Cornerstone to work properly. Please add cornerstoneWADOImageLoader.external.cornerstone = cornerstone; to your application.");Me=window.cornerstone,xe(Me)}return Me},set dicomParser(e){Oe=e},get dicomParser(){if(!Oe){if(!window||!window.dicomParser)throw new Error("cornerstoneWADOImageLoader requires a copy of dicomParser to work properly. Please add cornerstoneWADOImageLoader.external.dicomParser = dicomParser; to your application.");Oe=window.dicomParser}return Oe}},Le=function(e){var t,n=e.indexOf(":"),r=e.substring(n+1),a=r.indexOf("frame=");if(-1!==a){var i=r.substr(a+6);t=parseInt(i,10),r=r.substr(0,a-1)}return{scheme:e.substr(0,n),url:r,frame:t}},ke=n(6479),Ne=n.n(ke);function Fe(e){var t,n=Re.dicomParser,r=n.parseDicom(e,{untilTag:"x7fe00010"});r.elements.x7fe00010||console.warn("Pixel data not found!");try{t=n.parseDicom(e)}catch(e){console.error(e),console.log("pixel data dataset:",e.dataSet),t=e.dataSet}return r.elements.x7fe00010=t.elements.x7fe00010,r=function(e){var t,n=e.elements.x7fe00010.fragments,r=e.byteArray.length,a=function(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=u(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,a=function(){};return{s:a,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw i}}}}(n);try{for(a.s();!(t=a.n()).done;){var i=t.value,o=i.position;i.length>r-o&&(console.log("Truncated fragment, changing fragment length from ".concat(i.length," to ").concat(r-o)),i.length=r-o)}}catch(e){a.e(e)}finally{a.f()}return e}(r),r}function Be(e,t,n){return Ue.apply(this,arguments)}function Ue(){return Ue=f(c().mark((function e(t,n,r){var a,i,o,s;return c().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a=Fe(t),i=r.uri,o=r.imageId,s=r.fileTotalLength,e.abrupt("return",(a.fetchMore=function(){var e=f(c().mark((function e(u){var l,d,f,v,m,p,h;return c().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return l=Object.assign({uri:i,imageId:o,fetchedLength:t.length,lengthToFetch:s-t.length},u),d=l.fetchedLength,f=l.lengthToFetch,e.next=5,n(i,o,{byteRange:"".concat(d,"-").concat(d+f)});case 5:return v=e.sent,m=v.arrayBuffer,p=new Uint8Array(m),h=new Uint8Array(a.byteArray.length+p.length),e.abrupt("return",(h.set(a.byteArray),h.set(p,a.byteArray.length),Be(h,n,r)));case 10:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),a));case 2:case"end":return e.stop()}}),e)}))),Ue.apply(this,arguments)}var Ve=0,je={},Ge={};function He(){return{cacheSizeInBytes:Ve,numberOfDataSetsCached:Object.keys(je).length}}var Qe={isLoaded:function(e){return void 0!==je[e]},load:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:B,n=arguments.length>2?arguments[2]:void 0,r=Re.cornerstone,a=Re.dicomParser;if(je[e])return new Promise((function(t){je[e].cacheCount++,t(je[e].dataSet)}));if(Ge[e])return Ge[e].cacheCount++,Ge[e];var i=t(e,n),o=new Promise((function(s,u){i.then(function(){var i=f(c().mark((function i(l){var d,f,v;return c().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:if(d={isPartialContent:!1,fileTotalLength:null},l instanceof ArrayBuffer){i.next=5;break}if(l.arrayBuffer){i.next=4;break}return i.abrupt("return",u(new Error("If not returning ArrayBuffer, must return object with `arrayBuffer` parameter")));case 4:d.isPartialContent=Ne()(l).isPartialContent,d.fileTotalLength=Ne()(l).fileTotalLength,l=l.arrayBuffer;case 5:if(f=new Uint8Array(l),i.prev=6,!d.isPartialContent){i.next=13;break}return i.next=10,Be(f,t,{uri:e,imageId:n,fileTotalLength:d.fileTotalLength});case 10:i.t0=i.sent,i.next=14;break;case 13:i.t0=a.parseDicom(f);case 14:v=i.t0,i.next=20;break;case 17:return i.prev=17,i.t1=i.catch(6),i.abrupt("return",u(i.t1));case 20:je[e]={dataSet:v,cacheCount:o.cacheCount},Ve+=v.byteArray.length,s(v),r.triggerEvent(r.events,"datasetscachechanged",{uri:e,action:"loaded",cacheInfo:He()});case 21:case"end":return i.stop()}}),i,null,[[6,17]])})));return function(e){return i.apply(this,arguments)}}(),u).then((function(){delete Ge[e]}),(function(){delete Ge[e]}))}));return o.cacheCount=1,Ge[e]=o,o},unload:function(e){var t=Re.cornerstone;je[e]&&(je[e].cacheCount--,0===je[e].cacheCount&&(Ve-=je[e].dataSet.byteArray.length,delete je[e],t.triggerEvent(t.events,"datasetscachechanged",{uri:e,action:"unloaded",cacheInfo:He()})))},getInfo:He,purge:function(){je={},Ge={},Ve=0},get:function(e){if(je[e])return je[e].dataSet},update:function(e,t){var n=je[e];n?(Ve-=n.dataSet.byteArray.length,n.dataSet=t,Ve+=t.byteArray.length,Re.cornerstone.triggerEvent(Re.cornerstone.events,"datasetscachechanged",{uri:e,action:"updated",cacheInfo:He()})):console.error("No loaded dataSet for uri ".concat(e))}},qe=function(e,t){var n=Re.dicomParser,r=Le(t),a=Qe.get(r.url);if(a){if("generalSeriesModule"===e)return{modality:a.string("x00080060"),seriesInstanceUID:a.string("x0020000e"),seriesNumber:a.intString("x00200011"),studyInstanceUID:a.string("x0020000d"),seriesDate:n.parseDA(a.string("x00080021")),seriesTime:n.parseTM(a.string("x00080031")||""),acquisitionDate:n.parseDA(a.string("x00080022")||""),acquisitionTime:n.parseTM(a.string("x00080032")||"")};if("patientStudyModule"===e)return{patientAge:a.intString("x00101010"),patientSize:a.floatString("x00101020"),patientWeight:a.floatString("x00101030")};if("imagePlaneModule"===e){var i=y(a,"x00200037",6),o=y(a,"x00200032",3),s=y(a,"x00280030",2),u=null,l=null;s&&(l=s[0],u=s[1]);var c=null,d=null;return i&&(c=[parseFloat(i[0]),parseFloat(i[1]),parseFloat(i[2])],d=[parseFloat(i[3]),parseFloat(i[4]),parseFloat(i[5])]),{frameOfReferenceUID:a.string("x00200052"),rows:a.uint16("x00280010"),columns:a.uint16("x00280011"),imageOrientationPatient:i,rowCosines:c,columnCosines:d,imagePositionPatient:o,sliceThickness:a.floatString("x00180050"),sliceLocation:a.floatString("x00201041"),pixelSpacing:s,rowPixelSpacing:l,columnPixelSpacing:u}}if("imagePixelModule"===e)return p(a);if("modalityLutModule"===e)return{rescaleIntercept:a.floatString("x00281052"),rescaleSlope:a.floatString("x00281053"),rescaleType:a.string("x00281054"),modalityLUTSequence:g(a.uint16("x00280103"),a.elements.x00283000)};if("voiLutModule"===e){var f=A(a);return{windowCenter:y(a,"x00281050",1),windowWidth:y(a,"x00281051",1),voiLUTSequence:g(f,a.elements.x00283010)}}if("sopCommonModule"===e)return{sopClassUID:a.string("x00080016"),sopInstanceUID:a.string("x00080018")};if("petIsotopeModule"===e){var v=a.elements.x00540016;if(void 0===v)return;var m=v.items[0].dataSet;return{radiopharmaceuticalInfo:{radiopharmaceuticalStartTime:n.parseTM(m.string("x00181072")||""),radionuclideTotalDose:m.floatString("x00181074"),radionuclideHalfLife:m.floatString("x00181075")}}}return"overlayPlaneModule"===e?function(e){for(var t=[],n=0;n<=30;n+=2){var r="x60".concat(n.toString(16));4===r.length&&(r="x600".concat(n.toString(16)));var a=e.elements["".concat(r,"3000")];if(a){for(var i=[],o=0;o>s&1}t.push({rows:e.uint16("".concat(r,"0010")),columns:e.uint16("".concat(r,"0011")),type:e.string("".concat(r,"0040")),x:e.int16("".concat(r,"0050"),1)-1,y:e.int16("".concat(r,"0050"),0)-1,pixelData:i,description:e.string("".concat(r,"0022")),label:e.string("".concat(r,"1500")),roiArea:e.string("".concat(r,"1301")),roiMean:e.string("".concat(r,"1302")),roiStandardDeviation:e.string("".concat(r,"1303"))})}}return{overlays:t}}(a):"transferSyntax"===e?{transferSyntaxUID:a.string("x00020010")}:"petSeriesModule"===e?{correctedImage:a.string("x00280051"),units:a.string("x00541001"),decayCorrection:a.string("x00541102")}:"petImageModule"===e?{frameReferenceTime:n.floatString(a.string("x00541300")||""),actualFrameDuration:n.intString(a.string("x00181242"))}:void 0}},ze=[],We={add:function(e){return"dicomfile:"+(ze.push(e)-1)},get:function(e){return ze[e]},remove:function(e){ze[e]=void 0},purge:function(){ze=[]}};function Ye(e,t){var n=Re.dicomParser;if(e.elements.x7fe00010&&e.elements.x7fe00010.basicOffsetTable.length)return n.readEncapsulatedImageFrame(e,e.elements.x7fe00010,t);if(function(e){return e.intString("x00280008")!==e.elements.x7fe00010.fragments.length}(e)){var r=n.createJPEGBasicOffsetTable(e,e.elements.x7fe00010);return n.readEncapsulatedImageFrame(e,e.elements.x7fe00010,t,r)}return n.readEncapsulatedPixelDataFromFragments(e,e.elements.x7fe00010,t)}function Ze(e,t){return e&1<=e.byteArray.length)throw new Error("frame exceeds size of pixelData");return new Uint8Array(e.byteArray.buffer.slice(s,s+l))}if(16===r){if((s=u+t*l*2)>=e.byteArray.length)throw new Error("frame exceeds size of pixelData");return new Uint8Array(e.byteArray.buffer.slice(s,s+2*l))}if(1===r){if((s=u+t*l*.125)>=e.byteArray.length)throw new Error("frame exceeds size of pixelData");return Ke(e.byteArray,s,l)}if(32===r){if((s=u+t*l*4)>=e.byteArray.length)throw new Error("frame exceeds size of pixelData");return new Uint8Array(e.byteArray.buffer.slice(s,s+4*l))}throw new Error("unsupported pixel format")},$e=function(e){var t=Le(e),n=parseInt(t.url,10),r=We.get(n);return new Promise((function(e,t){var n=new FileReader;n.onload=function(t){var n=t.target.result;e(n)},n.onerror=t,n.readAsArrayBuffer(r)}))},Je=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=e.elements.x7fe00010||e.elements.x7fe00008;return n?n.encapsulatedPixelData?Ye(e,t):Xe(e,t):null};function et(e,t){e.decache=function(){var e=Le(t);Qe.unload(e.url)}}function tt(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=arguments.length>3?arguments[3]:void 0,a=arguments.length>4?arguments[4]:void 0,i=arguments.length>5?arguments[5]:void 0,o=(new Date).getTime(),s={cancelFn:void 0};return s.promise=new Promise((function(u,l){e.then((function(e){var c=Je(e,n),d=e.string("x00020010"),f=(new Date).getTime(),v=Ce(t,c,d,a);et(s,t),v.then((function(t){t.data=e,t.sharedCacheKey=r;var n=(new Date).getTime();t.loadTimeInMS=f-o,t.totalTimeInMS=n-o,void 0!==i&&void 0!==i.imageDoneCallback&&i.imageDoneCallback(t),u(t)}),(function(t){l({error:t,dataSet:e})}))}),(function(e){l({error:e})}))})),s}function nt(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=arguments.length>3?arguments[3]:void 0,a=arguments.length>4?arguments[4]:void 0,i=(new Date).getTime(),o=new Promise((function(o,s){var u,l=(new Date).getTime();try{var c=Je(e,n),d=e.string("x00020010");u=Ce(t,c,d,a)}catch(t){return void s({error:t,dataSet:e})}u.then((function(t){t.data=e,t.sharedCacheKey=r;var n=(new Date).getTime();t.loadTimeInMS=l-i,t.totalTimeInMS=n-i,o(t)}),s)}));return{promise:o,cancelFn:void 0}}function rt(e){return"dicomweb"===e||"wadouri"===e?B:"dicomfile"===e?$e:void 0}function at(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=Le(e),r=(t=Object.assign({},t)).loader;if(void 0===r?r=rt(n.scheme):delete t.loader,Qe.isLoaded(n.url))return nt(Qe.get(n.url,r,e),e,n.frame,n.url,t);var a=Qe.load(n.url,r,e);return tt(a,e,n.frame,n.url,t)}var it={metaData:{getImagePixelModule:p,getLUTs:g,getModalityLUTOutputPixelRepresentation:A,getNumberValues:y,metaDataProvider:qe},dataSetCacheManager:Qe,fileManager:We,getEncapsulatedImageFrame:Ye,getUncompressedImageFrame:Xe,loadFileRequest:$e,loadImageFromPromise:tt,getLoaderForScheme:rt,loadImage:at,parseImageId:Le,unpackBinaryFrame:Ke,register:function(e){e.registerImageLoader("dicomweb",at),e.registerImageLoader("wadouri",at),e.registerImageLoader("dicomfile",at),e.metaData.addProvider(qe)}},ot=function(e){N(e)},st="0.0.0-semantically-released",ut={convertRGBColorByPixel:e,convertRGBColorByPlane:t,convertYBRFullByPixel:a,convertYBRFullByPlane:i,convertPALETTECOLOR:l,wadouri:it,wadors:Te,configure:ot,convertColorSpace:ve,createImage:Ce,decodeImageFrame:ce,decodeJPEGBaseline8BitColor:se,getImageFrame:z,getPixelData:H,getMinMax:oe,isColorImage:de,isJPEGBaseline8BitColor:me,webWorkerManager:ie,version:st,internal:U,external:Re}}(),r}()},"object"==m(t)&&"object"==m(e)?e.exports=o():(a=[],void 0===(i="function"==typeof(r=o)?r.apply(t,a):r)||(e.exports=i))},47737:function(e,t,n){"use strict";var r=n(91528),a=n(73235),i=a(r("String.prototype.indexOf"));e.exports=function(e,t){var n=r(e,!!t);return"function"==typeof n&&i(e,".prototype.")>-1?a(n):n}},73235:function(e,t,n){"use strict";var r=n(37156),a=n(91528),i=a("%Function.prototype.apply%"),o=a("%Function.prototype.call%"),s=a("%Reflect.apply%",!0)||r.call(o,i),u=a("%Object.getOwnPropertyDescriptor%",!0),l=a("%Object.defineProperty%",!0),c=a("%Math.max%");if(l)try{l({},"a",{value:1})}catch(e){l=null}e.exports=function(e){var t=s(r,o,arguments);if(u&&l){var n=u(t,"length");n.configurable&&l(t,"length",{value:1+c(0,e.length-(arguments.length-1))})}return t};var d=function(){return s(r,i,arguments)};l?l(e.exports,"apply",{value:d}):e.exports.apply=d},40841:function(e,t){var n;!function(){"use strict";var r={}.hasOwnProperty;function a(){for(var e=[],t=0;te.x&&(this.x=e.x),this.y>e.y&&(this.y=e.y),this.z>e.z&&(this.z=e.z),this}},{key:"max",value:function(e){return this.xt.x&&(this.x=t.x),this.yt.y&&(this.y=t.y),this.zt.z&&(this.z=t.z),this}},{key:"floor",value:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}},{key:"ceil",value:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}},{key:"round",value:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}},{key:"roundToZero",value:function(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this}},{key:"negate",value:function(){return this.multiplyScalar(-1)}},{key:"dot",value:function(e){return this.x*e.x+this.y*e.y+this.z*e.z}},{key:"lengthSq",value:function(){return this.x*this.x+this.y*this.y+this.z*this.z}},{key:"length",value:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}},{key:"lengthManhattan",value:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}},{key:"normalize",value:function(){return this.divideScalar(this.length())}},{key:"setLength",value:function(e){var t=this.length();return 0!==t&&e!==t&&this.multiplyScalar(e/t),this}},{key:"lerp",value:function(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this}},{key:"cross",value:function(e,t){if(void 0!==t)return console.warn("DEPRECATED: Vector3's .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(e,t);var n=this.x,r=this.y,a=this.z;return this.x=r*e.z-a*e.y,this.y=a*e.x-n*e.z,this.z=n*e.y-r*e.x,this}},{key:"crossVectors",value:function(e,t){var n=e.x,r=e.y,a=e.z,i=t.x,o=t.y,s=t.z;return this.x=r*s-a*o,this.y=a*i-n*s,this.z=n*o-r*i,this}},{key:"angleTo",value:function(e){var t=this.dot(e)/(this.length()*e.length());return Math.acos((0,i.clamp)(t,-1,1))}},{key:"distanceTo",value:function(e){return Math.sqrt(this.distanceToSquared(e))}},{key:"distanceToSquared",value:function(e){var t=this.x-e.x,n=this.y-e.y,r=this.z-e.z;return t*t+n*n+r*r}},{key:"setFromMatrixPosition",value:function(e){return this.x=e.elements[12],this.y=e.elements[13],this.z=e.elements[14],this}},{key:"setFromMatrixScale",value:function(e){var t=this.set(e.elements[0],e.elements[1],e.elements[2]).length(),n=this.set(e.elements[4],e.elements[5],e.elements[6]).length(),r=this.set(e.elements[8],e.elements[9],e.elements[10]).length();return this.x=t,this.y=n,this.z=r,this}},{key:"setFromMatrixColumn",value:function(e,t){var n=4*e,r=t.elements;return this.x=r[n],this.y=r[n+1],this.z=r[n+2],this}},{key:"equals",value:function(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}},{key:"fromArray",value:function(e){return this.x=e[0],this.y=e[1],this.z=e[2],this}},{key:"toArray",value:function(){return[this.x,this.y,this.z]}},{key:"clone",value:function(){return new e(this.x,this.y,this.z)}}]),e}();o.prototype.projectOnVector=function(){var e=void 0,t=void 0;return function(n){return void 0===e&&(e=new o),e.copy(n).normalize(),t=this.dot(e),this.copy(e).multiplyScalar(t)}}(),o.prototype.projectOnPlane=function(){var e=void 0;return function(t){return void 0===e&&(e=new o),e.copy(this).projectOnVector(t),this.sub(e)}}(),o.prototype.reflect=function(){var e=void 0;return function(t){return void 0===e&&(e=new o),this.sub(e.copy(t).multiplyScalar(2*this.dot(t)))}}(),o.prototype.clampScalar=function(){var e=void 0,t=void 0;return function(n,r){return void 0===e&&(e=new o,t=new o),e.set(n,n,n),t.set(r,r,r),this.clamp(e,t)}}(),o.prototype.applyAxisAngle=function(){var e=void 0;return function(t,n){return void 0===e&&(e=new a.default),this.applyQuaternion(e.setFromAxisAngle(t.normalize(),n)),this}}(),t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=1e-4;t.clamp=function(e,t,n){return en?n:e},t.degToRad=function(e){return e*(Math.PI/180)},t.approximatelyEquals=function(e,t,n){var a=n||r;return Math.abs(e-t)<=a*Math.max(1,Math.abs(e),Math.abs(t))},t.radToDeg=function(e){return e*(180/Math.PI)},t.sign=function(e){return"number"==typeof e?e?e<0?-1:1:e==e?0:NaN:NaN}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n0?(f=.5/Math.sqrt(d+1),this.w=.25/f,this.x=(l-s)*f,this.y=(a-u)*f,this.z=(i-r)*f):n>o&&n>c?(f=2*Math.sqrt(1+n-o-c),this.w=(l-s)/f,this.x=.25*f,this.y=(r+i)/f,this.z=(a+u)/f):o>c?(f=2*Math.sqrt(1+o-n-c),this.w=(a-u)/f,this.x=(r+i)/f,this.y=.25*f,this.z=(s+l)/f):(f=2*Math.sqrt(1+c-n-o),this.w=(i-r)/f,this.x=(a+u)/f,this.y=(s+l)/f,this.z=.25*f),this}}]),e}();t.default=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(1);function a(e){return e*e}function i(e,t){return a(e.x-t.x)+a(e.y-t.y)}var o={distanceToPoint:function(e,t){return Math.sqrt(function(e,t){var n=i(e.start,e.end);if(0===n)return i(t,e.start);var r=((t.x-e.start.x)*(e.end.x-e.start.x)+(t.y-e.start.y)*(e.end.y-e.start.y))/n;return i(t,r<0?e.start:r>1?e.end:{x:e.start.x+r*(e.end.x-e.start.x),y:e.start.y+r*(e.end.y-e.start.y)})}(e,t))},intersectLine:function(e,t){var n,a,i,o,s,u,l,c,d,f,v,m={},p=e.start.x,h=e.start.y,g=e.end.x,A=e.end.y,y=t.start.x,S=t.start.y,b=t.end.x,w=t.end.y,I=void 0;if(f=(n=A-h)*b+(i=p-g)*w+(s=g*h-p*A),(0===(d=n*y+i*S+s)||0===f||(0,r.sign)(d)!==(0,r.sign)(f))&&(c=(a=w-S)*g+(o=y-b)*A+(u=b*S-y*w),0===(l=a*p+o*h+u)||0===c||(0,r.sign)(l)!==(0,r.sign)(c))){v=n*o-a*i,I=i*u-o*s;var E=parseFloat(I/v);I=a*s-n*u;var C=parseFloat(I/v);return m.x=E,m.y=C,m}}};t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Vector3=t.rect=t.quaternion=t.point=t.Plane=t.Matrix4=t.sign=t.radToDeg=t.degToRad=t.clamp=t.lineSegment=t.Line3=void 0;var r=f(n(5)),a=f(n(3)),i=n(1),o=f(n(6)),s=f(n(7)),u=f(n(8)),l=f(n(2)),c=f(n(9)),d=f(n(0));function f(e){return e&&e.__esModule?e:{default:e}}var v={Line3:r.default,lineSegment:a.default,clamp:i.clamp,degToRad:i.degToRad,radToDeg:i.radToDeg,sign:i.sign,Matrix4:o.default,Plane:s.default,point:u.default,quaternion:l.default,rect:c.default,Vector3:d.default};t.Line3=r.default,t.lineSegment=a.default,t.clamp=i.clamp,t.degToRad=i.degToRad,t.radToDeg=i.radToDeg,t.sign=i.sign,t.Matrix4=o.default,t.Plane=s.default,t.point=u.default,t.quaternion=l.default,t.rect=c.default,t.Vector3=d.default,t.default=v},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n1||isNaN(u))){var l=this.start.clone().add(t.clone().multiplyScalar(u));return l.clone().sub(e.start).lengthSq()+l.clone().sub(e.end).lengthSq()<=e.distanceSq()?l:void 0}}}}]),e}();t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n0||n<0&&t>0}},{key:"intersectPlane",value:function(e){var t=this.normal.clone().cross(e.normal),n={origin:new a.default,direction:t};if(this.normal.clone().cross(e.normal).length<1e-10)return n.direction=new a.default,n;var r=this.constant,i=e.constant,o=this.normal.clone().dot(e.normal),s=-(r-i*o)/(1-o*o),u=-(i-r*o)/(1-o*o);return n.origin=this.normal.clone().multiplyScalar(s).add(e.normal.clone().multiplyScalar(u)),n}},{key:"coplanarPoint",value:function(e){return(e||new a.default).copy(this.normal).multiplyScalar(-this.constant)}},{key:"translate",value:function(e){return this.constant=this.constant-e.dot(this.normal),this}},{key:"equals",value:function(e){return e.normal.equals(this.normal)&&e.constant===this.constant}},{key:"clone",value:function(){return(new e).copy(this)}}]),e}();i.prototype.setFromCoplanarPoints=function(){var e=new a.default,t=new a.default;return function(n,r,a){var i=e.subVectors(a,r).cross(t.subVectors(n,r)).normalize();return this.setFromNormalAndCoplanarPoint(i,n),this}}(),i.prototype.intersectLine=function(){var e=new a.default;return function(t,n){var r=n||new a.default,i=t.delta(e),o=this.normal.dot(i);if(0===o)return 0===this.distanceToPoint(t.start)?r.copy(t.start):void 0;var s=-(t.start.dot(this.normal)+this.constant)/o;return s<0||s>1?void 0:r.copy(i).multiplyScalar(s).add(t.start)}}(),t.default=i},function(e,t,n){"use strict";function r(e,t){return{x:e.x-t.x,y:e.y-t.y}}function a(e,t){return Math.sqrt(i(e,t))}function i(e,t){var n=r(e,t);return n.x*n.x+n.y*n.y}Object.defineProperty(t,"__esModule",{value:!0});var o={subtract:r,copy:function(e){return{x:e.x,y:e.y}},pageToPoint:function(e){return{x:e.pageX,y:e.pageY}},distance:a,distanceSquared:i,insideRect:function(e,t){return!(e.xt.left+t.width||e.yt.top+t.height)},findClosestPoint:function(e,t){var n=[],r=void 0;return e.forEach((function(e,i){var o=a(e,t);n.push(o),r=0===i?o:Math.min(o,r)})),e[n.indexOf(r)]}};t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e){return e&&e.__esModule?e:{default:e}}(n(3));function a(e){return{topLeft:{x:e.left,y:e.top},bottomRight:{x:e.left+e.width,y:e.top+e.height}}}var i={distanceToPoint:function(e,t){var n=655535;return function(e){return[{start:{x:e.left,y:e.top},end:{x:e.left+e.width,y:e.top}},{start:{x:e.left+e.width,y:e.top},end:{x:e.left+e.width,y:e.top+e.height}},{start:{x:e.left+e.width,y:e.top+e.height},end:{x:e.left,y:e.top+e.height}},{start:{x:e.left,y:e.top+e.height},end:{x:e.left,y:e.top}}]}(e).forEach((function(e){var a=r.default.distanceToPoint(e,t);a=0?t.width>=0?!(i.bottomRight.x<=o.topLeft.x||o.bottomRight.x<=i.topLeft.x):!(i.bottomRight.x<=o.bottomRight.x||o.topLeft.x<=i.topLeft.x):t.width>=0?!(i.topLeft.x<=o.topLeft.x||o.bottomRight.x<=i.bottomRight.x):!(i.topLeft.x<=o.bottomRight.x||o.topLeft.x<=i.bottomRight.x),r=e.height>=0?t.height>=0?!(i.bottomRight.y<=o.topLeft.y||o.bottomRight.y<=i.topLeft.y):!(i.bottomRight.y<=o.bottomRight.y||o.topLeft.y<=i.topLeft.y):t.height>=0?!(i.topLeft.y<=o.topLeft.y||o.bottomRight.y<=i.bottomRight.y):!(i.topLeft.y<=o.bottomRight.y||o.top<=i.bottomRight.y),n&&r}(e,t)){var r=a(e),i=a(t);return e.width>=0?t.width>=0?(n.topLeft.x=Math.max(r.topLeft.x,i.topLeft.x),n.bottomRight.x=Math.min(r.bottomRight.x,i.bottomRight.x)):(n.topLeft.x=Math.max(r.topLeft.x,i.bottomRight.x),n.bottomRight.x=Math.min(r.bottomRight.x,i.topLeft.x)):t.width>=0?(n.topLeft.x=Math.min(r.topLeft.x,i.bottomRight.x),n.bottomRight.x=Math.max(r.bottomRight.x,i.topLeft.x)):(n.topLeft.x=Math.min(r.topLeft.x,i.topLeft.x),n.bottomRight.x=Math.max(r.bottomRight.x,i.bottomRight.x)),e.height>=0?t.height>=0?(n.topLeft.y=Math.max(r.topLeft.y,i.topLeft.y),n.bottomRight.y=Math.min(r.bottomRight.y,i.bottomRight.y)):(n.topLeft.y=Math.max(r.topLeft.y,i.bottomRight.y),n.bottomRight.y=Math.min(r.bottomRight.y,i.topLeft.y)):t.height>=0?(n.topLeft.y=Math.min(r.topLeft.y,i.bottomRight.y),n.bottomRight.y=Math.max(r.bottomRight.y,i.topLeft.y)):(n.topLeft.y=Math.min(r.topLeft.y,i.topLeft.y),n.bottomRight.y=Math.max(r.bottomRight.y,i.bottomRight.y)),n}}};t.default=i}])},22737:function(e,t,n){"use strict";n.d(t,{j$:function(){return wu}});var r="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:"undefined"!=typeof self?self:{};function a(e,t){return e(t={exports:{}},t.exports),t.exports}const o=()=>{},s=Symbol("log-levels"),u=Symbol("log-instance");var l=class{constructor(e){this[u]=e,this[s]={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5}}get levels(){return this[s]}get logger(){return this[u]}set logger(e){this[u]=e}get methods(){return Object.keys(this.levels).map((e=>e.toLowerCase())).filter((e=>"silent"!==e))}bindMethod(e,t){const n=e[t];if("function"==typeof n.bind)return n.bind(e);try{return Function.prototype.bind.call(n,e)}catch(t){return function(){return Function.prototype.apply.apply(n,[e,arguments])}}}distillLevel(e){let t=e;return"string"==typeof t&&void 0!==this.levels[t.toUpperCase()]&&(t=this.levels[t.toUpperCase()]),!!this.levelValid(t)&&t}levelValid(e){return"number"==typeof e&&e>=0&&e<=this.levels.SILENT}make(e){return"debug"===e&&(e="log"),void 0!==console[e]?this.bindMethod(console,e):void 0!==console.log?this.bindMethod(console,"log"):o}replaceMethods(e){const t=this.distillLevel(e);if(null==t)throw new Error(`loglevelnext: replaceMethods() called with invalid level: ${e}`);if(!this.logger||"LogLevel"!==this.logger.type)throw new TypeError("loglevelnext: Logger is undefined or invalid. Please specify a valid Logger instance.");this.methods.forEach((e=>{const{[e.toUpperCase()]:n}=this.levels;this.logger[e]=n`[${e.level}]`,name:e=>e.logger.name,template:"{{time}} {{level}} ",time:()=>(new Date).toTimeString().split(" ")[0]};var d=class extends l{constructor(e,t){super(e),this.options=Object.assign({},c,t)}interpolate(e){return this.options.template.replace(/{{([^{}]*)}}/g,((t,n)=>{const r=this.options[n];return r?r({level:e,logger:this.logger}):t}))}make(e){const t=super.make(e);return(...n)=>{const r=this.interpolate(e),[a]=n;"string"==typeof a?n[0]=r+a:n.unshift(r),t(...n)}}};const f={factory:null,level:"warn",name:+new Date,prefix:null};var v=class{constructor(e){if(this.type="LogLevel",this.options=Object.assign({},f,e),this.methodFactory=e.factory,!this.methodFactory){const t=e.prefix?new d(this,e.prefix):new l(this);this.methodFactory=t}this.methodFactory.logger||(this.methodFactory.logger=this),this.name=e.name||"",this.level=this.options.level}get factory(){return this.methodFactory}set factory(e){e.logger=this,this.methodFactory=e,this.methodFactory.replaceMethods(this.level)}disable(){this.level=this.levels.SILENT}enable(){this.level=this.levels.TRACE}get level(){return this.currentLevel}set level(e){const t=this.methodFactory.distillLevel(e);if(!1===t||null==t)throw new RangeError(`loglevelnext: setLevel() called with invalid level: ${e}`);this.currentLevel=t,this.methodFactory.replaceMethods(t),"undefined"==typeof console&&t>a)}return n}};function g(e){var t=e%8,n=Math.floor(e/8);return t>0&&n++,n}function A(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function y(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0;)e[t]=0}const V=256,j=286,G=30,H=15,Q=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),q=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),z=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),W=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Y=new Array(576);U(Y);const Z=new Array(60);U(Z);const K=new Array(512);U(K);const X=new Array(256);U(X);const $=new Array(29);U($);const J=new Array(G);function ee(e,t,n,r,a){this.static_tree=e,this.extra_bits=t,this.extra_base=n,this.elems=r,this.max_length=a,this.has_stree=e&&e.length}let te,ne,re;function ae(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}U(J);const ie=e=>e<256?K[e]:K[256+(e>>>7)],oe=(e,t)=>{e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255},se=(e,t,n)=>{e.bi_valid>16-n?(e.bi_buf|=t<>16-e.bi_valid,e.bi_valid+=n-16):(e.bi_buf|=t<{se(e,n[2*t],n[2*t+1])},le=(e,t)=>{let n=0;do{n|=1&e,e>>>=1,n<<=1}while(--t>0);return n>>>1},ce=(e,t,n)=>{const r=new Array(16);let a,i,o=0;for(a=1;a<=H;a++)r[a]=o=o+n[a-1]<<1;for(i=0;i<=t;i++){let t=e[2*i+1];0!==t&&(e[2*i]=le(r[t]++,t))}},de=e=>{let t;for(t=0;t{e.bi_valid>8?oe(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0},ve=(e,t,n,r)=>{const a=2*t,i=2*n;return e[a]{const r=e.heap[n];let a=n<<1;for(;a<=e.heap_len&&(a{let r,a,i,o,s=0;if(0!==e.last_lit)do{r=e.pending_buf[e.d_buf+2*s]<<8|e.pending_buf[e.d_buf+2*s+1],a=e.pending_buf[e.l_buf+s],s++,0===r?ue(e,a,t):(i=X[a],ue(e,i+V+1,t),o=Q[i],0!==o&&(a-=$[i],se(e,a,o)),r--,i=ie(r),ue(e,i,n),o=q[i],0!==o&&(r-=J[i],se(e,r,o)))}while(s{const n=t.dyn_tree,r=t.stat_desc.static_tree,a=t.stat_desc.has_stree,i=t.stat_desc.elems;let o,s,u,l=-1;for(e.heap_len=0,e.heap_max=573,o=0;o>1;o>=1;o--)me(e,n,o);u=i;do{o=e.heap[1],e.heap[1]=e.heap[e.heap_len--],me(e,n,1),s=e.heap[1],e.heap[--e.heap_max]=o,e.heap[--e.heap_max]=s,n[2*u]=n[2*o]+n[2*s],e.depth[u]=(e.depth[o]>=e.depth[s]?e.depth[o]:e.depth[s])+1,n[2*o+1]=n[2*s+1]=u,e.heap[1]=u++,me(e,n,1)}while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],((e,t)=>{const n=t.dyn_tree,r=t.max_code,a=t.stat_desc.static_tree,i=t.stat_desc.has_stree,o=t.stat_desc.extra_bits,s=t.stat_desc.extra_base,u=t.stat_desc.max_length;let l,c,d,f,v,m,p=0;for(f=0;f<=H;f++)e.bl_count[f]=0;for(n[2*e.heap[e.heap_max]+1]=0,l=e.heap_max+1;l<573;l++)c=e.heap[l],f=n[2*n[2*c+1]+1]+1,f>u&&(f=u,p++),n[2*c+1]=f,c>r||(e.bl_count[f]++,v=0,c>=s&&(v=o[c-s]),m=n[2*c],e.opt_len+=m*(f+v),i&&(e.static_len+=m*(a[2*c+1]+v)));if(0!==p){do{for(f=u-1;0===e.bl_count[f];)f--;e.bl_count[f]--,e.bl_count[f+1]+=2,e.bl_count[u]--,p-=2}while(p>0);for(f=u;0!==f;f--)for(c=e.bl_count[f];0!==c;)d=e.heap[--l],d>r||(n[2*d+1]!==f&&(e.opt_len+=(f-n[2*d+1])*n[2*d],n[2*d+1]=f),c--)}})(e,t),ce(n,l,e.bl_count)},ge=(e,t,n)=>{let r,a,i=-1,o=t[1],s=0,u=7,l=4;for(0===o&&(u=138,l=3),t[2*(n+1)+1]=65535,r=0;r<=n;r++)a=o,o=t[2*(r+1)+1],++s{let r,a,i=-1,o=t[1],s=0,u=7,l=4;for(0===o&&(u=138,l=3),r=0;r<=n;r++)if(a=o,o=t[2*(r+1)+1],!(++s{se(e,0+(r?1:0),3),((e,t,n,r)=>{fe(e),r&&(oe(e,n),oe(e,~n)),e.pending_buf.set(e.window.subarray(t,t+n),e.pending),e.pending+=n})(e,t,n,!0)};var be=e=>{ye||((()=>{let e,t,n,r,a;const i=new Array(16);for(n=0,r=0;r<28;r++)for($[r]=n,e=0;e<1<>=7;r{let a,i,o=0;e.level>0?(2===e.strm.data_type&&(e.strm.data_type=(e=>{let t,n=4093624447;for(t=0;t<=31;t++,n>>>=1)if(1&n&&0!==e.dyn_ltree[2*t])return 0;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return 1;for(t=32;t{let t;for(ge(e,e.dyn_ltree,e.l_desc.max_code),ge(e,e.dyn_dtree,e.d_desc.max_code),he(e,e.bl_desc),t=18;t>=3&&0===e.bl_tree[2*W[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t})(e),a=e.opt_len+3+7>>>3,i=e.static_len+3+7>>>3,i<=a&&(a=i)):a=i=n+5,n+4<=a&&-1!==t?Se(e,t,n,r):4===e.strategy||i===a?(se(e,2+(r?1:0),3),pe(e,Y,Z)):(se(e,4+(r?1:0),3),((e,t,n,r)=>{let a;for(se(e,t-257,5),se(e,n-1,5),se(e,r-4,4),a=0;a(e.pending_buf[e.d_buf+2*e.last_lit]=t>>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&n,e.last_lit++,0===t?e.dyn_ltree[2*n]++:(e.matches++,t--,e.dyn_ltree[2*(X[n]+V+1)]++,e.dyn_dtree[2*ie(t)]++),e.last_lit===e.lit_bufsize-1),Ee={_tr_init:be,_tr_stored_block:Se,_tr_flush_block:we,_tr_tally:Ie,_tr_align:e=>{se(e,2,3),ue(e,256,Y),(e=>{16===e.bi_valid?(oe(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)})(e)}};var Ce=(e,t,n,r)=>{let a=65535&e|0,i=e>>>16&65535|0,o=0;for(;0!==n;){o=n>2e3?2e3:n,n-=o;do{a=a+t[r++]|0,i=i+a|0}while(--o);a%=65521,i%=65521}return a|i<<16|0};const De=new Uint32Array((()=>{let e,t=[];for(var n=0;n<256;n++){e=n;for(var r=0;r<8;r++)e=1&e?3988292384^e>>>1:e>>>1;t[n]=e}return t})());var _e=(e,t,n,r)=>{const a=De,i=r+n;e^=-1;for(let n=r;n>>8^a[255&(e^t[n])];return-1^e},Me={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},Oe={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8};const{_tr_init:Pe,_tr_stored_block:Te,_tr_flush_block:xe,_tr_tally:Re,_tr_align:Le}=Ee,{Z_NO_FLUSH:ke,Z_PARTIAL_FLUSH:Ne,Z_FULL_FLUSH:Fe,Z_FINISH:Be,Z_BLOCK:Ue,Z_OK:Ve,Z_STREAM_END:je,Z_STREAM_ERROR:Ge,Z_DATA_ERROR:He,Z_BUF_ERROR:Qe,Z_DEFAULT_COMPRESSION:qe,Z_FILTERED:ze,Z_HUFFMAN_ONLY:We,Z_RLE:Ye,Z_FIXED:Ze,Z_DEFAULT_STRATEGY:Ke,Z_UNKNOWN:Xe,Z_DEFLATED:$e}=Oe,Je=258,et=262,tt=103,nt=113,rt=666,at=(e,t)=>(e.msg=Me[t],t),it=e=>(e<<1)-(e>4?9:0),ot=e=>{let t=e.length;for(;--t>=0;)e[t]=0};let st=(e,t,n)=>(t<{const t=e.state;let n=t.pending;n>e.avail_out&&(n=e.avail_out),0!==n&&(e.output.set(t.pending_buf.subarray(t.pending_out,t.pending_out+n),e.next_out),e.next_out+=n,t.pending_out+=n,e.total_out+=n,e.avail_out-=n,t.pending-=n,0===t.pending&&(t.pending_out=0))},lt=(e,t)=>{xe(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,ut(e.strm)},ct=(e,t)=>{e.pending_buf[e.pending++]=t},dt=(e,t)=>{e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t},ft=(e,t,n,r)=>{let a=e.avail_in;return a>r&&(a=r),0===a?0:(e.avail_in-=a,t.set(e.input.subarray(e.next_in,e.next_in+a),n),1===e.state.wrap?e.adler=Ce(e.adler,t,a,n):2===e.state.wrap&&(e.adler=_e(e.adler,t,a,n)),e.next_in+=a,e.total_in+=a,a)},vt=(e,t)=>{let n,r,a=e.max_chain_length,i=e.strstart,o=e.prev_length,s=e.nice_match;const u=e.strstart>e.w_size-et?e.strstart-(e.w_size-et):0,l=e.window,c=e.w_mask,d=e.prev,f=e.strstart+Je;let v=l[i+o-1],m=l[i+o];e.prev_length>=e.good_match&&(a>>=2),s>e.lookahead&&(s=e.lookahead);do{if(n=t,l[n+o]===m&&l[n+o-1]===v&&l[n]===l[i]&&l[++n]===l[i+1]){i+=2,n++;do{}while(l[++i]===l[++n]&&l[++i]===l[++n]&&l[++i]===l[++n]&&l[++i]===l[++n]&&l[++i]===l[++n]&&l[++i]===l[++n]&&l[++i]===l[++n]&&l[++i]===l[++n]&&io){if(e.match_start=t,o=r,r>=s)break;v=l[i+o-1],m=l[i+o]}}}while((t=d[t&c])>u&&0!=--a);return o<=e.lookahead?o:e.lookahead},mt=e=>{const t=e.w_size;let n,r,a,i,o;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=t+(t-et)){e.window.set(e.window.subarray(t,t+t),0),e.match_start-=t,e.strstart-=t,e.block_start-=t,r=e.hash_size,n=r;do{a=e.head[--n],e.head[n]=a>=t?a-t:0}while(--r);r=t,n=r;do{a=e.prev[--n],e.prev[n]=a>=t?a-t:0}while(--r);i+=t}if(0===e.strm.avail_in)break;if(r=ft(e.strm,e.window,e.strstart+e.lookahead,i),e.lookahead+=r,e.lookahead+e.insert>=3)for(o=e.strstart-e.insert,e.ins_h=e.window[o],e.ins_h=st(e,e.ins_h,e.window[o+1]);e.insert&&(e.ins_h=st(e,e.ins_h,e.window[o+3-1]),e.prev[o&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=o,o++,e.insert--,!(e.lookahead+e.insert<3)););}while(e.lookahead{let n,r;for(;;){if(e.lookahead=3&&(e.ins_h=st(e,e.ins_h,e.window[e.strstart+3-1]),n=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!==n&&e.strstart-n<=e.w_size-et&&(e.match_length=vt(e,n)),e.match_length>=3)if(r=Re(e,e.strstart-e.match_start,e.match_length-3),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=3){e.match_length--;do{e.strstart++,e.ins_h=st(e,e.ins_h,e.window[e.strstart+3-1]),n=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart}while(0!=--e.match_length);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=st(e,e.ins_h,e.window[e.strstart+1]);else r=Re(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(r&&(lt(e,!1),0===e.strm.avail_out))return 1}return e.insert=e.strstart<2?e.strstart:2,t===Be?(lt(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(lt(e,!1),0===e.strm.avail_out)?1:2},ht=(e,t)=>{let n,r,a;for(;;){if(e.lookahead=3&&(e.ins_h=st(e,e.ins_h,e.window[e.strstart+3-1]),n=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=2,0!==n&&e.prev_length4096)&&(e.match_length=2)),e.prev_length>=3&&e.match_length<=e.prev_length){a=e.strstart+e.lookahead-3,r=Re(e,e.strstart-1-e.prev_match,e.prev_length-3),e.lookahead-=e.prev_length-1,e.prev_length-=2;do{++e.strstart<=a&&(e.ins_h=st(e,e.ins_h,e.window[e.strstart+3-1]),n=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart)}while(0!=--e.prev_length);if(e.match_available=0,e.match_length=2,e.strstart++,r&&(lt(e,!1),0===e.strm.avail_out))return 1}else if(e.match_available){if(r=Re(e,0,e.window[e.strstart-1]),r&<(e,!1),e.strstart++,e.lookahead--,0===e.strm.avail_out)return 1}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(r=Re(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<2?e.strstart:2,t===Be?(lt(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(lt(e,!1),0===e.strm.avail_out)?1:2};function gt(e,t,n,r,a){this.good_length=e,this.max_lazy=t,this.nice_length=n,this.max_chain=r,this.func=a}const At=[new gt(0,0,0,0,((e,t)=>{let n=65535;for(n>e.pending_buf_size-5&&(n=e.pending_buf_size-5);;){if(e.lookahead<=1){if(mt(e),0===e.lookahead&&t===ke)return 1;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;const r=e.block_start+n;if((0===e.strstart||e.strstart>=r)&&(e.lookahead=e.strstart-r,e.strstart=r,lt(e,!1),0===e.strm.avail_out))return 1;if(e.strstart-e.block_start>=e.w_size-et&&(lt(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,t===Be?(lt(e,!0),0===e.strm.avail_out?3:4):(e.strstart>e.block_start&&(lt(e,!1),e.strm.avail_out),1)})),new gt(4,4,8,4,pt),new gt(4,5,16,8,pt),new gt(4,6,32,32,pt),new gt(4,4,16,16,ht),new gt(8,16,32,32,ht),new gt(8,16,128,128,ht),new gt(8,32,128,256,ht),new gt(32,128,258,1024,ht),new gt(32,258,258,4096,ht)];function yt(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=$e,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(1146),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),ot(this.dyn_ltree),ot(this.dyn_dtree),ot(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),ot(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),ot(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}const St=e=>{if(!e||!e.state)return at(e,Ge);e.total_in=e.total_out=0,e.data_type=Xe;const t=e.state;return t.pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap?42:nt,e.adler=2===t.wrap?0:1,t.last_flush=ke,Pe(t),Ve},bt=e=>{const t=St(e);var n;return t===Ve&&((n=e.state).window_size=2*n.w_size,ot(n.head),n.max_lazy_match=At[n.level].max_lazy,n.good_match=At[n.level].good_length,n.nice_match=At[n.level].nice_length,n.max_chain_length=At[n.level].max_chain,n.strstart=0,n.block_start=0,n.lookahead=0,n.insert=0,n.match_length=n.prev_length=2,n.match_available=0,n.ins_h=0),t},wt=(e,t,n,r,a,i)=>{if(!e)return Ge;let o=1;if(t===qe&&(t=6),r<0?(o=0,r=-r):r>15&&(o=2,r-=16),a<1||a>9||n!==$e||r<8||r>15||t<0||t>9||i<0||i>Ze)return at(e,Ge);8===r&&(r=9);const s=new yt;return e.state=s,s.strm=e,s.wrap=o,s.gzhead=null,s.w_bits=r,s.w_size=1<{let n=t.length;if(!e||!e.state)return Ge;const r=e.state,a=r.wrap;if(2===a||1===a&&42!==r.status||r.lookahead)return Ge;if(1===a&&(e.adler=Ce(e.adler,t,n,0)),r.wrap=0,n>=r.w_size){0===a&&(ot(r.head),r.strstart=0,r.block_start=0,r.insert=0);let e=new Uint8Array(r.w_size);e.set(t.subarray(n-r.w_size,n),0),t=e,n=r.w_size}const i=e.avail_in,o=e.next_in,s=e.input;for(e.avail_in=n,e.next_in=0,e.input=t,mt(r);r.lookahead>=3;){let e=r.strstart,t=r.lookahead-2;do{r.ins_h=st(r,r.ins_h,r.window[e+3-1]),r.prev[e&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=e,e++}while(--t);r.strstart=e,r.lookahead=2,mt(r)}return r.strstart+=r.lookahead,r.block_start=r.strstart,r.insert=r.lookahead,r.lookahead=0,r.match_length=r.prev_length=2,r.match_available=0,e.next_in=o,e.input=s,e.avail_in=i,r.wrap=a,Ve},Et={deflateInit:(e,t)=>wt(e,t,$e,15,8,Ke),deflateInit2:wt,deflateReset:bt,deflateResetKeep:St,deflateSetHeader:(e,t)=>e&&e.state?2!==e.state.wrap?Ge:(e.state.gzhead=t,Ve):Ge,deflate:(e,t)=>{let n,r;if(!e||!e.state||t>Ue||t<0)return e?at(e,Ge):Ge;const a=e.state;if(!e.output||!e.input&&0!==e.avail_in||a.status===rt&&t!==Be)return at(e,0===e.avail_out?Qe:Ge);a.strm=e;const i=a.last_flush;if(a.last_flush=t,42===a.status)if(2===a.wrap)e.adler=0,ct(a,31),ct(a,139),ct(a,8),a.gzhead?(ct(a,(a.gzhead.text?1:0)+(a.gzhead.hcrc?2:0)+(a.gzhead.extra?4:0)+(a.gzhead.name?8:0)+(a.gzhead.comment?16:0)),ct(a,255&a.gzhead.time),ct(a,a.gzhead.time>>8&255),ct(a,a.gzhead.time>>16&255),ct(a,a.gzhead.time>>24&255),ct(a,9===a.level?2:a.strategy>=We||a.level<2?4:0),ct(a,255&a.gzhead.os),a.gzhead.extra&&a.gzhead.extra.length&&(ct(a,255&a.gzhead.extra.length),ct(a,a.gzhead.extra.length>>8&255)),a.gzhead.hcrc&&(e.adler=_e(e.adler,a.pending_buf,a.pending,0)),a.gzindex=0,a.status=69):(ct(a,0),ct(a,0),ct(a,0),ct(a,0),ct(a,0),ct(a,9===a.level?2:a.strategy>=We||a.level<2?4:0),ct(a,3),a.status=nt);else{let t=$e+(a.w_bits-8<<4)<<8,n=-1;n=a.strategy>=We||a.level<2?0:a.level<6?1:6===a.level?2:3,t|=n<<6,0!==a.strstart&&(t|=32),t+=31-t%31,a.status=nt,dt(a,t),0!==a.strstart&&(dt(a,e.adler>>>16),dt(a,65535&e.adler)),e.adler=1}if(69===a.status)if(a.gzhead.extra){for(n=a.pending;a.gzindex<(65535&a.gzhead.extra.length)&&(a.pending!==a.pending_buf_size||(a.gzhead.hcrc&&a.pending>n&&(e.adler=_e(e.adler,a.pending_buf,a.pending-n,n)),ut(e),n=a.pending,a.pending!==a.pending_buf_size));)ct(a,255&a.gzhead.extra[a.gzindex]),a.gzindex++;a.gzhead.hcrc&&a.pending>n&&(e.adler=_e(e.adler,a.pending_buf,a.pending-n,n)),a.gzindex===a.gzhead.extra.length&&(a.gzindex=0,a.status=73)}else a.status=73;if(73===a.status)if(a.gzhead.name){n=a.pending;do{if(a.pending===a.pending_buf_size&&(a.gzhead.hcrc&&a.pending>n&&(e.adler=_e(e.adler,a.pending_buf,a.pending-n,n)),ut(e),n=a.pending,a.pending===a.pending_buf_size)){r=1;break}r=a.gzindexn&&(e.adler=_e(e.adler,a.pending_buf,a.pending-n,n)),0===r&&(a.gzindex=0,a.status=91)}else a.status=91;if(91===a.status)if(a.gzhead.comment){n=a.pending;do{if(a.pending===a.pending_buf_size&&(a.gzhead.hcrc&&a.pending>n&&(e.adler=_e(e.adler,a.pending_buf,a.pending-n,n)),ut(e),n=a.pending,a.pending===a.pending_buf_size)){r=1;break}r=a.gzindexn&&(e.adler=_e(e.adler,a.pending_buf,a.pending-n,n)),0===r&&(a.status=tt)}else a.status=tt;if(a.status===tt&&(a.gzhead.hcrc?(a.pending+2>a.pending_buf_size&&ut(e),a.pending+2<=a.pending_buf_size&&(ct(a,255&e.adler),ct(a,e.adler>>8&255),e.adler=0,a.status=nt)):a.status=nt),0!==a.pending){if(ut(e),0===e.avail_out)return a.last_flush=-1,Ve}else if(0===e.avail_in&&it(t)<=it(i)&&t!==Be)return at(e,Qe);if(a.status===rt&&0!==e.avail_in)return at(e,Qe);if(0!==e.avail_in||0!==a.lookahead||t!==ke&&a.status!==rt){let n=a.strategy===We?((e,t)=>{let n;for(;;){if(0===e.lookahead&&(mt(e),0===e.lookahead)){if(t===ke)return 1;break}if(e.match_length=0,n=Re(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,n&&(lt(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,t===Be?(lt(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(lt(e,!1),0===e.strm.avail_out)?1:2})(a,t):a.strategy===Ye?((e,t)=>{let n,r,a,i;const o=e.window;for(;;){if(e.lookahead<=Je){if(mt(e),e.lookahead<=Je&&t===ke)return 1;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=3&&e.strstart>0&&(a=e.strstart-1,r=o[a],r===o[++a]&&r===o[++a]&&r===o[++a])){i=e.strstart+Je;do{}while(r===o[++a]&&r===o[++a]&&r===o[++a]&&r===o[++a]&&r===o[++a]&&r===o[++a]&&r===o[++a]&&r===o[++a]&&ae.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=3?(n=Re(e,1,e.match_length-3),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(n=Re(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),n&&(lt(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,t===Be?(lt(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(lt(e,!1),0===e.strm.avail_out)?1:2})(a,t):At[a.level].func(a,t);if(3!==n&&4!==n||(a.status=rt),1===n||3===n)return 0===e.avail_out&&(a.last_flush=-1),Ve;if(2===n&&(t===Ne?Le(a):t!==Ue&&(Te(a,0,0,!1),t===Fe&&(ot(a.head),0===a.lookahead&&(a.strstart=0,a.block_start=0,a.insert=0))),ut(e),0===e.avail_out))return a.last_flush=-1,Ve}return t!==Be?Ve:a.wrap<=0?je:(2===a.wrap?(ct(a,255&e.adler),ct(a,e.adler>>8&255),ct(a,e.adler>>16&255),ct(a,e.adler>>24&255),ct(a,255&e.total_in),ct(a,e.total_in>>8&255),ct(a,e.total_in>>16&255),ct(a,e.total_in>>24&255)):(dt(a,e.adler>>>16),dt(a,65535&e.adler)),ut(e),a.wrap>0&&(a.wrap=-a.wrap),0!==a.pending?Ve:je)},deflateEnd:e=>{if(!e||!e.state)return Ge;const t=e.state.status;return 42!==t&&69!==t&&73!==t&&91!==t&&t!==tt&&t!==nt&&t!==rt?at(e,Ge):(e.state=null,t===nt?at(e,He):Ve)},deflateSetDictionary:It,deflateInfo:"pako deflate (from Nodeca project)"};const Ct=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var Dt=function(e){const t=Array.prototype.slice.call(arguments,1);for(;t.length;){const n=t.shift();if(n){if("object"!=typeof n)throw new TypeError(n+"must be non-object");for(const t in n)Ct(n,t)&&(e[t]=n[t])}}return e},_t=e=>{let t=0;for(let n=0,r=e.length;n=252?6:e>=248?5:e>=240?4:e>=224?3:e>=192?2:1;Ot[254]=Ot[254]=1;var Pt=e=>{if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(e);let t,n,r,a,i,o=e.length,s=0;for(a=0;a>>6,t[i++]=128|63&n):n<65536?(t[i++]=224|n>>>12,t[i++]=128|n>>>6&63,t[i++]=128|63&n):(t[i++]=240|n>>>18,t[i++]=128|n>>>12&63,t[i++]=128|n>>>6&63,t[i++]=128|63&n);return t},Tt=(e,t)=>{const n=t||e.length;if("function"==typeof TextDecoder&&TextDecoder.prototype.decode)return(new TextDecoder).decode(e.subarray(0,t));let r,a;const i=new Array(2*n);for(a=0,r=0;r4)i[a++]=65533,r+=o-1;else{for(t&=2===o?31:3===o?15:7;o>1&&r1?i[a++]=65533:t<65536?i[a++]=t:(t-=65536,i[a++]=55296|t>>10&1023,i[a++]=56320|1023&t)}}return((e,t)=>{if(t<65534&&e.subarray&&Mt)return String.fromCharCode.apply(null,e.length===t?e:e.subarray(0,t));let n="";for(let r=0;r{(t=t||e.length)>e.length&&(t=e.length);let n=t-1;for(;n>=0&&128==(192&e[n]);)n--;return n<0||0===n?t:n+Ot[e[n]]>t?n:t};var Rt=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0};const Lt=Object.prototype.toString,{Z_NO_FLUSH:kt,Z_SYNC_FLUSH:Nt,Z_FULL_FLUSH:Ft,Z_FINISH:Bt,Z_OK:Ut,Z_STREAM_END:Vt,Z_DEFAULT_COMPRESSION:jt,Z_DEFAULT_STRATEGY:Gt,Z_DEFLATED:Ht}=Oe;function Qt(e){this.options=Dt({level:jt,method:Ht,chunkSize:16384,windowBits:15,memLevel:8,strategy:Gt},e||{});let t=this.options;t.raw&&t.windowBits>0?t.windowBits=-t.windowBits:t.gzip&&t.windowBits>0&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new Rt,this.strm.avail_out=0;let n=Et.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(n!==Ut)throw new Error(Me[n]);if(t.header&&Et.deflateSetHeader(this.strm,t.header),t.dictionary){let e;if(e="string"==typeof t.dictionary?Pt(t.dictionary):"[object ArrayBuffer]"===Lt.call(t.dictionary)?new Uint8Array(t.dictionary):t.dictionary,n=Et.deflateSetDictionary(this.strm,e),n!==Ut)throw new Error(Me[n]);this._dict_set=!0}}function qt(e,t){const n=new Qt(t);if(n.push(e,!0),n.err)throw n.msg||Me[n.err];return n.result}Qt.prototype.push=function(e,t){const n=this.strm,r=this.options.chunkSize;let a,i;if(this.ended)return!1;for(i=t===~~t?t:!0===t?Bt:kt,"string"==typeof e?n.input=Pt(e):"[object ArrayBuffer]"===Lt.call(e)?n.input=new Uint8Array(e):n.input=e,n.next_in=0,n.avail_in=n.input.length;;)if(0===n.avail_out&&(n.output=new Uint8Array(r),n.next_out=0,n.avail_out=r),(i===Nt||i===Ft)&&n.avail_out<=6)this.onData(n.output.subarray(0,n.next_out)),n.avail_out=0;else{if(a=Et.deflate(n,i),a===Vt)return n.next_out>0&&this.onData(n.output.subarray(0,n.next_out)),a=Et.deflateEnd(this.strm),this.onEnd(a),this.ended=!0,a===Ut;if(0!==n.avail_out){if(i>0&&n.next_out>0)this.onData(n.output.subarray(0,n.next_out)),n.avail_out=0;else if(0===n.avail_in)break}else this.onData(n.output)}return!0},Qt.prototype.onData=function(e){this.chunks.push(e)},Qt.prototype.onEnd=function(e){e===Ut&&(this.result=_t(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};var zt={Deflate:Qt,deflate:qt,deflateRaw:function(e,t){return(t=t||{}).raw=!0,qt(e,t)},gzip:function(e,t){return(t=t||{}).gzip=!0,qt(e,t)},constants:Oe};var Wt=function(e,t){let n,r,a,i,o,s,u,l,c,d,f,v,m,p,h,g,A,y,S,b,w,I,E,C;const D=e.state;n=e.next_in,E=e.input,r=n+(e.avail_in-5),a=e.next_out,C=e.output,i=a-(t-e.avail_out),o=a+(e.avail_out-257),s=D.dmax,u=D.wsize,l=D.whave,c=D.wnext,d=D.window,f=D.hold,v=D.bits,m=D.lencode,p=D.distcode,h=(1<>>24,f>>>=y,v-=y,y=A>>>16&255,0===y)C[a++]=65535&A;else{if(!(16&y)){if(0==(64&y)){A=m[(65535&A)+(f&(1<>>=y,v-=y),v<15&&(f+=E[n++]<>>24,f>>>=y,v-=y,y=A>>>16&255,!(16&y)){if(0==(64&y)){A=p[(65535&A)+(f&(1<s){e.msg="invalid distance too far back",D.mode=30;break e}if(f>>>=y,v-=y,y=a-i,b>y){if(y=b-y,y>l&&D.sane){e.msg="invalid distance too far back",D.mode=30;break e}if(w=0,I=d,0===c){if(w+=u-y,y2;)C[a++]=I[w++],C[a++]=I[w++],C[a++]=I[w++],S-=3;S&&(C[a++]=I[w++],S>1&&(C[a++]=I[w++]))}else{w=a-b;do{C[a++]=C[w++],C[a++]=C[w++],C[a++]=C[w++],S-=3}while(S>2);S&&(C[a++]=C[w++],S>1&&(C[a++]=C[w++]))}break}}break}}while(n>3,n-=S,v-=S<<3,f&=(1<{const u=s.bits;let l,c,d,f,v,m,p=0,h=0,g=0,A=0,y=0,S=0,b=0,w=0,I=0,E=0,C=null,D=0;const _=new Uint16Array(16),M=new Uint16Array(16);let O,P,T,x=null,R=0;for(p=0;p<=Yt;p++)_[p]=0;for(h=0;h=1&&0===_[A];A--);if(y>A&&(y=A),0===A)return a[i++]=20971520,a[i++]=20971520,s.bits=1,0;for(g=1;g0&&(0===e||1!==A))return-1;for(M[1]=0,p=1;p852||2===e&&I>592)return 1;for(;;){O=p-b,o[h]m?(P=x[R+o[h]],T=C[D+o[h]]):(P=96,T=0),l=1<>b)+c]=O<<24|P<<16|T|0}while(0!==c);for(l=1<>=1;if(0!==l?(E&=l-1,E+=l):E=0,h++,0==--_[p]){if(p===A)break;p=t[n+o[h]]}if(p>y&&(E&f)!==d){for(0===b&&(b=y),v+=g,S=p-b,w=1<852||2===e&&I>592)return 1;d=E&f,a[d]=y<<24|S<<16|v-i|0}}return 0!==E&&(a[v+E]=p-b<<24|64<<16|0),s.bits=y,0};const{Z_FINISH:en,Z_BLOCK:tn,Z_TREES:nn,Z_OK:rn,Z_STREAM_END:an,Z_NEED_DICT:on,Z_STREAM_ERROR:sn,Z_DATA_ERROR:un,Z_MEM_ERROR:ln,Z_BUF_ERROR:cn,Z_DEFLATED:dn}=Oe,fn=12,vn=30,mn=e=>(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24);function pn(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}const hn=e=>{if(!e||!e.state)return sn;const t=e.state;return e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=1,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new Int32Array(852),t.distcode=t.distdyn=new Int32Array(592),t.sane=1,t.back=-1,rn},gn=e=>{if(!e||!e.state)return sn;const t=e.state;return t.wsize=0,t.whave=0,t.wnext=0,hn(e)},An=(e,t)=>{let n;if(!e||!e.state)return sn;const r=e.state;return t<0?(n=0,t=-t):(n=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?sn:(null!==r.window&&r.wbits!==t&&(r.window=null),r.wrap=n,r.wbits=t,gn(e))},yn=(e,t)=>{if(!e)return sn;const n=new pn;e.state=n,n.window=null;const r=An(e,t);return r!==rn&&(e.state=null),r};let Sn,bn,wn=!0;const In=e=>{if(wn){Sn=new Int32Array(512),bn=new Int32Array(32);let t=0;for(;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(Jt(1,e.lens,0,288,Sn,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;Jt(2,e.lens,0,32,bn,0,e.work,{bits:5}),wn=!1}e.lencode=Sn,e.lenbits=9,e.distcode=bn,e.distbits=5},En=(e,t,n,r)=>{let a;const i=e.state;return null===i.window&&(i.wsize=1<=i.wsize?(i.window.set(t.subarray(n-i.wsize,n),0),i.wnext=0,i.whave=i.wsize):(a=i.wsize-i.wnext,a>r&&(a=r),i.window.set(t.subarray(n-r,n-r+a),i.wnext),(r-=a)?(i.window.set(t.subarray(n-r,n),0),i.wnext=r,i.whave=i.wsize):(i.wnext+=a,i.wnext===i.wsize&&(i.wnext=0),i.whave{let n,r,a,i,o,s,u,l,c,d,f,v,m,p,h,g,A,y,S,b,w,I,E=0;const C=new Uint8Array(4);let D,_;const M=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return sn;n=e.state,n.mode===fn&&(n.mode=13),o=e.next_out,a=e.output,u=e.avail_out,i=e.next_in,r=e.input,s=e.avail_in,l=n.hold,c=n.bits,d=s,f=u,I=rn;e:for(;;)switch(n.mode){case 1:if(0===n.wrap){n.mode=13;break}for(;c<16;){if(0===s)break e;s--,l+=r[i++]<>>8&255,n.check=_e(n.check,C,2,0),l=0,c=0,n.mode=2;break}if(n.flags=0,n.head&&(n.head.done=!1),!(1&n.wrap)||(((255&l)<<8)+(l>>8))%31){e.msg="incorrect header check",n.mode=vn;break}if((15&l)!==dn){e.msg="unknown compression method",n.mode=vn;break}if(l>>>=4,c-=4,w=8+(15&l),0===n.wbits)n.wbits=w;else if(w>n.wbits){e.msg="invalid window size",n.mode=vn;break}n.dmax=1<>8&1),512&n.flags&&(C[0]=255&l,C[1]=l>>>8&255,n.check=_e(n.check,C,2,0)),l=0,c=0,n.mode=3;case 3:for(;c<32;){if(0===s)break e;s--,l+=r[i++]<>>8&255,C[2]=l>>>16&255,C[3]=l>>>24&255,n.check=_e(n.check,C,4,0)),l=0,c=0,n.mode=4;case 4:for(;c<16;){if(0===s)break e;s--,l+=r[i++]<>8),512&n.flags&&(C[0]=255&l,C[1]=l>>>8&255,n.check=_e(n.check,C,2,0)),l=0,c=0,n.mode=5;case 5:if(1024&n.flags){for(;c<16;){if(0===s)break e;s--,l+=r[i++]<>>8&255,n.check=_e(n.check,C,2,0)),l=0,c=0}else n.head&&(n.head.extra=null);n.mode=6;case 6:if(1024&n.flags&&(v=n.length,v>s&&(v=s),v&&(n.head&&(w=n.head.extra_len-n.length,n.head.extra||(n.head.extra=new Uint8Array(n.head.extra_len)),n.head.extra.set(r.subarray(i,i+v),w)),512&n.flags&&(n.check=_e(n.check,r,v,i)),s-=v,i+=v,n.length-=v),n.length))break e;n.length=0,n.mode=7;case 7:if(2048&n.flags){if(0===s)break e;v=0;do{w=r[i+v++],n.head&&w&&n.length<65536&&(n.head.name+=String.fromCharCode(w))}while(w&&v>9&1,n.head.done=!0),e.adler=n.check=0,n.mode=fn;break;case 10:for(;c<32;){if(0===s)break e;s--,l+=r[i++]<>>=7&c,c-=7&c,n.mode=27;break}for(;c<3;){if(0===s)break e;s--,l+=r[i++]<>>=1,c-=1,3&l){case 0:n.mode=14;break;case 1:if(In(n),n.mode=20,t===nn){l>>>=2,c-=2;break e}break;case 2:n.mode=17;break;case 3:e.msg="invalid block type",n.mode=vn}l>>>=2,c-=2;break;case 14:for(l>>>=7&c,c-=7&c;c<32;){if(0===s)break e;s--,l+=r[i++]<>>16^65535)){e.msg="invalid stored block lengths",n.mode=vn;break}if(n.length=65535&l,l=0,c=0,n.mode=15,t===nn)break e;case 15:n.mode=16;case 16:if(v=n.length,v){if(v>s&&(v=s),v>u&&(v=u),0===v)break e;a.set(r.subarray(i,i+v),o),s-=v,i+=v,u-=v,o+=v,n.length-=v;break}n.mode=fn;break;case 17:for(;c<14;){if(0===s)break e;s--,l+=r[i++]<>>=5,c-=5,n.ndist=1+(31&l),l>>>=5,c-=5,n.ncode=4+(15&l),l>>>=4,c-=4,n.nlen>286||n.ndist>30){e.msg="too many length or distance symbols",n.mode=vn;break}n.have=0,n.mode=18;case 18:for(;n.have>>=3,c-=3}for(;n.have<19;)n.lens[M[n.have++]]=0;if(n.lencode=n.lendyn,n.lenbits=7,D={bits:n.lenbits},I=Jt(0,n.lens,0,19,n.lencode,0,n.work,D),n.lenbits=D.bits,I){e.msg="invalid code lengths set",n.mode=vn;break}n.have=0,n.mode=19;case 19:for(;n.have>>24,g=E>>>16&255,A=65535&E,!(h<=c);){if(0===s)break e;s--,l+=r[i++]<>>=h,c-=h,n.lens[n.have++]=A;else{if(16===A){for(_=h+2;c<_;){if(0===s)break e;s--,l+=r[i++]<>>=h,c-=h,0===n.have){e.msg="invalid bit length repeat",n.mode=vn;break}w=n.lens[n.have-1],v=3+(3&l),l>>>=2,c-=2}else if(17===A){for(_=h+3;c<_;){if(0===s)break e;s--,l+=r[i++]<>>=h,c-=h,w=0,v=3+(7&l),l>>>=3,c-=3}else{for(_=h+7;c<_;){if(0===s)break e;s--,l+=r[i++]<>>=h,c-=h,w=0,v=11+(127&l),l>>>=7,c-=7}if(n.have+v>n.nlen+n.ndist){e.msg="invalid bit length repeat",n.mode=vn;break}for(;v--;)n.lens[n.have++]=w}}if(n.mode===vn)break;if(0===n.lens[256]){e.msg="invalid code -- missing end-of-block",n.mode=vn;break}if(n.lenbits=9,D={bits:n.lenbits},I=Jt(1,n.lens,0,n.nlen,n.lencode,0,n.work,D),n.lenbits=D.bits,I){e.msg="invalid literal/lengths set",n.mode=vn;break}if(n.distbits=6,n.distcode=n.distdyn,D={bits:n.distbits},I=Jt(2,n.lens,n.nlen,n.ndist,n.distcode,0,n.work,D),n.distbits=D.bits,I){e.msg="invalid distances set",n.mode=vn;break}if(n.mode=20,t===nn)break e;case 20:n.mode=21;case 21:if(s>=6&&u>=258){e.next_out=o,e.avail_out=u,e.next_in=i,e.avail_in=s,n.hold=l,n.bits=c,Wt(e,f),o=e.next_out,a=e.output,u=e.avail_out,i=e.next_in,r=e.input,s=e.avail_in,l=n.hold,c=n.bits,n.mode===fn&&(n.back=-1);break}for(n.back=0;E=n.lencode[l&(1<>>24,g=E>>>16&255,A=65535&E,!(h<=c);){if(0===s)break e;s--,l+=r[i++]<>y)],h=E>>>24,g=E>>>16&255,A=65535&E,!(y+h<=c);){if(0===s)break e;s--,l+=r[i++]<>>=y,c-=y,n.back+=y}if(l>>>=h,c-=h,n.back+=h,n.length=A,0===g){n.mode=26;break}if(32&g){n.back=-1,n.mode=fn;break}if(64&g){e.msg="invalid literal/length code",n.mode=vn;break}n.extra=15&g,n.mode=22;case 22:if(n.extra){for(_=n.extra;c<_;){if(0===s)break e;s--,l+=r[i++]<>>=n.extra,c-=n.extra,n.back+=n.extra}n.was=n.length,n.mode=23;case 23:for(;E=n.distcode[l&(1<>>24,g=E>>>16&255,A=65535&E,!(h<=c);){if(0===s)break e;s--,l+=r[i++]<>y)],h=E>>>24,g=E>>>16&255,A=65535&E,!(y+h<=c);){if(0===s)break e;s--,l+=r[i++]<>>=y,c-=y,n.back+=y}if(l>>>=h,c-=h,n.back+=h,64&g){e.msg="invalid distance code",n.mode=vn;break}n.offset=A,n.extra=15&g,n.mode=24;case 24:if(n.extra){for(_=n.extra;c<_;){if(0===s)break e;s--,l+=r[i++]<>>=n.extra,c-=n.extra,n.back+=n.extra}if(n.offset>n.dmax){e.msg="invalid distance too far back",n.mode=vn;break}n.mode=25;case 25:if(0===u)break e;if(v=f-u,n.offset>v){if(v=n.offset-v,v>n.whave&&n.sane){e.msg="invalid distance too far back",n.mode=vn;break}v>n.wnext?(v-=n.wnext,m=n.wsize-v):m=n.wnext-v,v>n.length&&(v=n.length),p=n.window}else p=a,m=o-n.offset,v=n.length;v>u&&(v=u),u-=v,n.length-=v;do{a[o++]=p[m++]}while(--v);0===n.length&&(n.mode=21);break;case 26:if(0===u)break e;a[o++]=n.length,u--,n.mode=21;break;case 27:if(n.wrap){for(;c<32;){if(0===s)break e;s--,l|=r[i++]<{const n=t.length;let r,a,i;return e&&e.state?(r=e.state,0!==r.wrap&&11!==r.mode?sn:11===r.mode&&(a=1,a=Ce(a,t,n,0),a!==r.check)?un:(i=En(e,t,n,n),i?(r.mode=31,ln):(r.havedict=1,rn))):sn},_n={inflateReset:gn,inflateReset2:An,inflateResetKeep:hn,inflateInit:e=>yn(e,15),inflateInit2:yn,inflate:Cn,inflateEnd:e=>{if(!e||!e.state)return sn;let t=e.state;return t.window&&(t.window=null),e.state=null,rn},inflateGetHeader:(e,t)=>{if(!e||!e.state)return sn;const n=e.state;return 0==(2&n.wrap)?sn:(n.head=t,t.done=!1,rn)},inflateSetDictionary:Dn,inflateInfo:"pako inflate (from Nodeca project)"};var Mn=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1};const On=Object.prototype.toString,{Z_NO_FLUSH:Pn,Z_FINISH:Tn,Z_OK:xn,Z_STREAM_END:Rn,Z_NEED_DICT:Ln,Z_STREAM_ERROR:kn,Z_DATA_ERROR:Nn,Z_MEM_ERROR:Fn}=Oe;function Bn(e){this.options=Dt({chunkSize:65536,windowBits:15,to:""},e||{});const t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(t.windowBits>=0&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new Rt,this.strm.avail_out=0;let n=_n.inflateInit2(this.strm,t.windowBits);if(n!==xn)throw new Error(Me[n]);if(this.header=new Mn,_n.inflateGetHeader(this.strm,this.header),t.dictionary&&("string"==typeof t.dictionary?t.dictionary=Pt(t.dictionary):"[object ArrayBuffer]"===On.call(t.dictionary)&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(n=_n.inflateSetDictionary(this.strm,t.dictionary),n!==xn)))throw new Error(Me[n])}function Un(e,t){const n=new Bn(t);if(n.push(e),n.err)throw n.msg||Me[n.err];return n.result}Bn.prototype.push=function(e,t){const n=this.strm,r=this.options.chunkSize,a=this.options.dictionary;let i,o,s;if(this.ended)return!1;for(o=t===~~t?t:!0===t?Tn:Pn,"[object ArrayBuffer]"===On.call(e)?n.input=new Uint8Array(e):n.input=e,n.next_in=0,n.avail_in=n.input.length;;){for(0===n.avail_out&&(n.output=new Uint8Array(r),n.next_out=0,n.avail_out=r),i=_n.inflate(n,o),i===Ln&&a&&(i=_n.inflateSetDictionary(n,a),i===xn?i=_n.inflate(n,o):i===Nn&&(i=Ln));n.avail_in>0&&i===Rn&&n.state.wrap>0&&0!==e[n.next_in];)_n.inflateReset(n),i=_n.inflate(n,o);switch(i){case kn:case Nn:case Ln:case Fn:return this.onEnd(i),this.ended=!0,!1}if(s=n.avail_out,n.next_out&&(0===n.avail_out||i===Rn))if("string"===this.options.to){let e=xt(n.output,n.next_out),t=n.next_out-e,a=Tt(n.output,e);n.next_out=t,n.avail_out=r-t,t&&n.output.set(n.output.subarray(e,e+t),0),this.onData(a)}else this.onData(n.output.length===n.next_out?n.output:n.output.subarray(0,n.next_out));if(i!==xn||0!==s){if(i===Rn)return i=_n.inflateEnd(this.strm),this.onEnd(i),this.ended=!0,!0;if(0===n.avail_in)break}}return!0},Bn.prototype.onData=function(e){this.chunks.push(e)},Bn.prototype.onEnd=function(e){e===xn&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=_t(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};var Vn={Inflate:Bn,inflate:Un,inflateRaw:function(e,t){return(t=t||{}).raw=!0,Un(e,t)},ungzip:Un,constants:Oe};const{Deflate:jn,deflate:Gn,deflateRaw:Hn,gzip:Qn}=zt,{Inflate:qn,inflate:zn,inflateRaw:Wn,ungzip:Yn}=Vn;var Zn={Deflate:jn,deflate:Gn,deflateRaw:Hn,gzip:Qn,Inflate:qn,inflate:zn,inflateRaw:Wn,ungzip:Yn,constants:Oe};function Kn(e){if(isNaN(e))throw new Error("Not a number: "+e);return"string"==typeof e?parseInt(e):e}function Xn(e){if(isNaN(e))throw new Error("Not a number: "+e);return"string"==typeof e?parseFloat(e):e}var $n=function(){function e(t,n){b(this,e),this.buffer="number"==typeof t?new ArrayBuffer(t):t,this.buffer||(this.buffer=new ArrayBuffer(0)),this.view=new DataView(this.buffer),this.offset=0,this.isLittleEndian=n||!1,this.size=0,this.encoder=new TextEncoder("utf-8")}return I(e,[{key:"setEndian",value:function(e){this.isLittleEndian=e}},{key:"writeUint8",value:function(e){return this.checkSize(1),this.view.setUint8(this.offset,Kn(e)),this.increment(1)}},{key:"writeUint8Repeat",value:function(e,t){var n=Kn(e);this.checkSize(t);for(var r=0;r>16,n=65535&e;return this.view.setUint16(this.offset,Kn(t),this.isLittleEndian),this.view.setUint16(this.offset+2,Kn(n),this.isLittleEndian),this.increment(4)}},{key:"writeInt16",value:function(e){return this.checkSize(2),this.view.setInt16(this.offset,Kn(e),this.isLittleEndian),this.increment(2)}},{key:"writeUint32",value:function(e){return this.checkSize(4),this.view.setUint32(this.offset,Kn(e),this.isLittleEndian),this.increment(4)}},{key:"writeInt32",value:function(e){return this.checkSize(4),this.view.setInt32(this.offset,Kn(e),this.isLittleEndian),this.increment(4)}},{key:"writeFloat",value:function(e){return this.checkSize(4),this.view.setFloat32(this.offset,Xn(e),this.isLittleEndian),this.increment(4)}},{key:"writeDouble",value:function(e){return this.checkSize(8),this.view.setFloat64(this.offset,Xn(e),this.isLittleEndian),this.increment(8)}},{key:"writeUTF8String",value:function(e){var t=this.encoder.encode(e);return this.checkSize(t.byteLength),new Uint8Array(this.buffer).set(t,this.offset),this.increment(t.byteLength)}},{key:"writeAsciiString",value:function(e){var t=(e=e||"").length;this.checkSize(t);for(var n=this.offset,r=0;r=this.buffer.byteLength&&(r=this.buffer.byteLength);for(var a=n;a=this.buffer.byteLength&&(e=this.buffer.byteLength-this.offset);var t=new DataView(this.buffer,this.offset,e),n=this.decoder.decode(t);return this.increment(e),n}},{key:"readHex",value:function(e){for(var t="",n=0;nthis.buffer.byteLength){var t=this.offset+e+this.buffer.byteLength,n=new ArrayBuffer(t);new Uint8Array(n).set(new Uint8Array(this.buffer)),this.buffer=n,this.view=new DataView(this.buffer)}}},{key:"concat",value:function(e){var t=this.buffer.byteLength-this.offset;if(e.size>t){var n=new ArrayBuffer(this.offset+e.size),r=new Uint8Array(n);r.set(new Uint8Array(this.getBuffer(0,this.offset))),r.set(new Uint8Array(e.getBuffer(0,e.size)),this.offset),this.buffer=n,this.view=new DataView(this.buffer)}else{new Uint8Array(this.buffer).set(new Uint8Array(e.getBuffer(0,e.size)),this.offset)}return this.offset+=e.size,this.size=this.offset,this.buffer.byteLength}},{key:"increment",value:function(e){return this.offset+=e,this.offset>this.size&&(this.size=this.offset),e}},{key:"getBuffer",value:function(e,t){return e||t||(e=0,t=this.size),this.buffer.slice(e,t)}},{key:"more",value:function(e){if(this.offset+e>this.endOffset)throw new Error("Request more than currently allocated buffer");var t=new Jn(this.buffer,null,{start:this.offset,stop:this.offset+e});return this.increment(e),t}},{key:"reset",value:function(){return this.offset=0,this}},{key:"end",value:function(){return this.offset>=this.buffer.byteLength}},{key:"toEnd",value:function(){this.offset=this.buffer.byteLength}}]),e}(),Jn=function(e){C(n,e);var t=x(n);function n(e,r){var a,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{start:null,stop:null,noCopy:!1};return b(this,n),(a=t.call(this,e,r)).offset=i.start||0,a.size=i.stop||a.buffer.byteLength,a.noCopy=i.noCopy,a.startOffset=a.offset,a.endOffset=a.size,a.decoder=new TextDecoder("latin1"),a}return I(n,[{key:"setDecoder",value:function(e){this.decoder=e}},{key:"getBuffer",value:function(e,t){return this.noCopy?new Uint8Array(this.buffer,e,t-e):(e||t||(e=0,t=this.size),this.buffer.slice(e,t))}},{key:"reset",value:function(){return this.offset=this.startOffset,this}},{key:"end",value:function(){return this.offset>=this.endOffset}},{key:"toEnd",value:function(){this.offset=this.endOffset}},{key:"writeUint8",value:function(e){throw new Error(e,"writeUint8 not implemented")}},{key:"writeUint8Repeat",value:function(e,t){throw new Error(e,"writeUint8Repeat not implemented")}},{key:"writeInt8",value:function(e){throw new Error(e,"writeInt8 not implemented")}},{key:"writeUint16",value:function(e){throw new Error(e,"writeUint16 not implemented")}},{key:"writeTwoUint16s",value:function(e){throw new Error(e,"writeTwoUint16s not implemented")}},{key:"writeInt16",value:function(e){throw new Error(e,"writeInt16 not implemented")}},{key:"writeUint32",value:function(e){throw new Error(e,"writeUint32 not implemented")}},{key:"writeInt32",value:function(e){throw new Error(e,"writeInt32 not implemented")}},{key:"writeFloat",value:function(e){throw new Error(e,"writeFloat not implemented")}},{key:"writeDouble",value:function(e){throw new Error(e,"writeDouble not implemented")}},{key:"writeAsciiString",value:function(e){throw new Error(e,"writeAsciiString not implemented")}},{key:"writeUTF8String",value:function(e){throw new Error(e,"writeUTF8String not implemented")}},{key:"checkSize",value:function(e){throw new Error(e,"checkSize not implemented")}},{key:"concat",value:function(e){throw new Error(e,"concat not implemented")}}]),n}($n),er=function(e){C(n,e);var t=x(n);function n(e,r){b(this,n);var a=Zn.inflateRaw(e.getBuffer(e.offset,e.size));return t.call(this,a.buffer,e.littleEndian,r)}return I(n)}(Jn),tr=function(e){C(n,e);var t=x(n);function n(e,r){var a;return b(this,n),(a=t.call(this,e,r)).size=0,a}return I(n)}($n);function nr(e){return e.replace(/\s*$/g,"")}var rr=["FL","FD","SL","SS","UL","US","AT"],ar=["OB","OW","OF","SQ","UC","UR","UT","UN"],ir=["SQ","OF","OW","OB","UN"],or=function(){function e(t){b(this,e),this.type=t,this.multi=!1,this._isBinary=-1!=rr.indexOf(this.type),this._allowMultiple=!this._isBinary&&-1==ir.indexOf(this.type),this._isExplicit=-1!=ar.indexOf(this.type)}return I(e,[{key:"isBinary",value:function(){return this._isBinary}},{key:"allowMultiple",value:function(){return this._allowMultiple}},{key:"isExplicit",value:function(){return this._isExplicit}},{key:"read",value:function(e,t,n){if(this.fixed&&this.maxLength){if(!t)return this.defaultValue;this.maxLength!=t&&p.error("Invalid length for fixed length tag, vr "+this.type+", length "+this.maxLength+" != "+t)}return this.readBytes(e,t,n)}},{key:"readBytes",value:function(e,t){return e.readAsciiString(t)}},{key:"readNullPaddedString",value:function(e,t){if(!t)return"";if(0!==e.peekUint8(t-1))return e.readAsciiString(t);var n=e.readAsciiString(t-1);return e.increment(1),n}},{key:"write",value:function(e,t){var n=Array.from(arguments);if(null===n[2]||""===n[2]||void 0===n[2])return[e.writeAsciiString("")];var r=[],a=n.slice(2),i=e["write"+t];if(Array.isArray(a[0]))if(a[0].length<1)r.push(0);else{var o=this;a[0].forEach((function(t,n){o.allowMultiple()&&n>0&&e.writeUint8(92);var s=[t].concat(a.slice(1)),u=i.apply(e,s);r.push(u)}))}else r.push(i.apply(e,a));return r}},{key:"writeBytes",value:function(e,t,n){for(var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{allowInvalidVRLength:!1},a=r.allowInvalidVRLength,i=!0,o=Array.isArray(t)?t:[t],s=0,u=0;u4&&void 0!==arguments[4]?arguments[4]:{},u=s.fragmentMultiframe,l=void 0===u||u;if(t=null==t?[]:t,a){var c=20480,d=t.length,f=[],v=0;for(i=0;i0){a=r/4;for(var o=0;o++0)(i=i.map((function(t){return t+e.offset}))).push(e.size),n=(c=i,d=2,Array.from({length:c.length-(d-1)},(function(e,t){return c.slice(t,t+d)}))).map((function(t){for(var n=[],r=k(t,2),a=r[0],i=r[1],o=new Jn(e.buffer,e.isLittleEndian,{start:a,stop:i,noCopy:e.noCopy}),u=0;!o.end();){var l=s(o);if(null===l)break;n.push(l),u+=l.byteLength}if(e.offset=o.offset,1===n.length)return n[0];if(o.noCopy)return n;var c=new ArrayBuffer(u),d=new Uint8Array(c);return n.reduce((function(e,t){return d.set(new Uint8Array(t),e),e+t.byteLength}),0),c}));else for(;!e.end();){var u=s(e);if(null===u)break;n.push(u)}return n}var l,c,d;return l=e.getBuffer(e.offset,e.offset+t),e.increment(t),[l]}}]),n}(or),cr=function(e){C(n,e);var t=x(n);function n(){var e;return b(this,n),(e=t.call(this,"AE")).maxLength=16,e.padByte=32,e}return I(n,[{key:"readBytes",value:function(e,t){return e.readAsciiString(t).trim()}}]),n}(sr),dr=function(e){C(n,e);var t=x(n);function n(){var e;return b(this,n),(e=t.call(this,"CS")).maxLength=16,e.padByte=32,e}return I(n,[{key:"readBytes",value:function(e,t){return e.readAsciiString(t).trim()}}]),n}(sr),fr=function(e){C(n,e);var t=x(n);function n(){var e;return b(this,n),(e=t.call(this,"AS")).maxLength=4,e.padByte=32,e.fixed=!0,e.defaultValue="",e}return I(n)}(sr),vr=function(e){C(n,e);var t=x(n);function n(){var e;return b(this,n),(e=t.call(this,"AT")).maxLength=4,e.valueLength=4,e.padByte=0,e.fixed=!0,e}return I(n,[{key:"readBytes",value:function(e){return Hr.readTag(e).value}},{key:"writeBytes",value:function(e,t,r){return L(D(n.prototype),"writeBytes",this).call(this,e,t,L(D(n.prototype),"write",this).call(this,e,"TwoUint16s",t),r)}}]),n}(or),mr=function(e){C(n,e);var t=x(n);function n(e){var r;return b(this,n),(r=t.call(this,"DA",e)).maxLength=18,r.padByte=32,r.defaultValue="",r}return I(n)}(sr),pr=function(e){C(n,e);var t=x(n);function n(){var e;return b(this,n),(e=t.call(this,"DS")).maxLength=16,e.padByte=32,e}return I(n,[{key:"readBytes",value:function(e,t){var n=String.fromCharCode(92),r=e.readAsciiString(t);if(-1!==(r=r.replace(/[^0-9.\\\-+e]/gi,"")).indexOf(n)){var a=r.split(n);r=a.map((function(e){return""===e?null:Number(e)}))}else r=[""===r?null:Number(r)];return r}},{key:"formatValue",value:function(e){if(null===e)return"";var t=String(e);return t.length>this.maxLength?e.toExponential():t}},{key:"writeBytes",value:function(e,t,r){var a=this,i=Array.isArray(t)?t.map((function(e){return a.formatValue(e)})):[this.formatValue(t)];return L(D(n.prototype),"writeBytes",this).call(this,e,i,r)}}]),n}(sr),hr=function(e){C(n,e);var t=x(n);function n(){var e;return b(this,n),(e=t.call(this,"DT")).maxLength=26,e.padByte=32,e}return I(n)}(sr),gr=function(e){C(n,e);var t=x(n);function n(){var e;return b(this,n),(e=t.call(this,"FL")).maxLength=4,e.padByte=0,e.fixed=!0,e.defaultValue=0,e}return I(n,[{key:"readBytes",value:function(e){return Number(e.readFloat())}},{key:"writeBytes",value:function(e,t,r){return L(D(n.prototype),"writeBytes",this).call(this,e,t,L(D(n.prototype),"write",this).call(this,e,"Float",t),r)}}]),n}(or),Ar=function(e){C(n,e);var t=x(n);function n(){var e;return b(this,n),(e=t.call(this,"FD")).maxLength=8,e.padByte=0,e.fixed=!0,e.defaultValue=0,e}return I(n,[{key:"readBytes",value:function(e){return Number(e.readDouble())}},{key:"writeBytes",value:function(e,t,r){return L(D(n.prototype),"writeBytes",this).call(this,e,t,L(D(n.prototype),"write",this).call(this,e,"Double",t),r)}}]),n}(or),yr=function(e){C(n,e);var t=x(n);function n(){var e;return b(this,n),(e=t.call(this,"IS")).maxLength=12,e.padByte=32,e}return I(n,[{key:"readBytes",value:function(e,t){var n=String.fromCharCode(92),r=e.readAsciiString(t).trim();if(-1!==(r=r.replace(/[^0-9.\\\-+e]/gi,"")).indexOf(n)){var a=r.split(n);r=a.map((function(e){return""===e?null:Number(e)}))}else r=[""===r?null:Number(r)];return r}},{key:"formatValue",value:function(e){return null===e?"":String(e)}},{key:"writeBytes",value:function(e,t,r){var a=this,i=Array.isArray(t)?t.map((function(e){return a.formatValue(e)})):[this.formatValue(t)];return L(D(n.prototype),"writeBytes",this).call(this,e,i,r)}}]),n}(sr),Sr=function(e){C(n,e);var t=x(n);function n(){var e;return b(this,n),(e=t.call(this,"LO")).maxCharLength=64,e.padByte=32,e}return I(n,[{key:"readBytes",value:function(e,t){return e.readEncodedString(t).trim()}}]),n}(ur),br=function(e){C(n,e);var t=x(n);function n(){var e;return b(this,n),(e=t.call(this,"LT")).maxCharLength=10240,e.padByte=32,e}return I(n,[{key:"readBytes",value:function(e,t){return nr(e.readEncodedString(t))}}]),n}(ur),wr=function(e){C(n,e);var t=x(n);function n(){var e;return b(this,n),(e=t.call(this,"PN")).maxLength=null,e.padByte=32,e}return I(n,[{key:"checkLength",value:function(e){var t=[];for(var n in"object"===S(e)&&null!==e?t=Object.keys(e).forEach((function(t){return e[t]})):("string"==typeof e||e instanceof String)&&(t=e.split(/\=/)),t){if(t[n].length>64)return!1}return!0}},{key:"readBytes",value:function(e,t){return nr(e.readEncodedString(t))}}]),n}(ur),Ir=function(e){C(n,e);var t=x(n);function n(){var e;return b(this,n),(e=t.call(this,"SH")).maxCharLength=16,e.padByte=32,e}return I(n,[{key:"readBytes",value:function(e,t){return e.readEncodedString(t).trim()}}]),n}(ur),Er=function(e){C(n,e);var t=x(n);function n(){var e;return b(this,n),(e=t.call(this,"SL")).maxLength=4,e.padByte=0,e.fixed=!0,e.defaultValue=0,e}return I(n,[{key:"readBytes",value:function(e){return e.readInt32()}},{key:"writeBytes",value:function(e,t,r){return L(D(n.prototype),"writeBytes",this).call(this,e,t,L(D(n.prototype),"write",this).call(this,e,"Int32",t),r)}}]),n}(or),Cr=function(e){C(n,e);var t=x(n);function n(){var e;return b(this,n),(e=t.call(this,"SQ")).maxLength=null,e.padByte=0,e.noMultiple=!0,e}return I(n,[{key:"readBytes",value:function(e,t,n){if(0==t)return[];for(var r=4294967295==t,a=[],i=0;;){var o=Hr.readTag(e),s=null;if(i+=4,o.is(4294893789)){e.readUint32();break}if(!r&&i==t)break;if(o.is(4294893568)){i+=4;var u=null,l=0,c=4294967295==(s=e.readUint32());if(c)for(var d=0;;){if(65534==e.readUint16()){var f=e.readUint16();if(57357==f){if(--d<0){e.increment(4),i+=8;break}l+=4}else if(57344==f){d++,l+=4;var v=e.readUint32();e.increment(-4),0===v&&d--}else l+=2,e.increment(-2)}else l+=2}else l=s;if(l){e.increment(c?-l-8:0),u=e.more(l),i+=l,c&&e.increment(8);var m=Jr._read(u,n);a.push(m)}if(!r&&i==t)break}}return a}},{key:"writeBytes",value:function(e,t,r,a){var i=0;if(t)for(var o=0;o>>16}},{key:"element",value:function(){return 65535&this.value}},{key:"isPixelDataTag",value:function(){return this.is(2145386512)}},{key:"isPrivateCreator",value:function(){var e=this.group(),t=this.element();return e%2==1&&t<256&&t>0}},{key:"write",value:function(e,t,n,r,a){var i=or.createByTypeString(t),o=Jr._normalizeSyntax(r),s=o==jr,u=o==jr||"1.2.840.10008.1.2.1"==o,l=this.isPixelDataTag()&&Jr.isEncapsulated(r),c=e.isLittleEndian;e.setEndian(u),e.writeUint16(this.group()),e.writeUint16(this.element());var d,f=new tr(256);f.setEndian(u),d="OW"==t||"OB"==t||"UN"==t?i.writeBytes(f,n,o,l,a):"SQ"==t?i.writeBytes(f,n,o,a):i.writeBytes(f,n,a),"SQ"==t&&(d=4294967295);var v=f.size+4;return s?(e.writeUint32(d),v+=4):i.isExplicit()?(e.writeAsciiString(i.type),e.writeUint16(0),e.writeUint32(d),v+=8):(e.writeAsciiString(i.type),e.writeUint16(d),v+=4),e.concat(f),e.setEndian(c),v}}],[{key:"fromString",value:function(t){var n=parseInt(t.substring(0,4),16),r=parseInt(t.substring(4),16);return e.fromNumbers(n,r)}},{key:"fromPString",value:function(t){var n=parseInt(t.substring(1,5),16),r=parseInt(t.substring(6,10),16);return e.fromNumbers(n,r)}},{key:"fromNumbers",value:function(t,n){return new e((t<<16|n)>>>0)}},{key:"readTag",value:function(t){var n=t.readUint16(),r=t.readUint16();return e.fromNumbers(n,r)}}]),e}(),Qr={get:function(e,t){return"__isProxy"==t||(t in e?e[t]:e[0][t])},set:function(e,t,n){return"number"==typeof t||t in e?e[t]=n:e[0][t]=n,!0}},qr=function(e,t){if(e.__isProxy)return e;var n=t;if(void 0===n){if("object"!==S(e))return e;if(Array.isArray(e)&&1!==e.length)return e;n=Array.isArray(e)?e[0]:e}return new Proxy([n],Qr)},zr=function(){function e(t){b(this,e),this.customDictionary=t,this.customNameMap=e._generateCustomNameMap(t)}return I(e,[{key:"denaturalizeDataset",value:function(t){return e.denaturalizeDataset(t,this.customNameMap)}}],[{key:"punctuateTag",value:function(e){if(-1!==e.indexOf(","))return e;if(8===e.length&&e===e.match(/[0-9a-fA-F]*/)[0]){var t=e.toUpperCase();return"("+t.substring(0,4)+","+t.substring(4,8)+")"}}},{key:"unpunctuateTag",value:function(e){return-1===e.indexOf(",")?e:e.substring(1,10).replace(",","")}},{key:"cleanDataset",value:function(t){var n={};return Object.keys(t).forEach((function(r){var a=Object.assign({},t[r]);if("SQ"==a.vr){var i=[];Object.keys(a.Value).forEach((function(t){i.push(e.cleanDataset(a.Value[t]))})),a.Value=i}else a.Value=Object.keys(a.Value).map((function(e){var t=a.Value[e];return"String"==t.constructor.name?t.replace(/\0/,""):t}));n[r]=a})),n}},{key:"namifyDataset",value:function(t){var n={};return Object.keys(t).forEach((function(r){var a=Object.assign({},t[r]);if("SQ"==a.vr){var i=[];Object.keys(a.Value).forEach((function(t){i.push(e.namifyDataset(a.Value[t]))})),a.Value=i}var o=e.punctuateTag(r),s=e.dictionary[o],u=r;s&&(u=s.name),n[u]=a})),n}},{key:"naturalizeDataset",value:function(t){var n={_vrMap:{}};return Object.keys(t).forEach((function(r){var a=t[r],i=e.punctuateTag(r),o=e.dictionary[i],s=r;if(o&&(s=o.name,"ox"==o.vr&&(n._vrMap[s]=a.vr)),void 0===a.Value)n[s]=null,a.InlineBinary?n[s]={InlineBinary:a.InlineBinary}:a.BulkDataURI&&(n[s]={BulkDataURI:a.BulkDataURI});else{if("SQ"===a.vr){var u=[];Object.keys(a.Value).forEach((function(t){u.push(e.naturalizeDataset(a.Value[t]))})),n[s]=u}else n[s]=a.Value;if(1===n[s].length){var l=n[s][0];l&&"object"===S(l)&&!l.length?n[s]=qr(n[s],l):n[s]=l}}})),n}},{key:"denaturalizeValue",value:function(e){var t=e;if(Array.isArray(t)){if(e.some((function(e){return void 0===e})))throw new Error("There are undefined values at the array naturalValue in DicomMetaDictionary.denaturalizeValue")}else t=[t];return t=t.map((function(e){return"Number"==e.constructor.name?String(e):e}))}},{key:"denaturalizeDataset",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e.nameMap,r={};return Object.keys(t).forEach((function(a){var i=a,o=n[i];if(o){var s=t[a];if(void 0===s)return;var u={vr:o.vr,Value:t[a]};if(null!==s){if("ox"==o.vr&&(t._vrMap&&t._vrMap[a]?u.vr=t._vrMap[a]:p.error("No value representation given for",a)),u.Value=e.denaturalizeValue(u.Value),"SQ"==o.vr){for(var l=[],c=0;cf.maxLength?(p.warn("Truncating value ".concat(e," of ").concat(a," because it is longer than ").concat(f.maxLength)),e.slice(0,f.maxLength)):e})))}var v=e.unpunctuateTag(o.tag);r[v]=u}else{-1==["_vrMap","_meta"].indexOf(i)&&p.warn("Unknown name in dataset",i,":",t[i])}})),r}},{key:"uid",value:function(){for(var e="2.25."+Math.floor(1+9*Math.random()),t=0;t<38;t++)e+=Math.floor(10*Math.random());return e}},{key:"date",value:function(){return(new Date).toISOString().replace(/-/g,"").slice(0,8)}},{key:"time",value:function(){return(new Date).toISOString().replace(/:/g,"").slice(11,17)}},{key:"dateTime",value:function(){return(new Date).toISOString().replace(/[:\-TZ]/g,"")}},{key:"_generateNameMap",value:function(){e.nameMap={},Object.keys(e.dictionary).forEach((function(t){var n=e.dictionary[t];"PrivateTag"!=n.version&&(e.nameMap[n.name]=n)}))}},{key:"_generateCustomNameMap",value:function(e){var t={};return Object.keys(e).forEach((function(n){var r=e[n];"PrivateTag"!=r.version&&(t[r.name]=r)})),t}},{key:"_generateUIDMap",value:function(){e.sopClassUIDsByName={},Object.keys(e.sopClassNamesByUID).forEach((function(t){var n=e.sopClassNamesByUID[t];e.sopClassUIDsByName[n]=t}))}}]),e}();zr.sopClassNamesByUID={"1.2.840.10008.5.1.4.1.1.2":"CTImage","1.2.840.10008.5.1.4.1.1.2.1":"EnhancedCTImage","1.2.840.10008.5.1.4.1.1.2.2":"LegacyConvertedEnhancedCTImage","1.2.840.10008.5.1.4.1.1.3.1":"USMultiframeImage","1.2.840.10008.5.1.4.1.1.4":"MRImage","1.2.840.10008.5.1.4.1.1.4.1":"EnhancedMRImage","1.2.840.10008.5.1.4.1.1.4.2":"MRSpectroscopy","1.2.840.10008.5.1.4.1.1.4.3":"EnhancedMRColorImage","1.2.840.10008.5.1.4.1.1.4.4":"LegacyConvertedEnhancedMRImage","1.2.840.10008.5.1.4.1.1.6.1":"USImage","1.2.840.10008.5.1.4.1.1.6.2":"EnhancedUSVolume","1.2.840.10008.5.1.4.1.1.7":"SecondaryCaptureImage","1.2.840.10008.5.1.4.1.1.30":"ParametricMapStorage","1.2.840.10008.5.1.4.1.1.66":"RawData","1.2.840.10008.5.1.4.1.1.66.1":"SpatialRegistration","1.2.840.10008.5.1.4.1.1.66.2":"SpatialFiducials","1.2.840.10008.5.1.4.1.1.66.3":"DeformableSpatialRegistration","1.2.840.10008.5.1.4.1.1.66.4":"Segmentation","1.2.840.10008.5.1.4.1.1.67":"RealWorldValueMapping","1.2.840.10008.5.1.4.1.1.88.11":"BasicTextSR","1.2.840.10008.5.1.4.1.1.88.22":"EnhancedSR","1.2.840.10008.5.1.4.1.1.88.33":"ComprehensiveSR","1.2.840.10008.5.1.4.1.1.128":"PETImage","1.2.840.10008.5.1.4.1.1.130":"EnhancedPETImage","1.2.840.10008.5.1.4.1.1.128.1":"LegacyConvertedEnhancedPETImage"},zr.dictionary={"(0000,0000)":{tag:"(0000,0000)",vr:"UL",name:"CommandGroupLength",vm:"1",version:"DICOM"},"(0000,0002)":{tag:"(0000,0002)",vr:"UI",name:"AffectedSOPClassUID",vm:"1",version:"DICOM"},"(0000,0003)":{tag:"(0000,0003)",vr:"UI",name:"RequestedSOPClassUID",vm:"1",version:"DICOM"},"(0000,0100)":{tag:"(0000,0100)",vr:"US",name:"CommandField",vm:"1",version:"DICOM"},"(0000,0110)":{tag:"(0000,0110)",vr:"US",name:"MessageID",vm:"1",version:"DICOM"},"(0000,0120)":{tag:"(0000,0120)",vr:"US",name:"MessageIDBeingRespondedTo",vm:"1",version:"DICOM"},"(0000,0600)":{tag:"(0000,0600)",vr:"AE",name:"MoveDestination",vm:"1",version:"DICOM"},"(0000,0700)":{tag:"(0000,0700)",vr:"US",name:"Priority",vm:"1",version:"DICOM"},"(0000,0800)":{tag:"(0000,0800)",vr:"US",name:"CommandDataSetType",vm:"1",version:"DICOM"},"(0000,0900)":{tag:"(0000,0900)",vr:"US",name:"Status",vm:"1",version:"DICOM"},"(0000,0901)":{tag:"(0000,0901)",vr:"AT",name:"OffendingElement",vm:"1-n",version:"DICOM"},"(0000,0902)":{tag:"(0000,0902)",vr:"LO",name:"ErrorComment",vm:"1",version:"DICOM"},"(0000,0903)":{tag:"(0000,0903)",vr:"US",name:"ErrorID",vm:"1",version:"DICOM"},"(0000,1000)":{tag:"(0000,1000)",vr:"UI",name:"AffectedSOPInstanceUID",vm:"1",version:"DICOM"},"(0000,1001)":{tag:"(0000,1001)",vr:"UI",name:"RequestedSOPInstanceUID",vm:"1",version:"DICOM"},"(0000,1002)":{tag:"(0000,1002)",vr:"US",name:"EventTypeID",vm:"1",version:"DICOM"},"(0000,1005)":{tag:"(0000,1005)",vr:"AT",name:"AttributeIdentifierList",vm:"1-n",version:"DICOM"},"(0000,1008)":{tag:"(0000,1008)",vr:"US",name:"ActionTypeID",vm:"1",version:"DICOM"},"(0000,1020)":{tag:"(0000,1020)",vr:"US",name:"NumberOfRemainingSuboperations",vm:"1",version:"DICOM"},"(0000,1021)":{tag:"(0000,1021)",vr:"US",name:"NumberOfCompletedSuboperations",vm:"1",version:"DICOM"},"(0000,1022)":{tag:"(0000,1022)",vr:"US",name:"NumberOfFailedSuboperations",vm:"1",version:"DICOM"},"(0000,1023)":{tag:"(0000,1023)",vr:"US",name:"NumberOfWarningSuboperations",vm:"1",version:"DICOM"},"(0000,1030)":{tag:"(0000,1030)",vr:"AE",name:"MoveOriginatorApplicationEntityTitle",vm:"1",version:"DICOM"},"(0000,1031)":{tag:"(0000,1031)",vr:"US",name:"MoveOriginatorMessageID",vm:"1",version:"DICOM"},"(0002,0000)":{tag:"(0002,0000)",vr:"UL",name:"FileMetaInformationGroupLength",vm:"1",version:"DICOM"},"(0002,0001)":{tag:"(0002,0001)",vr:"OB",name:"FileMetaInformationVersion",vm:"1",version:"DICOM"},"(0002,0002)":{tag:"(0002,0002)",vr:"UI",name:"MediaStorageSOPClassUID",vm:"1",version:"DICOM"},"(0002,0003)":{tag:"(0002,0003)",vr:"UI",name:"MediaStorageSOPInstanceUID",vm:"1",version:"DICOM"},"(0002,0010)":{tag:"(0002,0010)",vr:"UI",name:"TransferSyntaxUID",vm:"1",version:"DICOM"},"(0002,0012)":{tag:"(0002,0012)",vr:"UI",name:"ImplementationClassUID",vm:"1",version:"DICOM"},"(0002,0013)":{tag:"(0002,0013)",vr:"SH",name:"ImplementationVersionName",vm:"1",version:"DICOM"},"(0002,0016)":{tag:"(0002,0016)",vr:"AE",name:"SourceApplicationEntityTitle",vm:"1",version:"DICOM"},"(0002,0017)":{tag:"(0002,0017)",vr:"AE",name:"SendingApplicationEntityTitle",vm:"1",version:"DICOM"},"(0002,0018)":{tag:"(0002,0018)",vr:"AE",name:"ReceivingApplicationEntityTitle",vm:"1",version:"DICOM"},"(0002,0100)":{tag:"(0002,0100)",vr:"UI",name:"PrivateInformationCreatorUID",vm:"1",version:"DICOM"},"(0002,0102)":{tag:"(0002,0102)",vr:"OB",name:"PrivateInformation",vm:"1",version:"DICOM"},"(0004,1130)":{tag:"(0004,1130)",vr:"CS",name:"FileSetID",vm:"1",version:"DICOM"},"(0004,1141)":{tag:"(0004,1141)",vr:"CS",name:"FileSetDescriptorFileID",vm:"1-8",version:"DICOM"},"(0004,1142)":{tag:"(0004,1142)",vr:"CS",name:"SpecificCharacterSetOfFileSetDescriptorFile",vm:"1",version:"DICOM"},"(0004,1200)":{tag:"(0004,1200)",vr:"up",name:"OffsetOfTheFirstDirectoryRecordOfTheRootDirectoryEntity",vm:"1",version:"DICOM"},"(0004,1202)":{tag:"(0004,1202)",vr:"up",name:"OffsetOfTheLastDirectoryRecordOfTheRootDirectoryEntity",vm:"1",version:"DICOM"},"(0004,1212)":{tag:"(0004,1212)",vr:"US",name:"FileSetConsistencyFlag",vm:"1",version:"DICOM"},"(0004,1220)":{tag:"(0004,1220)",vr:"SQ",name:"DirectoryRecordSequence",vm:"1",version:"DICOM"},"(0004,1400)":{tag:"(0004,1400)",vr:"up",name:"OffsetOfTheNextDirectoryRecord",vm:"1",version:"DICOM"},"(0004,1410)":{tag:"(0004,1410)",vr:"US",name:"RecordInUseFlag",vm:"1",version:"DICOM"},"(0004,1420)":{tag:"(0004,1420)",vr:"up",name:"OffsetOfReferencedLowerLevelDirectoryEntity",vm:"1",version:"DICOM"},"(0004,1430)":{tag:"(0004,1430)",vr:"CS",name:"DirectoryRecordType",vm:"1",version:"DICOM"},"(0004,1432)":{tag:"(0004,1432)",vr:"UI",name:"PrivateRecordUID",vm:"1",version:"DICOM"},"(0004,1500)":{tag:"(0004,1500)",vr:"CS",name:"ReferencedFileID",vm:"1-8",version:"DICOM"},"(0004,1510)":{tag:"(0004,1510)",vr:"UI",name:"ReferencedSOPClassUIDInFile",vm:"1",version:"DICOM"},"(0004,1511)":{tag:"(0004,1511)",vr:"UI",name:"ReferencedSOPInstanceUIDInFile",vm:"1",version:"DICOM"},"(0004,1512)":{tag:"(0004,1512)",vr:"UI",name:"ReferencedTransferSyntaxUIDInFile",vm:"1",version:"DICOM"},"(0004,151A)":{tag:"(0004,151A)",vr:"UI",name:"ReferencedRelatedGeneralSOPClassUIDInFile",vm:"1-n",version:"DICOM"},"(0008,0005)":{tag:"(0008,0005)",vr:"CS",name:"SpecificCharacterSet",vm:"1-n",version:"DICOM"},"(0008,0006)":{tag:"(0008,0006)",vr:"SQ",name:"LanguageCodeSequence",vm:"1",version:"DICOM"},"(0008,0008)":{tag:"(0008,0008)",vr:"CS",name:"ImageType",vm:"2-n",version:"DICOM"},"(0008,0012)":{tag:"(0008,0012)",vr:"DA",name:"InstanceCreationDate",vm:"1",version:"DICOM"},"(0008,0013)":{tag:"(0008,0013)",vr:"TM",name:"InstanceCreationTime",vm:"1",version:"DICOM"},"(0008,0014)":{tag:"(0008,0014)",vr:"UI",name:"InstanceCreatorUID",vm:"1",version:"DICOM"},"(0008,0015)":{tag:"(0008,0015)",vr:"DT",name:"InstanceCoercionDateTime",vm:"1",version:"DICOM"},"(0008,0016)":{tag:"(0008,0016)",vr:"UI",name:"SOPClassUID",vm:"1",version:"DICOM"},"(0008,0018)":{tag:"(0008,0018)",vr:"UI",name:"SOPInstanceUID",vm:"1",version:"DICOM"},"(0008,001A)":{tag:"(0008,001A)",vr:"UI",name:"RelatedGeneralSOPClassUID",vm:"1-n",version:"DICOM"},"(0008,001B)":{tag:"(0008,001B)",vr:"UI",name:"OriginalSpecializedSOPClassUID",vm:"1",version:"DICOM"},"(0008,0020)":{tag:"(0008,0020)",vr:"DA",name:"StudyDate",vm:"1",version:"DICOM"},"(0008,0021)":{tag:"(0008,0021)",vr:"DA",name:"SeriesDate",vm:"1",version:"DICOM"},"(0008,0022)":{tag:"(0008,0022)",vr:"DA",name:"AcquisitionDate",vm:"1",version:"DICOM"},"(0008,0023)":{tag:"(0008,0023)",vr:"DA",name:"ContentDate",vm:"1",version:"DICOM"},"(0008,002A)":{tag:"(0008,002A)",vr:"DT",name:"AcquisitionDateTime",vm:"1",version:"DICOM"},"(0008,0030)":{tag:"(0008,0030)",vr:"TM",name:"StudyTime",vm:"1",version:"DICOM"},"(0008,0031)":{tag:"(0008,0031)",vr:"TM",name:"SeriesTime",vm:"1",version:"DICOM"},"(0008,0032)":{tag:"(0008,0032)",vr:"TM",name:"AcquisitionTime",vm:"1",version:"DICOM"},"(0008,0033)":{tag:"(0008,0033)",vr:"TM",name:"ContentTime",vm:"1",version:"DICOM"},"(0008,0050)":{tag:"(0008,0050)",vr:"SH",name:"AccessionNumber",vm:"1",version:"DICOM"},"(0008,0051)":{tag:"(0008,0051)",vr:"SQ",name:"IssuerOfAccessionNumberSequence",vm:"1",version:"DICOM"},"(0008,0052)":{tag:"(0008,0052)",vr:"CS",name:"QueryRetrieveLevel",vm:"1",version:"DICOM"},"(0008,0053)":{tag:"(0008,0053)",vr:"CS",name:"QueryRetrieveView",vm:"1",version:"DICOM"},"(0008,0054)":{tag:"(0008,0054)",vr:"AE",name:"RetrieveAETitle",vm:"1-n",version:"DICOM"},"(0008,0055)":{tag:"(0008,0055)",vr:"AE",name:"StationAETitle",vm:"1",version:"DICOM"},"(0008,0056)":{tag:"(0008,0056)",vr:"CS",name:"InstanceAvailability",vm:"1",version:"DICOM"},"(0008,0058)":{tag:"(0008,0058)",vr:"UI",name:"FailedSOPInstanceUIDList",vm:"1-n",version:"DICOM"},"(0008,0060)":{tag:"(0008,0060)",vr:"CS",name:"Modality",vm:"1",version:"DICOM"},"(0008,0061)":{tag:"(0008,0061)",vr:"CS",name:"ModalitiesInStudy",vm:"1-n",version:"DICOM"},"(0008,0062)":{tag:"(0008,0062)",vr:"UI",name:"SOPClassesInStudy",vm:"1-n",version:"DICOM"},"(0008,0063)":{tag:"(0008,0063)",vr:"SQ",name:"AnatomicRegionsInStudyCodeSequence",vm:"1",version:"DICOM"},"(0008,0064)":{tag:"(0008,0064)",vr:"CS",name:"ConversionType",vm:"1",version:"DICOM"},"(0008,0068)":{tag:"(0008,0068)",vr:"CS",name:"PresentationIntentType",vm:"1",version:"DICOM"},"(0008,0070)":{tag:"(0008,0070)",vr:"LO",name:"Manufacturer",vm:"1",version:"DICOM"},"(0008,0080)":{tag:"(0008,0080)",vr:"LO",name:"InstitutionName",vm:"1",version:"DICOM"},"(0008,0081)":{tag:"(0008,0081)",vr:"ST",name:"InstitutionAddress",vm:"1",version:"DICOM"},"(0008,0082)":{tag:"(0008,0082)",vr:"SQ",name:"InstitutionCodeSequence",vm:"1",version:"DICOM"},"(0008,0090)":{tag:"(0008,0090)",vr:"PN",name:"ReferringPhysicianName",vm:"1",version:"DICOM"},"(0008,0092)":{tag:"(0008,0092)",vr:"ST",name:"ReferringPhysicianAddress",vm:"1",version:"DICOM"},"(0008,0094)":{tag:"(0008,0094)",vr:"SH",name:"ReferringPhysicianTelephoneNumbers",vm:"1-n",version:"DICOM"},"(0008,0096)":{tag:"(0008,0096)",vr:"SQ",name:"ReferringPhysicianIdentificationSequence",vm:"1",version:"DICOM"},"(0008,009C)":{tag:"(0008,009C)",vr:"PN",name:"ConsultingPhysicianName",vm:"1-n",version:"DICOM"},"(0008,009D)":{tag:"(0008,009D)",vr:"SQ",name:"ConsultingPhysicianIdentificationSequence",vm:"1",version:"DICOM"},"(0008,0100)":{tag:"(0008,0100)",vr:"SH",name:"CodeValue",vm:"1",version:"DICOM"},"(0008,0101)":{tag:"(0008,0101)",vr:"LO",name:"ExtendedCodeValue",vm:"1",version:"DICOM/DICOS"},"(0008,0102)":{tag:"(0008,0102)",vr:"SH",name:"CodingSchemeDesignator",vm:"1",version:"DICOM"},"(0008,0103)":{tag:"(0008,0103)",vr:"SH",name:"CodingSchemeVersion",vm:"1",version:"DICOM"},"(0008,0104)":{tag:"(0008,0104)",vr:"LO",name:"CodeMeaning",vm:"1",version:"DICOM"},"(0008,0105)":{tag:"(0008,0105)",vr:"CS",name:"MappingResource",vm:"1",version:"DICOM"},"(0008,0106)":{tag:"(0008,0106)",vr:"DT",name:"ContextGroupVersion",vm:"1",version:"DICOM"},"(0008,0107)":{tag:"(0008,0107)",vr:"DT",name:"ContextGroupLocalVersion",vm:"1",version:"DICOM"},"(0008,0108)":{tag:"(0008,0108)",vr:"LT",name:"ExtendedCodeMeaning",vm:"1",version:"DICOM/DICOS"},"(0008,0109)":{tag:"(0008,0109)",vr:"SQ",name:"CodingSchemeResourcesSequence",vm:"1",version:"DICOM"},"(0008,010A)":{tag:"(0008,010A)",vr:"CS",name:"CodingSchemeURLType",vm:"1",version:"DICOM"},"(0008,010B)":{tag:"(0008,010B)",vr:"CS",name:"ContextGroupExtensionFlag",vm:"1",version:"DICOM"},"(0008,010C)":{tag:"(0008,010C)",vr:"UI",name:"CodingSchemeUID",vm:"1",version:"DICOM"},"(0008,010D)":{tag:"(0008,010D)",vr:"UI",name:"ContextGroupExtensionCreatorUID",vm:"1",version:"DICOM"},"(0008,010E)":{tag:"(0008,010E)",vr:"UR",name:"CodingSchemeURL",vm:"1",version:"DICOM"},"(0008,010F)":{tag:"(0008,010F)",vr:"CS",name:"ContextIdentifier",vm:"1",version:"DICOM"},"(0008,0110)":{tag:"(0008,0110)",vr:"SQ",name:"CodingSchemeIdentificationSequence",vm:"1",version:"DICOM"},"(0008,0112)":{tag:"(0008,0112)",vr:"LO",name:"CodingSchemeRegistry",vm:"1",version:"DICOM"},"(0008,0114)":{tag:"(0008,0114)",vr:"ST",name:"CodingSchemeExternalID",vm:"1",version:"DICOM"},"(0008,0115)":{tag:"(0008,0115)",vr:"ST",name:"CodingSchemeName",vm:"1",version:"DICOM"},"(0008,0116)":{tag:"(0008,0116)",vr:"ST",name:"CodingSchemeResponsibleOrganization",vm:"1",version:"DICOM"},"(0008,0117)":{tag:"(0008,0117)",vr:"UI",name:"ContextUID",vm:"1",version:"DICOM"},"(0008,0118)":{tag:"(0008,0118)",vr:"UI",name:"MappingResourceUID",vm:"1",version:"DICOM"},"(0008,0119)":{tag:"(0008,0119)",vr:"UC",name:"LongCodeValue",vm:"1",version:"DICOM"},"(0008,0120)":{tag:"(0008,0120)",vr:"UR",name:"URNCodeValue",vm:"1",version:"DICOM"},"(0008,0121)":{tag:"(0008,0121)",vr:"SQ",name:"EquivalentCodeSequence",vm:"1",version:"DICOM"},"(0008,0122)":{tag:"(0008,0122)",vr:"LO",name:"MappingResourceName",vm:"1",version:"DICOM"},"(0008,0123)":{tag:"(0008,0123)",vr:"SQ",name:"ContextGroupIdentificationSequence",vm:"1",version:"DICOM"},"(0008,0124)":{tag:"(0008,0124)",vr:"SQ",name:"MappingResourceIdentificationSequence",vm:"1",version:"DICOM"},"(0008,0201)":{tag:"(0008,0201)",vr:"SH",name:"TimezoneOffsetFromUTC",vm:"1",version:"DICOM"},"(0008,0220)":{tag:"(0008,0220)",vr:"SQ",name:"ResponsibleGroupCodeSequence",vm:"1",version:"DICOM"},"(0008,0221)":{tag:"(0008,0221)",vr:"CS",name:"EquipmentModality",vm:"1",version:"DICOM"},"(0008,0222)":{tag:"(0008,0222)",vr:"LO",name:"ManufacturerRelatedModelGroup",vm:"1",version:"DICOM"},"(0008,0300)":{tag:"(0008,0300)",vr:"SQ",name:"PrivateDataElementCharacteristicsSequence",vm:"1",version:"DICOM"},"(0008,0301)":{tag:"(0008,0301)",vr:"US",name:"PrivateGroupReference",vm:"1",version:"DICOM"},"(0008,0302)":{tag:"(0008,0302)",vr:"LO",name:"PrivateCreatorReference",vm:"1",version:"DICOM"},"(0008,0303)":{tag:"(0008,0303)",vr:"CS",name:"BlockIdentifyingInformationStatus",vm:"1",version:"DICOM"},"(0008,0304)":{tag:"(0008,0304)",vr:"US",name:"NonidentifyingPrivateElements",vm:"1-n",version:"DICOM"},"(0008,0305)":{tag:"(0008,0305)",vr:"SQ",name:"DeidentificationActionSequence",vm:"1",version:"DICOM"},"(0008,0306)":{tag:"(0008,0306)",vr:"US",name:"IdentifyingPrivateElements",vm:"1-n",version:"DICOM"},"(0008,0307)":{tag:"(0008,0307)",vr:"CS",name:"DeidentificationAction",vm:"1",version:"DICOM"},"(0008,0308)":{tag:"(0008,0308)",vr:"US",name:"PrivateDataElement",vm:"1",version:"DICOM"},"(0008,0309)":{tag:"(0008,0309)",vr:"UL",name:"PrivateDataElementValueMultiplicity",vm:"1-3",version:"DICOM"},"(0008,030A)":{tag:"(0008,030A)",vr:"CS",name:"PrivateDataElementValueRepresentation",vm:"1",version:"DICOM"},"(0008,030B)":{tag:"(0008,030B)",vr:"UL",name:"PrivateDataElementNumberOfItems",vm:"1-2",version:"DICOM"},"(0008,030C)":{tag:"(0008,030C)",vr:"UC",name:"PrivateDataElementName",vm:"1",version:"DICOM"},"(0008,030D)":{tag:"(0008,030D)",vr:"UC",name:"PrivateDataElementKeyword",vm:"1",version:"DICOM"},"(0008,030E)":{tag:"(0008,030E)",vr:"UT",name:"PrivateDataElementDescription",vm:"1",version:"DICOM"},"(0008,030F)":{tag:"(0008,030F)",vr:"UT",name:"PrivateDataElementEncoding",vm:"1",version:"DICOM"},"(0008,0310)":{tag:"(0008,0310)",vr:"SQ",name:"PrivateDataElementDefinitionSequence",vm:"1",version:"DICOM"},"(0008,1010)":{tag:"(0008,1010)",vr:"SH",name:"StationName",vm:"1",version:"DICOM"},"(0008,1030)":{tag:"(0008,1030)",vr:"LO",name:"StudyDescription",vm:"1",version:"DICOM"},"(0008,1032)":{tag:"(0008,1032)",vr:"SQ",name:"ProcedureCodeSequence",vm:"1",version:"DICOM"},"(0008,103E)":{tag:"(0008,103E)",vr:"LO",name:"SeriesDescription",vm:"1",version:"DICOM"},"(0008,103F)":{tag:"(0008,103F)",vr:"SQ",name:"SeriesDescriptionCodeSequence",vm:"1",version:"DICOM"},"(0008,1040)":{tag:"(0008,1040)",vr:"LO",name:"InstitutionalDepartmentName",vm:"1",version:"DICOM"},"(0008,1041)":{tag:"(0008,1041)",vr:"SQ",name:"InstitutionalDepartmentTypeCodeSequence",vm:"1",version:"DICOM"},"(0008,1048)":{tag:"(0008,1048)",vr:"PN",name:"PhysiciansOfRecord",vm:"1-n",version:"DICOM"},"(0008,1049)":{tag:"(0008,1049)",vr:"SQ",name:"PhysiciansOfRecordIdentificationSequence",vm:"1",version:"DICOM"},"(0008,1050)":{tag:"(0008,1050)",vr:"PN",name:"PerformingPhysicianName",vm:"1-n",version:"DICOM"},"(0008,1052)":{tag:"(0008,1052)",vr:"SQ",name:"PerformingPhysicianIdentificationSequence",vm:"1",version:"DICOM"},"(0008,1060)":{tag:"(0008,1060)",vr:"PN",name:"NameOfPhysiciansReadingStudy",vm:"1-n",version:"DICOM"},"(0008,1062)":{tag:"(0008,1062)",vr:"SQ",name:"PhysiciansReadingStudyIdentificationSequence",vm:"1",version:"DICOM"},"(0008,1070)":{tag:"(0008,1070)",vr:"PN",name:"OperatorsName",vm:"1-n",version:"DICOM"},"(0008,1072)":{tag:"(0008,1072)",vr:"SQ",name:"OperatorIdentificationSequence",vm:"1",version:"DICOM"},"(0008,1080)":{tag:"(0008,1080)",vr:"LO",name:"AdmittingDiagnosesDescription",vm:"1-n",version:"DICOM"},"(0008,1084)":{tag:"(0008,1084)",vr:"SQ",name:"AdmittingDiagnosesCodeSequence",vm:"1",version:"DICOM"},"(0008,1090)":{tag:"(0008,1090)",vr:"LO",name:"ManufacturerModelName",vm:"1",version:"DICOM"},"(0008,1110)":{tag:"(0008,1110)",vr:"SQ",name:"ReferencedStudySequence",vm:"1",version:"DICOM"},"(0008,1111)":{tag:"(0008,1111)",vr:"SQ",name:"ReferencedPerformedProcedureStepSequence",vm:"1",version:"DICOM"},"(0008,1115)":{tag:"(0008,1115)",vr:"SQ",name:"ReferencedSeriesSequence",vm:"1",version:"DICOM"},"(0008,1120)":{tag:"(0008,1120)",vr:"SQ",name:"ReferencedPatientSequence",vm:"1",version:"DICOM"},"(0008,1125)":{tag:"(0008,1125)",vr:"SQ",name:"ReferencedVisitSequence",vm:"1",version:"DICOM"},"(0008,1134)":{tag:"(0008,1134)",vr:"SQ",name:"ReferencedStereometricInstanceSequence",vm:"1",version:"DICOM"},"(0008,113A)":{tag:"(0008,113A)",vr:"SQ",name:"ReferencedWaveformSequence",vm:"1",version:"DICOM"},"(0008,1140)":{tag:"(0008,1140)",vr:"SQ",name:"ReferencedImageSequence",vm:"1",version:"DICOM"},"(0008,114A)":{tag:"(0008,114A)",vr:"SQ",name:"ReferencedInstanceSequence",vm:"1",version:"DICOM"},"(0008,114B)":{tag:"(0008,114B)",vr:"SQ",name:"ReferencedRealWorldValueMappingInstanceSequence",vm:"1",version:"DICOM"},"(0008,1150)":{tag:"(0008,1150)",vr:"UI",name:"ReferencedSOPClassUID",vm:"1",version:"DICOM"},"(0008,1155)":{tag:"(0008,1155)",vr:"UI",name:"ReferencedSOPInstanceUID",vm:"1",version:"DICOM"},"(0008,1156)":{tag:"(0008,1156)",vr:"SQ",name:"DefinitionSourceSequence",vm:"1",version:"DICOM"},"(0008,115A)":{tag:"(0008,115A)",vr:"UI",name:"SOPClassesSupported",vm:"1-n",version:"DICOM"},"(0008,1160)":{tag:"(0008,1160)",vr:"IS",name:"ReferencedFrameNumber",vm:"1-n",version:"DICOM"},"(0008,1161)":{tag:"(0008,1161)",vr:"UL",name:"SimpleFrameList",vm:"1-n",version:"DICOM"},"(0008,1162)":{tag:"(0008,1162)",vr:"UL",name:"CalculatedFrameList",vm:"3-3n",version:"DICOM"},"(0008,1163)":{tag:"(0008,1163)",vr:"FD",name:"TimeRange",vm:"2",version:"DICOM"},"(0008,1164)":{tag:"(0008,1164)",vr:"SQ",name:"FrameExtractionSequence",vm:"1",version:"DICOM"},"(0008,1167)":{tag:"(0008,1167)",vr:"UI",name:"MultiFrameSourceSOPInstanceUID",vm:"1",version:"DICOM"},"(0008,1190)":{tag:"(0008,1190)",vr:"UR",name:"RetrieveURL",vm:"1",version:"DICOM"},"(0008,1195)":{tag:"(0008,1195)",vr:"UI",name:"TransactionUID",vm:"1",version:"DICOM"},"(0008,1196)":{tag:"(0008,1196)",vr:"US",name:"WarningReason",vm:"1",version:"DICOM"},"(0008,1197)":{tag:"(0008,1197)",vr:"US",name:"FailureReason",vm:"1",version:"DICOM"},"(0008,1198)":{tag:"(0008,1198)",vr:"SQ",name:"FailedSOPSequence",vm:"1",version:"DICOM"},"(0008,1199)":{tag:"(0008,1199)",vr:"SQ",name:"ReferencedSOPSequence",vm:"1",version:"DICOM"},"(0008,119A)":{tag:"(0008,119A)",vr:"SQ",name:"OtherFailuresSequence",vm:"1",version:"DICOM"},"(0008,1200)":{tag:"(0008,1200)",vr:"SQ",name:"StudiesContainingOtherReferencedInstancesSequence",vm:"1",version:"DICOM"},"(0008,1250)":{tag:"(0008,1250)",vr:"SQ",name:"RelatedSeriesSequence",vm:"1",version:"DICOM"},"(0008,2111)":{tag:"(0008,2111)",vr:"ST",name:"DerivationDescription",vm:"1",version:"DICOM"},"(0008,2112)":{tag:"(0008,2112)",vr:"SQ",name:"SourceImageSequence",vm:"1",version:"DICOM"},"(0008,2120)":{tag:"(0008,2120)",vr:"SH",name:"StageName",vm:"1",version:"DICOM"},"(0008,2122)":{tag:"(0008,2122)",vr:"IS",name:"StageNumber",vm:"1",version:"DICOM"},"(0008,2124)":{tag:"(0008,2124)",vr:"IS",name:"NumberOfStages",vm:"1",version:"DICOM"},"(0008,2127)":{tag:"(0008,2127)",vr:"SH",name:"ViewName",vm:"1",version:"DICOM"},"(0008,2128)":{tag:"(0008,2128)",vr:"IS",name:"ViewNumber",vm:"1",version:"DICOM"},"(0008,2129)":{tag:"(0008,2129)",vr:"IS",name:"NumberOfEventTimers",vm:"1",version:"DICOM"},"(0008,212A)":{tag:"(0008,212A)",vr:"IS",name:"NumberOfViewsInStage",vm:"1",version:"DICOM"},"(0008,2130)":{tag:"(0008,2130)",vr:"DS",name:"EventElapsedTimes",vm:"1-n",version:"DICOM"},"(0008,2132)":{tag:"(0008,2132)",vr:"LO",name:"EventTimerNames",vm:"1-n",version:"DICOM"},"(0008,2133)":{tag:"(0008,2133)",vr:"SQ",name:"EventTimerSequence",vm:"1",version:"DICOM"},"(0008,2134)":{tag:"(0008,2134)",vr:"FD",name:"EventTimeOffset",vm:"1",version:"DICOM"},"(0008,2135)":{tag:"(0008,2135)",vr:"SQ",name:"EventCodeSequence",vm:"1",version:"DICOM"},"(0008,2142)":{tag:"(0008,2142)",vr:"IS",name:"StartTrim",vm:"1",version:"DICOM"},"(0008,2143)":{tag:"(0008,2143)",vr:"IS",name:"StopTrim",vm:"1",version:"DICOM"},"(0008,2144)":{tag:"(0008,2144)",vr:"IS",name:"RecommendedDisplayFrameRate",vm:"1",version:"DICOM"},"(0008,2218)":{tag:"(0008,2218)",vr:"SQ",name:"AnatomicRegionSequence",vm:"1",version:"DICOM"},"(0008,2220)":{tag:"(0008,2220)",vr:"SQ",name:"AnatomicRegionModifierSequence",vm:"1",version:"DICOM"},"(0008,2228)":{tag:"(0008,2228)",vr:"SQ",name:"PrimaryAnatomicStructureSequence",vm:"1",version:"DICOM"},"(0008,2229)":{tag:"(0008,2229)",vr:"SQ",name:"AnatomicStructureSpaceOrRegionSequence",vm:"1",version:"DICOM"},"(0008,2230)":{tag:"(0008,2230)",vr:"SQ",name:"PrimaryAnatomicStructureModifierSequence",vm:"1",version:"DICOM"},"(0008,3001)":{tag:"(0008,3001)",vr:"SQ",name:"AlternateRepresentationSequence",vm:"1",version:"DICOM"},"(0008,3002)":{tag:"(0008,3002)",vr:"UI",name:"AvailableTransferSyntaxUID",vm:"1-n",version:"DICOM"},"(0008,3010)":{tag:"(0008,3010)",vr:"UI",name:"IrradiationEventUID",vm:"1-n",version:"DICOM"},"(0008,3011)":{tag:"(0008,3011)",vr:"SQ",name:"SourceIrradiationEventSequence",vm:"1",version:"DICOM"},"(0008,3012)":{tag:"(0008,3012)",vr:"UI",name:"RadiopharmaceuticalAdministrationEventUID",vm:"1",version:"DICOM"},"(0008,9007)":{tag:"(0008,9007)",vr:"CS",name:"FrameType",vm:"4",version:"DICOM"},"(0008,9092)":{tag:"(0008,9092)",vr:"SQ",name:"ReferencedImageEvidenceSequence",vm:"1",version:"DICOM"},"(0008,9121)":{tag:"(0008,9121)",vr:"SQ",name:"ReferencedRawDataSequence",vm:"1",version:"DICOM"},"(0008,9123)":{tag:"(0008,9123)",vr:"UI",name:"CreatorVersionUID",vm:"1",version:"DICOM"},"(0008,9124)":{tag:"(0008,9124)",vr:"SQ",name:"DerivationImageSequence",vm:"1",version:"DICOM"},"(0008,9154)":{tag:"(0008,9154)",vr:"SQ",name:"SourceImageEvidenceSequence",vm:"1",version:"DICOM"},"(0008,9205)":{tag:"(0008,9205)",vr:"CS",name:"PixelPresentation",vm:"1",version:"DICOM"},"(0008,9206)":{tag:"(0008,9206)",vr:"CS",name:"VolumetricProperties",vm:"1",version:"DICOM"},"(0008,9207)":{tag:"(0008,9207)",vr:"CS",name:"VolumeBasedCalculationTechnique",vm:"1",version:"DICOM"},"(0008,9208)":{tag:"(0008,9208)",vr:"CS",name:"ComplexImageComponent",vm:"1",version:"DICOM"},"(0008,9209)":{tag:"(0008,9209)",vr:"CS",name:"AcquisitionContrast",vm:"1",version:"DICOM"},"(0008,9215)":{tag:"(0008,9215)",vr:"SQ",name:"DerivationCodeSequence",vm:"1",version:"DICOM"},"(0008,9237)":{tag:"(0008,9237)",vr:"SQ",name:"ReferencedPresentationStateSequence",vm:"1",version:"DICOM"},"(0008,9410)":{tag:"(0008,9410)",vr:"SQ",name:"ReferencedOtherPlaneSequence",vm:"1",version:"DICOM"},"(0008,9458)":{tag:"(0008,9458)",vr:"SQ",name:"FrameDisplaySequence",vm:"1",version:"DICOM"},"(0008,9459)":{tag:"(0008,9459)",vr:"FL",name:"RecommendedDisplayFrameRateInFloat",vm:"1",version:"DICOM"},"(0008,9460)":{tag:"(0008,9460)",vr:"CS",name:"SkipFrameRangeFlag",vm:"1",version:"DICOM"},"(0010,0010)":{tag:"(0010,0010)",vr:"PN",name:"PatientName",vm:"1",version:"DICOM"},"(0010,0020)":{tag:"(0010,0020)",vr:"LO",name:"PatientID",vm:"1",version:"DICOM"},"(0010,0021)":{tag:"(0010,0021)",vr:"LO",name:"IssuerOfPatientID",vm:"1",version:"DICOM"},"(0010,0022)":{tag:"(0010,0022)",vr:"CS",name:"TypeOfPatientID",vm:"1",version:"DICOM"},"(0010,0024)":{tag:"(0010,0024)",vr:"SQ",name:"IssuerOfPatientIDQualifiersSequence",vm:"1",version:"DICOM"},"(0010,0026)":{tag:"(0010,0026)",vr:"SQ",name:"SourcePatientGroupIdentificationSequence",vm:"1",version:"DICOM"},"(0010,0027)":{tag:"(0010,0027)",vr:"SQ",name:"GroupOfPatientsIdentificationSequence",vm:"1",version:"DICOM"},"(0010,0028)":{tag:"(0010,0028)",vr:"US",name:"SubjectRelativePositionInImage",vm:"3",version:"DICOM"},"(0010,0030)":{tag:"(0010,0030)",vr:"DA",name:"PatientBirthDate",vm:"1",version:"DICOM"},"(0010,0032)":{tag:"(0010,0032)",vr:"TM",name:"PatientBirthTime",vm:"1",version:"DICOM"},"(0010,0033)":{tag:"(0010,0033)",vr:"LO",name:"PatientBirthDateInAlternativeCalendar",vm:"1",version:"DICOM"},"(0010,0034)":{tag:"(0010,0034)",vr:"LO",name:"PatientDeathDateInAlternativeCalendar",vm:"1",version:"DICOM"},"(0010,0035)":{tag:"(0010,0035)",vr:"CS",name:"PatientAlternativeCalendar",vm:"1",version:"DICOM"},"(0010,0040)":{tag:"(0010,0040)",vr:"CS",name:"PatientSex",vm:"1",version:"DICOM"},"(0010,0050)":{tag:"(0010,0050)",vr:"SQ",name:"PatientInsurancePlanCodeSequence",vm:"1",version:"DICOM"},"(0010,0101)":{tag:"(0010,0101)",vr:"SQ",name:"PatientPrimaryLanguageCodeSequence",vm:"1",version:"DICOM"},"(0010,0102)":{tag:"(0010,0102)",vr:"SQ",name:"PatientPrimaryLanguageModifierCodeSequence",vm:"1",version:"DICOM"},"(0010,0200)":{tag:"(0010,0200)",vr:"CS",name:"QualityControlSubject",vm:"1",version:"DICOM"},"(0010,0201)":{tag:"(0010,0201)",vr:"SQ",name:"QualityControlSubjectTypeCodeSequence",vm:"1",version:"DICOM"},"(0010,0212)":{tag:"(0010,0212)",vr:"UC",name:"StrainDescription",vm:"1",version:"DICOM"},"(0010,0213)":{tag:"(0010,0213)",vr:"LO",name:"StrainNomenclature",vm:"1",version:"DICOM"},"(0010,0214)":{tag:"(0010,0214)",vr:"LO",name:"StrainStockNumber",vm:"1",version:"DICOM"},"(0010,0215)":{tag:"(0010,0215)",vr:"SQ",name:"StrainSourceRegistryCodeSequence",vm:"1",version:"DICOM"},"(0010,0216)":{tag:"(0010,0216)",vr:"SQ",name:"StrainStockSequence",vm:"1",version:"DICOM"},"(0010,0217)":{tag:"(0010,0217)",vr:"LO",name:"StrainSource",vm:"1",version:"DICOM"},"(0010,0218)":{tag:"(0010,0218)",vr:"UT",name:"StrainAdditionalInformation",vm:"1",version:"DICOM"},"(0010,0219)":{tag:"(0010,0219)",vr:"SQ",name:"StrainCodeSequence",vm:"1",version:"DICOM"},"(0010,0221)":{tag:"(0010,0221)",vr:"SQ",name:"GeneticModificationsSequence",vm:"1",version:"DICOM"},"(0010,0222)":{tag:"(0010,0222)",vr:"UC",name:"GeneticModificationsDescription",vm:"1",version:"DICOM"},"(0010,0223)":{tag:"(0010,0223)",vr:"LO",name:"GeneticModificationsNomenclature",vm:"1",version:"DICOM"},"(0010,0229)":{tag:"(0010,0229)",vr:"SQ",name:"GeneticModificationsCodeSequence",vm:"1",version:"DICOM"},"(0010,1000)":{tag:"(0010,1000)",vr:"LO",name:"OtherPatientIDs",vm:"1-n",version:"DICOM"},"(0010,1001)":{tag:"(0010,1001)",vr:"PN",name:"OtherPatientNames",vm:"1-n",version:"DICOM"},"(0010,1002)":{tag:"(0010,1002)",vr:"SQ",name:"OtherPatientIDsSequence",vm:"1",version:"DICOM"},"(0010,1005)":{tag:"(0010,1005)",vr:"PN",name:"PatientBirthName",vm:"1",version:"DICOM"},"(0010,1010)":{tag:"(0010,1010)",vr:"AS",name:"PatientAge",vm:"1",version:"DICOM"},"(0010,1020)":{tag:"(0010,1020)",vr:"DS",name:"PatientSize",vm:"1",version:"DICOM"},"(0010,1021)":{tag:"(0010,1021)",vr:"SQ",name:"PatientSizeCodeSequence",vm:"1",version:"DICOM"},"(0010,1022)":{tag:"(0010,1022)",vr:"DS",name:"PatientBodyMassIndex",vm:"1",version:"DICOM"},"(0010,1023)":{tag:"(0010,1023)",vr:"DS",name:"MeasuredAPDimension",vm:"1",version:"DICOM"},"(0010,1024)":{tag:"(0010,1024)",vr:"DS",name:"MeasuredLateralDimension",vm:"1",version:"DICOM"},"(0010,1030)":{tag:"(0010,1030)",vr:"DS",name:"PatientWeight",vm:"1",version:"DICOM"},"(0010,1040)":{tag:"(0010,1040)",vr:"LO",name:"PatientAddress",vm:"1",version:"DICOM"},"(0010,1060)":{tag:"(0010,1060)",vr:"PN",name:"PatientMotherBirthName",vm:"1",version:"DICOM"},"(0010,1080)":{tag:"(0010,1080)",vr:"LO",name:"MilitaryRank",vm:"1",version:"DICOM"},"(0010,1081)":{tag:"(0010,1081)",vr:"LO",name:"BranchOfService",vm:"1",version:"DICOM"},"(0010,1090)":{tag:"(0010,1090)",vr:"LO",name:"MedicalRecordLocator",vm:"1",version:"DICOM"},"(0010,1100)":{tag:"(0010,1100)",vr:"SQ",name:"ReferencedPatientPhotoSequence",vm:"1",version:"DICOM"},"(0010,2000)":{tag:"(0010,2000)",vr:"LO",name:"MedicalAlerts",vm:"1-n",version:"DICOM"},"(0010,2110)":{tag:"(0010,2110)",vr:"LO",name:"Allergies",vm:"1-n",version:"DICOM"},"(0010,2150)":{tag:"(0010,2150)",vr:"LO",name:"CountryOfResidence",vm:"1",version:"DICOM"},"(0010,2152)":{tag:"(0010,2152)",vr:"LO",name:"RegionOfResidence",vm:"1",version:"DICOM"},"(0010,2154)":{tag:"(0010,2154)",vr:"SH",name:"PatientTelephoneNumbers",vm:"1-n",version:"DICOM"},"(0010,2155)":{tag:"(0010,2155)",vr:"LT",name:"PatientTelecomInformation",vm:"1",version:"DICOM"},"(0010,2160)":{tag:"(0010,2160)",vr:"SH",name:"EthnicGroup",vm:"1",version:"DICOM"},"(0010,2180)":{tag:"(0010,2180)",vr:"SH",name:"Occupation",vm:"1",version:"DICOM"},"(0010,21A0)":{tag:"(0010,21A0)",vr:"CS",name:"SmokingStatus",vm:"1",version:"DICOM"},"(0010,21B0)":{tag:"(0010,21B0)",vr:"LT",name:"AdditionalPatientHistory",vm:"1",version:"DICOM"},"(0010,21C0)":{tag:"(0010,21C0)",vr:"US",name:"PregnancyStatus",vm:"1",version:"DICOM"},"(0010,21D0)":{tag:"(0010,21D0)",vr:"DA",name:"LastMenstrualDate",vm:"1",version:"DICOM"},"(0010,21F0)":{tag:"(0010,21F0)",vr:"LO",name:"PatientReligiousPreference",vm:"1",version:"DICOM"},"(0010,2201)":{tag:"(0010,2201)",vr:"LO",name:"PatientSpeciesDescription",vm:"1",version:"DICOM"},"(0010,2202)":{tag:"(0010,2202)",vr:"SQ",name:"PatientSpeciesCodeSequence",vm:"1",version:"DICOM"},"(0010,2203)":{tag:"(0010,2203)",vr:"CS",name:"PatientSexNeutered",vm:"1",version:"DICOM"},"(0010,2210)":{tag:"(0010,2210)",vr:"CS",name:"AnatomicalOrientationType",vm:"1",version:"DICOM"},"(0010,2292)":{tag:"(0010,2292)",vr:"LO",name:"PatientBreedDescription",vm:"1",version:"DICOM"},"(0010,2293)":{tag:"(0010,2293)",vr:"SQ",name:"PatientBreedCodeSequence",vm:"1",version:"DICOM"},"(0010,2294)":{tag:"(0010,2294)",vr:"SQ",name:"BreedRegistrationSequence",vm:"1",version:"DICOM"},"(0010,2295)":{tag:"(0010,2295)",vr:"LO",name:"BreedRegistrationNumber",vm:"1",version:"DICOM"},"(0010,2296)":{tag:"(0010,2296)",vr:"SQ",name:"BreedRegistryCodeSequence",vm:"1",version:"DICOM"},"(0010,2297)":{tag:"(0010,2297)",vr:"PN",name:"ResponsiblePerson",vm:"1",version:"DICOM"},"(0010,2298)":{tag:"(0010,2298)",vr:"CS",name:"ResponsiblePersonRole",vm:"1",version:"DICOM"},"(0010,2299)":{tag:"(0010,2299)",vr:"LO",name:"ResponsibleOrganization",vm:"1",version:"DICOM"},"(0010,4000)":{tag:"(0010,4000)",vr:"LT",name:"PatientComments",vm:"1",version:"DICOM"},"(0010,9431)":{tag:"(0010,9431)",vr:"FL",name:"ExaminedBodyThickness",vm:"1",version:"DICOM"},"(0012,0010)":{tag:"(0012,0010)",vr:"LO",name:"ClinicalTrialSponsorName",vm:"1",version:"DICOM"},"(0012,0020)":{tag:"(0012,0020)",vr:"LO",name:"ClinicalTrialProtocolID",vm:"1",version:"DICOM"},"(0012,0021)":{tag:"(0012,0021)",vr:"LO",name:"ClinicalTrialProtocolName",vm:"1",version:"DICOM"},"(0012,0030)":{tag:"(0012,0030)",vr:"LO",name:"ClinicalTrialSiteID",vm:"1",version:"DICOM"},"(0012,0031)":{tag:"(0012,0031)",vr:"LO",name:"ClinicalTrialSiteName",vm:"1",version:"DICOM"},"(0012,0040)":{tag:"(0012,0040)",vr:"LO",name:"ClinicalTrialSubjectID",vm:"1",version:"DICOM"},"(0012,0042)":{tag:"(0012,0042)",vr:"LO",name:"ClinicalTrialSubjectReadingID",vm:"1",version:"DICOM"},"(0012,0050)":{tag:"(0012,0050)",vr:"LO",name:"ClinicalTrialTimePointID",vm:"1",version:"DICOM"},"(0012,0051)":{tag:"(0012,0051)",vr:"ST",name:"ClinicalTrialTimePointDescription",vm:"1",version:"DICOM"},"(0012,0052)":{tag:"(0012,0052)",vr:"FD",name:"LongitudinalTemporalOffsetFromEvent",vm:"1",version:"DICOM"},"(0012,0053)":{tag:"(0012,0053)",vr:"CS",name:"LongitudinalTemporalEventType",vm:"1",version:"DICOM"},"(0012,0060)":{tag:"(0012,0060)",vr:"LO",name:"ClinicalTrialCoordinatingCenterName",vm:"1",version:"DICOM"},"(0012,0062)":{tag:"(0012,0062)",vr:"CS",name:"PatientIdentityRemoved",vm:"1",version:"DICOM"},"(0012,0063)":{tag:"(0012,0063)",vr:"LO",name:"DeidentificationMethod",vm:"1-n",version:"DICOM"},"(0012,0064)":{tag:"(0012,0064)",vr:"SQ",name:"DeidentificationMethodCodeSequence",vm:"1",version:"DICOM"},"(0012,0071)":{tag:"(0012,0071)",vr:"LO",name:"ClinicalTrialSeriesID",vm:"1",version:"DICOM"},"(0012,0072)":{tag:"(0012,0072)",vr:"LO",name:"ClinicalTrialSeriesDescription",vm:"1",version:"DICOM"},"(0012,0081)":{tag:"(0012,0081)",vr:"LO",name:"ClinicalTrialProtocolEthicsCommitteeName",vm:"1",version:"DICOM"},"(0012,0082)":{tag:"(0012,0082)",vr:"LO",name:"ClinicalTrialProtocolEthicsCommitteeApprovalNumber",vm:"1",version:"DICOM"},"(0012,0083)":{tag:"(0012,0083)",vr:"SQ",name:"ConsentForClinicalTrialUseSequence",vm:"1",version:"DICOM"},"(0012,0084)":{tag:"(0012,0084)",vr:"CS",name:"DistributionType",vm:"1",version:"DICOM"},"(0012,0085)":{tag:"(0012,0085)",vr:"CS",name:"ConsentForDistributionFlag",vm:"1",version:"DICOM"},"(0014,0025)":{tag:"(0014,0025)",vr:"ST",name:"ComponentManufacturingProcedure",vm:"1-n",version:"DICOM/DICONDE"},"(0014,0028)":{tag:"(0014,0028)",vr:"ST",name:"ComponentManufacturer",vm:"1-n",version:"DICOM/DICONDE"},"(0014,0030)":{tag:"(0014,0030)",vr:"DS",name:"MaterialThickness",vm:"1-n",version:"DICOM/DICONDE"},"(0014,0032)":{tag:"(0014,0032)",vr:"DS",name:"MaterialPipeDiameter",vm:"1-n",version:"DICOM/DICONDE"},"(0014,0034)":{tag:"(0014,0034)",vr:"DS",name:"MaterialIsolationDiameter",vm:"1-n",version:"DICOM/DICONDE"},"(0014,0042)":{tag:"(0014,0042)",vr:"ST",name:"MaterialGrade",vm:"1-n",version:"DICOM/DICONDE"},"(0014,0044)":{tag:"(0014,0044)",vr:"ST",name:"MaterialPropertiesDescription",vm:"1-n",version:"DICOM/DICONDE"},"(0014,0046)":{tag:"(0014,0046)",vr:"LT",name:"MaterialNotes",vm:"1",version:"DICOM/DICONDE"},"(0014,0050)":{tag:"(0014,0050)",vr:"CS",name:"ComponentShape",vm:"1",version:"DICOM/DICONDE"},"(0014,0052)":{tag:"(0014,0052)",vr:"CS",name:"CurvatureType",vm:"1",version:"DICOM/DICONDE"},"(0014,0054)":{tag:"(0014,0054)",vr:"DS",name:"OuterDiameter",vm:"1",version:"DICOM/DICONDE"},"(0014,0056)":{tag:"(0014,0056)",vr:"DS",name:"InnerDiameter",vm:"1",version:"DICOM/DICONDE"},"(0014,1010)":{tag:"(0014,1010)",vr:"ST",name:"ActualEnvironmentalConditions",vm:"1",version:"DICOM/DICONDE"},"(0014,1020)":{tag:"(0014,1020)",vr:"DA",name:"ExpiryDate",vm:"1",version:"DICOM/DICONDE"},"(0014,1040)":{tag:"(0014,1040)",vr:"ST",name:"EnvironmentalConditions",vm:"1",version:"DICOM/DICONDE"},"(0014,2002)":{tag:"(0014,2002)",vr:"SQ",name:"EvaluatorSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,2004)":{tag:"(0014,2004)",vr:"IS",name:"EvaluatorNumber",vm:"1",version:"DICOM/DICONDE"},"(0014,2006)":{tag:"(0014,2006)",vr:"PN",name:"EvaluatorName",vm:"1",version:"DICOM/DICONDE"},"(0014,2008)":{tag:"(0014,2008)",vr:"IS",name:"EvaluationAttempt",vm:"1",version:"DICOM/DICONDE"},"(0014,2012)":{tag:"(0014,2012)",vr:"SQ",name:"IndicationSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,2014)":{tag:"(0014,2014)",vr:"IS",name:"IndicationNumber",vm:"1",version:"DICOM/DICONDE"},"(0014,2016)":{tag:"(0014,2016)",vr:"SH",name:"IndicationLabel",vm:"1",version:"DICOM/DICONDE"},"(0014,2018)":{tag:"(0014,2018)",vr:"ST",name:"IndicationDescription",vm:"1",version:"DICOM/DICONDE"},"(0014,201A)":{tag:"(0014,201A)",vr:"CS",name:"IndicationType",vm:"1-n",version:"DICOM/DICONDE"},"(0014,201C)":{tag:"(0014,201C)",vr:"CS",name:"IndicationDisposition",vm:"1",version:"DICOM/DICONDE"},"(0014,201E)":{tag:"(0014,201E)",vr:"SQ",name:"IndicationROISequence",vm:"1",version:"DICOM/DICONDE"},"(0014,2030)":{tag:"(0014,2030)",vr:"SQ",name:"IndicationPhysicalPropertySequence",vm:"1",version:"DICOM/DICONDE"},"(0014,2032)":{tag:"(0014,2032)",vr:"SH",name:"PropertyLabel",vm:"1",version:"DICOM/DICONDE"},"(0014,2202)":{tag:"(0014,2202)",vr:"IS",name:"CoordinateSystemNumberOfAxes",vm:"1",version:"DICOM/DICONDE"},"(0014,2204)":{tag:"(0014,2204)",vr:"SQ",name:"CoordinateSystemAxesSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,2206)":{tag:"(0014,2206)",vr:"ST",name:"CoordinateSystemAxisDescription",vm:"1",version:"DICOM/DICONDE"},"(0014,2208)":{tag:"(0014,2208)",vr:"CS",name:"CoordinateSystemDataSetMapping",vm:"1",version:"DICOM/DICONDE"},"(0014,220A)":{tag:"(0014,220A)",vr:"IS",name:"CoordinateSystemAxisNumber",vm:"1",version:"DICOM/DICONDE"},"(0014,220C)":{tag:"(0014,220C)",vr:"CS",name:"CoordinateSystemAxisType",vm:"1",version:"DICOM/DICONDE"},"(0014,220E)":{tag:"(0014,220E)",vr:"CS",name:"CoordinateSystemAxisUnits",vm:"1",version:"DICOM/DICONDE"},"(0014,2210)":{tag:"(0014,2210)",vr:"OB",name:"CoordinateSystemAxisValues",vm:"1",version:"DICOM/DICONDE"},"(0014,2220)":{tag:"(0014,2220)",vr:"SQ",name:"CoordinateSystemTransformSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,2222)":{tag:"(0014,2222)",vr:"ST",name:"TransformDescription",vm:"1",version:"DICOM/DICONDE"},"(0014,2224)":{tag:"(0014,2224)",vr:"IS",name:"TransformNumberOfAxes",vm:"1",version:"DICOM/DICONDE"},"(0014,2226)":{tag:"(0014,2226)",vr:"IS",name:"TransformOrderOfAxes",vm:"1-n",version:"DICOM/DICONDE"},"(0014,2228)":{tag:"(0014,2228)",vr:"CS",name:"TransformedAxisUnits",vm:"1",version:"DICOM/DICONDE"},"(0014,222A)":{tag:"(0014,222A)",vr:"DS",name:"CoordinateSystemTransformRotationAndScaleMatrix",vm:"1-n",version:"DICOM/DICONDE"},"(0014,222C)":{tag:"(0014,222C)",vr:"DS",name:"CoordinateSystemTransformTranslationMatrix",vm:"1-n",version:"DICOM/DICONDE"},"(0014,3011)":{tag:"(0014,3011)",vr:"DS",name:"InternalDetectorFrameTime",vm:"1",version:"DICOM/DICONDE"},"(0014,3012)":{tag:"(0014,3012)",vr:"DS",name:"NumberOfFramesIntegrated",vm:"1",version:"DICOM/DICONDE"},"(0014,3020)":{tag:"(0014,3020)",vr:"SQ",name:"DetectorTemperatureSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,3022)":{tag:"(0014,3022)",vr:"ST",name:"SensorName",vm:"1",version:"DICOM/DICONDE"},"(0014,3024)":{tag:"(0014,3024)",vr:"DS",name:"HorizontalOffsetOfSensor",vm:"1",version:"DICOM/DICONDE"},"(0014,3026)":{tag:"(0014,3026)",vr:"DS",name:"VerticalOffsetOfSensor",vm:"1",version:"DICOM/DICONDE"},"(0014,3028)":{tag:"(0014,3028)",vr:"DS",name:"SensorTemperature",vm:"1",version:"DICOM/DICONDE"},"(0014,3040)":{tag:"(0014,3040)",vr:"SQ",name:"DarkCurrentSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,3050)":{tag:"(0014,3050)",vr:"ox",name:"DarkCurrentCounts",vm:"1",version:"DICOM/DICONDE"},"(0014,3060)":{tag:"(0014,3060)",vr:"SQ",name:"GainCorrectionReferenceSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,3070)":{tag:"(0014,3070)",vr:"ox",name:"AirCounts",vm:"1",version:"DICOM/DICONDE"},"(0014,3071)":{tag:"(0014,3071)",vr:"DS",name:"KVUsedInGainCalibration",vm:"1",version:"DICOM/DICONDE"},"(0014,3072)":{tag:"(0014,3072)",vr:"DS",name:"MAUsedInGainCalibration",vm:"1",version:"DICOM/DICONDE"},"(0014,3073)":{tag:"(0014,3073)",vr:"DS",name:"NumberOfFramesUsedForIntegration",vm:"1",version:"DICOM/DICONDE"},"(0014,3074)":{tag:"(0014,3074)",vr:"LO",name:"FilterMaterialUsedInGainCalibration",vm:"1",version:"DICOM/DICONDE"},"(0014,3075)":{tag:"(0014,3075)",vr:"DS",name:"FilterThicknessUsedInGainCalibration",vm:"1",version:"DICOM/DICONDE"},"(0014,3076)":{tag:"(0014,3076)",vr:"DA",name:"DateOfGainCalibration",vm:"1",version:"DICOM/DICONDE"},"(0014,3077)":{tag:"(0014,3077)",vr:"TM",name:"TimeOfGainCalibration",vm:"1",version:"DICOM/DICONDE"},"(0014,3080)":{tag:"(0014,3080)",vr:"OB",name:"BadPixelImage",vm:"1",version:"DICOM/DICONDE"},"(0014,3099)":{tag:"(0014,3099)",vr:"LT",name:"CalibrationNotes",vm:"1",version:"DICOM/DICONDE"},"(0014,4002)":{tag:"(0014,4002)",vr:"SQ",name:"PulserEquipmentSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4004)":{tag:"(0014,4004)",vr:"CS",name:"PulserType",vm:"1",version:"DICOM/DICONDE"},"(0014,4006)":{tag:"(0014,4006)",vr:"LT",name:"PulserNotes",vm:"1",version:"DICOM/DICONDE"},"(0014,4008)":{tag:"(0014,4008)",vr:"SQ",name:"ReceiverEquipmentSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,400A)":{tag:"(0014,400A)",vr:"CS",name:"AmplifierType",vm:"1",version:"DICOM/DICONDE"},"(0014,400C)":{tag:"(0014,400C)",vr:"LT",name:"ReceiverNotes",vm:"1",version:"DICOM/DICONDE"},"(0014,400E)":{tag:"(0014,400E)",vr:"SQ",name:"PreAmplifierEquipmentSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,400F)":{tag:"(0014,400F)",vr:"LT",name:"PreAmplifierNotes",vm:"1",version:"DICOM/DICONDE"},"(0014,4010)":{tag:"(0014,4010)",vr:"SQ",name:"TransmitTransducerSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4011)":{tag:"(0014,4011)",vr:"SQ",name:"ReceiveTransducerSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4012)":{tag:"(0014,4012)",vr:"US",name:"NumberOfElements",vm:"1",version:"DICOM/DICONDE"},"(0014,4013)":{tag:"(0014,4013)",vr:"CS",name:"ElementShape",vm:"1",version:"DICOM/DICONDE"},"(0014,4014)":{tag:"(0014,4014)",vr:"DS",name:"ElementDimensionA",vm:"1",version:"DICOM/DICONDE"},"(0014,4015)":{tag:"(0014,4015)",vr:"DS",name:"ElementDimensionB",vm:"1",version:"DICOM/DICONDE"},"(0014,4016)":{tag:"(0014,4016)",vr:"DS",name:"ElementPitchA",vm:"1",version:"DICOM/DICONDE"},"(0014,4017)":{tag:"(0014,4017)",vr:"DS",name:"MeasuredBeamDimensionA",vm:"1",version:"DICOM/DICONDE"},"(0014,4018)":{tag:"(0014,4018)",vr:"DS",name:"MeasuredBeamDimensionB",vm:"1",version:"DICOM/DICONDE"},"(0014,4019)":{tag:"(0014,4019)",vr:"DS",name:"LocationOfMeasuredBeamDiameter",vm:"1",version:"DICOM/DICONDE"},"(0014,401A)":{tag:"(0014,401A)",vr:"DS",name:"NominalFrequency",vm:"1",version:"DICOM/DICONDE"},"(0014,401B)":{tag:"(0014,401B)",vr:"DS",name:"MeasuredCenterFrequency",vm:"1",version:"DICOM/DICONDE"},"(0014,401C)":{tag:"(0014,401C)",vr:"DS",name:"MeasuredBandwidth",vm:"1",version:"DICOM/DICONDE"},"(0014,401D)":{tag:"(0014,401D)",vr:"DS",name:"ElementPitchB",vm:"1",version:"DICOM/DICONDE"},"(0014,4020)":{tag:"(0014,4020)",vr:"SQ",name:"PulserSettingsSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4022)":{tag:"(0014,4022)",vr:"DS",name:"PulseWidth",vm:"1",version:"DICOM/DICONDE"},"(0014,4024)":{tag:"(0014,4024)",vr:"DS",name:"ExcitationFrequency",vm:"1",version:"DICOM/DICONDE"},"(0014,4026)":{tag:"(0014,4026)",vr:"CS",name:"ModulationType",vm:"1",version:"DICOM/DICONDE"},"(0014,4028)":{tag:"(0014,4028)",vr:"DS",name:"Damping",vm:"1",version:"DICOM/DICONDE"},"(0014,4030)":{tag:"(0014,4030)",vr:"SQ",name:"ReceiverSettingsSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4031)":{tag:"(0014,4031)",vr:"DS",name:"AcquiredSoundpathLength",vm:"1",version:"DICOM/DICONDE"},"(0014,4032)":{tag:"(0014,4032)",vr:"CS",name:"AcquisitionCompressionType",vm:"1",version:"DICOM/DICONDE"},"(0014,4033)":{tag:"(0014,4033)",vr:"IS",name:"AcquisitionSampleSize",vm:"1",version:"DICOM/DICONDE"},"(0014,4034)":{tag:"(0014,4034)",vr:"DS",name:"RectifierSmoothing",vm:"1",version:"DICOM/DICONDE"},"(0014,4035)":{tag:"(0014,4035)",vr:"SQ",name:"DACSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4036)":{tag:"(0014,4036)",vr:"CS",name:"DACType",vm:"1",version:"DICOM/DICONDE"},"(0014,4038)":{tag:"(0014,4038)",vr:"DS",name:"DACGainPoints",vm:"1-n",version:"DICOM/DICONDE"},"(0014,403A)":{tag:"(0014,403A)",vr:"DS",name:"DACTimePoints",vm:"1-n",version:"DICOM/DICONDE"},"(0014,403C)":{tag:"(0014,403C)",vr:"DS",name:"DACAmplitude",vm:"1-n",version:"DICOM/DICONDE"},"(0014,4040)":{tag:"(0014,4040)",vr:"SQ",name:"PreAmplifierSettingsSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4050)":{tag:"(0014,4050)",vr:"SQ",name:"TransmitTransducerSettingsSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4051)":{tag:"(0014,4051)",vr:"SQ",name:"ReceiveTransducerSettingsSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4052)":{tag:"(0014,4052)",vr:"DS",name:"IncidentAngle",vm:"1",version:"DICOM/DICONDE"},"(0014,4054)":{tag:"(0014,4054)",vr:"ST",name:"CouplingTechnique",vm:"1",version:"DICOM/DICONDE"},"(0014,4056)":{tag:"(0014,4056)",vr:"ST",name:"CouplingMedium",vm:"1",version:"DICOM/DICONDE"},"(0014,4057)":{tag:"(0014,4057)",vr:"DS",name:"CouplingVelocity",vm:"1",version:"DICOM/DICONDE"},"(0014,4058)":{tag:"(0014,4058)",vr:"DS",name:"ProbeCenterLocationX",vm:"1",version:"DICOM/DICONDE"},"(0014,4059)":{tag:"(0014,4059)",vr:"DS",name:"ProbeCenterLocationZ",vm:"1",version:"DICOM/DICONDE"},"(0014,405A)":{tag:"(0014,405A)",vr:"DS",name:"SoundPathLength",vm:"1",version:"DICOM/DICONDE"},"(0014,405C)":{tag:"(0014,405C)",vr:"ST",name:"DelayLawIdentifier",vm:"1",version:"DICOM/DICONDE"},"(0014,4060)":{tag:"(0014,4060)",vr:"SQ",name:"GateSettingsSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4062)":{tag:"(0014,4062)",vr:"DS",name:"GateThreshold",vm:"1",version:"DICOM/DICONDE"},"(0014,4064)":{tag:"(0014,4064)",vr:"DS",name:"VelocityOfSound",vm:"1",version:"DICOM/DICONDE"},"(0014,4070)":{tag:"(0014,4070)",vr:"SQ",name:"CalibrationSettingsSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4072)":{tag:"(0014,4072)",vr:"ST",name:"CalibrationProcedure",vm:"1",version:"DICOM/DICONDE"},"(0014,4074)":{tag:"(0014,4074)",vr:"SH",name:"ProcedureVersion",vm:"1",version:"DICOM/DICONDE"},"(0014,4076)":{tag:"(0014,4076)",vr:"DA",name:"ProcedureCreationDate",vm:"1",version:"DICOM/DICONDE"},"(0014,4078)":{tag:"(0014,4078)",vr:"DA",name:"ProcedureExpirationDate",vm:"1",version:"DICOM/DICONDE"},"(0014,407A)":{tag:"(0014,407A)",vr:"DA",name:"ProcedureLastModifiedDate",vm:"1",version:"DICOM/DICONDE"},"(0014,407C)":{tag:"(0014,407C)",vr:"TM",name:"CalibrationTime",vm:"1-n",version:"DICOM/DICONDE"},"(0014,407E)":{tag:"(0014,407E)",vr:"DA",name:"CalibrationDate",vm:"1-n",version:"DICOM/DICONDE"},"(0014,4080)":{tag:"(0014,4080)",vr:"SQ",name:"ProbeDriveEquipmentSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4081)":{tag:"(0014,4081)",vr:"CS",name:"DriveType",vm:"1",version:"DICOM/DICONDE"},"(0014,4082)":{tag:"(0014,4082)",vr:"LT",name:"ProbeDriveNotes",vm:"1",version:"DICOM/DICONDE"},"(0014,4083)":{tag:"(0014,4083)",vr:"SQ",name:"DriveProbeSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4084)":{tag:"(0014,4084)",vr:"DS",name:"ProbeInductance",vm:"1",version:"DICOM/DICONDE"},"(0014,4085)":{tag:"(0014,4085)",vr:"DS",name:"ProbeResistance",vm:"1",version:"DICOM/DICONDE"},"(0014,4086)":{tag:"(0014,4086)",vr:"SQ",name:"ReceiveProbeSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4087)":{tag:"(0014,4087)",vr:"SQ",name:"ProbeDriveSettingsSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4088)":{tag:"(0014,4088)",vr:"DS",name:"BridgeResistors",vm:"1",version:"DICOM/DICONDE"},"(0014,4089)":{tag:"(0014,4089)",vr:"DS",name:"ProbeOrientationAngle",vm:"1",version:"DICOM/DICONDE"},"(0014,408B)":{tag:"(0014,408B)",vr:"DS",name:"UserSelectedGainY",vm:"1",version:"DICOM/DICONDE"},"(0014,408C)":{tag:"(0014,408C)",vr:"DS",name:"UserSelectedPhase",vm:"1",version:"DICOM/DICONDE"},"(0014,408D)":{tag:"(0014,408D)",vr:"DS",name:"UserSelectedOffsetX",vm:"1",version:"DICOM/DICONDE"},"(0014,408E)":{tag:"(0014,408E)",vr:"DS",name:"UserSelectedOffsetY",vm:"1",version:"DICOM/DICONDE"},"(0014,4091)":{tag:"(0014,4091)",vr:"SQ",name:"ChannelSettingsSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4092)":{tag:"(0014,4092)",vr:"DS",name:"ChannelThreshold",vm:"1",version:"DICOM/DICONDE"},"(0014,409A)":{tag:"(0014,409A)",vr:"SQ",name:"ScannerSettingsSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,409B)":{tag:"(0014,409B)",vr:"ST",name:"ScanProcedure",vm:"1",version:"DICOM/DICONDE"},"(0014,409C)":{tag:"(0014,409C)",vr:"DS",name:"TranslationRateX",vm:"1",version:"DICOM/DICONDE"},"(0014,409D)":{tag:"(0014,409D)",vr:"DS",name:"TranslationRateY",vm:"1",version:"DICOM/DICONDE"},"(0014,409F)":{tag:"(0014,409F)",vr:"DS",name:"ChannelOverlap",vm:"1",version:"DICOM/DICONDE"},"(0014,40A0)":{tag:"(0014,40A0)",vr:"LO",name:"ImageQualityIndicatorType",vm:"1",version:"DICOM/DICONDE"},"(0014,40A1)":{tag:"(0014,40A1)",vr:"LO",name:"ImageQualityIndicatorMaterial",vm:"1",version:"DICOM/DICONDE"},"(0014,40A2)":{tag:"(0014,40A2)",vr:"LO",name:"ImageQualityIndicatorSize",vm:"1",version:"DICOM/DICONDE"},"(0014,5002)":{tag:"(0014,5002)",vr:"IS",name:"LINACEnergy",vm:"1",version:"DICOM/DICONDE"},"(0014,5004)":{tag:"(0014,5004)",vr:"IS",name:"LINACOutput",vm:"1",version:"DICOM/DICONDE"},"(0014,5100)":{tag:"(0014,5100)",vr:"US",name:"ActiveAperture",vm:"1",version:"DICOM/DICONDE"},"(0014,5101)":{tag:"(0014,5101)",vr:"DS",name:"TotalAperture",vm:"1",version:"DICOM/DICONDE"},"(0014,5102)":{tag:"(0014,5102)",vr:"DS",name:"ApertureElevation",vm:"1",version:"DICOM/DICONDE"},"(0014,5103)":{tag:"(0014,5103)",vr:"DS",name:"MainLobeAngle",vm:"1",version:"DICOM/DICONDE"},"(0014,5104)":{tag:"(0014,5104)",vr:"DS",name:"MainRoofAngle",vm:"1",version:"DICOM/DICONDE"},"(0014,5105)":{tag:"(0014,5105)",vr:"CS",name:"ConnectorType",vm:"1",version:"DICOM/DICONDE"},"(0014,5106)":{tag:"(0014,5106)",vr:"SH",name:"WedgeModelNumber",vm:"1",version:"DICOM/DICONDE"},"(0014,5107)":{tag:"(0014,5107)",vr:"DS",name:"WedgeAngleFloat",vm:"1",version:"DICOM/DICONDE"},"(0014,5108)":{tag:"(0014,5108)",vr:"DS",name:"WedgeRoofAngle",vm:"1",version:"DICOM/DICONDE"},"(0014,5109)":{tag:"(0014,5109)",vr:"CS",name:"WedgeElement1Position",vm:"1",version:"DICOM/DICONDE"},"(0014,510A)":{tag:"(0014,510A)",vr:"DS",name:"WedgeMaterialVelocity",vm:"1",version:"DICOM/DICONDE"},"(0014,510B)":{tag:"(0014,510B)",vr:"SH",name:"WedgeMaterial",vm:"1",version:"DICOM/DICONDE"},"(0014,510C)":{tag:"(0014,510C)",vr:"DS",name:"WedgeOffsetZ",vm:"1",version:"DICOM/DICONDE"},"(0014,510D)":{tag:"(0014,510D)",vr:"DS",name:"WedgeOriginOffsetX",vm:"1",version:"DICOM/DICONDE"},"(0014,510E)":{tag:"(0014,510E)",vr:"DS",name:"WedgeTimeDelay",vm:"1",version:"DICOM/DICONDE"},"(0014,510F)":{tag:"(0014,510F)",vr:"SH",name:"WedgeName",vm:"1",version:"DICOM/DICONDE"},"(0014,5110)":{tag:"(0014,5110)",vr:"SH",name:"WedgeManufacturerName",vm:"1",version:"DICOM/DICONDE"},"(0014,5111)":{tag:"(0014,5111)",vr:"LO",name:"WedgeDescription",vm:"1",version:"DICOM/DICONDE"},"(0014,5112)":{tag:"(0014,5112)",vr:"DS",name:"NominalBeamAngle",vm:"1",version:"DICOM/DICONDE"},"(0014,5113)":{tag:"(0014,5113)",vr:"DS",name:"WedgeOffsetX",vm:"1",version:"DICOM/DICONDE"},"(0014,5114)":{tag:"(0014,5114)",vr:"DS",name:"WedgeOffsetY",vm:"1",version:"DICOM/DICONDE"},"(0014,5115)":{tag:"(0014,5115)",vr:"DS",name:"WedgeTotalLength",vm:"1",version:"DICOM/DICONDE"},"(0014,5116)":{tag:"(0014,5116)",vr:"DS",name:"WedgeInContactLength",vm:"1",version:"DICOM/DICONDE"},"(0014,5117)":{tag:"(0014,5117)",vr:"DS",name:"WedgeFrontGap",vm:"1",version:"DICOM/DICONDE"},"(0014,5118)":{tag:"(0014,5118)",vr:"DS",name:"WedgeTotalHeight",vm:"1",version:"DICOM/DICONDE"},"(0014,5119)":{tag:"(0014,5119)",vr:"DS",name:"WedgeFrontHeight",vm:"1",version:"DICOM/DICONDE"},"(0014,511A)":{tag:"(0014,511A)",vr:"DS",name:"WedgeRearHeight",vm:"1",version:"DICOM/DICONDE"},"(0014,511B)":{tag:"(0014,511B)",vr:"DS",name:"WedgeTotalWidth",vm:"1",version:"DICOM/DICONDE"},"(0014,511C)":{tag:"(0014,511C)",vr:"DS",name:"WedgeInContactWidth",vm:"1",version:"DICOM/DICONDE"},"(0014,511D)":{tag:"(0014,511D)",vr:"DS",name:"WedgeChamferHeight",vm:"1",version:"DICOM/DICONDE"},"(0014,511E)":{tag:"(0014,511E)",vr:"CS",name:"WedgeCurve",vm:"1",version:"DICOM/DICONDE"},"(0014,511F)":{tag:"(0014,511F)",vr:"DS",name:"RadiusAlongWedge",vm:"1",version:"DICOM/DICONDE"},"(0012,0086)":{tag:"(0012,0086)",vr:"DA",name:"EthicsCommitteeApprovalEffectivenessStartDate",vm:"1",version:"DICOM"},"(0012,0087)":{tag:"(0012,0087)",vr:"DA",name:"EthicsCommitteeApprovalEffectivenessEndDate",vm:"1",version:"DICOM"},"(0014,0100)":{tag:"(0014,0100)",vr:"LO",name:"ComponentWelderIDs",vm:"1-n",version:"DICOM"},"(0014,0101)":{tag:"(0014,0101)",vr:"CS",name:"SecondaryApprovalStatus",vm:"1",version:"DICOM"},"(0014,0102)":{tag:"(0014,0102)",vr:"DA",name:"SecondaryReviewDate",vm:"1",version:"DICOM"},"(0014,0103)":{tag:"(0014,0103)",vr:"TM",name:"SecondaryReviewTime",vm:"1",version:"DICOM"},"(0014,0104)":{tag:"(0014,0104)",vr:"PN",name:"SecondaryReviewerName",vm:"1",version:"DICOM"},"(0014,0105)":{tag:"(0014,0105)",vr:"ST",name:"RepairID",vm:"1",version:"DICOM"},"(0014,0106)":{tag:"(0014,0106)",vr:"SQ",name:"MultipleComponentApprovalSequence",vm:"1",version:"DICOM"},"(0014,0107)":{tag:"(0014,0107)",vr:"CS",name:"OtherApprovalStatus",vm:"1-n",version:"DICOM"},"(0014,0108)":{tag:"(0014,0108)",vr:"CS",name:"OtherSecondaryApprovalStatus",vm:"1-n",version:"DICOM"},"(0016,0001)":{tag:"(0016,0001)",vr:"DS",name:"WhitePoint",vm:"1",version:"DICOM"},"(0016,0002)":{tag:"(0016,0002)",vr:"DS",name:"PrimaryChromaticities",vm:"3",version:"DICOM"},"(0016,0003)":{tag:"(0016,0003)",vr:"UT",name:"BatteryLevel",vm:"1",version:"DICOM"},"(0016,0004)":{tag:"(0016,0004)",vr:"DS",name:"ExposureTimeInSeconds",vm:"1",version:"DICOM"},"(0016,0005)":{tag:"(0016,0005)",vr:"DS",name:"FNumber",vm:"1",version:"DICOM"},"(0016,0006)":{tag:"(0016,0006)",vr:"IS",name:"OECFRows",vm:"1",version:"DICOM"},"(0016,0007)":{tag:"(0016,0007)",vr:"IS",name:"OECFColumns",vm:"1",version:"DICOM"},"(0016,0008)":{tag:"(0016,0008)",vr:"UC",name:"OECFColumnNames",vm:"1-n",version:"DICOM"},"(0016,0009)":{tag:"(0016,0009)",vr:"DS",name:"OECFValues",vm:"1-n",version:"DICOM"},"(0016,000A)":{tag:"(0016,000A)",vr:"IS",name:"SpatialFrequencyResponseRows",vm:"1",version:"DICOM"},"(0016,000B)":{tag:"(0016,000B)",vr:"IS",name:"SpatialFrequencyResponseColumns",vm:"1",version:"DICOM"},"(0016,000C)":{tag:"(0016,000C)",vr:"UC",name:"SpatialFrequencyResponseColumnNames",vm:"1-n",version:"DICOM"},"(0016,000D)":{tag:"(0016,000D)",vr:"DS",name:"SpatialFrequencyResponseValues",vm:"1-n",version:"DICOM"},"(0016,000E)":{tag:"(0016,000E)",vr:"IS",name:"ColorFilterArrayPatternRows",vm:"1",version:"DICOM"},"(0016,000F)":{tag:"(0016,000F)",vr:"IS",name:"ColorFilterArrayPatternColumns",vm:"1",version:"DICOM"},"(0016,0010)":{tag:"(0016,0010)",vr:"DS",name:"ColorFilterArrayPatternValues",vm:"1-n",version:"DICOM"},"(0016,0011)":{tag:"(0016,0011)",vr:"US",name:"FlashFiringStatus",vm:"1",version:"DICOM"},"(0016,0012)":{tag:"(0016,0012)",vr:"US",name:"FlashReturnStatus",vm:"1",version:"DICOM"},"(0016,0013)":{tag:"(0016,0013)",vr:"US",name:"FlashMode",vm:"1",version:"DICOM"},"(0016,0014)":{tag:"(0016,0014)",vr:"US",name:"FlashFunctionPresent",vm:"1",version:"DICOM"},"(0016,0015)":{tag:"(0016,0015)",vr:"US",name:"FlashRedEyeMode",vm:"1",version:"DICOM"},"(0016,0016)":{tag:"(0016,0016)",vr:"US",name:"ExposureProgram",vm:"1",version:"DICOM"},"(0016,0017)":{tag:"(0016,0017)",vr:"UT",name:"SpectralSensitivity",vm:"1",version:"DICOM"},"(0016,0018)":{tag:"(0016,0018)",vr:"IS",name:"PhotographicSensitivity",vm:"1",version:"DICOM"},"(0016,0019)":{tag:"(0016,0019)",vr:"IS",name:"SelfTimerMode",vm:"1",version:"DICOM"},"(0016,001A)":{tag:"(0016,001A)",vr:"US",name:"SensitivityType",vm:"1",version:"DICOM"},"(0016,001B)":{tag:"(0016,001B)",vr:"IS",name:"StandardOutputSensitivity",vm:"1",version:"DICOM"},"(0016,001C)":{tag:"(0016,001C)",vr:"IS",name:"RecommendedExposureIndex",vm:"1",version:"DICOM"},"(0016,001D)":{tag:"(0016,001D)",vr:"IS",name:"ISOSpeed",vm:"1",version:"DICOM"},"(0016,001E)":{tag:"(0016,001E)",vr:"IS",name:"ISOSpeedLatitudeyyy",vm:"1",version:"DICOM"},"(0016,001F)":{tag:"(0016,001F)",vr:"IS",name:"ISOSpeedLatitudezzz",vm:"1",version:"DICOM"},"(0016,0020)":{tag:"(0016,0020)",vr:"UT",name:"EXIFVersion",vm:"1",version:"DICOM"},"(0016,0021)":{tag:"(0016,0021)",vr:"DS",name:"ShutterSpeedValue",vm:"1",version:"DICOM"},"(0016,0022)":{tag:"(0016,0022)",vr:"DS",name:"ApertureValue",vm:"1",version:"DICOM"},"(0016,0023)":{tag:"(0016,0023)",vr:"DS",name:"BrightnessValue",vm:"1",version:"DICOM"},"(0016,0024)":{tag:"(0016,0024)",vr:"DS",name:"ExposureBiasValue",vm:"1",version:"DICOM"},"(0016,0025)":{tag:"(0016,0025)",vr:"DS",name:"MaxApertureValue",vm:"1",version:"DICOM"},"(0016,0026)":{tag:"(0016,0026)",vr:"DS",name:"SubjectDistance",vm:"1",version:"DICOM"},"(0016,0027)":{tag:"(0016,0027)",vr:"US",name:"MeteringMode",vm:"1",version:"DICOM"},"(0016,0028)":{tag:"(0016,0028)",vr:"US",name:"LightSource",vm:"1",version:"DICOM"},"(0016,0029)":{tag:"(0016,0029)",vr:"DS",name:"FocalLength",vm:"1",version:"DICOM"},"(0016,002A)":{tag:"(0016,002A)",vr:"IS",name:"SubjectArea",vm:"2-4",version:"DICOM"},"(0016,002B)":{tag:"(0016,002B)",vr:"OB",name:"MakerNote",vm:"1",version:"DICOM"},"(0016,0030)":{tag:"(0016,0030)",vr:"DS",name:"Temperature",vm:"1",version:"DICOM"},"(0016,0031)":{tag:"(0016,0031)",vr:"DS",name:"Humidity",vm:"1",version:"DICOM"},"(0016,0032)":{tag:"(0016,0032)",vr:"DS",name:"Pressure",vm:"1",version:"DICOM"},"(0016,0033)":{tag:"(0016,0033)",vr:"DS",name:"WaterDepth",vm:"1",version:"DICOM"},"(0016,0034)":{tag:"(0016,0034)",vr:"DS",name:"Acceleration",vm:"1",version:"DICOM"},"(0016,0035)":{tag:"(0016,0035)",vr:"DS",name:"CameraElevationAngle",vm:"1",version:"DICOM"},"(0016,0036)":{tag:"(0016,0036)",vr:"DS",name:"FlashEnergy",vm:"1-2",version:"DICOM"},"(0016,0037)":{tag:"(0016,0037)",vr:"IS",name:"SubjectLocation",vm:"2",version:"DICOM"},"(0016,0038)":{tag:"(0016,0038)",vr:"DS",name:"PhotographicExposureIndex",vm:"1",version:"DICOM"},"(0016,0039)":{tag:"(0016,0039)",vr:"US",name:"SensingMethod",vm:"1",version:"DICOM"},"(0016,003A)":{tag:"(0016,003A)",vr:"US",name:"FileSource",vm:"1",version:"DICOM"},"(0016,003B)":{tag:"(0016,003B)",vr:"US",name:"SceneType",vm:"1",version:"DICOM"},"(0016,0041)":{tag:"(0016,0041)",vr:"US",name:"CustomRendered",vm:"1",version:"DICOM"},"(0016,0042)":{tag:"(0016,0042)",vr:"US",name:"ExposureMode",vm:"1",version:"DICOM"},"(0016,0043)":{tag:"(0016,0043)",vr:"US",name:"WhiteBalance",vm:"1",version:"DICOM"},"(0016,0044)":{tag:"(0016,0044)",vr:"DS",name:"DigitalZoomRatio",vm:"1",version:"DICOM"},"(0016,0045)":{tag:"(0016,0045)",vr:"IS",name:"FocalLengthIn35mmFilm",vm:"1",version:"DICOM"},"(0016,0046)":{tag:"(0016,0046)",vr:"US",name:"SceneCaptureType",vm:"1",version:"DICOM"},"(0016,0047)":{tag:"(0016,0047)",vr:"US",name:"GainControl",vm:"1",version:"DICOM"},"(0016,0048)":{tag:"(0016,0048)",vr:"US",name:"Contrast",vm:"1",version:"DICOM"},"(0016,0049)":{tag:"(0016,0049)",vr:"US",name:"Saturation",vm:"1",version:"DICOM"},"(0016,004A)":{tag:"(0016,004A)",vr:"US",name:"Sharpness",vm:"1",version:"DICOM"},"(0016,004B)":{tag:"(0016,004B)",vr:"OB",name:"DeviceSettingDescription",vm:"1",version:"DICOM"},"(0016,004C)":{tag:"(0016,004C)",vr:"US",name:"SubjectDistanceRange",vm:"1",version:"DICOM"},"(0016,004D)":{tag:"(0016,004D)",vr:"UT",name:"CameraOwnerName",vm:"1",version:"DICOM"},"(0016,004E)":{tag:"(0016,004E)",vr:"DS",name:"LensSpecification",vm:"4",version:"DICOM"},"(0016,004F)":{tag:"(0016,004F)",vr:"UT",name:"LensMake",vm:"1",version:"DICOM"},"(0016,0050)":{tag:"(0016,0050)",vr:"UT",name:"LensModel",vm:"1",version:"DICOM"},"(0016,0051)":{tag:"(0016,0051)",vr:"UT",name:"LensSerialNumber",vm:"1",version:"DICOM"},"(0016,0061)":{tag:"(0016,0061)",vr:"CS",name:"InteroperabilityIndex",vm:"1",version:"DICOM"},"(0016,0062)":{tag:"(0016,0062)",vr:"OB",name:"InteroperabilityVersion",vm:"1",version:"DICOM"},"(0016,0070)":{tag:"(0016,0070)",vr:"OB",name:"GPSVersionID",vm:"1",version:"DICOM"},"(0016,0071)":{tag:"(0016,0071)",vr:"CS",name:"GPSLatitudeRef",vm:"1",version:"DICOM"},"(0016,0072)":{tag:"(0016,0072)",vr:"DS",name:"GPSLatitude",vm:"3",version:"DICOM"},"(0016,0073)":{tag:"(0016,0073)",vr:"CS",name:"GPSLongitudeRef",vm:"1",version:"DICOM"},"(0016,0074)":{tag:"(0016,0074)",vr:"DS",name:"GPSLongitude",vm:"3",version:"DICOM"},"(0016,0075)":{tag:"(0016,0075)",vr:"US",name:"GPSAltitudeRef",vm:"1",version:"DICOM"},"(0016,0076)":{tag:"(0016,0076)",vr:"DS",name:"GPSAltitude",vm:"1",version:"DICOM"},"(0016,0077)":{tag:"(0016,0077)",vr:"DT",name:"GPSTimeStamp",vm:"1",version:"DICOM"},"(0016,0078)":{tag:"(0016,0078)",vr:"UT",name:"GPSSatellites",vm:"1",version:"DICOM"},"(0016,0079)":{tag:"(0016,0079)",vr:"CS",name:"GPSStatus",vm:"1",version:"DICOM"},"(0016,007A)":{tag:"(0016,007A)",vr:"CS",name:"GPSMeasureMode",vm:"1",version:"DICOM"},"(0016,007B)":{tag:"(0016,007B)",vr:"DS",name:"GPSDOP",vm:"1",version:"DICOM"},"(0016,007C)":{tag:"(0016,007C)",vr:"CS",name:"GPSSpeedRef",vm:"1",version:"DICOM"},"(0016,007D)":{tag:"(0016,007D)",vr:"DS",name:"GPSSpeed",vm:"1",version:"DICOM"},"(0016,007E)":{tag:"(0016,007E)",vr:"CS",name:"GPSTrackRef",vm:"1",version:"DICOM"},"(0016,007F)":{tag:"(0016,007F)",vr:"DS",name:"GPSTrack",vm:"1",version:"DICOM"},"(0016,0080)":{tag:"(0016,0080)",vr:"CS",name:"GPSImgDirectionRef",vm:"1",version:"DICOM"},"(0016,0081)":{tag:"(0016,0081)",vr:"DS",name:"GPSImgDirection",vm:"1",version:"DICOM"},"(0016,0082)":{tag:"(0016,0082)",vr:"UT",name:"GPSMapDatum",vm:"1",version:"DICOM"},"(0016,0083)":{tag:"(0016,0083)",vr:"CS",name:"GPSDestLatitudeRef",vm:"1",version:"DICOM"},"(0016,0084)":{tag:"(0016,0084)",vr:"DS",name:"GPSDestLatitude",vm:"3",version:"DICOM"},"(0016,0085)":{tag:"(0016,0085)",vr:"CS",name:"GPSDestLongitudeRef",vm:"1",version:"DICOM"},"(0016,0086)":{tag:"(0016,0086)",vr:"DS",name:"GPSDestLongitude",vm:"3",version:"DICOM"},"(0016,0087)":{tag:"(0016,0087)",vr:"CS",name:"GPSDestBearingRef",vm:"1",version:"DICOM"},"(0016,0088)":{tag:"(0016,0088)",vr:"DS",name:"GPSDestBearing",vm:"1",version:"DICOM"},"(0016,0089)":{tag:"(0016,0089)",vr:"CS",name:"GPSDestDistanceRef",vm:"1",version:"DICOM"},"(0016,008A)":{tag:"(0016,008A)",vr:"DS",name:"GPSDestDistance",vm:"1",version:"DICOM"},"(0016,008B)":{tag:"(0016,008B)",vr:"OB",name:"GPSProcessingMethod",vm:"1",version:"DICOM"},"(0016,008C)":{tag:"(0016,008C)",vr:"OB",name:"GPSAreaInformation",vm:"1",version:"DICOM"},"(0016,008D)":{tag:"(0016,008D)",vr:"DT",name:"GPSDateStamp",vm:"1",version:"DICOM"},"(0016,008E)":{tag:"(0016,008E)",vr:"IS",name:"GPSDifferential",vm:"1",version:"DICOM"},"(0016,1001)":{tag:"(0016,1001)",vr:"CS",name:"LightSourcePolarization",vm:"1",version:"DICOM"},"(0016,1002)":{tag:"(0016,1002)",vr:"DS",name:"EmitterColorTemperature",vm:"1",version:"DICOM"},"(0016,1003)":{tag:"(0016,1003)",vr:"CS",name:"ContactMethod",vm:"1",version:"DICOM"},"(0016,1004)":{tag:"(0016,1004)",vr:"CS",name:"ImmersionMedia",vm:"1-n",version:"DICOM"},"(0016,1005)":{tag:"(0016,1005)",vr:"DS",name:"OpticalMagnificationFactor",vm:"1",version:"DICOM"},"(0018,0010)":{tag:"(0018,0010)",vr:"LO",name:"ContrastBolusAgent",vm:"1",version:"DICOM"},"(0018,0012)":{tag:"(0018,0012)",vr:"SQ",name:"ContrastBolusAgentSequence",vm:"1",version:"DICOM"},"(0018,0013)":{tag:"(0018,0013)",vr:"FL",name:"ContrastBolusT1Relaxivity",vm:"1",version:"DICOM"},"(0018,0014)":{tag:"(0018,0014)",vr:"SQ",name:"ContrastBolusAdministrationRouteSequence",vm:"1",version:"DICOM"},"(0018,0015)":{tag:"(0018,0015)",vr:"CS",name:"BodyPartExamined",vm:"1",version:"DICOM"},"(0018,0020)":{tag:"(0018,0020)",vr:"CS",name:"ScanningSequence",vm:"1-n",version:"DICOM"},"(0018,0021)":{tag:"(0018,0021)",vr:"CS",name:"SequenceVariant",vm:"1-n",version:"DICOM"},"(0018,0022)":{tag:"(0018,0022)",vr:"CS",name:"ScanOptions",vm:"1-n",version:"DICOM"},"(0018,0023)":{tag:"(0018,0023)",vr:"CS",name:"MRAcquisitionType",vm:"1",version:"DICOM"},"(0018,0024)":{tag:"(0018,0024)",vr:"SH",name:"SequenceName",vm:"1",version:"DICOM"},"(0018,0025)":{tag:"(0018,0025)",vr:"CS",name:"AngioFlag",vm:"1",version:"DICOM"},"(0018,0026)":{tag:"(0018,0026)",vr:"SQ",name:"InterventionDrugInformationSequence",vm:"1",version:"DICOM"},"(0018,0027)":{tag:"(0018,0027)",vr:"TM",name:"InterventionDrugStopTime",vm:"1",version:"DICOM"},"(0018,0028)":{tag:"(0018,0028)",vr:"DS",name:"InterventionDrugDose",vm:"1",version:"DICOM"},"(0018,0029)":{tag:"(0018,0029)",vr:"SQ",name:"InterventionDrugCodeSequence",vm:"1",version:"DICOM"},"(0018,002A)":{tag:"(0018,002A)",vr:"SQ",name:"AdditionalDrugSequence",vm:"1",version:"DICOM"},"(0018,0031)":{tag:"(0018,0031)",vr:"LO",name:"Radiopharmaceutical",vm:"1",version:"DICOM"},"(0018,0034)":{tag:"(0018,0034)",vr:"LO",name:"InterventionDrugName",vm:"1",version:"DICOM"},"(0018,0035)":{tag:"(0018,0035)",vr:"TM",name:"InterventionDrugStartTime",vm:"1",version:"DICOM"},"(0018,0036)":{tag:"(0018,0036)",vr:"SQ",name:"InterventionSequence",vm:"1",version:"DICOM"},"(0018,0038)":{tag:"(0018,0038)",vr:"CS",name:"InterventionStatus",vm:"1",version:"DICOM"},"(0018,003A)":{tag:"(0018,003A)",vr:"ST",name:"InterventionDescription",vm:"1",version:"DICOM"},"(0018,0040)":{tag:"(0018,0040)",vr:"IS",name:"CineRate",vm:"1",version:"DICOM"},"(0018,0042)":{tag:"(0018,0042)",vr:"CS",name:"InitialCineRunState",vm:"1",version:"DICOM"},"(0018,0050)":{tag:"(0018,0050)",vr:"DS",name:"SliceThickness",vm:"1",version:"DICOM"},"(0018,0060)":{tag:"(0018,0060)",vr:"DS",name:"KVP",vm:"1",version:"DICOM"},"(0018,0070)":{tag:"(0018,0070)",vr:"IS",name:"CountsAccumulated",vm:"1",version:"DICOM"},"(0018,0071)":{tag:"(0018,0071)",vr:"CS",name:"AcquisitionTerminationCondition",vm:"1",version:"DICOM"},"(0018,0072)":{tag:"(0018,0072)",vr:"DS",name:"EffectiveDuration",vm:"1",version:"DICOM"},"(0018,0073)":{tag:"(0018,0073)",vr:"CS",name:"AcquisitionStartCondition",vm:"1",version:"DICOM"},"(0018,0074)":{tag:"(0018,0074)",vr:"IS",name:"AcquisitionStartConditionData",vm:"1",version:"DICOM"},"(0018,0075)":{tag:"(0018,0075)",vr:"IS",name:"AcquisitionTerminationConditionData",vm:"1",version:"DICOM"},"(0018,0080)":{tag:"(0018,0080)",vr:"DS",name:"RepetitionTime",vm:"1",version:"DICOM"},"(0018,0081)":{tag:"(0018,0081)",vr:"DS",name:"EchoTime",vm:"1",version:"DICOM"},"(0018,0082)":{tag:"(0018,0082)",vr:"DS",name:"InversionTime",vm:"1",version:"DICOM"},"(0018,0083)":{tag:"(0018,0083)",vr:"DS",name:"NumberOfAverages",vm:"1",version:"DICOM"},"(0018,0084)":{tag:"(0018,0084)",vr:"DS",name:"ImagingFrequency",vm:"1",version:"DICOM"},"(0018,0085)":{tag:"(0018,0085)",vr:"SH",name:"ImagedNucleus",vm:"1",version:"DICOM"},"(0018,0086)":{tag:"(0018,0086)",vr:"IS",name:"EchoNumbers",vm:"1-n",version:"DICOM"},"(0018,0087)":{tag:"(0018,0087)",vr:"DS",name:"MagneticFieldStrength",vm:"1",version:"DICOM"},"(0018,0088)":{tag:"(0018,0088)",vr:"DS",name:"SpacingBetweenSlices",vm:"1",version:"DICOM"},"(0018,0089)":{tag:"(0018,0089)",vr:"IS",name:"NumberOfPhaseEncodingSteps",vm:"1",version:"DICOM"},"(0018,0090)":{tag:"(0018,0090)",vr:"DS",name:"DataCollectionDiameter",vm:"1",version:"DICOM"},"(0018,0091)":{tag:"(0018,0091)",vr:"IS",name:"EchoTrainLength",vm:"1",version:"DICOM"},"(0018,0093)":{tag:"(0018,0093)",vr:"DS",name:"PercentSampling",vm:"1",version:"DICOM"},"(0018,0094)":{tag:"(0018,0094)",vr:"DS",name:"PercentPhaseFieldOfView",vm:"1",version:"DICOM"},"(0018,0095)":{tag:"(0018,0095)",vr:"DS",name:"PixelBandwidth",vm:"1",version:"DICOM"},"(0018,1000)":{tag:"(0018,1000)",vr:"LO",name:"DeviceSerialNumber",vm:"1",version:"DICOM"},"(0018,1002)":{tag:"(0018,1002)",vr:"UI",name:"DeviceUID",vm:"1",version:"DICOM"},"(0018,1003)":{tag:"(0018,1003)",vr:"LO",name:"DeviceID",vm:"1",version:"DICOM"},"(0018,1004)":{tag:"(0018,1004)",vr:"LO",name:"PlateID",vm:"1",version:"DICOM"},"(0018,1005)":{tag:"(0018,1005)",vr:"LO",name:"GeneratorID",vm:"1",version:"DICOM"},"(0018,1006)":{tag:"(0018,1006)",vr:"LO",name:"GridID",vm:"1",version:"DICOM"},"(0018,1007)":{tag:"(0018,1007)",vr:"LO",name:"CassetteID",vm:"1",version:"DICOM"},"(0018,1008)":{tag:"(0018,1008)",vr:"LO",name:"GantryID",vm:"1",version:"DICOM"},"(0018,1009)":{tag:"(0018,1009)",vr:"UT",name:"UniqueDeviceIdentifier",vm:"1",version:"DICOM"},"(0018,100A)":{tag:"(0018,100A)",vr:"SQ",name:"UDISequence",vm:"1",version:"DICOM"},"(0018,100B)":{tag:"(0018,100B)",vr:"UI",name:"ManufacturerDeviceClassUID",vm:"1-n",version:"DICOM"},"(0018,1010)":{tag:"(0018,1010)",vr:"LO",name:"SecondaryCaptureDeviceID",vm:"1",version:"DICOM"},"(0018,1012)":{tag:"(0018,1012)",vr:"DA",name:"DateOfSecondaryCapture",vm:"1",version:"DICOM"},"(0018,1014)":{tag:"(0018,1014)",vr:"TM",name:"TimeOfSecondaryCapture",vm:"1",version:"DICOM"},"(0018,1016)":{tag:"(0018,1016)",vr:"LO",name:"SecondaryCaptureDeviceManufacturer",vm:"1",version:"DICOM"},"(0018,1018)":{tag:"(0018,1018)",vr:"LO",name:"SecondaryCaptureDeviceManufacturerModelName",vm:"1",version:"DICOM"},"(0018,1019)":{tag:"(0018,1019)",vr:"LO",name:"SecondaryCaptureDeviceSoftwareVersions",vm:"1-n",version:"DICOM"},"(0018,1020)":{tag:"(0018,1020)",vr:"LO",name:"SoftwareVersions",vm:"1-n",version:"DICOM"},"(0018,1022)":{tag:"(0018,1022)",vr:"SH",name:"VideoImageFormatAcquired",vm:"1",version:"DICOM"},"(0018,1023)":{tag:"(0018,1023)",vr:"LO",name:"DigitalImageFormatAcquired",vm:"1",version:"DICOM"},"(0018,1030)":{tag:"(0018,1030)",vr:"LO",name:"ProtocolName",vm:"1",version:"DICOM"},"(0018,1040)":{tag:"(0018,1040)",vr:"LO",name:"ContrastBolusRoute",vm:"1",version:"DICOM"},"(0018,1041)":{tag:"(0018,1041)",vr:"DS",name:"ContrastBolusVolume",vm:"1",version:"DICOM"},"(0018,1042)":{tag:"(0018,1042)",vr:"TM",name:"ContrastBolusStartTime",vm:"1",version:"DICOM"},"(0018,1043)":{tag:"(0018,1043)",vr:"TM",name:"ContrastBolusStopTime",vm:"1",version:"DICOM"},"(0018,1044)":{tag:"(0018,1044)",vr:"DS",name:"ContrastBolusTotalDose",vm:"1",version:"DICOM"},"(0018,1045)":{tag:"(0018,1045)",vr:"IS",name:"SyringeCounts",vm:"1",version:"DICOM"},"(0018,1046)":{tag:"(0018,1046)",vr:"DS",name:"ContrastFlowRate",vm:"1-n",version:"DICOM"},"(0018,1047)":{tag:"(0018,1047)",vr:"DS",name:"ContrastFlowDuration",vm:"1-n",version:"DICOM"},"(0018,1048)":{tag:"(0018,1048)",vr:"CS",name:"ContrastBolusIngredient",vm:"1",version:"DICOM"},"(0018,1049)":{tag:"(0018,1049)",vr:"DS",name:"ContrastBolusIngredientConcentration",vm:"1",version:"DICOM"},"(0018,1050)":{tag:"(0018,1050)",vr:"DS",name:"SpatialResolution",vm:"1",version:"DICOM"},"(0018,1060)":{tag:"(0018,1060)",vr:"DS",name:"TriggerTime",vm:"1",version:"DICOM"},"(0018,1061)":{tag:"(0018,1061)",vr:"LO",name:"TriggerSourceOrType",vm:"1",version:"DICOM"},"(0018,1062)":{tag:"(0018,1062)",vr:"IS",name:"NominalInterval",vm:"1",version:"DICOM"},"(0018,1063)":{tag:"(0018,1063)",vr:"DS",name:"FrameTime",vm:"1",version:"DICOM"},"(0018,1064)":{tag:"(0018,1064)",vr:"LO",name:"CardiacFramingType",vm:"1",version:"DICOM"},"(0018,1065)":{tag:"(0018,1065)",vr:"DS",name:"FrameTimeVector",vm:"1-n",version:"DICOM"},"(0018,1066)":{tag:"(0018,1066)",vr:"DS",name:"FrameDelay",vm:"1",version:"DICOM"},"(0018,1067)":{tag:"(0018,1067)",vr:"DS",name:"ImageTriggerDelay",vm:"1",version:"DICOM"},"(0018,1068)":{tag:"(0018,1068)",vr:"DS",name:"MultiplexGroupTimeOffset",vm:"1",version:"DICOM"},"(0018,1069)":{tag:"(0018,1069)",vr:"DS",name:"TriggerTimeOffset",vm:"1",version:"DICOM"},"(0018,106A)":{tag:"(0018,106A)",vr:"CS",name:"SynchronizationTrigger",vm:"1",version:"DICOM"},"(0018,106C)":{tag:"(0018,106C)",vr:"US",name:"SynchronizationChannel",vm:"2",version:"DICOM"},"(0018,106E)":{tag:"(0018,106E)",vr:"UL",name:"TriggerSamplePosition",vm:"1",version:"DICOM"},"(0018,1070)":{tag:"(0018,1070)",vr:"LO",name:"RadiopharmaceuticalRoute",vm:"1",version:"DICOM"},"(0018,1071)":{tag:"(0018,1071)",vr:"DS",name:"RadiopharmaceuticalVolume",vm:"1",version:"DICOM"},"(0018,1072)":{tag:"(0018,1072)",vr:"TM",name:"RadiopharmaceuticalStartTime",vm:"1",version:"DICOM"},"(0018,1073)":{tag:"(0018,1073)",vr:"TM",name:"RadiopharmaceuticalStopTime",vm:"1",version:"DICOM"},"(0018,1074)":{tag:"(0018,1074)",vr:"DS",name:"RadionuclideTotalDose",vm:"1",version:"DICOM"},"(0018,1075)":{tag:"(0018,1075)",vr:"DS",name:"RadionuclideHalfLife",vm:"1",version:"DICOM"},"(0018,1076)":{tag:"(0018,1076)",vr:"DS",name:"RadionuclidePositronFraction",vm:"1",version:"DICOM"},"(0018,1077)":{tag:"(0018,1077)",vr:"DS",name:"RadiopharmaceuticalSpecificActivity",vm:"1",version:"DICOM"},"(0018,1078)":{tag:"(0018,1078)",vr:"DT",name:"RadiopharmaceuticalStartDateTime",vm:"1",version:"DICOM"},"(0018,1079)":{tag:"(0018,1079)",vr:"DT",name:"RadiopharmaceuticalStopDateTime",vm:"1",version:"DICOM"},"(0018,1080)":{tag:"(0018,1080)",vr:"CS",name:"BeatRejectionFlag",vm:"1",version:"DICOM"},"(0018,1081)":{tag:"(0018,1081)",vr:"IS",name:"LowRRValue",vm:"1",version:"DICOM"},"(0018,1082)":{tag:"(0018,1082)",vr:"IS",name:"HighRRValue",vm:"1",version:"DICOM"},"(0018,1083)":{tag:"(0018,1083)",vr:"IS",name:"IntervalsAcquired",vm:"1",version:"DICOM"},"(0018,1084)":{tag:"(0018,1084)",vr:"IS",name:"IntervalsRejected",vm:"1",version:"DICOM"},"(0018,1085)":{tag:"(0018,1085)",vr:"LO",name:"PVCRejection",vm:"1",version:"DICOM"},"(0018,1086)":{tag:"(0018,1086)",vr:"IS",name:"SkipBeats",vm:"1",version:"DICOM"},"(0018,1088)":{tag:"(0018,1088)",vr:"IS",name:"HeartRate",vm:"1",version:"DICOM"},"(0018,1090)":{tag:"(0018,1090)",vr:"IS",name:"CardiacNumberOfImages",vm:"1",version:"DICOM"},"(0018,1094)":{tag:"(0018,1094)",vr:"IS",name:"TriggerWindow",vm:"1",version:"DICOM"},"(0018,1100)":{tag:"(0018,1100)",vr:"DS",name:"ReconstructionDiameter",vm:"1",version:"DICOM"},"(0018,1110)":{tag:"(0018,1110)",vr:"DS",name:"DistanceSourceToDetector",vm:"1",version:"DICOM"},"(0018,1111)":{tag:"(0018,1111)",vr:"DS",name:"DistanceSourceToPatient",vm:"1",version:"DICOM"},"(0018,1114)":{tag:"(0018,1114)",vr:"DS",name:"EstimatedRadiographicMagnificationFactor",vm:"1",version:"DICOM"},"(0018,1120)":{tag:"(0018,1120)",vr:"DS",name:"GantryDetectorTilt",vm:"1",version:"DICOM"},"(0018,1121)":{tag:"(0018,1121)",vr:"DS",name:"GantryDetectorSlew",vm:"1",version:"DICOM"},"(0018,1130)":{tag:"(0018,1130)",vr:"DS",name:"TableHeight",vm:"1",version:"DICOM"},"(0018,1131)":{tag:"(0018,1131)",vr:"DS",name:"TableTraverse",vm:"1",version:"DICOM"},"(0018,1134)":{tag:"(0018,1134)",vr:"CS",name:"TableMotion",vm:"1",version:"DICOM"},"(0018,1135)":{tag:"(0018,1135)",vr:"DS",name:"TableVerticalIncrement",vm:"1-n",version:"DICOM"},"(0018,1136)":{tag:"(0018,1136)",vr:"DS",name:"TableLateralIncrement",vm:"1-n",version:"DICOM"},"(0018,1137)":{tag:"(0018,1137)",vr:"DS",name:"TableLongitudinalIncrement",vm:"1-n",version:"DICOM"},"(0018,1138)":{tag:"(0018,1138)",vr:"DS",name:"TableAngle",vm:"1",version:"DICOM"},"(0018,113A)":{tag:"(0018,113A)",vr:"CS",name:"TableType",vm:"1",version:"DICOM"},"(0018,1140)":{tag:"(0018,1140)",vr:"CS",name:"RotationDirection",vm:"1",version:"DICOM"},"(0018,1142)":{tag:"(0018,1142)",vr:"DS",name:"RadialPosition",vm:"1-n",version:"DICOM"},"(0018,1143)":{tag:"(0018,1143)",vr:"DS",name:"ScanArc",vm:"1",version:"DICOM"},"(0018,1144)":{tag:"(0018,1144)",vr:"DS",name:"AngularStep",vm:"1",version:"DICOM"},"(0018,1145)":{tag:"(0018,1145)",vr:"DS",name:"CenterOfRotationOffset",vm:"1",version:"DICOM"},"(0018,1147)":{tag:"(0018,1147)",vr:"CS",name:"FieldOfViewShape",vm:"1",version:"DICOM"},"(0018,1149)":{tag:"(0018,1149)",vr:"IS",name:"FieldOfViewDimensions",vm:"1-2",version:"DICOM"},"(0018,1150)":{tag:"(0018,1150)",vr:"IS",name:"ExposureTime",vm:"1",version:"DICOM"},"(0018,1151)":{tag:"(0018,1151)",vr:"IS",name:"XRayTubeCurrent",vm:"1",version:"DICOM"},"(0018,1152)":{tag:"(0018,1152)",vr:"IS",name:"Exposure",vm:"1",version:"DICOM"},"(0018,1153)":{tag:"(0018,1153)",vr:"IS",name:"ExposureInuAs",vm:"1",version:"DICOM"},"(0018,1154)":{tag:"(0018,1154)",vr:"DS",name:"AveragePulseWidth",vm:"1",version:"DICOM"},"(0018,1155)":{tag:"(0018,1155)",vr:"CS",name:"RadiationSetting",vm:"1",version:"DICOM"},"(0018,1156)":{tag:"(0018,1156)",vr:"CS",name:"RectificationType",vm:"1",version:"DICOM"},"(0018,115A)":{tag:"(0018,115A)",vr:"CS",name:"RadiationMode",vm:"1",version:"DICOM"},"(0018,115E)":{tag:"(0018,115E)",vr:"DS",name:"ImageAndFluoroscopyAreaDoseProduct",vm:"1",version:"DICOM"},"(0018,1160)":{tag:"(0018,1160)",vr:"SH",name:"FilterType",vm:"1",version:"DICOM"},"(0018,1161)":{tag:"(0018,1161)",vr:"LO",name:"TypeOfFilters",vm:"1-n",version:"DICOM"},"(0018,1162)":{tag:"(0018,1162)",vr:"DS",name:"IntensifierSize",vm:"1",version:"DICOM"},"(0018,1164)":{tag:"(0018,1164)",vr:"DS",name:"ImagerPixelSpacing",vm:"2",version:"DICOM"},"(0018,1166)":{tag:"(0018,1166)",vr:"CS",name:"Grid",vm:"1-n",version:"DICOM"},"(0018,1170)":{tag:"(0018,1170)",vr:"IS",name:"GeneratorPower",vm:"1",version:"DICOM"},"(0018,1180)":{tag:"(0018,1180)",vr:"SH",name:"CollimatorGridName",vm:"1",version:"DICOM"},"(0018,1181)":{tag:"(0018,1181)",vr:"CS",name:"CollimatorType",vm:"1",version:"DICOM"},"(0018,1182)":{tag:"(0018,1182)",vr:"IS",name:"FocalDistance",vm:"1-2",version:"DICOM"},"(0018,1183)":{tag:"(0018,1183)",vr:"DS",name:"XFocusCenter",vm:"1-2",version:"DICOM"},"(0018,1184)":{tag:"(0018,1184)",vr:"DS",name:"YFocusCenter",vm:"1-2",version:"DICOM"},"(0018,1190)":{tag:"(0018,1190)",vr:"DS",name:"FocalSpots",vm:"1-n",version:"DICOM"},"(0018,1191)":{tag:"(0018,1191)",vr:"CS",name:"AnodeTargetMaterial",vm:"1",version:"DICOM"},"(0018,11A0)":{tag:"(0018,11A0)",vr:"DS",name:"BodyPartThickness",vm:"1",version:"DICOM"},"(0018,11A2)":{tag:"(0018,11A2)",vr:"DS",name:"CompressionForce",vm:"1",version:"DICOM"},"(0018,11A3)":{tag:"(0018,11A3)",vr:"DS",name:"CompressionPressure",vm:"1",version:"DICOM"},"(0018,11A4)":{tag:"(0018,11A4)",vr:"LO",name:"PaddleDescription",vm:"1",version:"DICOM"},"(0018,11A5)":{tag:"(0018,11A5)",vr:"DS",name:"CompressionContactArea",vm:"1",version:"DICOM"},"(0018,11B0)":{tag:"(0018,11B0)",vr:"LO",name:"AcquisitionMode",vm:"1",version:"DICOM"},"(0018,11B1)":{tag:"(0018,11B1)",vr:"LO",name:"DoseModeName",vm:"1",version:"DICOM"},"(0018,11B2)":{tag:"(0018,11B2)",vr:"CS",name:"AcquiredSubtractionMaskFlag",vm:"1",version:"DICOM"},"(0018,11B3)":{tag:"(0018,11B3)",vr:"CS",name:"FluoroscopyPersistenceFlag",vm:"1",version:"DICOM"},"(0018,11B4)":{tag:"(0018,11B4)",vr:"CS",name:"FluoroscopyLastImageHoldPersistenceFlag",vm:"1",version:"DICOM"},"(0018,11B5)":{tag:"(0018,11B5)",vr:"IS",name:"UpperLimitNumberOfPersistentFluoroscopyFrames",vm:"1",version:"DICOM"},"(0018,11B6)":{tag:"(0018,11B6)",vr:"CS",name:"ContrastBolusAutoInjectionTriggerFlag",vm:"1",version:"DICOM"},"(0018,11B7)":{tag:"(0018,11B7)",vr:"FD",name:"ContrastBolusInjectionDelay",vm:"1",version:"DICOM"},"(0018,11B8)":{tag:"(0018,11B8)",vr:"SQ",name:"XAAcquisitionPhaseDetailsSequence",vm:"1",version:"DICOM"},"(0018,11B9)":{tag:"(0018,11B9)",vr:"FD",name:"XAAcquisitionFrameRate",vm:"1",version:"DICOM"},"(0018,11BA)":{tag:"(0018,11BA)",vr:"SQ",name:"XAPlaneDetailsSequence",vm:"1",version:"DICOM"},"(0018,11BB)":{tag:"(0018,11BB)",vr:"LO",name:"AcquisitionFieldOfViewLabel",vm:"1",version:"DICOM"},"(0018,11BC)":{tag:"(0018,11BC)",vr:"SQ",name:"XRayFilterDetailsSequence",vm:"1",version:"DICOM"},"(0018,11BD)":{tag:"(0018,11BD)",vr:"FD",name:"XAAcquisitionDuration",vm:"1",version:"DICOM"},"(0018,11BE)":{tag:"(0018,11BE)",vr:"CS",name:"ReconstructionPipelineType",vm:"1",version:"DICOM"},"(0018,11BF)":{tag:"(0018,11BF)",vr:"SQ",name:"ImageFilterDetailsSequence",vm:"1",version:"DICOM"},"(0018,11C0)":{tag:"(0018,11C0)",vr:"CS",name:"AppliedMaskSubtractionFlag",vm:"1",version:"DICOM"},"(0018,11C1)":{tag:"(0018,11C1)",vr:"SQ",name:"RequestedSeriesDescriptionCodeSequence",vm:"1",version:"DICOM"},"(0018,1200)":{tag:"(0018,1200)",vr:"DA",name:"DateOfLastCalibration",vm:"1-n",version:"DICOM"},"(0018,1201)":{tag:"(0018,1201)",vr:"TM",name:"TimeOfLastCalibration",vm:"1-n",version:"DICOM"},"(0018,1202)":{tag:"(0018,1202)",vr:"DT",name:"DateTimeOfLastCalibration",vm:"1",version:"DICOM"},"(0018,1210)":{tag:"(0018,1210)",vr:"SH",name:"ConvolutionKernel",vm:"1-n",version:"DICOM"},"(0018,1242)":{tag:"(0018,1242)",vr:"IS",name:"ActualFrameDuration",vm:"1",version:"DICOM"},"(0018,1243)":{tag:"(0018,1243)",vr:"IS",name:"CountRate",vm:"1",version:"DICOM"},"(0018,1244)":{tag:"(0018,1244)",vr:"US",name:"PreferredPlaybackSequencing",vm:"1",version:"DICOM"},"(0018,1250)":{tag:"(0018,1250)",vr:"SH",name:"ReceiveCoilName",vm:"1",version:"DICOM"},"(0018,1251)":{tag:"(0018,1251)",vr:"SH",name:"TransmitCoilName",vm:"1",version:"DICOM"},"(0018,1260)":{tag:"(0018,1260)",vr:"SH",name:"PlateType",vm:"1",version:"DICOM"},"(0018,1261)":{tag:"(0018,1261)",vr:"LO",name:"PhosphorType",vm:"1",version:"DICOM"},"(0018,1271)":{tag:"(0018,1271)",vr:"FD",name:"WaterEquivalentDiameter",vm:"1",version:"DICOM"},"(0018,1272)":{tag:"(0018,1272)",vr:"SQ",name:"WaterEquivalentDiameterCalculationMethodCodeSequence",vm:"1",version:"DICOM"},"(0018,1300)":{tag:"(0018,1300)",vr:"DS",name:"ScanVelocity",vm:"1",version:"DICOM"},"(0018,1301)":{tag:"(0018,1301)",vr:"CS",name:"WholeBodyTechnique",vm:"1-n",version:"DICOM"},"(0018,1302)":{tag:"(0018,1302)",vr:"IS",name:"ScanLength",vm:"1",version:"DICOM"},"(0018,1310)":{tag:"(0018,1310)",vr:"US",name:"AcquisitionMatrix",vm:"4",version:"DICOM"},"(0018,1312)":{tag:"(0018,1312)",vr:"CS",name:"InPlanePhaseEncodingDirection",vm:"1",version:"DICOM"},"(0018,1314)":{tag:"(0018,1314)",vr:"DS",name:"FlipAngle",vm:"1",version:"DICOM"},"(0018,1315)":{tag:"(0018,1315)",vr:"CS",name:"VariableFlipAngleFlag",vm:"1",version:"DICOM"},"(0018,1316)":{tag:"(0018,1316)",vr:"DS",name:"SAR",vm:"1",version:"DICOM"},"(0018,1318)":{tag:"(0018,1318)",vr:"DS",name:"dBdt",vm:"1",version:"DICOM"},"(0018,1400)":{tag:"(0018,1400)",vr:"LO",name:"AcquisitionDeviceProcessingDescription",vm:"1",version:"DICOM"},"(0018,1401)":{tag:"(0018,1401)",vr:"LO",name:"AcquisitionDeviceProcessingCode",vm:"1",version:"DICOM"},"(0018,1402)":{tag:"(0018,1402)",vr:"CS",name:"CassetteOrientation",vm:"1",version:"DICOM"},"(0018,1403)":{tag:"(0018,1403)",vr:"CS",name:"CassetteSize",vm:"1",version:"DICOM"},"(0018,1404)":{tag:"(0018,1404)",vr:"US",name:"ExposuresOnPlate",vm:"1",version:"DICOM"},"(0018,1405)":{tag:"(0018,1405)",vr:"IS",name:"RelativeXRayExposure",vm:"1",version:"DICOM"},"(0018,1411)":{tag:"(0018,1411)",vr:"DS",name:"ExposureIndex",vm:"1",version:"DICOM"},"(0018,1412)":{tag:"(0018,1412)",vr:"DS",name:"TargetExposureIndex",vm:"1",version:"DICOM"},"(0018,1413)":{tag:"(0018,1413)",vr:"DS",name:"DeviationIndex",vm:"1",version:"DICOM"},"(0018,1450)":{tag:"(0018,1450)",vr:"DS",name:"ColumnAngulation",vm:"1",version:"DICOM"},"(0018,1460)":{tag:"(0018,1460)",vr:"DS",name:"TomoLayerHeight",vm:"1",version:"DICOM"},"(0018,1470)":{tag:"(0018,1470)",vr:"DS",name:"TomoAngle",vm:"1",version:"DICOM"},"(0018,1480)":{tag:"(0018,1480)",vr:"DS",name:"TomoTime",vm:"1",version:"DICOM"},"(0018,1490)":{tag:"(0018,1490)",vr:"CS",name:"TomoType",vm:"1",version:"DICOM"},"(0018,1491)":{tag:"(0018,1491)",vr:"CS",name:"TomoClass",vm:"1",version:"DICOM"},"(0018,1495)":{tag:"(0018,1495)",vr:"IS",name:"NumberOfTomosynthesisSourceImages",vm:"1",version:"DICOM"},"(0018,1500)":{tag:"(0018,1500)",vr:"CS",name:"PositionerMotion",vm:"1",version:"DICOM"},"(0018,1508)":{tag:"(0018,1508)",vr:"CS",name:"PositionerType",vm:"1",version:"DICOM"},"(0018,1510)":{tag:"(0018,1510)",vr:"DS",name:"PositionerPrimaryAngle",vm:"1",version:"DICOM"},"(0018,1511)":{tag:"(0018,1511)",vr:"DS",name:"PositionerSecondaryAngle",vm:"1",version:"DICOM"},"(0018,1520)":{tag:"(0018,1520)",vr:"DS",name:"PositionerPrimaryAngleIncrement",vm:"1-n",version:"DICOM"},"(0018,1521)":{tag:"(0018,1521)",vr:"DS",name:"PositionerSecondaryAngleIncrement",vm:"1-n",version:"DICOM"},"(0018,1530)":{tag:"(0018,1530)",vr:"DS",name:"DetectorPrimaryAngle",vm:"1",version:"DICOM"},"(0018,1531)":{tag:"(0018,1531)",vr:"DS",name:"DetectorSecondaryAngle",vm:"1",version:"DICOM"},"(0018,1600)":{tag:"(0018,1600)",vr:"CS",name:"ShutterShape",vm:"1-3",version:"DICOM"},"(0018,1602)":{tag:"(0018,1602)",vr:"IS",name:"ShutterLeftVerticalEdge",vm:"1",version:"DICOM"},"(0018,1604)":{tag:"(0018,1604)",vr:"IS",name:"ShutterRightVerticalEdge",vm:"1",version:"DICOM"},"(0018,1606)":{tag:"(0018,1606)",vr:"IS",name:"ShutterUpperHorizontalEdge",vm:"1",version:"DICOM"},"(0018,1608)":{tag:"(0018,1608)",vr:"IS",name:"ShutterLowerHorizontalEdge",vm:"1",version:"DICOM"},"(0018,1610)":{tag:"(0018,1610)",vr:"IS",name:"CenterOfCircularShutter",vm:"2",version:"DICOM"},"(0018,1612)":{tag:"(0018,1612)",vr:"IS",name:"RadiusOfCircularShutter",vm:"1",version:"DICOM"},"(0018,1620)":{tag:"(0018,1620)",vr:"IS",name:"VerticesOfThePolygonalShutter",vm:"2-2n",version:"DICOM"},"(0018,1622)":{tag:"(0018,1622)",vr:"US",name:"ShutterPresentationValue",vm:"1",version:"DICOM"},"(0018,1623)":{tag:"(0018,1623)",vr:"US",name:"ShutterOverlayGroup",vm:"1",version:"DICOM"},"(0018,1624)":{tag:"(0018,1624)",vr:"US",name:"ShutterPresentationColorCIELabValue",vm:"3",version:"DICOM"},"(0018,1630)":{tag:"(0018,1630)",vr:"CS",name:"OutlineShapeType",vm:"1",version:"DICOM"},"(0018,1631)":{tag:"(0018,1631)",vr:"FD",name:"OutlineLeftVerticalEdge",vm:"1",version:"DICOM"},"(0018,1632)":{tag:"(0018,1632)",vr:"FD",name:"OutlineRightVerticalEdge",vm:"1",version:"DICOM"},"(0018,1633)":{tag:"(0018,1633)",vr:"FD",name:"OutlineUpperHorizontalEdge",vm:"1",version:"DICOM"},"(0018,1634)":{tag:"(0018,1634)",vr:"FD",name:"OutlineLowerHorizontalEdge",vm:"1",version:"DICOM"},"(0018,1635)":{tag:"(0018,1635)",vr:"FD",name:"CenterOfCircularOutline",vm:"2",version:"DICOM"},"(0018,1636)":{tag:"(0018,1636)",vr:"FD",name:"DiameterOfCircularOutline",vm:"1",version:"DICOM"},"(0018,1637)":{tag:"(0018,1637)",vr:"UL",name:"NumberOfPolygonalVertices",vm:"1",version:"DICOM"},"(0018,1638)":{tag:"(0018,1638)",vr:"OF",name:"VerticesOfThePolygonalOutline",vm:"1",version:"DICOM"},"(0018,1700)":{tag:"(0018,1700)",vr:"CS",name:"CollimatorShape",vm:"1-3",version:"DICOM"},"(0018,1702)":{tag:"(0018,1702)",vr:"IS",name:"CollimatorLeftVerticalEdge",vm:"1",version:"DICOM"},"(0018,1704)":{tag:"(0018,1704)",vr:"IS",name:"CollimatorRightVerticalEdge",vm:"1",version:"DICOM"},"(0018,1706)":{tag:"(0018,1706)",vr:"IS",name:"CollimatorUpperHorizontalEdge",vm:"1",version:"DICOM"},"(0018,1708)":{tag:"(0018,1708)",vr:"IS",name:"CollimatorLowerHorizontalEdge",vm:"1",version:"DICOM"},"(0018,1710)":{tag:"(0018,1710)",vr:"IS",name:"CenterOfCircularCollimator",vm:"2",version:"DICOM"},"(0018,1712)":{tag:"(0018,1712)",vr:"IS",name:"RadiusOfCircularCollimator",vm:"1",version:"DICOM"},"(0018,1720)":{tag:"(0018,1720)",vr:"IS",name:"VerticesOfThePolygonalCollimator",vm:"2-2n",version:"DICOM"},"(0018,1800)":{tag:"(0018,1800)",vr:"CS",name:"AcquisitionTimeSynchronized",vm:"1",version:"DICOM"},"(0018,1801)":{tag:"(0018,1801)",vr:"SH",name:"TimeSource",vm:"1",version:"DICOM"},"(0018,1802)":{tag:"(0018,1802)",vr:"CS",name:"TimeDistributionProtocol",vm:"1",version:"DICOM"},"(0018,1803)":{tag:"(0018,1803)",vr:"LO",name:"NTPSourceAddress",vm:"1",version:"DICOM"},"(0018,2001)":{tag:"(0018,2001)",vr:"IS",name:"PageNumberVector",vm:"1-n",version:"DICOM"},"(0018,2002)":{tag:"(0018,2002)",vr:"SH",name:"FrameLabelVector",vm:"1-n",version:"DICOM"},"(0018,2003)":{tag:"(0018,2003)",vr:"DS",name:"FramePrimaryAngleVector",vm:"1-n",version:"DICOM"},"(0018,2004)":{tag:"(0018,2004)",vr:"DS",name:"FrameSecondaryAngleVector",vm:"1-n",version:"DICOM"},"(0018,2005)":{tag:"(0018,2005)",vr:"DS",name:"SliceLocationVector",vm:"1-n",version:"DICOM"},"(0018,2006)":{tag:"(0018,2006)",vr:"SH",name:"DisplayWindowLabelVector",vm:"1-n",version:"DICOM"},"(0018,2010)":{tag:"(0018,2010)",vr:"DS",name:"NominalScannedPixelSpacing",vm:"2",version:"DICOM"},"(0018,2020)":{tag:"(0018,2020)",vr:"CS",name:"DigitizingDeviceTransportDirection",vm:"1",version:"DICOM"},"(0018,2030)":{tag:"(0018,2030)",vr:"DS",name:"RotationOfScannedFilm",vm:"1",version:"DICOM"},"(0018,2041)":{tag:"(0018,2041)",vr:"SQ",name:"BiopsyTargetSequence",vm:"1",version:"DICOM"},"(0018,2042)":{tag:"(0018,2042)",vr:"UI",name:"TargetUID",vm:"1",version:"DICOM"},"(0018,2043)":{tag:"(0018,2043)",vr:"FL",name:"LocalizingCursorPosition",vm:"2",version:"DICOM"},"(0018,2044)":{tag:"(0018,2044)",vr:"FL",name:"CalculatedTargetPosition",vm:"3",version:"DICOM"},"(0018,2045)":{tag:"(0018,2045)",vr:"SH",name:"TargetLabel",vm:"1",version:"DICOM"},"(0018,2046)":{tag:"(0018,2046)",vr:"FL",name:"DisplayedZValue",vm:"1",version:"DICOM"},"(0018,3100)":{tag:"(0018,3100)",vr:"CS",name:"IVUSAcquisition",vm:"1",version:"DICOM"},"(0018,3101)":{tag:"(0018,3101)",vr:"DS",name:"IVUSPullbackRate",vm:"1",version:"DICOM"},"(0018,3102)":{tag:"(0018,3102)",vr:"DS",name:"IVUSGatedRate",vm:"1",version:"DICOM"},"(0018,3103)":{tag:"(0018,3103)",vr:"IS",name:"IVUSPullbackStartFrameNumber",vm:"1",version:"DICOM"},"(0018,3104)":{tag:"(0018,3104)",vr:"IS",name:"IVUSPullbackStopFrameNumber",vm:"1",version:"DICOM"},"(0018,3105)":{tag:"(0018,3105)",vr:"IS",name:"LesionNumber",vm:"1-n",version:"DICOM"},"(0018,5000)":{tag:"(0018,5000)",vr:"SH",name:"OutputPower",vm:"1-n",version:"DICOM"},"(0018,5010)":{tag:"(0018,5010)",vr:"LO",name:"TransducerData",vm:"1-n",version:"DICOM"},"(0018,5011)":{tag:"(0018,5011)",vr:"SQ",name:"TransducerIdentificationSequence",vm:"1",version:"DICOM"},"(0018,5012)":{tag:"(0018,5012)",vr:"DS",name:"FocusDepth",vm:"1",version:"DICOM"},"(0018,5020)":{tag:"(0018,5020)",vr:"LO",name:"ProcessingFunction",vm:"1",version:"DICOM"},"(0018,5022)":{tag:"(0018,5022)",vr:"DS",name:"MechanicalIndex",vm:"1",version:"DICOM"},"(0018,5024)":{tag:"(0018,5024)",vr:"DS",name:"BoneThermalIndex",vm:"1",version:"DICOM"},"(0018,5026)":{tag:"(0018,5026)",vr:"DS",name:"CranialThermalIndex",vm:"1",version:"DICOM"},"(0018,5027)":{tag:"(0018,5027)",vr:"DS",name:"SoftTissueThermalIndex",vm:"1",version:"DICOM"},"(0018,5028)":{tag:"(0018,5028)",vr:"DS",name:"SoftTissueFocusThermalIndex",vm:"1",version:"DICOM"},"(0018,5029)":{tag:"(0018,5029)",vr:"DS",name:"SoftTissueSurfaceThermalIndex",vm:"1",version:"DICOM"},"(0018,5050)":{tag:"(0018,5050)",vr:"IS",name:"DepthOfScanField",vm:"1",version:"DICOM"},"(0018,5100)":{tag:"(0018,5100)",vr:"CS",name:"PatientPosition",vm:"1",version:"DICOM"},"(0018,5101)":{tag:"(0018,5101)",vr:"CS",name:"ViewPosition",vm:"1",version:"DICOM"},"(0018,5104)":{tag:"(0018,5104)",vr:"SQ",name:"ProjectionEponymousNameCodeSequence",vm:"1",version:"DICOM"},"(0018,6000)":{tag:"(0018,6000)",vr:"DS",name:"Sensitivity",vm:"1",version:"DICOM"},"(0018,6011)":{tag:"(0018,6011)",vr:"SQ",name:"SequenceOfUltrasoundRegions",vm:"1",version:"DICOM"},"(0018,6012)":{tag:"(0018,6012)",vr:"US",name:"RegionSpatialFormat",vm:"1",version:"DICOM"},"(0018,6014)":{tag:"(0018,6014)",vr:"US",name:"RegionDataType",vm:"1",version:"DICOM"},"(0018,6016)":{tag:"(0018,6016)",vr:"UL",name:"RegionFlags",vm:"1",version:"DICOM"},"(0018,6018)":{tag:"(0018,6018)",vr:"UL",name:"RegionLocationMinX0",vm:"1",version:"DICOM"},"(0018,601A)":{tag:"(0018,601A)",vr:"UL",name:"RegionLocationMinY0",vm:"1",version:"DICOM"},"(0018,601C)":{tag:"(0018,601C)",vr:"UL",name:"RegionLocationMaxX1",vm:"1",version:"DICOM"},"(0018,601E)":{tag:"(0018,601E)",vr:"UL",name:"RegionLocationMaxY1",vm:"1",version:"DICOM"},"(0018,6020)":{tag:"(0018,6020)",vr:"SL",name:"ReferencePixelX0",vm:"1",version:"DICOM"},"(0018,6022)":{tag:"(0018,6022)",vr:"SL",name:"ReferencePixelY0",vm:"1",version:"DICOM"},"(0018,6024)":{tag:"(0018,6024)",vr:"US",name:"PhysicalUnitsXDirection",vm:"1",version:"DICOM"},"(0018,6026)":{tag:"(0018,6026)",vr:"US",name:"PhysicalUnitsYDirection",vm:"1",version:"DICOM"},"(0018,6028)":{tag:"(0018,6028)",vr:"FD",name:"ReferencePixelPhysicalValueX",vm:"1",version:"DICOM"},"(0018,602A)":{tag:"(0018,602A)",vr:"FD",name:"ReferencePixelPhysicalValueY",vm:"1",version:"DICOM"},"(0018,602C)":{tag:"(0018,602C)",vr:"FD",name:"PhysicalDeltaX",vm:"1",version:"DICOM"},"(0018,602E)":{tag:"(0018,602E)",vr:"FD",name:"PhysicalDeltaY",vm:"1",version:"DICOM"},"(0018,6030)":{tag:"(0018,6030)",vr:"UL",name:"TransducerFrequency",vm:"1",version:"DICOM"},"(0018,6031)":{tag:"(0018,6031)",vr:"CS",name:"TransducerType",vm:"1",version:"DICOM"},"(0018,6032)":{tag:"(0018,6032)",vr:"UL",name:"PulseRepetitionFrequency",vm:"1",version:"DICOM"},"(0018,6034)":{tag:"(0018,6034)",vr:"FD",name:"DopplerCorrectionAngle",vm:"1",version:"DICOM"},"(0018,6036)":{tag:"(0018,6036)",vr:"FD",name:"SteeringAngle",vm:"1",version:"DICOM"},"(0018,6039)":{tag:"(0018,6039)",vr:"SL",name:"DopplerSampleVolumeXPosition",vm:"1",version:"DICOM"},"(0018,603B)":{tag:"(0018,603B)",vr:"SL",name:"DopplerSampleVolumeYPosition",vm:"1",version:"DICOM"},"(0018,603D)":{tag:"(0018,603D)",vr:"SL",name:"TMLinePositionX0",vm:"1",version:"DICOM"},"(0018,603F)":{tag:"(0018,603F)",vr:"SL",name:"TMLinePositionY0",vm:"1",version:"DICOM"},"(0018,6041)":{tag:"(0018,6041)",vr:"SL",name:"TMLinePositionX1",vm:"1",version:"DICOM"},"(0018,6043)":{tag:"(0018,6043)",vr:"SL",name:"TMLinePositionY1",vm:"1",version:"DICOM"},"(0018,6044)":{tag:"(0018,6044)",vr:"US",name:"PixelComponentOrganization",vm:"1",version:"DICOM"},"(0018,6046)":{tag:"(0018,6046)",vr:"UL",name:"PixelComponentMask",vm:"1",version:"DICOM"},"(0018,6048)":{tag:"(0018,6048)",vr:"UL",name:"PixelComponentRangeStart",vm:"1",version:"DICOM"},"(0018,604A)":{tag:"(0018,604A)",vr:"UL",name:"PixelComponentRangeStop",vm:"1",version:"DICOM"},"(0018,604C)":{tag:"(0018,604C)",vr:"US",name:"PixelComponentPhysicalUnits",vm:"1",version:"DICOM"},"(0018,604E)":{tag:"(0018,604E)",vr:"US",name:"PixelComponentDataType",vm:"1",version:"DICOM"},"(0018,6050)":{tag:"(0018,6050)",vr:"UL",name:"NumberOfTableBreakPoints",vm:"1",version:"DICOM"},"(0018,6052)":{tag:"(0018,6052)",vr:"UL",name:"TableOfXBreakPoints",vm:"1-n",version:"DICOM"},"(0018,6054)":{tag:"(0018,6054)",vr:"FD",name:"TableOfYBreakPoints",vm:"1-n",version:"DICOM"},"(0018,6056)":{tag:"(0018,6056)",vr:"UL",name:"NumberOfTableEntries",vm:"1",version:"DICOM"},"(0018,6058)":{tag:"(0018,6058)",vr:"UL",name:"TableOfPixelValues",vm:"1-n",version:"DICOM"},"(0018,605A)":{tag:"(0018,605A)",vr:"FL",name:"TableOfParameterValues",vm:"1-n",version:"DICOM"},"(0018,6060)":{tag:"(0018,6060)",vr:"FL",name:"RWaveTimeVector",vm:"1-n",version:"DICOM"},"(0018,6070)":{tag:"(0018,6070)",vr:"US",name:"ActiveImageAreaOverlayGroup",vm:"1",version:"DICOM"},"(0018,7000)":{tag:"(0018,7000)",vr:"CS",name:"DetectorConditionsNominalFlag",vm:"1",version:"DICOM"},"(0018,7001)":{tag:"(0018,7001)",vr:"DS",name:"DetectorTemperature",vm:"1",version:"DICOM"},"(0018,7004)":{tag:"(0018,7004)",vr:"CS",name:"DetectorType",vm:"1",version:"DICOM"},"(0018,7005)":{tag:"(0018,7005)",vr:"CS",name:"DetectorConfiguration",vm:"1",version:"DICOM"},"(0018,7006)":{tag:"(0018,7006)",vr:"LT",name:"DetectorDescription",vm:"1",version:"DICOM"},"(0018,7008)":{tag:"(0018,7008)",vr:"LT",name:"DetectorMode",vm:"1",version:"DICOM"},"(0018,700A)":{tag:"(0018,700A)",vr:"SH",name:"DetectorID",vm:"1",version:"DICOM"},"(0018,700C)":{tag:"(0018,700C)",vr:"DA",name:"DateOfLastDetectorCalibration",vm:"1",version:"DICOM"},"(0018,700E)":{tag:"(0018,700E)",vr:"TM",name:"TimeOfLastDetectorCalibration",vm:"1",version:"DICOM"},"(0018,7010)":{tag:"(0018,7010)",vr:"IS",name:"ExposuresOnDetectorSinceLastCalibration",vm:"1",version:"DICOM"},"(0018,7011)":{tag:"(0018,7011)",vr:"IS",name:"ExposuresOnDetectorSinceManufactured",vm:"1",version:"DICOM"},"(0018,7012)":{tag:"(0018,7012)",vr:"DS",name:"DetectorTimeSinceLastExposure",vm:"1",version:"DICOM"},"(0018,7014)":{tag:"(0018,7014)",vr:"DS",name:"DetectorActiveTime",vm:"1",version:"DICOM"},"(0018,7016)":{tag:"(0018,7016)",vr:"DS",name:"DetectorActivationOffsetFromExposure",vm:"1",version:"DICOM"},"(0018,701A)":{tag:"(0018,701A)",vr:"DS",name:"DetectorBinning",vm:"2",version:"DICOM"},"(0018,7020)":{tag:"(0018,7020)",vr:"DS",name:"DetectorElementPhysicalSize",vm:"2",version:"DICOM"},"(0018,7022)":{tag:"(0018,7022)",vr:"DS",name:"DetectorElementSpacing",vm:"2",version:"DICOM"},"(0018,7024)":{tag:"(0018,7024)",vr:"CS",name:"DetectorActiveShape",vm:"1",version:"DICOM"},"(0018,7026)":{tag:"(0018,7026)",vr:"DS",name:"DetectorActiveDimensions",vm:"1-2",version:"DICOM"},"(0018,7028)":{tag:"(0018,7028)",vr:"DS",name:"DetectorActiveOrigin",vm:"2",version:"DICOM"},"(0018,702A)":{tag:"(0018,702A)",vr:"LO",name:"DetectorManufacturerName",vm:"1",version:"DICOM"},"(0018,702B)":{tag:"(0018,702B)",vr:"LO",name:"DetectorManufacturerModelName",vm:"1",version:"DICOM"},"(0018,7030)":{tag:"(0018,7030)",vr:"DS",name:"FieldOfViewOrigin",vm:"2",version:"DICOM"},"(0018,7032)":{tag:"(0018,7032)",vr:"DS",name:"FieldOfViewRotation",vm:"1",version:"DICOM"},"(0018,7034)":{tag:"(0018,7034)",vr:"CS",name:"FieldOfViewHorizontalFlip",vm:"1",version:"DICOM"},"(0018,7036)":{tag:"(0018,7036)",vr:"FL",name:"PixelDataAreaOriginRelativeToFOV",vm:"2",version:"DICOM"},"(0018,7038)":{tag:"(0018,7038)",vr:"FL",name:"PixelDataAreaRotationAngleRelativeToFOV",vm:"1",version:"DICOM"},"(0018,7040)":{tag:"(0018,7040)",vr:"LT",name:"GridAbsorbingMaterial",vm:"1",version:"DICOM"},"(0018,7041)":{tag:"(0018,7041)",vr:"LT",name:"GridSpacingMaterial",vm:"1",version:"DICOM"},"(0018,7042)":{tag:"(0018,7042)",vr:"DS",name:"GridThickness",vm:"1",version:"DICOM"},"(0018,7044)":{tag:"(0018,7044)",vr:"DS",name:"GridPitch",vm:"1",version:"DICOM"},"(0018,7046)":{tag:"(0018,7046)",vr:"IS",name:"GridAspectRatio",vm:"2",version:"DICOM"},"(0018,7048)":{tag:"(0018,7048)",vr:"DS",name:"GridPeriod",vm:"1",version:"DICOM"},"(0018,704C)":{tag:"(0018,704C)",vr:"DS",name:"GridFocalDistance",vm:"1",version:"DICOM"},"(0018,7050)":{tag:"(0018,7050)",vr:"CS",name:"FilterMaterial",vm:"1-n",version:"DICOM"},"(0018,7052)":{tag:"(0018,7052)",vr:"DS",name:"FilterThicknessMinimum",vm:"1-n",version:"DICOM"},"(0018,7054)":{tag:"(0018,7054)",vr:"DS",name:"FilterThicknessMaximum",vm:"1-n",version:"DICOM"},"(0018,7056)":{tag:"(0018,7056)",vr:"FL",name:"FilterBeamPathLengthMinimum",vm:"1-n",version:"DICOM"},"(0018,7058)":{tag:"(0018,7058)",vr:"FL",name:"FilterBeamPathLengthMaximum",vm:"1-n",version:"DICOM"},"(0018,7060)":{tag:"(0018,7060)",vr:"CS",name:"ExposureControlMode",vm:"1",version:"DICOM"},"(0018,7062)":{tag:"(0018,7062)",vr:"LT",name:"ExposureControlModeDescription",vm:"1",version:"DICOM"},"(0018,7064)":{tag:"(0018,7064)",vr:"CS",name:"ExposureStatus",vm:"1",version:"DICOM"},"(0018,7065)":{tag:"(0018,7065)",vr:"DS",name:"PhototimerSetting",vm:"1",version:"DICOM"},"(0018,8150)":{tag:"(0018,8150)",vr:"DS",name:"ExposureTimeInuS",vm:"1",version:"DICOM"},"(0018,8151)":{tag:"(0018,8151)",vr:"DS",name:"XRayTubeCurrentInuA",vm:"1",version:"DICOM"},"(0018,9004)":{tag:"(0018,9004)",vr:"CS",name:"ContentQualification",vm:"1",version:"DICOM"},"(0018,9005)":{tag:"(0018,9005)",vr:"SH",name:"PulseSequenceName",vm:"1",version:"DICOM"},"(0018,9006)":{tag:"(0018,9006)",vr:"SQ",name:"MRImagingModifierSequence",vm:"1",version:"DICOM"},"(0018,9008)":{tag:"(0018,9008)",vr:"CS",name:"EchoPulseSequence",vm:"1",version:"DICOM"},"(0018,9009)":{tag:"(0018,9009)",vr:"CS",name:"InversionRecovery",vm:"1",version:"DICOM"},"(0018,9010)":{tag:"(0018,9010)",vr:"CS",name:"FlowCompensation",vm:"1",version:"DICOM"},"(0018,9011)":{tag:"(0018,9011)",vr:"CS",name:"MultipleSpinEcho",vm:"1",version:"DICOM"},"(0018,9012)":{tag:"(0018,9012)",vr:"CS",name:"MultiPlanarExcitation",vm:"1",version:"DICOM"},"(0018,9014)":{tag:"(0018,9014)",vr:"CS",name:"PhaseContrast",vm:"1",version:"DICOM"},"(0018,9015)":{tag:"(0018,9015)",vr:"CS",name:"TimeOfFlightContrast",vm:"1",version:"DICOM"},"(0018,9016)":{tag:"(0018,9016)",vr:"CS",name:"Spoiling",vm:"1",version:"DICOM"},"(0018,9017)":{tag:"(0018,9017)",vr:"CS",name:"SteadyStatePulseSequence",vm:"1",version:"DICOM"},"(0018,9018)":{tag:"(0018,9018)",vr:"CS",name:"EchoPlanarPulseSequence",vm:"1",version:"DICOM"},"(0018,9019)":{tag:"(0018,9019)",vr:"FD",name:"TagAngleFirstAxis",vm:"1",version:"DICOM"},"(0018,9020)":{tag:"(0018,9020)",vr:"CS",name:"MagnetizationTransfer",vm:"1",version:"DICOM"},"(0018,9021)":{tag:"(0018,9021)",vr:"CS",name:"T2Preparation",vm:"1",version:"DICOM"},"(0018,9022)":{tag:"(0018,9022)",vr:"CS",name:"BloodSignalNulling",vm:"1",version:"DICOM"},"(0018,9024)":{tag:"(0018,9024)",vr:"CS",name:"SaturationRecovery",vm:"1",version:"DICOM"},"(0018,9025)":{tag:"(0018,9025)",vr:"CS",name:"SpectrallySelectedSuppression",vm:"1",version:"DICOM"},"(0018,9026)":{tag:"(0018,9026)",vr:"CS",name:"SpectrallySelectedExcitation",vm:"1",version:"DICOM"},"(0018,9027)":{tag:"(0018,9027)",vr:"CS",name:"SpatialPresaturation",vm:"1",version:"DICOM"},"(0018,9028)":{tag:"(0018,9028)",vr:"CS",name:"Tagging",vm:"1",version:"DICOM"},"(0018,9029)":{tag:"(0018,9029)",vr:"CS",name:"OversamplingPhase",vm:"1",version:"DICOM"},"(0018,9030)":{tag:"(0018,9030)",vr:"FD",name:"TagSpacingFirstDimension",vm:"1",version:"DICOM"},"(0018,9032)":{tag:"(0018,9032)",vr:"CS",name:"GeometryOfKSpaceTraversal",vm:"1",version:"DICOM"},"(0018,9033)":{tag:"(0018,9033)",vr:"CS",name:"SegmentedKSpaceTraversal",vm:"1",version:"DICOM"},"(0018,9034)":{tag:"(0018,9034)",vr:"CS",name:"RectilinearPhaseEncodeReordering",vm:"1",version:"DICOM"},"(0018,9035)":{tag:"(0018,9035)",vr:"FD",name:"TagThickness",vm:"1",version:"DICOM"},"(0018,9036)":{tag:"(0018,9036)",vr:"CS",name:"PartialFourierDirection",vm:"1",version:"DICOM"},"(0018,9037)":{tag:"(0018,9037)",vr:"CS",name:"CardiacSynchronizationTechnique",vm:"1",version:"DICOM"},"(0018,9041)":{tag:"(0018,9041)",vr:"LO",name:"ReceiveCoilManufacturerName",vm:"1",version:"DICOM"},"(0018,9042)":{tag:"(0018,9042)",vr:"SQ",name:"MRReceiveCoilSequence",vm:"1",version:"DICOM"},"(0018,9043)":{tag:"(0018,9043)",vr:"CS",name:"ReceiveCoilType",vm:"1",version:"DICOM"},"(0018,9044)":{tag:"(0018,9044)",vr:"CS",name:"QuadratureReceiveCoil",vm:"1",version:"DICOM"},"(0018,9045)":{tag:"(0018,9045)",vr:"SQ",name:"MultiCoilDefinitionSequence",vm:"1",version:"DICOM"},"(0018,9046)":{tag:"(0018,9046)",vr:"LO",name:"MultiCoilConfiguration",vm:"1",version:"DICOM"},"(0018,9047)":{tag:"(0018,9047)",vr:"SH",name:"MultiCoilElementName",vm:"1",version:"DICOM"},"(0018,9048)":{tag:"(0018,9048)",vr:"CS",name:"MultiCoilElementUsed",vm:"1",version:"DICOM"},"(0018,9049)":{tag:"(0018,9049)",vr:"SQ",name:"MRTransmitCoilSequence",vm:"1",version:"DICOM"},"(0018,9050)":{tag:"(0018,9050)",vr:"LO",name:"TransmitCoilManufacturerName",vm:"1",version:"DICOM"},"(0018,9051)":{tag:"(0018,9051)",vr:"CS",name:"TransmitCoilType",vm:"1",version:"DICOM"},"(0018,9052)":{tag:"(0018,9052)",vr:"FD",name:"SpectralWidth",vm:"1-2",version:"DICOM"},"(0018,9053)":{tag:"(0018,9053)",vr:"FD",name:"ChemicalShiftReference",vm:"1-2",version:"DICOM"},"(0018,9054)":{tag:"(0018,9054)",vr:"CS",name:"VolumeLocalizationTechnique",vm:"1",version:"DICOM"},"(0018,9058)":{tag:"(0018,9058)",vr:"US",name:"MRAcquisitionFrequencyEncodingSteps",vm:"1",version:"DICOM"},"(0018,9059)":{tag:"(0018,9059)",vr:"CS",name:"Decoupling",vm:"1",version:"DICOM"},"(0018,9060)":{tag:"(0018,9060)",vr:"CS",name:"DecoupledNucleus",vm:"1-2",version:"DICOM"},"(0018,9061)":{tag:"(0018,9061)",vr:"FD",name:"DecouplingFrequency",vm:"1-2",version:"DICOM"},"(0018,9062)":{tag:"(0018,9062)",vr:"CS",name:"DecouplingMethod",vm:"1",version:"DICOM"},"(0018,9063)":{tag:"(0018,9063)",vr:"FD",name:"DecouplingChemicalShiftReference",vm:"1-2",version:"DICOM"},"(0018,9064)":{tag:"(0018,9064)",vr:"CS",name:"KSpaceFiltering",vm:"1",version:"DICOM"},"(0018,9065)":{tag:"(0018,9065)",vr:"CS",name:"TimeDomainFiltering",vm:"1-2",version:"DICOM"},"(0018,9066)":{tag:"(0018,9066)",vr:"US",name:"NumberOfZeroFills",vm:"1-2",version:"DICOM"},"(0018,9067)":{tag:"(0018,9067)",vr:"CS",name:"BaselineCorrection",vm:"1",version:"DICOM"},"(0018,9069)":{tag:"(0018,9069)",vr:"FD",name:"ParallelReductionFactorInPlane",vm:"1",version:"DICOM"},"(0018,9070)":{tag:"(0018,9070)",vr:"FD",name:"CardiacRRIntervalSpecified",vm:"1",version:"DICOM"},"(0018,9073)":{tag:"(0018,9073)",vr:"FD",name:"AcquisitionDuration",vm:"1",version:"DICOM"},"(0018,9074)":{tag:"(0018,9074)",vr:"DT",name:"FrameAcquisitionDateTime",vm:"1",version:"DICOM"},"(0018,9075)":{tag:"(0018,9075)",vr:"CS",name:"DiffusionDirectionality",vm:"1",version:"DICOM"},"(0018,9076)":{tag:"(0018,9076)",vr:"SQ",name:"DiffusionGradientDirectionSequence",vm:"1",version:"DICOM"},"(0018,9077)":{tag:"(0018,9077)",vr:"CS",name:"ParallelAcquisition",vm:"1",version:"DICOM"},"(0018,9078)":{tag:"(0018,9078)",vr:"CS",name:"ParallelAcquisitionTechnique",vm:"1",version:"DICOM"},"(0018,9079)":{tag:"(0018,9079)",vr:"FD",name:"InversionTimes",vm:"1-n",version:"DICOM"},"(0018,9080)":{tag:"(0018,9080)",vr:"ST",name:"MetaboliteMapDescription",vm:"1",version:"DICOM"},"(0018,9081)":{tag:"(0018,9081)",vr:"CS",name:"PartialFourier",vm:"1",version:"DICOM"},"(0018,9082)":{tag:"(0018,9082)",vr:"FD",name:"EffectiveEchoTime",vm:"1",version:"DICOM"},"(0018,9083)":{tag:"(0018,9083)",vr:"SQ",name:"MetaboliteMapCodeSequence",vm:"1",version:"DICOM"},"(0018,9084)":{tag:"(0018,9084)",vr:"SQ",name:"ChemicalShiftSequence",vm:"1",version:"DICOM"},"(0018,9085)":{tag:"(0018,9085)",vr:"CS",name:"CardiacSignalSource",vm:"1",version:"DICOM"},"(0018,9087)":{tag:"(0018,9087)",vr:"FD",name:"DiffusionBValue",vm:"1",version:"DICOM"},"(0018,9089)":{tag:"(0018,9089)",vr:"FD",name:"DiffusionGradientOrientation",vm:"3",version:"DICOM"},"(0018,9090)":{tag:"(0018,9090)",vr:"FD",name:"VelocityEncodingDirection",vm:"3",version:"DICOM"},"(0018,9091)":{tag:"(0018,9091)",vr:"FD",name:"VelocityEncodingMinimumValue",vm:"1",version:"DICOM"},"(0018,9092)":{tag:"(0018,9092)",vr:"SQ",name:"VelocityEncodingAcquisitionSequence",vm:"1",version:"DICOM"},"(0018,9093)":{tag:"(0018,9093)",vr:"US",name:"NumberOfKSpaceTrajectories",vm:"1",version:"DICOM"},"(0018,9094)":{tag:"(0018,9094)",vr:"CS",name:"CoverageOfKSpace",vm:"1",version:"DICOM"},"(0018,9095)":{tag:"(0018,9095)",vr:"UL",name:"SpectroscopyAcquisitionPhaseRows",vm:"1",version:"DICOM"},"(0018,9098)":{tag:"(0018,9098)",vr:"FD",name:"TransmitterFrequency",vm:"1-2",version:"DICOM"},"(0018,9100)":{tag:"(0018,9100)",vr:"CS",name:"ResonantNucleus",vm:"1-2",version:"DICOM"},"(0018,9101)":{tag:"(0018,9101)",vr:"CS",name:"FrequencyCorrection",vm:"1",version:"DICOM"},"(0018,9103)":{tag:"(0018,9103)",vr:"SQ",name:"MRSpectroscopyFOVGeometrySequence",vm:"1",version:"DICOM"},"(0018,9104)":{tag:"(0018,9104)",vr:"FD",name:"SlabThickness",vm:"1",version:"DICOM"},"(0018,9105)":{tag:"(0018,9105)",vr:"FD",name:"SlabOrientation",vm:"3",version:"DICOM"},"(0018,9106)":{tag:"(0018,9106)",vr:"FD",name:"MidSlabPosition",vm:"3",version:"DICOM"},"(0018,9107)":{tag:"(0018,9107)",vr:"SQ",name:"MRSpatialSaturationSequence",vm:"1",version:"DICOM"},"(0018,9112)":{tag:"(0018,9112)",vr:"SQ",name:"MRTimingAndRelatedParametersSequence",vm:"1",version:"DICOM"},"(0018,9114)":{tag:"(0018,9114)",vr:"SQ",name:"MREchoSequence",vm:"1",version:"DICOM"},"(0018,9115)":{tag:"(0018,9115)",vr:"SQ",name:"MRModifierSequence",vm:"1",version:"DICOM"},"(0018,9117)":{tag:"(0018,9117)",vr:"SQ",name:"MRDiffusionSequence",vm:"1",version:"DICOM"},"(0018,9118)":{tag:"(0018,9118)",vr:"SQ",name:"CardiacSynchronizationSequence",vm:"1",version:"DICOM"},"(0018,9119)":{tag:"(0018,9119)",vr:"SQ",name:"MRAveragesSequence",vm:"1",version:"DICOM"},"(0018,9125)":{tag:"(0018,9125)",vr:"SQ",name:"MRFOVGeometrySequence",vm:"1",version:"DICOM"},"(0018,9126)":{tag:"(0018,9126)",vr:"SQ",name:"VolumeLocalizationSequence",vm:"1",version:"DICOM"},"(0018,9127)":{tag:"(0018,9127)",vr:"UL",name:"SpectroscopyAcquisitionDataColumns",vm:"1",version:"DICOM"},"(0018,9147)":{tag:"(0018,9147)",vr:"CS",name:"DiffusionAnisotropyType",vm:"1",version:"DICOM"},"(0018,9151)":{tag:"(0018,9151)",vr:"DT",name:"FrameReferenceDateTime",vm:"1",version:"DICOM"},"(0018,9152)":{tag:"(0018,9152)",vr:"SQ",name:"MRMetaboliteMapSequence",vm:"1",version:"DICOM"},"(0018,9155)":{tag:"(0018,9155)",vr:"FD",name:"ParallelReductionFactorOutOfPlane",vm:"1",version:"DICOM"},"(0018,9159)":{tag:"(0018,9159)",vr:"UL",name:"SpectroscopyAcquisitionOutOfPlanePhaseSteps",vm:"1",version:"DICOM"},"(0018,9168)":{tag:"(0018,9168)",vr:"FD",name:"ParallelReductionFactorSecondInPlane",vm:"1",version:"DICOM"},"(0018,9169)":{tag:"(0018,9169)",vr:"CS",name:"CardiacBeatRejectionTechnique",vm:"1",version:"DICOM"},"(0018,9170)":{tag:"(0018,9170)",vr:"CS",name:"RespiratoryMotionCompensationTechnique",vm:"1",version:"DICOM"},"(0018,9171)":{tag:"(0018,9171)",vr:"CS",name:"RespiratorySignalSource",vm:"1",version:"DICOM"},"(0018,9172)":{tag:"(0018,9172)",vr:"CS",name:"BulkMotionCompensationTechnique",vm:"1",version:"DICOM"},"(0018,9173)":{tag:"(0018,9173)",vr:"CS",name:"BulkMotionSignalSource",vm:"1",version:"DICOM"},"(0018,9174)":{tag:"(0018,9174)",vr:"CS",name:"ApplicableSafetyStandardAgency",vm:"1",version:"DICOM"},"(0018,9175)":{tag:"(0018,9175)",vr:"LO",name:"ApplicableSafetyStandardDescription",vm:"1",version:"DICOM"},"(0018,9176)":{tag:"(0018,9176)",vr:"SQ",name:"OperatingModeSequence",vm:"1",version:"DICOM"},"(0018,9177)":{tag:"(0018,9177)",vr:"CS",name:"OperatingModeType",vm:"1",version:"DICOM"},"(0018,9178)":{tag:"(0018,9178)",vr:"CS",name:"OperatingMode",vm:"1",version:"DICOM"},"(0018,9179)":{tag:"(0018,9179)",vr:"CS",name:"SpecificAbsorptionRateDefinition",vm:"1",version:"DICOM"},"(0018,9180)":{tag:"(0018,9180)",vr:"CS",name:"GradientOutputType",vm:"1",version:"DICOM"},"(0018,9181)":{tag:"(0018,9181)",vr:"FD",name:"SpecificAbsorptionRateValue",vm:"1",version:"DICOM"},"(0018,9182)":{tag:"(0018,9182)",vr:"FD",name:"GradientOutput",vm:"1",version:"DICOM"},"(0018,9183)":{tag:"(0018,9183)",vr:"CS",name:"FlowCompensationDirection",vm:"1",version:"DICOM"},"(0018,9184)":{tag:"(0018,9184)",vr:"FD",name:"TaggingDelay",vm:"1",version:"DICOM"},"(0018,9185)":{tag:"(0018,9185)",vr:"ST",name:"RespiratoryMotionCompensationTechniqueDescription",vm:"1",version:"DICOM"},"(0018,9186)":{tag:"(0018,9186)",vr:"SH",name:"RespiratorySignalSourceID",vm:"1",version:"DICOM"},"(0018,9197)":{tag:"(0018,9197)",vr:"SQ",name:"MRVelocityEncodingSequence",vm:"1",version:"DICOM"},"(0018,9198)":{tag:"(0018,9198)",vr:"CS",name:"FirstOrderPhaseCorrection",vm:"1",version:"DICOM"},"(0018,9199)":{tag:"(0018,9199)",vr:"CS",name:"WaterReferencedPhaseCorrection",vm:"1",version:"DICOM"},"(0018,9200)":{tag:"(0018,9200)",vr:"CS",name:"MRSpectroscopyAcquisitionType",vm:"1",version:"DICOM"},"(0018,9214)":{tag:"(0018,9214)",vr:"CS",name:"RespiratoryCyclePosition",vm:"1",version:"DICOM"},"(0018,9217)":{tag:"(0018,9217)",vr:"FD",name:"VelocityEncodingMaximumValue",vm:"1",version:"DICOM"},"(0018,9218)":{tag:"(0018,9218)",vr:"FD",name:"TagSpacingSecondDimension",vm:"1",version:"DICOM"},"(0018,9219)":{tag:"(0018,9219)",vr:"SS",name:"TagAngleSecondAxis",vm:"1",version:"DICOM"},"(0018,9220)":{tag:"(0018,9220)",vr:"FD",name:"FrameAcquisitionDuration",vm:"1",version:"DICOM"},"(0018,9226)":{tag:"(0018,9226)",vr:"SQ",name:"MRImageFrameTypeSequence",vm:"1",version:"DICOM"},"(0018,9227)":{tag:"(0018,9227)",vr:"SQ",name:"MRSpectroscopyFrameTypeSequence",vm:"1",version:"DICOM"},"(0018,9231)":{tag:"(0018,9231)",vr:"US",name:"MRAcquisitionPhaseEncodingStepsInPlane",vm:"1",version:"DICOM"},"(0018,9232)":{tag:"(0018,9232)",vr:"US",name:"MRAcquisitionPhaseEncodingStepsOutOfPlane",vm:"1",version:"DICOM"},"(0018,9234)":{tag:"(0018,9234)",vr:"UL",name:"SpectroscopyAcquisitionPhaseColumns",vm:"1",version:"DICOM"},"(0018,9236)":{tag:"(0018,9236)",vr:"CS",name:"CardiacCyclePosition",vm:"1",version:"DICOM"},"(0018,9239)":{tag:"(0018,9239)",vr:"SQ",name:"SpecificAbsorptionRateSequence",vm:"1",version:"DICOM"},"(0018,9240)":{tag:"(0018,9240)",vr:"US",name:"RFEchoTrainLength",vm:"1",version:"DICOM"},"(0018,9241)":{tag:"(0018,9241)",vr:"US",name:"GradientEchoTrainLength",vm:"1",version:"DICOM"},"(0018,9250)":{tag:"(0018,9250)",vr:"CS",name:"ArterialSpinLabelingContrast",vm:"1",version:"DICOM"},"(0018,9251)":{tag:"(0018,9251)",vr:"SQ",name:"MRArterialSpinLabelingSequence",vm:"1",version:"DICOM"},"(0018,9252)":{tag:"(0018,9252)",vr:"LO",name:"ASLTechniqueDescription",vm:"1",version:"DICOM"},"(0018,9253)":{tag:"(0018,9253)",vr:"US",name:"ASLSlabNumber",vm:"1",version:"DICOM"},"(0018,9254)":{tag:"(0018,9254)",vr:"FD",name:"ASLSlabThickness",vm:"1",version:"DICOM"},"(0018,9255)":{tag:"(0018,9255)",vr:"FD",name:"ASLSlabOrientation",vm:"3",version:"DICOM"},"(0018,9256)":{tag:"(0018,9256)",vr:"FD",name:"ASLMidSlabPosition",vm:"3",version:"DICOM"},"(0018,9257)":{tag:"(0018,9257)",vr:"CS",name:"ASLContext",vm:"1",version:"DICOM"},"(0018,9258)":{tag:"(0018,9258)",vr:"UL",name:"ASLPulseTrainDuration",vm:"1",version:"DICOM"},"(0018,9259)":{tag:"(0018,9259)",vr:"CS",name:"ASLCrusherFlag",vm:"1",version:"DICOM"},"(0018,925A)":{tag:"(0018,925A)",vr:"FD",name:"ASLCrusherFlowLimit",vm:"1",version:"DICOM"},"(0018,925B)":{tag:"(0018,925B)",vr:"LO",name:"ASLCrusherDescription",vm:"1",version:"DICOM"},"(0018,925C)":{tag:"(0018,925C)",vr:"CS",name:"ASLBolusCutoffFlag",vm:"1",version:"DICOM"},"(0018,925D)":{tag:"(0018,925D)",vr:"SQ",name:"ASLBolusCutoffTimingSequence",vm:"1",version:"DICOM"},"(0018,925E)":{tag:"(0018,925E)",vr:"LO",name:"ASLBolusCutoffTechnique",vm:"1",version:"DICOM"},"(0018,925F)":{tag:"(0018,925F)",vr:"UL",name:"ASLBolusCutoffDelayTime",vm:"1",version:"DICOM"},"(0018,9260)":{tag:"(0018,9260)",vr:"SQ",name:"ASLSlabSequence",vm:"1",version:"DICOM"},"(0018,9295)":{tag:"(0018,9295)",vr:"FD",name:"ChemicalShiftMinimumIntegrationLimitInppm",vm:"1",version:"DICOM"},"(0018,9296)":{tag:"(0018,9296)",vr:"FD",name:"ChemicalShiftMaximumIntegrationLimitInppm",vm:"1",version:"DICOM"},"(0018,9297)":{tag:"(0018,9297)",vr:"CS",name:"WaterReferenceAcquisition",vm:"1",version:"DICOM"},"(0018,9298)":{tag:"(0018,9298)",vr:"IS",name:"EchoPeakPosition",vm:"1",version:"DICOM"},"(0018,9301)":{tag:"(0018,9301)",vr:"SQ",name:"CTAcquisitionTypeSequence",vm:"1",version:"DICOM"},"(0018,9302)":{tag:"(0018,9302)",vr:"CS",name:"AcquisitionType",vm:"1",version:"DICOM"},"(0018,9303)":{tag:"(0018,9303)",vr:"FD",name:"TubeAngle",vm:"1",version:"DICOM"},"(0018,9304)":{tag:"(0018,9304)",vr:"SQ",name:"CTAcquisitionDetailsSequence",vm:"1",version:"DICOM"},"(0018,9305)":{tag:"(0018,9305)",vr:"FD",name:"RevolutionTime",vm:"1",version:"DICOM"},"(0018,9306)":{tag:"(0018,9306)",vr:"FD",name:"SingleCollimationWidth",vm:"1",version:"DICOM"},"(0018,9307)":{tag:"(0018,9307)",vr:"FD",name:"TotalCollimationWidth",vm:"1",version:"DICOM"},"(0018,9308)":{tag:"(0018,9308)",vr:"SQ",name:"CTTableDynamicsSequence",vm:"1",version:"DICOM"},"(0018,9309)":{tag:"(0018,9309)",vr:"FD",name:"TableSpeed",vm:"1",version:"DICOM"},"(0018,9310)":{tag:"(0018,9310)",vr:"FD",name:"TableFeedPerRotation",vm:"1",version:"DICOM"},"(0018,9311)":{tag:"(0018,9311)",vr:"FD",name:"SpiralPitchFactor",vm:"1",version:"DICOM"},"(0018,9312)":{tag:"(0018,9312)",vr:"SQ",name:"CTGeometrySequence",vm:"1",version:"DICOM"},"(0018,9313)":{tag:"(0018,9313)",vr:"FD",name:"DataCollectionCenterPatient",vm:"3",version:"DICOM"},"(0018,9314)":{tag:"(0018,9314)",vr:"SQ",name:"CTReconstructionSequence",vm:"1",version:"DICOM"},"(0018,9315)":{tag:"(0018,9315)",vr:"CS",name:"ReconstructionAlgorithm",vm:"1",version:"DICOM"},"(0018,9316)":{tag:"(0018,9316)",vr:"CS",name:"ConvolutionKernelGroup",vm:"1",version:"DICOM"},"(0018,9317)":{tag:"(0018,9317)",vr:"FD",name:"ReconstructionFieldOfView",vm:"2",version:"DICOM"},"(0018,9318)":{tag:"(0018,9318)",vr:"FD",name:"ReconstructionTargetCenterPatient",vm:"3",version:"DICOM"},"(0018,9319)":{tag:"(0018,9319)",vr:"FD",name:"ReconstructionAngle",vm:"1",version:"DICOM"},"(0018,9320)":{tag:"(0018,9320)",vr:"SH",name:"ImageFilter",vm:"1",version:"DICOM"},"(0018,9321)":{tag:"(0018,9321)",vr:"SQ",name:"CTExposureSequence",vm:"1",version:"DICOM"},"(0018,9322)":{tag:"(0018,9322)",vr:"FD",name:"ReconstructionPixelSpacing",vm:"2",version:"DICOM"},"(0018,9323)":{tag:"(0018,9323)",vr:"CS",name:"ExposureModulationType",vm:"1",version:"DICOM"},"(0018,9324)":{tag:"(0018,9324)",vr:"FD",name:"EstimatedDoseSaving",vm:"1",version:"DICOM"},"(0018,9325)":{tag:"(0018,9325)",vr:"SQ",name:"CTXRayDetailsSequence",vm:"1",version:"DICOM"},"(0018,9326)":{tag:"(0018,9326)",vr:"SQ",name:"CTPositionSequence",vm:"1",version:"DICOM"},"(0018,9327)":{tag:"(0018,9327)",vr:"FD",name:"TablePosition",vm:"1",version:"DICOM"},"(0018,9328)":{tag:"(0018,9328)",vr:"FD",name:"ExposureTimeInms",vm:"1",version:"DICOM"},"(0018,9329)":{tag:"(0018,9329)",vr:"SQ",name:"CTImageFrameTypeSequence",vm:"1",version:"DICOM"},"(0018,9330)":{tag:"(0018,9330)",vr:"FD",name:"XRayTubeCurrentInmA",vm:"1",version:"DICOM"},"(0018,9332)":{tag:"(0018,9332)",vr:"FD",name:"ExposureInmAs",vm:"1",version:"DICOM"},"(0018,9333)":{tag:"(0018,9333)",vr:"CS",name:"ConstantVolumeFlag",vm:"1",version:"DICOM"},"(0018,9334)":{tag:"(0018,9334)",vr:"CS",name:"FluoroscopyFlag",vm:"1",version:"DICOM"},"(0018,9335)":{tag:"(0018,9335)",vr:"FD",name:"DistanceSourceToDataCollectionCenter",vm:"1",version:"DICOM"},"(0018,9337)":{tag:"(0018,9337)",vr:"US",name:"ContrastBolusAgentNumber",vm:"1",version:"DICOM"},"(0018,9338)":{tag:"(0018,9338)",vr:"SQ",name:"ContrastBolusIngredientCodeSequence",vm:"1",version:"DICOM"},"(0018,9340)":{tag:"(0018,9340)",vr:"SQ",name:"ContrastAdministrationProfileSequence",vm:"1",version:"DICOM"},"(0018,9341)":{tag:"(0018,9341)",vr:"SQ",name:"ContrastBolusUsageSequence",vm:"1",version:"DICOM"},"(0018,9342)":{tag:"(0018,9342)",vr:"CS",name:"ContrastBolusAgentAdministered",vm:"1",version:"DICOM"},"(0018,9343)":{tag:"(0018,9343)",vr:"CS",name:"ContrastBolusAgentDetected",vm:"1",version:"DICOM"},"(0018,9344)":{tag:"(0018,9344)",vr:"CS",name:"ContrastBolusAgentPhase",vm:"1",version:"DICOM"},"(0018,9345)":{tag:"(0018,9345)",vr:"FD",name:"CTDIvol",vm:"1",version:"DICOM"},"(0018,9346)":{tag:"(0018,9346)",vr:"SQ",name:"CTDIPhantomTypeCodeSequence",vm:"1",version:"DICOM"},"(0018,9351)":{tag:"(0018,9351)",vr:"FL",name:"CalciumScoringMassFactorPatient",vm:"1",version:"DICOM"},"(0018,9352)":{tag:"(0018,9352)",vr:"FL",name:"CalciumScoringMassFactorDevice",vm:"3",version:"DICOM"},"(0018,9353)":{tag:"(0018,9353)",vr:"FL",name:"EnergyWeightingFactor",vm:"1",version:"DICOM"},"(0018,9360)":{tag:"(0018,9360)",vr:"SQ",name:"CTAdditionalXRaySourceSequence",vm:"1",version:"DICOM"},"(0018,9361)":{tag:"(0018,9361)",vr:"CS",name:"MultienergyCTAcquisition",vm:"1",version:"DICOM"},"(0018,9362)":{tag:"(0018,9362)",vr:"SQ",name:"MultienergyCTAcquisitionSequence",vm:"1",version:"DICOM"},"(0018,9363)":{tag:"(0018,9363)",vr:"SQ",name:"MultienergyCTProcessingSequence",vm:"1",version:"DICOM"},"(0018,9364)":{tag:"(0018,9364)",vr:"SQ",name:"MultienergyCTCharacteristicsSequence",vm:"1",version:"DICOM"},"(0018,9365)":{tag:"(0018,9365)",vr:"SQ",name:"MultienergyCTXRaySourceSequence",vm:"1",version:"DICOM"},"(0018,9366)":{tag:"(0018,9366)",vr:"US",name:"XRaySourceIndex",vm:"1",version:"DICOM"},"(0018,9367)":{tag:"(0018,9367)",vr:"UC",name:"XRaySourceID",vm:"1",version:"DICOM"},"(0018,9368)":{tag:"(0018,9368)",vr:"CS",name:"MultienergySourceTechnique",vm:"1",version:"DICOM"},"(0018,9369)":{tag:"(0018,9369)",vr:"DT",name:"SourceStartDateTime",vm:"1",version:"DICOM"},"(0018,936A)":{tag:"(0018,936A)",vr:"DT",name:"SourceEndDateTime",vm:"1",version:"DICOM"},"(0018,936B)":{tag:"(0018,936B)",vr:"US",name:"SwitchingPhaseNumber",vm:"1",version:"DICOM"},"(0018,936C)":{tag:"(0018,936C)",vr:"DS",name:"SwitchingPhaseNominalDuration",vm:"1",version:"DICOM"},"(0018,936D)":{tag:"(0018,936D)",vr:"DS",name:"SwitchingPhaseTransitionDuration",vm:"1",version:"DICOM"},"(0018,936E)":{tag:"(0018,936E)",vr:"DS",name:"EffectiveBinEnergy",vm:"1",version:"DICOM"},"(0018,936F)":{tag:"(0018,936F)",vr:"SQ",name:"MultienergyCTXRayDetectorSequence",vm:"1",version:"DICOM"},"(0018,9370)":{tag:"(0018,9370)",vr:"US",name:"XRayDetectorIndex",vm:"1",version:"DICOM"},"(0018,9371)":{tag:"(0018,9371)",vr:"UC",name:"XRayDetectorID",vm:"1",version:"DICOM"},"(0018,9372)":{tag:"(0018,9372)",vr:"CS",name:"MultienergyDetectorType",vm:"1",version:"DICOM"},"(0018,9373)":{tag:"(0018,9373)",vr:"ST",name:"XRayDetectorLabel",vm:"1",version:"DICOM"},"(0018,9374)":{tag:"(0018,9374)",vr:"DS",name:"NominalMaxEnergy",vm:"1",version:"DICOM"},"(0018,9375)":{tag:"(0018,9375)",vr:"DS",name:"NominalMinEnergy",vm:"1",version:"DICOM"},"(0018,9376)":{tag:"(0018,9376)",vr:"US",name:"ReferencedXRayDetectorIndex",vm:"1-n",version:"DICOM"},"(0018,9377)":{tag:"(0018,9377)",vr:"US",name:"ReferencedXRaySourceIndex",vm:"1-n",version:"DICOM"},"(0018,9378)":{tag:"(0018,9378)",vr:"US",name:"ReferencedPathIndex",vm:"1-n",version:"DICOM"},"(0018,9379)":{tag:"(0018,9379)",vr:"SQ",name:"MultienergyCTPathSequence",vm:"1",version:"DICOM"},"(0018,937A)":{tag:"(0018,937A)",vr:"US",name:"MultienergyCTPathIndex",vm:"1",version:"DICOM"},"(0018,937B)":{tag:"(0018,937B)",vr:"UT",name:"MultienergyAcquisitionDescription",vm:"1",version:"DICOM"},"(0018,937C)":{tag:"(0018,937C)",vr:"FD",name:"MonoenergeticEnergyEquivalent",vm:"1",version:"DICOM"},"(0018,937D)":{tag:"(0018,937D)",vr:"SQ",name:"MaterialCodeSequence",vm:"1",version:"DICOM"},"(0018,937E)":{tag:"(0018,937E)",vr:"CS",name:"DecompositionMethod",vm:"1",version:"DICOM"},"(0018,937F)":{tag:"(0018,937F)",vr:"UT",name:"DecompositionDescription",vm:"1",version:"DICOM"},"(0018,9380)":{tag:"(0018,9380)",vr:"SQ",name:"DecompositionAlgorithmIdentificationSequence",vm:"1",version:"DICOM"},"(0018,9381)":{tag:"(0018,9381)",vr:"SQ",name:"DecompositionMaterialSequence",vm:"1",version:"DICOM"},"(0018,9382)":{tag:"(0018,9382)",vr:"SQ",name:"MaterialAttenuationSequence",vm:"1",version:"DICOM"},"(0018,9383)":{tag:"(0018,9383)",vr:"DS",name:"PhotonEnergy",vm:"1",version:"DICOM"},"(0018,9384)":{tag:"(0018,9384)",vr:"DS",name:"XRayMassAttenuationCoefficient",vm:"1",version:"DICOM"},"(0018,9401)":{tag:"(0018,9401)",vr:"SQ",name:"ProjectionPixelCalibrationSequence",vm:"1",version:"DICOM"},"(0018,9402)":{tag:"(0018,9402)",vr:"FL",name:"DistanceSourceToIsocenter",vm:"1",version:"DICOM"},"(0018,9403)":{tag:"(0018,9403)",vr:"FL",name:"DistanceObjectToTableTop",vm:"1",version:"DICOM"},"(0018,9404)":{tag:"(0018,9404)",vr:"FL",name:"ObjectPixelSpacingInCenterOfBeam",vm:"2",version:"DICOM"},"(0018,9405)":{tag:"(0018,9405)",vr:"SQ",name:"PositionerPositionSequence",vm:"1",version:"DICOM"},"(0018,9406)":{tag:"(0018,9406)",vr:"SQ",name:"TablePositionSequence",vm:"1",version:"DICOM"},"(0018,9407)":{tag:"(0018,9407)",vr:"SQ",name:"CollimatorShapeSequence",vm:"1",version:"DICOM"},"(0018,9410)":{tag:"(0018,9410)",vr:"CS",name:"PlanesInAcquisition",vm:"1",version:"DICOM"},"(0018,9412)":{tag:"(0018,9412)",vr:"SQ",name:"XAXRFFrameCharacteristicsSequence",vm:"1",version:"DICOM"},"(0018,9417)":{tag:"(0018,9417)",vr:"SQ",name:"FrameAcquisitionSequence",vm:"1",version:"DICOM"},"(0018,9420)":{tag:"(0018,9420)",vr:"CS",name:"XRayReceptorType",vm:"1",version:"DICOM"},"(0018,9423)":{tag:"(0018,9423)",vr:"LO",name:"AcquisitionProtocolName",vm:"1",version:"DICOM"},"(0018,9424)":{tag:"(0018,9424)",vr:"LT",name:"AcquisitionProtocolDescription",vm:"1",version:"DICOM"},"(0018,9425)":{tag:"(0018,9425)",vr:"CS",name:"ContrastBolusIngredientOpaque",vm:"1",version:"DICOM"},"(0018,9426)":{tag:"(0018,9426)",vr:"FL",name:"DistanceReceptorPlaneToDetectorHousing",vm:"1",version:"DICOM"},"(0018,9427)":{tag:"(0018,9427)",vr:"CS",name:"IntensifierActiveShape",vm:"1",version:"DICOM"},"(0018,9428)":{tag:"(0018,9428)",vr:"FL",name:"IntensifierActiveDimensions",vm:"1-2",version:"DICOM"},"(0018,9429)":{tag:"(0018,9429)",vr:"FL",name:"PhysicalDetectorSize",vm:"2",version:"DICOM"},"(0018,9430)":{tag:"(0018,9430)",vr:"FL",name:"PositionOfIsocenterProjection",vm:"2",version:"DICOM"},"(0018,9432)":{tag:"(0018,9432)",vr:"SQ",name:"FieldOfViewSequence",vm:"1",version:"DICOM"},"(0018,9433)":{tag:"(0018,9433)",vr:"LO",name:"FieldOfViewDescription",vm:"1",version:"DICOM"},"(0018,9434)":{tag:"(0018,9434)",vr:"SQ",name:"ExposureControlSensingRegionsSequence",vm:"1",version:"DICOM"},"(0018,9435)":{tag:"(0018,9435)",vr:"CS",name:"ExposureControlSensingRegionShape",vm:"1",version:"DICOM"},"(0018,9436)":{tag:"(0018,9436)",vr:"SS",name:"ExposureControlSensingRegionLeftVerticalEdge",vm:"1",version:"DICOM"},"(0018,9437)":{tag:"(0018,9437)",vr:"SS",name:"ExposureControlSensingRegionRightVerticalEdge",vm:"1",version:"DICOM"},"(0018,9438)":{tag:"(0018,9438)",vr:"SS",name:"ExposureControlSensingRegionUpperHorizontalEdge",vm:"1",version:"DICOM"},"(0018,9439)":{tag:"(0018,9439)",vr:"SS",name:"ExposureControlSensingRegionLowerHorizontalEdge",vm:"1",version:"DICOM"},"(0018,9440)":{tag:"(0018,9440)",vr:"SS",name:"CenterOfCircularExposureControlSensingRegion",vm:"2",version:"DICOM"},"(0018,9441)":{tag:"(0018,9441)",vr:"US",name:"RadiusOfCircularExposureControlSensingRegion",vm:"1",version:"DICOM"},"(0018,9442)":{tag:"(0018,9442)",vr:"SS",name:"VerticesOfThePolygonalExposureControlSensingRegion",vm:"2-n",version:"DICOM"},"(0018,9447)":{tag:"(0018,9447)",vr:"FL",name:"ColumnAngulationPatient",vm:"1",version:"DICOM"},"(0018,9449)":{tag:"(0018,9449)",vr:"FL",name:"BeamAngle",vm:"1",version:"DICOM"},"(0018,9451)":{tag:"(0018,9451)",vr:"SQ",name:"FrameDetectorParametersSequence",vm:"1",version:"DICOM"},"(0018,9452)":{tag:"(0018,9452)",vr:"FL",name:"CalculatedAnatomyThickness",vm:"1",version:"DICOM"},"(0018,9455)":{tag:"(0018,9455)",vr:"SQ",name:"CalibrationSequence",vm:"1",version:"DICOM"},"(0018,9456)":{tag:"(0018,9456)",vr:"SQ",name:"ObjectThicknessSequence",vm:"1",version:"DICOM"},"(0018,9457)":{tag:"(0018,9457)",vr:"CS",name:"PlaneIdentification",vm:"1",version:"DICOM"},"(0018,9461)":{tag:"(0018,9461)",vr:"FL",name:"FieldOfViewDimensionsInFloat",vm:"1-2",version:"DICOM"},"(0018,9462)":{tag:"(0018,9462)",vr:"SQ",name:"IsocenterReferenceSystemSequence",vm:"1",version:"DICOM"},"(0018,9463)":{tag:"(0018,9463)",vr:"FL",name:"PositionerIsocenterPrimaryAngle",vm:"1",version:"DICOM"},"(0018,9464)":{tag:"(0018,9464)",vr:"FL",name:"PositionerIsocenterSecondaryAngle",vm:"1",version:"DICOM"},"(0018,9465)":{tag:"(0018,9465)",vr:"FL",name:"PositionerIsocenterDetectorRotationAngle",vm:"1",version:"DICOM"},"(0018,9466)":{tag:"(0018,9466)",vr:"FL",name:"TableXPositionToIsocenter",vm:"1",version:"DICOM"},"(0018,9467)":{tag:"(0018,9467)",vr:"FL",name:"TableYPositionToIsocenter",vm:"1",version:"DICOM"},"(0018,9468)":{tag:"(0018,9468)",vr:"FL",name:"TableZPositionToIsocenter",vm:"1",version:"DICOM"},"(0018,9469)":{tag:"(0018,9469)",vr:"FL",name:"TableHorizontalRotationAngle",vm:"1",version:"DICOM"},"(0018,9470)":{tag:"(0018,9470)",vr:"FL",name:"TableHeadTiltAngle",vm:"1",version:"DICOM"},"(0018,9471)":{tag:"(0018,9471)",vr:"FL",name:"TableCradleTiltAngle",vm:"1",version:"DICOM"},"(0018,9472)":{tag:"(0018,9472)",vr:"SQ",name:"FrameDisplayShutterSequence",vm:"1",version:"DICOM"},"(0018,9473)":{tag:"(0018,9473)",vr:"FL",name:"AcquiredImageAreaDoseProduct",vm:"1",version:"DICOM"},"(0018,9474)":{tag:"(0018,9474)",vr:"CS",name:"CArmPositionerTabletopRelationship",vm:"1",version:"DICOM"},"(0018,9476)":{tag:"(0018,9476)",vr:"SQ",name:"XRayGeometrySequence",vm:"1",version:"DICOM"},"(0018,9477)":{tag:"(0018,9477)",vr:"SQ",name:"IrradiationEventIdentificationSequence",vm:"1",version:"DICOM"},"(0018,9504)":{tag:"(0018,9504)",vr:"SQ",name:"XRay3DFrameTypeSequence",vm:"1",version:"DICOM"},"(0018,9506)":{tag:"(0018,9506)",vr:"SQ",name:"ContributingSourcesSequence",vm:"1",version:"DICOM"},"(0018,9507)":{tag:"(0018,9507)",vr:"SQ",name:"XRay3DAcquisitionSequence",vm:"1",version:"DICOM"},"(0018,9508)":{tag:"(0018,9508)",vr:"FL",name:"PrimaryPositionerScanArc",vm:"1",version:"DICOM"},"(0018,9509)":{tag:"(0018,9509)",vr:"FL",name:"SecondaryPositionerScanArc",vm:"1",version:"DICOM"},"(0018,9510)":{tag:"(0018,9510)",vr:"FL",name:"PrimaryPositionerScanStartAngle",vm:"1",version:"DICOM"},"(0018,9511)":{tag:"(0018,9511)",vr:"FL",name:"SecondaryPositionerScanStartAngle",vm:"1",version:"DICOM"},"(0018,9514)":{tag:"(0018,9514)",vr:"FL",name:"PrimaryPositionerIncrement",vm:"1",version:"DICOM"},"(0018,9515)":{tag:"(0018,9515)",vr:"FL",name:"SecondaryPositionerIncrement",vm:"1",version:"DICOM"},"(0018,9516)":{tag:"(0018,9516)",vr:"DT",name:"StartAcquisitionDateTime",vm:"1",version:"DICOM"},"(0018,9517)":{tag:"(0018,9517)",vr:"DT",name:"EndAcquisitionDateTime",vm:"1",version:"DICOM"},"(0018,9518)":{tag:"(0018,9518)",vr:"SS",name:"PrimaryPositionerIncrementSign",vm:"1",version:"DICOM"},"(0018,9519)":{tag:"(0018,9519)",vr:"SS",name:"SecondaryPositionerIncrementSign",vm:"1",version:"DICOM"},"(0018,9524)":{tag:"(0018,9524)",vr:"LO",name:"ApplicationName",vm:"1",version:"DICOM"},"(0018,9525)":{tag:"(0018,9525)",vr:"LO",name:"ApplicationVersion",vm:"1",version:"DICOM"},"(0018,9526)":{tag:"(0018,9526)",vr:"LO",name:"ApplicationManufacturer",vm:"1",version:"DICOM"},"(0018,9527)":{tag:"(0018,9527)",vr:"CS",name:"AlgorithmType",vm:"1",version:"DICOM"},"(0018,9528)":{tag:"(0018,9528)",vr:"LO",name:"AlgorithmDescription",vm:"1",version:"DICOM"},"(0018,9530)":{tag:"(0018,9530)",vr:"SQ",name:"XRay3DReconstructionSequence",vm:"1",version:"DICOM"},"(0018,9531)":{tag:"(0018,9531)",vr:"LO",name:"ReconstructionDescription",vm:"1",version:"DICOM"},"(0018,9538)":{tag:"(0018,9538)",vr:"SQ",name:"PerProjectionAcquisitionSequence",vm:"1",version:"DICOM"},"(0018,9541)":{tag:"(0018,9541)",vr:"SQ",name:"DetectorPositionSequence",vm:"1",version:"DICOM"},"(0018,9542)":{tag:"(0018,9542)",vr:"SQ",name:"XRayAcquisitionDoseSequence",vm:"1",version:"DICOM"},"(0018,9543)":{tag:"(0018,9543)",vr:"FD",name:"XRaySourceIsocenterPrimaryAngle",vm:"1",version:"DICOM"},"(0018,9544)":{tag:"(0018,9544)",vr:"FD",name:"XRaySourceIsocenterSecondaryAngle",vm:"1",version:"DICOM"},"(0018,9545)":{tag:"(0018,9545)",vr:"FD",name:"BreastSupportIsocenterPrimaryAngle",vm:"1",version:"DICOM"},"(0018,9546)":{tag:"(0018,9546)",vr:"FD",name:"BreastSupportIsocenterSecondaryAngle",vm:"1",version:"DICOM"},"(0018,9547)":{tag:"(0018,9547)",vr:"FD",name:"BreastSupportXPositionToIsocenter",vm:"1",version:"DICOM"},"(0018,9548)":{tag:"(0018,9548)",vr:"FD",name:"BreastSupportYPositionToIsocenter",vm:"1",version:"DICOM"},"(0018,9549)":{tag:"(0018,9549)",vr:"FD",name:"BreastSupportZPositionToIsocenter",vm:"1",version:"DICOM"},"(0018,9550)":{tag:"(0018,9550)",vr:"FD",name:"DetectorIsocenterPrimaryAngle",vm:"1",version:"DICOM"},"(0018,9551)":{tag:"(0018,9551)",vr:"FD",name:"DetectorIsocenterSecondaryAngle",vm:"1",version:"DICOM"},"(0018,9552)":{tag:"(0018,9552)",vr:"FD",name:"DetectorXPositionToIsocenter",vm:"1",version:"DICOM"},"(0018,9553)":{tag:"(0018,9553)",vr:"FD",name:"DetectorYPositionToIsocenter",vm:"1",version:"DICOM"},"(0018,9554)":{tag:"(0018,9554)",vr:"FD",name:"DetectorZPositionToIsocenter",vm:"1",version:"DICOM"},"(0018,9555)":{tag:"(0018,9555)",vr:"SQ",name:"XRayGridSequence",vm:"1",version:"DICOM"},"(0018,9556)":{tag:"(0018,9556)",vr:"SQ",name:"XRayFilterSequence",vm:"1",version:"DICOM"},"(0018,9557)":{tag:"(0018,9557)",vr:"FD",name:"DetectorActiveAreaTLHCPosition",vm:"3",version:"DICOM"},"(0018,9558)":{tag:"(0018,9558)",vr:"FD",name:"DetectorActiveAreaOrientation",vm:"6",version:"DICOM"},"(0018,9559)":{tag:"(0018,9559)",vr:"CS",name:"PositionerPrimaryAngleDirection",vm:"1",version:"DICOM"},"(0018,9601)":{tag:"(0018,9601)",vr:"SQ",name:"DiffusionBMatrixSequence",vm:"1",version:"DICOM"},"(0018,9602)":{tag:"(0018,9602)",vr:"FD",name:"DiffusionBValueXX",vm:"1",version:"DICOM"},"(0018,9603)":{tag:"(0018,9603)",vr:"FD",name:"DiffusionBValueXY",vm:"1",version:"DICOM"},"(0018,9604)":{tag:"(0018,9604)",vr:"FD",name:"DiffusionBValueXZ",vm:"1",version:"DICOM"},"(0018,9605)":{tag:"(0018,9605)",vr:"FD",name:"DiffusionBValueYY",vm:"1",version:"DICOM"},"(0018,9606)":{tag:"(0018,9606)",vr:"FD",name:"DiffusionBValueYZ",vm:"1",version:"DICOM"},"(0018,9607)":{tag:"(0018,9607)",vr:"FD",name:"DiffusionBValueZZ",vm:"1",version:"DICOM"},"(0018,9621)":{tag:"(0018,9621)",vr:"SQ",name:"FunctionalMRSequence",vm:"1",version:"DICOM"},"(0018,9622)":{tag:"(0018,9622)",vr:"CS",name:"FunctionalSettlingPhaseFramesPresent",vm:"1",version:"DICOM"},"(0018,9623)":{tag:"(0018,9623)",vr:"DT",name:"FunctionalSyncPulse",vm:"1",version:"DICOM"},"(0018,9624)":{tag:"(0018,9624)",vr:"CS",name:"SettlingPhaseFrame",vm:"1",version:"DICOM"},"(0018,9701)":{tag:"(0018,9701)",vr:"DT",name:"DecayCorrectionDateTime",vm:"1",version:"DICOM"},"(0018,9715)":{tag:"(0018,9715)",vr:"FD",name:"StartDensityThreshold",vm:"1",version:"DICOM"},"(0018,9716)":{tag:"(0018,9716)",vr:"FD",name:"StartRelativeDensityDifferenceThreshold",vm:"1",version:"DICOM"},"(0018,9717)":{tag:"(0018,9717)",vr:"FD",name:"StartCardiacTriggerCountThreshold",vm:"1",version:"DICOM"},"(0018,9718)":{tag:"(0018,9718)",vr:"FD",name:"StartRespiratoryTriggerCountThreshold",vm:"1",version:"DICOM"},"(0018,9719)":{tag:"(0018,9719)",vr:"FD",name:"TerminationCountsThreshold",vm:"1",version:"DICOM"},"(0018,9720)":{tag:"(0018,9720)",vr:"FD",name:"TerminationDensityThreshold",vm:"1",version:"DICOM"},"(0018,9721)":{tag:"(0018,9721)",vr:"FD",name:"TerminationRelativeDensityThreshold",vm:"1",version:"DICOM"},"(0018,9722)":{tag:"(0018,9722)",vr:"FD",name:"TerminationTimeThreshold",vm:"1",version:"DICOM"},"(0018,9723)":{tag:"(0018,9723)",vr:"FD",name:"TerminationCardiacTriggerCountThreshold",vm:"1",version:"DICOM"},"(0018,9724)":{tag:"(0018,9724)",vr:"FD",name:"TerminationRespiratoryTriggerCountThreshold",vm:"1",version:"DICOM"},"(0018,9725)":{tag:"(0018,9725)",vr:"CS",name:"DetectorGeometry",vm:"1",version:"DICOM"},"(0018,9726)":{tag:"(0018,9726)",vr:"FD",name:"TransverseDetectorSeparation",vm:"1",version:"DICOM"},"(0018,9727)":{tag:"(0018,9727)",vr:"FD",name:"AxialDetectorDimension",vm:"1",version:"DICOM"},"(0018,9729)":{tag:"(0018,9729)",vr:"US",name:"RadiopharmaceuticalAgentNumber",vm:"1",version:"DICOM"},"(0018,9732)":{tag:"(0018,9732)",vr:"SQ",name:"PETFrameAcquisitionSequence",vm:"1",version:"DICOM"},"(0018,9733)":{tag:"(0018,9733)",vr:"SQ",name:"PETDetectorMotionDetailsSequence",vm:"1",version:"DICOM"},"(0018,9734)":{tag:"(0018,9734)",vr:"SQ",name:"PETTableDynamicsSequence",vm:"1",version:"DICOM"},"(0018,9735)":{tag:"(0018,9735)",vr:"SQ",name:"PETPositionSequence",vm:"1",version:"DICOM"},"(0018,9736)":{tag:"(0018,9736)",vr:"SQ",name:"PETFrameCorrectionFactorsSequence",vm:"1",version:"DICOM"},"(0018,9737)":{tag:"(0018,9737)",vr:"SQ",name:"RadiopharmaceuticalUsageSequence",vm:"1",version:"DICOM"},"(0018,9738)":{tag:"(0018,9738)",vr:"CS",name:"AttenuationCorrectionSource",vm:"1",version:"DICOM"},"(0018,9739)":{tag:"(0018,9739)",vr:"US",name:"NumberOfIterations",vm:"1",version:"DICOM"},"(0018,9740)":{tag:"(0018,9740)",vr:"US",name:"NumberOfSubsets",vm:"1",version:"DICOM"},"(0018,9749)":{tag:"(0018,9749)",vr:"SQ",name:"PETReconstructionSequence",vm:"1",version:"DICOM"},"(0018,9751)":{tag:"(0018,9751)",vr:"SQ",name:"PETFrameTypeSequence",vm:"1",version:"DICOM"},"(0018,9755)":{tag:"(0018,9755)",vr:"CS",name:"TimeOfFlightInformationUsed",vm:"1",version:"DICOM"},"(0018,9756)":{tag:"(0018,9756)",vr:"CS",name:"ReconstructionType",vm:"1",version:"DICOM"},"(0018,9758)":{tag:"(0018,9758)",vr:"CS",name:"DecayCorrected",vm:"1",version:"DICOM"},"(0018,9759)":{tag:"(0018,9759)",vr:"CS",name:"AttenuationCorrected",vm:"1",version:"DICOM"},"(0018,9760)":{tag:"(0018,9760)",vr:"CS",name:"ScatterCorrected",vm:"1",version:"DICOM"},"(0018,9761)":{tag:"(0018,9761)",vr:"CS",name:"DeadTimeCorrected",vm:"1",version:"DICOM"},"(0018,9762)":{tag:"(0018,9762)",vr:"CS",name:"GantryMotionCorrected",vm:"1",version:"DICOM"},"(0018,9763)":{tag:"(0018,9763)",vr:"CS",name:"PatientMotionCorrected",vm:"1",version:"DICOM"},"(0018,9764)":{tag:"(0018,9764)",vr:"CS",name:"CountLossNormalizationCorrected",vm:"1",version:"DICOM"},"(0018,9765)":{tag:"(0018,9765)",vr:"CS",name:"RandomsCorrected",vm:"1",version:"DICOM"},"(0018,9766)":{tag:"(0018,9766)",vr:"CS",name:"NonUniformRadialSamplingCorrected",vm:"1",version:"DICOM"},"(0018,9767)":{tag:"(0018,9767)",vr:"CS",name:"SensitivityCalibrated",vm:"1",version:"DICOM"},"(0018,9768)":{tag:"(0018,9768)",vr:"CS",name:"DetectorNormalizationCorrection",vm:"1",version:"DICOM"},"(0018,9769)":{tag:"(0018,9769)",vr:"CS",name:"IterativeReconstructionMethod",vm:"1",version:"DICOM"},"(0018,9770)":{tag:"(0018,9770)",vr:"CS",name:"AttenuationCorrectionTemporalRelationship",vm:"1",version:"DICOM"},"(0018,9771)":{tag:"(0018,9771)",vr:"SQ",name:"PatientPhysiologicalStateSequence",vm:"1",version:"DICOM"},"(0018,9772)":{tag:"(0018,9772)",vr:"SQ",name:"PatientPhysiologicalStateCodeSequence",vm:"1",version:"DICOM"},"(0018,9801)":{tag:"(0018,9801)",vr:"FD",name:"DepthsOfFocus",vm:"1-n",version:"DICOM"},"(0018,9803)":{tag:"(0018,9803)",vr:"SQ",name:"ExcludedIntervalsSequence",vm:"1",version:"DICOM"},"(0018,9804)":{tag:"(0018,9804)",vr:"DT",name:"ExclusionStartDateTime",vm:"1",version:"DICOM"},"(0018,9805)":{tag:"(0018,9805)",vr:"FD",name:"ExclusionDuration",vm:"1",version:"DICOM"},"(0018,9806)":{tag:"(0018,9806)",vr:"SQ",name:"USImageDescriptionSequence",vm:"1",version:"DICOM"},"(0018,9807)":{tag:"(0018,9807)",vr:"SQ",name:"ImageDataTypeSequence",vm:"1",version:"DICOM"},"(0018,9808)":{tag:"(0018,9808)",vr:"CS",name:"DataType",vm:"1",version:"DICOM"},"(0018,9809)":{tag:"(0018,9809)",vr:"SQ",name:"TransducerScanPatternCodeSequence",vm:"1",version:"DICOM"},"(0018,980B)":{tag:"(0018,980B)",vr:"CS",name:"AliasedDataType",vm:"1",version:"DICOM"},"(0018,980C)":{tag:"(0018,980C)",vr:"CS",name:"PositionMeasuringDeviceUsed",vm:"1",version:"DICOM"},"(0018,980D)":{tag:"(0018,980D)",vr:"SQ",name:"TransducerGeometryCodeSequence",vm:"1",version:"DICOM"},"(0018,980E)":{tag:"(0018,980E)",vr:"SQ",name:"TransducerBeamSteeringCodeSequence",vm:"1",version:"DICOM"},"(0018,980F)":{tag:"(0018,980F)",vr:"SQ",name:"TransducerApplicationCodeSequence",vm:"1",version:"DICOM"},"(0018,9810)":{tag:"(0018,9810)",vr:"xs",name:"ZeroVelocityPixelValue",vm:"1",version:"DICOM"},"(0018,9900)":{tag:"(0018,9900)",vr:"LO",name:"ReferenceLocationLabel",vm:"1",version:"DICOM"},"(0018,9901)":{tag:"(0018,9901)",vr:"UT",name:"ReferenceLocationDescription",vm:"1",version:"DICOM"},"(0018,9902)":{tag:"(0018,9902)",vr:"SQ",name:"ReferenceBasisCodeSequence",vm:"1",version:"DICOM"},"(0018,9903)":{tag:"(0018,9903)",vr:"SQ",name:"ReferenceGeometryCodeSequence",vm:"1",version:"DICOM"},"(0018,9904)":{tag:"(0018,9904)",vr:"DS",name:"OffsetDistance",vm:"1",version:"DICOM"},"(0018,9905)":{tag:"(0018,9905)",vr:"CS",name:"OffsetDirection",vm:"1",version:"DICOM"},"(0018,9906)":{tag:"(0018,9906)",vr:"SQ",name:"PotentialScheduledProtocolCodeSequence",vm:"1",version:"DICOM"},"(0018,9907)":{tag:"(0018,9907)",vr:"SQ",name:"PotentialRequestedProcedureCodeSequence",vm:"1",version:"DICOM"},"(0018,9908)":{tag:"(0018,9908)",vr:"UC",name:"PotentialReasonsForProcedure",vm:"1-n",version:"DICOM"},"(0018,9909)":{tag:"(0018,9909)",vr:"SQ",name:"PotentialReasonsForProcedureCodeSequence",vm:"1",version:"DICOM"},"(0018,990A)":{tag:"(0018,990A)",vr:"UC",name:"PotentialDiagnosticTasks",vm:"1-n",version:"DICOM"},"(0018,990B)":{tag:"(0018,990B)",vr:"SQ",name:"ContraindicationsCodeSequence",vm:"1",version:"DICOM"},"(0018,990C)":{tag:"(0018,990C)",vr:"SQ",name:"ReferencedDefinedProtocolSequence",vm:"1",version:"DICOM"},"(0018,990D)":{tag:"(0018,990D)",vr:"SQ",name:"ReferencedPerformedProtocolSequence",vm:"1",version:"DICOM"},"(0018,990E)":{tag:"(0018,990E)",vr:"SQ",name:"PredecessorProtocolSequence",vm:"1",version:"DICOM"},"(0018,990F)":{tag:"(0018,990F)",vr:"UT",name:"ProtocolPlanningInformation",vm:"1",version:"DICOM"},"(0018,9910)":{tag:"(0018,9910)",vr:"UT",name:"ProtocolDesignRationale",vm:"1",version:"DICOM"},"(0018,9911)":{tag:"(0018,9911)",vr:"SQ",name:"PatientSpecificationSequence",vm:"1",version:"DICOM"},"(0018,9912)":{tag:"(0018,9912)",vr:"SQ",name:"ModelSpecificationSequence",vm:"1",version:"DICOM"},"(0018,9913)":{tag:"(0018,9913)",vr:"SQ",name:"ParametersSpecificationSequence",vm:"1",version:"DICOM"},"(0018,9914)":{tag:"(0018,9914)",vr:"SQ",name:"InstructionSequence",vm:"1",version:"DICOM"},"(0018,9915)":{tag:"(0018,9915)",vr:"US",name:"InstructionIndex",vm:"1",version:"DICOM"},"(0018,9916)":{tag:"(0018,9916)",vr:"LO",name:"InstructionText",vm:"1",version:"DICOM"},"(0018,9917)":{tag:"(0018,9917)",vr:"UT",name:"InstructionDescription",vm:"1",version:"DICOM"},"(0018,9918)":{tag:"(0018,9918)",vr:"CS",name:"InstructionPerformedFlag",vm:"1",version:"DICOM"},"(0018,9919)":{tag:"(0018,9919)",vr:"DT",name:"InstructionPerformedDateTime",vm:"1",version:"DICOM"},"(0018,991A)":{tag:"(0018,991A)",vr:"UT",name:"InstructionPerformanceComment",vm:"1",version:"DICOM"},"(0018,991B)":{tag:"(0018,991B)",vr:"SQ",name:"PatientPositioningInstructionSequence",vm:"1",version:"DICOM"},"(0018,991C)":{tag:"(0018,991C)",vr:"SQ",name:"PositioningMethodCodeSequence",vm:"1",version:"DICOM"},"(0018,991D)":{tag:"(0018,991D)",vr:"SQ",name:"PositioningLandmarkSequence",vm:"1",version:"DICOM"},"(0018,991E)":{tag:"(0018,991E)",vr:"UI",name:"TargetFrameOfReferenceUID",vm:"1",version:"DICOM"},"(0018,991F)":{tag:"(0018,991F)",vr:"SQ",name:"AcquisitionProtocolElementSpecificationSequence",vm:"1",version:"DICOM"},"(0018,9920)":{tag:"(0018,9920)",vr:"SQ",name:"AcquisitionProtocolElementSequence",vm:"1",version:"DICOM"},"(0018,9921)":{tag:"(0018,9921)",vr:"US",name:"ProtocolElementNumber",vm:"1",version:"DICOM"},"(0018,9922)":{tag:"(0018,9922)",vr:"LO",name:"ProtocolElementName",vm:"1",version:"DICOM"},"(0018,9923)":{tag:"(0018,9923)",vr:"UT",name:"ProtocolElementCharacteristicsSummary",vm:"1",version:"DICOM"},"(0018,9924)":{tag:"(0018,9924)",vr:"UT",name:"ProtocolElementPurpose",vm:"1",version:"DICOM"},"(0018,9930)":{tag:"(0018,9930)",vr:"CS",name:"AcquisitionMotion",vm:"1",version:"DICOM"},"(0018,9931)":{tag:"(0018,9931)",vr:"SQ",name:"AcquisitionStartLocationSequence",vm:"1",version:"DICOM"},"(0018,9932)":{tag:"(0018,9932)",vr:"SQ",name:"AcquisitionEndLocationSequence",vm:"1",version:"DICOM"},"(0018,9933)":{tag:"(0018,9933)",vr:"SQ",name:"ReconstructionProtocolElementSpecificationSequence",vm:"1",version:"DICOM"},"(0018,9934)":{tag:"(0018,9934)",vr:"SQ",name:"ReconstructionProtocolElementSequence",vm:"1",version:"DICOM"},"(0018,9935)":{tag:"(0018,9935)",vr:"SQ",name:"StorageProtocolElementSpecificationSequence",vm:"1",version:"DICOM"},"(0018,9936)":{tag:"(0018,9936)",vr:"SQ",name:"StorageProtocolElementSequence",vm:"1",version:"DICOM"},"(0018,9937)":{tag:"(0018,9937)",vr:"LO",name:"RequestedSeriesDescription",vm:"1",version:"DICOM"},"(0018,9938)":{tag:"(0018,9938)",vr:"US",name:"SourceAcquisitionProtocolElementNumber",vm:"1-n",version:"DICOM"},"(0018,9939)":{tag:"(0018,9939)",vr:"US",name:"SourceAcquisitionBeamNumber",vm:"1-n",version:"DICOM"},"(0018,993A)":{tag:"(0018,993A)",vr:"US",name:"SourceReconstructionProtocolElementNumber",vm:"1-n",version:"DICOM"},"(0018,993B)":{tag:"(0018,993B)",vr:"SQ",name:"ReconstructionStartLocationSequence",vm:"1",version:"DICOM"},"(0018,993C)":{tag:"(0018,993C)",vr:"SQ",name:"ReconstructionEndLocationSequence",vm:"1",version:"DICOM"},"(0018,993D)":{tag:"(0018,993D)",vr:"SQ",name:"ReconstructionAlgorithmSequence",vm:"1",version:"DICOM"},"(0018,993E)":{tag:"(0018,993E)",vr:"SQ",name:"ReconstructionTargetCenterLocationSequence",vm:"1",version:"DICOM"},"(0018,9941)":{tag:"(0018,9941)",vr:"UT",name:"ImageFilterDescription",vm:"1",version:"DICOM"},"(0018,9942)":{tag:"(0018,9942)",vr:"FD",name:"CTDIvolNotificationTrigger",vm:"1",version:"DICOM"},"(0018,9943)":{tag:"(0018,9943)",vr:"FD",name:"DLPNotificationTrigger",vm:"1",version:"DICOM"},"(0018,9944)":{tag:"(0018,9944)",vr:"CS",name:"AutoKVPSelectionType",vm:"1",version:"DICOM"},"(0018,9945)":{tag:"(0018,9945)",vr:"FD",name:"AutoKVPUpperBound",vm:"1",version:"DICOM"},"(0018,9946)":{tag:"(0018,9946)",vr:"FD",name:"AutoKVPLowerBound",vm:"1",version:"DICOM"},"(0018,9947)":{tag:"(0018,9947)",vr:"CS",name:"ProtocolDefinedPatientPosition",vm:"1",version:"DICOM"},"(0018,A001)":{tag:"(0018,A001)",vr:"SQ",name:"ContributingEquipmentSequence",vm:"1",version:"DICOM"},"(0018,A002)":{tag:"(0018,A002)",vr:"DT",name:"ContributionDateTime",vm:"1",version:"DICOM"},"(0018,A003)":{tag:"(0018,A003)",vr:"ST",name:"ContributionDescription",vm:"1",version:"DICOM"},"(0020,000D)":{tag:"(0020,000D)",vr:"UI",name:"StudyInstanceUID",vm:"1",version:"DICOM"},"(0020,000E)":{tag:"(0020,000E)",vr:"UI",name:"SeriesInstanceUID",vm:"1",version:"DICOM"},"(0020,0010)":{tag:"(0020,0010)",vr:"SH",name:"StudyID",vm:"1",version:"DICOM"},"(0020,0011)":{tag:"(0020,0011)",vr:"IS",name:"SeriesNumber",vm:"1",version:"DICOM"},"(0020,0012)":{tag:"(0020,0012)",vr:"IS",name:"AcquisitionNumber",vm:"1",version:"DICOM"},"(0020,0013)":{tag:"(0020,0013)",vr:"IS",name:"InstanceNumber",vm:"1",version:"DICOM"},"(0020,0019)":{tag:"(0020,0019)",vr:"IS",name:"ItemNumber",vm:"1",version:"DICOM"},"(0020,0020)":{tag:"(0020,0020)",vr:"CS",name:"PatientOrientation",vm:"2",version:"DICOM"},"(0020,0032)":{tag:"(0020,0032)",vr:"DS",name:"ImagePositionPatient",vm:"3",version:"DICOM"},"(0020,0037)":{tag:"(0020,0037)",vr:"DS",name:"ImageOrientationPatient",vm:"6",version:"DICOM"},"(0020,0052)":{tag:"(0020,0052)",vr:"UI",name:"FrameOfReferenceUID",vm:"1",version:"DICOM"},"(0020,0060)":{tag:"(0020,0060)",vr:"CS",name:"Laterality",vm:"1",version:"DICOM"},"(0020,0062)":{tag:"(0020,0062)",vr:"CS",name:"ImageLaterality",vm:"1",version:"DICOM"},"(0020,0100)":{tag:"(0020,0100)",vr:"IS",name:"TemporalPositionIdentifier",vm:"1",version:"DICOM"},"(0020,0105)":{tag:"(0020,0105)",vr:"IS",name:"NumberOfTemporalPositions",vm:"1",version:"DICOM"},"(0020,0110)":{tag:"(0020,0110)",vr:"DS",name:"TemporalResolution",vm:"1",version:"DICOM"},"(0020,0200)":{tag:"(0020,0200)",vr:"UI",name:"SynchronizationFrameOfReferenceUID",vm:"1",version:"DICOM"},"(0020,0242)":{tag:"(0020,0242)",vr:"UI",name:"SOPInstanceUIDOfConcatenationSource",vm:"1",version:"DICOM"},"(0020,1002)":{tag:"(0020,1002)",vr:"IS",name:"ImagesInAcquisition",vm:"1",version:"DICOM"},"(0020,103F)":{tag:"(0020,103F)",vr:"LO",name:"TargetPositionReferenceIndicator",vm:"1",version:"DICOM"},"(0020,1040)":{tag:"(0020,1040)",vr:"LO",name:"PositionReferenceIndicator",vm:"1",version:"DICOM"},"(0020,1041)":{tag:"(0020,1041)",vr:"DS",name:"SliceLocation",vm:"1",version:"DICOM"},"(0020,1200)":{tag:"(0020,1200)",vr:"IS",name:"NumberOfPatientRelatedStudies",vm:"1",version:"DICOM"},"(0020,1202)":{tag:"(0020,1202)",vr:"IS",name:"NumberOfPatientRelatedSeries",vm:"1",version:"DICOM"},"(0020,1204)":{tag:"(0020,1204)",vr:"IS",name:"NumberOfPatientRelatedInstances",vm:"1",version:"DICOM"},"(0020,1206)":{tag:"(0020,1206)",vr:"IS",name:"NumberOfStudyRelatedSeries",vm:"1",version:"DICOM"},"(0020,1208)":{tag:"(0020,1208)",vr:"IS",name:"NumberOfStudyRelatedInstances",vm:"1",version:"DICOM"},"(0020,1209)":{tag:"(0020,1209)",vr:"IS",name:"NumberOfSeriesRelatedInstances",vm:"1",version:"DICOM"},"(0020,4000)":{tag:"(0020,4000)",vr:"LT",name:"ImageComments",vm:"1",version:"DICOM"},"(0020,9056)":{tag:"(0020,9056)",vr:"SH",name:"StackID",vm:"1",version:"DICOM"},"(0020,9057)":{tag:"(0020,9057)",vr:"UL",name:"InStackPositionNumber",vm:"1",version:"DICOM"},"(0020,9071)":{tag:"(0020,9071)",vr:"SQ",name:"FrameAnatomySequence",vm:"1",version:"DICOM"},"(0020,9072)":{tag:"(0020,9072)",vr:"CS",name:"FrameLaterality",vm:"1",version:"DICOM"},"(0020,9111)":{tag:"(0020,9111)",vr:"SQ",name:"FrameContentSequence",vm:"1",version:"DICOM"},"(0020,9113)":{tag:"(0020,9113)",vr:"SQ",name:"PlanePositionSequence",vm:"1",version:"DICOM"},"(0020,9116)":{tag:"(0020,9116)",vr:"SQ",name:"PlaneOrientationSequence",vm:"1",version:"DICOM"},"(0020,9128)":{tag:"(0020,9128)",vr:"UL",name:"TemporalPositionIndex",vm:"1",version:"DICOM"},"(0020,9153)":{tag:"(0020,9153)",vr:"FD",name:"NominalCardiacTriggerDelayTime",vm:"1",version:"DICOM"},"(0020,9154)":{tag:"(0020,9154)",vr:"FL",name:"NominalCardiacTriggerTimePriorToRPeak",vm:"1",version:"DICOM"},"(0020,9155)":{tag:"(0020,9155)",vr:"FL",name:"ActualCardiacTriggerTimePriorToRPeak",vm:"1",version:"DICOM"},"(0020,9156)":{tag:"(0020,9156)",vr:"US",name:"FrameAcquisitionNumber",vm:"1",version:"DICOM"},"(0020,9157)":{tag:"(0020,9157)",vr:"UL",name:"DimensionIndexValues",vm:"1-n",version:"DICOM"},"(0020,9158)":{tag:"(0020,9158)",vr:"LT",name:"FrameComments",vm:"1",version:"DICOM"},"(0020,9161)":{tag:"(0020,9161)",vr:"UI",name:"ConcatenationUID",vm:"1",version:"DICOM"},"(0020,9162)":{tag:"(0020,9162)",vr:"US",name:"InConcatenationNumber",vm:"1",version:"DICOM"},"(0020,9163)":{tag:"(0020,9163)",vr:"US",name:"InConcatenationTotalNumber",vm:"1",version:"DICOM"},"(0020,9164)":{tag:"(0020,9164)",vr:"UI",name:"DimensionOrganizationUID",vm:"1",version:"DICOM"},"(0020,9165)":{tag:"(0020,9165)",vr:"AT",name:"DimensionIndexPointer",vm:"1",version:"DICOM"},"(0020,9167)":{tag:"(0020,9167)",vr:"AT",name:"FunctionalGroupPointer",vm:"1",version:"DICOM"},"(0020,9170)":{tag:"(0020,9170)",vr:"SQ",name:"UnassignedSharedConvertedAttributesSequence",vm:"1",version:"DICOM"},"(0020,9171)":{tag:"(0020,9171)",vr:"SQ",name:"UnassignedPerFrameConvertedAttributesSequence",vm:"1",version:"DICOM"},"(0020,9172)":{tag:"(0020,9172)",vr:"SQ",name:"ConversionSourceAttributesSequence",vm:"1",version:"DICOM"},"(0020,9213)":{tag:"(0020,9213)",vr:"LO",name:"DimensionIndexPrivateCreator",vm:"1",version:"DICOM"},"(0020,9221)":{tag:"(0020,9221)",vr:"SQ",name:"DimensionOrganizationSequence",vm:"1",version:"DICOM"},"(0020,9222)":{tag:"(0020,9222)",vr:"SQ",name:"DimensionIndexSequence",vm:"1",version:"DICOM"},"(0020,9228)":{tag:"(0020,9228)",vr:"UL",name:"ConcatenationFrameOffsetNumber",vm:"1",version:"DICOM"},"(0020,9238)":{tag:"(0020,9238)",vr:"LO",name:"FunctionalGroupPrivateCreator",vm:"1",version:"DICOM"},"(0020,9241)":{tag:"(0020,9241)",vr:"FL",name:"NominalPercentageOfCardiacPhase",vm:"1",version:"DICOM"},"(0020,9245)":{tag:"(0020,9245)",vr:"FL",name:"NominalPercentageOfRespiratoryPhase",vm:"1",version:"DICOM"},"(0020,9246)":{tag:"(0020,9246)",vr:"FL",name:"StartingRespiratoryAmplitude",vm:"1",version:"DICOM"},"(0020,9247)":{tag:"(0020,9247)",vr:"CS",name:"StartingRespiratoryPhase",vm:"1",version:"DICOM"},"(0020,9248)":{tag:"(0020,9248)",vr:"FL",name:"EndingRespiratoryAmplitude",vm:"1",version:"DICOM"},"(0020,9249)":{tag:"(0020,9249)",vr:"CS",name:"EndingRespiratoryPhase",vm:"1",version:"DICOM"},"(0020,9250)":{tag:"(0020,9250)",vr:"CS",name:"RespiratoryTriggerType",vm:"1",version:"DICOM"},"(0020,9251)":{tag:"(0020,9251)",vr:"FD",name:"RRIntervalTimeNominal",vm:"1",version:"DICOM"},"(0020,9252)":{tag:"(0020,9252)",vr:"FD",name:"ActualCardiacTriggerDelayTime",vm:"1",version:"DICOM"},"(0020,9253)":{tag:"(0020,9253)",vr:"SQ",name:"RespiratorySynchronizationSequence",vm:"1",version:"DICOM"},"(0020,9254)":{tag:"(0020,9254)",vr:"FD",name:"RespiratoryIntervalTime",vm:"1",version:"DICOM"},"(0020,9255)":{tag:"(0020,9255)",vr:"FD",name:"NominalRespiratoryTriggerDelayTime",vm:"1",version:"DICOM"},"(0020,9256)":{tag:"(0020,9256)",vr:"FD",name:"RespiratoryTriggerDelayThreshold",vm:"1",version:"DICOM"},"(0020,9257)":{tag:"(0020,9257)",vr:"FD",name:"ActualRespiratoryTriggerDelayTime",vm:"1",version:"DICOM"},"(0020,9301)":{tag:"(0020,9301)",vr:"FD",name:"ImagePositionVolume",vm:"3",version:"DICOM"},"(0020,9302)":{tag:"(0020,9302)",vr:"FD",name:"ImageOrientationVolume",vm:"6",version:"DICOM"},"(0020,9307)":{tag:"(0020,9307)",vr:"CS",name:"UltrasoundAcquisitionGeometry",vm:"1",version:"DICOM"},"(0020,9308)":{tag:"(0020,9308)",vr:"FD",name:"ApexPosition",vm:"3",version:"DICOM"},"(0020,9309)":{tag:"(0020,9309)",vr:"FD",name:"VolumeToTransducerMappingMatrix",vm:"16",version:"DICOM"},"(0020,930A)":{tag:"(0020,930A)",vr:"FD",name:"VolumeToTableMappingMatrix",vm:"16",version:"DICOM"},"(0020,930B)":{tag:"(0020,930B)",vr:"CS",name:"VolumeToTransducerRelationship",vm:"1",version:"DICOM"},"(0020,930C)":{tag:"(0020,930C)",vr:"CS",name:"PatientFrameOfReferenceSource",vm:"1",version:"DICOM"},"(0020,930D)":{tag:"(0020,930D)",vr:"FD",name:"TemporalPositionTimeOffset",vm:"1",version:"DICOM"},"(0020,930E)":{tag:"(0020,930E)",vr:"SQ",name:"PlanePositionVolumeSequence",vm:"1",version:"DICOM"},"(0020,930F)":{tag:"(0020,930F)",vr:"SQ",name:"PlaneOrientationVolumeSequence",vm:"1",version:"DICOM"},"(0020,9310)":{tag:"(0020,9310)",vr:"SQ",name:"TemporalPositionSequence",vm:"1",version:"DICOM"},"(0020,9311)":{tag:"(0020,9311)",vr:"CS",name:"DimensionOrganizationType",vm:"1",version:"DICOM"},"(0020,9312)":{tag:"(0020,9312)",vr:"UI",name:"VolumeFrameOfReferenceUID",vm:"1",version:"DICOM"},"(0020,9313)":{tag:"(0020,9313)",vr:"UI",name:"TableFrameOfReferenceUID",vm:"1",version:"DICOM"},"(0020,9421)":{tag:"(0020,9421)",vr:"LO",name:"DimensionDescriptionLabel",vm:"1",version:"DICOM"},"(0020,9450)":{tag:"(0020,9450)",vr:"SQ",name:"PatientOrientationInFrameSequence",vm:"1",version:"DICOM"},"(0020,9453)":{tag:"(0020,9453)",vr:"LO",name:"FrameLabel",vm:"1",version:"DICOM"},"(0020,9518)":{tag:"(0020,9518)",vr:"US",name:"AcquisitionIndex",vm:"1-n",version:"DICOM"},"(0020,9529)":{tag:"(0020,9529)",vr:"SQ",name:"ContributingSOPInstancesReferenceSequence",vm:"1",version:"DICOM"},"(0020,9536)":{tag:"(0020,9536)",vr:"US",name:"ReconstructionIndex",vm:"1",version:"DICOM"},"(0022,0001)":{tag:"(0022,0001)",vr:"US",name:"LightPathFilterPassThroughWavelength",vm:"1",version:"DICOM"},"(0022,0002)":{tag:"(0022,0002)",vr:"US",name:"LightPathFilterPassBand",vm:"2",version:"DICOM"},"(0022,0003)":{tag:"(0022,0003)",vr:"US",name:"ImagePathFilterPassThroughWavelength",vm:"1",version:"DICOM"},"(0022,0004)":{tag:"(0022,0004)",vr:"US",name:"ImagePathFilterPassBand",vm:"2",version:"DICOM"},"(0022,0005)":{tag:"(0022,0005)",vr:"CS",name:"PatientEyeMovementCommanded",vm:"1",version:"DICOM"},"(0022,0006)":{tag:"(0022,0006)",vr:"SQ",name:"PatientEyeMovementCommandCodeSequence",vm:"1",version:"DICOM"},"(0022,0007)":{tag:"(0022,0007)",vr:"FL",name:"SphericalLensPower",vm:"1",version:"DICOM"},"(0022,0008)":{tag:"(0022,0008)",vr:"FL",name:"CylinderLensPower",vm:"1",version:"DICOM"},"(0022,0009)":{tag:"(0022,0009)",vr:"FL",name:"CylinderAxis",vm:"1",version:"DICOM"},"(0022,000A)":{tag:"(0022,000A)",vr:"FL",name:"EmmetropicMagnification",vm:"1",version:"DICOM"},"(0022,000B)":{tag:"(0022,000B)",vr:"FL",name:"IntraOcularPressure",vm:"1",version:"DICOM"},"(0022,000C)":{tag:"(0022,000C)",vr:"FL",name:"HorizontalFieldOfView",vm:"1",version:"DICOM"},"(0022,000D)":{tag:"(0022,000D)",vr:"CS",name:"PupilDilated",vm:"1",version:"DICOM"},"(0022,000E)":{tag:"(0022,000E)",vr:"FL",name:"DegreeOfDilation",vm:"1",version:"DICOM"},"(0022,0010)":{tag:"(0022,0010)",vr:"FL",name:"StereoBaselineAngle",vm:"1",version:"DICOM"},"(0022,0011)":{tag:"(0022,0011)",vr:"FL",name:"StereoBaselineDisplacement",vm:"1",version:"DICOM"},"(0022,0012)":{tag:"(0022,0012)",vr:"FL",name:"StereoHorizontalPixelOffset",vm:"1",version:"DICOM"},"(0022,0013)":{tag:"(0022,0013)",vr:"FL",name:"StereoVerticalPixelOffset",vm:"1",version:"DICOM"},"(0022,0014)":{tag:"(0022,0014)",vr:"FL",name:"StereoRotation",vm:"1",version:"DICOM"},"(0022,0015)":{tag:"(0022,0015)",vr:"SQ",name:"AcquisitionDeviceTypeCodeSequence",vm:"1",version:"DICOM"},"(0022,0016)":{tag:"(0022,0016)",vr:"SQ",name:"IlluminationTypeCodeSequence",vm:"1",version:"DICOM"},"(0022,0017)":{tag:"(0022,0017)",vr:"SQ",name:"LightPathFilterTypeStackCodeSequence",vm:"1",version:"DICOM"},"(0022,0018)":{tag:"(0022,0018)",vr:"SQ",name:"ImagePathFilterTypeStackCodeSequence",vm:"1",version:"DICOM"},"(0022,0019)":{tag:"(0022,0019)",vr:"SQ",name:"LensesCodeSequence",vm:"1",version:"DICOM"},"(0022,001A)":{tag:"(0022,001A)",vr:"SQ",name:"ChannelDescriptionCodeSequence",vm:"1",version:"DICOM"},"(0022,001B)":{tag:"(0022,001B)",vr:"SQ",name:"RefractiveStateSequence",vm:"1",version:"DICOM"},"(0022,001C)":{tag:"(0022,001C)",vr:"SQ",name:"MydriaticAgentCodeSequence",vm:"1",version:"DICOM"},"(0022,001D)":{tag:"(0022,001D)",vr:"SQ",name:"RelativeImagePositionCodeSequence",vm:"1",version:"DICOM"},"(0022,001E)":{tag:"(0022,001E)",vr:"FL",name:"CameraAngleOfView",vm:"1",version:"DICOM"},"(0022,0020)":{tag:"(0022,0020)",vr:"SQ",name:"StereoPairsSequence",vm:"1",version:"DICOM"},"(0022,0021)":{tag:"(0022,0021)",vr:"SQ",name:"LeftImageSequence",vm:"1",version:"DICOM"},"(0022,0022)":{tag:"(0022,0022)",vr:"SQ",name:"RightImageSequence",vm:"1",version:"DICOM"},"(0022,0028)":{tag:"(0022,0028)",vr:"CS",name:"StereoPairsPresent",vm:"1",version:"DICOM"},"(0022,0030)":{tag:"(0022,0030)",vr:"FL",name:"AxialLengthOfTheEye",vm:"1",version:"DICOM"},"(0022,0031)":{tag:"(0022,0031)",vr:"SQ",name:"OphthalmicFrameLocationSequence",vm:"1",version:"DICOM"},"(0022,0032)":{tag:"(0022,0032)",vr:"FL",name:"ReferenceCoordinates",vm:"2-2n",version:"DICOM"},"(0022,0035)":{tag:"(0022,0035)",vr:"FL",name:"DepthSpatialResolution",vm:"1",version:"DICOM"},"(0022,0036)":{tag:"(0022,0036)",vr:"FL",name:"MaximumDepthDistortion",vm:"1",version:"DICOM"},"(0022,0037)":{tag:"(0022,0037)",vr:"FL",name:"AlongScanSpatialResolution",vm:"1",version:"DICOM"},"(0022,0038)":{tag:"(0022,0038)",vr:"FL",name:"MaximumAlongScanDistortion",vm:"1",version:"DICOM"},"(0022,0039)":{tag:"(0022,0039)",vr:"CS",name:"OphthalmicImageOrientation",vm:"1",version:"DICOM"},"(0022,0041)":{tag:"(0022,0041)",vr:"FL",name:"DepthOfTransverseImage",vm:"1",version:"DICOM"},"(0022,0042)":{tag:"(0022,0042)",vr:"SQ",name:"MydriaticAgentConcentrationUnitsSequence",vm:"1",version:"DICOM"},"(0022,0048)":{tag:"(0022,0048)",vr:"FL",name:"AcrossScanSpatialResolution",vm:"1",version:"DICOM"},"(0022,0049)":{tag:"(0022,0049)",vr:"FL",name:"MaximumAcrossScanDistortion",vm:"1",version:"DICOM"},"(0022,004E)":{tag:"(0022,004E)",vr:"DS",name:"MydriaticAgentConcentration",vm:"1",version:"DICOM"},"(0022,0055)":{tag:"(0022,0055)",vr:"FL",name:"IlluminationWaveLength",vm:"1",version:"DICOM"},"(0022,0056)":{tag:"(0022,0056)",vr:"FL",name:"IlluminationPower",vm:"1",version:"DICOM"},"(0022,0057)":{tag:"(0022,0057)",vr:"FL",name:"IlluminationBandwidth",vm:"1",version:"DICOM"},"(0022,0058)":{tag:"(0022,0058)",vr:"SQ",name:"MydriaticAgentSequence",vm:"1",version:"DICOM"},"(0022,1007)":{tag:"(0022,1007)",vr:"SQ",name:"OphthalmicAxialMeasurementsRightEyeSequence",vm:"1",version:"DICOM"},"(0022,1008)":{tag:"(0022,1008)",vr:"SQ",name:"OphthalmicAxialMeasurementsLeftEyeSequence",vm:"1",version:"DICOM"},"(0022,1009)":{tag:"(0022,1009)",vr:"CS",name:"OphthalmicAxialMeasurementsDeviceType",vm:"1",version:"DICOM"},"(0022,1010)":{tag:"(0022,1010)",vr:"CS",name:"OphthalmicAxialLengthMeasurementsType",vm:"1",version:"DICOM"},"(0022,1012)":{tag:"(0022,1012)",vr:"SQ",name:"OphthalmicAxialLengthSequence",vm:"1",version:"DICOM"},"(0022,1019)":{tag:"(0022,1019)",vr:"FL",name:"OphthalmicAxialLength",vm:"1",version:"DICOM"},"(0022,1024)":{tag:"(0022,1024)",vr:"SQ",name:"LensStatusCodeSequence",vm:"1",version:"DICOM"},"(0022,1025)":{tag:"(0022,1025)",vr:"SQ",name:"VitreousStatusCodeSequence",vm:"1",version:"DICOM"},"(0022,1028)":{tag:"(0022,1028)",vr:"SQ",name:"IOLFormulaCodeSequence",vm:"1",version:"DICOM"},"(0022,1029)":{tag:"(0022,1029)",vr:"LO",name:"IOLFormulaDetail",vm:"1",version:"DICOM"},"(0022,1033)":{tag:"(0022,1033)",vr:"FL",name:"KeratometerIndex",vm:"1",version:"DICOM"},"(0022,1035)":{tag:"(0022,1035)",vr:"SQ",name:"SourceOfOphthalmicAxialLengthCodeSequence",vm:"1",version:"DICOM"},"(0022,1036)":{tag:"(0022,1036)",vr:"SQ",name:"SourceOfCornealSizeDataCodeSequence",vm:"1",version:"DICOM"},"(0022,1037)":{tag:"(0022,1037)",vr:"FL",name:"TargetRefraction",vm:"1",version:"DICOM"},"(0022,1039)":{tag:"(0022,1039)",vr:"CS",name:"RefractiveProcedureOccurred",vm:"1",version:"DICOM"},"(0022,1040)":{tag:"(0022,1040)",vr:"SQ",name:"RefractiveSurgeryTypeCodeSequence",vm:"1",version:"DICOM"},"(0022,1044)":{tag:"(0022,1044)",vr:"SQ",name:"OphthalmicUltrasoundMethodCodeSequence",vm:"1",version:"DICOM"},"(0022,1045)":{tag:"(0022,1045)",vr:"SQ",name:"SurgicallyInducedAstigmatismSequence",vm:"1",version:"DICOM"},"(0022,1046)":{tag:"(0022,1046)",vr:"CS",name:"TypeOfOpticalCorrection",vm:"1",version:"DICOM"},"(0022,1047)":{tag:"(0022,1047)",vr:"SQ",name:"ToricIOLPowerSequence",vm:"1",version:"DICOM"},"(0022,1048)":{tag:"(0022,1048)",vr:"SQ",name:"PredictedToricErrorSequence",vm:"1",version:"DICOM"},"(0022,1049)":{tag:"(0022,1049)",vr:"CS",name:"PreSelectedForImplantation",vm:"1",version:"DICOM"},"(0022,104A)":{tag:"(0022,104A)",vr:"SQ",name:"ToricIOLPowerForExactEmmetropiaSequence",vm:"1",version:"DICOM"},"(0022,104B)":{tag:"(0022,104B)",vr:"SQ",name:"ToricIOLPowerForExactTargetRefractionSequence",vm:"1",version:"DICOM"},"(0022,1050)":{tag:"(0022,1050)",vr:"SQ",name:"OphthalmicAxialLengthMeasurementsSequence",vm:"1",version:"DICOM"},"(0022,1053)":{tag:"(0022,1053)",vr:"FL",name:"IOLPower",vm:"1",version:"DICOM"},"(0022,1054)":{tag:"(0022,1054)",vr:"FL",name:"PredictedRefractiveError",vm:"1",version:"DICOM"},"(0022,1059)":{tag:"(0022,1059)",vr:"FL",name:"OphthalmicAxialLengthVelocity",vm:"1",version:"DICOM"},"(0022,1065)":{tag:"(0022,1065)",vr:"LO",name:"LensStatusDescription",vm:"1",version:"DICOM"},"(0022,1066)":{tag:"(0022,1066)",vr:"LO",name:"VitreousStatusDescription",vm:"1",version:"DICOM"},"(0022,1090)":{tag:"(0022,1090)",vr:"SQ",name:"IOLPowerSequence",vm:"1",version:"DICOM"},"(0022,1092)":{tag:"(0022,1092)",vr:"SQ",name:"LensConstantSequence",vm:"1",version:"DICOM"},"(0022,1093)":{tag:"(0022,1093)",vr:"LO",name:"IOLManufacturer",vm:"1",version:"DICOM"},"(0022,1095)":{tag:"(0022,1095)",vr:"LO",name:"ImplantName",vm:"1",version:"DICOM"},"(0022,1096)":{tag:"(0022,1096)",vr:"SQ",name:"KeratometryMeasurementTypeCodeSequence",vm:"1",version:"DICOM"},"(0022,1097)":{tag:"(0022,1097)",vr:"LO",name:"ImplantPartNumber",vm:"1",version:"DICOM"},"(0022,1100)":{tag:"(0022,1100)",vr:"SQ",name:"ReferencedOphthalmicAxialMeasurementsSequence",vm:"1",version:"DICOM"},"(0022,1101)":{tag:"(0022,1101)",vr:"SQ",name:"OphthalmicAxialLengthMeasurementsSegmentNameCodeSequence",vm:"1",version:"DICOM"},"(0022,1103)":{tag:"(0022,1103)",vr:"SQ",name:"RefractiveErrorBeforeRefractiveSurgeryCodeSequence",vm:"1",version:"DICOM"},"(0022,1121)":{tag:"(0022,1121)",vr:"FL",name:"IOLPowerForExactEmmetropia",vm:"1",version:"DICOM"},"(0022,1122)":{tag:"(0022,1122)",vr:"FL",name:"IOLPowerForExactTargetRefraction",vm:"1",version:"DICOM"},"(0022,1125)":{tag:"(0022,1125)",vr:"SQ",name:"AnteriorChamberDepthDefinitionCodeSequence",vm:"1",version:"DICOM"},"(0022,1127)":{tag:"(0022,1127)",vr:"SQ",name:"LensThicknessSequence",vm:"1",version:"DICOM"},"(0022,1128)":{tag:"(0022,1128)",vr:"SQ",name:"AnteriorChamberDepthSequence",vm:"1",version:"DICOM"},"(0022,112A)":{tag:"(0022,112A)",vr:"SQ",name:"CalculationCommentSequence",vm:"1",version:"DICOM"},"(0022,112B)":{tag:"(0022,112B)",vr:"CS",name:"CalculationCommentType",vm:"1",version:"DICOM"},"(0022,112C)":{tag:"(0022,112C)",vr:"LT",name:"CalculationComment",vm:"1",version:"DICOM"},"(0022,1130)":{tag:"(0022,1130)",vr:"FL",name:"LensThickness",vm:"1",version:"DICOM"},"(0022,1131)":{tag:"(0022,1131)",vr:"FL",name:"AnteriorChamberDepth",vm:"1",version:"DICOM"},"(0022,1132)":{tag:"(0022,1132)",vr:"SQ",name:"SourceOfLensThicknessDataCodeSequence",vm:"1",version:"DICOM"},"(0022,1133)":{tag:"(0022,1133)",vr:"SQ",name:"SourceOfAnteriorChamberDepthDataCodeSequence",vm:"1",version:"DICOM"},"(0022,1134)":{tag:"(0022,1134)",vr:"SQ",name:"SourceOfRefractiveMeasurementsSequence",vm:"1",version:"DICOM"},"(0022,1135)":{tag:"(0022,1135)",vr:"SQ",name:"SourceOfRefractiveMeasurementsCodeSequence",vm:"1",version:"DICOM"},"(0022,1140)":{tag:"(0022,1140)",vr:"CS",name:"OphthalmicAxialLengthMeasurementModified",vm:"1",version:"DICOM"},"(0022,1150)":{tag:"(0022,1150)",vr:"SQ",name:"OphthalmicAxialLengthDataSourceCodeSequence",vm:"1",version:"DICOM"},"(0022,1155)":{tag:"(0022,1155)",vr:"FL",name:"SignalToNoiseRatio",vm:"1",version:"DICOM"},"(0022,1159)":{tag:"(0022,1159)",vr:"LO",name:"OphthalmicAxialLengthDataSourceDescription",vm:"1",version:"DICOM"},"(0022,1210)":{tag:"(0022,1210)",vr:"SQ",name:"OphthalmicAxialLengthMeasurementsTotalLengthSequence",vm:"1",version:"DICOM"},"(0022,1211)":{tag:"(0022,1211)",vr:"SQ",name:"OphthalmicAxialLengthMeasurementsSegmentalLengthSequence",vm:"1",version:"DICOM"},"(0022,1212)":{tag:"(0022,1212)",vr:"SQ",name:"OphthalmicAxialLengthMeasurementsLengthSummationSequence",vm:"1",version:"DICOM"},"(0022,1220)":{tag:"(0022,1220)",vr:"SQ",name:"UltrasoundOphthalmicAxialLengthMeasurementsSequence",vm:"1",version:"DICOM"},"(0022,1225)":{tag:"(0022,1225)",vr:"SQ",name:"OpticalOphthalmicAxialLengthMeasurementsSequence",vm:"1",version:"DICOM"},"(0022,1230)":{tag:"(0022,1230)",vr:"SQ",name:"UltrasoundSelectedOphthalmicAxialLengthSequence",vm:"1",version:"DICOM"},"(0022,1250)":{tag:"(0022,1250)",vr:"SQ",name:"OphthalmicAxialLengthSelectionMethodCodeSequence",vm:"1",version:"DICOM"},"(0022,1255)":{tag:"(0022,1255)",vr:"SQ",name:"OpticalSelectedOphthalmicAxialLengthSequence",vm:"1",version:"DICOM"},"(0022,1257)":{tag:"(0022,1257)",vr:"SQ",name:"SelectedSegmentalOphthalmicAxialLengthSequence",vm:"1",version:"DICOM"},"(0022,1260)":{tag:"(0022,1260)",vr:"SQ",name:"SelectedTotalOphthalmicAxialLengthSequence",vm:"1",version:"DICOM"},"(0022,1262)":{tag:"(0022,1262)",vr:"SQ",name:"OphthalmicAxialLengthQualityMetricSequence",vm:"1",version:"DICOM"},"(0022,1300)":{tag:"(0022,1300)",vr:"SQ",name:"IntraocularLensCalculationsRightEyeSequence",vm:"1",version:"DICOM"},"(0022,1310)":{tag:"(0022,1310)",vr:"SQ",name:"IntraocularLensCalculationsLeftEyeSequence",vm:"1",version:"DICOM"},"(0022,1330)":{tag:"(0022,1330)",vr:"SQ",name:"ReferencedOphthalmicAxialLengthMeasurementQCImageSequence",vm:"1",version:"DICOM"},"(0022,1415)":{tag:"(0022,1415)",vr:"CS",name:"OphthalmicMappingDeviceType",vm:"1",version:"DICOM"},"(0022,1420)":{tag:"(0022,1420)",vr:"SQ",name:"AcquisitionMethodCodeSequence",vm:"1",version:"DICOM"},"(0022,1423)":{tag:"(0022,1423)",vr:"SQ",name:"AcquisitionMethodAlgorithmSequence",vm:"1",version:"DICOM"},"(0022,1436)":{tag:"(0022,1436)",vr:"SQ",name:"OphthalmicThicknessMapTypeCodeSequence",vm:"1",version:"DICOM"},"(0022,1443)":{tag:"(0022,1443)",vr:"SQ",name:"OphthalmicThicknessMappingNormalsSequence",vm:"1",version:"DICOM"},"(0022,1445)":{tag:"(0022,1445)",vr:"SQ",name:"RetinalThicknessDefinitionCodeSequence",vm:"1",version:"DICOM"},"(0022,1450)":{tag:"(0022,1450)",vr:"SQ",name:"PixelValueMappingToCodedConceptSequence",vm:"1",version:"DICOM"},"(0022,1452)":{tag:"(0022,1452)",vr:"xs",name:"MappedPixelValue",vm:"1",version:"DICOM"},"(0022,1454)":{tag:"(0022,1454)",vr:"LO",name:"PixelValueMappingExplanation",vm:"1",version:"DICOM"},"(0022,1458)":{tag:"(0022,1458)",vr:"SQ",name:"OphthalmicThicknessMapQualityThresholdSequence",vm:"1",version:"DICOM"},"(0022,1460)":{tag:"(0022,1460)",vr:"FL",name:"OphthalmicThicknessMapThresholdQualityRating",vm:"1",version:"DICOM"},"(0022,1463)":{tag:"(0022,1463)",vr:"FL",name:"AnatomicStructureReferencePoint",vm:"2",version:"DICOM"},"(0022,1465)":{tag:"(0022,1465)",vr:"SQ",name:"RegistrationToLocalizerSequence",vm:"1",version:"DICOM"},"(0022,1466)":{tag:"(0022,1466)",vr:"CS",name:"RegisteredLocalizerUnits",vm:"1",version:"DICOM"},"(0022,1467)":{tag:"(0022,1467)",vr:"FL",name:"RegisteredLocalizerTopLeftHandCorner",vm:"2",version:"DICOM"},"(0022,1468)":{tag:"(0022,1468)",vr:"FL",name:"RegisteredLocalizerBottomRightHandCorner",vm:"2",version:"DICOM"},"(0022,1470)":{tag:"(0022,1470)",vr:"SQ",name:"OphthalmicThicknessMapQualityRatingSequence",vm:"1",version:"DICOM"},"(0022,1472)":{tag:"(0022,1472)",vr:"SQ",name:"RelevantOPTAttributesSequence",vm:"1",version:"DICOM"},"(0022,1512)":{tag:"(0022,1512)",vr:"SQ",name:"TransformationMethodCodeSequence",vm:"1",version:"DICOM"},"(0022,1513)":{tag:"(0022,1513)",vr:"SQ",name:"TransformationAlgorithmSequence",vm:"1",version:"DICOM"},"(0022,1515)":{tag:"(0022,1515)",vr:"CS",name:"OphthalmicAxialLengthMethod",vm:"1",version:"DICOM"},"(0022,1517)":{tag:"(0022,1517)",vr:"FL",name:"OphthalmicFOV",vm:"1",version:"DICOM"},"(0022,1518)":{tag:"(0022,1518)",vr:"SQ",name:"TwoDimensionalToThreeDimensionalMapSequence",vm:"1",version:"DICOM"},"(0022,1525)":{tag:"(0022,1525)",vr:"SQ",name:"WideFieldOphthalmicPhotographyQualityRatingSequence",vm:"1",version:"DICOM"},"(0022,1526)":{tag:"(0022,1526)",vr:"SQ",name:"WideFieldOphthalmicPhotographyQualityThresholdSequence",vm:"1",version:"DICOM"},"(0022,1527)":{tag:"(0022,1527)",vr:"FL",name:"WideFieldOphthalmicPhotographyThresholdQualityRating",vm:"1",version:"DICOM"},"(0022,1528)":{tag:"(0022,1528)",vr:"FL",name:"XCoordinatesCenterPixelViewAngle",vm:"1",version:"DICOM"},"(0022,1529)":{tag:"(0022,1529)",vr:"FL",name:"YCoordinatesCenterPixelViewAngle",vm:"1",version:"DICOM"},"(0022,1530)":{tag:"(0022,1530)",vr:"UL",name:"NumberOfMapPoints",vm:"1",version:"DICOM"},"(0022,1531)":{tag:"(0022,1531)",vr:"OF",name:"TwoDimensionalToThreeDimensionalMapData",vm:"1",version:"DICOM"},"(0022,1612)":{tag:"(0022,1612)",vr:"SQ",name:"DerivationAlgorithmSequence",vm:"1",version:"DICOM"},"(0022,1615)":{tag:"(0022,1615)",vr:"SQ",name:"OphthalmicImageTypeCodeSequence",vm:"1",version:"DICOM"},"(0022,1616)":{tag:"(0022,1616)",vr:"LO",name:"OphthalmicImageTypeDescription",vm:"1",version:"DICOM"},"(0022,1618)":{tag:"(0022,1618)",vr:"SQ",name:"ScanPatternTypeCodeSequence",vm:"1",version:"DICOM"},"(0022,1620)":{tag:"(0022,1620)",vr:"SQ",name:"ReferencedSurfaceMeshIdentificationSequence",vm:"1",version:"DICOM"},"(0022,1622)":{tag:"(0022,1622)",vr:"CS",name:"OphthalmicVolumetricPropertiesFlag",vm:"1",version:"DICOM"},"(0022,1624)":{tag:"(0022,1624)",vr:"FL",name:"OphthalmicAnatomicReferencePointXCoordinate",vm:"1",version:"DICOM"},"(0022,1626)":{tag:"(0022,1626)",vr:"FL",name:"OphthalmicAnatomicReferencePointYCoordinate",vm:"1",version:"DICOM"},"(0022,1628)":{tag:"(0022,1628)",vr:"SQ",name:"OphthalmicEnFaceImageQualityRatingSequence",vm:"1",version:"DICOM"},"(0022,1630)":{tag:"(0022,1630)",vr:"DS",name:"QualityThreshold",vm:"1",version:"DICOM"},"(0022,1640)":{tag:"(0022,1640)",vr:"SQ",name:"OCTBscanAnalysisAcquisitionParametersSequence",vm:"1",version:"DICOM"},"(0022,1642)":{tag:"(0022,1642)",vr:"UL",name:"NumberofBscansPerFrame",vm:"1",version:"DICOM"},"(0022,1643)":{tag:"(0022,1643)",vr:"FL",name:"BscanSlabThickness",vm:"1",version:"DICOM"},"(0022,1644)":{tag:"(0022,1644)",vr:"FL",name:"DistanceBetweenBscanSlabs",vm:"1",version:"DICOM"},"(0022,1645)":{tag:"(0022,1645)",vr:"FL",name:"BscanCycleTime",vm:"1",version:"DICOM"},"(0022,1646)":{tag:"(0022,1646)",vr:"FL",name:"BscanCycleTimeVector",vm:"1-n",version:"DICOM"},"(0022,1649)":{tag:"(0022,1649)",vr:"FL",name:"AscanRate",vm:"1",version:"DICOM"},"(0022,1650)":{tag:"(0022,1650)",vr:"FL",name:"BscanRate",vm:"1",version:"DICOM"},"(0022,1658)":{tag:"(0022,1658)",vr:"UL",name:"SurfaceMeshZPixelOffset",vm:"1",version:"DICOM"},"(0024,0010)":{tag:"(0024,0010)",vr:"FL",name:"VisualFieldHorizontalExtent",vm:"1",version:"DICOM"},"(0024,0011)":{tag:"(0024,0011)",vr:"FL",name:"VisualFieldVerticalExtent",vm:"1",version:"DICOM"},"(0024,0012)":{tag:"(0024,0012)",vr:"CS",name:"VisualFieldShape",vm:"1",version:"DICOM"},"(0024,0016)":{tag:"(0024,0016)",vr:"SQ",name:"ScreeningTestModeCodeSequence",vm:"1",version:"DICOM"},"(0024,0018)":{tag:"(0024,0018)",vr:"FL",name:"MaximumStimulusLuminance",vm:"1",version:"DICOM"},"(0024,0020)":{tag:"(0024,0020)",vr:"FL",name:"BackgroundLuminance",vm:"1",version:"DICOM"},"(0024,0021)":{tag:"(0024,0021)",vr:"SQ",name:"StimulusColorCodeSequence",vm:"1",version:"DICOM"},"(0024,0024)":{tag:"(0024,0024)",vr:"SQ",name:"BackgroundIlluminationColorCodeSequence",vm:"1",version:"DICOM"},"(0024,0025)":{tag:"(0024,0025)",vr:"FL",name:"StimulusArea",vm:"1",version:"DICOM"},"(0024,0028)":{tag:"(0024,0028)",vr:"FL",name:"StimulusPresentationTime",vm:"1",version:"DICOM"},"(0024,0032)":{tag:"(0024,0032)",vr:"SQ",name:"FixationSequence",vm:"1",version:"DICOM"},"(0024,0033)":{tag:"(0024,0033)",vr:"SQ",name:"FixationMonitoringCodeSequence",vm:"1",version:"DICOM"},"(0024,0034)":{tag:"(0024,0034)",vr:"SQ",name:"VisualFieldCatchTrialSequence",vm:"1",version:"DICOM"},"(0024,0035)":{tag:"(0024,0035)",vr:"US",name:"FixationCheckedQuantity",vm:"1",version:"DICOM"},"(0024,0036)":{tag:"(0024,0036)",vr:"US",name:"PatientNotProperlyFixatedQuantity",vm:"1",version:"DICOM"},"(0024,0037)":{tag:"(0024,0037)",vr:"CS",name:"PresentedVisualStimuliDataFlag",vm:"1",version:"DICOM"},"(0024,0038)":{tag:"(0024,0038)",vr:"US",name:"NumberOfVisualStimuli",vm:"1",version:"DICOM"},"(0024,0039)":{tag:"(0024,0039)",vr:"CS",name:"ExcessiveFixationLossesDataFlag",vm:"1",version:"DICOM"},"(0024,0040)":{tag:"(0024,0040)",vr:"CS",name:"ExcessiveFixationLosses",vm:"1",version:"DICOM"},"(0024,0042)":{tag:"(0024,0042)",vr:"US",name:"StimuliRetestingQuantity",vm:"1",version:"DICOM"},"(0024,0044)":{tag:"(0024,0044)",vr:"LT",name:"CommentsOnPatientPerformanceOfVisualField",vm:"1",version:"DICOM"},"(0024,0045)":{tag:"(0024,0045)",vr:"CS",name:"FalseNegativesEstimateFlag",vm:"1",version:"DICOM"},"(0024,0046)":{tag:"(0024,0046)",vr:"FL",name:"FalseNegativesEstimate",vm:"1",version:"DICOM"},"(0024,0048)":{tag:"(0024,0048)",vr:"US",name:"NegativeCatchTrialsQuantity",vm:"1",version:"DICOM"},"(0024,0050)":{tag:"(0024,0050)",vr:"US",name:"FalseNegativesQuantity",vm:"1",version:"DICOM"},"(0024,0051)":{tag:"(0024,0051)",vr:"CS",name:"ExcessiveFalseNegativesDataFlag",vm:"1",version:"DICOM"},"(0024,0052)":{tag:"(0024,0052)",vr:"CS",name:"ExcessiveFalseNegatives",vm:"1",version:"DICOM"},"(0024,0053)":{tag:"(0024,0053)",vr:"CS",name:"FalsePositivesEstimateFlag",vm:"1",version:"DICOM"},"(0024,0054)":{tag:"(0024,0054)",vr:"FL",name:"FalsePositivesEstimate",vm:"1",version:"DICOM"},"(0024,0055)":{tag:"(0024,0055)",vr:"CS",name:"CatchTrialsDataFlag",vm:"1",version:"DICOM"},"(0024,0056)":{tag:"(0024,0056)",vr:"US",name:"PositiveCatchTrialsQuantity",vm:"1",version:"DICOM"},"(0024,0057)":{tag:"(0024,0057)",vr:"CS",name:"TestPointNormalsDataFlag",vm:"1",version:"DICOM"},"(0024,0058)":{tag:"(0024,0058)",vr:"SQ",name:"TestPointNormalsSequence",vm:"1",version:"DICOM"},"(0024,0059)":{tag:"(0024,0059)",vr:"CS",name:"GlobalDeviationProbabilityNormalsFlag",vm:"1",version:"DICOM"},"(0024,0060)":{tag:"(0024,0060)",vr:"US",name:"FalsePositivesQuantity",vm:"1",version:"DICOM"},"(0024,0061)":{tag:"(0024,0061)",vr:"CS",name:"ExcessiveFalsePositivesDataFlag",vm:"1",version:"DICOM"},"(0024,0062)":{tag:"(0024,0062)",vr:"CS",name:"ExcessiveFalsePositives",vm:"1",version:"DICOM"},"(0024,0063)":{tag:"(0024,0063)",vr:"CS",name:"VisualFieldTestNormalsFlag",vm:"1",version:"DICOM"},"(0024,0064)":{tag:"(0024,0064)",vr:"SQ",name:"ResultsNormalsSequence",vm:"1",version:"DICOM"},"(0024,0065)":{tag:"(0024,0065)",vr:"SQ",name:"AgeCorrectedSensitivityDeviationAlgorithmSequence",vm:"1",version:"DICOM"},"(0024,0066)":{tag:"(0024,0066)",vr:"FL",name:"GlobalDeviationFromNormal",vm:"1",version:"DICOM"},"(0024,0067)":{tag:"(0024,0067)",vr:"SQ",name:"GeneralizedDefectSensitivityDeviationAlgorithmSequence",vm:"1",version:"DICOM"},"(0024,0068)":{tag:"(0024,0068)",vr:"FL",name:"LocalizedDeviationFromNormal",vm:"1",version:"DICOM"},"(0024,0069)":{tag:"(0024,0069)",vr:"LO",name:"PatientReliabilityIndicator",vm:"1",version:"DICOM"},"(0024,0070)":{tag:"(0024,0070)",vr:"FL",name:"VisualFieldMeanSensitivity",vm:"1",version:"DICOM"},"(0024,0071)":{tag:"(0024,0071)",vr:"FL",name:"GlobalDeviationProbability",vm:"1",version:"DICOM"},"(0024,0072)":{tag:"(0024,0072)",vr:"CS",name:"LocalDeviationProbabilityNormalsFlag",vm:"1",version:"DICOM"},"(0024,0073)":{tag:"(0024,0073)",vr:"FL",name:"LocalizedDeviationProbability",vm:"1",version:"DICOM"},"(0024,0074)":{tag:"(0024,0074)",vr:"CS",name:"ShortTermFluctuationCalculated",vm:"1",version:"DICOM"},"(0024,0075)":{tag:"(0024,0075)",vr:"FL",name:"ShortTermFluctuation",vm:"1",version:"DICOM"},"(0024,0076)":{tag:"(0024,0076)",vr:"CS",name:"ShortTermFluctuationProbabilityCalculated",vm:"1",version:"DICOM"},"(0024,0077)":{tag:"(0024,0077)",vr:"FL",name:"ShortTermFluctuationProbability",vm:"1",version:"DICOM"},"(0024,0078)":{tag:"(0024,0078)",vr:"CS",name:"CorrectedLocalizedDeviationFromNormalCalculated",vm:"1",version:"DICOM"},"(0024,0079)":{tag:"(0024,0079)",vr:"FL",name:"CorrectedLocalizedDeviationFromNormal",vm:"1",version:"DICOM"},"(0024,0080)":{tag:"(0024,0080)",vr:"CS",name:"CorrectedLocalizedDeviationFromNormalProbabilityCalculated",vm:"1",version:"DICOM"},"(0024,0081)":{tag:"(0024,0081)",vr:"FL",name:"CorrectedLocalizedDeviationFromNormalProbability",vm:"1",version:"DICOM"},"(0024,0083)":{tag:"(0024,0083)",vr:"SQ",name:"GlobalDeviationProbabilitySequence",vm:"1",version:"DICOM"},"(0024,0085)":{tag:"(0024,0085)",vr:"SQ",name:"LocalizedDeviationProbabilitySequence",vm:"1",version:"DICOM"},"(0024,0086)":{tag:"(0024,0086)",vr:"CS",name:"FovealSensitivityMeasured",vm:"1",version:"DICOM"},"(0024,0087)":{tag:"(0024,0087)",vr:"FL",name:"FovealSensitivity",vm:"1",version:"DICOM"},"(0024,0088)":{tag:"(0024,0088)",vr:"FL",name:"VisualFieldTestDuration",vm:"1",version:"DICOM"},"(0024,0089)":{tag:"(0024,0089)",vr:"SQ",name:"VisualFieldTestPointSequence",vm:"1",version:"DICOM"},"(0024,0090)":{tag:"(0024,0090)",vr:"FL",name:"VisualFieldTestPointXCoordinate",vm:"1",version:"DICOM"},"(0024,0091)":{tag:"(0024,0091)",vr:"FL",name:"VisualFieldTestPointYCoordinate",vm:"1",version:"DICOM"},"(0024,0092)":{tag:"(0024,0092)",vr:"FL",name:"AgeCorrectedSensitivityDeviationValue",vm:"1",version:"DICOM"},"(0024,0093)":{tag:"(0024,0093)",vr:"CS",name:"StimulusResults",vm:"1",version:"DICOM"},"(0024,0094)":{tag:"(0024,0094)",vr:"FL",name:"SensitivityValue",vm:"1",version:"DICOM"},"(0024,0095)":{tag:"(0024,0095)",vr:"CS",name:"RetestStimulusSeen",vm:"1",version:"DICOM"},"(0024,0096)":{tag:"(0024,0096)",vr:"FL",name:"RetestSensitivityValue",vm:"1",version:"DICOM"},"(0024,0097)":{tag:"(0024,0097)",vr:"SQ",name:"VisualFieldTestPointNormalsSequence",vm:"1",version:"DICOM"},"(0024,0098)":{tag:"(0024,0098)",vr:"FL",name:"QuantifiedDefect",vm:"1",version:"DICOM"},"(0024,0100)":{tag:"(0024,0100)",vr:"FL",name:"AgeCorrectedSensitivityDeviationProbabilityValue",vm:"1",version:"DICOM"},"(0024,0102)":{tag:"(0024,0102)",vr:"CS",name:"GeneralizedDefectCorrectedSensitivityDeviationFlag",vm:"1",version:"DICOM"},"(0024,0103)":{tag:"(0024,0103)",vr:"FL",name:"GeneralizedDefectCorrectedSensitivityDeviationValue",vm:"1",version:"DICOM"},"(0024,0104)":{tag:"(0024,0104)",vr:"FL",name:"GeneralizedDefectCorrectedSensitivityDeviationProbabilityValue",vm:"1",version:"DICOM"},"(0024,0105)":{tag:"(0024,0105)",vr:"FL",name:"MinimumSensitivityValue",vm:"1",version:"DICOM"},"(0024,0106)":{tag:"(0024,0106)",vr:"CS",name:"BlindSpotLocalized",vm:"1",version:"DICOM"},"(0024,0107)":{tag:"(0024,0107)",vr:"FL",name:"BlindSpotXCoordinate",vm:"1",version:"DICOM"},"(0024,0108)":{tag:"(0024,0108)",vr:"FL",name:"BlindSpotYCoordinate",vm:"1",version:"DICOM"},"(0024,0110)":{tag:"(0024,0110)",vr:"SQ",name:"VisualAcuityMeasurementSequence",vm:"1",version:"DICOM"},"(0024,0112)":{tag:"(0024,0112)",vr:"SQ",name:"RefractiveParametersUsedOnPatientSequence",vm:"1",version:"DICOM"},"(0024,0113)":{tag:"(0024,0113)",vr:"CS",name:"MeasurementLaterality",vm:"1",version:"DICOM"},"(0024,0114)":{tag:"(0024,0114)",vr:"SQ",name:"OphthalmicPatientClinicalInformationLeftEyeSequence",vm:"1",version:"DICOM"},"(0024,0115)":{tag:"(0024,0115)",vr:"SQ",name:"OphthalmicPatientClinicalInformationRightEyeSequence",vm:"1",version:"DICOM"},"(0024,0117)":{tag:"(0024,0117)",vr:"CS",name:"FovealPointNormativeDataFlag",vm:"1",version:"DICOM"},"(0024,0118)":{tag:"(0024,0118)",vr:"FL",name:"FovealPointProbabilityValue",vm:"1",version:"DICOM"},"(0024,0120)":{tag:"(0024,0120)",vr:"CS",name:"ScreeningBaselineMeasured",vm:"1",version:"DICOM"},"(0024,0122)":{tag:"(0024,0122)",vr:"SQ",name:"ScreeningBaselineMeasuredSequence",vm:"1",version:"DICOM"},"(0024,0124)":{tag:"(0024,0124)",vr:"CS",name:"ScreeningBaselineType",vm:"1",version:"DICOM"},"(0024,0126)":{tag:"(0024,0126)",vr:"FL",name:"ScreeningBaselineValue",vm:"1",version:"DICOM"},"(0024,0202)":{tag:"(0024,0202)",vr:"LO",name:"AlgorithmSource",vm:"1",version:"DICOM"},"(0024,0306)":{tag:"(0024,0306)",vr:"LO",name:"DataSetName",vm:"1",version:"DICOM"},"(0024,0307)":{tag:"(0024,0307)",vr:"LO",name:"DataSetVersion",vm:"1",version:"DICOM"},"(0024,0308)":{tag:"(0024,0308)",vr:"LO",name:"DataSetSource",vm:"1",version:"DICOM"},"(0024,0309)":{tag:"(0024,0309)",vr:"LO",name:"DataSetDescription",vm:"1",version:"DICOM"},"(0024,0317)":{tag:"(0024,0317)",vr:"SQ",name:"VisualFieldTestReliabilityGlobalIndexSequence",vm:"1",version:"DICOM"},"(0024,0320)":{tag:"(0024,0320)",vr:"SQ",name:"VisualFieldGlobalResultsIndexSequence",vm:"1",version:"DICOM"},"(0024,0325)":{tag:"(0024,0325)",vr:"SQ",name:"DataObservationSequence",vm:"1",version:"DICOM"},"(0024,0338)":{tag:"(0024,0338)",vr:"CS",name:"IndexNormalsFlag",vm:"1",version:"DICOM"},"(0024,0341)":{tag:"(0024,0341)",vr:"FL",name:"IndexProbability",vm:"1",version:"DICOM"},"(0024,0344)":{tag:"(0024,0344)",vr:"SQ",name:"IndexProbabilitySequence",vm:"1",version:"DICOM"},"(0028,0002)":{tag:"(0028,0002)",vr:"US",name:"SamplesPerPixel",vm:"1",version:"DICOM"},"(0028,0003)":{tag:"(0028,0003)",vr:"US",name:"SamplesPerPixelUsed",vm:"1",version:"DICOM"},"(0028,0004)":{tag:"(0028,0004)",vr:"CS",name:"PhotometricInterpretation",vm:"1",version:"DICOM"},"(0028,0006)":{tag:"(0028,0006)",vr:"US",name:"PlanarConfiguration",vm:"1",version:"DICOM"},"(0028,0008)":{tag:"(0028,0008)",vr:"IS",name:"NumberOfFrames",vm:"1",version:"DICOM"},"(0028,0009)":{tag:"(0028,0009)",vr:"AT",name:"FrameIncrementPointer",vm:"1-n",version:"DICOM"},"(0028,000A)":{tag:"(0028,000A)",vr:"AT",name:"FrameDimensionPointer",vm:"1-n",version:"DICOM"},"(0028,0010)":{tag:"(0028,0010)",vr:"US",name:"Rows",vm:"1",version:"DICOM"},"(0028,0011)":{tag:"(0028,0011)",vr:"US",name:"Columns",vm:"1",version:"DICOM"},"(0028,0014)":{tag:"(0028,0014)",vr:"US",name:"UltrasoundColorDataPresent",vm:"1",version:"DICOM"},"(0028,0030)":{tag:"(0028,0030)",vr:"DS",name:"PixelSpacing",vm:"2",version:"DICOM"},"(0028,0031)":{tag:"(0028,0031)",vr:"DS",name:"ZoomFactor",vm:"2",version:"DICOM"},"(0028,0032)":{tag:"(0028,0032)",vr:"DS",name:"ZoomCenter",vm:"2",version:"DICOM"},"(0028,0034)":{tag:"(0028,0034)",vr:"IS",name:"PixelAspectRatio",vm:"2",version:"DICOM"},"(0028,0051)":{tag:"(0028,0051)",vr:"CS",name:"CorrectedImage",vm:"1-n",version:"DICOM"},"(0028,0100)":{tag:"(0028,0100)",vr:"US",name:"BitsAllocated",vm:"1",version:"DICOM"},"(0028,0101)":{tag:"(0028,0101)",vr:"US",name:"BitsStored",vm:"1",version:"DICOM"},"(0028,0102)":{tag:"(0028,0102)",vr:"US",name:"HighBit",vm:"1",version:"DICOM"},"(0028,0103)":{tag:"(0028,0103)",vr:"US",name:"PixelRepresentation",vm:"1",version:"DICOM"},"(0028,0106)":{tag:"(0028,0106)",vr:"xs",name:"SmallestImagePixelValue",vm:"1",version:"DICOM"},"(0028,0107)":{tag:"(0028,0107)",vr:"xs",name:"LargestImagePixelValue",vm:"1",version:"DICOM"},"(0028,0108)":{tag:"(0028,0108)",vr:"xs",name:"SmallestPixelValueInSeries",vm:"1",version:"DICOM"},"(0028,0109)":{tag:"(0028,0109)",vr:"xs",name:"LargestPixelValueInSeries",vm:"1",version:"DICOM"},"(0028,0120)":{tag:"(0028,0120)",vr:"xs",name:"PixelPaddingValue",vm:"1",version:"DICOM"},"(0028,0121)":{tag:"(0028,0121)",vr:"xs",name:"PixelPaddingRangeLimit",vm:"1",version:"DICOM"},"(0028,0122)":{tag:"(0028,0122)",vr:"FL",name:"FloatPixelPaddingValue",vm:"1",version:"DICOM"},"(0028,0123)":{tag:"(0028,0123)",vr:"FD",name:"DoubleFloatPixelPaddingValue",vm:"1",version:"DICOM"},"(0028,0124)":{tag:"(0028,0124)",vr:"FL",name:"FloatPixelPaddingRangeLimit",vm:"1",version:"DICOM"},"(0028,0125)":{tag:"(0028,0125)",vr:"FD",name:"DoubleFloatPixelPaddingRangeLimit",vm:"1",version:"DICOM"},"(0028,0300)":{tag:"(0028,0300)",vr:"CS",name:"QualityControlImage",vm:"1",version:"DICOM"},"(0028,0301)":{tag:"(0028,0301)",vr:"CS",name:"BurnedInAnnotation",vm:"1",version:"DICOM"},"(0028,0302)":{tag:"(0028,0302)",vr:"CS",name:"RecognizableVisualFeatures",vm:"1",version:"DICOM"},"(0028,0303)":{tag:"(0028,0303)",vr:"CS",name:"LongitudinalTemporalInformationModified",vm:"1",version:"DICOM"},"(0028,0304)":{tag:"(0028,0304)",vr:"UI",name:"ReferencedColorPaletteInstanceUID",vm:"1",version:"DICOM"},"(0028,0A02)":{tag:"(0028,0A02)",vr:"CS",name:"PixelSpacingCalibrationType",vm:"1",version:"DICOM"},"(0028,0A04)":{tag:"(0028,0A04)",vr:"LO",name:"PixelSpacingCalibrationDescription",vm:"1",version:"DICOM"},"(0028,1040)":{tag:"(0028,1040)",vr:"CS",name:"PixelIntensityRelationship",vm:"1",version:"DICOM"},"(0028,1041)":{tag:"(0028,1041)",vr:"SS",name:"PixelIntensityRelationshipSign",vm:"1",version:"DICOM"},"(0028,1050)":{tag:"(0028,1050)",vr:"DS",name:"WindowCenter",vm:"1-n",version:"DICOM"},"(0028,1051)":{tag:"(0028,1051)",vr:"DS",name:"WindowWidth",vm:"1-n",version:"DICOM"},"(0028,1052)":{tag:"(0028,1052)",vr:"DS",name:"RescaleIntercept",vm:"1",version:"DICOM"},"(0028,1053)":{tag:"(0028,1053)",vr:"DS",name:"RescaleSlope",vm:"1",version:"DICOM"},"(0028,1054)":{tag:"(0028,1054)",vr:"LO",name:"RescaleType",vm:"1",version:"DICOM"},"(0028,1055)":{tag:"(0028,1055)",vr:"LO",name:"WindowCenterWidthExplanation",vm:"1-n",version:"DICOM"},"(0028,1056)":{tag:"(0028,1056)",vr:"CS",name:"VOILUTFunction",vm:"1",version:"DICOM"},"(0028,1090)":{tag:"(0028,1090)",vr:"CS",name:"RecommendedViewingMode",vm:"1",version:"DICOM"},"(0028,1101)":{tag:"(0028,1101)",vr:"xs",name:"RedPaletteColorLookupTableDescriptor",vm:"3",version:"DICOM"},"(0028,1102)":{tag:"(0028,1102)",vr:"xs",name:"GreenPaletteColorLookupTableDescriptor",vm:"3",version:"DICOM"},"(0028,1103)":{tag:"(0028,1103)",vr:"xs",name:"BluePaletteColorLookupTableDescriptor",vm:"3",version:"DICOM"},"(0028,1104)":{tag:"(0028,1104)",vr:"US",name:"AlphaPaletteColorLookupTableDescriptor",vm:"3",version:"DICOM"},"(0028,1199)":{tag:"(0028,1199)",vr:"UI",name:"PaletteColorLookupTableUID",vm:"1",version:"DICOM"},"(0028,1201)":{tag:"(0028,1201)",vr:"OW",name:"RedPaletteColorLookupTableData",vm:"1",version:"DICOM"},"(0028,1202)":{tag:"(0028,1202)",vr:"OW",name:"GreenPaletteColorLookupTableData",vm:"1",version:"DICOM"},"(0028,1203)":{tag:"(0028,1203)",vr:"OW",name:"BluePaletteColorLookupTableData",vm:"1",version:"DICOM"},"(0028,1204)":{tag:"(0028,1204)",vr:"OW",name:"AlphaPaletteColorLookupTableData",vm:"1",version:"DICOM"},"(0028,1221)":{tag:"(0028,1221)",vr:"OW",name:"SegmentedRedPaletteColorLookupTableData",vm:"1",version:"DICOM"},"(0028,1222)":{tag:"(0028,1222)",vr:"OW",name:"SegmentedGreenPaletteColorLookupTableData",vm:"1",version:"DICOM"},"(0028,1223)":{tag:"(0028,1223)",vr:"OW",name:"SegmentedBluePaletteColorLookupTableData",vm:"1",version:"DICOM"},"(0028,1230)":{tag:"(0028,1230)",vr:"SQ",name:"StoredValueColorRangeSequence",vm:"1",version:"DICOM"},"(0028,1231)":{tag:"(0028,1231)",vr:"FD",name:"MinimumStoredValueMapped",vm:"1",version:"DICOM"},"(0028,1232)":{tag:"(0028,1232)",vr:"FD",name:"MaximumStoredValueMapped",vm:"1",version:"DICOM"},"(0028,1300)":{tag:"(0028,1300)",vr:"CS",name:"BreastImplantPresent",vm:"1",version:"DICOM"},"(0028,1350)":{tag:"(0028,1350)",vr:"CS",name:"PartialView",vm:"1",version:"DICOM"},"(0028,1351)":{tag:"(0028,1351)",vr:"ST",name:"PartialViewDescription",vm:"1",version:"DICOM"},"(0028,1352)":{tag:"(0028,1352)",vr:"SQ",name:"PartialViewCodeSequence",vm:"1",version:"DICOM"},"(0028,135A)":{tag:"(0028,135A)",vr:"CS",name:"SpatialLocationsPreserved",vm:"1",version:"DICOM"},"(0028,1401)":{tag:"(0028,1401)",vr:"SQ",name:"DataFrameAssignmentSequence",vm:"1",version:"DICOM"},"(0028,1402)":{tag:"(0028,1402)",vr:"CS",name:"DataPathAssignment",vm:"1",version:"DICOM"},"(0028,1403)":{tag:"(0028,1403)",vr:"US",name:"BitsMappedToColorLookupTable",vm:"1",version:"DICOM"},"(0028,1404)":{tag:"(0028,1404)",vr:"SQ",name:"BlendingLUT1Sequence",vm:"1",version:"DICOM"},"(0028,1405)":{tag:"(0028,1405)",vr:"CS",name:"BlendingLUT1TransferFunction",vm:"1",version:"DICOM"},"(0028,1406)":{tag:"(0028,1406)",vr:"FD",name:"BlendingWeightConstant",vm:"1",version:"DICOM"},"(0028,1407)":{tag:"(0028,1407)",vr:"US",name:"BlendingLookupTableDescriptor",vm:"3",version:"DICOM"},"(0028,1408)":{tag:"(0028,1408)",vr:"OW",name:"BlendingLookupTableData",vm:"1",version:"DICOM"},"(0028,140B)":{tag:"(0028,140B)",vr:"SQ",name:"EnhancedPaletteColorLookupTableSequence",vm:"1",version:"DICOM"},"(0028,140C)":{tag:"(0028,140C)",vr:"SQ",name:"BlendingLUT2Sequence",vm:"1",version:"DICOM"},"(0028,140D)":{tag:"(0028,140D)",vr:"CS",name:"BlendingLUT2TransferFunction",vm:"1",version:"DICOM"},"(0028,140E)":{tag:"(0028,140E)",vr:"CS",name:"DataPathID",vm:"1",version:"DICOM"},"(0028,140F)":{tag:"(0028,140F)",vr:"CS",name:"RGBLUTTransferFunction",vm:"1",version:"DICOM"},"(0028,1410)":{tag:"(0028,1410)",vr:"CS",name:"AlphaLUTTransferFunction",vm:"1",version:"DICOM"},"(0028,2000)":{tag:"(0028,2000)",vr:"OB",name:"ICCProfile",vm:"1",version:"DICOM"},"(0028,2110)":{tag:"(0028,2110)",vr:"CS",name:"LossyImageCompression",vm:"1",version:"DICOM"},"(0028,2112)":{tag:"(0028,2112)",vr:"DS",name:"LossyImageCompressionRatio",vm:"1-n",version:"DICOM"},"(0028,2114)":{tag:"(0028,2114)",vr:"CS",name:"LossyImageCompressionMethod",vm:"1-n",version:"DICOM"},"(0028,3000)":{tag:"(0028,3000)",vr:"SQ",name:"ModalityLUTSequence",vm:"1",version:"DICOM"},"(0028,3002)":{tag:"(0028,3002)",vr:"xs",name:"LUTDescriptor",vm:"3",version:"DICOM"},"(0028,3003)":{tag:"(0028,3003)",vr:"LO",name:"LUTExplanation",vm:"1",version:"DICOM"},"(0028,3004)":{tag:"(0028,3004)",vr:"LO",name:"ModalityLUTType",vm:"1",version:"DICOM"},"(0028,3006)":{tag:"(0028,3006)",vr:"lt",name:"LUTData",vm:"1-n",version:"DICOM"},"(0028,3010)":{tag:"(0028,3010)",vr:"SQ",name:"VOILUTSequence",vm:"1",version:"DICOM"},"(0028,3110)":{tag:"(0028,3110)",vr:"SQ",name:"SoftcopyVOILUTSequence",vm:"1",version:"DICOM"},"(0028,6010)":{tag:"(0028,6010)",vr:"US",name:"RepresentativeFrameNumber",vm:"1",version:"DICOM"},"(0028,6020)":{tag:"(0028,6020)",vr:"US",name:"FrameNumbersOfInterest",vm:"1-n",version:"DICOM"},"(0028,6022)":{tag:"(0028,6022)",vr:"LO",name:"FrameOfInterestDescription",vm:"1-n",version:"DICOM"},"(0028,6023)":{tag:"(0028,6023)",vr:"CS",name:"FrameOfInterestType",vm:"1-n",version:"DICOM"},"(0028,6040)":{tag:"(0028,6040)",vr:"US",name:"RWavePointer",vm:"1-n",version:"DICOM"},"(0028,6100)":{tag:"(0028,6100)",vr:"SQ",name:"MaskSubtractionSequence",vm:"1",version:"DICOM"},"(0028,6101)":{tag:"(0028,6101)",vr:"CS",name:"MaskOperation",vm:"1",version:"DICOM"},"(0028,6102)":{tag:"(0028,6102)",vr:"US",name:"ApplicableFrameRange",vm:"2-2n",version:"DICOM"},"(0028,6110)":{tag:"(0028,6110)",vr:"US",name:"MaskFrameNumbers",vm:"1-n",version:"DICOM"},"(0028,6112)":{tag:"(0028,6112)",vr:"US",name:"ContrastFrameAveraging",vm:"1",version:"DICOM"},"(0028,6114)":{tag:"(0028,6114)",vr:"FL",name:"MaskSubPixelShift",vm:"2",version:"DICOM"},"(0028,6120)":{tag:"(0028,6120)",vr:"SS",name:"TIDOffset",vm:"1",version:"DICOM"},"(0028,6190)":{tag:"(0028,6190)",vr:"ST",name:"MaskOperationExplanation",vm:"1",version:"DICOM"},"(0028,7000)":{tag:"(0028,7000)",vr:"SQ",name:"EquipmentAdministratorSequence",vm:"1",version:"DICOM"},"(0028,7001)":{tag:"(0028,7001)",vr:"US",name:"NumberOfDisplaySubsystems",vm:"1",version:"DICOM"},"(0028,7002)":{tag:"(0028,7002)",vr:"US",name:"CurrentConfigurationID",vm:"1",version:"DICOM"},"(0028,7003)":{tag:"(0028,7003)",vr:"US",name:"DisplaySubsystemID",vm:"1",version:"DICOM"},"(0028,7004)":{tag:"(0028,7004)",vr:"SH",name:"DisplaySubsystemName",vm:"1",version:"DICOM"},"(0028,7005)":{tag:"(0028,7005)",vr:"LO",name:"DisplaySubsystemDescription",vm:"1",version:"DICOM"},"(0028,7006)":{tag:"(0028,7006)",vr:"CS",name:"SystemStatus",vm:"1",version:"DICOM"},"(0028,7007)":{tag:"(0028,7007)",vr:"LO",name:"SystemStatusComment",vm:"1",version:"DICOM"},"(0028,7008)":{tag:"(0028,7008)",vr:"SQ",name:"TargetLuminanceCharacteristicsSequence",vm:"1",version:"DICOM"},"(0028,7009)":{tag:"(0028,7009)",vr:"US",name:"LuminanceCharacteristicsID",vm:"1",version:"DICOM"},"(0028,700A)":{tag:"(0028,700A)",vr:"SQ",name:"DisplaySubsystemConfigurationSequence",vm:"1",version:"DICOM"},"(0028,700B)":{tag:"(0028,700B)",vr:"US",name:"ConfigurationID",vm:"1",version:"DICOM"},"(0028,700C)":{tag:"(0028,700C)",vr:"SH",name:"ConfigurationName",vm:"1",version:"DICOM"},"(0028,700D)":{tag:"(0028,700D)",vr:"LO",name:"ConfigurationDescription",vm:"1",version:"DICOM"},"(0028,700E)":{tag:"(0028,700E)",vr:"US",name:"ReferencedTargetLuminanceCharacteristicsID",vm:"1",version:"DICOM"},"(0028,700F)":{tag:"(0028,700F)",vr:"SQ",name:"QAResultsSequence",vm:"1",version:"DICOM"},"(0028,7010)":{tag:"(0028,7010)",vr:"SQ",name:"DisplaySubsystemQAResultsSequence",vm:"1",version:"DICOM"},"(0028,7011)":{tag:"(0028,7011)",vr:"SQ",name:"ConfigurationQAResultsSequence",vm:"1",version:"DICOM"},"(0028,7012)":{tag:"(0028,7012)",vr:"SQ",name:"MeasurementEquipmentSequence",vm:"1",version:"DICOM"},"(0028,7013)":{tag:"(0028,7013)",vr:"CS",name:"MeasurementFunctions",vm:"1-n",version:"DICOM"},"(0028,7014)":{tag:"(0028,7014)",vr:"CS",name:"MeasurementEquipmentType",vm:"1",version:"DICOM"},"(0028,7015)":{tag:"(0028,7015)",vr:"SQ",name:"VisualEvaluationResultSequence",vm:"1",version:"DICOM"},"(0028,7016)":{tag:"(0028,7016)",vr:"SQ",name:"DisplayCalibrationResultSequence",vm:"1",version:"DICOM"},"(0028,7017)":{tag:"(0028,7017)",vr:"US",name:"DDLValue",vm:"1",version:"DICOM"},"(0028,7018)":{tag:"(0028,7018)",vr:"FL",name:"CIExyWhitePoint",vm:"2",version:"DICOM"},"(0028,7019)":{tag:"(0028,7019)",vr:"CS",name:"DisplayFunctionType",vm:"1",version:"DICOM"},"(0028,701A)":{tag:"(0028,701A)",vr:"FL",name:"GammaValue",vm:"1",version:"DICOM"},"(0028,701B)":{tag:"(0028,701B)",vr:"US",name:"NumberOfLuminancePoints",vm:"1",version:"DICOM"},"(0028,701C)":{tag:"(0028,701C)",vr:"SQ",name:"LuminanceResponseSequence",vm:"1",version:"DICOM"},"(0028,701D)":{tag:"(0028,701D)",vr:"FL",name:"TargetMinimumLuminance",vm:"1",version:"DICOM"},"(0028,701E)":{tag:"(0028,701E)",vr:"FL",name:"TargetMaximumLuminance",vm:"1",version:"DICOM"},"(0028,701F)":{tag:"(0028,701F)",vr:"FL",name:"LuminanceValue",vm:"1",version:"DICOM"},"(0028,7020)":{tag:"(0028,7020)",vr:"LO",name:"LuminanceResponseDescription",vm:"1",version:"DICOM"},"(0028,7021)":{tag:"(0028,7021)",vr:"CS",name:"WhitePointFlag",vm:"1",version:"DICOM"},"(0028,7022)":{tag:"(0028,7022)",vr:"SQ",name:"DisplayDeviceTypeCodeSequence",vm:"1",version:"DICOM"},"(0028,7023)":{tag:"(0028,7023)",vr:"SQ",name:"DisplaySubsystemSequence",vm:"1",version:"DICOM"},"(0028,7024)":{tag:"(0028,7024)",vr:"SQ",name:"LuminanceResultSequence",vm:"1",version:"DICOM"},"(0028,7025)":{tag:"(0028,7025)",vr:"CS",name:"AmbientLightValueSource",vm:"1",version:"DICOM"},"(0028,7026)":{tag:"(0028,7026)",vr:"CS",name:"MeasuredCharacteristics",vm:"1-n",version:"DICOM"},"(0028,7027)":{tag:"(0028,7027)",vr:"SQ",name:"LuminanceUniformityResultSequence",vm:"1",version:"DICOM"},"(0028,7028)":{tag:"(0028,7028)",vr:"SQ",name:"VisualEvaluationTestSequence",vm:"1",version:"DICOM"},"(0028,7029)":{tag:"(0028,7029)",vr:"CS",name:"TestResult",vm:"1",version:"DICOM"},"(0028,702A)":{tag:"(0028,702A)",vr:"LO",name:"TestResultComment",vm:"1",version:"DICOM"},"(0028,702B)":{tag:"(0028,702B)",vr:"CS",name:"TestImageValidation",vm:"1",version:"DICOM"},"(0028,702C)":{tag:"(0028,702C)",vr:"SQ",name:"TestPatternCodeSequence",vm:"1",version:"DICOM"},"(0028,702D)":{tag:"(0028,702D)",vr:"SQ",name:"MeasurementPatternCodeSequence",vm:"1",version:"DICOM"},"(0028,702E)":{tag:"(0028,702E)",vr:"SQ",name:"VisualEvaluationMethodCodeSequence",vm:"1",version:"DICOM"},"(0028,7FE0)":{tag:"(0028,7FE0)",vr:"UR",name:"PixelDataProviderURL",vm:"1",version:"DICOM"},"(0028,9001)":{tag:"(0028,9001)",vr:"UL",name:"DataPointRows",vm:"1",version:"DICOM"},"(0028,9002)":{tag:"(0028,9002)",vr:"UL",name:"DataPointColumns",vm:"1",version:"DICOM"},"(0028,9003)":{tag:"(0028,9003)",vr:"CS",name:"SignalDomainColumns",vm:"1",version:"DICOM"},"(0028,9108)":{tag:"(0028,9108)",vr:"CS",name:"DataRepresentation",vm:"1",version:"DICOM"},"(0028,9110)":{tag:"(0028,9110)",vr:"SQ",name:"PixelMeasuresSequence",vm:"1",version:"DICOM"},"(0028,9132)":{tag:"(0028,9132)",vr:"SQ",name:"FrameVOILUTSequence",vm:"1",version:"DICOM"},"(0028,9145)":{tag:"(0028,9145)",vr:"SQ",name:"PixelValueTransformationSequence",vm:"1",version:"DICOM"},"(0028,9235)":{tag:"(0028,9235)",vr:"CS",name:"SignalDomainRows",vm:"1",version:"DICOM"},"(0028,9411)":{tag:"(0028,9411)",vr:"FL",name:"DisplayFilterPercentage",vm:"1",version:"DICOM"},"(0028,9415)":{tag:"(0028,9415)",vr:"SQ",name:"FramePixelShiftSequence",vm:"1",version:"DICOM"},"(0028,9416)":{tag:"(0028,9416)",vr:"US",name:"SubtractionItemID",vm:"1",version:"DICOM"},"(0028,9422)":{tag:"(0028,9422)",vr:"SQ",name:"PixelIntensityRelationshipLUTSequence",vm:"1",version:"DICOM"},"(0028,9443)":{tag:"(0028,9443)",vr:"SQ",name:"FramePixelDataPropertiesSequence",vm:"1",version:"DICOM"},"(0028,9444)":{tag:"(0028,9444)",vr:"CS",name:"GeometricalProperties",vm:"1",version:"DICOM"},"(0028,9445)":{tag:"(0028,9445)",vr:"FL",name:"GeometricMaximumDistortion",vm:"1",version:"DICOM"},"(0028,9446)":{tag:"(0028,9446)",vr:"CS",name:"ImageProcessingApplied",vm:"1-n",version:"DICOM"},"(0028,9454)":{tag:"(0028,9454)",vr:"CS",name:"MaskSelectionMode",vm:"1",version:"DICOM"},"(0028,9474)":{tag:"(0028,9474)",vr:"CS",name:"LUTFunction",vm:"1",version:"DICOM"},"(0028,9478)":{tag:"(0028,9478)",vr:"FL",name:"MaskVisibilityPercentage",vm:"1",version:"DICOM"},"(0028,9501)":{tag:"(0028,9501)",vr:"SQ",name:"PixelShiftSequence",vm:"1",version:"DICOM"},"(0028,9502)":{tag:"(0028,9502)",vr:"SQ",name:"RegionPixelShiftSequence",vm:"1",version:"DICOM"},"(0028,9503)":{tag:"(0028,9503)",vr:"SS",name:"VerticesOfTheRegion",vm:"2-2n",version:"DICOM"},"(0028,9505)":{tag:"(0028,9505)",vr:"SQ",name:"MultiFramePresentationSequence",vm:"1",version:"DICOM"},"(0028,9506)":{tag:"(0028,9506)",vr:"US",name:"PixelShiftFrameRange",vm:"2-2n",version:"DICOM"},"(0028,9507)":{tag:"(0028,9507)",vr:"US",name:"LUTFrameRange",vm:"2-2n",version:"DICOM"},"(0028,9520)":{tag:"(0028,9520)",vr:"DS",name:"ImageToEquipmentMappingMatrix",vm:"16",version:"DICOM"},"(0028,9537)":{tag:"(0028,9537)",vr:"CS",name:"EquipmentCoordinateSystemIdentification",vm:"1",version:"DICOM"},"(0032,1031)":{tag:"(0032,1031)",vr:"SQ",name:"RequestingPhysicianIdentificationSequence",vm:"1",version:"DICOM"},"(0032,1032)":{tag:"(0032,1032)",vr:"PN",name:"RequestingPhysician",vm:"1",version:"DICOM"},"(0032,1033)":{tag:"(0032,1033)",vr:"LO",name:"RequestingService",vm:"1",version:"DICOM"},"(0032,1034)":{tag:"(0032,1034)",vr:"SQ",name:"RequestingServiceCodeSequence",vm:"1",version:"DICOM"},"(0032,1060)":{tag:"(0032,1060)",vr:"LO",name:"RequestedProcedureDescription",vm:"1",version:"DICOM"},"(0032,1064)":{tag:"(0032,1064)",vr:"SQ",name:"RequestedProcedureCodeSequence",vm:"1",version:"DICOM"},"(0032,1066)":{tag:"(0032,1066)",vr:"UT",name:"ReasonForVisit",vm:"1",version:"DICOM"},"(0032,1067)":{tag:"(0032,1067)",vr:"SQ",name:"ReasonForVisitCodeSequence",vm:"1",version:"DICOM"},"(0032,1070)":{tag:"(0032,1070)",vr:"LO",name:"RequestedContrastAgent",vm:"1",version:"DICOM"},"(0034,0001)":{tag:"(0034,0001)",vr:"SQ",name:"FlowIdentifierSequence",vm:"1",version:"DICOM"},"(0034,0002)":{tag:"(0034,0002)",vr:"OB",name:"FlowIdentifier",vm:"1",version:"DICOM"},"(0034,0003)":{tag:"(0034,0003)",vr:"UI",name:"FlowTransferSyntaxUID",vm:"1",version:"DICOM"},"(0034,0004)":{tag:"(0034,0004)",vr:"UL",name:"FlowRTPSamplingRate",vm:"1",version:"DICOM"},"(0034,0005)":{tag:"(0034,0005)",vr:"OB",name:"SourceIdentifier",vm:"1",version:"DICOM"},"(0034,0007)":{tag:"(0034,0007)",vr:"OB",name:"FrameOriginTimestamp",vm:"1",version:"DICOM"},"(0034,0008)":{tag:"(0034,0008)",vr:"CS",name:"IncludesImagingSubject",vm:"1",version:"DICOM"},"(0034,0009)":{tag:"(0034,0009)",vr:"SQ",name:"FrameUsefulnessGroupSequence",vm:"1",version:"DICOM"},"(0034,000A)":{tag:"(0034,000A)",vr:"SQ",name:"RealTimeBulkDataFlowSequence",vm:"1",version:"DICOM"},"(0034,000B)":{tag:"(0034,000B)",vr:"SQ",name:"CameraPositionGroupSequence",vm:"1",version:"DICOM"},"(0034,000C)":{tag:"(0034,000C)",vr:"CS",name:"IncludesInformation",vm:"1",version:"DICOM"},"(0034,000D)":{tag:"(0034,000D)",vr:"SQ",name:"TimeOfFrameGroupSequence",vm:"1",version:"DICOM"},"(0038,0004)":{tag:"(0038,0004)",vr:"SQ",name:"ReferencedPatientAliasSequence",vm:"1",version:"DICOM"},"(0038,0008)":{tag:"(0038,0008)",vr:"CS",name:"VisitStatusID",vm:"1",version:"DICOM"},"(0038,0010)":{tag:"(0038,0010)",vr:"LO",name:"AdmissionID",vm:"1",version:"DICOM"},"(0038,0014)":{tag:"(0038,0014)",vr:"SQ",name:"IssuerOfAdmissionIDSequence",vm:"1",version:"DICOM"},"(0038,0016)":{tag:"(0038,0016)",vr:"LO",name:"RouteOfAdmissions",vm:"1",version:"DICOM"},"(0038,0020)":{tag:"(0038,0020)",vr:"DA",name:"AdmittingDate",vm:"1",version:"DICOM"},"(0038,0021)":{tag:"(0038,0021)",vr:"TM",name:"AdmittingTime",vm:"1",version:"DICOM"},"(0038,0050)":{tag:"(0038,0050)",vr:"LO",name:"SpecialNeeds",vm:"1",version:"DICOM"},"(0038,0060)":{tag:"(0038,0060)",vr:"LO",name:"ServiceEpisodeID",vm:"1",version:"DICOM"},"(0038,0062)":{tag:"(0038,0062)",vr:"LO",name:"ServiceEpisodeDescription",vm:"1",version:"DICOM"},"(0038,0064)":{tag:"(0038,0064)",vr:"SQ",name:"IssuerOfServiceEpisodeIDSequence",vm:"1",version:"DICOM"},"(0038,0100)":{tag:"(0038,0100)",vr:"SQ",name:"PertinentDocumentsSequence",vm:"1",version:"DICOM"},"(0038,0101)":{tag:"(0038,0101)",vr:"SQ",name:"PertinentResourcesSequence",vm:"1",version:"DICOM"},"(0038,0102)":{tag:"(0038,0102)",vr:"LO",name:"ResourceDescription",vm:"1",version:"DICOM"},"(0038,0300)":{tag:"(0038,0300)",vr:"LO",name:"CurrentPatientLocation",vm:"1",version:"DICOM"},"(0038,0400)":{tag:"(0038,0400)",vr:"LO",name:"PatientInstitutionResidence",vm:"1",version:"DICOM"},"(0038,0500)":{tag:"(0038,0500)",vr:"LO",name:"PatientState",vm:"1",version:"DICOM"},"(0038,0502)":{tag:"(0038,0502)",vr:"SQ",name:"PatientClinicalTrialParticipationSequence",vm:"1",version:"DICOM"},"(0038,4000)":{tag:"(0038,4000)",vr:"LT",name:"VisitComments",vm:"1",version:"DICOM"},"(003A,0004)":{tag:"(003A,0004)",vr:"CS",name:"WaveformOriginality",vm:"1",version:"DICOM"},"(003A,0005)":{tag:"(003A,0005)",vr:"US",name:"NumberOfWaveformChannels",vm:"1",version:"DICOM"},"(003A,0010)":{tag:"(003A,0010)",vr:"UL",name:"NumberOfWaveformSamples",vm:"1",version:"DICOM"},"(003A,001A)":{tag:"(003A,001A)",vr:"DS",name:"SamplingFrequency",vm:"1",version:"DICOM"},"(003A,0020)":{tag:"(003A,0020)",vr:"SH",name:"MultiplexGroupLabel",vm:"1",version:"DICOM"},"(003A,0200)":{tag:"(003A,0200)",vr:"SQ",name:"ChannelDefinitionSequence",vm:"1",version:"DICOM"},"(003A,0202)":{tag:"(003A,0202)",vr:"IS",name:"WaveformChannelNumber",vm:"1",version:"DICOM"},"(003A,0203)":{tag:"(003A,0203)",vr:"SH",name:"ChannelLabel",vm:"1",version:"DICOM"},"(003A,0205)":{tag:"(003A,0205)",vr:"CS",name:"ChannelStatus",vm:"1-n",version:"DICOM"},"(003A,0208)":{tag:"(003A,0208)",vr:"SQ",name:"ChannelSourceSequence",vm:"1",version:"DICOM"},"(003A,0209)":{tag:"(003A,0209)",vr:"SQ",name:"ChannelSourceModifiersSequence",vm:"1",version:"DICOM"},"(003A,020A)":{tag:"(003A,020A)",vr:"SQ",name:"SourceWaveformSequence",vm:"1",version:"DICOM"},"(003A,020C)":{tag:"(003A,020C)",vr:"LO",name:"ChannelDerivationDescription",vm:"1",version:"DICOM"},"(003A,0210)":{tag:"(003A,0210)",vr:"DS",name:"ChannelSensitivity",vm:"1",version:"DICOM"},"(003A,0211)":{tag:"(003A,0211)",vr:"SQ",name:"ChannelSensitivityUnitsSequence",vm:"1",version:"DICOM"},"(003A,0212)":{tag:"(003A,0212)",vr:"DS",name:"ChannelSensitivityCorrectionFactor",vm:"1",version:"DICOM"},"(003A,0213)":{tag:"(003A,0213)",vr:"DS",name:"ChannelBaseline",vm:"1",version:"DICOM"},"(003A,0214)":{tag:"(003A,0214)",vr:"DS",name:"ChannelTimeSkew",vm:"1",version:"DICOM"},"(003A,0215)":{tag:"(003A,0215)",vr:"DS",name:"ChannelSampleSkew",vm:"1",version:"DICOM"},"(003A,0218)":{tag:"(003A,0218)",vr:"DS",name:"ChannelOffset",vm:"1",version:"DICOM"},"(003A,021A)":{tag:"(003A,021A)",vr:"US",name:"WaveformBitsStored",vm:"1",version:"DICOM"},"(003A,0220)":{tag:"(003A,0220)",vr:"DS",name:"FilterLowFrequency",vm:"1",version:"DICOM"},"(003A,0221)":{tag:"(003A,0221)",vr:"DS",name:"FilterHighFrequency",vm:"1",version:"DICOM"},"(003A,0222)":{tag:"(003A,0222)",vr:"DS",name:"NotchFilterFrequency",vm:"1",version:"DICOM"},"(003A,0223)":{tag:"(003A,0223)",vr:"DS",name:"NotchFilterBandwidth",vm:"1",version:"DICOM"},"(003A,0230)":{tag:"(003A,0230)",vr:"FL",name:"WaveformDataDisplayScale",vm:"1",version:"DICOM"},"(003A,0231)":{tag:"(003A,0231)",vr:"US",name:"WaveformDisplayBackgroundCIELabValue",vm:"3",version:"DICOM"},"(003A,0240)":{tag:"(003A,0240)",vr:"SQ",name:"WaveformPresentationGroupSequence",vm:"1",version:"DICOM"},"(003A,0241)":{tag:"(003A,0241)",vr:"US",name:"PresentationGroupNumber",vm:"1",version:"DICOM"},"(003A,0242)":{tag:"(003A,0242)",vr:"SQ",name:"ChannelDisplaySequence",vm:"1",version:"DICOM"},"(003A,0244)":{tag:"(003A,0244)",vr:"US",name:"ChannelRecommendedDisplayCIELabValue",vm:"3",version:"DICOM"},"(003A,0245)":{tag:"(003A,0245)",vr:"FL",name:"ChannelPosition",vm:"1",version:"DICOM"},"(003A,0246)":{tag:"(003A,0246)",vr:"CS",name:"DisplayShadingFlag",vm:"1",version:"DICOM"},"(003A,0247)":{tag:"(003A,0247)",vr:"FL",name:"FractionalChannelDisplayScale",vm:"1",version:"DICOM"},"(003A,0248)":{tag:"(003A,0248)",vr:"FL",name:"AbsoluteChannelDisplayScale",vm:"1",version:"DICOM"},"(003A,0300)":{tag:"(003A,0300)",vr:"SQ",name:"MultiplexedAudioChannelsDescriptionCodeSequence",vm:"1",version:"DICOM"},"(003A,0301)":{tag:"(003A,0301)",vr:"IS",name:"ChannelIdentificationCode",vm:"1",version:"DICOM"},"(003A,0302)":{tag:"(003A,0302)",vr:"CS",name:"ChannelMode",vm:"1",version:"DICOM"},"(003A,0310)":{tag:"(003A,0310)",vr:"UI",name:"MultiplexGroupUID",vm:"1",version:"DICOM"},"(003A,0311)":{tag:"(003A,0311)",vr:"DS",name:"PowerlineFrequency",vm:"1",version:"DICOM"},"(003A,0312)":{tag:"(003A,0312)",vr:"SQ",name:"ChannelImpedanceSequence",vm:"1",version:"DICOM"},"(003A,0313)":{tag:"(003A,0313)",vr:"DS",name:"ImpedanceValue",vm:"1",version:"DICOM"},"(003A,0314)":{tag:"(003A,0314)",vr:"DT",name:"ImpedanceMeasurementDateTime",vm:"1",version:"DICOM"},"(003A,0315)":{tag:"(003A,0315)",vr:"DS",name:"ImpedanceMeasurementFrequency",vm:"1",version:"DICOM"},"(003A,0316)":{tag:"(003A,0316)",vr:"CS",name:"ImpedanceMeasurementCurrentType",vm:"1",version:"DICOM"},"(0040,0001)":{tag:"(0040,0001)",vr:"AE",name:"ScheduledStationAETitle",vm:"1-n",version:"DICOM"},"(0040,0002)":{tag:"(0040,0002)",vr:"DA",name:"ScheduledProcedureStepStartDate",vm:"1",version:"DICOM"},"(0040,0003)":{tag:"(0040,0003)",vr:"TM",name:"ScheduledProcedureStepStartTime",vm:"1",version:"DICOM"},"(0040,0004)":{tag:"(0040,0004)",vr:"DA",name:"ScheduledProcedureStepEndDate",vm:"1",version:"DICOM"},"(0040,0005)":{tag:"(0040,0005)",vr:"TM",name:"ScheduledProcedureStepEndTime",vm:"1",version:"DICOM"},"(0040,0006)":{tag:"(0040,0006)",vr:"PN",name:"ScheduledPerformingPhysicianName",vm:"1",version:"DICOM"},"(0040,0007)":{tag:"(0040,0007)",vr:"LO",name:"ScheduledProcedureStepDescription",vm:"1",version:"DICOM"},"(0040,0008)":{tag:"(0040,0008)",vr:"SQ",name:"ScheduledProtocolCodeSequence",vm:"1",version:"DICOM"},"(0040,0009)":{tag:"(0040,0009)",vr:"SH",name:"ScheduledProcedureStepID",vm:"1",version:"DICOM"},"(0040,000A)":{tag:"(0040,000A)",vr:"SQ",name:"StageCodeSequence",vm:"1",version:"DICOM"},"(0040,000B)":{tag:"(0040,000B)",vr:"SQ",name:"ScheduledPerformingPhysicianIdentificationSequence",vm:"1",version:"DICOM"},"(0040,0010)":{tag:"(0040,0010)",vr:"SH",name:"ScheduledStationName",vm:"1-n",version:"DICOM"},"(0040,0011)":{tag:"(0040,0011)",vr:"SH",name:"ScheduledProcedureStepLocation",vm:"1",version:"DICOM"},"(0040,0012)":{tag:"(0040,0012)",vr:"LO",name:"PreMedication",vm:"1",version:"DICOM"},"(0040,0020)":{tag:"(0040,0020)",vr:"CS",name:"ScheduledProcedureStepStatus",vm:"1",version:"DICOM"},"(0040,0026)":{tag:"(0040,0026)",vr:"SQ",name:"OrderPlacerIdentifierSequence",vm:"1",version:"DICOM"},"(0040,0027)":{tag:"(0040,0027)",vr:"SQ",name:"OrderFillerIdentifierSequence",vm:"1",version:"DICOM"},"(0040,0031)":{tag:"(0040,0031)",vr:"UT",name:"LocalNamespaceEntityID",vm:"1",version:"DICOM"},"(0040,0032)":{tag:"(0040,0032)",vr:"UT",name:"UniversalEntityID",vm:"1",version:"DICOM"},"(0040,0033)":{tag:"(0040,0033)",vr:"CS",name:"UniversalEntityIDType",vm:"1",version:"DICOM"},"(0040,0035)":{tag:"(0040,0035)",vr:"CS",name:"IdentifierTypeCode",vm:"1",version:"DICOM"},"(0040,0036)":{tag:"(0040,0036)",vr:"SQ",name:"AssigningFacilitySequence",vm:"1",version:"DICOM"},"(0040,0039)":{tag:"(0040,0039)",vr:"SQ",name:"AssigningJurisdictionCodeSequence",vm:"1",version:"DICOM"},"(0040,003A)":{tag:"(0040,003A)",vr:"SQ",name:"AssigningAgencyOrDepartmentCodeSequence",vm:"1",version:"DICOM"},"(0040,0100)":{tag:"(0040,0100)",vr:"SQ",name:"ScheduledProcedureStepSequence",vm:"1",version:"DICOM"},"(0040,0220)":{tag:"(0040,0220)",vr:"SQ",name:"ReferencedNonImageCompositeSOPInstanceSequence",vm:"1",version:"DICOM"},"(0040,0241)":{tag:"(0040,0241)",vr:"AE",name:"PerformedStationAETitle",vm:"1",version:"DICOM"},"(0040,0242)":{tag:"(0040,0242)",vr:"SH",name:"PerformedStationName",vm:"1",version:"DICOM"},"(0040,0243)":{tag:"(0040,0243)",vr:"SH",name:"PerformedLocation",vm:"1",version:"DICOM"},"(0040,0244)":{tag:"(0040,0244)",vr:"DA",name:"PerformedProcedureStepStartDate",vm:"1",version:"DICOM"},"(0040,0245)":{tag:"(0040,0245)",vr:"TM",name:"PerformedProcedureStepStartTime",vm:"1",version:"DICOM"},"(0040,0250)":{tag:"(0040,0250)",vr:"DA",name:"PerformedProcedureStepEndDate",vm:"1",version:"DICOM"},"(0040,0251)":{tag:"(0040,0251)",vr:"TM",name:"PerformedProcedureStepEndTime",vm:"1",version:"DICOM"},"(0040,0252)":{tag:"(0040,0252)",vr:"CS",name:"PerformedProcedureStepStatus",vm:"1",version:"DICOM"},"(0040,0253)":{tag:"(0040,0253)",vr:"SH",name:"PerformedProcedureStepID",vm:"1",version:"DICOM"},"(0040,0254)":{tag:"(0040,0254)",vr:"LO",name:"PerformedProcedureStepDescription",vm:"1",version:"DICOM"},"(0040,0255)":{tag:"(0040,0255)",vr:"LO",name:"PerformedProcedureTypeDescription",vm:"1",version:"DICOM"},"(0040,0260)":{tag:"(0040,0260)",vr:"SQ",name:"PerformedProtocolCodeSequence",vm:"1",version:"DICOM"},"(0040,0261)":{tag:"(0040,0261)",vr:"CS",name:"PerformedProtocolType",vm:"1",version:"DICOM"},"(0040,0270)":{tag:"(0040,0270)",vr:"SQ",name:"ScheduledStepAttributesSequence",vm:"1",version:"DICOM"},"(0040,0275)":{tag:"(0040,0275)",vr:"SQ",name:"RequestAttributesSequence",vm:"1",version:"DICOM"},"(0040,0280)":{tag:"(0040,0280)",vr:"ST",name:"CommentsOnThePerformedProcedureStep",vm:"1",version:"DICOM"},"(0040,0281)":{tag:"(0040,0281)",vr:"SQ",name:"PerformedProcedureStepDiscontinuationReasonCodeSequence",vm:"1",version:"DICOM"},"(0040,0293)":{tag:"(0040,0293)",vr:"SQ",name:"QuantitySequence",vm:"1",version:"DICOM"},"(0040,0294)":{tag:"(0040,0294)",vr:"DS",name:"Quantity",vm:"1",version:"DICOM"},"(0040,0295)":{tag:"(0040,0295)",vr:"SQ",name:"MeasuringUnitsSequence",vm:"1",version:"DICOM"},"(0040,0296)":{tag:"(0040,0296)",vr:"SQ",name:"BillingItemSequence",vm:"1",version:"DICOM"},"(0040,0300)":{tag:"(0040,0300)",vr:"US",name:"TotalTimeOfFluoroscopy",vm:"1",version:"DICOM"},"(0040,0301)":{tag:"(0040,0301)",vr:"US",name:"TotalNumberOfExposures",vm:"1",version:"DICOM"},"(0040,0302)":{tag:"(0040,0302)",vr:"US",name:"EntranceDose",vm:"1",version:"DICOM"},"(0040,0303)":{tag:"(0040,0303)",vr:"US",name:"ExposedArea",vm:"1-2",version:"DICOM"},"(0040,0306)":{tag:"(0040,0306)",vr:"DS",name:"DistanceSourceToEntrance",vm:"1",version:"DICOM"},"(0040,030E)":{tag:"(0040,030E)",vr:"SQ",name:"ExposureDoseSequence",vm:"1",version:"DICOM"},"(0040,0310)":{tag:"(0040,0310)",vr:"ST",name:"CommentsOnRadiationDose",vm:"1",version:"DICOM"},"(0040,0312)":{tag:"(0040,0312)",vr:"DS",name:"XRayOutput",vm:"1",version:"DICOM"},"(0040,0314)":{tag:"(0040,0314)",vr:"DS",name:"HalfValueLayer",vm:"1",version:"DICOM"},"(0040,0316)":{tag:"(0040,0316)",vr:"DS",name:"OrganDose",vm:"1",version:"DICOM"},"(0040,0318)":{tag:"(0040,0318)",vr:"CS",name:"OrganExposed",vm:"1",version:"DICOM"},"(0040,0320)":{tag:"(0040,0320)",vr:"SQ",name:"BillingProcedureStepSequence",vm:"1",version:"DICOM"},"(0040,0321)":{tag:"(0040,0321)",vr:"SQ",name:"FilmConsumptionSequence",vm:"1",version:"DICOM"},"(0040,0324)":{tag:"(0040,0324)",vr:"SQ",name:"BillingSuppliesAndDevicesSequence",vm:"1",version:"DICOM"},"(0040,0340)":{tag:"(0040,0340)",vr:"SQ",name:"PerformedSeriesSequence",vm:"1",version:"DICOM"},"(0040,0400)":{tag:"(0040,0400)",vr:"LT",name:"CommentsOnTheScheduledProcedureStep",vm:"1",version:"DICOM"},"(0040,0440)":{tag:"(0040,0440)",vr:"SQ",name:"ProtocolContextSequence",vm:"1",version:"DICOM"},"(0040,0441)":{tag:"(0040,0441)",vr:"SQ",name:"ContentItemModifierSequence",vm:"1",version:"DICOM"},"(0040,0500)":{tag:"(0040,0500)",vr:"SQ",name:"ScheduledSpecimenSequence",vm:"1",version:"DICOM"},"(0040,0512)":{tag:"(0040,0512)",vr:"LO",name:"ContainerIdentifier",vm:"1",version:"DICOM"},"(0040,0513)":{tag:"(0040,0513)",vr:"SQ",name:"IssuerOfTheContainerIdentifierSequence",vm:"1",version:"DICOM"},"(0040,0515)":{tag:"(0040,0515)",vr:"SQ",name:"AlternateContainerIdentifierSequence",vm:"1",version:"DICOM"},"(0040,0518)":{tag:"(0040,0518)",vr:"SQ",name:"ContainerTypeCodeSequence",vm:"1",version:"DICOM"},"(0040,051A)":{tag:"(0040,051A)",vr:"LO",name:"ContainerDescription",vm:"1",version:"DICOM"},"(0040,0520)":{tag:"(0040,0520)",vr:"SQ",name:"ContainerComponentSequence",vm:"1",version:"DICOM"},"(0040,0551)":{tag:"(0040,0551)",vr:"LO",name:"SpecimenIdentifier",vm:"1",version:"DICOM"},"(0040,0554)":{tag:"(0040,0554)",vr:"UI",name:"SpecimenUID",vm:"1",version:"DICOM"},"(0040,0555)":{tag:"(0040,0555)",vr:"SQ",name:"AcquisitionContextSequence",vm:"1",version:"DICOM"},"(0040,0556)":{tag:"(0040,0556)",vr:"ST",name:"AcquisitionContextDescription",vm:"1",version:"DICOM"},"(0040,0560)":{tag:"(0040,0560)",vr:"SQ",name:"SpecimenDescriptionSequence",vm:"1",version:"DICOM"},"(0040,0562)":{tag:"(0040,0562)",vr:"SQ",name:"IssuerOfTheSpecimenIdentifierSequence",vm:"1",version:"DICOM"},"(0040,059A)":{tag:"(0040,059A)",vr:"SQ",name:"SpecimenTypeCodeSequence",vm:"1",version:"DICOM"},"(0040,0600)":{tag:"(0040,0600)",vr:"LO",name:"SpecimenShortDescription",vm:"1",version:"DICOM"},"(0040,0602)":{tag:"(0040,0602)",vr:"UT",name:"SpecimenDetailedDescription",vm:"1",version:"DICOM"},"(0040,0610)":{tag:"(0040,0610)",vr:"SQ",name:"SpecimenPreparationSequence",vm:"1",version:"DICOM"},"(0040,0612)":{tag:"(0040,0612)",vr:"SQ",name:"SpecimenPreparationStepContentItemSequence",vm:"1",version:"DICOM"},"(0040,0620)":{tag:"(0040,0620)",vr:"SQ",name:"SpecimenLocalizationContentItemSequence",vm:"1",version:"DICOM"},"(0040,0710)":{tag:"(0040,0710)",vr:"SQ",name:"WholeSlideMicroscopyImageFrameTypeSequence",vm:"1",version:"DICOM"},"(0040,071A)":{tag:"(0040,071A)",vr:"SQ",name:"ImageCenterPointCoordinatesSequence",vm:"1",version:"DICOM"},"(0040,072A)":{tag:"(0040,072A)",vr:"DS",name:"XOffsetInSlideCoordinateSystem",vm:"1",version:"DICOM"},"(0040,073A)":{tag:"(0040,073A)",vr:"DS",name:"YOffsetInSlideCoordinateSystem",vm:"1",version:"DICOM"},"(0040,074A)":{tag:"(0040,074A)",vr:"DS",name:"ZOffsetInSlideCoordinateSystem",vm:"1",version:"DICOM"},"(0040,08EA)":{tag:"(0040,08EA)",vr:"SQ",name:"MeasurementUnitsCodeSequence",vm:"1",version:"DICOM"},"(0040,1001)":{tag:"(0040,1001)",vr:"SH",name:"RequestedProcedureID",vm:"1",version:"DICOM"},"(0040,1002)":{tag:"(0040,1002)",vr:"LO",name:"ReasonForTheRequestedProcedure",vm:"1",version:"DICOM"},"(0040,1003)":{tag:"(0040,1003)",vr:"SH",name:"RequestedProcedurePriority",vm:"1",version:"DICOM"},"(0040,1004)":{tag:"(0040,1004)",vr:"LO",name:"PatientTransportArrangements",vm:"1",version:"DICOM"},"(0040,1005)":{tag:"(0040,1005)",vr:"LO",name:"RequestedProcedureLocation",vm:"1",version:"DICOM"},"(0040,1008)":{tag:"(0040,1008)",vr:"LO",name:"ConfidentialityCode",vm:"1",version:"DICOM"},"(0040,1009)":{tag:"(0040,1009)",vr:"SH",name:"ReportingPriority",vm:"1",version:"DICOM"},"(0040,100A)":{tag:"(0040,100A)",vr:"SQ",name:"ReasonForRequestedProcedureCodeSequence",vm:"1",version:"DICOM"},"(0040,1010)":{tag:"(0040,1010)",vr:"PN",name:"NamesOfIntendedRecipientsOfResults",vm:"1-n",version:"DICOM"},"(0040,1011)":{tag:"(0040,1011)",vr:"SQ",name:"IntendedRecipientsOfResultsIdentificationSequence",vm:"1",version:"DICOM"},"(0040,1012)":{tag:"(0040,1012)",vr:"SQ",name:"ReasonForPerformedProcedureCodeSequence",vm:"1",version:"DICOM"},"(0040,1101)":{tag:"(0040,1101)",vr:"SQ",name:"PersonIdentificationCodeSequence",vm:"1",version:"DICOM"},"(0040,1102)":{tag:"(0040,1102)",vr:"ST",name:"PersonAddress",vm:"1",version:"DICOM"},"(0040,1103)":{tag:"(0040,1103)",vr:"LO",name:"PersonTelephoneNumbers",vm:"1-n",version:"DICOM"},"(0040,1104)":{tag:"(0040,1104)",vr:"LT",name:"PersonTelecomInformation",vm:"1",version:"DICOM"},"(0040,1400)":{tag:"(0040,1400)",vr:"LT",name:"RequestedProcedureComments",vm:"1",version:"DICOM"},"(0040,2004)":{tag:"(0040,2004)",vr:"DA",name:"IssueDateOfImagingServiceRequest",vm:"1",version:"DICOM"},"(0040,2005)":{tag:"(0040,2005)",vr:"TM",name:"IssueTimeOfImagingServiceRequest",vm:"1",version:"DICOM"},"(0040,2008)":{tag:"(0040,2008)",vr:"PN",name:"OrderEnteredBy",vm:"1",version:"DICOM"},"(0040,2009)":{tag:"(0040,2009)",vr:"SH",name:"OrderEntererLocation",vm:"1",version:"DICOM"},"(0040,2010)":{tag:"(0040,2010)",vr:"SH",name:"OrderCallbackPhoneNumber",vm:"1",version:"DICOM"},"(0040,2011)":{tag:"(0040,2011)",vr:"LT",name:"OrderCallbackTelecomInformation",vm:"1",version:"DICOM"},"(0040,2016)":{tag:"(0040,2016)",vr:"LO",name:"PlacerOrderNumberImagingServiceRequest",vm:"1",version:"DICOM"},"(0040,2017)":{tag:"(0040,2017)",vr:"LO",name:"FillerOrderNumberImagingServiceRequest",vm:"1",version:"DICOM"},"(0040,2400)":{tag:"(0040,2400)",vr:"LT",name:"ImagingServiceRequestComments",vm:"1",version:"DICOM"},"(0040,3001)":{tag:"(0040,3001)",vr:"LO",name:"ConfidentialityConstraintOnPatientDataDescription",vm:"1",version:"DICOM"},"(0040,4005)":{tag:"(0040,4005)",vr:"DT",name:"ScheduledProcedureStepStartDateTime",vm:"1",version:"DICOM"},"(0040,4007)":{tag:"(0040,4007)",vr:"SQ",name:"PerformedProcessingApplicationsCodeSequence",vm:"1",version:"DICOM"},"(0040,4008)":{tag:"(0040,4008)",vr:"DT",name:"ScheduledProcedureStepExpirationDateTime",vm:"1",version:"DICOM"},"(0040,4009)":{tag:"(0040,4009)",vr:"SQ",name:"HumanPerformerCodeSequence",vm:"1",version:"DICOM"},"(0040,4010)":{tag:"(0040,4010)",vr:"DT",name:"ScheduledProcedureStepModificationDateTime",vm:"1",version:"DICOM"},"(0040,4011)":{tag:"(0040,4011)",vr:"DT",name:"ExpectedCompletionDateTime",vm:"1",version:"DICOM"},"(0040,4018)":{tag:"(0040,4018)",vr:"SQ",name:"ScheduledWorkitemCodeSequence",vm:"1",version:"DICOM"},"(0040,4019)":{tag:"(0040,4019)",vr:"SQ",name:"PerformedWorkitemCodeSequence",vm:"1",version:"DICOM"},"(0040,4020)":{tag:"(0040,4020)",vr:"CS",name:"InputAvailabilityFlag",vm:"1",version:"DICOM"},"(0040,4021)":{tag:"(0040,4021)",vr:"SQ",name:"InputInformationSequence",vm:"1",version:"DICOM"},"(0040,4025)":{tag:"(0040,4025)",vr:"SQ",name:"ScheduledStationNameCodeSequence",vm:"1",version:"DICOM"},"(0040,4026)":{tag:"(0040,4026)",vr:"SQ",name:"ScheduledStationClassCodeSequence",vm:"1",version:"DICOM"},"(0040,4027)":{tag:"(0040,4027)",vr:"SQ",name:"ScheduledStationGeographicLocationCodeSequence",vm:"1",version:"DICOM"},"(0040,4028)":{tag:"(0040,4028)",vr:"SQ",name:"PerformedStationNameCodeSequence",vm:"1",version:"DICOM"},"(0040,4029)":{tag:"(0040,4029)",vr:"SQ",name:"PerformedStationClassCodeSequence",vm:"1",version:"DICOM"},"(0040,4030)":{tag:"(0040,4030)",vr:"SQ",name:"PerformedStationGeographicLocationCodeSequence",vm:"1",version:"DICOM"},"(0040,4033)":{tag:"(0040,4033)",vr:"SQ",name:"OutputInformationSequence",vm:"1",version:"DICOM"},"(0040,4034)":{tag:"(0040,4034)",vr:"SQ",name:"ScheduledHumanPerformersSequence",vm:"1",version:"DICOM"},"(0040,4035)":{tag:"(0040,4035)",vr:"SQ",name:"ActualHumanPerformersSequence",vm:"1",version:"DICOM"},"(0040,4036)":{tag:"(0040,4036)",vr:"LO",name:"HumanPerformerOrganization",vm:"1",version:"DICOM"},"(0040,4037)":{tag:"(0040,4037)",vr:"PN",name:"HumanPerformerName",vm:"1",version:"DICOM"},"(0040,4040)":{tag:"(0040,4040)",vr:"CS",name:"RawDataHandling",vm:"1",version:"DICOM"},"(0040,4041)":{tag:"(0040,4041)",vr:"CS",name:"InputReadinessState",vm:"1",version:"DICOM"},"(0040,4050)":{tag:"(0040,4050)",vr:"DT",name:"PerformedProcedureStepStartDateTime",vm:"1",version:"DICOM"},"(0040,4051)":{tag:"(0040,4051)",vr:"DT",name:"PerformedProcedureStepEndDateTime",vm:"1",version:"DICOM"},"(0040,4052)":{tag:"(0040,4052)",vr:"DT",name:"ProcedureStepCancellationDateTime",vm:"1",version:"DICOM"},"(0040,8302)":{tag:"(0040,8302)",vr:"DS",name:"EntranceDoseInmGy",vm:"1",version:"DICOM"},"(0040,8303)":{tag:"(0040,8303)",vr:"CS",name:"EntranceDoseDerivation",vm:"1",version:"DICOM"},"(0040,9092)":{tag:"(0040,9092)",vr:"SQ",name:"ParametricMapFrameTypeSequence",vm:"1",version:"DICOM"},"(0040,9094)":{tag:"(0040,9094)",vr:"SQ",name:"ReferencedImageRealWorldValueMappingSequence",vm:"1",version:"DICOM"},"(0040,9096)":{tag:"(0040,9096)",vr:"SQ",name:"RealWorldValueMappingSequence",vm:"1",version:"DICOM"},"(0040,9098)":{tag:"(0040,9098)",vr:"SQ",name:"PixelValueMappingCodeSequence",vm:"1",version:"DICOM"},"(0040,9210)":{tag:"(0040,9210)",vr:"SH",name:"LUTLabel",vm:"1",version:"DICOM"},"(0040,9211)":{tag:"(0040,9211)",vr:"xs",name:"RealWorldValueLastValueMapped",vm:"1",version:"DICOM"},"(0040,9212)":{tag:"(0040,9212)",vr:"FD",name:"RealWorldValueLUTData",vm:"1-n",version:"DICOM"},"(0040,9216)":{tag:"(0040,9216)",vr:"xs",name:"RealWorldValueFirstValueMapped",vm:"1",version:"DICOM"},"(0040,9220)":{tag:"(0040,9220)",vr:"SQ",name:"QuantityDefinitionSequence",vm:"1",version:"DICOM"},"(0040,9224)":{tag:"(0040,9224)",vr:"FD",name:"RealWorldValueIntercept",vm:"1",version:"DICOM"},"(0040,9225)":{tag:"(0040,9225)",vr:"FD",name:"RealWorldValueSlope",vm:"1",version:"DICOM"},"(0040,A010)":{tag:"(0040,A010)",vr:"CS",name:"RelationshipType",vm:"1",version:"DICOM"},"(0040,A027)":{tag:"(0040,A027)",vr:"LO",name:"VerifyingOrganization",vm:"1",version:"DICOM"},"(0040,A030)":{tag:"(0040,A030)",vr:"DT",name:"VerificationDateTime",vm:"1",version:"DICOM"},"(0040,A032)":{tag:"(0040,A032)",vr:"DT",name:"ObservationDateTime",vm:"1",version:"DICOM"},"(0040,A033)":{tag:"(0040,A033)",vr:"DT",name:"ObservationStartDateTime",vm:"1",version:"DICOM"},"(0040,A040)":{tag:"(0040,A040)",vr:"CS",name:"ValueType",vm:"1",version:"DICOM"},"(0040,A043)":{tag:"(0040,A043)",vr:"SQ",name:"ConceptNameCodeSequence",vm:"1",version:"DICOM"},"(0040,A050)":{tag:"(0040,A050)",vr:"CS",name:"ContinuityOfContent",vm:"1",version:"DICOM"},"(0040,A073)":{tag:"(0040,A073)",vr:"SQ",name:"VerifyingObserverSequence",vm:"1",version:"DICOM"},"(0040,A075)":{tag:"(0040,A075)",vr:"PN",name:"VerifyingObserverName",vm:"1",version:"DICOM"},"(0040,A078)":{tag:"(0040,A078)",vr:"SQ",name:"AuthorObserverSequence",vm:"1",version:"DICOM"},"(0040,A07A)":{tag:"(0040,A07A)",vr:"SQ",name:"ParticipantSequence",vm:"1",version:"DICOM"},"(0040,A07C)":{tag:"(0040,A07C)",vr:"SQ",name:"CustodialOrganizationSequence",vm:"1",version:"DICOM"},"(0040,A080)":{tag:"(0040,A080)",vr:"CS",name:"ParticipationType",vm:"1",version:"DICOM"},"(0040,A082)":{tag:"(0040,A082)",vr:"DT",name:"ParticipationDateTime",vm:"1",version:"DICOM"},"(0040,A084)":{tag:"(0040,A084)",vr:"CS",name:"ObserverType",vm:"1",version:"DICOM"},"(0040,A088)":{tag:"(0040,A088)",vr:"SQ",name:"VerifyingObserverIdentificationCodeSequence",vm:"1",version:"DICOM"},"(0040,A0B0)":{tag:"(0040,A0B0)",vr:"US",name:"ReferencedWaveformChannels",vm:"2-2n",version:"DICOM"},"(0040,A120)":{tag:"(0040,A120)",vr:"DT",name:"DateTime",vm:"1",version:"DICOM"},"(0040,A121)":{tag:"(0040,A121)",vr:"DA",name:"Date",vm:"1",version:"DICOM"},"(0040,A122)":{tag:"(0040,A122)",vr:"TM",name:"Time",vm:"1",version:"DICOM"},"(0040,A123)":{tag:"(0040,A123)",vr:"PN",name:"PersonName",vm:"1",version:"DICOM"},"(0040,A124)":{tag:"(0040,A124)",vr:"UI",name:"UID",vm:"1",version:"DICOM"},"(0040,A130)":{tag:"(0040,A130)",vr:"CS",name:"TemporalRangeType",vm:"1",version:"DICOM"},"(0040,A132)":{tag:"(0040,A132)",vr:"UL",name:"ReferencedSamplePositions",vm:"1-n",version:"DICOM"},"(0040,A136)":{tag:"(0040,A136)",vr:"US",name:"ReferencedFrameNumbers",vm:"1-n",version:"DICOM"},"(0040,A138)":{tag:"(0040,A138)",vr:"DS",name:"ReferencedTimeOffsets",vm:"1-n",version:"DICOM"},"(0040,A13A)":{tag:"(0040,A13A)",vr:"DT",name:"ReferencedDateTime",vm:"1-n",version:"DICOM"},"(0040,A160)":{tag:"(0040,A160)",vr:"UT",name:"TextValue",vm:"1",version:"DICOM"},"(0040,A161)":{tag:"(0040,A161)",vr:"FD",name:"FloatingPointValue",vm:"1-n",version:"DICOM"},"(0040,A162)":{tag:"(0040,A162)",vr:"SL",name:"RationalNumeratorValue",vm:"1-n",version:"DICOM"},"(0040,A163)":{tag:"(0040,A163)",vr:"UL",name:"RationalDenominatorValue",vm:"1-n",version:"DICOM"},"(0040,A168)":{tag:"(0040,A168)",vr:"SQ",name:"ConceptCodeSequence",vm:"1",version:"DICOM"},"(0040,A170)":{tag:"(0040,A170)",vr:"SQ",name:"PurposeOfReferenceCodeSequence",vm:"1",version:"DICOM"},"(0040,A171)":{tag:"(0040,A171)",vr:"UI",name:"ObservationUID",vm:"1",version:"DICOM"},"(0040,A180)":{tag:"(0040,A180)",vr:"US",name:"AnnotationGroupNumber",vm:"1",version:"DICOM"},"(0040,A195)":{tag:"(0040,A195)",vr:"SQ",name:"ModifierCodeSequence",vm:"1",version:"DICOM"},"(0040,A300)":{tag:"(0040,A300)",vr:"SQ",name:"MeasuredValueSequence",vm:"1",version:"DICOM"},"(0040,A301)":{tag:"(0040,A301)",vr:"SQ",name:"NumericValueQualifierCodeSequence",vm:"1",version:"DICOM"},"(0040,A30A)":{tag:"(0040,A30A)",vr:"DS",name:"NumericValue",vm:"1-n",version:"DICOM"},"(0040,A360)":{tag:"(0040,A360)",vr:"SQ",name:"PredecessorDocumentsSequence",vm:"1",version:"DICOM"},"(0040,A370)":{tag:"(0040,A370)",vr:"SQ",name:"ReferencedRequestSequence",vm:"1",version:"DICOM"},"(0040,A372)":{tag:"(0040,A372)",vr:"SQ",name:"PerformedProcedureCodeSequence",vm:"1",version:"DICOM"},"(0040,A375)":{tag:"(0040,A375)",vr:"SQ",name:"CurrentRequestedProcedureEvidenceSequence",vm:"1",version:"DICOM"},"(0040,A385)":{tag:"(0040,A385)",vr:"SQ",name:"PertinentOtherEvidenceSequence",vm:"1",version:"DICOM"},"(0040,A390)":{tag:"(0040,A390)",vr:"SQ",name:"HL7StructuredDocumentReferenceSequence",vm:"1",version:"DICOM"},"(0040,A491)":{tag:"(0040,A491)",vr:"CS",name:"CompletionFlag",vm:"1",version:"DICOM"},"(0040,A492)":{tag:"(0040,A492)",vr:"LO",name:"CompletionFlagDescription",vm:"1",version:"DICOM"},"(0040,A493)":{tag:"(0040,A493)",vr:"CS",name:"VerificationFlag",vm:"1",version:"DICOM"},"(0040,A494)":{tag:"(0040,A494)",vr:"CS",name:"ArchiveRequested",vm:"1",version:"DICOM"},"(0040,A496)":{tag:"(0040,A496)",vr:"CS",name:"PreliminaryFlag",vm:"1",version:"DICOM"},"(0040,A504)":{tag:"(0040,A504)",vr:"SQ",name:"ContentTemplateSequence",vm:"1",version:"DICOM"},"(0040,A525)":{tag:"(0040,A525)",vr:"SQ",name:"IdenticalDocumentsSequence",vm:"1",version:"DICOM"},"(0040,A730)":{tag:"(0040,A730)",vr:"SQ",name:"ContentSequence",vm:"1",version:"DICOM"},"(0040,A801)":{tag:"(0040,A801)",vr:"SQ",name:"TabulatedValuesSequence",vm:"1",version:"DICOM"},"(0040,A802)":{tag:"(0040,A802)",vr:"UL",name:"NumberOfTableRows",vm:"1",version:"DICOM"},"(0040,A803)":{tag:"(0040,A803)",vr:"UL",name:"NumbeOfTableColumns",vm:"1",version:"DICOM"},"(0040,A804)":{tag:"(0040,A804)",vr:"UL",name:"TableRowNumber",vm:"1",version:"DICOM"},"(0040,A805)":{tag:"(0040,A805)",vr:"UL",name:"TableColumnNumber",vm:"1",version:"DICOM"},"(0040,A806)":{tag:"(0040,A806)",vr:"SQ",name:"TableRowDefinitionSequence",vm:"1",version:"DICOM"},"(0040,A807)":{tag:"(0040,A807)",vr:"SQ",name:"TableColumnDefinitionSequence",vm:"1",version:"DICOM"},"(0040,A808)":{tag:"(0040,A808)",vr:"SQ",name:"CellValuesSequence",vm:"1",version:"DICOM"},"(0040,B020)":{tag:"(0040,B020)",vr:"SQ",name:"WaveformAnnotationSequence",vm:"1",version:"DICOM"},"(0040,DB00)":{tag:"(0040,DB00)",vr:"CS",name:"TemplateIdentifier",vm:"1",version:"DICOM"},"(0040,DB73)":{tag:"(0040,DB73)",vr:"UL",name:"ReferencedContentItemIdentifier",vm:"1-n",version:"DICOM"},"(0040,E001)":{tag:"(0040,E001)",vr:"ST",name:"HL7InstanceIdentifier",vm:"1",version:"DICOM"},"(0040,E004)":{tag:"(0040,E004)",vr:"DT",name:"HL7DocumentEffectiveTime",vm:"1",version:"DICOM"},"(0040,E006)":{tag:"(0040,E006)",vr:"SQ",name:"HL7DocumentTypeCodeSequence",vm:"1",version:"DICOM"},"(0040,E008)":{tag:"(0040,E008)",vr:"SQ",name:"DocumentClassCodeSequence",vm:"1",version:"DICOM"},"(0040,E010)":{tag:"(0040,E010)",vr:"UR",name:"RetrieveURI",vm:"1",version:"DICOM"},"(0040,E011)":{tag:"(0040,E011)",vr:"UI",name:"RetrieveLocationUID",vm:"1",version:"DICOM"},"(0040,E020)":{tag:"(0040,E020)",vr:"CS",name:"TypeOfInstances",vm:"1",version:"DICOM"},"(0040,E021)":{tag:"(0040,E021)",vr:"SQ",name:"DICOMRetrievalSequence",vm:"1",version:"DICOM"},"(0040,E022)":{tag:"(0040,E022)",vr:"SQ",name:"DICOMMediaRetrievalSequence",vm:"1",version:"DICOM"},"(0040,E023)":{tag:"(0040,E023)",vr:"SQ",name:"WADORetrievalSequence",vm:"1",version:"DICOM"},"(0040,E024)":{tag:"(0040,E024)",vr:"SQ",name:"XDSRetrievalSequence",vm:"1",version:"DICOM"},"(0040,E025)":{tag:"(0040,E025)",vr:"SQ",name:"WADORSRetrievalSequence",vm:"1",version:"DICOM"},"(0040,E030)":{tag:"(0040,E030)",vr:"UI",name:"RepositoryUniqueID",vm:"1",version:"DICOM"},"(0040,E031)":{tag:"(0040,E031)",vr:"UI",name:"HomeCommunityID",vm:"1",version:"DICOM"},"(0042,0010)":{tag:"(0042,0010)",vr:"ST",name:"DocumentTitle",vm:"1",version:"DICOM"},"(0042,0011)":{tag:"(0042,0011)",vr:"OB",name:"EncapsulatedDocument",vm:"1",version:"DICOM"},"(0042,0012)":{tag:"(0042,0012)",vr:"LO",name:"MIMETypeOfEncapsulatedDocument",vm:"1",version:"DICOM"},"(0042,0013)":{tag:"(0042,0013)",vr:"SQ",name:"SourceInstanceSequence",vm:"1",version:"DICOM"},"(0042,0014)":{tag:"(0042,0014)",vr:"LO",name:"ListOfMIMETypes",vm:"1-n",version:"DICOM"},"(0042,0015)":{tag:"(0042,0015)",vr:"UL",name:"EncapsulatedDocumentLength",vm:"1",version:"DICOM"},"(0044,0001)":{tag:"(0044,0001)",vr:"ST",name:"ProductPackageIdentifier",vm:"1",version:"DICOM"},"(0044,0002)":{tag:"(0044,0002)",vr:"CS",name:"SubstanceAdministrationApproval",vm:"1",version:"DICOM"},"(0044,0003)":{tag:"(0044,0003)",vr:"LT",name:"ApprovalStatusFurtherDescription",vm:"1",version:"DICOM"},"(0044,0004)":{tag:"(0044,0004)",vr:"DT",name:"ApprovalStatusDateTime",vm:"1",version:"DICOM"},"(0044,0007)":{tag:"(0044,0007)",vr:"SQ",name:"ProductTypeCodeSequence",vm:"1",version:"DICOM"},"(0044,0008)":{tag:"(0044,0008)",vr:"LO",name:"ProductName",vm:"1-n",version:"DICOM"},"(0044,0009)":{tag:"(0044,0009)",vr:"LT",name:"ProductDescription",vm:"1",version:"DICOM"},"(0044,000A)":{tag:"(0044,000A)",vr:"LO",name:"ProductLotIdentifier",vm:"1",version:"DICOM"},"(0044,000B)":{tag:"(0044,000B)",vr:"DT",name:"ProductExpirationDateTime",vm:"1",version:"DICOM"},"(0044,0010)":{tag:"(0044,0010)",vr:"DT",name:"SubstanceAdministrationDateTime",vm:"1",version:"DICOM"},"(0044,0011)":{tag:"(0044,0011)",vr:"LO",name:"SubstanceAdministrationNotes",vm:"1",version:"DICOM"},"(0044,0012)":{tag:"(0044,0012)",vr:"LO",name:"SubstanceAdministrationDeviceID",vm:"1",version:"DICOM"},"(0044,0013)":{tag:"(0044,0013)",vr:"SQ",name:"ProductParameterSequence",vm:"1",version:"DICOM"},"(0044,0019)":{tag:"(0044,0019)",vr:"SQ",name:"SubstanceAdministrationParameterSequence",vm:"1",version:"DICOM"},"(0044,0100)":{tag:"(0044,0100)",vr:"SQ",name:"ApprovalSequence",vm:"1",version:"DICOM"},"(0044,0101)":{tag:"(0044,0101)",vr:"SQ",name:"AssertionCodeSequence",vm:"1",version:"DICOM"},"(0044,0102)":{tag:"(0044,0102)",vr:"UI",name:"AssertionUID",vm:"1",version:"DICOM"},"(0044,0103)":{tag:"(0044,0103)",vr:"SQ",name:"AsserterIdentificationSequence",vm:"1",version:"DICOM"},"(0044,0104)":{tag:"(0044,0104)",vr:"DT",name:"AssertionDateTime",vm:"1",version:"DICOM"},"(0044,0105)":{tag:"(0044,0105)",vr:"DT",name:"AssertionExpirationDateTime",vm:"1",version:"DICOM"},"(0044,0106)":{tag:"(0044,0106)",vr:"UT",name:"AssertionComments",vm:"1",version:"DICOM"},"(0044,0107)":{tag:"(0044,0107)",vr:"SQ",name:"RelatedAssertionSequence",vm:"1",version:"DICOM"},"(0044,0108)":{tag:"(0044,0108)",vr:"UI",name:"ReferencedAssertionUID",vm:"1",version:"DICOM"},"(0044,0109)":{tag:"(0044,0109)",vr:"SQ",name:"ApprovalSubjectSequence",vm:"1",version:"DICOM"},"(0044,010A)":{tag:"(0044,010A)",vr:"SQ",name:"OrganizationalRoleCodeSequence",vm:"1",version:"DICOM"},"(0046,0012)":{tag:"(0046,0012)",vr:"LO",name:"LensDescription",vm:"1",version:"DICOM"},"(0046,0014)":{tag:"(0046,0014)",vr:"SQ",name:"RightLensSequence",vm:"1",version:"DICOM"},"(0046,0015)":{tag:"(0046,0015)",vr:"SQ",name:"LeftLensSequence",vm:"1",version:"DICOM"},"(0046,0016)":{tag:"(0046,0016)",vr:"SQ",name:"UnspecifiedLateralityLensSequence",vm:"1",version:"DICOM"},"(0046,0018)":{tag:"(0046,0018)",vr:"SQ",name:"CylinderSequence",vm:"1",version:"DICOM"},"(0046,0028)":{tag:"(0046,0028)",vr:"SQ",name:"PrismSequence",vm:"1",version:"DICOM"},"(0046,0030)":{tag:"(0046,0030)",vr:"FD",name:"HorizontalPrismPower",vm:"1",version:"DICOM"},"(0046,0032)":{tag:"(0046,0032)",vr:"CS",name:"HorizontalPrismBase",vm:"1",version:"DICOM"},"(0046,0034)":{tag:"(0046,0034)",vr:"FD",name:"VerticalPrismPower",vm:"1",version:"DICOM"},"(0046,0036)":{tag:"(0046,0036)",vr:"CS",name:"VerticalPrismBase",vm:"1",version:"DICOM"},"(0046,0038)":{tag:"(0046,0038)",vr:"CS",name:"LensSegmentType",vm:"1",version:"DICOM"},"(0046,0040)":{tag:"(0046,0040)",vr:"FD",name:"OpticalTransmittance",vm:"1",version:"DICOM"},"(0046,0042)":{tag:"(0046,0042)",vr:"FD",name:"ChannelWidth",vm:"1",version:"DICOM"},"(0046,0044)":{tag:"(0046,0044)",vr:"FD",name:"PupilSize",vm:"1",version:"DICOM"},"(0046,0046)":{tag:"(0046,0046)",vr:"FD",name:"CornealSize",vm:"1",version:"DICOM"},"(0046,0047)":{tag:"(0046,0047)",vr:"SQ",name:"CornealSizeSequence",vm:"1",version:"DICOM"},"(0046,0050)":{tag:"(0046,0050)",vr:"SQ",name:"AutorefractionRightEyeSequence",vm:"1",version:"DICOM"},"(0046,0052)":{tag:"(0046,0052)",vr:"SQ",name:"AutorefractionLeftEyeSequence",vm:"1",version:"DICOM"},"(0046,0060)":{tag:"(0046,0060)",vr:"FD",name:"DistancePupillaryDistance",vm:"1",version:"DICOM"},"(0046,0062)":{tag:"(0046,0062)",vr:"FD",name:"NearPupillaryDistance",vm:"1",version:"DICOM"},"(0046,0063)":{tag:"(0046,0063)",vr:"FD",name:"IntermediatePupillaryDistance",vm:"1",version:"DICOM"},"(0046,0064)":{tag:"(0046,0064)",vr:"FD",name:"OtherPupillaryDistance",vm:"1",version:"DICOM"},"(0046,0070)":{tag:"(0046,0070)",vr:"SQ",name:"KeratometryRightEyeSequence",vm:"1",version:"DICOM"},"(0046,0071)":{tag:"(0046,0071)",vr:"SQ",name:"KeratometryLeftEyeSequence",vm:"1",version:"DICOM"},"(0046,0074)":{tag:"(0046,0074)",vr:"SQ",name:"SteepKeratometricAxisSequence",vm:"1",version:"DICOM"},"(0046,0075)":{tag:"(0046,0075)",vr:"FD",name:"RadiusOfCurvature",vm:"1",version:"DICOM"},"(0046,0076)":{tag:"(0046,0076)",vr:"FD",name:"KeratometricPower",vm:"1",version:"DICOM"},"(0046,0077)":{tag:"(0046,0077)",vr:"FD",name:"KeratometricAxis",vm:"1",version:"DICOM"},"(0046,0080)":{tag:"(0046,0080)",vr:"SQ",name:"FlatKeratometricAxisSequence",vm:"1",version:"DICOM"},"(0046,0092)":{tag:"(0046,0092)",vr:"CS",name:"BackgroundColor",vm:"1",version:"DICOM"},"(0046,0094)":{tag:"(0046,0094)",vr:"CS",name:"Optotype",vm:"1",version:"DICOM"},"(0046,0095)":{tag:"(0046,0095)",vr:"CS",name:"OptotypePresentation",vm:"1",version:"DICOM"},"(0046,0097)":{tag:"(0046,0097)",vr:"SQ",name:"SubjectiveRefractionRightEyeSequence",vm:"1",version:"DICOM"},"(0046,0098)":{tag:"(0046,0098)",vr:"SQ",name:"SubjectiveRefractionLeftEyeSequence",vm:"1",version:"DICOM"},"(0046,0100)":{tag:"(0046,0100)",vr:"SQ",name:"AddNearSequence",vm:"1",version:"DICOM"},"(0046,0101)":{tag:"(0046,0101)",vr:"SQ",name:"AddIntermediateSequence",vm:"1",version:"DICOM"},"(0046,0102)":{tag:"(0046,0102)",vr:"SQ",name:"AddOtherSequence",vm:"1",version:"DICOM"},"(0046,0104)":{tag:"(0046,0104)",vr:"FD",name:"AddPower",vm:"1",version:"DICOM"},"(0046,0106)":{tag:"(0046,0106)",vr:"FD",name:"ViewingDistance",vm:"1",version:"DICOM"},"(0046,0110)":{tag:"(0046,0110)",vr:"SQ",name:"CorneaMeasurementsSequence",vm:"1",version:"DICOM"},"(0046,0111)":{tag:"(0046,0111)",vr:"SQ",name:"SourceOfCorneaMeasurementDataCodeSequence",vm:"1",version:"DICOM"},"(0046,0112)":{tag:"(0046,0112)",vr:"SQ",name:"SteepCornealAxisSequence",vm:"1",version:"DICOM"},"(0046,0113)":{tag:"(0046,0113)",vr:"SQ",name:"FlatCornealAxisSequence",vm:"1",version:"DICOM"},"(0046,0114)":{tag:"(0046,0114)",vr:"FD",name:"CornealPower",vm:"1",version:"DICOM"},"(0046,0115)":{tag:"(0046,0115)",vr:"FD",name:"CornealAxis",vm:"1",version:"DICOM"},"(0046,0116)":{tag:"(0046,0116)",vr:"SQ",name:"CorneaMeasurementMethodCodeSequence",vm:"1",version:"DICOM"},"(0046,0117)":{tag:"(0046,0117)",vr:"FL",name:"RefractiveIndexOfCornea",vm:"1",version:"DICOM"},"(0046,0118)":{tag:"(0046,0118)",vr:"FL",name:"RefractiveIndexOfAqueousHumor",vm:"1",version:"DICOM"},"(0046,0121)":{tag:"(0046,0121)",vr:"SQ",name:"VisualAcuityTypeCodeSequence",vm:"1",version:"DICOM"},"(0046,0122)":{tag:"(0046,0122)",vr:"SQ",name:"VisualAcuityRightEyeSequence",vm:"1",version:"DICOM"},"(0046,0123)":{tag:"(0046,0123)",vr:"SQ",name:"VisualAcuityLeftEyeSequence",vm:"1",version:"DICOM"},"(0046,0124)":{tag:"(0046,0124)",vr:"SQ",name:"VisualAcuityBothEyesOpenSequence",vm:"1",version:"DICOM"},"(0046,0125)":{tag:"(0046,0125)",vr:"CS",name:"ViewingDistanceType",vm:"1",version:"DICOM"},"(0046,0135)":{tag:"(0046,0135)",vr:"SS",name:"VisualAcuityModifiers",vm:"2",version:"DICOM"},"(0046,0137)":{tag:"(0046,0137)",vr:"FD",name:"DecimalVisualAcuity",vm:"1",version:"DICOM"},"(0046,0139)":{tag:"(0046,0139)",vr:"LO",name:"OptotypeDetailedDefinition",vm:"1",version:"DICOM"},"(0046,0145)":{tag:"(0046,0145)",vr:"SQ",name:"ReferencedRefractiveMeasurementsSequence",vm:"1",version:"DICOM"},"(0046,0146)":{tag:"(0046,0146)",vr:"FD",name:"SpherePower",vm:"1",version:"DICOM"},"(0046,0147)":{tag:"(0046,0147)",vr:"FD",name:"CylinderPower",vm:"1",version:"DICOM"},"(0046,0201)":{tag:"(0046,0201)",vr:"CS",name:"CornealTopographySurface",vm:"1",version:"DICOM"},"(0046,0202)":{tag:"(0046,0202)",vr:"FL",name:"CornealVertexLocation",vm:"2",version:"DICOM"},"(0046,0203)":{tag:"(0046,0203)",vr:"FL",name:"PupilCentroidXCoordinate",vm:"1",version:"DICOM"},"(0046,0204)":{tag:"(0046,0204)",vr:"FL",name:"PupilCentroidYCoordinate",vm:"1",version:"DICOM"},"(0046,0205)":{tag:"(0046,0205)",vr:"FL",name:"EquivalentPupilRadius",vm:"1",version:"DICOM"},"(0046,0207)":{tag:"(0046,0207)",vr:"SQ",name:"CornealTopographyMapTypeCodeSequence",vm:"1",version:"DICOM"},"(0046,0208)":{tag:"(0046,0208)",vr:"IS",name:"VerticesOfTheOutlineOfPupil",vm:"2-2n",version:"DICOM"},"(0046,0210)":{tag:"(0046,0210)",vr:"SQ",name:"CornealTopographyMappingNormalsSequence",vm:"1",version:"DICOM"},"(0046,0211)":{tag:"(0046,0211)",vr:"SQ",name:"MaximumCornealCurvatureSequence",vm:"1",version:"DICOM"},"(0046,0212)":{tag:"(0046,0212)",vr:"FL",name:"MaximumCornealCurvature",vm:"1",version:"DICOM"},"(0046,0213)":{tag:"(0046,0213)",vr:"FL",name:"MaximumCornealCurvatureLocation",vm:"2",version:"DICOM"},"(0046,0215)":{tag:"(0046,0215)",vr:"SQ",name:"MinimumKeratometricSequence",vm:"1",version:"DICOM"},"(0046,0218)":{tag:"(0046,0218)",vr:"SQ",name:"SimulatedKeratometricCylinderSequence",vm:"1",version:"DICOM"},"(0046,0220)":{tag:"(0046,0220)",vr:"FL",name:"AverageCornealPower",vm:"1",version:"DICOM"},"(0046,0224)":{tag:"(0046,0224)",vr:"FL",name:"CornealISValue",vm:"1",version:"DICOM"},"(0046,0227)":{tag:"(0046,0227)",vr:"FL",name:"AnalyzedArea",vm:"1",version:"DICOM"},"(0046,0230)":{tag:"(0046,0230)",vr:"FL",name:"SurfaceRegularityIndex",vm:"1",version:"DICOM"},"(0046,0232)":{tag:"(0046,0232)",vr:"FL",name:"SurfaceAsymmetryIndex",vm:"1",version:"DICOM"},"(0046,0234)":{tag:"(0046,0234)",vr:"FL",name:"CornealEccentricityIndex",vm:"1",version:"DICOM"},"(0046,0236)":{tag:"(0046,0236)",vr:"FL",name:"KeratoconusPredictionIndex",vm:"1",version:"DICOM"},"(0046,0238)":{tag:"(0046,0238)",vr:"FL",name:"DecimalPotentialVisualAcuity",vm:"1",version:"DICOM"},"(0046,0242)":{tag:"(0046,0242)",vr:"CS",name:"CornealTopographyMapQualityEvaluation",vm:"1",version:"DICOM"},"(0046,0244)":{tag:"(0046,0244)",vr:"SQ",name:"SourceImageCornealProcessedDataSequence",vm:"1",version:"DICOM"},"(0046,0247)":{tag:"(0046,0247)",vr:"FL",name:"CornealPointLocation",vm:"3",version:"DICOM"},"(0046,0248)":{tag:"(0046,0248)",vr:"CS",name:"CornealPointEstimated",vm:"1",version:"DICOM"},"(0046,0249)":{tag:"(0046,0249)",vr:"FL",name:"AxialPower",vm:"1",version:"DICOM"},"(0046,0250)":{tag:"(0046,0250)",vr:"FL",name:"TangentialPower",vm:"1",version:"DICOM"},"(0046,0251)":{tag:"(0046,0251)",vr:"FL",name:"RefractivePower",vm:"1",version:"DICOM"},"(0046,0252)":{tag:"(0046,0252)",vr:"FL",name:"RelativeElevation",vm:"1",version:"DICOM"},"(0046,0253)":{tag:"(0046,0253)",vr:"FL",name:"CornealWavefront",vm:"1",version:"DICOM"},"(0048,0001)":{tag:"(0048,0001)",vr:"FL",name:"ImagedVolumeWidth",vm:"1",version:"DICOM"},"(0048,0002)":{tag:"(0048,0002)",vr:"FL",name:"ImagedVolumeHeight",vm:"1",version:"DICOM"},"(0048,0003)":{tag:"(0048,0003)",vr:"FL",name:"ImagedVolumeDepth",vm:"1",version:"DICOM"},"(0048,0006)":{tag:"(0048,0006)",vr:"UL",name:"TotalPixelMatrixColumns",vm:"1",version:"DICOM"},"(0048,0007)":{tag:"(0048,0007)",vr:"UL",name:"TotalPixelMatrixRows",vm:"1",version:"DICOM"},"(0048,0008)":{tag:"(0048,0008)",vr:"SQ",name:"TotalPixelMatrixOriginSequence",vm:"1",version:"DICOM"},"(0048,0010)":{tag:"(0048,0010)",vr:"CS",name:"SpecimenLabelInImage",vm:"1",version:"DICOM"},"(0048,0011)":{tag:"(0048,0011)",vr:"CS",name:"FocusMethod",vm:"1",version:"DICOM"},"(0048,0012)":{tag:"(0048,0012)",vr:"CS",name:"ExtendedDepthOfField",vm:"1",version:"DICOM"},"(0048,0013)":{tag:"(0048,0013)",vr:"US",name:"NumberOfFocalPlanes",vm:"1",version:"DICOM"},"(0048,0014)":{tag:"(0048,0014)",vr:"FL",name:"DistanceBetweenFocalPlanes",vm:"1",version:"DICOM"},"(0048,0015)":{tag:"(0048,0015)",vr:"US",name:"RecommendedAbsentPixelCIELabValue",vm:"3",version:"DICOM"},"(0048,0100)":{tag:"(0048,0100)",vr:"SQ",name:"IlluminatorTypeCodeSequence",vm:"1",version:"DICOM"},"(0048,0102)":{tag:"(0048,0102)",vr:"DS",name:"ImageOrientationSlide",vm:"6",version:"DICOM"},"(0048,0105)":{tag:"(0048,0105)",vr:"SQ",name:"OpticalPathSequence",vm:"1",version:"DICOM"},"(0048,0106)":{tag:"(0048,0106)",vr:"SH",name:"OpticalPathIdentifier",vm:"1",version:"DICOM"},"(0048,0107)":{tag:"(0048,0107)",vr:"ST",name:"OpticalPathDescription",vm:"1",version:"DICOM"},"(0048,0108)":{tag:"(0048,0108)",vr:"SQ",name:"IlluminationColorCodeSequence",vm:"1",version:"DICOM"},"(0048,0110)":{tag:"(0048,0110)",vr:"SQ",name:"SpecimenReferenceSequence",vm:"1",version:"DICOM"},"(0048,0111)":{tag:"(0048,0111)",vr:"DS",name:"CondenserLensPower",vm:"1",version:"DICOM"},"(0048,0112)":{tag:"(0048,0112)",vr:"DS",name:"ObjectiveLensPower",vm:"1",version:"DICOM"},"(0048,0113)":{tag:"(0048,0113)",vr:"DS",name:"ObjectiveLensNumericalAperture",vm:"1",version:"DICOM"},"(0048,0120)":{tag:"(0048,0120)",vr:"SQ",name:"PaletteColorLookupTableSequence",vm:"1",version:"DICOM"},"(0048,0200)":{tag:"(0048,0200)",vr:"SQ",name:"ReferencedImageNavigationSequence",vm:"1",version:"DICOM"},"(0048,0201)":{tag:"(0048,0201)",vr:"US",name:"TopLeftHandCornerOfLocalizerArea",vm:"2",version:"DICOM"},"(0048,0202)":{tag:"(0048,0202)",vr:"US",name:"BottomRightHandCornerOfLocalizerArea",vm:"2",version:"DICOM"},"(0048,0207)":{tag:"(0048,0207)",vr:"SQ",name:"OpticalPathIdentificationSequence",vm:"1",version:"DICOM"},"(0048,021A)":{tag:"(0048,021A)",vr:"SQ",name:"PlanePositionSlideSequence",vm:"1",version:"DICOM"},"(0048,021E)":{tag:"(0048,021E)",vr:"SL",name:"ColumnPositionInTotalImagePixelMatrix",vm:"1",version:"DICOM"},"(0048,021F)":{tag:"(0048,021F)",vr:"SL",name:"RowPositionInTotalImagePixelMatrix",vm:"1",version:"DICOM"},"(0048,0301)":{tag:"(0048,0301)",vr:"CS",name:"PixelOriginInterpretation",vm:"1",version:"DICOM"},"(0048,0302)":{tag:"(0048,0302)",vr:"UL",name:"NumberOfOpticalPaths",vm:"1",version:"DICOM"},"(0048,0303)":{tag:"(0048,0303)",vr:"UL",name:"TotalPixelMatrixFocalPlanes",vm:"1",version:"DICOM"},"(0050,0004)":{tag:"(0050,0004)",vr:"CS",name:"CalibrationImage",vm:"1",version:"DICOM"},"(0050,0010)":{tag:"(0050,0010)",vr:"SQ",name:"DeviceSequence",vm:"1",version:"DICOM"},"(0050,0012)":{tag:"(0050,0012)",vr:"SQ",name:"ContainerComponentTypeCodeSequence",vm:"1",version:"DICOM"},"(0050,0013)":{tag:"(0050,0013)",vr:"FD",name:"ContainerComponentThickness",vm:"1",version:"DICOM"},"(0050,0014)":{tag:"(0050,0014)",vr:"DS",name:"DeviceLength",vm:"1",version:"DICOM"},"(0050,0015)":{tag:"(0050,0015)",vr:"FD",name:"ContainerComponentWidth",vm:"1",version:"DICOM"},"(0050,0016)":{tag:"(0050,0016)",vr:"DS",name:"DeviceDiameter",vm:"1",version:"DICOM"},"(0050,0017)":{tag:"(0050,0017)",vr:"CS",name:"DeviceDiameterUnits",vm:"1",version:"DICOM"},"(0050,0018)":{tag:"(0050,0018)",vr:"DS",name:"DeviceVolume",vm:"1",version:"DICOM"},"(0050,0019)":{tag:"(0050,0019)",vr:"DS",name:"InterMarkerDistance",vm:"1",version:"DICOM"},"(0050,001A)":{tag:"(0050,001A)",vr:"CS",name:"ContainerComponentMaterial",vm:"1",version:"DICOM"},"(0050,001B)":{tag:"(0050,001B)",vr:"LO",name:"ContainerComponentID",vm:"1",version:"DICOM"},"(0050,001C)":{tag:"(0050,001C)",vr:"FD",name:"ContainerComponentLength",vm:"1",version:"DICOM"},"(0050,001D)":{tag:"(0050,001D)",vr:"FD",name:"ContainerComponentDiameter",vm:"1",version:"DICOM"},"(0050,001E)":{tag:"(0050,001E)",vr:"LO",name:"ContainerComponentDescription",vm:"1",version:"DICOM"},"(0050,0020)":{tag:"(0050,0020)",vr:"LO",name:"DeviceDescription",vm:"1",version:"DICOM"},"(0050,0021)":{tag:"(0050,0021)",vr:"ST",name:"LongDeviceDescription",vm:"1",version:"DICOM"},"(0052,0001)":{tag:"(0052,0001)",vr:"FL",name:"ContrastBolusIngredientPercentByVolume",vm:"1",version:"DICOM"},"(0052,0002)":{tag:"(0052,0002)",vr:"FD",name:"OCTFocalDistance",vm:"1",version:"DICOM"},"(0052,0003)":{tag:"(0052,0003)",vr:"FD",name:"BeamSpotSize",vm:"1",version:"DICOM"},"(0052,0004)":{tag:"(0052,0004)",vr:"FD",name:"EffectiveRefractiveIndex",vm:"1",version:"DICOM"},"(0052,0006)":{tag:"(0052,0006)",vr:"CS",name:"OCTAcquisitionDomain",vm:"1",version:"DICOM"},"(0052,0007)":{tag:"(0052,0007)",vr:"FD",name:"OCTOpticalCenterWavelength",vm:"1",version:"DICOM"},"(0052,0008)":{tag:"(0052,0008)",vr:"FD",name:"AxialResolution",vm:"1",version:"DICOM"},"(0052,0009)":{tag:"(0052,0009)",vr:"FD",name:"RangingDepth",vm:"1",version:"DICOM"},"(0052,0011)":{tag:"(0052,0011)",vr:"FD",name:"ALineRate",vm:"1",version:"DICOM"},"(0052,0012)":{tag:"(0052,0012)",vr:"US",name:"ALinesPerFrame",vm:"1",version:"DICOM"},"(0052,0013)":{tag:"(0052,0013)",vr:"FD",name:"CatheterRotationalRate",vm:"1",version:"DICOM"},"(0052,0014)":{tag:"(0052,0014)",vr:"FD",name:"ALinePixelSpacing",vm:"1",version:"DICOM"},"(0052,0016)":{tag:"(0052,0016)",vr:"SQ",name:"ModeOfPercutaneousAccessSequence",vm:"1",version:"DICOM"},"(0052,0025)":{tag:"(0052,0025)",vr:"SQ",name:"IntravascularOCTFrameTypeSequence",vm:"1",version:"DICOM"},"(0052,0026)":{tag:"(0052,0026)",vr:"CS",name:"OCTZOffsetApplied",vm:"1",version:"DICOM"},"(0052,0027)":{tag:"(0052,0027)",vr:"SQ",name:"IntravascularFrameContentSequence",vm:"1",version:"DICOM"},"(0052,0028)":{tag:"(0052,0028)",vr:"FD",name:"IntravascularLongitudinalDistance",vm:"1",version:"DICOM"},"(0052,0029)":{tag:"(0052,0029)",vr:"SQ",name:"IntravascularOCTFrameContentSequence",vm:"1",version:"DICOM"},"(0052,0030)":{tag:"(0052,0030)",vr:"SS",name:"OCTZOffsetCorrection",vm:"1",version:"DICOM"},"(0052,0031)":{tag:"(0052,0031)",vr:"CS",name:"CatheterDirectionOfRotation",vm:"1",version:"DICOM"},"(0052,0033)":{tag:"(0052,0033)",vr:"FD",name:"SeamLineLocation",vm:"1",version:"DICOM"},"(0052,0034)":{tag:"(0052,0034)",vr:"FD",name:"FirstALineLocation",vm:"1",version:"DICOM"},"(0052,0036)":{tag:"(0052,0036)",vr:"US",name:"SeamLineIndex",vm:"1",version:"DICOM"},"(0052,0038)":{tag:"(0052,0038)",vr:"US",name:"NumberOfPaddedALines",vm:"1",version:"DICOM"},"(0052,0039)":{tag:"(0052,0039)",vr:"CS",name:"InterpolationType",vm:"1",version:"DICOM"},"(0052,003A)":{tag:"(0052,003A)",vr:"CS",name:"RefractiveIndexApplied",vm:"1",version:"DICOM"},"(0054,0010)":{tag:"(0054,0010)",vr:"US",name:"EnergyWindowVector",vm:"1-n",version:"DICOM"},"(0054,0011)":{tag:"(0054,0011)",vr:"US",name:"NumberOfEnergyWindows",vm:"1",version:"DICOM"},"(0054,0012)":{tag:"(0054,0012)",vr:"SQ",name:"EnergyWindowInformationSequence",vm:"1",version:"DICOM"},"(0054,0013)":{tag:"(0054,0013)",vr:"SQ",name:"EnergyWindowRangeSequence",vm:"1",version:"DICOM"},"(0054,0014)":{tag:"(0054,0014)",vr:"DS",name:"EnergyWindowLowerLimit",vm:"1",version:"DICOM"},"(0054,0015)":{tag:"(0054,0015)",vr:"DS",name:"EnergyWindowUpperLimit",vm:"1",version:"DICOM"},"(0054,0016)":{tag:"(0054,0016)",vr:"SQ",name:"RadiopharmaceuticalInformationSequence",vm:"1",version:"DICOM"},"(0054,0017)":{tag:"(0054,0017)",vr:"IS",name:"ResidualSyringeCounts",vm:"1",version:"DICOM"},"(0054,0018)":{tag:"(0054,0018)",vr:"SH",name:"EnergyWindowName",vm:"1",version:"DICOM"},"(0054,0020)":{tag:"(0054,0020)",vr:"US",name:"DetectorVector",vm:"1-n",version:"DICOM"},"(0054,0021)":{tag:"(0054,0021)",vr:"US",name:"NumberOfDetectors",vm:"1",version:"DICOM"},"(0054,0022)":{tag:"(0054,0022)",vr:"SQ",name:"DetectorInformationSequence",vm:"1",version:"DICOM"},"(0054,0030)":{tag:"(0054,0030)",vr:"US",name:"PhaseVector",vm:"1-n",version:"DICOM"},"(0054,0031)":{tag:"(0054,0031)",vr:"US",name:"NumberOfPhases",vm:"1",version:"DICOM"},"(0054,0032)":{tag:"(0054,0032)",vr:"SQ",name:"PhaseInformationSequence",vm:"1",version:"DICOM"},"(0054,0033)":{tag:"(0054,0033)",vr:"US",name:"NumberOfFramesInPhase",vm:"1",version:"DICOM"},"(0054,0036)":{tag:"(0054,0036)",vr:"IS",name:"PhaseDelay",vm:"1",version:"DICOM"},"(0054,0038)":{tag:"(0054,0038)",vr:"IS",name:"PauseBetweenFrames",vm:"1",version:"DICOM"},"(0054,0039)":{tag:"(0054,0039)",vr:"CS",name:"PhaseDescription",vm:"1",version:"DICOM"},"(0054,0050)":{tag:"(0054,0050)",vr:"US",name:"RotationVector",vm:"1-n",version:"DICOM"},"(0054,0051)":{tag:"(0054,0051)",vr:"US",name:"NumberOfRotations",vm:"1",version:"DICOM"},"(0054,0052)":{tag:"(0054,0052)",vr:"SQ",name:"RotationInformationSequence",vm:"1",version:"DICOM"},"(0054,0053)":{tag:"(0054,0053)",vr:"US",name:"NumberOfFramesInRotation",vm:"1",version:"DICOM"},"(0054,0060)":{tag:"(0054,0060)",vr:"US",name:"RRIntervalVector",vm:"1-n",version:"DICOM"},"(0054,0061)":{tag:"(0054,0061)",vr:"US",name:"NumberOfRRIntervals",vm:"1",version:"DICOM"},"(0054,0062)":{tag:"(0054,0062)",vr:"SQ",name:"GatedInformationSequence",vm:"1",version:"DICOM"},"(0054,0063)":{tag:"(0054,0063)",vr:"SQ",name:"DataInformationSequence",vm:"1",version:"DICOM"},"(0054,0070)":{tag:"(0054,0070)",vr:"US",name:"TimeSlotVector",vm:"1-n",version:"DICOM"},"(0054,0071)":{tag:"(0054,0071)",vr:"US",name:"NumberOfTimeSlots",vm:"1",version:"DICOM"},"(0054,0072)":{tag:"(0054,0072)",vr:"SQ",name:"TimeSlotInformationSequence",vm:"1",version:"DICOM"},"(0054,0073)":{tag:"(0054,0073)",vr:"DS",name:"TimeSlotTime",vm:"1",version:"DICOM"},"(0054,0080)":{tag:"(0054,0080)",vr:"US",name:"SliceVector",vm:"1-n",version:"DICOM"},"(0054,0081)":{tag:"(0054,0081)",vr:"US",name:"NumberOfSlices",vm:"1",version:"DICOM"},"(0054,0090)":{tag:"(0054,0090)",vr:"US",name:"AngularViewVector",vm:"1-n",version:"DICOM"},"(0054,0100)":{tag:"(0054,0100)",vr:"US",name:"TimeSliceVector",vm:"1-n",version:"DICOM"},"(0054,0101)":{tag:"(0054,0101)",vr:"US",name:"NumberOfTimeSlices",vm:"1",version:"DICOM"},"(0054,0200)":{tag:"(0054,0200)",vr:"DS",name:"StartAngle",vm:"1",version:"DICOM"},"(0054,0202)":{tag:"(0054,0202)",vr:"CS",name:"TypeOfDetectorMotion",vm:"1",version:"DICOM"},"(0054,0210)":{tag:"(0054,0210)",vr:"IS",name:"TriggerVector",vm:"1-n",version:"DICOM"},"(0054,0211)":{tag:"(0054,0211)",vr:"US",name:"NumberOfTriggersInPhase",vm:"1",version:"DICOM"},"(0054,0220)":{tag:"(0054,0220)",vr:"SQ",name:"ViewCodeSequence",vm:"1",version:"DICOM"},"(0054,0222)":{tag:"(0054,0222)",vr:"SQ",name:"ViewModifierCodeSequence",vm:"1",version:"DICOM"},"(0054,0300)":{tag:"(0054,0300)",vr:"SQ",name:"RadionuclideCodeSequence",vm:"1",version:"DICOM"},"(0054,0302)":{tag:"(0054,0302)",vr:"SQ",name:"AdministrationRouteCodeSequence",vm:"1",version:"DICOM"},"(0054,0304)":{tag:"(0054,0304)",vr:"SQ",name:"RadiopharmaceuticalCodeSequence",vm:"1",version:"DICOM"},"(0054,0306)":{tag:"(0054,0306)",vr:"SQ",name:"CalibrationDataSequence",vm:"1",version:"DICOM"},"(0054,0308)":{tag:"(0054,0308)",vr:"US",name:"EnergyWindowNumber",vm:"1",version:"DICOM"},"(0054,0400)":{tag:"(0054,0400)",vr:"SH",name:"ImageID",vm:"1",version:"DICOM"},"(0054,0410)":{tag:"(0054,0410)",vr:"SQ",name:"PatientOrientationCodeSequence",vm:"1",version:"DICOM"},"(0054,0412)":{tag:"(0054,0412)",vr:"SQ",name:"PatientOrientationModifierCodeSequence",vm:"1",version:"DICOM"},"(0054,0414)":{tag:"(0054,0414)",vr:"SQ",name:"PatientGantryRelationshipCodeSequence",vm:"1",version:"DICOM"},"(0054,0500)":{tag:"(0054,0500)",vr:"CS",name:"SliceProgressionDirection",vm:"1",version:"DICOM"},"(0054,0501)":{tag:"(0054,0501)",vr:"CS",name:"ScanProgressionDirection",vm:"1",version:"DICOM"},"(0054,1000)":{tag:"(0054,1000)",vr:"CS",name:"SeriesType",vm:"2",version:"DICOM"},"(0054,1001)":{tag:"(0054,1001)",vr:"CS",name:"Units",vm:"1",version:"DICOM"},"(0054,1002)":{tag:"(0054,1002)",vr:"CS",name:"CountsSource",vm:"1",version:"DICOM"},"(0054,1004)":{tag:"(0054,1004)",vr:"CS",name:"ReprojectionMethod",vm:"1",version:"DICOM"},"(0054,1006)":{tag:"(0054,1006)",vr:"CS",name:"SUVType",vm:"1",version:"DICOM"},"(0054,1100)":{tag:"(0054,1100)",vr:"CS",name:"RandomsCorrectionMethod",vm:"1",version:"DICOM"},"(0054,1101)":{tag:"(0054,1101)",vr:"LO",name:"AttenuationCorrectionMethod",vm:"1",version:"DICOM"},"(0054,1102)":{tag:"(0054,1102)",vr:"CS",name:"DecayCorrection",vm:"1",version:"DICOM"},"(0054,1103)":{tag:"(0054,1103)",vr:"LO",name:"ReconstructionMethod",vm:"1",version:"DICOM"},"(0054,1104)":{tag:"(0054,1104)",vr:"LO",name:"DetectorLinesOfResponseUsed",vm:"1",version:"DICOM"},"(0054,1105)":{tag:"(0054,1105)",vr:"LO",name:"ScatterCorrectionMethod",vm:"1",version:"DICOM"},"(0054,1200)":{tag:"(0054,1200)",vr:"DS",name:"AxialAcceptance",vm:"1",version:"DICOM"},"(0054,1201)":{tag:"(0054,1201)",vr:"IS",name:"AxialMash",vm:"2",version:"DICOM"},"(0054,1202)":{tag:"(0054,1202)",vr:"IS",name:"TransverseMash",vm:"1",version:"DICOM"},"(0054,1203)":{tag:"(0054,1203)",vr:"DS",name:"DetectorElementSize",vm:"2",version:"DICOM"},"(0054,1210)":{tag:"(0054,1210)",vr:"DS",name:"CoincidenceWindowWidth",vm:"1",version:"DICOM"},"(0054,1220)":{tag:"(0054,1220)",vr:"CS",name:"SecondaryCountsType",vm:"1-n",version:"DICOM"},"(0054,1300)":{tag:"(0054,1300)",vr:"DS",name:"FrameReferenceTime",vm:"1",version:"DICOM"},"(0054,1310)":{tag:"(0054,1310)",vr:"IS",name:"PrimaryPromptsCountsAccumulated",vm:"1",version:"DICOM"},"(0054,1311)":{tag:"(0054,1311)",vr:"IS",name:"SecondaryCountsAccumulated",vm:"1-n",version:"DICOM"},"(0054,1320)":{tag:"(0054,1320)",vr:"DS",name:"SliceSensitivityFactor",vm:"1",version:"DICOM"},"(0054,1321)":{tag:"(0054,1321)",vr:"DS",name:"DecayFactor",vm:"1",version:"DICOM"},"(0054,1322)":{tag:"(0054,1322)",vr:"DS",name:"DoseCalibrationFactor",vm:"1",version:"DICOM"},"(0054,1323)":{tag:"(0054,1323)",vr:"DS",name:"ScatterFractionFactor",vm:"1",version:"DICOM"},"(0054,1324)":{tag:"(0054,1324)",vr:"DS",name:"DeadTimeFactor",vm:"1",version:"DICOM"},"(0054,1330)":{tag:"(0054,1330)",vr:"US",name:"ImageIndex",vm:"1",version:"DICOM"},"(0060,3000)":{tag:"(0060,3000)",vr:"SQ",name:"HistogramSequence",vm:"1",version:"DICOM"},"(0060,3002)":{tag:"(0060,3002)",vr:"US",name:"HistogramNumberOfBins",vm:"1",version:"DICOM"},"(0060,3004)":{tag:"(0060,3004)",vr:"xs",name:"HistogramFirstBinValue",vm:"1",version:"DICOM"},"(0060,3006)":{tag:"(0060,3006)",vr:"xs",name:"HistogramLastBinValue",vm:"1",version:"DICOM"},"(0060,3008)":{tag:"(0060,3008)",vr:"US",name:"HistogramBinWidth",vm:"1",version:"DICOM"},"(0060,3010)":{tag:"(0060,3010)",vr:"LO",name:"HistogramExplanation",vm:"1",version:"DICOM"},"(0060,3020)":{tag:"(0060,3020)",vr:"UL",name:"HistogramData",vm:"1-n",version:"DICOM"},"(0062,0001)":{tag:"(0062,0001)",vr:"CS",name:"SegmentationType",vm:"1",version:"DICOM"},"(0062,0002)":{tag:"(0062,0002)",vr:"SQ",name:"SegmentSequence",vm:"1",version:"DICOM"},"(0062,0003)":{tag:"(0062,0003)",vr:"SQ",name:"SegmentedPropertyCategoryCodeSequence",vm:"1",version:"DICOM"},"(0062,0004)":{tag:"(0062,0004)",vr:"US",name:"SegmentNumber",vm:"1",version:"DICOM"},"(0062,0005)":{tag:"(0062,0005)",vr:"LO",name:"SegmentLabel",vm:"1",version:"DICOM"},"(0062,0006)":{tag:"(0062,0006)",vr:"ST",name:"SegmentDescription",vm:"1",version:"DICOM"},"(0062,0007)":{tag:"(0062,0007)",vr:"SQ",name:"SegmentationAlgorithmIdentificationSequence",vm:"1",version:"DICOM"},"(0062,0008)":{tag:"(0062,0008)",vr:"CS",name:"SegmentAlgorithmType",vm:"1",version:"DICOM"},"(0062,0009)":{tag:"(0062,0009)",vr:"LO",name:"SegmentAlgorithmName",vm:"1",version:"DICOM"},"(0062,000A)":{tag:"(0062,000A)",vr:"SQ",name:"SegmentIdentificationSequence",vm:"1",version:"DICOM"},"(0062,000B)":{tag:"(0062,000B)",vr:"US",name:"ReferencedSegmentNumber",vm:"1-n",version:"DICOM"},"(0062,000C)":{tag:"(0062,000C)",vr:"US",name:"RecommendedDisplayGrayscaleValue",vm:"1",version:"DICOM"},"(0062,000D)":{tag:"(0062,000D)",vr:"US",name:"RecommendedDisplayCIELabValue",vm:"3",version:"DICOM"},"(0062,000E)":{tag:"(0062,000E)",vr:"US",name:"MaximumFractionalValue",vm:"1",version:"DICOM"},"(0062,000F)":{tag:"(0062,000F)",vr:"SQ",name:"SegmentedPropertyTypeCodeSequence",vm:"1",version:"DICOM"},"(0062,0010)":{tag:"(0062,0010)",vr:"CS",name:"SegmentationFractionalType",vm:"1",version:"DICOM"},"(0062,0011)":{tag:"(0062,0011)",vr:"SQ",name:"SegmentedPropertyTypeModifierCodeSequence",vm:"1",version:"DICOM"},"(0062,0012)":{tag:"(0062,0012)",vr:"SQ",name:"UsedSegmentsSequence",vm:"1",version:"DICOM"},"(0062,0013)":{tag:"(0062,0013)",vr:"CS",name:"SegmentsOverlap",vm:"1",version:"DICOM"},"(0062,0020)":{tag:"(0062,0020)",vr:"UT",name:"TrackingID",vm:"1",version:"DICOM"},"(0062,0021)":{tag:"(0062,0021)",vr:"UI",name:"TrackingUID",vm:"1",version:"DICOM"},"(0064,0002)":{tag:"(0064,0002)",vr:"SQ",name:"DeformableRegistrationSequence",vm:"1",version:"DICOM"},"(0064,0003)":{tag:"(0064,0003)",vr:"UI",name:"SourceFrameOfReferenceUID",vm:"1",version:"DICOM"},"(0064,0005)":{tag:"(0064,0005)",vr:"SQ",name:"DeformableRegistrationGridSequence",vm:"1",version:"DICOM"},"(0064,0007)":{tag:"(0064,0007)",vr:"UL",name:"GridDimensions",vm:"3",version:"DICOM"},"(0064,0008)":{tag:"(0064,0008)",vr:"FD",name:"GridResolution",vm:"3",version:"DICOM"},"(0064,0009)":{tag:"(0064,0009)",vr:"OF",name:"VectorGridData",vm:"1",version:"DICOM"},"(0064,000F)":{tag:"(0064,000F)",vr:"SQ",name:"PreDeformationMatrixRegistrationSequence",vm:"1",version:"DICOM"},"(0064,0010)":{tag:"(0064,0010)",vr:"SQ",name:"PostDeformationMatrixRegistrationSequence",vm:"1",version:"DICOM"},"(0066,0001)":{tag:"(0066,0001)",vr:"UL",name:"NumberOfSurfaces",vm:"1",version:"DICOM"},"(0066,0002)":{tag:"(0066,0002)",vr:"SQ",name:"SurfaceSequence",vm:"1",version:"DICOM"},"(0066,0003)":{tag:"(0066,0003)",vr:"UL",name:"SurfaceNumber",vm:"1",version:"DICOM"},"(0066,0004)":{tag:"(0066,0004)",vr:"LT",name:"SurfaceComments",vm:"1",version:"DICOM"},"(0066,0009)":{tag:"(0066,0009)",vr:"CS",name:"SurfaceProcessing",vm:"1",version:"DICOM"},"(0066,000A)":{tag:"(0066,000A)",vr:"FL",name:"SurfaceProcessingRatio",vm:"1",version:"DICOM"},"(0066,000B)":{tag:"(0066,000B)",vr:"LO",name:"SurfaceProcessingDescription",vm:"1",version:"DICOM"},"(0066,000C)":{tag:"(0066,000C)",vr:"FL",name:"RecommendedPresentationOpacity",vm:"1",version:"DICOM"},"(0066,000D)":{tag:"(0066,000D)",vr:"CS",name:"RecommendedPresentationType",vm:"1",version:"DICOM"},"(0066,000E)":{tag:"(0066,000E)",vr:"CS",name:"FiniteVolume",vm:"1",version:"DICOM"},"(0066,0010)":{tag:"(0066,0010)",vr:"CS",name:"Manifold",vm:"1",version:"DICOM"},"(0066,0011)":{tag:"(0066,0011)",vr:"SQ",name:"SurfacePointsSequence",vm:"1",version:"DICOM"},"(0066,0012)":{tag:"(0066,0012)",vr:"SQ",name:"SurfacePointsNormalsSequence",vm:"1",version:"DICOM"},"(0066,0013)":{tag:"(0066,0013)",vr:"SQ",name:"SurfaceMeshPrimitivesSequence",vm:"1",version:"DICOM"},"(0066,0015)":{tag:"(0066,0015)",vr:"UL",name:"NumberOfSurfacePoints",vm:"1",version:"DICOM"},"(0066,0016)":{tag:"(0066,0016)",vr:"OF",name:"PointCoordinatesData",vm:"1",version:"DICOM"},"(0066,0017)":{tag:"(0066,0017)",vr:"FL",name:"PointPositionAccuracy",vm:"3",version:"DICOM"},"(0066,0018)":{tag:"(0066,0018)",vr:"FL",name:"MeanPointDistance",vm:"1",version:"DICOM"},"(0066,0019)":{tag:"(0066,0019)",vr:"FL",name:"MaximumPointDistance",vm:"1",version:"DICOM"},"(0066,001A)":{tag:"(0066,001A)",vr:"FL",name:"PointsBoundingBoxCoordinates",vm:"6",version:"DICOM"},"(0066,001B)":{tag:"(0066,001B)",vr:"FL",name:"AxisOfRotation",vm:"3",version:"DICOM"},"(0066,001C)":{tag:"(0066,001C)",vr:"FL",name:"CenterOfRotation",vm:"3",version:"DICOM"},"(0066,001E)":{tag:"(0066,001E)",vr:"UL",name:"NumberOfVectors",vm:"1",version:"DICOM"},"(0066,001F)":{tag:"(0066,001F)",vr:"US",name:"VectorDimensionality",vm:"1",version:"DICOM"},"(0066,0020)":{tag:"(0066,0020)",vr:"FL",name:"VectorAccuracy",vm:"1-n",version:"DICOM"},"(0066,0021)":{tag:"(0066,0021)",vr:"OF",name:"VectorCoordinateData",vm:"1",version:"DICOM"},"(0066,0023)":{tag:"(0066,0023)",vr:"OW",name:"TrianglePointIndexList",vm:"1",version:"DICOM"},"(0066,0024)":{tag:"(0066,0024)",vr:"OW",name:"EdgePointIndexList",vm:"1",version:"DICOM"},"(0066,0025)":{tag:"(0066,0025)",vr:"OW",name:"VertexPointIndexList",vm:"1",version:"DICOM"},"(0066,0026)":{tag:"(0066,0026)",vr:"SQ",name:"TriangleStripSequence",vm:"1",version:"DICOM"},"(0066,0027)":{tag:"(0066,0027)",vr:"SQ",name:"TriangleFanSequence",vm:"1",version:"DICOM"},"(0066,0028)":{tag:"(0066,0028)",vr:"SQ",name:"LineSequence",vm:"1",version:"DICOM"},"(0066,0029)":{tag:"(0066,0029)",vr:"OW",name:"PrimitivePointIndexList",vm:"1",version:"DICOM"},"(0066,002A)":{tag:"(0066,002A)",vr:"UL",name:"SurfaceCount",vm:"1",version:"DICOM"},"(0066,002B)":{tag:"(0066,002B)",vr:"SQ",name:"ReferencedSurfaceSequence",vm:"1",version:"DICOM"},"(0066,002C)":{tag:"(0066,002C)",vr:"UL",name:"ReferencedSurfaceNumber",vm:"1",version:"DICOM"},"(0066,002D)":{tag:"(0066,002D)",vr:"SQ",name:"SegmentSurfaceGenerationAlgorithmIdentificationSequence",vm:"1",version:"DICOM"},"(0066,002E)":{tag:"(0066,002E)",vr:"SQ",name:"SegmentSurfaceSourceInstanceSequence",vm:"1",version:"DICOM"},"(0066,002F)":{tag:"(0066,002F)",vr:"SQ",name:"AlgorithmFamilyCodeSequence",vm:"1",version:"DICOM"},"(0066,0030)":{tag:"(0066,0030)",vr:"SQ",name:"AlgorithmNameCodeSequence",vm:"1",version:"DICOM"},"(0066,0031)":{tag:"(0066,0031)",vr:"LO",name:"AlgorithmVersion",vm:"1",version:"DICOM"},"(0066,0032)":{tag:"(0066,0032)",vr:"LT",name:"AlgorithmParameters",vm:"1",version:"DICOM"},"(0066,0034)":{tag:"(0066,0034)",vr:"SQ",name:"FacetSequence",vm:"1",version:"DICOM"},"(0066,0035)":{tag:"(0066,0035)",vr:"SQ",name:"SurfaceProcessingAlgorithmIdentificationSequence",vm:"1",version:"DICOM"},"(0066,0036)":{tag:"(0066,0036)",vr:"LO",name:"AlgorithmName",vm:"1",version:"DICOM"},"(0066,0037)":{tag:"(0066,0037)",vr:"FL",name:"RecommendedPointRadius",vm:"1",version:"DICOM"},"(0066,0038)":{tag:"(0066,0038)",vr:"FL",name:"RecommendedLineThickness",vm:"1",version:"DICOM"},"(0066,0040)":{tag:"(0066,0040)",vr:"UL",name:"LongPrimitivePointIndexList",vm:"1-n",version:"DICOM"},"(0066,0041)":{tag:"(0066,0041)",vr:"UL",name:"LongTrianglePointIndexList",vm:"3-3n",version:"DICOM"},"(0066,0042)":{tag:"(0066,0042)",vr:"UL",name:"LongEdgePointIndexList",vm:"2-2n",version:"DICOM"},"(0066,0043)":{tag:"(0066,0043)",vr:"UL",name:"LongVertexPointIndexList",vm:"1-n",version:"DICOM"},"(0066,0101)":{tag:"(0066,0101)",vr:"SQ",name:"TrackSetSequence",vm:"1",version:"DICOM"},"(0066,0102)":{tag:"(0066,0102)",vr:"SQ",name:"TrackSequence",vm:"1",version:"DICOM"},"(0066,0103)":{tag:"(0066,0103)",vr:"OW",name:"RecommendedDisplayCIELabValueList",vm:"1",version:"DICOM"},"(0066,0104)":{tag:"(0066,0104)",vr:"SQ",name:"TrackingAlgorithmIdentificationSequence",vm:"1",version:"DICOM"},"(0066,0105)":{tag:"(0066,0105)",vr:"UL",name:"TrackSetNumber",vm:"1",version:"DICOM"},"(0066,0106)":{tag:"(0066,0106)",vr:"LO",name:"TrackSetLabel",vm:"1",version:"DICOM"},"(0066,0107)":{tag:"(0066,0107)",vr:"UT",name:"TrackSetDescription",vm:"1",version:"DICOM"},"(0066,0108)":{tag:"(0066,0108)",vr:"SQ",name:"TrackSetAnatomicalTypeCodeSequence",vm:"1",version:"DICOM"},"(0066,0121)":{tag:"(0066,0121)",vr:"SQ",name:"MeasurementsSequence",vm:"1",version:"DICOM"},"(0066,0124)":{tag:"(0066,0124)",vr:"SQ",name:"TrackSetStatisticsSequence",vm:"1",version:"DICOM"},"(0066,0125)":{tag:"(0066,0125)",vr:"OF",name:"FloatingPointValues",vm:"1",version:"DICOM"},"(0066,0129)":{tag:"(0066,0129)",vr:"OL",name:"TrackPointIndexList",vm:"1",version:"DICOM"},"(0066,0130)":{tag:"(0066,0130)",vr:"SQ",name:"TrackStatisticsSequence",vm:"1",version:"DICOM"},"(0066,0132)":{tag:"(0066,0132)",vr:"SQ",name:"MeasurementValuesSequence",vm:"1",version:"DICOM"},"(0066,0133)":{tag:"(0066,0133)",vr:"SQ",name:"DiffusionAcquisitionCodeSequence",vm:"1",version:"DICOM"},"(0066,0134)":{tag:"(0066,0134)",vr:"SQ",name:"DiffusionModelCodeSequence",vm:"1",version:"DICOM"},"(0068,6210)":{tag:"(0068,6210)",vr:"LO",name:"ImplantSize",vm:"1",version:"DICOM"},"(0068,6221)":{tag:"(0068,6221)",vr:"LO",name:"ImplantTemplateVersion",vm:"1",version:"DICOM"},"(0068,6222)":{tag:"(0068,6222)",vr:"SQ",name:"ReplacedImplantTemplateSequence",vm:"1",version:"DICOM"},"(0068,6223)":{tag:"(0068,6223)",vr:"CS",name:"ImplantType",vm:"1",version:"DICOM"},"(0068,6224)":{tag:"(0068,6224)",vr:"SQ",name:"DerivationImplantTemplateSequence",vm:"1",version:"DICOM"},"(0068,6225)":{tag:"(0068,6225)",vr:"SQ",name:"OriginalImplantTemplateSequence",vm:"1",version:"DICOM"},"(0068,6226)":{tag:"(0068,6226)",vr:"DT",name:"EffectiveDateTime",vm:"1",version:"DICOM"},"(0068,6230)":{tag:"(0068,6230)",vr:"SQ",name:"ImplantTargetAnatomySequence",vm:"1",version:"DICOM"},"(0068,6260)":{tag:"(0068,6260)",vr:"SQ",name:"InformationFromManufacturerSequence",vm:"1",version:"DICOM"},"(0068,6265)":{tag:"(0068,6265)",vr:"SQ",name:"NotificationFromManufacturerSequence",vm:"1",version:"DICOM"},"(0068,6270)":{tag:"(0068,6270)",vr:"DT",name:"InformationIssueDateTime",vm:"1",version:"DICOM"},"(0068,6280)":{tag:"(0068,6280)",vr:"ST",name:"InformationSummary",vm:"1",version:"DICOM"},"(0068,62A0)":{tag:"(0068,62A0)",vr:"SQ",name:"ImplantRegulatoryDisapprovalCodeSequence",vm:"1",version:"DICOM"},"(0068,62A5)":{tag:"(0068,62A5)",vr:"FD",name:"OverallTemplateSpatialTolerance",vm:"1",version:"DICOM"},"(0068,62C0)":{tag:"(0068,62C0)",vr:"SQ",name:"HPGLDocumentSequence",vm:"1",version:"DICOM"},"(0068,62D0)":{tag:"(0068,62D0)",vr:"US",name:"HPGLDocumentID",vm:"1",version:"DICOM"},"(0068,62D5)":{tag:"(0068,62D5)",vr:"LO",name:"HPGLDocumentLabel",vm:"1",version:"DICOM"},"(0068,62E0)":{tag:"(0068,62E0)",vr:"SQ",name:"ViewOrientationCodeSequence",vm:"1",version:"DICOM"},"(0068,62F0)":{tag:"(0068,62F0)",vr:"FD",name:"ViewOrientationModifier",vm:"9",version:"DICOM"},"(0068,62F2)":{tag:"(0068,62F2)",vr:"FD",name:"HPGLDocumentScaling",vm:"1",version:"DICOM"},"(0068,6300)":{tag:"(0068,6300)",vr:"OB",name:"HPGLDocument",vm:"1",version:"DICOM"},"(0068,6310)":{tag:"(0068,6310)",vr:"US",name:"HPGLContourPenNumber",vm:"1",version:"DICOM"},"(0068,6320)":{tag:"(0068,6320)",vr:"SQ",name:"HPGLPenSequence",vm:"1",version:"DICOM"},"(0068,6330)":{tag:"(0068,6330)",vr:"US",name:"HPGLPenNumber",vm:"1",version:"DICOM"},"(0068,6340)":{tag:"(0068,6340)",vr:"LO",name:"HPGLPenLabel",vm:"1",version:"DICOM"},"(0068,6345)":{tag:"(0068,6345)",vr:"ST",name:"HPGLPenDescription",vm:"1",version:"DICOM"},"(0068,6346)":{tag:"(0068,6346)",vr:"FD",name:"RecommendedRotationPoint",vm:"2",version:"DICOM"},"(0068,6347)":{tag:"(0068,6347)",vr:"FD",name:"BoundingRectangle",vm:"4",version:"DICOM"},"(0068,6350)":{tag:"(0068,6350)",vr:"US",name:"ImplantTemplate3DModelSurfaceNumber",vm:"1-n",version:"DICOM"},"(0068,6360)":{tag:"(0068,6360)",vr:"SQ",name:"SurfaceModelDescriptionSequence",vm:"1",version:"DICOM"},"(0068,6380)":{tag:"(0068,6380)",vr:"LO",name:"SurfaceModelLabel",vm:"1",version:"DICOM"},"(0068,6390)":{tag:"(0068,6390)",vr:"FD",name:"SurfaceModelScalingFactor",vm:"1",version:"DICOM"},"(0068,63A0)":{tag:"(0068,63A0)",vr:"SQ",name:"MaterialsCodeSequence",vm:"1",version:"DICOM"},"(0068,63A4)":{tag:"(0068,63A4)",vr:"SQ",name:"CoatingMaterialsCodeSequence",vm:"1",version:"DICOM"},"(0068,63A8)":{tag:"(0068,63A8)",vr:"SQ",name:"ImplantTypeCodeSequence",vm:"1",version:"DICOM"},"(0068,63AC)":{tag:"(0068,63AC)",vr:"SQ",name:"FixationMethodCodeSequence",vm:"1",version:"DICOM"},"(0068,63B0)":{tag:"(0068,63B0)",vr:"SQ",name:"MatingFeatureSetsSequence",vm:"1",version:"DICOM"},"(0068,63C0)":{tag:"(0068,63C0)",vr:"US",name:"MatingFeatureSetID",vm:"1",version:"DICOM"},"(0068,63D0)":{tag:"(0068,63D0)",vr:"LO",name:"MatingFeatureSetLabel",vm:"1",version:"DICOM"},"(0068,63E0)":{tag:"(0068,63E0)",vr:"SQ",name:"MatingFeatureSequence",vm:"1",version:"DICOM"},"(0068,63F0)":{tag:"(0068,63F0)",vr:"US",name:"MatingFeatureID",vm:"1",version:"DICOM"},"(0068,6400)":{tag:"(0068,6400)",vr:"SQ",name:"MatingFeatureDegreeOfFreedomSequence",vm:"1",version:"DICOM"},"(0068,6410)":{tag:"(0068,6410)",vr:"US",name:"DegreeOfFreedomID",vm:"1",version:"DICOM"},"(0068,6420)":{tag:"(0068,6420)",vr:"CS",name:"DegreeOfFreedomType",vm:"1",version:"DICOM"},"(0068,6430)":{tag:"(0068,6430)",vr:"SQ",name:"TwoDMatingFeatureCoordinatesSequence",vm:"1",version:"DICOM"},"(0068,6440)":{tag:"(0068,6440)",vr:"US",name:"ReferencedHPGLDocumentID",vm:"1",version:"DICOM"},"(0068,6450)":{tag:"(0068,6450)",vr:"FD",name:"TwoDMatingPoint",vm:"2",version:"DICOM"},"(0068,6460)":{tag:"(0068,6460)",vr:"FD",name:"TwoDMatingAxes",vm:"4",version:"DICOM"},"(0068,6470)":{tag:"(0068,6470)",vr:"SQ",name:"TwoDDegreeOfFreedomSequence",vm:"1",version:"DICOM"},"(0068,6490)":{tag:"(0068,6490)",vr:"FD",name:"ThreeDDegreeOfFreedomAxis",vm:"3",version:"DICOM"},"(0068,64A0)":{tag:"(0068,64A0)",vr:"FD",name:"RangeOfFreedom",vm:"2",version:"DICOM"},"(0068,64C0)":{tag:"(0068,64C0)",vr:"FD",name:"ThreeDMatingPoint",vm:"3",version:"DICOM"},"(0068,64D0)":{tag:"(0068,64D0)",vr:"FD",name:"ThreeDMatingAxes",vm:"9",version:"DICOM"},"(0068,64F0)":{tag:"(0068,64F0)",vr:"FD",name:"TwoDDegreeOfFreedomAxis",vm:"3",version:"DICOM"},"(0068,6500)":{tag:"(0068,6500)",vr:"SQ",name:"PlanningLandmarkPointSequence",vm:"1",version:"DICOM"},"(0068,6510)":{tag:"(0068,6510)",vr:"SQ",name:"PlanningLandmarkLineSequence",vm:"1",version:"DICOM"},"(0068,6520)":{tag:"(0068,6520)",vr:"SQ",name:"PlanningLandmarkPlaneSequence",vm:"1",version:"DICOM"},"(0068,6530)":{tag:"(0068,6530)",vr:"US",name:"PlanningLandmarkID",vm:"1",version:"DICOM"},"(0068,6540)":{tag:"(0068,6540)",vr:"LO",name:"PlanningLandmarkDescription",vm:"1",version:"DICOM"},"(0068,6545)":{tag:"(0068,6545)",vr:"SQ",name:"PlanningLandmarkIdentificationCodeSequence",vm:"1",version:"DICOM"},"(0068,6550)":{tag:"(0068,6550)",vr:"SQ",name:"TwoDPointCoordinatesSequence",vm:"1",version:"DICOM"},"(0068,6560)":{tag:"(0068,6560)",vr:"FD",name:"TwoDPointCoordinates",vm:"2",version:"DICOM"},"(0068,6590)":{tag:"(0068,6590)",vr:"FD",name:"ThreeDPointCoordinates",vm:"3",version:"DICOM"},"(0068,65A0)":{tag:"(0068,65A0)",vr:"SQ",name:"TwoDLineCoordinatesSequence",vm:"1",version:"DICOM"},"(0068,65B0)":{tag:"(0068,65B0)",vr:"FD",name:"TwoDLineCoordinates",vm:"4",version:"DICOM"},"(0068,65D0)":{tag:"(0068,65D0)",vr:"FD",name:"ThreeDLineCoordinates",vm:"6",version:"DICOM"},"(0068,65E0)":{tag:"(0068,65E0)",vr:"SQ",name:"TwoDPlaneCoordinatesSequence",vm:"1",version:"DICOM"},"(0068,65F0)":{tag:"(0068,65F0)",vr:"FD",name:"TwoDPlaneIntersection",vm:"4",version:"DICOM"},"(0068,6610)":{tag:"(0068,6610)",vr:"FD",name:"ThreeDPlaneOrigin",vm:"3",version:"DICOM"},"(0068,6620)":{tag:"(0068,6620)",vr:"FD",name:"ThreeDPlaneNormal",vm:"3",version:"DICOM"},"(0068,7001)":{tag:"(0068,7001)",vr:"CS",name:"ModelModification",vm:"1",version:"DICOM"},"(0068,7002)":{tag:"(0068,7002)",vr:"CS",name:"ModelMirroring",vm:"1",version:"DICOM"},"(0068,7003)":{tag:"(0068,7003)",vr:"SQ",name:"ModelUsageCodeSequence",vm:"1",version:"DICOM"},"(0068,7004)":{tag:"(0068,7004)",vr:"UI",name:"ModelGroupUID",vm:"1",version:"DICOM"},"(0068,7005)":{tag:"(0068,7005)",vr:"UR",name:"RelativeURIReferenceWithinEncapsulatedDocument",vm:"1",version:"DICOM"},"(0070,0001)":{tag:"(0070,0001)",vr:"SQ",name:"GraphicAnnotationSequence",vm:"1",version:"DICOM"},"(0070,0002)":{tag:"(0070,0002)",vr:"CS",name:"GraphicLayer",vm:"1",version:"DICOM"},"(0070,0003)":{tag:"(0070,0003)",vr:"CS",name:"BoundingBoxAnnotationUnits",vm:"1",version:"DICOM"},"(0070,0004)":{tag:"(0070,0004)",vr:"CS",name:"AnchorPointAnnotationUnits",vm:"1",version:"DICOM"},"(0070,0005)":{tag:"(0070,0005)",vr:"CS",name:"GraphicAnnotationUnits",vm:"1",version:"DICOM"},"(0070,0006)":{tag:"(0070,0006)",vr:"ST",name:"UnformattedTextValue",vm:"1",version:"DICOM"},"(0070,0008)":{tag:"(0070,0008)",vr:"SQ",name:"TextObjectSequence",vm:"1",version:"DICOM"},"(0070,0009)":{tag:"(0070,0009)",vr:"SQ",name:"GraphicObjectSequence",vm:"1",version:"DICOM"},"(0070,0010)":{tag:"(0070,0010)",vr:"FL",name:"BoundingBoxTopLeftHandCorner",vm:"2",version:"DICOM"},"(0070,0011)":{tag:"(0070,0011)",vr:"FL",name:"BoundingBoxBottomRightHandCorner",vm:"2",version:"DICOM"},"(0070,0012)":{tag:"(0070,0012)",vr:"CS",name:"BoundingBoxTextHorizontalJustification",vm:"1",version:"DICOM"},"(0070,0014)":{tag:"(0070,0014)",vr:"FL",name:"AnchorPoint",vm:"2",version:"DICOM"},"(0070,0015)":{tag:"(0070,0015)",vr:"CS",name:"AnchorPointVisibility",vm:"1",version:"DICOM"},"(0070,0020)":{tag:"(0070,0020)",vr:"US",name:"GraphicDimensions",vm:"1",version:"DICOM"},"(0070,0021)":{tag:"(0070,0021)",vr:"US",name:"NumberOfGraphicPoints",vm:"1",version:"DICOM"},"(0070,0022)":{tag:"(0070,0022)",vr:"FL",name:"GraphicData",vm:"2-n",version:"DICOM"},"(0070,0023)":{tag:"(0070,0023)",vr:"CS",name:"GraphicType",vm:"1",version:"DICOM"},"(0070,0024)":{tag:"(0070,0024)",vr:"CS",name:"GraphicFilled",vm:"1",version:"DICOM"},"(0070,0041)":{tag:"(0070,0041)",vr:"CS",name:"ImageHorizontalFlip",vm:"1",version:"DICOM"},"(0070,0042)":{tag:"(0070,0042)",vr:"US",name:"ImageRotation",vm:"1",version:"DICOM"},"(0070,0052)":{tag:"(0070,0052)",vr:"SL",name:"DisplayedAreaTopLeftHandCorner",vm:"2",version:"DICOM"},"(0070,0053)":{tag:"(0070,0053)",vr:"SL",name:"DisplayedAreaBottomRightHandCorner",vm:"2",version:"DICOM"},"(0070,005A)":{tag:"(0070,005A)",vr:"SQ",name:"DisplayedAreaSelectionSequence",vm:"1",version:"DICOM"},"(0070,0060)":{tag:"(0070,0060)",vr:"SQ",name:"GraphicLayerSequence",vm:"1",version:"DICOM"},"(0070,0062)":{tag:"(0070,0062)",vr:"IS",name:"GraphicLayerOrder",vm:"1",version:"DICOM"},"(0070,0066)":{tag:"(0070,0066)",vr:"US",name:"GraphicLayerRecommendedDisplayGrayscaleValue",vm:"1",version:"DICOM"},"(0070,0068)":{tag:"(0070,0068)",vr:"LO",name:"GraphicLayerDescription",vm:"1",version:"DICOM"},"(0070,0080)":{tag:"(0070,0080)",vr:"CS",name:"ContentLabel",vm:"1",version:"DICOM"},"(0070,0081)":{tag:"(0070,0081)",vr:"LO",name:"ContentDescription",vm:"1",version:"DICOM"},"(0070,0082)":{tag:"(0070,0082)",vr:"DA",name:"PresentationCreationDate",vm:"1",version:"DICOM"},"(0070,0083)":{tag:"(0070,0083)",vr:"TM",name:"PresentationCreationTime",vm:"1",version:"DICOM"},"(0070,0084)":{tag:"(0070,0084)",vr:"PN",name:"ContentCreatorName",vm:"1",version:"DICOM"},"(0070,0086)":{tag:"(0070,0086)",vr:"SQ",name:"ContentCreatorIdentificationCodeSequence",vm:"1",version:"DICOM"},"(0070,0087)":{tag:"(0070,0087)",vr:"SQ",name:"AlternateContentDescriptionSequence",vm:"1",version:"DICOM"},"(0070,0100)":{tag:"(0070,0100)",vr:"CS",name:"PresentationSizeMode",vm:"1",version:"DICOM"},"(0070,0101)":{tag:"(0070,0101)",vr:"DS",name:"PresentationPixelSpacing",vm:"2",version:"DICOM"},"(0070,0102)":{tag:"(0070,0102)",vr:"IS",name:"PresentationPixelAspectRatio",vm:"2",version:"DICOM"},"(0070,0103)":{tag:"(0070,0103)",vr:"FL",name:"PresentationPixelMagnificationRatio",vm:"1",version:"DICOM"},"(0070,0207)":{tag:"(0070,0207)",vr:"LO",name:"GraphicGroupLabel",vm:"1",version:"DICOM"},"(0070,0208)":{tag:"(0070,0208)",vr:"ST",name:"GraphicGroupDescription",vm:"1",version:"DICOM"},"(0070,0209)":{tag:"(0070,0209)",vr:"SQ",name:"CompoundGraphicSequence",vm:"1",version:"DICOM"},"(0070,0226)":{tag:"(0070,0226)",vr:"UL",name:"CompoundGraphicInstanceID",vm:"1",version:"DICOM"},"(0070,0227)":{tag:"(0070,0227)",vr:"LO",name:"FontName",vm:"1",version:"DICOM"},"(0070,0228)":{tag:"(0070,0228)",vr:"CS",name:"FontNameType",vm:"1",version:"DICOM"},"(0070,0229)":{tag:"(0070,0229)",vr:"LO",name:"CSSFontName",vm:"1",version:"DICOM"},"(0070,0230)":{tag:"(0070,0230)",vr:"FD",name:"RotationAngle",vm:"1",version:"DICOM"},"(0070,0231)":{tag:"(0070,0231)",vr:"SQ",name:"TextStyleSequence",vm:"1",version:"DICOM"},"(0070,0232)":{tag:"(0070,0232)",vr:"SQ",name:"LineStyleSequence",vm:"1",version:"DICOM"},"(0070,0233)":{tag:"(0070,0233)",vr:"SQ",name:"FillStyleSequence",vm:"1",version:"DICOM"},"(0070,0234)":{tag:"(0070,0234)",vr:"SQ",name:"GraphicGroupSequence",vm:"1",version:"DICOM"},"(0070,0241)":{tag:"(0070,0241)",vr:"US",name:"TextColorCIELabValue",vm:"3",version:"DICOM"},"(0070,0242)":{tag:"(0070,0242)",vr:"CS",name:"HorizontalAlignment",vm:"1",version:"DICOM"},"(0070,0243)":{tag:"(0070,0243)",vr:"CS",name:"VerticalAlignment",vm:"1",version:"DICOM"},"(0070,0244)":{tag:"(0070,0244)",vr:"CS",name:"ShadowStyle",vm:"1",version:"DICOM"},"(0070,0245)":{tag:"(0070,0245)",vr:"FL",name:"ShadowOffsetX",vm:"1",version:"DICOM"},"(0070,0246)":{tag:"(0070,0246)",vr:"FL",name:"ShadowOffsetY",vm:"1",version:"DICOM"},"(0070,0247)":{tag:"(0070,0247)",vr:"US",name:"ShadowColorCIELabValue",vm:"3",version:"DICOM"},"(0070,0248)":{tag:"(0070,0248)",vr:"CS",name:"Underlined",vm:"1",version:"DICOM"},"(0070,0249)":{tag:"(0070,0249)",vr:"CS",name:"Bold",vm:"1",version:"DICOM"},"(0070,0250)":{tag:"(0070,0250)",vr:"CS",name:"Italic",vm:"1",version:"DICOM"},"(0070,0251)":{tag:"(0070,0251)",vr:"US",name:"PatternOnColorCIELabValue",vm:"3",version:"DICOM"},"(0070,0252)":{tag:"(0070,0252)",vr:"US",name:"PatternOffColorCIELabValue",vm:"3",version:"DICOM"},"(0070,0253)":{tag:"(0070,0253)",vr:"FL",name:"LineThickness",vm:"1",version:"DICOM"},"(0070,0254)":{tag:"(0070,0254)",vr:"CS",name:"LineDashingStyle",vm:"1",version:"DICOM"},"(0070,0255)":{tag:"(0070,0255)",vr:"UL",name:"LinePattern",vm:"1",version:"DICOM"},"(0070,0256)":{tag:"(0070,0256)",vr:"OB",name:"FillPattern",vm:"1",version:"DICOM"},"(0070,0257)":{tag:"(0070,0257)",vr:"CS",name:"FillMode",vm:"1",version:"DICOM"},"(0070,0258)":{tag:"(0070,0258)",vr:"FL",name:"ShadowOpacity",vm:"1",version:"DICOM"},"(0070,0261)":{tag:"(0070,0261)",vr:"FL",name:"GapLength",vm:"1",version:"DICOM"},"(0070,0262)":{tag:"(0070,0262)",vr:"FL",name:"DiameterOfVisibility",vm:"1",version:"DICOM"},"(0070,0273)":{tag:"(0070,0273)",vr:"FL",name:"RotationPoint",vm:"2",version:"DICOM"},"(0070,0274)":{tag:"(0070,0274)",vr:"CS",name:"TickAlignment",vm:"1",version:"DICOM"},"(0070,0278)":{tag:"(0070,0278)",vr:"CS",name:"ShowTickLabel",vm:"1",version:"DICOM"},"(0070,0279)":{tag:"(0070,0279)",vr:"CS",name:"TickLabelAlignment",vm:"1",version:"DICOM"},"(0070,0282)":{tag:"(0070,0282)",vr:"CS",name:"CompoundGraphicUnits",vm:"1",version:"DICOM"},"(0070,0284)":{tag:"(0070,0284)",vr:"FL",name:"PatternOnOpacity",vm:"1",version:"DICOM"},"(0070,0285)":{tag:"(0070,0285)",vr:"FL",name:"PatternOffOpacity",vm:"1",version:"DICOM"},"(0070,0287)":{tag:"(0070,0287)",vr:"SQ",name:"MajorTicksSequence",vm:"1",version:"DICOM"},"(0070,0288)":{tag:"(0070,0288)",vr:"FL",name:"TickPosition",vm:"1",version:"DICOM"},"(0070,0289)":{tag:"(0070,0289)",vr:"SH",name:"TickLabel",vm:"1",version:"DICOM"},"(0070,0294)":{tag:"(0070,0294)",vr:"CS",name:"CompoundGraphicType",vm:"1",version:"DICOM"},"(0070,0295)":{tag:"(0070,0295)",vr:"UL",name:"GraphicGroupID",vm:"1",version:"DICOM"},"(0070,0306)":{tag:"(0070,0306)",vr:"CS",name:"ShapeType",vm:"1",version:"DICOM"},"(0070,0308)":{tag:"(0070,0308)",vr:"SQ",name:"RegistrationSequence",vm:"1",version:"DICOM"},"(0070,0309)":{tag:"(0070,0309)",vr:"SQ",name:"MatrixRegistrationSequence",vm:"1",version:"DICOM"},"(0070,030A)":{tag:"(0070,030A)",vr:"SQ",name:"MatrixSequence",vm:"1",version:"DICOM"},"(0070,030B)":{tag:"(0070,030B)",vr:"FD",name:"FrameOfReferenceToDisplayedCoordinateSystemTransformationMatrix",vm:"16",version:"DICOM"},"(0070,030C)":{tag:"(0070,030C)",vr:"CS",name:"FrameOfReferenceTransformationMatrixType",vm:"1",version:"DICOM"},"(0070,030D)":{tag:"(0070,030D)",vr:"SQ",name:"RegistrationTypeCodeSequence",vm:"1",version:"DICOM"},"(0070,030F)":{tag:"(0070,030F)",vr:"ST",name:"FiducialDescription",vm:"1",version:"DICOM"},"(0070,0310)":{tag:"(0070,0310)",vr:"SH",name:"FiducialIdentifier",vm:"1",version:"DICOM"},"(0070,0311)":{tag:"(0070,0311)",vr:"SQ",name:"FiducialIdentifierCodeSequence",vm:"1",version:"DICOM"},"(0070,0312)":{tag:"(0070,0312)",vr:"FD",name:"ContourUncertaintyRadius",vm:"1",version:"DICOM"},"(0070,0314)":{tag:"(0070,0314)",vr:"SQ",name:"UsedFiducialsSequence",vm:"1",version:"DICOM"},"(0070,0318)":{tag:"(0070,0318)",vr:"SQ",name:"GraphicCoordinatesDataSequence",vm:"1",version:"DICOM"},"(0070,031A)":{tag:"(0070,031A)",vr:"UI",name:"FiducialUID",vm:"1",version:"DICOM"},"(0070,031B)":{tag:"(0070,031B)",vr:"UI",name:"ReferencedFiducialUID",vm:"1",version:"DICOM"},"(0070,031C)":{tag:"(0070,031C)",vr:"SQ",name:"FiducialSetSequence",vm:"1",version:"DICOM"},"(0070,031E)":{tag:"(0070,031E)",vr:"SQ",name:"FiducialSequence",vm:"1",version:"DICOM"},"(0070,031F)":{tag:"(0070,031F)",vr:"SQ",name:"FiducialsPropertyCategoryCodeSequence",vm:"1",version:"DICOM"},"(0070,0401)":{tag:"(0070,0401)",vr:"US",name:"GraphicLayerRecommendedDisplayCIELabValue",vm:"3",version:"DICOM"},"(0070,0402)":{tag:"(0070,0402)",vr:"SQ",name:"BlendingSequence",vm:"1",version:"DICOM"},"(0070,0403)":{tag:"(0070,0403)",vr:"FL",name:"RelativeOpacity",vm:"1",version:"DICOM"},"(0070,0404)":{tag:"(0070,0404)",vr:"SQ",name:"ReferencedSpatialRegistrationSequence",vm:"1",version:"DICOM"},"(0070,0405)":{tag:"(0070,0405)",vr:"CS",name:"BlendingPosition",vm:"1",version:"DICOM"},"(0070,1209)":{tag:"(0070,1209)",vr:"UI",name:"VolumetricPresentationInputSetUID",vm:"1",version:"DICOM"},"(0070,120A)":{tag:"(0070,120A)",vr:"SQ",name:"VolumetricPresentationInputSetSequence",vm:"1",version:"DICOM"},"(0070,120B)":{tag:"(0070,120B)",vr:"CS",name:"GlobalCrop",vm:"1",version:"DICOM"},"(0070,120C)":{tag:"(0070,120C)",vr:"US",name:"GlobalCroppingSpecificationIndex",vm:"1-n",version:"DICOM"},"(0070,120D)":{tag:"(0070,120D)",vr:"CS",name:"RenderingMethod",vm:"1",version:"DICOM"},"(0070,1602)":{tag:"(0070,1602)",vr:"CS",name:"RenderProjection",vm:"1",version:"DICOM"},"(0070,1603)":{tag:"(0070,1603)",vr:"FD",name:"ViewpointPosition",vm:"3",version:"DICOM"},"(0070,1604)":{tag:"(0070,1604)",vr:"FD",name:"ViewpointLookAtPoint",vm:"3",version:"DICOM"},"(0070,1605)":{tag:"(0070,1605)",vr:"FD",name:"ViewpointUpDirection",vm:"3",version:"DICOM"},"(0070,1606)":{tag:"(0070,1606)",vr:"FD",name:"RenderFieldOfView",vm:"6",version:"DICOM"},"(0070,1607)":{tag:"(0070,1607)",vr:"FD",name:"SamplingStepSize",vm:"1",version:"DICOM"},"(0070,1701)":{tag:"(0070,1701)",vr:"CS",name:"ShadingStyle",vm:"1",version:"DICOM"},"(0070,1702)":{tag:"(0070,1702)",vr:"FD",name:"AmbientReflectionIntensity",vm:"1",version:"DICOM"},"(0070,1703)":{tag:"(0070,1703)",vr:"FD",name:"LightDirection",vm:"3",version:"DICOM"},"(0070,1704)":{tag:"(0070,1704)",vr:"FD",name:"DiffuseReflectionIntensity",vm:"1",version:"DICOM"},"(0070,1705)":{tag:"(0070,1705)",vr:"FD",name:"SpecularReflectionIntensity",vm:"1",version:"DICOM"},"(0070,1706)":{tag:"(0070,1706)",vr:"FD",name:"Shininess",vm:"1",version:"DICOM"},"(0070,1A06)":{tag:"(0070,1A06)",vr:"FD",name:"SwivelRange",vm:"1",version:"DICOM"},"(0070,1A07)":{tag:"(0070,1A07)",vr:"OD",name:"VolumetricCurveUpDirections",vm:"1",version:"DICOM"},"(0070,1A08)":{tag:"(0070,1A08)",vr:"SQ",name:"VolumeStreamSequence",vm:"1",version:"DICOM"},"(0070,1A09)":{tag:"(0070,1A09)",vr:"LO",name:"RGBATransferFunctionDescription",vm:"1",version:"DICOM"},"(0070,1B01)":{tag:"(0070,1B01)",vr:"SQ",name:"AdvancedBlendingSequence",vm:"1",version:"DICOM"},"(0070,1B02)":{tag:"(0070,1B02)",vr:"US",name:"BlendingInputNumber",vm:"1",version:"DICOM"},"(0070,1B03)":{tag:"(0070,1B03)",vr:"SQ",name:"BlendingDisplayInputSequence",vm:"1",version:"DICOM"},"(0070,1B04)":{tag:"(0070,1B04)",vr:"SQ",name:"BlendingDisplaySequence",vm:"1",version:"DICOM"},"(0070,1B06)":{tag:"(0070,1B06)",vr:"CS",name:"BlendingMode",vm:"1",version:"DICOM"},"(0070,1B07)":{tag:"(0070,1B07)",vr:"CS",name:"TimeSeriesBlending",vm:"1",version:"DICOM"},"(0070,1B08)":{tag:"(0070,1B08)",vr:"CS",name:"GeometryForDisplay",vm:"1",version:"DICOM"},"(0070,1B11)":{tag:"(0070,1B11)",vr:"SQ",name:"ThresholdSequence",vm:"1",version:"DICOM"},"(0070,1B12)":{tag:"(0070,1B12)",vr:"SQ",name:"ThresholdValueSequence",vm:"1",version:"DICOM"},"(0070,1B13)":{tag:"(0070,1B13)",vr:"CS",name:"ThresholdType",vm:"1",version:"DICOM"},"(0070,1B14)":{tag:"(0070,1B14)",vr:"FD",name:"ThresholdValue",vm:"1",version:"DICOM"},"(0072,0002)":{tag:"(0072,0002)",vr:"SH",name:"HangingProtocolName",vm:"1",version:"DICOM"},"(0072,0004)":{tag:"(0072,0004)",vr:"LO",name:"HangingProtocolDescription",vm:"1",version:"DICOM"},"(0072,0006)":{tag:"(0072,0006)",vr:"CS",name:"HangingProtocolLevel",vm:"1",version:"DICOM"},"(0072,0008)":{tag:"(0072,0008)",vr:"LO",name:"HangingProtocolCreator",vm:"1",version:"DICOM"},"(0072,000A)":{tag:"(0072,000A)",vr:"DT",name:"HangingProtocolCreationDateTime",vm:"1",version:"DICOM"},"(0072,000C)":{tag:"(0072,000C)",vr:"SQ",name:"HangingProtocolDefinitionSequence",vm:"1",version:"DICOM"},"(0072,000E)":{tag:"(0072,000E)",vr:"SQ",name:"HangingProtocolUserIdentificationCodeSequence",vm:"1",version:"DICOM"},"(0072,0010)":{tag:"(0072,0010)",vr:"LO",name:"HangingProtocolUserGroupName",vm:"1",version:"DICOM"},"(0072,0012)":{tag:"(0072,0012)",vr:"SQ",name:"SourceHangingProtocolSequence",vm:"1",version:"DICOM"},"(0072,0014)":{tag:"(0072,0014)",vr:"US",name:"NumberOfPriorsReferenced",vm:"1",version:"DICOM"},"(0072,0020)":{tag:"(0072,0020)",vr:"SQ",name:"ImageSetsSequence",vm:"1",version:"DICOM"},"(0072,0022)":{tag:"(0072,0022)",vr:"SQ",name:"ImageSetSelectorSequence",vm:"1",version:"DICOM"},"(0072,0024)":{tag:"(0072,0024)",vr:"CS",name:"ImageSetSelectorUsageFlag",vm:"1",version:"DICOM"},"(0072,0026)":{tag:"(0072,0026)",vr:"AT",name:"SelectorAttribute",vm:"1",version:"DICOM"},"(0072,0028)":{tag:"(0072,0028)",vr:"US",name:"SelectorValueNumber",vm:"1",version:"DICOM"},"(0072,0030)":{tag:"(0072,0030)",vr:"SQ",name:"TimeBasedImageSetsSequence",vm:"1",version:"DICOM"},"(0072,0032)":{tag:"(0072,0032)",vr:"US",name:"ImageSetNumber",vm:"1",version:"DICOM"},"(0072,0034)":{tag:"(0072,0034)",vr:"CS",name:"ImageSetSelectorCategory",vm:"1",version:"DICOM"},"(0072,0038)":{tag:"(0072,0038)",vr:"US",name:"RelativeTime",vm:"2",version:"DICOM"},"(0072,003A)":{tag:"(0072,003A)",vr:"CS",name:"RelativeTimeUnits",vm:"1",version:"DICOM"},"(0072,003C)":{tag:"(0072,003C)",vr:"SS",name:"AbstractPriorValue",vm:"2",version:"DICOM"},"(0072,003E)":{tag:"(0072,003E)",vr:"SQ",name:"AbstractPriorCodeSequence",vm:"1",version:"DICOM"},"(0072,0040)":{tag:"(0072,0040)",vr:"LO",name:"ImageSetLabel",vm:"1",version:"DICOM"},"(0072,0050)":{tag:"(0072,0050)",vr:"CS",name:"SelectorAttributeVR",vm:"1",version:"DICOM"},"(0072,0052)":{tag:"(0072,0052)",vr:"AT",name:"SelectorSequencePointer",vm:"1-n",version:"DICOM"},"(0072,0054)":{tag:"(0072,0054)",vr:"LO",name:"SelectorSequencePointerPrivateCreator",vm:"1-n",version:"DICOM"},"(0072,0056)":{tag:"(0072,0056)",vr:"LO",name:"SelectorAttributePrivateCreator",vm:"1",version:"DICOM"},"(0072,005E)":{tag:"(0072,005E)",vr:"AE",name:"SelectorAEValue",vm:"1-n",version:"DICOM"},"(0072,005F)":{tag:"(0072,005F)",vr:"AS",name:"SelectorASValue",vm:"1-n",version:"DICOM"},"(0072,0060)":{tag:"(0072,0060)",vr:"AT",name:"SelectorATValue",vm:"1-n",version:"DICOM"},"(0072,0061)":{tag:"(0072,0061)",vr:"DA",name:"SelectorDAValue",vm:"1-n",version:"DICOM"},"(0072,0062)":{tag:"(0072,0062)",vr:"CS",name:"SelectorCSValue",vm:"1-n",version:"DICOM"},"(0072,0063)":{tag:"(0072,0063)",vr:"DT",name:"SelectorDTValue",vm:"1-n",version:"DICOM"},"(0072,0064)":{tag:"(0072,0064)",vr:"IS",name:"SelectorISValue",vm:"1-n",version:"DICOM"},"(0072,0065)":{tag:"(0072,0065)",vr:"OB",name:"SelectorOBValue",vm:"1",version:"DICOM"},"(0072,0066)":{tag:"(0072,0066)",vr:"LO",name:"SelectorLOValue",vm:"1-n",version:"DICOM"},"(0072,0067)":{tag:"(0072,0067)",vr:"OF",name:"SelectorOFValue",vm:"1",version:"DICOM"},"(0072,0068)":{tag:"(0072,0068)",vr:"LT",name:"SelectorLTValue",vm:"1",version:"DICOM"},"(0072,0069)":{tag:"(0072,0069)",vr:"OW",name:"SelectorOWValue",vm:"1",version:"DICOM"},"(0072,006A)":{tag:"(0072,006A)",vr:"PN",name:"SelectorPNValue",vm:"1-n",version:"DICOM"},"(0072,006B)":{tag:"(0072,006B)",vr:"TM",name:"SelectorTMValue",vm:"1-n",version:"DICOM"},"(0072,006C)":{tag:"(0072,006C)",vr:"SH",name:"SelectorSHValue",vm:"1-n",version:"DICOM"},"(0072,006D)":{tag:"(0072,006D)",vr:"UN",name:"SelectorUNValue",vm:"1",version:"DICOM"},"(0072,006E)":{tag:"(0072,006E)",vr:"ST",name:"SelectorSTValue",vm:"1",version:"DICOM"},"(0072,006F)":{tag:"(0072,006F)",vr:"UC",name:"SelectorUCValue",vm:"1-n",version:"DICOM"},"(0072,0070)":{tag:"(0072,0070)",vr:"UT",name:"SelectorUTValue",vm:"1",version:"DICOM"},"(0072,0071)":{tag:"(0072,0071)",vr:"UR",name:"SelectorURValue",vm:"1",version:"DICOM"},"(0072,0072)":{tag:"(0072,0072)",vr:"DS",name:"SelectorDSValue",vm:"1-n",version:"DICOM"},"(0072,0073)":{tag:"(0072,0073)",vr:"OD",name:"SelectorODValue",vm:"1",version:"DICOM"},"(0072,0074)":{tag:"(0072,0074)",vr:"FD",name:"SelectorFDValue",vm:"1-n",version:"DICOM"},"(0072,0075)":{tag:"(0072,0075)",vr:"OL",name:"SelectorOLValue",vm:"1",version:"DICOM"},"(0072,0076)":{tag:"(0072,0076)",vr:"FL",name:"SelectorFLValue",vm:"1-n",version:"DICOM"},"(0072,0078)":{tag:"(0072,0078)",vr:"UL",name:"SelectorULValue",vm:"1-n",version:"DICOM"},"(0072,007A)":{tag:"(0072,007A)",vr:"US",name:"SelectorUSValue",vm:"1-n",version:"DICOM"},"(0072,007C)":{tag:"(0072,007C)",vr:"SL",name:"SelectorSLValue",vm:"1-n",version:"DICOM"},"(0072,007E)":{tag:"(0072,007E)",vr:"SS",name:"SelectorSSValue",vm:"1-n",version:"DICOM"},"(0072,007F)":{tag:"(0072,007F)",vr:"UI",name:"SelectorUIValue",vm:"1-n",version:"DICOM"},"(0072,0080)":{tag:"(0072,0080)",vr:"SQ",name:"SelectorCodeSequenceValue",vm:"1",version:"DICOM"},"(0072,0081)":{tag:"(0072,0081)",vr:"OV",name:"SelectorOVValue",vm:"1",version:"DICOM"},"(0072,0082)":{tag:"(0072,0082)",vr:"SV",name:"SelectorSVValue",vm:"1-n",version:"DICOM"},"(0072,0083)":{tag:"(0072,0083)",vr:"UV",name:"SelectorUVValue",vm:"1-n",version:"DICOM"},"(0072,0100)":{tag:"(0072,0100)",vr:"US",name:"NumberOfScreens",vm:"1",version:"DICOM"},"(0072,0102)":{tag:"(0072,0102)",vr:"SQ",name:"NominalScreenDefinitionSequence",vm:"1",version:"DICOM"},"(0072,0104)":{tag:"(0072,0104)",vr:"US",name:"NumberOfVerticalPixels",vm:"1",version:"DICOM"},"(0072,0106)":{tag:"(0072,0106)",vr:"US",name:"NumberOfHorizontalPixels",vm:"1",version:"DICOM"},"(0072,0108)":{tag:"(0072,0108)",vr:"FD",name:"DisplayEnvironmentSpatialPosition",vm:"4",version:"DICOM"},"(0072,010A)":{tag:"(0072,010A)",vr:"US",name:"ScreenMinimumGrayscaleBitDepth",vm:"1",version:"DICOM"},"(0072,010C)":{tag:"(0072,010C)",vr:"US",name:"ScreenMinimumColorBitDepth",vm:"1",version:"DICOM"},"(0072,010E)":{tag:"(0072,010E)",vr:"US",name:"ApplicationMaximumRepaintTime",vm:"1",version:"DICOM"},"(0072,0200)":{tag:"(0072,0200)",vr:"SQ",name:"DisplaySetsSequence",vm:"1",version:"DICOM"},"(0072,0202)":{tag:"(0072,0202)",vr:"US",name:"DisplaySetNumber",vm:"1",version:"DICOM"},"(0072,0203)":{tag:"(0072,0203)",vr:"LO",name:"DisplaySetLabel",vm:"1",version:"DICOM"},"(0072,0204)":{tag:"(0072,0204)",vr:"US",name:"DisplaySetPresentationGroup",vm:"1",version:"DICOM"},"(0072,0206)":{tag:"(0072,0206)",vr:"LO",name:"DisplaySetPresentationGroupDescription",vm:"1",version:"DICOM"},"(0072,0208)":{tag:"(0072,0208)",vr:"CS",name:"PartialDataDisplayHandling",vm:"1",version:"DICOM"},"(0072,0210)":{tag:"(0072,0210)",vr:"SQ",name:"SynchronizedScrollingSequence",vm:"1",version:"DICOM"},"(0072,0212)":{tag:"(0072,0212)",vr:"US",name:"DisplaySetScrollingGroup",vm:"2-n",version:"DICOM"},"(0072,0214)":{tag:"(0072,0214)",vr:"SQ",name:"NavigationIndicatorSequence",vm:"1",version:"DICOM"},"(0072,0216)":{tag:"(0072,0216)",vr:"US",name:"NavigationDisplaySet",vm:"1",version:"DICOM"},"(0072,0218)":{tag:"(0072,0218)",vr:"US",name:"ReferenceDisplaySets",vm:"1-n",version:"DICOM"},"(0072,0300)":{tag:"(0072,0300)",vr:"SQ",name:"ImageBoxesSequence",vm:"1",version:"DICOM"},"(0072,0302)":{tag:"(0072,0302)",vr:"US",name:"ImageBoxNumber",vm:"1",version:"DICOM"},"(0072,0304)":{tag:"(0072,0304)",vr:"CS",name:"ImageBoxLayoutType",vm:"1",version:"DICOM"},"(0072,0306)":{tag:"(0072,0306)",vr:"US",name:"ImageBoxTileHorizontalDimension",vm:"1",version:"DICOM"},"(0072,0308)":{tag:"(0072,0308)",vr:"US",name:"ImageBoxTileVerticalDimension",vm:"1",version:"DICOM"},"(0072,0310)":{tag:"(0072,0310)",vr:"CS",name:"ImageBoxScrollDirection",vm:"1",version:"DICOM"},"(0072,0312)":{tag:"(0072,0312)",vr:"CS",name:"ImageBoxSmallScrollType",vm:"1",version:"DICOM"},"(0072,0314)":{tag:"(0072,0314)",vr:"US",name:"ImageBoxSmallScrollAmount",vm:"1",version:"DICOM"},"(0072,0316)":{tag:"(0072,0316)",vr:"CS",name:"ImageBoxLargeScrollType",vm:"1",version:"DICOM"},"(0072,0318)":{tag:"(0072,0318)",vr:"US",name:"ImageBoxLargeScrollAmount",vm:"1",version:"DICOM"},"(0072,0320)":{tag:"(0072,0320)",vr:"US",name:"ImageBoxOverlapPriority",vm:"1",version:"DICOM"},"(0072,0330)":{tag:"(0072,0330)",vr:"FD",name:"CineRelativeToRealTime",vm:"1",version:"DICOM"},"(0072,0400)":{tag:"(0072,0400)",vr:"SQ",name:"FilterOperationsSequence",vm:"1",version:"DICOM"},"(0072,0402)":{tag:"(0072,0402)",vr:"CS",name:"FilterByCategory",vm:"1",version:"DICOM"},"(0072,0404)":{tag:"(0072,0404)",vr:"CS",name:"FilterByAttributePresence",vm:"1",version:"DICOM"},"(0072,0406)":{tag:"(0072,0406)",vr:"CS",name:"FilterByOperator",vm:"1",version:"DICOM"},"(0072,0420)":{tag:"(0072,0420)",vr:"US",name:"StructuredDisplayBackgroundCIELabValue",vm:"3",version:"DICOM"},"(0072,0421)":{tag:"(0072,0421)",vr:"US",name:"EmptyImageBoxCIELabValue",vm:"3",version:"DICOM"},"(0072,0422)":{tag:"(0072,0422)",vr:"SQ",name:"StructuredDisplayImageBoxSequence",vm:"1",version:"DICOM"},"(0072,0424)":{tag:"(0072,0424)",vr:"SQ",name:"StructuredDisplayTextBoxSequence",vm:"1",version:"DICOM"},"(0072,0427)":{tag:"(0072,0427)",vr:"SQ",name:"ReferencedFirstFrameSequence",vm:"1",version:"DICOM"},"(0072,0430)":{tag:"(0072,0430)",vr:"SQ",name:"ImageBoxSynchronizationSequence",vm:"1",version:"DICOM"},"(0072,0432)":{tag:"(0072,0432)",vr:"US",name:"SynchronizedImageBoxList",vm:"2-n",version:"DICOM"},"(0072,0434)":{tag:"(0072,0434)",vr:"CS",name:"TypeOfSynchronization",vm:"1",version:"DICOM"},"(0072,0500)":{tag:"(0072,0500)",vr:"CS",name:"BlendingOperationType",vm:"1",version:"DICOM"},"(0072,0510)":{tag:"(0072,0510)",vr:"CS",name:"ReformattingOperationType",vm:"1",version:"DICOM"},"(0072,0512)":{tag:"(0072,0512)",vr:"FD",name:"ReformattingThickness",vm:"1",version:"DICOM"},"(0072,0514)":{tag:"(0072,0514)",vr:"FD",name:"ReformattingInterval",vm:"1",version:"DICOM"},"(0072,0516)":{tag:"(0072,0516)",vr:"CS",name:"ReformattingOperationInitialViewDirection",vm:"1",version:"DICOM"},"(0072,0520)":{tag:"(0072,0520)",vr:"CS",name:"ThreeDRenderingType",vm:"1-n",version:"DICOM"},"(0072,0600)":{tag:"(0072,0600)",vr:"SQ",name:"SortingOperationsSequence",vm:"1",version:"DICOM"},"(0072,0602)":{tag:"(0072,0602)",vr:"CS",name:"SortByCategory",vm:"1",version:"DICOM"},"(0072,0604)":{tag:"(0072,0604)",vr:"CS",name:"SortingDirection",vm:"1",version:"DICOM"},"(0072,0700)":{tag:"(0072,0700)",vr:"CS",name:"DisplaySetPatientOrientation",vm:"2",version:"DICOM"},"(0072,0702)":{tag:"(0072,0702)",vr:"CS",name:"VOIType",vm:"1",version:"DICOM"},"(0072,0704)":{tag:"(0072,0704)",vr:"CS",name:"PseudoColorType",vm:"1",version:"DICOM"},"(0072,0705)":{tag:"(0072,0705)",vr:"SQ",name:"PseudoColorPaletteInstanceReferenceSequence",vm:"1",version:"DICOM"},"(0072,0706)":{tag:"(0072,0706)",vr:"CS",name:"ShowGrayscaleInverted",vm:"1",version:"DICOM"},"(0072,0710)":{tag:"(0072,0710)",vr:"CS",name:"ShowImageTrueSizeFlag",vm:"1",version:"DICOM"},"(0072,0712)":{tag:"(0072,0712)",vr:"CS",name:"ShowGraphicAnnotationFlag",vm:"1",version:"DICOM"},"(0072,0714)":{tag:"(0072,0714)",vr:"CS",name:"ShowPatientDemographicsFlag",vm:"1",version:"DICOM"},"(0072,0716)":{tag:"(0072,0716)",vr:"CS",name:"ShowAcquisitionTechniquesFlag",vm:"1",version:"DICOM"},"(0072,0717)":{tag:"(0072,0717)",vr:"CS",name:"DisplaySetHorizontalJustification",vm:"1",version:"DICOM"},"(0072,0718)":{tag:"(0072,0718)",vr:"CS",name:"DisplaySetVerticalJustification",vm:"1",version:"DICOM"},"(0074,0120)":{tag:"(0074,0120)",vr:"FD",name:"ContinuationStartMeterset",vm:"1",version:"DICOM"},"(0074,0121)":{tag:"(0074,0121)",vr:"FD",name:"ContinuationEndMeterset",vm:"1",version:"DICOM"},"(0074,1000)":{tag:"(0074,1000)",vr:"CS",name:"ProcedureStepState",vm:"1",version:"DICOM"},"(0074,1002)":{tag:"(0074,1002)",vr:"SQ",name:"ProcedureStepProgressInformationSequence",vm:"1",version:"DICOM"},"(0074,1004)":{tag:"(0074,1004)",vr:"DS",name:"ProcedureStepProgress",vm:"1",version:"DICOM"},"(0074,1006)":{tag:"(0074,1006)",vr:"ST",name:"ProcedureStepProgressDescription",vm:"1",version:"DICOM"},"(0074,1007)":{tag:"(0074,1007)",vr:"SQ",name:"ProcedureStepProgressParametersSequence",vm:"1",version:"DICOM"},"(0074,1008)":{tag:"(0074,1008)",vr:"SQ",name:"ProcedureStepCommunicationsURISequence",vm:"1",version:"DICOM"},"(0074,100A)":{tag:"(0074,100A)",vr:"UR",name:"ContactURI",vm:"1",version:"DICOM"},"(0074,100C)":{tag:"(0074,100C)",vr:"LO",name:"ContactDisplayName",vm:"1",version:"DICOM"},"(0074,100E)":{tag:"(0074,100E)",vr:"SQ",name:"ProcedureStepDiscontinuationReasonCodeSequence",vm:"1",version:"DICOM"},"(0074,1020)":{tag:"(0074,1020)",vr:"SQ",name:"BeamTaskSequence",vm:"1",version:"DICOM"},"(0074,1022)":{tag:"(0074,1022)",vr:"CS",name:"BeamTaskType",vm:"1",version:"DICOM"},"(0074,1025)":{tag:"(0074,1025)",vr:"CS",name:"AutosequenceFlag",vm:"1",version:"DICOM"},"(0074,1026)":{tag:"(0074,1026)",vr:"FD",name:"TableTopVerticalAdjustedPosition",vm:"1",version:"DICOM"},"(0074,1027)":{tag:"(0074,1027)",vr:"FD",name:"TableTopLongitudinalAdjustedPosition",vm:"1",version:"DICOM"},"(0074,1028)":{tag:"(0074,1028)",vr:"FD",name:"TableTopLateralAdjustedPosition",vm:"1",version:"DICOM"},"(0074,102A)":{tag:"(0074,102A)",vr:"FD",name:"PatientSupportAdjustedAngle",vm:"1",version:"DICOM"},"(0074,102B)":{tag:"(0074,102B)",vr:"FD",name:"TableTopEccentricAdjustedAngle",vm:"1",version:"DICOM"},"(0074,102C)":{tag:"(0074,102C)",vr:"FD",name:"TableTopPitchAdjustedAngle",vm:"1",version:"DICOM"},"(0074,102D)":{tag:"(0074,102D)",vr:"FD",name:"TableTopRollAdjustedAngle",vm:"1",version:"DICOM"},"(0074,1030)":{tag:"(0074,1030)",vr:"SQ",name:"DeliveryVerificationImageSequence",vm:"1",version:"DICOM"},"(0074,1032)":{tag:"(0074,1032)",vr:"CS",name:"VerificationImageTiming",vm:"1",version:"DICOM"},"(0074,1034)":{tag:"(0074,1034)",vr:"CS",name:"DoubleExposureFlag",vm:"1",version:"DICOM"},"(0074,1036)":{tag:"(0074,1036)",vr:"CS",name:"DoubleExposureOrdering",vm:"1",version:"DICOM"},"(0074,1040)":{tag:"(0074,1040)",vr:"SQ",name:"RelatedReferenceRTImageSequence",vm:"1",version:"DICOM"},"(0074,1042)":{tag:"(0074,1042)",vr:"SQ",name:"GeneralMachineVerificationSequence",vm:"1",version:"DICOM"},"(0074,1044)":{tag:"(0074,1044)",vr:"SQ",name:"ConventionalMachineVerificationSequence",vm:"1",version:"DICOM"},"(0074,1046)":{tag:"(0074,1046)",vr:"SQ",name:"IonMachineVerificationSequence",vm:"1",version:"DICOM"},"(0074,1048)":{tag:"(0074,1048)",vr:"SQ",name:"FailedAttributesSequence",vm:"1",version:"DICOM"},"(0074,104A)":{tag:"(0074,104A)",vr:"SQ",name:"OverriddenAttributesSequence",vm:"1",version:"DICOM"},"(0074,104C)":{tag:"(0074,104C)",vr:"SQ",name:"ConventionalControlPointVerificationSequence",vm:"1",version:"DICOM"},"(0074,104E)":{tag:"(0074,104E)",vr:"SQ",name:"IonControlPointVerificationSequence",vm:"1",version:"DICOM"},"(0074,1050)":{tag:"(0074,1050)",vr:"SQ",name:"AttributeOccurrenceSequence",vm:"1",version:"DICOM"},"(0074,1052)":{tag:"(0074,1052)",vr:"AT",name:"AttributeOccurrencePointer",vm:"1",version:"DICOM"},"(0074,1054)":{tag:"(0074,1054)",vr:"UL",name:"AttributeItemSelector",vm:"1",version:"DICOM"},"(0074,1056)":{tag:"(0074,1056)",vr:"LO",name:"AttributeOccurrencePrivateCreator",vm:"1",version:"DICOM"},"(0074,1057)":{tag:"(0074,1057)",vr:"IS",name:"SelectorSequencePointerItems",vm:"1-n",version:"DICOM"},"(0074,1200)":{tag:"(0074,1200)",vr:"CS",name:"ScheduledProcedureStepPriority",vm:"1",version:"DICOM"},"(0074,1202)":{tag:"(0074,1202)",vr:"LO",name:"WorklistLabel",vm:"1",version:"DICOM"},"(0074,1204)":{tag:"(0074,1204)",vr:"LO",name:"ProcedureStepLabel",vm:"1",version:"DICOM"},"(0074,1210)":{tag:"(0074,1210)",vr:"SQ",name:"ScheduledProcessingParametersSequence",vm:"1",version:"DICOM"},"(0074,1212)":{tag:"(0074,1212)",vr:"SQ",name:"PerformedProcessingParametersSequence",vm:"1",version:"DICOM"},"(0074,1216)":{tag:"(0074,1216)",vr:"SQ",name:"UnifiedProcedureStepPerformedProcedureSequence",vm:"1",version:"DICOM"},"(0074,1224)":{tag:"(0074,1224)",vr:"SQ",name:"ReplacedProcedureStepSequence",vm:"1",version:"DICOM"},"(0074,1230)":{tag:"(0074,1230)",vr:"LO",name:"DeletionLock",vm:"1",version:"DICOM"},"(0074,1234)":{tag:"(0074,1234)",vr:"AE",name:"ReceivingAE",vm:"1",version:"DICOM"},"(0074,1236)":{tag:"(0074,1236)",vr:"AE",name:"RequestingAE",vm:"1",version:"DICOM"},"(0074,1238)":{tag:"(0074,1238)",vr:"LT",name:"ReasonForCancellation",vm:"1",version:"DICOM"},"(0074,1242)":{tag:"(0074,1242)",vr:"CS",name:"SCPStatus",vm:"1",version:"DICOM"},"(0074,1244)":{tag:"(0074,1244)",vr:"CS",name:"SubscriptionListStatus",vm:"1",version:"DICOM"},"(0074,1246)":{tag:"(0074,1246)",vr:"CS",name:"UnifiedProcedureStepListStatus",vm:"1",version:"DICOM"},"(0074,1324)":{tag:"(0074,1324)",vr:"UL",name:"BeamOrderIndex",vm:"1",version:"DICOM"},"(0074,1338)":{tag:"(0074,1338)",vr:"FD",name:"DoubleExposureMeterset",vm:"1",version:"DICOM"},"(0074,133A)":{tag:"(0074,133A)",vr:"FD",name:"DoubleExposureFieldDelta",vm:"4",version:"DICOM"},"(0074,1401)":{tag:"(0074,1401)",vr:"SQ",name:"BrachyTaskSequence",vm:"1",version:"DICOM"},"(0074,1402)":{tag:"(0074,1402)",vr:"DS",name:"ContinuationStartTotalReferenceAirKerma",vm:"1",version:"DICOM"},"(0074,1403)":{tag:"(0074,1403)",vr:"DS",name:"ContinuationEndTotalReferenceAirKerma",vm:"1",version:"DICOM"},"(0074,1404)":{tag:"(0074,1404)",vr:"IS",name:"ContinuationPulseNumber",vm:"1",version:"DICOM"},"(0074,1405)":{tag:"(0074,1405)",vr:"SQ",name:"ChannelDeliveryOrderSequence",vm:"1",version:"DICOM"},"(0074,1406)":{tag:"(0074,1406)",vr:"IS",name:"ReferencedChannelNumber",vm:"1",version:"DICOM"},"(0074,1407)":{tag:"(0074,1407)",vr:"DS",name:"StartCumulativeTimeWeight",vm:"1",version:"DICOM"},"(0074,1408)":{tag:"(0074,1408)",vr:"DS",name:"EndCumulativeTimeWeight",vm:"1",version:"DICOM"},"(0074,1409)":{tag:"(0074,1409)",vr:"SQ",name:"OmittedChannelSequence",vm:"1",version:"DICOM"},"(0074,140A)":{tag:"(0074,140A)",vr:"CS",name:"ReasonForChannelOmission",vm:"1",version:"DICOM"},"(0074,140B)":{tag:"(0074,140B)",vr:"LO",name:"ReasonForChannelOmissionDescription",vm:"1",version:"DICOM"},"(0074,140C)":{tag:"(0074,140C)",vr:"IS",name:"ChannelDeliveryOrderIndex",vm:"1",version:"DICOM"},"(0074,140D)":{tag:"(0074,140D)",vr:"SQ",name:"ChannelDeliveryContinuationSequence",vm:"1",version:"DICOM"},"(0074,140E)":{tag:"(0074,140E)",vr:"SQ",name:"OmittedApplicationSetupSequence",vm:"1",version:"DICOM"},"(0076,0001)":{tag:"(0076,0001)",vr:"LO",name:"ImplantAssemblyTemplateName",vm:"1",version:"DICOM"},"(0076,0003)":{tag:"(0076,0003)",vr:"LO",name:"ImplantAssemblyTemplateIssuer",vm:"1",version:"DICOM"},"(0076,0006)":{tag:"(0076,0006)",vr:"LO",name:"ImplantAssemblyTemplateVersion",vm:"1",version:"DICOM"},"(0076,0008)":{tag:"(0076,0008)",vr:"SQ",name:"ReplacedImplantAssemblyTemplateSequence",vm:"1",version:"DICOM"},"(0076,000A)":{tag:"(0076,000A)",vr:"CS",name:"ImplantAssemblyTemplateType",vm:"1",version:"DICOM"},"(0076,000C)":{tag:"(0076,000C)",vr:"SQ",name:"OriginalImplantAssemblyTemplateSequence",vm:"1",version:"DICOM"},"(0076,000E)":{tag:"(0076,000E)",vr:"SQ",name:"DerivationImplantAssemblyTemplateSequence",vm:"1",version:"DICOM"},"(0076,0010)":{tag:"(0076,0010)",vr:"SQ",name:"ImplantAssemblyTemplateTargetAnatomySequence",vm:"1",version:"DICOM"},"(0076,0020)":{tag:"(0076,0020)",vr:"SQ",name:"ProcedureTypeCodeSequence",vm:"1",version:"DICOM"},"(0076,0030)":{tag:"(0076,0030)",vr:"LO",name:"SurgicalTechnique",vm:"1",version:"DICOM"},"(0076,0032)":{tag:"(0076,0032)",vr:"SQ",name:"ComponentTypesSequence",vm:"1",version:"DICOM"},"(0076,0034)":{tag:"(0076,0034)",vr:"CS",name:"ComponentTypeCodeSequence",vm:"1",version:"DICOM"},"(0076,0036)":{tag:"(0076,0036)",vr:"CS",name:"ExclusiveComponentType",vm:"1",version:"DICOM"},"(0076,0038)":{tag:"(0076,0038)",vr:"CS",name:"MandatoryComponentType",vm:"1",version:"DICOM"},"(0076,0040)":{tag:"(0076,0040)",vr:"SQ",name:"ComponentSequence",vm:"1",version:"DICOM"},"(0076,0055)":{tag:"(0076,0055)",vr:"US",name:"ComponentID",vm:"1",version:"DICOM"},"(0076,0060)":{tag:"(0076,0060)",vr:"SQ",name:"ComponentAssemblySequence",vm:"1",version:"DICOM"},"(0076,0070)":{tag:"(0076,0070)",vr:"US",name:"Component1ReferencedID",vm:"1",version:"DICOM"},"(0076,0080)":{tag:"(0076,0080)",vr:"US",name:"Component1ReferencedMatingFeatureSetID",vm:"1",version:"DICOM"},"(0076,0090)":{tag:"(0076,0090)",vr:"US",name:"Component1ReferencedMatingFeatureID",vm:"1",version:"DICOM"},"(0076,00A0)":{tag:"(0076,00A0)",vr:"US",name:"Component2ReferencedID",vm:"1",version:"DICOM"},"(0076,00B0)":{tag:"(0076,00B0)",vr:"US",name:"Component2ReferencedMatingFeatureSetID",vm:"1",version:"DICOM"},"(0076,00C0)":{tag:"(0076,00C0)",vr:"US",name:"Component2ReferencedMatingFeatureID",vm:"1",version:"DICOM"},"(0078,0001)":{tag:"(0078,0001)",vr:"LO",name:"ImplantTemplateGroupName",vm:"1",version:"DICOM"},"(0078,0010)":{tag:"(0078,0010)",vr:"ST",name:"ImplantTemplateGroupDescription",vm:"1",version:"DICOM"},"(0078,0020)":{tag:"(0078,0020)",vr:"LO",name:"ImplantTemplateGroupIssuer",vm:"1",version:"DICOM"},"(0078,0024)":{tag:"(0078,0024)",vr:"LO",name:"ImplantTemplateGroupVersion",vm:"1",version:"DICOM"},"(0078,0026)":{tag:"(0078,0026)",vr:"SQ",name:"ReplacedImplantTemplateGroupSequence",vm:"1",version:"DICOM"},"(0078,0028)":{tag:"(0078,0028)",vr:"SQ",name:"ImplantTemplateGroupTargetAnatomySequence",vm:"1",version:"DICOM"},"(0078,002A)":{tag:"(0078,002A)",vr:"SQ",name:"ImplantTemplateGroupMembersSequence",vm:"1",version:"DICOM"},"(0078,002E)":{tag:"(0078,002E)",vr:"US",name:"ImplantTemplateGroupMemberID",vm:"1",version:"DICOM"},"(0078,0050)":{tag:"(0078,0050)",vr:"FD",name:"ThreeDImplantTemplateGroupMemberMatchingPoint",vm:"3",version:"DICOM"},"(0078,0060)":{tag:"(0078,0060)",vr:"FD",name:"ThreeDImplantTemplateGroupMemberMatchingAxes",vm:"9",version:"DICOM"},"(0078,0070)":{tag:"(0078,0070)",vr:"SQ",name:"ImplantTemplateGroupMemberMatching2DCoordinatesSequence",vm:"1",version:"DICOM"},"(0078,0090)":{tag:"(0078,0090)",vr:"FD",name:"TwoDImplantTemplateGroupMemberMatchingPoint",vm:"2",version:"DICOM"},"(0078,00A0)":{tag:"(0078,00A0)",vr:"FD",name:"TwoDImplantTemplateGroupMemberMatchingAxes",vm:"4",version:"DICOM"},"(0078,00B0)":{tag:"(0078,00B0)",vr:"SQ",name:"ImplantTemplateGroupVariationDimensionSequence",vm:"1",version:"DICOM"},"(0078,00B2)":{tag:"(0078,00B2)",vr:"LO",name:"ImplantTemplateGroupVariationDimensionName",vm:"1",version:"DICOM"},"(0078,00B4)":{tag:"(0078,00B4)",vr:"SQ",name:"ImplantTemplateGroupVariationDimensionRankSequence",vm:"1",version:"DICOM"},"(0078,00B6)":{tag:"(0078,00B6)",vr:"US",name:"ReferencedImplantTemplateGroupMemberID",vm:"1",version:"DICOM"},"(0078,00B8)":{tag:"(0078,00B8)",vr:"US",name:"ImplantTemplateGroupVariationDimensionRank",vm:"1",version:"DICOM"},"(0080,0001)":{tag:"(0080,0001)",vr:"SQ",name:"SurfaceScanAcquisitionTypeCodeSequence",vm:"1",version:"DICOM"},"(0080,0002)":{tag:"(0080,0002)",vr:"SQ",name:"SurfaceScanModeCodeSequence",vm:"1",version:"DICOM"},"(0080,0003)":{tag:"(0080,0003)",vr:"SQ",name:"RegistrationMethodCodeSequence",vm:"1",version:"DICOM"},"(0080,0004)":{tag:"(0080,0004)",vr:"FD",name:"ShotDurationTime",vm:"1",version:"DICOM"},"(0080,0005)":{tag:"(0080,0005)",vr:"FD",name:"ShotOffsetTime",vm:"1",version:"DICOM"},"(0080,0006)":{tag:"(0080,0006)",vr:"US",name:"SurfacePointPresentationValueData",vm:"1-n",version:"DICOM"},"(0080,0007)":{tag:"(0080,0007)",vr:"US",name:"SurfacePointColorCIELabValueData",vm:"3-3n",version:"DICOM"},"(0080,0008)":{tag:"(0080,0008)",vr:"SQ",name:"UVMappingSequence",vm:"1",version:"DICOM"},"(0080,0009)":{tag:"(0080,0009)",vr:"SH",name:"TextureLabel",vm:"1",version:"DICOM"},"(0080,0010)":{tag:"(0080,0010)",vr:"OF",name:"UValueData",vm:"1-n",version:"DICOM"},"(0080,0011)":{tag:"(0080,0011)",vr:"OF",name:"VValueData",vm:"1-n",version:"DICOM"},"(0080,0012)":{tag:"(0080,0012)",vr:"SQ",name:"ReferencedTextureSequence",vm:"1",version:"DICOM"},"(0080,0013)":{tag:"(0080,0013)",vr:"SQ",name:"ReferencedSurfaceDataSequence",vm:"1",version:"DICOM"},"(0082,0001)":{tag:"(0082,0001)",vr:"CS",name:"AssessmentSummary",vm:"1",version:"DICOM"},"(0082,0003)":{tag:"(0082,0003)",vr:"UT",name:"AssessmentSummaryDescription",vm:"1",version:"DICOM"},"(0082,0004)":{tag:"(0082,0004)",vr:"SQ",name:"AssessedSOPInstanceSequence",vm:"1",version:"DICOM"},"(0082,0005)":{tag:"(0082,0005)",vr:"SQ",name:"ReferencedComparisonSOPInstanceSequence",vm:"1",version:"DICOM"},"(0082,0006)":{tag:"(0082,0006)",vr:"UL",name:"NumberOfAssessmentObservations",vm:"1",version:"DICOM"},"(0082,0007)":{tag:"(0082,0007)",vr:"SQ",name:"AssessmentObservationsSequence",vm:"1",version:"DICOM"},"(0082,0008)":{tag:"(0082,0008)",vr:"CS",name:"ObservationSignificance",vm:"1",version:"DICOM"},"(0082,000A)":{tag:"(0082,000A)",vr:"UT",name:"ObservationDescription",vm:"1",version:"DICOM"},"(0082,000C)":{tag:"(0082,000C)",vr:"SQ",name:"StructuredConstraintObservationSequence",vm:"1",version:"DICOM"},"(0082,0010)":{tag:"(0082,0010)",vr:"SQ",name:"AssessedAttributeValueSequence",vm:"1",version:"DICOM"},"(0082,0016)":{tag:"(0082,0016)",vr:"LO",name:"AssessmentSetID",vm:"1",version:"DICOM"},"(0082,0017)":{tag:"(0082,0017)",vr:"SQ",name:"AssessmentRequesterSequence",vm:"1",version:"DICOM"},"(0082,0018)":{tag:"(0082,0018)",vr:"LO",name:"SelectorAttributeName",vm:"1",version:"DICOM"},"(0082,0019)":{tag:"(0082,0019)",vr:"LO",name:"SelectorAttributeKeyword",vm:"1",version:"DICOM"},"(0082,0021)":{tag:"(0082,0021)",vr:"SQ",name:"AssessmentTypeCodeSequence",vm:"1",version:"DICOM"},"(0082,0022)":{tag:"(0082,0022)",vr:"SQ",name:"ObservationBasisCodeSequence",vm:"1",version:"DICOM"},"(0082,0023)":{tag:"(0082,0023)",vr:"LO",name:"AssessmentLabel",vm:"1",version:"DICOM"},"(0082,0032)":{tag:"(0082,0032)",vr:"CS",name:"ConstraintType",vm:"1",version:"DICOM"},"(0082,0033)":{tag:"(0082,0033)",vr:"UT",name:"SpecificationSelectionGuidance",vm:"1",version:"DICOM"},"(0082,0034)":{tag:"(0082,0034)",vr:"SQ",name:"ConstraintValueSequence",vm:"1",version:"DICOM"},"(0082,0035)":{tag:"(0082,0035)",vr:"SQ",name:"RecommendedDefaultValueSequence",vm:"1",version:"DICOM"},"(0082,0036)":{tag:"(0082,0036)",vr:"CS",name:"ConstraintViolationSignificance",vm:"1",version:"DICOM"},"(0082,0037)":{tag:"(0082,0037)",vr:"UT",name:"ConstraintViolationCondition",vm:"1",version:"DICOM"},"(0082,0038)":{tag:"(0082,0038)",vr:"CS",name:"ModifiableConstraintFlag",vm:"1",version:"DICOM"},"(0088,0130)":{tag:"(0088,0130)",vr:"SH",name:"StorageMediaFileSetID",vm:"1",version:"DICOM"},"(0088,0140)":{tag:"(0088,0140)",vr:"UI",name:"StorageMediaFileSetUID",vm:"1",version:"DICOM"},"(0088,0200)":{tag:"(0088,0200)",vr:"SQ",name:"IconImageSequence",vm:"1",version:"DICOM"},"(0100,0410)":{tag:"(0100,0410)",vr:"CS",name:"SOPInstanceStatus",vm:"1",version:"DICOM"},"(0100,0420)":{tag:"(0100,0420)",vr:"DT",name:"SOPAuthorizationDateTime",vm:"1",version:"DICOM"},"(0100,0424)":{tag:"(0100,0424)",vr:"LT",name:"SOPAuthorizationComment",vm:"1",version:"DICOM"},"(0100,0426)":{tag:"(0100,0426)",vr:"LO",name:"AuthorizationEquipmentCertificationNumber",vm:"1",version:"DICOM"},"(0400,0005)":{tag:"(0400,0005)",vr:"US",name:"MACIDNumber",vm:"1",version:"DICOM"},"(0400,0010)":{tag:"(0400,0010)",vr:"UI",name:"MACCalculationTransferSyntaxUID",vm:"1",version:"DICOM"},"(0400,0015)":{tag:"(0400,0015)",vr:"CS",name:"MACAlgorithm",vm:"1",version:"DICOM"},"(0400,0020)":{tag:"(0400,0020)",vr:"AT",name:"DataElementsSigned",vm:"1-n",version:"DICOM"},"(0400,0100)":{tag:"(0400,0100)",vr:"UI",name:"DigitalSignatureUID",vm:"1",version:"DICOM"},"(0400,0105)":{tag:"(0400,0105)",vr:"DT",name:"DigitalSignatureDateTime",vm:"1",version:"DICOM"},"(0400,0110)":{tag:"(0400,0110)",vr:"CS",name:"CertificateType",vm:"1",version:"DICOM"},"(0400,0115)":{tag:"(0400,0115)",vr:"OB",name:"CertificateOfSigner",vm:"1",version:"DICOM"},"(0400,0120)":{tag:"(0400,0120)",vr:"OB",name:"Signature",vm:"1",version:"DICOM"},"(0400,0305)":{tag:"(0400,0305)",vr:"CS",name:"CertifiedTimestampType",vm:"1",version:"DICOM"},"(0400,0310)":{tag:"(0400,0310)",vr:"OB",name:"CertifiedTimestamp",vm:"1",version:"DICOM"},"(0400,0401)":{tag:"(0400,0401)",vr:"SQ",name:"DigitalSignaturePurposeCodeSequence",vm:"1",version:"DICOM"},"(0400,0402)":{tag:"(0400,0402)",vr:"SQ",name:"ReferencedDigitalSignatureSequence",vm:"1",version:"DICOM"},"(0400,0403)":{tag:"(0400,0403)",vr:"SQ",name:"ReferencedSOPInstanceMACSequence",vm:"1",version:"DICOM"},"(0400,0404)":{tag:"(0400,0404)",vr:"OB",name:"MAC",vm:"1",version:"DICOM"},"(0400,0500)":{tag:"(0400,0500)",vr:"SQ",name:"EncryptedAttributesSequence",vm:"1",version:"DICOM"},"(0400,0510)":{tag:"(0400,0510)",vr:"UI",name:"EncryptedContentTransferSyntaxUID",vm:"1",version:"DICOM"},"(0400,0520)":{tag:"(0400,0520)",vr:"OB",name:"EncryptedContent",vm:"1",version:"DICOM"},"(0400,0550)":{tag:"(0400,0550)",vr:"SQ",name:"ModifiedAttributesSequence",vm:"1",version:"DICOM"},"(0400,0551)":{tag:"(0400,0551)",vr:"SQ",name:"NonconformingModifiedAttributesSequence",vm:"1",version:"DICOM"},"(0400,0552)":{tag:"(0400,0552)",vr:"OB",name:"NonconformingDataElementValue",vm:"1",version:"DICOM"},"(0400,0561)":{tag:"(0400,0561)",vr:"SQ",name:"OriginalAttributesSequence",vm:"1",version:"DICOM"},"(0400,0562)":{tag:"(0400,0562)",vr:"DT",name:"AttributeModificationDateTime",vm:"1",version:"DICOM"},"(0400,0563)":{tag:"(0400,0563)",vr:"LO",name:"ModifyingSystem",vm:"1",version:"DICOM"},"(0400,0564)":{tag:"(0400,0564)",vr:"LO",name:"SourceOfPreviousValues",vm:"1",version:"DICOM"},"(0400,0565)":{tag:"(0400,0565)",vr:"CS",name:"ReasonForTheAttributeModification",vm:"1",version:"DICOM"},"(0400,0600)":{tag:"(0400,0600)",vr:"CS",name:"InstanceOriginStatus",vm:"1",version:"DICOM"},"(2000,0010)":{tag:"(2000,0010)",vr:"IS",name:"NumberOfCopies",vm:"1",version:"DICOM"},"(2000,001E)":{tag:"(2000,001E)",vr:"SQ",name:"PrinterConfigurationSequence",vm:"1",version:"DICOM"},"(2000,0020)":{tag:"(2000,0020)",vr:"CS",name:"PrintPriority",vm:"1",version:"DICOM"},"(2000,0030)":{tag:"(2000,0030)",vr:"CS",name:"MediumType",vm:"1",version:"DICOM"},"(2000,0040)":{tag:"(2000,0040)",vr:"CS",name:"FilmDestination",vm:"1",version:"DICOM"},"(2000,0050)":{tag:"(2000,0050)",vr:"LO",name:"FilmSessionLabel",vm:"1",version:"DICOM"},"(2000,0060)":{tag:"(2000,0060)",vr:"IS",name:"MemoryAllocation",vm:"1",version:"DICOM"},"(2000,0061)":{tag:"(2000,0061)",vr:"IS",name:"MaximumMemoryAllocation",vm:"1",version:"DICOM"},"(2000,00A0)":{tag:"(2000,00A0)",vr:"US",name:"MemoryBitDepth",vm:"1",version:"DICOM"},"(2000,00A1)":{tag:"(2000,00A1)",vr:"US",name:"PrintingBitDepth",vm:"1",version:"DICOM"},"(2000,00A2)":{tag:"(2000,00A2)",vr:"SQ",name:"MediaInstalledSequence",vm:"1",version:"DICOM"},"(2000,00A4)":{tag:"(2000,00A4)",vr:"SQ",name:"OtherMediaAvailableSequence",vm:"1",version:"DICOM"},"(2000,00A8)":{tag:"(2000,00A8)",vr:"SQ",name:"SupportedImageDisplayFormatsSequence",vm:"1",version:"DICOM"},"(2000,0500)":{tag:"(2000,0500)",vr:"SQ",name:"ReferencedFilmBoxSequence",vm:"1",version:"DICOM"},"(2010,0010)":{tag:"(2010,0010)",vr:"ST",name:"ImageDisplayFormat",vm:"1",version:"DICOM"},"(2010,0030)":{tag:"(2010,0030)",vr:"CS",name:"AnnotationDisplayFormatID",vm:"1",version:"DICOM"},"(2010,0040)":{tag:"(2010,0040)",vr:"CS",name:"FilmOrientation",vm:"1",version:"DICOM"},"(2010,0050)":{tag:"(2010,0050)",vr:"CS",name:"FilmSizeID",vm:"1",version:"DICOM"},"(2010,0052)":{tag:"(2010,0052)",vr:"CS",name:"PrinterResolutionID",vm:"1",version:"DICOM"},"(2010,0054)":{tag:"(2010,0054)",vr:"CS",name:"DefaultPrinterResolutionID",vm:"1",version:"DICOM"},"(2010,0060)":{tag:"(2010,0060)",vr:"CS",name:"MagnificationType",vm:"1",version:"DICOM"},"(2010,0080)":{tag:"(2010,0080)",vr:"CS",name:"SmoothingType",vm:"1",version:"DICOM"},"(2010,00A6)":{tag:"(2010,00A6)",vr:"CS",name:"DefaultMagnificationType",vm:"1",version:"DICOM"},"(2010,00A7)":{tag:"(2010,00A7)",vr:"CS",name:"OtherMagnificationTypesAvailable",vm:"1-n",version:"DICOM"},"(2010,00A8)":{tag:"(2010,00A8)",vr:"CS",name:"DefaultSmoothingType",vm:"1",version:"DICOM"},"(2010,00A9)":{tag:"(2010,00A9)",vr:"CS",name:"OtherSmoothingTypesAvailable",vm:"1-n",version:"DICOM"},"(2010,0100)":{tag:"(2010,0100)",vr:"CS",name:"BorderDensity",vm:"1",version:"DICOM"},"(2010,0110)":{tag:"(2010,0110)",vr:"CS",name:"EmptyImageDensity",vm:"1",version:"DICOM"},"(2010,0120)":{tag:"(2010,0120)",vr:"US",name:"MinDensity",vm:"1",version:"DICOM"},"(2010,0130)":{tag:"(2010,0130)",vr:"US",name:"MaxDensity",vm:"1",version:"DICOM"},"(2010,0140)":{tag:"(2010,0140)",vr:"CS",name:"Trim",vm:"1",version:"DICOM"},"(2010,0150)":{tag:"(2010,0150)",vr:"ST",name:"ConfigurationInformation",vm:"1",version:"DICOM"},"(2010,0152)":{tag:"(2010,0152)",vr:"LT",name:"ConfigurationInformationDescription",vm:"1",version:"DICOM"},"(2010,0154)":{tag:"(2010,0154)",vr:"IS",name:"MaximumCollatedFilms",vm:"1",version:"DICOM"},"(2010,015E)":{tag:"(2010,015E)",vr:"US",name:"Illumination",vm:"1",version:"DICOM"},"(2010,0160)":{tag:"(2010,0160)",vr:"US",name:"ReflectedAmbientLight",vm:"1",version:"DICOM"},"(2010,0376)":{tag:"(2010,0376)",vr:"DS",name:"PrinterPixelSpacing",vm:"2",version:"DICOM"},"(2010,0500)":{tag:"(2010,0500)",vr:"SQ",name:"ReferencedFilmSessionSequence",vm:"1",version:"DICOM"},"(2010,0510)":{tag:"(2010,0510)",vr:"SQ",name:"ReferencedImageBoxSequence",vm:"1",version:"DICOM"},"(2010,0520)":{tag:"(2010,0520)",vr:"SQ",name:"ReferencedBasicAnnotationBoxSequence",vm:"1",version:"DICOM"},"(2020,0010)":{tag:"(2020,0010)",vr:"US",name:"ImageBoxPosition",vm:"1",version:"DICOM"},"(2020,0020)":{tag:"(2020,0020)",vr:"CS",name:"Polarity",vm:"1",version:"DICOM"},"(2020,0030)":{tag:"(2020,0030)",vr:"DS",name:"RequestedImageSize",vm:"1",version:"DICOM"},"(2020,0040)":{tag:"(2020,0040)",vr:"CS",name:"RequestedDecimateCropBehavior",vm:"1",version:"DICOM"},"(2020,0050)":{tag:"(2020,0050)",vr:"CS",name:"RequestedResolutionID",vm:"1",version:"DICOM"},"(2020,00A0)":{tag:"(2020,00A0)",vr:"CS",name:"RequestedImageSizeFlag",vm:"1",version:"DICOM"},"(2020,00A2)":{tag:"(2020,00A2)",vr:"CS",name:"DecimateCropResult",vm:"1",version:"DICOM"},"(2020,0110)":{tag:"(2020,0110)",vr:"SQ",name:"BasicGrayscaleImageSequence",vm:"1",version:"DICOM"},"(2020,0111)":{tag:"(2020,0111)",vr:"SQ",name:"BasicColorImageSequence",vm:"1",version:"DICOM"},"(2030,0010)":{tag:"(2030,0010)",vr:"US",name:"AnnotationPosition",vm:"1",version:"DICOM"},"(2030,0020)":{tag:"(2030,0020)",vr:"LO",name:"TextString",vm:"1",version:"DICOM"},"(2050,0010)":{tag:"(2050,0010)",vr:"SQ",name:"PresentationLUTSequence",vm:"1",version:"DICOM"},"(2050,0020)":{tag:"(2050,0020)",vr:"CS",name:"PresentationLUTShape",vm:"1",version:"DICOM"},"(2050,0500)":{tag:"(2050,0500)",vr:"SQ",name:"ReferencedPresentationLUTSequence",vm:"1",version:"DICOM"},"(2100,0020)":{tag:"(2100,0020)",vr:"CS",name:"ExecutionStatus",vm:"1",version:"DICOM"},"(2100,0030)":{tag:"(2100,0030)",vr:"CS",name:"ExecutionStatusInfo",vm:"1",version:"DICOM"},"(2100,0040)":{tag:"(2100,0040)",vr:"DA",name:"CreationDate",vm:"1",version:"DICOM"},"(2100,0050)":{tag:"(2100,0050)",vr:"TM",name:"CreationTime",vm:"1",version:"DICOM"},"(2100,0070)":{tag:"(2100,0070)",vr:"AE",name:"Originator",vm:"1",version:"DICOM"},"(2100,0160)":{tag:"(2100,0160)",vr:"SH",name:"OwnerID",vm:"1",version:"DICOM"},"(2100,0170)":{tag:"(2100,0170)",vr:"IS",name:"NumberOfFilms",vm:"1",version:"DICOM"},"(2110,0010)":{tag:"(2110,0010)",vr:"CS",name:"PrinterStatus",vm:"1",version:"DICOM"},"(2110,0020)":{tag:"(2110,0020)",vr:"CS",name:"PrinterStatusInfo",vm:"1",version:"DICOM"},"(2110,0030)":{tag:"(2110,0030)",vr:"LO",name:"PrinterName",vm:"1",version:"DICOM"},"(2200,0001)":{tag:"(2200,0001)",vr:"CS",name:"LabelUsingInformationExtractedFromInstances",vm:"1",version:"DICOM"},"(2200,0002)":{tag:"(2200,0002)",vr:"UT",name:"LabelText",vm:"1",version:"DICOM"},"(2200,0003)":{tag:"(2200,0003)",vr:"CS",name:"LabelStyleSelection",vm:"1",version:"DICOM"},"(2200,0004)":{tag:"(2200,0004)",vr:"LT",name:"MediaDisposition",vm:"1",version:"DICOM"},"(2200,0005)":{tag:"(2200,0005)",vr:"LT",name:"BarcodeValue",vm:"1",version:"DICOM"},"(2200,0006)":{tag:"(2200,0006)",vr:"CS",name:"BarcodeSymbology",vm:"1",version:"DICOM"},"(2200,0007)":{tag:"(2200,0007)",vr:"CS",name:"AllowMediaSplitting",vm:"1",version:"DICOM"},"(2200,0008)":{tag:"(2200,0008)",vr:"CS",name:"IncludeNonDICOMObjects",vm:"1",version:"DICOM"},"(2200,0009)":{tag:"(2200,0009)",vr:"CS",name:"IncludeDisplayApplication",vm:"1",version:"DICOM"},"(2200,000A)":{tag:"(2200,000A)",vr:"CS",name:"PreserveCompositeInstancesAfterMediaCreation",vm:"1",version:"DICOM"},"(2200,000B)":{tag:"(2200,000B)",vr:"US",name:"TotalNumberOfPiecesOfMediaCreated",vm:"1",version:"DICOM"},"(2200,000C)":{tag:"(2200,000C)",vr:"LO",name:"RequestedMediaApplicationProfile",vm:"1",version:"DICOM"},"(2200,000D)":{tag:"(2200,000D)",vr:"SQ",name:"ReferencedStorageMediaSequence",vm:"1",version:"DICOM"},"(2200,000E)":{tag:"(2200,000E)",vr:"AT",name:"FailureAttributes",vm:"1-n",version:"DICOM"},"(2200,000F)":{tag:"(2200,000F)",vr:"CS",name:"AllowLossyCompression",vm:"1",version:"DICOM"},"(2200,0020)":{tag:"(2200,0020)",vr:"CS",name:"RequestPriority",vm:"1",version:"DICOM"},"(3002,0002)":{tag:"(3002,0002)",vr:"SH",name:"RTImageLabel",vm:"1",version:"DICOM"},"(3002,0003)":{tag:"(3002,0003)",vr:"LO",name:"RTImageName",vm:"1",version:"DICOM"},"(3002,0004)":{tag:"(3002,0004)",vr:"ST",name:"RTImageDescription",vm:"1",version:"DICOM"},"(3002,000A)":{tag:"(3002,000A)",vr:"CS",name:"ReportedValuesOrigin",vm:"1",version:"DICOM"},"(3002,000C)":{tag:"(3002,000C)",vr:"CS",name:"RTImagePlane",vm:"1",version:"DICOM"},"(3002,000D)":{tag:"(3002,000D)",vr:"DS",name:"XRayImageReceptorTranslation",vm:"3",version:"DICOM"},"(3002,000E)":{tag:"(3002,000E)",vr:"DS",name:"XRayImageReceptorAngle",vm:"1",version:"DICOM"},"(3002,0010)":{tag:"(3002,0010)",vr:"DS",name:"RTImageOrientation",vm:"6",version:"DICOM"},"(3002,0011)":{tag:"(3002,0011)",vr:"DS",name:"ImagePlanePixelSpacing",vm:"2",version:"DICOM"},"(3002,0012)":{tag:"(3002,0012)",vr:"DS",name:"RTImagePosition",vm:"2",version:"DICOM"},"(3002,0020)":{tag:"(3002,0020)",vr:"SH",name:"RadiationMachineName",vm:"1",version:"DICOM"},"(3002,0022)":{tag:"(3002,0022)",vr:"DS",name:"RadiationMachineSAD",vm:"1",version:"DICOM"},"(3002,0024)":{tag:"(3002,0024)",vr:"DS",name:"RadiationMachineSSD",vm:"1",version:"DICOM"},"(3002,0026)":{tag:"(3002,0026)",vr:"DS",name:"RTImageSID",vm:"1",version:"DICOM"},"(3002,0028)":{tag:"(3002,0028)",vr:"DS",name:"SourceToReferenceObjectDistance",vm:"1",version:"DICOM"},"(3002,0029)":{tag:"(3002,0029)",vr:"IS",name:"FractionNumber",vm:"1",version:"DICOM"},"(3002,0030)":{tag:"(3002,0030)",vr:"SQ",name:"ExposureSequence",vm:"1",version:"DICOM"},"(3002,0032)":{tag:"(3002,0032)",vr:"DS",name:"MetersetExposure",vm:"1",version:"DICOM"},"(3002,0034)":{tag:"(3002,0034)",vr:"DS",name:"DiaphragmPosition",vm:"4",version:"DICOM"},"(3002,0040)":{tag:"(3002,0040)",vr:"SQ",name:"FluenceMapSequence",vm:"1",version:"DICOM"},"(3002,0041)":{tag:"(3002,0041)",vr:"CS",name:"FluenceDataSource",vm:"1",version:"DICOM"},"(3002,0042)":{tag:"(3002,0042)",vr:"DS",name:"FluenceDataScale",vm:"1",version:"DICOM"},"(3002,0050)":{tag:"(3002,0050)",vr:"SQ",name:"PrimaryFluenceModeSequence",vm:"1",version:"DICOM"},"(3002,0051)":{tag:"(3002,0051)",vr:"CS",name:"FluenceMode",vm:"1",version:"DICOM"},"(3002,0052)":{tag:"(3002,0052)",vr:"SH",name:"FluenceModeID",vm:"1",version:"DICOM"},"(3004,0001)":{tag:"(3004,0001)",vr:"CS",name:"DVHType",vm:"1",version:"DICOM"},"(3004,0002)":{tag:"(3004,0002)",vr:"CS",name:"DoseUnits",vm:"1",version:"DICOM"},"(3004,0004)":{tag:"(3004,0004)",vr:"CS",name:"DoseType",vm:"1",version:"DICOM"},"(3004,0005)":{tag:"(3004,0005)",vr:"CS",name:"SpatialTransformOfDose",vm:"1",version:"DICOM"},"(3004,0006)":{tag:"(3004,0006)",vr:"LO",name:"DoseComment",vm:"1",version:"DICOM"},"(3004,0008)":{tag:"(3004,0008)",vr:"DS",name:"NormalizationPoint",vm:"3",version:"DICOM"},"(3004,000A)":{tag:"(3004,000A)",vr:"CS",name:"DoseSummationType",vm:"1",version:"DICOM"},"(3004,000C)":{tag:"(3004,000C)",vr:"DS",name:"GridFrameOffsetVector",vm:"2-n",version:"DICOM"},"(3004,000E)":{tag:"(3004,000E)",vr:"DS",name:"DoseGridScaling",vm:"1",version:"DICOM"},"(3004,0010)":{tag:"(3004,0010)",vr:"SQ",name:"RTDoseROISequence",vm:"1",version:"DICOM"},"(3004,0012)":{tag:"(3004,0012)",vr:"DS",name:"DoseValue",vm:"1",version:"DICOM"},"(3004,0014)":{tag:"(3004,0014)",vr:"CS",name:"TissueHeterogeneityCorrection",vm:"1-3",version:"DICOM"},"(3004,0040)":{tag:"(3004,0040)",vr:"DS",name:"DVHNormalizationPoint",vm:"3",version:"DICOM"},"(3004,0042)":{tag:"(3004,0042)",vr:"DS",name:"DVHNormalizationDoseValue",vm:"1",version:"DICOM"},"(3004,0050)":{tag:"(3004,0050)",vr:"SQ",name:"DVHSequence",vm:"1",version:"DICOM"},"(3004,0052)":{tag:"(3004,0052)",vr:"DS",name:"DVHDoseScaling",vm:"1",version:"DICOM"},"(3004,0054)":{tag:"(3004,0054)",vr:"CS",name:"DVHVolumeUnits",vm:"1",version:"DICOM"},"(3004,0056)":{tag:"(3004,0056)",vr:"IS",name:"DVHNumberOfBins",vm:"1",version:"DICOM"},"(3004,0058)":{tag:"(3004,0058)",vr:"DS",name:"DVHData",vm:"2-2n",version:"DICOM"},"(3004,0060)":{tag:"(3004,0060)",vr:"SQ",name:"DVHReferencedROISequence",vm:"1",version:"DICOM"},"(3004,0062)":{tag:"(3004,0062)",vr:"CS",name:"DVHROIContributionType",vm:"1",version:"DICOM"},"(3004,0070)":{tag:"(3004,0070)",vr:"DS",name:"DVHMinimumDose",vm:"1",version:"DICOM"},"(3004,0072)":{tag:"(3004,0072)",vr:"DS",name:"DVHMaximumDose",vm:"1",version:"DICOM"},"(3004,0074)":{tag:"(3004,0074)",vr:"DS",name:"DVHMeanDose",vm:"1",version:"DICOM"},"(3006,0002)":{tag:"(3006,0002)",vr:"SH",name:"StructureSetLabel",vm:"1",version:"DICOM"},"(3006,0004)":{tag:"(3006,0004)",vr:"LO",name:"StructureSetName",vm:"1",version:"DICOM"},"(3006,0006)":{tag:"(3006,0006)",vr:"ST",name:"StructureSetDescription",vm:"1",version:"DICOM"},"(3006,0008)":{tag:"(3006,0008)",vr:"DA",name:"StructureSetDate",vm:"1",version:"DICOM"},"(3006,0009)":{tag:"(3006,0009)",vr:"TM",name:"StructureSetTime",vm:"1",version:"DICOM"},"(3006,0010)":{tag:"(3006,0010)",vr:"SQ",name:"ReferencedFrameOfReferenceSequence",vm:"1",version:"DICOM"},"(3006,0012)":{tag:"(3006,0012)",vr:"SQ",name:"RTReferencedStudySequence",vm:"1",version:"DICOM"},"(3006,0014)":{tag:"(3006,0014)",vr:"SQ",name:"RTReferencedSeriesSequence",vm:"1",version:"DICOM"},"(3006,0016)":{tag:"(3006,0016)",vr:"SQ",name:"ContourImageSequence",vm:"1",version:"DICOM"},"(3006,0018)":{tag:"(3006,0018)",vr:"SQ",name:"PredecessorStructureSetSequence",vm:"1",version:"DICOM"},"(3006,0020)":{tag:"(3006,0020)",vr:"SQ",name:"StructureSetROISequence",vm:"1",version:"DICOM"},"(3006,0022)":{tag:"(3006,0022)",vr:"IS",name:"ROINumber",vm:"1",version:"DICOM"},"(3006,0024)":{tag:"(3006,0024)",vr:"UI",name:"ReferencedFrameOfReferenceUID",vm:"1",version:"DICOM"},"(3006,0026)":{tag:"(3006,0026)",vr:"LO",name:"ROIName",vm:"1",version:"DICOM"},"(3006,0028)":{tag:"(3006,0028)",vr:"ST",name:"ROIDescription",vm:"1",version:"DICOM"},"(3006,002A)":{tag:"(3006,002A)",vr:"IS",name:"ROIDisplayColor",vm:"3",version:"DICOM"},"(3006,002C)":{tag:"(3006,002C)",vr:"DS",name:"ROIVolume",vm:"1",version:"DICOM"},"(3006,0030)":{tag:"(3006,0030)",vr:"SQ",name:"RTRelatedROISequence",vm:"1",version:"DICOM"},"(3006,0033)":{tag:"(3006,0033)",vr:"CS",name:"RTROIRelationship",vm:"1",version:"DICOM"},"(3006,0036)":{tag:"(3006,0036)",vr:"CS",name:"ROIGenerationAlgorithm",vm:"1",version:"DICOM"},"(3006,0037)":{tag:"(3006,0037)",vr:"SQ",name:"ROIDerivationAlgorithmIdentificationSequence",vm:"1",version:"DICOM"},"(3006,0038)":{tag:"(3006,0038)",vr:"LO",name:"ROIGenerationDescription",vm:"1",version:"DICOM"},"(3006,0039)":{tag:"(3006,0039)",vr:"SQ",name:"ROIContourSequence",vm:"1",version:"DICOM"},"(3006,0040)":{tag:"(3006,0040)",vr:"SQ",name:"ContourSequence",vm:"1",version:"DICOM"},"(3006,0042)":{tag:"(3006,0042)",vr:"CS",name:"ContourGeometricType",vm:"1",version:"DICOM"},"(3006,0044)":{tag:"(3006,0044)",vr:"DS",name:"ContourSlabThickness",vm:"1",version:"DICOM"},"(3006,0045)":{tag:"(3006,0045)",vr:"DS",name:"ContourOffsetVector",vm:"3",version:"DICOM"},"(3006,0046)":{tag:"(3006,0046)",vr:"IS",name:"NumberOfContourPoints",vm:"1",version:"DICOM"},"(3006,0048)":{tag:"(3006,0048)",vr:"IS",name:"ContourNumber",vm:"1",version:"DICOM"},"(3006,0049)":{tag:"(3006,0049)",vr:"IS",name:"AttachedContours",vm:"1-n",version:"DICOM"},"(3006,004A)":{tag:"(3006,004A)",vr:"SQ",name:"SourcePixelPlanesCharacteristicsSequence",vm:"1",version:"DICOM"},"(3006,0050)":{tag:"(3006,0050)",vr:"DS",name:"ContourData",vm:"3-3n",version:"DICOM"},"(3006,0080)":{tag:"(3006,0080)",vr:"SQ",name:"RTROIObservationsSequence",vm:"1",version:"DICOM"},"(3006,0082)":{tag:"(3006,0082)",vr:"IS",name:"ObservationNumber",vm:"1",version:"DICOM"},"(3006,0084)":{tag:"(3006,0084)",vr:"IS",name:"ReferencedROINumber",vm:"1",version:"DICOM"},"(3006,0085)":{tag:"(3006,0085)",vr:"SH",name:"ROIObservationLabel",vm:"1",version:"DICOM"},"(3006,0086)":{tag:"(3006,0086)",vr:"SQ",name:"RTROIIdentificationCodeSequence",vm:"1",version:"DICOM"},"(3006,0088)":{tag:"(3006,0088)",vr:"ST",name:"ROIObservationDescription",vm:"1",version:"DICOM"},"(3006,00A0)":{tag:"(3006,00A0)",vr:"SQ",name:"RelatedRTROIObservationsSequence",vm:"1",version:"DICOM"},"(3006,00A4)":{tag:"(3006,00A4)",vr:"CS",name:"RTROIInterpretedType",vm:"1",version:"DICOM"},"(3006,00A6)":{tag:"(3006,00A6)",vr:"PN",name:"ROIInterpreter",vm:"1",version:"DICOM"},"(3006,00B0)":{tag:"(3006,00B0)",vr:"SQ",name:"ROIPhysicalPropertiesSequence",vm:"1",version:"DICOM"},"(3006,00B2)":{tag:"(3006,00B2)",vr:"CS",name:"ROIPhysicalProperty",vm:"1",version:"DICOM"},"(3006,00B4)":{tag:"(3006,00B4)",vr:"DS",name:"ROIPhysicalPropertyValue",vm:"1",version:"DICOM"},"(3006,00B6)":{tag:"(3006,00B6)",vr:"SQ",name:"ROIElementalCompositionSequence",vm:"1",version:"DICOM"},"(3006,00B7)":{tag:"(3006,00B7)",vr:"US",name:"ROIElementalCompositionAtomicNumber",vm:"1",version:"DICOM"},"(3006,00B8)":{tag:"(3006,00B8)",vr:"FL",name:"ROIElementalCompositionAtomicMassFraction",vm:"1",version:"DICOM"},"(3006,00B9)":{tag:"(3006,00B9)",vr:"SQ",name:"AdditionalRTROIIdentificationCodeSequence",vm:"1",version:"DICOM"},"(3006,00C6)":{tag:"(3006,00C6)",vr:"DS",name:"FrameOfReferenceTransformationMatrix",vm:"16",version:"DICOM"},"(3006,00C8)":{tag:"(3006,00C8)",vr:"LO",name:"FrameOfReferenceTransformationComment",vm:"1",version:"DICOM"},"(3006,00C9)":{tag:"(3006,00C9)",vr:"SQ",name:"PatientLocationCoordinatesSequence",vm:"1",version:"DICOM"},"(3006,00CA)":{tag:"(3006,00CA)",vr:"SQ",name:"PatientLocationCoordinatesCodeSequence",vm:"1",version:"DICOM"},"(3006,00CB)":{tag:"(3006,00CB)",vr:"SQ",name:"PatientSupportPositionSequence",vm:"1",version:"DICOM"},"(3008,0010)":{tag:"(3008,0010)",vr:"SQ",name:"MeasuredDoseReferenceSequence",vm:"1",version:"DICOM"},"(3008,0012)":{tag:"(3008,0012)",vr:"ST",name:"MeasuredDoseDescription",vm:"1",version:"DICOM"},"(3008,0014)":{tag:"(3008,0014)",vr:"CS",name:"MeasuredDoseType",vm:"1",version:"DICOM"},"(3008,0016)":{tag:"(3008,0016)",vr:"DS",name:"MeasuredDoseValue",vm:"1",version:"DICOM"},"(3008,0020)":{tag:"(3008,0020)",vr:"SQ",name:"TreatmentSessionBeamSequence",vm:"1",version:"DICOM"},"(3008,0021)":{tag:"(3008,0021)",vr:"SQ",name:"TreatmentSessionIonBeamSequence",vm:"1",version:"DICOM"},"(3008,0022)":{tag:"(3008,0022)",vr:"IS",name:"CurrentFractionNumber",vm:"1",version:"DICOM"},"(3008,0024)":{tag:"(3008,0024)",vr:"DA",name:"TreatmentControlPointDate",vm:"1",version:"DICOM"},"(3008,0025)":{tag:"(3008,0025)",vr:"TM",name:"TreatmentControlPointTime",vm:"1",version:"DICOM"},"(3008,002A)":{tag:"(3008,002A)",vr:"CS",name:"TreatmentTerminationStatus",vm:"1",version:"DICOM"},"(3008,002B)":{tag:"(3008,002B)",vr:"SH",name:"TreatmentTerminationCode",vm:"1",version:"DICOM"},"(3008,002C)":{tag:"(3008,002C)",vr:"CS",name:"TreatmentVerificationStatus",vm:"1",version:"DICOM"},"(3008,0030)":{tag:"(3008,0030)",vr:"SQ",name:"ReferencedTreatmentRecordSequence",vm:"1",version:"DICOM"},"(3008,0032)":{tag:"(3008,0032)",vr:"DS",name:"SpecifiedPrimaryMeterset",vm:"1",version:"DICOM"},"(3008,0033)":{tag:"(3008,0033)",vr:"DS",name:"SpecifiedSecondaryMeterset",vm:"1",version:"DICOM"},"(3008,0036)":{tag:"(3008,0036)",vr:"DS",name:"DeliveredPrimaryMeterset",vm:"1",version:"DICOM"},"(3008,0037)":{tag:"(3008,0037)",vr:"DS",name:"DeliveredSecondaryMeterset",vm:"1",version:"DICOM"},"(3008,003A)":{tag:"(3008,003A)",vr:"DS",name:"SpecifiedTreatmentTime",vm:"1",version:"DICOM"},"(3008,003B)":{tag:"(3008,003B)",vr:"DS",name:"DeliveredTreatmentTime",vm:"1",version:"DICOM"},"(3008,0040)":{tag:"(3008,0040)",vr:"SQ",name:"ControlPointDeliverySequence",vm:"1",version:"DICOM"},"(3008,0041)":{tag:"(3008,0041)",vr:"SQ",name:"IonControlPointDeliverySequence",vm:"1",version:"DICOM"},"(3008,0042)":{tag:"(3008,0042)",vr:"DS",name:"SpecifiedMeterset",vm:"1",version:"DICOM"},"(3008,0044)":{tag:"(3008,0044)",vr:"DS",name:"DeliveredMeterset",vm:"1",version:"DICOM"},"(3008,0045)":{tag:"(3008,0045)",vr:"FL",name:"MetersetRateSet",vm:"1",version:"DICOM"},"(3008,0046)":{tag:"(3008,0046)",vr:"FL",name:"MetersetRateDelivered",vm:"1",version:"DICOM"},"(3008,0047)":{tag:"(3008,0047)",vr:"FL",name:"ScanSpotMetersetsDelivered",vm:"1-n",version:"DICOM"},"(3008,0048)":{tag:"(3008,0048)",vr:"DS",name:"DoseRateDelivered",vm:"1",version:"DICOM"},"(3008,0050)":{tag:"(3008,0050)",vr:"SQ",name:"TreatmentSummaryCalculatedDoseReferenceSequence",vm:"1",version:"DICOM"},"(3008,0052)":{tag:"(3008,0052)",vr:"DS",name:"CumulativeDoseToDoseReference",vm:"1",version:"DICOM"},"(3008,0054)":{tag:"(3008,0054)",vr:"DA",name:"FirstTreatmentDate",vm:"1",version:"DICOM"},"(3008,0056)":{tag:"(3008,0056)",vr:"DA",name:"MostRecentTreatmentDate",vm:"1",version:"DICOM"},"(3008,005A)":{tag:"(3008,005A)",vr:"IS",name:"NumberOfFractionsDelivered",vm:"1",version:"DICOM"},"(3008,0060)":{tag:"(3008,0060)",vr:"SQ",name:"OverrideSequence",vm:"1",version:"DICOM"},"(3008,0061)":{tag:"(3008,0061)",vr:"AT",name:"ParameterSequencePointer",vm:"1",version:"DICOM"},"(3008,0062)":{tag:"(3008,0062)",vr:"AT",name:"OverrideParameterPointer",vm:"1",version:"DICOM"},"(3008,0063)":{tag:"(3008,0063)",vr:"IS",name:"ParameterItemIndex",vm:"1",version:"DICOM"},"(3008,0064)":{tag:"(3008,0064)",vr:"IS",name:"MeasuredDoseReferenceNumber",vm:"1",version:"DICOM"},"(3008,0065)":{tag:"(3008,0065)",vr:"AT",name:"ParameterPointer",vm:"1",version:"DICOM"},"(3008,0066)":{tag:"(3008,0066)",vr:"ST",name:"OverrideReason",vm:"1",version:"DICOM"},"(3008,0067)":{tag:"(3008,0067)",vr:"US",name:"ParameterValueNumber",vm:"1",version:"DICOM"},"(3008,0068)":{tag:"(3008,0068)",vr:"SQ",name:"CorrectedParameterSequence",vm:"1",version:"DICOM"},"(3008,006A)":{tag:"(3008,006A)",vr:"FL",name:"CorrectionValue",vm:"1",version:"DICOM"},"(3008,0070)":{tag:"(3008,0070)",vr:"SQ",name:"CalculatedDoseReferenceSequence",vm:"1",version:"DICOM"},"(3008,0072)":{tag:"(3008,0072)",vr:"IS",name:"CalculatedDoseReferenceNumber",vm:"1",version:"DICOM"},"(3008,0074)":{tag:"(3008,0074)",vr:"ST",name:"CalculatedDoseReferenceDescription",vm:"1",version:"DICOM"},"(3008,0076)":{tag:"(3008,0076)",vr:"DS",name:"CalculatedDoseReferenceDoseValue",vm:"1",version:"DICOM"},"(3008,0078)":{tag:"(3008,0078)",vr:"DS",name:"StartMeterset",vm:"1",version:"DICOM"},"(3008,007A)":{tag:"(3008,007A)",vr:"DS",name:"EndMeterset",vm:"1",version:"DICOM"},"(3008,0080)":{tag:"(3008,0080)",vr:"SQ",name:"ReferencedMeasuredDoseReferenceSequence",vm:"1",version:"DICOM"},"(3008,0082)":{tag:"(3008,0082)",vr:"IS",name:"ReferencedMeasuredDoseReferenceNumber",vm:"1",version:"DICOM"},"(3008,0090)":{tag:"(3008,0090)",vr:"SQ",name:"ReferencedCalculatedDoseReferenceSequence",vm:"1",version:"DICOM"},"(3008,0092)":{tag:"(3008,0092)",vr:"IS",name:"ReferencedCalculatedDoseReferenceNumber",vm:"1",version:"DICOM"},"(3008,00A0)":{tag:"(3008,00A0)",vr:"SQ",name:"BeamLimitingDeviceLeafPairsSequence",vm:"1",version:"DICOM"},"(3008,00B0)":{tag:"(3008,00B0)",vr:"SQ",name:"RecordedWedgeSequence",vm:"1",version:"DICOM"},"(3008,00C0)":{tag:"(3008,00C0)",vr:"SQ",name:"RecordedCompensatorSequence",vm:"1",version:"DICOM"},"(3008,00D0)":{tag:"(3008,00D0)",vr:"SQ",name:"RecordedBlockSequence",vm:"1",version:"DICOM"},"(3008,00E0)":{tag:"(3008,00E0)",vr:"SQ",name:"TreatmentSummaryMeasuredDoseReferenceSequence",vm:"1",version:"DICOM"},"(3008,00F0)":{tag:"(3008,00F0)",vr:"SQ",name:"RecordedSnoutSequence",vm:"1",version:"DICOM"},"(3008,00F2)":{tag:"(3008,00F2)",vr:"SQ",name:"RecordedRangeShifterSequence",vm:"1",version:"DICOM"},"(3008,00F4)":{tag:"(3008,00F4)",vr:"SQ",name:"RecordedLateralSpreadingDeviceSequence",vm:"1",version:"DICOM"},"(3008,00F6)":{tag:"(3008,00F6)",vr:"SQ",name:"RecordedRangeModulatorSequence",vm:"1",version:"DICOM"},"(3008,0100)":{tag:"(3008,0100)",vr:"SQ",name:"RecordedSourceSequence",vm:"1",version:"DICOM"},"(3008,0105)":{tag:"(3008,0105)",vr:"LO",name:"SourceSerialNumber",vm:"1",version:"DICOM"},"(3008,0110)":{tag:"(3008,0110)",vr:"SQ",name:"TreatmentSessionApplicationSetupSequence",vm:"1",version:"DICOM"},"(3008,0116)":{tag:"(3008,0116)",vr:"CS",name:"ApplicationSetupCheck",vm:"1",version:"DICOM"},"(3008,0120)":{tag:"(3008,0120)",vr:"SQ",name:"RecordedBrachyAccessoryDeviceSequence",vm:"1",version:"DICOM"},"(3008,0122)":{tag:"(3008,0122)",vr:"IS",name:"ReferencedBrachyAccessoryDeviceNumber",vm:"1",version:"DICOM"},"(3008,0130)":{tag:"(3008,0130)",vr:"SQ",name:"RecordedChannelSequence",vm:"1",version:"DICOM"},"(3008,0132)":{tag:"(3008,0132)",vr:"DS",name:"SpecifiedChannelTotalTime",vm:"1",version:"DICOM"},"(3008,0134)":{tag:"(3008,0134)",vr:"DS",name:"DeliveredChannelTotalTime",vm:"1",version:"DICOM"},"(3008,0136)":{tag:"(3008,0136)",vr:"IS",name:"SpecifiedNumberOfPulses",vm:"1",version:"DICOM"},"(3008,0138)":{tag:"(3008,0138)",vr:"IS",name:"DeliveredNumberOfPulses",vm:"1",version:"DICOM"},"(3008,013A)":{tag:"(3008,013A)",vr:"DS",name:"SpecifiedPulseRepetitionInterval",vm:"1",version:"DICOM"},"(3008,013C)":{tag:"(3008,013C)",vr:"DS",name:"DeliveredPulseRepetitionInterval",vm:"1",version:"DICOM"},"(3008,0140)":{tag:"(3008,0140)",vr:"SQ",name:"RecordedSourceApplicatorSequence",vm:"1",version:"DICOM"},"(3008,0142)":{tag:"(3008,0142)",vr:"IS",name:"ReferencedSourceApplicatorNumber",vm:"1",version:"DICOM"},"(3008,0150)":{tag:"(3008,0150)",vr:"SQ",name:"RecordedChannelShieldSequence",vm:"1",version:"DICOM"},"(3008,0152)":{tag:"(3008,0152)",vr:"IS",name:"ReferencedChannelShieldNumber",vm:"1",version:"DICOM"},"(3008,0160)":{tag:"(3008,0160)",vr:"SQ",name:"BrachyControlPointDeliveredSequence",vm:"1",version:"DICOM"},"(3008,0162)":{tag:"(3008,0162)",vr:"DA",name:"SafePositionExitDate",vm:"1",version:"DICOM"},"(3008,0164)":{tag:"(3008,0164)",vr:"TM",name:"SafePositionExitTime",vm:"1",version:"DICOM"},"(3008,0166)":{tag:"(3008,0166)",vr:"DA",name:"SafePositionReturnDate",vm:"1",version:"DICOM"},"(3008,0168)":{tag:"(3008,0168)",vr:"TM",name:"SafePositionReturnTime",vm:"1",version:"DICOM"},"(3008,0171)":{tag:"(3008,0171)",vr:"SQ",name:"PulseSpecificBrachyControlPointDeliveredSequence",vm:"1",version:"DICOM"},"(3008,0172)":{tag:"(3008,0172)",vr:"US",name:"PulseNumber",vm:"1",version:"DICOM"},"(3008,0173)":{tag:"(3008,0173)",vr:"SQ",name:"BrachyPulseControlPointDeliveredSequence",vm:"1",version:"DICOM"},"(3008,0200)":{tag:"(3008,0200)",vr:"CS",name:"CurrentTreatmentStatus",vm:"1",version:"DICOM"},"(3008,0202)":{tag:"(3008,0202)",vr:"ST",name:"TreatmentStatusComment",vm:"1",version:"DICOM"},"(3008,0220)":{tag:"(3008,0220)",vr:"SQ",name:"FractionGroupSummarySequence",vm:"1",version:"DICOM"},"(3008,0223)":{tag:"(3008,0223)",vr:"IS",name:"ReferencedFractionNumber",vm:"1",version:"DICOM"},"(3008,0224)":{tag:"(3008,0224)",vr:"CS",name:"FractionGroupType",vm:"1",version:"DICOM"},"(3008,0230)":{tag:"(3008,0230)",vr:"CS",name:"BeamStopperPosition",vm:"1",version:"DICOM"},"(3008,0240)":{tag:"(3008,0240)",vr:"SQ",name:"FractionStatusSummarySequence",vm:"1",version:"DICOM"},"(3008,0250)":{tag:"(3008,0250)",vr:"DA",name:"TreatmentDate",vm:"1",version:"DICOM"},"(3008,0251)":{tag:"(3008,0251)",vr:"TM",name:"TreatmentTime",vm:"1",version:"DICOM"},"(300A,0002)":{tag:"(300A,0002)",vr:"SH",name:"RTPlanLabel",vm:"1",version:"DICOM"},"(300A,0003)":{tag:"(300A,0003)",vr:"LO",name:"RTPlanName",vm:"1",version:"DICOM"},"(300A,0004)":{tag:"(300A,0004)",vr:"ST",name:"RTPlanDescription",vm:"1",version:"DICOM"},"(300A,0006)":{tag:"(300A,0006)",vr:"DA",name:"RTPlanDate",vm:"1",version:"DICOM"},"(300A,0007)":{tag:"(300A,0007)",vr:"TM",name:"RTPlanTime",vm:"1",version:"DICOM"},"(300A,0009)":{tag:"(300A,0009)",vr:"LO",name:"TreatmentProtocols",vm:"1-n",version:"DICOM"},"(300A,000A)":{tag:"(300A,000A)",vr:"CS",name:"PlanIntent",vm:"1",version:"DICOM"},"(300A,000B)":{tag:"(300A,000B)",vr:"LO",name:"TreatmentSites",vm:"1-n",version:"DICOM"},"(300A,000C)":{tag:"(300A,000C)",vr:"CS",name:"RTPlanGeometry",vm:"1",version:"DICOM"},"(300A,000E)":{tag:"(300A,000E)",vr:"ST",name:"PrescriptionDescription",vm:"1",version:"DICOM"},"(300A,0010)":{tag:"(300A,0010)",vr:"SQ",name:"DoseReferenceSequence",vm:"1",version:"DICOM"},"(300A,0012)":{tag:"(300A,0012)",vr:"IS",name:"DoseReferenceNumber",vm:"1",version:"DICOM"},"(300A,0013)":{tag:"(300A,0013)",vr:"UI",name:"DoseReferenceUID",vm:"1",version:"DICOM"},"(300A,0014)":{tag:"(300A,0014)",vr:"CS",name:"DoseReferenceStructureType",vm:"1",version:"DICOM"},"(300A,0015)":{tag:"(300A,0015)",vr:"CS",name:"NominalBeamEnergyUnit",vm:"1",version:"DICOM"},"(300A,0016)":{tag:"(300A,0016)",vr:"LO",name:"DoseReferenceDescription",vm:"1",version:"DICOM"},"(300A,0018)":{tag:"(300A,0018)",vr:"DS",name:"DoseReferencePointCoordinates",vm:"3",version:"DICOM"},"(300A,001A)":{tag:"(300A,001A)",vr:"DS",name:"NominalPriorDose",vm:"1",version:"DICOM"},"(300A,0020)":{tag:"(300A,0020)",vr:"CS",name:"DoseReferenceType",vm:"1",version:"DICOM"},"(300A,0021)":{tag:"(300A,0021)",vr:"DS",name:"ConstraintWeight",vm:"1",version:"DICOM"},"(300A,0022)":{tag:"(300A,0022)",vr:"DS",name:"DeliveryWarningDose",vm:"1",version:"DICOM"},"(300A,0023)":{tag:"(300A,0023)",vr:"DS",name:"DeliveryMaximumDose",vm:"1",version:"DICOM"},"(300A,0025)":{tag:"(300A,0025)",vr:"DS",name:"TargetMinimumDose",vm:"1",version:"DICOM"},"(300A,0026)":{tag:"(300A,0026)",vr:"DS",name:"TargetPrescriptionDose",vm:"1",version:"DICOM"},"(300A,0027)":{tag:"(300A,0027)",vr:"DS",name:"TargetMaximumDose",vm:"1",version:"DICOM"},"(300A,0028)":{tag:"(300A,0028)",vr:"DS",name:"TargetUnderdoseVolumeFraction",vm:"1",version:"DICOM"},"(300A,002A)":{tag:"(300A,002A)",vr:"DS",name:"OrganAtRiskFullVolumeDose",vm:"1",version:"DICOM"},"(300A,002B)":{tag:"(300A,002B)",vr:"DS",name:"OrganAtRiskLimitDose",vm:"1",version:"DICOM"},"(300A,002C)":{tag:"(300A,002C)",vr:"DS",name:"OrganAtRiskMaximumDose",vm:"1",version:"DICOM"},"(300A,002D)":{tag:"(300A,002D)",vr:"DS",name:"OrganAtRiskOverdoseVolumeFraction",vm:"1",version:"DICOM"},"(300A,0040)":{tag:"(300A,0040)",vr:"SQ",name:"ToleranceTableSequence",vm:"1",version:"DICOM"},"(300A,0042)":{tag:"(300A,0042)",vr:"IS",name:"ToleranceTableNumber",vm:"1",version:"DICOM"},"(300A,0043)":{tag:"(300A,0043)",vr:"SH",name:"ToleranceTableLabel",vm:"1",version:"DICOM"},"(300A,0044)":{tag:"(300A,0044)",vr:"DS",name:"GantryAngleTolerance",vm:"1",version:"DICOM"},"(300A,0046)":{tag:"(300A,0046)",vr:"DS",name:"BeamLimitingDeviceAngleTolerance",vm:"1",version:"DICOM"},"(300A,0048)":{tag:"(300A,0048)",vr:"SQ",name:"BeamLimitingDeviceToleranceSequence",vm:"1",version:"DICOM"},"(300A,004A)":{tag:"(300A,004A)",vr:"DS",name:"BeamLimitingDevicePositionTolerance",vm:"1",version:"DICOM"},"(300A,004B)":{tag:"(300A,004B)",vr:"FL",name:"SnoutPositionTolerance",vm:"1",version:"DICOM"},"(300A,004C)":{tag:"(300A,004C)",vr:"DS",name:"PatientSupportAngleTolerance",vm:"1",version:"DICOM"},"(300A,004E)":{tag:"(300A,004E)",vr:"DS",name:"TableTopEccentricAngleTolerance",vm:"1",version:"DICOM"},"(300A,004F)":{tag:"(300A,004F)",vr:"FL",name:"TableTopPitchAngleTolerance",vm:"1",version:"DICOM"},"(300A,0050)":{tag:"(300A,0050)",vr:"FL",name:"TableTopRollAngleTolerance",vm:"1",version:"DICOM"},"(300A,0051)":{tag:"(300A,0051)",vr:"DS",name:"TableTopVerticalPositionTolerance",vm:"1",version:"DICOM"},"(300A,0052)":{tag:"(300A,0052)",vr:"DS",name:"TableTopLongitudinalPositionTolerance",vm:"1",version:"DICOM"},"(300A,0053)":{tag:"(300A,0053)",vr:"DS",name:"TableTopLateralPositionTolerance",vm:"1",version:"DICOM"},"(300A,0055)":{tag:"(300A,0055)",vr:"CS",name:"RTPlanRelationship",vm:"1",version:"DICOM"},"(300A,0070)":{tag:"(300A,0070)",vr:"SQ",name:"FractionGroupSequence",vm:"1",version:"DICOM"},"(300A,0071)":{tag:"(300A,0071)",vr:"IS",name:"FractionGroupNumber",vm:"1",version:"DICOM"},"(300A,0072)":{tag:"(300A,0072)",vr:"LO",name:"FractionGroupDescription",vm:"1",version:"DICOM"},"(300A,0078)":{tag:"(300A,0078)",vr:"IS",name:"NumberOfFractionsPlanned",vm:"1",version:"DICOM"},"(300A,0079)":{tag:"(300A,0079)",vr:"IS",name:"NumberOfFractionPatternDigitsPerDay",vm:"1",version:"DICOM"},"(300A,007A)":{tag:"(300A,007A)",vr:"IS",name:"RepeatFractionCycleLength",vm:"1",version:"DICOM"},"(300A,007B)":{tag:"(300A,007B)",vr:"LT",name:"FractionPattern",vm:"1",version:"DICOM"},"(300A,0080)":{tag:"(300A,0080)",vr:"IS",name:"NumberOfBeams",vm:"1",version:"DICOM"},"(300A,0082)":{tag:"(300A,0082)",vr:"DS",name:"BeamDoseSpecificationPoint",vm:"3",version:"DICOM"},"(300A,0083)":{tag:"(300A,0083)",vr:"UI",name:"ReferencedDoseReferenceUID",vm:"1",version:"DICOM"},"(300A,0084)":{tag:"(300A,0084)",vr:"DS",name:"BeamDose",vm:"1",version:"DICOM"},"(300A,0086)":{tag:"(300A,0086)",vr:"DS",name:"BeamMeterset",vm:"1",version:"DICOM"},"(300A,008B)":{tag:"(300A,008B)",vr:"CS",name:"BeamDoseMeaning",vm:"1",version:"DICOM"},"(300A,008C)":{tag:"(300A,008C)",vr:"SQ",name:"BeamDoseVerificationControlPointSequence",vm:"1",version:"DICOM"},"(300A,008D)":{tag:"(300A,008D)",vr:"FL",name:"AverageBeamDosePointDepth",vm:"1",version:"DICOM"},"(300A,008E)":{tag:"(300A,008E)",vr:"FL",name:"AverageBeamDosePointEquivalentDepth",vm:"1",version:"DICOM"},"(300A,008F)":{tag:"(300A,008F)",vr:"FL",name:"AverageBeamDosePointSSD",vm:"1",version:"DICOM"},"(300A,0090)":{tag:"(300A,0090)",vr:"CS",name:"BeamDoseType",vm:"1",version:"DICOM"},"(300A,0091)":{tag:"(300A,0091)",vr:"DS",name:"AlternateBeamDose",vm:"1",version:"DICOM"},"(300A,0092)":{tag:"(300A,0092)",vr:"CS",name:"AlternateBeamDoseType",vm:"1",version:"DICOM"},"(300A,0093)":{tag:"(300A,0093)",vr:"CS",name:"DepthValueAveragingFlag",vm:"1",version:"DICOM"},"(300A,0094)":{tag:"(300A,0094)",vr:"DS",name:"BeamDosePointSourceToExternalContourDistance",vm:"1",version:"DICOM"},"(300A,00A0)":{tag:"(300A,00A0)",vr:"IS",name:"NumberOfBrachyApplicationSetups",vm:"1",version:"DICOM"},"(300A,00A2)":{tag:"(300A,00A2)",vr:"DS",name:"BrachyApplicationSetupDoseSpecificationPoint",vm:"3",version:"DICOM"},"(300A,00A4)":{tag:"(300A,00A4)",vr:"DS",name:"BrachyApplicationSetupDose",vm:"1",version:"DICOM"},"(300A,00B0)":{tag:"(300A,00B0)",vr:"SQ",name:"BeamSequence",vm:"1",version:"DICOM"},"(300A,00B2)":{tag:"(300A,00B2)",vr:"SH",name:"TreatmentMachineName",vm:"1",version:"DICOM"},"(300A,00B3)":{tag:"(300A,00B3)",vr:"CS",name:"PrimaryDosimeterUnit",vm:"1",version:"DICOM"},"(300A,00B4)":{tag:"(300A,00B4)",vr:"DS",name:"SourceAxisDistance",vm:"1",version:"DICOM"},"(300A,00B6)":{tag:"(300A,00B6)",vr:"SQ",name:"BeamLimitingDeviceSequence",vm:"1",version:"DICOM"},"(300A,00B8)":{tag:"(300A,00B8)",vr:"CS",name:"RTBeamLimitingDeviceType",vm:"1",version:"DICOM"},"(300A,00BA)":{tag:"(300A,00BA)",vr:"DS",name:"SourceToBeamLimitingDeviceDistance",vm:"1",version:"DICOM"},"(300A,00BB)":{tag:"(300A,00BB)",vr:"FL",name:"IsocenterToBeamLimitingDeviceDistance",vm:"1",version:"DICOM"},"(300A,00BC)":{tag:"(300A,00BC)",vr:"IS",name:"NumberOfLeafJawPairs",vm:"1",version:"DICOM"},"(300A,00BE)":{tag:"(300A,00BE)",vr:"DS",name:"LeafPositionBoundaries",vm:"3-n",version:"DICOM"},"(300A,00C0)":{tag:"(300A,00C0)",vr:"IS",name:"BeamNumber",vm:"1",version:"DICOM"},"(300A,00C2)":{tag:"(300A,00C2)",vr:"LO",name:"BeamName",vm:"1",version:"DICOM"},"(300A,00C3)":{tag:"(300A,00C3)",vr:"ST",name:"BeamDescription",vm:"1",version:"DICOM"},"(300A,00C4)":{tag:"(300A,00C4)",vr:"CS",name:"BeamType",vm:"1",version:"DICOM"},"(300A,00C5)":{tag:"(300A,00C5)",vr:"FD",name:"BeamDeliveryDurationLimit",vm:"1",version:"DICOM"},"(300A,00C6)":{tag:"(300A,00C6)",vr:"CS",name:"RadiationType",vm:"1",version:"DICOM"},"(300A,00C7)":{tag:"(300A,00C7)",vr:"CS",name:"HighDoseTechniqueType",vm:"1",version:"DICOM"},"(300A,00C8)":{tag:"(300A,00C8)",vr:"IS",name:"ReferenceImageNumber",vm:"1",version:"DICOM"},"(300A,00CA)":{tag:"(300A,00CA)",vr:"SQ",name:"PlannedVerificationImageSequence",vm:"1",version:"DICOM"},"(300A,00CC)":{tag:"(300A,00CC)",vr:"LO",name:"ImagingDeviceSpecificAcquisitionParameters",vm:"1-n",version:"DICOM"},"(300A,00CE)":{tag:"(300A,00CE)",vr:"CS",name:"TreatmentDeliveryType",vm:"1",version:"DICOM"},"(300A,00D0)":{tag:"(300A,00D0)",vr:"IS",name:"NumberOfWedges",vm:"1",version:"DICOM"},"(300A,00D1)":{tag:"(300A,00D1)",vr:"SQ",name:"WedgeSequence",vm:"1",version:"DICOM"},"(300A,00D2)":{tag:"(300A,00D2)",vr:"IS",name:"WedgeNumber",vm:"1",version:"DICOM"},"(300A,00D3)":{tag:"(300A,00D3)",vr:"CS",name:"WedgeType",vm:"1",version:"DICOM"},"(300A,00D4)":{tag:"(300A,00D4)",vr:"SH",name:"WedgeID",vm:"1",version:"DICOM"},"(300A,00D5)":{tag:"(300A,00D5)",vr:"IS",name:"WedgeAngle",vm:"1",version:"DICOM"},"(300A,00D6)":{tag:"(300A,00D6)",vr:"DS",name:"WedgeFactor",vm:"1",version:"DICOM"},"(300A,00D7)":{tag:"(300A,00D7)",vr:"FL",name:"TotalWedgeTrayWaterEquivalentThickness",vm:"1",version:"DICOM"},"(300A,00D8)":{tag:"(300A,00D8)",vr:"DS",name:"WedgeOrientation",vm:"1",version:"DICOM"},"(300A,00D9)":{tag:"(300A,00D9)",vr:"FL",name:"IsocenterToWedgeTrayDistance",vm:"1",version:"DICOM"},"(300A,00DA)":{tag:"(300A,00DA)",vr:"DS",name:"SourceToWedgeTrayDistance",vm:"1",version:"DICOM"},"(300A,00DB)":{tag:"(300A,00DB)",vr:"FL",name:"WedgeThinEdgePosition",vm:"1",version:"DICOM"},"(300A,00DC)":{tag:"(300A,00DC)",vr:"SH",name:"BolusID",vm:"1",version:"DICOM"},"(300A,00DD)":{tag:"(300A,00DD)",vr:"ST",name:"BolusDescription",vm:"1",version:"DICOM"},"(300A,00DE)":{tag:"(300A,00DE)",vr:"DS",name:"EffectiveWedgeAngle",vm:"1",version:"DICOM"},"(300A,00E0)":{tag:"(300A,00E0)",vr:"IS",name:"NumberOfCompensators",vm:"1",version:"DICOM"},"(300A,00E1)":{tag:"(300A,00E1)",vr:"SH",name:"MaterialID",vm:"1",version:"DICOM"},"(300A,00E2)":{tag:"(300A,00E2)",vr:"DS",name:"TotalCompensatorTrayFactor",vm:"1",version:"DICOM"},"(300A,00E3)":{tag:"(300A,00E3)",vr:"SQ",name:"CompensatorSequence",vm:"1",version:"DICOM"},"(300A,00E4)":{tag:"(300A,00E4)",vr:"IS",name:"CompensatorNumber",vm:"1",version:"DICOM"},"(300A,00E5)":{tag:"(300A,00E5)",vr:"SH",name:"CompensatorID",vm:"1",version:"DICOM"},"(300A,00E6)":{tag:"(300A,00E6)",vr:"DS",name:"SourceToCompensatorTrayDistance",vm:"1",version:"DICOM"},"(300A,00E7)":{tag:"(300A,00E7)",vr:"IS",name:"CompensatorRows",vm:"1",version:"DICOM"},"(300A,00E8)":{tag:"(300A,00E8)",vr:"IS",name:"CompensatorColumns",vm:"1",version:"DICOM"},"(300A,00E9)":{tag:"(300A,00E9)",vr:"DS",name:"CompensatorPixelSpacing",vm:"2",version:"DICOM"},"(300A,00EA)":{tag:"(300A,00EA)",vr:"DS",name:"CompensatorPosition",vm:"2",version:"DICOM"},"(300A,00EB)":{tag:"(300A,00EB)",vr:"DS",name:"CompensatorTransmissionData",vm:"1-n",version:"DICOM"},"(300A,00EC)":{tag:"(300A,00EC)",vr:"DS",name:"CompensatorThicknessData",vm:"1-n",version:"DICOM"},"(300A,00ED)":{tag:"(300A,00ED)",vr:"IS",name:"NumberOfBoli",vm:"1",version:"DICOM"},"(300A,00EE)":{tag:"(300A,00EE)",vr:"CS",name:"CompensatorType",vm:"1",version:"DICOM"},"(300A,00EF)":{tag:"(300A,00EF)",vr:"SH",name:"CompensatorTrayID",vm:"1",version:"DICOM"},"(300A,00F0)":{tag:"(300A,00F0)",vr:"IS",name:"NumberOfBlocks",vm:"1",version:"DICOM"},"(300A,00F2)":{tag:"(300A,00F2)",vr:"DS",name:"TotalBlockTrayFactor",vm:"1",version:"DICOM"},"(300A,00F3)":{tag:"(300A,00F3)",vr:"FL",name:"TotalBlockTrayWaterEquivalentThickness",vm:"1",version:"DICOM"},"(300A,00F4)":{tag:"(300A,00F4)",vr:"SQ",name:"BlockSequence",vm:"1",version:"DICOM"},"(300A,00F5)":{tag:"(300A,00F5)",vr:"SH",name:"BlockTrayID",vm:"1",version:"DICOM"},"(300A,00F6)":{tag:"(300A,00F6)",vr:"DS",name:"SourceToBlockTrayDistance",vm:"1",version:"DICOM"},"(300A,00F7)":{tag:"(300A,00F7)",vr:"FL",name:"IsocenterToBlockTrayDistance",vm:"1",version:"DICOM"},"(300A,00F8)":{tag:"(300A,00F8)",vr:"CS",name:"BlockType",vm:"1",version:"DICOM"},"(300A,00F9)":{tag:"(300A,00F9)",vr:"LO",name:"AccessoryCode",vm:"1",version:"DICOM"},"(300A,00FA)":{tag:"(300A,00FA)",vr:"CS",name:"BlockDivergence",vm:"1",version:"DICOM"},"(300A,00FB)":{tag:"(300A,00FB)",vr:"CS",name:"BlockMountingPosition",vm:"1",version:"DICOM"},"(300A,00FC)":{tag:"(300A,00FC)",vr:"IS",name:"BlockNumber",vm:"1",version:"DICOM"},"(300A,00FE)":{tag:"(300A,00FE)",vr:"LO",name:"BlockName",vm:"1",version:"DICOM"},"(300A,0100)":{tag:"(300A,0100)",vr:"DS",name:"BlockThickness",vm:"1",version:"DICOM"},"(300A,0102)":{tag:"(300A,0102)",vr:"DS",name:"BlockTransmission",vm:"1",version:"DICOM"},"(300A,0104)":{tag:"(300A,0104)",vr:"IS",name:"BlockNumberOfPoints",vm:"1",version:"DICOM"},"(300A,0106)":{tag:"(300A,0106)",vr:"DS",name:"BlockData",vm:"2-2n",version:"DICOM"},"(300A,0107)":{tag:"(300A,0107)",vr:"SQ",name:"ApplicatorSequence",vm:"1",version:"DICOM"},"(300A,0108)":{tag:"(300A,0108)",vr:"SH",name:"ApplicatorID",vm:"1",version:"DICOM"},"(300A,0109)":{tag:"(300A,0109)",vr:"CS",name:"ApplicatorType",vm:"1",version:"DICOM"},"(300A,010A)":{tag:"(300A,010A)",vr:"LO",name:"ApplicatorDescription",vm:"1",version:"DICOM"},"(300A,010C)":{tag:"(300A,010C)",vr:"DS",name:"CumulativeDoseReferenceCoefficient",vm:"1",version:"DICOM"},"(300A,010E)":{tag:"(300A,010E)",vr:"DS",name:"FinalCumulativeMetersetWeight",vm:"1",version:"DICOM"},"(300A,0110)":{tag:"(300A,0110)",vr:"IS",name:"NumberOfControlPoints",vm:"1",version:"DICOM"},"(300A,0111)":{tag:"(300A,0111)",vr:"SQ",name:"ControlPointSequence",vm:"1",version:"DICOM"},"(300A,0112)":{tag:"(300A,0112)",vr:"IS",name:"ControlPointIndex",vm:"1",version:"DICOM"},"(300A,0114)":{tag:"(300A,0114)",vr:"DS",name:"NominalBeamEnergy",vm:"1",version:"DICOM"},"(300A,0115)":{tag:"(300A,0115)",vr:"DS",name:"DoseRateSet",vm:"1",version:"DICOM"},"(300A,0116)":{tag:"(300A,0116)",vr:"SQ",name:"WedgePositionSequence",vm:"1",version:"DICOM"},"(300A,0118)":{tag:"(300A,0118)",vr:"CS",name:"WedgePosition",vm:"1",version:"DICOM"},"(300A,011A)":{tag:"(300A,011A)",vr:"SQ",name:"BeamLimitingDevicePositionSequence",vm:"1",version:"DICOM"},"(300A,011C)":{tag:"(300A,011C)",vr:"DS",name:"LeafJawPositions",vm:"2-2n",version:"DICOM"},"(300A,011E)":{tag:"(300A,011E)",vr:"DS",name:"GantryAngle",vm:"1",version:"DICOM"},"(300A,011F)":{tag:"(300A,011F)",vr:"CS",name:"GantryRotationDirection",vm:"1",version:"DICOM"},"(300A,0120)":{tag:"(300A,0120)",vr:"DS",name:"BeamLimitingDeviceAngle",vm:"1",version:"DICOM"},"(300A,0121)":{tag:"(300A,0121)",vr:"CS",name:"BeamLimitingDeviceRotationDirection",vm:"1",version:"DICOM"},"(300A,0122)":{tag:"(300A,0122)",vr:"DS",name:"PatientSupportAngle",vm:"1",version:"DICOM"},"(300A,0123)":{tag:"(300A,0123)",vr:"CS",name:"PatientSupportRotationDirection",vm:"1",version:"DICOM"},"(300A,0124)":{tag:"(300A,0124)",vr:"DS",name:"TableTopEccentricAxisDistance",vm:"1",version:"DICOM"},"(300A,0125)":{tag:"(300A,0125)",vr:"DS",name:"TableTopEccentricAngle",vm:"1",version:"DICOM"},"(300A,0126)":{tag:"(300A,0126)",vr:"CS",name:"TableTopEccentricRotationDirection",vm:"1",version:"DICOM"},"(300A,0128)":{tag:"(300A,0128)",vr:"DS",name:"TableTopVerticalPosition",vm:"1",version:"DICOM"},"(300A,0129)":{tag:"(300A,0129)",vr:"DS",name:"TableTopLongitudinalPosition",vm:"1",version:"DICOM"},"(300A,012A)":{tag:"(300A,012A)",vr:"DS",name:"TableTopLateralPosition",vm:"1",version:"DICOM"},"(300A,012C)":{tag:"(300A,012C)",vr:"DS",name:"IsocenterPosition",vm:"3",version:"DICOM"},"(300A,012E)":{tag:"(300A,012E)",vr:"DS",name:"SurfaceEntryPoint",vm:"3",version:"DICOM"},"(300A,0130)":{tag:"(300A,0130)",vr:"DS",name:"SourceToSurfaceDistance",vm:"1",version:"DICOM"},"(300A,0131)":{tag:"(300A,0131)",vr:"FL",name:"AverageBeamDosePointSourceToExternalContourSurfaceDistance",vm:"1",version:"DICOM"},"(300A,0132)":{tag:"(300A,0132)",vr:"FL",name:"SourceToExternalContourDistance",vm:"1",version:"DICOM"},"(300A,0133)":{tag:"(300A,0133)",vr:"FL",name:"ExternalContourEntryPoint",vm:"3",version:"DICOM"},"(300A,0134)":{tag:"(300A,0134)",vr:"DS",name:"CumulativeMetersetWeight",vm:"1",version:"DICOM"},"(300A,0140)":{tag:"(300A,0140)",vr:"FL",name:"TableTopPitchAngle",vm:"1",version:"DICOM"},"(300A,0142)":{tag:"(300A,0142)",vr:"CS",name:"TableTopPitchRotationDirection",vm:"1",version:"DICOM"},"(300A,0144)":{tag:"(300A,0144)",vr:"FL",name:"TableTopRollAngle",vm:"1",version:"DICOM"},"(300A,0146)":{tag:"(300A,0146)",vr:"CS",name:"TableTopRollRotationDirection",vm:"1",version:"DICOM"},"(300A,0148)":{tag:"(300A,0148)",vr:"FL",name:"HeadFixationAngle",vm:"1",version:"DICOM"},"(300A,014A)":{tag:"(300A,014A)",vr:"FL",name:"GantryPitchAngle",vm:"1",version:"DICOM"},"(300A,014C)":{tag:"(300A,014C)",vr:"CS",name:"GantryPitchRotationDirection",vm:"1",version:"DICOM"},"(300A,014E)":{tag:"(300A,014E)",vr:"FL",name:"GantryPitchAngleTolerance",vm:"1",version:"DICOM"},"(300A,0150)":{tag:"(300A,0150)",vr:"CS",name:"FixationEye",vm:"1",version:"DICOM"},"(300A,0151)":{tag:"(300A,0151)",vr:"DS",name:"ChairHeadFramePosition",vm:"1",version:"DICOM"},"(300A,0152)":{tag:"(300A,0152)",vr:"DS",name:"HeadFixationAngleTolerance",vm:"1",version:"DICOM"},"(300A,0153)":{tag:"(300A,0153)",vr:"DS",name:"ChairHeadFramePositionTolerance",vm:"1",version:"DICOM"},"(300A,0154)":{tag:"(300A,0154)",vr:"DS",name:"FixationLightAzimuthalAngleTolerance",vm:"1",version:"DICOM"},"(300A,0155)":{tag:"(300A,0155)",vr:"DS",name:"FixationLightPolarAngleTolerance",vm:"1",version:"DICOM"},"(300A,0180)":{tag:"(300A,0180)",vr:"SQ",name:"PatientSetupSequence",vm:"1",version:"DICOM"},"(300A,0182)":{tag:"(300A,0182)",vr:"IS",name:"PatientSetupNumber",vm:"1",version:"DICOM"},"(300A,0183)":{tag:"(300A,0183)",vr:"LO",name:"PatientSetupLabel",vm:"1",version:"DICOM"},"(300A,0184)":{tag:"(300A,0184)",vr:"LO",name:"PatientAdditionalPosition",vm:"1",version:"DICOM"},"(300A,0190)":{tag:"(300A,0190)",vr:"SQ",name:"FixationDeviceSequence",vm:"1",version:"DICOM"},"(300A,0192)":{tag:"(300A,0192)",vr:"CS",name:"FixationDeviceType",vm:"1",version:"DICOM"},"(300A,0194)":{tag:"(300A,0194)",vr:"SH",name:"FixationDeviceLabel",vm:"1",version:"DICOM"},"(300A,0196)":{tag:"(300A,0196)",vr:"ST",name:"FixationDeviceDescription",vm:"1",version:"DICOM"},"(300A,0198)":{tag:"(300A,0198)",vr:"SH",name:"FixationDevicePosition",vm:"1",version:"DICOM"},"(300A,0199)":{tag:"(300A,0199)",vr:"FL",name:"FixationDevicePitchAngle",vm:"1",version:"DICOM"},"(300A,019A)":{tag:"(300A,019A)",vr:"FL",name:"FixationDeviceRollAngle",vm:"1",version:"DICOM"},"(300A,01A0)":{tag:"(300A,01A0)",vr:"SQ",name:"ShieldingDeviceSequence",vm:"1",version:"DICOM"},"(300A,01A2)":{tag:"(300A,01A2)",vr:"CS",name:"ShieldingDeviceType",vm:"1",version:"DICOM"},"(300A,01A4)":{tag:"(300A,01A4)",vr:"SH",name:"ShieldingDeviceLabel",vm:"1",version:"DICOM"},"(300A,01A6)":{tag:"(300A,01A6)",vr:"ST",name:"ShieldingDeviceDescription",vm:"1",version:"DICOM"},"(300A,01A8)":{tag:"(300A,01A8)",vr:"SH",name:"ShieldingDevicePosition",vm:"1",version:"DICOM"},"(300A,01B0)":{tag:"(300A,01B0)",vr:"CS",name:"SetupTechnique",vm:"1",version:"DICOM"},"(300A,01B2)":{tag:"(300A,01B2)",vr:"ST",name:"SetupTechniqueDescription",vm:"1",version:"DICOM"},"(300A,01B4)":{tag:"(300A,01B4)",vr:"SQ",name:"SetupDeviceSequence",vm:"1",version:"DICOM"},"(300A,01B6)":{tag:"(300A,01B6)",vr:"CS",name:"SetupDeviceType",vm:"1",version:"DICOM"},"(300A,01B8)":{tag:"(300A,01B8)",vr:"SH",name:"SetupDeviceLabel",vm:"1",version:"DICOM"},"(300A,01BA)":{tag:"(300A,01BA)",vr:"ST",name:"SetupDeviceDescription",vm:"1",version:"DICOM"},"(300A,01BC)":{tag:"(300A,01BC)",vr:"DS",name:"SetupDeviceParameter",vm:"1",version:"DICOM"},"(300A,01D0)":{tag:"(300A,01D0)",vr:"ST",name:"SetupReferenceDescription",vm:"1",version:"DICOM"},"(300A,01D2)":{tag:"(300A,01D2)",vr:"DS",name:"TableTopVerticalSetupDisplacement",vm:"1",version:"DICOM"},"(300A,01D4)":{tag:"(300A,01D4)",vr:"DS",name:"TableTopLongitudinalSetupDisplacement",vm:"1",version:"DICOM"},"(300A,01D6)":{tag:"(300A,01D6)",vr:"DS",name:"TableTopLateralSetupDisplacement",vm:"1",version:"DICOM"},"(300A,0200)":{tag:"(300A,0200)",vr:"CS",name:"BrachyTreatmentTechnique",vm:"1",version:"DICOM"},"(300A,0202)":{tag:"(300A,0202)",vr:"CS",name:"BrachyTreatmentType",vm:"1",version:"DICOM"},"(300A,0206)":{tag:"(300A,0206)",vr:"SQ",name:"TreatmentMachineSequence",vm:"1",version:"DICOM"},"(300A,0210)":{tag:"(300A,0210)",vr:"SQ",name:"SourceSequence",vm:"1",version:"DICOM"},"(300A,0212)":{tag:"(300A,0212)",vr:"IS",name:"SourceNumber",vm:"1",version:"DICOM"},"(300A,0214)":{tag:"(300A,0214)",vr:"CS",name:"SourceType",vm:"1",version:"DICOM"},"(300A,0216)":{tag:"(300A,0216)",vr:"LO",name:"SourceManufacturer",vm:"1",version:"DICOM"},"(300A,0218)":{tag:"(300A,0218)",vr:"DS",name:"ActiveSourceDiameter",vm:"1",version:"DICOM"},"(300A,021A)":{tag:"(300A,021A)",vr:"DS",name:"ActiveSourceLength",vm:"1",version:"DICOM"},"(300A,021B)":{tag:"(300A,021B)",vr:"SH",name:"SourceModelID",vm:"1",version:"DICOM"},"(300A,021C)":{tag:"(300A,021C)",vr:"LO",name:"SourceDescription",vm:"1",version:"DICOM"},"(300A,0222)":{tag:"(300A,0222)",vr:"DS",name:"SourceEncapsulationNominalThickness",vm:"1",version:"DICOM"},"(300A,0224)":{tag:"(300A,0224)",vr:"DS",name:"SourceEncapsulationNominalTransmission",vm:"1",version:"DICOM"},"(300A,0226)":{tag:"(300A,0226)",vr:"LO",name:"SourceIsotopeName",vm:"1",version:"DICOM"},"(300A,0228)":{tag:"(300A,0228)",vr:"DS",name:"SourceIsotopeHalfLife",vm:"1",version:"DICOM"},"(300A,0229)":{tag:"(300A,0229)",vr:"CS",name:"SourceStrengthUnits",vm:"1",version:"DICOM"},"(300A,022A)":{tag:"(300A,022A)",vr:"DS",name:"ReferenceAirKermaRate",vm:"1",version:"DICOM"},"(300A,022B)":{tag:"(300A,022B)",vr:"DS",name:"SourceStrength",vm:"1",version:"DICOM"},"(300A,022C)":{tag:"(300A,022C)",vr:"DA",name:"SourceStrengthReferenceDate",vm:"1",version:"DICOM"},"(300A,022E)":{tag:"(300A,022E)",vr:"TM",name:"SourceStrengthReferenceTime",vm:"1",version:"DICOM"},"(300A,0230)":{tag:"(300A,0230)",vr:"SQ",name:"ApplicationSetupSequence",vm:"1",version:"DICOM"},"(300A,0232)":{tag:"(300A,0232)",vr:"CS",name:"ApplicationSetupType",vm:"1",version:"DICOM"},"(300A,0234)":{tag:"(300A,0234)",vr:"IS",name:"ApplicationSetupNumber",vm:"1",version:"DICOM"},"(300A,0236)":{tag:"(300A,0236)",vr:"LO",name:"ApplicationSetupName",vm:"1",version:"DICOM"},"(300A,0238)":{tag:"(300A,0238)",vr:"LO",name:"ApplicationSetupManufacturer",vm:"1",version:"DICOM"},"(300A,0240)":{tag:"(300A,0240)",vr:"IS",name:"TemplateNumber",vm:"1",version:"DICOM"},"(300A,0242)":{tag:"(300A,0242)",vr:"SH",name:"TemplateType",vm:"1",version:"DICOM"},"(300A,0244)":{tag:"(300A,0244)",vr:"LO",name:"TemplateName",vm:"1",version:"DICOM"},"(300A,0250)":{tag:"(300A,0250)",vr:"DS",name:"TotalReferenceAirKerma",vm:"1",version:"DICOM"},"(300A,0260)":{tag:"(300A,0260)",vr:"SQ",name:"BrachyAccessoryDeviceSequence",vm:"1",version:"DICOM"},"(300A,0262)":{tag:"(300A,0262)",vr:"IS",name:"BrachyAccessoryDeviceNumber",vm:"1",version:"DICOM"},"(300A,0263)":{tag:"(300A,0263)",vr:"SH",name:"BrachyAccessoryDeviceID",vm:"1",version:"DICOM"},"(300A,0264)":{tag:"(300A,0264)",vr:"CS",name:"BrachyAccessoryDeviceType",vm:"1",version:"DICOM"},"(300A,0266)":{tag:"(300A,0266)",vr:"LO",name:"BrachyAccessoryDeviceName",vm:"1",version:"DICOM"},"(300A,026A)":{tag:"(300A,026A)",vr:"DS",name:"BrachyAccessoryDeviceNominalThickness",vm:"1",version:"DICOM"},"(300A,026C)":{tag:"(300A,026C)",vr:"DS",name:"BrachyAccessoryDeviceNominalTransmission",vm:"1",version:"DICOM"},"(300A,0271)":{tag:"(300A,0271)",vr:"DS",name:"ChannelEffectiveLength",vm:"1",version:"DICOM"},"(300A,0272)":{tag:"(300A,0272)",vr:"DS",name:"ChannelInnerLength",vm:"1",version:"DICOM"},"(300A,0273)":{tag:"(300A,0273)",vr:"SH",name:"AfterloaderChannelID",vm:"1",version:"DICOM"},"(300A,0274)":{tag:"(300A,0274)",vr:"DS",name:"SourceApplicatorTipLength",vm:"1",version:"DICOM"},"(300A,0280)":{tag:"(300A,0280)",vr:"SQ",name:"ChannelSequence",vm:"1",version:"DICOM"},"(300A,0282)":{tag:"(300A,0282)",vr:"IS",name:"ChannelNumber",vm:"1",version:"DICOM"},"(300A,0284)":{tag:"(300A,0284)",vr:"DS",name:"ChannelLength",vm:"1",version:"DICOM"},"(300A,0286)":{tag:"(300A,0286)",vr:"DS",name:"ChannelTotalTime",vm:"1",version:"DICOM"},"(300A,0288)":{tag:"(300A,0288)",vr:"CS",name:"SourceMovementType",vm:"1",version:"DICOM"},"(300A,028A)":{tag:"(300A,028A)",vr:"IS",name:"NumberOfPulses",vm:"1",version:"DICOM"},"(300A,028C)":{tag:"(300A,028C)",vr:"DS",name:"PulseRepetitionInterval",vm:"1",version:"DICOM"},"(300A,0290)":{tag:"(300A,0290)",vr:"IS",name:"SourceApplicatorNumber",vm:"1",version:"DICOM"},"(300A,0291)":{tag:"(300A,0291)",vr:"SH",name:"SourceApplicatorID",vm:"1",version:"DICOM"},"(300A,0292)":{tag:"(300A,0292)",vr:"CS",name:"SourceApplicatorType",vm:"1",version:"DICOM"},"(300A,0294)":{tag:"(300A,0294)",vr:"LO",name:"SourceApplicatorName",vm:"1",version:"DICOM"},"(300A,0296)":{tag:"(300A,0296)",vr:"DS",name:"SourceApplicatorLength",vm:"1",version:"DICOM"},"(300A,0298)":{tag:"(300A,0298)",vr:"LO",name:"SourceApplicatorManufacturer",vm:"1",version:"DICOM"},"(300A,029C)":{tag:"(300A,029C)",vr:"DS",name:"SourceApplicatorWallNominalThickness",vm:"1",version:"DICOM"},"(300A,029E)":{tag:"(300A,029E)",vr:"DS",name:"SourceApplicatorWallNominalTransmission",vm:"1",version:"DICOM"},"(300A,02A0)":{tag:"(300A,02A0)",vr:"DS",name:"SourceApplicatorStepSize",vm:"1",version:"DICOM"},"(300A,02A2)":{tag:"(300A,02A2)",vr:"IS",name:"TransferTubeNumber",vm:"1",version:"DICOM"},"(300A,02A4)":{tag:"(300A,02A4)",vr:"DS",name:"TransferTubeLength",vm:"1",version:"DICOM"},"(300A,02B0)":{tag:"(300A,02B0)",vr:"SQ",name:"ChannelShieldSequence",vm:"1",version:"DICOM"},"(300A,02B2)":{tag:"(300A,02B2)",vr:"IS",name:"ChannelShieldNumber",vm:"1",version:"DICOM"},"(300A,02B3)":{tag:"(300A,02B3)",vr:"SH",name:"ChannelShieldID",vm:"1",version:"DICOM"},"(300A,02B4)":{tag:"(300A,02B4)",vr:"LO",name:"ChannelShieldName",vm:"1",version:"DICOM"},"(300A,02B8)":{tag:"(300A,02B8)",vr:"DS",name:"ChannelShieldNominalThickness",vm:"1",version:"DICOM"},"(300A,02BA)":{tag:"(300A,02BA)",vr:"DS",name:"ChannelShieldNominalTransmission",vm:"1",version:"DICOM"},"(300A,02C8)":{tag:"(300A,02C8)",vr:"DS",name:"FinalCumulativeTimeWeight",vm:"1",version:"DICOM"},"(300A,02D0)":{tag:"(300A,02D0)",vr:"SQ",name:"BrachyControlPointSequence",vm:"1",version:"DICOM"},"(300A,02D2)":{tag:"(300A,02D2)",vr:"DS",name:"ControlPointRelativePosition",vm:"1",version:"DICOM"},"(300A,02D4)":{tag:"(300A,02D4)",vr:"DS",name:"ControlPoint3DPosition",vm:"3",version:"DICOM"},"(300A,02D6)":{tag:"(300A,02D6)",vr:"DS",name:"CumulativeTimeWeight",vm:"1",version:"DICOM"},"(300A,02E0)":{tag:"(300A,02E0)",vr:"CS",name:"CompensatorDivergence",vm:"1",version:"DICOM"},"(300A,02E1)":{tag:"(300A,02E1)",vr:"CS",name:"CompensatorMountingPosition",vm:"1",version:"DICOM"},"(300A,02E2)":{tag:"(300A,02E2)",vr:"DS",name:"SourceToCompensatorDistance",vm:"1-n",version:"DICOM"},"(300A,02E3)":{tag:"(300A,02E3)",vr:"FL",name:"TotalCompensatorTrayWaterEquivalentThickness",vm:"1",version:"DICOM"},"(300A,02E4)":{tag:"(300A,02E4)",vr:"FL",name:"IsocenterToCompensatorTrayDistance",vm:"1",version:"DICOM"},"(300A,02E5)":{tag:"(300A,02E5)",vr:"FL",name:"CompensatorColumnOffset",vm:"1",version:"DICOM"},"(300A,02E6)":{tag:"(300A,02E6)",vr:"FL",name:"IsocenterToCompensatorDistances",vm:"1-n",version:"DICOM"},"(300A,02E7)":{tag:"(300A,02E7)",vr:"FL",name:"CompensatorRelativeStoppingPowerRatio",vm:"1",version:"DICOM"},"(300A,02E8)":{tag:"(300A,02E8)",vr:"FL",name:"CompensatorMillingToolDiameter",vm:"1",version:"DICOM"},"(300A,02EA)":{tag:"(300A,02EA)",vr:"SQ",name:"IonRangeCompensatorSequence",vm:"1",version:"DICOM"},"(300A,02EB)":{tag:"(300A,02EB)",vr:"LT",name:"CompensatorDescription",vm:"1",version:"DICOM"},"(300A,0302)":{tag:"(300A,0302)",vr:"IS",name:"RadiationMassNumber",vm:"1",version:"DICOM"},"(300A,0304)":{tag:"(300A,0304)",vr:"IS",name:"RadiationAtomicNumber",vm:"1",version:"DICOM"},"(300A,0306)":{tag:"(300A,0306)",vr:"SS",name:"RadiationChargeState",vm:"1",version:"DICOM"},"(300A,0308)":{tag:"(300A,0308)",vr:"CS",name:"ScanMode",vm:"1",version:"DICOM"},"(300A,0309)":{tag:"(300A,0309)",vr:"CS",name:"ModulatedScanModeType",vm:"1",version:"DICOM"},"(300A,030A)":{tag:"(300A,030A)",vr:"FL",name:"VirtualSourceAxisDistances",vm:"2",version:"DICOM"},"(300A,030C)":{tag:"(300A,030C)",vr:"SQ",name:"SnoutSequence",vm:"1",version:"DICOM"},"(300A,030D)":{tag:"(300A,030D)",vr:"FL",name:"SnoutPosition",vm:"1",version:"DICOM"},"(300A,030F)":{tag:"(300A,030F)",vr:"SH",name:"SnoutID",vm:"1",version:"DICOM"},"(300A,0312)":{tag:"(300A,0312)",vr:"IS",name:"NumberOfRangeShifters",vm:"1",version:"DICOM"},"(300A,0314)":{tag:"(300A,0314)",vr:"SQ",name:"RangeShifterSequence",vm:"1",version:"DICOM"},"(300A,0316)":{tag:"(300A,0316)",vr:"IS",name:"RangeShifterNumber",vm:"1",version:"DICOM"},"(300A,0318)":{tag:"(300A,0318)",vr:"SH",name:"RangeShifterID",vm:"1",version:"DICOM"},"(300A,0320)":{tag:"(300A,0320)",vr:"CS",name:"RangeShifterType",vm:"1",version:"DICOM"},"(300A,0322)":{tag:"(300A,0322)",vr:"LO",name:"RangeShifterDescription",vm:"1",version:"DICOM"},"(300A,0330)":{tag:"(300A,0330)",vr:"IS",name:"NumberOfLateralSpreadingDevices",vm:"1",version:"DICOM"},"(300A,0332)":{tag:"(300A,0332)",vr:"SQ",name:"LateralSpreadingDeviceSequence",vm:"1",version:"DICOM"},"(300A,0334)":{tag:"(300A,0334)",vr:"IS",name:"LateralSpreadingDeviceNumber",vm:"1",version:"DICOM"},"(300A,0336)":{tag:"(300A,0336)",vr:"SH",name:"LateralSpreadingDeviceID",vm:"1",version:"DICOM"},"(300A,0338)":{tag:"(300A,0338)",vr:"CS",name:"LateralSpreadingDeviceType",vm:"1",version:"DICOM"},"(300A,033A)":{tag:"(300A,033A)",vr:"LO",name:"LateralSpreadingDeviceDescription",vm:"1",version:"DICOM"},"(300A,033C)":{tag:"(300A,033C)",vr:"FL",name:"LateralSpreadingDeviceWaterEquivalentThickness",vm:"1",version:"DICOM"},"(300A,0340)":{tag:"(300A,0340)",vr:"IS",name:"NumberOfRangeModulators",vm:"1",version:"DICOM"},"(300A,0342)":{tag:"(300A,0342)",vr:"SQ",name:"RangeModulatorSequence",vm:"1",version:"DICOM"},"(300A,0344)":{tag:"(300A,0344)",vr:"IS",name:"RangeModulatorNumber",vm:"1",version:"DICOM"},"(300A,0346)":{tag:"(300A,0346)",vr:"SH",name:"RangeModulatorID",vm:"1",version:"DICOM"},"(300A,0348)":{tag:"(300A,0348)",vr:"CS",name:"RangeModulatorType",vm:"1",version:"DICOM"},"(300A,034A)":{tag:"(300A,034A)",vr:"LO",name:"RangeModulatorDescription",vm:"1",version:"DICOM"},"(300A,034C)":{tag:"(300A,034C)",vr:"SH",name:"BeamCurrentModulationID",vm:"1",version:"DICOM"},"(300A,0350)":{tag:"(300A,0350)",vr:"CS",name:"PatientSupportType",vm:"1",version:"DICOM"},"(300A,0352)":{tag:"(300A,0352)",vr:"SH",name:"PatientSupportID",vm:"1",version:"DICOM"},"(300A,0354)":{tag:"(300A,0354)",vr:"LO",name:"PatientSupportAccessoryCode",vm:"1",version:"DICOM"},"(300A,0355)":{tag:"(300A,0355)",vr:"LO",name:"TrayAccessoryCode",vm:"1",version:"DICOM"},"(300A,0356)":{tag:"(300A,0356)",vr:"FL",name:"FixationLightAzimuthalAngle",vm:"1",version:"DICOM"},"(300A,0358)":{tag:"(300A,0358)",vr:"FL",name:"FixationLightPolarAngle",vm:"1",version:"DICOM"},"(300A,035A)":{tag:"(300A,035A)",vr:"FL",name:"MetersetRate",vm:"1",version:"DICOM"},"(300A,0360)":{tag:"(300A,0360)",vr:"SQ",name:"RangeShifterSettingsSequence",vm:"1",version:"DICOM"},"(300A,0362)":{tag:"(300A,0362)",vr:"LO",name:"RangeShifterSetting",vm:"1",version:"DICOM"},"(300A,0364)":{tag:"(300A,0364)",vr:"FL",name:"IsocenterToRangeShifterDistance",vm:"1",version:"DICOM"},"(300A,0366)":{tag:"(300A,0366)",vr:"FL",name:"RangeShifterWaterEquivalentThickness",vm:"1",version:"DICOM"},"(300A,0370)":{tag:"(300A,0370)",vr:"SQ",name:"LateralSpreadingDeviceSettingsSequence",vm:"1",version:"DICOM"},"(300A,0372)":{tag:"(300A,0372)",vr:"LO",name:"LateralSpreadingDeviceSetting",vm:"1",version:"DICOM"},"(300A,0374)":{tag:"(300A,0374)",vr:"FL",name:"IsocenterToLateralSpreadingDeviceDistance",vm:"1",version:"DICOM"},"(300A,0380)":{tag:"(300A,0380)",vr:"SQ",name:"RangeModulatorSettingsSequence",vm:"1",version:"DICOM"},"(300A,0382)":{tag:"(300A,0382)",vr:"FL",name:"RangeModulatorGatingStartValue",vm:"1",version:"DICOM"},"(300A,0384)":{tag:"(300A,0384)",vr:"FL",name:"RangeModulatorGatingStopValue",vm:"1",version:"DICOM"},"(300A,0386)":{tag:"(300A,0386)",vr:"FL",name:"RangeModulatorGatingStartWaterEquivalentThickness",vm:"1",version:"DICOM"},"(300A,0388)":{tag:"(300A,0388)",vr:"FL",name:"RangeModulatorGatingStopWaterEquivalentThickness",vm:"1",version:"DICOM"},"(300A,038A)":{tag:"(300A,038A)",vr:"FL",name:"IsocenterToRangeModulatorDistance",vm:"1",version:"DICOM"},"(300A,038F)":{tag:"(300A,038F)",vr:"FL",name:"ScanSpotTimeOffset",vm:"1-n",version:"DICOM"},"(300A,0390)":{tag:"(300A,0390)",vr:"SH",name:"ScanSpotTuneID",vm:"1",version:"DICOM"},"(300A,0391)":{tag:"(300A,0391)",vr:"IS",name:"ScanSpotPrescribedIndices",vm:"1-n",version:"DICOM"},"(300A,0392)":{tag:"(300A,0392)",vr:"IS",name:"NumberOfScanSpotPositions",vm:"1",version:"DICOM"},"(300A,0393)":{tag:"(300A,0393)",vr:"CS",name:"ScanSpotReordered",vm:"1",version:"DICOM"},"(300A,0394)":{tag:"(300A,0394)",vr:"FL",name:"ScanSpotPositionMap",vm:"1-n",version:"DICOM"},"(300A,0395)":{tag:"(300A,0395)",vr:"CS",name:"ScanSpotReorderingAllowed",vm:"1",version:"DICOM"},"(300A,0396)":{tag:"(300A,0396)",vr:"FL",name:"ScanSpotMetersetWeights",vm:"1-n",version:"DICOM"},"(300A,0398)":{tag:"(300A,0398)",vr:"FL",name:"ScanningSpotSize",vm:"2",version:"DICOM"},"(300A,0399)":{tag:"(300A,0399)",vr:"FL",name:"ScanSpotSizesDelivered",vm:"2-2n",version:"DICOM"},"(300A,039A)":{tag:"(300A,039A)",vr:"IS",name:"NumberOfPaintings",vm:"1",version:"DICOM"},"(300A,03A0)":{tag:"(300A,03A0)",vr:"SQ",name:"IonToleranceTableSequence",vm:"1",version:"DICOM"},"(300A,03A2)":{tag:"(300A,03A2)",vr:"SQ",name:"IonBeamSequence",vm:"1",version:"DICOM"},"(300A,03A4)":{tag:"(300A,03A4)",vr:"SQ",name:"IonBeamLimitingDeviceSequence",vm:"1",version:"DICOM"},"(300A,03A6)":{tag:"(300A,03A6)",vr:"SQ",name:"IonBlockSequence",vm:"1",version:"DICOM"},"(300A,03A8)":{tag:"(300A,03A8)",vr:"SQ",name:"IonControlPointSequence",vm:"1",version:"DICOM"},"(300A,03AA)":{tag:"(300A,03AA)",vr:"SQ",name:"IonWedgeSequence",vm:"1",version:"DICOM"},"(300A,03AC)":{tag:"(300A,03AC)",vr:"SQ",name:"IonWedgePositionSequence",vm:"1",version:"DICOM"},"(300A,0401)":{tag:"(300A,0401)",vr:"SQ",name:"ReferencedSetupImageSequence",vm:"1",version:"DICOM"},"(300A,0402)":{tag:"(300A,0402)",vr:"ST",name:"SetupImageComment",vm:"1",version:"DICOM"},"(300A,0410)":{tag:"(300A,0410)",vr:"SQ",name:"MotionSynchronizationSequence",vm:"1",version:"DICOM"},"(300A,0412)":{tag:"(300A,0412)",vr:"FL",name:"ControlPointOrientation",vm:"3",version:"DICOM"},"(300A,0420)":{tag:"(300A,0420)",vr:"SQ",name:"GeneralAccessorySequence",vm:"1",version:"DICOM"},"(300A,0421)":{tag:"(300A,0421)",vr:"SH",name:"GeneralAccessoryID",vm:"1",version:"DICOM"},"(300A,0422)":{tag:"(300A,0422)",vr:"ST",name:"GeneralAccessoryDescription",vm:"1",version:"DICOM"},"(300A,0423)":{tag:"(300A,0423)",vr:"CS",name:"GeneralAccessoryType",vm:"1",version:"DICOM"},"(300A,0424)":{tag:"(300A,0424)",vr:"IS",name:"GeneralAccessoryNumber",vm:"1",version:"DICOM"},"(300A,0425)":{tag:"(300A,0425)",vr:"FL",name:"SourceToGeneralAccessoryDistance",vm:"1",version:"DICOM"},"(300A,0426)":{tag:"(300A,0426)",vr:"DS",name:"IsocenterToGeneralAccessoryDistance",vm:"1",version:"DICOM"},"(300A,0431)":{tag:"(300A,0431)",vr:"SQ",name:"ApplicatorGeometrySequence",vm:"1",version:"DICOM"},"(300A,0432)":{tag:"(300A,0432)",vr:"CS",name:"ApplicatorApertureShape",vm:"1",version:"DICOM"},"(300A,0433)":{tag:"(300A,0433)",vr:"FL",name:"ApplicatorOpening",vm:"1",version:"DICOM"},"(300A,0434)":{tag:"(300A,0434)",vr:"FL",name:"ApplicatorOpeningX",vm:"1",version:"DICOM"},"(300A,0435)":{tag:"(300A,0435)",vr:"FL",name:"ApplicatorOpeningY",vm:"1",version:"DICOM"},"(300A,0436)":{tag:"(300A,0436)",vr:"FL",name:"SourceToApplicatorMountingPositionDistance",vm:"1",version:"DICOM"},"(300A,0440)":{tag:"(300A,0440)",vr:"IS",name:"NumberOfBlockSlabItems",vm:"1",version:"DICOM"},"(300A,0441)":{tag:"(300A,0441)",vr:"SQ",name:"BlockSlabSequence",vm:"1",version:"DICOM"},"(300A,0442)":{tag:"(300A,0442)",vr:"DS",name:"BlockSlabThickness",vm:"1",version:"DICOM"},"(300A,0443)":{tag:"(300A,0443)",vr:"US",name:"BlockSlabNumber",vm:"1",version:"DICOM"},"(300A,0450)":{tag:"(300A,0450)",vr:"SQ",name:"DeviceMotionControlSequence",vm:"1",version:"DICOM"},"(300A,0451)":{tag:"(300A,0451)",vr:"CS",name:"DeviceMotionExecutionMode",vm:"1",version:"DICOM"},"(300A,0452)":{tag:"(300A,0452)",vr:"CS",name:"DeviceMotionObservationMode",vm:"1",version:"DICOM"},"(300A,0453)":{tag:"(300A,0453)",vr:"SQ",name:"DeviceMotionParameterCodeSequence",vm:"1",version:"DICOM"},"(300A,0501)":{tag:"(300A,0501)",vr:"FL",name:"DistalDepthFraction",vm:"1",version:"DICOM"},"(300A,0502)":{tag:"(300A,0502)",vr:"FL",name:"DistalDepth",vm:"1",version:"DICOM"},"(300A,0503)":{tag:"(300A,0503)",vr:"FL",name:"NominalRangeModulationFractions",vm:"2",version:"DICOM"},"(300A,0504)":{tag:"(300A,0504)",vr:"FL",name:"NominalRangeModulatedRegionDepths",vm:"2",version:"DICOM"},"(300A,0505)":{tag:"(300A,0505)",vr:"SQ",name:"DepthDoseParametersSequence",vm:"1",version:"DICOM"},"(300A,0506)":{tag:"(300A,0506)",vr:"SQ",name:"DeliveredDepthDoseParametersSequence",vm:"1",version:"DICOM"},"(300A,0507)":{tag:"(300A,0507)",vr:"FL",name:"DeliveredDistalDepthFraction",vm:"1",version:"DICOM"},"(300A,0508)":{tag:"(300A,0508)",vr:"FL",name:"DeliveredDistalDepth",vm:"1",version:"DICOM"},"(300A,0509)":{tag:"(300A,0509)",vr:"FL",name:"DeliveredNominalRangeModulationFractions",vm:"2",version:"DICOM"},"(300A,0510)":{tag:"(300A,0510)",vr:"FL",name:"DeliveredNominalRangeModulatedRegionDepths",vm:"2",version:"DICOM"},"(300A,0511)":{tag:"(300A,0511)",vr:"CS",name:"DeliveredReferenceDoseDefinition",vm:"1",version:"DICOM"},"(300A,0512)":{tag:"(300A,0512)",vr:"CS",name:"ReferenceDoseDefinition",vm:"1",version:"DICOM"},"(300A,0600)":{tag:"(300A,0600)",vr:"US",name:"RTControlPointIndex",vm:"1",version:"DICOM"},"(300A,0601)":{tag:"(300A,0601)",vr:"US",name:"RadiationGenerationModeIndex",vm:"1",version:"DICOM"},"(300A,0602)":{tag:"(300A,0602)",vr:"US",name:"ReferencedDefinedDeviceIndex",vm:"1",version:"DICOM"},"(300A,0603)":{tag:"(300A,0603)",vr:"US",name:"RadiationDoseIdentificationIndex",vm:"1",version:"DICOM"},"(300A,0604)":{tag:"(300A,0604)",vr:"US",name:"NumberOfRTControlPoints",vm:"1",version:"DICOM"},"(300A,0605)":{tag:"(300A,0605)",vr:"US",name:"ReferencedRadiationGenerationModeIndex",vm:"1",version:"DICOM"},"(300A,0606)":{tag:"(300A,0606)",vr:"US",name:"TreatmentPositionIndex",vm:"1",version:"DICOM"},"(300A,0607)":{tag:"(300A,0607)",vr:"US",name:"ReferencedDeviceIndex",vm:"1",version:"DICOM"},"(300A,0608)":{tag:"(300A,0608)",vr:"LO",name:"TreatmentPositionGroupLabel",vm:"1",version:"DICOM"},"(300A,0609)":{tag:"(300A,0609)",vr:"UI",name:"TreatmentPositionGroupUID",vm:"1",version:"DICOM"},"(300A,060A)":{tag:"(300A,060A)",vr:"SQ",name:"TreatmentPositionGroupSequence",vm:"1",version:"DICOM"},"(300A,060B)":{tag:"(300A,060B)",vr:"US",name:"ReferencedTreatmentPositionIndex",vm:"1",version:"DICOM"},"(300A,060C)":{tag:"(300A,060C)",vr:"US",name:"ReferencedRadiationDoseIdentificationIndex",vm:"1",version:"DICOM"},"(300A,060D)":{tag:"(300A,060D)",vr:"FD",name:"RTAccessoryHolderWaterEquivalentThickness",vm:"1",version:"DICOM"},"(300A,060E)":{tag:"(300A,060E)",vr:"US",name:"ReferencedRTAccessoryHolderDeviceIndex",vm:"1",version:"DICOM"},"(300A,060F)":{tag:"(300A,060F)",vr:"CS",name:"RTAccessoryHolderSlotExistenceFlag",vm:"1",version:"DICOM"},"(300A,0610)":{tag:"(300A,0610)",vr:"SQ",name:"RTAccessoryHolderSlotSequence",vm:"1",version:"DICOM"},"(300A,0611)":{tag:"(300A,0611)",vr:"LO",name:"RTAccessoryHolderSlotID",vm:"1",version:"DICOM"},"(300A,0612)":{tag:"(300A,0612)",vr:"FD",name:"RTAccessoryHolderSlotDistance",vm:"1",version:"DICOM"},"(300A,0613)":{tag:"(300A,0613)",vr:"FD",name:"RTAccessorySlotDistance",vm:"1",version:"DICOM"},"(300A,0614)":{tag:"(300A,0614)",vr:"SQ",name:"RTAccessoryHolderDefinitionSequence",vm:"1",version:"DICOM"},"(300A,0615)":{tag:"(300A,0615)",vr:"LO",name:"RTAccessoryDeviceSlotID",vm:"1",version:"DICOM"},"(300A,0616)":{tag:"(300A,0616)",vr:"SQ",name:"RTRadiationSequence",vm:"1",version:"DICOM"},"(300A,0617)":{tag:"(300A,0617)",vr:"SQ",name:"RadiationDoseSequence",vm:"1",version:"DICOM"},"(300A,0618)":{tag:"(300A,0618)",vr:"SQ",name:"RadiationDoseIdentificationSequence",vm:"1",version:"DICOM"},"(300A,0619)":{tag:"(300A,0619)",vr:"LO",name:"RadiationDoseIdentificationLabel",vm:"1",version:"DICOM"},"(300A,061A)":{tag:"(300A,061A)",vr:"CS",name:"ReferenceDoseType",vm:"1",version:"DICOM"},"(300A,061B)":{tag:"(300A,061B)",vr:"CS",name:"PrimaryDoseValueIndicator",vm:"1",version:"DICOM"},"(300A,061C)":{tag:"(300A,061C)",vr:"SQ",name:"DoseValuesSequence",vm:"1",version:"DICOM"},"(300A,061D)":{tag:"(300A,061D)",vr:"CS",name:"DoseValuePurpose",vm:"1-n",version:"DICOM"},"(300A,061E)":{tag:"(300A,061E)",vr:"FD",name:"ReferenceDosePointCoordinates",vm:"3",version:"DICOM"},"(300A,061F)":{tag:"(300A,061F)",vr:"SQ",name:"RadiationDoseValuesParametersSequence",vm:"1",version:"DICOM"},"(300A,0620)":{tag:"(300A,0620)",vr:"SQ",name:"MetersetToDoseMappingSequence",vm:"1",version:"DICOM"},"(300A,0621)":{tag:"(300A,0621)",vr:"SQ",name:"ExpectedInVivoMeasurementValuesSequence",vm:"1",version:"DICOM"},"(300A,0622)":{tag:"(300A,0622)",vr:"US",name:"ExpectedInVivoMeasurementValueIndex",vm:"1",version:"DICOM"},"(300A,0623)":{tag:"(300A,0623)",vr:"LO",name:"RadiationDoseInVivoMeasurementLabel",vm:"1",version:"DICOM"},"(300A,0624)":{tag:"(300A,0624)",vr:"FD",name:"RadiationDoseCentralAxisDisplacement",vm:"2",version:"DICOM"},"(300A,0625)":{tag:"(300A,0625)",vr:"FD",name:"RadiationDoseValue",vm:"1",version:"DICOM"},"(300A,0626)":{tag:"(300A,0626)",vr:"FD",name:"RadiationDoseSourceToSkinDistance",vm:"1",version:"DICOM"},"(300A,0627)":{tag:"(300A,0627)",vr:"FD",name:"RadiationDoseMeasurementPointCoordinates",vm:"3",version:"DICOM"},"(300A,0628)":{tag:"(300A,0628)",vr:"FD",name:"RadiationDoseSourceToExternalContourDistance",vm:"1",version:"DICOM"},"(300A,0629)":{tag:"(300A,0629)",vr:"SQ",name:"RTToleranceSetSequence",vm:"1",version:"DICOM"},"(300A,062A)":{tag:"(300A,062A)",vr:"LO",name:"RTToleranceSetLabel",vm:"1",version:"DICOM"},"(300A,062B)":{tag:"(300A,062B)",vr:"SQ",name:"AttributeToleranceValuesSequence",vm:"1",version:"DICOM"},"(300A,062C)":{tag:"(300A,062C)",vr:"FD",name:"ToleranceValue",vm:"1",version:"DICOM"},"(300A,062D)":{tag:"(300A,062D)",vr:"SQ",name:"PatientSupportPositionToleranceSequence",vm:"1",version:"DICOM"},"(300A,062E)":{tag:"(300A,062E)",vr:"FD",name:"TreatmentTimeLimit",vm:"1",version:"DICOM"},"(300A,062F)":{tag:"(300A,062F)",vr:"SQ",name:"CArmPhotonElectronControlPointSequence",vm:"1",version:"DICOM"},"(300A,0630)":{tag:"(300A,0630)",vr:"SQ",name:"ReferencedRTRadiationSequence",vm:"1",version:"DICOM"},"(300A,0631)":{tag:"(300A,0631)",vr:"SQ",name:"ReferencedRTInstanceSequence",vm:"1",version:"DICOM"},"(300A,0632)":{tag:"(300A,0632)",vr:"SQ",name:"ReferencedRTPatientSetupSequence",vm:"1",version:"DICOM"},"(300A,0634)":{tag:"(300A,0634)",vr:"FD",name:"SourceToPatientSurfaceDistance",vm:"1",version:"DICOM"},"(300A,0635)":{tag:"(300A,0635)",vr:"SQ",name:"TreatmentMachineSpecialModeCodeSequence",vm:"1",version:"DICOM"},"(300A,0636)":{tag:"(300A,0636)",vr:"US",name:"IntendedNumberOfFractions",vm:"1",version:"DICOM"},"(300A,0637)":{tag:"(300A,0637)",vr:"CS",name:"RTRadiationSetIntent",vm:"1",version:"DICOM"},"(300A,0638)":{tag:"(300A,0638)",vr:"CS",name:"RTRadiationPhysicalAndGeometricContentDetailFlag",vm:"1",version:"DICOM"},"(300A,0639)":{tag:"(300A,0639)",vr:"CS",name:"RTRecordFlag",vm:"1",version:"DICOM"},"(300A,063A)":{tag:"(300A,063A)",vr:"SQ",name:"TreatmentDeviceIdentificationSequence",vm:"1",version:"DICOM"},"(300A,063B)":{tag:"(300A,063B)",vr:"SQ",name:"ReferencedRTPhysicianIntentSequence",vm:"1",version:"DICOM"},"(300A,063C)":{tag:"(300A,063C)",vr:"FD",name:"CumulativeMeterset",vm:"1",version:"DICOM"},"(300A,063D)":{tag:"(300A,063D)",vr:"FD",name:"DeliveryRate",vm:"1",version:"DICOM"},"(300A,063E)":{tag:"(300A,063E)",vr:"SQ",name:"DeliveryRateUnitSequence",vm:"1",version:"DICOM"},"(300A,063F)":{tag:"(300A,063F)",vr:"SQ",name:"TreatmentPositionSequence",vm:"1",version:"DICOM"},"(300A,0640)":{tag:"(300A,0640)",vr:"FD",name:"RadiationSourceAxisDistance",vm:"1",version:"DICOM"},"(300A,0641)":{tag:"(300A,0641)",vr:"US",name:"NumberOfRTBeamLimitingDevices",vm:"1",version:"DICOM"},"(300A,0642)":{tag:"(300A,0642)",vr:"FD",name:"RTBeamLimitingDeviceProximalDistance",vm:"1",version:"DICOM"},"(300A,0643)":{tag:"(300A,0643)",vr:"FD",name:"RTBeamLimitingDeviceDistalDistance",vm:"1",version:"DICOM"},"(300A,0644)":{tag:"(300A,0644)",vr:"SQ",name:"ParallelRTBeamDelimiterDeviceOrientationLabelCodeSequence",vm:"1",version:"DICOM"},"(300A,0645)":{tag:"(300A,0645)",vr:"FD",name:"BeamModifierOrientationAngle",vm:"1",version:"DICOM"},"(300A,0646)":{tag:"(300A,0646)",vr:"SQ",name:"FixedRTBeamDelimiterDeviceSequence",vm:"1",version:"DICOM"},"(300A,0647)":{tag:"(300A,0647)",vr:"SQ",name:"ParallelRTBeamDelimiterDeviceSequence",vm:"1",version:"DICOM"},"(300A,0648)":{tag:"(300A,0648)",vr:"US",name:"NumberOfParallelRTBeamDelimiters",vm:"1",version:"DICOM"},"(300A,0649)":{tag:"(300A,0649)",vr:"FD",name:"ParallelRTBeamDelimiterBoundaries",vm:"2-n",version:"DICOM"},"(300A,064A)":{tag:"(300A,064A)",vr:"FD",name:"ParallelRTBeamDelimiterPositions",vm:"2-n",version:"DICOM"},"(300A,064B)":{tag:"(300A,064B)",vr:"FD",name:"RTBeamLimitingDeviceOffset",vm:"2",version:"DICOM"},"(300A,064C)":{tag:"(300A,064C)",vr:"SQ",name:"RTBeamDelimiterGeometrySequence",vm:"1",version:"DICOM"},"(300A,064D)":{tag:"(300A,064D)",vr:"SQ",name:"RTBeamLimitingDeviceDefinitionSequence",vm:"1",version:"DICOM"},"(300A,064E)":{tag:"(300A,064E)",vr:"CS",name:"ParallelRTBeamDelimiterOpeningMode",vm:"1",version:"DICOM"},"(300A,064F)":{tag:"(300A,064F)",vr:"CS",name:"ParallelRTBeamDelimiterLeafMountingSide",vm:"1-n",version:"DICOM"},"(300A,0650)":{tag:"(300A,0650)",vr:"UI",name:"PatientSetupUID",vm:"1",version:"DICOM"},"(300A,0651)":{tag:"(300A,0651)",vr:"SQ",name:"WedgeDefinitionSequence",vm:"1",version:"DICOM"},"(300A,0652)":{tag:"(300A,0652)",vr:"FD",name:"RadiationBeamWedgeAngle",vm:"1",version:"DICOM"},"(300A,0653)":{tag:"(300A,0653)",vr:"FD",name:"RadiationBeamWedgeThinEdgeDistance",vm:"1",version:"DICOM"},"(300A,0654)":{tag:"(300A,0654)",vr:"FD",name:"RadiationBeamEffectiveWedgeAngle",vm:"1",version:"DICOM"},"(300A,0655)":{tag:"(300A,0655)",vr:"US",name:"NumberOfWedgePositions",vm:"1",version:"DICOM"},"(300A,0656)":{tag:"(300A,0656)",vr:"SQ",name:"RTBeamLimitingDeviceOpeningSequence",vm:"1",version:"DICOM"},"(300A,0657)":{tag:"(300A,0657)",vr:"US",name:"NumberOfRTBeamLimitingDeviceOpenings",vm:"1",version:"DICOM"},"(300A,0658)":{tag:"(300A,0658)",vr:"SQ",name:"RadiationDosimeterUnitSequence",vm:"1",version:"DICOM"},"(300A,0659)":{tag:"(300A,0659)",vr:"SQ",name:"RTDeviceDistanceReferenceLocationCodeSequence",vm:"1",version:"DICOM"},"(300A,065A)":{tag:"(300A,065A)",vr:"SQ",name:"RadiationDeviceConfigurationAndCommissioningKeySequence",vm:"1",version:"DICOM"},"(300A,065B)":{tag:"(300A,065B)",vr:"SQ",name:"PatientSupportPositionParameterSequence",vm:"1",version:"DICOM"},"(300A,065C)":{tag:"(300A,065C)",vr:"CS",name:"PatientSupportPositionSpecificationMethod",vm:"1",version:"DICOM"},"(300A,065D)":{tag:"(300A,065D)",vr:"SQ",name:"PatientSupportPositionDeviceParameterSequence",vm:"1",version:"DICOM"},"(300A,065E)":{tag:"(300A,065E)",vr:"US",name:"DeviceOrderIndex",vm:"1",version:"DICOM"},"(300A,065F)":{tag:"(300A,065F)",vr:"US",name:"PatientSupportPositionParameterOrderIndex",vm:"1",version:"DICOM"},"(300A,0660)":{tag:"(300A,0660)",vr:"SQ",name:"PatientSupportPositionDeviceToleranceSequence",vm:"1",version:"DICOM"},"(300A,0661)":{tag:"(300A,0661)",vr:"US",name:"PatientSupportPositionToleranceOrderIndex",vm:"1",version:"DICOM"},"(300A,0662)":{tag:"(300A,0662)",vr:"SQ",name:"CompensatorDefinitionSequence",vm:"1",version:"DICOM"},"(300A,0663)":{tag:"(300A,0663)",vr:"CS",name:"CompensatorMapOrientation",vm:"1",version:"DICOM"},"(300A,0664)":{tag:"(300A,0664)",vr:"OF",name:"CompensatorProximalThicknessMap",vm:"1",version:"DICOM"},"(300A,0665)":{tag:"(300A,0665)",vr:"OF",name:"CompensatorDistalThicknessMap",vm:"1",version:"DICOM"},"(300A,0666)":{tag:"(300A,0666)",vr:"FD",name:"CompensatorBasePlaneOffset",vm:"1",version:"DICOM"},"(300A,0667)":{tag:"(300A,0667)",vr:"SQ",name:"CompensatorShapeFabricationCodeSequence",vm:"1",version:"DICOM"},"(300A,0668)":{tag:"(300A,0668)",vr:"SQ",name:"CompensatorShapeSequence",vm:"1",version:"DICOM"},"(300A,0669)":{tag:"(300A,0669)",vr:"FD",name:"RadiationBeamCompensatorMillingToolDiameter",vm:"1",version:"DICOM"},"(300A,066A)":{tag:"(300A,066A)",vr:"SQ",name:"BlockDefinitionSequence",vm:"1",version:"DICOM"},"(300A,066B)":{tag:"(300A,066B)",vr:"OF",name:"BlockEdgeData",vm:"1",version:"DICOM"},"(300A,066C)":{tag:"(300A,066C)",vr:"CS",name:"BlockOrientation",vm:"1",version:"DICOM"},"(300A,066D)":{tag:"(300A,066D)",vr:"FD",name:"RadiationBeamBlockThickness",vm:"1",version:"DICOM"},"(300A,066E)":{tag:"(300A,066E)",vr:"FD",name:"RadiationBeamBlockSlabThickness",vm:"1",version:"DICOM"},"(300A,066F)":{tag:"(300A,066F)",vr:"SQ",name:"BlockEdgeDataSequence",vm:"1",version:"DICOM"},"(300A,0670)":{tag:"(300A,0670)",vr:"US",name:"NumberOfRTAccessoryHolders",vm:"1",version:"DICOM"},"(300A,0671)":{tag:"(300A,0671)",vr:"SQ",name:"GeneralAccessoryDefinitionSequence",vm:"1",version:"DICOM"},"(300A,0672)":{tag:"(300A,0672)",vr:"US",name:"NumberOfGeneralAccessories",vm:"1",version:"DICOM"},"(300A,0673)":{tag:"(300A,0673)",vr:"SQ",name:"BolusDefinitionSequence",vm:"1",version:"DICOM"},"(300A,0674)":{tag:"(300A,0674)",vr:"US",name:"NumberOfBoluses",vm:"1",version:"DICOM"},"(300A,0675)":{tag:"(300A,0675)",vr:"UI",name:"EquipmentFrameOfReferenceUID",vm:"1",version:"DICOM"},"(300A,0676)":{tag:"(300A,0676)",vr:"ST",name:"EquipmentFrameOfReferenceDescription",vm:"1",version:"DICOM"},"(300A,0677)":{tag:"(300A,0677)",vr:"SQ",name:"EquipmentReferencePointCoordinatesSequence",vm:"1",version:"DICOM"},"(300A,0678)":{tag:"(300A,0678)",vr:"SQ",name:"EquipmentReferencePointCodeSequence",vm:"1",version:"DICOM"},"(300A,0679)":{tag:"(300A,0679)",vr:"FD",name:"RTBeamLimitingDeviceAngle",vm:"1",version:"DICOM"},"(300A,067A)":{tag:"(300A,067A)",vr:"FD",name:"SourceRollAngle",vm:"1",version:"DICOM"},"(300A,067B)":{tag:"(300A,067B)",vr:"SQ",name:"RadiationGenerationModeSequence",vm:"1",version:"DICOM"},"(300A,067C)":{tag:"(300A,067C)",vr:"SH",name:"RadiationGenerationModeLabel",vm:"1",version:"DICOM"},"(300A,067D)":{tag:"(300A,067D)",vr:"ST",name:"RadiationGenerationModeDescription",vm:"1",version:"DICOM"},"(300A,067E)":{tag:"(300A,067E)",vr:"SQ",name:"RadiationGenerationModeMachineCodeSequence",vm:"1",version:"DICOM"},"(300A,067F)":{tag:"(300A,067F)",vr:"SQ",name:"RadiationTypeCodeSequence",vm:"1",version:"DICOM"},"(300A,0680)":{tag:"(300A,0680)",vr:"DS",name:"NominalEnergy",vm:"1",version:"DICOM"},"(300A,0681)":{tag:"(300A,0681)",vr:"DS",name:"MinimumNominalEnergy",vm:"1",version:"DICOM"},"(300A,0682)":{tag:"(300A,0682)",vr:"DS",name:"MaximumNominalEnergy",vm:"1",version:"DICOM"},"(300A,0683)":{tag:"(300A,0683)",vr:"SQ",name:"RadiationFluenceModifierCodeSequence",vm:"1",version:"DICOM"},"(300A,0684)":{tag:"(300A,0684)",vr:"SQ",name:"EnergyUnitCodeSequence",vm:"1",version:"DICOM"},"(300A,0685)":{tag:"(300A,0685)",vr:"US",name:"NumberOfRadiationGenerationModes",vm:"1",version:"DICOM"},"(300A,0686)":{tag:"(300A,0686)",vr:"SQ",name:"PatientSupportDevicesSequence",vm:"1",version:"DICOM"},"(300A,0687)":{tag:"(300A,0687)",vr:"US",name:"NumberOfPatientSupportDevices",vm:"1",version:"DICOM"},"(300A,0688)":{tag:"(300A,0688)",vr:"FD",name:"RTBeamModifierDefinitionDistance",vm:"1",version:"DICOM"},"(300A,0689)":{tag:"(300A,0689)",vr:"SQ",name:"BeamAreaLimitSequence",vm:"1",version:"DICOM"},"(300A,068A)":{tag:"(300A,068A)",vr:"SQ",name:"ReferencedRTPrescriptionSequence",vm:"1",version:"DICOM"},"(300A,0700)":{tag:"(300A,0700)",vr:"UI",name:"TreatmentSessionUID",vm:"1",version:"DICOM"},"(300A,0701)":{tag:"(300A,0701)",vr:"CS",name:"RTRadiationUsage",vm:"1",version:"DICOM"},"(300A,0702)":{tag:"(300A,0702)",vr:"SQ",name:"ReferencedRTRadiationSetSequence",vm:"1",version:"DICOM"},"(300A,0703)":{tag:"(300A,0703)",vr:"SQ",name:"ReferencedRTRadiationRecordSequence",vm:"1",version:"DICOM"},"(300A,0704)":{tag:"(300A,0704)",vr:"US",name:"RTRadiationSetDeliveryNumber",vm:"1",version:"DICOM"},"(300A,0705)":{tag:"(300A,0705)",vr:"US",name:"ClinicalFractionNumber",vm:"1",version:"DICOM"},"(300A,0706)":{tag:"(300A,0706)",vr:"CS",name:"RTTreatmentFractionCompletionStatus",vm:"1",version:"DICOM"},"(300A,0707)":{tag:"(300A,0707)",vr:"CS",name:"RTRadiationSetUsage",vm:"1",version:"DICOM"},"(300A,0708)":{tag:"(300A,0708)",vr:"CS",name:"TreatmentDeliveryContinuationFlag",vm:"1",version:"DICOM"},"(300A,0709)":{tag:"(300A,0709)",vr:"CS",name:"TreatmentRecordContentOrigin",vm:"1",version:"DICOM"},"(300A,0714)":{tag:"(300A,0714)",vr:"CS",name:"RTTreatmentTerminationStatus",vm:"1",version:"DICOM"},"(300A,0715)":{tag:"(300A,0715)",vr:"SQ",name:"RTTreatmentTerminationReasonCodeSequence",vm:"1",version:"DICOM"},"(300A,0716)":{tag:"(300A,0716)",vr:"SQ",name:"MachineSpecificTreatmentTerminationCodeSequence",vm:"1",version:"DICOM"},"(300A,0722)":{tag:"(300A,0722)",vr:"SQ",name:"RTRadiationSalvageRecordControlPointSequence",vm:"1",version:"DICOM"},"(300A,0723)":{tag:"(300A,0723)",vr:"CS",name:"StartingMetersetValueKnownFlag",vm:"1",version:"DICOM"},"(300A,0730)":{tag:"(300A,0730)",vr:"ST",name:"TreatmentTerminationDescription",vm:"1",version:"DICOM"},"(300A,0731)":{tag:"(300A,0731)",vr:"SQ",name:"TreatmentToleranceViolationSequence",vm:"1",version:"DICOM"},"(300A,0732)":{tag:"(300A,0732)",vr:"CS",name:"TreatmentToleranceViolationCategory",vm:"1",version:"DICOM"},"(300A,0733)":{tag:"(300A,0733)",vr:"SQ",name:"TreatmentToleranceViolationAttributeSequence",vm:"1",version:"DICOM"},"(300A,0734)":{tag:"(300A,0734)",vr:"ST",name:"TreatmentToleranceViolationDescription",vm:"1",version:"DICOM"},"(300A,0735)":{tag:"(300A,0735)",vr:"ST",name:"TreatmentToleranceViolationIdentification",vm:"1",version:"DICOM"},"(300A,0736)":{tag:"(300A,0736)",vr:"DT",name:"TreatmentToleranceViolationDateTime",vm:"1",version:"DICOM"},"(300A,073A)":{tag:"(300A,073A)",vr:"DT",name:"RecordedRTControlPointDateTime",vm:"1",version:"DICOM"},"(300A,073B)":{tag:"(300A,073B)",vr:"US",name:"ReferencedRadiationRTControlPointIndex",vm:"1",version:"DICOM"},"(300A,073E)":{tag:"(300A,073E)",vr:"SQ",name:"AlternateValueSequence",vm:"1",version:"DICOM"},"(300A,073F)":{tag:"(300A,073F)",vr:"SQ",name:"ConfirmationSequence",vm:"1",version:"DICOM"},"(300A,0740)":{tag:"(300A,0740)",vr:"SQ",name:"InterlockSequence",vm:"1",version:"DICOM"},"(300A,0741)":{tag:"(300A,0741)",vr:"DT",name:"InterlockDateTime",vm:"1",version:"DICOM"},"(300A,0742)":{tag:"(300A,0742)",vr:"ST",name:"InterlockDescription",vm:"1",version:"DICOM"},"(300A,0743)":{tag:"(300A,0743)",vr:"SQ",name:"InterlockOriginatingDeviceSequence",vm:"1",version:"DICOM"},"(300A,0744)":{tag:"(300A,0744)",vr:"SQ",name:"InterlockCodeSequence",vm:"1",version:"DICOM"},"(300A,0745)":{tag:"(300A,0745)",vr:"SQ",name:"InterlockResolutionCodeSequence",vm:"1",version:"DICOM"},"(300A,0746)":{tag:"(300A,0746)",vr:"SQ",name:"InterlockResolutionUserSequence",vm:"1",version:"DICOM"},"(300A,0760)":{tag:"(300A,0760)",vr:"DT",name:"OverrideDateTime",vm:"1",version:"DICOM"},"(300A,0761)":{tag:"(300A,0761)",vr:"SQ",name:"TreatmentToleranceViolationTypeCodeSequence",vm:"1",version:"DICOM"},"(300A,0762)":{tag:"(300A,0762)",vr:"SQ",name:"TreatmentToleranceViolationCauseCodeSequence",vm:"1",version:"DICOM"},"(300A,0772)":{tag:"(300A,0772)",vr:"SQ",name:"MeasuredMetersetToDoseMappingSequence",vm:"1",version:"DICOM"},"(300A,0773)":{tag:"(300A,0773)",vr:"US",name:"ReferencedExpectedInVivoMeasurementValueIndex",vm:"1",version:"DICOM"},"(300A,0774)":{tag:"(300A,0774)",vr:"SQ",name:"DoseMeasurementDeviceCodeSequence",vm:"1",version:"DICOM"},"(300A,0780)":{tag:"(300A,0780)",vr:"SQ",name:"AdditionalParameterRecordingInstanceSequence",vm:"1",version:"DICOM"},"(300A,0783)":{tag:"(300A,0783)",vr:"ST",name:"InterlockOriginDescription",vm:"1",version:"DICOM"},"(300C,0002)":{tag:"(300C,0002)",vr:"SQ",name:"ReferencedRTPlanSequence",vm:"1",version:"DICOM"},"(300C,0004)":{tag:"(300C,0004)",vr:"SQ",name:"ReferencedBeamSequence",vm:"1",version:"DICOM"},"(300C,0006)":{tag:"(300C,0006)",vr:"IS",name:"ReferencedBeamNumber",vm:"1",version:"DICOM"},"(300C,0007)":{tag:"(300C,0007)",vr:"IS",name:"ReferencedReferenceImageNumber",vm:"1",version:"DICOM"},"(300C,0008)":{tag:"(300C,0008)",vr:"DS",name:"StartCumulativeMetersetWeight",vm:"1",version:"DICOM"},"(300C,0009)":{tag:"(300C,0009)",vr:"DS",name:"EndCumulativeMetersetWeight",vm:"1",version:"DICOM"},"(300C,000A)":{tag:"(300C,000A)",vr:"SQ",name:"ReferencedBrachyApplicationSetupSequence",vm:"1",version:"DICOM"},"(300C,000C)":{tag:"(300C,000C)",vr:"IS",name:"ReferencedBrachyApplicationSetupNumber",vm:"1",version:"DICOM"},"(300C,000E)":{tag:"(300C,000E)",vr:"IS",name:"ReferencedSourceNumber",vm:"1",version:"DICOM"},"(300C,0020)":{tag:"(300C,0020)",vr:"SQ",name:"ReferencedFractionGroupSequence",vm:"1",version:"DICOM"},"(300C,0022)":{tag:"(300C,0022)",vr:"IS",name:"ReferencedFractionGroupNumber",vm:"1",version:"DICOM"},"(300C,0040)":{tag:"(300C,0040)",vr:"SQ",name:"ReferencedVerificationImageSequence",vm:"1",version:"DICOM"},"(300C,0042)":{tag:"(300C,0042)",vr:"SQ",name:"ReferencedReferenceImageSequence",vm:"1",version:"DICOM"},"(300C,0050)":{tag:"(300C,0050)",vr:"SQ",name:"ReferencedDoseReferenceSequence",vm:"1",version:"DICOM"},"(300C,0051)":{tag:"(300C,0051)",vr:"IS",name:"ReferencedDoseReferenceNumber",vm:"1",version:"DICOM"},"(300C,0055)":{tag:"(300C,0055)",vr:"SQ",name:"BrachyReferencedDoseReferenceSequence",vm:"1",version:"DICOM"},"(300C,0060)":{tag:"(300C,0060)",vr:"SQ",name:"ReferencedStructureSetSequence",vm:"1",version:"DICOM"},"(300C,006A)":{tag:"(300C,006A)",vr:"IS",name:"ReferencedPatientSetupNumber",vm:"1",version:"DICOM"},"(300C,0080)":{tag:"(300C,0080)",vr:"SQ",name:"ReferencedDoseSequence",vm:"1",version:"DICOM"},"(300C,00A0)":{tag:"(300C,00A0)",vr:"IS",name:"ReferencedToleranceTableNumber",vm:"1",version:"DICOM"},"(300C,00B0)":{tag:"(300C,00B0)",vr:"SQ",name:"ReferencedBolusSequence",vm:"1",version:"DICOM"},"(300C,00C0)":{tag:"(300C,00C0)",vr:"IS",name:"ReferencedWedgeNumber",vm:"1",version:"DICOM"},"(300C,00D0)":{tag:"(300C,00D0)",vr:"IS",name:"ReferencedCompensatorNumber",vm:"1",version:"DICOM"},"(300C,00E0)":{tag:"(300C,00E0)",vr:"IS",name:"ReferencedBlockNumber",vm:"1",version:"DICOM"},"(300C,00F0)":{tag:"(300C,00F0)",vr:"IS",name:"ReferencedControlPointIndex",vm:"1",version:"DICOM"},"(300C,00F2)":{tag:"(300C,00F2)",vr:"SQ",name:"ReferencedControlPointSequence",vm:"1",version:"DICOM"},"(300C,00F4)":{tag:"(300C,00F4)",vr:"IS",name:"ReferencedStartControlPointIndex",vm:"1",version:"DICOM"},"(300C,00F6)":{tag:"(300C,00F6)",vr:"IS",name:"ReferencedStopControlPointIndex",vm:"1",version:"DICOM"},"(300C,0100)":{tag:"(300C,0100)",vr:"IS",name:"ReferencedRangeShifterNumber",vm:"1",version:"DICOM"},"(300C,0102)":{tag:"(300C,0102)",vr:"IS",name:"ReferencedLateralSpreadingDeviceNumber",vm:"1",version:"DICOM"},"(300C,0104)":{tag:"(300C,0104)",vr:"IS",name:"ReferencedRangeModulatorNumber",vm:"1",version:"DICOM"},"(300C,0111)":{tag:"(300C,0111)",vr:"SQ",name:"OmittedBeamTaskSequence",vm:"1",version:"DICOM"},"(300C,0112)":{tag:"(300C,0112)",vr:"CS",name:"ReasonForOmission",vm:"1",version:"DICOM"},"(300C,0113)":{tag:"(300C,0113)",vr:"LO",name:"ReasonForOmissionDescription",vm:"1",version:"DICOM"},"(300E,0002)":{tag:"(300E,0002)",vr:"CS",name:"ApprovalStatus",vm:"1",version:"DICOM"},"(300E,0004)":{tag:"(300E,0004)",vr:"DA",name:"ReviewDate",vm:"1",version:"DICOM"},"(300E,0005)":{tag:"(300E,0005)",vr:"TM",name:"ReviewTime",vm:"1",version:"DICOM"},"(300E,0008)":{tag:"(300E,0008)",vr:"PN",name:"ReviewerName",vm:"1",version:"DICOM"},"(4010,0001)":{tag:"(4010,0001)",vr:"CS",name:"LowEnergyDetectors",vm:"1",version:"DICOM/DICOS"},"(4010,0002)":{tag:"(4010,0002)",vr:"CS",name:"HighEnergyDetectors",vm:"1",version:"DICOM/DICOS"},"(4010,0004)":{tag:"(4010,0004)",vr:"SQ",name:"DetectorGeometrySequence",vm:"1",version:"DICOM/DICOS"},"(4010,1001)":{tag:"(4010,1001)",vr:"SQ",name:"ThreatROIVoxelSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1004)":{tag:"(4010,1004)",vr:"FL",name:"ThreatROIBase",vm:"3",version:"DICOM/DICOS"},"(4010,1005)":{tag:"(4010,1005)",vr:"FL",name:"ThreatROIExtents",vm:"3",version:"DICOM/DICOS"},"(4010,1006)":{tag:"(4010,1006)",vr:"OB",name:"ThreatROIBitmap",vm:"1",version:"DICOM/DICOS"},"(4010,1007)":{tag:"(4010,1007)",vr:"SH",name:"RouteSegmentID",vm:"1",version:"DICOM/DICOS"},"(4010,1008)":{tag:"(4010,1008)",vr:"CS",name:"GantryType",vm:"1",version:"DICOM/DICOS"},"(4010,1009)":{tag:"(4010,1009)",vr:"CS",name:"OOIOwnerType",vm:"1",version:"DICOM/DICOS"},"(4010,100A)":{tag:"(4010,100A)",vr:"SQ",name:"RouteSegmentSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1010)":{tag:"(4010,1010)",vr:"US",name:"PotentialThreatObjectID",vm:"1",version:"DICOM/DICOS"},"(4010,1011)":{tag:"(4010,1011)",vr:"SQ",name:"ThreatSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1012)":{tag:"(4010,1012)",vr:"CS",name:"ThreatCategory",vm:"1",version:"DICOM/DICOS"},"(4010,1013)":{tag:"(4010,1013)",vr:"LT",name:"ThreatCategoryDescription",vm:"1",version:"DICOM/DICOS"},"(4010,1014)":{tag:"(4010,1014)",vr:"CS",name:"ATDAbilityAssessment",vm:"1",version:"DICOM/DICOS"},"(4010,1015)":{tag:"(4010,1015)",vr:"CS",name:"ATDAssessmentFlag",vm:"1",version:"DICOM/DICOS"},"(4010,1016)":{tag:"(4010,1016)",vr:"FL",name:"ATDAssessmentProbability",vm:"1",version:"DICOM/DICOS"},"(4010,1017)":{tag:"(4010,1017)",vr:"FL",name:"Mass",vm:"1",version:"DICOM/DICOS"},"(4010,1018)":{tag:"(4010,1018)",vr:"FL",name:"Density",vm:"1",version:"DICOM/DICOS"},"(4010,1019)":{tag:"(4010,1019)",vr:"FL",name:"ZEffective",vm:"1",version:"DICOM/DICOS"},"(4010,101A)":{tag:"(4010,101A)",vr:"SH",name:"BoardingPassID",vm:"1",version:"DICOM/DICOS"},"(4010,101B)":{tag:"(4010,101B)",vr:"FL",name:"CenterOfMass",vm:"3",version:"DICOM/DICOS"},"(4010,101C)":{tag:"(4010,101C)",vr:"FL",name:"CenterOfPTO",vm:"3",version:"DICOM/DICOS"},"(4010,101D)":{tag:"(4010,101D)",vr:"FL",name:"BoundingPolygon",vm:"6-n",version:"DICOM/DICOS"},"(4010,101E)":{tag:"(4010,101E)",vr:"SH",name:"RouteSegmentStartLocationID",vm:"1",version:"DICOM/DICOS"},"(4010,101F)":{tag:"(4010,101F)",vr:"SH",name:"RouteSegmentEndLocationID",vm:"1",version:"DICOM/DICOS"},"(4010,1020)":{tag:"(4010,1020)",vr:"CS",name:"RouteSegmentLocationIDType",vm:"1",version:"DICOM/DICOS"},"(4010,1021)":{tag:"(4010,1021)",vr:"CS",name:"AbortReason",vm:"1-n",version:"DICOM/DICOS"},"(4010,1023)":{tag:"(4010,1023)",vr:"FL",name:"VolumeOfPTO",vm:"1",version:"DICOM/DICOS"},"(4010,1024)":{tag:"(4010,1024)",vr:"CS",name:"AbortFlag",vm:"1",version:"DICOM/DICOS"},"(4010,1025)":{tag:"(4010,1025)",vr:"DT",name:"RouteSegmentStartTime",vm:"1",version:"DICOM/DICOS"},"(4010,1026)":{tag:"(4010,1026)",vr:"DT",name:"RouteSegmentEndTime",vm:"1",version:"DICOM/DICOS"},"(4010,1027)":{tag:"(4010,1027)",vr:"CS",name:"TDRType",vm:"1",version:"DICOM/DICOS"},"(4010,1028)":{tag:"(4010,1028)",vr:"CS",name:"InternationalRouteSegment",vm:"1",version:"DICOM/DICOS"},"(4010,1029)":{tag:"(4010,1029)",vr:"LO",name:"ThreatDetectionAlgorithmandVersion",vm:"1-n",version:"DICOM/DICOS"},"(4010,102A)":{tag:"(4010,102A)",vr:"SH",name:"AssignedLocation",vm:"1",version:"DICOM/DICOS"},"(4010,102B)":{tag:"(4010,102B)",vr:"DT",name:"AlarmDecisionTime",vm:"1",version:"DICOM/DICOS"},"(4010,1031)":{tag:"(4010,1031)",vr:"CS",name:"AlarmDecision",vm:"1",version:"DICOM/DICOS"},"(4010,1033)":{tag:"(4010,1033)",vr:"US",name:"NumberOfTotalObjects",vm:"1",version:"DICOM/DICOS"},"(4010,1034)":{tag:"(4010,1034)",vr:"US",name:"NumberOfAlarmObjects",vm:"1",version:"DICOM/DICOS"},"(4010,1037)":{tag:"(4010,1037)",vr:"SQ",name:"PTORepresentationSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1038)":{tag:"(4010,1038)",vr:"SQ",name:"ATDAssessmentSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1039)":{tag:"(4010,1039)",vr:"CS",name:"TIPType",vm:"1",version:"DICOM/DICOS"},"(4010,103A)":{tag:"(4010,103A)",vr:"CS",name:"DICOSVersion",vm:"1",version:"DICOM/DICOS"},"(4010,1041)":{tag:"(4010,1041)",vr:"DT",name:"OOIOwnerCreationTime",vm:"1",version:"DICOM/DICOS"},"(4010,1042)":{tag:"(4010,1042)",vr:"CS",name:"OOIType",vm:"1",version:"DICOM/DICOS"},"(4010,1043)":{tag:"(4010,1043)",vr:"FL",name:"OOISize",vm:"3",version:"DICOM/DICOS"},"(4010,1044)":{tag:"(4010,1044)",vr:"CS",name:"AcquisitionStatus",vm:"1",version:"DICOM/DICOS"},"(4010,1045)":{tag:"(4010,1045)",vr:"SQ",name:"BasisMaterialsCodeSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1046)":{tag:"(4010,1046)",vr:"CS",name:"PhantomType",vm:"1",version:"DICOM/DICOS"},"(4010,1047)":{tag:"(4010,1047)",vr:"SQ",name:"OOIOwnerSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1048)":{tag:"(4010,1048)",vr:"CS",name:"ScanType",vm:"1",version:"DICOM/DICOS"},"(4010,1051)":{tag:"(4010,1051)",vr:"LO",name:"ItineraryID",vm:"1",version:"DICOM/DICOS"},"(4010,1052)":{tag:"(4010,1052)",vr:"SH",name:"ItineraryIDType",vm:"1",version:"DICOM/DICOS"},"(4010,1053)":{tag:"(4010,1053)",vr:"LO",name:"ItineraryIDAssigningAuthority",vm:"1",version:"DICOM/DICOS"},"(4010,1054)":{tag:"(4010,1054)",vr:"SH",name:"RouteID",vm:"1",version:"DICOM/DICOS"},"(4010,1055)":{tag:"(4010,1055)",vr:"SH",name:"RouteIDAssigningAuthority",vm:"1",version:"DICOM/DICOS"},"(4010,1056)":{tag:"(4010,1056)",vr:"CS",name:"InboundArrivalType",vm:"1",version:"DICOM/DICOS"},"(4010,1058)":{tag:"(4010,1058)",vr:"SH",name:"CarrierID",vm:"1",version:"DICOM/DICOS"},"(4010,1059)":{tag:"(4010,1059)",vr:"CS",name:"CarrierIDAssigningAuthority",vm:"1",version:"DICOM/DICOS"},"(4010,1060)":{tag:"(4010,1060)",vr:"FL",name:"SourceOrientation",vm:"3",version:"DICOM/DICOS"},"(4010,1061)":{tag:"(4010,1061)",vr:"FL",name:"SourcePosition",vm:"3",version:"DICOM/DICOS"},"(4010,1062)":{tag:"(4010,1062)",vr:"FL",name:"BeltHeight",vm:"1",version:"DICOM/DICOS"},"(4010,1064)":{tag:"(4010,1064)",vr:"SQ",name:"AlgorithmRoutingCodeSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1067)":{tag:"(4010,1067)",vr:"CS",name:"TransportClassification",vm:"1",version:"DICOM/DICOS"},"(4010,1068)":{tag:"(4010,1068)",vr:"LT",name:"OOITypeDescriptor",vm:"1",version:"DICOM/DICOS"},"(4010,1069)":{tag:"(4010,1069)",vr:"FL",name:"TotalProcessingTime",vm:"1",version:"DICOM/DICOS"},"(4010,106C)":{tag:"(4010,106C)",vr:"OB",name:"DetectorCalibrationData",vm:"1",version:"DICOM/DICOS"},"(4010,106D)":{tag:"(4010,106D)",vr:"CS",name:"AdditionalScreeningPerformed",vm:"1",version:"DICOM/DICOS"},"(4010,106E)":{tag:"(4010,106E)",vr:"CS",name:"AdditionalInspectionSelectionCriteria",vm:"1",version:"DICOM/DICOS"},"(4010,106F)":{tag:"(4010,106F)",vr:"SQ",name:"AdditionalInspectionMethodSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1070)":{tag:"(4010,1070)",vr:"CS",name:"AITDeviceType",vm:"1",version:"DICOM/DICOS"},"(4010,1071)":{tag:"(4010,1071)",vr:"SQ",name:"QRMeasurementsSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1072)":{tag:"(4010,1072)",vr:"SQ",name:"TargetMaterialSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1073)":{tag:"(4010,1073)",vr:"FD",name:"SNRThreshold",vm:"1",version:"DICOM/DICOS"},"(4010,1075)":{tag:"(4010,1075)",vr:"DS",name:"ImageScaleRepresentation",vm:"1",version:"DICOM/DICOS"},"(4010,1076)":{tag:"(4010,1076)",vr:"SQ",name:"ReferencedPTOSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1077)":{tag:"(4010,1077)",vr:"SQ",name:"ReferencedTDRInstanceSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1078)":{tag:"(4010,1078)",vr:"ST",name:"PTOLocationDescription",vm:"1",version:"DICOM/DICOS"},"(4010,1079)":{tag:"(4010,1079)",vr:"SQ",name:"AnomalyLocatorIndicatorSequence",vm:"1",version:"DICOM/DICOS"},"(4010,107A)":{tag:"(4010,107A)",vr:"FL",name:"AnomalyLocatorIndicator",vm:"3",version:"DICOM/DICOS"},"(4010,107B)":{tag:"(4010,107B)",vr:"SQ",name:"PTORegionSequence",vm:"1",version:"DICOM/DICOS"},"(4010,107C)":{tag:"(4010,107C)",vr:"CS",name:"InspectionSelectionCriteria",vm:"1",version:"DICOM/DICOS"},"(4010,107D)":{tag:"(4010,107D)",vr:"SQ",name:"SecondaryInspectionMethodSequence",vm:"1",version:"DICOM/DICOS"},"(4010,107E)":{tag:"(4010,107E)",vr:"DS",name:"PRCSToRCSOrientation",vm:"6",version:"DICOM/DICOS"},"(3010,0001)":{tag:"(3010,0001)",vr:"SQ",name:"RadiobiologicalDoseEffectSequence",vm:"1",version:"DICOM"},"(3010,0002)":{tag:"(3010,0002)",vr:"CS",name:"RadiobiologicalDoseEffectFlag",vm:"1",version:"DICOM"},"(3010,0003)":{tag:"(3010,0003)",vr:"SQ",name:"EffectiveDoseCalculationMethodCategoryCodeSequence",vm:"1",version:"DICOM"},"(3010,0004)":{tag:"(3010,0004)",vr:"SQ",name:"EffectiveDoseCalculationMethodCodeSequence",vm:"1",version:"DICOM"},"(3010,0005)":{tag:"(3010,0005)",vr:"LO",name:"EffectiveDoseCalculationMethodDescription",vm:"1",version:"DICOM"},"(3010,0006)":{tag:"(3010,0006)",vr:"UI",name:"ConceptualVolumeUID",vm:"1",version:"DICOM"},"(3010,0007)":{tag:"(3010,0007)",vr:"SQ",name:"OriginatingSOPInstanceReferenceSequence",vm:"1",version:"DICOM"},"(3010,0008)":{tag:"(3010,0008)",vr:"SQ",name:"ConceptualVolumeConstituentSequence",vm:"1",version:"DICOM"},"(3010,0009)":{tag:"(3010,0009)",vr:"SQ",name:"EquivalentConceptualVolumeInstanceReferenceSequence",vm:"1",version:"DICOM"},"(3010,000A)":{tag:"(3010,000A)",vr:"SQ",name:"EquivalentConceptualVolumesSequence",vm:"1",version:"DICOM"},"(3010,000B)":{tag:"(3010,000B)",vr:"UI",name:"ReferencedConceptualVolumeUID",vm:"1",version:"DICOM"},"(3010,000C)":{tag:"(3010,000C)",vr:"UT",name:"ConceptualVolumeCombinationExpression",vm:"1",version:"DICOM"},"(3010,000D)":{tag:"(3010,000D)",vr:"US",name:"ConceptualVolumeConstituentIndex",vm:"1",version:"DICOM"},"(3010,000E)":{tag:"(3010,000E)",vr:"CS",name:"ConceptualVolumeCombinationFlag",vm:"1",version:"DICOM"},"(3010,000F)":{tag:"(3010,000F)",vr:"ST",name:"ConceptualVolumeCombinationDescription",vm:"1",version:"DICOM"},"(3010,0010)":{tag:"(3010,0010)",vr:"CS",name:"ConceptualVolumeSegmentationDefinedFlag",vm:"1",version:"DICOM"},"(3010,0011)":{tag:"(3010,0011)",vr:"SQ",name:"ConceptualVolumeSegmentationReferenceSequence",vm:"1",version:"DICOM"},"(3010,0012)":{tag:"(3010,0012)",vr:"SQ",name:"ConceptualVolumeConstituentSegmentationReferenceSequence",vm:"1",version:"DICOM"},"(3010,0013)":{tag:"(3010,0013)",vr:"UI",name:"ConstituentConceptualVolumeUID",vm:"1",version:"DICOM"},"(3010,0014)":{tag:"(3010,0014)",vr:"SQ",name:"DerivationConceptualVolumeSequence",vm:"1",version:"DICOM"},"(3010,0015)":{tag:"(3010,0015)",vr:"UI",name:"SourceConceptualVolumeUID",vm:"1",version:"DICOM"},"(3010,0016)":{tag:"(3010,0016)",vr:"SQ",name:"ConceptualVolumeDerivationAlgorithmSequence",vm:"1",version:"DICOM"},"(3010,0017)":{tag:"(3010,0017)",vr:"ST",name:"ConceptualVolumeDescription",vm:"1",version:"DICOM"},"(3010,0018)":{tag:"(3010,0018)",vr:"SQ",name:"SourceConceptualVolumeSequence",vm:"1",version:"DICOM"},"(3010,0019)":{tag:"(3010,0019)",vr:"SQ",name:"AuthorIdentificationSequence",vm:"1",version:"DICOM"},"(3010,001A)":{tag:"(3010,001A)",vr:"LO",name:"ManufacturerModelVersion",vm:"1",version:"DICOM"},"(3010,001B)":{tag:"(3010,001B)",vr:"UC",name:"DeviceAlternateIdentifier",vm:"1",version:"DICOM"},"(3010,001C)":{tag:"(3010,001C)",vr:"CS",name:"DeviceAlternateIdentifierType",vm:"1",version:"DICOM"},"(3010,001D)":{tag:"(3010,001D)",vr:"LT",name:"DeviceAlternateIdentifierFormat",vm:"1",version:"DICOM"},"(3010,001E)":{tag:"(3010,001E)",vr:"LO",name:"SegmentationCreationTemplateLabel",vm:"1",version:"DICOM"},"(3010,001F)":{tag:"(3010,001F)",vr:"UI",name:"SegmentationTemplateUID",vm:"1",version:"DICOM"},"(3010,0020)":{tag:"(3010,0020)",vr:"US",name:"ReferencedSegmentReferenceIndex",vm:"1",version:"DICOM"},"(3010,0021)":{tag:"(3010,0021)",vr:"SQ",name:"SegmentReferenceSequence",vm:"1",version:"DICOM"},"(3010,0022)":{tag:"(3010,0022)",vr:"US",name:"SegmentReferenceIndex",vm:"1",version:"DICOM"},"(3010,0023)":{tag:"(3010,0023)",vr:"SQ",name:"DirectSegmentReferenceSequence",vm:"1",version:"DICOM"},"(3010,0024)":{tag:"(3010,0024)",vr:"SQ",name:"CombinationSegmentReferenceSequence",vm:"1",version:"DICOM"},"(3010,0025)":{tag:"(3010,0025)",vr:"SQ",name:"ConceptualVolumeSequence",vm:"1",version:"DICOM"},"(3010,0026)":{tag:"(3010,0026)",vr:"SQ",name:"SegmentedRTAccessoryDeviceSequence",vm:"1",version:"DICOM"},"(3010,0027)":{tag:"(3010,0027)",vr:"SQ",name:"SegmentCharacteristicsSequence",vm:"1",version:"DICOM"},"(3010,0028)":{tag:"(3010,0028)",vr:"SQ",name:"RelatedSegmentCharacteristicsSequence",vm:"1",version:"DICOM"},"(3010,0029)":{tag:"(3010,0029)",vr:"US",name:"SegmentCharacteristicsPrecedence",vm:"1",version:"DICOM"},"(3010,002A)":{tag:"(3010,002A)",vr:"SQ",name:"RTSegmentAnnotationSequence",vm:"1",version:"DICOM"},"(3010,002B)":{tag:"(3010,002B)",vr:"SQ",name:"SegmentAnnotationCategoryCodeSequence",vm:"1",version:"DICOM"},"(3010,002C)":{tag:"(3010,002C)",vr:"SQ",name:"SegmentAnnotationTypeCodeSequence",vm:"1",version:"DICOM"},"(3010,002D)":{tag:"(3010,002D)",vr:"LO",name:"DeviceLabel",vm:"1",version:"DICOM"},"(3010,002E)":{tag:"(3010,002E)",vr:"SQ",name:"DeviceTypeCodeSequence",vm:"1",version:"DICOM"},"(3010,002F)":{tag:"(3010,002F)",vr:"SQ",name:"SegmentAnnotationTypeModifierCodeSequence",vm:"1",version:"DICOM"},"(3010,0030)":{tag:"(3010,0030)",vr:"SQ",name:"PatientEquipmentRelationshipCodeSequence",vm:"1",version:"DICOM"},"(3010,0031)":{tag:"(3010,0031)",vr:"UI",name:"ReferencedFiducialsUID",vm:"1",version:"DICOM"},"(3010,0032)":{tag:"(3010,0032)",vr:"SQ",name:"PatientTreatmentOrientationSequence",vm:"1",version:"DICOM"},"(3010,0033)":{tag:"(3010,0033)",vr:"SH",name:"UserContentLabel",vm:"1",version:"DICOM"},"(3010,0034)":{tag:"(3010,0034)",vr:"LO",name:"UserContentLongLabel",vm:"1",version:"DICOM"},"(3010,0035)":{tag:"(3010,0035)",vr:"SH",name:"EntityLabel",vm:"1",version:"DICOM"},"(3010,0036)":{tag:"(3010,0036)",vr:"LO",name:"EntityName",vm:"1",version:"DICOM"},"(3010,0037)":{tag:"(3010,0037)",vr:"ST",name:"EntityDescription",vm:"1",version:"DICOM"},"(3010,0038)":{tag:"(3010,0038)",vr:"LO",name:"EntityLongLabel",vm:"1",version:"DICOM"},"(3010,0039)":{tag:"(3010,0039)",vr:"US",name:"DeviceIndex",vm:"1",version:"DICOM"},"(3010,003A)":{tag:"(3010,003A)",vr:"US",name:"RTTreatmentPhaseIndex",vm:"1",version:"DICOM"},"(3010,003B)":{tag:"(3010,003B)",vr:"UI",name:"RTTreatmentPhaseUID",vm:"1",version:"DICOM"},"(3010,003C)":{tag:"(3010,003C)",vr:"US",name:"RTPrescriptionIndex",vm:"1",version:"DICOM"},"(3010,003D)":{tag:"(3010,003D)",vr:"US",name:"RTSegmentAnnotationIndex",vm:"1",version:"DICOM"},"(3010,003E)":{tag:"(3010,003E)",vr:"US",name:"BasisRTTreatmentPhaseIndex",vm:"1",version:"DICOM"},"(3010,003F)":{tag:"(3010,003F)",vr:"US",name:"RelatedRTTreatmentPhaseIndex",vm:"1",version:"DICOM"},"(3010,0040)":{tag:"(3010,0040)",vr:"US",name:"ReferencedRTTreatmentPhaseIndex",vm:"1",version:"DICOM"},"(3010,0041)":{tag:"(3010,0041)",vr:"US",name:"ReferencedRTPrescriptionIndex",vm:"1",version:"DICOM"},"(3010,0042)":{tag:"(3010,0042)",vr:"US",name:"ReferencedParentRTPrescriptionIndex",vm:"1",version:"DICOM"},"(3010,0043)":{tag:"(3010,0043)",vr:"ST",name:"ManufacturerDeviceIdentifier",vm:"1",version:"DICOM"},"(3010,0044)":{tag:"(3010,0044)",vr:"SQ",name:"InstanceLevelReferencedPerformedProcedureStepSequence",vm:"1",version:"DICOM"},"(3010,0045)":{tag:"(3010,0045)",vr:"CS",name:"RTTreatmentPhaseIntentPresenceFlag",vm:"1",version:"DICOM"},"(3010,0046)":{tag:"(3010,0046)",vr:"CS",name:"RadiotherapyTreatmentType",vm:"1",version:"DICOM"},"(3010,0047)":{tag:"(3010,0047)",vr:"CS",name:"TeletherapyRadiationType",vm:"1-n",version:"DICOM"},"(3010,0048)":{tag:"(3010,0048)",vr:"CS",name:"BrachytherapySourceType",vm:"1-n",version:"DICOM"},"(3010,0049)":{tag:"(3010,0049)",vr:"SQ",name:"ReferencedRTTreatmentPhaseSequence",vm:"1",version:"DICOM"},"(3010,004A)":{tag:"(3010,004A)",vr:"SQ",name:"ReferencedDirectSegmentInstanceSequence",vm:"1",version:"DICOM"},"(3010,004B)":{tag:"(3010,004B)",vr:"SQ",name:"IntendedRTTreatmentPhaseSequence",vm:"1",version:"DICOM"},"(3010,004C)":{tag:"(3010,004C)",vr:"DA",name:"IntendedPhaseStartDate",vm:"1",version:"DICOM"},"(3010,004D)":{tag:"(3010,004D)",vr:"DA",name:"IntendedPhaseEndDate",vm:"1",version:"DICOM"},"(3010,004E)":{tag:"(3010,004E)",vr:"SQ",name:"RTTreatmentPhaseIntervalSequence",vm:"1",version:"DICOM"},"(3010,004F)":{tag:"(3010,004F)",vr:"CS",name:"TemporalRelationshipIntervalAnchor",vm:"1",version:"DICOM"},"(3010,0050)":{tag:"(3010,0050)",vr:"FD",name:"MinimumNumberOfIntervalDays",vm:"1",version:"DICOM"},"(3010,0051)":{tag:"(3010,0051)",vr:"FD",name:"MaximumNumberOfIntervalDays",vm:"1",version:"DICOM"},"(3010,0052)":{tag:"(3010,0052)",vr:"UI",name:"PertinentSOPClassesInStudy",vm:"1-n",version:"DICOM"},"(3010,0053)":{tag:"(3010,0053)",vr:"UI",name:"PertinentSOPClassesInSeries",vm:"1-n",version:"DICOM"},"(3010,0054)":{tag:"(3010,0054)",vr:"LO",name:"RTPrescriptionLabel",vm:"1",version:"DICOM"},"(3010,0055)":{tag:"(3010,0055)",vr:"SQ",name:"RTPhysicianIntentPredecessorSequence",vm:"1",version:"DICOM"},"(3010,0056)":{tag:"(3010,0056)",vr:"LO",name:"RTTreatmentApproachLabel",vm:"1",version:"DICOM"},"(3010,0057)":{tag:"(3010,0057)",vr:"SQ",name:"RTPhysicianIntentSequence",vm:"1",version:"DICOM"},"(3010,0058)":{tag:"(3010,0058)",vr:"US",name:"RTPhysicianIntentIndex",vm:"1",version:"DICOM"},"(3010,0059)":{tag:"(3010,0059)",vr:"CS",name:"RTTreatmentIntentType",vm:"1",version:"DICOM"},"(3010,005A)":{tag:"(3010,005A)",vr:"UT",name:"RTPhysicianIntentNarrative",vm:"1",version:"DICOM"},"(3010,005B)":{tag:"(3010,005B)",vr:"SQ",name:"RTProtocolCodeSequence",vm:"1",version:"DICOM"},"(3010,005C)":{tag:"(3010,005C)",vr:"ST",name:"ReasonForSuperseding",vm:"1",version:"DICOM"},"(3010,005D)":{tag:"(3010,005D)",vr:"SQ",name:"RTDiagnosisCodeSequence",vm:"1",version:"DICOM"},"(3010,005E)":{tag:"(3010,005E)",vr:"US",name:"ReferencedRTPhysicianIntentIndex",vm:"1",version:"DICOM"},"(3010,005F)":{tag:"(3010,005F)",vr:"SQ",name:"RTPhysicianIntentInputInstanceSequence",vm:"1",version:"DICOM"},"(3010,0060)":{tag:"(3010,0060)",vr:"SQ",name:"RTAnatomicPrescriptionSequence",vm:"1",version:"DICOM"},"(3010,0061)":{tag:"(3010,0061)",vr:"UT",name:"PriorTreatmentDoseDescription",vm:"1",version:"DICOM"},"(3010,0062)":{tag:"(3010,0062)",vr:"SQ",name:"PriorTreatmentReferenceSequence",vm:"1",version:"DICOM"},"(3010,0063)":{tag:"(3010,0063)",vr:"CS",name:"DosimetricObjectiveEvaluationScope",vm:"1",version:"DICOM"},"(3010,0064)":{tag:"(3010,0064)",vr:"SQ",name:"TherapeuticRoleCategoryCodeSequence",vm:"1",version:"DICOM"},"(3010,0065)":{tag:"(3010,0065)",vr:"SQ",name:"TherapeuticRoleTypeCodeSequence",vm:"1",version:"DICOM"},"(3010,0066)":{tag:"(3010,0066)",vr:"US",name:"ConceptualVolumeOptimizationPrecedence",vm:"1",version:"DICOM"},"(3010,0067)":{tag:"(3010,0067)",vr:"SQ",name:"ConceptualVolumeCategoryCodeSequence",vm:"1",version:"DICOM"},"(3010,0068)":{tag:"(3010,0068)",vr:"CS",name:"ConceptualVolumeBlockingConstraint",vm:"1",version:"DICOM"},"(3010,0069)":{tag:"(3010,0069)",vr:"SQ",name:"ConceptualVolumeTypeCodeSequence",vm:"1",version:"DICOM"},"(3010,006A)":{tag:"(3010,006A)",vr:"SQ",name:"ConceptualVolumeTypeModifierCodeSequence",vm:"1",version:"DICOM"},"(3010,006B)":{tag:"(3010,006B)",vr:"SQ",name:"RTPrescriptionSequence",vm:"1",version:"DICOM"},"(3010,006C)":{tag:"(3010,006C)",vr:"SQ",name:"DosimetricObjectiveSequence",vm:"1",version:"DICOM"},"(3010,006D)":{tag:"(3010,006D)",vr:"SQ",name:"DosimetricObjectiveTypeCodeSequence",vm:"1",version:"DICOM"},"(3010,006E)":{tag:"(3010,006E)",vr:"UI",name:"DosimetricObjectiveUID",vm:"1",version:"DICOM"},"(3010,006F)":{tag:"(3010,006F)",vr:"UI",name:"ReferencedDosimetricObjectiveUID",vm:"1",version:"DICOM"},"(3010,0070)":{tag:"(3010,0070)",vr:"SQ",name:"DosimetricObjectiveParameterSequence",vm:"1",version:"DICOM"},"(3010,0071)":{tag:"(3010,0071)",vr:"SQ",name:"ReferencedDosimetricObjectivesSequence",vm:"1",version:"DICOM"},"(3010,0073)":{tag:"(3010,0073)",vr:"CS",name:"AbsoluteDosimetricObjectiveFlag",vm:"1",version:"DICOM"},"(3010,0074)":{tag:"(3010,0074)",vr:"FD",name:"DosimetricObjectiveWeight",vm:"1",version:"DICOM"},"(3010,0075)":{tag:"(3010,0075)",vr:"CS",name:"DosimetricObjectivePurpose",vm:"1",version:"DICOM"},"(3010,0076)":{tag:"(3010,0076)",vr:"SQ",name:"PlanningInputInformationSequence",vm:"1",version:"DICOM"},"(3010,0077)":{tag:"(3010,0077)",vr:"LO",name:"TreatmentSite",vm:"1",version:"DICOM"},"(3010,0078)":{tag:"(3010,0078)",vr:"SQ",name:"TreatmentSiteCodeSequence",vm:"1",version:"DICOM"},"(3010,0079)":{tag:"(3010,0079)",vr:"SQ",name:"FractionPatternSequence",vm:"1",version:"DICOM"},"(3010,007A)":{tag:"(3010,007A)",vr:"UT",name:"TreatmentTechniqueNotes",vm:"1",version:"DICOM"},"(3010,007B)":{tag:"(3010,007B)",vr:"UT",name:"PrescriptionNotes",vm:"1",version:"DICOM"},"(3010,007C)":{tag:"(3010,007C)",vr:"IS",name:"NumberOfIntervalFractions",vm:"1",version:"DICOM"},"(3010,007D)":{tag:"(3010,007D)",vr:"US",name:"NumberOfFractions",vm:"1",version:"DICOM"},"(3010,007E)":{tag:"(3010,007E)",vr:"US",name:"IntendedDeliveryDuration",vm:"1",version:"DICOM"},"(3010,007F)":{tag:"(3010,007F)",vr:"UT",name:"FractionationNotes",vm:"1",version:"DICOM"},"(3010,0080)":{tag:"(3010,0080)",vr:"SQ",name:"RTTreatmentTechniqueCodeSequence",vm:"1",version:"DICOM"},"(3010,0081)":{tag:"(3010,0081)",vr:"SQ",name:"PrescriptionNotesSequence",vm:"1",version:"DICOM"},"(3010,0082)":{tag:"(3010,0082)",vr:"SQ",name:"FractionBasedRelationshipSequence",vm:"1",version:"DICOM"},"(3010,0083)":{tag:"(3010,0083)",vr:"CS",name:"FractionBasedRelationshipIntervalAnchor",vm:"1",version:"DICOM"},"(3010,0084)":{tag:"(3010,0084)",vr:"FD",name:"MinimumHoursBetweenFractions",vm:"1",version:"DICOM"},"(3010,0085)":{tag:"(3010,0085)",vr:"TM",name:"IntendedFractionStartTime",vm:"1-n",version:"DICOM"},"(3010,0086)":{tag:"(3010,0086)",vr:"LT",name:"IntendedStartDayOfWeek",vm:"1",version:"DICOM"},"(3010,0087)":{tag:"(3010,0087)",vr:"SQ",name:"WeekdayFractionPatternSequence",vm:"1",version:"DICOM"},"(3010,0088)":{tag:"(3010,0088)",vr:"SQ",name:"DeliveryTimeStructureCodeSequence",vm:"1",version:"DICOM"},"(3010,0089)":{tag:"(3010,0089)",vr:"SQ",name:"TreatmentSiteModifierCodeSequence",vm:"1",version:"DICOM"},"(3010,0090)":{tag:"(3010,0090)",vr:"CS",name:"RoboticBaseLocationIndicator",vm:"1",version:"DICOM"},"(3010,0091)":{tag:"(3010,0091)",vr:"SQ",name:"RoboticPathNodeSetCodeSequence",vm:"1",version:"DICOM"},"(3010,0092)":{tag:"(3010,0092)",vr:"UL",name:"RoboticNodeIdentifier",vm:"1",version:"DICOM"},"(3010,0093)":{tag:"(3010,0093)",vr:"FD",name:"RTTreatmentSourceCoordinates",vm:"3",version:"DICOM"},"(3010,0094)":{tag:"(3010,0094)",vr:"FD",name:"RadiationSourceCoordinateSystemYawAngle",vm:"1",version:"DICOM"},"(3010,0095)":{tag:"(3010,0095)",vr:"FD",name:"RadiationSourceCoordinateSystemRollAngle",vm:"1",version:"DICOM"},"(3010,0096)":{tag:"(3010,0096)",vr:"FD",name:"RadiationSourceCoordinateSystemPitchAngle",vm:"1",version:"DICOM"},"(3010,0097)":{tag:"(3010,0097)",vr:"SQ",name:"RoboticPathControlPointSequence",vm:"1",version:"DICOM"},"(3010,0098)":{tag:"(3010,0098)",vr:"SQ",name:"TomotherapeuticControlPointSequence",vm:"1",version:"DICOM"},"(3010,0099)":{tag:"(3010,0099)",vr:"FD",name:"TomotherapeuticLeafOpenDurations",vm:"1-n",version:"DICOM"},"(3010,009A)":{tag:"(3010,009A)",vr:"FD",name:"TomotherapeuticLeafInitialClosedDurations",vm:"1-n",version:"DICOM"},"(4FFE,0001)":{tag:"(4FFE,0001)",vr:"SQ",name:"MACParametersSequence",vm:"1",version:"DICOM"},"(5200,9229)":{tag:"(5200,9229)",vr:"SQ",name:"SharedFunctionalGroupsSequence",vm:"1",version:"DICOM"},"(5200,9230)":{tag:"(5200,9230)",vr:"SQ",name:"PerFrameFunctionalGroupsSequence",vm:"1",version:"DICOM"},"(5400,0100)":{tag:"(5400,0100)",vr:"SQ",name:"WaveformSequence",vm:"1",version:"DICOM"},"(5400,0110)":{tag:"(5400,0110)",vr:"ox",name:"ChannelMinimumValue",vm:"1",version:"DICOM"},"(5400,0112)":{tag:"(5400,0112)",vr:"ox",name:"ChannelMaximumValue",vm:"1",version:"DICOM"},"(5400,1004)":{tag:"(5400,1004)",vr:"US",name:"WaveformBitsAllocated",vm:"1",version:"DICOM"},"(5400,1006)":{tag:"(5400,1006)",vr:"CS",name:"WaveformSampleInterpretation",vm:"1",version:"DICOM"},"(5400,100A)":{tag:"(5400,100A)",vr:"ox",name:"WaveformPaddingValue",vm:"1",version:"DICOM"},"(5400,1010)":{tag:"(5400,1010)",vr:"ox",name:"WaveformData",vm:"1",version:"DICOM"},"(5600,0010)":{tag:"(5600,0010)",vr:"OF",name:"FirstOrderPhaseCorrectionAngle",vm:"1",version:"DICOM"},"(5600,0020)":{tag:"(5600,0020)",vr:"OF",name:"SpectroscopyData",vm:"1",version:"DICOM"},"(6000-60FF,0010)":{tag:"(6000-60FF,0010)",vr:"US",name:"OverlayRows",vm:"1",version:"DICOM"},"(6000-60FF,0011)":{tag:"(6000-60FF,0011)",vr:"US",name:"OverlayColumns",vm:"1",version:"DICOM"},"(6000-60FF,0015)":{tag:"(6000-60FF,0015)",vr:"IS",name:"NumberOfFramesInOverlay",vm:"1",version:"DICOM"},"(6000-60FF,0022)":{tag:"(6000-60FF,0022)",vr:"LO",name:"OverlayDescription",vm:"1",version:"DICOM"},"(6000-60FF,0040)":{tag:"(6000-60FF,0040)",vr:"CS",name:"OverlayType",vm:"1",version:"DICOM"},"(6000-60FF,0045)":{tag:"(6000-60FF,0045)",vr:"LO",name:"OverlaySubtype",vm:"1",version:"DICOM"},"(6000-60FF,0050)":{tag:"(6000-60FF,0050)",vr:"SS",name:"OverlayOrigin",vm:"2",version:"DICOM"},"(6000-60FF,0051)":{tag:"(6000-60FF,0051)",vr:"US",name:"ImageFrameOrigin",vm:"1",version:"DICOM"},"(6000-60FF,0100)":{tag:"(6000-60FF,0100)",vr:"US",name:"OverlayBitsAllocated",vm:"1",version:"DICOM"},"(6000-60FF,0102)":{tag:"(6000-60FF,0102)",vr:"US",name:"OverlayBitPosition",vm:"1",version:"DICOM"},"(6000-60FF,1001)":{tag:"(6000-60FF,1001)",vr:"CS",name:"OverlayActivationLayer",vm:"1",version:"DICOM"},"(6000-60FF,1301)":{tag:"(6000-60FF,1301)",vr:"IS",name:"ROIArea",vm:"1",version:"DICOM"},"(6000-60FF,1302)":{tag:"(6000-60FF,1302)",vr:"DS",name:"ROIMean",vm:"1",version:"DICOM"},"(6000-60FF,1303)":{tag:"(6000-60FF,1303)",vr:"DS",name:"ROIStandardDeviation",vm:"1",version:"DICOM"},"(6000-60FF,1500)":{tag:"(6000-60FF,1500)",vr:"LO",name:"OverlayLabel",vm:"1",version:"DICOM"},"(6000-60FF,3000)":{tag:"(6000-60FF,3000)",vr:"ox",name:"OverlayData",vm:"1",version:"DICOM"},"(7FE0,0001)":{tag:"(7FE0,0001)",vr:"OV",name:"ExtendedOffsetTable",vm:"1",version:"DICOM"},"(7FE0,0002)":{tag:"(7FE0,0002)",vr:"OV",name:"ExtendedOffsetTableLengths",vm:"1",version:"DICOM"},"(7FE0,0008)":{tag:"(7FE0,0008)",vr:"OF",name:"FloatPixelData",vm:"1",version:"DICOM"},"(7FE0,0009)":{tag:"(7FE0,0009)",vr:"OD",name:"DoubleFloatPixelData",vm:"1",version:"DICOM"},"(7FE0,0010)":{tag:"(7FE0,0010)",vr:"ox",name:"PixelData",vm:"1",version:"DICOM"},"(FFFA,FFFA)":{tag:"(FFFA,FFFA)",vr:"SQ",name:"DigitalSignaturesSequence",vm:"1",version:"DICOM"},"(FFFC,FFFC)":{tag:"(FFFC,FFFC)",vr:"OB",name:"DataSetTrailingPadding",vm:"1",version:"DICOM"},"(FFFE,E000)":{tag:"(FFFE,E000)",vr:"na",name:"Item",vm:"1",version:"DICOM"},"(FFFE,E00D)":{tag:"(FFFE,E00D)",vr:"na",name:"ItemDelimitationItem",vm:"1",version:"DICOM"},"(FFFE,E0DD)":{tag:"(FFFE,E0DD)",vr:"na",name:"SequenceDelimitationItem",vm:"1",version:"DICOM"},"(0028,1224)":{tag:"(0028,1224)",vr:"OW",name:"SegmentedAlphaPaletteColorLookupTableData",vm:"1",version:"Supplement_156"},"(0070,1101)":{tag:"(0070,1101)",vr:"UI",name:"PresentationDisplayCollectionUID",vm:"1",version:"Supplement_156"},"(0070,1102)":{tag:"(0070,1102)",vr:"UI",name:"PresentationSequenceCollectionUID",vm:"1",version:"Supplement_156"},"(0070,1103)":{tag:"(0070,1103)",vr:"US",name:"PresentationSequencePositionIndex",vm:"1",version:"Supplement_156"},"(0070,1104)":{tag:"(0070,1104)",vr:"SQ",name:"RenderedImageReferenceSequence",vm:"1",version:"Supplement_156"},"(0070,1201)":{tag:"(0070,1201)",vr:"SQ",name:"VolumetricPresentationStateInputSequence",vm:"1",version:"Supplement_156"},"(0070,1202)":{tag:"(0070,1202)",vr:"CS",name:"PresentationInputType",vm:"1",version:"Supplement_156"},"(0070,1203)":{tag:"(0070,1203)",vr:"US",name:"InputSequencePositionIndex",vm:"1",version:"Supplement_156"},"(0070,1204)":{tag:"(0070,1204)",vr:"CS",name:"Crop",vm:"1",version:"Supplement_156"},"(0070,1205)":{tag:"(0070,1205)",vr:"US",name:"CroppingSpecificationIndex",vm:"1-n",version:"Supplement_156"},"(0070,1206)":{tag:"(0070,1206)",vr:"CS",name:"CompositingMethod",vm:"1",version:"Supplement_156"},"(0070,1207)":{tag:"(0070,1207)",vr:"US",name:"VolumetricPresentationInputNumber",vm:"1",version:"Supplement_156"},"(0070,1208)":{tag:"(0070,1208)",vr:"CS",name:"ImageVolumeGeometry",vm:"1",version:"Supplement_156"},"(0070,1301)":{tag:"(0070,1301)",vr:"SQ",name:"VolumeCroppingSequence",vm:"1",version:"Supplement_156"},"(0070,1302)":{tag:"(0070,1302)",vr:"CS",name:"VolumeCroppingMethod",vm:"1",version:"Supplement_156"},"(0070,1303)":{tag:"(0070,1303)",vr:"FD",name:"BoundingBoxCrop",vm:"6",version:"Supplement_156"},"(0070,1304)":{tag:"(0070,1304)",vr:"SQ",name:"ObliqueCroppingPlaneSequence",vm:"1",version:"Supplement_156"},"(0070,1305)":{tag:"(0070,1305)",vr:"FD",name:"ObliqueCroppingPlane",vm:"4",version:"Supplement_156"},"(0070,1306)":{tag:"(0070,1306)",vr:"FD",name:"ObliqueCroppingPlaneNormal",vm:"3",version:"Supplement_156"},"(0070,1309)":{tag:"(0070,1309)",vr:"US",name:"CroppingSpecificationNumber",vm:"1",version:"Supplement_156"},"(0070,1501)":{tag:"(0070,1501)",vr:"CS",name:"MultiPlanarReconstructionStyle",vm:"1",version:"Supplement_156"},"(0070,1502)":{tag:"(0070,1502)",vr:"CS",name:"MPRThicknessType",vm:"1",version:"Supplement_156"},"(0070,1503)":{tag:"(0070,1503)",vr:"FD",name:"MPRSlabThickness",vm:"1",version:"Supplement_156"},"(0070,1505)":{tag:"(0070,1505)",vr:"FD",name:"MPRTopLeftHandCorner",vm:"3",version:"Supplement_156"},"(0070,1507)":{tag:"(0070,1507)",vr:"FD",name:"MPRViewWidthDirection",vm:"3",version:"Supplement_156"},"(0070,1508)":{tag:"(0070,1508)",vr:"FD",name:"MPRViewWidth",vm:"1",version:"Supplement_156"},"(0070,150C)":{tag:"(0070,150C)",vr:"FL",name:"NumberOfVolumetricCurvePoints",vm:"1",version:"Supplement_156"},"(0070,150D)":{tag:"(0070,150D)",vr:"OD",name:"VolumetricCurvePoints",vm:"1",version:"Supplement_156"},"(0070,1511)":{tag:"(0070,1511)",vr:"FD",name:"MPRViewHeightDirection",vm:"3",version:"Supplement_156"},"(0070,1512)":{tag:"(0070,1512)",vr:"FD",name:"MPRViewHeight",vm:"1",version:"Supplement_156"},"(0070,1801)":{tag:"(0070,1801)",vr:"SQ",name:"PresentationStateClassificationComponentSequence",vm:"1",version:"Supplement_156"},"(0070,1802)":{tag:"(0070,1802)",vr:"CS",name:"ComponentType",vm:"1",version:"Supplement_156"},"(0070,1803)":{tag:"(0070,1803)",vr:"SQ",name:"ComponentInputSequence",vm:"1",version:"Supplement_156"},"(0070,1804)":{tag:"(0070,1804)",vr:"US",name:"VolumetricPresentationInputIndex",vm:"1",version:"Supplement_156"},"(0070,1805)":{tag:"(0070,1805)",vr:"SQ",name:"PresentationStateCompositorComponentSequence",vm:"1",version:"Supplement_156"},"(0070,1806)":{tag:"(0070,1806)",vr:"SQ",name:"WeightingTransferFunctionSequence",vm:"1",version:"Supplement_156"},"(0070,1807)":{tag:"(0070,1807)",vr:"US",name:"WeightingLookupTableDescriptor",vm:"3",version:"Supplement_156"},"(0070,1808)":{tag:"(0070,1808)",vr:"OB",name:"WeightingLookupTableData",vm:"1",version:"Supplement_156"},"(0070,1901)":{tag:"(0070,1901)",vr:"SQ",name:"VolumetricAnnotationSequence",vm:"1",version:"Supplement_156"},"(0070,1903)":{tag:"(0070,1903)",vr:"SQ",name:"ReferencedStructuredContextSequence",vm:"1",version:"Supplement_156"},"(0070,1904)":{tag:"(0070,1904)",vr:"UI",name:"ReferencedContentItem",vm:"1",version:"Supplement_156"},"(0070,1905)":{tag:"(0070,1905)",vr:"SQ",name:"VolumetricPresentationInputAnnotationSequence",vm:"1",version:"Supplement_156"},"(0070,1907)":{tag:"(0070,1907)",vr:"CS",name:"AnnotationClipping",vm:"1",version:"Supplement_156"},"(0070,1A01)":{tag:"(0070,1A01)",vr:"CS",name:"PresentationAnimationStyle",vm:"1",version:"Supplement_156"},"(0070,1A03)":{tag:"(0070,1A03)",vr:"FD",name:"RecommendedAnimationRate",vm:"1",version:"Supplement_156"},"(0070,1A04)":{tag:"(0070,1A04)",vr:"SQ",name:"AnimationCurveSequence",vm:"1",version:"Supplement_156"},"(0070,1A05)":{tag:"(0070,1A05)",vr:"FD",name:"AnimationStepSize",vm:"1",version:"Supplement_156"},"(0040,4070)":{tag:"(0040,4070)",vr:"SQ",name:"OutputDestinationSequence",vm:"1",version:"CP_1441"},"(0040,4071)":{tag:"(0040,4071)",vr:"SQ",name:"DICOMStorageSequence",vm:"1",version:"CP_1441"},"(0040,4072)":{tag:"(0040,4072)",vr:"SQ",name:"STOWRSStorageSequence",vm:"1",version:"CP_1441"},"(0040,4073)":{tag:"(0040,4073)",vr:"UR",name:"StorageURL",vm:"1",version:"CP_1441"},"(0040,4074)":{tag:"(0040,4074)",vr:"SQ",name:"XDSStorageSequence",vm:"1",version:"CP_1441"},"(0028,2002)":{tag:"(0028,2002)",vr:"CS",name:"ColorSpace",vm:"1",version:"CP_1454"},"(0040,9213)":{tag:"(0040,9213)",vr:"FD",name:"DoubleFloatRealWorldValueLastValueMapped",vm:"1",version:"CP_1458"},"(0040,9214)":{tag:"(0040,9214)",vr:"FD",name:"DoubleFloatRealWorldValueFirstValueMapped",vm:"1",version:"CP_1458"},"(0018,1320)":{tag:"(0018,1320)",vr:"FL",name:"B1rms",vm:"1",version:"CP_1461"},"(0009-o-FFFF,0000)":{tag:"(0009-o-FFFF,0000)",vr:"UL",name:"PrivateGroupLength",vm:"1",version:"PRIVATE"},"(0009-o-FFFF,0010-u-00FF)":{tag:"(0009-o-FFFF,0010-u-00FF)",vr:"LO",name:"PrivateCreator",vm:"1",version:"PRIVATE"},"(0001-o-0007,0000)":{tag:"(0001-o-0007,0000)",vr:"UL",name:"IllegalGroupLength",vm:"1",version:"ILLEGAL"},"(0001-o-0007,0010-u-00FF)":{tag:"(0001-o-0007,0010-u-00FF)",vr:"LO",name:"IllegalPrivateCreator",vm:"1",version:"ILLEGAL"},"(0000-u-FFFF,0000)":{tag:"(0000-u-FFFF,0000)",vr:"UL",name:"GenericGroupLength",vm:"1",version:"GENERIC"},"(0000,0001)":{tag:"(0000,0001)",vr:"UL",name:"RETIRED_CommandLengthToEnd",vm:"1",version:"DICOM/retired"},"(0000,0010)":{tag:"(0000,0010)",vr:"SH",name:"RETIRED_CommandRecognitionCode",vm:"1",version:"DICOM/retired"},"(0000,0200)":{tag:"(0000,0200)",vr:"AE",name:"RETIRED_Initiator",vm:"1",version:"DICOM/retired"},"(0000,0300)":{tag:"(0000,0300)",vr:"AE",name:"RETIRED_Receiver",vm:"1",version:"DICOM/retired"},"(0000,0400)":{tag:"(0000,0400)",vr:"AE",name:"RETIRED_FindLocation",vm:"1",version:"DICOM/retired"},"(0000,0850)":{tag:"(0000,0850)",vr:"US",name:"RETIRED_NumberOfMatches",vm:"1",version:"DICOM/retired"},"(0000,0860)":{tag:"(0000,0860)",vr:"US",name:"RETIRED_ResponseSequenceNumber",vm:"1",version:"DICOM/retired"},"(0000,4000)":{tag:"(0000,4000)",vr:"LT",name:"RETIRED_DialogReceiver",vm:"1",version:"DICOM/retired"},"(0000,4010)":{tag:"(0000,4010)",vr:"LT",name:"RETIRED_TerminalType",vm:"1",version:"DICOM/retired"},"(0000,5010)":{tag:"(0000,5010)",vr:"SH",name:"RETIRED_MessageSetID",vm:"1",version:"DICOM/retired"},"(0000,5020)":{tag:"(0000,5020)",vr:"SH",name:"RETIRED_EndMessageID",vm:"1",version:"DICOM/retired"},"(0000,5110)":{tag:"(0000,5110)",vr:"LT",name:"RETIRED_DisplayFormat",vm:"1",version:"DICOM/retired"},"(0000,5120)":{tag:"(0000,5120)",vr:"LT",name:"RETIRED_PagePositionID",vm:"1",version:"DICOM/retired"},"(0000,5130)":{tag:"(0000,5130)",vr:"CS",name:"RETIRED_TextFormatID",vm:"1",version:"DICOM/retired"},"(0000,5140)":{tag:"(0000,5140)",vr:"CS",name:"RETIRED_NormalReverse",vm:"1",version:"DICOM/retired"},"(0000,5150)":{tag:"(0000,5150)",vr:"CS",name:"RETIRED_AddGrayScale",vm:"1",version:"DICOM/retired"},"(0000,5160)":{tag:"(0000,5160)",vr:"CS",name:"RETIRED_Borders",vm:"1",version:"DICOM/retired"},"(0000,5170)":{tag:"(0000,5170)",vr:"IS",name:"RETIRED_Copies",vm:"1",version:"DICOM/retired"},"(0000,5180)":{tag:"(0000,5180)",vr:"CS",name:"RETIRED_CommandMagnificationType",vm:"1",version:"DICOM/retired"},"(0000,5190)":{tag:"(0000,5190)",vr:"CS",name:"RETIRED_Erase",vm:"1",version:"DICOM/retired"},"(0000,51A0)":{tag:"(0000,51A0)",vr:"CS",name:"RETIRED_Print",vm:"1",version:"DICOM/retired"},"(0000,51B0)":{tag:"(0000,51B0)",vr:"US",name:"RETIRED_Overlays",vm:"1-n",version:"DICOM/retired"},"(0004,1504)":{tag:"(0004,1504)",vr:"up",name:"RETIRED_MRDRDirectoryRecordOffset",vm:"1",version:"DICOM/retired"},"(0004,1600)":{tag:"(0004,1600)",vr:"UL",name:"RETIRED_NumberOfReferences",vm:"1",version:"DICOM/retired"},"(0008,0001)":{tag:"(0008,0001)",vr:"UL",name:"RETIRED_LengthToEnd",vm:"1",version:"DICOM/retired"},"(0008,0010)":{tag:"(0008,0010)",vr:"SH",name:"RETIRED_RecognitionCode",vm:"1",version:"DICOM/retired"},"(0008,0024)":{tag:"(0008,0024)",vr:"DA",name:"RETIRED_OverlayDate",vm:"1",version:"DICOM/retired"},"(0008,0025)":{tag:"(0008,0025)",vr:"DA",name:"RETIRED_CurveDate",vm:"1",version:"DICOM/retired"},"(0008,0034)":{tag:"(0008,0034)",vr:"TM",name:"RETIRED_OverlayTime",vm:"1",version:"DICOM/retired"},"(0008,0035)":{tag:"(0008,0035)",vr:"TM",name:"RETIRED_CurveTime",vm:"1",version:"DICOM/retired"},"(0008,0040)":{tag:"(0008,0040)",vr:"US",name:"RETIRED_DataSetType",vm:"1",version:"DICOM/retired"},"(0008,0041)":{tag:"(0008,0041)",vr:"LO",name:"RETIRED_DataSetSubtype",vm:"1",version:"DICOM/retired"},"(0008,0042)":{tag:"(0008,0042)",vr:"CS",name:"RETIRED_NuclearMedicineSeriesType",vm:"1",version:"DICOM/retired"},"(0008,1000)":{tag:"(0008,1000)",vr:"AE",name:"RETIRED_NetworkID",vm:"1",version:"DICOM/retired"},"(0008,1100)":{tag:"(0008,1100)",vr:"SQ",name:"RETIRED_ReferencedResultsSequence",vm:"1",version:"DICOM/retired"},"(0008,1130)":{tag:"(0008,1130)",vr:"SQ",name:"RETIRED_ReferencedOverlaySequence",vm:"1",version:"DICOM/retired"},"(0008,1145)":{tag:"(0008,1145)",vr:"SQ",name:"RETIRED_ReferencedCurveSequence",vm:"1",version:"DICOM/retired"},"(0008,2110)":{tag:"(0008,2110)",vr:"CS",name:"RETIRED_LossyImageCompressionRetired",vm:"1",version:"DICOM/retired"},"(0008,2200)":{tag:"(0008,2200)",vr:"CS",name:"RETIRED_TransducerPosition",vm:"1",version:"DICOM/retired"},"(0008,2204)":{tag:"(0008,2204)",vr:"CS",name:"RETIRED_TransducerOrientation",vm:"1",version:"DICOM/retired"},"(0008,2208)":{tag:"(0008,2208)",vr:"CS",name:"RETIRED_AnatomicStructure",vm:"1",version:"DICOM/retired"},"(0008,2240)":{tag:"(0008,2240)",vr:"SQ",name:"RETIRED_TransducerPositionSequence",vm:"1",version:"DICOM/retired"},"(0008,2242)":{tag:"(0008,2242)",vr:"SQ",name:"RETIRED_TransducerPositionModifierSequence",vm:"1",version:"DICOM/retired"},"(0008,2244)":{tag:"(0008,2244)",vr:"SQ",name:"RETIRED_TransducerOrientationSequence",vm:"1",version:"DICOM/retired"},"(0008,2246)":{tag:"(0008,2246)",vr:"SQ",name:"RETIRED_TransducerOrientationModifierSequence",vm:"1",version:"DICOM/retired"},"(0008,2251)":{tag:"(0008,2251)",vr:"SQ",name:"RETIRED_AnatomicStructureSpaceOrRegionCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0008,2253)":{tag:"(0008,2253)",vr:"SQ",name:"RETIRED_AnatomicPortalOfEntranceCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0008,2255)":{tag:"(0008,2255)",vr:"SQ",name:"RETIRED_AnatomicApproachDirectionCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0008,2256)":{tag:"(0008,2256)",vr:"ST",name:"RETIRED_AnatomicPerspectiveDescriptionTrial",vm:"1",version:"DICOM/retired"},"(0008,2257)":{tag:"(0008,2257)",vr:"SQ",name:"RETIRED_AnatomicPerspectiveCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0008,2258)":{tag:"(0008,2258)",vr:"ST",name:"RETIRED_AnatomicLocationOfExaminingInstrumentDescriptionTrial",vm:"1",version:"DICOM/retired"},"(0008,2259)":{tag:"(0008,2259)",vr:"SQ",name:"RETIRED_AnatomicLocationOfExaminingInstrumentCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0008,225A)":{tag:"(0008,225A)",vr:"SQ",name:"RETIRED_AnatomicStructureSpaceOrRegionModifierCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0008,225C)":{tag:"(0008,225C)",vr:"SQ",name:"RETIRED_OnAxisBackgroundAnatomicStructureCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0008,4000)":{tag:"(0008,4000)",vr:"LT",name:"RETIRED_IdentifyingComments",vm:"1",version:"DICOM/retired"},"(0010,1050)":{tag:"(0010,1050)",vr:"LO",name:"RETIRED_InsurancePlanIdentification",vm:"1-n",version:"DICOM/retired"},"(0014,0023)":{tag:"(0014,0023)",vr:"ST",name:"RETIRED_CADFileFormat",vm:"1-n",version:"DICOM/retired"},"(0014,0024)":{tag:"(0014,0024)",vr:"ST",name:"RETIRED_ComponentReferenceSystem",vm:"1-n",version:"DICOM/retired"},"(0014,0045)":{tag:"(0014,0045)",vr:"ST",name:"RETIRED_MaterialPropertiesFileFormatRetired",vm:"1-n",version:"DICOM/retired"},"(0018,0030)":{tag:"(0018,0030)",vr:"LO",name:"RETIRED_Radionuclide",vm:"1-n",version:"DICOM/retired"},"(0018,0032)":{tag:"(0018,0032)",vr:"DS",name:"RETIRED_EnergyWindowCenterline",vm:"1",version:"DICOM/retired"},"(0018,0033)":{tag:"(0018,0033)",vr:"DS",name:"RETIRED_EnergyWindowTotalWidth",vm:"1-n",version:"DICOM/retired"},"(0018,0037)":{tag:"(0018,0037)",vr:"CS",name:"RETIRED_TherapyType",vm:"1",version:"DICOM/retired"},"(0018,0039)":{tag:"(0018,0039)",vr:"CS",name:"RETIRED_TherapyDescription",vm:"1",version:"DICOM/retired"},"(0018,0061)":{tag:"(0018,0061)",vr:"DS",name:"RETIRED_undefined",vm:"1",version:"DICOM/retired"},"(0018,1011)":{tag:"(0018,1011)",vr:"LO",name:"RETIRED_HardcopyCreationDeviceID",vm:"1",version:"DICOM/retired"},"(0018,1017)":{tag:"(0018,1017)",vr:"LO",name:"RETIRED_HardcopyDeviceManufacturer",vm:"1",version:"DICOM/retired"},"(0018,101A)":{tag:"(0018,101A)",vr:"LO",name:"RETIRED_HardcopyDeviceSoftwareVersion",vm:"1-n",version:"DICOM/retired"},"(0018,101B)":{tag:"(0018,101B)",vr:"LO",name:"RETIRED_HardcopyDeviceManufacturerModelName",vm:"1",version:"DICOM/retired"},"(0018,1141)":{tag:"(0018,1141)",vr:"DS",name:"RETIRED_AngularPosition",vm:"1",version:"DICOM/retired"},"(0018,1146)":{tag:"(0018,1146)",vr:"DS",name:"RETIRED_RotationOffset",vm:"1-n",version:"DICOM/retired"},"(0018,1240)":{tag:"(0018,1240)",vr:"IS",name:"RETIRED_UpperLowerPixelValues",vm:"1-n",version:"DICOM/retired"},"(0018,4000)":{tag:"(0018,4000)",vr:"LT",name:"RETIRED_AcquisitionComments",vm:"1",version:"DICOM/retired"},"(0018,5021)":{tag:"(0018,5021)",vr:"LO",name:"RETIRED_PostprocessingFunction",vm:"1",version:"DICOM/retired"},"(0018,5030)":{tag:"(0018,5030)",vr:"DS",name:"RETIRED_DynamicRange",vm:"1",version:"DICOM/retired"},"(0018,5040)":{tag:"(0018,5040)",vr:"DS",name:"RETIRED_TotalGain",vm:"1",version:"DICOM/retired"},"(0018,5210)":{tag:"(0018,5210)",vr:"DS",name:"RETIRED_ImageTransformationMatrix",vm:"6",version:"DICOM/retired"},"(0018,5212)":{tag:"(0018,5212)",vr:"DS",name:"RETIRED_ImageTranslationVector",vm:"3",version:"DICOM/retired"},"(0018,6038)":{tag:"(0018,6038)",vr:"UL",name:"RETIRED_DopplerSampleVolumeXPositionRetired",vm:"1",version:"DICOM/retired"},"(0018,603A)":{tag:"(0018,603A)",vr:"UL",name:"RETIRED_DopplerSampleVolumeYPositionRetired",vm:"1",version:"DICOM/retired"},"(0018,603C)":{tag:"(0018,603C)",vr:"UL",name:"RETIRED_TMLinePositionX0Retired",vm:"1",version:"DICOM/retired"},"(0018,603E)":{tag:"(0018,603E)",vr:"UL",name:"RETIRED_TMLinePositionY0Retired",vm:"1",version:"DICOM/retired"},"(0018,6040)":{tag:"(0018,6040)",vr:"UL",name:"RETIRED_TMLinePositionX1Retired",vm:"1",version:"DICOM/retired"},"(0018,6042)":{tag:"(0018,6042)",vr:"UL",name:"RETIRED_TMLinePositionY1Retired",vm:"1",version:"DICOM/retired"},"(0018,9096)":{tag:"(0018,9096)",vr:"FD",name:"RETIRED_ParallelReductionFactorInPlaneRetired",vm:"1",version:"DICOM/retired"},"(0018,9166)":{tag:"(0018,9166)",vr:"CS",name:"RETIRED_BulkMotionStatus",vm:"1",version:"DICOM/retired"},"(0018,9195)":{tag:"(0018,9195)",vr:"FD",name:"RETIRED_ChemicalShiftMinimumIntegrationLimitInHz",vm:"1",version:"DICOM/retired"},"(0018,9196)":{tag:"(0018,9196)",vr:"FD",name:"RETIRED_ChemicalShiftMaximumIntegrationLimitInHz",vm:"1",version:"DICOM/retired"},"(0020,0014)":{tag:"(0020,0014)",vr:"IS",name:"RETIRED_IsotopeNumber",vm:"1",version:"DICOM/retired"},"(0020,0015)":{tag:"(0020,0015)",vr:"IS",name:"RETIRED_PhaseNumber",vm:"1",version:"DICOM/retired"},"(0020,0016)":{tag:"(0020,0016)",vr:"IS",name:"RETIRED_IntervalNumber",vm:"1",version:"DICOM/retired"},"(0020,0017)":{tag:"(0020,0017)",vr:"IS",name:"RETIRED_TimeSlotNumber",vm:"1",version:"DICOM/retired"},"(0020,0018)":{tag:"(0020,0018)",vr:"IS",name:"RETIRED_AngleNumber",vm:"1",version:"DICOM/retired"},"(0020,0022)":{tag:"(0020,0022)",vr:"IS",name:"RETIRED_OverlayNumber",vm:"1",version:"DICOM/retired"},"(0020,0024)":{tag:"(0020,0024)",vr:"IS",name:"RETIRED_CurveNumber",vm:"1",version:"DICOM/retired"},"(0020,0026)":{tag:"(0020,0026)",vr:"IS",name:"RETIRED_LUTNumber",vm:"1",version:"DICOM/retired"},"(0020,0030)":{tag:"(0020,0030)",vr:"DS",name:"RETIRED_ImagePosition",vm:"3",version:"DICOM/retired"},"(0020,0035)":{tag:"(0020,0035)",vr:"DS",name:"RETIRED_ImageOrientation",vm:"6",version:"DICOM/retired"},"(0020,0050)":{tag:"(0020,0050)",vr:"DS",name:"RETIRED_Location",vm:"1",version:"DICOM/retired"},"(0020,0070)":{tag:"(0020,0070)",vr:"LO",name:"RETIRED_ImageGeometryType",vm:"1",version:"DICOM/retired"},"(0020,0080)":{tag:"(0020,0080)",vr:"CS",name:"RETIRED_MaskingImage",vm:"1-n",version:"DICOM/retired"},"(0020,00AA)":{tag:"(0020,00AA)",vr:"IS",name:"RETIRED_ReportNumber",vm:"1",version:"DICOM/retired"},"(0020,1000)":{tag:"(0020,1000)",vr:"IS",name:"RETIRED_SeriesInStudy",vm:"1",version:"DICOM/retired"},"(0020,1001)":{tag:"(0020,1001)",vr:"IS",name:"RETIRED_AcquisitionsInSeries",vm:"1",version:"DICOM/retired"},"(0020,1003)":{tag:"(0020,1003)",vr:"IS",name:"RETIRED_ImagesInSeries",vm:"1",version:"DICOM/retired"},"(0020,1004)":{tag:"(0020,1004)",vr:"IS",name:"RETIRED_AcquisitionsInStudy",vm:"1",version:"DICOM/retired"},"(0020,1005)":{tag:"(0020,1005)",vr:"IS",name:"RETIRED_ImagesInStudy",vm:"1",version:"DICOM/retired"},"(0020,1020)":{tag:"(0020,1020)",vr:"LO",name:"RETIRED_Reference",vm:"1-n",version:"DICOM/retired"},"(0020,1070)":{tag:"(0020,1070)",vr:"IS",name:"RETIRED_OtherStudyNumbers",vm:"1-n",version:"DICOM/retired"},"(0020,3100-31FF)":{tag:"(0020,3100-31FF)",vr:"CS",name:"RETIRED_SourceImageIDs",vm:"1-n",version:"DICOM/retired"},"(0020,3401)":{tag:"(0020,3401)",vr:"CS",name:"RETIRED_ModifyingDeviceID",vm:"1",version:"DICOM/retired"},"(0020,3402)":{tag:"(0020,3402)",vr:"CS",name:"RETIRED_ModifiedImageID",vm:"1",version:"DICOM/retired"},"(0020,3403)":{tag:"(0020,3403)",vr:"DA",name:"RETIRED_ModifiedImageDate",vm:"1",version:"DICOM/retired"},"(0020,3404)":{tag:"(0020,3404)",vr:"LO",name:"RETIRED_ModifyingDeviceManufacturer",vm:"1",version:"DICOM/retired"},"(0020,3405)":{tag:"(0020,3405)",vr:"TM",name:"RETIRED_ModifiedImageTime",vm:"1",version:"DICOM/retired"},"(0020,3406)":{tag:"(0020,3406)",vr:"LO",name:"RETIRED_ModifiedImageDescription",vm:"1",version:"DICOM/retired"},"(0020,5000)":{tag:"(0020,5000)",vr:"AT",name:"RETIRED_OriginalImageIdentification",vm:"1-n",version:"DICOM/retired"},"(0020,5002)":{tag:"(0020,5002)",vr:"LO",name:"RETIRED_OriginalImageIdentificationNomenclature",vm:"1-n",version:"DICOM/retired"},"(0022,1094)":{tag:"(0022,1094)",vr:"LO",name:"RETIRED_LensConstantDescription",vm:"1",version:"DICOM/retired"},"(0022,1153)":{tag:"(0022,1153)",vr:"SQ",name:"RETIRED_OphthalmicAxialLengthAcquisitionMethodCodeSequence",vm:"1",version:"DICOM/retired"},"(0022,1265)":{tag:"(0022,1265)",vr:"SQ",name:"RETIRED_OphthalmicAxialLengthQualityMetricTypeCodeSequence",vm:"1",version:"DICOM/retired"},"(0022,1273)":{tag:"(0022,1273)",vr:"LO",name:"RETIRED_OphthalmicAxialLengthQualityMetricTypeDescription",vm:"1",version:"DICOM/retired"},"(0028,0005)":{tag:"(0028,0005)",vr:"US",name:"RETIRED_ImageDimensions",vm:"1",version:"DICOM/retired"},"(0028,0012)":{tag:"(0028,0012)",vr:"US",name:"RETIRED_Planes",vm:"1",version:"DICOM/retired"},"(0028,0040)":{tag:"(0028,0040)",vr:"CS",name:"RETIRED_ImageFormat",vm:"1",version:"DICOM/retired"},"(0028,0050)":{tag:"(0028,0050)",vr:"LO",name:"RETIRED_ManipulatedImage",vm:"1-n",version:"DICOM/retired"},"(0028,005F)":{tag:"(0028,005F)",vr:"LO",name:"RETIRED_CompressionRecognitionCode",vm:"1",version:"DICOM/retired"},"(0028,0060)":{tag:"(0028,0060)",vr:"CS",name:"RETIRED_CompressionCode",vm:"1",version:"DICOM/retired"},"(0028,0061)":{tag:"(0028,0061)",vr:"SH",name:"RETIRED_CompressionOriginator",vm:"1",version:"DICOM/retired"},"(0028,0062)":{tag:"(0028,0062)",vr:"LO",name:"RETIRED_CompressionLabel",vm:"1",version:"DICOM/retired"},"(0028,0063)":{tag:"(0028,0063)",vr:"SH",name:"RETIRED_CompressionDescription",vm:"1",version:"DICOM/retired"},"(0028,0065)":{tag:"(0028,0065)",vr:"CS",name:"RETIRED_CompressionSequence",vm:"1-n",version:"DICOM/retired"},"(0028,0066)":{tag:"(0028,0066)",vr:"AT",name:"RETIRED_CompressionStepPointers",vm:"1-n",version:"DICOM/retired"},"(0028,0068)":{tag:"(0028,0068)",vr:"US",name:"RETIRED_RepeatInterval",vm:"1",version:"DICOM/retired"},"(0028,0069)":{tag:"(0028,0069)",vr:"US",name:"RETIRED_BitsGrouped",vm:"1",version:"DICOM/retired"},"(0028,0070)":{tag:"(0028,0070)",vr:"US",name:"RETIRED_PerimeterTable",vm:"1-n",version:"DICOM/retired"},"(0028,0071)":{tag:"(0028,0071)",vr:"xs",name:"RETIRED_PerimeterValue",vm:"1",version:"DICOM/retired"},"(0028,0080)":{tag:"(0028,0080)",vr:"US",name:"RETIRED_PredictorRows",vm:"1",version:"DICOM/retired"},"(0028,0081)":{tag:"(0028,0081)",vr:"US",name:"RETIRED_PredictorColumns",vm:"1",version:"DICOM/retired"},"(0028,0082)":{tag:"(0028,0082)",vr:"US",name:"RETIRED_PredictorConstants",vm:"1-n",version:"DICOM/retired"},"(0028,0090)":{tag:"(0028,0090)",vr:"CS",name:"RETIRED_BlockedPixels",vm:"1",version:"DICOM/retired"},"(0028,0091)":{tag:"(0028,0091)",vr:"US",name:"RETIRED_BlockRows",vm:"1",version:"DICOM/retired"},"(0028,0092)":{tag:"(0028,0092)",vr:"US",name:"RETIRED_BlockColumns",vm:"1",version:"DICOM/retired"},"(0028,0093)":{tag:"(0028,0093)",vr:"US",name:"RETIRED_RowOverlap",vm:"1",version:"DICOM/retired"},"(0028,0094)":{tag:"(0028,0094)",vr:"US",name:"RETIRED_ColumnOverlap",vm:"1",version:"DICOM/retired"},"(0028,0104)":{tag:"(0028,0104)",vr:"xs",name:"RETIRED_SmallestValidPixelValue",vm:"1",version:"DICOM/retired"},"(0028,0105)":{tag:"(0028,0105)",vr:"xs",name:"RETIRED_LargestValidPixelValue",vm:"1",version:"DICOM/retired"},"(0028,0110)":{tag:"(0028,0110)",vr:"xs",name:"RETIRED_SmallestImagePixelValueInPlane",vm:"1",version:"DICOM/retired"},"(0028,0111)":{tag:"(0028,0111)",vr:"xs",name:"RETIRED_LargestImagePixelValueInPlane",vm:"1",version:"DICOM/retired"},"(0028,0200)":{tag:"(0028,0200)",vr:"US",name:"RETIRED_ImageLocation",vm:"1",version:"DICOM/retired"},"(0028,0400)":{tag:"(0028,0400)",vr:"LO",name:"RETIRED_TransformLabel",vm:"1",version:"DICOM/retired"},"(0028,0401)":{tag:"(0028,0401)",vr:"LO",name:"RETIRED_TransformVersionNumber",vm:"1",version:"DICOM/retired"},"(0028,0402)":{tag:"(0028,0402)",vr:"US",name:"RETIRED_NumberOfTransformSteps",vm:"1",version:"DICOM/retired"},"(0028,0403)":{tag:"(0028,0403)",vr:"LO",name:"RETIRED_SequenceOfCompressedData",vm:"1-n",version:"DICOM/retired"},"(0028,0404)":{tag:"(0028,0404)",vr:"AT",name:"RETIRED_DetailsOfCoefficients",vm:"1-n",version:"DICOM/retired"},"(0028,0410)":{tag:"(0028,0410)",vr:"US",name:"RETIRED_RowsForNthOrderCoefficients",vm:"1",version:"DICOM/retired"},"(0028,0411)":{tag:"(0028,0411)",vr:"US",name:"RETIRED_ColumnsForNthOrderCoefficients",vm:"1",version:"DICOM/retired"},"(0028,0412)":{tag:"(0028,0412)",vr:"LO",name:"RETIRED_CoefficientCoding",vm:"1-n",version:"DICOM/retired"},"(0028,0413)":{tag:"(0028,0413)",vr:"AT",name:"RETIRED_CoefficientCodingPointers",vm:"1-n",version:"DICOM/retired"},"(0028,0700)":{tag:"(0028,0700)",vr:"LO",name:"RETIRED_DCTLabel",vm:"1",version:"DICOM/retired"},"(0028,0701)":{tag:"(0028,0701)",vr:"CS",name:"RETIRED_DataBlockDescription",vm:"1-n",version:"DICOM/retired"},"(0028,0702)":{tag:"(0028,0702)",vr:"AT",name:"RETIRED_DataBlock",vm:"1-n",version:"DICOM/retired"},"(0028,0710)":{tag:"(0028,0710)",vr:"US",name:"RETIRED_NormalizationFactorFormat",vm:"1",version:"DICOM/retired"},"(0028,0720)":{tag:"(0028,0720)",vr:"US",name:"RETIRED_ZonalMapNumberFormat",vm:"1",version:"DICOM/retired"},"(0028,0721)":{tag:"(0028,0721)",vr:"AT",name:"RETIRED_ZonalMapLocation",vm:"1-n",version:"DICOM/retired"},"(0028,0722)":{tag:"(0028,0722)",vr:"US",name:"RETIRED_ZonalMapFormat",vm:"1",version:"DICOM/retired"},"(0028,0730)":{tag:"(0028,0730)",vr:"US",name:"RETIRED_AdaptiveMapFormat",vm:"1",version:"DICOM/retired"},"(0028,0740)":{tag:"(0028,0740)",vr:"US",name:"RETIRED_CodeNumberFormat",vm:"1",version:"DICOM/retired"},"(0028,0800)":{tag:"(0028,0800)",vr:"CS",name:"RETIRED_CodeLabel",vm:"1-n",version:"DICOM/retired"},"(0028,0802)":{tag:"(0028,0802)",vr:"US",name:"RETIRED_NumberOfTables",vm:"1",version:"DICOM/retired"},"(0028,0803)":{tag:"(0028,0803)",vr:"AT",name:"RETIRED_CodeTableLocation",vm:"1-n",version:"DICOM/retired"},"(0028,0804)":{tag:"(0028,0804)",vr:"US",name:"RETIRED_BitsForCodeWord",vm:"1",version:"DICOM/retired"},"(0028,0808)":{tag:"(0028,0808)",vr:"AT",name:"RETIRED_ImageDataLocation",vm:"1-n",version:"DICOM/retired"},"(0028,1080)":{tag:"(0028,1080)",vr:"CS",name:"RETIRED_GrayScale",vm:"1",version:"DICOM/retired"},"(0028,1100)":{tag:"(0028,1100)",vr:"xs",name:"RETIRED_GrayLookupTableDescriptor",vm:"3",version:"DICOM/retired"},"(0028,1111)":{tag:"(0028,1111)",vr:"xs",name:"RETIRED_LargeRedPaletteColorLookupTableDescriptor",vm:"4",version:"DICOM/retired"},"(0028,1112)":{tag:"(0028,1112)",vr:"xs",name:"RETIRED_LargeGreenPaletteColorLookupTableDescriptor",vm:"4",version:"DICOM/retired"},"(0028,1113)":{tag:"(0028,1113)",vr:"xs",name:"RETIRED_LargeBluePaletteColorLookupTableDescriptor",vm:"4",version:"DICOM/retired"},"(0028,1200)":{tag:"(0028,1200)",vr:"lt",name:"RETIRED_GrayLookupTableData",vm:"1-n",version:"DICOM/retired"},"(0028,1211)":{tag:"(0028,1211)",vr:"OW",name:"RETIRED_LargeRedPaletteColorLookupTableData",vm:"1",version:"DICOM/retired"},"(0028,1212)":{tag:"(0028,1212)",vr:"OW",name:"RETIRED_LargeGreenPaletteColorLookupTableData",vm:"1",version:"DICOM/retired"},"(0028,1213)":{tag:"(0028,1213)",vr:"OW",name:"RETIRED_LargeBluePaletteColorLookupTableData",vm:"1",version:"DICOM/retired"},"(0028,1214)":{tag:"(0028,1214)",vr:"UI",name:"RETIRED_LargePaletteColorLookupTableUID",vm:"1",version:"DICOM/retired"},"(0028,4000)":{tag:"(0028,4000)",vr:"LT",name:"RETIRED_ImagePresentationComments",vm:"1",version:"DICOM/retired"},"(0028,5000)":{tag:"(0028,5000)",vr:"SQ",name:"RETIRED_BiPlaneAcquisitionSequence",vm:"1",version:"DICOM/retired"},"(0028,6030)":{tag:"(0028,6030)",vr:"US",name:"RETIRED_MaskPointers",vm:"1-n",version:"DICOM/retired"},"(0028,9099)":{tag:"(0028,9099)",vr:"US",name:"RETIRED_LargestMonochromePixelValue",vm:"1",version:"DICOM/retired"},"(0032,000A)":{tag:"(0032,000A)",vr:"CS",name:"RETIRED_StudyStatusID",vm:"1",version:"DICOM/retired"},"(0032,000C)":{tag:"(0032,000C)",vr:"CS",name:"RETIRED_StudyPriorityID",vm:"1",version:"DICOM/retired"},"(0032,0012)":{tag:"(0032,0012)",vr:"LO",name:"RETIRED_StudyIDIssuer",vm:"1",version:"DICOM/retired"},"(0032,0032)":{tag:"(0032,0032)",vr:"DA",name:"RETIRED_StudyVerifiedDate",vm:"1",version:"DICOM/retired"},"(0032,0033)":{tag:"(0032,0033)",vr:"TM",name:"RETIRED_StudyVerifiedTime",vm:"1",version:"DICOM/retired"},"(0032,0034)":{tag:"(0032,0034)",vr:"DA",name:"RETIRED_StudyReadDate",vm:"1",version:"DICOM/retired"},"(0032,0035)":{tag:"(0032,0035)",vr:"TM",name:"RETIRED_StudyReadTime",vm:"1",version:"DICOM/retired"},"(0032,1000)":{tag:"(0032,1000)",vr:"DA",name:"RETIRED_ScheduledStudyStartDate",vm:"1",version:"DICOM/retired"},"(0032,1001)":{tag:"(0032,1001)",vr:"TM",name:"RETIRED_ScheduledStudyStartTime",vm:"1",version:"DICOM/retired"},"(0032,1010)":{tag:"(0032,1010)",vr:"DA",name:"RETIRED_ScheduledStudyStopDate",vm:"1",version:"DICOM/retired"},"(0032,1011)":{tag:"(0032,1011)",vr:"TM",name:"RETIRED_ScheduledStudyStopTime",vm:"1",version:"DICOM/retired"},"(0032,1020)":{tag:"(0032,1020)",vr:"LO",name:"RETIRED_ScheduledStudyLocation",vm:"1",version:"DICOM/retired"},"(0032,1021)":{tag:"(0032,1021)",vr:"AE",name:"RETIRED_ScheduledStudyLocationAETitle",vm:"1-n",version:"DICOM/retired"},"(0032,1030)":{tag:"(0032,1030)",vr:"LO",name:"RETIRED_ReasonForStudy",vm:"1",version:"DICOM/retired"},"(0032,1040)":{tag:"(0032,1040)",vr:"DA",name:"RETIRED_StudyArrivalDate",vm:"1",version:"DICOM/retired"},"(0032,1041)":{tag:"(0032,1041)",vr:"TM",name:"RETIRED_StudyArrivalTime",vm:"1",version:"DICOM/retired"},"(0032,1050)":{tag:"(0032,1050)",vr:"DA",name:"RETIRED_StudyCompletionDate",vm:"1",version:"DICOM/retired"},"(0032,1051)":{tag:"(0032,1051)",vr:"TM",name:"RETIRED_StudyCompletionTime",vm:"1",version:"DICOM/retired"},"(0032,1055)":{tag:"(0032,1055)",vr:"CS",name:"RETIRED_StudyComponentStatusID",vm:"1",version:"DICOM/retired"},"(0032,4000)":{tag:"(0032,4000)",vr:"LT",name:"RETIRED_StudyComments",vm:"1",version:"DICOM/retired"},"(0038,0011)":{tag:"(0038,0011)",vr:"LO",name:"RETIRED_IssuerOfAdmissionID",vm:"1",version:"DICOM/retired"},"(0038,001A)":{tag:"(0038,001A)",vr:"DA",name:"RETIRED_ScheduledAdmissionDate",vm:"1",version:"DICOM/retired"},"(0038,001B)":{tag:"(0038,001B)",vr:"TM",name:"RETIRED_ScheduledAdmissionTime",vm:"1",version:"DICOM/retired"},"(0038,001C)":{tag:"(0038,001C)",vr:"DA",name:"RETIRED_ScheduledDischargeDate",vm:"1",version:"DICOM/retired"},"(0038,001D)":{tag:"(0038,001D)",vr:"TM",name:"RETIRED_ScheduledDischargeTime",vm:"1",version:"DICOM/retired"},"(0038,001E)":{tag:"(0038,001E)",vr:"LO",name:"RETIRED_ScheduledPatientInstitutionResidence",vm:"1",version:"DICOM/retired"},"(0038,0030)":{tag:"(0038,0030)",vr:"DA",name:"RETIRED_DischargeDate",vm:"1",version:"DICOM/retired"},"(0038,0032)":{tag:"(0038,0032)",vr:"TM",name:"RETIRED_DischargeTime",vm:"1",version:"DICOM/retired"},"(0038,0040)":{tag:"(0038,0040)",vr:"LO",name:"RETIRED_DischargeDiagnosisDescription",vm:"1",version:"DICOM/retired"},"(0038,0044)":{tag:"(0038,0044)",vr:"SQ",name:"RETIRED_DischargeDiagnosisCodeSequence",vm:"1",version:"DICOM/retired"},"(0038,0061)":{tag:"(0038,0061)",vr:"LO",name:"RETIRED_IssuerOfServiceEpisodeID",vm:"1",version:"DICOM/retired"},"(0040,0307)":{tag:"(0040,0307)",vr:"DS",name:"RETIRED_DistanceSourceToSupport",vm:"1",version:"DICOM/retired"},"(0040,0330)":{tag:"(0040,0330)",vr:"SQ",name:"RETIRED_ReferencedProcedureStepSequence",vm:"1",version:"DICOM/retired"},"(0040,050A)":{tag:"(0040,050A)",vr:"LO",name:"RETIRED_SpecimenAccessionNumber",vm:"1",version:"DICOM/retired"},"(0040,0550)":{tag:"(0040,0550)",vr:"SQ",name:"RETIRED_SpecimenSequence",vm:"1",version:"DICOM/retired"},"(0040,0552)":{tag:"(0040,0552)",vr:"SQ",name:"RETIRED_SpecimenDescriptionSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,0553)":{tag:"(0040,0553)",vr:"ST",name:"RETIRED_SpecimenDescriptionTrial",vm:"1",version:"DICOM/retired"},"(0040,06FA)":{tag:"(0040,06FA)",vr:"LO",name:"RETIRED_SlideIdentifier",vm:"1",version:"DICOM/retired"},"(0040,08D8)":{tag:"(0040,08D8)",vr:"SQ",name:"RETIRED_PixelSpacingSequence",vm:"1",version:"DICOM/retired"},"(0040,08DA)":{tag:"(0040,08DA)",vr:"SQ",name:"RETIRED_CoordinateSystemAxisCodeSequence",vm:"1",version:"DICOM/retired"},"(0040,09F8)":{tag:"(0040,09F8)",vr:"SQ",name:"RETIRED_VitalStainCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,1006)":{tag:"(0040,1006)",vr:"SH",name:"RETIRED_PlacerOrderNumberProcedure",vm:"1",version:"DICOM/retired"},"(0040,1007)":{tag:"(0040,1007)",vr:"SH",name:"RETIRED_FillerOrderNumberProcedure",vm:"1",version:"DICOM/retired"},"(0040,1060)":{tag:"(0040,1060)",vr:"LO",name:"RETIRED_RequestedProcedureDescriptionTrial",vm:"1",version:"DICOM/retired"},"(0040,2001)":{tag:"(0040,2001)",vr:"LO",name:"RETIRED_ReasonForTheImagingServiceRequest",vm:"1",version:"DICOM/retired"},"(0040,2006)":{tag:"(0040,2006)",vr:"SH",name:"RETIRED_PlacerOrderNumberImagingServiceRequestRetired",vm:"1",version:"DICOM/retired"},"(0040,2007)":{tag:"(0040,2007)",vr:"SH",name:"RETIRED_FillerOrderNumberImagingServiceRequestRetired",vm:"1",version:"DICOM/retired"},"(0040,4001)":{tag:"(0040,4001)",vr:"CS",name:"RETIRED_GeneralPurposeScheduledProcedureStepStatus",vm:"1",version:"DICOM/retired"},"(0040,4002)":{tag:"(0040,4002)",vr:"CS",name:"RETIRED_GeneralPurposePerformedProcedureStepStatus",vm:"1",version:"DICOM/retired"},"(0040,4003)":{tag:"(0040,4003)",vr:"CS",name:"RETIRED_GeneralPurposeScheduledProcedureStepPriority",vm:"1",version:"DICOM/retired"},"(0040,4004)":{tag:"(0040,4004)",vr:"SQ",name:"RETIRED_ScheduledProcessingApplicationsCodeSequence",vm:"1",version:"DICOM/retired"},"(0040,4006)":{tag:"(0040,4006)",vr:"CS",name:"RETIRED_MultipleCopiesFlag",vm:"1",version:"DICOM/retired"},"(0040,4015)":{tag:"(0040,4015)",vr:"SQ",name:"RETIRED_ResultingGeneralPurposePerformedProcedureStepsSequence",vm:"1",version:"DICOM/retired"},"(0040,4016)":{tag:"(0040,4016)",vr:"SQ",name:"RETIRED_ReferencedGeneralPurposeScheduledProcedureStepSequence",vm:"1",version:"DICOM/retired"},"(0040,4022)":{tag:"(0040,4022)",vr:"SQ",name:"RETIRED_RelevantInformationSequence",vm:"1",version:"DICOM/retired"},"(0040,4023)":{tag:"(0040,4023)",vr:"UI",name:"RETIRED_ReferencedGeneralPurposeScheduledProcedureStepTransactionUID",vm:"1",version:"DICOM/retired"},"(0040,4031)":{tag:"(0040,4031)",vr:"SQ",name:"RETIRED_RequestedSubsequentWorkitemCodeSequence",vm:"1",version:"DICOM/retired"},"(0040,4032)":{tag:"(0040,4032)",vr:"SQ",name:"RETIRED_NonDICOMOutputCodeSequence",vm:"1",version:"DICOM/retired"},"(0040,A007)":{tag:"(0040,A007)",vr:"CS",name:"RETIRED_FindingsFlagTrial",vm:"1",version:"DICOM/retired"},"(0040,A020)":{tag:"(0040,A020)",vr:"SQ",name:"RETIRED_FindingsSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A021)":{tag:"(0040,A021)",vr:"UI",name:"RETIRED_FindingsGroupUIDTrial",vm:"1",version:"DICOM/retired"},"(0040,A022)":{tag:"(0040,A022)",vr:"UI",name:"RETIRED_ReferencedFindingsGroupUIDTrial",vm:"1",version:"DICOM/retired"},"(0040,A023)":{tag:"(0040,A023)",vr:"DA",name:"RETIRED_FindingsGroupRecordingDateTrial",vm:"1",version:"DICOM/retired"},"(0040,A024)":{tag:"(0040,A024)",vr:"TM",name:"RETIRED_FindingsGroupRecordingTimeTrial",vm:"1",version:"DICOM/retired"},"(0040,A026)":{tag:"(0040,A026)",vr:"SQ",name:"RETIRED_FindingsSourceCategoryCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A028)":{tag:"(0040,A028)",vr:"SQ",name:"RETIRED_DocumentingOrganizationIdentifierCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A047)":{tag:"(0040,A047)",vr:"LO",name:"RETIRED_MeasurementPrecisionDescriptionTrial",vm:"1",version:"DICOM/retired"},"(0040,A057)":{tag:"(0040,A057)",vr:"CS",name:"RETIRED_UrgencyOrPriorityAlertsTrial",vm:"1-n",version:"DICOM/retired"},"(0040,A060)":{tag:"(0040,A060)",vr:"LO",name:"RETIRED_SequencingIndicatorTrial",vm:"1",version:"DICOM/retired"},"(0040,A066)":{tag:"(0040,A066)",vr:"SQ",name:"RETIRED_DocumentIdentifierCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A067)":{tag:"(0040,A067)",vr:"PN",name:"RETIRED_DocumentAuthorTrial",vm:"1",version:"DICOM/retired"},"(0040,A068)":{tag:"(0040,A068)",vr:"SQ",name:"RETIRED_DocumentAuthorIdentifierCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A070)":{tag:"(0040,A070)",vr:"SQ",name:"RETIRED_IdentifierCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A074)":{tag:"(0040,A074)",vr:"OB",name:"RETIRED_ObjectBinaryIdentifierTrial",vm:"1",version:"DICOM/retired"},"(0040,A076)":{tag:"(0040,A076)",vr:"SQ",name:"RETIRED_DocumentingObserverIdentifierCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A085)":{tag:"(0040,A085)",vr:"SQ",name:"RETIRED_ProcedureIdentifierCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A089)":{tag:"(0040,A089)",vr:"OB",name:"RETIRED_ObjectDirectoryBinaryIdentifierTrial",vm:"1",version:"DICOM/retired"},"(0040,A090)":{tag:"(0040,A090)",vr:"SQ",name:"RETIRED_EquivalentCDADocumentSequence",vm:"1",version:"DICOM/retired"},"(0040,A110)":{tag:"(0040,A110)",vr:"DA",name:"RETIRED_DateOfDocumentOrVerbalTransactionTrial",vm:"1",version:"DICOM/retired"},"(0040,A112)":{tag:"(0040,A112)",vr:"TM",name:"RETIRED_TimeOfDocumentCreationOrVerbalTransactionTrial",vm:"1",version:"DICOM/retired"},"(0040,A125)":{tag:"(0040,A125)",vr:"CS",name:"RETIRED_ReportStatusIDTrial",vm:"2",version:"DICOM/retired"},"(0040,A167)":{tag:"(0040,A167)",vr:"SQ",name:"RETIRED_ObservationCategoryCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A16A)":{tag:"(0040,A16A)",vr:"ST",name:"RETIRED_BibliographicCitationTrial",vm:"1",version:"DICOM/retired"},"(0040,A172)":{tag:"(0040,A172)",vr:"UI",name:"RETIRED_ReferencedObservationUIDTrial",vm:"1",version:"DICOM/retired"},"(0040,A173)":{tag:"(0040,A173)",vr:"CS",name:"RETIRED_ReferencedObservationClassTrial",vm:"1",version:"DICOM/retired"},"(0040,A174)":{tag:"(0040,A174)",vr:"CS",name:"RETIRED_ReferencedObjectObservationClassTrial",vm:"1",version:"DICOM/retired"},"(0040,A192)":{tag:"(0040,A192)",vr:"DA",name:"RETIRED_ObservationDateTrial",vm:"1",version:"DICOM/retired"},"(0040,A193)":{tag:"(0040,A193)",vr:"TM",name:"RETIRED_ObservationTimeTrial",vm:"1",version:"DICOM/retired"},"(0040,A194)":{tag:"(0040,A194)",vr:"CS",name:"RETIRED_MeasurementAutomationTrial",vm:"1",version:"DICOM/retired"},"(0040,A224)":{tag:"(0040,A224)",vr:"ST",name:"RETIRED_IdentificationDescriptionTrial",vm:"1",version:"DICOM/retired"},"(0040,A290)":{tag:"(0040,A290)",vr:"CS",name:"RETIRED_CoordinatesSetGeometricTypeTrial",vm:"1",version:"DICOM/retired"},"(0040,A296)":{tag:"(0040,A296)",vr:"SQ",name:"RETIRED_AlgorithmCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A297)":{tag:"(0040,A297)",vr:"ST",name:"RETIRED_AlgorithmDescriptionTrial",vm:"1",version:"DICOM/retired"},"(0040,A29A)":{tag:"(0040,A29A)",vr:"SL",name:"RETIRED_PixelCoordinatesSetTrial",vm:"2-2n",version:"DICOM/retired"},"(0040,A307)":{tag:"(0040,A307)",vr:"PN",name:"RETIRED_CurrentObserverTrial",vm:"1",version:"DICOM/retired"},"(0040,A313)":{tag:"(0040,A313)",vr:"SQ",name:"RETIRED_ReferencedAccessionSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A33A)":{tag:"(0040,A33A)",vr:"ST",name:"RETIRED_ReportStatusCommentTrial",vm:"1",version:"DICOM/retired"},"(0040,A340)":{tag:"(0040,A340)",vr:"SQ",name:"RETIRED_ProcedureContextSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A352)":{tag:"(0040,A352)",vr:"PN",name:"RETIRED_VerbalSourceTrial",vm:"1",version:"DICOM/retired"},"(0040,A353)":{tag:"(0040,A353)",vr:"ST",name:"RETIRED_AddressTrial",vm:"1",version:"DICOM/retired"},"(0040,A354)":{tag:"(0040,A354)",vr:"LO",name:"RETIRED_TelephoneNumberTrial",vm:"1",version:"DICOM/retired"},"(0040,A358)":{tag:"(0040,A358)",vr:"SQ",name:"RETIRED_VerbalSourceIdentifierCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A380)":{tag:"(0040,A380)",vr:"SQ",name:"RETIRED_ReportDetailSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A402)":{tag:"(0040,A402)",vr:"UI",name:"RETIRED_ObservationSubjectUIDTrial",vm:"1",version:"DICOM/retired"},"(0040,A403)":{tag:"(0040,A403)",vr:"CS",name:"RETIRED_ObservationSubjectClassTrial",vm:"1",version:"DICOM/retired"},"(0040,A404)":{tag:"(0040,A404)",vr:"SQ",name:"RETIRED_ObservationSubjectTypeCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A600)":{tag:"(0040,A600)",vr:"CS",name:"RETIRED_ObservationSubjectContextFlagTrial",vm:"1",version:"DICOM/retired"},"(0040,A601)":{tag:"(0040,A601)",vr:"CS",name:"RETIRED_ObserverContextFlagTrial",vm:"1",version:"DICOM/retired"},"(0040,A603)":{tag:"(0040,A603)",vr:"CS",name:"RETIRED_ProcedureContextFlagTrial",vm:"1",version:"DICOM/retired"},"(0040,A731)":{tag:"(0040,A731)",vr:"SQ",name:"RETIRED_RelationshipSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A732)":{tag:"(0040,A732)",vr:"SQ",name:"RETIRED_RelationshipTypeCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A744)":{tag:"(0040,A744)",vr:"SQ",name:"RETIRED_LanguageCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A992)":{tag:"(0040,A992)",vr:"ST",name:"RETIRED_UniformResourceLocatorTrial",vm:"1",version:"DICOM/retired"},"(0040,DB06)":{tag:"(0040,DB06)",vr:"DT",name:"RETIRED_TemplateVersion",vm:"1",version:"DICOM/retired"},"(0040,DB07)":{tag:"(0040,DB07)",vr:"DT",name:"RETIRED_TemplateLocalVersion",vm:"1",version:"DICOM/retired"},"(0040,DB0B)":{tag:"(0040,DB0B)",vr:"CS",name:"RETIRED_TemplateExtensionFlag",vm:"1",version:"DICOM/retired"},"(0040,DB0C)":{tag:"(0040,DB0C)",vr:"UI",name:"RETIRED_TemplateExtensionOrganizationUID",vm:"1",version:"DICOM/retired"},"(0040,DB0D)":{tag:"(0040,DB0D)",vr:"UI",name:"RETIRED_TemplateExtensionCreatorUID",vm:"1",version:"DICOM/retired"},"(0054,1400)":{tag:"(0054,1400)",vr:"CS",name:"RETIRED_CountsIncluded",vm:"1-n",version:"DICOM/retired"},"(0054,1401)":{tag:"(0054,1401)",vr:"CS",name:"RETIRED_DeadTimeCorrectionFlag",vm:"1",version:"DICOM/retired"},"(0070,0040)":{tag:"(0070,0040)",vr:"IS",name:"RETIRED_ImageRotationRetired",vm:"1",version:"DICOM/retired"},"(0070,0050)":{tag:"(0070,0050)",vr:"US",name:"RETIRED_DisplayedAreaTopLeftHandCornerTrial",vm:"2",version:"DICOM/retired"},"(0070,0051)":{tag:"(0070,0051)",vr:"US",name:"RETIRED_DisplayedAreaBottomRightHandCornerTrial",vm:"2",version:"DICOM/retired"},"(0070,0067)":{tag:"(0070,0067)",vr:"US",name:"RETIRED_GraphicLayerRecommendedDisplayRGBValue",vm:"3",version:"DICOM/retired"},"(0074,1024)":{tag:"(0074,1024)",vr:"IS",name:"RETIRED_BeamOrderIndexTrial",vm:"1",version:"DICOM/retired"},"(0074,1038)":{tag:"(0074,1038)",vr:"DS",name:"RETIRED_DoubleExposureMetersetTrial",vm:"1",version:"DICOM/retired"},"(0074,103A)":{tag:"(0074,103A)",vr:"DS",name:"RETIRED_DoubleExposureFieldDeltaTrial",vm:"4",version:"DICOM/retired"},"(0074,1220)":{tag:"(0074,1220)",vr:"SQ",name:"RETIRED_RelatedProcedureStepSequence",vm:"1",version:"DICOM/retired"},"(0074,1222)":{tag:"(0074,1222)",vr:"LO",name:"RETIRED_ProcedureStepRelationshipType",vm:"1",version:"DICOM/retired"},"(0088,0904)":{tag:"(0088,0904)",vr:"LO",name:"RETIRED_TopicTitle",vm:"1",version:"DICOM/retired"},"(0088,0906)":{tag:"(0088,0906)",vr:"ST",name:"RETIRED_TopicSubject",vm:"1",version:"DICOM/retired"},"(0088,0910)":{tag:"(0088,0910)",vr:"LO",name:"RETIRED_TopicAuthor",vm:"1",version:"DICOM/retired"},"(0088,0912)":{tag:"(0088,0912)",vr:"LO",name:"RETIRED_TopicKeywords",vm:"1-32",version:"DICOM/retired"},"(0400,0315)":{tag:"(0400,0315)",vr:"FL",name:"RETIRED_undefined",vm:"1",version:"DICOM/retired"},"(1000,0010)":{tag:"(1000,0010)",vr:"US",name:"RETIRED_EscapeTriplet",vm:"3",version:"DICOM/retired"},"(1000,0011)":{tag:"(1000,0011)",vr:"US",name:"RETIRED_RunLengthTriplet",vm:"3",version:"DICOM/retired"},"(1000,0012)":{tag:"(1000,0012)",vr:"US",name:"RETIRED_HuffmanTableSize",vm:"1",version:"DICOM/retired"},"(1000,0013)":{tag:"(1000,0013)",vr:"US",name:"RETIRED_HuffmanTableTriplet",vm:"3",version:"DICOM/retired"},"(1000,0014)":{tag:"(1000,0014)",vr:"US",name:"RETIRED_ShiftTableSize",vm:"1",version:"DICOM/retired"},"(1000,0015)":{tag:"(1000,0015)",vr:"US",name:"RETIRED_ShiftTableTriplet",vm:"3",version:"DICOM/retired"},"(1010,0004)":{tag:"(1010,0004)",vr:"US",name:"RETIRED_ZonalMap",vm:"1-n",version:"DICOM/retired"},"(2000,0062)":{tag:"(2000,0062)",vr:"CS",name:"RETIRED_ColorImagePrintingFlag",vm:"1",version:"DICOM/retired"},"(2000,0063)":{tag:"(2000,0063)",vr:"CS",name:"RETIRED_CollationFlag",vm:"1",version:"DICOM/retired"},"(2000,0065)":{tag:"(2000,0065)",vr:"CS",name:"RETIRED_AnnotationFlag",vm:"1",version:"DICOM/retired"},"(2000,0067)":{tag:"(2000,0067)",vr:"CS",name:"RETIRED_ImageOverlayFlag",vm:"1",version:"DICOM/retired"},"(2000,0069)":{tag:"(2000,0069)",vr:"CS",name:"RETIRED_PresentationLUTFlag",vm:"1",version:"DICOM/retired"},"(2000,006A)":{tag:"(2000,006A)",vr:"CS",name:"RETIRED_ImageBoxPresentationLUTFlag",vm:"1",version:"DICOM/retired"},"(2000,0510)":{tag:"(2000,0510)",vr:"SQ",name:"RETIRED_ReferencedStoredPrintSequence",vm:"1",version:"DICOM/retired"},"(2020,0130)":{tag:"(2020,0130)",vr:"SQ",name:"RETIRED_ReferencedImageOverlayBoxSequence",vm:"1",version:"DICOM/retired"},"(2020,0140)":{tag:"(2020,0140)",vr:"SQ",name:"RETIRED_ReferencedVOILUTBoxSequence",vm:"1",version:"DICOM/retired"},"(2040,0010)":{tag:"(2040,0010)",vr:"SQ",name:"RETIRED_ReferencedOverlayPlaneSequence",vm:"1",version:"DICOM/retired"},"(2040,0011)":{tag:"(2040,0011)",vr:"US",name:"RETIRED_ReferencedOverlayPlaneGroups",vm:"1-99",version:"DICOM/retired"},"(2040,0020)":{tag:"(2040,0020)",vr:"SQ",name:"RETIRED_OverlayPixelDataSequence",vm:"1",version:"DICOM/retired"},"(2040,0060)":{tag:"(2040,0060)",vr:"CS",name:"RETIRED_OverlayMagnificationType",vm:"1",version:"DICOM/retired"},"(2040,0070)":{tag:"(2040,0070)",vr:"CS",name:"RETIRED_OverlaySmoothingType",vm:"1",version:"DICOM/retired"},"(2040,0072)":{tag:"(2040,0072)",vr:"CS",name:"RETIRED_OverlayOrImageMagnification",vm:"1",version:"DICOM/retired"},"(2040,0074)":{tag:"(2040,0074)",vr:"US",name:"RETIRED_MagnifyToNumberOfColumns",vm:"1",version:"DICOM/retired"},"(2040,0080)":{tag:"(2040,0080)",vr:"CS",name:"RETIRED_OverlayForegroundDensity",vm:"1",version:"DICOM/retired"},"(2040,0082)":{tag:"(2040,0082)",vr:"CS",name:"RETIRED_OverlayBackgroundDensity",vm:"1",version:"DICOM/retired"},"(2040,0090)":{tag:"(2040,0090)",vr:"CS",name:"RETIRED_OverlayMode",vm:"1",version:"DICOM/retired"},"(2040,0100)":{tag:"(2040,0100)",vr:"CS",name:"RETIRED_ThresholdDensity",vm:"1",version:"DICOM/retired"},"(2040,0500)":{tag:"(2040,0500)",vr:"SQ",name:"RETIRED_ReferencedImageBoxSequenceRetired",vm:"1",version:"DICOM/retired"},"(2100,0010)":{tag:"(2100,0010)",vr:"SH",name:"RETIRED_PrintJobID",vm:"1",version:"DICOM/retired"},"(2100,0140)":{tag:"(2100,0140)",vr:"AE",name:"RETIRED_DestinationAE",vm:"1",version:"DICOM/retired"},"(2100,0500)":{tag:"(2100,0500)",vr:"SQ",name:"RETIRED_ReferencedPrintJobSequencePullStoredPrint",vm:"1",version:"DICOM/retired"},"(2110,0099)":{tag:"(2110,0099)",vr:"SH",name:"RETIRED_PrintQueueID",vm:"1",version:"DICOM/retired"},"(2120,0010)":{tag:"(2120,0010)",vr:"CS",name:"RETIRED_QueueStatus",vm:"1",version:"DICOM/retired"},"(2120,0050)":{tag:"(2120,0050)",vr:"SQ",name:"RETIRED_PrintJobDescriptionSequence",vm:"1",version:"DICOM/retired"},"(2120,0070)":{tag:"(2120,0070)",vr:"SQ",name:"RETIRED_ReferencedPrintJobSequence",vm:"1",version:"DICOM/retired"},"(2130,0010)":{tag:"(2130,0010)",vr:"SQ",name:"RETIRED_PrintManagementCapabilitiesSequence",vm:"1",version:"DICOM/retired"},"(2130,0015)":{tag:"(2130,0015)",vr:"SQ",name:"RETIRED_PrinterCharacteristicsSequence",vm:"1",version:"DICOM/retired"},"(2130,0030)":{tag:"(2130,0030)",vr:"SQ",name:"RETIRED_FilmBoxContentSequence",vm:"1",version:"DICOM/retired"},"(2130,0040)":{tag:"(2130,0040)",vr:"SQ",name:"RETIRED_ImageBoxContentSequence",vm:"1",version:"DICOM/retired"},"(2130,0050)":{tag:"(2130,0050)",vr:"SQ",name:"RETIRED_AnnotationContentSequence",vm:"1",version:"DICOM/retired"},"(2130,0060)":{tag:"(2130,0060)",vr:"SQ",name:"RETIRED_ImageOverlayBoxContentSequence",vm:"1",version:"DICOM/retired"},"(2130,0080)":{tag:"(2130,0080)",vr:"SQ",name:"RETIRED_PresentationLUTContentSequence",vm:"1",version:"DICOM/retired"},"(2130,00A0)":{tag:"(2130,00A0)",vr:"SQ",name:"RETIRED_ProposedStudySequence",vm:"1",version:"DICOM/retired"},"(2130,00C0)":{tag:"(2130,00C0)",vr:"SQ",name:"RETIRED_OriginalImageSequence",vm:"1",version:"DICOM/retired"},"(3006,00C0)":{tag:"(3006,00C0)",vr:"SQ",name:"RETIRED_FrameOfReferenceRelationshipSequence",vm:"1",version:"DICOM/retired"},"(3006,00C2)":{tag:"(3006,00C2)",vr:"UI",name:"RETIRED_RelatedFrameOfReferenceUID",vm:"1",version:"DICOM/retired"},"(3006,00C4)":{tag:"(3006,00C4)",vr:"CS",name:"RETIRED_FrameOfReferenceTransformationType",vm:"1",version:"DICOM/retired"},"(300A,0088)":{tag:"(300A,0088)",vr:"FL",name:"RETIRED_BeamDosePointDepth",vm:"1",version:"DICOM/retired"},"(300A,0089)":{tag:"(300A,0089)",vr:"FL",name:"RETIRED_BeamDosePointEquivalentDepth",vm:"1",version:"DICOM/retired"},"(300A,008A)":{tag:"(300A,008A)",vr:"FL",name:"RETIRED_BeamDosePointSSD",vm:"1",version:"DICOM/retired"},"(300A,0782)":{tag:"(300A,0782)",vr:"US",name:"RETIRED_undefined",vm:"1",version:"DICOM/retired"},"(4000,0010)":{tag:"(4000,0010)",vr:"LT",name:"RETIRED_Arbitrary",vm:"1",version:"DICOM/retired"},"(4000,4000)":{tag:"(4000,4000)",vr:"LT",name:"RETIRED_TextComments",vm:"1",version:"DICOM/retired"},"(4008,0040)":{tag:"(4008,0040)",vr:"SH",name:"RETIRED_ResultsID",vm:"1",version:"DICOM/retired"},"(4008,0042)":{tag:"(4008,0042)",vr:"LO",name:"RETIRED_ResultsIDIssuer",vm:"1",version:"DICOM/retired"},"(4008,0050)":{tag:"(4008,0050)",vr:"SQ",name:"RETIRED_ReferencedInterpretationSequence",vm:"1",version:"DICOM/retired"},"(4008,00FF)":{tag:"(4008,00FF)",vr:"CS",name:"RETIRED_ReportProductionStatusTrial",vm:"1",version:"DICOM/retired"},"(4008,0100)":{tag:"(4008,0100)",vr:"DA",name:"RETIRED_InterpretationRecordedDate",vm:"1",version:"DICOM/retired"},"(4008,0101)":{tag:"(4008,0101)",vr:"TM",name:"RETIRED_InterpretationRecordedTime",vm:"1",version:"DICOM/retired"},"(4008,0102)":{tag:"(4008,0102)",vr:"PN",name:"RETIRED_InterpretationRecorder",vm:"1",version:"DICOM/retired"},"(4008,0103)":{tag:"(4008,0103)",vr:"LO",name:"RETIRED_ReferenceToRecordedSound",vm:"1",version:"DICOM/retired"},"(4008,0108)":{tag:"(4008,0108)",vr:"DA",name:"RETIRED_InterpretationTranscriptionDate",vm:"1",version:"DICOM/retired"},"(4008,0109)":{tag:"(4008,0109)",vr:"TM",name:"RETIRED_InterpretationTranscriptionTime",vm:"1",version:"DICOM/retired"},"(4008,010A)":{tag:"(4008,010A)",vr:"PN",name:"RETIRED_InterpretationTranscriber",vm:"1",version:"DICOM/retired"},"(4008,010B)":{tag:"(4008,010B)",vr:"ST",name:"RETIRED_InterpretationText",vm:"1",version:"DICOM/retired"},"(4008,010C)":{tag:"(4008,010C)",vr:"PN",name:"RETIRED_InterpretationAuthor",vm:"1",version:"DICOM/retired"},"(4008,0111)":{tag:"(4008,0111)",vr:"SQ",name:"RETIRED_InterpretationApproverSequence",vm:"1",version:"DICOM/retired"},"(4008,0112)":{tag:"(4008,0112)",vr:"DA",name:"RETIRED_InterpretationApprovalDate",vm:"1",version:"DICOM/retired"},"(4008,0113)":{tag:"(4008,0113)",vr:"TM",name:"RETIRED_InterpretationApprovalTime",vm:"1",version:"DICOM/retired"},"(4008,0114)":{tag:"(4008,0114)",vr:"PN",name:"RETIRED_PhysicianApprovingInterpretation",vm:"1",version:"DICOM/retired"},"(4008,0115)":{tag:"(4008,0115)",vr:"LT",name:"RETIRED_InterpretationDiagnosisDescription",vm:"1",version:"DICOM/retired"},"(4008,0117)":{tag:"(4008,0117)",vr:"SQ",name:"RETIRED_InterpretationDiagnosisCodeSequence",vm:"1",version:"DICOM/retired"},"(4008,0118)":{tag:"(4008,0118)",vr:"SQ",name:"RETIRED_ResultsDistributionListSequence",vm:"1",version:"DICOM/retired"},"(4008,0119)":{tag:"(4008,0119)",vr:"PN",name:"RETIRED_DistributionName",vm:"1",version:"DICOM/retired"},"(4008,011A)":{tag:"(4008,011A)",vr:"LO",name:"RETIRED_DistributionAddress",vm:"1",version:"DICOM/retired"},"(4008,0200)":{tag:"(4008,0200)",vr:"SH",name:"RETIRED_InterpretationID",vm:"1",version:"DICOM/retired"},"(4008,0202)":{tag:"(4008,0202)",vr:"LO",name:"RETIRED_InterpretationIDIssuer",vm:"1",version:"DICOM/retired"},"(4008,0210)":{tag:"(4008,0210)",vr:"CS",name:"RETIRED_InterpretationTypeID",vm:"1",version:"DICOM/retired"},"(4008,0212)":{tag:"(4008,0212)",vr:"CS",name:"RETIRED_InterpretationStatusID",vm:"1",version:"DICOM/retired"},"(4008,0300)":{tag:"(4008,0300)",vr:"ST",name:"RETIRED_Impressions",vm:"1",version:"DICOM/retired"},"(4008,4000)":{tag:"(4008,4000)",vr:"ST",name:"RETIRED_ResultsComments",vm:"1",version:"DICOM/retired"},"(5000-50FF,0005)":{tag:"(5000-50FF,0005)",vr:"US",name:"RETIRED_CurveDimensions",vm:"1",version:"DICOM/retired"},"(5000-50FF,0010)":{tag:"(5000-50FF,0010)",vr:"US",name:"RETIRED_NumberOfPoints",vm:"1",version:"DICOM/retired"},"(5000-50FF,0020)":{tag:"(5000-50FF,0020)",vr:"CS",name:"RETIRED_TypeOfData",vm:"1",version:"DICOM/retired"},"(5000-50FF,0022)":{tag:"(5000-50FF,0022)",vr:"LO",name:"RETIRED_CurveDescription",vm:"1",version:"DICOM/retired"},"(5000-50FF,0030)":{tag:"(5000-50FF,0030)",vr:"SH",name:"RETIRED_AxisUnits",vm:"1-n",version:"DICOM/retired"},"(5000-50FF,0040)":{tag:"(5000-50FF,0040)",vr:"SH",name:"RETIRED_AxisLabels",vm:"1-n",version:"DICOM/retired"},"(5000-50FF,0103)":{tag:"(5000-50FF,0103)",vr:"US",name:"RETIRED_DataValueRepresentation",vm:"1",version:"DICOM/retired"},"(5000-50FF,0104)":{tag:"(5000-50FF,0104)",vr:"US",name:"RETIRED_MinimumCoordinateValue",vm:"1-n",version:"DICOM/retired"},"(5000-50FF,0105)":{tag:"(5000-50FF,0105)",vr:"US",name:"RETIRED_MaximumCoordinateValue",vm:"1-n",version:"DICOM/retired"},"(5000-50FF,0106)":{tag:"(5000-50FF,0106)",vr:"SH",name:"RETIRED_CurveRange",vm:"1-n",version:"DICOM/retired"},"(5000-50FF,0110)":{tag:"(5000-50FF,0110)",vr:"US",name:"RETIRED_CurveDataDescriptor",vm:"1-n",version:"DICOM/retired"},"(5000-50FF,0112)":{tag:"(5000-50FF,0112)",vr:"US",name:"RETIRED_CoordinateStartValue",vm:"1-n",version:"DICOM/retired"},"(5000-50FF,0114)":{tag:"(5000-50FF,0114)",vr:"US",name:"RETIRED_CoordinateStepValue",vm:"1-n",version:"DICOM/retired"},"(5000-50FF,1001)":{tag:"(5000-50FF,1001)",vr:"CS",name:"RETIRED_CurveActivationLayer",vm:"1",version:"DICOM/retired"},"(5000-50FF,2000)":{tag:"(5000-50FF,2000)",vr:"US",name:"RETIRED_AudioType",vm:"1",version:"DICOM/retired"},"(5000-50FF,2002)":{tag:"(5000-50FF,2002)",vr:"US",name:"RETIRED_AudioSampleFormat",vm:"1",version:"DICOM/retired"},"(5000-50FF,2004)":{tag:"(5000-50FF,2004)",vr:"US",name:"RETIRED_NumberOfChannels",vm:"1",version:"DICOM/retired"},"(5000-50FF,2006)":{tag:"(5000-50FF,2006)",vr:"UL",name:"RETIRED_NumberOfSamples",vm:"1",version:"DICOM/retired"},"(5000-50FF,2008)":{tag:"(5000-50FF,2008)",vr:"UL",name:"RETIRED_SampleRate",vm:"1",version:"DICOM/retired"},"(5000-50FF,200A)":{tag:"(5000-50FF,200A)",vr:"UL",name:"RETIRED_TotalTime",vm:"1",version:"DICOM/retired"},"(5000-50FF,200C)":{tag:"(5000-50FF,200C)",vr:"ox",name:"RETIRED_AudioSampleData",vm:"1",version:"DICOM/retired"},"(5000-50FF,200E)":{tag:"(5000-50FF,200E)",vr:"LT",name:"RETIRED_AudioComments",vm:"1",version:"DICOM/retired"},"(5000-50FF,2500)":{tag:"(5000-50FF,2500)",vr:"LO",name:"RETIRED_CurveLabel",vm:"1",version:"DICOM/retired"},"(5000-50FF,2600)":{tag:"(5000-50FF,2600)",vr:"SQ",name:"RETIRED_CurveReferencedOverlaySequence",vm:"1",version:"DICOM/retired"},"(5000-50FF,2610)":{tag:"(5000-50FF,2610)",vr:"US",name:"RETIRED_CurveReferencedOverlayGroup",vm:"1",version:"DICOM/retired"},"(5000-50FF,3000)":{tag:"(5000-50FF,3000)",vr:"ox",name:"RETIRED_CurveData",vm:"1",version:"DICOM/retired"},"(6000-60FF,0012)":{tag:"(6000-60FF,0012)",vr:"US",name:"RETIRED_OverlayPlanes",vm:"1",version:"DICOM/retired"},"(6000-60FF,0052)":{tag:"(6000-60FF,0052)",vr:"US",name:"RETIRED_OverlayPlaneOrigin",vm:"1",version:"DICOM/retired"},"(6000-60FF,0060)":{tag:"(6000-60FF,0060)",vr:"CS",name:"RETIRED_OverlayCompressionCode",vm:"1",version:"DICOM/retired"},"(6000-60FF,0061)":{tag:"(6000-60FF,0061)",vr:"SH",name:"RETIRED_OverlayCompressionOriginator",vm:"1",version:"DICOM/retired"},"(6000-60FF,0062)":{tag:"(6000-60FF,0062)",vr:"SH",name:"RETIRED_OverlayCompressionLabel",vm:"1",version:"DICOM/retired"},"(6000-60FF,0063)":{tag:"(6000-60FF,0063)",vr:"CS",name:"RETIRED_OverlayCompressionDescription",vm:"1",version:"DICOM/retired"},"(6000-60FF,0066)":{tag:"(6000-60FF,0066)",vr:"AT",name:"RETIRED_OverlayCompressionStepPointers",vm:"1-n",version:"DICOM/retired"},"(6000-60FF,0068)":{tag:"(6000-60FF,0068)",vr:"US",name:"RETIRED_OverlayRepeatInterval",vm:"1",version:"DICOM/retired"},"(6000-60FF,0069)":{tag:"(6000-60FF,0069)",vr:"US",name:"RETIRED_OverlayBitsGrouped",vm:"1",version:"DICOM/retired"},"(6000-60FF,0110)":{tag:"(6000-60FF,0110)",vr:"CS",name:"RETIRED_OverlayFormat",vm:"1",version:"DICOM/retired"},"(6000-60FF,0200)":{tag:"(6000-60FF,0200)",vr:"US",name:"RETIRED_OverlayLocation",vm:"1",version:"DICOM/retired"},"(6000-60FF,0800)":{tag:"(6000-60FF,0800)",vr:"CS",name:"RETIRED_OverlayCodeLabel",vm:"1-n",version:"DICOM/retired"},"(6000-60FF,0802)":{tag:"(6000-60FF,0802)",vr:"US",name:"RETIRED_OverlayNumberOfTables",vm:"1",version:"DICOM/retired"},"(6000-60FF,0803)":{tag:"(6000-60FF,0803)",vr:"AT",name:"RETIRED_OverlayCodeTableLocation",vm:"1-n",version:"DICOM/retired"},"(6000-60FF,0804)":{tag:"(6000-60FF,0804)",vr:"US",name:"RETIRED_OverlayBitsForCodeWord",vm:"1",version:"DICOM/retired"},"(6000-60FF,1100)":{tag:"(6000-60FF,1100)",vr:"US",name:"RETIRED_OverlayDescriptorGray",vm:"1",version:"DICOM/retired"},"(6000-60FF,1101)":{tag:"(6000-60FF,1101)",vr:"US",name:"RETIRED_OverlayDescriptorRed",vm:"1",version:"DICOM/retired"},"(6000-60FF,1102)":{tag:"(6000-60FF,1102)",vr:"US",name:"RETIRED_OverlayDescriptorGreen",vm:"1",version:"DICOM/retired"},"(6000-60FF,1103)":{tag:"(6000-60FF,1103)",vr:"US",name:"RETIRED_OverlayDescriptorBlue",vm:"1",version:"DICOM/retired"},"(6000-60FF,1200)":{tag:"(6000-60FF,1200)",vr:"US",name:"RETIRED_OverlaysGray",vm:"1-n",version:"DICOM/retired"},"(6000-60FF,1201)":{tag:"(6000-60FF,1201)",vr:"US",name:"RETIRED_OverlaysRed",vm:"1-n",version:"DICOM/retired"},"(6000-60FF,1202)":{tag:"(6000-60FF,1202)",vr:"US",name:"RETIRED_OverlaysGreen",vm:"1-n",version:"DICOM/retired"},"(6000-60FF,1203)":{tag:"(6000-60FF,1203)",vr:"US",name:"RETIRED_OverlaysBlue",vm:"1-n",version:"DICOM/retired"},"(6000-60FF,4000)":{tag:"(6000-60FF,4000)",vr:"LT",name:"RETIRED_OverlayComments",vm:"1",version:"DICOM/retired"},"(7FE0,0020)":{tag:"(7FE0,0020)",vr:"OW",name:"RETIRED_CoefficientsSDVN",vm:"1",version:"DICOM/retired"},"(7FE0,0030)":{tag:"(7FE0,0030)",vr:"OW",name:"RETIRED_CoefficientsSDHN",vm:"1",version:"DICOM/retired"},"(7FE0,0040)":{tag:"(7FE0,0040)",vr:"OW",name:"RETIRED_CoefficientsSDDN",vm:"1",version:"DICOM/retired"},"(7F00-7FFF,0010)":{tag:"(7F00-7FFF,0010)",vr:"ox",name:"RETIRED_VariablePixelData",vm:"1",version:"DICOM/retired"},"(7F00-7FFF,0011)":{tag:"(7F00-7FFF,0011)",vr:"US",name:"RETIRED_VariableNextDataGroup",vm:"1",version:"DICOM/retired"},"(7F00-7FFF,0020)":{tag:"(7F00-7FFF,0020)",vr:"OW",name:"RETIRED_VariableCoefficientsSDVN",vm:"1",version:"DICOM/retired"},"(7F00-7FFF,0030)":{tag:"(7F00-7FFF,0030)",vr:"OW",name:"RETIRED_VariableCoefficientsSDHN",vm:"1",version:"DICOM/retired"},"(7F00-7FFF,0040)":{tag:"(7F00-7FFF,0040)",vr:"OW",name:"RETIRED_VariableCoefficientsSDDN",vm:"1",version:"DICOM/retired"},"":{tag:""},'(0019,"1.2.840.113681",10)':{tag:'(0019,"1.2.840.113681",10)',vr:"ST",name:"CRImageParamsCommon",vm:"1",version:"PrivateTag"},'(0019,"1.2.840.113681",11)':{tag:'(0019,"1.2.840.113681",11)',vr:"ST",name:"CRImageIPParamsSingle",vm:"1",version:"PrivateTag"},'(0019,"1.2.840.113681",12)':{tag:'(0019,"1.2.840.113681",12)',vr:"ST",name:"CRImageIPParamsLeft",vm:"1",version:"PrivateTag"},'(0019,"1.2.840.113681",13)':{tag:'(0019,"1.2.840.113681",13)',vr:"ST",name:"CRImageIPParamsRight",vm:"1",version:"PrivateTag"},'(0087,"1.2.840.113708.794.1.1.2.0",10)':{tag:'(0087,"1.2.840.113708.794.1.1.2.0",10)',vr:"CS",name:"MediaType",vm:"1",version:"PrivateTag"},'(0087,"1.2.840.113708.794.1.1.2.0",20)':{tag:'(0087,"1.2.840.113708.794.1.1.2.0",20)',vr:"CS",name:"MediaLocation",vm:"1",version:"PrivateTag"},'(0087,"1.2.840.113708.794.1.1.2.0",50)':{tag:'(0087,"1.2.840.113708.794.1.1.2.0",50)',vr:"IS",name:"EstimatedRetrieveTime",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",00)':{tag:'(0009,"ACUSON",00)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",01)':{tag:'(0009,"ACUSON",01)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",02)':{tag:'(0009,"ACUSON",02)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",03)':{tag:'(0009,"ACUSON",03)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",04)':{tag:'(0009,"ACUSON",04)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",05)':{tag:'(0009,"ACUSON",05)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",06)':{tag:'(0009,"ACUSON",06)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",07)':{tag:'(0009,"ACUSON",07)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",08)':{tag:'(0009,"ACUSON",08)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",09)':{tag:'(0009,"ACUSON",09)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",0a)':{tag:'(0009,"ACUSON",0a)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",0b)':{tag:'(0009,"ACUSON",0b)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",0c)':{tag:'(0009,"ACUSON",0c)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",0d)':{tag:'(0009,"ACUSON",0d)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",0e)':{tag:'(0009,"ACUSON",0e)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",0f)':{tag:'(0009,"ACUSON",0f)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",10)':{tag:'(0009,"ACUSON",10)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",11)':{tag:'(0009,"ACUSON",11)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",12)':{tag:'(0009,"ACUSON",12)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",13)':{tag:'(0009,"ACUSON",13)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",14)':{tag:'(0009,"ACUSON",14)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",15)':{tag:'(0009,"ACUSON",15)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0003,"AEGIS_DICOM_2.00",00)':{tag:'(0003,"AEGIS_DICOM_2.00",00)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0005,"AEGIS_DICOM_2.00",00)':{tag:'(0005,"AEGIS_DICOM_2.00",00)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0009,"AEGIS_DICOM_2.00",00)':{tag:'(0009,"AEGIS_DICOM_2.00",00)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"AEGIS_DICOM_2.00",00)':{tag:'(0019,"AEGIS_DICOM_2.00",00)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0029,"AEGIS_DICOM_2.00",00)':{tag:'(0029,"AEGIS_DICOM_2.00",00)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(1369,"AEGIS_DICOM_2.00",00)':{tag:'(1369,"AEGIS_DICOM_2.00",00)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0009,"AGFA",10)':{tag:'(0009,"AGFA",10)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"AGFA",11)':{tag:'(0009,"AGFA",11)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"AGFA",13)':{tag:'(0009,"AGFA",13)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"AGFA",14)':{tag:'(0009,"AGFA",14)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"AGFA",15)':{tag:'(0009,"AGFA",15)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0031,"AGFA PACS Archive Mirroring 1.0",00)':{tag:'(0031,"AGFA PACS Archive Mirroring 1.0",00)',vr:"CS",name:"StudyStatus",vm:"1",version:"PrivateTag"},'(0031,"AGFA PACS Archive Mirroring 1.0",01)':{tag:'(0031,"AGFA PACS Archive Mirroring 1.0",01)',vr:"UL",name:"DateTimeVerified",vm:"1",version:"PrivateTag"},'(0029,"CAMTRONICS IP",10)':{tag:'(0029,"CAMTRONICS IP",10)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"CAMTRONICS IP",20)':{tag:'(0029,"CAMTRONICS IP",20)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"CAMTRONICS IP",30)':{tag:'(0029,"CAMTRONICS IP",30)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"CAMTRONICS IP",40)':{tag:'(0029,"CAMTRONICS IP",40)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"CAMTRONICS",10)':{tag:'(0029,"CAMTRONICS",10)',vr:"LT",name:"Commentline",vm:"1",version:"PrivateTag"},'(0029,"CAMTRONICS",20)':{tag:'(0029,"CAMTRONICS",20)',vr:"DS",name:"EdgeEnhancementCoefficient",vm:"1",version:"PrivateTag"},'(0029,"CAMTRONICS",50)':{tag:'(0029,"CAMTRONICS",50)',vr:"LT",name:"SceneText",vm:"1",version:"PrivateTag"},'(0029,"CAMTRONICS",60)':{tag:'(0029,"CAMTRONICS",60)',vr:"LT",name:"ImageText",vm:"1",version:"PrivateTag"},'(0029,"CAMTRONICS",70)':{tag:'(0029,"CAMTRONICS",70)',vr:"IS",name:"PixelShiftHorizontal",vm:"1",version:"PrivateTag"},'(0029,"CAMTRONICS",80)':{tag:'(0029,"CAMTRONICS",80)',vr:"IS",name:"PixelShiftVertical",vm:"1",version:"PrivateTag"},'(0029,"CAMTRONICS",90)':{tag:'(0029,"CAMTRONICS",90)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"CARDIO-D.R. 1.0",00)':{tag:'(0009,"CARDIO-D.R. 1.0",00)',vr:"UL",name:"FileLocation",vm:"1",version:"PrivateTag"},'(0009,"CARDIO-D.R. 1.0",01)':{tag:'(0009,"CARDIO-D.R. 1.0",01)',vr:"UL",name:"FileSize",vm:"1",version:"PrivateTag"},'(0009,"CARDIO-D.R. 1.0",40)':{tag:'(0009,"CARDIO-D.R. 1.0",40)',vr:"SQ",name:"AlternateImageSequence",vm:"1",version:"PrivateTag"},'(0019,"CARDIO-D.R. 1.0",00)':{tag:'(0019,"CARDIO-D.R. 1.0",00)',vr:"CS",name:"ImageBlankingShape",vm:"1",version:"PrivateTag"},'(0019,"CARDIO-D.R. 1.0",02)':{tag:'(0019,"CARDIO-D.R. 1.0",02)',vr:"IS",name:"ImageBlankingLeftVerticalEdge",vm:"1",version:"PrivateTag"},'(0019,"CARDIO-D.R. 1.0",04)':{tag:'(0019,"CARDIO-D.R. 1.0",04)',vr:"IS",name:"ImageBlankingRightVerticalEdge",vm:"1",version:"PrivateTag"},'(0019,"CARDIO-D.R. 1.0",06)':{tag:'(0019,"CARDIO-D.R. 1.0",06)',vr:"IS",name:"ImageBlankingUpperHorizontalEdge",vm:"1",version:"PrivateTag"},'(0019,"CARDIO-D.R. 1.0",08)':{tag:'(0019,"CARDIO-D.R. 1.0",08)',vr:"IS",name:"ImageBlankingLowerHorizontalEdge",vm:"1",version:"PrivateTag"},'(0019,"CARDIO-D.R. 1.0",10)':{tag:'(0019,"CARDIO-D.R. 1.0",10)',vr:"IS",name:"CenterOfCircularImageBlanking",vm:"1",version:"PrivateTag"},'(0019,"CARDIO-D.R. 1.0",12)':{tag:'(0019,"CARDIO-D.R. 1.0",12)',vr:"IS",name:"RadiusOfCircularImageBlanking",vm:"1",version:"PrivateTag"},'(0019,"CARDIO-D.R. 1.0",30)':{tag:'(0019,"CARDIO-D.R. 1.0",30)',vr:"UL",name:"MaximumImageFrameSize",vm:"1",version:"PrivateTag"},'(0021,"CARDIO-D.R. 1.0",13)':{tag:'(0021,"CARDIO-D.R. 1.0",13)',vr:"IS",name:"ImageSequenceNumber",vm:"1",version:"PrivateTag"},'(0029,"CARDIO-D.R. 1.0",00)':{tag:'(0029,"CARDIO-D.R. 1.0",00)',vr:"SQ",name:"EdgeEnhancementSequence",vm:"1",version:"PrivateTag"},'(0029,"CARDIO-D.R. 1.0",01)':{tag:'(0029,"CARDIO-D.R. 1.0",01)',vr:"US",name:"ConvolutionKernelSize",vm:"2",version:"PrivateTag"},'(0029,"CARDIO-D.R. 1.0",02)':{tag:'(0029,"CARDIO-D.R. 1.0",02)',vr:"DS",name:"ConvolutionKernelCoefficients",vm:"1-n",version:"PrivateTag"},'(0029,"CARDIO-D.R. 1.0",03)':{tag:'(0029,"CARDIO-D.R. 1.0",03)',vr:"DS",name:"EdgeEnhancementGain",vm:"1",version:"PrivateTag"},'(0025,"CMR42 CIRCLECVI",1010)':{tag:'(0025,"CMR42 CIRCLECVI",1010)',vr:"LO",name:"WorkspaceID",vm:"1",version:"PrivateTag"},'(0025,"CMR42 CIRCLECVI",1020)':{tag:'(0025,"CMR42 CIRCLECVI",1020)',vr:"LO",name:"WorkspaceTimeString",vm:"1",version:"PrivateTag"},'(0025,"CMR42 CIRCLECVI",1030)':{tag:'(0025,"CMR42 CIRCLECVI",1030)',vr:"OB",name:"WorkspaceStream",vm:"1",version:"PrivateTag"},'(0009,"DCMTK_ANONYMIZER",00)':{tag:'(0009,"DCMTK_ANONYMIZER",00)',vr:"SQ",name:"AnonymizerUIDMap",vm:"1",version:"PrivateTag"},'(0009,"DCMTK_ANONYMIZER",10)':{tag:'(0009,"DCMTK_ANONYMIZER",10)',vr:"UI",name:"AnonymizerUIDKey",vm:"1",version:"PrivateTag"},'(0009,"DCMTK_ANONYMIZER",20)':{tag:'(0009,"DCMTK_ANONYMIZER",20)',vr:"UI",name:"AnonymizerUIDValue",vm:"1",version:"PrivateTag"},'(0009,"DCMTK_ANONYMIZER",30)':{tag:'(0009,"DCMTK_ANONYMIZER",30)',vr:"SQ",name:"AnonymizerPatientIDMap",vm:"1",version:"PrivateTag"},'(0009,"DCMTK_ANONYMIZER",40)':{tag:'(0009,"DCMTK_ANONYMIZER",40)',vr:"LO",name:"AnonymizerPatientIDKey",vm:"1",version:"PrivateTag"},'(0009,"DCMTK_ANONYMIZER",50)':{tag:'(0009,"DCMTK_ANONYMIZER",50)',vr:"LO",name:"AnonymizerPatientIDValue",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",22)':{tag:'(0019,"DIDI TO PCR 1.1",22)',vr:"UN",name:"RouteAET",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",23)':{tag:'(0019,"DIDI TO PCR 1.1",23)',vr:"DS",name:"PCRPrintScale",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",24)':{tag:'(0019,"DIDI TO PCR 1.1",24)',vr:"UN",name:"PCRPrintJobEnd",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",25)':{tag:'(0019,"DIDI TO PCR 1.1",25)',vr:"IS",name:"PCRNoFilmCopies",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",26)':{tag:'(0019,"DIDI TO PCR 1.1",26)',vr:"IS",name:"PCRFilmLayoutPosition",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",27)':{tag:'(0019,"DIDI TO PCR 1.1",27)',vr:"UN",name:"PCRPrintReportName",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",70)':{tag:'(0019,"DIDI TO PCR 1.1",70)',vr:"UN",name:"RADProtocolPrinter",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",71)':{tag:'(0019,"DIDI TO PCR 1.1",71)',vr:"UN",name:"RADProtocolMedium",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",90)':{tag:'(0019,"DIDI TO PCR 1.1",90)',vr:"LO",name:"UnprocessedFlag",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",91)':{tag:'(0019,"DIDI TO PCR 1.1",91)',vr:"UN",name:"KeyValues",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",92)':{tag:'(0019,"DIDI TO PCR 1.1",92)',vr:"UN",name:"DestinationPostprocessingFunction",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",A0)':{tag:'(0019,"DIDI TO PCR 1.1",A0)',vr:"UN",name:"Version",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",A1)':{tag:'(0019,"DIDI TO PCR 1.1",A1)',vr:"UN",name:"RangingMode",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",A2)':{tag:'(0019,"DIDI TO PCR 1.1",A2)',vr:"UN",name:"AbdomenBrightness",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",A3)':{tag:'(0019,"DIDI TO PCR 1.1",A3)',vr:"UN",name:"FixedBrightness",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",A4)':{tag:'(0019,"DIDI TO PCR 1.1",A4)',vr:"UN",name:"DetailContrast",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",A5)':{tag:'(0019,"DIDI TO PCR 1.1",A5)',vr:"UN",name:"ContrastBalance",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",A6)':{tag:'(0019,"DIDI TO PCR 1.1",A6)',vr:"UN",name:"StructureBoost",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",A7)':{tag:'(0019,"DIDI TO PCR 1.1",A7)',vr:"UN",name:"StructurePreference",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",A8)':{tag:'(0019,"DIDI TO PCR 1.1",A8)',vr:"UN",name:"NoiseRobustness",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",A9)':{tag:'(0019,"DIDI TO PCR 1.1",A9)',vr:"UN",name:"NoiseDoseLimit",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",AA)':{tag:'(0019,"DIDI TO PCR 1.1",AA)',vr:"UN",name:"NoiseDoseStep",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",AB)':{tag:'(0019,"DIDI TO PCR 1.1",AB)',vr:"UN",name:"NoiseFrequencyLimit",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",AC)':{tag:'(0019,"DIDI TO PCR 1.1",AC)',vr:"UN",name:"WeakContrastLimit",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",AD)':{tag:'(0019,"DIDI TO PCR 1.1",AD)',vr:"UN",name:"StrongContrastLimit",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",AE)':{tag:'(0019,"DIDI TO PCR 1.1",AE)',vr:"UN",name:"StructureBoostOffset",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",AF)':{tag:'(0019,"DIDI TO PCR 1.1",AF)',vr:"UN",name:"SmoothGain",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",B0)':{tag:'(0019,"DIDI TO PCR 1.1",B0)',vr:"UN",name:"MeasureField1",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",B1)':{tag:'(0019,"DIDI TO PCR 1.1",B1)',vr:"UN",name:"MeasureField2",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",B2)':{tag:'(0019,"DIDI TO PCR 1.1",B2)',vr:"UN",name:"KeyPercentile1",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",B3)':{tag:'(0019,"DIDI TO PCR 1.1",B3)',vr:"UN",name:"KeyPercentile2",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",B4)':{tag:'(0019,"DIDI TO PCR 1.1",B4)',vr:"UN",name:"DensityLUT",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",B5)':{tag:'(0019,"DIDI TO PCR 1.1",B5)',vr:"UN",name:"Brightness",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",B6)':{tag:'(0019,"DIDI TO PCR 1.1",B6)',vr:"UN",name:"Gamma",vm:"1",version:"PrivateTag"},'(0089,"DIDI TO PCR 1.1",10)':{tag:'(0089,"DIDI TO PCR 1.1",10)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"DIGISCAN IMAGE",31)':{tag:'(0029,"DIGISCAN IMAGE",31)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0029,"DIGISCAN IMAGE",32)':{tag:'(0029,"DIGISCAN IMAGE",32)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0029,"DIGISCAN IMAGE",33)':{tag:'(0029,"DIGISCAN IMAGE",33)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"DIGISCAN IMAGE",34)':{tag:'(0029,"DIGISCAN IMAGE",34)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(7001-o-70ff,"DLX_ANNOT_01",04)':{tag:'(7001-o-70ff,"DLX_ANNOT_01",04)',vr:"ST",name:"TextAnnotation",vm:"1",version:"PrivateTag"},'(7001-o-70ff,"DLX_ANNOT_01",05)':{tag:'(7001-o-70ff,"DLX_ANNOT_01",05)',vr:"IS",name:"Box",vm:"2",version:"PrivateTag"},'(7001-o-70ff,"DLX_ANNOT_01",07)':{tag:'(7001-o-70ff,"DLX_ANNOT_01",07)',vr:"IS",name:"ArrowEnd",vm:"2",version:"PrivateTag"},'(0015,"DLX_EXAMS_01",01)':{tag:'(0015,"DLX_EXAMS_01",01)',vr:"DS",name:"StenosisCalibrationRatio",vm:"1",version:"PrivateTag"},'(0015,"DLX_EXAMS_01",02)':{tag:'(0015,"DLX_EXAMS_01",02)',vr:"DS",name:"StenosisMagnification",vm:"1",version:"PrivateTag"},'(0015,"DLX_EXAMS_01",03)':{tag:'(0015,"DLX_EXAMS_01",03)',vr:"DS",name:"CardiacCalibrationRatio",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"DLX_LKUP_01",01)':{tag:'(6001-o-60ff,"DLX_LKUP_01",01)',vr:"US",name:"GrayPaletteColorLookupTableDescriptor",vm:"3",version:"PrivateTag"},'(6001-o-60ff,"DLX_LKUP_01",02)':{tag:'(6001-o-60ff,"DLX_LKUP_01",02)',vr:"US",name:"GrayPaletteColorLookupTableData",vm:"1",version:"PrivateTag"},'(0011,"DLX_PATNT_01",01)':{tag:'(0011,"DLX_PATNT_01",01)',vr:"LT",name:"PatientDOB",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",01)':{tag:'(0019,"DLX_SERIE_01",01)',vr:"DS",name:"AngleValueLArm",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",02)':{tag:'(0019,"DLX_SERIE_01",02)',vr:"DS",name:"AngleValuePArm",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",03)':{tag:'(0019,"DLX_SERIE_01",03)',vr:"DS",name:"AngleValueCArm",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",04)':{tag:'(0019,"DLX_SERIE_01",04)',vr:"CS",name:"AngleLabelLArm",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",05)':{tag:'(0019,"DLX_SERIE_01",05)',vr:"CS",name:"AngleLabelPArm",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",06)':{tag:'(0019,"DLX_SERIE_01",06)',vr:"CS",name:"AngleLabelCArm",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",07)':{tag:'(0019,"DLX_SERIE_01",07)',vr:"ST",name:"ProcedureName",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",08)':{tag:'(0019,"DLX_SERIE_01",08)',vr:"ST",name:"ExamName",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",09)':{tag:'(0019,"DLX_SERIE_01",09)',vr:"SH",name:"PatientSize",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",0a)':{tag:'(0019,"DLX_SERIE_01",0a)',vr:"IS",name:"RecordView",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",10)':{tag:'(0019,"DLX_SERIE_01",10)',vr:"DS",name:"InjectorDelay",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",11)':{tag:'(0019,"DLX_SERIE_01",11)',vr:"CS",name:"AutoInject",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",14)':{tag:'(0019,"DLX_SERIE_01",14)',vr:"IS",name:"AcquisitionMode",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",15)':{tag:'(0019,"DLX_SERIE_01",15)',vr:"CS",name:"CameraRotationEnabled",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",16)':{tag:'(0019,"DLX_SERIE_01",16)',vr:"CS",name:"ReverseSweep",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",17)':{tag:'(0019,"DLX_SERIE_01",17)',vr:"IS",name:"SpatialFilterStrength",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",18)':{tag:'(0019,"DLX_SERIE_01",18)',vr:"IS",name:"ZoomFactor",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",19)':{tag:'(0019,"DLX_SERIE_01",19)',vr:"IS",name:"XZoomCenter",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",1a)':{tag:'(0019,"DLX_SERIE_01",1a)',vr:"IS",name:"YZoomCenter",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",1b)':{tag:'(0019,"DLX_SERIE_01",1b)',vr:"DS",name:"Focus",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",1c)':{tag:'(0019,"DLX_SERIE_01",1c)',vr:"CS",name:"Dose",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",1d)':{tag:'(0019,"DLX_SERIE_01",1d)',vr:"IS",name:"SideMark",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",1e)':{tag:'(0019,"DLX_SERIE_01",1e)',vr:"IS",name:"PercentageLandscape",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",1f)':{tag:'(0019,"DLX_SERIE_01",1f)',vr:"DS",name:"ExposureDuration",vm:"1",version:"PrivateTag"},'(00E1,"ELSCINT1",01)':{tag:'(00E1,"ELSCINT1",01)',vr:"US",name:"DataDictionaryVersion",vm:"1",version:"PrivateTag"},'(00E1,"ELSCINT1",14)':{tag:'(00E1,"ELSCINT1",14)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(00E1,"ELSCINT1",22)':{tag:'(00E1,"ELSCINT1",22)',vr:"DS",name:"Unknown",vm:"2",version:"PrivateTag"},'(00E1,"ELSCINT1",23)':{tag:'(00E1,"ELSCINT1",23)',vr:"DS",name:"Unknown",vm:"2",version:"PrivateTag"},'(00E1,"ELSCINT1",24)':{tag:'(00E1,"ELSCINT1",24)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(00E1,"ELSCINT1",25)':{tag:'(00E1,"ELSCINT1",25)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(00E1,"ELSCINT1",40)':{tag:'(00E1,"ELSCINT1",40)',vr:"SH",name:"OffsetFromCTMRImages",vm:"1",version:"PrivateTag"},'(0601,"ELSCINT1",00)':{tag:'(0601,"ELSCINT1",00)',vr:"SH",name:"ImplementationVersion",vm:"1",version:"PrivateTag"},'(0601,"ELSCINT1",20)':{tag:'(0601,"ELSCINT1",20)',vr:"DS",name:"RelativeTablePosition",vm:"1",version:"PrivateTag"},'(0601,"ELSCINT1",21)':{tag:'(0601,"ELSCINT1",21)',vr:"DS",name:"RelativeTableHeight",vm:"1",version:"PrivateTag"},'(0601,"ELSCINT1",30)':{tag:'(0601,"ELSCINT1",30)',vr:"SH",name:"SurviewDirection",vm:"1",version:"PrivateTag"},'(0601,"ELSCINT1",31)':{tag:'(0601,"ELSCINT1",31)',vr:"DS",name:"SurviewLength",vm:"1",version:"PrivateTag"},'(0601,"ELSCINT1",50)':{tag:'(0601,"ELSCINT1",50)',vr:"SH",name:"ImageViewType",vm:"1",version:"PrivateTag"},'(0601,"ELSCINT1",70)':{tag:'(0601,"ELSCINT1",70)',vr:"DS",name:"BatchNumber",vm:"1",version:"PrivateTag"},'(0601,"ELSCINT1",71)':{tag:'(0601,"ELSCINT1",71)',vr:"DS",name:"BatchSize",vm:"1",version:"PrivateTag"},'(0601,"ELSCINT1",72)':{tag:'(0601,"ELSCINT1",72)',vr:"DS",name:"BatchSliceNumber",vm:"1",version:"PrivateTag"},'(0009,"FDMS 1.0",04)':{tag:'(0009,"FDMS 1.0",04)',vr:"SH",name:"ImageControlUnit",vm:"1",version:"PrivateTag"},'(0009,"FDMS 1.0",05)':{tag:'(0009,"FDMS 1.0",05)',vr:"OW",name:"ImageUID",vm:"1",version:"PrivateTag"},'(0009,"FDMS 1.0",06)':{tag:'(0009,"FDMS 1.0",06)',vr:"OW",name:"RouteImageUID",vm:"1",version:"PrivateTag"},'(0009,"FDMS 1.0",08)':{tag:'(0009,"FDMS 1.0",08)',vr:"UL",name:"ImageDisplayInformationVersionNo",vm:"1",version:"PrivateTag"},'(0009,"FDMS 1.0",09)':{tag:'(0009,"FDMS 1.0",09)',vr:"UL",name:"PatientInformationVersionNo",vm:"1",version:"PrivateTag"},'(0009,"FDMS 1.0",0C)':{tag:'(0009,"FDMS 1.0",0C)',vr:"OW",name:"FilmUID",vm:"1",version:"PrivateTag"},'(0009,"FDMS 1.0",10)':{tag:'(0009,"FDMS 1.0",10)',vr:"CS",name:"ExposureUnitTypeCode",vm:"1",version:"PrivateTag"},'(0009,"FDMS 1.0",80)':{tag:'(0009,"FDMS 1.0",80)',vr:"LO",name:"KanjiHospitalName",vm:"1",version:"PrivateTag"},'(0009,"FDMS 1.0",90)':{tag:'(0009,"FDMS 1.0",90)',vr:"ST",name:"DistributionCode",vm:"1",version:"PrivateTag"},'(0009,"FDMS 1.0",92)':{tag:'(0009,"FDMS 1.0",92)',vr:"SH",name:"KanjiDepartmentName",vm:"1",version:"PrivateTag"},'(0009,"FDMS 1.0",F0)':{tag:'(0009,"FDMS 1.0",F0)',vr:"CS",name:"BlackeningProcessFlag",vm:"1",version:"PrivateTag"},'(0019,"FDMS 1.0",15)':{tag:'(0019,"FDMS 1.0",15)',vr:"LO",name:"KanjiBodyPartForExposure",vm:"1",version:"PrivateTag"},'(0019,"FDMS 1.0",32)':{tag:'(0019,"FDMS 1.0",32)',vr:"LO",name:"KanjiMenuName",vm:"1",version:"PrivateTag"},'(0019,"FDMS 1.0",40)':{tag:'(0019,"FDMS 1.0",40)',vr:"CS",name:"ImageProcessingType",vm:"1",version:"PrivateTag"},'(0019,"FDMS 1.0",50)':{tag:'(0019,"FDMS 1.0",50)',vr:"CS",name:"EDRMode",vm:"1",version:"PrivateTag"},'(0019,"FDMS 1.0",60)':{tag:'(0019,"FDMS 1.0",60)',vr:"SH",name:"RadiographersCode",vm:"1",version:"PrivateTag"},'(0019,"FDMS 1.0",70)':{tag:'(0019,"FDMS 1.0",70)',vr:"IS",name:"SplitExposureFormat",vm:"1",version:"PrivateTag"},'(0019,"FDMS 1.0",71)':{tag:'(0019,"FDMS 1.0",71)',vr:"IS",name:"NoOfSplitExposureFrames",vm:"1",version:"PrivateTag"},'(0019,"FDMS 1.0",80)':{tag:'(0019,"FDMS 1.0",80)',vr:"IS",name:"ReadingPositionSpecification",vm:"1",version:"PrivateTag"},'(0019,"FDMS 1.0",81)':{tag:'(0019,"FDMS 1.0",81)',vr:"IS",name:"ReadingSensitivityCenter",vm:"1",version:"PrivateTag"},'(0019,"FDMS 1.0",90)':{tag:'(0019,"FDMS 1.0",90)',vr:"SH",name:"FilmAnnotationCharacterString1",vm:"1",version:"PrivateTag"},'(0019,"FDMS 1.0",91)':{tag:'(0019,"FDMS 1.0",91)',vr:"SH",name:"FilmAnnotationCharacterString2",vm:"1",version:"PrivateTag"},'(0021,"FDMS 1.0",10)':{tag:'(0021,"FDMS 1.0",10)',vr:"CS",name:"FCRImageID",vm:"1",version:"PrivateTag"},'(0021,"FDMS 1.0",30)':{tag:'(0021,"FDMS 1.0",30)',vr:"CS",name:"SetNo",vm:"1",version:"PrivateTag"},'(0021,"FDMS 1.0",40)':{tag:'(0021,"FDMS 1.0",40)',vr:"IS",name:"ImageNoInTheSet",vm:"1",version:"PrivateTag"},'(0021,"FDMS 1.0",50)':{tag:'(0021,"FDMS 1.0",50)',vr:"CS",name:"PairProcessingInformation",vm:"1",version:"PrivateTag"},'(0021,"FDMS 1.0",80)':{tag:'(0021,"FDMS 1.0",80)',vr:"OB",name:"EquipmentTypeSpecificInformation",vm:"1",version:"PrivateTag"},'(0023,"FDMS 1.0",10)':{tag:'(0023,"FDMS 1.0",10)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0023,"FDMS 1.0",20)':{tag:'(0023,"FDMS 1.0",20)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0023,"FDMS 1.0",30)':{tag:'(0023,"FDMS 1.0",30)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",10)':{tag:'(0025,"FDMS 1.0",10)',vr:"US",name:"RelativeLightEmissionAmountSk",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",11)':{tag:'(0025,"FDMS 1.0",11)',vr:"US",name:"TermOfCorrectionForEachIPTypeSt",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",12)':{tag:'(0025,"FDMS 1.0",12)',vr:"US",name:"ReadingGainGp",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",13)':{tag:'(0025,"FDMS 1.0",13)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",15)':{tag:'(0025,"FDMS 1.0",15)',vr:"CS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",20)':{tag:'(0025,"FDMS 1.0",20)',vr:"US",name:"Unknown",vm:"2",version:"PrivateTag"},'(0025,"FDMS 1.0",21)':{tag:'(0025,"FDMS 1.0",21)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",30)':{tag:'(0025,"FDMS 1.0",30)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",31)':{tag:'(0025,"FDMS 1.0",31)',vr:"SS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",32)':{tag:'(0025,"FDMS 1.0",32)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",33)':{tag:'(0025,"FDMS 1.0",33)',vr:"SS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",34)':{tag:'(0025,"FDMS 1.0",34)',vr:"SS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",40)':{tag:'(0025,"FDMS 1.0",40)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",41)':{tag:'(0025,"FDMS 1.0",41)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",42)':{tag:'(0025,"FDMS 1.0",42)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",43)':{tag:'(0025,"FDMS 1.0",43)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",50)':{tag:'(0025,"FDMS 1.0",50)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",51)':{tag:'(0025,"FDMS 1.0",51)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",52)':{tag:'(0025,"FDMS 1.0",52)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",53)':{tag:'(0025,"FDMS 1.0",53)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",60)':{tag:'(0025,"FDMS 1.0",60)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",61)':{tag:'(0025,"FDMS 1.0",61)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",62)':{tag:'(0025,"FDMS 1.0",62)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",63)':{tag:'(0025,"FDMS 1.0",63)',vr:"CS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",70)':{tag:'(0025,"FDMS 1.0",70)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",71)':{tag:'(0025,"FDMS 1.0",71)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",72)':{tag:'(0025,"FDMS 1.0",72)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",73)':{tag:'(0025,"FDMS 1.0",73)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0025,"FDMS 1.0",74)':{tag:'(0025,"FDMS 1.0",74)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0025,"FDMS 1.0",80)':{tag:'(0025,"FDMS 1.0",80)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",81)':{tag:'(0025,"FDMS 1.0",81)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",82)':{tag:'(0025,"FDMS 1.0",82)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",83)':{tag:'(0025,"FDMS 1.0",83)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0025,"FDMS 1.0",84)':{tag:'(0025,"FDMS 1.0",84)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0025,"FDMS 1.0",90)':{tag:'(0025,"FDMS 1.0",90)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",91)':{tag:'(0025,"FDMS 1.0",91)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",92)':{tag:'(0025,"FDMS 1.0",92)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",93)':{tag:'(0025,"FDMS 1.0",93)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",94)':{tag:'(0025,"FDMS 1.0",94)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",95)':{tag:'(0025,"FDMS 1.0",95)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",96)':{tag:'(0025,"FDMS 1.0",96)',vr:"CS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",a0)':{tag:'(0025,"FDMS 1.0",a0)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",a1)':{tag:'(0025,"FDMS 1.0",a1)',vr:"SS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",a2)':{tag:'(0025,"FDMS 1.0",a2)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",a3)':{tag:'(0025,"FDMS 1.0",a3)',vr:"SS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0027,"FDMS 1.0",10)':{tag:'(0027,"FDMS 1.0",10)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0027,"FDMS 1.0",20)':{tag:'(0027,"FDMS 1.0",20)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0027,"FDMS 1.0",30)':{tag:'(0027,"FDMS 1.0",30)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0027,"FDMS 1.0",40)':{tag:'(0027,"FDMS 1.0",40)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0027,"FDMS 1.0",50)':{tag:'(0027,"FDMS 1.0",50)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0027,"FDMS 1.0",60)':{tag:'(0027,"FDMS 1.0",60)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0027,"FDMS 1.0",70)':{tag:'(0027,"FDMS 1.0",70)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0027,"FDMS 1.0",80)':{tag:'(0027,"FDMS 1.0",80)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0027,"FDMS 1.0",a0)':{tag:'(0027,"FDMS 1.0",a0)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0027,"FDMS 1.0",a1)':{tag:'(0027,"FDMS 1.0",a1)',vr:"CS",name:"Unknown",vm:"2",version:"PrivateTag"},'(0027,"FDMS 1.0",a2)':{tag:'(0027,"FDMS 1.0",a2)',vr:"CS",name:"Unknown",vm:"2",version:"PrivateTag"},'(0027,"FDMS 1.0",a3)':{tag:'(0027,"FDMS 1.0",a3)',vr:"SS",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0029,"FDMS 1.0",20)':{tag:'(0029,"FDMS 1.0",20)',vr:"CS",name:"ImageScanningDirection",vm:"1",version:"PrivateTag"},'(0029,"FDMS 1.0",30)':{tag:'(0029,"FDMS 1.0",30)',vr:"CS",name:"ExtendedReadingSizeValue",vm:"1",version:"PrivateTag"},'(0029,"FDMS 1.0",34)':{tag:'(0029,"FDMS 1.0",34)',vr:"US",name:"MagnificationReductionRatio",vm:"1",version:"PrivateTag"},'(0029,"FDMS 1.0",44)':{tag:'(0029,"FDMS 1.0",44)',vr:"CS",name:"LineDensityCode",vm:"1",version:"PrivateTag"},'(0029,"FDMS 1.0",50)':{tag:'(0029,"FDMS 1.0",50)',vr:"CS",name:"DataCompressionCode",vm:"1",version:"PrivateTag"},'(2011,"FDMS 1.0",11)':{tag:'(2011,"FDMS 1.0",11)',vr:"CS",name:"ImagePosition SpecifyingFlag",vm:"1",version:"PrivateTag"},'(50F1,"FDMS 1.0",06)':{tag:'(50F1,"FDMS 1.0",06)',vr:"CS",name:"EnergySubtractionParam",vm:"1",version:"PrivateTag"},'(50F1,"FDMS 1.0",07)':{tag:'(50F1,"FDMS 1.0",07)',vr:"CS",name:"SubtractionRegistrationResult",vm:"1",version:"PrivateTag"},'(50F1,"FDMS 1.0",08)':{tag:'(50F1,"FDMS 1.0",08)',vr:"CS",name:"EnergySubtractionParam2",vm:"1",version:"PrivateTag"},'(50F1,"FDMS 1.0",09)':{tag:'(50F1,"FDMS 1.0",09)',vr:"SL",name:"AfinConversionCoefficient",vm:"1",version:"PrivateTag"},'(50F1,"FDMS 1.0",10)':{tag:'(50F1,"FDMS 1.0",10)',vr:"CS",name:"FilmOutputFormat",vm:"1",version:"PrivateTag"},'(50F1,"FDMS 1.0",20)':{tag:'(50F1,"FDMS 1.0",20)',vr:"CS",name:"ImageProcessingModificationFlag",vm:"1",version:"PrivateTag"},'(0009,"FFP DATA",01)':{tag:'(0009,"FFP DATA",01)',vr:"UN",name:"CRHeaderInformation",vm:"1",version:"PrivateTag"},'(0019,"GE ??? From Adantage Review CS",30)':{tag:'(0019,"GE ??? From Adantage Review CS",30)',vr:"LO",name:"CREDRMode",vm:"1",version:"PrivateTag"},'(0019,"GE ??? From Adantage Review CS",40)':{tag:'(0019,"GE ??? From Adantage Review CS",40)',vr:"LO",name:"CRLatitude",vm:"1",version:"PrivateTag"},'(0019,"GE ??? From Adantage Review CS",50)':{tag:'(0019,"GE ??? From Adantage Review CS",50)',vr:"LO",name:"CRGroupNumber",vm:"1",version:"PrivateTag"},'(0019,"GE ??? From Adantage Review CS",70)':{tag:'(0019,"GE ??? From Adantage Review CS",70)',vr:"LO",name:"CRImageSerialNumber",vm:"1",version:"PrivateTag"},'(0019,"GE ??? From Adantage Review CS",80)':{tag:'(0019,"GE ??? From Adantage Review CS",80)',vr:"LO",name:"CRBarCodeNumber",vm:"1",version:"PrivateTag"},'(0019,"GE ??? From Adantage Review CS",90)':{tag:'(0019,"GE ??? From Adantage Review CS",90)',vr:"LO",name:"CRFilmOutputExposures",vm:"1",version:"PrivateTag"},'(0009,"GEMS_ACQU_01",24)':{tag:'(0009,"GEMS_ACQU_01",24)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_ACQU_01",25)':{tag:'(0009,"GEMS_ACQU_01",25)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_ACQU_01",3e)':{tag:'(0009,"GEMS_ACQU_01",3e)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_ACQU_01",3f)':{tag:'(0009,"GEMS_ACQU_01",3f)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_ACQU_01",42)':{tag:'(0009,"GEMS_ACQU_01",42)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_ACQU_01",43)':{tag:'(0009,"GEMS_ACQU_01",43)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_ACQU_01",f8)':{tag:'(0009,"GEMS_ACQU_01",f8)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_ACQU_01",fb)':{tag:'(0009,"GEMS_ACQU_01",fb)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",01)':{tag:'(0019,"GEMS_ACQU_01",01)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",02)':{tag:'(0019,"GEMS_ACQU_01",02)',vr:"SL",name:"NumberOfCellsInDetector",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",03)':{tag:'(0019,"GEMS_ACQU_01",03)',vr:"DS",name:"CellNumberAtTheta",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",04)':{tag:'(0019,"GEMS_ACQU_01",04)',vr:"DS",name:"CellSpacing",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",05)':{tag:'(0019,"GEMS_ACQU_01",05)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",06)':{tag:'(0019,"GEMS_ACQU_01",06)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",0e)':{tag:'(0019,"GEMS_ACQU_01",0e)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",0f)':{tag:'(0019,"GEMS_ACQU_01",0f)',vr:"DS",name:"HorizontalFrameOfReference",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",11)':{tag:'(0019,"GEMS_ACQU_01",11)',vr:"SS",name:"SeriesContrast",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",12)':{tag:'(0019,"GEMS_ACQU_01",12)',vr:"SS",name:"LastPseq",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",13)':{tag:'(0019,"GEMS_ACQU_01",13)',vr:"SS",name:"StartNumberForBaseline",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",14)':{tag:'(0019,"GEMS_ACQU_01",14)',vr:"SS",name:"End NumberForBaseline",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",15)':{tag:'(0019,"GEMS_ACQU_01",15)',vr:"SS",name:"StartNumberForEnhancedScans",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",16)':{tag:'(0019,"GEMS_ACQU_01",16)',vr:"SS",name:"EndNumberForEnhancedScans",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",17)':{tag:'(0019,"GEMS_ACQU_01",17)',vr:"SS",name:"SeriesPlane",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",18)':{tag:'(0019,"GEMS_ACQU_01",18)',vr:"LO",name:"FirstScanRAS",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",19)':{tag:'(0019,"GEMS_ACQU_01",19)',vr:"DS",name:"FirstScanLocation",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",1a)':{tag:'(0019,"GEMS_ACQU_01",1a)',vr:"LO",name:"LastScanRAS",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",1b)':{tag:'(0019,"GEMS_ACQU_01",1b)',vr:"DS",name:"LastScanLocation",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",1e)':{tag:'(0019,"GEMS_ACQU_01",1e)',vr:"DS",name:"DisplayFieldOfView",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",20)':{tag:'(0019,"GEMS_ACQU_01",20)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",22)':{tag:'(0019,"GEMS_ACQU_01",22)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",23)':{tag:'(0019,"GEMS_ACQU_01",23)',vr:"DS",name:"TableSpeed",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",24)':{tag:'(0019,"GEMS_ACQU_01",24)',vr:"DS",name:"MidScanTime",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",25)':{tag:'(0019,"GEMS_ACQU_01",25)',vr:"SS",name:"MidScanFlag",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",26)':{tag:'(0019,"GEMS_ACQU_01",26)',vr:"SL",name:"DegreesOfAzimuth",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",27)':{tag:'(0019,"GEMS_ACQU_01",27)',vr:"DS",name:"GantryPeriod",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",2a)':{tag:'(0019,"GEMS_ACQU_01",2a)',vr:"DS",name:"XrayOnPosition",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",2b)':{tag:'(0019,"GEMS_ACQU_01",2b)',vr:"DS",name:"XrayOffPosition",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",2c)':{tag:'(0019,"GEMS_ACQU_01",2c)',vr:"SL",name:"NumberOfTriggers",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",2d)':{tag:'(0019,"GEMS_ACQU_01",2d)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",2e)':{tag:'(0019,"GEMS_ACQU_01",2e)',vr:"DS",name:"AngleOfFirstView",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",2f)':{tag:'(0019,"GEMS_ACQU_01",2f)',vr:"DS",name:"TriggerFrequency",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",39)':{tag:'(0019,"GEMS_ACQU_01",39)',vr:"SS",name:"ScanFOVType",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",3a)':{tag:'(0019,"GEMS_ACQU_01",3a)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",3b)':{tag:'(0019,"GEMS_ACQU_01",3b)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",3c)':{tag:'(0019,"GEMS_ACQU_01",3c)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",3e)':{tag:'(0019,"GEMS_ACQU_01",3e)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",3f)':{tag:'(0019,"GEMS_ACQU_01",3f)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",40)':{tag:'(0019,"GEMS_ACQU_01",40)',vr:"SS",name:"StatReconFlag",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",41)':{tag:'(0019,"GEMS_ACQU_01",41)',vr:"SS",name:"ComputeType",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",42)':{tag:'(0019,"GEMS_ACQU_01",42)',vr:"SS",name:"SegmentNumber",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",43)':{tag:'(0019,"GEMS_ACQU_01",43)',vr:"SS",name:"TotalSegmentsRequested",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",44)':{tag:'(0019,"GEMS_ACQU_01",44)',vr:"DS",name:"InterscanDelay",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",47)':{tag:'(0019,"GEMS_ACQU_01",47)',vr:"SS",name:"ViewCompressionFactor",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",48)':{tag:'(0019,"GEMS_ACQU_01",48)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",49)':{tag:'(0019,"GEMS_ACQU_01",49)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",4a)':{tag:'(0019,"GEMS_ACQU_01",4a)',vr:"SS",name:"TotalNumberOfRefChannels",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",4b)':{tag:'(0019,"GEMS_ACQU_01",4b)',vr:"SL",name:"DataSizeForScanData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",52)':{tag:'(0019,"GEMS_ACQU_01",52)',vr:"SS",name:"ReconPostProcessingFlag",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",54)':{tag:'(0019,"GEMS_ACQU_01",54)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",57)':{tag:'(0019,"GEMS_ACQU_01",57)',vr:"SS",name:"CTWaterNumber",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",58)':{tag:'(0019,"GEMS_ACQU_01",58)',vr:"SS",name:"CTBoneNumber",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",5a)':{tag:'(0019,"GEMS_ACQU_01",5a)',vr:"FL",name:"AcquisitionDuration",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",5d)':{tag:'(0019,"GEMS_ACQU_01",5d)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",5e)':{tag:'(0019,"GEMS_ACQU_01",5e)',vr:"SL",name:"NumberOfChannels1To512",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",5f)':{tag:'(0019,"GEMS_ACQU_01",5f)',vr:"SL",name:"IncrementBetweenChannels",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",60)':{tag:'(0019,"GEMS_ACQU_01",60)',vr:"SL",name:"StartingView",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",61)':{tag:'(0019,"GEMS_ACQU_01",61)',vr:"SL",name:"NumberOfViews",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",62)':{tag:'(0019,"GEMS_ACQU_01",62)',vr:"SL",name:"IncrementBetweenViews",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",6a)':{tag:'(0019,"GEMS_ACQU_01",6a)',vr:"SS",name:"DependantOnNumberOfViewsProcessed",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",6b)':{tag:'(0019,"GEMS_ACQU_01",6b)',vr:"SS",name:"FieldOfViewInDetectorCells",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",70)':{tag:'(0019,"GEMS_ACQU_01",70)',vr:"SS",name:"ValueOfBackProjectionButton",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",71)':{tag:'(0019,"GEMS_ACQU_01",71)',vr:"SS",name:"SetIfFatqEstimatesWereUsed",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",72)':{tag:'(0019,"GEMS_ACQU_01",72)',vr:"DS",name:"ZChannelAvgOverViews",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",73)':{tag:'(0019,"GEMS_ACQU_01",73)',vr:"DS",name:"AvgOfLeftRefChannelsOverViews",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",74)':{tag:'(0019,"GEMS_ACQU_01",74)',vr:"DS",name:"MaxLeftChannelOverViews",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",75)':{tag:'(0019,"GEMS_ACQU_01",75)',vr:"DS",name:"AvgOfRightRefChannelsOverViews",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",76)':{tag:'(0019,"GEMS_ACQU_01",76)',vr:"DS",name:"MaxRightChannelOverViews",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",7d)':{tag:'(0019,"GEMS_ACQU_01",7d)',vr:"DS",name:"SecondEcho",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",7e)':{tag:'(0019,"GEMS_ACQU_01",7e)',vr:"SS",name:"NumberOfEchos",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",7f)':{tag:'(0019,"GEMS_ACQU_01",7f)',vr:"DS",name:"TableDelta",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",81)':{tag:'(0019,"GEMS_ACQU_01",81)',vr:"SS",name:"Contiguous",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",82)':{tag:'(0019,"GEMS_ACQU_01",82)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",83)':{tag:'(0019,"GEMS_ACQU_01",83)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",84)':{tag:'(0019,"GEMS_ACQU_01",84)',vr:"DS",name:"PeakSAR",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",85)':{tag:'(0019,"GEMS_ACQU_01",85)',vr:"SS",name:"MonitorSAR",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",86)':{tag:'(0019,"GEMS_ACQU_01",86)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",87)':{tag:'(0019,"GEMS_ACQU_01",87)',vr:"DS",name:"CardiacRepetition Time",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",88)':{tag:'(0019,"GEMS_ACQU_01",88)',vr:"SS",name:"ImagesPerCardiacCycle",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",8a)':{tag:'(0019,"GEMS_ACQU_01",8a)',vr:"SS",name:"ActualReceiveGainAnalog",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",8b)':{tag:'(0019,"GEMS_ACQU_01",8b)',vr:"SS",name:"ActualReceiveGainDigital",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",8d)':{tag:'(0019,"GEMS_ACQU_01",8d)',vr:"DS",name:"DelayAfterTrigger",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",8f)':{tag:'(0019,"GEMS_ACQU_01",8f)',vr:"SS",name:"SwapPhaseFrequency",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",90)':{tag:'(0019,"GEMS_ACQU_01",90)',vr:"SS",name:"PauseInterval",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",91)':{tag:'(0019,"GEMS_ACQU_01",91)',vr:"DS",name:"PulseTime",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",92)':{tag:'(0019,"GEMS_ACQU_01",92)',vr:"SL",name:"SliceOffsetOnFrequencyAxis",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",93)':{tag:'(0019,"GEMS_ACQU_01",93)',vr:"DS",name:"CenterFrequency",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",94)':{tag:'(0019,"GEMS_ACQU_01",94)',vr:"SS",name:"TransmitGain",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",95)':{tag:'(0019,"GEMS_ACQU_01",95)',vr:"SS",name:"AnalogReceiverGain",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",96)':{tag:'(0019,"GEMS_ACQU_01",96)',vr:"SS",name:"DigitalReceiverGain",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",97)':{tag:'(0019,"GEMS_ACQU_01",97)',vr:"SL",name:"BitmapDefiningCVs",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",98)':{tag:'(0019,"GEMS_ACQU_01",98)',vr:"SS",name:"CenterFrequencyMethod",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",99)':{tag:'(0019,"GEMS_ACQU_01",99)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",9b)':{tag:'(0019,"GEMS_ACQU_01",9b)',vr:"SS",name:"PulseSequenceMode",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",9c)':{tag:'(0019,"GEMS_ACQU_01",9c)',vr:"LO",name:"PulseSequenceName",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",9d)':{tag:'(0019,"GEMS_ACQU_01",9d)',vr:"DT",name:"PulseSequenceDate",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",9e)':{tag:'(0019,"GEMS_ACQU_01",9e)',vr:"LO",name:"InternalPulseSequenceName",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",9f)':{tag:'(0019,"GEMS_ACQU_01",9f)',vr:"SS",name:"TransmittingCoil",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",a0)':{tag:'(0019,"GEMS_ACQU_01",a0)',vr:"SS",name:"SurfaceCoilType",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",a1)':{tag:'(0019,"GEMS_ACQU_01",a1)',vr:"SS",name:"ExtremityCoilFlag",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",a2)':{tag:'(0019,"GEMS_ACQU_01",a2)',vr:"SL",name:"RawDataRunNumber",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",a3)':{tag:'(0019,"GEMS_ACQU_01",a3)',vr:"UL",name:"CalibratedFieldStrength",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",a4)':{tag:'(0019,"GEMS_ACQU_01",a4)',vr:"SS",name:"SATFatWaterBone",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",a5)':{tag:'(0019,"GEMS_ACQU_01",a5)',vr:"DS",name:"ReceiveBandwidth",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",a7)':{tag:'(0019,"GEMS_ACQU_01",a7)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",a8)':{tag:'(0019,"GEMS_ACQU_01",a8)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",a9)':{tag:'(0019,"GEMS_ACQU_01",a9)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",aa)':{tag:'(0019,"GEMS_ACQU_01",aa)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",ab)':{tag:'(0019,"GEMS_ACQU_01",ab)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",ac)':{tag:'(0019,"GEMS_ACQU_01",ac)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",ad)':{tag:'(0019,"GEMS_ACQU_01",ad)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",ae)':{tag:'(0019,"GEMS_ACQU_01",ae)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",af)':{tag:'(0019,"GEMS_ACQU_01",af)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",b0)':{tag:'(0019,"GEMS_ACQU_01",b0)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",b1)':{tag:'(0019,"GEMS_ACQU_01",b1)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",b2)':{tag:'(0019,"GEMS_ACQU_01",b2)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",b3)':{tag:'(0019,"GEMS_ACQU_01",b3)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",b4)':{tag:'(0019,"GEMS_ACQU_01",b4)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",b5)':{tag:'(0019,"GEMS_ACQU_01",b5)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",b6)':{tag:'(0019,"GEMS_ACQU_01",b6)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",b7)':{tag:'(0019,"GEMS_ACQU_01",b7)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",b8)':{tag:'(0019,"GEMS_ACQU_01",b8)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",b9)':{tag:'(0019,"GEMS_ACQU_01",b9)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",ba)':{tag:'(0019,"GEMS_ACQU_01",ba)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",bb)':{tag:'(0019,"GEMS_ACQU_01",bb)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",bc)':{tag:'(0019,"GEMS_ACQU_01",bc)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",bd)':{tag:'(0019,"GEMS_ACQU_01",bd)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",be)':{tag:'(0019,"GEMS_ACQU_01",be)',vr:"DS",name:"ProjectionAngle",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",c0)':{tag:'(0019,"GEMS_ACQU_01",c0)',vr:"SS",name:"SaturationPlanes",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",c1)':{tag:'(0019,"GEMS_ACQU_01",c1)',vr:"SS",name:"SurfaceCoilIntensityCorrectionFlag",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",c2)':{tag:'(0019,"GEMS_ACQU_01",c2)',vr:"SS",name:"SATLocationR",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",c3)':{tag:'(0019,"GEMS_ACQU_01",c3)',vr:"SS",name:"SATLocationL",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",c4)':{tag:'(0019,"GEMS_ACQU_01",c4)',vr:"SS",name:"SATLocationA",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",c5)':{tag:'(0019,"GEMS_ACQU_01",c5)',vr:"SS",name:"SATLocationP",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",c6)':{tag:'(0019,"GEMS_ACQU_01",c6)',vr:"SS",name:"SATLocationH",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",c7)':{tag:'(0019,"GEMS_ACQU_01",c7)',vr:"SS",name:"SATLocationF",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",c8)':{tag:'(0019,"GEMS_ACQU_01",c8)',vr:"SS",name:"SATThicknessRL",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",c9)':{tag:'(0019,"GEMS_ACQU_01",c9)',vr:"SS",name:"SATThicknessAP",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",ca)':{tag:'(0019,"GEMS_ACQU_01",ca)',vr:"SS",name:"SATThicknessHF",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",cb)':{tag:'(0019,"GEMS_ACQU_01",cb)',vr:"SS",name:"PrescribedFlowAxis",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",cc)':{tag:'(0019,"GEMS_ACQU_01",cc)',vr:"SS",name:"VelocityEncoding",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",cd)':{tag:'(0019,"GEMS_ACQU_01",cd)',vr:"SS",name:"ThicknessDisclaimer",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",ce)':{tag:'(0019,"GEMS_ACQU_01",ce)',vr:"SS",name:"PrescanType",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",cf)':{tag:'(0019,"GEMS_ACQU_01",cf)',vr:"SS",name:"PrescanStatus",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",d0)':{tag:'(0019,"GEMS_ACQU_01",d0)',vr:"SH",name:"RawDataType",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",d2)':{tag:'(0019,"GEMS_ACQU_01",d2)',vr:"SS",name:"ProjectionAlgorithm",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",d3)':{tag:'(0019,"GEMS_ACQU_01",d3)',vr:"SH",name:"ProjectionAlgorithm",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",d4)':{tag:'(0019,"GEMS_ACQU_01",d4)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",d5)':{tag:'(0019,"GEMS_ACQU_01",d5)',vr:"SS",name:"FractionalEcho",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",d6)':{tag:'(0019,"GEMS_ACQU_01",d6)',vr:"SS",name:"PrepPulse",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",d7)':{tag:'(0019,"GEMS_ACQU_01",d7)',vr:"SS",name:"CardiacPhases",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",d8)':{tag:'(0019,"GEMS_ACQU_01",d8)',vr:"SS",name:"VariableEchoFlag",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",d9)':{tag:'(0019,"GEMS_ACQU_01",d9)',vr:"DS",name:"ConcatenatedSAT",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",da)':{tag:'(0019,"GEMS_ACQU_01",da)',vr:"SS",name:"ReferenceChannelUsed",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",db)':{tag:'(0019,"GEMS_ACQU_01",db)',vr:"DS",name:"BackProjectorCoefficient",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",dc)':{tag:'(0019,"GEMS_ACQU_01",dc)',vr:"SS",name:"PrimarySpeedCorrectionUsed",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",dd)':{tag:'(0019,"GEMS_ACQU_01",dd)',vr:"SS",name:"OverrangeCorrectionUsed",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",de)':{tag:'(0019,"GEMS_ACQU_01",de)',vr:"DS",name:"DynamicZAlphaValue",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",df)':{tag:'(0019,"GEMS_ACQU_01",df)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",e0)':{tag:'(0019,"GEMS_ACQU_01",e0)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",e1)':{tag:'(0019,"GEMS_ACQU_01",e1)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",e2)':{tag:'(0019,"GEMS_ACQU_01",e2)',vr:"DS",name:"VelocityEncodeScale",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",e3)':{tag:'(0019,"GEMS_ACQU_01",e3)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",e4)':{tag:'(0019,"GEMS_ACQU_01",e4)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",e5)':{tag:'(0019,"GEMS_ACQU_01",e5)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",e6)':{tag:'(0019,"GEMS_ACQU_01",e6)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",e8)':{tag:'(0019,"GEMS_ACQU_01",e8)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",e9)':{tag:'(0019,"GEMS_ACQU_01",e9)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",eb)':{tag:'(0019,"GEMS_ACQU_01",eb)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",ec)':{tag:'(0019,"GEMS_ACQU_01",ec)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",f0)':{tag:'(0019,"GEMS_ACQU_01",f0)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",f1)':{tag:'(0019,"GEMS_ACQU_01",f1)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",f2)':{tag:'(0019,"GEMS_ACQU_01",f2)',vr:"SS",name:"FastPhases",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",f3)':{tag:'(0019,"GEMS_ACQU_01",f3)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",f4)':{tag:'(0019,"GEMS_ACQU_01",f4)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",f9)':{tag:'(0019,"GEMS_ACQU_01",f9)',vr:"DS",name:"TransmitGain",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK1",00)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK1",00)',vr:"LO",name:"CRExposureMenuCode",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK1",10)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK1",10)',vr:"LO",name:"CRExposureMenuString",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK1",20)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK1",20)',vr:"LO",name:"CREDRMode",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK1",30)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK1",30)',vr:"LO",name:"CRLatitude",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK1",40)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK1",40)',vr:"LO",name:"CRGroupNumber",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK1",50)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK1",50)',vr:"US",name:"CRImageSerialNumber",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK1",60)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK1",60)',vr:"LO",name:"CRBarCodeNumber",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK1",70)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK1",70)',vr:"LO",name:"CRFilmOutputExposure",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK1",80)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK1",80)',vr:"LO",name:"CRFilmFormat",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK1",90)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK1",90)',vr:"LO",name:"CRSShiftString",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK2",00)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK2",00)',vr:"US",name:"CRSShift",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK2",10)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK2",10)',vr:"DS",name:"CRCShift",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK2",20)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK2",20)',vr:"DS",name:"CRGT",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK2",30)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK2",30)',vr:"DS",name:"CRGA",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK2",40)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK2",40)',vr:"DS",name:"CRGC",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK2",50)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK2",50)',vr:"DS",name:"CRGS",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK2",60)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK2",60)',vr:"DS",name:"CRRT",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK2",70)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK2",70)',vr:"DS",name:"CRRE",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK2",80)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK2",80)',vr:"US",name:"CRRN",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK2",90)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK2",90)',vr:"DS",name:"CRDRT",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK3",00)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK3",00)',vr:"DS",name:"CRDRE",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK3",10)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK3",10)',vr:"US",name:"CRDRN",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK3",20)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK3",20)',vr:"DS",name:"CRORE",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK3",30)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK3",30)',vr:"US",name:"CRORN",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK3",40)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK3",40)',vr:"US",name:"CRORD",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK3",50)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK3",50)',vr:"LO",name:"CRCassetteSize",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK3",60)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK3",60)',vr:"LO",name:"CRMachineID",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK3",70)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK3",70)',vr:"LO",name:"CRMachineType",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK3",80)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK3",80)',vr:"LO",name:"CRTechnicianCode",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK3",90)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK3",90)',vr:"LO",name:"CREnergySubtractionParameters",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK1",00)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK1",00)',vr:"LO",name:"CRExposureMenuCode",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK1",10)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK1",10)',vr:"LO",name:"CRExposureMenuString",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK1",20)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK1",20)',vr:"LO",name:"CREDRMode",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK1",30)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK1",30)',vr:"LO",name:"CRLatitude",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK1",40)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK1",40)',vr:"LO",name:"CRGroupNumber",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK1",50)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK1",50)',vr:"US",name:"CRImageSerialNumber",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK1",60)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK1",60)',vr:"LO",name:"CRBarCodeNumber",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK1",70)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK1",70)',vr:"LO",name:"CRFilmOutputExposure",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK1",80)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK1",80)',vr:"LO",name:"CRFilmFormat",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK1",90)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK1",90)',vr:"LO",name:"CRSShiftString",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK2",00)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK2",00)',vr:"US",name:"CRSShift",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK2",10)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK2",10)',vr:"LO",name:"CRCShift",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK2",20)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK2",20)',vr:"LO",name:"CRGT",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK2",30)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK2",30)',vr:"DS",name:"CRGA",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK2",40)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK2",40)',vr:"DS",name:"CRGC",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK2",50)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK2",50)',vr:"DS",name:"CRGS",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK2",60)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK2",60)',vr:"LO",name:"CRRT",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK2",70)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK2",70)',vr:"DS",name:"CRRE",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK2",80)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK2",80)',vr:"US",name:"CRRN",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK2",90)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK2",90)',vr:"DS",name:"CRDRT",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK3",00)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK3",00)',vr:"DS",name:"CRDRE",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK3",10)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK3",10)',vr:"US",name:"CRDRN",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK3",20)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK3",20)',vr:"DS",name:"CRORE",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK3",30)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK3",30)',vr:"US",name:"CRORN",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK3",40)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK3",40)',vr:"US",name:"CRORD",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK3",50)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK3",50)',vr:"LO",name:"CRCassetteSize",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK3",60)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK3",60)',vr:"LO",name:"CRMachineID",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK3",70)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK3",70)',vr:"LO",name:"CRMachineType",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK3",80)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK3",80)',vr:"LO",name:"CRTechnicianCode",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK3",90)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK3",90)',vr:"LO",name:"CREnergySubtractionParameters",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK3",f0)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK3",f0)',vr:"LO",name:"CRDistributionCode",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK3",ff)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK3",ff)',vr:"US",name:"CRShuttersApplied",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",01)':{tag:'(0047,"GEMS_ADWSoft_3D1",01)',vr:"SQ",name:"Reconstruction Parameters Sequence",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",50)':{tag:'(0047,"GEMS_ADWSoft_3D1",50)',vr:"UL",name:"VolumeVoxelCount",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",51)':{tag:'(0047,"GEMS_ADWSoft_3D1",51)',vr:"UL",name:"VolumeSegmentCount",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",53)':{tag:'(0047,"GEMS_ADWSoft_3D1",53)',vr:"US",name:"VolumeSliceSize",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",54)':{tag:'(0047,"GEMS_ADWSoft_3D1",54)',vr:"US",name:"VolumeSliceCount",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",55)':{tag:'(0047,"GEMS_ADWSoft_3D1",55)',vr:"SL",name:"VolumeThresholdValue",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",57)':{tag:'(0047,"GEMS_ADWSoft_3D1",57)',vr:"DS",name:"VolumeVoxelRatio",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",58)':{tag:'(0047,"GEMS_ADWSoft_3D1",58)',vr:"DS",name:"VolumeVoxelSize",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",59)':{tag:'(0047,"GEMS_ADWSoft_3D1",59)',vr:"US",name:"VolumeZPositionSize",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",60)':{tag:'(0047,"GEMS_ADWSoft_3D1",60)',vr:"DS",name:"VolumeBaseLine",vm:"9",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",61)':{tag:'(0047,"GEMS_ADWSoft_3D1",61)',vr:"DS",name:"VolumeCenterPoint",vm:"3",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",63)':{tag:'(0047,"GEMS_ADWSoft_3D1",63)',vr:"SL",name:"VolumeSkewBase",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",64)':{tag:'(0047,"GEMS_ADWSoft_3D1",64)',vr:"DS",name:"VolumeRegistrationTransformRotationMatrix",vm:"9",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",65)':{tag:'(0047,"GEMS_ADWSoft_3D1",65)',vr:"DS",name:"VolumeRegistrationTransformTranslationVector",vm:"3",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",70)':{tag:'(0047,"GEMS_ADWSoft_3D1",70)',vr:"DS",name:"KVPList",vm:"1-n",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",71)':{tag:'(0047,"GEMS_ADWSoft_3D1",71)',vr:"IS",name:"XRayTubeCurrentList",vm:"1-n",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",72)':{tag:'(0047,"GEMS_ADWSoft_3D1",72)',vr:"IS",name:"ExposureList",vm:"1-n",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",80)':{tag:'(0047,"GEMS_ADWSoft_3D1",80)',vr:"LO",name:"AcquisitionDLXIdentifier",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",85)':{tag:'(0047,"GEMS_ADWSoft_3D1",85)',vr:"SQ",name:"AcquisitionDLX2DSeriesSequence",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",89)':{tag:'(0047,"GEMS_ADWSoft_3D1",89)',vr:"DS",name:"ContrastAgentVolumeList",vm:"1-n",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",8A)':{tag:'(0047,"GEMS_ADWSoft_3D1",8A)',vr:"US",name:"NumberOfInjections",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",8B)':{tag:'(0047,"GEMS_ADWSoft_3D1",8B)',vr:"US",name:"FrameCount",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",91)':{tag:'(0047,"GEMS_ADWSoft_3D1",91)',vr:"LO",name:"XA3DReconstructionAlgorithmName",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",92)':{tag:'(0047,"GEMS_ADWSoft_3D1",92)',vr:"CS",name:"XA3DReconstructionAlgorithmVersion",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",93)':{tag:'(0047,"GEMS_ADWSoft_3D1",93)',vr:"DA",name:"DLXCalibrationDate",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",94)':{tag:'(0047,"GEMS_ADWSoft_3D1",94)',vr:"TM",name:"DLXCalibrationTime",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",95)':{tag:'(0047,"GEMS_ADWSoft_3D1",95)',vr:"CS",name:"DLXCalibrationStatus",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",96)':{tag:'(0047,"GEMS_ADWSoft_3D1",96)',vr:"IS",name:"UsedFrames",vm:"1-n",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",98)':{tag:'(0047,"GEMS_ADWSoft_3D1",98)',vr:"US",name:"TransformCount",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",99)':{tag:'(0047,"GEMS_ADWSoft_3D1",99)',vr:"SQ",name:"TransformSequence",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",9A)':{tag:'(0047,"GEMS_ADWSoft_3D1",9A)',vr:"DS",name:"TransformRotationMatrix",vm:"9",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",9B)':{tag:'(0047,"GEMS_ADWSoft_3D1",9B)',vr:"DS",name:"TransformTranslationVector",vm:"3",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",9C)':{tag:'(0047,"GEMS_ADWSoft_3D1",9C)',vr:"LO",name:"TransformLabel",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",B0)':{tag:'(0047,"GEMS_ADWSoft_3D1",B0)',vr:"SQ",name:"WireframeList",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",B1)':{tag:'(0047,"GEMS_ADWSoft_3D1",B1)',vr:"US",name:"WireframeCount",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",B2)':{tag:'(0047,"GEMS_ADWSoft_3D1",B2)',vr:"US",name:"LocationSystem",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",B5)':{tag:'(0047,"GEMS_ADWSoft_3D1",B5)',vr:"LO",name:"WireframeName",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",B6)':{tag:'(0047,"GEMS_ADWSoft_3D1",B6)',vr:"LO",name:"WireframeGroupName",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",B7)':{tag:'(0047,"GEMS_ADWSoft_3D1",B7)',vr:"LO",name:"WireframeColor",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",B8)':{tag:'(0047,"GEMS_ADWSoft_3D1",B8)',vr:"SL",name:"WireframeAttributes",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",B9)':{tag:'(0047,"GEMS_ADWSoft_3D1",B9)',vr:"SL",name:"WireframePointCount",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",BA)':{tag:'(0047,"GEMS_ADWSoft_3D1",BA)',vr:"SL",name:"WireframeTimestamp",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",BB)':{tag:'(0047,"GEMS_ADWSoft_3D1",BB)',vr:"SQ",name:"WireframePointList",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",BC)':{tag:'(0047,"GEMS_ADWSoft_3D1",BC)',vr:"DS",name:"WireframePointsCoordinates",vm:"3",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",C0)':{tag:'(0047,"GEMS_ADWSoft_3D1",C0)',vr:"DS",name:"VolumeUpperLeftHighCornerRAS",vm:"3",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",C1)':{tag:'(0047,"GEMS_ADWSoft_3D1",C1)',vr:"DS",name:"VolumeSliceToRASRotationMatrix",vm:"9",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",C2)':{tag:'(0047,"GEMS_ADWSoft_3D1",C2)',vr:"DS",name:"VolumeUpperLeftHighCornerTLOC",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",D1)':{tag:'(0047,"GEMS_ADWSoft_3D1",D1)',vr:"OB",name:"VolumeSegmentList",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",D2)':{tag:'(0047,"GEMS_ADWSoft_3D1",D2)',vr:"OB",name:"VolumeGradientList",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",D3)':{tag:'(0047,"GEMS_ADWSoft_3D1",D3)',vr:"OB",name:"VolumeDensityList",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",D4)':{tag:'(0047,"GEMS_ADWSoft_3D1",D4)',vr:"OB",name:"VolumeZPositionList",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",D5)':{tag:'(0047,"GEMS_ADWSoft_3D1",D5)',vr:"OB",name:"VolumeOriginalIndexList",vm:"1",version:"PrivateTag"},'(0039,"GEMS_ADWSoft_DPO",80)':{tag:'(0039,"GEMS_ADWSoft_DPO",80)',vr:"IS",name:"PrivateEntityNumber",vm:"1",version:"PrivateTag"},'(0039,"GEMS_ADWSoft_DPO",85)':{tag:'(0039,"GEMS_ADWSoft_DPO",85)',vr:"DA",name:"PrivateEntityDate",vm:"1",version:"PrivateTag"},'(0039,"GEMS_ADWSoft_DPO",90)':{tag:'(0039,"GEMS_ADWSoft_DPO",90)',vr:"TM",name:"PrivateEntityTime",vm:"1",version:"PrivateTag"},'(0039,"GEMS_ADWSoft_DPO",95)':{tag:'(0039,"GEMS_ADWSoft_DPO",95)',vr:"LO",name:"PrivateEntityLaunchCommand",vm:"1",version:"PrivateTag"},'(0039,"GEMS_ADWSoft_DPO",AA)':{tag:'(0039,"GEMS_ADWSoft_DPO",AA)',vr:"CS",name:"PrivateEntityType",vm:"1",version:"PrivateTag"},'(0033,"GEMS_CTHD_01",02)':{tag:'(0033,"GEMS_CTHD_01",02)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0037,"GEMS_DRS_1",10)':{tag:'(0037,"GEMS_DRS_1",10)',vr:"LO",name:"ReferringDepartment",vm:"1",version:"PrivateTag"},'(0037,"GEMS_DRS_1",20)':{tag:'(0037,"GEMS_DRS_1",20)',vr:"US",name:"ScreenNumber",vm:"1",version:"PrivateTag"},'(0037,"GEMS_DRS_1",40)':{tag:'(0037,"GEMS_DRS_1",40)',vr:"SH",name:"LeftOrientation",vm:"1",version:"PrivateTag"},'(0037,"GEMS_DRS_1",42)':{tag:'(0037,"GEMS_DRS_1",42)',vr:"SH",name:"RightOrientation",vm:"1",version:"PrivateTag"},'(0037,"GEMS_DRS_1",50)':{tag:'(0037,"GEMS_DRS_1",50)',vr:"CS",name:"Inversion",vm:"1",version:"PrivateTag"},'(0037,"GEMS_DRS_1",60)':{tag:'(0037,"GEMS_DRS_1",60)',vr:"US",name:"DSA",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",10)':{tag:'(0009,"GEMS_GENIE_1",10)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",11)':{tag:'(0009,"GEMS_GENIE_1",11)',vr:"SL",name:"StudyFlags",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",12)':{tag:'(0009,"GEMS_GENIE_1",12)',vr:"SL",name:"StudyType",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",1e)':{tag:'(0009,"GEMS_GENIE_1",1e)',vr:"UI",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",20)':{tag:'(0009,"GEMS_GENIE_1",20)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",21)':{tag:'(0009,"GEMS_GENIE_1",21)',vr:"SL",name:"SeriesFlags",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",22)':{tag:'(0009,"GEMS_GENIE_1",22)',vr:"SH",name:"UserOrientation",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",23)':{tag:'(0009,"GEMS_GENIE_1",23)',vr:"SL",name:"InitiationType",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",24)':{tag:'(0009,"GEMS_GENIE_1",24)',vr:"SL",name:"InitiationDelay",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",25)':{tag:'(0009,"GEMS_GENIE_1",25)',vr:"SL",name:"InitiationCountRate",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",26)':{tag:'(0009,"GEMS_GENIE_1",26)',vr:"SL",name:"NumberEnergySets",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",27)':{tag:'(0009,"GEMS_GENIE_1",27)',vr:"SL",name:"NumberDetectors",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",29)':{tag:'(0009,"GEMS_GENIE_1",29)',vr:"SL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",2a)':{tag:'(0009,"GEMS_GENIE_1",2a)',vr:"SL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",2c)':{tag:'(0009,"GEMS_GENIE_1",2c)',vr:"LO",name:"SeriesComments",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",2d)':{tag:'(0009,"GEMS_GENIE_1",2d)',vr:"SL",name:"TrackBeatAverage",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",2e)':{tag:'(0009,"GEMS_GENIE_1",2e)',vr:"FD",name:"DistancePrescribed",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",30)':{tag:'(0009,"GEMS_GENIE_1",30)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",35)':{tag:'(0009,"GEMS_GENIE_1",35)',vr:"SL",name:"GantryLocusType",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",37)':{tag:'(0009,"GEMS_GENIE_1",37)',vr:"SL",name:"StartingHeartRate",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",38)':{tag:'(0009,"GEMS_GENIE_1",38)',vr:"SL",name:"RRWindowWidth",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",39)':{tag:'(0009,"GEMS_GENIE_1",39)',vr:"SL",name:"RRWindowOffset",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",3a)':{tag:'(0009,"GEMS_GENIE_1",3a)',vr:"SL",name:"PercentCycleImaged",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",40)':{tag:'(0009,"GEMS_GENIE_1",40)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",41)':{tag:'(0009,"GEMS_GENIE_1",41)',vr:"SL",name:"PatientFlags",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",42)':{tag:'(0009,"GEMS_GENIE_1",42)',vr:"DA",name:"PatientCreationDate",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",43)':{tag:'(0009,"GEMS_GENIE_1",43)',vr:"TM",name:"PatientCreationTime",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",0a)':{tag:'(0011,"GEMS_GENIE_1",0a)',vr:"SL",name:"SeriesType",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",0b)':{tag:'(0011,"GEMS_GENIE_1",0b)',vr:"SL",name:"EffectiveSeriesDuration",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",0c)':{tag:'(0011,"GEMS_GENIE_1",0c)',vr:"SL",name:"NumBeats",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",0d)':{tag:'(0011,"GEMS_GENIE_1",0d)',vr:"LO",name:"RadioNuclideName",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",10)':{tag:'(0011,"GEMS_GENIE_1",10)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",12)':{tag:'(0011,"GEMS_GENIE_1",12)',vr:"LO",name:"DatasetName",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",13)':{tag:'(0011,"GEMS_GENIE_1",13)',vr:"SL",name:"DatasetType",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",15)':{tag:'(0011,"GEMS_GENIE_1",15)',vr:"SL",name:"DetectorNumber",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",16)':{tag:'(0011,"GEMS_GENIE_1",16)',vr:"SL",name:"EnergyNumber",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",17)':{tag:'(0011,"GEMS_GENIE_1",17)',vr:"SL",name:"RRIntervalWindowNumber",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",18)':{tag:'(0011,"GEMS_GENIE_1",18)',vr:"SL",name:"MGBinNumber",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",19)':{tag:'(0011,"GEMS_GENIE_1",19)',vr:"FD",name:"RadiusOfRotation",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",1a)':{tag:'(0011,"GEMS_GENIE_1",1a)',vr:"SL",name:"DetectorCountZone",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",1b)':{tag:'(0011,"GEMS_GENIE_1",1b)',vr:"SL",name:"NumEnergyWindows",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",1c)':{tag:'(0011,"GEMS_GENIE_1",1c)',vr:"SL",name:"EnergyOffset",vm:"4",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",1d)':{tag:'(0011,"GEMS_GENIE_1",1d)',vr:"SL",name:"EnergyRange",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",1f)':{tag:'(0011,"GEMS_GENIE_1",1f)',vr:"SL",name:"ImageOrientation",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",23)':{tag:'(0011,"GEMS_GENIE_1",23)',vr:"SL",name:"UseFOVMask",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",24)':{tag:'(0011,"GEMS_GENIE_1",24)',vr:"SL",name:"FOVMaskYCutoffAngle",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",25)':{tag:'(0011,"GEMS_GENIE_1",25)',vr:"SL",name:"FOVMaskCutoffAngle",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",26)':{tag:'(0011,"GEMS_GENIE_1",26)',vr:"SL",name:"TableOrientation",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",27)':{tag:'(0011,"GEMS_GENIE_1",27)',vr:"SL",name:"ROITopLeft",vm:"2",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",28)':{tag:'(0011,"GEMS_GENIE_1",28)',vr:"SL",name:"ROIBottomRight",vm:"2",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",30)':{tag:'(0011,"GEMS_GENIE_1",30)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",33)':{tag:'(0011,"GEMS_GENIE_1",33)',vr:"LO",name:"EnergyCorrectName",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",34)':{tag:'(0011,"GEMS_GENIE_1",34)',vr:"LO",name:"SpatialCorrectName",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",35)':{tag:'(0011,"GEMS_GENIE_1",35)',vr:"LO",name:"TuningCalibName",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",36)':{tag:'(0011,"GEMS_GENIE_1",36)',vr:"LO",name:"UniformityCorrectName",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",37)':{tag:'(0011,"GEMS_GENIE_1",37)',vr:"LO",name:"AcquisitionSpecificCorrectName",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",38)':{tag:'(0011,"GEMS_GENIE_1",38)',vr:"SL",name:"ByteOrder",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",3a)':{tag:'(0011,"GEMS_GENIE_1",3a)',vr:"SL",name:"PictureFormat",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",3b)':{tag:'(0011,"GEMS_GENIE_1",3b)',vr:"FD",name:"PixelScale",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",3c)':{tag:'(0011,"GEMS_GENIE_1",3c)',vr:"FD",name:"PixelOffset",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",3e)':{tag:'(0011,"GEMS_GENIE_1",3e)',vr:"SL",name:"FOVShape",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",3f)':{tag:'(0011,"GEMS_GENIE_1",3f)',vr:"SL",name:"DatasetFlags",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",44)':{tag:'(0011,"GEMS_GENIE_1",44)',vr:"FD",name:"ThresholdCenter",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",45)':{tag:'(0011,"GEMS_GENIE_1",45)',vr:"FD",name:"ThresholdWidth",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",46)':{tag:'(0011,"GEMS_GENIE_1",46)',vr:"SL",name:"InterpolationType",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",55)':{tag:'(0011,"GEMS_GENIE_1",55)',vr:"FD",name:"Period",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",56)':{tag:'(0011,"GEMS_GENIE_1",56)',vr:"FD",name:"ElapsedTime",vm:"1",version:"PrivateTag"},'(0013,"GEMS_GENIE_1",10)':{tag:'(0013,"GEMS_GENIE_1",10)',vr:"FD",name:"DigitalFOV",vm:"2",version:"PrivateTag"},'(0013,"GEMS_GENIE_1",11)':{tag:'(0013,"GEMS_GENIE_1",11)',vr:"SL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0013,"GEMS_GENIE_1",12)':{tag:'(0013,"GEMS_GENIE_1",12)',vr:"SL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0013,"GEMS_GENIE_1",16)':{tag:'(0013,"GEMS_GENIE_1",16)',vr:"SL",name:"AutoTrackPeak",vm:"1",version:"PrivateTag"},'(0013,"GEMS_GENIE_1",17)':{tag:'(0013,"GEMS_GENIE_1",17)',vr:"SL",name:"AutoTrackWidth",vm:"1",version:"PrivateTag"},'(0013,"GEMS_GENIE_1",18)':{tag:'(0013,"GEMS_GENIE_1",18)',vr:"FD",name:"TransmissionScanTime",vm:"1",version:"PrivateTag"},'(0013,"GEMS_GENIE_1",19)':{tag:'(0013,"GEMS_GENIE_1",19)',vr:"FD",name:"TransmissionMaskWidth",vm:"1",version:"PrivateTag"},'(0013,"GEMS_GENIE_1",1a)':{tag:'(0013,"GEMS_GENIE_1",1a)',vr:"FD",name:"CopperAttenuatorThickness",vm:"1",version:"PrivateTag"},'(0013,"GEMS_GENIE_1",1c)':{tag:'(0013,"GEMS_GENIE_1",1c)',vr:"FD",name:"Unknown",vm:"1",version:"PrivateTag"},'(0013,"GEMS_GENIE_1",1d)':{tag:'(0013,"GEMS_GENIE_1",1d)',vr:"FD",name:"Unknown",vm:"1",version:"PrivateTag"},'(0013,"GEMS_GENIE_1",1e)':{tag:'(0013,"GEMS_GENIE_1",1e)',vr:"FD",name:"TomoViewOffset",vm:"1-n",version:"PrivateTag"},'(0013,"GEMS_GENIE_1",26)':{tag:'(0013,"GEMS_GENIE_1",26)',vr:"LT",name:"StudyComments",vm:"1",version:"PrivateTag"},'(0033,"GEMS_GNHD_01",01)':{tag:'(0033,"GEMS_GNHD_01",01)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0033,"GEMS_GNHD_01",02)':{tag:'(0033,"GEMS_GNHD_01",02)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",01)':{tag:'(0009,"GEMS_IDEN_01",01)',vr:"LO",name:"FullFidelity",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",02)':{tag:'(0009,"GEMS_IDEN_01",02)',vr:"SH",name:"SuiteId",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",04)':{tag:'(0009,"GEMS_IDEN_01",04)',vr:"SH",name:"ProductId",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",17)':{tag:'(0009,"GEMS_IDEN_01",17)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",1a)':{tag:'(0009,"GEMS_IDEN_01",1a)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",20)':{tag:'(0009,"GEMS_IDEN_01",20)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",27)':{tag:'(0009,"GEMS_IDEN_01",27)',vr:"SL",name:"ImageActualDate",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",2f)':{tag:'(0009,"GEMS_IDEN_01",2f)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",30)':{tag:'(0009,"GEMS_IDEN_01",30)',vr:"SH",name:"ServiceId",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",31)':{tag:'(0009,"GEMS_IDEN_01",31)',vr:"SH",name:"MobileLocationNumber",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",e2)':{tag:'(0009,"GEMS_IDEN_01",e2)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",e3)':{tag:'(0009,"GEMS_IDEN_01",e3)',vr:"UI",name:"EquipmentUID",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",e6)':{tag:'(0009,"GEMS_IDEN_01",e6)',vr:"SH",name:"GenesisVersionNow",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",e7)':{tag:'(0009,"GEMS_IDEN_01",e7)',vr:"UL",name:"ExamRecordChecksum",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",e8)':{tag:'(0009,"GEMS_IDEN_01",e8)',vr:"UL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",e9)':{tag:'(0009,"GEMS_IDEN_01",e9)',vr:"SL",name:"ActualSeriesDataTimeStamp",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",06)':{tag:'(0027,"GEMS_IMAG_01",06)',vr:"SL",name:"ImageArchiveFlag",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",10)':{tag:'(0027,"GEMS_IMAG_01",10)',vr:"SS",name:"ScoutType",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",1c)':{tag:'(0027,"GEMS_IMAG_01",1c)',vr:"SL",name:"VmaMamp",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",1d)':{tag:'(0027,"GEMS_IMAG_01",1d)',vr:"SS",name:"VmaPhase",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",1e)':{tag:'(0027,"GEMS_IMAG_01",1e)',vr:"SL",name:"VmaMod",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",1f)':{tag:'(0027,"GEMS_IMAG_01",1f)',vr:"SL",name:"VmaClip",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",20)':{tag:'(0027,"GEMS_IMAG_01",20)',vr:"SS",name:"SmartScanOnOffFlag",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",30)':{tag:'(0027,"GEMS_IMAG_01",30)',vr:"SH",name:"ForeignImageRevision",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",31)':{tag:'(0027,"GEMS_IMAG_01",31)',vr:"SS",name:"ImagingMode",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",32)':{tag:'(0027,"GEMS_IMAG_01",32)',vr:"SS",name:"PulseSequence",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",33)':{tag:'(0027,"GEMS_IMAG_01",33)',vr:"SL",name:"ImagingOptions",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",35)':{tag:'(0027,"GEMS_IMAG_01",35)',vr:"SS",name:"PlaneType",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",36)':{tag:'(0027,"GEMS_IMAG_01",36)',vr:"SL",name:"ObliquePlane",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",40)':{tag:'(0027,"GEMS_IMAG_01",40)',vr:"SH",name:"RASLetterOfImageLocation",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",41)':{tag:'(0027,"GEMS_IMAG_01",41)',vr:"FL",name:"ImageLocation",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",42)':{tag:'(0027,"GEMS_IMAG_01",42)',vr:"FL",name:"CenterRCoordOfPlaneImage",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",43)':{tag:'(0027,"GEMS_IMAG_01",43)',vr:"FL",name:"CenterACoordOfPlaneImage",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",44)':{tag:'(0027,"GEMS_IMAG_01",44)',vr:"FL",name:"CenterSCoordOfPlaneImage",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",45)':{tag:'(0027,"GEMS_IMAG_01",45)',vr:"FL",name:"NormalRCoord",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",46)':{tag:'(0027,"GEMS_IMAG_01",46)',vr:"FL",name:"NormalACoord",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",47)':{tag:'(0027,"GEMS_IMAG_01",47)',vr:"FL",name:"NormalSCoord",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",48)':{tag:'(0027,"GEMS_IMAG_01",48)',vr:"FL",name:"RCoordOfTopRightCorner",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",49)':{tag:'(0027,"GEMS_IMAG_01",49)',vr:"FL",name:"ACoordOfTopRightCorner",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",4a)':{tag:'(0027,"GEMS_IMAG_01",4a)',vr:"FL",name:"SCoordOfTopRightCorner",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",4b)':{tag:'(0027,"GEMS_IMAG_01",4b)',vr:"FL",name:"RCoordOfBottomRightCorner",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",4c)':{tag:'(0027,"GEMS_IMAG_01",4c)',vr:"FL",name:"ACoordOfBottomRightCorner",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",4d)':{tag:'(0027,"GEMS_IMAG_01",4d)',vr:"FL",name:"SCoordOfBottomRightCorner",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",50)':{tag:'(0027,"GEMS_IMAG_01",50)',vr:"FL",name:"TableStartLocation",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",51)':{tag:'(0027,"GEMS_IMAG_01",51)',vr:"FL",name:"TableEndLocation",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",52)':{tag:'(0027,"GEMS_IMAG_01",52)',vr:"SH",name:"RASLetterForSideOfImage",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",53)':{tag:'(0027,"GEMS_IMAG_01",53)',vr:"SH",name:"RASLetterForAnteriorPosterior",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",54)':{tag:'(0027,"GEMS_IMAG_01",54)',vr:"SH",name:"RASLetterForScoutStartLoc",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",55)':{tag:'(0027,"GEMS_IMAG_01",55)',vr:"SH",name:"RASLetterForScoutEndLoc",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",60)':{tag:'(0027,"GEMS_IMAG_01",60)',vr:"FL",name:"ImageDimensionX",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",61)':{tag:'(0027,"GEMS_IMAG_01",61)',vr:"FL",name:"ImageDimensionY",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",62)':{tag:'(0027,"GEMS_IMAG_01",62)',vr:"FL",name:"NumberOfExcitations",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",04)':{tag:'(0029,"GEMS_IMPS_01",04)',vr:"SL",name:"LowerRangeOfPixels",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",05)':{tag:'(0029,"GEMS_IMPS_01",05)',vr:"DS",name:"LowerRangeOfPixels",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",06)':{tag:'(0029,"GEMS_IMPS_01",06)',vr:"DS",name:"LowerRangeOfPixels",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",07)':{tag:'(0029,"GEMS_IMPS_01",07)',vr:"SL",name:"LowerRangeOfPixels",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",08)':{tag:'(0029,"GEMS_IMPS_01",08)',vr:"SH",name:"LowerRangeOfPixels",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",09)':{tag:'(0029,"GEMS_IMPS_01",09)',vr:"SH",name:"LowerRangeOfPixels",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",0a)':{tag:'(0029,"GEMS_IMPS_01",0a)',vr:"SS",name:"LowerRangeOfPixels",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",15)':{tag:'(0029,"GEMS_IMPS_01",15)',vr:"SL",name:"LowerRangeOfPixels",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",16)':{tag:'(0029,"GEMS_IMPS_01",16)',vr:"SL",name:"LowerRangeOfPixels",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",17)':{tag:'(0029,"GEMS_IMPS_01",17)',vr:"SL",name:"LowerRangeOfPixels",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",18)':{tag:'(0029,"GEMS_IMPS_01",18)',vr:"SL",name:"UpperRangeOfPixels",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",1a)':{tag:'(0029,"GEMS_IMPS_01",1a)',vr:"SL",name:"LengthOfTotalHeaderInBytes",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",26)':{tag:'(0029,"GEMS_IMPS_01",26)',vr:"SS",name:"VersionOfHeaderStructure",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",34)':{tag:'(0029,"GEMS_IMPS_01",34)',vr:"SL",name:"AdvantageCompOverflow",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",35)':{tag:'(0029,"GEMS_IMPS_01",35)',vr:"SL",name:"AdvantageCompUnderflow",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",01)':{tag:'(0043,"GEMS_PARM_01",01)',vr:"SS",name:"BitmapOfPrescanOptions",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",02)':{tag:'(0043,"GEMS_PARM_01",02)',vr:"SS",name:"GradientOffsetInX",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",03)':{tag:'(0043,"GEMS_PARM_01",03)',vr:"SS",name:"GradientOffsetInY",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",04)':{tag:'(0043,"GEMS_PARM_01",04)',vr:"SS",name:"GradientOffsetInZ",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",05)':{tag:'(0043,"GEMS_PARM_01",05)',vr:"SS",name:"ImageIsOriginalOrUnoriginal",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",06)':{tag:'(0043,"GEMS_PARM_01",06)',vr:"SS",name:"NumberOfEPIShots",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",07)':{tag:'(0043,"GEMS_PARM_01",07)',vr:"SS",name:"ViewsPerSegment",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",08)':{tag:'(0043,"GEMS_PARM_01",08)',vr:"SS",name:"RespiratoryRateInBPM",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",09)':{tag:'(0043,"GEMS_PARM_01",09)',vr:"SS",name:"RespiratoryTriggerPoint",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",0a)':{tag:'(0043,"GEMS_PARM_01",0a)',vr:"SS",name:"TypeOfReceiverUsed",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",0b)':{tag:'(0043,"GEMS_PARM_01",0b)',vr:"DS",name:"PeakRateOfChangeOfGradientField",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",0c)':{tag:'(0043,"GEMS_PARM_01",0c)',vr:"DS",name:"LimitsInUnitsOfPercent",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",0d)':{tag:'(0043,"GEMS_PARM_01",0d)',vr:"DS",name:"PSDEstimatedLimit",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",0e)':{tag:'(0043,"GEMS_PARM_01",0e)',vr:"DS",name:"PSDEstimatedLimitInTeslaPerSecond",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",0f)':{tag:'(0043,"GEMS_PARM_01",0f)',vr:"DS",name:"SARAvgHead",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",10)':{tag:'(0043,"GEMS_PARM_01",10)',vr:"US",name:"WindowValue",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",11)':{tag:'(0043,"GEMS_PARM_01",11)',vr:"US",name:"TotalInputViews",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",12)':{tag:'(0043,"GEMS_PARM_01",12)',vr:"SS",name:"XrayChain",vm:"3",version:"PrivateTag"},'(0043,"GEMS_PARM_01",13)':{tag:'(0043,"GEMS_PARM_01",13)',vr:"SS",name:"ReconKernelParameters",vm:"5",version:"PrivateTag"},'(0043,"GEMS_PARM_01",14)':{tag:'(0043,"GEMS_PARM_01",14)',vr:"SS",name:"CalibrationParameters",vm:"3",version:"PrivateTag"},'(0043,"GEMS_PARM_01",15)':{tag:'(0043,"GEMS_PARM_01",15)',vr:"SS",name:"TotalOutputViews",vm:"3",version:"PrivateTag"},'(0043,"GEMS_PARM_01",16)':{tag:'(0043,"GEMS_PARM_01",16)',vr:"SS",name:"NumberOfOverranges",vm:"5",version:"PrivateTag"},'(0043,"GEMS_PARM_01",17)':{tag:'(0043,"GEMS_PARM_01",17)',vr:"DS",name:"IBHImageScaleFactors",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",18)':{tag:'(0043,"GEMS_PARM_01",18)',vr:"DS",name:"BBHCoefficients",vm:"3",version:"PrivateTag"},'(0043,"GEMS_PARM_01",19)':{tag:'(0043,"GEMS_PARM_01",19)',vr:"SS",name:"NumberOfBBHChainsToBlend",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",1a)':{tag:'(0043,"GEMS_PARM_01",1a)',vr:"SL",name:"StartingChannelNumber",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",1b)':{tag:'(0043,"GEMS_PARM_01",1b)',vr:"SS",name:"PPScanParameters",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",1c)':{tag:'(0043,"GEMS_PARM_01",1c)',vr:"SS",name:"GEImageIntegrity",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",1d)':{tag:'(0043,"GEMS_PARM_01",1d)',vr:"SS",name:"LevelValue",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",1e)':{tag:'(0043,"GEMS_PARM_01",1e)',vr:"DS",name:"DeltaStartTime",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",1f)':{tag:'(0043,"GEMS_PARM_01",1f)',vr:"SL",name:"MaxOverrangesInAView",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",20)':{tag:'(0043,"GEMS_PARM_01",20)',vr:"DS",name:"AvgOverrangesAllViews",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",21)':{tag:'(0043,"GEMS_PARM_01",21)',vr:"SS",name:"CorrectedAfterglowTerms",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",25)':{tag:'(0043,"GEMS_PARM_01",25)',vr:"SS",name:"ReferenceChannels",vm:"6",version:"PrivateTag"},'(0043,"GEMS_PARM_01",26)':{tag:'(0043,"GEMS_PARM_01",26)',vr:"US",name:"NoViewsRefChannelsBlocked",vm:"6",version:"PrivateTag"},'(0043,"GEMS_PARM_01",27)':{tag:'(0043,"GEMS_PARM_01",27)',vr:"SH",name:"ScanPitchRatio",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",28)':{tag:'(0043,"GEMS_PARM_01",28)',vr:"OB",name:"UniqueImageIdentifier",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",29)':{tag:'(0043,"GEMS_PARM_01",29)',vr:"OB",name:"HistogramTables",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",2a)':{tag:'(0043,"GEMS_PARM_01",2a)',vr:"OB",name:"UserDefinedData",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",2b)':{tag:'(0043,"GEMS_PARM_01",2b)',vr:"SS",name:"PrivateScanOptions",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",2c)':{tag:'(0043,"GEMS_PARM_01",2c)',vr:"SS",name:"EffectiveEchoSpacing",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",2d)':{tag:'(0043,"GEMS_PARM_01",2d)',vr:"SH",name:"StringSlopField1",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",2e)':{tag:'(0043,"GEMS_PARM_01",2e)',vr:"SH",name:"StringSlopField2",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",2f)':{tag:'(0043,"GEMS_PARM_01",2f)',vr:"SS",name:"RawDataType",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",30)':{tag:'(0043,"GEMS_PARM_01",30)',vr:"SS",name:"RawDataType",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",31)':{tag:'(0043,"GEMS_PARM_01",31)',vr:"DS",name:"RACoordOfTargetReconCentre",vm:"2",version:"PrivateTag"},'(0043,"GEMS_PARM_01",32)':{tag:'(0043,"GEMS_PARM_01",32)',vr:"SS",name:"RawDataType",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",33)':{tag:'(0043,"GEMS_PARM_01",33)',vr:"FL",name:"NegScanSpacing",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",34)':{tag:'(0043,"GEMS_PARM_01",34)',vr:"IS",name:"OffsetFrequency",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",35)':{tag:'(0043,"GEMS_PARM_01",35)',vr:"UL",name:"UserUsageTag",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",36)':{tag:'(0043,"GEMS_PARM_01",36)',vr:"UL",name:"UserFillMapMSW",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",37)':{tag:'(0043,"GEMS_PARM_01",37)',vr:"UL",name:"UserFillMapLSW",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",38)':{tag:'(0043,"GEMS_PARM_01",38)',vr:"FL",name:"User25ToUser48",vm:"24",version:"PrivateTag"},'(0043,"GEMS_PARM_01",39)':{tag:'(0043,"GEMS_PARM_01",39)',vr:"IS",name:"SlopInteger6ToSlopInteger9",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",40)':{tag:'(0043,"GEMS_PARM_01",40)',vr:"FL",name:"TriggerOnPosition",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",41)':{tag:'(0043,"GEMS_PARM_01",41)',vr:"FL",name:"DegreeOfRotation",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",42)':{tag:'(0043,"GEMS_PARM_01",42)',vr:"SL",name:"DASTriggerSource",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",43)':{tag:'(0043,"GEMS_PARM_01",43)',vr:"SL",name:"DASFpaGain",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",44)':{tag:'(0043,"GEMS_PARM_01",44)',vr:"SL",name:"DASOutputSource",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",45)':{tag:'(0043,"GEMS_PARM_01",45)',vr:"SL",name:"DASAdInput",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",46)':{tag:'(0043,"GEMS_PARM_01",46)',vr:"SL",name:"DASCalMode",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",47)':{tag:'(0043,"GEMS_PARM_01",47)',vr:"SL",name:"DASCalFrequency",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",48)':{tag:'(0043,"GEMS_PARM_01",48)',vr:"SL",name:"DASRegXm",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",49)':{tag:'(0043,"GEMS_PARM_01",49)',vr:"SL",name:"DASAutoZero",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",4a)':{tag:'(0043,"GEMS_PARM_01",4a)',vr:"SS",name:"StartingChannelOfView",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",4b)':{tag:'(0043,"GEMS_PARM_01",4b)',vr:"SL",name:"DASXmPattern",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",4c)':{tag:'(0043,"GEMS_PARM_01",4c)',vr:"SS",name:"TGGCTriggerMode",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",4d)':{tag:'(0043,"GEMS_PARM_01",4d)',vr:"FL",name:"StartScanToXrayOnDelay",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",4e)':{tag:'(0043,"GEMS_PARM_01",4e)',vr:"FL",name:"DurationOfXrayOn",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",60)':{tag:'(0043,"GEMS_PARM_01",60)',vr:"IS",name:"SlopInteger10ToSlopInteger17",vm:"8",version:"PrivateTag"},'(0043,"GEMS_PARM_01",61)':{tag:'(0043,"GEMS_PARM_01",61)',vr:"UI",name:"ScannerStudyEntityUID",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",62)':{tag:'(0043,"GEMS_PARM_01",62)',vr:"SH",name:"ScannerStudyID",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",6f)':{tag:'(0043,"GEMS_PARM_01",6f)',vr:"DS",name:"ScannerTableEntry",vm:"3",version:"PrivateTag"},'(0043,"GEMS_PARM_01",70)':{tag:'(0043,"GEMS_PARM_01",70)',vr:"LO",name:"ParadigmName",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",71)':{tag:'(0043,"GEMS_PARM_01",71)',vr:"ST",name:"ParadigmDescription",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",72)':{tag:'(0043,"GEMS_PARM_01",72)',vr:"UI",name:"ParadigmUID",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",73)':{tag:'(0043,"GEMS_PARM_01",73)',vr:"US",name:"ExperimentType",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",74)':{tag:'(0043,"GEMS_PARM_01",74)',vr:"US",name:"NumberOfRestVolumes",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",75)':{tag:'(0043,"GEMS_PARM_01",75)',vr:"US",name:"NumberOfActiveVolumes",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",76)':{tag:'(0043,"GEMS_PARM_01",76)',vr:"US",name:"NumberOfDummyScans",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",77)':{tag:'(0043,"GEMS_PARM_01",77)',vr:"SH",name:"ApplicationName",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",78)':{tag:'(0043,"GEMS_PARM_01",78)',vr:"SH",name:"ApplicationVersion",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",79)':{tag:'(0043,"GEMS_PARM_01",79)',vr:"US",name:"SlicesPerVolume",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",7a)':{tag:'(0043,"GEMS_PARM_01",7a)',vr:"US",name:"ExpectedTimePoints",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",7b)':{tag:'(0043,"GEMS_PARM_01",7b)',vr:"FL",name:"RegressorValues",vm:"1-n",version:"PrivateTag"},'(0043,"GEMS_PARM_01",7c)':{tag:'(0043,"GEMS_PARM_01",7c)',vr:"FL",name:"DelayAfterSliceGroup",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",7d)':{tag:'(0043,"GEMS_PARM_01",7d)',vr:"US",name:"ReconModeFlagWord",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",7e)':{tag:'(0043,"GEMS_PARM_01",7e)',vr:"LO",name:"PACCSpecificInformation",vm:"1-n",version:"PrivateTag"},'(0043,"GEMS_PARM_01",7f)':{tag:'(0043,"GEMS_PARM_01",7f)',vr:"DS",name:"EDWIScaleFactor",vm:"1-n",version:"PrivateTag"},'(0043,"GEMS_PARM_01",80)':{tag:'(0043,"GEMS_PARM_01",80)',vr:"LO",name:"CoilIDData",vm:"1-n",version:"PrivateTag"},'(0043,"GEMS_PARM_01",81)':{tag:'(0043,"GEMS_PARM_01",81)',vr:"LO",name:"GECoilName",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",82)':{tag:'(0043,"GEMS_PARM_01",82)',vr:"LO",name:"SystemConfigurationInformation",vm:"1-n",version:"PrivateTag"},'(0043,"GEMS_PARM_01",83)':{tag:'(0043,"GEMS_PARM_01",83)',vr:"DS",name:"AssetRFactors",vm:"1-2",version:"PrivateTag"},'(0043,"GEMS_PARM_01",84)':{tag:'(0043,"GEMS_PARM_01",84)',vr:"LO",name:"AdditionalAssetData",vm:"5-n",version:"PrivateTag"},'(0043,"GEMS_PARM_01",85)':{tag:'(0043,"GEMS_PARM_01",85)',vr:"UT",name:"DebugDataTextFormat",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",86)':{tag:'(0043,"GEMS_PARM_01",86)',vr:"OB",name:"DebugDataBinaryFormat",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",87)':{tag:'(0043,"GEMS_PARM_01",87)',vr:"UT",name:"ScannerSoftwareVersionLongForm",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",88)':{tag:'(0043,"GEMS_PARM_01",88)',vr:"UI",name:"PUREAcquisitionCalibrationSeriesUID",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",89)':{tag:'(0043,"GEMS_PARM_01",89)',vr:"LO",name:"GoverningBodydBdtAndSARDefinition",vm:"3",version:"PrivateTag"},'(0043,"GEMS_PARM_01",8a)':{tag:'(0043,"GEMS_PARM_01",8a)',vr:"CS",name:"PrivateInPlanePhaseEncodingDirection",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",8b)':{tag:'(0043,"GEMS_PARM_01",8b)',vr:"OB",name:"FMRIBinaryDataBlock",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",8c)':{tag:'(0043,"GEMS_PARM_01",8c)',vr:"DS",name:"VoxelLocation",vm:"6",version:"PrivateTag"},'(0043,"GEMS_PARM_01",8d)':{tag:'(0043,"GEMS_PARM_01",8d)',vr:"DS",name:"SATBandLocations",vm:"7-7n",version:"PrivateTag"},'(0043,"GEMS_PARM_01",8e)':{tag:'(0043,"GEMS_PARM_01",8e)',vr:"DS",name:"SpectroPrescanValues",vm:"3",version:"PrivateTag"},'(0043,"GEMS_PARM_01",8f)':{tag:'(0043,"GEMS_PARM_01",8f)',vr:"DS",name:"SpectroParameters",vm:"3",version:"PrivateTag"},'(0043,"GEMS_PARM_01",90)':{tag:'(0043,"GEMS_PARM_01",90)',vr:"LO",name:"SARDefinition",vm:"1-n",version:"PrivateTag"},'(0043,"GEMS_PARM_01",91)':{tag:'(0043,"GEMS_PARM_01",91)',vr:"DS",name:"SARValue",vm:"1-n",version:"PrivateTag"},'(0043,"GEMS_PARM_01",92)':{tag:'(0043,"GEMS_PARM_01",92)',vr:"LO",name:"ImageErrorText",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",93)':{tag:'(0043,"GEMS_PARM_01",93)',vr:"DS",name:"SpectroQuantitationValues",vm:"1-n",version:"PrivateTag"},'(0043,"GEMS_PARM_01",94)':{tag:'(0043,"GEMS_PARM_01",94)',vr:"DS",name:"SpectroRatioValues",vm:"1-n",version:"PrivateTag"},'(0043,"GEMS_PARM_01",95)':{tag:'(0043,"GEMS_PARM_01",95)',vr:"LO",name:"PrescanReuseString",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",96)':{tag:'(0043,"GEMS_PARM_01",96)',vr:"CS",name:"ContentQualification",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",97)':{tag:'(0043,"GEMS_PARM_01",97)',vr:"LO",name:"ImageFilteringParameters",vm:"9",version:"PrivateTag"},'(0043,"GEMS_PARM_01",98)':{tag:'(0043,"GEMS_PARM_01",98)',vr:"UI",name:"ASSETAcquisitionCalibrationSeriesUID",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",99)':{tag:'(0043,"GEMS_PARM_01",99)',vr:"LO",name:"ExtendedOptions",vm:"1-n",version:"PrivateTag"},'(0043,"GEMS_PARM_01",9a)':{tag:'(0043,"GEMS_PARM_01",9a)',vr:"IS",name:"RxStackIdentification",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",9b)':{tag:'(0043,"GEMS_PARM_01",9b)',vr:"DS",name:"NPWFactor",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",9c)':{tag:'(0043,"GEMS_PARM_01",9c)',vr:"OB",name:"ResearchTag1",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",9d)':{tag:'(0043,"GEMS_PARM_01",9d)',vr:"OB",name:"ResearchTag2",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",9e)':{tag:'(0043,"GEMS_PARM_01",9e)',vr:"OB",name:"ResearchTag3",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",9f)':{tag:'(0043,"GEMS_PARM_01",9f)',vr:"OB",name:"ResearchTag4",vm:"1",version:"PrivateTag"},'(0011,"GEMS_PATI_01",10)':{tag:'(0011,"GEMS_PATI_01",10)',vr:"SS",name:"PatientStatus",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",03)':{tag:'(0021,"GEMS_RELA_01",03)',vr:"SS",name:"SeriesFromWhichPrescribed",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",05)':{tag:'(0021,"GEMS_RELA_01",05)',vr:"SH",name:"GenesisVersionNow",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",07)':{tag:'(0021,"GEMS_RELA_01",07)',vr:"UL",name:"SeriesRecordChecksum",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",15)':{tag:'(0021,"GEMS_RELA_01",15)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",16)':{tag:'(0021,"GEMS_RELA_01",16)',vr:"SS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",18)':{tag:'(0021,"GEMS_RELA_01",18)',vr:"SH",name:"GenesisVersionNow",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",19)':{tag:'(0021,"GEMS_RELA_01",19)',vr:"UL",name:"AcqReconRecordChecksum",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",20)':{tag:'(0021,"GEMS_RELA_01",20)',vr:"DS",name:"TableStartLocation",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",35)':{tag:'(0021,"GEMS_RELA_01",35)',vr:"SS",name:"SeriesFromWhichPrescribed",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",36)':{tag:'(0021,"GEMS_RELA_01",36)',vr:"SS",name:"ImageFromWhichPrescribed",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",37)':{tag:'(0021,"GEMS_RELA_01",37)',vr:"SS",name:"ScreenFormat",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",4a)':{tag:'(0021,"GEMS_RELA_01",4a)',vr:"LO",name:"AnatomicalReferenceForScout",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",4e)':{tag:'(0021,"GEMS_RELA_01",4e)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",4f)':{tag:'(0021,"GEMS_RELA_01",4f)',vr:"SS",name:"LocationsInAcquisition",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",50)':{tag:'(0021,"GEMS_RELA_01",50)',vr:"SS",name:"GraphicallyPrescribed",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",51)':{tag:'(0021,"GEMS_RELA_01",51)',vr:"DS",name:"RotationFromSourceXRot",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",52)':{tag:'(0021,"GEMS_RELA_01",52)',vr:"DS",name:"RotationFromSourceYRot",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",53)':{tag:'(0021,"GEMS_RELA_01",53)',vr:"DS",name:"RotationFromSourceZRot",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",54)':{tag:'(0021,"GEMS_RELA_01",54)',vr:"SH",name:"ImagePosition",vm:"3",version:"PrivateTag"},'(0021,"GEMS_RELA_01",55)':{tag:'(0021,"GEMS_RELA_01",55)',vr:"SH",name:"ImageOrientation",vm:"6",version:"PrivateTag"},'(0021,"GEMS_RELA_01",56)':{tag:'(0021,"GEMS_RELA_01",56)',vr:"SL",name:"IntegerSlop",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",57)':{tag:'(0021,"GEMS_RELA_01",57)',vr:"SL",name:"IntegerSlop",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",58)':{tag:'(0021,"GEMS_RELA_01",58)',vr:"SL",name:"IntegerSlop",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",59)':{tag:'(0021,"GEMS_RELA_01",59)',vr:"SL",name:"IntegerSlop",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",5a)':{tag:'(0021,"GEMS_RELA_01",5a)',vr:"SL",name:"IntegerSlop",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",5b)':{tag:'(0021,"GEMS_RELA_01",5b)',vr:"DS",name:"FloatSlop",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",5c)':{tag:'(0021,"GEMS_RELA_01",5c)',vr:"DS",name:"FloatSlop",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",5d)':{tag:'(0021,"GEMS_RELA_01",5d)',vr:"DS",name:"FloatSlop",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",5e)':{tag:'(0021,"GEMS_RELA_01",5e)',vr:"DS",name:"FloatSlop",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",5f)':{tag:'(0021,"GEMS_RELA_01",5f)',vr:"DS",name:"FloatSlop",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",70)':{tag:'(0021,"GEMS_RELA_01",70)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",71)':{tag:'(0021,"GEMS_RELA_01",71)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",81)':{tag:'(0021,"GEMS_RELA_01",81)',vr:"DS",name:"AutoWindowLevelAlpha",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",82)':{tag:'(0021,"GEMS_RELA_01",82)',vr:"DS",name:"AutoWindowLevelBeta",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",83)':{tag:'(0021,"GEMS_RELA_01",83)',vr:"DS",name:"AutoWindowLevelWindow",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",84)':{tag:'(0021,"GEMS_RELA_01",84)',vr:"DS",name:"AutoWindowLevelLevel",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",90)':{tag:'(0021,"GEMS_RELA_01",90)',vr:"SS",name:"TubeFocalSpotPosition",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",91)':{tag:'(0021,"GEMS_RELA_01",91)',vr:"SS",name:"BiopsyPosition",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",92)':{tag:'(0021,"GEMS_RELA_01",92)',vr:"FL",name:"BiopsyTLocation",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",93)':{tag:'(0021,"GEMS_RELA_01",93)',vr:"FL",name:"BiopsyRefLocation",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",04)':{tag:'(0045,"GEMS_SENO_02",04)',vr:"CS",name:"AES",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",06)':{tag:'(0045,"GEMS_SENO_02",06)',vr:"DS",name:"Angulation",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",09)':{tag:'(0045,"GEMS_SENO_02",09)',vr:"DS",name:"RealMagnificationFactor",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",0b)':{tag:'(0045,"GEMS_SENO_02",0b)',vr:"CS",name:"SenographType",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",0c)':{tag:'(0045,"GEMS_SENO_02",0c)',vr:"DS",name:"IntegrationTime",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",0d)':{tag:'(0045,"GEMS_SENO_02",0d)',vr:"DS",name:"ROIOriginXY",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",11)':{tag:'(0045,"GEMS_SENO_02",11)',vr:"DS",name:"ReceptorSizeCmXY",vm:"2",version:"PrivateTag"},'(0045,"GEMS_SENO_02",12)':{tag:'(0045,"GEMS_SENO_02",12)',vr:"IS",name:"ReceptorSizePixelsXY",vm:"2",version:"PrivateTag"},'(0045,"GEMS_SENO_02",13)':{tag:'(0045,"GEMS_SENO_02",13)',vr:"ST",name:"Screen",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",14)':{tag:'(0045,"GEMS_SENO_02",14)',vr:"DS",name:"PixelPitchMicrons",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",15)':{tag:'(0045,"GEMS_SENO_02",15)',vr:"IS",name:"PixelDepthBits",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",16)':{tag:'(0045,"GEMS_SENO_02",16)',vr:"IS",name:"BinningFactorXY",vm:"2",version:"PrivateTag"},'(0045,"GEMS_SENO_02",1B)':{tag:'(0045,"GEMS_SENO_02",1B)',vr:"CS",name:"ClinicalView",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",1D)':{tag:'(0045,"GEMS_SENO_02",1D)',vr:"DS",name:"MeanOfRawGrayLevels",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",1E)':{tag:'(0045,"GEMS_SENO_02",1E)',vr:"DS",name:"MeanOfOffsetGrayLevels",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",1F)':{tag:'(0045,"GEMS_SENO_02",1F)',vr:"DS",name:"MeanOfCorrectedGrayLevels",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",20)':{tag:'(0045,"GEMS_SENO_02",20)',vr:"DS",name:"MeanOfRegionGrayLevels",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",21)':{tag:'(0045,"GEMS_SENO_02",21)',vr:"DS",name:"MeanOfLogRegionGrayLevels",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",22)':{tag:'(0045,"GEMS_SENO_02",22)',vr:"DS",name:"StandardDeviationOfRawGrayLevels",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",23)':{tag:'(0045,"GEMS_SENO_02",23)',vr:"DS",name:"StandardDeviationOfCorrectedGrayLevels",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",24)':{tag:'(0045,"GEMS_SENO_02",24)',vr:"DS",name:"StandardDeviationOfRegionGrayLevels",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",25)':{tag:'(0045,"GEMS_SENO_02",25)',vr:"DS",name:"StandardDeviationOfLogRegionGrayLevels",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",26)':{tag:'(0045,"GEMS_SENO_02",26)',vr:"OB",name:"MAOBuffer",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",27)':{tag:'(0045,"GEMS_SENO_02",27)',vr:"IS",name:"SetNumber",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",28)':{tag:'(0045,"GEMS_SENO_02",28)',vr:"CS",name:"WindowingType",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",29)':{tag:'(0045,"GEMS_SENO_02",29)',vr:"DS",name:"WindowingParameters",vm:"1-n",version:"PrivateTag"},'(0045,"GEMS_SENO_02",2a)':{tag:'(0045,"GEMS_SENO_02",2a)',vr:"IS",name:"CrosshairCursorXCoordinates",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",2b)':{tag:'(0045,"GEMS_SENO_02",2b)',vr:"IS",name:"CrosshairCursorYCoordinates",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",39)':{tag:'(0045,"GEMS_SENO_02",39)',vr:"US",name:"VignetteRows",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",3a)':{tag:'(0045,"GEMS_SENO_02",3a)',vr:"US",name:"VignetteColumns",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",3b)':{tag:'(0045,"GEMS_SENO_02",3b)',vr:"US",name:"VignetteBitsAllocated",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",3c)':{tag:'(0045,"GEMS_SENO_02",3c)',vr:"US",name:"VignetteBitsStored",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",3d)':{tag:'(0045,"GEMS_SENO_02",3d)',vr:"US",name:"VignetteHighBit",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",3e)':{tag:'(0045,"GEMS_SENO_02",3e)',vr:"US",name:"VignettePixelRepresentation",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",3f)':{tag:'(0045,"GEMS_SENO_02",3f)',vr:"OB",name:"VignettePixelData",vm:"1",version:"PrivateTag"},'(0025,"GEMS_SERS_01",06)':{tag:'(0025,"GEMS_SERS_01",06)',vr:"SS",name:"LastPulseSequenceUsed",vm:"1",version:"PrivateTag"},'(0025,"GEMS_SERS_01",07)':{tag:'(0025,"GEMS_SERS_01",07)',vr:"SL",name:"ImagesInSeries",vm:"1",version:"PrivateTag"},'(0025,"GEMS_SERS_01",10)':{tag:'(0025,"GEMS_SERS_01",10)',vr:"SL",name:"LandmarkCounter",vm:"1",version:"PrivateTag"},'(0025,"GEMS_SERS_01",11)':{tag:'(0025,"GEMS_SERS_01",11)',vr:"SS",name:"NumberOfAcquisitions",vm:"1",version:"PrivateTag"},'(0025,"GEMS_SERS_01",14)':{tag:'(0025,"GEMS_SERS_01",14)',vr:"SL",name:"IndicatesNumberOfUpdatesToHeader",vm:"1",version:"PrivateTag"},'(0025,"GEMS_SERS_01",17)':{tag:'(0025,"GEMS_SERS_01",17)',vr:"SL",name:"SeriesCompleteFlag",vm:"1",version:"PrivateTag"},'(0025,"GEMS_SERS_01",18)':{tag:'(0025,"GEMS_SERS_01",18)',vr:"SL",name:"NumberOfImagesArchived",vm:"1",version:"PrivateTag"},'(0025,"GEMS_SERS_01",19)':{tag:'(0025,"GEMS_SERS_01",19)',vr:"SL",name:"LastImageNumberUsed",vm:"1",version:"PrivateTag"},'(0025,"GEMS_SERS_01",1a)':{tag:'(0025,"GEMS_SERS_01",1a)',vr:"SH",name:"PrimaryReceiverSuiteAndHost",vm:"1",version:"PrivateTag"},'(0023,"GEMS_STDY_01",01)':{tag:'(0023,"GEMS_STDY_01",01)',vr:"SL",name:"NumberOfSeriesInStudy",vm:"1",version:"PrivateTag"},'(0023,"GEMS_STDY_01",02)':{tag:'(0023,"GEMS_STDY_01",02)',vr:"SL",name:"NumberOfUnarchivedSeries",vm:"1",version:"PrivateTag"},'(0023,"GEMS_STDY_01",10)':{tag:'(0023,"GEMS_STDY_01",10)',vr:"SS",name:"ReferenceImageField",vm:"1",version:"PrivateTag"},'(0023,"GEMS_STDY_01",50)':{tag:'(0023,"GEMS_STDY_01",50)',vr:"SS",name:"SummaryImage",vm:"1",version:"PrivateTag"},'(0023,"GEMS_STDY_01",70)':{tag:'(0023,"GEMS_STDY_01",70)',vr:"FD",name:"StartTimeSecsInFirstAxial",vm:"1",version:"PrivateTag"},'(0023,"GEMS_STDY_01",74)':{tag:'(0023,"GEMS_STDY_01",74)',vr:"SL",name:"NumberOfUpdatesToHeader",vm:"1",version:"PrivateTag"},'(0023,"GEMS_STDY_01",7d)':{tag:'(0023,"GEMS_STDY_01",7d)',vr:"SS",name:"IndicatesIfStudyHasCompleteInfo",vm:"1",version:"PrivateTag"},'(0033,"GEMS_YMHD_01",05)':{tag:'(0033,"GEMS_YMHD_01",05)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0033,"GEMS_YMHD_01",06)':{tag:'(0033,"GEMS_YMHD_01",06)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",39)':{tag:'(0019,"GE_GENESIS_REV3.0",39)',vr:"SS",name:"AxialType",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",8f)':{tag:'(0019,"GE_GENESIS_REV3.0",8f)',vr:"SS",name:"SwapPhaseFrequency",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",9c)':{tag:'(0019,"GE_GENESIS_REV3.0",9c)',vr:"SS",name:"PulseSequenceName",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",9f)':{tag:'(0019,"GE_GENESIS_REV3.0",9f)',vr:"SS",name:"CoilType",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",a4)':{tag:'(0019,"GE_GENESIS_REV3.0",a4)',vr:"SS",name:"SATFatWaterBone",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",c0)':{tag:'(0019,"GE_GENESIS_REV3.0",c0)',vr:"SS",name:"BitmapOfSATSelections",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",c1)':{tag:'(0019,"GE_GENESIS_REV3.0",c1)',vr:"SS",name:"SurfaceCoilIntensityCorrectionFlag",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",cb)':{tag:'(0019,"GE_GENESIS_REV3.0",cb)',vr:"SS",name:"PhaseContrastFlowAxis",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",cc)':{tag:'(0019,"GE_GENESIS_REV3.0",cc)',vr:"SS",name:"PhaseContrastVelocityEncoding",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",d5)':{tag:'(0019,"GE_GENESIS_REV3.0",d5)',vr:"SS",name:"FractionalEcho",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",d8)':{tag:'(0019,"GE_GENESIS_REV3.0",d8)',vr:"SS",name:"VariableEchoFlag",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",d9)':{tag:'(0019,"GE_GENESIS_REV3.0",d9)',vr:"DS",name:"ConcatenatedSat",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",f2)':{tag:'(0019,"GE_GENESIS_REV3.0",f2)',vr:"SS",name:"NumberOfPhases",vm:"1",version:"PrivateTag"},'(0043,"GE_GENESIS_REV3.0",1e)':{tag:'(0043,"GE_GENESIS_REV3.0",1e)',vr:"DS",name:"DeltaStartTime",vm:"1",version:"PrivateTag"},'(0043,"GE_GENESIS_REV3.0",27)':{tag:'(0043,"GE_GENESIS_REV3.0",27)',vr:"SH",name:"ScanPitchRatio",vm:"1",version:"PrivateTag"},'(0029,"INTELERAD MEDICAL SYSTEMS",01)':{tag:'(0029,"INTELERAD MEDICAL SYSTEMS",01)',vr:"FD",name:"ImageCompressionFraction",vm:"1",version:"PrivateTag"},'(0029,"INTELERAD MEDICAL SYSTEMS",02)':{tag:'(0029,"INTELERAD MEDICAL SYSTEMS",02)',vr:"FD",name:"ImageQuality",vm:"1",version:"PrivateTag"},'(0029,"INTELERAD MEDICAL SYSTEMS",03)':{tag:'(0029,"INTELERAD MEDICAL SYSTEMS",03)',vr:"FD",name:"ImageBytesTransferred",vm:"1",version:"PrivateTag"},'(0029,"INTELERAD MEDICAL SYSTEMS",10)':{tag:'(0029,"INTELERAD MEDICAL SYSTEMS",10)',vr:"SH",name:"J2cParameterType",vm:"1",version:"PrivateTag"},'(0029,"INTELERAD MEDICAL SYSTEMS",11)':{tag:'(0029,"INTELERAD MEDICAL SYSTEMS",11)',vr:"US",name:"J2cPixelRepresentation",vm:"1",version:"PrivateTag"},'(0029,"INTELERAD MEDICAL SYSTEMS",12)':{tag:'(0029,"INTELERAD MEDICAL SYSTEMS",12)',vr:"US",name:"J2cBitsAllocated",vm:"1",version:"PrivateTag"},'(0029,"INTELERAD MEDICAL SYSTEMS",13)':{tag:'(0029,"INTELERAD MEDICAL SYSTEMS",13)',vr:"US",name:"J2cPixelShiftValue",vm:"1",version:"PrivateTag"},'(0029,"INTELERAD MEDICAL SYSTEMS",14)':{tag:'(0029,"INTELERAD MEDICAL SYSTEMS",14)',vr:"US",name:"J2cPlanarConfiguration",vm:"1",version:"PrivateTag"},'(0029,"INTELERAD MEDICAL SYSTEMS",15)':{tag:'(0029,"INTELERAD MEDICAL SYSTEMS",15)',vr:"DS",name:"J2cRescaleIntercept",vm:"1",version:"PrivateTag"},'(0029,"INTELERAD MEDICAL SYSTEMS",20)':{tag:'(0029,"INTELERAD MEDICAL SYSTEMS",20)',vr:"LO",name:"PixelDataMD5SumPerFrame",vm:"1",version:"PrivateTag"},'(0029,"INTELERAD MEDICAL SYSTEMS",21)':{tag:'(0029,"INTELERAD MEDICAL SYSTEMS",21)',vr:"US",name:"HistogramPercentileLabels",vm:"1",version:"PrivateTag"},'(0029,"INTELERAD MEDICAL SYSTEMS",22)':{tag:'(0029,"INTELERAD MEDICAL SYSTEMS",22)',vr:"FD",name:"HistogramPercentileValues",vm:"1",version:"PrivateTag"},'(3f01,"INTELERAD MEDICAL SYSTEMS",01)':{tag:'(3f01,"INTELERAD MEDICAL SYSTEMS",01)',vr:"LO",name:"InstitutionCode",vm:"1",version:"PrivateTag"},'(3f01,"INTELERAD MEDICAL SYSTEMS",02)':{tag:'(3f01,"INTELERAD MEDICAL SYSTEMS",02)',vr:"LO",name:"RoutedTransferAE",vm:"1",version:"PrivateTag"},'(3f01,"INTELERAD MEDICAL SYSTEMS",03)':{tag:'(3f01,"INTELERAD MEDICAL SYSTEMS",03)',vr:"LO",name:"SourceAE",vm:"1",version:"PrivateTag"},'(3f01,"INTELERAD MEDICAL SYSTEMS",04)':{tag:'(3f01,"INTELERAD MEDICAL SYSTEMS",04)',vr:"SH",name:"DeferredValidation",vm:"1",version:"PrivateTag"},'(3f01,"INTELERAD MEDICAL SYSTEMS",05)':{tag:'(3f01,"INTELERAD MEDICAL SYSTEMS",05)',vr:"LO",name:"SeriesOwner",vm:"1",version:"PrivateTag"},'(3f01,"INTELERAD MEDICAL SYSTEMS",06)':{tag:'(3f01,"INTELERAD MEDICAL SYSTEMS",06)',vr:"LO",name:"OrderGroupNumber",vm:"1",version:"PrivateTag"},'(3f01,"INTELERAD MEDICAL SYSTEMS",07)':{tag:'(3f01,"INTELERAD MEDICAL SYSTEMS",07)',vr:"SH",name:"StrippedPixelData",vm:"1",version:"PrivateTag"},'(3f01,"INTELERAD MEDICAL SYSTEMS",08)':{tag:'(3f01,"INTELERAD MEDICAL SYSTEMS",08)',vr:"SH",name:"PendingMoveRequest",vm:"1",version:"PrivateTag"},'(0041,"INTEGRIS 1.0",20)':{tag:'(0041,"INTEGRIS 1.0",20)',vr:"FL",name:"AccumulatedFluoroscopyDose",vm:"1",version:"PrivateTag"},'(0041,"INTEGRIS 1.0",30)':{tag:'(0041,"INTEGRIS 1.0",30)',vr:"FL",name:"AccumulatedExposureDose",vm:"1",version:"PrivateTag"},'(0041,"INTEGRIS 1.0",40)':{tag:'(0041,"INTEGRIS 1.0",40)',vr:"FL",name:"TotalDose",vm:"1",version:"PrivateTag"},'(0041,"INTEGRIS 1.0",41)':{tag:'(0041,"INTEGRIS 1.0",41)',vr:"FL",name:"TotalNumberOfFrames",vm:"1",version:"PrivateTag"},'(0041,"INTEGRIS 1.0",50)':{tag:'(0041,"INTEGRIS 1.0",50)',vr:"SQ",name:"ExposureInformationSequence",vm:"1",version:"PrivateTag"},'(0009,"INTEGRIS 1.0",08)':{tag:'(0009,"INTEGRIS 1.0",08)',vr:"CS",name:"ExposureChannel",vm:"1-n",version:"PrivateTag"},'(0009,"INTEGRIS 1.0",32)':{tag:'(0009,"INTEGRIS 1.0",32)',vr:"TM",name:"ExposureStartTime",vm:"1",version:"PrivateTag"},'(0019,"INTEGRIS 1.0",00)':{tag:'(0019,"INTEGRIS 1.0",00)',vr:"LO",name:"APRName",vm:"1",version:"PrivateTag"},'(0019,"INTEGRIS 1.0",40)':{tag:'(0019,"INTEGRIS 1.0",40)',vr:"DS",name:"FrameRate",vm:"1",version:"PrivateTag"},'(0021,"INTEGRIS 1.0",12)':{tag:'(0021,"INTEGRIS 1.0",12)',vr:"IS",name:"ExposureNumber",vm:"1",version:"PrivateTag"},'(0029,"INTEGRIS 1.0",08)':{tag:'(0029,"INTEGRIS 1.0",08)',vr:"IS",name:"NumberOfExposureResults",vm:"1",version:"PrivateTag"},'(0029,"ISG shadow",70)':{tag:'(0029,"ISG shadow",70)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"ISG shadow",80)':{tag:'(0029,"ISG shadow",80)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"ISG shadow",90)':{tag:'(0029,"ISG shadow",90)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ISI",01)':{tag:'(0009,"ISI",01)',vr:"UN",name:"SIENETGeneralPurposeIMGEF",vm:"1",version:"PrivateTag"},'(0009,"MERGE TECHNOLOGIES, INC.",00)':{tag:'(0009,"MERGE TECHNOLOGIES, INC.",00)',vr:"OB",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"OCULUS Optikgeraete GmbH",1010)':{tag:'(0029,"OCULUS Optikgeraete GmbH",1010)',vr:"OB",name:"OriginalMeasuringData",vm:"1",version:"PrivateTag"},'(0029,"OCULUS Optikgeraete GmbH",1012)':{tag:'(0029,"OCULUS Optikgeraete GmbH",1012)',vr:"UL",name:"OriginalMeasuringDataLength",vm:"1",version:"PrivateTag"},'(0029,"OCULUS Optikgeraete GmbH",1020)':{tag:'(0029,"OCULUS Optikgeraete GmbH",1020)',vr:"OB",name:"OriginalMeasuringRawData",vm:"1",version:"PrivateTag"},'(0029,"OCULUS Optikgeraete GmbH",1022)':{tag:'(0029,"OCULUS Optikgeraete GmbH",1022)',vr:"UL",name:"OriginalMeasuringRawDataLength",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",00)':{tag:'(0041,"PAPYRUS 3.0",00)',vr:"LT",name:"PapyrusComments",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",10)':{tag:'(0041,"PAPYRUS 3.0",10)',vr:"SQ",name:"PointerSequence",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",11)':{tag:'(0041,"PAPYRUS 3.0",11)',vr:"UL",name:"ImagePointer",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",12)':{tag:'(0041,"PAPYRUS 3.0",12)',vr:"UL",name:"PixelOffset",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",13)':{tag:'(0041,"PAPYRUS 3.0",13)',vr:"SQ",name:"ImageIdentifierSequence",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",14)':{tag:'(0041,"PAPYRUS 3.0",14)',vr:"SQ",name:"ExternalFileReferenceSequence",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",15)':{tag:'(0041,"PAPYRUS 3.0",15)',vr:"US",name:"NumberOfImages",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",21)':{tag:'(0041,"PAPYRUS 3.0",21)',vr:"UI",name:"ReferencedSOPClassUID",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",22)':{tag:'(0041,"PAPYRUS 3.0",22)',vr:"UI",name:"ReferencedSOPInstanceUID",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",31)':{tag:'(0041,"PAPYRUS 3.0",31)',vr:"LT",name:"ReferencedFileName",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",32)':{tag:'(0041,"PAPYRUS 3.0",32)',vr:"LT",name:"ReferencedFilePath",vm:"1-n",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",41)':{tag:'(0041,"PAPYRUS 3.0",41)',vr:"UI",name:"ReferencedImageSOPClassUID",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",42)':{tag:'(0041,"PAPYRUS 3.0",42)',vr:"UI",name:"ReferencedImageSOPInstanceUID",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",50)':{tag:'(0041,"PAPYRUS 3.0",50)',vr:"SQ",name:"ImageSequence",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",00)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",00)',vr:"IS",name:"OverlayID",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",01)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",01)',vr:"LT",name:"LinkedOverlays",vm:"1-n",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",10)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",10)',vr:"US",name:"OverlayRows",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",11)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",11)',vr:"US",name:"OverlayColumns",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",40)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",40)',vr:"LO",name:"OverlayType",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",50)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",50)',vr:"US",name:"OverlayOrigin",vm:"1-n",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",60)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",60)',vr:"LO",name:"Editable",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",70)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",70)',vr:"LO",name:"OverlayFont",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",72)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",72)',vr:"LO",name:"OverlayStyle",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",74)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",74)',vr:"US",name:"OverlayFontSize",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",76)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",76)',vr:"LO",name:"OverlayColor",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",78)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",78)',vr:"US",name:"ShadowSize",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",80)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",80)',vr:"LO",name:"FillPattern",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",82)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",82)',vr:"US",name:"OverlayPenSize",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",a0)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",a0)',vr:"LO",name:"Label",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",a2)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",a2)',vr:"LT",name:"PostItText",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",a4)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",a4)',vr:"US",name:"AnchorPoint",vm:"2",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",b0)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",b0)',vr:"LO",name:"ROIType",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",b2)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",b2)',vr:"LT",name:"AttachedAnnotation",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",ba)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",ba)',vr:"US",name:"ContourPoints",vm:"1-n",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",bc)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",bc)',vr:"US",name:"MaskData",vm:"1-n",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",c0)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",c0)',vr:"SQ",name:"UINOverlaySequence",vm:"1",version:"PrivateTag"},'(0009,"PAPYRUS",00)':{tag:'(0009,"PAPYRUS",00)',vr:"LT",name:"OriginalFileName",vm:"1",version:"PrivateTag"},'(0009,"PAPYRUS",10)':{tag:'(0009,"PAPYRUS",10)',vr:"LT",name:"OriginalFileLocation",vm:"1",version:"PrivateTag"},'(0009,"PAPYRUS",18)':{tag:'(0009,"PAPYRUS",18)',vr:"LT",name:"DataSetIdentifier",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS",00)':{tag:'(0041,"PAPYRUS",00)',vr:"LT",name:"PapyrusComments",vm:"1-n",version:"PrivateTag"},'(0041,"PAPYRUS",10)':{tag:'(0041,"PAPYRUS",10)',vr:"US",name:"FolderType",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS",11)':{tag:'(0041,"PAPYRUS",11)',vr:"LT",name:"PatientFolderDataSetID",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS",20)':{tag:'(0041,"PAPYRUS",20)',vr:"LT",name:"FolderName",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS",30)':{tag:'(0041,"PAPYRUS",30)',vr:"DA",name:"CreationDate",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS",32)':{tag:'(0041,"PAPYRUS",32)',vr:"TM",name:"CreationTime",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS",34)':{tag:'(0041,"PAPYRUS",34)',vr:"DA",name:"ModifiedDate",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS",36)':{tag:'(0041,"PAPYRUS",36)',vr:"TM",name:"ModifiedTime",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS",40)':{tag:'(0041,"PAPYRUS",40)',vr:"LT",name:"OwnerName",vm:"1-n",version:"PrivateTag"},'(0041,"PAPYRUS",50)':{tag:'(0041,"PAPYRUS",50)',vr:"LT",name:"FolderStatus",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS",60)':{tag:'(0041,"PAPYRUS",60)',vr:"UL",name:"NumberOfImages",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS",62)':{tag:'(0041,"PAPYRUS",62)',vr:"UL",name:"NumberOfOther",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS",a0)':{tag:'(0041,"PAPYRUS",a0)',vr:"LT",name:"ExternalFolderElementDSID",vm:"1-n",version:"PrivateTag"},'(0041,"PAPYRUS",a1)':{tag:'(0041,"PAPYRUS",a1)',vr:"US",name:"ExternalFolderElementDataSetType",vm:"1-n",version:"PrivateTag"},'(0041,"PAPYRUS",a2)':{tag:'(0041,"PAPYRUS",a2)',vr:"LT",name:"ExternalFolderElementFileLocation",vm:"1-n",version:"PrivateTag"},'(0041,"PAPYRUS",a3)':{tag:'(0041,"PAPYRUS",a3)',vr:"UL",name:"ExternalFolderElementLength",vm:"1-n",version:"PrivateTag"},'(0041,"PAPYRUS",b0)':{tag:'(0041,"PAPYRUS",b0)',vr:"LT",name:"InternalFolderElementDSID",vm:"1-n",version:"PrivateTag"},'(0041,"PAPYRUS",b1)':{tag:'(0041,"PAPYRUS",b1)',vr:"US",name:"InternalFolderElementDataSetType",vm:"1-n",version:"PrivateTag"},'(0041,"PAPYRUS",b2)':{tag:'(0041,"PAPYRUS",b2)',vr:"UL",name:"InternalOffsetToDataSet",vm:"1-n",version:"PrivateTag"},'(0041,"PAPYRUS",b3)':{tag:'(0041,"PAPYRUS",b3)',vr:"UL",name:"InternalOffsetToImage",vm:"1-n",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",01)':{tag:'(2001,"Philips Imaging DD 001",01)',vr:"FL",name:"ChemicalShift",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",02)':{tag:'(2001,"Philips Imaging DD 001",02)',vr:"IS",name:"ChemicalShiftNumberMR",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",03)':{tag:'(2001,"Philips Imaging DD 001",03)',vr:"FL",name:"DiffusionBFactor",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",04)':{tag:'(2001,"Philips Imaging DD 001",04)',vr:"CS",name:"DiffusionDirection",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",06)':{tag:'(2001,"Philips Imaging DD 001",06)',vr:"CS",name:"ImageEnhanced",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",07)':{tag:'(2001,"Philips Imaging DD 001",07)',vr:"CS",name:"ImageTypeEDES",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",08)':{tag:'(2001,"Philips Imaging DD 001",08)',vr:"IS",name:"PhaseNumber",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",09)':{tag:'(2001,"Philips Imaging DD 001",09)',vr:"FL",name:"ImagePrepulseDelay",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",0a)':{tag:'(2001,"Philips Imaging DD 001",0a)',vr:"IS",name:"SliceNumberMR",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",0b)':{tag:'(2001,"Philips Imaging DD 001",0b)',vr:"CS",name:"SliceOrientation",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",0c)':{tag:'(2001,"Philips Imaging DD 001",0c)',vr:"CS",name:"ArrhythmiaRejection",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",0e)':{tag:'(2001,"Philips Imaging DD 001",0e)',vr:"CS",name:"CardiacCycled",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",0f)':{tag:'(2001,"Philips Imaging DD 001",0f)',vr:"SS",name:"CardiacGateWidth",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",10)':{tag:'(2001,"Philips Imaging DD 001",10)',vr:"CS",name:"CardiacSync",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",11)':{tag:'(2001,"Philips Imaging DD 001",11)',vr:"FL",name:"DiffusionEchoTime",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",12)':{tag:'(2001,"Philips Imaging DD 001",12)',vr:"CS",name:"DynamicSeries",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",13)':{tag:'(2001,"Philips Imaging DD 001",13)',vr:"SL",name:"EPIFactor",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",14)':{tag:'(2001,"Philips Imaging DD 001",14)',vr:"SL",name:"NumberOfEchoes",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",15)':{tag:'(2001,"Philips Imaging DD 001",15)',vr:"SS",name:"NumberOfLocations",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",16)':{tag:'(2001,"Philips Imaging DD 001",16)',vr:"SS",name:"NumberOfPCDirections",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",17)':{tag:'(2001,"Philips Imaging DD 001",17)',vr:"SL",name:"NumberOfPhasesMR",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",18)':{tag:'(2001,"Philips Imaging DD 001",18)',vr:"SL",name:"NumberOfSlicesMR",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",19)':{tag:'(2001,"Philips Imaging DD 001",19)',vr:"CS",name:"PartialMatrixScanned",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",1a)':{tag:'(2001,"Philips Imaging DD 001",1a)',vr:"FL",name:"PCVelocity",vm:"1-n",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",1b)':{tag:'(2001,"Philips Imaging DD 001",1b)',vr:"FL",name:"PrepulseDelay",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",1c)':{tag:'(2001,"Philips Imaging DD 001",1c)',vr:"CS",name:"PrepulseType",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",1d)':{tag:'(2001,"Philips Imaging DD 001",1d)',vr:"IS",name:"ReconstructionNumberMR",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",1f)':{tag:'(2001,"Philips Imaging DD 001",1f)',vr:"CS",name:"RespirationSync",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",20)':{tag:'(2001,"Philips Imaging DD 001",20)',vr:"LO",name:"ScanningTechnique",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",21)':{tag:'(2001,"Philips Imaging DD 001",21)',vr:"CS",name:"SPIR",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",22)':{tag:'(2001,"Philips Imaging DD 001",22)',vr:"FL",name:"WaterFatShift",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",23)':{tag:'(2001,"Philips Imaging DD 001",23)',vr:"DS",name:"FlipAnglePhilips",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",24)':{tag:'(2001,"Philips Imaging DD 001",24)',vr:"CS",name:"SeriesIsInteractive",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",25)':{tag:'(2001,"Philips Imaging DD 001",25)',vr:"SH",name:"EchoTimeDisplayMR",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",26)':{tag:'(2001,"Philips Imaging DD 001",26)',vr:"CS",name:"PresentationStateSubtractionActive",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",2d)':{tag:'(2001,"Philips Imaging DD 001",2d)',vr:"SS",name:"StackNumberOfSlices",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",32)':{tag:'(2001,"Philips Imaging DD 001",32)',vr:"FL",name:"StackRadialAngle",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",33)':{tag:'(2001,"Philips Imaging DD 001",33)',vr:"CS",name:"StackRadialAxis",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",35)':{tag:'(2001,"Philips Imaging DD 001",35)',vr:"SS",name:"StackSliceNumber",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",36)':{tag:'(2001,"Philips Imaging DD 001",36)',vr:"CS",name:"StackType",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",3f)':{tag:'(2001,"Philips Imaging DD 001",3f)',vr:"CS",name:"ZoomMode",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",58)':{tag:'(2001,"Philips Imaging DD 001",58)',vr:"UL",name:"ContrastTransferTaste",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",5f)':{tag:'(2001,"Philips Imaging DD 001",5f)',vr:"SQ",name:"StackSequence",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",60)':{tag:'(2001,"Philips Imaging DD 001",60)',vr:"SL",name:"NumberOfStacks",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",61)':{tag:'(2001,"Philips Imaging DD 001",61)',vr:"CS",name:"SeriesTransmitted",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",62)':{tag:'(2001,"Philips Imaging DD 001",62)',vr:"CS",name:"SeriesCommitted",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",63)':{tag:'(2001,"Philips Imaging DD 001",63)',vr:"CS",name:"ExaminationSource",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",67)':{tag:'(2001,"Philips Imaging DD 001",67)',vr:"CS",name:"LinearPresentationGLTrafoShapeSub",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",77)':{tag:'(2001,"Philips Imaging DD 001",77)',vr:"CS",name:"GLTrafoType",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",7b)':{tag:'(2001,"Philips Imaging DD 001",7b)',vr:"IS",name:"AcquisitionNumber",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",81)':{tag:'(2001,"Philips Imaging DD 001",81)',vr:"IS",name:"NumberOfDynamicScans",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",9f)':{tag:'(2001,"Philips Imaging DD 001",9f)',vr:"US",name:"PixelProcessingKernelSize",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",a1)':{tag:'(2001,"Philips Imaging DD 001",a1)',vr:"CS",name:"IsRawImage",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",f1)':{tag:'(2001,"Philips Imaging DD 001",f1)',vr:"FL",name:"ProspectiveMotionCorrection",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",f2)':{tag:'(2001,"Philips Imaging DD 001",f2)',vr:"FL",name:"RetrospectiveMotionCorrection",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",01)':{tag:'(2001,"PHILIPS IMAGING DD 001",01)',vr:"FL",name:"ChemicalShift",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",02)':{tag:'(2001,"PHILIPS IMAGING DD 001",02)',vr:"IS",name:"ChemicalShiftNumberMR",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",03)':{tag:'(2001,"PHILIPS IMAGING DD 001",03)',vr:"FL",name:"DiffusionBFactor",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",04)':{tag:'(2001,"PHILIPS IMAGING DD 001",04)',vr:"CS",name:"DiffusionDirection",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",06)':{tag:'(2001,"PHILIPS IMAGING DD 001",06)',vr:"CS",name:"ImageEnhanced",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",07)':{tag:'(2001,"PHILIPS IMAGING DD 001",07)',vr:"CS",name:"ImageTypeEDES",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",08)':{tag:'(2001,"PHILIPS IMAGING DD 001",08)',vr:"IS",name:"PhaseNumber",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",09)':{tag:'(2001,"PHILIPS IMAGING DD 001",09)',vr:"FL",name:"ImagePrepulseDelay",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",0a)':{tag:'(2001,"PHILIPS IMAGING DD 001",0a)',vr:"IS",name:"SliceNumberMR",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",0b)':{tag:'(2001,"PHILIPS IMAGING DD 001",0b)',vr:"CS",name:"SliceOrientation",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",0c)':{tag:'(2001,"PHILIPS IMAGING DD 001",0c)',vr:"CS",name:"ArrhythmiaRejection",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",0e)':{tag:'(2001,"PHILIPS IMAGING DD 001",0e)',vr:"CS",name:"CardiacCycled",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",0f)':{tag:'(2001,"PHILIPS IMAGING DD 001",0f)',vr:"SS",name:"CardiacGateWidth",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",10)':{tag:'(2001,"PHILIPS IMAGING DD 001",10)',vr:"CS",name:"CardiacSync",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",11)':{tag:'(2001,"PHILIPS IMAGING DD 001",11)',vr:"FL",name:"DiffusionEchoTime",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",12)':{tag:'(2001,"PHILIPS IMAGING DD 001",12)',vr:"CS",name:"DynamicSeries",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",13)':{tag:'(2001,"PHILIPS IMAGING DD 001",13)',vr:"SL",name:"EPIFactor",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",14)':{tag:'(2001,"PHILIPS IMAGING DD 001",14)',vr:"SL",name:"NumberOfEchoes",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",15)':{tag:'(2001,"PHILIPS IMAGING DD 001",15)',vr:"SS",name:"NumberOfLocations",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",16)':{tag:'(2001,"PHILIPS IMAGING DD 001",16)',vr:"SS",name:"NumberOfPCDirections",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",17)':{tag:'(2001,"PHILIPS IMAGING DD 001",17)',vr:"SL",name:"NumberOfPhasesMR",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",18)':{tag:'(2001,"PHILIPS IMAGING DD 001",18)',vr:"SL",name:"NumberOfSlicesMR",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",19)':{tag:'(2001,"PHILIPS IMAGING DD 001",19)',vr:"CS",name:"PartialMatrixScanned",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",1a)':{tag:'(2001,"PHILIPS IMAGING DD 001",1a)',vr:"FL",name:"PCVelocity",vm:"1-n",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",1b)':{tag:'(2001,"PHILIPS IMAGING DD 001",1b)',vr:"FL",name:"PrepulseDelay",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",1c)':{tag:'(2001,"PHILIPS IMAGING DD 001",1c)',vr:"CS",name:"PrepulseType",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",1d)':{tag:'(2001,"PHILIPS IMAGING DD 001",1d)',vr:"IS",name:"ReconstructionNumberMR",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",1f)':{tag:'(2001,"PHILIPS IMAGING DD 001",1f)',vr:"CS",name:"RespirationSync",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",20)':{tag:'(2001,"PHILIPS IMAGING DD 001",20)',vr:"LO",name:"ScanningTechnique",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",21)':{tag:'(2001,"PHILIPS IMAGING DD 001",21)',vr:"CS",name:"SPIR",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",22)':{tag:'(2001,"PHILIPS IMAGING DD 001",22)',vr:"FL",name:"WaterFatShift",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",23)':{tag:'(2001,"PHILIPS IMAGING DD 001",23)',vr:"DS",name:"FlipAnglePhilips",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",24)':{tag:'(2001,"PHILIPS IMAGING DD 001",24)',vr:"CS",name:"SeriesIsInteractive",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",25)':{tag:'(2001,"PHILIPS IMAGING DD 001",25)',vr:"SH",name:"EchoTimeDisplayMR",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",26)':{tag:'(2001,"PHILIPS IMAGING DD 001",26)',vr:"CS",name:"PresentationStateSubtractionActive",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",2d)':{tag:'(2001,"PHILIPS IMAGING DD 001",2d)',vr:"SS",name:"StackNumberOfSlices",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",32)':{tag:'(2001,"PHILIPS IMAGING DD 001",32)',vr:"FL",name:"StackRadialAngle",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",33)':{tag:'(2001,"PHILIPS IMAGING DD 001",33)',vr:"CS",name:"StackRadialAxis",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",35)':{tag:'(2001,"PHILIPS IMAGING DD 001",35)',vr:"SS",name:"StackSliceNumber",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",36)':{tag:'(2001,"PHILIPS IMAGING DD 001",36)',vr:"CS",name:"StackType",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",3f)':{tag:'(2001,"PHILIPS IMAGING DD 001",3f)',vr:"CS",name:"ZoomMode",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",58)':{tag:'(2001,"PHILIPS IMAGING DD 001",58)',vr:"UL",name:"ContrastTransferTaste",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",5f)':{tag:'(2001,"PHILIPS IMAGING DD 001",5f)',vr:"SQ",name:"StackSequence",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",60)':{tag:'(2001,"PHILIPS IMAGING DD 001",60)',vr:"SL",name:"NumberOfStacks",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",61)':{tag:'(2001,"PHILIPS IMAGING DD 001",61)',vr:"CS",name:"SeriesTransmitted",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",62)':{tag:'(2001,"PHILIPS IMAGING DD 001",62)',vr:"CS",name:"SeriesCommitted",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",63)':{tag:'(2001,"PHILIPS IMAGING DD 001",63)',vr:"CS",name:"ExaminationSource",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",67)':{tag:'(2001,"PHILIPS IMAGING DD 001",67)',vr:"CS",name:"LinearPresentationGLTrafoShapeSub",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",77)':{tag:'(2001,"PHILIPS IMAGING DD 001",77)',vr:"CS",name:"GLTrafoType",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",7b)':{tag:'(2001,"PHILIPS IMAGING DD 001",7b)',vr:"IS",name:"AcquisitionNumber",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",81)':{tag:'(2001,"PHILIPS IMAGING DD 001",81)',vr:"IS",name:"NumberOfDynamicScans",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",9f)':{tag:'(2001,"PHILIPS IMAGING DD 001",9f)',vr:"US",name:"PixelProcessingKernelSize",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",a1)':{tag:'(2001,"PHILIPS IMAGING DD 001",a1)',vr:"CS",name:"IsRawImage",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",f1)':{tag:'(2001,"PHILIPS IMAGING DD 001",f1)',vr:"FL",name:"ProspectiveMotionCorrection",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",f2)':{tag:'(2001,"PHILIPS IMAGING DD 001",f2)',vr:"FL",name:"RetrospectiveMotionCorrection",vm:"1",version:"PrivateTag"},'(2005,"Philips MR Imaging DD 001",05)':{tag:'(2005,"Philips MR Imaging DD 001",05)',vr:"CS",name:"SynergyReconstructionType",vm:"1",version:"PrivateTag"},'(2005,"Philips MR Imaging DD 001",1e)':{tag:'(2005,"Philips MR Imaging DD 001",1e)',vr:"SH",name:"MIPProtocol",vm:"1",version:"PrivateTag"},'(2005,"Philips MR Imaging DD 001",1f)':{tag:'(2005,"Philips MR Imaging DD 001",1f)',vr:"SH",name:"MPRProtocol",vm:"1",version:"PrivateTag"},'(2005,"Philips MR Imaging DD 001",20)':{tag:'(2005,"Philips MR Imaging DD 001",20)',vr:"SL",name:"NumberOfChemicalShifts",vm:"1",version:"PrivateTag"},'(2005,"Philips MR Imaging DD 001",2d)':{tag:'(2005,"Philips MR Imaging DD 001",2d)',vr:"SS",name:"NumberOfStackSlices",vm:"1",version:"PrivateTag"},'(2005,"Philips MR Imaging DD 001",83)':{tag:'(2005,"Philips MR Imaging DD 001",83)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(2005,"Philips MR Imaging DD 001",a1)':{tag:'(2005,"Philips MR Imaging DD 001",a1)',vr:"CS",name:"SyncraScanType",vm:"1",version:"PrivateTag"},'(2005,"Philips MR Imaging DD 001",b0)':{tag:'(2005,"Philips MR Imaging DD 001",b0)',vr:"FL",name:"DiffusionDirectionRL",vm:"1",version:"PrivateTag"},'(2005,"Philips MR Imaging DD 001",b1)':{tag:'(2005,"Philips MR Imaging DD 001",b1)',vr:"FL",name:"DiffusionDirectionAP",vm:"1",version:"PrivateTag"},'(2005,"Philips MR Imaging DD 001",b2)':{tag:'(2005,"Philips MR Imaging DD 001",b2)',vr:"FL",name:"DiffusionDirectionFH",vm:"1",version:"PrivateTag"},'(2005,"Philips MR Imaging DD 005",02)':{tag:'(2005,"Philips MR Imaging DD 005",02)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(2005,"PHILIPS MR IMAGING DD 001",05)':{tag:'(2005,"PHILIPS MR IMAGING DD 001",05)',vr:"CS",name:"SynergyReconstructionType",vm:"1",version:"PrivateTag"},'(2005,"PHILIPS MR IMAGING DD 001",1e)':{tag:'(2005,"PHILIPS MR IMAGING DD 001",1e)',vr:"SH",name:"MIPProtocol",vm:"1",version:"PrivateTag"},'(2005,"PHILIPS MR IMAGING DD 001",1f)':{tag:'(2005,"PHILIPS MR IMAGING DD 001",1f)',vr:"SH",name:"MPRProtocol",vm:"1",version:"PrivateTag"},'(2005,"PHILIPS MR IMAGING DD 001",20)':{tag:'(2005,"PHILIPS MR IMAGING DD 001",20)',vr:"SL",name:"NumberOfChemicalShifts",vm:"1",version:"PrivateTag"},'(2005,"PHILIPS MR IMAGING DD 001",2d)':{tag:'(2005,"PHILIPS MR IMAGING DD 001",2d)',vr:"SS",name:"NumberOfStackSlices",vm:"1",version:"PrivateTag"},'(2005,"PHILIPS MR IMAGING DD 001",83)':{tag:'(2005,"PHILIPS MR IMAGING DD 001",83)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(2005,"PHILIPS MR IMAGING DD 001",a1)':{tag:'(2005,"PHILIPS MR IMAGING DD 001",a1)',vr:"CS",name:"SyncraScanType",vm:"1",version:"PrivateTag"},'(2005,"PHILIPS MR IMAGING DD 001",b0)':{tag:'(2005,"PHILIPS MR IMAGING DD 001",b0)',vr:"FL",name:"DiffusionDirectionRL",vm:"1",version:"PrivateTag"},'(2005,"PHILIPS MR IMAGING DD 001",b1)':{tag:'(2005,"PHILIPS MR IMAGING DD 001",b1)',vr:"FL",name:"DiffusionDirectionAP",vm:"1",version:"PrivateTag"},'(2005,"PHILIPS MR IMAGING DD 001",b2)':{tag:'(2005,"PHILIPS MR IMAGING DD 001",b2)',vr:"FL",name:"DiffusionDirectionFH",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR R5.5/PART",1000)':{tag:'(0019,"PHILIPS MR R5.5/PART",1000)',vr:"DS",name:"FieldOfView",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR R5.6/PART",1000)':{tag:'(0019,"PHILIPS MR R5.6/PART",1000)',vr:"DS",name:"FieldOfView",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",01)':{tag:'(0019,"PHILIPS MR SPECTRO;1",01)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",02)':{tag:'(0019,"PHILIPS MR SPECTRO;1",02)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",03)':{tag:'(0019,"PHILIPS MR SPECTRO;1",03)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",04)':{tag:'(0019,"PHILIPS MR SPECTRO;1",04)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",05)':{tag:'(0019,"PHILIPS MR SPECTRO;1",05)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",06)':{tag:'(0019,"PHILIPS MR SPECTRO;1",06)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",07)':{tag:'(0019,"PHILIPS MR SPECTRO;1",07)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",08)':{tag:'(0019,"PHILIPS MR SPECTRO;1",08)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",09)':{tag:'(0019,"PHILIPS MR SPECTRO;1",09)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",10)':{tag:'(0019,"PHILIPS MR SPECTRO;1",10)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",12)':{tag:'(0019,"PHILIPS MR SPECTRO;1",12)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",13)':{tag:'(0019,"PHILIPS MR SPECTRO;1",13)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",14)':{tag:'(0019,"PHILIPS MR SPECTRO;1",14)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",15)':{tag:'(0019,"PHILIPS MR SPECTRO;1",15)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",16)':{tag:'(0019,"PHILIPS MR SPECTRO;1",16)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",17)':{tag:'(0019,"PHILIPS MR SPECTRO;1",17)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",18)':{tag:'(0019,"PHILIPS MR SPECTRO;1",18)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",20)':{tag:'(0019,"PHILIPS MR SPECTRO;1",20)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",21)':{tag:'(0019,"PHILIPS MR SPECTRO;1",21)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",22)':{tag:'(0019,"PHILIPS MR SPECTRO;1",22)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",23)':{tag:'(0019,"PHILIPS MR SPECTRO;1",23)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",24)':{tag:'(0019,"PHILIPS MR SPECTRO;1",24)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",25)':{tag:'(0019,"PHILIPS MR SPECTRO;1",25)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",26)':{tag:'(0019,"PHILIPS MR SPECTRO;1",26)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",27)':{tag:'(0019,"PHILIPS MR SPECTRO;1",27)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",28)':{tag:'(0019,"PHILIPS MR SPECTRO;1",28)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",29)':{tag:'(0019,"PHILIPS MR SPECTRO;1",29)',vr:"IS",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",31)':{tag:'(0019,"PHILIPS MR SPECTRO;1",31)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",32)':{tag:'(0019,"PHILIPS MR SPECTRO;1",32)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",41)':{tag:'(0019,"PHILIPS MR SPECTRO;1",41)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",42)':{tag:'(0019,"PHILIPS MR SPECTRO;1",42)',vr:"IS",name:"Unknown",vm:"2",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",43)':{tag:'(0019,"PHILIPS MR SPECTRO;1",43)',vr:"IS",name:"Unknown",vm:"2",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",45)':{tag:'(0019,"PHILIPS MR SPECTRO;1",45)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",46)':{tag:'(0019,"PHILIPS MR SPECTRO;1",46)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",47)':{tag:'(0019,"PHILIPS MR SPECTRO;1",47)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",48)':{tag:'(0019,"PHILIPS MR SPECTRO;1",48)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",49)':{tag:'(0019,"PHILIPS MR SPECTRO;1",49)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",50)':{tag:'(0019,"PHILIPS MR SPECTRO;1",50)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",60)':{tag:'(0019,"PHILIPS MR SPECTRO;1",60)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",61)':{tag:'(0019,"PHILIPS MR SPECTRO;1",61)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",70)':{tag:'(0019,"PHILIPS MR SPECTRO;1",70)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",71)':{tag:'(0019,"PHILIPS MR SPECTRO;1",71)',vr:"IS",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",72)':{tag:'(0019,"PHILIPS MR SPECTRO;1",72)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",73)':{tag:'(0019,"PHILIPS MR SPECTRO;1",73)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",74)':{tag:'(0019,"PHILIPS MR SPECTRO;1",74)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",76)':{tag:'(0019,"PHILIPS MR SPECTRO;1",76)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",77)':{tag:'(0019,"PHILIPS MR SPECTRO;1",77)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",78)':{tag:'(0019,"PHILIPS MR SPECTRO;1",78)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",79)':{tag:'(0019,"PHILIPS MR SPECTRO;1",79)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",80)':{tag:'(0019,"PHILIPS MR SPECTRO;1",80)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"PHILIPS MR",10)':{tag:'(0009,"PHILIPS MR",10)',vr:"LO",name:"SPIRelease",vm:"1",version:"PrivateTag"},'(0009,"PHILIPS MR",12)':{tag:'(0009,"PHILIPS MR",12)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",09)':{tag:'(0019,"PHILIPS MR/LAST",09)',vr:"DS",name:"MainMagneticField",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",0e)':{tag:'(0019,"PHILIPS MR/LAST",0e)',vr:"IS",name:"FlowCompensation",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",b1)':{tag:'(0019,"PHILIPS MR/LAST",b1)',vr:"IS",name:"MinimumRRInterval",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",b2)':{tag:'(0019,"PHILIPS MR/LAST",b2)',vr:"IS",name:"MaximumRRInterval",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",b3)':{tag:'(0019,"PHILIPS MR/LAST",b3)',vr:"IS",name:"NumberOfRejections",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",b4)':{tag:'(0019,"PHILIPS MR/LAST",b4)',vr:"IS",name:"NumberOfRRIntervals",vm:"1-n",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",b5)':{tag:'(0019,"PHILIPS MR/LAST",b5)',vr:"IS",name:"ArrhythmiaRejection",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",c0)':{tag:'(0019,"PHILIPS MR/LAST",c0)',vr:"DS",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",c6)':{tag:'(0019,"PHILIPS MR/LAST",c6)',vr:"IS",name:"CycledMultipleSlice",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",ce)':{tag:'(0019,"PHILIPS MR/LAST",ce)',vr:"IS",name:"REST",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",d5)':{tag:'(0019,"PHILIPS MR/LAST",d5)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",d6)':{tag:'(0019,"PHILIPS MR/LAST",d6)',vr:"IS",name:"FourierInterpolation",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",d9)':{tag:'(0019,"PHILIPS MR/LAST",d9)',vr:"IS",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",e0)':{tag:'(0019,"PHILIPS MR/LAST",e0)',vr:"IS",name:"Prepulse",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",e1)':{tag:'(0019,"PHILIPS MR/LAST",e1)',vr:"DS",name:"PrepulseDelay",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",e2)':{tag:'(0019,"PHILIPS MR/LAST",e2)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",e3)':{tag:'(0019,"PHILIPS MR/LAST",e3)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",f0)':{tag:'(0019,"PHILIPS MR/LAST",f0)',vr:"LT",name:"WSProtocolString1",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",f1)':{tag:'(0019,"PHILIPS MR/LAST",f1)',vr:"LT",name:"WSProtocolString2",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",f2)':{tag:'(0019,"PHILIPS MR/LAST",f2)',vr:"LT",name:"WSProtocolString3",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",f3)':{tag:'(0019,"PHILIPS MR/LAST",f3)',vr:"LT",name:"WSProtocolString4",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/LAST",00)':{tag:'(0021,"PHILIPS MR/LAST",00)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/LAST",10)':{tag:'(0021,"PHILIPS MR/LAST",10)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/LAST",20)':{tag:'(0021,"PHILIPS MR/LAST",20)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/LAST",21)':{tag:'(0021,"PHILIPS MR/LAST",21)',vr:"DS",name:"SliceGap",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/LAST",22)':{tag:'(0021,"PHILIPS MR/LAST",22)',vr:"DS",name:"StackRadialAngle",vm:"1",version:"PrivateTag"},'(0027,"PHILIPS MR/LAST",00)':{tag:'(0027,"PHILIPS MR/LAST",00)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0027,"PHILIPS MR/LAST",11)':{tag:'(0027,"PHILIPS MR/LAST",11)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0027,"PHILIPS MR/LAST",12)':{tag:'(0027,"PHILIPS MR/LAST",12)',vr:"DS",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0027,"PHILIPS MR/LAST",13)':{tag:'(0027,"PHILIPS MR/LAST",13)',vr:"DS",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0027,"PHILIPS MR/LAST",14)':{tag:'(0027,"PHILIPS MR/LAST",14)',vr:"DS",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0027,"PHILIPS MR/LAST",15)':{tag:'(0027,"PHILIPS MR/LAST",15)',vr:"DS",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0027,"PHILIPS MR/LAST",16)':{tag:'(0027,"PHILIPS MR/LAST",16)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",10)':{tag:'(0029,"PHILIPS MR/LAST",10)',vr:"DS",name:"FPMin",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",20)':{tag:'(0029,"PHILIPS MR/LAST",20)',vr:"DS",name:"FPMax",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",30)':{tag:'(0029,"PHILIPS MR/LAST",30)',vr:"DS",name:"ScaledMinimum",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",40)':{tag:'(0029,"PHILIPS MR/LAST",40)',vr:"DS",name:"ScaledMaximum",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",50)':{tag:'(0029,"PHILIPS MR/LAST",50)',vr:"DS",name:"WindowMinimum",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",60)':{tag:'(0029,"PHILIPS MR/LAST",60)',vr:"DS",name:"WindowMaximum",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",61)':{tag:'(0029,"PHILIPS MR/LAST",61)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",70)':{tag:'(0029,"PHILIPS MR/LAST",70)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",71)':{tag:'(0029,"PHILIPS MR/LAST",71)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",72)':{tag:'(0029,"PHILIPS MR/LAST",72)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",80)':{tag:'(0029,"PHILIPS MR/LAST",80)',vr:"IS",name:"ViewCenter",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",81)':{tag:'(0029,"PHILIPS MR/LAST",81)',vr:"IS",name:"ViewSize",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",82)':{tag:'(0029,"PHILIPS MR/LAST",82)',vr:"IS",name:"ViewZoom",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",83)':{tag:'(0029,"PHILIPS MR/LAST",83)',vr:"IS",name:"ViewTransform",vm:"1",version:"PrivateTag"},'(6001,"PHILIPS MR/LAST",00)':{tag:'(6001,"PHILIPS MR/LAST",00)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1000)':{tag:'(0019,"PHILIPS MR/PART",1000)',vr:"DS",name:"FieldOfView",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1005)':{tag:'(0019,"PHILIPS MR/PART",1005)',vr:"DS",name:"CCAngulation",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1006)':{tag:'(0019,"PHILIPS MR/PART",1006)',vr:"DS",name:"APAngulation",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1007)':{tag:'(0019,"PHILIPS MR/PART",1007)',vr:"DS",name:"LRAngulation",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1008)':{tag:'(0019,"PHILIPS MR/PART",1008)',vr:"IS",name:"PatientPosition",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1009)':{tag:'(0019,"PHILIPS MR/PART",1009)',vr:"IS",name:"PatientOrientation",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",100a)':{tag:'(0019,"PHILIPS MR/PART",100a)',vr:"IS",name:"SliceOrientation",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",100b)':{tag:'(0019,"PHILIPS MR/PART",100b)',vr:"DS",name:"LROffcenter",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",100c)':{tag:'(0019,"PHILIPS MR/PART",100c)',vr:"DS",name:"CCOffcenter",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",100d)':{tag:'(0019,"PHILIPS MR/PART",100d)',vr:"DS",name:"APOffcenter",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",100e)':{tag:'(0019,"PHILIPS MR/PART",100e)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",100f)':{tag:'(0019,"PHILIPS MR/PART",100f)',vr:"IS",name:"NumberOfSlices",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1010)':{tag:'(0019,"PHILIPS MR/PART",1010)',vr:"DS",name:"SliceFactor",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1011)':{tag:'(0019,"PHILIPS MR/PART",1011)',vr:"DS",name:"EchoTimes",vm:"1-n",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1015)':{tag:'(0019,"PHILIPS MR/PART",1015)',vr:"IS",name:"DynamicStudy",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1018)':{tag:'(0019,"PHILIPS MR/PART",1018)',vr:"DS",name:"HeartbeatInterval",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1019)':{tag:'(0019,"PHILIPS MR/PART",1019)',vr:"DS",name:"RepetitionTimeFFE",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",101a)':{tag:'(0019,"PHILIPS MR/PART",101a)',vr:"DS",name:"FFEFlipAngle",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",101b)':{tag:'(0019,"PHILIPS MR/PART",101b)',vr:"IS",name:"NumberOfScans",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1021)':{tag:'(0019,"PHILIPS MR/PART",1021)',vr:"DS",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1022)':{tag:'(0019,"PHILIPS MR/PART",1022)',vr:"DS",name:"DynamicScanTimeBegin",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1024)':{tag:'(0019,"PHILIPS MR/PART",1024)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1064)':{tag:'(0019,"PHILIPS MR/PART",1064)',vr:"DS",name:"RepetitionTimeSE",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1065)':{tag:'(0019,"PHILIPS MR/PART",1065)',vr:"DS",name:"RepetitionTimeIR",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1069)':{tag:'(0019,"PHILIPS MR/PART",1069)',vr:"IS",name:"NumberOfPhases",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",106a)':{tag:'(0019,"PHILIPS MR/PART",106a)',vr:"IS",name:"CardiacFrequency",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",106b)':{tag:'(0019,"PHILIPS MR/PART",106b)',vr:"DS",name:"InversionDelay",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",106c)':{tag:'(0019,"PHILIPS MR/PART",106c)',vr:"DS",name:"GateDelay",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",106d)':{tag:'(0019,"PHILIPS MR/PART",106d)',vr:"DS",name:"GateWidth",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",106e)':{tag:'(0019,"PHILIPS MR/PART",106e)',vr:"DS",name:"TriggerDelayTime",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1080)':{tag:'(0019,"PHILIPS MR/PART",1080)',vr:"IS",name:"NumberOfChemicalShifts",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1081)':{tag:'(0019,"PHILIPS MR/PART",1081)',vr:"DS",name:"ChemicalShift",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1084)':{tag:'(0019,"PHILIPS MR/PART",1084)',vr:"IS",name:"NumberOfRows",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1085)':{tag:'(0019,"PHILIPS MR/PART",1085)',vr:"IS",name:"NumberOfSamples",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1094)':{tag:'(0019,"PHILIPS MR/PART",1094)',vr:"LO",name:"MagnetizationTransferContrast",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1095)':{tag:'(0019,"PHILIPS MR/PART",1095)',vr:"LO",name:"SpectralPresaturationWithInversionRecovery",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1096)':{tag:'(0019,"PHILIPS MR/PART",1096)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1097)':{tag:'(0019,"PHILIPS MR/PART",1097)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10a0)':{tag:'(0019,"PHILIPS MR/PART",10a0)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10a1)':{tag:'(0019,"PHILIPS MR/PART",10a1)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10a3)':{tag:'(0019,"PHILIPS MR/PART",10a3)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10a4)':{tag:'(0019,"PHILIPS MR/PART",10a4)',vr:"CS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10c8)':{tag:'(0019,"PHILIPS MR/PART",10c8)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10c9)':{tag:'(0019,"PHILIPS MR/PART",10c9)',vr:"IS",name:"FoldoverDirectionTransverse",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10ca)':{tag:'(0019,"PHILIPS MR/PART",10ca)',vr:"IS",name:"FoldoverDirectionSagittal",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10cb)':{tag:'(0019,"PHILIPS MR/PART",10cb)',vr:"IS",name:"FoldoverDirectionCoronal",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10cc)':{tag:'(0019,"PHILIPS MR/PART",10cc)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10cd)':{tag:'(0019,"PHILIPS MR/PART",10cd)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10ce)':{tag:'(0019,"PHILIPS MR/PART",10ce)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10cf)':{tag:'(0019,"PHILIPS MR/PART",10cf)',vr:"IS",name:"NumberOfEchoes",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10d0)':{tag:'(0019,"PHILIPS MR/PART",10d0)',vr:"IS",name:"ScanResolution",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10d2)':{tag:'(0019,"PHILIPS MR/PART",10d2)',vr:"LO",name:"WaterFatShift",vm:"2",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10d4)':{tag:'(0019,"PHILIPS MR/PART",10d4)',vr:"IS",name:"ArtifactReduction",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10d5)':{tag:'(0019,"PHILIPS MR/PART",10d5)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10d6)':{tag:'(0019,"PHILIPS MR/PART",10d6)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10d7)':{tag:'(0019,"PHILIPS MR/PART",10d7)',vr:"DS",name:"ScanPercentage",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10d8)':{tag:'(0019,"PHILIPS MR/PART",10d8)',vr:"IS",name:"Halfscan",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10d9)':{tag:'(0019,"PHILIPS MR/PART",10d9)',vr:"IS",name:"EPIFactor",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10da)':{tag:'(0019,"PHILIPS MR/PART",10da)',vr:"IS",name:"TurboFactor",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10db)':{tag:'(0019,"PHILIPS MR/PART",10db)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10e0)':{tag:'(0019,"PHILIPS MR/PART",10e0)',vr:"IS",name:"PercentageOfScanCompleted",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10e1)':{tag:'(0019,"PHILIPS MR/PART",10e1)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1100)':{tag:'(0019,"PHILIPS MR/PART",1100)',vr:"IS",name:"NumberOfStacks",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1101)':{tag:'(0019,"PHILIPS MR/PART",1101)',vr:"IS",name:"StackType",vm:"1-n",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1102)':{tag:'(0019,"PHILIPS MR/PART",1102)',vr:"IS",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",110b)':{tag:'(0019,"PHILIPS MR/PART",110b)',vr:"DS",name:"LROffcenter",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",110c)':{tag:'(0019,"PHILIPS MR/PART",110c)',vr:"DS",name:"CCOffcenter",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",110d)':{tag:'(0019,"PHILIPS MR/PART",110d)',vr:"DS",name:"APOffcenter",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1145)':{tag:'(0019,"PHILIPS MR/PART",1145)',vr:"IS",name:"ReconstructionResolution",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",11fc)':{tag:'(0019,"PHILIPS MR/PART",11fc)',vr:"IS",name:"ResonanceFrequency",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",12c0)':{tag:'(0019,"PHILIPS MR/PART",12c0)',vr:"DS",name:"TriggerDelayTimes",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",12e0)':{tag:'(0019,"PHILIPS MR/PART",12e0)',vr:"IS",name:"PrepulseType",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",12e1)':{tag:'(0019,"PHILIPS MR/PART",12e1)',vr:"DS",name:"PrepulseDelay",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",12e3)':{tag:'(0019,"PHILIPS MR/PART",12e3)',vr:"DS",name:"PhaseContrastVelocity",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1000)':{tag:'(0021,"PHILIPS MR/PART",1000)',vr:"IS",name:"ReconstructionNumber",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1010)':{tag:'(0021,"PHILIPS MR/PART",1010)',vr:"IS",name:"ImageType",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1020)':{tag:'(0021,"PHILIPS MR/PART",1020)',vr:"IS",name:"SliceNumber",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1030)':{tag:'(0021,"PHILIPS MR/PART",1030)',vr:"IS",name:"EchoNumber",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1031)':{tag:'(0021,"PHILIPS MR/PART",1031)',vr:"DS",name:"PatientReferenceID",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1035)':{tag:'(0021,"PHILIPS MR/PART",1035)',vr:"IS",name:"ChemicalShiftNumber",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1040)':{tag:'(0021,"PHILIPS MR/PART",1040)',vr:"IS",name:"PhaseNumber",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1050)':{tag:'(0021,"PHILIPS MR/PART",1050)',vr:"IS",name:"DynamicScanNumber",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1060)':{tag:'(0021,"PHILIPS MR/PART",1060)',vr:"IS",name:"NumberOfRowsInObject",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1061)':{tag:'(0021,"PHILIPS MR/PART",1061)',vr:"IS",name:"RowNumber",vm:"1-n",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1062)':{tag:'(0021,"PHILIPS MR/PART",1062)',vr:"IS",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1100)':{tag:'(0021,"PHILIPS MR/PART",1100)',vr:"DA",name:"ScanDate",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1110)':{tag:'(0021,"PHILIPS MR/PART",1110)',vr:"TM",name:"ScanTime",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1221)':{tag:'(0021,"PHILIPS MR/PART",1221)',vr:"IS",name:"SliceGap",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/PART",00)':{tag:'(0029,"PHILIPS MR/PART",00)',vr:"DS",name:"Unknown",vm:"2",version:"PrivateTag"},'(0029,"PHILIPS MR/PART",04)':{tag:'(0029,"PHILIPS MR/PART",04)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/PART",10)':{tag:'(0029,"PHILIPS MR/PART",10)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/PART",11)':{tag:'(0029,"PHILIPS MR/PART",11)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/PART",20)':{tag:'(0029,"PHILIPS MR/PART",20)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/PART",31)':{tag:'(0029,"PHILIPS MR/PART",31)',vr:"DS",name:"Unknown",vm:"2",version:"PrivateTag"},'(0029,"PHILIPS MR/PART",32)':{tag:'(0029,"PHILIPS MR/PART",32)',vr:"DS",name:"Unknown",vm:"2",version:"PrivateTag"},'(0029,"PHILIPS MR/PART",c3)':{tag:'(0029,"PHILIPS MR/PART",c3)',vr:"IS",name:"ScanResolution",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/PART",c4)':{tag:'(0029,"PHILIPS MR/PART",c4)',vr:"IS",name:"FieldOfView",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/PART",d5)':{tag:'(0029,"PHILIPS MR/PART",d5)',vr:"LT",name:"SliceThickness",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS-MR-1",11)':{tag:'(0019,"PHILIPS-MR-1",11)',vr:"IS",name:"ChemicalShiftNumber",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS-MR-1",12)':{tag:'(0019,"PHILIPS-MR-1",12)',vr:"IS",name:"PhaseNumber",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS-MR-1",01)':{tag:'(0021,"PHILIPS-MR-1",01)',vr:"IS",name:"ReconstructionNumber",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS-MR-1",02)':{tag:'(0021,"PHILIPS-MR-1",02)',vr:"IS",name:"SliceNumber",vm:"1",version:"PrivateTag"},'(7001,"Picker NM Private Group",01)':{tag:'(7001,"Picker NM Private Group",01)',vr:"UI",name:"Unknown",vm:"1",version:"PrivateTag"},'(7001,"Picker NM Private Group",02)':{tag:'(7001,"Picker NM Private Group",02)',vr:"OB",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CM VA0 ACQU",10)':{tag:'(0019,"SIEMENS CM VA0 ACQU",10)',vr:"LT",name:"ParameterFileName",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CM VA0 ACQU",11)':{tag:'(0019,"SIEMENS CM VA0 ACQU",11)',vr:"LO",name:"SequenceFileName",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CM VA0 ACQU",12)':{tag:'(0019,"SIEMENS CM VA0 ACQU",12)',vr:"LT",name:"SequenceFileOwner",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CM VA0 ACQU",13)':{tag:'(0019,"SIEMENS CM VA0 ACQU",13)',vr:"LT",name:"SequenceDescription",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CM VA0 ACQU",14)':{tag:'(0019,"SIEMENS CM VA0 ACQU",14)',vr:"LT",name:"EPIFileName",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 CMS",00)':{tag:'(0009,"SIEMENS CM VA0 CMS",00)',vr:"DS",name:"NumberOfMeasurements",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 CMS",10)':{tag:'(0009,"SIEMENS CM VA0 CMS",10)',vr:"LT",name:"StorageMode",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 CMS",12)':{tag:'(0009,"SIEMENS CM VA0 CMS",12)',vr:"UL",name:"EvaluationMaskImage",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 CMS",26)':{tag:'(0009,"SIEMENS CM VA0 CMS",26)',vr:"DA",name:"LastMoveDate",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 CMS",27)':{tag:'(0009,"SIEMENS CM VA0 CMS",27)',vr:"TM",name:"LastMoveTime",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS CM VA0 CMS",0a)':{tag:'(0011,"SIEMENS CM VA0 CMS",0a)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS CM VA0 CMS",10)':{tag:'(0011,"SIEMENS CM VA0 CMS",10)',vr:"DA",name:"RegistrationDate",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS CM VA0 CMS",11)':{tag:'(0011,"SIEMENS CM VA0 CMS",11)',vr:"TM",name:"RegistrationTime",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS CM VA0 CMS",22)':{tag:'(0011,"SIEMENS CM VA0 CMS",22)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS CM VA0 CMS",23)':{tag:'(0011,"SIEMENS CM VA0 CMS",23)',vr:"DS",name:"UsedPatientWeight",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS CM VA0 CMS",40)':{tag:'(0011,"SIEMENS CM VA0 CMS",40)',vr:"IS",name:"OrganCode",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",00)':{tag:'(0013,"SIEMENS CM VA0 CMS",00)',vr:"LT",name:"ModifyingPhysician",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",10)':{tag:'(0013,"SIEMENS CM VA0 CMS",10)',vr:"DA",name:"ModificationDate",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",12)':{tag:'(0013,"SIEMENS CM VA0 CMS",12)',vr:"TM",name:"ModificationTime",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",20)':{tag:'(0013,"SIEMENS CM VA0 CMS",20)',vr:"LO",name:"PatientName",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",22)':{tag:'(0013,"SIEMENS CM VA0 CMS",22)',vr:"LO",name:"PatientId",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",30)':{tag:'(0013,"SIEMENS CM VA0 CMS",30)',vr:"DA",name:"PatientBirthdate",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",31)':{tag:'(0013,"SIEMENS CM VA0 CMS",31)',vr:"DS",name:"PatientWeight",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",32)':{tag:'(0013,"SIEMENS CM VA0 CMS",32)',vr:"LT",name:"PatientsMaidenName",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",33)':{tag:'(0013,"SIEMENS CM VA0 CMS",33)',vr:"LT",name:"ReferringPhysician",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",34)':{tag:'(0013,"SIEMENS CM VA0 CMS",34)',vr:"LT",name:"AdmittingDiagnosis",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",35)':{tag:'(0013,"SIEMENS CM VA0 CMS",35)',vr:"LO",name:"PatientSex",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",40)':{tag:'(0013,"SIEMENS CM VA0 CMS",40)',vr:"LO",name:"ProcedureDescription",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",42)':{tag:'(0013,"SIEMENS CM VA0 CMS",42)',vr:"LO",name:"RestDirection",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",44)':{tag:'(0013,"SIEMENS CM VA0 CMS",44)',vr:"LO",name:"PatientPosition",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",46)':{tag:'(0013,"SIEMENS CM VA0 CMS",46)',vr:"LT",name:"ViewDirection",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",50)':{tag:'(0013,"SIEMENS CM VA0 CMS",50)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",51)':{tag:'(0013,"SIEMENS CM VA0 CMS",51)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",52)':{tag:'(0013,"SIEMENS CM VA0 CMS",52)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",53)':{tag:'(0013,"SIEMENS CM VA0 CMS",53)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",54)':{tag:'(0013,"SIEMENS CM VA0 CMS",54)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",55)':{tag:'(0013,"SIEMENS CM VA0 CMS",55)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",56)':{tag:'(0013,"SIEMENS CM VA0 CMS",56)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CM VA0 CMS",10)':{tag:'(0019,"SIEMENS CM VA0 CMS",10)',vr:"DS",name:"NetFrequency",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CM VA0 CMS",20)':{tag:'(0019,"SIEMENS CM VA0 CMS",20)',vr:"LT",name:"MeasurementMode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CM VA0 CMS",30)':{tag:'(0019,"SIEMENS CM VA0 CMS",30)',vr:"LT",name:"CalculationMode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CM VA0 CMS",50)':{tag:'(0019,"SIEMENS CM VA0 CMS",50)',vr:"IS",name:"NoiseLevel",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CM VA0 CMS",60)':{tag:'(0019,"SIEMENS CM VA0 CMS",60)',vr:"IS",name:"NumberOfDataBytes",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",20)':{tag:'(0021,"SIEMENS CM VA0 CMS",20)',vr:"DS",name:"FoV",vm:"2",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",22)':{tag:'(0021,"SIEMENS CM VA0 CMS",22)',vr:"DS",name:"ImageMagnificationFactor",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",24)':{tag:'(0021,"SIEMENS CM VA0 CMS",24)',vr:"DS",name:"ImageScrollOffset",vm:"2",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",26)':{tag:'(0021,"SIEMENS CM VA0 CMS",26)',vr:"IS",name:"ImagePixelOffset",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",30)':{tag:'(0021,"SIEMENS CM VA0 CMS",30)',vr:"LT",name:"ViewDirection",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",32)':{tag:'(0021,"SIEMENS CM VA0 CMS",32)',vr:"CS",name:"PatientRestDirection",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",60)':{tag:'(0021,"SIEMENS CM VA0 CMS",60)',vr:"DS",name:"ImagePosition",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",61)':{tag:'(0021,"SIEMENS CM VA0 CMS",61)',vr:"DS",name:"ImageNormal",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",63)':{tag:'(0021,"SIEMENS CM VA0 CMS",63)',vr:"DS",name:"ImageDistance",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",65)':{tag:'(0021,"SIEMENS CM VA0 CMS",65)',vr:"US",name:"ImagePositioningHistoryMask",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",6a)':{tag:'(0021,"SIEMENS CM VA0 CMS",6a)',vr:"DS",name:"ImageRow",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",6b)':{tag:'(0021,"SIEMENS CM VA0 CMS",6b)',vr:"DS",name:"ImageColumn",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",70)':{tag:'(0021,"SIEMENS CM VA0 CMS",70)',vr:"LT",name:"PatientOrientationSet1",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",71)':{tag:'(0021,"SIEMENS CM VA0 CMS",71)',vr:"LT",name:"PatientOrientationSet2",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",80)':{tag:'(0021,"SIEMENS CM VA0 CMS",80)',vr:"LT",name:"StudyName",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",82)':{tag:'(0021,"SIEMENS CM VA0 CMS",82)',vr:"LT",name:"StudyType",vm:"3",version:"PrivateTag"},'(0029,"SIEMENS CM VA0 CMS",10)':{tag:'(0029,"SIEMENS CM VA0 CMS",10)',vr:"LT",name:"WindowStyle",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CM VA0 CMS",11)':{tag:'(0029,"SIEMENS CM VA0 CMS",11)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CM VA0 CMS",13)':{tag:'(0029,"SIEMENS CM VA0 CMS",13)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CM VA0 CMS",20)':{tag:'(0029,"SIEMENS CM VA0 CMS",20)',vr:"LT",name:"PixelQualityCode",vm:"3",version:"PrivateTag"},'(0029,"SIEMENS CM VA0 CMS",22)':{tag:'(0029,"SIEMENS CM VA0 CMS",22)',vr:"IS",name:"PixelQualityValue",vm:"3",version:"PrivateTag"},'(0029,"SIEMENS CM VA0 CMS",50)':{tag:'(0029,"SIEMENS CM VA0 CMS",50)',vr:"LT",name:"ArchiveCode",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CM VA0 CMS",51)':{tag:'(0029,"SIEMENS CM VA0 CMS",51)',vr:"LT",name:"ExposureCode",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CM VA0 CMS",52)':{tag:'(0029,"SIEMENS CM VA0 CMS",52)',vr:"LT",name:"SortCode",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CM VA0 CMS",53)':{tag:'(0029,"SIEMENS CM VA0 CMS",53)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CM VA0 CMS",60)':{tag:'(0029,"SIEMENS CM VA0 CMS",60)',vr:"LT",name:"Splash",vm:"1",version:"PrivateTag"},'(0051,"SIEMENS CM VA0 CMS",10)':{tag:'(0051,"SIEMENS CM VA0 CMS",10)',vr:"LT",name:"ImageText",vm:"1-n",version:"PrivateTag"},'(6021,"SIEMENS CM VA0 CMS",00)':{tag:'(6021,"SIEMENS CM VA0 CMS",00)',vr:"LT",name:"ImageGraphicsFormatCode",vm:"1",version:"PrivateTag"},'(6021,"SIEMENS CM VA0 CMS",10)':{tag:'(6021,"SIEMENS CM VA0 CMS",10)',vr:"LT",name:"ImageGraphics",vm:"1",version:"PrivateTag"},'(7fe1,"SIEMENS CM VA0 CMS",00)':{tag:'(7fe1,"SIEMENS CM VA0 CMS",00)',vr:"OB",name:"BinaryData",vm:"1-n",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 LAB",10)':{tag:'(0009,"SIEMENS CM VA0 LAB",10)',vr:"LT",name:"GeneratorIdentificationLabel",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 LAB",11)':{tag:'(0009,"SIEMENS CM VA0 LAB",11)',vr:"LT",name:"GantryIdentificationLabel",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 LAB",12)':{tag:'(0009,"SIEMENS CM VA0 LAB",12)',vr:"LT",name:"X-RayTubeIdentificationLabel",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 LAB",13)':{tag:'(0009,"SIEMENS CM VA0 LAB",13)',vr:"LT",name:"DetectorIdentificationLabel",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 LAB",14)':{tag:'(0009,"SIEMENS CM VA0 LAB",14)',vr:"LT",name:"DASIdentificationLabel",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 LAB",15)':{tag:'(0009,"SIEMENS CM VA0 LAB",15)',vr:"LT",name:"SMIIdentificationLabel",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 LAB",16)':{tag:'(0009,"SIEMENS CM VA0 LAB",16)',vr:"LT",name:"CPUIdentificationLabel",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 LAB",20)':{tag:'(0009,"SIEMENS CM VA0 LAB",20)',vr:"LT",name:"HeaderVersion",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CSA HEADER",08)':{tag:'(0029,"SIEMENS CSA HEADER",08)',vr:"CS",name:"CSAImageHeaderType",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CSA HEADER",09)':{tag:'(0029,"SIEMENS CSA HEADER",09)',vr:"LO",name:"CSAImageHeaderVersion",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CSA HEADER",10)':{tag:'(0029,"SIEMENS CSA HEADER",10)',vr:"OB",name:"CSAImageHeaderInfo",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CSA HEADER",18)':{tag:'(0029,"SIEMENS CSA HEADER",18)',vr:"CS",name:"CSASeriesHeaderType",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CSA HEADER",19)':{tag:'(0029,"SIEMENS CSA HEADER",19)',vr:"LO",name:"CSASeriesHeaderVersion",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CSA HEADER",20)':{tag:'(0029,"SIEMENS CSA HEADER",20)',vr:"OB",name:"CSASeriesHeaderInfo",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CSA NON-IMAGE",08)':{tag:'(0029,"SIEMENS CSA NON-IMAGE",08)',vr:"CS",name:"CSADataType",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CSA NON-IMAGE",09)':{tag:'(0029,"SIEMENS CSA NON-IMAGE",09)',vr:"LO",name:"CSADataVersion",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CSA NON-IMAGE",10)':{tag:'(0029,"SIEMENS CSA NON-IMAGE",10)',vr:"OB",name:"CSADataInfo",vm:"1",version:"PrivateTag"},'(7FE1,"SIEMENS CSA NON-IMAGE",10)':{tag:'(7FE1,"SIEMENS CSA NON-IMAGE",10)',vr:"OB",name:"CSAData",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",10)':{tag:'(0019,"SIEMENS CT VA0 COAD",10)',vr:"DS",name:"DistanceSourceToSourceSideCollimator",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",11)':{tag:'(0019,"SIEMENS CT VA0 COAD",11)',vr:"DS",name:"DistanceSourceToDetectorSideCollimator",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",20)':{tag:'(0019,"SIEMENS CT VA0 COAD",20)',vr:"IS",name:"NumberOfPossibleChannels",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",21)':{tag:'(0019,"SIEMENS CT VA0 COAD",21)',vr:"IS",name:"MeanChannelNumber",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",22)':{tag:'(0019,"SIEMENS CT VA0 COAD",22)',vr:"DS",name:"DetectorSpacing",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",23)':{tag:'(0019,"SIEMENS CT VA0 COAD",23)',vr:"DS",name:"DetectorCenter",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",24)':{tag:'(0019,"SIEMENS CT VA0 COAD",24)',vr:"DS",name:"ReadingIntegrationTime",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",50)':{tag:'(0019,"SIEMENS CT VA0 COAD",50)',vr:"DS",name:"DetectorAlignment",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",52)':{tag:'(0019,"SIEMENS CT VA0 COAD",52)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",54)':{tag:'(0019,"SIEMENS CT VA0 COAD",54)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",60)':{tag:'(0019,"SIEMENS CT VA0 COAD",60)',vr:"DS",name:"FocusAlignment",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",65)':{tag:'(0019,"SIEMENS CT VA0 COAD",65)',vr:"UL",name:"FocalSpotDeflectionAmplitude",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",66)':{tag:'(0019,"SIEMENS CT VA0 COAD",66)',vr:"UL",name:"FocalSpotDeflectionPhase",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",67)':{tag:'(0019,"SIEMENS CT VA0 COAD",67)',vr:"UL",name:"FocalSpotDeflectionOffset",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",70)':{tag:'(0019,"SIEMENS CT VA0 COAD",70)',vr:"DS",name:"WaterScalingFactor",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",71)':{tag:'(0019,"SIEMENS CT VA0 COAD",71)',vr:"DS",name:"InterpolationFactor",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",80)':{tag:'(0019,"SIEMENS CT VA0 COAD",80)',vr:"LT",name:"PatientRegion",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",82)':{tag:'(0019,"SIEMENS CT VA0 COAD",82)',vr:"LT",name:"PatientPhaseOfLife",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",90)':{tag:'(0019,"SIEMENS CT VA0 COAD",90)',vr:"DS",name:"OsteoOffset",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",92)':{tag:'(0019,"SIEMENS CT VA0 COAD",92)',vr:"DS",name:"OsteoRegressionLineSlope",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",93)':{tag:'(0019,"SIEMENS CT VA0 COAD",93)',vr:"DS",name:"OsteoRegressionLineIntercept",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",94)':{tag:'(0019,"SIEMENS CT VA0 COAD",94)',vr:"DS",name:"OsteoStandardizationCode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",96)':{tag:'(0019,"SIEMENS CT VA0 COAD",96)',vr:"IS",name:"OsteoPhantomNumber",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",A3)':{tag:'(0019,"SIEMENS CT VA0 COAD",A3)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",A4)':{tag:'(0019,"SIEMENS CT VA0 COAD",A4)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",A5)':{tag:'(0019,"SIEMENS CT VA0 COAD",A5)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",A6)':{tag:'(0019,"SIEMENS CT VA0 COAD",A6)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",A7)':{tag:'(0019,"SIEMENS CT VA0 COAD",A7)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",A8)':{tag:'(0019,"SIEMENS CT VA0 COAD",A8)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",A9)':{tag:'(0019,"SIEMENS CT VA0 COAD",A9)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",AA)':{tag:'(0019,"SIEMENS CT VA0 COAD",AA)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",AB)':{tag:'(0019,"SIEMENS CT VA0 COAD",AB)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",AC)':{tag:'(0019,"SIEMENS CT VA0 COAD",AC)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",AD)':{tag:'(0019,"SIEMENS CT VA0 COAD",AD)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",AE)':{tag:'(0019,"SIEMENS CT VA0 COAD",AE)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",AF)':{tag:'(0019,"SIEMENS CT VA0 COAD",AF)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",B0)':{tag:'(0019,"SIEMENS CT VA0 COAD",B0)',vr:"DS",name:"FeedPerRotation",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",BD)':{tag:'(0019,"SIEMENS CT VA0 COAD",BD)',vr:"IS",name:"PulmoTriggerLevel",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",BE)':{tag:'(0019,"SIEMENS CT VA0 COAD",BE)',vr:"DS",name:"ExpiratoricReserveVolume",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",BF)':{tag:'(0019,"SIEMENS CT VA0 COAD",BF)',vr:"DS",name:"VitalCapacity",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",C0)':{tag:'(0019,"SIEMENS CT VA0 COAD",C0)',vr:"DS",name:"PulmoWater",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",C1)':{tag:'(0019,"SIEMENS CT VA0 COAD",C1)',vr:"DS",name:"PulmoAir",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",C2)':{tag:'(0019,"SIEMENS CT VA0 COAD",C2)',vr:"DA",name:"PulmoDate",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",C3)':{tag:'(0019,"SIEMENS CT VA0 COAD",C3)',vr:"TM",name:"PulmoTime",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",10)':{tag:'(0019,"SIEMENS CT VA0 GEN",10)',vr:"DS",name:"SourceSideCollimatorAperture",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",11)':{tag:'(0019,"SIEMENS CT VA0 GEN",11)',vr:"DS",name:"DetectorSideCollimatorAperture",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",20)':{tag:'(0019,"SIEMENS CT VA0 GEN",20)',vr:"DS",name:"ExposureTime",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",21)':{tag:'(0019,"SIEMENS CT VA0 GEN",21)',vr:"DS",name:"ExposureCurrent",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",25)':{tag:'(0019,"SIEMENS CT VA0 GEN",25)',vr:"DS",name:"KVPGeneratorPowerCurrent",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",26)':{tag:'(0019,"SIEMENS CT VA0 GEN",26)',vr:"DS",name:"GeneratorVoltage",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",40)':{tag:'(0019,"SIEMENS CT VA0 GEN",40)',vr:"UL",name:"MasterControlMask",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",42)':{tag:'(0019,"SIEMENS CT VA0 GEN",42)',vr:"US",name:"ProcessingMask",vm:"5",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",44)':{tag:'(0019,"SIEMENS CT VA0 GEN",44)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",45)':{tag:'(0019,"SIEMENS CT VA0 GEN",45)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",62)':{tag:'(0019,"SIEMENS CT VA0 GEN",62)',vr:"IS",name:"NumberOfVirtuellChannels",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",70)':{tag:'(0019,"SIEMENS CT VA0 GEN",70)',vr:"IS",name:"NumberOfReadings",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",71)':{tag:'(0019,"SIEMENS CT VA0 GEN",71)',vr:"LT",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",74)':{tag:'(0019,"SIEMENS CT VA0 GEN",74)',vr:"IS",name:"NumberOfProjections",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",75)':{tag:'(0019,"SIEMENS CT VA0 GEN",75)',vr:"IS",name:"NumberOfBytes",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",80)':{tag:'(0019,"SIEMENS CT VA0 GEN",80)',vr:"LT",name:"ReconstructionAlgorithmSet",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",81)':{tag:'(0019,"SIEMENS CT VA0 GEN",81)',vr:"LT",name:"ReconstructionAlgorithmIndex",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",82)':{tag:'(0019,"SIEMENS CT VA0 GEN",82)',vr:"LT",name:"RegenerationSoftwareVersion",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",88)':{tag:'(0019,"SIEMENS CT VA0 GEN",88)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",10)':{tag:'(0021,"SIEMENS CT VA0 GEN",10)',vr:"IS",name:"RotationAngle",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",11)':{tag:'(0021,"SIEMENS CT VA0 GEN",11)',vr:"IS",name:"StartAngle",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",20)':{tag:'(0021,"SIEMENS CT VA0 GEN",20)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",30)':{tag:'(0021,"SIEMENS CT VA0 GEN",30)',vr:"IS",name:"TopogramTubePosition",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",32)':{tag:'(0021,"SIEMENS CT VA0 GEN",32)',vr:"DS",name:"LengthOfTopogram",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",34)':{tag:'(0021,"SIEMENS CT VA0 GEN",34)',vr:"DS",name:"TopogramCorrectionFactor",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",36)':{tag:'(0021,"SIEMENS CT VA0 GEN",36)',vr:"DS",name:"MaximumTablePosition",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",40)':{tag:'(0021,"SIEMENS CT VA0 GEN",40)',vr:"IS",name:"TableMoveDirectionCode",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",45)':{tag:'(0021,"SIEMENS CT VA0 GEN",45)',vr:"IS",name:"VOIStartRow",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",46)':{tag:'(0021,"SIEMENS CT VA0 GEN",46)',vr:"IS",name:"VOIStopRow",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",47)':{tag:'(0021,"SIEMENS CT VA0 GEN",47)',vr:"IS",name:"VOIStartColumn",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",48)':{tag:'(0021,"SIEMENS CT VA0 GEN",48)',vr:"IS",name:"VOIStopColumn",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",49)':{tag:'(0021,"SIEMENS CT VA0 GEN",49)',vr:"IS",name:"VOIStartSlice",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",4a)':{tag:'(0021,"SIEMENS CT VA0 GEN",4a)',vr:"IS",name:"VOIStopSlice",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",50)':{tag:'(0021,"SIEMENS CT VA0 GEN",50)',vr:"IS",name:"VectorStartRow",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",51)':{tag:'(0021,"SIEMENS CT VA0 GEN",51)',vr:"IS",name:"VectorRowStep",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",52)':{tag:'(0021,"SIEMENS CT VA0 GEN",52)',vr:"IS",name:"VectorStartColumn",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",53)':{tag:'(0021,"SIEMENS CT VA0 GEN",53)',vr:"IS",name:"VectorColumnStep",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",60)':{tag:'(0021,"SIEMENS CT VA0 GEN",60)',vr:"IS",name:"RangeTypeCode",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",62)':{tag:'(0021,"SIEMENS CT VA0 GEN",62)',vr:"IS",name:"ReferenceTypeCode",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",70)':{tag:'(0021,"SIEMENS CT VA0 GEN",70)',vr:"DS",name:"ObjectOrientation",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",72)':{tag:'(0021,"SIEMENS CT VA0 GEN",72)',vr:"DS",name:"LightOrientation",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",75)':{tag:'(0021,"SIEMENS CT VA0 GEN",75)',vr:"DS",name:"LightBrightness",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",76)':{tag:'(0021,"SIEMENS CT VA0 GEN",76)',vr:"DS",name:"LightContrast",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",7a)':{tag:'(0021,"SIEMENS CT VA0 GEN",7a)',vr:"IS",name:"OverlayThreshold",vm:"2",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",7b)':{tag:'(0021,"SIEMENS CT VA0 GEN",7b)',vr:"IS",name:"SurfaceThreshold",vm:"2",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",7c)':{tag:'(0021,"SIEMENS CT VA0 GEN",7c)',vr:"IS",name:"GreyScaleThreshold",vm:"2",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",a0)':{tag:'(0021,"SIEMENS CT VA0 GEN",a0)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",a2)':{tag:'(0021,"SIEMENS CT VA0 GEN",a2)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",a7)':{tag:'(0021,"SIEMENS CT VA0 GEN",a7)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CT VA0 IDE",10)':{tag:'(0009,"SIEMENS CT VA0 IDE",10)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CT VA0 IDE",30)':{tag:'(0009,"SIEMENS CT VA0 IDE",30)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CT VA0 IDE",31)':{tag:'(0009,"SIEMENS CT VA0 IDE",31)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CT VA0 IDE",32)':{tag:'(0009,"SIEMENS CT VA0 IDE",32)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CT VA0 IDE",34)':{tag:'(0009,"SIEMENS CT VA0 IDE",34)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CT VA0 IDE",40)':{tag:'(0009,"SIEMENS CT VA0 IDE",40)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CT VA0 IDE",42)':{tag:'(0009,"SIEMENS CT VA0 IDE",42)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CT VA0 IDE",50)':{tag:'(0009,"SIEMENS CT VA0 IDE",50)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CT VA0 IDE",51)':{tag:'(0009,"SIEMENS CT VA0 IDE",51)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CT VA0 ORI",20)':{tag:'(0009,"SIEMENS CT VA0 ORI",20)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CT VA0 ORI",30)':{tag:'(0009,"SIEMENS CT VA0 ORI",30)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(6021,"SIEMENS CT VA0 OST",00)':{tag:'(6021,"SIEMENS CT VA0 OST",00)',vr:"LT",name:"OsteoContourComment",vm:"1",version:"PrivateTag"},'(6021,"SIEMENS CT VA0 OST",10)':{tag:'(6021,"SIEMENS CT VA0 OST",10)',vr:"US",name:"OsteoContourBuffer",vm:"256",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 RAW",10)':{tag:'(0021,"SIEMENS CT VA0 RAW",10)',vr:"UL",name:"CreationMask",vm:"2",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 RAW",20)':{tag:'(0021,"SIEMENS CT VA0 RAW",20)',vr:"UL",name:"EvaluationMask",vm:"2",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 RAW",30)':{tag:'(0021,"SIEMENS CT VA0 RAW",30)',vr:"US",name:"ExtendedProcessingMask",vm:"7",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 RAW",40)':{tag:'(0021,"SIEMENS CT VA0 RAW",40)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 RAW",41)':{tag:'(0021,"SIEMENS CT VA0 RAW",41)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 RAW",42)':{tag:'(0021,"SIEMENS CT VA0 RAW",42)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 RAW",43)':{tag:'(0021,"SIEMENS CT VA0 RAW",43)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 RAW",44)':{tag:'(0021,"SIEMENS CT VA0 RAW",44)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 RAW",50)':{tag:'(0021,"SIEMENS CT VA0 RAW",50)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS DICOM",10)':{tag:'(0009,"SIEMENS DICOM",10)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS DICOM",12)':{tag:'(0009,"SIEMENS DICOM",12)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",10)':{tag:'(0019,"SIEMENS DLR.01",10)',vr:"LT",name:"MeasurementMode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",11)':{tag:'(0019,"SIEMENS DLR.01",11)',vr:"LT",name:"ImageType",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",15)':{tag:'(0019,"SIEMENS DLR.01",15)',vr:"LT",name:"SoftwareVersion",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",20)':{tag:'(0019,"SIEMENS DLR.01",20)',vr:"LT",name:"MPMCode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",21)':{tag:'(0019,"SIEMENS DLR.01",21)',vr:"LT",name:"Latitude",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",22)':{tag:'(0019,"SIEMENS DLR.01",22)',vr:"LT",name:"Sensitivity",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",23)':{tag:'(0019,"SIEMENS DLR.01",23)',vr:"LT",name:"EDR",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",24)':{tag:'(0019,"SIEMENS DLR.01",24)',vr:"LT",name:"LFix",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",25)':{tag:'(0019,"SIEMENS DLR.01",25)',vr:"LT",name:"SFix",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",26)':{tag:'(0019,"SIEMENS DLR.01",26)',vr:"LT",name:"PresetMode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",27)':{tag:'(0019,"SIEMENS DLR.01",27)',vr:"LT",name:"Region",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",28)':{tag:'(0019,"SIEMENS DLR.01",28)',vr:"LT",name:"Subregion",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",30)':{tag:'(0019,"SIEMENS DLR.01",30)',vr:"LT",name:"Orientation",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",31)':{tag:'(0019,"SIEMENS DLR.01",31)',vr:"LT",name:"MarkOnFilm",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",32)':{tag:'(0019,"SIEMENS DLR.01",32)',vr:"LT",name:"RotationOnDRC",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",40)':{tag:'(0019,"SIEMENS DLR.01",40)',vr:"LT",name:"ReaderType",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",41)':{tag:'(0019,"SIEMENS DLR.01",41)',vr:"LT",name:"SubModality",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",42)':{tag:'(0019,"SIEMENS DLR.01",42)',vr:"LT",name:"ReaderSerialNumber",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",50)':{tag:'(0019,"SIEMENS DLR.01",50)',vr:"LT",name:"CassetteScale",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",51)':{tag:'(0019,"SIEMENS DLR.01",51)',vr:"LT",name:"CassetteMatrix",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",52)':{tag:'(0019,"SIEMENS DLR.01",52)',vr:"LT",name:"CassetteSubmatrix",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",53)':{tag:'(0019,"SIEMENS DLR.01",53)',vr:"LT",name:"Barcode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",60)':{tag:'(0019,"SIEMENS DLR.01",60)',vr:"LT",name:"ContrastType",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",61)':{tag:'(0019,"SIEMENS DLR.01",61)',vr:"LT",name:"RotationAmount",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",62)':{tag:'(0019,"SIEMENS DLR.01",62)',vr:"LT",name:"RotationCenter",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",63)':{tag:'(0019,"SIEMENS DLR.01",63)',vr:"LT",name:"DensityShift",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",64)':{tag:'(0019,"SIEMENS DLR.01",64)',vr:"US",name:"FrequencyRank",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",65)':{tag:'(0019,"SIEMENS DLR.01",65)',vr:"LT",name:"FrequencyEnhancement",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",66)':{tag:'(0019,"SIEMENS DLR.01",66)',vr:"LT",name:"FrequencyType",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",67)':{tag:'(0019,"SIEMENS DLR.01",67)',vr:"LT",name:"KernelLength",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",68)':{tag:'(0019,"SIEMENS DLR.01",68)',vr:"UL",name:"KernelMode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",69)':{tag:'(0019,"SIEMENS DLR.01",69)',vr:"UL",name:"ConvolutionMode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",70)':{tag:'(0019,"SIEMENS DLR.01",70)',vr:"LT",name:"PLASource",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",71)':{tag:'(0019,"SIEMENS DLR.01",71)',vr:"LT",name:"PLADestination",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",75)':{tag:'(0019,"SIEMENS DLR.01",75)',vr:"LT",name:"UIDOriginalImage",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",76)':{tag:'(0019,"SIEMENS DLR.01",76)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",80)':{tag:'(0019,"SIEMENS DLR.01",80)',vr:"LT",name:"ReaderHeader",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",90)':{tag:'(0019,"SIEMENS DLR.01",90)',vr:"LT",name:"PLAOfSecondaryDestination",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",a0)':{tag:'(0019,"SIEMENS DLR.01",a0)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",a1)':{tag:'(0019,"SIEMENS DLR.01",a1)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0041,"SIEMENS DLR.01",10)':{tag:'(0041,"SIEMENS DLR.01",10)',vr:"US",name:"NumberOfHardcopies",vm:"1",version:"PrivateTag"},'(0041,"SIEMENS DLR.01",20)':{tag:'(0041,"SIEMENS DLR.01",20)',vr:"LT",name:"FilmFormat",vm:"1",version:"PrivateTag"},'(0041,"SIEMENS DLR.01",30)':{tag:'(0041,"SIEMENS DLR.01",30)',vr:"LT",name:"FilmSize",vm:"1",version:"PrivateTag"},'(0041,"SIEMENS DLR.01",31)':{tag:'(0041,"SIEMENS DLR.01",31)',vr:"LT",name:"FullFilmFormat",vm:"1",version:"PrivateTag"},'(0003,"SIEMENS ISI",08)':{tag:'(0003,"SIEMENS ISI",08)',vr:"US",name:"ISICommandField",vm:"1",version:"PrivateTag"},'(0003,"SIEMENS ISI",11)':{tag:'(0003,"SIEMENS ISI",11)',vr:"US",name:"AttachIDApplicationCode",vm:"1",version:"PrivateTag"},'(0003,"SIEMENS ISI",12)':{tag:'(0003,"SIEMENS ISI",12)',vr:"UL",name:"AttachIDMessageCount",vm:"1",version:"PrivateTag"},'(0003,"SIEMENS ISI",13)':{tag:'(0003,"SIEMENS ISI",13)',vr:"DA",name:"AttachIDDate",vm:"1",version:"PrivateTag"},'(0003,"SIEMENS ISI",14)':{tag:'(0003,"SIEMENS ISI",14)',vr:"TM",name:"AttachIDTime",vm:"1",version:"PrivateTag"},'(0003,"SIEMENS ISI",20)':{tag:'(0003,"SIEMENS ISI",20)',vr:"US",name:"MessageType",vm:"1",version:"PrivateTag"},'(0003,"SIEMENS ISI",30)':{tag:'(0003,"SIEMENS ISI",30)',vr:"DA",name:"MaxWaitingDate",vm:"1",version:"PrivateTag"},'(0003,"SIEMENS ISI",31)':{tag:'(0003,"SIEMENS ISI",31)',vr:"TM",name:"MaxWaitingTime",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS ISI",01)':{tag:'(0009,"SIEMENS ISI",01)',vr:"UN",name:"RISPatientInfoIMGEF",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",03)':{tag:'(0011,"SIEMENS ISI",03)',vr:"LT",name:"PatientUID",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",04)':{tag:'(0011,"SIEMENS ISI",04)',vr:"LT",name:"PatientID",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",0a)':{tag:'(0011,"SIEMENS ISI",0a)',vr:"LT",name:"CaseID",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",22)':{tag:'(0011,"SIEMENS ISI",22)',vr:"LT",name:"RequestID",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",23)':{tag:'(0011,"SIEMENS ISI",23)',vr:"LT",name:"ExaminationUID",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",a1)':{tag:'(0011,"SIEMENS ISI",a1)',vr:"DA",name:"PatientRegistrationDate",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",a2)':{tag:'(0011,"SIEMENS ISI",a2)',vr:"TM",name:"PatientRegistrationTime",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",b0)':{tag:'(0011,"SIEMENS ISI",b0)',vr:"LT",name:"PatientLastName",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",b2)':{tag:'(0011,"SIEMENS ISI",b2)',vr:"LT",name:"PatientFirstName",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",b4)':{tag:'(0011,"SIEMENS ISI",b4)',vr:"LT",name:"PatientHospitalStatus",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",bc)':{tag:'(0011,"SIEMENS ISI",bc)',vr:"TM",name:"CurrentLocationTime",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",c0)':{tag:'(0011,"SIEMENS ISI",c0)',vr:"LT",name:"PatientInsuranceStatus",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",d0)':{tag:'(0011,"SIEMENS ISI",d0)',vr:"LT",name:"PatientBillingType",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",d2)':{tag:'(0011,"SIEMENS ISI",d2)',vr:"LT",name:"PatientBillingAddress",vm:"1",version:"PrivateTag"},'(0031,"SIEMENS ISI",12)':{tag:'(0031,"SIEMENS ISI",12)',vr:"LT",name:"ExaminationReason",vm:"1",version:"PrivateTag"},'(0031,"SIEMENS ISI",30)':{tag:'(0031,"SIEMENS ISI",30)',vr:"DA",name:"RequestedDate",vm:"1",version:"PrivateTag"},'(0031,"SIEMENS ISI",32)':{tag:'(0031,"SIEMENS ISI",32)',vr:"TM",name:"WorklistRequestStartTime",vm:"1",version:"PrivateTag"},'(0031,"SIEMENS ISI",33)':{tag:'(0031,"SIEMENS ISI",33)',vr:"TM",name:"WorklistRequestEndTime",vm:"1",version:"PrivateTag"},'(0031,"SIEMENS ISI",4a)':{tag:'(0031,"SIEMENS ISI",4a)',vr:"TM",name:"RequestedTime",vm:"1",version:"PrivateTag"},'(0031,"SIEMENS ISI",80)':{tag:'(0031,"SIEMENS ISI",80)',vr:"LT",name:"RequestedLocation",vm:"1",version:"PrivateTag"},'(0055,"SIEMENS ISI",46)':{tag:'(0055,"SIEMENS ISI",46)',vr:"LT",name:"CurrentWard",vm:"1",version:"PrivateTag"},'(0193,"SIEMENS ISI",02)':{tag:'(0193,"SIEMENS ISI",02)',vr:"DS",name:"RISKey",vm:"1",version:"PrivateTag"},'(0307,"SIEMENS ISI",01)':{tag:'(0307,"SIEMENS ISI",01)',vr:"UN",name:"RISWorklistIMGEF",vm:"1",version:"PrivateTag"},'(0309,"SIEMENS ISI",01)':{tag:'(0309,"SIEMENS ISI",01)',vr:"UN",name:"RISReportIMGEF",vm:"1",version:"PrivateTag"},'(4009,"SIEMENS ISI",01)':{tag:'(4009,"SIEMENS ISI",01)',vr:"LT",name:"ReportID",vm:"1",version:"PrivateTag"},'(4009,"SIEMENS ISI",20)':{tag:'(4009,"SIEMENS ISI",20)',vr:"LT",name:"ReportStatus",vm:"1",version:"PrivateTag"},'(4009,"SIEMENS ISI",30)':{tag:'(4009,"SIEMENS ISI",30)',vr:"DA",name:"ReportCreationDate",vm:"1",version:"PrivateTag"},'(4009,"SIEMENS ISI",70)':{tag:'(4009,"SIEMENS ISI",70)',vr:"LT",name:"ReportApprovingPhysician",vm:"1",version:"PrivateTag"},'(4009,"SIEMENS ISI",e0)':{tag:'(4009,"SIEMENS ISI",e0)',vr:"LT",name:"ReportText",vm:"1",version:"PrivateTag"},'(4009,"SIEMENS ISI",e1)':{tag:'(4009,"SIEMENS ISI",e1)',vr:"LT",name:"ReportAuthor",vm:"1",version:"PrivateTag"},'(4009,"SIEMENS ISI",e3)':{tag:'(4009,"SIEMENS ISI",e3)',vr:"LT",name:"ReportingRadiologist",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",04)':{tag:'(0029,"SIEMENS MED DISPLAY",04)',vr:"LT",name:"PhotometricInterpretation",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",10)':{tag:'(0029,"SIEMENS MED DISPLAY",10)',vr:"US",name:"RowsOfSubmatrix",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",11)':{tag:'(0029,"SIEMENS MED DISPLAY",11)',vr:"US",name:"ColumnsOfSubmatrix",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",20)':{tag:'(0029,"SIEMENS MED DISPLAY",20)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",21)':{tag:'(0029,"SIEMENS MED DISPLAY",21)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",50)':{tag:'(0029,"SIEMENS MED DISPLAY",50)',vr:"US",name:"OriginOfSubmatrix",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",99)':{tag:'(0029,"SIEMENS MED DISPLAY",99)',vr:"LT",name:"ShutterType",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",a0)':{tag:'(0029,"SIEMENS MED DISPLAY",a0)',vr:"US",name:"RowsOfRectangularShutter",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",a1)':{tag:'(0029,"SIEMENS MED DISPLAY",a1)',vr:"US",name:"ColumnsOfRectangularShutter",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",a2)':{tag:'(0029,"SIEMENS MED DISPLAY",a2)',vr:"US",name:"OriginOfRectangularShutter",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",b0)':{tag:'(0029,"SIEMENS MED DISPLAY",b0)',vr:"US",name:"RadiusOfCircularShutter",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",b2)':{tag:'(0029,"SIEMENS MED DISPLAY",b2)',vr:"US",name:"OriginOfCircularShutter",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",c1)':{tag:'(0029,"SIEMENS MED DISPLAY",c1)',vr:"US",name:"ContourOfIrregularShutter",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED HG",10)':{tag:'(0029,"SIEMENS MED HG",10)',vr:"US",name:"ListOfGroupNumbers",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED HG",15)':{tag:'(0029,"SIEMENS MED HG",15)',vr:"LT",name:"ListOfShadowOwnerCodes",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED HG",20)':{tag:'(0029,"SIEMENS MED HG",20)',vr:"US",name:"ListOfElementNumbers",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED HG",30)':{tag:'(0029,"SIEMENS MED HG",30)',vr:"US",name:"ListOfTotalDisplayLength",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED HG",40)':{tag:'(0029,"SIEMENS MED HG",40)',vr:"LT",name:"ListOfDisplayPrefix",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED HG",50)':{tag:'(0029,"SIEMENS MED HG",50)',vr:"LT",name:"ListOfDisplayPostfix",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED HG",60)':{tag:'(0029,"SIEMENS MED HG",60)',vr:"US",name:"ListOfTextPosition",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED HG",70)':{tag:'(0029,"SIEMENS MED HG",70)',vr:"LT",name:"ListOfTextConcatenation",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED MG",10)':{tag:'(0029,"SIEMENS MED MG",10)',vr:"US",name:"ListOfGroupNumbers",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED MG",15)':{tag:'(0029,"SIEMENS MED MG",15)',vr:"LT",name:"ListOfShadowOwnerCodes",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED MG",20)':{tag:'(0029,"SIEMENS MED MG",20)',vr:"US",name:"ListOfElementNumbers",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED MG",30)':{tag:'(0029,"SIEMENS MED MG",30)',vr:"US",name:"ListOfTotalDisplayLength",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED MG",40)':{tag:'(0029,"SIEMENS MED MG",40)',vr:"LT",name:"ListOfDisplayPrefix",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED MG",50)':{tag:'(0029,"SIEMENS MED MG",50)',vr:"LT",name:"ListOfDisplayPostfix",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED MG",60)':{tag:'(0029,"SIEMENS MED MG",60)',vr:"US",name:"ListOfTextPosition",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED MG",70)':{tag:'(0029,"SIEMENS MED MG",70)',vr:"LT",name:"ListOfTextConcatenation",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS MED",10)':{tag:'(0009,"SIEMENS MED",10)',vr:"LO",name:"RecognitionCode",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS MED",30)':{tag:'(0009,"SIEMENS MED",30)',vr:"UL",name:"ByteOffsetOfOriginalHeader",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS MED",31)':{tag:'(0009,"SIEMENS MED",31)',vr:"UL",name:"LengthOfOriginalHeader",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS MED",40)':{tag:'(0009,"SIEMENS MED",40)',vr:"UL",name:"ByteOffsetOfPixelmatrix",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS MED",41)':{tag:'(0009,"SIEMENS MED",41)',vr:"UL",name:"LengthOfPixelmatrixInBytes",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS MED",50)':{tag:'(0009,"SIEMENS MED",50)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS MED",51)':{tag:'(0009,"SIEMENS MED",51)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS MED",f5)':{tag:'(0009,"SIEMENS MED",f5)',vr:"LT",name:"PDMEFIDPlaceholder",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS MED",f6)':{tag:'(0009,"SIEMENS MED",f6)',vr:"LT",name:"PDMDataObjectTypeExtension",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MED",10)':{tag:'(0021,"SIEMENS MED",10)',vr:"DS",name:"Zoom",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MED",11)':{tag:'(0021,"SIEMENS MED",11)',vr:"DS",name:"Target",vm:"2",version:"PrivateTag"},'(0021,"SIEMENS MED",12)':{tag:'(0021,"SIEMENS MED",12)',vr:"IS",name:"TubeAngle",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MED",20)':{tag:'(0021,"SIEMENS MED",20)',vr:"US",name:"ROIMask",vm:"1",version:"PrivateTag"},'(7001,"SIEMENS MED",10)':{tag:'(7001,"SIEMENS MED",10)',vr:"LT",name:"Dummy",vm:"1",version:"PrivateTag"},'(7003,"SIEMENS MED",10)':{tag:'(7003,"SIEMENS MED",10)',vr:"LT",name:"Header",vm:"1",version:"PrivateTag"},'(7005,"SIEMENS MED",10)':{tag:'(7005,"SIEMENS MED",10)',vr:"LT",name:"Dummy",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",08)':{tag:'(0029,"SIEMENS MEDCOM HEADER",08)',vr:"CS",name:"MedComHeaderType",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",09)':{tag:'(0029,"SIEMENS MEDCOM HEADER",09)',vr:"LO",name:"MedComHeaderVersion",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",10)':{tag:'(0029,"SIEMENS MEDCOM HEADER",10)',vr:"OB",name:"MedComHeaderInfo",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",20)':{tag:'(0029,"SIEMENS MEDCOM HEADER",20)',vr:"OB",name:"MedComHistoryInformation",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",31)':{tag:'(0029,"SIEMENS MEDCOM HEADER",31)',vr:"LO",name:"PMTFInformation1",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",32)':{tag:'(0029,"SIEMENS MEDCOM HEADER",32)',vr:"UL",name:"PMTFInformation2",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",33)':{tag:'(0029,"SIEMENS MEDCOM HEADER",33)',vr:"UL",name:"PMTFInformation3",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",34)':{tag:'(0029,"SIEMENS MEDCOM HEADER",34)',vr:"CS",name:"PMTFInformation4",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",35)':{tag:'(0029,"SIEMENS MEDCOM HEADER",35)',vr:"UL",name:"PMTFInformation5",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",40)':{tag:'(0029,"SIEMENS MEDCOM HEADER",40)',vr:"SQ",name:"ApplicationHeaderSequence",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",41)':{tag:'(0029,"SIEMENS MEDCOM HEADER",41)',vr:"CS",name:"ApplicationHeaderType",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",42)':{tag:'(0029,"SIEMENS MEDCOM HEADER",42)',vr:"LO",name:"ApplicationHeaderID",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",43)':{tag:'(0029,"SIEMENS MEDCOM HEADER",43)',vr:"LO",name:"ApplicationHeaderVersion",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",44)':{tag:'(0029,"SIEMENS MEDCOM HEADER",44)',vr:"OB",name:"ApplicationHeaderInfo",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",50)':{tag:'(0029,"SIEMENS MEDCOM HEADER",50)',vr:"LO",name:"WorkflowControlFlags",vm:"8",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",51)':{tag:'(0029,"SIEMENS MEDCOM HEADER",51)',vr:"CS",name:"ArchiveManagementFlagKeepOnline",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",52)':{tag:'(0029,"SIEMENS MEDCOM HEADER",52)',vr:"CS",name:"ArchiveManagementFlagDoNotArchive",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",53)':{tag:'(0029,"SIEMENS MEDCOM HEADER",53)',vr:"CS",name:"ImageLocationStatus",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",54)':{tag:'(0029,"SIEMENS MEDCOM HEADER",54)',vr:"DS",name:"EstimatedRetrieveTime",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",55)':{tag:'(0029,"SIEMENS MEDCOM HEADER",55)',vr:"DS",name:"DataSizeOfRetrievedImages",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",70)':{tag:'(0029,"SIEMENS MEDCOM HEADER",70)',vr:"SQ",name:"SiemensLinkSequence",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",71)':{tag:'(0029,"SIEMENS MEDCOM HEADER",71)',vr:"AT",name:"ReferencedTag",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",72)':{tag:'(0029,"SIEMENS MEDCOM HEADER",72)',vr:"CS",name:"ReferencedTagType",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",73)':{tag:'(0029,"SIEMENS MEDCOM HEADER",73)',vr:"UL",name:"ReferencedValueLength",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",74)':{tag:'(0029,"SIEMENS MEDCOM HEADER",74)',vr:"CS",name:"ReferencedObjectDeviceType",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",75)':{tag:'(0029,"SIEMENS MEDCOM HEADER",75)',vr:"OB",name:"ReferencedObjectDeviceLocation",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",76)':{tag:'(0029,"SIEMENS MEDCOM HEADER",76)',vr:"OB",name:"ReferencedObjectDeviceID",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER2",60)':{tag:'(0029,"SIEMENS MEDCOM HEADER2",60)',vr:"LO",name:"SeriesWorkflowStatus",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM OOG",08)':{tag:'(0029,"SIEMENS MEDCOM OOG",08)',vr:"CS",name:"MEDCOMOOGType",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM OOG",09)':{tag:'(0029,"SIEMENS MEDCOM OOG",09)',vr:"LO",name:"MEDCOMOOGVersion",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM OOG",10)':{tag:'(0029,"SIEMENS MEDCOM OOG",10)',vr:"OB",name:"MEDCOMOOGInfo",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",12)':{tag:'(0019,"SIEMENS MR VA0 COAD",12)',vr:"DS",name:"MagneticFieldStrength",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",14)':{tag:'(0019,"SIEMENS MR VA0 COAD",14)',vr:"DS",name:"ADCVoltage",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",16)':{tag:'(0019,"SIEMENS MR VA0 COAD",16)',vr:"DS",name:"ADCOffset",vm:"2",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",20)':{tag:'(0019,"SIEMENS MR VA0 COAD",20)',vr:"DS",name:"TransmitterAmplitude",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",21)':{tag:'(0019,"SIEMENS MR VA0 COAD",21)',vr:"IS",name:"NumberOfTransmitterAmplitudes",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",22)':{tag:'(0019,"SIEMENS MR VA0 COAD",22)',vr:"DS",name:"TransmitterAttenuator",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",24)':{tag:'(0019,"SIEMENS MR VA0 COAD",24)',vr:"DS",name:"TransmitterCalibration",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",26)':{tag:'(0019,"SIEMENS MR VA0 COAD",26)',vr:"DS",name:"TransmitterReference",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",50)':{tag:'(0019,"SIEMENS MR VA0 COAD",50)',vr:"DS",name:"ReceiverTotalGain",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",51)':{tag:'(0019,"SIEMENS MR VA0 COAD",51)',vr:"DS",name:"ReceiverAmplifierGain",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",52)':{tag:'(0019,"SIEMENS MR VA0 COAD",52)',vr:"DS",name:"ReceiverPreamplifierGain",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",54)':{tag:'(0019,"SIEMENS MR VA0 COAD",54)',vr:"DS",name:"ReceiverCableAttenuation",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",55)':{tag:'(0019,"SIEMENS MR VA0 COAD",55)',vr:"DS",name:"ReceiverReferenceGain",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",56)':{tag:'(0019,"SIEMENS MR VA0 COAD",56)',vr:"DS",name:"ReceiverFilterFrequency",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",60)':{tag:'(0019,"SIEMENS MR VA0 COAD",60)',vr:"DS",name:"ReconstructionScaleFactor",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",62)':{tag:'(0019,"SIEMENS MR VA0 COAD",62)',vr:"DS",name:"ReferenceScaleFactor",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",70)':{tag:'(0019,"SIEMENS MR VA0 COAD",70)',vr:"DS",name:"PhaseGradientAmplitude",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",71)':{tag:'(0019,"SIEMENS MR VA0 COAD",71)',vr:"DS",name:"ReadoutGradientAmplitude",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",72)':{tag:'(0019,"SIEMENS MR VA0 COAD",72)',vr:"DS",name:"SelectionGradientAmplitude",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",80)':{tag:'(0019,"SIEMENS MR VA0 COAD",80)',vr:"DS",name:"GradientDelayTime",vm:"3",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",82)':{tag:'(0019,"SIEMENS MR VA0 COAD",82)',vr:"DS",name:"TotalGradientDelayTime",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",90)':{tag:'(0019,"SIEMENS MR VA0 COAD",90)',vr:"LT",name:"SensitivityCorrectionLabel",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",91)':{tag:'(0019,"SIEMENS MR VA0 COAD",91)',vr:"DS",name:"SaturationPhaseEncodingVectorCoronalComponent",vm:"6",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",92)':{tag:'(0019,"SIEMENS MR VA0 COAD",92)',vr:"DS",name:"SaturationReadoutVectorCoronalComponent",vm:"6",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",a0)':{tag:'(0019,"SIEMENS MR VA0 COAD",a0)',vr:"US",name:"RFWatchdogMask",vm:"3",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",a1)':{tag:'(0019,"SIEMENS MR VA0 COAD",a1)',vr:"DS",name:"EPIReconstructionSlope",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",a2)':{tag:'(0019,"SIEMENS MR VA0 COAD",a2)',vr:"DS",name:"RFPowerErrorIndicator",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",a5)':{tag:'(0019,"SIEMENS MR VA0 COAD",a5)',vr:"DS",name:"SpecificAbsorptionRateWholeBody",vm:"3",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",a6)':{tag:'(0019,"SIEMENS MR VA0 COAD",a6)',vr:"DS",name:"SpecificEnergyDose",vm:"3",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",b0)':{tag:'(0019,"SIEMENS MR VA0 COAD",b0)',vr:"UL",name:"AdjustmentStatusMask",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",c1)':{tag:'(0019,"SIEMENS MR VA0 COAD",c1)',vr:"DS",name:"EPICapacity",vm:"6",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",c2)':{tag:'(0019,"SIEMENS MR VA0 COAD",c2)',vr:"DS",name:"EPIInductance",vm:"3",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",c3)':{tag:'(0019,"SIEMENS MR VA0 COAD",c3)',vr:"IS",name:"EPISwitchConfigurationCode",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",c4)':{tag:'(0019,"SIEMENS MR VA0 COAD",c4)',vr:"IS",name:"EPISwitchHardwareCode",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",c5)':{tag:'(0019,"SIEMENS MR VA0 COAD",c5)',vr:"DS",name:"EPISwitchDelayTime",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",d1)':{tag:'(0019,"SIEMENS MR VA0 COAD",d1)',vr:"DS",name:"FlowSensitivity",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",d2)':{tag:'(0019,"SIEMENS MR VA0 COAD",d2)',vr:"LT",name:"CalculationSubmode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",d3)':{tag:'(0019,"SIEMENS MR VA0 COAD",d3)',vr:"DS",name:"FieldOfViewRatio",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",d4)':{tag:'(0019,"SIEMENS MR VA0 COAD",d4)',vr:"IS",name:"BaseRawMatrixSize",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",d5)':{tag:'(0019,"SIEMENS MR VA0 COAD",d5)',vr:"IS",name:"2DOversamplingLines",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",d6)':{tag:'(0019,"SIEMENS MR VA0 COAD",d6)',vr:"IS",name:"3DPhaseOversamplingPartitions",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",d7)':{tag:'(0019,"SIEMENS MR VA0 COAD",d7)',vr:"IS",name:"EchoLinePosition",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",d8)':{tag:'(0019,"SIEMENS MR VA0 COAD",d8)',vr:"IS",name:"EchoColumnPosition",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",d9)':{tag:'(0019,"SIEMENS MR VA0 COAD",d9)',vr:"IS",name:"LinesPerSegment",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",da)':{tag:'(0019,"SIEMENS MR VA0 COAD",da)',vr:"LT",name:"PhaseCodingDirection",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",10)':{tag:'(0019,"SIEMENS MR VA0 GEN",10)',vr:"DS",name:"TotalMeasurementTimeNominal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",11)':{tag:'(0019,"SIEMENS MR VA0 GEN",11)',vr:"DS",name:"TotalMeasurementTimeCurrent",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",12)':{tag:'(0019,"SIEMENS MR VA0 GEN",12)',vr:"DS",name:"StartDelayTime",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",13)':{tag:'(0019,"SIEMENS MR VA0 GEN",13)',vr:"DS",name:"DwellTime",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",14)':{tag:'(0019,"SIEMENS MR VA0 GEN",14)',vr:"IS",name:"NumberOfPhases",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",16)':{tag:'(0019,"SIEMENS MR VA0 GEN",16)',vr:"UL",name:"SequenceControlMask",vm:"2",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",18)':{tag:'(0019,"SIEMENS MR VA0 GEN",18)',vr:"UL",name:"MeasurementStatusMask",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",20)':{tag:'(0019,"SIEMENS MR VA0 GEN",20)',vr:"IS",name:"NumberOfFourierLinesNominal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",21)':{tag:'(0019,"SIEMENS MR VA0 GEN",21)',vr:"IS",name:"NumberOfFourierLinesCurrent",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",26)':{tag:'(0019,"SIEMENS MR VA0 GEN",26)',vr:"IS",name:"NumberOfFourierLinesAfterZero",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",28)':{tag:'(0019,"SIEMENS MR VA0 GEN",28)',vr:"IS",name:"FirstMeasuredFourierLine",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",30)':{tag:'(0019,"SIEMENS MR VA0 GEN",30)',vr:"IS",name:"AcquisitionColumns",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",31)':{tag:'(0019,"SIEMENS MR VA0 GEN",31)',vr:"IS",name:"ReconstructionColumns",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",40)':{tag:'(0019,"SIEMENS MR VA0 GEN",40)',vr:"IS",name:"ArrayCoilElementNumber",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",41)':{tag:'(0019,"SIEMENS MR VA0 GEN",41)',vr:"UL",name:"ArrayCoilElementSelectMask",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",42)':{tag:'(0019,"SIEMENS MR VA0 GEN",42)',vr:"UL",name:"ArrayCoilElementDataMask",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",43)':{tag:'(0019,"SIEMENS MR VA0 GEN",43)',vr:"IS",name:"ArrayCoilElementToADCConnect",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",44)':{tag:'(0019,"SIEMENS MR VA0 GEN",44)',vr:"DS",name:"ArrayCoilElementNoiseLevel",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",45)':{tag:'(0019,"SIEMENS MR VA0 GEN",45)',vr:"IS",name:"ArrayCoilADCPairNumber",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",46)':{tag:'(0019,"SIEMENS MR VA0 GEN",46)',vr:"UL",name:"ArrayCoilCombinationMask",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",50)':{tag:'(0019,"SIEMENS MR VA0 GEN",50)',vr:"IS",name:"NumberOfAverages",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",60)':{tag:'(0019,"SIEMENS MR VA0 GEN",60)',vr:"DS",name:"FlipAngle",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",70)':{tag:'(0019,"SIEMENS MR VA0 GEN",70)',vr:"IS",name:"NumberOfPrescans",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",81)':{tag:'(0019,"SIEMENS MR VA0 GEN",81)',vr:"LT",name:"FilterTypeForRawData",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",82)':{tag:'(0019,"SIEMENS MR VA0 GEN",82)',vr:"DS",name:"FilterParameterForRawData",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",83)':{tag:'(0019,"SIEMENS MR VA0 GEN",83)',vr:"LT",name:"FilterTypeForImageData",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",84)':{tag:'(0019,"SIEMENS MR VA0 GEN",84)',vr:"DS",name:"FilterParameterForImageData",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",85)':{tag:'(0019,"SIEMENS MR VA0 GEN",85)',vr:"LT",name:"FilterTypeForPhaseCorrection",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",86)':{tag:'(0019,"SIEMENS MR VA0 GEN",86)',vr:"DS",name:"FilterParameterForPhaseCorrection",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",87)':{tag:'(0019,"SIEMENS MR VA0 GEN",87)',vr:"LT",name:"NormalizationFilterTypeForImageData",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",88)':{tag:'(0019,"SIEMENS MR VA0 GEN",88)',vr:"DS",name:"NormalizationFilterParameterForImageData",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",90)':{tag:'(0019,"SIEMENS MR VA0 GEN",90)',vr:"IS",name:"NumberOfSaturationRegions",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",91)':{tag:'(0019,"SIEMENS MR VA0 GEN",91)',vr:"DS",name:"SaturationPhaseEncodingVectorSagittalComponent",vm:"6",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",92)':{tag:'(0019,"SIEMENS MR VA0 GEN",92)',vr:"DS",name:"SaturationReadoutVectorSagittalComponent",vm:"6",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",93)':{tag:'(0019,"SIEMENS MR VA0 GEN",93)',vr:"DS",name:"EPIStimulationMonitorMode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",94)':{tag:'(0019,"SIEMENS MR VA0 GEN",94)',vr:"DS",name:"ImageRotationAngle",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",96)':{tag:'(0019,"SIEMENS MR VA0 GEN",96)',vr:"UL",name:"CoilIDMask",vm:"3",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",97)':{tag:'(0019,"SIEMENS MR VA0 GEN",97)',vr:"UL",name:"CoilClassMask",vm:"2",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",98)':{tag:'(0019,"SIEMENS MR VA0 GEN",98)',vr:"DS",name:"CoilPosition",vm:"3",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",a0)':{tag:'(0019,"SIEMENS MR VA0 GEN",a0)',vr:"DS",name:"EPIReconstructionPhase",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",a1)':{tag:'(0019,"SIEMENS MR VA0 GEN",a1)',vr:"DS",name:"EPIReconstructionSlope",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",20)':{tag:'(0021,"SIEMENS MR VA0 GEN",20)',vr:"IS",name:"PhaseCorrectionRowsSequence",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",21)':{tag:'(0021,"SIEMENS MR VA0 GEN",21)',vr:"IS",name:"PhaseCorrectionColumnsSequence",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",22)':{tag:'(0021,"SIEMENS MR VA0 GEN",22)',vr:"IS",name:"PhaseCorrectionRowsReconstruction",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",24)':{tag:'(0021,"SIEMENS MR VA0 GEN",24)',vr:"IS",name:"PhaseCorrectionColumnsReconstruction",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",30)':{tag:'(0021,"SIEMENS MR VA0 GEN",30)',vr:"IS",name:"NumberOf3DRawPartitionsNominal",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",31)':{tag:'(0021,"SIEMENS MR VA0 GEN",31)',vr:"IS",name:"NumberOf3DRawPartitionsCurrent",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",34)':{tag:'(0021,"SIEMENS MR VA0 GEN",34)',vr:"IS",name:"NumberOf3DImagePartitions",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",36)':{tag:'(0021,"SIEMENS MR VA0 GEN",36)',vr:"IS",name:"Actual3DImagePartitionNumber",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",39)':{tag:'(0021,"SIEMENS MR VA0 GEN",39)',vr:"DS",name:"SlabThickness",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",40)':{tag:'(0021,"SIEMENS MR VA0 GEN",40)',vr:"IS",name:"NumberOfSlicesNominal",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",41)':{tag:'(0021,"SIEMENS MR VA0 GEN",41)',vr:"IS",name:"NumberOfSlicesCurrent",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",42)':{tag:'(0021,"SIEMENS MR VA0 GEN",42)',vr:"IS",name:"CurrentSliceNumber",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",43)':{tag:'(0021,"SIEMENS MR VA0 GEN",43)',vr:"IS",name:"CurrentGroupNumber",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",44)':{tag:'(0021,"SIEMENS MR VA0 GEN",44)',vr:"DS",name:"CurrentSliceDistanceFactor",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",45)':{tag:'(0021,"SIEMENS MR VA0 GEN",45)',vr:"IS",name:"MIPStartRow",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",46)':{tag:'(0021,"SIEMENS MR VA0 GEN",46)',vr:"IS",name:"MIPStopRow",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",47)':{tag:'(0021,"SIEMENS MR VA0 GEN",47)',vr:"IS",name:"MIPStartColumn",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",48)':{tag:'(0021,"SIEMENS MR VA0 GEN",48)',vr:"IS",name:"MIPStartColumn",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",49)':{tag:'(0021,"SIEMENS MR VA0 GEN",49)',vr:"IS",name:"MIPStartSlice Name=",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",4a)':{tag:'(0021,"SIEMENS MR VA0 GEN",4a)',vr:"IS",name:"MIPStartSlice",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",4f)':{tag:'(0021,"SIEMENS MR VA0 GEN",4f)',vr:"LT",name:"OrderofSlices",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",50)':{tag:'(0021,"SIEMENS MR VA0 GEN",50)',vr:"US",name:"SignalMask",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",52)':{tag:'(0021,"SIEMENS MR VA0 GEN",52)',vr:"DS",name:"DelayAfterTrigger",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",53)':{tag:'(0021,"SIEMENS MR VA0 GEN",53)',vr:"IS",name:"RRInterval",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",54)':{tag:'(0021,"SIEMENS MR VA0 GEN",54)',vr:"DS",name:"NumberOfTriggerPulses",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",56)':{tag:'(0021,"SIEMENS MR VA0 GEN",56)',vr:"DS",name:"RepetitionTimeEffective",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",57)':{tag:'(0021,"SIEMENS MR VA0 GEN",57)',vr:"LT",name:"GatePhase",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",58)':{tag:'(0021,"SIEMENS MR VA0 GEN",58)',vr:"DS",name:"GateThreshold",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",59)':{tag:'(0021,"SIEMENS MR VA0 GEN",59)',vr:"DS",name:"GatedRatio",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",60)':{tag:'(0021,"SIEMENS MR VA0 GEN",60)',vr:"IS",name:"NumberOfInterpolatedImages",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",70)':{tag:'(0021,"SIEMENS MR VA0 GEN",70)',vr:"IS",name:"NumberOfEchoes",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",72)':{tag:'(0021,"SIEMENS MR VA0 GEN",72)',vr:"DS",name:"SecondEchoTime",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",73)':{tag:'(0021,"SIEMENS MR VA0 GEN",73)',vr:"DS",name:"SecondRepetitionTime",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",80)':{tag:'(0021,"SIEMENS MR VA0 GEN",80)',vr:"IS",name:"CardiacCode",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",91)':{tag:'(0021,"SIEMENS MR VA0 GEN",91)',vr:"DS",name:"SaturationPhaseEncodingVectorTransverseComponent",vm:"6",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",92)':{tag:'(0021,"SIEMENS MR VA0 GEN",92)',vr:"DS",name:"SaturationReadoutVectorTransverseComponent",vm:"6",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",93)':{tag:'(0021,"SIEMENS MR VA0 GEN",93)',vr:"DS",name:"EPIChangeValueOfMagnitude",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",94)':{tag:'(0021,"SIEMENS MR VA0 GEN",94)',vr:"DS",name:"EPIChangeValueOfXComponent",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",95)':{tag:'(0021,"SIEMENS MR VA0 GEN",95)',vr:"DS",name:"EPIChangeValueOfYComponent",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",96)':{tag:'(0021,"SIEMENS MR VA0 GEN",96)',vr:"DS",name:"EPIChangeValueOfZComponent",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",00)':{tag:'(0021,"SIEMENS MR VA0 RAW",00)',vr:"LT",name:"SequenceType",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",01)':{tag:'(0021,"SIEMENS MR VA0 RAW",01)',vr:"IS",name:"VectorSizeOriginal",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",02)':{tag:'(0021,"SIEMENS MR VA0 RAW",02)',vr:"IS",name:"VectorSizeExtended",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",03)':{tag:'(0021,"SIEMENS MR VA0 RAW",03)',vr:"DS",name:"AcquiredSpectralRange",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",04)':{tag:'(0021,"SIEMENS MR VA0 RAW",04)',vr:"DS",name:"VOIPosition",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",05)':{tag:'(0021,"SIEMENS MR VA0 RAW",05)',vr:"DS",name:"VOISize",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",06)':{tag:'(0021,"SIEMENS MR VA0 RAW",06)',vr:"IS",name:"CSIMatrixSizeOriginal",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",07)':{tag:'(0021,"SIEMENS MR VA0 RAW",07)',vr:"IS",name:"CSIMatrixSizeExtended",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",08)':{tag:'(0021,"SIEMENS MR VA0 RAW",08)',vr:"DS",name:"SpatialGridShift",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",09)':{tag:'(0021,"SIEMENS MR VA0 RAW",09)',vr:"DS",name:"SignalLimitsMinimum",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",10)':{tag:'(0021,"SIEMENS MR VA0 RAW",10)',vr:"DS",name:"SignalLimitsMaximum",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",11)':{tag:'(0021,"SIEMENS MR VA0 RAW",11)',vr:"DS",name:"SpecInfoMask",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",12)':{tag:'(0021,"SIEMENS MR VA0 RAW",12)',vr:"DS",name:"EPITimeRateOfChangeOfMagnitude",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",13)':{tag:'(0021,"SIEMENS MR VA0 RAW",13)',vr:"DS",name:"EPITimeRateOfChangeOfXComponent",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",14)':{tag:'(0021,"SIEMENS MR VA0 RAW",14)',vr:"DS",name:"EPITimeRateOfChangeOfYComponent",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",15)':{tag:'(0021,"SIEMENS MR VA0 RAW",15)',vr:"DS",name:"EPITimeRateOfChangeOfZComponent",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",16)':{tag:'(0021,"SIEMENS MR VA0 RAW",16)',vr:"DS",name:"EPITimeRateOfChangeLegalLimit1",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",17)':{tag:'(0021,"SIEMENS MR VA0 RAW",17)',vr:"DS",name:"EPIOperationModeFlag",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",18)':{tag:'(0021,"SIEMENS MR VA0 RAW",18)',vr:"DS",name:"EPIFieldCalculationSafetyFactor",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",19)':{tag:'(0021,"SIEMENS MR VA0 RAW",19)',vr:"DS",name:"EPILegalLimit1OfChangeValue",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",20)':{tag:'(0021,"SIEMENS MR VA0 RAW",20)',vr:"DS",name:"EPILegalLimit2OfChangeValue",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",21)':{tag:'(0021,"SIEMENS MR VA0 RAW",21)',vr:"DS",name:"EPIRiseTime",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",30)':{tag:'(0021,"SIEMENS MR VA0 RAW",30)',vr:"DS",name:"ArrayCoilADCOffset",vm:"16",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",31)':{tag:'(0021,"SIEMENS MR VA0 RAW",31)',vr:"DS",name:"ArrayCoilPreamplifierGain",vm:"16",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",50)':{tag:'(0021,"SIEMENS MR VA0 RAW",50)',vr:"LT",name:"SaturationType",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",51)':{tag:'(0021,"SIEMENS MR VA0 RAW",51)',vr:"DS",name:"SaturationNormalVector",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",52)':{tag:'(0021,"SIEMENS MR VA0 RAW",52)',vr:"DS",name:"SaturationPositionVector",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",53)':{tag:'(0021,"SIEMENS MR VA0 RAW",53)',vr:"DS",name:"SaturationThickness",vm:"6",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",54)':{tag:'(0021,"SIEMENS MR VA0 RAW",54)',vr:"DS",name:"SaturationWidth",vm:"6",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",55)':{tag:'(0021,"SIEMENS MR VA0 RAW",55)',vr:"DS",name:"SaturationDistance",vm:"6",version:"PrivateTag"},'(7fe3,"SIEMENS NUMARIS II",00)':{tag:'(7fe3,"SIEMENS NUMARIS II",00)',vr:"LT",name:"ImageGraphicsFormatCode",vm:"1",version:"PrivateTag"},'(7fe3,"SIEMENS NUMARIS II",10)':{tag:'(7fe3,"SIEMENS NUMARIS II",10)',vr:"OB",name:"ImageGraphics",vm:"1",version:"PrivateTag"},'(7fe3,"SIEMENS NUMARIS II",20)':{tag:'(7fe3,"SIEMENS NUMARIS II",20)',vr:"OB",name:"ImageGraphicsDummy",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA GEN",20)':{tag:'(0011,"SIEMENS RA GEN",20)',vr:"SL",name:"FluoroTimer",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA GEN",25)':{tag:'(0011,"SIEMENS RA GEN",25)',vr:"SL",name:"PtopDoseAreaProduct",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA GEN",26)':{tag:'(0011,"SIEMENS RA GEN",26)',vr:"SL",name:"PtopTotalSkinDose",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA GEN",30)':{tag:'(0011,"SIEMENS RA GEN",30)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA GEN",35)':{tag:'(0011,"SIEMENS RA GEN",35)',vr:"LO",name:"PatientInitialPuckCounter",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA GEN",40)':{tag:'(0011,"SIEMENS RA GEN",40)',vr:"SS",name:"SPIDataObjectType",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",15)':{tag:'(0019,"SIEMENS RA GEN",15)',vr:"LO",name:"AcquiredPlane",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",1f)':{tag:'(0019,"SIEMENS RA GEN",1f)',vr:"SS",name:"DefaultTableIsoCenterHeight",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",20)':{tag:'(0019,"SIEMENS RA GEN",20)',vr:"SL",name:"SceneFlag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",22)':{tag:'(0019,"SIEMENS RA GEN",22)',vr:"SL",name:"RefPhotofileFlag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",24)':{tag:'(0019,"SIEMENS RA GEN",24)',vr:"LO",name:"SceneName",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",26)':{tag:'(0019,"SIEMENS RA GEN",26)',vr:"SS",name:"AcquisitionIndex",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",28)':{tag:'(0019,"SIEMENS RA GEN",28)',vr:"SS",name:"MixedPulseMode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",2a)':{tag:'(0019,"SIEMENS RA GEN",2a)',vr:"SS",name:"NoOfPositions",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",2c)':{tag:'(0019,"SIEMENS RA GEN",2c)',vr:"SS",name:"NoOfPhases",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",2e)':{tag:'(0019,"SIEMENS RA GEN",2e)',vr:"SS",name:"FrameRateForPositions",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",30)':{tag:'(0019,"SIEMENS RA GEN",30)',vr:"SS",name:"NoOfFramesForPositions",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",32)':{tag:'(0019,"SIEMENS RA GEN",32)',vr:"SS",name:"SteppingDirection",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",34)':{tag:'(0019,"SIEMENS RA GEN",34)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",36)':{tag:'(0019,"SIEMENS RA GEN",36)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",38)':{tag:'(0019,"SIEMENS RA GEN",38)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",3a)':{tag:'(0019,"SIEMENS RA GEN",3a)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",3c)':{tag:'(0019,"SIEMENS RA GEN",3c)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",3e)':{tag:'(0019,"SIEMENS RA GEN",3e)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",40)':{tag:'(0019,"SIEMENS RA GEN",40)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",42)':{tag:'(0019,"SIEMENS RA GEN",42)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",44)':{tag:'(0019,"SIEMENS RA GEN",44)',vr:"SS",name:"ImageTransferDelay",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",46)':{tag:'(0019,"SIEMENS RA GEN",46)',vr:"SL",name:"InversFlag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",48)':{tag:'(0019,"SIEMENS RA GEN",48)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",4a)':{tag:'(0019,"SIEMENS RA GEN",4a)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",4c)':{tag:'(0019,"SIEMENS RA GEN",4c)',vr:"SS",name:"BlankingCircleDiameter",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",50)':{tag:'(0019,"SIEMENS RA GEN",50)',vr:"SL",name:"StandDataValid",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",52)':{tag:'(0019,"SIEMENS RA GEN",52)',vr:"SS",name:"TableTilt",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",54)':{tag:'(0019,"SIEMENS RA GEN",54)',vr:"SS",name:"TableAxisRotation",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",56)':{tag:'(0019,"SIEMENS RA GEN",56)',vr:"SS",name:"TableLongitudalPosition",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",58)':{tag:'(0019,"SIEMENS RA GEN",58)',vr:"SS",name:"TableSideOffset",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",5a)':{tag:'(0019,"SIEMENS RA GEN",5a)',vr:"SS",name:"TableIsoCenterHeight",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",5c)':{tag:'(0019,"SIEMENS RA GEN",5c)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",5e)':{tag:'(0019,"SIEMENS RA GEN",5e)',vr:"SL",name:"CollimationDataValid",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",60)':{tag:'(0019,"SIEMENS RA GEN",60)',vr:"SL",name:"PeriSequenceNo",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",62)':{tag:'(0019,"SIEMENS RA GEN",62)',vr:"SL",name:"PeriTotalScenes",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",64)':{tag:'(0019,"SIEMENS RA GEN",64)',vr:"SL",name:"PeriOverlapTop",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",66)':{tag:'(0019,"SIEMENS RA GEN",66)',vr:"SL",name:"PeriOverlapBottom",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",68)':{tag:'(0019,"SIEMENS RA GEN",68)',vr:"SL",name:"RawImageNumber",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",6a)':{tag:'(0019,"SIEMENS RA GEN",6a)',vr:"SL",name:"XRayDataValid",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",70)':{tag:'(0019,"SIEMENS RA GEN",70)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",72)':{tag:'(0019,"SIEMENS RA GEN",72)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",74)':{tag:'(0019,"SIEMENS RA GEN",74)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",76)':{tag:'(0019,"SIEMENS RA GEN",76)',vr:"SL",name:"FillingAverageFactor",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",78)':{tag:'(0019,"SIEMENS RA GEN",78)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",7a)':{tag:'(0019,"SIEMENS RA GEN",7a)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",7c)':{tag:'(0019,"SIEMENS RA GEN",7c)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",7e)':{tag:'(0019,"SIEMENS RA GEN",7e)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",80)':{tag:'(0019,"SIEMENS RA GEN",80)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",82)':{tag:'(0019,"SIEMENS RA GEN",82)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",84)':{tag:'(0019,"SIEMENS RA GEN",84)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",86)':{tag:'(0019,"SIEMENS RA GEN",86)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",88)':{tag:'(0019,"SIEMENS RA GEN",88)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",8a)':{tag:'(0019,"SIEMENS RA GEN",8a)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",8c)':{tag:'(0019,"SIEMENS RA GEN",8c)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",8e)':{tag:'(0019,"SIEMENS RA GEN",8e)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",92)':{tag:'(0019,"SIEMENS RA GEN",92)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",94)':{tag:'(0019,"SIEMENS RA GEN",94)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",96)':{tag:'(0019,"SIEMENS RA GEN",96)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",98)':{tag:'(0019,"SIEMENS RA GEN",98)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",9a)':{tag:'(0019,"SIEMENS RA GEN",9a)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",9c)':{tag:'(0019,"SIEMENS RA GEN",9c)',vr:"SL",name:"IntensifierLevelCalibrationFactor",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",9e)':{tag:'(0019,"SIEMENS RA GEN",9e)',vr:"SL",name:"NativeReviewFlag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",a2)':{tag:'(0019,"SIEMENS RA GEN",a2)',vr:"SL",name:"SceneNumber",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",a4)':{tag:'(0019,"SIEMENS RA GEN",a4)',vr:"SS",name:"AcquisitionMode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",a5)':{tag:'(0019,"SIEMENS RA GEN",a5)',vr:"SS",name:"AcquisitonFrameRate",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",a6)':{tag:'(0019,"SIEMENS RA GEN",a6)',vr:"SL",name:"ECGFlag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",a7)':{tag:'(0019,"SIEMENS RA GEN",a7)',vr:"SL",name:"AdditionalSceneData",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",a8)':{tag:'(0019,"SIEMENS RA GEN",a8)',vr:"SL",name:"FileCopyFlag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",a9)':{tag:'(0019,"SIEMENS RA GEN",a9)',vr:"SL",name:"PhlebovisionFlag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",aa)':{tag:'(0019,"SIEMENS RA GEN",aa)',vr:"SL",name:"Co2Flag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",ab)':{tag:'(0019,"SIEMENS RA GEN",ab)',vr:"SS",name:"MaxSpeed",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",ac)':{tag:'(0019,"SIEMENS RA GEN",ac)',vr:"SS",name:"StepWidth",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",ad)':{tag:'(0019,"SIEMENS RA GEN",ad)',vr:"SL",name:"DigitalAcquisitionZoom",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",ff)':{tag:'(0019,"SIEMENS RA GEN",ff)',vr:"SS",name:"Internal",vm:"1-n",version:"PrivateTag"},'(0021,"SIEMENS RA GEN",15)':{tag:'(0021,"SIEMENS RA GEN",15)',vr:"SS",name:"ImagesInStudy",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS RA GEN",20)':{tag:'(0021,"SIEMENS RA GEN",20)',vr:"SS",name:"ScenesInStudy",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS RA GEN",25)':{tag:'(0021,"SIEMENS RA GEN",25)',vr:"SS",name:"ImagesInPhotofile",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS RA GEN",27)':{tag:'(0021,"SIEMENS RA GEN",27)',vr:"SS",name:"PlaneBImagesExist",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS RA GEN",28)':{tag:'(0021,"SIEMENS RA GEN",28)',vr:"SS",name:"NoOf2MBChunks",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS RA GEN",30)':{tag:'(0021,"SIEMENS RA GEN",30)',vr:"SS",name:"ImagesInAllScenes",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS RA GEN",40)':{tag:'(0021,"SIEMENS RA GEN",40)',vr:"SS",name:"ArchiveSWInternalVersion",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA PLANE A",28)':{tag:'(0011,"SIEMENS RA PLANE A",28)',vr:"SL",name:"FluoroTimerA",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA PLANE A",29)':{tag:'(0011,"SIEMENS RA PLANE A",29)',vr:"SL",name:"FluoroSkinDoseA",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA PLANE A",2a)':{tag:'(0011,"SIEMENS RA PLANE A",2a)',vr:"SL",name:"TotalSkinDoseA",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA PLANE A",2b)':{tag:'(0011,"SIEMENS RA PLANE A",2b)',vr:"SL",name:"FluoroDoseAreaProductA",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA PLANE A",2c)':{tag:'(0011,"SIEMENS RA PLANE A",2c)',vr:"SL",name:"TotalDoseAreaProductA",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",15)':{tag:'(0019,"SIEMENS RA PLANE A",15)',vr:"LT",name:"OfflineUID",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",18)':{tag:'(0019,"SIEMENS RA PLANE A",18)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",19)':{tag:'(0019,"SIEMENS RA PLANE A",19)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",1a)':{tag:'(0019,"SIEMENS RA PLANE A",1a)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",1b)':{tag:'(0019,"SIEMENS RA PLANE A",1b)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",1c)':{tag:'(0019,"SIEMENS RA PLANE A",1c)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",1d)':{tag:'(0019,"SIEMENS RA PLANE A",1d)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",1e)':{tag:'(0019,"SIEMENS RA PLANE A",1e)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",1f)':{tag:'(0019,"SIEMENS RA PLANE A",1f)',vr:"SS",name:"Internal",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",20)':{tag:'(0019,"SIEMENS RA PLANE A",20)',vr:"SS",name:"SystemCalibFactorPlaneA",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",22)':{tag:'(0019,"SIEMENS RA PLANE A",22)',vr:"SS",name:"XRayParameterSetNo",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",24)':{tag:'(0019,"SIEMENS RA PLANE A",24)',vr:"SS",name:"XRaySystem",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",26)':{tag:'(0019,"SIEMENS RA PLANE A",26)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",28)':{tag:'(0019,"SIEMENS RA PLANE A",28)',vr:"SS",name:"AcquiredDisplayMode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",2a)':{tag:'(0019,"SIEMENS RA PLANE A",2a)',vr:"SS",name:"AcquisitionDelay",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",2c)':{tag:'(0019,"SIEMENS RA PLANE A",2c)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",2e)':{tag:'(0019,"SIEMENS RA PLANE A",2e)',vr:"SS",name:"MaxFramesLimit",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",30)':{tag:'(0019,"SIEMENS RA PLANE A",30)',vr:"US",name:"MaximumFrameSizeNIU",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",32)':{tag:'(0019,"SIEMENS RA PLANE A",32)',vr:"SS",name:"SubtractedFilterType",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",34)':{tag:'(0019,"SIEMENS RA PLANE A",34)',vr:"SS",name:"FilterFactorNative",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",36)':{tag:'(0019,"SIEMENS RA PLANE A",36)',vr:"SS",name:"AnatomicBackgroundFactor",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",38)':{tag:'(0019,"SIEMENS RA PLANE A",38)',vr:"SS",name:"WindowUpperLimitNative",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",3a)':{tag:'(0019,"SIEMENS RA PLANE A",3a)',vr:"SS",name:"WindowLowerLimitNative",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",3c)':{tag:'(0019,"SIEMENS RA PLANE A",3c)',vr:"SS",name:"WindowBrightnessPhase1",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",3e)':{tag:'(0019,"SIEMENS RA PLANE A",3e)',vr:"SS",name:"WindowBrightnessPhase2",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",40)':{tag:'(0019,"SIEMENS RA PLANE A",40)',vr:"SS",name:"WindowContrastPhase1",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",42)':{tag:'(0019,"SIEMENS RA PLANE A",42)',vr:"SS",name:"WindowContrastPhase2",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",44)':{tag:'(0019,"SIEMENS RA PLANE A",44)',vr:"SS",name:"FilterFactorSub",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",46)':{tag:'(0019,"SIEMENS RA PLANE A",46)',vr:"SS",name:"PeakOpacified",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",48)':{tag:'(0019,"SIEMENS RA PLANE A",48)',vr:"SL",name:"MaskFrame",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",4a)':{tag:'(0019,"SIEMENS RA PLANE A",4a)',vr:"SL",name:"BIHFrame",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",4c)':{tag:'(0019,"SIEMENS RA PLANE A",4c)',vr:"SS",name:"CentBeamAngulationCaudCran",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",4e)':{tag:'(0019,"SIEMENS RA PLANE A",4e)',vr:"SS",name:"CentBeamAngulationLRAnterior",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",50)':{tag:'(0019,"SIEMENS RA PLANE A",50)',vr:"SS",name:"LongitudinalPosition",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",52)':{tag:'(0019,"SIEMENS RA PLANE A",52)',vr:"SS",name:"SideOffset",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",54)':{tag:'(0019,"SIEMENS RA PLANE A",54)',vr:"SS",name:"IsoCenterHeight",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",56)':{tag:'(0019,"SIEMENS RA PLANE A",56)',vr:"SS",name:"ImageTwist",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",58)':{tag:'(0019,"SIEMENS RA PLANE A",58)',vr:"SS",name:"SourceImageDistance",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",5a)':{tag:'(0019,"SIEMENS RA PLANE A",5a)',vr:"SS",name:"MechanicalMagnificationFactor",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",5c)':{tag:'(0019,"SIEMENS RA PLANE A",5c)',vr:"SL",name:"CalibrationFlag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",5e)':{tag:'(0019,"SIEMENS RA PLANE A",5e)',vr:"SL",name:"CalibrationAngleCranCaud",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",60)':{tag:'(0019,"SIEMENS RA PLANE A",60)',vr:"SL",name:"CalibrationAngleRAOLAO",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",62)':{tag:'(0019,"SIEMENS RA PLANE A",62)',vr:"SL",name:"CalibrationTableToFloorDist",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",64)':{tag:'(0019,"SIEMENS RA PLANE A",64)',vr:"SL",name:"CalibrationIsocenterToFloorDist",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",66)':{tag:'(0019,"SIEMENS RA PLANE A",66)',vr:"SL",name:"CalibrationIsocenterToSourceDist",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",68)':{tag:'(0019,"SIEMENS RA PLANE A",68)',vr:"SL",name:"CalibrationSourceToII",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",6a)':{tag:'(0019,"SIEMENS RA PLANE A",6a)',vr:"SL",name:"CalibrationIIZoom",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",6c)':{tag:'(0019,"SIEMENS RA PLANE A",6c)',vr:"SL",name:"CalibrationIIField",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",6e)':{tag:'(0019,"SIEMENS RA PLANE A",6e)',vr:"SL",name:"CalibrationFactor",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",70)':{tag:'(0019,"SIEMENS RA PLANE A",70)',vr:"SL",name:"CalibrationObjectToImageDistance",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",72)':{tag:'(0019,"SIEMENS RA PLANE A",72)',vr:"SL",name:"CalibrationSystemFactor",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",74)':{tag:'(0019,"SIEMENS RA PLANE A",74)',vr:"SL",name:"CalibrationSystemCorrection",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",76)':{tag:'(0019,"SIEMENS RA PLANE A",76)',vr:"SL",name:"CalibrationSystemIIFormats",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",78)':{tag:'(0019,"SIEMENS RA PLANE A",78)',vr:"SL",name:"CalibrationGantryDataValid",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",7a)':{tag:'(0019,"SIEMENS RA PLANE A",7a)',vr:"SS",name:"CollimatorSquareBreadth",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",7c)':{tag:'(0019,"SIEMENS RA PLANE A",7c)',vr:"SS",name:"CollimatorSquareHeight",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",7e)':{tag:'(0019,"SIEMENS RA PLANE A",7e)',vr:"SS",name:"CollimatorSquareDiameter",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",80)':{tag:'(0019,"SIEMENS RA PLANE A",80)',vr:"SS",name:"CollimaterFingerTurnAngle",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",82)':{tag:'(0019,"SIEMENS RA PLANE A",82)',vr:"SS",name:"CollimaterFingerPosition",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",84)':{tag:'(0019,"SIEMENS RA PLANE A",84)',vr:"SS",name:"CollimaterDiaphragmTurnAngle",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",86)':{tag:'(0019,"SIEMENS RA PLANE A",86)',vr:"SS",name:"CollimaterDiaphragmPosition1",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",88)':{tag:'(0019,"SIEMENS RA PLANE A",88)',vr:"SS",name:"CollimaterDiaphragmPosition2",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",8a)':{tag:'(0019,"SIEMENS RA PLANE A",8a)',vr:"SS",name:"CollimaterDiaphragmMode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",8c)':{tag:'(0019,"SIEMENS RA PLANE A",8c)',vr:"SS",name:"CollimaterBeamLimitBreadth",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",8e)':{tag:'(0019,"SIEMENS RA PLANE A",8e)',vr:"SS",name:"CollimaterBeamLimitHeight",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",90)':{tag:'(0019,"SIEMENS RA PLANE A",90)',vr:"SS",name:"CollimaterBeamLimitDiameter",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",92)':{tag:'(0019,"SIEMENS RA PLANE A",92)',vr:"SS",name:"X-RayControlMOde",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",94)':{tag:'(0019,"SIEMENS RA PLANE A",94)',vr:"SS",name:"X-RaySystem",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",96)':{tag:'(0019,"SIEMENS RA PLANE A",96)',vr:"SS",name:"FocalSpot",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",98)':{tag:'(0019,"SIEMENS RA PLANE A",98)',vr:"SS",name:"ExposureControl",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",9a)':{tag:'(0019,"SIEMENS RA PLANE A",9a)',vr:"SL",name:"XRayVoltage",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",9c)':{tag:'(0019,"SIEMENS RA PLANE A",9c)',vr:"SL",name:"XRayCurrent",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",9e)':{tag:'(0019,"SIEMENS RA PLANE A",9e)',vr:"SL",name:"XRayCurrentTimeProduct",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",a0)':{tag:'(0019,"SIEMENS RA PLANE A",a0)',vr:"SL",name:"XRayPulseTime",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",a2)':{tag:'(0019,"SIEMENS RA PLANE A",a2)',vr:"SL",name:"XRaySceneTimeFluoroClock",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",a4)':{tag:'(0019,"SIEMENS RA PLANE A",a4)',vr:"SS",name:"MaximumPulseRate",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",a6)':{tag:'(0019,"SIEMENS RA PLANE A",a6)',vr:"SS",name:"PulsesPerScene",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",a8)':{tag:'(0019,"SIEMENS RA PLANE A",a8)',vr:"SL",name:"DoseAreaProductOfScene",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",aa)':{tag:'(0019,"SIEMENS RA PLANE A",aa)',vr:"SS",name:"Dose",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",ac)':{tag:'(0019,"SIEMENS RA PLANE A",ac)',vr:"SS",name:"DoseRate",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",ae)':{tag:'(0019,"SIEMENS RA PLANE A",ae)',vr:"SL",name:"IIToCoverDistance",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",b0)':{tag:'(0019,"SIEMENS RA PLANE A",b0)',vr:"SS",name:"LastFramePhase1",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",b1)':{tag:'(0019,"SIEMENS RA PLANE A",b1)',vr:"SS",name:"FrameRatePhase1",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",b2)':{tag:'(0019,"SIEMENS RA PLANE A",b2)',vr:"SS",name:"LastFramePhase2",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",b3)':{tag:'(0019,"SIEMENS RA PLANE A",b3)',vr:"SS",name:"FrameRatePhase2",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",b4)':{tag:'(0019,"SIEMENS RA PLANE A",b4)',vr:"SS",name:"LastFramePhase3",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",b5)':{tag:'(0019,"SIEMENS RA PLANE A",b5)',vr:"SS",name:"FrameRatePhase3",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",b6)':{tag:'(0019,"SIEMENS RA PLANE A",b6)',vr:"SS",name:"LastFramePhase4",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",b7)':{tag:'(0019,"SIEMENS RA PLANE A",b7)',vr:"SS",name:"FrameRatePhase4",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",b8)':{tag:'(0019,"SIEMENS RA PLANE A",b8)',vr:"SS",name:"GammaOfNativeImage",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",b9)':{tag:'(0019,"SIEMENS RA PLANE A",b9)',vr:"SS",name:"GammaOfTVSystem",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",bb)':{tag:'(0019,"SIEMENS RA PLANE A",bb)',vr:"SL",name:"PixelshiftX",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",bc)':{tag:'(0019,"SIEMENS RA PLANE A",bc)',vr:"SL",name:"PixelshiftY",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",bd)':{tag:'(0019,"SIEMENS RA PLANE A",bd)',vr:"SL",name:"MaskAverageFactor",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",be)':{tag:'(0019,"SIEMENS RA PLANE A",be)',vr:"SL",name:"BlankingCircleFlag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",bf)':{tag:'(0019,"SIEMENS RA PLANE A",bf)',vr:"SL",name:"CircleRowStart",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",c0)':{tag:'(0019,"SIEMENS RA PLANE A",c0)',vr:"SL",name:"CircleRowEnd",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",c1)':{tag:'(0019,"SIEMENS RA PLANE A",c1)',vr:"SL",name:"CircleColumnStart",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",c2)':{tag:'(0019,"SIEMENS RA PLANE A",c2)',vr:"SL",name:"CircleColumnEnd",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",c3)':{tag:'(0019,"SIEMENS RA PLANE A",c3)',vr:"SL",name:"CircleDiameter",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",c4)':{tag:'(0019,"SIEMENS RA PLANE A",c4)',vr:"SL",name:"RectangularCollimaterFlag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",c5)':{tag:'(0019,"SIEMENS RA PLANE A",c5)',vr:"SL",name:"RectangleRowStart",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",c6)':{tag:'(0019,"SIEMENS RA PLANE A",c6)',vr:"SL",name:"RectangleRowEnd",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",c7)':{tag:'(0019,"SIEMENS RA PLANE A",c7)',vr:"SL",name:"RectangleColumnStart",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",c8)':{tag:'(0019,"SIEMENS RA PLANE A",c8)',vr:"SL",name:"RectangleColumnEnd",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",c9)':{tag:'(0019,"SIEMENS RA PLANE A",c9)',vr:"SL",name:"RectangleAngulation",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",ca)':{tag:'(0019,"SIEMENS RA PLANE A",ca)',vr:"SL",name:"IrisCollimatorFlag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",cb)':{tag:'(0019,"SIEMENS RA PLANE A",cb)',vr:"SL",name:"IrisRowStart",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",cc)':{tag:'(0019,"SIEMENS RA PLANE A",cc)',vr:"SL",name:"IrisRowEnd",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",cd)':{tag:'(0019,"SIEMENS RA PLANE A",cd)',vr:"SL",name:"IrisColumnStart",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",ce)':{tag:'(0019,"SIEMENS RA PLANE A",ce)',vr:"SL",name:"IrisColumnEnd",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",cf)':{tag:'(0019,"SIEMENS RA PLANE A",cf)',vr:"SL",name:"IrisAngulation",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",d1)':{tag:'(0019,"SIEMENS RA PLANE A",d1)',vr:"SS",name:"NumberOfFramesPlane",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",d2)':{tag:'(0019,"SIEMENS RA PLANE A",d2)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",d3)':{tag:'(0019,"SIEMENS RA PLANE A",d3)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",d4)':{tag:'(0019,"SIEMENS RA PLANE A",d4)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",d5)':{tag:'(0019,"SIEMENS RA PLANE A",d5)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",d6)':{tag:'(0019,"SIEMENS RA PLANE A",d6)',vr:"SS",name:"Internal",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",d7)':{tag:'(0019,"SIEMENS RA PLANE A",d7)',vr:"SS",name:"Internal",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",d8)':{tag:'(0019,"SIEMENS RA PLANE A",d8)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",d9)':{tag:'(0019,"SIEMENS RA PLANE A",d9)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",da)':{tag:'(0019,"SIEMENS RA PLANE A",da)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",db)':{tag:'(0019,"SIEMENS RA PLANE A",db)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",dc)':{tag:'(0019,"SIEMENS RA PLANE A",dc)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",dd)':{tag:'(0019,"SIEMENS RA PLANE A",dd)',vr:"SL",name:"AnatomicBackground",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",de)':{tag:'(0019,"SIEMENS RA PLANE A",de)',vr:"SL",name:"AutoWindowBase",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",df)':{tag:'(0019,"SIEMENS RA PLANE A",df)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",e0)':{tag:'(0019,"SIEMENS RA PLANE A",e0)',vr:"SL",name:"Internal",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA PLANE B",28)':{tag:'(0011,"SIEMENS RA PLANE B",28)',vr:"SL",name:"FluoroTimerB",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA PLANE B",29)':{tag:'(0011,"SIEMENS RA PLANE B",29)',vr:"SL",name:"FluoroSkinDoseB",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA PLANE B",2a)':{tag:'(0011,"SIEMENS RA PLANE B",2a)',vr:"SL",name:"TotalSkinDoseB",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA PLANE B",2b)':{tag:'(0011,"SIEMENS RA PLANE B",2b)',vr:"SL",name:"FluoroDoseAreaProductB",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA PLANE B",2c)':{tag:'(0011,"SIEMENS RA PLANE B",2c)',vr:"SL",name:"TotalDoseAreaProductB",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",18)':{tag:'(0019,"SIEMENS RA PLANE B",18)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",19)':{tag:'(0019,"SIEMENS RA PLANE B",19)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",1a)':{tag:'(0019,"SIEMENS RA PLANE B",1a)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",1b)':{tag:'(0019,"SIEMENS RA PLANE B",1b)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",1c)':{tag:'(0019,"SIEMENS RA PLANE B",1c)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",1d)':{tag:'(0019,"SIEMENS RA PLANE B",1d)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",1e)':{tag:'(0019,"SIEMENS RA PLANE B",1e)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",1f)':{tag:'(0019,"SIEMENS RA PLANE B",1f)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",20)':{tag:'(0019,"SIEMENS RA PLANE B",20)',vr:"SL",name:"SystemCalibFactorPlaneB",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",22)':{tag:'(0019,"SIEMENS RA PLANE B",22)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",24)':{tag:'(0019,"SIEMENS RA PLANE B",24)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",26)':{tag:'(0019,"SIEMENS RA PLANE B",26)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",28)':{tag:'(0019,"SIEMENS RA PLANE B",28)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",2a)':{tag:'(0019,"SIEMENS RA PLANE B",2a)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",2c)':{tag:'(0019,"SIEMENS RA PLANE B",2c)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",2e)':{tag:'(0019,"SIEMENS RA PLANE B",2e)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",30)':{tag:'(0019,"SIEMENS RA PLANE B",30)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",32)':{tag:'(0019,"SIEMENS RA PLANE B",32)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",34)':{tag:'(0019,"SIEMENS RA PLANE B",34)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",36)':{tag:'(0019,"SIEMENS RA PLANE B",36)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",38)':{tag:'(0019,"SIEMENS RA PLANE B",38)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",3a)':{tag:'(0019,"SIEMENS RA PLANE B",3a)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",3c)':{tag:'(0019,"SIEMENS RA PLANE B",3c)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",3e)':{tag:'(0019,"SIEMENS RA PLANE B",3e)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",40)':{tag:'(0019,"SIEMENS RA PLANE B",40)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",42)':{tag:'(0019,"SIEMENS RA PLANE B",42)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",44)':{tag:'(0019,"SIEMENS RA PLANE B",44)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",46)':{tag:'(0019,"SIEMENS RA PLANE B",46)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",48)':{tag:'(0019,"SIEMENS RA PLANE B",48)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",4a)':{tag:'(0019,"SIEMENS RA PLANE B",4a)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",4c)':{tag:'(0019,"SIEMENS RA PLANE B",4c)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",4e)':{tag:'(0019,"SIEMENS RA PLANE B",4e)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",50)':{tag:'(0019,"SIEMENS RA PLANE B",50)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",52)':{tag:'(0019,"SIEMENS RA PLANE B",52)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",54)':{tag:'(0019,"SIEMENS RA PLANE B",54)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",56)':{tag:'(0019,"SIEMENS RA PLANE B",56)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",58)':{tag:'(0019,"SIEMENS RA PLANE B",58)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",5a)':{tag:'(0019,"SIEMENS RA PLANE B",5a)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",5c)':{tag:'(0019,"SIEMENS RA PLANE B",5c)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",5e)':{tag:'(0019,"SIEMENS RA PLANE B",5e)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",60)':{tag:'(0019,"SIEMENS RA PLANE B",60)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",62)':{tag:'(0019,"SIEMENS RA PLANE B",62)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",64)':{tag:'(0019,"SIEMENS RA PLANE B",64)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",66)':{tag:'(0019,"SIEMENS RA PLANE B",66)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",68)':{tag:'(0019,"SIEMENS RA PLANE B",68)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",6a)':{tag:'(0019,"SIEMENS RA PLANE B",6a)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",6c)':{tag:'(0019,"SIEMENS RA PLANE B",6c)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",6e)':{tag:'(0019,"SIEMENS RA PLANE B",6e)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",70)':{tag:'(0019,"SIEMENS RA PLANE B",70)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",72)':{tag:'(0019,"SIEMENS RA PLANE B",72)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",74)':{tag:'(0019,"SIEMENS RA PLANE B",74)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",76)':{tag:'(0019,"SIEMENS RA PLANE B",76)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",78)':{tag:'(0019,"SIEMENS RA PLANE B",78)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",7a)':{tag:'(0019,"SIEMENS RA PLANE B",7a)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",7c)':{tag:'(0019,"SIEMENS RA PLANE B",7c)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",7e)':{tag:'(0019,"SIEMENS RA PLANE B",7e)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",80)':{tag:'(0019,"SIEMENS RA PLANE B",80)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",82)':{tag:'(0019,"SIEMENS RA PLANE B",82)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",84)':{tag:'(0019,"SIEMENS RA PLANE B",84)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",86)':{tag:'(0019,"SIEMENS RA PLANE B",86)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",88)':{tag:'(0019,"SIEMENS RA PLANE B",88)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",8a)':{tag:'(0019,"SIEMENS RA PLANE B",8a)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",8c)':{tag:'(0019,"SIEMENS RA PLANE B",8c)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",8e)':{tag:'(0019,"SIEMENS RA PLANE B",8e)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",90)':{tag:'(0019,"SIEMENS RA PLANE B",90)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",92)':{tag:'(0019,"SIEMENS RA PLANE B",92)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",94)':{tag:'(0019,"SIEMENS RA PLANE B",94)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",96)':{tag:'(0019,"SIEMENS RA PLANE B",96)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",98)':{tag:'(0019,"SIEMENS RA PLANE B",98)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",9a)':{tag:'(0019,"SIEMENS RA PLANE B",9a)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",9c)':{tag:'(0019,"SIEMENS RA PLANE B",9c)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",9e)':{tag:'(0019,"SIEMENS RA PLANE B",9e)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",a0)':{tag:'(0019,"SIEMENS RA PLANE B",a0)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",a2)':{tag:'(0019,"SIEMENS RA PLANE B",a2)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",a4)':{tag:'(0019,"SIEMENS RA PLANE B",a4)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",a6)':{tag:'(0019,"SIEMENS RA PLANE B",a6)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",a8)':{tag:'(0019,"SIEMENS RA PLANE B",a8)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",aa)':{tag:'(0019,"SIEMENS RA PLANE B",aa)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",ac)':{tag:'(0019,"SIEMENS RA PLANE B",ac)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RIS",10)':{tag:'(0011,"SIEMENS RIS",10)',vr:"LT",name:"PatientUID",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RIS",11)':{tag:'(0011,"SIEMENS RIS",11)',vr:"LT",name:"PatientID",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RIS",20)':{tag:'(0011,"SIEMENS RIS",20)',vr:"DA",name:"PatientRegistrationDate",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RIS",21)':{tag:'(0011,"SIEMENS RIS",21)',vr:"TM",name:"PatientRegistrationTime",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RIS",30)':{tag:'(0011,"SIEMENS RIS",30)',vr:"LT",name:"PatientnameRIS",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RIS",31)':{tag:'(0011,"SIEMENS RIS",31)',vr:"LT",name:"PatientprenameRIS",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RIS",40)':{tag:'(0011,"SIEMENS RIS",40)',vr:"LT",name:"PatientHospitalStatus",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RIS",41)':{tag:'(0011,"SIEMENS RIS",41)',vr:"LT",name:"MedicalAlerts",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RIS",42)':{tag:'(0011,"SIEMENS RIS",42)',vr:"LT",name:"ContrastAllergies",vm:"1",version:"PrivateTag"},'(0031,"SIEMENS RIS",10)':{tag:'(0031,"SIEMENS RIS",10)',vr:"LT",name:"RequestUID",vm:"1",version:"PrivateTag"},'(0031,"SIEMENS RIS",45)':{tag:'(0031,"SIEMENS RIS",45)',vr:"LT",name:"RequestingPhysician",vm:"1",version:"PrivateTag"},'(0031,"SIEMENS RIS",50)':{tag:'(0031,"SIEMENS RIS",50)',vr:"LT",name:"RequestedPhysician",vm:"1",version:"PrivateTag"},'(0033,"SIEMENS RIS",10)':{tag:'(0033,"SIEMENS RIS",10)',vr:"LT",name:"PatientStudyUID",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",00)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",00)',vr:"US",name:"AcquisitionType",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",01)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",01)',vr:"US",name:"AcquisitionMode",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",02)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",02)',vr:"US",name:"FootswitchIndex",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",03)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",03)',vr:"US",name:"AcquisitionRoom",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",04)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",04)',vr:"SL",name:"CurrentTimeProduct",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",05)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",05)',vr:"SL",name:"Dose",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",06)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",06)',vr:"SL",name:"SkinDosePercent",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",07)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",07)',vr:"SL",name:"SkinDoseAccumulation",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",08)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",08)',vr:"SL",name:"SkinDoseRate",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",0A)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",0A)',vr:"UL",name:"CopperFilter",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",0B)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",0B)',vr:"US",name:"MeasuringField",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",0C)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",0C)',vr:"SS",name:"PostBlankingCircle",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",0D)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",0D)',vr:"SS",name:"DynaAngles",vm:"2-2n",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",0E)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",0E)',vr:"SS",name:"TotalSteps",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",0F)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",0F)',vr:"SL",name:"DynaXRayInfo",vm:"3-3n",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",10)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",10)',vr:"US",name:"ModalityLUTInputGamma",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",11)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",11)',vr:"US",name:"ModalityLUTOutputGamma",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",12)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",12)',vr:"OB",name:"SH_STPAR",vm:"1-n",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",13)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",13)',vr:"US",name:"AcquisitionZoom",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",14)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",14)',vr:"SS",name:"DynaAngulationStepWidth",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",15)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",15)',vr:"US",name:"Harmonization",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",16)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",16)',vr:"US",name:"DRSingleFlag",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",17)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",17)',vr:"SL",name:"SourceToIsocenter",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",18)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",18)',vr:"US",name:"PressureData",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",19)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",19)',vr:"SL",name:"ECGIndexArray",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",1A)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",1A)',vr:"US",name:"FDFlag",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",1B)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",1B)',vr:"OB",name:"SH_ZOOM",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",1C)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",1C)',vr:"OB",name:"SH_COLPAR",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",1D)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",1D)',vr:"US",name:"K_Factor",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",1E)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",1E)',vr:"US",name:"EVE",vm:"8",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",1F)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",1F)',vr:"SL",name:"TotalSceneTime",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",20)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",20)',vr:"US",name:"RestoreFlag",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",21)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",21)',vr:"US",name:"StandMovementFlag",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",22)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",22)',vr:"US",name:"FDRows",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",23)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",23)',vr:"US",name:"FDColumns",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",24)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",24)',vr:"US",name:"TableMovementFlag",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",25)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",25)',vr:"LO",name:"OriginalOrganProgramName",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",26)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",26)',vr:"DS",name:"CrispyXPIFilter",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",00)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",00)',vr:"US",name:"ViewNative",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",01)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",01)',vr:"US",name:"OriginalSeriesNumber",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",02)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",02)',vr:"US",name:"OriginalImageNumber",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",03)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",03)',vr:"US",name:"WinCenter",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",04)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",04)',vr:"US",name:"WinWidth",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",05)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",05)',vr:"US",name:"WinBrightness",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",06)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",06)',vr:"US",name:"WinContrast",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",07)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",07)',vr:"US",name:"OriginalFrameNumber",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",08)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",08)',vr:"US",name:"OriginalMaskFrameNumber",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",09)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",09)',vr:"US",name:"Opac",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",0A)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",0A)',vr:"US",name:"OriginalNumberOfFrames",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",0B)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",0B)',vr:"DS",name:"OriginalSceneDuration",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",0C)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",0C)',vr:"LO",name:"IdentifierLOID",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",0D)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",0D)',vr:"SS",name:"OriginalSceneVFRInfo",vm:"1-n",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",0E)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",0E)',vr:"SS",name:"OriginalFrameECGPosition",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",0F)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",0F)',vr:"SS",name:"OriginalECG1stFrameOffset_retired",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",10)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",10)',vr:"SS",name:"ZoomFlag",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",11)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",11)',vr:"US",name:"Flex",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",12)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",12)',vr:"US",name:"NumberOfMaskFrames",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",13)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",13)',vr:"US",name:"NumberOfFillFrames",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",14)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",14)',vr:"US",name:"SeriesNumber",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",15)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",15)',vr:"IS",name:"ImageNumber",vm:"1",version:"PrivateTag"},'(0023,"SIEMENS SMS-AX QUANT 1.0",00)':{tag:'(0023,"SIEMENS SMS-AX QUANT 1.0",00)',vr:"DS",name:"HorizontalCalibrationPixelSize",vm:"2",version:"PrivateTag"},'(0023,"SIEMENS SMS-AX QUANT 1.0",01)':{tag:'(0023,"SIEMENS SMS-AX QUANT 1.0",01)',vr:"DS",name:"VerticalCalibrationPixelSize",vm:"2",version:"PrivateTag"},'(0023,"SIEMENS SMS-AX QUANT 1.0",02)':{tag:'(0023,"SIEMENS SMS-AX QUANT 1.0",02)',vr:"LO",name:"CalibrationObject",vm:"1",version:"PrivateTag"},'(0023,"SIEMENS SMS-AX QUANT 1.0",03)':{tag:'(0023,"SIEMENS SMS-AX QUANT 1.0",03)',vr:"DS",name:"CalibrationObjectSize",vm:"1",version:"PrivateTag"},'(0023,"SIEMENS SMS-AX QUANT 1.0",04)':{tag:'(0023,"SIEMENS SMS-AX QUANT 1.0",04)',vr:"LO",name:"CalibrationMethod",vm:"1",version:"PrivateTag"},'(0023,"SIEMENS SMS-AX QUANT 1.0",05)':{tag:'(0023,"SIEMENS SMS-AX QUANT 1.0",05)',vr:"ST",name:"Filename",vm:"1",version:"PrivateTag"},'(0023,"SIEMENS SMS-AX QUANT 1.0",06)':{tag:'(0023,"SIEMENS SMS-AX QUANT 1.0",06)',vr:"IS",name:"FrameNumber",vm:"1",version:"PrivateTag"},'(0023,"SIEMENS SMS-AX QUANT 1.0",07)':{tag:'(0023,"SIEMENS SMS-AX QUANT 1.0",07)',vr:"IS",name:"CalibrationFactorMultiplicity",vm:"2",version:"PrivateTag"},'(0023,"SIEMENS SMS-AX QUANT 1.0",08)':{tag:'(0023,"SIEMENS SMS-AX QUANT 1.0",08)',vr:"IS",name:"CalibrationTODValue",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",00)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",00)',vr:"US",name:"ReviewMode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",01)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",01)',vr:"US",name:"AnatomicalBackgroundPercent",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",02)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",02)',vr:"US",name:"NumberOfPhases",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",03)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",03)',vr:"US",name:"ApplyAnatomicalBackground",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",04)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",04)',vr:"SS",name:"PixelShiftArray",vm:"4-4n",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",05)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",05)',vr:"US",name:"Brightness",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",06)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",06)',vr:"US",name:"Contrast",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",07)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",07)',vr:"US",name:"Enabled",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",08)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",08)',vr:"US",name:"NativeEdgeEnhancementPercentGain",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",09)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",09)',vr:"SS",name:"NativeEdgeEnhancementLUTIndex",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",0A)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",0A)',vr:"SS",name:"NativeEdgeEnhancementKernelSize",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",0B)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",0B)',vr:"US",name:"SubtrEdgeEnhancementPercentGain",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",0C)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",0C)',vr:"SS",name:"SubtrEdgeEnhancementLUTIndex",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",0D)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",0D)',vr:"SS",name:"SubtrEdgeEnhancementKernelSize",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",0E)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",0E)',vr:"US",name:"FadePercent",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",0F)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",0F)',vr:"US",name:"FlippedBeforeLateralityApplied",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",10)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",10)',vr:"US",name:"ApplyFade",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",12)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",12)',vr:"US",name:"Zoom",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",13)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",13)',vr:"SS",name:"PanX",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",14)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",14)',vr:"SS",name:"PanY",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",15)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",15)',vr:"SS",name:"NativeEdgeEnhancementAdvPercGain",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",16)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",16)',vr:"SS",name:"SubtrEdgeEnhancementAdvPercGain",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",17)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",17)',vr:"US",name:"InvertFlag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",1A)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",1A)',vr:"OB",name:"Quant1KOverlay",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",1B)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",1B)',vr:"US",name:"OriginalResolution",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",1C)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",1C)',vr:"DS",name:"AutoWindowCenter",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",1D)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",1D)',vr:"DS",name:"AutoWindowWidth",vm:"1",version:"PrivateTag"},'(0009,"SIENET",01)':{tag:'(0009,"SIENET",01)',vr:"US",name:"SIENETCommandField",vm:"1",version:"PrivateTag"},'(0009,"SIENET",14)':{tag:'(0009,"SIENET",14)',vr:"LT",name:"ReceiverPLA",vm:"1",version:"PrivateTag"},'(0009,"SIENET",16)':{tag:'(0009,"SIENET",16)',vr:"US",name:"TransferPriority",vm:"1",version:"PrivateTag"},'(0009,"SIENET",29)':{tag:'(0009,"SIENET",29)',vr:"LT",name:"ActualUser",vm:"1",version:"PrivateTag"},'(0095,"SIENET",01)':{tag:'(0095,"SIENET",01)',vr:"LT",name:"ExaminationFolderID",vm:"1",version:"PrivateTag"},'(0095,"SIENET",04)':{tag:'(0095,"SIENET",04)',vr:"UL",name:"FolderReportedStatus",vm:"1",version:"PrivateTag"},'(0095,"SIENET",05)':{tag:'(0095,"SIENET",05)',vr:"LT",name:"FolderReportingRadiologist",vm:"1",version:"PrivateTag"},'(0095,"SIENET",07)':{tag:'(0095,"SIENET",07)',vr:"LT",name:"SIENETISAPLA",vm:"1",version:"PrivateTag"},'(0099,"SIENET",02)':{tag:'(0099,"SIENET",02)',vr:"UL",name:"DataObjectAttributes",vm:"1",version:"PrivateTag"},'(0009,"SPI RELEASE 1",10)':{tag:'(0009,"SPI RELEASE 1",10)',vr:"LT",name:"Comments",vm:"1",version:"PrivateTag"},'(0009,"SPI RELEASE 1",15)':{tag:'(0009,"SPI RELEASE 1",15)',vr:"LO",name:"SPIImageUID",vm:"1",version:"PrivateTag"},'(0009,"SPI RELEASE 1",40)':{tag:'(0009,"SPI RELEASE 1",40)',vr:"US",name:"DataObjectType",vm:"1",version:"PrivateTag"},'(0009,"SPI RELEASE 1",41)':{tag:'(0009,"SPI RELEASE 1",41)',vr:"LO",name:"DataObjectSubtype",vm:"1",version:"PrivateTag"},'(0011,"SPI RELEASE 1",10)':{tag:'(0011,"SPI RELEASE 1",10)',vr:"LO",name:"Organ",vm:"1",version:"PrivateTag"},'(0011,"SPI RELEASE 1",15)':{tag:'(0011,"SPI RELEASE 1",15)',vr:"LO",name:"AllergyIndication",vm:"1",version:"PrivateTag"},'(0011,"SPI RELEASE 1",20)':{tag:'(0011,"SPI RELEASE 1",20)',vr:"LO",name:"Pregnancy",vm:"1",version:"PrivateTag"},'(0029,"SPI RELEASE 1",60)':{tag:'(0029,"SPI RELEASE 1",60)',vr:"LT",name:"CompressionAlgorithm",vm:"1",version:"PrivateTag"},'(0009,"SPI Release 1",10)':{tag:'(0009,"SPI Release 1",10)',vr:"LT",name:"Comments",vm:"1",version:"PrivateTag"},'(0009,"SPI Release 1",15)':{tag:'(0009,"SPI Release 1",15)',vr:"LO",name:"SPIImageUID",vm:"1",version:"PrivateTag"},'(0009,"SPI Release 1",40)':{tag:'(0009,"SPI Release 1",40)',vr:"US",name:"DataObjectType",vm:"1",version:"PrivateTag"},'(0009,"SPI Release 1",41)':{tag:'(0009,"SPI Release 1",41)',vr:"LO",name:"DataObjectSubtype",vm:"1",version:"PrivateTag"},'(0011,"SPI Release 1",10)':{tag:'(0011,"SPI Release 1",10)',vr:"LO",name:"Organ",vm:"1",version:"PrivateTag"},'(0011,"SPI Release 1",15)':{tag:'(0011,"SPI Release 1",15)',vr:"LO",name:"AllergyIndication",vm:"1",version:"PrivateTag"},'(0011,"SPI Release 1",20)':{tag:'(0011,"SPI Release 1",20)',vr:"LO",name:"Pregnancy",vm:"1",version:"PrivateTag"},'(0029,"SPI Release 1",60)':{tag:'(0029,"SPI Release 1",60)',vr:"LT",name:"CompressionAlgorithm",vm:"1",version:"PrivateTag"},'(0009,"SPI",10)':{tag:'(0009,"SPI",10)',vr:"LO",name:"Comments",vm:"1",version:"PrivateTag"},'(0009,"SPI",15)':{tag:'(0009,"SPI",15)',vr:"LO",name:"SPIImageUID",vm:"1",version:"PrivateTag"},'(0009,"SPI",40)':{tag:'(0009,"SPI",40)',vr:"US",name:"DataObjectType",vm:"1",version:"PrivateTag"},'(0009,"SPI",41)':{tag:'(0009,"SPI",41)',vr:"LT",name:"DataObjectSubtype",vm:"1",version:"PrivateTag"},'(0011,"SPI",10)':{tag:'(0011,"SPI",10)',vr:"LT",name:"Organ",vm:"1",version:"PrivateTag"},'(0011,"SPI",15)':{tag:'(0011,"SPI",15)',vr:"LT",name:"AllergyIndication",vm:"1",version:"PrivateTag"},'(0011,"SPI",20)':{tag:'(0011,"SPI",20)',vr:"LT",name:"Pregnancy",vm:"1",version:"PrivateTag"},'(0029,"SPI",60)':{tag:'(0029,"SPI",60)',vr:"LT",name:"CompressionAlgorithm",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",00)':{tag:'(0009,"SPI-P Release 1",00)',vr:"LT",name:"DataObjectRecognitionCode",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",04)':{tag:'(0009,"SPI-P Release 1",04)',vr:"LO",name:"ImageDataConsistence",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",08)':{tag:'(0009,"SPI-P Release 1",08)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",12)':{tag:'(0009,"SPI-P Release 1",12)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",15)':{tag:'(0009,"SPI-P Release 1",15)',vr:"LO",name:"UniqueIdentifier",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",16)':{tag:'(0009,"SPI-P Release 1",16)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",18)':{tag:'(0009,"SPI-P Release 1",18)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",21)':{tag:'(0009,"SPI-P Release 1",21)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",31)':{tag:'(0009,"SPI-P Release 1",31)',vr:"LT",name:"PACSUniqueIdentifier",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",34)':{tag:'(0009,"SPI-P Release 1",34)',vr:"LT",name:"ClusterUniqueIdentifier",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",38)':{tag:'(0009,"SPI-P Release 1",38)',vr:"LT",name:"SystemUniqueIdentifier",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",39)':{tag:'(0009,"SPI-P Release 1",39)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",51)':{tag:'(0009,"SPI-P Release 1",51)',vr:"LT",name:"StudyUniqueIdentifier",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",61)':{tag:'(0009,"SPI-P Release 1",61)',vr:"LT",name:"SeriesUniqueIdentifier",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",91)':{tag:'(0009,"SPI-P Release 1",91)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",f2)':{tag:'(0009,"SPI-P Release 1",f2)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",f3)':{tag:'(0009,"SPI-P Release 1",f3)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",f4)':{tag:'(0009,"SPI-P Release 1",f4)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",f5)':{tag:'(0009,"SPI-P Release 1",f5)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",f7)':{tag:'(0009,"SPI-P Release 1",f7)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0011,"SPI-P Release 1",10)':{tag:'(0011,"SPI-P Release 1",10)',vr:"LT",name:"PatientEntryID",vm:"1",version:"PrivateTag"},'(0011,"SPI-P Release 1",21)':{tag:'(0011,"SPI-P Release 1",21)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0011,"SPI-P Release 1",22)':{tag:'(0011,"SPI-P Release 1",22)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0011,"SPI-P Release 1",31)':{tag:'(0011,"SPI-P Release 1",31)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0011,"SPI-P Release 1",32)':{tag:'(0011,"SPI-P Release 1",32)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",00)':{tag:'(0019,"SPI-P Release 1",00)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",01)':{tag:'(0019,"SPI-P Release 1",01)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",02)':{tag:'(0019,"SPI-P Release 1",02)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",10)':{tag:'(0019,"SPI-P Release 1",10)',vr:"US",name:"MainsFrequency",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",25)':{tag:'(0019,"SPI-P Release 1",25)',vr:"LT",name:"OriginalPixelDataQuality",vm:"1-n",version:"PrivateTag"},'(0019,"SPI-P Release 1",30)':{tag:'(0019,"SPI-P Release 1",30)',vr:"US",name:"ECGTriggering",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",31)':{tag:'(0019,"SPI-P Release 1",31)',vr:"UN",name:"ECG1Offset",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",32)':{tag:'(0019,"SPI-P Release 1",32)',vr:"UN",name:"ECG2Offset1",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",33)':{tag:'(0019,"SPI-P Release 1",33)',vr:"UN",name:"ECG2Offset2",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",50)':{tag:'(0019,"SPI-P Release 1",50)',vr:"US",name:"VideoScanMode",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",51)':{tag:'(0019,"SPI-P Release 1",51)',vr:"US",name:"VideoLineRate",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",60)':{tag:'(0019,"SPI-P Release 1",60)',vr:"US",name:"XrayTechnique",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",61)':{tag:'(0019,"SPI-P Release 1",61)',vr:"DS",name:"ImageIdentifierFromat",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",62)':{tag:'(0019,"SPI-P Release 1",62)',vr:"US",name:"IrisDiaphragm",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",63)':{tag:'(0019,"SPI-P Release 1",63)',vr:"CS",name:"Filter",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",64)':{tag:'(0019,"SPI-P Release 1",64)',vr:"CS",name:"CineParallel",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",65)':{tag:'(0019,"SPI-P Release 1",65)',vr:"CS",name:"CineMaster",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",70)':{tag:'(0019,"SPI-P Release 1",70)',vr:"US",name:"ExposureChannel",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",71)':{tag:'(0019,"SPI-P Release 1",71)',vr:"UN",name:"ExposureChannelFirstImage",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",72)':{tag:'(0019,"SPI-P Release 1",72)',vr:"US",name:"ProcessingChannel",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",80)':{tag:'(0019,"SPI-P Release 1",80)',vr:"DS",name:"AcquisitionDelay",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",81)':{tag:'(0019,"SPI-P Release 1",81)',vr:"UN",name:"RelativeImageTime",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",90)':{tag:'(0019,"SPI-P Release 1",90)',vr:"CS",name:"VideoWhiteCompression",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",a0)':{tag:'(0019,"SPI-P Release 1",a0)',vr:"US",name:"Angulation",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",a1)':{tag:'(0019,"SPI-P Release 1",a1)',vr:"US",name:"Rotation",vm:"1",version:"PrivateTag"},'(0021,"SPI-P Release 1",12)':{tag:'(0021,"SPI-P Release 1",12)',vr:"LT",name:"SeriesUniqueIdentifier",vm:"1",version:"PrivateTag"},'(0021,"SPI-P Release 1",14)':{tag:'(0021,"SPI-P Release 1",14)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",00)':{tag:'(0029,"SPI-P Release 1",00)',vr:"DS",name:"Unknown",vm:"4",version:"PrivateTag"},'(0029,"SPI-P Release 1",20)':{tag:'(0029,"SPI-P Release 1",20)',vr:"DS",name:"PixelAspectRatio",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",25)':{tag:'(0029,"SPI-P Release 1",25)',vr:"LO",name:"ProcessedPixelDataQuality",vm:"1-n",version:"PrivateTag"},'(0029,"SPI-P Release 1",30)':{tag:'(0029,"SPI-P Release 1",30)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",38)':{tag:'(0029,"SPI-P Release 1",38)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",60)':{tag:'(0029,"SPI-P Release 1",60)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",61)':{tag:'(0029,"SPI-P Release 1",61)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",67)':{tag:'(0029,"SPI-P Release 1",67)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",70)':{tag:'(0029,"SPI-P Release 1",70)',vr:"LT",name:"WindowID",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",71)':{tag:'(0029,"SPI-P Release 1",71)',vr:"CS",name:"VideoInvertSubtracted",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",72)':{tag:'(0029,"SPI-P Release 1",72)',vr:"CS",name:"VideoInvertNonsubtracted",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",77)':{tag:'(0029,"SPI-P Release 1",77)',vr:"CS",name:"WindowSelectStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",78)':{tag:'(0029,"SPI-P Release 1",78)',vr:"LT",name:"ECGDisplayPrintingID",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",79)':{tag:'(0029,"SPI-P Release 1",79)',vr:"CS",name:"ECGDisplayPrinting",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",7e)':{tag:'(0029,"SPI-P Release 1",7e)',vr:"CS",name:"ECGDisplayPrintingEnableStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",7f)':{tag:'(0029,"SPI-P Release 1",7f)',vr:"CS",name:"ECGDisplayPrintingSelectStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",80)':{tag:'(0029,"SPI-P Release 1",80)',vr:"LT",name:"PhysiologicalDisplayID",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",81)':{tag:'(0029,"SPI-P Release 1",81)',vr:"US",name:"PreferredPhysiologicalChannelDisplay",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",8e)':{tag:'(0029,"SPI-P Release 1",8e)',vr:"CS",name:"PhysiologicalDisplayEnableStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",8f)':{tag:'(0029,"SPI-P Release 1",8f)',vr:"CS",name:"PhysiologicalDisplaySelectStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",c0)':{tag:'(0029,"SPI-P Release 1",c0)',vr:"LT",name:"FunctionalShutterID",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",c1)':{tag:'(0029,"SPI-P Release 1",c1)',vr:"US",name:"FieldOfShutter",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",c5)':{tag:'(0029,"SPI-P Release 1",c5)',vr:"LT",name:"FieldOfShutterRectangle",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",ce)':{tag:'(0029,"SPI-P Release 1",ce)',vr:"CS",name:"ShutterEnableStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",cf)':{tag:'(0029,"SPI-P Release 1",cf)',vr:"CS",name:"ShutterSelectStatus",vm:"1",version:"PrivateTag"},'(7FE1,"SPI-P Release 1",10)':{tag:'(7FE1,"SPI-P Release 1",10)',vr:"ox",name:"PixelData",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1;1",c0)':{tag:'(0009,"SPI-P Release 1;1",c0)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1;1",c1)':{tag:'(0009,"SPI-P Release 1;1",c1)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",00)':{tag:'(0019,"SPI-P Release 1;1",00)',vr:"UN",name:"PhysiologicalDataType",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",01)':{tag:'(0019,"SPI-P Release 1;1",01)',vr:"UN",name:"PhysiologicalDataChannelAndKind",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",02)':{tag:'(0019,"SPI-P Release 1;1",02)',vr:"US",name:"SampleBitsAllocated",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",03)':{tag:'(0019,"SPI-P Release 1;1",03)',vr:"US",name:"SampleBitsStored",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",04)':{tag:'(0019,"SPI-P Release 1;1",04)',vr:"US",name:"SampleHighBit",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",05)':{tag:'(0019,"SPI-P Release 1;1",05)',vr:"US",name:"SampleRepresentation",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",06)':{tag:'(0019,"SPI-P Release 1;1",06)',vr:"UN",name:"SmallestSampleValue",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",07)':{tag:'(0019,"SPI-P Release 1;1",07)',vr:"UN",name:"LargestSampleValue",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",08)':{tag:'(0019,"SPI-P Release 1;1",08)',vr:"UN",name:"NumberOfSamples",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",09)':{tag:'(0019,"SPI-P Release 1;1",09)',vr:"UN",name:"SampleData",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",0a)':{tag:'(0019,"SPI-P Release 1;1",0a)',vr:"UN",name:"SampleRate",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",10)':{tag:'(0019,"SPI-P Release 1;1",10)',vr:"UN",name:"PhysiologicalDataType2",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",11)':{tag:'(0019,"SPI-P Release 1;1",11)',vr:"UN",name:"PhysiologicalDataChannelAndKind2",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",12)':{tag:'(0019,"SPI-P Release 1;1",12)',vr:"US",name:"SampleBitsAllocated2",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",13)':{tag:'(0019,"SPI-P Release 1;1",13)',vr:"US",name:"SampleBitsStored2",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",14)':{tag:'(0019,"SPI-P Release 1;1",14)',vr:"US",name:"SampleHighBit2",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",15)':{tag:'(0019,"SPI-P Release 1;1",15)',vr:"US",name:"SampleRepresentation2",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",16)':{tag:'(0019,"SPI-P Release 1;1",16)',vr:"UN",name:"SmallestSampleValue2",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",17)':{tag:'(0019,"SPI-P Release 1;1",17)',vr:"UN",name:"LargestSampleValue2",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",18)':{tag:'(0019,"SPI-P Release 1;1",18)',vr:"UN",name:"NumberOfSamples2",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",19)':{tag:'(0019,"SPI-P Release 1;1",19)',vr:"UN",name:"SampleData2",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",1a)':{tag:'(0019,"SPI-P Release 1;1",1a)',vr:"UN",name:"SampleRate2",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;1",00)':{tag:'(0029,"SPI-P Release 1;1",00)',vr:"LT",name:"ZoomID",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;1",01)':{tag:'(0029,"SPI-P Release 1;1",01)',vr:"DS",name:"ZoomRectangle",vm:"1-n",version:"PrivateTag"},'(0029,"SPI-P Release 1;1",03)':{tag:'(0029,"SPI-P Release 1;1",03)',vr:"DS",name:"ZoomFactor",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;1",04)':{tag:'(0029,"SPI-P Release 1;1",04)',vr:"US",name:"ZoomFunction",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;1",0e)':{tag:'(0029,"SPI-P Release 1;1",0e)',vr:"CS",name:"ZoomEnableStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;1",0f)':{tag:'(0029,"SPI-P Release 1;1",0f)',vr:"CS",name:"ZoomSelectStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;1",40)':{tag:'(0029,"SPI-P Release 1;1",40)',vr:"LT",name:"MagnifyingGlassID",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;1",41)':{tag:'(0029,"SPI-P Release 1;1",41)',vr:"DS",name:"MagnifyingGlassRectangle",vm:"1-n",version:"PrivateTag"},'(0029,"SPI-P Release 1;1",43)':{tag:'(0029,"SPI-P Release 1;1",43)',vr:"DS",name:"MagnifyingGlassFactor",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;1",44)':{tag:'(0029,"SPI-P Release 1;1",44)',vr:"US",name:"MagnifyingGlassFunction",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;1",4e)':{tag:'(0029,"SPI-P Release 1;1",4e)',vr:"CS",name:"MagnifyingGlassEnableStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;1",4f)':{tag:'(0029,"SPI-P Release 1;1",4f)',vr:"CS",name:"MagnifyingGlassSelectStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;2",00)':{tag:'(0029,"SPI-P Release 1;2",00)',vr:"LT",name:"SubtractionMaskID",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;2",04)':{tag:'(0029,"SPI-P Release 1;2",04)',vr:"UN",name:"MaskingFunction",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;2",0c)':{tag:'(0029,"SPI-P Release 1;2",0c)',vr:"UN",name:"ProprietaryMaskingParameters",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;2",1e)':{tag:'(0029,"SPI-P Release 1;2",1e)',vr:"CS",name:"SubtractionMaskEnableStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;2",1f)':{tag:'(0029,"SPI-P Release 1;2",1f)',vr:"CS",name:"SubtractionMaskSelectStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;3",00)':{tag:'(0029,"SPI-P Release 1;3",00)',vr:"LT",name:"ImageEnhancementID",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;3",01)':{tag:'(0029,"SPI-P Release 1;3",01)',vr:"LT",name:"ImageEnhancement",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;3",02)':{tag:'(0029,"SPI-P Release 1;3",02)',vr:"LT",name:"ConvolutionID",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;3",03)':{tag:'(0029,"SPI-P Release 1;3",03)',vr:"LT",name:"ConvolutionType",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;3",04)':{tag:'(0029,"SPI-P Release 1;3",04)',vr:"LT",name:"ConvolutionKernelSizeID",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;3",05)':{tag:'(0029,"SPI-P Release 1;3",05)',vr:"US",name:"ConvolutionKernelSize",vm:"2",version:"PrivateTag"},'(0029,"SPI-P Release 1;3",06)':{tag:'(0029,"SPI-P Release 1;3",06)',vr:"US",name:"ConvolutionKernel",vm:"1-n",version:"PrivateTag"},'(0029,"SPI-P Release 1;3",0c)':{tag:'(0029,"SPI-P Release 1;3",0c)',vr:"DS",name:"EnhancementGain",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;3",1e)':{tag:'(0029,"SPI-P Release 1;3",1e)',vr:"CS",name:"ImageEnhancementEnableStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;3",1f)':{tag:'(0029,"SPI-P Release 1;3",1f)',vr:"CS",name:"ImageEnhancementSelectStatus",vm:"1",version:"PrivateTag"},'(0011,"SPI-P Release 2;1",18)':{tag:'(0011,"SPI-P Release 2;1",18)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0023,"SPI-P Release 2;1",0d)':{tag:'(0023,"SPI-P Release 2;1",0d)',vr:"UI",name:"Unknown",vm:"1",version:"PrivateTag"},'(0023,"SPI-P Release 2;1",0e)':{tag:'(0023,"SPI-P Release 2;1",0e)',vr:"UI",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P-GV-CT Release 1",00)':{tag:'(0009,"SPI-P-GV-CT Release 1",00)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P-GV-CT Release 1",10)':{tag:'(0009,"SPI-P-GV-CT Release 1",10)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P-GV-CT Release 1",20)':{tag:'(0009,"SPI-P-GV-CT Release 1",20)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P-GV-CT Release 1",30)':{tag:'(0009,"SPI-P-GV-CT Release 1",30)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P-GV-CT Release 1",40)':{tag:'(0009,"SPI-P-GV-CT Release 1",40)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P-GV-CT Release 1",50)':{tag:'(0009,"SPI-P-GV-CT Release 1",50)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P-GV-CT Release 1",60)':{tag:'(0009,"SPI-P-GV-CT Release 1",60)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P-GV-CT Release 1",70)':{tag:'(0009,"SPI-P-GV-CT Release 1",70)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P-GV-CT Release 1",75)':{tag:'(0009,"SPI-P-GV-CT Release 1",75)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P-GV-CT Release 1",80)':{tag:'(0009,"SPI-P-GV-CT Release 1",80)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P-GV-CT Release 1",90)':{tag:'(0009,"SPI-P-GV-CT Release 1",90)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",08)':{tag:'(0019,"SPI-P-GV-CT Release 1",08)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",09)':{tag:'(0019,"SPI-P-GV-CT Release 1",09)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",0a)':{tag:'(0019,"SPI-P-GV-CT Release 1",0a)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",10)':{tag:'(0019,"SPI-P-GV-CT Release 1",10)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",20)':{tag:'(0019,"SPI-P-GV-CT Release 1",20)',vr:"TM",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",50)':{tag:'(0019,"SPI-P-GV-CT Release 1",50)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",60)':{tag:'(0019,"SPI-P-GV-CT Release 1",60)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",61)':{tag:'(0019,"SPI-P-GV-CT Release 1",61)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",63)':{tag:'(0019,"SPI-P-GV-CT Release 1",63)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",64)':{tag:'(0019,"SPI-P-GV-CT Release 1",64)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",65)':{tag:'(0019,"SPI-P-GV-CT Release 1",65)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",70)':{tag:'(0019,"SPI-P-GV-CT Release 1",70)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",80)':{tag:'(0019,"SPI-P-GV-CT Release 1",80)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",81)':{tag:'(0019,"SPI-P-GV-CT Release 1",81)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",90)':{tag:'(0019,"SPI-P-GV-CT Release 1",90)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",a0)':{tag:'(0019,"SPI-P-GV-CT Release 1",a0)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",a1)':{tag:'(0019,"SPI-P-GV-CT Release 1",a1)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",a2)':{tag:'(0019,"SPI-P-GV-CT Release 1",a2)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",a3)':{tag:'(0019,"SPI-P-GV-CT Release 1",a3)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",b0)':{tag:'(0019,"SPI-P-GV-CT Release 1",b0)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",b1)':{tag:'(0019,"SPI-P-GV-CT Release 1",b1)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",20)':{tag:'(0021,"SPI-P-GV-CT Release 1",20)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",30)':{tag:'(0021,"SPI-P-GV-CT Release 1",30)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",40)':{tag:'(0021,"SPI-P-GV-CT Release 1",40)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",50)':{tag:'(0021,"SPI-P-GV-CT Release 1",50)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",60)':{tag:'(0021,"SPI-P-GV-CT Release 1",60)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",70)':{tag:'(0021,"SPI-P-GV-CT Release 1",70)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",80)':{tag:'(0021,"SPI-P-GV-CT Release 1",80)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",90)':{tag:'(0021,"SPI-P-GV-CT Release 1",90)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",a0)':{tag:'(0021,"SPI-P-GV-CT Release 1",a0)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",a1)':{tag:'(0021,"SPI-P-GV-CT Release 1",a1)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",a2)':{tag:'(0021,"SPI-P-GV-CT Release 1",a2)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",a3)':{tag:'(0021,"SPI-P-GV-CT Release 1",a3)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",a4)':{tag:'(0021,"SPI-P-GV-CT Release 1",a4)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",b0)':{tag:'(0021,"SPI-P-GV-CT Release 1",b0)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",c0)':{tag:'(0021,"SPI-P-GV-CT Release 1",c0)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-GV-CT Release 1",10)':{tag:'(0029,"SPI-P-GV-CT Release 1",10)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-GV-CT Release 1",30)':{tag:'(0029,"SPI-P-GV-CT Release 1",30)',vr:"UL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-GV-CT Release 1",31)':{tag:'(0029,"SPI-P-GV-CT Release 1",31)',vr:"UL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-GV-CT Release 1",32)':{tag:'(0029,"SPI-P-GV-CT Release 1",32)',vr:"UL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-GV-CT Release 1",33)':{tag:'(0029,"SPI-P-GV-CT Release 1",33)',vr:"UL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-GV-CT Release 1",80)':{tag:'(0029,"SPI-P-GV-CT Release 1",80)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-GV-CT Release 1",90)':{tag:'(0029,"SPI-P-GV-CT Release 1",90)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-GV-CT Release 1",d0)':{tag:'(0029,"SPI-P-GV-CT Release 1",d0)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-GV-CT Release 1",d1)':{tag:'(0029,"SPI-P-GV-CT Release 1",d1)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-PCR Release 2",30)':{tag:'(0019,"SPI-P-PCR Release 2",30)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-Private-CWS Release 1",00)':{tag:'(0021,"SPI-P-Private-CWS Release 1",00)',vr:"LT",name:"WindowOfImagesID",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-Private-CWS Release 1",01)':{tag:'(0021,"SPI-P-Private-CWS Release 1",01)',vr:"CS",name:"WindowOfImagesType",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-Private-CWS Release 1",02)':{tag:'(0021,"SPI-P-Private-CWS Release 1",02)',vr:"IS",name:"WindowOfImagesScope",vm:"1-n",version:"PrivateTag"},'(0019,"SPI-P-Private-DCI Release 1",10)':{tag:'(0019,"SPI-P-Private-DCI Release 1",10)',vr:"UN",name:"ECGTimeMapDataBitsAllocated",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-Private-DCI Release 1",11)':{tag:'(0019,"SPI-P-Private-DCI Release 1",11)',vr:"UN",name:"ECGTimeMapDataBitsStored",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-Private-DCI Release 1",12)':{tag:'(0019,"SPI-P-Private-DCI Release 1",12)',vr:"UN",name:"ECGTimeMapDataHighBit",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-Private-DCI Release 1",13)':{tag:'(0019,"SPI-P-Private-DCI Release 1",13)',vr:"UN",name:"ECGTimeMapDataRepresentation",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-Private-DCI Release 1",14)':{tag:'(0019,"SPI-P-Private-DCI Release 1",14)',vr:"UN",name:"ECGTimeMapDataSmallestDataValue",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-Private-DCI Release 1",15)':{tag:'(0019,"SPI-P-Private-DCI Release 1",15)',vr:"UN",name:"ECGTimeMapDataLargestDataValue",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-Private-DCI Release 1",16)':{tag:'(0019,"SPI-P-Private-DCI Release 1",16)',vr:"UN",name:"ECGTimeMapDataNumberOfDataValues",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-Private-DCI Release 1",17)':{tag:'(0019,"SPI-P-Private-DCI Release 1",17)',vr:"UN",name:"ECGTimeMapData",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-Private_CDS Release 1",40)':{tag:'(0021,"SPI-P-Private_CDS Release 1",40)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_CDS Release 1",00)':{tag:'(0029,"SPI-P-Private_CDS Release 1",00)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-Private_ICS Release 1",30)':{tag:'(0019,"SPI-P-Private_ICS Release 1",30)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-Private_ICS Release 1",31)':{tag:'(0019,"SPI-P-Private_ICS Release 1",31)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",08)':{tag:'(0029,"SPI-P-Private_ICS Release 1",08)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",0f)':{tag:'(0029,"SPI-P-Private_ICS Release 1",0f)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",10)':{tag:'(0029,"SPI-P-Private_ICS Release 1",10)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",1b)':{tag:'(0029,"SPI-P-Private_ICS Release 1",1b)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",1c)':{tag:'(0029,"SPI-P-Private_ICS Release 1",1c)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",21)':{tag:'(0029,"SPI-P-Private_ICS Release 1",21)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",43)':{tag:'(0029,"SPI-P-Private_ICS Release 1",43)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",44)':{tag:'(0029,"SPI-P-Private_ICS Release 1",44)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",4C)':{tag:'(0029,"SPI-P-Private_ICS Release 1",4C)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",67)':{tag:'(0029,"SPI-P-Private_ICS Release 1",67)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",68)':{tag:'(0029,"SPI-P-Private_ICS Release 1",68)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",6A)':{tag:'(0029,"SPI-P-Private_ICS Release 1",6A)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",6B)':{tag:'(0029,"SPI-P-Private_ICS Release 1",6B)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;1",00)':{tag:'(0029,"SPI-P-Private_ICS Release 1;1",00)',vr:"SL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;1",05)':{tag:'(0029,"SPI-P-Private_ICS Release 1;1",05)',vr:"FL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;1",06)':{tag:'(0029,"SPI-P-Private_ICS Release 1;1",06)',vr:"FL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;1",20)':{tag:'(0029,"SPI-P-Private_ICS Release 1;1",20)',vr:"FL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;1",21)':{tag:'(0029,"SPI-P-Private_ICS Release 1;1",21)',vr:"FL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;1",CD)':{tag:'(0029,"SPI-P-Private_ICS Release 1;1",CD)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;2",00)':{tag:'(0029,"SPI-P-Private_ICS Release 1;2",00)',vr:"FD",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;2",01)':{tag:'(0029,"SPI-P-Private_ICS Release 1;2",01)',vr:"FD",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;2",02)':{tag:'(0029,"SPI-P-Private_ICS Release 1;2",02)',vr:"FD",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;2",03)':{tag:'(0029,"SPI-P-Private_ICS Release 1;2",03)',vr:"SL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;2",04)':{tag:'(0029,"SPI-P-Private_ICS Release 1;2",04)',vr:"SL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;2",05)':{tag:'(0029,"SPI-P-Private_ICS Release 1;2",05)',vr:"SL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;3",C0)':{tag:'(0029,"SPI-P-Private_ICS Release 1;3",C0)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;3",C1)':{tag:'(0029,"SPI-P-Private_ICS Release 1;3",C1)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;3",C2)':{tag:'(0029,"SPI-P-Private_ICS Release 1;3",C2)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;3",C3)':{tag:'(0029,"SPI-P-Private_ICS Release 1;3",C3)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;3",C4)':{tag:'(0029,"SPI-P-Private_ICS Release 1;3",C4)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;3",C5)':{tag:'(0029,"SPI-P-Private_ICS Release 1;3",C5)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;4",02)':{tag:'(0029,"SPI-P-Private_ICS Release 1;4",02)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;4",9A)':{tag:'(0029,"SPI-P-Private_ICS Release 1;4",9A)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;4",E0)':{tag:'(0029,"SPI-P-Private_ICS Release 1;4",E0)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;5",50)':{tag:'(0029,"SPI-P-Private_ICS Release 1;5",50)',vr:"CS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;5",55)':{tag:'(0029,"SPI-P-Private_ICS Release 1;5",55)',vr:"CS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-XSB-DCI Release 1",10)':{tag:'(0019,"SPI-P-XSB-DCI Release 1",10)',vr:"LT",name:"VideoBeamBoost",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-XSB-DCI Release 1",11)':{tag:'(0019,"SPI-P-XSB-DCI Release 1",11)',vr:"US",name:"ChannelGeneratingVideoSync",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-XSB-DCI Release 1",12)':{tag:'(0019,"SPI-P-XSB-DCI Release 1",12)',vr:"US",name:"VideoGain",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-XSB-DCI Release 1",13)':{tag:'(0019,"SPI-P-XSB-DCI Release 1",13)',vr:"US",name:"VideoOffset",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-XSB-DCI Release 1",20)':{tag:'(0019,"SPI-P-XSB-DCI Release 1",20)',vr:"DS",name:"RTDDataCompressionFactor",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",11)':{tag:'(0029,"Silhouette Annot V1.0",11)',vr:"IS",name:"AnnotationName",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",12)':{tag:'(0029,"Silhouette Annot V1.0",12)',vr:"LT",name:"AnnotationFont",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",13)':{tag:'(0029,"Silhouette Annot V1.0",13)',vr:"LT",name:"AnnotationTextForegroundColor",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",14)':{tag:'(0029,"Silhouette Annot V1.0",14)',vr:"LT",name:"AnnotationTextBackgroundColor",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",15)':{tag:'(0029,"Silhouette Annot V1.0",15)',vr:"UL",name:"AnnotationTextBackingMode",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",16)':{tag:'(0029,"Silhouette Annot V1.0",16)',vr:"UL",name:"AnnotationTextJustification",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",17)':{tag:'(0029,"Silhouette Annot V1.0",17)',vr:"UL",name:"AnnotationTextLocation",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",18)':{tag:'(0029,"Silhouette Annot V1.0",18)',vr:"LT",name:"AnnotationTextString",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",19)':{tag:'(0029,"Silhouette Annot V1.0",19)',vr:"UL",name:"AnnotationTextAttachMode",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",20)':{tag:'(0029,"Silhouette Annot V1.0",20)',vr:"UL",name:"AnnotationTextCursorMode",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",21)':{tag:'(0029,"Silhouette Annot V1.0",21)',vr:"UL",name:"AnnotationTextShadowOffsetX",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",22)':{tag:'(0029,"Silhouette Annot V1.0",22)',vr:"UL",name:"AnnotationTextShadowOffsetY",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",23)':{tag:'(0029,"Silhouette Annot V1.0",23)',vr:"LT",name:"AnnotationLineColor",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",24)':{tag:'(0029,"Silhouette Annot V1.0",24)',vr:"UL",name:"AnnotationLineThickness",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",25)':{tag:'(0029,"Silhouette Annot V1.0",25)',vr:"UL",name:"AnnotationLineType",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",26)':{tag:'(0029,"Silhouette Annot V1.0",26)',vr:"UL",name:"AnnotationLineStyle",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",27)':{tag:'(0029,"Silhouette Annot V1.0",27)',vr:"UL",name:"AnnotationLineDashLength",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",28)':{tag:'(0029,"Silhouette Annot V1.0",28)',vr:"UL",name:"AnnotationLineAttachMode",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",29)':{tag:'(0029,"Silhouette Annot V1.0",29)',vr:"UL",name:"AnnotationLinePointCount",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",30)':{tag:'(0029,"Silhouette Annot V1.0",30)',vr:"FD",name:"AnnotationLinePoints",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",31)':{tag:'(0029,"Silhouette Annot V1.0",31)',vr:"UL",name:"AnnotationLineControlSize",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",32)':{tag:'(0029,"Silhouette Annot V1.0",32)',vr:"LT",name:"AnnotationMarkerColor",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",33)':{tag:'(0029,"Silhouette Annot V1.0",33)',vr:"UL",name:"AnnotationMarkerType",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",34)':{tag:'(0029,"Silhouette Annot V1.0",34)',vr:"UL",name:"AnnotationMarkerSize",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",35)':{tag:'(0029,"Silhouette Annot V1.0",35)',vr:"FD",name:"AnnotationMarkerLocation",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",36)':{tag:'(0029,"Silhouette Annot V1.0",36)',vr:"UL",name:"AnnotationMarkerAttachMode",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",37)':{tag:'(0029,"Silhouette Annot V1.0",37)',vr:"LT",name:"AnnotationGeomColor",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",38)':{tag:'(0029,"Silhouette Annot V1.0",38)',vr:"UL",name:"AnnotationGeomThickness",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",39)':{tag:'(0029,"Silhouette Annot V1.0",39)',vr:"UL",name:"AnnotationGeomLineStyle",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",40)':{tag:'(0029,"Silhouette Annot V1.0",40)',vr:"UL",name:"AnnotationGeomDashLength",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",41)':{tag:'(0029,"Silhouette Annot V1.0",41)',vr:"UL",name:"AnnotationGeomFillPattern",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",42)':{tag:'(0029,"Silhouette Annot V1.0",42)',vr:"UL",name:"AnnotationInteractivity",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",43)':{tag:'(0029,"Silhouette Annot V1.0",43)',vr:"FD",name:"AnnotationArrowLength",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",44)':{tag:'(0029,"Silhouette Annot V1.0",44)',vr:"FD",name:"AnnotationArrowAngle",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",45)':{tag:'(0029,"Silhouette Annot V1.0",45)',vr:"UL",name:"AnnotationDontSave",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Graphics Export V1.0",00)':{tag:'(0029,"Silhouette Graphics Export V1.0",00)',vr:"UI",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",11)':{tag:'(0029,"Silhouette Line V1.0",11)',vr:"IS",name:"LineName",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",12)':{tag:'(0029,"Silhouette Line V1.0",12)',vr:"LT",name:"LineNameFont",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",13)':{tag:'(0029,"Silhouette Line V1.0",13)',vr:"UL",name:"LineNameDisplay",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",14)':{tag:'(0029,"Silhouette Line V1.0",14)',vr:"LT",name:"LineNormalColor",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",15)':{tag:'(0029,"Silhouette Line V1.0",15)',vr:"UL",name:"LineType",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",16)':{tag:'(0029,"Silhouette Line V1.0",16)',vr:"UL",name:"LineThickness",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",17)':{tag:'(0029,"Silhouette Line V1.0",17)',vr:"UL",name:"LineStyle",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",18)':{tag:'(0029,"Silhouette Line V1.0",18)',vr:"UL",name:"LineDashLength",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",19)':{tag:'(0029,"Silhouette Line V1.0",19)',vr:"UL",name:"LineInteractivity",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",20)':{tag:'(0029,"Silhouette Line V1.0",20)',vr:"LT",name:"LineMeasurementColor",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",21)':{tag:'(0029,"Silhouette Line V1.0",21)',vr:"LT",name:"LineMeasurementFont",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",22)':{tag:'(0029,"Silhouette Line V1.0",22)',vr:"UL",name:"LineMeasurementDashLength",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",23)':{tag:'(0029,"Silhouette Line V1.0",23)',vr:"UL",name:"LinePointSpace",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",24)':{tag:'(0029,"Silhouette Line V1.0",24)',vr:"FD",name:"LinePoints",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",25)':{tag:'(0029,"Silhouette Line V1.0",25)',vr:"UL",name:"LineControlPointSize",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",26)':{tag:'(0029,"Silhouette Line V1.0",26)',vr:"UL",name:"LineControlPointSpace",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",27)':{tag:'(0029,"Silhouette Line V1.0",27)',vr:"FD",name:"LineControlPoints",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",28)':{tag:'(0029,"Silhouette Line V1.0",28)',vr:"LT",name:"LineLabel",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",29)':{tag:'(0029,"Silhouette Line V1.0",29)',vr:"UL",name:"LineDontSave",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",11)':{tag:'(0029,"Silhouette ROI V1.0",11)',vr:"IS",name:"ROIName",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",12)':{tag:'(0029,"Silhouette ROI V1.0",12)',vr:"LT",name:"ROINameFont",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",13)':{tag:'(0029,"Silhouette ROI V1.0",13)',vr:"LT",name:"ROINormalColor",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",14)':{tag:'(0029,"Silhouette ROI V1.0",14)',vr:"UL",name:"ROIFillPattern",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",15)':{tag:'(0029,"Silhouette ROI V1.0",15)',vr:"UL",name:"ROIBpSeg",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",16)':{tag:'(0029,"Silhouette ROI V1.0",16)',vr:"UN",name:"ROIBpSegPairs",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",17)':{tag:'(0029,"Silhouette ROI V1.0",17)',vr:"UL",name:"ROISeedSpace",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",18)':{tag:'(0029,"Silhouette ROI V1.0",18)',vr:"UN",name:"ROISeeds",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",19)':{tag:'(0029,"Silhouette ROI V1.0",19)',vr:"UL",name:"ROILineThickness",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",20)':{tag:'(0029,"Silhouette ROI V1.0",20)',vr:"UL",name:"ROILineStyle",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",21)':{tag:'(0029,"Silhouette ROI V1.0",21)',vr:"UL",name:"ROILineDashLength",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",22)':{tag:'(0029,"Silhouette ROI V1.0",22)',vr:"UL",name:"ROIInteractivity",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",23)':{tag:'(0029,"Silhouette ROI V1.0",23)',vr:"UL",name:"ROINamePosition",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",24)':{tag:'(0029,"Silhouette ROI V1.0",24)',vr:"UL",name:"ROINameDisplay",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",25)':{tag:'(0029,"Silhouette ROI V1.0",25)',vr:"LT",name:"ROILabel",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",26)':{tag:'(0029,"Silhouette ROI V1.0",26)',vr:"UL",name:"ROIShape",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",27)':{tag:'(0029,"Silhouette ROI V1.0",27)',vr:"FD",name:"ROIShapeTilt",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",28)':{tag:'(0029,"Silhouette ROI V1.0",28)',vr:"UL",name:"ROIShapePointsCount",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",29)':{tag:'(0029,"Silhouette ROI V1.0",29)',vr:"UL",name:"ROIShapePointsSpace",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",30)':{tag:'(0029,"Silhouette ROI V1.0",30)',vr:"FD",name:"ROIShapePoints",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",31)':{tag:'(0029,"Silhouette ROI V1.0",31)',vr:"UL",name:"ROIShapeControlPointsCount",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",32)':{tag:'(0029,"Silhouette ROI V1.0",32)',vr:"UL",name:"ROIShapeControlPointsSpace",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",33)':{tag:'(0029,"Silhouette ROI V1.0",33)',vr:"FD",name:"ROIShapeControlPoints",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",34)':{tag:'(0029,"Silhouette ROI V1.0",34)',vr:"UL",name:"ROIDontSave",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Sequence Ids V1.0",41)':{tag:'(0029,"Silhouette Sequence Ids V1.0",41)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Sequence Ids V1.0",42)':{tag:'(0029,"Silhouette Sequence Ids V1.0",42)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Sequence Ids V1.0",43)':{tag:'(0029,"Silhouette Sequence Ids V1.0",43)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",13)':{tag:'(0029,"Silhouette V1.0",13)',vr:"UL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",14)':{tag:'(0029,"Silhouette V1.0",14)',vr:"UL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",17)':{tag:'(0029,"Silhouette V1.0",17)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",18)':{tag:'(0029,"Silhouette V1.0",18)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",19)':{tag:'(0029,"Silhouette V1.0",19)',vr:"UL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",1a)':{tag:'(0029,"Silhouette V1.0",1a)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",1b)':{tag:'(0029,"Silhouette V1.0",1b)',vr:"UL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",1c)':{tag:'(0029,"Silhouette V1.0",1c)',vr:"UL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",1d)':{tag:'(0029,"Silhouette V1.0",1d)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",1e)':{tag:'(0029,"Silhouette V1.0",1e)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",21)':{tag:'(0029,"Silhouette V1.0",21)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",22)':{tag:'(0029,"Silhouette V1.0",22)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",23)':{tag:'(0029,"Silhouette V1.0",23)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",24)':{tag:'(0029,"Silhouette V1.0",24)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",25)':{tag:'(0029,"Silhouette V1.0",25)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",27)':{tag:'(0029,"Silhouette V1.0",27)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",28)':{tag:'(0029,"Silhouette V1.0",28)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",29)':{tag:'(0029,"Silhouette V1.0",29)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",30)':{tag:'(0029,"Silhouette V1.0",30)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",52)':{tag:'(0029,"Silhouette V1.0",52)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",53)':{tag:'(0029,"Silhouette V1.0",53)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",54)':{tag:'(0029,"Silhouette V1.0",54)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",55)':{tag:'(0029,"Silhouette V1.0",55)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",56)':{tag:'(0029,"Silhouette V1.0",56)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",57)':{tag:'(0029,"Silhouette V1.0",57)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0135,"SONOWAND AS",10)':{tag:'(0135,"SONOWAND AS",10)',vr:"LO",name:"UltrasoundScannerName",vm:"1",version:"PrivateTag"},'(0135,"SONOWAND AS",11)':{tag:'(0135,"SONOWAND AS",11)',vr:"LO",name:"TransducerSerial",vm:"1",version:"PrivateTag"},'(0135,"SONOWAND AS",12)':{tag:'(0135,"SONOWAND AS",12)',vr:"LO",name:"ProbeApplication",vm:"1",version:"PrivateTag"},'(0017,"SVISION",00)':{tag:'(0017,"SVISION",00)',vr:"LO",name:"ExtendedBodyPart",vm:"1",version:"PrivateTag"},'(0017,"SVISION",10)':{tag:'(0017,"SVISION",10)',vr:"LO",name:"ExtendedViewPosition",vm:"1",version:"PrivateTag"},'(0017,"SVISION",F0)':{tag:'(0017,"SVISION",F0)',vr:"IS",name:"ImagesSOPClass",vm:"1",version:"PrivateTag"},'(0019,"SVISION",00)':{tag:'(0019,"SVISION",00)',vr:"IS",name:"AECField",vm:"1",version:"PrivateTag"},'(0019,"SVISION",01)':{tag:'(0019,"SVISION",01)',vr:"IS",name:"AECFilmScreen",vm:"1",version:"PrivateTag"},'(0019,"SVISION",02)':{tag:'(0019,"SVISION",02)',vr:"IS",name:"AECDensity",vm:"1",version:"PrivateTag"},'(0019,"SVISION",10)':{tag:'(0019,"SVISION",10)',vr:"IS",name:"PatientThickness",vm:"1",version:"PrivateTag"},'(0019,"SVISION",18)':{tag:'(0019,"SVISION",18)',vr:"IS",name:"BeamDistance",vm:"1",version:"PrivateTag"},'(0019,"SVISION",20)':{tag:'(0019,"SVISION",20)',vr:"IS",name:"WorkstationNumber",vm:"1",version:"PrivateTag"},'(0019,"SVISION",28)':{tag:'(0019,"SVISION",28)',vr:"IS",name:"TubeNumber",vm:"1",version:"PrivateTag"},'(0019,"SVISION",30)':{tag:'(0019,"SVISION",30)',vr:"IS",name:"BuckyGrid",vm:"1",version:"PrivateTag"},'(0019,"SVISION",34)':{tag:'(0019,"SVISION",34)',vr:"IS",name:"Focus",vm:"1",version:"PrivateTag"},'(0019,"SVISION",38)':{tag:'(0019,"SVISION",38)',vr:"IS",name:"Child",vm:"1",version:"PrivateTag"},'(0019,"SVISION",40)':{tag:'(0019,"SVISION",40)',vr:"IS",name:"CollimatorDistanceX",vm:"1",version:"PrivateTag"},'(0019,"SVISION",41)':{tag:'(0019,"SVISION",41)',vr:"IS",name:"CollimatorDistanceY",vm:"1",version:"PrivateTag"},'(0019,"SVISION",50)':{tag:'(0019,"SVISION",50)',vr:"IS",name:"CentralBeamHeight",vm:"1",version:"PrivateTag"},'(0019,"SVISION",60)':{tag:'(0019,"SVISION",60)',vr:"IS",name:"BuckyAngle",vm:"1",version:"PrivateTag"},'(0019,"SVISION",68)':{tag:'(0019,"SVISION",68)',vr:"IS",name:"CArmAngle",vm:"1",version:"PrivateTag"},'(0019,"SVISION",69)':{tag:'(0019,"SVISION",69)',vr:"IS",name:"CollimatorAngle",vm:"1",version:"PrivateTag"},'(0019,"SVISION",70)':{tag:'(0019,"SVISION",70)',vr:"IS",name:"FilterNumber",vm:"1",version:"PrivateTag"},'(0019,"SVISION",74)':{tag:'(0019,"SVISION",74)',vr:"LO",name:"FilterMaterial1",vm:"1",version:"PrivateTag"},'(0019,"SVISION",75)':{tag:'(0019,"SVISION",75)',vr:"LO",name:"FilterMaterial2",vm:"1",version:"PrivateTag"},'(0019,"SVISION",78)':{tag:'(0019,"SVISION",78)',vr:"DS",name:"FilterThickness1",vm:"1",version:"PrivateTag"},'(0019,"SVISION",79)':{tag:'(0019,"SVISION",79)',vr:"DS",name:"FilterThickness2",vm:"1",version:"PrivateTag"},'(0019,"SVISION",80)':{tag:'(0019,"SVISION",80)',vr:"IS",name:"BuckyFormat",vm:"1",version:"PrivateTag"},'(0019,"SVISION",81)':{tag:'(0019,"SVISION",81)',vr:"IS",name:"ObjectPosition",vm:"1",version:"PrivateTag"},'(0019,"SVISION",90)':{tag:'(0019,"SVISION",90)',vr:"LO",name:"DeskCommand",vm:"1",version:"PrivateTag"},'(0019,"SVISION",A0)':{tag:'(0019,"SVISION",A0)',vr:"DS",name:"ExtendedExposureTime",vm:"1",version:"PrivateTag"},'(0019,"SVISION",A1)':{tag:'(0019,"SVISION",A1)',vr:"DS",name:"ActualExposureTime",vm:"1",version:"PrivateTag"},'(0019,"SVISION",A8)':{tag:'(0019,"SVISION",A8)',vr:"DS",name:"ExtendedXRayTubeCurrent",vm:"1",version:"PrivateTag"},'(0021,"SVISION",00)':{tag:'(0021,"SVISION",00)',vr:"DS",name:"NoiseReduction",vm:"1",version:"PrivateTag"},'(0021,"SVISION",01)':{tag:'(0021,"SVISION",01)',vr:"DS",name:"ContrastAmplification",vm:"1",version:"PrivateTag"},'(0021,"SVISION",02)':{tag:'(0021,"SVISION",02)',vr:"DS",name:"EdgeContrastBoosting",vm:"1",version:"PrivateTag"},'(0021,"SVISION",03)':{tag:'(0021,"SVISION",03)',vr:"DS",name:"LatitudeReduction",vm:"1",version:"PrivateTag"},'(0021,"SVISION",10)':{tag:'(0021,"SVISION",10)',vr:"LO",name:"FindRangeAlgorithm",vm:"1",version:"PrivateTag"},'(0021,"SVISION",11)':{tag:'(0021,"SVISION",11)',vr:"DS",name:"ThresholdCAlgorithm",vm:"1",version:"PrivateTag"},'(0021,"SVISION",20)':{tag:'(0021,"SVISION",20)',vr:"LO",name:"SensometricCurve",vm:"1",version:"PrivateTag"},'(0021,"SVISION",30)':{tag:'(0021,"SVISION",30)',vr:"DS",name:"LowerWindowOffset",vm:"1",version:"PrivateTag"},'(0021,"SVISION",31)':{tag:'(0021,"SVISION",31)',vr:"DS",name:"UpperWindowOffset",vm:"1",version:"PrivateTag"},'(0021,"SVISION",40)':{tag:'(0021,"SVISION",40)',vr:"DS",name:"MinPrintableDensity",vm:"1",version:"PrivateTag"},'(0021,"SVISION",41)':{tag:'(0021,"SVISION",41)',vr:"DS",name:"MaxPrintableDensity",vm:"1",version:"PrivateTag"},'(0021,"SVISION",90)':{tag:'(0021,"SVISION",90)',vr:"DS",name:"Brightness",vm:"1",version:"PrivateTag"},'(0021,"SVISION",91)':{tag:'(0021,"SVISION",91)',vr:"DS",name:"Contrast",vm:"1",version:"PrivateTag"},'(0021,"SVISION",92)':{tag:'(0021,"SVISION",92)',vr:"DS",name:"ShapeFactor",vm:"1",version:"PrivateTag"},'(0023,"SVISION",00)':{tag:'(0023,"SVISION",00)',vr:"LO",name:"ImageLaterality",vm:"1",version:"PrivateTag"},'(0023,"SVISION",01)':{tag:'(0023,"SVISION",01)',vr:"IS",name:"LetterPosition",vm:"1",version:"PrivateTag"},'(0023,"SVISION",02)':{tag:'(0023,"SVISION",02)',vr:"IS",name:"BurnedInAnnotation",vm:"1",version:"PrivateTag"},'(0023,"SVISION",03)':{tag:'(0023,"SVISION",03)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0023,"SVISION",F0)':{tag:'(0023,"SVISION",F0)',vr:"IS",name:"ImageSOPClass",vm:"1",version:"PrivateTag"},'(0025,"SVISION",00)':{tag:'(0025,"SVISION",00)',vr:"IS",name:"OriginalImage",vm:"1",version:"PrivateTag"},'(0025,"SVISION",01)':{tag:'(0025,"SVISION",01)',vr:"IS",name:"NotProcessedImage",vm:"1",version:"PrivateTag"},'(0025,"SVISION",02)':{tag:'(0025,"SVISION",02)',vr:"IS",name:"CutOutImage",vm:"1",version:"PrivateTag"},'(0025,"SVISION",03)':{tag:'(0025,"SVISION",03)',vr:"IS",name:"DuplicatedImage",vm:"1",version:"PrivateTag"},'(0025,"SVISION",04)':{tag:'(0025,"SVISION",04)',vr:"IS",name:"StoredImage",vm:"1",version:"PrivateTag"},'(0025,"SVISION",05)':{tag:'(0025,"SVISION",05)',vr:"IS",name:"RetrievedImage",vm:"1",version:"PrivateTag"},'(0025,"SVISION",06)':{tag:'(0025,"SVISION",06)',vr:"IS",name:"RemoteImage",vm:"1",version:"PrivateTag"},'(0025,"SVISION",07)':{tag:'(0025,"SVISION",07)',vr:"IS",name:"MediaStoredImage",vm:"1",version:"PrivateTag"},'(0025,"SVISION",08)':{tag:'(0025,"SVISION",08)',vr:"IS",name:"ImageState",vm:"1",version:"PrivateTag"},'(0025,"SVISION",20)':{tag:'(0025,"SVISION",20)',vr:"LO",name:"SourceImageFile",vm:"1",version:"PrivateTag"},'(0025,"SVISION",21)':{tag:'(0025,"SVISION",21)',vr:"UI",name:"Unknown",vm:"1",version:"PrivateTag"},'(0027,"SVISION",00)':{tag:'(0027,"SVISION",00)',vr:"IS",name:"NumberOfSeries",vm:"1",version:"PrivateTag"},'(0027,"SVISION",01)':{tag:'(0027,"SVISION",01)',vr:"IS",name:"NumberOfStudies",vm:"1",version:"PrivateTag"},'(0027,"SVISION",10)':{tag:'(0027,"SVISION",10)',vr:"DT",name:"OldestSeries",vm:"1",version:"PrivateTag"},'(0027,"SVISION",11)':{tag:'(0027,"SVISION",11)',vr:"DT",name:"NewestSeries",vm:"1",version:"PrivateTag"},'(0027,"SVISION",12)':{tag:'(0027,"SVISION",12)',vr:"DT",name:"OldestStudy",vm:"1",version:"PrivateTag"},'(0027,"SVISION",13)':{tag:'(0027,"SVISION",13)',vr:"DT",name:"NewestStudy",vm:"1",version:"PrivateTag"},'(0009,"TOSHIBA_MEC_1.0",01)':{tag:'(0009,"TOSHIBA_MEC_1.0",01)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"TOSHIBA_MEC_1.0",02)':{tag:'(0009,"TOSHIBA_MEC_1.0",02)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0009,"TOSHIBA_MEC_1.0",03)':{tag:'(0009,"TOSHIBA_MEC_1.0",03)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0009,"TOSHIBA_MEC_1.0",04)':{tag:'(0009,"TOSHIBA_MEC_1.0",04)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0011,"TOSHIBA_MEC_1.0",01)':{tag:'(0011,"TOSHIBA_MEC_1.0",01)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0011,"TOSHIBA_MEC_1.0",02)':{tag:'(0011,"TOSHIBA_MEC_1.0",02)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_1.0",01)':{tag:'(0019,"TOSHIBA_MEC_1.0",01)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_1.0",02)':{tag:'(0019,"TOSHIBA_MEC_1.0",02)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0021,"TOSHIBA_MEC_1.0",01)':{tag:'(0021,"TOSHIBA_MEC_1.0",01)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0021,"TOSHIBA_MEC_1.0",02)':{tag:'(0021,"TOSHIBA_MEC_1.0",02)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0021,"TOSHIBA_MEC_1.0",03)':{tag:'(0021,"TOSHIBA_MEC_1.0",03)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_1.0",01)':{tag:'(7ff1,"TOSHIBA_MEC_1.0",01)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_1.0",02)':{tag:'(7ff1,"TOSHIBA_MEC_1.0",02)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_1.0",03)':{tag:'(7ff1,"TOSHIBA_MEC_1.0",03)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_1.0",10)':{tag:'(7ff1,"TOSHIBA_MEC_1.0",10)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",01)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",01)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",02)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",02)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",03)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",03)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",04)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",04)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",05)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",05)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",06)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",06)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",07)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",07)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",08)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",08)',vr:"LT",name:"OrientationHeadFeet",vm:"1",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",09)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",09)',vr:"LT",name:"ViewDirection",vm:"1",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",0a)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",0a)',vr:"LT",name:"OrientationSupineProne",vm:"1",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",0b)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",0b)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",0c)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",0c)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",0d)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",0d)',vr:"TM",name:"Time",vm:"1",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",0e)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",0e)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_CT_1.0",01)':{tag:'(7ff1,"TOSHIBA_MEC_CT_1.0",01)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_CT_1.0",02)':{tag:'(7ff1,"TOSHIBA_MEC_CT_1.0",02)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_CT_1.0",03)':{tag:'(7ff1,"TOSHIBA_MEC_CT_1.0",03)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_CT_1.0",04)':{tag:'(7ff1,"TOSHIBA_MEC_CT_1.0",04)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_CT_1.0",05)':{tag:'(7ff1,"TOSHIBA_MEC_CT_1.0",05)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_CT_1.0",07)':{tag:'(7ff1,"TOSHIBA_MEC_CT_1.0",07)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_CT_1.0",08)':{tag:'(7ff1,"TOSHIBA_MEC_CT_1.0",08)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_CT_1.0",09)':{tag:'(7ff1,"TOSHIBA_MEC_CT_1.0",09)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_CT_1.0",0a)':{tag:'(7ff1,"TOSHIBA_MEC_CT_1.0",0a)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_CT_1.0",0b)':{tag:'(7ff1,"TOSHIBA_MEC_CT_1.0",0b)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_CT_1.0",0c)':{tag:'(7ff1,"TOSHIBA_MEC_CT_1.0",0c)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_CT_1.0",0d)':{tag:'(7ff1,"TOSHIBA_MEC_CT_1.0",0d)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"}},zr._generateNameMap(),zr._generateUIDMap();var Wr="1.2.840.10008.1.2",Yr="1.2.840.10008.1.2.1",Zr="1.2.840.10008.1.2.1.99",Kr=["SQ","OF","OW","OB","UN","LT"],Xr={"":"iso-8859-1","iso-ir-6":"iso-8859-1","iso-ir-13":"shift-jis","iso-ir-100":"latin1","iso-ir-101":"iso-8859-2","iso-ir-109":"iso-8859-3","iso-ir-110":"iso-8859-4","iso-ir-126":"iso-ir-126","iso-ir-127":"iso-ir-127","iso-ir-138":"iso-ir-138","iso-ir-144":"iso-ir-144","iso-ir-148":"iso-ir-148","iso-ir-166":"tis-620","iso-2022-ir-6":"iso-8859-1","iso-2022-ir-13":"shift-jis","iso-2022-ir-87":"iso-2022-jp","iso-2022-ir-100":"latin1","iso-2022-ir-101":"iso-8859-2","iso-2022-ir-109":"iso-8859-3","iso-2022-ir-110":"iso-8859-4","iso-2022-ir-126":"iso-ir-126","iso-2022-ir-127":"iso-ir-127","iso-2022-ir-138":"iso-ir-138","iso-2022-ir-144":"iso-ir-144","iso-2022-ir-148":"iso-ir-148","iso-2022-ir-149":"euc-kr","iso-2022-ir-159":"iso-2022-jp","iso-2022-ir-166":"tis-620","iso-2022-ir-58":"iso-ir-58","iso-ir-192":"utf-8",gb18030:"gb18030","iso-2022-gbk":"gbk","iso-2022-58":"gb2312",gbk:"gbk"},$r=["1.2.840.10008.1.2.4.50","1.2.840.10008.1.2.4.51","1.2.840.10008.1.2.4.57","1.2.840.10008.1.2.4.70","1.2.840.10008.1.2.4.80","1.2.840.10008.1.2.4.81","1.2.840.10008.1.2.4.90","1.2.840.10008.1.2.4.91","1.2.840.10008.1.2.4.92","1.2.840.10008.1.2.4.93","1.2.840.10008.1.2.4.94","1.2.840.10008.1.2.4.95","1.2.840.10008.1.2.5","1.2.840.10008.1.2.6.1","1.2.840.10008.1.2.4.100","1.2.840.10008.1.2.4.102","1.2.840.10008.1.2.4.103"],Jr=function(){function e(){b(this,e)}return I(e,null,[{key:"read",value:function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,a=arguments.length>4&&void 0!==arguments[4]&&arguments[4];return console.warn("DicomMessage.read to be deprecated after dcmjs 0.24.x"),this._read(e,t,{ignoreErrors:n,untilTag:r,includeUntilTagValue:a})}},{key:"readTag",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];return console.warn("DicomMessage.readTag to be deprecated after dcmjs 0.24.x"),this._readTag(e,t,{untilTag:n,includeUntilTagValue:r})}},{key:"_read",value:function(t,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{ignoreErrors:!1,untilTag:null,includeUntilTagValue:!1},a=r.ignoreErrors,i=r.untilTag,o={};try{for(;!t.end();){var s=e._readTag(t,n,r),u=s.tag.toCleanString();if("00080005"===u){if(s.values.length>0){var l=s.values[0];if((l=l.replace(/[_ ]/g,"-").toLowerCase())in Xr)l=Xr[l],t.setDecoder(new TextDecoder(l));else{if(!a)throw Error("Unsupported character set: ".concat(l));console.warn("Unsupported character set: ".concat(l,", using default character set"))}}if(s.values.length>1){if(!a)throw Error("Using multiple character sets is not supported: ".concat(s.values));console.warn("Using multiple character sets is not supported, proceeding with just the first character set",s.values)}s.values=["ISO_IR 192"]}if(o[u]={vr:s.vr.type,Value:s.values},i&&i===u)break}return o}catch(e){if(a)return console.warn("WARN:",e),o;throw e}}},{key:"_normalizeSyntax",value:function(e){return e==Wr||e==Yr||"1.2.840.10008.1.2.2"==e?e:Yr}},{key:"isEncapsulated",value:function(e){return-1!=$r.indexOf(e)}},{key:"readFile",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{ignoreErrors:!1,untilTag:null,includeUntilTagValue:!1,noCopy:!1},r=new Jn(t,null,{noCopy:n.noCopy}),a=Yr;if(r.reset(),r.increment(128),"DICM"!==r.readAsciiString(4))throw new Error("Invalid DICOM file, expected header is missing");var i=e._readTag(r,a),o=i.values[0],s=r.more(o),u=e._read(s,a,n),l=u["00020010"].Value[0];l===Zr&&(r=new er(r,{noCopy:n.noCopy})),l=e._normalizeSyntax(l);var c=e._read(r,l,n),d=new ta(u);return d.dict=c,d}},{key:"writeTagObject",value:function(e,t,n,r,a,i){Hr.fromString(t).write(e,n,r,a,i)}},{key:"write",value:function(e,t,n,r){var a=0;return Object.keys(e).sort().forEach((function(i){var o=Hr.fromString(i),s=e[i],u=s.vr,l=s.Value;a+=o.write(t,u,l,n,r)})),a}},{key:"_readTag",value:function(t,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{untilTag:null,includeUntilTagValue:!1},a=r.untilTag,i=r.includeUntilTagValue,o=n==Wr,s=n==Wr||n==Yr,u=t.isLittleEndian;t.setEndian(s);var l=Hr.readTag(t);if(a===l.toCleanString()&&null!==a&&!i)return{tag:l,vr:0,values:0};var c,d=null,f=null;if(o){d=t.readUint32();var v=e.lookupTag(l);c=v?v.vr:4294967295==d?"SQ":l.isPixelDataTag()?"OW":"xs"==c?"US":l.isPrivateCreator()?"LO":"UN",f=or.createByTypeString(c)}else c=t.readVR(),(f=or.createByTypeString(c)).isExplicit()?(t.increment(2),d=t.readUint32()):d=t.readUint16();var m=[];if(f.isBinary()&&d>f.maxLength&&!f.noMultiple)for(var p=d/f.maxLength,h=0;h++0&&void 0!==arguments[0]?arguments[0]:{allowInvalidVRLength:!1},t=ea,n=new tr(4096,!0);n.writeUint8Repeat(0,128),n.writeAsciiString("DICM");var r=new tr(1024);this.meta["00020010"]||(this.meta["00020010"]={vr:"UI",Value:[ea]}),Jr.write(this.meta,r,t,e),Jr.writeTagObject(n,"00020000","UL",r.size,t,e),n.concat(r);var a=this.meta["00020010"].Value[0];return Jr.write(this.dict,n,a,e),n.getBuffer()}}]),e}(),na=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};b(this,e),this.rootURL=t.rootURL,this.progressCallback=t.progressCallback}return I(e,[{key:"request",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2?arguments[2]:void 0,a=e.responseType(t),i=e.endpointService(t),o=this.rootURL+"/"+i+t,s=!0;function u(e,t){var n=new XMLHttpRequest;n.open("GET",o),n.responseType=a,n.onload=function(){e(n.response)},n.onprogress=this.progressCallback,n.onerror=function(e){p.error(n.response),t(e)},n.send(r)}Object.keys(n).forEach((function(e){s?(o+="?",s=!1):o+="&",o+=e+"="+encodeURIComponent(n[e])}));var l=new Promise(u.bind(this));return l}},{key:"patients",value:function(){return this.request("patients")}},{key:"studies",value:function(e){return this.request("studies",{PatientID:e})}},{key:"series",value:function(e){return this.request("series",{StudyInstanceUID:e})}},{key:"instances",value:function(e,t){return this.request("instances",{StudyInstanceUID:e,SeriesInstanceUID:t})}},{key:"instance",value:function(e,t,n){return this.request("wado",{requestType:"WADO",studyUID:e,seriesUID:t,objectUID:n,contentType:"application/dicom"})}},{key:"tests",value:function(){new e({rootURL:"http://quantome.org:4242/dcm4chee-arc/aets/DCM4CHEE"}).patients().then((function(e){e.forEach((function(e){p.log(e)}))}))}}],[{key:"responseType",value:function(e){var t={wado:"arraybuffer"};return t[e]?t[e]:"json"}},{key:"endpointService",value:function(e){var t={wado:""};return-1!=Object.keys(t).indexOf(e)?t[e]:"rs/"}},{key:"randomEntry",value:function(e){return e[Math.floor(Math.random()*e.length)]}}]),e}(),ra=function(){function e(){b(this,e)}return I(e,null,[{key:"d65WhitePointXYZ",value:function(){return[.950456,1,1.088754]}},{key:"dicomlab2RGB",value:function(t){return e.lab2RGB(e.dicomlab2LAB(t))}},{key:"rgb2DICOMLAB",value:function(t){return e.lab2DICOMLAB(e.rgb2LAB(t))}},{key:"dicomlab2LAB",value:function(e){return[100*e[0]/65535,255*e[1]/65535-128,255*e[2]/65535-128]}},{key:"lab2DICOMLAB",value:function(e){return[65535*e[0]/100,65535*(e[1]+128)/255,65535*(e[2]+128)/255]}},{key:"rgb2LAB",value:function(t){return e.xyz2LAB(e.rgb2XYZ(t))}},{key:"gammaCorrection",value:function(e){return e<=.0031306684425005883?12.92*e:1.055*Math.pow(e,.4166666666666667)-.055}},{key:"invGammaCorrection",value:function(e){return e<=.0404482362771076?e/12.92:Math.pow((e+.055)/1.055,2.4)}},{key:"rgb2XYZ",value:function(t){var n=e.invGammaCorrection(t[0]),r=e.invGammaCorrection(t[1]),a=e.invGammaCorrection(t[2]);return[.41239558896741424*n+.3575834307637148*r+.18049264738170157*a,.21258623078559555*n+.7151703037034108*r+.07220049864333623*a,.019297215491746945*n+.11918386458084854*r+.9504971251315798*a]}},{key:"xyz2LAB",value:function(t){var n=e.d65WhitePointXYZ(),r=t[0]/n[0],a=t[1]/n[1],i=t[2]/n[2];return r=e.labf(r),[116*(a=e.labf(a))-16,500*(r-a),200*(a-(i=e.labf(i)))]}},{key:"lab2RGB",value:function(t){return e.xyz2RGB(e.lab2XYZ(t))}},{key:"lab2XYZ",value:function(t){var n=(t[0]+16)/116,r=n+t[1]/500,a=n-t[2]/200,i=e.d65WhitePointXYZ();return[i[0]*e.labfInv(r),i[1]*e.labfInv(n),i[2]*e.labfInv(a)]}},{key:"xyz2RGB",value:function(t){var n=3.2406*t[0]-1.5372*t[1]-.4986*t[2],r=-.9689*t[0]+1.8758*t[1]+.0415*t[2],a=.0557*t[0]-.204*t[1]+1.057*t[2],i=Math.min(n,r);return(i=Math.min(i,a))<0&&(n-=i,r-=i,a-=i),[e.gammaCorrection(n),e.gammaCorrection(r),e.gammaCorrection(a)]}},{key:"labf",value:function(e){return e>=.008856451679035631?Math.pow(e,.333333333333333):841/108*e+4/29}},{key:"labfInv",value:function(e){return e>=.20689655172413793?e*e*e:108/841*(e-4/29)}}]),e}(),aa=void 0!==n.g?n.g:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},ia=[],oa=[],sa="undefined"!=typeof Uint8Array?Uint8Array:Array,ua=!1;function la(){ua=!0;for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t=0,n=e.length;t>18&63]+ia[a>>12&63]+ia[a>>6&63]+ia[63&a]);return i.join("")}function da(e){var t;ua||la();for(var n=e.length,r=n%3,a="",i=[],o=16383,s=0,u=n-r;su?u:s+o));return 1===r?(t=e[n-1],a+=ia[t>>2],a+=ia[t<<4&63],a+="=="):2===r&&(t=(e[n-2]<<8)+e[n-1],a+=ia[t>>10],a+=ia[t>>4&63],a+=ia[t<<2&63],a+="="),i.push(a),i.join("")}function fa(e,t,n,r,a){var i,o,s=8*a-r-1,u=(1<>1,c=-7,d=n?a-1:0,f=n?-1:1,v=e[t+d];for(d+=f,i=v&(1<<-c)-1,v>>=-c,c+=s;c>0;i=256*i+e[t+d],d+=f,c-=8);for(o=i&(1<<-c)-1,i>>=-c,c+=r;c>0;o=256*o+e[t+d],d+=f,c-=8);if(0===i)i=1-l;else{if(i===u)return o?NaN:1/0*(v?-1:1);o+=Math.pow(2,r),i-=l}return(v?-1:1)*o*Math.pow(2,i-r)}function va(e,t,n,r,a,i){var o,s,u,l=8*i-a-1,c=(1<>1,f=23===a?Math.pow(2,-24)-Math.pow(2,-77):0,v=r?0:i-1,m=r?1:-1,p=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,o=c):(o=Math.floor(Math.log(t)/Math.LN2),t*(u=Math.pow(2,-o))<1&&(o--,u*=2),(t+=o+d>=1?f/u:f*Math.pow(2,1-d))*u>=2&&(o++,u/=2),o+d>=c?(s=0,o=c):o+d>=1?(s=(t*u-1)*Math.pow(2,a),o+=d):(s=t*Math.pow(2,d-1)*Math.pow(2,a),o=0));a>=8;e[n+v]=255&s,v+=m,s/=256,a-=8);for(o=o<0;e[n+v]=255&o,v+=m,o/=256,l-=8);e[n+v-m]|=128*p}var ma={}.toString,pa=Array.isArray||function(e){return"[object Array]"==ma.call(e)};function ha(){return Aa.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function ga(e,t){if(ha()=ha())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+ha().toString(16)+" bytes");return 0|e}function Ea(e){return!(null==e||!e._isBuffer)}function Ca(e,t){if(Ea(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var r=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return $a(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return Ja(e).length;default:if(r)return $a(e).length;t=(""+t).toLowerCase(),r=!0}}function Da(e,t,n){var r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return ja(this,t,n);case"utf8":case"utf-8":return Fa(this,t,n);case"ascii":return Ua(this,t,n);case"latin1":case"binary":return Va(this,t,n);case"base64":return Na(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Ga(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function _a(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function Ma(e,t,n,r,a){if(0===e.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=a?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(a)return-1;n=e.length-1}else if(n<0){if(!a)return-1;n=0}if("string"==typeof t&&(t=Aa.from(t,r)),Ea(t))return 0===t.length?-1:Oa(e,t,n,r,a);if("number"==typeof t)return t&=255,Aa.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?a?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):Oa(e,[t],n,r,a);throw new TypeError("val must be string, number or Buffer")}function Oa(e,t,n,r,a){var i,o=1,s=e.length,u=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;o=2,s/=2,u/=2,n/=2}function l(e,t){return 1===o?e[t]:e.readUInt16BE(t*o)}if(a){var c=-1;for(i=n;is&&(n=s-u),i=n;i>=0;i--){for(var d=!0,f=0;fa&&(r=a):r=a;var i=t.length;if(i%2!=0)throw new TypeError("Invalid hex string");r>i/2&&(r=i/2);for(var o=0;o>8,a=n%256,i.push(a),i.push(r);return i}(t,e.length-n),e,n,r)}function Na(e,t,n){return 0===t&&n===e.length?da(e):da(e.slice(t,n))}function Fa(e,t,n){n=Math.min(e.length,n);for(var r=[],a=t;a239?4:l>223?3:l>191?2:1;if(a+d<=n)switch(d){case 1:l<128&&(c=l);break;case 2:128==(192&(i=e[a+1]))&&(u=(31&l)<<6|63&i)>127&&(c=u);break;case 3:i=e[a+1],o=e[a+2],128==(192&i)&&128==(192&o)&&(u=(15&l)<<12|(63&i)<<6|63&o)>2047&&(u<55296||u>57343)&&(c=u);break;case 4:i=e[a+1],o=e[a+2],s=e[a+3],128==(192&i)&&128==(192&o)&&128==(192&s)&&(u=(15&l)<<18|(63&i)<<12|(63&o)<<6|63&s)>65535&&u<1114112&&(c=u)}null===c?(c=65533,d=1):c>65535&&(c-=65536,r.push(c>>>10&1023|55296),c=56320|1023&c),r.push(c),a+=d}return function(e){var t=e.length;if(t<=Ba)return String.fromCharCode.apply(String,e);var n="",r=0;for(;r0&&(e=this.toString("hex",0,50).match(/.{2}/g).join(" "),this.length>50&&(e+=" ... ")),""},Aa.prototype.compare=function(e,t,n,r,a){if(!Ea(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===a&&(a=this.length),t<0||n>e.length||r<0||a>this.length)throw new RangeError("out of range index");if(r>=a&&t>=n)return 0;if(r>=a)return-1;if(t>=n)return 1;if(this===e)return 0;for(var i=(a>>>=0)-(r>>>=0),o=(n>>>=0)-(t>>>=0),s=Math.min(i,o),u=this.slice(r,a),l=e.slice(t,n),c=0;ca)&&(n=a),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var i=!1;;)switch(r){case"hex":return Pa(this,e,t,n);case"utf8":case"utf-8":return Ta(this,e,t,n);case"ascii":return xa(this,e,t,n);case"latin1":case"binary":return Ra(this,e,t,n);case"base64":return La(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ka(this,e,t,n);default:if(i)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),i=!0}},Aa.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var Ba=4096;function Ua(e,t,n){var r="";n=Math.min(e.length,n);for(var a=t;ar)&&(n=r);for(var a="",i=t;in)throw new RangeError("Trying to access beyond buffer length")}function Qa(e,t,n,r,a,i){if(!Ea(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>a||te.length)throw new RangeError("Index out of range")}function qa(e,t,n,r){t<0&&(t=65535+t+1);for(var a=0,i=Math.min(e.length-n,2);a>>8*(r?a:1-a)}function za(e,t,n,r){t<0&&(t=4294967295+t+1);for(var a=0,i=Math.min(e.length-n,4);a>>8*(r?a:3-a)&255}function Wa(e,t,n,r,a,i){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function Ya(e,t,n,r,a){return a||Wa(e,0,n,4),va(e,t,n,r,23,4),n+4}function Za(e,t,n,r,a){return a||Wa(e,0,n,8),va(e,t,n,r,52,8),n+8}Aa.prototype.slice=function(e,t){var n,r=this.length;if((e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t0&&(a*=256);)r+=this[e+--t]*a;return r},Aa.prototype.readUInt8=function(e,t){return t||Ha(e,1,this.length),this[e]},Aa.prototype.readUInt16LE=function(e,t){return t||Ha(e,2,this.length),this[e]|this[e+1]<<8},Aa.prototype.readUInt16BE=function(e,t){return t||Ha(e,2,this.length),this[e]<<8|this[e+1]},Aa.prototype.readUInt32LE=function(e,t){return t||Ha(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},Aa.prototype.readUInt32BE=function(e,t){return t||Ha(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},Aa.prototype.readIntLE=function(e,t,n){e|=0,t|=0,n||Ha(e,t,this.length);for(var r=this[e],a=1,i=0;++i=(a*=128)&&(r-=Math.pow(2,8*t)),r},Aa.prototype.readIntBE=function(e,t,n){e|=0,t|=0,n||Ha(e,t,this.length);for(var r=t,a=1,i=this[e+--r];r>0&&(a*=256);)i+=this[e+--r]*a;return i>=(a*=128)&&(i-=Math.pow(2,8*t)),i},Aa.prototype.readInt8=function(e,t){return t||Ha(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},Aa.prototype.readInt16LE=function(e,t){t||Ha(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},Aa.prototype.readInt16BE=function(e,t){t||Ha(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},Aa.prototype.readInt32LE=function(e,t){return t||Ha(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},Aa.prototype.readInt32BE=function(e,t){return t||Ha(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},Aa.prototype.readFloatLE=function(e,t){return t||Ha(e,4,this.length),fa(this,e,!0,23,4)},Aa.prototype.readFloatBE=function(e,t){return t||Ha(e,4,this.length),fa(this,e,!1,23,4)},Aa.prototype.readDoubleLE=function(e,t){return t||Ha(e,8,this.length),fa(this,e,!0,52,8)},Aa.prototype.readDoubleBE=function(e,t){return t||Ha(e,8,this.length),fa(this,e,!1,52,8)},Aa.prototype.writeUIntLE=function(e,t,n,r){(e=+e,t|=0,n|=0,r)||Qa(this,e,t,n,Math.pow(2,8*n)-1,0);var a=1,i=0;for(this[t]=255&e;++i=0&&(i*=256);)this[t+a]=e/i&255;return t+n},Aa.prototype.writeUInt8=function(e,t,n){return e=+e,t|=0,n||Qa(this,e,t,1,255,0),Aa.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},Aa.prototype.writeUInt16LE=function(e,t,n){return e=+e,t|=0,n||Qa(this,e,t,2,65535,0),Aa.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):qa(this,e,t,!0),t+2},Aa.prototype.writeUInt16BE=function(e,t,n){return e=+e,t|=0,n||Qa(this,e,t,2,65535,0),Aa.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):qa(this,e,t,!1),t+2},Aa.prototype.writeUInt32LE=function(e,t,n){return e=+e,t|=0,n||Qa(this,e,t,4,4294967295,0),Aa.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):za(this,e,t,!0),t+4},Aa.prototype.writeUInt32BE=function(e,t,n){return e=+e,t|=0,n||Qa(this,e,t,4,4294967295,0),Aa.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):za(this,e,t,!1),t+4},Aa.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t|=0,!r){var a=Math.pow(2,8*n-1);Qa(this,e,t,n,a-1,-a)}var i=0,o=1,s=0;for(this[t]=255&e;++i>0)-s&255;return t+n},Aa.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t|=0,!r){var a=Math.pow(2,8*n-1);Qa(this,e,t,n,a-1,-a)}var i=n-1,o=1,s=0;for(this[t+i]=255&e;--i>=0&&(o*=256);)e<0&&0===s&&0!==this[t+i+1]&&(s=1),this[t+i]=(e/o>>0)-s&255;return t+n},Aa.prototype.writeInt8=function(e,t,n){return e=+e,t|=0,n||Qa(this,e,t,1,127,-128),Aa.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},Aa.prototype.writeInt16LE=function(e,t,n){return e=+e,t|=0,n||Qa(this,e,t,2,32767,-32768),Aa.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):qa(this,e,t,!0),t+2},Aa.prototype.writeInt16BE=function(e,t,n){return e=+e,t|=0,n||Qa(this,e,t,2,32767,-32768),Aa.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):qa(this,e,t,!1),t+2},Aa.prototype.writeInt32LE=function(e,t,n){return e=+e,t|=0,n||Qa(this,e,t,4,2147483647,-2147483648),Aa.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):za(this,e,t,!0),t+4},Aa.prototype.writeInt32BE=function(e,t,n){return e=+e,t|=0,n||Qa(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),Aa.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):za(this,e,t,!1),t+4},Aa.prototype.writeFloatLE=function(e,t,n){return Ya(this,e,t,!0,n)},Aa.prototype.writeFloatBE=function(e,t,n){return Ya(this,e,t,!1,n)},Aa.prototype.writeDoubleLE=function(e,t,n){return Za(this,e,t,!0,n)},Aa.prototype.writeDoubleBE=function(e,t,n){return Za(this,e,t,!1,n)},Aa.prototype.copy=function(e,t,n,r){if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t=0;--a)e[a+t]=this[a+n];else if(i<1e3||!Aa.TYPED_ARRAY_SUPPORT)for(a=0;a>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(i=t;i55295&&n<57344){if(!a){if(n>56319){(t-=3)>-1&&i.push(239,191,189);continue}if(o+1===r){(t-=3)>-1&&i.push(239,191,189);continue}a=n;continue}if(n<56320){(t-=3)>-1&&i.push(239,191,189),a=n;continue}n=65536+(a-55296<<10|n-56320)}else a&&(t-=3)>-1&&i.push(239,191,189);if(a=null,n<128){if((t-=1)<0)break;i.push(n)}else if(n<2048){if((t-=2)<0)break;i.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;i.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;i.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return i}function Ja(e){return function(e){var t,n,r,a,i,o;ua||la();var s=e.length;if(s%4>0)throw new Error("Invalid string. Length must be a multiple of 4");i="="===e[s-2]?2:"="===e[s-1]?1:0,o=new sa(3*s/4-i),r=i>0?s-4:s;var u=0;for(t=0,n=0;t>16&255,o[u++]=a>>8&255,o[u++]=255&a;return 2===i?(a=oa[e.charCodeAt(t)]<<2|oa[e.charCodeAt(t+1)]>>4,o[u++]=255&a):1===i&&(a=oa[e.charCodeAt(t)]<<10|oa[e.charCodeAt(t+1)]<<4|oa[e.charCodeAt(t+2)]>>2,o[u++]=a>>8&255,o[u++]=255&a),o}(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(Ka,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function ei(e,t,n,r){for(var a=0;a=t.length||a>=e.length);++a)t[a+n]=e[a];return a}function ti(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}function ni(e){var t=new Uint8Array(2);t[1]=1;var n=e._meta.TransferSyntaxUID&&e._meta.TransferSyntaxUID.Value&&e._meta.TransferSyntaxUID.Value[0]?e._meta.TransferSyntaxUID.Value[0]:"1.2.840.10008.1.2.1";e._meta={MediaStorageSOPClassUID:e.SOPClassUID,MediaStorageSOPInstanceUID:e.SOPInstanceUID,ImplementationVersionName:"dcmjs-0.0",TransferSyntaxUID:n,ImplementationClassUID:"2.25.80302813137786398554742050926734630921603366648225212145404",FileMetaInformationVersion:t.buffer};var r=zr.denaturalizeDataset(e._meta),a=new ta(r);return a.dict=zr.denaturalizeDataset(e),a}function ri(e){return Aa.from(ni(e).write())}function ai(e){var t=ri(e);return new Blob([t],{type:"application/dicom"})}var ii=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};b(this,e),this.options=JSON.parse(JSON.stringify(n));var r=this.options;r.Manufacturer=n.Manufacturer||"Unspecified",r.ManufacturerModelName=n.ManufacturerModelName||"Unspecified",r.SeriesDescription=n.SeriesDescription||"Research Derived series",r.SeriesNumber=n.SeriesNumber||"99",r.SoftwareVersions=n.SoftwareVersions||"0",r.DeviceSerialNumber=n.DeviceSerialNumber||"1";var a=zr.date(),i=zr.time();r.SeriesDate=n.SeriesDate||a,r.SeriesTime=n.SeriesTime||i,r.ContentDate=n.ContentDate||a,r.ContentTime=n.ContentTime||i,r.SOPInstanceUID=n.SOPInstanceUID||zr.uid(),r.SeriesInstanceUID=n.SeriesInstanceUID||zr.uid(),r.ClinicalTrialTimePointID=n.ClinicalTrialTimePointID||"",r.ClinicalTrialCoordinatingCenterName=n.ClinicalTrialCoordinatingCenterName||"",r.ClinicalTrialSeriesID=n.ClinicalTrialSeriesID||"",r.ImageComments=n.ImageComments||"NOT FOR CLINICAL USE",r.ContentQualification="RESEARCH",this.referencedDatasets=t,this.referencedDataset=this.referencedDatasets[0],this.dataset={_vrMap:this.referencedDataset._vrMap,_meta:this.referencedDataset._meta},this.derive()}return I(e,[{key:"assignToDataset",value:function(e){var t=this;Object.keys(e).forEach((function(n){return t.dataset[n]=e[n]}))}},{key:"assignFromReference",value:function(e){var t=this;e.forEach((function(e){return t.dataset[e]=t.referencedDataset[e]||""}))}},{key:"assignFromOptions",value:function(e){var t=this;e.forEach((function(e){return t.dataset[e]=t.options[e]||""}))}},{key:"derive",value:function(){this.assignFromReference(["AccessionNumber","ReferringPhysicianName","StudyDate","StudyID","StudyTime","PatientName","PatientID","PatientBirthDate","PatientSex","PatientAge","StudyInstanceUID","StudyID"]),this.assignFromOptions(["Manufacturer","SoftwareVersions","DeviceSerialNumber","ManufacturerModelName","SeriesDescription","SeriesNumber","ImageComments","SeriesDate","SeriesTime","ContentDate","ContentTime","ContentQualification","SOPInstanceUID","SeriesInstanceUID"])}}],[{key:"copyDataset",value:function(e){return JSON.parse(JSON.stringify(e))}}]),e}(),oi=function(e){C(n,e);var t=x(n);function n(e){var r,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};b(this,n);var i=(r=t.call(this,e,a)).options;return i.ContentLabel=a.ContentLabel||"",i.ContentDescription=a.ContentDescription||"",i.ContentCreatorName=a.ContentCreatorName||"",r}return I(n,[{key:"derive",value:function(){L(D(n.prototype),"derive",this).call(this),this.assignToDataset({ImageType:["DERIVED","PRIMARY"],LossyImageCompression:"00",InstanceNumber:"1"}),this.assignFromReference(["SOPClassUID","Modality","FrameOfReferenceUID","PositionReferenceIndicator","NumberOfFrames","Rows","Columns","SamplesPerPixel","PhotometricInterpretation","BitsStored","HighBit"]),this.assignFromOptions(["ContentLabel","ContentDescription","ContentCreatorName"]),this.referencedDataset.SharedFunctionalGroupsSequence&&(this.dataset.SharedFunctionalGroupsSequence=ii.copyDataset(this.referencedDataset.SharedFunctionalGroupsSequence)),this.referencedDataset.PerFrameFunctionalGroupsSequence&&(this.dataset.PerFrameFunctionalGroupsSequence=ii.copyDataset(this.referencedDataset.PerFrameFunctionalGroupsSequence)),this.dataset.PixelData=new ArrayBuffer(this.referencedDataset.PixelData.byteLength)}}]),n}(ii),si=function(e){C(n,e);var t=x(n);function n(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return b(this,n),t.call(this,e,r)}return I(n,[{key:"derive",value:function(){L(D(n.prototype),"derive",this).call(this),this.assignFromReference(["WindowCenter","WindowWidth","BitsAllocated","PixelRepresentation","BodyPartExamined","Laterality","PatientPosition","RescaleSlope","RescaleIntercept","PixelPresentation","VolumetricProperties","VolumeBasedCalculationTechnique","PresentationLUTShape"])}}]),n}(oi),ui=function(){function e(t){b(this,e),this.datasets=t,this.dataset=void 0}return I(e,[{key:"normalize",value:function(){return"No normalization defined"}}],[{key:"consistentSOPClassUIDs",value:function(e){var t;return e.forEach((function(e){e.SOPClassUID&&(t||(t=e.SOPClassUID),e.SOPClassUID===t||p.error("inconsistent sopClassUIDs: ",e.SOPClassUID,t))})),t}},{key:"normalizerForSOPClassUID",value:function(e){e=e.replace(/[^0-9.]/g,"");var t=zr.sopClassUIDsByName,n={};return n[t.CTImage]=mi,n[t.ParametricMapStorage]=gi,n[t.MRImage]=ci,n[t.EnhancedCTImage]=di,n[t.LegacyConvertedEnhancedCTImage]=di,n[t.EnhancedMRImage]=fi,n[t.LegacyConvertedEnhancedMRImage]=fi,n[t.EnhancedUSVolume]=vi,n[t.PETImage]=pi,n[t.EnhancedPETImage]=pi,n[t.LegacyConvertedEnhancedPETImage]=pi,n[t.Segmentation]=hi,n[t.DeformableSpatialRegistration]=Ai,n[e]}},{key:"isMultiframeSOPClassUID",value:function(e){var t=zr.sopClassUIDsByName;return-1!==[t.EnhancedMRImage,t.LegacyConvertedEnhancedMRImage,t.EnhancedCTImage,t.LegacyConvertedEnhancedCTImage,t.EnhancedUSVolume,t.EnhancedPETImage,t.LegacyConvertedEnhancedPETImage,t.Segmentation,t.ParametricMapStorage].indexOf(e)}},{key:"isMultiframeDataset",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.dataset,n=t.SOPClassUID.replace(/[^0-9.]/g,"");return e.isMultiframeSOPClassUID(n)}},{key:"normalizeToDataset",value:function(t){var n=e.consistentSOPClassUIDs(t),r=e.normalizerForSOPClassUID(n);if(r){var a=new r(t);return a.normalize(),a.dataset}p.error("no normalizerClass for ",n)}}]),e}(),li=function(e){C(n,e);var t=x(n);function n(){return b(this,n),t.apply(this,arguments)}return I(n,[{key:"normalize",value:function(){this.convertToMultiframe(),this.normalizeMultiframe()}},{key:"convertToMultiframe",value:function(){if(1===this.datasets.length&&ui.isMultiframeDataset(this.datasets[0]))this.dataset=this.datasets[0];else{this.derivation=new si(this.datasets),this.dataset=this.derivation.dataset;var e=this.dataset,t=this.datasets[0];e.NumberOfFrames=this.datasets.length,e.SOPClassUID=t.SOPClassUID,e.Rows=t.Rows,e.Columns=t.Columns,e.BitsAllocated=t.BitsAllocated,e.PixelRepresentation=t.PixelRepresentation,e.RescaleSlope=t.RescaleSlope||"1",e.RescaleIntercept=t.RescaleIntercept||"0";var r=t.ImagePositionPatient,a=t.ImageOrientationPatient.slice(0,3),i=t.ImageOrientationPatient.slice(3,6),o=n.vec3CrossProduct(a,i),s=[];this.datasets.forEach((function(e){var t=e.ImagePositionPatient.slice(),a=n.vec3Subtract(t,r),i=n.vec3Dot(a,o);s.push([i,e])})),s.sort((function(e,t){return t[0]-e[0]})),16!==e.BitsAllocated&&p.error("Only works with 16 bit data, not "+String(this.dataset.BitsAllocated)),t._vrMap&&!t._vrMap.PixelData?(p.warn("No vr map given for pixel data, using OW"),e._vrMap={PixelData:"OW"}):e._vrMap={PixelData:t._vrMap.PixelData};var u=t.PixelData.byteLength;e.PixelData=new ArrayBuffer(e.NumberOfFrames*u);var l=0;s.forEach((function(t){var n=t[1],r=new Uint16Array(n.PixelData),a=new Uint16Array(e.PixelData,l*u,u/2);try{a.set(r)}catch(r){if(r instanceof RangeError){var i="Error inserting pixels in PixelData\n"+"frameSize ".concat(u,"\n")+"NumberOfFrames ".concat(e.NumberOfFrames,"\n")+"pair ".concat(t,"\n")+"dataset PixelData size ".concat(n.PixelData.length);p.error(i)}}l++})),e.NumberOfFrames<2&&p.error("Cannot populate shared groups uniquely without multiple frames");var c=k(s[0],2),d=c[0],f=c[1],v=s[1][0],m=Math.abs(v-d);e.SharedFunctionalGroupsSequence={PlaneOrientationSequence:{ImageOrientationPatient:f.ImageOrientationPatient},PixelMeasuresSequence:{PixelSpacing:f.PixelSpacing,SpacingBetweenSlices:m,SliceThickness:m}},e.ReferencedSeriesSequence={SeriesInstanceUID:f.SeriesInstanceUID,ReferencedInstanceSequence:[]},e.PerFrameFunctionalGroupsSequence=[],s.forEach((function(t){var n=t[1];e.PerFrameFunctionalGroupsSequence.push({PlanePositionSequence:{ImagePositionPatient:n.ImagePositionPatient},FrameVOILUTSequence:{WindowCenter:n.WindowCenter,WindowWidth:n.WindowWidth}}),e.ReferencedSeriesSequence.ReferencedInstanceSequence.push({ReferencedSOPClassUID:n.SOPClassUID,ReferencedSOPInstanceUID:n.SOPInstanceUID})}));var h=zr.uid();this.dataset.DimensionOrganizationSequence={DimensionOrganizationUID:h},this.dataset.DimensionIndexSequence=[{DimensionOrganizationUID:h,DimensionIndexPointer:2097202,FunctionalGroupPointer:2134291,DimensionDescriptionLabel:"ImagePositionPatient"}]}}},{key:"normalizeMultiframe",value:function(){var e=this.dataset;if(e.NumberOfFrames){e.PixelRepresentation||(e.PixelRepresentation=1),e.StudyID&&""!==e.StudyID||(e.StudyID="No Study ID");-1===["R","L"].indexOf(e.Laterality)&&delete e.Laterality,e.PresentationLUTShape||(e.PresentationLUTShape="IDENTITY"),e.SharedFunctionalGroupsSequence||p.error("Can only process multiframe data with SharedFunctionalGroupsSequence"),"PROSTATE"===e.BodyPartExamined&&(e.SharedFunctionalGroupsSequence.FrameAnatomySequence={AnatomicRegionSequence:{CodeValue:"T-9200B",CodingSchemeDesignator:"SRT",CodeMeaning:"Prostate"},FrameLaterality:"U"});var t=e.RescaleIntercept||0,n=e.RescaleSlope||1;e.SharedFunctionalGroupsSequence.PixelValueTransformationSequence={RescaleIntercept:t,RescaleSlope:n,RescaleType:"US"};var r=1;if(this.datasets.forEach((function(t){1===e.NumberOfFrames&&(e.PerFrameFunctionalGroupsSequence=[e.PerFrameFunctionalGroupsSequence]),e.PerFrameFunctionalGroupsSequence[r-1].FrameContentSequence={FrameAcquisitionDuration:0,StackID:1,InStackPositionNumber:r,DimensionIndexValues:r};var n=t.AcquisitionDate+t.AcquisitionTime;if(!isNaN(n)){var a=e.PerFrameFunctionalGroupsSequence[r-1].FrameContentSequence;a.FrameAcquisitionDateTime=n,a.FrameReferenceDateTime=n}r++})),e.WindowCenter&&e.WindowWidth&&(Array.isArray(e.WindowCenter)||(e.WindowCenter=[e.WindowCenter]),Array.isArray(e.WindowWidth)||(e.WindowWidth=[e.WindowWidth])),(!e.WindowCenter||!e.WindowWidth)&&(e.WindowCenter=[],e.WindowWidth=[],e.PerFrameFunctionalGroupsSequence)){var a={center:0,width:0,count:0};e.PerFrameFunctionalGroupsSequence.forEach((function(e){if(e.FrameVOILUT){var t=e.FrameVOILUTSequence.WindowCenter,n=e.FrameVOILUTSequence.WindowWidth;e.FrameVOILUTSequence&&t&&n&&(Array.isArray(t)&&(t=t[0]),Array.isArray(n)&&(n=n[0]),a.center+=Number(t),a.width+=Number(n),a.count++)}})),a.count>0&&(e.WindowCenter.push(String(a.center/a.count)),e.WindowWidth.push(String(a.width/a.count)))}0===e.WindowCenter.length&&(e.WindowCenter=[300]),0===e.WindowWidth.length&&(e.WindowWidth=[500])}else p.error("Missing number or frames not supported")}}],[{key:"vec3CrossProduct",value:function(e,t){var n=e[0],r=e[1],a=e[2],i=t[0],o=t[1],s=t[2],u=[];return u[0]=r*s-a*o,u[1]=a*i-n*s,u[2]=n*o-r*i,u}},{key:"vec3Subtract",value:function(e,t){var n=[];return n[0]=e[0]-t[0],n[1]=e[1]-t[1],n[2]=e[2]-t[2],n}},{key:"vec3Dot",value:function(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}}]),n}(ui),ci=function(e){C(n,e);var t=x(n);function n(){return b(this,n),t.apply(this,arguments)}return I(n,[{key:"normalize",value:function(){L(D(n.prototype),"normalize",this).call(this),this.dataset.SOPClassUID="LegacyConvertedEnhancedMRImage"}},{key:"normalizeMultiframe",value:function(){L(D(n.prototype),"normalizeMultiframe",this).call(this);var e=this.dataset;e.ImageType&&e.ImageType.constructor&&"Array"==e.ImageType.constructor.name&&4==e.ImageType.length||(e.ImageType=["ORIGINAL","PRIMARY","OTHER","NONE"]),e.SharedFunctionalGroupsSequence.MRImageFrameTypeSequence={FrameType:e.ImageType,PixelPresentation:"MONOCHROME",VolumetricProperties:"VOLUME",VolumeBasedCalculationTechnique:"NONE",ComplexImageComponent:"MAGNITUDE",AcquisitionContrast:"UNKNOWN"}}}]),n}(li),di=function(e){C(n,e);var t=x(n);function n(){return b(this,n),t.apply(this,arguments)}return I(n,[{key:"normalize",value:function(){L(D(n.prototype),"normalize",this).call(this)}}]),n}(li),fi=function(e){C(n,e);var t=x(n);function n(){return b(this,n),t.apply(this,arguments)}return I(n,[{key:"normalize",value:function(){L(D(n.prototype),"normalize",this).call(this)}}]),n}(li),vi=function(e){C(n,e);var t=x(n);function n(){return b(this,n),t.apply(this,arguments)}return I(n,[{key:"normalize",value:function(){L(D(n.prototype),"normalize",this).call(this)}}]),n}(li),mi=function(e){C(n,e);var t=x(n);function n(){return b(this,n),t.apply(this,arguments)}return I(n,[{key:"normalize",value:function(){L(D(n.prototype),"normalize",this).call(this);var e=zr.sopClassUIDsByName;this.dataset.SOPClassUID=e.EnhancedCTImage}}]),n}(li),pi=function(e){C(n,e);var t=x(n);function n(){return b(this,n),t.apply(this,arguments)}return I(n,[{key:"normalize",value:function(){L(D(n.prototype),"normalize",this).call(this);var e=zr.sopClassUIDsByName;this.dataset.SOPClassUID=e.EnhancedPETImage}}]),n}(li),hi=function(e){C(n,e);var t=x(n);function n(){return b(this,n),t.apply(this,arguments)}return I(n,[{key:"normalize",value:function(){L(D(n.prototype),"normalize",this).call(this)}}]),n}(li),gi=function(e){C(n,e);var t=x(n);function n(){return b(this,n),t.apply(this,arguments)}return I(n,[{key:"normalize",value:function(){L(D(n.prototype),"normalize",this).call(this);var e=this.datasets[0];32!==e.BitsAllocated&&p.error("Only works with 32 bit data, not "+String(e.BitsAllocated))}}]),n}(li),Ai=function(e){C(n,e);var t=x(n);function n(){return b(this,n),t.apply(this,arguments)}return I(n,[{key:"normalize",value:function(){this.dataset=this.datasets[0]}}]),n}(ui),yi=function(e){C(n,e);var t=x(n);function n(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{includeSliceSpacing:!0};return b(this,n),t.call(this,e,r)}return I(n,[{key:"derive",value:function(){L(D(n.prototype),"derive",this).call(this),this.assignToDataset({SOPClassUID:zr.sopClassUIDsByName.Segmentation,Modality:"SEG",SamplesPerPixel:"1",PhotometricInterpretation:"MONOCHROME2",BitsAllocated:"1",BitsStored:"1",HighBit:"0",PixelRepresentation:"0",LossyImageCompression:"00",SegmentationType:"BINARY",ContentLabel:"SEGMENTATION"});var e=zr.uid();if(this.dataset.DimensionOrganizationSequence={DimensionOrganizationUID:e},this.dataset.DimensionIndexSequence=[{DimensionOrganizationUID:e,DimensionIndexPointer:6422539,FunctionalGroupPointer:6422538,DimensionDescriptionLabel:"ReferencedSegmentNumber"},{DimensionOrganizationUID:e,DimensionIndexPointer:2097202,FunctionalGroupPointer:2134291,DimensionDescriptionLabel:"ImagePositionPatient"}],this.dataset.SegmentSequence=[],this.referencedDataset.ReferencedSeriesSequence)this.dataset.ReferencedSeriesSequence=ii.copyDataset(this.referencedDataset.ReferencedSeriesSequence);else{for(var t=[],r=0;r1&&void 0!==arguments[1]?arguments[1]:{};return b(this,n),t.call(this,e,r)}return I(n,[{key:"derive",value:function(){L(D(n.prototype),"derive",this).call(this),this.assignToDataset({}),this.assignFromReference([])}}]),n}(ii),bi=function(e){C(n,e);var t=x(n);function n(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return b(this,n),t.call(this,e,r)}return I(n,[{key:"derive",value:function(){L(D(n.prototype),"derive",this).call(this),this.assignToDataset({SOPClassUID:zr.sopClassUIDsByName.EnhancedSR,Modality:"SR",ValueType:"CONTAINER"}),this.assignFromReference([])}}]),n}(ii),wi=function(){function e(t){b(this,e),this.TIDIncludeGroups=t;var n=[],r=[];this.ImageLibraryContentSequence=n,this.CurrentRequestedProcedureEvidenceSequence=r,this.PersonObserverName={RelationshipType:"HAS OBS CONTEXT",ValueType:"PNAME",ConceptNameCodeSequence:{CodeValue:"121008",CodingSchemeDesignator:"DCM",CodeMeaning:"Person Observer Name"},PersonName:"unknown^unknown"},this.tid1500={ConceptNameCodeSequence:{CodeValue:"126000",CodingSchemeDesignator:"DCM",CodeMeaning:"Imaging Measurement Report"},ContinuityOfContent:"SEPARATE",PerformedProcedureCodeSequence:[],CompletionFlag:"COMPLETE",VerificationFlag:"UNVERIFIED",ReferencedPerformedProcedureStepSequence:[],InstanceNumber:1,CurrentRequestedProcedureEvidenceSequence:r,CodingSchemeIdentificationSequence:{CodingSchemeDesignator:"99dcmjs",CodingSchemeName:"Codes used for dcmjs",CodingSchemeVersion:"0",CodingSchemeResponsibleOrganization:"https://github.com/dcmjs-org/dcmjs"},ContentTemplateSequence:{MappingResource:"DCMR",TemplateIdentifier:"1500"},ContentSequence:[{RelationshipType:"HAS CONCEPT MOD",ValueType:"CODE",ConceptNameCodeSequence:qr({CodeValue:"121049",CodingSchemeDesignator:"DCM",CodeMeaning:"Language of Content Item and Descendants"}),ConceptCodeSequence:qr({CodeValue:"eng",CodingSchemeDesignator:"RFC5646",CodeMeaning:"English"}),ContentSequence:qr({RelationshipType:"HAS CONCEPT MOD",ValueType:"CODE",ConceptNameCodeSequence:qr({CodeValue:"121046",CodingSchemeDesignator:"DCM",CodeMeaning:"Country of Language"}),ConceptCodeSequence:qr({CodeValue:"US",CodingSchemeDesignator:"ISO3166_1",CodeMeaning:"United States"})})},this.PersonObserverName,{RelationshipType:"HAS CONCEPT MOD",ValueType:"CODE",ConceptNameCodeSequence:qr({CodeValue:"121058",CodingSchemeDesignator:"DCM",CodeMeaning:"Procedure reported"}),ConceptCodeSequence:qr({CodeValue:"1",CodingSchemeDesignator:"99dcmjs",CodeMeaning:"Unknown procedure"})},{RelationshipType:"CONTAINS",ValueType:"CONTAINER",ConceptNameCodeSequence:{CodeValue:"111028",CodingSchemeDesignator:"DCM",CodeMeaning:"Image Library"},ContinuityOfContent:"SEPARATE",ContentSequence:{RelationshipType:"CONTAINS",ValueType:"CONTAINER",ConceptNameCodeSequence:{CodeValue:"126200",CodingSchemeDesignator:"DCM",CodeMeaning:"Image Library Group"},ContinuityOfContent:"SEPARATE",ContentSequence:n}}]}}return I(e,[{key:"validate",value:function(){}},{key:"contentItem",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};t.PersonName&&(this.PersonObserverName.PersonName=t.PersonName);var n=Array.isArray(e)?e:[e];return this.addTID1501MeasurementGroups(n,t),this.tid1500}},{key:"addTID1501MeasurementGroups",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.CurrentRequestedProcedureEvidenceSequence,r=this.ImageLibraryContentSequence,a=t.sopInstanceUIDsToSeriesInstanceUIDMap;if(e.length>1&&void 0===a)throw new Error("addTID1501MeasurementGroups provided with ".concat(e.length," derivationSourceDatasets, with no sopInstanceUIDsToSeriesInstanceUIDMap in options."));var i=this.TIDIncludeGroups.TID1501MeasurementGroups;if(i){var o=[];i.forEach((function(e){o=o.concat(e.contentItem())}));var s=[];i.forEach((function(t){t.TID300Measurements.forEach((function(t){var i=t.ReferencedSOPSequence.ReferencedSOPInstanceUID;if(!s.includes(i)){var o;if(r.push({RelationshipType:"CONTAINS",ValueType:"IMAGE",ReferencedSOPSequence:t.ReferencedSOPSequence}),1===e.length)o=e[0];else{var u=a[i];o=e.find((function(e){return e.SeriesInstanceUID===u}))}n.push({StudyInstanceUID:o.StudyInstanceUID,ReferencedSeriesSequence:{SeriesInstanceUID:o.SeriesInstanceUID,ReferencedSOPSequence:t.ReferencedSOPSequence}}),s.push(i)}}))}));var u={RelationshipType:"CONTAINS",ValueType:"CONTAINER",ConceptNameCodeSequence:{CodeValue:"126010",CodingSchemeDesignator:"DCM",CodeMeaning:"Imaging Measurements"},ContinuityOfContent:"SEPARATE",ContentSequence:o};this.tid1500.ContentSequence.push(u)}}}]),e}(),Ii=function(){function e(t){b(this,e),this.TID300Measurements=t}return I(e,[{key:"contentItem",value:function(){var e=this,t=this.TID300Measurements,n=[];return t.forEach((function(t){n.push(e.getMeasurementGroup(t.contentItem()))})),n}},{key:"getMeasurementGroup",value:function(e){return{RelationshipType:"CONTAINS",ValueType:"CONTAINER",ConceptNameCodeSequence:{CodeValue:"125007",CodingSchemeDesignator:"DCM",CodeMeaning:"Measurement Group"},ContinuityOfContent:"SEPARATE",ContentSequence:N(e)}}}]),e}(),Ei=function(e){return Array.isArray(e)?e:[e]},Ci=function(e){return function(t){return t.ConceptNameCodeSequence.CodeMeaning===e}},Di={CodingSchemeDesignator:"DCM",CodeValue:"121071"},_i={CodingSchemeDesignator:"SCT",CodeValue:"363698007"},Mi={CodingSchemeDesignator:"SRT",CodeValue:"G-C0E3"},Oi=function(e,t,n){var r=e.ConceptNameCodeSequence;if(r){var a=r.CodingSchemeDesignator,i=r.CodeValue;return a==t.CodingSchemeDesignator&&i==t.CodeValue||n&&a==n.CodingSchemeDesignator&&i==n.CodeValue}};function Pi(e,t,n){var r=t[e],a=Ti.CORNERSTONE_TOOL_CLASSES_BY_TOOL_TYPE[e];if(r&&r.data&&r.data.length&&a){var i=r.data.map((function(e){return function(e,t,n,r){var a=r.getTID300RepresentationArguments(e);return a.ReferencedSOPSequence=n,new r.TID300Representation(a)}(e,0,n,a)}));return new Ii(i)}}var Ti=function(){function e(){b(this,e)}return I(e,null,[{key:"getSetupMeasurementData",value:function(e){var t=e.ContentSequence,n=Ei(t),r=n.find((function(e){return Oi(e,Di)})),a=n.filter((function(e){return Oi(e,_i,Mi)}))||[],i=n.find((function(e){return"NUM"===e.ValueType})),o=Ei(i.ContentSequence).find((function(e){return"SCOORD"===e.ValueType})),s=o.ContentSequence.ReferencedSOPSequence,u=s.ReferencedSOPInstanceUID,l=s.ReferencedFrameNumber,c={sopInstanceUid:u,frameIndex:l||1,complete:!0,finding:r?qr(r.ConceptCodeSequence):void 0,findingSites:a.map((function(e){return qr(e.ConceptCodeSequence)}))};c.finding&&(c.description=c.finding.CodeMeaning);var d=c.findingSites&&c.findingSites[0];return d&&(c.location=d[0]&&d[0].CodeMeaning||d.CodeMeaning),{defaultState:c,findingGroup:r,findingSiteGroups:a,NUMGroup:i,SCOORDGroup:o,ReferencedSOPSequence:s,ReferencedSOPInstanceUID:u,ReferencedFrameNumber:l}}},{key:"generateReport",value:function(e,t,n){var r=[],a=Object.keys(e)[0];if(!a)throw new Error("No measurements provided.");var i=t.get("generalSeriesModule",a),o=i.studyInstanceUID,s=i.seriesInstanceUID;Object.keys(e).forEach((function(n){var a=t.get("sopCommonModule",n),i=t.get("frameNumber",n),o=e[n],s=Object.keys(o),u={ReferencedSOPClassUID:a.sopClassUID,ReferencedSOPInstanceUID:a.sopInstanceUID};ui.isMultiframeSOPClassUID(a.sopClassUID)&&(u.ReferencedFrameNumber=i);var l=[];s.forEach((function(e){var t=Pi(e,o,u);t&&l.push(t)})),r=r.concat(l)}));var u=new wi({TID1501MeasurementGroups:r},n),l=new Uint8Array(2);l[1]=1;var c={StudyInstanceUID:o,SeriesInstanceUID:s},d={FileMetaInformationVersion:{Value:[l.buffer],vr:"OB"},TransferSyntaxUID:{Value:["1.2.840.10008.1.2.1"],vr:"UI"},ImplementationClassUID:{Value:[zr.uid()],vr:"UI"},ImplementationVersionName:{Value:["dcmjs"],vr:"SH"}};c._meta=d,c._vrMap={PixelData:"OW"};var f=new bi([c]),v=u.contentItem(c);return f.dataset=Object.assign(f.dataset,v),f.dataset._meta=d,f}},{key:"generateToolState",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if("1500"!==t.ContentTemplateSequence.TemplateIdentifier)throw new Error("This package can currently only interpret DICOM SR TID 1500");var r="Imaging Measurements",a="Measurement Group",i="Tracking Identifier",o=Ei(t.ContentSequence).find(Ci(r)),s=Ei(o.ContentSequence).filter(Ci(a)),u={},l=e.CORNERSTONE_TOOL_CLASSES_BY_UTILITY_TYPE,c=[];return Object.keys(l).forEach((function(e){c.push(l[e]),u[e]=[]})),s.forEach((function(e){var r=Ei(e.ContentSequence).find((function(e){return e.ConceptNameCodeSequence.CodeMeaning===i})).TextValue,a=n.getToolClass?n.getToolClass(e,t,c):c.find((function(e){return e.isValidCornerstoneTrackingIdentifier(r)}));if(a){var o=a.getMeasurementData(e);console.log("=== ".concat(a.toolType," ===")),console.log(o),u[a.toolType].push(o)}})),u}},{key:"registerTool",value:function(t){e.CORNERSTONE_TOOL_CLASSES_BY_UTILITY_TYPE[t.utilityToolType]=t,e.CORNERSTONE_TOOL_CLASSES_BY_TOOL_TYPE[t.toolType]=t,e.MEASUREMENT_BY_TOOLTYPE[t.toolType]=t.utilityToolType}}]),e}();Ti.MEASUREMENT_BY_TOOLTYPE={},Ti.CORNERSTONE_TOOL_CLASSES_BY_UTILITY_TYPE={},Ti.CORNERSTONE_TOOL_CLASSES_BY_TOOL_TYPE={};var xi=function(){function e(t){b(this,e),this.ReferencedSOPSequence=t.ReferencedSOPSequence,this.props=t}return I(e,[{key:"getMeasurement",value:function(e){return[].concat(N(this.getTrackingGroups()),N(this.getFindingGroup()),N(this.getFindingSiteGroups()),N(e))}},{key:"getTrackingGroups",value:function(){return[{RelationshipType:"HAS OBS CONTEXT",ValueType:"TEXT",ConceptNameCodeSequence:{CodeValue:"112039",CodingSchemeDesignator:"DCM",CodeMeaning:"Tracking Identifier"},TextValue:this.props.trackingIdentifierTextValue||"web annotation"},{RelationshipType:"HAS OBS CONTEXT",ValueType:"UIDREF",ConceptNameCodeSequence:{CodeValue:"112040",CodingSchemeDesignator:"DCM",CodeMeaning:"Tracking Unique Identifier"},UID:zr.uid()}]}},{key:"getFindingGroup",value:function(){var e=this.props.finding;if(!e)return[];var t=e.CodeValue,n=e.CodingSchemeDesignator,r=e.CodeMeaning;return[{RelationshipType:"CONTAINS",ValueType:"CODE",ConceptNameCodeSequence:qr({CodeValue:"121071",CodingSchemeDesignator:"DCM",CodeMeaning:"Finding"}),ConceptCodeSequence:qr({CodeValue:t,CodingSchemeDesignator:n,CodeMeaning:r})}]}},{key:"getFindingSiteGroups",value:function(){return(this.props.findingSites||[]).map((function(e){var t=e.CodeValue,n=e.CodingSchemeDesignator,r=e.CodeMeaning;return{RelationshipType:"CONTAINS",ValueType:"CODE",ConceptNameCodeSequence:qr({CodeValue:"363698007",CodingSchemeDesignator:"SCT",CodeMeaning:"Finding Site"}),ConceptCodeSequence:qr({CodeValue:t,CodingSchemeDesignator:n,CodeMeaning:r})}}))}}]),e}(),Ri=function(e){C(n,e);var t=x(n);function n(){return b(this,n),t.apply(this,arguments)}return I(n,[{key:"contentItem",value:function(){var e=this.props,t=e.point1,n=e.point2,r=e.distance,a=e.ReferencedSOPSequence;return this.getMeasurement([{RelationshipType:"CONTAINS",ValueType:"NUM",ConceptNameCodeSequence:{CodeValue:"G-D7FE",CodingSchemeDesignator:"SRT",CodeMeaning:"Length"},MeasuredValueSequence:{MeasurementUnitsCodeSequence:{CodeValue:"mm",CodingSchemeDesignator:"UCUM",CodingSchemeVersion:"1.4",CodeMeaning:"millimeter"},NumericValue:r},ContentSequence:{RelationshipType:"INFERRED FROM",ValueType:"SCOORD",GraphicType:"POLYLINE",GraphicData:[t.x,t.y,n.x,n.y],ContentSequence:{RelationshipType:"SELECTED FROM",ValueType:"IMAGE",ReferencedSOPSequence:a}}}])}}]),n}(xi),Li="cornerstoneTools@^4.0.0",ki="Length",Ni=function(){function e(){b(this,e)}return I(e,null,[{key:"getMeasurementData",value:function(t){var n=Ti.getSetupMeasurementData(t),r=n.defaultState,a=n.NUMGroup,i=n.SCOORDGroup,o=y(y({},r),{},{length:a.MeasuredValueSequence.NumericValue,toolType:e.toolType,handles:{start:{},end:{},textBox:{hasMoved:!1,movesIndependently:!1,drawnIndependently:!0,allowedOutsideImage:!0,hasBoundingBox:!0}}}),s=k(i.GraphicData,4);return o.handles.start.x=s[0],o.handles.start.y=s[1],o.handles.end.x=s[2],o.handles.end.y=s[3],o}},{key:"getTID300RepresentationArguments",value:function(e){var t=e.handles,n=e.finding,r=e.findingSites;return{point1:t.start,point2:t.end,distance:e.length,trackingIdentifierTextValue:"cornerstoneTools@^4.0.0:Length",finding:n,findingSites:r||[]}}}]),e}();Ni.toolType=ki,Ni.utilityToolType=ki,Ni.TID300Representation=Ri,Ni.isValidCornerstoneTrackingIdentifier=function(e){if(!e.includes(":"))return!1;var t=k(e.split(":"),2),n=t[0],r=t[1];return n===Li&&r===ki},Ti.registerTool(Ni);var Fi=function(e){C(n,e);var t=x(n);function n(){return b(this,n),t.apply(this,arguments)}return I(n,[{key:"contentItem",value:function(){var e=this.props,t=e.points,n=e.area,r=e.ReferencedSOPSequence,a=e.use3DSpatialCoordinates,i=void 0!==a&&a,o=e.perimeter,s=function(e){var t=[];return e.forEach((function(e){t.push(e[0]||e.x),t.push(e[1]||e.y),void 0===e[2]&&void 0===e.z||t.push(e[2]||e.z)})),t}(t);return this.getMeasurement([{RelationshipType:"CONTAINS",ValueType:"NUM",ConceptNameCodeSequence:{CodeValue:"131191004",CodingSchemeDesignator:"SCT",CodeMeaning:"Perimeter"},MeasuredValueSequence:{MeasurementUnitsCodeSequence:{CodeValue:"mm",CodingSchemeDesignator:"UCUM",CodingSchemeVersion:"1.4",CodeMeaning:"millimeter"},NumericValue:o},ContentSequence:{RelationshipType:"INFERRED FROM",ValueType:i?"SCOORD3D":"SCOORD",GraphicType:"POLYLINE",GraphicData:s,ContentSequence:i?void 0:{RelationshipType:"SELECTED FROM",ValueType:"IMAGE",ReferencedSOPSequence:r}}},{RelationshipType:"CONTAINS",ValueType:"NUM",ConceptNameCodeSequence:{CodeValue:"G-A166",CodingSchemeDesignator:"SRT",CodeMeaning:"Area"},MeasuredValueSequence:{MeasurementUnitsCodeSequence:{CodeValue:"mm2",CodingSchemeDesignator:"UCUM",CodingSchemeVersion:"1.4",CodeMeaning:"SquareMilliMeter"},NumericValue:n},ContentSequence:{RelationshipType:"INFERRED FROM",ValueType:i?"SCOORD3D":"SCOORD",GraphicType:"POLYLINE",GraphicData:s,ContentSequence:i?void 0:{RelationshipType:"SELECTED FROM",ValueType:"IMAGE",ReferencedSOPSequence:r}}}])}}]),n}(xi),Bi=function(){function e(){b(this,e)}return I(e,null,[{key:"getMeasurementData",value:function(t){for(var n=Ti.getSetupMeasurementData(t),r=n.defaultState,a=n.SCOORDGroup,i=n.NUMGroup,o=y(y({},r),{},{toolType:e.toolType,handles:{points:[],textBox:{active:!1,hasMoved:!1,movesIndependently:!1,drawnIndependently:!0,allowedOutsideImage:!0,hasBoundingBox:!0}},cachedStats:{area:i?i.MeasuredValueSequence.NumericValue:0},color:void 0,invalidated:!0}),s=a.GraphicData,u=0;uc?(d.push({x:f.x-l,y:f.y}),d.push({x:f.x+l,y:f.y}),d.push({x:f.x,y:f.y-c}),d.push({x:f.x,y:f.y+c})):(d.push({x:f.x,y:f.y-c}),d.push({x:f.x,y:f.y+c}),d.push({x:f.x-l,y:f.y}),d.push({x:f.x+l,y:f.y}));return{area:u,points:d,trackingIdentifierTextValue:"cornerstoneTools@^4.0.0:EllipticalRoi",finding:a,findingSites:i||[]}}}]),e}();Qi.toolType=Hi,Qi.utilityToolType=Hi,Qi.TID300Representation=Gi,Qi.isValidCornerstoneTrackingIdentifier=function(e){if(!e.includes(":"))return!1;var t=k(e.split(":"),2),n=t[0],r=t[1];return n===Li&&r===Hi},Ti.registerTool(Qi);var qi=function(e){C(n,e);var t=x(n);function n(){return b(this,n),t.apply(this,arguments)}return I(n,[{key:"contentItem",value:function(){var e=this.props,t=e.points,n=e.ReferencedSOPSequence,r=e.use3DSpatialCoordinates,a=void 0!==r&&r,i=e.perimeter,o=e.area,s=function(e){var t=[];return e.forEach((function(e){t.push(e.x),t.push(e.y)})),t}(t);return this.getMeasurement([{RelationshipType:"CONTAINS",ValueType:"NUM",ConceptNameCodeSequence:{CodeValue:"G-A197",CodingSchemeDesignator:"SRT",CodeMeaning:"Perimeter"},MeasuredValueSequence:{MeasurementUnitsCodeSequence:{CodeValue:"mm",CodingSchemeDesignator:"UCUM",CodingSchemeVersion:"1.4",CodeMeaning:"millimeter"},NumericValue:i},ContentSequence:{RelationshipType:"INFERRED FROM",ValueType:a?"SCOORD3D":"SCOORD",GraphicType:"CIRCLE",GraphicData:s,ContentSequence:a?void 0:{RelationshipType:"SELECTED FROM",ValueType:"IMAGE",ReferencedSOPSequence:n}}},{RelationshipType:"CONTAINS",ValueType:"NUM",ConceptNameCodeSequence:{CodeValue:"G-A166",CodingSchemeDesignator:"SRT",CodeMeaning:"Area"},MeasuredValueSequence:{MeasurementUnitsCodeSequence:{CodeValue:"mm2",CodingSchemeDesignator:"UCUM",CodingSchemeVersion:"1.4",CodeMeaning:"SquareMilliMeter"},NumericValue:o},ContentSequence:{RelationshipType:"INFERRED FROM",ValueType:a?"SCOORD3D":"SCOORD",GraphicType:"CIRCLE",GraphicData:s,ContentSequence:a?void 0:{RelationshipType:"SELECTED FROM",ValueType:"IMAGE",ReferencedSOPSequence:n}}}])}}]),n}(xi),zi="CircleRoi",Wi=function(){function e(){b(this,e)}return I(e,null,[{key:"getMeasurementData",value:function(t){var n=Ti.getSetupMeasurementData(t),r=n.defaultState,a=n.NUMGroup,i=n.SCOORDGroup.GraphicData,o={x:i[0],y:i[1]},s={x:i[2],y:i[3]};return y(y({},r),{},{toolType:e.toolType,active:!1,cachedStats:{area:a?a.MeasuredValueSequence.NumericValue:0,radius:0,perimeter:0},handles:{end:y(y({},s),{},{highlight:!1,active:!1}),initialRotation:0,start:y(y({},o),{},{highlight:!1,active:!1}),textBox:{hasMoved:!1,movesIndependently:!1,drawnIndependently:!0,allowedOutsideImage:!0,hasBoundingBox:!0}},invalidated:!0,visible:!0})}},{key:"getTID300RepresentationArguments",value:function(e){var t=e.cachedStats,n=void 0===t?{}:t,r=e.handles,a=e.finding,i=e.findingSites,o=r.start,s=r.end,u=n.area,l=n.radius,c=2*Math.PI*l,d=[];d.push(o),d.push(s);return{area:u,perimeter:c,radius:l,points:d,trackingIdentifierTextValue:"cornerstoneTools@^4.0.0:CircleRoi",finding:a,findingSites:i||[]}}}]),e}();Wi.toolType=zi,Wi.utilityToolType=zi,Wi.TID300Representation=qi,Wi.isValidCornerstoneTrackingIdentifier=function(e){if(!e.includes(":"))return!1;var t=k(e.split(":"),2),n=t[0],r=t[1];return n===Li&&r===zi},Ti.registerTool(Wi);var Yi=function(e){C(n,e);var t=x(n);function n(){return b(this,n),t.apply(this,arguments)}return I(n,[{key:"contentItem",value:function(){var e=this.props,t=e.points,n=e.ReferencedSOPSequence,r=e.use3DSpatialCoordinates,a=void 0!==r&&r,i=a?[t[0].x,t[0].y,t[0].z]:[t[0].x,t[0].y];return 2==t.length&&(i.push(t[1].x),i.push(t[1].y),a&&i.push(t[1].z)),this.getMeasurement([{RelationshipType:"CONTAINS",ValueType:"NUM",ConceptNameCodeSequence:{CodeValue:"111010",CodingSchemeDesignator:"DCM",CodeMeaning:"Center"},ContentSequence:{RelationshipType:"INFERRED FROM",ValueType:a?"SCOORD3D":"SCOORD",GraphicType:"POINT",GraphicData:i,ContentSequence:a?void 0:{RelationshipType:"SELECTED FROM",ValueType:"IMAGE",ReferencedSOPSequence:n}}}])}}]),n}(xi),Zi="ArrowAnnotate",Ki="CORNERSTONEFREETEXT",Xi=function(){function e(){b(this,e)}return I(e,null,[{key:"getMeasurementData",value:function(t){var n=Ti.getSetupMeasurementData(t),r=n.defaultState,a=n.SCOORDGroup,i=n.findingGroup.ConceptCodeSequence.CodeMeaning,o=a.GraphicData;return y(y({},r),{},{toolType:e.toolType,active:!1,handles:{start:{x:o[0],y:o[1],highlight:!0,active:!1},end:{x:4==o.length?o[2]:o[0]+20,y:4==o.length?o[3]:o[1]+20,highlight:!0,active:!1},textBox:{hasMoved:!1,movesIndependently:!1,drawnIndependently:!0,allowedOutsideImage:!0,hasBoundingBox:!0}},invalidated:!0,text:i,visible:!0})}},{key:"getTID300RepresentationArguments",value:function(e){var t=[e.handles.start,e.handles.end],n=e.finding,r={points:t,trackingIdentifierTextValue:"cornerstoneTools@^4.0.0:ArrowAnnotate",findingSites:e.findingSites||[]};return n&&n.CodeValue===Ki||(n={CodeValue:Ki,CodingSchemeDesignator:"CST4",CodeMeaning:e.text}),r.finding=n,r}}]),e}();Xi.toolType=Zi,Xi.utilityToolType=Zi,Xi.TID300Representation=Yi,Xi.isValidCornerstoneTrackingIdentifier=function(e){if(!e.includes(":"))return!1;var t=k(e.split(":"),2),n=t[0],r=t[1];return n===Li&&r===Zi},Ti.registerTool(Xi);var $i=function(e){for(var t=new Array(e),n=0;nMath.abs(this.stride[1]))?[1,0]:[0,1]}})"):3===t&&a.push("var s0=Math.abs(this.stride[0]),s1=Math.abs(this.stride[1]),s2=Math.abs(this.stride[2]);if(s0>s1){if(s1>s2){return [2,1,0];}else if(s0>s2){return [1,2,0];}else{return [1,0,2];}}else if(s0>s2){return [2,0,1];}else if(s2>s1){return [0,1,2];}else{return [0,2,1];}}})")):a.push("ORDER})")),a.push("proto.set=function "+n+"_set("+o.join(",")+",v){"),r?a.push("return this.data.set("+s+",v)}"):a.push("return this.data["+s+"]=v}"),a.push("proto.get=function "+n+"_get("+o.join(",")+"){"),r?a.push("return this.data.get("+s+")}"):a.push("return this.data["+s+"]}"),a.push("proto.index=function "+n+"_index(",o.join(),"){return "+s+"}"),a.push("proto.hi=function "+n+"_hi("+o.join(",")+"){return new "+n+"(this.data,"+i.map((function(e){return["(typeof i",e,"!=='number'||i",e,"<0)?this.shape[",e,"]:i",e,"|0"].join("")})).join(",")+","+i.map((function(e){return"this.stride["+e+"]"})).join(",")+",this.offset)}");var c=i.map((function(e){return"a"+e+"=this.shape["+e+"]"})),d=i.map((function(e){return"c"+e+"=this.stride["+e+"]"}));a.push("proto.lo=function "+n+"_lo("+o.join(",")+"){var b=this.offset,d=0,"+c.join(",")+","+d.join(","));for(var f=0;f=0){d=i"+f+"|0;b+=c"+f+"*d;a"+f+"-=d}");a.push("return new "+n+"(this.data,"+i.map((function(e){return"a"+e})).join(",")+","+i.map((function(e){return"c"+e})).join(",")+",b)}"),a.push("proto.step=function "+n+"_step("+o.join(",")+"){var "+i.map((function(e){return"a"+e+"=this.shape["+e+"]"})).join(",")+","+i.map((function(e){return"b"+e+"=this.stride["+e+"]"})).join(",")+",c=this.offset,d=0,ceil=Math.ceil");for(f=0;f=0){c=(c+this.stride["+f+"]*i"+f+")|0}else{a.push(this.shape["+f+"]);b.push(this.stride["+f+"])}");return a.push("var ctor=CTOR_LIST[a.length+1];return ctor(this.data,a,b,c)}"),a.push("return function construct_"+n+"(data,shape,stride,offset){return new "+n+"(data,"+i.map((function(e){return"shape["+e+"]"})).join(",")+","+i.map((function(e){return"stride["+e+"]"})).join(",")+",offset)}"),new Function("CTOR_LIST","ORDER",a.join("\n"))(io[e],ro)}var io={float32:[],float64:[],int8:[],int16:[],int32:[],uint8:[],uint16:[],uint32:[],array:[],uint8_clamped:[],bigint64:[],biguint64:[],buffer:[],generic:[]};var oo=function(e,t,n,r){if(void 0===e)return(0,io.array[0])([]);"number"==typeof e&&(e=[e]),void 0===t&&(t=[e.length]);var a=t.length;if(void 0===n){n=new Array(a);for(var i=a-1,o=1;i>=0;--i)n[i]=o,o*=t[i]}if(void 0===r){r=0;for(i=0;i2&&void 0!==arguments[2]?arguments[2]:{includeSliceSpacing:!0},r=t.toolState,a=t.segments,i=e[0],o={x:i.columns,y:i.rows,z:e.length};o.xy=o.x*o.y;var s=Ao(l,a);if(!s)throw new Error("No segments to export!");for(var u=i.imageId.includes("?frame"),l=yo(e,u,n),c=go(r,e,a),d=c.referencedFramesPerSegment,f=c.segmentIndicies,v=0,m=0;m0&&(i=1/Math.sqrt(i)),e[0]=t[0]*i,e[1]=t[1]*i,e[2]=t[2]*i,e}function Bo(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function Uo(e,t,n){var r=t[0],a=t[1],i=t[2],o=n[0],s=n[1],u=n[2];return e[0]=a*u-i*s,e[1]=i*o-r*u,e[2]=r*s-a*o,e}Math.hypot||(Math.hypot=function(){for(var e=0,t=arguments.length;t--;)e+=arguments[t]*arguments[t];return Math.sqrt(e)});var Vo,jo=To,Go=xo,Ho=Ro,Qo=Lo,qo=ko,zo=Oo,Wo=No,Yo=(Vo=Mo(),function(e,t,n,r,a,i){var o,s;for(t||(t=3),n||(n=0),s=r?Math.min(r*t+n,e.length):e.length,o=n;oCo?(a=Math.acos(i),o=Math.sin(a),s=Math.sin((1-r)*a)/o,u=Math.sin(r*a)/o):(s=1-r,u=r),e[0]=s*l+u*v,e[1]=s*c+u*m,e[2]=s*d+u*p,e[3]=s*f+u*h,e}var $o,Jo,es,ts,ns,rs,as,is=function(e,t){var n=t[0],r=t[1],a=t[2],i=t[3],o=n*n+r*r+a*a+i*i;return o>0&&(o=1/Math.sqrt(o)),e[0]=n*o,e[1]=r*o,e[2]=a*o,e[3]=i*o,e};$o=Mo(),Jo=Po(1,0,0),es=Po(0,1,0),ts=Ko(),ns=Ko(),rs=new Do(9),Do!=Float32Array&&(rs[1]=0,rs[2]=0,rs[3]=0,rs[5]=0,rs[6]=0,rs[7]=0),rs[0]=1,rs[4]=1,rs[8]=1,as=rs;!function(){var e=function(){var e=new Do(2);return Do!=Float32Array&&(e[0]=0,e[1]=0),e}()}();function os(e,t,n,r){for(var a,i=n*r,o=((a=new Uint32Array(16))[0]=1,a[1]=64,a),s=[],u=0;u=s.length)break;var d=ls(s,u);d&&(i.push(257-d),i.push(s[u]),u+=d)}for(var f=i.length%2==0?i.length:i.length+1,v=new ArrayBuffer(64+f),m=new Uint32Array(v,0,16),p=0;p=129){for(var c=257-o,d=i+1,f=0;f-1},_e.prototype.set=function(e,t){var n=this.__data__,r=xe(n,e);return r<0?n.push([e,t]):n[r][1]=t,this},Me.prototype.clear=function(){this.__data__={hash:new De,map:new(me||_e),string:new De}},Me.prototype.delete=function(e){return Fe(this,e).delete(e)},Me.prototype.get=function(e){return Fe(this,e).get(e)},Me.prototype.has=function(e){return Fe(this,e).has(e)},Me.prototype.set=function(e,t){return Fe(this,e).set(e,t),this},Oe.prototype.clear=function(){this.__data__=new _e},Oe.prototype.delete=function(e){return this.__data__.delete(e)},Oe.prototype.get=function(e){return this.__data__.get(e)},Oe.prototype.has=function(e){return this.__data__.has(e)},Oe.prototype.set=function(e,t){var n=this.__data__;if(n instanceof _e){var r=n.__data__;if(!me||r.length<199)return r.push([e,t]),this;n=this.__data__=new Me(r)}return n.set(e,t),this};var Ue=ce?q(ce,Object):function(){return[]},Ve=function(e){return te.call(e)};function je(e,t){return!!(t=null==t?a:t)&&("number"==typeof e||x.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=a}(e.length)&&!Ye(e)}var We=de||function(){return!1};function Ye(e){var t=Ze(e)?te.call(e):"";return t==u||t==l}function Ze(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function Ke(e){return ze(e)?Pe(e):function(e){if(!Ge(e))return fe(e);var t=[];for(var n in Object(e))ee.call(e,n)&&"constructor"!=n&&t.push(n);return t}(e)}e.exports=function(e){return Re(e,!0,!0)}})),vs={generateSegmentation:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=e[0].imageId.includes("?frame"),a=gs(e,r,n);return ps(a,t,n)},generateToolState:function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:.001,i=Jr.readFile(t),o=zr.naturalizeDataset(i.dict);o._meta=zr.namifyDataset(i.meta);var s=ui.normalizeToDataset([o]),u=n.get("imagePlaneModule",e[0]),l=n.get("generalSeriesModule",e[0]),c=l.seriesInstanceUID;u||console.warn("Insufficient metadata, imagePlaneModule missing.");var d,f=Array.isArray(u.rowCosines)?[].concat(N(u.rowCosines),N(u.columnCosines)):[u.rowCosines.x,u.rowCosines.y,u.rowCosines.z,u.columnCosines.x,u.columnCosines.y,u.columnCosines.z],v=Cs(f),m=s.Columns*s.Rows,p=Ms(s,c),h=s._meta.TransferSyntaxUID.Value[0];if("1.2.840.10008.1.2.5"===h){var g=Array.isArray(s.PixelData)?s.PixelData:[s.PixelData];if(d=cs(g,s.Rows,s.Columns),1===s.BitsStored)return void console.warn("No implementation for rle + bitbacking.")}else if(!(d=Es(s)))throw new Error("Fractional segmentations are not yet supported");var A,y=Is(s,v,[u.rows,u.columns,e.length],a),S=!1;r||(S=ys(d,s,e,v,n,a));switch(y){case"Planar":A=S?Ss:ws;break;case"Perpendicular":throw new Error("Segmentations orthogonal to the acquisition plane of the source data are not yet supported.");case"Oblique":throw new Error("Segmentations oblique to the acquisition plane of the source data are not yet supported.")}var b=[];b[0]=[];var w=[],I=m*e.length*2,E=[];return E[0]=new ArrayBuffer(I),A(w,b,E,d,s,e,v,n,a),{labelmapBufferArray:E,segMetadata:p,segmentsOnFrame:w,segmentsOnFrameArray:b}},fillSegmentation:ps},ms={includeSliceSpacing:!0,rleEncode:!0};function ps(e,t){for(var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=Object.assign({},ms,n),a=Array.isArray(t)?t:[t],i=0,o=[],s=function(e){for(var t=a[e],n=t.labelmaps2D,r=t.metadata,s=[],u=1;u=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw i}}}}(p.entries());try{for(y.s();!(A=y.n()).done;)for(var S=k(A.value,2),b=(S[0],S[1]),w=new Uint16Array(v).fill(0),I=0;I1))return!0}else console.warn("Individual SEG frames are out of plane with respect to the first SEG frame, this is not yet supported, skipping this frame.")}}catch(e){y.e(e)}finally{y.f()}return!1}function Ss(e,t,n,r,a,i,o,s,u){for(var l=a.SharedFunctionalGroupsSequence,c=a.PerFrameFunctionalGroupsSequence,d=a.Rows,f=a.Columns,v=l.PlaneOrientationSequence?l.PlaneOrientationSequence.ImageOrientationPatient:void 0,m=f*d,p=m*i.length*2,h=1,g=0,A=n[g].slice(0),y=fs(t[g]),S=a.SegmentSequence.length,b=1;b<=S;++b){for(var w=function(l,S){var w=c[S],E=bs(a,S);if(void 0===E)throw new Error("Could not retrieve the segment index. Aborting segmentation loading.");if(E!==b)return I=S,"continue";var C=v||w.PlaneOrientationSequence.ImageOrientationPatient,D=Ds(oo(new Uint8Array(r.buffer,S*m,m),[d,f]),C,o,u);if(!D)throw new Error("Individual SEG frames are out of plane with respect to the first SEG frame. This is not yet supported. Aborting segmentation loading.");var _=As(a,S,i,s,u);if(!_)return console.warn("Image not present in stack, can't import frame : "+S+"."),I=S,"continue";var M=s.get("instance",_);if(d!==M.Rows||f!==M.Columns)throw new Error("Individual SEG frames have different geometry dimensions (Rows and Columns) respect to the source image reference frame. This is not yet supported. Aborting segmentation loading. ");for(var O=i.findIndex((function(e){return e===_})),P=new Uint16Array(A,2*m*O,m),T=D.data,x=!1,R=0,L=D.data.length;R=h&&(n[g]=new ArrayBuffer(p),t[g]=[],h++),A=n[g].slice(0),y=fs(t[g]),S=0;break}P[R]=E,x=!0}x&&(y[O]||(y[O]=[]),y[O].push(E),e[O]||(e[O]=[]),e[O].push(E)),I=S},I=0,E=c.length;I2&&void 0!==arguments[2]?arguments[2]:{includeSliceSpacing:!0},r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:4;if(4===r)return vs.generateSegmentation(e,t,n);if(3===r)return po.generateSegmentation(e,t,n);console.warn("No generateSegmentation adapater for cornerstone version ".concat(r,", exiting."))},generateToolState:function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:.001,i=arguments.length>5&&void 0!==arguments[5]?arguments[5]:4;if(4===i)return vs.generateToolState(e,t,n,r,a);if(3===i)return po.generateToolState(e,t,n);console.warn("No generateToolState adapater for cornerstone version ".concat(i,", exiting."))},fillSegmentation:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{includeSliceSpacing:!0},r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:4;if(4===r)return vs.fillSegmentation(e,t,n);console.warn("No generateSegmentation adapater for cornerstone version ".concat(r,", exiting."))}};var Ps=function(e){C(n,e);var t=x(n);function n(){return b(this,n),t.apply(this,arguments)}return I(n,[{key:"contentItem",value:function(){var e=this.props,t=e.point1,n=e.point2,r=e.point3,a=e.point4,i=e.rAngle,o=e.ReferencedSOPSequence;return this.getMeasurement([{RelationshipType:"CONTAINS",ValueType:"NUM",ConceptNameCodeSequence:{CodeValue:"285285000",CodingSchemeDesignator:"SCT",CodeMeaning:"Cobb angle"},MeasuredValueSequence:{MeasurementUnitsCodeSequence:{CodeValue:"deg",CodingSchemeDesignator:"UCUM",CodingSchemeVersion:"1.4",CodeMeaning:"°"},NumericValue:i},ContentSequence:{RelationshipType:"INFERRED FROM",ValueType:"SCOORD",GraphicType:"POLYLINE",GraphicData:[t.x,t.y,n.x,n.y,r.x,r.y,a.x,a.y],ContentSequence:{RelationshipType:"SELECTED FROM",ValueType:"IMAGE",ReferencedSOPSequence:o}}}])}}]),n}(xi),Ts="CobbAngle",xs=function(){function e(){b(this,e)}return I(e,null,[{key:"getMeasurementData",value:function(t){var n=Ti.getSetupMeasurementData(t),r=n.defaultState,a=n.NUMGroup,i=n.SCOORDGroup,o=y(y({},r),{},{rAngle:a.MeasuredValueSequence.NumericValue,toolType:e.toolType,handles:{start:{},end:{},start2:{highlight:!0,drawnIndependently:!0},end2:{highlight:!0,drawnIndependently:!0},textBox:{hasMoved:!1,movesIndependently:!1,drawnIndependently:!0,allowedOutsideImage:!0,hasBoundingBox:!0}}}),s=k(i.GraphicData,8);return o.handles.start.x=s[0],o.handles.start.y=s[1],o.handles.end.x=s[2],o.handles.end.y=s[3],o.handles.start2.x=s[4],o.handles.start2.y=s[5],o.handles.end2.x=s[6],o.handles.end2.y=s[7],o}},{key:"getTID300RepresentationArguments",value:function(e){var t=e.handles,n=e.finding,r=e.findingSites;return{point1:t.start,point2:t.end,point3:t.start2,point4:t.end2,rAngle:e.rAngle,trackingIdentifierTextValue:"cornerstoneTools@^4.0.0:CobbAngle",finding:n,findingSites:r||[]}}}]),e}();xs.toolType=Ts,xs.utilityToolType=Ts,xs.TID300Representation=Ps,xs.isValidCornerstoneTrackingIdentifier=function(e){if(!e.includes(":"))return!1;var t=k(e.split(":"),2),n=t[0],r=t[1];return n===Li&&r===Ts},Ti.registerTool(xs);var Rs="Angle",Ls=function(){function e(){b(this,e)}return I(e,null,[{key:"getMeasurementData",value:function(t){var n=Ti.getSetupMeasurementData(t),r=n.defaultState,a=n.NUMGroup,i=n.SCOORDGroup,o=y(y({},r),{},{rAngle:a.MeasuredValueSequence.NumericValue,toolType:e.toolType,handles:{start:{},middle:{},end:{},textBox:{hasMoved:!1,movesIndependently:!1,drawnIndependently:!0,allowedOutsideImage:!0,hasBoundingBox:!0}}}),s=k(i.GraphicData,8);return o.handles.start.x=s[0],o.handles.start.y=s[1],o.handles.middle.x=s[2],o.handles.middle.y=s[3],o.handles.middle.x=s[4],o.handles.middle.y=s[5],o.handles.end.x=s[6],o.handles.end.y=s[7],o}},{key:"getTID300RepresentationArguments",value:function(e){var t=e.handles,n=e.finding,r=e.findingSites;return{point1:t.start,point2:t.middle,point3:t.middle,point4:t.end,rAngle:e.rAngle,trackingIdentifierTextValue:"cornerstoneTools@^4.0.0:Angle",finding:n,findingSites:r||[]}}}]),e}();Ls.toolType=Rs,Ls.utilityToolType=Rs,Ls.TID300Representation=Ps,Ls.isValidCornerstoneTrackingIdentifier=function(e){if(!e.includes(":"))return!1;var t=k(e.split(":"),2),n=t[0],r=t[1];return n===Li&&r===Rs},Ti.registerTool(Ls);var ks=function(){function e(){b(this,e)}return I(e,null,[{key:"getMeasurementData",value:function(t){var n=Ti.getSetupMeasurementData(t),r=n.defaultState,a=n.SCOORDGroup,i=n.NUMGroup,o=y(y({},r),{},{toolType:e.toolType,handles:{start:{},end:{},textBox:{active:!1,hasMoved:!1,movesIndependently:!1,drawnIndependently:!0,allowedOutsideImage:!0,hasBoundingBox:!0},initialRotation:0},cachedStats:{area:i?i.MeasuredValueSequence.NumericValue:0},color:void 0,invalidated:!0}),s={},u=k(a.GraphicData,6);return o.handles.start.x=u[0],o.handles.start.y=u[1],s.x=u[2],s.y=u[3],o.handles.end.x=u[4],o.handles.end.y=u[5],o}},{key:"getTID300RepresentationArguments",value:function(e){var t=e.finding,n=e.findingSites,r=e.cachedStats,a=void 0===r?{}:r,i=e.handles;console.log("getTID300 Rectangle",e,a,i);var o=i.start,s=i.end,u=[o,{x:o.x,y:s.y},s,{x:s.x,y:o.y}],l=a.area,c=a.perimeter;console.log("Point=",u,"cachedStats=",a);return{points:u,area:l,perimeter:c,trackingIdentifierTextValue:"cornerstoneTools@^4.0.0:RectangleRoi",finding:t,findingSites:n||[]}}}]),e}();ks.toolType="RectangleRoi",ks.utilityToolType="RectangleRoi",ks.TID300Representation=Fi,ks.isValidCornerstoneTrackingIdentifier=function(e){if(!e.includes(":"))return!1;var t=k(e.split(":"),2),n=t[0],r=t[1];return n===Li&&r===ks.toolType},Ti.registerTool(ks);var Ns={Length:Ni,FreehandRoi:Bi,Bidirectional:ji,EllipticalRoi:Qi,CircleRoi:Wi,ArrowAnnotate:Xi,MeasurementReport:Ti,Segmentation:Os,CobbAngle:xs,Angle:Ls,RectangleRoi:ks},Fs={CodingSchemeDesignator:"CORNERSTONEJS",codeValues:{CORNERSTONEFREETEXT:"CORNERSTONEFREETEXT"}},Bs={CodingSchemeDesignator:"DCM",CodeValue:"121071"},Us={CodingSchemeDesignator:"SCT",CodeValue:"363698007"},Vs={CodingSchemeDesignator:"SRT",CodeValue:"G-C0E3"},js=function(e,t,n){var r=e.ConceptNameCodeSequence;if(r){var a=r.CodingSchemeDesignator,i=r.CodeValue;return a==t.CodingSchemeDesignator&&i==t.CodeValue||n&&a==n.CodingSchemeDesignator&&i==n.CodeValue}};var Gs=function(){function e(){b(this,e)}return I(e,null,[{key:"getCornerstoneLabelFromDefaultState",value:function(e){var t=e.findingSites,n=void 0===t?[]:t,r=e.finding,a=Fs.codeValues.CORNERSTONEFREETEXT,i=n.find((function(e){return e.CodeValue===a}));return i?i.CodeMeaning:r&&r.CodeValue===a?r.CodeMeaning:void 0}},{key:"generateDatasetMeta",value:function(){var e=new Uint8Array(2);return e[1]=1,{FileMetaInformationVersion:{Value:[e.buffer],vr:"OB"},TransferSyntaxUID:{Value:["1.2.840.10008.1.2.1"],vr:"UI"},ImplementationClassUID:{Value:[zr.uid()],vr:"UI"},ImplementationVersionName:{Value:["dcmjs"],vr:"SH"}}}},{key:"generateDerivationSourceDataset",value:function(t,n){return{StudyInstanceUID:t,SeriesInstanceUID:n,_meta:e.generateDatasetMeta(),_vrMap:{PixelData:"OW"}}}},{key:"getSetupMeasurementData",value:function(t,n,r,a){var i=t.ContentSequence,o=Ei(i),s=o.find((function(e){return js(e,Bs)})),u=o.filter((function(e){return js(e,Us,Vs)}))||[],l=o.find((function(e){return"NUM"===e.ValueType})),c=Ei(l.ContentSequence).find((function(e){return"SCOORD"===e.ValueType})),d=c.ContentSequence.ReferencedSOPSequence,f=d.ReferencedSOPInstanceUID,v=d.ReferencedFrameNumber,m=n[f],p=r.get("imagePlaneModule",m),h=s?qr(s.ConceptCodeSequence):void 0,g=u.map((function(e){return qr(e.ConceptCodeSequence)})),A={sopInstanceUid:f,annotation:{annotationUID:zr.uid(),metadata:{toolName:a,referencedImageId:m,FrameOfReferenceUID:p.frameOfReferenceUID,label:""}},finding:h,findingSites:g};return A.finding&&(A.description=A.finding.CodeMeaning),A.annotation.metadata.label=e.getCornerstoneLabelFromDefaultState(A),{defaultState:A,NUMGroup:l,SCOORDGroup:c,ReferencedSOPSequence:d,ReferencedSOPInstanceUID:f,ReferencedFrameNumber:v}}},{key:"generateReport",value:function(t,n,r,a){var i=[],o={},s=[],u=e.generateDatasetMeta();Object.keys(t).forEach((function(a){var u=n.get("sopCommonModule",a),l=n.get("generalSeriesModule",a),c=u.sopInstanceUID,d=u.sopClassUID,f=l.studyInstanceUID,v=l.seriesInstanceUID;if(o[c]=v,!s.find((function(e){return e.SeriesInstanceUID===v}))){var m=e.generateDerivationSourceDataset(f,v);s.push(m)}var p=n.get("frameNumber",a),h=t[a],g=Object.keys(h),A={ReferencedSOPClassUID:d,ReferencedSOPInstanceUID:c},y=n.get("instance",a);(y&&y.NumberOfFrames&&y.NumberOfFrames>1||ui.isMultiframeSOPClassUID(d))&&(A.ReferencedFrameNumber=p);var S=[];g.forEach((function(e){var t=function(e,t,n,r){var a=t[e],i=Gs.CORNERSTONE_TOOL_CLASSES_BY_TOOL_TYPE[e];if(a&&a.data&&a.data.length&&i){var o=a.data.map((function(e){return function(e,t,n,r,a){var i=r.getTID300RepresentationArguments(e,a);return i.ReferencedSOPSequence=n,new r.TID300Representation(i)}(e,0,n,i,r)}));return new Ii(o)}}(e,h,A,r);t&&S.push(t)})),i=i.concat(S)}));var l=new wi({TID1501MeasurementGroups:i},a),c=new bi(s),d=l.contentItem(s,{sopInstanceUIDsToSeriesInstanceUIDMap:o});return c.dataset=Object.assign(c.dataset,d),c.dataset._meta=u,c}},{key:"generateToolState",value:function(t,n,r,a){var i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};if("1500"!==t.ContentTemplateSequence.TemplateIdentifier)throw new Error("This package can currently only interpret DICOM SR TID 1500");var o="Imaging Measurements",s="Measurement Group",u="Tracking Identifier",l=Ei(t.ContentSequence).find(Ci(o)),c=Ei(l.ContentSequence).filter(Ci(s)),d={},f=e.CORNERSTONE_TOOL_CLASSES_BY_UTILITY_TYPE,v=[];return Object.keys(f).forEach((function(e){v.push(f[e]),d[e]=[]})),c.forEach((function(e,o){var s=Ei(e.ContentSequence).find((function(e){return e.ConceptNameCodeSequence.CodeMeaning===u})).TextValue,l=i.getToolClass?i.getToolClass(e,t,v):v.find((function(e){return e.isValidCornerstoneTrackingIdentifier(s)}));if(l){var c=l.getMeasurementData(e,n,r,a);console.log("=== ".concat(l.toolType," ===")),console.log(c),d[l.toolType].push(c)}})),d}},{key:"registerTool",value:function(t){e.CORNERSTONE_TOOL_CLASSES_BY_UTILITY_TYPE[t.utilityToolType]=t,e.CORNERSTONE_TOOL_CLASSES_BY_TOOL_TYPE[t.toolType]=t,e.MEASUREMENT_BY_TOOLTYPE[t.toolType]=t.utilityToolType}}]),e}();Gs.MEASUREMENT_BY_TOOLTYPE={},Gs.CORNERSTONE_TOOL_CLASSES_BY_UTILITY_TYPE={},Gs.CORNERSTONE_TOOL_CLASSES_BY_TOOL_TYPE={};var Hs="Cornerstone3DTools@^0.1.0",Qs="Length",qs="".concat(Hs,":").concat(Qs),zs=function(){function e(){b(this,e)}return I(e,null,[{key:"getMeasurementData",value:function(t,n,r,a){for(var i=Gs.getSetupMeasurementData(t,n,a,e.toolType),o=i.defaultState,s=i.NUMGroup,u=i.SCOORDGroup,l=i.ReferencedFrameNumber,c=o.annotation.metadata.referencedImageId,d=u.GraphicData,f=[],v=0;vMath.sqrt(Math.pow(g[0][0]-g[1][0],2)+Math.pow(g[0][1]-g[1][1],2)+Math.pow(g[0][2]-g[1][2],2))?(c=h,d=g):(c=g,d=h);var A=t(l,c[0]),y=t(l,c[1]),S=t(l,d[0]),b=t(l,d[1]);return{longAxis:{point1:{x:A[0],y:A[1]},point2:{x:y[0],y:y[1]}},shortAxis:{point1:{x:S[0],y:S[1]},point2:{x:b[0],y:b[1]}},longAxisLength:v,shortAxisLength:m,trackingIdentifierTextValue:Ys,finding:r,findingSites:a||[]}}}]),e}();Zs.toolType=Ws,Zs.utilityToolType=Ws,Zs.TID300Representation=Ui,Zs.isValidCornerstoneTrackingIdentifier=function(e){if(!e.includes(":"))return!1;var t=k(e.split(":"),2),n=t[0],r=t[1];return n===Hs&&r===Ws},Gs.registerTool(Zs);var Ks="EllipticalROI",Xs=1e-4,$s="".concat(Hs,":").concat(Ks),Js=function(){function e(){b(this,e)}return I(e,null,[{key:"getMeasurementData",value:function(t,n,r,a){for(var i=Gs.getSetupMeasurementData(t,n,a,e.toolType),o=i.defaultState,s=i.NUMGroup,u=i.SCOORDGroup,l=i.ReferencedFrameNumber,c=o.annotation.metadata.referencedImageId,d=u.GraphicData,f=[],v=0;vMath.abs(f[0]-v[0])?(m.push({x:c[0],y:c[1]}),m.push({x:d[0],y:d[1]}),m.push({x:f[0],y:f[1]}),m.push({x:v[0],y:v[1]})):(m.push({x:f[0],y:f[1]}),m.push({x:v[0],y:v[1]}),m.push({x:c[0],y:c[1]}),m.push({x:d[0],y:d[1]})),{area:(s["imageId:".concat(l)]||{}).area,points:m,trackingIdentifierTextValue:$s,finding:r,findingSites:a||[]}}}]),e}();Js.toolType=Ks,Js.utilityToolType=Ks,Js.TID300Representation=Gi,Js.isValidCornerstoneTrackingIdentifier=function(e){if(!e.includes(":"))return!1;var t=k(e.split(":"),2),n=t[0],r=t[1];return n===Hs&&r.toLowerCase()===Ks.toLowerCase()},Gs.registerTool(Js);var eu="ArrowAnnotate",tu="".concat(Hs,":").concat(eu),nu=Fs.codeValues,ru=Fs.CodingSchemeDesignator,au=function(){function e(){b(this,e)}return I(e,null,[{key:"getMeasurementData",value:function(t,n,r,a){for(var i=Gs.getSetupMeasurementData(t,n,a,e.toolType),o=i.defaultState,s=i.SCOORDGroup,u=i.ReferencedFrameNumber,l=o.annotation.metadata.referencedImageId,c=o.annotation.metadata.label,d=s.GraphicData,f=[],v=0;v1&&void 0!==arguments[1]?arguments[1]:3;switch(t){case 1:return Math.abs(e);case 2:return Math.sqrt(e[0]*e[0]+e[1]*e[1]);case 3:return Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2]);default:for(var n=0,r=0;r2&&void 0!==arguments[2]?arguments[2]:0;if(n+t.length>e.length)return!1;for(var r=n,a=0;a2&&void 0!==arguments[2]?arguments[2]:0,r=arguments.length>3?arguments[3]:void 0,a=e.length;r&&(a=Math.min(n+r,e.length));for(var i=n;i1&&void 0!==arguments[1]?arguments[1]:Mu(),n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"application/dicom",r="Content-Type: ".concat(n),a="\r\n--".concat(t,"\r\n").concat(r,"\r\n\r\n"),i="\r\n--".concat(t,"--"),o=Eu(a),s=Eu(i),u=o.length,l=s.length,c=0,d=e.map((function(e){var t=new Uint8Array(e),n=t.length;return c+=u+n+l,t})),f=new Uint8Array(c);f.set(o,0);var v=0;return d.forEach((function(e){e.length;f.set(o,v),f.set(e,v+u),v+=u+e.length})),f.set(s,v),{data:f.buffer,boundary:t}},multipartDecode:function(e){var t=new Uint8Array(e),n=Eu("\r\n\r\n"),r=_u(t,n,0,1e3);if(-1===r)throw new Error("Response message has no multipart mime header");var a=Cu(Iu(t,0,r));if(!a)throw new Error("Header of response message does not specify boundary");for(var i,o=Eu(a),s=[],u=r+n.length;-1!==i&&-1!==(i=_u(t,o,u));){var l=i-u-2,c=e.slice(u,u+l);s.push(c);var d=_u(t,n,i+1,1e3);if(-1===d)break;u=d+n.length}return s},guid:Mu},Pu={TID1500:{TID1500MeasurementReport:wi,TID1501MeasurementGroup:Ii},TID300:{TID300Measurement:xi,Length:Ri,CobbAngle:Ps,Bidirectional:Ui,Polyline:Fi,Ellipse:Gi},message:Ou,addAccessors:qr},Tu=function(){function e(t){b(this,e),this[_value]=t.value,this[_meaning]=t.meaning,this[_schemeDesignator]=t.schemeDesignator,this[_schemeVersion]=t.schemeVersion||null}return I(e,[{key:"value",get:function(){return this[_value]}},{key:"meaning",get:function(){return this[_meaning]}},{key:"schemeDesignator",get:function(){return this[_schemeDesignator]}},{key:"schemeVersion",get:function(){return this[_schemeVersion]}}]),e}(),xu=function(){function e(t){if(b(this,e),void 0===t.value)throw new Error("Option 'value' is required for CodedConcept.");if(void 0===t.meaning)throw new Error("Option 'meaning' is required for CodedConcept.");if(void 0===t.schemeDesignator)throw new Error("Option 'schemeDesignator' is required for CodedConcept.");this.CodeValue=t.value,this.CodeMeaning=t.meaning,this.CodingSchemeDesignator=t.schemeDesignator,"schemeVersion"in t&&(this.CodingSchemeVersion=t.schemeVersion)}return I(e,[{key:"equals",value:function(e){return e.value===this.value&&e.schemeDesignator===this.schemeDesignator&&(!e.schemeVersion||!this.schemeVersion||e.schemeVersion===this.schemeVersion)}},{key:"value",get:function(){return this.CodeValue}},{key:"meaning",get:function(){return this.CodeMeaning}},{key:"schemeDesignator",get:function(){return this.CodingSchemeDesignator}},{key:"schemeVersion",get:function(){return this.CodingSchemeVersion}}]),e}(),Ru=Object.freeze({__proto__:null,Code:Tu,CodedConcept:xu}),Lu={CODE:"CODE",COMPOSITE:"COMPOSITE",CONTAINER:"CONTAINER",DATE:"DATE",DATETIME:"DATETIME",IMAGE:"IMAGE",NUM:"NUM",PNAME:"PNAME",SCOORD:"SCOORD",SCOORD3D:"SCOORD3D",TCOORD:"TCOORD",TEXT:"TEXT",TIME:"TIME",UIDREF:"UIDREF",WAVEFORM:"WAVEFORM"};Object.freeze(Lu);var ku={CIRCLE:"CIRCLE",ELLIPSE:"ELLIPSE",ELLIPSOID:"ELLIPSOID",MULTIPOINT:"MULTIPOINT",POINT:"POINT",POLYLINE:"POLYLINE"};Object.freeze(ku);var Nu={ELLIPSE:"ELLIPSE",ELLIPSOID:"ELLIPSOID",MULTIPOINT:"MULTIPOINT",POINT:"POINT",POLYLINE:"POLYLINE",POLYGON:"POLYGON"};Object.freeze(Nu);var Fu={BEGIN:"BEGIN",END:"END",MULTIPOINT:"MULTIPOINT",MULTISEGMENT:"MULTISEGMENT",POINT:"POINT",SEGMENT:"SEGMENT"};Object.freeze(Fu);var Bu={CONTAINS:"CONTAINS",HAS_ACQ_CONTENT:"HAS ACQ CONTENT",HAS_CONCEPT_MOD:"HAS CONCEPT MOD",HAS_OBS_CONTEXT:"HAS OBS CONTEXT",HAS_PROPERTIES:"HAS PROPERTIES",INFERRED_FROM:"INFERRED FROM",SELECTED_FROM:"SELECTED FROM"};Object.freeze(Bu);var Uu={FRAME:"FRAME",VOLUME:"VOLUME"};function Vu(e){return(e>9?"":"0")+e}function ju(e){var t=e.getHours(),n=e.getMinutes(),r=e.getSeconds(),a=e.getMilliseconds();return Vu(t)+Vu(n)+Vu(r)+a}function Gu(e){var t=e.getFullYear(),n=e.getMonth()+1,r=e.getDate();return t+Vu(n)+Vu(r)}Object.freeze(Bu);var Hu=function(e){C(n,e);var t=x(n);function n(){b(this,n);for(var e=arguments.length,r=new Array(e),a=0;a1)throw new Error("Only one of the following options should be provided: 'referencedRegions', 'referencedVolume', or 'referencedSegmentation'.");if(void 0!==e.referencedRegions){if(!("object"===S(e.referencedRegions)||e.referencedRegions instanceof Array))throw new Error("Option 'referencedRegions' must have type Array.");if(0===e.referencedRegions.length)throw new Error("Option 'referencedRegion' must have non-zero length.");e.referencedRegions.forEach((function(e){if(void 0===e||e.constructor!==cl&&e.constructor!==dl)throw new Error("Items of option 'referencedRegion' must have type ImageRegion or ImageRegion3D.");a.ContentSequence.push(e)}))}else if(void 0!==e.referencedVolume){if(e.referencedVolume.constructor!==fl)throw new Error("Items of option 'referencedVolume' must have type VolumeSurface.");a.ContentSequence.push(referencedVolume)}else if(void 0!==e.referencedSegmentation){if(e.referencedSegmentation.constructor!==hl&&e.referencedSegmentation.constructor!==pl)throw new Error("Option 'referencedSegmentation' must have type ReferencedSegmentation or ReferencedSegmentationFrame.");a.ContentSequence.push(referencedSegmentation)}return r[0]=a,r}return I(n)}(xl),Ll=function(e){C(n,e);var t=x(n);function n(e){b(this,n);var r=[void 0!==e.referencedRegion,void 0!==e.referencedSegmentation].reduce((function(e,t){return e+t}));if(0===r)throw new Error("One of the following options must be provided: 'referencedRegion', 'referencedSegmentation'.");if(r>1)throw new Error("Only one of the following options should be provided: 'referencedRegion', 'referencedSegmentation'.");return t.call(this,{trackingIdentifier:e.trackingIdentifier,referencedRegions:[e.referencedRegion],referencedSegmentation:e.referencedSegmentation,referencedRealWorldValueMap:e.referencedRealWorldValueMap,timePointContext:e.timePointContext,findingType:e.findingType,session:e.session,measurements:e.measurements,qualitativeEvaluations:e.qualitativeEvaluations})}return I(n)}(Rl),kl=function(e){C(n,e);var t=x(n);function n(e){return b(this,n),t.call(this,{trackingIdentifier:e.trackingIdentifier,referencedRegions:e.referencedRegions,referencedSegmentation:e.referencedSegmentation,referencedRealWorldValueMap:e.referencedRealWorldValueMap,timePointContext:e.timePointContext,findingType:e.findingType,session:e.session,measurements:e.measurements,qualitativeEvaluations:e.qualitativeEvaluations})}return I(n)}(Rl),Nl=function(e){C(t,e);x(t);function t(e){var n;if(b(this,t),void 0===e.derivation)throw new Error("Option 'derivation' is required for MeasurementsDerivedFromMultipleROIMeasurements.");var r=new $u({name:e.derivation});if(r.ContentSequence=new Hu,void 0===e.measurementGroups)throw new Error("Option 'measurementGroups' is required for MeasurementsDerivedFromMultipleROIMeasurements.");if(!("object"===S(e.measurementGroups)||e.measurementGroups instanceof Array))throw new Error("Option 'measurementGroups' must have type Array.");if(e.measurementGroups.forEach((function(e){var t;if(!e||e.constructor!==Ll&&e.constructor!==kl)throw new Error("Items of option 'measurementGroups' must have type PlanarROIMeasurementsAndQualitativeEvaluations or VolumetricROIMeasurementsAndQualitativeEvaluations.");e[0].RelationshipType="R-INFERRED FROM",(t=r.ContentSequence).push.apply(t,N(e))})),void 0!==e.measurementProperties){var a;if(e.measurementProperties.constructor!==Sl)throw new Error("Option 'measurementProperties' must have type MeasurementProperties.");(a=r.ContentSequence).push.apply(a,N(e.measurementProperties))}return n.push(r),T(n)}return I(t)}(Al),Fl=function(e){C(n,e);var t=x(n);function n(e){return b(this,n),t.call(this,{trackingIdentifier:e.trackingIdentifier,referencedRealWorldValueMap:e.referencedRealWorldValueMap,timePointContext:e.timePointContext,findingType:e.findingType,session:e.session,measurements:e.measurements,qualitativeEvaluations:e.qualitativeEvaluations})}return I(n)}(xl),Bl=function(e){C(n,e);var t=x(n);function n(e){var r;if(b(this,n),r=t.call(this),void 0!==e.method){var a=new qu({name:new xu({value:"370129005",meaning:"Measurement Method",schemeDesignator:"SCT"}),value:e.method,relationshipType:Bu.HAS_CONCEPT_MOD});r.push(a)}if(void 0!==e.findingSites){if(!("object"===S(e.findingSites)||e.findingSites instanceof Array))throw new Error("Option 'findingSites' must have type Array.");e.findingSites.forEach((function(e){if(!e||e.constructor!==ml)throw new Error("Items of option 'findingSites' must have type FindingSite.");r.push(e)}))}if(void 0===e.measurements)throw new Error("Options 'measurements' is required ROIMeasurements.");if(!("object"===S(e.measurements)||e.measurements instanceof Array))throw new Error("Option 'measurements' must have type Array.");if(0===e.measurements.length)throw new Error("Option 'measurements' must have non-zero length.");return e.measurements.forEach((function(e){if(!e||e.constructor!==yl)throw new Error("Items of option 'measurements' must have type Measurement.");r.push(e)})),r}return I(n)}(Al),Ul=function(e){C(n,e);var t=x(n);function n(e){var r,a,i,o;if(b(this,n),o=t.call(this),void 0===e.observationContext)throw new Error("Option 'observationContext' is required for MeasurementReport.");if(void 0===e.procedureReported)throw new Error("Option 'procedureReported' is required for MeasurementReport.");var s=new Ju({name:new xu({value:"126000",schemeDesignator:"DCM",meaning:"Imaging Measurement Report"}),templateID:"1500"});if(s.ContentSequence=new Hu,void 0===e.languageOfContentItemAndDescendants)throw new Error("Option 'languageOfContentItemAndDescendants' is required for MeasurementReport.");if(e.languageOfContentItemAndDescendants.constructor!==Tl)throw new Error("Option 'languageOfContentItemAndDescendants' must have type LanguageOfContentItemAndDescendants.");if((r=s.ContentSequence).push.apply(r,N(e.languageOfContentItemAndDescendants)),(a=s.ContentSequence).push.apply(a,N(e.observationContext)),e.procedureReported.constructor!==xu&&e.procedureReported.constructor!==Tu||(e.procedureReported=[e.procedureReported]),!("object"===S(e.procedureReported)||e.procedureReported instanceof Array))throw new Error("Option 'procedureReported' must have type Array.");e.procedureReported.forEach((function(e){var t=new qu({name:new xu({value:"121058",meaning:"Procedure reported",schemeDesignator:"DCM"}),value:e,relationshipType:Bu.HAS_CONCEPT_MOD});s.ContentSequence.push(t)}));var u=new jl;if((i=s.ContentSequence).push.apply(i,N(u)),[void 0!==e.imagingMeasurements,void 0!==e.derivedImagingMeasurements,void 0!==e.qualitativeEvaluations].reduce((function(e,t){return e+t}))>1)throw new Error("Only one of the following options should be provided: 'imagingMeasurements', 'derivedImagingMeasurement', 'qualitativeEvaluations'.");if(void 0!==e.imagingMeasurements){var l=new Ju({name:new xu({value:"126010",meaning:"Imaging Measurements",schemeDesignator:"DCM"}),relationshipType:Bu.CONTAINS});l.ContentSequence=O(Hu,N(e.imagingMeasurements)),s.ContentSequence.push(l)}else if(void 0!==e.derivedImagingMeasurements){var c=new Ju({name:new xu({value:"126011",meaning:"Derived Imaging Measurements",schemeDesignator:"DCM"}),relationshipType:Bu.CONTAINS});c.ContentSequence=O(Hu,N(e.derivedImagingMeasurements)),s.ContentSequence.push(c)}else if(void 0!==e.qualitativeEvaluations){var d=new Ju({name:new xu({value:"C0034375",meaning:"Qualitative Evaluations",schemeDesignator:"UMLS"}),relationshipType:Bu.CONTAINS});d.ContentSequence=O(Hu,N(e.qualitativeEvaluations)),s.ContentSequence.push(d)}return o.push(s),o}return I(n)}(Al),Vl=function(e){C(t,e);x(t);function t(e){var n;if(b(this,t),void 0===e.timePoint)throw new Error("Option 'timePoint' is required for TimePointContext.");var r=new zu({name:new xu({value:"C2348792",meaning:"Time Point",schemeDesignator:"UMLS"}),value:e.timePoint,relationshipType:Bu.HAS_OBS_CONTEXT});if(n.push(r),void 0!==e.timePointType){var a=new qu({name:new xu({value:"126072",meaning:"Time Point Type",schemeDesignator:"DCM"}),value:e.timePointType,relationshipType:Bu.HAS_OBS_CONTEXT});n.push(a)}if(void 0!==e.timePointOrder){var i=new $u({name:new xu({value:"126073",meaning:"Time Point Order",schemeDesignator:"DCM"}),value:e.timePointOrder,relationshipType:Bu.HAS_OBS_CONTEXT});n.push(i)}if(void 0!==e.subjectTimePointIdentifier){var o=new $u({name:new xu({value:"126070",meaning:"Subject Time Point Identifier",schemeDesignator:"DCM"}),value:e.subjectTimePointIdentifier,relationshipType:Bu.HAS_OBS_CONTEXT});n.push(o)}if(void 0!==e.protocolTimePointIdentifier){var s=new $u({name:new xu({value:"126071",meaning:"Protocol Time Point Identifier",schemeDesignator:"DCM"}),value:e.protocolTimePointIdentifier,relationshipType:Bu.HAS_OBS_CONTEXT});n.push(s)}if(void 0!==e.temporalOffsetFromEvent){if(e.temporalOffsetFromEvent.constructor!==LongitudinalTemporalOffsetFromEventContentItem)throw new Error("Option 'temporalOffsetFromEvent' must have type LongitudinalTemporalOffsetFromEventContentItem.");n.push(temporalOffsetFromEvent)}return T(n)}return I(t)}(Al),jl=function(e){C(n,e);var t=x(n);function n(e){var r;b(this,n),r=t.call(this);var a=new Ju({name:new xu({value:"111028",meaning:"Image Library",schemeDesignator:"DCM"}),relationshipType:Bu.CONTAINS});return r.push(a),r}return I(n)}(Al),Gl=function(e){C(n,e);var t=x(n);function n(e){var r;if(b(this,n),r=t.call(this),void 0===e.name)throw new Error("Option 'name' is required for AlgorithmIdentification.");if(void 0===e.version)throw new Error("Option 'version' is required for AlgorithmIdentification.");var a=new zu({name:new xu({value:"111001",meaning:"Algorithm Name",schemeDesignator:"DCM"}),value:e.name,relationshipType:Bu.HAS_CONCEPT_MOD});r.push(a);var i=new zu({name:new xu({value:"111003",meaning:"Algorithm Version",schemeDesignator:"DCM"}),value:e.version,relationshipType:Bu.HAS_CONCEPT_MOD});if(r.push(i),void 0!==e.parameters){if(!("object"===S(e.parameters)||e.parameters instanceof Array))throw new Error("Option 'parameters' must have type Array.");e.parameters.forEach((function(e){var t=new zu({name:new xu({value:"111002",meaning:"Algorithm Parameter",schemeDesignator:"DCM"}),value:param,relationshipType:Bu.HAS_CONCEPT_MOD});r.push(t)}))}return r}return I(n)}(Al),Hl=function(e){C(n,e);var t=x(n);function n(e){var r;if(b(this,n),r=t.call(this),void 0===e.uid)throw new Error("Option 'uid' is required for TrackingIdentifier.");if(void 0!==e.identifier){var a=new zu({name:new xu({value:"112039",meaning:"Tracking Identifier",schemeDesignator:"DCM"}),value:e.identifier,relationshipType:Bu.HAS_OBS_CONTEXT});r.push(a)}var i=new Xu({name:new xu({value:"112040",meaning:"Tracking Unique Identifier",schemeDesignator:"DCM"}),value:e.uid,relationshipType:Bu.HAS_OBS_CONTEXT});return r.push(i),r}return I(n)}(Al),Ql=Object.freeze({__proto__:null,AlgorithmIdentification:Gl,DeviceObserverIdentifyingAttributes:Dl,ImageLibrary:jl,LanguageOfContentItemAndDescendants:Tl,Measurement:yl,MeasurementAndQualitativeEvaluationGroup:Fl,MeasurementReport:Ul,MeasurementsDerivedFromMultipleROIMeasurements:Nl,ObservationContext:Il,ObserverContext:El,PersonObserverIdentifyingAttributes:Cl,PlanarROIMeasurementsAndQualitativeEvaluations:Ll,ROIMeasurements:Bl,SubjectContext:_l,SubjectContextDevice:Pl,SubjectContextFetus:Ml,SubjectContextSpecimen:Ol,TimePointContext:Vl,TrackingIdentifier:Hl,VolumetricROIMeasurementsAndQualitativeEvaluations:kl}),ql=["00080054","00080100","00080102","00080103","00080104","00080105","00080106","00080107","0008010B","0008010D","0008010F","00080117","00080118","00080119","00080120","00080121","00080122","00081120","00081150","00081155","00081160","00081190","00081199","00100010","00100020","00100021","00100022","00100024","00100026","00100027","00100028","00100030","00100032","00100033","00100034","00100035","00100040","00100200","00100212","00100213","00100214","00100215","00100216","00100217","00100218","00100219","00100221","00100222","00100223","00100229","00101001","00101002","00101100","00102160","00102201","00102202","00102292","00102293","00102294","00102295","00102296","00102297","00102298","00102299","00104000","00120062","00120063","00120064","0020000D","00400031","00400032","00400033","00400035","00400036","00400039","0040003A","0040E001","0040E010","0040E020","0040E021","0040E022","0040E023","0040E024","0040E025","0040E030","0040E031","0062000B","00880130","00880140","00080100","00080102","00080103","00080104","00080105","00080106","00080107","0008010B","0008010D","0008010F","00080117","00080118","00080119","00080120","00080121","00080122","00081080","00081084","00101010","00101020","00101021","00101022","00101023","00101024","00101030","00102000","00102110","00102180","001021A0","001021B0","001021C0","001021D0","00102203","00380010","00380014","00380060","00380062","00380064","00380500","00400031","00400032","00400033","00080020","00080030","00080050","00080051","00080080","00080081","00080082","00080090","00080096","0008009C","0008009D","00080100","00080102","00080103","00080104","00080105","00080106","00080107","0008010B","0008010D","0008010F","00080117","00080118","00080119","00080120","00080121","00080122","00081030","00081032","00081048","00081049","00081060","00081062","00081110","00081150","00081155","0020000D","00200010","00321034","00400031","00400032","00400033","00401012","00401101","00401102","00401103","00401104","00120010","00120020","00120021","00120030","00120031","00120040","00120042","00120081","00120082","00120020","00120050","00120051","00120052","00120053","00120083","00120084","00120085"],zl=I((function e(t){var n=this;if(b(this,e),void 0===t.evidence)throw new Error("Option 'evidence' is required for Comprehensive3DSR.");if(!("object"===S(t.evidence)||t.evidence instanceof Array))throw new Error("Option 'evidence' must have type Array.");if(0===t.evidence.length)throw new Error("Option 'evidence' must have non-zero length.");if(void 0===t.content)throw new Error("Option 'content' is required for Comprehensive3DSR.");if(void 0===t.seriesInstanceUID)throw new Error("Option 'seriesInstanceUID' is required for Comprehensive3DSR.");if(void 0===t.seriesNumber)throw new Error("Option 'seriesNumber' is required for Comprehensive3DSR.");if(void 0===t.seriesDescription)throw new Error("Option 'seriesDescription' is required for Comprehensive3DSR.");if(void 0===t.sopInstanceUID)throw new Error("Option 'sopInstanceUID' is required for Comprehensive3DSR.");if(void 0===t.instanceNumber)throw new Error("Option 'instanceNumber' is required for Comprehensive3DSR.");if(void 0===t.manufacturer)throw new Error("Option 'manufacturer' is required for Comprehensive3DSR.");if(this.SOPClassUID="1.2.840.10008.5.1.4.1.1.88.34",this.SOPInstanceUID=t.sopInstanceUID,this.Modality="SR",this.SeriesDescription=t.seriesDescription,this.SeriesInstanceUID=t.seriesInstanceUID,this.SeriesNumber=t.seriesNumber,this.InstanceNumber=t.instanceNumber,this.Manufacturer=t.manufacturer,void 0!==t.institutionName&&(this.InstitutionName=t.institutionName,void 0!==t.institutionalDepartmentName&&(this.InstitutionalDepartmentName=t.institutionDepartmentName)),t.isComplete?this.CompletionFlag="COMPLETE":this.CompletionFlag="PARTIAL",t.isVerified){if(void 0===t.verifyingObserverName)throw new Error("Verifying Observer Name must be specified if SR document has been verified.");if(void 0===t.verifyingOrganization)throw new Error("Verifying Organization must be specified if SR document has been verified.");this.VerificationFlag="VERIFIED";var r={};r.VerifyingObserverName=t.verifyingObserverName,r.VerifyingOrganization=t.verifyingOrganization,r.VerificationDateTime=zr.dateTime(),this.VerifyingObserverSequence=[observer_item]}else this.VerificationFlag="UNVERIFIED";t.isFinal?this.PreliminaryFlag="FINAL":this.PreliminaryFlag="PRELIMINARY",this.ContentDate=zr.date(),this.ContentTime=zr.time(),Object.keys(t.content).forEach((function(e){n[e]=t.content[e]}));var a={};t.evidence.forEach((function(e){if(e.StudyInstanceUID!==t.evidence[0].StudyInstanceUID)throw new Error("Referenced data sets must all belong to the same study.");e.SeriesInstanceUID in a||(a[e.SeriesInstanceUID]=[]);var n={};n.ReferencedSOPClassUID=e.SOPClassUID,n.ReferencedSOPInstanceUID=e.SOPInstanceUID,a[e.SeriesInstanceUID].push(n)}));var i={};if(i.StudyInstanceUID=t.evidence[0].StudyInstanceUID,i.ReferencedSeriesSequence=[],Object.keys(a).forEach((function(e){var t={};t.SeriesInstanceUID=e,t.ReferencedSOPSequence=a[e],i.ReferencedSeriesSequence.push(t)})),void 0!==t.requestedProcedures){if(!("object"===S(t.requestedProcedures)||t.requestedProcedures instanceof Array))throw new Error("Option 'requestedProcedures' must have type Array.");this.ReferencedRequestSequence=O(ContentSequence,N(t.requestedProcedures)),this.CurrentRequestedProcedureEvidenceSequence=[i]}else this.PertinentOtherEvidenceSequence=[i];if(void 0!==t.previousVersions){var o={};t.previousVersions.forEach((function(e){if(e.StudyInstanceUID!=t.evidence[0].StudyInstanceUID)throw new Error("Previous version data sets must belong to the same study.");var n={};n.ReferencedSOPClassUID=e.SOPClassUID,n.ReferencedSOPInstanceUID=e.SOPInstanceUID,o[e.SeriesInstanceUID].push(n)}));var s={};s.StudyInstanceUID=t.previousVersions[0].StudyInstanceUID,s.ReferencedSeriesSequence=[],Object.keys(o).forEach((function(e){var t={};t.SeriesInstanceUID=e,t.ReferencedSOPSequence=o[e],s.ReferencedSeriesSequence.push(t)})),this.PredecessorDocumentsSequence=[s]}if(void 0!==t.performedProcedureCodes){if(!("object"===S(t.performedProcedureCodes)||t.performedProcedureCodes instanceof Array))throw new Error("Option 'performedProcedureCodes' must have type Array.");this.PerformedProcedureCodeSequence=O(ContentSequence,N(t.performedProcedureCodes))}else this.PerformedProcedureCodeSequence=[];this.ReferencedPerformedProcedureStepSequence=[],ql.forEach((function(e){var r=zr.punctuateTag(e),a=zr.dictionary[r];if(void 0!==a){var i=a.name,o=t.evidence[0][i];void 0!==o&&(n[i]=o)}}))})),Wl=["PatientID","PatientName","SeriesDate","AccessionNumber","SeriesDescription","StudyTime","ContentTime","ReferringPhysicianName","PatientBirthDate","PatientSex","ClinicalTrialSiteID","ClinicalTrialSiteName","ClinicalTrialSubjectID","ClinicalTrialSubjectReadingID","ClinicalTrialTimePointID","ClinicalTrialTimePointDescription","ContrastBolusAgent","StudyID","InstanceCreationDate","StudyDate","ContentDate","DateOfSecondaryCapture","DateOfLastCalibration","DateOfLastDetectorCalibration","FrameAcquisitionDatetime","FrameReferenceDatetime","StudyVerifiedDate","StudyReadDate","ScheduledStudyStartDate","ScheduledStudyStopDate","StudyArrivalDate","StudyCompletionDate","ScheduledAdmissionDate","ScheduledDischargeDate","DischargeDate","SPSStartDate","SPSEndDate","PPSStartDate","PPSEndDate","IssueDateOfImagingServiceRequest","VerificationDateTime","ObservationDateTime","DateTime","Date","RefDatetime","AcquisitionDate","OverlayDate","CurveDate","AcquisitionDatetime","SeriesTime","AcquisitionTime","OverlayTime","CurveTime","InstitutionName","InstitutionAddress","ReferringPhysicianAddress","ReferringPhysicianPhoneNumbers","ReferringPhysiciansIDSeq","TimezoneOffsetFromUTC","StationName","StudyDescription","InstitutionalDepartmentName","PhysicianOfRecord","PhysicianOfRecordIdSeq","PerformingPhysicianName","PerformingPhysicianIdSeq","NameOfPhysicianReadingStudy","PhysicianReadingStudyIdSeq","OperatorName","OperatorsIdentificationSeq","AdmittingDiagnosisDescription","AdmittingDiagnosisCodeSeq","RefStudySeq","RefPPSSeq","RefPatientSeq","RefImageSeq","DerivationDescription","SourceImageSeq","IdentifyingComments","IssuerOfPatientID","PatientBirthTime","PatientInsurancePlanCodeSeq","PatientPrimaryLanguageCodeSeq","PatientPrimaryLanguageModifierCodeSeq","OtherPatientIDs","OtherPatientNames","OtherPatientIDsSeq","PatientBirthName","PatientAge","PatientSize","PatientWeight","PatientAddress","InsurancePlanIdentification","PatientMotherBirthName","MilitaryRank","BranchOfService","MedicalRecordLocator","MedicalAlerts","ContrastAllergies","CountryOfResidence","RegionOfResidence","PatientPhoneNumbers","EthnicGroup","Occupation","SmokingStatus","AdditionalPatientHistory","PregnancyStatus","LastMenstrualDate","PatientReligiousPreference","PatientSexNeutered","ResponsiblePerson","ResponsibleOrganization","PatientComments","DeviceSerialNumber","PlateID","GeneratorID","CassetteID","GantryID","ProtocolName","AcquisitionDeviceProcessingDescription","AcquisitionComments","DetectorID","AcquisitionProtocolDescription","ContributionDescription","ModifyingDeviceID","ModifyingDeviceManufacturer","ModifiedImageDescription","ImageComments","ImagePresentationComments","StudyIDIssuer","ScheduledStudyLocation","ScheduledStudyLocationAET","ReasonforStudy","RequestingPhysician","RequestingService","RequestedProcedureDescription","RequestedContrastAgent","StudyComments","AdmissionID","IssuerOfAdmissionID","ScheduledPatientInstitutionResidence","AdmittingDate","AdmittingTime","DischargeDiagnosisDescription","SpecialNeeds","ServiceEpisodeID","IssuerOfServiceEpisodeId","ServiceEpisodeDescription","CurrentPatientLocation","PatientInstitutionResidence","PatientState","ReferencedPatientAliasSeq","VisitComments","ScheduledStationAET","ScheduledPerformingPhysicianName","SPSDescription","ScheduledStationName","SPSLocation","PreMedication","PerformedStationAET","PerformedStationName","PerformedLocation","PerformedStationNameCodeSeq","PPSID","PPSDescription","RequestAttributesSeq","PPSComments","AcquisitionContextSeq","PatientTransportArrangements","RequestedProcedureLocation","NamesOfIntendedRecipientsOfResults","IntendedRecipientsOfResultsIDSequence","PersonAddress","PersonTelephoneNumbers","RequestedProcedureComments","ReasonForTheImagingServiceRequest","OrderEnteredBy","OrderEntererLocation","OrderCallbackPhoneNumber","ImagingServiceRequestComments","ConfidentialityPatientData","ScheduledStationNameCodeSeq","ScheduledStationGeographicLocCodeSeq","PerformedStationGeoLocCodeSeq","ScheduledHumanPerformersSeq","ActualHumanPerformersSequence","HumanPerformersOrganization","HumanPerformersName","VerifyingOrganization","VerifyingObserverName","AuthorObserverSequence","ParticipantSequence","CustodialOrganizationSeq","VerifyingObserverIdentificationCodeSeq","PersonName","ContentSeq","OverlayData","OverlayComments","IconImageSequence","TopicSubject","TopicAuthor","TopicKeyWords","TextString","Arbitrary","TextComments","ResultsIDIssuer","InterpretationRecorder","InterpretationTranscriber","InterpretationText","InterpretationAuthor","InterpretationApproverSequence","PhysicianApprovingInterpretation","InterpretationDiagnosisDescription","ResultsDistributionListSeq","DistributionName","DistributionAddress","InterpretationIdIssuer","Impressions","ResultComments","DigitalSignaturesSeq","DataSetTrailingPadding"];var Yl={cleanTags:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;null==t&&(t={"00100010":"ANON^PATIENT","00100020":"ANON^ID"});var r=null!=n?n:Wl;r.forEach((function(n){var r=zr.nameMap[n];if(r&&"PrivateTag"!=r.version){var a,i=r.tag,o=Hr.fromPString(i).toCleanString();if(e[o])a=o in t?[t[o]]:[],e[o].Value=a}}))},getTagsNameToEmpty:function(){return[].concat(Wl)}},Zl={DICOMWEB:na,adapters:wu,data:{BitArray:h,ReadBufferStream:Jn,DeflatedReadBufferStream:er,WriteBufferStream:tr,DicomDict:ta,DicomMessage:Jr,DicomMetaDictionary:zr,Tag:Hr,ValueRepresentation:or,Colors:ra,datasetToDict:ni,datasetToBuffer:ri,datasetToBlob:ai},derivations:{DerivedDataset:ii,DerivedPixels:oi,DerivedImage:si,Segmentation:yi,StructuredReport:bi,ParametricMap:Si},normalizers:{Normalizer:ui,ImageNormalizer:li,MRImageNormalizer:ci,EnhancedMRImageNormalizer:fi,EnhancedUSVolumeNormalizer:vi,CTImageNormalizer:mi,PETImageNormalizer:pi,SEGImageNormalizer:hi,DSRNormalizer:Ai},sr:{coding:Ru,contentItems:gl,documents:Object.freeze({__proto__:null,Comprehensive3DSR:zl}),templates:Ql,valueTypes:il},utilities:Pu,log:p,anonymizer:Yl};t.ZP=Zl},61133:function(e){"use strict";var t="%[a-f0-9]{2}",n=new RegExp(t,"gi"),r=new RegExp("("+t+")+","gi");function a(e,t){try{return decodeURIComponent(e.join(""))}catch(e){}if(1===e.length)return e;t=t||1;var n=e.slice(0,t),r=e.slice(t);return Array.prototype.concat.call([],a(n),a(r))}function i(e){try{return decodeURIComponent(e)}catch(i){for(var t=e.match(n),r=1;r2?arguments[2]:{},i=r(t);a&&(i=o.call(i,Object.getOwnPropertySymbols(t)));for(var s=0;se.byteArray.length-e.position&&(u=e.byteArray.length-e.position),t.fragments.push({offset:e.position-o-8,position:e.position,length:u}),e.seek(u),void(t.length=e.position-t.dataOffset);t.fragments.push({offset:e.position-o-8,position:e.position,length:u}),e.seek(u)}n&&n.push("pixel data element ".concat(t.tag," missing sequence delimiter tag xfffee0dd"))}function g(e,t){if(void 0===e)throw"dicomParser.findAndSetUNElementLength: missing required parameter 'byteStream'";for(var n=e.byteArray.length-8;e.position<=n;)if(65534===e.readUint16()&&57565===e.readUint16())return 0!==e.readUint32()&&e.warnings("encountered non zero length following item delimiter at position ".concat(e.position-4," while reading element of undefined length with tag ").concat(t.tag)),void(t.length=e.position-t.dataOffset);t.length=e.byteArray.length-t.dataOffset,e.seek(e.byteArray.length-e.position)}function A(e,t,n){if(n<0)throw"dicomParser.readFixedString - length cannot be less than 0";if(t+n>e.length)throw"dicomParser.readFixedString: attempt to read past end of buffer";for(var r,a="",i=0;it.byteArray.length)throw"dicomParser.parseDicomDataSetExplicit: invalid value for parameter 'maxP osition'";for(var a=e.elements;t.positionn)throw"dicomParser:parseDicomDataSetExplicit: buffer overrun"}function R(e,t,n){var r=3t.byteArray.length)throw"dicomParser.parseDicomDataSetImplicit: invalid value for parameter 'maxPosition'";for(var a=e.elements;t.positione.length)throw"bigEndianByteArrayParser.readUint16: attempt to read past end of buffer";return(e[t]<<8)+e[t+1]},readInt16:function(e,t){if(t<0)throw"bigEndianByteArrayParser.readInt16: position cannot be less than 0";if(t+2>e.length)throw"bigEndianByteArrayParser.readInt16: attempt to read past end of buffer";return 32768&(t=(e[t]<<8)+e[t+1])?t-65535-1:t},readUint32:function(e,t){if(t<0)throw"bigEndianByteArrayParser.readUint32: position cannot be less than 0";if(t+4>e.length)throw"bigEndianByteArrayParser.readUint32: attempt to read past end of buffer";return 256*(256*(256*e[t]+e[t+1])+e[t+2])+e[t+3]},readInt32:function(e,t){if(t<0)throw"bigEndianByteArrayParser.readInt32: position cannot be less than 0";if(t+4>e.length)throw"bigEndianByteArrayParser.readInt32: attempt to read past end of buffer";return(e[t]<<24)+(e[t+1]<<16)+(e[t+2]<<8)+e[t+3]},readFloat:function(e,t){if(t<0)throw"bigEndianByteArrayParser.readFloat: position cannot be less than 0";if(t+4>e.length)throw"bigEndianByteArrayParser.readFloat: attempt to read past end of buffer";var n=new Uint8Array(4);return n[3]=e[t],n[2]=e[t+1],n[1]=e[t+2],n[0]=e[t+3],new Float32Array(n.buffer)[0]},readDouble:function(e,t){if(t<0)throw"bigEndianByteArrayParser.readDouble: position cannot be less than 0";if(t+8>e.length)throw"bigEndianByteArrayParser.readDouble: attempt to read past end of buffer";var n=new Uint8Array(8);return n[7]=e[t],n[6]=e[t+1],n[5]=e[t+2],n[4]=e[t+3],n[3]=e[t+4],n[2]=e[t+5],n[1]=e[t+6],n[0]=e[t+7],new Float64Array(n.buffer)[0]}};function F(e,t,n){if("undefined"!=typeof Buffer&&e instanceof Buffer)return e.slice(t,t+n);if(e instanceof Uint8Array)return new Uint8Array(e.buffer,e.byteOffset+t,n);throw"dicomParser.from: unknown type for byteArray"}function B(e,t){for(var n=0;n=n.length)throw"dicomParser.ByteStream: parameter 'position' cannot be greater than or equal to 'byteArray' length";this.byteArrayParser=t,this.byteArray=n,this.position=r||0,this.warnings=[]}var t,n,r;return t=e,(n=[{key:"seek",value:function(e){if(this.position+e<0)throw"dicomParser.ByteStream.prototype.seek: cannot seek to position < 0";this.position+=e}},{key:"readByteStream",value:function(t){if(this.position+t>this.byteArray.length)throw"dicomParser.ByteStream.prototype.readByteStream: readByteStream - buffer overread";var n=F(this.byteArray,this.position,t);return this.position+=t,new e(this.byteArrayParser,n)}},{key:"getSize",value:function(){return this.byteArray.length}},{key:"readUint16",value:function(){var e=this.byteArrayParser.readUint16(this.byteArray,this.position);return this.position+=2,e}},{key:"readUint32",value:function(){var e=this.byteArrayParser.readUint32(this.byteArray,this.position);return this.position+=4,e}},{key:"readFixedString",value:function(e){var t=A(this.byteArray,this.position,e);return this.position+=e,t}}])&&B(t.prototype,n),r&&B(t,r),Object.defineProperty(t,"prototype",{writable:!1}),e}(),V={readUint16:function(e,t){if(t<0)throw"littleEndianByteArrayParser.readUint16: position cannot be less than 0";if(t+2>e.length)throw"littleEndianByteArrayParser.readUint16: attempt to read past end of buffer";return e[t]+256*e[t+1]},readInt16:function(e,t){if(t<0)throw"littleEndianByteArrayParser.readInt16: position cannot be less than 0";if(t+2>e.length)throw"littleEndianByteArrayParser.readInt16: attempt to read past end of buffer";return 32768&(t=e[t]+(e[t+1]<<8))?t-65535-1:t},readUint32:function(e,t){if(t<0)throw"littleEndianByteArrayParser.readUint32: position cannot be less than 0";if(t+4>e.length)throw"littleEndianByteArrayParser.readUint32: attempt to read past end of buffer";return e[t]+256*e[t+1]+256*e[t+2]*256+256*e[t+3]*256*256},readInt32:function(e,t){if(t<0)throw"littleEndianByteArrayParser.readInt32: position cannot be less than 0";if(t+4>e.length)throw"littleEndianByteArrayParser.readInt32: attempt to read past end of buffer";return e[t]+(e[t+1]<<8)+(e[t+2]<<16)+(e[t+3]<<24)},readFloat:function(e,t){if(t<0)throw"littleEndianByteArrayParser.readFloat: position cannot be less than 0";if(t+4>e.length)throw"littleEndianByteArrayParser.readFloat: attempt to read past end of buffer";var n=new Uint8Array(4);return n[0]=e[t],n[1]=e[t+1],n[2]=e[t+2],n[3]=e[t+3],new Float32Array(n.buffer)[0]},readDouble:function(e,t){if(t<0)throw"littleEndianByteArrayParser.readDouble: position cannot be less than 0";if(t+8>e.length)throw"littleEndianByteArrayParser.readDouble: attempt to read past end of buffer";var n=new Uint8Array(8);return n[0]=e[t],n[1]=e[t+1],n[2]=e[t+2],n[3]=e[t+3],n[4]=e[t+4],n[5]=e[t+5],n[6]=e[t+6],n[7]=e[t+7],new Float64Array(n.buffer)[0]}};function j(e){var t=1= 0";if(n>=t.fragments.length)throw"dicomParser.readEncapsulatedPixelDataFromFragments: parameter 'startFragmentIndex' must be < number of fragments";if(r<1)throw"dicomParser.readEncapsulatedPixelDataFromFragments: parameter 'numFragments' must be > 0";if(n+r>t.fragments.length)throw"dicomParser.readEncapsulatedPixelDataFromFragments: parameter 'startFragment' + 'numFragments' < number of fragments";var i=new U(e.byteArrayParser,e.byteArray,t.dataOffset);if("xfffee000"!==(t=C(i)).tag)throw"dicomParser.readEncapsulatedPixelData: missing basic offset table xfffee000";i.seek(t.length);var o=i.position;if(1===r)return F(i.byteArray,o+a[n].offset+8,a[n].length);t=Q(a,n,r);for(var s=L(i.byteArray,t),u=0,l=n;l= 0";if(n>=r.length)throw"dicomParser.readEncapsulatedImageFrame: parameter 'frameIndex' must be < basicOffsetTable.length";var i=r[n];if(void 0===(i=z(a,i)))throw"dicomParser.readEncapsulatedImageFrame: unable to find fragment that matches basic offset table entry";return q(e,t,i,W(n,r,a,i),a)}var Z=!1;function K(e,t,n){if(Z||(Z=!0,console&&console.log&&console.log("WARNING: dicomParser.readEncapsulatedPixelData() has been deprecated")),void 0===e)throw"dicomParser.readEncapsulatedPixelData: missing required parameter 'dataSet'";if(void 0===t)throw"dicomParser.readEncapsulatedPixelData: missing required parameter 'element'";if(void 0===n)throw"dicomParser.readEncapsulatedPixelData: missing required parameter 'frame'";if("x7fe00010"!==t.tag)throw"dicomParser.readEncapsulatedPixelData: parameter 'element' refers to non pixel data tag (expected tag = x7fe00010)";if(!0!==t.encapsulatedPixelData)throw"dicomParser.readEncapsulatedPixelData: parameter 'element' refers to pixel data element that does not have encapsulated pixel data";if(!0!==t.hadUndefinedLength)throw"dicomParser.readEncapsulatedPixelData: parameter 'element' refers to pixel data element that does not have encapsulated pixel data";if(void 0===t.basicOffsetTable)throw"dicomParser.readEncapsulatedPixelData: parameter 'element' refers to pixel data element that does not have encapsulated pixel data";if(void 0===t.fragments)throw"dicomParser.readEncapsulatedPixelData: parameter 'element' refers to pixel data element that does not have encapsulated pixel data";if(n<0)throw"dicomParser.readEncapsulatedPixelData: parameter 'frame' must be >= 0";return 0!==t.basicOffsetTable.length?Y(e,t,n):q(e,t,0,t.fragments.length)}t.default={isStringVr:a,isPrivateTag:i,parsePN:o,parseTM:s,parseDA:l,explicitElementToString:c,explicitDataSetToJS:d,createJPEGBasicOffsetTable:m,parseDicomDataSetExplicit:x,parseDicomDataSetImplicit:R,readFixedString:A,alloc:L,version:k,bigEndianByteArrayParser:N,ByteStream:U,sharedCopy:F,DataSet:b,findAndSetUNElementLength:g,findEndOfEncapsulatedElement:h,findItemDelimitationItemAndSetElementLength:w,littleEndianByteArrayParser:V,parseDicom:H,readDicomElementExplicit:T,readDicomElementImplicit:E,readEncapsulatedImageFrame:Y,readEncapsulatedPixelData:K,readEncapsulatedPixelDataFromFragments:q,readPart10Header:j,readSequenceItemsExplicit:O,readSequenceItemsImplicit:_,readSequenceItem:C,readTag:p,LEI:"1.2.840.10008.1.2",LEE:"1.2.840.10008.1.2.1"}}],r={},t.m=n,t.c=r,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:r})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,n){if(1&n&&(e=t(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(t.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var a in e)t.d(r,a,function(t){return e[t]}.bind(null,a));return r},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=1);function t(e){if(r[e])return r[e].exports;var a=r[e]={i:e,l:!1,exports:{}};return n[e].call(a.exports,a,a.exports,t),a.l=!0,a.exports}var n,r}(n(32155))},52440:function(e){"use strict";e.exports=function(e){if(arguments.length<1)throw new TypeError("1 argument is required");if("object"!=typeof e)throw new TypeError("Argument 1 (”other“) to Node.contains must be an instance of Node");var t=e;do{if(this===t)return!0;t&&(t=t.parentNode)}while(t);return!1}},4911:function(e,t,n){"use strict";var r=n(26506),a=n(52440),i=n(12850),o=i(),s=function(e,t){return o.apply(e,[t])};r(s,{getPolyfill:i,implementation:a,shim:n(91610)}),e.exports=s},12850:function(e,t,n){"use strict";var r=n(52440);e.exports=function(){if("undefined"!=typeof document){if(document.contains)return document.contains;if(document.body&&document.body.contains)try{if("boolean"==typeof document.body.contains.call(document,""))return document.body.contains}catch(e){}}return r}},91610:function(e,t,n){"use strict";var r=n(26506),a=n(12850);e.exports=function(){var e=a();return"undefined"!=typeof document&&(r(document,{contains:e},{contains:function(){return document.contains!==e}}),"undefined"!=typeof Element&&r(Element.prototype,{contains:e},{contains:function(){return Element.prototype.contains!==e}})),e}},82525:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){if((0,r.default)(e,t))return!0;if(!e||!t||"object"!==o(e)||"object"!==o(t))return!1;var n=Object.keys(e),i=Object.keys(t);if(n.length!==i.length)return!1;n.sort(),i.sort();for(var s=0;s1&&(arguments[1]===String?n="string":arguments[1]===Number&&(n="number")),r&&(Symbol.toPrimitive?t=l(e,Symbol.toPrimitive):s(e)&&(t=Symbol.prototype.valueOf)),void 0!==t){var i=t.call(e,n);if(a(i))return i;throw new TypeError("unable to convert exotic object to primitive")}return"default"===n&&(o(e)||s(e))&&(n="string"),u(e,"default"===n?"number":n)}},67974:function(e){"use strict";e.exports=function(e){return null===e||"function"!=typeof e&&"object"!=typeof e}},2595:function(e,t,n){var r;!function(){"use strict";var a=!("undefined"==typeof window||!window.document||!window.document.createElement),i={canUseDOM:a,canUseWorkers:"undefined"!=typeof Worker,canUseEventListeners:a&&!(!window.addEventListener&&!window.attachEvent),canUseViewport:a&&!!window.screen};void 0===(r=function(){return i}.call(t,n,t,e))||(e.exports=r)}()},39507:function(e){"use strict";e.exports=function e(t,n){if(t===n)return!0;if(t&&n&&"object"==typeof t&&"object"==typeof n){if(t.constructor!==n.constructor)return!1;var r,a,i;if(Array.isArray(t)){if((r=t.length)!=n.length)return!1;for(a=r;0!=a--;)if(!e(t[a],n[a]))return!1;return!0}if(t.constructor===RegExp)return t.source===n.source&&t.flags===n.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===n.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===n.toString();if((r=(i=Object.keys(t)).length)!==Object.keys(n).length)return!1;for(a=r;0!=a--;)if(!Object.prototype.hasOwnProperty.call(n,i[a]))return!1;for(a=r;0!=a--;){var o=i[a];if(!e(t[o],n[o]))return!1}return!0}return t!=t&&n!=n}},86068:function(e){"use strict";e.exports=function(e,t){for(var n={},r=Object.keys(e),a=Array.isArray(t),i=0;i1&&"boolean"!=typeof t)throw new o('"allowMissing" argument must be a boolean');var n=D(e),r=n.length>0?n[0]:"",i=_("%"+r+"%",t),s=i.name,l=i.value,c=!1,d=i.alias;d&&(r=d[0],b(n,S([0,1],d)));for(var f=1,v=!0;f=n.length){var A=u(l,m);l=(v=!!A)&&"get"in A&&!("originalValue"in A.get)?A.get:l[m]}else v=y(l,m),l=l[m];v&&!c&&(p[s]=l)}}return l}},82451:function(e,t,n){"use strict";n.d(t,{FD:function(){return i},Ib:function(){return r},WT:function(){return a},c$:function(){return s}});var r=1e-6,a="undefined"!=typeof Float32Array?Float32Array:Array,i=Math.random;var o=Math.PI/180;function s(e){return e*o}Math.hypot||(Math.hypot=function(){for(var e=0,t=arguments.length;t--;)e+=arguments[t]*arguments[t];return Math.sqrt(e)})},81911:function(e,t,n){"use strict";n.r(t),n.d(t,{add:function(){return M},adjoint:function(){return v},clone:function(){return o},copy:function(){return s},create:function(){return a},determinant:function(){return m},equals:function(){return R},exactEquals:function(){return x},frob:function(){return _},fromMat2d:function(){return w},fromMat4:function(){return i},fromQuat:function(){return I},fromRotation:function(){return S},fromScaling:function(){return b},fromTranslation:function(){return y},fromValues:function(){return u},identity:function(){return c},invert:function(){return f},mul:function(){return L},multiply:function(){return p},multiplyScalar:function(){return P},multiplyScalarAndAdd:function(){return T},normalFromMat4:function(){return E},projection:function(){return C},rotate:function(){return g},scale:function(){return A},set:function(){return l},str:function(){return D},sub:function(){return k},subtract:function(){return O},translate:function(){return h},transpose:function(){return d}});var r=n(82451);function a(){var e=new r.WT(9);return r.WT!=Float32Array&&(e[1]=0,e[2]=0,e[3]=0,e[5]=0,e[6]=0,e[7]=0),e[0]=1,e[4]=1,e[8]=1,e}function i(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[4],e[4]=t[5],e[5]=t[6],e[6]=t[8],e[7]=t[9],e[8]=t[10],e}function o(e){var t=new r.WT(9);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t}function s(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e}function u(e,t,n,a,i,o,s,u,l){var c=new r.WT(9);return c[0]=e,c[1]=t,c[2]=n,c[3]=a,c[4]=i,c[5]=o,c[6]=s,c[7]=u,c[8]=l,c}function l(e,t,n,r,a,i,o,s,u,l){return e[0]=t,e[1]=n,e[2]=r,e[3]=a,e[4]=i,e[5]=o,e[6]=s,e[7]=u,e[8]=l,e}function c(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=1,e[5]=0,e[6]=0,e[7]=0,e[8]=1,e}function d(e,t){if(e===t){var n=t[1],r=t[2],a=t[5];e[1]=t[3],e[2]=t[6],e[3]=n,e[5]=t[7],e[6]=r,e[7]=a}else e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8];return e}function f(e,t){var n=t[0],r=t[1],a=t[2],i=t[3],o=t[4],s=t[5],u=t[6],l=t[7],c=t[8],d=c*o-s*l,f=-c*i+s*u,v=l*i-o*u,m=n*d+r*f+a*v;return m?(m=1/m,e[0]=d*m,e[1]=(-c*r+a*l)*m,e[2]=(s*r-a*o)*m,e[3]=f*m,e[4]=(c*n-a*u)*m,e[5]=(-s*n+a*i)*m,e[6]=v*m,e[7]=(-l*n+r*u)*m,e[8]=(o*n-r*i)*m,e):null}function v(e,t){var n=t[0],r=t[1],a=t[2],i=t[3],o=t[4],s=t[5],u=t[6],l=t[7],c=t[8];return e[0]=o*c-s*l,e[1]=a*l-r*c,e[2]=r*s-a*o,e[3]=s*u-i*c,e[4]=n*c-a*u,e[5]=a*i-n*s,e[6]=i*l-o*u,e[7]=r*u-n*l,e[8]=n*o-r*i,e}function m(e){var t=e[0],n=e[1],r=e[2],a=e[3],i=e[4],o=e[5],s=e[6],u=e[7],l=e[8];return t*(l*i-o*u)+n*(-l*a+o*s)+r*(u*a-i*s)}function p(e,t,n){var r=t[0],a=t[1],i=t[2],o=t[3],s=t[4],u=t[5],l=t[6],c=t[7],d=t[8],f=n[0],v=n[1],m=n[2],p=n[3],h=n[4],g=n[5],A=n[6],y=n[7],S=n[8];return e[0]=f*r+v*o+m*l,e[1]=f*a+v*s+m*c,e[2]=f*i+v*u+m*d,e[3]=p*r+h*o+g*l,e[4]=p*a+h*s+g*c,e[5]=p*i+h*u+g*d,e[6]=A*r+y*o+S*l,e[7]=A*a+y*s+S*c,e[8]=A*i+y*u+S*d,e}function h(e,t,n){var r=t[0],a=t[1],i=t[2],o=t[3],s=t[4],u=t[5],l=t[6],c=t[7],d=t[8],f=n[0],v=n[1];return e[0]=r,e[1]=a,e[2]=i,e[3]=o,e[4]=s,e[5]=u,e[6]=f*r+v*o+l,e[7]=f*a+v*s+c,e[8]=f*i+v*u+d,e}function g(e,t,n){var r=t[0],a=t[1],i=t[2],o=t[3],s=t[4],u=t[5],l=t[6],c=t[7],d=t[8],f=Math.sin(n),v=Math.cos(n);return e[0]=v*r+f*o,e[1]=v*a+f*s,e[2]=v*i+f*u,e[3]=v*o-f*r,e[4]=v*s-f*a,e[5]=v*u-f*i,e[6]=l,e[7]=c,e[8]=d,e}function A(e,t,n){var r=n[0],a=n[1];return e[0]=r*t[0],e[1]=r*t[1],e[2]=r*t[2],e[3]=a*t[3],e[4]=a*t[4],e[5]=a*t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e}function y(e,t){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=1,e[5]=0,e[6]=t[0],e[7]=t[1],e[8]=1,e}function S(e,t){var n=Math.sin(t),r=Math.cos(t);return e[0]=r,e[1]=n,e[2]=0,e[3]=-n,e[4]=r,e[5]=0,e[6]=0,e[7]=0,e[8]=1,e}function b(e,t){return e[0]=t[0],e[1]=0,e[2]=0,e[3]=0,e[4]=t[1],e[5]=0,e[6]=0,e[7]=0,e[8]=1,e}function w(e,t){return e[0]=t[0],e[1]=t[1],e[2]=0,e[3]=t[2],e[4]=t[3],e[5]=0,e[6]=t[4],e[7]=t[5],e[8]=1,e}function I(e,t){var n=t[0],r=t[1],a=t[2],i=t[3],o=n+n,s=r+r,u=a+a,l=n*o,c=r*o,d=r*s,f=a*o,v=a*s,m=a*u,p=i*o,h=i*s,g=i*u;return e[0]=1-d-m,e[3]=c-g,e[6]=f+h,e[1]=c+g,e[4]=1-l-m,e[7]=v-p,e[2]=f-h,e[5]=v+p,e[8]=1-l-d,e}function E(e,t){var n=t[0],r=t[1],a=t[2],i=t[3],o=t[4],s=t[5],u=t[6],l=t[7],c=t[8],d=t[9],f=t[10],v=t[11],m=t[12],p=t[13],h=t[14],g=t[15],A=n*s-r*o,y=n*u-a*o,S=n*l-i*o,b=r*u-a*s,w=r*l-i*s,I=a*l-i*u,E=c*p-d*m,C=c*h-f*m,D=c*g-v*m,_=d*h-f*p,M=d*g-v*p,O=f*g-v*h,P=A*O-y*M+S*_+b*D-w*C+I*E;return P?(P=1/P,e[0]=(s*O-u*M+l*_)*P,e[1]=(u*D-o*O-l*C)*P,e[2]=(o*M-s*D+l*E)*P,e[3]=(a*M-r*O-i*_)*P,e[4]=(n*O-a*D+i*C)*P,e[5]=(r*D-n*M-i*E)*P,e[6]=(p*I-h*w+g*b)*P,e[7]=(h*S-m*I-g*y)*P,e[8]=(m*w-p*S+g*A)*P,e):null}function C(e,t,n){return e[0]=2/t,e[1]=0,e[2]=0,e[3]=0,e[4]=-2/n,e[5]=0,e[6]=-1,e[7]=1,e[8]=1,e}function D(e){return"mat3("+e[0]+", "+e[1]+", "+e[2]+", "+e[3]+", "+e[4]+", "+e[5]+", "+e[6]+", "+e[7]+", "+e[8]+")"}function _(e){return Math.hypot(e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8])}function M(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e[3]=t[3]+n[3],e[4]=t[4]+n[4],e[5]=t[5]+n[5],e[6]=t[6]+n[6],e[7]=t[7]+n[7],e[8]=t[8]+n[8],e}function O(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e[2]=t[2]-n[2],e[3]=t[3]-n[3],e[4]=t[4]-n[4],e[5]=t[5]-n[5],e[6]=t[6]-n[6],e[7]=t[7]-n[7],e[8]=t[8]-n[8],e}function P(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e[3]=t[3]*n,e[4]=t[4]*n,e[5]=t[5]*n,e[6]=t[6]*n,e[7]=t[7]*n,e[8]=t[8]*n,e}function T(e,t,n,r){return e[0]=t[0]+n[0]*r,e[1]=t[1]+n[1]*r,e[2]=t[2]+n[2]*r,e[3]=t[3]+n[3]*r,e[4]=t[4]+n[4]*r,e[5]=t[5]+n[5]*r,e[6]=t[6]+n[6]*r,e[7]=t[7]+n[7]*r,e[8]=t[8]+n[8]*r,e}function x(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]&&e[4]===t[4]&&e[5]===t[5]&&e[6]===t[6]&&e[7]===t[7]&&e[8]===t[8]}function R(e,t){var n=e[0],a=e[1],i=e[2],o=e[3],s=e[4],u=e[5],l=e[6],c=e[7],d=e[8],f=t[0],v=t[1],m=t[2],p=t[3],h=t[4],g=t[5],A=t[6],y=t[7],S=t[8];return Math.abs(n-f)<=r.Ib*Math.max(1,Math.abs(n),Math.abs(f))&&Math.abs(a-v)<=r.Ib*Math.max(1,Math.abs(a),Math.abs(v))&&Math.abs(i-m)<=r.Ib*Math.max(1,Math.abs(i),Math.abs(m))&&Math.abs(o-p)<=r.Ib*Math.max(1,Math.abs(o),Math.abs(p))&&Math.abs(s-h)<=r.Ib*Math.max(1,Math.abs(s),Math.abs(h))&&Math.abs(u-g)<=r.Ib*Math.max(1,Math.abs(u),Math.abs(g))&&Math.abs(l-A)<=r.Ib*Math.max(1,Math.abs(l),Math.abs(A))&&Math.abs(c-y)<=r.Ib*Math.max(1,Math.abs(c),Math.abs(y))&&Math.abs(d-S)<=r.Ib*Math.max(1,Math.abs(d),Math.abs(S))}var L=p,k=O},64950:function(e,t,n){"use strict";n.r(t),n.d(t,{add:function(){return W},adjoint:function(){return f},clone:function(){return i},copy:function(){return o},create:function(){return a},determinant:function(){return v},equals:function(){return $},exactEquals:function(){return X},frob:function(){return z},fromQuat:function(){return L},fromQuat2:function(){return M},fromRotation:function(){return I},fromRotationTranslation:function(){return _},fromRotationTranslationScale:function(){return x},fromRotationTranslationScaleOrigin:function(){return R},fromScaling:function(){return w},fromTranslation:function(){return b},fromValues:function(){return s},fromXRotation:function(){return E},fromYRotation:function(){return C},fromZRotation:function(){return D},frustum:function(){return k},getRotation:function(){return T},getScaling:function(){return P},getTranslation:function(){return O},identity:function(){return l},invert:function(){return d},lookAt:function(){return H},mul:function(){return J},multiply:function(){return m},multiplyScalar:function(){return Z},multiplyScalarAndAdd:function(){return K},ortho:function(){return j},orthoNO:function(){return V},orthoZO:function(){return G},perspective:function(){return F},perspectiveFromFieldOfView:function(){return U},perspectiveNO:function(){return N},perspectiveZO:function(){return B},rotate:function(){return g},rotateX:function(){return A},rotateY:function(){return y},rotateZ:function(){return S},scale:function(){return h},set:function(){return u},str:function(){return q},sub:function(){return ee},subtract:function(){return Y},targetTo:function(){return Q},translate:function(){return p},transpose:function(){return c}});var r=n(82451);function a(){var e=new r.WT(16);return r.WT!=Float32Array&&(e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0),e[0]=1,e[5]=1,e[10]=1,e[15]=1,e}function i(e){var t=new r.WT(16);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}function o(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}function s(e,t,n,a,i,o,s,u,l,c,d,f,v,m,p,h){var g=new r.WT(16);return g[0]=e,g[1]=t,g[2]=n,g[3]=a,g[4]=i,g[5]=o,g[6]=s,g[7]=u,g[8]=l,g[9]=c,g[10]=d,g[11]=f,g[12]=v,g[13]=m,g[14]=p,g[15]=h,g}function u(e,t,n,r,a,i,o,s,u,l,c,d,f,v,m,p,h){return e[0]=t,e[1]=n,e[2]=r,e[3]=a,e[4]=i,e[5]=o,e[6]=s,e[7]=u,e[8]=l,e[9]=c,e[10]=d,e[11]=f,e[12]=v,e[13]=m,e[14]=p,e[15]=h,e}function l(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function c(e,t){if(e===t){var n=t[1],r=t[2],a=t[3],i=t[6],o=t[7],s=t[11];e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=n,e[6]=t[9],e[7]=t[13],e[8]=r,e[9]=i,e[11]=t[14],e[12]=a,e[13]=o,e[14]=s}else e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15];return e}function d(e,t){var n=t[0],r=t[1],a=t[2],i=t[3],o=t[4],s=t[5],u=t[6],l=t[7],c=t[8],d=t[9],f=t[10],v=t[11],m=t[12],p=t[13],h=t[14],g=t[15],A=n*s-r*o,y=n*u-a*o,S=n*l-i*o,b=r*u-a*s,w=r*l-i*s,I=a*l-i*u,E=c*p-d*m,C=c*h-f*m,D=c*g-v*m,_=d*h-f*p,M=d*g-v*p,O=f*g-v*h,P=A*O-y*M+S*_+b*D-w*C+I*E;return P?(P=1/P,e[0]=(s*O-u*M+l*_)*P,e[1]=(a*M-r*O-i*_)*P,e[2]=(p*I-h*w+g*b)*P,e[3]=(f*w-d*I-v*b)*P,e[4]=(u*D-o*O-l*C)*P,e[5]=(n*O-a*D+i*C)*P,e[6]=(h*S-m*I-g*y)*P,e[7]=(c*I-f*S+v*y)*P,e[8]=(o*M-s*D+l*E)*P,e[9]=(r*D-n*M-i*E)*P,e[10]=(m*w-p*S+g*A)*P,e[11]=(d*S-c*w-v*A)*P,e[12]=(s*C-o*_-u*E)*P,e[13]=(n*_-r*C+a*E)*P,e[14]=(p*y-m*b-h*A)*P,e[15]=(c*b-d*y+f*A)*P,e):null}function f(e,t){var n=t[0],r=t[1],a=t[2],i=t[3],o=t[4],s=t[5],u=t[6],l=t[7],c=t[8],d=t[9],f=t[10],v=t[11],m=t[12],p=t[13],h=t[14],g=t[15];return e[0]=s*(f*g-v*h)-d*(u*g-l*h)+p*(u*v-l*f),e[1]=-(r*(f*g-v*h)-d*(a*g-i*h)+p*(a*v-i*f)),e[2]=r*(u*g-l*h)-s*(a*g-i*h)+p*(a*l-i*u),e[3]=-(r*(u*v-l*f)-s*(a*v-i*f)+d*(a*l-i*u)),e[4]=-(o*(f*g-v*h)-c*(u*g-l*h)+m*(u*v-l*f)),e[5]=n*(f*g-v*h)-c*(a*g-i*h)+m*(a*v-i*f),e[6]=-(n*(u*g-l*h)-o*(a*g-i*h)+m*(a*l-i*u)),e[7]=n*(u*v-l*f)-o*(a*v-i*f)+c*(a*l-i*u),e[8]=o*(d*g-v*p)-c*(s*g-l*p)+m*(s*v-l*d),e[9]=-(n*(d*g-v*p)-c*(r*g-i*p)+m*(r*v-i*d)),e[10]=n*(s*g-l*p)-o*(r*g-i*p)+m*(r*l-i*s),e[11]=-(n*(s*v-l*d)-o*(r*v-i*d)+c*(r*l-i*s)),e[12]=-(o*(d*h-f*p)-c*(s*h-u*p)+m*(s*f-u*d)),e[13]=n*(d*h-f*p)-c*(r*h-a*p)+m*(r*f-a*d),e[14]=-(n*(s*h-u*p)-o*(r*h-a*p)+m*(r*u-a*s)),e[15]=n*(s*f-u*d)-o*(r*f-a*d)+c*(r*u-a*s),e}function v(e){var t=e[0],n=e[1],r=e[2],a=e[3],i=e[4],o=e[5],s=e[6],u=e[7],l=e[8],c=e[9],d=e[10],f=e[11],v=e[12],m=e[13],p=e[14],h=e[15];return(t*o-n*i)*(d*h-f*p)-(t*s-r*i)*(c*h-f*m)+(t*u-a*i)*(c*p-d*m)+(n*s-r*o)*(l*h-f*v)-(n*u-a*o)*(l*p-d*v)+(r*u-a*s)*(l*m-c*v)}function m(e,t,n){var r=t[0],a=t[1],i=t[2],o=t[3],s=t[4],u=t[5],l=t[6],c=t[7],d=t[8],f=t[9],v=t[10],m=t[11],p=t[12],h=t[13],g=t[14],A=t[15],y=n[0],S=n[1],b=n[2],w=n[3];return e[0]=y*r+S*s+b*d+w*p,e[1]=y*a+S*u+b*f+w*h,e[2]=y*i+S*l+b*v+w*g,e[3]=y*o+S*c+b*m+w*A,y=n[4],S=n[5],b=n[6],w=n[7],e[4]=y*r+S*s+b*d+w*p,e[5]=y*a+S*u+b*f+w*h,e[6]=y*i+S*l+b*v+w*g,e[7]=y*o+S*c+b*m+w*A,y=n[8],S=n[9],b=n[10],w=n[11],e[8]=y*r+S*s+b*d+w*p,e[9]=y*a+S*u+b*f+w*h,e[10]=y*i+S*l+b*v+w*g,e[11]=y*o+S*c+b*m+w*A,y=n[12],S=n[13],b=n[14],w=n[15],e[12]=y*r+S*s+b*d+w*p,e[13]=y*a+S*u+b*f+w*h,e[14]=y*i+S*l+b*v+w*g,e[15]=y*o+S*c+b*m+w*A,e}function p(e,t,n){var r,a,i,o,s,u,l,c,d,f,v,m,p=n[0],h=n[1],g=n[2];return t===e?(e[12]=t[0]*p+t[4]*h+t[8]*g+t[12],e[13]=t[1]*p+t[5]*h+t[9]*g+t[13],e[14]=t[2]*p+t[6]*h+t[10]*g+t[14],e[15]=t[3]*p+t[7]*h+t[11]*g+t[15]):(r=t[0],a=t[1],i=t[2],o=t[3],s=t[4],u=t[5],l=t[6],c=t[7],d=t[8],f=t[9],v=t[10],m=t[11],e[0]=r,e[1]=a,e[2]=i,e[3]=o,e[4]=s,e[5]=u,e[6]=l,e[7]=c,e[8]=d,e[9]=f,e[10]=v,e[11]=m,e[12]=r*p+s*h+d*g+t[12],e[13]=a*p+u*h+f*g+t[13],e[14]=i*p+l*h+v*g+t[14],e[15]=o*p+c*h+m*g+t[15]),e}function h(e,t,n){var r=n[0],a=n[1],i=n[2];return e[0]=t[0]*r,e[1]=t[1]*r,e[2]=t[2]*r,e[3]=t[3]*r,e[4]=t[4]*a,e[5]=t[5]*a,e[6]=t[6]*a,e[7]=t[7]*a,e[8]=t[8]*i,e[9]=t[9]*i,e[10]=t[10]*i,e[11]=t[11]*i,e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}function g(e,t,n,a){var i,o,s,u,l,c,d,f,v,m,p,h,g,A,y,S,b,w,I,E,C,D,_,M,O=a[0],P=a[1],T=a[2],x=Math.hypot(O,P,T);return x0?(n[0]=2*(u*s+d*a+l*o-c*i)/f,n[1]=2*(l*s+d*i+c*a-u*o)/f,n[2]=2*(c*s+d*o+u*i-l*a)/f):(n[0]=2*(u*s+d*a+l*o-c*i),n[1]=2*(l*s+d*i+c*a-u*o),n[2]=2*(c*s+d*o+u*i-l*a)),_(e,t,n),e}function O(e,t){return e[0]=t[12],e[1]=t[13],e[2]=t[14],e}function P(e,t){var n=t[0],r=t[1],a=t[2],i=t[4],o=t[5],s=t[6],u=t[8],l=t[9],c=t[10];return e[0]=Math.hypot(n,r,a),e[1]=Math.hypot(i,o,s),e[2]=Math.hypot(u,l,c),e}function T(e,t){var n=new r.WT(3);P(n,t);var a=1/n[0],i=1/n[1],o=1/n[2],s=t[0]*a,u=t[1]*i,l=t[2]*o,c=t[4]*a,d=t[5]*i,f=t[6]*o,v=t[8]*a,m=t[9]*i,p=t[10]*o,h=s+d+p,g=0;return h>0?(g=2*Math.sqrt(h+1),e[3]=.25*g,e[0]=(f-m)/g,e[1]=(v-l)/g,e[2]=(u-c)/g):s>d&&s>p?(g=2*Math.sqrt(1+s-d-p),e[3]=(f-m)/g,e[0]=.25*g,e[1]=(u+c)/g,e[2]=(v+l)/g):d>p?(g=2*Math.sqrt(1+d-s-p),e[3]=(v-l)/g,e[0]=(u+c)/g,e[1]=.25*g,e[2]=(f+m)/g):(g=2*Math.sqrt(1+p-s-d),e[3]=(u-c)/g,e[0]=(v+l)/g,e[1]=(f+m)/g,e[2]=.25*g),e}function x(e,t,n,r){var a=t[0],i=t[1],o=t[2],s=t[3],u=a+a,l=i+i,c=o+o,d=a*u,f=a*l,v=a*c,m=i*l,p=i*c,h=o*c,g=s*u,A=s*l,y=s*c,S=r[0],b=r[1],w=r[2];return e[0]=(1-(m+h))*S,e[1]=(f+y)*S,e[2]=(v-A)*S,e[3]=0,e[4]=(f-y)*b,e[5]=(1-(d+h))*b,e[6]=(p+g)*b,e[7]=0,e[8]=(v+A)*w,e[9]=(p-g)*w,e[10]=(1-(d+m))*w,e[11]=0,e[12]=n[0],e[13]=n[1],e[14]=n[2],e[15]=1,e}function R(e,t,n,r,a){var i=t[0],o=t[1],s=t[2],u=t[3],l=i+i,c=o+o,d=s+s,f=i*l,v=i*c,m=i*d,p=o*c,h=o*d,g=s*d,A=u*l,y=u*c,S=u*d,b=r[0],w=r[1],I=r[2],E=a[0],C=a[1],D=a[2],_=(1-(p+g))*b,M=(v+S)*b,O=(m-y)*b,P=(v-S)*w,T=(1-(f+g))*w,x=(h+A)*w,R=(m+y)*I,L=(h-A)*I,k=(1-(f+p))*I;return e[0]=_,e[1]=M,e[2]=O,e[3]=0,e[4]=P,e[5]=T,e[6]=x,e[7]=0,e[8]=R,e[9]=L,e[10]=k,e[11]=0,e[12]=n[0]+E-(_*E+P*C+R*D),e[13]=n[1]+C-(M*E+T*C+L*D),e[14]=n[2]+D-(O*E+x*C+k*D),e[15]=1,e}function L(e,t){var n=t[0],r=t[1],a=t[2],i=t[3],o=n+n,s=r+r,u=a+a,l=n*o,c=r*o,d=r*s,f=a*o,v=a*s,m=a*u,p=i*o,h=i*s,g=i*u;return e[0]=1-d-m,e[1]=c+g,e[2]=f-h,e[3]=0,e[4]=c-g,e[5]=1-l-m,e[6]=v+p,e[7]=0,e[8]=f+h,e[9]=v-p,e[10]=1-l-d,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function k(e,t,n,r,a,i,o){var s=1/(n-t),u=1/(a-r),l=1/(i-o);return e[0]=2*i*s,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=2*i*u,e[6]=0,e[7]=0,e[8]=(n+t)*s,e[9]=(a+r)*u,e[10]=(o+i)*l,e[11]=-1,e[12]=0,e[13]=0,e[14]=o*i*2*l,e[15]=0,e}function N(e,t,n,r,a){var i,o=1/Math.tan(t/2);return e[0]=o/n,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=o,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=-1,e[12]=0,e[13]=0,e[15]=0,null!=a&&a!==1/0?(i=1/(r-a),e[10]=(a+r)*i,e[14]=2*a*r*i):(e[10]=-1,e[14]=-2*r),e}var F=N;function B(e,t,n,r,a){var i,o=1/Math.tan(t/2);return e[0]=o/n,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=o,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=-1,e[12]=0,e[13]=0,e[15]=0,null!=a&&a!==1/0?(i=1/(r-a),e[10]=a*i,e[14]=a*r*i):(e[10]=-1,e[14]=-r),e}function U(e,t,n,r){var a=Math.tan(t.upDegrees*Math.PI/180),i=Math.tan(t.downDegrees*Math.PI/180),o=Math.tan(t.leftDegrees*Math.PI/180),s=Math.tan(t.rightDegrees*Math.PI/180),u=2/(o+s),l=2/(a+i);return e[0]=u,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=l,e[6]=0,e[7]=0,e[8]=-(o-s)*u*.5,e[9]=(a-i)*l*.5,e[10]=r/(n-r),e[11]=-1,e[12]=0,e[13]=0,e[14]=r*n/(n-r),e[15]=0,e}function V(e,t,n,r,a,i,o){var s=1/(t-n),u=1/(r-a),l=1/(i-o);return e[0]=-2*s,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*u,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=2*l,e[11]=0,e[12]=(t+n)*s,e[13]=(a+r)*u,e[14]=(o+i)*l,e[15]=1,e}var j=V;function G(e,t,n,r,a,i,o){var s=1/(t-n),u=1/(r-a),l=1/(i-o);return e[0]=-2*s,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*u,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=l,e[11]=0,e[12]=(t+n)*s,e[13]=(a+r)*u,e[14]=i*l,e[15]=1,e}function H(e,t,n,a){var i,o,s,u,c,d,f,v,m,p,h=t[0],g=t[1],A=t[2],y=a[0],S=a[1],b=a[2],w=n[0],I=n[1],E=n[2];return Math.abs(h-w)0&&(c*=v=1/Math.sqrt(v),d*=v,f*=v);var m=u*f-l*d,p=l*c-s*f,h=s*d-u*c;return(v=m*m+p*p+h*h)>0&&(m*=v=1/Math.sqrt(v),p*=v,h*=v),e[0]=m,e[1]=p,e[2]=h,e[3]=0,e[4]=d*h-f*p,e[5]=f*m-c*h,e[6]=c*p-d*m,e[7]=0,e[8]=c,e[9]=d,e[10]=f,e[11]=0,e[12]=a,e[13]=i,e[14]=o,e[15]=1,e}function q(e){return"mat4("+e[0]+", "+e[1]+", "+e[2]+", "+e[3]+", "+e[4]+", "+e[5]+", "+e[6]+", "+e[7]+", "+e[8]+", "+e[9]+", "+e[10]+", "+e[11]+", "+e[12]+", "+e[13]+", "+e[14]+", "+e[15]+")"}function z(e){return Math.hypot(e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8],e[9],e[10],e[11],e[12],e[13],e[14],e[15])}function W(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e[3]=t[3]+n[3],e[4]=t[4]+n[4],e[5]=t[5]+n[5],e[6]=t[6]+n[6],e[7]=t[7]+n[7],e[8]=t[8]+n[8],e[9]=t[9]+n[9],e[10]=t[10]+n[10],e[11]=t[11]+n[11],e[12]=t[12]+n[12],e[13]=t[13]+n[13],e[14]=t[14]+n[14],e[15]=t[15]+n[15],e}function Y(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e[2]=t[2]-n[2],e[3]=t[3]-n[3],e[4]=t[4]-n[4],e[5]=t[5]-n[5],e[6]=t[6]-n[6],e[7]=t[7]-n[7],e[8]=t[8]-n[8],e[9]=t[9]-n[9],e[10]=t[10]-n[10],e[11]=t[11]-n[11],e[12]=t[12]-n[12],e[13]=t[13]-n[13],e[14]=t[14]-n[14],e[15]=t[15]-n[15],e}function Z(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e[3]=t[3]*n,e[4]=t[4]*n,e[5]=t[5]*n,e[6]=t[6]*n,e[7]=t[7]*n,e[8]=t[8]*n,e[9]=t[9]*n,e[10]=t[10]*n,e[11]=t[11]*n,e[12]=t[12]*n,e[13]=t[13]*n,e[14]=t[14]*n,e[15]=t[15]*n,e}function K(e,t,n,r){return e[0]=t[0]+n[0]*r,e[1]=t[1]+n[1]*r,e[2]=t[2]+n[2]*r,e[3]=t[3]+n[3]*r,e[4]=t[4]+n[4]*r,e[5]=t[5]+n[5]*r,e[6]=t[6]+n[6]*r,e[7]=t[7]+n[7]*r,e[8]=t[8]+n[8]*r,e[9]=t[9]+n[9]*r,e[10]=t[10]+n[10]*r,e[11]=t[11]+n[11]*r,e[12]=t[12]+n[12]*r,e[13]=t[13]+n[13]*r,e[14]=t[14]+n[14]*r,e[15]=t[15]+n[15]*r,e}function X(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]&&e[4]===t[4]&&e[5]===t[5]&&e[6]===t[6]&&e[7]===t[7]&&e[8]===t[8]&&e[9]===t[9]&&e[10]===t[10]&&e[11]===t[11]&&e[12]===t[12]&&e[13]===t[13]&&e[14]===t[14]&&e[15]===t[15]}function $(e,t){var n=e[0],a=e[1],i=e[2],o=e[3],s=e[4],u=e[5],l=e[6],c=e[7],d=e[8],f=e[9],v=e[10],m=e[11],p=e[12],h=e[13],g=e[14],A=e[15],y=t[0],S=t[1],b=t[2],w=t[3],I=t[4],E=t[5],C=t[6],D=t[7],_=t[8],M=t[9],O=t[10],P=t[11],T=t[12],x=t[13],R=t[14],L=t[15];return Math.abs(n-y)<=r.Ib*Math.max(1,Math.abs(n),Math.abs(y))&&Math.abs(a-S)<=r.Ib*Math.max(1,Math.abs(a),Math.abs(S))&&Math.abs(i-b)<=r.Ib*Math.max(1,Math.abs(i),Math.abs(b))&&Math.abs(o-w)<=r.Ib*Math.max(1,Math.abs(o),Math.abs(w))&&Math.abs(s-I)<=r.Ib*Math.max(1,Math.abs(s),Math.abs(I))&&Math.abs(u-E)<=r.Ib*Math.max(1,Math.abs(u),Math.abs(E))&&Math.abs(l-C)<=r.Ib*Math.max(1,Math.abs(l),Math.abs(C))&&Math.abs(c-D)<=r.Ib*Math.max(1,Math.abs(c),Math.abs(D))&&Math.abs(d-_)<=r.Ib*Math.max(1,Math.abs(d),Math.abs(_))&&Math.abs(f-M)<=r.Ib*Math.max(1,Math.abs(f),Math.abs(M))&&Math.abs(v-O)<=r.Ib*Math.max(1,Math.abs(v),Math.abs(O))&&Math.abs(m-P)<=r.Ib*Math.max(1,Math.abs(m),Math.abs(P))&&Math.abs(p-T)<=r.Ib*Math.max(1,Math.abs(p),Math.abs(T))&&Math.abs(h-x)<=r.Ib*Math.max(1,Math.abs(h),Math.abs(x))&&Math.abs(g-R)<=r.Ib*Math.max(1,Math.abs(g),Math.abs(R))&&Math.abs(A-L)<=r.Ib*Math.max(1,Math.abs(A),Math.abs(L))}var J=m,ee=Y},48530:function(e,t,n){"use strict";n.d(t,{Bh:function(){return l},Jp:function(){return c},Kx:function(){return f},Ue:function(){return s},al:function(){return y},yY:function(){return u}});var r=n(82451),a=n(81911),i=n(6807),o=n(21330);function s(){var e=new r.WT(4);return r.WT!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e[3]=1,e}function u(e,t,n){n*=.5;var r=Math.sin(n);return e[0]=r*t[0],e[1]=r*t[1],e[2]=r*t[2],e[3]=Math.cos(n),e}function l(e,t){var n=2*Math.acos(t[3]),a=Math.sin(n/2);return a>r.Ib?(e[0]=t[0]/a,e[1]=t[1]/a,e[2]=t[2]/a):(e[0]=1,e[1]=0,e[2]=0),n}function c(e,t,n){var r=t[0],a=t[1],i=t[2],o=t[3],s=n[0],u=n[1],l=n[2],c=n[3];return e[0]=r*c+o*s+a*l-i*u,e[1]=a*c+o*u+i*s-r*l,e[2]=i*c+o*l+r*u-a*s,e[3]=o*c-r*s-a*u-i*l,e}function d(e,t,n,a){var i,o,s,u,l,c=t[0],d=t[1],f=t[2],v=t[3],m=n[0],p=n[1],h=n[2],g=n[3];return(o=c*m+d*p+f*h+v*g)<0&&(o=-o,m=-m,p=-p,h=-h,g=-g),1-o>r.Ib?(i=Math.acos(o),s=Math.sin(i),u=Math.sin((1-a)*i)/s,l=Math.sin(a*i)/s):(u=1-a,l=a),e[0]=u*c+l*m,e[1]=u*d+l*p,e[2]=u*f+l*h,e[3]=u*v+l*g,e}function f(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e[3]=t[3],e}o.clone;var v,m,p,h,g,A,y=o.fromValues,S=(o.copy,o.set,o.add,o.scale,o.dot,o.lerp,o.length,o.squaredLength,o.normalize);o.exactEquals,o.equals,v=i.create(),m=i.fromValues(1,0,0),p=i.fromValues(0,1,0),h=s(),g=s(),A=a.create()},91055:function(e,t,n){"use strict";n.d(t,{$X:function(){return l},AK:function(){return p},EU:function(){return h},Fv:function(){return m},IH:function(){return u},TE:function(){return f},TK:function(){return y},Ue:function(){return a},al:function(){return o},bA:function(){return c},d9:function(){return i},kE:function(){return v},lu:function(){return A},od:function(){return d},t8:function(){return s}});var r=n(82451);function a(){var e=new r.WT(2);return r.WT!=Float32Array&&(e[0]=0,e[1]=0),e}function i(e){var t=new r.WT(2);return t[0]=e[0],t[1]=e[1],t}function o(e,t){var n=new r.WT(2);return n[0]=e,n[1]=t,n}function s(e,t,n){return e[0]=t,e[1]=n,e}function u(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e}function l(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e}function c(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e}function d(e,t,n,r){return e[0]=t[0]+n[0]*r,e[1]=t[1]+n[1]*r,e}function f(e,t){var n=t[0]-e[0],r=t[1]-e[1];return Math.hypot(n,r)}function v(e){var t=e[0],n=e[1];return Math.hypot(t,n)}function m(e,t){var n=t[0],r=t[1],a=n*n+r*r;return a>0&&(a=1/Math.sqrt(a)),e[0]=t[0]*a,e[1]=t[1]*a,e}function p(e,t){return e[0]*t[0]+e[1]*t[1]}function h(e,t){var n=e[0],r=e[1],a=t[0],i=t[1],o=Math.sqrt(n*n+r*r)*Math.sqrt(a*a+i*i),s=o&&(n*a+r*i)/o;return Math.acos(Math.min(Math.max(s,-1),1))}var g,A=l,y=f;g=a()},6807:function(e,t,n){"use strict";n.r(t),n.d(t,{add:function(){return c},angle:function(){return U},bezier:function(){return T},ceil:function(){return m},clone:function(){return i},copy:function(){return u},create:function(){return a},cross:function(){return M},dist:function(){return Y},distance:function(){return b},div:function(){return W},divide:function(){return v},dot:function(){return _},equals:function(){return H},exactEquals:function(){return G},floor:function(){return p},forEach:function(){return $},fromValues:function(){return s},hermite:function(){return P},inverse:function(){return C},len:function(){return K},length:function(){return o},lerp:function(){return O},max:function(){return g},min:function(){return h},mul:function(){return z},multiply:function(){return f},negate:function(){return E},normalize:function(){return D},random:function(){return x},rotateX:function(){return N},rotateY:function(){return F},rotateZ:function(){return B},round:function(){return A},scale:function(){return y},scaleAndAdd:function(){return S},set:function(){return l},sqrDist:function(){return Z},sqrLen:function(){return X},squaredDistance:function(){return w},squaredLength:function(){return I},str:function(){return j},sub:function(){return q},subtract:function(){return d},transformMat3:function(){return L},transformMat4:function(){return R},transformQuat:function(){return k},zero:function(){return V}});var r=n(82451);function a(){var e=new r.WT(3);return r.WT!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}function i(e){var t=new r.WT(3);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function o(e){var t=e[0],n=e[1],r=e[2];return Math.hypot(t,n,r)}function s(e,t,n){var a=new r.WT(3);return a[0]=e,a[1]=t,a[2]=n,a}function u(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function l(e,t,n,r){return e[0]=t,e[1]=n,e[2]=r,e}function c(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e}function d(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e[2]=t[2]-n[2],e}function f(e,t,n){return e[0]=t[0]*n[0],e[1]=t[1]*n[1],e[2]=t[2]*n[2],e}function v(e,t,n){return e[0]=t[0]/n[0],e[1]=t[1]/n[1],e[2]=t[2]/n[2],e}function m(e,t){return e[0]=Math.ceil(t[0]),e[1]=Math.ceil(t[1]),e[2]=Math.ceil(t[2]),e}function p(e,t){return e[0]=Math.floor(t[0]),e[1]=Math.floor(t[1]),e[2]=Math.floor(t[2]),e}function h(e,t,n){return e[0]=Math.min(t[0],n[0]),e[1]=Math.min(t[1],n[1]),e[2]=Math.min(t[2],n[2]),e}function g(e,t,n){return e[0]=Math.max(t[0],n[0]),e[1]=Math.max(t[1],n[1]),e[2]=Math.max(t[2],n[2]),e}function A(e,t){return e[0]=Math.round(t[0]),e[1]=Math.round(t[1]),e[2]=Math.round(t[2]),e}function y(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e}function S(e,t,n,r){return e[0]=t[0]+n[0]*r,e[1]=t[1]+n[1]*r,e[2]=t[2]+n[2]*r,e}function b(e,t){var n=t[0]-e[0],r=t[1]-e[1],a=t[2]-e[2];return Math.hypot(n,r,a)}function w(e,t){var n=t[0]-e[0],r=t[1]-e[1],a=t[2]-e[2];return n*n+r*r+a*a}function I(e){var t=e[0],n=e[1],r=e[2];return t*t+n*n+r*r}function E(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e}function C(e,t){return e[0]=1/t[0],e[1]=1/t[1],e[2]=1/t[2],e}function D(e,t){var n=t[0],r=t[1],a=t[2],i=n*n+r*r+a*a;return i>0&&(i=1/Math.sqrt(i)),e[0]=t[0]*i,e[1]=t[1]*i,e[2]=t[2]*i,e}function _(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function M(e,t,n){var r=t[0],a=t[1],i=t[2],o=n[0],s=n[1],u=n[2];return e[0]=a*u-i*s,e[1]=i*o-r*u,e[2]=r*s-a*o,e}function O(e,t,n,r){var a=t[0],i=t[1],o=t[2];return e[0]=a+r*(n[0]-a),e[1]=i+r*(n[1]-i),e[2]=o+r*(n[2]-o),e}function P(e,t,n,r,a,i){var o=i*i,s=o*(2*i-3)+1,u=o*(i-2)+i,l=o*(i-1),c=o*(3-2*i);return e[0]=t[0]*s+n[0]*u+r[0]*l+a[0]*c,e[1]=t[1]*s+n[1]*u+r[1]*l+a[1]*c,e[2]=t[2]*s+n[2]*u+r[2]*l+a[2]*c,e}function T(e,t,n,r,a,i){var o=1-i,s=o*o,u=i*i,l=s*o,c=3*i*s,d=3*u*o,f=u*i;return e[0]=t[0]*l+n[0]*c+r[0]*d+a[0]*f,e[1]=t[1]*l+n[1]*c+r[1]*d+a[1]*f,e[2]=t[2]*l+n[2]*c+r[2]*d+a[2]*f,e}function x(e,t){t=t||1;var n=2*r.FD()*Math.PI,a=2*r.FD()-1,i=Math.sqrt(1-a*a)*t;return e[0]=Math.cos(n)*i,e[1]=Math.sin(n)*i,e[2]=a*t,e}function R(e,t,n){var r=t[0],a=t[1],i=t[2],o=n[3]*r+n[7]*a+n[11]*i+n[15];return o=o||1,e[0]=(n[0]*r+n[4]*a+n[8]*i+n[12])/o,e[1]=(n[1]*r+n[5]*a+n[9]*i+n[13])/o,e[2]=(n[2]*r+n[6]*a+n[10]*i+n[14])/o,e}function L(e,t,n){var r=t[0],a=t[1],i=t[2];return e[0]=r*n[0]+a*n[3]+i*n[6],e[1]=r*n[1]+a*n[4]+i*n[7],e[2]=r*n[2]+a*n[5]+i*n[8],e}function k(e,t,n){var r=n[0],a=n[1],i=n[2],o=n[3],s=t[0],u=t[1],l=t[2],c=a*l-i*u,d=i*s-r*l,f=r*u-a*s,v=a*f-i*d,m=i*c-r*f,p=r*d-a*c,h=2*o;return c*=h,d*=h,f*=h,v*=2,m*=2,p*=2,e[0]=s+c+v,e[1]=u+d+m,e[2]=l+f+p,e}function N(e,t,n,r){var a=[],i=[];return a[0]=t[0]-n[0],a[1]=t[1]-n[1],a[2]=t[2]-n[2],i[0]=a[0],i[1]=a[1]*Math.cos(r)-a[2]*Math.sin(r),i[2]=a[1]*Math.sin(r)+a[2]*Math.cos(r),e[0]=i[0]+n[0],e[1]=i[1]+n[1],e[2]=i[2]+n[2],e}function F(e,t,n,r){var a=[],i=[];return a[0]=t[0]-n[0],a[1]=t[1]-n[1],a[2]=t[2]-n[2],i[0]=a[2]*Math.sin(r)+a[0]*Math.cos(r),i[1]=a[1],i[2]=a[2]*Math.cos(r)-a[0]*Math.sin(r),e[0]=i[0]+n[0],e[1]=i[1]+n[1],e[2]=i[2]+n[2],e}function B(e,t,n,r){var a=[],i=[];return a[0]=t[0]-n[0],a[1]=t[1]-n[1],a[2]=t[2]-n[2],i[0]=a[0]*Math.cos(r)-a[1]*Math.sin(r),i[1]=a[0]*Math.sin(r)+a[1]*Math.cos(r),i[2]=a[2],e[0]=i[0]+n[0],e[1]=i[1]+n[1],e[2]=i[2]+n[2],e}function U(e,t){var n=e[0],r=e[1],a=e[2],i=t[0],o=t[1],s=t[2],u=Math.sqrt(n*n+r*r+a*a)*Math.sqrt(i*i+o*o+s*s),l=u&&_(e,t)/u;return Math.acos(Math.min(Math.max(l,-1),1))}function V(e){return e[0]=0,e[1]=0,e[2]=0,e}function j(e){return"vec3("+e[0]+", "+e[1]+", "+e[2]+")"}function G(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]}function H(e,t){var n=e[0],a=e[1],i=e[2],o=t[0],s=t[1],u=t[2];return Math.abs(n-o)<=r.Ib*Math.max(1,Math.abs(n),Math.abs(o))&&Math.abs(a-s)<=r.Ib*Math.max(1,Math.abs(a),Math.abs(s))&&Math.abs(i-u)<=r.Ib*Math.max(1,Math.abs(i),Math.abs(u))}var Q,q=d,z=f,W=v,Y=b,Z=w,K=o,X=I,$=(Q=a(),function(e,t,n,r,a,i){var o,s;for(t||(t=3),n||(n=0),s=r?Math.min(r*t+n,e.length):e.length,o=n;o0&&(o=1/Math.sqrt(o)),e[0]=n*o,e[1]=r*o,e[2]=a*o,e[3]=i*o,e}function _(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]*t[3]}function M(e,t,n,r){var a=n[0]*r[1]-n[1]*r[0],i=n[0]*r[2]-n[2]*r[0],o=n[0]*r[3]-n[3]*r[0],s=n[1]*r[2]-n[2]*r[1],u=n[1]*r[3]-n[3]*r[1],l=n[2]*r[3]-n[3]*r[2],c=t[0],d=t[1],f=t[2],v=t[3];return e[0]=d*l-f*u+v*s,e[1]=-c*l+f*o-v*i,e[2]=c*u-d*o+v*a,e[3]=-c*s+d*i-f*a,e}function O(e,t,n,r){var a=t[0],i=t[1],o=t[2],s=t[3];return e[0]=a+r*(n[0]-a),e[1]=i+r*(n[1]-i),e[2]=o+r*(n[2]-o),e[3]=s+r*(n[3]-s),e}function P(e,t){var n,a,i,o,s,u;t=t||1;do{s=(n=2*r.FD()-1)*n+(a=2*r.FD()-1)*a}while(s>=1);do{u=(i=2*r.FD()-1)*i+(o=2*r.FD()-1)*o}while(u>=1);var l=Math.sqrt((1-s)/u);return e[0]=t*n,e[1]=t*a,e[2]=t*i*l,e[3]=t*o*l,e}function T(e,t,n){var r=t[0],a=t[1],i=t[2],o=t[3];return e[0]=n[0]*r+n[4]*a+n[8]*i+n[12]*o,e[1]=n[1]*r+n[5]*a+n[9]*i+n[13]*o,e[2]=n[2]*r+n[6]*a+n[10]*i+n[14]*o,e[3]=n[3]*r+n[7]*a+n[11]*i+n[15]*o,e}function x(e,t,n){var r=t[0],a=t[1],i=t[2],o=n[0],s=n[1],u=n[2],l=n[3],c=l*r+s*i-u*a,d=l*a+u*r-o*i,f=l*i+o*a-s*r,v=-o*r-s*a-u*i;return e[0]=c*l+v*-o+d*-u-f*-s,e[1]=d*l+v*-s+f*-o-c*-u,e[2]=f*l+v*-u+c*-s-d*-o,e[3]=t[3],e}function R(e){return e[0]=0,e[1]=0,e[2]=0,e[3]=0,e}function L(e){return"vec4("+e[0]+", "+e[1]+", "+e[2]+", "+e[3]+")"}function k(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]}function N(e,t){var n=e[0],a=e[1],i=e[2],o=e[3],s=t[0],u=t[1],l=t[2],c=t[3];return Math.abs(n-s)<=r.Ib*Math.max(1,Math.abs(n),Math.abs(s))&&Math.abs(a-u)<=r.Ib*Math.max(1,Math.abs(a),Math.abs(u))&&Math.abs(i-l)<=r.Ib*Math.max(1,Math.abs(i),Math.abs(l))&&Math.abs(o-c)<=r.Ib*Math.max(1,Math.abs(o),Math.abs(c))}var F,B=c,U=d,V=f,j=S,G=b,H=w,Q=I,q=(F=a(),function(e,t,n,r,a,i){var o,s;for(t||(t=4),n||(n=0),s=r?Math.min(r*t+n,e.length):e.length,o=n;o|<(?:"[^"]*"['"]*|'[^']*'['"]*|[^'">])+>)/g,a=n(82300),i=Object.create?Object.create(null):{};function o(e,t,n,r,a){var i=t.indexOf("<",r),o=t.slice(r,-1===i?void 0:i);/^\s*$/.test(o)&&(o=" "),(!a&&i>-1&&n+e.length>=0||" "!==o)&&e.push({type:"text",content:o})}e.exports=function(e,t){t||(t={}),t.components||(t.components=i);var n,s=[],u=-1,l=[],c={},d=!1;return e.replace(r,(function(r,i){if(d){if(r!=="")return;d=!1}var f,v="/"!==r.charAt(1),m=0===r.indexOf("\x3c!--"),p=i+r.length,h=e.charAt(p);v&&!m&&(u++,"tag"===(n=a(r)).type&&t.components[n.name]&&(n.type="component",d=!0),n.voidElement||d||!h||"<"===h||o(n.children,e,u,p,t.ignoreWhitespace),c[n.tagName]=n,0===u&&s.push(n),(f=l[u-1])&&f.children.push(n),l[u]=n),(m||!v||n.voidElement)&&(m||u--,!d&&"<"!==h&&h&&o(f=-1===u?s:l[u].children,e,u,p,t.ignoreWhitespace))})),!s.length&&e.length&&o(s,e,0,0,t.ignoreWhitespace),s}},10139:function(e){function t(e,n){switch(n.type){case"text":return e+n.content;case"tag":return e+="<"+n.name+(n.attrs?function(e){var t=[];for(var n in e)t.push(n+'="'+e[n]+'"');return t.length?" "+t.join(" "):""}(n.attrs):"")+(n.voidElement?"/>":">"),n.voidElement?e:e+n.children.reduce(t,"")+""}}e.exports=function(e){return e.reduce((function(e,n){return e+t("",n)}),"")}},47033:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(e,t,n,r){var a=void 0;if(n){var i=new Date;i.setTime(i.getTime()+60*n*1e3),a="; expires="+i.toGMTString()}else a="";r=r?"domain="+r+";":"",document.cookie=e+"="+t+a+";"+r+"path=/"},r=function(e){for(var t=e+"=",n=document.cookie.split(";"),r=0;r0?t:void 0}}},81446:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"path",lookup:function(e){var t=void 0;if("undefined"!=typeof window){var n=window.location.pathname.match(/\/([a-zA-Z-]*)/g);if(n instanceof Array)if("number"==typeof e.lookupFromPathIndex){if("string"!=typeof n[e.lookupFromPathIndex])return;t=n[e.lookupFromPathIndex].replace("/","")}else t=n[0].replace("/","")}return t}}},33796:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"querystring",lookup:function(e){var t=void 0;if("undefined"!=typeof window)for(var n=window.location.search.substring(1).split("&"),r=0;r0)n[r].substring(0,a)===e.lookupQuerystring&&(t=n[r].substring(a+1))}return t}}},72102:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"subdomain",lookup:function(e){var t=void 0;if("undefined"!=typeof window){var n=window.location.href.match(/(?:http[s]*\:\/\/)*(.*?)\.(?=[^\/]*\..{2,5})/gi);n instanceof Array&&(t="number"==typeof e.lookupFromSubdomainIndex?n[e.lookupFromSubdomainIndex].replace("http://","").replace("https://","").replace(".",""):n[0].replace("http://","").replace("https://","").replace(".",""))}return t}}},15180:function(e,t,n){"use strict";var r=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{};v(this,e),this.type="languageDetector",this.detectors={},this.init(t,n)}return r(e,[{key:"init",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};this.services=e,this.options=a.defaults(t,this.options||{},{order:["querystring","cookie","localStorage","navigator","htmlTag"],lookupQuerystring:"lng",lookupCookie:"i18next",lookupLocalStorage:"i18nextLng",caches:["localStorage"],excludeCacheFor:["cimode"],checkWhitelist:!0}),this.options.lookupFromUrlIndex&&(this.options.lookupFromPathIndex=this.options.lookupFromUrlIndex),this.i18nOptions=n,this.addDetector(i.default),this.addDetector(o.default),this.addDetector(s.default),this.addDetector(u.default),this.addDetector(l.default),this.addDetector(c.default),this.addDetector(d.default)}},{key:"addDetector",value:function(e){this.detectors[e.name]=e}},{key:"detect",value:function(e){var t=this;e||(e=this.options.order);var n=[];e.forEach((function(e){if(t.detectors[e]){var r=t.detectors[e].lookup(t.options);r&&"string"==typeof r&&(r=[r]),r&&(n=n.concat(r))}}));var r=void 0;if(n.forEach((function(e){if(!r){var n=t.services.languageUtils.formatLanguageCode(e);t.options.checkWhitelist&&!t.services.languageUtils.isWhitelisted(n)||(r=n)}})),!r){var a=this.i18nOptions.fallbackLng;"string"==typeof a&&(a=[a]),a||(a=[]),r="[object Array]"===Object.prototype.toString.apply(a)?a[0]:a[0]||a.default&&a.default[0]}return r}},{key:"cacheUserLanguage",value:function(e,t){var n=this;t||(t=this.options.caches),t&&(this.options.excludeCacheFor&&this.options.excludeCacheFor.indexOf(e)>-1||t.forEach((function(t){n.detectors[t]&&n.detectors[t].cacheUserLanguage(e,n.options)})))}}]),e}();m.type="languageDetector",t.Z=m},57625:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.defaults=function(e){return r.call(a.call(arguments,1),(function(t){if(t)for(var n in t)void 0===e[n]&&(e[n]=t[n])})),e},t.extend=function(e){return r.call(a.call(arguments,1),(function(t){if(t)for(var n in t)e[n]=t[n]})),e};var n=[],r=n.forEach,a=n.slice},57842:function(e,t,n){var r=n(15180).Z;e.exports=r,e.exports.default=r},43765:function(e){"use strict";var t,n,r=Function.prototype.toString,a="object"==typeof Reflect&&null!==Reflect&&Reflect.apply;if("function"==typeof a&&"function"==typeof Object.defineProperty)try{t=Object.defineProperty({},"length",{get:function(){throw n}}),n={},a((function(){throw 42}),null,t)}catch(e){e!==n&&(a=null)}else a=null;var i=/^\s*class\b/,o=function(e){try{var t=r.call(e);return i.test(t)}catch(e){return!1}},s=Object.prototype.toString,u="function"==typeof Symbol&&!!Symbol.toStringTag,l="object"==typeof document&&void 0===document.all&&void 0!==document.all?document.all:{};e.exports=a?function(e){if(e===l)return!0;if(!e)return!1;if("function"!=typeof e&&"object"!=typeof e)return!1;if("function"==typeof e&&!e.prototype)return!0;try{a(e,null,t)}catch(e){if(e!==n)return!1}return!o(e)}:function(e){if(e===l)return!0;if(!e)return!1;if("function"!=typeof e&&"object"!=typeof e)return!1;if("function"==typeof e&&!e.prototype)return!0;if(u)return function(e){try{return!o(e)&&(r.call(e),!0)}catch(e){return!1}}(e);if(o(e))return!1;var t=s.call(e);return"[object Function]"===t||"[object GeneratorFunction]"===t}},464:function(e,t,n){"use strict";var r=Date.prototype.getDay,a=Object.prototype.toString,i=n(76686)();e.exports=function(e){return"object"==typeof e&&null!==e&&(i?function(e){try{return r.call(e),!0}catch(e){return!1}}(e):"[object Date]"===a.call(e))}},67584:function(e,t,n){"use strict";var r,a,i,o,s=n(47737),u=n(76686)();if(u){r=s("Object.prototype.hasOwnProperty"),a=s("RegExp.prototype.exec"),i={};var l=function(){throw i};o={toString:l,valueOf:l},"symbol"==typeof Symbol.toPrimitive&&(o[Symbol.toPrimitive]=l)}var c=s("Object.prototype.toString"),d=Object.getOwnPropertyDescriptor;e.exports=u?function(e){if(!e||"object"!=typeof e)return!1;var t=d(e,"lastIndex");if(!(t&&r(t,"value")))return!1;try{a(e,o)}catch(e){return e===i}}:function(e){return!(!e||"object"!=typeof e&&"function"!=typeof e)&&"[object RegExp]"===c(e)}},44582:function(e,t,n){"use strict";var r=Object.prototype.toString;if(n(10465)()){var a=Symbol.prototype.toString,i=/^Symbol\(.*\)$/;e.exports=function(e){if("symbol"==typeof e)return!0;if("[object Symbol]"!==r.call(e))return!1;try{return function(e){return"symbol"==typeof e.valueOf()&&i.test(a.call(e))}(e)}catch(e){return!1}}}else e.exports=function(e){return!1}},53875:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return!("undefined"==typeof window||!("ontouchstart"in window||window.DocumentTouch&&"undefined"!=typeof document&&document instanceof window.DocumentTouch))||!("undefined"==typeof navigator||!navigator.maxTouchPoints&&!navigator.msMaxTouchPoints)},e.exports=t.default},10573:function(e,t){"use strict";self.atob.bind(self),self.btoa.bind(self)},71975:function(e,t,n){e=n.nmd(e);var r="__lodash_hash_undefined__",a=9007199254740991,i="[object Arguments]",o="[object Boolean]",s="[object Date]",u="[object Function]",l="[object GeneratorFunction]",c="[object Map]",d="[object Number]",f="[object Object]",v="[object Promise]",m="[object RegExp]",p="[object Set]",h="[object String]",g="[object Symbol]",A="[object WeakMap]",y="[object ArrayBuffer]",S="[object DataView]",b="[object Float32Array]",w="[object Float64Array]",I="[object Int8Array]",E="[object Int16Array]",C="[object Int32Array]",D="[object Uint8Array]",_="[object Uint8ClampedArray]",M="[object Uint16Array]",O="[object Uint32Array]",P=/\w*$/,T=/^\[object .+?Constructor\]$/,x=/^(?:0|[1-9]\d*)$/,R={};R[i]=R["[object Array]"]=R[y]=R[S]=R[o]=R[s]=R[b]=R[w]=R[I]=R[E]=R[C]=R[c]=R[d]=R[f]=R[m]=R[p]=R[h]=R[g]=R[D]=R[_]=R[M]=R[O]=!0,R["[object Error]"]=R[u]=R[A]=!1;var L="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,k="object"==typeof self&&self&&self.Object===Object&&self,N=L||k||Function("return this")(),F=t&&!t.nodeType&&t,B=F&&e&&!e.nodeType&&e,U=B&&B.exports===F;function V(e,t){return e.set(t[0],t[1]),e}function j(e,t){return e.add(t),e}function G(e,t,n,r){var a=-1,i=e?e.length:0;for(r&&i&&(n=e[++a]);++a-1},_e.prototype.set=function(e,t){var n=this.__data__,r=xe(n,e);return r<0?n.push([e,t]):n[r][1]=t,this},Me.prototype.clear=function(){this.__data__={hash:new De,map:new(me||_e),string:new De}},Me.prototype.delete=function(e){return Fe(this,e).delete(e)},Me.prototype.get=function(e){return Fe(this,e).get(e)},Me.prototype.has=function(e){return Fe(this,e).has(e)},Me.prototype.set=function(e,t){return Fe(this,e).set(e,t),this},Oe.prototype.clear=function(){this.__data__=new _e},Oe.prototype.delete=function(e){return this.__data__.delete(e)},Oe.prototype.get=function(e){return this.__data__.get(e)},Oe.prototype.has=function(e){return this.__data__.has(e)},Oe.prototype.set=function(e,t){var n=this.__data__;if(n instanceof _e){var r=n.__data__;if(!me||r.length<199)return r.push([e,t]),this;n=this.__data__=new Me(r)}return n.set(e,t),this};var Ue=ce?q(ce,Object):function(){return[]},Ve=function(e){return te.call(e)};function je(e,t){return!!(t=null==t?a:t)&&("number"==typeof e||x.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=a}(e.length)&&!Ye(e)}var We=de||function(){return!1};function Ye(e){var t=Ze(e)?te.call(e):"";return t==u||t==l}function Ze(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function Ke(e){return ze(e)?Pe(e):function(e){if(!Ge(e))return fe(e);var t=[];for(var n in Object(e))ee.call(e,n)&&"constructor"!=n&&t.push(n);return t}(e)}e.exports=function(e){return Re(e,!0,!0)}},40001:function(e,t,n){var r=/^\s+|\s+$/g,a=/^[-+]0x[0-9a-f]+$/i,i=/^0b[01]+$/i,o=/^0o[0-7]+$/i,s=parseInt,u="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,l="object"==typeof self&&self&&self.Object===Object&&self,c=u||l||Function("return this")(),d=Object.prototype.toString,f=Math.max,v=Math.min,m=function(){return c.Date.now()};function p(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function h(e){if("number"==typeof e)return e;if(function(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&"[object Symbol]"==d.call(e)}(e))return NaN;if(p(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=p(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(r,"");var n=i.test(e);return n||o.test(e)?s(e.slice(2),n?2:8):a.test(e)?NaN:+e}e.exports=function(e,t,n){var r,a,i,o,s,u,l=0,c=!1,d=!1,g=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function A(t){var n=r,i=a;return r=a=void 0,l=t,o=e.apply(i,n)}function y(e){return l=e,s=setTimeout(b,t),c?A(e):o}function S(e){var n=e-u;return void 0===u||n>=t||n<0||d&&e-l>=i}function b(){var e=m();if(S(e))return w(e);s=setTimeout(b,function(e){var n=t-(e-u);return d?v(n,i-(e-l)):n}(e))}function w(e){return s=void 0,g&&r?A(e):(r=a=void 0,o)}function I(){var e=m(),n=S(e);if(r=arguments,a=this,u=e,n){if(void 0===s)return y(u);if(d)return s=setTimeout(b,t),A(u)}return void 0===s&&(s=setTimeout(b,t)),o}return t=h(t)||0,p(n)&&(c=!!n.leading,i=(d="maxWait"in n)?f(h(n.maxWait)||0,t):i,g="trailing"in n?!!n.trailing:g),I.cancel=function(){void 0!==s&&clearTimeout(s),l=0,r=u=a=s=void 0},I.flush=function(){return void 0===s?o:w(m())},I}},65406:function(e,t,n){var r="__lodash_hash_undefined__",a="[object Function]",i="[object GeneratorFunction]",o=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,s=/^\w*$/,u=/^\./,l=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,c=/\\(\\)?/g,d=/^\[object .+?Constructor\]$/,f="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,v="object"==typeof self&&self&&self.Object===Object&&self,m=f||v||Function("return this")();var p,h=Array.prototype,g=Function.prototype,A=Object.prototype,y=m["__core-js_shared__"],S=(p=/[^.]+$/.exec(y&&y.keys&&y.keys.IE_PROTO||""))?"Symbol(src)_1."+p:"",b=g.toString,w=A.hasOwnProperty,I=A.toString,E=RegExp("^"+b.call(w).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),C=m.Symbol,D=h.splice,_=B(m,"Map"),M=B(Object,"create"),O=C?C.prototype:void 0,P=O?O.toString:void 0;function T(e){var t=-1,n=e?e.length:0;for(this.clear();++t-1},x.prototype.set=function(e,t){var n=this.__data__,r=L(n,e);return r<0?n.push([e,t]):n[r][1]=t,this},R.prototype.clear=function(){this.__data__={hash:new T,map:new(_||x),string:new T}},R.prototype.delete=function(e){return F(this,e).delete(e)},R.prototype.get=function(e){return F(this,e).get(e)},R.prototype.has=function(e){return F(this,e).has(e)},R.prototype.set=function(e,t){return F(this,e).set(e,t),this};var U=j((function(e){var t;e=null==(t=e)?"":function(e){if("string"==typeof e)return e;if(Q(e))return P?P.call(e):"";var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}(t);var n=[];return u.test(e)&&n.push(""),e.replace(l,(function(e,t,r,a){n.push(r?a.replace(c,"$1"):t||e)})),n}));function V(e){if("string"==typeof e||Q(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function j(e,t){if("function"!=typeof e||t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var r=arguments,a=t?t.apply(this,r):r[0],i=n.cache;if(i.has(a))return i.get(a);var o=e.apply(this,r);return n.cache=i.set(a,o),o};return n.cache=new(j.Cache||R),n}j.Cache=R;var G=Array.isArray;function H(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function Q(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&"[object Symbol]"==I.call(e)}e.exports=function(e,t,n){var r=null==e?void 0:k(e,t);return void 0===r?n:r}},68652:function(e,t,n){e=n.nmd(e);var r="__lodash_hash_undefined__",a=9007199254740991,i="[object Arguments]",o="[object Array]",s="[object Boolean]",u="[object Date]",l="[object Error]",c="[object Function]",d="[object Map]",f="[object Number]",v="[object Object]",m="[object Promise]",p="[object RegExp]",h="[object Set]",g="[object String]",A="[object Symbol]",y="[object WeakMap]",S="[object ArrayBuffer]",b="[object DataView]",w=/^\[object .+?Constructor\]$/,I=/^(?:0|[1-9]\d*)$/,E={};E["[object Float32Array]"]=E["[object Float64Array]"]=E["[object Int8Array]"]=E["[object Int16Array]"]=E["[object Int32Array]"]=E["[object Uint8Array]"]=E["[object Uint8ClampedArray]"]=E["[object Uint16Array]"]=E["[object Uint32Array]"]=!0,E[i]=E[o]=E[S]=E[s]=E[b]=E[u]=E[l]=E[c]=E[d]=E[f]=E[v]=E[p]=E[h]=E[g]=E[y]=!1;var C="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,D="object"==typeof self&&self&&self.Object===Object&&self,_=C||D||Function("return this")(),M=t&&!t.nodeType&&t,O=M&&e&&!e.nodeType&&e,P=O&&O.exports===M,T=P&&C.process,x=function(){try{return T&&T.binding&&T.binding("util")}catch(e){}}(),R=x&&x.isTypedArray;function L(e,t){for(var n=-1,r=null==e?0:e.length;++ns))return!1;var l=i.get(e);if(l&&i.get(t))return l==t;var c=-1,d=!0,f=2&n?new be:void 0;for(i.set(e,t),i.set(t,e);++c-1},ye.prototype.set=function(e,t){var n=this.__data__,r=Ee(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this},Se.prototype.clear=function(){this.size=0,this.__data__={hash:new Ae,map:new(oe||ye),string:new Ae}},Se.prototype.delete=function(e){var t=xe(this,e).delete(e);return this.size-=t?1:0,t},Se.prototype.get=function(e){return xe(this,e).get(e)},Se.prototype.has=function(e){return xe(this,e).has(e)},Se.prototype.set=function(e,t){var n=xe(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this},be.prototype.add=be.prototype.push=function(e){return this.__data__.set(e,r),this},be.prototype.has=function(e){return this.__data__.has(e)},we.prototype.clear=function(){this.__data__=new ye,this.size=0},we.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},we.prototype.get=function(e){return this.__data__.get(e)},we.prototype.has=function(e){return this.__data__.has(e)},we.prototype.set=function(e,t){var n=this.__data__;if(n instanceof ye){var r=n.__data__;if(!oe||r.length<199)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new Se(r)}return n.set(e,t),this.size=n.size,this};var Le=ne?function(e){return null==e?[]:(e=Object(e),function(e,t){for(var n=-1,r=null==e?0:e.length,a=0,i=[];++n-1&&e%1==0&&e-1&&e%1==0&&e<=a}function Qe(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function qe(e){return null!=e&&"object"==typeof e}var ze=R?function(e){return function(t){return e(t)}}(R):function(e){return qe(e)&&He(e.length)&&!!E[Ce(e)]};function We(e){return null!=(t=e)&&He(t.length)&&!Ge(t)?Ie(e):Oe(e);var t}e.exports=function(e,t){return _e(e,t)}},32005:function(e,t,n){e=n.nmd(e);var r="__lodash_hash_undefined__",a=9007199254740991,i="[object Arguments]",o="[object Function]",s="[object Object]",u=/^\[object .+?Constructor\]$/,l=/^(?:0|[1-9]\d*)$/,c={};c["[object Float32Array]"]=c["[object Float64Array]"]=c["[object Int8Array]"]=c["[object Int16Array]"]=c["[object Int32Array]"]=c["[object Uint8Array]"]=c["[object Uint8ClampedArray]"]=c["[object Uint16Array]"]=c["[object Uint32Array]"]=!0,c[i]=c["[object Array]"]=c["[object ArrayBuffer]"]=c["[object Boolean]"]=c["[object DataView]"]=c["[object Date]"]=c["[object Error]"]=c[o]=c["[object Map]"]=c["[object Number]"]=c[s]=c["[object RegExp]"]=c["[object Set]"]=c["[object String]"]=c["[object WeakMap]"]=!1;var d="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,f="object"==typeof self&&self&&self.Object===Object&&self,v=d||f||Function("return this")(),m=t&&!t.nodeType&&t,p=m&&e&&!e.nodeType&&e,h=p&&p.exports===m,g=h&&d.process,A=function(){try{var e=p&&p.require&&p.require("util").types;return e||g&&g.binding&&g.binding("util")}catch(e){}}(),y=A&&A.isTypedArray;function S(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}var b,w,I,E=Array.prototype,C=Function.prototype,D=Object.prototype,_=v["__core-js_shared__"],M=C.toString,O=D.hasOwnProperty,P=(b=/[^.]+$/.exec(_&&_.keys&&_.keys.IE_PROTO||""))?"Symbol(src)_1."+b:"",T=D.toString,x=M.call(Object),R=RegExp("^"+M.call(O).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),L=h?v.Buffer:void 0,k=v.Symbol,N=v.Uint8Array,F=L?L.allocUnsafe:void 0,B=(w=Object.getPrototypeOf,I=Object,function(e){return w(I(e))}),U=Object.create,V=D.propertyIsEnumerable,j=E.splice,G=k?k.toStringTag:void 0,H=function(){try{var e=pe(Object,"defineProperty");return e({},"",{}),e}catch(e){}}(),Q=L?L.isBuffer:void 0,q=Math.max,z=Date.now,W=pe(v,"Map"),Y=pe(Object,"create"),Z=function(){function e(){}return function(t){if(!_e(t))return{};if(U)return U(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();function K(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t-1},X.prototype.set=function(e,t){var n=this.__data__,r=re(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this},$.prototype.clear=function(){this.size=0,this.__data__={hash:new K,map:new(W||X),string:new K}},$.prototype.delete=function(e){var t=me(this,e).delete(e);return this.size-=t?1:0,t},$.prototype.get=function(e){return me(this,e).get(e)},$.prototype.has=function(e){return me(this,e).has(e)},$.prototype.set=function(e,t){var n=me(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this},J.prototype.clear=function(){this.__data__=new X,this.size=0},J.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},J.prototype.get=function(e){return this.__data__.get(e)},J.prototype.has=function(e){return this.__data__.has(e)},J.prototype.set=function(e,t){var n=this.__data__;if(n instanceof X){var r=n.__data__;if(!W||r.length<199)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new $(r)}return n.set(e,t),this.size=n.size,this};var ie,oe=function(e,t,n){for(var r=-1,a=Object(e),i=n(e),o=i.length;o--;){var s=i[ie?o:++r];if(!1===t(a[s],s,a))break}return e};function se(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":G&&G in Object(e)?function(e){var t=O.call(e,G),n=e[G];try{e[G]=void 0;var r=!0}catch(e){}var a=T.call(e);r&&(t?e[G]=n:delete e[G]);return a}(e):function(e){return T.call(e)}(e)}function ue(e){return Me(e)&&se(e)==i}function le(e){return!(!_e(e)||function(e){return!!P&&P in e}(e))&&(Ce(e)?R:u).test(function(e){if(null!=e){try{return M.call(e)}catch(e){}try{return e+""}catch(e){}}return""}(e))}function ce(e){if(!_e(e))return function(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t}(e);var t=ge(e),n=[];for(var r in e)("constructor"!=r||!t&&O.call(e,r))&&n.push(r);return n}function de(e,t,n,r,a){e!==t&&oe(t,(function(i,o){if(a||(a=new J),_e(i))!function(e,t,n,r,a,i,o){var u=Ae(e,n),l=Ae(t,n),c=o.get(l);if(c)return void te(e,n,c);var d=i?i(u,l,n+"",e,t,o):void 0,f=void 0===d;if(f){var v=we(l),m=!v&&Ee(l),p=!v&&!m&&Oe(l);d=l,v||m||p?we(u)?d=u:Me(S=u)&&Ie(S)?d=function(e,t){var n=-1,r=e.length;t||(t=Array(r));for(;++n-1&&e%1==0&&e0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(ve);function Se(e,t){return e===t||e!=e&&t!=t}var be=ue(function(){return arguments}())?ue:function(e){return Me(e)&&O.call(e,"callee")&&!V.call(e,"callee")},we=Array.isArray;function Ie(e){return null!=e&&De(e.length)&&!Ce(e)}var Ee=Q||function(){return!1};function Ce(e){if(!_e(e))return!1;var t=se(e);return t==o||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}function De(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=a}function _e(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function Me(e){return null!=e&&"object"==typeof e}var Oe=y?function(e){return function(t){return e(t)}}(y):function(e){return Me(e)&&De(e.length)&&!!c[se(e)]};function Pe(e){return Ie(e)?ee(e,!0):ce(e)}var Te,xe=(Te=function(e,t,n){de(e,t,n)},fe((function(e,t){var n=-1,r=t.length,a=r>1?t[r-1]:void 0,i=r>2?t[2]:void 0;for(a=Te.length>3&&"function"==typeof a?(r--,a):void 0,i&&function(e,t,n){if(!_e(n))return!1;var r=typeof t;return!!("number"==r?Ie(n)&&he(t,n.length):"string"==r&&t in n)&&Se(n[t],e)}(t[0],t[1],i)&&(a=r<3?void 0:a,r=1),e=Object(e);++n=t||n<0||h&&e-m>=c}function b(){var e=a();if(S(e))return w(e);f=setTimeout(b,function(e){var n=t-(e-v);return h?s(n,c-(e-m)):n}(e))}function w(e){return f=void 0,g&&u?A(e):(u=l=void 0,d)}function I(){var e=a(),n=S(e);if(u=arguments,l=this,v=e,n){if(void 0===f)return y(v);if(h)return clearTimeout(f),f=setTimeout(b,t),A(v)}return void 0===f&&(f=setTimeout(b,t)),d}return t=i(t)||0,r(n)&&(p=!!n.leading,c=(h="maxWait"in n)?o(i(n.maxWait)||0,t):c,g="trailing"in n?!!n.trailing:g),I.cancel=function(){void 0!==f&&clearTimeout(f),m=0,u=v=l=f=void 0},I.flush=function(){return void 0===f?d:w(a())},I}},85973:function(e){e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},3387:function(e){e.exports=function(e){return null!=e&&"object"==typeof e}},22945:function(e,t,n){var r=n(94318),a=n(3387);e.exports=function(e){return"symbol"==typeof e||a(e)&&"[object Symbol]"==r(e)}},92891:function(e,t,n){var r;e=n.nmd(e),function(){var a,i="Expected a function",o="__lodash_hash_undefined__",s="__lodash_placeholder__",u=16,l=32,c=64,d=128,f=256,v=1/0,m=9007199254740991,p=NaN,h=4294967295,g=[["ary",d],["bind",1],["bindKey",2],["curry",8],["curryRight",u],["flip",512],["partial",l],["partialRight",c],["rearg",f]],A="[object Arguments]",y="[object Array]",S="[object Boolean]",b="[object Date]",w="[object Error]",I="[object Function]",E="[object GeneratorFunction]",C="[object Map]",D="[object Number]",_="[object Object]",M="[object Promise]",O="[object RegExp]",P="[object Set]",T="[object String]",x="[object Symbol]",R="[object WeakMap]",L="[object ArrayBuffer]",k="[object DataView]",N="[object Float32Array]",F="[object Float64Array]",B="[object Int8Array]",U="[object Int16Array]",V="[object Int32Array]",j="[object Uint8Array]",G="[object Uint8ClampedArray]",H="[object Uint16Array]",Q="[object Uint32Array]",q=/\b__p \+= '';/g,z=/\b(__p \+=) '' \+/g,W=/(__e\(.*?\)|\b__t\)) \+\n'';/g,Y=/&(?:amp|lt|gt|quot|#39);/g,Z=/[&<>"']/g,K=RegExp(Y.source),X=RegExp(Z.source),$=/<%-([\s\S]+?)%>/g,J=/<%([\s\S]+?)%>/g,ee=/<%=([\s\S]+?)%>/g,te=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ne=/^\w*$/,re=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ae=/[\\^$.*+?()[\]{}|]/g,ie=RegExp(ae.source),oe=/^\s+/,se=/\s/,ue=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,le=/\{\n\/\* \[wrapped with (.+)\] \*/,ce=/,? & /,de=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,fe=/[()=,{}\[\]\/\s]/,ve=/\\(\\)?/g,me=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,pe=/\w*$/,he=/^[-+]0x[0-9a-f]+$/i,ge=/^0b[01]+$/i,Ae=/^\[object .+?Constructor\]$/,ye=/^0o[0-7]+$/i,Se=/^(?:0|[1-9]\d*)$/,be=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,we=/($^)/,Ie=/['\n\r\u2028\u2029\\]/g,Ee="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",Ce="\\u2700-\\u27bf",De="a-z\\xdf-\\xf6\\xf8-\\xff",_e="A-Z\\xc0-\\xd6\\xd8-\\xde",Me="\\ufe0e\\ufe0f",Oe="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",Pe="['’]",Te="[\\ud800-\\udfff]",xe="["+Oe+"]",Re="["+Ee+"]",Le="\\d+",ke="[\\u2700-\\u27bf]",Ne="["+De+"]",Fe="[^\\ud800-\\udfff"+Oe+Le+Ce+De+_e+"]",Be="\\ud83c[\\udffb-\\udfff]",Ue="[^\\ud800-\\udfff]",Ve="(?:\\ud83c[\\udde6-\\uddff]){2}",je="[\\ud800-\\udbff][\\udc00-\\udfff]",Ge="["+_e+"]",He="(?:"+Ne+"|"+Fe+")",Qe="(?:"+Ge+"|"+Fe+")",qe="(?:['’](?:d|ll|m|re|s|t|ve))?",ze="(?:['’](?:D|LL|M|RE|S|T|VE))?",We="(?:"+Re+"|"+Be+")"+"?",Ye="[\\ufe0e\\ufe0f]?",Ze=Ye+We+("(?:\\u200d(?:"+[Ue,Ve,je].join("|")+")"+Ye+We+")*"),Ke="(?:"+[ke,Ve,je].join("|")+")"+Ze,Xe="(?:"+[Ue+Re+"?",Re,Ve,je,Te].join("|")+")",$e=RegExp(Pe,"g"),Je=RegExp(Re,"g"),et=RegExp(Be+"(?="+Be+")|"+Xe+Ze,"g"),tt=RegExp([Ge+"?"+Ne+"+"+qe+"(?="+[xe,Ge,"$"].join("|")+")",Qe+"+"+ze+"(?="+[xe,Ge+He,"$"].join("|")+")",Ge+"?"+He+"+"+qe,Ge+"+"+ze,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",Le,Ke].join("|"),"g"),nt=RegExp("[\\u200d\\ud800-\\udfff"+Ee+Me+"]"),rt=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,at=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],it=-1,ot={};ot[N]=ot[F]=ot[B]=ot[U]=ot[V]=ot[j]=ot[G]=ot[H]=ot[Q]=!0,ot[A]=ot[y]=ot[L]=ot[S]=ot[k]=ot[b]=ot[w]=ot[I]=ot[C]=ot[D]=ot[_]=ot[O]=ot[P]=ot[T]=ot[R]=!1;var st={};st[A]=st[y]=st[L]=st[k]=st[S]=st[b]=st[N]=st[F]=st[B]=st[U]=st[V]=st[C]=st[D]=st[_]=st[O]=st[P]=st[T]=st[x]=st[j]=st[G]=st[H]=st[Q]=!0,st[w]=st[I]=st[R]=!1;var ut={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},lt=parseFloat,ct=parseInt,dt="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,ft="object"==typeof self&&self&&self.Object===Object&&self,vt=dt||ft||Function("return this")(),mt=t&&!t.nodeType&&t,pt=mt&&e&&!e.nodeType&&e,ht=pt&&pt.exports===mt,gt=ht&&dt.process,At=function(){try{var e=pt&&pt.require&&pt.require("util").types;return e||gt&>.binding&>.binding("util")}catch(e){}}(),yt=At&&At.isArrayBuffer,St=At&&At.isDate,bt=At&&At.isMap,wt=At&&At.isRegExp,It=At&&At.isSet,Et=At&&At.isTypedArray;function Ct(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}function Dt(e,t,n,r){for(var a=-1,i=null==e?0:e.length;++a-1}function xt(e,t,n){for(var r=-1,a=null==e?0:e.length;++r-1;);return n}function tn(e,t){for(var n=e.length;n--&&jt(t,e[n],0)>-1;);return n}function nn(e,t){for(var n=e.length,r=0;n--;)e[n]===t&&++r;return r}var rn=zt({"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"}),an=zt({"&":"&","<":"<",">":">",'"':""","'":"'"});function on(e){return"\\"+ut[e]}function sn(e){return nt.test(e)}function un(e){var t=-1,n=Array(e.size);return e.forEach((function(e,r){n[++t]=[r,e]})),n}function ln(e,t){return function(n){return e(t(n))}}function cn(e,t){for(var n=-1,r=e.length,a=0,i=[];++n",""":'"',"'":"'"});var gn=function e(t){var n,r=(t=null==t?vt:gn.defaults(vt.Object(),t,gn.pick(vt,at))).Array,se=t.Date,Ee=t.Error,Ce=t.Function,De=t.Math,_e=t.Object,Me=t.RegExp,Oe=t.String,Pe=t.TypeError,Te=r.prototype,xe=Ce.prototype,Re=_e.prototype,Le=t["__core-js_shared__"],ke=xe.toString,Ne=Re.hasOwnProperty,Fe=0,Be=(n=/[^.]+$/.exec(Le&&Le.keys&&Le.keys.IE_PROTO||""))?"Symbol(src)_1."+n:"",Ue=Re.toString,Ve=ke.call(_e),je=vt._,Ge=Me("^"+ke.call(Ne).replace(ae,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),He=ht?t.Buffer:a,Qe=t.Symbol,qe=t.Uint8Array,ze=He?He.allocUnsafe:a,We=ln(_e.getPrototypeOf,_e),Ye=_e.create,Ze=Re.propertyIsEnumerable,Ke=Te.splice,Xe=Qe?Qe.isConcatSpreadable:a,et=Qe?Qe.iterator:a,nt=Qe?Qe.toStringTag:a,ut=function(){try{var e=vi(_e,"defineProperty");return e({},"",{}),e}catch(e){}}(),dt=t.clearTimeout!==vt.clearTimeout&&t.clearTimeout,ft=se&&se.now!==vt.Date.now&&se.now,mt=t.setTimeout!==vt.setTimeout&&t.setTimeout,pt=De.ceil,gt=De.floor,At=_e.getOwnPropertySymbols,Bt=He?He.isBuffer:a,zt=t.isFinite,An=Te.join,yn=ln(_e.keys,_e),Sn=De.max,bn=De.min,wn=se.now,In=t.parseInt,En=De.random,Cn=Te.reverse,Dn=vi(t,"DataView"),_n=vi(t,"Map"),Mn=vi(t,"Promise"),On=vi(t,"Set"),Pn=vi(t,"WeakMap"),Tn=vi(_e,"create"),xn=Pn&&new Pn,Rn={},Ln=Vi(Dn),kn=Vi(_n),Nn=Vi(Mn),Fn=Vi(On),Bn=Vi(Pn),Un=Qe?Qe.prototype:a,Vn=Un?Un.valueOf:a,jn=Un?Un.toString:a;function Gn(e){if(as(e)&&!Wo(e)&&!(e instanceof zn)){if(e instanceof qn)return e;if(Ne.call(e,"__wrapped__"))return ji(e)}return new qn(e)}var Hn=function(){function e(){}return function(t){if(!rs(t))return{};if(Ye)return Ye(t);e.prototype=t;var n=new e;return e.prototype=a,n}}();function Qn(){}function qn(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=a}function zn(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=h,this.__views__=[]}function Wn(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t=t?e:t)),e}function cr(e,t,n,r,i,o){var s,u=1&t,l=2&t,c=4&t;if(n&&(s=i?n(e,r,i,o):n(e)),s!==a)return s;if(!rs(e))return e;var d=Wo(e);if(d){if(s=function(e){var t=e.length,n=new e.constructor(t);t&&"string"==typeof e[0]&&Ne.call(e,"index")&&(n.index=e.index,n.input=e.input);return n}(e),!u)return Ta(e,s)}else{var f=hi(e),v=f==I||f==E;if(Xo(e))return Ca(e,u);if(f==_||f==A||v&&!i){if(s=l||v?{}:Ai(e),!u)return l?function(e,t){return xa(e,pi(e),t)}(e,function(e,t){return e&&xa(t,ks(t),e)}(s,e)):function(e,t){return xa(e,mi(e),t)}(e,or(s,e))}else{if(!st[f])return i?e:{};s=function(e,t,n){var r=e.constructor;switch(t){case L:return Da(e);case S:case b:return new r(+e);case k:return function(e,t){var n=t?Da(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}(e,n);case N:case F:case B:case U:case V:case j:case G:case H:case Q:return _a(e,n);case C:return new r;case D:case T:return new r(e);case O:return function(e){var t=new e.constructor(e.source,pe.exec(e));return t.lastIndex=e.lastIndex,t}(e);case P:return new r;case x:return a=e,Vn?_e(Vn.call(a)):{}}var a}(e,f,u)}}o||(o=new Xn);var m=o.get(e);if(m)return m;o.set(e,s),ls(e)?e.forEach((function(r){s.add(cr(r,t,n,r,e,o))})):is(e)&&e.forEach((function(r,a){s.set(a,cr(r,t,n,a,e,o))}));var p=d?a:(c?l?oi:ii:l?ks:Ls)(e);return _t(p||e,(function(r,a){p&&(r=e[a=r]),rr(s,a,cr(r,t,n,a,e,o))})),s}function dr(e,t,n){var r=n.length;if(null==e)return!r;for(e=_e(e);r--;){var i=n[r],o=t[i],s=e[i];if(s===a&&!(i in e)||!o(s))return!1}return!0}function fr(e,t,n){if("function"!=typeof e)throw new Pe(i);return Ri((function(){e.apply(a,n)}),t)}function vr(e,t,n,r){var a=-1,i=Tt,o=!0,s=e.length,u=[],l=t.length;if(!s)return u;n&&(t=Rt(t,Xt(n))),r?(i=xt,o=!1):t.length>=200&&(i=Jt,o=!1,t=new Kn(t));e:for(;++a-1},Yn.prototype.set=function(e,t){var n=this.__data__,r=ar(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this},Zn.prototype.clear=function(){this.size=0,this.__data__={hash:new Wn,map:new(_n||Yn),string:new Wn}},Zn.prototype.delete=function(e){var t=di(this,e).delete(e);return this.size-=t?1:0,t},Zn.prototype.get=function(e){return di(this,e).get(e)},Zn.prototype.has=function(e){return di(this,e).has(e)},Zn.prototype.set=function(e,t){var n=di(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this},Kn.prototype.add=Kn.prototype.push=function(e){return this.__data__.set(e,o),this},Kn.prototype.has=function(e){return this.__data__.has(e)},Xn.prototype.clear=function(){this.__data__=new Yn,this.size=0},Xn.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},Xn.prototype.get=function(e){return this.__data__.get(e)},Xn.prototype.has=function(e){return this.__data__.has(e)},Xn.prototype.set=function(e,t){var n=this.__data__;if(n instanceof Yn){var r=n.__data__;if(!_n||r.length<199)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new Zn(r)}return n.set(e,t),this.size=n.size,this};var mr=ka(wr),pr=ka(Ir,!0);function hr(e,t){var n=!0;return mr(e,(function(e,r,a){return n=!!t(e,r,a)})),n}function gr(e,t,n){for(var r=-1,i=e.length;++r0&&n(s)?t>1?yr(s,t-1,n,r,a):Lt(a,s):r||(a[a.length]=s)}return a}var Sr=Na(),br=Na(!0);function wr(e,t){return e&&Sr(e,t,Ls)}function Ir(e,t){return e&&br(e,t,Ls)}function Er(e,t){return Pt(t,(function(t){return es(e[t])}))}function Cr(e,t){for(var n=0,r=(t=ba(t,e)).length;null!=e&&nt}function Or(e,t){return null!=e&&Ne.call(e,t)}function Pr(e,t){return null!=e&&t in _e(e)}function Tr(e,t,n){for(var i=n?xt:Tt,o=e[0].length,s=e.length,u=s,l=r(s),c=1/0,d=[];u--;){var f=e[u];u&&t&&(f=Rt(f,Xt(t))),c=bn(f.length,c),l[u]=!n&&(t||o>=120&&f.length>=120)?new Kn(u&&f):a}f=e[0];var v=-1,m=l[0];e:for(;++v=s?u:u*("desc"==n[r]?-1:1)}return e.index-t.index}(e,t,n)}))}function Wr(e,t,n){for(var r=-1,a=t.length,i={};++r-1;)s!==e&&Ke.call(s,u,1),Ke.call(e,u,1);return e}function Zr(e,t){for(var n=e?t.length:0,r=n-1;n--;){var a=t[n];if(n==r||a!==i){var i=a;Si(a)?Ke.call(e,a,1):va(e,a)}}return e}function Kr(e,t){return e+gt(En()*(t-e+1))}function Xr(e,t){var n="";if(!e||t<1||t>m)return n;do{t%2&&(n+=e),(t=gt(t/2))&&(e+=e)}while(t);return n}function $r(e,t){return Li(Mi(e,t,ou),e+"")}function Jr(e){return Jn(Hs(e))}function ea(e,t){var n=Hs(e);return Fi(n,lr(t,0,n.length))}function ta(e,t,n,r){if(!rs(e))return e;for(var i=-1,o=(t=ba(t,e)).length,s=o-1,u=e;null!=u&&++ii?0:i+t),(n=n>i?i:n)<0&&(n+=i),i=t>n?0:n-t>>>0,t>>>=0;for(var o=r(i);++a>>1,o=e[i];null!==o&&!ds(o)&&(n?o<=t:o=200){var l=t?null:Xa(e);if(l)return dn(l);o=!1,a=Jt,u=new Kn}else u=t?[]:s;e:for(;++r=r?e:ia(e,t,n)}var Ea=dt||function(e){return vt.clearTimeout(e)};function Ca(e,t){if(t)return e.slice();var n=e.length,r=ze?ze(n):new e.constructor(n);return e.copy(r),r}function Da(e){var t=new e.constructor(e.byteLength);return new qe(t).set(new qe(e)),t}function _a(e,t){var n=t?Da(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}function Ma(e,t){if(e!==t){var n=e!==a,r=null===e,i=e==e,o=ds(e),s=t!==a,u=null===t,l=t==t,c=ds(t);if(!u&&!c&&!o&&e>t||o&&s&&l&&!u&&!c||r&&s&&l||!n&&l||!i)return 1;if(!r&&!o&&!c&&e1?n[i-1]:a,s=i>2?n[2]:a;for(o=e.length>3&&"function"==typeof o?(i--,o):a,s&&bi(n[0],n[1],s)&&(o=i<3?a:o,i=1),t=_e(t);++r-1?i[o?t[s]:s]:a}}function ja(e){return ai((function(t){var n=t.length,r=n,o=qn.prototype.thru;for(e&&t.reverse();r--;){var s=t[r];if("function"!=typeof s)throw new Pe(i);if(o&&!u&&"wrapper"==ui(s))var u=new qn([],!0)}for(r=u?r:n;++r1&&y.reverse(),v&&cu))return!1;var c=o.get(e),d=o.get(t);if(c&&d)return c==t&&d==e;var f=-1,v=!0,m=2&n?new Kn:a;for(o.set(e,t),o.set(t,e);++f-1&&e%1==0&&e1?"& ":"")+t[r],t=t.join(n>2?", ":" "),e.replace(ue,"{\n/* [wrapped with "+t+"] */\n")}(r,function(e,t){return _t(g,(function(n){var r="_."+n[0];t&n[1]&&!Tt(e,r)&&e.push(r)})),e.sort()}(function(e){var t=e.match(le);return t?t[1].split(ce):[]}(r),n)))}function Ni(e){var t=0,n=0;return function(){var r=wn(),i=16-(r-n);if(n=r,i>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(a,arguments)}}function Fi(e,t){var n=-1,r=e.length,i=r-1;for(t=t===a?r:t;++n1?e[t-1]:a;return n="function"==typeof n?(e.pop(),n):a,so(e,n)}));function po(e){var t=Gn(e);return t.__chain__=!0,t}function ho(e,t){return t(e)}var go=ai((function(e){var t=e.length,n=t?e[0]:0,r=this.__wrapped__,i=function(t){return ur(t,e)};return!(t>1||this.__actions__.length)&&r instanceof zn&&Si(n)?((r=r.slice(n,+n+(t?1:0))).__actions__.push({func:ho,args:[i],thisArg:a}),new qn(r,this.__chain__).thru((function(e){return t&&!e.length&&e.push(a),e}))):this.thru(i)}));var Ao=Ra((function(e,t,n){Ne.call(e,n)?++e[n]:sr(e,n,1)}));var yo=Va(qi),So=Va(zi);function bo(e,t){return(Wo(e)?_t:mr)(e,ci(t,3))}function wo(e,t){return(Wo(e)?Mt:pr)(e,ci(t,3))}var Io=Ra((function(e,t,n){Ne.call(e,n)?e[n].push(t):sr(e,n,[t])}));var Eo=$r((function(e,t,n){var a=-1,i="function"==typeof t,o=Zo(e)?r(e.length):[];return mr(e,(function(e){o[++a]=i?Ct(t,e,n):xr(e,t,n)})),o})),Co=Ra((function(e,t,n){sr(e,n,t)}));function Do(e,t){return(Wo(e)?Rt:jr)(e,ci(t,3))}var _o=Ra((function(e,t,n){e[n?0:1].push(t)}),(function(){return[[],[]]}));var Mo=$r((function(e,t){if(null==e)return[];var n=t.length;return n>1&&bi(e,t[0],t[1])?t=[]:n>2&&bi(t[0],t[1],t[2])&&(t=[t[0]]),zr(e,yr(t,1),[])})),Oo=ft||function(){return vt.Date.now()};function Po(e,t,n){return t=n?a:t,t=e&&null==t?e.length:t,Ja(e,d,a,a,a,a,t)}function To(e,t){var n;if("function"!=typeof t)throw new Pe(i);return e=gs(e),function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=a),n}}var xo=$r((function(e,t,n){var r=1;if(n.length){var a=cn(n,li(xo));r|=l}return Ja(e,r,t,n,a)})),Ro=$r((function(e,t,n){var r=3;if(n.length){var a=cn(n,li(Ro));r|=l}return Ja(t,r,e,n,a)}));function Lo(e,t,n){var r,o,s,u,l,c,d=0,f=!1,v=!1,m=!0;if("function"!=typeof e)throw new Pe(i);function p(t){var n=r,i=o;return r=o=a,d=t,u=e.apply(i,n)}function h(e){return d=e,l=Ri(A,t),f?p(e):u}function g(e){var n=e-c;return c===a||n>=t||n<0||v&&e-d>=s}function A(){var e=Oo();if(g(e))return y(e);l=Ri(A,function(e){var n=t-(e-c);return v?bn(n,s-(e-d)):n}(e))}function y(e){return l=a,m&&r?p(e):(r=o=a,u)}function S(){var e=Oo(),n=g(e);if(r=arguments,o=this,c=e,n){if(l===a)return h(c);if(v)return Ea(l),l=Ri(A,t),p(c)}return l===a&&(l=Ri(A,t)),u}return t=ys(t)||0,rs(n)&&(f=!!n.leading,s=(v="maxWait"in n)?Sn(ys(n.maxWait)||0,t):s,m="trailing"in n?!!n.trailing:m),S.cancel=function(){l!==a&&Ea(l),d=0,r=c=o=l=a},S.flush=function(){return l===a?u:y(Oo())},S}var ko=$r((function(e,t){return fr(e,1,t)})),No=$r((function(e,t,n){return fr(e,ys(t)||0,n)}));function Fo(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new Pe(i);var n=function(){var r=arguments,a=t?t.apply(this,r):r[0],i=n.cache;if(i.has(a))return i.get(a);var o=e.apply(this,r);return n.cache=i.set(a,o)||i,o};return n.cache=new(Fo.Cache||Zn),n}function Bo(e){if("function"!=typeof e)throw new Pe(i);return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}}Fo.Cache=Zn;var Uo=wa((function(e,t){var n=(t=1==t.length&&Wo(t[0])?Rt(t[0],Xt(ci())):Rt(yr(t,1),Xt(ci()))).length;return $r((function(r){for(var a=-1,i=bn(r.length,n);++a=t})),zo=Rr(function(){return arguments}())?Rr:function(e){return as(e)&&Ne.call(e,"callee")&&!Ze.call(e,"callee")},Wo=r.isArray,Yo=yt?Xt(yt):function(e){return as(e)&&_r(e)==L};function Zo(e){return null!=e&&ns(e.length)&&!es(e)}function Ko(e){return as(e)&&Zo(e)}var Xo=Bt||yu,$o=St?Xt(St):function(e){return as(e)&&_r(e)==b};function Jo(e){if(!as(e))return!1;var t=_r(e);return t==w||"[object DOMException]"==t||"string"==typeof e.message&&"string"==typeof e.name&&!ss(e)}function es(e){if(!rs(e))return!1;var t=_r(e);return t==I||t==E||"[object AsyncFunction]"==t||"[object Proxy]"==t}function ts(e){return"number"==typeof e&&e==gs(e)}function ns(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=m}function rs(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function as(e){return null!=e&&"object"==typeof e}var is=bt?Xt(bt):function(e){return as(e)&&hi(e)==C};function os(e){return"number"==typeof e||as(e)&&_r(e)==D}function ss(e){if(!as(e)||_r(e)!=_)return!1;var t=We(e);if(null===t)return!0;var n=Ne.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&ke.call(n)==Ve}var us=wt?Xt(wt):function(e){return as(e)&&_r(e)==O};var ls=It?Xt(It):function(e){return as(e)&&hi(e)==P};function cs(e){return"string"==typeof e||!Wo(e)&&as(e)&&_r(e)==T}function ds(e){return"symbol"==typeof e||as(e)&&_r(e)==x}var fs=Et?Xt(Et):function(e){return as(e)&&ns(e.length)&&!!ot[_r(e)]};var vs=Ya(Vr),ms=Ya((function(e,t){return e<=t}));function ps(e){if(!e)return[];if(Zo(e))return cs(e)?mn(e):Ta(e);if(et&&e[et])return function(e){for(var t,n=[];!(t=e.next()).done;)n.push(t.value);return n}(e[et]());var t=hi(e);return(t==C?un:t==P?dn:Hs)(e)}function hs(e){return e?(e=ys(e))===v||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}function gs(e){var t=hs(e),n=t%1;return t==t?n?t-n:t:0}function As(e){return e?lr(gs(e),0,h):0}function ys(e){if("number"==typeof e)return e;if(ds(e))return p;if(rs(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=rs(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=Kt(e);var n=ge.test(e);return n||ye.test(e)?ct(e.slice(2),n?2:8):he.test(e)?p:+e}function Ss(e){return xa(e,ks(e))}function bs(e){return null==e?"":da(e)}var ws=La((function(e,t){if(Ci(t)||Zo(t))xa(t,Ls(t),e);else for(var n in t)Ne.call(t,n)&&rr(e,n,t[n])})),Is=La((function(e,t){xa(t,ks(t),e)})),Es=La((function(e,t,n,r){xa(t,ks(t),e,r)})),Cs=La((function(e,t,n,r){xa(t,Ls(t),e,r)})),Ds=ai(ur);var _s=$r((function(e,t){e=_e(e);var n=-1,r=t.length,i=r>2?t[2]:a;for(i&&bi(t[0],t[1],i)&&(r=1);++n1),t})),xa(e,oi(e),n),r&&(n=cr(n,7,ni));for(var a=t.length;a--;)va(n,t[a]);return n}));var Us=ai((function(e,t){return null==e?{}:function(e,t){return Wr(e,t,(function(t,n){return Ps(e,n)}))}(e,t)}));function Vs(e,t){if(null==e)return{};var n=Rt(oi(e),(function(e){return[e]}));return t=ci(t),Wr(e,n,(function(e,n){return t(e,n[0])}))}var js=$a(Ls),Gs=$a(ks);function Hs(e){return null==e?[]:$t(e,Ls(e))}var Qs=Ba((function(e,t,n){return t=t.toLowerCase(),e+(n?qs(t):t)}));function qs(e){return Js(bs(e).toLowerCase())}function zs(e){return(e=bs(e))&&e.replace(be,rn).replace(Je,"")}var Ws=Ba((function(e,t,n){return e+(n?"-":"")+t.toLowerCase()})),Ys=Ba((function(e,t,n){return e+(n?" ":"")+t.toLowerCase()})),Zs=Fa("toLowerCase");var Ks=Ba((function(e,t,n){return e+(n?"_":"")+t.toLowerCase()}));var Xs=Ba((function(e,t,n){return e+(n?" ":"")+Js(t)}));var $s=Ba((function(e,t,n){return e+(n?" ":"")+t.toUpperCase()})),Js=Fa("toUpperCase");function eu(e,t,n){return e=bs(e),(t=n?a:t)===a?function(e){return rt.test(e)}(e)?function(e){return e.match(tt)||[]}(e):function(e){return e.match(de)||[]}(e):e.match(t)||[]}var tu=$r((function(e,t){try{return Ct(e,a,t)}catch(e){return Jo(e)?e:new Ee(e)}})),nu=ai((function(e,t){return _t(t,(function(t){t=Ui(t),sr(e,t,xo(e[t],e))})),e}));function ru(e){return function(){return e}}var au=ja(),iu=ja(!0);function ou(e){return e}function su(e){return Fr("function"==typeof e?e:cr(e,1))}var uu=$r((function(e,t){return function(n){return xr(n,e,t)}})),lu=$r((function(e,t){return function(n){return xr(e,n,t)}}));function cu(e,t,n){var r=Ls(t),a=Er(t,r);null!=n||rs(t)&&(a.length||!r.length)||(n=t,t=e,e=this,a=Er(t,Ls(t)));var i=!(rs(n)&&"chain"in n&&!n.chain),o=es(e);return _t(a,(function(n){var r=t[n];e[n]=r,o&&(e.prototype[n]=function(){var t=this.__chain__;if(i||t){var n=e(this.__wrapped__),a=n.__actions__=Ta(this.__actions__);return a.push({func:r,args:arguments,thisArg:e}),n.__chain__=t,n}return r.apply(e,Lt([this.value()],arguments))})})),e}function du(){}var fu=qa(Rt),vu=qa(Ot),mu=qa(Ft);function pu(e){return wi(e)?qt(Ui(e)):function(e){return function(t){return Cr(t,e)}}(e)}var hu=Wa(),gu=Wa(!0);function Au(){return[]}function yu(){return!1}var Su=Qa((function(e,t){return e+t}),0),bu=Ka("ceil"),wu=Qa((function(e,t){return e/t}),1),Iu=Ka("floor");var Eu,Cu=Qa((function(e,t){return e*t}),1),Du=Ka("round"),_u=Qa((function(e,t){return e-t}),0);return Gn.after=function(e,t){if("function"!=typeof t)throw new Pe(i);return e=gs(e),function(){if(--e<1)return t.apply(this,arguments)}},Gn.ary=Po,Gn.assign=ws,Gn.assignIn=Is,Gn.assignInWith=Es,Gn.assignWith=Cs,Gn.at=Ds,Gn.before=To,Gn.bind=xo,Gn.bindAll=nu,Gn.bindKey=Ro,Gn.castArray=function(){if(!arguments.length)return[];var e=arguments[0];return Wo(e)?e:[e]},Gn.chain=po,Gn.chunk=function(e,t,n){t=(n?bi(e,t,n):t===a)?1:Sn(gs(t),0);var i=null==e?0:e.length;if(!i||t<1)return[];for(var o=0,s=0,u=r(pt(i/t));oi?0:i+n),(r=r===a||r>i?i:gs(r))<0&&(r+=i),r=n>r?0:As(r);n>>0)?(e=bs(e))&&("string"==typeof t||null!=t&&!us(t))&&!(t=da(t))&&sn(e)?Ia(mn(e),0,n):e.split(t,n):[]},Gn.spread=function(e,t){if("function"!=typeof e)throw new Pe(i);return t=null==t?0:Sn(gs(t),0),$r((function(n){var r=n[t],a=Ia(n,0,t);return r&&Lt(a,r),Ct(e,this,a)}))},Gn.tail=function(e){var t=null==e?0:e.length;return t?ia(e,1,t):[]},Gn.take=function(e,t,n){return e&&e.length?ia(e,0,(t=n||t===a?1:gs(t))<0?0:t):[]},Gn.takeRight=function(e,t,n){var r=null==e?0:e.length;return r?ia(e,(t=r-(t=n||t===a?1:gs(t)))<0?0:t,r):[]},Gn.takeRightWhile=function(e,t){return e&&e.length?pa(e,ci(t,3),!1,!0):[]},Gn.takeWhile=function(e,t){return e&&e.length?pa(e,ci(t,3)):[]},Gn.tap=function(e,t){return t(e),e},Gn.throttle=function(e,t,n){var r=!0,a=!0;if("function"!=typeof e)throw new Pe(i);return rs(n)&&(r="leading"in n?!!n.leading:r,a="trailing"in n?!!n.trailing:a),Lo(e,t,{leading:r,maxWait:t,trailing:a})},Gn.thru=ho,Gn.toArray=ps,Gn.toPairs=js,Gn.toPairsIn=Gs,Gn.toPath=function(e){return Wo(e)?Rt(e,Ui):ds(e)?[e]:Ta(Bi(bs(e)))},Gn.toPlainObject=Ss,Gn.transform=function(e,t,n){var r=Wo(e),a=r||Xo(e)||fs(e);if(t=ci(t,4),null==n){var i=e&&e.constructor;n=a?r?new i:[]:rs(e)&&es(i)?Hn(We(e)):{}}return(a?_t:wr)(e,(function(e,r,a){return t(n,e,r,a)})),n},Gn.unary=function(e){return Po(e,1)},Gn.union=ro,Gn.unionBy=ao,Gn.unionWith=io,Gn.uniq=function(e){return e&&e.length?fa(e):[]},Gn.uniqBy=function(e,t){return e&&e.length?fa(e,ci(t,2)):[]},Gn.uniqWith=function(e,t){return t="function"==typeof t?t:a,e&&e.length?fa(e,a,t):[]},Gn.unset=function(e,t){return null==e||va(e,t)},Gn.unzip=oo,Gn.unzipWith=so,Gn.update=function(e,t,n){return null==e?e:ma(e,t,Sa(n))},Gn.updateWith=function(e,t,n,r){return r="function"==typeof r?r:a,null==e?e:ma(e,t,Sa(n),r)},Gn.values=Hs,Gn.valuesIn=function(e){return null==e?[]:$t(e,ks(e))},Gn.without=uo,Gn.words=eu,Gn.wrap=function(e,t){return Vo(Sa(t),e)},Gn.xor=lo,Gn.xorBy=co,Gn.xorWith=fo,Gn.zip=vo,Gn.zipObject=function(e,t){return Aa(e||[],t||[],rr)},Gn.zipObjectDeep=function(e,t){return Aa(e||[],t||[],ta)},Gn.zipWith=mo,Gn.entries=js,Gn.entriesIn=Gs,Gn.extend=Is,Gn.extendWith=Es,cu(Gn,Gn),Gn.add=Su,Gn.attempt=tu,Gn.camelCase=Qs,Gn.capitalize=qs,Gn.ceil=bu,Gn.clamp=function(e,t,n){return n===a&&(n=t,t=a),n!==a&&(n=(n=ys(n))==n?n:0),t!==a&&(t=(t=ys(t))==t?t:0),lr(ys(e),t,n)},Gn.clone=function(e){return cr(e,4)},Gn.cloneDeep=function(e){return cr(e,5)},Gn.cloneDeepWith=function(e,t){return cr(e,5,t="function"==typeof t?t:a)},Gn.cloneWith=function(e,t){return cr(e,4,t="function"==typeof t?t:a)},Gn.conformsTo=function(e,t){return null==t||dr(e,t,Ls(t))},Gn.deburr=zs,Gn.defaultTo=function(e,t){return null==e||e!=e?t:e},Gn.divide=wu,Gn.endsWith=function(e,t,n){e=bs(e),t=da(t);var r=e.length,i=n=n===a?r:lr(gs(n),0,r);return(n-=t.length)>=0&&e.slice(n,i)==t},Gn.eq=Ho,Gn.escape=function(e){return(e=bs(e))&&X.test(e)?e.replace(Z,an):e},Gn.escapeRegExp=function(e){return(e=bs(e))&&ie.test(e)?e.replace(ae,"\\$&"):e},Gn.every=function(e,t,n){var r=Wo(e)?Ot:hr;return n&&bi(e,t,n)&&(t=a),r(e,ci(t,3))},Gn.find=yo,Gn.findIndex=qi,Gn.findKey=function(e,t){return Ut(e,ci(t,3),wr)},Gn.findLast=So,Gn.findLastIndex=zi,Gn.findLastKey=function(e,t){return Ut(e,ci(t,3),Ir)},Gn.floor=Iu,Gn.forEach=bo,Gn.forEachRight=wo,Gn.forIn=function(e,t){return null==e?e:Sr(e,ci(t,3),ks)},Gn.forInRight=function(e,t){return null==e?e:br(e,ci(t,3),ks)},Gn.forOwn=function(e,t){return e&&wr(e,ci(t,3))},Gn.forOwnRight=function(e,t){return e&&Ir(e,ci(t,3))},Gn.get=Os,Gn.gt=Qo,Gn.gte=qo,Gn.has=function(e,t){return null!=e&&gi(e,t,Or)},Gn.hasIn=Ps,Gn.head=Yi,Gn.identity=ou,Gn.includes=function(e,t,n,r){e=Zo(e)?e:Hs(e),n=n&&!r?gs(n):0;var a=e.length;return n<0&&(n=Sn(a+n,0)),cs(e)?n<=a&&e.indexOf(t,n)>-1:!!a&&jt(e,t,n)>-1},Gn.indexOf=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var a=null==n?0:gs(n);return a<0&&(a=Sn(r+a,0)),jt(e,t,a)},Gn.inRange=function(e,t,n){return t=hs(t),n===a?(n=t,t=0):n=hs(n),function(e,t,n){return e>=bn(t,n)&&e=-9007199254740991&&e<=m},Gn.isSet=ls,Gn.isString=cs,Gn.isSymbol=ds,Gn.isTypedArray=fs,Gn.isUndefined=function(e){return e===a},Gn.isWeakMap=function(e){return as(e)&&hi(e)==R},Gn.isWeakSet=function(e){return as(e)&&"[object WeakSet]"==_r(e)},Gn.join=function(e,t){return null==e?"":An.call(e,t)},Gn.kebabCase=Ws,Gn.last=$i,Gn.lastIndexOf=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=r;return n!==a&&(i=(i=gs(n))<0?Sn(r+i,0):bn(i,r-1)),t==t?function(e,t,n){for(var r=n+1;r--;)if(e[r]===t)return r;return r}(e,t,i):Vt(e,Ht,i,!0)},Gn.lowerCase=Ys,Gn.lowerFirst=Zs,Gn.lt=vs,Gn.lte=ms,Gn.max=function(e){return e&&e.length?gr(e,ou,Mr):a},Gn.maxBy=function(e,t){return e&&e.length?gr(e,ci(t,2),Mr):a},Gn.mean=function(e){return Qt(e,ou)},Gn.meanBy=function(e,t){return Qt(e,ci(t,2))},Gn.min=function(e){return e&&e.length?gr(e,ou,Vr):a},Gn.minBy=function(e,t){return e&&e.length?gr(e,ci(t,2),Vr):a},Gn.stubArray=Au,Gn.stubFalse=yu,Gn.stubObject=function(){return{}},Gn.stubString=function(){return""},Gn.stubTrue=function(){return!0},Gn.multiply=Cu,Gn.nth=function(e,t){return e&&e.length?qr(e,gs(t)):a},Gn.noConflict=function(){return vt._===this&&(vt._=je),this},Gn.noop=du,Gn.now=Oo,Gn.pad=function(e,t,n){e=bs(e);var r=(t=gs(t))?vn(e):0;if(!t||r>=t)return e;var a=(t-r)/2;return za(gt(a),n)+e+za(pt(a),n)},Gn.padEnd=function(e,t,n){e=bs(e);var r=(t=gs(t))?vn(e):0;return t&&rt){var r=e;e=t,t=r}if(n||e%1||t%1){var i=En();return bn(e+i*(t-e+lt("1e-"+((i+"").length-1))),t)}return Kr(e,t)},Gn.reduce=function(e,t,n){var r=Wo(e)?kt:Wt,a=arguments.length<3;return r(e,ci(t,4),n,a,mr)},Gn.reduceRight=function(e,t,n){var r=Wo(e)?Nt:Wt,a=arguments.length<3;return r(e,ci(t,4),n,a,pr)},Gn.repeat=function(e,t,n){return t=(n?bi(e,t,n):t===a)?1:gs(t),Xr(bs(e),t)},Gn.replace=function(){var e=arguments,t=bs(e[0]);return e.length<3?t:t.replace(e[1],e[2])},Gn.result=function(e,t,n){var r=-1,i=(t=ba(t,e)).length;for(i||(i=1,e=a);++rm)return[];var n=h,r=bn(e,h);t=ci(t),e-=h;for(var a=Zt(r,t);++n=o)return e;var u=n-vn(r);if(u<1)return r;var l=s?Ia(s,0,u).join(""):e.slice(0,u);if(i===a)return l+r;if(s&&(u+=l.length-u),us(i)){if(e.slice(u).search(i)){var c,d=l;for(i.global||(i=Me(i.source,bs(pe.exec(i))+"g")),i.lastIndex=0;c=i.exec(d);)var f=c.index;l=l.slice(0,f===a?u:f)}}else if(e.indexOf(da(i),u)!=u){var v=l.lastIndexOf(i);v>-1&&(l=l.slice(0,v))}return l+r},Gn.unescape=function(e){return(e=bs(e))&&K.test(e)?e.replace(Y,hn):e},Gn.uniqueId=function(e){var t=++Fe;return bs(e)+t},Gn.upperCase=$s,Gn.upperFirst=Js,Gn.each=bo,Gn.eachRight=wo,Gn.first=Yi,cu(Gn,(Eu={},wr(Gn,(function(e,t){Ne.call(Gn.prototype,t)||(Eu[t]=e)})),Eu),{chain:!1}),Gn.VERSION="4.17.21",_t(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(e){Gn[e].placeholder=Gn})),_t(["drop","take"],(function(e,t){zn.prototype[e]=function(n){n=n===a?1:Sn(gs(n),0);var r=this.__filtered__&&!t?new zn(this):this.clone();return r.__filtered__?r.__takeCount__=bn(n,r.__takeCount__):r.__views__.push({size:bn(n,h),type:e+(r.__dir__<0?"Right":"")}),r},zn.prototype[e+"Right"]=function(t){return this.reverse()[e](t).reverse()}})),_t(["filter","map","takeWhile"],(function(e,t){var n=t+1,r=1==n||3==n;zn.prototype[e]=function(e){var t=this.clone();return t.__iteratees__.push({iteratee:ci(e,3),type:n}),t.__filtered__=t.__filtered__||r,t}})),_t(["head","last"],(function(e,t){var n="take"+(t?"Right":"");zn.prototype[e]=function(){return this[n](1).value()[0]}})),_t(["initial","tail"],(function(e,t){var n="drop"+(t?"":"Right");zn.prototype[e]=function(){return this.__filtered__?new zn(this):this[n](1)}})),zn.prototype.compact=function(){return this.filter(ou)},zn.prototype.find=function(e){return this.filter(e).head()},zn.prototype.findLast=function(e){return this.reverse().find(e)},zn.prototype.invokeMap=$r((function(e,t){return"function"==typeof e?new zn(this):this.map((function(n){return xr(n,e,t)}))})),zn.prototype.reject=function(e){return this.filter(Bo(ci(e)))},zn.prototype.slice=function(e,t){e=gs(e);var n=this;return n.__filtered__&&(e>0||t<0)?new zn(n):(e<0?n=n.takeRight(-e):e&&(n=n.drop(e)),t!==a&&(n=(t=gs(t))<0?n.dropRight(-t):n.take(t-e)),n)},zn.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},zn.prototype.toArray=function(){return this.take(h)},wr(zn.prototype,(function(e,t){var n=/^(?:filter|find|map|reject)|While$/.test(t),r=/^(?:head|last)$/.test(t),i=Gn[r?"take"+("last"==t?"Right":""):t],o=r||/^find/.test(t);i&&(Gn.prototype[t]=function(){var t=this.__wrapped__,s=r?[1]:arguments,u=t instanceof zn,l=s[0],c=u||Wo(t),d=function(e){var t=i.apply(Gn,Lt([e],s));return r&&f?t[0]:t};c&&n&&"function"==typeof l&&1!=l.length&&(u=c=!1);var f=this.__chain__,v=!!this.__actions__.length,m=o&&!f,p=u&&!v;if(!o&&c){t=p?t:new zn(this);var h=e.apply(t,s);return h.__actions__.push({func:ho,args:[d],thisArg:a}),new qn(h,f)}return m&&p?e.apply(this,s):(h=this.thru(d),m?r?h.value()[0]:h.value():h)})})),_t(["pop","push","shift","sort","splice","unshift"],(function(e){var t=Te[e],n=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",r=/^(?:pop|shift)$/.test(e);Gn.prototype[e]=function(){var e=arguments;if(r&&!this.__chain__){var a=this.value();return t.apply(Wo(a)?a:[],e)}return this[n]((function(n){return t.apply(Wo(n)?n:[],e)}))}})),wr(zn.prototype,(function(e,t){var n=Gn[t];if(n){var r=n.name+"";Ne.call(Rn,r)||(Rn[r]=[]),Rn[r].push({name:t,func:n})}})),Rn[Ga(a,2).name]=[{name:"wrapper",func:a}],zn.prototype.clone=function(){var e=new zn(this.__wrapped__);return e.__actions__=Ta(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=Ta(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=Ta(this.__views__),e},zn.prototype.reverse=function(){if(this.__filtered__){var e=new zn(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},zn.prototype.value=function(){var e=this.__wrapped__.value(),t=this.__dir__,n=Wo(e),r=t<0,a=n?e.length:0,i=function(e,t,n){var r=-1,a=n.length;for(;++r=this.__values__.length;return{done:e,value:e?a:this.__values__[this.__index__++]}},Gn.prototype.plant=function(e){for(var t,n=this;n instanceof Qn;){var r=ji(n);r.__index__=0,r.__values__=a,t?i.__wrapped__=r:t=r;var i=r;n=n.__wrapped__}return i.__wrapped__=e,t},Gn.prototype.reverse=function(){var e=this.__wrapped__;if(e instanceof zn){var t=e;return this.__actions__.length&&(t=new zn(this)),(t=t.reverse()).__actions__.push({func:ho,args:[no],thisArg:a}),new qn(t,this.__chain__)}return this.thru(no)},Gn.prototype.toJSON=Gn.prototype.valueOf=Gn.prototype.value=function(){return ha(this.__wrapped__,this.__actions__)},Gn.prototype.first=Gn.prototype.head,et&&(Gn.prototype[et]=function(){return this}),Gn}();vt._=gn,(r=function(){return gn}.call(t,n,t,e))===a||(e.exports=r)}.call(this)},28148:function(e,t,n){var r=n(70441);e.exports=function(){return r.Date.now()}},33259:function(e,t,n){var r=n(45750),a=n(85973);e.exports=function(e,t,n){var i=!0,o=!0;if("function"!=typeof e)throw new TypeError("Expected a function");return a(n)&&(i="leading"in n?!!n.leading:i,o="trailing"in n?!!n.trailing:o),r(e,t,{leading:i,maxWait:t,trailing:o})}},78746:function(e,t,n){var r=n(63349),a=n(85973),i=n(22945),o=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,u=/^0o[0-7]+$/i,l=parseInt;e.exports=function(e){if("number"==typeof e)return e;if(i(e))return NaN;if(a(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=a(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=r(e);var n=s.test(e);return n||u.test(e)?l(e.slice(2),n?2:8):o.test(e)?NaN:+e}},61505:function(module,exports,__webpack_require__){var factory;"undefined"!=typeof navigator&&(factory=function(){"use strict";var svgNS="http://www.w3.org/2000/svg",locationHref="",_useWebWorker=!1,initialDefaultFrame=-999999,setWebWorker=function(e){_useWebWorker=!!e},getWebWorker=function(){return _useWebWorker},setLocationHref=function(e){locationHref=e},getLocationHref=function(){return locationHref};function createTag(e){return document.createElement(e)}function extendPrototype(e,t){var n,r,a=e.length;for(n=0;n1?n[1]=1:n[1]<=0&&(n[1]=0),HSVtoRGB(n[0],n[1],n[2])}function addBrightnessToRGB(e,t){var n=RGBtoHSV(255*e[0],255*e[1],255*e[2]);return n[2]+=t,n[2]>1?n[2]=1:n[2]<0&&(n[2]=0),HSVtoRGB(n[0],n[1],n[2])}function addHueToRGB(e,t){var n=RGBtoHSV(255*e[0],255*e[1],255*e[2]);return n[0]+=t/360,n[0]>1?n[0]-=1:n[0]<0&&(n[0]+=1),HSVtoRGB(n[0],n[1],n[2])}var rgbToHex=function(){var e,t,n=[];for(e=0;e<256;e+=1)t=e.toString(16),n[e]=1===t.length?"0"+t:t;return function(e,t,r){return e<0&&(e=0),t<0&&(t=0),r<0&&(r=0),"#"+n[e]+n[t]+n[r]}}(),setSubframeEnabled=function(e){subframeEnabled=!!e},getSubframeEnabled=function(){return subframeEnabled},setExpressionsPlugin=function(e){expressionsPlugin=e},getExpressionsPlugin=function(){return expressionsPlugin},setDefaultCurveSegments=function(e){defaultCurveSegments=e},getDefaultCurveSegments=function(){return defaultCurveSegments},setIdPrefix=function(e){idPrefix$1=e},getIdPrefix=function(){return idPrefix$1};function createNS(e){return document.createElementNS(svgNS,e)}function _typeof$5(e){return _typeof$5="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof$5(e)}var dataManager=function(){var e,t,n=1,r=[],a={onmessage:function(){},postMessage:function(t){e({data:t})}},i={postMessage:function(e){a.onmessage({data:e})}};function o(){t||(t=function(t){if(window.Worker&&window.Blob&&getWebWorker()){var n=new Blob(["var _workerSelf = self; self.onmessage = ",t.toString()],{type:"text/javascript"}),r=URL.createObjectURL(n);return new Worker(r)}return e=t,a}((function(e){if(i.dataManager||(i.dataManager=function(){function e(a,i){var o,s,u,l,c,f,v=a.length;for(s=0;s=0;t-=1)if("sh"===e[t].ty)if(e[t].ks.k.i)r(e[t].ks.k);else for(i=e[t].ks.k.length,a=0;an[0]||!(n[0]>e[0])&&(e[1]>n[1]||!(n[1]>e[1])&&(e[2]>n[2]||!(n[2]>e[2])&&null))}var i,o=function(){var e=[4,4,14];function t(e){var t,n,r,a=e.length;for(t=0;t=0;n-=1)if("sh"===e[n].ty)if(e[n].ks.k.i)e[n].ks.k.c=e[n].closed;else for(a=e[n].ks.k.length,r=0;r500)&&(this._imageLoaded(),clearInterval(n)),t+=1}.bind(this),50)}function i(e){var t={assetData:e},n=r(e,this.assetsPath,this.path);return dataManager.loadData(n,function(e){t.img=e,this._footageLoaded()}.bind(this),function(){t.img={},this._footageLoaded()}.bind(this)),t}function o(){this._imageLoaded=t.bind(this),this._footageLoaded=n.bind(this),this.testImageLoaded=a.bind(this),this.createFootageData=i.bind(this),this.assetsPath="",this.path="",this.totalImages=0,this.totalFootages=0,this.loadedAssets=0,this.loadedFootagesCount=0,this.imagesLoadedCb=null,this.images=[]}return o.prototype={loadAssets:function(e,t){var n;this.imagesLoadedCb=t;var r=e.length;for(n=0;nthis.animationData.op&&(this.animationData.op=e.op,this.totalFrames=Math.floor(e.op-this.animationData.ip));var t,n,r=this.animationData.layers,a=r.length,i=e.layers,o=i.length;for(n=0;nthis.timeCompleted&&(this.currentFrame=this.timeCompleted),this.trigger("enterFrame"),this.renderFrame(),this.trigger("drawnFrame")},AnimationItem.prototype.renderFrame=function(){if(!1!==this.isLoaded&&this.renderer)try{this.renderer.renderFrame(this.currentFrame+this.firstFrame)}catch(e){this.triggerRenderFrameError(e)}},AnimationItem.prototype.play=function(e){e&&this.name!==e||!0===this.isPaused&&(this.isPaused=!1,this.trigger("_pause"),this.audioController.resume(),this._idle&&(this._idle=!1,this.trigger("_active")))},AnimationItem.prototype.pause=function(e){e&&this.name!==e||!1===this.isPaused&&(this.isPaused=!0,this.trigger("_play"),this._idle=!0,this.trigger("_idle"),this.audioController.pause())},AnimationItem.prototype.togglePause=function(e){e&&this.name!==e||(!0===this.isPaused?this.play():this.pause())},AnimationItem.prototype.stop=function(e){e&&this.name!==e||(this.pause(),this.playCount=0,this._completedLoop=!1,this.setCurrentRawFrameValue(0))},AnimationItem.prototype.getMarkerData=function(e){for(var t,n=0;n=this.totalFrames-1&&this.frameModifier>0?this.loop&&this.playCount!==this.loop?t>=this.totalFrames?(this.playCount+=1,this.checkSegments(t%this.totalFrames)||(this.setCurrentRawFrameValue(t%this.totalFrames),this._completedLoop=!0,this.trigger("loopComplete"))):this.setCurrentRawFrameValue(t):this.checkSegments(t>this.totalFrames?t%this.totalFrames:0)||(n=!0,t=this.totalFrames-1):t<0?this.checkSegments(t%this.totalFrames)||(!this.loop||this.playCount--<=0&&!0!==this.loop?(n=!0,t=0):(this.setCurrentRawFrameValue(this.totalFrames+t%this.totalFrames),this._completedLoop?this.trigger("loopComplete"):this._completedLoop=!0)):this.setCurrentRawFrameValue(t),n&&(this.setCurrentRawFrameValue(t),this.pause(),this.trigger("complete"))}},AnimationItem.prototype.adjustSegment=function(e,t){this.playCount=0,e[1]0&&(this.playSpeed<0?this.setSpeed(-this.playSpeed):this.setDirection(-1)),this.totalFrames=e[0]-e[1],this.timeCompleted=this.totalFrames,this.firstFrame=e[1],this.setCurrentRawFrameValue(this.totalFrames-.001-t)):e[1]>e[0]&&(this.frameModifier<0&&(this.playSpeed<0?this.setSpeed(-this.playSpeed):this.setDirection(1)),this.totalFrames=e[1]-e[0],this.timeCompleted=this.totalFrames,this.firstFrame=e[0],this.setCurrentRawFrameValue(.001+t)),this.trigger("segmentStart")},AnimationItem.prototype.setSegment=function(e,t){var n=-1;this.isPaused&&(this.currentRawFrame+this.firstFramet&&(n=t-e)),this.firstFrame=e,this.totalFrames=t-e,this.timeCompleted=this.totalFrames,-1!==n&&this.goToAndStop(n,!0)},AnimationItem.prototype.playSegments=function(e,t){if(t&&(this.segments.length=0),"object"===_typeof$4(e[0])){var n,r=e.length;for(n=0;n=0;n-=1)t[n].animation.destroy(e)},e.freeze=function(){o=!0},e.unfreeze=function(){o=!1,m()},e.setVolume=function(e,n){var a;for(a=0;a=.001?function(e,t,n,r){for(var a=0;a<4;++a){var i=u(t,n,r);if(0===i)return t;t-=(s(t,n,r)-e)/i}return t}(e,l,t,r):0===c?l:function(e,t,n,r,a){var i,o,u=0;do{(i=s(o=t+(n-t)/2,r,a)-e)>0?n=o:t=o}while(Math.abs(i)>1e-7&&++u<10);return o}(e,i,i+n,t,r)}},e}(),pooling={double:function(e){return e.concat(createSizedArray(e.length))}},poolFactory=function(e,t,n){var r=0,a=e,i=createSizedArray(a);return{newElement:function(){return r?i[r-=1]:t()},release:function(e){r===a&&(i=pooling.double(i),a*=2),n&&n(e),i[r]=e,r+=1}}},bezierLengthPool=poolFactory(8,(function(){return{addedLength:0,percents:createTypedArray("float32",getDefaultCurveSegments()),lengths:createTypedArray("float32",getDefaultCurveSegments())}})),segmentsLengthPool=poolFactory(8,(function(){return{lengths:[],totalLength:0}}),(function(e){var t,n=e.lengths.length;for(t=0;t-.001&&o<.001}var n=function(e,t,n,r){var a,i,o,s,u,l,c=getDefaultCurveSegments(),d=0,f=[],v=[],m=bezierLengthPool.newElement();for(o=n.length,a=0;ao?-1:1,l=!0;l;)if(r[i]<=o&&r[i+1]>o?(s=(o-r[i])/(r[i+1]-r[i]),l=!1):i+=u,i<0||i>=a-1){if(i===a-1)return n[i];l=!1}return n[i]+(n[i+1]-n[i])*s}var u=createTypedArray("float32",8);return{getSegmentsLength:function(e){var t,r=segmentsLengthPool.newElement(),a=e.c,i=e.v,o=e.o,s=e.i,u=e._length,l=r.lengths,c=0;for(t=0;t1&&(i=1);var c,d=s(i,l),f=s(o=o>1?1:o,l),v=t.length,m=1-d,p=1-f,h=m*m*m,g=d*m*m*3,A=d*d*m*3,y=d*d*d,S=m*m*p,b=d*m*p+m*d*p+m*m*f,w=d*d*p+m*d*f+d*m*f,I=d*d*f,E=m*p*p,C=d*p*p+m*f*p+m*p*f,D=d*f*p+m*f*f+d*p*f,_=d*f*f,M=p*p*p,O=f*p*p+p*f*p+p*p*f,P=f*f*p+p*f*f+f*p*f,T=f*f*f;for(c=0;cv?f>m?f-v-m:m-v-f:m>v?m-v-f:v-f-m)>-1e-4&&d<1e-4}}}var bez=bezFunction(),PropertyFactory=function(){var e=initialDefaultFrame,t=Math.abs;function n(e,t){var n,a=this.offsetTime;"multidimensional"===this.propType&&(n=createTypedArray("float32",this.pv.length));for(var i,o,s,u,l,c,d,f,v,m=t.lastIndex,p=m,h=this.keyframes.length-1,g=!0;g;){if(i=this.keyframes[p],o=this.keyframes[p+1],p===h-1&&e>=o.t-a){i.h&&(i=o),m=0;break}if(o.t-a>e){m=p;break}p=M||e=M?P.points.length-1:0;for(l=P.points[T].point.length,u=0;u=L&&R=M)n[0]=A[0],n[1]=A[1],n[2]=A[2];else if(e<=O)n[0]=i.s[0],n[1]=i.s[1],n[2]=i.s[2];else{var V=r(i.s),j=r(A);y=n,S=function(e,t,n){var r,a,i,o,s,u=[],l=e[0],c=e[1],d=e[2],f=e[3],v=t[0],m=t[1],p=t[2],h=t[3];return(a=l*v+c*m+d*p+f*h)<0&&(a=-a,v=-v,m=-m,p=-p,h=-h),1-a>1e-6?(r=Math.acos(a),i=Math.sin(r),o=Math.sin((1-n)*r)/i,s=Math.sin(n*r)/i):(o=1-n,s=n),u[0]=o*l+s*v,u[1]=o*c+s*m,u[2]=o*d+s*p,u[3]=o*f+s*h,u}(V,j,(e-O)/(M-O)),b=S[0],w=S[1],I=S[2],E=S[3],C=Math.atan2(2*w*E-2*b*I,1-2*w*w-2*I*I),D=Math.asin(2*b*w+2*I*E),_=Math.atan2(2*b*E-2*w*I,1-2*b*b-2*I*I),y[0]=C/degToRads,y[1]=D/degToRads,y[2]=_/degToRads}else for(p=0;p=M?c=1:e=r&&t>=r||this._caching.lastFrame=t&&(this._caching._lastKeyframeIndex=-1,this._caching.lastIndex=0);var a=this.interpolateValue(t,this._caching);this.pv=a}return this._caching.lastFrame=t,this.pv}function i(e){var n;if("unidimensional"===this.propType)n=e*this.mult,t(this.v-n)>1e-5&&(this.v=n,this._mdf=!0);else for(var r=0,a=this.v.length;r1e-5&&(this.v[r]=n,this._mdf=!0),r+=1}function o(){if(this.elem.globalData.frameId!==this.frameId&&this.effectsSequence.length)if(this.lock)this.setVValue(this.pv);else{var e;this.lock=!0,this._mdf=this._isFirstFrame;var t=this.effectsSequence.length,n=this.kf?this.pv:this.data.k;for(e=0;e=this._maxLength&&this.doubleArrayLength(),n){case"v":i=this.v;break;case"i":i=this.i;break;case"o":i=this.o;break;default:i=[]}(!i[r]||i[r]&&!a)&&(i[r]=pointPool.newElement()),i[r][0]=e,i[r][1]=t},ShapePath.prototype.setTripleAt=function(e,t,n,r,a,i,o,s){this.setXYAt(e,t,"v",o,s),this.setXYAt(n,r,"o",o,s),this.setXYAt(a,i,"i",o,s)},ShapePath.prototype.reverse=function(){var e=new ShapePath;e.setPathData(this.c,this._length);var t=this.v,n=this.o,r=this.i,a=0;this.c&&(e.setTripleAt(t[0][0],t[0][1],r[0][0],r[0][1],n[0][0],n[0][1],0,!1),a=1);var i,o=this._length-1,s=this._length;for(i=a;i=v[v.length-1].t-this.offsetTime)r=v[v.length-1].s?v[v.length-1].s[0]:v[v.length-2].e[0],i=!0;else{for(var m,p,h,g=f,A=v.length-1,y=!0;y&&(m=v[g],!((p=v[g+1]).t-this.offsetTime>e));)g=p.t-this.offsetTime)c=1;else if(er&&t>r)||(this._caching.lastIndex=a0||e>-1e-6&&e<0?r(1e4*e)/1e4:e}function x(){var e=this.props;return"matrix("+T(e[0])+","+T(e[1])+","+T(e[4])+","+T(e[5])+","+T(e[12])+","+T(e[13])+")"}return function(){this.reset=a,this.rotate=i,this.rotateX=o,this.rotateY=s,this.rotateZ=u,this.skew=c,this.skewFromAxis=d,this.shear=l,this.scale=f,this.setTransform=v,this.translate=m,this.transform=p,this.applyToPoint=S,this.applyToX=b,this.applyToY=w,this.applyToZ=I,this.applyToPointArray=M,this.applyToTriplePoints=_,this.applyToPointStringified=O,this.toCSS=P,this.to2dCSS=x,this.clone=A,this.cloneFromProps=y,this.equals=g,this.inversePoints=D,this.inversePoint=C,this.getInverseMatrix=E,this._t=this.transform,this.isIdentity=h,this._identity=!0,this._identityCalculated=!1,this.props=createTypedArray("float32",16),this.reset()}}();function _typeof$3(e){return _typeof$3="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof$3(e)}var lottie={},standalone="__[STANDALONE]__",animationData="__[ANIMATIONDATA]__",renderer="";function setLocation(e){setLocationHref(e)}function searchAnimations(){!0===standalone?animationManager.searchAnimations(animationData,standalone,renderer):animationManager.searchAnimations()}function setSubframeRendering(e){setSubframeEnabled(e)}function setPrefix(e){setIdPrefix(e)}function loadAnimation(e){return!0===standalone&&(e.animationData=JSON.parse(animationData)),animationManager.loadAnimation(e)}function setQuality(e){if("string"==typeof e)switch(e){case"high":setDefaultCurveSegments(200);break;default:case"medium":setDefaultCurveSegments(50);break;case"low":setDefaultCurveSegments(10)}else!isNaN(e)&&e>1&&setDefaultCurveSegments(e);getDefaultCurveSegments()>=50?roundValues(!1):roundValues(!0)}function inBrowser(){return"undefined"!=typeof navigator}function installPlugin(e,t){"expressions"===e&&setExpressionsPlugin(t)}function getFactory(e){switch(e){case"propertyFactory":return PropertyFactory;case"shapePropertyFactory":return ShapePropertyFactory;case"matrix":return Matrix;default:return null}}function checkReady(){"complete"===document.readyState&&(clearInterval(readyStateCheckInterval),searchAnimations())}function getQueryVariable(e){for(var t=queryString.split("&"),n=0;n=1?i.push({s:e-1,e:t-1}):(i.push({s:e,e:1}),i.push({s:0,e:t-1}));var o,s,u=[],l=i.length;for(o=0;or+n||(c=s.s*a<=r?0:(s.s*a-r)/n,d=s.e*a>=r+n?1:(s.e*a-r)/n,u.push([c,d]))}return u.length||u.push([0,0]),u},TrimModifier.prototype.releasePathsData=function(e){var t,n=e.length;for(t=0;t1?1+i:this.s.v<0?0+i:this.s.v+i)>(n=this.e.v>1?1+i:this.e.v<0?0+i:this.e.v+i)){var o=t;t=n,n=o}t=1e-4*Math.round(1e4*t),n=1e-4*Math.round(1e4*n),this.sValue=t,this.eValue=n}else t=this.sValue,n=this.eValue;var s,u,l,c,d,f=this.shapes.length,v=0;if(n===t)for(a=0;a=0;a-=1)if((m=this.shapes[a]).shape._mdf){for((p=m.localShapeCollection).releaseShapes(),2===this.m&&f>1?(g=this.calculateShapeEdges(t,n,m.totalShapeLength,S,v),S+=m.totalShapeLength):g=[[A,y]],u=g.length,s=0;s=1?h.push({s:m.totalShapeLength*(A-1),e:m.totalShapeLength*(y-1)}):(h.push({s:m.totalShapeLength*A,e:m.totalShapeLength}),h.push({s:0,e:m.totalShapeLength*(y-1)}));var b=this.addShapes(m,h[0]);if(h[0].s!==h[0].e){if(h.length>1)if(m.shape.paths.shapes[m.shape.paths._length-1].c){var w=b.pop();this.addPaths(b,p),b=this.addShapes(m,h[1],w)}else this.addPaths(b,p),b=this.addShapes(m,h[1]);this.addPaths(b,p)}}m.shape.paths=p}}},TrimModifier.prototype.addPaths=function(e,t){var n,r=e.length;for(n=0;nt.e){n.c=!1;break}t.s<=m&&t.e>=m+o.addedLength?(this.addSegment(f[r].v[a-1],f[r].o[a-1],f[r].i[a],f[r].v[a],n,s,h),h=!1):(l=bez.getNewSegment(f[r].v[a-1],f[r].v[a],f[r].o[a-1],f[r].i[a],(t.s-m)/o.addedLength,(t.e-m)/o.addedLength,u[a-1]),this.addSegmentFromArray(l,n,s,h),h=!1,n.c=!1),m+=o.addedLength,s+=1}if(f[r].c&&u.length){if(o=u[a-1],m<=t.e){var g=u[a-1].addedLength;t.s<=m&&t.e>=m+g?(this.addSegment(f[r].v[a-1],f[r].o[a-1],f[r].i[0],f[r].v[0],n,s,h),h=!1):(l=bez.getNewSegment(f[r].v[a-1],f[r].v[0],f[r].o[a-1],f[r].i[0],(t.s-m)/g,(t.e-m)/g,u[a-1]),this.addSegmentFromArray(l,n,s,h),h=!1,n.c=!1)}else n.c=!1;m+=o.addedLength,s+=1}if(n._length&&(n.setXYAt(n.v[c][0],n.v[c][1],"i",c),n.setXYAt(n.v[n._length-1][0],n.v[n._length-1][1],"o",n._length-1)),m>t.e)break;r=this.p.keyframes[this.p.keyframes.length-1].t?(r=this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length-1].t/n,0),a=this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length-1].t-.05)/n,0)):(r=this.p.pv,a=this.p.getValueAtTime((this.p._caching.lastFrame+this.p.offsetTime-.01)/n,this.p.offsetTime));else if(this.px&&this.px.keyframes&&this.py.keyframes&&this.px.getValueAtTime&&this.py.getValueAtTime){r=[],a=[];var i=this.px,o=this.py;i._caching.lastFrame+i.offsetTime<=i.keyframes[0].t?(r[0]=i.getValueAtTime((i.keyframes[0].t+.01)/n,0),r[1]=o.getValueAtTime((o.keyframes[0].t+.01)/n,0),a[0]=i.getValueAtTime(i.keyframes[0].t/n,0),a[1]=o.getValueAtTime(o.keyframes[0].t/n,0)):i._caching.lastFrame+i.offsetTime>=i.keyframes[i.keyframes.length-1].t?(r[0]=i.getValueAtTime(i.keyframes[i.keyframes.length-1].t/n,0),r[1]=o.getValueAtTime(o.keyframes[o.keyframes.length-1].t/n,0),a[0]=i.getValueAtTime((i.keyframes[i.keyframes.length-1].t-.01)/n,0),a[1]=o.getValueAtTime((o.keyframes[o.keyframes.length-1].t-.01)/n,0)):(r=[i.pv,o.pv],a[0]=i.getValueAtTime((i._caching.lastFrame+i.offsetTime-.01)/n,i.offsetTime),a[1]=o.getValueAtTime((o._caching.lastFrame+o.offsetTime-.01)/n,o.offsetTime))}else r=a=e;this.v.rotate(-Math.atan2(r[1]-a[1],r[0]-a[0]))}this.data.p&&this.data.p.s?this.data.p.z?this.v.translate(this.px.v,this.py.v,-this.pz.v):this.v.translate(this.px.v,this.py.v,0):this.v.translate(this.p.v[0],this.p.v[1],-this.p.v[2])}this.frameId=this.elem.globalData.frameId}},precalculateMatrix:function(){if(!this.a.k&&(this.pre.translate(-this.a.v[0],-this.a.v[1],this.a.v[2]),this.appliedTransformations=1,!this.s.effectsSequence.length)){if(this.pre.scale(this.s.v[0],this.s.v[1],this.s.v[2]),this.appliedTransformations=2,this.sk){if(this.sk.effectsSequence.length||this.sa.effectsSequence.length)return;this.pre.skewFromAxis(-this.sk.v,this.sa.v),this.appliedTransformations=3}this.r?this.r.effectsSequence.length||(this.pre.rotate(-this.r.v),this.appliedTransformations=4):this.rz.effectsSequence.length||this.ry.effectsSequence.length||this.rx.effectsSequence.length||this.or.effectsSequence.length||(this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]),this.appliedTransformations=4)}},autoOrient:function(){}},extendPrototype([DynamicPropertyContainer],t),t.prototype.addDynamicProperty=function(e){this._addDynamicProperty(e),this.elem.addDynamicProperty(e),this._isDirty=!0},t.prototype._addDynamicProperty=DynamicPropertyContainer.prototype.addDynamicProperty,{getTransformProperty:function(e,n,r){return new t(e,n,r)}}}();function RepeaterModifier(){}function RoundCornersModifier(){}function getFontProperties(e){for(var t=e.fStyle?e.fStyle.split(" "):[],n="normal",r="normal",a=t.length,i=0;i0;)n-=1,this._elements.unshift(t[n]);this.dynamicProperties.length?this.k=!0:this.getValue(!0)},RepeaterModifier.prototype.resetElements=function(e){var t,n=e.length;for(t=0;t0?Math.floor(f):Math.ceil(f),p=this.pMatrix.props,h=this.rMatrix.props,g=this.sMatrix.props;this.pMatrix.reset(),this.rMatrix.reset(),this.sMatrix.reset(),this.tMatrix.reset(),this.matrix.reset();var A,y,S=0;if(f>0){for(;Sm;)this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,1,!0),S-=1;v&&(this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,-v,!0),S-=v)}for(r=1===this.data.m?0:this._currentCopies-1,a=1===this.data.m?1:-1,i=this._currentCopies;i;){if(y=(n=(t=this.elemsData[r].it)[t.length-1].transform.mProps.v.props).length,t[t.length-1].transform.mProps._mdf=!0,t[t.length-1].transform.op._mdf=!0,t[t.length-1].transform.op.v=1===this._currentCopies?this.so.v:this.so.v+(this.eo.v-this.so.v)*(r/(this._currentCopies-1)),0!==S){for((0!==r&&1===a||r!==this._currentCopies-1&&-1===a)&&this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,1,!1),this.matrix.transform(h[0],h[1],h[2],h[3],h[4],h[5],h[6],h[7],h[8],h[9],h[10],h[11],h[12],h[13],h[14],h[15]),this.matrix.transform(g[0],g[1],g[2],g[3],g[4],g[5],g[6],g[7],g[8],g[9],g[10],g[11],g[12],g[13],g[14],g[15]),this.matrix.transform(p[0],p[1],p[2],p[3],p[4],p[5],p[6],p[7],p[8],p[9],p[10],p[11],p[12],p[13],p[14],p[15]),A=0;A0&&(c=!1),c){var d=createTag("style");d.setAttribute("f-forigin",r[n].fOrigin),d.setAttribute("f-origin",r[n].origin),d.setAttribute("f-family",r[n].fFamily),d.type="text/css",d.innerText="@font-face {font-family: "+r[n].fFamily+"; font-style: normal; src: url('"+r[n].fPath+"');}",t.appendChild(d)}}else if("g"===r[n].fOrigin||1===r[n].origin){for(u=document.querySelectorAll('link[f-forigin="g"], link[f-origin="1"]'),l=0;le?!0!==this.isInRange&&(this.globalData._mdf=!0,this._mdf=!0,this.isInRange=!0,this.show()):!1!==this.isInRange&&(this.globalData._mdf=!0,this.isInRange=!1,this.hide())},renderRenderable:function(){var e,t=this.renderableComponents.length;for(e=0;e0&&(this.maskElement.setAttribute("id",h),this.element.maskedElement.setAttribute(A,"url("+getLocationHref()+"#"+h+")"),i.appendChild(this.maskElement)),this.viewData.length&&this.element.addRenderableComponent(this)}FootageElement.prototype.prepareFrame=function(){},extendPrototype([RenderableElement,BaseElement,FrameElement],FootageElement),FootageElement.prototype.getBaseElement=function(){return null},FootageElement.prototype.renderFrame=function(){},FootageElement.prototype.destroy=function(){},FootageElement.prototype.initExpressions=function(){this.layerInterface=FootageInterface(this)},FootageElement.prototype.getFootageData=function(){return this.footageData},AudioElement.prototype.prepareFrame=function(e){if(this.prepareRenderableFrame(e,!0),this.prepareProperties(e,!0),this.tm._placeholder)this._currentTime=e/this.data.sr;else{var t=this.tm.v;this._currentTime=t}this._volume=this.lv.v[0];var n=this._volume*this._volumeMultiplier;this._previousVolume!==n&&(this._previousVolume=n,this.audio.volume(n))},extendPrototype([RenderableElement,BaseElement,FrameElement],AudioElement),AudioElement.prototype.renderFrame=function(){this.isInRange&&this._canPlay&&(this._isPlaying?(!this.audio.playing()||Math.abs(this._currentTime/this.globalData.frameRate-this.audio.seek())>.1)&&this.audio.seek(this._currentTime/this.globalData.frameRate):(this.audio.play(),this.audio.seek(this._currentTime/this.globalData.frameRate),this._isPlaying=!0))},AudioElement.prototype.show=function(){},AudioElement.prototype.hide=function(){this.audio.pause(),this._isPlaying=!1},AudioElement.prototype.pause=function(){this.audio.pause(),this._isPlaying=!1,this._canPlay=!1},AudioElement.prototype.resume=function(){this._canPlay=!0},AudioElement.prototype.setRate=function(e){this.audio.rate(e)},AudioElement.prototype.volume=function(e){this._volumeMultiplier=e,this._previousVolume=e*this._volume,this.audio.volume(this._previousVolume)},AudioElement.prototype.getBaseElement=function(){return null},AudioElement.prototype.destroy=function(){},AudioElement.prototype.sourceRectAtTime=function(){},AudioElement.prototype.initExpressions=function(){},BaseRenderer.prototype.checkLayers=function(e){var t,n,r=this.layers.length;for(this.completeLayers=!0,t=r-1;t>=0;t-=1)this.elements[t]||(n=this.layers[t]).ip-n.st<=e-this.layers[t].st&&n.op-n.st>e-this.layers[t].st&&this.buildItem(t),this.completeLayers=!!this.elements[t]&&this.completeLayers;this.checkPendingElements()},BaseRenderer.prototype.createItem=function(e){switch(e.ty){case 2:return this.createImage(e);case 0:return this.createComp(e);case 1:return this.createSolid(e);case 3:default:return this.createNull(e);case 4:return this.createShape(e);case 5:return this.createText(e);case 6:return this.createAudio(e);case 13:return this.createCamera(e);case 15:return this.createFootage(e)}},BaseRenderer.prototype.createCamera=function(){throw new Error("You're using a 3d camera. Try the html renderer.")},BaseRenderer.prototype.createAudio=function(e){return new AudioElement(e,this.globalData,this)},BaseRenderer.prototype.createFootage=function(e){return new FootageElement(e,this.globalData,this)},BaseRenderer.prototype.buildAllItems=function(){var e,t=this.layers.length;for(e=0;e1&&(i+=" C"+t.o[r-1][0]+","+t.o[r-1][1]+" "+t.i[0][0]+","+t.i[0][1]+" "+t.v[0][0]+","+t.v[0][1]),n.lastPath!==i){var o="";n.elem&&(t.c&&(o=e.inv?this.solidPath+i:i),n.elem.setAttribute("d",o)),n.lastPath=i}},MaskElement.prototype.destroy=function(){this.element=null,this.globalData=null,this.maskElement=null,this.data=null,this.masksProperties=null};var filtersFactory=function(){var e={createFilter:function(e,t){var n=createNS("filter");return n.setAttribute("id",e),!0!==t&&(n.setAttribute("filterUnits","objectBoundingBox"),n.setAttribute("x","0%"),n.setAttribute("y","0%"),n.setAttribute("width","100%"),n.setAttribute("height","100%")),n},createAlphaToLuminanceFilter:function(){var e=createNS("feColorMatrix");return e.setAttribute("type","matrix"),e.setAttribute("color-interpolation-filters","sRGB"),e.setAttribute("values","0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1"),e}};return e}(),featureSupport=function(){var e={maskType:!0};return(/MSIE 10/i.test(navigator.userAgent)||/MSIE 9/i.test(navigator.userAgent)||/rv:11.0/i.test(navigator.userAgent)||/Edge\/\d./i.test(navigator.userAgent))&&(e.maskType=!1),e}(),registeredEffects={},idPrefix="filter_result_";function SVGEffects(e){var t,n,r="SourceGraphic",a=e.data.ef?e.data.ef.length:0,i=createElementID(),o=filtersFactory.createFilter(i,!0),s=0;for(this.filters=[],t=0;t=0&&!this.shapeModifiers[e].processShapes(this._isFirstFrame);e-=1);}},searchProcessedElement:function(e){for(var t=this.processedElements,n=0,r=t.length;n.01)return!1;n+=1}return!0},GradientProperty.prototype.checkCollapsable=function(){if(this.o.length/2!=this.c.length/4)return!1;if(this.data.k.k[0].s)for(var e=0,t=this.data.k.k.length;e0;)u=r.transformers[p].mProps._mdf||u,m-=1,p-=1;if(u)for(m=g-r.styles[c].lvl,p=r.transformers.length-1;m>0;)v=r.transformers[p].mProps.v.props,f.transform(v[0],v[1],v[2],v[3],v[4],v[5],v[6],v[7],v[8],v[9],v[10],v[11],v[12],v[13],v[14],v[15]),m-=1,p-=1}else f=e;if(o=(d=r.sh.paths)._length,u){for(s="",i=0;i=1?A=.99:A<=-1&&(A=-.99);var y=s*A,S=Math.cos(g+t.a.v)*y+c[0],b=Math.sin(g+t.a.v)*y+c[1];u.setAttribute("fx",S),u.setAttribute("fy",b),l&&!t.g._collapsable&&(t.of.setAttribute("fx",S),t.of.setAttribute("fy",b))}}function u(e,t,n){var r=t.style,a=t.d;a&&(a._mdf||n)&&a.dashStr&&(r.pElem.setAttribute("stroke-dasharray",a.dashStr),r.pElem.setAttribute("stroke-dashoffset",a.dashoffset[0])),t.c&&(t.c._mdf||n)&&r.pElem.setAttribute("stroke","rgb("+bmFloor(t.c.v[0])+","+bmFloor(t.c.v[1])+","+bmFloor(t.c.v[2])+")"),(t.o._mdf||n)&&r.pElem.setAttribute("stroke-opacity",t.o.v),(t.w._mdf||n)&&(r.pElem.setAttribute("stroke-width",t.w.v),r.msElem&&r.msElem.setAttribute("stroke-width",t.w.v))}return{createRenderFunction:function(e){switch(e.ty){case"fl":return i;case"gf":return s;case"gs":return o;case"st":return u;case"sh":case"el":case"rc":case"sr":return a;case"tr":return n;case"no":return r;default:return null}}}}();function SVGShapeElement(e,t,n){this.shapes=[],this.shapesData=e.shapes,this.stylesList=[],this.shapeModifiers=[],this.itemsData=[],this.processedElements=[],this.animatedContents=[],this.initElement(e,t,n),this.prevViewData=[]}function LetterProps(e,t,n,r,a,i){this.o=e,this.sw=t,this.sc=n,this.fc=r,this.m=a,this.p=i,this._mdf={o:!0,sw:!!t,sc:!!n,fc:!!r,m:!0,p:!0}}function TextProperty(e,t){this._frameId=initialDefaultFrame,this.pv="",this.v="",this.kf=!1,this._isFirstFrame=!0,this._mdf=!1,this.data=t,this.elem=e,this.comp=this.elem.comp,this.keysIndex=0,this.canResize=!1,this.minimumFontSize=1,this.effectsSequence=[],this.currentData={ascent:0,boxWidth:this.defaultBoxWidth,f:"",fStyle:"",fWeight:"",fc:"",j:"",justifyOffset:"",l:[],lh:0,lineWidths:[],ls:"",of:"",s:"",sc:"",sw:0,t:0,tr:0,sz:0,ps:null,fillColorAnim:!1,strokeColorAnim:!1,strokeWidthAnim:!1,yOffset:0,finalSize:0,finalText:[],finalLineHeight:0,__complete:!1},this.copyData(this.currentData,this.data.d.k[0].s),this.searchProperty()||this.completeTextData(this.currentData)}extendPrototype([BaseElement,TransformElement,SVGBaseElement,IShapeElement,HierarchyElement,FrameElement,RenderableDOMElement],SVGShapeElement),SVGShapeElement.prototype.initSecondaryElement=function(){},SVGShapeElement.prototype.identityMatrix=new Matrix,SVGShapeElement.prototype.buildExpressionInterface=function(){},SVGShapeElement.prototype.createContent=function(){this.searchShapes(this.shapesData,this.itemsData,this.prevViewData,this.layerElement,0,[],!0),this.filterUniqueShapes()},SVGShapeElement.prototype.filterUniqueShapes=function(){var e,t,n,r,a=this.shapes.length,i=this.stylesList.length,o=[],s=!1;for(n=0;n1&&s&&this.setShapesAsAnimated(o)}},SVGShapeElement.prototype.setShapesAsAnimated=function(e){var t,n=e.length;for(t=0;t=0;s-=1){if((f=this.searchProcessedElement(e[s]))?t[s]=n[f-1]:e[s]._render=o,"fl"===e[s].ty||"st"===e[s].ty||"gf"===e[s].ty||"gs"===e[s].ty||"no"===e[s].ty)f?t[s].style.closed=!1:t[s]=this.createStyleElement(e[s],a),e[s]._render&&t[s].style.pElem.parentNode!==r&&r.appendChild(t[s].style.pElem),p.push(t[s].style);else if("gr"===e[s].ty){if(f)for(l=t[s].it.length,u=0;u1,this.kf&&this.addEffect(this.getKeyframeValue.bind(this)),this.kf},TextProperty.prototype.addEffect=function(e){this.effectsSequence.push(e),this.elem.addDynamicProperty(this)},TextProperty.prototype.getValue=function(e){if(this.elem.globalData.frameId!==this.frameId&&this.effectsSequence.length||e){this.currentData.t=this.data.d.k[this.keysIndex].s.t;var t=this.currentData,n=this.keysIndex;if(this.lock)this.setCurrentData(this.currentData);else{var r;this.lock=!0,this._mdf=!1;var a=this.effectsSequence.length,i=e||this.data.d.k[this.keysIndex].s;for(r=0;rt);)n+=1;return this.keysIndex!==n&&(this.keysIndex=n),this.data.d.k[this.keysIndex].s},TextProperty.prototype.buildFinalText=function(e){for(var t,n,r=[],a=0,i=e.length,o=!1;a=55296&&t<=56319?(n=e.charCodeAt(a+1))>=56320&&n<=57343?(o||FontManager.isModifier(t,n)?(r[r.length-1]+=e.substr(a,2),o=!1):r.push(e.substr(a,2)),a+=1):r.push(e.charAt(a)):t>56319?(n=e.charCodeAt(a+1),FontManager.isZeroWidthJoiner(t,n)?(o=!0,r[r.length-1]+=e.substr(a,2),a+=1):r.push(e.charAt(a))):FontManager.isZeroWidthJoiner(t)?(r[r.length-1]+=e.charAt(a),o=!0):r.push(e.charAt(a)),a+=1;return r},TextProperty.prototype.completeTextData=function(e){e.__complete=!0;var t,n,r,a,i,o,s,u=this.elem.globalData.fontManager,l=this.data,c=[],d=0,f=l.m.g,v=0,m=0,p=0,h=[],g=0,A=0,y=u.getFontByName(e.f),S=0,b=getFontProperties(y);e.fWeight=b.weight,e.fStyle=b.style,e.finalSize=e.s,e.finalText=this.buildFinalText(e.t),n=e.finalText.length,e.finalLineHeight=e.lh;var w,I=e.tr/1e3*e.finalSize;if(e.sz)for(var E,C,D=!0,_=e.sz[0],M=e.sz[1];D;){E=0,g=0,n=(C=this.buildFinalText(e.t)).length,I=e.tr/1e3*e.finalSize;var O=-1;for(t=0;t_&&" "!==C[t]?(-1===O?n+=1:t=O,E+=e.finalLineHeight||1.2*e.finalSize,C.splice(t,O===t?1:0,"\r"),O=-1,g=0):(g+=S,g+=I);E+=y.ascent*e.finalSize/100,this.canResize&&e.finalSize>this.minimumFontSize&&MA?g:A,g=-2*I,a="",r=!0,p+=1):a=P,u.chars?(s=u.getCharData(P,y.fStyle,u.getFontByName(e.f).fFamily),S=r?0:s.w*e.finalSize/100):S=u.measureText(a,e.f,e.finalSize)," "===P?T+=S+I:(g+=S+I+T,T=0),c.push({l:S,an:S,add:v,n:r,anIndexes:[],val:a,line:p,animatorJustifyOffset:0}),2==f){if(v+=S,""===a||" "===a||t===n-1){for(""!==a&&" "!==a||(v-=S);m<=t;)c[m].an=v,c[m].ind=d,c[m].extra=S,m+=1;d+=1,v=0}}else if(3==f){if(v+=S,""===a||t===n-1){for(""===a&&(v-=S);m<=t;)c[m].an=v,c[m].ind=d,c[m].extra=S,m+=1;v=0,d+=1}}else c[d].ind=d,c[d].extra=0,d+=1;if(e.l=c,A=g>A?g:A,h.push(g),e.sz)e.boxWidth=e.sz[0],e.justifyOffset=0;else switch(e.boxWidth=A,e.j){case 1:e.justifyOffset=-e.boxWidth;break;case 2:e.justifyOffset=-e.boxWidth/2;break;default:e.justifyOffset=0}e.lineWidths=h;var x,R,L,k,N=l.a;o=N.length;var F=[];for(i=0;i0?a=this.ne.v/100:i=-this.ne.v/100,this.xe.v>0?o=1-this.xe.v/100:s=1+this.xe.v/100;var u=BezierFactory.getBezierEasing(a,i,o,s).get,l=0,c=this.finalS,d=this.finalE,f=this.data.sh;if(2===f)l=u(l=d===c?r>=d?1:0:e(0,t(.5/(d-c)+(r-c)/(d-c),1)));else if(3===f)l=u(l=d===c?r>=d?0:1:1-e(0,t(.5/(d-c)+(r-c)/(d-c),1)));else if(4===f)d===c?l=0:(l=e(0,t(.5/(d-c)+(r-c)/(d-c),1)))<.5?l*=2:l=1-2*(l-.5),l=u(l);else if(5===f){if(d===c)l=0;else{var v=d-c,m=-v/2+(r=t(e(0,r+.5-c),d-c)),p=v/2;l=Math.sqrt(1-m*m/(p*p))}l=u(l)}else 6===f?(d===c?l=0:(r=t(e(0,r+.5-c),d-c),l=(1+Math.cos(Math.PI+2*Math.PI*r/(d-c)))/2),l=u(l)):(r>=n(c)&&(l=e(0,t(r-c<0?t(d,1)-(c-r):d-r,1))),l=u(l));if(100!==this.sm.v){var h=.01*this.sm.v;0===h&&(h=1e-8);var g=.5-.5*h;l1&&(l=1)}return l*this.a.v},getValue:function(e){this.iterateDynamicProperties(),this._mdf=e||this._mdf,this._currentTextLength=this.elem.textProperty.currentData.l.length||0,e&&2===this.data.r&&(this.e.v=this._currentTextLength);var t=2===this.data.r?1:100/this.data.totalChars,n=this.o.v/t,r=this.s.v/t+n,a=this.e.v/t+n;if(r>a){var i=r;r=a,a=i}this.finalS=r,this.finalE=a}},extendPrototype([DynamicPropertyContainer],r),{getTextSelectorProp:function(e,t,n){return new r(e,t,n)}}}();function TextAnimatorDataProperty(e,t,n){var r={propType:!1},a=PropertyFactory.getProp,i=t.a;this.a={r:i.r?a(e,i.r,0,degToRads,n):r,rx:i.rx?a(e,i.rx,0,degToRads,n):r,ry:i.ry?a(e,i.ry,0,degToRads,n):r,sk:i.sk?a(e,i.sk,0,degToRads,n):r,sa:i.sa?a(e,i.sa,0,degToRads,n):r,s:i.s?a(e,i.s,1,.01,n):r,a:i.a?a(e,i.a,1,0,n):r,o:i.o?a(e,i.o,0,.01,n):r,p:i.p?a(e,i.p,1,0,n):r,sw:i.sw?a(e,i.sw,0,0,n):r,sc:i.sc?a(e,i.sc,1,0,n):r,fc:i.fc?a(e,i.fc,1,0,n):r,fh:i.fh?a(e,i.fh,0,0,n):r,fs:i.fs?a(e,i.fs,0,.01,n):r,fb:i.fb?a(e,i.fb,0,.01,n):r,t:i.t?a(e,i.t,0,0,n):r},this.s=TextSelectorProp.getTextSelectorProp(e,t.s,n),this.s.t=t.s.t}function TextAnimatorProperty(e,t,n){this._isFirstFrame=!0,this._hasMaskedPath=!1,this._frameId=-1,this._textData=e,this._renderType=t,this._elem=n,this._animatorsData=createSizedArray(this._textData.a.length),this._pathData={},this._moreOptions={alignment:{}},this.renderedLetters=[],this.lettersChangedFlag=!1,this.initDynamicPropertyContainer(n)}function ITextElement(){}TextAnimatorProperty.prototype.searchProperties=function(){var e,t,n=this._textData.a.length,r=PropertyFactory.getProp;for(e=0;e=s+se||!m?(A=(s+se-l)/u.partialLength,B=v.point[0]+(u.point[0]-v.point[0])*A,U=v.point[1]+(u.point[1]-v.point[1])*A,E.translate(-b[0]*_[a].an*.005,-b[1]*k*.01),c=!1):m&&(l+=u.partialLength,(d+=1)>=m.length&&(d=0,p[f+=1]?m=p[f].points:S.v.c?(d=0,m=p[f=0].points):(l-=u.partialLength,m=null)),m&&(v=u,h=(u=m[d]).partialLength));F=_[a].an/2-_[a].add,E.translate(-F,0,0)}else F=_[a].an/2-_[a].add,E.translate(-F,0,0),E.translate(-b[0]*_[a].an*.005,-b[1]*k*.01,0);for(T=0;Te?this.textSpans[e].span:createNS(u?"g":"text"),h<=e){if(o.setAttribute("stroke-linecap","butt"),o.setAttribute("stroke-linejoin","round"),o.setAttribute("stroke-miterlimit","4"),this.textSpans[e].span=o,u){var g=createNS("g");o.appendChild(g),this.textSpans[e].childSpan=g}this.textSpans[e].span=o,this.layerElement.appendChild(o)}o.style.display="inherit"}if(l.reset(),c&&(s[e].n&&(d=-m,f+=n.yOffset,f+=v?1:0,v=!1),this.applyTextPropertiesToMatrix(n,l,s[e].line,d,f),d+=s[e].l||0,d+=m),u){var A;if(1===(p=this.globalData.fontManager.getCharData(n.finalText[e],r.fStyle,this.globalData.fontManager.getFontByName(n.f).fFamily)).t)A=new SVGCompElement(p.data,this.globalData,this);else{var y=emptyShapeData;p.data&&p.data.shapes&&(y=this.buildShapeData(p.data,n.finalSize)),A=new SVGShapeElement(y,this.globalData,this)}if(this.textSpans[e].glyph){var S=this.textSpans[e].glyph;this.textSpans[e].childSpan.removeChild(S.layerElement),S.destroy()}this.textSpans[e].glyph=A,A._debug=!0,A.prepareFrame(0),A.renderFrame(),this.textSpans[e].childSpan.appendChild(A.layerElement),1===p.t&&this.textSpans[e].childSpan.setAttribute("transform","scale("+n.finalSize/100+","+n.finalSize/100+")")}else c&&o.setAttribute("transform","translate("+l.props[12]+","+l.props[13]+")"),o.textContent=s[e].val,o.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve")}c&&o&&o.setAttribute("d","")}else{var b=this.textContainer,w="start";switch(n.j){case 1:w="end";break;case 2:w="middle";break;default:w="start"}b.setAttribute("text-anchor",w),b.setAttribute("letter-spacing",m);var I=this.buildTextContents(n.finalText);for(t=I.length,f=n.ps?n.ps[1]+n.ascent:0,e=0;e=0;t-=1)(this.completeLayers||this.elements[t])&&this.elements[t].prepareFrame(e-this.layers[t].st);if(this.globalData._mdf)for(t=0;t=0;n-=1)(this.completeLayers||this.elements[n])&&(this.elements[n].prepareFrame(this.renderedFrame-this.layers[n].st),this.elements[n]._mdf&&(this._mdf=!0))}},ICompElement.prototype.renderInnerContent=function(){var e,t=this.layers.length;for(e=0;e=0;r-=1)n=e.transforms[r].transform.mProps.v.props,e.finalTransform.transform(n[0],n[1],n[2],n[3],n[4],n[5],n[6],n[7],n[8],n[9],n[10],n[11],n[12],n[13],n[14],n[15]);e._mdf=i},processSequences:function(e){var t,n=this.sequenceList.length;for(t=0;t=0;i-=1){if((u=this.searchProcessedElement(e[i]))?t[i]=n[u-1]:e[i]._shouldRender=r,"fl"===e[i].ty||"st"===e[i].ty||"gf"===e[i].ty||"gs"===e[i].ty)u?t[i].style.closed=!1:t[i]=this.createStyleElement(e[i],m),f.push(t[i].style);else if("gr"===e[i].ty){if(u)for(s=t[i].it.length,o=0;o=0;a-=1)"tr"===t[a].ty?(i=n[a].transform,this.renderShapeTransform(e,i)):"sh"===t[a].ty||"el"===t[a].ty||"rc"===t[a].ty||"sr"===t[a].ty?this.renderPath(t[a],n[a]):"fl"===t[a].ty?this.renderFill(t[a],n[a],i):"st"===t[a].ty?this.renderStroke(t[a],n[a],i):"gf"===t[a].ty||"gs"===t[a].ty?this.renderGradientFill(t[a],n[a],i):"gr"===t[a].ty?this.renderShape(i,t[a].it,n[a].it):t[a].ty;r&&this.drawLayer()},CVShapeElement.prototype.renderStyledShape=function(e,t){if(this._isFirstFrame||t._mdf||e.transforms._mdf){var n,r,a,i=e.trNodes,o=t.paths,s=o._length;i.length=0;var u=e.transforms.finalTransform;for(a=0;a=1?d=.99:d<=-1&&(d=-.99);var f=l*d,v=Math.cos(c+t.a.v)*f+s[0],m=Math.sin(c+t.a.v)*f+s[1];r=o.createRadialGradient(v,m,0,s[0],s[1],l)}var p=e.g.p,h=t.g.c,g=1;for(i=0;is&&"xMidYMid slice"===u||on&&"meet"===i||rn&&"slice"===i)?(e-this.transformCanvas.w*(t/this.transformCanvas.h))/2*this.renderConfig.dpr:"xMax"===s&&(rn&&"slice"===i)?(e-this.transformCanvas.w*(t/this.transformCanvas.h))*this.renderConfig.dpr:0,this.transformCanvas.ty="YMid"===u&&(r>n&&"meet"===i||rn&&"meet"===i||r=0;e-=1)this.elements[e]&&this.elements[e].destroy();this.elements.length=0,this.globalData.canvasContext=null,this.animationItem.container=null,this.destroyed=!0},CanvasRendererBase.prototype.renderFrame=function(e,t){if((this.renderedFrame!==e||!0!==this.renderConfig.clearCanvas||t)&&!this.destroyed&&-1!==e){var n;this.renderedFrame=e,this.globalData.frameNum=e-this.animationItem._isFirstFrame,this.globalData.frameId+=1,this.globalData._mdf=!this.renderConfig.clearCanvas||t,this.globalData.projectInterface.currentFrame=e;var r=this.layers.length;for(this.completeLayers||this.checkLayers(e),n=0;n=0;n-=1)(this.completeLayers||this.elements[n])&&this.elements[n].renderFrame();!0!==this.renderConfig.clearCanvas&&this.restore()}}},CanvasRendererBase.prototype.buildItem=function(e){var t=this.elements;if(!t[e]&&99!==this.layers[e].ty){var n=this.createItem(this.layers[e],this,this.globalData);t[e]=n,n.initExpressions()}},CanvasRendererBase.prototype.checkPendingElements=function(){for(;this.pendingElements.length;)this.pendingElements.pop().checkParenting()},CanvasRendererBase.prototype.hide=function(){this.animationItem.container.style.display="none"},CanvasRendererBase.prototype.show=function(){this.animationItem.container.style.display="block"},extendPrototype([CanvasRendererBase,ICompElement,CVBaseElement],CVCompElement),CVCompElement.prototype.renderInnerContent=function(){var e,t=this.canvasContext;for(t.beginPath(),t.moveTo(0,0),t.lineTo(this.data.w,0),t.lineTo(this.data.w,this.data.h),t.lineTo(0,this.data.h),t.lineTo(0,0),t.clip(),e=this.layers.length-1;e>=0;e-=1)(this.completeLayers||this.elements[e])&&this.elements[e].renderFrame()},CVCompElement.prototype.destroy=function(){var e;for(e=this.layers.length-1;e>=0;e-=1)this.elements[e]&&this.elements[e].destroy();this.layers=null,this.elements=null},CVCompElement.prototype.createComp=function(e){return new CVCompElement(e,this.globalData,this)},extendPrototype([CanvasRendererBase],CanvasRenderer),CanvasRenderer.prototype.createComp=function(e){return new CVCompElement(e,this.globalData,this)},HBaseElement.prototype={checkBlendMode:function(){},initRendererElement:function(){this.baseElement=createTag(this.data.tg||"div"),this.data.hasMask?(this.svgElement=createNS("svg"),this.layerElement=createNS("g"),this.maskedElement=this.layerElement,this.svgElement.appendChild(this.layerElement),this.baseElement.appendChild(this.svgElement)):this.layerElement=this.baseElement,styleDiv(this.baseElement)},createContainerElements:function(){this.renderableEffectsManager=new CVEffects(this),this.transformedElement=this.baseElement,this.maskedElement=this.layerElement,this.data.ln&&this.layerElement.setAttribute("id",this.data.ln),this.data.cl&&this.layerElement.setAttribute("class",this.data.cl),0!==this.data.bm&&this.setBlendMode()},renderElement:function(){var e=this.transformedElement?this.transformedElement.style:{};if(this.finalTransform._matMdf){var t=this.finalTransform.mat.toCSS();e.transform=t,e.webkitTransform=t}this.finalTransform._opMdf&&(e.opacity=this.finalTransform.mProp.o.v)},renderFrame:function(){this.data.hd||this.hidden||(this.renderTransform(),this.renderRenderable(),this.renderElement(),this.renderInnerContent(),this._isFirstFrame&&(this._isFirstFrame=!1))},destroy:function(){this.layerElement=null,this.transformedElement=null,this.matteElement&&(this.matteElement=null),this.maskManager&&(this.maskManager.destroy(),this.maskManager=null)},createRenderableComponents:function(){this.maskManager=new MaskElement(this.data,this,this.globalData)},addEffects:function(){},setMatte:function(){}},HBaseElement.prototype.getBaseElement=SVGBaseElement.prototype.getBaseElement,HBaseElement.prototype.destroyBaseElement=HBaseElement.prototype.destroy,HBaseElement.prototype.buildElementParenting=BaseRenderer.prototype.buildElementParenting,extendPrototype([BaseElement,TransformElement,HBaseElement,HierarchyElement,FrameElement,RenderableDOMElement],HSolidElement),HSolidElement.prototype.createContent=function(){var e;this.data.hasMask?((e=createNS("rect")).setAttribute("width",this.data.sw),e.setAttribute("height",this.data.sh),e.setAttribute("fill",this.data.sc),this.svgElement.setAttribute("width",this.data.sw),this.svgElement.setAttribute("height",this.data.sh)):((e=createTag("div")).style.width=this.data.sw+"px",e.style.height=this.data.sh+"px",e.style.backgroundColor=this.data.sc),this.layerElement.appendChild(e)},extendPrototype([BaseElement,TransformElement,HSolidElement,SVGShapeElement,HBaseElement,HierarchyElement,FrameElement,RenderableElement],HShapeElement),HShapeElement.prototype._renderShapeFrame=HShapeElement.prototype.renderInnerContent,HShapeElement.prototype.createContent=function(){var e;if(this.baseElement.style.fontSize=0,this.data.hasMask)this.layerElement.appendChild(this.shapesContainer),e=this.svgElement;else{e=createNS("svg");var t=this.comp.data?this.comp.data:this.globalData.compSize;e.setAttribute("width",t.w),e.setAttribute("height",t.h),e.appendChild(this.shapesContainer),this.layerElement.appendChild(e)}this.searchShapes(this.shapesData,this.itemsData,this.prevViewData,this.shapesContainer,0,[],!0),this.filterUniqueShapes(),this.shapeCont=e},HShapeElement.prototype.getTransformedPoint=function(e,t){var n,r=e.length;for(n=0;n0&&s<1&&d[f].push(this.calculateF(s,e,t,n,r,f)):(u=i*i-4*o*a)>=0&&((l=(-i+bmSqrt(u))/(2*a))>0&&l<1&&d[f].push(this.calculateF(l,e,t,n,r,f)),(c=(-i-bmSqrt(u))/(2*a))>0&&c<1&&d[f].push(this.calculateF(c,e,t,n,r,f))));this.shapeBoundingBox.left=bmMin.apply(null,d[0]),this.shapeBoundingBox.top=bmMin.apply(null,d[1]),this.shapeBoundingBox.right=bmMax.apply(null,d[0]),this.shapeBoundingBox.bottom=bmMax.apply(null,d[1])},HShapeElement.prototype.calculateF=function(e,t,n,r,a,i){return bmPow(1-e,3)*t[i]+3*bmPow(1-e,2)*e*n[i]+3*(1-e)*bmPow(e,2)*r[i]+bmPow(e,3)*a[i]},HShapeElement.prototype.calculateBoundingBox=function(e,t){var n,r=e.length;for(n=0;nn&&(n=a)}n*=e.mult}else n=e.v*e.mult;t.x-=n,t.xMax+=n,t.y-=n,t.yMax+=n},HShapeElement.prototype.currentBoxContains=function(e){return this.currentBBox.x<=e.x&&this.currentBBox.y<=e.y&&this.currentBBox.width+this.currentBBox.x>=e.x+e.width&&this.currentBBox.height+this.currentBBox.y>=e.y+e.height},HShapeElement.prototype.renderInnerContent=function(){if(this._renderShapeFrame(),!this.hidden&&(this._isFirstFrame||this._mdf)){var e=this.tempBoundingBox,t=999999;if(e.x=t,e.xMax=-t,e.y=t,e.yMax=-t,this.calculateBoundingBox(this.itemsData,e),e.width=e.xMax=0;e-=1){var r=this.hierarchy[e].finalTransform.mProp;this.mat.translate(-r.p.v[0],-r.p.v[1],r.p.v[2]),this.mat.rotateX(-r.or.v[0]).rotateY(-r.or.v[1]).rotateZ(r.or.v[2]),this.mat.rotateX(-r.rx.v).rotateY(-r.ry.v).rotateZ(r.rz.v),this.mat.scale(1/r.s.v[0],1/r.s.v[1],1/r.s.v[2]),this.mat.translate(r.a.v[0],r.a.v[1],r.a.v[2])}if(this.p?this.mat.translate(-this.p.v[0],-this.p.v[1],this.p.v[2]):this.mat.translate(-this.px.v,-this.py.v,this.pz.v),this.a){var a;a=this.p?[this.p.v[0]-this.a.v[0],this.p.v[1]-this.a.v[1],this.p.v[2]-this.a.v[2]]:[this.px.v-this.a.v[0],this.py.v-this.a.v[1],this.pz.v-this.a.v[2]];var i=Math.sqrt(Math.pow(a[0],2)+Math.pow(a[1],2)+Math.pow(a[2],2)),o=[a[0]/i,a[1]/i,a[2]/i],s=Math.sqrt(o[2]*o[2]+o[0]*o[0]),u=Math.atan2(o[1],s),l=Math.atan2(o[0],-o[2]);this.mat.rotateY(l).rotateX(-u)}this.mat.rotateX(-this.rx.v).rotateY(-this.ry.v).rotateZ(this.rz.v),this.mat.rotateX(-this.or.v[0]).rotateY(-this.or.v[1]).rotateZ(this.or.v[2]),this.mat.translate(this.globalData.compSize.w/2,this.globalData.compSize.h/2,0),this.mat.translate(0,0,this.pe.v);var c=!this._prevMat.equals(this.mat);if((c||this.pe._mdf)&&this.comp.threeDElements){var d,f,v;for(t=this.comp.threeDElements.length,e=0;e=e)return this.threeDElements[t].perspectiveElem;t+=1}return null},HybridRendererBase.prototype.createThreeDContainer=function(e,t){var n,r,a=createTag("div");styleDiv(a);var i=createTag("div");if(styleDiv(i),"3d"===t){(n=a.style).width=this.globalData.compSize.w+"px",n.height=this.globalData.compSize.h+"px";var o="50% 50%";n.webkitTransformOrigin=o,n.mozTransformOrigin=o,n.transformOrigin=o;var s="matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)";(r=i.style).transform=s,r.webkitTransform=s}a.appendChild(i);var u={container:i,perspectiveElem:a,startPos:e,endPos:e,type:t};return this.threeDElements.push(u),u},HybridRendererBase.prototype.build3dContainers=function(){var e,t,n=this.layers.length,r="";for(e=0;e=0;e-=1)this.resizerElem.appendChild(this.threeDElements[e].perspectiveElem)},HybridRendererBase.prototype.addTo3dContainer=function(e,t){for(var n=0,r=this.threeDElements.length;no?(e=a/this.globalData.compSize.w,t=a/this.globalData.compSize.w,n=0,r=(i-this.globalData.compSize.h*(a/this.globalData.compSize.w))/2):(e=i/this.globalData.compSize.h,t=i/this.globalData.compSize.h,n=(a-this.globalData.compSize.w*(i/this.globalData.compSize.h))/2,r=0);var s=this.resizerElem.style;s.webkitTransform="matrix3d("+e+",0,0,0,0,"+t+",0,0,0,0,1,0,"+n+","+r+",0,1)",s.transform=s.webkitTransform},HybridRendererBase.prototype.renderFrame=SVGRenderer.prototype.renderFrame,HybridRendererBase.prototype.hide=function(){this.resizerElem.style.display="none"},HybridRendererBase.prototype.show=function(){this.resizerElem.style.display="block"},HybridRendererBase.prototype.initItems=function(){if(this.buildAllItems(),this.camera)this.camera.setup();else{var e,t=this.globalData.compSize.w,n=this.globalData.compSize.h,r=this.threeDElements.length;for(e=0;e=o;)e/=2,t/=2,n>>>=1;return(e+n)/t};return A.int32=function(){return 0|g.g(4)},A.quick=function(){return g.g(4)/4294967296},A.double=A,d(f(g.S),e),(v.pass||m||function(e,n,r,a){return a&&(a.S&&l(a,g),e.state=function(){return l(g,{})}),r?(t.random=e,n):e})(A,h,"global"in v?v.global:this==t,v.state)},d(t.random(),e)}function initialize$2(e){seedRandom([],e)}var propTypes={SHAPE:"shape"};function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}var ExpressionManager=function(){var ob={},Math=BMMath,window=null,document=null,XMLHttpRequest=null,fetch=null,frames=null;function $bm_isInstanceOfArray(e){return e.constructor===Array||e.constructor===Float32Array}function isNumerable(e,t){return"number"===e||"boolean"===e||"string"===e||t instanceof Number}function $bm_neg(e){var t=_typeof(e);if("number"===t||"boolean"===t||e instanceof Number)return-e;if($bm_isInstanceOfArray(e)){var n,r=e.length,a=[];for(n=0;nn){var r=n;n=t,t=r}return Math.min(Math.max(e,t),n)}function radiansToDegrees(e){return e/degToRads}var radians_to_degrees=radiansToDegrees;function degreesToRadians(e){return e*degToRads}var degrees_to_radians=radiansToDegrees,helperLengthArray=[0,0,0,0,0,0];function length(e,t){if("number"==typeof e||e instanceof Number)return t=t||0,Math.abs(e-t);var n;t||(t=helperLengthArray);var r=Math.min(e.length,t.length),a=0;for(n=0;n.5?l/(2-o-s):l/(o+s),o){case r:t=(a-i)/l+(a1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}function hslToRgb(e){var t,n,r,a=e[0],i=e[1],o=e[2];if(0===i)t=o,r=o,n=o;else{var s=o<.5?o*(1+i):o+i-o*i,u=2*o-s;t=hue2rgb(u,s,a+1/3),n=hue2rgb(u,s,a),r=hue2rgb(u,s,a-1/3)}return[t,n,r,e[3]]}function linear(e,t,n,r,a){if(void 0!==r&&void 0!==a||(r=t,a=n,t=0,n=1),n=n)return a;var o,s=n===t?0:(e-t)/(n-t);if(!r.length)return r+(a-r)*s;var u=r.length,l=createTypedArray("float32",u);for(o=0;o1){for(r=0;r1?t=1:t<0&&(t=0);var o=e(t);if($bm_isInstanceOfArray(a)){var s,u=a.length,l=createTypedArray("float32",u);for(s=0;sdata.k[t].t&&edata.k[t+1].t-e?(n=t+2,r=data.k[t+1].t):(n=t+1,r=data.k[t].t);break}}-1===n&&(n=t+1,r=data.k[t].t)}else n=0,r=0;var i={};return i.index=n,i.time=r/elem.comp.globalData.frameRate,i}function key(e){var t,n,r;if(!data.k.length||"number"==typeof data.k[0])throw new Error("The property has no keyframe at index "+e);e-=1,t={time:data.k[e].t/elem.comp.globalData.frameRate,value:[]};var a=Object.prototype.hasOwnProperty.call(data.k[e],"s")?data.k[e].s:data.k[e-1].e;for(r=a.length,n=0;nl.length-1)&&(t=l.length-1),r=c-(a=l[l.length-1-t].t)),"pingpong"===e){if(Math.floor((u-a)/r)%2!=0)return this.getValueAtTime((r-(u-a)%r+a)/this.comp.globalData.frameRate,0)}else{if("offset"===e){var d=this.getValueAtTime(a/this.comp.globalData.frameRate,0),f=this.getValueAtTime(c/this.comp.globalData.frameRate,0),v=this.getValueAtTime(((u-a)%r+a)/this.comp.globalData.frameRate,0),m=Math.floor((u-a)/r);if(this.pv.length){for(o=(s=new Array(d.length)).length,i=0;i=c)return this.pv;if(n?a=c+(r=t?Math.abs(this.elem.comp.globalData.frameRate*t):Math.max(0,this.elem.data.op-c)):((!t||t>l.length-1)&&(t=l.length-1),r=(a=l[t].t)-c),"pingpong"===e){if(Math.floor((c-u)/r)%2==0)return this.getValueAtTime(((c-u)%r+c)/this.comp.globalData.frameRate,0)}else{if("offset"===e){var d=this.getValueAtTime(c/this.comp.globalData.frameRate,0),f=this.getValueAtTime(a/this.comp.globalData.frameRate,0),v=this.getValueAtTime((r-(c-u)%r+c)/this.comp.globalData.frameRate,0),m=Math.floor((c-u)/r)+1;if(this.pv.length){for(o=(s=new Array(d.length)).length,i=0;i1?(a+e-i)/(t-1):1,s=0,u=0;for(n=this.pv.length?createTypedArray("float32",this.pv.length):0;so){var c=s,d=n.c&&s===u-1?0:s+1,f=(o-l)/i[s].addedLength;r=bez.getPointInSegment(n.v[c],n.v[d],n.o[c],n.i[d],f,i[s]);break}l+=i[s].addedLength,s+=1}return r||(r=n.c?[n.v[0][0],n.v[0][1]]:[n.v[n._length-1][0],n.v[n._length-1][1]]),r},vectorOnPath:function(e,t,n){1==e?e=this.v.c:0==e&&(e=.999);var r=this.pointOnPath(e,t),a=this.pointOnPath(e+.001,t),i=a[0]-r[0],o=a[1]-r[1],s=Math.sqrt(Math.pow(i,2)+Math.pow(o,2));return 0===s?[0,0]:"tangent"===n?[i/s,o/s]:[-o/s,i/s]},tangentOnPath:function(e,t){return this.vectorOnPath(e,t,"tangent")},normalOnPath:function(e,t){return this.vectorOnPath(e,t,"normal")},setGroupProperty:expressionHelpers.setGroupProperty,getValueAtTime:expressionHelpers.getStaticValueAtTime},extendPrototype([l],s),extendPrototype([l],u),u.prototype.getValueAtTime=function(e){return this._cachingAtTime||(this._cachingAtTime={shapeValue:shapePool.clone(this.pv),lastIndex:0,lastTime:initialDefaultFrame}),e*=this.elem.globalData.frameRate,(e-=this.offsetTime)!==this._cachingAtTime.lastTime&&(this._cachingAtTime.lastIndex=this._cachingAtTime.lastTime=l?v<0?r:a:r+f*Math.pow((i-e)/v,1/n),c[d]=o,d+=1,s+=256/255;return c.join(" ")},SVGProLevelsFilter.prototype.renderFrame=function(e){if(e||this.filterManager._mdf){var t,n=this.filterManager.effectElements;this.feFuncRComposed&&(e||n[3].p._mdf||n[4].p._mdf||n[5].p._mdf||n[6].p._mdf||n[7].p._mdf)&&(t=this.getTableValue(n[3].p.v,n[4].p.v,n[5].p.v,n[6].p.v,n[7].p.v),this.feFuncRComposed.setAttribute("tableValues",t),this.feFuncGComposed.setAttribute("tableValues",t),this.feFuncBComposed.setAttribute("tableValues",t)),this.feFuncR&&(e||n[10].p._mdf||n[11].p._mdf||n[12].p._mdf||n[13].p._mdf||n[14].p._mdf)&&(t=this.getTableValue(n[10].p.v,n[11].p.v,n[12].p.v,n[13].p.v,n[14].p.v),this.feFuncR.setAttribute("tableValues",t)),this.feFuncG&&(e||n[17].p._mdf||n[18].p._mdf||n[19].p._mdf||n[20].p._mdf||n[21].p._mdf)&&(t=this.getTableValue(n[17].p.v,n[18].p.v,n[19].p.v,n[20].p.v,n[21].p.v),this.feFuncG.setAttribute("tableValues",t)),this.feFuncB&&(e||n[24].p._mdf||n[25].p._mdf||n[26].p._mdf||n[27].p._mdf||n[28].p._mdf)&&(t=this.getTableValue(n[24].p.v,n[25].p.v,n[26].p.v,n[27].p.v,n[28].p.v),this.feFuncB.setAttribute("tableValues",t)),this.feFuncA&&(e||n[31].p._mdf||n[32].p._mdf||n[33].p._mdf||n[34].p._mdf||n[35].p._mdf)&&(t=this.getTableValue(n[31].p.v,n[32].p.v,n[33].p.v,n[34].p.v,n[35].p.v),this.feFuncA.setAttribute("tableValues",t))}},extendPrototype([SVGComposableEffect],SVGDropShadowEffect),SVGDropShadowEffect.prototype.renderFrame=function(e){if(e||this.filterManager._mdf){if((e||this.filterManager.effectElements[4].p._mdf)&&this.feGaussianBlur.setAttribute("stdDeviation",this.filterManager.effectElements[4].p.v/4),e||this.filterManager.effectElements[0].p._mdf){var t=this.filterManager.effectElements[0].p.v;this.feFlood.setAttribute("flood-color",rgbToHex(Math.round(255*t[0]),Math.round(255*t[1]),Math.round(255*t[2])))}if((e||this.filterManager.effectElements[1].p._mdf)&&this.feFlood.setAttribute("flood-opacity",this.filterManager.effectElements[1].p.v/255),e||this.filterManager.effectElements[2].p._mdf||this.filterManager.effectElements[3].p._mdf){var n=this.filterManager.effectElements[3].p.v,r=(this.filterManager.effectElements[2].p.v-90)*degToRads,a=n*Math.cos(r),i=n*Math.sin(r);this.feOffset.setAttribute("dx",a),this.feOffset.setAttribute("dy",i)}}};var _svgMatteSymbols=[];function SVGMatte3Effect(e,t,n){this.initialized=!1,this.filterManager=t,this.filterElem=e,this.elem=n,n.matteElement=createNS("g"),n.matteElement.appendChild(n.layerElement),n.matteElement.appendChild(n.transformedElement),n.baseElement=n.matteElement}function SVGGaussianBlurEffect(e,t,n,r){e.setAttribute("x","-100%"),e.setAttribute("y","-100%"),e.setAttribute("width","300%"),e.setAttribute("height","300%"),this.filterManager=t;var a=createNS("feGaussianBlur");a.setAttribute("result",r),e.appendChild(a),this.feGaussianBlur=a}return SVGMatte3Effect.prototype.findSymbol=function(e){for(var t=0,n=_svgMatteSymbols.length;t=20?"ste":"de")},week:{dow:1,doy:4}})}(n(53806))},2146:function(e,t,n){!function(e){"use strict";e.defineLocale("ar-dz",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"أح_إث_ثلا_أر_خم_جم_سب".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,doy:4}})}(n(53806))},38047:function(e,t,n){!function(e){"use strict";e.defineLocale("ar-kw",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,doy:12}})}(n(53806))},22833:function(e,t,n){!function(e){"use strict";var t={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",0:"0"},n=function(e){return 0===e?0:1===e?1:2===e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},r={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},a=function(e){return function(t,a,i,o){var s=n(t),u=r[e][n(t)];return 2===s&&(u=u[a?0:1]),u.replace(/%d/i,t)}},i=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"];e.defineLocale("ar-ly",{months:i,monthsShort:i,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,t,n){return e<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:a("s"),ss:a("s"),m:a("m"),mm:a("m"),h:a("h"),hh:a("h"),d:a("d"),dd:a("d"),M:a("M"),MM:a("M"),y:a("y"),yy:a("y")},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]})).replace(/,/g,"،")},week:{dow:6,doy:12}})}(n(53806))},30186:function(e,t,n){!function(e){"use strict";e.defineLocale("ar-ma",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:6,doy:12}})}(n(53806))},66922:function(e,t,n){!function(e){"use strict";var t={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},n={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"};e.defineLocale("ar-sa",{months:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,t,n){return e<12?"ص":"م"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,(function(e){return n[e]})).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]})).replace(/,/g,"،")},week:{dow:0,doy:6}})}(n(53806))},490:function(e,t,n){!function(e){"use strict";e.defineLocale("ar-tn",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:1,doy:4}})}(n(53806))},6561:function(e,t,n){!function(e){"use strict";var t={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},n={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},r=function(e){return 0===e?0:1===e?1:2===e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},a={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},i=function(e){return function(t,n,i,o){var s=r(t),u=a[e][r(t)];return 2===s&&(u=u[n?0:1]),u.replace(/%d/i,t)}},o=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"];e.defineLocale("ar",{months:o,monthsShort:o,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,t,n){return e<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:i("s"),ss:i("s"),m:i("m"),mm:i("m"),h:i("h"),hh:i("h"),d:i("d"),dd:i("d"),M:i("M"),MM:i("M"),y:i("y"),yy:i("y")},preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,(function(e){return n[e]})).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]})).replace(/,/g,"،")},week:{dow:6,doy:12}})}(n(53806))},48641:function(e,t,n){!function(e){"use strict";var t={1:"-inci",5:"-inci",8:"-inci",70:"-inci",80:"-inci",2:"-nci",7:"-nci",20:"-nci",50:"-nci",3:"-üncü",4:"-üncü",100:"-üncü",6:"-ncı",9:"-uncu",10:"-uncu",30:"-uncu",60:"-ıncı",90:"-ıncı"};e.defineLocale("az",{months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekdays:"Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə".split("_"),weekdaysShort:"Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən".split("_"),weekdaysMin:"Bz_BE_ÇA_Çə_CA_Cü_Şə".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[sabah saat] LT",nextWeek:"[gələn həftə] dddd [saat] LT",lastDay:"[dünən] LT",lastWeek:"[keçən həftə] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s əvvəl",s:"birneçə saniyə",ss:"%d saniyə",m:"bir dəqiqə",mm:"%d dəqiqə",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},meridiemParse:/gecə|səhər|gündüz|axşam/,isPM:function(e){return/^(gündüz|axşam)$/.test(e)},meridiem:function(e,t,n){return e<4?"gecə":e<12?"səhər":e<17?"gündüz":"axşam"},dayOfMonthOrdinalParse:/\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,ordinal:function(e){if(0===e)return e+"-ıncı";var n=e%10,r=e%100-n,a=e>=100?100:null;return e+(t[n]||t[r]||t[a])},week:{dow:1,doy:7}})}(n(53806))},23299:function(e,t,n){!function(e){"use strict";function t(e,t){var n=e.split("_");return t%10==1&&t%100!=11?n[0]:t%10>=2&&t%10<=4&&(t%100<10||t%100>=20)?n[1]:n[2]}function n(e,n,r){return"m"===r?n?"хвіліна":"хвіліну":"h"===r?n?"гадзіна":"гадзіну":e+" "+t({ss:n?"секунда_секунды_секунд":"секунду_секунды_секунд",mm:n?"хвіліна_хвіліны_хвілін":"хвіліну_хвіліны_хвілін",hh:n?"гадзіна_гадзіны_гадзін":"гадзіну_гадзіны_гадзін",dd:"дзень_дні_дзён",MM:"месяц_месяцы_месяцаў",yy:"год_гады_гадоў"}[r],+e)}e.defineLocale("be",{months:{format:"студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня".split("_"),standalone:"студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань".split("_")},monthsShort:"студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж".split("_"),weekdays:{format:"нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу".split("_"),standalone:"нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота".split("_"),isFormat:/\[ ?[Ууў] ?(?:мінулую|наступную)? ?\] ?dddd/},weekdaysShort:"нд_пн_ат_ср_чц_пт_сб".split("_"),weekdaysMin:"нд_пн_ат_ср_чц_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"},calendar:{sameDay:"[Сёння ў] LT",nextDay:"[Заўтра ў] LT",lastDay:"[Учора ў] LT",nextWeek:function(){return"[У] dddd [ў] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[У мінулую] dddd [ў] LT";case 1:case 2:case 4:return"[У мінулы] dddd [ў] LT"}},sameElse:"L"},relativeTime:{future:"праз %s",past:"%s таму",s:"некалькі секунд",m:n,mm:n,h:n,hh:n,d:"дзень",dd:n,M:"месяц",MM:n,y:"год",yy:n},meridiemParse:/ночы|раніцы|дня|вечара/,isPM:function(e){return/^(дня|вечара)$/.test(e)},meridiem:function(e,t,n){return e<4?"ночы":e<12?"раніцы":e<17?"дня":"вечара"},dayOfMonthOrdinalParse:/\d{1,2}-(і|ы|га)/,ordinal:function(e,t){switch(t){case"M":case"d":case"DDD":case"w":case"W":return e%10!=2&&e%10!=3||e%100==12||e%100==13?e+"-ы":e+"-і";case"D":return e+"-га";default:return e}},week:{dow:1,doy:7}})}(n(53806))},21502:function(e,t,n){!function(e){"use strict";e.defineLocale("bg",{months:"януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември".split("_"),monthsShort:"янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек".split("_"),weekdays:"неделя_понеделник_вторник_сряда_четвъртък_петък_събота".split("_"),weekdaysShort:"нед_пон_вто_сря_чет_пет_съб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Днес в] LT",nextDay:"[Утре в] LT",nextWeek:"dddd [в] LT",lastDay:"[Вчера в] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[В изминалата] dddd [в] LT";case 1:case 2:case 4:case 5:return"[В изминалия] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"след %s",past:"преди %s",s:"няколко секунди",ss:"%d секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дни",M:"месец",MM:"%d месеца",y:"година",yy:"%d години"},dayOfMonthOrdinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(e){var t=e%10,n=e%100;return 0===e?e+"-ев":0===n?e+"-ен":n>10&&n<20?e+"-ти":1===t?e+"-ви":2===t?e+"-ри":7===t||8===t?e+"-ми":e+"-ти"},week:{dow:1,doy:7}})}(n(53806))},24574:function(e,t,n){!function(e){"use strict";e.defineLocale("bm",{months:"Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo".split("_"),monthsShort:"Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des".split("_"),weekdays:"Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri".split("_"),weekdaysShort:"Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib".split("_"),weekdaysMin:"Ka_Nt_Ta_Ar_Al_Ju_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"MMMM [tile] D [san] YYYY",LLL:"MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm",LLLL:"dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm"},calendar:{sameDay:"[Bi lɛrɛ] LT",nextDay:"[Sini lɛrɛ] LT",nextWeek:"dddd [don lɛrɛ] LT",lastDay:"[Kunu lɛrɛ] LT",lastWeek:"dddd [tɛmɛnen lɛrɛ] LT",sameElse:"L"},relativeTime:{future:"%s kɔnɔ",past:"a bɛ %s bɔ",s:"sanga dama dama",ss:"sekondi %d",m:"miniti kelen",mm:"miniti %d",h:"lɛrɛ kelen",hh:"lɛrɛ %d",d:"tile kelen",dd:"tile %d",M:"kalo kelen",MM:"kalo %d",y:"san kelen",yy:"san %d"},week:{dow:1,doy:4}})}(n(53806))},11729:function(e,t,n){!function(e){"use strict";var t={1:"১",2:"২",3:"৩",4:"৪",5:"৫",6:"৬",7:"৭",8:"৮",9:"৯",0:"০"},n={"১":"1","২":"2","৩":"3","৪":"4","৫":"5","৬":"6","৭":"7","৮":"8","৯":"9","০":"0"};e.defineLocale("bn",{months:"জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর".split("_"),monthsShort:"জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে".split("_"),weekdays:"রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার".split("_"),weekdaysShort:"রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি".split("_"),weekdaysMin:"রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি".split("_"),longDateFormat:{LT:"A h:mm সময়",LTS:"A h:mm:ss সময়",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm সময়",LLLL:"dddd, D MMMM YYYY, A h:mm সময়"},calendar:{sameDay:"[আজ] LT",nextDay:"[আগামীকাল] LT",nextWeek:"dddd, LT",lastDay:"[গতকাল] LT",lastWeek:"[গত] dddd, LT",sameElse:"L"},relativeTime:{future:"%s পরে",past:"%s আগে",s:"কয়েক সেকেন্ড",ss:"%d সেকেন্ড",m:"এক মিনিট",mm:"%d মিনিট",h:"এক ঘন্টা",hh:"%d ঘন্টা",d:"এক দিন",dd:"%d দিন",M:"এক মাস",MM:"%d মাস",y:"এক বছর",yy:"%d বছর"},preparse:function(e){return e.replace(/[১২৩৪৫৬৭৮৯০]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},meridiemParse:/রাত|সকাল|দুপুর|বিকাল|রাত/,meridiemHour:function(e,t){return 12===e&&(e=0),"রাত"===t&&e>=4||"দুপুর"===t&&e<5||"বিকাল"===t?e+12:e},meridiem:function(e,t,n){return e<4?"রাত":e<10?"সকাল":e<17?"দুপুর":e<20?"বিকাল":"রাত"},week:{dow:0,doy:6}})}(n(53806))},9925:function(e,t,n){!function(e){"use strict";var t={1:"༡",2:"༢",3:"༣",4:"༤",5:"༥",6:"༦",7:"༧",8:"༨",9:"༩",0:"༠"},n={"༡":"1","༢":"2","༣":"3","༤":"4","༥":"5","༦":"6","༧":"7","༨":"8","༩":"9","༠":"0"};e.defineLocale("bo",{months:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),monthsShort:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),weekdays:"གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་".split("_"),weekdaysShort:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),weekdaysMin:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[དི་རིང] LT",nextDay:"[སང་ཉིན] LT",nextWeek:"[བདུན་ཕྲག་རྗེས་མ], LT",lastDay:"[ཁ་སང] LT",lastWeek:"[བདུན་ཕྲག་མཐའ་མ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ལ་",past:"%s སྔན་ལ",s:"ལམ་སང",ss:"%d སྐར་ཆ།",m:"སྐར་མ་གཅིག",mm:"%d སྐར་མ",h:"ཆུ་ཚོད་གཅིག",hh:"%d ཆུ་ཚོད",d:"ཉིན་གཅིག",dd:"%d ཉིན་",M:"ཟླ་བ་གཅིག",MM:"%d ཟླ་བ",y:"ལོ་གཅིག",yy:"%d ལོ"},preparse:function(e){return e.replace(/[༡༢༣༤༥༦༧༨༩༠]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},meridiemParse:/མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,meridiemHour:function(e,t){return 12===e&&(e=0),"མཚན་མོ"===t&&e>=4||"ཉིན་གུང"===t&&e<5||"དགོང་དག"===t?e+12:e},meridiem:function(e,t,n){return e<4?"མཚན་མོ":e<10?"ཞོགས་ཀས":e<17?"ཉིན་གུང":e<20?"དགོང་དག":"མཚན་མོ"},week:{dow:0,doy:6}})}(n(53806))},1988:function(e,t,n){!function(e){"use strict";function t(e,t,n){return e+" "+a({mm:"munutenn",MM:"miz",dd:"devezh"}[n],e)}function n(e){switch(r(e)){case 1:case 3:case 4:case 5:case 9:return e+" bloaz";default:return e+" vloaz"}}function r(e){return e>9?r(e%10):e}function a(e,t){return 2===t?i(e):e}function i(e){var t={m:"v",b:"v",d:"z"};return void 0===t[e.charAt(0)]?e:t[e.charAt(0)]+e.substring(1)}e.defineLocale("br",{months:"Genver_C'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),monthsShort:"Gen_C'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdays:"Sul_Lun_Meurzh_Merc'her_Yaou_Gwener_Sadorn".split("_"),weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h[e]mm A",LTS:"h[e]mm:ss A",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY h[e]mm A",LLLL:"dddd, D [a viz] MMMM YYYY h[e]mm A"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warc'hoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Dec'h da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s 'zo",s:"un nebeud segondennoù",ss:"%d eilenn",m:"ur vunutenn",mm:t,h:"un eur",hh:"%d eur",d:"un devezh",dd:t,M:"ur miz",MM:t,y:"ur bloaz",yy:n},dayOfMonthOrdinalParse:/\d{1,2}(añ|vet)/,ordinal:function(e){return e+(1===e?"añ":"vet")},week:{dow:1,doy:4}})}(n(53806))},85793:function(e,t,n){!function(e){"use strict";function t(e,t,n){var r=e+" ";switch(n){case"ss":return r+=1===e?"sekunda":2===e||3===e||4===e?"sekunde":"sekundi";case"m":return t?"jedna minuta":"jedne minute";case"mm":return r+=1===e?"minuta":2===e||3===e||4===e?"minute":"minuta";case"h":return t?"jedan sat":"jednog sata";case"hh":return r+=1===e?"sat":2===e||3===e||4===e?"sata":"sati";case"dd":return r+=1===e?"dan":"dana";case"MM":return r+=1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci";case"yy":return r+=1===e?"godina":2===e||3===e||4===e?"godine":"godina"}}e.defineLocale("bs",{months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:t,m:t,mm:t,h:t,hh:t,d:"dan",dd:t,M:"mjesec",MM:t,y:"godinu",yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(53806))},60347:function(e,t,n){!function(e){"use strict";e.defineLocale("ca",{months:{standalone:"gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),format:"de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.".split("_"),monthsParseExact:!0,weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dt_dc_dj_dv_ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a les] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a les] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[demà a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"d'aquí %s",past:"fa %s",s:"uns segons",ss:"%d segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|è|a)/,ordinal:function(e,t){var n=1===e?"r":2===e?"n":3===e?"r":4===e?"t":"è";return"w"!==t&&"W"!==t||(n="a"),e+n},week:{dow:1,doy:4}})}(n(53806))},10999:function(e,t,n){!function(e){"use strict";var t="leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"),n="led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_"),r=[/^led/i,/^úno/i,/^bře/i,/^dub/i,/^kvě/i,/^(čvn|červen$|června)/i,/^(čvc|červenec|července)/i,/^srp/i,/^zář/i,/^říj/i,/^lis/i,/^pro/i],a=/^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;function i(e){return e>1&&e<5&&1!=~~(e/10)}function o(e,t,n,r){var a=e+" ";switch(n){case"s":return t||r?"pár sekund":"pár sekundami";case"ss":return t||r?a+(i(e)?"sekundy":"sekund"):a+"sekundami";case"m":return t?"minuta":r?"minutu":"minutou";case"mm":return t||r?a+(i(e)?"minuty":"minut"):a+"minutami";case"h":return t?"hodina":r?"hodinu":"hodinou";case"hh":return t||r?a+(i(e)?"hodiny":"hodin"):a+"hodinami";case"d":return t||r?"den":"dnem";case"dd":return t||r?a+(i(e)?"dny":"dní"):a+"dny";case"M":return t||r?"měsíc":"měsícem";case"MM":return t||r?a+(i(e)?"měsíce":"měsíců"):a+"měsíci";case"y":return t||r?"rok":"rokem";case"yy":return t||r?a+(i(e)?"roky":"let"):a+"lety"}}e.defineLocale("cs",{months:t,monthsShort:n,monthsRegex:a,monthsShortRegex:a,monthsStrictRegex:/^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,monthsShortStrictRegex:/^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),weekdaysShort:"ne_po_út_st_čt_pá_so".split("_"),weekdaysMin:"ne_po_út_st_čt_pá_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},calendar:{sameDay:"[dnes v] LT",nextDay:"[zítra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v neděli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve středu v] LT";case 4:return"[ve čtvrtek v] LT";case 5:return"[v pátek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[včera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou neděli v] LT";case 1:case 2:return"[minulé] dddd [v] LT";case 3:return"[minulou středu v] LT";case 4:case 5:return"[minulý] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"před %s",s:o,ss:o,m:o,mm:o,h:o,hh:o,d:o,dd:o,M:o,MM:o,y:o,yy:o},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(53806))},81690:function(e,t,n){!function(e){"use strict";e.defineLocale("cv",{months:"кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав".split("_"),monthsShort:"кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш".split("_"),weekdays:"вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун".split("_"),weekdaysShort:"выр_тун_ытл_юн_кӗҫ_эрн_шӑм".split("_"),weekdaysMin:"вр_тн_ыт_юн_кҫ_эр_шм".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]",LLL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm",LLLL:"dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm"},calendar:{sameDay:"[Паян] LT [сехетре]",nextDay:"[Ыран] LT [сехетре]",lastDay:"[Ӗнер] LT [сехетре]",nextWeek:"[Ҫитес] dddd LT [сехетре]",lastWeek:"[Иртнӗ] dddd LT [сехетре]",sameElse:"L"},relativeTime:{future:function(e){return e+(/сехет$/i.exec(e)?"рен":/ҫул$/i.exec(e)?"тан":"ран")},past:"%s каялла",s:"пӗр-ик ҫеккунт",ss:"%d ҫеккунт",m:"пӗр минут",mm:"%d минут",h:"пӗр сехет",hh:"%d сехет",d:"пӗр кун",dd:"%d кун",M:"пӗр уйӑх",MM:"%d уйӑх",y:"пӗр ҫул",yy:"%d ҫул"},dayOfMonthOrdinalParse:/\d{1,2}-мӗш/,ordinal:"%d-мӗш",week:{dow:1,doy:7}})}(n(53806))},72638:function(e,t,n){!function(e){"use strict";e.defineLocale("cy",{months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Heddiw am] LT",nextDay:"[Yfory am] LT",nextWeek:"dddd [am] LT",lastDay:"[Ddoe am] LT",lastWeek:"dddd [diwethaf am] LT",sameElse:"L"},relativeTime:{future:"mewn %s",past:"%s yn ôl",s:"ychydig eiliadau",ss:"%d eiliad",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"},dayOfMonthOrdinalParse:/\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,ordinal:function(e){var t="";return e>20?t=40===e||50===e||60===e||80===e||100===e?"fed":"ain":e>0&&(t=["","af","il","ydd","ydd","ed","ed","ed","fed","fed","fed","eg","fed","eg","eg","fed","eg","eg","fed","eg","fed"][e]),e+t},week:{dow:1,doy:4}})}(n(53806))},66820:function(e,t,n){!function(e){"use strict";e.defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"søn_man_tir_ons_tor_fre_lør".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"på dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[i] dddd[s kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"få sekunder",ss:"%d sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en måned",MM:"%d måneder",y:"et år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(53806))},15502:function(e,t,n){!function(e){"use strict";function t(e,t,n,r){var a={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return t?a[n][0]:a[n][1]}e.defineLocale("de-at",{months:"Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:t,mm:"%d Minuten",h:t,hh:"%d Stunden",d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(53806))},67569:function(e,t,n){!function(e){"use strict";function t(e,t,n,r){var a={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return t?a[n][0]:a[n][1]}e.defineLocale("de-ch",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:t,mm:"%d Minuten",h:t,hh:"%d Stunden",d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(53806))},38413:function(e,t,n){!function(e){"use strict";function t(e,t,n,r){var a={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return t?a[n][0]:a[n][1]}e.defineLocale("de",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:t,mm:"%d Minuten",h:t,hh:"%d Stunden",d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(53806))},15335:function(e,t,n){!function(e){"use strict";var t=["ޖެނުއަރީ","ފެބްރުއަރީ","މާރިޗު","އޭޕްރީލު","މޭ","ޖޫން","ޖުލައި","އޯގަސްޓު","ސެޕްޓެމްބަރު","އޮކްޓޯބަރު","ނޮވެމްބަރު","ޑިސެމްބަރު"],n=["އާދިއްތަ","ހޯމަ","އަންގާރަ","ބުދަ","ބުރާސްފަތި","ހުކުރު","ހޮނިހިރު"];e.defineLocale("dv",{months:t,monthsShort:t,weekdays:n,weekdaysShort:n,weekdaysMin:"އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/މކ|މފ/,isPM:function(e){return"މފ"===e},meridiem:function(e,t,n){return e<12?"މކ":"މފ"},calendar:{sameDay:"[މިއަދު] LT",nextDay:"[މާދަމާ] LT",nextWeek:"dddd LT",lastDay:"[އިއްޔެ] LT",lastWeek:"[ފާއިތުވި] dddd LT",sameElse:"L"},relativeTime:{future:"ތެރޭގައި %s",past:"ކުރިން %s",s:"ސިކުންތުކޮޅެއް",ss:"d% ސިކުންތު",m:"މިނިޓެއް",mm:"މިނިޓު %d",h:"ގަޑިއިރެއް",hh:"ގަޑިއިރު %d",d:"ދުވަހެއް",dd:"ދުވަސް %d",M:"މަހެއް",MM:"މަސް %d",y:"އަހަރެއް",yy:"އަހަރު %d"},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/,/g,"،")},week:{dow:7,doy:12}})}(n(53806))},21406:function(e,t,n){!function(e){"use strict";function t(e){return e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}e.defineLocale("el",{monthsNominativeEl:"Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"),monthsGenitiveEl:"Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου".split("_"),months:function(e,t){return e?"string"==typeof t&&/D/.test(t.substring(0,t.indexOf("MMMM")))?this._monthsGenitiveEl[e.month()]:this._monthsNominativeEl[e.month()]:this._monthsNominativeEl},monthsShort:"Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ".split("_"),weekdays:"Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"),weekdaysShort:"Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"),weekdaysMin:"Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"),meridiem:function(e,t,n){return e>11?n?"μμ":"ΜΜ":n?"πμ":"ΠΜ"},isPM:function(e){return"μ"===(e+"").toLowerCase()[0]},meridiemParse:/[ΠΜ]\.?Μ?\.?/i,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendarEl:{sameDay:"[Σήμερα {}] LT",nextDay:"[Αύριο {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[Χθες {}] LT",lastWeek:function(){return 6===this.day()?"[το προηγούμενο] dddd [{}] LT":"[την προηγούμενη] dddd [{}] LT"},sameElse:"L"},calendar:function(e,n){var r=this._calendarEl[e],a=n&&n.hours();return t(r)&&(r=r.apply(n)),r.replace("{}",a%12==1?"στη":"στις")},relativeTime:{future:"σε %s",past:"%s πριν",s:"λίγα δευτερόλεπτα",ss:"%d δευτερόλεπτα",m:"ένα λεπτό",mm:"%d λεπτά",h:"μία ώρα",hh:"%d ώρες",d:"μία μέρα",dd:"%d μέρες",M:"ένας μήνας",MM:"%d μήνες",y:"ένας χρόνος",yy:"%d χρόνια"},dayOfMonthOrdinalParse:/\d{1,2}η/,ordinal:"%dη",week:{dow:1,doy:4}})}(n(53806))},43432:function(e,t,n){!function(e){"use strict";e.defineLocale("en-SG",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})}(n(53806))},19612:function(e,t,n){!function(e){"use strict";e.defineLocale("en-au",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})}(n(53806))},87302:function(e,t,n){!function(e){"use strict";e.defineLocale("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}})}(n(53806))},21543:function(e,t,n){!function(e){"use strict";e.defineLocale("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})}(n(53806))},96745:function(e,t,n){!function(e){"use strict";e.defineLocale("en-ie",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})}(n(53806))},69560:function(e,t,n){!function(e){"use strict";e.defineLocale("en-il",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}})}(n(53806))},87883:function(e,t,n){!function(e){"use strict";e.defineLocale("en-nz",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})}(n(53806))},38066:function(e,t,n){!function(e){"use strict";e.defineLocale("eo",{months:"januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec".split("_"),weekdays:"dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato".split("_"),weekdaysShort:"dim_lun_mard_merk_ĵaŭ_ven_sab".split("_"),weekdaysMin:"di_lu_ma_me_ĵa_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D[-a de] MMMM, YYYY",LLL:"D[-a de] MMMM, YYYY HH:mm",LLLL:"dddd, [la] D[-a de] MMMM, YYYY HH:mm"},meridiemParse:/[ap]\.t\.m/i,isPM:function(e){return"p"===e.charAt(0).toLowerCase()},meridiem:function(e,t,n){return e>11?n?"p.t.m.":"P.T.M.":n?"a.t.m.":"A.T.M."},calendar:{sameDay:"[Hodiaŭ je] LT",nextDay:"[Morgaŭ je] LT",nextWeek:"dddd [je] LT",lastDay:"[Hieraŭ je] LT",lastWeek:"[pasinta] dddd [je] LT",sameElse:"L"},relativeTime:{future:"post %s",past:"antaŭ %s",s:"sekundoj",ss:"%d sekundoj",m:"minuto",mm:"%d minutoj",h:"horo",hh:"%d horoj",d:"tago",dd:"%d tagoj",M:"monato",MM:"%d monatoj",y:"jaro",yy:"%d jaroj"},dayOfMonthOrdinalParse:/\d{1,2}a/,ordinal:"%da",week:{dow:1,doy:7}})}(n(53806))},61848:function(e,t,n){!function(e){"use strict";var t="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),n="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),r=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],a=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;e.defineLocale("es-do",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,r){return e?/-MMM-/.test(r)?n[e.month()]:t[e.month()]:t},monthsRegex:a,monthsShortRegex:a,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(53806))},32779:function(e,t,n){!function(e){"use strict";var t="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),n="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),r=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],a=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;e.defineLocale("es-us",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,r){return e?/-MMM-/.test(r)?n[e.month()]:t[e.month()]:t},monthsRegex:a,monthsShortRegex:a,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"MM/DD/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:0,doy:6}})}(n(53806))},96730:function(e,t,n){!function(e){"use strict";var t="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),n="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),r=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],a=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;e.defineLocale("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,r){return e?/-MMM-/.test(r)?n[e.month()]:t[e.month()]:t},monthsRegex:a,monthsShortRegex:a,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(53806))},61386:function(e,t,n){!function(e){"use strict";function t(e,t,n,r){var a={s:["mõne sekundi","mõni sekund","paar sekundit"],ss:[e+"sekundi",e+"sekundit"],m:["ühe minuti","üks minut"],mm:[e+" minuti",e+" minutit"],h:["ühe tunni","tund aega","üks tund"],hh:[e+" tunni",e+" tundi"],d:["ühe päeva","üks päev"],M:["kuu aja","kuu aega","üks kuu"],MM:[e+" kuu",e+" kuud"],y:["ühe aasta","aasta","üks aasta"],yy:[e+" aasta",e+" aastat"]};return t?a[n][2]?a[n][2]:a[n][1]:r?a[n][0]:a[n][1]}e.defineLocale("et",{months:"jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[Täna,] LT",nextDay:"[Homme,] LT",nextWeek:"[Järgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s pärast",past:"%s tagasi",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:"%d päeva",M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(53806))},49220:function(e,t,n){!function(e){"use strict";e.defineLocale("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),monthsParseExact:!0,weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",ss:"%d segundo",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(53806))},81123:function(e,t,n){!function(e){"use strict";var t={1:"۱",2:"۲",3:"۳",4:"۴",5:"۵",6:"۶",7:"۷",8:"۸",9:"۹",0:"۰"},n={"۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9","۰":"0"};e.defineLocale("fa",{months:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),monthsShort:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),weekdays:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysShort:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysMin:"ی_د_س_چ_پ_ج_ش".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/قبل از ظهر|بعد از ظهر/,isPM:function(e){return/بعد از ظهر/.test(e)},meridiem:function(e,t,n){return e<12?"قبل از ظهر":"بعد از ظهر"},calendar:{sameDay:"[امروز ساعت] LT",nextDay:"[فردا ساعت] LT",nextWeek:"dddd [ساعت] LT",lastDay:"[دیروز ساعت] LT",lastWeek:"dddd [پیش] [ساعت] LT",sameElse:"L"},relativeTime:{future:"در %s",past:"%s پیش",s:"چند ثانیه",ss:"ثانیه d%",m:"یک دقیقه",mm:"%d دقیقه",h:"یک ساعت",hh:"%d ساعت",d:"یک روز",dd:"%d روز",M:"یک ماه",MM:"%d ماه",y:"یک سال",yy:"%d سال"},preparse:function(e){return e.replace(/[۰-۹]/g,(function(e){return n[e]})).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]})).replace(/,/g,"،")},dayOfMonthOrdinalParse:/\d{1,2}م/,ordinal:"%dم",week:{dow:6,doy:12}})}(n(53806))},95495:function(e,t,n){!function(e){"use strict";var t="nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän".split(" "),n=["nolla","yhden","kahden","kolmen","neljän","viiden","kuuden",t[7],t[8],t[9]];function r(e,t,n,r){var i="";switch(n){case"s":return r?"muutaman sekunnin":"muutama sekunti";case"ss":return r?"sekunnin":"sekuntia";case"m":return r?"minuutin":"minuutti";case"mm":i=r?"minuutin":"minuuttia";break;case"h":return r?"tunnin":"tunti";case"hh":i=r?"tunnin":"tuntia";break;case"d":return r?"päivän":"päivä";case"dd":i=r?"päivän":"päivää";break;case"M":return r?"kuukauden":"kuukausi";case"MM":i=r?"kuukauden":"kuukautta";break;case"y":return r?"vuoden":"vuosi";case"yy":i=r?"vuoden":"vuotta"}return i=a(e,r)+" "+i}function a(e,r){return e<10?r?n[e]:t[e]:e}e.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[tänään] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s päästä",past:"%s sitten",s:r,ss:r,m:r,mm:r,h:r,hh:r,d:r,dd:r,M:r,MM:r,y:r,yy:r},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(53806))},15855:function(e,t,n){!function(e){"use strict";e.defineLocale("fo",{months:"januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur".split("_"),weekdaysShort:"sun_mán_týs_mik_hós_frí_ley".split("_"),weekdaysMin:"su_má_tý_mi_hó_fr_le".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D. MMMM, YYYY HH:mm"},calendar:{sameDay:"[Í dag kl.] LT",nextDay:"[Í morgin kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[Í gjár kl.] LT",lastWeek:"[síðstu] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"um %s",past:"%s síðani",s:"fá sekund",ss:"%d sekundir",m:"ein minuttur",mm:"%d minuttir",h:"ein tími",hh:"%d tímar",d:"ein dagur",dd:"%d dagar",M:"ein mánaður",MM:"%d mánaðir",y:"eitt ár",yy:"%d ár"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(53806))},72251:function(e,t,n){!function(e){"use strict";e.defineLocale("fr-ca",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(e,t){switch(t){default:case"M":case"Q":case"D":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}}})}(n(53806))},41713:function(e,t,n){!function(e){"use strict";e.defineLocale("fr-ch",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(e,t){switch(t){default:case"M":case"Q":case"D":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}},week:{dow:1,doy:4}})}(n(53806))},93843:function(e,t,n){!function(e){"use strict";e.defineLocale("fr",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|)/,ordinal:function(e,t){switch(t){case"D":return e+(1===e?"er":"");default:case"M":case"Q":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}},week:{dow:1,doy:4}})}(n(53806))},91316:function(e,t,n){!function(e){"use strict";var t="jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.".split("_"),n="jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_");e.defineLocale("fy",{months:"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber".split("_"),monthsShort:function(e,r){return e?/-MMM-/.test(r)?n[e.month()]:t[e.month()]:t},monthsParseExact:!0,weekdays:"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon".split("_"),weekdaysShort:"si._mo._ti._wo._to._fr._so.".split("_"),weekdaysMin:"Si_Mo_Ti_Wo_To_Fr_So".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[hjoed om] LT",nextDay:"[moarn om] LT",nextWeek:"dddd [om] LT",lastDay:"[juster om] LT",lastWeek:"[ôfrûne] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oer %s",past:"%s lyn",s:"in pear sekonden",ss:"%d sekonden",m:"ien minút",mm:"%d minuten",h:"ien oere",hh:"%d oeren",d:"ien dei",dd:"%d dagen",M:"ien moanne",MM:"%d moannen",y:"ien jier",yy:"%d jierren"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}})}(n(53806))},70089:function(e,t,n){!function(e){"use strict";var t=["Eanáir","Feabhra","Márta","Aibreán","Bealtaine","Méitheamh","Iúil","Lúnasa","Meán Fómhair","Deaireadh Fómhair","Samhain","Nollaig"],n=["Eaná","Feab","Márt","Aibr","Beal","Méit","Iúil","Lúna","Meán","Deai","Samh","Noll"],r=["Dé Domhnaigh","Dé Luain","Dé Máirt","Dé Céadaoin","Déardaoin","Dé hAoine","Dé Satharn"],a=["Dom","Lua","Mái","Céa","Déa","hAo","Sat"],i=["Do","Lu","Má","Ce","Dé","hA","Sa"];e.defineLocale("ga",{months:t,monthsShort:n,monthsParseExact:!0,weekdays:r,weekdaysShort:a,weekdaysMin:i,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Inniu ag] LT",nextDay:"[Amárach ag] LT",nextWeek:"dddd [ag] LT",lastDay:"[Inné aig] LT",lastWeek:"dddd [seo caite] [ag] LT",sameElse:"L"},relativeTime:{future:"i %s",past:"%s ó shin",s:"cúpla soicind",ss:"%d soicind",m:"nóiméad",mm:"%d nóiméad",h:"uair an chloig",hh:"%d uair an chloig",d:"lá",dd:"%d lá",M:"mí",MM:"%d mí",y:"bliain",yy:"%d bliain"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(e){return e+(1===e?"d":e%10==2?"na":"mh")},week:{dow:1,doy:4}})}(n(53806))},39957:function(e,t,n){!function(e){"use strict";var t=["Am Faoilleach","An Gearran","Am Màrt","An Giblean","An Cèitean","An t-Ògmhios","An t-Iuchar","An Lùnastal","An t-Sultain","An Dàmhair","An t-Samhain","An Dùbhlachd"],n=["Faoi","Gear","Màrt","Gibl","Cèit","Ògmh","Iuch","Lùn","Sult","Dàmh","Samh","Dùbh"],r=["Didòmhnaich","Diluain","Dimàirt","Diciadain","Diardaoin","Dihaoine","Disathairne"],a=["Did","Dil","Dim","Dic","Dia","Dih","Dis"],i=["Dò","Lu","Mà","Ci","Ar","Ha","Sa"];e.defineLocale("gd",{months:t,monthsShort:n,monthsParseExact:!0,weekdays:r,weekdaysShort:a,weekdaysMin:i,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[An-diugh aig] LT",nextDay:"[A-màireach aig] LT",nextWeek:"dddd [aig] LT",lastDay:"[An-dè aig] LT",lastWeek:"dddd [seo chaidh] [aig] LT",sameElse:"L"},relativeTime:{future:"ann an %s",past:"bho chionn %s",s:"beagan diogan",ss:"%d diogan",m:"mionaid",mm:"%d mionaidean",h:"uair",hh:"%d uairean",d:"latha",dd:"%d latha",M:"mìos",MM:"%d mìosan",y:"bliadhna",yy:"%d bliadhna"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(e){return e+(1===e?"d":e%10==2?"na":"mh")},week:{dow:1,doy:4}})}(n(53806))},28775:function(e,t,n){!function(e){"use strict";e.defineLocale("gl",{months:"xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro".split("_"),monthsShort:"xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"domingo_luns_martes_mércores_xoves_venres_sábado".split("_"),weekdaysShort:"dom._lun._mar._mér._xov._ven._sáb.".split("_"),weekdaysMin:"do_lu_ma_mé_xo_ve_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoxe "+(1!==this.hours()?"ás":"á")+"] LT"},nextDay:function(){return"[mañá "+(1!==this.hours()?"ás":"á")+"] LT"},nextWeek:function(){return"dddd ["+(1!==this.hours()?"ás":"a")+"] LT"},lastDay:function(){return"[onte "+(1!==this.hours()?"á":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(1!==this.hours()?"ás":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(e){return 0===e.indexOf("un")?"n"+e:"en "+e},past:"hai %s",s:"uns segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(53806))},82190:function(e,t,n){!function(e){"use strict";function t(e,t,n,r){var a={s:["thodde secondanim","thodde second"],ss:[e+" secondanim",e+" second"],m:["eka mintan","ek minute"],mm:[e+" mintanim",e+" mintam"],h:["eka voran","ek vor"],hh:[e+" voranim",e+" voram"],d:["eka disan","ek dis"],dd:[e+" disanim",e+" dis"],M:["eka mhoinean","ek mhoino"],MM:[e+" mhoineanim",e+" mhoine"],y:["eka vorsan","ek voros"],yy:[e+" vorsanim",e+" vorsam"]};return t?a[n][0]:a[n][1]}e.defineLocale("gom-latn",{months:"Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr".split("_"),monthsShort:"Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son'var".split("_"),weekdaysShort:"Ait._Som._Mon._Bud._Bre._Suk._Son.".split("_"),weekdaysMin:"Ai_Sm_Mo_Bu_Br_Su_Sn".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A h:mm [vazta]",LTS:"A h:mm:ss [vazta]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [vazta]",LLLL:"dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]",llll:"ddd, D MMM YYYY, A h:mm [vazta]"},calendar:{sameDay:"[Aiz] LT",nextDay:"[Faleam] LT",nextWeek:"[Ieta to] dddd[,] LT",lastDay:"[Kal] LT",lastWeek:"[Fatlo] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s adim",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}(er)/,ordinal:function(e,t){return"D"===t?e+"er":e},week:{dow:1,doy:4},meridiemParse:/rati|sokalli|donparam|sanje/,meridiemHour:function(e,t){return 12===e&&(e=0),"rati"===t?e<4?e:e+12:"sokalli"===t?e:"donparam"===t?e>12?e:e+12:"sanje"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"rati":e<12?"sokalli":e<16?"donparam":e<20?"sanje":"rati"}})}(n(53806))},22018:function(e,t,n){!function(e){"use strict";var t={1:"૧",2:"૨",3:"૩",4:"૪",5:"૫",6:"૬",7:"૭",8:"૮",9:"૯",0:"૦"},n={"૧":"1","૨":"2","૩":"3","૪":"4","૫":"5","૬":"6","૭":"7","૮":"8","૯":"9","૦":"0"};e.defineLocale("gu",{months:"જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર".split("_"),monthsShort:"જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.".split("_"),monthsParseExact:!0,weekdays:"રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર".split("_"),weekdaysShort:"રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ".split("_"),weekdaysMin:"ર_સો_મં_બુ_ગુ_શુ_શ".split("_"),longDateFormat:{LT:"A h:mm વાગ્યે",LTS:"A h:mm:ss વાગ્યે",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm વાગ્યે",LLLL:"dddd, D MMMM YYYY, A h:mm વાગ્યે"},calendar:{sameDay:"[આજ] LT",nextDay:"[કાલે] LT",nextWeek:"dddd, LT",lastDay:"[ગઇકાલે] LT",lastWeek:"[પાછલા] dddd, LT",sameElse:"L"},relativeTime:{future:"%s મા",past:"%s પેહલા",s:"અમુક પળો",ss:"%d સેકંડ",m:"એક મિનિટ",mm:"%d મિનિટ",h:"એક કલાક",hh:"%d કલાક",d:"એક દિવસ",dd:"%d દિવસ",M:"એક મહિનો",MM:"%d મહિનો",y:"એક વર્ષ",yy:"%d વર્ષ"},preparse:function(e){return e.replace(/[૧૨૩૪૫૬૭૮૯૦]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},meridiemParse:/રાત|બપોર|સવાર|સાંજ/,meridiemHour:function(e,t){return 12===e&&(e=0),"રાત"===t?e<4?e:e+12:"સવાર"===t?e:"બપોર"===t?e>=10?e:e+12:"સાંજ"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"રાત":e<10?"સવાર":e<17?"બપોર":e<20?"સાંજ":"રાત"},week:{dow:0,doy:6}})}(n(53806))},41636:function(e,t,n){!function(e){"use strict";e.defineLocale("he",{months:"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),monthsShort:"ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳".split("_"),weekdays:"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),weekdaysShort:"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"),weekdaysMin:"א_ב_ג_ד_ה_ו_ש".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY HH:mm",LLLL:"dddd, D [ב]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[היום ב־]LT",nextDay:"[מחר ב־]LT",nextWeek:"dddd [בשעה] LT",lastDay:"[אתמול ב־]LT",lastWeek:"[ביום] dddd [האחרון בשעה] LT",sameElse:"L"},relativeTime:{future:"בעוד %s",past:"לפני %s",s:"מספר שניות",ss:"%d שניות",m:"דקה",mm:"%d דקות",h:"שעה",hh:function(e){return 2===e?"שעתיים":e+" שעות"},d:"יום",dd:function(e){return 2===e?"יומיים":e+" ימים"},M:"חודש",MM:function(e){return 2===e?"חודשיים":e+" חודשים"},y:"שנה",yy:function(e){return 2===e?"שנתיים":e%10==0&&10!==e?e+" שנה":e+" שנים"}},meridiemParse:/אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,isPM:function(e){return/^(אחה"צ|אחרי הצהריים|בערב)$/.test(e)},meridiem:function(e,t,n){return e<5?"לפנות בוקר":e<10?"בבוקר":e<12?n?'לפנה"צ':"לפני הצהריים":e<18?n?'אחה"צ':"אחרי הצהריים":"בערב"}})}(n(53806))},96602:function(e,t,n){!function(e){"use strict";var t={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},n={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};e.defineLocale("hi",{months:"जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर".split("_"),monthsShort:"जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.".split("_"),monthsParseExact:!0,weekdays:"रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm बजे",LTS:"A h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm बजे",LLLL:"dddd, D MMMM YYYY, A h:mm बजे"},calendar:{sameDay:"[आज] LT",nextDay:"[कल] LT",nextWeek:"dddd, LT",lastDay:"[कल] LT",lastWeek:"[पिछले] dddd, LT",sameElse:"L"},relativeTime:{future:"%s में",past:"%s पहले",s:"कुछ ही क्षण",ss:"%d सेकंड",m:"एक मिनट",mm:"%d मिनट",h:"एक घंटा",hh:"%d घंटे",d:"एक दिन",dd:"%d दिन",M:"एक महीने",MM:"%d महीने",y:"एक वर्ष",yy:"%d वर्ष"},preparse:function(e){return e.replace(/[१२३४५६७८९०]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},meridiemParse:/रात|सुबह|दोपहर|शाम/,meridiemHour:function(e,t){return 12===e&&(e=0),"रात"===t?e<4?e:e+12:"सुबह"===t?e:"दोपहर"===t?e>=10?e:e+12:"शाम"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"रात":e<10?"सुबह":e<17?"दोपहर":e<20?"शाम":"रात"},week:{dow:0,doy:6}})}(n(53806))},91898:function(e,t,n){!function(e){"use strict";function t(e,t,n){var r=e+" ";switch(n){case"ss":return r+=1===e?"sekunda":2===e||3===e||4===e?"sekunde":"sekundi";case"m":return t?"jedna minuta":"jedne minute";case"mm":return r+=1===e?"minuta":2===e||3===e||4===e?"minute":"minuta";case"h":return t?"jedan sat":"jednog sata";case"hh":return r+=1===e?"sat":2===e||3===e||4===e?"sata":"sati";case"dd":return r+=1===e?"dan":"dana";case"MM":return r+=1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci";case"yy":return r+=1===e?"godina":2===e||3===e||4===e?"godine":"godina"}}e.defineLocale("hr",{months:{format:"siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),standalone:"siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_")},monthsShort:"sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:t,m:t,mm:t,h:t,hh:t,d:"dan",dd:t,M:"mjesec",MM:t,y:"godinu",yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(53806))},23597:function(e,t,n){!function(e){"use strict";var t="vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton".split(" ");function n(e,t,n,r){var a=e;switch(n){case"s":return r||t?"néhány másodperc":"néhány másodperce";case"ss":return a+(r||t)?" másodperc":" másodperce";case"m":return"egy"+(r||t?" perc":" perce");case"mm":return a+(r||t?" perc":" perce");case"h":return"egy"+(r||t?" óra":" órája");case"hh":return a+(r||t?" óra":" órája");case"d":return"egy"+(r||t?" nap":" napja");case"dd":return a+(r||t?" nap":" napja");case"M":return"egy"+(r||t?" hónap":" hónapja");case"MM":return a+(r||t?" hónap":" hónapja");case"y":return"egy"+(r||t?" év":" éve");case"yy":return a+(r||t?" év":" éve")}return""}function r(e){return(e?"":"[múlt] ")+"["+t[this.day()]+"] LT[-kor]"}e.defineLocale("hu",{months:"január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"),monthsShort:"jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"),weekdays:"vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"),weekdaysShort:"vas_hét_kedd_sze_csüt_pén_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"},meridiemParse:/de|du/i,isPM:function(e){return"u"===e.charAt(1).toLowerCase()},meridiem:function(e,t,n){return e<12?!0===n?"de":"DE":!0===n?"du":"DU"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return r.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return r.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s múlva",past:"%s",s:n,ss:n,m:n,mm:n,h:n,hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(53806))},86557:function(e,t,n){!function(e){"use strict";e.defineLocale("hy-am",{months:{format:"հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի".split("_"),standalone:"հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր".split("_")},monthsShort:"հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ".split("_"),weekdays:"կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ".split("_"),weekdaysShort:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),weekdaysMin:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY թ.",LLL:"D MMMM YYYY թ., HH:mm",LLLL:"dddd, D MMMM YYYY թ., HH:mm"},calendar:{sameDay:"[այսօր] LT",nextDay:"[վաղը] LT",lastDay:"[երեկ] LT",nextWeek:function(){return"dddd [օրը ժամը] LT"},lastWeek:function(){return"[անցած] dddd [օրը ժամը] LT"},sameElse:"L"},relativeTime:{future:"%s հետո",past:"%s առաջ",s:"մի քանի վայրկյան",ss:"%d վայրկյան",m:"րոպե",mm:"%d րոպե",h:"ժամ",hh:"%d ժամ",d:"օր",dd:"%d օր",M:"ամիս",MM:"%d ամիս",y:"տարի",yy:"%d տարի"},meridiemParse:/գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,isPM:function(e){return/^(ցերեկվա|երեկոյան)$/.test(e)},meridiem:function(e){return e<4?"գիշերվա":e<12?"առավոտվա":e<17?"ցերեկվա":"երեկոյան"},dayOfMonthOrdinalParse:/\d{1,2}|\d{1,2}-(ին|րդ)/,ordinal:function(e,t){switch(t){case"DDD":case"w":case"W":case"DDDo":return 1===e?e+"-ին":e+"-րդ";default:return e}},week:{dow:1,doy:7}})}(n(53806))},48186:function(e,t,n){!function(e){"use strict";e.defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(e,t){return 12===e&&(e=0),"pagi"===t?e:"siang"===t?e>=11?e:e+12:"sore"===t||"malam"===t?e+12:void 0},meridiem:function(e,t,n){return e<11?"pagi":e<15?"siang":e<19?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",ss:"%d detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}(n(53806))},92004:function(e,t,n){!function(e){"use strict";function t(e){return e%100==11||e%10!=1}function n(e,n,r,a){var i=e+" ";switch(r){case"s":return n||a?"nokkrar sekúndur":"nokkrum sekúndum";case"ss":return t(e)?i+(n||a?"sekúndur":"sekúndum"):i+"sekúnda";case"m":return n?"mínúta":"mínútu";case"mm":return t(e)?i+(n||a?"mínútur":"mínútum"):n?i+"mínúta":i+"mínútu";case"hh":return t(e)?i+(n||a?"klukkustundir":"klukkustundum"):i+"klukkustund";case"d":return n?"dagur":a?"dag":"degi";case"dd":return t(e)?n?i+"dagar":i+(a?"daga":"dögum"):n?i+"dagur":i+(a?"dag":"degi");case"M":return n?"mánuður":a?"mánuð":"mánuði";case"MM":return t(e)?n?i+"mánuðir":i+(a?"mánuði":"mánuðum"):n?i+"mánuður":i+(a?"mánuð":"mánuði");case"y":return n||a?"ár":"ári";case"yy":return t(e)?i+(n||a?"ár":"árum"):i+(n||a?"ár":"ári")}}e.defineLocale("is",{months:"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),monthsShort:"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),weekdays:"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),weekdaysShort:"sun_mán_þri_mið_fim_fös_lau".split("_"),weekdaysMin:"Su_Má_Þr_Mi_Fi_Fö_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[í dag kl.] LT",nextDay:"[á morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[í gær kl.] LT",lastWeek:"[síðasta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s síðan",s:n,ss:n,m:n,mm:n,h:"klukkustund",hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(53806))},62219:function(e,t,n){!function(e){"use strict";e.defineLocale("it-ch",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){return 0===this.day()?"[la scorsa] dddd [alle] LT":"[lo scorso] dddd [alle] LT"},sameElse:"L"},relativeTime:{future:function(e){return(/^[0-9].+$/.test(e)?"tra":"in")+" "+e},past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(53806))},31032:function(e,t,n){!function(e){"use strict";e.defineLocale("it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){return 0===this.day()?"[la scorsa] dddd [alle] LT":"[lo scorso] dddd [alle] LT"},sameElse:"L"},relativeTime:{future:function(e){return(/^[0-9].+$/.test(e)?"tra":"in")+" "+e},past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(53806))},31461:function(e,t,n){!function(e){"use strict";e.defineLocale("ja",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_水_木_金_土".split("_"),weekdaysMin:"日_月_火_水_木_金_土".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日 dddd HH:mm",l:"YYYY/MM/DD",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日(ddd) HH:mm"},meridiemParse:/午前|午後/i,isPM:function(e){return"午後"===e},meridiem:function(e,t,n){return e<12?"午前":"午後"},calendar:{sameDay:"[今日] LT",nextDay:"[明日] LT",nextWeek:function(e){return e.week()=11?e:e+12:"sonten"===t||"ndalu"===t?e+12:void 0},meridiem:function(e,t,n){return e<11?"enjing":e<15?"siyang":e<19?"sonten":"ndalu"},calendar:{sameDay:"[Dinten puniko pukul] LT",nextDay:"[Mbenjang pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kala wingi pukul] LT",lastWeek:"dddd [kepengker pukul] LT",sameElse:"L"},relativeTime:{future:"wonten ing %s",past:"%s ingkang kepengker",s:"sawetawis detik",ss:"%d detik",m:"setunggal menit",mm:"%d menit",h:"setunggal jam",hh:"%d jam",d:"sedinten",dd:"%d dinten",M:"sewulan",MM:"%d wulan",y:"setaun",yy:"%d taun"},week:{dow:1,doy:7}})}(n(53806))},22116:function(e,t,n){!function(e){"use strict";e.defineLocale("ka",{months:{standalone:"იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი".split("_"),format:"იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს".split("_")},monthsShort:"იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"),weekdays:{standalone:"კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი".split("_"),format:"კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს".split("_"),isFormat:/(წინა|შემდეგ)/},weekdaysShort:"კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ".split("_"),weekdaysMin:"კვ_ორ_სა_ოთ_ხუ_პა_შა".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[დღეს] LT[-ზე]",nextDay:"[ხვალ] LT[-ზე]",lastDay:"[გუშინ] LT[-ზე]",nextWeek:"[შემდეგ] dddd LT[-ზე]",lastWeek:"[წინა] dddd LT-ზე",sameElse:"L"},relativeTime:{future:function(e){return/(წამი|წუთი|საათი|წელი)/.test(e)?e.replace(/ი$/,"ში"):e+"ში"},past:function(e){return/(წამი|წუთი|საათი|დღე|თვე)/.test(e)?e.replace(/(ი|ე)$/,"ის წინ"):/წელი/.test(e)?e.replace(/წელი$/,"წლის წინ"):void 0},s:"რამდენიმე წამი",ss:"%d წამი",m:"წუთი",mm:"%d წუთი",h:"საათი",hh:"%d საათი",d:"დღე",dd:"%d დღე",M:"თვე",MM:"%d თვე",y:"წელი",yy:"%d წელი"},dayOfMonthOrdinalParse:/0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/,ordinal:function(e){return 0===e?e:1===e?e+"-ლი":e<20||e<=100&&e%20==0||e%100==0?"მე-"+e:e+"-ე"},week:{dow:1,doy:7}})}(n(53806))},31007:function(e,t,n){!function(e){"use strict";var t={0:"-ші",1:"-ші",2:"-ші",3:"-ші",4:"-ші",5:"-ші",6:"-шы",7:"-ші",8:"-ші",9:"-шы",10:"-шы",20:"-шы",30:"-шы",40:"-шы",50:"-ші",60:"-шы",70:"-ші",80:"-ші",90:"-шы",100:"-ші"};e.defineLocale("kk",{months:"қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан".split("_"),monthsShort:"қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел".split("_"),weekdays:"жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі".split("_"),weekdaysShort:"жек_дүй_сей_сәр_бей_жұм_сен".split("_"),weekdaysMin:"жк_дй_сй_ср_бй_жм_сн".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгін сағат] LT",nextDay:"[Ертең сағат] LT",nextWeek:"dddd [сағат] LT",lastDay:"[Кеше сағат] LT",lastWeek:"[Өткен аптаның] dddd [сағат] LT",sameElse:"L"},relativeTime:{future:"%s ішінде",past:"%s бұрын",s:"бірнеше секунд",ss:"%d секунд",m:"бір минут",mm:"%d минут",h:"бір сағат",hh:"%d сағат",d:"бір күн",dd:"%d күн",M:"бір ай",MM:"%d ай",y:"бір жыл",yy:"%d жыл"},dayOfMonthOrdinalParse:/\d{1,2}-(ші|шы)/,ordinal:function(e){var n=e%10,r=e>=100?100:null;return e+(t[e]||t[n]||t[r])},week:{dow:1,doy:7}})}(n(53806))},7765:function(e,t,n){!function(e){"use strict";var t={1:"១",2:"២",3:"៣",4:"៤",5:"៥",6:"៦",7:"៧",8:"៨",9:"៩",0:"០"},n={"១":"1","២":"2","៣":"3","៤":"4","៥":"5","៦":"6","៧":"7","៨":"8","៩":"9","០":"0"};e.defineLocale("km",{months:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),monthsShort:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),weekdays:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysShort:"អា_ច_អ_ព_ព្រ_សុ_ស".split("_"),weekdaysMin:"អា_ច_អ_ព_ព្រ_សុ_ស".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/ព្រឹក|ល្ងាច/,isPM:function(e){return"ល្ងាច"===e},meridiem:function(e,t,n){return e<12?"ព្រឹក":"ល្ងាច"},calendar:{sameDay:"[ថ្ងៃនេះ ម៉ោង] LT",nextDay:"[ស្អែក ម៉ោង] LT",nextWeek:"dddd [ម៉ោង] LT",lastDay:"[ម្សិលមិញ ម៉ោង] LT",lastWeek:"dddd [សប្តាហ៍មុន] [ម៉ោង] LT",sameElse:"L"},relativeTime:{future:"%sទៀត",past:"%sមុន",s:"ប៉ុន្មានវិនាទី",ss:"%d វិនាទី",m:"មួយនាទី",mm:"%d នាទី",h:"មួយម៉ោង",hh:"%d ម៉ោង",d:"មួយថ្ងៃ",dd:"%d ថ្ងៃ",M:"មួយខែ",MM:"%d ខែ",y:"មួយឆ្នាំ",yy:"%d ឆ្នាំ"},dayOfMonthOrdinalParse:/ទី\d{1,2}/,ordinal:"ទី%d",preparse:function(e){return e.replace(/[១២៣៤៥៦៧៨៩០]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},week:{dow:1,doy:4}})}(n(53806))},3735:function(e,t,n){!function(e){"use strict";var t={1:"೧",2:"೨",3:"೩",4:"೪",5:"೫",6:"೬",7:"೭",8:"೮",9:"೯",0:"೦"},n={"೧":"1","೨":"2","೩":"3","೪":"4","೫":"5","೬":"6","೭":"7","೮":"8","೯":"9","೦":"0"};e.defineLocale("kn",{months:"ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್".split("_"),monthsShort:"ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ".split("_"),monthsParseExact:!0,weekdays:"ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ".split("_"),weekdaysShort:"ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ".split("_"),weekdaysMin:"ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[ಇಂದು] LT",nextDay:"[ನಾಳೆ] LT",nextWeek:"dddd, LT",lastDay:"[ನಿನ್ನೆ] LT",lastWeek:"[ಕೊನೆಯ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ನಂತರ",past:"%s ಹಿಂದೆ",s:"ಕೆಲವು ಕ್ಷಣಗಳು",ss:"%d ಸೆಕೆಂಡುಗಳು",m:"ಒಂದು ನಿಮಿಷ",mm:"%d ನಿಮಿಷ",h:"ಒಂದು ಗಂಟೆ",hh:"%d ಗಂಟೆ",d:"ಒಂದು ದಿನ",dd:"%d ದಿನ",M:"ಒಂದು ತಿಂಗಳು",MM:"%d ತಿಂಗಳು",y:"ಒಂದು ವರ್ಷ",yy:"%d ವರ್ಷ"},preparse:function(e){return e.replace(/[೧೨೩೪೫೬೭೮೯೦]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},meridiemParse:/ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,meridiemHour:function(e,t){return 12===e&&(e=0),"ರಾತ್ರಿ"===t?e<4?e:e+12:"ಬೆಳಿಗ್ಗೆ"===t?e:"ಮಧ್ಯಾಹ್ನ"===t?e>=10?e:e+12:"ಸಂಜೆ"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"ರಾತ್ರಿ":e<10?"ಬೆಳಿಗ್ಗೆ":e<17?"ಮಧ್ಯಾಹ್ನ":e<20?"ಸಂಜೆ":"ರಾತ್ರಿ"},dayOfMonthOrdinalParse:/\d{1,2}(ನೇ)/,ordinal:function(e){return e+"ನೇ"},week:{dow:0,doy:6}})}(n(53806))},86880:function(e,t,n){!function(e){"use strict";e.defineLocale("ko",{months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 A h:mm",LLLL:"YYYY년 MMMM D일 dddd A h:mm",l:"YYYY.MM.DD.",ll:"YYYY년 MMMM D일",lll:"YYYY년 MMMM D일 A h:mm",llll:"YYYY년 MMMM D일 dddd A h:mm"},calendar:{sameDay:"오늘 LT",nextDay:"내일 LT",nextWeek:"dddd LT",lastDay:"어제 LT",lastWeek:"지난주 dddd LT",sameElse:"L"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇 초",ss:"%d초",m:"1분",mm:"%d분",h:"한 시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한 달",MM:"%d달",y:"일 년",yy:"%d년"},dayOfMonthOrdinalParse:/\d{1,2}(일|월|주)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"일";case"M":return e+"월";case"w":case"W":return e+"주";default:return e}},meridiemParse:/오전|오후/,isPM:function(e){return"오후"===e},meridiem:function(e,t,n){return e<12?"오전":"오후"}})}(n(53806))},98841:function(e,t,n){!function(e){"use strict";var t={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},n={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},r=["کانونی دووەم","شوبات","ئازار","نیسان","ئایار","حوزەیران","تەمموز","ئاب","ئەیلوول","تشرینی یەكەم","تشرینی دووەم","كانونی یەکەم"];e.defineLocale("ku",{months:r,monthsShort:r,weekdays:"یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌".split("_"),weekdaysShort:"یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌".split("_"),weekdaysMin:"ی_د_س_چ_پ_ه_ش".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/ئێواره‌|به‌یانی/,isPM:function(e){return/ئێواره‌/.test(e)},meridiem:function(e,t,n){return e<12?"به‌یانی":"ئێواره‌"},calendar:{sameDay:"[ئه‌مرۆ كاتژمێر] LT",nextDay:"[به‌یانی كاتژمێر] LT",nextWeek:"dddd [كاتژمێر] LT",lastDay:"[دوێنێ كاتژمێر] LT",lastWeek:"dddd [كاتژمێر] LT",sameElse:"L"},relativeTime:{future:"له‌ %s",past:"%s",s:"چه‌ند چركه‌یه‌ك",ss:"چركه‌ %d",m:"یه‌ك خوله‌ك",mm:"%d خوله‌ك",h:"یه‌ك كاتژمێر",hh:"%d كاتژمێر",d:"یه‌ك ڕۆژ",dd:"%d ڕۆژ",M:"یه‌ك مانگ",MM:"%d مانگ",y:"یه‌ك ساڵ",yy:"%d ساڵ"},preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,(function(e){return n[e]})).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]})).replace(/,/g,"،")},week:{dow:6,doy:12}})}(n(53806))},24125:function(e,t,n){!function(e){"use strict";var t={0:"-чү",1:"-чи",2:"-чи",3:"-чү",4:"-чү",5:"-чи",6:"-чы",7:"-чи",8:"-чи",9:"-чу",10:"-чу",20:"-чы",30:"-чу",40:"-чы",50:"-чү",60:"-чы",70:"-чи",80:"-чи",90:"-чу",100:"-чү"};e.defineLocale("ky",{months:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"),monthsShort:"янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек".split("_"),weekdays:"Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби".split("_"),weekdaysShort:"Жек_Дүй_Шей_Шар_Бей_Жум_Ише".split("_"),weekdaysMin:"Жк_Дй_Шй_Шр_Бй_Жм_Иш".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгүн саат] LT",nextDay:"[Эртең саат] LT",nextWeek:"dddd [саат] LT",lastDay:"[Кечээ саат] LT",lastWeek:"[Өткөн аптанын] dddd [күнү] [саат] LT",sameElse:"L"},relativeTime:{future:"%s ичинде",past:"%s мурун",s:"бирнече секунд",ss:"%d секунд",m:"бир мүнөт",mm:"%d мүнөт",h:"бир саат",hh:"%d саат",d:"бир күн",dd:"%d күн",M:"бир ай",MM:"%d ай",y:"бир жыл",yy:"%d жыл"},dayOfMonthOrdinalParse:/\d{1,2}-(чи|чы|чү|чу)/,ordinal:function(e){var n=e%10,r=e>=100?100:null;return e+(t[e]||t[n]||t[r])},week:{dow:1,doy:7}})}(n(53806))},10047:function(e,t,n){!function(e){"use strict";function t(e,t,n,r){var a={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return t?a[n][0]:a[n][1]}function n(e){return a(e.substr(0,e.indexOf(" ")))?"a "+e:"an "+e}function r(e){return a(e.substr(0,e.indexOf(" ")))?"viru "+e:"virun "+e}function a(e){if(e=parseInt(e,10),isNaN(e))return!1;if(e<0)return!0;if(e<10)return 4<=e&&e<=7;if(e<100){var t=e%10;return a(0===t?e/10:t)}if(e<1e4){for(;e>=10;)e/=10;return a(e)}return a(e/=1e3)}e.defineLocale("lb",{months:"Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._Mé._Dë._Më._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mé_Dë_Më_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[Gëschter um] LT",lastWeek:function(){switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:n,past:r,s:"e puer Sekonnen",ss:"%d Sekonnen",m:t,mm:"%d Minutten",h:t,hh:"%d Stonnen",d:t,dd:"%d Deeg",M:t,MM:"%d Méint",y:t,yy:"%d Joer"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(53806))},16396:function(e,t,n){!function(e){"use strict";e.defineLocale("lo",{months:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),monthsShort:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),weekdays:"ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysShort:"ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysMin:"ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"ວັນdddd D MMMM YYYY HH:mm"},meridiemParse:/ຕອນເຊົ້າ|ຕອນແລງ/,isPM:function(e){return"ຕອນແລງ"===e},meridiem:function(e,t,n){return e<12?"ຕອນເຊົ້າ":"ຕອນແລງ"},calendar:{sameDay:"[ມື້ນີ້ເວລາ] LT",nextDay:"[ມື້ອື່ນເວລາ] LT",nextWeek:"[ວັນ]dddd[ໜ້າເວລາ] LT",lastDay:"[ມື້ວານນີ້ເວລາ] LT",lastWeek:"[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT",sameElse:"L"},relativeTime:{future:"ອີກ %s",past:"%sຜ່ານມາ",s:"ບໍ່ເທົ່າໃດວິນາທີ",ss:"%d ວິນາທີ",m:"1 ນາທີ",mm:"%d ນາທີ",h:"1 ຊົ່ວໂມງ",hh:"%d ຊົ່ວໂມງ",d:"1 ມື້",dd:"%d ມື້",M:"1 ເດືອນ",MM:"%d ເດືອນ",y:"1 ປີ",yy:"%d ປີ"},dayOfMonthOrdinalParse:/(ທີ່)\d{1,2}/,ordinal:function(e){return"ທີ່"+e}})}(n(53806))},93903:function(e,t,n){!function(e){"use strict";var t={ss:"sekundė_sekundžių_sekundes",m:"minutė_minutės_minutę",mm:"minutės_minučių_minutes",h:"valanda_valandos_valandą",hh:"valandos_valandų_valandas",d:"diena_dienos_dieną",dd:"dienos_dienų_dienas",M:"mėnuo_mėnesio_mėnesį",MM:"mėnesiai_mėnesių_mėnesius",y:"metai_metų_metus",yy:"metai_metų_metus"};function n(e,t,n,r){return t?"kelios sekundės":r?"kelių sekundžių":"kelias sekundes"}function r(e,t,n,r){return t?i(n)[0]:r?i(n)[1]:i(n)[2]}function a(e){return e%10==0||e>10&&e<20}function i(e){return t[e].split("_")}function o(e,t,n,o){var s=e+" ";return 1===e?s+r(e,t,n[0],o):t?s+(a(e)?i(n)[1]:i(n)[0]):o?s+i(n)[1]:s+(a(e)?i(n)[1]:i(n)[2])}e.defineLocale("lt",{months:{format:"sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis".split("_"),isFormat:/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_Šeš".split("_"),weekdaysMin:"S_P_A_T_K_Pn_Š".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[Šiandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Praėjusį] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prieš %s",s:n,ss:o,m:r,mm:o,h:r,hh:o,d:r,dd:o,M:r,MM:o,y:r,yy:o},dayOfMonthOrdinalParse:/\d{1,2}-oji/,ordinal:function(e){return e+"-oji"},week:{dow:1,doy:4}})}(n(53806))},4162:function(e,t,n){!function(e){"use strict";var t={ss:"sekundes_sekundēm_sekunde_sekundes".split("_"),m:"minūtes_minūtēm_minūte_minūtes".split("_"),mm:"minūtes_minūtēm_minūte_minūtes".split("_"),h:"stundas_stundām_stunda_stundas".split("_"),hh:"stundas_stundām_stunda_stundas".split("_"),d:"dienas_dienām_diena_dienas".split("_"),dd:"dienas_dienām_diena_dienas".split("_"),M:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),MM:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),y:"gada_gadiem_gads_gadi".split("_"),yy:"gada_gadiem_gads_gadi".split("_")};function n(e,t,n){return n?t%10==1&&t%100!=11?e[2]:e[3]:t%10==1&&t%100!=11?e[0]:e[1]}function r(e,r,a){return e+" "+n(t[a],e,r)}function a(e,r,a){return n(t[a],e,r)}function i(e,t){return t?"dažas sekundes":"dažām sekundēm"}e.defineLocale("lv",{months:"janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"),weekdays:"svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},calendar:{sameDay:"[Šodien pulksten] LT",nextDay:"[Rīt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pagājušā] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"pēc %s",past:"pirms %s",s:i,ss:r,m:a,mm:r,h:a,hh:r,d:a,dd:r,M:a,MM:r,y:a,yy:r},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(53806))},53933:function(e,t,n){!function(e){"use strict";var t={words:{ss:["sekund","sekunda","sekundi"],m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mjesec","mjeseca","mjeseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(e,t){return 1===e?t[0]:e>=2&&e<=4?t[1]:t[2]},translate:function(e,n,r){var a=t.words[r];return 1===r.length?n?a[0]:a[1]:e+" "+t.correctGrammaticalCase(e,a)}};e.defineLocale("me",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sjutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){return["[prošle] [nedjelje] [u] LT","[prošlog] [ponedjeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srijede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"nekoliko sekundi",ss:t.translate,m:t.translate,mm:t.translate,h:t.translate,hh:t.translate,d:"dan",dd:t.translate,M:"mjesec",MM:t.translate,y:"godinu",yy:t.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(53806))},4044:function(e,t,n){!function(e){"use strict";e.defineLocale("mi",{months:"Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea".split("_"),monthsShort:"Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki".split("_"),monthsRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,weekdays:"Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei".split("_"),weekdaysShort:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),weekdaysMin:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [i] HH:mm",LLLL:"dddd, D MMMM YYYY [i] HH:mm"},calendar:{sameDay:"[i teie mahana, i] LT",nextDay:"[apopo i] LT",nextWeek:"dddd [i] LT",lastDay:"[inanahi i] LT",lastWeek:"dddd [whakamutunga i] LT",sameElse:"L"},relativeTime:{future:"i roto i %s",past:"%s i mua",s:"te hēkona ruarua",ss:"%d hēkona",m:"he meneti",mm:"%d meneti",h:"te haora",hh:"%d haora",d:"he ra",dd:"%d ra",M:"he marama",MM:"%d marama",y:"he tau",yy:"%d tau"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(53806))},26326:function(e,t,n){!function(e){"use strict";e.defineLocale("mk",{months:"јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември".split("_"),monthsShort:"јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек".split("_"),weekdays:"недела_понеделник_вторник_среда_четврток_петок_сабота".split("_"),weekdaysShort:"нед_пон_вто_сре_чет_пет_саб".split("_"),weekdaysMin:"нe_пo_вт_ср_че_пе_сa".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Денес во] LT",nextDay:"[Утре во] LT",nextWeek:"[Во] dddd [во] LT",lastDay:"[Вчера во] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[Изминатата] dddd [во] LT";case 1:case 2:case 4:case 5:return"[Изминатиот] dddd [во] LT"}},sameElse:"L"},relativeTime:{future:"после %s",past:"пред %s",s:"неколку секунди",ss:"%d секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дена",M:"месец",MM:"%d месеци",y:"година",yy:"%d години"},dayOfMonthOrdinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(e){var t=e%10,n=e%100;return 0===e?e+"-ев":0===n?e+"-ен":n>10&&n<20?e+"-ти":1===t?e+"-ви":2===t?e+"-ри":7===t||8===t?e+"-ми":e+"-ти"},week:{dow:1,doy:7}})}(n(53806))},5774:function(e,t,n){!function(e){"use strict";e.defineLocale("ml",{months:"ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ".split("_"),monthsShort:"ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.".split("_"),monthsParseExact:!0,weekdays:"ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച".split("_"),weekdaysShort:"ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി".split("_"),weekdaysMin:"ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ".split("_"),longDateFormat:{LT:"A h:mm -നു",LTS:"A h:mm:ss -നു",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm -നു",LLLL:"dddd, D MMMM YYYY, A h:mm -നു"},calendar:{sameDay:"[ഇന്ന്] LT",nextDay:"[നാളെ] LT",nextWeek:"dddd, LT",lastDay:"[ഇന്നലെ] LT",lastWeek:"[കഴിഞ്ഞ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s കഴിഞ്ഞ്",past:"%s മുൻപ്",s:"അൽപ നിമിഷങ്ങൾ",ss:"%d സെക്കൻഡ്",m:"ഒരു മിനിറ്റ്",mm:"%d മിനിറ്റ്",h:"ഒരു മണിക്കൂർ",hh:"%d മണിക്കൂർ",d:"ഒരു ദിവസം",dd:"%d ദിവസം",M:"ഒരു മാസം",MM:"%d മാസം",y:"ഒരു വർഷം",yy:"%d വർഷം"},meridiemParse:/രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,meridiemHour:function(e,t){return 12===e&&(e=0),"രാത്രി"===t&&e>=4||"ഉച്ച കഴിഞ്ഞ്"===t||"വൈകുന്നേരം"===t?e+12:e},meridiem:function(e,t,n){return e<4?"രാത്രി":e<12?"രാവിലെ":e<17?"ഉച്ച കഴിഞ്ഞ്":e<20?"വൈകുന്നേരം":"രാത്രി"}})}(n(53806))},9012:function(e,t,n){!function(e){"use strict";function t(e,t,n,r){switch(n){case"s":return t?"хэдхэн секунд":"хэдхэн секундын";case"ss":return e+(t?" секунд":" секундын");case"m":case"mm":return e+(t?" минут":" минутын");case"h":case"hh":return e+(t?" цаг":" цагийн");case"d":case"dd":return e+(t?" өдөр":" өдрийн");case"M":case"MM":return e+(t?" сар":" сарын");case"y":case"yy":return e+(t?" жил":" жилийн");default:return e}}e.defineLocale("mn",{months:"Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар".split("_"),monthsShort:"1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар".split("_"),monthsParseExact:!0,weekdays:"Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба".split("_"),weekdaysShort:"Ням_Дав_Мяг_Лха_Пүр_Баа_Бям".split("_"),weekdaysMin:"Ня_Да_Мя_Лх_Пү_Ба_Бя".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY оны MMMMын D",LLL:"YYYY оны MMMMын D HH:mm",LLLL:"dddd, YYYY оны MMMMын D HH:mm"},meridiemParse:/ҮӨ|ҮХ/i,isPM:function(e){return"ҮХ"===e},meridiem:function(e,t,n){return e<12?"ҮӨ":"ҮХ"},calendar:{sameDay:"[Өнөөдөр] LT",nextDay:"[Маргааш] LT",nextWeek:"[Ирэх] dddd LT",lastDay:"[Өчигдөр] LT",lastWeek:"[Өнгөрсөн] dddd LT",sameElse:"L"},relativeTime:{future:"%s дараа",past:"%s өмнө",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2} өдөр/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+" өдөр";default:return e}}})}(n(53806))},52738:function(e,t,n){!function(e){"use strict";var t={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},n={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};function r(e,t,n,r){var a="";if(t)switch(n){case"s":a="काही सेकंद";break;case"ss":a="%d सेकंद";break;case"m":a="एक मिनिट";break;case"mm":a="%d मिनिटे";break;case"h":a="एक तास";break;case"hh":a="%d तास";break;case"d":a="एक दिवस";break;case"dd":a="%d दिवस";break;case"M":a="एक महिना";break;case"MM":a="%d महिने";break;case"y":a="एक वर्ष";break;case"yy":a="%d वर्षे"}else switch(n){case"s":a="काही सेकंदां";break;case"ss":a="%d सेकंदां";break;case"m":a="एका मिनिटा";break;case"mm":a="%d मिनिटां";break;case"h":a="एका तासा";break;case"hh":a="%d तासां";break;case"d":a="एका दिवसा";break;case"dd":a="%d दिवसां";break;case"M":a="एका महिन्या";break;case"MM":a="%d महिन्यां";break;case"y":a="एका वर्षा";break;case"yy":a="%d वर्षां"}return a.replace(/%d/i,e)}e.defineLocale("mr",{months:"जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर".split("_"),monthsShort:"जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.".split("_"),monthsParseExact:!0,weekdays:"रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm वाजता",LTS:"A h:mm:ss वाजता",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm वाजता",LLLL:"dddd, D MMMM YYYY, A h:mm वाजता"},calendar:{sameDay:"[आज] LT",nextDay:"[उद्या] LT",nextWeek:"dddd, LT",lastDay:"[काल] LT",lastWeek:"[मागील] dddd, LT",sameElse:"L"},relativeTime:{future:"%sमध्ये",past:"%sपूर्वी",s:r,ss:r,m:r,mm:r,h:r,hh:r,d:r,dd:r,M:r,MM:r,y:r,yy:r},preparse:function(e){return e.replace(/[१२३४५६७८९०]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},meridiemParse:/रात्री|सकाळी|दुपारी|सायंकाळी/,meridiemHour:function(e,t){return 12===e&&(e=0),"रात्री"===t?e<4?e:e+12:"सकाळी"===t?e:"दुपारी"===t?e>=10?e:e+12:"सायंकाळी"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"रात्री":e<10?"सकाळी":e<17?"दुपारी":e<20?"सायंकाळी":"रात्री"},week:{dow:0,doy:6}})}(n(53806))},35304:function(e,t,n){!function(e){"use strict";e.defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,t){return 12===e&&(e=0),"pagi"===t?e:"tengahari"===t?e>=11?e:e+12:"petang"===t||"malam"===t?e+12:void 0},meridiem:function(e,t,n){return e<11?"pagi":e<15?"tengahari":e<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}(n(53806))},77364:function(e,t,n){!function(e){"use strict";e.defineLocale("ms",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,t){return 12===e&&(e=0),"pagi"===t?e:"tengahari"===t?e>=11?e:e+12:"petang"===t||"malam"===t?e+12:void 0},meridiem:function(e,t,n){return e<11?"pagi":e<15?"tengahari":e<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}(n(53806))},35926:function(e,t,n){!function(e){"use strict";e.defineLocale("mt",{months:"Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru".split("_"),monthsShort:"Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ".split("_"),weekdays:"Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt".split("_"),weekdaysShort:"Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib".split("_"),weekdaysMin:"Ħa_Tn_Tl_Er_Ħa_Ġi_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Illum fil-]LT",nextDay:"[Għada fil-]LT",nextWeek:"dddd [fil-]LT",lastDay:"[Il-bieraħ fil-]LT",lastWeek:"dddd [li għadda] [fil-]LT",sameElse:"L"},relativeTime:{future:"f’ %s",past:"%s ilu",s:"ftit sekondi",ss:"%d sekondi",m:"minuta",mm:"%d minuti",h:"siegħa",hh:"%d siegħat",d:"ġurnata",dd:"%d ġranet",M:"xahar",MM:"%d xhur",y:"sena",yy:"%d sni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(53806))},49515:function(e,t,n){!function(e){"use strict";var t={1:"၁",2:"၂",3:"၃",4:"၄",5:"၅",6:"၆",7:"၇",8:"၈",9:"၉",0:"၀"},n={"၁":"1","၂":"2","၃":"3","၄":"4","၅":"5","၆":"6","၇":"7","၈":"8","၉":"9","၀":"0"};e.defineLocale("my",{months:"ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ".split("_"),monthsShort:"ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ".split("_"),weekdays:"တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ".split("_"),weekdaysShort:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),weekdaysMin:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ယနေ.] LT [မှာ]",nextDay:"[မနက်ဖြန်] LT [မှာ]",nextWeek:"dddd LT [မှာ]",lastDay:"[မနေ.က] LT [မှာ]",lastWeek:"[ပြီးခဲ့သော] dddd LT [မှာ]",sameElse:"L"},relativeTime:{future:"လာမည့် %s မှာ",past:"လွန်ခဲ့သော %s က",s:"စက္ကန်.အနည်းငယ်",ss:"%d စက္ကန့်",m:"တစ်မိနစ်",mm:"%d မိနစ်",h:"တစ်နာရီ",hh:"%d နာရီ",d:"တစ်ရက်",dd:"%d ရက်",M:"တစ်လ",MM:"%d လ",y:"တစ်နှစ်",yy:"%d နှစ်"},preparse:function(e){return e.replace(/[၁၂၃၄၅၆၇၈၉၀]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},week:{dow:1,doy:4}})}(n(53806))},38267:function(e,t,n){!function(e){"use strict";e.defineLocale("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"sø._ma._ti._on._to._fr._lø.".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",ss:"%d sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en måned",MM:"%d måneder",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(53806))},68871:function(e,t,n){!function(e){"use strict";var t={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},n={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};e.defineLocale("ne",{months:"जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर".split("_"),monthsShort:"जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.".split("_"),monthsParseExact:!0,weekdays:"आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार".split("_"),weekdaysShort:"आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.".split("_"),weekdaysMin:"आ._सो._मं._बु._बि._शु._श.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"Aको h:mm बजे",LTS:"Aको h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, Aको h:mm बजे",LLLL:"dddd, D MMMM YYYY, Aको h:mm बजे"},preparse:function(e){return e.replace(/[१२३४५६७८९०]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},meridiemParse:/राति|बिहान|दिउँसो|साँझ/,meridiemHour:function(e,t){return 12===e&&(e=0),"राति"===t?e<4?e:e+12:"बिहान"===t?e:"दिउँसो"===t?e>=10?e:e+12:"साँझ"===t?e+12:void 0},meridiem:function(e,t,n){return e<3?"राति":e<12?"बिहान":e<16?"दिउँसो":e<20?"साँझ":"राति"},calendar:{sameDay:"[आज] LT",nextDay:"[भोलि] LT",nextWeek:"[आउँदो] dddd[,] LT",lastDay:"[हिजो] LT",lastWeek:"[गएको] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%sमा",past:"%s अगाडि",s:"केही क्षण",ss:"%d सेकेण्ड",m:"एक मिनेट",mm:"%d मिनेट",h:"एक घण्टा",hh:"%d घण्टा",d:"एक दिन",dd:"%d दिन",M:"एक महिना",MM:"%d महिना",y:"एक बर्ष",yy:"%d बर्ष"},week:{dow:0,doy:6}})}(n(53806))},33615:function(e,t,n){!function(e){"use strict";var t="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),n="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),r=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],a=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;e.defineLocale("nl-be",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(e,r){return e?/-MMM-/.test(r)?n[e.month()]:t[e.month()]:t},monthsRegex:a,monthsShortRegex:a,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}})}(n(53806))},130:function(e,t,n){!function(e){"use strict";var t="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),n="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),r=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],a=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;e.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(e,r){return e?/-MMM-/.test(r)?n[e.month()]:t[e.month()]:t},monthsRegex:a,monthsShortRegex:a,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}})}(n(53806))},4484:function(e,t,n){!function(e){"use strict";e.defineLocale("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"sun_mån_tys_ons_tor_fre_lau".split("_"),weekdaysMin:"su_må_ty_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I går klokka] LT",lastWeek:"[Føregåande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s sidan",s:"nokre sekund",ss:"%d sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",M:"ein månad",MM:"%d månader",y:"eit år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(53806))},75380:function(e,t,n){!function(e){"use strict";var t={1:"੧",2:"੨",3:"੩",4:"੪",5:"੫",6:"੬",7:"੭",8:"੮",9:"੯",0:"੦"},n={"੧":"1","੨":"2","੩":"3","੪":"4","੫":"5","੬":"6","੭":"7","੮":"8","੯":"9","੦":"0"};e.defineLocale("pa-in",{months:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),monthsShort:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),weekdays:"ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ".split("_"),weekdaysShort:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),weekdaysMin:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),longDateFormat:{LT:"A h:mm ਵਜੇ",LTS:"A h:mm:ss ਵਜੇ",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm ਵਜੇ",LLLL:"dddd, D MMMM YYYY, A h:mm ਵਜੇ"},calendar:{sameDay:"[ਅਜ] LT",nextDay:"[ਕਲ] LT",nextWeek:"[ਅਗਲਾ] dddd, LT",lastDay:"[ਕਲ] LT",lastWeek:"[ਪਿਛਲੇ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ਵਿੱਚ",past:"%s ਪਿਛਲੇ",s:"ਕੁਝ ਸਕਿੰਟ",ss:"%d ਸਕਿੰਟ",m:"ਇਕ ਮਿੰਟ",mm:"%d ਮਿੰਟ",h:"ਇੱਕ ਘੰਟਾ",hh:"%d ਘੰਟੇ",d:"ਇੱਕ ਦਿਨ",dd:"%d ਦਿਨ",M:"ਇੱਕ ਮਹੀਨਾ",MM:"%d ਮਹੀਨੇ",y:"ਇੱਕ ਸਾਲ",yy:"%d ਸਾਲ"},preparse:function(e){return e.replace(/[੧੨੩੪੫੬੭੮੯੦]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},meridiemParse:/ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,meridiemHour:function(e,t){return 12===e&&(e=0),"ਰਾਤ"===t?e<4?e:e+12:"ਸਵੇਰ"===t?e:"ਦੁਪਹਿਰ"===t?e>=10?e:e+12:"ਸ਼ਾਮ"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"ਰਾਤ":e<10?"ਸਵੇਰ":e<17?"ਦੁਪਹਿਰ":e<20?"ਸ਼ਾਮ":"ਰਾਤ"},week:{dow:0,doy:6}})}(n(53806))},80255:function(e,t,n){!function(e){"use strict";var t="styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"),n="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_");function r(e){return e%10<5&&e%10>1&&~~(e/10)%10!=1}function a(e,t,n){var a=e+" ";switch(n){case"ss":return a+(r(e)?"sekundy":"sekund");case"m":return t?"minuta":"minutę";case"mm":return a+(r(e)?"minuty":"minut");case"h":return t?"godzina":"godzinę";case"hh":return a+(r(e)?"godziny":"godzin");case"MM":return a+(r(e)?"miesiące":"miesięcy");case"yy":return a+(r(e)?"lata":"lat")}}e.defineLocale("pl",{months:function(e,r){return e?""===r?"("+n[e.month()]+"|"+t[e.month()]+")":/D MMMM/.test(r)?n[e.month()]:t[e.month()]:t},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),weekdays:"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_śr_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_Śr_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dziś o] LT",nextDay:"[Jutro o] LT",nextWeek:function(){switch(this.day()){case 0:return"[W niedzielę o] LT";case 2:return"[We wtorek o] LT";case 3:return"[W środę o] LT";case 6:return"[W sobotę o] LT";default:return"[W] dddd [o] LT"}},lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zeszłą niedzielę o] LT";case 3:return"[W zeszłą środę o] LT";case 6:return"[W zeszłą sobotę o] LT";default:return"[W zeszły] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",ss:a,m:a,mm:a,h:a,hh:a,d:"1 dzień",dd:"%d dni",M:"miesiąc",MM:a,y:"rok",yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(53806))},43809:function(e,t,n){!function(e){"use strict";e.defineLocale("pt-br",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"poucos segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº"})}(n(53806))},15179:function(e,t,n){!function(e){"use strict";e.defineLocale("pt",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(53806))},71998:function(e,t,n){!function(e){"use strict";function t(e,t,n){var r=" ";return(e%100>=20||e>=100&&e%100==0)&&(r=" de "),e+r+{ss:"secunde",mm:"minute",hh:"ore",dd:"zile",MM:"luni",yy:"ani"}[n]}e.defineLocale("ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"duminică_luni_marți_miercuri_joi_vineri_sâmbătă".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[mâine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s în urmă",s:"câteva secunde",ss:t,m:"un minut",mm:t,h:"o oră",hh:t,d:"o zi",dd:t,M:"o lună",MM:t,y:"un an",yy:t},week:{dow:1,doy:7}})}(n(53806))},13586:function(e,t,n){!function(e){"use strict";function t(e,t){var n=e.split("_");return t%10==1&&t%100!=11?n[0]:t%10>=2&&t%10<=4&&(t%100<10||t%100>=20)?n[1]:n[2]}function n(e,n,r){return"m"===r?n?"минута":"минуту":e+" "+t({ss:n?"секунда_секунды_секунд":"секунду_секунды_секунд",mm:n?"минута_минуты_минут":"минуту_минуты_минут",hh:"час_часа_часов",dd:"день_дня_дней",MM:"месяц_месяца_месяцев",yy:"год_года_лет"}[r],+e)}var r=[/^янв/i,/^фев/i,/^мар/i,/^апр/i,/^ма[йя]/i,/^июн/i,/^июл/i,/^авг/i,/^сен/i,/^окт/i,/^ноя/i,/^дек/i];e.defineLocale("ru",{months:{format:"января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря".split("_"),standalone:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_")},monthsShort:{format:"янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.".split("_"),standalone:"янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.".split("_")},weekdays:{standalone:"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота".split("_"),format:"воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу".split("_"),isFormat:/\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/},weekdaysShort:"вс_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"вс_пн_вт_ср_чт_пт_сб".split("_"),monthsParse:r,longMonthsParse:r,shortMonthsParse:r,monthsRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsShortRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsStrictRegex:/^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,monthsShortStrictRegex:/^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., H:mm",LLLL:"dddd, D MMMM YYYY г., H:mm"},calendar:{sameDay:"[Сегодня, в] LT",nextDay:"[Завтра, в] LT",lastDay:"[Вчера, в] LT",nextWeek:function(e){if(e.week()===this.week())return 2===this.day()?"[Во] dddd, [в] LT":"[В] dddd, [в] LT";switch(this.day()){case 0:return"[В следующее] dddd, [в] LT";case 1:case 2:case 4:return"[В следующий] dddd, [в] LT";case 3:case 5:case 6:return"[В следующую] dddd, [в] LT"}},lastWeek:function(e){if(e.week()===this.week())return 2===this.day()?"[Во] dddd, [в] LT":"[В] dddd, [в] LT";switch(this.day()){case 0:return"[В прошлое] dddd, [в] LT";case 1:case 2:case 4:return"[В прошлый] dddd, [в] LT";case 3:case 5:case 6:return"[В прошлую] dddd, [в] LT"}},sameElse:"L"},relativeTime:{future:"через %s",past:"%s назад",s:"несколько секунд",ss:n,m:n,mm:n,h:"час",hh:n,d:"день",dd:n,M:"месяц",MM:n,y:"год",yy:n},meridiemParse:/ночи|утра|дня|вечера/i,isPM:function(e){return/^(дня|вечера)$/.test(e)},meridiem:function(e,t,n){return e<4?"ночи":e<12?"утра":e<17?"дня":"вечера"},dayOfMonthOrdinalParse:/\d{1,2}-(й|го|я)/,ordinal:function(e,t){switch(t){case"M":case"d":case"DDD":return e+"-й";case"D":return e+"-го";case"w":case"W":return e+"-я";default:return e}},week:{dow:1,doy:4}})}(n(53806))},65424:function(e,t,n){!function(e){"use strict";var t=["جنوري","فيبروري","مارچ","اپريل","مئي","جون","جولاءِ","آگسٽ","سيپٽمبر","آڪٽوبر","نومبر","ڊسمبر"],n=["آچر","سومر","اڱارو","اربع","خميس","جمع","ڇنڇر"];e.defineLocale("sd",{months:t,monthsShort:t,weekdays:n,weekdaysShort:n,weekdaysMin:n,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},meridiemParse:/صبح|شام/,isPM:function(e){return"شام"===e},meridiem:function(e,t,n){return e<12?"صبح":"شام"},calendar:{sameDay:"[اڄ] LT",nextDay:"[سڀاڻي] LT",nextWeek:"dddd [اڳين هفتي تي] LT",lastDay:"[ڪالهه] LT",lastWeek:"[گزريل هفتي] dddd [تي] LT",sameElse:"L"},relativeTime:{future:"%s پوء",past:"%s اڳ",s:"چند سيڪنڊ",ss:"%d سيڪنڊ",m:"هڪ منٽ",mm:"%d منٽ",h:"هڪ ڪلاڪ",hh:"%d ڪلاڪ",d:"هڪ ڏينهن",dd:"%d ڏينهن",M:"هڪ مهينو",MM:"%d مهينا",y:"هڪ سال",yy:"%d سال"},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/,/g,"،")},week:{dow:1,doy:4}})}(n(53806))},19412:function(e,t,n){!function(e){"use strict";e.defineLocale("se",{months:"ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu".split("_"),monthsShort:"ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov".split("_"),weekdays:"sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat".split("_"),weekdaysShort:"sotn_vuos_maŋ_gask_duor_bear_láv".split("_"),weekdaysMin:"s_v_m_g_d_b_L".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"MMMM D. [b.] YYYY",LLL:"MMMM D. [b.] YYYY [ti.] HH:mm",LLLL:"dddd, MMMM D. [b.] YYYY [ti.] HH:mm"},calendar:{sameDay:"[otne ti] LT",nextDay:"[ihttin ti] LT",nextWeek:"dddd [ti] LT",lastDay:"[ikte ti] LT",lastWeek:"[ovddit] dddd [ti] LT",sameElse:"L"},relativeTime:{future:"%s geažes",past:"maŋit %s",s:"moadde sekunddat",ss:"%d sekunddat",m:"okta minuhta",mm:"%d minuhtat",h:"okta diimmu",hh:"%d diimmut",d:"okta beaivi",dd:"%d beaivvit",M:"okta mánnu",MM:"%d mánut",y:"okta jahki",yy:"%d jagit"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(53806))},19220:function(e,t,n){!function(e){"use strict";e.defineLocale("si",{months:"ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්".split("_"),monthsShort:"ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ".split("_"),weekdays:"ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා".split("_"),weekdaysShort:"ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන".split("_"),weekdaysMin:"ඉ_ස_අ_බ_බ්‍ර_සි_සෙ".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"a h:mm",LTS:"a h:mm:ss",L:"YYYY/MM/DD",LL:"YYYY MMMM D",LLL:"YYYY MMMM D, a h:mm",LLLL:"YYYY MMMM D [වැනි] dddd, a h:mm:ss"},calendar:{sameDay:"[අද] LT[ට]",nextDay:"[හෙට] LT[ට]",nextWeek:"dddd LT[ට]",lastDay:"[ඊයේ] LT[ට]",lastWeek:"[පසුගිය] dddd LT[ට]",sameElse:"L"},relativeTime:{future:"%sකින්",past:"%sකට පෙර",s:"තත්පර කිහිපය",ss:"තත්පර %d",m:"මිනිත්තුව",mm:"මිනිත්තු %d",h:"පැය",hh:"පැය %d",d:"දිනය",dd:"දින %d",M:"මාසය",MM:"මාස %d",y:"වසර",yy:"වසර %d"},dayOfMonthOrdinalParse:/\d{1,2} වැනි/,ordinal:function(e){return e+" වැනි"},meridiemParse:/පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,isPM:function(e){return"ප.ව."===e||"පස් වරු"===e},meridiem:function(e,t,n){return e>11?n?"ප.ව.":"පස් වරු":n?"පෙ.ව.":"පෙර වරු"}})}(n(53806))},47374:function(e,t,n){!function(e){"use strict";var t="január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"),n="jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_");function r(e){return e>1&&e<5}function a(e,t,n,a){var i=e+" ";switch(n){case"s":return t||a?"pár sekúnd":"pár sekundami";case"ss":return t||a?i+(r(e)?"sekundy":"sekúnd"):i+"sekundami";case"m":return t?"minúta":a?"minútu":"minútou";case"mm":return t||a?i+(r(e)?"minúty":"minút"):i+"minútami";case"h":return t?"hodina":a?"hodinu":"hodinou";case"hh":return t||a?i+(r(e)?"hodiny":"hodín"):i+"hodinami";case"d":return t||a?"deň":"dňom";case"dd":return t||a?i+(r(e)?"dni":"dní"):i+"dňami";case"M":return t||a?"mesiac":"mesiacom";case"MM":return t||a?i+(r(e)?"mesiace":"mesiacov"):i+"mesiacmi";case"y":return t||a?"rok":"rokom";case"yy":return t||a?i+(r(e)?"roky":"rokov"):i+"rokmi"}}e.defineLocale("sk",{months:t,monthsShort:n,weekdays:"nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_št_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_št_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nedeľu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo štvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[včera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulú nedeľu o] LT";case 1:case 2:case 4:case 5:return"[minulý] dddd [o] LT";case 3:return"[minulú stredu o] LT";case 6:return"[minulú sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:a,ss:a,m:a,mm:a,h:a,hh:a,d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(53806))},67574:function(e,t,n){!function(e){"use strict";function t(e,t,n,r){var a=e+" ";switch(n){case"s":return t||r?"nekaj sekund":"nekaj sekundami";case"ss":return a+=1===e?t?"sekundo":"sekundi":2===e?t||r?"sekundi":"sekundah":e<5?t||r?"sekunde":"sekundah":"sekund";case"m":return t?"ena minuta":"eno minuto";case"mm":return a+=1===e?t?"minuta":"minuto":2===e?t||r?"minuti":"minutama":e<5?t||r?"minute":"minutami":t||r?"minut":"minutami";case"h":return t?"ena ura":"eno uro";case"hh":return a+=1===e?t?"ura":"uro":2===e?t||r?"uri":"urama":e<5?t||r?"ure":"urami":t||r?"ur":"urami";case"d":return t||r?"en dan":"enim dnem";case"dd":return a+=1===e?t||r?"dan":"dnem":2===e?t||r?"dni":"dnevoma":t||r?"dni":"dnevi";case"M":return t||r?"en mesec":"enim mesecem";case"MM":return a+=1===e?t||r?"mesec":"mesecem":2===e?t||r?"meseca":"mesecema":e<5?t||r?"mesece":"meseci":t||r?"mesecev":"meseci";case"y":return t||r?"eno leto":"enim letom";case"yy":return a+=1===e?t||r?"leto":"letom":2===e?t||r?"leti":"letoma":e<5?t||r?"leta":"leti":t||r?"let":"leti"}}e.defineLocale("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._čet._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_če_pe_so".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[včeraj ob] LT",lastWeek:function(){switch(this.day()){case 0:return"[prejšnjo] [nedeljo] [ob] LT";case 3:return"[prejšnjo] [sredo] [ob] LT";case 6:return"[prejšnjo] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[prejšnji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"čez %s",past:"pred %s",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(53806))},62977:function(e,t,n){!function(e){"use strict";e.defineLocale("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"),weekdays:"E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë".split("_"),weekdaysShort:"Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_Më_E_P_Sh".split("_"),weekdaysParseExact:!0,meridiemParse:/PD|MD/,isPM:function(e){return"M"===e.charAt(0)},meridiem:function(e,t,n){return e<12?"PD":"MD"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Sot në] LT",nextDay:"[Nesër në] LT",nextWeek:"dddd [në] LT",lastDay:"[Dje në] LT",lastWeek:"dddd [e kaluar në] LT",sameElse:"L"},relativeTime:{future:"në %s",past:"%s më parë",s:"disa sekonda",ss:"%d sekonda",m:"një minutë",mm:"%d minuta",h:"një orë",hh:"%d orë",d:"një ditë",dd:"%d ditë",M:"një muaj",MM:"%d muaj",y:"një vit",yy:"%d vite"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(53806))},53388:function(e,t,n){!function(e){"use strict";var t={words:{ss:["секунда","секунде","секунди"],m:["један минут","једне минуте"],mm:["минут","минуте","минута"],h:["један сат","једног сата"],hh:["сат","сата","сати"],dd:["дан","дана","дана"],MM:["месец","месеца","месеци"],yy:["година","године","година"]},correctGrammaticalCase:function(e,t){return 1===e?t[0]:e>=2&&e<=4?t[1]:t[2]},translate:function(e,n,r){var a=t.words[r];return 1===r.length?n?a[0]:a[1]:e+" "+t.correctGrammaticalCase(e,a)}};e.defineLocale("sr-cyrl",{months:"јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар".split("_"),monthsShort:"јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.".split("_"),monthsParseExact:!0,weekdays:"недеља_понедељак_уторак_среда_четвртак_петак_субота".split("_"),weekdaysShort:"нед._пон._уто._сре._чет._пет._суб.".split("_"),weekdaysMin:"не_по_ут_ср_че_пе_су".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[данас у] LT",nextDay:"[сутра у] LT",nextWeek:function(){switch(this.day()){case 0:return"[у] [недељу] [у] LT";case 3:return"[у] [среду] [у] LT";case 6:return"[у] [суботу] [у] LT";case 1:case 2:case 4:case 5:return"[у] dddd [у] LT"}},lastDay:"[јуче у] LT",lastWeek:function(){return["[прошле] [недеље] [у] LT","[прошлог] [понедељка] [у] LT","[прошлог] [уторка] [у] LT","[прошле] [среде] [у] LT","[прошлог] [четвртка] [у] LT","[прошлог] [петка] [у] LT","[прошле] [суботе] [у] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"за %s",past:"пре %s",s:"неколико секунди",ss:t.translate,m:t.translate,mm:t.translate,h:t.translate,hh:t.translate,d:"дан",dd:t.translate,M:"месец",MM:t.translate,y:"годину",yy:t.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(53806))},76792:function(e,t,n){!function(e){"use strict";var t={words:{ss:["sekunda","sekunde","sekundi"],m:["jedan minut","jedne minute"],mm:["minut","minute","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mesec","meseca","meseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(e,t){return 1===e?t[0]:e>=2&&e<=4?t[1]:t[2]},translate:function(e,n,r){var a=t.words[r];return 1===r.length?n?a[0]:a[1]:e+" "+t.correctGrammaticalCase(e,a)}};e.defineLocale("sr",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sre._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){return["[prošle] [nedelje] [u] LT","[prošlog] [ponedeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",ss:t.translate,m:t.translate,mm:t.translate,h:t.translate,hh:t.translate,d:"dan",dd:t.translate,M:"mesec",MM:t.translate,y:"godinu",yy:t.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(53806))},41676:function(e,t,n){!function(e){"use strict";e.defineLocale("ss",{months:"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split("_"),monthsShort:"Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo".split("_"),weekdays:"Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo".split("_"),weekdaysShort:"Lis_Umb_Lsb_Les_Lsi_Lsh_Umg".split("_"),weekdaysMin:"Li_Us_Lb_Lt_Ls_Lh_Ug".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Namuhla nga] LT",nextDay:"[Kusasa nga] LT",nextWeek:"dddd [nga] LT",lastDay:"[Itolo nga] LT",lastWeek:"dddd [leliphelile] [nga] LT",sameElse:"L"},relativeTime:{future:"nga %s",past:"wenteka nga %s",s:"emizuzwana lomcane",ss:"%d mzuzwana",m:"umzuzu",mm:"%d emizuzu",h:"lihora",hh:"%d emahora",d:"lilanga",dd:"%d emalanga",M:"inyanga",MM:"%d tinyanga",y:"umnyaka",yy:"%d iminyaka"},meridiemParse:/ekuseni|emini|entsambama|ebusuku/,meridiem:function(e,t,n){return e<11?"ekuseni":e<15?"emini":e<19?"entsambama":"ebusuku"},meridiemHour:function(e,t){return 12===e&&(e=0),"ekuseni"===t?e:"emini"===t?e>=11?e:e+12:"entsambama"===t||"ebusuku"===t?0===e?0:e+12:void 0},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:"%d",week:{dow:1,doy:4}})}(n(53806))},89807:function(e,t,n){!function(e){"use strict";e.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Igår] LT",nextWeek:"[På] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",ss:"%d sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}(e|a)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"e":1===t||2===t?"a":"e")},week:{dow:1,doy:4}})}(n(53806))},39893:function(e,t,n){!function(e){"use strict";e.defineLocale("sw",{months:"Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des".split("_"),weekdays:"Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi".split("_"),weekdaysShort:"Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos".split("_"),weekdaysMin:"J2_J3_J4_J5_Al_Ij_J1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[leo saa] LT",nextDay:"[kesho saa] LT",nextWeek:"[wiki ijayo] dddd [saat] LT",lastDay:"[jana] LT",lastWeek:"[wiki iliyopita] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s baadaye",past:"tokea %s",s:"hivi punde",ss:"sekunde %d",m:"dakika moja",mm:"dakika %d",h:"saa limoja",hh:"masaa %d",d:"siku moja",dd:"masiku %d",M:"mwezi mmoja",MM:"miezi %d",y:"mwaka mmoja",yy:"miaka %d"},week:{dow:1,doy:7}})}(n(53806))},81610:function(e,t,n){!function(e){"use strict";var t={1:"௧",2:"௨",3:"௩",4:"௪",5:"௫",6:"௬",7:"௭",8:"௮",9:"௯",0:"௦"},n={"௧":"1","௨":"2","௩":"3","௪":"4","௫":"5","௬":"6","௭":"7","௮":"8","௯":"9","௦":"0"};e.defineLocale("ta",{months:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),monthsShort:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),weekdays:"ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை".split("_"),weekdaysShort:"ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி".split("_"),weekdaysMin:"ஞா_தி_செ_பு_வி_வெ_ச".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, HH:mm",LLLL:"dddd, D MMMM YYYY, HH:mm"},calendar:{sameDay:"[இன்று] LT",nextDay:"[நாளை] LT",nextWeek:"dddd, LT",lastDay:"[நேற்று] LT",lastWeek:"[கடந்த வாரம்] dddd, LT",sameElse:"L"},relativeTime:{future:"%s இல்",past:"%s முன்",s:"ஒரு சில விநாடிகள்",ss:"%d விநாடிகள்",m:"ஒரு நிமிடம்",mm:"%d நிமிடங்கள்",h:"ஒரு மணி நேரம்",hh:"%d மணி நேரம்",d:"ஒரு நாள்",dd:"%d நாட்கள்",M:"ஒரு மாதம்",MM:"%d மாதங்கள்",y:"ஒரு வருடம்",yy:"%d ஆண்டுகள்"},dayOfMonthOrdinalParse:/\d{1,2}வது/,ordinal:function(e){return e+"வது"},preparse:function(e){return e.replace(/[௧௨௩௪௫௬௭௮௯௦]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},meridiemParse:/யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,meridiem:function(e,t,n){return e<2?" யாமம்":e<6?" வைகறை":e<10?" காலை":e<14?" நண்பகல்":e<18?" எற்பாடு":e<22?" மாலை":" யாமம்"},meridiemHour:function(e,t){return 12===e&&(e=0),"யாமம்"===t?e<2?e:e+12:"வைகறை"===t||"காலை"===t||"நண்பகல்"===t&&e>=10?e:e+12},week:{dow:0,doy:6}})}(n(53806))},38921:function(e,t,n){!function(e){"use strict";e.defineLocale("te",{months:"జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్".split("_"),monthsShort:"జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.".split("_"),monthsParseExact:!0,weekdays:"ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం".split("_"),weekdaysShort:"ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని".split("_"),weekdaysMin:"ఆ_సో_మం_బు_గు_శు_శ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[నేడు] LT",nextDay:"[రేపు] LT",nextWeek:"dddd, LT",lastDay:"[నిన్న] LT",lastWeek:"[గత] dddd, LT",sameElse:"L"},relativeTime:{future:"%s లో",past:"%s క్రితం",s:"కొన్ని క్షణాలు",ss:"%d సెకన్లు",m:"ఒక నిమిషం",mm:"%d నిమిషాలు",h:"ఒక గంట",hh:"%d గంటలు",d:"ఒక రోజు",dd:"%d రోజులు",M:"ఒక నెల",MM:"%d నెలలు",y:"ఒక సంవత్సరం",yy:"%d సంవత్సరాలు"},dayOfMonthOrdinalParse:/\d{1,2}వ/,ordinal:"%dవ",meridiemParse:/రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,meridiemHour:function(e,t){return 12===e&&(e=0),"రాత్రి"===t?e<4?e:e+12:"ఉదయం"===t?e:"మధ్యాహ్నం"===t?e>=10?e:e+12:"సాయంత్రం"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"రాత్రి":e<10?"ఉదయం":e<17?"మధ్యాహ్నం":e<20?"సాయంత్రం":"రాత్రి"},week:{dow:0,doy:6}})}(n(53806))},16791:function(e,t,n){!function(e){"use strict";e.defineLocale("tet",{months:"Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu".split("_"),weekdaysShort:"Dom_Seg_Ters_Kua_Kint_Sest_Sab".split("_"),weekdaysMin:"Do_Seg_Te_Ku_Ki_Ses_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Ohin iha] LT",nextDay:"[Aban iha] LT",nextWeek:"dddd [iha] LT",lastDay:"[Horiseik iha] LT",lastWeek:"dddd [semana kotuk] [iha] LT",sameElse:"L"},relativeTime:{future:"iha %s",past:"%s liuba",s:"minutu balun",ss:"minutu %d",m:"minutu ida",mm:"minutu %d",h:"oras ida",hh:"oras %d",d:"loron ida",dd:"loron %d",M:"fulan ida",MM:"fulan %d",y:"tinan ida",yy:"tinan %d"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})}(n(53806))},7353:function(e,t,n){!function(e){"use strict";var t={0:"-ум",1:"-ум",2:"-юм",3:"-юм",4:"-ум",5:"-ум",6:"-ум",7:"-ум",8:"-ум",9:"-ум",10:"-ум",12:"-ум",13:"-ум",20:"-ум",30:"-юм",40:"-ум",50:"-ум",60:"-ум",70:"-ум",80:"-ум",90:"-ум",100:"-ум"};e.defineLocale("tg",{months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdays:"якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе".split("_"),weekdaysShort:"яшб_дшб_сшб_чшб_пшб_ҷум_шнб".split("_"),weekdaysMin:"яш_дш_сш_чш_пш_ҷм_шб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Имрӯз соати] LT",nextDay:"[Пагоҳ соати] LT",lastDay:"[Дирӯз соати] LT",nextWeek:"dddd[и] [ҳафтаи оянда соати] LT",lastWeek:"dddd[и] [ҳафтаи гузашта соати] LT",sameElse:"L"},relativeTime:{future:"баъди %s",past:"%s пеш",s:"якчанд сония",m:"як дақиқа",mm:"%d дақиқа",h:"як соат",hh:"%d соат",d:"як рӯз",dd:"%d рӯз",M:"як моҳ",MM:"%d моҳ",y:"як сол",yy:"%d сол"},meridiemParse:/шаб|субҳ|рӯз|бегоҳ/,meridiemHour:function(e,t){return 12===e&&(e=0),"шаб"===t?e<4?e:e+12:"субҳ"===t?e:"рӯз"===t?e>=11?e:e+12:"бегоҳ"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"шаб":e<11?"субҳ":e<16?"рӯз":e<19?"бегоҳ":"шаб"},dayOfMonthOrdinalParse:/\d{1,2}-(ум|юм)/,ordinal:function(e){var n=e%10,r=e>=100?100:null;return e+(t[e]||t[n]||t[r])},week:{dow:1,doy:7}})}(n(53806))},10035:function(e,t,n){!function(e){"use strict";e.defineLocale("th",{months:"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),monthsShort:"ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.".split("_"),monthsParseExact:!0,weekdays:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),weekdaysShort:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"),weekdaysMin:"อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY เวลา H:mm",LLLL:"วันddddที่ D MMMM YYYY เวลา H:mm"},meridiemParse:/ก่อนเที่ยง|หลังเที่ยง/,isPM:function(e){return"หลังเที่ยง"===e},meridiem:function(e,t,n){return e<12?"ก่อนเที่ยง":"หลังเที่ยง"},calendar:{sameDay:"[วันนี้ เวลา] LT",nextDay:"[พรุ่งนี้ เวลา] LT",nextWeek:"dddd[หน้า เวลา] LT",lastDay:"[เมื่อวานนี้ เวลา] LT",lastWeek:"[วัน]dddd[ที่แล้ว เวลา] LT",sameElse:"L"},relativeTime:{future:"อีก %s",past:"%sที่แล้ว",s:"ไม่กี่วินาที",ss:"%d วินาที",m:"1 นาที",mm:"%d นาที",h:"1 ชั่วโมง",hh:"%d ชั่วโมง",d:"1 วัน",dd:"%d วัน",M:"1 เดือน",MM:"%d เดือน",y:"1 ปี",yy:"%d ปี"}})}(n(53806))},72526:function(e,t,n){!function(e){"use strict";e.defineLocale("tl-ph",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",ss:"%d segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}})}(n(53806))},8730:function(e,t,n){!function(e){"use strict";var t="pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut".split("_");function n(e){var t=e;return t=-1!==e.indexOf("jaj")?t.slice(0,-3)+"leS":-1!==e.indexOf("jar")?t.slice(0,-3)+"waQ":-1!==e.indexOf("DIS")?t.slice(0,-3)+"nem":t+" pIq"}function r(e){var t=e;return t=-1!==e.indexOf("jaj")?t.slice(0,-3)+"Hu’":-1!==e.indexOf("jar")?t.slice(0,-3)+"wen":-1!==e.indexOf("DIS")?t.slice(0,-3)+"ben":t+" ret"}function a(e,t,n,r){var a=i(e);switch(n){case"ss":return a+" lup";case"mm":return a+" tup";case"hh":return a+" rep";case"dd":return a+" jaj";case"MM":return a+" jar";case"yy":return a+" DIS"}}function i(e){var n=Math.floor(e%1e3/100),r=Math.floor(e%100/10),a=e%10,i="";return n>0&&(i+=t[n]+"vatlh"),r>0&&(i+=(""!==i?" ":"")+t[r]+"maH"),a>0&&(i+=(""!==i?" ":"")+t[a]),""===i?"pagh":i}e.defineLocale("tlh",{months:"tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’".split("_"),monthsShort:"jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’".split("_"),monthsParseExact:!0,weekdays:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysShort:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysMin:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[DaHjaj] LT",nextDay:"[wa’leS] LT",nextWeek:"LLL",lastDay:"[wa’Hu’] LT",lastWeek:"LLL",sameElse:"L"},relativeTime:{future:n,past:r,s:"puS lup",ss:a,m:"wa’ tup",mm:a,h:"wa’ rep",hh:a,d:"wa’ jaj",dd:a,M:"wa’ jar",MM:a,y:"wa’ DIS",yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(53806))},59059:function(e,t,n){!function(e){"use strict";var t={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'üncü",4:"'üncü",100:"'üncü",6:"'ncı",9:"'uncu",10:"'uncu",30:"'uncu",60:"'ıncı",90:"'ıncı"};e.defineLocale("tr",{months:"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),monthsShort:"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[yarın saat] LT",nextWeek:"[gelecek] dddd [saat] LT",lastDay:"[dün] LT",lastWeek:"[geçen] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s önce",s:"birkaç saniye",ss:"%d saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir yıl",yy:"%d yıl"},ordinal:function(e,n){switch(n){case"d":case"D":case"Do":case"DD":return e;default:if(0===e)return e+"'ıncı";var r=e%10,a=e%100-r,i=e>=100?100:null;return e+(t[r]||t[a]||t[i])}},week:{dow:1,doy:7}})}(n(53806))},88459:function(e,t,n){!function(e){"use strict";function t(e,t,n,r){var a={s:["viensas secunds","'iensas secunds"],ss:[e+" secunds",e+" secunds"],m:["'n míut","'iens míut"],mm:[e+" míuts",e+" míuts"],h:["'n þora","'iensa þora"],hh:[e+" þoras",e+" þoras"],d:["'n ziua","'iensa ziua"],dd:[e+" ziuas",e+" ziuas"],M:["'n mes","'iens mes"],MM:[e+" mesen",e+" mesen"],y:["'n ar","'iens ar"],yy:[e+" ars",e+" ars"]};return r||t?a[n][0]:a[n][1]}e.defineLocale("tzl",{months:"Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec".split("_"),weekdays:"Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi".split("_"),weekdaysShort:"Súl_Lún_Mai_Már_Xhú_Vié_Sát".split("_"),weekdaysMin:"Sú_Lú_Ma_Má_Xh_Vi_Sá".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM [dallas] YYYY",LLL:"D. MMMM [dallas] YYYY HH.mm",LLLL:"dddd, [li] D. MMMM [dallas] YYYY HH.mm"},meridiemParse:/d\'o|d\'a/i,isPM:function(e){return"d'o"===e.toLowerCase()},meridiem:function(e,t,n){return e>11?n?"d'o":"D'O":n?"d'a":"D'A"},calendar:{sameDay:"[oxhi à] LT",nextDay:"[demà à] LT",nextWeek:"dddd [à] LT",lastDay:"[ieiri à] LT",lastWeek:"[sür el] dddd [lasteu à] LT",sameElse:"L"},relativeTime:{future:"osprei %s",past:"ja%s",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(53806))},98904:function(e,t,n){!function(e){"use strict";e.defineLocale("tzm-latn",{months:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),monthsShort:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[asdkh g] LT",nextDay:"[aska g] LT",nextWeek:"dddd [g] LT",lastDay:"[assant g] LT",lastWeek:"dddd [g] LT",sameElse:"L"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",ss:"%d imik",m:"minuḍ",mm:"%d minuḍ",h:"saɛa",hh:"%d tassaɛin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"},week:{dow:6,doy:12}})}(n(53806))},46357:function(e,t,n){!function(e){"use strict";e.defineLocale("tzm",{months:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),monthsShort:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),weekdays:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysShort:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysMin:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ⴰⵙⴷⵅ ⴴ] LT",nextDay:"[ⴰⵙⴽⴰ ⴴ] LT",nextWeek:"dddd [ⴴ] LT",lastDay:"[ⴰⵚⴰⵏⵜ ⴴ] LT",lastWeek:"dddd [ⴴ] LT",sameElse:"L"},relativeTime:{future:"ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s",past:"ⵢⴰⵏ %s",s:"ⵉⵎⵉⴽ",ss:"%d ⵉⵎⵉⴽ",m:"ⵎⵉⵏⵓⴺ",mm:"%d ⵎⵉⵏⵓⴺ",h:"ⵙⴰⵄⴰ",hh:"%d ⵜⴰⵙⵙⴰⵄⵉⵏ",d:"ⴰⵙⵙ",dd:"%d oⵙⵙⴰⵏ",M:"ⴰⵢoⵓⵔ",MM:"%d ⵉⵢⵢⵉⵔⵏ",y:"ⴰⵙⴳⴰⵙ",yy:"%d ⵉⵙⴳⴰⵙⵏ"},week:{dow:6,doy:12}})}(n(53806))},40014:function(e,t,n){!function(e){"use strict";e.defineLocale("ug-cn",{months:"يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر".split("_"),monthsShort:"يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر".split("_"),weekdays:"يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە".split("_"),weekdaysShort:"يە_دۈ_سە_چا_پە_جۈ_شە".split("_"),weekdaysMin:"يە_دۈ_سە_چا_پە_جۈ_شە".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY-يىلىM-ئاينىڭD-كۈنى",LLL:"YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm",LLLL:"dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm"},meridiemParse:/يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,meridiemHour:function(e,t){return 12===e&&(e=0),"يېرىم كېچە"===t||"سەھەر"===t||"چۈشتىن بۇرۇن"===t?e:"چۈشتىن كېيىن"===t||"كەچ"===t?e+12:e>=11?e:e+12},meridiem:function(e,t,n){var r=100*e+t;return r<600?"يېرىم كېچە":r<900?"سەھەر":r<1130?"چۈشتىن بۇرۇن":r<1230?"چۈش":r<1800?"چۈشتىن كېيىن":"كەچ"},calendar:{sameDay:"[بۈگۈن سائەت] LT",nextDay:"[ئەتە سائەت] LT",nextWeek:"[كېلەركى] dddd [سائەت] LT",lastDay:"[تۆنۈگۈن] LT",lastWeek:"[ئالدىنقى] dddd [سائەت] LT",sameElse:"L"},relativeTime:{future:"%s كېيىن",past:"%s بۇرۇن",s:"نەچچە سېكونت",ss:"%d سېكونت",m:"بىر مىنۇت",mm:"%d مىنۇت",h:"بىر سائەت",hh:"%d سائەت",d:"بىر كۈن",dd:"%d كۈن",M:"بىر ئاي",MM:"%d ئاي",y:"بىر يىل",yy:"%d يىل"},dayOfMonthOrdinalParse:/\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"-كۈنى";case"w":case"W":return e+"-ھەپتە";default:return e}},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/,/g,"،")},week:{dow:1,doy:7}})}(n(53806))},87166:function(e,t,n){!function(e){"use strict";function t(e,t){var n=e.split("_");return t%10==1&&t%100!=11?n[0]:t%10>=2&&t%10<=4&&(t%100<10||t%100>=20)?n[1]:n[2]}function n(e,n,r){return"m"===r?n?"хвилина":"хвилину":"h"===r?n?"година":"годину":e+" "+t({ss:n?"секунда_секунди_секунд":"секунду_секунди_секунд",mm:n?"хвилина_хвилини_хвилин":"хвилину_хвилини_хвилин",hh:n?"година_години_годин":"годину_години_годин",dd:"день_дні_днів",MM:"місяць_місяці_місяців",yy:"рік_роки_років"}[r],+e)}function r(e,t){var n={nominative:"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота".split("_"),accusative:"неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу".split("_"),genitive:"неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи".split("_")};return!0===e?n.nominative.slice(1,7).concat(n.nominative.slice(0,1)):e?n[/(\[[ВвУу]\]) ?dddd/.test(t)?"accusative":/\[?(?:минулої|наступної)? ?\] ?dddd/.test(t)?"genitive":"nominative"][e.day()]:n.nominative}function a(e){return function(){return e+"о"+(11===this.hours()?"б":"")+"] LT"}}e.defineLocale("uk",{months:{format:"січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня".split("_"),standalone:"січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень".split("_")},monthsShort:"січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"),weekdays:r,weekdaysShort:"нд_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY р.",LLL:"D MMMM YYYY р., HH:mm",LLLL:"dddd, D MMMM YYYY р., HH:mm"},calendar:{sameDay:a("[Сьогодні "),nextDay:a("[Завтра "),lastDay:a("[Вчора "),nextWeek:a("[У] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return a("[Минулої] dddd [").call(this);case 1:case 2:case 4:return a("[Минулого] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"за %s",past:"%s тому",s:"декілька секунд",ss:n,m:n,mm:n,h:"годину",hh:n,d:"день",dd:n,M:"місяць",MM:n,y:"рік",yy:n},meridiemParse:/ночі|ранку|дня|вечора/,isPM:function(e){return/^(дня|вечора)$/.test(e)},meridiem:function(e,t,n){return e<4?"ночі":e<12?"ранку":e<17?"дня":"вечора"},dayOfMonthOrdinalParse:/\d{1,2}-(й|го)/,ordinal:function(e,t){switch(t){case"M":case"d":case"DDD":case"w":case"W":return e+"-й";case"D":return e+"-го";default:return e}},week:{dow:1,doy:7}})}(n(53806))},42450:function(e,t,n){!function(e){"use strict";var t=["جنوری","فروری","مارچ","اپریل","مئی","جون","جولائی","اگست","ستمبر","اکتوبر","نومبر","دسمبر"],n=["اتوار","پیر","منگل","بدھ","جمعرات","جمعہ","ہفتہ"];e.defineLocale("ur",{months:t,monthsShort:t,weekdays:n,weekdaysShort:n,weekdaysMin:n,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},meridiemParse:/صبح|شام/,isPM:function(e){return"شام"===e},meridiem:function(e,t,n){return e<12?"صبح":"شام"},calendar:{sameDay:"[آج بوقت] LT",nextDay:"[کل بوقت] LT",nextWeek:"dddd [بوقت] LT",lastDay:"[گذشتہ روز بوقت] LT",lastWeek:"[گذشتہ] dddd [بوقت] LT",sameElse:"L"},relativeTime:{future:"%s بعد",past:"%s قبل",s:"چند سیکنڈ",ss:"%d سیکنڈ",m:"ایک منٹ",mm:"%d منٹ",h:"ایک گھنٹہ",hh:"%d گھنٹے",d:"ایک دن",dd:"%d دن",M:"ایک ماہ",MM:"%d ماہ",y:"ایک سال",yy:"%d سال"},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/,/g,"،")},week:{dow:1,doy:4}})}(n(53806))},42939:function(e,t,n){!function(e){"use strict";e.defineLocale("uz-latn",{months:"Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr".split("_"),monthsShort:"Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek".split("_"),weekdays:"Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba".split("_"),weekdaysShort:"Yak_Dush_Sesh_Chor_Pay_Jum_Shan".split("_"),weekdaysMin:"Ya_Du_Se_Cho_Pa_Ju_Sha".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Bugun soat] LT [da]",nextDay:"[Ertaga] LT [da]",nextWeek:"dddd [kuni soat] LT [da]",lastDay:"[Kecha soat] LT [da]",lastWeek:"[O'tgan] dddd [kuni soat] LT [da]",sameElse:"L"},relativeTime:{future:"Yaqin %s ichida",past:"Bir necha %s oldin",s:"soniya",ss:"%d soniya",m:"bir daqiqa",mm:"%d daqiqa",h:"bir soat",hh:"%d soat",d:"bir kun",dd:"%d kun",M:"bir oy",MM:"%d oy",y:"bir yil",yy:"%d yil"},week:{dow:1,doy:7}})}(n(53806))},76150:function(e,t,n){!function(e){"use strict";e.defineLocale("uz",{months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdays:"Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба".split("_"),weekdaysShort:"Якш_Душ_Сеш_Чор_Пай_Жум_Шан".split("_"),weekdaysMin:"Як_Ду_Се_Чо_Па_Жу_Ша".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Бугун соат] LT [да]",nextDay:"[Эртага] LT [да]",nextWeek:"dddd [куни соат] LT [да]",lastDay:"[Кеча соат] LT [да]",lastWeek:"[Утган] dddd [куни соат] LT [да]",sameElse:"L"},relativeTime:{future:"Якин %s ичида",past:"Бир неча %s олдин",s:"фурсат",ss:"%d фурсат",m:"бир дакика",mm:"%d дакика",h:"бир соат",hh:"%d соат",d:"бир кун",dd:"%d кун",M:"бир ой",MM:"%d ой",y:"бир йил",yy:"%d йил"},week:{dow:1,doy:7}})}(n(53806))},62959:function(e,t,n){!function(e){"use strict";e.defineLocale("vi",{months:"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),monthsShort:"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),monthsParseExact:!0,weekdays:"chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(e){return/^ch$/i.test(e)},meridiem:function(e,t,n){return e<12?n?"sa":"SA":n?"ch":"CH"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [năm] YYYY",LLL:"D MMMM [năm] YYYY HH:mm",LLLL:"dddd, D MMMM [năm] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[Hôm nay lúc] LT",nextDay:"[Ngày mai lúc] LT",nextWeek:"dddd [tuần tới lúc] LT",lastDay:"[Hôm qua lúc] LT",lastWeek:"dddd [tuần rồi lúc] LT",sameElse:"L"},relativeTime:{future:"%s tới",past:"%s trước",s:"vài giây",ss:"%d giây",m:"một phút",mm:"%d phút",h:"một giờ",hh:"%d giờ",d:"một ngày",dd:"%d ngày",M:"một tháng",MM:"%d tháng",y:"một năm",yy:"%d năm"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}})}(n(53806))},76756:function(e,t,n){!function(e){"use strict";e.defineLocale("x-pseudo",{months:"J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér".split("_"),monthsShort:"J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc".split("_"),monthsParseExact:!0,weekdays:"S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý".split("_"),weekdaysShort:"S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát".split("_"),weekdaysMin:"S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[T~ódá~ý át] LT",nextDay:"[T~ómó~rró~w át] LT",nextWeek:"dddd [át] LT",lastDay:"[Ý~ést~érdá~ý át] LT",lastWeek:"[L~ást] dddd [át] LT",sameElse:"L"},relativeTime:{future:"í~ñ %s",past:"%s á~gó",s:"á ~féw ~sécó~ñds",ss:"%d s~écóñ~ds",m:"á ~míñ~úté",mm:"%d m~íñú~tés",h:"á~ñ hó~úr",hh:"%d h~óúrs",d:"á ~dáý",dd:"%d d~áýs",M:"á ~móñ~th",MM:"%d m~óñt~hs",y:"á ~ýéár",yy:"%d ý~éárs"},dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})}(n(53806))},21873:function(e,t,n){!function(e){"use strict";e.defineLocale("yo",{months:"Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀".split("_"),monthsShort:"Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀".split("_"),weekdays:"Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta".split("_"),weekdaysShort:"Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá".split("_"),weekdaysMin:"Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Ònì ni] LT",nextDay:"[Ọ̀la ni] LT",nextWeek:"dddd [Ọsẹ̀ tón'bọ] [ni] LT",lastDay:"[Àna ni] LT",lastWeek:"dddd [Ọsẹ̀ tólọ́] [ni] LT",sameElse:"L"},relativeTime:{future:"ní %s",past:"%s kọjá",s:"ìsẹjú aayá die",ss:"aayá %d",m:"ìsẹjú kan",mm:"ìsẹjú %d",h:"wákati kan",hh:"wákati %d",d:"ọjọ́ kan",dd:"ọjọ́ %d",M:"osù kan",MM:"osù %d",y:"ọdún kan",yy:"ọdún %d"},dayOfMonthOrdinalParse:/ọjọ́\s\d{1,2}/,ordinal:"ọjọ́ %d",week:{dow:1,doy:4}})}(n(53806))},26077:function(e,t,n){!function(e){"use strict";e.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日Ah点mm分",LLLL:"YYYY年M月D日ddddAh点mm分",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){return 12===e&&(e=0),"凌晨"===t||"早上"===t||"上午"===t?e:"下午"===t||"晚上"===t?e+12:e>=11?e:e+12},meridiem:function(e,t,n){var r=100*e+t;return r<600?"凌晨":r<900?"早上":r<1130?"上午":r<1230?"中午":r<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|周)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"周";default:return e}},relativeTime:{future:"%s内",past:"%s前",s:"几秒",ss:"%d 秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},week:{dow:1,doy:4}})}(n(53806))},18230:function(e,t,n){!function(e){"use strict";e.defineLocale("zh-hk",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){return 12===e&&(e=0),"凌晨"===t||"早上"===t||"上午"===t?e:"中午"===t?e>=11?e:e+12:"下午"===t||"晚上"===t?e+12:void 0},meridiem:function(e,t,n){var r=100*e+t;return r<600?"凌晨":r<900?"早上":r<1130?"上午":r<1230?"中午":r<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"週";default:return e}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",ss:"%d 秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})}(n(53806))},99603:function(e,t,n){!function(e){"use strict";e.defineLocale("zh-tw",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){return 12===e&&(e=0),"凌晨"===t||"早上"===t||"上午"===t?e:"中午"===t?e>=11?e:e+12:"下午"===t||"晚上"===t?e+12:void 0},meridiem:function(e,t,n){var r=100*e+t;return r<600?"凌晨":r<900?"早上":r<1130?"上午":r<1230?"中午":r<1800?"下午":"晚上"},calendar:{sameDay:"[今天] LT",nextDay:"[明天] LT",nextWeek:"[下]dddd LT",lastDay:"[昨天] LT",lastWeek:"[上]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"週";default:return e}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",ss:"%d 秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})}(n(53806))},84179:function(e,t,n){var r={"./af":95286,"./af.js":95286,"./ar":6561,"./ar-dz":2146,"./ar-dz.js":2146,"./ar-kw":38047,"./ar-kw.js":38047,"./ar-ly":22833,"./ar-ly.js":22833,"./ar-ma":30186,"./ar-ma.js":30186,"./ar-sa":66922,"./ar-sa.js":66922,"./ar-tn":490,"./ar-tn.js":490,"./ar.js":6561,"./az":48641,"./az.js":48641,"./be":23299,"./be.js":23299,"./bg":21502,"./bg.js":21502,"./bm":24574,"./bm.js":24574,"./bn":11729,"./bn.js":11729,"./bo":9925,"./bo.js":9925,"./br":1988,"./br.js":1988,"./bs":85793,"./bs.js":85793,"./ca":60347,"./ca.js":60347,"./cs":10999,"./cs.js":10999,"./cv":81690,"./cv.js":81690,"./cy":72638,"./cy.js":72638,"./da":66820,"./da.js":66820,"./de":38413,"./de-at":15502,"./de-at.js":15502,"./de-ch":67569,"./de-ch.js":67569,"./de.js":38413,"./dv":15335,"./dv.js":15335,"./el":21406,"./el.js":21406,"./en-SG":43432,"./en-SG.js":43432,"./en-au":19612,"./en-au.js":19612,"./en-ca":87302,"./en-ca.js":87302,"./en-gb":21543,"./en-gb.js":21543,"./en-ie":96745,"./en-ie.js":96745,"./en-il":69560,"./en-il.js":69560,"./en-nz":87883,"./en-nz.js":87883,"./eo":38066,"./eo.js":38066,"./es":96730,"./es-do":61848,"./es-do.js":61848,"./es-us":32779,"./es-us.js":32779,"./es.js":96730,"./et":61386,"./et.js":61386,"./eu":49220,"./eu.js":49220,"./fa":81123,"./fa.js":81123,"./fi":95495,"./fi.js":95495,"./fo":15855,"./fo.js":15855,"./fr":93843,"./fr-ca":72251,"./fr-ca.js":72251,"./fr-ch":41713,"./fr-ch.js":41713,"./fr.js":93843,"./fy":91316,"./fy.js":91316,"./ga":70089,"./ga.js":70089,"./gd":39957,"./gd.js":39957,"./gl":28775,"./gl.js":28775,"./gom-latn":82190,"./gom-latn.js":82190,"./gu":22018,"./gu.js":22018,"./he":41636,"./he.js":41636,"./hi":96602,"./hi.js":96602,"./hr":91898,"./hr.js":91898,"./hu":23597,"./hu.js":23597,"./hy-am":86557,"./hy-am.js":86557,"./id":48186,"./id.js":48186,"./is":92004,"./is.js":92004,"./it":31032,"./it-ch":62219,"./it-ch.js":62219,"./it.js":31032,"./ja":31461,"./ja.js":31461,"./jv":40721,"./jv.js":40721,"./ka":22116,"./ka.js":22116,"./kk":31007,"./kk.js":31007,"./km":7765,"./km.js":7765,"./kn":3735,"./kn.js":3735,"./ko":86880,"./ko.js":86880,"./ku":98841,"./ku.js":98841,"./ky":24125,"./ky.js":24125,"./lb":10047,"./lb.js":10047,"./lo":16396,"./lo.js":16396,"./lt":93903,"./lt.js":93903,"./lv":4162,"./lv.js":4162,"./me":53933,"./me.js":53933,"./mi":4044,"./mi.js":4044,"./mk":26326,"./mk.js":26326,"./ml":5774,"./ml.js":5774,"./mn":9012,"./mn.js":9012,"./mr":52738,"./mr.js":52738,"./ms":77364,"./ms-my":35304,"./ms-my.js":35304,"./ms.js":77364,"./mt":35926,"./mt.js":35926,"./my":49515,"./my.js":49515,"./nb":38267,"./nb.js":38267,"./ne":68871,"./ne.js":68871,"./nl":130,"./nl-be":33615,"./nl-be.js":33615,"./nl.js":130,"./nn":4484,"./nn.js":4484,"./pa-in":75380,"./pa-in.js":75380,"./pl":80255,"./pl.js":80255,"./pt":15179,"./pt-br":43809,"./pt-br.js":43809,"./pt.js":15179,"./ro":71998,"./ro.js":71998,"./ru":13586,"./ru.js":13586,"./sd":65424,"./sd.js":65424,"./se":19412,"./se.js":19412,"./si":19220,"./si.js":19220,"./sk":47374,"./sk.js":47374,"./sl":67574,"./sl.js":67574,"./sq":62977,"./sq.js":62977,"./sr":76792,"./sr-cyrl":53388,"./sr-cyrl.js":53388,"./sr.js":76792,"./ss":41676,"./ss.js":41676,"./sv":89807,"./sv.js":89807,"./sw":39893,"./sw.js":39893,"./ta":81610,"./ta.js":81610,"./te":38921,"./te.js":38921,"./tet":16791,"./tet.js":16791,"./tg":7353,"./tg.js":7353,"./th":10035,"./th.js":10035,"./tl-ph":72526,"./tl-ph.js":72526,"./tlh":8730,"./tlh.js":8730,"./tr":59059,"./tr.js":59059,"./tzl":88459,"./tzl.js":88459,"./tzm":46357,"./tzm-latn":98904,"./tzm-latn.js":98904,"./tzm.js":46357,"./ug-cn":40014,"./ug-cn.js":40014,"./uk":87166,"./uk.js":87166,"./ur":42450,"./ur.js":42450,"./uz":76150,"./uz-latn":42939,"./uz-latn.js":42939,"./uz.js":76150,"./vi":62959,"./vi.js":62959,"./x-pseudo":76756,"./x-pseudo.js":76756,"./yo":21873,"./yo.js":21873,"./zh-cn":26077,"./zh-cn.js":26077,"./zh-hk":18230,"./zh-hk.js":18230,"./zh-tw":99603,"./zh-tw.js":99603};function a(e){var t=i(e);return n(t)}function i(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=i,e.exports=a,a.id=84179},53806:function(e,t,n){(e=n.nmd(e)).exports=function(){"use strict";var t,r;function a(){return t.apply(null,arguments)}function i(e){t=e}function o(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function s(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function u(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;var t;for(t in e)if(e.hasOwnProperty(t))return!1;return!0}function l(e){return void 0===e}function c(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function d(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function f(e,t){var n,r=[];for(n=0;n>>0,r=0;r0)for(n=0;n0?"future":"past"];return R(n)?n(t):n.replace(/%s/i,t)}var Z={};function K(e,t){var n=e.toLowerCase();Z[n]=Z[n+"s"]=Z[t]=e}function X(e){return"string"==typeof e?Z[e]||Z[e.toLowerCase()]:void 0}function $(e){var t,n,r={};for(n in e)v(e,n)&&(t=X(n))&&(r[t]=e[n]);return r}var J={};function ee(e,t){J[e]=t}function te(e){var t=[];for(var n in e)t.push({unit:n,priority:J[n]});return t.sort((function(e,t){return e.priority-t.priority})),t}function ne(e,t,n){var r=""+Math.abs(e),a=t-r.length;return(e>=0?n?"+":"":"-")+Math.pow(10,Math.max(0,a)).toString().substr(1)+r}var re=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,ae=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,ie={},oe={};function se(e,t,n,r){var a=r;"string"==typeof r&&(a=function(){return this[r]()}),e&&(oe[e]=a),t&&(oe[t[0]]=function(){return ne(a.apply(this,arguments),t[1],t[2])}),n&&(oe[n]=function(){return this.localeData().ordinal(a.apply(this,arguments),e)})}function ue(e){return e.match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"")}function le(e){var t,n,r=e.match(re);for(t=0,n=r.length;t=0&&ae.test(e);)e=e.replace(ae,r),ae.lastIndex=0,n-=1;return e}var fe=/\d/,ve=/\d\d/,me=/\d{3}/,pe=/\d{4}/,he=/[+-]?\d{6}/,ge=/\d\d?/,Ae=/\d\d\d\d?/,ye=/\d\d\d\d\d\d?/,Se=/\d{1,3}/,be=/\d{1,4}/,we=/[+-]?\d{1,6}/,Ie=/\d+/,Ee=/[+-]?\d+/,Ce=/Z|[+-]\d\d:?\d\d/gi,De=/Z|[+-]\d\d(?::?\d\d)?/gi,_e=/[+-]?\d+(\.\d{1,3})?/,Me=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,Oe={};function Pe(e,t,n){Oe[e]=R(t)?t:function(e,r){return e&&n?n:t}}function Te(e,t){return v(Oe,e)?Oe[e](t._strict,t._locale):new RegExp(xe(e))}function xe(e){return Re(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,(function(e,t,n,r,a){return t||n||r||a})))}function Re(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}var Le={};function ke(e,t){var n,r=t;for("string"==typeof e&&(e=[e]),c(t)&&(r=function(e,n){n[t]=D(e)}),n=0;n68?1900:2e3)};var Ze,Ke=$e("FullYear",!0);function Xe(){return Ye(this.year())}function $e(e,t){return function(n){return null!=n?(et(this,e,n),a.updateOffset(this,t),this):Je(this,e)}}function Je(e,t){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+t]():NaN}function et(e,t,n){e.isValid()&&!isNaN(n)&&("FullYear"===t&&Ye(e.year())&&1===e.month()&&29===e.date()?e._d["set"+(e._isUTC?"UTC":"")+t](n,e.month(),at(n,e.month())):e._d["set"+(e._isUTC?"UTC":"")+t](n))}function tt(e){return R(this[e=X(e)])?this[e]():this}function nt(e,t){if("object"==typeof e)for(var n=te(e=$(e)),r=0;r=0?(s=new Date(e+400,t,n,r,a,i,o),isFinite(s.getFullYear())&&s.setFullYear(e)):s=new Date(e,t,n,r,a,i,o),s}function bt(e){var t;if(e<100&&e>=0){var n=Array.prototype.slice.call(arguments);n[0]=e+400,t=new Date(Date.UTC.apply(null,n)),isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e)}else t=new Date(Date.UTC.apply(null,arguments));return t}function wt(e,t,n){var r=7+t-n;return-(7+bt(e,0,r).getUTCDay()-t)%7+r-1}function It(e,t,n,r,a){var i,o,s=1+7*(t-1)+(7+n-r)%7+wt(e,r,a);return s<=0?o=We(i=e-1)+s:s>We(e)?(i=e+1,o=s-We(e)):(i=e,o=s),{year:i,dayOfYear:o}}function Et(e,t,n){var r,a,i=wt(e.year(),t,n),o=Math.floor((e.dayOfYear()-i-1)/7)+1;return o<1?r=o+Ct(a=e.year()-1,t,n):o>Ct(e.year(),t,n)?(r=o-Ct(e.year(),t,n),a=e.year()+1):(a=e.year(),r=o),{week:r,year:a}}function Ct(e,t,n){var r=wt(e,t,n),a=wt(e+1,t,n);return(We(e)-r+a)/7}function Dt(e){return Et(e,this._week.dow,this._week.doy).week}se("w",["ww",2],"wo","week"),se("W",["WW",2],"Wo","isoWeek"),K("week","w"),K("isoWeek","W"),ee("week",5),ee("isoWeek",5),Pe("w",ge),Pe("ww",ge,ve),Pe("W",ge),Pe("WW",ge,ve),Ne(["w","ww","W","WW"],(function(e,t,n,r){t[r.substr(0,1)]=D(e)}));var _t={dow:0,doy:6};function Mt(){return this._week.dow}function Ot(){return this._week.doy}function Pt(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")}function Tt(e){var t=Et(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")}function xt(e,t){return"string"!=typeof e?e:isNaN(e)?"number"==typeof(e=t.weekdaysParse(e))?e:null:parseInt(e,10)}function Rt(e,t){return"string"==typeof e?t.weekdaysParse(e)%7||7:isNaN(e)?null:e}function Lt(e,t){return e.slice(t,7).concat(e.slice(0,t))}se("d",0,"do","day"),se("dd",0,0,(function(e){return this.localeData().weekdaysMin(this,e)})),se("ddd",0,0,(function(e){return this.localeData().weekdaysShort(this,e)})),se("dddd",0,0,(function(e){return this.localeData().weekdays(this,e)})),se("e",0,0,"weekday"),se("E",0,0,"isoWeekday"),K("day","d"),K("weekday","e"),K("isoWeekday","E"),ee("day",11),ee("weekday",11),ee("isoWeekday",11),Pe("d",ge),Pe("e",ge),Pe("E",ge),Pe("dd",(function(e,t){return t.weekdaysMinRegex(e)})),Pe("ddd",(function(e,t){return t.weekdaysShortRegex(e)})),Pe("dddd",(function(e,t){return t.weekdaysRegex(e)})),Ne(["dd","ddd","dddd"],(function(e,t,n,r){var a=n._locale.weekdaysParse(e,r,n._strict);null!=a?t.d=a:g(n).invalidWeekday=e})),Ne(["d","e","E"],(function(e,t,n,r){t[r]=D(e)}));var kt="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_");function Nt(e,t){var n=o(this._weekdays)?this._weekdays:this._weekdays[e&&!0!==e&&this._weekdays.isFormat.test(t)?"format":"standalone"];return!0===e?Lt(n,this._week.dow):e?n[e.day()]:n}var Ft="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_");function Bt(e){return!0===e?Lt(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort}var Ut="Su_Mo_Tu_We_Th_Fr_Sa".split("_");function Vt(e){return!0===e?Lt(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin}function jt(e,t,n){var r,a,i,o=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],r=0;r<7;++r)i=p([2e3,1]).day(r),this._minWeekdaysParse[r]=this.weekdaysMin(i,"").toLocaleLowerCase(),this._shortWeekdaysParse[r]=this.weekdaysShort(i,"").toLocaleLowerCase(),this._weekdaysParse[r]=this.weekdays(i,"").toLocaleLowerCase();return n?"dddd"===t?-1!==(a=Ze.call(this._weekdaysParse,o))?a:null:"ddd"===t?-1!==(a=Ze.call(this._shortWeekdaysParse,o))?a:null:-1!==(a=Ze.call(this._minWeekdaysParse,o))?a:null:"dddd"===t?-1!==(a=Ze.call(this._weekdaysParse,o))||-1!==(a=Ze.call(this._shortWeekdaysParse,o))||-1!==(a=Ze.call(this._minWeekdaysParse,o))?a:null:"ddd"===t?-1!==(a=Ze.call(this._shortWeekdaysParse,o))||-1!==(a=Ze.call(this._weekdaysParse,o))||-1!==(a=Ze.call(this._minWeekdaysParse,o))?a:null:-1!==(a=Ze.call(this._minWeekdaysParse,o))||-1!==(a=Ze.call(this._weekdaysParse,o))||-1!==(a=Ze.call(this._shortWeekdaysParse,o))?a:null}function Gt(e,t,n){var r,a,i;if(this._weekdaysParseExact)return jt.call(this,e,t,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),r=0;r<7;r++){if(a=p([2e3,1]).day(r),n&&!this._fullWeekdaysParse[r]&&(this._fullWeekdaysParse[r]=new RegExp("^"+this.weekdays(a,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[r]=new RegExp("^"+this.weekdaysShort(a,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[r]=new RegExp("^"+this.weekdaysMin(a,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[r]||(i="^"+this.weekdays(a,"")+"|^"+this.weekdaysShort(a,"")+"|^"+this.weekdaysMin(a,""),this._weekdaysParse[r]=new RegExp(i.replace(".",""),"i")),n&&"dddd"===t&&this._fullWeekdaysParse[r].test(e))return r;if(n&&"ddd"===t&&this._shortWeekdaysParse[r].test(e))return r;if(n&&"dd"===t&&this._minWeekdaysParse[r].test(e))return r;if(!n&&this._weekdaysParse[r].test(e))return r}}function Ht(e){if(!this.isValid())return null!=e?this:NaN;var t=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(e=xt(e,this.localeData()),this.add(e-t,"d")):t}function Qt(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,"d")}function qt(e){if(!this.isValid())return null!=e?this:NaN;if(null!=e){var t=Rt(e,this.localeData());return this.day(this.day()%7?t:t-7)}return this.day()||7}var zt=Me;function Wt(e){return this._weekdaysParseExact?(v(this,"_weekdaysRegex")||$t.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(v(this,"_weekdaysRegex")||(this._weekdaysRegex=zt),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)}var Yt=Me;function Zt(e){return this._weekdaysParseExact?(v(this,"_weekdaysRegex")||$t.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(v(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Yt),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}var Kt=Me;function Xt(e){return this._weekdaysParseExact?(v(this,"_weekdaysRegex")||$t.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(v(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Kt),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function $t(){function e(e,t){return t.length-e.length}var t,n,r,a,i,o=[],s=[],u=[],l=[];for(t=0;t<7;t++)n=p([2e3,1]).day(t),r=this.weekdaysMin(n,""),a=this.weekdaysShort(n,""),i=this.weekdays(n,""),o.push(r),s.push(a),u.push(i),l.push(r),l.push(a),l.push(i);for(o.sort(e),s.sort(e),u.sort(e),l.sort(e),t=0;t<7;t++)s[t]=Re(s[t]),u[t]=Re(u[t]),l[t]=Re(l[t]);this._weekdaysRegex=new RegExp("^("+l.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+o.join("|")+")","i")}function Jt(){return this.hours()%12||12}function en(){return this.hours()||24}function tn(e,t){se(e,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)}))}function nn(e,t){return t._meridiemParse}function rn(e){return"p"===(e+"").toLowerCase().charAt(0)}se("H",["HH",2],0,"hour"),se("h",["hh",2],0,Jt),se("k",["kk",2],0,en),se("hmm",0,0,(function(){return""+Jt.apply(this)+ne(this.minutes(),2)})),se("hmmss",0,0,(function(){return""+Jt.apply(this)+ne(this.minutes(),2)+ne(this.seconds(),2)})),se("Hmm",0,0,(function(){return""+this.hours()+ne(this.minutes(),2)})),se("Hmmss",0,0,(function(){return""+this.hours()+ne(this.minutes(),2)+ne(this.seconds(),2)})),tn("a",!0),tn("A",!1),K("hour","h"),ee("hour",13),Pe("a",nn),Pe("A",nn),Pe("H",ge),Pe("h",ge),Pe("k",ge),Pe("HH",ge,ve),Pe("hh",ge,ve),Pe("kk",ge,ve),Pe("hmm",Ae),Pe("hmmss",ye),Pe("Hmm",Ae),Pe("Hmmss",ye),ke(["H","HH"],je),ke(["k","kk"],(function(e,t,n){var r=D(e);t[je]=24===r?0:r})),ke(["a","A"],(function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e})),ke(["h","hh"],(function(e,t,n){t[je]=D(e),g(n).bigHour=!0})),ke("hmm",(function(e,t,n){var r=e.length-2;t[je]=D(e.substr(0,r)),t[Ge]=D(e.substr(r)),g(n).bigHour=!0})),ke("hmmss",(function(e,t,n){var r=e.length-4,a=e.length-2;t[je]=D(e.substr(0,r)),t[Ge]=D(e.substr(r,2)),t[He]=D(e.substr(a)),g(n).bigHour=!0})),ke("Hmm",(function(e,t,n){var r=e.length-2;t[je]=D(e.substr(0,r)),t[Ge]=D(e.substr(r))})),ke("Hmmss",(function(e,t,n){var r=e.length-4,a=e.length-2;t[je]=D(e.substr(0,r)),t[Ge]=D(e.substr(r,2)),t[He]=D(e.substr(a))}));var an=/[ap]\.?m?\.?/i;function on(e,t,n){return e>11?n?"pm":"PM":n?"am":"AM"}var sn,un=$e("Hours",!0),ln={calendar:F,longDateFormat:U,invalidDate:j,ordinal:H,dayOfMonthOrdinalParse:Q,relativeTime:z,months:ot,monthsShort:ut,week:_t,weekdays:kt,weekdaysMin:Ut,weekdaysShort:Ft,meridiemParse:an},cn={},dn={};function fn(e){return e?e.toLowerCase().replace("_","-"):e}function vn(e){for(var t,n,r,a,i=0;i0;){if(r=mn(a.slice(0,t).join("-")))return r;if(n&&n.length>=t&&_(a,n,!0)>=t-1)break;t--}i++}return sn}function mn(t){var r=null;if(!cn[t]&&e&&e.exports)try{r=sn._abbr,n(84179)("./"+t),pn(r)}catch(e){}return cn[t]}function pn(e,t){var n;return e&&((n=l(t)?An(e):hn(e,t))?sn=n:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),sn._abbr}function hn(e,t){if(null!==t){var n,r=ln;if(t.abbr=e,null!=cn[e])x("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),r=cn[e]._config;else if(null!=t.parentLocale)if(null!=cn[t.parentLocale])r=cn[t.parentLocale]._config;else{if(null==(n=mn(t.parentLocale)))return dn[t.parentLocale]||(dn[t.parentLocale]=[]),dn[t.parentLocale].push({name:e,config:t}),null;r=n._config}return cn[e]=new N(k(r,t)),dn[e]&&dn[e].forEach((function(e){hn(e.name,e.config)})),pn(e),cn[e]}return delete cn[e],null}function gn(e,t){if(null!=t){var n,r,a=ln;null!=(r=mn(e))&&(a=r._config),(n=new N(t=k(a,t))).parentLocale=cn[e],cn[e]=n,pn(e)}else null!=cn[e]&&(null!=cn[e].parentLocale?cn[e]=cn[e].parentLocale:null!=cn[e]&&delete cn[e]);return cn[e]}function An(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return sn;if(!o(e)){if(t=mn(e))return t;e=[e]}return vn(e)}function yn(){return P(cn)}function Sn(e){var t,n=e._a;return n&&-2===g(e).overflow&&(t=n[Ue]<0||n[Ue]>11?Ue:n[Ve]<1||n[Ve]>at(n[Be],n[Ue])?Ve:n[je]<0||n[je]>24||24===n[je]&&(0!==n[Ge]||0!==n[He]||0!==n[Qe])?je:n[Ge]<0||n[Ge]>59?Ge:n[He]<0||n[He]>59?He:n[Qe]<0||n[Qe]>999?Qe:-1,g(e)._overflowDayOfYear&&(tVe)&&(t=Ve),g(e)._overflowWeeks&&-1===t&&(t=qe),g(e)._overflowWeekday&&-1===t&&(t=ze),g(e).overflow=t),e}function bn(e,t,n){return null!=e?e:null!=t?t:n}function wn(e){var t=new Date(a.now());return e._useUTC?[t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()]:[t.getFullYear(),t.getMonth(),t.getDate()]}function In(e){var t,n,r,a,i,o=[];if(!e._d){for(r=wn(e),e._w&&null==e._a[Ve]&&null==e._a[Ue]&&En(e),null!=e._dayOfYear&&(i=bn(e._a[Be],r[Be]),(e._dayOfYear>We(i)||0===e._dayOfYear)&&(g(e)._overflowDayOfYear=!0),n=bt(i,0,e._dayOfYear),e._a[Ue]=n.getUTCMonth(),e._a[Ve]=n.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=o[t]=r[t];for(;t<7;t++)e._a[t]=o[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[je]&&0===e._a[Ge]&&0===e._a[He]&&0===e._a[Qe]&&(e._nextDay=!0,e._a[je]=0),e._d=(e._useUTC?bt:St).apply(null,o),a=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[je]=24),e._w&&void 0!==e._w.d&&e._w.d!==a&&(g(e).weekdayMismatch=!0)}}function En(e){var t,n,r,a,i,o,s,u;if(null!=(t=e._w).GG||null!=t.W||null!=t.E)i=1,o=4,n=bn(t.GG,e._a[Be],Et(Zn(),1,4).year),r=bn(t.W,1),((a=bn(t.E,1))<1||a>7)&&(u=!0);else{i=e._locale._week.dow,o=e._locale._week.doy;var l=Et(Zn(),i,o);n=bn(t.gg,e._a[Be],l.year),r=bn(t.w,l.week),null!=t.d?((a=t.d)<0||a>6)&&(u=!0):null!=t.e?(a=t.e+i,(t.e<0||t.e>6)&&(u=!0)):a=i}r<1||r>Ct(n,i,o)?g(e)._overflowWeeks=!0:null!=u?g(e)._overflowWeekday=!0:(s=It(n,r,a,i,o),e._a[Be]=s.year,e._dayOfYear=s.dayOfYear)}var Cn=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Dn=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,_n=/Z|[+-]\d\d(?::?\d\d)?/,Mn=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],On=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Pn=/^\/?Date\((\-?\d+)/i;function Tn(e){var t,n,r,a,i,o,s=e._i,u=Cn.exec(s)||Dn.exec(s);if(u){for(g(e).iso=!0,t=0,n=Mn.length;t0&&g(e).unusedInput.push(o),s=s.slice(s.indexOf(n)+n.length),l+=n.length),oe[i]?(n?g(e).empty=!1:g(e).unusedTokens.push(i),Fe(i,n,e)):e._strict&&!n&&g(e).unusedTokens.push(i);g(e).charsLeftOver=u-l,s.length>0&&g(e).unusedInput.push(s),e._a[je]<=12&&!0===g(e).bigHour&&e._a[je]>0&&(g(e).bigHour=void 0),g(e).parsedDateParts=e._a.slice(0),g(e).meridiem=e._meridiem,e._a[je]=Gn(e._locale,e._a[je],e._meridiem),In(e),Sn(e)}else Un(e);else Tn(e)}function Gn(e,t,n){var r;return null==n?t:null!=e.meridiemHour?e.meridiemHour(t,n):null!=e.isPM?((r=e.isPM(n))&&t<12&&(t+=12),r||12!==t||(t=0),t):t}function Hn(e){var t,n,r,a,i;if(0===e._f.length)return g(e).invalidFormat=!0,void(e._d=new Date(NaN));for(a=0;athis?this:e:y()}));function $n(e,t){var n,r;if(1===t.length&&o(t[0])&&(t=t[0]),!t.length)return Zn();for(n=t[0],r=1;rthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function br(){if(!l(this._isDSTShifted))return this._isDSTShifted;var e={};if(b(e,this),(e=zn(e))._a){var t=e._isUTC?p(e._a):Zn(e._a);this._isDSTShifted=this.isValid()&&_(e._a,t.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function wr(){return!!this.isValid()&&!this._isUTC}function Ir(){return!!this.isValid()&&this._isUTC}function Er(){return!!this.isValid()&&this._isUTC&&0===this._offset}a.updateOffset=function(){};var Cr=/^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Dr=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function _r(e,t){var n,r,a,i=e,o=null;return sr(e)?i={ms:e._milliseconds,d:e._days,M:e._months}:c(e)?(i={},t?i[t]=e:i.milliseconds=e):(o=Cr.exec(e))?(n="-"===o[1]?-1:1,i={y:0,d:D(o[Ve])*n,h:D(o[je])*n,m:D(o[Ge])*n,s:D(o[He])*n,ms:D(ur(1e3*o[Qe]))*n}):(o=Dr.exec(e))?(n="-"===o[1]?-1:1,i={y:Mr(o[2],n),M:Mr(o[3],n),w:Mr(o[4],n),d:Mr(o[5],n),h:Mr(o[6],n),m:Mr(o[7],n),s:Mr(o[8],n)}):null==i?i={}:"object"==typeof i&&("from"in i||"to"in i)&&(a=Pr(Zn(i.from),Zn(i.to)),(i={}).ms=a.milliseconds,i.M=a.months),r=new or(i),sr(e)&&v(e,"_locale")&&(r._locale=e._locale),r}function Mr(e,t){var n=e&&parseFloat(e.replace(",","."));return(isNaN(n)?0:n)*t}function Or(e,t){var n={};return n.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(n.months,"M").isAfter(t)&&--n.months,n.milliseconds=+t-+e.clone().add(n.months,"M"),n}function Pr(e,t){var n;return e.isValid()&&t.isValid()?(t=fr(t,e),e.isBefore(t)?n=Or(e,t):((n=Or(t,e)).milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}function Tr(e,t){return function(n,r){var a;return null===r||isNaN(+r)||(x(t,"moment()."+t+"(period, number) is deprecated. Please use moment()."+t+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),a=n,n=r,r=a),xr(this,_r(n="string"==typeof n?+n:n,r),e),this}}function xr(e,t,n,r){var i=t._milliseconds,o=ur(t._days),s=ur(t._months);e.isValid()&&(r=null==r||r,s&&ft(e,Je(e,"Month")+s*n),o&&et(e,"Date",Je(e,"Date")+o*n),i&&e._d.setTime(e._d.valueOf()+i*n),r&&a.updateOffset(e,o||s))}_r.fn=or.prototype,_r.invalid=ir;var Rr=Tr(1,"add"),Lr=Tr(-1,"subtract");function kr(e,t){var n=e.diff(t,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"}function Nr(e,t){var n=e||Zn(),r=fr(n,this).startOf("day"),i=a.calendarFormat(this,r)||"sameElse",o=t&&(R(t[i])?t[i].call(this,n):t[i]);return this.format(o||this.localeData().calendar(i,this,Zn(n)))}function Fr(){return new I(this)}function Br(e,t){var n=E(e)?e:Zn(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(t=X(t)||"millisecond")?this.valueOf()>n.valueOf():n.valueOf()9999?ce(n,t?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):R(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",ce(n,"Z")):ce(n,t?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function Yr(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e="moment",t="";this.isLocal()||(e=0===this.utcOffset()?"moment.utc":"moment.parseZone",t="Z");var n="["+e+'("]',r=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",a="-MM-DD[T]HH:mm:ss.SSS",i=t+'[")]';return this.format(n+r+a+i)}function Zr(e){e||(e=this.isUtc()?a.defaultFormatUtc:a.defaultFormat);var t=ce(this,e);return this.localeData().postformat(t)}function Kr(e,t){return this.isValid()&&(E(e)&&e.isValid()||Zn(e).isValid())?_r({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function Xr(e){return this.from(Zn(),e)}function $r(e,t){return this.isValid()&&(E(e)&&e.isValid()||Zn(e).isValid())?_r({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function Jr(e){return this.to(Zn(),e)}function ea(e){var t;return void 0===e?this._locale._abbr:(null!=(t=An(e))&&(this._locale=t),this)}a.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",a.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var ta=O("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",(function(e){return void 0===e?this.localeData():this.locale(e)}));function na(){return this._locale}var ra=1e3,aa=60*ra,ia=60*aa,oa=3506328*ia;function sa(e,t){return(e%t+t)%t}function ua(e,t,n){return e<100&&e>=0?new Date(e+400,t,n)-oa:new Date(e,t,n).valueOf()}function la(e,t,n){return e<100&&e>=0?Date.UTC(e+400,t,n)-oa:Date.UTC(e,t,n)}function ca(e){var t;if(void 0===(e=X(e))||"millisecond"===e||!this.isValid())return this;var n=this._isUTC?la:ua;switch(e){case"year":t=n(this.year(),0,1);break;case"quarter":t=n(this.year(),this.month()-this.month()%3,1);break;case"month":t=n(this.year(),this.month(),1);break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":t=n(this.year(),this.month(),this.date());break;case"hour":t=this._d.valueOf(),t-=sa(t+(this._isUTC?0:this.utcOffset()*aa),ia);break;case"minute":t=this._d.valueOf(),t-=sa(t,aa);break;case"second":t=this._d.valueOf(),t-=sa(t,ra)}return this._d.setTime(t),a.updateOffset(this,!0),this}function da(e){var t;if(void 0===(e=X(e))||"millisecond"===e||!this.isValid())return this;var n=this._isUTC?la:ua;switch(e){case"year":t=n(this.year()+1,0,1)-1;break;case"quarter":t=n(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":t=n(this.year(),this.month()+1,1)-1;break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":t=n(this.year(),this.month(),this.date()+1)-1;break;case"hour":t=this._d.valueOf(),t+=ia-sa(t+(this._isUTC?0:this.utcOffset()*aa),ia)-1;break;case"minute":t=this._d.valueOf(),t+=aa-sa(t,aa)-1;break;case"second":t=this._d.valueOf(),t+=ra-sa(t,ra)-1}return this._d.setTime(t),a.updateOffset(this,!0),this}function fa(){return this._d.valueOf()-6e4*(this._offset||0)}function va(){return Math.floor(this.valueOf()/1e3)}function ma(){return new Date(this.valueOf())}function pa(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]}function ha(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}}function ga(){return this.isValid()?this.toISOString():null}function Aa(){return A(this)}function ya(){return m({},g(this))}function Sa(){return g(this).overflow}function ba(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function wa(e,t){se(0,[e,e.length],0,t)}function Ia(e){return _a.call(this,e,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function Ea(e){return _a.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)}function Ca(){return Ct(this.year(),1,4)}function Da(){var e=this.localeData()._week;return Ct(this.year(),e.dow,e.doy)}function _a(e,t,n,r,a){var i;return null==e?Et(this,r,a).year:(t>(i=Ct(e,r,a))&&(t=i),Ma.call(this,e,t,n,r,a))}function Ma(e,t,n,r,a){var i=It(e,t,n,r,a),o=bt(i.year,0,i.dayOfYear);return this.year(o.getUTCFullYear()),this.month(o.getUTCMonth()),this.date(o.getUTCDate()),this}function Oa(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)}se(0,["gg",2],0,(function(){return this.weekYear()%100})),se(0,["GG",2],0,(function(){return this.isoWeekYear()%100})),wa("gggg","weekYear"),wa("ggggg","weekYear"),wa("GGGG","isoWeekYear"),wa("GGGGG","isoWeekYear"),K("weekYear","gg"),K("isoWeekYear","GG"),ee("weekYear",1),ee("isoWeekYear",1),Pe("G",Ee),Pe("g",Ee),Pe("GG",ge,ve),Pe("gg",ge,ve),Pe("GGGG",be,pe),Pe("gggg",be,pe),Pe("GGGGG",we,he),Pe("ggggg",we,he),Ne(["gggg","ggggg","GGGG","GGGGG"],(function(e,t,n,r){t[r.substr(0,2)]=D(e)})),Ne(["gg","GG"],(function(e,t,n,r){t[r]=a.parseTwoDigitYear(e)})),se("Q",0,"Qo","quarter"),K("quarter","Q"),ee("quarter",7),Pe("Q",fe),ke("Q",(function(e,t){t[Ue]=3*(D(e)-1)})),se("D",["DD",2],"Do","date"),K("date","D"),ee("date",9),Pe("D",ge),Pe("DD",ge,ve),Pe("Do",(function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient})),ke(["D","DD"],Ve),ke("Do",(function(e,t){t[Ve]=D(e.match(ge)[0])}));var Pa=$e("Date",!0);function Ta(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")}se("DDD",["DDDD",3],"DDDo","dayOfYear"),K("dayOfYear","DDD"),ee("dayOfYear",4),Pe("DDD",Se),Pe("DDDD",me),ke(["DDD","DDDD"],(function(e,t,n){n._dayOfYear=D(e)})),se("m",["mm",2],0,"minute"),K("minute","m"),ee("minute",14),Pe("m",ge),Pe("mm",ge,ve),ke(["m","mm"],Ge);var xa=$e("Minutes",!1);se("s",["ss",2],0,"second"),K("second","s"),ee("second",15),Pe("s",ge),Pe("ss",ge,ve),ke(["s","ss"],He);var Ra,La=$e("Seconds",!1);for(se("S",0,0,(function(){return~~(this.millisecond()/100)})),se(0,["SS",2],0,(function(){return~~(this.millisecond()/10)})),se(0,["SSS",3],0,"millisecond"),se(0,["SSSS",4],0,(function(){return 10*this.millisecond()})),se(0,["SSSSS",5],0,(function(){return 100*this.millisecond()})),se(0,["SSSSSS",6],0,(function(){return 1e3*this.millisecond()})),se(0,["SSSSSSS",7],0,(function(){return 1e4*this.millisecond()})),se(0,["SSSSSSSS",8],0,(function(){return 1e5*this.millisecond()})),se(0,["SSSSSSSSS",9],0,(function(){return 1e6*this.millisecond()})),K("millisecond","ms"),ee("millisecond",16),Pe("S",Se,fe),Pe("SS",Se,ve),Pe("SSS",Se,me),Ra="SSSS";Ra.length<=9;Ra+="S")Pe(Ra,Ie);function ka(e,t){t[Qe]=D(1e3*("0."+e))}for(Ra="S";Ra.length<=9;Ra+="S")ke(Ra,ka);var Na=$e("Milliseconds",!1);function Fa(){return this._isUTC?"UTC":""}function Ba(){return this._isUTC?"Coordinated Universal Time":""}se("z",0,0,"zoneAbbr"),se("zz",0,0,"zoneName");var Ua=I.prototype;function Va(e){return Zn(1e3*e)}function ja(){return Zn.apply(null,arguments).parseZone()}function Ga(e){return e}Ua.add=Rr,Ua.calendar=Nr,Ua.clone=Fr,Ua.diff=Qr,Ua.endOf=da,Ua.format=Zr,Ua.from=Kr,Ua.fromNow=Xr,Ua.to=$r,Ua.toNow=Jr,Ua.get=tt,Ua.invalidAt=Sa,Ua.isAfter=Br,Ua.isBefore=Ur,Ua.isBetween=Vr,Ua.isSame=jr,Ua.isSameOrAfter=Gr,Ua.isSameOrBefore=Hr,Ua.isValid=Aa,Ua.lang=ta,Ua.locale=ea,Ua.localeData=na,Ua.max=Xn,Ua.min=Kn,Ua.parsingFlags=ya,Ua.set=nt,Ua.startOf=ca,Ua.subtract=Lr,Ua.toArray=pa,Ua.toObject=ha,Ua.toDate=ma,Ua.toISOString=Wr,Ua.inspect=Yr,Ua.toJSON=ga,Ua.toString=zr,Ua.unix=va,Ua.valueOf=fa,Ua.creationData=ba,Ua.year=Ke,Ua.isLeapYear=Xe,Ua.weekYear=Ia,Ua.isoWeekYear=Ea,Ua.quarter=Ua.quarters=Oa,Ua.month=vt,Ua.daysInMonth=mt,Ua.week=Ua.weeks=Pt,Ua.isoWeek=Ua.isoWeeks=Tt,Ua.weeksInYear=Da,Ua.isoWeeksInYear=Ca,Ua.date=Pa,Ua.day=Ua.days=Ht,Ua.weekday=Qt,Ua.isoWeekday=qt,Ua.dayOfYear=Ta,Ua.hour=Ua.hours=un,Ua.minute=Ua.minutes=xa,Ua.second=Ua.seconds=La,Ua.millisecond=Ua.milliseconds=Na,Ua.utcOffset=mr,Ua.utc=hr,Ua.local=gr,Ua.parseZone=Ar,Ua.hasAlignedHourOffset=yr,Ua.isDST=Sr,Ua.isLocal=wr,Ua.isUtcOffset=Ir,Ua.isUtc=Er,Ua.isUTC=Er,Ua.zoneAbbr=Fa,Ua.zoneName=Ba,Ua.dates=O("dates accessor is deprecated. Use date instead.",Pa),Ua.months=O("months accessor is deprecated. Use month instead",vt),Ua.years=O("years accessor is deprecated. Use year instead",Ke),Ua.zone=O("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",pr),Ua.isDSTShifted=O("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",br);var Ha=N.prototype;function Qa(e,t,n,r){var a=An(),i=p().set(r,t);return a[n](i,e)}function qa(e,t,n){if(c(e)&&(t=e,e=void 0),e=e||"",null!=t)return Qa(e,t,n,"month");var r,a=[];for(r=0;r<12;r++)a[r]=Qa(e,r,n,"month");return a}function za(e,t,n,r){"boolean"==typeof e?(c(t)&&(n=t,t=void 0),t=t||""):(n=t=e,e=!1,c(t)&&(n=t,t=void 0),t=t||"");var a,i=An(),o=e?i._week.dow:0;if(null!=n)return Qa(t,(n+o)%7,r,"day");var s=[];for(a=0;a<7;a++)s[a]=Qa(t,(a+o)%7,r,"day");return s}function Wa(e,t){return qa(e,t,"months")}function Ya(e,t){return qa(e,t,"monthsShort")}function Za(e,t,n){return za(e,t,n,"weekdays")}function Ka(e,t,n){return za(e,t,n,"weekdaysShort")}function Xa(e,t,n){return za(e,t,n,"weekdaysMin")}Ha.calendar=B,Ha.longDateFormat=V,Ha.invalidDate=G,Ha.ordinal=q,Ha.preparse=Ga,Ha.postformat=Ga,Ha.relativeTime=W,Ha.pastFuture=Y,Ha.set=L,Ha.months=st,Ha.monthsShort=lt,Ha.monthsParse=dt,Ha.monthsRegex=At,Ha.monthsShortRegex=ht,Ha.week=Dt,Ha.firstDayOfYear=Ot,Ha.firstDayOfWeek=Mt,Ha.weekdays=Nt,Ha.weekdaysMin=Vt,Ha.weekdaysShort=Bt,Ha.weekdaysParse=Gt,Ha.weekdaysRegex=Wt,Ha.weekdaysShortRegex=Zt,Ha.weekdaysMinRegex=Xt,Ha.isPM=rn,Ha.meridiem=on,pn("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===D(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}}),a.lang=O("moment.lang is deprecated. Use moment.locale instead.",pn),a.langData=O("moment.langData is deprecated. Use moment.localeData instead.",An);var $a=Math.abs;function Ja(){var e=this._data;return this._milliseconds=$a(this._milliseconds),this._days=$a(this._days),this._months=$a(this._months),e.milliseconds=$a(e.milliseconds),e.seconds=$a(e.seconds),e.minutes=$a(e.minutes),e.hours=$a(e.hours),e.months=$a(e.months),e.years=$a(e.years),this}function ei(e,t,n,r){var a=_r(t,n);return e._milliseconds+=r*a._milliseconds,e._days+=r*a._days,e._months+=r*a._months,e._bubble()}function ti(e,t){return ei(this,e,t,1)}function ni(e,t){return ei(this,e,t,-1)}function ri(e){return e<0?Math.floor(e):Math.ceil(e)}function ai(){var e,t,n,r,a,i=this._milliseconds,o=this._days,s=this._months,u=this._data;return i>=0&&o>=0&&s>=0||i<=0&&o<=0&&s<=0||(i+=864e5*ri(oi(s)+o),o=0,s=0),u.milliseconds=i%1e3,e=C(i/1e3),u.seconds=e%60,t=C(e/60),u.minutes=t%60,n=C(t/60),u.hours=n%24,o+=C(n/24),s+=a=C(ii(o)),o-=ri(oi(a)),r=C(s/12),s%=12,u.days=o,u.months=s,u.years=r,this}function ii(e){return 4800*e/146097}function oi(e){return 146097*e/4800}function si(e){if(!this.isValid())return NaN;var t,n,r=this._milliseconds;if("month"===(e=X(e))||"quarter"===e||"year"===e)switch(t=this._days+r/864e5,n=this._months+ii(t),e){case"month":return n;case"quarter":return n/3;case"year":return n/12}else switch(t=this._days+Math.round(oi(this._months)),e){case"week":return t/7+r/6048e5;case"day":return t+r/864e5;case"hour":return 24*t+r/36e5;case"minute":return 1440*t+r/6e4;case"second":return 86400*t+r/1e3;case"millisecond":return Math.floor(864e5*t)+r;default:throw new Error("Unknown unit "+e)}}function ui(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*D(this._months/12):NaN}function li(e){return function(){return this.as(e)}}var ci=li("ms"),di=li("s"),fi=li("m"),vi=li("h"),mi=li("d"),pi=li("w"),hi=li("M"),gi=li("Q"),Ai=li("y");function yi(){return _r(this)}function Si(e){return e=X(e),this.isValid()?this[e+"s"]():NaN}function bi(e){return function(){return this.isValid()?this._data[e]:NaN}}var wi=bi("milliseconds"),Ii=bi("seconds"),Ei=bi("minutes"),Ci=bi("hours"),Di=bi("days"),_i=bi("months"),Mi=bi("years");function Oi(){return C(this.days()/7)}var Pi=Math.round,Ti={ss:44,s:45,m:45,h:22,d:26,M:11};function xi(e,t,n,r,a){return a.relativeTime(t||1,!!n,e,r)}function Ri(e,t,n){var r=_r(e).abs(),a=Pi(r.as("s")),i=Pi(r.as("m")),o=Pi(r.as("h")),s=Pi(r.as("d")),u=Pi(r.as("M")),l=Pi(r.as("y")),c=a<=Ti.ss&&["s",a]||a0,c[4]=n,xi.apply(null,c)}function Li(e){return void 0===e?Pi:"function"==typeof e&&(Pi=e,!0)}function ki(e,t){return void 0!==Ti[e]&&(void 0===t?Ti[e]:(Ti[e]=t,"s"===e&&(Ti.ss=t-1),!0))}function Ni(e){if(!this.isValid())return this.localeData().invalidDate();var t=this.localeData(),n=Ri(this,!e,t);return e&&(n=t.pastFuture(+this,n)),t.postformat(n)}var Fi=Math.abs;function Bi(e){return(e>0)-(e<0)||+e}function Ui(){if(!this.isValid())return this.localeData().invalidDate();var e,t,n=Fi(this._milliseconds)/1e3,r=Fi(this._days),a=Fi(this._months);e=C(n/60),t=C(e/60),n%=60,e%=60;var i=C(a/12),o=a%=12,s=r,u=t,l=e,c=n?n.toFixed(3).replace(/\.?0+$/,""):"",d=this.asSeconds();if(!d)return"P0D";var f=d<0?"-":"",v=Bi(this._months)!==Bi(d)?"-":"",m=Bi(this._days)!==Bi(d)?"-":"",p=Bi(this._milliseconds)!==Bi(d)?"-":"";return f+"P"+(i?v+i+"Y":"")+(o?v+o+"M":"")+(s?m+s+"D":"")+(u||l||c?"T":"")+(u?p+u+"H":"")+(l?p+l+"M":"")+(c?p+c+"S":"")}var Vi=or.prototype;return Vi.isValid=ar,Vi.abs=Ja,Vi.add=ti,Vi.subtract=ni,Vi.as=si,Vi.asMilliseconds=ci,Vi.asSeconds=di,Vi.asMinutes=fi,Vi.asHours=vi,Vi.asDays=mi,Vi.asWeeks=pi,Vi.asMonths=hi,Vi.asQuarters=gi,Vi.asYears=Ai,Vi.valueOf=ui,Vi._bubble=ai,Vi.clone=yi,Vi.get=Si,Vi.milliseconds=wi,Vi.seconds=Ii,Vi.minutes=Ei,Vi.hours=Ci,Vi.days=Di,Vi.weeks=Oi,Vi.months=_i,Vi.years=Mi,Vi.humanize=Ni,Vi.toISOString=Ui,Vi.toString=Ui,Vi.toJSON=Ui,Vi.locale=ea,Vi.localeData=na,Vi.toIsoString=O("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Ui),Vi.lang=ta,se("X",0,0,"unix"),se("x",0,0,"valueOf"),Pe("x",Ee),Pe("X",_e),ke("X",(function(e,t,n){n._d=new Date(1e3*parseFloat(e,10))})),ke("x",(function(e,t,n){n._d=new Date(D(e))})),a.version="2.24.0",i(Zn),a.fn=Ua,a.min=Jn,a.max=er,a.now=tr,a.utc=p,a.unix=Va,a.months=Wa,a.isDate=d,a.locale=pn,a.invalid=y,a.duration=_r,a.isMoment=E,a.weekdays=Za,a.parseZone=ja,a.localeData=An,a.isDuration=sr,a.monthsShort=Ya,a.weekdaysMin=Xa,a.defineLocale=hn,a.updateLocale=gn,a.locales=yn,a.weekdaysShort=Ka,a.normalizeUnits=X,a.relativeTimeRounding=Li,a.relativeTimeThreshold=ki,a.calendarFormat=kr,a.prototype=Ua,a.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},a}()},50542:function(e,t,n){var r;!function(a,i,o){if(a){for(var s,u={8:"backspace",9:"tab",13:"enter",16:"shift",17:"ctrl",18:"alt",20:"capslock",27:"esc",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"ins",46:"del",91:"meta",93:"meta",224:"meta"},l={106:"*",107:"+",109:"-",110:".",111:"/",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'"},c={"~":"`","!":"1","@":"2","#":"3",$:"4","%":"5","^":"6","&":"7","*":"8","(":"9",")":"0",_:"-","+":"=",":":";",'"':"'","<":",",">":".","?":"/","|":"\\"},d={option:"alt",command:"meta",return:"enter",escape:"esc",plus:"+",mod:/Mac|iPod|iPhone|iPad/.test(navigator.platform)?"meta":"ctrl"},f=1;f<20;++f)u[111+f]="f"+f;for(f=0;f<=9;++f)u[f+96]=f.toString();y.prototype.bind=function(e,t,n){var r=this;return e=e instanceof Array?e:[e],r._bindMultiple.call(r,e,t,n),r},y.prototype.unbind=function(e,t){return this.bind.call(this,e,(function(){}),t)},y.prototype.trigger=function(e,t){var n=this;return n._directMap[e+":"+t]&&n._directMap[e+":"+t]({},e),n},y.prototype.reset=function(){var e=this;return e._callbacks={},e._directMap={},e},y.prototype.stopCallback=function(e,t){if((" "+t.className+" ").indexOf(" mousetrap ")>-1)return!1;if(A(t,this.target))return!1;if("composedPath"in e&&"function"==typeof e.composedPath){var n=e.composedPath()[0];n!==e.target&&(t=n)}return"INPUT"==t.tagName||"SELECT"==t.tagName||"TEXTAREA"==t.tagName||t.isContentEditable},y.prototype.handleKey=function(){var e=this;return e._handleKey.apply(e,arguments)},y.addKeycodes=function(e){for(var t in e)e.hasOwnProperty(t)&&(u[t]=e[t]);s=null},y.init=function(){var e=y(i);for(var t in e)"_"!==t.charAt(0)&&(y[t]=function(t){return function(){return e[t].apply(e,arguments)}}(t))},y.init(),a.Mousetrap=y,e.exports&&(e.exports=y),void 0===(r=function(){return y}.call(t,n,t,e))||(e.exports=r)}function v(e,t,n){e.addEventListener?e.addEventListener(t,n,!1):e.attachEvent("on"+t,n)}function m(e){if("keypress"==e.type){var t=String.fromCharCode(e.which);return e.shiftKey||(t=t.toLowerCase()),t}return u[e.which]?u[e.which]:l[e.which]?l[e.which]:String.fromCharCode(e.which).toLowerCase()}function p(e){return"shift"==e||"ctrl"==e||"alt"==e||"meta"==e}function h(e,t,n){return n||(n=function(){if(!s)for(var e in s={},u)e>95&&e<112||u.hasOwnProperty(e)&&(s[u[e]]=e);return s}()[e]?"keydown":"keypress"),"keypress"==n&&t.length&&(n="keydown"),n}function g(e,t){var n,r,a,i=[];for(n=function(e){return"+"===e?["+"]:(e=e.replace(/\+{2}/g,"+plus")).split("+")}(e),a=0;a1?f(e,s,n,r):(o=g(e,r),t._callbacks[o.key]=t._callbacks[o.key]||[],l(o.key,o.modifiers,{type:o.action},a,e,i),t._callbacks[o.key][a?"unshift":"push"]({callback:n,modifiers:o.modifiers,action:o.action,seq:a,level:i,combo:e}))}t._handleKey=function(e,t,n){var r,a=l(e,t,n),i={},d=0,f=!1;for(r=0;r>16),c((65280&r)>>8),c(255&r);return 2==i?c(255&(r=l(e.charAt(n))<<2|l(e.charAt(n+1))>>4)):1==i&&(c((r=l(e.charAt(n))<<10|l(e.charAt(n+1))<<4|l(e.charAt(n+2))>>2)>>8&255),c(255&r)),o},e.fromByteArray=function(e){var t,n,r,a,i=e.length%3,o="";function s(e){return"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(e)}for(t=0,r=e.length-i;t>18&63)+s(a>>12&63)+s(a>>6&63)+s(63&a);switch(i){case 1:o+=s((n=e[e.length-1])>>2),o+=s(n<<4&63),o+="==";break;case 2:o+=s((n=(e[e.length-2]<<8)+e[e.length-1])>>10),o+=s(n>>4&63),o+=s(n<<2&63),o+="="}return o}}(void 0===n?this.base64js={}:n)}).call(this,e("lYpoI2"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/base64-js/lib/b64.js","/node_modules/gulp-browserify/node_modules/base64-js/lib")},{buffer:3,lYpoI2:10}],3:[function(e,t,n){(function(t,r,a,i,o,s,u,l,c){var d=e("base64-js"),f=e("ieee754");function a(e,t,n){if(!(this instanceof a))return new a(e,t,n);var r,i,o,s,u,l=typeof e;if("base64"===t&&"string"==l)for(e=(r=e).trim?r.trim():r.replace(/^\s+|\s+$/g,"");e.length%4!=0;)e+="=";if("number"==l)i=P(e);else if("string"==l)i=a.byteLength(e,t);else{if("object"!=l)throw new Error("First argument needs to be a number, array or string.");i=P(e.length)}if(a._useTypedArrays?o=a._augment(new Uint8Array(i)):((o=this).length=i,o._isBuffer=!0),a._useTypedArrays&&"number"==typeof e.byteLength)o._set(e);else if(T(u=e)||a.isBuffer(u)||u&&"object"==typeof u&&"number"==typeof u.length)for(s=0;s>8,r=t%256,a.push(r),a.push(n);return a}(t),e,n,r)}function p(e,t,n){var r="";n=Math.min(e.length,n);for(var a=t;a>>0)):(t+1>>0),a}function A(e,t,n,r){if(r||(V("boolean"==typeof n,"missing or invalid endian"),V(null!=t,"missing offset"),V(t+1>>8*(r?o:1-o)}function I(e,t,n,r,a){a||(V(null!=t,"missing value"),V("boolean"==typeof r,"missing or invalid endian"),V(null!=n,"missing offset"),V(n+3>>8*(r?o:3-o)&255}function E(e,t,n,r,a){a||(V(null!=t,"missing value"),V("boolean"==typeof r,"missing or invalid endian"),V(null!=n,"missing offset"),V(n+1this.length&&(r=this.length),e.length-t=this.length))return this[e]},a.prototype.readUInt16LE=function(e,t){return h(this,e,!0,t)},a.prototype.readUInt16BE=function(e,t){return h(this,e,!1,t)},a.prototype.readUInt32LE=function(e,t){return g(this,e,!0,t)},a.prototype.readUInt32BE=function(e,t){return g(this,e,!1,t)},a.prototype.readInt8=function(e,t){if(t||(V(null!=e,"missing offset"),V(e=this.length))return 128&this[e]?-1*(255-this[e]+1):this[e]},a.prototype.readInt16LE=function(e,t){return A(this,e,!0,t)},a.prototype.readInt16BE=function(e,t){return A(this,e,!1,t)},a.prototype.readInt32LE=function(e,t){return y(this,e,!0,t)},a.prototype.readInt32BE=function(e,t){return y(this,e,!1,t)},a.prototype.readFloatLE=function(e,t){return S(this,e,!0,t)},a.prototype.readFloatBE=function(e,t){return S(this,e,!1,t)},a.prototype.readDoubleLE=function(e,t){return b(this,e,!0,t)},a.prototype.readDoubleBE=function(e,t){return b(this,e,!1,t)},a.prototype.writeUInt8=function(e,t,n){n||(V(null!=e,"missing value"),V(null!=t,"missing offset"),V(t=this.length||(this[t]=e)},a.prototype.writeUInt16LE=function(e,t,n){w(this,e,t,!0,n)},a.prototype.writeUInt16BE=function(e,t,n){w(this,e,t,!1,n)},a.prototype.writeUInt32LE=function(e,t,n){I(this,e,t,!0,n)},a.prototype.writeUInt32BE=function(e,t,n){I(this,e,t,!1,n)},a.prototype.writeInt8=function(e,t,n){n||(V(null!=e,"missing value"),V(null!=t,"missing offset"),V(t=this.length||(0<=e?this.writeUInt8(e,t,n):this.writeUInt8(255+e+1,t,n))},a.prototype.writeInt16LE=function(e,t,n){E(this,e,t,!0,n)},a.prototype.writeInt16BE=function(e,t,n){E(this,e,t,!1,n)},a.prototype.writeInt32LE=function(e,t,n){C(this,e,t,!0,n)},a.prototype.writeInt32BE=function(e,t,n){C(this,e,t,!1,n)},a.prototype.writeFloatLE=function(e,t,n){D(this,e,t,!0,n)},a.prototype.writeFloatBE=function(e,t,n){D(this,e,t,!1,n)},a.prototype.writeDoubleLE=function(e,t,n){_(this,e,t,!0,n)},a.prototype.writeDoubleBE=function(e,t,n){_(this,e,t,!1,n)},a.prototype.fill=function(e,t,n){if(e=e||0,t=t||0,n=n||this.length,"string"==typeof e&&(e=e.charCodeAt(0)),V("number"==typeof e&&!isNaN(e),"value is not a number"),V(t<=n,"end < start"),n!==t&&0!==this.length){V(0<=t&&t"},a.prototype.toArrayBuffer=function(){if("undefined"==typeof Uint8Array)throw new Error("Buffer.toArrayBuffer not supported in this browser");if(a._useTypedArrays)return new a(this).buffer;for(var e=new Uint8Array(this.length),t=0,n=e.length;t=t.length||a>=e.length);a++)t[a+n]=e[a];return a}function N(e){try{return decodeURIComponent(e)}catch(e){return String.fromCharCode(65533)}}function F(e,t){V("number"==typeof e,"cannot write a non-number as a number"),V(0<=e,"specified a negative value for writing an unsigned value"),V(e<=t,"value is larger than maximum value for type"),V(Math.floor(e)===e,"value has a fractional component")}function B(e,t,n){V("number"==typeof e,"cannot write a non-number as a number"),V(e<=t,"value larger than maximum allowed value"),V(n<=e,"value smaller than minimum allowed value"),V(Math.floor(e)===e,"value has a fractional component")}function U(e,t,n){V("number"==typeof e,"cannot write a non-number as a number"),V(e<=t,"value larger than maximum allowed value"),V(n<=e,"value smaller than minimum allowed value")}function V(e,t){if(!e)throw new Error(t||"Failed assertion")}a._augment=function(e){return e._isBuffer=!0,e._get=e.get,e._set=e.set,e.get=M.get,e.set=M.set,e.write=M.write,e.toString=M.toString,e.toLocaleString=M.toString,e.toJSON=M.toJSON,e.copy=M.copy,e.slice=M.slice,e.readUInt8=M.readUInt8,e.readUInt16LE=M.readUInt16LE,e.readUInt16BE=M.readUInt16BE,e.readUInt32LE=M.readUInt32LE,e.readUInt32BE=M.readUInt32BE,e.readInt8=M.readInt8,e.readInt16LE=M.readInt16LE,e.readInt16BE=M.readInt16BE,e.readInt32LE=M.readInt32LE,e.readInt32BE=M.readInt32BE,e.readFloatLE=M.readFloatLE,e.readFloatBE=M.readFloatBE,e.readDoubleLE=M.readDoubleLE,e.readDoubleBE=M.readDoubleBE,e.writeUInt8=M.writeUInt8,e.writeUInt16LE=M.writeUInt16LE,e.writeUInt16BE=M.writeUInt16BE,e.writeUInt32LE=M.writeUInt32LE,e.writeUInt32BE=M.writeUInt32BE,e.writeInt8=M.writeInt8,e.writeInt16LE=M.writeInt16LE,e.writeInt16BE=M.writeInt16BE,e.writeInt32LE=M.writeInt32LE,e.writeInt32BE=M.writeInt32BE,e.writeFloatLE=M.writeFloatLE,e.writeFloatBE=M.writeFloatBE,e.writeDoubleLE=M.writeDoubleLE,e.writeDoubleBE=M.writeDoubleBE,e.fill=M.fill,e.inspect=M.inspect,e.toArrayBuffer=M.toArrayBuffer,e}}).call(this,e("lYpoI2"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/buffer/index.js","/node_modules/gulp-browserify/node_modules/buffer")},{"base64-js":2,buffer:3,ieee754:11,lYpoI2:10}],4:[function(e,t,n){(function(n,r,a,i,o,s,u,l,c){a=e("buffer").Buffer;var d=4,f=new a(d);f.fill(0),t.exports={hash:function(e,t,n,r){return a.isBuffer(e)||(e=new a(e)),function(e,t,n){for(var r=new a(t),i=n?r.writeInt32BE:r.writeInt32LE,o=0;op?t=e(t):t.length>5]|=128<>>9<<4)]=t;for(var n=1732584193,r=-271733879,a=-1732584194,i=271733878,o=0;o>>32-s,n);var o,s}function m(e,t,n,r,a,i,o){return v(t&n|~t&r,e,t,a,i,o)}function p(e,t,n,r,a,i,o){return v(t&r|n&~r,e,t,a,i,o)}function h(e,t,n,r,a,i,o){return v(t^n^r,e,t,a,i,o)}function g(e,t,n,r,a,i,o){return v(n^(t|~r),e,t,a,i,o)}function A(e,t){var n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}t.exports=function(e){return d.hash(e,f,16)}}).call(this,e("lYpoI2"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/md5.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./helpers":4,buffer:3,lYpoI2:10}],7:[function(e,t,n){(function(e,n,r,a,i,o,s,u,l){var c,d;d=function(e){for(var t,n=new Array(e),r=0;r>>((3&r)<<3)&255;return n},t.exports=c||d}).call(this,e("lYpoI2"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/rng.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{buffer:3,lYpoI2:10}],8:[function(e,t,n){(function(n,r,a,i,o,s,u,l,c){var d=e("./helpers");function f(e,t){e[t>>5]|=128<<24-t%32,e[15+(t+64>>9<<4)]=t;for(var n,r,a,i,o,s=Array(80),u=1732584193,l=-271733879,c=-1732584194,d=271733878,f=-1009589776,p=0;p>16)+(t>>16)+(n>>16)<<16|65535&n}function m(e,t){return e<>>32-t}t.exports=function(e){return d.hash(e,f,20,!0)}}).call(this,e("lYpoI2"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/sha.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./helpers":4,buffer:3,lYpoI2:10}],9:[function(e,t,n){(function(n,r,a,i,o,s,u,l,c){function d(e,t){var n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}function f(e,t){return e>>>t|e<<32-t}function v(e,t){var n,r,a,i,o,s,u,l,c,v,m=new Array(1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298),p=new Array(1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225),h=new Array(64);e[t>>5]|=128<<24-t%32,e[15+(t+64>>9<<4)]=t;for(var g,A,y,S,b,w,I,E,C=0;C>>10,h[D-7]),f(I=h[D-15],7)^f(I,18)^I>>>3),h[D-16]),c=d(d(d(d(l,f(w=o,6)^f(w,11)^f(w,25)),(b=o)&s^~b&u),m[D]),h[D]),v=d(f(S=n,2)^f(S,13)^f(S,22),(g=n)&(A=r)^g&(y=a)^A&y),l=u,u=s,s=o,o=d(i,c),i=a,a=r,r=n,n=d(c,v);p[0]=d(n,p[0]),p[1]=d(r,p[1]),p[2]=d(a,p[2]),p[3]=d(i,p[3]),p[4]=d(o,p[4]),p[5]=d(s,p[5]),p[6]=d(u,p[6]),p[7]=d(l,p[7])}return p}var m=e("./helpers");t.exports=function(e){return m.hash(e,v,32,!0)}}).call(this,e("lYpoI2"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/sha256.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./helpers":4,buffer:3,lYpoI2:10}],10:[function(e,t,n){(function(e,n,r,a,i,o,s,u,l){function c(){}(e=t.exports={}).nextTick=function(){var e="undefined"!=typeof window&&window.setImmediate,t="undefined"!=typeof window&&window.postMessage&&window.addEventListener;if(e)return function(e){return window.setImmediate(e)};if(t){var n=[];return window.addEventListener("message",(function(e){var t=e.source;t!==window&&null!==t||"process-tick"!==e.data||(e.stopPropagation(),0>1,c=-7,d=n?a-1:0,f=n?-1:1,v=e[t+d];for(d+=f,i=v&(1<<-c)-1,v>>=-c,c+=s;0>=-c,c+=r;0>1,f=23===a?Math.pow(2,-24)-Math.pow(2,-77):0,v=r?0:i-1,m=r?1:-1,p=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,o=c):(o=Math.floor(Math.log(t)/Math.LN2),t*(u=Math.pow(2,-o))<1&&(o--,u*=2),2<=(t+=1<=o+d?f/u:f*Math.pow(2,1-d))*u&&(o++,u/=2),c<=o+d?(s=0,o=c):1<=o+d?(s=(t*u-1)*Math.pow(2,a),o+=d):(s=t*Math.pow(2,d-1)*Math.pow(2,a),o=0));8<=a;e[n+v]=255&s,v+=m,s/=256,a-=8);for(o=o<-1e3&&e<1e3||w.call(/e/,t))return t;var n=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if("number"==typeof e){var r=e<0?-D(-e):D(e);if(r!==e){var a=String(r),i=A.call(t,a.length+1);return y.call(a,n,"$&_")+"."+y.call(y.call(i,/([0-9]{3})/g,"$&_"),/_$/,"")}}return y.call(t,n,"$&_")}var k=n(45503),N=k.custom,F=G(N)?N:null;function B(e,t,n){var r="double"===(n.quoteStyle||t)?'"':"'";return r+e+r}function U(e){return y.call(String(e),/"/g,""")}function V(e){return!("[object Array]"!==q(e)||T&&"object"==typeof e&&T in e)}function j(e){return!("[object RegExp]"!==q(e)||T&&"object"==typeof e&&T in e)}function G(e){if(P)return e&&"object"==typeof e&&e instanceof Symbol;if("symbol"==typeof e)return!0;if(!e||"object"!=typeof e||!O)return!1;try{return O.call(e),!0}catch(e){}return!1}e.exports=function e(t,n,r,a){var s=n||{};if(Q(s,"quoteStyle")&&"single"!==s.quoteStyle&&"double"!==s.quoteStyle)throw new TypeError('option "quoteStyle" must be "single" or "double"');if(Q(s,"maxStringLength")&&("number"==typeof s.maxStringLength?s.maxStringLength<0&&s.maxStringLength!==1/0:null!==s.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var u=!Q(s,"customInspect")||s.customInspect;if("boolean"!=typeof u&&"symbol"!==u)throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(Q(s,"indent")&&null!==s.indent&&"\t"!==s.indent&&!(parseInt(s.indent,10)===s.indent&&s.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(Q(s,"numericSeparator")&&"boolean"!=typeof s.numericSeparator)throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var p=s.numericSeparator;if(void 0===t)return"undefined";if(null===t)return"null";if("boolean"==typeof t)return t?"true":"false";if("string"==typeof t)return W(t,s);if("number"==typeof t){if(0===t)return 1/0/t>0?"0":"-0";var S=String(t);return p?L(t,S):S}if("bigint"==typeof t){var w=String(t)+"n";return p?L(t,w):w}var D=void 0===s.depth?5:s.depth;if(void 0===r&&(r=0),r>=D&&D>0&&"object"==typeof t)return V(t)?"[Array]":"[Object]";var M=function(e,t){var n;if("\t"===e.indent)n="\t";else{if(!("number"==typeof e.indent&&e.indent>0))return null;n=E.call(Array(e.indent+1)," ")}return{base:n,prev:E.call(Array(t+1),n)}}(s,r);if(void 0===a)a=[];else if(z(a,t)>=0)return"[Circular]";function N(t,n,i){if(n&&(a=C.call(a)).push(n),i){var o={depth:s.depth};return Q(s,"quoteStyle")&&(o.quoteStyle=s.quoteStyle),e(t,o,r+1,a)}return e(t,s,r+1,a)}if("function"==typeof t&&!j(t)){var H=function(e){if(e.name)return e.name;var t=g.call(h.call(e),/^function\s*([\w$]+)/);if(t)return t[1];return null}(t),Y=J(t,N);return"[Function"+(H?": "+H:" (anonymous)")+"]"+(Y.length>0?" { "+E.call(Y,", ")+" }":"")}if(G(t)){var ee=P?y.call(String(t),/^(Symbol\(.*\))_[^)]*$/,"$1"):O.call(t);return"object"!=typeof t||P?ee:Z(ee)}if(function(e){if(!e||"object"!=typeof e)return!1;if("undefined"!=typeof HTMLElement&&e instanceof HTMLElement)return!0;return"string"==typeof e.nodeName&&"function"==typeof e.getAttribute}(t)){for(var te="<"+b.call(String(t.nodeName)),ne=t.attributes||[],re=0;re"}if(V(t)){if(0===t.length)return"[]";var ae=J(t,N);return M&&!function(e){for(var t=0;t=0)return!1;return!0}(ae)?"["+$(ae,M)+"]":"[ "+E.call(ae,", ")+" ]"}if(function(e){return!("[object Error]"!==q(e)||T&&"object"==typeof e&&T in e)}(t)){var ie=J(t,N);return"cause"in Error.prototype||!("cause"in t)||x.call(t,"cause")?0===ie.length?"["+String(t)+"]":"{ ["+String(t)+"] "+E.call(ie,", ")+" }":"{ ["+String(t)+"] "+E.call(I.call("[cause]: "+N(t.cause),ie),", ")+" }"}if("object"==typeof t&&u){if(F&&"function"==typeof t[F]&&k)return k(t,{depth:D-r});if("symbol"!==u&&"function"==typeof t.inspect)return t.inspect()}if(function(e){if(!i||!e||"object"!=typeof e)return!1;try{i.call(e);try{l.call(e)}catch(e){return!0}return e instanceof Map}catch(e){}return!1}(t)){var oe=[];return o.call(t,(function(e,n){oe.push(N(n,t,!0)+" => "+N(e,t))})),X("Map",i.call(t),oe,M)}if(function(e){if(!l||!e||"object"!=typeof e)return!1;try{l.call(e);try{i.call(e)}catch(e){return!0}return e instanceof Set}catch(e){}return!1}(t)){var se=[];return c.call(t,(function(e){se.push(N(e,t))})),X("Set",l.call(t),se,M)}if(function(e){if(!d||!e||"object"!=typeof e)return!1;try{d.call(e,d);try{f.call(e,f)}catch(e){return!0}return e instanceof WeakMap}catch(e){}return!1}(t))return K("WeakMap");if(function(e){if(!f||!e||"object"!=typeof e)return!1;try{f.call(e,f);try{d.call(e,d)}catch(e){return!0}return e instanceof WeakSet}catch(e){}return!1}(t))return K("WeakSet");if(function(e){if(!v||!e||"object"!=typeof e)return!1;try{return v.call(e),!0}catch(e){}return!1}(t))return K("WeakRef");if(function(e){return!("[object Number]"!==q(e)||T&&"object"==typeof e&&T in e)}(t))return Z(N(Number(t)));if(function(e){if(!e||"object"!=typeof e||!_)return!1;try{return _.call(e),!0}catch(e){}return!1}(t))return Z(N(_.call(t)));if(function(e){return!("[object Boolean]"!==q(e)||T&&"object"==typeof e&&T in e)}(t))return Z(m.call(t));if(function(e){return!("[object String]"!==q(e)||T&&"object"==typeof e&&T in e)}(t))return Z(N(String(t)));if(!function(e){return!("[object Date]"!==q(e)||T&&"object"==typeof e&&T in e)}(t)&&!j(t)){var ue=J(t,N),le=R?R(t)===Object.prototype:t instanceof Object||t.constructor===Object,ce=t instanceof Object?"":"null prototype",de=!le&&T&&Object(t)===t&&T in t?A.call(q(t),8,-1):ce?"Object":"",fe=(le||"function"!=typeof t.constructor?"":t.constructor.name?t.constructor.name+" ":"")+(de||ce?"["+E.call(I.call([],de||[],ce||[]),": ")+"] ":"");return 0===ue.length?fe+"{}":M?fe+"{"+$(ue,M)+"}":fe+"{ "+E.call(ue,", ")+" }"}return String(t)};var H=Object.prototype.hasOwnProperty||function(e){return e in this};function Q(e,t){return H.call(e,t)}function q(e){return p.call(e)}function z(e,t){if(e.indexOf)return e.indexOf(t);for(var n=0,r=e.length;nt.maxStringLength){var n=e.length-t.maxStringLength,r="... "+n+" more character"+(n>1?"s":"");return W(A.call(e,0,t.maxStringLength),t)+r}return B(y.call(y.call(e,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,Y),"single",t)}function Y(e){var t=e.charCodeAt(0),n={8:"b",9:"t",10:"n",12:"f",13:"r"}[t];return n?"\\"+n:"\\x"+(t<16?"0":"")+S.call(t.toString(16))}function Z(e){return"Object("+e+")"}function K(e){return e+" { ? }"}function X(e,t,n,r){return e+" ("+t+") {"+(r?$(n,r):E.call(n,", "))+"}"}function $(e,t){if(0===e.length)return"";var n="\n"+t.prev+t.base;return n+E.call(e,","+n)+"\n"+t.prev}function J(e,t){var n=V(e),r=[];if(n){r.length=e.length;for(var a=0;a0&&!a.call(e,0))for(var p=0;p0)for(var h=0;h=0&&"[object Function]"===t.call(e.callee)),r}},19564:function(e,t,n){"use strict";var r=n(13438),a=function(e){return null!=e},i=n(16073)(),o=n(47737),s=Object,u=o("Array.prototype.push"),l=o("Object.prototype.propertyIsEnumerable"),c=i?Object.getOwnPropertySymbols:null;e.exports=function(e,t){if(!a(e))throw new TypeError("target must be an object");var n,o,d,f,v,m,p,h=s(e);for(n=1;n=4){for(var e=arguments.length,t=Array(e),n=0;n=3){for(var e=arguments.length,t=Array(e),n=0;n=2){for(var e=arguments.length,t=Array(e),n=0;n=1){for(var e=arguments.length,t=Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:i.JsonService;if(o(this,e),!t)throw a.Log.error("MetadataService: No settings passed to MetadataService"),new Error("settings");this._settings=t,this._jsonService=new n(["application/jwk-set+json"])}return e.prototype.resetSigningKeys=function(){this._settings=this._settings||{},this._settings.signingKeys=void 0},e.prototype.getMetadata=function(){var e=this;return this._settings.metadata?(a.Log.debug("MetadataService.getMetadata: Returning metadata from settings"),Promise.resolve(this._settings.metadata)):this.metadataUrl?(a.Log.debug("MetadataService.getMetadata: getting metadata from",this.metadataUrl),this._jsonService.getJson(this.metadataUrl).then((function(t){a.Log.debug("MetadataService.getMetadata: json received");var n=e._settings.metadataSeed||{};return e._settings.metadata=Object.assign({},n,t),e._settings.metadata}))):(a.Log.error("MetadataService.getMetadata: No authority or metadataUrl configured on settings"),Promise.reject(new Error("No authority or metadataUrl configured on settings")))},e.prototype.getIssuer=function(){return this._getMetadataProperty("issuer")},e.prototype.getAuthorizationEndpoint=function(){return this._getMetadataProperty("authorization_endpoint")},e.prototype.getUserInfoEndpoint=function(){return this._getMetadataProperty("userinfo_endpoint")},e.prototype.getTokenEndpoint=function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return this._getMetadataProperty("token_endpoint",e)},e.prototype.getCheckSessionIframe=function(){return this._getMetadataProperty("check_session_iframe",!0)},e.prototype.getEndSessionEndpoint=function(){return this._getMetadataProperty("end_session_endpoint",!0)},e.prototype.getRevocationEndpoint=function(){return this._getMetadataProperty("revocation_endpoint",!0)},e.prototype.getKeysEndpoint=function(){return this._getMetadataProperty("jwks_uri",!0)},e.prototype._getMetadataProperty=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return a.Log.debug("MetadataService.getMetadataProperty for: "+e),this.getMetadata().then((function(n){if(a.Log.debug("MetadataService.getMetadataProperty: metadata recieved"),void 0===n[e]){if(!0===t)return void a.Log.warn("MetadataService.getMetadataProperty: Metadata does not contain optional property "+e);throw a.Log.error("MetadataService.getMetadataProperty: Metadata does not contain property "+e),new Error("Metadata does not contain property "+e)}return n[e]}))},e.prototype.getSigningKeys=function(){var e=this;return this._settings.signingKeys?(a.Log.debug("MetadataService.getSigningKeys: Returning signingKeys from settings"),Promise.resolve(this._settings.signingKeys)):this._getMetadataProperty("jwks_uri").then((function(t){return a.Log.debug("MetadataService.getSigningKeys: jwks_uri received",t),e._jsonService.getJson(t).then((function(t){if(a.Log.debug("MetadataService.getSigningKeys: key set received",t),!t.keys)throw a.Log.error("MetadataService.getSigningKeys: Missing keys on keyset"),new Error("Missing keys on keyset");return e._settings.signingKeys=t.keys,e._settings.signingKeys}))}))},r(e,[{key:"metadataUrl",get:function(){return this._metadataUrl||(this._settings.metadataUrl?this._metadataUrl=this._settings.metadataUrl:(this._metadataUrl=this._settings.authority,this._metadataUrl&&this._metadataUrl.indexOf(s)<0&&("/"!==this._metadataUrl[this._metadataUrl.length-1]&&(this._metadataUrl+="/"),this._metadataUrl+=s))),this._metadataUrl}}]),e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.UrlUtility=void 0;var r=n(0),a=n(1);t.UrlUtility=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e)}return e.addQueryParam=function(e,t,n){return e.indexOf("?")<0&&(e+="?"),"?"!==e[e.length-1]&&(e+="&"),e+=encodeURIComponent(t),(e+="=")+encodeURIComponent(n)},e.parseUrlFragment=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"#",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:a.Global;"string"!=typeof e&&(e=n.location.href);var i=e.lastIndexOf(t);i>=0&&(e=e.substr(i+1)),"?"===t&&(i=e.indexOf("#"))>=0&&(e=e.substr(0,i));for(var o,s={},u=/([^&=]+)=([^&]*)/g,l=0;o=u.exec(e);)if(s[decodeURIComponent(o[1])]=decodeURIComponent(o[2].replace(/\+/g," ")),l++>50)return r.Log.error("UrlUtility.parseUrlFragment: response exceeded expected number of parameters",e),{error:"Response exceeded expected number of parameters"};for(var c in s)return s;return{}},e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.JoseUtil=void 0;var r=n(26),a=function(e){return e&&e.__esModule?e:{default:e}}(n(33));t.JoseUtil=(0,a.default)({jws:r.jws,KeyUtil:r.KeyUtil,X509:r.X509,crypto:r.crypto,hextob64u:r.hextob64u,b64tohex:r.b64tohex,AllowedSigningAlgs:r.AllowedSigningAlgs})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.OidcClientSettings=void 0;var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{},n=t.authority,a=t.metadataUrl,i=t.metadata,d=t.signingKeys,p=t.metadataSeed,h=t.client_id,g=t.client_secret,A=t.response_type,y=void 0===A?f:A,S=t.scope,b=void 0===S?v:S,w=t.redirect_uri,I=t.post_logout_redirect_uri,E=t.client_authentication,C=void 0===E?m:E,D=t.prompt,_=t.display,M=t.max_age,O=t.ui_locales,P=t.acr_values,T=t.resource,x=t.response_mode,R=t.filterProtocolClaims,L=void 0===R||R,k=t.loadUserInfo,N=void 0===k||k,F=t.staleStateAge,B=void 0===F?900:F,U=t.clockSkew,V=void 0===U?300:U,j=t.clockService,G=void 0===j?new o.ClockService:j,H=t.userInfoJwtIssuer,Q=void 0===H?"OP":H,q=t.mergeClaims,z=void 0!==q&&q,W=t.stateStore,Y=void 0===W?new s.WebStorageStateStore:W,Z=t.ResponseValidatorCtor,K=void 0===Z?u.ResponseValidator:Z,X=t.MetadataServiceCtor,$=void 0===X?l.MetadataService:X,J=t.extraQueryParams,ee=void 0===J?{}:J,te=t.extraTokenParams,ne=void 0===te?{}:te;c(this,e),this._authority=n,this._metadataUrl=a,this._metadata=i,this._metadataSeed=p,this._signingKeys=d,this._client_id=h,this._client_secret=g,this._response_type=y,this._scope=b,this._redirect_uri=w,this._post_logout_redirect_uri=I,this._client_authentication=C,this._prompt=D,this._display=_,this._max_age=M,this._ui_locales=O,this._acr_values=P,this._resource=T,this._response_mode=x,this._filterProtocolClaims=!!L,this._loadUserInfo=!!N,this._staleStateAge=B,this._clockSkew=V,this._clockService=G,this._userInfoJwtIssuer=Q,this._mergeClaims=!!z,this._stateStore=Y,this._validator=new K(this),this._metadataService=new $(this),this._extraQueryParams="object"===(void 0===ee?"undefined":r(ee))?ee:{},this._extraTokenParams="object"===(void 0===ne?"undefined":r(ne))?ne:{}}return e.prototype.getEpochTime=function(){return this._clockService.getEpochTime()},a(e,[{key:"client_id",get:function(){return this._client_id},set:function(e){if(this._client_id)throw i.Log.error("OidcClientSettings.set_client_id: client_id has already been assigned."),new Error("client_id has already been assigned.");this._client_id=e}},{key:"client_secret",get:function(){return this._client_secret}},{key:"response_type",get:function(){return this._response_type}},{key:"scope",get:function(){return this._scope}},{key:"redirect_uri",get:function(){return this._redirect_uri}},{key:"post_logout_redirect_uri",get:function(){return this._post_logout_redirect_uri}},{key:"client_authentication",get:function(){return this._client_authentication}},{key:"prompt",get:function(){return this._prompt}},{key:"display",get:function(){return this._display}},{key:"max_age",get:function(){return this._max_age}},{key:"ui_locales",get:function(){return this._ui_locales}},{key:"acr_values",get:function(){return this._acr_values}},{key:"resource",get:function(){return this._resource}},{key:"response_mode",get:function(){return this._response_mode}},{key:"authority",get:function(){return this._authority},set:function(e){if(this._authority)throw i.Log.error("OidcClientSettings.set_authority: authority has already been assigned."),new Error("authority has already been assigned.");this._authority=e}},{key:"metadataUrl",get:function(){return this._metadataUrl||(this._metadataUrl=this.authority,this._metadataUrl&&this._metadataUrl.indexOf(d)<0&&("/"!==this._metadataUrl[this._metadataUrl.length-1]&&(this._metadataUrl+="/"),this._metadataUrl+=d)),this._metadataUrl}},{key:"metadata",get:function(){return this._metadata},set:function(e){this._metadata=e}},{key:"metadataSeed",get:function(){return this._metadataSeed},set:function(e){this._metadataSeed=e}},{key:"signingKeys",get:function(){return this._signingKeys},set:function(e){this._signingKeys=e}},{key:"filterProtocolClaims",get:function(){return this._filterProtocolClaims}},{key:"loadUserInfo",get:function(){return this._loadUserInfo}},{key:"staleStateAge",get:function(){return this._staleStateAge}},{key:"clockSkew",get:function(){return this._clockSkew}},{key:"userInfoJwtIssuer",get:function(){return this._userInfoJwtIssuer}},{key:"mergeClaims",get:function(){return this._mergeClaims}},{key:"stateStore",get:function(){return this._stateStore}},{key:"validator",get:function(){return this._validator}},{key:"metadataService",get:function(){return this._metadataService}},{key:"extraQueryParams",get:function(){return this._extraQueryParams},set:function(e){"object"===(void 0===e?"undefined":r(e))?this._extraQueryParams=e:this._extraQueryParams={}}},{key:"extraTokenParams",get:function(){return this._extraTokenParams},set:function(e){"object"===(void 0===e?"undefined":r(e))?this._extraTokenParams=e:this._extraTokenParams={}}}]),e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.WebStorageStateStore=void 0;var r=n(0),a=n(1);function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.WebStorageStateStore=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.prefix,r=void 0===n?"oidc.":n,o=t.store,s=void 0===o?a.Global.localStorage:o;i(this,e),this._store=s,this._prefix=r}return e.prototype.set=function(e,t){return r.Log.debug("WebStorageStateStore.set",e),e=this._prefix+e,this._store.setItem(e,t),Promise.resolve()},e.prototype.get=function(e){r.Log.debug("WebStorageStateStore.get",e),e=this._prefix+e;var t=this._store.getItem(e);return Promise.resolve(t)},e.prototype.remove=function(e){r.Log.debug("WebStorageStateStore.remove",e),e=this._prefix+e;var t=this._store.getItem(e);return this._store.removeItem(e),Promise.resolve(t)},e.prototype.getAllKeys=function(){r.Log.debug("WebStorageStateStore.getAllKeys");for(var e=[],t=0;t0&&void 0!==arguments[0]?arguments[0]:null,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:a.Global.XMLHttpRequest,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;i(this,e),t&&Array.isArray(t)?this._contentTypes=t.slice():this._contentTypes=[],this._contentTypes.push("application/json"),r&&this._contentTypes.push("application/jwt"),this._XMLHttpRequest=n,this._jwtHandler=r}return e.prototype.getJson=function(e,t){var n=this;if(!e)throw r.Log.error("JsonService.getJson: No url passed"),new Error("url");return r.Log.debug("JsonService.getJson, url: ",e),new Promise((function(a,i){var o=new n._XMLHttpRequest;o.open("GET",e);var s=n._contentTypes,u=n._jwtHandler;o.onload=function(){if(r.Log.debug("JsonService.getJson: HTTP response received, status",o.status),200===o.status){var t=o.getResponseHeader("Content-Type");if(t){var n=s.find((function(e){if(t.startsWith(e))return!0}));if("application/jwt"==n)return void u(o).then(a,i);if(n)try{return void a(JSON.parse(o.responseText))}catch(e){return r.Log.error("JsonService.getJson: Error parsing JSON response",e.message),void i(e)}}i(Error("Invalid response Content-Type: "+t+", from URL: "+e))}else i(Error(o.statusText+" ("+o.status+")"))},o.onerror=function(){r.Log.error("JsonService.getJson: network error"),i(Error("Network Error"))},t&&(r.Log.debug("JsonService.getJson: token passed, setting Authorization header"),o.setRequestHeader("Authorization","Bearer "+t)),o.send()}))},e.prototype.postForm=function(e,t,n){var a=this;if(!e)throw r.Log.error("JsonService.postForm: No url passed"),new Error("url");return r.Log.debug("JsonService.postForm, url: ",e),new Promise((function(i,o){var s=new a._XMLHttpRequest;s.open("POST",e);var u=a._contentTypes;s.onload=function(){if(r.Log.debug("JsonService.postForm: HTTP response received, status",s.status),200!==s.status){if(400===s.status&&(n=s.getResponseHeader("Content-Type"))&&u.find((function(e){if(n.startsWith(e))return!0})))try{var t=JSON.parse(s.responseText);if(t&&t.error)return r.Log.error("JsonService.postForm: Error from server: ",t.error),void o(new Error(t.error))}catch(e){return r.Log.error("JsonService.postForm: Error parsing JSON response",e.message),void o(e)}o(Error(s.statusText+" ("+s.status+")"))}else{var n;if((n=s.getResponseHeader("Content-Type"))&&u.find((function(e){if(n.startsWith(e))return!0})))try{return void i(JSON.parse(s.responseText))}catch(e){return r.Log.error("JsonService.postForm: Error parsing JSON response",e.message),void o(e)}o(Error("Invalid response Content-Type: "+n+", from URL: "+e))}},s.onerror=function(){r.Log.error("JsonService.postForm: network error"),o(Error("Network Error"))};var l="";for(var c in t){var d=t[c];d&&(l.length>0&&(l+="&"),l+=encodeURIComponent(c),l+="=",l+=encodeURIComponent(d))}s.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),void 0!==n&&s.setRequestHeader("Authorization","Basic "+btoa(n)),s.send(l)}))},e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SigninRequest=void 0;var r=n(0),a=n(3),i=n(13);t.SigninRequest=function(){function e(t){var n=t.url,o=t.client_id,s=t.redirect_uri,u=t.response_type,l=t.scope,c=t.authority,d=t.data,f=t.prompt,v=t.display,m=t.max_age,p=t.ui_locales,h=t.id_token_hint,g=t.login_hint,A=t.acr_values,y=t.resource,S=t.response_mode,b=t.request,w=t.request_uri,I=t.extraQueryParams,E=t.request_type,C=t.client_secret,D=t.extraTokenParams,_=t.skipUserInfo;if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),!n)throw r.Log.error("SigninRequest.ctor: No url passed"),new Error("url");if(!o)throw r.Log.error("SigninRequest.ctor: No client_id passed"),new Error("client_id");if(!s)throw r.Log.error("SigninRequest.ctor: No redirect_uri passed"),new Error("redirect_uri");if(!u)throw r.Log.error("SigninRequest.ctor: No response_type passed"),new Error("response_type");if(!l)throw r.Log.error("SigninRequest.ctor: No scope passed"),new Error("scope");if(!c)throw r.Log.error("SigninRequest.ctor: No authority passed"),new Error("authority");var M=e.isOidc(u),O=e.isCode(u);S||(S=e.isCode(u)?"query":null),this.state=new i.SigninState({nonce:M,data:d,client_id:o,authority:c,redirect_uri:s,code_verifier:O,request_type:E,response_mode:S,client_secret:C,scope:l,extraTokenParams:D,skipUserInfo:_}),n=a.UrlUtility.addQueryParam(n,"client_id",o),n=a.UrlUtility.addQueryParam(n,"redirect_uri",s),n=a.UrlUtility.addQueryParam(n,"response_type",u),n=a.UrlUtility.addQueryParam(n,"scope",l),n=a.UrlUtility.addQueryParam(n,"state",this.state.id),M&&(n=a.UrlUtility.addQueryParam(n,"nonce",this.state.nonce)),O&&(n=a.UrlUtility.addQueryParam(n,"code_challenge",this.state.code_challenge),n=a.UrlUtility.addQueryParam(n,"code_challenge_method","S256"));var P={prompt:f,display:v,max_age:m,ui_locales:p,id_token_hint:h,login_hint:g,acr_values:A,resource:y,request:b,request_uri:w,response_mode:S};for(var T in P)P[T]&&(n=a.UrlUtility.addQueryParam(n,T,P[T]));for(var x in I)n=a.UrlUtility.addQueryParam(n,x,I[x]);this.url=n}return e.isOidc=function(e){return!!e.split(/\s+/g).filter((function(e){return"id_token"===e}))[0]},e.isOAuth=function(e){return!!e.split(/\s+/g).filter((function(e){return"token"===e}))[0]},e.isCode=function(e){return!!e.split(/\s+/g).filter((function(e){return"code"===e}))[0]},e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.State=void 0;var r=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{},n=t.id,r=t.data,a=t.created,s=t.request_type;o(this,e),this._id=n||(0,i.default)(),this._data=r,this._created="number"==typeof a&&a>0?a:parseInt(Date.now()/1e3),this._request_type=s}return e.prototype.toStorageString=function(){return a.Log.debug("State.toStorageString"),JSON.stringify({id:this.id,data:this.data,created:this.created,request_type:this.request_type})},e.fromStorageString=function(t){return a.Log.debug("State.fromStorageString"),new e(JSON.parse(t))},e.clearStaleState=function(t,n){var r=Date.now()/1e3-n;return t.getAllKeys().then((function(n){a.Log.debug("State.clearStaleState: got keys",n);for(var i=[],o=function(o){var s=n[o];u=t.get(s).then((function(n){var i=!1;if(n)try{var o=e.fromStorageString(n);a.Log.debug("State.clearStaleState: got item from key: ",s,o.created),o.created<=r&&(i=!0)}catch(e){a.Log.error("State.clearStaleState: Error parsing state for key",s,e.message),i=!0}else a.Log.debug("State.clearStaleState: no item in storage for key: ",s),i=!0;if(i)return a.Log.debug("State.clearStaleState: removed item for key: ",s),t.remove(s)})),i.push(u)},s=0;s0&&void 0!==arguments[0]?arguments[0]:{};v(this,e),t instanceof i.OidcClientSettings?this._settings=t:this._settings=new i.OidcClientSettings(t)}return e.prototype.createSigninRequest=function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.response_type,r=t.scope,i=t.redirect_uri,o=t.data,u=t.state,l=t.prompt,c=t.display,d=t.max_age,f=t.ui_locales,v=t.id_token_hint,m=t.login_hint,p=t.acr_values,h=t.resource,g=t.request,A=t.request_uri,y=t.response_mode,S=t.extraQueryParams,b=t.extraTokenParams,w=t.request_type,I=t.skipUserInfo,E=arguments[1];a.Log.debug("OidcClient.createSigninRequest");var C=this._settings.client_id;n=n||this._settings.response_type,r=r||this._settings.scope,i=i||this._settings.redirect_uri,l=l||this._settings.prompt,c=c||this._settings.display,d=d||this._settings.max_age,f=f||this._settings.ui_locales,p=p||this._settings.acr_values,h=h||this._settings.resource,y=y||this._settings.response_mode,S=S||this._settings.extraQueryParams,b=b||this._settings.extraTokenParams;var D=this._settings.authority;return s.SigninRequest.isCode(n)&&"code"!==n?Promise.reject(new Error("OpenID Connect hybrid flow is not supported")):this._metadataService.getAuthorizationEndpoint().then((function(t){a.Log.debug("OidcClient.createSigninRequest: Received authorization endpoint",t);var _=new s.SigninRequest({url:t,client_id:C,redirect_uri:i,response_type:n,scope:r,data:o||u,authority:D,prompt:l,display:c,max_age:d,ui_locales:f,id_token_hint:v,login_hint:m,acr_values:p,resource:h,request:g,request_uri:A,extraQueryParams:S,extraTokenParams:b,request_type:w,response_mode:y,client_secret:e._settings.client_secret,skipUserInfo:I}),M=_.state;return(E=E||e._stateStore).set(M.id,M.toStorageString()).then((function(){return _}))}))},e.prototype.readSigninResponseState=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];a.Log.debug("OidcClient.readSigninResponseState");var r="query"===this._settings.response_mode||!this._settings.response_mode&&s.SigninRequest.isCode(this._settings.response_type),i=r?"?":"#",o=new u.SigninResponse(e,i);if(!o.state)return a.Log.error("OidcClient.readSigninResponseState: No state in response"),Promise.reject(new Error("No state in response"));t=t||this._stateStore;var l=n?t.remove.bind(t):t.get.bind(t);return l(o.state).then((function(e){if(!e)throw a.Log.error("OidcClient.readSigninResponseState: No matching state found in storage"),new Error("No matching state found in storage");return{state:d.SigninState.fromStorageString(e),response:o}}))},e.prototype.processSigninResponse=function(e,t){var n=this;return a.Log.debug("OidcClient.processSigninResponse"),this.readSigninResponseState(e,t,!0).then((function(e){var t=e.state,r=e.response;return a.Log.debug("OidcClient.processSigninResponse: Received state from storage; validating response"),n._validator.validateSigninResponse(t,r)}))},e.prototype.createSignoutRequest=function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.id_token_hint,r=t.data,i=t.state,o=t.post_logout_redirect_uri,s=t.extraQueryParams,u=t.request_type,c=arguments[1];return a.Log.debug("OidcClient.createSignoutRequest"),o=o||this._settings.post_logout_redirect_uri,s=s||this._settings.extraQueryParams,this._metadataService.getEndSessionEndpoint().then((function(t){if(!t)throw a.Log.error("OidcClient.createSignoutRequest: No end session endpoint url returned"),new Error("no end session endpoint");a.Log.debug("OidcClient.createSignoutRequest: Received end session endpoint",t);var d=new l.SignoutRequest({url:t,id_token_hint:n,post_logout_redirect_uri:o,data:r||i,extraQueryParams:s,request_type:u}),f=d.state;return f&&(a.Log.debug("OidcClient.createSignoutRequest: Signout request has state to persist"),(c=c||e._stateStore).set(f.id,f.toStorageString())),d}))},e.prototype.readSignoutResponseState=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];a.Log.debug("OidcClient.readSignoutResponseState");var r=new c.SignoutResponse(e);if(!r.state)return a.Log.debug("OidcClient.readSignoutResponseState: No state in response"),r.error?(a.Log.warn("OidcClient.readSignoutResponseState: Response was error: ",r.error),Promise.reject(new o.ErrorResponse(r))):Promise.resolve({state:void 0,response:r});var i=r.state;t=t||this._stateStore;var s=n?t.remove.bind(t):t.get.bind(t);return s(i).then((function(e){if(!e)throw a.Log.error("OidcClient.readSignoutResponseState: No matching state found in storage"),new Error("No matching state found in storage");return{state:f.State.fromStorageString(e),response:r}}))},e.prototype.processSignoutResponse=function(e,t){var n=this;return a.Log.debug("OidcClient.processSignoutResponse"),this.readSignoutResponseState(e,t,!0).then((function(e){var t=e.state,r=e.response;return t?(a.Log.debug("OidcClient.processSignoutResponse: Received state from storage; validating response"),n._validator.validateSignoutResponse(t,r)):(a.Log.debug("OidcClient.processSignoutResponse: No state from storage; skipping validating response"),r)}))},e.prototype.clearStaleState=function(e){return a.Log.debug("OidcClient.clearStaleState"),e=e||this._stateStore,f.State.clearStaleState(e,this.settings.staleStateAge)},r(e,[{key:"_stateStore",get:function(){return this.settings.stateStore}},{key:"_validator",get:function(){return this.settings.validator}},{key:"_metadataService",get:function(){return this.settings.metadataService}},{key:"settings",get:function(){return this._settings}},{key:"metadataService",get:function(){return this._metadataService}}]),e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TokenClient=void 0;var r=n(7),a=n(2),i=n(0);function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.TokenClient=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:r.JsonService,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:a.MetadataService;if(o(this,e),!t)throw i.Log.error("TokenClient.ctor: No settings passed"),new Error("settings");this._settings=t,this._jsonService=new n,this._metadataService=new s(this._settings)}return e.prototype.exchangeCode=function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(t=Object.assign({},t)).grant_type=t.grant_type||"authorization_code",t.client_id=t.client_id||this._settings.client_id,t.client_secret=t.client_secret||this._settings.client_secret,t.redirect_uri=t.redirect_uri||this._settings.redirect_uri;var n=void 0,r=t._client_authentication||this._settings._client_authentication;return delete t._client_authentication,t.code?t.redirect_uri?t.code_verifier?t.client_id?t.client_secret||"client_secret_basic"!=r?("client_secret_basic"==r&&(n=t.client_id+":"+t.client_secret,delete t.client_id,delete t.client_secret),this._metadataService.getTokenEndpoint(!1).then((function(r){return i.Log.debug("TokenClient.exchangeCode: Received token endpoint"),e._jsonService.postForm(r,t,n).then((function(e){return i.Log.debug("TokenClient.exchangeCode: response received"),e}))}))):(i.Log.error("TokenClient.exchangeCode: No client_secret passed"),Promise.reject(new Error("A client_secret is required"))):(i.Log.error("TokenClient.exchangeCode: No client_id passed"),Promise.reject(new Error("A client_id is required"))):(i.Log.error("TokenClient.exchangeCode: No code_verifier passed"),Promise.reject(new Error("A code_verifier is required"))):(i.Log.error("TokenClient.exchangeCode: No redirect_uri passed"),Promise.reject(new Error("A redirect_uri is required"))):(i.Log.error("TokenClient.exchangeCode: No code passed"),Promise.reject(new Error("A code is required")))},e.prototype.exchangeRefreshToken=function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(t=Object.assign({},t)).grant_type=t.grant_type||"refresh_token",t.client_id=t.client_id||this._settings.client_id,t.client_secret=t.client_secret||this._settings.client_secret;var n=void 0,r=t._client_authentication||this._settings._client_authentication;return delete t._client_authentication,t.refresh_token?t.client_id?("client_secret_basic"==r&&(n=t.client_id+":"+t.client_secret,delete t.client_id,delete t.client_secret),this._metadataService.getTokenEndpoint(!1).then((function(r){return i.Log.debug("TokenClient.exchangeRefreshToken: Received token endpoint"),e._jsonService.postForm(r,t,n).then((function(e){return i.Log.debug("TokenClient.exchangeRefreshToken: response received"),e}))}))):(i.Log.error("TokenClient.exchangeRefreshToken: No client_id passed"),Promise.reject(new Error("A client_id is required"))):(i.Log.error("TokenClient.exchangeRefreshToken: No refresh_token passed"),Promise.reject(new Error("A refresh_token is required")))},e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ErrorResponse=void 0;var r=n(0);function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}t.ErrorResponse=function(e){function t(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o=n.error,s=n.error_description,u=n.error_uri,l=n.state,c=n.session_state;if(a(this,t),!o)throw r.Log.error("No error passed to ErrorResponse"),new Error("error");var d=i(this,e.call(this,s||o));return d.name="ErrorResponse",d.error=o,d.error_description=s,d.error_uri=u,d.state=l,d.session_state=c,d}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t}(Error)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SigninState=void 0;var r=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{},r=n.nonce,a=n.authority,i=n.client_id,c=n.redirect_uri,d=n.code_verifier,f=n.response_mode,v=n.client_secret,m=n.scope,p=n.extraTokenParams,h=n.skipUserInfo;u(this,t);var g=l(this,e.call(this,arguments[0]));if(!0===r?g._nonce=(0,s.default)():r&&(g._nonce=r),!0===d?g._code_verifier=(0,s.default)()+(0,s.default)()+(0,s.default)():d&&(g._code_verifier=d),g.code_verifier){var A=o.JoseUtil.hashString(g.code_verifier,"SHA256");g._code_challenge=o.JoseUtil.hexToBase64Url(A)}return g._redirect_uri=c,g._authority=a,g._client_id=i,g._response_mode=f,g._client_secret=v,g._scope=m,g._extraTokenParams=p,g._skipUserInfo=h,g}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.toStorageString=function(){return a.Log.debug("SigninState.toStorageString"),JSON.stringify({id:this.id,data:this.data,created:this.created,request_type:this.request_type,nonce:this.nonce,code_verifier:this.code_verifier,redirect_uri:this.redirect_uri,authority:this.authority,client_id:this.client_id,response_mode:this.response_mode,client_secret:this.client_secret,scope:this.scope,extraTokenParams:this.extraTokenParams,skipUserInfo:this.skipUserInfo})},t.fromStorageString=function(e){return a.Log.debug("SigninState.fromStorageString"),new t(JSON.parse(e))},r(t,[{key:"nonce",get:function(){return this._nonce}},{key:"authority",get:function(){return this._authority}},{key:"client_id",get:function(){return this._client_id}},{key:"redirect_uri",get:function(){return this._redirect_uri}},{key:"code_verifier",get:function(){return this._code_verifier}},{key:"code_challenge",get:function(){return this._code_challenge}},{key:"response_mode",get:function(){return this._response_mode}},{key:"client_secret",get:function(){return this._client_secret}},{key:"scope",get:function(){return this._scope}},{key:"extraTokenParams",get:function(){return this._extraTokenParams}},{key:"skipUserInfo",get:function(){return this._skipUserInfo}}]),t}(i.State)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return("undefined"!=r&&null!==r&&void 0!==r.getRandomValues?a:i)().replace(/-/g,"")};var r="undefined"!=typeof window?window.crypto||window.msCrypto:null;function a(){return([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,(function(e){return(e^r.getRandomValues(new Uint8Array(1))[0]&15>>e/4).toString(16)}))}function i(){return([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,(function(e){return(e^16*Math.random()>>e/4).toString(16)}))}e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.User=void 0;var r=function(){function e(e,t){for(var n=0;n0){var n=parseInt(Date.now()/1e3);this.expires_at=n+t}}},{key:"expired",get:function(){var e=this.expires_in;if(void 0!==e)return e<=0}},{key:"scopes",get:function(){return(this.scope||"").split(" ")}}]),e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AccessTokenEvents=void 0;var r=n(0),a=n(46);function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.AccessTokenEvents=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.accessTokenExpiringNotificationTime,r=void 0===n?60:n,o=t.accessTokenExpiringTimer,s=void 0===o?new a.Timer("Access token expiring"):o,u=t.accessTokenExpiredTimer,l=void 0===u?new a.Timer("Access token expired"):u;i(this,e),this._accessTokenExpiringNotificationTime=r,this._accessTokenExpiring=s,this._accessTokenExpired=l}return e.prototype.load=function(e){if(e.access_token&&void 0!==e.expires_in){var t=e.expires_in;if(r.Log.debug("AccessTokenEvents.load: access token present, remaining duration:",t),t>0){var n=t-this._accessTokenExpiringNotificationTime;n<=0&&(n=1),r.Log.debug("AccessTokenEvents.load: registering expiring timer in:",n),this._accessTokenExpiring.init(n)}else r.Log.debug("AccessTokenEvents.load: canceling existing expiring timer becase we're past expiration."),this._accessTokenExpiring.cancel();var a=t+1;r.Log.debug("AccessTokenEvents.load: registering expired timer in:",a),this._accessTokenExpired.init(a)}else this._accessTokenExpiring.cancel(),this._accessTokenExpired.cancel()},e.prototype.unload=function(){r.Log.debug("AccessTokenEvents.unload: canceling existing access token timers"),this._accessTokenExpiring.cancel(),this._accessTokenExpired.cancel()},e.prototype.addAccessTokenExpiring=function(e){this._accessTokenExpiring.addHandler(e)},e.prototype.removeAccessTokenExpiring=function(e){this._accessTokenExpiring.removeHandler(e)},e.prototype.addAccessTokenExpired=function(e){this._accessTokenExpired.addHandler(e)},e.prototype.removeAccessTokenExpired=function(e){this._accessTokenExpired.removeHandler(e)},e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Event=void 0;var r=n(0);t.Event=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._name=t,this._callbacks=[]}return e.prototype.addHandler=function(e){this._callbacks.push(e)},e.prototype.removeHandler=function(e){var t=this._callbacks.findIndex((function(t){return t===e}));t>=0&&this._callbacks.splice(t,1)},e.prototype.raise=function(){r.Log.debug("Event: Raising event: "+this._name);for(var e=0;e1&&void 0!==arguments[1]?arguments[1]:i.CheckSessionIFrame,u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:o.Global.timer;if(s(this,e),!t)throw a.Log.error("SessionMonitor.ctor: No user manager passed to SessionMonitor"),new Error("userManager");this._userManager=t,this._CheckSessionIFrameCtor=r,this._timer=u,this._userManager.events.addUserLoaded(this._start.bind(this)),this._userManager.events.addUserUnloaded(this._stop.bind(this)),Promise.resolve(this._userManager.getUser().then((function(e){e?n._start(e):n._settings.monitorAnonymousSession&&n._userManager.querySessionStatus().then((function(e){var t={session_state:e.session_state};e.sub&&e.sid&&(t.profile={sub:e.sub,sid:e.sid}),n._start(t)})).catch((function(e){a.Log.error("SessionMonitor ctor: error from querySessionStatus:",e.message)}))})).catch((function(e){a.Log.error("SessionMonitor ctor: error from getUser:",e.message)})))}return e.prototype._start=function(e){var t=this,n=e.session_state;n&&(e.profile?(this._sub=e.profile.sub,this._sid=e.profile.sid,a.Log.debug("SessionMonitor._start: session_state:",n,", sub:",this._sub)):(this._sub=void 0,this._sid=void 0,a.Log.debug("SessionMonitor._start: session_state:",n,", anonymous user")),this._checkSessionIFrame?this._checkSessionIFrame.start(n):this._metadataService.getCheckSessionIframe().then((function(e){if(e){a.Log.debug("SessionMonitor._start: Initializing check session iframe");var r=t._client_id,i=t._checkSessionInterval,o=t._stopCheckSessionOnError;t._checkSessionIFrame=new t._CheckSessionIFrameCtor(t._callback.bind(t),r,e,i,o),t._checkSessionIFrame.load().then((function(){t._checkSessionIFrame.start(n)}))}else a.Log.warn("SessionMonitor._start: No check session iframe found in the metadata")})).catch((function(e){a.Log.error("SessionMonitor._start: Error from getCheckSessionIframe:",e.message)})))},e.prototype._stop=function(){var e=this;if(this._sub=void 0,this._sid=void 0,this._checkSessionIFrame&&(a.Log.debug("SessionMonitor._stop"),this._checkSessionIFrame.stop()),this._settings.monitorAnonymousSession)var t=this._timer.setInterval((function(){e._timer.clearInterval(t),e._userManager.querySessionStatus().then((function(t){var n={session_state:t.session_state};t.sub&&t.sid&&(n.profile={sub:t.sub,sid:t.sid}),e._start(n)})).catch((function(e){a.Log.error("SessionMonitor: error from querySessionStatus:",e.message)}))}),1e3)},e.prototype._callback=function(){var e=this;this._userManager.querySessionStatus().then((function(t){var n=!0;t?t.sub===e._sub?(n=!1,e._checkSessionIFrame.start(t.session_state),t.sid===e._sid?a.Log.debug("SessionMonitor._callback: Same sub still logged in at OP, restarting check session iframe; session_state:",t.session_state):(a.Log.debug("SessionMonitor._callback: Same sub still logged in at OP, session state has changed, restarting check session iframe; session_state:",t.session_state),e._userManager.events._raiseUserSessionChanged())):a.Log.debug("SessionMonitor._callback: Different subject signed into OP:",t.sub):a.Log.debug("SessionMonitor._callback: Subject no longer signed into OP"),n&&(e._sub?(a.Log.debug("SessionMonitor._callback: SessionMonitor._callback; raising signed out event"),e._userManager.events._raiseUserSignedOut()):(a.Log.debug("SessionMonitor._callback: SessionMonitor._callback; raising signed in event"),e._userManager.events._raiseUserSignedIn()))})).catch((function(t){e._sub&&(a.Log.debug("SessionMonitor._callback: Error calling queryCurrentSigninSession; raising signed out event",t.message),e._userManager.events._raiseUserSignedOut())}))},r(e,[{key:"_settings",get:function(){return this._userManager.settings}},{key:"_metadataService",get:function(){return this._userManager.metadataService}},{key:"_client_id",get:function(){return this._settings.client_id}},{key:"_checkSessionInterval",get:function(){return this._settings.checkSessionInterval}},{key:"_stopCheckSessionOnError",get:function(){return this._settings.stopCheckSessionOnError}}]),e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CheckSessionIFrame=void 0;var r=n(0);function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.CheckSessionIFrame=function(){function e(t,n,r,i){var o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4];a(this,e),this._callback=t,this._client_id=n,this._url=r,this._interval=i||2e3,this._stopOnError=o;var s=r.indexOf("/",r.indexOf("//")+2);this._frame_origin=r.substr(0,s),this._frame=window.document.createElement("iframe"),this._frame.style.visibility="hidden",this._frame.style.position="absolute",this._frame.style.display="none",this._frame.width=0,this._frame.height=0,this._frame.src=r}return e.prototype.load=function(){var e=this;return new Promise((function(t){e._frame.onload=function(){t()},window.document.body.appendChild(e._frame),e._boundMessageEvent=e._message.bind(e),window.addEventListener("message",e._boundMessageEvent,!1)}))},e.prototype._message=function(e){e.origin===this._frame_origin&&e.source===this._frame.contentWindow&&("error"===e.data?(r.Log.error("CheckSessionIFrame: error message from check session op iframe"),this._stopOnError&&this.stop()):"changed"===e.data?(r.Log.debug("CheckSessionIFrame: changed message from check session op iframe"),this.stop(),this._callback()):r.Log.debug("CheckSessionIFrame: "+e.data+" message from check session op iframe"))},e.prototype.start=function(e){var t=this;if(this._session_state!==e){r.Log.debug("CheckSessionIFrame.start"),this.stop(),this._session_state=e;var n=function(){t._frame.contentWindow.postMessage(t._client_id+" "+t._session_state,t._frame_origin)};n(),this._timer=window.setInterval(n,this._interval)}},e.prototype.stop=function(){this._session_state=null,this._timer&&(r.Log.debug("CheckSessionIFrame.stop"),window.clearInterval(this._timer),this._timer=null)},e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TokenRevocationClient=void 0;var r=n(0),a=n(2),i=n(1);function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var s="access_token",u="refresh_token";t.TokenRevocationClient=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i.Global.XMLHttpRequest,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:a.MetadataService;if(o(this,e),!t)throw r.Log.error("TokenRevocationClient.ctor: No settings provided"),new Error("No settings provided.");this._settings=t,this._XMLHttpRequestCtor=n,this._metadataService=new s(this._settings)}return e.prototype.revoke=function(e,t){var n=this,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"access_token";if(!e)throw r.Log.error("TokenRevocationClient.revoke: No token provided"),new Error("No token provided.");if(a!==s&&a!=u)throw r.Log.error("TokenRevocationClient.revoke: Invalid token type"),new Error("Invalid token type.");return this._metadataService.getRevocationEndpoint().then((function(i){if(i){r.Log.debug("TokenRevocationClient.revoke: Revoking "+a);var o=n._settings.client_id,s=n._settings.client_secret;return n._revoke(i,o,s,e,a)}if(t)throw r.Log.error("TokenRevocationClient.revoke: Revocation not supported"),new Error("Revocation not supported")}))},e.prototype._revoke=function(e,t,n,a,i){var o=this;return new Promise((function(s,u){var l=new o._XMLHttpRequestCtor;l.open("POST",e),l.onload=function(){r.Log.debug("TokenRevocationClient.revoke: HTTP response received, status",l.status),200===l.status?s():u(Error(l.statusText+" ("+l.status+")"))},l.onerror=function(){r.Log.debug("TokenRevocationClient.revoke: Network Error."),u("Network Error")};var c="client_id="+encodeURIComponent(t);n&&(c+="&client_secret="+encodeURIComponent(n)),c+="&token_type_hint="+encodeURIComponent(i),c+="&token="+encodeURIComponent(a),l.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),l.send(c)}))},e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CordovaPopupWindow=void 0;var r=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:i.MetadataService,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:o.UserInfoService,u=arguments.length>3&&void 0!==arguments[3]?arguments[3]:l.JoseUtil,d=arguments.length>4&&void 0!==arguments[4]?arguments[4]:s.TokenClient;if(c(this,e),!t)throw a.Log.error("ResponseValidator.ctor: No settings passed to ResponseValidator"),new Error("settings");this._settings=t,this._metadataService=new n(this._settings),this._userInfoService=new r(this._settings),this._joseUtil=u,this._tokenClient=new d(this._settings)}return e.prototype.validateSigninResponse=function(e,t){var n=this;return a.Log.debug("ResponseValidator.validateSigninResponse"),this._processSigninParams(e,t).then((function(t){return a.Log.debug("ResponseValidator.validateSigninResponse: state processed"),n._validateTokens(e,t).then((function(t){return a.Log.debug("ResponseValidator.validateSigninResponse: tokens validated"),n._processClaims(e,t).then((function(e){return a.Log.debug("ResponseValidator.validateSigninResponse: claims processed"),e}))}))}))},e.prototype.validateSignoutResponse=function(e,t){return e.id!==t.state?(a.Log.error("ResponseValidator.validateSignoutResponse: State does not match"),Promise.reject(new Error("State does not match"))):(a.Log.debug("ResponseValidator.validateSignoutResponse: state validated"),t.state=e.data,t.error?(a.Log.warn("ResponseValidator.validateSignoutResponse: Response was error",t.error),Promise.reject(new u.ErrorResponse(t))):Promise.resolve(t))},e.prototype._processSigninParams=function(e,t){if(e.id!==t.state)return a.Log.error("ResponseValidator._processSigninParams: State does not match"),Promise.reject(new Error("State does not match"));if(!e.client_id)return a.Log.error("ResponseValidator._processSigninParams: No client_id on state"),Promise.reject(new Error("No client_id on state"));if(!e.authority)return a.Log.error("ResponseValidator._processSigninParams: No authority on state"),Promise.reject(new Error("No authority on state"));if(this._settings.authority){if(this._settings.authority&&this._settings.authority!==e.authority)return a.Log.error("ResponseValidator._processSigninParams: authority mismatch on settings vs. signin state"),Promise.reject(new Error("authority mismatch on settings vs. signin state"))}else this._settings.authority=e.authority;if(this._settings.client_id){if(this._settings.client_id&&this._settings.client_id!==e.client_id)return a.Log.error("ResponseValidator._processSigninParams: client_id mismatch on settings vs. signin state"),Promise.reject(new Error("client_id mismatch on settings vs. signin state"))}else this._settings.client_id=e.client_id;return a.Log.debug("ResponseValidator._processSigninParams: state validated"),t.state=e.data,t.error?(a.Log.warn("ResponseValidator._processSigninParams: Response was error",t.error),Promise.reject(new u.ErrorResponse(t))):e.nonce&&!t.id_token?(a.Log.error("ResponseValidator._processSigninParams: Expecting id_token in response"),Promise.reject(new Error("No id_token in response"))):!e.nonce&&t.id_token?(a.Log.error("ResponseValidator._processSigninParams: Not expecting id_token in response"),Promise.reject(new Error("Unexpected id_token in response"))):e.code_verifier&&!t.code?(a.Log.error("ResponseValidator._processSigninParams: Expecting code in response"),Promise.reject(new Error("No code in response"))):!e.code_verifier&&t.code?(a.Log.error("ResponseValidator._processSigninParams: Not expecting code in response"),Promise.reject(new Error("Unexpected code in response"))):(t.scope||(t.scope=e.scope),Promise.resolve(t))},e.prototype._processClaims=function(e,t){var n=this;if(t.isOpenIdConnect){if(a.Log.debug("ResponseValidator._processClaims: response is OIDC, processing claims"),t.profile=this._filterProtocolClaims(t.profile),!0!==e.skipUserInfo&&this._settings.loadUserInfo&&t.access_token)return a.Log.debug("ResponseValidator._processClaims: loading user info"),this._userInfoService.getClaims(t.access_token).then((function(e){return a.Log.debug("ResponseValidator._processClaims: user info claims received from user info endpoint"),e.sub!==t.profile.sub?(a.Log.error("ResponseValidator._processClaims: sub from user info endpoint does not match sub in id_token"),Promise.reject(new Error("sub from user info endpoint does not match sub in id_token"))):(t.profile=n._mergeClaims(t.profile,e),a.Log.debug("ResponseValidator._processClaims: user info claims received, updated profile:",t.profile),t)}));a.Log.debug("ResponseValidator._processClaims: not loading user info")}else a.Log.debug("ResponseValidator._processClaims: response is not OIDC, not processing claims");return Promise.resolve(t)},e.prototype._mergeClaims=function(e,t){var n=Object.assign({},e);for(var a in t){var i=t[a];Array.isArray(i)||(i=[i]);for(var o=0;o1)return a.Log.error("ResponseValidator._validateIdToken: No kid found in id_token and more than one key found in metadata"),Promise.reject(new Error("No kid found in id_token and more than one key found in metadata"));i=n[0]}return Promise.resolve(i)}))},e.prototype._getSigningKeyForJwtWithSingleRetry=function(e){var t=this;return this._getSigningKeyForJwt(e).then((function(n){return n?Promise.resolve(n):(t._metadataService.resetSigningKeys(),t._getSigningKeyForJwt(e))}))},e.prototype._validateIdToken=function(e,t){var n=this;if(!e.nonce)return a.Log.error("ResponseValidator._validateIdToken: No nonce on state"),Promise.reject(new Error("No nonce on state"));var r=this._joseUtil.parseJwt(t.id_token);return r&&r.header&&r.payload?e.nonce!==r.payload.nonce?(a.Log.error("ResponseValidator._validateIdToken: Invalid nonce in id_token"),Promise.reject(new Error("Invalid nonce in id_token"))):this._metadataService.getIssuer().then((function(i){return a.Log.debug("ResponseValidator._validateIdToken: Received issuer"),n._getSigningKeyForJwtWithSingleRetry(r).then((function(o){if(!o)return a.Log.error("ResponseValidator._validateIdToken: No key matching kid or alg found in signing keys"),Promise.reject(new Error("No key matching kid or alg found in signing keys"));var s=e.client_id,u=n._settings.clockSkew;return a.Log.debug("ResponseValidator._validateIdToken: Validaing JWT; using clock skew (in seconds) of: ",u),n._joseUtil.validateJwt(t.id_token,o,i,s,u).then((function(){return a.Log.debug("ResponseValidator._validateIdToken: JWT validation successful"),r.payload.sub?(t.profile=r.payload,t):(a.Log.error("ResponseValidator._validateIdToken: No sub present in id_token"),Promise.reject(new Error("No sub present in id_token")))}))}))})):(a.Log.error("ResponseValidator._validateIdToken: Failed to parse id_token",r),Promise.reject(new Error("Failed to parse id_token")))},e.prototype._filterByAlg=function(e,t){var n=null;if(t.startsWith("RS"))n="RSA";else if(t.startsWith("PS"))n="PS";else{if(!t.startsWith("ES"))return a.Log.debug("ResponseValidator._filterByAlg: alg not supported: ",t),[];n="EC"}return a.Log.debug("ResponseValidator._filterByAlg: Looking for keys that match kty: ",n),e=e.filter((function(e){return e.kty===n})),a.Log.debug("ResponseValidator._filterByAlg: Number of keys that match kty: ",n,e.length),e},e.prototype._validateAccessToken=function(e){if(!e.profile)return a.Log.error("ResponseValidator._validateAccessToken: No profile loaded from id_token"),Promise.reject(new Error("No profile loaded from id_token"));if(!e.profile.at_hash)return a.Log.error("ResponseValidator._validateAccessToken: No at_hash in id_token"),Promise.reject(new Error("No at_hash in id_token"));if(!e.id_token)return a.Log.error("ResponseValidator._validateAccessToken: No id_token"),Promise.reject(new Error("No id_token"));var t=this._joseUtil.parseJwt(e.id_token);if(!t||!t.header)return a.Log.error("ResponseValidator._validateAccessToken: Failed to parse id_token",t),Promise.reject(new Error("Failed to parse id_token"));var n=t.header.alg;if(!n||5!==n.length)return a.Log.error("ResponseValidator._validateAccessToken: Unsupported alg:",n),Promise.reject(new Error("Unsupported alg: "+n));var r=n.substr(2,3);if(!r)return a.Log.error("ResponseValidator._validateAccessToken: Unsupported alg:",n,r),Promise.reject(new Error("Unsupported alg: "+n));if(256!==(r=parseInt(r))&&384!==r&&512!==r)return a.Log.error("ResponseValidator._validateAccessToken: Unsupported alg:",n,r),Promise.reject(new Error("Unsupported alg: "+n));var i="sha"+r,o=this._joseUtil.hashString(e.access_token,i);if(!o)return a.Log.error("ResponseValidator._validateAccessToken: access_token hash failed:",i),Promise.reject(new Error("Failed to validate at_hash"));var s=o.substr(0,o.length/2),u=this._joseUtil.hexToBase64Url(s);return u!==e.profile.at_hash?(a.Log.error("ResponseValidator._validateAccessToken: Failed to validate at_hash",u,e.profile.at_hash),Promise.reject(new Error("Failed to validate at_hash"))):(a.Log.debug("ResponseValidator._validateAccessToken: success"),Promise.resolve(e))},e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.UserInfoService=void 0;var r=n(7),a=n(2),i=n(0),o=n(4);function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.UserInfoService=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:r.JsonService,u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:a.MetadataService,l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:o.JoseUtil;if(s(this,e),!t)throw i.Log.error("UserInfoService.ctor: No settings passed"),new Error("settings");this._settings=t,this._jsonService=new n(void 0,void 0,this._getClaimsFromJwt.bind(this)),this._metadataService=new u(this._settings),this._joseUtil=l}return e.prototype.getClaims=function(e){var t=this;return e?this._metadataService.getUserInfoEndpoint().then((function(n){return i.Log.debug("UserInfoService.getClaims: received userinfo url",n),t._jsonService.getJson(n,e).then((function(e){return i.Log.debug("UserInfoService.getClaims: claims received",e),e}))})):(i.Log.error("UserInfoService.getClaims: No token passed"),Promise.reject(new Error("A token is required")))},e.prototype._getClaimsFromJwt=function e(t){var n=this;try{var r=this._joseUtil.parseJwt(t.responseText);if(!r||!r.header||!r.payload)return i.Log.error("UserInfoService._getClaimsFromJwt: Failed to parse JWT",r),Promise.reject(new Error("Failed to parse id_token"));var a=r.header.kid,o=void 0;switch(this._settings.userInfoJwtIssuer){case"OP":o=this._metadataService.getIssuer();break;case"ANY":o=Promise.resolve(r.payload.iss);break;default:o=Promise.resolve(this._settings.userInfoJwtIssuer)}return o.then((function(e){return i.Log.debug("UserInfoService._getClaimsFromJwt: Received issuer:"+e),n._metadataService.getSigningKeys().then((function(o){if(!o)return i.Log.error("UserInfoService._getClaimsFromJwt: No signing keys from metadata"),Promise.reject(new Error("No signing keys from metadata"));i.Log.debug("UserInfoService._getClaimsFromJwt: Received signing keys");var s=void 0;if(a)s=o.filter((function(e){return e.kid===a}))[0];else{if((o=n._filterByAlg(o,r.header.alg)).length>1)return i.Log.error("UserInfoService._getClaimsFromJwt: No kid found in id_token and more than one key found in metadata"),Promise.reject(new Error("No kid found in id_token and more than one key found in metadata"));s=o[0]}if(!s)return i.Log.error("UserInfoService._getClaimsFromJwt: No key matching kid or alg found in signing keys"),Promise.reject(new Error("No key matching kid or alg found in signing keys"));var u=n._settings.client_id,l=n._settings.clockSkew;return i.Log.debug("UserInfoService._getClaimsFromJwt: Validaing JWT; using clock skew (in seconds) of: ",l),n._joseUtil.validateJwt(t.responseText,s,e,u,l,void 0,!0).then((function(){return i.Log.debug("UserInfoService._getClaimsFromJwt: JWT validation successful"),r.payload}))}))}))}catch(e){return i.Log.error("UserInfoService._getClaimsFromJwt: Error parsing JWT response",e.message),void reject(e)}},e.prototype._filterByAlg=function(e,t){var n=null;if(t.startsWith("RS"))n="RSA";else if(t.startsWith("PS"))n="PS";else{if(!t.startsWith("ES"))return i.Log.debug("UserInfoService._filterByAlg: alg not supported: ",t),[];n="EC"}return i.Log.debug("UserInfoService._filterByAlg: Looking for keys that match kty: ",n),e=e.filter((function(e){return e.kty===n})),i.Log.debug("UserInfoService._filterByAlg: Number of keys that match kty: ",n,e.length),e},e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AllowedSigningAlgs=t.b64tohex=t.hextob64u=t.crypto=t.X509=t.KeyUtil=t.jws=void 0;var r=n(27);t.jws=r.jws,t.KeyUtil=r.KEYUTIL,t.X509=r.X509,t.crypto=r.crypto,t.hextob64u=r.hextob64u,t.b64tohex=r.b64tohex,t.AllowedSigningAlgs=["RS256","RS384","RS512","PS256","PS384","PS512","ES256","ES384","ES512"]},function(e,t,n){"use strict";(function(e){Object.defineProperty(t,"__esModule",{value:!0});var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r={userAgent:!1},a={};if(void 0===i)var i={};i.lang={extend:function(e,t,n){if(!t||!e)throw new Error("YAHOO.lang.extend failed, please check that all dependencies are included.");var a=function(){};if(a.prototype=t.prototype,e.prototype=new a,e.prototype.constructor=e,e.superclass=t.prototype,t.prototype.constructor==Object.prototype.constructor&&(t.prototype.constructor=t),n){var i;for(i in n)e.prototype[i]=n[i];var o=function(){},s=["toString","valueOf"];try{/MSIE/.test(r.userAgent)&&(o=function(e,t){for(i=0;i>>2]>>>24-i%4*8&255;t[r+i>>>2]|=o<<24-(r+i)%4*8}else for(i=0;i>>2]=n[i>>>2];return this.sigBytes+=a,this},clamp:function(){var e=this.words,t=this.sigBytes;e[t>>>2]&=4294967295<<32-t%4*8,e.length=o.ceil(t/4)},clone:function(){var e=l.clone.call(this);return e.words=this.words.slice(0),e},random:function(e){for(var t=[],n=0;n>>2]>>>24-a%4*8&255;r.push((i>>>4).toString(16)),r.push((15&i).toString(16))}return r.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>3]|=parseInt(e.substr(r,2),16)<<24-r%8*4;return new c.init(n,t/2)}},v=d.Latin1={stringify:function(e){for(var t=e.words,n=e.sigBytes,r=[],a=0;a>>2]>>>24-a%4*8&255;r.push(String.fromCharCode(i))}return r.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>2]|=(255&e.charCodeAt(r))<<24-r%4*8;return new c.init(n,t)}},m=d.Utf8={stringify:function(e){try{return decodeURIComponent(escape(v.stringify(e)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(e){return v.parse(unescape(encodeURIComponent(e)))}},p=u.BufferedBlockAlgorithm=l.extend({reset:function(){this._data=new c.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=m.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(e){var t=this._data,n=t.words,r=t.sigBytes,a=this.blockSize,i=r/(4*a),s=(i=e?o.ceil(i):o.max((0|i)-this._minBufferSize,0))*a,u=o.min(4*s,r);if(s){for(var l=0;l>>2]>>>24-a%4*8&255)<<16|(t[a+1>>>2]>>>24-(a+1)%4*8&255)<<8|t[a+2>>>2]>>>24-(a+2)%4*8&255,o=0;4>o&&a+.75*o>>6*(3-o)&63));if(t=r.charAt(64))for(;e.length%4;)e.push(t);return e.join("")},parse:function(e){var n=e.length,r=this._map;(a=r.charAt(64))&&-1!=(a=e.indexOf(a))&&(n=a);for(var a=[],i=0,o=0;o>>6-o%4*2;a[i>>>2]|=(s|u)<<24-i%4*8,i++}return t.create(a,i)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),function(e){for(var t=g,n=(a=t.lib).WordArray,r=a.Hasher,a=t.algo,i=[],o=[],s=function(e){return 4294967296*(e-(0|e))|0},u=2,l=0;64>l;){var c;e:{c=u;for(var d=e.sqrt(c),f=2;f<=d;f++)if(!(c%f)){c=!1;break e}c=!0}c&&(8>l&&(i[l]=s(e.pow(u,.5))),o[l]=s(e.pow(u,1/3)),l++),u++}var v=[];a=a.SHA256=r.extend({_doReset:function(){this._hash=new n.init(i.slice(0))},_doProcessBlock:function(e,t){for(var n=this._hash.words,r=n[0],a=n[1],i=n[2],s=n[3],u=n[4],l=n[5],c=n[6],d=n[7],f=0;64>f;f++){if(16>f)v[f]=0|e[t+f];else{var m=v[f-15],p=v[f-2];v[f]=((m<<25|m>>>7)^(m<<14|m>>>18)^m>>>3)+v[f-7]+((p<<15|p>>>17)^(p<<13|p>>>19)^p>>>10)+v[f-16]}m=d+((u<<26|u>>>6)^(u<<21|u>>>11)^(u<<7|u>>>25))+(u&l^~u&c)+o[f]+v[f],p=((r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22))+(r&a^r&i^a&i),d=c,c=l,l=u,u=s+m|0,s=i,i=a,a=r,r=m+p|0}n[0]=n[0]+r|0,n[1]=n[1]+a|0,n[2]=n[2]+i|0,n[3]=n[3]+s|0,n[4]=n[4]+u|0,n[5]=n[5]+l|0,n[6]=n[6]+c|0,n[7]=n[7]+d|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,a=8*t.sigBytes;return n[a>>>5]|=128<<24-a%32,n[14+(a+64>>>9<<4)]=e.floor(r/4294967296),n[15+(a+64>>>9<<4)]=r,t.sigBytes=4*n.length,this._process(),this._hash},clone:function(){var e=r.clone.call(this);return e._hash=this._hash.clone(),e}}),t.SHA256=r._createHelper(a),t.HmacSHA256=r._createHmacHelper(a)}(Math),function(){function e(){return r.create.apply(r,arguments)}for(var t=g,n=t.lib.Hasher,r=(i=t.x64).Word,a=i.WordArray,i=t.algo,o=[e(1116352408,3609767458),e(1899447441,602891725),e(3049323471,3964484399),e(3921009573,2173295548),e(961987163,4081628472),e(1508970993,3053834265),e(2453635748,2937671579),e(2870763221,3664609560),e(3624381080,2734883394),e(310598401,1164996542),e(607225278,1323610764),e(1426881987,3590304994),e(1925078388,4068182383),e(2162078206,991336113),e(2614888103,633803317),e(3248222580,3479774868),e(3835390401,2666613458),e(4022224774,944711139),e(264347078,2341262773),e(604807628,2007800933),e(770255983,1495990901),e(1249150122,1856431235),e(1555081692,3175218132),e(1996064986,2198950837),e(2554220882,3999719339),e(2821834349,766784016),e(2952996808,2566594879),e(3210313671,3203337956),e(3336571891,1034457026),e(3584528711,2466948901),e(113926993,3758326383),e(338241895,168717936),e(666307205,1188179964),e(773529912,1546045734),e(1294757372,1522805485),e(1396182291,2643833823),e(1695183700,2343527390),e(1986661051,1014477480),e(2177026350,1206759142),e(2456956037,344077627),e(2730485921,1290863460),e(2820302411,3158454273),e(3259730800,3505952657),e(3345764771,106217008),e(3516065817,3606008344),e(3600352804,1432725776),e(4094571909,1467031594),e(275423344,851169720),e(430227734,3100823752),e(506948616,1363258195),e(659060556,3750685593),e(883997877,3785050280),e(958139571,3318307427),e(1322822218,3812723403),e(1537002063,2003034995),e(1747873779,3602036899),e(1955562222,1575990012),e(2024104815,1125592928),e(2227730452,2716904306),e(2361852424,442776044),e(2428436474,593698344),e(2756734187,3733110249),e(3204031479,2999351573),e(3329325298,3815920427),e(3391569614,3928383900),e(3515267271,566280711),e(3940187606,3454069534),e(4118630271,4000239992),e(116418474,1914138554),e(174292421,2731055270),e(289380356,3203993006),e(460393269,320620315),e(685471733,587496836),e(852142971,1086792851),e(1017036298,365543100),e(1126000580,2618297676),e(1288033470,3409855158),e(1501505948,4234509866),e(1607167915,987167468),e(1816402316,1246189591)],s=[],u=0;80>u;u++)s[u]=e();i=i.SHA512=n.extend({_doReset:function(){this._hash=new a.init([new r.init(1779033703,4089235720),new r.init(3144134277,2227873595),new r.init(1013904242,4271175723),new r.init(2773480762,1595750129),new r.init(1359893119,2917565137),new r.init(2600822924,725511199),new r.init(528734635,4215389547),new r.init(1541459225,327033209)])},_doProcessBlock:function(e,t){for(var n=(d=this._hash.words)[0],r=d[1],a=d[2],i=d[3],u=d[4],l=d[5],c=d[6],d=d[7],f=n.high,v=n.low,m=r.high,p=r.low,h=a.high,g=a.low,A=i.high,y=i.low,S=u.high,b=u.low,w=l.high,I=l.low,E=c.high,C=c.low,D=d.high,_=d.low,M=f,O=v,P=m,T=p,x=h,R=g,L=A,k=y,N=S,F=b,B=w,U=I,V=E,j=C,G=D,H=_,Q=0;80>Q;Q++){var q=s[Q];if(16>Q)var z=q.high=0|e[t+2*Q],W=q.low=0|e[t+2*Q+1];else{z=((W=(z=s[Q-15]).high)>>>1|(Y=z.low)<<31)^(W>>>8|Y<<24)^W>>>7;var Y=(Y>>>1|W<<31)^(Y>>>8|W<<24)^(Y>>>7|W<<25),Z=((W=(Z=s[Q-2]).high)>>>19|(K=Z.low)<<13)^(W<<3|K>>>29)^W>>>6,K=(K>>>19|W<<13)^(K<<3|W>>>29)^(K>>>6|W<<26),X=(W=s[Q-7]).high,$=(J=s[Q-16]).high,J=J.low;z=(z=(z=z+X+((W=Y+W.low)>>>0>>0?1:0))+Z+((W+=K)>>>0>>0?1:0))+$+((W+=J)>>>0>>0?1:0),q.high=z,q.low=W}X=N&B^~N&V,J=F&U^~F&j,q=M&P^M&x^P&x;var ee=O&T^O&R^T&R,te=(Y=(M>>>28|O<<4)^(M<<30|O>>>2)^(M<<25|O>>>7),Z=(O>>>28|M<<4)^(O<<30|M>>>2)^(O<<25|M>>>7),(K=o[Q]).high),ne=K.low;$=G+((N>>>14|F<<18)^(N>>>18|F<<14)^(N<<23|F>>>9))+((K=H+((F>>>14|N<<18)^(F>>>18|N<<14)^(F<<23|N>>>9)))>>>0>>0?1:0),G=V,H=j,V=B,j=U,B=N,U=F,N=L+($=($=($=$+X+((K+=J)>>>0>>0?1:0))+te+((K+=ne)>>>0>>0?1:0))+z+((K+=W)>>>0>>0?1:0))+((F=k+K|0)>>>0>>0?1:0)|0,L=x,k=R,x=P,R=T,P=M,T=O,M=$+(q=Y+q+((W=Z+ee)>>>0>>0?1:0))+((O=K+W|0)>>>0>>0?1:0)|0}v=n.low=v+O,n.high=f+M+(v>>>0>>0?1:0),p=r.low=p+T,r.high=m+P+(p>>>0>>0?1:0),g=a.low=g+R,a.high=h+x+(g>>>0>>0?1:0),y=i.low=y+k,i.high=A+L+(y>>>0>>0?1:0),b=u.low=b+F,u.high=S+N+(b>>>0>>0?1:0),I=l.low=I+U,l.high=w+B+(I>>>0>>0?1:0),C=c.low=C+j,c.high=E+V+(C>>>0>>0?1:0),_=d.low=_+H,d.high=D+G+(_>>>0>>0?1:0)},_doFinalize:function(){var e=this._data,t=e.words,n=8*this._nDataBytes,r=8*e.sigBytes;return t[r>>>5]|=128<<24-r%32,t[30+(r+128>>>10<<5)]=Math.floor(n/4294967296),t[31+(r+128>>>10<<5)]=n,e.sigBytes=4*t.length,this._process(),this._hash.toX32()},clone:function(){var e=n.clone.call(this);return e._hash=this._hash.clone(),e},blockSize:32}),t.SHA512=n._createHelper(i),t.HmacSHA512=n._createHmacHelper(i)}(),function(){var e=g,t=(a=e.x64).Word,n=a.WordArray,r=(a=e.algo).SHA512,a=a.SHA384=r.extend({_doReset:function(){this._hash=new n.init([new t.init(3418070365,3238371032),new t.init(1654270250,914150663),new t.init(2438529370,812702999),new t.init(355462360,4144912697),new t.init(1731405415,4290775857),new t.init(2394180231,1750603025),new t.init(3675008525,1694076839),new t.init(1203062813,3204075428)])},_doFinalize:function(){var e=r._doFinalize.call(this);return e.sigBytes-=16,e}});e.SHA384=r._createHelper(a),e.HmacSHA384=r._createHmacHelper(a)}();var A,y="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function S(e){var t,n,r="";for(t=0;t+3<=e.length;t+=3)n=parseInt(e.substring(t,t+3),16),r+=y.charAt(n>>6)+y.charAt(63&n);for(t+1==e.length?(n=parseInt(e.substring(t,t+1),16),r+=y.charAt(n<<2)):t+2==e.length&&(n=parseInt(e.substring(t,t+2),16),r+=y.charAt(n>>2)+y.charAt((3&n)<<4));(3&r.length)>0;)r+="=";return r}function b(e){var t,n,r,a="",i=0;for(t=0;t>2),n=3&r,i=1):1==i?(a+=M(n<<2|r>>4),n=15&r,i=2):2==i?(a+=M(n),a+=M(r>>2),n=3&r,i=3):(a+=M(n<<2|r>>4),a+=M(15&r),i=0));return 1==i&&(a+=M(n<<2)),a}function w(e){var t,n=b(e),r=new Array;for(t=0;2*t>15;--i>=0;){var u=32767&this[e],l=this[e++]>>15,c=s*u+l*o;a=((u=o*u+((32767&c)<<15)+n[r]+(1073741823&a))>>>30)+(c>>>15)+s*l+(a>>>30),n[r++]=1073741823&u}return a},A=30):"Netscape"!=r.appName?(I.prototype.am=function(e,t,n,r,a,i){for(;--i>=0;){var o=t*this[e++]+n[r]+a;a=Math.floor(o/67108864),n[r++]=67108863&o}return a},A=26):(I.prototype.am=function(e,t,n,r,a,i){for(var o=16383&t,s=t>>14;--i>=0;){var u=16383&this[e],l=this[e++]>>14,c=s*u+l*o;a=((u=o*u+((16383&c)<<14)+n[r]+a)>>28)+(c>>14)+s*l,n[r++]=268435455&u}return a},A=28),I.prototype.DB=A,I.prototype.DM=(1<>>16)&&(e=t,n+=16),0!=(t=e>>8)&&(e=t,n+=8),0!=(t=e>>4)&&(e=t,n+=4),0!=(t=e>>2)&&(e=t,n+=2),0!=(t=e>>1)&&(e=t,n+=1),n}function x(e){this.m=e}function R(e){this.m=e,this.mp=e.invDigit(),this.mpl=32767&this.mp,this.mph=this.mp>>15,this.um=(1<>=16,t+=16),0==(255&e)&&(e>>=8,t+=8),0==(15&e)&&(e>>=4,t+=4),0==(3&e)&&(e>>=2,t+=2),0==(1&e)&&++t,t}function U(e){for(var t=0;0!=e;)e&=e-1,++t;return t}function V(){}function j(e){return e}function G(e){this.r2=E(),this.q3=E(),I.ONE.dlShiftTo(2*e.t,this.r2),this.mu=this.r2.divide(e),this.m=e}x.prototype.convert=function(e){return e.s<0||e.compareTo(this.m)>=0?e.mod(this.m):e},x.prototype.revert=function(e){return e},x.prototype.reduce=function(e){e.divRemTo(this.m,null,e)},x.prototype.mulTo=function(e,t,n){e.multiplyTo(t,n),this.reduce(n)},x.prototype.sqrTo=function(e,t){e.squareTo(t),this.reduce(t)},R.prototype.convert=function(e){var t=E();return e.abs().dlShiftTo(this.m.t,t),t.divRemTo(this.m,null,t),e.s<0&&t.compareTo(I.ZERO)>0&&this.m.subTo(t,t),t},R.prototype.revert=function(e){var t=E();return e.copyTo(t),this.reduce(t),t},R.prototype.reduce=function(e){for(;e.t<=this.mt2;)e[e.t++]=0;for(var t=0;t>15)*this.mpl&this.um)<<15)&e.DM;for(e[n=t+this.m.t]+=this.m.am(0,r,e,t,0,this.m.t);e[n]>=e.DV;)e[n]-=e.DV,e[++n]++}e.clamp(),e.drShiftTo(this.m.t,e),e.compareTo(this.m)>=0&&e.subTo(this.m,e)},R.prototype.mulTo=function(e,t,n){e.multiplyTo(t,n),this.reduce(n)},R.prototype.sqrTo=function(e,t){e.squareTo(t),this.reduce(t)},I.prototype.copyTo=function(e){for(var t=this.t-1;t>=0;--t)e[t]=this[t];e.t=this.t,e.s=this.s},I.prototype.fromInt=function(e){this.t=1,this.s=e<0?-1:0,e>0?this[0]=e:e<-1?this[0]=e+this.DV:this.t=0},I.prototype.fromString=function(e,t){var n;if(16==t)n=4;else if(8==t)n=3;else if(256==t)n=8;else if(2==t)n=1;else if(32==t)n=5;else{if(4!=t)return void this.fromRadix(e,t);n=2}this.t=0,this.s=0;for(var r=e.length,a=!1,i=0;--r>=0;){var o=8==n?255&e[r]:O(e,r);o<0?"-"==e.charAt(r)&&(a=!0):(a=!1,0==i?this[this.t++]=o:i+n>this.DB?(this[this.t-1]|=(o&(1<>this.DB-i):this[this.t-1]|=o<=this.DB&&(i-=this.DB))}8==n&&0!=(128&e[0])&&(this.s=-1,i>0&&(this[this.t-1]|=(1<0&&this[this.t-1]==e;)--this.t},I.prototype.dlShiftTo=function(e,t){var n;for(n=this.t-1;n>=0;--n)t[n+e]=this[n];for(n=e-1;n>=0;--n)t[n]=0;t.t=this.t+e,t.s=this.s},I.prototype.drShiftTo=function(e,t){for(var n=e;n=0;--n)t[n+o+1]=this[n]>>a|s,s=(this[n]&i)<=0;--n)t[n]=0;t[o]=s,t.t=this.t+o+1,t.s=this.s,t.clamp()},I.prototype.rShiftTo=function(e,t){t.s=this.s;var n=Math.floor(e/this.DB);if(n>=this.t)t.t=0;else{var r=e%this.DB,a=this.DB-r,i=(1<>r;for(var o=n+1;o>r;r>0&&(t[this.t-n-1]|=(this.s&i)<>=this.DB;if(e.t>=this.DB;r+=this.s}else{for(r+=this.s;n>=this.DB;r-=e.s}t.s=r<0?-1:0,r<-1?t[n++]=this.DV+r:r>0&&(t[n++]=r),t.t=n,t.clamp()},I.prototype.multiplyTo=function(e,t){var n=this.abs(),r=e.abs(),a=n.t;for(t.t=a+r.t;--a>=0;)t[a]=0;for(a=0;a=0;)e[n]=0;for(n=0;n=t.DV&&(e[n+t.t]-=t.DV,e[n+t.t+1]=1)}e.t>0&&(e[e.t-1]+=t.am(n,t[n],e,2*n,0,1)),e.s=0,e.clamp()},I.prototype.divRemTo=function(e,t,n){var r=e.abs();if(!(r.t<=0)){var a=this.abs();if(a.t0?(r.lShiftTo(u,i),a.lShiftTo(u,n)):(r.copyTo(i),a.copyTo(n));var l=i.t,c=i[l-1];if(0!=c){var d=c*(1<1?i[l-2]>>this.F2:0),f=this.FV/d,v=(1<=0&&(n[n.t++]=1,n.subTo(g,n)),I.ONE.dlShiftTo(l,g),g.subTo(i,i);i.t=0;){var A=n[--p]==c?this.DM:Math.floor(n[p]*f+(n[p-1]+m)*v);if((n[p]+=i.am(0,A,n,h,0,l))0&&n.rShiftTo(u,n),o<0&&I.ZERO.subTo(n,n)}}},I.prototype.invDigit=function(){if(this.t<1)return 0;var e=this[0];if(0==(1&e))return 0;var t=3&e;return(t=(t=(t=(t=t*(2-(15&e)*t)&15)*(2-(255&e)*t)&255)*(2-((65535&e)*t&65535))&65535)*(2-e*t%this.DV)%this.DV)>0?this.DV-t:-t},I.prototype.isEven=function(){return 0==(this.t>0?1&this[0]:this.s)},I.prototype.exp=function(e,t){if(e>4294967295||e<1)return I.ONE;var n=E(),r=E(),a=t.convert(this),i=T(e)-1;for(a.copyTo(n);--i>=0;)if(t.sqrTo(n,r),(e&1<0)t.mulTo(r,a,n);else{var o=n;n=r,r=o}return t.revert(n)},I.prototype.toString=function(e){if(this.s<0)return"-"+this.negate().toString(e);var t;if(16==e)t=4;else if(8==e)t=3;else if(2==e)t=1;else if(32==e)t=5;else{if(4!=e)return this.toRadix(e);t=2}var n,r=(1<0)for(s>s)>0&&(a=!0,i=M(n));o>=0;)s>(s+=this.DB-t)):(n=this[o]>>(s-=t)&r,s<=0&&(s+=this.DB,--o)),n>0&&(a=!0),a&&(i+=M(n));return a?i:"0"},I.prototype.negate=function(){var e=E();return I.ZERO.subTo(this,e),e},I.prototype.abs=function(){return this.s<0?this.negate():this},I.prototype.compareTo=function(e){var t=this.s-e.s;if(0!=t)return t;var n=this.t;if(0!=(t=n-e.t))return this.s<0?-t:t;for(;--n>=0;)if(0!=(t=this[n]-e[n]))return t;return 0},I.prototype.bitLength=function(){return this.t<=0?0:this.DB*(this.t-1)+T(this[this.t-1]^this.s&this.DM)},I.prototype.mod=function(e){var t=E();return this.abs().divRemTo(e,null,t),this.s<0&&t.compareTo(I.ZERO)>0&&e.subTo(t,t),t},I.prototype.modPowInt=function(e,t){var n;return n=e<256||t.isEven()?new x(t):new R(t),this.exp(e,n)},I.ZERO=P(0),I.ONE=P(1),V.prototype.convert=j,V.prototype.revert=j,V.prototype.mulTo=function(e,t,n){e.multiplyTo(t,n)},V.prototype.sqrTo=function(e,t){e.squareTo(t)},G.prototype.convert=function(e){if(e.s<0||e.t>2*this.m.t)return e.mod(this.m);if(e.compareTo(this.m)<0)return e;var t=E();return e.copyTo(t),this.reduce(t),t},G.prototype.revert=function(e){return e},G.prototype.reduce=function(e){for(e.drShiftTo(this.m.t-1,this.r2),e.t>this.m.t+1&&(e.t=this.m.t+1,e.clamp()),this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3),this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);e.compareTo(this.r2)<0;)e.dAddOffset(1,this.m.t+1);for(e.subTo(this.r2,e);e.compareTo(this.m)>=0;)e.subTo(this.m,e)},G.prototype.mulTo=function(e,t,n){e.multiplyTo(t,n),this.reduce(n)},G.prototype.sqrTo=function(e,t){e.squareTo(t),this.reduce(t)};var H,Q,q,z=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997],W=(1<<26)/z[z.length-1];function Y(){this.i=0,this.j=0,this.S=new Array}function Z(){!function(e){Q[q++]^=255&e,Q[q++]^=e>>8&255,Q[q++]^=e>>16&255,Q[q++]^=e>>24&255,q>=256&&(q-=256)}((new Date).getTime())}if(I.prototype.chunkSize=function(e){return Math.floor(Math.LN2*this.DB/Math.log(e))},I.prototype.toRadix=function(e){if(null==e&&(e=10),0==this.signum()||e<2||e>36)return"0";var t=this.chunkSize(e),n=Math.pow(e,t),r=P(n),a=E(),i=E(),o="";for(this.divRemTo(r,a,i);a.signum()>0;)o=(n+i.intValue()).toString(e).substr(1)+o,a.divRemTo(r,a,i);return i.intValue().toString(e)+o},I.prototype.fromRadix=function(e,t){this.fromInt(0),null==t&&(t=10);for(var n=this.chunkSize(t),r=Math.pow(t,n),a=!1,i=0,o=0,s=0;s=n&&(this.dMultiply(r),this.dAddOffset(o,0),i=0,o=0))}i>0&&(this.dMultiply(Math.pow(t,i)),this.dAddOffset(o,0)),a&&I.ZERO.subTo(this,this)},I.prototype.fromNumber=function(e,t,n){if("number"==typeof t)if(e<2)this.fromInt(1);else for(this.fromNumber(e,n),this.testBit(e-1)||this.bitwiseTo(I.ONE.shiftLeft(e-1),k,this),this.isEven()&&this.dAddOffset(1,0);!this.isProbablePrime(t);)this.dAddOffset(2,0),this.bitLength()>e&&this.subTo(I.ONE.shiftLeft(e-1),this);else{var r=new Array,a=7&e;r.length=1+(e>>3),t.nextBytes(r),a>0?r[0]&=(1<>=this.DB;if(e.t>=this.DB;r+=this.s}else{for(r+=this.s;n>=this.DB;r+=e.s}t.s=r<0?-1:0,r>0?t[n++]=r:r<-1&&(t[n++]=this.DV+r),t.t=n,t.clamp()},I.prototype.dMultiply=function(e){this[this.t]=this.am(0,e-1,this,0,0,this.t),++this.t,this.clamp()},I.prototype.dAddOffset=function(e,t){if(0!=e){for(;this.t<=t;)this[this.t++]=0;for(this[t]+=e;this[t]>=this.DV;)this[t]-=this.DV,++t>=this.t&&(this[this.t++]=0),++this[t]}},I.prototype.multiplyLowerTo=function(e,t,n){var r,a=Math.min(this.t+e.t,t);for(n.s=0,n.t=a;a>0;)n[--a]=0;for(r=n.t-this.t;a=0;)n[r]=0;for(r=Math.max(t-this.t,0);r0)if(0==t)n=this[0]%e;else for(var r=this.t-1;r>=0;--r)n=(t*n+this[r])%e;return n},I.prototype.millerRabin=function(e){var t=this.subtract(I.ONE),n=t.getLowestSetBit();if(n<=0)return!1;var r=t.shiftRight(n);(e=e+1>>1)>z.length&&(e=z.length);for(var a=E(),i=0;i>24},I.prototype.shortValue=function(){return 0==this.t?this.s:this[0]<<16>>16},I.prototype.signum=function(){return this.s<0?-1:this.t<=0||1==this.t&&this[0]<=0?0:1},I.prototype.toByteArray=function(){var e=this.t,t=new Array;t[0]=this.s;var n,r=this.DB-e*this.DB%8,a=0;if(e-- >0)for(r>r)!=(this.s&this.DM)>>r&&(t[a++]=n|this.s<=0;)r<8?(n=(this[e]&(1<>(r+=this.DB-8)):(n=this[e]>>(r-=8)&255,r<=0&&(r+=this.DB,--e)),0!=(128&n)&&(n|=-256),0==a&&(128&this.s)!=(128&n)&&++a,(a>0||n!=this.s)&&(t[a++]=n);return t},I.prototype.equals=function(e){return 0==this.compareTo(e)},I.prototype.min=function(e){return this.compareTo(e)<0?this:e},I.prototype.max=function(e){return this.compareTo(e)>0?this:e},I.prototype.and=function(e){var t=E();return this.bitwiseTo(e,L,t),t},I.prototype.or=function(e){var t=E();return this.bitwiseTo(e,k,t),t},I.prototype.xor=function(e){var t=E();return this.bitwiseTo(e,N,t),t},I.prototype.andNot=function(e){var t=E();return this.bitwiseTo(e,F,t),t},I.prototype.not=function(){for(var e=E(),t=0;t=this.t?0!=this.s:0!=(this[t]&1<1){var c=E();for(r.sqrTo(o[1],c);s<=l;)o[s]=E(),r.mulTo(c,o[s-2],o[s]),s+=2}var d,f,v=e.t-1,m=!0,p=E();for(a=T(e[v])-1;v>=0;){for(a>=u?d=e[v]>>a-u&l:(d=(e[v]&(1<0&&(d|=e[v-1]>>this.DB+a-u)),s=n;0==(1&d);)d>>=1,--s;if((a-=s)<0&&(a+=this.DB,--v),m)o[d].copyTo(i),m=!1;else{for(;s>1;)r.sqrTo(i,p),r.sqrTo(p,i),s-=2;s>0?r.sqrTo(i,p):(f=i,i=p,p=f),r.mulTo(p,o[d],i)}for(;v>=0&&0==(e[v]&1<=0?(n.subTo(r,n),t&&a.subTo(o,a),i.subTo(s,i)):(r.subTo(n,r),t&&o.subTo(a,o),s.subTo(i,s))}return 0!=r.compareTo(I.ONE)?I.ZERO:s.compareTo(e)>=0?s.subtract(e):s.signum()<0?(s.addTo(e,s),s.signum()<0?s.add(e):s):s},I.prototype.pow=function(e){return this.exp(e,new V)},I.prototype.gcd=function(e){var t=this.s<0?this.negate():this.clone(),n=e.s<0?e.negate():e.clone();if(t.compareTo(n)<0){var r=t;t=n,n=r}var a=t.getLowestSetBit(),i=n.getLowestSetBit();if(i<0)return t;for(a0&&(t.rShiftTo(i,t),n.rShiftTo(i,n));t.signum()>0;)(a=t.getLowestSetBit())>0&&t.rShiftTo(a,t),(a=n.getLowestSetBit())>0&&n.rShiftTo(a,n),t.compareTo(n)>=0?(t.subTo(n,t),t.rShiftTo(1,t)):(n.subTo(t,n),n.rShiftTo(1,n));return i>0&&n.lShiftTo(i,n),n},I.prototype.isProbablePrime=function(e){var t,n=this.abs();if(1==n.t&&n[0]<=z[z.length-1]){for(t=0;t>>8,Q[q++]=255&K;q=0,Z()}function ee(){if(null==H){for(Z(),(H=new Y).init(Q),q=0;q>24,(16711680&a)>>16,(65280&a)>>8,255&a]))),a+=1;return r}function ae(){this.n=null,this.e=0,this.d=null,this.p=null,this.q=null,this.dmp1=null,this.dmq1=null,this.coeff=null}function ie(e,t){this.x=t,this.q=e}function oe(e,t,n,r){this.curve=e,this.x=t,this.y=n,this.z=null==r?I.ONE:r,this.zinv=null}function se(e,t,n){this.q=e,this.a=this.fromBigInteger(t),this.b=this.fromBigInteger(n),this.infinity=new oe(this,null,null)}te.prototype.nextBytes=function(e){var t;for(t=0;t0&&t.length>0))throw"Invalid RSA public key";this.n=ne(e,16),this.e=parseInt(t,16)}},ae.prototype.encrypt=function(e){var t=function(e,t){if(t=0&&t>0;){var a=e.charCodeAt(r--);a<128?n[--t]=a:a>127&&a<2048?(n[--t]=63&a|128,n[--t]=a>>6|192):(n[--t]=63&a|128,n[--t]=a>>6&63|128,n[--t]=a>>12|224)}n[--t]=0;for(var i=new te,o=new Array;t>2;){for(o[0]=0;0==o[0];)i.nextBytes(o);n[--t]=o[0]}return n[--t]=2,n[--t]=0,new I(n)}(e,this.n.bitLength()+7>>3);if(null==t)return null;var n=this.doPublic(t);if(null==n)return null;var r=n.toString(16);return 0==(1&r.length)?r:"0"+r},ae.prototype.encryptOAEP=function(e,t,n){var r=function(e,t,n,r){var a=le.crypto.MessageDigest,i=le.crypto.Util,o=null;if(n||(n="sha1"),"string"==typeof n&&(o=a.getCanonicalAlgName(n),r=a.getHashLength(o),n=function(e){return Ie(i.hashHex(Ee(e),o))}),e.length+2*r+2>t)throw"Message too long for RSA";var s,u="";for(s=0;s>3,t,n);if(null==r)return null;var a=this.doPublic(r);if(null==a)return null;var i=a.toString(16);return 0==(1&i.length)?i:"0"+i},ae.prototype.type="RSA",ie.prototype.equals=function(e){return e==this||this.q.equals(e.q)&&this.x.equals(e.x)},ie.prototype.toBigInteger=function(){return this.x},ie.prototype.negate=function(){return new ie(this.q,this.x.negate().mod(this.q))},ie.prototype.add=function(e){return new ie(this.q,this.x.add(e.toBigInteger()).mod(this.q))},ie.prototype.subtract=function(e){return new ie(this.q,this.x.subtract(e.toBigInteger()).mod(this.q))},ie.prototype.multiply=function(e){return new ie(this.q,this.x.multiply(e.toBigInteger()).mod(this.q))},ie.prototype.square=function(){return new ie(this.q,this.x.square().mod(this.q))},ie.prototype.divide=function(e){return new ie(this.q,this.x.multiply(e.toBigInteger().modInverse(this.q)).mod(this.q))},oe.prototype.getX=function(){return null==this.zinv&&(this.zinv=this.z.modInverse(this.curve.q)),this.curve.fromBigInteger(this.x.toBigInteger().multiply(this.zinv).mod(this.curve.q))},oe.prototype.getY=function(){return null==this.zinv&&(this.zinv=this.z.modInverse(this.curve.q)),this.curve.fromBigInteger(this.y.toBigInteger().multiply(this.zinv).mod(this.curve.q))},oe.prototype.equals=function(e){return e==this||(this.isInfinity()?e.isInfinity():e.isInfinity()?this.isInfinity():!!e.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(e.z)).mod(this.curve.q).equals(I.ZERO)&&e.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(e.z)).mod(this.curve.q).equals(I.ZERO))},oe.prototype.isInfinity=function(){return null==this.x&&null==this.y||this.z.equals(I.ZERO)&&!this.y.toBigInteger().equals(I.ZERO)},oe.prototype.negate=function(){return new oe(this.curve,this.x,this.y.negate(),this.z)},oe.prototype.add=function(e){if(this.isInfinity())return e;if(e.isInfinity())return this;var t=e.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(e.z)).mod(this.curve.q),n=e.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(e.z)).mod(this.curve.q);if(I.ZERO.equals(n))return I.ZERO.equals(t)?this.twice():this.curve.getInfinity();var r=new I("3"),a=this.x.toBigInteger(),i=this.y.toBigInteger(),o=(e.x.toBigInteger(),e.y.toBigInteger(),n.square()),s=o.multiply(n),u=a.multiply(o),l=t.square().multiply(this.z),c=l.subtract(u.shiftLeft(1)).multiply(e.z).subtract(s).multiply(n).mod(this.curve.q),d=u.multiply(r).multiply(t).subtract(i.multiply(s)).subtract(l.multiply(t)).multiply(e.z).add(t.multiply(s)).mod(this.curve.q),f=s.multiply(this.z).multiply(e.z).mod(this.curve.q);return new oe(this.curve,this.curve.fromBigInteger(c),this.curve.fromBigInteger(d),f)},oe.prototype.twice=function(){if(this.isInfinity())return this;if(0==this.y.toBigInteger().signum())return this.curve.getInfinity();var e=new I("3"),t=this.x.toBigInteger(),n=this.y.toBigInteger(),r=n.multiply(this.z),a=r.multiply(n).mod(this.curve.q),i=this.curve.a.toBigInteger(),o=t.square().multiply(e);I.ZERO.equals(i)||(o=o.add(this.z.square().multiply(i)));var s=(o=o.mod(this.curve.q)).square().subtract(t.shiftLeft(3).multiply(a)).shiftLeft(1).multiply(r).mod(this.curve.q),u=o.multiply(e).multiply(t).subtract(a.shiftLeft(1)).shiftLeft(2).multiply(a).subtract(o.square().multiply(o)).mod(this.curve.q),l=r.square().multiply(r).shiftLeft(3).mod(this.curve.q);return new oe(this.curve,this.curve.fromBigInteger(s),this.curve.fromBigInteger(u),l)},oe.prototype.multiply=function(e){if(this.isInfinity())return this;if(0==e.signum())return this.curve.getInfinity();var t,n=e,r=n.multiply(new I("3")),a=this.negate(),i=this,o=this.curve.q.subtract(e),s=o.multiply(new I("3")),u=new oe(this.curve,this.x,this.y),l=u.negate();for(t=r.bitLength()-2;t>0;--t){i=i.twice();var c=r.testBit(t);c!=n.testBit(t)&&(i=i.add(c?this:a))}for(t=s.bitLength()-2;t>0;--t){u=u.twice();var d=s.testBit(t);d!=o.testBit(t)&&(u=u.add(d?u:l))}return i},oe.prototype.multiplyTwo=function(e,t,n){var r;r=e.bitLength()>n.bitLength()?e.bitLength()-1:n.bitLength()-1;for(var a=this.curve.getInfinity(),i=this.add(t);r>=0;)a=a.twice(),e.testBit(r)?a=n.testBit(r)?a.add(i):a.add(this):n.testBit(r)&&(a=a.add(t)),--r;return a},se.prototype.getQ=function(){return this.q},se.prototype.getA=function(){return this.a},se.prototype.getB=function(){return this.b},se.prototype.equals=function(e){return e==this||this.q.equals(e.q)&&this.a.equals(e.a)&&this.b.equals(e.b)},se.prototype.getInfinity=function(){return this.infinity},se.prototype.fromBigInteger=function(e){return new ie(this.q,e)},se.prototype.decodePointHex=function(e){switch(parseInt(e.substr(0,2),16)){case 0:return this.infinity;case 2:case 3:default:return null;case 4:case 6:case 7:var t=(e.length-2)/2,n=e.substr(2,t),r=e.substr(t+2,t);return new oe(this,this.fromBigInteger(new I(n,16)),this.fromBigInteger(new I(r,16)))}},ie.prototype.getByteLength=function(){return Math.floor((this.toBigInteger().bitLength()+7)/8)},oe.prototype.getEncoded=function(e){var t=function(e,t){var n=e.toByteArrayUnsigned();if(tn.length;)n.unshift(0);return n},n=this.getX().toBigInteger(),r=this.getY().toBigInteger(),a=t(n,32);return e?r.isEven()?a.unshift(2):a.unshift(3):(a.unshift(4),a=a.concat(t(r,32))),a},oe.decodeFrom=function(e,t){t[0];var n=t.length-1,r=t.slice(1,1+n/2),a=t.slice(1+n/2,1+n);r.unshift(0),a.unshift(0);var i=new I(r),o=new I(a);return new oe(e,e.fromBigInteger(i),e.fromBigInteger(o))},oe.decodeFromHex=function(e,t){t.substr(0,2);var n=t.length-2,r=t.substr(2,n/2),a=t.substr(2+n/2,n/2),i=new I(r,16),o=new I(a,16);return new oe(e,e.fromBigInteger(i),e.fromBigInteger(o))},oe.prototype.add2D=function(e){if(this.isInfinity())return e;if(e.isInfinity())return this;if(this.x.equals(e.x))return this.y.equals(e.y)?this.twice():this.curve.getInfinity();var t=e.x.subtract(this.x),n=e.y.subtract(this.y).divide(t),r=n.square().subtract(this.x).subtract(e.x),a=n.multiply(this.x.subtract(r)).subtract(this.y);return new oe(this.curve,r,a)},oe.prototype.twice2D=function(){if(this.isInfinity())return this;if(0==this.y.toBigInteger().signum())return this.curve.getInfinity();var e=this.curve.fromBigInteger(I.valueOf(2)),t=this.curve.fromBigInteger(I.valueOf(3)),n=this.x.square().multiply(t).add(this.curve.a).divide(this.y.multiply(e)),r=n.square().subtract(this.x.multiply(e)),a=n.multiply(this.x.subtract(r)).subtract(this.y);return new oe(this.curve,r,a)},oe.prototype.multiply2D=function(e){if(this.isInfinity())return this;if(0==e.signum())return this.curve.getInfinity();var t,n=e,r=n.multiply(new I("3")),a=this.negate(),i=this;for(t=r.bitLength()-2;t>0;--t){i=i.twice();var o=r.testBit(t);o!=n.testBit(t)&&(i=i.add2D(o?this:a))}return i},oe.prototype.isOnCurve=function(){var e=this.getX().toBigInteger(),t=this.getY().toBigInteger(),n=this.curve.getA().toBigInteger(),r=this.curve.getB().toBigInteger(),a=this.curve.getQ(),i=t.multiply(t).mod(a),o=e.multiply(e).multiply(e).add(n.multiply(e)).add(r).mod(a);return i.equals(o)},oe.prototype.toString=function(){return"("+this.getX().toBigInteger().toString()+","+this.getY().toBigInteger().toString()+")"},oe.prototype.validate=function(){var e=this.curve.getQ();if(this.isInfinity())throw new Error("Point is at infinity.");var t=this.getX().toBigInteger(),n=this.getY().toBigInteger();if(t.compareTo(I.ONE)<0||t.compareTo(e.subtract(I.ONE))>0)throw new Error("x coordinate out of bounds");if(n.compareTo(I.ONE)<0||n.compareTo(e.subtract(I.ONE))>0)throw new Error("y coordinate out of bounds");if(!this.isOnCurve())throw new Error("Point is not on the curve.");if(this.multiply(e).isInfinity())throw new Error("Point is not a scalar multiple of G.");return!0};var ue=function(){var e=new RegExp('(?:false|true|null|[\\{\\}\\[\\]]|(?:-?\\b(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?\\b)|(?:"(?:[^\\0-\\x08\\x0a-\\x1f"\\\\]|\\\\(?:["/\\\\bfnrt]|u[0-9A-Fa-f]{4}))*"))',"g"),t=new RegExp("\\\\(?:([^u])|u(.{4}))","g"),r={'"':'"',"/":"/","\\":"\\",b:"\b",f:"\f",n:"\n",r:"\r",t:"\t"};function a(e,t,n){return t?r[t]:String.fromCharCode(parseInt(n,16))}var i=new String(""),o=Object.hasOwnProperty;return function(r,s){var u,l,c=r.match(e),d=c[0],f=!1;"{"===d?u={}:"["===d?u=[]:(u=[],f=!0);for(var v=[u],m=1-f,p=c.length;m=0;)delete a[i[c]]}return s.call(t,r,a)}({"":u},"")),u}}();void 0!==le&&le||(t.KJUR=le={}),void 0!==le.asn1&&le.asn1||(le.asn1={}),le.asn1.ASN1Util=new function(){this.integerToByteHex=function(e){var t=e.toString(16);return t.length%2==1&&(t="0"+t),t},this.bigIntToMinTwosComplementsHex=function(e){var t=e.toString(16);if("-"!=t.substr(0,1))t.length%2==1?t="0"+t:t.match(/^[0-7]/)||(t="00"+t);else{var n=t.substr(1).length;n%2==1?n+=1:t.match(/^[0-7]/)||(n+=2);for(var r="",a=0;a15)throw"ASN.1 length too long to represent by 8x: n = "+e.toString(16);return(128+n).toString(16)+t},this.getEncodedHex=function(){return(null==this.hTLV||this.isModified)&&(this.hV=this.getFreshValueHex(),this.hL=this.getLengthHexFromValue(),this.hTLV=this.hT+this.hL+this.hV,this.isModified=!1),this.hTLV},this.getValueHex=function(){return this.getEncodedHex(),this.hV},this.getFreshValueHex=function(){return""},this.setByParam=function(e){this.params=e},null!=e&&null!=e.tlv&&(this.hTLV=e.tlv,this.isModified=!1)},le.asn1.DERAbstractString=function(e){le.asn1.DERAbstractString.superclass.constructor.call(this),this.getString=function(){return this.s},this.setString=function(e){this.hTLV=null,this.isModified=!0,this.s=e,this.hV=be(this.s).toLowerCase()},this.setStringHex=function(e){this.hTLV=null,this.isModified=!0,this.s=null,this.hV=e},this.getFreshValueHex=function(){return this.hV},void 0!==e&&("string"==typeof e?this.setString(e):void 0!==e.str?this.setString(e.str):void 0!==e.hex&&this.setStringHex(e.hex))},i.lang.extend(le.asn1.DERAbstractString,le.asn1.ASN1Object),le.asn1.DERAbstractTime=function(e){le.asn1.DERAbstractTime.superclass.constructor.call(this),this.localDateToUTC=function(e){var t=e.getTime()+6e4*e.getTimezoneOffset();return new Date(t)},this.formatDate=function(e,t,n){var r=this.zeroPadding,a=this.localDateToUTC(e),i=String(a.getFullYear());"utc"==t&&(i=i.substr(2,2));var o=i+r(String(a.getMonth()+1),2)+r(String(a.getDate()),2)+r(String(a.getHours()),2)+r(String(a.getMinutes()),2)+r(String(a.getSeconds()),2);if(!0===n){var s=a.getMilliseconds();if(0!=s){var u=r(String(s),3);o=o+"."+(u=u.replace(/[0]+$/,""))}}return o+"Z"},this.zeroPadding=function(e,t){return e.length>=t?e:new Array(t-e.length+1).join("0")+e},this.getString=function(){return this.s},this.setString=function(e){this.hTLV=null,this.isModified=!0,this.s=e,this.hV=he(e)},this.setByDateValue=function(e,t,n,r,a,i){var o=new Date(Date.UTC(e,t-1,n,r,a,i,0));this.setByDate(o)},this.getFreshValueHex=function(){return this.hV}},i.lang.extend(le.asn1.DERAbstractTime,le.asn1.ASN1Object),le.asn1.DERAbstractStructured=function(e){le.asn1.DERAbstractString.superclass.constructor.call(this),this.setByASN1ObjectArray=function(e){this.hTLV=null,this.isModified=!0,this.asn1Array=e},this.appendASN1Object=function(e){this.hTLV=null,this.isModified=!0,this.asn1Array.push(e)},this.asn1Array=new Array,void 0!==e&&void 0!==e.array&&(this.asn1Array=e.array)},i.lang.extend(le.asn1.DERAbstractStructured,le.asn1.ASN1Object),le.asn1.DERBoolean=function(e){le.asn1.DERBoolean.superclass.constructor.call(this),this.hT="01",this.hTLV=0==e?"010100":"0101ff"},i.lang.extend(le.asn1.DERBoolean,le.asn1.ASN1Object),le.asn1.DERInteger=function(e){le.asn1.DERInteger.superclass.constructor.call(this),this.hT="02",this.setByBigInteger=function(e){this.hTLV=null,this.isModified=!0,this.hV=le.asn1.ASN1Util.bigIntToMinTwosComplementsHex(e)},this.setByInteger=function(e){var t=new I(String(e),10);this.setByBigInteger(t)},this.setValueHex=function(e){this.hV=e},this.getFreshValueHex=function(){return this.hV},void 0!==e&&(void 0!==e.bigint?this.setByBigInteger(e.bigint):void 0!==e.int?this.setByInteger(e.int):"number"==typeof e?this.setByInteger(e):void 0!==e.hex&&this.setValueHex(e.hex))},i.lang.extend(le.asn1.DERInteger,le.asn1.ASN1Object),le.asn1.DERBitString=function(e){if(void 0!==e&&void 0!==e.obj){var t=le.asn1.ASN1Util.newObject(e.obj);e.hex="00"+t.getEncodedHex()}le.asn1.DERBitString.superclass.constructor.call(this),this.hT="03",this.setHexValueIncludingUnusedBits=function(e){this.hTLV=null,this.isModified=!0,this.hV=e},this.setUnusedBitsAndHexValue=function(e,t){if(e<0||7a.length&&(a=r[n]);return(e=e.replace(a,"::")).slice(1,-1)}function Ne(e){var t="malformed hex value";if(!e.match(/^([0-9A-Fa-f][0-9A-Fa-f]){1,}$/))throw t;if(8!=e.length)return 32==e.length?ke(e):e;try{return parseInt(e.substr(0,2),16)+"."+parseInt(e.substr(2,2),16)+"."+parseInt(e.substr(4,2),16)+"."+parseInt(e.substr(6,2),16)}catch(e){throw t}}function Fe(e){for(var t=encodeURIComponent(e),n="",r=0;r"7"?"00"+e:e}fe.getLblen=function(e,t){if("8"!=e.substr(t+2,1))return 1;var n=parseInt(e.substr(t+3,1));return 0==n?-1:0=r)break}return o},fe.getNthChildIdx=function(e,t,n){return fe.getChildIdx(e,t)[n]},fe.getIdxbyList=function(e,t,n,r){var a,i,o=fe;return 0==n.length?void 0!==r&&e.substr(t,2)!==r?-1:t:(a=n.shift())>=(i=o.getChildIdx(e,t)).length?-1:o.getIdxbyList(e,i[a],n,r)},fe.getIdxbyListEx=function(e,t,n,r){var a,i,o=fe;if(0==n.length)return void 0!==r&&e.substr(t,2)!==r?-1:t;a=n.shift(),i=o.getChildIdx(e,t);for(var s=0,u=0;u=e.length?null:a.getTLV(e,i)},fe.getTLVbyListEx=function(e,t,n,r){var a=fe,i=a.getIdxbyListEx(e,t,n,r);return-1==i?null:a.getTLV(e,i)},fe.getVbyList=function(e,t,n,r,a){var i,o,s=fe;return-1==(i=s.getIdxbyList(e,t,n,r))||i>=e.length?null:(o=s.getV(e,i),!0===a&&(o=o.substr(2)),o)},fe.getVbyListEx=function(e,t,n,r,a){var i,o,s=fe;return-1==(i=s.getIdxbyListEx(e,t,n,r))?null:(o=s.getV(e,i),"03"==e.substr(i,2)&&!1!==a&&(o=o.substr(2)),o)},fe.getInt=function(e,t,n){null==n&&(n=-1);try{var r=e.substr(t,2);if("02"!=r&&"03"!=r)return n;var a=fe.getV(e,t);return"02"==r?parseInt(a,16):function(e){try{var t=e.substr(0,2);if("00"==t)return parseInt(e.substr(2),16);var n=parseInt(t,16),r=e.substr(2),a=parseInt(r,16).toString(2);return"0"==a&&(a="00000000"),a=a.slice(0,0-n),parseInt(a,2)}catch(e){return-1}}(a)}catch(e){return n}},fe.getOID=function(e,t,n){null==n&&(n=null);try{return"06"!=e.substr(t,2)?n:function(e){if(!Be(e))return null;try{var t=[],n=e.substr(0,2),r=parseInt(n,16);t[0]=new String(Math.floor(r/40)),t[1]=new String(r%40);for(var a=e.substr(2),i=[],o=0;o0&&(l=l+"."+s.join(".")),l}catch(e){return null}}(fe.getV(e,t))}catch(e){return n}},fe.getOIDName=function(e,t,n){null==n&&(n=null);try{var r=fe.getOID(e,t,n);if(r==n)return n;var a=le.asn1.x509.OID.oid2name(r);return""==a?r:a}catch(e){return n}},fe.getString=function(e,t,n){null==n&&(n=null);try{return Ie(fe.getV(e,t))}catch(e){return n}},fe.hextooidstr=function(e){var t=function(e,t){return e.length>=t?e:new Array(t-e.length+1).join("0")+e},n=[],r=e.substr(0,2),a=parseInt(r,16);n[0]=new String(Math.floor(a/40)),n[1]=new String(a%40);for(var i=e.substr(2),o=[],s=0;s0&&(c=c+"."+u.join(".")),c},fe.dump=function(e,t,n,r){var a=fe,i=a.getV,o=a.dump,s=a.getChildIdx,u=e;e instanceof le.asn1.ASN1Object&&(u=e.getEncodedHex());var l=function(e,t){return e.length<=2*t?e:e.substr(0,t)+"..(total "+e.length/2+"bytes).."+e.substr(e.length-t,t)};void 0===t&&(t={ommit_long_octet:32}),void 0===n&&(n=0),void 0===r&&(r="");var c,d=t.ommit_long_octet;if("01"==(c=u.substr(n,2)))return"00"==(f=i(u,n))?r+"BOOLEAN FALSE\n":r+"BOOLEAN TRUE\n";if("02"==c)return r+"INTEGER "+l(f=i(u,n),d)+"\n";if("03"==c){var f=i(u,n);return a.isASN1HEX(f.substr(2))?(b=r+"BITSTRING, encapsulates\n")+o(f.substr(2),t,0,r+" "):r+"BITSTRING "+l(f,d)+"\n"}if("04"==c)return f=i(u,n),a.isASN1HEX(f)?(b=r+"OCTETSTRING, encapsulates\n")+o(f,t,0,r+" "):r+"OCTETSTRING "+l(f,d)+"\n";if("05"==c)return r+"NULL\n";if("06"==c){var v=i(u,n),m=le.asn1.ASN1Util.oidHexToInt(v),p=le.asn1.x509.OID.oid2name(m),h=m.replace(/\./g," ");return""!=p?r+"ObjectIdentifier "+p+" ("+h+")\n":r+"ObjectIdentifier ("+h+")\n"}if("0a"==c)return r+"ENUMERATED "+parseInt(i(u,n))+"\n";if("0c"==c)return r+"UTF8String '"+we(i(u,n))+"'\n";if("13"==c)return r+"PrintableString '"+we(i(u,n))+"'\n";if("14"==c)return r+"TeletexString '"+we(i(u,n))+"'\n";if("16"==c)return r+"IA5String '"+we(i(u,n))+"'\n";if("17"==c)return r+"UTCTime "+we(i(u,n))+"\n";if("18"==c)return r+"GeneralizedTime "+we(i(u,n))+"\n";if("1a"==c)return r+"VisualString '"+we(i(u,n))+"'\n";if("1e"==c)return r+"BMPString '"+we(i(u,n))+"'\n";if("30"==c){if("3000"==u.substr(n,4))return r+"SEQUENCE {}\n";b=r+"SEQUENCE\n";var g=t;if((2==(S=s(u,n)).length||3==S.length)&&"06"==u.substr(S[0],2)&&"04"==u.substr(S[S.length-1],2)){p=a.oidname(i(u,S[0]));var A=JSON.parse(JSON.stringify(t));A.x509ExtName=p,g=A}for(var y=0;y31)&&128==(192&n)&&(31&n)==r}catch(e){return!1}},fe.isASN1HEX=function(e){var t=fe;if(e.length%2==1)return!1;var n=t.getVblen(e,0),r=e.substr(0,2),a=t.getL(e,0);return e.length-r.length-a.length==2*n},fe.checkStrictDER=function(e,t,n,r,a){var i=fe;if(void 0===n){if("string"!=typeof e)throw new Error("not hex string");if(e=e.toLowerCase(),!le.lang.String.isHex(e))throw new Error("not hex string");n=e.length,a=(r=e.length/2)<128?1:Math.ceil(r.toString(16))+1}if(i.getL(e,t).length>2*a)throw new Error("L of TLV too long: idx="+t);var o=i.getVblen(e,t);if(o>r)throw new Error("value of L too long than hex: idx="+t);var s=i.getTLV(e,t),u=s.length-2-i.getL(e,t).length;if(u!==2*o)throw new Error("V string length and L's value not the same:"+u+"/"+2*o);if(0===t&&e.length!=s.length)throw new Error("total length and TLV length unmatch:"+e.length+"!="+s.length);var l=e.substr(t,2);if("02"===l){var c=i.getVidx(e,t);if("00"==e.substr(c,2)&&e.charCodeAt(c+2)<56)throw new Error("not least zeros for DER INTEGER")}if(32&parseInt(l,16)){for(var d=i.getVblen(e,t),f=0,v=i.getChildIdx(e,t),m=0;m=t?e:new Array(t-e.length+1).join(n)+e};void 0!==le&&le||(t.KJUR=le={}),void 0!==le.crypto&&le.crypto||(le.crypto={}),le.crypto.Util=new function(){this.DIGESTINFOHEAD={sha1:"3021300906052b0e03021a05000414",sha224:"302d300d06096086480165030402040500041c",sha256:"3031300d060960864801650304020105000420",sha384:"3041300d060960864801650304020205000430",sha512:"3051300d060960864801650304020305000440",md2:"3020300c06082a864886f70d020205000410",md5:"3020300c06082a864886f70d020505000410",ripemd160:"3021300906052b2403020105000414"},this.DEFAULTPROVIDER={md5:"cryptojs",sha1:"cryptojs",sha224:"cryptojs",sha256:"cryptojs",sha384:"cryptojs",sha512:"cryptojs",ripemd160:"cryptojs",hmacmd5:"cryptojs",hmacsha1:"cryptojs",hmacsha224:"cryptojs",hmacsha256:"cryptojs",hmacsha384:"cryptojs",hmacsha512:"cryptojs",hmacripemd160:"cryptojs",MD5withRSA:"cryptojs/jsrsa",SHA1withRSA:"cryptojs/jsrsa",SHA224withRSA:"cryptojs/jsrsa",SHA256withRSA:"cryptojs/jsrsa",SHA384withRSA:"cryptojs/jsrsa",SHA512withRSA:"cryptojs/jsrsa",RIPEMD160withRSA:"cryptojs/jsrsa",MD5withECDSA:"cryptojs/jsrsa",SHA1withECDSA:"cryptojs/jsrsa",SHA224withECDSA:"cryptojs/jsrsa",SHA256withECDSA:"cryptojs/jsrsa",SHA384withECDSA:"cryptojs/jsrsa",SHA512withECDSA:"cryptojs/jsrsa",RIPEMD160withECDSA:"cryptojs/jsrsa",SHA1withDSA:"cryptojs/jsrsa",SHA224withDSA:"cryptojs/jsrsa",SHA256withDSA:"cryptojs/jsrsa",MD5withRSAandMGF1:"cryptojs/jsrsa",SHAwithRSAandMGF1:"cryptojs/jsrsa",SHA1withRSAandMGF1:"cryptojs/jsrsa",SHA224withRSAandMGF1:"cryptojs/jsrsa",SHA256withRSAandMGF1:"cryptojs/jsrsa",SHA384withRSAandMGF1:"cryptojs/jsrsa",SHA512withRSAandMGF1:"cryptojs/jsrsa",RIPEMD160withRSAandMGF1:"cryptojs/jsrsa"},this.CRYPTOJSMESSAGEDIGESTNAME={md5:g.algo.MD5,sha1:g.algo.SHA1,sha224:g.algo.SHA224,sha256:g.algo.SHA256,sha384:g.algo.SHA384,sha512:g.algo.SHA512,ripemd160:g.algo.RIPEMD160},this.getDigestInfoHex=function(e,t){if(void 0===this.DIGESTINFOHEAD[t])throw"alg not supported in Util.DIGESTINFOHEAD: "+t;return this.DIGESTINFOHEAD[t]+e},this.getPaddedDigestInfoHex=function(e,t,n){var r=this.getDigestInfoHex(e,t),a=n/4;if(r.length+22>a)throw"key is too short for SigAlg: keylen="+n+","+t;for(var i="0001",o="00"+r,s="",u=a-i.length-o.length,l=0;l=0)return!1;if(n.compareTo(r.ONE)<0||n.compareTo(i)>=0)return!1;var s=n.modInverse(i),u=e.multiply(s).mod(i),l=t.multiply(s).mod(i);return o.multiply(u).add(a.multiply(l)).getX().toBigInteger().mod(i).equals(t)},this.serializeSig=function(e,t){var n=e.toByteArraySigned(),r=t.toByteArraySigned(),a=[];return a.push(2),a.push(n.length),(a=a.concat(n)).push(2),a.push(r.length),(a=a.concat(r)).unshift(a.length),a.unshift(48),a},this.parseSig=function(e){var t;if(48!=e[0])throw new Error("Signature not a valid DERSequence");if(2!=e[t=2])throw new Error("First element in signature must be a DERInteger");var n=e.slice(t+2,t+2+e[t+1]);if(2!=e[t+=2+e[t+1]])throw new Error("Second element in signature must be a DERInteger");var a=e.slice(t+2,t+2+e[t+1]);return t+=2+e[t+1],{r:r.fromByteArrayUnsigned(n),s:r.fromByteArrayUnsigned(a)}},this.parseSigCompact=function(e){if(65!==e.length)throw"Signature has the wrong length";var t=e[0]-27;if(t<0||t>7)throw"Invalid signature type";var n=this.ecparams.n;return{r:r.fromByteArrayUnsigned(e.slice(1,33)).mod(n),s:r.fromByteArrayUnsigned(e.slice(33,65)).mod(n),i:t}},this.readPKCS5PrvKeyHex=function(e){if(!1===c(e))throw new Error("not ASN.1 hex string");var t,n,r;try{t=l(e,0,["[0]",0],"06"),n=l(e,0,[1],"04");try{r=l(e,0,["[1]",0],"03")}catch(e){}}catch(e){throw new Error("malformed PKCS#1/5 plain ECC private key")}if(this.curveName=s(t),void 0===this.curveName)throw"unsupported curve name";this.setNamedCurve(this.curveName),this.setPublicKeyHex(r),this.setPrivateKeyHex(n),this.isPublic=!1},this.readPKCS8PrvKeyHex=function(e){if(!1===c(e))throw new t("not ASN.1 hex string");var n,r,a;try{l(e,0,[1,0],"06"),n=l(e,0,[1,1],"06"),r=l(e,0,[2,0,1],"04");try{a=l(e,0,[2,0,"[1]",0],"03")}catch(e){}}catch(e){throw new t("malformed PKCS#8 plain ECC private key")}if(this.curveName=s(n),void 0===this.curveName)throw new t("unsupported curve name");this.setNamedCurve(this.curveName),this.setPublicKeyHex(a),this.setPrivateKeyHex(r),this.isPublic=!1},this.readPKCS8PubKeyHex=function(e){if(!1===c(e))throw new t("not ASN.1 hex string");var n,r;try{l(e,0,[0,0],"06"),n=l(e,0,[0,1],"06"),r=l(e,0,[1],"03")}catch(e){throw new t("malformed PKCS#8 ECC public key")}if(this.curveName=s(n),null===this.curveName)throw new t("unsupported curve name");this.setNamedCurve(this.curveName),this.setPublicKeyHex(r)},this.readCertPubKeyHex=function(e,n){if(!1===c(e))throw new t("not ASN.1 hex string");var r,a;try{r=l(e,0,[0,5,0,1],"06"),a=l(e,0,[0,5,1],"03")}catch(e){throw new t("malformed X.509 certificate ECC public key")}if(this.curveName=s(r),null===this.curveName)throw new t("unsupported curve name");this.setNamedCurve(this.curveName),this.setPublicKeyHex(a)},void 0!==e&&void 0!==e.curve&&(this.curveName=e.curve),void 0===this.curveName&&(this.curveName="secp256r1"),this.setNamedCurve(this.curveName),void 0!==e&&(void 0!==e.prv&&this.setPrivateKeyHex(e.prv),void 0!==e.pub&&this.setPublicKeyHex(e.pub))},le.crypto.ECDSA.parseSigHex=function(e){var t=le.crypto.ECDSA.parseSigHexInHexRS(e);return{r:new I(t.r,16),s:new I(t.s,16)}},le.crypto.ECDSA.parseSigHexInHexRS=function(e){var t=fe,n=t.getChildIdx,r=t.getV;if(t.checkStrictDER(e,0),"30"!=e.substr(0,2))throw new Error("signature is not a ASN.1 sequence");var a=n(e,0);if(2!=a.length)throw new Error("signature shall have two elements");var i=a[0],o=a[1];if("02"!=e.substr(i,2))throw new Error("1st item not ASN.1 integer");if("02"!=e.substr(o,2))throw new Error("2nd item not ASN.1 integer");return{r:r(e,i),s:r(e,o)}},le.crypto.ECDSA.asn1SigToConcatSig=function(e){var t=le.crypto.ECDSA.parseSigHexInHexRS(e),n=t.r,r=t.s;if("00"==n.substr(0,2)&&n.length%32==2&&(n=n.substr(2)),"00"==r.substr(0,2)&&r.length%32==2&&(r=r.substr(2)),n.length%32==30&&(n="00"+n),r.length%32==30&&(r="00"+r),n.length%32!=0)throw"unknown ECDSA sig r length error";if(r.length%32!=0)throw"unknown ECDSA sig s length error";return n+r},le.crypto.ECDSA.concatSigToASN1Sig=function(e){if(e.length/2*8%128!=0)throw"unknown ECDSA concatinated r-s sig length error";var t=e.substr(0,e.length/2),n=e.substr(e.length/2);return le.crypto.ECDSA.hexRSSigToASN1Sig(t,n)},le.crypto.ECDSA.hexRSSigToASN1Sig=function(e,t){var n=new I(e,16),r=new I(t,16);return le.crypto.ECDSA.biRSSigToASN1Sig(n,r)},le.crypto.ECDSA.biRSSigToASN1Sig=function(e,t){var n=le.asn1,r=new n.DERInteger({bigint:e}),a=new n.DERInteger({bigint:t});return new n.DERSequence({array:[r,a]}).getEncodedHex()},le.crypto.ECDSA.getName=function(e){return"2b8104001f"===e?"secp192k1":"2a8648ce3d030107"===e?"secp256r1":"2b8104000a"===e?"secp256k1":"2b81040021"===e?"secp224r1":"2b81040022"===e?"secp384r1":-1!=="|secp256r1|NIST P-256|P-256|prime256v1|".indexOf(e)?"secp256r1":-1!=="|secp256k1|".indexOf(e)?"secp256k1":-1!=="|secp224r1|NIST P-224|P-224|".indexOf(e)?"secp224r1":-1!=="|secp384r1|NIST P-384|P-384|".indexOf(e)?"secp384r1":null},void 0!==le&&le||(t.KJUR=le={}),void 0!==le.crypto&&le.crypto||(le.crypto={}),le.crypto.ECParameterDB=new function(){var e={},t={};function n(e){return new I(e,16)}this.getByName=function(n){var r=n;if(void 0!==t[r]&&(r=t[n]),void 0!==e[r])return e[r];throw"unregistered EC curve name: "+r},this.regist=function(r,a,i,o,s,u,l,c,d,f,v,m){e[r]={};var p=n(i),h=n(o),g=n(s),A=n(u),y=n(l),S=new se(p,h,g),b=S.decodePointHex("04"+c+d);e[r].name=r,e[r].keylen=a,e[r].curve=S,e[r].G=b,e[r].n=A,e[r].h=y,e[r].oid=v,e[r].info=m;for(var w=0;w=2*s)break}var d={};return d.keyhex=u.substr(0,2*a[e].keylen),d.ivhex=u.substr(2*a[e].keylen,2*a[e].ivlen),d},s=function(e,t,n,r){var i=g.enc.Base64.parse(e),o=g.enc.Hex.stringify(i);return(0,a[t].proc)(o,n,r)};return{version:"1.0.0",parsePKCS5PEM:function(e){return i(e)},getKeyAndUnusedIvByPasscodeAndIvsalt:function(e,t,n){return o(e,t,n)},decryptKeyB64:function(e,t,n,r){return s(e,t,n,r)},getDecryptedKeyHex:function(e,t){var n=i(e),r=(n.type,n.cipher),a=n.ivsalt,u=n.data,l=o(r,t,a).keyhex;return s(u,r,l,a)},getEncryptedPKCS5PEMFromPrvKeyHex:function(e,t,n,r,i){var s="";if(void 0!==r&&null!=r||(r="AES-256-CBC"),void 0===a[r])throw"KEYUTIL unsupported algorithm: "+r;void 0!==i&&null!=i||(i=function(e){var t=g.lib.WordArray.random(e);return g.enc.Hex.stringify(t)}(a[r].ivlen).toUpperCase());var u=function(e,t,n,r){return(0,a[t].eproc)(e,n,r)}(t,r,o(r,n,i).keyhex,i);return s="-----BEGIN "+e+" PRIVATE KEY-----\r\n",s+="Proc-Type: 4,ENCRYPTED\r\n",s+="DEK-Info: "+r+","+i+"\r\n",s+="\r\n",(s+=u.replace(/(.{64})/g,"$1\r\n"))+"\r\n-----END "+e+" PRIVATE KEY-----\r\n"},parseHexOfEncryptedPKCS8:function(e){var t=fe,n=t.getChildIdx,r=t.getV,a={},i=n(e,0);if(2!=i.length)throw"malformed format: SEQUENCE(0).items != 2: "+i.length;a.ciphertext=r(e,i[1]);var o=n(e,i[0]);if(2!=o.length)throw"malformed format: SEQUENCE(0.0).items != 2: "+o.length;if("2a864886f70d01050d"!=r(e,o[0]))throw"this only supports pkcs5PBES2";var s=n(e,o[1]);if(2!=o.length)throw"malformed format: SEQUENCE(0.0.1).items != 2: "+s.length;var u=n(e,s[1]);if(2!=u.length)throw"malformed format: SEQUENCE(0.0.1.1).items != 2: "+u.length;if("2a864886f70d0307"!=r(e,u[0]))throw"this only supports TripleDES";a.encryptionSchemeAlg="TripleDES",a.encryptionSchemeIV=r(e,u[1]);var l=n(e,s[0]);if(2!=l.length)throw"malformed format: SEQUENCE(0.0.1.0).items != 2: "+l.length;if("2a864886f70d01050c"!=r(e,l[0]))throw"this only supports pkcs5PBKDF2";var c=n(e,l[1]);if(c.length<2)throw"malformed format: SEQUENCE(0.0.1.0.1).items < 2: "+c.length;a.pbkdf2Salt=r(e,c[0]);var d=r(e,c[1]);try{a.pbkdf2Iter=parseInt(d,16)}catch(e){throw"malformed format pbkdf2Iter: "+d}return a},getPBKDF2KeyHexFromParam:function(e,t){var n=g.enc.Hex.parse(e.pbkdf2Salt),r=e.pbkdf2Iter,a=g.PBKDF2(t,n,{keySize:6,iterations:r});return g.enc.Hex.stringify(a)},_getPlainPKCS8HexFromEncryptedPKCS8PEM:function(e,t){var n=Oe(e,"ENCRYPTED PRIVATE KEY"),r=this.parseHexOfEncryptedPKCS8(n),a=je.getPBKDF2KeyHexFromParam(r,t),i={};i.ciphertext=g.enc.Hex.parse(r.ciphertext);var o=g.enc.Hex.parse(a),s=g.enc.Hex.parse(r.encryptionSchemeIV),u=g.TripleDES.decrypt(i,o,{iv:s});return g.enc.Hex.stringify(u)},getKeyFromEncryptedPKCS8PEM:function(e,t){var n=this._getPlainPKCS8HexFromEncryptedPKCS8PEM(e,t);return this.getKeyFromPlainPrivatePKCS8Hex(n)},parsePlainPrivatePKCS8Hex:function(e){var t=fe,n=t.getChildIdx,r=t.getV,a={algparam:null};if("30"!=e.substr(0,2))throw"malformed plain PKCS8 private key(code:001)";var i=n(e,0);if(3!=i.length)throw"malformed plain PKCS8 private key(code:002)";if("30"!=e.substr(i[1],2))throw"malformed PKCS8 private key(code:003)";var o=n(e,i[1]);if(2!=o.length)throw"malformed PKCS8 private key(code:004)";if("06"!=e.substr(o[0],2))throw"malformed PKCS8 private key(code:005)";if(a.algoid=r(e,o[0]),"06"==e.substr(o[1],2)&&(a.algparam=r(e,o[1])),"04"!=e.substr(i[2],2))throw"malformed PKCS8 private key(code:006)";return a.keyidx=t.getVidx(e,i[2]),a},getKeyFromPlainPrivatePKCS8PEM:function(e){var t=Oe(e,"PRIVATE KEY");return this.getKeyFromPlainPrivatePKCS8Hex(t)},getKeyFromPlainPrivatePKCS8Hex:function(e){var t,n=this.parsePlainPrivatePKCS8Hex(e);if("2a864886f70d010101"==n.algoid)t=new ae;else if("2a8648ce380401"==n.algoid)t=new le.crypto.DSA;else{if("2a8648ce3d0201"!=n.algoid)throw"unsupported private key algorithm";t=new le.crypto.ECDSA}return t.readPKCS8PrvKeyHex(e),t},_getKeyFromPublicPKCS8Hex:function(e){var t,n=fe.getVbyList(e,0,[0,0],"06");if("2a864886f70d010101"===n)t=new ae;else if("2a8648ce380401"===n)t=new le.crypto.DSA;else{if("2a8648ce3d0201"!==n)throw"unsupported PKCS#8 public key hex";t=new le.crypto.ECDSA}return t.readPKCS8PubKeyHex(e),t},parsePublicRawRSAKeyHex:function(e){var t=fe,n=t.getChildIdx,r=t.getV,a={};if("30"!=e.substr(0,2))throw"malformed RSA key(code:001)";var i=n(e,0);if(2!=i.length)throw"malformed RSA key(code:002)";if("02"!=e.substr(i[0],2))throw"malformed RSA key(code:003)";if(a.n=r(e,i[0]),"02"!=e.substr(i[1],2))throw"malformed RSA key(code:004)";return a.e=r(e,i[1]),a},parsePublicPKCS8Hex:function(e){var t=fe,n=t.getChildIdx,r=t.getV,a={algparam:null},i=n(e,0);if(2!=i.length)throw"outer DERSequence shall have 2 elements: "+i.length;var o=i[0];if("30"!=e.substr(o,2))throw"malformed PKCS8 public key(code:001)";var s=n(e,o);if(2!=s.length)throw"malformed PKCS8 public key(code:002)";if("06"!=e.substr(s[0],2))throw"malformed PKCS8 public key(code:003)";if(a.algoid=r(e,s[0]),"06"==e.substr(s[1],2)?a.algparam=r(e,s[1]):"30"==e.substr(s[1],2)&&(a.algparam={},a.algparam.p=t.getVbyList(e,s[1],[0],"02"),a.algparam.q=t.getVbyList(e,s[1],[1],"02"),a.algparam.g=t.getVbyList(e,s[1],[2],"02")),"03"!=e.substr(i[1],2))throw"malformed PKCS8 public key(code:004)";return a.key=r(e,i[1]).substr(2),a}}}();je.getKey=function(e,t,n){var r,a=(g=fe).getChildIdx,i=(g.getV,g.getVbyList),o=le.crypto,s=o.ECDSA,u=o.DSA,l=ae,c=Oe,d=je;if(void 0!==l&&e instanceof l)return e;if(void 0!==s&&e instanceof s)return e;if(void 0!==u&&e instanceof u)return e;if(void 0!==e.curve&&void 0!==e.xy&&void 0===e.d)return new s({pub:e.xy,curve:e.curve});if(void 0!==e.curve&&void 0!==e.d)return new s({prv:e.d,curve:e.curve});if(void 0===e.kty&&void 0!==e.n&&void 0!==e.e&&void 0===e.d)return(O=new l).setPublic(e.n,e.e),O;if(void 0===e.kty&&void 0!==e.n&&void 0!==e.e&&void 0!==e.d&&void 0!==e.p&&void 0!==e.q&&void 0!==e.dp&&void 0!==e.dq&&void 0!==e.co&&void 0===e.qi)return(O=new l).setPrivateEx(e.n,e.e,e.d,e.p,e.q,e.dp,e.dq,e.co),O;if(void 0===e.kty&&void 0!==e.n&&void 0!==e.e&&void 0!==e.d&&void 0===e.p)return(O=new l).setPrivate(e.n,e.e,e.d),O;if(void 0!==e.p&&void 0!==e.q&&void 0!==e.g&&void 0!==e.y&&void 0===e.x)return(O=new u).setPublic(e.p,e.q,e.g,e.y),O;if(void 0!==e.p&&void 0!==e.q&&void 0!==e.g&&void 0!==e.y&&void 0!==e.x)return(O=new u).setPrivate(e.p,e.q,e.g,e.y,e.x),O;if("RSA"===e.kty&&void 0!==e.n&&void 0!==e.e&&void 0===e.d)return(O=new l).setPublic(Se(e.n),Se(e.e)),O;if("RSA"===e.kty&&void 0!==e.n&&void 0!==e.e&&void 0!==e.d&&void 0!==e.p&&void 0!==e.q&&void 0!==e.dp&&void 0!==e.dq&&void 0!==e.qi)return(O=new l).setPrivateEx(Se(e.n),Se(e.e),Se(e.d),Se(e.p),Se(e.q),Se(e.dp),Se(e.dq),Se(e.qi)),O;if("RSA"===e.kty&&void 0!==e.n&&void 0!==e.e&&void 0!==e.d)return(O=new l).setPrivate(Se(e.n),Se(e.e),Se(e.d)),O;if("EC"===e.kty&&void 0!==e.crv&&void 0!==e.x&&void 0!==e.y&&void 0===e.d){var f=(M=new s({curve:e.crv})).ecparams.keylen/4,v="04"+("0000000000"+Se(e.x)).slice(-f)+("0000000000"+Se(e.y)).slice(-f);return M.setPublicKeyHex(v),M}if("EC"===e.kty&&void 0!==e.crv&&void 0!==e.x&&void 0!==e.y&&void 0!==e.d){f=(M=new s({curve:e.crv})).ecparams.keylen/4,v="04"+("0000000000"+Se(e.x)).slice(-f)+("0000000000"+Se(e.y)).slice(-f);var m=("0000000000"+Se(e.d)).slice(-f);return M.setPublicKeyHex(v),M.setPrivateKeyHex(m),M}if("pkcs5prv"===n){var p,h=e,g=fe;if(9===(p=a(h,0)).length)(O=new l).readPKCS5PrvKeyHex(h);else if(6===p.length)(O=new u).readPKCS5PrvKeyHex(h);else{if(!(p.length>2&&"04"===h.substr(p[1],2)))throw"unsupported PKCS#1/5 hexadecimal key";(O=new s).readPKCS5PrvKeyHex(h)}return O}if("pkcs8prv"===n)return d.getKeyFromPlainPrivatePKCS8Hex(e);if("pkcs8pub"===n)return d._getKeyFromPublicPKCS8Hex(e);if("x509pub"===n)return ze.getPublicKeyFromCertHex(e);if(-1!=e.indexOf("-END CERTIFICATE-",0)||-1!=e.indexOf("-END X509 CERTIFICATE-",0)||-1!=e.indexOf("-END TRUSTED CERTIFICATE-",0))return ze.getPublicKeyFromCertPEM(e);if(-1!=e.indexOf("-END PUBLIC KEY-")){var A=Oe(e,"PUBLIC KEY");return d._getKeyFromPublicPKCS8Hex(A)}if(-1!=e.indexOf("-END RSA PRIVATE KEY-")&&-1==e.indexOf("4,ENCRYPTED")){var y=c(e,"RSA PRIVATE KEY");return d.getKey(y,null,"pkcs5prv")}if(-1!=e.indexOf("-END DSA PRIVATE KEY-")&&-1==e.indexOf("4,ENCRYPTED")){var S=i(r=c(e,"DSA PRIVATE KEY"),0,[1],"02"),b=i(r,0,[2],"02"),w=i(r,0,[3],"02"),E=i(r,0,[4],"02"),C=i(r,0,[5],"02");return(O=new u).setPrivate(new I(S,16),new I(b,16),new I(w,16),new I(E,16),new I(C,16)),O}if(-1!=e.indexOf("-END EC PRIVATE KEY-")&&-1==e.indexOf("4,ENCRYPTED"))return y=c(e,"EC PRIVATE KEY"),d.getKey(y,null,"pkcs5prv");if(-1!=e.indexOf("-END PRIVATE KEY-"))return d.getKeyFromPlainPrivatePKCS8PEM(e);if(-1!=e.indexOf("-END RSA PRIVATE KEY-")&&-1!=e.indexOf("4,ENCRYPTED")){var D=d.getDecryptedKeyHex(e,t),_=new ae;return _.readPKCS5PrvKeyHex(D),_}if(-1!=e.indexOf("-END EC PRIVATE KEY-")&&-1!=e.indexOf("4,ENCRYPTED")){var M,O=i(r=d.getDecryptedKeyHex(e,t),0,[1],"04"),P=i(r,0,[2,0],"06"),T=i(r,0,[3,0],"03").substr(2);if(void 0===le.crypto.OID.oidhex2name[P])throw"undefined OID(hex) in KJUR.crypto.OID: "+P;return(M=new s({curve:le.crypto.OID.oidhex2name[P]})).setPublicKeyHex(T),M.setPrivateKeyHex(O),M.isPublic=!1,M}if(-1!=e.indexOf("-END DSA PRIVATE KEY-")&&-1!=e.indexOf("4,ENCRYPTED"))return S=i(r=d.getDecryptedKeyHex(e,t),0,[1],"02"),b=i(r,0,[2],"02"),w=i(r,0,[3],"02"),E=i(r,0,[4],"02"),C=i(r,0,[5],"02"),(O=new u).setPrivate(new I(S,16),new I(b,16),new I(w,16),new I(E,16),new I(C,16)),O;if(-1!=e.indexOf("-END ENCRYPTED PRIVATE KEY-"))return d.getKeyFromEncryptedPKCS8PEM(e,t);throw new Error("not supported argument")},je.generateKeypair=function(e,t){if("RSA"==e){var n=t;(o=new ae).generate(n,"10001"),o.isPrivate=!0,o.isPublic=!0;var r=new ae,a=o.n.toString(16),i=o.e.toString(16);return r.setPublic(a,i),r.isPrivate=!1,r.isPublic=!0,(s={}).prvKeyObj=o,s.pubKeyObj=r,s}if("EC"==e){var o,s,u=t,l=new le.crypto.ECDSA({curve:u}).generateKeyPairHex();return(o=new le.crypto.ECDSA({curve:u})).setPublicKeyHex(l.ecpubhex),o.setPrivateKeyHex(l.ecprvhex),o.isPrivate=!0,o.isPublic=!1,(r=new le.crypto.ECDSA({curve:u})).setPublicKeyHex(l.ecpubhex),r.isPrivate=!1,r.isPublic=!0,(s={}).prvKeyObj=o,s.pubKeyObj=r,s}throw"unknown algorithm: "+e},je.getPEM=function(e,t,n,r,a,i){var o=le,s=o.asn1,u=s.DERObjectIdentifier,l=s.DERInteger,c=s.ASN1Util.newObject,d=s.x509.SubjectPublicKeyInfo,f=o.crypto,v=f.DSA,m=f.ECDSA,p=ae;function h(e){return c({seq:[{int:0},{int:{bigint:e.n}},{int:e.e},{int:{bigint:e.d}},{int:{bigint:e.p}},{int:{bigint:e.q}},{int:{bigint:e.dmp1}},{int:{bigint:e.dmq1}},{int:{bigint:e.coeff}}]})}function A(e){return c({seq:[{int:1},{octstr:{hex:e.prvKeyHex}},{tag:["a0",!0,{oid:{name:e.curveName}}]},{tag:["a1",!0,{bitstr:{hex:"00"+e.pubKeyHex}}]}]})}function y(e){return c({seq:[{int:0},{int:{bigint:e.p}},{int:{bigint:e.q}},{int:{bigint:e.g}},{int:{bigint:e.y}},{int:{bigint:e.x}}]})}if((void 0!==p&&e instanceof p||void 0!==v&&e instanceof v||void 0!==m&&e instanceof m)&&1==e.isPublic&&(void 0===t||"PKCS8PUB"==t))return Me(I=new d(e).getEncodedHex(),"PUBLIC KEY");if("PKCS1PRV"==t&&void 0!==p&&e instanceof p&&(void 0===n||null==n)&&1==e.isPrivate)return Me(I=h(e).getEncodedHex(),"RSA PRIVATE KEY");if("PKCS1PRV"==t&&void 0!==m&&e instanceof m&&(void 0===n||null==n)&&1==e.isPrivate){var S=new u({name:e.curveName}).getEncodedHex(),b=A(e).getEncodedHex(),w="";return(w+=Me(S,"EC PARAMETERS"))+Me(b,"EC PRIVATE KEY")}if("PKCS1PRV"==t&&void 0!==v&&e instanceof v&&(void 0===n||null==n)&&1==e.isPrivate)return Me(I=y(e).getEncodedHex(),"DSA PRIVATE KEY");if("PKCS5PRV"==t&&void 0!==p&&e instanceof p&&void 0!==n&&null!=n&&1==e.isPrivate){var I=h(e).getEncodedHex();return void 0===r&&(r="DES-EDE3-CBC"),this.getEncryptedPKCS5PEMFromPrvKeyHex("RSA",I,n,r,i)}if("PKCS5PRV"==t&&void 0!==m&&e instanceof m&&void 0!==n&&null!=n&&1==e.isPrivate)return I=A(e).getEncodedHex(),void 0===r&&(r="DES-EDE3-CBC"),this.getEncryptedPKCS5PEMFromPrvKeyHex("EC",I,n,r,i);if("PKCS5PRV"==t&&void 0!==v&&e instanceof v&&void 0!==n&&null!=n&&1==e.isPrivate)return I=y(e).getEncodedHex(),void 0===r&&(r="DES-EDE3-CBC"),this.getEncryptedPKCS5PEMFromPrvKeyHex("DSA",I,n,r,i);var E=function(e,t){var n=C(e,t);return new c({seq:[{seq:[{oid:{name:"pkcs5PBES2"}},{seq:[{seq:[{oid:{name:"pkcs5PBKDF2"}},{seq:[{octstr:{hex:n.pbkdf2Salt}},{int:n.pbkdf2Iter}]}]},{seq:[{oid:{name:"des-EDE3-CBC"}},{octstr:{hex:n.encryptionSchemeIV}}]}]}]},{octstr:{hex:n.ciphertext}}]}).getEncodedHex()},C=function(e,t){var n=g.lib.WordArray.random(8),r=g.lib.WordArray.random(8),a=g.PBKDF2(t,n,{keySize:6,iterations:100}),i=g.enc.Hex.parse(e),o=g.TripleDES.encrypt(i,a,{iv:r})+"",s={};return s.ciphertext=o,s.pbkdf2Salt=g.enc.Hex.stringify(n),s.pbkdf2Iter=100,s.encryptionSchemeAlg="DES-EDE3-CBC",s.encryptionSchemeIV=g.enc.Hex.stringify(r),s};if("PKCS8PRV"==t&&null!=p&&e instanceof p&&1==e.isPrivate){var D=h(e).getEncodedHex();return I=c({seq:[{int:0},{seq:[{oid:{name:"rsaEncryption"}},{null:!0}]},{octstr:{hex:D}}]}).getEncodedHex(),void 0===n||null==n?Me(I,"PRIVATE KEY"):Me(b=E(I,n),"ENCRYPTED PRIVATE KEY")}if("PKCS8PRV"==t&&void 0!==m&&e instanceof m&&1==e.isPrivate)return D=new c({seq:[{int:1},{octstr:{hex:e.prvKeyHex}},{tag:["a1",!0,{bitstr:{hex:"00"+e.pubKeyHex}}]}]}).getEncodedHex(),I=c({seq:[{int:0},{seq:[{oid:{name:"ecPublicKey"}},{oid:{name:e.curveName}}]},{octstr:{hex:D}}]}).getEncodedHex(),void 0===n||null==n?Me(I,"PRIVATE KEY"):Me(b=E(I,n),"ENCRYPTED PRIVATE KEY");if("PKCS8PRV"==t&&void 0!==v&&e instanceof v&&1==e.isPrivate)return D=new l({bigint:e.x}).getEncodedHex(),I=c({seq:[{int:0},{seq:[{oid:{name:"dsa"}},{seq:[{int:{bigint:e.p}},{int:{bigint:e.q}},{int:{bigint:e.g}}]}]},{octstr:{hex:D}}]}).getEncodedHex(),void 0===n||null==n?Me(I,"PRIVATE KEY"):Me(b=E(I,n),"ENCRYPTED PRIVATE KEY");throw new Error("unsupported object nor format")},je.getKeyFromCSRPEM=function(e){var t=Oe(e,"CERTIFICATE REQUEST");return je.getKeyFromCSRHex(t)},je.getKeyFromCSRHex=function(e){var t=je.parseCSRHex(e);return je.getKey(t.p8pubkeyhex,null,"pkcs8pub")},je.parseCSRHex=function(e){var t=fe,n=t.getChildIdx,r=t.getTLV,a={},i=e;if("30"!=i.substr(0,2))throw"malformed CSR(code:001)";var o=n(i,0);if(o.length<1)throw"malformed CSR(code:002)";if("30"!=i.substr(o[0],2))throw"malformed CSR(code:003)";var s=n(i,o[0]);if(s.length<3)throw"malformed CSR(code:004)";return a.p8pubkeyhex=r(i,s[2]),a},je.getKeyID=function(e){var t=je,n=fe;"string"==typeof e&&-1!=e.indexOf("BEGIN ")&&(e=t.getKey(e));var r=Oe(t.getPEM(e)),a=n.getIdxbyList(r,0,[1]),i=n.getV(r,a).substring(2);return le.crypto.Util.hashHex(i,"sha1")},je.getJWKFromKey=function(e){var t={};if(e instanceof ae&&e.isPrivate)return t.kty="RSA",t.n=ye(e.n.toString(16)),t.e=ye(e.e.toString(16)),t.d=ye(e.d.toString(16)),t.p=ye(e.p.toString(16)),t.q=ye(e.q.toString(16)),t.dp=ye(e.dmp1.toString(16)),t.dq=ye(e.dmq1.toString(16)),t.qi=ye(e.coeff.toString(16)),t;if(e instanceof ae&&e.isPublic)return t.kty="RSA",t.n=ye(e.n.toString(16)),t.e=ye(e.e.toString(16)),t;if(e instanceof le.crypto.ECDSA&&e.isPrivate){if("P-256"!==(r=e.getShortNISTPCurveName())&&"P-384"!==r)throw"unsupported curve name for JWT: "+r;var n=e.getPublicKeyXYHex();return t.kty="EC",t.crv=r,t.x=ye(n.x),t.y=ye(n.y),t.d=ye(e.prvKeyHex),t}if(e instanceof le.crypto.ECDSA&&e.isPublic){var r;if("P-256"!==(r=e.getShortNISTPCurveName())&&"P-384"!==r)throw"unsupported curve name for JWT: "+r;return n=e.getPublicKeyXYHex(),t.kty="EC",t.crv=r,t.x=ye(n.x),t.y=ye(n.y),t}throw"not supported key object"},ae.getPosArrayOfChildrenFromHex=function(e){return fe.getChildIdx(e,0)},ae.getHexValueArrayOfChildrenFromHex=function(e){var t,n=fe.getV,r=n(e,(t=ae.getPosArrayOfChildrenFromHex(e))[0]),a=n(e,t[1]),i=n(e,t[2]),o=n(e,t[3]),s=n(e,t[4]),u=n(e,t[5]),l=n(e,t[6]),c=n(e,t[7]),d=n(e,t[8]);return(t=new Array).push(r,a,i,o,s,u,l,c,d),t},ae.prototype.readPrivateKeyFromPEMString=function(e){var t=Oe(e),n=ae.getHexValueArrayOfChildrenFromHex(t);this.setPrivateEx(n[1],n[2],n[3],n[4],n[5],n[6],n[7],n[8])},ae.prototype.readPKCS5PrvKeyHex=function(e){var t=ae.getHexValueArrayOfChildrenFromHex(e);this.setPrivateEx(t[1],t[2],t[3],t[4],t[5],t[6],t[7],t[8])},ae.prototype.readPKCS8PrvKeyHex=function(e){var t,n,r,a,i,o,s,u,l=fe,c=l.getVbyListEx;if(!1===l.isASN1HEX(e))throw new Error("not ASN.1 hex string");try{t=c(e,0,[2,0,1],"02"),n=c(e,0,[2,0,2],"02"),r=c(e,0,[2,0,3],"02"),a=c(e,0,[2,0,4],"02"),i=c(e,0,[2,0,5],"02"),o=c(e,0,[2,0,6],"02"),s=c(e,0,[2,0,7],"02"),u=c(e,0,[2,0,8],"02")}catch(e){throw new Error("malformed PKCS#8 plain RSA private key")}this.setPrivateEx(t,n,r,a,i,o,s,u)},ae.prototype.readPKCS5PubKeyHex=function(e){var t=fe,n=t.getV;if(!1===t.isASN1HEX(e))throw new Error("keyHex is not ASN.1 hex string");var r=t.getChildIdx(e,0);if(2!==r.length||"02"!==e.substr(r[0],2)||"02"!==e.substr(r[1],2))throw new Error("wrong hex for PKCS#5 public key");var a=n(e,r[0]),i=n(e,r[1]);this.setPublic(a,i)},ae.prototype.readPKCS8PubKeyHex=function(e){var t=fe;if(!1===t.isASN1HEX(e))throw new Error("not ASN.1 hex string");if("06092a864886f70d010101"!==t.getTLVbyListEx(e,0,[0,0]))throw new Error("not PKCS8 RSA public key");var n=t.getTLVbyListEx(e,0,[1,0]);this.readPKCS5PubKeyHex(n)},ae.prototype.readCertPubKeyHex=function(e,t){var n,r;(n=new ze).readCertHex(e),r=n.getPublicKeyHex(),this.readPKCS8PubKeyHex(r)};var Ge=new RegExp("[^0-9a-f]","gi");function He(e,t){for(var n="",r=t/4-e.length,a=0;a>24,(16711680&a)>>16,(65280&a)>>8,255&a])))),a+=1;return r}function qe(e){for(var t in le.crypto.Util.DIGESTINFOHEAD){var n=le.crypto.Util.DIGESTINFOHEAD[t],r=n.length;if(e.substring(0,r)==n)return[t,e.substring(r)]}return[]}function ze(e){var t,n=fe,r=n.getChildIdx,a=n.getV,i=n.getTLV,o=n.getVbyList,s=n.getVbyListEx,u=n.getTLVbyList,l=n.getTLVbyListEx,c=n.getIdxbyList,d=n.getIdxbyListEx,f=n.getVidx,v=n.oidname,m=n.hextooidstr,p=ze,h=Oe;try{t=le.asn1.x509.AlgorithmIdentifier.PSSNAME2ASN1TLV}catch(e){}this.HEX2STAG={"0c":"utf8",13:"prn",16:"ia5","1a":"vis","1e":"bmp"},this.hex=null,this.version=0,this.foffset=0,this.aExtInfo=null,this.getVersion=function(){return null===this.hex||0!==this.version?this.version:"a003020102"!==u(this.hex,0,[0,0])?(this.version=1,this.foffset=-1,1):(this.version=3,3)},this.getSerialNumberHex=function(){return s(this.hex,0,[0,0],"02")},this.getSignatureAlgorithmField=function(){var e=l(this.hex,0,[0,1]);return this.getAlgorithmIdentifierName(e)},this.getAlgorithmIdentifierName=function(e){for(var n in t)if(e===t[n])return n;return v(s(e,0,[0],"06"))},this.getIssuer=function(){return this.getX500Name(this.getIssuerHex())},this.getIssuerHex=function(){return u(this.hex,0,[0,3+this.foffset],"30")},this.getIssuerString=function(){return p.hex2dn(this.getIssuerHex())},this.getSubject=function(){return this.getX500Name(this.getSubjectHex())},this.getSubjectHex=function(){return u(this.hex,0,[0,5+this.foffset],"30")},this.getSubjectString=function(){return p.hex2dn(this.getSubjectHex())},this.getNotBefore=function(){var e=o(this.hex,0,[0,4+this.foffset,0]);return e=e.replace(/(..)/g,"%$1"),decodeURIComponent(e)},this.getNotAfter=function(){var e=o(this.hex,0,[0,4+this.foffset,1]);return e=e.replace(/(..)/g,"%$1"),decodeURIComponent(e)},this.getPublicKeyHex=function(){return n.getTLVbyList(this.hex,0,[0,6+this.foffset],"30")},this.getPublicKeyIdx=function(){return c(this.hex,0,[0,6+this.foffset],"30")},this.getPublicKeyContentIdx=function(){var e=this.getPublicKeyIdx();return c(this.hex,e,[1,0],"30")},this.getPublicKey=function(){return je.getKey(this.getPublicKeyHex(),null,"pkcs8pub")},this.getSignatureAlgorithmName=function(){var e=u(this.hex,0,[1],"30");return this.getAlgorithmIdentifierName(e)},this.getSignatureValueHex=function(){return o(this.hex,0,[2],"03",!0)},this.verifySignature=function(e){var t=this.getSignatureAlgorithmField(),n=this.getSignatureValueHex(),r=u(this.hex,0,[0],"30"),a=new le.crypto.Signature({alg:t});return a.init(e),a.updateHex(r),a.verify(n)},this.parseExt=function(e){var t,i,s;if(void 0===e){if(s=this.hex,3!==this.version)return-1;t=c(s,0,[0,7,0],"30"),i=r(s,t)}else{s=Oe(e);var u=c(s,0,[0,3,0,0],"06");if("2a864886f70d01090e"!=a(s,u))return void(this.aExtInfo=new Array);t=c(s,0,[0,3,0,1,0],"30"),i=r(s,t),this.hex=s}this.aExtInfo=new Array;for(var l=0;l1){var s=i(e,o[1]),u=this.getGeneralName(s);null!=u.uri&&(a.uri=u.uri)}if(o.length>2){var l=i(e,o[2]);"0101ff"==l&&(a.reqauth=!0),"010100"==l&&(a.reqauth=!1)}return a},this.getX500NameRule=function(e){for(var t=null,n=[],r=0;r0&&(e.ext=this.getExtParamArray()),e.sighex=this.getSignatureValueHex(),e},this.getExtParamArray=function(e){null==e&&-1!=d(this.hex,0,[0,"[3]"])&&(e=l(this.hex,0,[0,"[3]",0],"30"));for(var t=[],n=r(e,0),a=0;a0&&(l=new Array(n),(new te).nextBytes(l),l=String.fromCharCode.apply(String,l));var c=Ie(u(Ee("\0\0\0\0\0\0\0\0"+a+l))),d=[];for(r=0;r>8*s-o&255;for(m[0]&=~p,r=0;rthis.n.bitLength())return 0;var r=qe(this.doPublic(n).toString(16).replace(/^1f+00/,""));if(0==r.length)return!1;var a=r[0];return r[1]==function(e){return le.crypto.Util.hashString(e,a)}(e)},ae.prototype.verifyWithMessageHash=function(e,t){if(t.length!=Math.ceil(this.n.bitLength()/4))return!1;var n=ne(t,16);if(n.bitLength()>this.n.bitLength())return 0;var r=qe(this.doPublic(n).toString(16).replace(/^1f+00/,""));return 0!=r.length&&(r[0],r[1]==e)},ae.prototype.verifyPSS=function(e,t,n,r){var a=function(e){return le.crypto.Util.hashHex(e,n)}(Ee(e));return void 0===r&&(r=-1),this.verifyWithMessageHashPSS(a,t,n,r)},ae.prototype.verifyWithMessageHashPSS=function(e,t,n,r){if(t.length!=Math.ceil(this.n.bitLength()/4))return!1;var a,i=new I(t,16),o=function(e){return le.crypto.Util.hashHex(e,n)},s=Ie(e),u=s.length,l=this.n.bitLength()-1,c=Math.ceil(l/8);if(-1===r||void 0===r)r=u;else if(-2===r)r=c-u-2;else if(r<-2)throw new Error("invalid salt length");if(c>8*c-l&255;if(0!=(f.charCodeAt(0)&m))throw new Error("bits beyond keysize not zero");var p=Qe(v,f.length,o),h=[];for(a=0;a0&&-1==(":"+r.join(":")+":").indexOf(":"+g+":"))throw"algorithm '"+g+"' not accepted in the list";if("none"!=g&&null===t)throw"key shall be specified to verify.";if("string"==typeof t&&-1!=t.indexOf("-----BEGIN ")&&(t=je.getKey(t)),!("RS"!=v&&"PS"!=v||t instanceof a))throw"key shall be a RSAKey obj for RS* and PS* algs";if("ES"==v&&!(t instanceof l))throw"key shall be a ECDSA obj for ES* algs";var A=null;if(void 0===o.jwsalg2sigalg[h.alg])throw"unsupported alg name: "+g;if("none"==(A=o.jwsalg2sigalg[g]))throw"not supported";if("Hmac"==A.substr(0,4)){if(void 0===t)throw"hexadecimal key shall be specified for HMAC";var y=new c({alg:A,pass:t});return y.updateString(m),p==y.doFinal()}if(-1!=A.indexOf("withECDSA")){var S,b=null;try{b=l.concatSigToASN1Sig(p)}catch(e){return!1}return(S=new d({alg:A})).init(t),S.updateString(m),S.verify(b)}return(S=new d({alg:A})).init(t),S.updateString(m),S.verify(p)},le.jws.JWS.parse=function(e){var t,n,r,a=e.split("."),i={};if(2!=a.length&&3!=a.length)throw"malformed sJWS: wrong number of '.' splitted elements";return t=a[0],n=a[1],3==a.length&&(r=a[2]),i.headerObj=le.jws.JWS.readSafeJSONString(de(t)),i.payloadObj=le.jws.JWS.readSafeJSONString(de(n)),i.headerPP=JSON.stringify(i.headerObj,null," "),null==i.payloadObj?i.payloadPP=de(n):i.payloadPP=JSON.stringify(i.payloadObj,null," "),void 0!==r&&(i.sigHex=Se(r)),i},le.jws.JWS.verifyJWT=function(e,t,r){var a=le.jws,i=a.JWS,o=i.readSafeJSONString,s=i.inArray,u=i.includedArray,l=e.split("."),c=l[0],d=l[1],f=(Se(l[2]),o(de(c))),v=o(de(d));if(void 0===f.alg)return!1;if(void 0===r.alg)throw"acceptField.alg shall be specified";if(!s(f.alg,r.alg))return!1;if(void 0!==v.iss&&"object"===n(r.iss)&&!s(v.iss,r.iss))return!1;if(void 0!==v.sub&&"object"===n(r.sub)&&!s(v.sub,r.sub))return!1;if(void 0!==v.aud&&"object"===n(r.aud))if("string"==typeof v.aud){if(!s(v.aud,r.aud))return!1}else if("object"==n(v.aud)&&!u(v.aud,r.aud))return!1;var m=a.IntDate.getNow();return void 0!==r.verifyAt&&"number"==typeof r.verifyAt&&(m=r.verifyAt),void 0!==r.gracePeriod&&"number"==typeof r.gracePeriod||(r.gracePeriod=0),!(void 0!==v.exp&&"number"==typeof v.exp&&v.exp+r.gracePeriodt.length&&(n=t.length);for(var r=0;r=o())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+o().toString(16)+" bytes");return 0|e}function m(e,t){if(u.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var r=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return j(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return G(e).length;default:if(r)return j(e).length;t=(""+t).toLowerCase(),r=!0}}function p(e,t,n){var r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return P(this,t,n);case"utf8":case"utf-8":return D(this,t,n);case"ascii":return M(this,t,n);case"latin1":case"binary":return O(this,t,n);case"base64":return C(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return T(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function h(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function g(e,t,n,r,a){if(0===e.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=a?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(a)return-1;n=e.length-1}else if(n<0){if(!a)return-1;n=0}if("string"==typeof t&&(t=u.from(t,r)),u.isBuffer(t))return 0===t.length?-1:A(e,t,n,r,a);if("number"==typeof t)return t&=255,u.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?a?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):A(e,[t],n,r,a);throw new TypeError("val must be string, number or Buffer")}function A(e,t,n,r,a){var i,o=1,s=e.length,u=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;o=2,s/=2,u/=2,n/=2}function l(e,t){return 1===o?e[t]:e.readUInt16BE(t*o)}if(a){var c=-1;for(i=n;is&&(n=s-u),i=n;i>=0;i--){for(var d=!0,f=0;fa&&(r=a):r=a;var i=t.length;if(i%2!=0)throw new TypeError("Invalid hex string");r>i/2&&(r=i/2);for(var o=0;o>8,a=n%256,i.push(a),i.push(r);return i}(t,e.length-n),e,n,r)}function C(e,t,n){return 0===t&&n===e.length?r.fromByteArray(e):r.fromByteArray(e.slice(t,n))}function D(e,t,n){n=Math.min(e.length,n);for(var r=[],a=t;a239?4:l>223?3:l>191?2:1;if(a+d<=n)switch(d){case 1:l<128&&(c=l);break;case 2:128==(192&(i=e[a+1]))&&(u=(31&l)<<6|63&i)>127&&(c=u);break;case 3:i=e[a+1],o=e[a+2],128==(192&i)&&128==(192&o)&&(u=(15&l)<<12|(63&i)<<6|63&o)>2047&&(u<55296||u>57343)&&(c=u);break;case 4:i=e[a+1],o=e[a+2],s=e[a+3],128==(192&i)&&128==(192&o)&&128==(192&s)&&(u=(15&l)<<18|(63&i)<<12|(63&o)<<6|63&s)>65535&&u<1114112&&(c=u)}null===c?(c=65533,d=1):c>65535&&(c-=65536,r.push(c>>>10&1023|55296),c=56320|1023&c),r.push(c),a+=d}return function(e){var t=e.length;if(t<=_)return String.fromCharCode.apply(String,e);for(var n="",r=0;r0&&(e=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(e+=" ... ")),""},u.prototype.compare=function(e,t,n,r,a){if(!u.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===a&&(a=this.length),t<0||n>e.length||r<0||a>this.length)throw new RangeError("out of range index");if(r>=a&&t>=n)return 0;if(r>=a)return-1;if(t>=n)return 1;if(this===e)return 0;for(var i=(a>>>=0)-(r>>>=0),o=(n>>>=0)-(t>>>=0),s=Math.min(i,o),l=this.slice(r,a),c=e.slice(t,n),d=0;da)&&(n=a),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var i=!1;;)switch(r){case"hex":return y(this,e,t,n);case"utf8":case"utf-8":return S(this,e,t,n);case"ascii":return b(this,e,t,n);case"latin1":case"binary":return w(this,e,t,n);case"base64":return I(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return E(this,e,t,n);default:if(i)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),i=!0}},u.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var _=4096;function M(e,t,n){var r="";n=Math.min(e.length,n);for(var a=t;ar)&&(n=r);for(var a="",i=t;in)throw new RangeError("Trying to access beyond buffer length")}function R(e,t,n,r,a,i){if(!u.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>a||te.length)throw new RangeError("Index out of range")}function L(e,t,n,r){t<0&&(t=65535+t+1);for(var a=0,i=Math.min(e.length-n,2);a>>8*(r?a:1-a)}function k(e,t,n,r){t<0&&(t=4294967295+t+1);for(var a=0,i=Math.min(e.length-n,4);a>>8*(r?a:3-a)&255}function N(e,t,n,r,a,i){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function F(e,t,n,r,i){return i||N(e,0,n,4),a.write(e,t,n,r,23,4),n+4}function B(e,t,n,r,i){return i||N(e,0,n,8),a.write(e,t,n,r,52,8),n+8}u.prototype.slice=function(e,t){var n,r=this.length;if((e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t0&&(a*=256);)r+=this[e+--t]*a;return r},u.prototype.readUInt8=function(e,t){return t||x(e,1,this.length),this[e]},u.prototype.readUInt16LE=function(e,t){return t||x(e,2,this.length),this[e]|this[e+1]<<8},u.prototype.readUInt16BE=function(e,t){return t||x(e,2,this.length),this[e]<<8|this[e+1]},u.prototype.readUInt32LE=function(e,t){return t||x(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},u.prototype.readUInt32BE=function(e,t){return t||x(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},u.prototype.readIntLE=function(e,t,n){e|=0,t|=0,n||x(e,t,this.length);for(var r=this[e],a=1,i=0;++i=(a*=128)&&(r-=Math.pow(2,8*t)),r},u.prototype.readIntBE=function(e,t,n){e|=0,t|=0,n||x(e,t,this.length);for(var r=t,a=1,i=this[e+--r];r>0&&(a*=256);)i+=this[e+--r]*a;return i>=(a*=128)&&(i-=Math.pow(2,8*t)),i},u.prototype.readInt8=function(e,t){return t||x(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},u.prototype.readInt16LE=function(e,t){t||x(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},u.prototype.readInt16BE=function(e,t){t||x(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},u.prototype.readInt32LE=function(e,t){return t||x(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},u.prototype.readInt32BE=function(e,t){return t||x(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},u.prototype.readFloatLE=function(e,t){return t||x(e,4,this.length),a.read(this,e,!0,23,4)},u.prototype.readFloatBE=function(e,t){return t||x(e,4,this.length),a.read(this,e,!1,23,4)},u.prototype.readDoubleLE=function(e,t){return t||x(e,8,this.length),a.read(this,e,!0,52,8)},u.prototype.readDoubleBE=function(e,t){return t||x(e,8,this.length),a.read(this,e,!1,52,8)},u.prototype.writeUIntLE=function(e,t,n,r){e=+e,t|=0,n|=0,r||R(this,e,t,n,Math.pow(2,8*n)-1,0);var a=1,i=0;for(this[t]=255&e;++i=0&&(i*=256);)this[t+a]=e/i&255;return t+n},u.prototype.writeUInt8=function(e,t,n){return e=+e,t|=0,n||R(this,e,t,1,255,0),u.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},u.prototype.writeUInt16LE=function(e,t,n){return e=+e,t|=0,n||R(this,e,t,2,65535,0),u.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):L(this,e,t,!0),t+2},u.prototype.writeUInt16BE=function(e,t,n){return e=+e,t|=0,n||R(this,e,t,2,65535,0),u.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):L(this,e,t,!1),t+2},u.prototype.writeUInt32LE=function(e,t,n){return e=+e,t|=0,n||R(this,e,t,4,4294967295,0),u.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):k(this,e,t,!0),t+4},u.prototype.writeUInt32BE=function(e,t,n){return e=+e,t|=0,n||R(this,e,t,4,4294967295,0),u.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):k(this,e,t,!1),t+4},u.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t|=0,!r){var a=Math.pow(2,8*n-1);R(this,e,t,n,a-1,-a)}var i=0,o=1,s=0;for(this[t]=255&e;++i>0)-s&255;return t+n},u.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t|=0,!r){var a=Math.pow(2,8*n-1);R(this,e,t,n,a-1,-a)}var i=n-1,o=1,s=0;for(this[t+i]=255&e;--i>=0&&(o*=256);)e<0&&0===s&&0!==this[t+i+1]&&(s=1),this[t+i]=(e/o>>0)-s&255;return t+n},u.prototype.writeInt8=function(e,t,n){return e=+e,t|=0,n||R(this,e,t,1,127,-128),u.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},u.prototype.writeInt16LE=function(e,t,n){return e=+e,t|=0,n||R(this,e,t,2,32767,-32768),u.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):L(this,e,t,!0),t+2},u.prototype.writeInt16BE=function(e,t,n){return e=+e,t|=0,n||R(this,e,t,2,32767,-32768),u.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):L(this,e,t,!1),t+2},u.prototype.writeInt32LE=function(e,t,n){return e=+e,t|=0,n||R(this,e,t,4,2147483647,-2147483648),u.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):k(this,e,t,!0),t+4},u.prototype.writeInt32BE=function(e,t,n){return e=+e,t|=0,n||R(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),u.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):k(this,e,t,!1),t+4},u.prototype.writeFloatLE=function(e,t,n){return F(this,e,t,!0,n)},u.prototype.writeFloatBE=function(e,t,n){return F(this,e,t,!1,n)},u.prototype.writeDoubleLE=function(e,t,n){return B(this,e,t,!0,n)},u.prototype.writeDoubleBE=function(e,t,n){return B(this,e,t,!1,n)},u.prototype.copy=function(e,t,n,r){if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t=0;--a)e[a+t]=this[a+n];else if(i<1e3||!u.TYPED_ARRAY_SUPPORT)for(a=0;a>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(i=t;i55295&&n<57344){if(!a){if(n>56319){(t-=3)>-1&&i.push(239,191,189);continue}if(o+1===r){(t-=3)>-1&&i.push(239,191,189);continue}a=n;continue}if(n<56320){(t-=3)>-1&&i.push(239,191,189),a=n;continue}n=65536+(a-55296<<10|n-56320)}else a&&(t-=3)>-1&&i.push(239,191,189);if(a=null,n<128){if((t-=1)<0)break;i.push(n)}else if(n<2048){if((t-=2)<0)break;i.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;i.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;i.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return i}function G(e){return r.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(U,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function H(e,t,n,r){for(var a=0;a=t.length||a>=e.length);++a)t[a+n]=e[a];return a}}).call(this,n(29))},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){"use strict";t.byteLength=function(e){var t=l(e),n=t[0],r=t[1];return 3*(n+r)/4-r},t.toByteArray=function(e){var t,n,r=l(e),o=r[0],s=r[1],u=new i(function(e,t,n){return 3*(t+n)/4-n}(0,o,s)),c=0,d=s>0?o-4:o;for(n=0;n>16&255,u[c++]=t>>8&255,u[c++]=255&t;return 2===s&&(t=a[e.charCodeAt(n)]<<2|a[e.charCodeAt(n+1)]>>4,u[c++]=255&t),1===s&&(t=a[e.charCodeAt(n)]<<10|a[e.charCodeAt(n+1)]<<4|a[e.charCodeAt(n+2)]>>2,u[c++]=t>>8&255,u[c++]=255&t),u},t.fromByteArray=function(e){for(var t,n=e.length,a=n%3,i=[],o=16383,s=0,u=n-a;su?u:s+o));return 1===a?(t=e[n-1],i.push(r[t>>2]+r[t<<4&63]+"==")):2===a&&(t=(e[n-2]<<8)+e[n-1],i.push(r[t>>10]+r[t>>4&63]+r[t<<2&63]+"=")),i.join("")};for(var r=[],a=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,u=o.length;s0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function c(e,t,n){for(var a,i,o=[],s=t;s>18&63]+r[i>>12&63]+r[i>>6&63]+r[63&i]);return o.join("")}a["-".charCodeAt(0)]=62,a["_".charCodeAt(0)]=63},function(e,t){t.read=function(e,t,n,r,a){var i,o,s=8*a-r-1,u=(1<>1,c=-7,d=n?a-1:0,f=n?-1:1,v=e[t+d];for(d+=f,i=v&(1<<-c)-1,v>>=-c,c+=s;c>0;i=256*i+e[t+d],d+=f,c-=8);for(o=i&(1<<-c)-1,i>>=-c,c+=r;c>0;o=256*o+e[t+d],d+=f,c-=8);if(0===i)i=1-l;else{if(i===u)return o?NaN:1/0*(v?-1:1);o+=Math.pow(2,r),i-=l}return(v?-1:1)*o*Math.pow(2,i-r)},t.write=function(e,t,n,r,a,i){var o,s,u,l=8*i-a-1,c=(1<>1,f=23===a?Math.pow(2,-24)-Math.pow(2,-77):0,v=r?0:i-1,m=r?1:-1,p=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,o=c):(o=Math.floor(Math.log(t)/Math.LN2),t*(u=Math.pow(2,-o))<1&&(o--,u*=2),(t+=o+d>=1?f/u:f*Math.pow(2,1-d))*u>=2&&(o++,u/=2),o+d>=c?(s=0,o=c):o+d>=1?(s=(t*u-1)*Math.pow(2,a),o+=d):(s=t*Math.pow(2,d-1)*Math.pow(2,a),o=0));a>=8;e[n+v]=255&s,v+=m,s/=256,a-=8);for(o=o<0;e[n+v]=255&o,v+=m,o/=256,l-=8);e[n+v-m]|=128*p}},function(e,t){var n={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==n.call(e)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=e.jws,n=e.KeyUtil,a=e.X509,i=e.crypto,o=e.hextob64u,s=e.b64tohex,u=e.AllowedSigningAlgs;return function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e)}return e.parseJwt=function e(n){r.Log.debug("JoseUtil.parseJwt");try{var a=t.JWS.parse(n);return{header:a.headerObj,payload:a.payloadObj}}catch(e){r.Log.error(e)}},e.validateJwt=function(t,i,o,u,l,c,d){r.Log.debug("JoseUtil.validateJwt");try{if("RSA"===i.kty)if(i.e&&i.n)i=n.getKey(i);else{if(!i.x5c||!i.x5c.length)return r.Log.error("JoseUtil.validateJwt: RSA key missing key material",i),Promise.reject(new Error("RSA key missing key material"));var f=s(i.x5c[0]);i=a.getPublicKeyFromCertHex(f)}else{if("EC"!==i.kty)return r.Log.error("JoseUtil.validateJwt: Unsupported key type",i&&i.kty),Promise.reject(new Error(i.kty));if(!(i.crv&&i.x&&i.y))return r.Log.error("JoseUtil.validateJwt: EC key missing key material",i),Promise.reject(new Error("EC key missing key material"));i=n.getKey(i)}return e._validateJwt(t,i,o,u,l,c,d)}catch(e){return r.Log.error(e&&e.message||e),Promise.reject("JWT validation failed")}},e.validateJwtAttributes=function(t,n,a,i,o,s){i||(i=0),o||(o=parseInt(Date.now()/1e3));var u=e.parseJwt(t).payload;if(!u.iss)return r.Log.error("JoseUtil._validateJwt: issuer was not provided"),Promise.reject(new Error("issuer was not provided"));if(u.iss!==n)return r.Log.error("JoseUtil._validateJwt: Invalid issuer in token",u.iss),Promise.reject(new Error("Invalid issuer in token: "+u.iss));if(!u.aud)return r.Log.error("JoseUtil._validateJwt: aud was not provided"),Promise.reject(new Error("aud was not provided"));if(!(u.aud===a||Array.isArray(u.aud)&&u.aud.indexOf(a)>=0))return r.Log.error("JoseUtil._validateJwt: Invalid audience in token",u.aud),Promise.reject(new Error("Invalid audience in token: "+u.aud));if(u.azp&&u.azp!==a)return r.Log.error("JoseUtil._validateJwt: Invalid azp in token",u.azp),Promise.reject(new Error("Invalid azp in token: "+u.azp));if(!s){var l=o+i,c=o-i;if(!u.iat)return r.Log.error("JoseUtil._validateJwt: iat was not provided"),Promise.reject(new Error("iat was not provided"));if(l1&&void 0!==arguments[1]?arguments[1]:"#";i(this,e);var r=a.UrlUtility.parseUrlFragment(t,n);this.error=r.error,this.error_description=r.error_description,this.error_uri=r.error_uri,this.code=r.code,this.state=r.state,this.id_token=r.id_token,this.session_state=r.session_state,this.access_token=r.access_token,this.token_type=r.token_type,this.scope=r.scope,this.profile=void 0,this.expires_in=r.expires_in}return r(e,[{key:"expires_in",get:function(){if(this.expires_at){var e=parseInt(Date.now()/1e3);return this.expires_at-e}},set:function(e){var t=parseInt(e);if("number"==typeof t&&t>0){var n=parseInt(Date.now()/1e3);this.expires_at=n+t}}},{key:"expired",get:function(){var e=this.expires_in;if(void 0!==e)return e<=0}},{key:"scopes",get:function(){return(this.scope||"").split(" ")}},{key:"isOpenIdConnect",get:function(){return this.scopes.indexOf("openid")>=0||!!this.id_token}}]),e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SignoutRequest=void 0;var r=n(0),a=n(3),i=n(9);t.SignoutRequest=function e(t){var n=t.url,o=t.id_token_hint,s=t.post_logout_redirect_uri,u=t.data,l=t.extraQueryParams,c=t.request_type;if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),!n)throw r.Log.error("SignoutRequest.ctor: No url passed"),new Error("url");for(var d in o&&(n=a.UrlUtility.addQueryParam(n,"id_token_hint",o)),s&&(n=a.UrlUtility.addQueryParam(n,"post_logout_redirect_uri",s),u&&(this.state=new i.State({data:u,request_type:c}),n=a.UrlUtility.addQueryParam(n,"state",this.state.id))),l)n=a.UrlUtility.addQueryParam(n,d,l[d]);this.url=n}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SignoutResponse=void 0;var r=n(3);t.SignoutResponse=function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e);var n=r.UrlUtility.parseUrlFragment(t,"?");this.error=n.error,this.error_description=n.error_description,this.error_uri=n.error_uri,this.state=n.state}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.InMemoryWebStorage=void 0;var r=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{},r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:l.SilentRenewService,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:c.SessionMonitor,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:f.TokenRevocationClient,d=arguments.length>4&&void 0!==arguments[4]?arguments[4]:v.TokenClient,g=arguments.length>5&&void 0!==arguments[5]?arguments[5]:m.JoseUtil;p(this,t),n instanceof o.UserManagerSettings||(n=new o.UserManagerSettings(n));var A=h(this,e.call(this,n));return A._events=new u.UserManagerEvents(n),A._silentRenewService=new r(A),A.settings.automaticSilentRenew&&(a.Log.debug("UserManager.ctor: automaticSilentRenew is configured, setting up silent renew"),A.startSilentRenew()),A.settings.monitorSession&&(a.Log.debug("UserManager.ctor: monitorSession is configured, setting up session monitor"),A._sessionMonitor=new i(A)),A._tokenRevocationClient=new s(A._settings),A._tokenClient=new d(A._settings),A._joseUtil=g,A}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.getUser=function(){var e=this;return this._loadUser().then((function(t){return t?(a.Log.info("UserManager.getUser: user loaded"),e._events.load(t,!1),t):(a.Log.info("UserManager.getUser: user not found in storage"),null)}))},t.prototype.removeUser=function(){var e=this;return this.storeUser(null).then((function(){a.Log.info("UserManager.removeUser: user removed from storage"),e._events.unload()}))},t.prototype.signinRedirect=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="si:r";var t={useReplaceToNavigate:e.useReplaceToNavigate};return this._signinStart(e,this._redirectNavigator,t).then((function(){a.Log.info("UserManager.signinRedirect: successful")}))},t.prototype.signinRedirectCallback=function(e){return this._signinEnd(e||this._redirectNavigator.url).then((function(e){return e.profile&&e.profile.sub?a.Log.info("UserManager.signinRedirectCallback: successful, signed in sub: ",e.profile.sub):a.Log.info("UserManager.signinRedirectCallback: no sub"),e}))},t.prototype.signinPopup=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="si:p";var t=e.redirect_uri||this.settings.popup_redirect_uri||this.settings.redirect_uri;return t?(e.redirect_uri=t,e.display="popup",this._signin(e,this._popupNavigator,{startUrl:t,popupWindowFeatures:e.popupWindowFeatures||this.settings.popupWindowFeatures,popupWindowTarget:e.popupWindowTarget||this.settings.popupWindowTarget}).then((function(e){return e&&(e.profile&&e.profile.sub?a.Log.info("UserManager.signinPopup: signinPopup successful, signed in sub: ",e.profile.sub):a.Log.info("UserManager.signinPopup: no sub")),e}))):(a.Log.error("UserManager.signinPopup: No popup_redirect_uri or redirect_uri configured"),Promise.reject(new Error("No popup_redirect_uri or redirect_uri configured")))},t.prototype.signinPopupCallback=function(e){return this._signinCallback(e,this._popupNavigator).then((function(e){return e&&(e.profile&&e.profile.sub?a.Log.info("UserManager.signinPopupCallback: successful, signed in sub: ",e.profile.sub):a.Log.info("UserManager.signinPopupCallback: no sub")),e})).catch((function(e){a.Log.error(e.message)}))},t.prototype.signinSilent=function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return t=Object.assign({},t),this._loadUser().then((function(n){return n&&n.refresh_token?(t.refresh_token=n.refresh_token,e._useRefreshToken(t)):(t.request_type="si:s",t.id_token_hint=t.id_token_hint||e.settings.includeIdTokenInSilentRenew&&n&&n.id_token,n&&e._settings.validateSubOnSilentRenew&&(a.Log.debug("UserManager.signinSilent, subject prior to silent renew: ",n.profile.sub),t.current_sub=n.profile.sub),e._signinSilentIframe(t))}))},t.prototype._useRefreshToken=function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this._tokenClient.exchangeRefreshToken(t).then((function(t){return t?t.access_token?e._loadUser().then((function(n){if(n){var r=Promise.resolve();return t.id_token&&(r=e._validateIdTokenFromTokenRefreshToken(n.profile,t.id_token)),r.then((function(){return a.Log.debug("UserManager._useRefreshToken: refresh token response success"),n.id_token=t.id_token||n.id_token,n.access_token=t.access_token,n.refresh_token=t.refresh_token||n.refresh_token,n.expires_in=t.expires_in,e.storeUser(n).then((function(){return e._events.load(n),n}))}))}return null})):(a.Log.error("UserManager._useRefreshToken: No access token returned from token endpoint"),Promise.reject("No access token returned from token endpoint")):(a.Log.error("UserManager._useRefreshToken: No response returned from token endpoint"),Promise.reject("No response returned from token endpoint"))}))},t.prototype._validateIdTokenFromTokenRefreshToken=function(e,t){var n=this;return this._metadataService.getIssuer().then((function(r){return n.settings.getEpochTime().then((function(i){return n._joseUtil.validateJwtAttributes(t,r,n._settings.client_id,n._settings.clockSkew,i).then((function(t){return t?t.sub!==e.sub?(a.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: sub in id_token does not match current sub"),Promise.reject(new Error("sub in id_token does not match current sub"))):t.auth_time&&t.auth_time!==e.auth_time?(a.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: auth_time in id_token does not match original auth_time"),Promise.reject(new Error("auth_time in id_token does not match original auth_time"))):t.azp&&t.azp!==e.azp?(a.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: azp in id_token does not match original azp"),Promise.reject(new Error("azp in id_token does not match original azp"))):!t.azp&&e.azp?(a.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: azp not in id_token, but present in original id_token"),Promise.reject(new Error("azp not in id_token, but present in original id_token"))):void 0:(a.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: Failed to validate id_token"),Promise.reject(new Error("Failed to validate id_token")))}))}))}))},t.prototype._signinSilentIframe=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.redirect_uri||this.settings.silent_redirect_uri||this.settings.redirect_uri;return t?(e.redirect_uri=t,e.prompt=e.prompt||"none",this._signin(e,this._iframeNavigator,{startUrl:t,silentRequestTimeout:e.silentRequestTimeout||this.settings.silentRequestTimeout}).then((function(e){return e&&(e.profile&&e.profile.sub?a.Log.info("UserManager.signinSilent: successful, signed in sub: ",e.profile.sub):a.Log.info("UserManager.signinSilent: no sub")),e}))):(a.Log.error("UserManager.signinSilent: No silent_redirect_uri configured"),Promise.reject(new Error("No silent_redirect_uri configured")))},t.prototype.signinSilentCallback=function(e){return this._signinCallback(e,this._iframeNavigator).then((function(e){return e&&(e.profile&&e.profile.sub?a.Log.info("UserManager.signinSilentCallback: successful, signed in sub: ",e.profile.sub):a.Log.info("UserManager.signinSilentCallback: no sub")),e}))},t.prototype.signinCallback=function(e){var t=this;return this.readSigninResponseState(e).then((function(n){var r=n.state;return n.response,"si:r"===r.request_type?t.signinRedirectCallback(e):"si:p"===r.request_type?t.signinPopupCallback(e):"si:s"===r.request_type?t.signinSilentCallback(e):Promise.reject(new Error("invalid response_type in state"))}))},t.prototype.signoutCallback=function(e,t){var n=this;return this.readSignoutResponseState(e).then((function(r){var a=r.state,i=r.response;return a?"so:r"===a.request_type?n.signoutRedirectCallback(e):"so:p"===a.request_type?n.signoutPopupCallback(e,t):Promise.reject(new Error("invalid response_type in state")):i}))},t.prototype.querySessionStatus=function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(t=Object.assign({},t)).request_type="si:s";var n=t.redirect_uri||this.settings.silent_redirect_uri||this.settings.redirect_uri;return n?(t.redirect_uri=n,t.prompt="none",t.response_type=t.response_type||this.settings.query_status_response_type,t.scope=t.scope||"openid",t.skipUserInfo=!0,this._signinStart(t,this._iframeNavigator,{startUrl:n,silentRequestTimeout:t.silentRequestTimeout||this.settings.silentRequestTimeout}).then((function(t){return e.processSigninResponse(t.url).then((function(e){if(a.Log.debug("UserManager.querySessionStatus: got signin response"),e.session_state&&e.profile.sub)return a.Log.info("UserManager.querySessionStatus: querySessionStatus success for sub: ",e.profile.sub),{session_state:e.session_state,sub:e.profile.sub,sid:e.profile.sid};a.Log.info("querySessionStatus successful, user not authenticated")})).catch((function(t){if(t.session_state&&e.settings.monitorAnonymousSession&&("login_required"==t.message||"consent_required"==t.message||"interaction_required"==t.message||"account_selection_required"==t.message))return a.Log.info("UserManager.querySessionStatus: querySessionStatus success for anonymous user"),{session_state:t.session_state};throw t}))}))):(a.Log.error("UserManager.querySessionStatus: No silent_redirect_uri configured"),Promise.reject(new Error("No silent_redirect_uri configured")))},t.prototype._signin=function(e,t){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._signinStart(e,t,r).then((function(t){return n._signinEnd(t.url,e)}))},t.prototype._signinStart=function(e,t){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return t.prepare(r).then((function(t){return a.Log.debug("UserManager._signinStart: got navigator window handle"),n.createSigninRequest(e).then((function(e){return a.Log.debug("UserManager._signinStart: got signin request"),r.url=e.url,r.id=e.state.id,t.navigate(r)})).catch((function(e){throw t.close&&(a.Log.debug("UserManager._signinStart: Error after preparing navigator, closing navigator window"),t.close()),e}))}))},t.prototype._signinEnd=function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.processSigninResponse(e).then((function(e){a.Log.debug("UserManager._signinEnd: got signin response");var r=new s.User(e);if(n.current_sub){if(n.current_sub!==r.profile.sub)return a.Log.debug("UserManager._signinEnd: current user does not match user returned from signin. sub from signin: ",r.profile.sub),Promise.reject(new Error("login_required"));a.Log.debug("UserManager._signinEnd: current user matches user returned from signin")}return t.storeUser(r).then((function(){return a.Log.debug("UserManager._signinEnd: user stored"),t._events.load(r),r}))}))},t.prototype._signinCallback=function(e,t){a.Log.debug("UserManager._signinCallback");var n="query"===this._settings.response_mode||!this._settings.response_mode&&d.SigninRequest.isCode(this._settings.response_type)?"?":"#";return t.callback(e,void 0,n)},t.prototype.signoutRedirect=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="so:r";var t=e.post_logout_redirect_uri||this.settings.post_logout_redirect_uri;t&&(e.post_logout_redirect_uri=t);var n={useReplaceToNavigate:e.useReplaceToNavigate};return this._signoutStart(e,this._redirectNavigator,n).then((function(){a.Log.info("UserManager.signoutRedirect: successful")}))},t.prototype.signoutRedirectCallback=function(e){return this._signoutEnd(e||this._redirectNavigator.url).then((function(e){return a.Log.info("UserManager.signoutRedirectCallback: successful"),e}))},t.prototype.signoutPopup=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="so:p";var t=e.post_logout_redirect_uri||this.settings.popup_post_logout_redirect_uri||this.settings.post_logout_redirect_uri;return e.post_logout_redirect_uri=t,e.display="popup",e.post_logout_redirect_uri&&(e.state=e.state||{}),this._signout(e,this._popupNavigator,{startUrl:t,popupWindowFeatures:e.popupWindowFeatures||this.settings.popupWindowFeatures,popupWindowTarget:e.popupWindowTarget||this.settings.popupWindowTarget}).then((function(){a.Log.info("UserManager.signoutPopup: successful")}))},t.prototype.signoutPopupCallback=function(e,t){return void 0===t&&"boolean"==typeof e&&(t=e,e=null),this._popupNavigator.callback(e,t,"?").then((function(){a.Log.info("UserManager.signoutPopupCallback: successful")}))},t.prototype._signout=function(e,t){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._signoutStart(e,t,r).then((function(e){return n._signoutEnd(e.url)}))},t.prototype._signoutStart=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=this,n=arguments[1],r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return n.prepare(r).then((function(n){return a.Log.debug("UserManager._signoutStart: got navigator window handle"),t._loadUser().then((function(i){return a.Log.debug("UserManager._signoutStart: loaded current user from storage"),(t._settings.revokeAccessTokenOnSignout?t._revokeInternal(i):Promise.resolve()).then((function(){var o=e.id_token_hint||i&&i.id_token;return o&&(a.Log.debug("UserManager._signoutStart: Setting id_token into signout request"),e.id_token_hint=o),t.removeUser().then((function(){return a.Log.debug("UserManager._signoutStart: user removed, creating signout request"),t.createSignoutRequest(e).then((function(e){return a.Log.debug("UserManager._signoutStart: got signout request"),r.url=e.url,e.state&&(r.id=e.state.id),n.navigate(r)}))}))}))})).catch((function(e){throw n.close&&(a.Log.debug("UserManager._signoutStart: Error after preparing navigator, closing navigator window"),n.close()),e}))}))},t.prototype._signoutEnd=function(e){return this.processSignoutResponse(e).then((function(e){return a.Log.debug("UserManager._signoutEnd: got signout response"),e}))},t.prototype.revokeAccessToken=function(){var e=this;return this._loadUser().then((function(t){return e._revokeInternal(t,!0).then((function(n){if(n)return a.Log.debug("UserManager.revokeAccessToken: removing token properties from user and re-storing"),t.access_token=null,t.refresh_token=null,t.expires_at=null,t.token_type=null,e.storeUser(t).then((function(){a.Log.debug("UserManager.revokeAccessToken: user stored"),e._events.load(t)}))}))})).then((function(){a.Log.info("UserManager.revokeAccessToken: access token revoked successfully")}))},t.prototype._revokeInternal=function(e,t){var n=this;if(e){var r=e.access_token,i=e.refresh_token;return this._revokeAccessTokenInternal(r,t).then((function(e){return n._revokeRefreshTokenInternal(i,t).then((function(t){return e||t||a.Log.debug("UserManager.revokeAccessToken: no need to revoke due to no token(s), or JWT format"),e||t}))}))}return Promise.resolve(!1)},t.prototype._revokeAccessTokenInternal=function(e,t){return!e||e.indexOf(".")>=0?Promise.resolve(!1):this._tokenRevocationClient.revoke(e,t).then((function(){return!0}))},t.prototype._revokeRefreshTokenInternal=function(e,t){return e?this._tokenRevocationClient.revoke(e,t,"refresh_token").then((function(){return!0})):Promise.resolve(!1)},t.prototype.startSilentRenew=function(){this._silentRenewService.start()},t.prototype.stopSilentRenew=function(){this._silentRenewService.stop()},t.prototype._loadUser=function(){return this._userStore.get(this._userStoreKey).then((function(e){return e?(a.Log.debug("UserManager._loadUser: user storageString loaded"),s.User.fromStorageString(e)):(a.Log.debug("UserManager._loadUser: no user storageString"),null)}))},t.prototype.storeUser=function(e){if(e){a.Log.debug("UserManager.storeUser: storing user");var t=e.toStorageString();return this._userStore.set(this._userStoreKey,t)}return a.Log.debug("storeUser.storeUser: removing user"),this._userStore.remove(this._userStoreKey)},r(t,[{key:"_redirectNavigator",get:function(){return this.settings.redirectNavigator}},{key:"_popupNavigator",get:function(){return this.settings.popupNavigator}},{key:"_iframeNavigator",get:function(){return this.settings.iframeNavigator}},{key:"_userStore",get:function(){return this.settings.userStore}},{key:"events",get:function(){return this._events}},{key:"_userStoreKey",get:function(){return"user:"+this.settings.authority+":"+this.settings.client_id}}]),t}(i.OidcClient)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.UserManagerSettings=void 0;var r=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{},r=n.popup_redirect_uri,a=n.popup_post_logout_redirect_uri,v=n.popupWindowFeatures,m=n.popupWindowTarget,p=n.silent_redirect_uri,h=n.silentRequestTimeout,g=n.automaticSilentRenew,A=void 0!==g&&g,y=n.validateSubOnSilentRenew,S=void 0!==y&&y,b=n.includeIdTokenInSilentRenew,w=void 0===b||b,I=n.monitorSession,E=void 0===I||I,C=n.monitorAnonymousSession,D=void 0!==C&&C,_=n.checkSessionInterval,M=void 0===_?2e3:_,O=n.stopCheckSessionOnError,P=void 0===O||O,T=n.query_status_response_type,x=n.revokeAccessTokenOnSignout,R=void 0!==x&&x,L=n.accessTokenExpiringNotificationTime,k=void 0===L?60:L,N=n.redirectNavigator,F=void 0===N?new i.RedirectNavigator:N,B=n.popupNavigator,U=void 0===B?new o.PopupNavigator:B,V=n.iframeNavigator,j=void 0===V?new s.IFrameNavigator:V,G=n.userStore,H=void 0===G?new u.WebStorageStateStore({store:l.Global.sessionStorage}):G;d(this,t);var Q=f(this,e.call(this,arguments[0]));return Q._popup_redirect_uri=r,Q._popup_post_logout_redirect_uri=a,Q._popupWindowFeatures=v,Q._popupWindowTarget=m,Q._silent_redirect_uri=p,Q._silentRequestTimeout=h,Q._automaticSilentRenew=A,Q._validateSubOnSilentRenew=S,Q._includeIdTokenInSilentRenew=w,Q._accessTokenExpiringNotificationTime=k,Q._monitorSession=E,Q._monitorAnonymousSession=D,Q._checkSessionInterval=M,Q._stopCheckSessionOnError=P,T?Q._query_status_response_type=T:arguments[0]&&arguments[0].response_type?Q._query_status_response_type=c.SigninRequest.isOidc(arguments[0].response_type)?"id_token":"code":Q._query_status_response_type="id_token",Q._revokeAccessTokenOnSignout=R,Q._redirectNavigator=F,Q._popupNavigator=U,Q._iframeNavigator=j,Q._userStore=H,Q}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),r(t,[{key:"popup_redirect_uri",get:function(){return this._popup_redirect_uri}},{key:"popup_post_logout_redirect_uri",get:function(){return this._popup_post_logout_redirect_uri}},{key:"popupWindowFeatures",get:function(){return this._popupWindowFeatures}},{key:"popupWindowTarget",get:function(){return this._popupWindowTarget}},{key:"silent_redirect_uri",get:function(){return this._silent_redirect_uri}},{key:"silentRequestTimeout",get:function(){return this._silentRequestTimeout}},{key:"automaticSilentRenew",get:function(){return this._automaticSilentRenew}},{key:"validateSubOnSilentRenew",get:function(){return this._validateSubOnSilentRenew}},{key:"includeIdTokenInSilentRenew",get:function(){return this._includeIdTokenInSilentRenew}},{key:"accessTokenExpiringNotificationTime",get:function(){return this._accessTokenExpiringNotificationTime}},{key:"monitorSession",get:function(){return this._monitorSession}},{key:"monitorAnonymousSession",get:function(){return this._monitorAnonymousSession}},{key:"checkSessionInterval",get:function(){return this._checkSessionInterval}},{key:"stopCheckSessionOnError",get:function(){return this._stopCheckSessionOnError}},{key:"query_status_response_type",get:function(){return this._query_status_response_type}},{key:"revokeAccessTokenOnSignout",get:function(){return this._revokeAccessTokenOnSignout}},{key:"redirectNavigator",get:function(){return this._redirectNavigator}},{key:"popupNavigator",get:function(){return this._popupNavigator}},{key:"iframeNavigator",get:function(){return this._iframeNavigator}},{key:"userStore",get:function(){return this._userStore}}]),t}(a.OidcClientSettings)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.RedirectNavigator=void 0;var r=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1])||arguments[1];r.Log.debug("UserManagerEvents.load"),e.prototype.load.call(this,t),n&&this._userLoaded.raise(t)},t.prototype.unload=function(){r.Log.debug("UserManagerEvents.unload"),e.prototype.unload.call(this),this._userUnloaded.raise()},t.prototype.addUserLoaded=function(e){this._userLoaded.addHandler(e)},t.prototype.removeUserLoaded=function(e){this._userLoaded.removeHandler(e)},t.prototype.addUserUnloaded=function(e){this._userUnloaded.addHandler(e)},t.prototype.removeUserUnloaded=function(e){this._userUnloaded.removeHandler(e)},t.prototype.addSilentRenewError=function(e){this._silentRenewError.addHandler(e)},t.prototype.removeSilentRenewError=function(e){this._silentRenewError.removeHandler(e)},t.prototype._raiseSilentRenewError=function(e){r.Log.debug("UserManagerEvents._raiseSilentRenewError",e.message),this._silentRenewError.raise(e)},t.prototype.addUserSignedIn=function(e){this._userSignedIn.addHandler(e)},t.prototype.removeUserSignedIn=function(e){this._userSignedIn.removeHandler(e)},t.prototype._raiseUserSignedIn=function(){r.Log.debug("UserManagerEvents._raiseUserSignedIn"),this._userSignedIn.raise()},t.prototype.addUserSignedOut=function(e){this._userSignedOut.addHandler(e)},t.prototype.removeUserSignedOut=function(e){this._userSignedOut.removeHandler(e)},t.prototype._raiseUserSignedOut=function(){r.Log.debug("UserManagerEvents._raiseUserSignedOut"),this._userSignedOut.raise()},t.prototype.addUserSessionChanged=function(e){this._userSessionChanged.addHandler(e)},t.prototype.removeUserSessionChanged=function(e){this._userSessionChanged.removeHandler(e)},t.prototype._raiseUserSessionChanged=function(){r.Log.debug("UserManagerEvents._raiseUserSessionChanged"),this._userSessionChanged.raise()},t}(a.AccessTokenEvents)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Timer=void 0;var r=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:i.Global.timer,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;s(this,t);var o=u(this,e.call(this,n));return o._timer=r,o._nowFunc=a||function(){return Date.now()/1e3},o}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.init=function(e){e<=0&&(e=1),e=parseInt(e);var t=this.now+e;if(this.expiration===t&&this._timerHandle)a.Log.debug("Timer.init timer "+this._name+" skipping initialization since already initialized for expiration:",this.expiration);else{this.cancel(),a.Log.debug("Timer.init timer "+this._name+" for duration:",e),this._expiration=t;var n=5;eNumber(e)-Number(t))).map((t=>e[t])):e}function d(e){const t=e.indexOf("#");return-1!==t&&(e=e.slice(0,t)),e}function f(e){const t=(e=d(e)).indexOf("?");return-1===t?"":e.slice(t+1)}function v(e,t){return t.parseNumbers&&!Number.isNaN(Number(e))&&"string"==typeof e&&""!==e.trim()?e=Number(e):!t.parseBooleans||null===e||"true"!==e.toLowerCase()&&"false"!==e.toLowerCase()||(e="true"===e.toLowerCase()),e}function m(e,t){s((t=Object.assign({decode:!0,sort:!0,arrayFormat:"none",arrayFormatSeparator:",",parseNumbers:!1,parseBooleans:!1},t)).arrayFormatSeparator);const n=function(e){let t;switch(e.arrayFormat){case"index":return(e,n,r)=>{t=/\[(\d*)\]$/.exec(e),e=e.replace(/\[\d*\]$/,""),t?(void 0===r[e]&&(r[e]={}),r[e][t[1]]=n):r[e]=n};case"bracket":return(e,n,r)=>{t=/(\[\])$/.exec(e),e=e.replace(/\[\]$/,""),t?void 0!==r[e]?r[e]=[].concat(r[e],n):r[e]=[n]:r[e]=n};case"comma":case"separator":return(t,n,r)=>{const a="string"==typeof n&&n.includes(e.arrayFormatSeparator),i="string"==typeof n&&!a&&l(n,e).includes(e.arrayFormatSeparator);n=i?l(n,e):n;const o=a||i?n.split(e.arrayFormatSeparator).map((t=>l(t,e))):null===n?n:l(n,e);r[t]=o};default:return(e,t,n)=>{void 0!==n[e]?n[e]=[].concat(n[e],t):n[e]=t}}}(t),r=Object.create(null);if("string"!=typeof e)return r;if(!(e=e.trim().replace(/^[?#&]/,"")))return r;for(const a of e.split("&")){if(""===a)continue;let[e,o]=i(t.decode?a.replace(/\+/g," "):a,"=");o=void 0===o?null:["comma","separator"].includes(t.arrayFormat)?o:l(o,t),n(l(e,t),o,r)}for(const e of Object.keys(r)){const n=r[e];if("object"==typeof n&&null!==n)for(const e of Object.keys(n))n[e]=v(n[e],t);else r[e]=v(n,t)}return!1===t.sort?r:(!0===t.sort?Object.keys(r).sort():Object.keys(r).sort(t.sort)).reduce(((e,t)=>{const n=r[t];return Boolean(n)&&"object"==typeof n&&!Array.isArray(n)?e[t]=c(n):e[t]=n,e}),Object.create(null))}t.extract=f,t.parse=m,t.stringify=(e,t)=>{if(!e)return"";s((t=Object.assign({encode:!0,strict:!0,arrayFormat:"none",arrayFormatSeparator:","},t)).arrayFormatSeparator);const n=n=>t.skipNull&&null==e[n]||t.skipEmptyString&&""===e[n],r=function(e){switch(e.arrayFormat){case"index":return t=>(n,r)=>{const a=n.length;return void 0===r||e.skipNull&&null===r||e.skipEmptyString&&""===r?n:null===r?[...n,[u(t,e),"[",a,"]"].join("")]:[...n,[u(t,e),"[",u(a,e),"]=",u(r,e)].join("")]};case"bracket":return t=>(n,r)=>void 0===r||e.skipNull&&null===r||e.skipEmptyString&&""===r?n:null===r?[...n,[u(t,e),"[]"].join("")]:[...n,[u(t,e),"[]=",u(r,e)].join("")];case"comma":case"separator":return t=>(n,r)=>null==r||0===r.length?n:0===n.length?[[u(t,e),"=",u(r,e)].join("")]:[[n,u(r,e)].join(e.arrayFormatSeparator)];default:return t=>(n,r)=>void 0===r||e.skipNull&&null===r||e.skipEmptyString&&""===r?n:null===r?[...n,u(t,e)]:[...n,[u(t,e),"=",u(r,e)].join("")]}}(t),a={};for(const t of Object.keys(e))n(t)||(a[t]=e[t]);const i=Object.keys(a);return!1!==t.sort&&i.sort(t.sort),i.map((n=>{const a=e[n];return void 0===a?"":null===a?u(n,t):Array.isArray(a)?a.reduce(r(n),[]).join("&"):u(n,t)+"="+u(a,t)})).filter((e=>e.length>0)).join("&")},t.parseUrl=(e,t)=>{t=Object.assign({decode:!0},t);const[n,r]=i(e,"#");return Object.assign({url:n.split("?")[0]||"",query:m(f(e),t)},t&&t.parseFragmentIdentifier&&r?{fragmentIdentifier:l(r,t)}:{})},t.stringifyUrl=(e,n)=>{n=Object.assign({encode:!0,strict:!0},n);const r=d(e.url).split("?")[0]||"",a=t.extract(e.url),i=t.parse(a,{sort:!1}),o=Object.assign(i,e.query);let s=t.stringify(o,n);s&&(s=`?${s}`);let l=function(e){let t="";const n=e.indexOf("#");return-1!==n&&(t=e.slice(n)),t}(e.url);return e.fragmentIdentifier&&(l=`#${u(e.fragmentIdentifier,n)}`),`${r}${s}${l}`},t.pick=(e,n,r)=>{r=Object.assign({parseFragmentIdentifier:!0},r);const{url:a,query:i,fragmentIdentifier:s}=t.parseUrl(e,r);return t.stringifyUrl({url:a,query:o(i,n),fragmentIdentifier:s},r)},t.exclude=(e,n,r)=>{const a=Array.isArray(n)?e=>!n.includes(e):(e,t)=>!n(e,t);return t.pick(e,a,r)}},48729:function(e,t,n){for(var r=n(62930),a="undefined"==typeof window?n.g:window,i=["moz","webkit"],o="AnimationFrame",s=a["request"+o],u=a["cancel"+o]||a["cancelRequest"+o],l=0;!s&&l=r&&u0&&this.setState({dayPickerContainerStyles:{}}),this.isOpened()){var t=this.props,n=t.openDirection,r=t.anchorDirection,a=t.horizontalMargin,i=t.withPortal,o=t.withFullScreenPortal,s=t.appendToBody,u=r===D.ANCHOR_LEFT;if(!i&&!o){var l=this.dayPickerContainer.getBoundingClientRect(),c=e[r]||0,d=u?l[D.ANCHOR_RIGHT]:l[D.ANCHOR_LEFT];this.setState({dayPickerContainerStyles:M({},(0,g.default)(r,c,d,a),{},s&&(0,A.default)(n,r,this.container))})}}},t.showKeyboardShortcutsPanel=function(){this.setState({isDateRangePickerInputFocused:!1,isDayPickerFocused:!0,showKeyboardShortcuts:!0})},t.maybeRenderDayPickerWithPortal=function(){var e=this.props,t=e.withPortal,n=e.withFullScreenPortal,r=e.appendToBody;return this.isOpened()?t||n||r?l.default.createElement(f.Portal,null,this.renderDayPicker()):this.renderDayPicker():null},t.renderDayPicker=function(){var e=this.props,t=e.anchorDirection,n=e.openDirection,r=e.isDayBlocked,a=e.isDayHighlighted,o=e.isOutsideRange,s=e.numberOfMonths,u=e.orientation,f=e.monthFormat,v=e.renderMonthText,m=e.renderWeekHeaderElement,p=e.dayPickerNavigationInlineStyles,h=e.navPosition,g=e.navPrev,A=e.navNext,S=e.renderNavPrevButton,b=e.renderNavNextButton,w=e.onPrevMonthClick,I=e.onNextMonthClick,_=e.onDatesChange,M=e.onFocusChange,O=e.withPortal,P=e.withFullScreenPortal,T=e.daySize,x=e.enableOutsideDays,R=e.focusedInput,L=e.startDate,k=e.startDateOffset,N=e.endDate,F=e.endDateOffset,B=e.minDate,U=e.maxDate,V=e.minimumNights,j=e.keepOpenOnDateSelect,G=e.renderCalendarDay,H=e.renderDayContents,Q=e.renderCalendarInfo,q=e.renderMonthElement,z=e.calendarInfoPosition,W=e.firstDayOfWeek,Y=e.initialVisibleMonth,Z=e.hideKeyboardShortcutsPanel,K=e.customCloseIcon,X=e.onClose,$=e.phrases,J=e.dayAriaLabelFormat,ee=e.isRTL,te=e.weekDayFormat,ne=e.styles,re=e.verticalHeight,ae=e.transitionDuration,ie=e.verticalSpacing,oe=e.horizontalMonthPadding,se=e.small,ue=e.disabled,le=e.theme.reactDates,ce=this.state,de=ce.dayPickerContainerStyles,fe=ce.isDayPickerFocused,ve=ce.showKeyboardShortcuts,me=!P&&O?this.onOutsideClick:void 0,pe=Y||function(){return L||N||(0,c.default)()},he=K||l.default.createElement(C.default,(0,d.css)(ne.DateRangePicker_closeButton_svg)),ge=(0,y.default)(le,se),Ae=O||P;return l.default.createElement("div",(0,i.default)({ref:this.setDayPickerContainerRef},(0,d.css)(ne.DateRangePicker_picker,t===D.ANCHOR_LEFT&&ne.DateRangePicker_picker__directionLeft,t===D.ANCHOR_RIGHT&&ne.DateRangePicker_picker__directionRight,u===D.HORIZONTAL_ORIENTATION&&ne.DateRangePicker_picker__horizontal,u===D.VERTICAL_ORIENTATION&&ne.DateRangePicker_picker__vertical,!Ae&&n===D.OPEN_DOWN&&{top:ge+ie},!Ae&&n===D.OPEN_UP&&{bottom:ge+ie},Ae&&ne.DateRangePicker_picker__portal,P&&ne.DateRangePicker_picker__fullScreenPortal,ee&&ne.DateRangePicker_picker__rtl,de),{onClick:me}),l.default.createElement(E.default,{orientation:u,enableOutsideDays:x,numberOfMonths:s,onPrevMonthClick:w,onNextMonthClick:I,onDatesChange:_,onFocusChange:M,onClose:X,focusedInput:R,startDate:L,startDateOffset:k,endDate:N,endDateOffset:F,minDate:B,maxDate:U,monthFormat:f,renderMonthText:v,renderWeekHeaderElement:m,withPortal:Ae,daySize:T,initialVisibleMonth:pe,hideKeyboardShortcutsPanel:Z,dayPickerNavigationInlineStyles:p,navPosition:h,navPrev:g,navNext:A,renderNavPrevButton:S,renderNavNextButton:b,minimumNights:V,isOutsideRange:o,isDayHighlighted:a,isDayBlocked:r,keepOpenOnDateSelect:j,renderCalendarDay:G,renderDayContents:H,renderCalendarInfo:Q,renderMonthElement:q,calendarInfoPosition:z,isFocused:fe,showKeyboardShortcuts:ve,onBlur:this.onDayPickerBlur,phrases:$,dayAriaLabelFormat:J,isRTL:ee,firstDayOfWeek:W,weekDayFormat:te,verticalHeight:re,transitionDuration:ae,disabled:ue,horizontalMonthPadding:oe}),P&&l.default.createElement("button",(0,i.default)({},(0,d.css)(ne.DateRangePicker_closeButton),{type:"button",onClick:this.onOutsideClick,"aria-label":$.closeDatePicker}),he))},t.render=function(){var e=this.props,t=e.startDate,n=e.startDateId,r=e.startDatePlaceholderText,a=e.startDateAriaLabel,o=e.endDate,s=e.endDateId,u=e.endDatePlaceholderText,c=e.endDateAriaLabel,f=e.focusedInput,v=e.screenReaderInputMessage,m=e.showClearDates,h=e.showDefaultInputIcon,g=e.inputIconPosition,A=e.customInputIcon,y=e.customArrowIcon,S=e.customCloseIcon,b=e.disabled,w=e.required,E=e.readOnly,C=e.openDirection,_=e.phrases,M=e.isOutsideRange,O=e.minimumNights,P=e.withPortal,T=e.withFullScreenPortal,x=e.displayFormat,R=e.reopenPickerOnClearDates,L=e.keepOpenOnDateSelect,k=e.onDatesChange,N=e.onClose,F=e.isRTL,B=e.noBorder,U=e.block,V=e.verticalSpacing,j=e.small,G=e.regular,H=e.styles,Q=this.state.isDateRangePickerInputFocused,q=!P&&!T,z=V0&&(G||V||o!==w)){var $=y||this.today;q=this.deleteModifierFromRange(q,$,$.clone().add(w,"days"),"blocked-minimum-nights"),q=this.deleteModifierFromRange(q,$,$.clone().add(w,"days"),"blocked")}if((G||U)&&(0,d.default)(k).forEach((function(e){Object.keys(e).forEach((function(e){var n=(0,_.default)(e),r=!1;(G||N)&&(s(n)?(q=t.addModifier(q,n,"blocked-out-of-range"),r=!0):q=t.deleteModifier(q,n,"blocked-out-of-range")),(G||F)&&(u(n)?(q=t.addModifier(q,n,"blocked-calendar"),r=!0):q=t.deleteModifier(q,n,"blocked-calendar")),q=r?t.addModifier(q,n,"blocked"):t.deleteModifier(q,n,"blocked"),(G||B)&&(q=l(n)?t.addModifier(q,n,"highlighted-calendar"):t.deleteModifier(q,n,"highlighted-calendar"))}))})),!this.isTouchDevice&&G&&L&&!this.isBlocked(L)){var J=i(L);J>0&&a===C.END_DATE&&(q=this.deleteModifierFromRange(q,L.clone().add(1,"days"),L.clone().add(J,"days"),"hovered-start-blocked-minimum-nights"),q=this.deleteModifier(q,L.clone().add(J,"days"),"hovered-start-first-possible-end")),J>0&&a===C.START_DATE&&(q=this.addModifierToRange(q,L.clone().add(1,"days"),L.clone().add(J,"days"),"hovered-start-blocked-minimum-nights"),q=this.addModifier(q,L.clone().add(J,"days"),"hovered-start-first-possible-end"))}o>0&&n&&a===C.END_DATE&&(q=this.addModifierToRange(q,n,n.clone().add(o,"days"),"blocked-minimum-nights"),q=this.addModifierToRange(q,n,n.clone().add(o,"days"),"blocked"));var ee=(0,c.default)();if((0,h.default)(this.today,ee)||(q=this.deleteModifier(q,this.today,"today"),q=this.addModifier(q,ee,"today"),this.today=ee),Object.keys(q).length>0&&this.setState({visibleDays:O({},k,{},q)}),G||f!==M){var te=T(f,a);this.setState({phrases:O({},f,{chooseAvailableDate:te})})}},t.onDayClick=function(e,t){var n=this.props,r=n.keepOpenOnDateSelect,a=n.minimumNights,i=n.onBlur,o=n.focusedInput,s=n.onFocusChange,u=n.onClose,l=n.onDatesChange,c=n.startDateOffset,d=n.endDateOffset,f=n.disabled,v=n.daysViolatingMinNightsCanBeClicked;if(t&&t.preventDefault(),!this.isBlocked(e,!v)){var p=this.props,h=p.startDate,y=p.endDate;if(c||d){if(h=(0,w.default)(c,e),y=(0,w.default)(d,e),this.isBlocked(h)||this.isBlocked(y))return;l({startDate:h,endDate:y}),r||(s(null),u({startDate:h,endDate:y}))}else if(o===C.START_DATE){var S=y&&y.clone().subtract(a,"days"),b=(0,A.default)(S,e)||(0,g.default)(h,y),I=f===C.END_DATE;I&&b||(h=e,b&&(y=null)),l({startDate:h,endDate:y}),I&&!b?(s(null),u({startDate:h,endDate:y})):I||s(C.END_DATE)}else if(o===C.END_DATE){var E=h&&h.clone().add(a,"days");h?(0,m.default)(e,E)?(l({startDate:h,endDate:y=e}),r||(s(null),u({startDate:h,endDate:y}))):v&&this.doesNotMeetMinimumNights(e)?l({startDate:h,endDate:y=e}):f!==C.START_DATE?l({startDate:h=e,endDate:y=null}):l({startDate:h,endDate:y}):(l({startDate:h,endDate:y=e}),s(C.START_DATE))}else l({startDate:h,endDate:y});i()}},t.onDayMouseEnter=function(e){if(!this.isTouchDevice){var t=this.props,n=t.startDate,r=t.endDate,a=t.focusedInput,i=t.getMinNightsForHoverDate,o=t.minimumNights,s=t.startDateOffset,u=t.endDateOffset,l=this.state,c=l.hoverDate,d=l.visibleDays,f=l.dateOffset,v=null;if(a){var m=s||u,p={};if(m){var y=(0,w.default)(s,e),S=(0,w.default)(u,e,(function(e){return e.add(1,"day")}));v={start:y,end:S},f&&f.start&&f.end&&(p=this.deleteModifierFromRange(p,f.start,f.end,"hovered-offset")),p=this.addModifierToRange(p,y,S,"hovered-offset")}if(!m){if(p=this.deleteModifier(p,c,"hovered"),p=this.addModifier(p,e,"hovered"),n&&!r&&a===C.END_DATE){if((0,g.default)(c,n)){var b=c.clone().add(1,"day");p=this.deleteModifierFromRange(p,n,b,"hovered-span")}if(((0,A.default)(e,n)||(0,h.default)(e,n))&&(p=this.deleteModifier(p,n,"selected-start-in-hovered-span")),!this.isBlocked(e)&&(0,g.default)(e,n)){var I=e.clone().add(1,"day");p=this.addModifierToRange(p,n,I,"hovered-span"),p=this.addModifier(p,n,"selected-start-in-hovered-span")}}if(!n&&r&&a===C.START_DATE&&((0,A.default)(c,r)&&(p=this.deleteModifierFromRange(p,c,r,"hovered-span")),((0,g.default)(e,r)||(0,h.default)(e,r))&&(p=this.deleteModifier(p,r,"selected-end-in-hovered-span")),!this.isBlocked(e)&&(0,A.default)(e,r)&&(p=this.addModifierToRange(p,e,r,"hovered-span"),p=this.addModifier(p,r,"selected-end-in-hovered-span"))),n){var E=n.clone().add(1,"day"),D=n.clone().add(o+1,"days");if(p=this.deleteModifierFromRange(p,E,D,"after-hovered-start"),(0,h.default)(e,n)){var _=n.clone().add(1,"day"),M=n.clone().add(o+1,"days");p=this.addModifierToRange(p,_,M,"after-hovered-start")}}if(r){var P=r.clone().subtract(o,"days");if(p=this.deleteModifierFromRange(p,P,r,"before-hovered-end"),(0,h.default)(e,r)){var T=r.clone().subtract(o,"days");p=this.addModifierToRange(p,T,r,"before-hovered-end")}}if(c&&!this.isBlocked(c)){var x=i(c);x>0&&a===C.START_DATE&&(p=this.deleteModifierFromRange(p,c.clone().add(1,"days"),c.clone().add(x,"days"),"hovered-start-blocked-minimum-nights"),p=this.deleteModifier(p,c.clone().add(x,"days"),"hovered-start-first-possible-end"))}if(!this.isBlocked(e)){var R=i(e);R>0&&a===C.START_DATE&&(p=this.addModifierToRange(p,e.clone().add(1,"days"),e.clone().add(R,"days"),"hovered-start-blocked-minimum-nights"),p=this.addModifier(p,e.clone().add(R,"days"),"hovered-start-first-possible-end"))}}this.setState({hoverDate:e,dateOffset:v,visibleDays:O({},d,{},p)})}}},t.onDayMouseLeave=function(e){var t=this.props,n=t.startDate,r=t.endDate,a=t.focusedInput,i=t.getMinNightsForHoverDate,o=t.minimumNights,s=this.state,u=s.hoverDate,l=s.visibleDays,c=s.dateOffset;if(!this.isTouchDevice&&u){var d={};if(d=this.deleteModifier(d,u,"hovered"),c&&(d=this.deleteModifierFromRange(d,c.start,c.end,"hovered-offset")),n&&!r){if((0,g.default)(u,n)){var f=u.clone().add(1,"day");d=this.deleteModifierFromRange(d,n,f,"hovered-span")}(0,g.default)(e,n)&&(d=this.deleteModifier(d,n,"selected-start-in-hovered-span"))}if(!n&&r&&((0,g.default)(r,u)&&(d=this.deleteModifierFromRange(d,u,r,"hovered-span")),(0,A.default)(e,r)&&(d=this.deleteModifier(d,r,"selected-end-in-hovered-span"))),n&&(0,h.default)(e,n)){var v=n.clone().add(1,"day"),m=n.clone().add(o+1,"days");d=this.deleteModifierFromRange(d,v,m,"after-hovered-start")}if(r&&(0,h.default)(e,r)){var p=r.clone().subtract(o,"days");d=this.deleteModifierFromRange(d,p,r,"before-hovered-end")}if(!this.isBlocked(u)){var y=i(u);y>0&&a===C.START_DATE&&(d=this.deleteModifierFromRange(d,u.clone().add(1,"days"),u.clone().add(y,"days"),"hovered-start-blocked-minimum-nights"),d=this.deleteModifier(d,u.clone().add(y,"days"),"hovered-start-first-possible-end"))}this.setState({hoverDate:null,visibleDays:O({},l,{},d)})}},t.onPrevMonthClick=function(){var e=this.props,t=e.enableOutsideDays,n=e.maxDate,r=e.minDate,a=e.numberOfMonths,i=e.onPrevMonthClick,o=this.state,s=o.currentMonth,u=o.visibleDays,l={};Object.keys(u).sort().slice(0,a+1).forEach((function(e){l[e]=u[e]}));var c=s.clone().subtract(2,"months"),d=(0,S.default)(c,1,t,!0),f=s.clone().subtract(1,"month");this.setState({currentMonth:f,disablePrev:this.shouldDisableMonthNavigation(r,f),disableNext:this.shouldDisableMonthNavigation(n,f),visibleDays:O({},l,{},this.getModifiers(d))},(function(){i(f.clone())}))},t.onNextMonthClick=function(){var e=this.props,t=e.enableOutsideDays,n=e.maxDate,r=e.minDate,a=e.numberOfMonths,i=e.onNextMonthClick,o=this.state,s=o.currentMonth,u=o.visibleDays,l={};Object.keys(u).sort().slice(1).forEach((function(e){l[e]=u[e]}));var c=s.clone().add(a+1,"month"),d=(0,S.default)(c,1,t,!0),f=s.clone().add(1,"month");this.setState({currentMonth:f,disablePrev:this.shouldDisableMonthNavigation(r,f),disableNext:this.shouldDisableMonthNavigation(n,f),visibleDays:O({},l,{},this.getModifiers(d))},(function(){i(f.clone())}))},t.onMonthChange=function(e){var t=this.props,n=t.numberOfMonths,r=t.enableOutsideDays,a=t.orientation===C.VERTICAL_SCROLLABLE,i=(0,S.default)(e,n,r,a);this.setState({currentMonth:e.clone(),visibleDays:this.getModifiers(i)})},t.onYearChange=function(e){var t=this.props,n=t.numberOfMonths,r=t.enableOutsideDays,a=t.orientation===C.VERTICAL_SCROLLABLE,i=(0,S.default)(e,n,r,a);this.setState({currentMonth:e.clone(),visibleDays:this.getModifiers(i)})},t.onGetNextScrollableMonths=function(){var e=this.props,t=e.numberOfMonths,n=e.enableOutsideDays,r=this.state,a=r.currentMonth,i=r.visibleDays,o=Object.keys(i).length,s=a.clone().add(o,"month"),u=(0,S.default)(s,t,n,!0);this.setState({visibleDays:O({},i,{},this.getModifiers(u))})},t.onGetPrevScrollableMonths=function(){var e=this.props,t=e.numberOfMonths,n=e.enableOutsideDays,r=this.state,a=r.currentMonth,i=r.visibleDays,o=a.clone().subtract(t,"month"),s=(0,S.default)(o,t,n,!0);this.setState({currentMonth:o.clone(),visibleDays:O({},i,{},this.getModifiers(s))})},t.getFirstFocusableDay=function(e){var t=this,n=this.props,r=n.startDate,a=n.endDate,o=n.focusedInput,s=n.minimumNights,u=n.numberOfMonths,l=e.clone().startOf("month");if(o===C.START_DATE&&r?l=r.clone():o===C.END_DATE&&!a&&r?l=r.clone().add(s,"days"):o===C.END_DATE&&a&&(l=a.clone()),this.isBlocked(l)){for(var c=[],d=e.clone().add(u-1,"months").endOf("month"),f=l.clone();!(0,g.default)(f,d);)f=f.clone().add(1,"day"),c.push(f);var v=c.filter((function(e){return!t.isBlocked(e)}));if(v.length>0)l=(0,i.default)(v,1)[0]}return l},t.getModifiers=function(e){var t=this,n={};return Object.keys(e).forEach((function(r){n[r]={},e[r].forEach((function(e){n[r][(0,I.default)(e)]=t.getModifiersForDay(e)}))})),n},t.getModifiersForDay=function(e){var t=this;return new Set(Object.keys(this.modifiers).filter((function(n){return t.modifiers[n](e)})))},t.getStateForNewMonth=function(e){var t=this,n=e.initialVisibleMonth,r=e.numberOfMonths,a=e.enableOutsideDays,i=e.orientation,o=e.startDate,s=(n||(o?function(){return o}:function(){return t.today}))(),u=i===C.VERTICAL_SCROLLABLE;return{currentMonth:s,visibleDays:this.getModifiers((0,S.default)(s,r,a,u))}},t.shouldDisableMonthNavigation=function(e,t){if(!e)return!1;var n=this.props,r=n.numberOfMonths,a=n.enableOutsideDays;return(0,b.default)(e,t,r,a)},t.addModifier=function(e,t,n){return(0,E.addModifier)(e,t,n,this.props,this.state)},t.addModifierToRange=function(e,t,n,r){for(var a=e,i=t.clone();(0,A.default)(i,n);)a=this.addModifier(a,i,r),i=i.clone().add(1,"day");return a},t.deleteModifier=function(e,t,n){return(0,E.deleteModifier)(e,t,n,this.props,this.state)},t.deleteModifierFromRange=function(e,t,n,r){for(var a=e,i=t.clone();(0,A.default)(i,n);)a=this.deleteModifier(a,i,r),i=i.clone().add(1,"day");return a},t.doesNotMeetMinimumNights=function(e){var t=this.props,n=t.startDate,r=t.isOutsideRange,a=t.focusedInput,i=t.minimumNights;if(a!==C.END_DATE)return!1;if(n){var o=e.diff(n.clone().startOf("day").hour(12),"days");return o=0}return r((0,c.default)(e).subtract(i,"days"))},t.doesNotMeetMinNightsForHoveredStartDate=function(e,t){var n=this.props,r=n.focusedInput,a=n.getMinNightsForHoverDate;if(r!==C.END_DATE)return!1;if(t&&!this.isBlocked(t)){var i=a(t),o=e.diff(t.clone().startOf("day").hour(12),"days");return o=0}return!1},t.isDayAfterHoveredStartDate=function(e){var t=this.props,n=t.startDate,r=t.endDate,a=t.minimumNights,i=(this.state||{}).hoverDate;return!!n&&!r&&!this.isBlocked(e)&&(0,p.default)(i,e)&&a>0&&(0,h.default)(i,n)},t.isEndDate=function(e){var t=this.props.endDate;return(0,h.default)(e,t)},t.isHovered=function(e){var t=(this.state||{}).hoverDate;return!!this.props.focusedInput&&(0,h.default)(e,t)},t.isInHoveredSpan=function(e){var t=this.props,n=t.startDate,r=t.endDate,a=(this.state||{}).hoverDate,i=!!n&&!r&&(e.isBetween(n,a)||(0,h.default)(a,e)),o=!!r&&!n&&(e.isBetween(a,r)||(0,h.default)(a,e)),s=a&&!this.isBlocked(a);return(i||o)&&s},t.isInSelectedSpan=function(e){var t=this.props,n=t.startDate,r=t.endDate;return e.isBetween(n,r,"days")},t.isLastInRange=function(e){var t=this.props.endDate;return this.isInSelectedSpan(e)&&(0,p.default)(e,t)},t.isStartDate=function(e){var t=this.props.startDate;return(0,h.default)(e,t)},t.isBlocked=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=this.props,r=n.isDayBlocked,a=n.isOutsideRange;return r(e)||a(e)||t&&this.doesNotMeetMinimumNights(e)},t.isToday=function(e){return(0,h.default)(e,this.today)},t.isFirstDayOfWeek=function(e){var t=this.props.firstDayOfWeek;return e.day()===(t||c.default.localeData().firstDayOfWeek())},t.isLastDayOfWeek=function(e){var t=this.props.firstDayOfWeek;return e.day()===((t||c.default.localeData().firstDayOfWeek())+6)%7},t.isFirstPossibleEndDateForHoveredStartDate=function(e,t){var n=this.props,r=n.focusedInput,a=n.getMinNightsForHoverDate;if(r!==C.END_DATE||!t||this.isBlocked(t))return!1;var i=a(t),o=t.clone().add(i,"days");return(0,h.default)(e,o)},t.beforeSelectedEnd=function(e){var t=this.props.endDate;return(0,A.default)(e,t)},t.isDayBeforeHoveredEndDate=function(e){var t=this.props,n=t.startDate,r=t.endDate,a=t.minimumNights,i=(this.state||{}).hoverDate;return!!r&&!n&&!this.isBlocked(e)&&(0,y.default)(i,e)&&a>0&&(0,h.default)(i,r)},t.render=function(){var e=this.props,t=e.numberOfMonths,n=e.orientation,r=e.monthFormat,a=e.renderMonthText,i=e.renderWeekHeaderElement,o=e.dayPickerNavigationInlineStyles,s=e.navPosition,u=e.navPrev,c=e.navNext,d=e.renderNavPrevButton,f=e.renderNavNextButton,v=e.noNavButtons,m=e.noNavNextButton,p=e.noNavPrevButton,h=e.onOutsideClick,g=e.withPortal,A=e.enableOutsideDays,y=e.firstDayOfWeek,S=e.renderKeyboardShortcutsButton,b=e.renderKeyboardShortcutsPanel,w=e.hideKeyboardShortcutsPanel,I=e.daySize,E=e.focusedInput,C=e.renderCalendarDay,_=e.renderDayContents,M=e.renderCalendarInfo,O=e.renderMonthElement,P=e.calendarInfoPosition,T=e.onBlur,x=e.onShiftTab,R=e.onTab,L=e.isFocused,k=e.showKeyboardShortcuts,N=e.isRTL,F=e.weekDayFormat,B=e.dayAriaLabelFormat,U=e.verticalHeight,V=e.noBorder,j=e.transitionDuration,G=e.verticalBorderSpacing,H=e.horizontalMonthPadding,Q=this.state,q=Q.currentMonth,z=Q.phrases,W=Q.visibleDays,Y=Q.disablePrev,Z=Q.disableNext;return l.default.createElement(D.default,{orientation:n,enableOutsideDays:A,modifiers:W,numberOfMonths:t,onDayClick:this.onDayClick,onDayMouseEnter:this.onDayMouseEnter,onDayMouseLeave:this.onDayMouseLeave,onPrevMonthClick:this.onPrevMonthClick,onNextMonthClick:this.onNextMonthClick,onMonthChange:this.onMonthChange,onTab:R,onShiftTab:x,onYearChange:this.onYearChange,onGetNextScrollableMonths:this.onGetNextScrollableMonths,onGetPrevScrollableMonths:this.onGetPrevScrollableMonths,monthFormat:r,renderMonthText:a,renderWeekHeaderElement:i,withPortal:g,hidden:!E,initialVisibleMonth:function(){return q},daySize:I,onOutsideClick:h,disablePrev:Y,disableNext:Z,dayPickerNavigationInlineStyles:o,navPosition:s,navPrev:u,navNext:c,renderNavPrevButton:d,renderNavNextButton:f,noNavButtons:v,noNavPrevButton:p,noNavNextButton:m,renderCalendarDay:C,renderDayContents:_,renderCalendarInfo:M,renderMonthElement:O,renderKeyboardShortcutsButton:S,renderKeyboardShortcutsPanel:b,calendarInfoPosition:P,firstDayOfWeek:y,hideKeyboardShortcutsPanel:w,isFocused:L,getFirstFocusableDay:this.getFirstFocusableDay,onBlur:T,showKeyboardShortcuts:k,phrases:z,isRTL:N,weekDayFormat:F,dayAriaLabelFormat:B,verticalHeight:U,verticalBorderSpacing:G,noBorder:V,transitionDuration:j,horizontalMonthPadding:H})},n}(l.default.PureComponent||l.default.Component);t.default=x,x.propTypes={},x.defaultProps=P},3810:function(e,t,n){"use strict";var r=n(34398);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var a=r(n(82525)),i=r(n(43408)),o=r(n(20566)),s=r(n(79382)),u=r(n(52685)),l=r(n(32735)),c=(r(n(60216)),r(n(95456)),n(86576),r(n(53806))),d=r(n(51719)),f=r(n(53875)),v=n(6032),m=(r(n(18284)),r(n(67994))),p=r(n(9010)),h=r(n(52166)),g=r(n(563)),A=n(9347),y=(r(n(7166)),r(n(60836)),r(n(57341)),r(n(38984)),n(56553)),S=r(n(36594)),b=r(n(24603));function w(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function I(e){for(var t=1;t0&&this.setState({visibleDays:I({},E,{},x)})},t.componentWillUpdate=function(){this.today=(0,c.default)()},t.onDayClick=function(e,t){if(t&&t.preventDefault(),!this.isBlocked(e)){var n=this.props,r=n.onDateChange,a=n.keepOpenOnDateSelect,i=n.onFocusChange,o=n.onClose;r(e),a||(i({focused:!1}),o({date:e}))}},t.onDayMouseEnter=function(e){if(!this.isTouchDevice){var t=this.state,n=t.hoverDate,r=t.visibleDays,a=this.deleteModifier({},n,"hovered");a=this.addModifier(a,e,"hovered"),this.setState({hoverDate:e,visibleDays:I({},r,{},a)})}},t.onDayMouseLeave=function(){var e=this.state,t=e.hoverDate,n=e.visibleDays;if(!this.isTouchDevice&&t){var r=this.deleteModifier({},t,"hovered");this.setState({hoverDate:null,visibleDays:I({},n,{},r)})}},t.onPrevMonthClick=function(){var e=this.props,t=e.onPrevMonthClick,n=e.numberOfMonths,r=e.enableOutsideDays,a=this.state,i=a.currentMonth,o=a.visibleDays,s={};Object.keys(o).sort().slice(0,n+1).forEach((function(e){s[e]=o[e]}));var u=i.clone().subtract(1,"month"),l=(0,h.default)(u,1,r);this.setState({currentMonth:u,visibleDays:I({},s,{},this.getModifiers(l))},(function(){t(u.clone())}))},t.onNextMonthClick=function(){var e=this.props,t=e.onNextMonthClick,n=e.numberOfMonths,r=e.enableOutsideDays,a=this.state,i=a.currentMonth,o=a.visibleDays,s={};Object.keys(o).sort().slice(1).forEach((function(e){s[e]=o[e]}));var u=i.clone().add(n,"month"),l=(0,h.default)(u,1,r),c=i.clone().add(1,"month");this.setState({currentMonth:c,visibleDays:I({},s,{},this.getModifiers(l))},(function(){t(c.clone())}))},t.onMonthChange=function(e){var t=this.props,n=t.numberOfMonths,r=t.enableOutsideDays,a=t.orientation===y.VERTICAL_SCROLLABLE,i=(0,h.default)(e,n,r,a);this.setState({currentMonth:e.clone(),visibleDays:this.getModifiers(i)})},t.onYearChange=function(e){var t=this.props,n=t.numberOfMonths,r=t.enableOutsideDays,a=t.orientation===y.VERTICAL_SCROLLABLE,i=(0,h.default)(e,n,r,a);this.setState({currentMonth:e.clone(),visibleDays:this.getModifiers(i)})},t.onGetNextScrollableMonths=function(){var e=this.props,t=e.numberOfMonths,n=e.enableOutsideDays,r=this.state,a=r.currentMonth,i=r.visibleDays,o=Object.keys(i).length,s=a.clone().add(o,"month"),u=(0,h.default)(s,t,n,!0);this.setState({visibleDays:I({},i,{},this.getModifiers(u))})},t.onGetPrevScrollableMonths=function(){var e=this.props,t=e.numberOfMonths,n=e.enableOutsideDays,r=this.state,a=r.currentMonth,i=r.visibleDays,o=a.clone().subtract(t,"month"),s=(0,h.default)(o,t,n,!0);this.setState({currentMonth:o.clone(),visibleDays:I({},i,{},this.getModifiers(s))})},t.getFirstFocusableDay=function(e){var t=this,n=this.props,r=n.date,a=n.numberOfMonths,o=e.clone().startOf("month");if(r&&(o=r.clone()),this.isBlocked(o)){for(var s=[],u=e.clone().add(a-1,"months").endOf("month"),l=o.clone();!(0,p.default)(l,u);)l=l.clone().add(1,"day"),s.push(l);var c=s.filter((function(e){return!t.isBlocked(e)&&(0,p.default)(e,o)}));if(c.length>0){var d=(0,i.default)(c,1);o=d[0]}}return o},t.getModifiers=function(e){var t=this,n={};return Object.keys(e).forEach((function(r){n[r]={},e[r].forEach((function(e){n[r][(0,g.default)(e)]=t.getModifiersForDay(e)}))})),n},t.getModifiersForDay=function(e){var t=this;return new Set(Object.keys(this.modifiers).filter((function(n){return t.modifiers[n](e)})))},t.getStateForNewMonth=function(e){var t=this,n=e.initialVisibleMonth,r=e.date,a=e.numberOfMonths,i=e.orientation,o=e.enableOutsideDays,s=(n||(r?function(){return r}:function(){return t.today}))(),u=i===y.VERTICAL_SCROLLABLE;return{currentMonth:s,visibleDays:this.getModifiers((0,h.default)(s,a,o,u))}},t.addModifier=function(e,t,n){return(0,A.addModifier)(e,t,n,this.props,this.state)},t.deleteModifier=function(e,t,n){return(0,A.deleteModifier)(e,t,n,this.props,this.state)},t.isBlocked=function(e){var t=this.props,n=t.isDayBlocked,r=t.isOutsideRange;return n(e)||r(e)},t.isHovered=function(e){var t=(this.state||{}).hoverDate;return(0,m.default)(e,t)},t.isSelected=function(e){var t=this.props.date;return(0,m.default)(e,t)},t.isToday=function(e){return(0,m.default)(e,this.today)},t.isFirstDayOfWeek=function(e){var t=this.props.firstDayOfWeek;return e.day()===(t||c.default.localeData().firstDayOfWeek())},t.isLastDayOfWeek=function(e){var t=this.props.firstDayOfWeek;return e.day()===((t||c.default.localeData().firstDayOfWeek())+6)%7},t.render=function(){var e=this.props,t=e.numberOfMonths,n=e.orientation,r=e.monthFormat,a=e.renderMonthText,i=e.renderWeekHeaderElement,o=e.dayPickerNavigationInlineStyles,s=e.navPosition,u=e.navPrev,c=e.navNext,d=e.renderNavPrevButton,f=e.renderNavNextButton,v=e.noNavButtons,m=e.noNavPrevButton,p=e.noNavNextButton,h=e.onOutsideClick,g=e.onShiftTab,A=e.onTab,y=e.withPortal,b=e.focused,w=e.enableOutsideDays,I=e.hideKeyboardShortcutsPanel,E=e.daySize,C=e.firstDayOfWeek,D=e.renderCalendarDay,_=e.renderDayContents,M=e.renderCalendarInfo,O=e.renderMonthElement,P=e.calendarInfoPosition,T=e.isFocused,x=e.isRTL,R=e.phrases,L=e.dayAriaLabelFormat,k=e.onBlur,N=e.showKeyboardShortcuts,F=e.weekDayFormat,B=e.verticalHeight,U=e.noBorder,V=e.transitionDuration,j=e.verticalBorderSpacing,G=e.horizontalMonthPadding,H=this.state,Q=H.currentMonth,q=H.visibleDays;return l.default.createElement(S.default,{orientation:n,enableOutsideDays:w,modifiers:q,numberOfMonths:t,onDayClick:this.onDayClick,onDayMouseEnter:this.onDayMouseEnter,onDayMouseLeave:this.onDayMouseLeave,onPrevMonthClick:this.onPrevMonthClick,onNextMonthClick:this.onNextMonthClick,onMonthChange:this.onMonthChange,onYearChange:this.onYearChange,onGetNextScrollableMonths:this.onGetNextScrollableMonths,onGetPrevScrollableMonths:this.onGetPrevScrollableMonths,monthFormat:r,withPortal:y,hidden:!b,hideKeyboardShortcutsPanel:I,initialVisibleMonth:function(){return Q},firstDayOfWeek:C,onOutsideClick:h,dayPickerNavigationInlineStyles:o,navPosition:s,navPrev:u,navNext:c,renderNavPrevButton:d,renderNavNextButton:f,noNavButtons:v,noNavNextButton:p,noNavPrevButton:m,renderMonthText:a,renderWeekHeaderElement:i,renderCalendarDay:D,renderDayContents:_,renderCalendarInfo:M,renderMonthElement:O,calendarInfoPosition:P,isFocused:T,getFirstFocusableDay:this.getFirstFocusableDay,onBlur:k,onTab:A,onShiftTab:g,phrases:R,daySize:E,isRTL:x,showKeyboardShortcuts:N,weekDayFormat:F,dayAriaLabelFormat:L,verticalHeight:B,noBorder:U,transitionDuration:V,verticalBorderSpacing:j,horizontalMonthPadding:G})},n}(l.default.PureComponent||l.default.Component);t.default=C,C.propTypes={},C.defaultProps=E},56761:function(e,t,n){"use strict";var r=n(34398);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var a=r(n(16950)),i=(r(n(20566)),r(n(32735))),o=(r(n(60216)),n(86576),n(60834));function s(e){var t=e.unicode,n=e.label,r=e.action,s=e.block,u=e.styles;return i.default.createElement("li",(0,o.css)(u.KeyboardShortcutRow,s&&u.KeyboardShortcutRow__block),i.default.createElement("div",(0,o.css)(u.KeyboardShortcutRow_keyContainer,s&&u.KeyboardShortcutRow_keyContainer__block),i.default.createElement("span",(0,a.default)({},(0,o.css)(u.KeyboardShortcutRow_key),{role:"img","aria-label":"".concat(n,",")}),t)),i.default.createElement("div",(0,o.css)(u.KeyboardShortcutRow_action),r))}s.propTypes={},s.defaultProps={block:!1};var u=(0,o.withStyles)((function(e){return{KeyboardShortcutRow:{listStyle:"none",margin:"6px 0"},KeyboardShortcutRow__block:{marginBottom:16},KeyboardShortcutRow_keyContainer:{display:"inline-block",whiteSpace:"nowrap",textAlign:"right",marginRight:6},KeyboardShortcutRow_keyContainer__block:{textAlign:"left",display:"inline"},KeyboardShortcutRow_key:{fontFamily:"monospace",fontSize:12,textTransform:"uppercase",background:e.reactDates.color.core.grayLightest,padding:"2px 6px"},KeyboardShortcutRow_action:{display:"inline",wordBreak:"break-word",marginLeft:8}}}),{pureComponent:void 0!==i.default.PureComponent})(s);t.default=u},93512:function(e,t,n){"use strict";var r=n(34398);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var a=r(n(32735)),i=function(e){return a.default.createElement("svg",e,a.default.createElement("path",{d:"M336 275L126 485h806c13 0 23 10 23 23s-10 23-23 23H126l210 210c11 11 11 21 0 32-5 5-10 7-16 7s-11-2-16-7L55 524c-11-11-11-21 0-32l249-249c21-22 53 10 32 32z"}))};i.defaultProps={focusable:"false",viewBox:"0 0 1000 1000"};var o=i;t.default=o},6810:function(e,t,n){"use strict";var r=n(34398);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var a=r(n(32735)),i=function(e){return a.default.createElement("svg",e,a.default.createElement("path",{d:"M694 242l249 250c12 11 12 21 1 32L694 773c-5 5-10 7-16 7s-11-2-16-7c-11-11-11-21 0-32l210-210H68c-13 0-23-10-23-23s10-23 23-23h806L662 275c-21-22 11-54 32-33z"}))};i.defaultProps={focusable:"false",viewBox:"0 0 1000 1000"};var o=i;t.default=o},51815:function(e,t,n){"use strict";var r=n(34398);Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.PureSingleDatePicker=void 0;var a=r(n(82525)),i=r(n(16950)),o=r(n(79382)),s=r(n(52685)),u=r(n(20566)),l=r(n(32735)),c=r(n(53806)),d=n(60834),f=n(42660),v=(n(86576),n(36582)),m=r(n(53875)),p=r(n(25920)),h=(r(n(6336)),n(6032)),g=r(n(18475)),A=r(n(42684)),y=r(n(3014)),S=r(n(91101)),b=r(n(7705)),w=r(n(91380)),I=r(n(3813)),E=r(n(3810)),C=r(n(5697)),D=n(56553);function _(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function M(e){for(var t=1;t2?n-2:0),s=2;s2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(!e)return 0;var a="width"===t?"Left":"Top",i="width"===t?"Right":"Bottom",o=!n||r?window.getComputedStyle(e):null,s=e.offsetWidth,u=e.offsetHeight,l="width"===t?s:u;n||(l-=parseFloat(o["padding".concat(a)])+parseFloat(o["padding".concat(i)])+parseFloat(o["border".concat(a,"Width")])+parseFloat(o["border".concat(i,"Width")]));r&&(l+=parseFloat(o["margin".concat(a)])+parseFloat(o["margin".concat(i)]));return l}},7705:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getScrollParent=r,t.getScrollAncestorsOverflowY=a,t.default=function(e){var t=a(e),n=function(e){return t.forEach((function(t,n){n.style.setProperty("overflow-y",e?"hidden":t)}))};return n(!0),function(){return n(!1)}};var n=function(){return document.scrollingElement||document.documentElement};function r(e){var t=e.parentElement;if(null==t)return n();var a=window.getComputedStyle(t).overflowY;return"visible"!==a&&"hidden"!==a&&t.scrollHeight>t.clientHeight?t:r(t)}function a(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new Map,i=n(),o=r(e);return t.set(o,o.style.overflowY),o===i?t:a(o,t)}},13088:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return"undefined"!=typeof document&&document.activeElement}},24142:function(e,t,n){"use strict";var r=n(34398);Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,n,r,a){return{ariaLabel:l(a,r,e,t),hoveredSpan:u(r),isOutsideRange:r.has("blocked-out-of-range"),selected:o(r),useDefaultCursor:s(r),daySizeStyles:{width:n,height:n-1}}};var a=r(n(6800)),i=n(56553);function o(e){return e.has("selected")||e.has("selected-span")||e.has("selected-start")||e.has("selected-end")}function s(e){return e.has("blocked-minimum-nights")||e.has("blocked-calendar")||e.has("blocked-out-of-range")}function u(e){return!o(e)&&(e.has("hovered-span")||e.has("after-hovered-start")||e.has("before-hovered-end"))}function l(e,t,n,r){var s=e.chooseAvailableDate,u=e.dateIsUnavailable,l=e.dateIsSelected,c=e.dateIsSelectedAsStartDate,d=e.dateIsSelectedAsEndDate,f={date:n.format(r)};return t.has("selected-start")&&c?(0,a.default)(c,f):t.has("selected-end")&&d?(0,a.default)(d,f):o(t)&&l?(0,a.default)(l,f):t.has(i.BLOCKED_MODIFIER)?(0,a.default)(u,f):(0,a.default)(s,f)}},2349:function(e,t,n){"use strict";var r=n(34398);Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:a.default.localeData().firstDayOfWeek();if(!a.default.isMoment(e)||!e.isValid())throw new TypeError("`month` must be a valid moment object");if(-1===i.WEEKDAYS.indexOf(n))throw new TypeError("`firstDayOfWeek` must be an integer between 0 and 6");for(var r=e.clone().startOf("month").hour(12),o=e.clone().endOf("month").hour(12),s=(r.day()+7-n)%7,u=(n+6-o.day())%7,l=r.clone().subtract(s,"day"),c=o.clone().add(u,"day"),d=c.diff(l,"days")+1,f=l.clone(),v=[],m=0;m=s&&m1&&void 0!==arguments[1]?arguments[1]:0;return 7*e+2*t+1}},42684:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,n){var a=n.getBoundingClientRect(),i=a.left,o=a.top;e===r.OPEN_UP&&(o=-(window.innerHeight-a.bottom));t===r.ANCHOR_RIGHT&&(i=-(window.innerWidth-a.right));return{transform:"translate3d(".concat(Math.round(i),"px, ").concat(Math.round(o),"px, 0)")}};var r=n(56553)},3014:function(e,t){"use strict";function n(e,t,n){var r="number"==typeof t,a="number"==typeof n,i="number"==typeof e;return r&&a?t+n:r&&i?t+e:r?t:a&&i?n+e:a?n:i?2*e:0}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var r=e.font.input,a=r.lineHeight,i=r.lineHeight_small,o=e.spacing,s=o.inputPadding,u=o.displayTextPaddingVertical,l=o.displayTextPaddingTop,c=o.displayTextPaddingBottom,d=o.displayTextPaddingVertical_small,f=o.displayTextPaddingTop_small,v=o.displayTextPaddingBottom_small,m=t?i:a,p=t?n(d,f,v):n(u,l,c);return parseInt(m,10)+2*s+p}},50192:function(e,t,n){"use strict";var r=n(34398);Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:a.default.localeData().firstDayOfWeek(),n=e.clone().startOf("month"),r=i(n,t);return Math.ceil((r+e.daysInMonth())/7)};var a=r(n(53806));function i(e,t){return(e.day()-t+7)%7}},6800:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){if("string"==typeof e)return e;if("function"==typeof e)return e(t);return""}},18284:function(e,t,n){"use strict";var r=n(34398);Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return Object.keys(e).reduce((function(e,t){return function(e){for(var t=1;t2&&void 0!==arguments[2]?arguments[2]:n;return e?r(e(t.clone())):t};var n=function(e){return e}},29018:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return{transform:e,msTransform:e,MozTransform:e,WebkitTransform:e}}},52166:function(e,t,n){"use strict";var r=n(34398);Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,n,r){if(!a.default.isMoment(e))return{};for(var o={},s=r?e.clone():e.clone().subtract(1,"month"),u=0;u<(r?t:t+2);u+=1){var l=[],c=s.clone(),d=c.clone().startOf("month").hour(12),f=c.clone().endOf("month").hour(12),v=d.clone();if(n)for(var m=0;m-1}));S=b.reduce((function(t,r){var i=e[r]||h[r];if(!i[y]||!i[y].has(n)){var o=new Set(i[y]);o.add(n),t[r]=d({},i,(0,a.default)({},y,o))}return t}),S)}else{var w=(0,s.default)(t),I=e[w]||h[w]||{};if(!I[y]||!I[y].has(n)){var E=new Set(I[y]);E.add(n),S[w]=d({},I,(0,a.default)({},y,E))}}return S},t.deleteModifier=function(e,t,n,r,c){var f=r.numberOfMonths,v=r.enableOutsideDays,m=r.orientation,p=c.currentMonth,h=c.visibleDays,g=p,A=f;m===l.VERTICAL_SCROLLABLE?A=Object.keys(h).length:(g=(0,u.default)(g),A+=2);if(!t||!(0,i.default)(t,g,A,v))return e;var y=(0,o.default)(t),S=d({},e);if(v){var b=Object.keys(h).filter((function(e){return Object.keys(h[e]).indexOf(y)>-1}));S=b.reduce((function(t,r){var i=e[r]||h[r];if(i[y]&&i[y].has(n)){var o=new Set(i[y]);o.delete(n),t[r]=d({},i,(0,a.default)({},y,o))}return t}),S)}else{var w=(0,s.default)(t),I=e[w]||h[w]||{};if(I[y]&&I[y].has(n)){var E=new Set(I[y]);E.delete(n),S[w]=d({},I,(0,a.default)({},y,E))}}return S};var a=r(n(20566)),i=r(n(55024)),o=r(n(563)),s=r(n(18598)),u=r(n(25144)),l=n(56553);function c(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function d(e){for(var t=1;t
\\n
\\n
\\n\");\n\n/***/ }),\n\n/***/ \"./src/components/rapid-input-select-multiple/rapid-input-select-multiple.scss\":\n/*!*************************************************************************************!*\\\n !*** ./src/components/rapid-input-select-multiple/rapid-input-select-multiple.scss ***!\n \\*************************************************************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\":host {\\n width: 100px;\\n min-height: 25px;\\n display: inline-flex;\\n flex-direction: column;\\n align-items: stretch;\\n position: relative;\\n outline-style: none;\\n outline-offset: -1px;\\n}\\n\\n:host(:disabled) {\\n color: var(--rapid-theme-color-tertiary, --rapid-color-gray-600);\\n}\\n\\n:host([hidden]) {\\n display: none;\\n}\\n\\n.main {\\n flex-grow: 1;\\n display: flex;\\n flex-direction: row;\\n justify-content: stretch;\\n align-items: stretch;\\n position: relative;\\n outline-style: none;\\n}\\n.main.desktop:focus-within {\\n outline-style: solid;\\n outline-width: 1px;\\n outline-color: inherit;\\n}\\n\\n[part=input] {\\n flex-grow: 1;\\n flex-shrink: 1;\\n appearance: none;\\n -webkit-appearance: none;\\n margin: 0;\\n outline-style: none;\\n border-style: solid;\\n border-width: 1px;\\n border-color: var(--rapid-color-gray-600);\\n border-radius: inherit;\\n padding: var(--rapid-input-select-multiple-padding, 16px);\\n overflow-x: hidden;\\n color: currentColor;\\n background-color: inherit;\\n font: inherit;\\n text-align: inherit;\\n}\\n[part=input]::placeholder {\\n color: var(--rapid-theme-color-tertiary, currentColor);\\n}\\n\\n[part=input]:enabled:read-write {\\n padding-right: calc(12px + 16px + var(--rapid-input-select-multiple-padding, 16px));\\n}\\n\\n[part=icon] {\\n display: none;\\n position: absolute;\\n top: calc(50% - 24px / 2);\\n right: var(--rapid-input-select-multiple-padding, 16px);\\n width: 24px;\\n height: 24px;\\n color: currentColor;\\n}\\n\\n[part=input]:enabled:read-write ~ [part=icon] {\\n display: block;\\n}\\n\\n.selector-desktop {\\n display: none;\\n flex-direction: column;\\n justify-content: start;\\n align-items: stretch;\\n position: absolute;\\n box-sizing: border-box;\\n top: calc(100% + 1px);\\n width: 100%;\\n border-style: solid;\\n border-width: 1px;\\n border-color: var(--rapid-color-gray-600);\\n background-color: var(--rapid-theme-background-color);\\n padding: var(--rapid-input-select-multiple-padding, 16px);\\n z-index: 1;\\n}\\n.selector-desktop rapid-checkbox {\\n margin-right: 10px;\\n}\\n\\n:host(:not([disabled]):not([readonly]):focus-within) .desktop .selector-desktop {\\n display: flex;\\n}\\n\\n.selector-mobile {\\n display: none;\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n box-sizing: border-box;\\n appearance: none;\\n -webkit-appearance: none;\\n margin: 0;\\n outline-style: none;\\n border-style: none;\\n border-radius: inherit;\\n padding: var(--rapid-input-select-multiple-padding, 16px);\\n color: transparent;\\n background-color: transparent;\\n font: inherit;\\n text-align: inherit;\\n text-overflow: ellipsis;\\n overflow-x: hidden;\\n}\\n\\n:host(:not([disabled]):not([readonly])) .tablet .selector-mobile,\\n:host(:not([disabled]):not([readonly])) .phone .selector-mobile {\\n display: block;\\n}\\n\\n[part=tooltip] {\\n max-width: fit-content;\\n display: none;\\n margin: 5px 0;\\n}\\n\\n:host(:focus-within:not([_rapid-invalid])) [part=tooltip]:not(:empty) {\\n display: block;\\n}\\n\\n[part=error-message] {\\n max-width: fit-content;\\n display: none;\\n margin: 5px 0;\\n color: var(--rapid-theme-color-negative, --rapid-color-red);\\n}\\n\\n:host([_rapid-invalid]) [part=error-message]:not(:empty),\\n:host(:invalid) [part=error-message]:not(:empty) {\\n display: block;\\n}\");\n\n/***/ }),\n\n/***/ \"./src/components/rapid-input-select-multiple/rapid-input-select-multiple.ts\":\n/*!***********************************************************************************!*\\\n !*** ./src/components/rapid-input-select-multiple/rapid-input-select-multiple.ts ***!\n \\***********************************************************************************/\n/*! exports provided: RapidInputSelectMultipleElement */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RapidInputSelectMultipleElement\", function() { return RapidInputSelectMultipleElement; });\n/* harmony import */ var _utils_element_state__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../utils/element-state */ \"./src/utils/element-state.ts\");\n/* harmony import */ var _utils_fix_webkit_bug216985__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/fix_webkit_bug216985 */ \"./src/utils/fix_webkit_bug216985.ts\");\n/* harmony import */ var _utils_layout_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils/layout-types */ \"./src/utils/layout-types.ts\");\n/* harmony import */ var _utils_multipe_values__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/multipe-values */ \"./src/utils/multipe-values.ts\");\n/* harmony import */ var _rapid_input_select_multiple_html__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./rapid-input-select-multiple.html */ \"./src/components/rapid-input-select-multiple/rapid-input-select-multiple.html\");\n/* harmony import */ var _rapid_input_select_multiple_scss__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./rapid-input-select-multiple.scss */ \"./src/components/rapid-input-select-multiple/rapid-input-select-multiple.scss\");\n\n\n\n\n\n\nconst template = document.createElement(\"template\");\ntemplate.innerHTML = `\n\n${_rapid_input_select_multiple_html__WEBPACK_IMPORTED_MODULE_4__[\"default\"]}\n`;\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input\n// https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select\n// https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement\nconst ATTR_DISABLED = 'disabled';\nconst ATTR_NAME = 'name'; // attr <--> prop\nconst ATTR_PLACEHOLDER = \"placeholder\";\nconst ATTR_READONLY = 'readonly';\nconst ATTR_REQUIRED = 'required';\nconst ATTR_TOOLTIP = 'tooltip'; // attr <--> prop <--> tooltipEl\nconst ATTR_VALUE = 'value'; // attr ---> prop <--> select(desktop,mobile)\n// https://developers.google.com/web/fundamentals/web-components/shadowdom#events\nconst EVT_CHANGE = 'change';\nclass RapidInputSelectMultipleElement extends HTMLElement {\n constructor() {\n super();\n this._disabled = false;\n this._name = '';\n this._placeholder = '';\n this._readOnly = false;\n this._required = false;\n this._tooltip = '';\n this._value = '';\n this._updateValueFromMobileSelector = (evt) => {\n const values = Array.from(this._selectorMobileEl.selectedOptions)\n .filter(optionEl => optionEl.selected)\n .map(optionEl => optionEl.value);\n this.value = Object(_utils_multipe_values__WEBPACK_IMPORTED_MODULE_3__[\"serializeValues\"])(values);\n };\n this._updateValueFromDesktopSelector = (evt) => {\n this.value = this._selectorDesktopEl.value;\n };\n this._internals = this.attachInternals();\n this._validationEl = this.ownerDocument.createElement('input');\n const root = this.attachShadow({ mode: 'open', delegatesFocus: true });\n root.appendChild(Object(_utils_fix_webkit_bug216985__WEBPACK_IMPORTED_MODULE_1__[\"cloneTemplate\"])(template));\n this._mainDivEl = this.shadowRoot.querySelector('.main');\n this._inputEl = this.shadowRoot.querySelector('[part=\"input\"]');\n this._selectorMobileEl = this.shadowRoot.querySelector('.selector-mobile');\n this._selectorDesktopEl = this.shadowRoot.querySelector('.selector-desktop');\n this._tooltipEl = this.shadowRoot.querySelector('[part=\"tooltip\"]');\n this._errorMessageEl = this.shadowRoot.querySelector('[part=\"error-message\"]');\n this._optionElsObserver = new MutationObserver(() => this._updateOptions());\n this.addEventListener('focus', () => this._selectorDesktopEl.focus());\n this._selectorMobileEl.addEventListener('change', this._updateValueFromMobileSelector);\n this._selectorDesktopEl.addEventListener('change', this._updateValueFromDesktopSelector);\n // Clicking on 's label trigger click() on contained field element and this element gain focus.\n // With delegatesFocus set to true, the first focusable element (this._selectEl in this case) should gain focus internally.\n // For mobile Safari 14, the support of delegateFocus option is unknown and it requires explicit focus() call on this._selectEl.\n // https://caniuse.com/mdn-api_element_attachshadow_delegatesfocus\n // While focus() opens select menu for Safari, Chrome just moves focus to select element and not open the menu.\n this.addEventListener('focus', () => {\n this._selectorMobileEl.focus(); // for mobile Safari\n });\n }\n static get formAssociated() {\n return true;\n }\n static get observedAttributes() {\n return [\n ATTR_DISABLED,\n ATTR_NAME,\n ATTR_PLACEHOLDER,\n ATTR_READONLY,\n ATTR_REQUIRED,\n ATTR_TOOLTIP,\n ATTR_VALUE,\n ];\n }\n connectedCallback() {\n Object(_utils_element_state__WEBPACK_IMPORTED_MODULE_0__[\"toggleElementState\"])(this, _utils_element_state__WEBPACK_IMPORTED_MODULE_0__[\"PSEUDO_BLANK\"], this.value === '');\n this._updateOptions();\n this._optionElsObserver.observe(this, { subtree: true, childList: true, attributes: true, attributeFilter: ['value'], characterData: true });\n // https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n RapidInputSelectMultipleElement.observedAttributes.forEach(attrName => {\n const propName = attrName;\n if (this.hasOwnProperty(propName)) {\n const value = this[propName];\n delete this[propName];\n this[propName] = value;\n }\n });\n this.layoutTypeChangeCallback(null, Object(_utils_layout_types__WEBPACK_IMPORTED_MODULE_2__[\"getLayoutType\"])());\n }\n disconnectedCallback() {\n this._optionElsObserver.disconnect();\n this.layoutTypeChangeCallback(Object(_utils_layout_types__WEBPACK_IMPORTED_MODULE_2__[\"getLayoutType\"])(), null);\n }\n adoptedCallback() {\n }\n attributeChangedCallback(name, oldValue, newValue) {\n if (oldValue !== newValue) {\n switch (name) {\n case ATTR_DISABLED:\n this.disabled = newValue !== null;\n break;\n case ATTR_NAME:\n this.name = newValue;\n break;\n case ATTR_PLACEHOLDER:\n this.placeholder = newValue;\n break;\n case ATTR_READONLY:\n this.readOnly = newValue !== null;\n break;\n case ATTR_REQUIRED:\n this.required = newValue !== null;\n break;\n case ATTR_TOOLTIP:\n this.tooltip = newValue;\n break;\n case ATTR_VALUE:\n this.value = newValue;\n break;\n }\n }\n }\n formAssociatedCallback(form) {\n }\n formDisabledCallback(disabled) {\n this.disabled = disabled;\n }\n formResetCallback() {\n this.value = this.getAttribute(ATTR_VALUE) || '';\n }\n formStateRestoreCallback(value, reason) {\n }\n layoutTypeChangeCallback(oldLayoutType, newLayoutType) {\n if (oldLayoutType) {\n this._mainDivEl.classList.remove(oldLayoutType);\n }\n if (newLayoutType) {\n this._mainDivEl.classList.add(newLayoutType);\n }\n }\n get form() {\n return this._internals.form;\n }\n get labels() {\n return this._internals.labels;\n }\n get validationMessage() {\n return this._validationEl.validationMessage;\n }\n get validity() {\n return this._validationEl.validity;\n }\n get willValidate() {\n return this._validationEl.willValidate;\n }\n get disabled() {\n return this._disabled;\n }\n set disabled(disabled) {\n if (this._disabled !== disabled) {\n this._disabled = disabled;\n this._validationEl.disabled = disabled;\n this._inputEl.disabled = disabled;\n this.toggleAttribute(ATTR_DISABLED, disabled);\n }\n }\n get name() {\n return this._name;\n }\n set name(name) {\n name = `${name}`;\n if (this._name !== name) {\n this._name = name;\n this.setAttribute(ATTR_NAME, name);\n }\n }\n get placeholder() {\n return this._placeholder;\n }\n set placeholder(placeholder) {\n placeholder = `${placeholder}`;\n if (this._placeholder !== placeholder) {\n this._placeholder = placeholder;\n this._inputEl.placeholder = placeholder;\n this.setAttribute(ATTR_PLACEHOLDER, placeholder);\n this.checkValidity();\n }\n }\n get readOnly() {\n return this._readOnly;\n }\n set readOnly(readOnly) {\n if (this._readOnly !== readOnly) {\n this._readOnly = readOnly;\n // this._inputEl is always read only to avoid iOS text keyboard showing up \n // by gaining focus when user clicks 's label.\n // this._validationEl won't have readOnly property either as it would return valid\n // when required is set and the value is empty.\n this._inputEl.tabIndex = readOnly ? 0 : -1;\n this.toggleAttribute(ATTR_READONLY, readOnly);\n Object(_utils_element_state__WEBPACK_IMPORTED_MODULE_0__[\"toggleElementState\"])(this, _utils_element_state__WEBPACK_IMPORTED_MODULE_0__[\"PSEUDO_READONLY\"], readOnly);\n this.checkValidity();\n }\n }\n get required() {\n return this._required;\n }\n set required(required) {\n if (this._required !== required) {\n this._required = required;\n this._validationEl.required = required;\n this._inputEl.required = required;\n this.toggleAttribute(ATTR_REQUIRED, required);\n this.checkValidity();\n }\n }\n get tooltip() {\n return this._tooltip;\n }\n set tooltip(tooltip) {\n tooltip = `${tooltip}`;\n if (this._tooltip !== tooltip) {\n this._tooltip = tooltip;\n this._tooltipEl.textContent = tooltip;\n this.setAttribute(ATTR_TOOLTIP, tooltip);\n }\n }\n get value() {\n return this._value;\n }\n set value(value) {\n // While other text properties converts null to string \"null\", the expectation for value property is to set to empty string.\n value = value !== null ? `${value}` : '';\n if (this._value !== value) {\n this._value = value;\n const values = Object(_utils_multipe_values__WEBPACK_IMPORTED_MODULE_3__[\"parseValues\"])(value);\n Array.from(this._selectorMobileEl.querySelectorAll('option'))\n .forEach(optionEl => optionEl.selected = values.includes(optionEl.value));\n if (this._selectorDesktopEl.value !== value) {\n this._selectorDesktopEl.value = value;\n }\n const valueText = Array.from(this.querySelectorAll('option'))\n .filter(optionEl => values.includes(optionEl.value))\n .map(optionEl => optionEl.textContent)\n .join(', ');\n if (this._inputEl.value !== valueText) {\n this._inputEl.value = valueText;\n }\n if (this._validationEl.value !== valueText) {\n this._validationEl.value = valueText;\n }\n this._internals.setFormValue(value);\n // Shim for https://developer.mozilla.org/en-US/docs/Web/CSS/:blank\n Object(_utils_element_state__WEBPACK_IMPORTED_MODULE_0__[\"toggleElementState\"])(this, _utils_element_state__WEBPACK_IMPORTED_MODULE_0__[\"PSEUDO_BLANK\"], value === '');\n if (!this.disabled && !this.readOnly) {\n this.dispatchEvent(new Event(EVT_CHANGE, { bubbles: true, cancelable: false, composed: false }));\n }\n this.checkValidity();\n }\n }\n checkValidity() {\n const valid = this._validationEl.checkValidity();\n // Safari does not support ElementInternals and won't set :invalid pseudo class.\n Object(_utils_element_state__WEBPACK_IMPORTED_MODULE_0__[\"toggleElementState\"])(this, _utils_element_state__WEBPACK_IMPORTED_MODULE_0__[\"PSEUDO_INVALID\"], !this.validity.valid);\n this._errorMessageEl.textContent = this.validationMessage;\n return valid;\n }\n reportValidity() {\n return this._validationEl.reportValidity();\n }\n // https://developer.mozilla.org/en-US/docs/Web/API/Constraint_validation\n setCustomValidity(message) {\n this._validationEl.setCustomValidity(message);\n this.checkValidity();\n }\n _updateOptions() {\n Array.from(this._selectorMobileEl.querySelectorAll('option'))\n .forEach(optionEl => optionEl.remove());\n Array.from(this._selectorDesktopEl.querySelectorAll('option'))\n .forEach(optionEl => optionEl.remove());\n Array.from(this.querySelectorAll('option')).forEach(optionEl => {\n const optionValue = optionEl.getAttribute('value');\n // Empty option value is not valid.\n // This is to prevent empty 'value' attribute of this component to be recognized as no selection\n // rather than an option with empty value had been selected.\n if (optionValue) {\n const clonedEl = this.ownerDocument.createElement('option');\n clonedEl.setAttribute('value', optionValue);\n clonedEl.textContent = optionEl.textContent;\n this._selectorMobileEl.appendChild(clonedEl);\n this._selectorDesktopEl.appendChild(clonedEl.cloneNode(true));\n }\n });\n const values = Object(_utils_multipe_values__WEBPACK_IMPORTED_MODULE_3__[\"parseValues\"])(this.value);\n Array.from(this._selectorMobileEl.querySelectorAll('option'))\n .forEach(optionEl => optionEl.selected = values.includes(optionEl.value));\n if (this._selectorDesktopEl.value !== this.value) {\n this._selectorDesktopEl.value = this.value;\n }\n const valueText = Array.from(this.querySelectorAll('option'))\n .filter(optionEl => values.includes(optionEl.value))\n .map(optionEl => optionEl.textContent)\n .join(', ');\n if (this._inputEl.value !== valueText) {\n this._inputEl.value = valueText;\n }\n if (this._validationEl.value !== valueText) {\n this._validationEl.value = valueText;\n }\n this.checkValidity();\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/components/rapid-input-select/rapid-input-select.html\":\n/*!*******************************************************************!*\\\n !*** ./src/components/rapid-input-select/rapid-input-select.html ***!\n \\*******************************************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"
\\n \\n \\n \\n \\n \\n
\\n
\\n
\\n\");\n\n/***/ }),\n\n/***/ \"./src/components/rapid-input-select/rapid-input-select.scss\":\n/*!*******************************************************************!*\\\n !*** ./src/components/rapid-input-select/rapid-input-select.scss ***!\n \\*******************************************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\":host {\\n width: 100px;\\n min-height: 25px;\\n display: inline-flex;\\n flex-direction: column;\\n align-items: stretch;\\n outline-style: none;\\n outline-offset: -1px;\\n}\\n\\n:host(:disabled) {\\n color: var(--rapid-theme-color-tertiary, --rapid-color-gray-600);\\n}\\n\\n:host([hidden]) {\\n display: none;\\n}\\n\\n.main {\\n flex-grow: 1;\\n display: flex;\\n flex-direction: row;\\n justify-content: stretch;\\n align-items: stretch;\\n position: relative;\\n outline-style: none;\\n}\\n.main.desktop:focus-within {\\n outline-style: solid;\\n outline-width: 1px;\\n outline-color: inherit;\\n}\\n\\n[part=input] {\\n flex-grow: 1;\\n flex-shrink: 1;\\n appearance: none;\\n -webkit-appearance: none;\\n margin: 0;\\n outline-style: none;\\n border-style: solid;\\n border-width: 1px;\\n border-color: var(--rapid-color-gray-600);\\n border-radius: inherit;\\n padding: var(--rapid-input-select-padding, 16px);\\n overflow-x: hidden;\\n color: currentColor;\\n background-color: inherit;\\n font: inherit;\\n text-align: inherit;\\n}\\n[part=input]::placeholder {\\n color: var(--rapid-theme-color-tertiary, currentColor);\\n}\\n\\n:host(:not([_rapid-readonly])) [part=input]:enabled {\\n padding-right: calc(12px + 16px + var(--rapid-input-select-padding, 16px));\\n}\\n\\n[part=icon] {\\n display: none;\\n position: absolute;\\n top: calc(50% - 24px / 2);\\n right: var(--rapid-input-select-padding, 16px);\\n width: 24px;\\n height: 24px;\\n color: currentColor;\\n}\\n\\n:host(:not([_rapid-readonly])) [part=input]:enabled ~ [part=icon] {\\n display: block;\\n}\\n\\n[part=select] {\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n box-sizing: border-box;\\n appearance: none;\\n -webkit-appearance: none;\\n margin: 0;\\n outline-style: none;\\n border-style: solid;\\n border-width: 1px;\\n border-color: var(--rapid-color-gray-600);\\n border-radius: inherit;\\n padding: var(--rapid-input-select-padding, 16px);\\n color: transparent;\\n background-color: transparent;\\n font: inherit;\\n text-align: inherit;\\n text-overflow: ellipsis;\\n overflow-x: hidden;\\n}\\n\\n:host([disabled]) [part=select],\\n:host([readonly]) [part=select] {\\n display: none;\\n}\\n\\n[part=select] option {\\n color: black;\\n background-color: white;\\n}\\n\\n[part=tooltip] {\\n max-width: fit-content;\\n display: none;\\n margin: 5px 0;\\n}\\n\\n:host(:focus-within:not([_rapid-invalid])) [part=tooltip]:not(:empty) {\\n display: block;\\n}\\n\\n[part=error-message] {\\n max-width: fit-content;\\n display: none;\\n margin: 5px 0;\\n color: var(--rapid-theme-color-negative, --rapid-color-red);\\n}\\n\\n:host([_rapid-invalid]) [part=error-message]:not(:empty),\\n:host(:invalid) [part=error-message]:not(:empty) {\\n display: block;\\n}\");\n\n/***/ }),\n\n/***/ \"./src/components/rapid-input-select/rapid-input-select.ts\":\n/*!*****************************************************************!*\\\n !*** ./src/components/rapid-input-select/rapid-input-select.ts ***!\n \\*****************************************************************/\n/*! exports provided: RapidInputSelectElement */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RapidInputSelectElement\", function() { return RapidInputSelectElement; });\n/* harmony import */ var _utils_element_state__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../utils/element-state */ \"./src/utils/element-state.ts\");\n/* harmony import */ var _utils_fix_webkit_bug216985__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/fix_webkit_bug216985 */ \"./src/utils/fix_webkit_bug216985.ts\");\n/* harmony import */ var _rapid_input_select_html__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./rapid-input-select.html */ \"./src/components/rapid-input-select/rapid-input-select.html\");\n/* harmony import */ var _rapid_input_select_scss__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./rapid-input-select.scss */ \"./src/components/rapid-input-select/rapid-input-select.scss\");\n\n\n\n\nconst template = document.createElement(\"template\");\ntemplate.innerHTML = `\n\n${_rapid_input_select_html__WEBPACK_IMPORTED_MODULE_2__[\"default\"]}\n`;\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input\n// https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select\n// https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement\nconst ATTR_DISABLED = 'disabled'; // attr <--> prop <--> inputEl,selectEl\nconst ATTR_NAME = 'name'; // attr <--> prop\nconst ATTR_PLACEHOLDER = \"placeholder\"; // attr <--> prop <--> inputEl\nconst ATTR_READONLY = 'readonly'; // attr <--> prop <--> inputEl\nconst ATTR_REQUIRED = 'required'; // attr <--> prop <--> inputEl\nconst ATTR_TOOLTIP = 'tooltip'; // attr <--> prop <--> tooltipEl\nconst ATTR_VALUE = 'value'; // attr ---> prop <--> inputEl,selectEl\n// https://developers.google.com/web/fundamentals/web-components/shadowdom#events\nconst EVT_CHANGE = 'change';\nclass RapidInputSelectElement extends HTMLElement {\n constructor() {\n super();\n this._optionsUpdated = false;\n this._disabled = false;\n this._name = '';\n this._placeholder = '';\n this._readOnly = false;\n this._required = false;\n this._tooltip = '';\n this._value = '';\n this._internals = this.attachInternals();\n this._validationEl = this.ownerDocument.createElement('input');\n const root = this.attachShadow({ mode: 'open', delegatesFocus: true });\n root.appendChild(Object(_utils_fix_webkit_bug216985__WEBPACK_IMPORTED_MODULE_1__[\"cloneTemplate\"])(template));\n this._inputEl = this.shadowRoot.querySelector('[part=\"input\"]');\n this._selectEl = this.shadowRoot.querySelector('[part=\"select\"]');\n this._tooltipEl = this.shadowRoot.querySelector('[part=\"tooltip\"]');\n this._errorMessageEl = this.shadowRoot.querySelector('[part=\"error-message\"]');\n this._optionElsObserver = new MutationObserver(() => this._updateOptions());\n this._selectEl.addEventListener('change', () => this.value = this._selectEl.value);\n // Clicking on 's label trigger click() on contained field element and this element gain focus.\n // With delegatesFocus set to true, the first focusable element (this._selectEl in this case) should gain focus internally.\n // For mobile Safari 14, the support of delegateFocus option is unknown and it requires explicit focus() call on this._selectEl.\n // https://caniuse.com/mdn-api_element_attachshadow_delegatesfocus\n // While focus() opens select menu for Safari, Chrome just moves focus to select element and not open the menu.\n this.addEventListener('focus', () => {\n this._selectEl.focus(); // for mobile Safari\n });\n }\n static get formAssociated() {\n return true;\n }\n static get observedAttributes() {\n return [\n ATTR_DISABLED,\n ATTR_NAME,\n ATTR_PLACEHOLDER,\n ATTR_READONLY,\n ATTR_REQUIRED,\n ATTR_TOOLTIP,\n ATTR_VALUE,\n ];\n }\n connectedCallback() {\n Object(_utils_element_state__WEBPACK_IMPORTED_MODULE_0__[\"toggleElementState\"])(this, _utils_element_state__WEBPACK_IMPORTED_MODULE_0__[\"PSEUDO_BLANK\"], this.value === '');\n this._updateOptions();\n this._optionElsObserver.observe(this, { subtree: true, childList: true, attributes: true, attributeFilter: ['value'], characterData: true });\n // https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n RapidInputSelectElement.observedAttributes.forEach(attrName => {\n const propName = attrName;\n if (this.hasOwnProperty(propName)) {\n const value = this[propName];\n delete this[propName];\n this[propName] = value;\n }\n });\n }\n disconnectedCallback() {\n this._optionElsObserver.disconnect();\n }\n adoptedCallback() {\n }\n attributeChangedCallback(name, oldValue, newValue) {\n if (oldValue !== newValue) {\n switch (name) {\n case ATTR_DISABLED:\n this.disabled = newValue !== null;\n break;\n case ATTR_NAME:\n this.name = newValue;\n break;\n case ATTR_PLACEHOLDER:\n this.placeholder = newValue;\n break;\n case ATTR_READONLY:\n this.readOnly = newValue !== null;\n break;\n case ATTR_REQUIRED:\n this.required = newValue !== null;\n break;\n case ATTR_TOOLTIP:\n this.tooltip = newValue;\n break;\n case ATTR_VALUE:\n this.value = newValue;\n break;\n }\n }\n }\n formAssociatedCallback(form) {\n }\n formDisabledCallback(disabled) {\n this.disabled = disabled;\n }\n formResetCallback() {\n this.value = this.getAttribute(ATTR_VALUE) || '';\n }\n formStateRestoreCallback(value, reason) {\n }\n get form() {\n return this._internals.form;\n }\n get labels() {\n return this._internals.labels;\n }\n get validationMessage() {\n return this._validationEl.validationMessage;\n }\n get validity() {\n return this._validationEl.validity;\n }\n get willValidate() {\n return this._validationEl.willValidate;\n }\n get disabled() {\n return this._disabled;\n }\n set disabled(disabled) {\n if (this._disabled !== disabled) {\n this._disabled = disabled;\n this._validationEl.disabled = disabled;\n this._inputEl.disabled = disabled;\n this._selectEl.disabled = disabled;\n this.toggleAttribute(ATTR_DISABLED, disabled);\n }\n }\n get name() {\n return this._name;\n }\n set name(name) {\n name = `${name}`;\n if (this._name !== name) {\n this._name = name;\n this.setAttribute(ATTR_NAME, name);\n }\n }\n get placeholder() {\n return this._placeholder;\n }\n set placeholder(placeholder) {\n placeholder = `${placeholder}`;\n if (this._placeholder !== placeholder) {\n this._placeholder = placeholder;\n this._inputEl.placeholder = placeholder;\n this.setAttribute(ATTR_PLACEHOLDER, placeholder);\n this.checkValidity();\n }\n }\n get readOnly() {\n return this._readOnly;\n }\n set readOnly(readOnly) {\n if (this._readOnly !== readOnly) {\n this._readOnly = readOnly;\n // this._inputEl is always read only to avoid iOS text keyboard showing up\n // by gaining focus when user clicks 's label.\n // this._validationEl won't have readOnly property either as it would return valid\n // when required is set and the value is empty.\n this._inputEl.tabIndex = readOnly ? 0 : -1;\n this.toggleAttribute(ATTR_READONLY, readOnly);\n Object(_utils_element_state__WEBPACK_IMPORTED_MODULE_0__[\"toggleElementState\"])(this, _utils_element_state__WEBPACK_IMPORTED_MODULE_0__[\"PSEUDO_READONLY\"], readOnly);\n this.checkValidity();\n }\n }\n get required() {\n return this._required;\n }\n set required(required) {\n if (this._required !== required) {\n this._required = required;\n this._validationEl.required = required;\n this._inputEl.required = required;\n this.toggleAttribute(ATTR_REQUIRED, required);\n this.checkValidity();\n }\n }\n get tooltip() {\n return this._tooltip;\n }\n set tooltip(tooltip) {\n tooltip = `${tooltip}`;\n if (this._tooltip !== tooltip) {\n this._tooltip = tooltip;\n this._tooltipEl.textContent = tooltip;\n this.setAttribute(ATTR_TOOLTIP, tooltip);\n }\n }\n get value() {\n return this._value;\n }\n set value(value) {\n // While other text properties converts null to string \"null\", the expectation for value property is to set to empty string.\n value = value !== null ? `${value}` : '';\n if (this._optionsUpdated) {\n if (!Array.from(this._selectEl.options).find(optionEl => optionEl.value === value)) {\n value = '';\n }\n }\n if (this._value !== value) {\n this._value = value;\n if (this._selectEl.value !== value) {\n this._selectEl.value = value;\n }\n let valueText = '';\n const selectedOptionEl = this._selectEl.selectedOptions.item(0);\n if (selectedOptionEl) {\n valueText = selectedOptionEl.textContent;\n }\n if (this._inputEl.value !== valueText) {\n this._inputEl.value = valueText;\n }\n if (this._validationEl.value !== valueText) {\n this._validationEl.value = valueText;\n }\n this._internals.setFormValue(value);\n // Shim for https://developer.mozilla.org/en-US/docs/Web/CSS/:blank\n Object(_utils_element_state__WEBPACK_IMPORTED_MODULE_0__[\"toggleElementState\"])(this, _utils_element_state__WEBPACK_IMPORTED_MODULE_0__[\"PSEUDO_BLANK\"], value === '');\n if (!this.disabled && !this.readOnly) {\n this.dispatchEvent(new Event(EVT_CHANGE, { bubbles: true, cancelable: false, composed: false }));\n }\n this.checkValidity();\n }\n }\n checkValidity() {\n const valid = this._validationEl.checkValidity();\n // Safari does not support ElementInternals and won't set :invalid pseudo class.\n Object(_utils_element_state__WEBPACK_IMPORTED_MODULE_0__[\"toggleElementState\"])(this, _utils_element_state__WEBPACK_IMPORTED_MODULE_0__[\"PSEUDO_INVALID\"], !this.validity.valid);\n this._errorMessageEl.textContent = this.validationMessage;\n return valid;\n }\n reportValidity() {\n return this._validationEl.reportValidity();\n }\n // https://developer.mozilla.org/en-US/docs/Web/API/Constraint_validation\n setCustomValidity(message) {\n this._validationEl.setCustomValidity(message);\n this.checkValidity();\n }\n _updateOptions() {\n Array.from(this._selectEl.querySelectorAll('option'))\n .forEach(optionEl => optionEl.remove());\n Array.from(this.querySelectorAll('option')).forEach(optionEl => {\n const clonedEl = this.ownerDocument.createElement('option');\n clonedEl.setAttribute('value', optionEl.getAttribute('value'));\n clonedEl.textContent = optionEl.textContent;\n this._selectEl.appendChild(clonedEl);\n });\n if (this._selectEl.querySelectorAll('option').length > 0) {\n this._optionsUpdated = true;\n }\n if (this._selectEl.value !== this.value) {\n this._selectEl.value = this.value;\n }\n let valueText = '';\n const selectedOptionEl = this._selectEl.selectedOptions.item(0);\n if (selectedOptionEl) {\n valueText = selectedOptionEl.textContent;\n }\n if (this._inputEl.value !== valueText) {\n this._inputEl.value = valueText;\n }\n if (this._validationEl.value !== valueText) {\n this._validationEl.value = valueText;\n }\n this.checkValidity();\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/components/rapid-input-text-field/rapid-input-text-field.html\":\n/*!***************************************************************************!*\\\n !*** ./src/components/rapid-input-text-field/rapid-input-text-field.html ***!\n \\***************************************************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"
\\n \\n \\n \\n
\\n
\\n
\\n\");\n\n/***/ }),\n\n/***/ \"./src/components/rapid-input-text-field/rapid-input-text-field.scss\":\n/*!***************************************************************************!*\\\n !*** ./src/components/rapid-input-text-field/rapid-input-text-field.scss ***!\n \\***************************************************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\":host {\\n width: 100px;\\n min-height: 25px;\\n display: inline-flex;\\n flex-direction: column;\\n align-items: stretch;\\n outline-style: none;\\n outline-offset: -1px;\\n}\\n\\n:host(:disabled) {\\n color: var(--rapid-theme-color-tertiary, --rapid-color-gray-600);\\n}\\n\\n:host([hidden]) {\\n display: none;\\n}\\n\\n.main {\\n flex-grow: 1;\\n display: flex;\\n flex-direction: row;\\n justify-content: stretch;\\n align-items: stretch;\\n position: relative;\\n outline-style: none;\\n}\\n.main.desktop:focus-within {\\n outline-style: solid;\\n outline-width: 1px;\\n outline-color: inherit;\\n}\\n\\n[part=input] {\\n flex-grow: 1;\\n flex-shrink: 1;\\n appearance: none;\\n -webkit-appearance: none;\\n margin: 0;\\n outline-style: none;\\n border: solid 1px var(--rapid-color-gray-600);\\n border-radius: inherit;\\n padding: var(--rapid-input-text-field-padding, 16px);\\n overflow-x: hidden;\\n color: currentColor;\\n background-color: inherit;\\n font: inherit;\\n text-align: inherit;\\n text-overflow: ellipsis;\\n}\\n[part=input]::placeholder {\\n color: var(--rapid-theme-color-tertiary, currentColor);\\n}\\n\\n[part=reset] {\\n display: none;\\n position: absolute;\\n top: calc(50% - 24px / 2);\\n right: var(--rapid-input-text-field-padding, 16px);\\n width: 24px;\\n height: 24px;\\n outline-style: none;\\n}\\n\\n:host(:focus-within) [part=input]:enabled:read-write {\\n padding-right: calc(12px + 16px + var(--rapid-input-text-field-padding, 16px));\\n}\\n:host(:focus-within) [part=input]:enabled:read-write ~ [part=reset] {\\n display: block;\\n}\\n\\n[part=tooltip] {\\n max-width: fit-content;\\n display: none;\\n margin: 5px 0;\\n}\\n\\n:host(:focus-within:not([_rapid-invalid])) [part=tooltip]:not(:empty) {\\n display: block;\\n}\\n\\n[part=error-message] {\\n max-width: fit-content;\\n display: none;\\n margin: 5px 0;\\n color: var(--rapid-theme-color-negative, --rapid-color-red);\\n}\\n\\n:host([_rapid-invalid]) [part=error-message]:not(:empty),\\n:host(:invalid) [part=error-message]:not(:empty) {\\n display: block;\\n}\");\n\n/***/ }),\n\n/***/ \"./src/components/rapid-input-text-field/rapid-input-text-field.ts\":\n/*!*************************************************************************!*\\\n !*** ./src/components/rapid-input-text-field/rapid-input-text-field.ts ***!\n \\*************************************************************************/\n/*! exports provided: RapidInputTextFieldElement */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RapidInputTextFieldElement\", function() { return RapidInputTextFieldElement; });\n/* harmony import */ var _utils_element_state__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../utils/element-state */ \"./src/utils/element-state.ts\");\n/* harmony import */ var _utils_fix_webkit_bug216985__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/fix_webkit_bug216985 */ \"./src/utils/fix_webkit_bug216985.ts\");\n/* harmony import */ var _rapid_input_text_field_html__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./rapid-input-text-field.html */ \"./src/components/rapid-input-text-field/rapid-input-text-field.html\");\n/* harmony import */ var _rapid_input_text_field_scss__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./rapid-input-text-field.scss */ \"./src/components/rapid-input-text-field/rapid-input-text-field.scss\");\n\n\n\n\nconst template = document.createElement(\"template\");\ntemplate.innerHTML = `\n\n${_rapid_input_text_field_html__WEBPACK_IMPORTED_MODULE_2__[\"default\"]}\n`;\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/text\n// https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement\nconst ATTR_DISABLED = 'disabled';\nconst ATTR_MAX_LENGTH = 'maxlength';\nconst ATTR_MIN_LENGTH = 'minlength';\nconst ATTR_NAME = 'name'; // attr <--> prop\nconst ATTR_PATTERN = 'pattern';\nconst ATTR_PLACEHOLDER = 'placeholder';\nconst ATTR_READONLY = 'readonly';\nconst ATTR_REQUIRED = 'required';\nconst ATTR_TOOLTIP = 'tooltip'; // attr <--> prop <--> tooltipEl\nconst ATTR_VALUE = 'value'; // attr ---> prop <--> inputEl\n// https://developers.google.com/web/fundamentals/web-components/shadowdom#events\nconst EVT_CHANGE = 'change';\nclass RapidInputTextFieldElement extends HTMLElement {\n constructor() {\n super();\n this._disabled = false;\n this._maxLength = -1;\n this._minLength = -1;\n this._name = '';\n this._pattern = '';\n this._placeholder = '';\n this._readOnly = false;\n this._required = false;\n this._tooltip = '';\n this._value = '';\n this._internals = this.attachInternals();\n const root = this.attachShadow({ mode: 'open', delegatesFocus: true });\n root.appendChild(Object(_utils_fix_webkit_bug216985__WEBPACK_IMPORTED_MODULE_1__[\"cloneTemplate\"])(template));\n this._inputEl = this.shadowRoot.querySelector('[part=\"input\"]');\n this._resetEl = this.shadowRoot.querySelector('[part=\"reset\"]');\n this._tooltipEl = this.shadowRoot.querySelector('[part=\"tooltip\"]');\n this._errorMessageEl = this.shadowRoot.querySelector('[part=\"error-message\"]');\n this._inputEl.addEventListener('input', () => this.value = this._inputEl.value);\n // handling click event instead won't work for iOS 13.7.\n this._resetEl.addEventListener('mousedown', evt => {\n evt.preventDefault();\n this.reset();\n });\n }\n static get formAssociated() {\n return true;\n }\n static get observedAttributes() {\n return [\n ATTR_DISABLED,\n ATTR_MAX_LENGTH,\n ATTR_MIN_LENGTH,\n ATTR_NAME,\n ATTR_PATTERN,\n ATTR_PLACEHOLDER,\n ATTR_READONLY,\n ATTR_REQUIRED,\n ATTR_TOOLTIP,\n ATTR_VALUE,\n ];\n }\n connectedCallback() {\n Object(_utils_element_state__WEBPACK_IMPORTED_MODULE_0__[\"toggleElementState\"])(this, _utils_element_state__WEBPACK_IMPORTED_MODULE_0__[\"PSEUDO_BLANK\"], this.value === '');\n // https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n RapidInputTextFieldElement.observedAttributes.forEach(attrName => {\n const propName = attrName;\n if (this.hasOwnProperty(propName)) {\n const value = this[propName];\n delete this[propName];\n this[propName] = value;\n }\n });\n }\n disconnectedCallback() {\n }\n adoptedCallback() {\n }\n attributeChangedCallback(name, oldValue, newValue) {\n if (oldValue !== newValue) {\n switch (name) {\n case ATTR_DISABLED:\n this.disabled = newValue !== null;\n break;\n case ATTR_MAX_LENGTH:\n this.maxLength = parseInt(newValue);\n break;\n case ATTR_NAME:\n this.name = newValue;\n break;\n case ATTR_MIN_LENGTH:\n this.minLength = parseInt(newValue);\n break;\n case ATTR_PATTERN:\n this.pattern = newValue;\n break;\n case ATTR_PLACEHOLDER:\n this.placeholder = newValue;\n break;\n case ATTR_READONLY:\n this.readOnly = newValue !== null;\n break;\n case ATTR_REQUIRED:\n this.required = newValue !== null;\n break;\n case ATTR_TOOLTIP:\n this.tooltip = newValue;\n break;\n case ATTR_VALUE:\n this.value = newValue;\n break;\n }\n }\n }\n formAssociatedCallback(form) {\n }\n formDisabledCallback(disabled) {\n this.disabled = disabled;\n }\n formResetCallback() {\n this.value = this.getAttribute(ATTR_VALUE) || '';\n }\n formStateRestoreCallback(value, reason) {\n }\n get form() {\n return this._internals.form;\n }\n get labels() {\n return this._internals.labels;\n }\n get validationMessage() {\n return this._inputEl.validationMessage;\n }\n get validity() {\n return this._inputEl.validity;\n }\n get willValidate() {\n return this._inputEl.willValidate;\n }\n get disabled() {\n return this._disabled;\n }\n set disabled(disabled) {\n if (this._disabled !== disabled) {\n this._disabled = disabled;\n this._inputEl.disabled = disabled;\n this.toggleAttribute(ATTR_DISABLED, disabled);\n }\n }\n get maxLength() {\n return this._maxLength;\n }\n set maxLength(maxLength) {\n if (maxLength < 0) {\n throw new DOMException(`Failed to set the 'maxLength' property on 'RapidInputTextField': The value provided (${maxLength}) is not positive or 0`);\n }\n if (!isNaN(maxLength)) {\n if (this._maxLength !== maxLength) {\n this._maxLength = maxLength;\n this._inputEl.maxLength = maxLength;\n this.setAttribute(ATTR_MAX_LENGTH, maxLength.toString());\n this.checkValidity();\n }\n }\n }\n get minLength() {\n return this._minLength;\n }\n set minLength(minLength) {\n if (minLength < 0) {\n throw new DOMException(`Failed to set the 'minLength' property on 'RapidInputTextField': The value provided (${minLength}) is not positive or 0`);\n }\n if (!isNaN(minLength)) {\n if (this._minLength !== minLength) {\n this._minLength = minLength;\n this._inputEl.minLength = minLength;\n this.setAttribute(ATTR_MIN_LENGTH, minLength.toString());\n this.checkValidity();\n }\n }\n }\n get name() {\n return this._name;\n }\n set name(name) {\n name = `${name}`;\n if (this._name !== name) {\n this._name = name;\n this.setAttribute(ATTR_NAME, name);\n }\n }\n get pattern() {\n return this._pattern;\n }\n set pattern(pattern) {\n pattern = `${pattern}`;\n if (this._pattern !== pattern) {\n this._pattern = pattern;\n this._inputEl.pattern = pattern;\n this.setAttribute(ATTR_PATTERN, pattern);\n this.checkValidity();\n }\n }\n get placeholder() {\n return this._placeholder;\n }\n set placeholder(placeholder) {\n placeholder = `${placeholder}`;\n if (this._placeholder !== placeholder) {\n this._placeholder = placeholder;\n this._inputEl.placeholder = placeholder;\n this.setAttribute(ATTR_PLACEHOLDER, placeholder);\n this.checkValidity();\n }\n }\n get readOnly() {\n return this._readOnly;\n }\n set readOnly(readOnly) {\n if (this._readOnly !== readOnly) {\n this._readOnly = readOnly;\n this._inputEl.readOnly = readOnly;\n this.toggleAttribute(ATTR_READONLY, readOnly);\n Object(_utils_element_state__WEBPACK_IMPORTED_MODULE_0__[\"toggleElementState\"])(this, _utils_element_state__WEBPACK_IMPORTED_MODULE_0__[\"PSEUDO_READONLY\"], readOnly);\n this.checkValidity();\n }\n }\n get required() {\n return this._required;\n }\n set required(required) {\n if (this._required !== required) {\n this._required = required;\n this._inputEl.required = required;\n this.toggleAttribute(ATTR_REQUIRED, required);\n this.checkValidity();\n }\n }\n get tooltip() {\n return this._tooltip;\n }\n set tooltip(tooltip) {\n tooltip = `${tooltip}`;\n if (this._tooltip !== tooltip) {\n this._tooltip = tooltip;\n this._tooltipEl.textContent = tooltip;\n this.setAttribute(ATTR_TOOLTIP, tooltip);\n }\n }\n get value() {\n return this._value;\n }\n set value(value) {\n // While other text properties converts null to string \"null\", the expectation for value property is to set to empty string.\n value = value !== null ? `${value}` : '';\n if (this._value !== value) {\n this._value = value;\n if (this._inputEl.value !== value) {\n this._inputEl.value = value;\n }\n this._resetEl.disabled = value === '';\n this._internals.setFormValue(value);\n // Shim for https://developer.mozilla.org/en-US/docs/Web/CSS/:blank\n Object(_utils_element_state__WEBPACK_IMPORTED_MODULE_0__[\"toggleElementState\"])(this, _utils_element_state__WEBPACK_IMPORTED_MODULE_0__[\"PSEUDO_BLANK\"], value === '');\n if (!this.disabled && !this.readOnly) {\n this.dispatchEvent(new Event(EVT_CHANGE, { bubbles: true, cancelable: false, composed: false }));\n }\n this.checkValidity();\n }\n }\n checkValidity() {\n const valid = this._inputEl.checkValidity();\n // Safari does not support ElementInternals and won't set :invalid pseudo class.\n Object(_utils_element_state__WEBPACK_IMPORTED_MODULE_0__[\"toggleElementState\"])(this, _utils_element_state__WEBPACK_IMPORTED_MODULE_0__[\"PSEUDO_INVALID\"], !this.validity.valid);\n this._errorMessageEl.textContent = this.validationMessage;\n return valid;\n }\n reportValidity() {\n return this._inputEl.reportValidity();\n }\n // https://developer.mozilla.org/en-US/docs/Web/API/Constraint_validation\n setCustomValidity(message) {\n this._inputEl.setCustomValidity(message);\n this.checkValidity();\n }\n reset() {\n this.value = '';\n this._inputEl.focus();\n }\n ;\n}\n\n\n/***/ }),\n\n/***/ \"./src/components/rapid-input-username-field/rapid-input-username-field.html\":\n/*!***********************************************************************************!*\\\n !*** ./src/components/rapid-input-username-field/rapid-input-username-field.html ***!\n \\***********************************************************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"
\\n \\n \\n \\n
\\n
\\n
\\n\");\n\n/***/ }),\n\n/***/ \"./src/components/rapid-input-username-field/rapid-input-username-field.scss\":\n/*!***********************************************************************************!*\\\n !*** ./src/components/rapid-input-username-field/rapid-input-username-field.scss ***!\n \\***********************************************************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\":host {\\n width: 100px;\\n min-height: 25px;\\n display: inline-flex;\\n flex-direction: column;\\n align-items: stretch;\\n outline-style: none;\\n outline-offset: -1px;\\n}\\n\\n:host(:disabled) {\\n color: var(--rapid-theme-color-tertiary, --rapid-color-gray-600);\\n}\\n\\n:host([hidden]) {\\n display: none;\\n}\\n\\n.main {\\n flex-grow: 1;\\n display: flex;\\n flex-direction: row;\\n justify-content: stretch;\\n align-items: stretch;\\n position: relative;\\n outline-style: none;\\n}\\n.main.desktop:focus-within {\\n outline-style: solid;\\n outline-width: 1px;\\n outline-color: inherit;\\n}\\n\\n[part=input] {\\n flex-grow: 1;\\n flex-shrink: 1;\\n appearance: none;\\n -webkit-appearance: none;\\n margin: 0;\\n outline-style: none;\\n border: solid 1px var(--rapid-color-gray-600);\\n border-radius: inherit;\\n padding: var(--rapid-input-text-field-padding, 16px);\\n overflow-x: hidden;\\n color: currentColor;\\n background-color: inherit;\\n font: inherit;\\n text-align: inherit;\\n text-overflow: ellipsis;\\n}\\n[part=input]::placeholder {\\n color: var(--rapid-theme-color-tertiary, currentColor);\\n}\\n\\n[part=reset] {\\n display: none;\\n position: absolute;\\n top: calc(50% - 24px / 2);\\n right: var(--rapid-input-text-field-padding, 16px);\\n width: 24px;\\n height: 24px;\\n outline-style: none;\\n}\\n\\n:host(:focus-within) [part=input]:enabled:read-write {\\n padding-right: calc(12px + 16px + var(--rapid-input-text-field-padding, 16px));\\n}\\n:host(:focus-within) [part=input]:enabled:read-write ~ [part=reset] {\\n display: block;\\n}\\n\\n[part=tooltip] {\\n max-width: fit-content;\\n display: none;\\n margin: 5px 0;\\n}\\n\\n:host(:focus-within:not([_rapid-invalid])) [part=tooltip]:not(:empty) {\\n display: block;\\n}\\n\\n[part=error-message] {\\n max-width: fit-content;\\n display: none;\\n margin: 5px 0;\\n color: var(--rapid-theme-color-negative, --rapid-color-red);\\n}\\n\\n:host([_rapid-invalid]) [part=error-message]:not(:empty),\\n:host(:invalid) [part=error-message]:not(:empty) {\\n display: block;\\n}\");\n\n/***/ }),\n\n/***/ \"./src/components/rapid-input-username-field/rapid-input-username-field.ts\":\n/*!*********************************************************************************!*\\\n !*** ./src/components/rapid-input-username-field/rapid-input-username-field.ts ***!\n \\*********************************************************************************/\n/*! exports provided: RapidInputUsernameFieldElement */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RapidInputUsernameFieldElement\", function() { return RapidInputUsernameFieldElement; });\n/* harmony import */ var _utils_element_state__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../utils/element-state */ \"./src/utils/element-state.ts\");\n/* harmony import */ var _utils_fix_webkit_bug216985__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/fix_webkit_bug216985 */ \"./src/utils/fix_webkit_bug216985.ts\");\n/* harmony import */ var _rapid_input_username_field_html__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./rapid-input-username-field.html */ \"./src/components/rapid-input-username-field/rapid-input-username-field.html\");\n/* harmony import */ var _rapid_input_username_field_scss__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./rapid-input-username-field.scss */ \"./src/components/rapid-input-username-field/rapid-input-username-field.scss\");\n\n\n\n\nconst template = document.createElement(\"template\");\ntemplate.innerHTML = `\n\n${_rapid_input_username_field_html__WEBPACK_IMPORTED_MODULE_2__[\"default\"]}\n`;\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/text\n// https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement\nconst ATTR_DISABLED = 'disabled';\nconst ATTR_MAX_LENGTH = 'maxlength';\nconst ATTR_MIN_LENGTH = 'minlength';\nconst ATTR_NAME = 'name'; // attr <--> prop\nconst ATTR_PATTERN = 'pattern';\nconst ATTR_PLACEHOLDER = 'placeholder';\nconst ATTR_READONLY = 'readonly';\nconst ATTR_REQUIRED = 'required';\nconst ATTR_TOOLTIP = 'tooltip'; // attr <--> prop <--> tooltipEl\nconst ATTR_VALUE = 'value'; // attr ---> prop <--> inputEl\n// https://developers.google.com/web/fundamentals/web-components/shadowdom#events\nconst EVT_CHANGE = 'change';\nclass RapidInputUsernameFieldElement extends HTMLElement {\n constructor() {\n super();\n this._disabled = false;\n this._maxLength = -1;\n this._minLength = -1;\n this._name = '';\n this._pattern = '';\n this._placeholder = '';\n this._readOnly = false;\n this._required = false;\n this._tooltip = '';\n this._value = '';\n this._internals = this.attachInternals();\n const root = this.attachShadow({ mode: 'open', delegatesFocus: true });\n root.appendChild(Object(_utils_fix_webkit_bug216985__WEBPACK_IMPORTED_MODULE_1__[\"cloneTemplate\"])(template));\n this._inputEl = this.shadowRoot.querySelector('[part=\"input\"]');\n this._resetEl = this.shadowRoot.querySelector('[part=\"reset\"]');\n this._tooltipEl = this.shadowRoot.querySelector('[part=\"tooltip\"]');\n this._errorMessageEl = this.shadowRoot.querySelector('[part=\"error-message\"]');\n this._inputEl.addEventListener('input', () => this.value = this._inputEl.value);\n // handling click event instead won't work for iOS 13.7.\n this._resetEl.addEventListener('mousedown', evt => {\n evt.preventDefault();\n this.reset();\n });\n }\n static get formAssociated() {\n return true;\n }\n static get observedAttributes() {\n return [\n ATTR_DISABLED,\n ATTR_MAX_LENGTH,\n ATTR_MIN_LENGTH,\n ATTR_NAME,\n ATTR_PATTERN,\n ATTR_PLACEHOLDER,\n ATTR_READONLY,\n ATTR_REQUIRED,\n ATTR_TOOLTIP,\n ATTR_VALUE,\n ];\n }\n connectedCallback() {\n Object(_utils_element_state__WEBPACK_IMPORTED_MODULE_0__[\"toggleElementState\"])(this, _utils_element_state__WEBPACK_IMPORTED_MODULE_0__[\"PSEUDO_BLANK\"], this.value === '');\n // https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n RapidInputUsernameFieldElement.observedAttributes.forEach(attrName => {\n const propName = attrName;\n if (this.hasOwnProperty(propName)) {\n const value = this[propName];\n delete this[propName];\n this[propName] = value;\n }\n });\n }\n disconnectedCallback() {\n }\n adoptedCallback() {\n }\n attributeChangedCallback(name, oldValue, newValue) {\n if (oldValue !== newValue) {\n switch (name) {\n case ATTR_DISABLED:\n this.disabled = newValue !== null;\n break;\n case ATTR_MAX_LENGTH:\n this.maxLength = parseInt(newValue);\n break;\n case ATTR_NAME:\n this.name = newValue;\n break;\n case ATTR_MIN_LENGTH:\n this.minLength = parseInt(newValue);\n break;\n case ATTR_PATTERN:\n this.pattern = newValue;\n break;\n case ATTR_PLACEHOLDER:\n this.placeholder = newValue;\n break;\n case ATTR_READONLY:\n this.readOnly = newValue !== null;\n break;\n case ATTR_REQUIRED:\n this.required = newValue !== null;\n break;\n case ATTR_TOOLTIP:\n this.tooltip = newValue;\n break;\n case ATTR_VALUE:\n this.value = newValue;\n break;\n }\n }\n }\n formAssociatedCallback(form) {\n }\n formDisabledCallback(disabled) {\n this.disabled = disabled;\n }\n formResetCallback() {\n this.value = this.getAttribute(ATTR_VALUE) || '';\n }\n formStateRestoreCallback(value, reason) {\n }\n get form() {\n return this._internals.form;\n }\n get labels() {\n return this._internals.labels;\n }\n get validationMessage() {\n return this._inputEl.validationMessage;\n }\n get validity() {\n return this._inputEl.validity;\n }\n get willValidate() {\n return this._inputEl.willValidate;\n }\n get disabled() {\n return this._disabled;\n }\n set disabled(disabled) {\n if (this._disabled !== disabled) {\n this._disabled = disabled;\n this._inputEl.disabled = disabled;\n this.toggleAttribute(ATTR_DISABLED, disabled);\n }\n }\n get maxLength() {\n return this._maxLength;\n }\n set maxLength(maxLength) {\n if (maxLength < 0) {\n throw new DOMException(`Failed to set the 'maxLength' property on 'RapidInputTextField': The value provided (${maxLength}) is not positive or 0`);\n }\n if (!isNaN(maxLength)) {\n if (this._maxLength !== maxLength) {\n this._maxLength = maxLength;\n this._inputEl.maxLength = maxLength;\n this.setAttribute(ATTR_MAX_LENGTH, maxLength.toString());\n this.checkValidity();\n }\n }\n }\n get minLength() {\n return this._minLength;\n }\n set minLength(minLength) {\n if (minLength < 0) {\n throw new DOMException(`Failed to set the 'minLength' property on 'RapidInputTextField': The value provided (${minLength}) is not positive or 0`);\n }\n if (!isNaN(minLength)) {\n if (this._minLength !== minLength) {\n this._minLength = minLength;\n this._inputEl.minLength = minLength;\n this.setAttribute(ATTR_MIN_LENGTH, minLength.toString());\n this.checkValidity();\n }\n }\n }\n get name() {\n return this._name;\n }\n set name(name) {\n name = `${name}`;\n if (this._name !== name) {\n this._name = name;\n this.setAttribute(ATTR_NAME, name);\n }\n }\n get pattern() {\n return this._pattern;\n }\n set pattern(pattern) {\n pattern = `${pattern}`;\n if (this._pattern !== pattern) {\n this._pattern = pattern;\n this._inputEl.pattern = pattern;\n this.setAttribute(ATTR_PATTERN, pattern);\n this.checkValidity();\n }\n }\n get placeholder() {\n return this._placeholder;\n }\n set placeholder(placeholder) {\n placeholder = `${placeholder}`;\n if (this._placeholder !== placeholder) {\n this._placeholder = placeholder;\n this._inputEl.placeholder = placeholder;\n this.setAttribute(ATTR_PLACEHOLDER, placeholder);\n this.checkValidity();\n }\n }\n get readOnly() {\n return this._readOnly;\n }\n set readOnly(readOnly) {\n if (this._readOnly !== readOnly) {\n this._readOnly = readOnly;\n this._inputEl.readOnly = readOnly;\n this.toggleAttribute(ATTR_READONLY, readOnly);\n Object(_utils_element_state__WEBPACK_IMPORTED_MODULE_0__[\"toggleElementState\"])(this, _utils_element_state__WEBPACK_IMPORTED_MODULE_0__[\"PSEUDO_READONLY\"], readOnly);\n this.checkValidity();\n }\n }\n get required() {\n return this._required;\n }\n set required(required) {\n if (this._required !== required) {\n this._required = required;\n this._inputEl.required = required;\n this.toggleAttribute(ATTR_REQUIRED, required);\n this.checkValidity();\n }\n }\n get tooltip() {\n return this._tooltip;\n }\n set tooltip(tooltip) {\n tooltip = `${tooltip}`;\n if (this._tooltip !== tooltip) {\n this._tooltip = tooltip;\n this._tooltipEl.textContent = tooltip;\n this.setAttribute(ATTR_TOOLTIP, tooltip);\n }\n }\n get value() {\n return this._value;\n }\n set value(value) {\n // While other text properties converts null to string \"null\", the expectation for value property is to set to empty string.\n value = value !== null ? `${value}` : '';\n if (this._value !== value) {\n this._value = value;\n if (this._inputEl.value !== value) {\n this._inputEl.value = value;\n }\n this._resetEl.disabled = value === '';\n this._internals.setFormValue(value);\n // Shim for https://developer.mozilla.org/en-US/docs/Web/CSS/:blank\n Object(_utils_element_state__WEBPACK_IMPORTED_MODULE_0__[\"toggleElementState\"])(this, _utils_element_state__WEBPACK_IMPORTED_MODULE_0__[\"PSEUDO_BLANK\"], value === '');\n if (!this.disabled && !this.readOnly) {\n this.dispatchEvent(new Event(EVT_CHANGE, { bubbles: true, cancelable: false, composed: false }));\n }\n this.checkValidity();\n }\n }\n checkValidity() {\n const valid = this._inputEl.checkValidity();\n // Safari does not support ElementInternals and won't set :invalid pseudo class.\n Object(_utils_element_state__WEBPACK_IMPORTED_MODULE_0__[\"toggleElementState\"])(this, _utils_element_state__WEBPACK_IMPORTED_MODULE_0__[\"PSEUDO_INVALID\"], !this.validity.valid);\n this._errorMessageEl.textContent = this.validationMessage;\n return valid;\n }\n reportValidity() {\n return this._inputEl.reportValidity();\n }\n // https://developer.mozilla.org/en-US/docs/Web/API/Constraint_validation\n setCustomValidity(message) {\n this._inputEl.setCustomValidity(message);\n this.checkValidity();\n }\n reset() {\n this.value = '';\n this._inputEl.focus();\n }\n ;\n}\n\n\n/***/ }),\n\n/***/ \"./src/components/rapid-progress/rapid-progress.html\":\n/*!***********************************************************!*\\\n !*** ./src/components/rapid-progress/rapid-progress.html ***!\n \\***********************************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n\");\n\n/***/ }),\n\n/***/ \"./src/components/rapid-progress/rapid-progress.scss\":\n/*!***********************************************************!*\\\n !*** ./src/components/rapid-progress/rapid-progress.scss ***!\n \\***********************************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\":host {\\n --progress-background-color: var(--rapid-theme-background-color);\\n --progress-value-color: var(--rapid-color-orange);\\n --progress-finished-color: var(--rapid-color-teal);\\n display: inline-block;\\n}\\n:host[hidden] {\\n display: none;\\n}\\n\\n.progress {\\n width: 100%;\\n -webkit-appearance: none;\\n appearance: none;\\n}\\n.progress::-webkit-progress-bar {\\n height: 6px;\\n background-color: var(--progress-background-color);\\n border-radius: 3px;\\n overflow: hidden;\\n}\\n.progress::-webkit-progress-value {\\n background-color: var(--progress-value-color);\\n border-radius: 3px;\\n transition: width 0.5s;\\n}\\n\\n.finished::-webkit-progress-value {\\n background-color: var(--progress-finished-color);\\n}\");\n\n/***/ }),\n\n/***/ \"./src/components/rapid-progress/rapid-progress.ts\":\n/*!*********************************************************!*\\\n !*** ./src/components/rapid-progress/rapid-progress.ts ***!\n \\*********************************************************/\n/*! exports provided: RapidProgressElement */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RapidProgressElement\", function() { return RapidProgressElement; });\n/* harmony import */ var _rapid_progress_html__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./rapid-progress.html */ \"./src/components/rapid-progress/rapid-progress.html\");\n/* harmony import */ var _rapid_progress_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rapid-progress.scss */ \"./src/components/rapid-progress/rapid-progress.scss\");\n\n\nconst template = document.createElement(\"template\");\ntemplate.innerHTML = `\n\n${_rapid_progress_html__WEBPACK_IMPORTED_MODULE_0__[\"default\"]}\n`;\nconst ATTR_VALUE = 'value'; // attr ---> prop\nconst ATTR_MAX = 'max';\nclass RapidProgressElement extends HTMLElement {\n constructor() {\n super();\n this._min = 0;\n this._max = 100;\n this._value = 0;\n const root = this.attachShadow({ mode: 'open', delegatesFocus: true });\n root.appendChild(template.content.cloneNode(true));\n this._progressEl = this.shadowRoot.querySelector('progress');\n }\n static get observedAttributes() {\n return [\n ATTR_VALUE,\n ATTR_MAX\n ];\n }\n connectedCallback() {\n // https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties\n RapidProgressElement.observedAttributes.forEach(attrName => {\n const propName = attrName;\n if (this.hasOwnProperty(propName)) {\n const value = this[propName];\n delete this[propName];\n this[propName] = value;\n }\n });\n }\n disconnectedCallback() { }\n attributeChangedCallback(name, oldValue, newValue) {\n switch (name) {\n case ATTR_VALUE:\n this.value = parseInt(newValue, 10);\n break;\n case ATTR_MAX:\n this.max = parseInt(newValue, 10);\n break;\n }\n }\n get value() {\n return this._value;\n }\n set value(value) {\n if (this._value !== value) {\n value = value || 0;\n this._value = Math.min(Math.max(value, this._min), this._max);\n this._progressEl.value = value;\n this._value >= this._max ? this._progressEl.classList.add('finished') : this._progressEl.classList.remove('finished');\n }\n }\n get max() {\n return this._max;\n }\n set max(max) {\n if (this._max !== max && max > 0) {\n max = max || 100;\n this._max = max;\n this._progressEl.max = max;\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/icons/16x16/about-16.svg\":\n/*!**************************************!*\\\n !*** ./src/icons/16x16/about-16.svg ***!\n \\**************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/16x16/chevron-16.svg\":\n/*!****************************************!*\\\n !*** ./src/icons/16x16/chevron-16.svg ***!\n \\****************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/16x16/close-16.svg\":\n/*!**************************************!*\\\n !*** ./src/icons/16x16/close-16.svg ***!\n \\**************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/16x16/data-16.svg\":\n/*!*************************************!*\\\n !*** ./src/icons/16x16/data-16.svg ***!\n \\*************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/16x16/done-16.svg\":\n/*!*************************************!*\\\n !*** ./src/icons/16x16/done-16.svg ***!\n \\*************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/16x16/eye-16.svg\":\n/*!************************************!*\\\n !*** ./src/icons/16x16/eye-16.svg ***!\n \\************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/16x16/index.ts\":\n/*!**********************************!*\\\n !*** ./src/icons/16x16/index.ts ***!\n \\**********************************/\n/*! exports provided: icons */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"icons\", function() { return icons; });\n/* harmony import */ var _about_16_svg__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./about-16.svg */ \"./src/icons/16x16/about-16.svg\");\n/* harmony import */ var _chevron_16_svg__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chevron-16.svg */ \"./src/icons/16x16/chevron-16.svg\");\n/* harmony import */ var _close_16_svg__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./close-16.svg */ \"./src/icons/16x16/close-16.svg\");\n/* harmony import */ var _data_16_svg__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./data-16.svg */ \"./src/icons/16x16/data-16.svg\");\n/* harmony import */ var _done_16_svg__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./done-16.svg */ \"./src/icons/16x16/done-16.svg\");\n/* harmony import */ var _eye_16_svg__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./eye-16.svg */ \"./src/icons/16x16/eye-16.svg\");\n/* harmony import */ var _logout_16_svg__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./logout-16.svg */ \"./src/icons/16x16/logout-16.svg\");\n/* harmony import */ var _menu_16_svg__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./menu-16.svg */ \"./src/icons/16x16/menu-16.svg\");\n/* harmony import */ var _notifications_16_svg__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./notifications-16.svg */ \"./src/icons/16x16/notifications-16.svg\");\n/* harmony import */ var _pause_16_svg__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./pause-16.svg */ \"./src/icons/16x16/pause-16.svg\");\n/* harmony import */ var _profile_16_svg__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./profile-16.svg */ \"./src/icons/16x16/profile-16.svg\");\n/* harmony import */ var _scan_16_svg__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./scan-16.svg */ \"./src/icons/16x16/scan-16.svg\");\n/* harmony import */ var _search_16_svg__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./search-16.svg */ \"./src/icons/16x16/search-16.svg\");\n/* harmony import */ var _site_16_svg__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./site-16.svg */ \"./src/icons/16x16/site-16.svg\");\n/* harmony import */ var _support_16_svg__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./support-16.svg */ \"./src/icons/16x16/support-16.svg\");\n/* harmony import */ var _switch_16_svg__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./switch-16.svg */ \"./src/icons/16x16/switch-16.svg\");\n/* harmony import */ var _transfer_16_svg__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./transfer-16.svg */ \"./src/icons/16x16/transfer-16.svg\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst icons = {\n 'about-16': _about_16_svg__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n 'chevron-16': _chevron_16_svg__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n 'close-16': _close_16_svg__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n 'data-16': _data_16_svg__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n 'done-16': _done_16_svg__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n 'eye-16': _eye_16_svg__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n 'logout-16': _logout_16_svg__WEBPACK_IMPORTED_MODULE_6__[\"default\"],\n 'menu-16': _menu_16_svg__WEBPACK_IMPORTED_MODULE_7__[\"default\"],\n 'notifications-16': _notifications_16_svg__WEBPACK_IMPORTED_MODULE_8__[\"default\"],\n 'pause-16': _pause_16_svg__WEBPACK_IMPORTED_MODULE_9__[\"default\"],\n 'profile-16': _profile_16_svg__WEBPACK_IMPORTED_MODULE_10__[\"default\"],\n 'scan-16': _scan_16_svg__WEBPACK_IMPORTED_MODULE_11__[\"default\"],\n 'search-16': _search_16_svg__WEBPACK_IMPORTED_MODULE_12__[\"default\"],\n 'site-16': _site_16_svg__WEBPACK_IMPORTED_MODULE_13__[\"default\"],\n 'support-16': _support_16_svg__WEBPACK_IMPORTED_MODULE_14__[\"default\"],\n 'switch-16': _switch_16_svg__WEBPACK_IMPORTED_MODULE_15__[\"default\"],\n 'transfer-16': _transfer_16_svg__WEBPACK_IMPORTED_MODULE_16__[\"default\"],\n};\n\n\n/***/ }),\n\n/***/ \"./src/icons/16x16/logout-16.svg\":\n/*!***************************************!*\\\n !*** ./src/icons/16x16/logout-16.svg ***!\n \\***************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/16x16/menu-16.svg\":\n/*!*************************************!*\\\n !*** ./src/icons/16x16/menu-16.svg ***!\n \\*************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/16x16/notifications-16.svg\":\n/*!**********************************************!*\\\n !*** ./src/icons/16x16/notifications-16.svg ***!\n \\**********************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/16x16/pause-16.svg\":\n/*!**************************************!*\\\n !*** ./src/icons/16x16/pause-16.svg ***!\n \\**************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/16x16/profile-16.svg\":\n/*!****************************************!*\\\n !*** ./src/icons/16x16/profile-16.svg ***!\n \\****************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/16x16/scan-16.svg\":\n/*!*************************************!*\\\n !*** ./src/icons/16x16/scan-16.svg ***!\n \\*************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/16x16/search-16.svg\":\n/*!***************************************!*\\\n !*** ./src/icons/16x16/search-16.svg ***!\n \\***************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/16x16/site-16.svg\":\n/*!*************************************!*\\\n !*** ./src/icons/16x16/site-16.svg ***!\n \\*************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/16x16/support-16.svg\":\n/*!****************************************!*\\\n !*** ./src/icons/16x16/support-16.svg ***!\n \\****************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/16x16/switch-16.svg\":\n/*!***************************************!*\\\n !*** ./src/icons/16x16/switch-16.svg ***!\n \\***************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/16x16/transfer-16.svg\":\n/*!*****************************************!*\\\n !*** ./src/icons/16x16/transfer-16.svg ***!\n \\*****************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/about-24.svg\":\n/*!**************************************!*\\\n !*** ./src/icons/24x24/about-24.svg ***!\n \\**************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n \\n\\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/ambulance-24.svg\":\n/*!******************************************!*\\\n !*** ./src/icons/24x24/ambulance-24.svg ***!\n \\******************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/app-switcher-24.svg\":\n/*!*********************************************!*\\\n !*** ./src/icons/24x24/app-switcher-24.svg ***!\n \\*********************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/arrow-24.svg\":\n/*!**************************************!*\\\n !*** ./src/icons/24x24/arrow-24.svg ***!\n \\**************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/arrow-up-24.svg\":\n/*!*****************************************!*\\\n !*** ./src/icons/24x24/arrow-up-24.svg ***!\n \\*****************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/axial-24.svg\":\n/*!**************************************!*\\\n !*** ./src/icons/24x24/axial-24.svg ***!\n \\**************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/back-24.svg\":\n/*!*************************************!*\\\n !*** ./src/icons/24x24/back-24.svg ***!\n \\*************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/bed-24.svg\":\n/*!************************************!*\\\n !*** ./src/icons/24x24/bed-24.svg ***!\n \\************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/calendar-24.svg\":\n/*!*****************************************!*\\\n !*** ./src/icons/24x24/calendar-24.svg ***!\n \\*****************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/camera-24.svg\":\n/*!***************************************!*\\\n !*** ./src/icons/24x24/camera-24.svg ***!\n \\***************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/check-24.svg\":\n/*!**************************************!*\\\n !*** ./src/icons/24x24/check-24.svg ***!\n \\**************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/chevron-24.svg\":\n/*!****************************************!*\\\n !*** ./src/icons/24x24/chevron-24.svg ***!\n \\****************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/chevron-expand-24.svg\":\n/*!***********************************************!*\\\n !*** ./src/icons/24x24/chevron-expand-24.svg ***!\n \\***********************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/clinical-info-24.svg\":\n/*!**********************************************!*\\\n !*** ./src/icons/24x24/clinical-info-24.svg ***!\n \\**********************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/clinical-trial-24.svg\":\n/*!***********************************************!*\\\n !*** ./src/icons/24x24/clinical-trial-24.svg ***!\n \\***********************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/close-24.svg\":\n/*!**************************************!*\\\n !*** ./src/icons/24x24/close-24.svg ***!\n \\**************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/close-circle-24.svg\":\n/*!*********************************************!*\\\n !*** ./src/icons/24x24/close-circle-24.svg ***!\n \\*********************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/controls-24.svg\":\n/*!*****************************************!*\\\n !*** ./src/icons/24x24/controls-24.svg ***!\n \\*****************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/coronal-24.svg\":\n/*!****************************************!*\\\n !*** ./src/icons/24x24/coronal-24.svg ***!\n \\****************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/create-24.svg\":\n/*!***************************************!*\\\n !*** ./src/icons/24x24/create-24.svg ***!\n \\***************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/data-24.svg\":\n/*!*************************************!*\\\n !*** ./src/icons/24x24/data-24.svg ***!\n \\*************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/desktop-24.svg\":\n/*!****************************************!*\\\n !*** ./src/icons/24x24/desktop-24.svg ***!\n \\****************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/download-24.svg\":\n/*!*****************************************!*\\\n !*** ./src/icons/24x24/download-24.svg ***!\n \\*****************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/expanded-24.svg\":\n/*!*****************************************!*\\\n !*** ./src/icons/24x24/expanded-24.svg ***!\n \\*****************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/expanded-closed-24.svg\":\n/*!************************************************!*\\\n !*** ./src/icons/24x24/expanded-closed-24.svg ***!\n \\************************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/eye-24.svg\":\n/*!************************************!*\\\n !*** ./src/icons/24x24/eye-24.svg ***!\n \\************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/feed-24.svg\":\n/*!*************************************!*\\\n !*** ./src/icons/24x24/feed-24.svg ***!\n \\*************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/index.ts\":\n/*!**********************************!*\\\n !*** ./src/icons/24x24/index.ts ***!\n \\**********************************/\n/*! exports provided: icons */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"icons\", function() { return icons; });\n/* harmony import */ var _about_24_svg__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./about-24.svg */ \"./src/icons/24x24/about-24.svg\");\n/* harmony import */ var _ambulance_24_svg__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ambulance-24.svg */ \"./src/icons/24x24/ambulance-24.svg\");\n/* harmony import */ var _app_switcher_24_svg__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./app-switcher-24.svg */ \"./src/icons/24x24/app-switcher-24.svg\");\n/* harmony import */ var _arrow_24_svg__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./arrow-24.svg */ \"./src/icons/24x24/arrow-24.svg\");\n/* harmony import */ var _arrow_up_24_svg__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./arrow-up-24.svg */ \"./src/icons/24x24/arrow-up-24.svg\");\n/* harmony import */ var _axial_24_svg__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./axial-24.svg */ \"./src/icons/24x24/axial-24.svg\");\n/* harmony import */ var _back_24_svg__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./back-24.svg */ \"./src/icons/24x24/back-24.svg\");\n/* harmony import */ var _bed_24_svg__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./bed-24.svg */ \"./src/icons/24x24/bed-24.svg\");\n/* harmony import */ var _calendar_24_svg__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./calendar-24.svg */ \"./src/icons/24x24/calendar-24.svg\");\n/* harmony import */ var _camera_24_svg__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./camera-24.svg */ \"./src/icons/24x24/camera-24.svg\");\n/* harmony import */ var _check_24_svg__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./check-24.svg */ \"./src/icons/24x24/check-24.svg\");\n/* harmony import */ var _chevron_24_svg__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./chevron-24.svg */ \"./src/icons/24x24/chevron-24.svg\");\n/* harmony import */ var _chevron_expand_24_svg__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./chevron-expand-24.svg */ \"./src/icons/24x24/chevron-expand-24.svg\");\n/* harmony import */ var _clinical_info_24_svg__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./clinical-info-24.svg */ \"./src/icons/24x24/clinical-info-24.svg\");\n/* harmony import */ var _clinical_trial_24_svg__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./clinical-trial-24.svg */ \"./src/icons/24x24/clinical-trial-24.svg\");\n/* harmony import */ var _close_24_svg__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./close-24.svg */ \"./src/icons/24x24/close-24.svg\");\n/* harmony import */ var _close_circle_24_svg__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./close-circle-24.svg */ \"./src/icons/24x24/close-circle-24.svg\");\n/* harmony import */ var _controls_24_svg__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./controls-24.svg */ \"./src/icons/24x24/controls-24.svg\");\n/* harmony import */ var _coronal_24_svg__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./coronal-24.svg */ \"./src/icons/24x24/coronal-24.svg\");\n/* harmony import */ var _create_24_svg__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./create-24.svg */ \"./src/icons/24x24/create-24.svg\");\n/* harmony import */ var _data_24_svg__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./data-24.svg */ \"./src/icons/24x24/data-24.svg\");\n/* harmony import */ var _desktop_24_svg__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./desktop-24.svg */ \"./src/icons/24x24/desktop-24.svg\");\n/* harmony import */ var _download_24_svg__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./download-24.svg */ \"./src/icons/24x24/download-24.svg\");\n/* harmony import */ var _expanded_24_svg__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./expanded-24.svg */ \"./src/icons/24x24/expanded-24.svg\");\n/* harmony import */ var _expanded_closed_24_svg__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./expanded-closed-24.svg */ \"./src/icons/24x24/expanded-closed-24.svg\");\n/* harmony import */ var _eye_24_svg__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./eye-24.svg */ \"./src/icons/24x24/eye-24.svg\");\n/* harmony import */ var _feed_24_svg__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./feed-24.svg */ \"./src/icons/24x24/feed-24.svg\");\n/* harmony import */ var _levels_24_svg__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./levels-24.svg */ \"./src/icons/24x24/levels-24.svg\");\n/* harmony import */ var _logout_24_svg__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./logout-24.svg */ \"./src/icons/24x24/logout-24.svg\");\n/* harmony import */ var _medical_symbol_24_svg__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./medical-symbol-24.svg */ \"./src/icons/24x24/medical-symbol-24.svg\");\n/* harmony import */ var _menu_24_svg__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./menu-24.svg */ \"./src/icons/24x24/menu-24.svg\");\n/* harmony import */ var _messages_24_svg__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./messages-24.svg */ \"./src/icons/24x24/messages-24.svg\");\n/* harmony import */ var _mip_24_svg__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./mip-24.svg */ \"./src/icons/24x24/mip-24.svg\");\n/* harmony import */ var _neuro_24_svg__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./neuro-24.svg */ \"./src/icons/24x24/neuro-24.svg\");\n/* harmony import */ var _notifications_24_svg__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./notifications-24.svg */ \"./src/icons/24x24/notifications-24.svg\");\n/* harmony import */ var _notifications_off_24_svg__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./notifications-off-24.svg */ \"./src/icons/24x24/notifications-off-24.svg\");\n/* harmony import */ var _notifications_on_24_svg__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./notifications-on-24.svg */ \"./src/icons/24x24/notifications-on-24.svg\");\n/* harmony import */ var _orientation_24_svg__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./orientation-24.svg */ \"./src/icons/24x24/orientation-24.svg\");\n/* harmony import */ var _patient_add_24_svg__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./patient-add-24.svg */ \"./src/icons/24x24/patient-add-24.svg\");\n/* harmony import */ var _patient_24_svg__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./patient-24.svg */ \"./src/icons/24x24/patient-24.svg\");\n/* harmony import */ var _patient_cards_24_svg__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./patient-cards-24.svg */ \"./src/icons/24x24/patient-cards-24.svg\");\n/* harmony import */ var _plus_24_svg__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./plus-24.svg */ \"./src/icons/24x24/plus-24.svg\");\n/* harmony import */ var _profile_24_svg__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./profile-24.svg */ \"./src/icons/24x24/profile-24.svg\");\n/* harmony import */ var _pulmonary_24_svg__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./pulmonary-24.svg */ \"./src/icons/24x24/pulmonary-24.svg\");\n/* harmony import */ var _quality_24_svg__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./quality-24.svg */ \"./src/icons/24x24/quality-24.svg\");\n/* harmony import */ var _reset_24_svg__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./reset-24.svg */ \"./src/icons/24x24/reset-24.svg\");\n/* harmony import */ var _sagittal_24_svg__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./sagittal-24.svg */ \"./src/icons/24x24/sagittal-24.svg\");\n/* harmony import */ var _scan_24_svg__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./scan-24.svg */ \"./src/icons/24x24/scan-24.svg\");\n/* harmony import */ var _search_24_svg__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./search-24.svg */ \"./src/icons/24x24/search-24.svg\");\n/* harmony import */ var _send_24_svg__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./send-24.svg */ \"./src/icons/24x24/send-24.svg\");\n/* harmony import */ var _share_24_svg__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./share-24.svg */ \"./src/icons/24x24/share-24.svg\");\n/* harmony import */ var _site_24_svg__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./site-24.svg */ \"./src/icons/24x24/site-24.svg\");\n/* harmony import */ var _sound_24_svg__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./sound-24.svg */ \"./src/icons/24x24/sound-24.svg\");\n/* harmony import */ var _speech_bubble_empty_24_svg__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./speech-bubble-empty-24.svg */ \"./src/icons/24x24/speech-bubble-empty-24.svg\");\n/* harmony import */ var _spinner_24_svg__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ./spinner-24.svg */ \"./src/icons/24x24/spinner-24.svg\");\n/* harmony import */ var _support_24_svg__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ./support-24.svg */ \"./src/icons/24x24/support-24.svg\");\n/* harmony import */ var _system_24_svg__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ./system-24.svg */ \"./src/icons/24x24/system-24.svg\");\n/* harmony import */ var _tracking_24_svg__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ./tracking-24.svg */ \"./src/icons/24x24/tracking-24.svg\");\n/* harmony import */ var _transfer_24_svg__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ./transfer-24.svg */ \"./src/icons/24x24/transfer-24.svg\");\n/* harmony import */ var _usa_24_svg__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ./usa-24.svg */ \"./src/icons/24x24/usa-24.svg\");\n/* harmony import */ var _walk_in_24_svg__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ./walk-in-24.svg */ \"./src/icons/24x24/walk-in-24.svg\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst icons = {\n 'ambulance-24': _ambulance_24_svg__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n 'about-24': _about_24_svg__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n 'app-switcher-24': _app_switcher_24_svg__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n 'arrow-24': _arrow_24_svg__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n 'arrow-up-24': _arrow_up_24_svg__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n 'axial-24': _axial_24_svg__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n 'back-24': _back_24_svg__WEBPACK_IMPORTED_MODULE_6__[\"default\"],\n 'bed-24': _bed_24_svg__WEBPACK_IMPORTED_MODULE_7__[\"default\"],\n 'calendar-24': _calendar_24_svg__WEBPACK_IMPORTED_MODULE_8__[\"default\"],\n 'camera-24': _camera_24_svg__WEBPACK_IMPORTED_MODULE_9__[\"default\"],\n 'check-24': _check_24_svg__WEBPACK_IMPORTED_MODULE_10__[\"default\"],\n 'chevron-24': _chevron_24_svg__WEBPACK_IMPORTED_MODULE_11__[\"default\"],\n 'chevron-expand-24': _chevron_expand_24_svg__WEBPACK_IMPORTED_MODULE_12__[\"default\"],\n 'clinical-info-24': _clinical_info_24_svg__WEBPACK_IMPORTED_MODULE_13__[\"default\"],\n 'clinical-trial-24': _clinical_trial_24_svg__WEBPACK_IMPORTED_MODULE_14__[\"default\"],\n 'close-24': _close_24_svg__WEBPACK_IMPORTED_MODULE_15__[\"default\"],\n 'close-circle-24': _close_circle_24_svg__WEBPACK_IMPORTED_MODULE_16__[\"default\"],\n 'controls-24': _controls_24_svg__WEBPACK_IMPORTED_MODULE_17__[\"default\"],\n 'coronal-24': _coronal_24_svg__WEBPACK_IMPORTED_MODULE_18__[\"default\"],\n 'create-24': _create_24_svg__WEBPACK_IMPORTED_MODULE_19__[\"default\"],\n 'data-24': _data_24_svg__WEBPACK_IMPORTED_MODULE_20__[\"default\"],\n 'desktop-24': _desktop_24_svg__WEBPACK_IMPORTED_MODULE_21__[\"default\"],\n 'download-24': _download_24_svg__WEBPACK_IMPORTED_MODULE_22__[\"default\"],\n 'expanded-24': _expanded_24_svg__WEBPACK_IMPORTED_MODULE_23__[\"default\"],\n 'expanded-closed-24': _expanded_closed_24_svg__WEBPACK_IMPORTED_MODULE_24__[\"default\"],\n 'eye-24': _eye_24_svg__WEBPACK_IMPORTED_MODULE_25__[\"default\"],\n 'feed-24': _feed_24_svg__WEBPACK_IMPORTED_MODULE_26__[\"default\"],\n 'levels-24': _levels_24_svg__WEBPACK_IMPORTED_MODULE_27__[\"default\"],\n 'logout-24': _logout_24_svg__WEBPACK_IMPORTED_MODULE_28__[\"default\"],\n 'medical-symbol-24': _medical_symbol_24_svg__WEBPACK_IMPORTED_MODULE_29__[\"default\"],\n 'menu-24': _menu_24_svg__WEBPACK_IMPORTED_MODULE_30__[\"default\"],\n 'messages-24': _messages_24_svg__WEBPACK_IMPORTED_MODULE_31__[\"default\"],\n 'mip-24': _mip_24_svg__WEBPACK_IMPORTED_MODULE_32__[\"default\"],\n 'neuro-24': _neuro_24_svg__WEBPACK_IMPORTED_MODULE_33__[\"default\"],\n 'notifications-24': _notifications_24_svg__WEBPACK_IMPORTED_MODULE_34__[\"default\"],\n 'notifications-off-24': _notifications_off_24_svg__WEBPACK_IMPORTED_MODULE_35__[\"default\"],\n 'notifications-on-24': _notifications_on_24_svg__WEBPACK_IMPORTED_MODULE_36__[\"default\"],\n 'orientation-24': _orientation_24_svg__WEBPACK_IMPORTED_MODULE_37__[\"default\"],\n 'patient-24': _patient_24_svg__WEBPACK_IMPORTED_MODULE_39__[\"default\"],\n 'patient-add-24': _patient_add_24_svg__WEBPACK_IMPORTED_MODULE_38__[\"default\"],\n 'patient-cards-24': _patient_cards_24_svg__WEBPACK_IMPORTED_MODULE_40__[\"default\"],\n 'plus-24': _plus_24_svg__WEBPACK_IMPORTED_MODULE_41__[\"default\"],\n 'profile-24': _profile_24_svg__WEBPACK_IMPORTED_MODULE_42__[\"default\"],\n 'pulmonary-24': _pulmonary_24_svg__WEBPACK_IMPORTED_MODULE_43__[\"default\"],\n 'quality-24': _quality_24_svg__WEBPACK_IMPORTED_MODULE_44__[\"default\"],\n 'reset-24': _reset_24_svg__WEBPACK_IMPORTED_MODULE_45__[\"default\"],\n 'sagittal-24': _sagittal_24_svg__WEBPACK_IMPORTED_MODULE_46__[\"default\"],\n 'scan-24': _scan_24_svg__WEBPACK_IMPORTED_MODULE_47__[\"default\"],\n 'search-24': _search_24_svg__WEBPACK_IMPORTED_MODULE_48__[\"default\"],\n 'send-24': _send_24_svg__WEBPACK_IMPORTED_MODULE_49__[\"default\"],\n 'share-24': _share_24_svg__WEBPACK_IMPORTED_MODULE_50__[\"default\"],\n 'site-24': _site_24_svg__WEBPACK_IMPORTED_MODULE_51__[\"default\"],\n 'sound-24': _sound_24_svg__WEBPACK_IMPORTED_MODULE_52__[\"default\"],\n 'speech-bubble-empty-24': _speech_bubble_empty_24_svg__WEBPACK_IMPORTED_MODULE_53__[\"default\"],\n 'spinner-24': _spinner_24_svg__WEBPACK_IMPORTED_MODULE_54__[\"default\"],\n 'support-24': _support_24_svg__WEBPACK_IMPORTED_MODULE_55__[\"default\"],\n 'system-24': _system_24_svg__WEBPACK_IMPORTED_MODULE_56__[\"default\"],\n 'tracking-24': _tracking_24_svg__WEBPACK_IMPORTED_MODULE_57__[\"default\"],\n 'transfer-24': _transfer_24_svg__WEBPACK_IMPORTED_MODULE_58__[\"default\"],\n 'usa-24': _usa_24_svg__WEBPACK_IMPORTED_MODULE_59__[\"default\"],\n 'walk-in-24': _walk_in_24_svg__WEBPACK_IMPORTED_MODULE_60__[\"default\"],\n};\n\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/levels-24.svg\":\n/*!***************************************!*\\\n !*** ./src/icons/24x24/levels-24.svg ***!\n \\***************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/logout-24.svg\":\n/*!***************************************!*\\\n !*** ./src/icons/24x24/logout-24.svg ***!\n \\***************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/medical-symbol-24.svg\":\n/*!***********************************************!*\\\n !*** ./src/icons/24x24/medical-symbol-24.svg ***!\n \\***********************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/menu-24.svg\":\n/*!*************************************!*\\\n !*** ./src/icons/24x24/menu-24.svg ***!\n \\*************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/messages-24.svg\":\n/*!*****************************************!*\\\n !*** ./src/icons/24x24/messages-24.svg ***!\n \\*****************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/mip-24.svg\":\n/*!************************************!*\\\n !*** ./src/icons/24x24/mip-24.svg ***!\n \\************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/neuro-24.svg\":\n/*!**************************************!*\\\n !*** ./src/icons/24x24/neuro-24.svg ***!\n \\**************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/notifications-24.svg\":\n/*!**********************************************!*\\\n !*** ./src/icons/24x24/notifications-24.svg ***!\n \\**********************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/notifications-off-24.svg\":\n/*!**************************************************!*\\\n !*** ./src/icons/24x24/notifications-off-24.svg ***!\n \\**************************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/notifications-on-24.svg\":\n/*!*************************************************!*\\\n !*** ./src/icons/24x24/notifications-on-24.svg ***!\n \\*************************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/orientation-24.svg\":\n/*!********************************************!*\\\n !*** ./src/icons/24x24/orientation-24.svg ***!\n \\********************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/patient-24.svg\":\n/*!****************************************!*\\\n !*** ./src/icons/24x24/patient-24.svg ***!\n \\****************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/patient-add-24.svg\":\n/*!********************************************!*\\\n !*** ./src/icons/24x24/patient-add-24.svg ***!\n \\********************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/patient-cards-24.svg\":\n/*!**********************************************!*\\\n !*** ./src/icons/24x24/patient-cards-24.svg ***!\n \\**********************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/plus-24.svg\":\n/*!*************************************!*\\\n !*** ./src/icons/24x24/plus-24.svg ***!\n \\*************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/profile-24.svg\":\n/*!****************************************!*\\\n !*** ./src/icons/24x24/profile-24.svg ***!\n \\****************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/pulmonary-24.svg\":\n/*!******************************************!*\\\n !*** ./src/icons/24x24/pulmonary-24.svg ***!\n \\******************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/quality-24.svg\":\n/*!****************************************!*\\\n !*** ./src/icons/24x24/quality-24.svg ***!\n \\****************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/reset-24.svg\":\n/*!**************************************!*\\\n !*** ./src/icons/24x24/reset-24.svg ***!\n \\**************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/sagittal-24.svg\":\n/*!*****************************************!*\\\n !*** ./src/icons/24x24/sagittal-24.svg ***!\n \\*****************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/scan-24.svg\":\n/*!*************************************!*\\\n !*** ./src/icons/24x24/scan-24.svg ***!\n \\*************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/search-24.svg\":\n/*!***************************************!*\\\n !*** ./src/icons/24x24/search-24.svg ***!\n \\***************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/send-24.svg\":\n/*!*************************************!*\\\n !*** ./src/icons/24x24/send-24.svg ***!\n \\*************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/share-24.svg\":\n/*!**************************************!*\\\n !*** ./src/icons/24x24/share-24.svg ***!\n \\**************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/site-24.svg\":\n/*!*************************************!*\\\n !*** ./src/icons/24x24/site-24.svg ***!\n \\*************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/sound-24.svg\":\n/*!**************************************!*\\\n !*** ./src/icons/24x24/sound-24.svg ***!\n \\**************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/speech-bubble-empty-24.svg\":\n/*!****************************************************!*\\\n !*** ./src/icons/24x24/speech-bubble-empty-24.svg ***!\n \\****************************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/spinner-24.svg\":\n/*!****************************************!*\\\n !*** ./src/icons/24x24/spinner-24.svg ***!\n \\****************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/support-24.svg\":\n/*!****************************************!*\\\n !*** ./src/icons/24x24/support-24.svg ***!\n \\****************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/system-24.svg\":\n/*!***************************************!*\\\n !*** ./src/icons/24x24/system-24.svg ***!\n \\***************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/tracking-24.svg\":\n/*!*****************************************!*\\\n !*** ./src/icons/24x24/tracking-24.svg ***!\n \\*****************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/transfer-24.svg\":\n/*!*****************************************!*\\\n !*** ./src/icons/24x24/transfer-24.svg ***!\n \\*****************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/usa-24.svg\":\n/*!************************************!*\\\n !*** ./src/icons/24x24/usa-24.svg ***!\n \\************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/24x24/walk-in-24.svg\":\n/*!****************************************!*\\\n !*** ./src/icons/24x24/walk-in-24.svg ***!\n \\****************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/back-48.svg\":\n/*!*************************************!*\\\n !*** ./src/icons/48x48/back-48.svg ***!\n \\*************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/call-48.svg\":\n/*!*************************************!*\\\n !*** ./src/icons/48x48/call-48.svg ***!\n \\*************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/camera-48.svg\":\n/*!***************************************!*\\\n !*** ./src/icons/48x48/camera-48.svg ***!\n \\***************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/catheter-48.svg\":\n/*!*****************************************!*\\\n !*** ./src/icons/48x48/catheter-48.svg ***!\n \\*****************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/chevron-left-48.svg\":\n/*!*********************************************!*\\\n !*** ./src/icons/48x48/chevron-left-48.svg ***!\n \\*********************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/chevron-right-48.svg\":\n/*!**********************************************!*\\\n !*** ./src/icons/48x48/chevron-right-48.svg ***!\n \\**********************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/close-48.svg\":\n/*!**************************************!*\\\n !*** ./src/icons/48x48/close-48.svg ***!\n \\**************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/comment-add-48.svg\":\n/*!********************************************!*\\\n !*** ./src/icons/48x48/comment-add-48.svg ***!\n \\********************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/controls-48.svg\":\n/*!*****************************************!*\\\n !*** ./src/icons/48x48/controls-48.svg ***!\n \\*****************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/create-48.svg\":\n/*!***************************************!*\\\n !*** ./src/icons/48x48/create-48.svg ***!\n \\***************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/desktop-48.svg\":\n/*!****************************************!*\\\n !*** ./src/icons/48x48/desktop-48.svg ***!\n \\****************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/expand-48.svg\":\n/*!***************************************!*\\\n !*** ./src/icons/48x48/expand-48.svg ***!\n \\***************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/index.ts\":\n/*!**********************************!*\\\n !*** ./src/icons/48x48/index.ts ***!\n \\**********************************/\n/*! exports provided: icons */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"icons\", function() { return icons; });\n/* harmony import */ var _back_48_svg__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./back-48.svg */ \"./src/icons/48x48/back-48.svg\");\n/* harmony import */ var _call_48_svg__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./call-48.svg */ \"./src/icons/48x48/call-48.svg\");\n/* harmony import */ var _camera_48_svg__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./camera-48.svg */ \"./src/icons/48x48/camera-48.svg\");\n/* harmony import */ var _catheter_48_svg__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./catheter-48.svg */ \"./src/icons/48x48/catheter-48.svg\");\n/* harmony import */ var _chevron_left_48_svg__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chevron-left-48.svg */ \"./src/icons/48x48/chevron-left-48.svg\");\n/* harmony import */ var _chevron_right_48_svg__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chevron-right-48.svg */ \"./src/icons/48x48/chevron-right-48.svg\");\n/* harmony import */ var _close_48_svg__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./close-48.svg */ \"./src/icons/48x48/close-48.svg\");\n/* harmony import */ var _comment_add_48_svg__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./comment-add-48.svg */ \"./src/icons/48x48/comment-add-48.svg\");\n/* harmony import */ var _controls_48_svg__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./controls-48.svg */ \"./src/icons/48x48/controls-48.svg\");\n/* harmony import */ var _create_48_svg__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./create-48.svg */ \"./src/icons/48x48/create-48.svg\");\n/* harmony import */ var _desktop_48_svg__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./desktop-48.svg */ \"./src/icons/48x48/desktop-48.svg\");\n/* harmony import */ var _expand_48_svg__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./expand-48.svg */ \"./src/icons/48x48/expand-48.svg\");\n/* harmony import */ var _medical_symbol_48_svg__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./medical-symbol-48.svg */ \"./src/icons/48x48/medical-symbol-48.svg\");\n/* harmony import */ var _menu_48_svg__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./menu-48.svg */ \"./src/icons/48x48/menu-48.svg\");\n/* harmony import */ var _messages_48_svg__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./messages-48.svg */ \"./src/icons/48x48/messages-48.svg\");\n/* harmony import */ var _minus_48_svg__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./minus-48.svg */ \"./src/icons/48x48/minus-48.svg\");\n/* harmony import */ var _mips_48_svg__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./mips-48.svg */ \"./src/icons/48x48/mips-48.svg\");\n/* harmony import */ var _no_result_48_svg__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./no-result-48.svg */ \"./src/icons/48x48/no-result-48.svg\");\n/* harmony import */ var _notifications_off_48_svg__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./notifications-off-48.svg */ \"./src/icons/48x48/notifications-off-48.svg\");\n/* harmony import */ var _notifications_on_48_svg__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./notifications-on-48.svg */ \"./src/icons/48x48/notifications-on-48.svg\");\n/* harmony import */ var _orientation_chest_front_48_svg__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./orientation-chest-front-48.svg */ \"./src/icons/48x48/orientation-chest-front-48.svg\");\n/* harmony import */ var _orientation_chest_side_48_svg__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./orientation-chest-side-48.svg */ \"./src/icons/48x48/orientation-chest-side-48.svg\");\n/* harmony import */ var _orientation_chest_top_48_svg__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./orientation-chest-top-48.svg */ \"./src/icons/48x48/orientation-chest-top-48.svg\");\n/* harmony import */ var _orientation_head_front_48_svg__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./orientation-head-front-48.svg */ \"./src/icons/48x48/orientation-head-front-48.svg\");\n/* harmony import */ var _orientation_head_rotational_48_svg__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./orientation-head-rotational-48.svg */ \"./src/icons/48x48/orientation-head-rotational-48.svg\");\n/* harmony import */ var _orientation_head_side_48_svg__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./orientation-head-side-48.svg */ \"./src/icons/48x48/orientation-head-side-48.svg\");\n/* harmony import */ var _orientation_head_top_48_svg__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./orientation-head-top-48.svg */ \"./src/icons/48x48/orientation-head-top-48.svg\");\n/* harmony import */ var _patient_add_48_svg__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./patient-add-48.svg */ \"./src/icons/48x48/patient-add-48.svg\");\n/* harmony import */ var _patient_timer_48_svg__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./patient-timer-48.svg */ \"./src/icons/48x48/patient-timer-48.svg\");\n/* harmony import */ var _pause_48_svg__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./pause-48.svg */ \"./src/icons/48x48/pause-48.svg\");\n/* harmony import */ var _play_48_svg__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./play-48.svg */ \"./src/icons/48x48/play-48.svg\");\n/* harmony import */ var _plus_48_svg__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./plus-48.svg */ \"./src/icons/48x48/plus-48.svg\");\n/* harmony import */ var _quality_48_svg__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./quality-48.svg */ \"./src/icons/48x48/quality-48.svg\");\n/* harmony import */ var _refresh_48_svg__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./refresh-48.svg */ \"./src/icons/48x48/refresh-48.svg\");\n/* harmony import */ var _refresh_double_48_svg__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./refresh-double-48.svg */ \"./src/icons/48x48/refresh-double-48.svg\");\n/* harmony import */ var _report_48_svg__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./report-48.svg */ \"./src/icons/48x48/report-48.svg\");\n/* harmony import */ var _rounded_close_48_svg__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./rounded-close-48.svg */ \"./src/icons/48x48/rounded-close-48.svg\");\n/* harmony import */ var _scan_48_svg__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./scan-48.svg */ \"./src/icons/48x48/scan-48.svg\");\n/* harmony import */ var _settings_48_svg__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./settings-48.svg */ \"./src/icons/48x48/settings-48.svg\");\n/* harmony import */ var _share_48_svg__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./share-48.svg */ \"./src/icons/48x48/share-48.svg\");\n/* harmony import */ var _spinner_48_svg__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./spinner-48.svg */ \"./src/icons/48x48/spinner-48.svg\");\n/* harmony import */ var _switch_48_svg__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./switch-48.svg */ \"./src/icons/48x48/switch-48.svg\");\n/* harmony import */ var _tracking_48_svg__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./tracking-48.svg */ \"./src/icons/48x48/tracking-48.svg\");\n/* harmony import */ var _transfer_48_svg__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./transfer-48.svg */ \"./src/icons/48x48/transfer-48.svg\");\n/* harmony import */ var _wwwl_48_svg__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./wwwl-48.svg */ \"./src/icons/48x48/wwwl-48.svg\");\n/* harmony import */ var _zoom_in_48_svg__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./zoom-in-48.svg */ \"./src/icons/48x48/zoom-in-48.svg\");\n/* harmony import */ var _zoom_out_48_svg__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./zoom-out-48.svg */ \"./src/icons/48x48/zoom-out-48.svg\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst icons = {\n 'back-48': _back_48_svg__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n 'call-48': _call_48_svg__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n 'camera-48': _camera_48_svg__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n 'catheter-48': _catheter_48_svg__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n 'chevron-left-48': _chevron_left_48_svg__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n 'chevron-right-48': _chevron_right_48_svg__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n 'close-48': _close_48_svg__WEBPACK_IMPORTED_MODULE_6__[\"default\"],\n 'comment-add-48': _comment_add_48_svg__WEBPACK_IMPORTED_MODULE_7__[\"default\"],\n 'controls-48': _controls_48_svg__WEBPACK_IMPORTED_MODULE_8__[\"default\"],\n 'create-48': _create_48_svg__WEBPACK_IMPORTED_MODULE_9__[\"default\"],\n 'desktop-48': _desktop_48_svg__WEBPACK_IMPORTED_MODULE_10__[\"default\"],\n 'expand-48': _expand_48_svg__WEBPACK_IMPORTED_MODULE_11__[\"default\"],\n 'medical-symbol-48': _medical_symbol_48_svg__WEBPACK_IMPORTED_MODULE_12__[\"default\"],\n 'menu-48': _menu_48_svg__WEBPACK_IMPORTED_MODULE_13__[\"default\"],\n 'messages-48': _messages_48_svg__WEBPACK_IMPORTED_MODULE_14__[\"default\"],\n 'minus-48': _minus_48_svg__WEBPACK_IMPORTED_MODULE_15__[\"default\"],\n 'mips-48': _mips_48_svg__WEBPACK_IMPORTED_MODULE_16__[\"default\"],\n 'no-result-48': _no_result_48_svg__WEBPACK_IMPORTED_MODULE_17__[\"default\"],\n 'notifications-off-48': _notifications_off_48_svg__WEBPACK_IMPORTED_MODULE_18__[\"default\"],\n 'notifications-on-48': _notifications_on_48_svg__WEBPACK_IMPORTED_MODULE_19__[\"default\"],\n 'orientation-chest-front-48': _orientation_chest_front_48_svg__WEBPACK_IMPORTED_MODULE_20__[\"default\"],\n 'orientation-chest-side-48': _orientation_chest_side_48_svg__WEBPACK_IMPORTED_MODULE_21__[\"default\"],\n 'orientation-chest-top-48': _orientation_chest_top_48_svg__WEBPACK_IMPORTED_MODULE_22__[\"default\"],\n 'orientation-head-front-48': _orientation_head_front_48_svg__WEBPACK_IMPORTED_MODULE_23__[\"default\"],\n 'orientation-head-rotational-48': _orientation_head_rotational_48_svg__WEBPACK_IMPORTED_MODULE_24__[\"default\"],\n 'orientation-head-side-48': _orientation_head_side_48_svg__WEBPACK_IMPORTED_MODULE_25__[\"default\"],\n 'orientation-head-top-48': _orientation_head_top_48_svg__WEBPACK_IMPORTED_MODULE_26__[\"default\"],\n 'patient-add-48': _patient_add_48_svg__WEBPACK_IMPORTED_MODULE_27__[\"default\"],\n 'patient-timer-48': _patient_timer_48_svg__WEBPACK_IMPORTED_MODULE_28__[\"default\"],\n 'pause-48': _pause_48_svg__WEBPACK_IMPORTED_MODULE_29__[\"default\"],\n 'play-48': _play_48_svg__WEBPACK_IMPORTED_MODULE_30__[\"default\"],\n 'plus-48': _plus_48_svg__WEBPACK_IMPORTED_MODULE_31__[\"default\"],\n 'quality-48': _quality_48_svg__WEBPACK_IMPORTED_MODULE_32__[\"default\"],\n 'refresh-48': _refresh_48_svg__WEBPACK_IMPORTED_MODULE_33__[\"default\"],\n 'refresh-double-48': _refresh_double_48_svg__WEBPACK_IMPORTED_MODULE_34__[\"default\"],\n 'report-48': _report_48_svg__WEBPACK_IMPORTED_MODULE_35__[\"default\"],\n 'rounded-close-48': _rounded_close_48_svg__WEBPACK_IMPORTED_MODULE_36__[\"default\"],\n 'scan-48': _scan_48_svg__WEBPACK_IMPORTED_MODULE_37__[\"default\"],\n 'settings-48': _settings_48_svg__WEBPACK_IMPORTED_MODULE_38__[\"default\"],\n 'share-48': _share_48_svg__WEBPACK_IMPORTED_MODULE_39__[\"default\"],\n 'spinner-48': _spinner_48_svg__WEBPACK_IMPORTED_MODULE_40__[\"default\"],\n 'switch-48': _switch_48_svg__WEBPACK_IMPORTED_MODULE_41__[\"default\"],\n 'tracking-48': _tracking_48_svg__WEBPACK_IMPORTED_MODULE_42__[\"default\"],\n 'transfer-48': _transfer_48_svg__WEBPACK_IMPORTED_MODULE_43__[\"default\"],\n 'wwwl-48': _wwwl_48_svg__WEBPACK_IMPORTED_MODULE_44__[\"default\"],\n 'zoom-in-48': _zoom_in_48_svg__WEBPACK_IMPORTED_MODULE_45__[\"default\"],\n 'zoom-out-48': _zoom_out_48_svg__WEBPACK_IMPORTED_MODULE_46__[\"default\"]\n};\n\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/medical-symbol-48.svg\":\n/*!***********************************************!*\\\n !*** ./src/icons/48x48/medical-symbol-48.svg ***!\n \\***********************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/menu-48.svg\":\n/*!*************************************!*\\\n !*** ./src/icons/48x48/menu-48.svg ***!\n \\*************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/messages-48.svg\":\n/*!*****************************************!*\\\n !*** ./src/icons/48x48/messages-48.svg ***!\n \\*****************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/minus-48.svg\":\n/*!**************************************!*\\\n !*** ./src/icons/48x48/minus-48.svg ***!\n \\**************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/mips-48.svg\":\n/*!*************************************!*\\\n !*** ./src/icons/48x48/mips-48.svg ***!\n \\*************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n \\n MIP\\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/no-result-48.svg\":\n/*!******************************************!*\\\n !*** ./src/icons/48x48/no-result-48.svg ***!\n \\******************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/notifications-off-48.svg\":\n/*!**************************************************!*\\\n !*** ./src/icons/48x48/notifications-off-48.svg ***!\n \\**************************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/notifications-on-48.svg\":\n/*!*************************************************!*\\\n !*** ./src/icons/48x48/notifications-on-48.svg ***!\n \\*************************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/orientation-chest-front-48.svg\":\n/*!********************************************************!*\\\n !*** ./src/icons/48x48/orientation-chest-front-48.svg ***!\n \\********************************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/orientation-chest-side-48.svg\":\n/*!*******************************************************!*\\\n !*** ./src/icons/48x48/orientation-chest-side-48.svg ***!\n \\*******************************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/orientation-chest-top-48.svg\":\n/*!******************************************************!*\\\n !*** ./src/icons/48x48/orientation-chest-top-48.svg ***!\n \\******************************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/orientation-head-front-48.svg\":\n/*!*******************************************************!*\\\n !*** ./src/icons/48x48/orientation-head-front-48.svg ***!\n \\*******************************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/orientation-head-rotational-48.svg\":\n/*!************************************************************!*\\\n !*** ./src/icons/48x48/orientation-head-rotational-48.svg ***!\n \\************************************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/orientation-head-side-48.svg\":\n/*!******************************************************!*\\\n !*** ./src/icons/48x48/orientation-head-side-48.svg ***!\n \\******************************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/orientation-head-top-48.svg\":\n/*!*****************************************************!*\\\n !*** ./src/icons/48x48/orientation-head-top-48.svg ***!\n \\*****************************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/patient-add-48.svg\":\n/*!********************************************!*\\\n !*** ./src/icons/48x48/patient-add-48.svg ***!\n \\********************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/patient-timer-48.svg\":\n/*!**********************************************!*\\\n !*** ./src/icons/48x48/patient-timer-48.svg ***!\n \\**********************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/pause-48.svg\":\n/*!**************************************!*\\\n !*** ./src/icons/48x48/pause-48.svg ***!\n \\**************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/play-48.svg\":\n/*!*************************************!*\\\n !*** ./src/icons/48x48/play-48.svg ***!\n \\*************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/plus-48.svg\":\n/*!*************************************!*\\\n !*** ./src/icons/48x48/plus-48.svg ***!\n \\*************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/quality-48.svg\":\n/*!****************************************!*\\\n !*** ./src/icons/48x48/quality-48.svg ***!\n \\****************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/refresh-48.svg\":\n/*!****************************************!*\\\n !*** ./src/icons/48x48/refresh-48.svg ***!\n \\****************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/refresh-double-48.svg\":\n/*!***********************************************!*\\\n !*** ./src/icons/48x48/refresh-double-48.svg ***!\n \\***********************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/report-48.svg\":\n/*!***************************************!*\\\n !*** ./src/icons/48x48/report-48.svg ***!\n \\***************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/rounded-close-48.svg\":\n/*!**********************************************!*\\\n !*** ./src/icons/48x48/rounded-close-48.svg ***!\n \\**********************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/scan-48.svg\":\n/*!*************************************!*\\\n !*** ./src/icons/48x48/scan-48.svg ***!\n \\*************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/settings-48.svg\":\n/*!*****************************************!*\\\n !*** ./src/icons/48x48/settings-48.svg ***!\n \\*****************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/share-48.svg\":\n/*!**************************************!*\\\n !*** ./src/icons/48x48/share-48.svg ***!\n \\**************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/spinner-48.svg\":\n/*!****************************************!*\\\n !*** ./src/icons/48x48/spinner-48.svg ***!\n \\****************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/switch-48.svg\":\n/*!***************************************!*\\\n !*** ./src/icons/48x48/switch-48.svg ***!\n \\***************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/tracking-48.svg\":\n/*!*****************************************!*\\\n !*** ./src/icons/48x48/tracking-48.svg ***!\n \\*****************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/transfer-48.svg\":\n/*!*****************************************!*\\\n !*** ./src/icons/48x48/transfer-48.svg ***!\n \\*****************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/wwwl-48.svg\":\n/*!*************************************!*\\\n !*** ./src/icons/48x48/wwwl-48.svg ***!\n \\*************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/zoom-in-48.svg\":\n/*!****************************************!*\\\n !*** ./src/icons/48x48/zoom-in-48.svg ***!\n \\****************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/48x48/zoom-out-48.svg\":\n/*!*****************************************!*\\\n !*** ./src/icons/48x48/zoom-out-48.svg ***!\n \\*****************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/72x72/face-id-72.svg\":\n/*!****************************************!*\\\n !*** ./src/icons/72x72/face-id-72.svg ***!\n \\****************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/72x72/fingerprint-id-72.svg\":\n/*!***********************************************!*\\\n !*** ./src/icons/72x72/fingerprint-id-72.svg ***!\n \\***********************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/72x72/index.ts\":\n/*!**********************************!*\\\n !*** ./src/icons/72x72/index.ts ***!\n \\**********************************/\n/*! exports provided: icons */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"icons\", function() { return icons; });\n/* harmony import */ var _face_id_72_svg__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./face-id-72.svg */ \"./src/icons/72x72/face-id-72.svg\");\n/* harmony import */ var _fingerprint_id_72_svg__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fingerprint-id-72.svg */ \"./src/icons/72x72/fingerprint-id-72.svg\");\n/* harmony import */ var _spinner_72_svg__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./spinner-72.svg */ \"./src/icons/72x72/spinner-72.svg\");\n/* harmony import */ var _tick_round_72_svg__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tick-round-72.svg */ \"./src/icons/72x72/tick-round-72.svg\");\n\n\n\n\nconst icons = {\n 'face-id-72': _face_id_72_svg__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n 'fingerprint-id-72': _fingerprint_id_72_svg__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n 'spinner-72': _spinner_72_svg__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n 'tick-round-72': _tick_round_72_svg__WEBPACK_IMPORTED_MODULE_3__[\"default\"]\n};\n\n\n/***/ }),\n\n/***/ \"./src/icons/72x72/spinner-72.svg\":\n/*!****************************************!*\\\n !*** ./src/icons/72x72/spinner-72.svg ***!\n \\****************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/72x72/tick-round-72.svg\":\n/*!*******************************************!*\\\n !*** ./src/icons/72x72/tick-round-72.svg ***!\n \\*******************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"\\n \\n \\n \\n \\n\\n\");\n\n/***/ }),\n\n/***/ \"./src/icons/index.ts\":\n/*!****************************!*\\\n !*** ./src/icons/index.ts ***!\n \\****************************/\n/*! exports provided: icons */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"icons\", function() { return icons; });\n/* harmony import */ var _16x16__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./16x16 */ \"./src/icons/16x16/index.ts\");\n/* harmony import */ var _24x24__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./24x24 */ \"./src/icons/24x24/index.ts\");\n/* harmony import */ var _48x48__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./48x48 */ \"./src/icons/48x48/index.ts\");\n/* harmony import */ var _72x72__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./72x72 */ \"./src/icons/72x72/index.ts\");\n\n\n\n\nconst icons = Object.assign(Object.assign(Object.assign(Object.assign({}, _16x16__WEBPACK_IMPORTED_MODULE_0__[\"icons\"]), _24x24__WEBPACK_IMPORTED_MODULE_1__[\"icons\"]), _48x48__WEBPACK_IMPORTED_MODULE_2__[\"icons\"]), _72x72__WEBPACK_IMPORTED_MODULE_3__[\"icons\"]);\n\n\n/***/ }),\n\n/***/ \"./src/index.ts\":\n/*!**********************!*\\\n !*** ./src/index.ts ***!\n \\**********************/\n/*! exports provided: RapidButtonElement, RapidFormFieldElement, RapidFormFieldsetElement, RapidIconElement, RapidIconButtonElement, RapidInputDateTimeFieldElement, RapidInputNumberFieldElement, RapidInputPasswordFieldElement, RapidInputPhoneFieldElement, RapidInputSelectElement, RapidInputSelectMultipleElement, RapidInputTextFieldElement, RapidInputUsernameFieldElement, RapidInputCheckboxElement, RapidCheckboxElement, RapidCheckboxGroupElement, RapidProgressElement */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _components__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./components */ \"./src/components/index.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RapidButtonElement\", function() { return _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidButtonElement\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RapidFormFieldElement\", function() { return _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidFormFieldElement\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RapidFormFieldsetElement\", function() { return _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidFormFieldsetElement\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RapidIconElement\", function() { return _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidIconElement\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RapidIconButtonElement\", function() { return _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidIconButtonElement\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RapidInputDateTimeFieldElement\", function() { return _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidInputDateTimeFieldElement\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RapidInputNumberFieldElement\", function() { return _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidInputNumberFieldElement\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RapidInputPasswordFieldElement\", function() { return _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidInputPasswordFieldElement\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RapidInputPhoneFieldElement\", function() { return _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidInputPhoneFieldElement\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RapidInputSelectElement\", function() { return _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidInputSelectElement\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RapidInputSelectMultipleElement\", function() { return _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidInputSelectMultipleElement\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RapidInputTextFieldElement\", function() { return _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidInputTextFieldElement\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RapidInputUsernameFieldElement\", function() { return _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidInputUsernameFieldElement\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RapidInputCheckboxElement\", function() { return _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidInputCheckboxElement\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RapidCheckboxElement\", function() { return _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidCheckboxElement\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RapidCheckboxGroupElement\", function() { return _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidCheckboxGroupElement\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RapidProgressElement\", function() { return _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidProgressElement\"]; });\n\n/* harmony import */ var _utils_browser_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/browser-utils */ \"./src/utils/browser-utils.ts\");\n/* harmony import */ var _utils_layout_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/layout-types */ \"./src/utils/layout-types.ts\");\n\n\n\nlet userAgent = '';\nif (Object(_utils_browser_utils__WEBPACK_IMPORTED_MODULE_1__[\"isSafari\"])()) {\n userAgent = 'safari';\n}\nelse if (Object(_utils_browser_utils__WEBPACK_IMPORTED_MODULE_1__[\"isChrome\"])()) {\n userAgent = 'chrome';\n}\nelse if (Object(_utils_browser_utils__WEBPACK_IMPORTED_MODULE_1__[\"isEdge\"])()) {\n userAgent = 'edge';\n}\nelse if (Object(_utils_browser_utils__WEBPACK_IMPORTED_MODULE_1__[\"isFirefox\"])()) {\n userAgent = 'firefox';\n}\nwindow.document.documentElement.setAttribute('data-rapid-design-system-user-agent', userAgent);\nif (!window.customElements.get('rapid-button')) {\n window.RapidButtonElement = _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidButtonElement\"];\n window.customElements.define('rapid-button', _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidButtonElement\"]);\n}\nelse {\n throw new Error(' custom element is already defined.');\n}\nif (!window.customElements.get('rapid-checkbox')) {\n window.RapidCheckboxElement = _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidCheckboxElement\"];\n window.customElements.define('rapid-checkbox', _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidCheckboxElement\"]);\n}\nelse {\n throw new Error(' custom element is already defined.');\n}\nif (!window.customElements.get('rapid-checkbox-group')) {\n window.RapidCheckboxGroupElement = _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidCheckboxGroupElement\"];\n window.customElements.define('rapid-checkbox-group', _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidCheckboxGroupElement\"]);\n}\nelse {\n throw new Error(' custom element is already defined.');\n}\nif (!window.customElements.get('rapid-form-field')) {\n window.RapidFormFieldElement = _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidFormFieldElement\"];\n window.customElements.define('rapid-form-field', _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidFormFieldElement\"]);\n}\nelse {\n throw new Error(' custom element is already defined.');\n}\nif (!window.customElements.get('rapid-form-fieldset')) {\n window.RapidFormFieldsetElement = _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidFormFieldsetElement\"];\n window.customElements.define('rapid-form-fieldset', _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidFormFieldsetElement\"]);\n}\nelse {\n throw new Error(' custom element is already defined.');\n}\nif (!window.customElements.get('rapid-icon')) {\n window.RapidIconElement = _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidIconElement\"];\n window.customElements.define('rapid-icon', _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidIconElement\"]);\n}\nelse {\n throw new Error(' custom element is already defined.');\n}\nif (!window.customElements.get('rapid-icon-button')) {\n window.RapidIconButtonElement = _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidIconButtonElement\"];\n window.customElements.define('rapid-icon-button', _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidIconButtonElement\"]);\n}\nelse {\n throw new Error(' custom element is already defined.');\n}\nif (!window.customElements.get('rapid-input-checkbox')) {\n window.RapidInputCheckboxElement = _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidInputCheckboxElement\"];\n window.customElements.define('rapid-input-checkbox', _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidInputCheckboxElement\"]);\n}\nelse {\n throw new Error(' custom element is already defined.');\n}\nif (!window.customElements.get('rapid-input-datetime-field')) {\n window.RapidInputDateTimeFieldElement = _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidInputDateTimeFieldElement\"];\n window.customElements.define('rapid-input-datetime-field', _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidInputDateTimeFieldElement\"]);\n}\nelse {\n throw new Error(' custom element is already defined.');\n}\nif (!window.customElements.get('rapid-input-number-field')) {\n window.RapidInputNumberFieldElement = _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidInputNumberFieldElement\"];\n window.customElements.define('rapid-input-number-field', _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidInputNumberFieldElement\"]);\n}\nelse {\n throw new Error(' custom element is already defined.');\n}\nif (!window.customElements.get('rapid-input-password-field')) {\n window.RapidInputPasswordFieldElement = _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidInputPasswordFieldElement\"];\n window.customElements.define('rapid-input-password-field', _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidInputPasswordFieldElement\"]);\n}\nelse {\n throw new Error(' custom element is already defined.');\n}\nif (!window.customElements.get('rapid-input-phone-field')) {\n window.RapidInputPhoneFieldElement = _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidInputPhoneFieldElement\"];\n window.customElements.define('rapid-input-phone-field', _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidInputPhoneFieldElement\"]);\n}\nelse {\n throw new Error(' custom element is already defined.');\n}\nif (!window.customElements.get('rapid-input-select')) {\n window.RapidInputSelectElement = _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidInputSelectElement\"];\n window.customElements.define('rapid-input-select', _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidInputSelectElement\"]);\n}\nelse {\n throw new Error(' custom element is already defined.');\n}\nif (!window.customElements.get('rapid-input-select-multiple')) {\n window.RapidInputSelectMultipleElement = _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidInputSelectMultipleElement\"];\n window.customElements.define('rapid-input-select-multiple', _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidInputSelectMultipleElement\"]);\n}\nelse {\n throw new Error(' custom element is already defined.');\n}\nif (!window.customElements.get('rapid-input-text-field')) {\n window.RapidInputTextFieldElement = _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidInputTextFieldElement\"];\n window.customElements.define('rapid-input-text-field', _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidInputTextFieldElement\"]);\n}\nelse {\n throw new Error(' custom element is already defined.');\n}\nif (!window.customElements.get('rapid-input-username-field')) {\n window.RapidInputUsernameFieldElement = _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidInputUsernameFieldElement\"];\n window.customElements.define('rapid-input-username-field', _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidInputUsernameFieldElement\"]);\n}\nelse {\n throw new Error(' custom element is already defined.');\n}\nif (!window.customElements.get('rapid-progress')) {\n window.RapidProgressElement = _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidProgressElement\"];\n window.customElements.define('rapid-progress', _components__WEBPACK_IMPORTED_MODULE_0__[\"RapidProgressElement\"]);\n}\nelse {\n throw new Error(' custom element is already defined.');\n}\nObject(_utils_layout_types__WEBPACK_IMPORTED_MODULE_2__[\"init\"])();\n\n\n\n/***/ }),\n\n/***/ \"./src/utils/browser-utils.ts\":\n/*!************************************!*\\\n !*** ./src/utils/browser-utils.ts ***!\n \\************************************/\n/*! exports provided: isSafari, isFirefox, isEdge, isChromiumEdge, isOpera, isChrome, isInternetExplorer */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isSafari\", function() { return isSafari; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isFirefox\", function() { return isFirefox; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isEdge\", function() { return isEdge; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isChromiumEdge\", function() { return isChromiumEdge; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isOpera\", function() { return isOpera; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isChrome\", function() { return isChrome; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isInternetExplorer\", function() { return isInternetExplorer; });\nfunction isSafari() {\n return (\n // https://docs.w3cub.com/dom/navigator/vendor/\n navigator.vendor.indexOf('Apple') !== -1 &&\n // https://developer.chrome.com/multidevice/user-agent#chrome_for_ios_user_agent\n navigator.userAgent.indexOf('CriOS') === -1 &&\n // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent/Firefox\n navigator.userAgent.indexOf('FxiOS') === -1);\n}\n// https://www.whatismybrowser.com/guides/the-latest-user-agent/firefox\nfunction isFirefox() {\n return navigator.userAgent.indexOf('Firefox') !== -1 || navigator.userAgent.indexOf('FxiOS') !== -1;\n}\n// https://stackoverflow.com/a/56361977\n// https://www.whatismybrowser.com/guides/the-latest-user-agent/edge\nfunction isEdge() {\n return navigator.userAgent.indexOf('Edge/') !== -1;\n}\n// https://stackoverflow.com/a/56361977\n// https://www.whatismybrowser.com/guides/the-latest-user-agent/edge\nfunction isChromiumEdge() {\n return navigator.userAgent.indexOf('Edg/') !== -1;\n}\n// https://www.whatismybrowser.com/guides/the-latest-user-agent/opera\nfunction isOpera() {\n return navigator.userAgent.indexOf(' OPR/') !== -1;\n}\n// https://developer.chrome.com/multidevice/user-agent\n// https://developer.chrome.com/multidevice/user-agent#chrome_for_ios_user_agent\nfunction isChrome() {\n return ((navigator.vendor.indexOf('Google') !== -1 &&\n navigator.userAgent.indexOf('Chrome') !== -1 &&\n !isEdge() &&\n !isChromiumEdge() &&\n !isOpera()) ||\n navigator.userAgent.indexOf('CriOS') !== -1);\n}\n// https://stackoverflow.com/a/22551342\nfunction isInternetExplorer() {\n return /MSIE|Trident/.test(navigator.userAgent);\n}\n\n\n/***/ }),\n\n/***/ \"./src/utils/element-state.ts\":\n/*!************************************!*\\\n !*** ./src/utils/element-state.ts ***!\n \\************************************/\n/*! exports provided: PSEUDO_ACTIVE, PSEUDO_BLANK, PSEUDO_INVALID, PSEUDO_CHECKED, PSEUDO_DISABLED, PSEUDO_READONLY, hasElementState, addElementState, removeElementState, toggleElementState */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PSEUDO_ACTIVE\", function() { return PSEUDO_ACTIVE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PSEUDO_BLANK\", function() { return PSEUDO_BLANK; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PSEUDO_INVALID\", function() { return PSEUDO_INVALID; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PSEUDO_CHECKED\", function() { return PSEUDO_CHECKED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PSEUDO_DISABLED\", function() { return PSEUDO_DISABLED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PSEUDO_READONLY\", function() { return PSEUDO_READONLY; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"hasElementState\", function() { return hasElementState; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"addElementState\", function() { return addElementState; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"removeElementState\", function() { return removeElementState; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"toggleElementState\", function() { return toggleElementState; });\n// Temporary solution until this web component spec is finalized and implemented.\n// https://github.com/w3c/webcomponents/issues/738\nconst PSEUDO_ACTIVE = '_rapid-active';\nconst PSEUDO_BLANK = '_rapid-blank';\nconst PSEUDO_INVALID = '_rapid-invalid';\nconst PSEUDO_CHECKED = '_rapid-checked';\nconst PSEUDO_DISABLED = '_rapid-disabled';\nconst PSEUDO_READONLY = '_rapid-readonly';\nfunction hasElementState(el, state) {\n return el.hasAttribute(state);\n}\nfunction addElementState(el, state) {\n el.toggleAttribute(state, true);\n}\nfunction removeElementState(el, state) {\n el.toggleAttribute(state, false);\n}\nfunction toggleElementState(el, state, force) {\n el.toggleAttribute(state, force);\n}\n\n\n/***/ }),\n\n/***/ \"./src/utils/fix_webkit_bug216985.ts\":\n/*!*******************************************!*\\\n !*** ./src/utils/fix_webkit_bug216985.ts ***!\n \\*******************************************/\n/*! exports provided: cloneTemplate */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"cloneTemplate\", function() { return cloneTemplate; });\n// Safari bug: not show calendar UI when it's inside ShadowDOM\n// https://bugs.webkit.org/show_bug.cgi?id=216985\nfunction cloneTemplate(templateEl) {\n const docFragment = document.createDocumentFragment();\n const divEl = document.createElement('div');\n divEl.innerHTML = templateEl.innerHTML;\n while (divEl.firstElementChild) {\n docFragment.appendChild(divEl.firstElementChild);\n }\n return docFragment;\n}\n\n\n/***/ }),\n\n/***/ \"./src/utils/html-collection.ts\":\n/*!**************************************!*\\\n !*** ./src/utils/html-collection.ts ***!\n \\**************************************/\n/*! exports provided: RapidHTMLCollection */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RapidHTMLCollection\", function() { return RapidHTMLCollection; });\n// https://developer.mozilla.org/en-US/docs/Web/API/HTMLCollection\nclass RapidHTMLCollection {\n constructor(els) {\n this._els = els;\n for (let i = 0; i < els.length; i++) {\n this[i] = els[i];\n }\n Object.freeze(this);\n }\n get length() {\n return this._els.length;\n }\n item(idx) {\n return this[idx];\n }\n namedItem(name) {\n return this._els.find(el => el.getAttribute('name') === name) || null;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/utils/layout-types.ts\":\n/*!***********************************!*\\\n !*** ./src/utils/layout-types.ts ***!\n \\***********************************/\n/*! exports provided: LAYOUT_TYPE_DESKTOP, LAYOUT_TYPE_TABLET, LAYOUT_TYPE_PHONE, getLayoutType, setLayoutType, init */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LAYOUT_TYPE_DESKTOP\", function() { return LAYOUT_TYPE_DESKTOP; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LAYOUT_TYPE_TABLET\", function() { return LAYOUT_TYPE_TABLET; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LAYOUT_TYPE_PHONE\", function() { return LAYOUT_TYPE_PHONE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getLayoutType\", function() { return getLayoutType; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setLayoutType\", function() { return setLayoutType; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"init\", function() { return init; });\nconst LAYOUT_TYPE_DESKTOP = 'desktop';\nconst LAYOUT_TYPE_TABLET = 'tablet';\nconst LAYOUT_TYPE_PHONE = 'phone';\nconst rapidWebComponents = [\n 'rapid-input-datetime-field',\n 'rapid-input-select-multiple'\n];\nfunction getLayoutType() {\n return document.documentElement.dataset.rapidLayout;\n}\nfunction setLayoutType(layoutType) {\n document.documentElement.dataset.rapidLayout = layoutType;\n}\nfunction applyLayoutTypeChange(oldLayoutType, newLayoutType) {\n rapidWebComponents.forEach(rapidWebComponent => {\n Array.from(document.querySelectorAll(rapidWebComponent)).forEach(el => {\n el.layoutTypeChangeCallback(oldLayoutType, newLayoutType);\n });\n });\n}\nconst layoutTypeObserver = new MutationObserver(mutations => {\n mutations.forEach(mutation => {\n const oldLayoutType = mutation.oldValue;\n const newLayoutType = getLayoutType();\n if (newLayoutType) {\n applyLayoutTypeChange(oldLayoutType, newLayoutType);\n }\n });\n});\nfunction init() {\n layoutTypeObserver.observe(document.documentElement, { attributes: true, attributeFilter: ['data-rapid-layout'], attributeOldValue: true });\n window.addEventListener('unload', () => {\n layoutTypeObserver.disconnect();\n });\n const layoutType = getLayoutType();\n if (layoutType) {\n applyLayoutTypeChange(null, layoutType);\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/utils/multipe-values.ts\":\n/*!*************************************!*\\\n !*** ./src/utils/multipe-values.ts ***!\n \\*************************************/\n/*! exports provided: parseValues, serializeValues */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"parseValues\", function() { return parseValues; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"serializeValues\", function() { return serializeValues; });\nfunction parseValues(valuesStr) {\n return valuesStr.split(',')\n .map(encoded => encoded.replace(/\\\\,/g, ',').replace(/\\\\\\\\/g, '\\\\'))\n .filter(value => !!value);\n}\nfunction serializeValues(values) {\n return values.filter(value => !!value)\n .map(decoded => decoded.replace(/\\\\/g, '\\\\\\\\').replace(/,/g, '\\\\,'))\n .join(',');\n}\n\n\n/***/ })\n\n/******/ });\n//# sourceMappingURL=rapid-design-system.js.map","import { getEnabledElement } from '@cornerstonejs/core';\n\nconst state = {\n TrackingUniqueIdentifier: null,\n trackingIdentifiersByViewportId: {},\n};\n\n/**\n * This file is being used to store the per-viewport state of the SR tools,\n * Since, all the toolStates are added to the cornerstoneTools, when displaying the SRTools,\n * if there are two viewports rendering the same imageId, we don't want to show\n * the same SR annotation twice on irrelevant viewport, hence, we are storing the state\n * of the SR tools in state here, so that we can filter them later.\n */\n\nfunction setTrackingUniqueIdentifiersForElement(\n element,\n trackingUniqueIdentifiers,\n activeIndex = 0\n) {\n const enabledElement = getEnabledElement(element);\n const { viewport } = enabledElement;\n\n state.trackingIdentifiersByViewportId[viewport.id] = {\n trackingUniqueIdentifiers,\n activeIndex,\n };\n}\n\nfunction setActiveTrackingUniqueIdentifierForElement(\n element,\n TrackingUniqueIdentifier\n) {\n const enabledElement = getEnabledElement(element);\n const { viewport } = enabledElement;\n\n const trackingIdentifiersForElement =\n state.trackingIdentifiersByViewportId[viewport.id];\n\n if (trackingIdentifiersForElement) {\n const activeIndex = trackingIdentifiersForElement.trackingUniqueIdentifiers.findIndex(\n tuid => tuid === TrackingUniqueIdentifier\n );\n\n trackingIdentifiersForElement.activeIndex = activeIndex;\n }\n}\n\nfunction getTrackingUniqueIdentifiersForElement(element) {\n const enabledElement = getEnabledElement(element);\n const { viewport } = enabledElement;\n\n if (state.trackingIdentifiersByViewportId[viewport.id]) {\n return state.trackingIdentifiersByViewportId[viewport.id];\n }\n\n return { trackingUniqueIdentifiers: [] };\n}\n\nexport {\n setTrackingUniqueIdentifiersForElement,\n setActiveTrackingUniqueIdentifierForElement,\n getTrackingUniqueIdentifiersForElement,\n};\n","const state = {\n // The `defaultContext` of an extension's commandsModule\n DEFAULT_CONTEXT: 'CORNERSTONE',\n enabledElements: {},\n};\n\n/**\n * Sets the enabled element `dom` reference for an active viewport.\n * @param {HTMLElement} dom Active viewport element.\n * @return void\n */\nconst setEnabledElement = (\n viewportIndex: number,\n element: HTMLElement,\n context?: string\n): void => {\n const targetContext = context || state.DEFAULT_CONTEXT;\n\n state.enabledElements[viewportIndex] = {\n element,\n context: targetContext,\n };\n};\n\n/**\n * Grabs the enabled element `dom` reference of an ative viewport.\n *\n * @return {HTMLElement} Active viewport element.\n */\nconst getEnabledElement = (\n viewportIndex: number\n): { element: HTMLElement; context: string } => {\n return state.enabledElements[viewportIndex];\n};\n\nconst reset = () => {\n state.enabledElements = {};\n};\n\nexport { setEnabledElement, getEnabledElement, reset };\n","import * as cornerstone from '@cornerstonejs/core';\n\n/**\n * It checks if the imageId is provided then it uses it to query\n * the metadata and get the SOPInstanceUID, SeriesInstanceUID and StudyInstanceUID.\n * If the imageId is not provided then it uses the sceneUID to get the viewports\n * inside the scene and then it checks each viewport to find the one that has\n * acquisition plane view, and uses the currentImageId of the viewport to\n * query the metadata and get UIDs.\n * @param {string} imageId The image id of the referenced image\n * @param {string} sceneUID The scene UID of the measurement tool\n * @returns\n */\nexport default function getSOPInstanceAttributes(\n imageId,\n CornerstoneViewportService,\n viewportId\n) {\n if (imageId) {\n return _getUIDFromImageID(imageId);\n }\n\n // Todo: implement for volume viewports and use the referencedSeriesInstanceUID\n\n // if no imageId => measurement is not in the acquisition plane\n // const metadata = getUIDFromScene(CornerstoneViewportService, viewportId);\n\n // if (!metadata) {\n // throw new Error('Not viewport with imageId found');\n // }\n\n // // Since the series and study UID is derived from another viewport in the\n // // same scene, we cannot include the SOPInstanceUID\n // return {\n // SOPInstanceUID: null,\n // SeriesInstanceUID: metadata.SeriesInstanceUID,\n // StudyInstanceUID: metadata.StudyInstanceUID,\n // };\n}\n\nfunction _getUIDFromImageID(imageId) {\n const instance = cornerstone.metaData.get('instance', imageId);\n\n return {\n SOPInstanceUID: instance.SOPInstanceUID,\n SeriesInstanceUID: instance.SeriesInstanceUID,\n StudyInstanceUID: instance.StudyInstanceUID,\n frameNumber: instance.frameNumber || 1,\n };\n}\n\n// function getUIDFromScene(CornerstoneViewportService) {\n// const renderingEngine = CornerstoneViewportService.getRenderingEngine();\n// const scene = renderingEngine.getScene(sceneUID);\n\n// const viewportUIDs = scene.getViewportIds();\n\n// if (viewportUIDs.length === 0) {\n// throw new Error('No viewport found in scene');\n// }\n\n// for (let i = 0; i < viewportUIDs.length; i++) {\n// const vp = renderingEngine.getViewport(viewportUIDs[i]);\n// const imageId = vp.getCurrentImageId();\n\n// if (imageId) {\n// return _getUIDFromImageID(imageId);\n// }\n// }\n// }\n","import { assign } from 'xstate';\n\nconst RESPONSE = {\n NO_NEVER: -1,\n CANCEL: 0,\n CREATE_REPORT: 1,\n ADD_SERIES: 2,\n SET_STUDY_AND_SERIES: 3,\n NO_NOT_FOR_SERIES: 4,\n HYDRATE_REPORT: 5,\n};\n\nconst machineConfiguration = {\n id: 'measurementTracking',\n initial: 'idle',\n context: {\n trackedStudy: '',\n trackedSeries: [],\n ignoredSeries: [],\n //\n prevTrackedStudy: '',\n prevTrackedSeries: [],\n prevIgnoredSeries: [],\n //\n ignoredSRSeriesForHydration: [],\n isDirty: false,\n },\n states: {\n off: {\n type: 'final',\n },\n idle: {\n entry: 'clearContext',\n on: {\n TRACK_SERIES: 'promptBeginTracking',\n // Unused? We may only do PROMPT_HYDRATE_SR now?\n SET_TRACKED_SERIES: [\n {\n target: 'tracking',\n actions: ['setTrackedStudyAndMultipleSeries', 'setIsDirtyToClean'],\n },\n ],\n PROMPT_HYDRATE_SR: {\n target: 'promptHydrateStructuredReport',\n cond: 'hasNotIgnoredSRSeriesForHydration',\n },\n RESTORE_PROMPT_HYDRATE_SR: 'promptHydrateStructuredReport',\n },\n },\n promptBeginTracking: {\n invoke: {\n src: 'promptBeginTracking',\n onDone: [\n {\n target: 'tracking',\n actions: ['setTrackedStudyAndSeries', 'setIsDirty'],\n cond: 'shouldSetStudyAndSeries',\n },\n {\n target: 'off',\n cond: 'shouldKillMachine',\n },\n {\n target: 'idle',\n },\n ],\n onError: {\n target: 'idle',\n },\n },\n },\n tracking: {\n on: {\n TRACK_SERIES: [\n {\n target: 'promptTrackNewStudy',\n cond: 'isNewStudy',\n },\n {\n target: 'promptTrackNewSeries',\n cond: 'isNewSeries',\n },\n ],\n UNTRACK_SERIES: [\n {\n target: 'tracking',\n actions: ['removeTrackedSeries', 'setIsDirty'],\n cond: 'hasRemainingTrackedSeries',\n },\n {\n target: 'idle',\n },\n ],\n SET_TRACKED_SERIES: [\n {\n target: 'tracking',\n actions: ['setTrackedStudyAndMultipleSeries'],\n },\n ],\n SAVE_REPORT: 'promptSaveReport',\n SET_DIRTY: [\n {\n target: 'tracking',\n actions: ['setIsDirty'],\n cond: 'shouldSetDirty',\n },\n {\n target: 'tracking',\n },\n ],\n },\n },\n promptTrackNewSeries: {\n invoke: {\n src: 'promptTrackNewSeries',\n onDone: [\n {\n target: 'tracking',\n actions: ['addTrackedSeries', 'setIsDirty'],\n cond: 'shouldAddSeries',\n },\n {\n target: 'tracking',\n actions: [\n 'discardPreviouslyTrackedMeasurements',\n 'setTrackedStudyAndSeries',\n 'setIsDirty',\n ],\n cond: 'shouldSetStudyAndSeries',\n },\n {\n target: 'promptSaveReport',\n cond: 'shouldPromptSaveReport',\n },\n {\n target: 'tracking',\n },\n ],\n onError: {\n target: 'idle',\n },\n },\n },\n promptTrackNewStudy: {\n invoke: {\n src: 'promptTrackNewStudy',\n onDone: [\n {\n target: 'tracking',\n actions: [\n 'discardPreviouslyTrackedMeasurements',\n 'setTrackedStudyAndSeries',\n 'setIsDirty',\n ],\n cond: 'shouldSetStudyAndSeries',\n },\n {\n target: 'tracking',\n actions: ['ignoreSeries'],\n cond: 'shouldAddIgnoredSeries',\n },\n {\n target: 'promptSaveReport',\n cond: 'shouldPromptSaveReport',\n },\n {\n target: 'tracking',\n },\n ],\n onError: {\n target: 'idle',\n },\n },\n },\n promptSaveReport: {\n invoke: {\n src: 'promptSaveReport',\n onDone: [\n // \"clicked the save button\"\n // - should clear all measurements\n // - show DICOM SR\n {\n target: 'idle',\n actions: [\n 'clearAllMeasurements',\n 'showStructuredReportDisplaySetInActiveViewport',\n ],\n cond: 'shouldSaveAndContinueWithSameReport',\n },\n // \"starting a new report\"\n // - remove \"just saved\" measurements\n // - start tracking a new study + report\n {\n target: 'tracking',\n actions: [\n 'discardPreviouslyTrackedMeasurements',\n 'setTrackedStudyAndSeries',\n ],\n cond: 'shouldSaveAndStartNewReport',\n },\n // Cancel, back to tracking\n {\n target: 'tracking',\n },\n ],\n onError: {\n target: 'idle',\n },\n },\n },\n promptHydrateStructuredReport: {\n invoke: {\n src: 'promptHydrateStructuredReport',\n onDone: [\n {\n target: 'tracking',\n actions: [\n 'setTrackedStudyAndMultipleSeries',\n 'jumpToFirstMeasurementInActiveViewport',\n 'setIsDirtyToClean',\n ],\n cond: 'shouldHydrateStructuredReport',\n },\n {\n target: 'idle',\n actions: ['ignoreHydrationForSRSeries'],\n cond: 'shouldIgnoreHydrationForSR',\n },\n ],\n onError: {\n target: 'idle',\n },\n },\n },\n },\n strict: true,\n};\n\nconst defaultOptions = {\n services: {\n promptBeginTracking: (ctx, evt) => {\n // return { userResponse, StudyInstanceUID, SeriesInstanceUID }\n },\n promptTrackNewStudy: (ctx, evt) => {\n // return { userResponse, StudyInstanceUID, SeriesInstanceUID }\n },\n promptTrackNewSeries: (ctx, evt) => {\n // return { userResponse, StudyInstanceUID, SeriesInstanceUID }\n },\n },\n actions: {\n discardPreviouslyTrackedMeasurements: (ctx, evt) => {\n console.log('discardPreviouslyTrackedMeasurements: not implemented');\n },\n clearAllMeasurements: (ctx, evt) => {\n console.log('clearAllMeasurements: not implemented');\n },\n jumpToFirstMeasurementInActiveViewport: (ctx, evt) => {\n console.warn('jumpToFirstMeasurementInActiveViewport: not implemented');\n },\n showStructuredReportDisplaySetInActiveViewport: (ctx, evt) => {\n console.warn(\n 'showStructuredReportDisplaySetInActiveViewport: not implemented'\n );\n },\n clearContext: assign({\n trackedStudy: '',\n trackedSeries: [],\n ignoredSeries: [],\n prevTrackedStudy: '',\n prevTrackedSeries: [],\n prevIgnoredSeries: [],\n }),\n // Promise resolves w/ `evt.data.*`\n setTrackedStudyAndSeries: assign((ctx, evt) => ({\n prevTrackedStudy: ctx.trackedStudy,\n prevTrackedSeries: ctx.trackedSeries.slice(),\n prevIgnoredSeries: ctx.ignoredSeries.slice(),\n //\n trackedStudy: evt.data.StudyInstanceUID,\n trackedSeries: [evt.data.SeriesInstanceUID],\n ignoredSeries: [],\n })),\n setTrackedStudyAndMultipleSeries: assign((ctx, evt) => {\n const studyInstanceUID =\n evt.StudyInstanceUID || evt.data.StudyInstanceUID;\n const seriesInstanceUIDs =\n evt.SeriesInstanceUIDs || evt.data.SeriesInstanceUIDs;\n\n return {\n prevTrackedStudy: ctx.trackedStudy,\n prevTrackedSeries: ctx.trackedSeries.slice(),\n prevIgnoredSeries: ctx.ignoredSeries.slice(),\n //\n trackedStudy: studyInstanceUID,\n trackedSeries: [...ctx.trackedSeries, ...seriesInstanceUIDs],\n ignoredSeries: [],\n };\n }),\n setIsDirtyToClean: assign((ctx, evt) => ({\n isDirty: false,\n })),\n setIsDirty: assign((ctx, evt) => ({\n isDirty: true,\n })),\n ignoreSeries: assign((ctx, evt) => ({\n prevIgnoredSeries: [...ctx.ignoredSeries],\n ignoredSeries: [...ctx.ignoredSeries, evt.data.SeriesInstanceUID],\n })),\n ignoreHydrationForSRSeries: assign((ctx, evt) => ({\n ignoredSRSeriesForHydration: [\n ...ctx.ignoredSRSeriesForHydration,\n evt.data.srSeriesInstanceUID,\n ],\n })),\n addTrackedSeries: assign((ctx, evt) => ({\n prevTrackedSeries: [...ctx.trackedSeries],\n trackedSeries: [...ctx.trackedSeries, evt.data.SeriesInstanceUID],\n })),\n removeTrackedSeries: assign((ctx, evt) => ({\n prevTrackedSeries: ctx.trackedSeries\n .slice()\n .filter(ser => ser !== evt.SeriesInstanceUID),\n trackedSeries: ctx.trackedSeries\n .slice()\n .filter(ser => ser !== evt.SeriesInstanceUID),\n })),\n },\n guards: {\n // We set dirty any time we performan an action that:\n // - Tracks a new study\n // - Tracks a new series\n // - Adds a measurement to an already tracked study/series\n //\n // We set clean any time we restore from an SR\n //\n // This guard/condition is specific to \"new measurements\"\n // to make sure we only track dirty when the new measurement is specific\n // to a series we're already tracking\n //\n // tl;dr\n // Any report change, that is not a hydration of an existing report, should\n // result in a \"dirty\" report\n //\n // Where dirty means there would be \"loss of data\" if we blew away measurements\n // without creating a new SR.\n shouldSetDirty: (ctx, evt) => {\n return (\n // When would this happen?\n evt.SeriesInstanceUID === undefined ||\n ctx.trackedSeries.includes(evt.SeriesInstanceUID)\n );\n },\n shouldKillMachine: (ctx, evt) =>\n evt.data && evt.data.userResponse === RESPONSE.NO_NEVER,\n shouldAddSeries: (ctx, evt) =>\n evt.data && evt.data.userResponse === RESPONSE.ADD_SERIES,\n shouldSetStudyAndSeries: (ctx, evt) =>\n evt.data && evt.data.userResponse === RESPONSE.SET_STUDY_AND_SERIES,\n shouldAddIgnoredSeries: (ctx, evt) =>\n evt.data && evt.data.userResponse === RESPONSE.NO_NOT_FOR_SERIES,\n shouldPromptSaveReport: (ctx, evt) =>\n evt.data && evt.data.userResponse === RESPONSE.CREATE_REPORT,\n shouldIgnoreHydrationForSR: (ctx, evt) =>\n evt.data && evt.data.userResponse === RESPONSE.CANCEL,\n shouldSaveAndContinueWithSameReport: (ctx, evt) =>\n evt.data &&\n evt.data.userResponse === RESPONSE.CREATE_REPORT &&\n evt.data.isBackupSave === true,\n shouldSaveAndStartNewReport: (ctx, evt) =>\n evt.data &&\n evt.data.userResponse === RESPONSE.CREATE_REPORT &&\n evt.data.isBackupSave === false,\n shouldHydrateStructuredReport: (ctx, evt) =>\n evt.data && evt.data.userResponse === RESPONSE.HYDRATE_REPORT,\n // Has more than 1, or SeriesInstanceUID is not in list\n // --> Post removal would have non-empty trackedSeries array\n hasRemainingTrackedSeries: (ctx, evt) =>\n ctx.trackedSeries.length > 1 ||\n !ctx.trackedSeries.includes(evt.SeriesInstanceUID),\n hasNotIgnoredSRSeriesForHydration: (ctx, evt) => {\n return !ctx.ignoredSRSeriesForHydration.includes(evt.SeriesInstanceUID);\n },\n isNewStudy: (ctx, evt) =>\n !ctx.ignoredSeries.includes(evt.SeriesInstanceUID) &&\n ctx.trackedStudy !== evt.StudyInstanceUID,\n isNewSeries: (ctx, evt) =>\n !ctx.ignoredSeries.includes(evt.SeriesInstanceUID) &&\n !ctx.trackedSeries.includes(evt.SeriesInstanceUID),\n },\n};\n\nexport { defaultOptions, machineConfiguration };\n","const RESPONSE = {\n NO_NEVER: -1,\n CANCEL: 0,\n CREATE_REPORT: 1,\n ADD_SERIES: 2,\n SET_STUDY_AND_SERIES: 3,\n};\n\nfunction promptBeginTracking({ servicesManager, extensionManager }, ctx, evt) {\n const { UIViewportDialogService } = servicesManager.services;\n const { viewportIndex, StudyInstanceUID, SeriesInstanceUID } = evt;\n\n return new Promise(async function(resolve, reject) {\n let promptResult = await _askTrackMeasurements(\n UIViewportDialogService,\n viewportIndex\n );\n\n resolve({\n userResponse: promptResult,\n StudyInstanceUID,\n SeriesInstanceUID,\n viewportIndex,\n });\n });\n}\n\nfunction _askTrackMeasurements(UIViewportDialogService, viewportIndex) {\n return new Promise(function(resolve, reject) {\n const message = 'Track measurements for this series?';\n const actions = [\n {\n id: 'prompt-begin-tracking-cancel',\n type: 'cancel',\n text: 'No',\n value: RESPONSE.CANCEL,\n },\n {\n id: 'prompt-begin-tracking-no-do-not-ask-again',\n type: 'secondary',\n text: 'No, do not ask again',\n value: RESPONSE.NO_NEVER,\n },\n {\n id: 'prompt-begin-tracking-yes',\n type: 'primary',\n text: 'Yes',\n value: RESPONSE.SET_STUDY_AND_SERIES,\n },\n ];\n const onSubmit = result => {\n UIViewportDialogService.hide();\n resolve(result);\n };\n\n UIViewportDialogService.show({\n viewportIndex,\n id: 'measurement-tracking-prompt-begin-tracking',\n type: 'info',\n message,\n actions,\n onSubmit,\n onOutsideClick: () => {\n UIViewportDialogService.hide();\n resolve(RESPONSE.CANCEL);\n },\n });\n });\n}\n\nexport default promptBeginTracking;\n","const RESPONSE = {\n NO_NEVER: -1,\n CANCEL: 0,\n CREATE_REPORT: 1,\n ADD_SERIES: 2,\n SET_STUDY_AND_SERIES: 3,\n NO_NOT_FOR_SERIES: 4,\n};\n\nfunction promptTrackNewSeries({ servicesManager, extensionManager }, ctx, evt) {\n const { UIViewportDialogService } = servicesManager.services;\n const { viewportIndex, StudyInstanceUID, SeriesInstanceUID } = evt;\n\n return new Promise(async function(resolve, reject) {\n let promptResult = await _askShouldAddMeasurements(\n UIViewportDialogService,\n viewportIndex\n );\n\n if (promptResult === RESPONSE.CREATE_REPORT) {\n promptResult = ctx.isDirty\n ? await _askSaveDiscardOrCancel(UIViewportDialogService, viewportIndex)\n : RESPONSE.SET_STUDY_AND_SERIES;\n }\n\n resolve({\n userResponse: promptResult,\n StudyInstanceUID,\n SeriesInstanceUID,\n viewportIndex,\n isBackupSave: false,\n });\n });\n}\n\nfunction _askShouldAddMeasurements(UIViewportDialogService, viewportIndex) {\n return new Promise(function(resolve, reject) {\n const message =\n 'Do you want to add this measurement to the existing report?';\n const actions = [\n { type: 'cancel', text: 'Cancel', value: RESPONSE.CANCEL },\n {\n type: 'secondary',\n text: 'Create new report',\n value: RESPONSE.CREATE_REPORT,\n },\n {\n type: 'primary',\n text: 'Add to existing report',\n value: RESPONSE.ADD_SERIES,\n },\n ];\n const onSubmit = result => {\n UIViewportDialogService.hide();\n resolve(result);\n };\n\n UIViewportDialogService.show({\n viewportIndex,\n type: 'info',\n message,\n actions,\n onSubmit,\n onOutsideClick: () => {\n UIViewportDialogService.hide();\n resolve(RESPONSE.CANCEL);\n },\n });\n });\n}\n\nfunction _askSaveDiscardOrCancel(UIViewportDialogService, viewportIndex) {\n return new Promise(function(resolve, reject) {\n const message =\n 'You have existing tracked measurements. What would you like to do with your existing tracked measurements?';\n const actions = [\n { type: 'cancel', text: 'Cancel', value: RESPONSE.CANCEL },\n {\n type: 'secondary',\n text: 'Save',\n value: RESPONSE.CREATE_REPORT,\n },\n {\n type: 'primary',\n text: 'Discard',\n value: RESPONSE.SET_STUDY_AND_SERIES,\n },\n ];\n const onSubmit = result => {\n UIViewportDialogService.hide();\n resolve(result);\n };\n\n UIViewportDialogService.show({\n viewportIndex,\n type: 'warning',\n message,\n actions,\n onSubmit,\n onOutsideClick: () => {\n UIViewportDialogService.hide();\n resolve(RESPONSE.CANCEL);\n },\n });\n });\n}\n\nexport default promptTrackNewSeries;\n","const RESPONSE = {\n NO_NEVER: -1,\n CANCEL: 0,\n CREATE_REPORT: 1,\n ADD_SERIES: 2,\n SET_STUDY_AND_SERIES: 3,\n NO_NOT_FOR_SERIES: 4,\n};\n\nfunction promptTrackNewStudy({ servicesManager, extensionManager }, ctx, evt) {\n const { UIViewportDialogService } = servicesManager.services;\n const { viewportIndex, StudyInstanceUID, SeriesInstanceUID } = evt;\n\n return new Promise(async function(resolve, reject) {\n let promptResult = await _askTrackMeasurements(\n UIViewportDialogService,\n viewportIndex\n );\n\n if (promptResult === RESPONSE.SET_STUDY_AND_SERIES) {\n promptResult = ctx.isDirty\n ? await _askSaveDiscardOrCancel(UIViewportDialogService, viewportIndex)\n : RESPONSE.SET_STUDY_AND_SERIES;\n }\n\n resolve({\n userResponse: promptResult,\n StudyInstanceUID,\n SeriesInstanceUID,\n viewportIndex,\n isBackupSave: false,\n });\n });\n}\n\nfunction _askTrackMeasurements(UIViewportDialogService, viewportIndex) {\n return new Promise(function(resolve, reject) {\n const message = 'Track measurements for this series?';\n const actions = [\n { type: 'cancel', text: 'No', value: RESPONSE.CANCEL },\n {\n type: 'secondary',\n text: 'No, do not ask again for this series',\n value: RESPONSE.NO_NOT_FOR_SERIES,\n },\n {\n type: 'primary',\n text: 'Yes',\n value: RESPONSE.SET_STUDY_AND_SERIES,\n },\n ];\n const onSubmit = result => {\n UIViewportDialogService.hide();\n resolve(result);\n };\n\n UIViewportDialogService.show({\n viewportIndex,\n type: 'info',\n message,\n actions,\n onSubmit,\n onOutsideClick: () => {\n UIViewportDialogService.hide();\n resolve(RESPONSE.CANCEL);\n },\n });\n });\n}\n\nfunction _askSaveDiscardOrCancel(UIViewportDialogService, viewportIndex) {\n return new Promise(function(resolve, reject) {\n const message =\n 'Measurements cannot span across multiple studies. Do you want to save your tracked measurements?';\n const actions = [\n { type: 'cancel', text: 'Cancel', value: RESPONSE.CANCEL },\n {\n type: 'secondary',\n text: 'No, discard previously tracked series & measurements',\n value: RESPONSE.SET_STUDY_AND_SERIES,\n },\n {\n type: 'primary',\n text: 'Yes',\n value: RESPONSE.CREATE_REPORT,\n },\n ];\n const onSubmit = result => {\n UIViewportDialogService.hide();\n resolve(result);\n };\n\n UIViewportDialogService.show({\n viewportIndex,\n type: 'warning',\n message,\n actions,\n onSubmit,\n onOutsideClick: () => {\n UIViewportDialogService.hide();\n resolve(RESPONSE.CANCEL);\n },\n });\n });\n}\n\nexport default promptTrackNewStudy;\n","import React from 'react';\nimport { DicomMetadataStore } from '@ohif/core';\n\n/**\n *\n * @param {*} servicesManager\n * @param {*} dataSource\n * @param {*} measurements\n * @param {*} options\n * @returns {string[]} displaySetInstanceUIDs\n */\nasync function createReportAsync(\n servicesManager,\n commandsManager,\n dataSource,\n measurements,\n options\n) {\n const {\n DisplaySetService,\n UINotificationService,\n UIDialogService,\n } = servicesManager.services;\n const loadingDialogId = UIDialogService.create({\n showOverlay: true,\n isDraggable: false,\n centralize: true,\n // TODO: Create a loading indicator component + zeplin design?\n content: Loading,\n });\n\n try {\n const naturalizedReport = await commandsManager.runCommand(\n 'storeMeasurements',\n {\n measurementData: measurements,\n dataSource,\n additionalFindingTypes: ['ArrowAnnotate'],\n options,\n },\n 'CORNERSTONE_STRUCTURED_REPORT'\n );\n\n // The \"Mode\" route listens for DicomMetadataStore changes\n // When a new instance is added, it listens and\n // automatically calls makeDisplaySets\n DicomMetadataStore.addInstances([naturalizedReport], true);\n\n const displaySetInstanceUID = DisplaySetService.getMostRecentDisplaySet();\n\n UINotificationService.show({\n title: 'Create Report',\n message: 'Measurements saved successfully',\n type: 'success',\n });\n\n return [displaySetInstanceUID];\n } catch (error) {\n UINotificationService.show({\n title: 'Create Report',\n message: error.message || 'Failed to store measurements',\n type: 'error',\n });\n } finally {\n UIDialogService.dismiss({ id: loadingDialogId });\n }\n}\n\nfunction Loading() {\n return
Loading...
;\n}\n\nexport default createReportAsync;\n","const RESPONSE = {\n NO_NEVER: -1,\n CANCEL: 0,\n CREATE_REPORT: 1,\n ADD_SERIES: 2,\n SET_STUDY_AND_SERIES: 3,\n NO_NOT_FOR_SERIES: 4,\n};\n\nexport default RESPONSE;\n","/* eslint-disable react/display-name */\nimport React from 'react';\nimport { Dialog, Input } from '@ohif/ui';\nimport RESPONSE from './PROMPT_RESPONSES';\n\nexport default function createReportDialogPrompt(UIDialogService) {\n return new Promise(function(resolve, reject) {\n let dialogId = undefined;\n\n const _handleClose = () => {\n // Dismiss dialog\n UIDialogService.dismiss({ id: dialogId });\n // Notify of cancel action\n resolve({ action: RESPONSE.CANCEL, value: undefined });\n };\n\n /**\n *\n * @param {string} param0.action - value of action performed\n * @param {string} param0.value - value from input field\n */\n const _handleFormSubmit = ({ action, value }) => {\n UIDialogService.dismiss({ id: dialogId });\n switch (action.id) {\n case 'save':\n resolve({ action: RESPONSE.CREATE_REPORT, value: value.label });\n break;\n case 'cancel':\n resolve({ action: RESPONSE.CANCEL, value: undefined });\n break;\n }\n };\n\n dialogId = UIDialogService.create({\n centralize: true,\n isDraggable: false,\n content: Dialog,\n useLastPosition: false,\n showOverlay: true,\n contentProps: {\n title: 'Provide a name for your report',\n value: { label: '' },\n noCloseButton: true,\n onClose: _handleClose,\n actions: [\n { id: 'cancel', text: 'Cancel', type: 'primary' },\n { id: 'save', text: 'Save', type: 'secondary' },\n ],\n // TODO: Should be on button press...\n onSubmit: _handleFormSubmit,\n body: ({ value, setValue }) => {\n const onChangeHandler = event => {\n event.persist();\n setValue(value => ({ ...value, label: event.target.value }));\n };\n const onKeyPressHandler = event => {\n if (event.key === 'Enter') {\n UIDialogService.dismiss({ id: dialogId });\n resolve({ action: RESPONSE.CREATE_REPORT, value: value.label });\n }\n };\n return (\n
\n \n
\n );\n },\n },\n });\n });\n}\n","const MIN_SR_SERIES_NUMBER = 4700;\n\nexport default function getNextSRSeriesNumber(DisplaySetService) {\n const activeDisplaySets = DisplaySetService.getActiveDisplaySets();\n const srDisplaySets = activeDisplaySets.filter(ds => ds.Modality === 'SR');\n const srSeriesNumbers = srDisplaySets.map(ds => ds.SeriesNumber);\n const maxSeriesNumber = Math.max(...srSeriesNumbers, MIN_SR_SERIES_NUMBER);\n\n return maxSeriesNumber + 1;\n}\n","import createReportAsync from './../../_shared/createReportAsync';\nimport createReportDialogPrompt from '../../_shared/createReportDialogPrompt';\nimport getNextSRSeriesNumber from '../../_shared/getNextSRSeriesNumber';\nimport RESPONSE from '../../_shared/PROMPT_RESPONSES';\n\nfunction promptSaveReport(\n { servicesManager, commandsManager, extensionManager },\n ctx,\n evt\n) {\n const {\n UIDialogService,\n MeasurementService,\n DisplaySetService,\n } = servicesManager.services;\n const viewportIndex =\n evt.viewportIndex === undefined\n ? evt.data.viewportIndex\n : evt.viewportIndex;\n const isBackupSave =\n evt.isBackupSave === undefined ? evt.data.isBackupSave : evt.isBackupSave;\n const StudyInstanceUID = evt?.data?.StudyInstanceUID;\n const SeriesInstanceUID = evt?.data?.SeriesInstanceUID;\n\n const { trackedStudy, trackedSeries } = ctx;\n let displaySetInstanceUIDs;\n\n return new Promise(async function(resolve, reject) {\n // TODO: Fallback if (UIDialogService) {\n const promptResult = await createReportDialogPrompt(UIDialogService);\n\n if (promptResult.action === RESPONSE.CREATE_REPORT) {\n const dataSources = extensionManager.getDataSources();\n const dataSource = dataSources[0];\n const measurements = MeasurementService.getMeasurements();\n const trackedMeasurements = measurements.filter(\n m =>\n trackedStudy === m.referenceStudyUID &&\n trackedSeries.includes(m.referenceSeriesUID)\n );\n\n const SeriesDescription =\n // isUndefinedOrEmpty\n promptResult.value === undefined || promptResult.value === ''\n ? 'Research Derived Series' // default\n : promptResult.value; // provided value\n\n const SeriesNumber = getNextSRSeriesNumber(DisplaySetService);\n\n displaySetInstanceUIDs = await createReportAsync(\n servicesManager,\n commandsManager,\n dataSource,\n trackedMeasurements,\n {\n SeriesDescription,\n SeriesNumber,\n }\n );\n } else if (promptResult.action === RESPONSE.CANCEL) {\n // Do nothing\n }\n\n resolve({\n userResponse: promptResult.action,\n createdDisplaySetInstanceUIDs: displaySetInstanceUIDs,\n StudyInstanceUID,\n SeriesInstanceUID,\n viewportIndex,\n isBackupSave,\n });\n });\n}\n\nexport default promptSaveReport;\n","import { utilities, metaData } from '@cornerstonejs/core';\nimport OHIF, { DicomMetadataStore } from '@ohif/core';\nimport getLabelFromDCMJSImportedToolData from './utils/getLabelFromDCMJSImportedToolData';\nimport { adapters } from 'dcmjs';\n\nconst { guid } = OHIF.utils;\nconst { MeasurementReport, CORNERSTONE_3D_TAG } = adapters.Cornerstone3D;\n\nconst CORNERSTONE_3D_TOOLS_SOURCE_NAME = 'Cornerstone3DTools';\nconst CORNERSTONE_3D_TOOLS_SOURCE_VERSION = '0.1';\n\nconst supportedLegacyCornerstoneTags = ['cornerstoneTools@^4.0.0'];\n\n/**\n *\n */\nexport default function _hydrateStructuredReport(\n { servicesManager, extensionManager },\n displaySetInstanceUID\n) {\n const dataSource = extensionManager.getActiveDataSource()[0];\n const { MeasurementService, DisplaySetService } = servicesManager.services;\n\n const displaySet = DisplaySetService.getDisplaySetByUID(\n displaySetInstanceUID\n );\n\n // TODO -> We should define a strict versioning somewhere.\n const mappings = MeasurementService.getSourceMappings(\n CORNERSTONE_3D_TOOLS_SOURCE_NAME,\n CORNERSTONE_3D_TOOLS_SOURCE_VERSION\n );\n\n if (!mappings || !mappings.length) {\n throw new Error(\n `Attempting to hydrate measurements service when no mappings present. This shouldn't be reached.`\n );\n }\n\n const instance = DicomMetadataStore.getInstance(\n displaySet.StudyInstanceUID,\n displaySet.SeriesInstanceUID,\n displaySet.SOPInstanceUID\n );\n\n const sopInstanceUIDToImageId = {};\n const imageIdsForToolState = {};\n\n displaySet.measurements.forEach(measurement => {\n const { ReferencedSOPInstanceUID, imageId, frameNumber } = measurement;\n\n if (!sopInstanceUIDToImageId[ReferencedSOPInstanceUID]) {\n sopInstanceUIDToImageId[ReferencedSOPInstanceUID] = imageId;\n imageIdsForToolState[ReferencedSOPInstanceUID] = [];\n }\n if (!imageIdsForToolState[ReferencedSOPInstanceUID][frameNumber]) {\n imageIdsForToolState[ReferencedSOPInstanceUID][frameNumber] = imageId;\n }\n });\n\n const datasetToUse = _mapLegacyDataSet(instance);\n\n // Use dcmjs to generate toolState.\n const storedMeasurementByAnnotationType = MeasurementReport.generateToolState(\n datasetToUse,\n // NOTE: we need to pass in the imageIds to dcmjs since the we use them\n // for the imageToWorld transformation. The following assumes that the order\n // that measurements were added to the display set are the same order as\n // the measurementGroups in the instance.\n sopInstanceUIDToImageId,\n utilities.imageToWorldCoords,\n metaData\n );\n\n // Filter what is found by DICOM SR to measurements we support.\n const mappingDefinitions = mappings.map(m => m.annotationType);\n const hydratableMeasurementsInSR = {};\n\n Object.keys(storedMeasurementByAnnotationType).forEach(key => {\n if (mappingDefinitions.includes(key)) {\n hydratableMeasurementsInSR[key] = storedMeasurementByAnnotationType[key];\n }\n });\n\n // Set the series touched as tracked.\n const imageIds = [];\n\n // TODO: notification if no hydratable?\n Object.keys(hydratableMeasurementsInSR).forEach(annotationType => {\n const toolDataForAnnotationType =\n hydratableMeasurementsInSR[annotationType];\n\n toolDataForAnnotationType.forEach(toolData => {\n // Add the measurement to toolState\n // dcmjs and Cornerstone3D has structural defect in supporting multi-frame\n // files, and looking up the imageId from sopInstanceUIDToImageId results\n // in the wrong value.\n const frameNumber =\n (toolData.annotation.data && toolData.annotation.data.frameNumber) || 1;\n const imageId =\n imageIdsForToolState[toolData.sopInstanceUid][frameNumber] ||\n sopInstanceUIDToImageId[toolData.sopInstanceUid];\n\n if (!imageIds.includes(imageId)) {\n imageIds.push(imageId);\n }\n });\n });\n\n let targetStudyInstanceUID;\n const SeriesInstanceUIDs = [];\n\n for (let i = 0; i < imageIds.length; i++) {\n const imageId = imageIds[i];\n const { SeriesInstanceUID, StudyInstanceUID } = metaData.get(\n 'instance',\n imageId\n );\n\n if (!SeriesInstanceUIDs.includes(SeriesInstanceUID)) {\n SeriesInstanceUIDs.push(SeriesInstanceUID);\n }\n\n if (!targetStudyInstanceUID) {\n targetStudyInstanceUID = StudyInstanceUID;\n } else if (targetStudyInstanceUID !== StudyInstanceUID) {\n console.warn(\n 'NO SUPPORT FOR SRs THAT HAVE MEASUREMENTS FROM MULTIPLE STUDIES.'\n );\n }\n }\n\n Object.keys(hydratableMeasurementsInSR).forEach(annotationType => {\n const toolDataForAnnotationType =\n hydratableMeasurementsInSR[annotationType];\n\n toolDataForAnnotationType.forEach(toolData => {\n // Add the measurement to toolState\n // dcmjs and Cornerstone3D has structural defect in supporting multi-frame\n // files, and looking up the imageId from sopInstanceUIDToImageId results\n // in the wrong value.\n const frameNumber =\n (toolData.annotation.data && toolData.annotation.data.frameNumber) || 1;\n const imageId =\n imageIdsForToolState[toolData.sopInstanceUid][frameNumber] ||\n sopInstanceUIDToImageId[toolData.sopInstanceUid];\n\n toolData.uid = guid();\n\n const instance = metaData.get('instance', imageId);\n const {\n FrameOfReferenceUID,\n // SOPInstanceUID,\n // SeriesInstanceUID,\n // StudyInstanceUID,\n } = instance;\n\n const annotation = {\n annotationUID: toolData.annotation.annotationUID,\n data: toolData.annotation.data,\n metadata: {\n toolName: annotationType,\n referencedImageId: imageId,\n FrameOfReferenceUID,\n },\n };\n\n const source = MeasurementService.getSource(\n CORNERSTONE_3D_TOOLS_SOURCE_NAME,\n CORNERSTONE_3D_TOOLS_SOURCE_VERSION\n );\n annotation.data.label = getLabelFromDCMJSImportedToolData(toolData);\n\n const matchingMapping = mappings.find(\n m => m.annotationType === annotationType\n );\n\n MeasurementService.addRawMeasurement(\n source,\n annotationType,\n { annotation },\n matchingMapping.toMeasurementSchema,\n dataSource\n );\n\n if (!imageIds.includes(imageId)) {\n imageIds.push(imageId);\n }\n });\n });\n\n displaySet.isHydrated = true;\n\n return {\n StudyInstanceUID: targetStudyInstanceUID,\n SeriesInstanceUIDs,\n };\n}\n\nfunction _mapLegacyDataSet(dataset) {\n const REPORT = 'Imaging Measurements';\n const GROUP = 'Measurement Group';\n const TRACKING_IDENTIFIER = 'Tracking Identifier';\n\n // Identify the Imaging Measurements\n const imagingMeasurementContent = toArray(dataset.ContentSequence).find(\n codeMeaningEquals(REPORT)\n );\n\n // Retrieve the Measurements themselves\n const measurementGroups = toArray(\n imagingMeasurementContent.ContentSequence\n ).filter(codeMeaningEquals(GROUP));\n\n // For each of the supported measurement types, compute the measurement data\n const measurementData = {};\n\n const cornerstoneToolClasses =\n MeasurementReport.CORNERSTONE_TOOL_CLASSES_BY_UTILITY_TYPE;\n\n const registeredToolClasses = [];\n\n Object.keys(cornerstoneToolClasses).forEach(key => {\n registeredToolClasses.push(cornerstoneToolClasses[key]);\n measurementData[key] = [];\n });\n\n measurementGroups.forEach((measurementGroup, index) => {\n const measurementGroupContentSequence = toArray(\n measurementGroup.ContentSequence\n );\n\n const TrackingIdentifierGroup = measurementGroupContentSequence.find(\n contentItem =>\n contentItem.ConceptNameCodeSequence.CodeMeaning === TRACKING_IDENTIFIER\n );\n\n const TrackingIdentifier = TrackingIdentifierGroup.TextValue;\n\n let [cornerstoneTag, toolName] = TrackingIdentifier.split(':');\n if (supportedLegacyCornerstoneTags.includes(cornerstoneTag)) {\n cornerstoneTag = CORNERSTONE_3D_TAG;\n }\n\n const mappedTrackingIdentifier = `${cornerstoneTag}:${toolName}`;\n\n TrackingIdentifierGroup.TextValue = mappedTrackingIdentifier;\n });\n\n return dataset;\n}\n\nconst toArray = function(x) {\n return Array.isArray(x) ? x : [x];\n};\n\nconst codeMeaningEquals = codeMeaningName => {\n return contentItem => {\n return contentItem.ConceptNameCodeSequence.CodeMeaning === codeMeaningName;\n };\n};\n","/**\n * Extracts the label from the toolData imported from dcmjs. We need to do this\n * as dcmjs does not depeend on OHIF/the MeasurementService, it just produces data for cornestoneTools.\n * This optional data is available for the consumer to process if they wish to.\n * @param {object} toolData The tooldata relating to the\n *\n * @returns {string} The extracted label.\n */\nexport default function getLabelFromDCMJSImportedToolData(toolData) {\n const { findingSites = [], finding } = toolData;\n\n let freeTextLabel = findingSites.find(\n fs => fs.CodeValue === 'CORNERSTONEFREETEXT'\n );\n\n if (freeTextLabel) {\n return freeTextLabel.CodeMeaning;\n }\n\n if (finding && finding.CodeValue === 'CORNERSTONEFREETEXT') {\n return finding.CodeMeaning;\n }\n}\n","import hydrateStructuredReport from './_hydrateStructuredReport.js';\n\nconst RESPONSE = {\n NO_NEVER: -1,\n CANCEL: 0,\n CREATE_REPORT: 1,\n ADD_SERIES: 2,\n SET_STUDY_AND_SERIES: 3,\n NO_NOT_FOR_SERIES: 4,\n HYDRATE_REPORT: 5,\n};\n\nfunction promptHydrateStructuredReport(\n { servicesManager, extensionManager },\n ctx,\n evt\n) {\n const {\n UIViewportDialogService,\n DisplaySetService,\n } = servicesManager.services;\n const { viewportIndex, displaySetInstanceUID } = evt;\n const srDisplaySet = DisplaySetService.getDisplaySetByUID(\n displaySetInstanceUID\n );\n\n return new Promise(async function(resolve, reject) {\n const promptResult = await _askTrackMeasurements(\n UIViewportDialogService,\n viewportIndex\n );\n\n // Need to do action here... So we can set state...\n let StudyInstanceUID, SeriesInstanceUIDs;\n\n if (promptResult === RESPONSE.HYDRATE_REPORT) {\n console.warn('!! HYDRATING STRUCTURED REPORT');\n const hydrationResult = hydrateStructuredReport(\n { servicesManager, extensionManager },\n displaySetInstanceUID\n );\n\n StudyInstanceUID = hydrationResult.StudyInstanceUID;\n SeriesInstanceUIDs = hydrationResult.SeriesInstanceUIDs;\n }\n\n resolve({\n userResponse: promptResult,\n displaySetInstanceUID: evt.displaySetInstanceUID,\n srSeriesInstanceUID: srDisplaySet.SeriesInstanceUID,\n viewportIndex,\n StudyInstanceUID,\n SeriesInstanceUIDs,\n });\n });\n}\n\nfunction _askTrackMeasurements(UIViewportDialogService, viewportIndex) {\n return new Promise(function(resolve, reject) {\n const message =\n 'Do you want to continue tracking measurements for this study?';\n const actions = [\n {\n type: 'secondary',\n text: 'No',\n value: RESPONSE.CANCEL,\n },\n {\n type: 'primary',\n text: 'Yes',\n value: RESPONSE.HYDRATE_REPORT,\n },\n ];\n const onSubmit = result => {\n UIViewportDialogService.hide();\n resolve(result);\n };\n\n UIViewportDialogService.show({\n viewportIndex,\n type: 'info',\n message,\n actions,\n onSubmit,\n onOutsideClick: () => {\n UIViewportDialogService.hide();\n resolve(RESPONSE.CANCEL);\n },\n });\n });\n}\n\nexport default promptHydrateStructuredReport;\n","import React, { useContext, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { Machine } from 'xstate';\nimport { useMachine } from '@xstate/react';\nimport { useViewportGrid } from '@ohif/ui';\nimport {\n machineConfiguration,\n defaultOptions,\n} from './measurementTrackingMachine';\nimport promptBeginTracking from './promptBeginTracking';\nimport promptTrackNewSeries from './promptTrackNewSeries';\nimport promptTrackNewStudy from './promptTrackNewStudy';\nimport promptSaveReport from './promptSaveReport';\nimport promptHydrateStructuredReport from './promptHydrateStructuredReport';\n\nconst TrackedMeasurementsContext = React.createContext();\nTrackedMeasurementsContext.displayName = 'TrackedMeasurementsContext';\nconst useTrackedMeasurements = () => useContext(TrackedMeasurementsContext);\n\nconst SR_SOPCLASSHANDLERID =\n '@ohif/extension-cornerstone-dicom-sr.sopClassHandlerModule.dicom-sr';\n\n/**\n *\n * @param {*} param0\n */\nfunction TrackedMeasurementsContextProvider(\n { servicesManager, commandsManager, extensionManager }, // Bound by consumer\n { children } // Component props\n) {\n const [viewportGrid, viewportGridService] = useViewportGrid();\n const { activeViewportIndex, viewports } = viewportGrid;\n\n const machineOptions = Object.assign({}, defaultOptions);\n machineOptions.actions = Object.assign({}, machineOptions.actions, {\n jumpToFirstMeasurementInActiveViewport: (ctx, evt) => {\n const { MeasurementService } = servicesManager.services;\n\n const { trackedStudy, trackedSeries } = ctx;\n const measurements = MeasurementService.getMeasurements();\n const trackedMeasurements = measurements.filter(\n m =>\n trackedStudy === m.referenceStudyUID &&\n trackedSeries.includes(m.referenceSeriesUID)\n );\n\n const uid = trackedMeasurements[0].uid;\n\n MeasurementService.jumpToMeasurement(\n viewportGrid.activeViewportIndex,\n uid\n );\n },\n showStructuredReportDisplaySetInActiveViewport: (ctx, evt) => {\n if (evt.data.createdDisplaySetInstanceUIDs.length > 0) {\n const StructuredReportDisplaySetInstanceUID =\n evt.data.createdDisplaySetInstanceUIDs[0].displaySetInstanceUID;\n\n viewportGridService.setDisplaySetsForViewport({\n viewportIndex: evt.data.viewportIndex,\n displaySetInstanceUIDs: [StructuredReportDisplaySetInstanceUID],\n });\n }\n },\n discardPreviouslyTrackedMeasurements: (ctx, evt) => {\n const { MeasurementService } = servicesManager.services;\n const measurements = MeasurementService.getMeasurements();\n const filteredMeasurements = measurements.filter(ms =>\n ctx.prevTrackedSeries.includes(ms.referenceSeriesUID)\n );\n const measurementIds = filteredMeasurements.map(fm => fm.id);\n\n for (let i = 0; i < measurementIds.length; i++) {\n MeasurementService.remove(measurementIds[i]);\n }\n },\n clearAllMeasurements: (ctx, evt) => {\n const { MeasurementService } = servicesManager.services;\n const measurements = MeasurementService.getMeasurements();\n const measurementIds = measurements.map(fm => fm.uid);\n\n for (let i = 0; i < measurementIds.length; i++) {\n MeasurementService.remove(measurementIds[i]);\n }\n },\n });\n machineOptions.services = Object.assign({}, machineOptions.services, {\n promptBeginTracking: promptBeginTracking.bind(null, {\n servicesManager,\n extensionManager,\n }),\n promptTrackNewSeries: promptTrackNewSeries.bind(null, {\n servicesManager,\n extensionManager,\n }),\n promptTrackNewStudy: promptTrackNewStudy.bind(null, {\n servicesManager,\n extensionManager,\n }),\n promptSaveReport: promptSaveReport.bind(null, {\n servicesManager,\n commandsManager,\n extensionManager,\n }),\n promptHydrateStructuredReport: promptHydrateStructuredReport.bind(null, {\n servicesManager,\n extensionManager,\n }),\n });\n\n // TODO: IMPROVE\n // - Add measurement_updated to cornerstone; debounced? (ext side, or consumption?)\n // - Friendlier transition/api in front of measurementTracking machine?\n // - Blocked: viewport overlay shouldn't clip when resized\n // TODO: PRIORITY\n // - Fix \"ellipses\" series description dynamic truncate length\n // - Fix viewport border resize\n // - created/destroyed hooks for extensions (cornerstone measurement subscriptions in it's `init`)\n\n const measurementTrackingMachine = Machine(\n machineConfiguration,\n machineOptions\n );\n\n const [\n trackedMeasurements,\n sendTrackedMeasurementsEvent,\n trackedMeasurementsService,\n ] = useMachine(measurementTrackingMachine);\n\n // ~~ Listen for changes to ViewportGrid for potential SRs hung in panes when idle\n useEffect(() => {\n if (viewports.length > 0) {\n const activeViewport = viewports[activeViewportIndex];\n\n if (!activeViewport || !activeViewport?.displaySetInstanceUIDs?.length) {\n return;\n }\n\n // Todo: Getting the first displaySetInstanceUID is wrong, but we don't have\n // tracking fusion viewports yet. This should change when we do.\n const { DisplaySetService } = servicesManager.services;\n const displaySet = DisplaySetService.getDisplaySetByUID(\n activeViewport.displaySetInstanceUIDs[0]\n );\n\n // If this is an SR produced by our SR SOPClassHandler,\n // and it hasn't been loaded yet, do that now so we\n // can check if it can be rehydrated or not.\n //\n // Note: This happens:\n // - If the viewport is not currently an OHIFCornerstoneSRViewport\n // - If the displaySet has never been hung\n //\n // Otherwise, the displaySet will be loaded by the useEffect handler\n // listening to displaySet changes inside OHIFCornerstoneSRViewport.\n // The issue here is that this handler in TrackedMeasurementsContext\n // ends up occurring before the Viewport is created, so the displaySet\n // is not loaded yet, and isRehydratable is undefined unless we call load().\n if (\n displaySet.SOPClassHandlerId === SR_SOPCLASSHANDLERID &&\n !displaySet.isLoaded &&\n displaySet.load\n ) {\n displaySet.load();\n }\n\n // Magic string\n // load function added by our sopClassHandler module\n if (\n displaySet.SOPClassHandlerId === SR_SOPCLASSHANDLERID &&\n displaySet.isRehydratable === true\n ) {\n console.log('sending event...', trackedMeasurements);\n sendTrackedMeasurementsEvent('PROMPT_HYDRATE_SR', {\n displaySetInstanceUID: displaySet.displaySetInstanceUID,\n SeriesInstanceUID: displaySet.SeriesInstanceUID,\n viewportIndex: activeViewportIndex,\n });\n }\n }\n }, [\n activeViewportIndex,\n sendTrackedMeasurementsEvent,\n servicesManager.services,\n viewports,\n ]);\n\n return (\n \n {children}\n \n );\n}\n\nTrackedMeasurementsContextProvider.propTypes = {\n children: PropTypes.oneOf([PropTypes.func, PropTypes.node]),\n servicesManager: PropTypes.object.isRequired,\n commandsManager: PropTypes.object.isRequired,\n extensionManager: PropTypes.object.isRequired,\n};\n\nexport {\n TrackedMeasurementsContext,\n TrackedMeasurementsContextProvider,\n useTrackedMeasurements,\n};\n","import {\n TrackedMeasurementsContext,\n TrackedMeasurementsContextProvider,\n useTrackedMeasurements,\n} from './contexts';\n\nfunction getContextModule({\n servicesManager,\n extensionManager,\n commandsManager,\n}) {\n const BoundTrackedMeasurementsContextProvider = TrackedMeasurementsContextProvider.bind(\n null,\n { servicesManager, extensionManager, commandsManager }\n );\n\n return [\n {\n name: 'TrackedMeasurementsContext',\n context: TrackedMeasurementsContext,\n provider: BoundTrackedMeasurementsContextProvider,\n },\n ];\n}\n\nexport { useTrackedMeasurements };\nexport default getContextModule;\n","import getAttribute from './getAttribute.js';\nimport getAuthorizationHeader from './getAuthorizationHeader.js';\nimport getModalities from './getModalities.js';\nimport getName from './getName.js';\nimport getNumber from './getNumber.js';\nimport getString from './getString.js';\n\nconst DICOMWeb = {\n getAttribute,\n getAuthorizationHeader,\n getModalities,\n getName,\n getNumber,\n getString,\n};\n\nexport {\n getAttribute,\n getAuthorizationHeader,\n getModalities,\n getName,\n getNumber,\n getString,\n};\n\nexport default DICOMWeb;\n","/**\n * Returns the specified element as a dicom attribute group/element.\n *\n * @param element - The group/element of the element (e.g. '00280009')\n * @param [defaultValue] - The value to return if the element is not present\n * @returns {*}\n */\nexport default function getAttribute(element, defaultValue) {\n if (!element) {\n return defaultValue;\n }\n // Value is not present if the attribute has a zero length value\n if (!element.Value) {\n return defaultValue;\n }\n // Sanity check to make sure we have at least one entry in the array.\n if (!element.Value.length) {\n return defaultValue;\n }\n\n return convertToInt(element.Value);\n}\n\nfunction convertToInt(input) {\n function padFour(input) {\n const l = input.length;\n\n if (l == 0) return '0000';\n if (l == 1) return '000' + input;\n if (l == 2) return '00' + input;\n if (l == 3) return '0' + input;\n\n return input;\n }\n\n let output = '';\n for (let i = 0; i < input.length; i++) {\n for (let j = 0; j < input[i].length; j++) {\n output += padFour(input[i].charCodeAt(j).toString(16));\n }\n }\n\n return parseInt(output, 16);\n}\n","import 'isomorphic-base64'\nimport user from '../user';\n\n/**\n * Returns the Authorization header as part of an Object.\n *\n * @export\n * @param {Object} [server={}]\n * @param {Object} [server.requestOptions]\n * @param {string|function} [server.requestOptions.auth]\n * @returns {Object} { Authorization }\n */\nexport default function getAuthorizationHeader({ requestOptions } = {}, user) {\n const headers = {};\n\n // Check for OHIF.user since this can also be run on the server\n const accessToken = user && user.getAccessToken && user.getAccessToken();\n\n // Auth for a specific server\n if (requestOptions && requestOptions.auth) {\n if (typeof requestOptions.auth === 'function') {\n // Custom Auth Header\n headers.Authorization = requestOptions.auth(requestOptions);\n } else {\n // HTTP Basic Auth (user:password)\n headers.Authorization = `Basic ${btoa(requestOptions.auth)}`;\n }\n }\n // Auth for the user's default\n else if (accessToken) {\n headers.Authorization = `Bearer ${accessToken}`;\n }\n\n return headers;\n}\n","export default function getModalities(Modality, ModalitiesInStudy) {\n if (!Modality && !ModalitiesInStudy) {\n return {};\n }\n\n const modalities = Modality || {\n vr: 'CS',\n Value: [],\n };\n\n if (ModalitiesInStudy) {\n if (modalities.vr && modalities.vr === ModalitiesInStudy.vr) {\n for (let i = 0; i < ModalitiesInStudy.Value.length; i++) {\n const value = ModalitiesInStudy.Value[i];\n if (modalities.Value.indexOf(value) === -1) {\n modalities.Value.push(value);\n }\n }\n } else {\n return ModalitiesInStudy;\n }\n }\n\n return modalities;\n}\n","/**\n * Returns the Alphabetic version of a PN\n *\n * @param element - The group/element of the element (e.g. '00200013')\n * @param [defaultValue] - The default value to return if the element is not found\n * @returns {*}\n */\nexport default function getName(element, defaultValue) {\n if (!element) {\n return defaultValue;\n }\n // Value is not present if the attribute has a zero length value\n if (!element.Value) {\n return defaultValue;\n }\n // Sanity check to make sure we have at least one entry in the array.\n if (!element.Value.length) {\n return defaultValue;\n }\n // Return the Alphabetic component group\n if (element.Value[0].Alphabetic) {\n return element.Value[0].Alphabetic;\n }\n // Orthanc does not return PN properly so this is a temporary workaround\n return element.Value[0];\n}\n","/**\n * Returns the first string value as a Javascript Number\n * @param element - The group/element of the element (e.g. '00200013')\n * @param [defaultValue] - The default value to return if the element does not exist\n * @returns {*}\n */\nexport default function getNumber(element, defaultValue) {\n if (!element) {\n return defaultValue;\n }\n // Value is not present if the attribute has a zero length value\n if (!element.Value) {\n return defaultValue;\n }\n // Sanity check to make sure we have at least one entry in the array.\n if (!element.Value.length) {\n return defaultValue;\n }\n\n return parseFloat(element.Value[0]);\n}\n","/**\n * Returns the specified element as a string. Multi-valued elements will be separated by a backslash\n *\n * @param element - The group/element of the element (e.g. '00200013')\n * @param [defaultValue] - The value to return if the element is not present\n * @returns {*}\n */\nexport default function getString(element, defaultValue) {\n if (!element) {\n return defaultValue;\n }\n // Value is not present if the attribute has a zero length value\n if (!element.Value) {\n return defaultValue;\n }\n // Sanity check to make sure we have at least one entry in the array.\n if (!element.Value.length) {\n return defaultValue;\n }\n // Join the array together separated by backslash\n // NOTE: Orthanc does not correctly split values into an array so the join is a no-op\n return element.Value.join('\\\\');\n}\n","import { DicomMetadataStore } from '../services/DicomMetadataStore';\n// TODO: Use above to inject so dependent datasources don't need to import or\n// depend on @ohif/core?\n\n/**\n * Factory function that creates a new \"Web API\" data source.\n * A \"Web API\" data source is any source that fetches data over\n * HTTP. This function serves as an \"adapter\" to wrap those calls\n * so that all \"Web API\" data sources have the same interface and can\n * be used interchangeably.\n *\n * It's worth noting that a single implementation of this interface\n * can define different underlying sources for \"read\" and \"write\" operations.\n */\nfunction create({\n query,\n retrieve,\n store,\n reject,\n initialize,\n deleteStudyMetadataPromise,\n getImageIdsForDisplaySet,\n getImageIdsForInstance,\n getImageIdsForStudy = null,\n onNewStudy = null,\n setNewStudy = null,\n updateConfig = null,\n}) {\n const defaultQuery = {\n studies: {\n /**\n * @param {string} params.patientName\n * @param {string} params.mrn\n * @param {object} params.studyDate\n * @param {string} params.description\n * @param {string} params.modality\n * @param {string} params.accession\n * @param {string} params.sortBy\n * @param {string} params.sortDirection -\n * @param {number} params.page\n * @param {number} params.resultsPerPage\n */\n mapParams: params => params,\n requestResults: () => { },\n processResults: results => results,\n },\n series: {},\n instances: {},\n };\n\n const defaultRetrieve = {\n series: {},\n };\n\n const defaultStore = {\n dicom: async naturalizedDataset => {\n throw new Error(\n 'store.dicom(naturalizedDicom, StudyInstanceUID) not implemented for dataSource.'\n );\n },\n };\n\n const defaultReject = {};\n return {\n query: query || defaultQuery,\n retrieve: retrieve || defaultRetrieve,\n reject: reject || defaultReject,\n store: store || defaultStore,\n initialize,\n deleteStudyMetadataPromise,\n getImageIdsForDisplaySet,\n getImageIdsForInstance,\n getImageIdsForStudy,\n setNewStudy,\n onNewStudy,\n updateConfig\n };\n}\n\nconst IWebApiDataSource = {\n create,\n};\n\nexport default IWebApiDataSource;\n","import log from '../log.js';\n\n/**\n * The definition of a command\n *\n * @typedef {Object} CommandDefinition\n * @property {Function} commandFn - Command to call\n * @property {Object} options - Object of params to pass action\n */\n\n/**\n * The Commands Manager tracks named commands (or functions) that are scoped to\n * a context. When we attempt to run a command with a given name, we look for it\n * in our active contexts. If found, we run the command, passing in any application\n * or call specific data specified in the command's definition.\n *\n * NOTE: A more robust version of the CommandsManager lives in v1. If you're looking\n * to extend this class, please check it's source before adding new methods.\n */\nexport class CommandsManager {\n constructor({} = {}) {\n this.contexts = {};\n }\n\n /**\n * Allows us to create commands \"per context\". An example would be the \"Cornerstone\"\n * context having a `SaveImage` command, and the \"VTK\" context having a `SaveImage`\n * command. The distinction of a context allows us to call the command in either\n * context, and have faith that the correct command will be run.\n *\n * @method\n * @param {string} contextName - Namespace for commands\n * @returns {undefined}\n */\n createContext(contextName) {\n if (!contextName) {\n return;\n }\n\n if (this.contexts[contextName]) {\n return this.clearContext(contextName);\n }\n\n this.contexts[contextName] = {};\n }\n\n /**\n * Returns all command definitions for a given context\n *\n * @method\n * @param {string} contextName - Namespace for commands\n * @returns {Object} - the matched context\n */\n getContext(contextName) {\n const context = this.contexts[contextName];\n\n if (!context) {\n return;\n }\n\n return context;\n }\n\n /**\n * Clears all registered commands for a given context.\n *\n * @param {string} contextName - Namespace for commands\n * @returns {undefined}\n */\n clearContext(contextName) {\n if (!contextName) {\n return;\n }\n\n this.contexts[contextName] = {};\n }\n\n /**\n * Register a new command with the command manager. Scoped to a context, and\n * with a definition to assist command callers w/ providing the necessary params\n *\n * @method\n * @param {string} contextName - Namespace for command; often scoped to the extension that added it\n * @param {string} commandName - Unique name identifying the command\n * @param {CommandDefinition} definition - {@link CommandDefinition}\n */\n registerCommand(contextName, commandName, definition) {\n if (typeof definition !== 'object') {\n return;\n }\n\n const context = this.getContext(contextName);\n if (!context) {\n return;\n }\n\n context[commandName] = definition;\n }\n\n /**\n * Finds a command with the provided name if it exists in the specified context,\n * or a currently active context.\n *\n * @method\n * @param {String} commandName - Command to find\n * @param {String} [contextName] - Specific command to look in. Defaults to current activeContexts\n */\n getCommand = (commandName, contextName) => {\n let contexts = [];\n\n if (contextName) {\n const context = this.getContext(contextName);\n if (context) {\n contexts.push(context);\n }\n } else {\n Object.keys(this.contexts).forEach(contextName => {\n contexts.push(this.getContext(contextName));\n });\n }\n\n if (contexts.length === 0) {\n return;\n }\n\n let foundCommand;\n contexts.forEach(context => {\n if (context[commandName]) {\n foundCommand = context[commandName];\n }\n });\n\n return foundCommand;\n };\n\n /**\n *\n * @method\n * @param {String} commandName\n * @param {Object} [options={}] - Extra options to pass the command. Like a mousedown event\n * @param {String} [contextName]\n */\n runCommand(commandName, options = {}, contextName) {\n const definition = this.getCommand(commandName, contextName);\n if (!definition) {\n log.warn(`Command \"${commandName}\" not found in current context`);\n return;\n }\n\n const { commandFn } = definition;\n const commandParams = Object.assign(\n {},\n definition.options, // \"Command configuration\"\n options // \"Time of call\" info\n );\n\n if (typeof commandFn !== 'function') {\n log.warn(`No commandFn was defined for command \"${commandName}\"`);\n return;\n } else {\n return commandFn(commandParams);\n }\n }\n}\n\nexport default CommandsManager;\n","import objectHash from 'object-hash';\nimport log from './../log.js';\nimport { hotkeys } from '../utils';\n\n/**\n *\n *\n * @typedef {Object} HotkeyDefinition\n * @property {String} commandName - Command to call\n * @property {Object} commandOptions - Command options\n * @property {String} label - Display name for hotkey\n * @property {String[]} keys - Keys to bind; Follows Mousetrap.js binding syntax\n */\n\nexport class HotkeysManager {\n constructor(commandsManager, servicesManager) {\n this.hotkeyDefinitions = {};\n this.hotkeyDefaults = [];\n this.isEnabled = true;\n\n if (!commandsManager) {\n throw new Error(\n 'HotkeysManager instantiated without a commandsManager. Hotkeys will be unable to find and run commands.'\n );\n }\n\n this._servicesManager = servicesManager;\n this._commandsManager = commandsManager;\n }\n\n /**\n * Exposes Mousetrap.js's `.record` method, added by the record plugin.\n *\n * @param {*} event\n */\n record(event) {\n return hotkeys.record(event);\n }\n\n /**\n * Disables all hotkeys. Hotkeys added while disabled will not listen for\n * input.\n */\n disable() {\n this.isEnabled = false;\n hotkeys.pause();\n }\n\n /**\n * Enables all hotkeys.\n */\n enable() {\n this.isEnabled = true;\n hotkeys.unpause();\n }\n\n /**\n * Registers a list of hotkeydefinitions.\n *\n * @param {HotkeyDefinition[] | Object} [hotkeyDefinitions=[]] Contains hotkeys definitions\n */\n setHotkeys(hotkeyDefinitions = []) {\n try {\n const definitions = this.getValidDefinitions(hotkeyDefinitions);\n definitions.forEach(definition => this.registerHotkeys(definition));\n localStorage.setItem('hotkey-definitions', JSON.stringify(definitions));\n } catch (error) {\n const { UINotificationService } = this._servicesManager.services;\n UINotificationService.show({\n title: 'Hotkeys Manager',\n message: 'Error while setting hotkeys',\n type: 'error',\n });\n }\n }\n\n /**\n * Set default hotkey bindings. These\n * values are used in `this.restoreDefaultBindings`.\n *\n * @param {HotkeyDefinition[] | Object} [hotkeyDefinitions=[]] Contains hotkeys definitions\n */\n setDefaultHotKeys(hotkeyDefinitions = []) {\n const definitions = this.getValidDefinitions(hotkeyDefinitions);\n this.hotkeyDefaults = definitions;\n }\n\n /**\n * Take hotkey definitions that can be an array or object and make sure that it\n * returns an array of hotkeys\n *\n * @param {HotkeyDefinition[] | Object} [hotkeyDefinitions=[]] Contains hotkeys definitions\n */\n getValidDefinitions(hotkeyDefinitions) {\n const definitions = Array.isArray(hotkeyDefinitions)\n ? [...hotkeyDefinitions]\n : this._parseToArrayLike(hotkeyDefinitions);\n\n return definitions;\n }\n\n /**\n * Take hotkey definitions that can be an array and make sure that it\n * returns an object of hotkeys definitions\n *\n * @param {HotkeyDefinition[]} [hotkeyDefinitions=[]] Contains hotkeys definitions\n * @returns {Object}\n */\n getValidHotkeyDefinitions(hotkeyDefinitions) {\n const definitions = this.getValidDefinitions(hotkeyDefinitions);\n const objectDefinitions = {};\n definitions.forEach(definition => {\n const { commandName, commandOptions } = definition;\n const commandHash = objectHash({ commandName, commandOptions });\n objectDefinitions[commandHash] = definition;\n });\n return objectDefinitions;\n }\n\n /**\n * It parses given object containing hotkeyDefinition to array like.\n * Each property of given object will be mapped to an object of an array. And its property name will be the value of a property named as commandName\n *\n * @param {HotkeyDefinition[] | Object} [hotkeyDefinitions={}] Contains hotkeys definitions\n * @returns {HotkeyDefinition[]}\n */\n _parseToArrayLike(hotkeyDefinitionsObj = {}) {\n const copy = { ...hotkeyDefinitionsObj };\n return Object.entries(copy).map(entryValue =>\n this._parseToHotKeyObj(entryValue[0], entryValue[1])\n );\n }\n\n /**\n * Return HotkeyDefinition object like based on given property name and property value\n * @param {string} propertyName property name of hotkey definition object\n * @param {object} propertyValue property value of hotkey definition object\n *\n * @example\n *\n * const hotKeyObj = {hotKeyDefA: {keys:[],....}}\n *\n * const parsed = _parseToHotKeyObj(Object.keys(hotKeyDefA)[0], hotKeyObj[hotKeyDefA]);\n * {\n * commandName: hotKeyDefA,\n * keys: [],\n * ....\n * }\n *\n */\n _parseToHotKeyObj(propertyName, propertyValue) {\n return {\n commandName: propertyName,\n ...propertyValue,\n };\n }\n\n /**\n * (unbinds and) binds the specified command to one or more key combinations.\n * When a hotkey combination is triggered, the command name and active contexts\n * are used to locate the correct command to call.\n *\n * @param {HotkeyDefinition} command\n * @param {String} extension\n * @returns {undefined}\n */\n registerHotkeys(\n { commandName, commandOptions = {}, keys, label, isEditable } = {},\n extension\n ) {\n if (!commandName) {\n throw new Error(`No command was defined for hotkey \"${keys}\"`);\n }\n\n const commandHash = objectHash({ commandName, commandOptions });\n const options = Object.keys(commandOptions).length\n ? JSON.stringify(commandOptions)\n : 'no';\n const previouslyRegisteredDefinition = this.hotkeyDefinitions[commandHash];\n\n if (previouslyRegisteredDefinition) {\n const previouslyRegisteredKeys = previouslyRegisteredDefinition.keys;\n this._unbindHotkeys(commandName, previouslyRegisteredKeys);\n log.info(\n `[hotkeys] Unbinding ${commandName} with ${options} options from ${previouslyRegisteredKeys}`\n );\n }\n\n // Set definition & bind\n this.hotkeyDefinitions[commandHash] = {\n commandName,\n commandOptions,\n keys,\n label,\n isEditable,\n };\n this._bindHotkeys(commandName, commandOptions, keys);\n log.info(\n `[hotkeys] Binding ${commandName} with ${options} options to ${keys}`\n );\n }\n\n /**\n * Uses most recent\n *\n * @returns {undefined}\n */\n restoreDefaultBindings() {\n this.setHotkeys(this.hotkeyDefaults);\n }\n\n /**\n *\n */\n destroy() {\n this.hotkeyDefaults = [];\n this.hotkeyDefinitions = {};\n hotkeys.reset();\n }\n\n /**\n * Binds one or more set of hotkey combinations for a given command\n *\n * @private\n * @param {string} commandName - The name of the command to trigger when hotkeys are used\n * @param {string[]} keys - One or more key combinations that should trigger command\n * @returns {undefined}\n */\n _bindHotkeys(commandName, commandOptions = {}, keys) {\n const isKeyDefined = keys === '' || keys === undefined;\n if (isKeyDefined) {\n return;\n }\n\n const isKeyArray = keys instanceof Array;\n const combinedKeys = isKeyArray ? keys.join('+') : keys;\n\n hotkeys.bind(combinedKeys, evt => {\n evt.preventDefault();\n evt.stopPropagation();\n this._commandsManager.runCommand(commandName, { evt, ...commandOptions });\n });\n }\n\n /**\n * unbinds one or more set of hotkey combinations for a given command\n *\n * @private\n * @param {string} commandName - The name of the previously bound command\n * @param {string[]} keys - One or more sets of previously bound keys\n * @returns {undefined}\n */\n _unbindHotkeys(commandName, keys) {\n const isKeyDefined = keys !== '' && keys !== undefined;\n if (!isKeyDefined) {\n return;\n }\n\n const isKeyArray = keys instanceof Array;\n if (isKeyArray) {\n const combinedKeys = keys.join('+');\n this._unbindHotkeys(commandName, combinedKeys);\n return;\n }\n\n hotkeys.unbind(keys);\n }\n}\n\nexport default HotkeysManager;\n\n// Commands Contexts:\n\n// --> Name and Priority\n// GLOBAL: 0\n// VIEWER::CORNERSTONE: 1\n// VIEWER::VTK: 1\n","import guid from '../utils/guid.js';\nimport { Vector3 } from 'cornerstone-math';\n\nconst OBJECT = 'object';\n\n/**\n * This class defines an ImageSet object which will be used across the viewer. This object represents\n * a list of images that are associated by any arbitrary criteria being thus content agnostic. Besides the\n * main attributes (images and uid) it allows additional attributes to be appended to it (currently\n * indiscriminately, but this should be changed).\n */\nclass ImageSet {\n constructor(images) {\n if (Array.isArray(images) !== true) {\n throw new Error('ImageSet expects an array of images');\n }\n\n // @property \"images\"\n Object.defineProperty(this, 'images', {\n enumerable: false,\n configurable: false,\n writable: false,\n value: images,\n });\n\n // @property \"uid\"\n Object.defineProperty(this, 'uid', {\n enumerable: false,\n configurable: false,\n writable: false,\n value: guid(), // Unique ID of the instance\n });\n }\n\n getUID() {\n return this.uid;\n }\n\n setAttribute(attribute, value) {\n this[attribute] = value;\n }\n\n getAttribute(attribute) {\n return this[attribute];\n }\n\n setAttributes(attributes) {\n if (typeof attributes === OBJECT && attributes !== null) {\n const imageSet = this,\n hasOwn = Object.prototype.hasOwnProperty;\n for (let attribute in attributes) {\n if (hasOwn.call(attributes, attribute)) {\n imageSet[attribute] = attributes[attribute];\n }\n }\n }\n }\n\n getImage(index) {\n return this.images[index];\n }\n\n sortBy(sortingCallback) {\n return this.images.sort(sortingCallback);\n }\n\n sortByImagePositionPatient() {\n const images = this.images;\n const referenceImagePositionPatient = _getImagePositionPatient(images[0]);\n\n const refIppVec = new Vector3(\n referenceImagePositionPatient[0],\n referenceImagePositionPatient[1],\n referenceImagePositionPatient[2]\n );\n\n const ImageOrientationPatient = _getImageOrientationPatient(images[0]);\n\n const scanAxisNormal = new Vector3(\n ImageOrientationPatient[0],\n ImageOrientationPatient[1],\n ImageOrientationPatient[2]\n ).cross(\n new Vector3(\n ImageOrientationPatient[3],\n ImageOrientationPatient[4],\n ImageOrientationPatient[5]\n )\n );\n\n const distanceImagePairs = images.map(function(image) {\n const ippVec = new Vector3(..._getImagePositionPatient(image));\n const positionVector = refIppVec.clone().sub(ippVec);\n const distance = positionVector.dot(scanAxisNormal);\n\n return {\n distance,\n image,\n };\n });\n\n distanceImagePairs.sort(function(a, b) {\n return b.distance - a.distance;\n });\n\n const sortedImages = distanceImagePairs.map(a => a.image);\n\n images.sort(function(a, b) {\n return sortedImages.indexOf(a) - sortedImages.indexOf(b);\n });\n }\n}\n\nfunction _getImagePositionPatient(image) {\n return image.getData().metadata.ImagePositionPatient;\n}\n\nfunction _getImageOrientationPatient(image) {\n return image.getData().metadata.ImageOrientationPatient;\n}\n\nexport default ImageSet;\n","/**\n * Gets the palette color data for the specified tag - red/green/blue,\n * either from the given UID or from the tag itself.\n * Returns an array if the data is immediately available, or a promise\n * which resolves to the data if the data needs to be loaded.\n * Returns undefined if the palette isn't specified.\n *\n * @param {*} item containing the palette colour data and description\n * @param {*} tag is the tag for the palette data\n * @param {*} descriptorTag is the tag for the descriptor\n * @returns Array view containing the palette data, or a promise to return one.\n * Returns undefined if the palette data is absent.\n */\nexport default function fetchPaletteColorLookupTableData(\n item, tag, descriptorTag\n) {\n const { PaletteColorLookupTableUID } = item;\n const paletteData = item[tag];\n if (paletteData === undefined && PaletteColorLookupTableUID === undefined) return;\n // performance optimization - read UID and cache by UID\n return _getPaletteColor(\n item[tag],\n item[descriptorTag]\n )\n}\n\nfunction _getPaletteColor(paletteColorLookupTableData, lutDescriptor) {\n const numLutEntries = lutDescriptor[0];\n const bits = lutDescriptor[2];\n\n if (!paletteColorLookupTableData) return undefined;\n\n const arrayBufferToPaletteColorLUT = arraybuffer => {\n const lut = [];\n\n if (bits === 16) {\n let j = 0;\n for (let i = 0; i < numLutEntries; i++) {\n lut[i] = arraybuffer[j++] + arraybuffer[j++] << 8;\n }\n } else {\n for (let i = 0; i < numLutEntries; i++) {\n lut[i] = byteArray[i];\n }\n\n }\n return lut;\n };\n\n if (paletteColorLookupTableData.palette) {\n return paletteColorLookupTableData.palette;\n }\n\n if (paletteColorLookupTableData.InlineBinary) {\n try {\n const arraybuffer = Uint8Array.from(atob(paletteColorLookupTableData.InlineBinary), c =>\n c.charCodeAt(0)\n );\n return (paletteColorLookupTableData.palette = arrayBufferToPaletteColorLUT(arraybuffer));\n } catch (e) {\n console.log(\"Couldn't decode\", paletteColorLookupTableData.InlineBinary, e);\n return undefined;\n }\n }\n\n if (paletteColorLookupTableData.retrieveBulkData) {\n return paletteColorLookupTableData.retrieveBulkData().then(val =>\n (paletteColorLookupTableData.palette = arrayBufferToPaletteColorLUT(val)));\n }\n\n throw new Error(`No data found for ${paletteColorLookupTableData} palette`)\n}\n","/**\n * Combine the Per instance frame data, the shared frame data\n * and the root data objects.\n * The data is combined by taking nested sequence objects within\n * the functional group sequences. Data that is directly contained\n * within the functional group sequences, such as private creators\n * will be ignored.\n * This can be safely called with an undefined frame in order to handle\n * single frame data. (eg frame is undefined is the same as frame===1).\n */\nconst combineFrameInstance = (frame, instance) => {\n const {\n PerFrameFunctionalGroupsSequence,\n SharedFunctionalGroupsSequence,\n NumberOfFrames,\n } = instance;\n\n if (PerFrameFunctionalGroupsSequence || NumberOfFrames > 1) {\n const frameNumber = Number.parseInt(frame || 1);\n const shared = (SharedFunctionalGroupsSequence\n ? Object.values(SharedFunctionalGroupsSequence[0])\n : []\n )\n .map(it => it[0])\n .filter(it => it !== undefined && typeof it === 'object');\n const perFrame = (PerFrameFunctionalGroupsSequence\n ? Object.values(PerFrameFunctionalGroupsSequence[frameNumber - 1])\n : []\n )\n .map(it => it[0])\n .filter(it => it !== undefined && typeof it === 'object');\n\n return Object.assign(\n { frameNumber: frameNumber },\n instance,\n ...Object.values(shared),\n ...Object.values(perFrame)\n );\n } else {\n return instance;\n }\n};\n\nexport default combineFrameInstance;\n","import queryString from 'query-string';\nimport dicomParser from 'dicom-parser';\nimport { imageIdToURI } from '../utils';\nimport getPixelSpacingInformation from '../utils/metadataProvider/getPixelSpacingInformation';\nimport DicomMetadataStore from '../services/DicomMetadataStore';\nimport fetchPaletteColorLookupTableData from '../utils/metadataProvider/fetchPaletteColorLookupTableData';\nimport toNumber from '../utils/toNumber';\nimport combineFrameInstance from '../utils/combineFrameInstance';\n\nclass MetadataProvider {\n constructor() {\n // Define the main \"metadataLookup\" private property as an immutable property.\n Object.defineProperty(this, 'studies', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: new Map(),\n });\n Object.defineProperty(this, 'imageURIToUIDs', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: new Map(),\n });\n // Can be used to store custom metadata for a specific type.\n // For instance, the scaling metadata for PET can be stored here\n // as type \"scalingModule\"\n //\n Object.defineProperty(this, 'customMetadata', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: new Map(),\n });\n }\n\n addImageIdToUIDs(imageId, uids) {\n // This method is a fallback for when you don't have WADO-URI or WADO-RS.\n // You can add instances fetched by any method by calling addInstance, and hook an imageId to point at it here.\n // An example would be dicom hosted at some random site.\n const imageURI = imageIdToURI(imageId);\n this.imageURIToUIDs.set(imageURI, uids);\n }\n\n addCustomMetadata(imageId, type, metadata) {\n const imageURI = imageIdToURI(imageId);\n if (!this.customMetadata.has(type)) {\n this.customMetadata.set(type, {});\n }\n\n this.customMetadata.get(type)[imageURI] = metadata;\n }\n\n _getInstance(imageId) {\n const uids = this.getUIDsFromImageID(imageId);\n\n if (!uids) {\n return;\n }\n\n const {\n StudyInstanceUID,\n SeriesInstanceUID,\n SOPInstanceUID,\n frameNumber,\n } = uids;\n\n const instance = DicomMetadataStore.getInstance(\n StudyInstanceUID,\n SeriesInstanceUID,\n SOPInstanceUID\n );\n return (\n (frameNumber && combineFrameInstance(frameNumber, instance)) || instance\n );\n }\n\n get(query, imageId, options = { fallback: false }) {\n const instance = this._getInstance(imageId);\n\n if (query === INSTANCE) {\n return instance;\n }\n\n // check inside custom metadata\n if (this.customMetadata.has(query)) {\n const customMetadata = this.customMetadata.get(query);\n const imageURI = imageIdToURI(imageId);\n if (customMetadata[imageURI]) {\n return customMetadata[imageURI];\n }\n }\n\n return this.getTagFromInstance(query, instance, options);\n }\n\n getTag(query, imageId, options) {\n return this.get(query, imageId, options);\n }\n\n getInstance(imageId) {\n return this.get(INSTANCE, imageId);\n }\n\n getTagFromInstance(\n naturalizedTagOrWADOImageLoaderTag,\n instance,\n options = { fallback: false }\n ) {\n if (!instance) {\n return;\n }\n\n // If its a naturalized dcmjs tag present on the instance, return.\n if (instance[naturalizedTagOrWADOImageLoaderTag]) {\n return instance[naturalizedTagOrWADOImageLoaderTag];\n }\n\n // Maybe its a legacy CornerstoneWADOImageLoader tag then:\n return this._getCornerstoneWADOImageLoaderTag(\n naturalizedTagOrWADOImageLoaderTag,\n instance\n );\n }\n\n _getCornerstoneWADOImageLoaderTag(wadoImageLoaderTag, instance) {\n let metadata;\n\n switch (wadoImageLoaderTag) {\n case WADO_IMAGE_LOADER_TAGS.GENERAL_SERIES_MODULE:\n const { SeriesDate, SeriesTime } = instance;\n\n let seriesDate;\n let seriesTime;\n\n if (SeriesDate) {\n seriesDate = dicomParser.parseDA(SeriesDate);\n }\n\n if (SeriesTime) {\n seriesTime = dicomParser.parseTM(SeriesTime);\n }\n\n metadata = {\n modality: instance.Modality,\n seriesInstanceUID: instance.SeriesInstanceUID,\n seriesNumber: toNumber(instance.SeriesNumber),\n studyInstanceUID: instance.StudyInstanceUID,\n seriesDate,\n seriesTime,\n };\n break;\n case WADO_IMAGE_LOADER_TAGS.PATIENT_STUDY_MODULE:\n metadata = {\n patientAge: toNumber(instance.PatientAge),\n patientSize: toNumber(instance.PatientSize),\n patientWeight: toNumber(instance.PatientWeight),\n };\n break;\n case WADO_IMAGE_LOADER_TAGS.PATIENT_DEMOGRAPHIC_MODULE:\n metadata = {\n patientSex: instance.PatientSex,\n };\n break;\n case WADO_IMAGE_LOADER_TAGS.IMAGE_PLANE_MODULE:\n const { ImageOrientationPatient } = instance;\n\n // Fallback for DX images.\n // TODO: We should use the rest of the results of this function\n // to update the UI somehow\n const { PixelSpacing } = getPixelSpacingInformation(instance);\n\n let rowPixelSpacing;\n let columnPixelSpacing;\n\n let rowCosines;\n let columnCosines;\n\n if (PixelSpacing) {\n rowPixelSpacing = PixelSpacing[0];\n columnPixelSpacing = PixelSpacing[1];\n }\n\n if (ImageOrientationPatient) {\n rowCosines = ImageOrientationPatient.slice(0, 3);\n columnCosines = ImageOrientationPatient.slice(3, 6);\n }\n\n metadata = {\n frameOfReferenceUID: instance.FrameOfReferenceUID,\n rows: toNumber(instance.Rows),\n columns: toNumber(instance.Columns),\n imageOrientationPatient: toNumber(ImageOrientationPatient),\n rowCosines: toNumber(rowCosines || [0, 1, 0]),\n columnCosines: toNumber(columnCosines || [0, 0, -1]),\n imagePositionPatient: toNumber(\n instance.ImagePositionPatient || [0, 0, 0]\n ),\n sliceThickness: toNumber(instance.SliceThickness),\n sliceLocation: toNumber(instance.SliceLocation),\n pixelSpacing: toNumber(PixelSpacing || 1),\n rowPixelSpacing: toNumber(rowPixelSpacing || 1),\n columnPixelSpacing: toNumber(columnPixelSpacing || 1),\n };\n break;\n case WADO_IMAGE_LOADER_TAGS.IMAGE_PIXEL_MODULE:\n metadata = {\n samplesPerPixel: toNumber(instance.SamplesPerPixel),\n photometricInterpretation: instance.PhotometricInterpretation,\n rows: toNumber(instance.Rows),\n columns: toNumber(instance.Columns),\n bitsAllocated: toNumber(instance.BitsAllocated),\n bitsStored: toNumber(instance.BitsStored),\n highBit: toNumber(instance.HighBit),\n pixelRepresentation: toNumber(instance.PixelRepresentation),\n planarConfiguration: toNumber(instance.PlanarConfiguration),\n pixelAspectRatio: toNumber(instance.PixelAspectRatio),\n smallestPixelValue: toNumber(instance.SmallestPixelValue),\n largestPixelValue: toNumber(instance.LargestPixelValue),\n redPaletteColorLookupTableDescriptor: toNumber(\n instance.RedPaletteColorLookupTableDescriptor\n ),\n greenPaletteColorLookupTableDescriptor: toNumber(\n instance.GreenPaletteColorLookupTableDescriptor\n ),\n bluePaletteColorLookupTableDescriptor: toNumber(\n instance.BluePaletteColorLookupTableDescriptor\n ),\n redPaletteColorLookupTableData: fetchPaletteColorLookupTableData(\n instance,\n 'RedPaletteColorLookupTableData',\n 'RedPaletteColorLookupTableDescriptor'\n ),\n greenPaletteColorLookupTableData: fetchPaletteColorLookupTableData(\n instance,\n 'GreenPaletteColorLookupTableData',\n 'GreenPaletteColorLookupTableDescriptor'\n ),\n bluePaletteColorLookupTableData: fetchPaletteColorLookupTableData(\n instance,\n 'BluePaletteColorLookupTableData',\n 'BluePaletteColorLookupTableDescriptor'\n ),\n };\n\n break;\n case WADO_IMAGE_LOADER_TAGS.VOI_LUT_MODULE:\n const { WindowCenter, WindowWidth, VOILUTFunction } = instance;\n if (WindowCenter === undefined || WindowWidth === undefined) {\n return;\n }\n const windowCenter = Array.isArray(WindowCenter)\n ? WindowCenter\n : [WindowCenter];\n const windowWidth = Array.isArray(WindowWidth)\n ? WindowWidth\n : [WindowWidth];\n\n metadata = {\n windowCenter: toNumber(windowCenter),\n windowWidth: toNumber(windowWidth),\n voiLUTFunction: VOILUTFunction,\n };\n\n break;\n case WADO_IMAGE_LOADER_TAGS.MODALITY_LUT_MODULE:\n const { RescaleIntercept, RescaleSlope } = instance;\n if (RescaleIntercept === undefined || RescaleSlope === undefined) {\n return;\n }\n\n metadata = {\n rescaleIntercept: toNumber(instance.RescaleIntercept),\n rescaleSlope: toNumber(instance.RescaleSlope),\n rescaleType: instance.RescaleType,\n };\n break;\n case WADO_IMAGE_LOADER_TAGS.SOP_COMMON_MODULE:\n metadata = {\n sopClassUID: instance.SOPClassUID,\n sopInstanceUID: instance.SOPInstanceUID,\n };\n break;\n case WADO_IMAGE_LOADER_TAGS.PET_ISOTOPE_MODULE:\n const { RadiopharmaceuticalInformationSequence } = instance;\n\n if (RadiopharmaceuticalInformationSequence) {\n const RadiopharmaceuticalInformation = Array.isArray(\n RadiopharmaceuticalInformationSequence\n )\n ? RadiopharmaceuticalInformationSequence[0]\n : RadiopharmaceuticalInformationSequence;\n\n const {\n RadiopharmaceuticalStartTime,\n RadionuclideTotalDose,\n RadionuclideHalfLife,\n } = RadiopharmaceuticalInformation;\n\n const radiopharmaceuticalInfo = {\n radiopharmaceuticalStartTime: dicomParser.parseTM(\n RadiopharmaceuticalStartTime\n ),\n radionuclideTotalDose: RadionuclideTotalDose,\n radionuclideHalfLife: RadionuclideHalfLife,\n };\n metadata = {\n radiopharmaceuticalInfo,\n };\n }\n\n break;\n case WADO_IMAGE_LOADER_TAGS.OVERLAY_PLANE_MODULE:\n const overlays = [];\n\n for (\n let overlayGroup = 0x00;\n overlayGroup <= 0x1e;\n overlayGroup += 0x02\n ) {\n let groupStr = `60${overlayGroup.toString(16)}`;\n\n if (groupStr.length === 3) {\n groupStr = `600${overlayGroup.toString(16)}`;\n }\n\n const OverlayDataTag = `${groupStr}3000`;\n const OverlayData = instance[OverlayDataTag];\n\n if (!OverlayData) {\n continue;\n }\n\n const OverlayRowsTag = `${groupStr}0010`;\n const OverlayColumnsTag = `${groupStr}0011`;\n const OverlayType = `${groupStr}0040`;\n const OverlayOriginTag = `${groupStr}0050`;\n const OverlayDescriptionTag = `${groupStr}0022`;\n const OverlayLabelTag = `${groupStr}1500`;\n const ROIAreaTag = `${groupStr}1301`;\n const ROIMeanTag = `${groupStr}1302`;\n const ROIStandardDeviationTag = `${groupStr}1303`;\n const OverlayOrigin = instance[OverlayOriginTag];\n\n const overlay = {\n rows: instance[OverlayRowsTag],\n columns: instance[OverlayColumnsTag],\n type: instance[OverlayType],\n x: OverlayOrigin[0],\n y: OverlayOrigin[1],\n pixelData: OverlayData,\n description: instance[OverlayDescriptionTag],\n label: instance[OverlayLabelTag],\n roiArea: instance[ROIAreaTag],\n roiMean: instance[ROIMeanTag],\n roiStandardDeviation: instance[ROIStandardDeviationTag],\n };\n\n overlays.push(overlay);\n }\n\n metadata = {\n overlays,\n };\n\n break;\n\n case WADO_IMAGE_LOADER_TAGS.PATIENT_MODULE:\n const { PatientName } = instance;\n\n let patientName;\n if (PatientName) {\n patientName = PatientName.Alphabetic;\n }\n\n metadata = {\n patientName,\n patientId: instance.PatientID,\n };\n\n break;\n\n case WADO_IMAGE_LOADER_TAGS.GENERAL_IMAGE_MODULE:\n metadata = {\n sopInstanceUid: instance.SOPInstanceUID,\n instanceNumber: toNumber(instance.InstanceNumber),\n lossyImageCompression: instance.LossyImageCompression,\n lossyImageCompressionRatio: instance.LossyImageCompressionRatio,\n lossyImageCompressionMethod: instance.LossyImageCompressionMethod,\n };\n\n break;\n case WADO_IMAGE_LOADER_TAGS.GENERAL_STUDY_MODULE:\n metadata = {\n studyDescription: instance.StudyDescription,\n studyDate: instance.StudyDate,\n studyTime: instance.StudyTime,\n accessionNumber: instance.AccessionNumber,\n };\n\n break;\n case WADO_IMAGE_LOADER_TAGS.CINE_MODULE:\n metadata = {\n frameTime: instance.FrameTime,\n };\n\n break;\n default:\n return;\n }\n\n return metadata;\n }\n\n getUIDsFromImageID(imageId) {\n // TODO: adding csiv here is not really correct. Probably need to use\n // metadataProvider.addImageIdToUIDs(imageId, {\n // StudyInstanceUID,\n // SeriesInstanceUID,\n // SOPInstanceUID,\n // })\n // somewhere else\n if (\n imageId.startsWith('wadors:') ||\n imageId.startsWith('streaming-wadors:')\n ) {\n const strippedImageId = imageId.split('/studies/')[1];\n const splitImageId = strippedImageId.split('/');\n\n return {\n StudyInstanceUID: splitImageId[0], // Note: splitImageId[1] === 'series'\n SeriesInstanceUID: splitImageId[2], // Note: splitImageId[3] === 'instances'\n SOPInstanceUID: splitImageId[4],\n frameNumber: splitImageId[6],\n };\n } else if (imageId.includes('?requestType=WADO')) {\n const qs = queryString.parse(imageId);\n\n return {\n StudyInstanceUID: qs.studyUID,\n SeriesInstanceUID: qs.seriesUID,\n SOPInstanceUID: qs.objectUID,\n frameNumber: qs.frameNumber,\n };\n }\n\n // Maybe its a non-standard imageId\n // check if the imageId starts with http:// or https:// using regex\n // Todo: handle non http imageIds\n let imageURI;\n const urlRegex = /^(http|https):\\/\\//;\n if (urlRegex.test(imageId)) {\n imageURI = imageId;\n } else {\n imageURI = imageIdToURI(imageId);\n }\n\n const uids = this.imageURIToUIDs.get(imageURI);\n const frameNumber = imageId.split(/\\/frames\\//)[1];\n\n if (uids && frameNumber !== undefined) {\n return { ...uids, frameNumber };\n }\n return uids;\n }\n}\n\nconst metadataProvider = new MetadataProvider();\n\nexport default metadataProvider;\n\nconst WADO_IMAGE_LOADER_TAGS = {\n // CornerstoneWADOImageLoader specific\n GENERAL_SERIES_MODULE: 'generalSeriesModule',\n PATIENT_STUDY_MODULE: 'patientStudyModule',\n IMAGE_PLANE_MODULE: 'imagePlaneModule',\n IMAGE_PIXEL_MODULE: 'imagePixelModule',\n VOI_LUT_MODULE: 'voiLutModule',\n MODALITY_LUT_MODULE: 'modalityLutModule',\n SOP_COMMON_MODULE: 'sopCommonModule',\n PET_ISOTOPE_MODULE: 'petIsotopeModule',\n OVERLAY_PLANE_MODULE: 'overlayPlaneModule',\n PATIENT_DEMOGRAPHIC_MODULE: 'patientDemographicModule',\n\n // react-cornerstone-viewport specifc\n PATIENT_MODULE: 'patientModule',\n GENERAL_IMAGE_MODULE: 'generalImageModule',\n GENERAL_STUDY_MODULE: 'generalStudyModule',\n CINE_MODULE: 'cineModule',\n};\n\nconst INSTANCE = 'instance';\n","import log from '../../log';\n\nexport default function getPixelSpacingInformation(instance) {\n // See http://gdcm.sourceforge.net/wiki/index.php/Imager_Pixel_Spacing\n\n // TODO: Add manual calibration\n\n // TODO: Use ENUMS from dcmjs\n const projectionRadiographSOPClassUIDs = [\n '1.2.840.10008.5.1.4.1.1.1', //\tCR Image Storage\n '1.2.840.10008.5.1.4.1.1.1.1', //\tDigital X-Ray Image Storage – for Presentation\n '1.2.840.10008.5.1.4.1.1.1.1.1', //\tDigital X-Ray Image Storage – for Processing\n '1.2.840.10008.5.1.4.1.1.1.2', //\tDigital Mammography X-Ray Image Storage – for Presentation\n '1.2.840.10008.5.1.4.1.1.1.2.1', //\tDigital Mammography X-Ray Image Storage – for Processing\n '1.2.840.10008.5.1.4.1.1.1.3', //\tDigital Intra – oral X-Ray Image Storage – for Presentation\n '1.2.840.10008.5.1.4.1.1.1.3.1', //\tDigital Intra – oral X-Ray Image Storage – for Processing\n '1.2.840.10008.5.1.4.1.1.12.1', //\tX-Ray Angiographic Image Storage\n '1.2.840.10008.5.1.4.1.1.12.1.1', //\tEnhanced XA Image Storage\n '1.2.840.10008.5.1.4.1.1.12.2', //\tX-Ray Radiofluoroscopic Image Storage\n '1.2.840.10008.5.1.4.1.1.12.2.1', //\tEnhanced XRF Image Storage\n '1.2.840.10008.5.1.4.1.1.12.3', // X-Ray Angiographic Bi-plane Image Storage\tRetired\n ];\n\n const {\n PixelSpacing,\n ImagerPixelSpacing,\n SOPClassUID,\n PixelSpacingCalibrationType,\n PixelSpacingCalibrationDescription,\n EstimatedRadiographicMagnificationFactor,\n SequenceOfUltrasoundRegions,\n } = instance;\n const isProjection = projectionRadiographSOPClassUIDs.includes(SOPClassUID);\n\n const TYPES = {\n NOT_APPLICABLE: 'NOT_APPLICABLE',\n UNKNOWN: 'UNKNOWN',\n CALIBRATED: 'CALIBRATED',\n DETECTOR: 'DETECTOR',\n };\n\n if (isProjection && !ImagerPixelSpacing) {\n // If only Pixel Spacing is present, and this is a projection radiograph,\n // PixelSpacing should be used, but the user should be informed that\n // what it means is unknown\n return {\n PixelSpacing,\n type: TYPES.UNKNOWN,\n isProjection,\n };\n } else if (\n PixelSpacing &&\n ImagerPixelSpacing &&\n PixelSpacing === ImagerPixelSpacing\n ) {\n // If Imager Pixel Spacing and Pixel Spacing are present and they have the same values,\n // then the user should be informed that the measurements are at the detector plane\n return {\n PixelSpacing,\n type: TYPES.DETECTOR,\n isProjection,\n };\n } else if (\n PixelSpacing &&\n ImagerPixelSpacing &&\n PixelSpacing !== ImagerPixelSpacing\n ) {\n // If Imager Pixel Spacing and Pixel Spacing are present and they have different values,\n // then the user should be informed that these are \"calibrated\"\n // (in some unknown manner if Pixel Spacing Calibration Type and/or\n // Pixel Spacing Calibration Description are absent)\n return {\n PixelSpacing,\n type: TYPES.CALIBRATED,\n isProjection,\n PixelSpacingCalibrationType,\n PixelSpacingCalibrationDescription,\n };\n } else if (!PixelSpacing && ImagerPixelSpacing) {\n let CorrectedImagerPixelSpacing = ImagerPixelSpacing;\n if (EstimatedRadiographicMagnificationFactor) {\n // Note that in IHE Mammo profile compliant displays, the value of Imager Pixel Spacing is required to be corrected by\n // Estimated Radiographic Magnification Factor and the user informed of that.\n // TODO: should this correction be done before all of this logic?\n CorrectedImagerPixelSpacing = ImagerPixelSpacing.map(\n pixelSpacing => pixelSpacing / EstimatedRadiographicMagnificationFactor\n );\n } else {\n log.info(\n 'EstimatedRadiographicMagnificationFactor was not present. Unable to correct ImagerPixelSpacing.'\n );\n }\n\n return {\n PixelSpacing: CorrectedImagerPixelSpacing,\n isProjection,\n };\n } else if (\n SequenceOfUltrasoundRegions &&\n typeof SequenceOfUltrasoundRegions === 'object'\n ) {\n const { PhysicalDeltaX, PhysicalDeltaY } = SequenceOfUltrasoundRegions;\n const USPixelSpacing = [PhysicalDeltaX * 10, PhysicalDeltaY * 10];\n\n return {\n PixelSpacing: USPixelSpacing,\n };\n } else if (\n SequenceOfUltrasoundRegions &&\n Array.isArray(SequenceOfUltrasoundRegions) &&\n SequenceOfUltrasoundRegions.length > 1\n ) {\n log.warn(\n 'Sequence of Ultrasound Regions > one entry. This is not yet implemented, all measurements will be shown in pixels.'\n );\n } else if (isProjection === false && !ImagerPixelSpacing) {\n // If only Pixel Spacing is present, and this is not a projection radiograph,\n // we can stop here\n return {\n PixelSpacing,\n type: TYPES.NOT_APPLICABLE,\n isProjection,\n };\n }\n\n log.info(\n 'Unknown combination of PixelSpacing and ImagerPixelSpacing identified. Unable to determine spacing.'\n );\n}\n","import CommandsManager from './CommandsManager.js';\nimport HotkeysManager from './HotkeysManager.js';\nimport ImageSet from './ImageSet';\nimport MetadataProvider from './MetadataProvider';\n\nexport {\n MetadataProvider,\n CommandsManager,\n HotkeysManager,\n ImageSet,\n};\n\nconst classes = {\n MetadataProvider,\n CommandsManager,\n HotkeysManager,\n ImageSet,\n};\n\nexport default classes;\n","export default {\n 1: { description: 'Soft tissue', window: '400', level: '40' },\n 2: { description: 'Lung', window: '1500', level: '-600' },\n 3: { description: 'Liver', window: '150', level: '90' },\n 4: { description: 'Bone', window: '2500', level: '480' },\n 5: { description: 'Brain', window: '80', level: '40' },\n 6: { description: 'Trest', window: '1', level: '1' },\n 7: { description: 'Empty1', window: 'Empty1', level: 'Empty1' },\n 8: { description: 'Empty2', window: 'Empty2', level: 'Empty2' },\n 9: { description: 'Empty3', window: 'Empty3', level: 'Empty3' },\n 10: { description: 'Empty4', window: 'Empty4', level: 'Empty4' },\n};\n","import hotkeyBindings from './hotkeyBindings';\nimport windowLevelPresets from './windowLevelPresets';\nexport { hotkeyBindings, windowLevelPresets };\nexport default { hotkeyBindings, windowLevelPresets };\n","import windowLevelPresets from './windowLevelPresets';\n\n/*\n * Supported Keys: https://craig.is/killing/mice\n */\nconst bindings = [\n {\n commandName: 'setToolActive',\n commandOptions: { toolName: 'Zoom' },\n label: 'Zoom',\n keys: ['z'],\n isEditable: true,\n },\n {\n commandName: 'scaleUpViewport',\n label: 'Zoom In',\n keys: ['+'],\n isEditable: true,\n },\n {\n commandName: 'scaleDownViewport',\n label: 'Zoom Out',\n keys: ['-'],\n isEditable: true,\n },\n {\n commandName: 'fitViewportToWindow',\n label: 'Zoom to Fit',\n keys: ['='],\n isEditable: true,\n },\n {\n commandName: 'rotateViewportCW',\n label: 'Rotate Right',\n keys: ['r'],\n isEditable: true,\n },\n {\n commandName: 'rotateViewportCCW',\n label: 'Rotate Left',\n keys: ['l'],\n isEditable: true,\n },\n {\n commandName: 'flipViewportHorizontal',\n label: 'Flip Horizontally',\n keys: ['h'],\n isEditable: true,\n },\n {\n commandName: 'flipViewportVertical',\n label: 'Flip Vertically',\n keys: ['v'],\n isEditable: true,\n },\n {\n commandName: 'toggleCine',\n label: 'Cine',\n keys: ['c'],\n },\n {\n commandName: 'invertViewport',\n label: 'Invert',\n keys: ['i'],\n isEditable: true,\n },\n {\n commandName: 'incrementActiveViewport',\n label: 'Next Image Viewport',\n keys: ['right'],\n isEditable: true,\n },\n {\n commandName: 'decrementActiveViewport',\n label: 'Previous Image Viewport',\n keys: ['left'],\n isEditable: true,\n },\n // {\n // commandName: 'nextViewportDisplaySet',\n // label: 'Next Series',\n // keys: ['pageup'],\n // isEditable: true,\n // },\n // {\n // commandName: 'previousViewportDisplaySet',\n // label: 'Previous Series',\n // keys: ['pagedown'],\n // isEditable: true,\n // },\n {\n commandName: 'nextImage',\n label: 'Next Image',\n keys: ['down'],\n isEditable: true,\n },\n {\n commandName: 'previousImage',\n label: 'Previous Image',\n keys: ['up'],\n isEditable: true,\n },\n {\n commandName: 'firstImage',\n label: 'First Image',\n keys: ['home'],\n isEditable: true,\n },\n {\n commandName: 'lastImage',\n label: 'Last Image',\n keys: ['end'],\n isEditable: true,\n },\n {\n commandName: 'resetViewport',\n label: 'Reset',\n keys: ['space'],\n isEditable: true,\n },\n {\n commandName: 'cancelMeasurement',\n label: 'Cancel Cornerstone Measurement',\n keys: ['esc'],\n },\n {\n commandName: 'setWindowLevel',\n commandOptions: windowLevelPresets[1],\n label: 'W/L Preset 1',\n keys: ['1'],\n },\n {\n commandName: 'setWindowLevel',\n commandOptions: windowLevelPresets[2],\n label: 'W/L Preset 2',\n keys: ['2'],\n },\n {\n commandName: 'setWindowLevel',\n commandOptions: windowLevelPresets[3],\n label: 'W/L Preset 3',\n keys: ['3'],\n },\n {\n commandName: 'setWindowLevel',\n commandOptions: windowLevelPresets[4],\n label: 'W/L Preset 4',\n keys: ['4'],\n },\n {\n commandName: 'setWindowLevel',\n commandOptions: windowLevelPresets[5],\n label: 'W/L Preset 5',\n keys: ['5'],\n },\n {\n commandName: 'setWindowLevel',\n commandOptions: windowLevelPresets[6],\n label: 'W/L Preset 6',\n keys: ['6'],\n },\n {\n commandName: 'setWindowLevel',\n commandOptions: windowLevelPresets[7],\n label: 'W/L Preset 7',\n keys: ['7'],\n },\n {\n commandName: 'setWindowLevel',\n commandOptions: windowLevelPresets[8],\n label: 'W/L Preset 8',\n keys: ['8'],\n },\n {\n commandName: 'setWindowLevel',\n commandOptions: windowLevelPresets[9],\n label: 'W/L Preset 9',\n keys: ['9'],\n },\n];\n\nexport default bindings;\n","// These should be overridden by the implementation\nconst errorHandler = {\n getHTTPErrorHandler: () => null,\n};\n\nexport default errorHandler;\n","import MODULE_TYPES from './MODULE_TYPES.js';\nimport log from './../log.js';\n\nexport default class ExtensionManager {\n constructor({\n commandsManager,\n servicesManager,\n hotkeysManager,\n appConfig = {},\n }) {\n this.modules = {};\n this.registeredExtensionIds = [];\n this.moduleTypeNames = Object.values(MODULE_TYPES);\n //\n this._commandsManager = commandsManager;\n this._servicesManager = servicesManager;\n this._hotkeysManager = hotkeysManager;\n this._appConfig = appConfig;\n\n this.modulesMap = {};\n this.moduleTypeNames.forEach(moduleType => {\n this.modules[moduleType] = [];\n });\n this._extensionLifeCycleHooks = { onModeEnter: {}, onModeExit: {} };\n this.dataSourceMap = {};\n this.defaultDataSourceName = appConfig.defaultDataSourceName;\n this.activeDataSource = undefined;\n }\n\n setActiveDataSource(dataSourceName) {\n this.activeDataSource = dataSourceName;\n }\n\n onModeEnter() {\n const {\n registeredExtensionIds,\n _servicesManager,\n _commandsManager,\n _hotkeysManager,\n _extensionLifeCycleHooks,\n } = this;\n\n const {\n MeasurementService,\n ViewportGridService,\n } = _servicesManager.services;\n\n MeasurementService.clearMeasurements();\n ViewportGridService.reset();\n\n registeredExtensionIds.forEach(extensionId => {\n const onModeEnter = _extensionLifeCycleHooks.onModeEnter[extensionId];\n\n if (typeof onModeEnter === 'function') {\n onModeEnter({\n servicesManager: _servicesManager,\n commandsManager: _commandsManager,\n hotkeysManager: _hotkeysManager,\n });\n }\n });\n }\n\n onModeExit() {\n const {\n registeredExtensionIds,\n _servicesManager,\n _commandsManager,\n _extensionLifeCycleHooks,\n } = this;\n\n const {\n MeasurementService,\n ViewportGridService,\n } = _servicesManager.services;\n\n MeasurementService.clearMeasurements();\n ViewportGridService.reset();\n\n registeredExtensionIds.forEach(extensionId => {\n const onModeExit = _extensionLifeCycleHooks.onModeExit[extensionId];\n\n if (typeof onModeExit === 'function') {\n onModeExit({\n servicesManager: _servicesManager,\n commandsManager: _commandsManager,\n });\n }\n });\n }\n\n /**\n * An array of extensions, or an array of arrays that contains extension\n * configuration pairs.\n *\n * @param {Object[]} extensions - Array of extensions\n */\n registerExtensions = async (extensions, dataSources = []) => {\n // Todo: we ideally should be able to run registrations in parallel\n // but currently since some extensions need to be registered before\n // others, we need to run them sequentially. We need a postInit hook\n // to avoid this sequential async registration\n for (const extension of extensions) {\n const hasConfiguration = Array.isArray(extension);\n try {\n if (hasConfiguration) {\n const [ohifExtension, configuration] = extension;\n await this.registerExtension(\n ohifExtension,\n configuration,\n dataSources\n );\n } else {\n await this.registerExtension(extension, {}, dataSources);\n }\n } catch (error) {\n console.error(error);\n }\n }\n };\n\n /**\n *\n * TODO: Id Management: SopClassHandlers currently refer to viewport module by id; setting the extension id as viewport module id is a workaround for now\n * @param {Object} extension\n * @param {Object} configuration\n */\n registerExtension = async (\n extension,\n configuration = {},\n dataSources = []\n ) => {\n if (!extension) {\n throw new Error('Attempting to register a null/undefined extension.');\n }\n\n let extensionId = extension.id;\n\n if (!extensionId) {\n // Note: Mode framework cannot function without IDs.\n log.warn(extension);\n throw new Error(`Extension ID not set`);\n }\n\n if (this.registeredExtensionIds.includes(extensionId)) {\n log.warn(\n `Extension ID ${extensionId} has already been registered. Exiting before duplicating modules.`\n );\n return;\n }\n\n // preRegistrationHook\n if (extension.preRegistration) {\n await extension.preRegistration({\n servicesManager: this._servicesManager,\n commandsManager: this._commandsManager,\n hotkeysManager: this._hotkeysManager,\n extensionManager: this,\n appConfig: this._appConfig,\n configuration,\n });\n }\n\n if (extension.onModeEnter) {\n this._extensionLifeCycleHooks.onModeEnter[extensionId] =\n extension.onModeEnter;\n }\n\n if (extension.onModeExit) {\n this._extensionLifeCycleHooks.onModeExit[extensionId] =\n extension.onModeExit;\n }\n\n // Register Modules\n this.moduleTypeNames.forEach(moduleType => {\n const extensionModule = this._getExtensionModule(\n moduleType,\n extension,\n extensionId,\n configuration\n );\n\n if (extensionModule) {\n switch (moduleType) {\n case MODULE_TYPES.COMMANDS:\n this._initCommandsModule(extensionModule);\n break;\n case MODULE_TYPES.DATA_SOURCE:\n this._initDataSourcesModule(\n extensionModule,\n extensionId,\n dataSources\n );\n break;\n case MODULE_TYPES.HANGING_PROTOCOL:\n this._initHangingProtocolsModule(extensionModule, extensionId);\n case MODULE_TYPES.TOOLBAR:\n case MODULE_TYPES.VIEWPORT:\n case MODULE_TYPES.PANEL:\n case MODULE_TYPES.SOP_CLASS_HANDLER:\n case MODULE_TYPES.CONTEXT:\n case MODULE_TYPES.LAYOUT_TEMPLATE:\n case MODULE_TYPES.UTILITY:\n // Default for most extension points,\n // Just adds each entry ready for consumption by mode.\n extensionModule.forEach(element => {\n this.modulesMap[\n `${extensionId}.${moduleType}.${element.name}`\n ] = element;\n });\n break;\n default:\n throw new Error(`Module type invalid: ${moduleType}`);\n }\n\n this.modules[moduleType].push({\n extensionId,\n module: extensionModule,\n });\n }\n });\n\n // Track extension registration\n this.registeredExtensionIds.push(extensionId);\n };\n\n getModuleEntry = stringEntry => {\n return this.modulesMap[stringEntry];\n };\n\n getDataSources = dataSourceName => {\n if (dataSourceName === undefined) {\n // Default to the activeDataSource\n dataSourceName = this.activeDataSource;\n }\n\n // Note: this currently uses the data source name, which feels weird...\n return this.dataSourceMap[dataSourceName];\n };\n\n getActiveDataSource = () => {\n return this.dataSourceMap[this.activeDataSource];\n };\n\n getDataSource = () => {\n return this.dataSourceMap[this.activeDataSource];\n };\n\n /**\n * @private\n * @param {string} moduleType\n * @param {Object} extension\n * @param {string} extensionId - Used for logging warnings\n */\n _getExtensionModule = (moduleType, extension, extensionId, configuration) => {\n const getModuleFnName = 'get' + _capitalizeFirstCharacter(moduleType);\n const getModuleFn = extension[getModuleFnName];\n\n if (!getModuleFn) {\n return;\n }\n\n try {\n const extensionModule = getModuleFn({\n appConfig: this._appConfig,\n commandsManager: this._commandsManager,\n servicesManager: this._servicesManager,\n hotkeysManager: this._hotkeysManager,\n extensionManager: this,\n configuration,\n });\n\n if (!extensionModule) {\n log.warn(\n `Null or undefined returned when registering the ${getModuleFnName} module for the ${extensionId} extension`\n );\n }\n\n return extensionModule;\n } catch (ex) {\n throw new Error(\n `Exception thrown while trying to call ${getModuleFnName} for the ${extensionId} extension`\n );\n }\n };\n\n _initHangingProtocolsModule = (extensionModule, extensionId) => {\n const { HangingProtocolService } = this._servicesManager.services;\n extensionModule.forEach(({ id, protocol }) => {\n if (protocol) {\n // Only auto-register if protocol specified, otherwise let mode register\n HangingProtocolService.addProtocol(id, protocol);\n }\n });\n };\n\n _initDataSourcesModule(extensionModule, extensionId, dataSources = []) {\n const { UserAuthenticationService } = this._servicesManager.services;\n\n extensionModule.forEach(element => {\n const namespace = `${extensionId}.${MODULE_TYPES.DATA_SOURCE}.${element.name}`;\n\n dataSources.forEach(dataSource => {\n if (dataSource.namespace === namespace) {\n const dataSourceInstance = element.createDataSource(\n dataSource.configuration,\n UserAuthenticationService\n );\n\n if (this.dataSourceMap[dataSource.sourceName]) {\n this.dataSourceMap[dataSource.sourceName].push(dataSourceInstance);\n } else {\n this.dataSourceMap[dataSource.sourceName] = [dataSourceInstance];\n }\n }\n });\n });\n\n extensionModule.forEach(element => {\n this.modulesMap[\n `${extensionId}.${MODULE_TYPES.DATA_SOURCE}.${element.name}`\n ] = element;\n });\n }\n\n /**\n *\n * @private\n * @param {Object[]} commandDefinitions\n */\n _initCommandsModule = extensionModule => {\n let { definitions, defaultContext } = extensionModule;\n if (!definitions || Object.keys(definitions).length === 0) {\n log.warn('Commands Module contains no command definitions');\n return;\n }\n\n defaultContext = defaultContext || 'VIEWER';\n\n if (!this._commandsManager.getContext(defaultContext)) {\n this._commandsManager.createContext(defaultContext);\n }\n\n Object.keys(definitions).forEach(commandName => {\n const commandDefinition = definitions[commandName];\n const commandHasContextThatDoesNotExist =\n commandDefinition.context &&\n !this._commandsManager.getContext(commandDefinition.context);\n\n if (commandHasContextThatDoesNotExist) {\n this._commandsManager.createContext(commandDefinition.context);\n }\n\n this._commandsManager.registerCommand(\n commandDefinition.context || defaultContext,\n commandName,\n commandDefinition\n );\n });\n };\n}\n\n/**\n * @private\n * @param {string} lower\n */\nfunction _capitalizeFirstCharacter(lower) {\n return lower.charAt(0).toUpperCase() + lower.substring(1);\n}\n","export default {\n COMMANDS: 'commandsModule',\n DATA_SOURCE: 'dataSourcesModule',\n PANEL: 'panelModule',\n SOP_CLASS_HANDLER: 'sopClassHandlerModule',\n TOOLBAR: 'toolbarModule',\n VIEWPORT: 'viewportModule',\n CONTEXT: 'contextModule',\n LAYOUT_TEMPLATE: 'layoutTemplateModule',\n HANGING_PROTOCOL: 'hangingProtocolModule',\n UTILITY: 'utilityModule',\n};\n","// Transforms a shallow object with keys separated by \".\" into a nested object\nfunction getNestedObject(shallowObject) {\n const nestedObject = {};\n for (let key in shallowObject) {\n if (!shallowObject.hasOwnProperty(key)) continue;\n const value = shallowObject[key];\n const propertyArray = key.split('.');\n let currentObject = nestedObject;\n while (propertyArray.length) {\n const currentProperty = propertyArray.shift();\n if (!propertyArray.length) {\n currentObject[currentProperty] = value;\n } else {\n if (!currentObject[currentProperty]) {\n currentObject[currentProperty] = {};\n }\n\n currentObject = currentObject[currentProperty];\n }\n }\n }\n\n return nestedObject;\n}\n\n// Transforms a nested object into a shallowObject merging its keys with \".\" character\nfunction getShallowObject(nestedObject) {\n const shallowObject = {};\n const putValues = (baseKey, nestedObject, resultObject) => {\n for (let key in nestedObject) {\n if (!nestedObject.hasOwnProperty(key)) continue;\n let currentKey = baseKey ? `${baseKey}.${key}` : key;\n const currentValue = nestedObject[key];\n if (typeof currentValue === 'object') {\n if (currentValue instanceof Array) {\n currentKey += '[]';\n }\n\n putValues(currentKey, currentValue, resultObject);\n } else {\n resultObject[currentKey] = currentValue;\n }\n }\n };\n\n putValues('', nestedObject, shallowObject);\n return shallowObject;\n}\n\nconst object = {\n getNestedObject,\n getShallowObject,\n};\n\nexport default object;\n","function isObject(subject) {\n return (\n subject instanceof Object ||\n (typeof subject === 'object' && subject !== null)\n );\n}\n\nfunction isString(subject) {\n return typeof subject === 'string';\n}\n\n// Search for some string inside any object or array\nfunction search(object, query, property = null, result = []) {\n // Create the search pattern\n const pattern = new RegExp(query.trim(), 'i');\n\n Object.keys(object).forEach(key => {\n const item = object[key];\n\n // Stop here if item is empty\n if (!item) {\n return;\n }\n\n // Get the value to be compared\n const value = isString(property) ? item[property] : item;\n\n // Check if the value match the pattern\n if (isString(value) && pattern.test(value)) {\n // Add the current item to the result\n result.push(item);\n }\n\n if (isObject(item)) {\n // Search recursively the item if the current item is an object\n search(item, query, property, result);\n }\n });\n\n // Return the found items\n return result;\n}\n\n// Encode any string into a safe format for HTML id attribute\nfunction encodeId(input) {\n const string = input && input.toString ? input.toString() : input;\n\n // Return an underscore if the given string is empty or if it's not a string\n if (string === '' || typeof string !== 'string') {\n return '_';\n }\n\n // Create a converter to replace non accepted chars\n const converter = match => '_' + match[0].charCodeAt(0).toString(16) + '_';\n\n // Encode the given string and return it\n return string.replace(/[^a-zA-Z0-9-]/g, converter);\n}\n\nconst string = {\n search,\n encodeId,\n};\n\nexport default string;\n","// These should be overridden by the implementation\nlet user = {\n userLoggedIn: () => false,\n getUserId: () => null,\n getName: () => null,\n getAccessToken: () => null,\n login: () => new Promise((resolve, reject) => reject()),\n logout: () => new Promise((resolve, reject) => reject()),\n getData: key => null,\n setData: (key, value) => null,\n};\n\nexport default user;\n","import { ExtensionManager, MODULE_TYPES } from './extensions';\nimport { ServicesManager } from './services';\nimport classes, { CommandsManager, HotkeysManager } from './classes';\n\nimport DICOMWeb from './DICOMWeb';\nimport errorHandler from './errorHandler.js';\nimport log from './log.js';\nimport object from './object.js';\nimport string from './string.js';\nimport user from './user.js';\nimport utils from './utils';\nimport defaults from './defaults';\nimport * as Types from './types';\n\nimport {\n CineService,\n UIDialogService,\n UIModalService,\n UINotificationService,\n UIViewportDialogService,\n //\n DicomMetadataStore,\n DisplaySetService,\n ToolBarService,\n MeasurementService,\n ViewportGridService,\n HangingProtocolService,\n pubSubServiceInterface,\n UserAuthenticationService,\n} from './services';\n\nimport IWebApiDataSource from './DataSources/IWebApiDataSource';\n\nconst hotkeys = {\n ...utils.hotkeys,\n defaults: { hotkeyBindings: defaults.hotkeyBindings },\n};\n\nconst OHIF = {\n MODULE_TYPES,\n //\n CommandsManager,\n ExtensionManager,\n HotkeysManager,\n ServicesManager,\n //\n defaults,\n utils,\n hotkeys,\n classes,\n string,\n user,\n errorHandler,\n object,\n log,\n DICOMWeb,\n viewer: {},\n //\n CineService,\n UIDialogService,\n UIModalService,\n UINotificationService,\n UIViewportDialogService,\n DisplaySetService,\n MeasurementService,\n ToolBarService, // TODO: TYPO\n ViewportGridService,\n HangingProtocolService,\n UserAuthenticationService,\n IWebApiDataSource,\n DicomMetadataStore,\n pubSubServiceInterface,\n};\n\nexport {\n MODULE_TYPES,\n //\n CommandsManager,\n ExtensionManager,\n HotkeysManager,\n ServicesManager,\n //\n defaults,\n utils,\n hotkeys,\n classes,\n string,\n user,\n errorHandler,\n object,\n log,\n DICOMWeb,\n //\n CineService,\n UIDialogService,\n UIModalService,\n UINotificationService,\n UIViewportDialogService,\n DisplaySetService,\n MeasurementService,\n ToolBarService,\n ViewportGridService,\n HangingProtocolService,\n UserAuthenticationService,\n IWebApiDataSource,\n DicomMetadataStore,\n pubSubServiceInterface,\n Types,\n};\n\nexport { OHIF };\n\nexport default OHIF;\n","const log = {\n error: console.error,\n warn: console.warn,\n info: console.log,\n trace: console.trace,\n debug: console.debug,\n time: console.time,\n timeEnd: console.timeEnd,\n};\n\nexport default log;\n","const name = 'CineService';\n\nconst publicAPI = {\n name,\n getState: _getState,\n setCine: _setCine,\n setIsCineEnabled: _setIsCineEnabled,\n playClip: _playClip,\n stopClip: _stopClip,\n setServiceImplementation,\n};\n\nconst serviceImplementation = {\n _getState: () => console.warn('getState() NOT IMPLEMENTED'),\n _setCine: () => console.warn('setCine() NOT IMPLEMENTED'),\n _playClip: () => console.warn('playClip() NOT IMPLEMENTED'),\n _stopClip: () => console.warn('stopClip() NOT IMPLEMENTED'),\n _setIsCineEnabled: () => console.warn('setIsCineEnabled() NOT IMPLEMENTED'),\n};\n\nfunction _getState() {\n return serviceImplementation._getState();\n}\n\nfunction _setCine({ id, frameRate, isPlaying }) {\n return serviceImplementation._setCine({ id, frameRate, isPlaying });\n}\n\nfunction _setIsCineEnabled(isCineEnabled) {\n return serviceImplementation._setIsCineEnabled(isCineEnabled);\n}\n\nfunction _playClip(element, playClipOptions) {\n return serviceImplementation._playClip(element, playClipOptions);\n}\n\nfunction _stopClip(element) {\n return serviceImplementation._stopClip(element);\n}\n\nfunction setServiceImplementation({\n getState: getStateImplementation,\n setCine: setCineImplementation,\n setIsCineEnabled: setIsCineEnabledImplementation,\n playClip: playClipImplementation,\n stopClip: stopClipImplementation,\n}) {\n if (getStateImplementation) {\n serviceImplementation._getState = getStateImplementation;\n }\n if (setCineImplementation) {\n serviceImplementation._setCine = setCineImplementation;\n }\n if (setIsCineEnabledImplementation) {\n serviceImplementation._setIsCineEnabled = setIsCineEnabledImplementation;\n }\n\n if (playClipImplementation) {\n serviceImplementation._playClip = playClipImplementation;\n }\n\n if (stopClipImplementation) {\n serviceImplementation._stopClip = stopClipImplementation;\n }\n}\n\nexport default {\n name,\n create: ({ configuration = {} }) => {\n return publicAPI;\n },\n};\n","import CineService from './CineService';\nexport default CineService;\n","function createSeriesMetadata(instances) {\n const { SeriesInstanceUID } = instances[0];\n\n return {\n SeriesInstanceUID,\n instances,\n };\n}\n\nexport default createSeriesMetadata;\n","import createSeriesMetadata from './createSeriesMetadata';\n\nfunction createStudyMetadata(StudyInstanceUID) {\n return {\n StudyInstanceUID,\n StudyDescription: '',\n ModalitiesInStudy: [],\n isLoaded: false,\n series: [],\n /**\n *\n * @param {object} instance\n * @returns {bool} true if series were added; false if series already exist\n */\n addInstanceToSeries: function(instance) {\n const { SeriesInstanceUID } = instance;\n if (!this.StudyDescription) {\n this.StudyDescription = instance.StudyDescription;\n }\n const existingSeries = this.series.find(\n s => s.SeriesInstanceUID === SeriesInstanceUID\n );\n\n if (existingSeries) {\n existingSeries.instances.push(instance);\n } else {\n const series = createSeriesMetadata([instance]);\n this.series.push(series);\n const { Modality } = series;\n if (this.ModalitiesInStudy.indexof(Modality) === -1) {\n this.ModalitiesInStudy.push(Modality);\n }\n }\n },\n /**\n *\n * @param {object[]} instances\n * @param {string} instances[].SeriesInstanceUID\n * @param {string} instances[].StudyDescription\n * @returns {bool} true if series were added; false if series already exist\n */\n addInstancesToSeries: function(instances) {\n const { SeriesInstanceUID } = instances[0];\n if (!this.StudyDescription) {\n this.StudyDescription = instances[0].StudyDescription;\n }\n const existingSeries = this.series.find(\n s => s.SeriesInstanceUID === SeriesInstanceUID\n );\n\n if (existingSeries) {\n existingSeries.instances.push(...instances);\n } else {\n const series = createSeriesMetadata(instances);\n this.series.push(series);\n }\n },\n\n setSeriesMetadata: function(SeriesInstanceUID, seriesMetadata) {\n let existingSeries = this.series.find(\n s => s.SeriesInstanceUID === SeriesInstanceUID\n );\n\n if (existingSeries) {\n existingSeries = Object.assign(existingSeries, seriesMetadata);\n } else {\n this.series.push(Object.assign({ instances: [] }, seriesMetadata));\n }\n },\n };\n}\n\nexport default createStudyMetadata;\n","import dcmjs from 'dcmjs';\n\nimport pubSubServiceInterface from '../_shared/pubSubServiceInterface';\nimport createStudyMetadata from './createStudyMetadata';\n\nconst EVENTS = {\n STUDY_ADDED: 'event::dicomMetadataStore:studyAdded',\n INSTANCES_ADDED: 'event::dicomMetadataStore:instancesAdded',\n SERIES_ADDED: 'event::dicomMetadataStore:seriesAdded',\n SERIES_UPDATED: 'event::dicomMetadataStore:seriesUpdated',\n};\n\n/**\n * @example\n * studies: [\n * {\n * StudyInstanceUID: string,\n * isLoaded: boolean,\n * series: [\n * {\n * Modality: string,\n * SeriesInstanceUID: string,\n * SeriesNumber: number,\n * SeriesDescription: string,\n * instances: [\n * {\n * // naturalized instance metadata\n * SOPInstanceUID: string,\n * SOPClassUID: string,\n * Rows: number,\n * Columns: number,\n * PatientSex: string,\n * Modality: string,\n * InstanceNumber: string,\n * },\n * {\n * // instance 2\n * },\n * ],\n * },\n * {\n * // series 2\n * },\n * ],\n * },\n * ],\n */\nconst _model = {\n studies: [],\n};\n\nfunction _getStudyInstanceUIDs() {\n return _model.studies.map(aStudy => aStudy.StudyInstanceUID);\n}\n\nfunction _getStudy(StudyInstanceUID) {\n return _model.studies.find(\n aStudy => aStudy.StudyInstanceUID === StudyInstanceUID\n );\n}\n\nfunction _getSeries(StudyInstanceUID, SeriesInstanceUID) {\n const study = _getStudy(StudyInstanceUID);\n\n if (!study) {\n return;\n }\n\n return study.series.find(\n aSeries => aSeries.SeriesInstanceUID === SeriesInstanceUID\n );\n}\n\nfunction _getInstance(StudyInstanceUID, SeriesInstanceUID, SOPInstanceUID) {\n const series = _getSeries(StudyInstanceUID, SeriesInstanceUID);\n\n if (!series) {\n return;\n }\n\n return series.instances.find(\n instance => instance.SOPInstanceUID === SOPInstanceUID\n );\n}\n\nfunction _getInstanceByImageId(imageId) {\n for (let study of _model.studies) {\n for (let series of study.series) {\n for (let instance of series.instances) {\n if (instance.imageId === imageId) {\n return instance;\n }\n }\n }\n }\n}\n\n/**\n * Update the metadata of a specific series\n * @param {*} StudyInstanceUID\n * @param {*} SeriesInstanceUID\n * @param {*} metadata metadata inform of key value pairs\n * @returns\n */\nfunction _updateMetadataForSeries(\n StudyInstanceUID,\n SeriesInstanceUID,\n metadata\n) {\n const study = _getStudy(StudyInstanceUID);\n\n if (!study) {\n return;\n }\n\n const series = study.series.find(\n aSeries => aSeries.SeriesInstanceUID === SeriesInstanceUID\n );\n\n const { instances } = series;\n // update all instances metadata for this series with the new metadata\n instances.forEach(instance => {\n Object.keys(metadata).forEach(key => {\n // if metadata[key] is an object, we need to merge it with the existing\n // metadata of the instance\n if (typeof metadata[key] === 'object') {\n instance[key] = { ...instance[key], ...metadata[key] };\n }\n // otherwise, we just replace the existing metadata with the new one\n else {\n instance[key] = metadata[key];\n }\n });\n });\n\n // broadcast the series updated event\n this._broadcastEvent(EVENTS.SERIES_UPDATED, {\n SeriesInstanceUID,\n StudyInstanceUID,\n madeInClient: true,\n });\n}\n\nconst BaseImplementation = {\n EVENTS,\n listeners: {},\n addInstance(dicomJSONDatasetOrP10ArrayBuffer) {\n let dicomJSONDataset;\n\n // If Arraybuffer, parse to DICOMJSON before naturalizing.\n if (dicomJSONDatasetOrP10ArrayBuffer instanceof ArrayBuffer) {\n const dicomData = dcmjs.data.DicomMessage.readFile(\n dicomJSONDatasetOrP10ArrayBuffer\n );\n\n dicomJSONDataset = dicomData.dict;\n } else {\n dicomJSONDataset = dicomJSONDatasetOrP10ArrayBuffer;\n }\n\n let naturalizedDataset;\n\n if (dicomJSONDataset['SeriesInstanceUID'] === undefined) {\n naturalizedDataset = dcmjs.data.DicomMetaDictionary.naturalizeDataset(\n dicomJSONDataset\n );\n } else {\n naturalizedDataset = dicomJSONDataset;\n }\n\n const { StudyInstanceUID } = naturalizedDataset;\n\n let study = _model.studies.find(\n study => study.StudyInstanceUID === StudyInstanceUID\n );\n\n if (!study) {\n _model.studies.push(createStudyMetadata(StudyInstanceUID));\n study = _model.studies[_model.studies.length - 1];\n }\n\n study.addInstanceToSeries(naturalizedDataset);\n },\n addInstances(instances, madeInClient = false) {\n const { StudyInstanceUID, SeriesInstanceUID } = instances[0];\n\n let study = _model.studies.find(\n study => study.StudyInstanceUID === StudyInstanceUID\n );\n\n if (!study) {\n _model.studies.push(createStudyMetadata(StudyInstanceUID));\n\n study = _model.studies[_model.studies.length - 1];\n }\n\n study.addInstancesToSeries(instances);\n\n // Broadcast an event even if we used cached data.\n // This is because the mode needs to listen to instances that are added to build up its active displaySets.\n // It will see there are cached displaySets and end early if this Series has already been fired in this\n // Mode session for some reason.\n this._broadcastEvent(EVENTS.INSTANCES_ADDED, {\n StudyInstanceUID,\n SeriesInstanceUID,\n madeInClient,\n });\n },\n addSeriesMetadata(seriesSummaryMetadata, madeInClient = false) {\n const { StudyInstanceUID } = seriesSummaryMetadata[0];\n let study = _getStudy(StudyInstanceUID);\n if (!study) {\n study = createStudyMetadata(StudyInstanceUID);\n // Will typically be undefined with a compliant DICOMweb server, reset later\n study.StudyDescription = seriesSummaryMetadata[0].StudyDescription;\n seriesSummaryMetadata.forEach(item => {\n if (study.ModalitiesInStudy.indexOf(item.Modality) === -1) {\n study.ModalitiesInStudy.push(item.Modality);\n }\n });\n study.NumberOfStudyRelatedSeries = seriesSummaryMetadata.length;\n _model.studies.push(study);\n }\n\n seriesSummaryMetadata.forEach(series => {\n const { SeriesInstanceUID } = series;\n\n study.setSeriesMetadata(SeriesInstanceUID, series);\n });\n\n this._broadcastEvent(EVENTS.SERIES_ADDED, {\n StudyInstanceUID,\n madeInClient,\n });\n },\n addStudy(study) {\n const { StudyInstanceUID } = study;\n\n let existingStudy = _model.studies.find(\n study => study.StudyInstanceUID === StudyInstanceUID\n );\n\n if (!existingStudy) {\n const newStudy = createStudyMetadata(StudyInstanceUID);\n\n newStudy.PatientID = study.PatientID;\n newStudy.PatientName = study.PatientName;\n newStudy.StudyDate = study.StudyDate;\n newStudy.ModalitiesInStudy = study.ModalitiesInStudy;\n newStudy.StudyDescription = study.StudyDescription;\n newStudy.AccessionNumber = study.AccessionNumber;\n newStudy.NumInstances = study.NumInstances; // todo: Correct naming?\n\n _model.studies.push(newStudy);\n }\n },\n getStudyInstanceUIDs: _getStudyInstanceUIDs,\n getStudy: _getStudy,\n getSeries: _getSeries,\n getInstance: _getInstance,\n getInstanceByImageId: _getInstanceByImageId,\n updateMetadataForSeries: _updateMetadataForSeries,\n};\nconst DicomMetadataStore = Object.assign(\n // get study\n\n // iterate over all series\n\n {},\n BaseImplementation,\n pubSubServiceInterface\n);\n\nexport { DicomMetadataStore };\nexport default DicomMetadataStore;\n","import DicomMetadataStore from './DicomMetadataStore';\n\nexport { DicomMetadataStore };\nexport default DicomMetadataStore;\n","const EVENTS = {\n DISPLAY_SETS_ADDED: 'event::displaySetService:displaySetsAdded',\n DISPLAY_SETS_CHANGED: 'event::displaySetService:displaySetsChanged',\n DISPLAY_SETS_REMOVED: 'event::displaySetService:displaySetsRemoved',\n DISPLAY_SET_SERIES_METADATA_INVALIDATED:\n 'event::displaySetService:displaySetSeriesMetadataInvalidated',\n};\n\nexport default EVENTS;\n","import pubSubServiceInterface from '../_shared/pubSubServiceInterface';\nimport EVENTS from './EVENTS';\n\nconst displaySetCache = [];\n\n/**\n * Find an instance in a list of instances, comparing by SOP instance UID\n */\nconst findInSet = (instance, list) => {\n if (!list) return false;\n for (const elem of list) {\n if (!elem) continue;\n if (elem === instance) return true;\n if (elem.SOPInstanceUID === instance.SOPInstanceUID) return true;\n }\n return false;\n};\n\n/**\n * Find an instance in a display set\n * @returns true if found\n */\nconst findInstance = (instance, displaySets) => {\n for (const displayset of displaySets) {\n if (findInSet(instance, displayset.images)) return true;\n if (findInSet(instance, displayset.others)) return true;\n }\n return false;\n};\n\nexport default class DisplaySetService {\n constructor() {\n this.activeDisplaySets = [];\n this.listeners = {};\n this.EVENTS = EVENTS;\n\n Object.assign(this, pubSubServiceInterface);\n }\n\n init(extensionManager, SOPClassHandlerIds) {\n this.extensionManager = extensionManager;\n this.SOPClassHandlerIds = SOPClassHandlerIds;\n this.activeDisplaySets = [];\n }\n\n _addDisplaySetsToCache(displaySets) {\n displaySets.forEach(displaySet => {\n displaySetCache.push(displaySet);\n });\n }\n\n _addActiveDisplaySets(displaySets) {\n const activeDisplaySets = this.activeDisplaySets;\n\n displaySets.forEach(displaySet => {\n activeDisplaySets.push(displaySet);\n });\n }\n\n getDisplaySetCache() {\n return displaySetCache;\n }\n\n getMostRecentDisplaySet() {\n return this.activeDisplaySets[this.activeDisplaySets.length - 1];\n }\n\n getActiveDisplaySets() {\n return this.activeDisplaySets;\n }\n\n getDisplaySetsForSeries = SeriesInstanceUID => {\n return displaySetCache.filter(\n displaySet => displaySet.SeriesInstanceUID === SeriesInstanceUID\n );\n };\n\n getDisplaySetForSOPInstanceUID(\n SOPInstanceUID,\n SeriesInstanceUID,\n frameNumber\n ) {\n const displaySets = SeriesInstanceUID\n ? this.getDisplaySetsForSeries(SeriesInstanceUID)\n : this.getDisplaySetCache();\n\n const displaySet = displaySets.find(ds => {\n return (\n ds.images && ds.images.some(i => i.SOPInstanceUID === SOPInstanceUID)\n );\n });\n\n return displaySet;\n }\n\n setDisplaySetMetadataInvalidated(displaySetInstanceUID) {\n const displaySet = this.getDisplaySetByUID(displaySetInstanceUID);\n\n if (!displaySet) {\n return;\n }\n\n // broadcast event to update listeners with the new displaySets\n this._broadcastEvent(\n EVENTS.DISPLAY_SET_SERIES_METADATA_INVALIDATED,\n displaySetInstanceUID\n );\n }\n\n deleteDisplaySet(displaySetInstanceUID) {\n const { activeDisplaySets } = this;\n\n const displaySetCacheIndex = displaySetCache.findIndex(\n ds => ds.displaySetInstanceUID === displaySetInstanceUID\n );\n\n const activeDisplaySetsIndex = activeDisplaySets.findIndex(\n ds => ds.displaySetInstanceUID === displaySetInstanceUID\n );\n\n displaySetCache.splice(displaySetCacheIndex, 1);\n activeDisplaySets.splice(activeDisplaySetsIndex, 1);\n\n this._broadcastEvent(EVENTS.DISPLAY_SETS_CHANGED, this.activeDisplaySets);\n this._broadcastEvent(EVENTS.DISPLAY_SETS_REMOVED, {\n displaySetInstanceUIDs: [displaySetInstanceUID],\n });\n }\n\n /**\n * @param {string} displaySetInstanceUID\n * @returns {object} displaySet\n */\n getDisplaySetByUID = displaySetInstanceUid =>\n displaySetCache.find(\n displaySet => displaySet.displaySetInstanceUID === displaySetInstanceUid\n );\n\n /**\n *\n * @param {*} input\n * @param {*} param1: settings: initialViewportSettings by HP or callbacks after rendering\n * @returns {string[]} - added displaySetInstanceUIDs\n */\n makeDisplaySets = (\n input,\n { batch = false, madeInClient = false, settings = {} } = {}\n ) => {\n if (!input || !input.length) {\n throw new Error('No instances were provided.');\n }\n\n if (batch && !input[0].length) {\n throw new Error(\n 'Batch displaySet creation does not contain array of array of instances.'\n );\n }\n\n // If array of instances => One instance.\n let displaySetsAdded = [];\n\n if (batch) {\n for (let i = 0; i < input.length; i++) {\n const instances = input[i];\n const displaySets = this.makeDisplaySetForInstances(\n instances,\n settings\n );\n\n displaySetsAdded = [...displaySetsAdded, displaySets];\n }\n } else {\n const displaySets = this.makeDisplaySetForInstances(input, settings);\n\n displaySetsAdded = displaySets;\n }\n\n const options = {};\n\n if (madeInClient) {\n options.madeInClient = true;\n }\n\n // TODO: This is tricky. How do we know we're not resetting to the same/existing DSs?\n // TODO: This is likely run anytime we touch DicomMetadataStore. How do we prevent unnecessary broadcasts?\n if (displaySetsAdded && displaySetsAdded.length) {\n this._broadcastEvent(EVENTS.DISPLAY_SETS_CHANGED, this.activeDisplaySets);\n this._broadcastEvent(EVENTS.DISPLAY_SETS_ADDED, {\n displaySetsAdded,\n options,\n });\n\n return displaySetsAdded;\n }\n };\n\n makeDisplaySetForInstances(instancesSrc, settings) {\n let instances = instancesSrc;\n const instance = instances[0];\n\n const existingDisplaySets =\n this.getDisplaySetsForSeries(instance.SeriesInstanceUID) || [];\n\n const SOPClassHandlerIds = this.SOPClassHandlerIds;\n let allDisplaySets;\n\n for (let i = 0; i < SOPClassHandlerIds.length; i++) {\n const SOPClassHandlerId = SOPClassHandlerIds[i];\n const handler = this.extensionManager.getModuleEntry(SOPClassHandlerId);\n\n if (handler.sopClassUids.includes(instance.SOPClassUID)) {\n // Check if displaySets are already created using this SeriesInstanceUID/SOPClassHandler pair.\n let displaySets = existingDisplaySets.filter(\n displaySet => displaySet.SOPClassHandlerId === SOPClassHandlerId\n );\n\n if (displaySets.length) {\n this._addActiveDisplaySets(displaySets);\n } else {\n displaySets = handler.getDisplaySetsFromSeries(instances);\n\n if (!displaySets || !displaySets.length) continue;\n\n // applying hp-defined viewport settings to the displaysets\n displaySets.forEach(ds => {\n Object.keys(settings).forEach(key => {\n ds[key] = settings[key];\n });\n });\n\n this._addDisplaySetsToCache(displaySets);\n this._addActiveDisplaySets(displaySets);\n\n instances = instances.filter(\n instance => !findInstance(instance, displaySets)\n );\n }\n\n allDisplaySets = allDisplaySets\n ? [...allDisplaySets, ...displaySets]\n : displaySets;\n\n if (!instances.length) return allDisplaySets;\n }\n }\n return allDisplaySets;\n }\n}\n","import DisplaySetService from './DisplaySetService';\n\nexport default {\n name: 'DisplaySetService',\n create: ({ configuration = {} }) => {\n return new DisplaySetService();\n },\n};\n","import validate from 'validate.js';\n\nvalidate.validators.equals = function(value, options, key, attributes) {\n const testValue = options?.value ?? options;\n if (value !== testValue) {\n return key + 'must equal ' + testValue;\n }\n};\n\nvalidate.validators.doesNotEqual = function(value, options, key) {\n const testValue = options?.value ?? options;\n if (value === testValue) {\n return key + 'cannot equal ' + testValue;\n }\n};\n\nvalidate.validators.contains = function(value, options, key) {\n const testValue = options?.value ?? options;\n if (Array.isArray(value)) {\n if (value.some(item => !validate.validators.contains(item, options, key))) {\n return undefined;\n }\n return `No item of ${value.join(',')} contains ${JSON.stringify(\n testValue\n )}`;\n }\n if (Array.isArray(testValue)) {\n if (\n testValue.some(\n subTest => !validate.validators.contains(value, subTest, key)\n )\n ) {\n return;\n }\n return `${key} must contain at least one of ${testValue.join(',')}`;\n }\n if (testValue && value.indexOf && value.indexOf(testValue) === -1) {\n return key + 'must contain ' + testValue;\n }\n};\n\nvalidate.validators.doesNotContain = function(value, options, key) {\n if (options && value.indexOf && value.indexOf(options.value) !== -1) {\n return key + 'cannot contain ' + options.value;\n }\n};\n\nvalidate.validators.startsWith = function(value, options, key) {\n if (options && value.startsWith && !value.startsWith(options.value)) {\n return key + 'must start with ' + options.value;\n }\n};\n\nvalidate.validators.endsWith = function(value, options, key) {\n if (options && value.endsWith && !value.endsWith(options.value)) {\n return key + 'must end with ' + options.value;\n }\n};\n\nvalidate.validators.greaterThan = function(value, options, key) {\n const testValue = options?.value ?? options;\n if (testValue !== undefined && value <= testValue) {\n return key + 'with value ' + value + ' must be greater than ' + testValue;\n }\n};\n\nvalidate.validators.range = function(value, options, key) {\n const testValue = options?.value ?? options;\n if (\n (testValue !== undefined && value < testValue[0]) ||\n value > testValue[1]\n ) {\n return (\n key +\n 'with value ' +\n value +\n ' must be between ' +\n testValue[0] +\n ' and ' +\n testValue[1]\n );\n }\n};\n\nvalidate.validators.notNull = value =>\n value === null || value === undefined ? 'Value is null' : undefined;\n\nexport default validate;\n","import validate from './lib/validator';\n\n/**\n * Match a Metadata instance against rules using Validate.js for validation.\n * @param {InstanceMetadata} metadataInstance Metadata instance object\n * @param {Array} rules Array of MatchingRules instances (StudyMatchingRule|SeriesMatchingRule|ImageMatchingRule) for the match\n * @param {object} options is an object containing additional information\n * @param {object[]} options.studies is a list of all the studies\n * @param {object[]} options.displaySets is a list of the display sets\n * @return {Object} Matching Object with score and details (which rule passed or failed)\n */\nconst match = (\n metadataInstance,\n rules = [],\n customAttributeRetrievalCallbacks,\n options\n) => {\n const validateOptions = {\n format: 'grouped',\n };\n\n const details = {\n passed: [],\n failed: [],\n };\n\n const readValues = {};\n\n let requiredFailed = false;\n let score = 0;\n\n rules.forEach(rule => {\n const { attribute } = rule;\n // Do not use the custom attribute from the metadataInstance since it is subject to change\n if (customAttributeRetrievalCallbacks.hasOwnProperty(attribute)) {\n readValues[attribute] = customAttributeRetrievalCallbacks[\n attribute\n ].callback(metadataInstance, options);\n } else {\n readValues[attribute] =\n metadataInstance[attribute] ??\n ((metadataInstance.images || metadataInstance.others || [])[0] || {})[\n attribute\n ];\n }\n\n console.log(\n 'Test',\n attribute,\n readValues[attribute],\n JSON.stringify(rule.constraint)\n );\n // Format the constraint as required by Validate.js\n const testConstraint = {\n [attribute]: rule.constraint,\n };\n\n // Create a single attribute object to be validated, since metadataInstance is an\n // instance of Metadata (StudyMetadata, SeriesMetadata or InstanceMetadata)\n let attributeValue = readValues[attribute];\n const attributeMap = {\n [attribute]: attributeValue,\n };\n\n // Use Validate.js to evaluate the constraints on the specified metadataInstance\n let errorMessages;\n try {\n errorMessages = validate(attributeMap, testConstraint, [validateOptions]);\n } catch (e) {\n errorMessages = ['Something went wrong during validation.', e];\n }\n\n if (!errorMessages) {\n // If no errorMessages were returned, then validation passed.\n\n // Add the rule's weight to the total score\n score += parseInt(rule.weight || 1, 10);\n // Log that this rule passed in the matching details object\n details.passed.push({\n rule,\n });\n } else {\n // If errorMessages were present, then validation failed\n\n // If the rule that failed validation was Required, then\n // mark that a required Rule has failed\n if (rule.required) {\n requiredFailed = true;\n }\n\n // Log that this rule failed in the matching details object\n // and include any error messages\n details.failed.push({\n rule,\n errorMessages,\n });\n }\n });\n\n // If a required Rule has failed Validation, set the matching score to zero\n if (requiredFailed) {\n score = 0;\n }\n\n return {\n score,\n details,\n requiredFailed,\n };\n};\n\nconst HPMatcher = {\n match,\n};\n\nexport { HPMatcher };\n","import { HPMatcher } from './HPMatcher.js';\nimport { sortByScore } from './lib/sortByScore';\n\nexport default class ProtocolEngine {\n constructor(protocols, customAttributeRetrievalCallbacks) {\n this.protocols = protocols;\n this.customAttributeRetrievalCallbacks = customAttributeRetrievalCallbacks;\n this.matchedProtocols = new Map();\n this.matchedProtocolScores = {};\n this.study = undefined;\n }\n\n /** Evaluate the hanging protocol matches on the given:\n * @param props.studies is a list of studies to compare against (for priors evaluation)\n * @param props.activeStudy is the current metadata for the study to display.\n * @param props.displaySets are the list of display sets which can be modified.\n */\n run({ studies, displaySets, activeStudy }) {\n this.studies = studies;\n this.study = activeStudy || studies[0];\n this.displaySets = displaySets;\n return this.getBestProtocolMatch();\n }\n\n // /**\n // * Resets the ProtocolEngine to the best match\n // */\n // reset() {\n // const protocol = this.getBestProtocolMatch();\n\n // this.setHangingProtocol(protocol);\n // }\n\n /**\n * Return the best matched Protocol to the current study or set of studies\n * @returns {*}\n */\n getBestProtocolMatch() {\n // Run the matching to populate matchedProtocols Set and Map\n this.updateProtocolMatches();\n\n // Retrieve the highest scoring Protocol\n const bestMatch = this._getHighestScoringProtocol();\n\n console.log('ProtocolEngine::getBestProtocolMatch bestMatch', bestMatch);\n\n return bestMatch;\n }\n\n /**\n * Populates the MatchedProtocols Collection by running the matching procedure\n */\n updateProtocolMatches() {\n console.log('ProtocolEngine::updateProtocolMatches');\n\n // Clear all data currently in matchedProtocols\n this._clearMatchedProtocols();\n\n // TODO: handle more than one study - this.studies has the list of studies\n const matched = this.findMatchByStudy(this.study, {\n studies: this.studies,\n displaySets: this.displaySets,\n });\n\n // For each matched protocol, check if it is already in MatchedProtocols\n matched.forEach(matchedDetail => {\n const protocol = matchedDetail.protocol;\n if (!protocol) {\n return;\n }\n\n // If it is not already in the MatchedProtocols Collection, insert it with its score\n if (!this.matchedProtocols.has(protocol.id)) {\n console.log(\n 'ProtocolEngine::updateProtocolMatches inserting protocol match',\n matchedDetail\n );\n this.matchedProtocols.set(protocol.id, protocol);\n this.matchedProtocolScores[protocol.id] = matchedDetail.score;\n }\n });\n }\n\n findMatch(metaData, rules, options) {\n return HPMatcher.match(\n metaData,\n rules,\n this.customAttributeRetrievalCallbacks,\n options\n );\n }\n\n /**\n * Finds the best protocols from Protocol Store, matching each protocol matching rules\n * with the given study. The best protocol are ordered by score and returned in an array\n * @param {Object} study StudyMetadata instance object\n * @param {object} options containing additional matching data.\n * @return {Array} Array of match objects or an empty array if no match was found\n * Each match object has the score of the matching and the matched\n * protocol\n */\n findMatchByStudy(study, options) {\n const matched = [];\n\n this.protocols.forEach(protocol => {\n // Clone the protocol's protocolMatchingRules array\n // We clone it so that we don't accidentally add the\n // numberOfPriorsReferenced rule to the Protocol itself.\n let rules = protocol.protocolMatchingRules.slice();\n if (!rules || !rules.length) {\n console.warn(\n 'ProtocolEngine::findMatchByStudy no matching rules - specify protocolMatchingRules',\n protocol.id\n );\n return;\n }\n\n // Run the matcher and get matching details\n const matchedDetails = this.findMatch(study, rules, options);\n const score = matchedDetails.score;\n\n // The protocol matched some rule, add it to the matched list\n if (score > 0) {\n matched.push({\n score,\n protocol,\n });\n }\n });\n\n // If no matches were found, select the default protocol if provided\n // if not select the first protocol in the list\n if (!matched.length) {\n const protocol =\n this.protocols.find(protocol => protocol.id === 'default') ??\n this.protocols[0];\n console.log('No protocol matches, defaulting to', protocol);\n return [\n {\n score: 0,\n protocol,\n },\n ];\n }\n\n // Sort the matched list by score\n sortByScore(matched);\n\n console.log('ProtocolEngine::findMatchByStudy matched', matched);\n\n return matched;\n }\n\n _clearMatchedProtocols() {\n this.matchedProtocols.clear();\n this.matchedProtocolScores = {};\n }\n\n _largestKeyByValue(obj) {\n return Object.keys(obj).reduce((a, b) => (obj[a] > obj[b] ? a : b));\n }\n\n _getHighestScoringProtocol() {\n if (!Object.keys(this.matchedProtocolScores).length) {\n return;\n }\n const highestScoringProtocolId = this._largestKeyByValue(\n this.matchedProtocolScores\n );\n return this.matchedProtocols.get(highestScoringProtocolId);\n }\n}\n","// Sorts an array by score\nconst sortByScore = arr => {\n arr.sort((a, b) => {\n return b.score - a.score;\n });\n};\n\nexport { sortByScore };\n","import uuidv4 from '../../utils/uuidv4';\nimport pubSubServiceInterface from '../_shared/pubSubServiceInterface';\nimport sortBy from '../../utils/sortBy';\nimport ProtocolEngine from './ProtocolEngine';\nimport StudyMetadata from '../../types/StudyMetadata';\nimport IDisplaySet from '../DisplaySetService/IDisplaySet';\nimport { HangingProtocol } from '../../types';\n\nconst EVENTS = {\n STAGE_CHANGE: 'event::hanging_protocol_stage_change',\n PROTOCOL_CHANGED: 'event::hanging_protocol_changed',\n NEW_LAYOUT: 'event::hanging_protocol_new_layout',\n CUSTOM_IMAGE_LOAD_PERFORMED:\n 'event::hanging_protocol_custom_image_load_performed',\n HANGING_PROTOCOL_APPLIED_FOR_VIEWPORT:\n 'event::hanging_protocol_applied_for_viewport',\n};\n\ntype Protocol = HangingProtocol.Protocol;\n\nclass HangingProtocolService {\n studies: StudyMetadata[];\n // stores all the protocols (object or function that returns an object) in a map\n protocols: Map;\n // Contains the list of currently active keys\n activeProtocolIds: string[];\n // the current protocol that is being applied to the viewports in object format\n protocol: HangingProtocol.Protocol;\n stage: number;\n _commandsManager: Record;\n _servicesManager: Record;\n protocolEngine: ProtocolEngine;\n customViewportSettings = [];\n displaySets: IDisplaySet[] = [];\n activeStudy: Record;\n debugLogging: false;\n EVENTS: { [key: string]: string };\n\n customAttributeRetrievalCallbacks = {\n NumberOfStudyRelatedSeries: {\n name: 'The number of series in the study',\n callback: metadata =>\n metadata.NumberOfStudyRelatedSeries ?? metadata.series?.length,\n },\n NumberOfSeriesRelatedInstances: {\n name: 'The number of instances in the display set',\n callback: metadata => metadata.numImageFrames,\n },\n ModalitiesInStudy: {\n name: 'Gets the array of the modalities for the series',\n callback: metadata =>\n metadata.ModalitiesInStudy ??\n (metadata.series || []).reduce((prev, curr) => {\n const { Modality } = curr;\n if (Modality && prev.indexOf(Modality) == -1) prev.push(Modality);\n return prev;\n }, []),\n },\n isReconstructable: {\n name: 'Checks if the display set is reconstructable',\n // we can add more advanced checking here\n callback: displaySet => displaySet.isReconstructable ?? false,\n },\n };\n listeners = {};\n registeredImageLoadStrategies = {};\n activeImageLoadStrategyName = null;\n customImageLoadPerformed = false;\n\n /**\n * Whether the hanging protocol is applied for the given viewport index,\n * applying means that the displayset(s) is set for the viewport to be shown\n */\n hpAlreadyApplied: Map = new Map();\n\n /**\n * displaySetMatchDetails = \n * DisplaySetId is the id defined in the hangingProtocol object itself\n * and match is an object that contains information about\n */\n displaySetMatchDetails: Map<\n string, // protocol displaySetId in the displayset selector\n HangingProtocol.DisplaySetMatchDetails\n > = new Map();\n\n /**\n * An array that contains for each viewport (viewportIndex) specified in the\n * hanging protocol, an object of the form\n */\n viewportMatchDetails: Map<\n number, // viewportIndex\n HangingProtocol.ViewportMatchDetails\n > = new Map();\n\n constructor(commandsManager, servicesManager) {\n this._commandsManager = commandsManager;\n this._servicesManager = servicesManager;\n this.protocols = new Map();\n this.protocolEngine = undefined;\n this.protocol = undefined;\n this.stage = undefined;\n\n this.studies = [];\n Object.defineProperty(this, 'EVENTS', {\n value: EVENTS,\n writable: false,\n enumerable: true,\n configurable: false,\n });\n Object.assign(this, pubSubServiceInterface);\n }\n\n public destroy() {\n this.reset();\n this.protocols = new Map();\n }\n\n public reset() {\n this.studies = [];\n this.hpAlreadyApplied = new Map();\n this.viewportMatchDetails = new Map();\n this.displaySetMatchDetails = new Map();\n }\n\n public getDefaultProtocol(): HangingProtocol.Protocol {\n return this.getProtocolById('default');\n }\n\n public getMatchDetails(): HangingProtocol.HangingProtocolMatchDetails {\n return {\n viewportMatchDetails: this.viewportMatchDetails,\n displaySetMatchDetails: this.displaySetMatchDetails,\n hpAlreadyApplied: this.hpAlreadyApplied,\n };\n }\n\n /**\n * It loops over the protocols map object, and checks whether the protocol\n * is a function, if so, it executes it and returns the result as a protocol object\n * otherwise it returns the protocol object itself\n *\n * @returns all the hanging protocol registered in the HangingProtocolService\n */\n public getProtocols(): HangingProtocol.Protocol[] {\n // this.protocols is a map of protocols with the protocol id as the key\n // and the protocol or a function that returns a protocol as the value\n const protocols = [];\n const keys = this.activeProtocolIds || this.protocols.keys();\n // @ts-ignore\n for (const protocolId of keys) {\n const protocol = this.getProtocolById(protocolId);\n if (protocol) {\n protocols.push(protocol);\n }\n }\n\n return protocols;\n }\n\n /**\n * Returns the protocol with the given id, it will get the protocol from the\n * protocols map object and if it is a function, it will execute it and return\n * the result as a protocol object\n *\n * @param protocolId - the id of the protocol\n * @returns protocol - the protocol with the given id\n */\n public getProtocolById(id: string): HangingProtocol.Protocol {\n const protocol = this.protocols.get(id);\n\n return protocol;\n }\n\n /**\n * It adds a protocol to the protocols map object. If a protocol with the given\n * id already exists, warn the user and overwrite it. This can be used to\n * set a new \"default\" protocol.\n *\n * @param {string} protocolId - The id of the protocol.\n * @param {Protocol} protocol - Protocol - This is the protocol that you want to\n * add to the protocol manager.\n */\n public addProtocol(protocolId: string, protocol: Protocol): void {\n if (this.protocols.has(protocolId)) {\n console.warn(\n `A protocol with id ${protocolId} already exists. It will be overwritten.`\n );\n }\n\n if (!(protocol instanceof Function)) {\n protocol = this._validateProtocol(protocol as HangingProtocol.Protocol);\n }\n\n this.protocols.set(protocolId, protocol);\n }\n\n /**\n * Add a given protocol object as active.\n * If active protocols ids is null right now, then the specified\n * protocol will become the only active protocol.\n */\n public addActiveProtocol(id: string): void {\n if (!id) {\n return;\n }\n if (!this.activeProtocolIds) {\n this.activeProtocolIds = [];\n }\n this.activeProtocolIds.push(id);\n }\n\n /**\n * Sets the active hanging protocols to use, by name. If the value is empty,\n * then resets the active protocols to all the named items.\n */\n public setActiveProtocols(hangingProtocol?: string[] | string): void {\n if (!hangingProtocol || !hangingProtocol.length) {\n this.activeProtocolIds = null;\n console.log('No active protocols, setting all to active');\n return;\n }\n if (typeof hangingProtocol === 'string') {\n this.setActiveProtocols([hangingProtocol]);\n return;\n }\n this.activeProtocolIds = [...hangingProtocol];\n }\n\n /**\n * Run the hanging protocol decisions tree on the active study,\n * studies list and display sets, firing a hanging protocol event when\n * complete to indicate the hanging protocol is ready.\n *\n * @param params is the dataset to run the hanging protocol on.\n * @param params.activeStudy is the \"primary\" study to hang This may or may\n * not be displayed by the actual viewports.\n * @param params.studies is the list of studies to hang\n * @param params.displaySets is the list of display sets associated with\n * the studies to display in viewports.\n * @param protocol is a specific protocol to apply.\n * @returns\n */\n public run({ studies, displaySets, activeStudy }, protocolId) {\n this.studies = [...studies];\n this.displaySets = displaySets;\n this.activeStudy = activeStudy || studies[0];\n\n this.protocolEngine = new ProtocolEngine(\n this.getProtocols(),\n this.customAttributeRetrievalCallbacks\n );\n\n if (protocolId && typeof protocolId === 'string') {\n const protocol = this.getProtocolById(protocolId);\n this._setProtocol(protocol);\n return;\n }\n\n const matchedProtocol = this.protocolEngine.run({\n studies: this.studies,\n activeStudy,\n displaySets,\n });\n this._setProtocol(matchedProtocol);\n }\n\n /**\n * Returns true, if the hangingProtocol has a custom loading strategy for the images\n * and its callback has been added to the HangingProtocolService\n * @returns {boolean} true\n */\n public hasCustomImageLoadStrategy(): boolean {\n return (\n this.activeImageLoadStrategyName !== null &&\n this.registeredImageLoadStrategies[\n this.activeImageLoadStrategyName\n ] instanceof Function\n );\n }\n\n public getCustomImageLoadPerformed(): boolean {\n return this.customImageLoadPerformed;\n }\n\n /**\n * Set the strategy callback for loading images to the HangingProtocolService\n * @param {string} name strategy name\n * @param {Function} callback image loader callback\n */\n public registerImageLoadStrategy(name, callback): void {\n if (callback instanceof Function && name) {\n this.registeredImageLoadStrategies[name] = callback;\n }\n }\n\n setHangingProtocolAppliedForViewport(i, status, suppressEvent = false) {\n this.hpAlreadyApplied.set(i, status);\n\n const numberOfViewports = this.viewportMatchDetails.size;\n const numberOfViewportsApplied = Array.from(\n this.hpAlreadyApplied.values()\n ).filter(applied => applied).length;\n\n const progress = Math.round(\n (numberOfViewportsApplied / numberOfViewports) * 100\n );\n\n this._broadcastChange(this.EVENTS.HANGING_PROTOCOL_APPLIED_FOR_VIEWPORT, {\n progress: progress,\n });\n }\n\n /**\n * Adds a custom attribute to be used in the HangingProtocol UI and matching rules, including a\n * callback that will be used to calculate the attribute value.\n *\n * @param attributeId The ID used to refer to the attribute (e.g. 'timepointType')\n * @param attributeName The name of the attribute to be displayed (e.g. 'Timepoint Type')\n * @param callback The function used to calculate the attribute value from the other attributes at its level (e.g. study/series/image)\n * @param options to add to the \"this\" object for the custom attribute retriever\n */\n public addCustomAttribute(\n attributeId: string,\n attributeName: string,\n callback: (metadata: any) => any,\n options: Record = {}\n ): void {\n this.customAttributeRetrievalCallbacks[attributeId] = {\n ...options,\n id: attributeId,\n name: attributeName,\n callback,\n };\n }\n\n /**\n * Switches to the next protocol stage in the display set sequence\n */\n public nextProtocolStage(): void {\n console.log('ProtocolEngine::nextProtocolStage');\n\n if (!this._setCurrentProtocolStage(1)) {\n console.log('ProtocolEngine::nextProtocolStage failed');\n }\n }\n\n /**\n * Switches to the previous protocol stage in the display set sequence\n */\n public previousProtocolStage(): void {\n console.log('ProtocolEngine::previousProtocolStage');\n\n if (!this._setCurrentProtocolStage(-1)) {\n console.log('ProtocolEngine::previousProtocolStage failed');\n }\n }\n\n /**\n * Executes the callback function for the custom loading strategy for the images\n * if no strategy is set, the default strategy is used\n */\n runImageLoadStrategy(data): void {\n const loader = this.registeredImageLoadStrategies[\n this.activeImageLoadStrategyName\n ];\n const loadedData = loader({\n data,\n displaySetsMatchDetails: this.displaySetMatchDetails,\n viewportMatchDetails: this.viewportMatchDetails,\n });\n\n // if loader successfully re-arranged the data with the custom strategy\n // and returned the new props, then broadcast them\n if (!loadedData) {\n return;\n }\n\n this.customImageLoadPerformed = true;\n this._broadcastChange(this.EVENTS.CUSTOM_IMAGE_LOAD_PERFORMED, loadedData);\n }\n\n _validateProtocol(\n protocol: HangingProtocol.Protocol\n ): HangingProtocol.Protocol {\n protocol.id = protocol.id || protocol.name;\n const defaultViewportOptions = {\n toolGroupId: 'default',\n viewportType: 'stack',\n };\n // Automatically compute some number of attributes if they\n // aren't present. Makes defining new HPs easier.\n protocol.name = protocol.name || protocol.id;\n const { stages } = protocol;\n\n // Generate viewports automatically as required.\n stages.forEach(stage => {\n if (!stage.viewports) {\n stage.viewports = [];\n const { rows, columns } = stage.viewportStructure.properties;\n\n for (let i = 0; i < rows * columns; i++) {\n stage.viewports.push({\n viewportOptions: defaultViewportOptions,\n displaySets: [],\n });\n }\n } else {\n stage.viewports.forEach(viewport => {\n viewport.viewportOptions =\n viewport.viewportOptions || defaultViewportOptions;\n if (!viewport.displaySets) {\n viewport.displaySets = [];\n } else {\n viewport.displaySets.forEach(displaySet => {\n displaySet.options = displaySet.options || {};\n });\n }\n });\n }\n });\n\n return protocol;\n }\n\n getViewportsRequireUpdate(viewportIndex, displaySetInstanceUID) {\n const newDisplaySetInstanceUID = displaySetInstanceUID;\n const protocol = this.protocol;\n const protocolStage = protocol.stages[this.stage];\n const protocolViewports = protocolStage.viewports;\n const protocolViewport = protocolViewports[viewportIndex];\n\n const defaultReturn = [\n {\n viewportIndex,\n displaySetInstanceUIDs: [newDisplaySetInstanceUID],\n },\n ];\n\n // if no viewport, then we can assume there is no predefined set of\n // rules that should be applied to this viewport while matching\n if (!protocolViewport) {\n return defaultReturn;\n }\n\n // no support for drag and drop into fusion viewports yet\n // Todo: smart drag and drop would look at the displaySets and\n // replace the same modality type, but later\n if (protocolViewport.displaySets.length > 1) {\n throw new Error('Cannot update viewport with multiple displaySets yet');\n }\n\n // If there is no displaySet, then we can assume that the viewport\n // is empty and we can just add the new displaySet to it\n if (protocolViewport.displaySets.length === 0) {\n return defaultReturn;\n }\n\n // if the viewport is not empty, then we check the displaySets it is showing\n // currently, which means we need to check if the requested updated displaySet\n // follow the same rules as the current displaySets\n const displaySetSelectorId = protocolViewport.displaySets[0].id;\n const displaySetSelector =\n protocol.displaySetSelectors[displaySetSelectorId];\n\n if (!displaySetSelector) {\n return defaultReturn;\n }\n\n // so let's check if the new displaySetInstanceUIDs follow the same rules\n this._validateViewportSpecificMatch(\n {\n displaySetInstanceUIDs: [newDisplaySetInstanceUID],\n viewportOptions: {},\n displaySetOptions: [],\n },\n protocolViewport,\n protocol.displaySetSelectors\n );\n // if we reach here, it means there are some rules that should be applied\n\n // if we don't have any match details for the displaySetSelector the viewport\n // is currently showing, then we can assume that the new displaySetInstanceUID\n // does not\n if (!this.displaySetMatchDetails.get(displaySetSelectorId)) {\n return defaultReturn;\n }\n\n // if we reach here, it means that the displaySetInstanceUIDs to be dropped\n // in the viewportIndex are valid, and we can proceed with the update. However\n // we need to check if the displaySets that the viewport were showing\n // was also referenced by other viewports, and if so, we need to update those\n // viewports as well\n\n // check if displaySetSelectors are used by other viewports, and\n // store the viewportIndex and displaySetInstanceUIDs that need to be updated\n\n const viewportsToUpdate = [];\n protocolViewports.forEach((viewport, index) => {\n let viewportNeedsUpdate;\n for (const displaySet of viewport.displaySets) {\n if (displaySet.id === displaySetSelectorId) {\n viewportNeedsUpdate = true;\n break;\n }\n }\n\n if (viewportNeedsUpdate) {\n // we can then loop over the displaySets and choose all of them,\n // but for the one that matches the oldDisplaySetInstanceUID we need to\n // replace it with the newDisplaySetInstanceUID\n const {\n displaySetInstanceUIDs,\n displaySetOptions,\n } = viewport.displaySets.reduce(\n (acc, displaySet) => {\n const { id, options } = displaySet;\n\n let {\n displaySetInstanceUID: displaySetInstanceUIDToUse,\n } = this.displaySetMatchDetails.get(id);\n\n if (displaySet.id === displaySetSelectorId) {\n displaySetInstanceUIDToUse = newDisplaySetInstanceUID;\n }\n\n acc.displaySetInstanceUIDs.push(displaySetInstanceUIDToUse);\n acc.displaySetOptions.push(options);\n\n return acc;\n },\n { displaySetInstanceUIDs: [], displaySetOptions: [] }\n );\n\n viewportsToUpdate.push({\n viewportIndex: index,\n displaySetInstanceUIDs,\n viewportOptions: viewport.viewportOptions,\n displaySetOptions,\n });\n }\n });\n\n return viewportsToUpdate;\n }\n\n /**\n * It applied the protocol to the current studies and display sets based on the\n * protocolId that is provided.\n * @param protocolId - name of the registered protocol to be set\n * @param options - options to be passed to the protocol, this is either an array\n * of the displaySetInstanceUIDs to be set on ALL VIEWPORTS OF THE PROTOCOL or an object\n * that contains viewportIndex as the key and displaySetInstanceUIDs as the value\n * for each viewport that needs to be set.\n * @param errorCallback - callback to be called if there is an error\n * during the protocol application\n *\n * @returns boolean - true if the protocol was applied and no errors were found\n */\n public setProtocol(\n protocolId: string,\n options = {} as HangingProtocol.SetProtocolOptions,\n errorCallback = null\n ): void {\n const foundProtocol = this.protocols.get(protocolId);\n\n if (!foundProtocol) {\n console.warn(\n `ProtocolEngine::setProtocol - Protocol with id ${protocolId} not found - you should register it first via addProtocol`\n );\n return;\n }\n\n const protocol = this._validateProtocol(foundProtocol);\n\n if (options) {\n this._validateOptions(options);\n }\n\n try {\n this._setProtocol(protocol, options);\n } catch (error) {\n console.error(error);\n\n if (errorCallback) {\n errorCallback(error);\n }\n\n throw new Error(error);\n }\n }\n\n private _setProtocol(\n protocol: HangingProtocol.Protocol,\n options = null as HangingProtocol.SetProtocolOptions\n ): void {\n this.stage = 0;\n const oldProtocol = this.protocol;\n this.protocol = this._copyProtocol(protocol);\n\n const { imageLoadStrategy } = protocol;\n if (imageLoadStrategy) {\n // check if the imageLoadStrategy is a valid strategy\n if (\n this.registeredImageLoadStrategies[imageLoadStrategy] instanceof\n Function\n ) {\n this.activeImageLoadStrategyName = imageLoadStrategy;\n }\n }\n\n try {\n this._updateViewports(options);\n } catch (error) {\n this.protocol = oldProtocol;\n throw new Error(error);\n }\n\n this._broadcastChange(this.EVENTS.PROTOCOL_CHANGED, {\n viewportMatchDetails: this.viewportMatchDetails,\n displaySetMatchDetails: this.displaySetMatchDetails,\n hpAlreadyApplied: this.hpAlreadyApplied,\n protocol: this.protocol,\n });\n }\n\n /**\n * Retrieves the number of Stages in the current Protocol or\n * undefined if no protocol or stages are set\n */\n _getNumProtocolStages() {\n if (\n !this.protocol ||\n !this.protocol.stages ||\n !this.protocol.stages.length\n ) {\n return;\n }\n\n return this.protocol.stages.length;\n }\n\n /**\n * Retrieves the current Stage from the current Protocol and stage index\n *\n * @returns {*} The Stage model for the currently displayed Stage\n */\n _getCurrentStageModel() {\n return this.protocol.stages[this.stage];\n }\n\n /**\n * Updates the viewports with the selected protocol stage.\n */\n _updateViewports(options = null as HangingProtocol.SetProtocolOptions): void {\n // Make sure we have an active protocol with a non-empty array of display sets\n if (!this._getNumProtocolStages()) {\n throw new Error('No protocol or stages found');\n }\n\n // each time we are updating the viewports, we need to reset the\n // matching applied\n // Todo: we can have more intelligent invalidation of the hpAlreadyApplied\n // since sometimes we are just updating some viewports and the rest are\n // already applied (e.g. when we are using the drag and drop)\n this.hpAlreadyApplied = new Map();\n this.viewportMatchDetails = new Map();\n this.displaySetMatchDetails = new Map();\n this.customImageLoadPerformed = false;\n\n if (options) {\n // if the options are defined, we can fill in the displaySetMatchDetails\n // but we need to also check that any displaySetInstanceUIDs that are\n // provided either at viewport level or at the protocol level SATISFIES\n // the required seriesMatching criteria species in the protocol. Otherwise\n // we need to throw an error. This way protocols become more strict and\n // for instance don't allow drag and drop of displaySets that don't match\n // (in MPR protocol we specify in the displaysetSelector that the displaySet\n // to be used should be reconstructable. Or you can specify that the displaySet\n // should be a localizer only for a protocol)\n\n // options can be either an object with { displaySetInstanceUIDs, viewportOptions, displaySetOptions }\n // options (global options), or an object of objects with viewportIndex\n // as the key and the { displaySetInstanceUIDs, viewportOptions, displaySetOptions } as the value\n\n // The following function will update the displaySetMatchDetails in place\n this._updateMatchByOptions(this.protocol, options);\n }\n\n const { displaySetSelectors = {} } = this.protocol;\n\n // Retrieve the current stage\n const stageModel = this._getCurrentStageModel();\n\n // If the current stage does not fulfill the requirements to be displayed,\n // stop here.\n if (\n !stageModel ||\n !stageModel.viewportStructure ||\n !stageModel.viewports ||\n !stageModel.viewports.length\n ) {\n console.log('Stage cannot be applied', stageModel);\n return;\n }\n\n const { layoutType } = stageModel.viewportStructure;\n // Retrieve the properties associated with the current display set's viewport structure template\n // If no such layout properties exist, stop here.\n const layoutProps = stageModel.viewportStructure.properties;\n if (!layoutProps) {\n console.log('No viewportStructure.properties in', stageModel);\n return;\n }\n\n const { columns: numCols, rows: numRows, layoutOptions = [] } = layoutProps;\n\n this._broadcastChange(this.EVENTS.NEW_LAYOUT, {\n layoutType,\n numRows,\n numCols,\n layoutOptions,\n });\n\n // Matching the displaySets\n for (\n let viewportIndex = 0;\n viewportIndex < numCols * numRows;\n viewportIndex++\n ) {\n if (viewportIndex >= stageModel.viewports.length) {\n // If we have more viewports than display sets, stop here.\n break;\n }\n\n const viewport = stageModel.viewports[viewportIndex];\n\n for (const displaySet of viewport.displaySets) {\n const { id: displaySetId } = displaySet;\n // skip matching if already matched (e.g. by options above)\n if (this.displaySetMatchDetails.has(displaySetId)) {\n continue;\n }\n const displaySetSelector = displaySetSelectors[displaySetId];\n\n if (!displaySetSelector) {\n console.warn('No display set selector for', displaySetId);\n continue;\n }\n const { bestMatch, matchingScores } = this._matchImages(\n displaySetSelector\n );\n this.displaySetMatchDetails.set(displaySetId, bestMatch);\n\n if (bestMatch) {\n bestMatch.matchingScores = matchingScores;\n }\n }\n }\n\n // Loop through each viewport\n stageModel.viewports.forEach((viewport, viewportIndex) => {\n const { viewportOptions = {} } = viewport;\n this.hpAlreadyApplied.set(viewportIndex, false);\n // DisplaySets for the viewport, Note: this is not the actual displaySet,\n // but it is a info to locate the displaySet from the displaySetService\n const displaySetsInfo = [];\n viewport.displaySets.forEach(\n ({ id, displaySetIndex = 0, options: displaySetOptions }) => {\n const viewportDisplaySetMain = this.displaySetMatchDetails.get(id);\n // Use the display set index to allow getting the \"next\" match, eg\n // matching all display sets, and get the displaySetIndex'th item\n const viewportDisplaySet =\n !viewportDisplaySetMain || displaySetIndex === 0\n ? viewportDisplaySetMain\n : viewportDisplaySetMain.matchingScores[displaySetIndex];\n\n if (viewportDisplaySet) {\n const {\n SeriesInstanceUID,\n displaySetInstanceUID,\n } = viewportDisplaySet;\n\n const displaySetInfo: HangingProtocol.DisplaySetInfo = {\n SeriesInstanceUID,\n displaySetInstanceUID,\n displaySetOptions,\n };\n\n displaySetsInfo.push(displaySetInfo);\n } else {\n console.warn(\n `\n The hanging protocol viewport is requesting to display ${id} displaySet that is not\n matched based on the provided criteria (e.g. matching rules).\n `\n );\n }\n }\n );\n\n this.viewportMatchDetails.set(viewportIndex, {\n viewportOptions,\n displaySetsInfo,\n });\n });\n }\n\n _updateMatchByOptions(\n protocol: Protocol,\n options: HangingProtocol.SetProtocolOptions\n ) {\n const { DisplaySetService } = this._servicesManager.services;\n\n if (options.displaySetInstanceUIDs) {\n this._updateGlobalMatchByOptions(\n options as HangingProtocol.GlobalProtocolOptions,\n protocol,\n DisplaySetService\n );\n return;\n }\n\n // Todo: I don't think we need the following anymore, since the drag and\n // drop has been reworked to ask HangingProtocolService to check\n // which viewports need to be updated. I don't think there is other use cases\n // other than drag and drop and thumbnails double click that will specify\n // options at viewport level. if there are the following code will need to be\n // uncommented and tested.\n this._updateViewportSpecificMatchByOptions(\n options as HangingProtocol.ViewportSpecificProtocolOptions,\n protocol\n );\n }\n\n private _updateViewportSpecificMatchByOptions(\n options: HangingProtocol.ViewportSpecificProtocolOptions,\n protocol: HangingProtocol.Protocol\n ) {\n const { DisplaySetService } = this._servicesManager.services;\n const { displaySetSelectors = {} } = protocol;\n const protocolViewports = protocol.stages[this.stage].viewports;\n\n // if we get here, we can fill in the displaySetMatchDetails\n for (const viewportIndex in options) {\n const displaySetAndViewportOptions = options[viewportIndex];\n\n const protocolViewport = protocolViewports[viewportIndex];\n // if the protocol already has the viewport\n if (protocolViewport) {\n // if the protocol has a viewport with specific displaySets, we need to check if the\n // displaySetInstanceUIDs are allowed by the protocol\n this._validateViewportSpecificMatch(\n displaySetAndViewportOptions,\n protocolViewport,\n displaySetSelectors\n );\n\n displaySetAndViewportOptions.displaySetInstanceUIDs.forEach(\n (displaySetInstanceUID, index) => {\n const displaySet = DisplaySetService.getDisplaySetByUID(\n displaySetInstanceUID\n );\n\n const displaySetId = protocolViewport.displaySets[index].id;\n\n // since we are setting the displaySetMatchDetails for each viewport\n // directly, a side effect is that any other viewport that is referencing\n // the same displaySetId will also be updated with the new\n // displaySetMatchDetails, but sometimes this is not a desired behavior\n // which is why we are using the syncDataForViewports to determine if\n // we should update the displaySetMatchDetails for all the viewports\n // that are affected by the syncDataForViewports\n if (protocol.syncDataForViewports) {\n this.displaySetMatchDetails.set(displaySetId, {\n SeriesInstanceUID: displaySet.SeriesInstanceUID,\n StudyInstanceUID: displaySet.StudyInstanceUID,\n displaySetInstanceUID: displaySet.displaySetInstanceUID,\n matchDetails: {},\n matchingScores: [],\n sortingInfo: {},\n });\n } else {\n // if the protocol does not have the syncDataForViewports, we need to\n // update the displaySetMatchDetails by introducing the displaySetIndex\n // to the displaySetMatchDetails. This way we can match the displaySetInstanceUIDs\n // for the viewportIndex, but also for the other viewports that are affected\n // by the syncDataForViewports\n\n const displaySetSelectorId = `${displaySetId}_${uuidv4()}`;\n\n // update the displaySetId at the viewport\n protocolViewport.displaySets[index].id = displaySetSelectorId;\n\n this.displaySetMatchDetails.set(displaySetSelectorId, {\n SeriesInstanceUID: displaySet.SeriesInstanceUID,\n StudyInstanceUID: displaySet.StudyInstanceUID,\n displaySetInstanceUID: displaySet.displaySetInstanceUID,\n matchDetails: {},\n matchingScores: [],\n sortingInfo: {},\n });\n }\n }\n );\n } else {\n // if the protocol does not have the viewport, we need to create it\n const newViewport = {\n displaySets: [],\n viewportOptions: {},\n };\n\n displaySetAndViewportOptions?.displaySetInstanceUIDs?.forEach(\n (displaySetInstanceUID, index) => {\n const displaySet = DisplaySetService.getDisplaySetByUID(\n displaySetInstanceUID\n );\n\n const displaySetId = `viewport_${viewportIndex}_displaySet_${index}`;\n\n newViewport.displaySets.push({\n id: displaySetId,\n });\n\n this.displaySetMatchDetails.set(displaySetId, {\n SeriesInstanceUID: displaySet.SeriesInstanceUID,\n StudyInstanceUID: displaySet.StudyInstanceUID,\n displaySetInstanceUID: displaySet.displaySetInstanceUID,\n matchDetails: {},\n matchingScores: [],\n sortingInfo: {},\n });\n }\n );\n\n protocolViewports[viewportIndex] = newViewport;\n }\n }\n }\n\n private _validateViewportSpecificMatch(\n displaySetAndViewportOptions: HangingProtocol.DisplaySetAndViewportOptions,\n protocolViewport: HangingProtocol.Viewport,\n displaySetSelectors: Record\n ) {\n const { DisplaySetService } = this._servicesManager.services;\n const protocolViewportDisplaySets = protocolViewport.displaySets;\n const numDisplaySetsToSet =\n displaySetAndViewportOptions.displaySetInstanceUIDs.length;\n\n if (\n protocolViewportDisplaySets.length > 0 &&\n numDisplaySetsToSet !== protocolViewportDisplaySets.length\n ) {\n throw new Error(\n `The number of displaySets to set ${numDisplaySetsToSet} does not match the number of displaySets in the protocol ${protocolViewportDisplaySets} - not currently implemented`\n );\n }\n\n displaySetAndViewportOptions.displaySetInstanceUIDs.forEach(\n displaySetInstanceUID => {\n const displaySet = DisplaySetService.getDisplaySetByUID(\n displaySetInstanceUID\n );\n\n const { displaySets: displaySetsInfo } = protocolViewport;\n\n for (const displaySetInfo of displaySetsInfo) {\n const displaySetSelector = displaySetSelectors[displaySetInfo.id];\n\n if (!displaySetSelector) {\n continue;\n }\n this._validateRequiredSelectors(displaySetSelector, displaySet);\n }\n }\n );\n }\n\n private _updateGlobalMatchByOptions(\n options: HangingProtocol.GlobalProtocolOptions,\n protocol: Protocol,\n DisplaySetService: any\n ) {\n const { displaySetSelectors = {} } = protocol;\n const protocolViewports = protocol.stages[this.stage].viewports;\n\n options = options as HangingProtocol.GlobalProtocolOptions;\n // we need to check each displaySetInstanceUIDs to see if it satisfies the\n // seriesMatching criteria\n options.displaySetInstanceUIDs.forEach(displaySetInstanceUID => {\n const displaySet = DisplaySetService.getDisplaySetByUID(\n displaySetInstanceUID\n );\n\n // match against all the displaySetSelectors defined in the protocol\n for (const displaySetId in displaySetSelectors) {\n const displaySetSelector = displaySetSelectors[displaySetId];\n this._validateRequiredSelectors(displaySetSelector, displaySet);\n }\n });\n\n // if we get here, we can fill in the displaySetMatchDetails\n // however, there might be a case where we are asked to\n // render multiple displaySets for a single viewport\n // so we need to go back to viewports and start from there\n const newDisplaySetIds: Set = new Set();\n\n // Todo: this currently work for current stage only\n protocolViewports.forEach(viewport => {\n viewport.displaySets.forEach(displaySetInfo => {\n const { id: displaySetId } = displaySetInfo;\n if (!this.displaySetMatchDetails.has(displaySetId)) {\n newDisplaySetIds.add(displaySetId);\n }\n });\n });\n\n // Todo: handle override of the viewport and displaySet options\n Array.from(newDisplaySetIds).forEach((displaySetId, index) => {\n const displaySetInstanceUID = options.displaySetInstanceUIDs[index];\n\n const displaySet = DisplaySetService.getDisplaySetByUID(\n displaySetInstanceUID\n );\n\n this.displaySetMatchDetails.set(displaySetId, {\n SeriesInstanceUID: displaySet.SeriesInstanceUID,\n StudyInstanceUID: displaySet.StudyInstanceUID,\n displaySetInstanceUID: displaySet.displaySetInstanceUID,\n matchDetails: {},\n matchingScores: [],\n sortingInfo: {},\n });\n });\n\n /*\n Todo: make it work for the case where the number of displaySets\n to set is not equal to the number of displaySets in the protocol, we can modify\n the protocol to have the same number of displaySets for each viewport\n\n if (newDisplaySetIds.size !== numberOfDisplaySetsToSet) {\n // the remaining ones to set\n const remainingDisplaySetMatches = options.slice(\n newDisplaySetIds.size,\n numberOfDisplaySetsToSet\n );\n\n protocol[this.stage].viewports.forEach(viewport => {\n const { displaySets } = viewport;\n\n // push the displaySetsToSet to the end of the displaySets array\n\n remainingDisplaySetMatches.forEach(({ displaySetInstanceUID }) => {\n displaySets.push({\n id: displaySetInstanceUID,\n });\n });\n });\n\n remainingDisplaySetMatches.forEach(({ displaySetInstanceUID }) => {\n const displaySet = DisplaySetService.getDisplaySetByUID(\n displaySetInstanceUID\n );\n\n this.displaySetMatchDetails.set(displaySetInstanceUID, {\n SeriesInstanceUID: displaySet.SeriesInstanceUID,\n StudyInstanceUID: displaySet.StudyInstanceUID,\n displaySetInstanceUID: displaySet.displaySetInstanceUID,\n matchDetails: {},\n matchingScores: [],\n sortingInfo: {},\n });\n });\n }\n\n // Todo: this has a bug where if the protocol defines only one displaySet,\n // but renders a fusion, it cannot go back to one displaySet since its\n // viewport.displaySets.length is 2 and it should remove the second one\n // later\n */\n }\n\n private _validateRequiredSelectors(\n displaySetSelector: HangingProtocol.DisplaySetSelector,\n displaySet: any\n ) {\n const { seriesMatchingRules } = displaySetSelector;\n\n if (seriesMatchingRules.length) {\n // only match the required rules\n const requiredRules = seriesMatchingRules.filter(rule => rule.required);\n\n const matched = this.protocolEngine.findMatch(displaySet, requiredRules);\n\n if (!matched || matched.score === 0) {\n throw new Error(\n `The displaySetInstanceUID ${displaySet.displaySetInstanceUID} does not satisfy the required seriesMatching criteria for the protocol`\n );\n }\n }\n }\n\n _validateOptions(options: HangingProtocol.SetProtocolOptions) {\n const { DisplaySetService } = this._servicesManager.services;\n\n if (options.displaySetInstanceUIDs) {\n options = options as HangingProtocol.GlobalProtocolOptions;\n\n options.displaySetInstanceUIDs.forEach(displaySetInstanceUID => {\n const displaySet = DisplaySetService.getDisplaySetByUID(\n displaySetInstanceUID\n );\n\n if (!displaySet) {\n throw new Error(\n `The displaySetInstanceUID ${displaySetInstanceUID} is not found in the displaySetService`\n );\n }\n });\n }\n }\n\n // Match images given a list of Studies and a Viewport's image matching reqs\n _matchImages(displaySetRules) {\n // TODO: matching is applied on study and series level, instance\n // level matching needs to be added in future\n\n // Todo: handle fusion viewports by not taking the first displaySet rule for the viewport\n const { studyMatchingRules = [], seriesMatchingRules } = displaySetRules;\n\n const matchingScores = [];\n let highestStudyMatchingScore = 0;\n let highestSeriesMatchingScore = 0;\n\n console.log(\n 'ProtocolEngine::matchImages',\n studyMatchingRules,\n seriesMatchingRules\n );\n this.studies.forEach(study => {\n const studyDisplaySets = this.displaySets.filter(\n it => it.StudyInstanceUID === study.StudyInstanceUID\n );\n const studyMatchDetails = this.protocolEngine.findMatch(\n study,\n studyMatchingRules,\n { studies: this.studies, displaySets: studyDisplaySets }\n );\n\n // Prevent bestMatch from being updated if the matchDetails' required attribute check has failed\n if (studyMatchDetails.requiredFailed === true) {\n return;\n }\n\n highestStudyMatchingScore = studyMatchDetails.score;\n\n this.debug(\n 'study',\n study.StudyInstanceUID,\n 'display sets #',\n this.displaySets.length\n );\n this.displaySets.forEach(displaySet => {\n const {\n StudyInstanceUID,\n SeriesInstanceUID,\n displaySetInstanceUID,\n } = displaySet;\n if (StudyInstanceUID !== study.StudyInstanceUID) return;\n const seriesMatchDetails = this.protocolEngine.findMatch(\n displaySet,\n seriesMatchingRules,\n // Todo: why we have images here since the matching type does not have it\n { studies: this.studies, instance: displaySet.images?.[0] }\n );\n\n // Prevent bestMatch from being updated if the matchDetails' required attribute check has failed\n if (seriesMatchDetails.requiredFailed === true) {\n this.debug(\n 'Display set required failed',\n displaySet,\n seriesMatchingRules\n );\n return;\n }\n\n this.debug('Found displaySet for rules', displaySet);\n highestSeriesMatchingScore = Math.max(\n seriesMatchDetails.score,\n highestSeriesMatchingScore\n );\n\n const matchDetails = {\n passed: [],\n failed: [],\n };\n\n matchDetails.passed = matchDetails.passed.concat(\n seriesMatchDetails.details.passed\n );\n matchDetails.passed = matchDetails.passed.concat(\n studyMatchDetails.details.passed\n );\n\n matchDetails.failed = matchDetails.failed.concat(\n seriesMatchDetails.details.failed\n );\n matchDetails.failed = matchDetails.failed.concat(\n studyMatchDetails.details.failed\n );\n\n const totalMatchScore =\n seriesMatchDetails.score + studyMatchDetails.score;\n\n const imageDetails = {\n StudyInstanceUID,\n SeriesInstanceUID,\n displaySetInstanceUID,\n matchingScore: totalMatchScore,\n matchDetails: matchDetails,\n sortingInfo: {\n score: totalMatchScore,\n study: study.StudyInstanceUID,\n series: parseInt(displaySet.SeriesNumber),\n },\n };\n\n this.debug('Adding display set', displaySet, imageDetails);\n matchingScores.push(imageDetails);\n });\n });\n\n if (matchingScores.length === 0) {\n console.log('No match found');\n }\n\n // Sort the matchingScores\n const sortingFunction = sortBy(\n {\n name: 'score',\n reverse: true,\n },\n {\n name: 'study',\n reverse: true,\n },\n {\n name: 'series',\n }\n );\n matchingScores.sort((a, b) =>\n sortingFunction(a.sortingInfo, b.sortingInfo)\n );\n\n const bestMatch = matchingScores[0];\n\n console.log(\n 'ProtocolEngine::matchImages bestMatch',\n bestMatch,\n matchingScores\n );\n\n return {\n bestMatch,\n matchingScores,\n };\n }\n\n /**\n * Check if the next stage is available\n * @return {Boolean} True if next stage is available or false otherwise\n */\n _isNextStageAvailable() {\n const numberOfStages = this._getNumProtocolStages();\n\n return this.stage + 1 < numberOfStages;\n }\n\n /**\n * Check if the previous stage is available\n * @return {Boolean} True if previous stage is available or false otherwise\n */\n _isPreviousStageAvailable(): boolean {\n return this.stage - 1 >= 0;\n }\n\n /**\n * Changes the current stage to a new stage index in the display set sequence.\n * It checks if the next stage exists.\n *\n * @param {Integer} stageAction An integer value specifying whether next (1) or previous (-1) stage\n * @return {Boolean} True if new stage has set or false, otherwise\n */\n _setCurrentProtocolStage(stageAction): boolean {\n //resetting the applied protocols\n this.hpAlreadyApplied = new Map();\n // Check if previous or next stage is available\n if (stageAction === -1 && !this._isPreviousStageAvailable()) {\n return false;\n } else if (stageAction === 1 && !this._isNextStageAvailable()) {\n return false;\n }\n\n // Sets the new stage\n this.stage += stageAction;\n\n // Log the new stage\n this.debug(`ProtocolEngine::setCurrentProtocolStage stage = ${this.stage}`);\n\n // Since stage has changed, we need to update the viewports\n // and redo matchings\n this._updateViewports();\n\n // Everything went well\n this._broadcastChange(this.EVENTS.STAGE_CHANGE, {\n viewportMatchDetails: this.viewportMatchDetails,\n hpAlreadyApplied: this.hpAlreadyApplied,\n displaySetMatchDetails: this.displaySetMatchDetails,\n });\n return true;\n }\n\n /** Set this.debugLogging to true to show debug level logging - needed\n * to be able to figure out why hanging protocols are or are not applying.\n */\n debug(...args): void {\n if (this.debugLogging) {\n console.log(...args);\n }\n }\n\n /**\n * Broadcasts hanging protocols changes.\n *\n * @param {string} eventName The event name.add\n * @param {object} eventData.source The measurement source.\n * @param {object} eventData.measurement The measurement.\n * @param {boolean} eventData.notYetUpdatedAtSource True if the measurement was edited\n * within the measurement service and the source needs to update.\n * @return void\n */\n // Todo: why do we have a separate broadcastChange function here?\n _broadcastChange(eventName, eventData) {\n const hasListeners = Object.keys(this.listeners).length > 0;\n const hasCallbacks = Array.isArray(this.listeners[eventName]);\n\n if (hasListeners && hasCallbacks) {\n this.listeners[eventName].forEach(listener => {\n listener.callback(eventData);\n });\n }\n }\n\n _copyProtocol(protocol: Protocol) {\n return JSON.parse(JSON.stringify(protocol));\n }\n\n /**\n _setProtocolLayoutOptions(protocol: Protocol, { numRows, numCols }) {\n const layoutOptions = [];\n const protocolStage = protocol.stages[this.stage];\n const numViewports = protocolStage.viewports.length;\n\n for (let i = 0; i < numViewports; i++) {\n const { row, col } = unravelIndex(i, numRows, numCols);\n const w = 1 / numCols;\n const h = 1 / numRows;\n const xPos = col * w;\n const yPos = row * h;\n\n layoutOptions[i] = {\n width: w,\n height: h,\n x: xPos,\n y: yPos,\n };\n }\n\n // Todo: handle the case where the viewportStructure is not a grid\n protocolStage.viewportStructure.properties.rows = numRows;\n protocolStage.viewportStructure.properties.columns = numCols;\n protocolStage.viewportStructure.properties.layoutOptions = {\n ...layoutOptions,\n };\n }\n\n _getUpdatedProtocol({\n numRows,\n numCols,\n protocol: oldProtocol,\n }: {\n numRows: number;\n numCols: number;\n protocol: Protocol;\n }): Protocol {\n let newProtocol = this._copyProtocol(oldProtocol);\n\n const protocolStage = newProtocol.stages[this.stage];\n\n // The following commented code is a potential improvements to the\n // hanging protocols to intelligently switch between number of rows\n // and columns based on the old state of the protocol. For instance,\n // changing from 2x2 to 2x3 (adding a column) right now reorders the viewports\n // as well, however, it should just add one empty column to the right\n // and leave the rest of the viewports in place. This sounds amazing,\n // but comes at a cost (which we need to tackle later). The cost is that\n // the viewportIndex will change during this smart change of layout. In\n // the example above the viewport at index (2) bottom left, will now be\n // at index (3) bottom left, and since react will re-render the viewport\n // it will reset the viewport's state such as (zoom, pan, windowLevel, imageIndex)\n // and the user will lose their current state. In addition, all our viewportIds\n // are dependent on the viewportIndex, so we will need to update all the viewportIds\n // as well, and you can see how this can get out of hand. Later, we should\n // tackle this problem and make the smart change of layout work.\n\n // const { rows: oldNumRows, columns: oldNumCols } = newProtocol.stages[\n // this.stage\n // ].viewportStructure.properties;\n\n // const oldToNewViewportIndices = getGridMapping(\n // {\n // numRows: oldNumRows,\n // numCols: oldNumCols,\n // },\n // {\n // numRows,\n // numCols,\n // }\n // );\n\n const protocolViewports = protocolStage.viewports;\n\n if (protocolViewports.length < numRows * numCols) {\n const newViewports = [];\n\n for (let i = protocolViewports.length; i < numRows * numCols; i++) {\n newViewports.push({\n viewportOptions: {\n toolGroupId: 'default',\n viewportType: 'stack',\n },\n displaySets: [\n {\n id: `viewport-${i}`,\n },\n ],\n });\n }\n\n protocolStage.viewports = [...protocolViewports, ...newViewports];\n } else if (protocolViewports.length > numRows * numCols) {\n // remove viewports that are not needed\n protocolStage.viewports = protocolViewports.slice(0, numRows * numCols);\n }\n\n // update the displaySetMatchDetails to reflect the new viewports\n const toRemove = [];\n this.displaySetMatchDetails.forEach(\n (displaySetMatchDetail, displaySetId) => {\n // if the displaySetId is not referenced in the protocolStage viewports\n // we can remove it\n const found = protocolStage.viewports.find(viewport => {\n return viewport.displaySets.find(displaySet => {\n return displaySet.id === displaySetId;\n });\n });\n\n if (!found) {\n toRemove.push(displaySetId);\n }\n }\n );\n\n toRemove.forEach(displaySetId => {\n this.displaySetMatchDetails.delete(displaySetId);\n });\n\n this._setProtocolLayoutOptions(newProtocol, { numRows, numCols });\n newProtocol = this._validateProtocol(newProtocol);\n\n // Todo: not sure if we need to reset here, or we can smartly update the\n // viewportMatchDetails and hpAlreadyApplied maps\n this.hpAlreadyApplied = new Map();\n this.viewportMatchDetails = new Map();\n\n return newProtocol;\n }\n */\n}\n\nexport default HangingProtocolService;\nexport { EVENTS };\n","// prettier-ignore\n// @ts-nocheck\n/**\n * Generates a unique id that has limited chance of collision\n *\n * @see {@link https://stackoverflow.com/a/2117523/1867984|StackOverflow: Source}\n * @returns a v4 compliant GUID\n */\nexport default function uuidv4(): string {\n return ([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g, c =>\n (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)\n );\n}\n","import HangingProtocolService from './HangingProtocolService';\n\nexport default {\n name: 'HangingProtocolService',\n create: ({ configuration = {}, commandsManager, servicesManager }) => {\n return new HangingProtocolService(commandsManager, servicesManager);\n },\n};\n","import log from '../../log';\nimport guid from '../../utils/guid';\nimport pubSubServiceInterface from '../_shared/pubSubServiceInterface';\n\n/**\n * Measurement source schema\n *\n * @typedef {Object} MeasurementSource\n * @property {number} id -\n * @property {string} name -\n * @property {string} version -\n */\n\n/**\n * Measurement schema\n *\n * @typedef {Object} Measurement\n * @property {number} uid -\n * @property {string} SOPInstanceUID -\n * @property {string} FrameOfReferenceUID -\n * @property {string} referenceSeriesUID -\n * @property {string} label -\n * @property {string} description -\n * @property {string} type -\n * @property {string} unit -\n * @property {number} area -\n * @property {Array} points -\n * @property {MeasurementSource} source -\n */\n\n/* Measurement schema keys for object validation. */\nconst MEASUREMENT_SCHEMA_KEYS = [\n 'uid',\n 'data',\n 'getReport',\n 'displayText',\n 'SOPInstanceUID',\n 'FrameOfReferenceUID',\n 'referenceStudyUID',\n 'referenceSeriesUID',\n 'frameNumber',\n 'displaySetInstanceUID',\n 'label',\n 'description',\n 'type',\n 'unit',\n 'points',\n 'source',\n 'toolName',\n 'metadata',\n // Todo: we shouldn't need to have all these here.\n 'area', // TODO: Add concept names instead (descriptor)\n 'mean',\n 'stdDev',\n 'length',\n 'shortestDiameter',\n 'longestDiameter',\n 'cachedStats',\n];\n\nconst EVENTS = {\n MEASUREMENT_UPDATED: 'event::measurement_updated',\n INTERNAL_MEASUREMENT_UPDATED: 'event:internal_measurement_updated',\n MEASUREMENT_ADDED: 'event::measurement_added',\n RAW_MEASUREMENT_ADDED: 'event::raw_measurement_added',\n MEASUREMENT_REMOVED: 'event::measurement_removed',\n MEASUREMENTS_CLEARED: 'event::measurements_cleared',\n JUMP_TO_MEASUREMENT: 'event:jump_to_measurement',\n};\n\nconst VALUE_TYPES = {\n POLYLINE: 'value_type::polyline',\n POINT: 'value_type::point',\n BIDIRECTIONAL: 'value_type::shortAxisLongAxis', // TODO -> Discuss with Danny. => just using SCOORD values isn't enough here.\n ELLIPSE: 'value_type::ellipse',\n RECTANGLE: 'value_type::rectangle',\n MULTIPOINT: 'value_type::multipoint',\n CIRCLE: 'value_type::circle',\n ROI_THRESHOLD: 'value_type::roiThreshold',\n ROI_THRESHOLD_MANUAL: 'value_type::roiThresholdManual',\n};\n\n/**\n * MeasurementService class that supports source management and measurement management.\n * Sources can be any library that can provide \"annotations\" (e.g. cornerstone-tools, cornerstone, etc.)\n * The flow, is that by creating a source and mappings (annotation <-> measurement), we\n * can convert back and forth between the two. MeasurementPanel in OHIF uses the measurement service\n * to manage the measurements, and any edit to the measurements will be reflected back at the\n * library level state (e.g. cornerstone-tools, cornerstone, etc.) by converting the\n * edited measurements back to the original annotations and then updating the annotations.\n *\n * Note and Todo: We should be able to support measurements that are composed of multiple\n * annotations, but that is not the case at the moment.\n */\nclass MeasurementService {\n constructor() {\n this.sources = {};\n this.mappings = {};\n this.measurements = {};\n this.listeners = {};\n this._jumpToMeasurementCache = {};\n Object.defineProperty(this, 'EVENTS', {\n value: EVENTS,\n writable: false,\n enumerable: true,\n configurable: false,\n });\n Object.defineProperty(this, 'VALUE_TYPES', {\n value: VALUE_TYPES,\n writable: false,\n enumerable: true,\n configurable: false,\n });\n\n Object.assign(this, pubSubServiceInterface);\n }\n\n /**\n * Adds the given schema to the measurement service schema list.\n * This method should be used to add custom tool schema to the measurement service.\n * @param {Array} schema schema for validation\n */\n addMeasurementSchemaKeys(schema) {\n if (!Array.isArray(schema)) {\n schema = [schema];\n }\n\n MEASUREMENT_SCHEMA_KEYS.push(...schema);\n }\n\n /**\n * Adds the given valueType to the measurement service valueType object.\n * This method should be used to add custom valueType to the measurement service.\n * @param {*} valueType\n * @returns\n */\n addValueType(valueType) {\n if (VALUE_TYPES[valueType]) {\n return;\n }\n\n // check if valuetype is valid , and if values are strings\n if (!valueType || typeof valueType !== 'object') {\n console.warn(\n `MeasurementService: addValueType: invalid valueType: ${valueType}`\n );\n return;\n }\n\n Object.keys(valueType).forEach(key => {\n if (!VALUE_TYPES[key]) {\n VALUE_TYPES[key] = valueType[key];\n }\n });\n }\n\n /**\n * Get all measurements.\n *\n * @return {Measurement[]} Array of measurements\n */\n getMeasurements() {\n const measurements = this._arrayOfObjects(this.measurements);\n return (\n measurements &&\n measurements.map(m => this.measurements[Object.keys(m)[0]])\n );\n }\n\n /**\n * Get specific measurement by its uid.\n *\n * @param {string} uid measurement uid\n * @return {Measurement} Measurement instance\n */\n getMeasurement(measurementUID) {\n let measurement = null;\n const measurements = this.measurements[measurementUID];\n\n if (measurements && Object.keys(measurements).length > 0) {\n measurement = this.measurements[measurementUID];\n }\n\n return measurement;\n }\n\n /**\n * Create a new source.\n *\n * @param {string} name Name of the source\n * @param {string} version Source name\n * @return {MeasurementSource} Measurement source instance\n */\n createSource(name, version) {\n if (!name) {\n throw new Error('Source name not provided.');\n }\n\n if (!version) {\n throw new Error('Source version not provided.');\n }\n\n // Go over all the keys inside the sources and check if the source\n // name and version matches with the existing sources.\n const sourceKeys = Object.keys(this.sources);\n\n for (let i = 0; i < sourceKeys.length; i++) {\n const source = this.sources[sourceKeys[i]];\n if (source.name === name && source.version === version) {\n return source;\n }\n }\n\n const uid = guid();\n const source = {\n uid,\n name,\n version,\n };\n\n source.annotationToMeasurement = (annotationType, annotation) => {\n return this.annotationToMeasurement(source, annotationType, annotation);\n };\n\n source.remove = (measurementUID, eventDetails) => {\n return this.remove(measurementUID, source, eventDetails);\n };\n\n source.getAnnotation = (annotationType, measurementId) => {\n return this.getAnnotation(source, annotationType, measurementId);\n };\n\n log.info(`New '${name}@${version}' source added.`);\n this.sources[uid] = source;\n\n return source;\n }\n\n getSource(name, version) {\n const { sources } = this;\n const uid = this._getSourceUID(name, version);\n\n return sources[uid];\n }\n\n getSourceMappings(name, version) {\n const { mappings } = this;\n const uid = this._getSourceUID(name, version);\n\n return mappings[uid];\n }\n\n /**\n * Add a new measurement matching criteria along with mapping functions.\n *\n * @param {MeasurementSource} source Measurement source instance\n * @param {string} annotationType annotation type to match which can be e.g., Length, Bidirectional, etc.\n * @param {MatchingCriteria} matchingCriteria The matching criteria\n * @param {Function} toAnnotationSchema Mapping function to annotation schema\n * @param {Function} toMeasurementSchema Mapping function to measurement schema\n * @return void\n */\n addMapping(\n source,\n annotationType,\n matchingCriteria,\n toAnnotationSchema,\n toMeasurementSchema\n ) {\n if (!this._isValidSource(source)) {\n throw new Error('Invalid source.');\n }\n\n if (!matchingCriteria) {\n throw new Error('Matching criteria not provided.');\n }\n\n if (!annotationType) {\n throw new Error('annotationType not provided.');\n }\n\n if (!toAnnotationSchema) {\n throw new Error('Mapping function to source schema not provided.');\n }\n\n if (!toMeasurementSchema) {\n throw new Error('Measurement mapping function not provided.');\n }\n\n const mapping = {\n matchingCriteria,\n annotationType,\n toAnnotationSchema,\n toMeasurementSchema,\n };\n\n if (Array.isArray(this.mappings[source.uid])) {\n this.mappings[source.uid].push(mapping);\n } else {\n this.mappings[source.uid] = [mapping];\n }\n\n log.info(\n `New measurement mapping added to source '${this._getSourceToString(\n source\n )}'.`\n );\n }\n\n /**\n * Get annotation for specific source.\n *\n * @param {MeasurementSource} source Measurement source instance\n * @param {string} annotationType The source annotationType\n * @param {string} measurementUID The measurement service measurement uid\n * @return {Object} Source measurement schema\n */\n getAnnotation(source, annotationType, measurementUID) {\n if (!this._isValidSource(source)) {\n log.warn('Invalid source. Exiting early.');\n return;\n }\n\n if (!annotationType) {\n log.warn('No source annotationType provided. Exiting early.');\n return;\n }\n\n const measurement = this.getMeasurement(measurementUID);\n const mapping = this._getMappingByMeasurementSource(\n measurement,\n annotationType\n );\n\n if (mapping) {\n return mapping.toAnnotationSchema(measurement, annotationType);\n }\n\n const matchingMapping = this._getMatchingMapping(\n source,\n annotationType,\n measurement\n );\n\n if (matchingMapping) {\n log.info('Matching mapping found:', matchingMapping);\n const { toAnnotationSchema, annotationType } = matchingMapping;\n return toAnnotationSchema(measurement, annotationType);\n }\n }\n\n update(measurementUID, measurement, notYetUpdatedAtSource = false) {\n if (!this.measurements[measurementUID]) {\n return;\n }\n\n const updatedMeasurement = {\n ...measurement,\n modifiedTimestamp: Math.floor(Date.now() / 1000),\n };\n\n log.info(\n `Updating internal measurement representation...`,\n updatedMeasurement\n );\n\n this.measurements[measurementUID] = updatedMeasurement;\n\n this._broadcastEvent(this.EVENTS.MEASUREMENT_UPDATED, {\n source: measurement.source,\n measurement: updatedMeasurement,\n notYetUpdatedAtSource,\n });\n\n return updatedMeasurement.uid;\n }\n\n /**\n * Add a raw measurement into a source so that it may be\n * Converted to/from annotation in the same way. E.g. import serialized data\n * of the same form as the measurement source.\n * @param {MeasurementSource} source The measurement source instance.\n * @param {string} annotationType The source annotationType you want to add the measurement to.\n * @param {object} data The data you wish to add to the source.\n * @param {function} toMeasurementSchema A function to get the `data` into the same shape as the source annotationType.\n */\n addRawMeasurement(\n source,\n annotationType,\n data,\n toMeasurementSchema,\n dataSource = {}\n ) {\n if (!this._isValidSource(source)) {\n log.warn('Invalid source. Exiting early.');\n return;\n }\n\n const sourceInfo = this._getSourceToString(source);\n\n if (!annotationType) {\n log.warn('No source annotationType provided. Exiting early.');\n return;\n }\n\n if (!this._sourceHasMappings(source)) {\n log.warn(\n `No measurement mappings found for '${sourceInfo}' source. Exiting early.`\n );\n return;\n }\n\n let measurement = {};\n try {\n measurement = toMeasurementSchema(data);\n measurement.source = source;\n } catch (error) {\n log.warn(\n `Failed to map '${sourceInfo}' measurement for annotationType ${annotationType}:`,\n error.message\n );\n return;\n }\n\n if (!this._isValidMeasurement(measurement)) {\n log.warn(\n `Attempting to add or update a invalid measurement provided by '${sourceInfo}'. Exiting early.`\n );\n return;\n }\n\n let internalUID = data.id;\n if (!internalUID) {\n internalUID = guid();\n log.warn(`Measurement ID not found. Generating UID: ${internalUID}`);\n }\n\n const newMeasurement = {\n ...measurement,\n modifiedTimestamp: Math.floor(Date.now() / 1000),\n uid: internalUID,\n };\n\n if (this.measurements[internalUID]) {\n this.measurements[internalUID] = newMeasurement;\n this._broadcastEvent(this.EVENTS.MEASUREMENT_UPDATED, {\n source,\n measurement: newMeasurement,\n });\n } else {\n log.info(`Measurement added.`, newMeasurement);\n this.measurements[internalUID] = newMeasurement;\n this._broadcastEvent(this.EVENTS.RAW_MEASUREMENT_ADDED, {\n source,\n measurement: newMeasurement,\n data,\n dataSource,\n });\n }\n\n return newMeasurement.id;\n }\n\n /**\n * Adds or update persisted measurements.\n *\n * @param {MeasurementSource} source The measurement source instance\n * @param {string} annotationType The source annotationType\n * @param {EventDetail} sourceAnnotationDetail for the annotation event\n * @return {string} A measurement uid\n */\n annotationToMeasurement(source, annotationType, sourceAnnotationDetail) {\n if (!this._isValidSource(source)) {\n throw new Error('Invalid source.');\n }\n\n if (!annotationType) {\n throw new Error('No source annotationType provided.');\n }\n\n const sourceInfo = this._getSourceToString(source);\n\n if (!this._sourceHasMappings(source)) {\n throw new Error(\n `No measurement mappings found for '${sourceInfo}' source. Exiting early.`\n );\n }\n\n let measurement = {};\n try {\n const sourceMappings = this.mappings[source.uid];\n const { toMeasurementSchema } = sourceMappings.find(\n mapping => mapping.annotationType === annotationType\n );\n\n /* Convert measurement */\n measurement = toMeasurementSchema(sourceAnnotationDetail);\n measurement.source = source;\n } catch (error) {\n throw new Error(\n `Failed to map '${sourceInfo}' measurement for annotationType ${annotationType}: ${error.message}`\n );\n }\n\n if (!this._isValidMeasurement(measurement)) {\n throw new Error(\n `Attempting to add or update a invalid measurement provided by '${sourceInfo}'. Exiting early.`\n );\n }\n\n // Todo: we are using uid on the eventDetail, it should be uid of annotation\n let internalUID = sourceAnnotationDetail.uid;\n if (!internalUID) {\n internalUID = guid();\n log.info(\n `Annotation does not have UID, Generating UID for the created Measurement: ${internalUID}`\n );\n }\n\n const newMeasurement = {\n ...measurement,\n modifiedTimestamp: Math.floor(Date.now() / 1000),\n uid: internalUID,\n };\n\n if (this.measurements[internalUID]) {\n this.measurements[internalUID] = newMeasurement;\n this._broadcastEvent(this.EVENTS.MEASUREMENT_UPDATED, {\n source,\n measurement: newMeasurement,\n notYetUpdatedAtSource: false,\n });\n } else {\n log.info('Measurement added.', newMeasurement);\n this.measurements[internalUID] = newMeasurement;\n this._broadcastEvent(this.EVENTS.MEASUREMENT_ADDED, {\n source,\n measurement: newMeasurement,\n });\n }\n\n return newMeasurement.uid;\n }\n\n /**\n * Removes a measurement and broadcasts the removed event.\n *\n * @param {string} measurementUID The measurement uid\n * @param {MeasurementSource} source The measurement source instance\n */\n remove(measurementUID, source, eventDetails) {\n if (!measurementUID || !this.measurements[measurementUID]) {\n log.warn(`No uid provided, or unable to find measurement by uid.`);\n return;\n }\n\n delete this.measurements[measurementUID];\n this._broadcastEvent(this.EVENTS.MEASUREMENT_REMOVED, {\n source,\n measurement: measurementUID,\n ...eventDetails,\n });\n }\n\n clearMeasurements() {\n // Make a copy of the measurements\n const measurements = { ...this.measurements };\n this.measurements = {};\n this._jumpToMeasurementCache = {};\n this._broadcastEvent(this.EVENTS.MEASUREMENTS_CLEARED, { measurements });\n }\n\n jumpToMeasurement(viewportIndex, measurementUID) {\n const measurement = this.measurements[measurementUID];\n\n if (!measurement) {\n log.warn(`No measurement uid, or unable to find by uid.`);\n return;\n }\n this._addJumpToMeasurement(viewportIndex, measurementUID);\n\n const eventName = this.EVENTS.JUMP_TO_MEASUREMENT;\n\n const hasListeners = Object.keys(this.listeners).length > 0;\n const hasCallbacks = Array.isArray(this.listeners[eventName]);\n\n if (hasListeners && hasCallbacks) {\n this.listeners[eventName].forEach(listener => {\n listener.callback({ viewportIndex, measurement });\n });\n }\n }\n\n getJumpToMeasurement(viewportIndex) {\n return this._jumpToMeasurementCache[viewportIndex];\n }\n\n removeJumpToMeasurement(viewportIndex) {\n delete this._jumpToMeasurementCache[viewportIndex];\n }\n\n _getSourceUID(name, version) {\n const { sources } = this;\n\n const sourceUID = Object.keys(sources).find(sourceUID => {\n const source = sources[sourceUID];\n\n return source.name === name && source.version === version;\n });\n\n return sourceUID;\n }\n\n _addJumpToMeasurement(viewportIndex, measurementUID) {\n this._jumpToMeasurementCache[viewportIndex] = measurementUID;\n }\n\n _getMappingByMeasurementSource(measurement, annotationType) {\n if (this._isValidSource(measurement.source)) {\n return this.mappings[measurement.source.uid].find(\n m => m.annotationType === annotationType\n );\n }\n }\n\n /**\n * Get measurement mapping function if matching criteria.\n *\n * @param {MeasurementSource} source Measurement source instance\n * @param {string} annotationType The source annotationType\n * @param {Measurement} measurement The measurement service measurement\n * @return {Object} The mapping based on matched criteria\n */\n _getMatchingMapping(source, annotationType, measurement) {\n const sourceMappings = this.mappings[source.uid];\n\n const sourceMappingsByDefinition = sourceMappings.filter(\n mapping => mapping.annotationType === annotationType\n );\n\n /* Criteria Matching */\n return sourceMappingsByDefinition.find(({ matchingCriteria }) => {\n return (\n measurement.points &&\n measurement.points.length === matchingCriteria.points\n );\n });\n }\n\n /**\n * Returns formatted string with source info.\n *\n * @param {MeasurementSource} source Measurement source\n * @return {string} Source information\n */\n _getSourceToString(source) {\n return `${source.name}@${source.version}`;\n }\n\n /**\n * Checks if given source is valid.\n *\n * @param {MeasurementSource} source Measurement source\n * @return {boolean} Measurement source validation\n */\n _isValidSource(source) {\n return source && this.sources[source.uid];\n }\n\n /**\n * Checks if a given source has mappings.\n *\n * @param {MeasurementSource} source The measurement source\n * @return {boolean} Validation if source has mappings\n */\n _sourceHasMappings(source) {\n return (\n Array.isArray(this.mappings[source.uid]) &&\n this.mappings[source.uid].length\n );\n }\n\n /**\n * Check if a given measurement data is valid.\n *\n * @param {Measurement} measurementData Measurement data\n * @return {boolean} Measurement validation\n */\n _isValidMeasurement(measurementData) {\n Object.keys(measurementData).forEach(key => {\n if (!MEASUREMENT_SCHEMA_KEYS.includes(key)) {\n log.warn(`Invalid measurement key: ${key}`);\n return false;\n }\n });\n\n return true;\n }\n\n /**\n * Check if a given measurement service event is valid.\n *\n * @param {string} eventName The name of the event\n * @return {boolean} Event name validation\n // */\n // _isValidEvent(eventName) {\n // return Object.values(this.EVENTS).includes(eventName);\n // }\n\n /**\n * Converts object of objects to array.\n *\n * @return {Array} Array of objects\n */\n _arrayOfObjects = obj => {\n return Object.entries(obj).map(e => ({ [e[0]]: e[1] }));\n };\n}\n\nexport default MeasurementService;\nexport { EVENTS, VALUE_TYPES };\n","import MeasurementService from './MeasurementService';\n\nexport default {\n name: 'MeasurementService',\n create: ({ configuration = {} }) => {\n return new MeasurementService();\n },\n};\n","import log from './../log.js';\n\nexport default class ServicesManager {\n constructor(commandsManager) {\n this._commandsManager = commandsManager;\n this.services = {};\n this.registeredServiceNames = [];\n }\n\n /**\n * Registers a new service.\n *\n * @param {Object} service\n * @param {Object} configuration\n */\n registerService(service, configuration = {}) {\n if (!service) {\n log.warn(\n 'Attempting to register a null/undefined service. Exiting early.'\n );\n return;\n }\n\n if (!service.name) {\n log.warn(`Service name not set. Exiting early.`);\n return;\n }\n\n if (this.registeredServiceNames.includes(service.name)) {\n log.warn(\n `Service name ${service.name} has already been registered. Exiting before duplicating services.`\n );\n return;\n }\n\n if (service.create) {\n this.services[service.name] = service.create({\n configuration,\n commandsManager: this._commandsManager,\n servicesManager: this,\n });\n } else {\n log.warn(`Service create factory function not defined. Exiting early.`);\n return;\n }\n\n /* Track service registration */\n this.registeredServiceNames.push(service.name);\n }\n\n /**\n * An array of services, or an array of arrays that contains service\n * configuration pairs.\n *\n * @param {Object[]} services - Array of services\n */\n registerServices(services) {\n services.forEach(service => {\n const hasConfiguration = Array.isArray(service);\n\n if (hasConfiguration) {\n const [ohifService, configuration] = service;\n this.registerService(ohifService, configuration);\n } else {\n this.registerService(service);\n }\n });\n }\n}\n","import merge from 'lodash.merge';\nimport pubSubServiceInterface from '../_shared/pubSubServiceInterface';\n\nconst EVENTS = {\n TOOL_BAR_MODIFIED: 'event::toolBarService:toolBarModified',\n TOOL_BAR_STATE_MODIFIED: 'event::toolBarService:toolBarStateModified',\n};\n\nexport default class ToolBarService {\n constructor(commandsManager) {\n this._commandsManager = commandsManager;\n //\n this.EVENTS = EVENTS;\n this.listeners = {};\n this.buttons = {};\n this.unsubscriptions = []; // if tools need to unsubscribe from events\n this.buttonSections = {\n /**\n * primary: ['Zoom', 'Wwwc'],\n * secondary: ['Length', 'RectangleRoi']\n */\n };\n\n // TODO: Do we need to track per context? Or do we allow for a mixed\n // definition that adapts based on context?\n this.state = {\n primaryToolId: 'WindowLevel',\n toggles: {\n /* id: true/false */\n },\n groups: {\n /* track most recent click per group...? */\n },\n };\n\n Object.assign(this, pubSubServiceInterface);\n }\n\n init(extensionManager) {\n this.extensionManager = extensionManager;\n }\n\n reset() {\n this.unsubscriptions.forEach(unsub => unsub());\n this.state = {\n primaryToolId: 'WindowLevel',\n toggles: {},\n groups: {},\n };\n this.unsubscriptions = [];\n this.buttonSections = {};\n this.buttons = {};\n }\n\n /**\n *\n * @param {*} interaction\n */\n recordInteraction(interaction) {\n const commandsManager = this._commandsManager;\n const { groupId, itemId, interactionType, commands } = interaction;\n\n switch (interactionType) {\n case 'action': {\n commands.forEach(({ commandName, commandOptions, context }) => {\n if (commandName) {\n commandsManager.runCommand(commandName, commandOptions, context);\n }\n });\n break;\n }\n case 'tool': {\n try {\n commands.forEach(\n ({ commandName = 'setToolActive', commandOptions, context }) => {\n commandsManager.runCommand(commandName, commandOptions, context);\n }\n );\n\n // only set the primary tool if no error was thrown\n this.state.primaryToolId = itemId;\n } catch (error) {\n console.warn(error);\n }\n\n break;\n }\n case 'toggle': {\n const { commands } = interaction;\n let commandExecuted;\n\n // only toggle if a command was executed\n this.state.toggles[itemId] =\n this.state.toggles[itemId] === undefined\n ? true\n : !this.state.toggles[itemId];\n\n if (!commands) {\n break;\n }\n\n commands.forEach(({ commandName, commandOptions, context }) => {\n if (!commandOptions) {\n commandOptions = {};\n }\n\n if (commandName) {\n commandOptions.toggledState = this.state.toggles[itemId];\n\n try {\n commandsManager.runCommand(commandName, commandOptions, context);\n commandExecuted = true;\n } catch (error) {\n console.warn(error);\n }\n }\n });\n\n if (!commandExecuted) {\n // If no command was executed, we need to toggle the state back\n this.state.toggles[itemId] = !this.state.toggles[itemId];\n }\n\n break;\n }\n default:\n throw new Error(`Invalid interaction type: ${interactionType}`);\n }\n\n // Todo: comment out for now\n // Run command if there's one associated\n //\n // NOTE: Should probably just do this for tools as well?\n // But would be nice if we could enforce at least the command name?\n // let unsubscribe;\n // if (commandName) {\n // unsubscribe = commandsManager.runCommand(commandName, commandOptions);\n // }\n\n // // Storing the unsubscribe for later reseting\n // if (unsubscribe && typeof unsubscribe === 'function') {\n // if (this.unsubscriptions.indexOf(unsubscribe) === -1) {\n // this.unsubscriptions.push(unsubscribe);\n // }\n // }\n\n // Track last touched id for each group\n if (groupId) {\n this.state.groups[groupId] = itemId;\n }\n\n this._broadcastEvent(this.EVENTS.TOOL_BAR_STATE_MODIFIED, {});\n }\n\n getButtons() {\n return this.buttons;\n }\n\n getActiveTools() {\n return [this.state.primaryToolId, ...Object.keys(this.state.toggles)];\n }\n\n setButton(id, button) {\n if (this.buttons[id]) {\n this.buttons[id] = merge(this.buttons[id], button);\n this._broadcastEvent(this.EVENTS.TOOL_BAR_MODIFIED, {\n buttons: this.buttons,\n button: this.buttons[id],\n buttonSections: this.buttonSections,\n });\n }\n }\n\n setButtons(buttons) {\n this.buttons = buttons;\n this._broadcastEvent(this.EVENTS.TOOL_BAR_MODIFIED, {\n buttons: this.buttons,\n buttonSections: this.buttonSections,\n });\n }\n\n _buttonTypes() {\n const buttonTypes = {};\n const registeredToolbarModules = this.extensionManager.modules[\n 'toolbarModule'\n ];\n\n if (\n Array.isArray(registeredToolbarModules) &&\n registeredToolbarModules.length\n ) {\n registeredToolbarModules.forEach(toolbarModule =>\n toolbarModule.module.forEach(def => {\n buttonTypes[def.name] = def;\n })\n );\n }\n\n return buttonTypes;\n }\n\n createButtonSection(key, buttons) {\n // Maybe do this mapping at time of return, instead of time of create\n // Props check important for validation here...\n\n this.buttonSections[key] = buttons;\n this._broadcastEvent(this.EVENTS.TOOL_BAR_MODIFIED, {});\n }\n\n /**\n *\n * Finds a button section by it's name, then maps the list of string name\n * identifiers to schema/values that can be used to render the buttons.\n *\n * @param {string} key\n * @param {*} props\n */\n getButtonSection(key, props) {\n const buttonSectionIds = this.buttonSections[key];\n const buttonsInSection = [];\n\n if (buttonSectionIds && buttonSectionIds.length !== 0) {\n buttonSectionIds.forEach(btnId => {\n const btn = this.buttons[btnId];\n const metadata = {};\n const mappedBtn = this._mapButtonToDisplay(btn, key, metadata, props);\n\n buttonsInSection.push(mappedBtn);\n });\n }\n\n return buttonsInSection;\n }\n\n /**\n *\n * @param {object[]} buttons\n * @param {string} buttons[].id\n */\n addButtons(buttons) {\n buttons.forEach(button => {\n if (!this.buttons[button.id]) {\n this.buttons[button.id] = button;\n }\n });\n\n this._broadcastEvent(this.EVENTS.TOOL_BAR_MODIFIED, {});\n }\n\n /**\n *\n * @param {*} btn\n * @param {*} btnSection\n * @param {*} metadata\n * @param {*} props - Props set by the Viewer layer\n */\n _mapButtonToDisplay(btn, btnSection, metadata, props) {\n const { id, type, component } = btn;\n const buttonType = this._buttonTypes()[type];\n\n if (!buttonType) {\n return;\n }\n\n return {\n id,\n Component: component || buttonType.defaultComponent,\n componentProps: Object.assign({}, btn.props, props),\n };\n }\n}\n","import ToolBarService from './ToolBarService';\n\nexport default {\n name: 'ToolBarService',\n create: ({ configuration = {}, commandsManager }) => {\n return new ToolBarService(commandsManager);\n },\n};\n","/**\n * A UI Element Position\n *\n * @typedef {Object} ElementPosition\n * @property {number} top -\n * @property {number} left -\n * @property {number} right -\n * @property {number} bottom -\n */\n\n/**\n * UI Dialog\n *\n * @typedef {Object} DialogProps\n * @property {string} id The dialog id.\n * @property {ReactElement|HTMLElement} content The dialog content.\n * @property {Object} contentProps The dialog content props.\n * @property {boolean} [isDraggable=true] Controls if dialog content is draggable or not.\n * @property {boolean} [showOverlay=false] Controls dialog overlay.\n * @property {boolean} [centralize=false] Center the dialog on the screen.\n * @property {boolean} [preservePosition=true] Use last position instead of default.\n * @property {ElementPosition} defaultPosition Specifies the `x` and `y` that the dragged item should start at.\n * @property {Function} onStart Called when dragging starts. If `false` is returned any handler, the action will cancel.\n * @property {Function} onStop Called when dragging stops.\n * @property {Function} onDrag Called while dragging.\n */\n\nconst name = 'UIDialogService';\n\nconst publicAPI = {\n name,\n dismiss: _dismiss,\n dismissAll: _dismissAll,\n create: _create,\n setServiceImplementation,\n};\n\nconst serviceImplementation = {\n _dismiss: () => console.warn('dismiss() NOT IMPLEMENTED'),\n _dismissAll: () => console.warn('dismissAll() NOT IMPLEMENTED'),\n _create: () => console.warn('create() NOT IMPLEMENTED'),\n};\n\n/**\n * Show a new UI dialog;\n *\n * @param {DialogProps} props { id, content, contentProps, onStart, onDrag, onStop, centralize, isDraggable, showOverlay, preservePosition, defaultPosition }\n */\nfunction _create({\n id,\n content,\n contentProps,\n onStart,\n onDrag,\n onStop,\n centralize = false,\n preservePosition = true,\n isDraggable = true,\n showOverlay = false,\n onClickOutside,\n defaultPosition,\n}) {\n return serviceImplementation._create({\n id,\n content,\n contentProps,\n onStart,\n onDrag,\n onStop,\n centralize,\n preservePosition,\n isDraggable,\n onClickOutside,\n showOverlay,\n defaultPosition,\n });\n}\n\n/**\n * Destroys all dialogs, if any\n *\n * @returns void\n */\nfunction _dismissAll() {\n return serviceImplementation._dismissAll();\n}\n\n/**\n * Destroy the dialog, if currently created\n *\n * @returns void\n */\nfunction _dismiss({ id }) {\n return serviceImplementation._dismiss({ id });\n}\n\n/**\n *\n *\n * @param {*} {\n * dismiss: dismissImplementation,\n * dismissAll: dismissAllImplementation,\n * create: createImplementation,\n * }\n */\nfunction setServiceImplementation({\n dismiss: dismissImplementation,\n dismissAll: dismissAllImplementation,\n create: createImplementation,\n}) {\n if (dismissImplementation) {\n serviceImplementation._dismiss = dismissImplementation;\n }\n if (dismissAllImplementation) {\n serviceImplementation._dismissAll = dismissAllImplementation;\n }\n if (createImplementation) {\n serviceImplementation._create = createImplementation;\n }\n}\n\nexport default {\n name,\n create: ({ configuration = {} }) => {\n return publicAPI;\n },\n};\n","/**\n * UI Modal\n *\n * @typedef {Object} ModalProps\n * @property {ReactElement|HTMLElement} [content=null] Modal content.\n * @property {Object} [contentProps=null] Modal content props.\n * @property {boolean} [shouldCloseOnEsc=false] Modal is dismissible via the esc key.\n * @property {boolean} [isOpen=true] Make the Modal visible or hidden.\n * @property {boolean} [closeButton=true] Should the modal body render the close button.\n * @property {string} [title=null] Should the modal render the title independently of the body content.\n * @property {string} [customClassName=null] The custom class to style the modal.\n */\n\nconst name = 'UIModalService';\n\nconst publicAPI = {\n name,\n hide: _hide,\n show: _show,\n setServiceImplementation,\n};\n\nconst serviceImplementation = {\n _hide: () => console.warn('hide() NOT IMPLEMENTED'),\n _show: () => console.warn('show() NOT IMPLEMENTED'),\n};\n\n/**\n * Show a new UI modal;\n *\n * @param {ModalProps} props { content, contentProps, shouldCloseOnEsc, isOpen, closeButton, title, customClassName }\n */\nfunction _show({\n content = null,\n contentProps = null,\n shouldCloseOnEsc = true,\n isOpen = true,\n closeButton = true,\n title = null,\n customClassName = null,\n}) {\n return serviceImplementation._show({\n content,\n contentProps,\n shouldCloseOnEsc,\n isOpen,\n closeButton,\n title,\n customClassName,\n });\n}\n\n/**\n * Hides/dismisses the modal, if currently shown\n *\n * @returns void\n */\nfunction _hide() {\n return serviceImplementation._hide();\n}\n\n/**\n *\n *\n * @param {*} {\n * hide: hideImplementation,\n * show: showImplementation,\n * }\n */\nfunction setServiceImplementation({\n hide: hideImplementation,\n show: showImplementation,\n}) {\n if (hideImplementation) {\n serviceImplementation._hide = hideImplementation;\n }\n if (showImplementation) {\n serviceImplementation._show = showImplementation;\n }\n}\n\nexport default {\n name,\n create: ({ configuration = {} }) => {\n return publicAPI;\n },\n};\n","/**\n * A UI Notification\n *\n * @typedef {Object} Notification\n * @property {string} title -\n * @property {string} message -\n * @property {number} [duration=5000] - in ms\n * @property {string} [position=\"bottomRight\"] -\"topLeft\" | \"topCenter | \"topRight\" | \"bottomLeft\" | \"bottomCenter\" | \"bottomRight\"\n * @property {string} [type=\"info\"] - \"info\" | \"error\" | \"warning\" | \"success\"\n * @property {boolean} [autoClose=true]\n */\n\nconst name = 'UINotificationService';\n\nconst serviceShowRequestQueue = [];\n\nconst publicAPI = {\n name,\n hide: _hide,\n show: _show,\n setServiceImplementation,\n};\n\nconst serviceImplementation = {\n _hide: () => console.warn('hide() NOT IMPLEMENTED'),\n _show: showArguments => {\n serviceShowRequestQueue.push(showArguments);\n\n console.warn('show() NOT IMPLEMENTED');\n },\n};\n\n/**\n * Create and show a new UI notification; returns the\n * ID of the created notification.\n *\n * @param {Notification} notification { title, message, duration, position, type, autoClose}\n * @returns {number} id\n */\nfunction _show({\n title,\n message,\n duration = 5000,\n position = 'bottomRight',\n type = 'info',\n autoClose = true,\n}) {\n return serviceImplementation._show({\n title,\n message,\n duration,\n position,\n type,\n autoClose,\n });\n}\n\n/**\n * Hides/dismisses the notification, if currently shown\n *\n * @param {number} id - id of the notification to hide/dismiss\n * @returns undefined\n */\nfunction _hide(id) {\n return serviceImplementation._hide({ id });\n}\n\n/**\n *\n *\n * @param {*} {\n * hide: hideImplementation,\n * show: showImplementation,\n * }\n */\nfunction setServiceImplementation({\n hide: hideImplementation,\n show: showImplementation,\n}) {\n if (hideImplementation) {\n serviceImplementation._hide = hideImplementation;\n }\n if (showImplementation) {\n serviceImplementation._show = showImplementation;\n\n while (serviceShowRequestQueue.length > 0) {\n const showArguments = serviceShowRequestQueue.pop();\n serviceImplementation._show(showArguments);\n }\n }\n}\n\nexport default {\n name,\n create: ({ configuration = {} }) => {\n return publicAPI;\n },\n};\n","/**\n * Viewport Dialog\n *\n * @typedef {Object} ViewportDialogProps\n * @property {ReactElement|HTMLElement} [content=null] Modal content.\n * @property {Object} [contentProps=null] Modal content props.\n * @property {boolean} [viewportIndex=false] Modal is dismissible via the esc key.\n */\n\nconst name = 'UIViewportDialogService';\n\nconst publicAPI = {\n name,\n hide: _hide,\n show: _show,\n setServiceImplementation,\n};\n\nconst serviceImplementation = {\n _hide: () => console.warn('hide() NOT IMPLEMENTED'),\n _show: () => console.warn('show() NOT IMPLEMENTED'),\n};\n\n/**\n * Show a new UI viewport dialog on the specified viewportIndex;\n *\n * @param {ViewportDialogProps} props { content, contentProps, viewportIndex }\n */\nfunction _show({\n viewportIndex,\n id,\n type,\n message,\n actions,\n onSubmit,\n onOutsideClick,\n}) {\n return serviceImplementation._show({\n viewportIndex,\n id,\n type,\n message,\n actions,\n onSubmit,\n onOutsideClick,\n });\n}\n\n/**\n * Hides/dismisses the viewport dialog, if currently shown\n */\nfunction _hide() {\n return serviceImplementation._hide();\n}\n\n/**\n *\n *\n * @param {*} {\n * hide: hideImplementation,\n * show: showImplementation,\n * viewportIndex,\n * }\n */\nfunction setServiceImplementation({\n hide: hideImplementation,\n show: showImplementation,\n}) {\n if (hideImplementation) {\n serviceImplementation._hide = hideImplementation;\n }\n if (showImplementation) {\n serviceImplementation._show = showImplementation;\n }\n}\n\nexport default {\n name,\n create: ({ configuration = {} }) => {\n return publicAPI;\n },\n};\n","const name = 'UserAuthenticationService';\n\nconst publicAPI = {\n name,\n getState: _getState,\n setUser: _setUser,\n getUser: _getUser,\n getAuthorizationHeader: _getAuthorizationHeader,\n handleUnauthenticated: _handleUnauthenticated,\n setServiceImplementation,\n reset: _reset,\n set: _set,\n};\n\nconst serviceImplementation = {\n _getState: () => console.warn('getState() NOT IMPLEMENTED'),\n _setUser: () => console.warn('_setUser() NOT IMPLEMENTED'),\n _getUser: () => console.warn('_setUser() NOT IMPLEMENTED'),\n _getAuthorizationHeader: () => {}, // TODO: have enabled/disabled state?\n //console.warn('_getAuthorizationHeader() NOT IMPLEMENTED'),\n _handleUnauthenticated: () =>\n console.warn('_handleUnauthenticated() NOT IMPLEMENTED'),\n _reset: () => console.warn('reset() NOT IMPLEMENTED'),\n _set: () => console.warn('set() NOT IMPLEMENTED'),\n};\n\nfunction _getState() {\n return serviceImplementation._getState();\n}\n\nfunction _setUser(user) {\n return serviceImplementation._setUser(user);\n}\n\nfunction _getUser() {\n return serviceImplementation._getUser();\n}\n\nfunction _getAuthorizationHeader() {\n return serviceImplementation._getAuthorizationHeader();\n}\n\nfunction _handleUnauthenticated() {\n return serviceImplementation._handleUnauthenticated();\n}\n\nfunction _set(state) {\n return serviceImplementation._set(state);\n}\n\nfunction _reset() {\n return serviceImplementation._reset({});\n}\n\nfunction setServiceImplementation({\n getState: getStateImplementation,\n setUser: setUserImplementation,\n getUser: getUserImplementation,\n getAuthorizationHeader: getAuthorizationHeaderImplementation,\n handleUnauthenticated: handleUnauthenticatedImplementation,\n reset: resetImplementation,\n set: setImplementation,\n}) {\n if (getStateImplementation) {\n serviceImplementation._getState = getStateImplementation;\n }\n if (setUserImplementation) {\n serviceImplementation._setUser = setUserImplementation;\n }\n if (getUserImplementation) {\n serviceImplementation._getUser = getUserImplementation;\n }\n if (getAuthorizationHeaderImplementation) {\n serviceImplementation._getAuthorizationHeader = getAuthorizationHeaderImplementation;\n }\n if (handleUnauthenticatedImplementation) {\n serviceImplementation._handleUnauthenticated = handleUnauthenticatedImplementation;\n }\n if (resetImplementation) {\n serviceImplementation._reset = resetImplementation;\n }\n if (setImplementation) {\n serviceImplementation._set = setImplementation;\n }\n}\n\nexport default {\n name,\n create: ({ configuration = {} }) => {\n return publicAPI;\n },\n};\n","import UserAuthenticationService from './UserAuthenticationService';\n\nexport default UserAuthenticationService;\n","import pubSubServiceInterface from './../_shared/pubSubServiceInterface';\n\nconst EVENTS = {\n ACTIVE_VIEWPORT_INDEX_CHANGED: 'event::activeviewportindexchanged',\n};\n\nclass ViewportGridService {\n serviceImplementation = {};\n EVENTS: { [key: string]: string };\n listeners = {};\n\n constructor() {\n Object.assign(this, pubSubServiceInterface);\n this.serviceImplementation = {};\n this.EVENTS = EVENTS;\n }\n\n setServiceImplementation({\n getState: getStateImplementation,\n setActiveViewportIndex: setActiveViewportIndexImplementation,\n setDisplaySetsForViewport: setDisplaySetsForViewportImplementation,\n setDisplaySetsForViewports: setDisplaySetsForViewportsImplementation,\n setCachedLayout: setCachedLayoutImplementation,\n restoreCachedLayout: restoreCachedLayoutImplementation,\n setLayout: setLayoutImplementation,\n reset: resetImplementation,\n set: setImplementation,\n }) {\n if (getStateImplementation) {\n this.serviceImplementation._getState = getStateImplementation;\n }\n if (setActiveViewportIndexImplementation) {\n this.serviceImplementation._setActiveViewportIndex = setActiveViewportIndexImplementation;\n }\n if (setDisplaySetsForViewportImplementation) {\n this.serviceImplementation._setDisplaySetsForViewport = setDisplaySetsForViewportImplementation;\n }\n if (setDisplaySetsForViewportsImplementation) {\n this.serviceImplementation._setDisplaySetsForViewports = setDisplaySetsForViewportsImplementation;\n }\n if (setLayoutImplementation) {\n this.serviceImplementation._setLayout = setLayoutImplementation;\n }\n if (resetImplementation) {\n this.serviceImplementation._reset = resetImplementation;\n }\n if (setCachedLayoutImplementation) {\n this.serviceImplementation._setCachedLayout = setCachedLayoutImplementation;\n }\n if (restoreCachedLayoutImplementation) {\n this.serviceImplementation._restoreCachedLayout = restoreCachedLayoutImplementation;\n }\n if (setImplementation) {\n this.serviceImplementation._set = setImplementation;\n }\n }\n\n public setActiveViewportIndex(index) {\n this.serviceImplementation._setActiveViewportIndex(index);\n this._broadcastEvent(this.EVENTS.ACTIVE_VIEWPORT_INDEX_CHANGED, {\n viewportIndex: index,\n });\n }\n\n public getState() {\n return this.serviceImplementation._getState();\n }\n\n public setDisplaySetsForViewport({\n viewportIndex,\n displaySetInstanceUIDs,\n viewportOptions,\n displaySetOptions,\n }) {\n this.serviceImplementation._setDisplaySetsForViewport({\n viewportIndex,\n displaySetInstanceUIDs,\n viewportOptions,\n displaySetOptions,\n });\n }\n\n public setDisplaySetsForViewports(viewports) {\n this.serviceImplementation._setDisplaySetsForViewports(viewports);\n }\n\n public setLayout({ numCols, numRows }) {\n this.serviceImplementation._setLayout({ numCols, numRows });\n }\n\n public reset() {\n this.serviceImplementation._reset();\n }\n\n public setCachedLayout({ cacheId, cachedLayout }) {\n this.serviceImplementation._setCachedLayout({ cacheId, cachedLayout });\n }\n\n public restoreCachedLayout(cacheId) {\n this.serviceImplementation._restoreCachedLayout(cacheId);\n }\n\n public set(state) {\n this.serviceImplementation._set(state);\n }\n}\n\nexport default {\n name: 'ViewportGridService',\n create: ({ configuration = {} }) => {\n return new ViewportGridService();\n },\n};\n","import ViewportGridService from './ViewportGridService';\n\nexport default ViewportGridService;\n","import guid from '../../utils/guid';\n\n/**\n * Consumer must implement:\n * this.listeners = {}\n * this.EVENTS = { \"EVENT_KEY\": \"EVENT_VALUE\" }\n */\nexport default {\n subscribe,\n _broadcastEvent,\n _unsubscribe,\n _isValidEvent,\n};\n\n/**\n * Subscribe to updates.\n *\n * @param {string} eventName The name of the event\n * @param {Function} callback Events callback\n * @return {Object} Observable object with actions\n */\nfunction subscribe(eventName, callback) {\n if (this._isValidEvent(eventName)) {\n const listenerId = guid();\n const subscription = { id: listenerId, callback };\n\n console.info(`Subscribing to '${eventName}'.`);\n if (Array.isArray(this.listeners[eventName])) {\n this.listeners[eventName].push(subscription);\n } else {\n this.listeners[eventName] = [subscription];\n }\n\n return {\n unsubscribe: () => this._unsubscribe(eventName, listenerId),\n };\n } else {\n throw new Error(`Event ${eventName} not supported.`);\n }\n}\n\n/**\n * Unsubscribe to measurement updates.\n *\n * @param {string} eventName The name of the event\n * @param {string} listenerId The listeners id\n * @return void\n */\nfunction _unsubscribe(eventName, listenerId) {\n if (!this.listeners[eventName]) {\n return;\n }\n\n const listeners = this.listeners[eventName];\n if (Array.isArray(listeners)) {\n this.listeners[eventName] = listeners.filter(({ id }) => id !== listenerId);\n } else {\n this.listeners[eventName] = undefined;\n }\n}\n\n/**\n * Check if a given event is valid.\n *\n * @param {string} eventName The name of the event\n * @return {boolean} Event name validation\n */\nfunction _isValidEvent(eventName) {\n return Object.values(this.EVENTS).includes(eventName);\n}\n\n/**\n * Broadcasts changes.\n *\n * @param {string} eventName - The event name\n * @param {func} callbackProps - Properties to pass callback\n * @return void\n */\nfunction _broadcastEvent(eventName, callbackProps) {\n const hasListeners = Object.keys(this.listeners).length > 0;\n const hasCallbacks = Array.isArray(this.listeners[eventName]);\n\n if (hasListeners && hasCallbacks) {\n this.listeners[eventName].forEach(listener => {\n listener.callback(callbackProps);\n });\n }\n}\n","/**\n * Create a random GUID\n *\n * @return {string}\n */\nconst guid = () => {\n const getFourRandomValues = () => {\n return Math.floor((1 + Math.random()) * 0x10000)\n .toString(16)\n .substring(1);\n };\n return (\n getFourRandomValues() +\n getFourRandomValues() +\n '-' +\n getFourRandomValues() +\n '-' +\n getFourRandomValues() +\n '-' +\n getFourRandomValues() +\n '-' +\n getFourRandomValues() +\n getFourRandomValues() +\n getFourRandomValues()\n );\n};\n\nexport default guid;\n","/**\n * adds a pause and unpause method to Mousetrap\n * this allows you to enable or disable keyboard shortcuts\n * without having to reset Mousetrap and rebind everything\n *\n * https://github.com/ccampbell/mousetrap/blob/master/plugins/pause/mousetrap-pause.js\n */\nexport default function pausePlugin(Mousetrap) {\n var _originalStopCallback = Mousetrap.prototype.stopCallback;\n\n Mousetrap.prototype.stopCallback = function(e, element, combo) {\n var self = this;\n\n if (self.paused) {\n return true;\n }\n\n return _originalStopCallback.call(self, e, element, combo);\n };\n\n Mousetrap.prototype.pause = function() {\n var self = this;\n self.paused = true;\n };\n\n Mousetrap.prototype.unpause = function() {\n var self = this;\n self.paused = false;\n };\n\n Mousetrap.init();\n}\n","/**\n * This extension allows you to record a sequence using Mousetrap.\n *\n * @author Dan Tao \n */\nexport default function recordPlugin(Mousetrap, options = { timeout: 100 }) {\n /**\n * the sequence currently being recorded\n *\n * @type {Array}\n */\n var _recordedSequence = [],\n /**\n * a callback to invoke after recording a sequence\n *\n * @type {Function|null}\n */\n _recordedSequenceCallback = null,\n /**\n * a list of all of the keys currently held down\n *\n * @type {Array}\n */\n _currentRecordedKeys = [],\n /**\n * temporary state where we remember if we've already captured a\n * character key in the current combo\n *\n * @type {boolean}\n */\n _recordedCharacterKey = false,\n /**\n * a handle for the timer of the current recording\n *\n * @type {null|number}\n */\n _recordTimer = null,\n /**\n * the original handleKey method to override when Mousetrap.record() is\n * called\n *\n * @type {Function}\n */\n _origHandleKey = Mousetrap.prototype.handleKey;\n\n /**\n * handles a character key event\n *\n * @param {string} character\n * @param {Array} modifiers\n * @param {Event} e\n * @returns void\n */\n function _handleKey(character, modifiers, e) {\n var self = this;\n\n if (!self.recording) {\n _origHandleKey.apply(self, arguments);\n return;\n }\n\n // remember this character if we're currently recording a sequence\n if (e.type == 'keydown') {\n if (character.length === 1 && _recordedCharacterKey) {\n _recordCurrentCombo();\n }\n\n for (let i = 0; i < modifiers.length; ++i) {\n _recordKey(modifiers[i]);\n }\n _recordKey(character);\n\n // once a key is released, all keys that were held down at the time\n // count as a keypress\n } else if (e.type == 'keyup' && _currentRecordedKeys.length > 0) {\n _recordCurrentCombo();\n }\n }\n\n /**\n * marks a character key as held down while recording a sequence\n *\n * @param {string} key\n * @returns void\n */\n function _recordKey(key) {\n // one-off implementation of Array.indexOf, since IE6-9 don't support it\n for (let i = 0; i < _currentRecordedKeys.length; ++i) {\n if (_currentRecordedKeys[i] === key) {\n return;\n }\n }\n\n _currentRecordedKeys.push(key);\n\n if (key.length === 1) {\n _recordedCharacterKey = true;\n }\n }\n\n /**\n * marks whatever key combination that's been recorded so far as finished\n * and gets ready for the next combo\n *\n * @returns void\n */\n function _recordCurrentCombo() {\n _recordedSequence.push(_currentRecordedKeys);\n _currentRecordedKeys = [];\n _recordedCharacterKey = false;\n _restartRecordTimer();\n }\n\n /**\n * ensures each combo in a sequence is in a predictable order and formats\n * key combos to be '+'-delimited\n *\n * modifies the sequence in-place\n *\n * @param {Array} sequence\n * @returns void\n */\n function _normalizeSequence(sequence) {\n for (let i = 0; i < sequence.length; ++i) {\n sequence[i].sort(function(x, y) {\n // modifier keys always come first, in alphabetical order\n if (x.length > 1 && y.length === 1) {\n return -1;\n } else if (x.length === 1 && y.length > 1) {\n return 1;\n }\n\n // character keys come next (list should contain no duplicates,\n // so no need for equality check)\n return x > y ? 1 : -1;\n });\n\n sequence[i] = sequence[i].join('+');\n }\n }\n\n /**\n * finishes the current recording, passes the recorded sequence to the stored\n * callback, and sets Mousetrap.handleKey back to its original function\n *\n * @returns void\n */\n function _finishRecording() {\n if (_recordedSequenceCallback) {\n _normalizeSequence(_recordedSequence);\n _recordedSequenceCallback(_recordedSequence);\n }\n\n // reset all recorded state\n _recordedSequence = [];\n _recordedSequenceCallback = null;\n _currentRecordedKeys = [];\n }\n\n /**\n * called to set a 1 second timeout on the current recording\n *\n * this is so after each key press in the sequence the recording will wait for\n * 1 more second before executing the callback\n *\n * @returns void\n */\n function _restartRecordTimer() {\n clearTimeout(_recordTimer);\n _recordTimer = setTimeout(_finishRecording, options.timeout);\n }\n\n /**\n * records the next sequence and passes it to a callback once it's\n * completed\n *\n * @param {Function} callback\n * @returns void\n */\n Mousetrap.prototype.record = function(callback) {\n var self = this;\n self.recording = true;\n _recordedSequenceCallback = function() {\n self.recording = false;\n callback.apply(self, arguments);\n };\n };\n\n /**\n * stop recording\n *\n * @param {Function} callback\n * @returns void\n */\n Mousetrap.prototype.stopRecord = function() {\n var self = this;\n self.recording = false;\n };\n\n /**\n * start recording\n *\n * @param {Function} callback\n * @returns void\n */\n Mousetrap.prototype.startRecording = function() {\n var self = this;\n self.recording = true;\n };\n Mousetrap.prototype.handleKey = function() {\n var self = this;\n _handleKey.apply(self, arguments);\n };\n\n Mousetrap.init();\n}\n","import Mousetrap from 'mousetrap';\nimport pausePlugin from './pausePlugin';\nimport recordPlugin from './recordPlugin';\n\nrecordPlugin(Mousetrap);\npausePlugin(Mousetrap);\n\nexport default Mousetrap;\n","/**\n * Removes the data loader scheme from the imageId\n *\n * @param {string} imageId Image ID\n * @returns {string} imageId without the data loader scheme\n * @memberof Cache\n */\nexport default function imageIdToURI(imageId) {\n const colonIndex = imageId.indexOf(':');\n\n return imageId.substring(colonIndex + 1);\n}\n","export class ObjectPath {\n /**\n * Set an object property based on \"path\" (namespace) supplied creating\n * ... intermediary objects if they do not exist.\n * @param object {Object} An object where the properties specified on path should be set.\n * @param path {String} A string representing the property to be set, e.g. \"user.study.series.timepoint\".\n * @param value {Any} The value of the property that will be set.\n * @return {Boolean} Returns \"true\" on success, \"false\" if any intermediate component of the supplied path\n * ... is not a valid Object, in which case the property cannot be set. No excpetions are thrown.\n */\n static set(object, path, value) {\n let components = ObjectPath.getPathComponents(path),\n length = components !== null ? components.length : 0,\n result = false;\n\n if (length > 0 && ObjectPath.isValidObject(object)) {\n let i = 0,\n last = length - 1,\n currentObject = object;\n\n while (i < last) {\n let field = components[i];\n\n if (field in currentObject) {\n if (!ObjectPath.isValidObject(currentObject[field])) {\n break;\n }\n } else {\n currentObject[field] = {};\n }\n\n currentObject = currentObject[field];\n i++;\n }\n\n if (i === last) {\n currentObject[components[last]] = value;\n result = true;\n }\n }\n\n return result;\n }\n\n /**\n * Get an object property based on \"path\" (namespace) supplied traversing the object\n * ... tree as necessary.\n * @param object {Object} An object where the properties specified might exist.\n * @param path {String} A string representing the property to be searched for, e.g. \"user.study.series.timepoint\".\n * @return {Any} The value of the property if found. By default, returns the special type \"undefined\".\n */\n static get(object, path) {\n let found, // undefined by default\n components = ObjectPath.getPathComponents(path),\n length = components !== null ? components.length : 0;\n\n if (length > 0 && ObjectPath.isValidObject(object)) {\n let i = 0,\n last = length - 1,\n currentObject = object;\n\n while (i < last) {\n let field = components[i];\n\n const isValid = ObjectPath.isValidObject(currentObject[field]);\n if (field in currentObject && isValid) {\n currentObject = currentObject[field];\n i++;\n } else {\n break;\n }\n }\n\n if (i === last && components[last] in currentObject) {\n found = currentObject[components[last]];\n }\n }\n\n return found;\n }\n\n /**\n * Check if the supplied argument is a real JavaScript Object instance.\n * @param object {Any} The subject to be tested.\n * @return {Boolean} Returns \"true\" if the object is a real Object instance and \"false\" otherwise.\n */\n static isValidObject(object) {\n return (\n typeof object === 'object' && object !== null && object instanceof Object\n );\n }\n\n static getPathComponents(path) {\n return typeof path === 'string' ? path.split('.') : null;\n }\n}\n\nexport default ObjectPath;\n","const absoluteUrl = path => {\n let absolutePath = '/';\n\n if (!path) return absolutePath;\n\n // TODO: Find another way to get root url\n const absoluteUrl = window.location.origin;\n const absoluteUrlParts = absoluteUrl.split('/');\n\n if (absoluteUrlParts.length > 4) {\n const rootUrlPrefixIndex = absoluteUrl.indexOf(absoluteUrlParts[3]);\n absolutePath += absoluteUrl.substring(rootUrlPrefixIndex) + path;\n } else {\n absolutePath += path;\n }\n\n return absolutePath.replace(/\\/\\/+/g, '/');\n};\n\nexport default absoluteUrl;\n","/*\n * Sorting function\n * Sorts an array by seriesDate and seriesNumber if equal\n */\nconst sortBySeriesDate = array =>\n array.sort((a, b) => {\n if (a.seriesNumber !== b.seriesNumber) {\n return a.seriesNumber - b.seriesNumber;\n }\n\n const seriesDateA = Date.parse(a.seriesDate);\n const seriesDateB = Date.parse(b.seriesDate);\n\n return seriesDateA - seriesDateB;\n });\n\nexport default sortBySeriesDate;\n","/* Enabled JPEG images downloading on IE11. */\nconst b64toBlob = (b64Data, contentType = '', sliceSize = 512) => {\n const byteCharacters = atob(b64Data);\n const byteArrays = [];\n\n for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {\n const slice = byteCharacters.slice(offset, offset + sliceSize);\n\n const byteNumbers = new Array(slice.length);\n for (let i = 0; i < slice.length; i++) {\n byteNumbers[i] = slice.charCodeAt(i);\n }\n\n const byteArray = new Uint8Array(byteNumbers);\n byteArrays.push(byteArray);\n }\n\n const blob = new Blob(byteArrays, { type: contentType });\n return blob;\n};\n\nexport default b64toBlob;\n","import lib from 'query-string';\n\nconst PARAM_SEPARATOR = ';';\nconst PARAM_PATTERN_IDENTIFIER = ':';\n\nfunction toLowerCaseFirstLetter(word) {\n return word[0].toLowerCase() + word.slice(1);\n}\nconst getQueryFilters = (location = {}) => {\n const { search } = location;\n\n if (!search) {\n return;\n }\n\n const searchParameters = parse(search);\n const filters = {};\n\n Object.entries(searchParameters).forEach(([key, value]) => {\n filters[toLowerCaseFirstLetter(key)] = value;\n });\n\n return filters;\n};\n\nconst decode = (strToDecode = '') => {\n try {\n const decoded = window.atob(strToDecode);\n return decoded;\n } catch (e) {\n return strToDecode;\n }\n};\n\nconst parse = toParse => {\n if (toParse) {\n return lib.parse(toParse);\n }\n\n return {};\n};\nconst parseParam = paramStr => {\n const _paramDecoded = decode(paramStr);\n if (_paramDecoded && typeof _paramDecoded === 'string') {\n return _paramDecoded.split(PARAM_SEPARATOR);\n }\n};\n\nconst replaceParam = (path = '', paramKey, paramValue) => {\n const paramPattern = `${PARAM_PATTERN_IDENTIFIER}${paramKey}`;\n if (paramValue) {\n return path.replace(paramPattern, paramValue);\n }\n\n return path;\n};\n\nconst isValidPath = path => {\n const paramPatternPiece = `/${PARAM_PATTERN_IDENTIFIER}`;\n return path.indexOf(paramPatternPiece) < 0;\n};\n\nconst queryString = {\n getQueryFilters,\n};\n\nconst paramString = {\n isValidPath,\n parseParam,\n replaceParam,\n};\n\nconst urlUtil = { parse, queryString, paramString };\n\nexport default urlUtil;\n","export default function makeDeferred() {\n let reject,\n resolve,\n promise = new Promise(function(res, rej) {\n resolve = res;\n reject = rej;\n });\n return Object.freeze({ promise, resolve, reject });\n}\n","export default class Queue {\n constructor(limit) {\n this.limit = limit;\n this.size = 0;\n this.awaiting = null;\n }\n\n /**\n * Creates a new \"proxy\" function associated with the current execution queue\n * instance. When the returned function is invoked, the queue limit is checked\n * to make sure the limit of scheduled tasks is repected (throwing an\n * exception when the limit has been reached and before calling the original\n * function). The original function is only invoked after all the previously\n * scheduled tasks have finished executing (their returned promises have\n * resolved/rejected);\n *\n * @param {function} task The function whose execution will be associated\n * with the current Queue instance;\n * @returns {function} The \"proxy\" function bound to the current Queue\n * instance;\n */\n bind(task) {\n return bind(this, task);\n }\n\n bindSafe(task, onError) {\n const boundTask = bind(this, task);\n return async function safeTask(...args) {\n try {\n return await boundTask(...args);\n } catch (e) {\n onError(e);\n }\n };\n }\n}\n\n/**\n * Utils\n */\n\nfunction bind(queue, task) {\n const cleaner = clean.bind(null, queue);\n return async function boundTask(...args) {\n if (queue.size >= queue.limit) {\n throw new Error('Queue limit reached');\n }\n const promise = chain(queue.awaiting, task, args);\n queue.awaiting = promise.then(cleaner, cleaner);\n queue.size++;\n return promise;\n };\n}\n\nfunction clean(queue) {\n if (queue.size > 0 && --queue.size === 0) {\n queue.awaiting = null;\n }\n}\n\nasync function chain(prev, task, args) {\n await prev;\n return task(...args);\n}\n","/**\n * Constants\n */\n\nconst SEPARATOR = '/';\n\n/**\n * API\n */\n\n/**\n * Add values to a list hierarchically.\n * @ For example:\n * addToList([], 'a', 'b', 'c');\n * will add the following hierarchy to the list:\n * a > b > c\n * resulting in the following array:\n * [['a', [['b', ['c']]]]]\n * @param {Array} list The target list;\n * @param {...string} values The values to be hierarchically added to the list;\n * @returns {Array} Returns the provided list possibly updated with the given\n * values or null when a bad list (not an actual array) is provided\n */\nfunction addToList(list, ...values) {\n if (Array.isArray(list)) {\n if (values.length > 0) {\n addValuesToList(list, values);\n }\n return list;\n }\n return null;\n}\n\n/**\n * Iterates through the provided hierarchical list executing the callback\n * once for each leaf-node of the tree. The ancestors of the leaf-node being\n * visited are passed to the callback function along with the leaf-node in\n * the exact same order they appear on the tree (from root to leaf);\n * @ For example, if the hierachy `a > b > c` appears on the tree (\"a\" being\n * the root and \"c\" being the leaf) the callback function will be called as:\n * callback('a', 'b', 'c');\n * @param {Array} list The hierarchical list to be iterated\n * @param {function} callback The callback which will be exected once for\n * each leaf-node of the hierarchical list;\n * @returns {Array} Returns the provided list or null for bad arguments;\n */\nfunction forEach(list, callback) {\n if (Array.isArray(list)) {\n if (typeof callback === 'function') {\n forEachValue(list, callback);\n }\n return list;\n }\n return null;\n}\n\n/**\n * Retrieves an item from the given hierarchical list based on an index (number)\n * or a path (string).\n * @ For example:\n * getItem(list, '1/0/4')\n * will retrieve the fourth grandchild, from the first child of the second\n * element of the list;\n * @param {Array} list The source list;\n * @param {string|number} indexOrPath The index of the element inside list\n * (number) or the path to reach the desired element (string). The slash \"/\"\n * character is cosidered the path separator;\n */\nfunction getItem(list, indexOrPath) {\n if (Array.isArray(list)) {\n let subpath = null;\n let index = typeof indexOrPath === 'number' ? indexOrPath : -1;\n if (typeof indexOrPath === 'string') {\n const separator = indexOrPath.indexOf(SEPARATOR);\n if (separator > 0) {\n index = parseInt(indexOrPath.slice(0, separator), 10);\n if (separator + 1 < indexOrPath.length) {\n subpath = indexOrPath.slice(separator + 1, indexOrPath.length);\n }\n } else {\n index = parseInt(indexOrPath, 10);\n }\n }\n if (index >= 0 && index < list.length) {\n const item = list[index];\n if (isSublist(item)) {\n if (subpath !== null) {\n return getItem(item[1], subpath);\n }\n return item[0];\n }\n return item;\n }\n }\n}\n\n/**\n * Pretty-print the provided hierarchical list;\n * @param {Array} list The source list;\n * @returns {string} The textual representation of the hierarchical list;\n */\nfunction print(list) {\n let text = '';\n if (Array.isArray(list)) {\n let prev = [];\n forEachValue(list, function(...args) {\n let prevLen = prev.length;\n for (let i = 0, l = args.length; i < l; ++i) {\n if (i < prevLen && args[i] === prev[i]) {\n continue;\n }\n text += ' '.repeat(i) + args[i] + '\\n';\n }\n prev = args;\n });\n }\n return text;\n}\n\n/**\n * Utils\n */\n\nfunction forEachValue(list, callback) {\n for (let i = 0, l = list.length; i < l; ++i) {\n let item = list[i];\n if (isSublist(item)) {\n if (item[1].length > 0) {\n forEachValue(item[1], callback.bind(null, item[0]));\n continue;\n }\n item = item[0];\n }\n callback(item);\n }\n}\n\nfunction addValuesToList(list, values) {\n let value = values.shift();\n let index = add(list, value);\n if (index >= 0) {\n if (values.length > 0) {\n let sublist = list[index];\n if (!isSublist(sublist)) {\n sublist = toSublist(value);\n list[index] = sublist;\n }\n return addValuesToList(sublist[1], values);\n }\n return true;\n }\n return false;\n}\n\nfunction add(list, value) {\n let index = find(list, value);\n if (index === -2) {\n index = list.push(value) - 1;\n }\n return index;\n}\n\nfunction find(list, value) {\n if (typeof value === 'string') {\n for (let i = 0, l = list.length; i < l; ++i) {\n let item = list[i];\n if (item === value || (isSublist(item) && item[0] === value)) {\n return i;\n }\n }\n return -2;\n }\n return -1;\n}\n\nfunction isSublist(subject) {\n return (\n Array.isArray(subject) &&\n subject.length === 2 &&\n typeof subject[0] === 'string' &&\n Array.isArray(subject[1])\n );\n}\n\nfunction toSublist(value) {\n return [value + '', []];\n}\n\n/**\n * Exports\n */\n\nconst hierarchicalListUtils = { addToList, getItem, forEach, print };\nexport { addToList, getItem, forEach, print };\nexport default hierarchicalListUtils;\n","import makeDeferred from './makeDeferred';\n\n/**\n * Constants\n */\n\nconst TYPE = Symbol('Type');\nconst TASK = Symbol('Task');\nconst LIST = Symbol('List');\n\n/**\n * Public Methods\n */\n\n/**\n * Creates an instance of a task list\n * @returns {Object} A task list object\n */\nfunction createList() {\n return objectWithType(LIST, {\n head: null,\n named: Object.create(null),\n observers: [],\n });\n}\n\n/**\n * Checks if the given argument is a List instance\n * @param {any} subject The value to be tested\n * @returns {boolean} true if a valid List instance is given, false otherwise\n */\nfunction isList(subject) {\n return isOfType(LIST, subject);\n}\n\n/**\n * Creates an instance of a task\n * @param {Object} list The List instance related to this task\n * @param {Object} next The next Task instance to link to\n * @returns {Object} A task object\n */\nfunction createTask(list, next) {\n return objectWithType(TASK, {\n list: isList(list) ? list : null,\n next: isTask(next) ? next : null,\n failed: false,\n awaiting: null,\n progress: 0.0,\n });\n}\n\n/**\n * Checks if the given argument is a Task instance\n * @param {any} subject The value to be tested\n * @returns {boolean} true if a valid Task instance is given, false otherwise\n */\nfunction isTask(subject) {\n return isOfType(TASK, subject);\n}\n\n/**\n * Appends a new Task to the given List instance and notifies the list observers\n * @param {Object} list A List instance\n * @returns {Object} The new Task instance appended to the List or null if the\n * given List instanc is not valid\n */\nfunction increaseList(list) {\n if (isList(list)) {\n const task = createTask(list, list.head);\n list.head = task;\n notify(list, getOverallProgress(list));\n return task;\n }\n return null;\n}\n\n/**\n * Updates the internal progress value of the given Task instance and notifies\n * the observers of the associated list.\n * @param {Object} task The Task instance to be updated\n * @param {number} value A number between 0 (inclusive) and 1 (exclusive)\n * indicating the progress of the task;\n * @returns {void} Nothing is returned\n */\nfunction update(task, value) {\n if (isTask(task) && isValidProgress(value) && value < 1.0) {\n if (task.progress !== value) {\n task.progress = value;\n if (isList(task.list)) {\n notify(task.list, getOverallProgress(task.list));\n }\n }\n }\n}\n\n/**\n * Sets a Task instance as finished (progress = 1.0), freezes it in order to\n * prevent further modifications and notifies the observers of the associated\n * list.\n * @param {Object} task The Task instance to be finalized\n * @returns {void} Nothing is returned\n */\nfunction finish(task) {\n if (isTask(task)) {\n task.progress = 1.0;\n task.awaiting = null;\n Object.freeze(task);\n if (isList(task.list)) {\n notify(task.list, getOverallProgress(task.list));\n }\n }\n}\n\n/**\n * Generate a summarized snapshot of the current status of the given task List\n * @param {Object} list The List instance to be scanned\n * @returns {Object} An obeject representing the summarized status of the list\n */\nfunction getOverallProgress(list) {\n const status = createStatus();\n if (isList(list)) {\n let task = list.head;\n while (isTask(task)) {\n status.total++;\n if (isValidProgress(task.progress)) {\n status.partial += task.progress;\n if (task.progress === 1.0 && task.failed) status.failures++;\n }\n task = task.next;\n }\n }\n if (status.total > 0) {\n status.progress = status.partial / status.total;\n }\n return Object.freeze(status);\n}\n\n/**\n * Adds a Task instance to the given list that waits on a given \"thenable\". When\n * the thenable resolves the \"finish\" method is called on the newly created\n * instance thus notifying the observers of the list.\n * @param {Object} list The List instance to which the new task will be added\n * @param {Object|Promise} thenable The thenable to be waited on\n * @returns {Object} A reference to the newly created Task;\n */\nfunction waitOn(list, thenable) {\n const task = increaseList(list);\n if (isTask(task)) {\n task.awaiting = Promise.resolve(thenable).then(\n function() {\n finish(task);\n },\n function() {\n task.failed = true;\n finish(task);\n }\n );\n return task;\n }\n return null;\n}\n\n/**\n * Adds a Task instance to the given list using a deferred (a Promise that can\n * be externally resolved) notifying the observers of the list.\n * @param {Object} list The List instance to which the new task will be added\n * @returns {Object} An object with references to the created deferred and task\n */\nfunction addDeferred(list) {\n const deferred = makeDeferred();\n const task = waitOn(list, deferred.promise);\n return Object.freeze({\n deferred,\n task,\n });\n}\n\n/**\n * Assigns a name to a specific task of the list\n * @param {Object} list The List instance whose task will be named\n * @param {Object} task The specified Task instance\n * @param {string} name The name of the task\n * @returns {boolean} Returns true on success, false otherwise\n */\nfunction setTaskName(list, task, name) {\n if (\n contains(list, task) &&\n list.named !== null &&\n typeof list.named === 'object' &&\n typeof name === 'string'\n ) {\n list.named[name] = task;\n return true;\n }\n return false;\n}\n\n/**\n * Retrieves a task by name\n * @param {Object} list The List instance whose task will be retrieved\n * @param {string} name The name of the task to be retrieved\n * @returns {Object} The Task instance or null if not found\n */\nfunction getTaskByName(list, name) {\n if (\n isList(list) &&\n list.named !== null &&\n typeof list.named === 'object' &&\n typeof name === 'string'\n ) {\n const task = list.named[name];\n if (isTask(task)) {\n return task;\n }\n }\n return null;\n}\n\n/**\n * Adds an observer (callback function) to a given List instance\n * @param {Object} list The List instance to which the observer will be appended\n * @param {Function} observer The observer (function) that will be executed\n * every time a change happens within the list\n * @returns {boolean} Returns true on success and false otherewise\n */\nfunction addObserver(list, observer) {\n if (\n isList(list) &&\n Array.isArray(list.observers) &&\n typeof observer === 'function'\n ) {\n list.observers.push(observer);\n return true;\n }\n return false;\n}\n\n/**\n * Removes an observer (callback function) from a given List instance\n * @param {Object} list The instance List from which the observer will removed\n * @param {Function} observer The observer function to be removed\n * @returns {boolean} Returns true on success and false otherewise\n */\nfunction removeObserver(list, observer) {\n if (\n isList(list) &&\n Array.isArray(list.observers) &&\n list.observers.length > 0\n ) {\n const index = list.observers.indexOf(observer);\n if (index >= 0) {\n list.observers.splice(index, 1);\n return true;\n }\n }\n return false;\n}\n\n/**\n * Utils\n */\n\nfunction createStatus() {\n return Object.seal({\n total: 0,\n partial: 0.0,\n progress: 0.0,\n failures: 0,\n });\n}\n\nfunction objectWithType(type, object) {\n return Object.seal(Object.defineProperty(object, TYPE, { value: type }));\n}\n\nfunction isOfType(type, subject) {\n return (\n subject !== null && typeof subject === 'object' && subject[TYPE] === type\n );\n}\n\nfunction isValidProgress(value) {\n return typeof value === 'number' && value >= 0.0 && value <= 1.0;\n}\n\nfunction contains(list, task) {\n if (isList(list) && isTask(task)) {\n let item = list.head;\n while (isTask(item)) {\n if (item === task) {\n return true;\n }\n item = item.next;\n }\n }\n return false;\n}\n\nfunction notify(list, data) {\n if (\n isList(list) &&\n Array.isArray(list.observers) &&\n list.observers.length > 0\n ) {\n list.observers.slice().forEach(function(observer) {\n if (typeof observer === 'function') {\n try {\n observer(data, list);\n } catch (e) {\n /* Oops! */\n }\n }\n });\n }\n}\n\n/**\n * Exports\n */\n\nconst progressTrackingUtils = {\n createList,\n isList,\n createTask,\n isTask,\n increaseList,\n update,\n finish,\n getOverallProgress,\n waitOn,\n addDeferred,\n setTaskName,\n getTaskByName,\n addObserver,\n removeObserver,\n};\n\nexport default progressTrackingUtils;\n","const LOW_PRIORITY_MODALITIES = Object.freeze(['SEG', 'KO', 'PR', 'SR', 'RTSTRUCT']);\n\nexport default function isLowPriorityModality(Modality) {\n return LOW_PRIORITY_MODALITIES.includes(Modality);\n}\n","// Returns a function, that, as long as it continues to be invoked, will not\n// be triggered. The function will be called after it stops being called for\n// N milliseconds. If `immediate` is passed, trigger the function on the\n// leading edge, instead of the trailing.\nfunction debounce(func, wait, immediate) {\n var timeout;\n return function() {\n var context = this,\n args = arguments;\n var later = function() {\n timeout = null;\n if (!immediate) func.apply(context, args);\n };\n var callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) func.apply(context, args);\n };\n}\n\nexport default debounce;\n","function _round(value, decimals) {\n return Number(value.toFixed(decimals));\n}\n\nexport default _round;\n","import ObjectPath from './objectPath';\nimport absoluteUrl from './absoluteUrl';\nimport guid from './guid';\nimport sortBy from './sortBy.js';\nimport sortBySeriesDate from './sortBySeriesDate.js';\nimport writeScript from './writeScript.js';\nimport b64toBlob from './b64toBlob.js';\n//import loadAndCacheDerivedDisplaySets from './loadAndCacheDerivedDisplaySets.js';\nimport urlUtil from './urlUtil';\nimport makeDeferred from './makeDeferred';\nimport makeCancelable from './makeCancelable';\nimport hotkeys from './hotkeys';\nimport Queue from './Queue';\nimport isDicomUid from './isDicomUid';\nimport formatDate from './formatDate';\nimport formatPN from './formatPN';\nimport resolveObjectPath from './resolveObjectPath';\nimport hierarchicalListUtils from './hierarchicalListUtils';\nimport progressTrackingUtils from './progressTrackingUtils';\nimport isLowPriorityModality from './isLowPriorityModality';\nimport { isImage } from './isImage';\nimport isDisplaySetReconstructable from './isDisplaySetReconstructable';\nimport sortInstancesByPosition from './sortInstancesByPosition';\nimport imageIdToURI from './imageIdToURI';\nimport debounce from './debounce';\nimport roundNumber from './roundNumber';\nimport downloadCSVReport from './downloadCSVReport';\nimport isEqualWithin from './isEqualWithin';\n\n// Commented out unused functionality.\n// Need to implement new mechanism for derived displaySets using the displaySetManager.\n\nconst utils = {\n guid,\n ObjectPath,\n absoluteUrl,\n sortBy,\n sortBySeriesDate,\n writeScript,\n formatDate,\n formatPN,\n b64toBlob,\n urlUtil,\n imageIdToURI,\n //loadAndCacheDerivedDisplaySets,\n makeDeferred,\n makeCancelable,\n hotkeys,\n Queue,\n isDicomUid,\n isEqualWithin,\n resolveObjectPath,\n hierarchicalListUtils,\n progressTrackingUtils,\n isLowPriorityModality,\n isImage,\n isDisplaySetReconstructable,\n debounce,\n roundNumber,\n downloadCSVReport,\n};\n\nexport {\n guid,\n ObjectPath,\n absoluteUrl,\n sortBy,\n formatDate,\n writeScript,\n b64toBlob,\n urlUtil,\n //loadAndCacheDerivedDisplaySets,\n makeDeferred,\n makeCancelable,\n hotkeys,\n Queue,\n isDicomUid,\n isEqualWithin,\n resolveObjectPath,\n hierarchicalListUtils,\n progressTrackingUtils,\n isLowPriorityModality,\n isImage,\n isDisplaySetReconstructable,\n sortInstancesByPosition,\n imageIdToURI,\n debounce,\n roundNumber,\n downloadCSVReport,\n};\n\nexport default utils;\n","/* jshint -W060 */\nimport absoluteUrl from './absoluteUrl';\n\nexport default function writeScript(fileName, callback) {\n const script = document.createElement('script');\n script.src = absoluteUrl(fileName);\n script.onload = () => {\n if (typeof callback === 'function') {\n callback(script);\n }\n };\n\n document.body.appendChild(script);\n}\n","import moment from 'moment';\n\n/**\n * Format date\n *\n * @param {string} date Date to be formatted\n * @param {string} format Desired date format\n * @returns {string} Formatted date\n */\nexport default (date, format = 'DD-MMM-YYYY') => {\n return moment(date).format(format);\n};\n","/**\n * Formats a patient name for display purposes\n */\nexport default function formatPN(name) {\n if (!name) {\n return;\n }\n\n // Convert the first ^ to a ', '. String.replace() only affects\n // the first appearance of the character.\n const commaBetweenFirstAndLast = name.replace('^', ', ');\n\n // Replace any remaining '^' characters with spaces\n const cleaned = commaBetweenFirstAndLast.replace(/\\^/g, ' ');\n\n // Trim any extraneous whitespace\n return cleaned.trim();\n}\n","export default function makeCancelable(thenable) {\n let isCanceled = false;\n const promise = Promise.resolve(thenable).then(\n function(result) {\n if (isCanceled) throw Object.freeze({ isCanceled });\n return result;\n },\n function(error) {\n if (isCanceled) throw Object.freeze({ isCanceled, error });\n throw error;\n }\n );\n return Object.assign(Object.create(promise), {\n then: promise.then.bind(promise),\n cancel() {\n isCanceled = true;\n },\n });\n}\n","export default function isDicomUid(subject) {\n const regex = /^\\d+(?:\\.\\d+)*$/;\n return typeof subject === 'string' && regex.test(subject.trim());\n}\n","/**\n * returns equal if the two arrays are identical within the\n * given tolerance.\n *\n * @param v1 - The first array of values\n * @param v2 - The second array of values.\n * @param tolerance - The acceptable tolerance, the default is 0.00001\n *\n * @returns True if the two values are within the tolerance levels.\n */\nexport default function isEqualWithin(\n v1: number[] | Float32Array,\n v2: number[] | Float32Array,\n tolerance = 1e-5\n): boolean {\n if (v1.length !== v2.length) {\n return false;\n }\n\n for (let i = 0; i < v1.length; i++) {\n if (Math.abs(v1[i] - v2[i]) > tolerance) {\n return false;\n }\n }\n\n return true;\n}\n","export default function resolveObjectPath(root, path, defaultValue) {\n if (root !== null && typeof root === 'object' && typeof path === 'string') {\n let value,\n separator = path.indexOf('.');\n if (separator >= 0) {\n return resolveObjectPath(\n root[path.slice(0, separator)],\n path.slice(separator + 1, path.length),\n defaultValue\n );\n }\n value = root[path];\n return value === undefined && defaultValue !== undefined\n ? defaultValue\n : value;\n }\n}\n","import { DicomMetadataStore } from '../services/DicomMetadataStore/DicomMetadataStore';\n\nexport default function downloadCSVReport(measurementData) {\n if (measurementData.length === 0) {\n // Prevent download of report with no measurements.\n return;\n }\n\n const columns = [\n 'Patient ID',\n 'Patient Name',\n 'StudyInstanceUID',\n 'SeriesInstanceUID',\n 'SOPInstanceUID',\n 'Label',\n ];\n\n const reportMap = {};\n measurementData.forEach(measurement => {\n const {\n referenceStudyUID,\n referenceSeriesUID,\n getReport,\n uid,\n } = measurement;\n\n if (!getReport) {\n console.warn('Measurement does not have a getReport function');\n return;\n }\n\n const seriesMetadata = DicomMetadataStore.getSeries(\n referenceStudyUID,\n referenceSeriesUID\n );\n\n const commonRowItems = _getCommonRowItems(measurement, seriesMetadata);\n const report = getReport(measurement);\n\n reportMap[uid] = {\n report,\n commonRowItems,\n };\n });\n\n // get columns names inside the report from each measurement and\n // add them to the rows array (this way we can add columns for any custom\n // measurements that may be added in the future)\n Object.keys(reportMap).forEach(id => {\n const { report } = reportMap[id];\n report.columns.forEach(column => {\n if (!columns.includes(column)) {\n columns.push(column);\n }\n });\n });\n\n const results = _mapReportsToRowArray(reportMap, columns);\n\n let csvContent =\n 'data:text/csv;charset=utf-8,' +\n results.map(res => res.join(',')).join('\\n');\n\n _createAndDownloadFile(csvContent);\n}\n\nfunction _mapReportsToRowArray(reportMap, columns) {\n const results = [columns];\n Object.keys(reportMap).forEach(id => {\n const { report, commonRowItems } = reportMap[id];\n const row = [];\n // For commonRowItems, find the correct index and add the value to the\n // correct row in the results array\n Object.keys(commonRowItems).forEach(key => {\n const index = columns.indexOf(key);\n const value = commonRowItems[key];\n row[index] = value;\n });\n\n // For each annotation data, find the correct index and add the value to the\n // correct row in the results array\n report.columns.forEach((column, index) => {\n const colIndex = columns.indexOf(column);\n const value = report.values[index];\n row[colIndex] = value;\n });\n\n results.push(row);\n });\n\n return results;\n}\n\nfunction _getCommonRowItems(measurement, seriesMetadata) {\n const firstInstance = seriesMetadata.instances[0];\n\n return {\n 'Patient ID': firstInstance.PatientID, // Patient ID\n 'Patient Name': firstInstance.PatientName.Alphabetic, // PatientName\n StudyInstanceUID: measurement.referenceStudyUID, // StudyInstanceUID\n SeriesInstanceUID: measurement.referenceSeriesUID, // SeriesInstanceUID\n SOPInstanceUID: measurement.SOPInstanceUID, // SOPInstanceUID\n Label: measurement.label || '', // Label\n };\n}\n\nfunction _createAndDownloadFile(csvContent) {\n const encodedUri = encodeURI(csvContent);\n\n const link = document.createElement('a');\n link.setAttribute('href', encodedUri);\n link.setAttribute('download', 'MeasurementReport.csv');\n document.body.appendChild(link);\n link.click();\n}\n","import toNumber from './toNumber';\nimport sortInstancesByPosition from './sortInstancesByPosition';\n\n// TODO: Is 10% a reasonable spacingTolerance for spacing?\nconst spacingTolerance = 0.2;\nconst iopTolerance = 0.01;\n\n/**\n * Checks if a series is reconstructable to a 3D volume.\n *\n * @param {Object[]} instances An array of `OHIFInstanceMetadata` objects.\n */\nexport default function isDisplaySetReconstructable(instances) {\n if (!instances.length) {\n return { value: false };\n }\n\n const firstInstance = instances[0];\n\n const Modality = firstInstance.Modality;\n const isMultiframe = firstInstance.NumberOfFrames > 1;\n\n if (!constructableModalities.includes(Modality)) {\n return { value: false };\n }\n\n // Can't reconstruct if we only have one image.\n if (!isMultiframe && instances.length === 1) {\n return { value: false };\n }\n\n const sortedInstances = sortInstancesByPosition(instances);\n\n if (isMultiframe) {\n return processMultiframe(sortedInstances[0]);\n } else {\n return processSingleframe(sortedInstances);\n }\n}\n\nfunction processMultiframe(instance) {\n //TODO: deal with multriframe checks! return false for now as can't reconstruct.\n return { value: false };\n}\n\nfunction processSingleframe(instances) {\n const firstImage = instances[0];\n const firstImageRows = toNumber(firstImage.Rows);\n const firstImageColumns = toNumber(firstImage.Columns);\n const firstImageSamplesPerPixel = toNumber(firstImage.SamplesPerPixel);\n const firstImageOrientationPatient = toNumber(\n firstImage.ImageOrientationPatient\n );\n const firstImagePositionPatient = toNumber(firstImage.ImagePositionPatient);\n\n // Can't reconstruct if we:\n // -- Have a different dimensions within a displaySet.\n // -- Have a different number of components within a displaySet.\n // -- Have different orientations within a displaySet.\n for (let i = 1; i < instances.length; i++) {\n const instance = instances[i];\n const {\n Rows,\n Columns,\n SamplesPerPixel,\n ImageOrientationPatient,\n } = instance;\n\n const imageOrientationPatient = toNumber(ImageOrientationPatient);\n\n if (\n Rows !== firstImageRows ||\n Columns !== firstImageColumns ||\n SamplesPerPixel !== firstImageSamplesPerPixel ||\n !_isSameOrientation(imageOrientationPatient, firstImageOrientationPatient)\n ) {\n return { value: false };\n }\n }\n\n let missingFrames = 0;\n\n // Check if frame spacing is approximately equal within a spacingTolerance.\n // If spacing is on a uniform grid but we are missing frames,\n // Allow reconstruction, but pass back the number of missing frames.\n if (instances.length > 2) {\n const lastIpp = toNumber(\n instances[instances.length - 1].ImagePositionPatient\n );\n\n // We can't reconstruct if we are missing ImagePositionPatient values\n if (!firstImagePositionPatient || !lastIpp) {\n return { value: false };\n }\n\n const averageSpacingBetweenFrames =\n _getPerpendicularDistance(firstImagePositionPatient, lastIpp) /\n (instances.length - 1);\n\n let previousImagePositionPatient = firstImagePositionPatient;\n\n for (let i = 1; i < instances.length; i++) {\n const instance = instances[i];\n // Todo: get metadata from OHIF.MetadataProvider\n const imagePositionPatient = toNumber(instance.ImagePositionPatient);\n\n const spacingBetweenFrames = _getPerpendicularDistance(\n imagePositionPatient,\n previousImagePositionPatient\n );\n const spacingIssue = _getSpacingIssue(\n spacingBetweenFrames,\n averageSpacingBetweenFrames\n );\n\n if (spacingIssue) {\n const issue = spacingIssue.issue;\n\n if (issue === reconstructionIssues.MISSING_FRAMES) {\n missingFrames += spacingIssue.missingFrames;\n } else if (issue === reconstructionIssues.IRREGULAR_SPACING) {\n return { value: false };\n }\n }\n\n previousImagePositionPatient = imagePositionPatient;\n }\n }\n\n return { value: true, missingFrames };\n}\n\nfunction _isSameOrientation(iop1, iop2) {\n if (iop1 === undefined || !iop2 === undefined) {\n return;\n }\n\n return (\n Math.abs(iop1[0] - iop2[0]) < iopTolerance &&\n Math.abs(iop1[1] - iop2[1]) < iopTolerance &&\n Math.abs(iop1[2] - iop2[2]) < iopTolerance\n );\n}\n\n/**\n * Checks for spacing issues.\n *\n * @param {number} spacing The spacing between two frames.\n * @param {number} averageSpacing The average spacing between all frames.\n *\n * @returns {Object} An object containing the issue and extra information if necessary.\n */\nfunction _getSpacingIssue(spacing, averageSpacing) {\n const equalWithinTolerance =\n Math.abs(spacing - averageSpacing) < averageSpacing * spacingTolerance;\n\n if (equalWithinTolerance) {\n return;\n }\n\n const multipleOfAverageSpacing = spacing / averageSpacing;\n\n const numberOfSpacings = Math.round(multipleOfAverageSpacing);\n\n const errorForEachSpacing =\n Math.abs(spacing - numberOfSpacings * averageSpacing) / numberOfSpacings;\n\n if (errorForEachSpacing < spacingTolerance * averageSpacing) {\n return {\n issue: reconstructionIssues.MISSING_FRAMES,\n missingFrames: numberOfSpacings - 1,\n };\n }\n\n return { issue: reconstructionIssues.IRREGULAR_SPACING };\n}\n\nfunction _getPerpendicularDistance(a, b) {\n return Math.sqrt(\n Math.pow(a[0] - b[0], 2) +\n Math.pow(a[1] - b[1], 2) +\n Math.pow(a[2] - b[2], 2)\n );\n}\n\nconst constructableModalities = ['MR', 'CT', 'PT', 'NM'];\nconst reconstructionIssues = {\n MISSING_FRAMES: 'missingframes',\n IRREGULAR_SPACING: 'irregularspacing',\n};\n","import { vec3 } from 'gl-matrix';\n\n/**\n * Given an array of imageIds, sort them based on their imagePositionPatient, and\n * also returns the spacing between images and the origin of the reference image\n *\n * @param imageIds - array of imageIds\n * @param scanAxisNormal - [x, y, z] array or gl-matrix vec3\n *\n * @returns The sortedImageIds, zSpacing, and origin of the first image in the series.\n */\nexport default function sortInstances(instances: Array) {\n // Return if only one instance e.g., multiframe\n if (instances.length <= 1) {\n return instances;\n }\n\n const {\n ImagePositionPatient: referenceImagePositionPatient,\n ImageOrientationPatient,\n } = instances[Math.floor(instances.length / 2)]; // this prevents getting scout image as test image\n\n const rowCosineVec = vec3.fromValues(\n ImageOrientationPatient[0],\n ImageOrientationPatient[1],\n ImageOrientationPatient[2]\n );\n const colCosineVec = vec3.fromValues(\n ImageOrientationPatient[3],\n ImageOrientationPatient[4],\n ImageOrientationPatient[5]\n );\n\n const scanAxisNormal = vec3.cross(vec3.create(), rowCosineVec, colCosineVec);\n\n const refIppVec = vec3.set(\n vec3.create(),\n referenceImagePositionPatient[0],\n referenceImagePositionPatient[1],\n referenceImagePositionPatient[2]\n );\n\n const distanceInstancePairs = instances.map(instance => {\n const imagePositionPatient = instance.ImagePositionPatient;\n\n const positionVector = vec3.create();\n\n vec3.sub(\n positionVector,\n referenceImagePositionPatient,\n imagePositionPatient\n );\n\n const distance = vec3.dot(positionVector, scanAxisNormal);\n\n return {\n distance,\n instance,\n };\n });\n\n distanceInstancePairs.sort((a, b) => b.distance - a.distance);\n\n const sortedInstances = distanceInstancePairs.map(a => a.instance);\n\n return sortedInstances;\n}\n","import { sopClassDictionary } from './sopClassDictionary';\n\nconst imagesTypes = [\n sopClassDictionary.ComputedRadiographyImageStorage,\n sopClassDictionary.DigitalXRayImageStorageForPresentation,\n sopClassDictionary.DigitalXRayImageStorageForProcessing,\n sopClassDictionary.DigitalMammographyXRayImageStorageForPresentation,\n sopClassDictionary.DigitalMammographyXRayImageStorageForProcessing,\n sopClassDictionary.DigitalIntraOralXRayImageStorageForPresentation,\n sopClassDictionary.DigitalIntraOralXRayImageStorageForProcessing,\n sopClassDictionary.CTImageStorage,\n sopClassDictionary.EnhancedCTImageStorage,\n sopClassDictionary.LegacyConvertedEnhancedCTImageStorage,\n sopClassDictionary.UltrasoundMultiframeImageStorage,\n sopClassDictionary.EnhancedUSVolumeStorage,\n sopClassDictionary.MRImageStorage,\n sopClassDictionary.EnhancedMRImageStorage,\n sopClassDictionary.EnhancedMRColorImageStorage,\n sopClassDictionary.LegacyConvertedEnhancedMRImageStorage,\n sopClassDictionary.UltrasoundImageStorage,\n sopClassDictionary.SecondaryCaptureImageStorage,\n sopClassDictionary.MultiframeSingleBitSecondaryCaptureImageStorage,\n sopClassDictionary.MultiframeGrayscaleByteSecondaryCaptureImageStorage,\n sopClassDictionary.MultiframeGrayscaleWordSecondaryCaptureImageStorage,\n sopClassDictionary.MultiframeTrueColorSecondaryCaptureImageStorage,\n sopClassDictionary.XRayAngiographicImageStorage,\n sopClassDictionary.EnhancedXAImageStorage,\n sopClassDictionary.XRayRadiofluoroscopicImageStorage,\n sopClassDictionary.EnhancedXRFImageStorage,\n sopClassDictionary.XRay3DAngiographicImageStorage,\n sopClassDictionary.XRay3DCraniofacialImageStorage,\n sopClassDictionary.BreastTomosynthesisImageStorage,\n sopClassDictionary.BreastProjectionXRayImageStorageForPresentation,\n sopClassDictionary.BreastProjectionXRayImageStorageForProcessing,\n sopClassDictionary.IntravascularOpticalCoherenceTomographyImageStorageForPresentation,\n sopClassDictionary.IntravascularOpticalCoherenceTomographyImageStorageForProcessing,\n sopClassDictionary.NuclearMedicineImageStorage,\n sopClassDictionary.VLEndoscopicImageStorage,\n sopClassDictionary.VideoEndoscopicImageStorage,\n sopClassDictionary.VLMicroscopicImageStorage,\n sopClassDictionary.VideoMicroscopicImageStorage,\n sopClassDictionary.VLSlideCoordinatesMicroscopicImageStorage,\n sopClassDictionary.VLPhotographicImageStorage,\n sopClassDictionary.VideoPhotographicImageStorage,\n sopClassDictionary.OphthalmicPhotography8BitImageStorage,\n sopClassDictionary.OphthalmicPhotography16BitImageStorage,\n sopClassDictionary.OphthalmicTomographyImageStorage,\n sopClassDictionary.VLWholeSlideMicroscopyImageStorage,\n sopClassDictionary.PositronEmissionTomographyImageStorage,\n sopClassDictionary.EnhancedPETImageStorage,\n sopClassDictionary.LegacyConvertedEnhancedPETImageStorage,\n sopClassDictionary.RTImageStorage,\n];\n\n/**\n * Checks whether dicom files with specified SOP Class UID have image data\n * @param {string} SOPClassUID - SOP Class UID to be checked\n * @returns {boolean} - true if it has image data\n */\nexport const isImage = SOPClassUID => {\n if (!SOPClassUID) return false;\n return imagesTypes.indexOf(SOPClassUID) !== -1;\n};\n","// TODO: Deprecate since we have the same thing in dcmjs?\nexport const sopClassDictionary = {\n ComputedRadiographyImageStorage: '1.2.840.10008.5.1.4.1.1.1',\n DigitalXRayImageStorageForPresentation: '1.2.840.10008.5.1.4.1.1.1.1',\n DigitalXRayImageStorageForProcessing: '1.2.840.10008.5.1.4.1.1.1.1.1',\n DigitalMammographyXRayImageStorageForPresentation:\n '1.2.840.10008.5.1.4.1.1.1.2',\n DigitalMammographyXRayImageStorageForProcessing:\n '1.2.840.10008.5.1.4.1.1.1.2.1',\n DigitalIntraOralXRayImageStorageForPresentation:\n '1.2.840.10008.5.1.4.1.1.1.3',\n DigitalIntraOralXRayImageStorageForProcessing:\n '1.2.840.10008.5.1.4.1.1.1.3.1',\n CTImageStorage: '1.2.840.10008.5.1.4.1.1.2',\n EnhancedCTImageStorage: '1.2.840.10008.5.1.4.1.1.2.1',\n LegacyConvertedEnhancedCTImageStorage: '1.2.840.10008.5.1.4.1.1.2.2',\n UltrasoundMultiframeImageStorage: '1.2.840.10008.5.1.4.1.1.3.1',\n MRImageStorage: '1.2.840.10008.5.1.4.1.1.4',\n EnhancedMRImageStorage: '1.2.840.10008.5.1.4.1.1.4.1',\n MRSpectroscopyStorage: '1.2.840.10008.5.1.4.1.1.4.2',\n EnhancedMRColorImageStorage: '1.2.840.10008.5.1.4.1.1.4.3',\n LegacyConvertedEnhancedMRImageStorage: '1.2.840.10008.5.1.4.1.1.4.4',\n UltrasoundImageStorage: '1.2.840.10008.5.1.4.1.1.6.1',\n EnhancedUSVolumeStorage: '1.2.840.10008.5.1.4.1.1.6.2',\n SecondaryCaptureImageStorage: '1.2.840.10008.5.1.4.1.1.7',\n MultiframeSingleBitSecondaryCaptureImageStorage:\n '1.2.840.10008.5.1.4.1.1.7.1',\n MultiframeGrayscaleByteSecondaryCaptureImageStorage:\n '1.2.840.10008.5.1.4.1.1.7.2',\n MultiframeGrayscaleWordSecondaryCaptureImageStorage:\n '1.2.840.10008.5.1.4.1.1.7.3',\n MultiframeTrueColorSecondaryCaptureImageStorage:\n '1.2.840.10008.5.1.4.1.1.7.4',\n Sop12LeadECGWaveformStorage: '1.2.840.10008.5.1.4.1.1.9.1.1',\n GeneralECGWaveformStorage: '1.2.840.10008.5.1.4.1.1.9.1.2',\n AmbulatoryECGWaveformStorage: '1.2.840.10008.5.1.4.1.1.9.1.3',\n HemodynamicWaveformStorage: '1.2.840.10008.5.1.4.1.1.9.2.1',\n CardiacElectrophysiologyWaveformStorage: '1.2.840.10008.5.1.4.1.1.9.3.1',\n BasicVoiceAudioWaveformStorage: '1.2.840.10008.5.1.4.1.1.9.4.1',\n GeneralAudioWaveformStorage: '1.2.840.10008.5.1.4.1.1.9.4.2',\n ArterialPulseWaveformStorage: '1.2.840.10008.5.1.4.1.1.9.5.1',\n RespiratoryWaveformStorage: '1.2.840.10008.5.1.4.1.1.9.6.1',\n GrayscaleSoftcopyPresentationStateStorage: '1.2.840.10008.5.1.4.1.1.11.1',\n ColorSoftcopyPresentationStateStorage: '1.2.840.10008.5.1.4.1.1.11.2',\n PseudoColorSoftcopyPresentationStateStorage: '1.2.840.10008.5.1.4.1.1.11.3',\n BlendingSoftcopyPresentationStateStorage: '1.2.840.10008.5.1.4.1.1.11.4',\n XAXRFGrayscaleSoftcopyPresentationStateStorage:\n '1.2.840.10008.5.1.4.1.1.11.5',\n XRayAngiographicImageStorage: '1.2.840.10008.5.1.4.1.1.12.1',\n EnhancedXAImageStorage: '1.2.840.10008.5.1.4.1.1.12.1.1',\n XRayRadiofluoroscopicImageStorage: '1.2.840.10008.5.1.4.1.1.12.2',\n EnhancedXRFImageStorage: '1.2.840.10008.5.1.4.1.1.12.2.1',\n XRay3DAngiographicImageStorage: '1.2.840.10008.5.1.4.1.1.13.1.1',\n XRay3DCraniofacialImageStorage: '1.2.840.10008.5.1.4.1.1.13.1.2',\n BreastTomosynthesisImageStorage: '1.2.840.10008.5.1.4.1.1.13.1.3',\n BreastProjectionXRayImageStorageForPresentation:\n '1.2.840.10008.5.1.4.1.1.13.1.4',\n BreastProjectionXRayImageStorageForProcessing:\n '1.2.840.10008.5.1.4.1.1.13.1.5',\n IntravascularOpticalCoherenceTomographyImageStorageForPresentation:\n '1.2.840.10008.5.1.4.1.1.14.1',\n IntravascularOpticalCoherenceTomographyImageStorageForProcessing:\n '1.2.840.10008.5.1.4.1.1.14.2',\n NuclearMedicineImageStorage: '1.2.840.10008.5.1.4.1.1.20',\n RawDataStorage: '1.2.840.10008.5.1.4.1.1.66',\n SpatialRegistrationStorage: '1.2.840.10008.5.1.4.1.1.66.1',\n SpatialFiducialsStorage: '1.2.840.10008.5.1.4.1.1.66.2',\n DeformableSpatialRegistrationStorage: '1.2.840.10008.5.1.4.1.1.66.3',\n SegmentationStorage: '1.2.840.10008.5.1.4.1.1.66.4',\n SurfaceSegmentationStorage: '1.2.840.10008.5.1.4.1.1.66.5',\n RealWorldValueMappingStorage: '1.2.840.10008.5.1.4.1.1.67',\n SurfaceScanMeshStorage: '1.2.840.10008.5.1.4.1.1.68.1',\n SurfaceScanPointCloudStorage: '1.2.840.10008.5.1.4.1.1.68.2',\n VLEndoscopicImageStorage: '1.2.840.10008.5.1.4.1.1.77.1.1',\n VideoEndoscopicImageStorage: '1.2.840.10008.5.1.4.1.1.77.1.1.1',\n VLMicroscopicImageStorage: '1.2.840.10008.5.1.4.1.1.77.1.2',\n VideoMicroscopicImageStorage: '1.2.840.10008.5.1.4.1.1.77.1.2.1',\n VLSlideCoordinatesMicroscopicImageStorage: '1.2.840.10008.5.1.4.1.1.77.1.3',\n VLPhotographicImageStorage: '1.2.840.10008.5.1.4.1.1.77.1.4',\n VideoPhotographicImageStorage: '1.2.840.10008.5.1.4.1.1.77.1.4.1',\n OphthalmicPhotography8BitImageStorage: '1.2.840.10008.5.1.4.1.1.77.1.5.1',\n OphthalmicPhotography16BitImageStorage: '1.2.840.10008.5.1.4.1.1.77.1.5.2',\n StereometricRelationshipStorage: '1.2.840.10008.5.1.4.1.1.77.1.5.3',\n OphthalmicTomographyImageStorage: '1.2.840.10008.5.1.4.1.1.77.1.5.4',\n VLWholeSlideMicroscopyImageStorage: '1.2.840.10008.5.1.4.1.1.77.1.6',\n LensometryMeasurementsStorage: '1.2.840.10008.5.1.4.1.1.78.1',\n AutorefractionMeasurementsStorage: '1.2.840.10008.5.1.4.1.1.78.2',\n KeratometryMeasurementsStorage: '1.2.840.10008.5.1.4.1.1.78.3',\n SubjectiveRefractionMeasurementsStorage: '1.2.840.10008.5.1.4.1.1.78.4',\n VisualAcuityMeasurementsStorage: '1.2.840.10008.5.1.4.1.1.78.5',\n SpectaclePrescriptionReportStorage: '1.2.840.10008.5.1.4.1.1.78.6',\n OphthalmicAxialMeasurementsStorage: '1.2.840.10008.5.1.4.1.1.78.7',\n IntraocularLensCalculationsStorage: '1.2.840.10008.5.1.4.1.1.78.8',\n MacularGridThicknessandVolumeReport: '1.2.840.10008.5.1.4.1.1.79.1',\n OphthalmicVisualFieldStaticPerimetryMeasurementsStorage:\n '1.2.840.10008.5.1.4.1.1.80.1',\n OphthalmicThicknessMapStorage: '1.2.840.10008.5.1.4.1.1.81.1',\n CornealTopographyMapStorage: '1.2.840.10008.5.1.4.1.1.82.1',\n BasicTextSR: '1.2.840.10008.5.1.4.1.1.88.11',\n EnhancedSR: '1.2.840.10008.5.1.4.1.1.88.22',\n ComprehensiveSR: '1.2.840.10008.5.1.4.1.1.88.33',\n Comprehensive3DSR: '1.2.840.10008.5.1.4.1.1.88.34',\n ProcedureLog: '1.2.840.10008.5.1.4.1.1.88.40',\n MammographyCADSR: '1.2.840.10008.5.1.4.1.1.88.50',\n KeyObjectSelection: '1.2.840.10008.5.1.4.1.1.88.59',\n ChestCADSR: '1.2.840.10008.5.1.4.1.1.88.65',\n XRayRadiationDoseSR: '1.2.840.10008.5.1.4.1.1.88.67',\n RadiopharmaceuticalRadiationDoseSR: '1.2.840.10008.5.1.4.1.1.88.68',\n ColonCADSR: '1.2.840.10008.5.1.4.1.1.88.69',\n ImplantationPlanSRDocumentStorage: '1.2.840.10008.5.1.4.1.1.88.70',\n EncapsulatedPDFStorage: '1.2.840.10008.5.1.4.1.1.104.1',\n EncapsulatedCDAStorage: '1.2.840.10008.5.1.4.1.1.104.2',\n PositronEmissionTomographyImageStorage: '1.2.840.10008.5.1.4.1.1.128',\n EnhancedPETImageStorage: '1.2.840.10008.5.1.4.1.1.130',\n LegacyConvertedEnhancedPETImageStorage: '1.2.840.10008.5.1.4.1.1.128.1',\n BasicStructuredDisplayStorage: '1.2.840.10008.5.1.4.1.1.131',\n RTImageStorage: '1.2.840.10008.5.1.4.1.1.481.1',\n RTDoseStorage: '1.2.840.10008.5.1.4.1.1.481.2',\n RTStructureSetStorage: '1.2.840.10008.5.1.4.1.1.481.3',\n RTBeamsTreatmentRecordStorage: '1.2.840.10008.5.1.4.1.1.481.4',\n RTPlanStorage: '1.2.840.10008.5.1.4.1.1.481.5',\n RTBrachyTreatmentRecordStorage: '1.2.840.10008.5.1.4.1.1.481.6',\n RTTreatmentSummaryRecordStorage: '1.2.840.10008.5.1.4.1.1.481.7',\n RTIonPlanStorage: '1.2.840.10008.5.1.4.1.1.481.8',\n RTIonBeamsTreatmentRecordStorage: '1.2.840.10008.5.1.4.1.1.481.9',\n RTBeamsDeliveryInstructionStorage: '1.2.840.10008.5.1.4.34.7',\n GenericImplantTemplateStorage: '1.2.840.10008.5.1.4.43.1',\n ImplantAssemblyTemplateStorage: '1.2.840.10008.5.1.4.44.1',\n ImplantTemplateGroupStorage: '1.2.840.10008.5.1.4.45.1',\n};\n\nexport default sopClassDictionary;\n","// Return the array sorting function for its object's properties\nexport default function sortBy() {\n var fields = [].slice.call(arguments),\n n_fields = fields.length;\n\n return function(A, B) {\n var a, b, field, key, reverse, result, i;\n\n for (i = 0; i < n_fields; i++) {\n result = 0;\n field = fields[i];\n\n key = typeof field === 'string' ? field : field.name;\n\n a = A[key];\n b = B[key];\n\n if (typeof field.primer !== 'undefined') {\n a = field.primer(a);\n b = field.primer(b);\n }\n\n reverse = field.reverse ? -1 : 1;\n\n if (a < b) {\n result = reverse * -1;\n }\n\n if (a > b) {\n result = reverse * 1;\n }\n\n if (result !== 0) {\n break;\n }\n }\n\n return result;\n };\n}\n","/**\n * Returns the values as an array of javascript numbers\n *\n * @param val - The javascript object for the specified element in the metadata\n * @returns {*}\n */\nexport default function toNumber(val) {\n if (Array.isArray(val)) {\n return val.map(v => (v !== undefined ? Number(v) : v));\n } else {\n return val !== undefined ? Number(val) : val;\n }\n}\n","import PropTypes from 'prop-types';\n\nexport default PropTypes.oneOf([\n 'thumbnail',\n 'thumbnailTracked',\n 'thumbnailNoImage',\n]);\n","import PropTypes from 'prop-types';\nimport ThumbnailType from './ThumbnailType';\n\n// A few miscellaneous types declared inline here.\n\n/**\n * StringNumber often comes back from DICOMweb for integer valued items.\n */\nconst StringNumber = PropTypes.oneOfType([PropTypes.string, PropTypes.number]);\n\n/**\n * StringArray often comes back from dcmjs for single valued strings that\n * might have multiple values such as window level descriptions.\n */\nconst StringArray = PropTypes.oneOfType([PropTypes.string, PropTypes.array]);\n\nexport { StringNumber, StringArray, ThumbnailType };\n","import React, {\n useState,\n createContext,\n useContext,\n useCallback,\n useEffect,\n useRef,\n} from 'react';\n\nimport PropTypes from 'prop-types';\nimport Draggable from 'react-draggable';\nimport classNames from 'classnames';\n\n/*\n * This is a workaround to import things from ohif/core as docz does\n * not allow us to access window element and @ohif/core does use it once\n * we import to instanciate cornerstone\n */\nimport guid from './../../../core/src/utils/guid';\n\nimport './DialogProvider.css';\n\nconst DialogContext = createContext(null);\n\nexport const useDialog = () => useContext(DialogContext);\n\nconst DialogProvider = ({ children, service }) => {\n const [isDragging, setIsDragging] = useState(false);\n const [dialogs, setDialogs] = useState([]);\n const [lastDialogId, setLastDialogId] = useState(null);\n const [lastDialogPosition, setLastDialogPosition] = useState(null);\n const [centerPositions, setCenterPositions] = useState([]);\n\n useEffect(() => {\n setCenterPositions(\n dialogs.map(dialog => ({\n id: dialog.id,\n ...getCenterPosition(dialog.id),\n }))\n );\n }, [dialogs]);\n\n const getCenterPosition = id => {\n const root = document.querySelector('#root');\n const centerX = root.offsetLeft + root.offsetWidth / 2;\n const centerY = root.offsetTop + root.offsetHeight / 2;\n const item = document.querySelector(`#draggableItem-${id}`);\n const itemBounds = item.getBoundingClientRect();\n return {\n x: centerX - itemBounds.width / 2,\n y: centerY - itemBounds.height / 2,\n };\n };\n\n /**\n * UI Dialog\n *\n * @typedef {Object} DialogProps\n * @property {string} id The dialog id.\n * @property {DialogContent} content The dialog content.\n * @property {Object} contentProps The dialog content props.\n * @property {boolean} isDraggable Controls if dialog content is draggable or not.\n * @property {boolean} showOverlay Controls dialog overlay.\n * @property {boolean} centralize Center the dialog on the screen.\n * @property {boolean} preservePosition Use last position instead of default.\n * @property {ElementPosition} defaultPosition Specifies the `x` and `y` that the dragged item should start at.\n * @property {Function} onStart Called when dragging starts. If `false` is returned any handler, the action will cancel.\n * @property {Function} onStop Called when dragging stops.\n * @property {Function} onDrag Called while dragging.\n */\n\n /**\n * Creates a new dialog and return its id.\n *\n * @param {DialogProps} props The dialog props.\n * @returns The new dialog id.\n */\n const create = useCallback(props => {\n const { id } = props;\n\n let dialogId = id;\n if (!dialogId) {\n dialogId = guid();\n }\n\n setDialogs(dialogs => [...dialogs, { ...props, id: dialogId }]);\n setLastDialogId(dialogId);\n\n return dialogId;\n }, []);\n\n /**\n * Dismisses the dialog with a given id.\n *\n * @param {Object} props -\n * @property {string} props.id The dialog id.\n * @returns void\n */\n const dismiss = useCallback(\n ({ id }) =>\n setDialogs(dialogs => dialogs.filter(dialog => dialog.id !== id)),\n []\n );\n\n /**\n * Dismisses all dialogs.\n *\n * @returns void\n */\n const dismissAll = () => {\n setDialogs([]);\n };\n\n /**\n * Indicate if there are no dialogs present.\n *\n * @returns True if no dialogs are present.\n */\n const isEmpty = () => dialogs && dialogs.length < 1;\n\n /**\n * Moves the dialog to the foreground if clicked.\n *\n * @param {string} id The dialog id.\n * @returns void\n */\n const _bringToFront = useCallback(id => {\n setDialogs(dialogs => {\n const topDialog = dialogs.find(dialog => dialog.id === id);\n return topDialog\n ? [...dialogs.filter(dialog => dialog.id !== id), topDialog]\n : dialogs;\n });\n }, []);\n\n /**\n * Sets the implementation of a dialog service that can be used by extensions.\n *\n * @returns void\n */\n useEffect(() => {\n if (service) {\n service.setServiceImplementation({ create, dismiss, dismissAll });\n }\n }, [create, dismiss, service]);\n\n useEffect(() => _bringToFront(lastDialogId), [_bringToFront, lastDialogId]);\n\n const renderDialogs = () =>\n dialogs.map(dialog => {\n const {\n id,\n content: DialogContent,\n contentProps,\n defaultPosition,\n centralize = false,\n preservePosition = true,\n isDraggable = true,\n onStart,\n onStop,\n onDrag,\n onClickOutside,\n showOverlay,\n } = dialog;\n\n let position =\n (preservePosition && lastDialogPosition) || defaultPosition;\n if (centralize) {\n position = centerPositions.find(position => position.id === id);\n }\n\n const dragableItem = () => (\n {\n const e = event || (typeof window !== 'undefined' && window.event);\n const target = e.target || e.srcElement;\n const BLACKLIST = [\n 'SVG',\n 'BUTTON',\n 'PATH',\n 'INPUT',\n 'SPAN',\n 'LABEL',\n ];\n if (BLACKLIST.includes(target.tagName.toUpperCase())) {\n return false;\n }\n\n if (validCallback(onStart)) {\n return onStart(event);\n }\n }}\n onStop={event => {\n setIsDragging(false);\n\n if (validCallback(onStop)) {\n return onStop(event);\n }\n }}\n onDrag={event => {\n setIsDragging(true);\n _bringToFront(id);\n _updateLastDialogPosition(id);\n\n if (validCallback(onDrag)) {\n return onDrag(event);\n }\n }}\n >\n _bringToFront(id)}\n >\n \n \n \n );\n\n const withOverlay = component => {\n const background = 'bg-black bg-opacity-50';\n const overlay = 'fixed z-50 left-0 top-0 w-full h-full overflow-auto';\n return (\n
\n {component}\n
\n );\n };\n\n let result = dragableItem();\n\n if (showOverlay) {\n result = withOverlay(result);\n }\n\n if (typeof onClickOutside === 'function') {\n result = (\n \n {result}\n \n );\n }\n\n return result;\n });\n\n /**\n * Update the last dialog position to be used as the new default position.\n *\n * @returns void\n */\n const _updateLastDialogPosition = dialogId => {\n const draggableItemBounds = document\n .querySelector(`#draggableItem-${dialogId}`)\n .getBoundingClientRect();\n setLastDialogPosition({\n x: draggableItemBounds.x,\n y: draggableItemBounds.y,\n });\n };\n\n const onKeyDownHandler = event => {\n if (event.key === 'Escape') {\n dismissAll();\n }\n };\n\n const validCallback = callback => callback && typeof callback === 'function';\n\n return (\n \n {!isEmpty() && (\n
\n {renderDialogs()}\n
\n )}\n {children}\n
\n );\n};\n\n/**\n *\n * High Order Component to use the dialog methods through a Class Component\n *\n */\nexport const withDialog = Component => {\n return function WrappedComponent(props) {\n const { create, dismiss, dismissAll, isEmpty } = useDialog();\n return (\n \n );\n };\n};\n\nDialogProvider.defaultProps = {\n service: null,\n};\n\nDialogProvider.propTypes = {\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node,\n PropTypes.func,\n ]).isRequired,\n service: PropTypes.shape({\n setServiceImplementation: PropTypes.func,\n }),\n};\n\nexport default DialogProvider;\n\nfunction OutsideAlerter(props) {\n const wrapperRef = useRef(null);\n\n useEffect(() => {\n /**\n * Alert if clicked on outside of element\n */\n function handleInteractionOutside(event) {\n if (wrapperRef.current && !wrapperRef.current.contains(event.target)) {\n props.onClickOutside();\n }\n }\n\n // Bind the event listener\n document.addEventListener('mousedown', handleInteractionOutside);\n document.addEventListener('touchstart', handleInteractionOutside);\n return () => {\n // Unbind the event listener on clean up\n document.removeEventListener('mousedown', handleInteractionOutside);\n document.removeEventListener('touchstart', handleInteractionOutside);\n };\n }, [wrapperRef]);\n\n return
{props.children}
;\n}\n","/**\r\n * Use invariant() to assert state which your program assumes to be true.\r\n *\r\n * Provide sprintf-style format (only %s is supported) and arguments\r\n * to provide information about what broke and what you were\r\n * expecting.\r\n *\r\n * The invariant message will be stripped in production, but the invariant\r\n * will remain to ensure logic does not differ in production.\r\n */\nfunction invariant(condition, format) {\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n\n if (format === undefined) {\n error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n var argIndex = 0;\n error = new Error(format.replace(/%s/g, function () {\n return args[argIndex++];\n }));\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n\n throw error;\n }\n}\n\nexport { invariant };\n//# sourceMappingURL=invariant.esm.js.map\n","export var INIT_COORDS = 'dnd-core/INIT_COORDS';\nexport var BEGIN_DRAG = 'dnd-core/BEGIN_DRAG';\nexport var PUBLISH_DRAG_SOURCE = 'dnd-core/PUBLISH_DRAG_SOURCE';\nexport var HOVER = 'dnd-core/HOVER';\nexport var DROP = 'dnd-core/DROP';\nexport var END_DRAG = 'dnd-core/END_DRAG';","import { INIT_COORDS } from '../types';\nexport function setClientOffset(clientOffset, sourceClientOffset) {\n return {\n type: INIT_COORDS,\n payload: {\n sourceClientOffset: sourceClientOffset || null,\n clientOffset: clientOffset || null\n }\n };\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n// cheap lodash replacements\n\n/**\n * drop-in replacement for _.get\n * @param obj\n * @param path\n * @param defaultValue\n */\nexport function get(obj, path, defaultValue) {\n return path.split('.').reduce(function (a, c) {\n return a && a[c] ? a[c] : defaultValue || null;\n }, obj);\n}\n/**\n * drop-in replacement for _.without\n */\n\nexport function without(items, item) {\n return items.filter(function (i) {\n return i !== item;\n });\n}\n/**\n * drop-in replacement for _.isString\n * @param input\n */\n\nexport function isString(input) {\n return typeof input === 'string';\n}\n/**\n * drop-in replacement for _.isString\n * @param input\n */\n\nexport function isObject(input) {\n return _typeof(input) === 'object';\n}\n/**\n * repalcement for _.xor\n * @param itemsA\n * @param itemsB\n */\n\nexport function xor(itemsA, itemsB) {\n var map = new Map();\n\n var insertItem = function insertItem(item) {\n map.set(item, map.has(item) ? map.get(item) + 1 : 1);\n };\n\n itemsA.forEach(insertItem);\n itemsB.forEach(insertItem);\n var result = [];\n map.forEach(function (count, key) {\n if (count === 1) {\n result.push(key);\n }\n });\n return result;\n}\n/**\n * replacement for _.intersection\n * @param itemsA\n * @param itemsB\n */\n\nexport function intersection(itemsA, itemsB) {\n return itemsA.filter(function (t) {\n return itemsB.indexOf(t) > -1;\n });\n}","import { invariant } from '@react-dnd/invariant';\nimport { setClientOffset } from './local/setClientOffset';\nimport { isObject } from '../../utils/js_utils';\nimport { BEGIN_DRAG, INIT_COORDS } from './types';\nvar ResetCoordinatesAction = {\n type: INIT_COORDS,\n payload: {\n clientOffset: null,\n sourceClientOffset: null\n }\n};\nexport function createBeginDrag(manager) {\n return function beginDrag() {\n var sourceIds = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n publishSource: true\n };\n var _options$publishSourc = options.publishSource,\n publishSource = _options$publishSourc === void 0 ? true : _options$publishSourc,\n clientOffset = options.clientOffset,\n getSourceClientOffset = options.getSourceClientOffset;\n var monitor = manager.getMonitor();\n var registry = manager.getRegistry(); // Initialize the coordinates using the client offset\n\n manager.dispatch(setClientOffset(clientOffset));\n verifyInvariants(sourceIds, monitor, registry); // Get the draggable source\n\n var sourceId = getDraggableSource(sourceIds, monitor);\n\n if (sourceId === null) {\n manager.dispatch(ResetCoordinatesAction);\n return;\n } // Get the source client offset\n\n\n var sourceClientOffset = null;\n\n if (clientOffset) {\n if (!getSourceClientOffset) {\n throw new Error('getSourceClientOffset must be defined');\n }\n\n verifyGetSourceClientOffsetIsFunction(getSourceClientOffset);\n sourceClientOffset = getSourceClientOffset(sourceId);\n } // Initialize the full coordinates\n\n\n manager.dispatch(setClientOffset(clientOffset, sourceClientOffset));\n var source = registry.getSource(sourceId);\n var item = source.beginDrag(monitor, sourceId); // If source.beginDrag returns null, this is an indicator to cancel the drag\n\n if (item == null) {\n return undefined;\n }\n\n verifyItemIsObject(item);\n registry.pinSource(sourceId);\n var itemType = registry.getSourceType(sourceId);\n return {\n type: BEGIN_DRAG,\n payload: {\n itemType: itemType,\n item: item,\n sourceId: sourceId,\n clientOffset: clientOffset || null,\n sourceClientOffset: sourceClientOffset || null,\n isSourcePublic: !!publishSource\n }\n };\n };\n}\n\nfunction verifyInvariants(sourceIds, monitor, registry) {\n invariant(!monitor.isDragging(), 'Cannot call beginDrag while dragging.');\n sourceIds.forEach(function (sourceId) {\n invariant(registry.getSource(sourceId), 'Expected sourceIds to be registered.');\n });\n}\n\nfunction verifyGetSourceClientOffsetIsFunction(getSourceClientOffset) {\n invariant(typeof getSourceClientOffset === 'function', 'When clientOffset is provided, getSourceClientOffset must be a function.');\n}\n\nfunction verifyItemIsObject(item) {\n invariant(isObject(item), 'Item must be an object.');\n}\n\nfunction getDraggableSource(sourceIds, monitor) {\n var sourceId = null;\n\n for (var i = sourceIds.length - 1; i >= 0; i--) {\n if (monitor.canDragSource(sourceIds[i])) {\n sourceId = sourceIds[i];\n break;\n }\n }\n\n return sourceId;\n}","import { PUBLISH_DRAG_SOURCE } from './types';\nexport function createPublishDragSource(manager) {\n return function publishDragSource() {\n var monitor = manager.getMonitor();\n\n if (monitor.isDragging()) {\n return {\n type: PUBLISH_DRAG_SOURCE\n };\n }\n };\n}","export function matchesType(targetType, draggedItemType) {\n if (draggedItemType === null) {\n return targetType === null;\n }\n\n return Array.isArray(targetType) ? targetType.some(function (t) {\n return t === draggedItemType;\n }) : targetType === draggedItemType;\n}","import { invariant } from '@react-dnd/invariant';\nimport { matchesType } from '../../utils/matchesType';\nimport { HOVER } from './types';\nexport function createHover(manager) {\n return function hover(targetIdsArg) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n clientOffset = _ref.clientOffset;\n\n verifyTargetIdsIsArray(targetIdsArg);\n var targetIds = targetIdsArg.slice(0);\n var monitor = manager.getMonitor();\n var registry = manager.getRegistry();\n checkInvariants(targetIds, monitor, registry);\n var draggedItemType = monitor.getItemType();\n removeNonMatchingTargetIds(targetIds, registry, draggedItemType);\n hoverAllTargets(targetIds, monitor, registry);\n return {\n type: HOVER,\n payload: {\n targetIds: targetIds,\n clientOffset: clientOffset || null\n }\n };\n };\n}\n\nfunction verifyTargetIdsIsArray(targetIdsArg) {\n invariant(Array.isArray(targetIdsArg), 'Expected targetIds to be an array.');\n}\n\nfunction checkInvariants(targetIds, monitor, registry) {\n invariant(monitor.isDragging(), 'Cannot call hover while not dragging.');\n invariant(!monitor.didDrop(), 'Cannot call hover after drop.');\n\n for (var i = 0; i < targetIds.length; i++) {\n var targetId = targetIds[i];\n invariant(targetIds.lastIndexOf(targetId) === i, 'Expected targetIds to be unique in the passed array.');\n var target = registry.getTarget(targetId);\n invariant(target, 'Expected targetIds to be registered.');\n }\n}\n\nfunction removeNonMatchingTargetIds(targetIds, registry, draggedItemType) {\n // Remove those targetIds that don't match the targetType. This\n // fixes shallow isOver which would only be non-shallow because of\n // non-matching targets.\n for (var i = targetIds.length - 1; i >= 0; i--) {\n var targetId = targetIds[i];\n var targetType = registry.getTargetType(targetId);\n\n if (!matchesType(targetType, draggedItemType)) {\n targetIds.splice(i, 1);\n }\n }\n}\n\nfunction hoverAllTargets(targetIds, monitor, registry) {\n // Finally call hover on all matching targets.\n targetIds.forEach(function (targetId) {\n var target = registry.getTarget(targetId);\n target.hover(monitor, targetId);\n });\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { invariant } from '@react-dnd/invariant';\nimport { DROP } from './types';\nimport { isObject } from '../../utils/js_utils';\nexport function createDrop(manager) {\n return function drop() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var monitor = manager.getMonitor();\n var registry = manager.getRegistry();\n verifyInvariants(monitor);\n var targetIds = getDroppableTargets(monitor); // Multiple actions are dispatched here, which is why this doesn't return an action\n\n targetIds.forEach(function (targetId, index) {\n var dropResult = determineDropResult(targetId, index, registry, monitor);\n var action = {\n type: DROP,\n payload: {\n dropResult: _objectSpread(_objectSpread({}, options), dropResult)\n }\n };\n manager.dispatch(action);\n });\n };\n}\n\nfunction verifyInvariants(monitor) {\n invariant(monitor.isDragging(), 'Cannot call drop while not dragging.');\n invariant(!monitor.didDrop(), 'Cannot call drop twice during one drag operation.');\n}\n\nfunction determineDropResult(targetId, index, registry, monitor) {\n var target = registry.getTarget(targetId);\n var dropResult = target ? target.drop(monitor, targetId) : undefined;\n verifyDropResultType(dropResult);\n\n if (typeof dropResult === 'undefined') {\n dropResult = index === 0 ? {} : monitor.getDropResult();\n }\n\n return dropResult;\n}\n\nfunction verifyDropResultType(dropResult) {\n invariant(typeof dropResult === 'undefined' || isObject(dropResult), 'Drop result must either be an object or undefined.');\n}\n\nfunction getDroppableTargets(monitor) {\n var targetIds = monitor.getTargetIds().filter(monitor.canDropOnTarget, monitor);\n targetIds.reverse();\n return targetIds;\n}","import { invariant } from '@react-dnd/invariant';\nimport { END_DRAG } from './types';\nexport function createEndDrag(manager) {\n return function endDrag() {\n var monitor = manager.getMonitor();\n var registry = manager.getRegistry();\n verifyIsDragging(monitor);\n var sourceId = monitor.getSourceId();\n\n if (sourceId != null) {\n var source = registry.getSource(sourceId, true);\n source.endDrag(monitor, sourceId);\n registry.unpinSource();\n }\n\n return {\n type: END_DRAG\n };\n };\n}\n\nfunction verifyIsDragging(monitor) {\n invariant(monitor.isDragging(), 'Cannot call endDrag while not dragging.');\n}","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nimport { createDragDropActions } from '../actions/dragDrop';\nexport var DragDropManagerImpl = /*#__PURE__*/function () {\n function DragDropManagerImpl(store, monitor) {\n var _this = this;\n\n _classCallCheck(this, DragDropManagerImpl);\n\n this.isSetUp = false;\n\n this.handleRefCountChange = function () {\n var shouldSetUp = _this.store.getState().refCount > 0;\n\n if (_this.backend) {\n if (shouldSetUp && !_this.isSetUp) {\n _this.backend.setup();\n\n _this.isSetUp = true;\n } else if (!shouldSetUp && _this.isSetUp) {\n _this.backend.teardown();\n\n _this.isSetUp = false;\n }\n }\n };\n\n this.store = store;\n this.monitor = monitor;\n store.subscribe(this.handleRefCountChange);\n }\n\n _createClass(DragDropManagerImpl, [{\n key: \"receiveBackend\",\n value: function receiveBackend(backend) {\n this.backend = backend;\n }\n }, {\n key: \"getMonitor\",\n value: function getMonitor() {\n return this.monitor;\n }\n }, {\n key: \"getBackend\",\n value: function getBackend() {\n return this.backend;\n }\n }, {\n key: \"getRegistry\",\n value: function getRegistry() {\n return this.monitor.registry;\n }\n }, {\n key: \"getActions\",\n value: function getActions() {\n /* eslint-disable-next-line @typescript-eslint/no-this-alias */\n var manager = this;\n var dispatch = this.store.dispatch;\n\n function bindActionCreator(actionCreator) {\n return function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var action = actionCreator.apply(manager, args);\n\n if (typeof action !== 'undefined') {\n dispatch(action);\n }\n };\n }\n\n var actions = createDragDropActions(this);\n return Object.keys(actions).reduce(function (boundActions, key) {\n var action = actions[key];\n boundActions[key] = bindActionCreator(action);\n return boundActions;\n }, {});\n }\n }, {\n key: \"dispatch\",\n value: function dispatch(action) {\n this.store.dispatch(action);\n }\n }]);\n\n return DragDropManagerImpl;\n}();","import { createBeginDrag } from './beginDrag';\nimport { createPublishDragSource } from './publishDragSource';\nimport { createHover } from './hover';\nimport { createDrop } from './drop';\nimport { createEndDrag } from './endDrag';\nexport * from './types';\nexport function createDragDropActions(manager) {\n return {\n beginDrag: createBeginDrag(manager),\n publishDragSource: createPublishDragSource(manager),\n hover: createHover(manager),\n drop: createDrop(manager),\n endDrag: createEndDrag(manager)\n };\n}","import _objectSpread from '@babel/runtime/helpers/esm/objectSpread2';\n\n/**\n * Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js\n *\n * Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes\n * during build.\n * @param {number} code\n */\nfunction formatProdErrorMessage(code) {\n return \"Minified Redux error #\" + code + \"; visit https://redux.js.org/Errors?code=\" + code + \" for the full message or \" + 'use the non-minified dev environment for full errors. ';\n}\n\n// Inlined version of the `symbol-observable` polyfill\nvar $$observable = (function () {\n return typeof Symbol === 'function' && Symbol.observable || '@@observable';\n})();\n\n/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\nvar randomString = function randomString() {\n return Math.random().toString(36).substring(7).split('').join('.');\n};\n\nvar ActionTypes = {\n INIT: \"@@redux/INIT\" + randomString(),\n REPLACE: \"@@redux/REPLACE\" + randomString(),\n PROBE_UNKNOWN_ACTION: function PROBE_UNKNOWN_ACTION() {\n return \"@@redux/PROBE_UNKNOWN_ACTION\" + randomString();\n }\n};\n\n/**\n * @param {any} obj The object to inspect.\n * @returns {boolean} True if the argument appears to be a plain object.\n */\nfunction isPlainObject(obj) {\n if (typeof obj !== 'object' || obj === null) return false;\n var proto = obj;\n\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n\n return Object.getPrototypeOf(obj) === proto;\n}\n\n// Inlined / shortened version of `kindOf` from https://github.com/jonschlinkert/kind-of\nfunction miniKindOf(val) {\n if (val === void 0) return 'undefined';\n if (val === null) return 'null';\n var type = typeof val;\n\n switch (type) {\n case 'boolean':\n case 'string':\n case 'number':\n case 'symbol':\n case 'function':\n {\n return type;\n }\n }\n\n if (Array.isArray(val)) return 'array';\n if (isDate(val)) return 'date';\n if (isError(val)) return 'error';\n var constructorName = ctorName(val);\n\n switch (constructorName) {\n case 'Symbol':\n case 'Promise':\n case 'WeakMap':\n case 'WeakSet':\n case 'Map':\n case 'Set':\n return constructorName;\n } // other\n\n\n return type.slice(8, -1).toLowerCase().replace(/\\s/g, '');\n}\n\nfunction ctorName(val) {\n return typeof val.constructor === 'function' ? val.constructor.name : null;\n}\n\nfunction isError(val) {\n return val instanceof Error || typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number';\n}\n\nfunction isDate(val) {\n if (val instanceof Date) return true;\n return typeof val.toDateString === 'function' && typeof val.getDate === 'function' && typeof val.setDate === 'function';\n}\n\nfunction kindOf(val) {\n var typeOfVal = typeof val;\n\n if (process.env.NODE_ENV !== 'production') {\n typeOfVal = miniKindOf(val);\n }\n\n return typeOfVal;\n}\n\n/**\n * @deprecated\n *\n * **We recommend using the `configureStore` method\n * of the `@reduxjs/toolkit` package**, which replaces `createStore`.\n *\n * Redux Toolkit is our recommended approach for writing Redux logic today,\n * including store setup, reducers, data fetching, and more.\n *\n * **For more details, please read this Redux docs page:**\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * `configureStore` from Redux Toolkit is an improved version of `createStore` that\n * simplifies setup and helps avoid common bugs.\n *\n * You should not be using the `redux` core package by itself today, except for learning purposes.\n * The `createStore` method from the core `redux` package will not be removed, but we encourage\n * all users to migrate to using Redux Toolkit for all Redux code.\n *\n * If you want to use `createStore` without this visual deprecation warning, use\n * the `legacy_createStore` import instead:\n *\n * `import { legacy_createStore as createStore} from 'redux'`\n *\n */\n\nfunction createStore(reducer, preloadedState, enhancer) {\n var _ref2;\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(0) : 'It looks like you are passing several store enhancers to ' + 'createStore(). This is not supported. Instead, compose them ' + 'together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.');\n }\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n enhancer = preloadedState;\n preloadedState = undefined;\n }\n\n if (typeof enhancer !== 'undefined') {\n if (typeof enhancer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(1) : \"Expected the enhancer to be a function. Instead, received: '\" + kindOf(enhancer) + \"'\");\n }\n\n return enhancer(createStore)(reducer, preloadedState);\n }\n\n if (typeof reducer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(2) : \"Expected the root reducer to be a function. Instead, received: '\" + kindOf(reducer) + \"'\");\n }\n\n var currentReducer = reducer;\n var currentState = preloadedState;\n var currentListeners = [];\n var nextListeners = currentListeners;\n var isDispatching = false;\n /**\n * This makes a shallow copy of currentListeners so we can use\n * nextListeners as a temporary list while dispatching.\n *\n * This prevents any bugs around consumers calling\n * subscribe/unsubscribe in the middle of a dispatch.\n */\n\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = currentListeners.slice();\n }\n }\n /**\n * Reads the state tree managed by the store.\n *\n * @returns {any} The current state tree of your application.\n */\n\n\n function getState() {\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(3) : 'You may not call store.getState() while the reducer is executing. ' + 'The reducer has already received the state as an argument. ' + 'Pass it down from the top reducer instead of reading it from the store.');\n }\n\n return currentState;\n }\n /**\n * Adds a change listener. It will be called any time an action is dispatched,\n * and some part of the state tree may potentially have changed. You may then\n * call `getState()` to read the current state tree inside the callback.\n *\n * You may call `dispatch()` from a change listener, with the following\n * caveats:\n *\n * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n * If you subscribe or unsubscribe while the listeners are being invoked, this\n * will not have any effect on the `dispatch()` that is currently in progress.\n * However, the next `dispatch()` call, whether nested or not, will use a more\n * recent snapshot of the subscription list.\n *\n * 2. The listener should not expect to see all state changes, as the state\n * might have been updated multiple times during a nested `dispatch()` before\n * the listener is called. It is, however, guaranteed that all subscribers\n * registered before the `dispatch()` started will be called with the latest\n * state by the time it exits.\n *\n * @param {Function} listener A callback to be invoked on every dispatch.\n * @returns {Function} A function to remove this change listener.\n */\n\n\n function subscribe(listener) {\n if (typeof listener !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(4) : \"Expected the listener to be a function. Instead, received: '\" + kindOf(listener) + \"'\");\n }\n\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(5) : 'You may not call store.subscribe() while the reducer is executing. ' + 'If you would like to be notified after the store has been updated, subscribe from a ' + 'component and invoke store.getState() in the callback to access the latest state. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n }\n\n var isSubscribed = true;\n ensureCanMutateNextListeners();\n nextListeners.push(listener);\n return function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(6) : 'You may not unsubscribe from a store listener while the reducer is executing. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n }\n\n isSubscribed = false;\n ensureCanMutateNextListeners();\n var index = nextListeners.indexOf(listener);\n nextListeners.splice(index, 1);\n currentListeners = null;\n };\n }\n /**\n * Dispatches an action. It is the only way to trigger a state change.\n *\n * The `reducer` function, used to create the store, will be called with the\n * current state tree and the given `action`. Its return value will\n * be considered the **next** state of the tree, and the change listeners\n * will be notified.\n *\n * The base implementation only supports plain object actions. If you want to\n * dispatch a Promise, an Observable, a thunk, or something else, you need to\n * wrap your store creating function into the corresponding middleware. For\n * example, see the documentation for the `redux-thunk` package. Even the\n * middleware will eventually dispatch plain object actions using this method.\n *\n * @param {Object} action A plain object representing “what changed”. It is\n * a good idea to keep actions serializable so you can record and replay user\n * sessions, or use the time travelling `redux-devtools`. An action must have\n * a `type` property which may not be `undefined`. It is a good idea to use\n * string constants for action types.\n *\n * @returns {Object} For convenience, the same action object you dispatched.\n *\n * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n * return something else (for example, a Promise you can await).\n */\n\n\n function dispatch(action) {\n if (!isPlainObject(action)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(7) : \"Actions must be plain objects. Instead, the actual type was: '\" + kindOf(action) + \"'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.\");\n }\n\n if (typeof action.type === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(8) : 'Actions may not have an undefined \"type\" property. You may have misspelled an action type string constant.');\n }\n\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(9) : 'Reducers may not dispatch actions.');\n }\n\n try {\n isDispatching = true;\n currentState = currentReducer(currentState, action);\n } finally {\n isDispatching = false;\n }\n\n var listeners = currentListeners = nextListeners;\n\n for (var i = 0; i < listeners.length; i++) {\n var listener = listeners[i];\n listener();\n }\n\n return action;\n }\n /**\n * Replaces the reducer currently used by the store to calculate the state.\n *\n * You might need this if your app implements code splitting and you want to\n * load some of the reducers dynamically. You might also need this if you\n * implement a hot reloading mechanism for Redux.\n *\n * @param {Function} nextReducer The reducer for the store to use instead.\n * @returns {void}\n */\n\n\n function replaceReducer(nextReducer) {\n if (typeof nextReducer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(10) : \"Expected the nextReducer to be a function. Instead, received: '\" + kindOf(nextReducer));\n }\n\n currentReducer = nextReducer; // This action has a similiar effect to ActionTypes.INIT.\n // Any reducers that existed in both the new and old rootReducer\n // will receive the previous state. This effectively populates\n // the new state tree with any relevant data from the old one.\n\n dispatch({\n type: ActionTypes.REPLACE\n });\n }\n /**\n * Interoperability point for observable/reactive libraries.\n * @returns {observable} A minimal observable of state changes.\n * For more information, see the observable proposal:\n * https://github.com/tc39/proposal-observable\n */\n\n\n function observable() {\n var _ref;\n\n var outerSubscribe = subscribe;\n return _ref = {\n /**\n * The minimal observable subscription method.\n * @param {Object} observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns {subscription} An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe: function subscribe(observer) {\n if (typeof observer !== 'object' || observer === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(11) : \"Expected the observer to be an object. Instead, received: '\" + kindOf(observer) + \"'\");\n }\n\n function observeState() {\n if (observer.next) {\n observer.next(getState());\n }\n }\n\n observeState();\n var unsubscribe = outerSubscribe(observeState);\n return {\n unsubscribe: unsubscribe\n };\n }\n }, _ref[$$observable] = function () {\n return this;\n }, _ref;\n } // When a store is created, an \"INIT\" action is dispatched so that every\n // reducer returns their initial state. This effectively populates\n // the initial state tree.\n\n\n dispatch({\n type: ActionTypes.INIT\n });\n return _ref2 = {\n dispatch: dispatch,\n subscribe: subscribe,\n getState: getState,\n replaceReducer: replaceReducer\n }, _ref2[$$observable] = observable, _ref2;\n}\n/**\n * Creates a Redux store that holds the state tree.\n *\n * **We recommend using `configureStore` from the\n * `@reduxjs/toolkit` package**, which replaces `createStore`:\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\n\nvar legacy_createStore = createStore;\n\n/**\n * Prints a warning in the console if it exists.\n *\n * @param {String} message The warning message.\n * @returns {void}\n */\nfunction warning(message) {\n /* eslint-disable no-console */\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error(message);\n }\n /* eslint-enable no-console */\n\n\n try {\n // This error was thrown as a convenience so that if you enable\n // \"break on all exceptions\" in your console,\n // it would pause the execution at this line.\n throw new Error(message);\n } catch (e) {} // eslint-disable-line no-empty\n\n}\n\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n var reducerKeys = Object.keys(reducers);\n var argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n\n if (reducerKeys.length === 0) {\n return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n }\n\n if (!isPlainObject(inputState)) {\n return \"The \" + argumentName + \" has unexpected type of \\\"\" + kindOf(inputState) + \"\\\". Expected argument to be an object with the following \" + (\"keys: \\\"\" + reducerKeys.join('\", \"') + \"\\\"\");\n }\n\n var unexpectedKeys = Object.keys(inputState).filter(function (key) {\n return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key];\n });\n unexpectedKeys.forEach(function (key) {\n unexpectedKeyCache[key] = true;\n });\n if (action && action.type === ActionTypes.REPLACE) return;\n\n if (unexpectedKeys.length > 0) {\n return \"Unexpected \" + (unexpectedKeys.length > 1 ? 'keys' : 'key') + \" \" + (\"\\\"\" + unexpectedKeys.join('\", \"') + \"\\\" found in \" + argumentName + \". \") + \"Expected to find one of the known reducer keys instead: \" + (\"\\\"\" + reducerKeys.join('\", \"') + \"\\\". Unexpected keys will be ignored.\");\n }\n}\n\nfunction assertReducerShape(reducers) {\n Object.keys(reducers).forEach(function (key) {\n var reducer = reducers[key];\n var initialState = reducer(undefined, {\n type: ActionTypes.INIT\n });\n\n if (typeof initialState === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(12) : \"The slice reducer for key \\\"\" + key + \"\\\" returned undefined during initialization. \" + \"If the state passed to the reducer is undefined, you must \" + \"explicitly return the initial state. The initial state may \" + \"not be undefined. If you don't want to set a value for this reducer, \" + \"you can use null instead of undefined.\");\n }\n\n if (typeof reducer(undefined, {\n type: ActionTypes.PROBE_UNKNOWN_ACTION()\n }) === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(13) : \"The slice reducer for key \\\"\" + key + \"\\\" returned undefined when probed with a random type. \" + (\"Don't try to handle '\" + ActionTypes.INIT + \"' or other actions in \\\"redux/*\\\" \") + \"namespace. They are considered private. Instead, you must return the \" + \"current state for any unknown actions, unless it is undefined, \" + \"in which case you must return the initial state, regardless of the \" + \"action type. The initial state may not be undefined, but can be null.\");\n }\n });\n}\n/**\n * Turns an object whose values are different reducer functions, into a single\n * reducer function. It will call every child reducer, and gather their results\n * into a single state object, whose keys correspond to the keys of the passed\n * reducer functions.\n *\n * @param {Object} reducers An object whose values correspond to different\n * reducer functions that need to be combined into one. One handy way to obtain\n * it is to use ES6 `import * as reducers` syntax. The reducers may never return\n * undefined for any action. Instead, they should return their initial state\n * if the state passed to them was undefined, and the current state for any\n * unrecognized action.\n *\n * @returns {Function} A reducer function that invokes every reducer inside the\n * passed object, and builds a state object with the same shape.\n */\n\n\nfunction combineReducers(reducers) {\n var reducerKeys = Object.keys(reducers);\n var finalReducers = {};\n\n for (var i = 0; i < reducerKeys.length; i++) {\n var key = reducerKeys[i];\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof reducers[key] === 'undefined') {\n warning(\"No reducer provided for key \\\"\" + key + \"\\\"\");\n }\n }\n\n if (typeof reducers[key] === 'function') {\n finalReducers[key] = reducers[key];\n }\n }\n\n var finalReducerKeys = Object.keys(finalReducers); // This is used to make sure we don't warn about the same\n // keys multiple times.\n\n var unexpectedKeyCache;\n\n if (process.env.NODE_ENV !== 'production') {\n unexpectedKeyCache = {};\n }\n\n var shapeAssertionError;\n\n try {\n assertReducerShape(finalReducers);\n } catch (e) {\n shapeAssertionError = e;\n }\n\n return function combination(state, action) {\n if (state === void 0) {\n state = {};\n }\n\n if (shapeAssertionError) {\n throw shapeAssertionError;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n var warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n\n if (warningMessage) {\n warning(warningMessage);\n }\n }\n\n var hasChanged = false;\n var nextState = {};\n\n for (var _i = 0; _i < finalReducerKeys.length; _i++) {\n var _key = finalReducerKeys[_i];\n var reducer = finalReducers[_key];\n var previousStateForKey = state[_key];\n var nextStateForKey = reducer(previousStateForKey, action);\n\n if (typeof nextStateForKey === 'undefined') {\n var actionType = action && action.type;\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(14) : \"When called with an action of type \" + (actionType ? \"\\\"\" + String(actionType) + \"\\\"\" : '(unknown type)') + \", the slice reducer for key \\\"\" + _key + \"\\\" returned undefined. \" + \"To ignore an action, you must explicitly return the previous state. \" + \"If you want this reducer to hold no value, you can return null instead of undefined.\");\n }\n\n nextState[_key] = nextStateForKey;\n hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n }\n\n hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;\n return hasChanged ? nextState : state;\n };\n}\n\nfunction bindActionCreator(actionCreator, dispatch) {\n return function () {\n return dispatch(actionCreator.apply(this, arguments));\n };\n}\n/**\n * Turns an object whose values are action creators, into an object with the\n * same keys, but with every function wrapped into a `dispatch` call so they\n * may be invoked directly. This is just a convenience method, as you can call\n * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.\n *\n * For convenience, you can also pass an action creator as the first argument,\n * and get a dispatch wrapped function in return.\n *\n * @param {Function|Object} actionCreators An object whose values are action\n * creator functions. One handy way to obtain it is to use ES6 `import * as`\n * syntax. You may also pass a single function.\n *\n * @param {Function} dispatch The `dispatch` function available on your Redux\n * store.\n *\n * @returns {Function|Object} The object mimicking the original object, but with\n * every action creator wrapped into the `dispatch` call. If you passed a\n * function as `actionCreators`, the return value will also be a single\n * function.\n */\n\n\nfunction bindActionCreators(actionCreators, dispatch) {\n if (typeof actionCreators === 'function') {\n return bindActionCreator(actionCreators, dispatch);\n }\n\n if (typeof actionCreators !== 'object' || actionCreators === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(16) : \"bindActionCreators expected an object or a function, but instead received: '\" + kindOf(actionCreators) + \"'. \" + \"Did you write \\\"import ActionCreators from\\\" instead of \\\"import * as ActionCreators from\\\"?\");\n }\n\n var boundActionCreators = {};\n\n for (var key in actionCreators) {\n var actionCreator = actionCreators[key];\n\n if (typeof actionCreator === 'function') {\n boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n }\n }\n\n return boundActionCreators;\n}\n\n/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for\n * the resulting composite function.\n *\n * @param {...Function} funcs The functions to compose.\n * @returns {Function} A function obtained by composing the argument functions\n * from right to left. For example, compose(f, g, h) is identical to doing\n * (...args) => f(g(h(...args))).\n */\nfunction compose() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n if (funcs.length === 0) {\n return function (arg) {\n return arg;\n };\n }\n\n if (funcs.length === 1) {\n return funcs[0];\n }\n\n return funcs.reduce(function (a, b) {\n return function () {\n return a(b.apply(void 0, arguments));\n };\n });\n}\n\n/**\n * Creates a store enhancer that applies middleware to the dispatch method\n * of the Redux store. This is handy for a variety of tasks, such as expressing\n * asynchronous actions in a concise manner, or logging every action payload.\n *\n * See `redux-thunk` package as an example of the Redux middleware.\n *\n * Because middleware is potentially asynchronous, this should be the first\n * store enhancer in the composition chain.\n *\n * Note that each middleware will be given the `dispatch` and `getState` functions\n * as named arguments.\n *\n * @param {...Function} middlewares The middleware chain to be applied.\n * @returns {Function} A store enhancer applying the middleware.\n */\n\nfunction applyMiddleware() {\n for (var _len = arguments.length, middlewares = new Array(_len), _key = 0; _key < _len; _key++) {\n middlewares[_key] = arguments[_key];\n }\n\n return function (createStore) {\n return function () {\n var store = createStore.apply(void 0, arguments);\n\n var _dispatch = function dispatch() {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(15) : 'Dispatching while constructing your middleware is not allowed. ' + 'Other middleware would not be applied to this dispatch.');\n };\n\n var middlewareAPI = {\n getState: store.getState,\n dispatch: function dispatch() {\n return _dispatch.apply(void 0, arguments);\n }\n };\n var chain = middlewares.map(function (middleware) {\n return middleware(middlewareAPI);\n });\n _dispatch = compose.apply(void 0, chain)(store.dispatch);\n return _objectSpread(_objectSpread({}, store), {}, {\n dispatch: _dispatch\n });\n };\n };\n}\n\n/*\n * This is a dummy function to check if the function name has been altered by minification.\n * If the function has been minified and NODE_ENV !== 'production', warn the user.\n */\n\nfunction isCrushed() {}\n\nif (process.env.NODE_ENV !== 'production' && typeof isCrushed.name === 'string' && isCrushed.name !== 'isCrushed') {\n warning('You are currently using minified code outside of NODE_ENV === \"production\". ' + 'This means that you are running a slower development build of Redux. ' + 'You can use loose-envify (https://github.com/zertosh/loose-envify) for browserify ' + 'or setting mode to production in webpack (https://webpack.js.org/concepts/mode/) ' + 'to ensure you have the correct code for your production build.');\n}\n\nexport { ActionTypes as __DO_NOT_USE__ActionTypes, applyMiddleware, bindActionCreators, combineReducers, compose, createStore, legacy_createStore };\n","export var strictEquality = function strictEquality(a, b) {\n return a === b;\n};\n/**\n * Determine if two cartesian coordinate offsets are equal\n * @param offsetA\n * @param offsetB\n */\n\nexport function areCoordsEqual(offsetA, offsetB) {\n if (!offsetA && !offsetB) {\n return true;\n } else if (!offsetA || !offsetB) {\n return false;\n } else {\n return offsetA.x === offsetB.x && offsetA.y === offsetB.y;\n }\n}\n/**\n * Determines if two arrays of items are equal\n * @param a The first array of items\n * @param b The second array of items\n */\n\nexport function areArraysEqual(a, b) {\n var isEqual = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : strictEquality;\n\n if (a.length !== b.length) {\n return false;\n }\n\n for (var i = 0; i < a.length; ++i) {\n if (!isEqual(a[i], b[i])) {\n return false;\n }\n }\n\n return true;\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { INIT_COORDS, BEGIN_DRAG, HOVER, END_DRAG, DROP } from '../actions/dragDrop';\nimport { areCoordsEqual } from '../utils/equality';\nvar initialState = {\n initialSourceClientOffset: null,\n initialClientOffset: null,\n clientOffset: null\n};\nexport function reduce() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n var payload = action.payload;\n\n switch (action.type) {\n case INIT_COORDS:\n case BEGIN_DRAG:\n return {\n initialSourceClientOffset: payload.sourceClientOffset,\n initialClientOffset: payload.clientOffset,\n clientOffset: payload.clientOffset\n };\n\n case HOVER:\n if (areCoordsEqual(state.clientOffset, payload.clientOffset)) {\n return state;\n }\n\n return _objectSpread(_objectSpread({}, state), {}, {\n clientOffset: payload.clientOffset\n });\n\n case END_DRAG:\n case DROP:\n return initialState;\n\n default:\n return state;\n }\n}","export var ADD_SOURCE = 'dnd-core/ADD_SOURCE';\nexport var ADD_TARGET = 'dnd-core/ADD_TARGET';\nexport var REMOVE_SOURCE = 'dnd-core/REMOVE_SOURCE';\nexport var REMOVE_TARGET = 'dnd-core/REMOVE_TARGET';\nexport function addSource(sourceId) {\n return {\n type: ADD_SOURCE,\n payload: {\n sourceId: sourceId\n }\n };\n}\nexport function addTarget(targetId) {\n return {\n type: ADD_TARGET,\n payload: {\n targetId: targetId\n }\n };\n}\nexport function removeSource(sourceId) {\n return {\n type: REMOVE_SOURCE,\n payload: {\n sourceId: sourceId\n }\n };\n}\nexport function removeTarget(targetId) {\n return {\n type: REMOVE_TARGET,\n payload: {\n targetId: targetId\n }\n };\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { BEGIN_DRAG, PUBLISH_DRAG_SOURCE, HOVER, END_DRAG, DROP } from '../actions/dragDrop';\nimport { REMOVE_TARGET } from '../actions/registry';\nimport { without } from '../utils/js_utils';\nvar initialState = {\n itemType: null,\n item: null,\n sourceId: null,\n targetIds: [],\n dropResult: null,\n didDrop: false,\n isSourcePublic: null\n};\nexport function reduce() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n var payload = action.payload;\n\n switch (action.type) {\n case BEGIN_DRAG:\n return _objectSpread(_objectSpread({}, state), {}, {\n itemType: payload.itemType,\n item: payload.item,\n sourceId: payload.sourceId,\n isSourcePublic: payload.isSourcePublic,\n dropResult: null,\n didDrop: false\n });\n\n case PUBLISH_DRAG_SOURCE:\n return _objectSpread(_objectSpread({}, state), {}, {\n isSourcePublic: true\n });\n\n case HOVER:\n return _objectSpread(_objectSpread({}, state), {}, {\n targetIds: payload.targetIds\n });\n\n case REMOVE_TARGET:\n if (state.targetIds.indexOf(payload.targetId) === -1) {\n return state;\n }\n\n return _objectSpread(_objectSpread({}, state), {}, {\n targetIds: without(state.targetIds, payload.targetId)\n });\n\n case DROP:\n return _objectSpread(_objectSpread({}, state), {}, {\n dropResult: payload.dropResult,\n didDrop: true,\n targetIds: []\n });\n\n case END_DRAG:\n return _objectSpread(_objectSpread({}, state), {}, {\n itemType: null,\n item: null,\n sourceId: null,\n dropResult: null,\n didDrop: false,\n isSourcePublic: null,\n targetIds: []\n });\n\n default:\n return state;\n }\n}","import { ADD_SOURCE, ADD_TARGET, REMOVE_SOURCE, REMOVE_TARGET } from '../actions/registry';\nexport function reduce() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n\n switch (action.type) {\n case ADD_SOURCE:\n case ADD_TARGET:\n return state + 1;\n\n case REMOVE_SOURCE:\n case REMOVE_TARGET:\n return state - 1;\n\n default:\n return state;\n }\n}","import { intersection } from './js_utils';\nexport var NONE = [];\nexport var ALL = [];\nNONE.__IS_NONE__ = true;\nALL.__IS_ALL__ = true;\n/**\n * Determines if the given handler IDs are dirty or not.\n *\n * @param dirtyIds The set of dirty handler ids\n * @param handlerIds The set of handler ids to check\n */\n\nexport function areDirty(dirtyIds, handlerIds) {\n if (dirtyIds === NONE) {\n return false;\n }\n\n if (dirtyIds === ALL || typeof handlerIds === 'undefined') {\n return true;\n }\n\n var commonIds = intersection(handlerIds, dirtyIds);\n return commonIds.length > 0;\n}","import { BEGIN_DRAG, PUBLISH_DRAG_SOURCE, HOVER, END_DRAG, DROP } from '../actions/dragDrop';\nimport { ADD_SOURCE, ADD_TARGET, REMOVE_SOURCE, REMOVE_TARGET } from '../actions/registry';\nimport { areArraysEqual } from '../utils/equality';\nimport { NONE, ALL } from '../utils/dirtiness';\nimport { xor } from '../utils/js_utils';\nexport function reduce() {\n var _state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : NONE;\n\n var action = arguments.length > 1 ? arguments[1] : undefined;\n\n switch (action.type) {\n case HOVER:\n break;\n\n case ADD_SOURCE:\n case ADD_TARGET:\n case REMOVE_TARGET:\n case REMOVE_SOURCE:\n return NONE;\n\n case BEGIN_DRAG:\n case PUBLISH_DRAG_SOURCE:\n case END_DRAG:\n case DROP:\n default:\n return ALL;\n }\n\n var _action$payload = action.payload,\n _action$payload$targe = _action$payload.targetIds,\n targetIds = _action$payload$targe === void 0 ? [] : _action$payload$targe,\n _action$payload$prevT = _action$payload.prevTargetIds,\n prevTargetIds = _action$payload$prevT === void 0 ? [] : _action$payload$prevT;\n var result = xor(targetIds, prevTargetIds);\n var didChange = result.length > 0 || !areArraysEqual(targetIds, prevTargetIds);\n\n if (!didChange) {\n return NONE;\n } // Check the target ids at the innermost position. If they are valid, add them\n // to the result\n\n\n var prevInnermostTargetId = prevTargetIds[prevTargetIds.length - 1];\n var innermostTargetId = targetIds[targetIds.length - 1];\n\n if (prevInnermostTargetId !== innermostTargetId) {\n if (prevInnermostTargetId) {\n result.push(prevInnermostTargetId);\n }\n\n if (innermostTargetId) {\n result.push(innermostTargetId);\n }\n }\n\n return result;\n}","export function reduce() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n return state + 1;\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { reduce as dragOffset } from './dragOffset';\nimport { reduce as dragOperation } from './dragOperation';\nimport { reduce as refCount } from './refCount';\nimport { reduce as dirtyHandlerIds } from './dirtyHandlerIds';\nimport { reduce as stateId } from './stateId';\nimport { get } from '../utils/js_utils';\nexport function reduce() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var action = arguments.length > 1 ? arguments[1] : undefined;\n return {\n dirtyHandlerIds: dirtyHandlerIds(state.dirtyHandlerIds, {\n type: action.type,\n payload: _objectSpread(_objectSpread({}, action.payload), {}, {\n prevTargetIds: get(state, 'dragOperation.targetIds', [])\n })\n }),\n dragOffset: dragOffset(state.dragOffset, action),\n refCount: refCount(state.refCount, action),\n dragOperation: dragOperation(state.dragOperation, action),\n stateId: stateId(state.stateId)\n };\n}","/**\n * Coordinate addition\n * @param a The first coordinate\n * @param b The second coordinate\n */\nexport function add(a, b) {\n return {\n x: a.x + b.x,\n y: a.y + b.y\n };\n}\n/**\n * Coordinate subtraction\n * @param a The first coordinate\n * @param b The second coordinate\n */\n\nexport function subtract(a, b) {\n return {\n x: a.x - b.x,\n y: a.y - b.y\n };\n}\n/**\n * Returns the cartesian distance of the drag source component's position, based on its position\n * at the time when the current drag operation has started, and the movement difference.\n *\n * Returns null if no item is being dragged.\n *\n * @param state The offset state to compute from\n */\n\nexport function getSourceClientOffset(state) {\n var clientOffset = state.clientOffset,\n initialClientOffset = state.initialClientOffset,\n initialSourceClientOffset = state.initialSourceClientOffset;\n\n if (!clientOffset || !initialClientOffset || !initialSourceClientOffset) {\n return null;\n }\n\n return subtract(add(clientOffset, initialSourceClientOffset), initialClientOffset);\n}\n/**\n * Determines the x,y offset between the client offset and the initial client offset\n *\n * @param state The offset state to compute from\n */\n\nexport function getDifferenceFromInitialOffset(state) {\n var clientOffset = state.clientOffset,\n initialClientOffset = state.initialClientOffset;\n\n if (!clientOffset || !initialClientOffset) {\n return null;\n }\n\n return subtract(clientOffset, initialClientOffset);\n}","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nimport { invariant } from '@react-dnd/invariant';\nimport { matchesType } from '../utils/matchesType';\nimport { getSourceClientOffset as _getSourceClientOffset, getDifferenceFromInitialOffset as _getDifferenceFromInitialOffset } from '../utils/coords';\nimport { areDirty } from '../utils/dirtiness';\nexport var DragDropMonitorImpl = /*#__PURE__*/function () {\n function DragDropMonitorImpl(store, registry) {\n _classCallCheck(this, DragDropMonitorImpl);\n\n this.store = store;\n this.registry = registry;\n }\n\n _createClass(DragDropMonitorImpl, [{\n key: \"subscribeToStateChange\",\n value: function subscribeToStateChange(listener) {\n var _this = this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n handlerIds: undefined\n };\n var handlerIds = options.handlerIds;\n invariant(typeof listener === 'function', 'listener must be a function.');\n invariant(typeof handlerIds === 'undefined' || Array.isArray(handlerIds), 'handlerIds, when specified, must be an array of strings.');\n var prevStateId = this.store.getState().stateId;\n\n var handleChange = function handleChange() {\n var state = _this.store.getState();\n\n var currentStateId = state.stateId;\n\n try {\n var canSkipListener = currentStateId === prevStateId || currentStateId === prevStateId + 1 && !areDirty(state.dirtyHandlerIds, handlerIds);\n\n if (!canSkipListener) {\n listener();\n }\n } finally {\n prevStateId = currentStateId;\n }\n };\n\n return this.store.subscribe(handleChange);\n }\n }, {\n key: \"subscribeToOffsetChange\",\n value: function subscribeToOffsetChange(listener) {\n var _this2 = this;\n\n invariant(typeof listener === 'function', 'listener must be a function.');\n var previousState = this.store.getState().dragOffset;\n\n var handleChange = function handleChange() {\n var nextState = _this2.store.getState().dragOffset;\n\n if (nextState === previousState) {\n return;\n }\n\n previousState = nextState;\n listener();\n };\n\n return this.store.subscribe(handleChange);\n }\n }, {\n key: \"canDragSource\",\n value: function canDragSource(sourceId) {\n if (!sourceId) {\n return false;\n }\n\n var source = this.registry.getSource(sourceId);\n invariant(source, \"Expected to find a valid source. sourceId=\".concat(sourceId));\n\n if (this.isDragging()) {\n return false;\n }\n\n return source.canDrag(this, sourceId);\n }\n }, {\n key: \"canDropOnTarget\",\n value: function canDropOnTarget(targetId) {\n // undefined on initial render\n if (!targetId) {\n return false;\n }\n\n var target = this.registry.getTarget(targetId);\n invariant(target, \"Expected to find a valid target. targetId=\".concat(targetId));\n\n if (!this.isDragging() || this.didDrop()) {\n return false;\n }\n\n var targetType = this.registry.getTargetType(targetId);\n var draggedItemType = this.getItemType();\n return matchesType(targetType, draggedItemType) && target.canDrop(this, targetId);\n }\n }, {\n key: \"isDragging\",\n value: function isDragging() {\n return Boolean(this.getItemType());\n }\n }, {\n key: \"isDraggingSource\",\n value: function isDraggingSource(sourceId) {\n // undefined on initial render\n if (!sourceId) {\n return false;\n }\n\n var source = this.registry.getSource(sourceId, true);\n invariant(source, \"Expected to find a valid source. sourceId=\".concat(sourceId));\n\n if (!this.isDragging() || !this.isSourcePublic()) {\n return false;\n }\n\n var sourceType = this.registry.getSourceType(sourceId);\n var draggedItemType = this.getItemType();\n\n if (sourceType !== draggedItemType) {\n return false;\n }\n\n return source.isDragging(this, sourceId);\n }\n }, {\n key: \"isOverTarget\",\n value: function isOverTarget(targetId) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n shallow: false\n };\n\n // undefined on initial render\n if (!targetId) {\n return false;\n }\n\n var shallow = options.shallow;\n\n if (!this.isDragging()) {\n return false;\n }\n\n var targetType = this.registry.getTargetType(targetId);\n var draggedItemType = this.getItemType();\n\n if (draggedItemType && !matchesType(targetType, draggedItemType)) {\n return false;\n }\n\n var targetIds = this.getTargetIds();\n\n if (!targetIds.length) {\n return false;\n }\n\n var index = targetIds.indexOf(targetId);\n\n if (shallow) {\n return index === targetIds.length - 1;\n } else {\n return index > -1;\n }\n }\n }, {\n key: \"getItemType\",\n value: function getItemType() {\n return this.store.getState().dragOperation.itemType;\n }\n }, {\n key: \"getItem\",\n value: function getItem() {\n return this.store.getState().dragOperation.item;\n }\n }, {\n key: \"getSourceId\",\n value: function getSourceId() {\n return this.store.getState().dragOperation.sourceId;\n }\n }, {\n key: \"getTargetIds\",\n value: function getTargetIds() {\n return this.store.getState().dragOperation.targetIds;\n }\n }, {\n key: \"getDropResult\",\n value: function getDropResult() {\n return this.store.getState().dragOperation.dropResult;\n }\n }, {\n key: \"didDrop\",\n value: function didDrop() {\n return this.store.getState().dragOperation.didDrop;\n }\n }, {\n key: \"isSourcePublic\",\n value: function isSourcePublic() {\n return Boolean(this.store.getState().dragOperation.isSourcePublic);\n }\n }, {\n key: \"getInitialClientOffset\",\n value: function getInitialClientOffset() {\n return this.store.getState().dragOffset.initialClientOffset;\n }\n }, {\n key: \"getInitialSourceClientOffset\",\n value: function getInitialSourceClientOffset() {\n return this.store.getState().dragOffset.initialSourceClientOffset;\n }\n }, {\n key: \"getClientOffset\",\n value: function getClientOffset() {\n return this.store.getState().dragOffset.clientOffset;\n }\n }, {\n key: \"getSourceClientOffset\",\n value: function getSourceClientOffset() {\n return _getSourceClientOffset(this.store.getState().dragOffset);\n }\n }, {\n key: \"getDifferenceFromInitialOffset\",\n value: function getDifferenceFromInitialOffset() {\n return _getDifferenceFromInitialOffset(this.store.getState().dragOffset);\n }\n }]);\n\n return DragDropMonitorImpl;\n}();","export var HandlerRole;\n\n(function (HandlerRole) {\n HandlerRole[\"SOURCE\"] = \"SOURCE\";\n HandlerRole[\"TARGET\"] = \"TARGET\";\n})(HandlerRole || (HandlerRole = {}));","var nextUniqueId = 0;\nexport function getNextUniqueId() {\n return nextUniqueId++;\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nimport { invariant } from '@react-dnd/invariant';\nexport function validateSourceContract(source) {\n invariant(typeof source.canDrag === 'function', 'Expected canDrag to be a function.');\n invariant(typeof source.beginDrag === 'function', 'Expected beginDrag to be a function.');\n invariant(typeof source.endDrag === 'function', 'Expected endDrag to be a function.');\n}\nexport function validateTargetContract(target) {\n invariant(typeof target.canDrop === 'function', 'Expected canDrop to be a function.');\n invariant(typeof target.hover === 'function', 'Expected hover to be a function.');\n invariant(typeof target.drop === 'function', 'Expected beginDrag to be a function.');\n}\nexport function validateType(type, allowArray) {\n if (allowArray && Array.isArray(type)) {\n type.forEach(function (t) {\n return validateType(t, false);\n });\n return;\n }\n\n invariant(typeof type === 'string' || _typeof(type) === 'symbol', allowArray ? 'Type can only be a string, a symbol, or an array of either.' : 'Type can only be a string or a symbol.');\n}","// Safari 6 and 6.1 for desktop, iPad, and iPhone are the only browsers that\n// have WebKitMutationObserver but not un-prefixed MutationObserver.\n// Must use `global` or `self` instead of `window` to work in both frames and web\n// workers. `global` is a provision of Browserify, Mr, Mrs, or Mop.\n/* globals self */ const scope = typeof global !== 'undefined' ? global : self;\nconst BrowserMutationObserver = scope.MutationObserver || scope.WebKitMutationObserver;\nexport function makeRequestCallFromTimer(callback) {\n return function requestCall() {\n // We dispatch a timeout with a specified delay of 0 for engines that\n // can reliably accommodate that request. This will usually be snapped\n // to a 4 milisecond delay, but once we're flushing, there's no delay\n // between events.\n const timeoutHandle = setTimeout(handleTimer, 0);\n // However, since this timer gets frequently dropped in Firefox\n // workers, we enlist an interval handle that will try to fire\n // an event 20 times per second until it succeeds.\n const intervalHandle = setInterval(handleTimer, 50);\n function handleTimer() {\n // Whichever timer succeeds will cancel both timers and\n // execute the callback.\n clearTimeout(timeoutHandle);\n clearInterval(intervalHandle);\n callback();\n }\n };\n}\n// To request a high priority event, we induce a mutation observer by toggling\n// the text of a text node between \"1\" and \"-1\".\nexport function makeRequestCallFromMutationObserver(callback) {\n let toggle = 1;\n const observer = new BrowserMutationObserver(callback);\n const node = document.createTextNode('');\n observer.observe(node, {\n characterData: true\n });\n return function requestCall() {\n toggle = -toggle;\n node.data = toggle;\n };\n}\nexport const makeRequestCall = typeof BrowserMutationObserver === 'function' ? // reliably everywhere they are implemented.\n// They are implemented in all modern browsers.\n//\n// - Android 4-4.3\n// - Chrome 26-34\n// - Firefox 14-29\n// - Internet Explorer 11\n// - iPad Safari 6-7.1\n// - iPhone Safari 7-7.1\n// - Safari 6-7\nmakeRequestCallFromMutationObserver : // task queue, are implemented in Internet Explorer 10, Safari 5.0-1, and Opera\n// 11-12, and in web workers in many engines.\n// Although message channels yield to any queued rendering and IO tasks, they\n// would be better than imposing the 4ms delay of timers.\n// However, they do not work reliably in Internet Explorer or Safari.\n// Internet Explorer 10 is the only browser that has setImmediate but does\n// not have MutationObservers.\n// Although setImmediate yields to the browser's renderer, it would be\n// preferrable to falling back to setTimeout since it does not have\n// the minimum 4ms penalty.\n// Unfortunately there appears to be a bug in Internet Explorer 10 Mobile (and\n// Desktop to a lesser extent) that renders both setImmediate and\n// MessageChannel useless for the purposes of ASAP.\n// https://github.com/kriskowal/q/issues/396\n// Timers are implemented universally.\n// We fall back to timers in workers in most engines, and in foreground\n// contexts in the following browsers.\n// However, note that even this simple case requires nuances to operate in a\n// broad spectrum of browsers.\n//\n// - Firefox 3-13\n// - Internet Explorer 6-9\n// - iPad Safari 4.3\n// - Lynx 2.8.7\nmakeRequestCallFromTimer;\n\n//# sourceMappingURL=makeRequestCall.mjs.map","// `call`, just like a function.\nexport class RawTask {\n call() {\n try {\n this.task && this.task();\n } catch (error) {\n this.onError(error);\n } finally{\n this.task = null;\n this.release(this);\n }\n }\n constructor(onError, release){\n this.onError = onError;\n this.release = release;\n this.task = null;\n }\n}\n\n//# sourceMappingURL=RawTask.mjs.map","import { AsapQueue } from './AsapQueue.mjs';\nimport { TaskFactory } from './TaskFactory.mjs';\nconst asapQueue = new AsapQueue();\nconst taskFactory = new TaskFactory(asapQueue.registerPendingError);\n/**\n * Calls a task as soon as possible after returning, in its own event, with priority\n * over other events like animation, reflow, and repaint. An error thrown from an\n * event will not interrupt, nor even substantially slow down the processing of\n * other events, but will be rather postponed to a lower priority event.\n * @param {{call}} task A callable object, typically a function that takes no\n * arguments.\n */ export function asap(task) {\n asapQueue.enqueueTask(taskFactory.create(task));\n}\n\n//# sourceMappingURL=asap.mjs.map","import { makeRequestCall, makeRequestCallFromTimer } from './makeRequestCall.mjs';\nexport class AsapQueue {\n // Use the fastest means possible to execute a task in its own turn, with\n // priority over other events including IO, animation, reflow, and redraw\n // events in browsers.\n //\n // An exception thrown by a task will permanently interrupt the processing of\n // subsequent tasks. The higher level `asap` function ensures that if an\n // exception is thrown by a task, that the task queue will continue flushing as\n // soon as possible, but if you use `rawAsap` directly, you are responsible to\n // either ensure that no exceptions are thrown from your task, or to manually\n // call `rawAsap.requestFlush` if an exception is thrown.\n enqueueTask(task) {\n const { queue: q , requestFlush } = this;\n if (!q.length) {\n requestFlush();\n this.flushing = true;\n }\n // Equivalent to push, but avoids a function call.\n q[q.length] = task;\n }\n constructor(){\n this.queue = [];\n // We queue errors to ensure they are thrown in right order (FIFO).\n // Array-as-queue is good enough here, since we are just dealing with exceptions.\n this.pendingErrors = [];\n // Once a flush has been requested, no further calls to `requestFlush` are\n // necessary until the next `flush` completes.\n // @ts-ignore\n this.flushing = false;\n // The position of the next task to execute in the task queue. This is\n // preserved between calls to `flush` so that it can be resumed if\n // a task throws an exception.\n this.index = 0;\n // If a task schedules additional tasks recursively, the task queue can grow\n // unbounded. To prevent memory exhaustion, the task queue will periodically\n // truncate already-completed tasks.\n this.capacity = 1024;\n // The flush function processes all tasks that have been scheduled with\n // `rawAsap` unless and until one of those tasks throws an exception.\n // If a task throws an exception, `flush` ensures that its state will remain\n // consistent and will resume where it left off when called again.\n // However, `flush` does not make any arrangements to be called again if an\n // exception is thrown.\n this.flush = ()=>{\n const { queue: q } = this;\n while(this.index < q.length){\n const currentIndex = this.index;\n // Advance the index before calling the task. This ensures that we will\n // begin flushing on the next task the task throws an error.\n this.index++;\n q[currentIndex].call();\n // Prevent leaking memory for long chains of recursive calls to `asap`.\n // If we call `asap` within tasks scheduled by `asap`, the queue will\n // grow, but to avoid an O(n) walk for every task we execute, we don't\n // shift tasks off the queue after they have been executed.\n // Instead, we periodically shift 1024 tasks off the queue.\n if (this.index > this.capacity) {\n // Manually shift all values starting at the index back to the\n // beginning of the queue.\n for(let scan = 0, newLength = q.length - this.index; scan < newLength; scan++){\n q[scan] = q[scan + this.index];\n }\n q.length -= this.index;\n this.index = 0;\n }\n }\n q.length = 0;\n this.index = 0;\n this.flushing = false;\n };\n // In a web browser, exceptions are not fatal. However, to avoid\n // slowing down the queue of pending tasks, we rethrow the error in a\n // lower priority turn.\n this.registerPendingError = (err)=>{\n this.pendingErrors.push(err);\n this.requestErrorThrow();\n };\n // `requestFlush` requests that the high priority event queue be flushed as\n // soon as possible.\n // This is useful to prevent an error thrown in a task from stalling the event\n // queue if the exception handled by Node.js’s\n // `process.on(\"uncaughtException\")` or by a domain.\n // `requestFlush` is implemented using a strategy based on data collected from\n // every available SauceLabs Selenium web driver worker at time of writing.\n // https://docs.google.com/spreadsheets/d/1mG-5UYGup5qxGdEMWkhP6BWCz053NUb2E1QoUTU16uA/edit#gid=783724593\n this.requestFlush = makeRequestCall(this.flush);\n this.requestErrorThrow = makeRequestCallFromTimer(()=>{\n // Throw first error\n if (this.pendingErrors.length) {\n throw this.pendingErrors.shift();\n }\n });\n }\n} // The message channel technique was discovered by Malte Ubl and was the\n // original foundation for this library.\n // http://www.nonblocking.io/2011/06/windownexttick.html\n // Safari 6.0.5 (at least) intermittently fails to create message ports on a\n // page's first load. Thankfully, this version of Safari supports\n // MutationObservers, so we don't need to fall back in that case.\n // function makeRequestCallFromMessageChannel(callback) {\n // var channel = new MessageChannel();\n // channel.port1.onmessage = callback;\n // return function requestCall() {\n // channel.port2.postMessage(0);\n // };\n // }\n // For reasons explained above, we are also unable to use `setImmediate`\n // under any circumstances.\n // Even if we were, there is another bug in Internet Explorer 10.\n // It is not sufficient to assign `setImmediate` to `requestFlush` because\n // `setImmediate` must be called *by name* and therefore must be wrapped in a\n // closure.\n // Never forget.\n // function makeRequestCallFromSetImmediate(callback) {\n // return function requestCall() {\n // setImmediate(callback);\n // };\n // }\n // Safari 6.0 has a problem where timers will get lost while the user is\n // scrolling. This problem does not impact ASAP because Safari 6.0 supports\n // mutation observers, so that implementation is used instead.\n // However, if we ever elect to use timers in Safari, the prevalent work-around\n // is to add a scroll event listener that calls for a flush.\n // `setTimeout` does not call the passed callback if the delay is less than\n // approximately 7 in web workers in Firefox 8 through 18, and sometimes not\n // even then.\n // This is for `asap.js` only.\n // Its name will be periodically randomized to break any code that depends on\n // // its existence.\n // rawAsap.makeRequestCallFromTimer = makeRequestCallFromTimer\n // ASAP was originally a nextTick shim included in Q. This was factored out\n // into this ASAP package. It was later adapted to RSVP which made further\n // amendments. These decisions, particularly to marginalize MessageChannel and\n // to capture the MutationObserver implementation in a closure, were integrated\n // back into ASAP proper.\n // https://github.com/tildeio/rsvp.js/blob/cddf7232546a9cf858524b75cde6f9edf72620a7/lib/rsvp/asap.js\n\n//# sourceMappingURL=AsapQueue.mjs.map","import { RawTask } from './RawTask.mjs';\nexport class TaskFactory {\n create(task) {\n const tasks = this.freeTasks;\n const t1 = tasks.length ? tasks.pop() : new RawTask(this.onError, (t)=>tasks[tasks.length] = t\n );\n t1.task = task;\n return t1;\n }\n constructor(onError){\n this.onError = onError;\n this.freeTasks = [];\n }\n}\n\n//# sourceMappingURL=TaskFactory.mjs.map","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport { invariant } from '@react-dnd/invariant';\nimport { addSource as _addSource, addTarget as _addTarget, removeSource as _removeSource, removeTarget as _removeTarget } from '../actions/registry';\nimport { getNextUniqueId } from '../utils/getNextUniqueId';\nimport { HandlerRole } from '../interfaces';\nimport { validateSourceContract, validateTargetContract, validateType } from '../contracts';\nimport { asap } from '@react-dnd/asap';\n\nfunction getNextHandlerId(role) {\n var id = getNextUniqueId().toString();\n\n switch (role) {\n case HandlerRole.SOURCE:\n return \"S\".concat(id);\n\n case HandlerRole.TARGET:\n return \"T\".concat(id);\n\n default:\n throw new Error(\"Unknown Handler Role: \".concat(role));\n }\n}\n\nfunction parseRoleFromHandlerId(handlerId) {\n switch (handlerId[0]) {\n case 'S':\n return HandlerRole.SOURCE;\n\n case 'T':\n return HandlerRole.TARGET;\n\n default:\n invariant(false, \"Cannot parse handler ID: \".concat(handlerId));\n }\n}\n\nfunction mapContainsValue(map, searchValue) {\n var entries = map.entries();\n var isDone = false;\n\n do {\n var _entries$next = entries.next(),\n done = _entries$next.done,\n _entries$next$value = _slicedToArray(_entries$next.value, 2),\n value = _entries$next$value[1];\n\n if (value === searchValue) {\n return true;\n }\n\n isDone = !!done;\n } while (!isDone);\n\n return false;\n}\n\nexport var HandlerRegistryImpl = /*#__PURE__*/function () {\n function HandlerRegistryImpl(store) {\n _classCallCheck(this, HandlerRegistryImpl);\n\n this.types = new Map();\n this.dragSources = new Map();\n this.dropTargets = new Map();\n this.pinnedSourceId = null;\n this.pinnedSource = null;\n this.store = store;\n }\n\n _createClass(HandlerRegistryImpl, [{\n key: \"addSource\",\n value: function addSource(type, source) {\n validateType(type);\n validateSourceContract(source);\n var sourceId = this.addHandler(HandlerRole.SOURCE, type, source);\n this.store.dispatch(_addSource(sourceId));\n return sourceId;\n }\n }, {\n key: \"addTarget\",\n value: function addTarget(type, target) {\n validateType(type, true);\n validateTargetContract(target);\n var targetId = this.addHandler(HandlerRole.TARGET, type, target);\n this.store.dispatch(_addTarget(targetId));\n return targetId;\n }\n }, {\n key: \"containsHandler\",\n value: function containsHandler(handler) {\n return mapContainsValue(this.dragSources, handler) || mapContainsValue(this.dropTargets, handler);\n }\n }, {\n key: \"getSource\",\n value: function getSource(sourceId) {\n var includePinned = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n invariant(this.isSourceId(sourceId), 'Expected a valid source ID.');\n var isPinned = includePinned && sourceId === this.pinnedSourceId;\n var source = isPinned ? this.pinnedSource : this.dragSources.get(sourceId);\n return source;\n }\n }, {\n key: \"getTarget\",\n value: function getTarget(targetId) {\n invariant(this.isTargetId(targetId), 'Expected a valid target ID.');\n return this.dropTargets.get(targetId);\n }\n }, {\n key: \"getSourceType\",\n value: function getSourceType(sourceId) {\n invariant(this.isSourceId(sourceId), 'Expected a valid source ID.');\n return this.types.get(sourceId);\n }\n }, {\n key: \"getTargetType\",\n value: function getTargetType(targetId) {\n invariant(this.isTargetId(targetId), 'Expected a valid target ID.');\n return this.types.get(targetId);\n }\n }, {\n key: \"isSourceId\",\n value: function isSourceId(handlerId) {\n var role = parseRoleFromHandlerId(handlerId);\n return role === HandlerRole.SOURCE;\n }\n }, {\n key: \"isTargetId\",\n value: function isTargetId(handlerId) {\n var role = parseRoleFromHandlerId(handlerId);\n return role === HandlerRole.TARGET;\n }\n }, {\n key: \"removeSource\",\n value: function removeSource(sourceId) {\n var _this = this;\n\n invariant(this.getSource(sourceId), 'Expected an existing source.');\n this.store.dispatch(_removeSource(sourceId));\n asap(function () {\n _this.dragSources.delete(sourceId);\n\n _this.types.delete(sourceId);\n });\n }\n }, {\n key: \"removeTarget\",\n value: function removeTarget(targetId) {\n invariant(this.getTarget(targetId), 'Expected an existing target.');\n this.store.dispatch(_removeTarget(targetId));\n this.dropTargets.delete(targetId);\n this.types.delete(targetId);\n }\n }, {\n key: \"pinSource\",\n value: function pinSource(sourceId) {\n var source = this.getSource(sourceId);\n invariant(source, 'Expected an existing source.');\n this.pinnedSourceId = sourceId;\n this.pinnedSource = source;\n }\n }, {\n key: \"unpinSource\",\n value: function unpinSource() {\n invariant(this.pinnedSource, 'No source is pinned at the time.');\n this.pinnedSourceId = null;\n this.pinnedSource = null;\n }\n }, {\n key: \"addHandler\",\n value: function addHandler(role, type, handler) {\n var id = getNextHandlerId(role);\n this.types.set(id, type);\n\n if (role === HandlerRole.SOURCE) {\n this.dragSources.set(id, handler);\n } else if (role === HandlerRole.TARGET) {\n this.dropTargets.set(id, handler);\n }\n\n return id;\n }\n }]);\n\n return HandlerRegistryImpl;\n}();","import { DragDropManagerImpl } from './classes/DragDropManagerImpl';\nimport { createStore } from 'redux';\nimport { reduce } from './reducers';\nimport { DragDropMonitorImpl } from './classes/DragDropMonitorImpl';\nimport { HandlerRegistryImpl } from './classes/HandlerRegistryImpl';\nexport function createDragDropManager(backendFactory) {\n var globalContext = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n var backendOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var debugMode = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var store = makeStoreInstance(debugMode);\n var monitor = new DragDropMonitorImpl(store, new HandlerRegistryImpl(store));\n var manager = new DragDropManagerImpl(store, monitor);\n var backend = backendFactory(manager, globalContext, backendOptions);\n manager.receiveBackend(backend);\n return manager;\n}\n\nfunction makeStoreInstance(debugMode) {\n // TODO: if we ever make a react-native version of this,\n // we'll need to consider how to pull off dev-tooling\n var reduxDevTools = typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION__;\n return createStore(reduce, debugMode && reduxDevTools && reduxDevTools({\n name: 'dnd-core',\n instanceId: 'dnd-core'\n }));\n}","import { createContext } from 'react';\n/**\n * Create the React Context\n */\n\nexport var DndContext = createContext({\n dragDropManager: undefined\n});","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useEffect, memo } from 'react';\nimport { createDragDropManager } from 'dnd-core';\nimport { DndContext } from './DndContext';\nvar refCount = 0;\nvar INSTANCE_SYM = Symbol.for('__REACT_DND_CONTEXT_INSTANCE__');\n/**\n * A React component that provides the React-DnD context\n */\n\nexport var DndProvider = memo(function DndProvider(_ref) {\n var children = _ref.children,\n props = _objectWithoutProperties(_ref, [\"children\"]);\n\n var _getDndContextValue = getDndContextValue(props),\n _getDndContextValue2 = _slicedToArray(_getDndContextValue, 2),\n manager = _getDndContextValue2[0],\n isGlobalInstance = _getDndContextValue2[1]; // memoized from props\n\n /**\n * If the global context was used to store the DND context\n * then where theres no more references to it we should\n * clean it up to avoid memory leaks\n */\n\n\n useEffect(function () {\n if (isGlobalInstance) {\n var context = getGlobalContext();\n ++refCount;\n return function () {\n if (--refCount === 0) {\n context[INSTANCE_SYM] = null;\n }\n };\n }\n }, []);\n return _jsx(DndContext.Provider, Object.assign({\n value: manager\n }, {\n children: children\n }), void 0);\n});\n\nfunction getDndContextValue(props) {\n if ('manager' in props) {\n var _manager = {\n dragDropManager: props.manager\n };\n return [_manager, false];\n }\n\n var manager = createSingletonDndContext(props.backend, props.context, props.options, props.debugMode);\n var isGlobalInstance = !props.context;\n return [manager, isGlobalInstance];\n}\n\nfunction createSingletonDndContext(backend) {\n var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getGlobalContext();\n var options = arguments.length > 2 ? arguments[2] : undefined;\n var debugMode = arguments.length > 3 ? arguments[3] : undefined;\n var ctx = context;\n\n if (!ctx[INSTANCE_SYM]) {\n ctx[INSTANCE_SYM] = {\n dragDropManager: createDragDropManager(backend, context, options, debugMode)\n };\n }\n\n return ctx[INSTANCE_SYM];\n}\n\nfunction getGlobalContext() {\n return typeof global !== 'undefined' ? global : window;\n}","// cheap lodash replacements\nexport function memoize(fn) {\n var result = null;\n\n var memoized = function memoized() {\n if (result == null) {\n result = fn();\n }\n\n return result;\n };\n\n return memoized;\n}\n/**\n * drop-in replacement for _.without\n */\n\nexport function without(items, item) {\n return items.filter(function (i) {\n return i !== item;\n });\n}\nexport function union(itemsA, itemsB) {\n var set = new Set();\n\n var insertItem = function insertItem(item) {\n return set.add(item);\n };\n\n itemsA.forEach(insertItem);\n itemsB.forEach(insertItem);\n var result = [];\n set.forEach(function (key) {\n return result.push(key);\n });\n return result;\n}","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nimport { union, without } from './utils/js_utils';\nexport var EnterLeaveCounter = /*#__PURE__*/function () {\n function EnterLeaveCounter(isNodeInDocument) {\n _classCallCheck(this, EnterLeaveCounter);\n\n this.entered = [];\n this.isNodeInDocument = isNodeInDocument;\n }\n\n _createClass(EnterLeaveCounter, [{\n key: \"enter\",\n value: function enter(enteringNode) {\n var _this = this;\n\n var previousLength = this.entered.length;\n\n var isNodeEntered = function isNodeEntered(node) {\n return _this.isNodeInDocument(node) && (!node.contains || node.contains(enteringNode));\n };\n\n this.entered = union(this.entered.filter(isNodeEntered), [enteringNode]);\n return previousLength === 0 && this.entered.length > 0;\n }\n }, {\n key: \"leave\",\n value: function leave(leavingNode) {\n var previousLength = this.entered.length;\n this.entered = without(this.entered.filter(this.isNodeInDocument), leavingNode);\n return previousLength > 0 && this.entered.length === 0;\n }\n }, {\n key: \"reset\",\n value: function reset() {\n this.entered = [];\n }\n }]);\n\n return EnterLeaveCounter;\n}();","import { memoize } from './utils/js_utils';\nexport var isFirefox = memoize(function () {\n return /firefox/i.test(navigator.userAgent);\n});\nexport var isSafari = memoize(function () {\n return Boolean(window.safari);\n});","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nexport var MonotonicInterpolant = /*#__PURE__*/function () {\n function MonotonicInterpolant(xs, ys) {\n _classCallCheck(this, MonotonicInterpolant);\n\n var length = xs.length; // Rearrange xs and ys so that xs is sorted\n\n var indexes = [];\n\n for (var i = 0; i < length; i++) {\n indexes.push(i);\n }\n\n indexes.sort(function (a, b) {\n return xs[a] < xs[b] ? -1 : 1;\n }); // Get consecutive differences and slopes\n\n var dys = [];\n var dxs = [];\n var ms = [];\n var dx;\n var dy;\n\n for (var _i = 0; _i < length - 1; _i++) {\n dx = xs[_i + 1] - xs[_i];\n dy = ys[_i + 1] - ys[_i];\n dxs.push(dx);\n dys.push(dy);\n ms.push(dy / dx);\n } // Get degree-1 coefficients\n\n\n var c1s = [ms[0]];\n\n for (var _i2 = 0; _i2 < dxs.length - 1; _i2++) {\n var m2 = ms[_i2];\n var mNext = ms[_i2 + 1];\n\n if (m2 * mNext <= 0) {\n c1s.push(0);\n } else {\n dx = dxs[_i2];\n var dxNext = dxs[_i2 + 1];\n var common = dx + dxNext;\n c1s.push(3 * common / ((common + dxNext) / m2 + (common + dx) / mNext));\n }\n }\n\n c1s.push(ms[ms.length - 1]); // Get degree-2 and degree-3 coefficients\n\n var c2s = [];\n var c3s = [];\n var m;\n\n for (var _i3 = 0; _i3 < c1s.length - 1; _i3++) {\n m = ms[_i3];\n var c1 = c1s[_i3];\n var invDx = 1 / dxs[_i3];\n\n var _common = c1 + c1s[_i3 + 1] - m - m;\n\n c2s.push((m - c1 - _common) * invDx);\n c3s.push(_common * invDx * invDx);\n }\n\n this.xs = xs;\n this.ys = ys;\n this.c1s = c1s;\n this.c2s = c2s;\n this.c3s = c3s;\n }\n\n _createClass(MonotonicInterpolant, [{\n key: \"interpolate\",\n value: function interpolate(x) {\n var xs = this.xs,\n ys = this.ys,\n c1s = this.c1s,\n c2s = this.c2s,\n c3s = this.c3s; // The rightmost point in the dataset should give an exact result\n\n var i = xs.length - 1;\n\n if (x === xs[i]) {\n return ys[i];\n } // Search for the interval x is in, returning the corresponding y if x is one of the original xs\n\n\n var low = 0;\n var high = c3s.length - 1;\n var mid;\n\n while (low <= high) {\n mid = Math.floor(0.5 * (low + high));\n var xHere = xs[mid];\n\n if (xHere < x) {\n low = mid + 1;\n } else if (xHere > x) {\n high = mid - 1;\n } else {\n return ys[mid];\n }\n }\n\n i = Math.max(0, high); // Interpolate\n\n var diff = x - xs[i];\n var diffSq = diff * diff;\n return ys[i] + c1s[i] * diff + c2s[i] * diffSq + c3s[i] * diff * diffSq;\n }\n }]);\n\n return MonotonicInterpolant;\n}();","import { isSafari, isFirefox } from './BrowserDetector';\nimport { MonotonicInterpolant } from './MonotonicInterpolant';\nvar ELEMENT_NODE = 1;\nexport function getNodeClientOffset(node) {\n var el = node.nodeType === ELEMENT_NODE ? node : node.parentElement;\n\n if (!el) {\n return null;\n }\n\n var _el$getBoundingClient = el.getBoundingClientRect(),\n top = _el$getBoundingClient.top,\n left = _el$getBoundingClient.left;\n\n return {\n x: left,\n y: top\n };\n}\nexport function getEventClientOffset(e) {\n return {\n x: e.clientX,\n y: e.clientY\n };\n}\n\nfunction isImageNode(node) {\n var _document$documentEle;\n\n return node.nodeName === 'IMG' && (isFirefox() || !((_document$documentEle = document.documentElement) !== null && _document$documentEle !== void 0 && _document$documentEle.contains(node)));\n}\n\nfunction getDragPreviewSize(isImage, dragPreview, sourceWidth, sourceHeight) {\n var dragPreviewWidth = isImage ? dragPreview.width : sourceWidth;\n var dragPreviewHeight = isImage ? dragPreview.height : sourceHeight; // Work around @2x coordinate discrepancies in browsers\n\n if (isSafari() && isImage) {\n dragPreviewHeight /= window.devicePixelRatio;\n dragPreviewWidth /= window.devicePixelRatio;\n }\n\n return {\n dragPreviewWidth: dragPreviewWidth,\n dragPreviewHeight: dragPreviewHeight\n };\n}\n\nexport function getDragPreviewOffset(sourceNode, dragPreview, clientOffset, anchorPoint, offsetPoint) {\n // The browsers will use the image intrinsic size under different conditions.\n // Firefox only cares if it's an image, but WebKit also wants it to be detached.\n var isImage = isImageNode(dragPreview);\n var dragPreviewNode = isImage ? sourceNode : dragPreview;\n var dragPreviewNodeOffsetFromClient = getNodeClientOffset(dragPreviewNode);\n var offsetFromDragPreview = {\n x: clientOffset.x - dragPreviewNodeOffsetFromClient.x,\n y: clientOffset.y - dragPreviewNodeOffsetFromClient.y\n };\n var sourceWidth = sourceNode.offsetWidth,\n sourceHeight = sourceNode.offsetHeight;\n var anchorX = anchorPoint.anchorX,\n anchorY = anchorPoint.anchorY;\n\n var _getDragPreviewSize = getDragPreviewSize(isImage, dragPreview, sourceWidth, sourceHeight),\n dragPreviewWidth = _getDragPreviewSize.dragPreviewWidth,\n dragPreviewHeight = _getDragPreviewSize.dragPreviewHeight;\n\n var calculateYOffset = function calculateYOffset() {\n var interpolantY = new MonotonicInterpolant([0, 0.5, 1], [// Dock to the top\n offsetFromDragPreview.y, // Align at the center\n offsetFromDragPreview.y / sourceHeight * dragPreviewHeight, // Dock to the bottom\n offsetFromDragPreview.y + dragPreviewHeight - sourceHeight]);\n var y = interpolantY.interpolate(anchorY); // Work around Safari 8 positioning bug\n\n if (isSafari() && isImage) {\n // We'll have to wait for @3x to see if this is entirely correct\n y += (window.devicePixelRatio - 1) * dragPreviewHeight;\n }\n\n return y;\n };\n\n var calculateXOffset = function calculateXOffset() {\n // Interpolate coordinates depending on anchor point\n // If you know a simpler way to do this, let me know\n var interpolantX = new MonotonicInterpolant([0, 0.5, 1], [// Dock to the left\n offsetFromDragPreview.x, // Align at the center\n offsetFromDragPreview.x / sourceWidth * dragPreviewWidth, // Dock to the right\n offsetFromDragPreview.x + dragPreviewWidth - sourceWidth]);\n return interpolantX.interpolate(anchorX);\n }; // Force offsets if specified in the options.\n\n\n var offsetX = offsetPoint.offsetX,\n offsetY = offsetPoint.offsetY;\n var isManualOffsetX = offsetX === 0 || offsetX;\n var isManualOffsetY = offsetY === 0 || offsetY;\n return {\n x: isManualOffsetX ? offsetX : calculateXOffset(),\n y: isManualOffsetY ? offsetY : calculateYOffset()\n };\n}","export var FILE = '__NATIVE_FILE__';\nexport var URL = '__NATIVE_URL__';\nexport var TEXT = '__NATIVE_TEXT__';\nexport var HTML = '__NATIVE_HTML__';","var _nativeTypesConfig;\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport * as NativeTypes from '../NativeTypes';\nimport { getDataFromDataTransfer } from './getDataFromDataTransfer';\nexport var nativeTypesConfig = (_nativeTypesConfig = {}, _defineProperty(_nativeTypesConfig, NativeTypes.FILE, {\n exposeProperties: {\n files: function files(dataTransfer) {\n return Array.prototype.slice.call(dataTransfer.files);\n },\n items: function items(dataTransfer) {\n return dataTransfer.items;\n }\n },\n matchesTypes: ['Files']\n}), _defineProperty(_nativeTypesConfig, NativeTypes.HTML, {\n exposeProperties: {\n html: function html(dataTransfer, matchesTypes) {\n return getDataFromDataTransfer(dataTransfer, matchesTypes, '');\n }\n },\n matchesTypes: ['Html', 'text/html']\n}), _defineProperty(_nativeTypesConfig, NativeTypes.URL, {\n exposeProperties: {\n urls: function urls(dataTransfer, matchesTypes) {\n return getDataFromDataTransfer(dataTransfer, matchesTypes, '').split('\\n');\n }\n },\n matchesTypes: ['Url', 'text/uri-list']\n}), _defineProperty(_nativeTypesConfig, NativeTypes.TEXT, {\n exposeProperties: {\n text: function text(dataTransfer, matchesTypes) {\n return getDataFromDataTransfer(dataTransfer, matchesTypes, '');\n }\n },\n matchesTypes: ['Text', 'text/plain']\n}), _nativeTypesConfig);","export function getDataFromDataTransfer(dataTransfer, typesToTry, defaultValue) {\n var result = typesToTry.reduce(function (resultSoFar, typeToTry) {\n return resultSoFar || dataTransfer.getData(typeToTry);\n }, '');\n return result != null ? result : defaultValue;\n}","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nexport var NativeDragSource = /*#__PURE__*/function () {\n function NativeDragSource(config) {\n _classCallCheck(this, NativeDragSource);\n\n this.config = config;\n this.item = {};\n this.initializeExposedProperties();\n }\n\n _createClass(NativeDragSource, [{\n key: \"initializeExposedProperties\",\n value: function initializeExposedProperties() {\n var _this = this;\n\n Object.keys(this.config.exposeProperties).forEach(function (property) {\n Object.defineProperty(_this.item, property, {\n configurable: true,\n enumerable: true,\n get: function get() {\n // eslint-disable-next-line no-console\n console.warn(\"Browser doesn't allow reading \\\"\".concat(property, \"\\\" until the drop event.\"));\n return null;\n }\n });\n });\n }\n }, {\n key: \"loadDataTransfer\",\n value: function loadDataTransfer(dataTransfer) {\n var _this2 = this;\n\n if (dataTransfer) {\n var newProperties = {};\n Object.keys(this.config.exposeProperties).forEach(function (property) {\n newProperties[property] = {\n value: _this2.config.exposeProperties[property](dataTransfer, _this2.config.matchesTypes),\n configurable: true,\n enumerable: true\n };\n });\n Object.defineProperties(this.item, newProperties);\n }\n }\n }, {\n key: \"canDrag\",\n value: function canDrag() {\n return true;\n }\n }, {\n key: \"beginDrag\",\n value: function beginDrag() {\n return this.item;\n }\n }, {\n key: \"isDragging\",\n value: function isDragging(monitor, handle) {\n return handle === monitor.getSourceId();\n }\n }, {\n key: \"endDrag\",\n value: function endDrag() {// empty\n }\n }]);\n\n return NativeDragSource;\n}();","import { nativeTypesConfig } from './nativeTypesConfig';\nimport { NativeDragSource } from './NativeDragSource';\nexport function createNativeDragSource(type, dataTransfer) {\n var result = new NativeDragSource(nativeTypesConfig[type]);\n result.loadDataTransfer(dataTransfer);\n return result;\n}\nexport function matchNativeItemType(dataTransfer) {\n if (!dataTransfer) {\n return null;\n }\n\n var dataTransferTypes = Array.prototype.slice.call(dataTransfer.types || []);\n return Object.keys(nativeTypesConfig).filter(function (nativeItemType) {\n var matchesTypes = nativeTypesConfig[nativeItemType].matchesTypes;\n return matchesTypes.some(function (t) {\n return dataTransferTypes.indexOf(t) > -1;\n });\n })[0] || null;\n}","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nexport var OptionsReader = /*#__PURE__*/function () {\n function OptionsReader(globalContext, options) {\n _classCallCheck(this, OptionsReader);\n\n this.ownerDocument = null;\n this.globalContext = globalContext;\n this.optionsArgs = options;\n }\n\n _createClass(OptionsReader, [{\n key: \"window\",\n get: function get() {\n if (this.globalContext) {\n return this.globalContext;\n } else if (typeof window !== 'undefined') {\n return window;\n }\n\n return undefined;\n }\n }, {\n key: \"document\",\n get: function get() {\n var _this$globalContext;\n\n if ((_this$globalContext = this.globalContext) !== null && _this$globalContext !== void 0 && _this$globalContext.document) {\n return this.globalContext.document;\n } else if (this.window) {\n return this.window.document;\n } else {\n return undefined;\n }\n }\n }, {\n key: \"rootElement\",\n get: function get() {\n var _this$optionsArgs;\n\n return ((_this$optionsArgs = this.optionsArgs) === null || _this$optionsArgs === void 0 ? void 0 : _this$optionsArgs.rootElement) || this.window;\n }\n }]);\n\n return OptionsReader;\n}();","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nimport { EnterLeaveCounter } from './EnterLeaveCounter';\nimport { getNodeClientOffset, getEventClientOffset, getDragPreviewOffset } from './OffsetUtils';\nimport { createNativeDragSource, matchNativeItemType } from './NativeDragSources';\nimport * as NativeTypes from './NativeTypes';\nimport { OptionsReader } from './OptionsReader';\nexport var HTML5BackendImpl = /*#__PURE__*/function () {\n function HTML5BackendImpl(manager, globalContext, options) {\n var _this = this;\n\n _classCallCheck(this, HTML5BackendImpl);\n\n this.sourcePreviewNodes = new Map();\n this.sourcePreviewNodeOptions = new Map();\n this.sourceNodes = new Map();\n this.sourceNodeOptions = new Map();\n this.dragStartSourceIds = null;\n this.dropTargetIds = [];\n this.dragEnterTargetIds = [];\n this.currentNativeSource = null;\n this.currentNativeHandle = null;\n this.currentDragSourceNode = null;\n this.altKeyPressed = false;\n this.mouseMoveTimeoutTimer = null;\n this.asyncEndDragFrameId = null;\n this.dragOverTargetIds = null;\n\n this.getSourceClientOffset = function (sourceId) {\n var source = _this.sourceNodes.get(sourceId);\n\n return source && getNodeClientOffset(source) || null;\n };\n\n this.endDragNativeItem = function () {\n if (!_this.isDraggingNativeItem()) {\n return;\n }\n\n _this.actions.endDrag();\n\n if (_this.currentNativeHandle) {\n _this.registry.removeSource(_this.currentNativeHandle);\n }\n\n _this.currentNativeHandle = null;\n _this.currentNativeSource = null;\n };\n\n this.isNodeInDocument = function (node) {\n // Check the node either in the main document or in the current context\n return Boolean(node && _this.document && _this.document.body && document.body.contains(node));\n };\n\n this.endDragIfSourceWasRemovedFromDOM = function () {\n var node = _this.currentDragSourceNode;\n\n if (node == null || _this.isNodeInDocument(node)) {\n return;\n }\n\n if (_this.clearCurrentDragSourceNode() && _this.monitor.isDragging()) {\n _this.actions.endDrag();\n }\n };\n\n this.handleTopDragStartCapture = function () {\n _this.clearCurrentDragSourceNode();\n\n _this.dragStartSourceIds = [];\n };\n\n this.handleTopDragStart = function (e) {\n if (e.defaultPrevented) {\n return;\n }\n\n var dragStartSourceIds = _this.dragStartSourceIds;\n _this.dragStartSourceIds = null;\n var clientOffset = getEventClientOffset(e); // Avoid crashing if we missed a drop event or our previous drag died\n\n if (_this.monitor.isDragging()) {\n _this.actions.endDrag();\n } // Don't publish the source just yet (see why below)\n\n\n _this.actions.beginDrag(dragStartSourceIds || [], {\n publishSource: false,\n getSourceClientOffset: _this.getSourceClientOffset,\n clientOffset: clientOffset\n });\n\n var dataTransfer = e.dataTransfer;\n var nativeType = matchNativeItemType(dataTransfer);\n\n if (_this.monitor.isDragging()) {\n if (dataTransfer && typeof dataTransfer.setDragImage === 'function') {\n // Use custom drag image if user specifies it.\n // If child drag source refuses drag but parent agrees,\n // use parent's node as drag image. Neither works in IE though.\n var sourceId = _this.monitor.getSourceId();\n\n var sourceNode = _this.sourceNodes.get(sourceId);\n\n var dragPreview = _this.sourcePreviewNodes.get(sourceId) || sourceNode;\n\n if (dragPreview) {\n var _this$getCurrentSourc = _this.getCurrentSourcePreviewNodeOptions(),\n anchorX = _this$getCurrentSourc.anchorX,\n anchorY = _this$getCurrentSourc.anchorY,\n offsetX = _this$getCurrentSourc.offsetX,\n offsetY = _this$getCurrentSourc.offsetY;\n\n var anchorPoint = {\n anchorX: anchorX,\n anchorY: anchorY\n };\n var offsetPoint = {\n offsetX: offsetX,\n offsetY: offsetY\n };\n var dragPreviewOffset = getDragPreviewOffset(sourceNode, dragPreview, clientOffset, anchorPoint, offsetPoint);\n dataTransfer.setDragImage(dragPreview, dragPreviewOffset.x, dragPreviewOffset.y);\n }\n }\n\n try {\n // Firefox won't drag without setting data\n dataTransfer === null || dataTransfer === void 0 ? void 0 : dataTransfer.setData('application/json', {});\n } catch (err) {// IE doesn't support MIME types in setData\n } // Store drag source node so we can check whether\n // it is removed from DOM and trigger endDrag manually.\n\n\n _this.setCurrentDragSourceNode(e.target); // Now we are ready to publish the drag source.. or are we not?\n\n\n var _this$getCurrentSourc2 = _this.getCurrentSourcePreviewNodeOptions(),\n captureDraggingState = _this$getCurrentSourc2.captureDraggingState;\n\n if (!captureDraggingState) {\n // Usually we want to publish it in the next tick so that browser\n // is able to screenshot the current (not yet dragging) state.\n //\n // It also neatly avoids a situation where render() returns null\n // in the same tick for the source element, and browser freaks out.\n setTimeout(function () {\n return _this.actions.publishDragSource();\n }, 0);\n } else {\n // In some cases the user may want to override this behavior, e.g.\n // to work around IE not supporting custom drag previews.\n //\n // When using a custom drag layer, the only way to prevent\n // the default drag preview from drawing in IE is to screenshot\n // the dragging state in which the node itself has zero opacity\n // and height. In this case, though, returning null from render()\n // will abruptly end the dragging, which is not obvious.\n //\n // This is the reason such behavior is strictly opt-in.\n _this.actions.publishDragSource();\n }\n } else if (nativeType) {\n // A native item (such as URL) dragged from inside the document\n _this.beginDragNativeItem(nativeType);\n } else if (dataTransfer && !dataTransfer.types && (e.target && !e.target.hasAttribute || !e.target.hasAttribute('draggable'))) {\n // Looks like a Safari bug: dataTransfer.types is null, but there was no draggable.\n // Just let it drag. It's a native type (URL or text) and will be picked up in\n // dragenter handler.\n return;\n } else {\n // If by this time no drag source reacted, tell browser not to drag.\n e.preventDefault();\n }\n };\n\n this.handleTopDragEndCapture = function () {\n if (_this.clearCurrentDragSourceNode() && _this.monitor.isDragging()) {\n // Firefox can dispatch this event in an infinite loop\n // if dragend handler does something like showing an alert.\n // Only proceed if we have not handled it already.\n _this.actions.endDrag();\n }\n };\n\n this.handleTopDragEnterCapture = function (e) {\n _this.dragEnterTargetIds = [];\n\n var isFirstEnter = _this.enterLeaveCounter.enter(e.target);\n\n if (!isFirstEnter || _this.monitor.isDragging()) {\n return;\n }\n\n var dataTransfer = e.dataTransfer;\n var nativeType = matchNativeItemType(dataTransfer);\n\n if (nativeType) {\n // A native item (such as file or URL) dragged from outside the document\n _this.beginDragNativeItem(nativeType, dataTransfer);\n }\n };\n\n this.handleTopDragEnter = function (e) {\n var dragEnterTargetIds = _this.dragEnterTargetIds;\n _this.dragEnterTargetIds = [];\n\n if (!_this.monitor.isDragging()) {\n // This is probably a native item type we don't understand.\n return;\n }\n\n _this.altKeyPressed = e.altKey; // If the target changes position as the result of `dragenter`, `dragover` might still\n // get dispatched despite target being no longer there. The easy solution is to check\n // whether there actually is a target before firing `hover`.\n\n if (dragEnterTargetIds.length > 0) {\n _this.actions.hover(dragEnterTargetIds, {\n clientOffset: getEventClientOffset(e)\n });\n }\n\n var canDrop = dragEnterTargetIds.some(function (targetId) {\n return _this.monitor.canDropOnTarget(targetId);\n });\n\n if (canDrop) {\n // IE requires this to fire dragover events\n e.preventDefault();\n\n if (e.dataTransfer) {\n e.dataTransfer.dropEffect = _this.getCurrentDropEffect();\n }\n }\n };\n\n this.handleTopDragOverCapture = function () {\n _this.dragOverTargetIds = [];\n };\n\n this.handleTopDragOver = function (e) {\n var dragOverTargetIds = _this.dragOverTargetIds;\n _this.dragOverTargetIds = [];\n\n if (!_this.monitor.isDragging()) {\n // This is probably a native item type we don't understand.\n // Prevent default \"drop and blow away the whole document\" action.\n e.preventDefault();\n\n if (e.dataTransfer) {\n e.dataTransfer.dropEffect = 'none';\n }\n\n return;\n }\n\n _this.altKeyPressed = e.altKey;\n\n _this.actions.hover(dragOverTargetIds || [], {\n clientOffset: getEventClientOffset(e)\n });\n\n var canDrop = (dragOverTargetIds || []).some(function (targetId) {\n return _this.monitor.canDropOnTarget(targetId);\n });\n\n if (canDrop) {\n // Show user-specified drop effect.\n e.preventDefault();\n\n if (e.dataTransfer) {\n e.dataTransfer.dropEffect = _this.getCurrentDropEffect();\n }\n } else if (_this.isDraggingNativeItem()) {\n // Don't show a nice cursor but still prevent default\n // \"drop and blow away the whole document\" action.\n e.preventDefault();\n } else {\n e.preventDefault();\n\n if (e.dataTransfer) {\n e.dataTransfer.dropEffect = 'none';\n }\n }\n };\n\n this.handleTopDragLeaveCapture = function (e) {\n if (_this.isDraggingNativeItem()) {\n e.preventDefault();\n }\n\n var isLastLeave = _this.enterLeaveCounter.leave(e.target);\n\n if (!isLastLeave) {\n return;\n }\n\n if (_this.isDraggingNativeItem()) {\n setTimeout(function () {\n return _this.endDragNativeItem();\n }, 0);\n }\n };\n\n this.handleTopDropCapture = function (e) {\n _this.dropTargetIds = [];\n\n if (_this.isDraggingNativeItem()) {\n var _this$currentNativeSo;\n\n e.preventDefault();\n (_this$currentNativeSo = _this.currentNativeSource) === null || _this$currentNativeSo === void 0 ? void 0 : _this$currentNativeSo.loadDataTransfer(e.dataTransfer);\n }\n\n _this.enterLeaveCounter.reset();\n };\n\n this.handleTopDrop = function (e) {\n var dropTargetIds = _this.dropTargetIds;\n _this.dropTargetIds = [];\n\n _this.actions.hover(dropTargetIds, {\n clientOffset: getEventClientOffset(e)\n });\n\n _this.actions.drop({\n dropEffect: _this.getCurrentDropEffect()\n });\n\n if (_this.isDraggingNativeItem()) {\n _this.endDragNativeItem();\n } else if (_this.monitor.isDragging()) {\n _this.actions.endDrag();\n }\n };\n\n this.handleSelectStart = function (e) {\n var target = e.target; // Only IE requires us to explicitly say\n // we want drag drop operation to start\n\n if (typeof target.dragDrop !== 'function') {\n return;\n } // Inputs and textareas should be selectable\n\n\n if (target.tagName === 'INPUT' || target.tagName === 'SELECT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {\n return;\n } // For other targets, ask IE\n // to enable drag and drop\n\n\n e.preventDefault();\n target.dragDrop();\n };\n\n this.options = new OptionsReader(globalContext, options);\n this.actions = manager.getActions();\n this.monitor = manager.getMonitor();\n this.registry = manager.getRegistry();\n this.enterLeaveCounter = new EnterLeaveCounter(this.isNodeInDocument);\n }\n /**\n * Generate profiling statistics for the HTML5Backend.\n */\n\n\n _createClass(HTML5BackendImpl, [{\n key: \"profile\",\n value: function profile() {\n var _this$dragStartSource, _this$dragOverTargetI;\n\n return {\n sourcePreviewNodes: this.sourcePreviewNodes.size,\n sourcePreviewNodeOptions: this.sourcePreviewNodeOptions.size,\n sourceNodeOptions: this.sourceNodeOptions.size,\n sourceNodes: this.sourceNodes.size,\n dragStartSourceIds: ((_this$dragStartSource = this.dragStartSourceIds) === null || _this$dragStartSource === void 0 ? void 0 : _this$dragStartSource.length) || 0,\n dropTargetIds: this.dropTargetIds.length,\n dragEnterTargetIds: this.dragEnterTargetIds.length,\n dragOverTargetIds: ((_this$dragOverTargetI = this.dragOverTargetIds) === null || _this$dragOverTargetI === void 0 ? void 0 : _this$dragOverTargetI.length) || 0\n };\n } // public for test\n\n }, {\n key: \"window\",\n get: function get() {\n return this.options.window;\n }\n }, {\n key: \"document\",\n get: function get() {\n return this.options.document;\n }\n /**\n * Get the root element to use for event subscriptions\n */\n\n }, {\n key: \"rootElement\",\n get: function get() {\n return this.options.rootElement;\n }\n }, {\n key: \"setup\",\n value: function setup() {\n var root = this.rootElement;\n\n if (root === undefined) {\n return;\n }\n\n if (root.__isReactDndBackendSetUp) {\n throw new Error('Cannot have two HTML5 backends at the same time.');\n }\n\n root.__isReactDndBackendSetUp = true;\n this.addEventListeners(root);\n }\n }, {\n key: \"teardown\",\n value: function teardown() {\n var root = this.rootElement;\n\n if (root === undefined) {\n return;\n }\n\n root.__isReactDndBackendSetUp = false;\n this.removeEventListeners(this.rootElement);\n this.clearCurrentDragSourceNode();\n\n if (this.asyncEndDragFrameId) {\n var _this$window;\n\n (_this$window = this.window) === null || _this$window === void 0 ? void 0 : _this$window.cancelAnimationFrame(this.asyncEndDragFrameId);\n }\n }\n }, {\n key: \"connectDragPreview\",\n value: function connectDragPreview(sourceId, node, options) {\n var _this2 = this;\n\n this.sourcePreviewNodeOptions.set(sourceId, options);\n this.sourcePreviewNodes.set(sourceId, node);\n return function () {\n _this2.sourcePreviewNodes.delete(sourceId);\n\n _this2.sourcePreviewNodeOptions.delete(sourceId);\n };\n }\n }, {\n key: \"connectDragSource\",\n value: function connectDragSource(sourceId, node, options) {\n var _this3 = this;\n\n this.sourceNodes.set(sourceId, node);\n this.sourceNodeOptions.set(sourceId, options);\n\n var handleDragStart = function handleDragStart(e) {\n return _this3.handleDragStart(e, sourceId);\n };\n\n var handleSelectStart = function handleSelectStart(e) {\n return _this3.handleSelectStart(e);\n };\n\n node.setAttribute('draggable', 'true');\n node.addEventListener('dragstart', handleDragStart);\n node.addEventListener('selectstart', handleSelectStart);\n return function () {\n _this3.sourceNodes.delete(sourceId);\n\n _this3.sourceNodeOptions.delete(sourceId);\n\n node.removeEventListener('dragstart', handleDragStart);\n node.removeEventListener('selectstart', handleSelectStart);\n node.setAttribute('draggable', 'false');\n };\n }\n }, {\n key: \"connectDropTarget\",\n value: function connectDropTarget(targetId, node) {\n var _this4 = this;\n\n var handleDragEnter = function handleDragEnter(e) {\n return _this4.handleDragEnter(e, targetId);\n };\n\n var handleDragOver = function handleDragOver(e) {\n return _this4.handleDragOver(e, targetId);\n };\n\n var handleDrop = function handleDrop(e) {\n return _this4.handleDrop(e, targetId);\n };\n\n node.addEventListener('dragenter', handleDragEnter);\n node.addEventListener('dragover', handleDragOver);\n node.addEventListener('drop', handleDrop);\n return function () {\n node.removeEventListener('dragenter', handleDragEnter);\n node.removeEventListener('dragover', handleDragOver);\n node.removeEventListener('drop', handleDrop);\n };\n }\n }, {\n key: \"addEventListeners\",\n value: function addEventListeners(target) {\n // SSR Fix (https://github.com/react-dnd/react-dnd/pull/813\n if (!target.addEventListener) {\n return;\n }\n\n target.addEventListener('dragstart', this.handleTopDragStart);\n target.addEventListener('dragstart', this.handleTopDragStartCapture, true);\n target.addEventListener('dragend', this.handleTopDragEndCapture, true);\n target.addEventListener('dragenter', this.handleTopDragEnter);\n target.addEventListener('dragenter', this.handleTopDragEnterCapture, true);\n target.addEventListener('dragleave', this.handleTopDragLeaveCapture, true);\n target.addEventListener('dragover', this.handleTopDragOver);\n target.addEventListener('dragover', this.handleTopDragOverCapture, true);\n target.addEventListener('drop', this.handleTopDrop);\n target.addEventListener('drop', this.handleTopDropCapture, true);\n }\n }, {\n key: \"removeEventListeners\",\n value: function removeEventListeners(target) {\n // SSR Fix (https://github.com/react-dnd/react-dnd/pull/813\n if (!target.removeEventListener) {\n return;\n }\n\n target.removeEventListener('dragstart', this.handleTopDragStart);\n target.removeEventListener('dragstart', this.handleTopDragStartCapture, true);\n target.removeEventListener('dragend', this.handleTopDragEndCapture, true);\n target.removeEventListener('dragenter', this.handleTopDragEnter);\n target.removeEventListener('dragenter', this.handleTopDragEnterCapture, true);\n target.removeEventListener('dragleave', this.handleTopDragLeaveCapture, true);\n target.removeEventListener('dragover', this.handleTopDragOver);\n target.removeEventListener('dragover', this.handleTopDragOverCapture, true);\n target.removeEventListener('drop', this.handleTopDrop);\n target.removeEventListener('drop', this.handleTopDropCapture, true);\n }\n }, {\n key: \"getCurrentSourceNodeOptions\",\n value: function getCurrentSourceNodeOptions() {\n var sourceId = this.monitor.getSourceId();\n var sourceNodeOptions = this.sourceNodeOptions.get(sourceId);\n return _objectSpread({\n dropEffect: this.altKeyPressed ? 'copy' : 'move'\n }, sourceNodeOptions || {});\n }\n }, {\n key: \"getCurrentDropEffect\",\n value: function getCurrentDropEffect() {\n if (this.isDraggingNativeItem()) {\n // It makes more sense to default to 'copy' for native resources\n return 'copy';\n }\n\n return this.getCurrentSourceNodeOptions().dropEffect;\n }\n }, {\n key: \"getCurrentSourcePreviewNodeOptions\",\n value: function getCurrentSourcePreviewNodeOptions() {\n var sourceId = this.monitor.getSourceId();\n var sourcePreviewNodeOptions = this.sourcePreviewNodeOptions.get(sourceId);\n return _objectSpread({\n anchorX: 0.5,\n anchorY: 0.5,\n captureDraggingState: false\n }, sourcePreviewNodeOptions || {});\n }\n }, {\n key: \"isDraggingNativeItem\",\n value: function isDraggingNativeItem() {\n var itemType = this.monitor.getItemType();\n return Object.keys(NativeTypes).some(function (key) {\n return NativeTypes[key] === itemType;\n });\n }\n }, {\n key: \"beginDragNativeItem\",\n value: function beginDragNativeItem(type, dataTransfer) {\n this.clearCurrentDragSourceNode();\n this.currentNativeSource = createNativeDragSource(type, dataTransfer);\n this.currentNativeHandle = this.registry.addSource(type, this.currentNativeSource);\n this.actions.beginDrag([this.currentNativeHandle]);\n }\n }, {\n key: \"setCurrentDragSourceNode\",\n value: function setCurrentDragSourceNode(node) {\n var _this5 = this;\n\n this.clearCurrentDragSourceNode();\n this.currentDragSourceNode = node; // A timeout of > 0 is necessary to resolve Firefox issue referenced\n // See:\n // * https://github.com/react-dnd/react-dnd/pull/928\n // * https://github.com/react-dnd/react-dnd/issues/869\n\n var MOUSE_MOVE_TIMEOUT = 1000; // Receiving a mouse event in the middle of a dragging operation\n // means it has ended and the drag source node disappeared from DOM,\n // so the browser didn't dispatch the dragend event.\n //\n // We need to wait before we start listening for mousemove events.\n // This is needed because the drag preview needs to be drawn or else it fires an 'mousemove' event\n // immediately in some browsers.\n //\n // See:\n // * https://github.com/react-dnd/react-dnd/pull/928\n // * https://github.com/react-dnd/react-dnd/issues/869\n //\n\n this.mouseMoveTimeoutTimer = setTimeout(function () {\n var _this5$rootElement;\n\n return (_this5$rootElement = _this5.rootElement) === null || _this5$rootElement === void 0 ? void 0 : _this5$rootElement.addEventListener('mousemove', _this5.endDragIfSourceWasRemovedFromDOM, true);\n }, MOUSE_MOVE_TIMEOUT);\n }\n }, {\n key: \"clearCurrentDragSourceNode\",\n value: function clearCurrentDragSourceNode() {\n if (this.currentDragSourceNode) {\n this.currentDragSourceNode = null;\n\n if (this.rootElement) {\n var _this$window2;\n\n (_this$window2 = this.window) === null || _this$window2 === void 0 ? void 0 : _this$window2.clearTimeout(this.mouseMoveTimeoutTimer || undefined);\n this.rootElement.removeEventListener('mousemove', this.endDragIfSourceWasRemovedFromDOM, true);\n }\n\n this.mouseMoveTimeoutTimer = null;\n return true;\n }\n\n return false;\n }\n }, {\n key: \"handleDragStart\",\n value: function handleDragStart(e, sourceId) {\n if (e.defaultPrevented) {\n return;\n }\n\n if (!this.dragStartSourceIds) {\n this.dragStartSourceIds = [];\n }\n\n this.dragStartSourceIds.unshift(sourceId);\n }\n }, {\n key: \"handleDragEnter\",\n value: function handleDragEnter(e, targetId) {\n this.dragEnterTargetIds.unshift(targetId);\n }\n }, {\n key: \"handleDragOver\",\n value: function handleDragOver(e, targetId) {\n if (this.dragOverTargetIds === null) {\n this.dragOverTargetIds = [];\n }\n\n this.dragOverTargetIds.unshift(targetId);\n }\n }, {\n key: \"handleDrop\",\n value: function handleDrop(e, targetId) {\n this.dropTargetIds.unshift(targetId);\n }\n }]);\n\n return HTML5BackendImpl;\n}();","import { HTML5BackendImpl } from './HTML5BackendImpl';\nimport * as NativeTypes from './NativeTypes';\nexport { getEmptyImage } from './getEmptyImage';\nexport { NativeTypes };\nexport var HTML5Backend = function createBackend(manager, context, options) {\n return new HTML5BackendImpl(manager, context, options);\n};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\n\n// import TouchBackend from 'react-dnd-touch-backend';\n\n// TODO: this is false when it should not be :thinking:\nconst isTouchDevice =\n typeof window !== `undefined` &&\n !!('ontouchstart' in window || navigator.maxTouchPoints);\n\n/**\n * Relevant:\n * https://github.com/react-dnd/react-dnd/issues/186#issuecomment-335429067\n * https://github.com/react-dnd/react-dnd/issues/186#issuecomment-282789420\n *\n * Docs:\n * http://react-dnd.github.io/react-dnd/docs/api/drag-drop-context\n */\nfunction DragAndDropProvider({ children }) {\n const backend = HTML5Backend; // isTouchDevice ? TouchBackend : HTML5Backend;\n const opts = {}; // isTouchDevice ? { enableMouseEvents: true } : {};\n\n console.log('using... touch backend?', isTouchDevice);\n\n return (\n \n {children}\n \n );\n}\n\nDragAndDropProvider.propTypes = {\n children: PropTypes.any,\n};\n\nexport default DragAndDropProvider;\n","import React, {\n useState,\n createContext,\n useContext,\n useEffect,\n useCallback,\n} from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { useTranslation } from 'react-i18next';\n\nconst ModalContext = createContext(null);\nconst { Provider } = ModalContext;\n\nexport const useModal = () => useContext(ModalContext);\n\n/**\n * UI Modal\n *\n * @typedef {Object} ModalProps\n * @property {ReactElement|HTMLElement} [content=null] Modal content.\n * @property {Object} [contentProps=null] Modal content props.\n * @property {boolean} [shouldCloseOnEsc=true] Modal is dismissible via the esc key.\n * @property {boolean} [isOpen=true] Make the Modal visible or hidden.\n * @property {boolean} [closeButton=true] Should the modal body render the close button.\n * @property {string} [title=null] Should the modal render the title independently of the body content.\n * @property {string} [customClassName=null] The custom class to style the modal.\n */\n\nconst ModalProvider = ({ children, modal: Modal, service }) => {\n const DEFAULT_OPTIONS = {\n content: null,\n contentProps: null,\n shouldCloseOnEsc: true,\n isOpen: true,\n closeButton: true,\n title: null,\n customClassName: '',\n };\n const { t } = useTranslation('Modals');\n\n\n const [options, setOptions] = useState(DEFAULT_OPTIONS);\n\n /**\n * Show the modal and override its configuration props.\n *\n * @param {ModalProps} props { content, contentProps, shouldCloseOnEsc, isOpen, closeButton, title, customClassName }\n * @returns void\n */\n const show = useCallback(props => setOptions({ ...options, ...props }), [\n options,\n ]);\n\n /**\n * Hide the modal and set its properties to default.\n *\n * @returns void\n */\n const hide = useCallback(() => setOptions(DEFAULT_OPTIONS), [\n DEFAULT_OPTIONS,\n ]);\n\n /**\n * Sets the implementation of a modal service that can be used by extensions.\n *\n * @returns void\n */\n useEffect(() => {\n if (service) {\n service.setServiceImplementation({ hide, show });\n }\n }, [hide, service, show]);\n\n const {\n content: ModalContent,\n contentProps,\n isOpen,\n title,\n customClassName,\n shouldCloseOnEsc,\n closeButton,\n } = options;\n\n return (\n \n {ModalContent && (\n \n \n \n )}\n {children}\n \n );\n};\n\n/**\n * Higher Order Component to use the modal methods through a Class Component.\n *\n * @returns\n */\nexport const withModal = Component => {\n return function WrappedComponent(props) {\n const { show, hide } = useModal();\n return ;\n };\n};\n\nModalProvider.defaultProps = {\n service: null,\n};\n\nModalProvider.propTypes = {\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node,\n ]).isRequired,\n modal: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node,\n PropTypes.func,\n ]).isRequired,\n service: PropTypes.shape({\n setServiceImplementation: PropTypes.func,\n }),\n};\n\nexport default ModalProvider;\n\nexport const ModalConsumer = ModalContext.Consumer;\n","import React, { createContext, useContext, useReducer, useMemo } from 'react';\n\n// export const IMAGE_VIEWER_DEFAULT_VALUE = {\n// StudyInstanceUIDs: [],\n// setImageViewer: () => {},\n// };\n\nexport const ImageViewerContext = createContext();\n\nexport function ImageViewerProvider({\n StudyInstanceUIDs,\n reducer,\n initialState,\n children,\n}) {\n const value = useMemo(() => {\n return { StudyInstanceUIDs };\n }, [StudyInstanceUIDs]);\n\n return (\n \n {children}\n \n );\n}\n\nexport const useImageViewer = () => useContext(ImageViewerContext);\n","import React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useReducer,\n} from 'react';\nimport PropTypes from 'prop-types';\n\nconst DEFAULT_STATE = {\n isCineEnabled: false,\n cines: {\n /*\n * 1: { isPlaying: false, frameRate: 24 };\n */\n },\n};\n\nconst DEFAULT_CINE = { isPlaying: false, frameRate: 24 };\n\nexport const CineContext = createContext(DEFAULT_STATE);\n\nexport default function CineProvider({ children, service }) {\n const reducer = (state, action) => {\n switch (action.type) {\n case 'SET_CINE': {\n const { id, frameRate, isPlaying = undefined } = action.payload;\n const cines = state.cines;\n\n if (!cines[id]) cines[id] = { id, ...DEFAULT_CINE };\n cines[id].frameRate = frameRate || cines[id].frameRate;\n cines[id].isPlaying =\n isPlaying !== undefined ? isPlaying : cines[id].isPlaying;\n\n return { ...state, ...{ cines } };\n }\n case 'SET_IS_CINE_ENABLED': {\n return { ...state, ...{ isCineEnabled: action.payload } };\n }\n default:\n return action.payload;\n }\n };\n\n const [state, dispatch] = useReducer(reducer, DEFAULT_STATE);\n\n const getState = useCallback(() => state, [state]);\n\n const setIsCineEnabled = useCallback(\n isCineEnabled =>\n dispatch({ type: 'SET_IS_CINE_ENABLED', payload: isCineEnabled }),\n [dispatch]\n );\n\n const setCine = useCallback(\n ({ id, frameRate, isPlaying }) =>\n dispatch({\n type: 'SET_CINE',\n payload: {\n id,\n frameRate,\n isPlaying,\n },\n }),\n [dispatch]\n );\n\n /**\n * Sets the implementation of a modal service that can be used by extensions.\n *\n * @returns void\n */\n useEffect(() => {\n if (service) {\n service.setServiceImplementation({ getState, setIsCineEnabled, setCine });\n }\n }, [getState, service, setCine, setIsCineEnabled]);\n\n const api = {\n getState,\n setCine,\n setIsCineEnabled,\n playClip: (element, playClipOptions) =>\n service.playClip(element, playClipOptions),\n stopClip: element => service.stopClip(element),\n };\n\n return (\n {children}\n );\n}\n\nCineProvider.propTypes = {\n children: PropTypes.any,\n service: PropTypes.shape({\n setServiceImplementation: PropTypes.func,\n }).isRequired,\n};\n\nexport const useCine = () => useContext(CineContext);\n","export default {\n INFO: 'info',\n WARNING: 'warning',\n SUCCESS: 'success',\n ERROR: 'error',\n};\n","import React from 'react';\n// Icons\n\nimport arrowDown from './../../assets/icons/arrow-down.svg';\nimport arrowLeft from './../../assets/icons/arrow-left.svg';\nimport calendar from './../../assets/icons/calendar.svg';\nimport cancel from './../../assets/icons/cancel.svg';\nimport clipboard from './../../assets/icons/clipboard.svg';\nimport close from './../../assets/icons/close.svg';\nimport dottedCircle from './../../assets/icons/dotted-circle.svg';\nimport circledCheckmark from './../../assets/icons/circled-checkmark.svg';\nimport chevronDown from './../../assets/icons/chevron-down.svg';\nimport chevronLeft from './../../assets/icons/chevron-left.svg';\nimport chevronRight from './../../assets/icons/chevron-right.svg';\nimport eyeVisible from './../../assets/icons/eye-visible.svg';\nimport eyeHidden from './../../assets/icons/eye-hidden.svg';\nimport exclamation from './../../assets/icons/exclamation.svg';\nimport externalLink from './../../assets/icons/external-link.svg';\nimport groupLayers from './../../assets/icons/group-layers.svg';\nimport info from './../../assets/icons/info.svg';\nimport infoLink from './../../assets/icons/info-link.svg';\nimport launchArrow from './../../assets/icons/launch-arrow.svg';\nimport launchInfo from './../../assets/icons/launch-info.svg';\nimport link from './../../assets/icons/link.svg';\nimport listBullets from './../../assets/icons/list-bullets.svg';\nimport lock from './../../assets/icons/lock.svg';\nimport logoOhifSmall from './../../assets/icons/logo-ohif-small.svg';\nimport magnifier from './../../assets/icons/magnifier.svg';\nimport notificationwarningDiamond from './../../assets/icons/notificationwarning-diamond.svg';\nimport pencil from './../../assets/icons/pencil.svg';\nimport powerOff from './../../assets/icons/power-off.svg';\nimport profile from './../../assets/icons/profile.svg';\nimport pushLeft from './../../assets/icons/push-left.svg';\nimport pushRight from './../../assets/icons/push-right.svg';\nimport settings from './../../assets/icons/settings.svg';\nimport sorting from './../../assets/icons/sorting.svg';\nimport sortingActiveDown from './../../assets/icons/sorting-active-down.svg';\nimport sortingActiveUp from './../../assets/icons/sorting-active-up.svg';\nimport tracked from './../../assets/icons/tracked.svg';\nimport unlink from './../../assets/icons/unlink.svg';\nimport checkboxChecked from './../../assets/icons/checkbox-checked.svg';\nimport checkboxUnchecked from './../../assets/icons/checkbox-unchecked.svg';\nimport iconNextInactive from './../../assets/icons/icon-next-inactive.svg';\nimport iconNext from './../../assets/icons/icon-next.svg';\nimport iconPrevInactive from './../../assets/icons/icon-prev-inactive.svg';\nimport iconPrev from './../../assets/icons/icon-prev.svg';\nimport navigationPanelRightHide from './../../assets/icons/navigation-panel-right-hide.svg';\nimport navigationPanelRightReveal from './../../assets/icons/navigation-panel-right-reveal.svg';\nimport tabLinear from './../../assets/icons/tab-linear.svg';\nimport tabPatientInfo from './../../assets/icons/tab-patient-info.svg';\nimport tabROIThreshold from './../../assets/icons/tab-roi-threshold.svg';\nimport tabSegmentation from './../../assets/icons/tab-segmentation.svg';\nimport uiArrowDown from './../../assets/icons/ui-arrow-down.svg';\nimport uiArrowUp from './../../assets/icons/ui-arrow-up.svg';\nimport loadingOHIFMark from './../../assets/icons/loading-ohif-mark.svg';\n\n/** Tools */\nimport toolZoom from './../../assets/icons/tool-zoom.svg';\nimport toolCapture from './../../assets/icons/tool-capture.svg';\nimport toolLayout from './../../assets/icons/tool-layout.svg';\nimport toolMore from './../../assets/icons/tool-more-menu.svg';\nimport toolMove from './../../assets/icons/tool-move.svg';\nimport toolWindow from './../../assets/icons/tool-window-level.svg';\nimport toolAnnotate from './../../assets/icons/tool-annotate.svg';\nimport toolBidirectional from './../../assets/icons/tool-bidirectional.svg';\nimport toolElipse from './../../assets/icons/tool-elipse.svg';\nimport toolLength from './../../assets/icons/tool-length.svg';\nimport toolStackScroll from './../../assets/icons/tool-stack-scroll.svg';\nimport toolMagnify from './../../assets/icons/tool-magnify.svg';\nimport toolFlipHorizontal from './../../assets/icons/tool-flip-horizontal.svg';\nimport toolInvert from './../../assets/icons/tool-invert.svg';\nimport toolRotateRight from './../../assets/icons/tool-rotate-right.svg';\nimport toolCine from './../../assets/icons/tool-cine.svg';\nimport toolCrosshair from './../../assets/icons/tool-crosshair.svg';\nimport toolProbe from './../../assets/icons/tool-probe.svg';\nimport toolAngle from './../../assets/icons/tool-angle.svg';\nimport toolReset from './../../assets/icons/tool-reset.svg';\nimport toolRectangle from './../../assets/icons/tool-rectangle.svg';\nimport toolFusionColor from './../../assets/icons/tool-fusion-color.svg';\nimport toolCreateThreshold from './../../assets/icons/tool-create-threshold.svg';\nimport editPatient from './../../assets/icons/edit-patient.svg';\nimport panelGroupMore from './../../assets/icons/panel-group-more.svg';\nimport panelGroupOpenClose from './../../assets/icons/panel-group-open-close.svg';\nimport rowAdd from './../../assets/icons/row-add.svg';\nimport rowEdit from './../../assets/icons/row-edit.svg';\nimport rowHidden from './../../assets/icons/row-hidden.svg';\nimport rowHideAll from './../../assets/icons/row-hide-all.svg';\nimport rowHide from './../../assets/icons/row-hide.svg';\nimport rowLocked from './../../assets/icons/row-locked.svg';\nimport rowShowAll from './../../assets/icons/row-show-all.svg';\nimport rowUnhide from './../../assets/icons/row-unhide.svg';\nimport rowUnlocked from './../../assets/icons/row-unlocked.svg';\nimport iconMPR from './../../assets/icons/icon-mpr-alt.svg';\nimport checkboxDefault from './../../assets/icons/checkbox-default.svg';\nimport checkboxActive from './../../assets/icons/checkbox-active.svg';\nimport referenceLines from './../../assets/icons/reference-lines.svg';\n\n/** Old OHIF */\nimport oldTrash from './../../assets/icons/old-trash.svg';\nimport oldPlay from './../../assets/icons/old-play.svg';\nimport oldStop from './../../assets/icons/old-stop.svg';\n\nconst ICONS = {\n 'arrow-down': arrowDown,\n calendar: calendar,\n cancel: cancel,\n clipboard: clipboard,\n close: close,\n 'dotted-circle': dottedCircle,\n 'circled-checkmark': circledCheckmark,\n 'chevron-down': chevronDown,\n 'chevron-left': chevronLeft,\n 'chevron-right': chevronRight,\n 'eye-visible': eyeVisible,\n 'eye-hidden': eyeHidden,\n 'external-link': externalLink,\n 'group-layers': groupLayers,\n info: info,\n 'info-link': infoLink,\n 'arrow-left': arrowLeft,\n 'launch-arrow': launchArrow,\n 'launch-info': launchInfo,\n link: link,\n 'list-bullets': listBullets,\n lock: lock,\n 'logo-ohif-small': logoOhifSmall,\n magnifier: magnifier,\n exclamation: exclamation,\n 'notificationwarning-diamond': notificationwarningDiamond,\n pencil: pencil,\n 'power-off': powerOff,\n profile: profile,\n 'push-left': pushLeft,\n 'push-right': pushRight,\n settings: settings,\n 'sorting-active-down': sortingActiveDown,\n 'sorting-active-up': sortingActiveUp,\n sorting: sorting,\n tracked: tracked,\n unlink: unlink,\n 'panel-group-more': panelGroupMore,\n 'panel-group-open-close': panelGroupOpenClose,\n 'row-add': rowAdd,\n 'row-edit': rowEdit,\n 'row-hidden': rowHidden,\n 'row-hide-all': rowHideAll,\n 'row-hide': rowHide,\n 'row-locked': rowLocked,\n 'row-show-all': rowShowAll,\n 'row-unhide': rowUnhide,\n 'row-unlocked': rowUnlocked,\n 'checkbox-checked': checkboxChecked,\n 'checkbox-unchecked': checkboxUnchecked,\n 'loading-ohif-mark': loadingOHIFMark,\n\n /** Tools */\n 'tool-zoom': toolZoom,\n 'tool-capture': toolCapture,\n 'tool-layout': toolLayout,\n 'tool-more-menu': toolMore,\n 'tool-move': toolMove,\n 'tool-window-level': toolWindow,\n 'tool-annotate': toolAnnotate,\n 'tool-bidirectional': toolBidirectional,\n 'tool-elipse': toolElipse,\n 'tool-length': toolLength,\n 'tool-stack-scroll': toolStackScroll,\n 'tool-magnify': toolMagnify,\n 'tool-flip-horizontal': toolFlipHorizontal,\n 'tool-invert': toolInvert,\n 'tool-rotate-right': toolRotateRight,\n 'tool-cine': toolCine,\n 'tool-crosshair': toolCrosshair,\n 'tool-probe': toolProbe,\n 'tool-angle': toolAngle,\n 'tool-reset': toolReset,\n 'tool-rectangle': toolRectangle,\n 'tool-fusion-color': toolFusionColor,\n 'tool-create-threshold': toolCreateThreshold,\n 'edit-patient': editPatient,\n 'icon-mpr': iconMPR,\n 'icon-next-inactive': iconNextInactive,\n 'icon-next': iconNext,\n 'icon-prev-inactive': iconPrevInactive,\n 'icon-prev': iconPrev,\n 'navigation-panel-right-hide': navigationPanelRightHide,\n 'navigation-panel-right-reveal': navigationPanelRightReveal,\n 'tab-linear': tabLinear,\n 'tab-patient-info': tabPatientInfo,\n 'tab-roi-threshold': tabROIThreshold,\n 'tab-segmentation': tabSegmentation,\n 'ui-arrow-down': uiArrowDown,\n 'ui-arrow-up': uiArrowUp,\n 'checkbox-default': checkboxDefault,\n 'checkbox-active': checkboxActive,\n 'tool-referenceLines': referenceLines,\n\n /** Old OHIF */\n 'old-trash': oldTrash,\n 'old-play': oldPlay,\n 'old-stop': oldStop,\n};\n\nfunction addIcon(iconName, iconSVG) {\n if (ICONS[iconName]) {\n console.warn(`Icon ${iconName} already exists.`);\n }\n\n ICONS[iconName] = iconSVG;\n}\n\n/**\n * Return the matching SVG Icon as a React Component.\n * Results in an inlined SVG Element. If there's no match,\n * return `null`\n */\nexport default function getIcon(key, props) {\n if (!key || !ICONS[key]) {\n return React.createElement('div', null, 'Missing Icon');\n }\n\n return React.createElement(ICONS[key], props);\n}\n\nexport { getIcon, ICONS, addIcon };\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport getIcon from './getIcon';\n\nconst Icon = ({ name, ...otherProps }) => {\n return {getIcon(name, { ...otherProps })};\n};\n\nIcon.propTypes = {\n name: PropTypes.string.isRequired,\n className: PropTypes.string,\n};\n\nexport default Icon;\n","import Icon from './Icon';\nexport default Icon;\n","import React, { useEffect } from 'react';\nimport classNames from 'classnames';\nimport Icon from '../Icon';\nimport IconButton from '../IconButton';\n\nimport SnackbarTypes from './SnackbarTypes';\n\nconst SnackbarItem = ({ options, onClose }) => {\n const handleClose = () => onClose(options.id);\n\n useEffect(() => {\n if (options.autoClose) {\n setTimeout(() => handleClose(), options.duration);\n }\n }, []);\n\n const typeClasses = {\n [SnackbarTypes.INFO]: 'bg-primary-active',\n [SnackbarTypes.WARNING]: 'bg-yellow-600',\n [SnackbarTypes.SUCCESS]: 'bg-green-600',\n [SnackbarTypes.ERROR]: 'bg-red-600',\n };\n\n const hidden =\n 'duration-300 transition-all ease-in-out h-0 opacity-0 pt-0 mb-0 pb-0';\n\n return (\n \n {/* */}\n {/* x */}\n \n \n \n {/* */}\n {options.title &&
{options.title}
}\n {options.message &&
{options.message}
}\n \n );\n};\n\nexport default SnackbarItem;\n","import React from 'react';\nimport SnackbarItem from './SnackbarItem'\nimport { useSnackbar } from '../../contextProviders/SnackbarProvider';\n\nimport './Snackbar.css';\n\nconst SnackbarContainer = () => {\n const { snackbarItems, hide } = useSnackbar();\n\n const renderItem = item => (\n \n );\n\n const renderItems = () => {\n const items = {\n topLeft: [],\n topCenter: [],\n topRight: [],\n bottomLeft: [],\n bottomCenter: [],\n bottomRight: [],\n };\n\n snackbarItems.forEach(item => items[item.position].push(item));\n\n return snackbarItems && (\n
\n {Object.keys(items).map(pos => {\n if (!items[pos].length) {\n return null;\n }\n\n return (\n
\n {items[pos].map((item, index) => (\n
{renderItem(item)}
\n ))}\n
\n );\n })}\n
\n );\n };\n\n return <>{renderItems()};\n};\n\nexport default SnackbarContainer;\n","import React, {\n useState,\n createContext,\n useContext,\n useCallback,\n useEffect,\n} from 'react';\nimport PropTypes from 'prop-types';\n\nimport SnackbarTypes from '../components/Snackbar/SnackbarTypes';\nimport SnackbarContainer from '../components/Snackbar/SnackbarContainer';\n\nconst SnackbarContext = createContext(null);\n\nexport const useSnackbar = () => useContext(SnackbarContext);\n\nconst SnackbarProvider = ({ children, service }) => {\n const DEFAULT_OPTIONS = {\n title: '',\n message: '',\n duration: 5000,\n autoClose: true,\n position: 'bottomRight',\n type: SnackbarTypes.INFO,\n };\n\n const [count, setCount] = useState(1);\n const [snackbarItems, setSnackbarItems] = useState([]);\n\n const show = useCallback(\n options => {\n if (!options || (!options.title && !options.message)) {\n console.warn(\n 'Snackbar cannot be rendered without required parameters: title | message'\n );\n\n return null;\n }\n\n const newItem = {\n ...DEFAULT_OPTIONS,\n ...options,\n id: count,\n visible: true,\n };\n\n setSnackbarItems(state => [...state, newItem]);\n setCount(count + 1);\n },\n [count, DEFAULT_OPTIONS]\n );\n\n const hide = useCallback(\n id => {\n const hideItem = items => {\n const newItems = items.map(item => {\n if (item.id === id) {\n item.visible = false;\n }\n\n return item;\n });\n\n return newItems;\n };\n\n setSnackbarItems(state => hideItem(state));\n\n setTimeout(() => {\n setSnackbarItems(state => [...state.filter(item => item.id !== id)]);\n }, 1000);\n },\n [setSnackbarItems]\n );\n\n const hideAll = () => {\n // reset count\n setCount(1);\n\n // remove all items from array\n setSnackbarItems(() => []);\n };\n\n if (typeof window !== 'undefined') {\n /**\n * expose snackbar methods to window for debug purposes\n * TODO: Check if it's really necessary\n */\n window.snackbar = {\n show,\n hide,\n hideAll,\n };\n }\n\n /**\n * Sets the implementation of a notification service that can be used by extensions.\n *\n * @returns void\n */\n useEffect(() => {\n if (service) {\n service.setServiceImplementation({ hide, show });\n }\n }, [service, hide, show]);\n\n return (\n \n {!!snackbarItems && }\n {children}\n \n );\n};\n\nSnackbarProvider.defaultProps = {\n service: null,\n};\n\nSnackbarProvider.propTypes = {\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node,\n PropTypes.func,\n ]).isRequired,\n service: PropTypes.shape({\n setServiceImplementation: PropTypes.func,\n }),\n};\n\n/**\n *\n * High Order Component to use the snackbar methods through a Class Component\n *\n */\nexport const withSnackbar = Component => {\n return function WrappedComponent(props) {\n const snackbarContext = {\n ...useSnackbar(),\n };\n return ;\n };\n};\n\nexport default SnackbarProvider;\n","import React, {\n useState,\n createContext,\n useContext,\n useCallback,\n useEffect,\n} from 'react';\nimport PropTypes from 'prop-types';\n\nconst DEFAULT_STATE = {\n viewportIndex: null,\n message: undefined,\n type: 'info', // \"error\" | \"warning\" | \"info\" | \"success\"\n actions: undefined, // array of { type, text, value }\n // dismissable?\n // blockInteraction (single viewport? allViewports? everything?)\n // TODO: Buttons --> type/color? text? value?\n onSubmit: () => {\n console.log('btn value?');\n },\n onOutsideClick: () => {\n console.warn('default: onOutsideClick')\n },\n onDismiss: () => {\n console.log('dismiss? -1');\n },\n};\n\nconst ViewportDialogContext = createContext(null);\nconst { Provider } = ViewportDialogContext;\n\nexport const useViewportDialog = () => useContext(ViewportDialogContext);\n\nconst ViewportDialogProvider = ({ children, service }) => {\n const [viewportDialogState, setViewportDialogState] = useState(DEFAULT_STATE);\n const show = useCallback(\n params => setViewportDialogState({ ...viewportDialogState, ...params }),\n [viewportDialogState]\n );\n const hide = useCallback(() => setViewportDialogState(DEFAULT_STATE), []);\n\n useEffect(() => {\n if (service) {\n service.setServiceImplementation({ hide, show });\n }\n }, [hide, service, show]);\n\n return (\n \n {children}\n \n );\n};\n\nViewportDialogProvider.propTypes = {\n /** Children that will be wrapped with Modal Context */\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node,\n ]).isRequired,\n service: PropTypes.shape({\n setServiceImplementation: PropTypes.func,\n }),\n};\n\nexport default ViewportDialogProvider;\n","const viewportLabels = [\n 'A',\n 'B',\n 'C',\n 'D',\n 'E',\n 'F',\n 'G',\n 'H',\n 'I',\n 'J',\n 'K',\n 'L',\n 'M',\n 'N',\n 'O',\n 'P',\n 'Q',\n 'R',\n 'S',\n 'T',\n 'U',\n 'V',\n 'W',\n 'X',\n 'Y',\n 'Z',\n];\n\nexport default viewportLabels;\n","import React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useReducer,\n} from 'react';\nimport PropTypes from 'prop-types';\n\nimport viewportLabels from '../utils/viewportLabels';\n\nconst DEFAULT_STATE = {\n numRows: null,\n numCols: null,\n layoutType: 'grid',\n viewports: [\n {\n displaySetInstanceUIDs: [],\n viewportOptions: {},\n displaySetOptions: [{}],\n x: 0, // left\n y: 0, // top\n width: 100,\n height: 100,\n viewportLabel: null,\n },\n ],\n activeViewportIndex: 0,\n cachedLayout: {},\n};\n\nexport const ViewportGridContext = createContext(DEFAULT_STATE);\n\n/**\n * Given the flatten index, and rows and column, it returns the\n * row and column index\n */\nconst unravelIndex = (index, numRows, numCols) => {\n const row = Math.floor(index / numCols);\n const col = index % numCols;\n return { row, col };\n};\n\nexport function ViewportGridProvider({ children, service }) {\n const viewportGridReducer = (state, action) => {\n switch (action.type) {\n case 'SET_ACTIVE_VIEWPORT_INDEX': {\n return { ...state, ...{ activeViewportIndex: action.payload } };\n }\n case 'SET_DISPLAYSET_FOR_VIEWPORT': {\n const payload = action.payload;\n const { viewportIndex, displaySetInstanceUIDs } = payload;\n\n // Note: there should be no inheritance happening at this level,\n // we can't assume the new displaySet can inherit the previous\n // displaySet's or viewportOptions at all. For instance, dragging\n // and dropping a SEG/RT displaySet without any viewportOptions\n // or displaySetOptions should not inherit the previous displaySet's\n // which might have been a PDF Viewport. The viewport itself\n // will deal with inheritance if required. Here is just a simple\n // provider.\n const viewportOptions = payload.viewportOptions || {};\n const displaySetOptions = payload.displaySetOptions || [{}];\n\n const viewports = state.viewports.slice();\n\n // merge the displaySetOptions and viewportOptions and displaySetInstanceUIDs\n // into the viewport object at the given index\n viewports[viewportIndex] = {\n ...viewports[viewportIndex],\n displaySetInstanceUIDs,\n viewportOptions,\n displaySetOptions,\n viewportLabel: viewportLabels[viewportIndex],\n };\n\n return { ...state, ...{ viewports } };\n }\n case 'SET_LAYOUT': {\n const {\n numCols,\n numRows,\n layoutOptions,\n layoutType = 'grid',\n } = action.payload;\n\n // If empty viewportOptions, we use numRow and numCols to calculate number of viewports\n const numPanes = layoutOptions.length || numRows * numCols;\n const viewports = state.viewports.slice();\n const activeViewportIndex =\n state.activeViewportIndex >= numPanes ? 0 : state.activeViewportIndex;\n\n while (viewports.length < numPanes) {\n viewports.push({});\n }\n while (viewports.length > numPanes) {\n viewports.pop();\n }\n\n for (let i = 0; i < numPanes; i++) {\n let xPos, yPos, w, h;\n\n if (layoutOptions && layoutOptions[i]) {\n ({ x: xPos, y: yPos, width: w, height: h } = layoutOptions[i]);\n } else {\n const { row, col } = unravelIndex(i, numRows, numCols);\n w = 1 / numCols;\n h = 1 / numRows;\n xPos = col * w;\n yPos = row * h;\n }\n\n viewports[i].width = w;\n viewports[i].height = h;\n viewports[i].x = xPos;\n viewports[i].y = yPos;\n }\n\n return {\n ...state,\n ...{\n activeViewportIndex,\n numCols,\n numRows,\n layoutType,\n viewports,\n },\n };\n }\n case 'RESET': {\n return {\n numCols: null,\n numRows: null,\n layoutType: 'grid',\n activeViewportIndex: 0,\n viewports: [\n {\n displaySetInstanceUIDs: [],\n displaySetOptions: [],\n viewportOptions: {},\n x: 0, // left\n y: 0, // top\n width: 100,\n height: 100,\n },\n ],\n cachedLayout: {},\n };\n }\n\n // The SET_CACHE_LAYOUT action can be used for caching a layout\n // for instance double clicking a viewport to maximize it.\n // and then restoring the previous layout when the viewport is\n // double clicked again.\n case 'SET_CACHED_LAYOUT': {\n const { cacheId, cachedLayout } = action.payload;\n\n // deep copy the cachedLayout into the state\n return {\n ...state,\n cachedLayout: {\n ...state.cachedLayout,\n [cacheId]: JSON.parse(JSON.stringify(cachedLayout)),\n },\n };\n }\n\n case 'RESTORE_CACHED_LAYOUT': {\n const cacheId = action.payload;\n\n if (!state.cachedLayout[cacheId]) {\n console.warn(\n `No cached layout found for cacheId: ${cacheId}. Ignoring...`\n );\n return state;\n }\n\n const cachedLayout = state.cachedLayout;\n return { ...state.cachedLayout[cacheId], cachedLayout };\n }\n\n case 'SET': {\n return {\n ...state,\n ...action.payload,\n };\n }\n\n default:\n return action.payload;\n }\n };\n\n const [viewportGridState, dispatch] = useReducer(\n viewportGridReducer,\n DEFAULT_STATE\n );\n\n const getState = useCallback(() => {\n return viewportGridState;\n }, [viewportGridState]);\n\n const setActiveViewportIndex = useCallback(\n index => dispatch({ type: 'SET_ACTIVE_VIEWPORT_INDEX', payload: index }),\n [dispatch]\n );\n\n const setDisplaySetsForViewport = useCallback(\n ({\n viewportIndex,\n displaySetInstanceUIDs,\n viewportOptions,\n displaySetOptions,\n }) =>\n dispatch({\n type: 'SET_DISPLAYSET_FOR_VIEWPORT',\n payload: {\n viewportIndex,\n displaySetInstanceUIDs,\n viewportOptions,\n displaySetOptions,\n },\n }),\n [dispatch]\n );\n\n const setDisplaySetsForViewports = useCallback(\n viewports => {\n viewports.forEach(data => {\n setDisplaySetsForViewport(data);\n });\n },\n [setDisplaySetsForViewport]\n );\n\n const setLayout = useCallback(\n ({ layoutType, numRows, numCols, layoutOptions = [] }) =>\n dispatch({\n type: 'SET_LAYOUT',\n payload: {\n layoutType,\n numRows,\n numCols,\n layoutOptions,\n },\n }),\n [dispatch]\n );\n\n const reset = useCallback(\n () =>\n dispatch({\n type: 'RESET',\n payload: {},\n }),\n [dispatch]\n );\n\n const setCachedLayout = useCallback(\n payload =>\n dispatch({\n type: 'SET_CACHED_LAYOUT',\n payload,\n }),\n [dispatch]\n );\n\n const restoreCachedLayout = useCallback(\n cacheId => {\n dispatch({\n type: 'RESTORE_CACHED_LAYOUT',\n payload: cacheId,\n });\n },\n [dispatch]\n );\n\n const set = useCallback(\n payload =>\n dispatch({\n type: 'SET',\n payload,\n }),\n [dispatch]\n );\n\n /**\n * Sets the implementation of ViewportGridService that can be used by extensions.\n *\n * @returns void\n */\n useEffect(() => {\n if (service) {\n service.setServiceImplementation({\n getState,\n setActiveViewportIndex,\n setDisplaySetsForViewport,\n setDisplaySetsForViewports,\n setLayout,\n reset,\n setCachedLayout,\n restoreCachedLayout,\n set,\n });\n }\n }, [\n getState,\n service,\n setActiveViewportIndex,\n setDisplaySetsForViewport,\n setDisplaySetsForViewports,\n setLayout,\n reset,\n setCachedLayout,\n restoreCachedLayout,\n set,\n ]);\n\n const api = {\n getState,\n setActiveViewportIndex: index => service.setActiveViewportIndex(index), // run it through the service itself since we want to publish events\n setDisplaySetsForViewport,\n setDisplaySetsForViewports,\n setLayout,\n setCachedLayout,\n restoreCachedLayout,\n reset,\n set,\n };\n\n return (\n \n {children}\n \n );\n}\n\nViewportGridProvider.propTypes = {\n children: PropTypes.any,\n service: PropTypes.shape({\n setServiceImplementation: PropTypes.func,\n }).isRequired,\n};\n\nexport const useViewportGrid = () => useContext(ViewportGridContext);\n","import React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useReducer,\n} from 'react';\nimport PropTypes from 'prop-types';\n\nconst DEFAULT_STATE = {\n user: null,\n enabled: false,\n};\n\nexport const UserAuthenticationContext = createContext(DEFAULT_STATE);\n\nexport function UserAuthenticationProvider({ children, service }) {\n const userAuthenticationReducer = (state, action) => {\n switch (action.type) {\n case 'SET_USER': {\n return {\n ...state,\n ...{ user: action.payload.user },\n };\n }\n case 'RESET': {\n return {\n user: null,\n };\n }\n\n case 'SET': {\n return {\n ...state,\n ...action.payload,\n };\n }\n\n default:\n return action.payload;\n }\n };\n\n const [userAuthenticationState, dispatch] = useReducer(\n userAuthenticationReducer,\n DEFAULT_STATE\n );\n\n const getState = useCallback(() => userAuthenticationState, [\n userAuthenticationState,\n ]);\n\n const setUser = useCallback(\n user =>\n dispatch({\n type: 'SET_USER',\n payload: {\n user,\n },\n }),\n [dispatch]\n );\n\n const getUser = useCallback(() => userAuthenticationState.user, [\n userAuthenticationState,\n ]);\n\n const reset = useCallback(\n () =>\n dispatch({\n type: 'RESET',\n payload: {},\n }),\n [dispatch]\n );\n\n const set = useCallback(\n payload =>\n dispatch({\n type: 'SET',\n payload,\n }),\n [dispatch]\n );\n\n /**\n * Sets the implementation of the UserAuthenticationService that can be used by extensions.\n *\n * @returns void\n */\n // TODO: should this be a useEffect or not?\n useEffect(() => {\n if (service) {\n service.setServiceImplementation({\n getState,\n setUser,\n getUser,\n reset,\n set,\n });\n }\n }, [getState, service, setUser, getUser, reset, set]);\n\n // TODO: This may not be correct, but I think we need to set the implementation for the service\n // immediately when this runs, since otherwise the authentication redirects will fail.\n // (useEffect only runs after the child components - in this case, routing logic - has failed)\n if (service) {\n service.setServiceImplementation({\n getState,\n setUser,\n getUser,\n reset,\n set,\n });\n }\n\n const api = {\n getState,\n setUser,\n getUser,\n getAuthorizationHeader: service.getAuthorizationHeader,\n handleUnauthenticated: service.handleUnauthenticated,\n reset,\n set,\n };\n\n return (\n \n {children}\n \n );\n}\n\nexport default UserAuthenticationProvider;\n\nconst UserAuthenticationConsumer = UserAuthenticationContext.Consumer;\nexport { UserAuthenticationConsumer };\n\nUserAuthenticationProvider.propTypes = {\n children: PropTypes.any,\n service: PropTypes.shape({\n setServiceImplementation: PropTypes.func,\n }).isRequired,\n};\n\nexport const useUserAuthentication = () =>\n useContext(UserAuthenticationContext);\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n\r\nvar __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n};\r\n\r\nvar browsers = [\r\n ['firefox', /Firefox\\/([0-9\\.]+)(?:\\s|$)/],\r\n ['opera', /Opera\\/([0-9\\.]+)(?:\\s|$)/],\r\n ['opera', /OPR\\/([0-9\\.]+)(:?\\s|$)$/],\r\n ['edge', /Edge\\/([0-9\\._]+)/],\r\n ['ie', /Trident\\/7\\.0.*rv\\:([0-9\\.]+)\\).*Gecko$/],\r\n ['ie', /MSIE\\s([0-9\\.]+);.*Trident\\/[4-7].0/],\r\n ['ie', /MSIE\\s(7\\.0)/],\r\n ['safari', /Version\\/([0-9\\._]+).*Safari/],\r\n ['chrome', /(?!Chrom.*OPR)Chrom(?:e|ium)\\/([0-9\\.]+)(:?\\s|$)/],\r\n ['bb10', /BB10;\\sTouch.*Version\\/([0-9\\.]+)/],\r\n ['android', /Android\\s([0-9\\.]+)/],\r\n ['ios', /Version\\/([0-9\\._]+).*Mobile.*Safari.*/],\r\n ['yandexbrowser', /YaBrowser\\/([0-9\\._]+)/],\r\n ['crios', /CriOS\\/([0-9\\.]+)(:?\\s|$)/]\r\n];\r\nvar os = [\r\n 'Windows Phone',\r\n 'Android',\r\n 'CentOS',\r\n { name: 'Chrome OS', pattern: 'CrOS' },\r\n 'Debian',\r\n 'Fedora',\r\n 'FreeBSD',\r\n 'Gentoo',\r\n 'Haiku',\r\n 'Kubuntu',\r\n 'Linux Mint',\r\n 'OpenBSD',\r\n 'Red Hat',\r\n 'SuSE',\r\n 'Ubuntu',\r\n 'Xubuntu',\r\n 'Cygwin',\r\n 'Symbian OS',\r\n 'hpwOS',\r\n 'webOS ',\r\n 'webOS',\r\n 'Tablet OS',\r\n 'Tizen',\r\n 'Linux',\r\n 'Mac OS X',\r\n 'Macintosh',\r\n 'Mac',\r\n 'Windows 98;',\r\n 'Windows '\r\n];\r\nvar osVersions = {\r\n '10.0': '10',\r\n '6.4': '10 Technical Preview',\r\n '6.3': '8.1',\r\n '6.2': '8',\r\n '6.1': 'Server 2008 R2 / 7',\r\n '6.0': 'Server 2008 / Vista',\r\n '5.2': 'Server 2003 / XP 64-bit',\r\n '5.1': 'XP',\r\n '5.01': '2000 SP1',\r\n '5.0': '2000',\r\n '4.0': 'NT',\r\n '4.90': 'ME'\r\n};\r\n\r\nvar mobileRegExp = new RegExp(['(android|bb\\\\d+|meego).+mobile|avantgo|bada\\\\/|blackberry|blazer|',\r\n 'compal|elaine|fennec|hiptop|iemobile|ip(hone|od|ad)|iris|kindle|lge |maemo|',\r\n 'midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)',\r\n '\\\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\\\.(browser|link)|vodafone|',\r\n 'wap|windows ce|xda|xiino'].join(''), 'i');\r\nvar mobilePrefixRegExp = new RegExp(['1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\\\-)|',\r\n 'ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\\\-m|r |s )|',\r\n 'avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\\\-(n|u)|c55\\\\/|capi|ccwa|cdm\\\\-|',\r\n 'cell|chtm|cldc|cmd\\\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\\\-s|devi|dica|dmob|do(c|p)o|',\r\n 'ds(12|\\\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\\\-|_)|',\r\n 'g1 u|g560|gene|gf\\\\-5|g\\\\-mo|go(\\\\.w|od)|gr(ad|un)|haie|hcit|hd\\\\-(m|p|t)|hei\\\\-|',\r\n 'hi(pt|ta)|hp( i|ip)|hs\\\\-c|ht(c(\\\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\\\-(20|go|ma)|',\r\n 'i230|iac( |\\\\-|\\\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|',\r\n 'kddi|keji|kgt( |\\\\/)|klon|kpt |kwc\\\\-|kyo(c|k)|le(no|xi)|lg( g|\\\\/(k|l|u)|50|54|\\\\-[a-w])',\r\n '|libw|lynx|m1\\\\-w|m3ga|m50\\\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\\\-cr|me(rc|ri)|mi(o8|oa|ts)|',\r\n 'mmef|mo(01|02|bi|de|do|t(\\\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|',\r\n 'n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|',\r\n 'op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\\\-2|',\r\n 'po(ck|rt|se)|prox|psio|pt\\\\-g|qa\\\\-a|qc(07|12|21|32|60|\\\\-[2-7]|i\\\\-)|qtek|r380|r600|',\r\n 'raks|rim9|ro(ve|zo)|s55\\\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\\\-|oo|p\\\\-)|sdk\\\\/|',\r\n 'se(c(\\\\-|0|1)|47|mc|nd|ri)|sgh\\\\-|shar|sie(\\\\-|m)|k\\\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|',\r\n 'so(ft|ny)|sp(01|h\\\\-|v\\\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\\\-|tdg\\\\-|',\r\n 'tel(i|m)|tim\\\\-|t\\\\-mo|to(pl|sh)|ts(70|m\\\\-|m3|m5)|tx\\\\-9|up(\\\\.b|g1|si)|utst|v400|v750|',\r\n 'veri|vi(rg|te)|vk(40|5[0-3]|\\\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|',\r\n 'w3c(\\\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\\\-|your|zeto|zte\\\\-'].join(''), 'i');\r\n\r\nvar Detector = /** @class */ (function () {\r\n function Detector(userAgent, navigator, process) {\r\n this.navigator = navigator;\r\n this.process = process;\r\n this.userAgent = userAgent\r\n ? userAgent\r\n : this.navigator ? (navigator.userAgent || navigator.vendor) : '';\r\n }\r\n Detector.prototype.detect = function () {\r\n if (this.process && !this.userAgent) {\r\n var version = this.process.version.slice(1).split('.').slice(0, 3);\r\n var versionTail = Array.prototype.slice.call(version, 1).join('') || '0';\r\n return {\r\n name: 'node',\r\n version: version.join('.'),\r\n versionNumber: parseFloat(version[0] + \".\" + versionTail),\r\n mobile: false,\r\n os: this.process.platform\r\n };\r\n }\r\n if (!this.userAgent)\r\n this.handleMissingError();\r\n return __assign({}, this.checkBrowser(), this.checkMobile(), this.checkOs());\r\n };\r\n Detector.prototype.checkBrowser = function () {\r\n var _this = this;\r\n return browsers\r\n .filter(function (definition) { return definition[1].test(_this.userAgent); })\r\n .map(function (definition) {\r\n var match = definition[1].exec(_this.userAgent);\r\n var version = match && match[1].split(/[._]/).slice(0, 3);\r\n var versionTails = Array.prototype.slice.call(version, 1).join('') || '0';\r\n if (version && version.length < 3)\r\n Array.prototype.push.apply(version, version.length === 1 ? [0, 0] : [0]);\r\n return {\r\n name: String(definition[0]),\r\n version: version.join('.'),\r\n versionNumber: Number(version[0] + \".\" + versionTails)\r\n };\r\n })\r\n .shift();\r\n };\r\n Detector.prototype.checkMobile = function () {\r\n var agentPrefix = this.userAgent.substr(0, 4);\r\n var mobile = mobileRegExp.test(this.userAgent) || mobilePrefixRegExp.test(agentPrefix);\r\n return { mobile: mobile };\r\n };\r\n Detector.prototype.checkOs = function () {\r\n var _this = this;\r\n return os\r\n .map(function (definition) {\r\n var name = definition.name || definition;\r\n var pattern = _this.getOsPattern(definition);\r\n return {\r\n name: name,\r\n pattern: pattern,\r\n value: RegExp(\"\\\\b\" + pattern.replace(/([ -])(?!$)/g, '$1?') + \"(?:x?[\\\\d._]+|[ \\\\w.]*)\", 'i').exec(_this.userAgent)\r\n };\r\n })\r\n .filter(function (definition) { return definition.value; })\r\n .map(function (definition) {\r\n var os$$1 = definition.value[0] || '';\r\n var osSuffix;\r\n if (definition.pattern &&\r\n definition.name &&\r\n /^Win/i.test(os$$1) &&\r\n !/^Windows Phone /i.test(os$$1) &&\r\n (osSuffix = osVersions[os$$1.replace(/[^\\d.]/g, '')]))\r\n os$$1 = \"Windows \" + osSuffix;\r\n if (definition.pattern && definition.name)\r\n os$$1 = os$$1.replace(RegExp(definition.pattern, 'i'), definition.name);\r\n os$$1 = os$$1\r\n .replace(/ ce$/i, ' CE')\r\n .replace(/\\bhpw/i, 'web')\r\n .replace(/\\bMacintosh\\b/, 'Mac OS')\r\n .replace(/_PowerPC\\b/i, ' OS')\r\n .replace(/\\b(OS X) [^ \\d]+/i, '$1')\r\n .replace(/\\bMac (OS X)\\b/, '$1')\r\n .replace(/\\/(\\d)/, ' $1')\r\n .replace(/_/g, '.')\r\n .replace(/(?: BePC|[ .]*fc[ \\d.]+)$/i, '')\r\n .replace(/\\bx86\\.64\\b/gi, 'x86_64')\r\n .replace(/\\b(Windows Phone) OS\\b/, '$1')\r\n .replace(/\\b(Chrome OS \\w+) [\\d.]+\\b/, '$1')\r\n .split(' on ')[0]\r\n .trim();\r\n os$$1 = /^(?:webOS|i(?:OS|P))/.test(os$$1)\r\n ? os$$1\r\n : (os$$1.charAt(0).toUpperCase() + os$$1.slice(1));\r\n return { os: os$$1 };\r\n })\r\n .shift();\r\n };\r\n Detector.prototype.getOsPattern = function (definition) {\r\n var definitionInterface = definition;\r\n return (typeof definition === 'string'\r\n ? definition\r\n : undefined) ||\r\n definitionInterface.pattern ||\r\n definitionInterface.name;\r\n };\r\n Detector.prototype.handleMissingError = function () {\r\n throw new Error('Please give user-agent.\\n> browser(navigator.userAgent or res.headers[\\'user-agent\\']).');\r\n };\r\n return Detector;\r\n}());\r\n\r\nfunction createCommonjsModule(fn, module) {\r\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\r\n}\r\n\r\nvar _global = createCommonjsModule(function (module) {\r\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\r\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\r\n ? window : typeof self != 'undefined' && self.Math == Math ? self\r\n // eslint-disable-next-line no-new-func\r\n : Function('return this')();\r\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\r\n});\r\n\r\nvar _core = createCommonjsModule(function (module) {\r\nvar core = module.exports = { version: '2.5.7' };\r\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\r\n});\r\nvar _core_1 = _core.version;\r\n\r\nvar _isObject = function (it) {\r\n return typeof it === 'object' ? it !== null : typeof it === 'function';\r\n};\r\n\r\nvar _anObject = function (it) {\r\n if (!_isObject(it)) throw TypeError(it + ' is not an object!');\r\n return it;\r\n};\r\n\r\nvar _fails = function (exec) {\r\n try {\r\n return !!exec();\r\n } catch (e) {\r\n return true;\r\n }\r\n};\r\n\r\n// Thank's IE8 for his funny defineProperty\r\nvar _descriptors = !_fails(function () {\r\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\r\n});\r\n\r\nvar document = _global.document;\r\n// typeof document.createElement is 'object' in old IE\r\nvar is = _isObject(document) && _isObject(document.createElement);\r\nvar _domCreate = function (it) {\r\n return is ? document.createElement(it) : {};\r\n};\r\n\r\nvar _ie8DomDefine = !_descriptors && !_fails(function () {\r\n return Object.defineProperty(_domCreate('div'), 'a', { get: function () { return 7; } }).a != 7;\r\n});\r\n\r\n// 7.1.1 ToPrimitive(input [, PreferredType])\r\n\r\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\r\n// and the second argument - flag - preferred type is a string\r\nvar _toPrimitive = function (it, S) {\r\n if (!_isObject(it)) return it;\r\n var fn, val;\r\n if (S && typeof (fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) return val;\r\n if (typeof (fn = it.valueOf) == 'function' && !_isObject(val = fn.call(it))) return val;\r\n if (!S && typeof (fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) return val;\r\n throw TypeError(\"Can't convert object to primitive value\");\r\n};\r\n\r\nvar dP = Object.defineProperty;\r\n\r\nvar f = _descriptors ? Object.defineProperty : function defineProperty(O, P, Attributes) {\r\n _anObject(O);\r\n P = _toPrimitive(P, true);\r\n _anObject(Attributes);\r\n if (_ie8DomDefine) try {\r\n return dP(O, P, Attributes);\r\n } catch (e) { /* empty */ }\r\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\r\n if ('value' in Attributes) O[P] = Attributes.value;\r\n return O;\r\n};\r\n\r\nvar _objectDp = {\r\n\tf: f\r\n};\r\n\r\nvar _propertyDesc = function (bitmap, value) {\r\n return {\r\n enumerable: !(bitmap & 1),\r\n configurable: !(bitmap & 2),\r\n writable: !(bitmap & 4),\r\n value: value\r\n };\r\n};\r\n\r\nvar _hide = _descriptors ? function (object, key, value) {\r\n return _objectDp.f(object, key, _propertyDesc(1, value));\r\n} : function (object, key, value) {\r\n object[key] = value;\r\n return object;\r\n};\r\n\r\nvar hasOwnProperty = {}.hasOwnProperty;\r\nvar _has = function (it, key) {\r\n return hasOwnProperty.call(it, key);\r\n};\r\n\r\nvar id = 0;\r\nvar px = Math.random();\r\nvar _uid = function (key) {\r\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\r\n};\r\n\r\nvar _redefine = createCommonjsModule(function (module) {\r\nvar SRC = _uid('src');\r\nvar TO_STRING = 'toString';\r\nvar $toString = Function[TO_STRING];\r\nvar TPL = ('' + $toString).split(TO_STRING);\r\n\r\n_core.inspectSource = function (it) {\r\n return $toString.call(it);\r\n};\r\n\r\n(module.exports = function (O, key, val, safe) {\r\n var isFunction = typeof val == 'function';\r\n if (isFunction) _has(val, 'name') || _hide(val, 'name', key);\r\n if (O[key] === val) return;\r\n if (isFunction) _has(val, SRC) || _hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\r\n if (O === _global) {\r\n O[key] = val;\r\n } else if (!safe) {\r\n delete O[key];\r\n _hide(O, key, val);\r\n } else if (O[key]) {\r\n O[key] = val;\r\n } else {\r\n _hide(O, key, val);\r\n }\r\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\r\n})(Function.prototype, TO_STRING, function toString() {\r\n return typeof this == 'function' && this[SRC] || $toString.call(this);\r\n});\r\n});\r\n\r\nvar _aFunction = function (it) {\r\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\r\n return it;\r\n};\r\n\r\n// optional / simple context binding\r\n\r\nvar _ctx = function (fn, that, length) {\r\n _aFunction(fn);\r\n if (that === undefined) return fn;\r\n switch (length) {\r\n case 1: return function (a) {\r\n return fn.call(that, a);\r\n };\r\n case 2: return function (a, b) {\r\n return fn.call(that, a, b);\r\n };\r\n case 3: return function (a, b, c) {\r\n return fn.call(that, a, b, c);\r\n };\r\n }\r\n return function (/* ...args */) {\r\n return fn.apply(that, arguments);\r\n };\r\n};\r\n\r\nvar PROTOTYPE = 'prototype';\r\n\r\nvar $export = function (type, name, source) {\r\n var IS_FORCED = type & $export.F;\r\n var IS_GLOBAL = type & $export.G;\r\n var IS_STATIC = type & $export.S;\r\n var IS_PROTO = type & $export.P;\r\n var IS_BIND = type & $export.B;\r\n var target = IS_GLOBAL ? _global : IS_STATIC ? _global[name] || (_global[name] = {}) : (_global[name] || {})[PROTOTYPE];\r\n var exports = IS_GLOBAL ? _core : _core[name] || (_core[name] = {});\r\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\r\n var key, own, out, exp;\r\n if (IS_GLOBAL) source = name;\r\n for (key in source) {\r\n // contains in native\r\n own = !IS_FORCED && target && target[key] !== undefined;\r\n // export native or passed\r\n out = (own ? target : source)[key];\r\n // bind timers to global for call from export context\r\n exp = IS_BIND && own ? _ctx(out, _global) : IS_PROTO && typeof out == 'function' ? _ctx(Function.call, out) : out;\r\n // extend global\r\n if (target) _redefine(target, key, out, type & $export.U);\r\n // export\r\n if (exports[key] != out) _hide(exports, key, exp);\r\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\r\n }\r\n};\r\n_global.core = _core;\r\n// type bitmap\r\n$export.F = 1; // forced\r\n$export.G = 2; // global\r\n$export.S = 4; // static\r\n$export.P = 8; // proto\r\n$export.B = 16; // bind\r\n$export.W = 32; // wrap\r\n$export.U = 64; // safe\r\n$export.R = 128; // real proto method for `library`\r\nvar _export = $export;\r\n\r\nvar toString = {}.toString;\r\n\r\nvar _cof = function (it) {\r\n return toString.call(it).slice(8, -1);\r\n};\r\n\r\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\r\n\r\n// eslint-disable-next-line no-prototype-builtins\r\nvar _iobject = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\r\n return _cof(it) == 'String' ? it.split('') : Object(it);\r\n};\r\n\r\n// 7.2.1 RequireObjectCoercible(argument)\r\nvar _defined = function (it) {\r\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\r\n return it;\r\n};\r\n\r\n// 7.1.13 ToObject(argument)\r\n\r\nvar _toObject = function (it) {\r\n return Object(_defined(it));\r\n};\r\n\r\n// 7.1.4 ToInteger\r\nvar ceil = Math.ceil;\r\nvar floor = Math.floor;\r\nvar _toInteger = function (it) {\r\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\r\n};\r\n\r\n// 7.1.15 ToLength\r\n\r\nvar min = Math.min;\r\nvar _toLength = function (it) {\r\n return it > 0 ? min(_toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\r\n};\r\n\r\n// 7.2.2 IsArray(argument)\r\n\r\nvar _isArray = Array.isArray || function isArray(arg) {\r\n return _cof(arg) == 'Array';\r\n};\r\n\r\nvar _shared = createCommonjsModule(function (module) {\r\nvar SHARED = '__core-js_shared__';\r\nvar store = _global[SHARED] || (_global[SHARED] = {});\r\n\r\n(module.exports = function (key, value) {\r\n return store[key] || (store[key] = value !== undefined ? value : {});\r\n})('versions', []).push({\r\n version: _core.version,\r\n mode: 'global',\r\n copyright: '© 2018 Denis Pushkarev (zloirock.ru)'\r\n});\r\n});\r\n\r\nvar _wks = createCommonjsModule(function (module) {\r\nvar store = _shared('wks');\r\n\r\nvar Symbol = _global.Symbol;\r\nvar USE_SYMBOL = typeof Symbol == 'function';\r\n\r\nvar $exports = module.exports = function (name) {\r\n return store[name] || (store[name] =\r\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : _uid)('Symbol.' + name));\r\n};\r\n\r\n$exports.store = store;\r\n});\r\n\r\nvar SPECIES = _wks('species');\r\n\r\nvar _arraySpeciesConstructor = function (original) {\r\n var C;\r\n if (_isArray(original)) {\r\n C = original.constructor;\r\n // cross-realm fallback\r\n if (typeof C == 'function' && (C === Array || _isArray(C.prototype))) C = undefined;\r\n if (_isObject(C)) {\r\n C = C[SPECIES];\r\n if (C === null) C = undefined;\r\n }\r\n } return C === undefined ? Array : C;\r\n};\r\n\r\n// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\r\n\r\n\r\nvar _arraySpeciesCreate = function (original, length) {\r\n return new (_arraySpeciesConstructor(original))(length);\r\n};\r\n\r\n// 0 -> Array#forEach\r\n// 1 -> Array#map\r\n// 2 -> Array#filter\r\n// 3 -> Array#some\r\n// 4 -> Array#every\r\n// 5 -> Array#find\r\n// 6 -> Array#findIndex\r\n\r\n\r\n\r\n\r\n\r\nvar _arrayMethods = function (TYPE, $create) {\r\n var IS_MAP = TYPE == 1;\r\n var IS_FILTER = TYPE == 2;\r\n var IS_SOME = TYPE == 3;\r\n var IS_EVERY = TYPE == 4;\r\n var IS_FIND_INDEX = TYPE == 6;\r\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\r\n var create = $create || _arraySpeciesCreate;\r\n return function ($this, callbackfn, that) {\r\n var O = _toObject($this);\r\n var self = _iobject(O);\r\n var f = _ctx(callbackfn, that, 3);\r\n var length = _toLength(self.length);\r\n var index = 0;\r\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\r\n var val, res;\r\n for (;length > index; index++) if (NO_HOLES || index in self) {\r\n val = self[index];\r\n res = f(val, index, O);\r\n if (TYPE) {\r\n if (IS_MAP) result[index] = res; // map\r\n else if (res) switch (TYPE) {\r\n case 3: return true; // some\r\n case 5: return val; // find\r\n case 6: return index; // findIndex\r\n case 2: result.push(val); // filter\r\n } else if (IS_EVERY) return false; // every\r\n }\r\n }\r\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\r\n };\r\n};\r\n\r\nvar _strictMethod = function (method, arg) {\r\n return !!method && _fails(function () {\r\n // eslint-disable-next-line no-useless-call\r\n arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);\r\n });\r\n};\r\n\r\nvar $filter = _arrayMethods(2);\r\n\r\n_export(_export.P + _export.F * !_strictMethod([].filter, true), 'Array', {\r\n // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\r\n filter: function filter(callbackfn /* , thisArg */) {\r\n return $filter(this, callbackfn, arguments[1]);\r\n }\r\n});\r\n\r\nvar filter = _core.Array.filter;\r\n\r\nvar $map = _arrayMethods(1);\r\n\r\n_export(_export.P + _export.F * !_strictMethod([].map, true), 'Array', {\r\n // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\r\n map: function map(callbackfn /* , thisArg */) {\r\n return $map(this, callbackfn, arguments[1]);\r\n }\r\n});\r\n\r\nvar map = _core.Array.map;\r\n\r\nvar _stringWs = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\r\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\r\n\r\nvar space = '[' + _stringWs + ']';\r\nvar non = '\\u200b\\u0085';\r\nvar ltrim = RegExp('^' + space + space + '*');\r\nvar rtrim = RegExp(space + space + '*$');\r\n\r\nvar exporter = function (KEY, exec, ALIAS) {\r\n var exp = {};\r\n var FORCE = _fails(function () {\r\n return !!_stringWs[KEY]() || non[KEY]() != non;\r\n });\r\n var fn = exp[KEY] = FORCE ? exec(trim) : _stringWs[KEY];\r\n if (ALIAS) exp[ALIAS] = fn;\r\n _export(_export.P + _export.F * FORCE, 'String', exp);\r\n};\r\n\r\n// 1 -> String#trimLeft\r\n// 2 -> String#trimRight\r\n// 3 -> String#trim\r\nvar trim = exporter.trim = function (string, TYPE) {\r\n string = String(_defined(string));\r\n if (TYPE & 1) string = string.replace(ltrim, '');\r\n if (TYPE & 2) string = string.replace(rtrim, '');\r\n return string;\r\n};\r\n\r\nvar _stringTrim = exporter;\r\n\r\n// 21.1.3.25 String.prototype.trim()\r\n_stringTrim('trim', function ($trim) {\r\n return function trim() {\r\n return $trim(this, 3);\r\n };\r\n});\r\n\r\nvar trim$1 = _core.String.trim;\r\n\r\nvar injectableNavigator = typeof window !== 'undefined'\r\n ? window.navigator\r\n : undefined;\r\nvar injectableProcess = typeof process !== 'undefined'\r\n ? process\r\n : undefined;\r\nfunction browserDetect (userAgent) {\r\n var detector = new Detector(userAgent, injectableNavigator, injectableProcess);\r\n return detector.detect();\r\n}\r\n\r\nexport default browserDetect;\r\n//# sourceMappingURL=browser-detect.es5.js.map\r\n","import React from 'react';\nimport { Typography, Icon } from '../';\nimport PropTypes from 'prop-types';\nimport detect from 'browser-detect';\n\nconst Link = ({ href, children, showIcon = false }) => {\n return (\n \n \n {children}\n {!!showIcon && (\n \n )}\n \n \n );\n};\n\nconst Row = ({ title, value, link }) => {\n return (\n
\n \n {title}\n \n\n {link ? (\n {value}\n ) : (\n \n {value}\n \n )}\n
\n );\n};\n\nconst AboutModal = ({ buildNumber, versionNumber }) => {\n const { os, version, name } = detect();\n const browser = `${name[0].toUpperCase()}${name.substr(1)} ${version}`;\n\n const renderRowTitle = title => (\n
\n \n {title}\n \n
\n );\n return (\n
\n {renderRowTitle('Important Links')}\n
\n \n Visit the forum\n \n \n \n Report an issue\n \n \n \n \n More details\n \n \n
\n\n {renderRowTitle('Version Information')}\n
\n \n {/* */}\n \n \n \n \n
\n
\n );\n};\n\nAboutModal.propTypes = {\n buildNumber: PropTypes.string,\n versionNumber: PropTypes.string,\n};\n\nexport default AboutModal;\n","import AboutModal from './AboutModal';\nexport default AboutModal;\n","import React, { useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\nconst baseClasses =\n 'leading-none font-sans text-center justify-center items-center outline-none transition duration-300 ease-in-out focus:outline-none';\n\nconst defaults = {\n color: 'default',\n disabled: false,\n fullWidth: false,\n rounded: 'medium',\n border: 'none',\n size: 'medium',\n type: 'button',\n variant: 'contained',\n};\n\nconst roundedClasses = {\n none: '',\n small: 'rounded',\n medium: 'rounded-md',\n large: 'rounded-lg',\n full: 'rounded-full',\n};\n\nconst variants = {\n text: {\n default:\n 'text-primary-light hover:bg-primary-light hover:text-white active:opacity-80 focus:bg-primary-light focus:text-white',\n primary:\n 'text-primary-main hover:bg-primary-main hover:text-white active:opacity-80 focus:bg-primary-main focus:text-white',\n secondary:\n 'text-secondary-light hover:bg-secondary-light hover:text-white active:opacity-80 focus:bg-secondary-light focus:text-white',\n white:\n 'text-white hover:bg-white hover:text-black active:opacity-80 focus:bg-white focus:text-black',\n black:\n 'text-black hover:bg-black hover:text-white focus:bg-black focus:text-white active:opacity-80',\n },\n outlined: {\n default:\n 'text-primary-light hover:bg-primary-light hover:text-black focus:text-black focus:bg-primary-light active:opacity-80',\n primary:\n 'text-primary-main hover:opacity-80 active:opacity-100 focus:opacity-80',\n secondary:\n 'text-secondary-light hover:opacity-80 active:opacity-100 focus:opacity-80',\n white: 'text-white hover:opacity-80 active:opacity-100 focus:opacity-80',\n black:\n 'text-white hover:bg-primary-main focus:bg-primary-main hover:border-black focus:border-black',\n primaryActive:\n 'text-primary-active hover:opacity-80 active:opacity-100 focus:opacity-80',\n primaryLight:\n 'border bg-transparent border-primary-main text-white hover:opacity-80 active:opacity-100 focus:opacity-80',\n },\n contained: {\n default: 'text-black hover:opacity-80 active:opacity-100 focus:opacity-80',\n primary: 'text-white hover:opacity-80 active:opacity-100 focus:opacity-80',\n secondary:\n 'text-white hover:opacity-80 active:opacity-100 focus:opacity-80',\n white: 'text-black hover:opacity-80 active:opacity-100 focus:opacity-80',\n black: 'text-white hover:opacity-80 active:opacity-100 focus:opacity-80',\n light:\n 'border text-black hover:opacity-80 active:opacity-100 focus:opacity-80',\n },\n disabled: {\n default: 'cursor-not-allowed opacity-50 text-black',\n primary: 'cursor-not-allowed opacity-50 text-white',\n secondary: 'cursor-not-allowed opacity-50 text-white',\n white: 'cursor-not-allowed opacity-50 text-black',\n black: 'cursor-not-allowed opacity-50 text-white',\n light: 'cursor-not-allowed opacity-50 border text-black',\n },\n};\n\nconst defaultVariantBackGroundColor = {\n text: {\n default: '',\n primary: '',\n secondary: '',\n white: '',\n black: '',\n },\n outlined: {\n default: 'bg-transparent',\n primary: 'bg-transparent',\n secondary: 'bg-transparent',\n black: 'bg-black',\n white: '',\n },\n contained: {\n default: 'bg-primary-light',\n primary: 'bg-primary-main',\n secondary: 'bg-secondary-light',\n white: 'bg-white',\n black: 'bg-black',\n light: 'bg-primary-light',\n },\n disabled: {\n default: 'bg-primary-light',\n primary: 'bg-primary-main',\n secondary: 'bg-secondary-light',\n white: 'bg-white',\n black: 'bg-black',\n light: 'bg-primary-light',\n },\n};\n\nconst _getVariantClass = (variant, color, bgColor = null) => {\n const defaultBackgroundColor = defaultVariantBackGroundColor[variant][color];\n\n if (!bgColor) {\n bgColor = defaultBackgroundColor;\n }\n\n return `${variants[variant][color]} ${bgColor}`;\n};\n\nconst borderClasses = {\n none: '',\n light: 'border border-primary-light',\n primary: 'border border-primary-main',\n primaryActive: 'border border-primary-active',\n secondary: 'border border-secondary-light',\n white: 'border border-white',\n black: 'border border-black',\n};\n\nconst sizeClasses = {\n small: 'py-2 px-2 text-sm min-w-md',\n medium: 'py-2 px-2 text-lg min-w-md',\n large: 'py-2 px-6 text-xl min-w-md',\n initial: '',\n};\n\nconst fullWidthClasses = {\n true: 'flex w-full',\n false: 'inline-flex',\n};\n\nconst Button = ({\n children,\n variant = defaults.variant,\n color = defaults.color,\n border = defaults.border,\n size = defaults.size,\n rounded = defaults.rounded,\n disabled = defaults.disabled,\n type = defaults.type,\n fullWidth = defaults.fullWidth,\n bgColor = null,\n startIcon: startIconProp,\n endIcon: endIconProp,\n name,\n className,\n onClick,\n /** TODO: All possible props should be explicitly defined -- avoid spreading props */\n ...rest\n}) => {\n const startIcon = startIconProp && (\n
\n {React.cloneElement(startIconProp, {\n className: classnames('w-4 h-4 fill-current'),\n })}\n
\n );\n\n const endIcon = endIconProp && (\n
\n {React.cloneElement(endIconProp, {\n className: classnames('w-4 h-4 fill-current'),\n })}\n
\n );\n const buttonElement = useRef(null);\n\n const handleOnClick = e => {\n buttonElement.current.blur();\n if (!disabled) {\n onClick(e);\n }\n };\n\n const finalClassName = classnames(\n baseClasses,\n _getVariantClass(variant, color, bgColor),\n borderClasses[border],\n roundedClasses[rounded],\n sizeClasses[size],\n fullWidthClasses[fullWidth],\n className\n );\n\n return (\n \n {startIcon}\n {children}\n {endIcon}\n \n );\n};\n\nButton.defaultProps = {\n color: defaults.color,\n disabled: false,\n children: '',\n onClick: () => {},\n};\n\nButton.propTypes = {\n /** What is inside the button, can be text or react component */\n children: PropTypes.node,\n /** Callback to be called when the button is clicked */\n onClick: PropTypes.func.isRequired,\n /** Button size */\n size: PropTypes.oneOf(['small', 'medium', 'large', 'initial', 'inherit']),\n /** Button corner roundness */\n rounded: PropTypes.oneOf(['none', 'small', 'medium', 'large', 'full']),\n variant: PropTypes.oneOf(['text', 'outlined', 'contained', 'disabled']),\n color: PropTypes.oneOf([\n 'default',\n 'primary',\n 'secondary',\n 'white',\n 'black',\n 'inherit',\n 'light',\n ]),\n border: PropTypes.oneOf([\n 'none',\n 'light',\n 'default',\n 'primary',\n 'secondary',\n 'white',\n 'black',\n ]),\n /** Whether the button should have full width */\n fullWidth: PropTypes.bool,\n /** Whether the button should be disabled */\n disabled: PropTypes.bool,\n /** Button type */\n type: PropTypes.string,\n name: PropTypes.string,\n /** Button start icon name - if any icon is specified */\n startIcon: PropTypes.node,\n /** Button end icon name - if any icon is specified */\n endIcon: PropTypes.node,\n /** Additional TailwindCSS classnames */\n className: PropTypes.string,\n /** Background color for the button to override*/\n bgColor: PropTypes.string,\n};\n\nexport default Button;\n","import Button from './Button';\nexport default Button;\n","import React, { useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\nconst baseButtonClass = 'border outline-none';\nconst roundedClasses = {\n vertical: {\n none: '',\n small: 'first:rounded-t last:rounded-b',\n medium: 'first:rounded-t-md last:rounded-b-md',\n large: 'first:rounded-t-lg last:rounded-b-lg',\n full: 'first:rounded-t-full last:rounded-b-full',\n },\n horizontal: {\n none: '',\n small: 'first:rounded-l last:rounded-r',\n medium: 'first:rounded-l-md last:rounded-r-md',\n large: 'first:rounded-l-lg last:rounded-r-lg',\n full: 'first:rounded-l-full last:rounded-r-full',\n },\n};\n\nconst borderClasses = {\n text: {\n vertical: 'border-t-0 border-l-0 border-r-0 last:border-b-0',\n horizontal: 'border-l-0 border-t-0 border-b-0 last:border-r-0',\n },\n outlined: {\n vertical: 'border border-b-0 last:border-b',\n horizontal: 'border border-r-0 last:border-r',\n },\n contained: {\n vertical: 'border-t-0 border-l-0 border-r-0 last:border-b-0',\n horizontal: 'border-l-0 border-t-0 border-b-0 last:border-r-0',\n },\n};\n\nconst variantClasses = {\n text: {\n default: 'border-primary-light',\n primary: 'border-primary-main',\n secondary: 'border-secondary-light',\n white: 'border-white',\n black: 'border-primary-main',\n },\n outlined: {\n default: '',\n primary: '',\n secondary: 'border border-secondary-light',\n white: '',\n black:\n 'border-primary-main group-hover:bg-primary-main group-hover:border-black',\n },\n contained: {\n default: 'border-white',\n primary: 'border-white',\n secondary: 'border-white',\n white: 'border-black',\n black: 'border-primary-main',\n },\n};\n\nconst orientationClasses = {\n vertical: 'flex-col',\n horizontal: 'flex-row',\n};\n\nconst baseDisplayClass = 'inline-flex';\nconst fullWidthDisplayClass = 'flex';\n\n// css class that are applied for buttons that not the first or last\nconst nonFirstLastClasses = {\n vertical: 'border-t-0 border-b-0',\n horizontal: 'border-l-0 last:border-r-0',\n};\n\nconst ButtonGroup = ({\n children,\n className,\n disabled = false,\n fullWidth = false,\n color = 'default',\n orientation = 'horizontal',\n rounded = 'medium',\n size = 'medium',\n variant = 'outlined',\n splitBorder = true,\n ...other\n}) => {\n const ref = useRef(null);\n\n const buttonClasses = classnames(\n baseButtonClass,\n borderClasses[variant] && borderClasses[variant][orientation],\n variantClasses[variant] && variantClasses[variant][color],\n roundedClasses[orientation] && roundedClasses[orientation][rounded]\n );\n\n return (\n \n {React.Children.map(children, (child, index) => {\n const isFirst = index === 0;\n const isLast = index === React.Children.count(children) - 1;\n const isNotFirstOrLast = !isFirst && !isLast;\n\n if (!React.isValidElement(child)) {\n return null;\n }\n\n return React.cloneElement(child, {\n className: classnames(\n buttonClasses,\n child.props.className,\n !splitBorder &&\n isNotFirstOrLast &&\n nonFirstLastClasses[orientation],\n !splitBorder && isLast && 'last:border-l-0'\n ),\n disabled: child.props.disabled || disabled,\n color: child.props.color || color,\n fullWidth,\n rounded: 'none',\n size: child.props.size || size,\n variant: child.props.variant || variant,\n });\n })}\n \n );\n};\n\nButtonGroup.propTypes = {\n children: PropTypes.node.isRequired,\n className: PropTypes.string,\n color: PropTypes.oneOf([\n 'default',\n 'inherit',\n 'primary',\n 'secondary',\n 'white',\n 'black',\n ]),\n disabled: PropTypes.bool,\n fullWidth: PropTypes.bool,\n orientation: PropTypes.oneOf(['vertical', 'horizontal']),\n rounded: PropTypes.oneOf(['none', 'small', 'medium', 'large', 'full']),\n size: PropTypes.oneOf(['small', 'medium', 'large', 'inherit']),\n variant: PropTypes.oneOf(['text', 'outlined', 'contained']),\n};\n\nexport default ButtonGroup;\n","import ButtonGroup from './ButtonGroup';\nexport default ButtonGroup;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Typography } from '../';\n\nconst ContextMenu = ({ items }) => {\n return (\n e.preventDefault()}\n >\n {items.map((item, index) => (\n item.action(item)}\n className=\"flex px-4 py-3 cursor-pointer items-center transition duration-300 hover:bg-primary-dark border-b border-primary-dark last:border-b-0\"\n >\n {item.label}\n \n ))}\n \n );\n};\n\nContextMenu.propTypes = {\n items: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n actionType: PropTypes.string.isRequired,\n action: PropTypes.func.isRequired,\n })\n ).isRequired,\n};\n\nexport default ContextMenu;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport debounce from 'lodash.debounce';\nimport { IconButton, Icon } from '../';\n\nimport './CinePlayerCustomInputRange.css';\n\nconst CinePlayer = ({\n isPlaying,\n minFrameRate,\n maxFrameRate,\n stepFrameRate,\n frameRate: defaultFrameRate,\n onFrameRateChange,\n onPlayPauseChange,\n onClose,\n}) => {\n const [frameRate, setFrameRate] = useState(defaultFrameRate);\n const debouncedSetFrameRate = debounce(onFrameRateChange, 300);\n\n const onFrameRateChangeHandler = ({ target }) => {\n const frameRate = parseFloat(target.value);\n debouncedSetFrameRate(frameRate);\n setFrameRate(frameRate);\n };\n\n const onPlayPauseChangeHandler = () => onPlayPauseChange(!isPlaying);\n\n const action = {\n false: { icon: 'old-play' },\n true: { icon: 'old-stop' },\n };\n\n return (\n
\n \n \n \n
\n \n

{`${frameRate.toFixed(\n 1\n )} fps`}

\n
\n \n \n \n
\n );\n};\n\nconst noop = () => {};\n\nCinePlayer.defaultProps = {\n isPlaying: false,\n minFrameRate: 1,\n maxFrameRate: 90,\n stepFrameRate: 1,\n frameRate: 24,\n onPlayPauseChange: noop,\n onFrameRateChange: noop,\n onClose: noop,\n};\n\nCinePlayer.propTypes = {\n /** Minimum value for range slider */\n minFrameRate: PropTypes.number.isRequired,\n /** Maximum value for range slider */\n maxFrameRate: PropTypes.number.isRequired,\n /** Increment range slider can \"step\" in either direction */\n stepFrameRate: PropTypes.number.isRequired,\n frameRate: PropTypes.number.isRequired,\n /** 'true' if playing, 'false' if paused */\n isPlaying: PropTypes.bool.isRequired,\n onPlayPauseChange: PropTypes.func,\n onFrameRateChange: PropTypes.func,\n onClose: PropTypes.func,\n};\n\nexport default CinePlayer;\n","import CinePlayer from './CinePlayer';\nexport default CinePlayer;\n","import React, { useState, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\n\n/** REACT DATES */\nimport { DateRangePicker, isInclusivelyBeforeDay } from 'react-dates';\nimport 'react-dates/initialize';\nimport 'react-dates/lib/css/_datepicker.css';\nimport './DateRange.css';\n\nconst today = moment();\nconst lastWeek = moment().subtract(7, 'day');\nconst lastMonth = moment().subtract(1, 'month');\nconst studyDatePresets = [\n {\n text: 'Today',\n start: today,\n end: today,\n },\n {\n text: 'Last 7 days',\n start: lastWeek,\n end: today,\n },\n {\n text: 'Last 30 days',\n start: lastMonth,\n end: today,\n },\n];\n\nconst renderYearsOptions = () => {\n const currentYear = moment().year();\n const options = [];\n\n for (let i = 0; i < 20; i++) {\n const year = currentYear - i;\n options.push(\n \n );\n }\n\n return options;\n};\n\nconst DateRange = (props) => {\n const { id, onChange, startDate, endDate } = props;\n const [focusedInput, setFocusedInput] = useState(null);\n const renderYearsOptionsCallback = useCallback(renderYearsOptions, []);\n\n const renderDatePresets = () => {\n return (\n
\n {studyDatePresets.map(({ text, start, end }) => {\n return (\n \n onChange({\n startDate: start ? start.format('YYYYMMDD') : undefined,\n endDate: end ? end.format('YYYYMMDD') : undefined,\n preset: true,\n })\n }\n >\n {text}\n \n );\n })}\n
\n );\n };\n const renderMonthElement = ({ month, onMonthSelect, onYearSelect }) => {\n renderMonthElement.propTypes = {\n month: PropTypes.object,\n onMonthSelect: PropTypes.func,\n onYearSelect: PropTypes.func,\n };\n\n const handleMonthChange = (event) => {\n onMonthSelect(month, event.target.value);\n };\n\n const handleYearChange = (event) => {\n onYearSelect(month, event.target.value);\n };\n\n const handleOnBlur = () => { };\n\n return (\n
\n
\n \n {moment.months().map((label, value) => (\n \n ))}\n \n
\n
\n \n {renderYearsOptionsCallback()}\n \n
\n
\n );\n };\n\n // Moment\n const parsedStartDate = startDate ? moment(startDate, 'YYYYMMDD') : null;\n const parsedEndDate = endDate ? moment(endDate, 'YYYYMMDD') : null;\n\n return (\n {\n onChange({\n startDate: newStartDate ? newStartDate.format('YYYYMMDD') : undefined,\n endDate: newEndDate ? newEndDate.format('YYYYMMDD') : undefined,\n })\n }}\n focusedInput={focusedInput}\n onFocusChange={(updatedVal) => setFocusedInput(updatedVal)}\n /** OPTIONAL */\n renderCalendarInfo={renderDatePresets}\n renderMonthElement={renderMonthElement}\n startDatePlaceholderText={'Start Date'}\n endDatePlaceholderText={'End Date'}\n phrases={{\n closeDatePicker: 'Close',\n clearDates: 'Clear dates',\n }}\n isOutsideRange={(day) => !isInclusivelyBeforeDay(day, moment())}\n hideKeyboardShortcutsPanel={true}\n numberOfMonths={1}\n showClearDates={false}\n anchorDirection=\"left\"\n />\n );\n};\n\nDateRange.defaultProps = {\n id: '',\n startDate: null,\n endDate: null,\n};\n\nDateRange.propTypes = {\n id: PropTypes.string,\n /** YYYYMMDD (19921022) */\n startDate: PropTypes.string,\n /** YYYYMMDD (19921022) */\n endDate: PropTypes.object,\n /** Callback that received { startDate: string(YYYYMMDD), endDate: string(YYYYMMDD)} */\n onChange: PropTypes.func.isRequired,\n};\n\nexport default DateRange;\n","import DateRange from './DateRange';\n\nexport default DateRange;\n","import React from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\n\nimport { Button } from '..';\n\nconst Footer = ({ actions, className, onSubmit, value }) => {\n const flex = 'flex items-center justify-end';\n const border = 'border-t-2 border-solid border-black rounded-b';\n const spacing = 'p-6';\n const theme = 'bg-primary-dark';\n\n return (\n
\n {actions.map((action, index) => {\n const isFirst = index === 0;\n const isPrimary = action.type === 'primary';\n\n const onClickHandler = event => onSubmit({ action, value, event });\n\n return (\n \n {action.text}\n \n );\n })}\n
\n );\n};\n\nconst noop = () => {};\n\nFooter.propTypes = {\n className: PropTypes.string,\n onSubmit: PropTypes.func.isRequired,\n actions: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string.isRequired,\n text: PropTypes.string.isRequired,\n value: PropTypes.any,\n type: PropTypes.oneOf(['primary', 'secondary', 'cancel']).isRequired,\n classes: PropTypes.arrayOf(PropTypes.string),\n })\n ).isRequired,\n};\n\nFooter.defaultProps = {\n onSubmit: noop,\n actions: [],\n};\n\nexport default Footer;\n","import React from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\n\nimport { Typography } from '..';\n\nconst Body = ({ text, className }) => {\n const theme = 'bg-primary-dark';\n return (\n
\n
\n \n {text}\n \n
\n
\n );\n};\n\nBody.propTypes = {\n text: PropTypes.string,\n className: PropTypes.string,\n};\n\nexport default Body;\n","import React from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\n\nimport { Typography, Icon } from '..';\n\nconst CloseButton = ({ onClick }) => {\n return (\n \n );\n};\n\nCloseButton.propTypes = {\n onClick: PropTypes.func,\n};\n\nconst Header = ({ title, noCloseButton, onClose }) => {\n const theme = 'bg-secondary-main';\n const flex = 'flex items-center justify-between';\n const border = 'border-b-2 border-solid border-black rounded-t';\n const spacing = 'p-4';\n\n return (\n
\n \n {title}\n \n {!noCloseButton && }\n
\n );\n};\n\nHeader.propTypes = {\n className: PropTypes.string,\n title: PropTypes.string,\n noCloseButton: PropTypes.bool,\n onClose: PropTypes.func,\n};\n\nHeader.defaultProps = {\n noCloseButton: false,\n};\n\nexport default Header;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\n\nimport Footer from './Footer';\nimport Body from './Body';\nimport Header from './Header';\nimport { useEffect } from 'react';\n\nconst Dialog = ({\n title,\n text,\n onClose,\n noCloseButton,\n actions,\n onShow,\n onSubmit,\n header: HeaderComponent,\n body: BodyComponent,\n footer: FooterComponent,\n value: defaultValue,\n}) => {\n const [value, setValue] = useState(defaultValue);\n\n const theme = 'bg-secondary-light';\n const flex = 'flex flex-col';\n const border = 'border-0 rounded-lg drop-shadow-lg';\n const outline = 'outline-none focus:outline-none';\n const position = 'relative';\n const width = 'w-full';\n\n useEffect(() => {\n if (onShow) {\n onShow();\n }\n }, [onShow]);\n\n return (\n
\n \n \n \n
\n );\n};\n\nDialog.propTypes = {\n title: PropTypes.string,\n text: PropTypes.string,\n onClose: PropTypes.func,\n noCloseButton: PropTypes.bool,\n header: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n body: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n footer: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n onSubmit: PropTypes.func.isRequired,\n value: PropTypes.object,\n actions: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string.isRequired,\n text: PropTypes.string.isRequired,\n value: PropTypes.any,\n type: PropTypes.oneOf(['primary', 'secondary', 'cancel']).isRequired,\n })\n ).isRequired,\n};\n\nDialog.defaultProps = {\n header: Header,\n footer: Footer,\n body: Body,\n value: {},\n};\n\nexport default Dialog;\n","import Dialog from './Dialog';\nexport default Dialog;\n","import React, { useEffect, useCallback, useState, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\nimport { Icon, Typography } from '../';\n\nconst Dropdown = ({ id, children, showDropdownIcon, list, titleClassName }) => {\n const [open, setOpen] = useState(false);\n const element = useRef(null);\n\n const DropdownItem = useCallback(({ id, title, icon, onClick }) => {\n return (\n {\n setOpen(false);\n onClick();\n }}\n data-cy={id}\n >\n {!!icon && }\n {title}\n \n );\n }, []);\n\n DropdownItem.defaultProps = {\n icon: '',\n };\n\n DropdownItem.propTypes = {\n id: PropTypes.string,\n title: PropTypes.string.isRequired,\n icon: PropTypes.string,\n onClick: PropTypes.func.isRequired,\n };\n\n const renderTitleElement = () => {\n return (\n
\n {children}\n {showDropdownIcon && }\n
\n );\n };\n\n const toggleList = () => {\n setOpen(s => !s);\n };\n\n const handleClick = e => {\n if (element.current && !element.current.contains(e.target)) {\n setOpen(false);\n }\n };\n\n const renderList = () => {\n return (\n \n {list.map((item, idx) => (\n \n ))}\n \n );\n };\n\n useEffect(() => {\n document.addEventListener('click', handleClick);\n\n if (!open) {\n document.removeEventListener('click', handleClick);\n }\n }, [open]);\n\n return (\n
\n
\n {renderTitleElement()}\n
\n\n {renderList()}\n
\n );\n};\n\nDropdown.defaultProps = {\n showDropdownIcon: true,\n};\n\nDropdown.propTypes = {\n id: PropTypes.string,\n children: PropTypes.node.isRequired,\n showDropdownIcon: PropTypes.bool,\n titleClassName: PropTypes.string,\n /** Items to render in the select's drop down */\n list: PropTypes.arrayOf(\n PropTypes.shape({\n title: PropTypes.string.isRequired,\n icon: PropTypes.string,\n onClick: PropTypes.func.isRequired,\n })\n ).isRequired,\n};\n\nexport default Dropdown;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { Icon, Typography } from '../';\n\n// TODO: Add loading spinner to OHIF + use it here.\nconst EmptyStudies = ({ className }) => {\n return (\n
\n \n \n {'No studies available'}\n \n
\n );\n};\n\nEmptyStudies.defaultProps = {\n className: '',\n};\n\nEmptyStudies.propTypes = {\n className: PropTypes.string,\n};\n\nexport default EmptyStudies;\n","import EmptyStudies from './EmptyStudies';\nexport default EmptyStudies;\n","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","import _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport * as React from 'react';\n\nvar changedArray = function changedArray(a, b) {\n if (a === void 0) {\n a = [];\n }\n\n if (b === void 0) {\n b = [];\n }\n\n return a.length !== b.length || a.some(function (item, index) {\n return !Object.is(item, b[index]);\n });\n};\n\nvar initialState = {\n error: null\n};\n\nvar ErrorBoundary = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(ErrorBoundary, _React$Component);\n\n function ErrorBoundary() {\n var _this;\n\n for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {\n _args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(_args)) || this;\n _this.state = initialState;\n\n _this.resetErrorBoundary = function () {\n var _this$props;\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n _this.props.onReset == null ? void 0 : (_this$props = _this.props).onReset.apply(_this$props, args);\n\n _this.reset();\n };\n\n return _this;\n }\n\n ErrorBoundary.getDerivedStateFromError = function getDerivedStateFromError(error) {\n return {\n error: error\n };\n };\n\n var _proto = ErrorBoundary.prototype;\n\n _proto.reset = function reset() {\n this.setState(initialState);\n };\n\n _proto.componentDidCatch = function componentDidCatch(error, info) {\n var _this$props$onError, _this$props2;\n\n (_this$props$onError = (_this$props2 = this.props).onError) == null ? void 0 : _this$props$onError.call(_this$props2, error, info);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n var error = this.state.error;\n var resetKeys = this.props.resetKeys; // There's an edge case where if the thing that triggered the error\n // happens to *also* be in the resetKeys array, we'd end up resetting\n // the error boundary immediately. This would likely trigger a second\n // error to be thrown.\n // So we make sure that we don't check the resetKeys on the first call\n // of cDU after the error is set\n\n if (error !== null && prevState.error !== null && changedArray(prevProps.resetKeys, resetKeys)) {\n var _this$props$onResetKe, _this$props3;\n\n (_this$props$onResetKe = (_this$props3 = this.props).onResetKeysChange) == null ? void 0 : _this$props$onResetKe.call(_this$props3, prevProps.resetKeys, resetKeys);\n this.reset();\n }\n };\n\n _proto.render = function render() {\n var error = this.state.error;\n var _this$props4 = this.props,\n fallbackRender = _this$props4.fallbackRender,\n FallbackComponent = _this$props4.FallbackComponent,\n fallback = _this$props4.fallback;\n\n if (error !== null) {\n var _props = {\n error: error,\n resetErrorBoundary: this.resetErrorBoundary\n };\n\n if ( /*#__PURE__*/React.isValidElement(fallback)) {\n return fallback;\n } else if (typeof fallbackRender === 'function') {\n return fallbackRender(_props);\n } else if (FallbackComponent) {\n return /*#__PURE__*/React.createElement(FallbackComponent, _props);\n } else {\n throw new Error('react-error-boundary requires either a fallback, fallbackRender, or FallbackComponent prop');\n }\n }\n\n return this.props.children;\n };\n\n return ErrorBoundary;\n}(React.Component);\n\nfunction withErrorBoundary(Component, errorBoundaryProps) {\n var Wrapped = function Wrapped(props) {\n return /*#__PURE__*/React.createElement(ErrorBoundary, errorBoundaryProps, /*#__PURE__*/React.createElement(Component, props));\n }; // Format for display in DevTools\n\n\n var name = Component.displayName || Component.name || 'Unknown';\n Wrapped.displayName = \"withErrorBoundary(\" + name + \")\";\n return Wrapped;\n}\n\nfunction useErrorHandler(givenError) {\n var _React$useState = React.useState(null),\n error = _React$useState[0],\n setError = _React$useState[1];\n\n if (givenError != null) throw givenError;\n if (error != null) throw error;\n return setError;\n}\n/*\neslint\n @typescript-eslint/sort-type-union-intersection-members: \"off\",\n @typescript-eslint/no-throw-literal: \"off\",\n @typescript-eslint/prefer-nullish-coalescing: \"off\"\n*/\n\nexport { ErrorBoundary, useErrorHandler, withErrorBoundary };\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ReactModal from 'react-modal';\n\nimport './Modal.css';\n\nimport { Typography, Icon } from '../';\nimport { useModal } from '../../contextProviders';\n\nif (typeof document !== 'undefined') {\n ReactModal.setAppElement(document.getElementById('root'));\n}\n\nconst Modal = ({\n closeButton,\n shouldCloseOnEsc,\n isOpen,\n title,\n onClose,\n children,\n}) => {\n const { hide } = useModal();\n\n const handleClose = () => {\n hide();\n };\n\n const renderHeader = () => {\n return (\n title && (\n
\n \n {title}\n \n {closeButton && (\n \n )}\n
\n )\n );\n };\n\n return (\n \n {renderHeader()}\n
\n {children}\n
\n \n );\n};\n\nModal.defaultProps = {\n shouldCloseOnEsc: true,\n};\n\nModal.propTypes = {\n closeButton: PropTypes.bool,\n shouldCloseOnEsc: PropTypes.bool,\n isOpen: PropTypes.bool,\n title: PropTypes.string,\n onClose: PropTypes.func,\n /** The modal's content */\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node,\n ]).isRequired,\n};\n\nexport default Modal;\n","import Modal from './Modal';\nexport default Modal;\n","import React, { useState } from 'react';\nimport { ErrorBoundary as ReactErrorBoundary } from 'react-error-boundary';\nimport { Icon, IconButton } from '@ohif/ui';\nimport PropTypes from 'prop-types';\nimport Modal from '../Modal';\n\nconst isProduction = process.env.NODE_ENV === 'production';\n\nconst DefaultFallback = ({\n error,\n context,\n resetErrorBoundary,\n fallbackRoute,\n}) => {\n const [showDetails, setShowDetails] = useState(false);\n const title = `Something went wrong${!isProduction && ` in ${context}`}.`;\n const subtitle = `Sorry, something went wrong there. Try again.`;\n return (\n
\n

{title}

\n

{subtitle}

\n {!isProduction && (\n
\n

Context: {context}

\n

Error Message: {error.message}

\n\n setShowDetails(!showDetails)}\n >\n \n
{'Stack Trace'}
\n \n
\n \n\n {showDetails && (\n

Stack: {error.stack}

\n )}\n
\n )}\n
\n );\n};\n\nconst noop = () => {};\n\nDefaultFallback.propTypes = {\n error: PropTypes.object.isRequired,\n resetErrorBoundary: PropTypes.func,\n componentStack: PropTypes.string,\n};\n\nDefaultFallback.defaultProps = {\n resetErrorBoundary: noop,\n};\n\nconst ErrorBoundary = ({\n context,\n onReset,\n onError,\n fallbackComponent: FallbackComponent,\n children,\n fallbackRoute,\n isPage,\n}) => {\n const [isOpen, setIsOpen] = useState(true);\n\n const onErrorHandler = (error, componentStack) => {\n console.error(`${context} Error Boundary`, error, componentStack, context);\n onError(error, componentStack, context);\n };\n\n const onResetHandler = (...args) => onReset(...args);\n\n const withModal = Component => props => (\n {\n setIsOpen(false);\n if (fallbackRoute && typeof window !== 'undefined') {\n window.location = fallbackRoute;\n }\n }}\n >\n \n \n );\n\n const Fallback = isPage ? FallbackComponent : withModal(FallbackComponent);\n\n return (\n (\n \n )}\n onReset={onResetHandler}\n onError={onErrorHandler}\n >\n {children}\n \n );\n};\n\nErrorBoundary.propTypes = {\n context: PropTypes.string,\n onReset: PropTypes.func,\n onError: PropTypes.func,\n fallbackComponent: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n children: PropTypes.node.isRequired,\n fallbackRoute: PropTypes.string,\n};\n\nErrorBoundary.defaultProps = {\n context: 'OHIF',\n onReset: noop,\n onError: noop,\n fallbackComponent: DefaultFallback,\n fallbackRoute: null,\n};\n\nexport default ErrorBoundary;\n","import ErrorBoundary from './ErrorBoundary';\nexport default ErrorBoundary;\n","import React, { useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\nconst baseClasses =\n 'text-center items-center justify-center transition duration-300 ease-in-out outline-none font-bold focus:outline-none';\n\nconst roundedClasses = {\n none: '',\n small: 'rounded',\n medium: 'rounded-md',\n large: 'rounded-lg',\n full: 'rounded-full',\n};\n\nconst disabledClasses = {\n true: 'cursor-not-allowed',\n false: '',\n};\n\nconst variantClasses = {\n text: {\n default:\n 'text-white hover:bg-primary-light hover:text-black active:opacity-80 focus:bg-primary-light focus:text-black',\n primary:\n 'text-primary-main hover:bg-primary-main hover:text-white active:opacity-80 focus:bg-primary-main focus:text-white',\n secondary:\n 'text-secondary-light hover:bg-secondary-light hover:text-white active:opacity-80 focus:bg-secondary-light focus:text-white',\n white:\n 'text-white hover:bg-white hover:text-black active:opacity-80 focus:bg-white focus:text-black',\n black:\n 'text-black hover:bg-black hover:text-white focus:bg-black focus:text-white active:opacity-80',\n },\n outlined: {\n default:\n 'border bg-trasparent border-primary-light text-white hover:opacity-80 active:opacity-100 focus:opacity-80',\n primary:\n 'border bg-transparent border-primary-main text-primary-main hover:opacity-80 active:opacity-100 focus:opacity-80',\n secondary:\n 'border bg-transparent border-secondary-light text-secondary-light hover:opacity-80 active:opacity-100 focus:opacity-80',\n white:\n 'border bg-transparent border-white text-white hover:opacity-80 active:opacity-100 focus:opacity-80',\n black:\n 'border bg-black border-primary-main text-white hover:bg-primary-main focus:bg-primary-main hover:border-black focus:border-black',\n },\n contained: {\n default:\n 'bg-primary-light text-black hover:opacity-80 active:opacity-100 focus:opacity-80',\n primary:\n 'bg-primary-main text-white hover:opacity-80 active:opacity-100 focus:opacity-80',\n secondary:\n 'bg-secondary-light text-white hover:opacity-80 active:opacity-100 focus:opacity-80',\n white:\n 'bg-white text-black hover:opacity-80 active:opacity-100 focus:opacity-80',\n black:\n 'bg-black text-white hover:opacity-80 active:opacity-100 focus:opacity-80',\n },\n};\n\nconst sizeClasses = {\n small: 'py-2 px-2 text-base',\n medium: 'py-3 px-3 text-lg',\n large: 'py-4 px-4 text-xl',\n initial: '',\n toolbar: 'text-lg',\n};\n\nconst iconSizeClasses = {\n small: 'w-4 h-4',\n medium: 'w-5 h-5',\n large: 'w-6 h-6',\n toolbar: 'w-5 h-5',\n};\n\nconst fullWidthClasses = {\n true: 'flex w-full',\n false: 'inline-flex',\n};\n\nconst IconButton = ({\n children,\n variant,\n color,\n size,\n rounded,\n disabled,\n type,\n fullWidth,\n onClick,\n className,\n name,\n id,\n ...rest\n}) => {\n const buttonElement = useRef(null);\n\n const handleOnClick = e => {\n buttonElement.current.blur();\n onClick(e);\n };\n return (\n \n {React.cloneElement(children, {\n className: classnames(iconSizeClasses[size], 'fill-current'),\n })}\n \n );\n};\n\nIconButton.defaultProps = {\n onClick: () => {},\n color: 'default',\n disabled: false,\n fullWidth: false,\n rounded: 'medium',\n size: 'medium',\n type: 'button',\n variant: 'contained',\n};\n\nIconButton.propTypes = {\n children: PropTypes.node.isRequired,\n size: PropTypes.oneOf(['small', 'medium', 'large', 'initial', 'toolbar']),\n rounded: PropTypes.oneOf(['none', 'small', 'medium', 'large', 'full']),\n variant: PropTypes.oneOf(['text', 'outlined', 'contained']),\n color: PropTypes.oneOf([\n 'default',\n 'primary',\n 'secondary',\n 'white',\n 'black',\n 'inherit',\n ]),\n fullWidth: PropTypes.bool,\n disabled: PropTypes.bool,\n type: PropTypes.string,\n id: PropTypes.string,\n className: PropTypes.node,\n onClick: PropTypes.func,\n};\n\nexport default IconButton;\n","import IconButton from './IconButton';\nexport default IconButton;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\nconst Label = ({ children, className, text, ...rest }) => {\n const baseClasses = '';\n\n return (\n \n );\n};\n\nLabel.propTypes = {\n children: PropTypes.node,\n};\n\nexport default Label;\n","import Label from './Label';\nexport default Label;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Label from '../Label';\nimport classnames from 'classnames';\n\nconst baseInputClasses =\n 'shadow transition duration-300 appearance-none border border-primary-main hover:border-gray-500 focus:border-gray-500 focus:outline-none rounded w-full py-2 px-3 text-sm text-white leading-tight focus:outline-none';\n\nconst transparentClasses = {\n true: 'bg-transparent',\n false: 'bg-black',\n};\n\nconst Input = ({\n id,\n label,\n containerClassName = '',\n labelClassName = '',\n className = '',\n transparent = false,\n type = 'text',\n value,\n onChange,\n onFocus,\n autoFocus,\n onKeyPress,\n onKeyDown,\n readOnly,\n disabled,\n ...otherProps\n}) => {\n return (\n
\n \n \n
\n );\n};\n\nInput.propTypes = {\n label: PropTypes.string,\n containerClassName: PropTypes.string,\n labelClassName: PropTypes.string,\n className: PropTypes.string,\n transparent: PropTypes.bool,\n type: PropTypes.string,\n value: PropTypes.any,\n onChange: PropTypes.func,\n onFocus: PropTypes.func,\n autoFocus: PropTypes.bool,\n readOnly: PropTypes.bool,\n onKeyPress: PropTypes.func,\n onKeyDown: PropTypes.func,\n disabled: PropTypes.bool\n};\n\nexport default Input;\n","import Input from './Input';\nexport default Input;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { DateRange, InputLabelWrapper } from '../';\n\nconst InputDateRange = ({\n id,\n label,\n isSortable,\n sortDirection,\n onLabelClick,\n value,\n onChange,\n}) => {\n const { startDate, endDate } = value;\n\n const onClickHandler = (event) => {\n event.preventDefault();\n onLabelClick(event);\n };\n\n return (\n \n
\n \n
\n \n );\n};\n\nconst noop = () => { };\n\nInputDateRange.defaultProps = {\n value: {},\n onLabelClick: noop\n};\n\nInputDateRange.propTypes = {\n id: PropTypes.string,\n label: PropTypes.string.isRequired,\n isSortable: PropTypes.bool.isRequired,\n sortDirection: PropTypes.oneOf(['ascending', 'descending', 'none'])\n .isRequired,\n onLabelClick: PropTypes.func.isRequired,\n value: PropTypes.shape({\n /** YYYYMMDD (19921022) */\n startDate: PropTypes.string,\n /** YYYYMMDD (19921022) */\n endDate: PropTypes.string,\n }),\n onChange: PropTypes.func.isRequired,\n};\n\nexport default InputDateRange;\n","import InputDateRange from './InputDateRange';\nexport default InputDateRange;\n","// This is really annoying, but we can't use string concatenation to produce names\n// or the purger will purge stuff we need. This is a lazy workaground.\n// The alternative would be to use the safelist, but then we would have to remember\n// which components which entry in the safelist are used for.\n// https://tailwindcss.com/docs/optimizing-for-production\nexport default function getGridWidthClass(gridCol) {\n const widthClasses = {\n 1: 'w-1/24',\n 2: 'w-2/24',\n 3: 'w-3/24',\n 4: 'w-4/24',\n 5: 'w-5/24',\n 6: 'w-6/24',\n 7: 'w-7/24',\n 8: 'w-8/24',\n 9: 'w-9/24',\n 10: 'w-10/24',\n 11: 'w-11/24',\n 12: 'w-12/24',\n 13: 'w-13/24',\n 14: 'w-14/24',\n 15: 'w-15/24',\n 16: 'w-16/24',\n 17: 'w-17/24',\n 18: 'w-18/24',\n 19: 'w-19/24',\n 20: 'w-20/24',\n 21: 'w-21/24',\n 22: 'w-22/24',\n 23: 'w-23/24',\n 24: 'w-24/24',\n };\n\n return widthClasses[gridCol];\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport getGridWidthClass from '../../utils/getGridWidthClass'\n\nimport {\n InputText,\n InputDateRange,\n InputMultiSelect,\n InputLabelWrapper,\n} from '../';\n\nconst InputGroup = ({\n inputMeta,\n values,\n onValuesChange,\n sorting,\n onSortingChange,\n isSortingEnabled,\n}) => {\n const { sortBy, sortDirection } = sorting;\n\n const handleFilterLabelClick = name => {\n if (isSortingEnabled) {\n let _sortDirection = 'descending';\n if (sortBy === name) {\n if (sortDirection === 'ascending') {\n _sortDirection = 'descending';\n } else if (sortDirection === 'descending') {\n _sortDirection = 'ascending';\n }\n }\n\n onSortingChange({\n sortBy: _sortDirection !== 'none' ? name : '',\n sortDirection: _sortDirection,\n });\n }\n };\n\n const renderFieldInputComponent = ({\n name,\n displayName,\n inputProps,\n isSortable,\n inputType,\n }) => {\n const _isSortable = isSortable && isSortingEnabled;\n const _sortDirection = sortBy !== name ? 'none' : sortDirection;\n\n const onLabelClick = () => {\n handleFilterLabelClick(name);\n };\n\n const handleFieldChange = newValue => {\n onValuesChange({\n ...values,\n [name]: newValue,\n });\n };\n\n const handleDateRangeFieldChange = ({ startDate, endDate }) => {\n onValuesChange({\n ...values,\n [name]: {\n startDate: startDate,\n endDate: endDate,\n },\n });\n };\n\n switch (inputType) {\n case 'Text':\n return (\n \n );\n case 'MultiSelect':\n return (\n \n );\n case 'DateRange':\n return (\n \n );\n case 'None':\n return (\n \n );\n default:\n break;\n }\n };\n return (\n
\n
\n {inputMeta.map(inputMeta => {\n return (\n \n {renderFieldInputComponent(inputMeta)}\n
\n );\n })}\n
\n \n );\n};\n\nInputGroup.propTypes = {\n inputMeta: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string.isRequired,\n displayName: PropTypes.string.isRequired,\n inputType: PropTypes.oneOf(['Text', 'MultiSelect', 'DateRange', 'None'])\n .isRequired,\n isSortable: PropTypes.bool.isRequired,\n gridCol: PropTypes.oneOf([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])\n .isRequired,\n option: PropTypes.arrayOf(\n PropTypes.shape({\n value: PropTypes.string,\n label: PropTypes.string,\n })\n ),\n })\n ).isRequired,\n values: PropTypes.object.isRequired,\n onValuesChange: PropTypes.func.isRequired,\n sorting: PropTypes.shape({\n sortBy: PropTypes.string,\n sortDirection: PropTypes.oneOf(['ascending', 'descending', 'none']),\n }).isRequired,\n onSortingChange: PropTypes.func.isRequired,\n isSortingEnabled: PropTypes.bool.isRequired,\n};\n\nexport default InputGroup;\n","import InputGroup from './InputGroup';\nexport default InputGroup;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { useTranslation } from 'react-i18next';\n\nimport { Icon } from '../';\n\nconst baseLabelClassName =\n 'flex flex-col flex-1 text-white text-lg pl-1 select-none';\nconst spanClassName = 'flex flex-row items-center cursor-pointer focus:outline-none';\nconst sortIconMap = {\n descending: 'sorting-active-up',\n ascending: 'sorting-active-down',\n none: 'sorting',\n};\n\nconst InputLabelWrapper = ({\n label,\n isSortable,\n sortDirection,\n onLabelClick,\n className,\n children,\n}) => {\n const { t } = useTranslation(\"StudyList\")\n\n const onClickHandler = e => {\n if (!isSortable) {\n return;\n }\n\n onLabelClick(e);\n };\n\n return (\n
\n {children}\n \n );\n};\n\nInputLabelWrapper.defaultProps = {\n className: '',\n};\n\nInputLabelWrapper.propTypes = {\n label: PropTypes.string.isRequired,\n isSortable: PropTypes.bool.isRequired,\n sortDirection: PropTypes.oneOf(['ascending', 'descending', 'none'])\n .isRequired,\n onLabelClick: PropTypes.func.isRequired,\n className: PropTypes.string,\n children: PropTypes.node,\n};\n\nexport default InputLabelWrapper;\n","import InputLabelWrapper from './InputLabelWrapper';\nexport default InputLabelWrapper;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { Select, InputLabelWrapper } from '../';\n\nconst InputMultiSelect = ({\n id,\n label,\n isSortable,\n sortDirection,\n onLabelClick,\n value,\n placeholder,\n options,\n onChange,\n}) => {\n return (\n \n {\n switch (action) {\n case 'select-option':\n case 'remove-value':\n case 'deselect-option':\n case 'clear':\n onChange(selectedOptions);\n break;\n default:\n break;\n }\n }}\n />\n \n );\n};\n\nInputMultiSelect.defaultProps = {\n value: [],\n placeholder: '',\n options: [],\n};\n\nInputMultiSelect.propTypes = {\n id: PropTypes.string,\n label: PropTypes.string.isRequired,\n isSortable: PropTypes.bool.isRequired,\n sortDirection: PropTypes.oneOf(['ascending', 'descending', 'none'])\n .isRequired,\n onLabelClick: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n placeholder: PropTypes.string,\n /** Array of options to list as options */\n options: PropTypes.arrayOf(\n PropTypes.shape({\n value: PropTypes.string,\n label: PropTypes.string,\n })\n ),\n /** Array of string values that exist in our list of options */\n value: PropTypes.arrayOf(PropTypes.string),\n};\n\nexport default InputMultiSelect;\n","import InputMultiSelect from './InputMultiSelect';\nexport default InputMultiSelect;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { Input, InputLabelWrapper } from '../';\n\nconst InputText = ({\n id,\n label,\n isSortable,\n sortDirection,\n onLabelClick,\n value,\n onChange,\n}) => {\n return (\n \n {\n onChange(event.target.value);\n }}\n />\n \n );\n};\n\nInputText.defaultProps = {\n value: '',\n isSortable: false,\n onLabelClick: () => {},\n sortDirection: 'none',\n};\n\nInputText.propTypes = {\n id: PropTypes.string,\n label: PropTypes.string.isRequired,\n isSortable: PropTypes.bool,\n sortDirection: PropTypes.oneOf(['ascending', 'descending', 'none']),\n onLabelClick: PropTypes.func,\n value: PropTypes.any,\n onChange: PropTypes.func.isRequired,\n};\n\nexport default InputText;\n","import InputText from './InputText';\nexport default InputText;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\n\nfunction LayoutSelector({ onSelection, rows, columns}) {\n const [hoveredIndex, setHoveredIndex] = useState();\n const hoverX = hoveredIndex % columns;\n const hoverY = Math.floor(hoveredIndex / columns);\n const isHovered = index => {\n const x = index % columns;\n const y = Math.floor(index / columns);\n\n return x <= hoverX && y <= hoverY;\n };\n\n const gridSize = '20px '\n return (\n \n {Array.apply(null, Array(rows*columns)).map(function (_, i) {return i;}).map(index => (\n {\n const x = index % columns;\n const y = Math.floor(index / columns);\n\n onSelection({\n numRows: y + 1,\n numCols: x + 1,\n });\n }}\n onMouseEnter={() => setHoveredIndex(index)}\n onMouseLeave={() => setHoveredIndex(-1)}\n >\n ))}\n \n );\n}\n\nLayoutSelector.defaultProps = {\n onSelection: () => {},\n columns: 3,\n rows: 3\n};\n\nLayoutSelector.propTypes = {\n onSelection: PropTypes.func.isRequired,\n columns: PropTypes.number.isRequired,\n rows: PropTypes.number.isRequired,\n};\n\nexport default LayoutSelector;\n","import LayoutSelector from './LayoutSelector';\nexport default LayoutSelector;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { Icon } from '../';\n\nconst MeasurementItem = ({\n uid,\n index,\n label,\n displayText,\n isActive,\n onClick,\n onEdit,\n}) => {\n const [isHovering, setIsHovering] = useState(false);\n\n const onEditHandler = event => {\n event.stopPropagation();\n onEdit({ uid, isActive, event });\n };\n\n const onClickHandler = event => onClick({ uid, isActive, event });\n\n const onMouseEnter = () => setIsHovering(true);\n const onMouseLeave = () => setIsHovering(false);\n\n return (\n \n \n {index}\n \n
\n {label}\n {displayText.map((line, i) => (\n \n ))}\n \n
\n \n );\n};\n\nMeasurementItem.propTypes = {\n uid: PropTypes.oneOfType([\n PropTypes.number.isRequired,\n PropTypes.string.isRequired,\n ]),\n index: PropTypes.number.isRequired,\n label: PropTypes.string,\n displayText: PropTypes.array.isRequired,\n isActive: PropTypes.bool,\n onClick: PropTypes.func,\n onEdit: PropTypes.func,\n};\n\nMeasurementItem.defaultProps = {\n isActive: false,\n};\n\nexport default MeasurementItem;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\n\nimport MeasurementItem from './MeasurementItem';\n\nconst MeasurementTable = ({ data, title, onClick, onEdit }) => {\n const { t } = useTranslation('MeasurementTable');\n const amount = data.length;\n\n return (\n
\n
\n \n {t(title)}\n \n {amount}\n
\n
\n {data.length !== 0 &&\n data.map((measurementItem, index) => (\n \n ))}\n {data.length === 0 && (\n
\n
\n
\n \n {t('No tracked measurements')}\n \n
\n
\n )}\n
\n
\n );\n};\n\nMeasurementTable.defaultProps = {\n data: [],\n onClick: () => {},\n onEdit: () => {},\n};\n\nMeasurementTable.propTypes = {\n title: PropTypes.string.isRequired,\n data: PropTypes.arrayOf(\n PropTypes.shape({\n uid: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n label: PropTypes.string,\n displayText: PropTypes.arrayOf(PropTypes.string),\n isActive: PropTypes.bool,\n })\n ),\n onClick: PropTypes.func,\n onEdit: PropTypes.func,\n};\n\nexport default MeasurementTable;\n","import MeasurementTable from './MeasurementTable';\n\nexport default MeasurementTable;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\nconst stickyClasses = 'sticky top-0';\nconst notStickyClasses = 'relative';\n\nconst NavBar = ({ className, children, isSticky }) => {\n return (\n \n {children}\n \n );\n};\n\nNavBar.propTypes = {\n className: PropTypes.string,\n children: PropTypes.node,\n isSticky: PropTypes.bool,\n};\n\nexport default NavBar;\n","import NavBar from './NavBar';\nexport default NavBar;\n","import React, { useEffect, useRef } from 'react';\nimport classnames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { Button, Icon } from '../';\n\nconst Notification = ({\n id,\n type,\n message,\n actions,\n onSubmit,\n onOutsideClick,\n}) => {\n const notificationRef = useRef(null);\n\n useEffect(() => {\n const notificationElement = notificationRef.current;\n const handleClick = function(event) {\n const isClickInside = notificationElement.contains(event.target);\n\n if (!isClickInside) {\n onOutsideClick();\n }\n };\n\n document.addEventListener('mousedown', handleClick);\n\n return () => {\n document.removeEventListener('mousedown', handleClick);\n };\n }, [onOutsideClick]);\n\n const iconsByType = {\n error: {\n icon: 'info',\n color: 'text-red-700',\n },\n warning: {\n icon: 'notificationwarning-diamond',\n color: 'text-yellow-500',\n },\n info: {\n icon: 'info',\n color: 'text-primary-main',\n },\n success: {\n icon: 'info',\n color: 'text-green-500',\n },\n };\n\n const getIconData = () => {\n return (\n iconsByType[type] || {\n icon: '',\n color: '',\n }\n );\n };\n\n const { icon, color } = getIconData();\n\n return (\n \n
\n \n {message}\n
\n
\n {actions.map((action, index) => {\n const isFirst = index === 0;\n const isPrimary = action.type === 'primary';\n\n return (\n {\n onSubmit(action.value);\n }}\n >\n {action.text}\n \n );\n })}\n
\n \n );\n};\n\nNotification.defaultProps = {\n type: 'info',\n onOutsideClick: () => {},\n};\n\nNotification.propTypes = {\n type: PropTypes.oneOf(['error', 'warning', 'info', 'success']),\n message: PropTypes.string.isRequired,\n actions: PropTypes.arrayOf(\n PropTypes.shape({\n text: PropTypes.string.isRequired,\n value: PropTypes.any.isRequired,\n type: PropTypes.oneOf(['primary', 'secondary', 'cancel']).isRequired,\n })\n ).isRequired,\n onSubmit: PropTypes.func.isRequired,\n /** Can be used as a callback to dismiss the notification for clicks that occur outside of it */\n onOutsideClick: PropTypes.func,\n};\n\nexport default Notification;\n","import Notification from './Notification';\nexport default Notification;\n","var safeIsNaN = Number.isNaN ||\n function ponyfill(value) {\n return typeof value === 'number' && value !== value;\n };\nfunction isEqual(first, second) {\n if (first === second) {\n return true;\n }\n if (safeIsNaN(first) && safeIsNaN(second)) {\n return true;\n }\n return false;\n}\nfunction areInputsEqual(newInputs, lastInputs) {\n if (newInputs.length !== lastInputs.length) {\n return false;\n }\n for (var i = 0; i < newInputs.length; i++) {\n if (!isEqual(newInputs[i], lastInputs[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n if (isEqual === void 0) { isEqual = areInputsEqual; }\n var lastThis;\n var lastArgs = [];\n var lastResult;\n var calledOnce = false;\n function memoized() {\n var newArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n newArgs[_i] = arguments[_i];\n }\n if (calledOnce && lastThis === this && isEqual(newArgs, lastArgs)) {\n return lastResult;\n }\n lastResult = resultFn.apply(this, newArgs);\n calledOnce = true;\n lastThis = this;\n lastArgs = newArgs;\n return lastResult;\n }\n return memoized;\n}\n\nexport default memoizeOne;\n","/*\n\nBased off glamor's StyleSheet, thanks Sunil ❤️\n\nhigh performance StyleSheet for css-in-js systems\n\n- uses multiple style tags behind the scenes for millions of rules\n- uses `insertRule` for appending in production for *much* faster performance\n\n// usage\n\nimport { StyleSheet } from '@emotion/sheet'\n\nlet styleSheet = new StyleSheet({ key: '', container: document.head })\n\nstyleSheet.insert('#box { border: 1px solid red; }')\n- appends a css rule into the stylesheet\n\nstyleSheet.flush()\n- empties the stylesheet of all its contents\n\n*/\n// $FlowFixMe\nfunction sheetForTag(tag) {\n if (tag.sheet) {\n // $FlowFixMe\n return tag.sheet;\n } // this weirdness brought to you by firefox\n\n /* istanbul ignore next */\n\n\n for (var i = 0; i < document.styleSheets.length; i++) {\n if (document.styleSheets[i].ownerNode === tag) {\n // $FlowFixMe\n return document.styleSheets[i];\n }\n }\n}\n\nfunction createStyleElement(options) {\n var tag = document.createElement('style');\n tag.setAttribute('data-emotion', options.key);\n\n if (options.nonce !== undefined) {\n tag.setAttribute('nonce', options.nonce);\n }\n\n tag.appendChild(document.createTextNode(''));\n return tag;\n}\n\nvar StyleSheet =\n/*#__PURE__*/\nfunction () {\n function StyleSheet(options) {\n this.isSpeedy = options.speedy === undefined ? process.env.NODE_ENV === 'production' : options.speedy;\n this.tags = [];\n this.ctr = 0;\n this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets\n\n this.key = options.key;\n this.container = options.container;\n this.before = null;\n }\n\n var _proto = StyleSheet.prototype;\n\n _proto.insert = function insert(rule) {\n // the max length is how many rules we have per style tag, it's 65000 in speedy mode\n // it's 1 in dev because we insert source maps that map a single rule to a location\n // and you can only have one source map per style tag\n if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {\n var _tag = createStyleElement(this);\n\n var before;\n\n if (this.tags.length === 0) {\n before = this.before;\n } else {\n before = this.tags[this.tags.length - 1].nextSibling;\n }\n\n this.container.insertBefore(_tag, before);\n this.tags.push(_tag);\n }\n\n var tag = this.tags[this.tags.length - 1];\n\n if (this.isSpeedy) {\n var sheet = sheetForTag(tag);\n\n try {\n // this is a really hot path\n // we check the second character first because having \"i\"\n // as the second character will happen less often than\n // having \"@\" as the first character\n var isImportRule = rule.charCodeAt(1) === 105 && rule.charCodeAt(0) === 64; // this is the ultrafast version, works across browsers\n // the big drawback is that the css won't be editable in devtools\n\n sheet.insertRule(rule, // we need to insert @import rules before anything else\n // otherwise there will be an error\n // technically this means that the @import rules will\n // _usually_(not always since there could be multiple style tags)\n // be the first ones in prod and generally later in dev\n // this shouldn't really matter in the real world though\n // @import is generally only used for font faces from google fonts and etc.\n // so while this could be technically correct then it would be slower and larger\n // for a tiny bit of correctness that won't matter in the real world\n isImportRule ? 0 : sheet.cssRules.length);\n } catch (e) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\"There was a problem inserting the following rule: \\\"\" + rule + \"\\\"\", e);\n }\n }\n } else {\n tag.appendChild(document.createTextNode(rule));\n }\n\n this.ctr++;\n };\n\n _proto.flush = function flush() {\n // $FlowFixMe\n this.tags.forEach(function (tag) {\n return tag.parentNode.removeChild(tag);\n });\n this.tags = [];\n this.ctr = 0;\n };\n\n return StyleSheet;\n}();\n\nexport { StyleSheet };\n","function stylis_min (W) {\n function M(d, c, e, h, a) {\n for (var m = 0, b = 0, v = 0, n = 0, q, g, x = 0, K = 0, k, u = k = q = 0, l = 0, r = 0, I = 0, t = 0, B = e.length, J = B - 1, y, f = '', p = '', F = '', G = '', C; l < B;) {\n g = e.charCodeAt(l);\n l === J && 0 !== b + n + v + m && (0 !== b && (g = 47 === b ? 10 : 47), n = v = m = 0, B++, J++);\n\n if (0 === b + n + v + m) {\n if (l === J && (0 < r && (f = f.replace(N, '')), 0 < f.trim().length)) {\n switch (g) {\n case 32:\n case 9:\n case 59:\n case 13:\n case 10:\n break;\n\n default:\n f += e.charAt(l);\n }\n\n g = 59;\n }\n\n switch (g) {\n case 123:\n f = f.trim();\n q = f.charCodeAt(0);\n k = 1;\n\n for (t = ++l; l < B;) {\n switch (g = e.charCodeAt(l)) {\n case 123:\n k++;\n break;\n\n case 125:\n k--;\n break;\n\n case 47:\n switch (g = e.charCodeAt(l + 1)) {\n case 42:\n case 47:\n a: {\n for (u = l + 1; u < J; ++u) {\n switch (e.charCodeAt(u)) {\n case 47:\n if (42 === g && 42 === e.charCodeAt(u - 1) && l + 2 !== u) {\n l = u + 1;\n break a;\n }\n\n break;\n\n case 10:\n if (47 === g) {\n l = u + 1;\n break a;\n }\n\n }\n }\n\n l = u;\n }\n\n }\n\n break;\n\n case 91:\n g++;\n\n case 40:\n g++;\n\n case 34:\n case 39:\n for (; l++ < J && e.charCodeAt(l) !== g;) {\n }\n\n }\n\n if (0 === k) break;\n l++;\n }\n\n k = e.substring(t, l);\n 0 === q && (q = (f = f.replace(ca, '').trim()).charCodeAt(0));\n\n switch (q) {\n case 64:\n 0 < r && (f = f.replace(N, ''));\n g = f.charCodeAt(1);\n\n switch (g) {\n case 100:\n case 109:\n case 115:\n case 45:\n r = c;\n break;\n\n default:\n r = O;\n }\n\n k = M(c, r, k, g, a + 1);\n t = k.length;\n 0 < A && (r = X(O, f, I), C = H(3, k, r, c, D, z, t, g, a, h), f = r.join(''), void 0 !== C && 0 === (t = (k = C.trim()).length) && (g = 0, k = ''));\n if (0 < t) switch (g) {\n case 115:\n f = f.replace(da, ea);\n\n case 100:\n case 109:\n case 45:\n k = f + '{' + k + '}';\n break;\n\n case 107:\n f = f.replace(fa, '$1 $2');\n k = f + '{' + k + '}';\n k = 1 === w || 2 === w && L('@' + k, 3) ? '@-webkit-' + k + '@' + k : '@' + k;\n break;\n\n default:\n k = f + k, 112 === h && (k = (p += k, ''));\n } else k = '';\n break;\n\n default:\n k = M(c, X(c, f, I), k, h, a + 1);\n }\n\n F += k;\n k = I = r = u = q = 0;\n f = '';\n g = e.charCodeAt(++l);\n break;\n\n case 125:\n case 59:\n f = (0 < r ? f.replace(N, '') : f).trim();\n if (1 < (t = f.length)) switch (0 === u && (q = f.charCodeAt(0), 45 === q || 96 < q && 123 > q) && (t = (f = f.replace(' ', ':')).length), 0 < A && void 0 !== (C = H(1, f, c, d, D, z, p.length, h, a, h)) && 0 === (t = (f = C.trim()).length) && (f = '\\x00\\x00'), q = f.charCodeAt(0), g = f.charCodeAt(1), q) {\n case 0:\n break;\n\n case 64:\n if (105 === g || 99 === g) {\n G += f + e.charAt(l);\n break;\n }\n\n default:\n 58 !== f.charCodeAt(t - 1) && (p += P(f, q, g, f.charCodeAt(2)));\n }\n I = r = u = q = 0;\n f = '';\n g = e.charCodeAt(++l);\n }\n }\n\n switch (g) {\n case 13:\n case 10:\n 47 === b ? b = 0 : 0 === 1 + q && 107 !== h && 0 < f.length && (r = 1, f += '\\x00');\n 0 < A * Y && H(0, f, c, d, D, z, p.length, h, a, h);\n z = 1;\n D++;\n break;\n\n case 59:\n case 125:\n if (0 === b + n + v + m) {\n z++;\n break;\n }\n\n default:\n z++;\n y = e.charAt(l);\n\n switch (g) {\n case 9:\n case 32:\n if (0 === n + m + b) switch (x) {\n case 44:\n case 58:\n case 9:\n case 32:\n y = '';\n break;\n\n default:\n 32 !== g && (y = ' ');\n }\n break;\n\n case 0:\n y = '\\\\0';\n break;\n\n case 12:\n y = '\\\\f';\n break;\n\n case 11:\n y = '\\\\v';\n break;\n\n case 38:\n 0 === n + b + m && (r = I = 1, y = '\\f' + y);\n break;\n\n case 108:\n if (0 === n + b + m + E && 0 < u) switch (l - u) {\n case 2:\n 112 === x && 58 === e.charCodeAt(l - 3) && (E = x);\n\n case 8:\n 111 === K && (E = K);\n }\n break;\n\n case 58:\n 0 === n + b + m && (u = l);\n break;\n\n case 44:\n 0 === b + v + n + m && (r = 1, y += '\\r');\n break;\n\n case 34:\n case 39:\n 0 === b && (n = n === g ? 0 : 0 === n ? g : n);\n break;\n\n case 91:\n 0 === n + b + v && m++;\n break;\n\n case 93:\n 0 === n + b + v && m--;\n break;\n\n case 41:\n 0 === n + b + m && v--;\n break;\n\n case 40:\n if (0 === n + b + m) {\n if (0 === q) switch (2 * x + 3 * K) {\n case 533:\n break;\n\n default:\n q = 1;\n }\n v++;\n }\n\n break;\n\n case 64:\n 0 === b + v + n + m + u + k && (k = 1);\n break;\n\n case 42:\n case 47:\n if (!(0 < n + m + v)) switch (b) {\n case 0:\n switch (2 * g + 3 * e.charCodeAt(l + 1)) {\n case 235:\n b = 47;\n break;\n\n case 220:\n t = l, b = 42;\n }\n\n break;\n\n case 42:\n 47 === g && 42 === x && t + 2 !== l && (33 === e.charCodeAt(t + 2) && (p += e.substring(t, l + 1)), y = '', b = 0);\n }\n }\n\n 0 === b && (f += y);\n }\n\n K = x;\n x = g;\n l++;\n }\n\n t = p.length;\n\n if (0 < t) {\n r = c;\n if (0 < A && (C = H(2, p, r, d, D, z, t, h, a, h), void 0 !== C && 0 === (p = C).length)) return G + p + F;\n p = r.join(',') + '{' + p + '}';\n\n if (0 !== w * E) {\n 2 !== w || L(p, 2) || (E = 0);\n\n switch (E) {\n case 111:\n p = p.replace(ha, ':-moz-$1') + p;\n break;\n\n case 112:\n p = p.replace(Q, '::-webkit-input-$1') + p.replace(Q, '::-moz-$1') + p.replace(Q, ':-ms-input-$1') + p;\n }\n\n E = 0;\n }\n }\n\n return G + p + F;\n }\n\n function X(d, c, e) {\n var h = c.trim().split(ia);\n c = h;\n var a = h.length,\n m = d.length;\n\n switch (m) {\n case 0:\n case 1:\n var b = 0;\n\n for (d = 0 === m ? '' : d[0] + ' '; b < a; ++b) {\n c[b] = Z(d, c[b], e).trim();\n }\n\n break;\n\n default:\n var v = b = 0;\n\n for (c = []; b < a; ++b) {\n for (var n = 0; n < m; ++n) {\n c[v++] = Z(d[n] + ' ', h[b], e).trim();\n }\n }\n\n }\n\n return c;\n }\n\n function Z(d, c, e) {\n var h = c.charCodeAt(0);\n 33 > h && (h = (c = c.trim()).charCodeAt(0));\n\n switch (h) {\n case 38:\n return c.replace(F, '$1' + d.trim());\n\n case 58:\n return d.trim() + c.replace(F, '$1' + d.trim());\n\n default:\n if (0 < 1 * e && 0 < c.indexOf('\\f')) return c.replace(F, (58 === d.charCodeAt(0) ? '' : '$1') + d.trim());\n }\n\n return d + c;\n }\n\n function P(d, c, e, h) {\n var a = d + ';',\n m = 2 * c + 3 * e + 4 * h;\n\n if (944 === m) {\n d = a.indexOf(':', 9) + 1;\n var b = a.substring(d, a.length - 1).trim();\n b = a.substring(0, d).trim() + b + ';';\n return 1 === w || 2 === w && L(b, 1) ? '-webkit-' + b + b : b;\n }\n\n if (0 === w || 2 === w && !L(a, 1)) return a;\n\n switch (m) {\n case 1015:\n return 97 === a.charCodeAt(10) ? '-webkit-' + a + a : a;\n\n case 951:\n return 116 === a.charCodeAt(3) ? '-webkit-' + a + a : a;\n\n case 963:\n return 110 === a.charCodeAt(5) ? '-webkit-' + a + a : a;\n\n case 1009:\n if (100 !== a.charCodeAt(4)) break;\n\n case 969:\n case 942:\n return '-webkit-' + a + a;\n\n case 978:\n return '-webkit-' + a + '-moz-' + a + a;\n\n case 1019:\n case 983:\n return '-webkit-' + a + '-moz-' + a + '-ms-' + a + a;\n\n case 883:\n if (45 === a.charCodeAt(8)) return '-webkit-' + a + a;\n if (0 < a.indexOf('image-set(', 11)) return a.replace(ja, '$1-webkit-$2') + a;\n break;\n\n case 932:\n if (45 === a.charCodeAt(4)) switch (a.charCodeAt(5)) {\n case 103:\n return '-webkit-box-' + a.replace('-grow', '') + '-webkit-' + a + '-ms-' + a.replace('grow', 'positive') + a;\n\n case 115:\n return '-webkit-' + a + '-ms-' + a.replace('shrink', 'negative') + a;\n\n case 98:\n return '-webkit-' + a + '-ms-' + a.replace('basis', 'preferred-size') + a;\n }\n return '-webkit-' + a + '-ms-' + a + a;\n\n case 964:\n return '-webkit-' + a + '-ms-flex-' + a + a;\n\n case 1023:\n if (99 !== a.charCodeAt(8)) break;\n b = a.substring(a.indexOf(':', 15)).replace('flex-', '').replace('space-between', 'justify');\n return '-webkit-box-pack' + b + '-webkit-' + a + '-ms-flex-pack' + b + a;\n\n case 1005:\n return ka.test(a) ? a.replace(aa, ':-webkit-') + a.replace(aa, ':-moz-') + a : a;\n\n case 1e3:\n b = a.substring(13).trim();\n c = b.indexOf('-') + 1;\n\n switch (b.charCodeAt(0) + b.charCodeAt(c)) {\n case 226:\n b = a.replace(G, 'tb');\n break;\n\n case 232:\n b = a.replace(G, 'tb-rl');\n break;\n\n case 220:\n b = a.replace(G, 'lr');\n break;\n\n default:\n return a;\n }\n\n return '-webkit-' + a + '-ms-' + b + a;\n\n case 1017:\n if (-1 === a.indexOf('sticky', 9)) break;\n\n case 975:\n c = (a = d).length - 10;\n b = (33 === a.charCodeAt(c) ? a.substring(0, c) : a).substring(d.indexOf(':', 7) + 1).trim();\n\n switch (m = b.charCodeAt(0) + (b.charCodeAt(7) | 0)) {\n case 203:\n if (111 > b.charCodeAt(8)) break;\n\n case 115:\n a = a.replace(b, '-webkit-' + b) + ';' + a;\n break;\n\n case 207:\n case 102:\n a = a.replace(b, '-webkit-' + (102 < m ? 'inline-' : '') + 'box') + ';' + a.replace(b, '-webkit-' + b) + ';' + a.replace(b, '-ms-' + b + 'box') + ';' + a;\n }\n\n return a + ';';\n\n case 938:\n if (45 === a.charCodeAt(5)) switch (a.charCodeAt(6)) {\n case 105:\n return b = a.replace('-items', ''), '-webkit-' + a + '-webkit-box-' + b + '-ms-flex-' + b + a;\n\n case 115:\n return '-webkit-' + a + '-ms-flex-item-' + a.replace(ba, '') + a;\n\n default:\n return '-webkit-' + a + '-ms-flex-line-pack' + a.replace('align-content', '').replace(ba, '') + a;\n }\n break;\n\n case 973:\n case 989:\n if (45 !== a.charCodeAt(3) || 122 === a.charCodeAt(4)) break;\n\n case 931:\n case 953:\n if (!0 === la.test(d)) return 115 === (b = d.substring(d.indexOf(':') + 1)).charCodeAt(0) ? P(d.replace('stretch', 'fill-available'), c, e, h).replace(':fill-available', ':stretch') : a.replace(b, '-webkit-' + b) + a.replace(b, '-moz-' + b.replace('fill-', '')) + a;\n break;\n\n case 962:\n if (a = '-webkit-' + a + (102 === a.charCodeAt(5) ? '-ms-' + a : '') + a, 211 === e + h && 105 === a.charCodeAt(13) && 0 < a.indexOf('transform', 10)) return a.substring(0, a.indexOf(';', 27) + 1).replace(ma, '$1-webkit-$2') + a;\n }\n\n return a;\n }\n\n function L(d, c) {\n var e = d.indexOf(1 === c ? ':' : '{'),\n h = d.substring(0, 3 !== c ? e : 10);\n e = d.substring(e + 1, d.length - 1);\n return R(2 !== c ? h : h.replace(na, '$1'), e, c);\n }\n\n function ea(d, c) {\n var e = P(c, c.charCodeAt(0), c.charCodeAt(1), c.charCodeAt(2));\n return e !== c + ';' ? e.replace(oa, ' or ($1)').substring(4) : '(' + c + ')';\n }\n\n function H(d, c, e, h, a, m, b, v, n, q) {\n for (var g = 0, x = c, w; g < A; ++g) {\n switch (w = S[g].call(B, d, x, e, h, a, m, b, v, n, q)) {\n case void 0:\n case !1:\n case !0:\n case null:\n break;\n\n default:\n x = w;\n }\n }\n\n if (x !== c) return x;\n }\n\n function T(d) {\n switch (d) {\n case void 0:\n case null:\n A = S.length = 0;\n break;\n\n default:\n if ('function' === typeof d) S[A++] = d;else if ('object' === typeof d) for (var c = 0, e = d.length; c < e; ++c) {\n T(d[c]);\n } else Y = !!d | 0;\n }\n\n return T;\n }\n\n function U(d) {\n d = d.prefix;\n void 0 !== d && (R = null, d ? 'function' !== typeof d ? w = 1 : (w = 2, R = d) : w = 0);\n return U;\n }\n\n function B(d, c) {\n var e = d;\n 33 > e.charCodeAt(0) && (e = e.trim());\n V = e;\n e = [V];\n\n if (0 < A) {\n var h = H(-1, c, e, e, D, z, 0, 0, 0, 0);\n void 0 !== h && 'string' === typeof h && (c = h);\n }\n\n var a = M(O, e, c, 0, 0);\n 0 < A && (h = H(-2, a, e, e, D, z, a.length, 0, 0, 0), void 0 !== h && (a = h));\n V = '';\n E = 0;\n z = D = 1;\n return a;\n }\n\n var ca = /^\\0+/g,\n N = /[\\0\\r\\f]/g,\n aa = /: */g,\n ka = /zoo|gra/,\n ma = /([,: ])(transform)/g,\n ia = /,\\r+?/g,\n F = /([\\t\\r\\n ])*\\f?&/g,\n fa = /@(k\\w+)\\s*(\\S*)\\s*/,\n Q = /::(place)/g,\n ha = /:(read-only)/g,\n G = /[svh]\\w+-[tblr]{2}/,\n da = /\\(\\s*(.*)\\s*\\)/g,\n oa = /([\\s\\S]*?);/g,\n ba = /-self|flex-/g,\n na = /[^]*?(:[rp][el]a[\\w-]+)[^]*/,\n la = /stretch|:\\s*\\w+\\-(?:conte|avail)/,\n ja = /([^-])(image-set\\()/,\n z = 1,\n D = 1,\n E = 0,\n w = 1,\n O = [],\n S = [],\n A = 0,\n R = null,\n Y = 0,\n V = '';\n B.use = T;\n B.set = U;\n void 0 !== W && U(W);\n return B;\n}\n\nexport default stylis_min;\n","import { StyleSheet } from '@emotion/sheet';\nimport Stylis from '@emotion/stylis';\nimport '@emotion/weak-memoize';\n\n// https://github.com/thysultan/stylis.js/tree/master/plugins/rule-sheet\n// inlined to avoid umd wrapper and peerDep warnings/installing stylis\n// since we use stylis after closure compiler\nvar delimiter = '/*|*/';\nvar needle = delimiter + '}';\n\nfunction toSheet(block) {\n if (block) {\n Sheet.current.insert(block + '}');\n }\n}\n\nvar Sheet = {\n current: null\n};\nvar ruleSheet = function ruleSheet(context, content, selectors, parents, line, column, length, ns, depth, at) {\n switch (context) {\n // property\n case 1:\n {\n switch (content.charCodeAt(0)) {\n case 64:\n {\n // @import\n Sheet.current.insert(content + ';');\n return '';\n }\n // charcode for l\n\n case 108:\n {\n // charcode for b\n // this ignores label\n if (content.charCodeAt(2) === 98) {\n return '';\n }\n }\n }\n\n break;\n }\n // selector\n\n case 2:\n {\n if (ns === 0) return content + delimiter;\n break;\n }\n // at-rule\n\n case 3:\n {\n switch (ns) {\n // @font-face, @page\n case 102:\n case 112:\n {\n Sheet.current.insert(selectors[0] + content);\n return '';\n }\n\n default:\n {\n return content + (at === 0 ? delimiter : '');\n }\n }\n }\n\n case -2:\n {\n content.split(needle).forEach(toSheet);\n }\n }\n};\n\nvar createCache = function createCache(options) {\n if (options === undefined) options = {};\n var key = options.key || 'css';\n var stylisOptions;\n\n if (options.prefix !== undefined) {\n stylisOptions = {\n prefix: options.prefix\n };\n }\n\n var stylis = new Stylis(stylisOptions);\n\n if (process.env.NODE_ENV !== 'production') {\n // $FlowFixMe\n if (/[^a-z-]/.test(key)) {\n throw new Error(\"Emotion key must only contain lower case alphabetical characters and - but \\\"\" + key + \"\\\" was passed\");\n }\n }\n\n var inserted = {}; // $FlowFixMe\n\n var container;\n\n {\n container = options.container || document.head;\n var nodes = document.querySelectorAll(\"style[data-emotion-\" + key + \"]\");\n Array.prototype.forEach.call(nodes, function (node) {\n var attrib = node.getAttribute(\"data-emotion-\" + key); // $FlowFixMe\n\n attrib.split(' ').forEach(function (id) {\n inserted[id] = true;\n });\n\n if (node.parentNode !== container) {\n container.appendChild(node);\n }\n });\n }\n\n var _insert;\n\n {\n stylis.use(options.stylisPlugins)(ruleSheet);\n\n _insert = function insert(selector, serialized, sheet, shouldCache) {\n var name = serialized.name;\n Sheet.current = sheet;\n\n if (process.env.NODE_ENV !== 'production' && serialized.map !== undefined) {\n var map = serialized.map;\n Sheet.current = {\n insert: function insert(rule) {\n sheet.insert(rule + map);\n }\n };\n }\n\n stylis(selector, serialized.styles);\n\n if (shouldCache) {\n cache.inserted[name] = true;\n }\n };\n }\n\n if (process.env.NODE_ENV !== 'production') {\n // https://esbench.com/bench/5bf7371a4cd7e6009ef61d0a\n var commentStart = /\\/\\*/g;\n var commentEnd = /\\*\\//g;\n stylis.use(function (context, content) {\n switch (context) {\n case -1:\n {\n while (commentStart.test(content)) {\n commentEnd.lastIndex = commentStart.lastIndex;\n\n if (commentEnd.test(content)) {\n commentStart.lastIndex = commentEnd.lastIndex;\n continue;\n }\n\n throw new Error('Your styles have an unterminated comment (\"/*\" without corresponding \"*/\").');\n }\n\n commentStart.lastIndex = 0;\n break;\n }\n }\n });\n stylis.use(function (context, content, selectors) {\n switch (context) {\n case -1:\n {\n var flag = 'emotion-disable-server-rendering-unsafe-selector-warning-please-do-not-use-this-the-warning-exists-for-a-reason';\n var unsafePseudoClasses = content.match(/(:first|:nth|:nth-last)-child/g);\n\n if (unsafePseudoClasses && cache.compat !== true) {\n unsafePseudoClasses.forEach(function (unsafePseudoClass) {\n var ignoreRegExp = new RegExp(unsafePseudoClass + \".*\\\\/\\\\* \" + flag + \" \\\\*\\\\/\");\n var ignore = ignoreRegExp.test(content);\n\n if (unsafePseudoClass && !ignore) {\n console.error(\"The pseudo class \\\"\" + unsafePseudoClass + \"\\\" is potentially unsafe when doing server-side rendering. Try changing it to \\\"\" + unsafePseudoClass.split('-child')[0] + \"-of-type\\\".\");\n }\n });\n }\n\n break;\n }\n }\n });\n }\n\n var cache = {\n key: key,\n sheet: new StyleSheet({\n key: key,\n container: container,\n nonce: options.nonce,\n speedy: options.speedy\n }),\n nonce: options.nonce,\n inserted: inserted,\n registered: {},\n insert: _insert\n };\n return cache;\n};\n\nexport default createCache;\n","var isBrowser = \"object\" !== 'undefined';\nfunction getRegisteredStyles(registered, registeredStyles, classNames) {\n var rawClassName = '';\n classNames.split(' ').forEach(function (className) {\n if (registered[className] !== undefined) {\n registeredStyles.push(registered[className]);\n } else {\n rawClassName += className + \" \";\n }\n });\n return rawClassName;\n}\nvar insertStyles = function insertStyles(cache, serialized, isStringTag) {\n var className = cache.key + \"-\" + serialized.name;\n\n if ( // we only need to add the styles to the registered cache if the\n // class name could be used further down\n // the tree but if it's a string tag, we know it won't\n // so we don't have to add it to registered cache.\n // this improves memory usage since we can avoid storing the whole style string\n (isStringTag === false || // we need to always store it if we're in compat mode and\n // in node since emotion-server relies on whether a style is in\n // the registered cache to know whether a style is global or not\n // also, note that this check will be dead code eliminated in the browser\n isBrowser === false && cache.compat !== undefined) && cache.registered[className] === undefined) {\n cache.registered[className] = serialized.styles;\n }\n\n if (cache.inserted[serialized.name] === undefined) {\n var current = serialized;\n\n do {\n var maybeStyles = cache.insert(\".\" + className, current, cache.sheet, true);\n\n current = current.next;\n } while (current !== undefined);\n }\n};\n\nexport { getRegisteredStyles, insertStyles };\n","/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n // 'm' and 'r' are mixing constants generated offline.\n // They're not really 'magic', they just happen to work well.\n // const m = 0x5bd1e995;\n // const r = 24;\n // Initialize the hash\n var h = 0; // Mix 4 bytes at a time into the hash\n\n var k,\n i = 0,\n len = str.length;\n\n for (; len >= 4; ++i, len -= 4) {\n k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n k =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n k ^=\n /* k >>> r: */\n k >>> 24;\n h =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Handle the last few bytes of the input array\n\n\n switch (len) {\n case 3:\n h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n case 2:\n h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n case 1:\n h ^= str.charCodeAt(i) & 0xff;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Do a few final mixes of the hash to ensure the last few\n // bytes are well-incorporated.\n\n\n h ^= h >>> 13;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\nexport default murmur2;\n","var unitlessKeys = {\n animationIterationCount: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\n\nexport default unitlessKeys;\n","function memoize(fn) {\n var cache = {};\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport default memoize;\n","import hashString from '@emotion/hash';\nimport unitless from '@emotion/unitless';\nimport memoize from '@emotion/memoize';\n\nvar ILLEGAL_ESCAPE_SEQUENCE_ERROR = \"You have illegal escape sequence in your template literal, most likely inside content's property value.\\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \\\"content: '\\\\00d7';\\\" should become \\\"content: '\\\\\\\\00d7';\\\".\\nYou can read more about this here:\\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences\";\nvar UNDEFINED_AS_OBJECT_KEY_ERROR = \"You have passed in falsy value as style object's key (can happen when in example you pass unexported component as computed key).\";\nvar hyphenateRegex = /[A-Z]|^ms/g;\nvar animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;\n\nvar isCustomProperty = function isCustomProperty(property) {\n return property.charCodeAt(1) === 45;\n};\n\nvar isProcessableValue = function isProcessableValue(value) {\n return value != null && typeof value !== 'boolean';\n};\n\nvar processStyleName = memoize(function (styleName) {\n return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();\n});\n\nvar processStyleValue = function processStyleValue(key, value) {\n switch (key) {\n case 'animation':\n case 'animationName':\n {\n if (typeof value === 'string') {\n return value.replace(animationRegex, function (match, p1, p2) {\n cursor = {\n name: p1,\n styles: p2,\n next: cursor\n };\n return p1;\n });\n }\n }\n }\n\n if (unitless[key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {\n return value + 'px';\n }\n\n return value;\n};\n\nif (process.env.NODE_ENV !== 'production') {\n var contentValuePattern = /(attr|calc|counters?|url)\\(/;\n var contentValues = ['normal', 'none', 'counter', 'open-quote', 'close-quote', 'no-open-quote', 'no-close-quote', 'initial', 'inherit', 'unset'];\n var oldProcessStyleValue = processStyleValue;\n var msPattern = /^-ms-/;\n var hyphenPattern = /-(.)/g;\n var hyphenatedCache = {};\n\n processStyleValue = function processStyleValue(key, value) {\n if (key === 'content') {\n if (typeof value !== 'string' || contentValues.indexOf(value) === -1 && !contentValuePattern.test(value) && (value.charAt(0) !== value.charAt(value.length - 1) || value.charAt(0) !== '\"' && value.charAt(0) !== \"'\")) {\n console.error(\"You seem to be using a value for 'content' without quotes, try replacing it with `content: '\\\"\" + value + \"\\\"'`\");\n }\n }\n\n var processed = oldProcessStyleValue(key, value);\n\n if (processed !== '' && !isCustomProperty(key) && key.indexOf('-') !== -1 && hyphenatedCache[key] === undefined) {\n hyphenatedCache[key] = true;\n console.error(\"Using kebab-case for css properties in objects is not supported. Did you mean \" + key.replace(msPattern, 'ms-').replace(hyphenPattern, function (str, _char) {\n return _char.toUpperCase();\n }) + \"?\");\n }\n\n return processed;\n };\n}\n\nvar shouldWarnAboutInterpolatingClassNameFromCss = true;\n\nfunction handleInterpolation(mergedProps, registered, interpolation, couldBeSelectorInterpolation) {\n if (interpolation == null) {\n return '';\n }\n\n if (interpolation.__emotion_styles !== undefined) {\n if (process.env.NODE_ENV !== 'production' && interpolation.toString() === 'NO_COMPONENT_SELECTOR') {\n throw new Error('Component selectors can only be used in conjunction with babel-plugin-emotion.');\n }\n\n return interpolation;\n }\n\n switch (typeof interpolation) {\n case 'boolean':\n {\n return '';\n }\n\n case 'object':\n {\n if (interpolation.anim === 1) {\n cursor = {\n name: interpolation.name,\n styles: interpolation.styles,\n next: cursor\n };\n return interpolation.name;\n }\n\n if (interpolation.styles !== undefined) {\n var next = interpolation.next;\n\n if (next !== undefined) {\n // not the most efficient thing ever but this is a pretty rare case\n // and there will be very few iterations of this generally\n while (next !== undefined) {\n cursor = {\n name: next.name,\n styles: next.styles,\n next: cursor\n };\n next = next.next;\n }\n }\n\n var styles = interpolation.styles + \";\";\n\n if (process.env.NODE_ENV !== 'production' && interpolation.map !== undefined) {\n styles += interpolation.map;\n }\n\n return styles;\n }\n\n return createStringFromObject(mergedProps, registered, interpolation);\n }\n\n case 'function':\n {\n if (mergedProps !== undefined) {\n var previousCursor = cursor;\n var result = interpolation(mergedProps);\n cursor = previousCursor;\n return handleInterpolation(mergedProps, registered, result, couldBeSelectorInterpolation);\n } else if (process.env.NODE_ENV !== 'production') {\n console.error('Functions that are interpolated in css calls will be stringified.\\n' + 'If you want to have a css call based on props, create a function that returns a css call like this\\n' + 'let dynamicStyle = (props) => css`color: ${props.color}`\\n' + 'It can be called directly with props or interpolated in a styled call like this\\n' + \"let SomeComponent = styled('div')`${dynamicStyle}`\");\n }\n\n break;\n }\n\n case 'string':\n if (process.env.NODE_ENV !== 'production') {\n var matched = [];\n var replaced = interpolation.replace(animationRegex, function (match, p1, p2) {\n var fakeVarName = \"animation\" + matched.length;\n matched.push(\"const \" + fakeVarName + \" = keyframes`\" + p2.replace(/^@keyframes animation-\\w+/, '') + \"`\");\n return \"${\" + fakeVarName + \"}\";\n });\n\n if (matched.length) {\n console.error('`keyframes` output got interpolated into plain string, please wrap it with `css`.\\n\\n' + 'Instead of doing this:\\n\\n' + [].concat(matched, [\"`\" + replaced + \"`\"]).join('\\n') + '\\n\\nYou should wrap it with `css` like this:\\n\\n' + (\"css`\" + replaced + \"`\"));\n }\n }\n\n break;\n } // finalize string values (regular strings and functions interpolated into css calls)\n\n\n if (registered == null) {\n return interpolation;\n }\n\n var cached = registered[interpolation];\n\n if (process.env.NODE_ENV !== 'production' && couldBeSelectorInterpolation && shouldWarnAboutInterpolatingClassNameFromCss && cached !== undefined) {\n console.error('Interpolating a className from css`` is not recommended and will cause problems with composition.\\n' + 'Interpolating a className from css`` will be completely unsupported in a future major version of Emotion');\n shouldWarnAboutInterpolatingClassNameFromCss = false;\n }\n\n return cached !== undefined && !couldBeSelectorInterpolation ? cached : interpolation;\n}\n\nfunction createStringFromObject(mergedProps, registered, obj) {\n var string = '';\n\n if (Array.isArray(obj)) {\n for (var i = 0; i < obj.length; i++) {\n string += handleInterpolation(mergedProps, registered, obj[i], false);\n }\n } else {\n for (var _key in obj) {\n var value = obj[_key];\n\n if (typeof value !== 'object') {\n if (registered != null && registered[value] !== undefined) {\n string += _key + \"{\" + registered[value] + \"}\";\n } else if (isProcessableValue(value)) {\n string += processStyleName(_key) + \":\" + processStyleValue(_key, value) + \";\";\n }\n } else {\n if (_key === 'NO_COMPONENT_SELECTOR' && process.env.NODE_ENV !== 'production') {\n throw new Error('Component selectors can only be used in conjunction with babel-plugin-emotion.');\n }\n\n if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {\n for (var _i = 0; _i < value.length; _i++) {\n if (isProcessableValue(value[_i])) {\n string += processStyleName(_key) + \":\" + processStyleValue(_key, value[_i]) + \";\";\n }\n }\n } else {\n var interpolated = handleInterpolation(mergedProps, registered, value, false);\n\n switch (_key) {\n case 'animation':\n case 'animationName':\n {\n string += processStyleName(_key) + \":\" + interpolated + \";\";\n break;\n }\n\n default:\n {\n if (process.env.NODE_ENV !== 'production' && _key === 'undefined') {\n console.error(UNDEFINED_AS_OBJECT_KEY_ERROR);\n }\n\n string += _key + \"{\" + interpolated + \"}\";\n }\n }\n }\n }\n }\n }\n\n return string;\n}\n\nvar labelPattern = /label:\\s*([^\\s;\\n{]+)\\s*;/g;\nvar sourceMapPattern;\n\nif (process.env.NODE_ENV !== 'production') {\n sourceMapPattern = /\\/\\*#\\ssourceMappingURL=data:application\\/json;\\S+\\s+\\*\\//;\n} // this is the cursor for keyframes\n// keyframes are stored on the SerializedStyles object as a linked list\n\n\nvar cursor;\nvar serializeStyles = function serializeStyles(args, registered, mergedProps) {\n if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {\n return args[0];\n }\n\n var stringMode = true;\n var styles = '';\n cursor = undefined;\n var strings = args[0];\n\n if (strings == null || strings.raw === undefined) {\n stringMode = false;\n styles += handleInterpolation(mergedProps, registered, strings, false);\n } else {\n if (process.env.NODE_ENV !== 'production' && strings[0] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles += strings[0];\n } // we start at 1 since we've already handled the first arg\n\n\n for (var i = 1; i < args.length; i++) {\n styles += handleInterpolation(mergedProps, registered, args[i], styles.charCodeAt(styles.length - 1) === 46);\n\n if (stringMode) {\n if (process.env.NODE_ENV !== 'production' && strings[i] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles += strings[i];\n }\n }\n\n var sourceMap;\n\n if (process.env.NODE_ENV !== 'production') {\n styles = styles.replace(sourceMapPattern, function (match) {\n sourceMap = match;\n return '';\n });\n } // using a global regex with .exec is stateful so lastIndex has to be reset each time\n\n\n labelPattern.lastIndex = 0;\n var identifierName = '';\n var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5\n\n while ((match = labelPattern.exec(styles)) !== null) {\n identifierName += '-' + // $FlowFixMe we know it's not null\n match[1];\n }\n\n var name = hashString(styles) + identifierName;\n\n if (process.env.NODE_ENV !== 'production') {\n // $FlowFixMe SerializedStyles type doesn't have toString property (and we don't want to add it)\n return {\n name: name,\n styles: styles,\n map: sourceMap,\n next: cursor,\n toString: function toString() {\n return \"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).\";\n }\n };\n }\n\n return {\n name: name,\n styles: styles,\n next: cursor\n };\n};\n\nexport { serializeStyles };\n","import '@babel/runtime/helpers/inheritsLoose';\nimport { createContext, forwardRef, createElement, Fragment } from 'react';\nimport createCache from '@emotion/cache';\nimport { getRegisteredStyles, insertStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar EmotionCacheContext = /*#__PURE__*/createContext( // we're doing this to avoid preconstruct's dead code elimination in this one case\n// because this module is primarily intended for the browser and node\n// but it's also required in react native and similar environments sometimes\n// and we could have a special build just for that\n// but this is much easier and the native packages\n// might use a different theme context in the future anyway\ntypeof HTMLElement !== 'undefined' ? createCache() : null);\nvar ThemeContext = /*#__PURE__*/createContext({});\nvar CacheProvider = EmotionCacheContext.Provider;\n\nvar withEmotionCache = function withEmotionCache(func) {\n var render = function render(props, ref) {\n return /*#__PURE__*/createElement(EmotionCacheContext.Consumer, null, function (cache) {\n return func(props, cache, ref);\n });\n }; // $FlowFixMe\n\n\n return /*#__PURE__*/forwardRef(render);\n};\n\n// thus we only need to replace what is a valid character for JS, but not for CSS\n\nvar sanitizeIdentifier = function sanitizeIdentifier(identifier) {\n return identifier.replace(/\\$/g, '-');\n};\n\nvar typePropName = '__EMOTION_TYPE_PLEASE_DO_NOT_USE__';\nvar labelPropName = '__EMOTION_LABEL_PLEASE_DO_NOT_USE__';\nvar createEmotionProps = function createEmotionProps(type, props) {\n if (process.env.NODE_ENV !== 'production' && typeof props.css === 'string' && // check if there is a css declaration\n props.css.indexOf(':') !== -1) {\n throw new Error(\"Strings are not allowed as css prop values, please wrap it in a css template literal from '@emotion/css' like this: css`\" + props.css + \"`\");\n }\n\n var newProps = {};\n\n for (var key in props) {\n if (hasOwnProperty.call(props, key)) {\n newProps[key] = props[key];\n }\n }\n\n newProps[typePropName] = type; // TODO: check if this still works with all of those different JSX functions\n\n if (process.env.NODE_ENV !== 'production') {\n var error = new Error();\n\n if (error.stack) {\n // chrome\n var match = error.stack.match(/at (?:Object\\.|Module\\.|)(?:jsx|createEmotionProps).*\\n\\s+at (?:Object\\.|)([A-Z][A-Za-z$]+) /);\n\n if (!match) {\n // safari and firefox\n match = error.stack.match(/.*\\n([A-Z][A-Za-z$]+)@/);\n }\n\n if (match) {\n newProps[labelPropName] = sanitizeIdentifier(match[1]);\n }\n }\n }\n\n return newProps;\n};\n\nvar Noop = function Noop() {\n return null;\n};\n\nvar render = function render(cache, props, theme, ref) {\n var cssProp = theme === null ? props.css : props.css(theme); // so that using `css` from `emotion` and passing the result to the css prop works\n // not passing the registered cache to serializeStyles because it would\n // make certain babel optimisations not possible\n\n if (typeof cssProp === 'string' && cache.registered[cssProp] !== undefined) {\n cssProp = cache.registered[cssProp];\n }\n\n var type = props[typePropName];\n var registeredStyles = [cssProp];\n var className = '';\n\n if (typeof props.className === 'string') {\n className = getRegisteredStyles(cache.registered, registeredStyles, props.className);\n } else if (props.className != null) {\n className = props.className + \" \";\n }\n\n var serialized = serializeStyles(registeredStyles);\n\n if (process.env.NODE_ENV !== 'production' && serialized.name.indexOf('-') === -1) {\n var labelFromStack = props[labelPropName];\n\n if (labelFromStack) {\n serialized = serializeStyles([serialized, 'label:' + labelFromStack + ';']);\n }\n }\n\n var rules = insertStyles(cache, serialized, typeof type === 'string');\n className += cache.key + \"-\" + serialized.name;\n var newProps = {};\n\n for (var key in props) {\n if (hasOwnProperty.call(props, key) && key !== 'css' && key !== typePropName && (process.env.NODE_ENV === 'production' || key !== labelPropName)) {\n newProps[key] = props[key];\n }\n }\n\n newProps.ref = ref;\n newProps.className = className;\n var ele = /*#__PURE__*/createElement(type, newProps);\n var possiblyStyleElement = /*#__PURE__*/createElement(Noop, null);\n\n\n return /*#__PURE__*/createElement(Fragment, null, possiblyStyleElement, ele);\n}; // eslint-disable-next-line no-undef\n\n\nvar Emotion = /* #__PURE__ */withEmotionCache(function (props, cache, ref) {\n if (typeof props.css === 'function') {\n return /*#__PURE__*/createElement(ThemeContext.Consumer, null, function (theme) {\n return render(cache, props, theme, ref);\n });\n }\n\n return render(cache, props, null, ref);\n});\n\nif (process.env.NODE_ENV !== 'production') {\n Emotion.displayName = 'EmotionCssPropInternal';\n}\n\nexport { CacheProvider as C, Emotion as E, ThemeContext as T, createEmotionProps as c, hasOwnProperty as h, withEmotionCache as w };\n","import { serializeStyles } from '@emotion/serialize';\n\nfunction css() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return serializeStyles(args);\n}\n\nexport default css;\n","import _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport { createElement, Component, Fragment } from 'react';\nimport '@emotion/cache';\nimport { h as hasOwnProperty, E as Emotion, c as createEmotionProps, w as withEmotionCache, T as ThemeContext } from './emotion-element-04d85134.browser.esm.js';\nexport { C as CacheProvider, T as ThemeContext, w as withEmotionCache } from './emotion-element-04d85134.browser.esm.js';\nimport { insertStyles, getRegisteredStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\nimport { StyleSheet } from '@emotion/sheet';\nimport css from '@emotion/css';\nexport { default as css } from '@emotion/css';\n\nvar jsx = function jsx(type, props) {\n var args = arguments;\n\n if (props == null || !hasOwnProperty.call(props, 'css')) {\n // $FlowFixMe\n return createElement.apply(undefined, args);\n }\n\n var argsLength = args.length;\n var createElementArgArray = new Array(argsLength);\n createElementArgArray[0] = Emotion;\n createElementArgArray[1] = createEmotionProps(type, props);\n\n for (var i = 2; i < argsLength; i++) {\n createElementArgArray[i] = args[i];\n } // $FlowFixMe\n\n\n return createElement.apply(null, createElementArgArray);\n};\n\nvar warnedAboutCssPropForGlobal = false;\nvar Global = /* #__PURE__ */withEmotionCache(function (props, cache) {\n if (process.env.NODE_ENV !== 'production' && !warnedAboutCssPropForGlobal && ( // check for className as well since the user is\n // probably using the custom createElement which\n // means it will be turned into a className prop\n // $FlowFixMe I don't really want to add it to the type since it shouldn't be used\n props.className || props.css)) {\n console.error(\"It looks like you're using the css prop on Global, did you mean to use the styles prop instead?\");\n warnedAboutCssPropForGlobal = true;\n }\n\n var styles = props.styles;\n\n if (typeof styles === 'function') {\n return /*#__PURE__*/createElement(ThemeContext.Consumer, null, function (theme) {\n var serialized = serializeStyles([styles(theme)]);\n return /*#__PURE__*/createElement(InnerGlobal, {\n serialized: serialized,\n cache: cache\n });\n });\n }\n\n var serialized = serializeStyles([styles]);\n return /*#__PURE__*/createElement(InnerGlobal, {\n serialized: serialized,\n cache: cache\n });\n});\n\n// maintain place over rerenders.\n// initial render from browser, insertBefore context.sheet.tags[0] or if a style hasn't been inserted there yet, appendChild\n// initial client-side render from SSR, use place of hydrating tag\nvar InnerGlobal = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(InnerGlobal, _React$Component);\n\n function InnerGlobal(props, context, updater) {\n return _React$Component.call(this, props, context, updater) || this;\n }\n\n var _proto = InnerGlobal.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n this.sheet = new StyleSheet({\n key: this.props.cache.key + \"-global\",\n nonce: this.props.cache.sheet.nonce,\n container: this.props.cache.sheet.container\n }); // $FlowFixMe\n\n var node = document.querySelector(\"style[data-emotion-\" + this.props.cache.key + \"=\\\"\" + this.props.serialized.name + \"\\\"]\");\n\n if (node !== null) {\n this.sheet.tags.push(node);\n }\n\n if (this.props.cache.sheet.tags.length) {\n this.sheet.before = this.props.cache.sheet.tags[0];\n }\n\n this.insertStyles();\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n if (prevProps.serialized.name !== this.props.serialized.name) {\n this.insertStyles();\n }\n };\n\n _proto.insertStyles = function insertStyles$1() {\n if (this.props.serialized.next !== undefined) {\n // insert keyframes\n insertStyles(this.props.cache, this.props.serialized.next, true);\n }\n\n if (this.sheet.tags.length) {\n // if this doesn't exist then it will be null so the style element will be appended\n var element = this.sheet.tags[this.sheet.tags.length - 1].nextElementSibling;\n this.sheet.before = element;\n this.sheet.flush();\n }\n\n this.props.cache.insert(\"\", this.props.serialized, this.sheet, false);\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.sheet.flush();\n };\n\n _proto.render = function render() {\n\n return null;\n };\n\n return InnerGlobal;\n}(Component);\n\nvar keyframes = function keyframes() {\n var insertable = css.apply(void 0, arguments);\n var name = \"animation-\" + insertable.name; // $FlowFixMe\n\n return {\n name: name,\n styles: \"@keyframes \" + name + \"{\" + insertable.styles + \"}\",\n anim: 1,\n toString: function toString() {\n return \"_EMO_\" + this.name + \"_\" + this.styles + \"_EMO_\";\n }\n };\n};\n\nvar classnames = function classnames(args) {\n var len = args.length;\n var i = 0;\n var cls = '';\n\n for (; i < len; i++) {\n var arg = args[i];\n if (arg == null) continue;\n var toAdd = void 0;\n\n switch (typeof arg) {\n case 'boolean':\n break;\n\n case 'object':\n {\n if (Array.isArray(arg)) {\n toAdd = classnames(arg);\n } else {\n toAdd = '';\n\n for (var k in arg) {\n if (arg[k] && k) {\n toAdd && (toAdd += ' ');\n toAdd += k;\n }\n }\n }\n\n break;\n }\n\n default:\n {\n toAdd = arg;\n }\n }\n\n if (toAdd) {\n cls && (cls += ' ');\n cls += toAdd;\n }\n }\n\n return cls;\n};\n\nfunction merge(registered, css, className) {\n var registeredStyles = [];\n var rawClassName = getRegisteredStyles(registered, registeredStyles, className);\n\n if (registeredStyles.length < 2) {\n return className;\n }\n\n return rawClassName + css(registeredStyles);\n}\n\nvar Noop = function Noop() {\n return null;\n};\n\nvar ClassNames = withEmotionCache(function (props, context) {\n return /*#__PURE__*/createElement(ThemeContext.Consumer, null, function (theme) {\n var hasRendered = false;\n\n var css = function css() {\n if (hasRendered && process.env.NODE_ENV !== 'production') {\n throw new Error('css can only be used during render');\n }\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var serialized = serializeStyles(args, context.registered);\n\n {\n insertStyles(context, serialized, false);\n }\n\n return context.key + \"-\" + serialized.name;\n };\n\n var cx = function cx() {\n if (hasRendered && process.env.NODE_ENV !== 'production') {\n throw new Error('cx can only be used during render');\n }\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return merge(context.registered, css, classnames(args));\n };\n\n var content = {\n css: css,\n cx: cx,\n theme: theme\n };\n var ele = props.children(content);\n hasRendered = true;\n var possiblyStyleElement = /*#__PURE__*/createElement(Noop, null);\n\n\n return /*#__PURE__*/createElement(Fragment, null, possiblyStyleElement, ele);\n });\n});\n\nexport { ClassNames, Global, jsx as createElement, jsx, keyframes };\n","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nexport default function _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}","import _typeof from '@babel/runtime/helpers/esm/typeof';\n\n// ==============================\n// NO OP\n// ==============================\nvar noop = function noop() {};\n// Class Name Prefixer\n// ==============================\n\n/**\n String representation of component state for styling with class names.\n\n Expects an array of strings OR a string/object pair:\n - className(['comp', 'comp-arg', 'comp-arg-2'])\n @returns 'react-select__comp react-select__comp-arg react-select__comp-arg-2'\n - className('comp', { some: true, state: false })\n @returns 'react-select__comp react-select__comp--some'\n*/\n\nfunction applyPrefixToName(prefix, name) {\n if (!name) {\n return prefix;\n } else if (name[0] === '-') {\n return prefix + name;\n } else {\n return prefix + '__' + name;\n }\n}\n\nfunction classNames(prefix, state, className) {\n var arr = [className];\n\n if (state && prefix) {\n for (var key in state) {\n if (state.hasOwnProperty(key) && state[key]) {\n arr.push(\"\".concat(applyPrefixToName(prefix, key)));\n }\n }\n }\n\n return arr.filter(function (i) {\n return i;\n }).map(function (i) {\n return String(i).trim();\n }).join(' ');\n} // ==============================\n// Clean Value\n// ==============================\n\nvar cleanValue = function cleanValue(value) {\n if (Array.isArray(value)) return value.filter(Boolean);\n if (_typeof(value) === 'object' && value !== null) return [value];\n return [];\n}; // ==============================\n// Handle Input Change\n// ==============================\n\nfunction handleInputChange(inputValue, actionMeta, onInputChange) {\n if (onInputChange) {\n var newValue = onInputChange(inputValue, actionMeta);\n if (typeof newValue === 'string') return newValue;\n }\n\n return inputValue;\n} // ==============================\n// Scroll Helpers\n// ==============================\n\nfunction isDocumentElement(el) {\n return [document.documentElement, document.body, window].indexOf(el) > -1;\n} // Normalized Scroll Top\n// ------------------------------\n\nfunction getScrollTop(el) {\n if (isDocumentElement(el)) {\n return window.pageYOffset;\n }\n\n return el.scrollTop;\n}\nfunction scrollTo(el, top) {\n // with a scroll distance, we perform scroll on the element\n if (isDocumentElement(el)) {\n window.scrollTo(0, top);\n return;\n }\n\n el.scrollTop = top;\n} // Get Scroll Parent\n// ------------------------------\n\nfunction getScrollParent(element) {\n var style = getComputedStyle(element);\n var excludeStaticParent = style.position === 'absolute';\n var overflowRx = /(auto|scroll)/;\n var docEl = document.documentElement; // suck it, flow...\n\n if (style.position === 'fixed') return docEl;\n\n for (var parent = element; parent = parent.parentElement;) {\n style = getComputedStyle(parent);\n\n if (excludeStaticParent && style.position === 'static') {\n continue;\n }\n\n if (overflowRx.test(style.overflow + style.overflowY + style.overflowX)) {\n return parent;\n }\n }\n\n return docEl;\n} // Animated Scroll To\n// ------------------------------\n\n/**\n @param t: time (elapsed)\n @param b: initial value\n @param c: amount of change\n @param d: duration\n*/\n\nfunction easeOutCubic(t, b, c, d) {\n return c * ((t = t / d - 1) * t * t + 1) + b;\n}\n\nfunction animatedScrollTo(element, to) {\n var duration = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 200;\n var callback = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : noop;\n var start = getScrollTop(element);\n var change = to - start;\n var increment = 10;\n var currentTime = 0;\n\n function animateScroll() {\n currentTime += increment;\n var val = easeOutCubic(currentTime, start, change, duration);\n scrollTo(element, val);\n\n if (currentTime < duration) {\n window.requestAnimationFrame(animateScroll);\n } else {\n callback(element);\n }\n }\n\n animateScroll();\n} // Scroll Into View\n// ------------------------------\n\nfunction scrollIntoView(menuEl, focusedEl) {\n var menuRect = menuEl.getBoundingClientRect();\n var focusedRect = focusedEl.getBoundingClientRect();\n var overScroll = focusedEl.offsetHeight / 3;\n\n if (focusedRect.bottom + overScroll > menuRect.bottom) {\n scrollTo(menuEl, Math.min(focusedEl.offsetTop + focusedEl.clientHeight - menuEl.offsetHeight + overScroll, menuEl.scrollHeight));\n } else if (focusedRect.top - overScroll < menuRect.top) {\n scrollTo(menuEl, Math.max(focusedEl.offsetTop - overScroll, 0));\n }\n} // ==============================\n// Get bounding client object\n// ==============================\n// cannot get keys using array notation with DOMRect\n\nfunction getBoundingClientObj(element) {\n var rect = element.getBoundingClientRect();\n return {\n bottom: rect.bottom,\n height: rect.height,\n left: rect.left,\n right: rect.right,\n top: rect.top,\n width: rect.width\n };\n}\n// Touch Capability Detector\n// ==============================\n\nfunction isTouchCapable() {\n try {\n document.createEvent('TouchEvent');\n return true;\n } catch (e) {\n return false;\n }\n} // ==============================\n// Mobile Device Detector\n// ==============================\n\nfunction isMobileDevice() {\n try {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n } catch (e) {\n return false;\n }\n}\n\nexport { getScrollParent as a, getScrollTop as b, animatedScrollTo as c, isMobileDevice as d, isDocumentElement as e, cleanValue as f, getBoundingClientObj as g, scrollIntoView as h, isTouchCapable as i, classNames as j, handleInputChange as k, noop as n, scrollTo as s };\n","import _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport _objectSpread from '@babel/runtime/helpers/esm/objectSpread';\nimport _classCallCheck from '@babel/runtime/helpers/esm/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/esm/createClass';\nimport _possibleConstructorReturn from '@babel/runtime/helpers/esm/possibleConstructorReturn';\nimport _getPrototypeOf from '@babel/runtime/helpers/esm/getPrototypeOf';\nimport _inherits from '@babel/runtime/helpers/esm/inherits';\nimport _assertThisInitialized from '@babel/runtime/helpers/esm/assertThisInitialized';\nimport _defineProperty from '@babel/runtime/helpers/esm/defineProperty';\nimport { Component } from 'react';\nimport { jsx, keyframes, ClassNames } from '@emotion/core';\nimport { createPortal } from 'react-dom';\nimport PropTypes from 'prop-types';\nimport _typeof from '@babel/runtime/helpers/esm/typeof';\nimport { g as getBoundingClientObj, a as getScrollParent, b as getScrollTop, c as animatedScrollTo, s as scrollTo } from './chunk-39d3fda8.browser.esm.js';\nimport _css from '@emotion/css';\nimport _taggedTemplateLiteral from '@babel/runtime/helpers/esm/taggedTemplateLiteral';\nimport AutosizeInput from 'react-input-autosize';\n\nfunction getMenuPlacement(_ref) {\n var maxHeight = _ref.maxHeight,\n menuEl = _ref.menuEl,\n minHeight = _ref.minHeight,\n placement = _ref.placement,\n shouldScroll = _ref.shouldScroll,\n isFixedPosition = _ref.isFixedPosition,\n theme = _ref.theme;\n var spacing = theme.spacing;\n var scrollParent = getScrollParent(menuEl);\n var defaultState = {\n placement: 'bottom',\n maxHeight: maxHeight\n }; // something went wrong, return default state\n\n if (!menuEl || !menuEl.offsetParent) return defaultState; // we can't trust `scrollParent.scrollHeight` --> it may increase when\n // the menu is rendered\n\n var _scrollParent$getBoun = scrollParent.getBoundingClientRect(),\n scrollHeight = _scrollParent$getBoun.height;\n\n var _menuEl$getBoundingCl = menuEl.getBoundingClientRect(),\n menuBottom = _menuEl$getBoundingCl.bottom,\n menuHeight = _menuEl$getBoundingCl.height,\n menuTop = _menuEl$getBoundingCl.top;\n\n var _menuEl$offsetParent$ = menuEl.offsetParent.getBoundingClientRect(),\n containerTop = _menuEl$offsetParent$.top;\n\n var viewHeight = window.innerHeight;\n var scrollTop = getScrollTop(scrollParent);\n var marginBottom = parseInt(getComputedStyle(menuEl).marginBottom, 10);\n var marginTop = parseInt(getComputedStyle(menuEl).marginTop, 10);\n var viewSpaceAbove = containerTop - marginTop;\n var viewSpaceBelow = viewHeight - menuTop;\n var scrollSpaceAbove = viewSpaceAbove + scrollTop;\n var scrollSpaceBelow = scrollHeight - scrollTop - menuTop;\n var scrollDown = menuBottom - viewHeight + scrollTop + marginBottom;\n var scrollUp = scrollTop + menuTop - marginTop;\n var scrollDuration = 160;\n\n switch (placement) {\n case 'auto':\n case 'bottom':\n // 1: the menu will fit, do nothing\n if (viewSpaceBelow >= menuHeight) {\n return {\n placement: 'bottom',\n maxHeight: maxHeight\n };\n } // 2: the menu will fit, if scrolled\n\n\n if (scrollSpaceBelow >= menuHeight && !isFixedPosition) {\n if (shouldScroll) {\n animatedScrollTo(scrollParent, scrollDown, scrollDuration);\n }\n\n return {\n placement: 'bottom',\n maxHeight: maxHeight\n };\n } // 3: the menu will fit, if constrained\n\n\n if (!isFixedPosition && scrollSpaceBelow >= minHeight || isFixedPosition && viewSpaceBelow >= minHeight) {\n if (shouldScroll) {\n animatedScrollTo(scrollParent, scrollDown, scrollDuration);\n } // we want to provide as much of the menu as possible to the user,\n // so give them whatever is available below rather than the minHeight.\n\n\n var constrainedHeight = isFixedPosition ? viewSpaceBelow - marginBottom : scrollSpaceBelow - marginBottom;\n return {\n placement: 'bottom',\n maxHeight: constrainedHeight\n };\n } // 4. Forked beviour when there isn't enough space below\n // AUTO: flip the menu, render above\n\n\n if (placement === 'auto' || isFixedPosition) {\n // may need to be constrained after flipping\n var _constrainedHeight = maxHeight;\n var spaceAbove = isFixedPosition ? viewSpaceAbove : scrollSpaceAbove;\n\n if (spaceAbove >= minHeight) {\n _constrainedHeight = Math.min(spaceAbove - marginBottom - spacing.controlHeight, maxHeight);\n }\n\n return {\n placement: 'top',\n maxHeight: _constrainedHeight\n };\n } // BOTTOM: allow browser to increase scrollable area and immediately set scroll\n\n\n if (placement === 'bottom') {\n scrollTo(scrollParent, scrollDown);\n return {\n placement: 'bottom',\n maxHeight: maxHeight\n };\n }\n\n break;\n\n case 'top':\n // 1: the menu will fit, do nothing\n if (viewSpaceAbove >= menuHeight) {\n return {\n placement: 'top',\n maxHeight: maxHeight\n };\n } // 2: the menu will fit, if scrolled\n\n\n if (scrollSpaceAbove >= menuHeight && !isFixedPosition) {\n if (shouldScroll) {\n animatedScrollTo(scrollParent, scrollUp, scrollDuration);\n }\n\n return {\n placement: 'top',\n maxHeight: maxHeight\n };\n } // 3: the menu will fit, if constrained\n\n\n if (!isFixedPosition && scrollSpaceAbove >= minHeight || isFixedPosition && viewSpaceAbove >= minHeight) {\n var _constrainedHeight2 = maxHeight; // we want to provide as much of the menu as possible to the user,\n // so give them whatever is available below rather than the minHeight.\n\n if (!isFixedPosition && scrollSpaceAbove >= minHeight || isFixedPosition && viewSpaceAbove >= minHeight) {\n _constrainedHeight2 = isFixedPosition ? viewSpaceAbove - marginTop : scrollSpaceAbove - marginTop;\n }\n\n if (shouldScroll) {\n animatedScrollTo(scrollParent, scrollUp, scrollDuration);\n }\n\n return {\n placement: 'top',\n maxHeight: _constrainedHeight2\n };\n } // 4. not enough space, the browser WILL NOT increase scrollable area when\n // absolutely positioned element rendered above the viewport (only below).\n // Flip the menu, render below\n\n\n return {\n placement: 'bottom',\n maxHeight: maxHeight\n };\n\n default:\n throw new Error(\"Invalid placement provided \\\"\".concat(placement, \"\\\".\"));\n } // fulfil contract with flow: implicit return value of undefined\n\n\n return defaultState;\n} // Menu Component\n// ------------------------------\n\nfunction alignToControl(placement) {\n var placementToCSSProp = {\n bottom: 'top',\n top: 'bottom'\n };\n return placement ? placementToCSSProp[placement] : 'bottom';\n}\n\nvar coercePlacement = function coercePlacement(p) {\n return p === 'auto' ? 'bottom' : p;\n};\n\nvar menuCSS = function menuCSS(_ref2) {\n var _ref3;\n\n var placement = _ref2.placement,\n _ref2$theme = _ref2.theme,\n borderRadius = _ref2$theme.borderRadius,\n spacing = _ref2$theme.spacing,\n colors = _ref2$theme.colors;\n return _ref3 = {\n label: 'menu'\n }, _defineProperty(_ref3, alignToControl(placement), '100%'), _defineProperty(_ref3, \"backgroundColor\", colors.neutral0), _defineProperty(_ref3, \"borderRadius\", borderRadius), _defineProperty(_ref3, \"boxShadow\", '0 0 0 1px hsla(0, 0%, 0%, 0.1), 0 4px 11px hsla(0, 0%, 0%, 0.1)'), _defineProperty(_ref3, \"marginBottom\", spacing.menuGutter), _defineProperty(_ref3, \"marginTop\", spacing.menuGutter), _defineProperty(_ref3, \"position\", 'absolute'), _defineProperty(_ref3, \"width\", '100%'), _defineProperty(_ref3, \"zIndex\", 1), _ref3;\n}; // NOTE: internal only\n\nvar MenuPlacer =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(MenuPlacer, _Component);\n\n function MenuPlacer() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, MenuPlacer);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(MenuPlacer)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"state\", {\n maxHeight: _this.props.maxMenuHeight,\n placement: null\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getPlacement\", function (ref) {\n var _this$props = _this.props,\n minMenuHeight = _this$props.minMenuHeight,\n maxMenuHeight = _this$props.maxMenuHeight,\n menuPlacement = _this$props.menuPlacement,\n menuPosition = _this$props.menuPosition,\n menuShouldScrollIntoView = _this$props.menuShouldScrollIntoView,\n theme = _this$props.theme;\n var getPortalPlacement = _this.context.getPortalPlacement;\n if (!ref) return; // DO NOT scroll if position is fixed\n\n var isFixedPosition = menuPosition === 'fixed';\n var shouldScroll = menuShouldScrollIntoView && !isFixedPosition;\n var state = getMenuPlacement({\n maxHeight: maxMenuHeight,\n menuEl: ref,\n minHeight: minMenuHeight,\n placement: menuPlacement,\n shouldScroll: shouldScroll,\n isFixedPosition: isFixedPosition,\n theme: theme\n });\n if (getPortalPlacement) getPortalPlacement(state);\n\n _this.setState(state);\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getUpdatedProps\", function () {\n var menuPlacement = _this.props.menuPlacement;\n var placement = _this.state.placement || coercePlacement(menuPlacement);\n return _objectSpread({}, _this.props, {\n placement: placement,\n maxHeight: _this.state.maxHeight\n });\n });\n\n return _this;\n }\n\n _createClass(MenuPlacer, [{\n key: \"render\",\n value: function render() {\n var children = this.props.children;\n return children({\n ref: this.getPlacement,\n placerProps: this.getUpdatedProps()\n });\n }\n }]);\n\n return MenuPlacer;\n}(Component);\n\n_defineProperty(MenuPlacer, \"contextTypes\", {\n getPortalPlacement: PropTypes.func\n});\n\nvar Menu = function Menu(props) {\n var children = props.children,\n className = props.className,\n cx = props.cx,\n getStyles = props.getStyles,\n innerRef = props.innerRef,\n innerProps = props.innerProps;\n return jsx(\"div\", _extends({\n css: getStyles('menu', props),\n className: cx({\n menu: true\n }, className)\n }, innerProps, {\n ref: innerRef\n }), children);\n};\n// Menu List\n// ==============================\n\nvar menuListCSS = function menuListCSS(_ref4) {\n var maxHeight = _ref4.maxHeight,\n baseUnit = _ref4.theme.spacing.baseUnit;\n return {\n maxHeight: maxHeight,\n overflowY: 'auto',\n paddingBottom: baseUnit,\n paddingTop: baseUnit,\n position: 'relative',\n // required for offset[Height, Top] > keyboard scroll\n WebkitOverflowScrolling: 'touch'\n };\n};\nvar MenuList = function MenuList(props) {\n var children = props.children,\n className = props.className,\n cx = props.cx,\n getStyles = props.getStyles,\n isMulti = props.isMulti,\n innerRef = props.innerRef;\n return jsx(\"div\", {\n css: getStyles('menuList', props),\n className: cx({\n 'menu-list': true,\n 'menu-list--is-multi': isMulti\n }, className),\n ref: innerRef\n }, children);\n}; // ==============================\n// Menu Notices\n// ==============================\n\nvar noticeCSS = function noticeCSS(_ref5) {\n var _ref5$theme = _ref5.theme,\n baseUnit = _ref5$theme.spacing.baseUnit,\n colors = _ref5$theme.colors;\n return {\n color: colors.neutral40,\n padding: \"\".concat(baseUnit * 2, \"px \").concat(baseUnit * 3, \"px\"),\n textAlign: 'center'\n };\n};\n\nvar noOptionsMessageCSS = noticeCSS;\nvar loadingMessageCSS = noticeCSS;\nvar NoOptionsMessage = function NoOptionsMessage(props) {\n var children = props.children,\n className = props.className,\n cx = props.cx,\n getStyles = props.getStyles,\n innerProps = props.innerProps;\n return jsx(\"div\", _extends({\n css: getStyles('noOptionsMessage', props),\n className: cx({\n 'menu-notice': true,\n 'menu-notice--no-options': true\n }, className)\n }, innerProps), children);\n};\nNoOptionsMessage.defaultProps = {\n children: 'No options'\n};\nvar LoadingMessage = function LoadingMessage(props) {\n var children = props.children,\n className = props.className,\n cx = props.cx,\n getStyles = props.getStyles,\n innerProps = props.innerProps;\n return jsx(\"div\", _extends({\n css: getStyles('loadingMessage', props),\n className: cx({\n 'menu-notice': true,\n 'menu-notice--loading': true\n }, className)\n }, innerProps), children);\n};\nLoadingMessage.defaultProps = {\n children: 'Loading...'\n}; // ==============================\n// Menu Portal\n// ==============================\n\nvar menuPortalCSS = function menuPortalCSS(_ref6) {\n var rect = _ref6.rect,\n offset = _ref6.offset,\n position = _ref6.position;\n return {\n left: rect.left,\n position: position,\n top: offset,\n width: rect.width,\n zIndex: 1\n };\n};\nvar MenuPortal =\n/*#__PURE__*/\nfunction (_Component2) {\n _inherits(MenuPortal, _Component2);\n\n function MenuPortal() {\n var _getPrototypeOf3;\n\n var _this2;\n\n _classCallCheck(this, MenuPortal);\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n _this2 = _possibleConstructorReturn(this, (_getPrototypeOf3 = _getPrototypeOf(MenuPortal)).call.apply(_getPrototypeOf3, [this].concat(args)));\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this2)), \"state\", {\n placement: null\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this2)), \"getPortalPlacement\", function (_ref7) {\n var placement = _ref7.placement;\n var initialPlacement = coercePlacement(_this2.props.menuPlacement); // avoid re-renders if the placement has not changed\n\n if (placement !== initialPlacement) {\n _this2.setState({\n placement: placement\n });\n }\n });\n\n return _this2;\n }\n\n _createClass(MenuPortal, [{\n key: \"getChildContext\",\n value: function getChildContext() {\n return {\n getPortalPlacement: this.getPortalPlacement\n };\n } // callback for occassions where the menu must \"flip\"\n\n }, {\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n appendTo = _this$props2.appendTo,\n children = _this$props2.children,\n controlElement = _this$props2.controlElement,\n menuPlacement = _this$props2.menuPlacement,\n position = _this$props2.menuPosition,\n getStyles = _this$props2.getStyles;\n var isFixed = position === 'fixed'; // bail early if required elements aren't present\n\n if (!appendTo && !isFixed || !controlElement) {\n return null;\n }\n\n var placement = this.state.placement || coercePlacement(menuPlacement);\n var rect = getBoundingClientObj(controlElement);\n var scrollDistance = isFixed ? 0 : window.pageYOffset;\n var offset = rect[placement] + scrollDistance;\n var state = {\n offset: offset,\n position: position,\n rect: rect\n }; // same wrapper element whether fixed or portalled\n\n var menuWrapper = jsx(\"div\", {\n css: getStyles('menuPortal', state)\n }, children);\n return appendTo ? createPortal(menuWrapper, appendTo) : menuWrapper;\n }\n }]);\n\n return MenuPortal;\n}(Component);\n\n_defineProperty(MenuPortal, \"childContextTypes\", {\n getPortalPlacement: PropTypes.func\n});\n\nvar isArray = Array.isArray;\nvar keyList = Object.keys;\nvar hasProp = Object.prototype.hasOwnProperty;\n\nfunction equal(a, b) {\n // fast-deep-equal index.js 2.0.1\n if (a === b) return true;\n\n if (a && b && _typeof(a) == 'object' && _typeof(b) == 'object') {\n var arrA = isArray(a),\n arrB = isArray(b),\n i,\n length,\n key;\n\n if (arrA && arrB) {\n length = a.length;\n if (length != b.length) return false;\n\n for (i = length; i-- !== 0;) {\n if (!equal(a[i], b[i])) return false;\n }\n\n return true;\n }\n\n if (arrA != arrB) return false;\n var dateA = a instanceof Date,\n dateB = b instanceof Date;\n if (dateA != dateB) return false;\n if (dateA && dateB) return a.getTime() == b.getTime();\n var regexpA = a instanceof RegExp,\n regexpB = b instanceof RegExp;\n if (regexpA != regexpB) return false;\n if (regexpA && regexpB) return a.toString() == b.toString();\n var keys = keyList(a);\n length = keys.length;\n\n if (length !== keyList(b).length) {\n return false;\n }\n\n for (i = length; i-- !== 0;) {\n if (!hasProp.call(b, keys[i])) return false;\n } // end fast-deep-equal\n // Custom handling for React\n\n\n for (i = length; i-- !== 0;) {\n key = keys[i];\n\n if (key === '_owner' && a.$$typeof) {\n // React-specific: avoid traversing React elements' _owner.\n // _owner contains circular references\n // and is not needed when comparing the actual elements (and not their owners)\n // .$$typeof and ._store on just reasonable markers of a react element\n continue;\n } else {\n // all other properties should be traversed as usual\n if (!equal(a[key], b[key])) return false;\n }\n } // fast-deep-equal index.js 2.0.1\n\n\n return true;\n }\n\n return a !== a && b !== b;\n} // end fast-deep-equal\n\n\nfunction exportedEqual(a, b) {\n try {\n return equal(a, b);\n } catch (error) {\n if (error.message && error.message.match(/stack|recursion/i)) {\n // warn on circular references, don't crash\n // browsers give this different errors name and messages:\n // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\n // firefox: \"InternalError\", too much recursion\"\n // edge: \"Error\", \"Out of stack space\"\n console.warn('Warning: react-fast-compare does not handle circular references.', error.name, error.message);\n return false;\n } // some other error. we should definitely know about these\n\n\n throw error;\n }\n}\n\nvar containerCSS = function containerCSS(_ref) {\n var isDisabled = _ref.isDisabled,\n isRtl = _ref.isRtl;\n return {\n label: 'container',\n direction: isRtl ? 'rtl' : null,\n pointerEvents: isDisabled ? 'none' : null,\n // cancel mouse events when disabled\n position: 'relative'\n };\n};\nvar SelectContainer = function SelectContainer(props) {\n var children = props.children,\n className = props.className,\n cx = props.cx,\n getStyles = props.getStyles,\n innerProps = props.innerProps,\n isDisabled = props.isDisabled,\n isRtl = props.isRtl;\n return jsx(\"div\", _extends({\n css: getStyles('container', props),\n className: cx({\n '--is-disabled': isDisabled,\n '--is-rtl': isRtl\n }, className)\n }, innerProps), children);\n}; // ==============================\n// Value Container\n// ==============================\n\nvar valueContainerCSS = function valueContainerCSS(_ref2) {\n var spacing = _ref2.theme.spacing;\n return {\n alignItems: 'center',\n display: 'flex',\n flex: 1,\n flexWrap: 'wrap',\n padding: \"\".concat(spacing.baseUnit / 2, \"px \").concat(spacing.baseUnit * 2, \"px\"),\n WebkitOverflowScrolling: 'touch',\n position: 'relative',\n overflow: 'hidden'\n };\n};\nvar ValueContainer =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(ValueContainer, _Component);\n\n function ValueContainer() {\n _classCallCheck(this, ValueContainer);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(ValueContainer).apply(this, arguments));\n }\n\n _createClass(ValueContainer, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n children = _this$props.children,\n className = _this$props.className,\n cx = _this$props.cx,\n isMulti = _this$props.isMulti,\n getStyles = _this$props.getStyles,\n hasValue = _this$props.hasValue;\n return jsx(\"div\", {\n css: getStyles('valueContainer', this.props),\n className: cx({\n 'value-container': true,\n 'value-container--is-multi': isMulti,\n 'value-container--has-value': hasValue\n }, className)\n }, children);\n }\n }]);\n\n return ValueContainer;\n}(Component); // ==============================\n// Indicator Container\n// ==============================\n\nvar indicatorsContainerCSS = function indicatorsContainerCSS() {\n return {\n alignItems: 'center',\n alignSelf: 'stretch',\n display: 'flex',\n flexShrink: 0\n };\n};\nvar IndicatorsContainer = function IndicatorsContainer(props) {\n var children = props.children,\n className = props.className,\n cx = props.cx,\n getStyles = props.getStyles;\n return jsx(\"div\", {\n css: getStyles('indicatorsContainer', props),\n className: cx({\n indicators: true\n }, className)\n }, children);\n};\n\nfunction _templateObject() {\n var data = _taggedTemplateLiteral([\"\\n 0%, 80%, 100% { opacity: 0; }\\n 40% { opacity: 1; }\\n\"]);\n\n _templateObject = function _templateObject() {\n return data;\n };\n\n return data;\n}\n\nvar _ref2 = process.env.NODE_ENV === \"production\" ? {\n name: \"19bqh2r\",\n styles: \"display:inline-block;fill:currentColor;line-height:1;stroke:currentColor;stroke-width:0;\"\n} : {\n name: \"19bqh2r\",\n styles: \"display:inline-block;fill:currentColor;line-height:1;stroke:currentColor;stroke-width:0;\",\n map: \"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGljYXRvcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBa0JJIiwiZmlsZSI6ImluZGljYXRvcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuLyoqIEBqc3gganN4ICovXG5pbXBvcnQgeyB0eXBlIE5vZGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3gsIGtleWZyYW1lcyB9IGZyb20gJ0BlbW90aW9uL2NvcmUnO1xuXG5pbXBvcnQgdHlwZSB7IENvbW1vblByb3BzLCBUaGVtZSB9IGZyb20gJy4uL3R5cGVzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEcm9wZG93biAmIENsZWFyIEljb25zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgU3ZnID0gKHsgc2l6ZSwgLi4ucHJvcHMgfTogeyBzaXplOiBudW1iZXIgfSkgPT4gKFxuICA8c3ZnXG4gICAgaGVpZ2h0PXtzaXplfVxuICAgIHdpZHRoPXtzaXplfVxuICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIlxuICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgZm9jdXNhYmxlPVwiZmFsc2VcIlxuICAgIGNzcz17e1xuICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgICBmaWxsOiAnY3VycmVudENvbG9yJyxcbiAgICAgIGxpbmVIZWlnaHQ6IDEsXG4gICAgICBzdHJva2U6ICdjdXJyZW50Q29sb3InLFxuICAgICAgc3Ryb2tlV2lkdGg6IDAsXG4gICAgfX1cbiAgICB7Li4ucHJvcHN9XG4gIC8+XG4pO1xuXG5leHBvcnQgY29uc3QgQ3Jvc3NJY29uID0gKHByb3BzOiBhbnkpID0+IChcbiAgPFN2ZyBzaXplPXsyMH0gey4uLnByb3BzfT5cbiAgICA8cGF0aCBkPVwiTTE0LjM0OCAxNC44NDljLTAuNDY5IDAuNDY5LTEuMjI5IDAuNDY5LTEuNjk3IDBsLTIuNjUxLTMuMDMwLTIuNjUxIDMuMDI5Yy0wLjQ2OSAwLjQ2OS0xLjIyOSAwLjQ2OS0xLjY5NyAwLTAuNDY5LTAuNDY5LTAuNDY5LTEuMjI5IDAtMS42OTdsMi43NTgtMy4xNS0yLjc1OS0zLjE1MmMtMC40NjktMC40NjktMC40NjktMS4yMjggMC0xLjY5N3MxLjIyOC0wLjQ2OSAxLjY5NyAwbDIuNjUyIDMuMDMxIDIuNjUxLTMuMDMxYzAuNDY5LTAuNDY5IDEuMjI4LTAuNDY5IDEuNjk3IDBzMC40NjkgMS4yMjkgMCAxLjY5N2wtMi43NTggMy4xNTIgMi43NTggMy4xNWMwLjQ2OSAwLjQ2OSAwLjQ2OSAxLjIyOSAwIDEuNjk4elwiIC8+XG4gIDwvU3ZnPlxuKTtcbmV4cG9ydCBjb25zdCBEb3duQ2hldnJvbiA9IChwcm9wczogYW55KSA9PiAoXG4gIDxTdmcgc2l6ZT17MjB9IHsuLi5wcm9wc30+XG4gICAgPHBhdGggZD1cIk00LjUxNiA3LjU0OGMwLjQzNi0wLjQ0NiAxLjA0My0wLjQ4MSAxLjU3NiAwbDMuOTA4IDMuNzQ3IDMuOTA4LTMuNzQ3YzAuNTMzLTAuNDgxIDEuMTQxLTAuNDQ2IDEuNTc0IDAgMC40MzYgMC40NDUgMC40MDggMS4xOTcgMCAxLjYxNS0wLjQwNiAwLjQxOC00LjY5NSA0LjUwMi00LjY5NSA0LjUwMi0wLjIxNyAwLjIyMy0wLjUwMiAwLjMzNS0wLjc4NyAwLjMzNXMtMC41Ny0wLjExMi0wLjc4OS0wLjMzNWMwIDAtNC4yODctNC4wODQtNC42OTUtNC41MDJzLTAuNDM2LTEuMTcgMC0xLjYxNXpcIiAvPlxuICA8L1N2Zz5cbik7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRHJvcGRvd24gJiBDbGVhciBCdXR0b25zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IHR5cGUgSW5kaWNhdG9yUHJvcHMgPSBDb21tb25Qcm9wcyAmIHtcbiAgLyoqIFRoZSBjaGlsZHJlbiB0byBiZSByZW5kZXJlZCBpbnNpZGUgdGhlIGluZGljYXRvci4gKi9cbiAgY2hpbGRyZW46IE5vZGUsXG4gIC8qKiBQcm9wcyB0aGF0IHdpbGwgYmUgcGFzc2VkIG9uIHRvIHRoZSBjaGlsZHJlbi4gKi9cbiAgaW5uZXJQcm9wczogYW55LFxuICAvKiogVGhlIGZvY3VzZWQgc3RhdGUgb2YgdGhlIHNlbGVjdC4gKi9cbiAgaXNGb2N1c2VkOiBib29sZWFuLFxuICAvKiogV2hldGhlciB0aGUgdGV4dCBpcyByaWdodCB0byBsZWZ0ICovXG4gIGlzUnRsOiBib29sZWFuLFxufTtcblxuY29uc3QgYmFzZUNTUyA9ICh7XG4gIGlzRm9jdXNlZCxcbiAgdGhlbWU6IHtcbiAgICBzcGFjaW5nOiB7IGJhc2VVbml0IH0sXG4gICAgY29sb3JzLFxuICB9LFxufTogSW5kaWNhdG9yUHJvcHMpID0+ICh7XG4gIGxhYmVsOiAnaW5kaWNhdG9yQ29udGFpbmVyJyxcbiAgY29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5uZXV0cmFsNjAgOiBjb2xvcnMubmV1dHJhbDIwLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIHBhZGRpbmc6IGJhc2VVbml0ICogMixcbiAgdHJhbnNpdGlvbjogJ2NvbG9yIDE1MG1zJyxcblxuICAnOmhvdmVyJzoge1xuICAgIGNvbG9yOiBpc0ZvY3VzZWQgPyBjb2xvcnMubmV1dHJhbDgwIDogY29sb3JzLm5ldXRyYWw0MCxcbiAgfSxcbn0pO1xuXG5leHBvcnQgY29uc3QgZHJvcGRvd25JbmRpY2F0b3JDU1MgPSBiYXNlQ1NTO1xuZXhwb3J0IGNvbnN0IERyb3Bkb3duSW5kaWNhdG9yID0gKHByb3BzOiBJbmRpY2F0b3JQcm9wcykgPT4ge1xuICBjb25zdCB7IGNoaWxkcmVuLCBjbGFzc05hbWUsIGN4LCBnZXRTdHlsZXMsIGlubmVyUHJvcHMgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHsuLi5pbm5lclByb3BzfVxuICAgICAgY3NzPXtnZXRTdHlsZXMoJ2Ryb3Bkb3duSW5kaWNhdG9yJywgcHJvcHMpfVxuICAgICAgY2xhc3NOYW1lPXtjeChcbiAgICAgICAge1xuICAgICAgICAgIGluZGljYXRvcjogdHJ1ZSxcbiAgICAgICAgICAnZHJvcGRvd24taW5kaWNhdG9yJzogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbiB8fCA8RG93bkNoZXZyb24gLz59XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgY2xlYXJJbmRpY2F0b3JDU1MgPSBiYXNlQ1NTO1xuZXhwb3J0IGNvbnN0IENsZWFySW5kaWNhdG9yID0gKHByb3BzOiBJbmRpY2F0b3JQcm9wcykgPT4ge1xuICBjb25zdCB7IGNoaWxkcmVuLCBjbGFzc05hbWUsIGN4LCBnZXRTdHlsZXMsIGlubmVyUHJvcHMgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHsuLi5pbm5lclByb3BzfVxuICAgICAgY3NzPXtnZXRTdHlsZXMoJ2NsZWFySW5kaWNhdG9yJywgcHJvcHMpfVxuICAgICAgY2xhc3NOYW1lPXtjeChcbiAgICAgICAge1xuICAgICAgICAgIGluZGljYXRvcjogdHJ1ZSxcbiAgICAgICAgICAnY2xlYXItaW5kaWNhdG9yJzogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbiB8fCA8Q3Jvc3NJY29uIC8+fVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTZXBhcmF0b3Jcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG50eXBlIFNlcGFyYXRvclN0YXRlID0geyBpc0Rpc2FibGVkOiBib29sZWFuIH07XG5cbmV4cG9ydCBjb25zdCBpbmRpY2F0b3JTZXBhcmF0b3JDU1MgPSAoe1xuICBpc0Rpc2FibGVkLFxuICB0aGVtZToge1xuICAgIHNwYWNpbmc6IHsgYmFzZVVuaXQgfSxcbiAgICBjb2xvcnMsXG4gIH0sXG59OiBDb21tb25Qcm9wcyAmIFNlcGFyYXRvclN0YXRlKSA9PiAoe1xuICBsYWJlbDogJ2luZGljYXRvclNlcGFyYXRvcicsXG4gIGFsaWduU2VsZjogJ3N0cmV0Y2gnLFxuICBiYWNrZ3JvdW5kQ29sb3I6IGlzRGlzYWJsZWQgPyBjb2xvcnMubmV1dHJhbDEwIDogY29sb3JzLm5ldXRyYWwyMCxcbiAgbWFyZ2luQm90dG9tOiBiYXNlVW5pdCAqIDIsXG4gIG1hcmdpblRvcDogYmFzZVVuaXQgKiAyLFxuICB3aWR0aDogMSxcbn0pO1xuXG5leHBvcnQgY29uc3QgSW5kaWNhdG9yU2VwYXJhdG9yID0gKHByb3BzOiBJbmRpY2F0b3JQcm9wcykgPT4ge1xuICBjb25zdCB7IGNsYXNzTmFtZSwgY3gsIGdldFN0eWxlcywgaW5uZXJQcm9wcyB9ID0gcHJvcHM7XG4gIHJldHVybiAoXG4gICAgPHNwYW5cbiAgICAgIHsuLi5pbm5lclByb3BzfVxuICAgICAgY3NzPXtnZXRTdHlsZXMoJ2luZGljYXRvclNlcGFyYXRvcicsIHByb3BzKX1cbiAgICAgIGNsYXNzTmFtZT17Y3goeyAnaW5kaWNhdG9yLXNlcGFyYXRvcic6IHRydWUgfSwgY2xhc3NOYW1lKX1cbiAgICAvPlxuICApO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBMb2FkaW5nXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgbG9hZGluZ0RvdEFuaW1hdGlvbnMgPSBrZXlmcmFtZXNgXG4gIDAlLCA4MCUsIDEwMCUgeyBvcGFjaXR5OiAwOyB9XG4gIDQwJSB7IG9wYWNpdHk6IDE7IH1cbmA7XG5cbmV4cG9ydCBjb25zdCBsb2FkaW5nSW5kaWNhdG9yQ1NTID0gKHtcbiAgaXNGb2N1c2VkLFxuICBzaXplLFxuICB0aGVtZToge1xuICAgIGNvbG9ycyxcbiAgICBzcGFjaW5nOiB7IGJhc2VVbml0IH0sXG4gIH0sXG59OiB7XG4gIGlzRm9jdXNlZDogYm9vbGVhbixcbiAgc2l6ZTogbnVtYmVyLFxuICB0aGVtZTogVGhlbWUsXG59KSA9PiAoe1xuICBsYWJlbDogJ2xvYWRpbmdJbmRpY2F0b3InLFxuICBjb2xvcjogaXNGb2N1c2VkID8gY29sb3JzLm5ldXRyYWw2MCA6IGNvbG9ycy5uZXV0cmFsMjAsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgcGFkZGluZzogYmFzZVVuaXQgKiAyLFxuICB0cmFuc2l0aW9uOiAnY29sb3IgMTUwbXMnLFxuICBhbGlnblNlbGY6ICdjZW50ZXInLFxuICBmb250U2l6ZTogc2l6ZSxcbiAgbGluZUhlaWdodDogMSxcbiAgbWFyZ2luUmlnaHQ6IHNpemUsXG4gIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxufSk7XG5cbnR5cGUgRG90UHJvcHMgPSB7IGRlbGF5OiBudW1iZXIsIG9mZnNldDogYm9vbGVhbiB9O1xuY29uc3QgTG9hZGluZ0RvdCA9ICh7IGRlbGF5LCBvZmZzZXQgfTogRG90UHJvcHMpID0+IChcbiAgPHNwYW5cbiAgICBjc3M9e3tcbiAgICAgIGFuaW1hdGlvbjogYCR7bG9hZGluZ0RvdEFuaW1hdGlvbnN9IDFzIGVhc2UtaW4tb3V0ICR7ZGVsYXl9bXMgaW5maW5pdGU7YCxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJ2N1cnJlbnRDb2xvcicsXG4gICAgICBib3JkZXJSYWRpdXM6ICcxZW0nLFxuICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgICBtYXJnaW5MZWZ0OiBvZmZzZXQgPyAnMWVtJyA6IG51bGwsXG4gICAgICBoZWlnaHQ6ICcxZW0nLFxuICAgICAgdmVydGljYWxBbGlnbjogJ3RvcCcsXG4gICAgICB3aWR0aDogJzFlbScsXG4gICAgfX1cbiAgLz5cbik7XG5cbmV4cG9ydCB0eXBlIExvYWRpbmdJY29uUHJvcHMgPSB7XG4gIC8qKiBQcm9wcyB0aGF0IHdpbGwgYmUgcGFzc2VkIG9uIHRvIHRoZSBjaGlsZHJlbi4gKi9cbiAgaW5uZXJQcm9wczogYW55LFxuICAvKiogVGhlIGZvY3VzZWQgc3RhdGUgb2YgdGhlIHNlbGVjdC4gKi9cbiAgaXNGb2N1c2VkOiBib29sZWFuLFxuICAvKiogV2hldGhlciB0aGUgdGV4dCBpcyByaWdodCB0byBsZWZ0ICovXG4gIGlzUnRsOiBib29sZWFuLFxufSAmIENvbW1vblByb3BzICYge1xuICAgIC8qKiBTZXQgc2l6ZSBvZiB0aGUgY29udGFpbmVyLiAqL1xuICAgIHNpemU6IG51bWJlcixcbiAgfTtcbmV4cG9ydCBjb25zdCBMb2FkaW5nSW5kaWNhdG9yID0gKHByb3BzOiBMb2FkaW5nSWNvblByb3BzKSA9PiB7XG4gIGNvbnN0IHsgY2xhc3NOYW1lLCBjeCwgZ2V0U3R5bGVzLCBpbm5lclByb3BzLCBpc1J0bCB9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICB7Li4uaW5uZXJQcm9wc31cbiAgICAgIGNzcz17Z2V0U3R5bGVzKCdsb2FkaW5nSW5kaWNhdG9yJywgcHJvcHMpfVxuICAgICAgY2xhc3NOYW1lPXtjeChcbiAgICAgICAge1xuICAgICAgICAgIGluZGljYXRvcjogdHJ1ZSxcbiAgICAgICAgICAnbG9hZGluZy1pbmRpY2F0b3InOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgPlxuICAgICAgPExvYWRpbmdEb3QgZGVsYXk9ezB9IG9mZnNldD17aXNSdGx9IC8+XG4gICAgICA8TG9hZGluZ0RvdCBkZWxheT17MTYwfSBvZmZzZXQgLz5cbiAgICAgIDxMb2FkaW5nRG90IGRlbGF5PXszMjB9IG9mZnNldD17IWlzUnRsfSAvPlxuICAgIDwvZGl2PlxuICApO1xufTtcbkxvYWRpbmdJbmRpY2F0b3IuZGVmYXVsdFByb3BzID0geyBzaXplOiA0IH07XG4iXX0= */\"\n};\n\n// ==============================\n// Dropdown & Clear Icons\n// ==============================\nvar Svg = function Svg(_ref) {\n var size = _ref.size,\n props = _objectWithoutProperties(_ref, [\"size\"]);\n\n return jsx(\"svg\", _extends({\n height: size,\n width: size,\n viewBox: \"0 0 20 20\",\n \"aria-hidden\": \"true\",\n focusable: \"false\",\n css: _ref2\n }, props));\n};\n\nvar CrossIcon = function CrossIcon(props) {\n return jsx(Svg, _extends({\n size: 20\n }, props), jsx(\"path\", {\n d: \"M14.348 14.849c-0.469 0.469-1.229 0.469-1.697 0l-2.651-3.030-2.651 3.029c-0.469 0.469-1.229 0.469-1.697 0-0.469-0.469-0.469-1.229 0-1.697l2.758-3.15-2.759-3.152c-0.469-0.469-0.469-1.228 0-1.697s1.228-0.469 1.697 0l2.652 3.031 2.651-3.031c0.469-0.469 1.228-0.469 1.697 0s0.469 1.229 0 1.697l-2.758 3.152 2.758 3.15c0.469 0.469 0.469 1.229 0 1.698z\"\n }));\n};\nvar DownChevron = function DownChevron(props) {\n return jsx(Svg, _extends({\n size: 20\n }, props), jsx(\"path\", {\n d: \"M4.516 7.548c0.436-0.446 1.043-0.481 1.576 0l3.908 3.747 3.908-3.747c0.533-0.481 1.141-0.446 1.574 0 0.436 0.445 0.408 1.197 0 1.615-0.406 0.418-4.695 4.502-4.695 4.502-0.217 0.223-0.502 0.335-0.787 0.335s-0.57-0.112-0.789-0.335c0 0-4.287-4.084-4.695-4.502s-0.436-1.17 0-1.615z\"\n }));\n}; // ==============================\n// Dropdown & Clear Buttons\n// ==============================\n\nvar baseCSS = function baseCSS(_ref3) {\n var isFocused = _ref3.isFocused,\n _ref3$theme = _ref3.theme,\n baseUnit = _ref3$theme.spacing.baseUnit,\n colors = _ref3$theme.colors;\n return {\n label: 'indicatorContainer',\n color: isFocused ? colors.neutral60 : colors.neutral20,\n display: 'flex',\n padding: baseUnit * 2,\n transition: 'color 150ms',\n ':hover': {\n color: isFocused ? colors.neutral80 : colors.neutral40\n }\n };\n};\n\nvar dropdownIndicatorCSS = baseCSS;\nvar DropdownIndicator = function DropdownIndicator(props) {\n var children = props.children,\n className = props.className,\n cx = props.cx,\n getStyles = props.getStyles,\n innerProps = props.innerProps;\n return jsx(\"div\", _extends({}, innerProps, {\n css: getStyles('dropdownIndicator', props),\n className: cx({\n indicator: true,\n 'dropdown-indicator': true\n }, className)\n }), children || jsx(DownChevron, null));\n};\nvar clearIndicatorCSS = baseCSS;\nvar ClearIndicator = function ClearIndicator(props) {\n var children = props.children,\n className = props.className,\n cx = props.cx,\n getStyles = props.getStyles,\n innerProps = props.innerProps;\n return jsx(\"div\", _extends({}, innerProps, {\n css: getStyles('clearIndicator', props),\n className: cx({\n indicator: true,\n 'clear-indicator': true\n }, className)\n }), children || jsx(CrossIcon, null));\n}; // ==============================\n// Separator\n// ==============================\n\nvar indicatorSeparatorCSS = function indicatorSeparatorCSS(_ref4) {\n var isDisabled = _ref4.isDisabled,\n _ref4$theme = _ref4.theme,\n baseUnit = _ref4$theme.spacing.baseUnit,\n colors = _ref4$theme.colors;\n return {\n label: 'indicatorSeparator',\n alignSelf: 'stretch',\n backgroundColor: isDisabled ? colors.neutral10 : colors.neutral20,\n marginBottom: baseUnit * 2,\n marginTop: baseUnit * 2,\n width: 1\n };\n};\nvar IndicatorSeparator = function IndicatorSeparator(props) {\n var className = props.className,\n cx = props.cx,\n getStyles = props.getStyles,\n innerProps = props.innerProps;\n return jsx(\"span\", _extends({}, innerProps, {\n css: getStyles('indicatorSeparator', props),\n className: cx({\n 'indicator-separator': true\n }, className)\n }));\n}; // ==============================\n// Loading\n// ==============================\n\nvar loadingDotAnimations = keyframes(_templateObject());\nvar loadingIndicatorCSS = function loadingIndicatorCSS(_ref5) {\n var isFocused = _ref5.isFocused,\n size = _ref5.size,\n _ref5$theme = _ref5.theme,\n colors = _ref5$theme.colors,\n baseUnit = _ref5$theme.spacing.baseUnit;\n return {\n label: 'loadingIndicator',\n color: isFocused ? colors.neutral60 : colors.neutral20,\n display: 'flex',\n padding: baseUnit * 2,\n transition: 'color 150ms',\n alignSelf: 'center',\n fontSize: size,\n lineHeight: 1,\n marginRight: size,\n textAlign: 'center',\n verticalAlign: 'middle'\n };\n};\n\nvar LoadingDot = function LoadingDot(_ref6) {\n var delay = _ref6.delay,\n offset = _ref6.offset;\n return jsx(\"span\", {\n css:\n /*#__PURE__*/\n _css({\n animation: \"\".concat(loadingDotAnimations, \" 1s ease-in-out \").concat(delay, \"ms infinite;\"),\n backgroundColor: 'currentColor',\n borderRadius: '1em',\n display: 'inline-block',\n marginLeft: offset ? '1em' : null,\n height: '1em',\n verticalAlign: 'top',\n width: '1em'\n }, process.env.NODE_ENV === \"production\" ? \"\" : \"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGljYXRvcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBc0xJIiwiZmlsZSI6ImluZGljYXRvcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuLyoqIEBqc3gganN4ICovXG5pbXBvcnQgeyB0eXBlIE5vZGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3gsIGtleWZyYW1lcyB9IGZyb20gJ0BlbW90aW9uL2NvcmUnO1xuXG5pbXBvcnQgdHlwZSB7IENvbW1vblByb3BzLCBUaGVtZSB9IGZyb20gJy4uL3R5cGVzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEcm9wZG93biAmIENsZWFyIEljb25zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgU3ZnID0gKHsgc2l6ZSwgLi4ucHJvcHMgfTogeyBzaXplOiBudW1iZXIgfSkgPT4gKFxuICA8c3ZnXG4gICAgaGVpZ2h0PXtzaXplfVxuICAgIHdpZHRoPXtzaXplfVxuICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIlxuICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgZm9jdXNhYmxlPVwiZmFsc2VcIlxuICAgIGNzcz17e1xuICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgICBmaWxsOiAnY3VycmVudENvbG9yJyxcbiAgICAgIGxpbmVIZWlnaHQ6IDEsXG4gICAgICBzdHJva2U6ICdjdXJyZW50Q29sb3InLFxuICAgICAgc3Ryb2tlV2lkdGg6IDAsXG4gICAgfX1cbiAgICB7Li4ucHJvcHN9XG4gIC8+XG4pO1xuXG5leHBvcnQgY29uc3QgQ3Jvc3NJY29uID0gKHByb3BzOiBhbnkpID0+IChcbiAgPFN2ZyBzaXplPXsyMH0gey4uLnByb3BzfT5cbiAgICA8cGF0aCBkPVwiTTE0LjM0OCAxNC44NDljLTAuNDY5IDAuNDY5LTEuMjI5IDAuNDY5LTEuNjk3IDBsLTIuNjUxLTMuMDMwLTIuNjUxIDMuMDI5Yy0wLjQ2OSAwLjQ2OS0xLjIyOSAwLjQ2OS0xLjY5NyAwLTAuNDY5LTAuNDY5LTAuNDY5LTEuMjI5IDAtMS42OTdsMi43NTgtMy4xNS0yLjc1OS0zLjE1MmMtMC40NjktMC40NjktMC40NjktMS4yMjggMC0xLjY5N3MxLjIyOC0wLjQ2OSAxLjY5NyAwbDIuNjUyIDMuMDMxIDIuNjUxLTMuMDMxYzAuNDY5LTAuNDY5IDEuMjI4LTAuNDY5IDEuNjk3IDBzMC40NjkgMS4yMjkgMCAxLjY5N2wtMi43NTggMy4xNTIgMi43NTggMy4xNWMwLjQ2OSAwLjQ2OSAwLjQ2OSAxLjIyOSAwIDEuNjk4elwiIC8+XG4gIDwvU3ZnPlxuKTtcbmV4cG9ydCBjb25zdCBEb3duQ2hldnJvbiA9IChwcm9wczogYW55KSA9PiAoXG4gIDxTdmcgc2l6ZT17MjB9IHsuLi5wcm9wc30+XG4gICAgPHBhdGggZD1cIk00LjUxNiA3LjU0OGMwLjQzNi0wLjQ0NiAxLjA0My0wLjQ4MSAxLjU3NiAwbDMuOTA4IDMuNzQ3IDMuOTA4LTMuNzQ3YzAuNTMzLTAuNDgxIDEuMTQxLTAuNDQ2IDEuNTc0IDAgMC40MzYgMC40NDUgMC40MDggMS4xOTcgMCAxLjYxNS0wLjQwNiAwLjQxOC00LjY5NSA0LjUwMi00LjY5NSA0LjUwMi0wLjIxNyAwLjIyMy0wLjUwMiAwLjMzNS0wLjc4NyAwLjMzNXMtMC41Ny0wLjExMi0wLjc4OS0wLjMzNWMwIDAtNC4yODctNC4wODQtNC42OTUtNC41MDJzLTAuNDM2LTEuMTcgMC0xLjYxNXpcIiAvPlxuICA8L1N2Zz5cbik7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRHJvcGRvd24gJiBDbGVhciBCdXR0b25zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IHR5cGUgSW5kaWNhdG9yUHJvcHMgPSBDb21tb25Qcm9wcyAmIHtcbiAgLyoqIFRoZSBjaGlsZHJlbiB0byBiZSByZW5kZXJlZCBpbnNpZGUgdGhlIGluZGljYXRvci4gKi9cbiAgY2hpbGRyZW46IE5vZGUsXG4gIC8qKiBQcm9wcyB0aGF0IHdpbGwgYmUgcGFzc2VkIG9uIHRvIHRoZSBjaGlsZHJlbi4gKi9cbiAgaW5uZXJQcm9wczogYW55LFxuICAvKiogVGhlIGZvY3VzZWQgc3RhdGUgb2YgdGhlIHNlbGVjdC4gKi9cbiAgaXNGb2N1c2VkOiBib29sZWFuLFxuICAvKiogV2hldGhlciB0aGUgdGV4dCBpcyByaWdodCB0byBsZWZ0ICovXG4gIGlzUnRsOiBib29sZWFuLFxufTtcblxuY29uc3QgYmFzZUNTUyA9ICh7XG4gIGlzRm9jdXNlZCxcbiAgdGhlbWU6IHtcbiAgICBzcGFjaW5nOiB7IGJhc2VVbml0IH0sXG4gICAgY29sb3JzLFxuICB9LFxufTogSW5kaWNhdG9yUHJvcHMpID0+ICh7XG4gIGxhYmVsOiAnaW5kaWNhdG9yQ29udGFpbmVyJyxcbiAgY29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5uZXV0cmFsNjAgOiBjb2xvcnMubmV1dHJhbDIwLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIHBhZGRpbmc6IGJhc2VVbml0ICogMixcbiAgdHJhbnNpdGlvbjogJ2NvbG9yIDE1MG1zJyxcblxuICAnOmhvdmVyJzoge1xuICAgIGNvbG9yOiBpc0ZvY3VzZWQgPyBjb2xvcnMubmV1dHJhbDgwIDogY29sb3JzLm5ldXRyYWw0MCxcbiAgfSxcbn0pO1xuXG5leHBvcnQgY29uc3QgZHJvcGRvd25JbmRpY2F0b3JDU1MgPSBiYXNlQ1NTO1xuZXhwb3J0IGNvbnN0IERyb3Bkb3duSW5kaWNhdG9yID0gKHByb3BzOiBJbmRpY2F0b3JQcm9wcykgPT4ge1xuICBjb25zdCB7IGNoaWxkcmVuLCBjbGFzc05hbWUsIGN4LCBnZXRTdHlsZXMsIGlubmVyUHJvcHMgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHsuLi5pbm5lclByb3BzfVxuICAgICAgY3NzPXtnZXRTdHlsZXMoJ2Ryb3Bkb3duSW5kaWNhdG9yJywgcHJvcHMpfVxuICAgICAgY2xhc3NOYW1lPXtjeChcbiAgICAgICAge1xuICAgICAgICAgIGluZGljYXRvcjogdHJ1ZSxcbiAgICAgICAgICAnZHJvcGRvd24taW5kaWNhdG9yJzogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbiB8fCA8RG93bkNoZXZyb24gLz59XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgY2xlYXJJbmRpY2F0b3JDU1MgPSBiYXNlQ1NTO1xuZXhwb3J0IGNvbnN0IENsZWFySW5kaWNhdG9yID0gKHByb3BzOiBJbmRpY2F0b3JQcm9wcykgPT4ge1xuICBjb25zdCB7IGNoaWxkcmVuLCBjbGFzc05hbWUsIGN4LCBnZXRTdHlsZXMsIGlubmVyUHJvcHMgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHsuLi5pbm5lclByb3BzfVxuICAgICAgY3NzPXtnZXRTdHlsZXMoJ2NsZWFySW5kaWNhdG9yJywgcHJvcHMpfVxuICAgICAgY2xhc3NOYW1lPXtjeChcbiAgICAgICAge1xuICAgICAgICAgIGluZGljYXRvcjogdHJ1ZSxcbiAgICAgICAgICAnY2xlYXItaW5kaWNhdG9yJzogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbiB8fCA8Q3Jvc3NJY29uIC8+fVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTZXBhcmF0b3Jcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG50eXBlIFNlcGFyYXRvclN0YXRlID0geyBpc0Rpc2FibGVkOiBib29sZWFuIH07XG5cbmV4cG9ydCBjb25zdCBpbmRpY2F0b3JTZXBhcmF0b3JDU1MgPSAoe1xuICBpc0Rpc2FibGVkLFxuICB0aGVtZToge1xuICAgIHNwYWNpbmc6IHsgYmFzZVVuaXQgfSxcbiAgICBjb2xvcnMsXG4gIH0sXG59OiBDb21tb25Qcm9wcyAmIFNlcGFyYXRvclN0YXRlKSA9PiAoe1xuICBsYWJlbDogJ2luZGljYXRvclNlcGFyYXRvcicsXG4gIGFsaWduU2VsZjogJ3N0cmV0Y2gnLFxuICBiYWNrZ3JvdW5kQ29sb3I6IGlzRGlzYWJsZWQgPyBjb2xvcnMubmV1dHJhbDEwIDogY29sb3JzLm5ldXRyYWwyMCxcbiAgbWFyZ2luQm90dG9tOiBiYXNlVW5pdCAqIDIsXG4gIG1hcmdpblRvcDogYmFzZVVuaXQgKiAyLFxuICB3aWR0aDogMSxcbn0pO1xuXG5leHBvcnQgY29uc3QgSW5kaWNhdG9yU2VwYXJhdG9yID0gKHByb3BzOiBJbmRpY2F0b3JQcm9wcykgPT4ge1xuICBjb25zdCB7IGNsYXNzTmFtZSwgY3gsIGdldFN0eWxlcywgaW5uZXJQcm9wcyB9ID0gcHJvcHM7XG4gIHJldHVybiAoXG4gICAgPHNwYW5cbiAgICAgIHsuLi5pbm5lclByb3BzfVxuICAgICAgY3NzPXtnZXRTdHlsZXMoJ2luZGljYXRvclNlcGFyYXRvcicsIHByb3BzKX1cbiAgICAgIGNsYXNzTmFtZT17Y3goeyAnaW5kaWNhdG9yLXNlcGFyYXRvcic6IHRydWUgfSwgY2xhc3NOYW1lKX1cbiAgICAvPlxuICApO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBMb2FkaW5nXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgbG9hZGluZ0RvdEFuaW1hdGlvbnMgPSBrZXlmcmFtZXNgXG4gIDAlLCA4MCUsIDEwMCUgeyBvcGFjaXR5OiAwOyB9XG4gIDQwJSB7IG9wYWNpdHk6IDE7IH1cbmA7XG5cbmV4cG9ydCBjb25zdCBsb2FkaW5nSW5kaWNhdG9yQ1NTID0gKHtcbiAgaXNGb2N1c2VkLFxuICBzaXplLFxuICB0aGVtZToge1xuICAgIGNvbG9ycyxcbiAgICBzcGFjaW5nOiB7IGJhc2VVbml0IH0sXG4gIH0sXG59OiB7XG4gIGlzRm9jdXNlZDogYm9vbGVhbixcbiAgc2l6ZTogbnVtYmVyLFxuICB0aGVtZTogVGhlbWUsXG59KSA9PiAoe1xuICBsYWJlbDogJ2xvYWRpbmdJbmRpY2F0b3InLFxuICBjb2xvcjogaXNGb2N1c2VkID8gY29sb3JzLm5ldXRyYWw2MCA6IGNvbG9ycy5uZXV0cmFsMjAsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgcGFkZGluZzogYmFzZVVuaXQgKiAyLFxuICB0cmFuc2l0aW9uOiAnY29sb3IgMTUwbXMnLFxuICBhbGlnblNlbGY6ICdjZW50ZXInLFxuICBmb250U2l6ZTogc2l6ZSxcbiAgbGluZUhlaWdodDogMSxcbiAgbWFyZ2luUmlnaHQ6IHNpemUsXG4gIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxufSk7XG5cbnR5cGUgRG90UHJvcHMgPSB7IGRlbGF5OiBudW1iZXIsIG9mZnNldDogYm9vbGVhbiB9O1xuY29uc3QgTG9hZGluZ0RvdCA9ICh7IGRlbGF5LCBvZmZzZXQgfTogRG90UHJvcHMpID0+IChcbiAgPHNwYW5cbiAgICBjc3M9e3tcbiAgICAgIGFuaW1hdGlvbjogYCR7bG9hZGluZ0RvdEFuaW1hdGlvbnN9IDFzIGVhc2UtaW4tb3V0ICR7ZGVsYXl9bXMgaW5maW5pdGU7YCxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJ2N1cnJlbnRDb2xvcicsXG4gICAgICBib3JkZXJSYWRpdXM6ICcxZW0nLFxuICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgICBtYXJnaW5MZWZ0OiBvZmZzZXQgPyAnMWVtJyA6IG51bGwsXG4gICAgICBoZWlnaHQ6ICcxZW0nLFxuICAgICAgdmVydGljYWxBbGlnbjogJ3RvcCcsXG4gICAgICB3aWR0aDogJzFlbScsXG4gICAgfX1cbiAgLz5cbik7XG5cbmV4cG9ydCB0eXBlIExvYWRpbmdJY29uUHJvcHMgPSB7XG4gIC8qKiBQcm9wcyB0aGF0IHdpbGwgYmUgcGFzc2VkIG9uIHRvIHRoZSBjaGlsZHJlbi4gKi9cbiAgaW5uZXJQcm9wczogYW55LFxuICAvKiogVGhlIGZvY3VzZWQgc3RhdGUgb2YgdGhlIHNlbGVjdC4gKi9cbiAgaXNGb2N1c2VkOiBib29sZWFuLFxuICAvKiogV2hldGhlciB0aGUgdGV4dCBpcyByaWdodCB0byBsZWZ0ICovXG4gIGlzUnRsOiBib29sZWFuLFxufSAmIENvbW1vblByb3BzICYge1xuICAgIC8qKiBTZXQgc2l6ZSBvZiB0aGUgY29udGFpbmVyLiAqL1xuICAgIHNpemU6IG51bWJlcixcbiAgfTtcbmV4cG9ydCBjb25zdCBMb2FkaW5nSW5kaWNhdG9yID0gKHByb3BzOiBMb2FkaW5nSWNvblByb3BzKSA9PiB7XG4gIGNvbnN0IHsgY2xhc3NOYW1lLCBjeCwgZ2V0U3R5bGVzLCBpbm5lclByb3BzLCBpc1J0bCB9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICB7Li4uaW5uZXJQcm9wc31cbiAgICAgIGNzcz17Z2V0U3R5bGVzKCdsb2FkaW5nSW5kaWNhdG9yJywgcHJvcHMpfVxuICAgICAgY2xhc3NOYW1lPXtjeChcbiAgICAgICAge1xuICAgICAgICAgIGluZGljYXRvcjogdHJ1ZSxcbiAgICAgICAgICAnbG9hZGluZy1pbmRpY2F0b3InOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgPlxuICAgICAgPExvYWRpbmdEb3QgZGVsYXk9ezB9IG9mZnNldD17aXNSdGx9IC8+XG4gICAgICA8TG9hZGluZ0RvdCBkZWxheT17MTYwfSBvZmZzZXQgLz5cbiAgICAgIDxMb2FkaW5nRG90IGRlbGF5PXszMjB9IG9mZnNldD17IWlzUnRsfSAvPlxuICAgIDwvZGl2PlxuICApO1xufTtcbkxvYWRpbmdJbmRpY2F0b3IuZGVmYXVsdFByb3BzID0geyBzaXplOiA0IH07XG4iXX0= */\")\n });\n};\n\nvar LoadingIndicator = function LoadingIndicator(props) {\n var className = props.className,\n cx = props.cx,\n getStyles = props.getStyles,\n innerProps = props.innerProps,\n isRtl = props.isRtl;\n return jsx(\"div\", _extends({}, innerProps, {\n css: getStyles('loadingIndicator', props),\n className: cx({\n indicator: true,\n 'loading-indicator': true\n }, className)\n }), jsx(LoadingDot, {\n delay: 0,\n offset: isRtl\n }), jsx(LoadingDot, {\n delay: 160,\n offset: true\n }), jsx(LoadingDot, {\n delay: 320,\n offset: !isRtl\n }));\n};\nLoadingIndicator.defaultProps = {\n size: 4\n};\n\nvar css = function css(_ref) {\n var isDisabled = _ref.isDisabled,\n isFocused = _ref.isFocused,\n _ref$theme = _ref.theme,\n colors = _ref$theme.colors,\n borderRadius = _ref$theme.borderRadius,\n spacing = _ref$theme.spacing;\n return {\n label: 'control',\n alignItems: 'center',\n backgroundColor: isDisabled ? colors.neutral5 : colors.neutral0,\n borderColor: isDisabled ? colors.neutral10 : isFocused ? colors.primary : colors.neutral20,\n borderRadius: borderRadius,\n borderStyle: 'solid',\n borderWidth: 1,\n boxShadow: isFocused ? \"0 0 0 1px \".concat(colors.primary) : null,\n cursor: 'default',\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'space-between',\n minHeight: spacing.controlHeight,\n outline: '0 !important',\n position: 'relative',\n transition: 'all 100ms',\n '&:hover': {\n borderColor: isFocused ? colors.primary : colors.neutral30\n }\n };\n};\n\nvar Control = function Control(props) {\n var children = props.children,\n cx = props.cx,\n getStyles = props.getStyles,\n className = props.className,\n isDisabled = props.isDisabled,\n isFocused = props.isFocused,\n innerRef = props.innerRef,\n innerProps = props.innerProps,\n menuIsOpen = props.menuIsOpen;\n return jsx(\"div\", _extends({\n ref: innerRef,\n css: getStyles('control', props),\n className: cx({\n control: true,\n 'control--is-disabled': isDisabled,\n 'control--is-focused': isFocused,\n 'control--menu-is-open': menuIsOpen\n }, className)\n }, innerProps), children);\n};\n\nvar groupCSS = function groupCSS(_ref) {\n var spacing = _ref.theme.spacing;\n return {\n paddingBottom: spacing.baseUnit * 2,\n paddingTop: spacing.baseUnit * 2\n };\n};\n\nvar Group = function Group(props) {\n var children = props.children,\n className = props.className,\n cx = props.cx,\n getStyles = props.getStyles,\n Heading = props.Heading,\n headingProps = props.headingProps,\n label = props.label,\n theme = props.theme,\n selectProps = props.selectProps;\n return jsx(\"div\", {\n css: getStyles('group', props),\n className: cx({\n group: true\n }, className)\n }, jsx(Heading, _extends({}, headingProps, {\n selectProps: selectProps,\n theme: theme,\n getStyles: getStyles,\n cx: cx\n }), label), jsx(\"div\", null, children));\n};\n\nvar groupHeadingCSS = function groupHeadingCSS(_ref2) {\n var spacing = _ref2.theme.spacing;\n return {\n label: 'group',\n color: '#999',\n cursor: 'default',\n display: 'block',\n fontSize: '75%',\n fontWeight: '500',\n marginBottom: '0.25em',\n paddingLeft: spacing.baseUnit * 3,\n paddingRight: spacing.baseUnit * 3,\n textTransform: 'uppercase'\n };\n};\nvar GroupHeading = function GroupHeading(props) {\n var className = props.className,\n cx = props.cx,\n getStyles = props.getStyles,\n theme = props.theme,\n selectProps = props.selectProps,\n cleanProps = _objectWithoutProperties(props, [\"className\", \"cx\", \"getStyles\", \"theme\", \"selectProps\"]);\n\n return jsx(\"div\", _extends({\n css: getStyles('groupHeading', _objectSpread({\n theme: theme\n }, cleanProps)),\n className: cx({\n 'group-heading': true\n }, className)\n }, cleanProps));\n};\n\nvar inputCSS = function inputCSS(_ref) {\n var isDisabled = _ref.isDisabled,\n _ref$theme = _ref.theme,\n spacing = _ref$theme.spacing,\n colors = _ref$theme.colors;\n return {\n margin: spacing.baseUnit / 2,\n paddingBottom: spacing.baseUnit / 2,\n paddingTop: spacing.baseUnit / 2,\n visibility: isDisabled ? 'hidden' : 'visible',\n color: colors.neutral80\n };\n};\n\nvar inputStyle = function inputStyle(isHidden) {\n return {\n label: 'input',\n background: 0,\n border: 0,\n fontSize: 'inherit',\n opacity: isHidden ? 0 : 1,\n outline: 0,\n padding: 0,\n color: 'inherit'\n };\n};\n\nvar Input = function Input(_ref2) {\n var className = _ref2.className,\n cx = _ref2.cx,\n getStyles = _ref2.getStyles,\n innerRef = _ref2.innerRef,\n isHidden = _ref2.isHidden,\n isDisabled = _ref2.isDisabled,\n theme = _ref2.theme,\n selectProps = _ref2.selectProps,\n props = _objectWithoutProperties(_ref2, [\"className\", \"cx\", \"getStyles\", \"innerRef\", \"isHidden\", \"isDisabled\", \"theme\", \"selectProps\"]);\n\n return jsx(\"div\", {\n css: getStyles('input', _objectSpread({\n theme: theme\n }, props))\n }, jsx(AutosizeInput, _extends({\n className: cx({\n input: true\n }, className),\n inputRef: innerRef,\n inputStyle: inputStyle(isHidden),\n disabled: isDisabled\n }, props)));\n};\n\nvar multiValueCSS = function multiValueCSS(_ref) {\n var _ref$theme = _ref.theme,\n spacing = _ref$theme.spacing,\n borderRadius = _ref$theme.borderRadius,\n colors = _ref$theme.colors;\n return {\n label: 'multiValue',\n backgroundColor: colors.neutral10,\n borderRadius: borderRadius / 2,\n display: 'flex',\n margin: spacing.baseUnit / 2,\n minWidth: 0 // resolves flex/text-overflow bug\n\n };\n};\nvar multiValueLabelCSS = function multiValueLabelCSS(_ref2) {\n var _ref2$theme = _ref2.theme,\n borderRadius = _ref2$theme.borderRadius,\n colors = _ref2$theme.colors,\n cropWithEllipsis = _ref2.cropWithEllipsis;\n return {\n borderRadius: borderRadius / 2,\n color: colors.neutral80,\n fontSize: '85%',\n overflow: 'hidden',\n padding: 3,\n paddingLeft: 6,\n textOverflow: cropWithEllipsis ? 'ellipsis' : null,\n whiteSpace: 'nowrap'\n };\n};\nvar multiValueRemoveCSS = function multiValueRemoveCSS(_ref3) {\n var _ref3$theme = _ref3.theme,\n spacing = _ref3$theme.spacing,\n borderRadius = _ref3$theme.borderRadius,\n colors = _ref3$theme.colors,\n isFocused = _ref3.isFocused;\n return {\n alignItems: 'center',\n borderRadius: borderRadius / 2,\n backgroundColor: isFocused && colors.dangerLight,\n display: 'flex',\n paddingLeft: spacing.baseUnit,\n paddingRight: spacing.baseUnit,\n ':hover': {\n backgroundColor: colors.dangerLight,\n color: colors.danger\n }\n };\n};\nvar MultiValueGeneric = function MultiValueGeneric(_ref4) {\n var children = _ref4.children,\n innerProps = _ref4.innerProps;\n return jsx(\"div\", innerProps, children);\n};\nvar MultiValueContainer = MultiValueGeneric;\nvar MultiValueLabel = MultiValueGeneric;\nvar MultiValueRemove =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(MultiValueRemove, _Component);\n\n function MultiValueRemove() {\n _classCallCheck(this, MultiValueRemove);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(MultiValueRemove).apply(this, arguments));\n }\n\n _createClass(MultiValueRemove, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n children = _this$props.children,\n innerProps = _this$props.innerProps;\n return jsx(\"div\", innerProps, children || jsx(CrossIcon, {\n size: 14\n }));\n }\n }]);\n\n return MultiValueRemove;\n}(Component);\n\nvar MultiValue =\n/*#__PURE__*/\nfunction (_Component2) {\n _inherits(MultiValue, _Component2);\n\n function MultiValue() {\n _classCallCheck(this, MultiValue);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(MultiValue).apply(this, arguments));\n }\n\n _createClass(MultiValue, [{\n key: \"render\",\n value: function render() {\n var _this = this;\n\n var _this$props2 = this.props,\n children = _this$props2.children,\n className = _this$props2.className,\n components = _this$props2.components,\n cx = _this$props2.cx,\n data = _this$props2.data,\n getStyles = _this$props2.getStyles,\n innerProps = _this$props2.innerProps,\n isDisabled = _this$props2.isDisabled,\n removeProps = _this$props2.removeProps,\n selectProps = _this$props2.selectProps;\n var Container = components.Container,\n Label = components.Label,\n Remove = components.Remove;\n return jsx(ClassNames, null, function (_ref5) {\n var css = _ref5.css,\n emotionCx = _ref5.cx;\n return jsx(Container, {\n data: data,\n innerProps: _objectSpread({}, innerProps, {\n className: emotionCx(css(getStyles('multiValue', _this.props)), cx({\n 'multi-value': true,\n 'multi-value--is-disabled': isDisabled\n }, className))\n }),\n selectProps: selectProps\n }, jsx(Label, {\n data: data,\n innerProps: {\n className: emotionCx(css(getStyles('multiValueLabel', _this.props)), cx({\n 'multi-value__label': true\n }, className))\n },\n selectProps: selectProps\n }, children), jsx(Remove, {\n data: data,\n innerProps: _objectSpread({\n className: emotionCx(css(getStyles('multiValueRemove', _this.props)), cx({\n 'multi-value__remove': true\n }, className))\n }, removeProps),\n selectProps: selectProps\n }));\n });\n }\n }]);\n\n return MultiValue;\n}(Component);\n\n_defineProperty(MultiValue, \"defaultProps\", {\n cropWithEllipsis: true\n});\n\nvar optionCSS = function optionCSS(_ref) {\n var isDisabled = _ref.isDisabled,\n isFocused = _ref.isFocused,\n isSelected = _ref.isSelected,\n _ref$theme = _ref.theme,\n spacing = _ref$theme.spacing,\n colors = _ref$theme.colors;\n return {\n label: 'option',\n backgroundColor: isSelected ? colors.primary : isFocused ? colors.primary25 : 'transparent',\n color: isDisabled ? colors.neutral20 : isSelected ? colors.neutral0 : 'inherit',\n cursor: 'default',\n display: 'block',\n fontSize: 'inherit',\n padding: \"\".concat(spacing.baseUnit * 2, \"px \").concat(spacing.baseUnit * 3, \"px\"),\n width: '100%',\n userSelect: 'none',\n WebkitTapHighlightColor: 'rgba(0, 0, 0, 0)',\n // provide some affordance on touch devices\n ':active': {\n backgroundColor: !isDisabled && (isSelected ? colors.primary : colors.primary50)\n }\n };\n};\n\nvar Option = function Option(props) {\n var children = props.children,\n className = props.className,\n cx = props.cx,\n getStyles = props.getStyles,\n isDisabled = props.isDisabled,\n isFocused = props.isFocused,\n isSelected = props.isSelected,\n innerRef = props.innerRef,\n innerProps = props.innerProps;\n return jsx(\"div\", _extends({\n css: getStyles('option', props),\n className: cx({\n option: true,\n 'option--is-disabled': isDisabled,\n 'option--is-focused': isFocused,\n 'option--is-selected': isSelected\n }, className),\n ref: innerRef\n }, innerProps), children);\n};\n\nvar placeholderCSS = function placeholderCSS(_ref) {\n var _ref$theme = _ref.theme,\n spacing = _ref$theme.spacing,\n colors = _ref$theme.colors;\n return {\n label: 'placeholder',\n color: colors.neutral50,\n marginLeft: spacing.baseUnit / 2,\n marginRight: spacing.baseUnit / 2,\n position: 'absolute',\n top: '50%',\n transform: 'translateY(-50%)'\n };\n};\n\nvar Placeholder = function Placeholder(props) {\n var children = props.children,\n className = props.className,\n cx = props.cx,\n getStyles = props.getStyles,\n innerProps = props.innerProps;\n return jsx(\"div\", _extends({\n css: getStyles('placeholder', props),\n className: cx({\n placeholder: true\n }, className)\n }, innerProps), children);\n};\n\nvar css$1 = function css(_ref) {\n var isDisabled = _ref.isDisabled,\n _ref$theme = _ref.theme,\n spacing = _ref$theme.spacing,\n colors = _ref$theme.colors;\n return {\n label: 'singleValue',\n color: isDisabled ? colors.neutral40 : colors.neutral80,\n marginLeft: spacing.baseUnit / 2,\n marginRight: spacing.baseUnit / 2,\n maxWidth: \"calc(100% - \".concat(spacing.baseUnit * 2, \"px)\"),\n overflow: 'hidden',\n position: 'absolute',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n top: '50%',\n transform: 'translateY(-50%)'\n };\n};\n\nvar SingleValue = function SingleValue(props) {\n var children = props.children,\n className = props.className,\n cx = props.cx,\n getStyles = props.getStyles,\n isDisabled = props.isDisabled,\n innerProps = props.innerProps;\n return jsx(\"div\", _extends({\n css: getStyles('singleValue', props),\n className: cx({\n 'single-value': true,\n 'single-value--is-disabled': isDisabled\n }, className)\n }, innerProps), children);\n};\n\nvar components = {\n ClearIndicator: ClearIndicator,\n Control: Control,\n DropdownIndicator: DropdownIndicator,\n DownChevron: DownChevron,\n CrossIcon: CrossIcon,\n Group: Group,\n GroupHeading: GroupHeading,\n IndicatorsContainer: IndicatorsContainer,\n IndicatorSeparator: IndicatorSeparator,\n Input: Input,\n LoadingIndicator: LoadingIndicator,\n Menu: Menu,\n MenuList: MenuList,\n MenuPortal: MenuPortal,\n LoadingMessage: LoadingMessage,\n NoOptionsMessage: NoOptionsMessage,\n MultiValue: MultiValue,\n MultiValueContainer: MultiValueContainer,\n MultiValueLabel: MultiValueLabel,\n MultiValueRemove: MultiValueRemove,\n Option: Option,\n Placeholder: Placeholder,\n SelectContainer: SelectContainer,\n SingleValue: SingleValue,\n ValueContainer: ValueContainer\n};\nvar defaultComponents = function defaultComponents(props) {\n return _objectSpread({}, components, props.components);\n};\n\nexport { MenuPlacer as M, containerCSS as a, css as b, clearIndicatorCSS as c, dropdownIndicatorCSS as d, groupHeadingCSS as e, indicatorSeparatorCSS as f, groupCSS as g, inputCSS as h, indicatorsContainerCSS as i, loadingMessageCSS as j, menuListCSS as k, loadingIndicatorCSS as l, menuCSS as m, menuPortalCSS as n, multiValueCSS as o, multiValueLabelCSS as p, multiValueRemoveCSS as q, noOptionsMessageCSS as r, optionCSS as s, placeholderCSS as t, css$1 as u, valueContainerCSS as v, defaultComponents as w, exportedEqual as x, components as y };\n","export default function _taggedTemplateLiteral(strings, raw) {\n if (!raw) {\n raw = strings.slice(0);\n }\n\n return Object.freeze(Object.defineProperties(strings, {\n raw: {\n value: Object.freeze(raw)\n }\n }));\n}","import _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport _toConsumableArray from '@babel/runtime/helpers/esm/toConsumableArray';\nimport _objectSpread from '@babel/runtime/helpers/esm/objectSpread';\nimport _classCallCheck from '@babel/runtime/helpers/esm/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/esm/createClass';\nimport _possibleConstructorReturn from '@babel/runtime/helpers/esm/possibleConstructorReturn';\nimport _getPrototypeOf from '@babel/runtime/helpers/esm/getPrototypeOf';\nimport _inherits from '@babel/runtime/helpers/esm/inherits';\nimport _assertThisInitialized from '@babel/runtime/helpers/esm/assertThisInitialized';\nimport _defineProperty from '@babel/runtime/helpers/esm/defineProperty';\nimport React, { Component, PureComponent } from 'react';\nimport memoizeOne from 'memoize-one';\nimport { jsx } from '@emotion/core';\nimport { findDOMNode } from 'react-dom';\nimport { i as isTouchCapable, d as isMobileDevice, e as isDocumentElement, f as cleanValue, h as scrollIntoView, j as classNames, n as noop } from '../../chunk-39d3fda8.browser.esm.js';\nimport { c as clearIndicatorCSS, a as containerCSS, b as css, d as dropdownIndicatorCSS, g as groupCSS, e as groupHeadingCSS, i as indicatorsContainerCSS, f as indicatorSeparatorCSS, h as inputCSS, l as loadingIndicatorCSS, j as loadingMessageCSS, m as menuCSS, k as menuListCSS, n as menuPortalCSS, o as multiValueCSS, p as multiValueLabelCSS, q as multiValueRemoveCSS, r as noOptionsMessageCSS, s as optionCSS, t as placeholderCSS, u as css$1, v as valueContainerCSS, w as defaultComponents, x as exportedEqual, M as MenuPlacer } from '../../chunk-80640036.browser.esm.js';\nimport _css from '@emotion/css';\n\nvar diacritics = [{\n base: 'A',\n letters: /[\\u0041\\u24B6\\uFF21\\u00C0\\u00C1\\u00C2\\u1EA6\\u1EA4\\u1EAA\\u1EA8\\u00C3\\u0100\\u0102\\u1EB0\\u1EAE\\u1EB4\\u1EB2\\u0226\\u01E0\\u00C4\\u01DE\\u1EA2\\u00C5\\u01FA\\u01CD\\u0200\\u0202\\u1EA0\\u1EAC\\u1EB6\\u1E00\\u0104\\u023A\\u2C6F]/g\n}, {\n base: 'AA',\n letters: /[\\uA732]/g\n}, {\n base: 'AE',\n letters: /[\\u00C6\\u01FC\\u01E2]/g\n}, {\n base: 'AO',\n letters: /[\\uA734]/g\n}, {\n base: 'AU',\n letters: /[\\uA736]/g\n}, {\n base: 'AV',\n letters: /[\\uA738\\uA73A]/g\n}, {\n base: 'AY',\n letters: /[\\uA73C]/g\n}, {\n base: 'B',\n letters: /[\\u0042\\u24B7\\uFF22\\u1E02\\u1E04\\u1E06\\u0243\\u0182\\u0181]/g\n}, {\n base: 'C',\n letters: /[\\u0043\\u24B8\\uFF23\\u0106\\u0108\\u010A\\u010C\\u00C7\\u1E08\\u0187\\u023B\\uA73E]/g\n}, {\n base: 'D',\n letters: /[\\u0044\\u24B9\\uFF24\\u1E0A\\u010E\\u1E0C\\u1E10\\u1E12\\u1E0E\\u0110\\u018B\\u018A\\u0189\\uA779]/g\n}, {\n base: 'DZ',\n letters: /[\\u01F1\\u01C4]/g\n}, {\n base: 'Dz',\n letters: /[\\u01F2\\u01C5]/g\n}, {\n base: 'E',\n letters: /[\\u0045\\u24BA\\uFF25\\u00C8\\u00C9\\u00CA\\u1EC0\\u1EBE\\u1EC4\\u1EC2\\u1EBC\\u0112\\u1E14\\u1E16\\u0114\\u0116\\u00CB\\u1EBA\\u011A\\u0204\\u0206\\u1EB8\\u1EC6\\u0228\\u1E1C\\u0118\\u1E18\\u1E1A\\u0190\\u018E]/g\n}, {\n base: 'F',\n letters: /[\\u0046\\u24BB\\uFF26\\u1E1E\\u0191\\uA77B]/g\n}, {\n base: 'G',\n letters: /[\\u0047\\u24BC\\uFF27\\u01F4\\u011C\\u1E20\\u011E\\u0120\\u01E6\\u0122\\u01E4\\u0193\\uA7A0\\uA77D\\uA77E]/g\n}, {\n base: 'H',\n letters: /[\\u0048\\u24BD\\uFF28\\u0124\\u1E22\\u1E26\\u021E\\u1E24\\u1E28\\u1E2A\\u0126\\u2C67\\u2C75\\uA78D]/g\n}, {\n base: 'I',\n letters: /[\\u0049\\u24BE\\uFF29\\u00CC\\u00CD\\u00CE\\u0128\\u012A\\u012C\\u0130\\u00CF\\u1E2E\\u1EC8\\u01CF\\u0208\\u020A\\u1ECA\\u012E\\u1E2C\\u0197]/g\n}, {\n base: 'J',\n letters: /[\\u004A\\u24BF\\uFF2A\\u0134\\u0248]/g\n}, {\n base: 'K',\n letters: /[\\u004B\\u24C0\\uFF2B\\u1E30\\u01E8\\u1E32\\u0136\\u1E34\\u0198\\u2C69\\uA740\\uA742\\uA744\\uA7A2]/g\n}, {\n base: 'L',\n letters: /[\\u004C\\u24C1\\uFF2C\\u013F\\u0139\\u013D\\u1E36\\u1E38\\u013B\\u1E3C\\u1E3A\\u0141\\u023D\\u2C62\\u2C60\\uA748\\uA746\\uA780]/g\n}, {\n base: 'LJ',\n letters: /[\\u01C7]/g\n}, {\n base: 'Lj',\n letters: /[\\u01C8]/g\n}, {\n base: 'M',\n letters: /[\\u004D\\u24C2\\uFF2D\\u1E3E\\u1E40\\u1E42\\u2C6E\\u019C]/g\n}, {\n base: 'N',\n letters: /[\\u004E\\u24C3\\uFF2E\\u01F8\\u0143\\u00D1\\u1E44\\u0147\\u1E46\\u0145\\u1E4A\\u1E48\\u0220\\u019D\\uA790\\uA7A4]/g\n}, {\n base: 'NJ',\n letters: /[\\u01CA]/g\n}, {\n base: 'Nj',\n letters: /[\\u01CB]/g\n}, {\n base: 'O',\n letters: /[\\u004F\\u24C4\\uFF2F\\u00D2\\u00D3\\u00D4\\u1ED2\\u1ED0\\u1ED6\\u1ED4\\u00D5\\u1E4C\\u022C\\u1E4E\\u014C\\u1E50\\u1E52\\u014E\\u022E\\u0230\\u00D6\\u022A\\u1ECE\\u0150\\u01D1\\u020C\\u020E\\u01A0\\u1EDC\\u1EDA\\u1EE0\\u1EDE\\u1EE2\\u1ECC\\u1ED8\\u01EA\\u01EC\\u00D8\\u01FE\\u0186\\u019F\\uA74A\\uA74C]/g\n}, {\n base: 'OI',\n letters: /[\\u01A2]/g\n}, {\n base: 'OO',\n letters: /[\\uA74E]/g\n}, {\n base: 'OU',\n letters: /[\\u0222]/g\n}, {\n base: 'P',\n letters: /[\\u0050\\u24C5\\uFF30\\u1E54\\u1E56\\u01A4\\u2C63\\uA750\\uA752\\uA754]/g\n}, {\n base: 'Q',\n letters: /[\\u0051\\u24C6\\uFF31\\uA756\\uA758\\u024A]/g\n}, {\n base: 'R',\n letters: /[\\u0052\\u24C7\\uFF32\\u0154\\u1E58\\u0158\\u0210\\u0212\\u1E5A\\u1E5C\\u0156\\u1E5E\\u024C\\u2C64\\uA75A\\uA7A6\\uA782]/g\n}, {\n base: 'S',\n letters: /[\\u0053\\u24C8\\uFF33\\u1E9E\\u015A\\u1E64\\u015C\\u1E60\\u0160\\u1E66\\u1E62\\u1E68\\u0218\\u015E\\u2C7E\\uA7A8\\uA784]/g\n}, {\n base: 'T',\n letters: /[\\u0054\\u24C9\\uFF34\\u1E6A\\u0164\\u1E6C\\u021A\\u0162\\u1E70\\u1E6E\\u0166\\u01AC\\u01AE\\u023E\\uA786]/g\n}, {\n base: 'TZ',\n letters: /[\\uA728]/g\n}, {\n base: 'U',\n letters: /[\\u0055\\u24CA\\uFF35\\u00D9\\u00DA\\u00DB\\u0168\\u1E78\\u016A\\u1E7A\\u016C\\u00DC\\u01DB\\u01D7\\u01D5\\u01D9\\u1EE6\\u016E\\u0170\\u01D3\\u0214\\u0216\\u01AF\\u1EEA\\u1EE8\\u1EEE\\u1EEC\\u1EF0\\u1EE4\\u1E72\\u0172\\u1E76\\u1E74\\u0244]/g\n}, {\n base: 'V',\n letters: /[\\u0056\\u24CB\\uFF36\\u1E7C\\u1E7E\\u01B2\\uA75E\\u0245]/g\n}, {\n base: 'VY',\n letters: /[\\uA760]/g\n}, {\n base: 'W',\n letters: /[\\u0057\\u24CC\\uFF37\\u1E80\\u1E82\\u0174\\u1E86\\u1E84\\u1E88\\u2C72]/g\n}, {\n base: 'X',\n letters: /[\\u0058\\u24CD\\uFF38\\u1E8A\\u1E8C]/g\n}, {\n base: 'Y',\n letters: /[\\u0059\\u24CE\\uFF39\\u1EF2\\u00DD\\u0176\\u1EF8\\u0232\\u1E8E\\u0178\\u1EF6\\u1EF4\\u01B3\\u024E\\u1EFE]/g\n}, {\n base: 'Z',\n letters: /[\\u005A\\u24CF\\uFF3A\\u0179\\u1E90\\u017B\\u017D\\u1E92\\u1E94\\u01B5\\u0224\\u2C7F\\u2C6B\\uA762]/g\n}, {\n base: 'a',\n letters: /[\\u0061\\u24D0\\uFF41\\u1E9A\\u00E0\\u00E1\\u00E2\\u1EA7\\u1EA5\\u1EAB\\u1EA9\\u00E3\\u0101\\u0103\\u1EB1\\u1EAF\\u1EB5\\u1EB3\\u0227\\u01E1\\u00E4\\u01DF\\u1EA3\\u00E5\\u01FB\\u01CE\\u0201\\u0203\\u1EA1\\u1EAD\\u1EB7\\u1E01\\u0105\\u2C65\\u0250]/g\n}, {\n base: 'aa',\n letters: /[\\uA733]/g\n}, {\n base: 'ae',\n letters: /[\\u00E6\\u01FD\\u01E3]/g\n}, {\n base: 'ao',\n letters: /[\\uA735]/g\n}, {\n base: 'au',\n letters: /[\\uA737]/g\n}, {\n base: 'av',\n letters: /[\\uA739\\uA73B]/g\n}, {\n base: 'ay',\n letters: /[\\uA73D]/g\n}, {\n base: 'b',\n letters: /[\\u0062\\u24D1\\uFF42\\u1E03\\u1E05\\u1E07\\u0180\\u0183\\u0253]/g\n}, {\n base: 'c',\n letters: /[\\u0063\\u24D2\\uFF43\\u0107\\u0109\\u010B\\u010D\\u00E7\\u1E09\\u0188\\u023C\\uA73F\\u2184]/g\n}, {\n base: 'd',\n letters: /[\\u0064\\u24D3\\uFF44\\u1E0B\\u010F\\u1E0D\\u1E11\\u1E13\\u1E0F\\u0111\\u018C\\u0256\\u0257\\uA77A]/g\n}, {\n base: 'dz',\n letters: /[\\u01F3\\u01C6]/g\n}, {\n base: 'e',\n letters: /[\\u0065\\u24D4\\uFF45\\u00E8\\u00E9\\u00EA\\u1EC1\\u1EBF\\u1EC5\\u1EC3\\u1EBD\\u0113\\u1E15\\u1E17\\u0115\\u0117\\u00EB\\u1EBB\\u011B\\u0205\\u0207\\u1EB9\\u1EC7\\u0229\\u1E1D\\u0119\\u1E19\\u1E1B\\u0247\\u025B\\u01DD]/g\n}, {\n base: 'f',\n letters: /[\\u0066\\u24D5\\uFF46\\u1E1F\\u0192\\uA77C]/g\n}, {\n base: 'g',\n letters: /[\\u0067\\u24D6\\uFF47\\u01F5\\u011D\\u1E21\\u011F\\u0121\\u01E7\\u0123\\u01E5\\u0260\\uA7A1\\u1D79\\uA77F]/g\n}, {\n base: 'h',\n letters: /[\\u0068\\u24D7\\uFF48\\u0125\\u1E23\\u1E27\\u021F\\u1E25\\u1E29\\u1E2B\\u1E96\\u0127\\u2C68\\u2C76\\u0265]/g\n}, {\n base: 'hv',\n letters: /[\\u0195]/g\n}, {\n base: 'i',\n letters: /[\\u0069\\u24D8\\uFF49\\u00EC\\u00ED\\u00EE\\u0129\\u012B\\u012D\\u00EF\\u1E2F\\u1EC9\\u01D0\\u0209\\u020B\\u1ECB\\u012F\\u1E2D\\u0268\\u0131]/g\n}, {\n base: 'j',\n letters: /[\\u006A\\u24D9\\uFF4A\\u0135\\u01F0\\u0249]/g\n}, {\n base: 'k',\n letters: /[\\u006B\\u24DA\\uFF4B\\u1E31\\u01E9\\u1E33\\u0137\\u1E35\\u0199\\u2C6A\\uA741\\uA743\\uA745\\uA7A3]/g\n}, {\n base: 'l',\n letters: /[\\u006C\\u24DB\\uFF4C\\u0140\\u013A\\u013E\\u1E37\\u1E39\\u013C\\u1E3D\\u1E3B\\u017F\\u0142\\u019A\\u026B\\u2C61\\uA749\\uA781\\uA747]/g\n}, {\n base: 'lj',\n letters: /[\\u01C9]/g\n}, {\n base: 'm',\n letters: /[\\u006D\\u24DC\\uFF4D\\u1E3F\\u1E41\\u1E43\\u0271\\u026F]/g\n}, {\n base: 'n',\n letters: /[\\u006E\\u24DD\\uFF4E\\u01F9\\u0144\\u00F1\\u1E45\\u0148\\u1E47\\u0146\\u1E4B\\u1E49\\u019E\\u0272\\u0149\\uA791\\uA7A5]/g\n}, {\n base: 'nj',\n letters: /[\\u01CC]/g\n}, {\n base: 'o',\n letters: /[\\u006F\\u24DE\\uFF4F\\u00F2\\u00F3\\u00F4\\u1ED3\\u1ED1\\u1ED7\\u1ED5\\u00F5\\u1E4D\\u022D\\u1E4F\\u014D\\u1E51\\u1E53\\u014F\\u022F\\u0231\\u00F6\\u022B\\u1ECF\\u0151\\u01D2\\u020D\\u020F\\u01A1\\u1EDD\\u1EDB\\u1EE1\\u1EDF\\u1EE3\\u1ECD\\u1ED9\\u01EB\\u01ED\\u00F8\\u01FF\\u0254\\uA74B\\uA74D\\u0275]/g\n}, {\n base: 'oi',\n letters: /[\\u01A3]/g\n}, {\n base: 'ou',\n letters: /[\\u0223]/g\n}, {\n base: 'oo',\n letters: /[\\uA74F]/g\n}, {\n base: 'p',\n letters: /[\\u0070\\u24DF\\uFF50\\u1E55\\u1E57\\u01A5\\u1D7D\\uA751\\uA753\\uA755]/g\n}, {\n base: 'q',\n letters: /[\\u0071\\u24E0\\uFF51\\u024B\\uA757\\uA759]/g\n}, {\n base: 'r',\n letters: /[\\u0072\\u24E1\\uFF52\\u0155\\u1E59\\u0159\\u0211\\u0213\\u1E5B\\u1E5D\\u0157\\u1E5F\\u024D\\u027D\\uA75B\\uA7A7\\uA783]/g\n}, {\n base: 's',\n letters: /[\\u0073\\u24E2\\uFF53\\u00DF\\u015B\\u1E65\\u015D\\u1E61\\u0161\\u1E67\\u1E63\\u1E69\\u0219\\u015F\\u023F\\uA7A9\\uA785\\u1E9B]/g\n}, {\n base: 't',\n letters: /[\\u0074\\u24E3\\uFF54\\u1E6B\\u1E97\\u0165\\u1E6D\\u021B\\u0163\\u1E71\\u1E6F\\u0167\\u01AD\\u0288\\u2C66\\uA787]/g\n}, {\n base: 'tz',\n letters: /[\\uA729]/g\n}, {\n base: 'u',\n letters: /[\\u0075\\u24E4\\uFF55\\u00F9\\u00FA\\u00FB\\u0169\\u1E79\\u016B\\u1E7B\\u016D\\u00FC\\u01DC\\u01D8\\u01D6\\u01DA\\u1EE7\\u016F\\u0171\\u01D4\\u0215\\u0217\\u01B0\\u1EEB\\u1EE9\\u1EEF\\u1EED\\u1EF1\\u1EE5\\u1E73\\u0173\\u1E77\\u1E75\\u0289]/g\n}, {\n base: 'v',\n letters: /[\\u0076\\u24E5\\uFF56\\u1E7D\\u1E7F\\u028B\\uA75F\\u028C]/g\n}, {\n base: 'vy',\n letters: /[\\uA761]/g\n}, {\n base: 'w',\n letters: /[\\u0077\\u24E6\\uFF57\\u1E81\\u1E83\\u0175\\u1E87\\u1E85\\u1E98\\u1E89\\u2C73]/g\n}, {\n base: 'x',\n letters: /[\\u0078\\u24E7\\uFF58\\u1E8B\\u1E8D]/g\n}, {\n base: 'y',\n letters: /[\\u0079\\u24E8\\uFF59\\u1EF3\\u00FD\\u0177\\u1EF9\\u0233\\u1E8F\\u00FF\\u1EF7\\u1E99\\u1EF5\\u01B4\\u024F\\u1EFF]/g\n}, {\n base: 'z',\n letters: /[\\u007A\\u24E9\\uFF5A\\u017A\\u1E91\\u017C\\u017E\\u1E93\\u1E95\\u01B6\\u0225\\u0240\\u2C6C\\uA763]/g\n}];\nvar stripDiacritics = function stripDiacritics(str) {\n for (var i = 0; i < diacritics.length; i++) {\n str = str.replace(diacritics[i].letters, diacritics[i].base);\n }\n\n return str;\n};\n\nvar trimString = function trimString(str) {\n return str.replace(/^\\s+|\\s+$/g, '');\n};\n\nvar defaultStringify = function defaultStringify(option) {\n return \"\".concat(option.label, \" \").concat(option.value);\n};\n\nvar createFilter = function createFilter(config) {\n return function (option, rawInput) {\n var _ignoreCase$ignoreAcc = _objectSpread({\n ignoreCase: true,\n ignoreAccents: true,\n stringify: defaultStringify,\n trim: true,\n matchFrom: 'any'\n }, config),\n ignoreCase = _ignoreCase$ignoreAcc.ignoreCase,\n ignoreAccents = _ignoreCase$ignoreAcc.ignoreAccents,\n stringify = _ignoreCase$ignoreAcc.stringify,\n trim = _ignoreCase$ignoreAcc.trim,\n matchFrom = _ignoreCase$ignoreAcc.matchFrom;\n\n var input = trim ? trimString(rawInput) : rawInput;\n var candidate = trim ? trimString(stringify(option)) : stringify(option);\n\n if (ignoreCase) {\n input = input.toLowerCase();\n candidate = candidate.toLowerCase();\n }\n\n if (ignoreAccents) {\n input = stripDiacritics(input);\n candidate = stripDiacritics(candidate);\n }\n\n return matchFrom === 'start' ? candidate.substr(0, input.length) === input : candidate.indexOf(input) > -1;\n };\n};\n\nvar _ref = process.env.NODE_ENV === \"production\" ? {\n name: \"1laao21-a11yText\",\n styles: \"label:a11yText;z-index:9999;border:0;clip:rect(1px, 1px, 1px, 1px);height:1px;width:1px;position:absolute;overflow:hidden;padding:0;white-space:nowrap;\"\n} : {\n name: \"1laao21-a11yText\",\n styles: \"label:a11yText;z-index:9999;border:0;clip:rect(1px, 1px, 1px, 1px);height:1px;width:1px;position:absolute;overflow:hidden;padding:0;white-space:nowrap;\",\n map: \"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkExMXlUZXh0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFNIiwiZmlsZSI6IkExMXlUZXh0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbi8qKiBAanN4IGpzeCAqL1xuaW1wb3J0IHsgdHlwZSBFbGVtZW50Q29uZmlnIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IH0gZnJvbSAnQGVtb3Rpb24vY29yZSc7XG5cbi8vIEFzc2lzdGl2ZSB0ZXh0IHRvIGRlc2NyaWJlIHZpc3VhbCBlbGVtZW50cy4gSGlkZGVuIGZvciBzaWdodGVkIHVzZXJzLlxuY29uc3QgQTExeVRleHQgPSAocHJvcHM6IEVsZW1lbnRDb25maWc8J3NwYW4nPikgPT4gKFxuICAgIDxzcGFuXG4gICAgICBjc3M9e3tcbiAgICAgICAgbGFiZWw6ICdhMTF5VGV4dCcsXG4gICAgICAgIHpJbmRleDogOTk5OSxcbiAgICAgICAgYm9yZGVyOiAwLFxuICAgICAgICBjbGlwOiAncmVjdCgxcHgsIDFweCwgMXB4LCAxcHgpJyxcbiAgICAgICAgaGVpZ2h0OiAxLFxuICAgICAgICB3aWR0aDogMSxcbiAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gICAgICB9fVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBBMTF5VGV4dDtcbiJdfQ== */\"\n};\n\nvar A11yText = function A11yText(props) {\n return jsx(\"span\", _extends({\n css: _ref\n }, props));\n};\n\nvar DummyInput =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(DummyInput, _Component);\n\n function DummyInput() {\n _classCallCheck(this, DummyInput);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(DummyInput).apply(this, arguments));\n }\n\n _createClass(DummyInput, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n inProp = _this$props.in,\n out = _this$props.out,\n onExited = _this$props.onExited,\n appear = _this$props.appear,\n enter = _this$props.enter,\n exit = _this$props.exit,\n innerRef = _this$props.innerRef,\n emotion = _this$props.emotion,\n props = _objectWithoutProperties(_this$props, [\"in\", \"out\", \"onExited\", \"appear\", \"enter\", \"exit\", \"innerRef\", \"emotion\"]);\n\n return jsx(\"input\", _extends({\n ref: innerRef\n }, props, {\n css:\n /*#__PURE__*/\n _css({\n label: 'dummyInput',\n // get rid of any default styles\n background: 0,\n border: 0,\n fontSize: 'inherit',\n outline: 0,\n padding: 0,\n // important! without `width` browsers won't allow focus\n width: 1,\n // remove cursor on desktop\n color: 'transparent',\n // remove cursor on mobile whilst maintaining \"scroll into view\" behaviour\n left: -100,\n opacity: 0,\n position: 'relative',\n transform: 'scale(0)'\n }, process.env.NODE_ENV === \"production\" ? \"\" : \"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkR1bW15SW5wdXQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBWVEiLCJmaWxlIjoiRHVtbXlJbnB1dC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG4vKiogQGpzeCBqc3ggKi9cbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCB9IGZyb20gJ0BlbW90aW9uL2NvcmUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEdW1teUlucHV0IGV4dGVuZHMgQ29tcG9uZW50PGFueT4ge1xuICByZW5kZXIgKCkge1xuICAgIGNvbnN0IHsgaW46IGluUHJvcCwgb3V0LCBvbkV4aXRlZCwgYXBwZWFyLCBlbnRlciwgZXhpdCwgaW5uZXJSZWYsIGVtb3Rpb24sIC4uLnByb3BzIH0gPSB0aGlzLnByb3BzO1xuICAgIHJldHVybihcbiAgICAgIDxpbnB1dFxuICAgICAgICByZWY9e2lubmVyUmVmfVxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIGNzcz17e1xuICAgICAgICAgIGxhYmVsOiAnZHVtbXlJbnB1dCcsXG4gICAgICAgICAgLy8gZ2V0IHJpZCBvZiBhbnkgZGVmYXVsdCBzdHlsZXNcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAwLFxuICAgICAgICAgIGJvcmRlcjogMCxcbiAgICAgICAgICBmb250U2l6ZTogJ2luaGVyaXQnLFxuICAgICAgICAgIG91dGxpbmU6IDAsXG4gICAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgICAvLyBpbXBvcnRhbnQhIHdpdGhvdXQgYHdpZHRoYCBicm93c2VycyB3b24ndCBhbGxvdyBmb2N1c1xuICAgICAgICAgIHdpZHRoOiAxLFxuXG4gICAgICAgICAgLy8gcmVtb3ZlIGN1cnNvciBvbiBkZXNrdG9wXG4gICAgICAgICAgY29sb3I6ICd0cmFuc3BhcmVudCcsXG5cbiAgICAgICAgICAvLyByZW1vdmUgY3Vyc29yIG9uIG1vYmlsZSB3aGlsc3QgbWFpbnRhaW5pbmcgXCJzY3JvbGwgaW50byB2aWV3XCIgYmVoYXZpb3VyXG4gICAgICAgICAgbGVmdDogLTEwMCxcbiAgICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgICAgICAgIHRyYW5zZm9ybTogJ3NjYWxlKDApJyxcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxufVxuIl19 */\")\n }));\n }\n }]);\n\n return DummyInput;\n}(Component);\n\nvar NodeResolver =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(NodeResolver, _Component);\n\n function NodeResolver() {\n _classCallCheck(this, NodeResolver);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(NodeResolver).apply(this, arguments));\n }\n\n _createClass(NodeResolver, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.props.innerRef(findDOMNode(this));\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.props.innerRef(null);\n }\n }, {\n key: \"render\",\n value: function render() {\n return this.props.children;\n }\n }]);\n\n return NodeResolver;\n}(Component);\n\nvar STYLE_KEYS = ['boxSizing', 'height', 'overflow', 'paddingRight', 'position'];\nvar LOCK_STYLES = {\n boxSizing: 'border-box',\n // account for possible declaration `width: 100%;` on body\n overflow: 'hidden',\n position: 'relative',\n height: '100%'\n};\n\nfunction preventTouchMove(e) {\n e.preventDefault();\n}\nfunction allowTouchMove(e) {\n e.stopPropagation();\n}\nfunction preventInertiaScroll() {\n var top = this.scrollTop;\n var totalScroll = this.scrollHeight;\n var currentScroll = top + this.offsetHeight;\n\n if (top === 0) {\n this.scrollTop = 1;\n } else if (currentScroll === totalScroll) {\n this.scrollTop = top - 1;\n }\n} // `ontouchstart` check works on most browsers\n// `maxTouchPoints` works on IE10/11 and Surface\n\nfunction isTouchDevice() {\n return 'ontouchstart' in window || navigator.maxTouchPoints;\n}\n\nvar canUseDOM = !!(window.document && window.document.createElement);\nvar activeScrollLocks = 0;\n\nvar ScrollLock =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(ScrollLock, _Component);\n\n function ScrollLock() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, ScrollLock);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(ScrollLock)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"originalStyles\", {});\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"listenerOptions\", {\n capture: false,\n passive: false\n });\n\n return _this;\n }\n\n _createClass(ScrollLock, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this2 = this;\n\n if (!canUseDOM) return;\n var _this$props = this.props,\n accountForScrollbars = _this$props.accountForScrollbars,\n touchScrollTarget = _this$props.touchScrollTarget;\n var target = document.body;\n var targetStyle = target && target.style;\n\n if (accountForScrollbars) {\n // store any styles already applied to the body\n STYLE_KEYS.forEach(function (key) {\n var val = targetStyle && targetStyle[key];\n _this2.originalStyles[key] = val;\n });\n } // apply the lock styles and padding if this is the first scroll lock\n\n\n if (accountForScrollbars && activeScrollLocks < 1) {\n var currentPadding = parseInt(this.originalStyles.paddingRight, 10) || 0;\n var clientWidth = document.body ? document.body.clientWidth : 0;\n var adjustedPadding = window.innerWidth - clientWidth + currentPadding || 0;\n Object.keys(LOCK_STYLES).forEach(function (key) {\n var val = LOCK_STYLES[key];\n\n if (targetStyle) {\n targetStyle[key] = val;\n }\n });\n\n if (targetStyle) {\n targetStyle.paddingRight = \"\".concat(adjustedPadding, \"px\");\n }\n } // account for touch devices\n\n\n if (target && isTouchDevice()) {\n // Mobile Safari ignores { overflow: hidden } declaration on the body.\n target.addEventListener('touchmove', preventTouchMove, this.listenerOptions); // Allow scroll on provided target\n\n if (touchScrollTarget) {\n touchScrollTarget.addEventListener('touchstart', preventInertiaScroll, this.listenerOptions);\n touchScrollTarget.addEventListener('touchmove', allowTouchMove, this.listenerOptions);\n }\n } // increment active scroll locks\n\n\n activeScrollLocks += 1;\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n var _this3 = this;\n\n if (!canUseDOM) return;\n var _this$props2 = this.props,\n accountForScrollbars = _this$props2.accountForScrollbars,\n touchScrollTarget = _this$props2.touchScrollTarget;\n var target = document.body;\n var targetStyle = target && target.style; // safely decrement active scroll locks\n\n activeScrollLocks = Math.max(activeScrollLocks - 1, 0); // reapply original body styles, if any\n\n if (accountForScrollbars && activeScrollLocks < 1) {\n STYLE_KEYS.forEach(function (key) {\n var val = _this3.originalStyles[key];\n\n if (targetStyle) {\n targetStyle[key] = val;\n }\n });\n } // remove touch listeners\n\n\n if (target && isTouchDevice()) {\n target.removeEventListener('touchmove', preventTouchMove, this.listenerOptions);\n\n if (touchScrollTarget) {\n touchScrollTarget.removeEventListener('touchstart', preventInertiaScroll, this.listenerOptions);\n touchScrollTarget.removeEventListener('touchmove', allowTouchMove, this.listenerOptions);\n }\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n return null;\n }\n }]);\n\n return ScrollLock;\n}(Component);\n\n_defineProperty(ScrollLock, \"defaultProps\", {\n accountForScrollbars: true\n});\n\nvar _ref$1 = process.env.NODE_ENV === \"production\" ? {\n name: \"1dsbpcp\",\n styles: \"position:fixed;left:0;bottom:0;right:0;top:0;\"\n} : {\n name: \"1dsbpcp\",\n styles: \"position:fixed;left:0;bottom:0;right:0;top:0;\",\n map: \"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlNjcm9sbEJsb2NrLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTZEVSIsImZpbGUiOiJTY3JvbGxCbG9jay5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG4vKiogQGpzeCBqc3ggKi9cbmltcG9ydCB7IFB1cmVDb21wb25lbnQsIHR5cGUgRWxlbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCB9IGZyb20gJ0BlbW90aW9uL2NvcmUnO1xuaW1wb3J0IE5vZGVSZXNvbHZlciBmcm9tICcuL05vZGVSZXNvbHZlcic7XG5pbXBvcnQgU2Nyb2xsTG9jayBmcm9tICcuL1Njcm9sbExvY2svaW5kZXgnO1xuXG50eXBlIFByb3BzID0ge1xuICBjaGlsZHJlbjogRWxlbWVudDwqPixcbiAgaXNFbmFibGVkOiBib29sZWFuLFxufTtcbnR5cGUgU3RhdGUgPSB7XG4gIHRvdWNoU2Nyb2xsVGFyZ2V0OiBIVE1MRWxlbWVudCB8IG51bGwsXG59O1xuXG4vLyBOT1RFOlxuLy8gV2Ugc2hvdWxkbid0IG5lZWQgdGhpcyBhZnRlciB1cGRhdGluZyB0byBSZWFjdCB2MTYuMy4wLCB3aGljaCBpbnRyb2R1Y2VzOlxuLy8gLSBjcmVhdGVSZWYoKSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjcmVhdGVyZWZcbi8vIC0gZm9yd2FyZFJlZigpIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGZvcndhcmRyZWZcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2Nyb2xsQmxvY2sgZXh0ZW5kcyBQdXJlQ29tcG9uZW50PFByb3BzLCBTdGF0ZT4ge1xuICBzdGF0ZSA9IHsgdG91Y2hTY3JvbGxUYXJnZXQ6IG51bGwgfTtcblxuICAvLyBtdXN0IGJlIGluIHN0YXRlIHRvIHRyaWdnZXIgYSByZS1yZW5kZXIsIG9ubHkgcnVucyBvbmNlIHBlciBpbnN0YW5jZVxuICBnZXRTY3JvbGxUYXJnZXQgPSAocmVmOiBIVE1MRWxlbWVudCkgPT4ge1xuICAgIGlmIChyZWYgPT09IHRoaXMuc3RhdGUudG91Y2hTY3JvbGxUYXJnZXQpIHJldHVybjtcbiAgICB0aGlzLnNldFN0YXRlKHsgdG91Y2hTY3JvbGxUYXJnZXQ6IHJlZiB9KTtcbiAgfTtcblxuICAvLyB0aGlzIHdpbGwgY2xvc2UgdGhlIG1lbnUgd2hlbiBhIHVzZXIgY2xpY2tzIG91dHNpZGVcbiAgYmx1clNlbGVjdElucHV0ID0gKCkgPT4ge1xuICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG4gICAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKTtcbiAgICB9XG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgY2hpbGRyZW4sIGlzRW5hYmxlZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IHRvdWNoU2Nyb2xsVGFyZ2V0IH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgLy8gYmFpbCBlYXJseSBpZiBub3QgZW5hYmxlZFxuICAgIGlmICghaXNFbmFibGVkKSByZXR1cm4gY2hpbGRyZW47XG5cbiAgICAvKlxuICAgICAqIERpdlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIGJsb2NrcyBzY3JvbGxpbmcgb24gbm9uLWJvZHkgZWxlbWVudHMgYmVoaW5kIHRoZSBtZW51XG5cbiAgICAgKiBOb2RlUmVzb2x2ZXJcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKiB3ZSBuZWVkIGEgcmVmZXJlbmNlIHRvIHRoZSBzY3JvbGxhYmxlIGVsZW1lbnQgdG8gXCJ1bmxvY2tcIiBzY3JvbGwgb25cbiAgICAgKiBtb2JpbGUgZGV2aWNlc1xuXG4gICAgICogU2Nyb2xsTG9ja1xuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIGFjdHVhbGx5IGRvZXMgdGhlIHNjcm9sbCBsb2NraW5nXG4gICAgICovXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBvbkNsaWNrPXt0aGlzLmJsdXJTZWxlY3RJbnB1dH1cbiAgICAgICAgICBjc3M9e3sgcG9zaXRpb246ICdmaXhlZCcsIGxlZnQ6IDAsIGJvdHRvbTogMCwgcmlnaHQ6IDAsIHRvcDogMCB9fVxuICAgICAgICAvPlxuICAgICAgICA8Tm9kZVJlc29sdmVyIGlubmVyUmVmPXt0aGlzLmdldFNjcm9sbFRhcmdldH0+e2NoaWxkcmVufTwvTm9kZVJlc29sdmVyPlxuICAgICAgICB7dG91Y2hTY3JvbGxUYXJnZXQgPyAoXG4gICAgICAgICAgPFNjcm9sbExvY2sgdG91Y2hTY3JvbGxUYXJnZXQ9e3RvdWNoU2Nyb2xsVGFyZ2V0fSAvPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cbiJdfQ== */\"\n};\n\n// NOTE:\n// We shouldn't need this after updating to React v16.3.0, which introduces:\n// - createRef() https://reactjs.org/docs/react-api.html#reactcreateref\n// - forwardRef() https://reactjs.org/docs/react-api.html#reactforwardref\nvar ScrollBlock =\n/*#__PURE__*/\nfunction (_PureComponent) {\n _inherits(ScrollBlock, _PureComponent);\n\n function ScrollBlock() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, ScrollBlock);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(ScrollBlock)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"state\", {\n touchScrollTarget: null\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getScrollTarget\", function (ref) {\n if (ref === _this.state.touchScrollTarget) return;\n\n _this.setState({\n touchScrollTarget: ref\n });\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"blurSelectInput\", function () {\n if (document.activeElement) {\n document.activeElement.blur();\n }\n });\n\n return _this;\n }\n\n _createClass(ScrollBlock, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n children = _this$props.children,\n isEnabled = _this$props.isEnabled;\n var touchScrollTarget = this.state.touchScrollTarget; // bail early if not enabled\n\n if (!isEnabled) return children;\n /*\n * Div\n * ------------------------------\n * blocks scrolling on non-body elements behind the menu\n * NodeResolver\n * ------------------------------\n * we need a reference to the scrollable element to \"unlock\" scroll on\n * mobile devices\n * ScrollLock\n * ------------------------------\n * actually does the scroll locking\n */\n\n return jsx(\"div\", null, jsx(\"div\", {\n onClick: this.blurSelectInput,\n css: _ref$1\n }), jsx(NodeResolver, {\n innerRef: this.getScrollTarget\n }, children), touchScrollTarget ? jsx(ScrollLock, {\n touchScrollTarget: touchScrollTarget\n }) : null);\n }\n }]);\n\n return ScrollBlock;\n}(PureComponent);\n\nvar ScrollCaptor =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(ScrollCaptor, _Component);\n\n function ScrollCaptor() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, ScrollCaptor);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(ScrollCaptor)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"isBottom\", false);\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"isTop\", false);\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"scrollTarget\", void 0);\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"touchStart\", void 0);\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"cancelScroll\", function (event) {\n event.preventDefault();\n event.stopPropagation();\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleEventDelta\", function (event, delta) {\n var _this$props = _this.props,\n onBottomArrive = _this$props.onBottomArrive,\n onBottomLeave = _this$props.onBottomLeave,\n onTopArrive = _this$props.onTopArrive,\n onTopLeave = _this$props.onTopLeave;\n var _this$scrollTarget = _this.scrollTarget,\n scrollTop = _this$scrollTarget.scrollTop,\n scrollHeight = _this$scrollTarget.scrollHeight,\n clientHeight = _this$scrollTarget.clientHeight;\n var target = _this.scrollTarget;\n var isDeltaPositive = delta > 0;\n var availableScroll = scrollHeight - clientHeight - scrollTop;\n var shouldCancelScroll = false; // reset bottom/top flags\n\n if (availableScroll > delta && _this.isBottom) {\n if (onBottomLeave) onBottomLeave(event);\n _this.isBottom = false;\n }\n\n if (isDeltaPositive && _this.isTop) {\n if (onTopLeave) onTopLeave(event);\n _this.isTop = false;\n } // bottom limit\n\n\n if (isDeltaPositive && delta > availableScroll) {\n if (onBottomArrive && !_this.isBottom) {\n onBottomArrive(event);\n }\n\n target.scrollTop = scrollHeight;\n shouldCancelScroll = true;\n _this.isBottom = true; // top limit\n } else if (!isDeltaPositive && -delta > scrollTop) {\n if (onTopArrive && !_this.isTop) {\n onTopArrive(event);\n }\n\n target.scrollTop = 0;\n shouldCancelScroll = true;\n _this.isTop = true;\n } // cancel scroll\n\n\n if (shouldCancelScroll) {\n _this.cancelScroll(event);\n }\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onWheel\", function (event) {\n _this.handleEventDelta(event, event.deltaY);\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onTouchStart\", function (event) {\n // set touch start so we can calculate touchmove delta\n _this.touchStart = event.changedTouches[0].clientY;\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onTouchMove\", function (event) {\n var deltaY = _this.touchStart - event.changedTouches[0].clientY;\n\n _this.handleEventDelta(event, deltaY);\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getScrollTarget\", function (ref) {\n _this.scrollTarget = ref;\n });\n\n return _this;\n }\n\n _createClass(ScrollCaptor, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.startListening(this.scrollTarget);\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.stopListening(this.scrollTarget);\n }\n }, {\n key: \"startListening\",\n value: function startListening(el) {\n // bail early if no element is available to attach to\n if (!el) return; // all the if statements are to appease Flow 😢\n\n if (typeof el.addEventListener === 'function') {\n el.addEventListener('wheel', this.onWheel, false);\n }\n\n if (typeof el.addEventListener === 'function') {\n el.addEventListener('touchstart', this.onTouchStart, false);\n }\n\n if (typeof el.addEventListener === 'function') {\n el.addEventListener('touchmove', this.onTouchMove, false);\n }\n }\n }, {\n key: \"stopListening\",\n value: function stopListening(el) {\n // all the if statements are to appease Flow 😢\n if (typeof el.removeEventListener === 'function') {\n el.removeEventListener('wheel', this.onWheel, false);\n }\n\n if (typeof el.removeEventListener === 'function') {\n el.removeEventListener('touchstart', this.onTouchStart, false);\n }\n\n if (typeof el.removeEventListener === 'function') {\n el.removeEventListener('touchmove', this.onTouchMove, false);\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n return React.createElement(NodeResolver, {\n innerRef: this.getScrollTarget\n }, this.props.children);\n }\n }]);\n\n return ScrollCaptor;\n}(Component);\n\nvar ScrollCaptorSwitch =\n/*#__PURE__*/\nfunction (_Component2) {\n _inherits(ScrollCaptorSwitch, _Component2);\n\n function ScrollCaptorSwitch() {\n _classCallCheck(this, ScrollCaptorSwitch);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(ScrollCaptorSwitch).apply(this, arguments));\n }\n\n _createClass(ScrollCaptorSwitch, [{\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n isEnabled = _this$props2.isEnabled,\n props = _objectWithoutProperties(_this$props2, [\"isEnabled\"]);\n\n return isEnabled ? React.createElement(ScrollCaptor, props) : this.props.children;\n }\n }]);\n\n return ScrollCaptorSwitch;\n}(Component);\n\n_defineProperty(ScrollCaptorSwitch, \"defaultProps\", {\n isEnabled: true\n});\n\nvar instructionsAriaMessage = function instructionsAriaMessage(event) {\n var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var isSearchable = context.isSearchable,\n isMulti = context.isMulti,\n label = context.label,\n isDisabled = context.isDisabled;\n\n switch (event) {\n case 'menu':\n return \"Use Up and Down to choose options\".concat(isDisabled ? '' : ', press Enter to select the currently focused option', \", press Escape to exit the menu, press Tab to select the option and exit the menu.\");\n\n case 'input':\n return \"\".concat(label ? label : 'Select', \" is focused \").concat(isSearchable ? ',type to refine list' : '', \", press Down to open the menu, \").concat(isMulti ? ' press left to focus selected values' : '');\n\n case 'value':\n return 'Use left and right to toggle between focused values, press Backspace to remove the currently focused value';\n }\n};\nvar valueEventAriaMessage = function valueEventAriaMessage(event, context) {\n var value = context.value,\n isDisabled = context.isDisabled;\n if (!value) return;\n\n switch (event) {\n case 'deselect-option':\n case 'pop-value':\n case 'remove-value':\n return \"option \".concat(value, \", deselected.\");\n\n case 'select-option':\n return isDisabled ? \"option \".concat(value, \" is disabled. Select another option.\") : \"option \".concat(value, \", selected.\");\n }\n};\nvar valueFocusAriaMessage = function valueFocusAriaMessage(_ref) {\n var focusedValue = _ref.focusedValue,\n getOptionLabel = _ref.getOptionLabel,\n selectValue = _ref.selectValue;\n return \"value \".concat(getOptionLabel(focusedValue), \" focused, \").concat(selectValue.indexOf(focusedValue) + 1, \" of \").concat(selectValue.length, \".\");\n};\nvar optionFocusAriaMessage = function optionFocusAriaMessage(_ref2) {\n var focusedOption = _ref2.focusedOption,\n getOptionLabel = _ref2.getOptionLabel,\n options = _ref2.options;\n return \"option \".concat(getOptionLabel(focusedOption), \" focused\").concat(focusedOption.isDisabled ? ' disabled' : '', \", \").concat(options.indexOf(focusedOption) + 1, \" of \").concat(options.length, \".\");\n};\nvar resultsAriaMessage = function resultsAriaMessage(_ref3) {\n var inputValue = _ref3.inputValue,\n screenReaderMessage = _ref3.screenReaderMessage;\n return \"\".concat(screenReaderMessage).concat(inputValue ? ' for search term ' + inputValue : '', \".\");\n};\n\nvar formatGroupLabel = function formatGroupLabel(group) {\n return group.label;\n};\nvar getOptionLabel = function getOptionLabel(option) {\n return option.label;\n};\nvar getOptionValue = function getOptionValue(option) {\n return option.value;\n};\nvar isOptionDisabled = function isOptionDisabled(option) {\n return !!option.isDisabled;\n};\n\nvar defaultStyles = {\n clearIndicator: clearIndicatorCSS,\n container: containerCSS,\n control: css,\n dropdownIndicator: dropdownIndicatorCSS,\n group: groupCSS,\n groupHeading: groupHeadingCSS,\n indicatorsContainer: indicatorsContainerCSS,\n indicatorSeparator: indicatorSeparatorCSS,\n input: inputCSS,\n loadingIndicator: loadingIndicatorCSS,\n loadingMessage: loadingMessageCSS,\n menu: menuCSS,\n menuList: menuListCSS,\n menuPortal: menuPortalCSS,\n multiValue: multiValueCSS,\n multiValueLabel: multiValueLabelCSS,\n multiValueRemove: multiValueRemoveCSS,\n noOptionsMessage: noOptionsMessageCSS,\n option: optionCSS,\n placeholder: placeholderCSS,\n singleValue: css$1,\n valueContainer: valueContainerCSS\n}; // Merge Utility\n// Allows consumers to extend a base Select with additional styles\n\nfunction mergeStyles(source) {\n var target = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n // initialize with source styles\n var styles = _objectSpread({}, source); // massage in target styles\n\n\n Object.keys(target).forEach(function (key) {\n if (source[key]) {\n styles[key] = function (rsCss, props) {\n return target[key](source[key](rsCss, props), props);\n };\n } else {\n styles[key] = target[key];\n }\n });\n return styles;\n}\n\nvar colors = {\n primary: '#2684FF',\n primary75: '#4C9AFF',\n primary50: '#B2D4FF',\n primary25: '#DEEBFF',\n danger: '#DE350B',\n dangerLight: '#FFBDAD',\n neutral0: 'hsl(0, 0%, 100%)',\n neutral5: 'hsl(0, 0%, 95%)',\n neutral10: 'hsl(0, 0%, 90%)',\n neutral20: 'hsl(0, 0%, 80%)',\n neutral30: 'hsl(0, 0%, 70%)',\n neutral40: 'hsl(0, 0%, 60%)',\n neutral50: 'hsl(0, 0%, 50%)',\n neutral60: 'hsl(0, 0%, 40%)',\n neutral70: 'hsl(0, 0%, 30%)',\n neutral80: 'hsl(0, 0%, 20%)',\n neutral90: 'hsl(0, 0%, 10%)'\n};\nvar borderRadius = 4; // Used to calculate consistent margin/padding on elements\n\nvar baseUnit = 4; // The minimum height of the control\n\nvar controlHeight = 38; // The amount of space between the control and menu */\n\nvar menuGutter = baseUnit * 2;\nvar spacing = {\n baseUnit: baseUnit,\n controlHeight: controlHeight,\n menuGutter: menuGutter\n};\nvar defaultTheme = {\n borderRadius: borderRadius,\n colors: colors,\n spacing: spacing\n};\n\nvar defaultProps = {\n backspaceRemovesValue: true,\n blurInputOnSelect: isTouchCapable(),\n captureMenuScroll: !isTouchCapable(),\n closeMenuOnSelect: true,\n closeMenuOnScroll: false,\n components: {},\n controlShouldRenderValue: true,\n escapeClearsValue: false,\n filterOption: createFilter(),\n formatGroupLabel: formatGroupLabel,\n getOptionLabel: getOptionLabel,\n getOptionValue: getOptionValue,\n isDisabled: false,\n isLoading: false,\n isMulti: false,\n isRtl: false,\n isSearchable: true,\n isOptionDisabled: isOptionDisabled,\n loadingMessage: function loadingMessage() {\n return 'Loading...';\n },\n maxMenuHeight: 300,\n minMenuHeight: 140,\n menuIsOpen: false,\n menuPlacement: 'bottom',\n menuPosition: 'absolute',\n menuShouldBlockScroll: false,\n menuShouldScrollIntoView: !isMobileDevice(),\n noOptionsMessage: function noOptionsMessage() {\n return 'No options';\n },\n openMenuOnFocus: false,\n openMenuOnClick: true,\n options: [],\n pageSize: 5,\n placeholder: 'Select...',\n screenReaderStatus: function screenReaderStatus(_ref) {\n var count = _ref.count;\n return \"\".concat(count, \" result\").concat(count !== 1 ? 's' : '', \" available\");\n },\n styles: {},\n tabIndex: '0',\n tabSelectsValue: true\n};\nvar instanceId = 1;\n\nvar Select =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(Select, _Component);\n\n // Misc. Instance Properties\n // ------------------------------\n // TODO\n // Refs\n // ------------------------------\n // Lifecycle\n // ------------------------------\n function Select(_props) {\n var _this;\n\n _classCallCheck(this, Select);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(Select).call(this, _props));\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"state\", {\n ariaLiveSelection: '',\n ariaLiveContext: '',\n focusedOption: null,\n focusedValue: null,\n inputIsHidden: false,\n isFocused: false,\n menuOptions: {\n render: [],\n focusable: []\n },\n selectValue: []\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"blockOptionHover\", false);\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"isComposing\", false);\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"clearFocusValueOnUpdate\", false);\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"commonProps\", void 0);\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"components\", void 0);\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"hasGroups\", false);\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"initialTouchX\", 0);\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"initialTouchY\", 0);\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"inputIsHiddenAfterUpdate\", void 0);\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"instancePrefix\", '');\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"openAfterFocus\", false);\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"scrollToFocusedOptionOnUpdate\", false);\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"userIsDragging\", void 0);\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"controlRef\", null);\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getControlRef\", function (ref) {\n _this.controlRef = ref;\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"focusedOptionRef\", null);\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getFocusedOptionRef\", function (ref) {\n _this.focusedOptionRef = ref;\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"menuListRef\", null);\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getMenuListRef\", function (ref) {\n _this.menuListRef = ref;\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"inputRef\", null);\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getInputRef\", function (ref) {\n _this.inputRef = ref;\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"cacheComponents\", function (components) {\n _this.components = defaultComponents({\n components: components\n });\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"focus\", _this.focusInput);\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"blur\", _this.blurInput);\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onChange\", function (newValue, actionMeta) {\n var _this$props = _this.props,\n onChange = _this$props.onChange,\n name = _this$props.name;\n onChange(newValue, _objectSpread({}, actionMeta, {\n name: name\n }));\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"setValue\", function (newValue) {\n var action = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'set-value';\n var option = arguments.length > 2 ? arguments[2] : undefined;\n var _this$props2 = _this.props,\n closeMenuOnSelect = _this$props2.closeMenuOnSelect,\n isMulti = _this$props2.isMulti;\n\n _this.onInputChange('', {\n action: 'set-value'\n });\n\n if (closeMenuOnSelect) {\n _this.inputIsHiddenAfterUpdate = !isMulti;\n\n _this.onMenuClose();\n } // when the select value should change, we should reset focusedValue\n\n\n _this.clearFocusValueOnUpdate = true;\n\n _this.onChange(newValue, {\n action: action,\n option: option\n });\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"selectOption\", function (newValue) {\n var _this$props3 = _this.props,\n blurInputOnSelect = _this$props3.blurInputOnSelect,\n isMulti = _this$props3.isMulti;\n var selectValue = _this.state.selectValue;\n\n if (isMulti) {\n if (_this.isOptionSelected(newValue, selectValue)) {\n var candidate = _this.getOptionValue(newValue);\n\n _this.setValue(selectValue.filter(function (i) {\n return _this.getOptionValue(i) !== candidate;\n }), 'deselect-option', newValue);\n\n _this.announceAriaLiveSelection({\n event: 'deselect-option',\n context: {\n value: _this.getOptionLabel(newValue)\n }\n });\n } else {\n if (!_this.isOptionDisabled(newValue, selectValue)) {\n _this.setValue([].concat(_toConsumableArray(selectValue), [newValue]), 'select-option', newValue);\n\n _this.announceAriaLiveSelection({\n event: 'select-option',\n context: {\n value: _this.getOptionLabel(newValue)\n }\n });\n } else {\n // announce that option is disabled\n _this.announceAriaLiveSelection({\n event: 'select-option',\n context: {\n value: _this.getOptionLabel(newValue),\n isDisabled: true\n }\n });\n }\n }\n } else {\n if (!_this.isOptionDisabled(newValue, selectValue)) {\n _this.setValue(newValue, 'select-option');\n\n _this.announceAriaLiveSelection({\n event: 'select-option',\n context: {\n value: _this.getOptionLabel(newValue)\n }\n });\n } else {\n // announce that option is disabled\n _this.announceAriaLiveSelection({\n event: 'select-option',\n context: {\n value: _this.getOptionLabel(newValue),\n isDisabled: true\n }\n });\n }\n }\n\n if (blurInputOnSelect) {\n _this.blurInput();\n }\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"removeValue\", function (removedValue) {\n var selectValue = _this.state.selectValue;\n\n var candidate = _this.getOptionValue(removedValue);\n\n var newValue = selectValue.filter(function (i) {\n return _this.getOptionValue(i) !== candidate;\n });\n\n _this.onChange(newValue.length ? newValue : null, {\n action: 'remove-value',\n removedValue: removedValue\n });\n\n _this.announceAriaLiveSelection({\n event: 'remove-value',\n context: {\n value: removedValue ? _this.getOptionLabel(removedValue) : ''\n }\n });\n\n _this.focusInput();\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"clearValue\", function () {\n var isMulti = _this.props.isMulti;\n\n _this.onChange(isMulti ? [] : null, {\n action: 'clear'\n });\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"popValue\", function () {\n var selectValue = _this.state.selectValue;\n var lastSelectedValue = selectValue[selectValue.length - 1];\n var newValue = selectValue.slice(0, selectValue.length - 1);\n\n _this.announceAriaLiveSelection({\n event: 'pop-value',\n context: {\n value: lastSelectedValue ? _this.getOptionLabel(lastSelectedValue) : ''\n }\n });\n\n _this.onChange(newValue.length ? newValue : null, {\n action: 'pop-value',\n removedValue: lastSelectedValue\n });\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getOptionLabel\", function (data) {\n return _this.props.getOptionLabel(data);\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getOptionValue\", function (data) {\n return _this.props.getOptionValue(data);\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getStyles\", function (key, props) {\n var base = defaultStyles[key](props);\n base.boxSizing = 'border-box';\n var custom = _this.props.styles[key];\n return custom ? custom(base, props) : base;\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getElementId\", function (element) {\n return \"\".concat(_this.instancePrefix, \"-\").concat(element);\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getActiveDescendentId\", function () {\n var menuIsOpen = _this.props.menuIsOpen;\n var _this$state = _this.state,\n menuOptions = _this$state.menuOptions,\n focusedOption = _this$state.focusedOption;\n if (!focusedOption || !menuIsOpen) return undefined;\n var index = menuOptions.focusable.indexOf(focusedOption);\n var option = menuOptions.render[index];\n return option && option.key;\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"announceAriaLiveSelection\", function (_ref2) {\n var event = _ref2.event,\n context = _ref2.context;\n\n _this.setState({\n ariaLiveSelection: valueEventAriaMessage(event, context)\n });\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"announceAriaLiveContext\", function (_ref3) {\n var event = _ref3.event,\n context = _ref3.context;\n\n _this.setState({\n ariaLiveContext: instructionsAriaMessage(event, _objectSpread({}, context, {\n label: _this.props['aria-label']\n }))\n });\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onMenuMouseDown\", function (event) {\n if (event.button !== 0) {\n return;\n }\n\n event.stopPropagation();\n event.preventDefault();\n\n _this.focusInput();\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onMenuMouseMove\", function (event) {\n _this.blockOptionHover = false;\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onControlMouseDown\", function (event) {\n var openMenuOnClick = _this.props.openMenuOnClick;\n\n if (!_this.state.isFocused) {\n if (openMenuOnClick) {\n _this.openAfterFocus = true;\n }\n\n _this.focusInput();\n } else if (!_this.props.menuIsOpen) {\n if (openMenuOnClick) {\n _this.openMenu('first');\n }\n } else {\n //$FlowFixMe\n if (event.target.tagName !== 'INPUT') {\n _this.onMenuClose();\n }\n } //$FlowFixMe\n\n\n if (event.target.tagName !== 'INPUT') {\n event.preventDefault();\n }\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onDropdownIndicatorMouseDown\", function (event) {\n // ignore mouse events that weren't triggered by the primary button\n if (event && event.type === 'mousedown' && event.button !== 0) {\n return;\n }\n\n if (_this.props.isDisabled) return;\n var _this$props4 = _this.props,\n isMulti = _this$props4.isMulti,\n menuIsOpen = _this$props4.menuIsOpen;\n\n _this.focusInput();\n\n if (menuIsOpen) {\n _this.inputIsHiddenAfterUpdate = !isMulti;\n\n _this.onMenuClose();\n } else {\n _this.openMenu('first');\n }\n\n event.preventDefault();\n event.stopPropagation();\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onClearIndicatorMouseDown\", function (event) {\n // ignore mouse events that weren't triggered by the primary button\n if (event && event.type === 'mousedown' && event.button !== 0) {\n return;\n }\n\n _this.clearValue();\n\n event.stopPropagation();\n _this.openAfterFocus = false;\n\n if (event.type === 'touchend') {\n _this.focusInput();\n } else {\n setTimeout(function () {\n return _this.focusInput();\n });\n }\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onScroll\", function (event) {\n if (typeof _this.props.closeMenuOnScroll === 'boolean') {\n if (event.target instanceof HTMLElement && isDocumentElement(event.target)) {\n _this.props.onMenuClose();\n }\n } else if (typeof _this.props.closeMenuOnScroll === 'function') {\n if (_this.props.closeMenuOnScroll(event)) {\n _this.props.onMenuClose();\n }\n }\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onCompositionStart\", function () {\n _this.isComposing = true;\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onCompositionEnd\", function () {\n _this.isComposing = false;\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onTouchStart\", function (_ref4) {\n var touches = _ref4.touches;\n var touch = touches.item(0);\n\n if (!touch) {\n return;\n }\n\n _this.initialTouchX = touch.clientX;\n _this.initialTouchY = touch.clientY;\n _this.userIsDragging = false;\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onTouchMove\", function (_ref5) {\n var touches = _ref5.touches;\n var touch = touches.item(0);\n\n if (!touch) {\n return;\n }\n\n var deltaX = Math.abs(touch.clientX - _this.initialTouchX);\n var deltaY = Math.abs(touch.clientY - _this.initialTouchY);\n var moveThreshold = 5;\n _this.userIsDragging = deltaX > moveThreshold || deltaY > moveThreshold;\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onTouchEnd\", function (event) {\n if (_this.userIsDragging) return; // close the menu if the user taps outside\n // we're checking on event.target here instead of event.currentTarget, because we want to assert information\n // on events on child elements, not the document (which we've attached this handler to).\n\n if (_this.controlRef && !_this.controlRef.contains(event.target) && _this.menuListRef && !_this.menuListRef.contains(event.target)) {\n _this.blurInput();\n } // reset move vars\n\n\n _this.initialTouchX = 0;\n _this.initialTouchY = 0;\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onControlTouchEnd\", function (event) {\n if (_this.userIsDragging) return;\n\n _this.onControlMouseDown(event);\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onClearIndicatorTouchEnd\", function (event) {\n if (_this.userIsDragging) return;\n\n _this.onClearIndicatorMouseDown(event);\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onDropdownIndicatorTouchEnd\", function (event) {\n if (_this.userIsDragging) return;\n\n _this.onDropdownIndicatorMouseDown(event);\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleInputChange\", function (event) {\n var inputValue = event.currentTarget.value;\n _this.inputIsHiddenAfterUpdate = false;\n\n _this.onInputChange(inputValue, {\n action: 'input-change'\n });\n\n _this.onMenuOpen();\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onInputFocus\", function (event) {\n var _this$props5 = _this.props,\n isSearchable = _this$props5.isSearchable,\n isMulti = _this$props5.isMulti;\n\n if (_this.props.onFocus) {\n _this.props.onFocus(event);\n }\n\n _this.inputIsHiddenAfterUpdate = false;\n\n _this.announceAriaLiveContext({\n event: 'input',\n context: {\n isSearchable: isSearchable,\n isMulti: isMulti\n }\n });\n\n _this.setState({\n isFocused: true\n });\n\n if (_this.openAfterFocus || _this.props.openMenuOnFocus) {\n _this.openMenu('first');\n }\n\n _this.openAfterFocus = false;\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onInputBlur\", function (event) {\n if (_this.menuListRef && _this.menuListRef.contains(document.activeElement)) {\n _this.inputRef.focus();\n\n return;\n }\n\n if (_this.props.onBlur) {\n _this.props.onBlur(event);\n }\n\n _this.onInputChange('', {\n action: 'input-blur'\n });\n\n _this.onMenuClose();\n\n _this.setState({\n focusedValue: null,\n isFocused: false\n });\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onOptionHover\", function (focusedOption) {\n if (_this.blockOptionHover || _this.state.focusedOption === focusedOption) {\n return;\n }\n\n _this.setState({\n focusedOption: focusedOption\n });\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"shouldHideSelectedOptions\", function () {\n var _this$props6 = _this.props,\n hideSelectedOptions = _this$props6.hideSelectedOptions,\n isMulti = _this$props6.isMulti;\n if (hideSelectedOptions === undefined) return isMulti;\n return hideSelectedOptions;\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onKeyDown\", function (event) {\n var _this$props7 = _this.props,\n isMulti = _this$props7.isMulti,\n backspaceRemovesValue = _this$props7.backspaceRemovesValue,\n escapeClearsValue = _this$props7.escapeClearsValue,\n inputValue = _this$props7.inputValue,\n isClearable = _this$props7.isClearable,\n isDisabled = _this$props7.isDisabled,\n menuIsOpen = _this$props7.menuIsOpen,\n onKeyDown = _this$props7.onKeyDown,\n tabSelectsValue = _this$props7.tabSelectsValue,\n openMenuOnFocus = _this$props7.openMenuOnFocus;\n var _this$state2 = _this.state,\n focusedOption = _this$state2.focusedOption,\n focusedValue = _this$state2.focusedValue,\n selectValue = _this$state2.selectValue;\n if (isDisabled) return;\n\n if (typeof onKeyDown === 'function') {\n onKeyDown(event);\n\n if (event.defaultPrevented) {\n return;\n }\n } // Block option hover events when the user has just pressed a key\n\n\n _this.blockOptionHover = true;\n\n switch (event.key) {\n case 'ArrowLeft':\n if (!isMulti || inputValue) return;\n\n _this.focusValue('previous');\n\n break;\n\n case 'ArrowRight':\n if (!isMulti || inputValue) return;\n\n _this.focusValue('next');\n\n break;\n\n case 'Delete':\n case 'Backspace':\n if (inputValue) return;\n\n if (focusedValue) {\n _this.removeValue(focusedValue);\n } else {\n if (!backspaceRemovesValue) return;\n\n if (isMulti) {\n _this.popValue();\n } else if (isClearable) {\n _this.clearValue();\n }\n }\n\n break;\n\n case 'Tab':\n if (_this.isComposing) return;\n\n if (event.shiftKey || !menuIsOpen || !tabSelectsValue || !focusedOption || // don't capture the event if the menu opens on focus and the focused\n // option is already selected; it breaks the flow of navigation\n openMenuOnFocus && _this.isOptionSelected(focusedOption, selectValue)) {\n return;\n }\n\n _this.selectOption(focusedOption);\n\n break;\n\n case 'Enter':\n if (event.keyCode === 229) {\n // ignore the keydown event from an Input Method Editor(IME)\n // ref. https://www.w3.org/TR/uievents/#determine-keydown-keyup-keyCode\n break;\n }\n\n if (menuIsOpen) {\n if (!focusedOption) return;\n if (_this.isComposing) return;\n\n _this.selectOption(focusedOption);\n\n break;\n }\n\n return;\n\n case 'Escape':\n if (menuIsOpen) {\n _this.inputIsHiddenAfterUpdate = false;\n\n _this.onInputChange('', {\n action: 'menu-close'\n });\n\n _this.onMenuClose();\n } else if (isClearable && escapeClearsValue) {\n _this.clearValue();\n }\n\n break;\n\n case ' ':\n // space\n if (inputValue) {\n return;\n }\n\n if (!menuIsOpen) {\n _this.openMenu('first');\n\n break;\n }\n\n if (!focusedOption) return;\n\n _this.selectOption(focusedOption);\n\n break;\n\n case 'ArrowUp':\n if (menuIsOpen) {\n _this.focusOption('up');\n } else {\n _this.openMenu('last');\n }\n\n break;\n\n case 'ArrowDown':\n if (menuIsOpen) {\n _this.focusOption('down');\n } else {\n _this.openMenu('first');\n }\n\n break;\n\n case 'PageUp':\n if (!menuIsOpen) return;\n\n _this.focusOption('pageup');\n\n break;\n\n case 'PageDown':\n if (!menuIsOpen) return;\n\n _this.focusOption('pagedown');\n\n break;\n\n case 'Home':\n if (!menuIsOpen) return;\n\n _this.focusOption('first');\n\n break;\n\n case 'End':\n if (!menuIsOpen) return;\n\n _this.focusOption('last');\n\n break;\n\n default:\n return;\n }\n\n event.preventDefault();\n });\n\n var value = _props.value;\n _this.cacheComponents = memoizeOne(_this.cacheComponents, exportedEqual).bind(_assertThisInitialized(_assertThisInitialized(_this)));\n\n _this.cacheComponents(_props.components);\n\n _this.instancePrefix = 'react-select-' + (_this.props.instanceId || ++instanceId);\n\n var _selectValue = cleanValue(value);\n\n var _menuOptions = _props.menuIsOpen ? _this.buildMenuOptions(_props, _selectValue) : {\n render: [],\n focusable: []\n };\n\n _this.state.menuOptions = _menuOptions;\n _this.state.selectValue = _selectValue;\n return _this;\n }\n\n _createClass(Select, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.startListeningComposition();\n this.startListeningToTouch();\n\n if (this.props.closeMenuOnScroll && document && document.addEventListener) {\n // Listen to all scroll events, and filter them out inside of 'onScroll'\n document.addEventListener('scroll', this.onScroll, true);\n }\n\n if (this.props.autoFocus) {\n this.focusInput();\n }\n }\n }, {\n key: \"UNSAFE_componentWillReceiveProps\",\n value: function UNSAFE_componentWillReceiveProps(nextProps) {\n var _this$props8 = this.props,\n options = _this$props8.options,\n value = _this$props8.value,\n menuIsOpen = _this$props8.menuIsOpen,\n inputValue = _this$props8.inputValue; // re-cache custom components\n\n this.cacheComponents(nextProps.components); // rebuild the menu options\n\n if (nextProps.value !== value || nextProps.options !== options || nextProps.menuIsOpen !== menuIsOpen || nextProps.inputValue !== inputValue) {\n var selectValue = cleanValue(nextProps.value);\n var menuOptions = nextProps.menuIsOpen ? this.buildMenuOptions(nextProps, selectValue) : {\n render: [],\n focusable: []\n };\n var focusedValue = this.getNextFocusedValue(selectValue);\n var focusedOption = this.getNextFocusedOption(menuOptions.focusable);\n this.setState({\n menuOptions: menuOptions,\n selectValue: selectValue,\n focusedOption: focusedOption,\n focusedValue: focusedValue\n });\n } // some updates should toggle the state of the input visibility\n\n\n if (this.inputIsHiddenAfterUpdate != null) {\n this.setState({\n inputIsHidden: this.inputIsHiddenAfterUpdate\n });\n delete this.inputIsHiddenAfterUpdate;\n }\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps) {\n var _this$props9 = this.props,\n isDisabled = _this$props9.isDisabled,\n menuIsOpen = _this$props9.menuIsOpen;\n var isFocused = this.state.isFocused;\n\n if ( // ensure focus is restored correctly when the control becomes enabled\n isFocused && !isDisabled && prevProps.isDisabled || // ensure focus is on the Input when the menu opens\n isFocused && menuIsOpen && !prevProps.menuIsOpen) {\n this.focusInput();\n } // scroll the focused option into view if necessary\n\n\n if (this.menuListRef && this.focusedOptionRef && this.scrollToFocusedOptionOnUpdate) {\n scrollIntoView(this.menuListRef, this.focusedOptionRef);\n }\n\n this.scrollToFocusedOptionOnUpdate = false;\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.stopListeningComposition();\n this.stopListeningToTouch();\n document.removeEventListener('scroll', this.onScroll, true);\n }\n }, {\n key: \"onMenuOpen\",\n // ==============================\n // Consumer Handlers\n // ==============================\n value: function onMenuOpen() {\n this.props.onMenuOpen();\n }\n }, {\n key: \"onMenuClose\",\n value: function onMenuClose() {\n var _this$props10 = this.props,\n isSearchable = _this$props10.isSearchable,\n isMulti = _this$props10.isMulti;\n this.announceAriaLiveContext({\n event: 'input',\n context: {\n isSearchable: isSearchable,\n isMulti: isMulti\n }\n });\n this.onInputChange('', {\n action: 'menu-close'\n });\n this.props.onMenuClose();\n }\n }, {\n key: \"onInputChange\",\n value: function onInputChange(newValue, actionMeta) {\n this.props.onInputChange(newValue, actionMeta);\n } // ==============================\n // Methods\n // ==============================\n\n }, {\n key: \"focusInput\",\n value: function focusInput() {\n if (!this.inputRef) return;\n this.inputRef.focus();\n }\n }, {\n key: \"blurInput\",\n value: function blurInput() {\n if (!this.inputRef) return;\n this.inputRef.blur();\n } // aliased for consumers\n\n }, {\n key: \"openMenu\",\n value: function openMenu(focusOption) {\n var _this$state3 = this.state,\n menuOptions = _this$state3.menuOptions,\n selectValue = _this$state3.selectValue,\n isFocused = _this$state3.isFocused;\n var isMulti = this.props.isMulti;\n var openAtIndex = focusOption === 'first' ? 0 : menuOptions.focusable.length - 1;\n\n if (!isMulti) {\n var selectedIndex = menuOptions.focusable.indexOf(selectValue[0]);\n\n if (selectedIndex > -1) {\n openAtIndex = selectedIndex;\n }\n } // only scroll if the menu isn't already open\n\n\n this.scrollToFocusedOptionOnUpdate = !(isFocused && this.menuListRef);\n this.inputIsHiddenAfterUpdate = false;\n this.onMenuOpen();\n this.setState({\n focusedValue: null,\n focusedOption: menuOptions.focusable[openAtIndex]\n });\n this.announceAriaLiveContext({\n event: 'menu'\n });\n }\n }, {\n key: \"focusValue\",\n value: function focusValue(direction) {\n var _this$props11 = this.props,\n isMulti = _this$props11.isMulti,\n isSearchable = _this$props11.isSearchable;\n var _this$state4 = this.state,\n selectValue = _this$state4.selectValue,\n focusedValue = _this$state4.focusedValue; // Only multiselects support value focusing\n\n if (!isMulti) return;\n this.setState({\n focusedOption: null\n });\n var focusedIndex = selectValue.indexOf(focusedValue);\n\n if (!focusedValue) {\n focusedIndex = -1;\n this.announceAriaLiveContext({\n event: 'value'\n });\n }\n\n var lastIndex = selectValue.length - 1;\n var nextFocus = -1;\n if (!selectValue.length) return;\n\n switch (direction) {\n case 'previous':\n if (focusedIndex === 0) {\n // don't cycle from the start to the end\n nextFocus = 0;\n } else if (focusedIndex === -1) {\n // if nothing is focused, focus the last value first\n nextFocus = lastIndex;\n } else {\n nextFocus = focusedIndex - 1;\n }\n\n break;\n\n case 'next':\n if (focusedIndex > -1 && focusedIndex < lastIndex) {\n nextFocus = focusedIndex + 1;\n }\n\n break;\n }\n\n if (nextFocus === -1) {\n this.announceAriaLiveContext({\n event: 'input',\n context: {\n isSearchable: isSearchable,\n isMulti: isMulti\n }\n });\n }\n\n this.setState({\n inputIsHidden: nextFocus !== -1,\n focusedValue: selectValue[nextFocus]\n });\n }\n }, {\n key: \"focusOption\",\n value: function focusOption() {\n var direction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'first';\n var pageSize = this.props.pageSize;\n var _this$state5 = this.state,\n focusedOption = _this$state5.focusedOption,\n menuOptions = _this$state5.menuOptions;\n var options = menuOptions.focusable;\n if (!options.length) return;\n var nextFocus = 0; // handles 'first'\n\n var focusedIndex = options.indexOf(focusedOption);\n\n if (!focusedOption) {\n focusedIndex = -1;\n this.announceAriaLiveContext({\n event: 'menu'\n });\n }\n\n if (direction === 'up') {\n nextFocus = focusedIndex > 0 ? focusedIndex - 1 : options.length - 1;\n } else if (direction === 'down') {\n nextFocus = (focusedIndex + 1) % options.length;\n } else if (direction === 'pageup') {\n nextFocus = focusedIndex - pageSize;\n if (nextFocus < 0) nextFocus = 0;\n } else if (direction === 'pagedown') {\n nextFocus = focusedIndex + pageSize;\n if (nextFocus > options.length - 1) nextFocus = options.length - 1;\n } else if (direction === 'last') {\n nextFocus = options.length - 1;\n }\n\n this.scrollToFocusedOptionOnUpdate = true;\n this.setState({\n focusedOption: options[nextFocus],\n focusedValue: null\n });\n this.announceAriaLiveContext({\n event: 'menu',\n context: {\n isDisabled: isOptionDisabled(options[nextFocus])\n }\n });\n }\n }, {\n key: \"getTheme\",\n // ==============================\n // Getters\n // ==============================\n value: function getTheme() {\n // Use the default theme if there are no customizations.\n if (!this.props.theme) {\n return defaultTheme;\n } // If the theme prop is a function, assume the function\n // knows how to merge the passed-in default theme with\n // its own modifications.\n\n\n if (typeof this.props.theme === 'function') {\n return this.props.theme(defaultTheme);\n } // Otherwise, if a plain theme object was passed in,\n // overlay it with the default theme.\n\n\n return _objectSpread({}, defaultTheme, this.props.theme);\n }\n }, {\n key: \"getCommonProps\",\n value: function getCommonProps() {\n var clearValue = this.clearValue,\n getStyles = this.getStyles,\n setValue = this.setValue,\n selectOption = this.selectOption,\n props = this.props;\n var classNamePrefix = props.classNamePrefix,\n isMulti = props.isMulti,\n isRtl = props.isRtl,\n options = props.options;\n var selectValue = this.state.selectValue;\n var hasValue = this.hasValue();\n\n var getValue = function getValue() {\n return selectValue;\n };\n\n var cx = classNames.bind(null, classNamePrefix);\n return {\n cx: cx,\n clearValue: clearValue,\n getStyles: getStyles,\n getValue: getValue,\n hasValue: hasValue,\n isMulti: isMulti,\n isRtl: isRtl,\n options: options,\n selectOption: selectOption,\n setValue: setValue,\n selectProps: props,\n theme: this.getTheme()\n };\n }\n }, {\n key: \"getNextFocusedValue\",\n value: function getNextFocusedValue(nextSelectValue) {\n if (this.clearFocusValueOnUpdate) {\n this.clearFocusValueOnUpdate = false;\n return null;\n }\n\n var _this$state6 = this.state,\n focusedValue = _this$state6.focusedValue,\n lastSelectValue = _this$state6.selectValue;\n var lastFocusedIndex = lastSelectValue.indexOf(focusedValue);\n\n if (lastFocusedIndex > -1) {\n var nextFocusedIndex = nextSelectValue.indexOf(focusedValue);\n\n if (nextFocusedIndex > -1) {\n // the focused value is still in the selectValue, return it\n return focusedValue;\n } else if (lastFocusedIndex < nextSelectValue.length) {\n // the focusedValue is not present in the next selectValue array by\n // reference, so return the new value at the same index\n return nextSelectValue[lastFocusedIndex];\n }\n }\n\n return null;\n }\n }, {\n key: \"getNextFocusedOption\",\n value: function getNextFocusedOption(options) {\n var lastFocusedOption = this.state.focusedOption;\n return lastFocusedOption && options.indexOf(lastFocusedOption) > -1 ? lastFocusedOption : options[0];\n }\n }, {\n key: \"hasValue\",\n value: function hasValue() {\n var selectValue = this.state.selectValue;\n return selectValue.length > 0;\n }\n }, {\n key: \"hasOptions\",\n value: function hasOptions() {\n return !!this.state.menuOptions.render.length;\n }\n }, {\n key: \"countOptions\",\n value: function countOptions() {\n return this.state.menuOptions.focusable.length;\n }\n }, {\n key: \"isClearable\",\n value: function isClearable() {\n var _this$props12 = this.props,\n isClearable = _this$props12.isClearable,\n isMulti = _this$props12.isMulti; // single select, by default, IS NOT clearable\n // multi select, by default, IS clearable\n\n if (isClearable === undefined) return isMulti;\n return isClearable;\n }\n }, {\n key: \"isOptionDisabled\",\n value: function isOptionDisabled(option, selectValue) {\n return typeof this.props.isOptionDisabled === 'function' ? this.props.isOptionDisabled(option, selectValue) : false;\n }\n }, {\n key: \"isOptionSelected\",\n value: function isOptionSelected(option, selectValue) {\n var _this2 = this;\n\n if (selectValue.indexOf(option) > -1) return true;\n\n if (typeof this.props.isOptionSelected === 'function') {\n return this.props.isOptionSelected(option, selectValue);\n }\n\n var candidate = this.getOptionValue(option);\n return selectValue.some(function (i) {\n return _this2.getOptionValue(i) === candidate;\n });\n }\n }, {\n key: \"filterOption\",\n value: function filterOption(option, inputValue) {\n return this.props.filterOption ? this.props.filterOption(option, inputValue) : true;\n }\n }, {\n key: \"formatOptionLabel\",\n value: function formatOptionLabel(data, context) {\n if (typeof this.props.formatOptionLabel === 'function') {\n var inputValue = this.props.inputValue;\n var selectValue = this.state.selectValue;\n return this.props.formatOptionLabel(data, {\n context: context,\n inputValue: inputValue,\n selectValue: selectValue\n });\n } else {\n return this.getOptionLabel(data);\n }\n }\n }, {\n key: \"formatGroupLabel\",\n value: function formatGroupLabel(data) {\n return this.props.formatGroupLabel(data);\n } // ==============================\n // Mouse Handlers\n // ==============================\n\n }, {\n key: \"startListeningComposition\",\n // ==============================\n // Composition Handlers\n // ==============================\n value: function startListeningComposition() {\n if (document && document.addEventListener) {\n document.addEventListener('compositionstart', this.onCompositionStart, false);\n document.addEventListener('compositionend', this.onCompositionEnd, false);\n }\n }\n }, {\n key: \"stopListeningComposition\",\n value: function stopListeningComposition() {\n if (document && document.removeEventListener) {\n document.removeEventListener('compositionstart', this.onCompositionStart);\n document.removeEventListener('compositionend', this.onCompositionEnd);\n }\n }\n }, {\n key: \"startListeningToTouch\",\n // ==============================\n // Touch Handlers\n // ==============================\n value: function startListeningToTouch() {\n if (document && document.addEventListener) {\n document.addEventListener('touchstart', this.onTouchStart, false);\n document.addEventListener('touchmove', this.onTouchMove, false);\n document.addEventListener('touchend', this.onTouchEnd, false);\n }\n }\n }, {\n key: \"stopListeningToTouch\",\n value: function stopListeningToTouch() {\n if (document && document.removeEventListener) {\n document.removeEventListener('touchstart', this.onTouchStart);\n document.removeEventListener('touchmove', this.onTouchMove);\n document.removeEventListener('touchend', this.onTouchEnd);\n }\n }\n }, {\n key: \"buildMenuOptions\",\n // ==============================\n // Menu Options\n // ==============================\n value: function buildMenuOptions(props, selectValue) {\n var _this3 = this;\n\n var _props$inputValue = props.inputValue,\n inputValue = _props$inputValue === void 0 ? '' : _props$inputValue,\n options = props.options;\n\n var toOption = function toOption(option, id) {\n var isDisabled = _this3.isOptionDisabled(option, selectValue);\n\n var isSelected = _this3.isOptionSelected(option, selectValue);\n\n var label = _this3.getOptionLabel(option);\n\n var value = _this3.getOptionValue(option);\n\n if (_this3.shouldHideSelectedOptions() && isSelected || !_this3.filterOption({\n label: label,\n value: value,\n data: option\n }, inputValue)) {\n return;\n }\n\n var onHover = isDisabled ? undefined : function () {\n return _this3.onOptionHover(option);\n };\n var onSelect = isDisabled ? undefined : function () {\n return _this3.selectOption(option);\n };\n var optionId = \"\".concat(_this3.getElementId('option'), \"-\").concat(id);\n return {\n innerProps: {\n id: optionId,\n onClick: onSelect,\n onMouseMove: onHover,\n onMouseOver: onHover,\n tabIndex: -1\n },\n data: option,\n isDisabled: isDisabled,\n isSelected: isSelected,\n key: optionId,\n label: label,\n type: 'option',\n value: value\n };\n };\n\n return options.reduce(function (acc, item, itemIndex) {\n if (item.options) {\n // TODO needs a tidier implementation\n if (!_this3.hasGroups) _this3.hasGroups = true;\n var items = item.options;\n var children = items.map(function (child, i) {\n var option = toOption(child, \"\".concat(itemIndex, \"-\").concat(i));\n if (option) acc.focusable.push(child);\n return option;\n }).filter(Boolean);\n\n if (children.length) {\n var groupId = \"\".concat(_this3.getElementId('group'), \"-\").concat(itemIndex);\n acc.render.push({\n type: 'group',\n key: groupId,\n data: item,\n options: children\n });\n }\n } else {\n var option = toOption(item, \"\".concat(itemIndex));\n\n if (option) {\n acc.render.push(option);\n acc.focusable.push(item);\n }\n }\n\n return acc;\n }, {\n render: [],\n focusable: []\n });\n } // ==============================\n // Renderers\n // ==============================\n\n }, {\n key: \"constructAriaLiveMessage\",\n value: function constructAriaLiveMessage() {\n var _this$state7 = this.state,\n ariaLiveContext = _this$state7.ariaLiveContext,\n selectValue = _this$state7.selectValue,\n focusedValue = _this$state7.focusedValue,\n focusedOption = _this$state7.focusedOption;\n var _this$props13 = this.props,\n options = _this$props13.options,\n menuIsOpen = _this$props13.menuIsOpen,\n inputValue = _this$props13.inputValue,\n screenReaderStatus = _this$props13.screenReaderStatus; // An aria live message representing the currently focused value in the select.\n\n var focusedValueMsg = focusedValue ? valueFocusAriaMessage({\n focusedValue: focusedValue,\n getOptionLabel: this.getOptionLabel,\n selectValue: selectValue\n }) : ''; // An aria live message representing the currently focused option in the select.\n\n var focusedOptionMsg = focusedOption && menuIsOpen ? optionFocusAriaMessage({\n focusedOption: focusedOption,\n getOptionLabel: this.getOptionLabel,\n options: options\n }) : ''; // An aria live message representing the set of focusable results and current searchterm/inputvalue.\n\n var resultsMsg = resultsAriaMessage({\n inputValue: inputValue,\n screenReaderMessage: screenReaderStatus({\n count: this.countOptions()\n })\n });\n return \"\".concat(focusedValueMsg, \" \").concat(focusedOptionMsg, \" \").concat(resultsMsg, \" \").concat(ariaLiveContext);\n }\n }, {\n key: \"renderInput\",\n value: function renderInput() {\n var _this$props14 = this.props,\n isDisabled = _this$props14.isDisabled,\n isSearchable = _this$props14.isSearchable,\n inputId = _this$props14.inputId,\n inputValue = _this$props14.inputValue,\n tabIndex = _this$props14.tabIndex;\n var Input = this.components.Input;\n var inputIsHidden = this.state.inputIsHidden;\n var id = inputId || this.getElementId('input');\n\n if (!isSearchable) {\n // use a dummy input to maintain focus/blur functionality\n return React.createElement(DummyInput, {\n id: id,\n innerRef: this.getInputRef,\n onBlur: this.onInputBlur,\n onChange: noop,\n onFocus: this.onInputFocus,\n readOnly: true,\n disabled: isDisabled,\n tabIndex: tabIndex,\n value: \"\"\n });\n } // aria attributes makes the JSX \"noisy\", separated for clarity\n\n\n var ariaAttributes = {\n 'aria-autocomplete': 'list',\n 'aria-label': this.props['aria-label'],\n 'aria-labelledby': this.props['aria-labelledby']\n };\n var _this$commonProps = this.commonProps,\n cx = _this$commonProps.cx,\n theme = _this$commonProps.theme,\n selectProps = _this$commonProps.selectProps;\n return React.createElement(Input, _extends({\n autoCapitalize: \"none\",\n autoComplete: \"off\",\n autoCorrect: \"off\",\n cx: cx,\n getStyles: this.getStyles,\n id: id,\n innerRef: this.getInputRef,\n isDisabled: isDisabled,\n isHidden: inputIsHidden,\n onBlur: this.onInputBlur,\n onChange: this.handleInputChange,\n onFocus: this.onInputFocus,\n selectProps: selectProps,\n spellCheck: \"false\",\n tabIndex: tabIndex,\n theme: theme,\n type: \"text\",\n value: inputValue\n }, ariaAttributes));\n }\n }, {\n key: \"renderPlaceholderOrValue\",\n value: function renderPlaceholderOrValue() {\n var _this4 = this;\n\n var _this$components = this.components,\n MultiValue = _this$components.MultiValue,\n MultiValueContainer = _this$components.MultiValueContainer,\n MultiValueLabel = _this$components.MultiValueLabel,\n MultiValueRemove = _this$components.MultiValueRemove,\n SingleValue = _this$components.SingleValue,\n Placeholder = _this$components.Placeholder;\n var commonProps = this.commonProps;\n var _this$props15 = this.props,\n controlShouldRenderValue = _this$props15.controlShouldRenderValue,\n isDisabled = _this$props15.isDisabled,\n isMulti = _this$props15.isMulti,\n inputValue = _this$props15.inputValue,\n placeholder = _this$props15.placeholder;\n var _this$state8 = this.state,\n selectValue = _this$state8.selectValue,\n focusedValue = _this$state8.focusedValue,\n isFocused = _this$state8.isFocused;\n\n if (!this.hasValue() || !controlShouldRenderValue) {\n return inputValue ? null : React.createElement(Placeholder, _extends({}, commonProps, {\n key: \"placeholder\",\n isDisabled: isDisabled,\n isFocused: isFocused\n }), placeholder);\n }\n\n if (isMulti) {\n var selectValues = selectValue.map(function (opt, index) {\n var isOptionFocused = opt === focusedValue;\n return React.createElement(MultiValue, _extends({}, commonProps, {\n components: {\n Container: MultiValueContainer,\n Label: MultiValueLabel,\n Remove: MultiValueRemove\n },\n isFocused: isOptionFocused,\n isDisabled: isDisabled,\n key: _this4.getOptionValue(opt),\n index: index,\n removeProps: {\n onClick: function onClick() {\n return _this4.removeValue(opt);\n },\n onTouchEnd: function onTouchEnd() {\n return _this4.removeValue(opt);\n },\n onMouseDown: function onMouseDown(e) {\n e.preventDefault();\n e.stopPropagation();\n }\n },\n data: opt\n }), _this4.formatOptionLabel(opt, 'value'));\n });\n return selectValues;\n }\n\n if (inputValue) {\n return null;\n }\n\n var singleValue = selectValue[0];\n return React.createElement(SingleValue, _extends({}, commonProps, {\n data: singleValue,\n isDisabled: isDisabled\n }), this.formatOptionLabel(singleValue, 'value'));\n }\n }, {\n key: \"renderClearIndicator\",\n value: function renderClearIndicator() {\n var ClearIndicator = this.components.ClearIndicator;\n var commonProps = this.commonProps;\n var _this$props16 = this.props,\n isDisabled = _this$props16.isDisabled,\n isLoading = _this$props16.isLoading;\n var isFocused = this.state.isFocused;\n\n if (!this.isClearable() || !ClearIndicator || isDisabled || !this.hasValue() || isLoading) {\n return null;\n }\n\n var innerProps = {\n onMouseDown: this.onClearIndicatorMouseDown,\n onTouchEnd: this.onClearIndicatorTouchEnd,\n 'aria-hidden': 'true'\n };\n return React.createElement(ClearIndicator, _extends({}, commonProps, {\n innerProps: innerProps,\n isFocused: isFocused\n }));\n }\n }, {\n key: \"renderLoadingIndicator\",\n value: function renderLoadingIndicator() {\n var LoadingIndicator = this.components.LoadingIndicator;\n var commonProps = this.commonProps;\n var _this$props17 = this.props,\n isDisabled = _this$props17.isDisabled,\n isLoading = _this$props17.isLoading;\n var isFocused = this.state.isFocused;\n if (!LoadingIndicator || !isLoading) return null;\n var innerProps = {\n 'aria-hidden': 'true'\n };\n return React.createElement(LoadingIndicator, _extends({}, commonProps, {\n innerProps: innerProps,\n isDisabled: isDisabled,\n isFocused: isFocused\n }));\n }\n }, {\n key: \"renderIndicatorSeparator\",\n value: function renderIndicatorSeparator() {\n var _this$components2 = this.components,\n DropdownIndicator = _this$components2.DropdownIndicator,\n IndicatorSeparator = _this$components2.IndicatorSeparator; // separator doesn't make sense without the dropdown indicator\n\n if (!DropdownIndicator || !IndicatorSeparator) return null;\n var commonProps = this.commonProps;\n var isDisabled = this.props.isDisabled;\n var isFocused = this.state.isFocused;\n return React.createElement(IndicatorSeparator, _extends({}, commonProps, {\n isDisabled: isDisabled,\n isFocused: isFocused\n }));\n }\n }, {\n key: \"renderDropdownIndicator\",\n value: function renderDropdownIndicator() {\n var DropdownIndicator = this.components.DropdownIndicator;\n if (!DropdownIndicator) return null;\n var commonProps = this.commonProps;\n var isDisabled = this.props.isDisabled;\n var isFocused = this.state.isFocused;\n var innerProps = {\n onMouseDown: this.onDropdownIndicatorMouseDown,\n onTouchEnd: this.onDropdownIndicatorTouchEnd,\n 'aria-hidden': 'true'\n };\n return React.createElement(DropdownIndicator, _extends({}, commonProps, {\n innerProps: innerProps,\n isDisabled: isDisabled,\n isFocused: isFocused\n }));\n }\n }, {\n key: \"renderMenu\",\n value: function renderMenu() {\n var _this5 = this;\n\n var _this$components3 = this.components,\n Group = _this$components3.Group,\n GroupHeading = _this$components3.GroupHeading,\n Menu = _this$components3.Menu,\n MenuList = _this$components3.MenuList,\n MenuPortal = _this$components3.MenuPortal,\n LoadingMessage = _this$components3.LoadingMessage,\n NoOptionsMessage = _this$components3.NoOptionsMessage,\n Option = _this$components3.Option;\n var commonProps = this.commonProps;\n var _this$state9 = this.state,\n focusedOption = _this$state9.focusedOption,\n menuOptions = _this$state9.menuOptions;\n var _this$props18 = this.props,\n captureMenuScroll = _this$props18.captureMenuScroll,\n inputValue = _this$props18.inputValue,\n isLoading = _this$props18.isLoading,\n loadingMessage = _this$props18.loadingMessage,\n minMenuHeight = _this$props18.minMenuHeight,\n maxMenuHeight = _this$props18.maxMenuHeight,\n menuIsOpen = _this$props18.menuIsOpen,\n menuPlacement = _this$props18.menuPlacement,\n menuPosition = _this$props18.menuPosition,\n menuPortalTarget = _this$props18.menuPortalTarget,\n menuShouldBlockScroll = _this$props18.menuShouldBlockScroll,\n menuShouldScrollIntoView = _this$props18.menuShouldScrollIntoView,\n noOptionsMessage = _this$props18.noOptionsMessage,\n onMenuScrollToTop = _this$props18.onMenuScrollToTop,\n onMenuScrollToBottom = _this$props18.onMenuScrollToBottom;\n if (!menuIsOpen) return null; // TODO: Internal Option Type here\n\n var render = function render(props) {\n // for performance, the menu options in state aren't changed when the\n // focused option changes so we calculate additional props based on that\n var isFocused = focusedOption === props.data;\n props.innerRef = isFocused ? _this5.getFocusedOptionRef : undefined;\n return React.createElement(Option, _extends({}, commonProps, props, {\n isFocused: isFocused\n }), _this5.formatOptionLabel(props.data, 'menu'));\n };\n\n var menuUI;\n\n if (this.hasOptions()) {\n menuUI = menuOptions.render.map(function (item) {\n if (item.type === 'group') {\n var type = item.type,\n group = _objectWithoutProperties(item, [\"type\"]);\n\n var headingId = \"\".concat(item.key, \"-heading\");\n return React.createElement(Group, _extends({}, commonProps, group, {\n Heading: GroupHeading,\n headingProps: {\n id: headingId\n },\n label: _this5.formatGroupLabel(item.data)\n }), item.options.map(function (option) {\n return render(option);\n }));\n } else if (item.type === 'option') {\n return render(item);\n }\n });\n } else if (isLoading) {\n var message = loadingMessage({\n inputValue: inputValue\n });\n if (message === null) return null;\n menuUI = React.createElement(LoadingMessage, commonProps, message);\n } else {\n var _message = noOptionsMessage({\n inputValue: inputValue\n });\n\n if (_message === null) return null;\n menuUI = React.createElement(NoOptionsMessage, commonProps, _message);\n }\n\n var menuPlacementProps = {\n minMenuHeight: minMenuHeight,\n maxMenuHeight: maxMenuHeight,\n menuPlacement: menuPlacement,\n menuPosition: menuPosition,\n menuShouldScrollIntoView: menuShouldScrollIntoView\n };\n var menuElement = React.createElement(MenuPlacer, _extends({}, commonProps, menuPlacementProps), function (_ref6) {\n var ref = _ref6.ref,\n _ref6$placerProps = _ref6.placerProps,\n placement = _ref6$placerProps.placement,\n maxHeight = _ref6$placerProps.maxHeight;\n return React.createElement(Menu, _extends({}, commonProps, menuPlacementProps, {\n innerRef: ref,\n innerProps: {\n onMouseDown: _this5.onMenuMouseDown,\n onMouseMove: _this5.onMenuMouseMove\n },\n isLoading: isLoading,\n placement: placement\n }), React.createElement(ScrollCaptorSwitch, {\n isEnabled: captureMenuScroll,\n onTopArrive: onMenuScrollToTop,\n onBottomArrive: onMenuScrollToBottom\n }, React.createElement(ScrollBlock, {\n isEnabled: menuShouldBlockScroll\n }, React.createElement(MenuList, _extends({}, commonProps, {\n innerRef: _this5.getMenuListRef,\n isLoading: isLoading,\n maxHeight: maxHeight\n }), menuUI))));\n }); // positioning behaviour is almost identical for portalled and fixed,\n // so we use the same component. the actual portalling logic is forked\n // within the component based on `menuPosition`\n\n return menuPortalTarget || menuPosition === 'fixed' ? React.createElement(MenuPortal, _extends({}, commonProps, {\n appendTo: menuPortalTarget,\n controlElement: this.controlRef,\n menuPlacement: menuPlacement,\n menuPosition: menuPosition\n }), menuElement) : menuElement;\n }\n }, {\n key: \"renderFormField\",\n value: function renderFormField() {\n var _this6 = this;\n\n var _this$props19 = this.props,\n delimiter = _this$props19.delimiter,\n isDisabled = _this$props19.isDisabled,\n isMulti = _this$props19.isMulti,\n name = _this$props19.name;\n var selectValue = this.state.selectValue;\n if (!name || isDisabled) return;\n\n if (isMulti) {\n if (delimiter) {\n var value = selectValue.map(function (opt) {\n return _this6.getOptionValue(opt);\n }).join(delimiter);\n return React.createElement(\"input\", {\n name: name,\n type: \"hidden\",\n value: value\n });\n } else {\n var input = selectValue.length > 0 ? selectValue.map(function (opt, i) {\n return React.createElement(\"input\", {\n key: \"i-\".concat(i),\n name: name,\n type: \"hidden\",\n value: _this6.getOptionValue(opt)\n });\n }) : React.createElement(\"input\", {\n name: name,\n type: \"hidden\"\n });\n return React.createElement(\"div\", null, input);\n }\n } else {\n var _value = selectValue[0] ? this.getOptionValue(selectValue[0]) : '';\n\n return React.createElement(\"input\", {\n name: name,\n type: \"hidden\",\n value: _value\n });\n }\n }\n }, {\n key: \"renderLiveRegion\",\n value: function renderLiveRegion() {\n if (!this.state.isFocused) return null;\n return React.createElement(A11yText, {\n \"aria-live\": \"polite\"\n }, React.createElement(\"p\", {\n id: \"aria-selection-event\"\n }, \"\\xA0\", this.state.ariaLiveSelection), React.createElement(\"p\", {\n id: \"aria-context\"\n }, \"\\xA0\", this.constructAriaLiveMessage()));\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$components4 = this.components,\n Control = _this$components4.Control,\n IndicatorsContainer = _this$components4.IndicatorsContainer,\n SelectContainer = _this$components4.SelectContainer,\n ValueContainer = _this$components4.ValueContainer;\n var _this$props20 = this.props,\n className = _this$props20.className,\n id = _this$props20.id,\n isDisabled = _this$props20.isDisabled,\n menuIsOpen = _this$props20.menuIsOpen;\n var isFocused = this.state.isFocused;\n var commonProps = this.commonProps = this.getCommonProps();\n return React.createElement(SelectContainer, _extends({}, commonProps, {\n className: className,\n innerProps: {\n id: id,\n onKeyDown: this.onKeyDown\n },\n isDisabled: isDisabled,\n isFocused: isFocused\n }), this.renderLiveRegion(), React.createElement(Control, _extends({}, commonProps, {\n innerRef: this.getControlRef,\n innerProps: {\n onMouseDown: this.onControlMouseDown,\n onTouchEnd: this.onControlTouchEnd\n },\n isDisabled: isDisabled,\n isFocused: isFocused,\n menuIsOpen: menuIsOpen\n }), React.createElement(ValueContainer, _extends({}, commonProps, {\n isDisabled: isDisabled\n }), this.renderPlaceholderOrValue(), this.renderInput()), React.createElement(IndicatorsContainer, _extends({}, commonProps, {\n isDisabled: isDisabled\n }), this.renderClearIndicator(), this.renderLoadingIndicator(), this.renderIndicatorSeparator(), this.renderDropdownIndicator())), this.renderMenu(), this.renderFormField());\n }\n }]);\n\n return Select;\n}(Component);\n\n_defineProperty(Select, \"defaultProps\", defaultProps);\n\nexport { Select as S, defaultTheme as a, createFilter as c, defaultProps as d, mergeStyles as m };\n","import _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport _classCallCheck from '@babel/runtime/helpers/esm/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/esm/createClass';\nimport _possibleConstructorReturn from '@babel/runtime/helpers/esm/possibleConstructorReturn';\nimport _getPrototypeOf from '@babel/runtime/helpers/esm/getPrototypeOf';\nimport _inherits from '@babel/runtime/helpers/esm/inherits';\nimport _assertThisInitialized from '@babel/runtime/helpers/esm/assertThisInitialized';\nimport _defineProperty from '@babel/runtime/helpers/esm/defineProperty';\nimport React, { Component } from 'react';\n\nvar defaultProps = {\n defaultInputValue: '',\n defaultMenuIsOpen: false,\n defaultValue: null\n};\n\nvar manageState = function manageState(SelectComponent) {\n var _class, _temp;\n\n return _temp = _class =\n /*#__PURE__*/\n function (_Component) {\n _inherits(StateManager, _Component);\n\n function StateManager() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, StateManager);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(StateManager)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"select\", void 0);\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"state\", {\n inputValue: _this.props.inputValue !== undefined ? _this.props.inputValue : _this.props.defaultInputValue,\n menuIsOpen: _this.props.menuIsOpen !== undefined ? _this.props.menuIsOpen : _this.props.defaultMenuIsOpen,\n value: _this.props.value !== undefined ? _this.props.value : _this.props.defaultValue\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onChange\", function (value, actionMeta) {\n _this.callProp('onChange', value, actionMeta);\n\n _this.setState({\n value: value\n });\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onInputChange\", function (value, actionMeta) {\n // TODO: for backwards compatibility, we allow the prop to return a new\n // value, but now inputValue is a controllable prop we probably shouldn't\n var newValue = _this.callProp('onInputChange', value, actionMeta);\n\n _this.setState({\n inputValue: newValue !== undefined ? newValue : value\n });\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onMenuOpen\", function () {\n _this.callProp('onMenuOpen');\n\n _this.setState({\n menuIsOpen: true\n });\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onMenuClose\", function () {\n _this.callProp('onMenuClose');\n\n _this.setState({\n menuIsOpen: false\n });\n });\n\n return _this;\n }\n\n _createClass(StateManager, [{\n key: \"focus\",\n value: function focus() {\n this.select.focus();\n }\n }, {\n key: \"blur\",\n value: function blur() {\n this.select.blur();\n } // FIXME: untyped flow code, return any\n\n }, {\n key: \"getProp\",\n value: function getProp(key) {\n return this.props[key] !== undefined ? this.props[key] : this.state[key];\n } // FIXME: untyped flow code, return any\n\n }, {\n key: \"callProp\",\n value: function callProp(name) {\n if (typeof this.props[name] === 'function') {\n var _this$props;\n\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n return (_this$props = this.props)[name].apply(_this$props, args);\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var _this$props2 = this.props,\n defaultInputValue = _this$props2.defaultInputValue,\n defaultMenuIsOpen = _this$props2.defaultMenuIsOpen,\n defaultValue = _this$props2.defaultValue,\n props = _objectWithoutProperties(_this$props2, [\"defaultInputValue\", \"defaultMenuIsOpen\", \"defaultValue\"]);\n\n return React.createElement(SelectComponent, _extends({}, props, {\n ref: function ref(_ref) {\n _this2.select = _ref;\n },\n inputValue: this.getProp('inputValue'),\n menuIsOpen: this.getProp('menuIsOpen'),\n onChange: this.onChange,\n onInputChange: this.onInputChange,\n onMenuClose: this.onMenuClose,\n onMenuOpen: this.onMenuOpen,\n value: this.getProp('value')\n }));\n }\n }]);\n\n return StateManager;\n }(Component), _defineProperty(_class, \"defaultProps\", defaultProps), _temp;\n};\n\nexport { manageState as m };\n","import '@babel/runtime/helpers/esm/objectWithoutProperties';\nimport '@babel/runtime/helpers/esm/extends';\nimport '@babel/runtime/helpers/esm/toConsumableArray';\nimport '@babel/runtime/helpers/esm/objectSpread';\nimport _classCallCheck from '@babel/runtime/helpers/esm/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/esm/createClass';\nimport _possibleConstructorReturn from '@babel/runtime/helpers/esm/possibleConstructorReturn';\nimport _getPrototypeOf from '@babel/runtime/helpers/esm/getPrototypeOf';\nimport _inherits from '@babel/runtime/helpers/esm/inherits';\nimport _assertThisInitialized from '@babel/runtime/helpers/esm/assertThisInitialized';\nimport _defineProperty from '@babel/runtime/helpers/esm/defineProperty';\nimport React, { Component } from 'react';\nimport memoizeOne from 'memoize-one';\nimport { CacheProvider } from '@emotion/core';\nimport 'react-dom';\nimport 'prop-types';\nimport '@babel/runtime/helpers/esm/typeof';\nimport './chunk-39d3fda8.browser.esm.js';\nexport { y as components } from './chunk-80640036.browser.esm.js';\nimport { S as Select } from './base/dist/react-select-cac0a5ae.browser.esm.js';\nexport { c as createFilter, a as defaultTheme, m as mergeStyles } from './base/dist/react-select-cac0a5ae.browser.esm.js';\nimport '@emotion/css';\nimport '@babel/runtime/helpers/esm/taggedTemplateLiteral';\nimport 'react-input-autosize';\nimport { m as manageState } from './chunk-b36baf1a.browser.esm.js';\nimport createCache from '@emotion/cache';\n\nvar NonceProvider =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(NonceProvider, _Component);\n\n function NonceProvider(props) {\n var _this;\n\n _classCallCheck(this, NonceProvider);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(NonceProvider).call(this, props));\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"createEmotionCache\", function (nonce) {\n return createCache({\n nonce: nonce\n });\n });\n\n _this.createEmotionCache = memoizeOne(_this.createEmotionCache);\n return _this;\n }\n\n _createClass(NonceProvider, [{\n key: \"render\",\n value: function render() {\n var emotionCache = this.createEmotionCache(this.props.nonce);\n return React.createElement(CacheProvider, {\n value: emotionCache\n }, this.props.children);\n }\n }]);\n\n return NonceProvider;\n}(Component);\n\nvar index = manageState(Select);\n\nexport default index;\nexport { NonceProvider };\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport ReactSelect, { components } from 'react-select';\nimport { Icon } from '@ohif/ui';\n\nimport './Select.css';\n\nconst MultiValue = props => {\n const values = props.selectProps.value;\n const lastValue = values[values.length - 1];\n let label = props.data.label;\n if (lastValue.label !== label) {\n label += ', ';\n }\n\n return {label};\n};\n\nconst Option = props => {\n return (\n \n
\n
\n {props.isSelected ? (\n \n ) : (\n \n )}\n
\n \n
\n
\n );\n};\n\nconst Select = ({\n id,\n className,\n closeMenuOnSelect,\n hideSelectedOptions,\n isClearable,\n isDisabled,\n isMulti,\n isSearchable,\n onChange,\n options,\n placeholder,\n noIcons,\n menuPlacement,\n value,\n}) => {\n const _noIconComponents = {\n DropdownIndicator: () => null,\n IndicatorSeparator: () => null,\n };\n let _components = isMulti ? { Option, MultiValue } : {};\n _components = noIcons\n ? { ..._components, ..._noIconComponents }\n : _components;\n const selectedOptions = [];\n\n // Map array of values to an array of selected options\n if (value && Array.isArray(value)) {\n value.forEach(val => {\n const found = options.find(opt => opt.value === val);\n if (found) {\n selectedOptions.push(JSON.parse(JSON.stringify(found)));\n }\n });\n }\n\n return (\n {\n const newSelection = !selectedOptions.length\n ? selectedOptions\n : selectedOptions.reduce((acc, curr) => acc.concat([curr.value]), []);\n onChange(newSelection, action);\n }}\n />\n );\n};\n\nSelect.defaultProps = {\n className: '',\n closeMenuOnSelect: true,\n hideSelectedOptions: true,\n isClearable: true,\n isDisabled: false,\n isMulti: false,\n isSearchable: true,\n noIcons: false,\n menuPlacement: 'auto',\n value: [],\n};\n\nSelect.propTypes = {\n className: PropTypes.string,\n closeMenuOnSelect: PropTypes.bool,\n hideSelectedOptions: PropTypes.bool,\n isClearable: PropTypes.bool,\n isDisabled: PropTypes.bool,\n isMulti: PropTypes.bool,\n isSearchable: PropTypes.bool,\n noIcons: PropTypes.bool,\n menuPlacement: PropTypes.oneOf(['auto', 'bottom', 'top']),\n onChange: PropTypes.func.isRequired,\n options: PropTypes.arrayOf(\n PropTypes.shape({\n value: PropTypes.string,\n label: PropTypes.string,\n })\n ),\n placeholder: PropTypes.string,\n value: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.string),\n PropTypes.any,\n ]),\n};\n\nexport default Select;\n","import Select from './Select';\nexport default Select;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { Icon } from '../';\n\nconst SegmentationItem = ({\n id,\n index,\n label,\n displayText,\n isActive,\n isVisible,\n onClick,\n onEdit,\n onDelete,\n toggleVisibility,\n}) => {\n const [isHovering, setIsHovering] = useState(false);\n\n const onEditHandler = event => {\n event.stopPropagation();\n onEdit({ id, isActive, event });\n };\n\n const onClickHandler = event => onClick({ id, isActive, event });\n\n const onMouseEnter = () => setIsHovering(true);\n const onMouseLeave = () => setIsHovering(false);\n\n return (\n \n \n {isHovering ? (\n {\n e.stopPropagation();\n onDelete(id);\n }}\n />\n ) : (\n {index}\n )}\n \n
\n
\n
\n
\n {label}\n
\n
\n
\n onEditHandler(e)}\n />\n
\n
\n {\n // stopPropagation needed to avoid disable the current active item\n e.stopPropagation();\n toggleVisibility(e, id);\n }}\n />\n
\n
\n
\n
\n {displayText &&\n displayText.map(line => (\n \n {line}\n \n ))}\n
\n \n \n );\n};\n\nSegmentationItem.propTypes = {\n id: PropTypes.oneOfType([\n PropTypes.number.isRequired,\n PropTypes.string.isRequired,\n ]),\n index: PropTypes.number.isRequired,\n label: PropTypes.string,\n displayText: PropTypes.arrayOf(PropTypes.string),\n isActive: PropTypes.bool,\n isVisible: PropTypes.bool,\n onClick: PropTypes.func,\n onEdit: PropTypes.func,\n onDelete: PropTypes.func,\n toggleVisibility: PropTypes.func,\n};\n\nSegmentationItem.defaultProps = {\n isActive: false,\n displayText: [],\n};\n\nexport default SegmentationItem;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Icon } from '../';\nimport SegmentationItem from './SegmentationItem';\n\nconst SegmentationTable = ({\n title,\n segmentations,\n activeSegmentationId,\n onClick,\n onEdit,\n onDelete,\n onToggleVisibility,\n onToggleVisibilityAll,\n}) => {\n const [hiddenSegmentationIds, setHiddenSegmentationIds] = useState([]);\n const amount = segmentations.length;\n\n const handleToggleAll = () => {\n // filter segmentation ids that are hidden\n const visibleSegmentationsIds = segmentations\n .filter(segmentation => !hiddenSegmentationIds.includes(segmentation.id))\n .map(segmentation => segmentation.id);\n\n // check if there is at least one visible segmentation\n // if there is set all to invisible state\n if (visibleSegmentationsIds.length > 0) {\n // make all invisible\n setHiddenSegmentationIds(\n segmentations.map(segmentation => segmentation.id)\n );\n\n // toggle those that are visible\n onToggleVisibilityAll(visibleSegmentationsIds);\n }\n\n // if there is no visible segmentation, set\n // all to visible state\n if (visibleSegmentationsIds.length === 0) {\n // copy hidden segmentation ids\n const Ids = [...hiddenSegmentationIds];\n setHiddenSegmentationIds([]);\n\n // toggle those that are hidden\n onToggleVisibilityAll(Ids);\n }\n };\n\n return (\n
\n
\n \n {title}\n \n
\n {amount}\n handleToggleAll()}\n />\n
\n
\n
\n {!!segmentations.length &&\n segmentations.map((segmentation, i) => {\n const { id, label, displayText = [] } = segmentation;\n return (\n {\n onClick(id);\n }}\n onEdit={() => {\n onEdit(id);\n }}\n onDelete={() => {\n onDelete(id);\n }}\n toggleVisibility={() => {\n onToggleVisibility(id);\n\n // if segmentation is visible, remove it from hiddenSegmentationIds\n if (hiddenSegmentationIds.includes(id)) {\n setHiddenSegmentationIds(\n hiddenSegmentationIds.filter(hiddenId => hiddenId !== id)\n );\n } else {\n // if segmentation is hidden, add it to hiddenSegmentationIds\n setHiddenSegmentationIds([...hiddenSegmentationIds, id]);\n }\n }}\n />\n );\n })}\n
\n
\n );\n};\n\nSegmentationTable.propTypes = {\n title: PropTypes.string.isRequired,\n segmentations: PropTypes.array.isRequired,\n activeSegmentationId: PropTypes.string.isRequired,\n onClick: PropTypes.func.isRequired,\n onEdit: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n onToggleVisibility: PropTypes.func.isRequired,\n onToggleVisibilityAll: PropTypes.func.isRequired,\n};\n\nSegmentationTable.defaultProps = {\n title: '',\n segmentations: [],\n activeSegmentationId: '',\n onClick: () => {},\n onEdit: () => {},\n onToggleVisibility: () => {},\n onToggleVisibilityAll: () => {},\n};\n\nexport default SegmentationTable;\n","import SegmentationTable from './SegmentationTable';\n\nexport default SegmentationTable;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { Icon } from '@ohif/ui';\n\nconst SegmentItem = ({\n segmentIndex,\n segmentationId,\n label,\n isActive,\n isVisible,\n color,\n showSegmentDelete,\n isLocked = false,\n onClick,\n onEdit,\n onDelete,\n onColor,\n onToggleVisibility,\n onToggleLocked,\n}) => {\n const [isHovering, setIsHovering] = useState(false);\n const [isSegmentIndexHovering, setIsSegmentIndexHovering] = useState(false);\n\n const onMouseEnter = () => setIsHovering(true);\n const onMouseLeave = () => setIsHovering(false);\n\n const cssColor = `rgb(${color[0]},${color[1]},${color[2]})`;\n\n return (\n {\n e.stopPropagation();\n onClick(segmentationId, segmentIndex);\n }}\n role=\"button\"\n tabIndex={0}\n data-cy={'segment-item'}\n >\n setIsSegmentIndexHovering(true)}\n onMouseLeave={() => setIsSegmentIndexHovering(false)}\n >\n {isSegmentIndexHovering && showSegmentDelete ? (\n {\n e.stopPropagation();\n onDelete(segmentationId, segmentIndex);\n }}\n />\n ) : (\n
\n {segmentIndex}\n
\n )}\n \n \n
\n {\n e.stopPropagation();\n onColor(segmentationId, segmentIndex);\n }}\n />\n
{label}
\n
\n {/* with faded background */}\n
\n {!isVisible && !isHovering && (\n
\n {\n e.stopPropagation();\n onToggleVisibility(segmentationId, segmentIndex);\n }}\n />\n
\n )}\n {isHovering && (\n
\n {\n e.stopPropagation();\n onEdit(segmentationId, segmentIndex);\n }}\n />\n {isVisible ? (\n {\n e.stopPropagation();\n onToggleVisibility(segmentationId, segmentIndex);\n }}\n />\n ) : (\n {\n e.stopPropagation();\n onToggleVisibility(segmentationId, segmentIndex);\n }}\n />\n )}\n
\n )}\n
\n \n {/*
\n
\n
\n {\n e.stopPropagation();\n onColor(segmentationId, segmentIndex);\n }}\n style={{ backgroundColor: cssColor }}\n >
\n {label}\n
\n
\n
\n {\n // stopPropagation needed to avoid disable the current active item\n e.stopPropagation();\n onToggleVisibility(segmentationId, segmentIndex);\n }}\n />\n
\n {onToggleLocked !== undefined ? (\n
\n {\n // stopPropagation needed to avoid disable the current active item\n e.stopPropagation();\n onToggleLocked(segmentationId, segmentIndex);\n }}\n />\n
\n ) : null}\n
\n {\n // stopPropagation needed to avoid disable the current active item\n e.stopPropagation();\n onEdit(segmentationId, segmentIndex);\n }}\n />\n
\n
\n
\n */}\n \n );\n};\n\nSegmentItem.propTypes = {\n segmentIndex: PropTypes.number.isRequired,\n segmentationId: PropTypes.string.isRequired,\n label: PropTypes.string,\n // color as array\n color: PropTypes.array,\n isActive: PropTypes.bool.isRequired,\n isVisible: PropTypes.bool.isRequired,\n isLocked: PropTypes.bool,\n onClick: PropTypes.func.isRequired,\n onEdit: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n onToggleVisibility: PropTypes.func.isRequired,\n onToggleLocked: PropTypes.func,\n};\n\nSegmentItem.defaultProps = {\n isActive: false,\n};\n\nexport default SegmentItem;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport SegmentationGroupSegment from './SegmentationGroupSegment';\nimport Dropdown from '../Dropdown';\nimport classnames from 'classnames';\nimport Icon from '../Icon';\nimport IconButton from '../IconButton';\n\nconst AddNewSegmentRow = ({\n id,\n onConfigChange,\n onToggleSegmentationVisibility,\n onSegmentAdd,\n isVisible,\n showAddSegment,\n}) => {\n return (\n
\n
\n {showAddSegment && (\n
onSegmentAdd()}>\n \n
Add Segment
\n
\n )}\n
\n {\n onToggleSegmentationVisibility(id);\n }}\n >\n {isVisible ? (\n \n ) : (\n \n )}\n
\n
\n {/* {isSegmentationConfigOpen && (\n \n )} */}\n
\n );\n};\n\nconst SegmentGroupHeader = ({\n isMinimized,\n onToggleMinimizeSegmentation,\n onSegmentationClick,\n id,\n label,\n isActive,\n segmentCount,\n onSegmentationEdit,\n onSegmentationDelete,\n}) => {\n return (\n {\n evt.stopPropagation();\n onSegmentationClick(id);\n }}\n >\n {\n evt.stopPropagation();\n onToggleMinimizeSegmentation(id);\n }}\n className={classnames(\n 'w-5 h-5 text-white transition duration-300 cursor-pointer',\n {\n 'transform rotate-90': !isMinimized,\n }\n )}\n />\n {label.toUpperCase()}\n
\n {segmentCount}\n {\n e.stopPropagation();\n }}\n >\n {\n onSegmentationEdit(id);\n },\n },\n {\n title: 'Delete',\n onClick: () => {\n onSegmentationDelete(id);\n },\n },\n ]}\n >\n \n \n \n \n
\n \n );\n};\n\nconst SegmentationGroup = ({\n label,\n id,\n segmentCount,\n isVisible,\n isActive,\n onSegmentClick,\n isMinimized,\n onSegmentColorClick,\n showAddSegment,\n segments,\n activeSegmentIndex,\n onSegmentAdd,\n onSegmentationClick,\n onClickSegmentColor,\n onSegmentationEdit,\n onToggleSegmentVisibility,\n onToggleSegmentationVisibility,\n onSegmentDelete,\n showSegmentDelete,\n onToggleMinimizeSegmentation,\n onSegmentationConfigChange,\n onSegmentationDelete,\n onSegmentEdit,\n}) => {\n return (\n
\n \n {!isMinimized && (\n
\n \n \n {!!segments.length &&\n segments.map(segment => {\n if (segment === undefined || segment === null) {\n return null;\n }\n\n const {\n segmentIndex,\n color,\n label,\n isVisible,\n isLocked,\n } = segment;\n return (\n
\n \n
\n );\n })}\n
\n
\n )}\n \n );\n};\n\nSegmentationGroup.propTypes = {\n label: PropTypes.string.isRequired,\n id: PropTypes.string.isRequired,\n segments: PropTypes.array.isRequired,\n segmentCount: PropTypes.number.isRequired,\n isVisible: PropTypes.bool.isRequired,\n isActive: PropTypes.bool.isRequired,\n isMinimized: PropTypes.bool.isRequired,\n activeSegmentIndex: PropTypes.number,\n onClickNewSegment: PropTypes.func.isRequired,\n onClickSegment: PropTypes.func.isRequired,\n onClickSegmentEdit: PropTypes.func.isRequired,\n onClickSegmentDelete: PropTypes.func.isRequired,\n onToggleSegmentLocked: PropTypes.func,\n onToggleSegmentVisibility: PropTypes.func.isRequired,\n onToggleSegmentationVisibility: PropTypes.func.isRequired,\n onSegmentClick: PropTypes.func.isRequired,\n showAddSegment: PropTypes.bool.isRequired,\n onSegmentAdd: PropTypes.func.isRequired,\n onSegmentationClick: PropTypes.func.isRequired,\n onClickSegmentColor: PropTypes.func.isRequired,\n onSegmentationEdit: PropTypes.func.isRequired,\n onSegmentDelete: PropTypes.func.isRequired,\n onToggleMinimizeSegmentation: PropTypes.func.isRequired,\n onSegmentationConfigChange: PropTypes.func.isRequired,\n onSegmentationDelete: PropTypes.func.isRequired,\n onSegmentEdit: PropTypes.func.isRequired,\n};\n\nSegmentationGroup.defaultProps = {\n label: '',\n segmentCount: 0,\n segments: [],\n isVisible: true,\n isMinimized: false,\n onClickNewSegment: () => {},\n onClickSegment: () => {},\n onClickSegmentEdit: () => {},\n onClickSegmentDelete: () => {},\n onToggleSegmentLocked: () => {},\n onToggleSegmentVisibility: () => {},\n onToggleSegmentationVisibility: () => {},\n onSegmentClick: () => {},\n showAddSegment: false,\n onSegmentAdd: () => {},\n onSegmentationClick: () => {},\n onClickSegmentColor: () => {},\n onSegmentationEdit: () => {},\n onSegmentDelete: () => {},\n onToggleMinimizeSegmentation: () => {},\n onSegmentationConfigChange: () => {},\n onSegmentationDelete: () => {},\n onSegmentEdit: () => {},\n};\n\nexport default SegmentationGroup;\n","const reducer = (state, action) => {\n switch (action.type) {\n case 'RENDER_OUTLINE':\n return { ...state, renderOutline: action.payload.value };\n case 'RENDER_FILL':\n return { ...state, renderFill: action.payload.value };\n case 'SET_OUTLINE_OPACITY':\n return { ...state, outlineOpacity: action.payload.value };\n case 'SET_OUTLINE_WIDTH':\n return { ...state, outlineWidth: action.payload.value };\n case 'SET_FILL_ALPHA':\n return { ...state, fillAlpha: action.payload.value };\n case 'SET_FILL_ALPHA_INACTIVE':\n return { ...state, fillAlphaInactive: action.payload.value };\n case 'RENDER_INACTIVE_SEGMENTATIONS':\n return { ...state, renderInactiveSegmentations: action.payload.value };\n default:\n return state;\n }\n};\n\nexport { reducer };\n","import React, { useState } from 'react';\nimport { Icon, InputRange, CheckBox, InputNumber } from '../';\nimport classNames from 'classnames';\nimport { reducer } from './segmentationConfigReducer';\n\nconst ActiveSegmentationConfig = ({\n config,\n dispatch,\n setRenderOutline,\n setOutlineOpacityActive,\n setOutlineWidthActive,\n setRenderFill,\n setFillAlpha,\n usePercentage,\n}) => {\n return (\n
\n
\n
Active
\n {\n dispatch({\n type: 'RENDER_OUTLINE',\n payload: {\n value,\n },\n });\n\n setRenderOutline(value);\n }}\n />\n {\n dispatch({\n type: 'RENDER_FILL',\n payload: {\n value,\n },\n });\n\n setRenderFill(value);\n }}\n />\n
\n\n
\n
Opacity
\n {\n dispatch({\n type: 'SET_OUTLINE_OPACITY',\n payload: {\n value: value,\n },\n });\n\n setOutlineOpacityActive(value);\n }}\n step={1}\n containerClassName=\"mt-[4px] mb-[9px]\"\n inputClassName=\"w-[64px]\"\n labelClassName=\"text-white text-[12px]\"\n unit=\"%\"\n />\n {\n dispatch({\n type: 'SET_FILL_ALPHA',\n payload: {\n value,\n },\n });\n\n setFillAlpha(value);\n }}\n step={1}\n containerClassName=\"mt-[4px] mb-[9px]\"\n inputClassName=\"w-[64px]\"\n labelClassName=\"text-white text-[12px]\"\n unit=\"%\"\n />\n
\n\n
\n
Size
\n {\n dispatch({\n type: 'SET_OUTLINE_WIDTH',\n payload: {\n value,\n },\n });\n\n setOutlineWidthActive(value);\n }}\n className=\"-mt-1\"\n />\n
\n
\n );\n};\n\nconst InactiveSegmentationConfig = ({\n config,\n dispatch,\n setRenderInactiveSegmentations,\n setFillAlphaInactive,\n usePercentage,\n}) => {\n return (\n
\n {\n dispatch({\n type: 'RENDER_INACTIVE_SEGMENTATIONS',\n payload: {\n value,\n },\n });\n\n setRenderInactiveSegmentations(value);\n }}\n />\n\n
\n Opacity\n {\n dispatch({\n type: 'SET_FILL_ALPHA_INACTIVE',\n payload: {\n value: value,\n },\n });\n\n setFillAlphaInactive(value);\n }}\n step={1}\n containerClassName=\"mt-[4px]\"\n inputClassName=\"w-[64px]\"\n labelClassName=\"text-white text-[12px]\"\n unit=\"%\"\n />\n
\n
\n );\n};\n\nconst SegmentationConfig = ({\n segmentationConfig,\n setFillAlpha,\n setFillAlphaInactive,\n setOutlineWidthActive,\n setOutlineOpacityActive,\n setRenderFill,\n setRenderInactiveSegmentations,\n setRenderOutline,\n}) => {\n const [config, dispatch] = React.useReducer(\n reducer,\n segmentationConfig.initialConfig\n );\n\n const [isMinimized, setIsMinimized] = useState(true);\n return (\n
\n {\n evt.stopPropagation();\n setIsMinimized(!isMinimized);\n }}\n >\n \n \n {'Segmentation Appearance'}\n \n
\n {/* active segmentation */}\n {!isMinimized && (\n
\n \n {/* A small line */}\n
\n {/* inactive segmentation */}\n setIsMinimized(!isMinimized)}\n className=\"flex items-center cursor-pointer pl-2 pb-[9px]\"\n >\n \n {'Inactive Segmentations'}\n \n
\n \n \n )}\n
\n \n );\n};\n\nSegmentationConfig.propTypes = {};\n\nexport default SegmentationConfig;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Icon from '../Icon';\nimport SegmentationGroup from './SegmentationGroup';\nimport SegmentationConfig from './SegmentationConfig';\n\nconst GetSegmentationConfig = ({\n setFillAlpha,\n setFillAlphaInactive,\n setOutlineWidthActive,\n setRenderFill,\n setRenderInactiveSegmentations,\n setRenderOutline,\n setOutlineOpacityActive,\n segmentationConfig,\n}) => {\n return (\n \n );\n};\n\nconst SegmentationGroupTable = ({\n segmentations,\n onSegmentationAdd,\n onSegmentationEdit,\n onSegmentationClick,\n onSegmentationDelete,\n showAddSegmentation,\n showAddSegment,\n onSegmentClick,\n onSegmentAdd,\n segmentationConfig,\n onSegmentDelete,\n onSegmentEdit,\n onToggleSegmentationVisibility,\n onToggleSegmentVisibility,\n onSegmentColorClick,\n isMinimized,\n onToggleMinimizeSegmentation,\n setFillAlpha,\n setFillAlphaInactive,\n setOutlineWidthActive,\n setOutlineOpacityActive,\n setRenderFill,\n setRenderInactiveSegmentations,\n setRenderOutline,\n}) => {\n return (\n
\n \n
\n {!!segmentations.length &&\n segmentations.map((segmentation, index) => {\n const {\n id,\n label,\n displayText = [],\n segmentCount,\n segments,\n isVisible,\n isActive,\n activeSegmentIndex,\n } = segmentation;\n return (\n <>\n onSegmentationClick(id)}\n activeSegmentIndex={activeSegmentIndex}\n onToggleMinimizeSegmentation={onToggleMinimizeSegmentation}\n onSegmentationEdit={onSegmentationEdit}\n onSegmentationDelete={onSegmentationDelete}\n onSegmentClick={onSegmentClick}\n onSegmentEdit={onSegmentEdit}\n onToggleSegmentVisibility={onToggleSegmentVisibility}\n onToggleSegmentationVisibility={\n onToggleSegmentationVisibility\n }\n onSegmentAdd={onSegmentAdd}\n showSegmentDelete={false}\n />\n
\n \n );\n })}\n
\n {showAddSegmentation && (\n onSegmentationAdd()}\n >\n \n
Add New Segmentation
\n
\n )}\n \n );\n};\n\nSegmentationGroupTable.propTypes = {\n title: PropTypes.string.isRequired,\n segmentations: PropTypes.array.isRequired,\n activeSegmentationId: PropTypes.string.isRequired,\n onClick: PropTypes.func.isRequired,\n onEdit: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n onToggleLocked: PropTypes.func,\n onToggleVisibility: PropTypes.func.isRequired,\n onToggleVisibilityAll: PropTypes.func.isRequired,\n segmentationConfig: PropTypes.object,\n};\n\nSegmentationGroupTable.defaultProps = {\n title: '',\n segmentations: [],\n activeSegmentationId: '',\n onClick: () => {},\n onEdit: () => {},\n onDelete: () => {},\n onToggleLocked: () => {},\n onToggleVisibility: () => {},\n onToggleVisibilityAll: () => {},\n segmentationConfig: {\n initialConfig: {\n fillAlpha: 0.5,\n fillAlphaInactive: 0.5,\n outlineWidthActive: 1,\n outlineOpacity: 1,\n outlineOpacityInactive: 0.5,\n renderFill: true,\n renderInactiveSegmentations: true,\n renderOutline: true,\n },\n usePercentage: true,\n },\n setFillAlpha: () => {},\n setFillAlphaInactive: () => {},\n setOutlineWidthActive: () => {},\n setOutlineOpacityActive: () => {},\n setRenderFill: () => {},\n setRenderInactiveSegmentations: () => {},\n setRenderOutline: () => {},\n};\n\nexport default SegmentationGroupTable;\n","import SegmentationGroupTable from './SegmentationGroupTable';\n\nexport default SegmentationGroupTable;\n","/**\n * SSR Window 4.0.2\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return (obj !== null &&\n typeof obj === 'object' &&\n 'constructor' in obj &&\n obj.constructor === Object);\n}\nfunction extend(target = {}, src = {}) {\n Object.keys(src).forEach((key) => {\n if (typeof target[key] === 'undefined')\n target[key] = src[key];\n else if (isObject(src[key]) &&\n isObject(target[key]) &&\n Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\n\nconst ssrDocument = {\n body: {},\n addEventListener() { },\n removeEventListener() { },\n activeElement: {\n blur() { },\n nodeName: '',\n },\n querySelector() {\n return null;\n },\n querySelectorAll() {\n return [];\n },\n getElementById() {\n return null;\n },\n createEvent() {\n return {\n initEvent() { },\n };\n },\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute() { },\n getElementsByTagName() {\n return [];\n },\n };\n },\n createElementNS() {\n return {};\n },\n importNode() {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n};\nfunction getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\n\nconst ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: '',\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n history: {\n replaceState() { },\n pushState() { },\n go() { },\n back() { },\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener() { },\n removeEventListener() { },\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n },\n };\n },\n Image() { },\n Date() { },\n screen: {},\n setTimeout() { },\n clearTimeout() { },\n matchMedia() {\n return {};\n },\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n },\n};\nfunction getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\nexport { extend, getDocument, getWindow, ssrDocument, ssrWindow };\n","/**\n * Dom7 4.0.4\n * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n * https://framework7.io/docs/dom7.html\n *\n * Copyright 2022, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: January 11, 2022\n */\nimport { getWindow, getDocument } from 'ssr-window';\n\n/* eslint-disable no-proto */\nfunction makeReactive(obj) {\n const proto = obj.__proto__;\n Object.defineProperty(obj, '__proto__', {\n get() {\n return proto;\n },\n\n set(value) {\n proto.__proto__ = value;\n }\n\n });\n}\n\nclass Dom7 extends Array {\n constructor(items) {\n if (typeof items === 'number') {\n super(items);\n } else {\n super(...(items || []));\n makeReactive(this);\n }\n }\n\n}\n\nfunction arrayFlat(arr = []) {\n const res = [];\n arr.forEach(el => {\n if (Array.isArray(el)) {\n res.push(...arrayFlat(el));\n } else {\n res.push(el);\n }\n });\n return res;\n}\nfunction arrayFilter(arr, callback) {\n return Array.prototype.filter.call(arr, callback);\n}\nfunction arrayUnique(arr) {\n const uniqueArray = [];\n\n for (let i = 0; i < arr.length; i += 1) {\n if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);\n }\n\n return uniqueArray;\n}\nfunction toCamelCase(string) {\n return string.toLowerCase().replace(/-(.)/g, (match, group) => group.toUpperCase());\n}\n\n// eslint-disable-next-line\n\nfunction qsa(selector, context) {\n if (typeof selector !== 'string') {\n return [selector];\n }\n\n const a = [];\n const res = context.querySelectorAll(selector);\n\n for (let i = 0; i < res.length; i += 1) {\n a.push(res[i]);\n }\n\n return a;\n}\n\nfunction $(selector, context) {\n const window = getWindow();\n const document = getDocument();\n let arr = [];\n\n if (!context && selector instanceof Dom7) {\n return selector;\n }\n\n if (!selector) {\n return new Dom7(arr);\n }\n\n if (typeof selector === 'string') {\n const html = selector.trim();\n\n if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n let toCreate = 'div';\n if (html.indexOf(' c.split(' ')));\n this.forEach(el => {\n el.classList.add(...classNames);\n });\n return this;\n}\n\nfunction removeClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n el.classList.remove(...classNames);\n });\n return this;\n}\n\nfunction toggleClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n classNames.forEach(className => {\n el.classList.toggle(className);\n });\n });\n}\n\nfunction hasClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n return arrayFilter(this, el => {\n return classNames.filter(className => el.classList.contains(className)).length > 0;\n }).length > 0;\n}\n\nfunction attr(attrs, value) {\n if (arguments.length === 1 && typeof attrs === 'string') {\n // Get attr\n if (this[0]) return this[0].getAttribute(attrs);\n return undefined;\n } // Set attrs\n\n\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i].setAttribute(attrs, value);\n } else {\n // Object\n for (const attrName in attrs) {\n this[i][attrName] = attrs[attrName];\n this[i].setAttribute(attrName, attrs[attrName]);\n }\n }\n }\n\n return this;\n}\n\nfunction removeAttr(attr) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].removeAttribute(attr);\n }\n\n return this;\n}\n\nfunction prop(props, value) {\n if (arguments.length === 1 && typeof props === 'string') {\n // Get prop\n if (this[0]) return this[0][props];\n } else {\n // Set props\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i][props] = value;\n } else {\n // Object\n for (const propName in props) {\n this[i][propName] = props[propName];\n }\n }\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction data(key, value) {\n let el;\n\n if (typeof value === 'undefined') {\n el = this[0];\n if (!el) return undefined; // Get value\n\n if (el.dom7ElementDataStorage && key in el.dom7ElementDataStorage) {\n return el.dom7ElementDataStorage[key];\n }\n\n const dataKey = el.getAttribute(`data-${key}`);\n\n if (dataKey) {\n return dataKey;\n }\n\n return undefined;\n } // Set value\n\n\n for (let i = 0; i < this.length; i += 1) {\n el = this[i];\n if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};\n el.dom7ElementDataStorage[key] = value;\n }\n\n return this;\n}\n\nfunction removeData(key) {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.dom7ElementDataStorage && el.dom7ElementDataStorage[key]) {\n el.dom7ElementDataStorage[key] = null;\n delete el.dom7ElementDataStorage[key];\n }\n }\n}\n\nfunction dataset() {\n const el = this[0];\n if (!el) return undefined;\n const dataset = {}; // eslint-disable-line\n\n if (el.dataset) {\n for (const dataKey in el.dataset) {\n dataset[dataKey] = el.dataset[dataKey];\n }\n } else {\n for (let i = 0; i < el.attributes.length; i += 1) {\n const attr = el.attributes[i];\n\n if (attr.name.indexOf('data-') >= 0) {\n dataset[toCamelCase(attr.name.split('data-')[1])] = attr.value;\n }\n }\n }\n\n for (const key in dataset) {\n if (dataset[key] === 'false') dataset[key] = false;else if (dataset[key] === 'true') dataset[key] = true;else if (parseFloat(dataset[key]) === dataset[key] * 1) dataset[key] *= 1;\n }\n\n return dataset;\n}\n\nfunction val(value) {\n if (typeof value === 'undefined') {\n // get value\n const el = this[0];\n if (!el) return undefined;\n\n if (el.multiple && el.nodeName.toLowerCase() === 'select') {\n const values = [];\n\n for (let i = 0; i < el.selectedOptions.length; i += 1) {\n values.push(el.selectedOptions[i].value);\n }\n\n return values;\n }\n\n return el.value;\n } // set value\n\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (Array.isArray(value) && el.multiple && el.nodeName.toLowerCase() === 'select') {\n for (let j = 0; j < el.options.length; j += 1) {\n el.options[j].selected = value.indexOf(el.options[j].value) >= 0;\n }\n } else {\n el.value = value;\n }\n }\n\n return this;\n}\n\nfunction value(value) {\n return this.val(value);\n}\n\nfunction transform(transform) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transform = transform;\n }\n\n return this;\n}\n\nfunction transition(duration) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transitionDuration = typeof duration !== 'string' ? `${duration}ms` : duration;\n }\n\n return this;\n}\n\nfunction on(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n\n function handleLiveEvent(e) {\n const target = e.target;\n if (!target) return;\n const eventData = e.target.dom7EventData || [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n if ($(target).is(targetSelector)) listener.apply(target, eventData);else {\n const parents = $(target).parents(); // eslint-disable-line\n\n for (let k = 0; k < parents.length; k += 1) {\n if ($(parents[k]).is(targetSelector)) listener.apply(parents[k], eventData);\n }\n }\n }\n\n function handleEvent(e) {\n const eventData = e && e.target ? e.target.dom7EventData || [] : [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n listener.apply(this, eventData);\n }\n\n const events = eventType.split(' ');\n let j;\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (!targetSelector) {\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7Listeners) el.dom7Listeners = {};\n if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];\n el.dom7Listeners[event].push({\n listener,\n proxyListener: handleEvent\n });\n el.addEventListener(event, handleEvent, capture);\n }\n } else {\n // Live events\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7LiveListeners) el.dom7LiveListeners = {};\n if (!el.dom7LiveListeners[event]) el.dom7LiveListeners[event] = [];\n el.dom7LiveListeners[event].push({\n listener,\n proxyListener: handleLiveEvent\n });\n el.addEventListener(event, handleLiveEvent, capture);\n }\n }\n }\n\n return this;\n}\n\nfunction off(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n const events = eventType.split(' ');\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n let handlers;\n\n if (!targetSelector && el.dom7Listeners) {\n handlers = el.dom7Listeners[event];\n } else if (targetSelector && el.dom7LiveListeners) {\n handlers = el.dom7LiveListeners[event];\n }\n\n if (handlers && handlers.length) {\n for (let k = handlers.length - 1; k >= 0; k -= 1) {\n const handler = handlers[k];\n\n if (listener && handler.listener === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (!listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n }\n }\n }\n }\n }\n\n return this;\n}\n\nfunction once(...args) {\n const dom = this;\n let [eventName, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventName, listener, capture] = args;\n targetSelector = undefined;\n }\n\n function onceHandler(...eventArgs) {\n listener.apply(this, eventArgs);\n dom.off(eventName, targetSelector, onceHandler, capture);\n\n if (onceHandler.dom7proxy) {\n delete onceHandler.dom7proxy;\n }\n }\n\n onceHandler.dom7proxy = listener;\n return dom.on(eventName, targetSelector, onceHandler, capture);\n}\n\nfunction trigger(...args) {\n const window = getWindow();\n const events = args[0].split(' ');\n const eventData = args[1];\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n\n if (window.CustomEvent) {\n const evt = new window.CustomEvent(event, {\n detail: eventData,\n bubbles: true,\n cancelable: true\n });\n el.dom7EventData = args.filter((data, dataIndex) => dataIndex > 0);\n el.dispatchEvent(evt);\n el.dom7EventData = [];\n delete el.dom7EventData;\n }\n }\n }\n\n return this;\n}\n\nfunction transitionEnd(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('transitionend', fireCallBack);\n }\n\n if (callback) {\n dom.on('transitionend', fireCallBack);\n }\n\n return this;\n}\n\nfunction animationEnd(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('animationend', fireCallBack);\n }\n\n if (callback) {\n dom.on('animationend', fireCallBack);\n }\n\n return this;\n}\n\nfunction width() {\n const window = getWindow();\n\n if (this[0] === window) {\n return window.innerWidth;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('width'));\n }\n\n return null;\n}\n\nfunction outerWidth(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n }\n\n return this[0].offsetWidth;\n }\n\n return null;\n}\n\nfunction height() {\n const window = getWindow();\n\n if (this[0] === window) {\n return window.innerHeight;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('height'));\n }\n\n return null;\n}\n\nfunction outerHeight(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n }\n\n return this[0].offsetHeight;\n }\n\n return null;\n}\n\nfunction offset() {\n if (this.length > 0) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n }\n\n return null;\n}\n\nfunction hide() {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.display = 'none';\n }\n\n return this;\n}\n\nfunction show() {\n const window = getWindow();\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.style.display === 'none') {\n el.style.display = '';\n }\n\n if (window.getComputedStyle(el, null).getPropertyValue('display') === 'none') {\n // Still not visible\n el.style.display = 'block';\n }\n }\n\n return this;\n}\n\nfunction styles() {\n const window = getWindow();\n if (this[0]) return window.getComputedStyle(this[0], null);\n return {};\n}\n\nfunction css(props, value) {\n const window = getWindow();\n let i;\n\n if (arguments.length === 1) {\n if (typeof props === 'string') {\n // .css('width')\n if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n } else {\n // .css({ width: '100px' })\n for (i = 0; i < this.length; i += 1) {\n for (const prop in props) {\n this[i].style[prop] = props[prop];\n }\n }\n\n return this;\n }\n }\n\n if (arguments.length === 2 && typeof props === 'string') {\n // .css('width', '100px')\n for (i = 0; i < this.length; i += 1) {\n this[i].style[props] = value;\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction each(callback) {\n if (!callback) return this;\n this.forEach((el, index) => {\n callback.apply(el, [el, index]);\n });\n return this;\n}\n\nfunction filter(callback) {\n const result = arrayFilter(this, callback);\n return $(result);\n}\n\nfunction html(html) {\n if (typeof html === 'undefined') {\n return this[0] ? this[0].innerHTML : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].innerHTML = html;\n }\n\n return this;\n}\n\nfunction text(text) {\n if (typeof text === 'undefined') {\n return this[0] ? this[0].textContent.trim() : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].textContent = text;\n }\n\n return this;\n}\n\nfunction is(selector) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n let compareWith;\n let i;\n if (!el || typeof selector === 'undefined') return false;\n\n if (typeof selector === 'string') {\n if (el.matches) return el.matches(selector);\n if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n compareWith = $(selector);\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n if (selector === document) {\n return el === document;\n }\n\n if (selector === window) {\n return el === window;\n }\n\n if (selector.nodeType || selector instanceof Dom7) {\n compareWith = selector.nodeType ? [selector] : selector;\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n return false;\n}\n\nfunction index() {\n let child = this[0];\n let i;\n\n if (child) {\n i = 0; // eslint-disable-next-line\n\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n\n return i;\n }\n\n return undefined;\n}\n\nfunction eq(index) {\n if (typeof index === 'undefined') return this;\n const length = this.length;\n\n if (index > length - 1) {\n return $([]);\n }\n\n if (index < 0) {\n const returnIndex = length + index;\n if (returnIndex < 0) return $([]);\n return $([this[returnIndex]]);\n }\n\n return $([this[index]]);\n}\n\nfunction append(...els) {\n let newChild;\n const document = getDocument();\n\n for (let k = 0; k < els.length; k += 1) {\n newChild = els[k];\n\n for (let i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n while (tempDiv.firstChild) {\n this[i].appendChild(tempDiv.firstChild);\n }\n } else if (newChild instanceof Dom7) {\n for (let j = 0; j < newChild.length; j += 1) {\n this[i].appendChild(newChild[j]);\n }\n } else {\n this[i].appendChild(newChild);\n }\n }\n }\n\n return this;\n}\n\nfunction appendTo(parent) {\n $(parent).append(this);\n return this;\n}\n\nfunction prepend(newChild) {\n const document = getDocument();\n let i;\n let j;\n\n for (i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n }\n } else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j += 1) {\n this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n }\n } else {\n this[i].insertBefore(newChild, this[i].childNodes[0]);\n }\n }\n\n return this;\n}\n\nfunction prependTo(parent) {\n $(parent).prepend(this);\n return this;\n}\n\nfunction insertBefore(selector) {\n const before = $(selector);\n\n for (let i = 0; i < this.length; i += 1) {\n if (before.length === 1) {\n before[0].parentNode.insertBefore(this[i], before[0]);\n } else if (before.length > 1) {\n for (let j = 0; j < before.length; j += 1) {\n before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);\n }\n }\n }\n}\n\nfunction insertAfter(selector) {\n const after = $(selector);\n\n for (let i = 0; i < this.length; i += 1) {\n if (after.length === 1) {\n after[0].parentNode.insertBefore(this[i], after[0].nextSibling);\n } else if (after.length > 1) {\n for (let j = 0; j < after.length; j += 1) {\n after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);\n }\n }\n }\n}\n\nfunction next(selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n return $([this[0].nextElementSibling]);\n }\n\n return $([]);\n }\n\n if (this[0].nextElementSibling) return $([this[0].nextElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction nextAll(selector) {\n const nextEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(next).is(selector)) nextEls.push(next);\n } else nextEls.push(next);\n\n el = next;\n }\n\n return $(nextEls);\n}\n\nfunction prev(selector) {\n if (this.length > 0) {\n const el = this[0];\n\n if (selector) {\n if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n return $([el.previousElementSibling]);\n }\n\n return $([]);\n }\n\n if (el.previousElementSibling) return $([el.previousElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction prevAll(selector) {\n const prevEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(prev).is(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n\n el = prev;\n }\n\n return $(prevEls);\n}\n\nfunction siblings(selector) {\n return this.nextAll(selector).add(this.prevAll(selector));\n}\n\nfunction parent(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode !== null) {\n if (selector) {\n if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n } else {\n parents.push(this[i].parentNode);\n }\n }\n }\n\n return $(parents);\n}\n\nfunction parents(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n let parent = this[i].parentNode; // eslint-disable-line\n\n while (parent) {\n if (selector) {\n if ($(parent).is(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n\n parent = parent.parentNode;\n }\n }\n\n return $(parents);\n}\n\nfunction closest(selector) {\n let closest = this; // eslint-disable-line\n\n if (typeof selector === 'undefined') {\n return $([]);\n }\n\n if (!closest.is(selector)) {\n closest = closest.parents(selector).eq(0);\n }\n\n return closest;\n}\n\nfunction find(selector) {\n const foundElements = [];\n\n for (let i = 0; i < this.length; i += 1) {\n const found = this[i].querySelectorAll(selector);\n\n for (let j = 0; j < found.length; j += 1) {\n foundElements.push(found[j]);\n }\n }\n\n return $(foundElements);\n}\n\nfunction children(selector) {\n const children = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n const childNodes = this[i].children;\n\n for (let j = 0; j < childNodes.length; j += 1) {\n if (!selector || $(childNodes[j]).is(selector)) {\n children.push(childNodes[j]);\n }\n }\n }\n\n return $(children);\n}\n\nfunction remove() {\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n }\n\n return this;\n}\n\nfunction detach() {\n return this.remove();\n}\n\nfunction add(...els) {\n const dom = this;\n let i;\n let j;\n\n for (i = 0; i < els.length; i += 1) {\n const toAdd = $(els[i]);\n\n for (j = 0; j < toAdd.length; j += 1) {\n dom.push(toAdd[j]);\n }\n }\n\n return dom;\n}\n\nfunction empty() {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.nodeType === 1) {\n for (let j = 0; j < el.childNodes.length; j += 1) {\n if (el.childNodes[j].parentNode) {\n el.childNodes[j].parentNode.removeChild(el.childNodes[j]);\n }\n }\n\n el.textContent = '';\n }\n }\n\n return this;\n}\n\n// eslint-disable-next-line\n\nfunction scrollTo(...args) {\n const window = getWindow();\n let [left, top, duration, easing, callback] = args;\n\n if (args.length === 4 && typeof easing === 'function') {\n callback = easing;\n [left, top, duration, callback, easing] = args;\n }\n\n if (typeof easing === 'undefined') easing = 'swing';\n return this.each(function animate() {\n const el = this;\n let currentTop;\n let currentLeft;\n let maxTop;\n let maxLeft;\n let newTop;\n let newLeft;\n let scrollTop; // eslint-disable-line\n\n let scrollLeft; // eslint-disable-line\n\n let animateTop = top > 0 || top === 0;\n let animateLeft = left > 0 || left === 0;\n\n if (typeof easing === 'undefined') {\n easing = 'swing';\n }\n\n if (animateTop) {\n currentTop = el.scrollTop;\n\n if (!duration) {\n el.scrollTop = top;\n }\n }\n\n if (animateLeft) {\n currentLeft = el.scrollLeft;\n\n if (!duration) {\n el.scrollLeft = left;\n }\n }\n\n if (!duration) return;\n\n if (animateTop) {\n maxTop = el.scrollHeight - el.offsetHeight;\n newTop = Math.max(Math.min(top, maxTop), 0);\n }\n\n if (animateLeft) {\n maxLeft = el.scrollWidth - el.offsetWidth;\n newLeft = Math.max(Math.min(left, maxLeft), 0);\n }\n\n let startTime = null;\n if (animateTop && newTop === currentTop) animateTop = false;\n if (animateLeft && newLeft === currentLeft) animateLeft = false;\n\n function render(time = new Date().getTime()) {\n if (startTime === null) {\n startTime = time;\n }\n\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = easing === 'linear' ? progress : 0.5 - Math.cos(progress * Math.PI) / 2;\n let done;\n if (animateTop) scrollTop = currentTop + easeProgress * (newTop - currentTop);\n if (animateLeft) scrollLeft = currentLeft + easeProgress * (newLeft - currentLeft);\n\n if (animateTop && newTop > currentTop && scrollTop >= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateTop && newTop < currentTop && scrollTop <= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateLeft && newLeft > currentLeft && scrollLeft >= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (animateLeft && newLeft < currentLeft && scrollLeft <= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (done) {\n if (callback) callback();\n return;\n }\n\n if (animateTop) el.scrollTop = scrollTop;\n if (animateLeft) el.scrollLeft = scrollLeft;\n window.requestAnimationFrame(render);\n }\n\n window.requestAnimationFrame(render);\n });\n} // scrollTop(top, duration, easing, callback) {\n\n\nfunction scrollTop(...args) {\n let [top, duration, easing, callback] = args;\n\n if (args.length === 3 && typeof easing === 'function') {\n [top, duration, callback, easing] = args;\n }\n\n const dom = this;\n\n if (typeof top === 'undefined') {\n if (dom.length > 0) return dom[0].scrollTop;\n return null;\n }\n\n return dom.scrollTo(undefined, top, duration, easing, callback);\n}\n\nfunction scrollLeft(...args) {\n let [left, duration, easing, callback] = args;\n\n if (args.length === 3 && typeof easing === 'function') {\n [left, duration, callback, easing] = args;\n }\n\n const dom = this;\n\n if (typeof left === 'undefined') {\n if (dom.length > 0) return dom[0].scrollLeft;\n return null;\n }\n\n return dom.scrollTo(left, undefined, duration, easing, callback);\n}\n\n// eslint-disable-next-line\n\nfunction animate(initialProps, initialParams) {\n const window = getWindow();\n const els = this;\n const a = {\n props: Object.assign({}, initialProps),\n params: Object.assign({\n duration: 300,\n easing: 'swing' // or 'linear'\n\n /* Callbacks\n begin(elements)\n complete(elements)\n progress(elements, complete, remaining, start, tweenValue)\n */\n\n }, initialParams),\n elements: els,\n animating: false,\n que: [],\n\n easingProgress(easing, progress) {\n if (easing === 'swing') {\n return 0.5 - Math.cos(progress * Math.PI) / 2;\n }\n\n if (typeof easing === 'function') {\n return easing(progress);\n }\n\n return progress;\n },\n\n stop() {\n if (a.frameId) {\n window.cancelAnimationFrame(a.frameId);\n }\n\n a.animating = false;\n a.elements.each(el => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n a.que = [];\n },\n\n done(complete) {\n a.animating = false;\n a.elements.each(el => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n if (complete) complete(els);\n\n if (a.que.length > 0) {\n const que = a.que.shift();\n a.animate(que[0], que[1]);\n }\n },\n\n animate(props, params) {\n if (a.animating) {\n a.que.push([props, params]);\n return a;\n }\n\n const elements = []; // Define & Cache Initials & Units\n\n a.elements.each((el, index) => {\n let initialFullValue;\n let initialValue;\n let unit;\n let finalValue;\n let finalFullValue;\n if (!el.dom7AnimateInstance) a.elements[index].dom7AnimateInstance = a;\n elements[index] = {\n container: el\n };\n Object.keys(props).forEach(prop => {\n initialFullValue = window.getComputedStyle(el, null).getPropertyValue(prop).replace(',', '.');\n initialValue = parseFloat(initialFullValue);\n unit = initialFullValue.replace(initialValue, '');\n finalValue = parseFloat(props[prop]);\n finalFullValue = props[prop] + unit;\n elements[index][prop] = {\n initialFullValue,\n initialValue,\n unit,\n finalValue,\n finalFullValue,\n currentValue: initialValue\n };\n });\n });\n let startTime = null;\n let time;\n let elementsDone = 0;\n let propsDone = 0;\n let done;\n let began = false;\n a.animating = true;\n\n function render() {\n time = new Date().getTime();\n let progress;\n let easeProgress; // let el;\n\n if (!began) {\n began = true;\n if (params.begin) params.begin(els);\n }\n\n if (startTime === null) {\n startTime = time;\n }\n\n if (params.progress) {\n // eslint-disable-next-line\n params.progress(els, Math.max(Math.min((time - startTime) / params.duration, 1), 0), startTime + params.duration - time < 0 ? 0 : startTime + params.duration - time, startTime);\n }\n\n elements.forEach(element => {\n const el = element;\n if (done || el.done) return;\n Object.keys(props).forEach(prop => {\n if (done || el.done) return;\n progress = Math.max(Math.min((time - startTime) / params.duration, 1), 0);\n easeProgress = a.easingProgress(params.easing, progress);\n const {\n initialValue,\n finalValue,\n unit\n } = el[prop];\n el[prop].currentValue = initialValue + easeProgress * (finalValue - initialValue);\n const currentValue = el[prop].currentValue;\n\n if (finalValue > initialValue && currentValue >= finalValue || finalValue < initialValue && currentValue <= finalValue) {\n el.container.style[prop] = finalValue + unit;\n propsDone += 1;\n\n if (propsDone === Object.keys(props).length) {\n el.done = true;\n elementsDone += 1;\n }\n\n if (elementsDone === elements.length) {\n done = true;\n }\n }\n\n if (done) {\n a.done(params.complete);\n return;\n }\n\n el.container.style[prop] = currentValue + unit;\n });\n });\n if (done) return; // Then call\n\n a.frameId = window.requestAnimationFrame(render);\n }\n\n a.frameId = window.requestAnimationFrame(render);\n return a;\n }\n\n };\n\n if (a.elements.length === 0) {\n return els;\n }\n\n let animateInstance;\n\n for (let i = 0; i < a.elements.length; i += 1) {\n if (a.elements[i].dom7AnimateInstance) {\n animateInstance = a.elements[i].dom7AnimateInstance;\n } else a.elements[i].dom7AnimateInstance = a;\n }\n\n if (!animateInstance) {\n animateInstance = a;\n }\n\n if (initialProps === 'stop') {\n animateInstance.stop();\n } else {\n animateInstance.animate(a.props, a.params);\n }\n\n return els;\n}\n\nfunction stop() {\n const els = this;\n\n for (let i = 0; i < els.length; i += 1) {\n if (els[i].dom7AnimateInstance) {\n els[i].dom7AnimateInstance.stop();\n }\n }\n}\n\nconst noTrigger = 'resize scroll'.split(' ');\n\nfunction shortcut(name) {\n function eventHandler(...args) {\n if (typeof args[0] === 'undefined') {\n for (let i = 0; i < this.length; i += 1) {\n if (noTrigger.indexOf(name) < 0) {\n if (name in this[i]) this[i][name]();else {\n $(this[i]).trigger(name);\n }\n }\n }\n\n return this;\n }\n\n return this.on(name, ...args);\n }\n\n return eventHandler;\n}\n\nconst click = shortcut('click');\nconst blur = shortcut('blur');\nconst focus = shortcut('focus');\nconst focusin = shortcut('focusin');\nconst focusout = shortcut('focusout');\nconst keyup = shortcut('keyup');\nconst keydown = shortcut('keydown');\nconst keypress = shortcut('keypress');\nconst submit = shortcut('submit');\nconst change = shortcut('change');\nconst mousedown = shortcut('mousedown');\nconst mousemove = shortcut('mousemove');\nconst mouseup = shortcut('mouseup');\nconst mouseenter = shortcut('mouseenter');\nconst mouseleave = shortcut('mouseleave');\nconst mouseout = shortcut('mouseout');\nconst mouseover = shortcut('mouseover');\nconst touchstart = shortcut('touchstart');\nconst touchend = shortcut('touchend');\nconst touchmove = shortcut('touchmove');\nconst resize = shortcut('resize');\nconst scroll = shortcut('scroll');\n\nexport default $;\nexport { $, add, addClass, animate, animationEnd, append, appendTo, attr, blur, change, children, click, closest, css, data, dataset, detach, each, empty, eq, filter, find, focus, focusin, focusout, hasClass, height, hide, html, index, insertAfter, insertBefore, is, keydown, keypress, keyup, mousedown, mouseenter, mouseleave, mousemove, mouseout, mouseover, mouseup, next, nextAll, off, offset, on, once, outerHeight, outerWidth, parent, parents, prepend, prependTo, prev, prevAll, prop, remove, removeAttr, removeClass, removeData, resize, scroll, scrollLeft, scrollTo, scrollTop, show, siblings, stop, styles, submit, text, toggleClass, touchend, touchmove, touchstart, transform, transition, transitionEnd, trigger, val, value, width };\n","import { $, addClass, removeClass, hasClass, toggleClass, attr, removeAttr, transform, transition, on, off, trigger, transitionEnd, outerWidth, outerHeight, styles, offset, css, each, html, text, is, index, eq, append, prepend, next, nextAll, prev, prevAll, parent, parents, closest, find, children, filter, remove } from 'dom7';\nconst Methods = {\n addClass,\n removeClass,\n hasClass,\n toggleClass,\n attr,\n removeAttr,\n transform,\n transition,\n on,\n off,\n trigger,\n transitionEnd,\n outerWidth,\n outerHeight,\n styles,\n offset,\n css,\n each,\n html,\n text,\n is,\n index,\n eq,\n append,\n prepend,\n next,\n nextAll,\n prev,\n prevAll,\n parent,\n parents,\n closest,\n find,\n children,\n filter,\n remove\n};\nObject.keys(Methods).forEach(methodName => {\n Object.defineProperty($.fn, methodName, {\n value: Methods[methodName],\n writable: true\n });\n});\nexport default $;","import { getWindow } from 'ssr-window';\n\nfunction deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach(key => {\n try {\n object[key] = null;\n } catch (e) {// no getter for object\n }\n\n try {\n delete object[key];\n } catch (e) {// something got wrong\n }\n });\n}\n\nfunction nextTick(callback, delay = 0) {\n return setTimeout(callback, delay);\n}\n\nfunction now() {\n return Date.now();\n}\n\nfunction getComputedStyle(el) {\n const window = getWindow();\n let style;\n\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n\n if (!style) {\n style = el.style;\n }\n\n return style;\n}\n\nfunction getTranslate(el, axis = 'x') {\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n const curStyle = getComputedStyle(el, null);\n\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n } // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n\n\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41; // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]); // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42; // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]); // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n\n return curTransform || 0;\n}\n\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\n\nfunction isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n return node instanceof HTMLElement;\n }\n\n return node && (node.nodeType === 1 || node.nodeType === 11);\n}\n\nfunction extend(...args) {\n const to = Object(args[0]);\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n\n for (let i = 1; i < args.length; i += 1) {\n const nextSource = args[i];\n\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n\n return to;\n}\n\nfunction setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n}\n\nfunction animateCSSModeScroll({\n swiper,\n targetPosition,\n side\n}) {\n const window = getWindow();\n const startPosition = -swiper.translate;\n let startTime = null;\n let time;\n const duration = swiper.params.speed;\n swiper.wrapperEl.style.scrollSnapType = 'none';\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n const dir = targetPosition > startPosition ? 'next' : 'prev';\n\n const isOutOfBound = (current, target) => {\n return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n };\n\n const animate = () => {\n time = new Date().getTime();\n\n if (startTime === null) {\n startTime = time;\n }\n\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n\n if (isOutOfBound(currentPosition, targetPosition)) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.scrollSnapType = '';\n setTimeout(() => {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n });\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n\n animate();\n}\n\nexport { animateCSSModeScroll, deleteProps, nextTick, now, getTranslate, isObject, extend, getComputedStyle, setCSSProperty };","import { getWindow, getDocument } from 'ssr-window';\nlet support;\n\nfunction calcSupport() {\n const window = getWindow();\n const document = getDocument();\n return {\n smoothScroll: document.documentElement && 'scrollBehavior' in document.documentElement.style,\n touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch),\n passiveListener: function checkPassiveListener() {\n let supportsPassive = false;\n\n try {\n const opts = Object.defineProperty({}, 'passive', {\n // eslint-disable-next-line\n get() {\n supportsPassive = true;\n }\n\n });\n window.addEventListener('testPassiveListener', null, opts);\n } catch (e) {// No support\n }\n\n return supportsPassive;\n }(),\n gestures: function checkGestures() {\n return 'ongesturestart' in window;\n }()\n };\n}\n\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n\n return support;\n}\n\nexport { getSupport };","import { getWindow } from 'ssr-window';\nimport { getSupport } from './get-support.js';\nlet deviceCached;\n\nfunction calcDevice({\n userAgent\n} = {}) {\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n const device = {\n ios: false,\n android: false\n };\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n\n let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n const windows = platform === 'Win32';\n let macos = platform === 'MacIntel'; // iPadOs 13 fix\n\n const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n\n if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n } // Android\n\n\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n } // Export object\n\n\n return device;\n}\n\nfunction getDevice(overrides = {}) {\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n\n return deviceCached;\n}\n\nexport { getDevice };","import { getWindow } from 'ssr-window';\nlet browser;\n\nfunction calcBrowser() {\n const window = getWindow();\n\n function isSafari() {\n const ua = window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n\n return {\n isSafari: isSafari(),\n isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)\n };\n}\n\nfunction getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n\n return browser;\n}\n\nexport { getBrowser };","/* eslint-disable no-underscore-dangle */\nexport default {\n on(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(event => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n },\n\n once(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n\n function onceHandler(...args) {\n self.off(events, onceHandler);\n\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n\n handler.apply(self, args);\n }\n\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n\n onAny(handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n\n return self;\n },\n\n offAny(handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n\n return self;\n },\n\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach(event => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n\n emit(...args) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(event => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach(eventHandler => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach(eventHandler => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n }\n\n};","import updateSize from './updateSize.js';\nimport updateSlides from './updateSlides.js';\nimport updateAutoHeight from './updateAutoHeight.js';\nimport updateSlidesOffset from './updateSlidesOffset.js';\nimport updateSlidesProgress from './updateSlidesProgress.js';\nimport updateProgress from './updateProgress.js';\nimport updateSlidesClasses from './updateSlidesClasses.js';\nimport updateActiveIndex from './updateActiveIndex.js';\nimport updateClickedSlide from './updateClickedSlide.js';\nexport default {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide\n};","export default function updateSize() {\n const swiper = this;\n let width;\n let height;\n const $el = swiper.$el;\n\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = $el[0].clientWidth;\n }\n\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = $el[0].clientHeight;\n }\n\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n return;\n } // Subtract paddings\n\n\n width = width - parseInt($el.css('padding-left') || 0, 10) - parseInt($el.css('padding-right') || 0, 10);\n height = height - parseInt($el.css('padding-top') || 0, 10) - parseInt($el.css('padding-bottom') || 0, 10);\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n Object.assign(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height\n });\n}","import { setCSSProperty } from '../../shared/utils.js';\nexport default function updateSlides() {\n const swiper = this;\n\n function getDirectionLabel(property) {\n if (swiper.isHorizontal()) {\n return property;\n } // prettier-ignore\n\n\n return {\n 'width': 'height',\n 'margin-top': 'margin-left',\n 'margin-bottom ': 'margin-right',\n 'margin-left': 'margin-top',\n 'margin-right': 'margin-bottom',\n 'padding-left': 'padding-top',\n 'padding-right': 'padding-bottom',\n 'marginRight': 'marginBottom'\n }[property];\n }\n\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0);\n }\n\n const params = swiper.params;\n const {\n $wrapperEl,\n size: swiperSize,\n rtlTranslate: rtl,\n wrongRTL\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n const slides = $wrapperEl.children(`.${swiper.params.slideClass}`);\n const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n let snapGrid = [];\n const slidesGrid = [];\n const slidesSizesGrid = [];\n let offsetBefore = params.slidesOffsetBefore;\n\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n\n let offsetAfter = params.slidesOffsetAfter;\n\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n\n const previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.slidesGrid.length;\n let spaceBetween = params.spaceBetween;\n let slidePosition = -offsetBefore;\n let prevSlideSize = 0;\n let index = 0;\n\n if (typeof swiperSize === 'undefined') {\n return;\n }\n\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n }\n\n swiper.virtualSize = -spaceBetween; // reset margins\n\n if (rtl) slides.css({\n marginLeft: '',\n marginBottom: '',\n marginTop: ''\n });else slides.css({\n marginRight: '',\n marginBottom: '',\n marginTop: ''\n }); // reset cssMode offsets\n\n if (params.centeredSlides && params.cssMode) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', '');\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', '');\n }\n\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n\n if (gridEnabled) {\n swiper.grid.initSlides(slidesLength);\n } // Calc slides\n\n\n let slideSize;\n const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n }).length > 0;\n\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n const slide = slides.eq(i);\n\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slidesLength, getDirectionLabel);\n }\n\n if (slide.css('display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slides[i].style[getDirectionLabel('width')] = ``;\n }\n\n const slideStyles = getComputedStyle(slide[0]);\n const currentTransform = slide[0].style.transform;\n const currentWebKitTransform = slide[0].style.webkitTransform;\n\n if (currentTransform) {\n slide[0].style.transform = 'none';\n }\n\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = 'none';\n }\n\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);\n } else {\n // eslint-disable-next-line\n const width = getDirectionPropertyValue(slideStyles, 'width');\n const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const {\n clientWidth,\n offsetWidth\n } = slide[0];\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n }\n }\n\n if (currentTransform) {\n slide[0].style.transform = currentTransform;\n }\n\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = currentWebKitTransform;\n }\n\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n\n if (slides[i]) {\n slides[i].style[getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n\n slidesSizesGrid.push(slideSize);\n\n if (params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n\n swiper.virtualSize += slideSize + spaceBetween;\n prevSlideSize = slideSize;\n index += 1;\n }\n\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n $wrapperEl.css({\n width: `${swiper.virtualSize + params.spaceBetween}px`\n });\n }\n\n if (params.setWrapperSize) {\n $wrapperEl.css({\n [getDirectionLabel('width')]: `${swiper.virtualSize + params.spaceBetween}px`\n });\n }\n\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid, getDirectionLabel);\n } // Remove last grid elements depending on width\n\n\n if (!params.centeredSlides) {\n const newSlidesGrid = [];\n\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n\n if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem);\n }\n }\n\n snapGrid = newSlidesGrid;\n\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n\n if (snapGrid.length === 0) snapGrid = [0];\n\n if (params.spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight');\n slides.filter((_, slideIndex) => {\n if (!params.cssMode) return true;\n\n if (slideIndex === slides.length - 1) {\n return false;\n }\n\n return true;\n }).css({\n [key]: `${spaceBetween}px`\n });\n }\n\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n const maxSnap = allSlidesSize - swiperSize;\n snapGrid = snapGrid.map(snap => {\n if (snap < 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n\n if (allSlidesSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n snapGrid.forEach((snap, snapIndex) => {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach((snap, snapIndex) => {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n\n Object.assign(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid\n });\n\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n const addToSnapGrid = -swiper.snapGrid[0];\n const addToSlidesGrid = -swiper.slidesGrid[0];\n swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n }\n\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n\n if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\n const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;\n const hasClassBackfaceClassAdded = swiper.$el.hasClass(backFaceHiddenClass);\n\n if (slidesLength <= params.maxBackfaceHiddenSlides) {\n if (!hasClassBackfaceClassAdded) swiper.$el.addClass(backFaceHiddenClass);\n } else if (hasClassBackfaceClassAdded) {\n swiper.$el.removeClass(backFaceHiddenClass);\n }\n }\n}","import $ from '../../shared/dom.js';\nexport default function updateAutoHeight(speed) {\n const swiper = this;\n const activeSlides = [];\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let newHeight = 0;\n let i;\n\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n\n const getSlideByIndex = index => {\n if (isVirtual) {\n return swiper.slides.filter(el => parseInt(el.getAttribute('data-swiper-slide-index'), 10) === index)[0];\n }\n\n return swiper.slides.eq(index)[0];\n }; // Find slides currently in view\n\n\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n (swiper.visibleSlides || $([])).each(slide => {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index = swiper.activeIndex + i;\n if (index > swiper.slides.length && !isVirtual) break;\n activeSlides.push(getSlideByIndex(index));\n }\n }\n } else {\n activeSlides.push(getSlideByIndex(swiper.activeIndex));\n } // Find new height from highest slide in view\n\n\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n } // Update Height\n\n\n if (newHeight || newHeight === 0) swiper.$wrapperEl.css('height', `${newHeight}px`);\n}","export default function updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;\n }\n}","import $ from '../../shared/dom.js';\nexport default function updateSlidesProgress(translate = this && this.translate || 0) {\n const swiper = this;\n const params = swiper.params;\n const {\n slides,\n rtlTranslate: rtl,\n snapGrid\n } = swiper;\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate; // Visible Slides\n\n slides.removeClass(params.slideVisibleClass);\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n let slideOffset = slide.swiperSlideOffset;\n\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n\n const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n const slideBefore = -(offsetCenter - slideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n slides.eq(i).addClass(params.slideVisibleClass);\n }\n\n slide.progress = rtl ? -slideProgress : slideProgress;\n slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n }\n\n swiper.visibleSlides = $(swiper.visibleSlides);\n}","export default function updateProgress(translate) {\n const swiper = this;\n\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1; // eslint-disable-next-line\n\n translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n }\n\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let {\n progress,\n isBeginning,\n isEnd\n } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n isBeginning = progress <= 0;\n isEnd = progress >= 1;\n }\n\n Object.assign(swiper, {\n progress,\n isBeginning,\n isEnd\n });\n if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n swiper.emit('fromEdge');\n }\n\n swiper.emit('progress', progress);\n}","export default function updateSlidesClasses() {\n const swiper = this;\n const {\n slides,\n params,\n $wrapperEl,\n activeIndex,\n realIndex\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n slides.removeClass(`${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`);\n let activeSlide;\n\n if (isVirtual) {\n activeSlide = swiper.$wrapperEl.find(`.${params.slideClass}[data-swiper-slide-index=\"${activeIndex}\"]`);\n } else {\n activeSlide = slides.eq(activeIndex);\n } // Active classes\n\n\n activeSlide.addClass(params.slideActiveClass);\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (activeSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n }\n } // Next Slide\n\n\n let nextSlide = activeSlide.nextAll(`.${params.slideClass}`).eq(0).addClass(params.slideNextClass);\n\n if (params.loop && nextSlide.length === 0) {\n nextSlide = slides.eq(0);\n nextSlide.addClass(params.slideNextClass);\n } // Prev Slide\n\n\n let prevSlide = activeSlide.prevAll(`.${params.slideClass}`).eq(0).addClass(params.slidePrevClass);\n\n if (params.loop && prevSlide.length === 0) {\n prevSlide = slides.eq(-1);\n prevSlide.addClass(params.slidePrevClass);\n }\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (nextSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n }\n\n if (prevSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n }\n }\n\n swiper.emitSlidesClasses();\n}","export default function updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n slidesGrid,\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n snapIndex: previousSnapIndex\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n\n if (typeof activeIndex === 'undefined') {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n } // Normalize slideIndex\n\n\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n }\n\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n if (activeIndex === previousIndex) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n\n return;\n } // Get real index\n\n\n const realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n Object.assign(swiper, {\n snapIndex,\n realIndex,\n previousIndex,\n activeIndex\n });\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n swiper.emit('slideChange');\n }\n}","import $ from '../../shared/dom.js';\nexport default function updateClickedSlide(e) {\n const swiper = this;\n const params = swiper.params;\n const slide = $(e).closest(`.${params.slideClass}`)[0];\n let slideFound = false;\n let slideIndex;\n\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\n }\n }\n\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = slideIndex;\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n}","import getTranslate from './getTranslate.js';\nimport setTranslate from './setTranslate.js';\nimport minTranslate from './minTranslate.js';\nimport maxTranslate from './maxTranslate.js';\nimport translateTo from './translateTo.js';\nexport default {\n getTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo\n};","import { getTranslate } from '../../shared/utils.js';\nexport default function getSwiperTranslate(axis = this.isHorizontal() ? 'x' : 'y') {\n const swiper = this;\n const {\n params,\n rtlTranslate: rtl,\n translate,\n $wrapperEl\n } = swiper;\n\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n\n if (params.cssMode) {\n return translate;\n }\n\n let currentTranslate = getTranslate($wrapperEl[0], axis);\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n}","export default function setTranslate(translate, byController) {\n const swiper = this;\n const {\n rtlTranslate: rtl,\n params,\n $wrapperEl,\n wrapperEl,\n progress\n } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n $wrapperEl.transform(`translate3d(${x}px, ${y}px, ${z}px)`);\n }\n\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y; // Check if we need to update progress\n\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, byController);\n}","export default function minTranslate() {\n return -this.snapGrid[0];\n}","export default function maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}","import { animateCSSModeScroll } from '../../shared/utils.js';\nexport default function translateTo(translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) {\n const swiper = this;\n const {\n params,\n wrapperEl\n } = swiper;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate; // Update progress\n\n swiper.updateProgress(newTranslate);\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: -newTranslate,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth'\n });\n }\n\n return true;\n }\n\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n\n if (!swiper.animating) {\n swiper.animating = true;\n\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n\n return true;\n}","export default function transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step\n}) {\n const {\n activeIndex,\n previousIndex\n } = swiper;\n let dir = direction;\n\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n\n swiper.emit(`transition${step}`);\n\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n return;\n }\n\n swiper.emit(`slideChangeTransition${step}`);\n\n if (dir === 'next') {\n swiper.emit(`slideNextTransition${step}`);\n } else {\n swiper.emit(`slidePrevTransition${step}`);\n }\n }\n}","import slideTo from './slideTo.js';\nimport slideToLoop from './slideToLoop.js';\nimport slideNext from './slideNext.js';\nimport slidePrev from './slidePrev.js';\nimport slideReset from './slideReset.js';\nimport slideToClosest from './slideToClosest.js';\nimport slideToClickedSlide from './slideToClickedSlide.js';\nexport default {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide\n};","import { animateCSSModeScroll } from '../../shared/utils.js';\nexport default function slideTo(index = 0, speed = this.params.speed, runCallbacks = true, internal, initial) {\n if (typeof index !== 'number' && typeof index !== 'string') {\n throw new Error(`The 'index' argument cannot have type other than 'number' or 'string'. [${typeof index}] given.`);\n }\n\n if (typeof index === 'string') {\n /**\n * The `index` argument converted from `string` to `number`.\n * @type {number}\n */\n const indexAsNumber = parseInt(index, 10);\n /**\n * Determines whether the `index` argument is a valid `number`\n * after being converted from the `string` type.\n * @type {boolean}\n */\n\n const isValidNumber = isFinite(indexAsNumber);\n\n if (!isValidNumber) {\n throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${index}] given.`);\n } // Knowing that the converted `index` is a valid number,\n // we can update the original argument's value.\n\n\n index = indexAsNumber;\n }\n\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n enabled\n } = swiper;\n\n if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) {\n return false;\n }\n\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n const translate = -snapGrid[snapIndex]; // Normalize slideIndex\n\n if (params.normalizeSlideIndex) {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n const normalizedTranslate = -Math.floor(translate * 100);\n const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n slideIndex = i;\n } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n slideIndex = i + 1;\n }\n } else if (normalizedTranslate >= normalizedGrid) {\n slideIndex = i;\n }\n }\n } // Directions locks\n\n\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n return false;\n }\n\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) return false;\n }\n }\n\n if (slideIndex !== (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n } // Update progress\n\n\n swiper.updateProgress(translate);\n let direction;\n if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset'; // Update Index\n\n if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n swiper.updateActiveIndex(slideIndex); // Update Height\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n swiper.updateSlidesClasses();\n\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n\n return false;\n }\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n\n if (speed === 0) {\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n\n if (isVirtual) {\n requestAnimationFrame(() => {\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._swiperImmediateVirtual = false;\n });\n }\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: t,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth'\n });\n }\n\n return true;\n }\n\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n\n if (speed === 0) {\n swiper.transitionEnd(runCallbacks, direction);\n } else if (!swiper.animating) {\n swiper.animating = true;\n\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n }\n\n return true;\n}","export default function slideToLoop(index = 0, speed = this.params.speed, runCallbacks = true, internal) {\n if (typeof index === 'string') {\n /**\n * The `index` argument converted from `string` to `number`.\n * @type {number}\n */\n const indexAsNumber = parseInt(index, 10);\n /**\n * Determines whether the `index` argument is a valid `number`\n * after being converted from the `string` type.\n * @type {boolean}\n */\n\n const isValidNumber = isFinite(indexAsNumber);\n\n if (!isValidNumber) {\n throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${index}] given.`);\n } // Knowing that the converted `index` is a valid number,\n // we can update the original argument's value.\n\n\n index = indexAsNumber;\n }\n\n const swiper = this;\n let newIndex = index;\n\n if (swiper.params.loop) {\n newIndex += swiper.loopedSlides;\n }\n\n return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideNext(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n animating,\n enabled,\n params\n } = swiper;\n if (!enabled) return swiper;\n let perGroup = params.slidesPerGroup;\n\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n\n if (params.rewind && swiper.isEnd) {\n return swiper.slideTo(0, speed, runCallbacks, internal);\n }\n\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slidePrev(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n params,\n animating,\n snapGrid,\n slidesGrid,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return swiper;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n\n if (typeof prevSnap === 'undefined' && params.cssMode) {\n let prevSnapIndex;\n snapGrid.forEach((snap, snapIndex) => {\n if (normalizedTranslate >= snap) {\n // prevSnap = snap;\n prevSnapIndex = snapIndex;\n }\n });\n\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n\n let prevIndex = 0;\n\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n prevIndex = Math.max(prevIndex, 0);\n }\n }\n\n if (params.rewind && swiper.isBeginning) {\n const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\n }\n\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideReset(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideToClosest(speed = this.params.speed, runCallbacks = true, internal, threshold = 0.5) {\n const swiper = this;\n let index = swiper.activeIndex;\n const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n const prevSnap = swiper.snapGrid[snapIndex - 1];\n const currentSnap = swiper.snapGrid[snapIndex];\n\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n return swiper.slideTo(index, speed, runCallbacks, internal);\n}","import $ from '../../shared/dom.js';\nimport { nextTick } from '../../shared/utils.js';\nexport default function slideToClickedSlide() {\n const swiper = this;\n const {\n params,\n $wrapperEl\n } = swiper;\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.clickedIndex;\n let realIndex;\n\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n\n if (params.centeredSlides) {\n if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n swiper.loopFix();\n slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n}","import loopCreate from './loopCreate.js';\nimport loopFix from './loopFix.js';\nimport loopDestroy from './loopDestroy.js';\nexport default {\n loopCreate,\n loopFix,\n loopDestroy\n};","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nexport default function loopCreate() {\n const swiper = this;\n const document = getDocument();\n const {\n params,\n $wrapperEl\n } = swiper; // Remove duplicated slides\n\n const $selector = $wrapperEl.children().length > 0 ? $($wrapperEl.children()[0].parentNode) : $wrapperEl;\n $selector.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove();\n let slides = $selector.children(`.${params.slideClass}`);\n\n if (params.loopFillGroupWithBlank) {\n const blankSlidesNum = params.slidesPerGroup - slides.length % params.slidesPerGroup;\n\n if (blankSlidesNum !== params.slidesPerGroup) {\n for (let i = 0; i < blankSlidesNum; i += 1) {\n const blankNode = $(document.createElement('div')).addClass(`${params.slideClass} ${params.slideBlankClass}`);\n $selector.append(blankNode);\n }\n\n slides = $selector.children(`.${params.slideClass}`);\n }\n }\n\n if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;\n swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));\n swiper.loopedSlides += params.loopAdditionalSlides;\n\n if (swiper.loopedSlides > slides.length && swiper.params.loopedSlidesLimit) {\n swiper.loopedSlides = slides.length;\n }\n\n const prependSlides = [];\n const appendSlides = [];\n slides.each((el, index) => {\n const slide = $(el);\n slide.attr('data-swiper-slide-index', index);\n });\n\n for (let i = 0; i < swiper.loopedSlides; i += 1) {\n const index = i - Math.floor(i / slides.length) * slides.length;\n appendSlides.push(slides.eq(index)[0]);\n prependSlides.unshift(slides.eq(slides.length - index - 1)[0]);\n }\n\n for (let i = 0; i < appendSlides.length; i += 1) {\n $selector.append($(appendSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n\n for (let i = prependSlides.length - 1; i >= 0; i -= 1) {\n $selector.prepend($(prependSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n}","export default function loopFix() {\n const swiper = this;\n swiper.emit('beforeLoopFix');\n const {\n activeIndex,\n slides,\n loopedSlides,\n allowSlidePrev,\n allowSlideNext,\n snapGrid,\n rtlTranslate: rtl\n } = swiper;\n let newIndex;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n const snapTranslate = -snapGrid[activeIndex];\n const diff = snapTranslate - swiper.getTranslate(); // Fix For Negative Oversliding\n\n if (activeIndex < loopedSlides) {\n newIndex = slides.length - loopedSlides * 3 + activeIndex;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n } else if (activeIndex >= slides.length - loopedSlides) {\n // Fix For Positive Oversliding\n newIndex = -slides.length + activeIndex + loopedSlides;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n }\n\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.emit('loopFix');\n}","export default function loopDestroy() {\n const swiper = this;\n const {\n $wrapperEl,\n params,\n slides\n } = swiper;\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass},.${params.slideClass}.${params.slideBlankClass}`).remove();\n slides.removeAttr('data-swiper-slide-index');\n}","import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { now } from '../../shared/utils.js'; // Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\n\nfunction closestElement(selector, base = this) {\n function __closestFrom(el) {\n if (!el || el === getDocument() || el === getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n\n if (!found && !el.getRootNode) {\n return null;\n }\n\n return found || __closestFrom(el.getRootNode().host);\n }\n\n return __closestFrom(base);\n}\n\nexport default function onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n const window = getWindow();\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n enabled\n } = swiper;\n if (!enabled) return;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let $targetEl = $(e.target);\n\n if (params.touchEventsTarget === 'wrapper') {\n if (!$targetEl.closest(swiper.wrapperEl).length) return;\n }\n\n data.isTouchEvent = e.type === 'touchstart';\n if (!data.isTouchEvent && 'which' in e && e.which === 3) return;\n if (!data.isTouchEvent && 'button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return; // change target el for shadow root component\n\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== ''; // eslint-disable-next-line\n\n const eventPath = event.composedPath ? event.composedPath() : event.path;\n\n if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {\n $targetEl = $(eventPath[0]);\n }\n\n const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot); // use closestElement for shadow root element to get the actual closest for nested shadow root element\n\n if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, $targetEl[0]) : $targetEl.closest(noSwipingSelector)[0])) {\n swiper.allowClick = true;\n return;\n }\n\n if (params.swipeHandler) {\n if (!$targetEl.closest(params.swipeHandler)[0]) return;\n }\n\n touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY; // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n } else {\n return;\n }\n }\n\n Object.assign(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined\n });\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n\n if (e.type !== 'touchstart') {\n let preventDefault = true;\n\n if ($targetEl.is(data.focusableElements)) {\n preventDefault = false;\n\n if ($targetEl[0].nodeName === 'SELECT') {\n data.isTouched = false;\n }\n }\n\n if (document.activeElement && $(document.activeElement).is(data.focusableElements) && document.activeElement !== $targetEl[0]) {\n document.activeElement.blur();\n }\n\n const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n\n if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !$targetEl[0].isContentEditable) {\n e.preventDefault();\n }\n }\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {\n swiper.freeMode.onTouchStart();\n }\n\n swiper.emit('touchStart', e);\n}","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { now } from '../../shared/utils.js';\nexport default function onTouchMove(event) {\n const document = getDocument();\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n enabled\n } = swiper;\n if (!enabled) return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n\n return;\n }\n\n if (data.isTouchEvent && e.type !== 'touchmove') return;\n const targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);\n const pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;\n const pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;\n\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n\n if (!swiper.allowTouchMove) {\n if (!$(e.target).is(data.focusableElements)) {\n swiper.allowClick = false;\n }\n\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY\n });\n data.touchStartTime = now();\n }\n\n return;\n }\n\n if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n return;\n }\n }\n\n if (data.isTouchEvent && document.activeElement) {\n if (e.target === document.activeElement && $(e.target).is(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n\n if (e.targetTouches && e.targetTouches.length > 1) return;\n touches.currentX = pageX;\n touches.currentY = pageY;\n const diffX = touches.currentX - touches.startX;\n const diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n\n if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffX * diffX + diffY * diffY >= 25) {\n touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n\n if (data.isScrolling) {\n data.isTouched = false;\n return;\n }\n\n if (!data.startMoving) {\n return;\n }\n\n swiper.allowClick = false;\n\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n\n if (!data.isMoved) {\n if (params.loop && !params.cssMode) {\n swiper.loopFix();\n }\n\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n\n if (swiper.animating) {\n swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n }\n\n data.allowMomentumBounce = false; // Grab Cursor\n\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n\n swiper.emit('sliderFirstMove', e);\n }\n\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n let diff = swiper.isHorizontal() ? diffX : diffY;\n touches.diff = diff;\n diff *= params.touchRatio;\n if (rtl) diff = -diff;\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n data.currentTranslate = diff + data.startTranslate;\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n\n if (diff > 0 && data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n } // Directions locks\n\n\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n } // Threshold\n\n\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n\n if (!params.followFinger || params.cssMode) return; // Update active index in free mode\n\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n if (swiper.params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n } // Update progress\n\n\n swiper.updateProgress(data.currentTranslate); // Update translate\n\n swiper.setTranslate(data.currentTranslate);\n}","import { now, nextTick } from '../../shared/utils.js';\nexport default function onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n slidesGrid,\n enabled\n } = swiper;\n if (!enabled) return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n\n data.allowTouchCallbacks = false;\n\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n\n data.isMoved = false;\n data.startMoving = false;\n return;\n } // Return Grab Cursor\n\n\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n } // Time diff\n\n\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime; // Tap, doubleTap, Click\n\n if (swiper.allowClick) {\n const pathTree = e.path || e.composedPath && e.composedPath();\n swiper.updateClickedSlide(pathTree && pathTree[0] || e.target);\n swiper.emit('tap click', e);\n\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n let currentPos;\n\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n\n if (params.cssMode) {\n return;\n }\n\n if (swiper.params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({\n currentPos\n });\n return;\n } // Find current slide\n\n\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n\n for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n } else if (currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n }\n\n let rewindFirstIndex = null;\n let rewindLastIndex = null;\n\n if (params.rewind) {\n if (swiper.isBeginning) {\n rewindLastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n } else if (swiper.isEnd) {\n rewindFirstIndex = 0;\n }\n } // Find current slide size\n\n\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) {\n swiper.slideTo(stopIndex + increment);\n } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {\n swiper.slideTo(rewindLastIndex);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\n }\n\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n}","export default function onResize() {\n const swiper = this;\n const {\n params,\n el\n } = swiper;\n if (el && el.offsetWidth === 0) return; // Breakpoints\n\n if (params.breakpoints) {\n swiper.setBreakpoint();\n } // Save locks\n\n\n const {\n allowSlideNext,\n allowSlidePrev,\n snapGrid\n } = swiper; // Disable locks on resize\n\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateSlidesClasses();\n\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.run();\n } // Return locks after resize\n\n\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n}","export default function onClick(e) {\n const swiper = this;\n if (!swiper.enabled) return;\n\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n}","export default function onScroll() {\n const swiper = this;\n const {\n wrapperEl,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return;\n swiper.previousTranslate = swiper.translate;\n\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n } // eslint-disable-next-line\n\n\n if (swiper.translate === 0) swiper.translate = 0;\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, false);\n}","import { getDocument } from 'ssr-window';\nimport onTouchStart from './onTouchStart.js';\nimport onTouchMove from './onTouchMove.js';\nimport onTouchEnd from './onTouchEnd.js';\nimport onResize from './onResize.js';\nimport onClick from './onClick.js';\nimport onScroll from './onScroll.js';\nlet dummyEventAttached = false;\n\nfunction dummyEventListener() {}\n\nconst events = (swiper, method) => {\n const document = getDocument();\n const {\n params,\n touchEvents,\n el,\n wrapperEl,\n device,\n support\n } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method; // Touch Events\n\n if (!support.touch) {\n el[domMethod](touchEvents.start, swiper.onTouchStart, false);\n document[domMethod](touchEvents.move, swiper.onTouchMove, capture);\n document[domMethod](touchEvents.end, swiper.onTouchEnd, false);\n } else {\n const passiveListener = touchEvents.start === 'touchstart' && support.passiveListener && params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n el[domMethod](touchEvents.start, swiper.onTouchStart, passiveListener);\n el[domMethod](touchEvents.move, swiper.onTouchMove, support.passiveListener ? {\n passive: false,\n capture\n } : capture);\n el[domMethod](touchEvents.end, swiper.onTouchEnd, passiveListener);\n\n if (touchEvents.cancel) {\n el[domMethod](touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n }\n } // Prevent Links Clicks\n\n\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n } // Resize handler\n\n\n if (params.updateOnWindowResize) {\n swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n } else {\n swiper[swiperMethod]('observerUpdate', onResize, true);\n }\n};\n\nfunction attachEvents() {\n const swiper = this;\n const document = getDocument();\n const {\n params,\n support\n } = swiper;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n\n swiper.onClick = onClick.bind(swiper);\n\n if (support.touch && !dummyEventAttached) {\n document.addEventListener('touchstart', dummyEventListener);\n dummyEventAttached = true;\n }\n\n events(swiper, 'on');\n}\n\nfunction detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n}\n\nexport default {\n attachEvents,\n detachEvents\n};","import { extend } from '../../shared/utils.js';\n\nconst isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n};\n\nexport default function setBreakpoint() {\n const swiper = this;\n const {\n activeIndex,\n initialized,\n loopedSlides = 0,\n params,\n $el\n } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return; // Get breakpoint for window width and update parameters\n\n const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = isGridEnabled(swiper, params);\n const isMultiRow = isGridEnabled(swiper, breakpointParams);\n const wasEnabled = params.enabled;\n\n if (wasMultiRow && !isMultiRow) {\n $el.removeClass(`${params.containerModifierClass}grid ${params.containerModifierClass}grid-column`);\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n $el.addClass(`${params.containerModifierClass}grid`);\n\n if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n $el.addClass(`${params.containerModifierClass}grid-column`);\n }\n\n swiper.emitContainerClasses();\n } // Toggle navigation, pagination, scrollbar\n\n\n ['navigation', 'pagination', 'scrollbar'].forEach(prop => {\n const wasModuleEnabled = params[prop] && params[prop].enabled;\n const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;\n\n if (wasModuleEnabled && !isModuleEnabled) {\n swiper[prop].disable();\n }\n\n if (!wasModuleEnabled && isModuleEnabled) {\n swiper[prop].enable();\n }\n });\n const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n\n extend(swiper.params, breakpointParams);\n const isEnabled = swiper.params.enabled;\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev\n });\n\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n\n swiper.currentBreakpoint = breakpoint;\n swiper.emit('_beforeBreakpoint', breakpointParams);\n\n if (needsReLoop && initialized) {\n swiper.loopDestroy();\n swiper.loopCreate();\n swiper.updateSlides();\n swiper.slideTo(activeIndex - loopedSlides + swiper.loopedSlides, 0, false);\n }\n\n swiper.emit('breakpoint', breakpointParams);\n}","import setBreakpoint from './setBreakpoint.js';\nimport getBreakpoint from './getBreakpoint.js';\nexport default {\n setBreakpoint,\n getBreakpoint\n};","import { getWindow } from 'ssr-window';\nexport default function getBreakpoint(breakpoints, base = 'window', containerEl) {\n if (!breakpoints || base === 'container' && !containerEl) return undefined;\n let breakpoint = false;\n const window = getWindow();\n const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n const points = Object.keys(breakpoints).map(point => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = currentHeight * minRatio;\n return {\n value,\n point\n };\n }\n\n return {\n value: point,\n point\n };\n });\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n\n for (let i = 0; i < points.length; i += 1) {\n const {\n point,\n value\n } = points[i];\n\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n\n return breakpoint || 'max';\n}","import addClasses from './addClasses.js';\nimport removeClasses from './removeClasses.js';\nexport default {\n addClasses,\n removeClasses\n};","function prepareClasses(entries, prefix) {\n const resultClasses = [];\n entries.forEach(item => {\n if (typeof item === 'object') {\n Object.keys(item).forEach(classNames => {\n if (item[classNames]) {\n resultClasses.push(prefix + classNames);\n }\n });\n } else if (typeof item === 'string') {\n resultClasses.push(prefix + item);\n }\n });\n return resultClasses;\n}\n\nexport default function addClasses() {\n const swiper = this;\n const {\n classNames,\n params,\n rtl,\n $el,\n device,\n support\n } = swiper; // prettier-ignore\n\n const suffixes = prepareClasses(['initialized', params.direction, {\n 'pointer-events': !support.touch\n }, {\n 'free-mode': swiper.params.freeMode && params.freeMode.enabled\n }, {\n 'autoheight': params.autoHeight\n }, {\n 'rtl': rtl\n }, {\n 'grid': params.grid && params.grid.rows > 1\n }, {\n 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n }, {\n 'android': device.android\n }, {\n 'ios': device.ios\n }, {\n 'css-mode': params.cssMode\n }, {\n 'centered': params.cssMode && params.centeredSlides\n }, {\n 'watch-progress': params.watchSlidesProgress\n }], params.containerModifierClass);\n classNames.push(...suffixes);\n $el.addClass([...classNames].join(' '));\n swiper.emitContainerClasses();\n}","export default function removeClasses() {\n const swiper = this;\n const {\n $el,\n classNames\n } = swiper;\n $el.removeClass(classNames.join(' '));\n swiper.emitContainerClasses();\n}","function checkOverflow() {\n const swiper = this;\n const {\n isLocked: wasLocked,\n params\n } = swiper;\n const {\n slidesOffsetBefore\n } = params;\n\n if (slidesOffsetBefore) {\n const lastSlideIndex = swiper.slides.length - 1;\n const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n swiper.isLocked = swiper.size > lastSlideRightEdge;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n}\n\nexport default {\n checkOverflow\n};","export default {\n init: true,\n direction: 'horizontal',\n touchEventsTarget: 'wrapper',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n resizeObserver: true,\n nested: false,\n createElements: false,\n enabled: true,\n focusableElements: 'input, select, option, textarea, button, video, label',\n // Overrides\n width: null,\n height: null,\n //\n preventInteractionOnTransition: false,\n // ssr\n userAgent: null,\n url: null,\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide',\n // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n // Breakpoints\n breakpoints: undefined,\n breakpointsBase: 'window',\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n slidesPerGroupAuto: false,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0,\n // in px\n slidesOffsetAfter: 0,\n // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: true,\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 0,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Progress\n watchSlidesProgress: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // Images\n preloadImages: true,\n updateOnImagesReady: true,\n // loop\n loop: false,\n loopAdditionalSlides: 0,\n loopedSlides: null,\n loopedSlidesLimit: true,\n loopFillGroupWithBlank: false,\n loopPreventsSlide: true,\n // rewind\n rewind: false,\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null,\n // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n // Passive Listeners\n passiveListeners: true,\n maxBackfaceHiddenSlides: 10,\n // NS\n containerModifierClass: 'swiper-',\n // NEW\n slideClass: 'swiper-slide',\n slideBlankClass: 'swiper-slide-invisible-blank',\n slideActiveClass: 'swiper-slide-active',\n slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideDuplicateClass: 'swiper-slide-duplicate',\n slideNextClass: 'swiper-slide-next',\n slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n slidePrevClass: 'swiper-slide-prev',\n slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n wrapperClass: 'swiper-wrapper',\n // Callbacks\n runCallbacksOnInit: true,\n // Internals\n _emitClasses: false\n};","import { extend } from '../shared/utils.js';\nexport default function moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj = {}) {\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n\n if (['navigation', 'pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] === true) {\n params[moduleParamName] = {\n auto: true\n };\n }\n\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\n\n if (params[moduleParamName] === true) {\n params[moduleParamName] = {\n enabled: true\n };\n }\n\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n\n if (!params[moduleParamName]) params[moduleParamName] = {\n enabled: false\n };\n extend(allModulesParams, obj);\n };\n}","/* eslint no-param-reassign: \"off\" */\nimport { getDocument } from 'ssr-window';\nimport $ from '../shared/dom.js';\nimport { extend, now, deleteProps } from '../shared/utils.js';\nimport { getSupport } from '../shared/get-support.js';\nimport { getDevice } from '../shared/get-device.js';\nimport { getBrowser } from '../shared/get-browser.js';\nimport Resize from './modules/resize/resize.js';\nimport Observer from './modules/observer/observer.js';\nimport eventsEmitter from './events-emitter.js';\nimport update from './update/index.js';\nimport translate from './translate/index.js';\nimport transition from './transition/index.js';\nimport slide from './slide/index.js';\nimport loop from './loop/index.js';\nimport grabCursor from './grab-cursor/index.js';\nimport events from './events/index.js';\nimport breakpoints from './breakpoints/index.js';\nimport classes from './classes/index.js';\nimport images from './images/index.js';\nimport checkOverflow from './check-overflow/index.js';\nimport defaults from './defaults.js';\nimport moduleExtendParams from './moduleExtendParams.js';\nconst prototypes = {\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n events,\n breakpoints,\n checkOverflow,\n classes,\n images\n};\nconst extendedDefaults = {};\n\nclass Swiper {\n constructor(...args) {\n let el;\n let params;\n\n if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n params = args[0];\n } else {\n [el, params] = args;\n }\n\n if (!params) params = {};\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n\n if (params.el && $(params.el).length > 1) {\n const swipers = [];\n $(params.el).each(containerEl => {\n const newParams = extend({}, params, {\n el: containerEl\n });\n swipers.push(new Swiper(newParams));\n }); // eslint-disable-next-line no-constructor-return\n\n return swipers;\n } // Swiper Instance\n\n\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({\n userAgent: params.userAgent\n });\n swiper.browser = getBrowser();\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [...swiper.__modules__];\n\n if (params.modules && Array.isArray(params.modules)) {\n swiper.modules.push(...params.modules);\n }\n\n const allModulesParams = {};\n swiper.modules.forEach(mod => {\n mod({\n swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper)\n });\n }); // Extend defaults with modules params\n\n const swiperParams = extend({}, defaults, allModulesParams); // Extend defaults with passed params\n\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params); // add event listeners\n\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach(eventName => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n } // Save Dom lib\n\n\n swiper.$ = $; // Extend Swiper\n\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\n // Classes\n classNames: [],\n // Slides\n slides: $(),\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n //\n isBeginning: true,\n isEnd: false,\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEvents: function touchEvents() {\n const touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n const desktop = ['pointerdown', 'pointermove', 'pointerup'];\n swiper.touchEventsTouch = {\n start: touch[0],\n move: touch[1],\n end: touch[2],\n cancel: touch[3]\n };\n swiper.touchEventsDesktop = {\n start: desktop[0],\n move: desktop[1],\n end: desktop[2]\n };\n return swiper.support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;\n }(),\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: now(),\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n isTouchEvent: undefined,\n startMoving: undefined\n },\n // Clicks\n allowClick: true,\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n },\n // Images\n imagesToLoad: [],\n imagesLoaded: 0\n });\n swiper.emit('_swiper'); // Init\n\n if (swiper.params.init) {\n swiper.init();\n } // Return app instance\n // eslint-disable-next-line no-constructor-return\n\n\n return swiper;\n }\n\n enable() {\n const swiper = this;\n if (swiper.enabled) return;\n swiper.enabled = true;\n\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n\n swiper.emit('enable');\n }\n\n disable() {\n const swiper = this;\n if (!swiper.enabled) return;\n swiper.enabled = false;\n\n if (swiper.params.grabCursor) {\n swiper.unsetGrabCursor();\n }\n\n swiper.emit('disable');\n }\n\n setProgress(progress, speed) {\n const swiper = this;\n progress = Math.min(Math.max(progress, 0), 1);\n const min = swiper.minTranslate();\n const max = swiper.maxTranslate();\n const current = (max - min) * progress + min;\n swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n emitContainerClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const cls = swiper.el.className.split(' ').filter(className => {\n return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n });\n swiper.emit('_containerClasses', cls.join(' '));\n }\n\n getSlideClasses(slideEl) {\n const swiper = this;\n if (swiper.destroyed) return '';\n return slideEl.className.split(' ').filter(className => {\n return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n }).join(' ');\n }\n\n emitSlidesClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const updates = [];\n swiper.slides.each(slideEl => {\n const classNames = swiper.getSlideClasses(slideEl);\n updates.push({\n slideEl,\n classNames\n });\n swiper.emit('_slideClass', slideEl, classNames);\n });\n swiper.emit('_slideClasses', updates);\n }\n\n slidesPerViewDynamic(view = 'current', exact = false) {\n const swiper = this;\n const {\n params,\n slides,\n slidesGrid,\n slidesSizesGrid,\n size: swiperSize,\n activeIndex\n } = swiper;\n let spv = 1;\n\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex].swiperSlideSize;\n let breakLoop;\n\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n // eslint-disable-next-line\n if (view === 'current') {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n\n if (slideInView) {\n spv += 1;\n }\n }\n } else {\n // previous\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n\n if (slideInView) {\n spv += 1;\n }\n }\n }\n }\n\n return spv;\n }\n\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const {\n snapGrid,\n params\n } = swiper; // Breakpoints\n\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n\n function setTranslate() {\n const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n let translated;\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled) {\n setTranslate();\n\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n\n if (!translated) {\n setTranslate();\n }\n }\n\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n\n swiper.emit('update');\n }\n\n changeDirection(newDirection, needUpdate = true) {\n const swiper = this;\n const currentDirection = swiper.params.direction;\n\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n\n swiper.$el.removeClass(`${swiper.params.containerModifierClass}${currentDirection}`).addClass(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.each(slideEl => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n return swiper;\n }\n\n changeLanguageDirection(direction) {\n const swiper = this;\n if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return;\n swiper.rtl = direction === 'rtl';\n swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;\n\n if (swiper.rtl) {\n swiper.$el.addClass(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'rtl';\n } else {\n swiper.$el.removeClass(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'ltr';\n }\n\n swiper.update();\n }\n\n mount(el) {\n const swiper = this;\n if (swiper.mounted) return true; // Find el\n\n const $el = $(el || swiper.params.el);\n el = $el[0];\n\n if (!el) {\n return false;\n }\n\n el.swiper = swiper;\n\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n\n const getWrapper = () => {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n const res = $(el.shadowRoot.querySelector(getWrapperSelector())); // Children needs to return slot items\n\n res.children = options => $el.children(options);\n\n return res;\n }\n\n if (!$el.children) {\n return $($el).children(getWrapperSelector());\n }\n\n return $el.children(getWrapperSelector());\n }; // Find Wrapper\n\n\n let $wrapperEl = getWrapper();\n\n if ($wrapperEl.length === 0 && swiper.params.createElements) {\n const document = getDocument();\n const wrapper = document.createElement('div');\n $wrapperEl = $(wrapper);\n wrapper.className = swiper.params.wrapperClass;\n $el.append(wrapper);\n $el.children(`.${swiper.params.slideClass}`).each(slideEl => {\n $wrapperEl.append(slideEl);\n });\n }\n\n Object.assign(swiper, {\n $el,\n el,\n $wrapperEl,\n wrapperEl: $wrapperEl[0],\n mounted: true,\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n wrongRTL: $wrapperEl.css('display') === '-webkit-box'\n });\n return true;\n }\n\n init(el) {\n const swiper = this;\n if (swiper.initialized) return swiper;\n const mounted = swiper.mount(el);\n if (mounted === false) return swiper;\n swiper.emit('beforeInit'); // Set breakpoint\n\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n } // Add Classes\n\n\n swiper.addClasses(); // Create loop\n\n if (swiper.params.loop) {\n swiper.loopCreate();\n } // Update size\n\n\n swiper.updateSize(); // Update slides\n\n swiper.updateSlides();\n\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n } // Set Grab Cursor\n\n\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n\n if (swiper.params.preloadImages) {\n swiper.preloadImages();\n } // Slide To Initial Slide\n\n\n if (swiper.params.loop) {\n swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit, false, true);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n } // Attach events\n\n\n swiper.attachEvents(); // Init Flag\n\n swiper.initialized = true; // Emit\n\n swiper.emit('init');\n swiper.emit('afterInit');\n return swiper;\n }\n\n destroy(deleteInstance = true, cleanStyles = true) {\n const swiper = this;\n const {\n params,\n $el,\n $wrapperEl,\n slides\n } = swiper;\n\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n\n swiper.emit('beforeDestroy'); // Init Flag\n\n swiper.initialized = false; // Detach events\n\n swiper.detachEvents(); // Destroy loop\n\n if (params.loop) {\n swiper.loopDestroy();\n } // Cleanup styles\n\n\n if (cleanStyles) {\n swiper.removeClasses();\n $el.removeAttr('style');\n $wrapperEl.removeAttr('style');\n\n if (slides && slides.length) {\n slides.removeClass([params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass].join(' ')).removeAttr('style').removeAttr('data-swiper-slide-index');\n }\n }\n\n swiper.emit('destroy'); // Detach emitter events\n\n Object.keys(swiper.eventsListeners).forEach(eventName => {\n swiper.off(eventName);\n });\n\n if (deleteInstance !== false) {\n swiper.$el[0].swiper = null;\n deleteProps(swiper);\n }\n\n swiper.destroyed = true;\n return null;\n }\n\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n\n static get extendedDefaults() {\n return extendedDefaults;\n }\n\n static get defaults() {\n return defaults;\n }\n\n static installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n const modules = Swiper.prototype.__modules__;\n\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach(m => Swiper.installModule(m));\n return Swiper;\n }\n\n Swiper.installModule(module);\n return Swiper;\n }\n\n}\n\nObject.keys(prototypes).forEach(prototypeGroup => {\n Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n });\n});\nSwiper.use([Resize, Observer]);\nexport default Swiper;","import setTransition from './setTransition.js';\nimport transitionStart from './transitionStart.js';\nimport transitionEnd from './transitionEnd.js';\nexport default {\n setTransition,\n transitionStart,\n transitionEnd\n};","export default function setTransition(duration, byController) {\n const swiper = this;\n\n if (!swiper.params.cssMode) {\n swiper.$wrapperEl.transition(duration);\n }\n\n swiper.emit('setTransition', duration, byController);\n}","import transitionEmit from './transitionEmit.js';\nexport default function transitionStart(runCallbacks = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n if (params.cssMode) return;\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'Start'\n });\n}","import transitionEmit from './transitionEmit.js';\nexport default function transitionEnd(runCallbacks = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'End'\n });\n}","import setGrabCursor from './setGrabCursor.js';\nimport unsetGrabCursor from './unsetGrabCursor.js';\nexport default {\n setGrabCursor,\n unsetGrabCursor\n};","export default function setGrabCursor(moving) {\n const swiper = this;\n if (swiper.support.touch || !swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n el.style.cursor = 'move';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n}","export default function unsetGrabCursor() {\n const swiper = this;\n\n if (swiper.support.touch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n return;\n }\n\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n}","import loadImage from './loadImage.js';\nimport preloadImages from './preloadImages.js';\nexport default {\n loadImage,\n preloadImages\n};","import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nexport default function loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) {\n const window = getWindow();\n let image;\n\n function onReady() {\n if (callback) callback();\n }\n\n const isPicture = $(imageEl).parent('picture')[0];\n\n if (!isPicture && (!imageEl.complete || !checkForComplete)) {\n if (src) {\n image = new window.Image();\n image.onload = onReady;\n image.onerror = onReady;\n\n if (sizes) {\n image.sizes = sizes;\n }\n\n if (srcset) {\n image.srcset = srcset;\n }\n\n if (src) {\n image.src = src;\n }\n } else {\n onReady();\n }\n } else {\n // image already loaded...\n onReady();\n }\n}","export default function preloadImages() {\n const swiper = this;\n swiper.imagesToLoad = swiper.$el.find('img');\n\n function onReady() {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;\n if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;\n\n if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n if (swiper.params.updateOnImagesReady) swiper.update();\n swiper.emit('imagesReady');\n }\n }\n\n for (let i = 0; i < swiper.imagesToLoad.length; i += 1) {\n const imageEl = swiper.imagesToLoad[i];\n swiper.loadImage(imageEl, imageEl.currentSrc || imageEl.getAttribute('src'), imageEl.srcset || imageEl.getAttribute('srcset'), imageEl.sizes || imageEl.getAttribute('sizes'), true, onReady);\n }\n}","import { getWindow } from 'ssr-window';\nexport default function Resize({\n swiper,\n on,\n emit\n}) {\n const window = getWindow();\n let observer = null;\n let animationFrame = null;\n\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver(entries => {\n animationFrame = window.requestAnimationFrame(() => {\n const {\n width,\n height\n } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach(({\n contentBoxSize,\n contentRect,\n target\n }) => {\n if (target && target !== swiper.el) return;\n newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n });\n observer.observe(swiper.el);\n };\n\n const removeObserver = () => {\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n }\n\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n\n window.addEventListener('resize', resizeHandler);\n window.addEventListener('orientationchange', orientationChangeHandler);\n });\n on('destroy', () => {\n removeObserver();\n window.removeEventListener('resize', resizeHandler);\n window.removeEventListener('orientationchange', orientationChangeHandler);\n });\n}","import { getWindow } from 'ssr-window';\nexport default function Observer({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const observers = [];\n const window = getWindow();\n\n const attach = (target, options = {}) => {\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc(mutations => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n observers.push(observer);\n };\n\n const init = () => {\n if (!swiper.params.observer) return;\n\n if (swiper.params.observeParents) {\n const containerParents = swiper.$el.parents();\n\n for (let i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n } // Observe container\n\n\n attach(swiper.$el[0], {\n childList: swiper.params.observeSlideChildren\n }); // Observe wrapper\n\n attach(swiper.$wrapperEl[0], {\n attributes: false\n });\n };\n\n const destroy = () => {\n observers.forEach(observer => {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false\n });\n on('init', init);\n on('destroy', destroy);\n}","import { getDocument } from 'ssr-window';\nexport default function createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n const document = getDocument();\n\n if (swiper.params.createElements) {\n Object.keys(checkProps).forEach(key => {\n if (!params[key] && params.auto === true) {\n let element = swiper.$el.children(`.${checkProps[key]}`)[0];\n\n if (!element) {\n element = document.createElement('div');\n element.className = checkProps[key];\n swiper.$el.append(element);\n }\n\n params[key] = element;\n originalParams[key] = element;\n }\n });\n }\n\n return params;\n}","import createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nimport $ from '../../shared/dom.js';\nexport default function Navigation({\n swiper,\n extendParams,\n on,\n emit\n}) {\n extendParams({\n navigation: {\n nextEl: null,\n prevEl: null,\n hideOnClick: false,\n disabledClass: 'swiper-button-disabled',\n hiddenClass: 'swiper-button-hidden',\n lockClass: 'swiper-button-lock',\n navigationDisabledClass: 'swiper-navigation-disabled'\n }\n });\n swiper.navigation = {\n nextEl: null,\n $nextEl: null,\n prevEl: null,\n $prevEl: null\n };\n\n function getEl(el) {\n let $el;\n\n if (el) {\n $el = $(el);\n\n if (swiper.params.uniqueNavElements && typeof el === 'string' && $el.length > 1 && swiper.$el.find(el).length === 1) {\n $el = swiper.$el.find(el);\n }\n }\n\n return $el;\n }\n\n function toggleEl($el, disabled) {\n const params = swiper.params.navigation;\n\n if ($el && $el.length > 0) {\n $el[disabled ? 'addClass' : 'removeClass'](params.disabledClass);\n if ($el[0] && $el[0].tagName === 'BUTTON') $el[0].disabled = disabled;\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n }\n }\n\n function update() {\n // Update Navigation Buttons\n if (swiper.params.loop) return;\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n toggleEl($prevEl, swiper.isBeginning && !swiper.params.rewind);\n toggleEl($nextEl, swiper.isEnd && !swiper.params.rewind);\n }\n\n function onPrevClick(e) {\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slidePrev();\n emit('navigationPrev');\n }\n\n function onNextClick(e) {\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slideNext();\n emit('navigationNext');\n }\n\n function init() {\n const params = swiper.params.navigation;\n swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {\n nextEl: 'swiper-button-next',\n prevEl: 'swiper-button-prev'\n });\n if (!(params.nextEl || params.prevEl)) return;\n const $nextEl = getEl(params.nextEl);\n const $prevEl = getEl(params.prevEl);\n\n if ($nextEl && $nextEl.length > 0) {\n $nextEl.on('click', onNextClick);\n }\n\n if ($prevEl && $prevEl.length > 0) {\n $prevEl.on('click', onPrevClick);\n }\n\n Object.assign(swiper.navigation, {\n $nextEl,\n nextEl: $nextEl && $nextEl[0],\n $prevEl,\n prevEl: $prevEl && $prevEl[0]\n });\n\n if (!swiper.enabled) {\n if ($nextEl) $nextEl.addClass(params.lockClass);\n if ($prevEl) $prevEl.addClass(params.lockClass);\n }\n }\n\n function destroy() {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($nextEl && $nextEl.length) {\n $nextEl.off('click', onNextClick);\n $nextEl.removeClass(swiper.params.navigation.disabledClass);\n }\n\n if ($prevEl && $prevEl.length) {\n $prevEl.off('click', onPrevClick);\n $prevEl.removeClass(swiper.params.navigation.disabledClass);\n }\n }\n\n on('init', () => {\n if (swiper.params.navigation.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n update();\n }\n });\n on('toEdge fromEdge lock unlock', () => {\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($nextEl) {\n $nextEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n }\n\n if ($prevEl) {\n $prevEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n }\n });\n on('click', (_s, e) => {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n const targetEl = e.target;\n\n if (swiper.params.navigation.hideOnClick && !$(targetEl).is($prevEl) && !$(targetEl).is($nextEl)) {\n if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\n let isHidden;\n\n if ($nextEl) {\n isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);\n } else if ($prevEl) {\n isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);\n }\n\n if (isHidden === true) {\n emit('navigationShow');\n } else {\n emit('navigationHide');\n }\n\n if ($nextEl) {\n $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n\n if ($prevEl) {\n $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n }\n });\n\n const enable = () => {\n swiper.$el.removeClass(swiper.params.navigation.navigationDisabledClass);\n init();\n update();\n };\n\n const disable = () => {\n swiper.$el.addClass(swiper.params.navigation.navigationDisabledClass);\n destroy();\n };\n\n Object.assign(swiper.navigation, {\n enable,\n disable,\n update,\n init,\n destroy\n });\n}","export default function classesToSelector(classes = '') {\n return `.${classes.trim().replace(/([\\.:!\\/])/g, '\\\\$1') // eslint-disable-line\n .replace(/ /g, '.')}`;\n}","import $ from '../../shared/dom.js';\nimport classesToSelector from '../../shared/classes-to-selector.js';\nimport createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nexport default function Pagination({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const pfx = 'swiper-pagination';\n extendParams({\n pagination: {\n el: null,\n bulletElement: 'span',\n clickable: false,\n hideOnClick: false,\n renderBullet: null,\n renderProgressbar: null,\n renderFraction: null,\n renderCustom: null,\n progressbarOpposite: false,\n type: 'bullets',\n // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n formatFractionCurrent: number => number,\n formatFractionTotal: number => number,\n bulletClass: `${pfx}-bullet`,\n bulletActiveClass: `${pfx}-bullet-active`,\n modifierClass: `${pfx}-`,\n currentClass: `${pfx}-current`,\n totalClass: `${pfx}-total`,\n hiddenClass: `${pfx}-hidden`,\n progressbarFillClass: `${pfx}-progressbar-fill`,\n progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n clickableClass: `${pfx}-clickable`,\n lockClass: `${pfx}-lock`,\n horizontalClass: `${pfx}-horizontal`,\n verticalClass: `${pfx}-vertical`,\n paginationDisabledClass: `${pfx}-disabled`\n }\n });\n swiper.pagination = {\n el: null,\n $el: null,\n bullets: []\n };\n let bulletSize;\n let dynamicBulletIndex = 0;\n\n function isPaginationDisabled() {\n return !swiper.params.pagination.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0;\n }\n\n function setSideBullets($bulletEl, position) {\n const {\n bulletActiveClass\n } = swiper.params.pagination;\n $bulletEl[position]().addClass(`${bulletActiveClass}-${position}`)[position]().addClass(`${bulletActiveClass}-${position}-${position}`);\n }\n\n function update() {\n // Render || Update Pagination bullets/items\n const rtl = swiper.rtl;\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const $el = swiper.pagination.$el; // Current/Total\n\n let current;\n const total = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n if (swiper.params.loop) {\n current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);\n\n if (current > slidesLength - 1 - swiper.loopedSlides * 2) {\n current -= slidesLength - swiper.loopedSlides * 2;\n }\n\n if (current > total - 1) current -= total;\n if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current;\n } else if (typeof swiper.snapIndex !== 'undefined') {\n current = swiper.snapIndex;\n } else {\n current = swiper.activeIndex || 0;\n } // Types\n\n\n if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n const bullets = swiper.pagination.bullets;\n let firstIndex;\n let lastIndex;\n let midIndex;\n\n if (params.dynamicBullets) {\n bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n $el.css(swiper.isHorizontal() ? 'width' : 'height', `${bulletSize * (params.dynamicMainBullets + 4)}px`);\n\n if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n dynamicBulletIndex += current - (swiper.previousIndex - swiper.loopedSlides || 0);\n\n if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (dynamicBulletIndex < 0) {\n dynamicBulletIndex = 0;\n }\n }\n\n firstIndex = Math.max(current - dynamicBulletIndex, 0);\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n\n bullets.removeClass(['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`).join(' '));\n\n if ($el.length > 1) {\n bullets.each(bullet => {\n const $bullet = $(bullet);\n const bulletIndex = $bullet.index();\n\n if (bulletIndex === current) {\n $bullet.addClass(params.bulletActiveClass);\n }\n\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n $bullet.addClass(`${params.bulletActiveClass}-main`);\n }\n\n if (bulletIndex === firstIndex) {\n setSideBullets($bullet, 'prev');\n }\n\n if (bulletIndex === lastIndex) {\n setSideBullets($bullet, 'next');\n }\n }\n });\n } else {\n const $bullet = bullets.eq(current);\n const bulletIndex = $bullet.index();\n $bullet.addClass(params.bulletActiveClass);\n\n if (params.dynamicBullets) {\n const $firstDisplayedBullet = bullets.eq(firstIndex);\n const $lastDisplayedBullet = bullets.eq(lastIndex);\n\n for (let i = firstIndex; i <= lastIndex; i += 1) {\n bullets.eq(i).addClass(`${params.bulletActiveClass}-main`);\n }\n\n if (swiper.params.loop) {\n if (bulletIndex >= bullets.length) {\n for (let i = params.dynamicMainBullets; i >= 0; i -= 1) {\n bullets.eq(bullets.length - i).addClass(`${params.bulletActiveClass}-main`);\n }\n\n bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(`${params.bulletActiveClass}-prev`);\n } else {\n setSideBullets($firstDisplayedBullet, 'prev');\n setSideBullets($lastDisplayedBullet, 'next');\n }\n } else {\n setSideBullets($firstDisplayedBullet, 'prev');\n setSideBullets($lastDisplayedBullet, 'next');\n }\n }\n }\n\n if (params.dynamicBullets) {\n const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;\n const offsetProp = rtl ? 'right' : 'left';\n bullets.css(swiper.isHorizontal() ? offsetProp : 'top', `${bulletsOffset}px`);\n }\n }\n\n if (params.type === 'fraction') {\n $el.find(classesToSelector(params.currentClass)).text(params.formatFractionCurrent(current + 1));\n $el.find(classesToSelector(params.totalClass)).text(params.formatFractionTotal(total));\n }\n\n if (params.type === 'progressbar') {\n let progressbarDirection;\n\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n\n const scale = (current + 1) / total;\n let scaleX = 1;\n let scaleY = 1;\n\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n\n $el.find(classesToSelector(params.progressbarFillClass)).transform(`translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`).transition(swiper.params.speed);\n }\n\n if (params.type === 'custom' && params.renderCustom) {\n $el.html(params.renderCustom(swiper, current + 1, total));\n emit('paginationRender', $el[0]);\n } else {\n emit('paginationUpdate', $el[0]);\n }\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n }\n\n function render() {\n // Render Container\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const $el = swiper.pagination.$el;\n let paginationHTML = '';\n\n if (params.type === 'bullets') {\n let numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && !swiper.params.loop && numberOfBullets > slidesLength) {\n numberOfBullets = slidesLength;\n }\n\n for (let i = 0; i < numberOfBullets; i += 1) {\n if (params.renderBullet) {\n paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n } else {\n paginationHTML += `<${params.bulletElement} class=\"${params.bulletClass}\">`;\n }\n }\n\n $el.html(paginationHTML);\n swiper.pagination.bullets = $el.find(classesToSelector(params.bulletClass));\n }\n\n if (params.type === 'fraction') {\n if (params.renderFraction) {\n paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n } else {\n paginationHTML = `` + ' / ' + ``;\n }\n\n $el.html(paginationHTML);\n }\n\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = ``;\n }\n\n $el.html(paginationHTML);\n }\n\n if (params.type !== 'custom') {\n emit('paginationRender', swiper.pagination.$el[0]);\n }\n }\n\n function init() {\n swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, {\n el: 'swiper-pagination'\n });\n const params = swiper.params.pagination;\n if (!params.el) return;\n let $el = $(params.el);\n if ($el.length === 0) return;\n\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1) {\n $el = swiper.$el.find(params.el); // check if it belongs to another nested Swiper\n\n if ($el.length > 1) {\n $el = $el.filter(el => {\n if ($(el).parents('.swiper')[0] !== swiper.el) return false;\n return true;\n });\n }\n }\n\n if (params.type === 'bullets' && params.clickable) {\n $el.addClass(params.clickableClass);\n }\n\n $el.addClass(params.modifierClass + params.type);\n $el.addClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n\n if (params.type === 'bullets' && params.dynamicBullets) {\n $el.addClass(`${params.modifierClass}${params.type}-dynamic`);\n dynamicBulletIndex = 0;\n\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n $el.addClass(params.progressbarOppositeClass);\n }\n\n if (params.clickable) {\n $el.on('click', classesToSelector(params.bulletClass), function onClick(e) {\n e.preventDefault();\n let index = $(this).index() * swiper.params.slidesPerGroup;\n if (swiper.params.loop) index += swiper.loopedSlides;\n swiper.slideTo(index);\n });\n }\n\n Object.assign(swiper.pagination, {\n $el,\n el: $el[0]\n });\n\n if (!swiper.enabled) {\n $el.addClass(params.lockClass);\n }\n }\n\n function destroy() {\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const $el = swiper.pagination.$el;\n $el.removeClass(params.hiddenClass);\n $el.removeClass(params.modifierClass + params.type);\n $el.removeClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (swiper.pagination.bullets && swiper.pagination.bullets.removeClass) swiper.pagination.bullets.removeClass(params.bulletActiveClass);\n\n if (params.clickable) {\n $el.off('click', classesToSelector(params.bulletClass));\n }\n }\n\n on('init', () => {\n if (swiper.params.pagination.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n render();\n update();\n }\n });\n on('activeIndexChange', () => {\n if (swiper.params.loop) {\n update();\n } else if (typeof swiper.snapIndex === 'undefined') {\n update();\n }\n });\n on('snapIndexChange', () => {\n if (!swiper.params.loop) {\n update();\n }\n });\n on('slidesLengthChange', () => {\n if (swiper.params.loop) {\n render();\n update();\n }\n });\n on('snapGridLengthChange', () => {\n if (!swiper.params.loop) {\n render();\n update();\n }\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n const {\n $el\n } = swiper.pagination;\n\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.pagination.lockClass);\n }\n });\n on('lock unlock', () => {\n update();\n });\n on('click', (_s, e) => {\n const targetEl = e.target;\n const {\n $el\n } = swiper.pagination;\n\n if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && $el && $el.length > 0 && !$(targetEl).hasClass(swiper.params.pagination.bulletClass)) {\n if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;\n const isHidden = $el.hasClass(swiper.params.pagination.hiddenClass);\n\n if (isHidden === true) {\n emit('paginationShow');\n } else {\n emit('paginationHide');\n }\n\n $el.toggleClass(swiper.params.pagination.hiddenClass);\n }\n });\n\n const enable = () => {\n swiper.$el.removeClass(swiper.params.pagination.paginationDisabledClass);\n\n if (swiper.pagination.$el) {\n swiper.pagination.$el.removeClass(swiper.params.pagination.paginationDisabledClass);\n }\n\n init();\n render();\n update();\n };\n\n const disable = () => {\n swiper.$el.addClass(swiper.params.pagination.paginationDisabledClass);\n\n if (swiper.pagination.$el) {\n swiper.pagination.$el.addClass(swiper.params.pagination.paginationDisabledClass);\n }\n\n destroy();\n };\n\n Object.assign(swiper.pagination, {\n enable,\n disable,\n render,\n update,\n init,\n destroy\n });\n}","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { nextTick } from '../../shared/utils.js';\nimport createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nexport default function Scrollbar({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const document = getDocument();\n let isTouched = false;\n let timeout = null;\n let dragTimeout = null;\n let dragStartPos;\n let dragSize;\n let trackSize;\n let divider;\n extendParams({\n scrollbar: {\n el: null,\n dragSize: 'auto',\n hide: false,\n draggable: false,\n snapOnRelease: true,\n lockClass: 'swiper-scrollbar-lock',\n dragClass: 'swiper-scrollbar-drag',\n scrollbarDisabledClass: 'swiper-scrollbar-disabled',\n horizontalClass: `swiper-scrollbar-horizontal`,\n verticalClass: `swiper-scrollbar-vertical`\n }\n });\n swiper.scrollbar = {\n el: null,\n dragEl: null,\n $el: null,\n $dragEl: null\n };\n\n function setTranslate() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar,\n rtlTranslate: rtl,\n progress\n } = swiper;\n const {\n $dragEl,\n $el\n } = scrollbar;\n const params = swiper.params.scrollbar;\n let newSize = dragSize;\n let newPos = (trackSize - dragSize) * progress;\n\n if (rtl) {\n newPos = -newPos;\n\n if (newPos > 0) {\n newSize = dragSize - newPos;\n newPos = 0;\n } else if (-newPos + dragSize > trackSize) {\n newSize = trackSize + newPos;\n }\n } else if (newPos < 0) {\n newSize = dragSize + newPos;\n newPos = 0;\n } else if (newPos + dragSize > trackSize) {\n newSize = trackSize - newPos;\n }\n\n if (swiper.isHorizontal()) {\n $dragEl.transform(`translate3d(${newPos}px, 0, 0)`);\n $dragEl[0].style.width = `${newSize}px`;\n } else {\n $dragEl.transform(`translate3d(0px, ${newPos}px, 0)`);\n $dragEl[0].style.height = `${newSize}px`;\n }\n\n if (params.hide) {\n clearTimeout(timeout);\n $el[0].style.opacity = 1;\n timeout = setTimeout(() => {\n $el[0].style.opacity = 0;\n $el.transition(400);\n }, 1000);\n }\n }\n\n function setTransition(duration) {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n swiper.scrollbar.$dragEl.transition(duration);\n }\n\n function updateSize() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar\n } = swiper;\n const {\n $dragEl,\n $el\n } = scrollbar;\n $dragEl[0].style.width = '';\n $dragEl[0].style.height = '';\n trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;\n divider = swiper.size / (swiper.virtualSize + swiper.params.slidesOffsetBefore - (swiper.params.centeredSlides ? swiper.snapGrid[0] : 0));\n\n if (swiper.params.scrollbar.dragSize === 'auto') {\n dragSize = trackSize * divider;\n } else {\n dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n }\n\n if (swiper.isHorizontal()) {\n $dragEl[0].style.width = `${dragSize}px`;\n } else {\n $dragEl[0].style.height = `${dragSize}px`;\n }\n\n if (divider >= 1) {\n $el[0].style.display = 'none';\n } else {\n $el[0].style.display = '';\n }\n\n if (swiper.params.scrollbar.hide) {\n $el[0].style.opacity = 0;\n }\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n scrollbar.$el[swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);\n }\n }\n\n function getPointerPosition(e) {\n if (swiper.isHorizontal()) {\n return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientX : e.clientX;\n }\n\n return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientY : e.clientY;\n }\n\n function setDragPosition(e) {\n const {\n scrollbar,\n rtlTranslate: rtl\n } = swiper;\n const {\n $el\n } = scrollbar;\n let positionRatio;\n positionRatio = (getPointerPosition(e) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);\n positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n\n if (rtl) {\n positionRatio = 1 - positionRatio;\n }\n\n const position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;\n swiper.updateProgress(position);\n swiper.setTranslate(position);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n function onDragStart(e) {\n const params = swiper.params.scrollbar;\n const {\n scrollbar,\n $wrapperEl\n } = swiper;\n const {\n $el,\n $dragEl\n } = scrollbar;\n isTouched = true;\n dragStartPos = e.target === $dragEl[0] || e.target === $dragEl ? getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;\n e.preventDefault();\n e.stopPropagation();\n $wrapperEl.transition(100);\n $dragEl.transition(100);\n setDragPosition(e);\n clearTimeout(dragTimeout);\n $el.transition(0);\n\n if (params.hide) {\n $el.css('opacity', 1);\n }\n\n if (swiper.params.cssMode) {\n swiper.$wrapperEl.css('scroll-snap-type', 'none');\n }\n\n emit('scrollbarDragStart', e);\n }\n\n function onDragMove(e) {\n const {\n scrollbar,\n $wrapperEl\n } = swiper;\n const {\n $el,\n $dragEl\n } = scrollbar;\n if (!isTouched) return;\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n setDragPosition(e);\n $wrapperEl.transition(0);\n $el.transition(0);\n $dragEl.transition(0);\n emit('scrollbarDragMove', e);\n }\n\n function onDragEnd(e) {\n const params = swiper.params.scrollbar;\n const {\n scrollbar,\n $wrapperEl\n } = swiper;\n const {\n $el\n } = scrollbar;\n if (!isTouched) return;\n isTouched = false;\n\n if (swiper.params.cssMode) {\n swiper.$wrapperEl.css('scroll-snap-type', '');\n $wrapperEl.transition('');\n }\n\n if (params.hide) {\n clearTimeout(dragTimeout);\n dragTimeout = nextTick(() => {\n $el.css('opacity', 0);\n $el.transition(400);\n }, 1000);\n }\n\n emit('scrollbarDragEnd', e);\n\n if (params.snapOnRelease) {\n swiper.slideToClosest();\n }\n }\n\n function events(method) {\n const {\n scrollbar,\n touchEventsTouch,\n touchEventsDesktop,\n params,\n support\n } = swiper;\n const $el = scrollbar.$el;\n if (!$el) return;\n const target = $el[0];\n const activeListener = support.passiveListener && params.passiveListeners ? {\n passive: false,\n capture: false\n } : false;\n const passiveListener = support.passiveListener && params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n if (!target) return;\n const eventMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n\n if (!support.touch) {\n target[eventMethod](touchEventsDesktop.start, onDragStart, activeListener);\n document[eventMethod](touchEventsDesktop.move, onDragMove, activeListener);\n document[eventMethod](touchEventsDesktop.end, onDragEnd, passiveListener);\n } else {\n target[eventMethod](touchEventsTouch.start, onDragStart, activeListener);\n target[eventMethod](touchEventsTouch.move, onDragMove, activeListener);\n target[eventMethod](touchEventsTouch.end, onDragEnd, passiveListener);\n }\n }\n\n function enableDraggable() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n events('on');\n }\n\n function disableDraggable() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n events('off');\n }\n\n function init() {\n const {\n scrollbar,\n $el: $swiperEl\n } = swiper;\n swiper.params.scrollbar = createElementIfNotDefined(swiper, swiper.originalParams.scrollbar, swiper.params.scrollbar, {\n el: 'swiper-scrollbar'\n });\n const params = swiper.params.scrollbar;\n if (!params.el) return;\n let $el = $(params.el);\n\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) {\n $el = $swiperEl.find(params.el);\n }\n\n $el.addClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n let $dragEl = $el.find(`.${swiper.params.scrollbar.dragClass}`);\n\n if ($dragEl.length === 0) {\n $dragEl = $(`
`);\n $el.append($dragEl);\n }\n\n Object.assign(scrollbar, {\n $el,\n el: $el[0],\n $dragEl,\n dragEl: $dragEl[0]\n });\n\n if (params.draggable) {\n enableDraggable();\n }\n\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass);\n }\n }\n\n function destroy() {\n const params = swiper.params.scrollbar;\n const $el = swiper.scrollbar.$el;\n\n if ($el) {\n $el.removeClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n }\n\n disableDraggable();\n }\n\n on('init', () => {\n if (swiper.params.scrollbar.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n updateSize();\n setTranslate();\n }\n });\n on('update resize observerUpdate lock unlock', () => {\n updateSize();\n });\n on('setTranslate', () => {\n setTranslate();\n });\n on('setTransition', (_s, duration) => {\n setTransition(duration);\n });\n on('enable disable', () => {\n const {\n $el\n } = swiper.scrollbar;\n\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass);\n }\n });\n on('destroy', () => {\n destroy();\n });\n\n const enable = () => {\n swiper.$el.removeClass(swiper.params.scrollbar.scrollbarDisabledClass);\n\n if (swiper.scrollbar.$el) {\n swiper.scrollbar.$el.removeClass(swiper.params.scrollbar.scrollbarDisabledClass);\n }\n\n init();\n updateSize();\n setTranslate();\n };\n\n const disable = () => {\n swiper.$el.addClass(swiper.params.scrollbar.scrollbarDisabledClass);\n\n if (swiper.scrollbar.$el) {\n swiper.scrollbar.$el.addClass(swiper.params.scrollbar.scrollbarDisabledClass);\n }\n\n destroy();\n };\n\n Object.assign(swiper.scrollbar, {\n enable,\n disable,\n updateSize,\n setTranslate,\n init,\n destroy\n });\n}","/* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\nimport { nextTick } from '../../shared/utils.js';\nexport default function Controller({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n controller: {\n control: undefined,\n inverse: false,\n by: 'slide' // or 'container'\n\n }\n });\n swiper.controller = {\n control: undefined\n };\n\n function LinearSpline(x, y) {\n const binarySearch = function search() {\n let maxIndex;\n let minIndex;\n let guess;\n return (array, val) => {\n minIndex = -1;\n maxIndex = array.length;\n\n while (maxIndex - minIndex > 1) {\n guess = maxIndex + minIndex >> 1;\n\n if (array[guess] <= val) {\n minIndex = guess;\n } else {\n maxIndex = guess;\n }\n }\n\n return maxIndex;\n };\n }();\n\n this.x = x;\n this.y = y;\n this.lastIndex = x.length - 1; // Given an x value (x2), return the expected y2 value:\n // (x1,y1) is the known point before given value,\n // (x3,y3) is the known point after given value.\n\n let i1;\n let i3;\n\n this.interpolate = function interpolate(x2) {\n if (!x2) return 0; // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n\n i3 = binarySearch(this.x, x2);\n i1 = i3 - 1; // We have our indexes i1 & i3, so we can calculate already:\n // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n\n return (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1];\n };\n\n return this;\n } // xxx: for now i will just save one spline function to to\n\n\n function getInterpolateFunction(c) {\n if (!swiper.controller.spline) {\n swiper.controller.spline = swiper.params.loop ? new LinearSpline(swiper.slidesGrid, c.slidesGrid) : new LinearSpline(swiper.snapGrid, c.snapGrid);\n }\n }\n\n function setTranslate(_t, byController) {\n const controlled = swiper.controller.control;\n let multiplier;\n let controlledTranslate;\n const Swiper = swiper.constructor;\n\n function setControlledTranslate(c) {\n // this will create an Interpolate function based on the snapGrids\n // x is the Grid of the scrolled scroller and y will be the controlled scroller\n // it makes sense to create this only once and recall it for the interpolation\n // the function does a lot of value caching for performance\n const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\n\n if (swiper.params.controller.by === 'slide') {\n getInterpolateFunction(c); // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n // but it did not work out\n\n controlledTranslate = -swiper.controller.spline.interpolate(-translate);\n }\n\n if (!controlledTranslate || swiper.params.controller.by === 'container') {\n multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());\n controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate();\n }\n\n if (swiper.params.controller.inverse) {\n controlledTranslate = c.maxTranslate() - controlledTranslate;\n }\n\n c.updateProgress(controlledTranslate);\n c.setTranslate(controlledTranslate, swiper);\n c.updateActiveIndex();\n c.updateSlidesClasses();\n }\n\n if (Array.isArray(controlled)) {\n for (let i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTranslate(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTranslate(controlled);\n }\n }\n\n function setTransition(duration, byController) {\n const Swiper = swiper.constructor;\n const controlled = swiper.controller.control;\n let i;\n\n function setControlledTransition(c) {\n c.setTransition(duration, swiper);\n\n if (duration !== 0) {\n c.transitionStart();\n\n if (c.params.autoHeight) {\n nextTick(() => {\n c.updateAutoHeight();\n });\n }\n\n c.$wrapperEl.transitionEnd(() => {\n if (!controlled) return;\n\n if (c.params.loop && swiper.params.controller.by === 'slide') {\n c.loopFix();\n }\n\n c.transitionEnd();\n });\n }\n }\n\n if (Array.isArray(controlled)) {\n for (i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTransition(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTransition(controlled);\n }\n }\n\n function removeSpline() {\n if (!swiper.controller.control) return;\n\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n }\n\n on('beforeInit', () => {\n swiper.controller.control = swiper.params.controller.control;\n });\n on('update', () => {\n removeSpline();\n });\n on('resize', () => {\n removeSpline();\n });\n on('observerUpdate', () => {\n removeSpline();\n });\n on('setTranslate', (_s, translate, byController) => {\n if (!swiper.controller.control) return;\n swiper.controller.setTranslate(translate, byController);\n });\n on('setTransition', (_s, duration, byController) => {\n if (!swiper.controller.control) return;\n swiper.controller.setTransition(duration, byController);\n });\n Object.assign(swiper.controller, {\n setTranslate,\n setTransition\n });\n}","import classesToSelector from '../../shared/classes-to-selector.js';\nimport $ from '../../shared/dom.js';\nexport default function A11y({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n a11y: {\n enabled: true,\n notificationClass: 'swiper-notification',\n prevSlideMessage: 'Previous slide',\n nextSlideMessage: 'Next slide',\n firstSlideMessage: 'This is the first slide',\n lastSlideMessage: 'This is the last slide',\n paginationBulletMessage: 'Go to slide {{index}}',\n slideLabelMessage: '{{index}} / {{slidesLength}}',\n containerMessage: null,\n containerRoleDescriptionMessage: null,\n itemRoleDescriptionMessage: null,\n slideRole: 'group',\n id: null\n }\n });\n swiper.a11y = {\n clicked: false\n };\n let liveRegion = null;\n\n function notify(message) {\n const notification = liveRegion;\n if (notification.length === 0) return;\n notification.html('');\n notification.html(message);\n }\n\n function getRandomNumber(size = 16) {\n const randomChar = () => Math.round(16 * Math.random()).toString(16);\n\n return 'x'.repeat(size).replace(/x/g, randomChar);\n }\n\n function makeElFocusable($el) {\n $el.attr('tabIndex', '0');\n }\n\n function makeElNotFocusable($el) {\n $el.attr('tabIndex', '-1');\n }\n\n function addElRole($el, role) {\n $el.attr('role', role);\n }\n\n function addElRoleDescription($el, description) {\n $el.attr('aria-roledescription', description);\n }\n\n function addElControls($el, controls) {\n $el.attr('aria-controls', controls);\n }\n\n function addElLabel($el, label) {\n $el.attr('aria-label', label);\n }\n\n function addElId($el, id) {\n $el.attr('id', id);\n }\n\n function addElLive($el, live) {\n $el.attr('aria-live', live);\n }\n\n function disableEl($el) {\n $el.attr('aria-disabled', true);\n }\n\n function enableEl($el) {\n $el.attr('aria-disabled', false);\n }\n\n function onEnterOrSpaceKey(e) {\n if (e.keyCode !== 13 && e.keyCode !== 32) return;\n const params = swiper.params.a11y;\n const $targetEl = $(e.target);\n\n if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {\n if (!(swiper.isEnd && !swiper.params.loop)) {\n swiper.slideNext();\n }\n\n if (swiper.isEnd) {\n notify(params.lastSlideMessage);\n } else {\n notify(params.nextSlideMessage);\n }\n }\n\n if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {\n if (!(swiper.isBeginning && !swiper.params.loop)) {\n swiper.slidePrev();\n }\n\n if (swiper.isBeginning) {\n notify(params.firstSlideMessage);\n } else {\n notify(params.prevSlideMessage);\n }\n }\n\n if (swiper.pagination && $targetEl.is(classesToSelector(swiper.params.pagination.bulletClass))) {\n $targetEl[0].click();\n }\n }\n\n function updateNavigation() {\n if (swiper.params.loop || swiper.params.rewind || !swiper.navigation) return;\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($prevEl && $prevEl.length > 0) {\n if (swiper.isBeginning) {\n disableEl($prevEl);\n makeElNotFocusable($prevEl);\n } else {\n enableEl($prevEl);\n makeElFocusable($prevEl);\n }\n }\n\n if ($nextEl && $nextEl.length > 0) {\n if (swiper.isEnd) {\n disableEl($nextEl);\n makeElNotFocusable($nextEl);\n } else {\n enableEl($nextEl);\n makeElFocusable($nextEl);\n }\n }\n }\n\n function hasPagination() {\n return swiper.pagination && swiper.pagination.bullets && swiper.pagination.bullets.length;\n }\n\n function hasClickablePagination() {\n return hasPagination() && swiper.params.pagination.clickable;\n }\n\n function updatePagination() {\n const params = swiper.params.a11y;\n if (!hasPagination()) return;\n swiper.pagination.bullets.each(bulletEl => {\n const $bulletEl = $(bulletEl);\n\n if (swiper.params.pagination.clickable) {\n makeElFocusable($bulletEl);\n\n if (!swiper.params.pagination.renderBullet) {\n addElRole($bulletEl, 'button');\n addElLabel($bulletEl, params.paginationBulletMessage.replace(/\\{\\{index\\}\\}/, $bulletEl.index() + 1));\n }\n }\n\n if ($bulletEl.is(`.${swiper.params.pagination.bulletActiveClass}`)) {\n $bulletEl.attr('aria-current', 'true');\n } else {\n $bulletEl.removeAttr('aria-current');\n }\n });\n }\n\n const initNavEl = ($el, wrapperId, message) => {\n makeElFocusable($el);\n\n if ($el[0].tagName !== 'BUTTON') {\n addElRole($el, 'button');\n $el.on('keydown', onEnterOrSpaceKey);\n }\n\n addElLabel($el, message);\n addElControls($el, wrapperId);\n };\n\n const handlePointerDown = () => {\n swiper.a11y.clicked = true;\n };\n\n const handlePointerUp = () => {\n swiper.a11y.clicked = false;\n };\n\n const handleFocus = e => {\n if (swiper.a11y.clicked) return;\n const slideEl = e.target.closest(`.${swiper.params.slideClass}`);\n if (!slideEl || !swiper.slides.includes(slideEl)) return;\n const isActive = swiper.slides.indexOf(slideEl) === swiper.activeIndex;\n const isVisible = swiper.params.watchSlidesProgress && swiper.visibleSlides && swiper.visibleSlides.includes(slideEl);\n if (isActive || isVisible) return;\n\n if (swiper.isHorizontal()) {\n swiper.el.scrollLeft = 0;\n } else {\n swiper.el.scrollTop = 0;\n }\n\n swiper.slideTo(swiper.slides.indexOf(slideEl), 0);\n };\n\n const initSlides = () => {\n const params = swiper.params.a11y;\n\n if (params.itemRoleDescriptionMessage) {\n addElRoleDescription($(swiper.slides), params.itemRoleDescriptionMessage);\n }\n\n if (params.slideRole) {\n addElRole($(swiper.slides), params.slideRole);\n }\n\n const slidesLength = swiper.params.loop ? swiper.slides.filter(el => !el.classList.contains(swiper.params.slideDuplicateClass)).length : swiper.slides.length;\n\n if (params.slideLabelMessage) {\n swiper.slides.each((slideEl, index) => {\n const $slideEl = $(slideEl);\n const slideIndex = swiper.params.loop ? parseInt($slideEl.attr('data-swiper-slide-index'), 10) : index;\n const ariaLabelMessage = params.slideLabelMessage.replace(/\\{\\{index\\}\\}/, slideIndex + 1).replace(/\\{\\{slidesLength\\}\\}/, slidesLength);\n addElLabel($slideEl, ariaLabelMessage);\n });\n }\n };\n\n const init = () => {\n const params = swiper.params.a11y;\n swiper.$el.append(liveRegion); // Container\n\n const $containerEl = swiper.$el;\n\n if (params.containerRoleDescriptionMessage) {\n addElRoleDescription($containerEl, params.containerRoleDescriptionMessage);\n }\n\n if (params.containerMessage) {\n addElLabel($containerEl, params.containerMessage);\n } // Wrapper\n\n\n const $wrapperEl = swiper.$wrapperEl;\n const wrapperId = params.id || $wrapperEl.attr('id') || `swiper-wrapper-${getRandomNumber(16)}`;\n const live = swiper.params.autoplay && swiper.params.autoplay.enabled ? 'off' : 'polite';\n addElId($wrapperEl, wrapperId);\n addElLive($wrapperEl, live); // Slide\n\n initSlides(); // Navigation\n\n let $nextEl;\n let $prevEl;\n\n if (swiper.navigation && swiper.navigation.$nextEl) {\n $nextEl = swiper.navigation.$nextEl;\n }\n\n if (swiper.navigation && swiper.navigation.$prevEl) {\n $prevEl = swiper.navigation.$prevEl;\n }\n\n if ($nextEl && $nextEl.length) {\n initNavEl($nextEl, wrapperId, params.nextSlideMessage);\n }\n\n if ($prevEl && $prevEl.length) {\n initNavEl($prevEl, wrapperId, params.prevSlideMessage);\n } // Pagination\n\n\n if (hasClickablePagination()) {\n swiper.pagination.$el.on('keydown', classesToSelector(swiper.params.pagination.bulletClass), onEnterOrSpaceKey);\n } // Tab focus\n\n\n swiper.$el.on('focus', handleFocus, true);\n swiper.$el.on('pointerdown', handlePointerDown, true);\n swiper.$el.on('pointerup', handlePointerUp, true);\n };\n\n function destroy() {\n if (liveRegion && liveRegion.length > 0) liveRegion.remove();\n let $nextEl;\n let $prevEl;\n\n if (swiper.navigation && swiper.navigation.$nextEl) {\n $nextEl = swiper.navigation.$nextEl;\n }\n\n if (swiper.navigation && swiper.navigation.$prevEl) {\n $prevEl = swiper.navigation.$prevEl;\n }\n\n if ($nextEl) {\n $nextEl.off('keydown', onEnterOrSpaceKey);\n }\n\n if ($prevEl) {\n $prevEl.off('keydown', onEnterOrSpaceKey);\n } // Pagination\n\n\n if (hasClickablePagination()) {\n swiper.pagination.$el.off('keydown', classesToSelector(swiper.params.pagination.bulletClass), onEnterOrSpaceKey);\n } // Tab focus\n\n\n swiper.$el.off('focus', handleFocus, true);\n swiper.$el.off('pointerdown', handlePointerDown, true);\n swiper.$el.off('pointerup', handlePointerUp, true);\n }\n\n on('beforeInit', () => {\n liveRegion = $(``);\n });\n on('afterInit', () => {\n if (!swiper.params.a11y.enabled) return;\n init();\n });\n on('slidesLengthChange snapGridLengthChange slidesGridLengthChange', () => {\n if (!swiper.params.a11y.enabled) return;\n initSlides();\n });\n on('fromEdge toEdge afterInit lock unlock', () => {\n if (!swiper.params.a11y.enabled) return;\n updateNavigation();\n });\n on('paginationUpdate', () => {\n if (!swiper.params.a11y.enabled) return;\n updatePagination();\n });\n on('destroy', () => {\n if (!swiper.params.a11y.enabled) return;\n destroy();\n });\n}","function isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\n\nfunction extend(target, src) {\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n Object.keys(src).filter(key => noExtend.indexOf(key) < 0).forEach(key => {\n if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) {\n if (src[key].__swiper__) target[key] = src[key];else extend(target[key], src[key]);\n } else {\n target[key] = src[key];\n }\n });\n}\n\nfunction needsNavigation(params = {}) {\n return params.navigation && typeof params.navigation.nextEl === 'undefined' && typeof params.navigation.prevEl === 'undefined';\n}\n\nfunction needsPagination(params = {}) {\n return params.pagination && typeof params.pagination.el === 'undefined';\n}\n\nfunction needsScrollbar(params = {}) {\n return params.scrollbar && typeof params.scrollbar.el === 'undefined';\n}\n\nfunction uniqueClasses(classNames = '') {\n const classes = classNames.split(' ').map(c => c.trim()).filter(c => !!c);\n const unique = [];\n classes.forEach(c => {\n if (unique.indexOf(c) < 0) unique.push(c);\n });\n return unique.join(' ');\n}\n\nexport { isObject, extend, needsNavigation, needsPagination, needsScrollbar, uniqueClasses };","/* underscore in name -> watch for changes */\nconst paramsList = ['modules', 'init', '_direction', 'touchEventsTarget', 'initialSlide', '_speed', 'cssMode', 'updateOnWindowResize', 'resizeObserver', 'nested', 'focusableElements', '_enabled', '_width', '_height', 'preventInteractionOnTransition', 'userAgent', 'url', '_edgeSwipeDetection', '_edgeSwipeThreshold', '_freeMode', '_autoHeight', 'setWrapperSize', 'virtualTranslate', '_effect', 'breakpoints', '_spaceBetween', '_slidesPerView', 'maxBackfaceHiddenSlides', '_grid', '_slidesPerGroup', '_slidesPerGroupSkip', '_slidesPerGroupAuto', '_centeredSlides', '_centeredSlidesBounds', '_slidesOffsetBefore', '_slidesOffsetAfter', 'normalizeSlideIndex', '_centerInsufficientSlides', '_watchOverflow', 'roundLengths', 'touchRatio', 'touchAngle', 'simulateTouch', '_shortSwipes', '_longSwipes', 'longSwipesRatio', 'longSwipesMs', '_followFinger', 'allowTouchMove', '_threshold', 'touchMoveStopPropagation', 'touchStartPreventDefault', 'touchStartForcePreventDefault', 'touchReleaseOnEdges', 'uniqueNavElements', '_resistance', '_resistanceRatio', '_watchSlidesProgress', '_grabCursor', 'preventClicks', 'preventClicksPropagation', '_slideToClickedSlide', '_preloadImages', 'updateOnImagesReady', '_loop', '_loopAdditionalSlides', '_loopedSlides', '_loopedSlidesLimit', '_loopFillGroupWithBlank', 'loopPreventsSlide', '_rewind', '_allowSlidePrev', '_allowSlideNext', '_swipeHandler', '_noSwiping', 'noSwipingClass', 'noSwipingSelector', 'passiveListeners', 'containerModifierClass', 'slideClass', 'slideBlankClass', 'slideActiveClass', 'slideDuplicateActiveClass', 'slideVisibleClass', 'slideDuplicateClass', 'slideNextClass', 'slideDuplicateNextClass', 'slidePrevClass', 'slideDuplicatePrevClass', 'wrapperClass', 'runCallbacksOnInit', 'observer', 'observeParents', 'observeSlideChildren', // modules\n'a11y', '_autoplay', '_controller', 'coverflowEffect', 'cubeEffect', 'fadeEffect', 'flipEffect', 'creativeEffect', 'cardsEffect', 'hashNavigation', 'history', 'keyboard', 'lazy', 'mousewheel', '_navigation', '_pagination', 'parallax', '_scrollbar', '_thumbs', 'virtual', 'zoom'];\nexport { paramsList };","import Swiper from 'swiper';\nexport const calcLoopedSlides = (slides, swiperParams) => {\n let slidesPerViewParams = swiperParams.slidesPerView;\n\n if (swiperParams.breakpoints) {\n const breakpoint = Swiper.prototype.getBreakpoint(swiperParams.breakpoints);\n const breakpointOnlyParams = breakpoint in swiperParams.breakpoints ? swiperParams.breakpoints[breakpoint] : undefined;\n\n if (breakpointOnlyParams && breakpointOnlyParams.slidesPerView) {\n slidesPerViewParams = breakpointOnlyParams.slidesPerView;\n }\n }\n\n let loopedSlides = Math.ceil(parseFloat(swiperParams.loopedSlides || slidesPerViewParams, 10));\n loopedSlides += swiperParams.loopAdditionalSlides;\n\n if (loopedSlides > slides.length && swiperParams.loopedSlidesLimit) {\n loopedSlides = slides.length;\n }\n\n return loopedSlides;\n};","import React from 'react';\n\nfunction isChildSwiperSlide(child) {\n return child.type && child.type.displayName && child.type.displayName.includes('SwiperSlide');\n}\n\nfunction processChildren(c) {\n const slides = [];\n React.Children.toArray(c).forEach(child => {\n if (isChildSwiperSlide(child)) {\n slides.push(child);\n } else if (child.props && child.props.children) {\n processChildren(child.props.children).forEach(slide => slides.push(slide));\n }\n });\n return slides;\n}\n\nfunction getChildren(c) {\n const slides = [];\n const slots = {\n 'container-start': [],\n 'container-end': [],\n 'wrapper-start': [],\n 'wrapper-end': []\n };\n React.Children.toArray(c).forEach(child => {\n if (isChildSwiperSlide(child)) {\n slides.push(child);\n } else if (child.props && child.props.slot && slots[child.props.slot]) {\n slots[child.props.slot].push(child);\n } else if (child.props && child.props.children) {\n const foundSlides = processChildren(child.props.children);\n\n if (foundSlides.length > 0) {\n foundSlides.forEach(slide => slides.push(slide));\n } else {\n slots['container-end'].push(child);\n }\n } else {\n slots['container-end'].push(child);\n }\n });\n return {\n slides,\n slots\n };\n}\n\nexport { getChildren };","import { isObject, extend } from './utils.js';\n\nfunction updateSwiper({\n swiper,\n slides,\n passedParams,\n changedParams,\n nextEl,\n prevEl,\n scrollbarEl,\n paginationEl\n}) {\n const updateParams = changedParams.filter(key => key !== 'children' && key !== 'direction');\n const {\n params: currentParams,\n pagination,\n navigation,\n scrollbar,\n virtual,\n thumbs\n } = swiper;\n let needThumbsInit;\n let needControllerInit;\n let needPaginationInit;\n let needScrollbarInit;\n let needNavigationInit;\n\n if (changedParams.includes('thumbs') && passedParams.thumbs && passedParams.thumbs.swiper && currentParams.thumbs && !currentParams.thumbs.swiper) {\n needThumbsInit = true;\n }\n\n if (changedParams.includes('controller') && passedParams.controller && passedParams.controller.control && currentParams.controller && !currentParams.controller.control) {\n needControllerInit = true;\n }\n\n if (changedParams.includes('pagination') && passedParams.pagination && (passedParams.pagination.el || paginationEl) && (currentParams.pagination || currentParams.pagination === false) && pagination && !pagination.el) {\n needPaginationInit = true;\n }\n\n if (changedParams.includes('scrollbar') && passedParams.scrollbar && (passedParams.scrollbar.el || scrollbarEl) && (currentParams.scrollbar || currentParams.scrollbar === false) && scrollbar && !scrollbar.el) {\n needScrollbarInit = true;\n }\n\n if (changedParams.includes('navigation') && passedParams.navigation && (passedParams.navigation.prevEl || prevEl) && (passedParams.navigation.nextEl || nextEl) && (currentParams.navigation || currentParams.navigation === false) && navigation && !navigation.prevEl && !navigation.nextEl) {\n needNavigationInit = true;\n }\n\n const destroyModule = mod => {\n if (!swiper[mod]) return;\n swiper[mod].destroy();\n\n if (mod === 'navigation') {\n currentParams[mod].prevEl = undefined;\n currentParams[mod].nextEl = undefined;\n swiper[mod].prevEl = undefined;\n swiper[mod].nextEl = undefined;\n } else {\n currentParams[mod].el = undefined;\n swiper[mod].el = undefined;\n }\n };\n\n updateParams.forEach(key => {\n if (isObject(currentParams[key]) && isObject(passedParams[key])) {\n extend(currentParams[key], passedParams[key]);\n } else {\n const newValue = passedParams[key];\n\n if ((newValue === true || newValue === false) && (key === 'navigation' || key === 'pagination' || key === 'scrollbar')) {\n if (newValue === false) {\n destroyModule(key);\n }\n } else {\n currentParams[key] = passedParams[key];\n }\n }\n });\n\n if (updateParams.includes('controller') && !needControllerInit && swiper.controller && swiper.controller.control && currentParams.controller && currentParams.controller.control) {\n swiper.controller.control = currentParams.controller.control;\n }\n\n if (changedParams.includes('children') && slides && virtual && currentParams.virtual.enabled) {\n virtual.slides = slides;\n virtual.update(true);\n } else if (changedParams.includes('children') && swiper.lazy && swiper.params.lazy.enabled) {\n swiper.lazy.load();\n }\n\n if (needThumbsInit) {\n const initialized = thumbs.init();\n if (initialized) thumbs.update(true);\n }\n\n if (needControllerInit) {\n swiper.controller.control = currentParams.controller.control;\n }\n\n if (needPaginationInit) {\n if (paginationEl) currentParams.pagination.el = paginationEl;\n pagination.init();\n pagination.render();\n pagination.update();\n }\n\n if (needScrollbarInit) {\n if (scrollbarEl) currentParams.scrollbar.el = scrollbarEl;\n scrollbar.init();\n scrollbar.updateSize();\n scrollbar.setTranslate();\n }\n\n if (needNavigationInit) {\n if (nextEl) currentParams.navigation.nextEl = nextEl;\n if (prevEl) currentParams.navigation.prevEl = prevEl;\n navigation.init();\n navigation.update();\n }\n\n if (changedParams.includes('allowSlideNext')) {\n swiper.allowSlideNext = passedParams.allowSlideNext;\n }\n\n if (changedParams.includes('allowSlidePrev')) {\n swiper.allowSlidePrev = passedParams.allowSlidePrev;\n }\n\n if (changedParams.includes('direction')) {\n swiper.changeDirection(passedParams.direction, false);\n }\n\n swiper.update();\n}\n\nexport { updateSwiper };","import { useEffect, useLayoutEffect } from 'react';\n\nfunction useIsomorphicLayoutEffect(callback, deps) {\n // eslint-disable-next-line\n if (typeof window === 'undefined') return useEffect(callback, deps);\n return useLayoutEffect(callback, deps);\n}\n\nexport { useIsomorphicLayoutEffect };","import { createContext, useContext } from 'react';\nexport const SwiperSlideContext = /*#__PURE__*/createContext(null);\nexport const useSwiperSlide = () => {\n return useContext(SwiperSlideContext);\n};\nexport const SwiperContext = /*#__PURE__*/createContext(null);\nexport const useSwiper = () => {\n return useContext(SwiperContext);\n};","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React, { useRef, useState, useEffect, forwardRef } from 'react';\nimport SwiperCore from 'swiper';\nimport { getParams } from '../components-shared/get-params.js';\nimport { mountSwiper } from '../components-shared/mount-swiper.js';\nimport { needsScrollbar, needsNavigation, needsPagination, uniqueClasses, extend } from '../components-shared/utils.js';\nimport { renderLoop, calcLoopedSlides } from './loop.js';\nimport { getChangedParams } from '../components-shared/get-changed-params.js';\nimport { getChildren } from './get-children.js';\nimport { updateSwiper } from '../components-shared/update-swiper.js';\nimport { renderVirtual } from './virtual.js';\nimport { updateOnVirtualData } from '../components-shared/update-on-virtual-data.js';\nimport { useIsomorphicLayoutEffect } from './use-isomorphic-layout-effect.js';\nimport { SwiperContext } from './context.js';\nconst Swiper = /*#__PURE__*/forwardRef(function (_temp, externalElRef) {\n let {\n className,\n tag: Tag = 'div',\n wrapperTag: WrapperTag = 'div',\n children,\n onSwiper,\n ...rest\n } = _temp === void 0 ? {} : _temp;\n let eventsAssigned = false;\n const [containerClasses, setContainerClasses] = useState('swiper');\n const [virtualData, setVirtualData] = useState(null);\n const [breakpointChanged, setBreakpointChanged] = useState(false);\n const initializedRef = useRef(false);\n const swiperElRef = useRef(null);\n const swiperRef = useRef(null);\n const oldPassedParamsRef = useRef(null);\n const oldSlides = useRef(null);\n const nextElRef = useRef(null);\n const prevElRef = useRef(null);\n const paginationElRef = useRef(null);\n const scrollbarElRef = useRef(null);\n const {\n params: swiperParams,\n passedParams,\n rest: restProps,\n events\n } = getParams(rest);\n const {\n slides,\n slots\n } = getChildren(children);\n\n const onBeforeBreakpoint = () => {\n setBreakpointChanged(!breakpointChanged);\n };\n\n Object.assign(swiperParams.on, {\n _containerClasses(swiper, classes) {\n setContainerClasses(classes);\n }\n\n });\n\n const initSwiper = () => {\n // init swiper\n Object.assign(swiperParams.on, events);\n eventsAssigned = true;\n swiperRef.current = new SwiperCore(swiperParams);\n\n swiperRef.current.loopCreate = () => {};\n\n swiperRef.current.loopDestroy = () => {};\n\n if (swiperParams.loop) {\n swiperRef.current.loopedSlides = calcLoopedSlides(slides, swiperParams);\n }\n\n if (swiperRef.current.virtual && swiperRef.current.params.virtual.enabled) {\n swiperRef.current.virtual.slides = slides;\n const extendWith = {\n cache: false,\n slides,\n renderExternal: setVirtualData,\n renderExternalUpdate: false\n };\n extend(swiperRef.current.params.virtual, extendWith);\n extend(swiperRef.current.originalParams.virtual, extendWith);\n }\n };\n\n if (!swiperElRef.current) {\n initSwiper();\n } // Listen for breakpoints change\n\n\n if (swiperRef.current) {\n swiperRef.current.on('_beforeBreakpoint', onBeforeBreakpoint);\n }\n\n const attachEvents = () => {\n if (eventsAssigned || !events || !swiperRef.current) return;\n Object.keys(events).forEach(eventName => {\n swiperRef.current.on(eventName, events[eventName]);\n });\n };\n\n const detachEvents = () => {\n if (!events || !swiperRef.current) return;\n Object.keys(events).forEach(eventName => {\n swiperRef.current.off(eventName, events[eventName]);\n });\n };\n\n useEffect(() => {\n return () => {\n if (swiperRef.current) swiperRef.current.off('_beforeBreakpoint', onBeforeBreakpoint);\n };\n }); // set initialized flag\n\n useEffect(() => {\n if (!initializedRef.current && swiperRef.current) {\n swiperRef.current.emitSlidesClasses();\n initializedRef.current = true;\n }\n }); // mount swiper\n\n useIsomorphicLayoutEffect(() => {\n if (externalElRef) {\n externalElRef.current = swiperElRef.current;\n }\n\n if (!swiperElRef.current) return;\n\n if (swiperRef.current.destroyed) {\n initSwiper();\n }\n\n mountSwiper({\n el: swiperElRef.current,\n nextEl: nextElRef.current,\n prevEl: prevElRef.current,\n paginationEl: paginationElRef.current,\n scrollbarEl: scrollbarElRef.current,\n swiper: swiperRef.current\n }, swiperParams);\n if (onSwiper) onSwiper(swiperRef.current); // eslint-disable-next-line\n\n return () => {\n if (swiperRef.current && !swiperRef.current.destroyed) {\n swiperRef.current.destroy(true, false);\n }\n };\n }, []); // watch for params change\n\n useIsomorphicLayoutEffect(() => {\n attachEvents();\n const changedParams = getChangedParams(passedParams, oldPassedParamsRef.current, slides, oldSlides.current, c => c.key);\n oldPassedParamsRef.current = passedParams;\n oldSlides.current = slides;\n\n if (changedParams.length && swiperRef.current && !swiperRef.current.destroyed) {\n updateSwiper({\n swiper: swiperRef.current,\n slides,\n passedParams,\n changedParams,\n nextEl: nextElRef.current,\n prevEl: prevElRef.current,\n scrollbarEl: scrollbarElRef.current,\n paginationEl: paginationElRef.current\n });\n }\n\n return () => {\n detachEvents();\n };\n }); // update on virtual update\n\n useIsomorphicLayoutEffect(() => {\n updateOnVirtualData(swiperRef.current);\n }, [virtualData]); // bypass swiper instance to slides\n\n function renderSlides() {\n if (swiperParams.virtual) {\n return renderVirtual(swiperRef.current, slides, virtualData);\n }\n\n if (!swiperParams.loop || swiperRef.current && swiperRef.current.destroyed) {\n return slides.map(child => {\n return /*#__PURE__*/React.cloneElement(child, {\n swiper: swiperRef.current\n });\n });\n }\n\n return renderLoop(swiperRef.current, slides, swiperParams);\n }\n\n return /*#__PURE__*/React.createElement(Tag, _extends({\n ref: swiperElRef,\n className: uniqueClasses(`${containerClasses}${className ? ` ${className}` : ''}`)\n }, restProps), /*#__PURE__*/React.createElement(SwiperContext.Provider, {\n value: swiperRef.current\n }, slots['container-start'], /*#__PURE__*/React.createElement(WrapperTag, {\n className: \"swiper-wrapper\"\n }, slots['wrapper-start'], renderSlides(), slots['wrapper-end']), needsNavigation(swiperParams) && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"div\", {\n ref: prevElRef,\n className: \"swiper-button-prev\"\n }), /*#__PURE__*/React.createElement(\"div\", {\n ref: nextElRef,\n className: \"swiper-button-next\"\n })), needsScrollbar(swiperParams) && /*#__PURE__*/React.createElement(\"div\", {\n ref: scrollbarElRef,\n className: \"swiper-scrollbar\"\n }), needsPagination(swiperParams) && /*#__PURE__*/React.createElement(\"div\", {\n ref: paginationElRef,\n className: \"swiper-pagination\"\n }), slots['container-end']));\n});\nSwiper.displayName = 'Swiper';\nexport { Swiper };","import Swiper from 'swiper';\nimport { isObject, extend } from './utils.js';\nimport { paramsList } from './params-list.js';\n\nfunction getParams(obj = {}, splitEvents = true) {\n const params = {\n on: {}\n };\n const events = {};\n const passedParams = {};\n extend(params, Swiper.defaults);\n extend(params, Swiper.extendedDefaults);\n params._emitClasses = true;\n params.init = false;\n const rest = {};\n const allowedParams = paramsList.map(key => key.replace(/_/, ''));\n const plainObj = Object.assign({}, obj);\n Object.keys(plainObj).forEach(key => {\n if (typeof obj[key] === 'undefined') return;\n\n if (allowedParams.indexOf(key) >= 0) {\n if (isObject(obj[key])) {\n params[key] = {};\n passedParams[key] = {};\n extend(params[key], obj[key]);\n extend(passedParams[key], obj[key]);\n } else {\n params[key] = obj[key];\n passedParams[key] = obj[key];\n }\n } else if (key.search(/on[A-Z]/) === 0 && typeof obj[key] === 'function') {\n if (splitEvents) {\n events[`${key[2].toLowerCase()}${key.substr(3)}`] = obj[key];\n } else {\n params.on[`${key[2].toLowerCase()}${key.substr(3)}`] = obj[key];\n }\n } else {\n rest[key] = obj[key];\n }\n });\n ['navigation', 'pagination', 'scrollbar'].forEach(key => {\n if (params[key] === true) params[key] = {};\n if (params[key] === false) delete params[key];\n });\n return {\n params,\n passedParams,\n rest,\n events\n };\n}\n\nexport { getParams };","import { needsNavigation, needsPagination, needsScrollbar } from './utils.js';\n\nfunction mountSwiper({\n el,\n nextEl,\n prevEl,\n paginationEl,\n scrollbarEl,\n swiper\n}, swiperParams) {\n if (needsNavigation(swiperParams) && nextEl && prevEl) {\n swiper.params.navigation.nextEl = nextEl;\n swiper.originalParams.navigation.nextEl = nextEl;\n swiper.params.navigation.prevEl = prevEl;\n swiper.originalParams.navigation.prevEl = prevEl;\n }\n\n if (needsPagination(swiperParams) && paginationEl) {\n swiper.params.pagination.el = paginationEl;\n swiper.originalParams.pagination.el = paginationEl;\n }\n\n if (needsScrollbar(swiperParams) && scrollbarEl) {\n swiper.params.scrollbar.el = scrollbarEl;\n swiper.originalParams.scrollbar.el = scrollbarEl;\n }\n\n swiper.init(el);\n}\n\nexport { mountSwiper };","import { paramsList } from './params-list.js';\nimport { isObject } from './utils.js';\n\nfunction getChangedParams(swiperParams, oldParams, children, oldChildren, getKey) {\n const keys = [];\n if (!oldParams) return keys;\n\n const addKey = key => {\n if (keys.indexOf(key) < 0) keys.push(key);\n };\n\n if (children && oldChildren) {\n const oldChildrenKeys = oldChildren.map(getKey);\n const childrenKeys = children.map(getKey);\n if (oldChildrenKeys.join('') !== childrenKeys.join('')) addKey('children');\n if (oldChildren.length !== children.length) addKey('children');\n }\n\n const watchParams = paramsList.filter(key => key[0] === '_').map(key => key.replace(/_/, ''));\n watchParams.forEach(key => {\n if (key in swiperParams && key in oldParams) {\n if (isObject(swiperParams[key]) && isObject(oldParams[key])) {\n const newKeys = Object.keys(swiperParams[key]);\n const oldKeys = Object.keys(oldParams[key]);\n\n if (newKeys.length !== oldKeys.length) {\n addKey(key);\n } else {\n newKeys.forEach(newKey => {\n if (swiperParams[key][newKey] !== oldParams[key][newKey]) {\n addKey(key);\n }\n });\n oldKeys.forEach(oldKey => {\n if (swiperParams[key][oldKey] !== oldParams[key][oldKey]) addKey(key);\n });\n }\n } else if (swiperParams[key] !== oldParams[key]) {\n addKey(key);\n }\n }\n });\n return keys;\n}\n\nexport { getChangedParams };","export const updateOnVirtualData = swiper => {\n if (!swiper || swiper.destroyed || !swiper.params.virtual || swiper.params.virtual && !swiper.params.virtual.enabled) return;\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n\n if (swiper.lazy && swiper.params.lazy.enabled) {\n swiper.lazy.load();\n }\n\n if (swiper.parallax && swiper.params.parallax && swiper.params.parallax.enabled) {\n swiper.parallax.setTranslate();\n }\n};","import React from 'react';\n\nfunction renderVirtual(swiper, slides, virtualData) {\n if (!virtualData) return null;\n const style = swiper.isHorizontal() ? {\n [swiper.rtlTranslate ? 'right' : 'left']: `${virtualData.offset}px`\n } : {\n top: `${virtualData.offset}px`\n };\n return slides.filter((child, index) => index >= virtualData.from && index <= virtualData.to).map(child => {\n return /*#__PURE__*/React.cloneElement(child, {\n swiper,\n style\n });\n });\n}\n\nexport { renderVirtual };","import React from 'react';\nimport { calcLoopedSlides } from '../shared/calc-looped-slides.js';\n\nfunction renderLoop(swiper, slides, swiperParams) {\n const modifiedSlides = slides.map((child, index) => {\n return /*#__PURE__*/React.cloneElement(child, {\n swiper,\n 'data-swiper-slide-index': index\n });\n });\n\n function duplicateSlide(child, index, position) {\n return /*#__PURE__*/React.cloneElement(child, {\n key: `${child.key}-duplicate-${index}-${position}`,\n className: `${child.props.className || ''} ${swiperParams.slideDuplicateClass}`\n });\n }\n\n if (swiperParams.loopFillGroupWithBlank) {\n const blankSlidesNum = swiperParams.slidesPerGroup - modifiedSlides.length % swiperParams.slidesPerGroup;\n\n if (blankSlidesNum !== swiperParams.slidesPerGroup) {\n for (let i = 0; i < blankSlidesNum; i += 1) {\n const blankSlide = /*#__PURE__*/React.createElement(\"div\", {\n className: `${swiperParams.slideClass} ${swiperParams.slideBlankClass}`\n });\n modifiedSlides.push(blankSlide);\n }\n }\n }\n\n if (swiperParams.slidesPerView === 'auto' && !swiperParams.loopedSlides) {\n swiperParams.loopedSlides = modifiedSlides.length;\n }\n\n const loopedSlides = calcLoopedSlides(modifiedSlides, swiperParams);\n const prependSlides = [];\n const appendSlides = [];\n\n for (let i = 0; i < loopedSlides; i += 1) {\n const index = i - Math.floor(i / modifiedSlides.length) * modifiedSlides.length;\n appendSlides.push(duplicateSlide(modifiedSlides[index], i, 'append'));\n prependSlides.unshift(duplicateSlide(modifiedSlides[modifiedSlides.length - index - 1], i, 'prepend'));\n }\n\n if (swiper) {\n swiper.loopedSlides = loopedSlides;\n }\n\n return [...prependSlides, ...modifiedSlides, ...appendSlides];\n}\n\nexport { calcLoopedSlides, renderLoop };","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React, { useRef, useState, forwardRef } from 'react';\nimport { uniqueClasses } from '../components-shared/utils.js';\nimport { useIsomorphicLayoutEffect } from './use-isomorphic-layout-effect.js';\nimport { SwiperSlideContext } from './context.js';\nconst SwiperSlide = /*#__PURE__*/forwardRef(function (_temp, externalRef) {\n let {\n tag: Tag = 'div',\n children,\n className = '',\n swiper,\n zoom,\n virtualIndex,\n ...rest\n } = _temp === void 0 ? {} : _temp;\n const slideElRef = useRef(null);\n const [slideClasses, setSlideClasses] = useState('swiper-slide');\n\n function updateClasses(_s, el, classNames) {\n if (el === slideElRef.current) {\n setSlideClasses(classNames);\n }\n }\n\n useIsomorphicLayoutEffect(() => {\n if (externalRef) {\n externalRef.current = slideElRef.current;\n }\n\n if (!slideElRef.current || !swiper) {\n return;\n }\n\n if (swiper.destroyed) {\n if (slideClasses !== 'swiper-slide') {\n setSlideClasses('swiper-slide');\n }\n\n return;\n }\n\n swiper.on('_slideClass', updateClasses); // eslint-disable-next-line\n\n return () => {\n if (!swiper) return;\n swiper.off('_slideClass', updateClasses);\n };\n });\n useIsomorphicLayoutEffect(() => {\n if (swiper && slideElRef.current && !swiper.destroyed) {\n setSlideClasses(swiper.getSlideClasses(slideElRef.current));\n }\n }, [swiper]);\n const slideData = {\n isActive: slideClasses.indexOf('swiper-slide-active') >= 0 || slideClasses.indexOf('swiper-slide-duplicate-active') >= 0,\n isVisible: slideClasses.indexOf('swiper-slide-visible') >= 0,\n isDuplicate: slideClasses.indexOf('swiper-slide-duplicate') >= 0,\n isPrev: slideClasses.indexOf('swiper-slide-prev') >= 0 || slideClasses.indexOf('swiper-slide-duplicate-prev') >= 0,\n isNext: slideClasses.indexOf('swiper-slide-next') >= 0 || slideClasses.indexOf('swiper-slide-duplicate-next') >= 0\n };\n\n const renderChildren = () => {\n return typeof children === 'function' ? children(slideData) : children;\n };\n\n return /*#__PURE__*/React.createElement(Tag, _extends({\n ref: slideElRef,\n className: uniqueClasses(`${slideClasses}${className ? ` ${className}` : ''}`),\n \"data-swiper-slide-index\": virtualIndex\n }, rest), /*#__PURE__*/React.createElement(SwiperSlideContext.Provider, {\n value: slideData\n }, zoom ? /*#__PURE__*/React.createElement(\"div\", {\n className: \"swiper-zoom-container\",\n \"data-swiper-zoom\": typeof zoom === 'number' ? zoom : undefined\n }, renderChildren()) : renderChildren()));\n});\nSwiperSlide.displayName = 'SwiperSlide';\nexport { SwiperSlide };","import React, { useState, useRef, useEffect, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { useTranslation } from 'react-i18next';\nimport { Swiper, SwiperSlide } from 'swiper/react';\nimport SwiperCore, {\n A11y,\n Controller,\n Pagination,\n Scrollbar,\n Navigation,\n} from 'swiper';\n\nimport { Button, Icon, IconButton, Tooltip } from '../';\n\nimport 'swiper/css';\nimport 'swiper/css/navigation';\nimport './style.css';\n\nconst borderSize = 4;\nconst expandedWidth = 248;\nconst collapsedWidth = 25;\n\nconst baseStyle = {\n maxWidth: `${expandedWidth}px`,\n width: `${expandedWidth}px`,\n};\n\nconst collapsedHideWidth = expandedWidth - collapsedWidth - borderSize;\nconst styleMap = {\n open: {\n left: { marginLeft: '0px' },\n right: { marginRight: '0px' },\n },\n closed: {\n left: { marginLeft: `-${collapsedHideWidth}px` },\n right: { marginRight: `-${collapsedHideWidth}px` },\n },\n};\n\nconst baseClasses =\n 'transition-all duration-300 ease-in-out h-100 bg-black border-black justify-start box-content flex flex-col';\n\nconst classesMap = {\n open: {\n left: `mr-1`,\n right: `ml-1`,\n },\n closed: {\n left: `mr-2 items-end`,\n right: `ml-2 items-start`,\n },\n};\n\nconst openStateIconName = {\n left: 'push-left',\n right: 'push-right',\n};\n\nconst position = {\n left: {\n right: 5,\n },\n right: {\n left: 5,\n },\n};\n\nconst SidePanel = ({\n side,\n className,\n activeTabIndex: activeTabIndexProp,\n tabs,\n}) => {\n const { t } = useTranslation('SidePanel');\n\n const [panelOpen, setPanelOpen] = useState(activeTabIndexProp !== null);\n const [activeTabIndex, setActiveTabIndex] = useState(activeTabIndexProp || 0);\n const swiperRef = useRef() as any;\n const [swiper, setSwiper] = useState();\n\n const prevRef = React.useRef();\n const nextRef = React.useRef();\n\n const openStatus = panelOpen ? 'open' : 'closed';\n const style = Object.assign({}, styleMap[openStatus][side], baseStyle);\n\n const ActiveComponent = tabs[activeTabIndex].content;\n\n useEffect(() => {\n if (panelOpen && swiper) {\n swiper.slideTo(activeTabIndex, 500);\n }\n }, [panelOpen, swiper]);\n\n useEffect(() => {\n if (swiper) {\n swiper.params.navigation.prevEl = prevRef.current;\n swiper.params.navigation.nextEl = nextRef.current;\n swiper.navigation.init();\n swiper.navigation.update();\n }\n }, [swiper]);\n\n const getCloseStateComponent = () => {\n const _childComponents = Array.isArray(tabs) ? tabs : [tabs];\n return (\n <>\n {\n setPanelOpen(prev => !prev);\n }}\n data-cy={`side-panel-header-${side}`}\n >\n \n \n
\n {_childComponents.map((childComponent, index) => (\n \n {\n setActiveTabIndex(index);\n setPanelOpen(true);\n }}\n >\n \n \n \n ))}\n
\n \n );\n };\n\n return (\n \n {panelOpen ? (\n \n {/** Panel Header with Arrow and Close Actions */}\n {\n setPanelOpen(prev => !prev);\n // slideToActivePanel();\n }}\n data-cy={`side-panel-header-${side}`}\n >\n \n \n {/* Todo: ass secondary label here */}\n \n {tabs.length === 1 && tabs[activeTabIndex].label}\n \n \n \n {tabs.length > 1 &&\n _getMoreThanOneTabLayout(\n swiperRef,\n setSwiper,\n prevRef,\n nextRef,\n tabs,\n activeTabIndex,\n setActiveTabIndex,\n setPanelOpen\n )}\n {/** carousel navigation with the arrows */}\n {/** only show carousel nav if tabs are more than 3 tabs */}\n {tabs.length > 3 && (\n
\n \n \n
\n )}\n \n
\n ) : (\n {getCloseStateComponent()}\n )}\n \n );\n};\n\nSidePanel.defaultProps = {\n defaultComponentOpen: null,\n};\n\nSidePanel.propTypes = {\n side: PropTypes.oneOf(['left', 'right']).isRequired,\n className: PropTypes.string,\n activeTabIndex: PropTypes.number,\n tabs: PropTypes.oneOfType([\n PropTypes.arrayOf(\n PropTypes.shape({\n iconName: PropTypes.string.isRequired,\n iconLabel: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n content: PropTypes.func, // TODO: Should be node, but it keeps complaining?\n })\n ),\n ]),\n};\n\nfunction _getMoreThanOneTabLayout(\n swiperRef: any,\n setSwiper: React.Dispatch,\n prevRef: React.MutableRefObject,\n nextRef: React.MutableRefObject,\n tabs: any,\n activeTabIndex: any,\n setActiveTabIndex: React.Dispatch,\n setPanelOpen: React.Dispatch>\n) {\n return (\n \n
\n {\n swiperRef.current = core.el;\n }}\n simulateTouch={false}\n modules={[Navigation, Pagination, Scrollbar, A11y, Controller]}\n slidesPerView={3}\n spaceBetween={5}\n onSwiper={swiper => setSwiper(swiper)}\n navigation={{\n prevEl: prevRef?.current,\n nextEl: nextRef?.current,\n }}\n >\n {tabs.map((obj, index) => (\n \n {\n setActiveTabIndex(index);\n setPanelOpen(true);\n }}\n data-cy={`${obj.name}-btn`}\n >\n \n \n \n \n {obj.label}\n \n
\n \n ))}\n \n \n \n );\n}\n\nexport default SidePanel;\n","import SidePanel from './SidePanel';\nexport default SidePanel;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport OutsideClickHandler from 'react-outside-click-handler';\nimport { useTranslation } from 'react-i18next';\n\nimport { Icon, Tooltip, ListMenu } from '../';\n\nconst baseClasses = {\n Button:\n 'flex items-center rounded-md border-transparent border-2 cursor-pointer',\n Primary:\n 'h-full flex flex-1 items-center rounded-md rounded-tr-none rounded-br-none',\n Secondary:\n 'h-full flex items-center justify-center rounded-tr-md rounded-br-md w-4',\n PrimaryIcon: 'w-5 h-5',\n SecondaryIcon: 'w-4 h-full stroke-1',\n Separator: 'border-l pt-2 pb-2',\n Content: 'absolute z-10 top-0 mt-12',\n};\n\nconst classes = {\n Button: ({ isExpanded, primary }) =>\n classNames(\n baseClasses.Button,\n !isExpanded &&\n !primary.isActive &&\n 'hover:bg-primary-dark hover:border-primary-dark'\n ),\n Interface: 'h-full flex flex-row items-center',\n Primary: ({ primary, isExpanded }) =>\n classNames(\n baseClasses.Primary,\n primary.isActive && !isExpanded\n ? 'bg-primary-light rounded-tr-md rounded-br-md active'\n : isExpanded\n ? 'bg-primary-dark'\n : 'bg-secondary-dark hover:bg-primary-dark'\n ),\n Secondary: ({ isExpanded, primary }) =>\n classNames(\n baseClasses.Secondary,\n isExpanded\n ? 'bg-primary-light rounded-tr-md rounded-br-md'\n : primary.isActive\n ? 'bg-secondary-dark'\n : 'hover:bg-primary-dark bg-secondary-dark'\n ),\n PrimaryIcon: ({ primary, isExpanded }) =>\n classNames(\n baseClasses.PrimaryIcon,\n primary.isActive && !isExpanded\n ? 'text-primary-dark'\n : 'text-common-bright'\n ),\n SecondaryIcon: ({ isExpanded }) =>\n classNames(\n baseClasses.SecondaryIcon,\n isExpanded\n ? 'text-primary-dark'\n : 'text-primary-active hover:text-common-bright'\n ),\n Separator: ({ primary, isExpanded, isHovering }) =>\n classNames(\n baseClasses.Separator,\n isHovering || isExpanded || primary.isActive\n ? 'border-transparent'\n : 'border-primary-active'\n ),\n Content: ({ isExpanded }) =>\n classNames(baseClasses.Content, isExpanded ? 'block' : 'hidden'),\n};\n\nconst SplitButton = ({\n isRadio,\n isAction,\n //\n bState,\n //\n groupId,\n primary: _primary,\n secondary,\n items: _items,\n renderer,\n onInteraction,\n}) => {\n const { t } = useTranslation('Buttons');\n\n const { primaryToolId, toggles } = bState;\n /* Bubbles up individual item clicks */\n const getSplitButtonItems = items =>\n items.map((item, index) => ({\n ...item,\n index,\n onClick: () => {\n onInteraction({\n groupId,\n //\n itemId: item.id,\n interactionType: item.type,\n // splitButtonId? (so we can track group?)\n // info to fire item's command/event?\n commands: item.commands,\n });\n\n setState(state => ({\n ...state,\n primary: !isAction ? { ...item, index } : state.primary,\n isExpanded: false,\n items: getSplitButtonItems(_items).filter(item =>\n isRadio && !isAction ? item.index !== index : true\n ),\n }));\n },\n }));\n\n const [state, setState] = useState({\n primary: _primary,\n items: getSplitButtonItems(_items).filter(item =>\n isRadio && !isAction ? item.id !== _primary.id : true\n ),\n isHovering: false,\n isExpanded: false,\n });\n\n const onSecondaryClickHandler = () =>\n setState(state => ({ ...state, isExpanded: !state.isExpanded }));\n const onMouseEnterHandler = () =>\n setState(state => ({ ...state, isHovering: true }));\n const onMouseLeaveHandler = () =>\n setState(state => ({ ...state, isHovering: false }));\n const outsideClickHandler = () =>\n setState(state => ({ ...state, isExpanded: false }));\n const onPrimaryClickHandler = () => {\n onInteraction({\n groupId,\n itemId: state.primary.id,\n interactionType: state.primary.type,\n // splitButtonId? (so we can track group?)\n // info to fire item's command/event?\n //\n commands: state.primary.commands,\n });\n };\n\n const isPrimaryActive =\n (state.primary.type === 'tool' && primaryToolId === state.primary.id) ||\n (state.primary.type === 'toggle' && toggles[state.primary.id] === true);\n\n return (\n \n
\n \n
\n \n \n \n \n
\n \n
\n \n \n \n \n \n \n \n \n {/* EXPANDED LIST OF OPTIONS */}\n \n renderer({ ...args, t })}\n />\n \n \n
\n );\n};\n\nconst DefaultListItemRenderer = ({ icon, label, isActive, t }) => (\n \n \n \n \n \n {t(label)}\n \n \n);\n\nconst noop = () => {};\n\nSplitButton.defaultProps = {\n isRadio: false,\n isAction: false,\n primary: {\n label: null,\n tooltip: null,\n },\n secondary: {\n icon: 'chevron-down',\n label: null,\n isActive: true,\n tooltip: 'More Measure Tools',\n },\n items: [],\n renderer: DefaultListItemRenderer,\n};\n\nSplitButton.propTypes = {\n primary: PropTypes.shape({\n id: PropTypes.string.isRequired,\n icon: PropTypes.string,\n label: PropTypes.string,\n type: PropTypes.oneOf(['tool', 'action', 'toggle']).isRequired,\n tooltip: PropTypes.string,\n }),\n secondary: PropTypes.shape({\n id: PropTypes.string,\n icon: PropTypes.string,\n label: PropTypes.string,\n tooltip: PropTypes.string,\n isActive: PropTypes.bool,\n }),\n renderer: PropTypes.func,\n items: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string.isRequired,\n icon: PropTypes.string,\n label: PropTypes.string,\n type: PropTypes.oneOf(['tool', 'action', 'toggle']).isRequired,\n tooltip: PropTypes.string,\n isActive: PropTypes.bool,\n })\n ),\n /** Callback function to inform ToolBarService of important events */\n onInteraction: PropTypes.func.isRequired,\n};\n\nexport default SplitButton;\n","import SplitButton from './SplitButton';\nexport default SplitButton;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\n\nimport { ButtonGroup, Button, StudyItem, ThumbnailList } from '../';\nimport { StringNumber } from '../../types';\n\nconst getTrackedSeries = displaySets => {\n let trackedSeries = 0;\n displaySets.forEach(displaySet => {\n if (displaySet.isTracked) {\n trackedSeries++;\n }\n });\n\n return trackedSeries;\n};\n\nconst StudyBrowser = ({\n tabs,\n activeTabName,\n expandedStudyInstanceUIDs,\n onClickTab,\n onClickStudy,\n onClickThumbnail,\n onDoubleClickThumbnail,\n onClickUntrack,\n activeDisplaySetInstanceUIDs,\n}) => {\n const { t } = useTranslation('StudyBrowser');\n\n const getTabContent = () => {\n const tabData = tabs.find(tab => tab.name === activeTabName);\n return tabData.studies.map(\n ({\n studyInstanceUid,\n date,\n description,\n numInstances,\n modalities,\n displaySets,\n }) => {\n const isExpanded = expandedStudyInstanceUIDs.includes(studyInstanceUid);\n return (\n \n {\n onClickStudy(studyInstanceUid);\n }}\n data-cy=\"thumbnail-list\"\n />\n {isExpanded && displaySets && (\n \n )}\n \n );\n }\n );\n };\n\n return (\n \n \n \n {tabs.map(tab => {\n const { name, label, studies } = tab;\n const isActive = activeTabName === name;\n const isDisabled = !studies.length;\n return (\n {\n onClickTab(name);\n }}\n disabled={isDisabled}\n >\n {t(label)}\n \n );\n })}\n \n \n
\n {getTabContent()}\n
\n
\n );\n};\n\nStudyBrowser.propTypes = {\n onClickTab: PropTypes.func.isRequired,\n onClickStudy: PropTypes.func,\n onClickThumbnail: PropTypes.func,\n onDoubleClickThumbnail: PropTypes.func,\n onClickUntrack: PropTypes.func,\n activeTabName: PropTypes.string.isRequired,\n expandedStudyInstanceUIDs: PropTypes.arrayOf(PropTypes.string).isRequired,\n activeDisplaySetInstanceUIDs: PropTypes.arrayOf(PropTypes.string),\n tabs: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n studies: PropTypes.arrayOf(\n PropTypes.shape({\n studyInstanceUid: PropTypes.string.isRequired,\n date: PropTypes.string,\n numInstances: PropTypes.number,\n modalities: PropTypes.string,\n description: PropTypes.string,\n displaySets: PropTypes.arrayOf(\n PropTypes.shape({\n displaySetInstanceUID: PropTypes.string.isRequired,\n imageSrc: PropTypes.string,\n imageAltText: PropTypes.string,\n seriesDate: PropTypes.string,\n seriesNumber: StringNumber,\n numInstances: PropTypes.number,\n description: PropTypes.string,\n componentType: PropTypes.oneOf([\n 'thumbnail',\n 'thumbnailTracked',\n 'thumbnailNoImage',\n ]).isRequired,\n isTracked: PropTypes.bool,\n viewportIdentificator: PropTypes.arrayOf(PropTypes.string),\n /**\n * Data the thumbnail should expose to a receiving drop target. Use a matching\n * `dragData.type` to identify which targets can receive this draggable item.\n * If this is not set, drag-n-drop will be disabled for this thumbnail.\n *\n * Ref: https://react-dnd.github.io/react-dnd/docs/api/use-drag#specification-object-members\n */\n dragData: PropTypes.shape({\n /** Must match the \"type\" a dropTarget expects */\n type: PropTypes.string.isRequired,\n }),\n })\n ),\n })\n ).isRequired,\n })\n ),\n};\n\nconst noop = () => {};\n\nStudyBrowser.defaultProps = {\n onClickTab: noop,\n onClickStudy: noop,\n onClickThumbnail: noop,\n onDoubleClickThumbnail: noop,\n onClickUntrack: noop,\n};\n\nexport default StudyBrowser;\n","import StudyBrowser from './StudyBrowser';\nexport default StudyBrowser;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\nimport { Icon } from '../';\n\nconst baseClasses =\n 'first:border-0 border-t border-secondary-light cursor-pointer select-none outline-none';\n\nconst StudyItem = ({\n date,\n description,\n numInstances,\n modalities,\n trackedSeries,\n isActive,\n onClick,\n}) => {\n return (\n \n
\n
\n
{date}
\n
\n \n {numInstances}\n
\n
\n
\n
{modalities}
\n
\n {description}\n
\n
\n
\n {!!trackedSeries && (\n
\n \n \n {trackedSeries} Tracked Series\n
\n \n )}\n \n );\n};\n\nStudyItem.propTypes = {\n date: PropTypes.string.isRequired,\n description: PropTypes.string.isRequired,\n modalities: PropTypes.string.isRequired,\n numInstances: PropTypes.number.isRequired,\n trackedSeries: PropTypes.number,\n isActive: PropTypes.bool,\n onClick: PropTypes.func.isRequired,\n};\n\nexport default StudyItem;\n","import StudyItem from './StudyItem';\nexport default StudyItem;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\n\nimport { Table, TableHead, TableBody, TableRow, TableCell } from '../';\n\nconst StudyListExpandedRow = ({\n seriesTableColumns,\n seriesTableDataSource,\n children,\n}) => {\n const { t } = useTranslation('StudyList');\n\n\n return (\n
\n
{children}
\n
\n \n \n \n {Object.keys(seriesTableColumns).map(columnKey => {\n return (\n \n {t(seriesTableColumns[columnKey])}\n \n );\n })}\n \n \n\n \n {seriesTableDataSource.map((row, i) => (\n \n {Object.keys(row).map(cellKey => {\n const content = row[cellKey];\n return (\n \n {content}\n \n );\n })}\n \n ))}\n \n
\n
\n
\n );\n};\n\nStudyListExpandedRow.propTypes = {\n seriesTableDataSource: PropTypes.arrayOf(PropTypes.object).isRequired,\n seriesTableColumns: PropTypes.object.isRequired,\n children: PropTypes.node.isRequired,\n};\n\nexport default StudyListExpandedRow;\n","import StudyListExpandedRow from './StudyListExpandedRow';\nexport default StudyListExpandedRow;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\n\nimport { Button, Icon, Typography, InputGroup } from '../';\n\nconst StudyListFilter = ({\n filtersMeta,\n filterValues,\n onChange,\n clearFilters,\n isFiltering,\n numOfStudies,\n}) => {\n const { t } = useTranslation('StudyList');\n const { sortBy, sortDirection } = filterValues;\n const filterSorting = { sortBy, sortDirection };\n const setFilterSorting = sortingValues => {\n onChange({\n ...filterValues,\n ...sortingValues,\n });\n };\n const isSortingEnabled = numOfStudies > 0 && numOfStudies <= 100;\n\n return (\n \n
\n
\n
\n
\n
\n \n {t('Study list')}\n \n
\n
\n {isFiltering && (\n }\n onClick={clearFilters}\n >\n {t('Clear filters')}\n \n )}\n \n {numOfStudies > 100 ? '>100' : numOfStudies}\n \n \n {t('Studies')}\n \n
\n
\n
\n
\n
\n \n
\n \n
\n {numOfStudies > 100 && (\n
\n
\n

\n {t('Filter list to 100 studies or less to enable sorting')}\n

\n
\n
\n )}\n \n
\n );\n};\n\nStudyListFilter.propTypes = {\n filtersMeta: PropTypes.arrayOf(\n PropTypes.shape({\n /** Identifier used to map a field to it's value in `filterValues` */\n name: PropTypes.string.isRequired,\n /** Friendly label for filter field */\n displayName: PropTypes.string.isRequired,\n /** One of the supported filter field input types */\n inputType: PropTypes.oneOf(['Text', 'MultiSelect', 'DateRange', 'None'])\n .isRequired,\n isSortable: PropTypes.bool.isRequired,\n /** Size of filter field in a 12-grid system */\n gridCol: PropTypes.oneOf([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])\n .isRequired,\n /** Options for a \"MultiSelect\" inputType */\n option: PropTypes.arrayOf(\n PropTypes.shape({\n value: PropTypes.string,\n label: PropTypes.string,\n })\n ),\n })\n ).isRequired,\n filterValues: PropTypes.object.isRequired,\n numOfStudies: PropTypes.number.isRequired,\n onChange: PropTypes.func.isRequired,\n clearFilters: PropTypes.func.isRequired,\n isFiltering: PropTypes.bool.isRequired,\n};\n\nexport default StudyListFilter;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, ButtonGroup, Typography, Select } from '../';\nimport { useTranslation } from 'react-i18next';\n\nconst StudyListPagination = ({\n onChangePage,\n currentPage,\n perPage,\n onChangePerPage,\n}) => {\n const { t } = useTranslation('StudyList');\n\n const navigateToPage = page => {\n const toPage = page < 1 ? 1 : page;\n onChangePage(toPage);\n };\n\n const ranges = [\n { value: '25', label: '25' },\n { value: '50', label: '50' },\n { value: '100', label: '100' },\n ];\n const [selectedRange, setSelectedRange] = useState(\n ranges.find(r => r.value === perPage)\n );\n const onSelectedRange = selectedRange => {\n setSelectedRange(selectedRange);\n onChangePerPage(selectedRange.value);\n };\n\n return (\n
\n
\n
\n
\n \n \n {t('Results per page')}\n \n
\n
\n
\n \n Page {currentPage}\n \n \n navigateToPage(1)}\n >\n {`<<`}\n \n navigateToPage(currentPage - 1)}\n >\n {t(`< Previous`)}\n \n navigateToPage(currentPage + 1)}\n >\n {t(`Next >`)}\n \n \n
\n
\n
\n
\n
\n );\n};\n\nStudyListPagination.propTypes = {\n onChangePage: PropTypes.func.isRequired,\n currentPage: PropTypes.number.isRequired,\n perPage: PropTypes.number.isRequired,\n onChangePerPage: PropTypes.func.isRequired,\n};\n\nexport default StudyListPagination;\n","import StudyListPagination from './StudyListPagination';\n\nexport default StudyListPagination;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { Icon } from '../';\nimport getGridWidthClass from '../../utils/getGridWidthClass';\n\nconst StudyListTableRow = props => {\n const { tableData } = props;\n const { row, expandedContent, onClickRow, isExpanded } = tableData;\n return (\n <>\n \n \n \n \n \n \n {row.map((cell, index) => {\n const { content, title, gridCol } = cell;\n return (\n \n
\n {index === 0 && (\n
\n \n
\n )}\n \n {content}\n
\n \n \n );\n })}\n \n {isExpanded && (\n
\n \n \n )}\n \n
{expandedContent}
\n \n \n \n \n );\n};\n\nStudyListTableRow.propTypes = {\n tableData: PropTypes.shape({\n /** A table row represented by an array of \"cell\" objects */\n row: PropTypes.arrayOf(\n PropTypes.shape({\n key: PropTypes.string.isRequired,\n /** Optional content to render in row's cell */\n content: PropTypes.node,\n /** Title attribute to use for provided content */\n title: PropTypes.string,\n gridCol: PropTypes.number.isRequired,\n })\n ).isRequired,\n expandedContent: PropTypes.node.isRequired,\n onClickRow: PropTypes.func.isRequired,\n isExpanded: PropTypes.bool.isRequired,\n }),\n};\n\nexport default StudyListTableRow;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport StudyListTableRow from './StudyListTableRow';\n\nconst StudyListTable = ({ tableDataSource }) => {\n return (\n
\n
\n \n \n {tableDataSource.map((tableData, i) => {\n return ;\n })}\n \n
\n
\n
\n );\n};\n\nStudyListTable.propTypes = {\n tableDataSource: PropTypes.arrayOf(\n PropTypes.shape({\n row: PropTypes.array.isRequired,\n expandedContent: PropTypes.node.isRequired,\n onClickRow: PropTypes.func.isRequired,\n isExpanded: PropTypes.bool.isRequired,\n })\n ),\n};\n\nexport default StudyListTable;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst StudySummary = ({ date, modality, description }) => {\n return (\n
\n
\n {date}\n \n {modality}\n \n
\n
\n {description || ''}\n
\n
\n );\n};\n\nStudySummary.propTypes = {\n date: PropTypes.string.isRequired,\n modality: PropTypes.string.isRequired,\n description: PropTypes.string,\n};\n\nexport default StudySummary;\n","import StudySummary from './StudySummary.tsx';\n\nexport default StudySummary;\n","import React from 'react';\n// Svgs\nimport logoOhif from './../../assets/svgs/logo-ohif.svg';\n\nconst SVGS = {\n 'logo-ohif': logoOhif,\n};\n\n/**\n * Return the matching SVG as a React Component.\n * Results in an inlined SVG Element. If there's no match,\n * return `null`\n */\nexport default function getSvg(key, props) {\n if (!key || !SVGS[key]) {\n return React.createElement('div', null, 'Missing SVG');\n }\n\n return React.createElement(SVGS[key], props);\n}\n\nexport { SVGS };\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport getSvg from './getSvg';\n\nconst Svg = ({ name, ...otherProps }) => {\n return {getSvg(name, { ...otherProps })};\n};\n\nSvg.propTypes = {\n name: PropTypes.string.isRequired,\n};\n\nexport default Svg;\n","import Svg from './Svg';\nexport default Svg;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\nconst Table = ({ children, className, fullWidth, style }) => {\n const classes = {\n base: 'text-lg text-white',\n fullWidth: {\n true: 'w-full',\n false: '',\n },\n };\n\n return (\n \n {children}\n \n );\n};\n\nTable.defaultProps = {\n className: '',\n fullWidth: true,\n style: {},\n};\n\nTable.propTypes = {\n fullWidth: PropTypes.bool,\n children: PropTypes.node.isRequired,\n className: PropTypes.string,\n style: PropTypes.object,\n};\n\nexport default Table;\n","import Table from './Table';\nexport default Table;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\nconst TableBody = ({ children, className, style }) => {\n return (\n \n {React.isValidElement(children)\n ? React.cloneElement(children, {\n isTableHead: false,\n })\n : children}\n \n );\n};\n\nTableBody.defaultProps = {\n className: '',\n style: {},\n};\n\nTableBody.propTypes = {\n children: function(props, propName, componentName) {\n const elements = React.Children.toArray(props.children);\n const isString = elements.some(child => typeof child === 'string');\n\n if (isString) {\n return new Error(\n `Failed prop type: Invalid prop ${propName} supplied to ${componentName}, expected a valid element instead of a string.`\n );\n }\n\n const isInvalidElement = elements.some(\n child => !React.isValidElement(child)\n );\n\n if (isInvalidElement) {\n return new Error(\n `Failed prop type: Invalid prop ${propName} supplied to ${componentName}, expected a valid node element.`\n );\n }\n },\n className: PropTypes.string,\n style: PropTypes.object,\n};\n\nexport default TableBody;\n","import TableBody from './TableBody';\nexport default TableBody;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\nconst TableCell = ({\n children,\n className,\n colSpan,\n // ignored because we don't wan't to expose this prop\n // eslint-disable-next-line react/prop-types\n cellsNum,\n isTableHead,\n align,\n style,\n}) => {\n const classes = {\n align: {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n justify: 'text-justify',\n },\n isTableHead: {\n true: '',\n false: 'border-r border-secondary-light',\n },\n };\n\n return (\n \n {children}\n \n );\n};\n\nTableCell.defaultProps = {\n align: 'left',\n className: '',\n colSpan: 1,\n isTableHead: false,\n style: {},\n};\n\nTableCell.propTypes = {\n align: PropTypes.oneOf(['left', 'center', 'right', 'justify']),\n children: PropTypes.node.isRequired,\n className: PropTypes.string,\n colSpan: PropTypes.number,\n isTableHead: PropTypes.bool,\n style: PropTypes.object,\n};\n\nexport default TableCell;\n","import TableCell from './TableCell';\nexport default TableCell;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\nconst TableHead = ({ children, className, style }) => {\n return (\n \n {React.isValidElement(children)\n ? React.cloneElement(children, {\n isTableHead: true,\n })\n : children}\n \n );\n};\n\nTableHead.defaultProps = {\n className: '',\n style: {},\n};\n\nTableHead.propTypes = {\n children: function (props, propName, componentName) {\n const elements = React.Children.toArray(props.children);\n const isString = elements.some((child) => typeof child === 'string');\n\n if (isString) {\n return new Error(\n `Failed prop type: Invalid prop ${propName} supplied to ${componentName}, expected a valid element instead of a string.`\n );\n }\n\n const isInvalidElement = elements.some(\n (child) => !React.isValidElement(child)\n );\n\n if (isInvalidElement) {\n return new Error(\n `Failed prop type: Invalid prop ${propName} supplied to ${componentName}, expected a valid node element.`\n );\n }\n },\n className: PropTypes.string,\n style: PropTypes.object,\n};\n\nexport default TableHead;\n","import TableHead from './TableHead';\nexport default TableHead;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\nconst TableRow = ({ children, className, isTableHead, style }) => {\n const childrens = React.Children.map(children, child => {\n const isValidReactElement = React.isValidElement(child);\n\n return isValidReactElement\n ? React.cloneElement(child, { isTableHead, cellsNum: children.length })\n : children;\n });\n\n return (\n
\n {childrens}\n
\n );\n};\n\nTableRow.defaultProps = {\n isTableHead: false,\n className: '',\n style: {},\n};\n\nTableRow.propTypes = {\n isTableHead: PropTypes.bool,\n children: function(props, propName, componentName) {\n const elements = React.Children.toArray(props.children);\n const isString = elements.some(child => typeof child === 'string');\n\n if (isString) {\n return new Error(\n `Failed prop type: Invalid prop ${propName} supplied to ${componentName}, expected a valid element instead of a string.`\n );\n }\n\n const isInvalidElement = elements.some(\n child => !React.isValidElement(child)\n );\n\n if (isInvalidElement) {\n return new Error(\n `Failed prop type: Invalid prop ${propName} supplied to ${componentName}, expected a valid node element.`\n );\n }\n },\n className: PropTypes.string,\n style: PropTypes.object,\n};\n\nexport default TableRow;\n","import TableRow from './TableRow';\nexport default TableRow;\n","import React from 'react';\nimport '../../tailwind.css';\nimport '../../assets/styles/styles.css';\n\nexport const ThemeWrapper = ({ children }) => (\n {children}\n);\n\nexport default ThemeWrapper;\n","import ThemeWrapper from './ThemeWrapper';\nexport default ThemeWrapper;\n","import { useLayoutEffect, useEffect } from 'react'; // suppress the useLayoutEffect warning on server side.\n\nexport var useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nexport var DragSourceImpl = /*#__PURE__*/function () {\n function DragSourceImpl(spec, monitor, connector) {\n _classCallCheck(this, DragSourceImpl);\n\n this.spec = spec;\n this.monitor = monitor;\n this.connector = connector;\n }\n\n _createClass(DragSourceImpl, [{\n key: \"beginDrag\",\n value: function beginDrag() {\n var _result;\n\n var spec = this.spec;\n var monitor = this.monitor;\n var result = null;\n\n if (_typeof(spec.item) === 'object') {\n result = spec.item;\n } else if (typeof spec.item === 'function') {\n result = spec.item(monitor);\n } else {\n result = {};\n }\n\n return (_result = result) !== null && _result !== void 0 ? _result : null;\n }\n }, {\n key: \"canDrag\",\n value: function canDrag() {\n var spec = this.spec;\n var monitor = this.monitor;\n\n if (typeof spec.canDrag === 'boolean') {\n return spec.canDrag;\n } else if (typeof spec.canDrag === 'function') {\n return spec.canDrag(monitor);\n } else {\n return true;\n }\n }\n }, {\n key: \"isDragging\",\n value: function isDragging(globalMonitor, target) {\n var spec = this.spec;\n var monitor = this.monitor;\n var isDragging = spec.isDragging;\n return isDragging ? isDragging(monitor) : target === globalMonitor.getSourceId();\n }\n }, {\n key: \"endDrag\",\n value: function endDrag() {\n var spec = this.spec;\n var monitor = this.monitor;\n var connector = this.connector;\n var end = spec.end;\n\n if (end) {\n end(monitor.getItem(), monitor);\n }\n\n connector.reconnect();\n }\n }]);\n\n return DragSourceImpl;\n}();","import { useContext } from 'react';\nimport { invariant } from '@react-dnd/invariant';\nimport { DndContext } from '../core';\n/**\n * A hook to retrieve the DragDropManager from Context\n */\n\nexport function useDragDropManager() {\n var _useContext = useContext(DndContext),\n dragDropManager = _useContext.dragDropManager;\n\n invariant(dragDropManager != null, 'Expected drag drop context');\n return dragDropManager;\n}","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport { registerSource } from '../../internals';\nimport { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect';\nimport { useDragSource } from './useDragSource';\nimport { useDragDropManager } from '../useDragDropManager';\nimport { useDragType } from './useDragType';\nexport function useRegisteredDragSource(spec, monitor, connector) {\n var manager = useDragDropManager();\n var handler = useDragSource(spec, monitor, connector);\n var itemType = useDragType(spec);\n useIsomorphicLayoutEffect(function registerDragSource() {\n if (itemType != null) {\n var _registerSource = registerSource(itemType, handler, manager),\n _registerSource2 = _slicedToArray(_registerSource, 2),\n handlerId = _registerSource2[0],\n unregister = _registerSource2[1];\n\n monitor.receiveHandlerId(handlerId);\n connector.receiveHandlerId(handlerId);\n return unregister;\n }\n }, [manager, monitor, connector, handler, itemType]);\n}","import { useEffect, useMemo } from 'react';\nimport { DragSourceImpl } from './DragSourceImpl';\nexport function useDragSource(spec, monitor, connector) {\n var handler = useMemo(function () {\n return new DragSourceImpl(spec, monitor, connector);\n }, [monitor, connector]);\n useEffect(function () {\n handler.spec = spec;\n }, [spec]);\n return handler;\n}","import { invariant } from '@react-dnd/invariant';\nimport { useMemo } from 'react';\nexport function useDragType(spec) {\n return useMemo(function () {\n var result = spec.type;\n invariant(result != null, 'spec.type must be defined');\n return result;\n }, [spec]);\n}","export function registerTarget(type, target, manager) {\n var registry = manager.getRegistry();\n var targetId = registry.addTarget(type, target);\n return [targetId, function () {\n return registry.removeTarget(targetId);\n }];\n}\nexport function registerSource(type, source, manager) {\n var registry = manager.getRegistry();\n var sourceId = registry.addSource(type, source);\n return [sourceId, function () {\n return registry.removeSource(sourceId);\n }];\n}","function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport { useMemo } from 'react';\nexport function useOptionalFactory(arg, deps) {\n var memoDeps = _toConsumableArray(deps || []);\n\n if (deps == null && typeof arg !== 'function') {\n memoDeps.push(arg);\n }\n\n return useMemo(function () {\n return typeof arg === 'function' ? arg() : arg;\n }, memoDeps);\n}","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nimport { invariant } from '@react-dnd/invariant';\nvar isCallingCanDrag = false;\nvar isCallingIsDragging = false;\nexport var DragSourceMonitorImpl = /*#__PURE__*/function () {\n function DragSourceMonitorImpl(manager) {\n _classCallCheck(this, DragSourceMonitorImpl);\n\n this.sourceId = null;\n this.internalMonitor = manager.getMonitor();\n }\n\n _createClass(DragSourceMonitorImpl, [{\n key: \"receiveHandlerId\",\n value: function receiveHandlerId(sourceId) {\n this.sourceId = sourceId;\n }\n }, {\n key: \"getHandlerId\",\n value: function getHandlerId() {\n return this.sourceId;\n }\n }, {\n key: \"canDrag\",\n value: function canDrag() {\n invariant(!isCallingCanDrag, 'You may not call monitor.canDrag() inside your canDrag() implementation. ' + 'Read more: http://react-dnd.github.io/react-dnd/docs/api/drag-source-monitor');\n\n try {\n isCallingCanDrag = true;\n return this.internalMonitor.canDragSource(this.sourceId);\n } finally {\n isCallingCanDrag = false;\n }\n }\n }, {\n key: \"isDragging\",\n value: function isDragging() {\n if (!this.sourceId) {\n return false;\n }\n\n invariant(!isCallingIsDragging, 'You may not call monitor.isDragging() inside your isDragging() implementation. ' + 'Read more: http://react-dnd.github.io/react-dnd/docs/api/drag-source-monitor');\n\n try {\n isCallingIsDragging = true;\n return this.internalMonitor.isDraggingSource(this.sourceId);\n } finally {\n isCallingIsDragging = false;\n }\n }\n }, {\n key: \"subscribeToStateChange\",\n value: function subscribeToStateChange(listener, options) {\n return this.internalMonitor.subscribeToStateChange(listener, options);\n }\n }, {\n key: \"isDraggingSource\",\n value: function isDraggingSource(sourceId) {\n return this.internalMonitor.isDraggingSource(sourceId);\n }\n }, {\n key: \"isOverTarget\",\n value: function isOverTarget(targetId, options) {\n return this.internalMonitor.isOverTarget(targetId, options);\n }\n }, {\n key: \"getTargetIds\",\n value: function getTargetIds() {\n return this.internalMonitor.getTargetIds();\n }\n }, {\n key: \"isSourcePublic\",\n value: function isSourcePublic() {\n return this.internalMonitor.isSourcePublic();\n }\n }, {\n key: \"getSourceId\",\n value: function getSourceId() {\n return this.internalMonitor.getSourceId();\n }\n }, {\n key: \"subscribeToOffsetChange\",\n value: function subscribeToOffsetChange(listener) {\n return this.internalMonitor.subscribeToOffsetChange(listener);\n }\n }, {\n key: \"canDragSource\",\n value: function canDragSource(sourceId) {\n return this.internalMonitor.canDragSource(sourceId);\n }\n }, {\n key: \"canDropOnTarget\",\n value: function canDropOnTarget(targetId) {\n return this.internalMonitor.canDropOnTarget(targetId);\n }\n }, {\n key: \"getItemType\",\n value: function getItemType() {\n return this.internalMonitor.getItemType();\n }\n }, {\n key: \"getItem\",\n value: function getItem() {\n return this.internalMonitor.getItem();\n }\n }, {\n key: \"getDropResult\",\n value: function getDropResult() {\n return this.internalMonitor.getDropResult();\n }\n }, {\n key: \"didDrop\",\n value: function didDrop() {\n return this.internalMonitor.didDrop();\n }\n }, {\n key: \"getInitialClientOffset\",\n value: function getInitialClientOffset() {\n return this.internalMonitor.getInitialClientOffset();\n }\n }, {\n key: \"getInitialSourceClientOffset\",\n value: function getInitialSourceClientOffset() {\n return this.internalMonitor.getInitialSourceClientOffset();\n }\n }, {\n key: \"getSourceClientOffset\",\n value: function getSourceClientOffset() {\n return this.internalMonitor.getSourceClientOffset();\n }\n }, {\n key: \"getClientOffset\",\n value: function getClientOffset() {\n return this.internalMonitor.getClientOffset();\n }\n }, {\n key: \"getDifferenceFromInitialOffset\",\n value: function getDifferenceFromInitialOffset() {\n return this.internalMonitor.getDifferenceFromInitialOffset();\n }\n }]);\n\n return DragSourceMonitorImpl;\n}();","import { invariant } from '@react-dnd/invariant';\nimport { cloneElement, isValidElement } from 'react';\n\nfunction throwIfCompositeComponentElement(element) {\n // Custom components can no longer be wrapped directly in React DnD 2.0\n // so that we don't need to depend on findDOMNode() from react-dom.\n if (typeof element.type === 'string') {\n return;\n }\n\n var displayName = element.type.displayName || element.type.name || 'the component';\n throw new Error('Only native element nodes can now be passed to React DnD connectors.' + \"You can either wrap \".concat(displayName, \" into a
, or turn it into a \") + 'drag source or a drop target itself.');\n}\n\nfunction wrapHookToRecognizeElement(hook) {\n return function () {\n var elementOrNode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n // When passed a node, call the hook straight away.\n if (!isValidElement(elementOrNode)) {\n var node = elementOrNode;\n hook(node, options); // return the node so it can be chained (e.g. when within callback refs\n //
connectDragSource(connectDropTarget(node))}/>\n\n return node;\n } // If passed a ReactElement, clone it and attach this function as a ref.\n // This helps us achieve a neat API where user doesn't even know that refs\n // are being used under the hood.\n\n\n var element = elementOrNode;\n throwIfCompositeComponentElement(element); // When no options are passed, use the hook directly\n\n var ref = options ? function (node) {\n return hook(node, options);\n } : hook;\n return cloneWithRef(element, ref);\n };\n}\n\nexport function wrapConnectorHooks(hooks) {\n var wrappedHooks = {};\n Object.keys(hooks).forEach(function (key) {\n var hook = hooks[key]; // ref objects should be passed straight through without wrapping\n\n if (key.endsWith('Ref')) {\n wrappedHooks[key] = hooks[key];\n } else {\n var wrappedHook = wrapHookToRecognizeElement(hook);\n\n wrappedHooks[key] = function () {\n return wrappedHook;\n };\n }\n });\n return wrappedHooks;\n}\n\nfunction setRef(ref, node) {\n if (typeof ref === 'function') {\n ref(node);\n } else {\n ref.current = node;\n }\n}\n\nfunction cloneWithRef(element, newRef) {\n var previousRef = element.ref;\n invariant(typeof previousRef !== 'string', 'Cannot connect React DnD to an element with an existing string ref. ' + 'Please convert it to use a callback ref instead, or wrap it into a or
. ' + 'Read more: https://reactjs.org/docs/refs-and-the-dom.html#callback-refs');\n\n if (!previousRef) {\n // When there is no ref on the element, use the new ref directly\n return cloneElement(element, {\n ref: newRef\n });\n } else {\n return cloneElement(element, {\n ref: function ref(node) {\n setRef(previousRef, node);\n setRef(newRef, node);\n }\n });\n }\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nexport function isRef(obj) {\n return (// eslint-disable-next-line no-prototype-builtins\n obj !== null && _typeof(obj) === 'object' && Object.prototype.hasOwnProperty.call(obj, 'current')\n );\n}","function shallowEqual(objA, objB, compare, compareContext) {\n var compareResult = compare ? compare.call(compareContext, objA, objB) : void 0;\n\n if (compareResult !== void 0) {\n return !!compareResult;\n }\n\n if (objA === objB) {\n return true;\n }\n\n if (typeof objA !== 'object' || !objA || typeof objB !== 'object' || !objB) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n var bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB); // Test for A's keys different from B.\n\n for (var idx = 0; idx < keysA.length; idx++) {\n var key = keysA[idx];\n\n if (!bHasOwnProperty(key)) {\n return false;\n }\n\n var valueA = objA[key];\n var valueB = objB[key];\n compareResult = compare ? compare.call(compareContext, valueA, valueB, key) : void 0;\n\n if (compareResult === false || compareResult === void 0 && valueA !== valueB) {\n return false;\n }\n }\n\n return true;\n}\n\nexport { shallowEqual };\n//# sourceMappingURL=shallowequal.esm.js.map\n","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nimport { wrapConnectorHooks } from './wrapConnectorHooks';\nimport { isRef } from './isRef';\nimport { shallowEqual } from '@react-dnd/shallowequal';\nexport var SourceConnector = /*#__PURE__*/function () {\n function SourceConnector(backend) {\n var _this = this;\n\n _classCallCheck(this, SourceConnector);\n\n this.hooks = wrapConnectorHooks({\n dragSource: function dragSource(node, options) {\n _this.clearDragSource();\n\n _this.dragSourceOptions = options || null;\n\n if (isRef(node)) {\n _this.dragSourceRef = node;\n } else {\n _this.dragSourceNode = node;\n }\n\n _this.reconnectDragSource();\n },\n dragPreview: function dragPreview(node, options) {\n _this.clearDragPreview();\n\n _this.dragPreviewOptions = options || null;\n\n if (isRef(node)) {\n _this.dragPreviewRef = node;\n } else {\n _this.dragPreviewNode = node;\n }\n\n _this.reconnectDragPreview();\n }\n });\n this.handlerId = null; // The drop target may either be attached via ref or connect function\n\n this.dragSourceRef = null;\n this.dragSourceOptionsInternal = null; // The drag preview may either be attached via ref or connect function\n\n this.dragPreviewRef = null;\n this.dragPreviewOptionsInternal = null;\n this.lastConnectedHandlerId = null;\n this.lastConnectedDragSource = null;\n this.lastConnectedDragSourceOptions = null;\n this.lastConnectedDragPreview = null;\n this.lastConnectedDragPreviewOptions = null;\n this.backend = backend;\n }\n\n _createClass(SourceConnector, [{\n key: \"receiveHandlerId\",\n value: function receiveHandlerId(newHandlerId) {\n if (this.handlerId === newHandlerId) {\n return;\n }\n\n this.handlerId = newHandlerId;\n this.reconnect();\n }\n }, {\n key: \"connectTarget\",\n get: function get() {\n return this.dragSource;\n }\n }, {\n key: \"dragSourceOptions\",\n get: function get() {\n return this.dragSourceOptionsInternal;\n },\n set: function set(options) {\n this.dragSourceOptionsInternal = options;\n }\n }, {\n key: \"dragPreviewOptions\",\n get: function get() {\n return this.dragPreviewOptionsInternal;\n },\n set: function set(options) {\n this.dragPreviewOptionsInternal = options;\n }\n }, {\n key: \"reconnect\",\n value: function reconnect() {\n this.reconnectDragSource();\n this.reconnectDragPreview();\n }\n }, {\n key: \"reconnectDragSource\",\n value: function reconnectDragSource() {\n var dragSource = this.dragSource; // if nothing has changed then don't resubscribe\n\n var didChange = this.didHandlerIdChange() || this.didConnectedDragSourceChange() || this.didDragSourceOptionsChange();\n\n if (didChange) {\n this.disconnectDragSource();\n }\n\n if (!this.handlerId) {\n return;\n }\n\n if (!dragSource) {\n this.lastConnectedDragSource = dragSource;\n return;\n }\n\n if (didChange) {\n this.lastConnectedHandlerId = this.handlerId;\n this.lastConnectedDragSource = dragSource;\n this.lastConnectedDragSourceOptions = this.dragSourceOptions;\n this.dragSourceUnsubscribe = this.backend.connectDragSource(this.handlerId, dragSource, this.dragSourceOptions);\n }\n }\n }, {\n key: \"reconnectDragPreview\",\n value: function reconnectDragPreview() {\n var dragPreview = this.dragPreview; // if nothing has changed then don't resubscribe\n\n var didChange = this.didHandlerIdChange() || this.didConnectedDragPreviewChange() || this.didDragPreviewOptionsChange();\n\n if (didChange) {\n this.disconnectDragPreview();\n }\n\n if (!this.handlerId) {\n return;\n }\n\n if (!dragPreview) {\n this.lastConnectedDragPreview = dragPreview;\n return;\n }\n\n if (didChange) {\n this.lastConnectedHandlerId = this.handlerId;\n this.lastConnectedDragPreview = dragPreview;\n this.lastConnectedDragPreviewOptions = this.dragPreviewOptions;\n this.dragPreviewUnsubscribe = this.backend.connectDragPreview(this.handlerId, dragPreview, this.dragPreviewOptions);\n }\n }\n }, {\n key: \"didHandlerIdChange\",\n value: function didHandlerIdChange() {\n return this.lastConnectedHandlerId !== this.handlerId;\n }\n }, {\n key: \"didConnectedDragSourceChange\",\n value: function didConnectedDragSourceChange() {\n return this.lastConnectedDragSource !== this.dragSource;\n }\n }, {\n key: \"didConnectedDragPreviewChange\",\n value: function didConnectedDragPreviewChange() {\n return this.lastConnectedDragPreview !== this.dragPreview;\n }\n }, {\n key: \"didDragSourceOptionsChange\",\n value: function didDragSourceOptionsChange() {\n return !shallowEqual(this.lastConnectedDragSourceOptions, this.dragSourceOptions);\n }\n }, {\n key: \"didDragPreviewOptionsChange\",\n value: function didDragPreviewOptionsChange() {\n return !shallowEqual(this.lastConnectedDragPreviewOptions, this.dragPreviewOptions);\n }\n }, {\n key: \"disconnectDragSource\",\n value: function disconnectDragSource() {\n if (this.dragSourceUnsubscribe) {\n this.dragSourceUnsubscribe();\n this.dragSourceUnsubscribe = undefined;\n }\n }\n }, {\n key: \"disconnectDragPreview\",\n value: function disconnectDragPreview() {\n if (this.dragPreviewUnsubscribe) {\n this.dragPreviewUnsubscribe();\n this.dragPreviewUnsubscribe = undefined;\n this.dragPreviewNode = null;\n this.dragPreviewRef = null;\n }\n }\n }, {\n key: \"dragSource\",\n get: function get() {\n return this.dragSourceNode || this.dragSourceRef && this.dragSourceRef.current;\n }\n }, {\n key: \"dragPreview\",\n get: function get() {\n return this.dragPreviewNode || this.dragPreviewRef && this.dragPreviewRef.current;\n }\n }, {\n key: \"clearDragSource\",\n value: function clearDragSource() {\n this.dragSourceNode = null;\n this.dragSourceRef = null;\n }\n }, {\n key: \"clearDragPreview\",\n value: function clearDragPreview() {\n this.dragPreviewNode = null;\n this.dragPreviewRef = null;\n }\n }]);\n\n return SourceConnector;\n}();","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport equal from 'fast-deep-equal';\nimport { useState, useCallback } from 'react';\nimport { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect';\n/**\n *\n * @param monitor The monitor to collect state from\n * @param collect The collecting function\n * @param onUpdate A method to invoke when updates occur\n */\n\nexport function useCollector(monitor, collect, onUpdate) {\n var _useState = useState(function () {\n return collect(monitor);\n }),\n _useState2 = _slicedToArray(_useState, 2),\n collected = _useState2[0],\n setCollected = _useState2[1];\n\n var updateCollected = useCallback(function () {\n var nextValue = collect(monitor); // This needs to be a deep-equality check because some monitor-collected values\n // include XYCoord objects that may be equivalent, but do not have instance equality.\n\n if (!equal(collected, nextValue)) {\n setCollected(nextValue);\n\n if (onUpdate) {\n onUpdate();\n }\n }\n }, [collected, monitor, onUpdate]); // update the collected properties after react renders.\n // Note that the \"Dustbin Stress Test\" fails if this is not\n // done when the component updates\n\n useIsomorphicLayoutEffect(updateCollected);\n return [collected, updateCollected];\n}","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect';\nimport { useCollector } from './useCollector';\nexport function useMonitorOutput(monitor, collect, onCollect) {\n var _useCollector = useCollector(monitor, collect, onCollect),\n _useCollector2 = _slicedToArray(_useCollector, 2),\n collected = _useCollector2[0],\n updateCollected = _useCollector2[1];\n\n useIsomorphicLayoutEffect(function subscribeToMonitorStateChange() {\n var handlerId = monitor.getHandlerId();\n\n if (handlerId == null) {\n return;\n }\n\n return monitor.subscribeToStateChange(updateCollected, {\n handlerIds: [handlerId]\n });\n }, [monitor, updateCollected]);\n return collected;\n}","import { useMonitorOutput } from './useMonitorOutput';\nexport function useCollectedProps(collector, monitor, connector) {\n return useMonitorOutput(monitor, collector || function () {\n return {};\n }, function () {\n return connector.reconnect();\n });\n}","import { useMemo } from 'react';\nexport function useConnectDragSource(connector) {\n return useMemo(function () {\n return connector.hooks.dragSource();\n }, [connector]);\n}\nexport function useConnectDragPreview(connector) {\n return useMemo(function () {\n return connector.hooks.dragPreview();\n }, [connector]);\n}","import { useRegisteredDragSource } from './useRegisteredDragSource';\nimport { useOptionalFactory } from '../useOptionalFactory';\nimport { useDragSourceMonitor } from './useDragSourceMonitor';\nimport { useDragSourceConnector } from './useDragSourceConnector';\nimport { useCollectedProps } from '../useCollectedProps';\nimport { useConnectDragPreview, useConnectDragSource } from './connectors';\nimport { invariant } from '@react-dnd/invariant';\n/**\n * useDragSource hook\n * @param sourceSpec The drag source specification (object or function, function preferred)\n * @param deps The memoization deps array to use when evaluating spec changes\n */\n\nexport function useDrag(specArg, deps) {\n var spec = useOptionalFactory(specArg, deps);\n invariant(!spec.begin, \"useDrag::spec.begin was deprecated in v14. Replace spec.begin() with spec.item(). (see more here - https://react-dnd.github.io/react-dnd/docs/api/use-drag)\");\n var monitor = useDragSourceMonitor();\n var connector = useDragSourceConnector(spec.options, spec.previewOptions);\n useRegisteredDragSource(spec, monitor, connector);\n return [useCollectedProps(spec.collect, monitor, connector), useConnectDragSource(connector), useConnectDragPreview(connector)];\n}","import { useMemo } from 'react';\nimport { DragSourceMonitorImpl } from '../../internals';\nimport { useDragDropManager } from '../useDragDropManager';\nexport function useDragSourceMonitor() {\n var manager = useDragDropManager();\n return useMemo(function () {\n return new DragSourceMonitorImpl(manager);\n }, [manager]);\n}","import { useMemo } from 'react';\nimport { SourceConnector } from '../../internals';\nimport { useDragDropManager } from '../useDragDropManager';\nimport { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect';\nexport function useDragSourceConnector(dragSourceOptions, dragPreviewOptions) {\n var manager = useDragDropManager();\n var connector = useMemo(function () {\n return new SourceConnector(manager.getBackend());\n }, [manager]);\n useIsomorphicLayoutEffect(function () {\n connector.dragSourceOptions = dragSourceOptions || null;\n connector.reconnect();\n }, [connector, dragSourceOptions]);\n useIsomorphicLayoutEffect(function () {\n connector.dragPreviewOptions = dragPreviewOptions || null;\n connector.reconnect();\n }, [connector, dragPreviewOptions]);\n return connector;\n}","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { useDrag } from 'react-dnd';\nimport { Icon } from '../';\nimport { StringNumber } from '../../types';\n\n/**\n *\n */\nconst Thumbnail = ({\n displaySetInstanceUID,\n className,\n imageSrc,\n imageAltText,\n description,\n seriesNumber,\n numInstances,\n dragData,\n isActive,\n onClick,\n onDoubleClick,\n}) => {\n // TODO: We should wrap our thumbnail to create a \"DraggableThumbnail\", as\n // this will still allow for \"drag\", even if there is no drop target for the\n // specified item.\n const [collectedProps, drag, dragPreview] = useDrag({\n type: 'displayset',\n item: { ...dragData },\n canDrag: function(monitor) {\n return Object.keys(dragData).length !== 0;\n },\n });\n\n return (\n \n
\n \n {imageSrc ? (\n \n ) : (\n
{imageAltText}
\n )}\n
\n
\n
\n {'S: '}\n {seriesNumber}\n
\n
\n {numInstances}\n
\n
\n
{description}
\n
\n
\n );\n};\n\nThumbnail.propTypes = {\n displaySetInstanceUID: PropTypes.string.isRequired,\n className: PropTypes.string,\n imageSrc: PropTypes.string,\n /**\n * Data the thumbnail should expose to a receiving drop target. Use a matching\n * `dragData.type` to identify which targets can receive this draggable item.\n * If this is not set, drag-n-drop will be disabled for this thumbnail.\n *\n * Ref: https://react-dnd.github.io/react-dnd/docs/api/use-drag#specification-object-members\n */\n dragData: PropTypes.shape({\n /** Must match the \"type\" a dropTarget expects */\n type: PropTypes.string.isRequired,\n }),\n imageAltText: PropTypes.string,\n description: PropTypes.string.isRequired,\n seriesNumber: StringNumber.isRequired,\n numInstances: PropTypes.number.isRequired,\n isActive: PropTypes.bool.isRequired,\n onClick: PropTypes.func.isRequired,\n onDoubleClick: PropTypes.func.isRequired,\n};\n\nThumbnail.defaultProps = {\n dragData: {},\n};\n\nexport default Thumbnail;\n","import Thumbnail from './Thumbnail';\nexport default Thumbnail;\n","import React from 'react';\nimport classnames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { useDrag } from 'react-dnd';\nimport { Icon, Tooltip, Typography } from '../';\n\nconst ThumbnailNoImage = ({\n displaySetInstanceUID,\n description,\n seriesDate,\n modality,\n modalityTooltip,\n onClick,\n onDoubleClick,\n canReject,\n onReject,\n dragData,\n isActive,\n}) => {\n const [collectedProps, drag, dragPreview] = useDrag({\n type: \"displayset\",\n item: { ...dragData },\n canDrag: function(monitor) {\n return Object.keys(dragData).length !== 0;\n },\n });\n\n return (\n \n
\n
\n
\n \n {modalityTooltip}}\n >\n
\n {modality}\n
\n \n {seriesDate}\n
\n
\n {canReject && (\n \n )}\n
\n {description}\n
\n
\n
\n
\n
\n );\n};\n\nThumbnailNoImage.propTypes = {\n displaySetInstanceUID: PropTypes.string.isRequired,\n /**\n * Data the thumbnail should expose to a receiving drop target. Use a matching\n * `dragData.type` to identify which targets can receive this draggable item.\n * If this is not set, drag-n-drop will be disabled for this thumbnail.\n *\n * Ref: https://react-dnd.github.io/react-dnd/docs/api/use-drag#specification-object-members\n */\n dragData: PropTypes.shape({\n /** Must match the \"type\" a dropTarget expects */\n type: PropTypes.string.isRequired,\n }),\n description: PropTypes.string.isRequired,\n modality: PropTypes.string.isRequired,\n /* Tooltip message to display when modality text is hovered */\n modalityTooltip: PropTypes.string.isRequired,\n seriesDate: PropTypes.string.isRequired,\n onClick: PropTypes.func.isRequired,\n onDoubleClick: PropTypes.func.isRequired,\n isActive: PropTypes.bool.isRequired,\n};\n\nexport default ThumbnailNoImage;\n","import ThumbnailNoImage from './ThumbnailNoImage';\nexport default ThumbnailNoImage;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\nimport { Icon, Thumbnail, Tooltip } from '../';\nimport { StringNumber } from '../../types';\n\nconst ThumbnailTracked = ({\n displaySetInstanceUID,\n className,\n imageSrc,\n imageAltText,\n description,\n seriesNumber,\n numInstances,\n dragData,\n onClick,\n onDoubleClick,\n onClickUntrack,\n viewportIdentificator,\n isTracked,\n isActive,\n}) => {\n const trackedIcon = isTracked ? 'circled-checkmark' : 'dotted-circle';\n const viewportIdentificatorLabel = viewportIdentificator.join(', ');\n const renderViewportLabels = () => {\n const MAX_LABELS_PER_COL = 3;\n const shouldShowStack = viewportIdentificator.length > MAX_LABELS_PER_COL;\n if (shouldShowStack) {\n return (\n
\n
\n {viewportIdentificator.slice(0, MAX_LABELS_PER_COL).map(label => (\n
{label}
\n ))}\n
\n \n Series is displayed
in viewport{' '}\n {viewportIdentificatorLabel}\n
\n }\n >\n \n \n \n );\n }\n\n return viewportIdentificator.map(label =>
{label}
);\n };\n\n return (\n \n
\n \n \n
\n \n
\n
\n \n Series is\n \n {isTracked ? ' tracked' : ' untracked'}\n \n \n {!!viewportIdentificator.length && (\n \n in viewport\n \n {viewportIdentificatorLabel}\n \n \n )}\n
\n
\n }\n >\n \n \n
\n {renderViewportLabels()}\n
\n \n {isTracked && (\n
\n \n
\n )}\n \n \n \n );\n};\n\nThumbnailTracked.propTypes = {\n /**\n * Data the thumbnail should expose to a receiving drop target. Use a matching\n * `dragData.type` to identify which targets can receive this draggable item.\n * If this is not set, drag-n-drop will be disabled for this thumbnail.\n *\n * Ref: https://react-dnd.github.io/react-dnd/docs/api/use-drag#specification-object-members\n */\n dragData: PropTypes.shape({\n /** Must match the \"type\" a dropTarget expects */\n type: PropTypes.string.isRequired,\n }),\n displaySetInstanceUID: PropTypes.string.isRequired,\n className: PropTypes.string,\n imageSrc: PropTypes.string,\n imageAltText: PropTypes.string,\n description: PropTypes.string.isRequired,\n seriesNumber: StringNumber.isRequired,\n numInstances: PropTypes.number.isRequired,\n onClick: PropTypes.func.isRequired,\n onDoubleClick: PropTypes.func.isRequired,\n onClickUntrack: PropTypes.func.isRequired,\n viewportIdentificator: PropTypes.array,\n isTracked: PropTypes.bool,\n isActive: PropTypes.bool.isRequired,\n};\n\nexport default ThumbnailTracked;\n","import ThumbnailTracked from './ThumbnailTracked';\nexport default ThumbnailTracked;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { Thumbnail, ThumbnailNoImage, ThumbnailTracked } from '../';\nimport * as Types from '../../types';\n\nconst ThumbnailList = ({\n thumbnails,\n onThumbnailClick,\n onThumbnailDoubleClick,\n onClickUntrack,\n activeDisplaySetInstanceUIDs = [],\n}) => {\n return (\n
\n {thumbnails.map(\n ({\n displaySetInstanceUID,\n description,\n dragData,\n seriesNumber,\n numInstances,\n modality,\n componentType,\n seriesDate,\n viewportIdentificator,\n isTracked,\n canReject,\n onReject,\n imageSrc,\n imageAltText,\n }) => {\n const isActive = activeDisplaySetInstanceUIDs.includes(\n displaySetInstanceUID\n );\n\n switch (componentType) {\n case 'thumbnail':\n return (\n onThumbnailClick(displaySetInstanceUID)}\n onDoubleClick={() =>\n onThumbnailDoubleClick(displaySetInstanceUID)\n }\n />\n );\n case 'thumbnailTracked':\n return (\n onThumbnailClick(displaySetInstanceUID)}\n onDoubleClick={() =>\n onThumbnailDoubleClick(displaySetInstanceUID)\n }\n onClickUntrack={() => onClickUntrack(displaySetInstanceUID)}\n />\n );\n case 'thumbnailNoImage':\n return (\n onThumbnailClick(displaySetInstanceUID)}\n onDoubleClick={() =>\n onThumbnailDoubleClick(displaySetInstanceUID)\n }\n viewportIdentificator={viewportIdentificator}\n />\n );\n default:\n return <>;\n }\n }\n )}\n
\n );\n};\n\nThumbnailList.propTypes = {\n thumbnails: PropTypes.arrayOf(\n PropTypes.shape({\n displaySetInstanceUID: PropTypes.string.isRequired,\n imageSrc: PropTypes.string,\n imageAltText: PropTypes.string,\n seriesDate: PropTypes.string,\n seriesNumber: Types.StringNumber,\n numInstances: PropTypes.number,\n description: PropTypes.string,\n componentType: Types.ThumbnailType.isRequired,\n viewportIdentificator: Types.StringArray,\n isTracked: PropTypes.bool,\n /**\n * Data the thumbnail should expose to a receiving drop target. Use a matching\n * `dragData.type` to identify which targets can receive this draggable item.\n * If this is not set, drag-n-drop will be disabled for this thumbnail.\n *\n * Ref: https://react-dnd.github.io/react-dnd/docs/api/use-drag#specification-object-members\n */\n dragData: PropTypes.shape({\n /** Must match the \"type\" a dropTarget expects */\n type: PropTypes.string.isRequired,\n }),\n })\n ),\n activeDisplaySetInstanceUIDs: PropTypes.arrayOf(PropTypes.string),\n onThumbnailClick: PropTypes.func.isRequired,\n onThumbnailDoubleClick: PropTypes.func.isRequired,\n onClickUntrack: PropTypes.func.isRequired,\n};\n\n// TODO: Support \"Viewport Identificator\"?\nfunction _getModalityTooltip(modality) {\n if (_modalityTooltips.hasOwnProperty(modality)) {\n return _modalityTooltips[modality];\n }\n\n return 'Unknown';\n}\n\nconst _modalityTooltips = {\n SR: 'Structured Report',\n SEG: 'Segmentation',\n RT: 'RT Structure Set',\n};\n\nexport default ThumbnailList;\n","import ThumbnailList from './ThumbnailList';\nexport default ThumbnailList;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\nimport { IconButton, Icon, Tooltip } from '../';\n\nconst ToolbarButton = ({\n type,\n id,\n icon,\n label,\n commands,\n onInteraction,\n dropdownContent,\n //\n isActive: _isActive,\n bState = {},\n //\n}) => {\n const { primaryToolId } = bState;\n const isActive = _isActive || (type === 'tool' && id === primaryToolId);\n const classes = {\n type: {\n primary: isActive\n ? 'text-black'\n : 'text-common-bright hover:bg-primary-dark hover:text-primary-light',\n secondary: isActive\n ? 'text-black'\n : 'text-white hover:bg-secondary-dark hover:text-white focus:bg-secondary-dark focus:text-white',\n },\n };\n\n const activeClass = isActive ? 'active' : '';\n const shouldShowDropdown = !!isActive && !!dropdownContent;\n\n return (\n
\n \n {\n onInteraction({\n itemId: id,\n interactionType: type,\n commands,\n });\n }}\n name={label}\n key={id}\n id={id}\n >\n \n \n \n
\n );\n};\n\nToolbarButton.defaultProps = {\n dropdownContent: null,\n isActive: false,\n type: 'action',\n};\n\nToolbarButton.propTypes = {\n /* Influences background/hover styling */\n type: PropTypes.oneOf(['action', 'toggle', 'tool']),\n id: PropTypes.string.isRequired,\n isActive: PropTypes.bool,\n onInteraction: PropTypes.func.isRequired,\n icon: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n /** Tooltip content can be replaced for a customized content by passing a node to this value. */\n dropdownContent: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n};\n\nexport default ToolbarButton;\n","import ToolbarButton from './ToolbarButton';\nexport default ToolbarButton;\n","import { ContextMenu } from '../';\nimport PropTypes from 'prop-types';\nimport React from 'react';\n\nconst ContextMenuMeasurements = ({\n onGetMenuItems,\n onSetLabel,\n onClose,\n onDelete,\n}) => {\n const defaultMenuItems = [\n {\n label: 'Delete measurement',\n actionType: 'Delete',\n action: item => {\n onDelete(item);\n onClose();\n },\n value: {},\n },\n {\n label: 'Add Label',\n actionType: 'setLabel',\n action: item => {\n onSetLabel(item);\n onClose();\n },\n value: {},\n },\n ];\n\n const menuItems = onGetMenuItems(defaultMenuItems);\n\n return ;\n};\n\nContextMenuMeasurements.propTypes = {\n onClose: PropTypes.func.isRequired,\n onSetLabel: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n onGetMenuItems: PropTypes.func.isRequired,\n};\n\nexport default ContextMenuMeasurements;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\nimport { IconButton, Icon } from '../';\n\nimport './ExpandableToolbarButton.css';\n\nconst ExpandableToolbarButton = ({\n type,\n id,\n isActive,\n onClick,\n icon,\n className,\n content: Content,\n contentProps,\n}) => {\n const classes = {\n type: {\n primary: isActive\n ? 'text-black'\n : 'text-common-bright hover:bg-primary-dark hover:text-primary-light',\n secondary: isActive\n ? 'text-black'\n : 'text-white hover:bg-secondary-dark focus:bg-secondary-dark',\n },\n };\n\n const onChildClickHandler = (...args) => {\n onClick(...args);\n\n if (contentProps.onClick) {\n contentProps.onClick(...args);\n }\n };\n\n const onClickHandler = (...args) => {\n onClick(...args);\n };\n\n return (\n
\n \n \n \n
\n \n \n
\n
\n \n );\n};\n\nconst noop = () => {};\n\nExpandableToolbarButton.defaultProps = {\n id: '',\n icon: 'clipboard',\n isActive: false,\n type: 'primary',\n content: null,\n onClick: noop,\n};\n\nExpandableToolbarButton.propTypes = {\n /* Influences background/hover styling */\n type: PropTypes.oneOf(['primary', 'secondary']),\n id: PropTypes.string.isRequired,\n isActive: PropTypes.bool,\n onClick: PropTypes.func.isRequired,\n icon: PropTypes.string.isRequired,\n /** Expandable toolbar button content can be replaced for a customized content by passing a node to this value. */\n content: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n contentProps: PropTypes.object,\n};\n\nexport default ExpandableToolbarButton;\n","import React, { useState } from 'react';\nimport classnames from 'classnames';\nimport PropTypes from 'prop-types';\n\nconst ListMenu = ({ items = [], renderer, onClick }) => {\n const [selectedIndex, setSelectedIndex] = useState(null);\n\n const ListItem = ({ item, index, isSelected }) => {\n const flex = 'flex flex-row justify-between items-center';\n const theme = 'bg-indigo-dark';\n\n const onClickHandler = () => {\n setSelectedIndex(index);\n onClick({ item, selectedIndex: index });\n if (item.onClick) item.onClick({ ...item, index, isSelected });\n };\n\n return (\n
\n {renderer && renderer({ ...item, index, isSelected })}\n
\n );\n };\n\n return (\n
\n {items.map((item, index) => {\n return (\n \n );\n })}\n
\n );\n};\n\nconst noop = () => { };\n\nListMenu.propTypes = {\n items: PropTypes.array.isRequired,\n renderer: PropTypes.func.isRequired,\n onClick: PropTypes.func\n};\n\nListMenu.defaultProps = {\n onClick: noop\n};\n\nexport default ListMenu;\n","import ListMenu from './ListMenu';\nexport default ListMenu;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { useTranslation } from 'react-i18next';\n\nimport './tooltip.css';\n\nconst arrowPositionStyle = {\n bottom: {\n top: -15,\n left: '50%',\n transform: 'translateX(-50%)',\n },\n 'bottom-left': { top: -15, left: 5 },\n 'bottom-right': { top: -15, right: 5 },\n right: {\n top: 'calc(50% - 8px)',\n left: -15,\n transform: 'rotate(270deg)',\n },\n left: {\n top: 'calc(50% - 8px)',\n right: -15,\n transform: 'rotate(-270deg)',\n },\n};\n\nconst Tooltip = ({\n content,\n isSticky,\n position,\n className,\n tight,\n children,\n isDisabled,\n}) => {\n const [isActive, setIsActive] = useState(false);\n const { t } = useTranslation('Buttons');\n\n const handleMouseOver = () => {\n if (!isActive) {\n setIsActive(true);\n }\n };\n\n const handleMouseOut = () => {\n if (isActive) {\n setIsActive(false);\n }\n };\n\n const isOpen = (isSticky || isActive) && !isDisabled;\n\n return (\n \n {children}\n \n \n {typeof content === 'string' ? t(content) : content}\n \n \n \n \n \n \n );\n};\n\nTooltip.defaultProps = {\n tight: false,\n isSticky: false,\n position: 'bottom',\n isDisabled: false,\n};\n\nTooltip.propTypes = {\n /** prevents tooltip from rendering despite hover/active/sticky */\n isDisabled: PropTypes.bool,\n content: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n position: PropTypes.oneOf([\n 'bottom',\n 'bottom-left',\n 'bottom-right',\n 'left',\n 'right',\n ]),\n isSticky: PropTypes.bool,\n tight: PropTypes.bool,\n children: PropTypes.node.isRequired,\n className: PropTypes.string,\n};\n\nexport default Tooltip;\n","import Tooltip from './Tooltip';\nexport default Tooltip;\n","import React, { useState, useRef, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { Icon } from '../';\n\nconst DELAY_TO_SHOW = 1000;\nconst DELAY_TO_HIDE = 10; // it needs at least a little delay to prevent tooltip to suddenly hide\nconst DELAY_TO_HIDE_AFTER_COPYING = 1000;\n\nconst TooltipClipboard = ({ children, text }) => {\n const [isActive, setIsActive] = useState(false);\n const [message, setMessage] = useState(null);\n const [isCopying, setIsCopying] = useState(false);\n const timeoutShow = useRef(null);\n const timeoutHide = useRef(null);\n const tooltipBoxRef = useRef(null);\n const tooltipContainerRef = useRef(null);\n\n const copyToClipboard = async text => {\n setIsCopying(true);\n try {\n await navigator.clipboard.writeText(text);\n setMessage('Copied!');\n } catch (err) {\n console.error('Failed to copy: ', err);\n setMessage('Failed to copy!');\n } finally {\n refreshElementPosition();\n\n setTimeout(() => {\n resetState();\n }, DELAY_TO_HIDE_AFTER_COPYING);\n }\n };\n\n const resetState = () => {\n setIsActive(false);\n setMessage(null);\n setIsCopying(false);\n };\n\n const resetTimeout = timeOut => {\n if (timeOut.current !== null) {\n clearTimeout(timeOut.current);\n }\n };\n\n const handleMouseOver = () => {\n resetTimeout(timeoutHide);\n\n if (!isActive) {\n timeoutShow.current = setTimeout(() => {\n timeoutShow.current = null;\n setIsActive(true);\n }, DELAY_TO_SHOW);\n }\n };\n\n const handleMouseOut = e => {\n resetTimeout(timeoutShow);\n\n if (isActive && !isCopying) {\n timeoutHide.current = setTimeout(() => {\n timeoutHide.current = null;\n resetState();\n }, DELAY_TO_HIDE);\n }\n };\n\n /**\n * Trick to set the tooltip position based on its parent position\n * because the tooltip box is not relative-positioned to avoid the tooltip\n * to be clipped if the parent container is overflow-hidden\n */\n const refreshElementPosition = () => {\n const tooltipContainer = tooltipContainerRef.current;\n const tooltipBox = tooltipBoxRef.current;\n\n const {\n left: containerX,\n top: containerY,\n height: containerHeight,\n } = tooltipContainer.getBoundingClientRect();\n\n const top = containerY + containerHeight + 'px';\n const left = containerX + 'px';\n\n tooltipBox.style.top = top;\n tooltipBox.style.left = left;\n };\n\n useEffect(() => {\n if (isActive) {\n refreshElementPosition();\n if (typeof window !== 'undefined') {\n window.addEventListener('scroll', refreshElementPosition);\n }\n } else {\n if (typeof window !== 'undefined') {\n window.removeEventListener('scroll', refreshElementPosition);\n }\n }\n\n return () => {\n if (typeof window !== 'undefined') {\n window.removeEventListener('scroll', refreshElementPosition);\n }\n };\n }, [isActive]);\n\n const onClickHandler = e => {\n e.stopPropagation();\n copyToClipboard(text || children);\n };\n\n return (\n \n {children}\n \n \n {message || (\n <>\n {children}\n
\n \n
\n \n )}\n \n \n \n );\n};\n\nTooltipClipboard.defaultProps = {\n text: '',\n};\n\nTooltipClipboard.propTypes = {\n text: PropTypes.string,\n children: PropTypes.node.isRequired,\n};\n\nexport default TooltipClipboard;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\nconst baseClasses = 'm-0 leading-tight';\n\nconst defaultVariantMapping = {\n h1: 'h1',\n h2: 'h2',\n h3: 'h3',\n h4: 'h4',\n h5: 'h5',\n h6: 'h6',\n subtitle: 'h6',\n body: 'p',\n};\n\nconst defaults = {\n align: 'inherit',\n color: 'initial',\n display: 'initial',\n gutterBottom: false,\n noWrap: false,\n paragraph: false,\n variant: 'body',\n};\n\nconst classes = {\n variant: {\n h1: 'text-6xl',\n h2: 'text-5xl',\n h3: 'text-4xl',\n h4: 'text-3xl',\n h5: 'text-2xl',\n h6: 'text-xl',\n subtitle: 'text-lg',\n body: 'text-base',\n caption: 'text-xs',\n button: 'text-sm uppercase',\n overline: 'text-xs uppercase',\n srOnly: 'absolute h-0 w-0 hidden',\n inherit: '',\n },\n color: {\n initial: 'text-white',\n inherit: 'text-inherit',\n primary: 'text-primary-main',\n primaryActive: 'text-primary-active',\n secondary: 'text-common-light',\n error: 'text-red-600',\n },\n align: {\n inherit: '',\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n justify: 'text-justify',\n },\n display: {\n initial: '',\n block: 'block',\n inline: 'inline',\n },\n gutterBottom: {\n true: 'mb-3',\n false: '',\n },\n paragraph: {\n true: 'mb-3',\n false: '',\n },\n noWrap: {\n true: 'truncate',\n false: '',\n },\n};\n\nconst Typography = ({\n align = defaults.align,\n color = defaults.color,\n display = defaults.display,\n gutterBottom = defaults.gutterBottom,\n noWrap = defaults.noWrap,\n paragraph = defaults.paragraph,\n variant = defaults.variant,\n component,\n className,\n ...rest\n}) => {\n const Component =\n component || (paragraph ? 'p' : defaultVariantMapping[variant]) || 'span';\n return (\n \n );\n};\n\nTypography.propTypes = {\n component: PropTypes.elementType,\n paragraph: PropTypes.bool,\n display: PropTypes.oneOf(['initial', 'block', 'inline']),\n variant: PropTypes.oneOf([\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'subtitle',\n 'body',\n 'caption',\n 'button',\n 'overline',\n 'srOnly',\n 'inherit',\n ]),\n color: PropTypes.oneOf([\n 'initial',\n 'inherit',\n 'primary',\n 'secondary',\n 'error',\n ]),\n className: PropTypes.string,\n children: PropTypes.node,\n align: PropTypes.oneOf(['inherit', 'left', 'center', 'right', 'justify']),\n gutterBottom: PropTypes.bool,\n noWrap: PropTypes.bool,\n};\n\nexport default Typography;\n","import Typography from './Typography';\nexport default Typography;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { ViewportActionBar, Notification } from '../';\n\nconst Viewport = ({ viewportIndex, onArrowsClick, studyData, children }) => {\n return (\n
\n
\n \n\n {/* TODO: NOTIFICATION API DEFINITION - OHIF-112 */}\n {\n if (typeof window !== 'undefined') window.alert(value);\n }}\n />\n
\n\n {/* STUDY IMAGE */}\n
\n {children}\n
\n
\n );\n};\n\nViewport.propTypes = {\n viewportIndex: PropTypes.number.isRequired,\n onArrowsClick: PropTypes.func.isRequired,\n studyData: PropTypes.shape({\n label: PropTypes.string.isRequired,\n isTracked: PropTypes.bool.isRequired,\n /* Specific to SR Viewports only... */\n isLocked: PropTypes.bool.isRequired,\n isRehydratable: PropTypes.bool.isRequired,\n studyDate: PropTypes.string.isRequired,\n currentSeries: PropTypes.number.isRequired,\n seriesDescription: PropTypes.string.isRequired,\n modality: PropTypes.string.isRequired,\n patientInformation: PropTypes.shape({\n patientName: PropTypes.string.isRequired,\n patientSex: PropTypes.string.isRequired,\n patientAge: PropTypes.string.isRequired,\n MRN: PropTypes.string.isRequired,\n thickness: PropTypes.string.isRequired,\n spacing: PropTypes.string.isRequired,\n scanner: PropTypes.string.isRequired,\n }),\n }).isRequired,\n children: PropTypes.node.isRequired,\n};\n\nexport default Viewport;\n","import React from 'react';\nimport classnames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { Icon, Tooltip } from '../';\nimport { useTranslation } from 'react-i18next';\n\nconst classes = {\n infoHeader: 'text-base text-primary-light',\n infoText: 'text-base text-white max-w-24 truncate',\n firstRow: 'flex flex-col',\n row: 'flex flex-col ml-4',\n};\n\nfunction PatientInfo({\n patientName,\n patientSex,\n patientAge,\n MRN,\n thickness,\n spacing,\n scanner,\n isOpen,\n showPatientInfoRef,\n}) {\n const { t } = useTranslation('PatientInfo');\n\n while (patientAge.charAt(0) === '0') {\n patientAge = patientAge.substr(1);\n }\n\n return (\n
\n \n
\n \n
\n
\n \n {patientName}\n \n
\n
\n \n {t('Sex')}\n \n \n {patientSex}\n \n
\n
\n \n {t('Age')}\n \n \n {patientAge}\n \n
\n
\n \n {t('MRN')}\n \n \n {MRN}\n \n
\n
\n
\n
\n \n {t('Thickness')}\n \n \n {thickness}\n \n
\n
\n \n {t('Spacing')}\n \n \n {spacing}\n \n
\n
\n \n {t('Scanner')}\n \n \n {scanner}\n \n
\n
\n
\n
\n )\n }\n >\n
\n
\n \n \n
\n
\n \n \n );\n}\n\nPatientInfo.propTypes = {\n patientName: PropTypes.string,\n patientSex: PropTypes.string,\n patientAge: PropTypes.string,\n MRN: PropTypes.string,\n thickness: PropTypes.string,\n spacing: PropTypes.string,\n scanner: PropTypes.string,\n isOpen: PropTypes.bool,\n showPatientInfoRef: PropTypes.object,\n};\n\nexport default PatientInfo;\n","import PatientInfo from './PatientInfo';\nexport default PatientInfo;\n","import React, { useState, useRef, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { Icon, ButtonGroup, Button, CinePlayer } from '../';\nimport useOnClickOutside from '../../utils/useOnClickOutside';\nimport PatientInfo from '../PatientInfo';\nimport { StringNumber } from '../../types';\n\nconst ViewportActionBar = ({\n studyData,\n showNavArrows,\n showStatus,\n showCine,\n cineProps,\n showPatientInfo: patientInfoVisibility,\n onArrowsClick,\n onDoubleClick,\n getStatusComponent,\n //\n showPatientInfoIcon,\n}) => {\n const [showPatientInfo, setShowPatientInfo] = useState(patientInfoVisibility);\n\n const {\n label,\n useAltStyling,\n studyDate,\n currentSeries,\n seriesDescription,\n patientInformation,\n } = studyData;\n\n const {\n patientName,\n patientSex,\n patientAge,\n MRN,\n thickness,\n spacing,\n scanner,\n } = patientInformation;\n\n const onPatientInfoClick = () => setShowPatientInfo(!showPatientInfo);\n const closePatientInfo = () => setShowPatientInfo(false);\n const showPatientInfoRef = useRef(null);\n const clickOutsideListener = useOnClickOutside(\n showPatientInfoRef,\n closePatientInfo\n );\n\n useEffect(() => {\n if (showPatientInfo) {\n clickOutsideListener.add();\n } else {\n clickOutsideListener.remove();\n }\n\n return () => clickOutsideListener.remove();\n }, [clickOutsideListener, showPatientInfo]);\n\n const borderColor = useAltStyling ? '#365A6A' : '#1D205A';\n\n let backgroundColor = '#020424';\n if (useAltStyling) {\n backgroundColor = '#031923';\n }\n\n return (\n e.preventDefault()}\n >\n
\n
\n {label}\n {showStatus && getStatusComponent()}\n
\n
\n
\n {studyDate}\n \n S: {currentSeries}\n \n
\n
\n {/* TODO:\n This is tricky. Our \"no-wrap\" in truncate means this has a hard\n length. The overflow forces ellipse. If we don't set max width\n appropriately, this causes the ActionBar to overflow.\n Can clean up by setting percentage widths + calc on parent\n containers\n */}\n

\n {seriesDescription}\n

\n
\n
\n
\n {showNavArrows && !showCine && (\n
\n \n onArrowsClick('left')}\n >\n \n \n onArrowsClick('right')}\n >\n \n \n \n
\n )}\n {showCine && !showNavArrows && (\n
\n \n
\n )}\n {showPatientInfoIcon && (\n
\n \n
\n )}\n \n );\n};\n\nViewportActionBar.propTypes = {\n onArrowsClick: PropTypes.func.isRequired,\n showNavArrows: PropTypes.bool,\n showCine: PropTypes.bool,\n cineProps: PropTypes.object,\n showPatientInfo: PropTypes.bool,\n showPatientInfoIcon: PropTypes.bool,\n studyData: PropTypes.shape({\n //\n useAltStyling: PropTypes.bool,\n //\n label: PropTypes.string.isRequired,\n studyDate: PropTypes.string.isRequired,\n currentSeries: StringNumber.isRequired,\n seriesDescription: PropTypes.string.isRequired,\n patientInformation: PropTypes.shape({\n patientName: PropTypes.string.isRequired,\n patientSex: PropTypes.string.isRequired,\n patientAge: PropTypes.string.isRequired,\n MRN: PropTypes.string.isRequired,\n thickness: PropTypes.string.isRequired,\n spacing: PropTypes.string.isRequired,\n scanner: PropTypes.string.isRequired,\n }),\n }).isRequired,\n getStatusComponent: PropTypes.func.isRequired,\n};\n\nViewportActionBar.defaultProps = {\n cineProps: {},\n showCine: false,\n showStatus: true,\n showNavArrows: true,\n showPatientInfo: false,\n showPatientInfoIcon: true,\n};\n\nexport default ViewportActionBar;\n","export default (element, onClickOutside) => {\n const clickOutsideHandler = event => {\n if (element.current && !element.current.contains(event.target)) {\n onClickOutside();\n if (typeof window !== 'undefined') {\n window.removeEventListener('mousedown', clickOutsideHandler);\n }\n }\n };\n\n const add = () => {\n if (typeof window !== 'undefined') {\n window.addEventListener('mousedown', clickOutsideHandler);\n }\n };\n const remove = () => {\n if (typeof window !== 'undefined') {\n window.removeEventListener('mousedown', clickOutsideHandler);\n }\n };\n\n return {\n add,\n remove,\n };\n};\n","import ViewportActionBar from './ViewportActionBar';\nexport default ViewportActionBar;\n","import React, {\n useCallback,\n useEffect,\n useState,\n createRef,\n useRef,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport {\n Typography,\n Input,\n Tooltip,\n IconButton,\n Icon,\n Select,\n InputLabelWrapper,\n Button,\n} from '../';\n\nconst FILE_TYPE_OPTIONS = [\n {\n value: 'jpg',\n label: 'jpg',\n },\n {\n value: 'png',\n label: 'png',\n },\n];\n\nconst DEFAULT_FILENAME = 'image';\n\nconst REFRESH_VIEWPORT_TIMEOUT = 100;\n\nconst ViewportDownloadForm = ({\n activeViewportElement,\n onClose,\n updateViewportPreview,\n enableViewport,\n disableViewport,\n toggleAnnotations,\n loadImage,\n downloadBlob,\n defaultSize,\n minimumSize,\n maximumSize,\n canvasClass,\n}) => {\n const { t } = useTranslation('Modals');\n\n const [filename, setFilename] = useState(DEFAULT_FILENAME);\n const [fileType, setFileType] = useState(['jpg']);\n\n const [dimensions, setDimensions] = useState({\n width: defaultSize,\n height: defaultSize,\n });\n\n const [showAnnotations, setShowAnnotations] = useState(true);\n\n const [keepAspect, setKeepAspect] = useState(true);\n const [aspectMultiplier, setAspectMultiplier] = useState({\n width: 1,\n height: 1,\n });\n\n const [viewportElement, setViewportElement] = useState();\n const [viewportElementDimensions, setViewportElementDimensions] = useState({\n width: defaultSize,\n height: defaultSize,\n });\n\n const [downloadCanvas, setDownloadCanvas] = useState({\n ref: createRef(),\n width: defaultSize,\n height: defaultSize,\n });\n\n const [viewportPreview, setViewportPreview] = useState({\n src: null,\n width: defaultSize,\n height: defaultSize,\n });\n\n const [error, setError] = useState({\n width: false,\n height: false,\n filename: false,\n });\n\n const hasError = Object.values(error).includes(true);\n\n const refreshViewport = useRef(null);\n\n const onKeepAspectToggle = () => {\n const { width, height } = dimensions;\n const aspectMultiplier = { ...aspectMultiplier };\n if (!keepAspect) {\n const base = Math.min(width, height);\n aspectMultiplier.width = width / base;\n aspectMultiplier.height = height / base;\n setAspectMultiplier(aspectMultiplier);\n }\n\n setKeepAspect(!keepAspect);\n };\n\n const downloadImage = () => {\n downloadBlob(\n filename || DEFAULT_FILENAME,\n fileType,\n viewportElement,\n downloadCanvas.ref.current\n );\n };\n\n /**\n * @param {object} value - Input value\n * @param {string} dimension - \"height\" | \"width\"\n */\n const onDimensionsChange = (value, dimension) => {\n const oppositeDimension = dimension === 'height' ? 'width' : 'height';\n const sanitizedTargetValue = value.replace(/\\D/, '');\n const isEmpty = sanitizedTargetValue === '';\n const newDimensions = { ...dimensions };\n const updatedDimension = isEmpty\n ? ''\n : Math.min(sanitizedTargetValue, maximumSize);\n\n if (updatedDimension === dimensions[dimension]) {\n return;\n }\n\n newDimensions[dimension] = updatedDimension;\n\n if (keepAspect && newDimensions[oppositeDimension] !== '') {\n newDimensions[oppositeDimension] = Math.round(\n newDimensions[dimension] * aspectMultiplier[oppositeDimension]\n );\n }\n\n // In current code, keepAspect is always `true`\n // And we always start w/ a square width/height\n setDimensions(newDimensions);\n\n // Only update if value is non-empty\n if (!isEmpty) {\n setViewportElementDimensions(newDimensions);\n setDownloadCanvas(state => ({\n ...state,\n ...newDimensions,\n }));\n }\n };\n\n const error_messages = {\n width: 'The minimum valid width is 100px.',\n height: 'The minimum valid height is 100px.',\n filename: 'The file name cannot be empty.',\n };\n\n const renderErrorHandler = errorType => {\n if (!error[errorType]) {\n return null;\n }\n\n return (\n \n {error_messages[errorType]}\n \n );\n };\n\n const validSize = useCallback(\n value => (value >= minimumSize ? value : minimumSize),\n [minimumSize]\n );\n\n const loadAndUpdateViewports = useCallback(async () => {\n const { width: scaledWidth, height: scaledHeight } = await loadImage(\n activeViewportElement,\n viewportElement,\n dimensions.width,\n dimensions.height\n );\n\n toggleAnnotations(showAnnotations, viewportElement, activeViewportElement);\n\n const scaledDimensions = {\n height: validSize(scaledHeight),\n width: validSize(scaledWidth),\n };\n\n setViewportElementDimensions(scaledDimensions);\n setDownloadCanvas(state => ({\n ...state,\n ...scaledDimensions,\n }));\n\n const {\n dataUrl,\n width: viewportElementWidth,\n height: viewportElementHeight,\n } = await updateViewportPreview(\n viewportElement,\n downloadCanvas.ref.current,\n fileType\n );\n\n setViewportPreview(state => ({\n ...state,\n src: dataUrl,\n width: validSize(viewportElementWidth),\n height: validSize(viewportElementHeight),\n }));\n }, [\n loadImage,\n activeViewportElement,\n viewportElement,\n dimensions.width,\n dimensions.height,\n toggleAnnotations,\n showAnnotations,\n validSize,\n updateViewportPreview,\n downloadCanvas.ref,\n fileType,\n ]);\n\n useEffect(() => {\n enableViewport(viewportElement);\n\n return () => {\n disableViewport(viewportElement);\n };\n }, [disableViewport, enableViewport, viewportElement]);\n\n useEffect(() => {\n if (refreshViewport.current !== null) {\n clearTimeout(refreshViewport.current);\n }\n\n refreshViewport.current = setTimeout(() => {\n refreshViewport.current = null;\n loadAndUpdateViewports();\n }, REFRESH_VIEWPORT_TIMEOUT);\n }, [\n activeViewportElement,\n viewportElement,\n showAnnotations,\n dimensions,\n loadImage,\n toggleAnnotations,\n updateViewportPreview,\n fileType,\n downloadCanvas.ref,\n minimumSize,\n maximumSize,\n loadAndUpdateViewports,\n ]);\n\n useEffect(() => {\n const { width, height } = dimensions;\n const hasError = {\n width: width < minimumSize,\n height: height < minimumSize,\n filename: !filename,\n };\n\n setError({ ...hasError });\n }, [dimensions, filename, minimumSize]);\n\n return (\n
\n \n {t(\n 'Please specify the dimensions, filename, and desired type for the output image.'\n )}\n \n\n
\n
\n setFilename(evt.target.value)}\n label={t('File Name')}\n />\n {renderErrorHandler('filename')}\n
\n
\n
\n
\n
\n \n onDimensionsChange(evt.target.value, 'width')\n }\n data-cy=\"image-width\"\n />\n {renderErrorHandler('width')}\n
\n
\n \n onDimensionsChange(evt.target.value, 'height')\n }\n data-cy=\"image-height\"\n />\n {renderErrorHandler('height')}\n
\n
\n\n
\n \n \n \n \n \n
\n
\n\n
\n
\n {}}\n >\n {\n setFileType([value.value]);\n }}\n hideSelectedOptions={false}\n options={FILE_TYPE_OPTIONS}\n placeholder=\"File Type\"\n />\n \n
\n
\n \n
\n
\n
\n
\n\n
\n \n {t('Image preview')}\n {activeViewportElement && (\n setViewportElement(ref)}\n >
\n )}\n {!activeViewportElement && (\n \n {t('Active viewport has no displayed image')}\n \n )}\n
\n \n\n
\n \n {t('Cancel')}\n \n \n {t('Download')}\n \n
\n \n );\n};\n\nexport default ViewportDownloadForm;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nfunction ViewportGrid({ numRows, numCols, layoutType, children }) {\n return (\n \n {children}\n \n );\n}\n\nViewportGrid.propTypes = {\n /** Number of columns */\n numRows: PropTypes.number.isRequired,\n /** Number of rows */\n numCols: PropTypes.number.isRequired,\n layoutType: PropTypes.string,\n /** Array of React Components to render within grid */\n children: PropTypes.arrayOf(PropTypes.node).isRequired,\n};\n\nexport default ViewportGrid;\n","import ViewportGrid from './ViewportGrid';\nexport default ViewportGrid;\n","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nexport var DropTargetImpl = /*#__PURE__*/function () {\n function DropTargetImpl(spec, monitor) {\n _classCallCheck(this, DropTargetImpl);\n\n this.spec = spec;\n this.monitor = monitor;\n }\n\n _createClass(DropTargetImpl, [{\n key: \"canDrop\",\n value: function canDrop() {\n var spec = this.spec;\n var monitor = this.monitor;\n return spec.canDrop ? spec.canDrop(monitor.getItem(), monitor) : true;\n }\n }, {\n key: \"hover\",\n value: function hover() {\n var spec = this.spec;\n var monitor = this.monitor;\n\n if (spec.hover) {\n spec.hover(monitor.getItem(), monitor);\n }\n }\n }, {\n key: \"drop\",\n value: function drop() {\n var spec = this.spec;\n var monitor = this.monitor;\n\n if (spec.drop) {\n return spec.drop(monitor.getItem(), monitor);\n }\n }\n }]);\n\n return DropTargetImpl;\n}();","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport { registerTarget } from '../../internals';\nimport { useDragDropManager } from '../useDragDropManager';\nimport { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect';\nimport { useAccept } from './useAccept';\nimport { useDropTarget } from './useDropTarget';\nexport function useRegisteredDropTarget(spec, monitor, connector) {\n var manager = useDragDropManager();\n var dropTarget = useDropTarget(spec, monitor);\n var accept = useAccept(spec);\n useIsomorphicLayoutEffect(function registerDropTarget() {\n var _registerTarget = registerTarget(accept, dropTarget, manager),\n _registerTarget2 = _slicedToArray(_registerTarget, 2),\n handlerId = _registerTarget2[0],\n unregister = _registerTarget2[1];\n\n monitor.receiveHandlerId(handlerId);\n connector.receiveHandlerId(handlerId);\n return unregister;\n }, [manager, monitor, dropTarget, connector, accept.map(function (a) {\n return a.toString();\n }).join('|')]);\n}","import { useEffect, useMemo } from 'react';\nimport { DropTargetImpl } from './DropTargetImpl';\nexport function useDropTarget(spec, monitor) {\n var dropTarget = useMemo(function () {\n return new DropTargetImpl(spec, monitor);\n }, [monitor]);\n useEffect(function () {\n dropTarget.spec = spec;\n }, [spec]);\n return dropTarget;\n}","import { invariant } from '@react-dnd/invariant';\nimport { useMemo } from 'react';\n/**\n * Internal utility hook to get an array-version of spec.accept.\n * The main utility here is that we aren't creating a new array on every render if a non-array spec.accept is passed in.\n * @param spec\n */\n\nexport function useAccept(spec) {\n var accept = spec.accept;\n return useMemo(function () {\n invariant(spec.accept != null, 'accept must be defined');\n return Array.isArray(accept) ? accept : [accept];\n }, [accept]);\n}","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nimport { invariant } from '@react-dnd/invariant';\nvar isCallingCanDrop = false;\nexport var DropTargetMonitorImpl = /*#__PURE__*/function () {\n function DropTargetMonitorImpl(manager) {\n _classCallCheck(this, DropTargetMonitorImpl);\n\n this.targetId = null;\n this.internalMonitor = manager.getMonitor();\n }\n\n _createClass(DropTargetMonitorImpl, [{\n key: \"receiveHandlerId\",\n value: function receiveHandlerId(targetId) {\n this.targetId = targetId;\n }\n }, {\n key: \"getHandlerId\",\n value: function getHandlerId() {\n return this.targetId;\n }\n }, {\n key: \"subscribeToStateChange\",\n value: function subscribeToStateChange(listener, options) {\n return this.internalMonitor.subscribeToStateChange(listener, options);\n }\n }, {\n key: \"canDrop\",\n value: function canDrop() {\n // Cut out early if the target id has not been set. This should prevent errors\n // where the user has an older version of dnd-core like in\n // https://github.com/react-dnd/react-dnd/issues/1310\n if (!this.targetId) {\n return false;\n }\n\n invariant(!isCallingCanDrop, 'You may not call monitor.canDrop() inside your canDrop() implementation. ' + 'Read more: http://react-dnd.github.io/react-dnd/docs/api/drop-target-monitor');\n\n try {\n isCallingCanDrop = true;\n return this.internalMonitor.canDropOnTarget(this.targetId);\n } finally {\n isCallingCanDrop = false;\n }\n }\n }, {\n key: \"isOver\",\n value: function isOver(options) {\n if (!this.targetId) {\n return false;\n }\n\n return this.internalMonitor.isOverTarget(this.targetId, options);\n }\n }, {\n key: \"getItemType\",\n value: function getItemType() {\n return this.internalMonitor.getItemType();\n }\n }, {\n key: \"getItem\",\n value: function getItem() {\n return this.internalMonitor.getItem();\n }\n }, {\n key: \"getDropResult\",\n value: function getDropResult() {\n return this.internalMonitor.getDropResult();\n }\n }, {\n key: \"didDrop\",\n value: function didDrop() {\n return this.internalMonitor.didDrop();\n }\n }, {\n key: \"getInitialClientOffset\",\n value: function getInitialClientOffset() {\n return this.internalMonitor.getInitialClientOffset();\n }\n }, {\n key: \"getInitialSourceClientOffset\",\n value: function getInitialSourceClientOffset() {\n return this.internalMonitor.getInitialSourceClientOffset();\n }\n }, {\n key: \"getSourceClientOffset\",\n value: function getSourceClientOffset() {\n return this.internalMonitor.getSourceClientOffset();\n }\n }, {\n key: \"getClientOffset\",\n value: function getClientOffset() {\n return this.internalMonitor.getClientOffset();\n }\n }, {\n key: \"getDifferenceFromInitialOffset\",\n value: function getDifferenceFromInitialOffset() {\n return this.internalMonitor.getDifferenceFromInitialOffset();\n }\n }]);\n\n return DropTargetMonitorImpl;\n}();","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nimport { shallowEqual } from '@react-dnd/shallowequal';\nimport { wrapConnectorHooks } from './wrapConnectorHooks';\nimport { isRef } from './isRef';\nexport var TargetConnector = /*#__PURE__*/function () {\n function TargetConnector(backend) {\n var _this = this;\n\n _classCallCheck(this, TargetConnector);\n\n this.hooks = wrapConnectorHooks({\n dropTarget: function dropTarget(node, options) {\n _this.clearDropTarget();\n\n _this.dropTargetOptions = options;\n\n if (isRef(node)) {\n _this.dropTargetRef = node;\n } else {\n _this.dropTargetNode = node;\n }\n\n _this.reconnect();\n }\n });\n this.handlerId = null; // The drop target may either be attached via ref or connect function\n\n this.dropTargetRef = null;\n this.dropTargetOptionsInternal = null;\n this.lastConnectedHandlerId = null;\n this.lastConnectedDropTarget = null;\n this.lastConnectedDropTargetOptions = null;\n this.backend = backend;\n }\n\n _createClass(TargetConnector, [{\n key: \"connectTarget\",\n get: function get() {\n return this.dropTarget;\n }\n }, {\n key: \"reconnect\",\n value: function reconnect() {\n // if nothing has changed then don't resubscribe\n var didChange = this.didHandlerIdChange() || this.didDropTargetChange() || this.didOptionsChange();\n\n if (didChange) {\n this.disconnectDropTarget();\n }\n\n var dropTarget = this.dropTarget;\n\n if (!this.handlerId) {\n return;\n }\n\n if (!dropTarget) {\n this.lastConnectedDropTarget = dropTarget;\n return;\n }\n\n if (didChange) {\n this.lastConnectedHandlerId = this.handlerId;\n this.lastConnectedDropTarget = dropTarget;\n this.lastConnectedDropTargetOptions = this.dropTargetOptions;\n this.unsubscribeDropTarget = this.backend.connectDropTarget(this.handlerId, dropTarget, this.dropTargetOptions);\n }\n }\n }, {\n key: \"receiveHandlerId\",\n value: function receiveHandlerId(newHandlerId) {\n if (newHandlerId === this.handlerId) {\n return;\n }\n\n this.handlerId = newHandlerId;\n this.reconnect();\n }\n }, {\n key: \"dropTargetOptions\",\n get: function get() {\n return this.dropTargetOptionsInternal;\n },\n set: function set(options) {\n this.dropTargetOptionsInternal = options;\n }\n }, {\n key: \"didHandlerIdChange\",\n value: function didHandlerIdChange() {\n return this.lastConnectedHandlerId !== this.handlerId;\n }\n }, {\n key: \"didDropTargetChange\",\n value: function didDropTargetChange() {\n return this.lastConnectedDropTarget !== this.dropTarget;\n }\n }, {\n key: \"didOptionsChange\",\n value: function didOptionsChange() {\n return !shallowEqual(this.lastConnectedDropTargetOptions, this.dropTargetOptions);\n }\n }, {\n key: \"disconnectDropTarget\",\n value: function disconnectDropTarget() {\n if (this.unsubscribeDropTarget) {\n this.unsubscribeDropTarget();\n this.unsubscribeDropTarget = undefined;\n }\n }\n }, {\n key: \"dropTarget\",\n get: function get() {\n return this.dropTargetNode || this.dropTargetRef && this.dropTargetRef.current;\n }\n }, {\n key: \"clearDropTarget\",\n value: function clearDropTarget() {\n this.dropTargetRef = null;\n this.dropTargetNode = null;\n }\n }]);\n\n return TargetConnector;\n}();","import { useMemo } from 'react';\nexport function useConnectDropTarget(connector) {\n return useMemo(function () {\n return connector.hooks.dropTarget();\n }, [connector]);\n}","import { useRegisteredDropTarget } from './useRegisteredDropTarget';\nimport { useOptionalFactory } from '../useOptionalFactory';\nimport { useDropTargetMonitor } from './useDropTargetMonitor';\nimport { useDropTargetConnector } from './useDropTargetConnector';\nimport { useCollectedProps } from '../useCollectedProps';\nimport { useConnectDropTarget } from './connectors';\n/**\n * useDropTarget Hook\n * @param spec The drop target specification (object or function, function preferred)\n * @param deps The memoization deps array to use when evaluating spec changes\n */\n\nexport function useDrop(specArg, deps) {\n var spec = useOptionalFactory(specArg, deps);\n var monitor = useDropTargetMonitor();\n var connector = useDropTargetConnector(spec.options);\n useRegisteredDropTarget(spec, monitor, connector);\n return [useCollectedProps(spec.collect, monitor, connector), useConnectDropTarget(connector)];\n}","import { useMemo } from 'react';\nimport { DropTargetMonitorImpl } from '../../internals';\nimport { useDragDropManager } from '../useDragDropManager';\nexport function useDropTargetMonitor() {\n var manager = useDragDropManager();\n return useMemo(function () {\n return new DropTargetMonitorImpl(manager);\n }, [manager]);\n}","import { useMemo } from 'react';\nimport { TargetConnector } from '../../internals';\nimport { useDragDropManager } from '../useDragDropManager';\nimport { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect';\nexport function useDropTargetConnector(options) {\n var manager = useDragDropManager();\n var connector = useMemo(function () {\n return new TargetConnector(manager.getBackend());\n }, [manager]);\n useIsomorphicLayoutEffect(function () {\n connector.dropTargetOptions = options || null;\n connector.reconnect();\n }, [options]);\n return connector;\n}","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { useDrop } from 'react-dnd';\n\n// NOTE: If we found a way to make `useDrop` conditional,\n// Or we provided a HOC of this component, we could provide\n// this UI without the DragAndDropContext dependency.\nfunction ViewportPane({\n children,\n className,\n customStyle,\n isActive,\n onDrop,\n onDoubleClick,\n onInteraction,\n acceptDropsFor,\n}) {\n let dropElement = null;\n const [{ isHovered, isHighlighted }, drop] = useDrop({\n accept: acceptDropsFor,\n // TODO: pass in as prop?\n drop: (droppedItem, monitor) => {\n const canDrop = monitor.canDrop();\n const isOver = monitor.isOver();\n\n if (canDrop && isOver && onDrop) {\n onInteractionHandler();\n onDrop(droppedItem);\n }\n },\n // Monitor, and collect props; returned as values by `useDrop`\n collect: monitor => ({\n isHighlighted: monitor.canDrop(),\n isHovered: monitor.isOver(),\n }),\n });\n\n const focus = () => {\n if (dropElement) {\n dropElement.focus();\n }\n };\n\n const onInteractionHandler = event => {\n focus();\n onInteraction(event);\n };\n\n const refHandler = element => {\n drop(element);\n dropElement = element;\n };\n\n return (\n \n \n {children}\n \n \n );\n}\n\nViewportPane.propTypes = {\n /** The ViewportComp */\n children: PropTypes.node.isRequired,\n /** Classes to append to container */\n className: PropTypes.string,\n /** Bool to show active styling */\n isActive: PropTypes.bool.isRequired,\n /** Indicates drag items we should accept for drops */\n acceptDropsFor: PropTypes.string.isRequired,\n /** Function that handles drop events */\n onDrop: PropTypes.func.isRequired,\n /** Called when the viewportPane is interacted with by the user */\n onInteraction: PropTypes.func.isRequired,\n /** Executed when the pane is double clicked */\n onDoubleClick: PropTypes.func,\n};\n\nconst noop = () => {};\n\nViewportPane.defaultProps = {\n onInteraction: noop,\n};\n\nexport default ViewportPane;\n","import ViewportPane from './ViewportPane';\nexport default ViewportPane;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\n\nconst WindowLevelMenuItem = ({ title, subtitle, isSelected, index }) => (\n <>\n
\n \n {title}\n \n \n {subtitle}\n \n {index + 1}\n
\n \n);\n\nWindowLevelMenuItem.propTypes = {\n title: PropTypes.string.isRequired,\n subtitle: PropTypes.string.isRequired,\n isSelected: PropTypes.bool.isRequired,\n index: PropTypes.number.isRequired,\n};\n\nexport default WindowLevelMenuItem;\n","import WindowLevelMenuItem from './WindowLevelMenuItem';\nexport default WindowLevelMenuItem;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Select, Typography, Button, HotkeysPreferences } from '../';\nimport { useTranslation } from 'react-i18next';\n\nconst UserPreferences = ({\n availableLanguages,\n defaultLanguage,\n currentLanguage,\n disabled,\n hotkeyDefinitions,\n hotkeyDefaults,\n onCancel,\n onSubmit,\n onReset,\n hotkeysModule,\n}) => {\n const { t } = useTranslation('UserPreferencesModal');\n const [state, setState] = useState({\n isDisabled: disabled,\n hotkeyErrors: {},\n hotkeyDefinitions,\n language: currentLanguage,\n });\n\n const onSubmitHandler = () => {\n onSubmit(state);\n };\n\n const onResetHandler = () => {\n setState(state => ({\n ...state,\n language: defaultLanguage,\n hotkeyDefinitions: hotkeyDefaults,\n hotkeyErrors: {},\n isDisabled: disabled,\n }));\n onReset();\n };\n\n const onCancelHandler = () => {\n setState({ hotkeyDefinitions });\n onCancel();\n };\n\n const onLanguageChangeHandler = value => {\n setState(state => ({ ...state, language: value }));\n };\n\n const onHotkeysChangeHandler = (id, definition, errors) => {\n setState(state => ({\n ...state,\n isDisabled: Object.values(errors).every(e => e !== undefined),\n hotkeyErrors: errors,\n hotkeyDefinitions: {\n ...state.hotkeyDefinitions,\n [id]: definition,\n },\n }));\n };\n\n const Section = ({ title, children }) => (\n <>\n
\n \n {title}\n \n
\n
{children}
\n \n );\n\n return (\n
\n
\n
\n \n {t('Language')}\n \n \n
\n
\n
\n \n
\n
\n \n {t('Reset to Defaults')}\n \n
\n \n \n {t('Save')}\n \n
\n
\n
\n );\n};\n\nconst noop = () => {};\n\nUserPreferences.propTypes = {\n disabled: PropTypes.bool,\n hotkeyDefaults: PropTypes.object.isRequired,\n hotkeyDefinitions: PropTypes.object.isRequired,\n languageOptions: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n value: PropTypes.any.isRequired,\n })\n ),\n onCancel: PropTypes.func,\n onSubmit: PropTypes.func,\n onReset: PropTypes.func,\n hotkeysModule: PropTypes.shape({\n initialize: PropTypes.func.isRequired,\n pause: PropTypes.func.isRequired,\n unpause: PropTypes.func.isRequired,\n startRecording: PropTypes.func.isRequired,\n record: PropTypes.func.isRequired,\n }).isRequired,\n};\n\nUserPreferences.defaultProps = {\n languageOptions: [\n { value: 'ONE', label: 'ONE' },\n { value: 'TWO', label: 'TWO' },\n ],\n onCancel: noop,\n onSubmit: noop,\n onReset: noop,\n disabled: false,\n};\n\nexport default UserPreferences;\n","import UserPreferences from './UserPreferences.tsx';\n\nexport default UserPreferences;\n","export const MODIFIER_KEYS = ['ctrl', 'alt', 'shift'];\n\nexport const DISALLOWED_COMBINATIONS = {\n '': [],\n alt: ['space'],\n shift: [],\n ctrl: [\n 'f4',\n 'f5',\n 'f11',\n 'w',\n 'r',\n 't',\n 'o',\n 'p',\n 'a',\n 'd',\n 'f',\n 'g',\n 'h',\n 'j',\n 'l',\n 'z',\n 'x',\n 'c',\n 'v',\n 'b',\n 'n',\n 'pagedown',\n 'pageup',\n ],\n 'ctrl+shift': ['q', 'w', 'r', 't', 'p', 'a', 'h', 'v', 'b', 'n'],\n};\n\nexport const SPECIAL_KEYS = {\n 8: 'backspace',\n 9: 'tab',\n 13: 'return',\n 16: 'shift',\n 17: 'ctrl',\n 18: 'alt',\n 19: 'pause',\n 20: 'capslock',\n 27: 'esc',\n 32: 'space',\n 33: 'pageup',\n 34: 'pagedown',\n 35: 'end',\n 36: 'home',\n 37: 'left',\n 38: 'up',\n 39: 'right',\n 40: 'down',\n 45: 'insert',\n 46: 'del',\n 96: '0',\n 97: '1',\n 98: '2',\n 99: '3',\n 100: '4',\n 101: '5',\n 102: '6',\n 103: '7',\n 104: '8',\n 105: '9',\n 106: '*',\n 107: '+',\n 109: '-',\n 110: '.',\n 111: '/',\n 112: 'f1',\n 113: 'f2',\n 114: 'f3',\n 115: 'f4',\n 116: 'f5',\n 117: 'f6',\n 118: 'f7',\n 119: 'f8',\n 120: 'f9',\n 121: 'f10',\n 122: 'f11',\n 123: 'f12',\n 144: 'numlock',\n 145: 'scroll',\n 191: '/',\n 224: 'meta',\n};\n","import { MODIFIER_KEYS, DISALLOWED_COMBINATIONS } from './hotkeysConfig';\n\nconst formatPressedKeys = pressedKeysArray => pressedKeysArray.join('+');\n\nconst findConflictingCommand = (hotkeys, currentCommandName, pressedKeys) => {\n let firstConflictingCommand = undefined;\n const formatedPressedHotkeys = formatPressedKeys(pressedKeys);\n\n for (const commandName in hotkeys) {\n const toolHotkeys = hotkeys[commandName].keys;\n const formatedToolHotkeys = formatPressedKeys(toolHotkeys);\n\n if (\n formatedPressedHotkeys === formatedToolHotkeys &&\n commandName !== currentCommandName\n ) {\n firstConflictingCommand = hotkeys[commandName];\n break;\n }\n }\n\n return firstConflictingCommand;\n};\n\nconst ERROR_MESSAGES = {\n MODIFIER:\n \"It's not possible to define only modifier keys (ctrl, alt and shift) as a shortcut\",\n EMPTY: \"Field can't be empty.\",\n};\n\n// VALIDATORS\n\nconst modifierValidator = ({ pressedKeys }) => {\n const lastPressedKey = pressedKeys[pressedKeys.length - 1];\n // Check if it has a valid modifier\n const isModifier = MODIFIER_KEYS.includes(lastPressedKey);\n if (isModifier) {\n return { error: ERROR_MESSAGES.MODIFIER };\n }\n};\n\nconst emptyValidator = ({ pressedKeys = [] }) => {\n if (!pressedKeys.length) {\n return { error: ERROR_MESSAGES.EMPTY };\n }\n};\n\nconst conflictingValidator = ({ commandName, pressedKeys, hotkeys }) => {\n const conflictingCommand = findConflictingCommand(\n hotkeys,\n commandName,\n pressedKeys\n );\n\n if (conflictingCommand) {\n return {\n error: `\"${conflictingCommand.label}\" is already using the \"${pressedKeys}\" shortcut.`,\n };\n }\n};\n\nconst disallowedValidator = ({ pressedKeys = [] }) => {\n const lastPressedKey = pressedKeys[pressedKeys.length - 1];\n const modifierCommand = formatPressedKeys(\n pressedKeys.slice(0, pressedKeys.length - 1)\n );\n\n const disallowedCombination = DISALLOWED_COMBINATIONS[modifierCommand];\n const hasDisallowedCombinations = disallowedCombination\n ? disallowedCombination.includes(lastPressedKey)\n : false;\n\n if (hasDisallowedCombinations) {\n return {\n error: `\"${formatPressedKeys(pressedKeys)}\" shortcut combination is not allowed`,\n };\n }\n};\n\nconst hotkeysValidators = [\n emptyValidator,\n modifierValidator,\n conflictingValidator,\n disallowedValidator,\n];\n\nexport { hotkeysValidators };\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { HotkeyField, Typography } from '../';\nimport { useTranslation } from 'react-i18next';\n\n/* TODO: Move these configs and utils to core? */\nimport { MODIFIER_KEYS } from './hotkeysConfig';\nimport { validate, splitHotkeyDefinitionsAndCreateTuples } from './utils';\n\nconst HotkeysPreferences = ({\n disabled,\n hotkeyDefinitions,\n errors: controlledErrors,\n onChange,\n hotkeysModule,\n}) => {\n const { t } = useTranslation('UserPreferencesModal');\n\n const visibleHotkeys = Object.keys(hotkeyDefinitions)\n .filter(key => hotkeyDefinitions[key].isEditable)\n .reduce((obj, key) => {\n obj[key] = hotkeyDefinitions[key];\n return obj;\n }, {});\n\n const [errors, setErrors] = useState(controlledErrors);\n const splitedHotkeys = splitHotkeyDefinitionsAndCreateTuples(visibleHotkeys);\n\n if (!Object.keys(hotkeyDefinitions).length) {\n return 'No hotkey definitions';\n }\n\n const onHotkeyChangeHandler = (id, definition) => {\n const { error } = validate({\n commandName: id,\n pressedKeys: definition.keys,\n hotkeys: hotkeyDefinitions,\n });\n\n setErrors(prevState => {\n const errors = { ...prevState, [id]: error };\n return errors;\n });\n\n onChange(id, definition, { ...errors, [id]: error });\n };\n\n return (\n
\n
\n {splitedHotkeys.map((hotkeys, index) => {\n return (\n
\n
\n {hotkeys.map((hotkey, hotkeyIndex) => {\n const [id, definition] = hotkey;\n const isFirst = hotkeyIndex === 0;\n const error = errors[id];\n\n const onChangeHandler = keys =>\n onHotkeyChangeHandler(id, { ...definition, keys });\n\n return (\n \n
\n \n {t('Function')}\n \n \n {definition.label}\n \n
\n
\n \n {t('Shortcut')}\n \n \n \n {error && (\n \n {error}\n \n )}\n
\n
\n
\n );\n })}\n
\n
\n );\n })}\n \n \n );\n};\n\nconst noop = () => {};\n\nHotkeysPreferences.propTypes = {\n onChange: PropTypes.func,\n disabled: PropTypes.bool,\n hotkeyDefinitions: PropTypes.object.isRequired,\n hotkeysModule: PropTypes.shape({\n initialize: PropTypes.func.isRequired,\n pause: PropTypes.func.isRequired,\n unpause: PropTypes.func.isRequired,\n startRecording: PropTypes.func.isRequired,\n record: PropTypes.func.isRequired,\n }).isRequired,\n};\n\nHotkeysPreferences.defaultProps = {\n onChange: noop,\n disabled: false,\n};\n\nexport default HotkeysPreferences;\n","import { hotkeysValidators } from './hotkeysValidators';\n\n/**\n * Split hotkeys definitions and create hotkey related tuples\n *\n * @param {array} hotkeyDefinitions\n * @returns {array} array of tuples consisted of command name and hotkey definition\n */\nconst splitHotkeyDefinitionsAndCreateTuples = hotkeyDefinitions => {\n const splitedHotkeys = [];\n const arrayHotkeys = Object.entries(hotkeyDefinitions);\n\n if (arrayHotkeys.length) {\n const halfwayThrough = Math.ceil(arrayHotkeys.length / 2);\n splitedHotkeys.push(arrayHotkeys.slice(0, halfwayThrough));\n splitedHotkeys.push(\n arrayHotkeys.slice(halfwayThrough, arrayHotkeys.length)\n );\n }\n\n return splitedHotkeys;\n};\n\n/**\n * Validate a hotkey change\n *\n * @param {Object} arguments\n * @param {string} arguments.commandName command name or id\n * @param {array} arguments.pressedKeys new keys\n * @param {array} arguments.hotkeys current hotkeys\n * @returns {Object} {error} validation error\n */\nconst validate = ({ commandName, pressedKeys, hotkeys }) => {\n for (const validator of hotkeysValidators) {\n const validation = validator({\n commandName,\n pressedKeys,\n hotkeys,\n });\n\n if (validation && validation.error) {\n return validation;\n }\n }\n\n return { error: undefined };\n};\n\nexport { validate, splitHotkeyDefinitionsAndCreateTuples };\n","import HotkeysPreferences from './HotkeysPreferences.tsx';\n\nexport default HotkeysPreferences;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Input from '../Input';\nimport { getKeys, formatKeysForInput } from './utils';\n\n/**\n * HotkeyField\n * Renders a hotkey input that records keys\n *\n * @param {object} props component props\n * @param {Array[]} props.keys keys to be controlled by this field\n * @param {boolean} props.disabled disables the field\n * @param {function} props.onChange callback with changed values\n * @param {string} props.className input classes\n * @param {Array[]} props.modifierKeys\n */\nconst HotkeyField = ({ disabled, keys, onChange, className, modifierKeys, hotkeys }) => {\n const inputValue = formatKeysForInput(keys);\n\n const onInputKeyDown = event => {\n hotkeys.record(sequence => {\n const keys = getKeys({ sequence, modifierKeys });\n hotkeys.unpause();\n onChange(keys);\n });\n };\n\n const onFocus = () => {\n hotkeys.pause();\n hotkeys.startRecording();\n };\n\n return (\n \n );\n};\n\nHotkeyField.propTypes = {\n keys: PropTypes.array.isRequired,\n onChange: PropTypes.func.isRequired,\n className: PropTypes.string,\n modifierKeys: PropTypes.array,\n disabled: PropTypes.bool,\n hotkeys: PropTypes.shape({\n initialize: PropTypes.func.isRequired,\n pause: PropTypes.func.isRequired,\n unpause: PropTypes.func.isRequired,\n startRecording: PropTypes.func.isRequired,\n record: PropTypes.func.isRequired,\n }).isRequired\n};\n\nHotkeyField.defaultProps = {\n disabled: false\n};\n\nexport default HotkeyField;\n","/**\n * Take the pressed key array and return the readable string for the keys\n *\n * @param {Array} [keys=[]]\n * @returns {string} string representation of an array of keys\n */\nconst formatKeysForInput = (keys = []) => keys.join('+');\n\n/**\n * formats given keys sequence to insert the modifier keys in the first index of the array\n * @param {string} sequence keys sequence from MouseTrap Record -> \"shift+left\"\n * @returns {Array} keys in array-format -> ['shift','left']\n */\nconst getKeys = ({ sequence, modifierKeys }) => {\n const keysArray = sequence.join(' ').split('+');\n let keys = [];\n let modifiers = [];\n keysArray.forEach(key => {\n if (modifierKeys && modifierKeys.includes(key)) {\n modifiers.push(key);\n } else {\n keys.push(key);\n }\n });\n return [...modifiers, ...keys];\n};\n\nexport {\n getKeys,\n formatKeysForInput\n};\n","import HotkeyField from './HotkeyField.tsx';\n\nexport default HotkeyField;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport classNames from 'classnames';\nimport { NavBar, Svg, Icon, IconButton, Dropdown } from '../';\n\nfunction Header({\n children,\n menuOptions,\n isReturnEnabled,\n onClickReturnButton,\n isSticky,\n WhiteLabeling,\n}) {\n const { t } = useTranslation('Header');\n const [matches, setMatches] = React.useState(\n window.matchMedia('(min-width: 600px)').matches\n );\n\n React.useEffect(() => {\n window\n .matchMedia('(min-width: 600px)')\n .addEventListener('change', e => setMatches(e.matches));\n }, []);\n\n // TODO: this should be passed in as a prop instead and the react-router-dom\n // dependency should be dropped\n const onClickReturn = () => {\n if (isReturnEnabled && onClickReturnButton) {\n onClickReturnButton();\n }\n };\n\n const CustomLogo = React => {\n return WhiteLabeling.createLogoComponentFn(React);\n };\n\n return (\n \n
\n
\n {/* // TODO: Should preserve filter/sort\n // Either injected service? Or context (like react router's `useLocation`?) */}\n \n {isReturnEnabled && (\n \n )}\n {Boolean(matches) && (\n
\n {WhiteLabeling ? CustomLogo(React) : }{' '}\n
\n )}\n
\n
\n
{children}
\n
\n {Boolean(matches) ? (\n \n {t('INVESTIGATIONAL USE ONLY')}\n \n ) : null}\n \n \n \n \n \n \n \n \n
\n \n \n );\n}\n\nHeader.propTypes = {\n menuOptions: PropTypes.arrayOf(\n PropTypes.shape({\n title: PropTypes.string.isRequired,\n icon: PropTypes.string,\n onClick: PropTypes.func.isRequired,\n })\n ),\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n isReturnEnabled: PropTypes.bool,\n isSticky: PropTypes.bool,\n onClickReturnButton: PropTypes.func,\n WhiteLabeling: PropTypes.element,\n};\n\nHeader.defaultProps = {\n isReturnEnabled: true,\n isSticky: false,\n};\n\nexport default Header;\n","import Header from './Header';\nexport default Header;\n","import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport './ImageScrollbar.css';\n\nclass ImageScrollbar extends PureComponent {\n static propTypes = {\n value: PropTypes.number.isRequired,\n max: PropTypes.number.isRequired,\n height: PropTypes.string.isRequired,\n onChange: PropTypes.func.isRequired,\n onContextMenu: PropTypes.func,\n };\n\n render() {\n if (this.props.max === 0) {\n return null;\n }\n\n this.style = {\n width: `${this.props.height}`,\n };\n\n return (\n
\n
\n \n
\n
\n );\n }\n\n onChange = event => {\n const intValue = parseInt(event.target.value, 10);\n this.props.onChange(intValue);\n };\n\n onKeyDown = event => {\n // We don't allow direct keyboard up/down input on the\n // image sliders since the natural direction is reversed (0 is at the top)\n\n // Store the KeyCodes in an object for readability\n const keys = {\n DOWN: 40,\n UP: 38,\n };\n\n // TODO: Enable scroll down / scroll up without depending on ohif-core\n if (event.which === keys.DOWN) {\n //OHIF.commands.run('scrollDown');\n event.preventDefault();\n } else if (event.which === keys.UP) {\n //OHIF.commands.run('scrollUp');\n event.preventDefault();\n }\n };\n}\n\nImageScrollbar.defaultProps = {\n onContextMenu: e => e.preventDefault(),\n};\n\nexport default ImageScrollbar;\n","import ImageScrollbar from './ImageScrollbar';\nexport default ImageScrollbar;\n","import ViewportOverlay from './ViewportOverlay';\n\nexport default ViewportOverlay;\n","import React from 'react';\nimport classnames from 'classnames';\n\nimport './ViewportOverlay.css';\n\nconst ViewportOverlay = props => {\n const topLeft = 'top-viewport left-viewport';\n const topRight = 'top-viewport right-viewport';\n const bottomRight = 'bottom-viewport right-viewport';\n const bottomLeft = 'bottom-viewport left-viewport';\n const overlay = 'absolute pointer-events-none';\n\n return (\n
\n \n {props.topLeft}\n
\n \n {props.topRight}\n \n \n {props.bottomRight}\n \n \n {props.bottomLeft}\n \n \n );\n};\n\nexport default ViewportOverlay;\n","import React, { useState, useCallback } from 'react';\nimport classNames from 'classnames';\nimport Typography from '../Typography';\nimport './InputRange.css';\n\n/**\n * React Range Input component\n * it has two props, value and onChange\n * value is a number value\n * onChange is a function that will be called when the range input is changed\n *\n *\n */\n\nconst InputRange: React.FC<{\n value: number;\n onChange: (value) => void;\n minValue: number;\n maxValue: number;\n step: number;\n unit?: string;\n containerClassName?: string;\n inputClassName?: string;\n labelClassName?: string;\n labelVariant?: string;\n}> = ({\n value,\n onChange,\n minValue,\n maxValue,\n step = 1,\n unit = '',\n containerClassName,\n inputClassName,\n labelClassName,\n labelVariant,\n}) => {\n const [rangeValue, setRangeValue] = useState(value);\n\n const handleChange = useCallback(\n e => {\n const rangeValue = e.target.value;\n setRangeValue(rangeValue);\n onChange(rangeValue);\n },\n [onChange, setRangeValue]\n );\n\n const rangeValuePercentage =\n ((rangeValue - minValue) / (maxValue - minValue)) * 100;\n\n return (\n \n \n \n {rangeValue}\n {unit}\n \n \n );\n};\n\nexport default InputRange;\n","import InputRange from './InputRange';\n\nexport default InputRange;\n","import React, { useState, useCallback } from 'react';\nimport IconButton from '../IconButton';\nimport Icon from '../Icon';\nimport './InputNumber.css';\n\n/**\n * React Number Input component'\n * it has two props, value and onChange\n * value is a number value\n * onChange is a function that will be called when the number input is changed\n * it can get changed by clicking on the up and down buttons\n * or by typing a number in the input\n */\n\nconst sizesClasses = {\n sm: 'w-[45px] h-[28px]',\n};\n\nconst InputNumber: React.FC<{\n value: number;\n onChange: (value) => void;\n step: number;\n size?: string;\n className?: string;\n}> = ({ value, onChange, step = 1, className, size = 'sm' }) => {\n const [numberValue, setNumberValue] = useState(value);\n\n const handleChange = useCallback(\n e => {\n const numberValue = e.target.value;\n setNumberValue(numberValue);\n onChange(numberValue);\n },\n [onChange, setNumberValue]\n );\n\n const handleIncrement = useCallback(\n e => {\n const newNum = Number(numberValue) + step;\n setNumberValue(newNum);\n onChange(newNum);\n },\n [onChange, setNumberValue, step, numberValue]\n );\n\n const handleDecrement = useCallback(\n e => {\n const newNum = Number(numberValue) - step;\n setNumberValue(newNum);\n onChange(newNum);\n },\n [onChange, setNumberValue, step, numberValue]\n );\n\n return (\n \n
\n \n\n
\n \n \n \n \n \n \n
\n
\n \n );\n};\n\nexport default InputNumber;\n","import InputNumber from './InputNumber';\n\nexport default InputNumber;\n","import React, { useState, useCallback } from 'react';\nimport PropTypes, { string } from 'prop-types';\nimport Icon from '../Icon';\nimport Typography from '../Typography';\n\n/**\n * REACT CheckBox component\n * it has two props, checked and onChange\n * checked is a boolean value\n * onChange is a function that will be called when the checkbox is clicked\n *\n * CheckBox is a component that allows you to use as a boolean\n */\n\nconst CheckBox: React.FC<{\n checked: boolean;\n onChange: (state) => void;\n className?: string;\n label: string;\n labelClassName?: string;\n labelVariant?: string;\n}> = ({\n checked,\n onChange,\n label,\n labelClassName,\n labelVariant = 'body',\n className,\n}) => {\n const [isChecked, setIsChecked] = useState(checked);\n\n const handleClick = useCallback(() => {\n setIsChecked(!isChecked);\n onChange(!isChecked);\n }, [isChecked, onChange]);\n\n return (\n \n {isChecked ? (\n \n ) : (\n \n )}\n\n \n {label}\n \n \n );\n};\n\nCheckBox.propTypes = {\n checked: PropTypes.bool,\n onChange: PropTypes.func,\n label: PropTypes.string,\n labelClassName: PropTypes.string,\n labelVariant: PropTypes.string,\n};\n\nexport default CheckBox;\n","import CheckBox from './CheckBox';\n\nexport default CheckBox;\n","import React from 'react';\nimport classNames from 'classnames';\nimport { Icon } from '@ohif/ui';\n\nimport './LoadingIndicatorProgress.css';\n\n/**\n * A React component that renders a loading indicator.\n * if progress is not provided, it will render an infinite loading indicator\n * if progress is provided, it will render a progress bar\n * Optionally a textBlock can be provided to display a message\n */\nfunction LoadingIndicatorProgress({ className, textBlock, progress }) {\n return (\n \n \n
\n {progress === undefined || progress === null ? (\n
\n ) : (\n
\n )}\n \n {textBlock}\n \n );\n}\n\nexport default LoadingIndicatorProgress;\n","import LoadingIndicatorProgress from './LoadingIndicatorProgress';\nexport default LoadingIndicatorProgress;\n","import lottie from 'lottie-web';\nexport { default as LottiePlayer } from 'lottie-web';\nimport React, { useState, useRef, useEffect } from 'react';\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar _excluded$1 = [\"animationData\", \"loop\", \"autoplay\", \"initialSegment\", \"onComplete\", \"onLoopComplete\", \"onEnterFrame\", \"onSegmentStart\", \"onConfigReady\", \"onDataReady\", \"onDataFailed\", \"onLoadedImages\", \"onDOMLoaded\", \"onDestroy\", \"lottieRef\", \"renderer\", \"name\", \"assetsPath\", \"rendererSettings\"];\n\nvar useLottie = function useLottie(props, style) {\n var animationData = props.animationData,\n loop = props.loop,\n autoplay = props.autoplay,\n initialSegment = props.initialSegment,\n onComplete = props.onComplete,\n onLoopComplete = props.onLoopComplete,\n onEnterFrame = props.onEnterFrame,\n onSegmentStart = props.onSegmentStart,\n onConfigReady = props.onConfigReady,\n onDataReady = props.onDataReady,\n onDataFailed = props.onDataFailed,\n onLoadedImages = props.onLoadedImages,\n onDOMLoaded = props.onDOMLoaded,\n onDestroy = props.onDestroy;\n props.lottieRef;\n props.renderer;\n props.name;\n props.assetsPath;\n props.rendererSettings;\n var rest = _objectWithoutProperties(props, _excluded$1);\n\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n animationLoaded = _useState2[0],\n setAnimationLoaded = _useState2[1];\n\n var animationInstanceRef = useRef();\n var animationContainer = useRef(null);\n /*\n ======================================\n INTERACTION METHODS\n ======================================\n */\n\n /**\n * Play\n */\n\n var play = function play() {\n var _a;\n\n (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.play();\n };\n /**\n * Stop\n */\n\n\n var stop = function stop() {\n var _a;\n\n (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.stop();\n };\n /**\n * Pause\n */\n\n\n var pause = function pause() {\n var _a;\n\n (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.pause();\n };\n /**\n * Set animation speed\n * @param speed\n */\n\n\n var setSpeed = function setSpeed(speed) {\n var _a;\n\n (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.setSpeed(speed);\n };\n /**\n * Got to frame and play\n * @param value\n * @param isFrame\n */\n\n\n var goToAndPlay = function goToAndPlay(value, isFrame) {\n var _a;\n\n (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.goToAndPlay(value, isFrame);\n };\n /**\n * Got to frame and stop\n * @param value\n * @param isFrame\n */\n\n\n var goToAndStop = function goToAndStop(value, isFrame) {\n var _a;\n\n (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.goToAndStop(value, isFrame);\n };\n /**\n * Set animation direction\n * @param direction\n */\n\n\n var setDirection = function setDirection(direction) {\n var _a;\n\n (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.setDirection(direction);\n };\n /**\n * Play animation segments\n * @param segments\n * @param forceFlag\n */\n\n\n var playSegments = function playSegments(segments, forceFlag) {\n var _a;\n\n (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.playSegments(segments, forceFlag);\n };\n /**\n * Set sub frames\n * @param useSubFrames\n */\n\n\n var setSubframe = function setSubframe(useSubFrames) {\n var _a;\n\n (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.setSubframe(useSubFrames);\n };\n /**\n * Get animation duration\n * @param inFrames\n */\n\n\n var getDuration = function getDuration(inFrames) {\n var _a;\n\n return (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.getDuration(inFrames);\n };\n /**\n * Destroy animation\n */\n\n\n var destroy = function destroy() {\n var _a;\n\n (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.destroy(); // Removing the reference to the animation so separate cleanups are skipped.\n // Without it the internal `lottie-react` instance throws exceptions as it already cleared itself on destroy.\n\n animationInstanceRef.current = undefined;\n };\n /*\n ======================================\n LOTTIE\n ======================================\n */\n\n /**\n * Load a new animation, and if it's the case, destroy the previous one\n * @param {Object} forcedConfigs\n */\n\n\n var loadAnimation = function loadAnimation() {\n var forcedConfigs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n var _a; // Return if the container ref is null\n\n\n if (!animationContainer.current) {\n return;\n } // Destroy any previous instance\n\n\n (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.destroy(); // Build the animation configuration\n\n var config = _objectSpread2(_objectSpread2(_objectSpread2({}, props), forcedConfigs), {}, {\n container: animationContainer.current\n }); // Save the animation instance\n\n\n animationInstanceRef.current = lottie.loadAnimation(config);\n setAnimationLoaded(!!animationInstanceRef.current); // Return a function that will clean up\n\n return function () {\n var _a;\n\n (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.destroy();\n animationInstanceRef.current = undefined;\n };\n };\n /**\n * (Re)Initialize when animation data changed\n */\n\n\n useEffect(function () {\n var onUnmount = loadAnimation(); // Clean up on unmount\n\n return function () {\n return onUnmount === null || onUnmount === void 0 ? void 0 : onUnmount();\n }; // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [animationData, loop]); // Update the autoplay state\n\n useEffect(function () {\n if (!animationInstanceRef.current) {\n return;\n }\n\n animationInstanceRef.current.autoplay = !!autoplay;\n }, [autoplay]); // Update the initial segment state\n\n useEffect(function () {\n if (!animationInstanceRef.current) {\n return;\n } // When null should reset to default animation length\n\n\n if (!initialSegment) {\n animationInstanceRef.current.resetSegments(true);\n return;\n } // If it's not a valid segment, do nothing\n\n\n if (!Array.isArray(initialSegment) || !initialSegment.length) {\n return;\n } // If the current position it's not in the new segment\n // set the current position to start\n\n\n if (animationInstanceRef.current.currentRawFrame < initialSegment[0] || animationInstanceRef.current.currentRawFrame > initialSegment[1]) {\n animationInstanceRef.current.currentRawFrame = initialSegment[0];\n } // Update the segment\n\n\n animationInstanceRef.current.setSegment(initialSegment[0], initialSegment[1]);\n }, [initialSegment]);\n /*\n ======================================\n EVENTS\n ======================================\n */\n\n /**\n * Reinitialize listener on change\n */\n\n useEffect(function () {\n var partialListeners = [{\n name: \"complete\",\n handler: onComplete\n }, {\n name: \"loopComplete\",\n handler: onLoopComplete\n }, {\n name: \"enterFrame\",\n handler: onEnterFrame\n }, {\n name: \"segmentStart\",\n handler: onSegmentStart\n }, {\n name: \"config_ready\",\n handler: onConfigReady\n }, {\n name: \"data_ready\",\n handler: onDataReady\n }, {\n name: \"data_failed\",\n handler: onDataFailed\n }, {\n name: \"loaded_images\",\n handler: onLoadedImages\n }, {\n name: \"DOMLoaded\",\n handler: onDOMLoaded\n }, {\n name: \"destroy\",\n handler: onDestroy\n }];\n var listeners = partialListeners.filter(function (listener) {\n return listener.handler != null;\n });\n\n if (!listeners.length) {\n return;\n }\n\n var deregisterList = listeners.map(\n /**\n * Handle the process of adding an event listener\n * @param {Listener} listener\n * @return {Function} Function that deregister the listener\n */\n function (listener) {\n var _a;\n\n (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.addEventListener(listener.name, listener.handler); // Return a function to deregister this listener\n\n return function () {\n var _a;\n\n (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.removeEventListener(listener.name, listener.handler);\n };\n }); // Deregister listeners on unmount\n\n return function () {\n deregisterList.forEach(function (deregister) {\n return deregister();\n });\n };\n }, [onComplete, onLoopComplete, onEnterFrame, onSegmentStart, onConfigReady, onDataReady, onDataFailed, onLoadedImages, onDOMLoaded, onDestroy]);\n /**\n * Build the animation view\n */\n\n var View = /*#__PURE__*/React.createElement(\"div\", _objectSpread2({\n style: style,\n ref: animationContainer\n }, rest));\n return {\n View: View,\n play: play,\n stop: stop,\n pause: pause,\n setSpeed: setSpeed,\n goToAndStop: goToAndStop,\n goToAndPlay: goToAndPlay,\n setDirection: setDirection,\n playSegments: playSegments,\n setSubframe: setSubframe,\n getDuration: getDuration,\n destroy: destroy,\n animationContainerRef: animationContainer,\n animationLoaded: animationLoaded,\n animationItem: animationInstanceRef.current\n };\n};\n\nfunction getContainerVisibility(container) {\n var _container$getBoundin = container.getBoundingClientRect(),\n top = _container$getBoundin.top,\n height = _container$getBoundin.height;\n\n var current = window.innerHeight - top;\n var max = window.innerHeight + height;\n return current / max;\n}\nfunction getContainerCursorPosition(container, cursorX, cursorY) {\n var _container$getBoundin2 = container.getBoundingClientRect(),\n top = _container$getBoundin2.top,\n left = _container$getBoundin2.left,\n width = _container$getBoundin2.width,\n height = _container$getBoundin2.height;\n\n var x = (cursorX - left) / width;\n var y = (cursorY - top) / height;\n return {\n x: x,\n y: y\n };\n}\nvar useInitInteractivity = function useInitInteractivity(_ref) {\n var wrapperRef = _ref.wrapperRef,\n animationItem = _ref.animationItem,\n mode = _ref.mode,\n actions = _ref.actions;\n useEffect(function () {\n var wrapper = wrapperRef.current;\n\n if (!wrapper || !animationItem || !actions.length) {\n return;\n }\n\n animationItem.stop();\n\n var scrollModeHandler = function scrollModeHandler() {\n var assignedSegment = null;\n\n var scrollHandler = function scrollHandler() {\n var currentPercent = getContainerVisibility(wrapper); // Find the first action that satisfies the current position conditions\n\n var action = actions.find(function (_ref2) {\n var visibility = _ref2.visibility;\n return visibility && currentPercent >= visibility[0] && currentPercent <= visibility[1];\n }); // Skip if no matching action was found!\n\n if (!action) {\n return;\n }\n\n if (action.type === \"seek\" && action.visibility && action.frames.length === 2) {\n // Seek: Go to a frame based on player scroll position action\n var frameToGo = action.frames[0] + Math.ceil((currentPercent - action.visibility[0]) / (action.visibility[1] - action.visibility[0]) * action.frames[1]); //! goToAndStop must be relative to the start of the current segment\n\n animationItem.goToAndStop(frameToGo - animationItem.firstFrame - 1, true);\n }\n\n if (action.type === \"loop\") {\n // Loop: Loop a given frames\n if (assignedSegment === null) {\n // if not playing any segments currently. play those segments and save to state\n animationItem.playSegments(action.frames, true);\n assignedSegment = action.frames;\n } else {\n // if playing any segments currently.\n //check if segments in state are equal to the frames selected by action\n if (assignedSegment !== action.frames) {\n // if they are not equal. new segments are to be loaded\n animationItem.playSegments(action.frames, true);\n assignedSegment = action.frames;\n } else if (animationItem.isPaused) {\n // if they are equal the play method must be called only if lottie is paused\n animationItem.playSegments(action.frames, true);\n assignedSegment = action.frames;\n }\n }\n }\n\n if (action.type === \"play\" && animationItem.isPaused) {\n // Play: Reset segments and continue playing full animation from current position\n animationItem.resetSegments(true);\n animationItem.play();\n }\n\n if (action.type === \"stop\") {\n // Stop: Stop playback\n animationItem.goToAndStop(action.frames[0] - animationItem.firstFrame - 1, true);\n }\n };\n\n document.addEventListener(\"scroll\", scrollHandler);\n return function () {\n document.removeEventListener(\"scroll\", scrollHandler);\n };\n };\n\n var cursorModeHandler = function cursorModeHandler() {\n var handleCursor = function handleCursor(_x, _y) {\n var x = _x;\n var y = _y; // Resolve cursor position if cursor is inside container\n\n if (x !== -1 && y !== -1) {\n // Get container cursor position\n var pos = getContainerCursorPosition(wrapper, x, y); // Use the resolved position\n\n x = pos.x;\n y = pos.y;\n } // Find the first action that satisfies the current position conditions\n\n\n var action = actions.find(function (_ref3) {\n var position = _ref3.position;\n\n if (position && Array.isArray(position.x) && Array.isArray(position.y)) {\n return x >= position.x[0] && x <= position.x[1] && y >= position.y[0] && y <= position.y[1];\n }\n\n if (position && !Number.isNaN(position.x) && !Number.isNaN(position.y)) {\n return x === position.x && y === position.y;\n }\n\n return false;\n }); // Skip if no matching action was found!\n\n if (!action) {\n return;\n } // Process action types:\n\n\n if (action.type === \"seek\" && action.position && Array.isArray(action.position.x) && Array.isArray(action.position.y) && action.frames.length === 2) {\n // Seek: Go to a frame based on player scroll position action\n var xPercent = (x - action.position.x[0]) / (action.position.x[1] - action.position.x[0]);\n var yPercent = (y - action.position.y[0]) / (action.position.y[1] - action.position.y[0]);\n animationItem.playSegments(action.frames, true);\n animationItem.goToAndStop(Math.ceil((xPercent + yPercent) / 2 * (action.frames[1] - action.frames[0])), true);\n }\n\n if (action.type === \"loop\") {\n animationItem.playSegments(action.frames, true);\n }\n\n if (action.type === \"play\") {\n // Play: Reset segments and continue playing full animation from current position\n if (animationItem.isPaused) {\n animationItem.resetSegments(false);\n }\n\n animationItem.playSegments(action.frames);\n }\n\n if (action.type === \"stop\") {\n animationItem.goToAndStop(action.frames[0], true);\n }\n };\n\n var mouseMoveHandler = function mouseMoveHandler(ev) {\n handleCursor(ev.clientX, ev.clientY);\n };\n\n var mouseOutHandler = function mouseOutHandler() {\n handleCursor(-1, -1);\n };\n\n wrapper.addEventListener(\"mousemove\", mouseMoveHandler);\n wrapper.addEventListener(\"mouseout\", mouseOutHandler);\n return function () {\n wrapper.removeEventListener(\"mousemove\", mouseMoveHandler);\n wrapper.removeEventListener(\"mouseout\", mouseOutHandler);\n };\n };\n\n switch (mode) {\n case \"scroll\":\n return scrollModeHandler();\n\n case \"cursor\":\n return cursorModeHandler();\n } // eslint-disable-next-line react-hooks/exhaustive-deps\n\n }, [mode, animationItem]);\n};\n\nvar useLottieInteractivity = function useLottieInteractivity(_ref4) {\n var actions = _ref4.actions,\n mode = _ref4.mode,\n lottieObj = _ref4.lottieObj;\n var animationItem = lottieObj.animationItem,\n View = lottieObj.View,\n animationContainerRef = lottieObj.animationContainerRef;\n useInitInteractivity({\n actions: actions,\n animationItem: animationItem,\n mode: mode,\n wrapperRef: animationContainerRef\n });\n return View;\n};\n\nvar _excluded = [\"style\", \"interactivity\"];\n\nvar Lottie = function Lottie(props) {\n var _a, _b, _c;\n\n var style = props.style,\n interactivity = props.interactivity,\n lottieProps = _objectWithoutProperties(props, _excluded);\n /**\n * Initialize the 'useLottie' hook\n */\n\n\n var _useLottie = useLottie(lottieProps, style),\n View = _useLottie.View,\n play = _useLottie.play,\n stop = _useLottie.stop,\n pause = _useLottie.pause,\n setSpeed = _useLottie.setSpeed,\n goToAndStop = _useLottie.goToAndStop,\n goToAndPlay = _useLottie.goToAndPlay,\n setDirection = _useLottie.setDirection,\n playSegments = _useLottie.playSegments,\n setSubframe = _useLottie.setSubframe,\n getDuration = _useLottie.getDuration,\n destroy = _useLottie.destroy,\n animationContainerRef = _useLottie.animationContainerRef,\n animationLoaded = _useLottie.animationLoaded,\n animationItem = _useLottie.animationItem;\n /**\n * Make the hook variables/methods available through the provided 'lottieRef'\n */\n\n\n useEffect(function () {\n if (props.lottieRef) {\n props.lottieRef.current = {\n play: play,\n stop: stop,\n pause: pause,\n setSpeed: setSpeed,\n goToAndPlay: goToAndPlay,\n goToAndStop: goToAndStop,\n setDirection: setDirection,\n playSegments: playSegments,\n setSubframe: setSubframe,\n getDuration: getDuration,\n destroy: destroy,\n animationContainerRef: animationContainerRef,\n animationLoaded: animationLoaded,\n animationItem: animationItem\n };\n } // eslint-disable-next-line react-hooks/exhaustive-deps\n\n }, [(_a = props.lottieRef) === null || _a === void 0 ? void 0 : _a.current]);\n return useLottieInteractivity({\n lottieObj: {\n View: View,\n play: play,\n stop: stop,\n pause: pause,\n setSpeed: setSpeed,\n goToAndStop: goToAndStop,\n goToAndPlay: goToAndPlay,\n setDirection: setDirection,\n playSegments: playSegments,\n setSubframe: setSubframe,\n getDuration: getDuration,\n destroy: destroy,\n animationContainerRef: animationContainerRef,\n animationLoaded: animationLoaded,\n animationItem: animationItem\n },\n actions: (_b = interactivity === null || interactivity === void 0 ? void 0 : interactivity.actions) !== null && _b !== void 0 ? _b : [],\n mode: (_c = interactivity === null || interactivity === void 0 ? void 0 : interactivity.mode) !== null && _c !== void 0 ? _c : \"scroll\"\n });\n};\n\nexport { Lottie as default, useLottie, useLottieInteractivity };\n//# sourceMappingURL=index.es.js.map\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\nexport const BackgroundColor = ({ color }) => {\n return (\n \n

bg-{color}

\n \n );\n};\n\nBackgroundColor.propTypes = {\n color: PropTypes.string,\n};\n\nexport default BackgroundColor;\n","import PropTypes from 'prop-types';\nimport React from 'react';\n\nexport const ModalComponent = ({\n content,\n contentProps,\n shouldCloseOnEsc,\n isOpen,\n closeButton,\n title,\n customClassName,\n}) => {\n return <>;\n};\n\nModalComponent.defaultProps = {\n content: null,\n contentProps: null,\n shouldCloseOnEsc: true,\n isOpen: true,\n closeButton: true,\n title: null,\n customClassName: '',\n};\n\nModalComponent.propTypes = {\n content: PropTypes.node,\n contentProps: PropTypes.object,\n shouldCloseOnEsc: PropTypes.bool,\n isOpen: PropTypes.bool,\n closeButton: PropTypes.bool,\n title: PropTypes.string,\n customClassName: PropTypes.string,\n};\n\nexport default ModalComponent;\n",null,null,null,"import _defineProperty from '@babel/runtime/helpers/defineProperty';\nimport Constants from './ImageMapper/Constants.js';\nimport macro from '../../macros.js';\nimport vtkAbstractMapper from './AbstractMapper.js';\nimport { D as clampValue, P as multiply3x3_vect3, O as createUninitializedBounds } from '../../Common/Core/Math/index.js';\nimport vtkPlane from '../../Common/DataModel/Plane.js';\nimport CoincidentTopologyHelper from './Mapper/CoincidentTopologyHelper.js';\nimport { vec3 } from 'gl-matrix';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nvar staticOffsetAPI = CoincidentTopologyHelper.staticOffsetAPI,\n otherStaticMethods = CoincidentTopologyHelper.otherStaticMethods;\nvar vtkWarningMacro = macro.vtkWarningMacro;\nvar SlicingMode = Constants.SlicingMode; // ----------------------------------------------------------------------------\n// vtkImageMapper methods\n// ----------------------------------------------------------------------------\n\nfunction vtkImageMapper(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkImageMapper');\n\n publicAPI.getSliceAtPosition = function (pos) {\n var image = publicAPI.getInputData();\n var pos3;\n\n if (pos.length === 3) {\n pos3 = pos;\n } else if (Number.isFinite(pos)) {\n var bds = image.getBounds();\n\n switch (model.slicingMode) {\n case SlicingMode.X:\n pos3 = [pos, (bds[3] + bds[2]) / 2, (bds[5] + bds[4]) / 2];\n break;\n\n case SlicingMode.Y:\n pos3 = [(bds[1] + bds[0]) / 2, pos, (bds[5] + bds[4]) / 2];\n break;\n\n case SlicingMode.Z:\n pos3 = [(bds[1] + bds[0]) / 2, (bds[3] + bds[2]) / 2, pos];\n break;\n }\n }\n\n var ijk = [0, 0, 0];\n image.worldToIndex(pos3, ijk);\n var ex = image.getExtent();\n\n var _publicAPI$getClosest = publicAPI.getClosestIJKAxis(),\n ijkMode = _publicAPI$getClosest.ijkMode;\n\n var slice = 0;\n\n switch (ijkMode) {\n case SlicingMode.I:\n slice = clampValue(ijk[0], ex[0], ex[1]);\n break;\n\n case SlicingMode.J:\n slice = clampValue(ijk[1], ex[2], ex[3]);\n break;\n\n case SlicingMode.K:\n slice = clampValue(ijk[2], ex[4], ex[5]);\n break;\n\n default:\n return 0;\n }\n\n return slice;\n };\n\n publicAPI.setSliceFromCamera = function (cam) {\n var fp = cam.getFocalPoint();\n\n switch (model.slicingMode) {\n case SlicingMode.I:\n case SlicingMode.J:\n case SlicingMode.K:\n {\n var slice = publicAPI.getSliceAtPosition(fp);\n publicAPI.setSlice(slice);\n }\n break;\n\n case SlicingMode.X:\n publicAPI.setSlice(fp[0]);\n break;\n\n case SlicingMode.Y:\n publicAPI.setSlice(fp[1]);\n break;\n\n case SlicingMode.Z:\n publicAPI.setSlice(fp[2]);\n break;\n }\n };\n\n publicAPI.setXSlice = function (id) {\n publicAPI.setSlicingMode(SlicingMode.X);\n publicAPI.setSlice(id);\n };\n\n publicAPI.setYSlice = function (id) {\n publicAPI.setSlicingMode(SlicingMode.Y);\n publicAPI.setSlice(id);\n };\n\n publicAPI.setZSlice = function (id) {\n publicAPI.setSlicingMode(SlicingMode.Z);\n publicAPI.setSlice(id);\n };\n\n publicAPI.setISlice = function (id) {\n publicAPI.setSlicingMode(SlicingMode.I);\n publicAPI.setSlice(id);\n };\n\n publicAPI.setJSlice = function (id) {\n publicAPI.setSlicingMode(SlicingMode.J);\n publicAPI.setSlice(id);\n };\n\n publicAPI.setKSlice = function (id) {\n publicAPI.setSlicingMode(SlicingMode.K);\n publicAPI.setSlice(id);\n };\n\n publicAPI.getSlicingModeNormal = function () {\n var out = [0, 0, 0];\n var a = publicAPI.getInputData().getDirection();\n var mat3 = [[a[0], a[1], a[2]], [a[3], a[4], a[5]], [a[6], a[7], a[8]]];\n\n switch (model.slicingMode) {\n case SlicingMode.X:\n out[0] = 1;\n break;\n\n case SlicingMode.Y:\n out[1] = 1;\n break;\n\n case SlicingMode.Z:\n out[2] = 1;\n break;\n\n case SlicingMode.I:\n multiply3x3_vect3(mat3, [1, 0, 0], out);\n break;\n\n case SlicingMode.J:\n multiply3x3_vect3(mat3, [0, 1, 0], out);\n break;\n\n case SlicingMode.K:\n multiply3x3_vect3(mat3, [0, 0, 1], out);\n break;\n }\n\n return out;\n };\n\n function computeClosestIJKAxis() {\n var inVec3;\n\n switch (model.slicingMode) {\n case SlicingMode.X:\n inVec3 = [1, 0, 0];\n break;\n\n case SlicingMode.Y:\n inVec3 = [0, 1, 0];\n break;\n\n case SlicingMode.Z:\n inVec3 = [0, 0, 1];\n break;\n\n default:\n model.closestIJKAxis = {\n ijkMode: model.slicingMode,\n flip: false\n };\n return;\n } // Project vec3 onto direction cosines\n\n\n var out = [0, 0, 0]; // The direction matrix in vtkImageData is the indexToWorld rotation matrix\n // with a column-major data layout since it is stored as a WebGL matrix.\n // We need the worldToIndex rotation matrix for the projection, and it needs\n // to be in a row-major data layout to use vtkMath for operations.\n // To go from the indexToWorld column-major matrix to the worldToIndex\n // row-major matrix, we need to transpose it (column -> row) then inverse it.\n // However, that 3x3 matrix is a rotation matrix which is orthonormal, meaning\n // that its inverse is equal to its transpose. We therefore need to apply two\n // transpositions resulting in a no-op.\n\n var a = publicAPI.getInputData().getDirection();\n multiply3x3_vect3(a, inVec3, out);\n var maxAbs = 0.0;\n var ijkMode = -1;\n var flip = false;\n\n for (var axis = 0; axis < out.length; ++axis) {\n var absValue = Math.abs(out[axis]);\n\n if (absValue > maxAbs) {\n maxAbs = absValue;\n flip = out[axis] < 0.0;\n ijkMode = axis;\n }\n }\n\n if (maxAbs !== 1.0) {\n var xyzLabel = 'IJKXYZ'[model.slicingMode];\n var ijkLabel = 'IJKXYZ'[ijkMode];\n vtkWarningMacro(\"Unaccurate slicing along \".concat(xyzLabel, \" axis which \") + \"is not aligned with any IJK axis of the image data. \" + \"Using \".concat(ijkLabel, \" axis as a fallback (\").concat(maxAbs, \"% aligned). \") + \"Necessitates slice reformat that is not yet implemented. \" + \"You can switch the slicing mode on your mapper to do IJK slicing instead.\");\n }\n\n model.closestIJKAxis = {\n ijkMode: ijkMode,\n flip: flip\n };\n }\n\n publicAPI.setSlicingMode = function (mode) {\n if (model.slicingMode === mode) {\n return;\n }\n\n model.slicingMode = mode;\n\n if (publicAPI.getInputData()) {\n computeClosestIJKAxis();\n }\n\n publicAPI.modified();\n };\n\n publicAPI.getClosestIJKAxis = function () {\n if ((model.closestIJKAxis === undefined || model.closestIJKAxis.ijkMode === SlicingMode.NONE) && publicAPI.getInputData()) {\n computeClosestIJKAxis();\n }\n\n return model.closestIJKAxis;\n };\n\n publicAPI.getBounds = function () {\n var image = publicAPI.getInputData();\n\n if (!image) {\n return createUninitializedBounds();\n }\n\n if (!model.useCustomExtents) {\n return image.getBounds();\n }\n\n var ex = model.customDisplayExtent.slice();\n\n var _publicAPI$getClosest2 = publicAPI.getClosestIJKAxis(),\n ijkMode = _publicAPI$getClosest2.ijkMode;\n\n var nSlice = model.slice;\n\n if (ijkMode !== model.slicingMode) {\n // If not IJK slicing, get the IJK slice from the XYZ position/slice\n nSlice = publicAPI.getSliceAtPosition(model.slice);\n }\n\n switch (ijkMode) {\n case SlicingMode.I:\n ex[0] = nSlice;\n ex[1] = nSlice;\n break;\n\n case SlicingMode.J:\n ex[2] = nSlice;\n ex[3] = nSlice;\n break;\n\n case SlicingMode.K:\n ex[4] = nSlice;\n ex[5] = nSlice;\n break;\n }\n\n return image.extentToBounds(ex);\n };\n\n publicAPI.getBoundsForSlice = function () {\n var slice = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : model.slice;\n var halfThickness = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var image = publicAPI.getInputData();\n\n if (!image) {\n return createUninitializedBounds();\n }\n\n var extent = image.getSpatialExtent();\n\n var _publicAPI$getClosest3 = publicAPI.getClosestIJKAxis(),\n ijkMode = _publicAPI$getClosest3.ijkMode;\n\n var nSlice = slice;\n\n if (ijkMode !== model.slicingMode) {\n // If not IJK slicing, get the IJK slice from the XYZ position/slice\n nSlice = publicAPI.getSliceAtPosition(slice);\n }\n\n switch (ijkMode) {\n case SlicingMode.I:\n extent[0] = nSlice - halfThickness;\n extent[1] = nSlice + halfThickness;\n break;\n\n case SlicingMode.J:\n extent[2] = nSlice - halfThickness;\n extent[3] = nSlice + halfThickness;\n break;\n\n case SlicingMode.K:\n extent[4] = nSlice - halfThickness;\n extent[5] = nSlice + halfThickness;\n break;\n }\n\n return image.extentToBounds(extent);\n };\n\n publicAPI.getIsOpaque = function () {\n return true;\n };\n\n function doPicking(p1, p2) {\n var imageData = publicAPI.getInputData();\n var extent = imageData.getExtent(); // Slice origin\n\n var ijk = [extent[0], extent[2], extent[4]];\n\n var _publicAPI$getClosest4 = publicAPI.getClosestIJKAxis(),\n ijkMode = _publicAPI$getClosest4.ijkMode;\n\n var nSlice = model.slice;\n\n if (ijkMode !== model.slicingMode) {\n // If not IJK slicing, get the IJK slice from the XYZ position/slice\n nSlice = publicAPI.getSliceAtPosition(nSlice);\n }\n\n ijk[ijkMode] += nSlice;\n var worldOrigin = [0, 0, 0];\n imageData.indexToWorld(ijk, worldOrigin); // Normal computation\n\n ijk[ijkMode] += 1;\n var worldNormal = [0, 0, 0];\n imageData.indexToWorld(ijk, worldNormal);\n worldNormal[0] -= worldOrigin[0];\n worldNormal[1] -= worldOrigin[1];\n worldNormal[2] -= worldOrigin[2];\n vec3.normalize(worldNormal, worldNormal);\n var intersect = vtkPlane.intersectWithLine(p1, p2, worldOrigin, worldNormal);\n\n if (intersect.intersection) {\n var point = intersect.x;\n var absoluteIJK = [0, 0, 0];\n imageData.worldToIndex(point, absoluteIJK); // `t` is the parametric position along the line\n // defined in Plane.intersectWithLine\n\n return {\n t: intersect.t,\n absoluteIJK: absoluteIJK\n };\n }\n\n return null;\n }\n\n publicAPI.intersectWithLineForPointPicking = function (p1, p2) {\n var pickingData = doPicking(p1, p2);\n\n if (pickingData) {\n var imageData = publicAPI.getInputData();\n var extent = imageData.getExtent(); // Get closer integer ijk\n // NB: point picking means closest slice, means rounding\n\n var ijk = [Math.round(pickingData.absoluteIJK[0]), Math.round(pickingData.absoluteIJK[1]), Math.round(pickingData.absoluteIJK[2])]; // Are we outside our actual extent\n\n if (ijk[0] < extent[0] || ijk[0] > extent[1] || ijk[1] < extent[2] || ijk[1] > extent[3] || ijk[2] < extent[4] || ijk[2] > extent[5]) {\n return null;\n }\n\n return {\n t: pickingData.t,\n ijk: ijk\n };\n }\n\n return null;\n };\n\n publicAPI.intersectWithLineForCellPicking = function (p1, p2) {\n var pickingData = doPicking(p1, p2);\n\n if (pickingData) {\n var imageData = publicAPI.getInputData();\n var extent = imageData.getExtent();\n var absIJK = pickingData.absoluteIJK; // Get closer integer ijk\n // NB: cell picking means closest voxel, means flooring\n\n var ijk = [Math.floor(absIJK[0]), Math.floor(absIJK[1]), Math.floor(absIJK[2])]; // Are we outside our actual extent\n\n if (ijk[0] < extent[0] || ijk[0] > extent[1] - 1 || ijk[1] < extent[2] || ijk[1] > extent[3] - 1 || ijk[2] < extent[4] || ijk[2] > extent[5] - 1) {\n return null;\n } // Parametric coordinates within cell\n\n\n var pCoords = [absIJK[0] - ijk[0], absIJK[1] - ijk[1], absIJK[2] - ijk[2]];\n return {\n t: pickingData.t,\n ijk: ijk,\n pCoords: pCoords\n };\n }\n\n return null;\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n displayExtent: [0, 0, 0, 0, 0, 0],\n customDisplayExtent: [0, 0, 0, 0],\n useCustomExtents: false,\n slice: 0,\n slicingMode: SlicingMode.NONE,\n closestIJKAxis: {\n ijkMode: SlicingMode.NONE,\n flip: false\n },\n renderToRectangle: false,\n sliceAtFocalPoint: false\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Build VTK API\n\n vtkAbstractMapper.extend(publicAPI, model, initialValues);\n macro.get(publicAPI, model, ['slicingMode']);\n macro.setGet(publicAPI, model, ['slice', 'closestIJKAxis', 'useCustomExtents', 'renderToRectangle', 'sliceAtFocalPoint']);\n macro.setGetArray(publicAPI, model, ['customDisplayExtent'], 4);\n CoincidentTopologyHelper.implementCoincidentTopologyMethods(publicAPI, model); // Object methods\n\n vtkImageMapper(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkImageMapper'); // ----------------------------------------------------------------------------\n\nvar vtkImageMapper$1 = _objectSpread(_objectSpread(_objectSpread({\n newInstance: newInstance,\n extend: extend\n}, staticOffsetAPI), otherStaticMethods), Constants);\n\nexport { vtkImageMapper$1 as default, extend, newInstance };\n","import macro from '../../macros.js';\nimport Constants from './ImageProperty/Constants.js';\n\nvar InterpolationType = Constants.InterpolationType;\nvar vtkErrorMacro = macro.vtkErrorMacro;\nvar VTK_MAX_VRCOMP = 4; // ----------------------------------------------------------------------------\n// vtkImageProperty methods\n// ----------------------------------------------------------------------------\n\nfunction vtkImageProperty(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkImageProperty');\n\n publicAPI.getMTime = function () {\n var mTime = model.mtime;\n var time;\n\n for (var index = 0; index < VTK_MAX_VRCOMP; index++) {\n // Color MTimes\n if (model.componentData[index].rGBTransferFunction) {\n // time that RGB transfer function was last modified\n time = model.componentData[index].rGBTransferFunction.getMTime();\n mTime = mTime > time ? mTime : time;\n } // Piecewise function MTimes\n\n\n if (model.componentData[index].piecewiseFunction) {\n // time that weighting function was last modified\n time = model.componentData[index].piecewiseFunction.getMTime();\n mTime = mTime > time ? mTime : time;\n }\n }\n\n return mTime;\n }; // Set the color of a volume to an RGB transfer function\n\n\n publicAPI.setRGBTransferFunction = function (index, func) {\n // backwards compatible call without the component index\n var idx = index;\n var transferFunc = func;\n\n if (!Number.isInteger(index)) {\n transferFunc = index;\n idx = 0;\n }\n\n if (model.componentData[idx].rGBTransferFunction !== transferFunc) {\n model.componentData[idx].rGBTransferFunction = transferFunc;\n publicAPI.modified();\n return true;\n }\n\n return false;\n }; // Get the currently set RGB transfer function.\n\n\n publicAPI.getRGBTransferFunction = function () {\n var idx = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n return model.componentData[idx].rGBTransferFunction;\n }; // Set the piecewise function\n\n\n publicAPI.setPiecewiseFunction = function (index, func) {\n var idx = index;\n var transferFunc = func;\n\n if (!Number.isInteger(index)) {\n transferFunc = index;\n idx = 0;\n }\n\n if (model.componentData[idx].piecewiseFunction !== transferFunc) {\n model.componentData[idx].piecewiseFunction = transferFunc;\n publicAPI.modified();\n return true;\n }\n\n return false;\n }; // Get the component weighting function.\n\n\n publicAPI.getPiecewiseFunction = function () {\n var idx = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n return model.componentData[idx].piecewiseFunction;\n }; // Alias to set the piecewise function\n\n\n publicAPI.setScalarOpacity = function (index, func) {\n // backwards compatible call without the component index\n var idx = index;\n var transferFunc = func;\n\n if (!Number.isInteger(index)) {\n transferFunc = index;\n idx = 0;\n }\n\n return publicAPI.setPiecewiseFunction(idx, transferFunc);\n }; // Alias to get the piecewise function (backwards compatibility)\n\n\n publicAPI.getScalarOpacity = function () {\n var idx = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n return publicAPI.getPiecewiseFunction(idx);\n };\n\n publicAPI.setComponentWeight = function (index, value) {\n if (index < 0 || index >= VTK_MAX_VRCOMP) {\n vtkErrorMacro('Invalid index');\n return false;\n }\n\n var val = Math.min(1, Math.max(0, value));\n\n if (model.componentData[index].componentWeight !== val) {\n model.componentData[index].componentWeight = val;\n publicAPI.modified();\n return true;\n }\n\n return false;\n };\n\n publicAPI.getComponentWeight = function (index) {\n if (index < 0 || index >= VTK_MAX_VRCOMP) {\n vtkErrorMacro('Invalid index');\n return 0.0;\n }\n\n return model.componentData[index].componentWeight;\n };\n\n publicAPI.setInterpolationTypeToNearest = function () {\n return publicAPI.setInterpolationType(InterpolationType.NEAREST);\n };\n\n publicAPI.setInterpolationTypeToLinear = function () {\n return publicAPI.setInterpolationType(InterpolationType.LINEAR);\n };\n\n publicAPI.getInterpolationTypeAsString = function () {\n return macro.enumToString(InterpolationType, model.interpolationType);\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n independentComponents: false,\n interpolationType: InterpolationType.LINEAR,\n colorWindow: 255,\n colorLevel: 127.5,\n ambient: 1.0,\n diffuse: 0.0,\n opacity: 1.0,\n useLookupTableScalarRange: false\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Build VTK API\n\n macro.obj(publicAPI, model);\n\n if (!model.componentData) {\n model.componentData = [];\n\n for (var i = 0; i < VTK_MAX_VRCOMP; i++) {\n model.componentData.push({\n rGBTransferFunction: null,\n piecewiseFunction: null,\n componentWeight: 1.0\n });\n }\n }\n\n macro.setGet(publicAPI, model, ['independentComponents', 'interpolationType', 'colorWindow', 'colorLevel', 'ambient', 'diffuse', 'opacity', 'useLookupTableScalarRange']); // Object methods\n\n vtkImageProperty(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkImageProperty'); // ----------------------------------------------------------------------------\n\nvar vtkImageProperty$1 = {\n newInstance: newInstance,\n extend: extend\n};\n\nexport { vtkImageProperty$1 as default, extend, newInstance };\n","import { mat4, vec3 } from 'gl-matrix';\nimport macro from '../../macros.js';\nimport vtkBoundingBox from '../../Common/DataModel/BoundingBox.js';\nimport vtkProp3D from './Prop3D.js';\nimport vtkImageProperty from './ImageProperty.js';\n\nvar vtkDebugMacro = macro.vtkDebugMacro; // ----------------------------------------------------------------------------\n// vtkImageSlice methods\n// ----------------------------------------------------------------------------\n\nfunction vtkImageSlice(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkImageSlice');\n\n publicAPI.getActors = function () {\n return publicAPI;\n };\n\n publicAPI.getImages = function () {\n return publicAPI;\n };\n\n publicAPI.getIsOpaque = function () {\n if (model.forceOpaque) {\n return true;\n }\n\n if (model.forceTranslucent) {\n return false;\n } // make sure we have a property\n\n\n if (!model.property) {\n // force creation of a property\n publicAPI.getProperty();\n }\n\n var isOpaque = model.property.getOpacity() >= 1.0; // are we using an opaque scalar array, if any?\n\n isOpaque = isOpaque && (!model.mapper || model.mapper.getIsOpaque());\n return isOpaque;\n }; // Always render during opaque pass, to keep the behavior\n // predictable and because depth-peeling kills alpha-blending.\n // In the future, the Renderer should render images in layers,\n // i.e. where each image will have a layer number assigned to it,\n // and the Renderer will do the images in their own pass.\n\n\n publicAPI.hasTranslucentPolygonalGeometry = function () {\n return false;\n };\n\n publicAPI.makeProperty = vtkImageProperty.newInstance;\n\n publicAPI.getProperty = function () {\n if (model.property === null) {\n model.property = publicAPI.makeProperty();\n }\n\n return model.property;\n };\n\n publicAPI.getBounds = function () {\n if (model.mapper === null) {\n return model.bounds;\n } // Check for the special case when the mapper's bounds are unknown\n\n\n var bds = model.mapper.getBounds();\n\n if (!bds || bds.length !== 6) {\n return bds;\n } // Check for the special case when the actor is empty.\n\n\n if (bds[0] > bds[1]) {\n model.mapperBounds = bds.concat(); // copy the mapper's bounds\n\n model.bounds = [1, -1, 1, -1, 1, -1];\n model.boundsMTime.modified();\n return bds;\n } // Check if we have cached values for these bounds - we cache the\n // values returned by model.mapper.getBounds() and we store the time\n // of caching. If the values returned this time are different, or\n // the modified time of this class is newer than the cached time,\n // then we need to rebuild.\n\n\n var zip = function zip(rows) {\n return rows[0].map(function (_, c) {\n return rows.map(function (row) {\n return row[c];\n });\n });\n };\n\n if (!model.mapperBounds || !zip([bds, model.mapperBounds]).reduce(function (a, b) {\n return a && b[0] === b[1];\n }, true) || publicAPI.getMTime() > model.boundsMTime.getMTime()) {\n vtkDebugMacro('Recomputing bounds...');\n model.mapperBounds = bds.map(function (x) {\n return x;\n });\n var bbox = [];\n vtkBoundingBox.getCorners(bds, bbox);\n publicAPI.computeMatrix();\n var tmp4 = new Float64Array(16);\n mat4.transpose(tmp4, model.matrix);\n bbox.forEach(function (pt) {\n return vec3.transformMat4(pt, pt, tmp4);\n });\n /* eslint-disable no-multi-assign */\n\n model.bounds[0] = model.bounds[2] = model.bounds[4] = Number.MAX_VALUE;\n model.bounds[1] = model.bounds[3] = model.bounds[5] = -Number.MAX_VALUE;\n /* eslint-enable no-multi-assign */\n\n model.bounds = model.bounds.map(function (d, i) {\n return i % 2 === 0 ? bbox.reduce(function (a, b) {\n return a > b[i / 2] ? b[i / 2] : a;\n }, d) : bbox.reduce(function (a, b) {\n return a < b[(i - 1) / 2] ? b[(i - 1) / 2] : a;\n }, d);\n });\n model.boundsMTime.modified();\n }\n\n return model.bounds;\n };\n\n publicAPI.getBoundsForSlice = function (slice) {\n var thickness = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Check for the special case when the mapper's bounds are unknown\n var bds = model.mapper.getBoundsForSlice(slice, thickness);\n\n if (!bds || bds.length !== 6) {\n return bds;\n } // Check for the special case when the actor is empty.\n\n\n if (bds[0] > bds[1]) {\n return bds;\n }\n\n var bbox = [];\n vtkBoundingBox.getCorners(bds, bbox);\n publicAPI.computeMatrix();\n var tmp4 = new Float64Array(16);\n mat4.transpose(tmp4, model.matrix);\n bbox.forEach(function (pt) {\n return vec3.transformMat4(pt, pt, tmp4);\n });\n var newBounds = [Number.MAX_VALUE, -Number.MAX_VALUE, Number.MAX_VALUE, -Number.MAX_VALUE, Number.MAX_VALUE, -Number.MAX_VALUE];\n newBounds = newBounds.map(function (d, i) {\n return i % 2 === 0 ? bbox.reduce(function (a, b) {\n return a > b[i / 2] ? b[i / 2] : a;\n }, d) : bbox.reduce(function (a, b) {\n return a < b[(i - 1) / 2] ? b[(i - 1) / 2] : a;\n }, d);\n });\n return newBounds;\n }; //----------------------------------------------------------------------------\n // Get the minimum X bound\n\n\n publicAPI.getMinXBound = function () {\n publicAPI.getBounds();\n return model.bounds[0];\n }; // Get the maximum X bound\n\n\n publicAPI.getMaxXBound = function () {\n publicAPI.getBounds();\n return model.bounds[1];\n }; // Get the minimum Y bound\n\n\n publicAPI.getMinYBound = function () {\n publicAPI.getBounds();\n return model.bounds[2];\n }; // Get the maximum Y bound\n\n\n publicAPI.getMaxYBound = function () {\n publicAPI.getBounds();\n return model.bounds[3];\n }; // Get the minimum Z bound\n\n\n publicAPI.getMinZBound = function () {\n publicAPI.getBounds();\n return model.bounds[4];\n }; // Get the maximum Z bound\n\n\n publicAPI.getMaxZBound = function () {\n publicAPI.getBounds();\n return model.bounds[5];\n };\n\n publicAPI.getMTime = function () {\n var mt = model.mtime;\n\n if (model.property !== null) {\n var time = model.property.getMTime();\n mt = time > mt ? time : mt;\n }\n\n return mt;\n };\n\n publicAPI.getRedrawMTime = function () {\n var mt = model.mtime;\n\n if (model.mapper !== null) {\n var time = model.mapper.getMTime();\n mt = time > mt ? time : mt;\n\n if (model.mapper.getInput() !== null) {\n // FIXME !!! getInputAlgorithm / getInput\n model.mapper.getInputAlgorithm().update();\n time = model.mapper.getInput().getMTime();\n mt = time > mt ? time : mt;\n }\n }\n\n if (model.property !== null) {\n var _time = model.property.getMTime();\n\n mt = _time > mt ? _time : mt;\n\n if (model.property.getRGBTransferFunction() !== null) {\n _time = model.property.getRGBTransferFunction().getMTime();\n mt = _time > mt ? _time : mt;\n }\n }\n\n return mt;\n };\n\n publicAPI.getSupportsSelection = function () {\n return model.mapper ? model.mapper.getSupportsSelection() : false;\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n mapper: null,\n property: null,\n bounds: [1, -1, 1, -1, 1, -1]\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Inheritance\n\n vtkProp3D.extend(publicAPI, model, initialValues); // vtkTimeStamp\n\n model.boundsMTime = {};\n macro.obj(model.boundsMTime); // Build VTK API\n\n macro.set(publicAPI, model, ['property']);\n macro.setGet(publicAPI, model, ['mapper']);\n macro.getArray(publicAPI, model, ['bounds'], 6); // Object methods\n\n vtkImageSlice(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkImageSlice'); // ----------------------------------------------------------------------------\n\nvar vtkImageSlice$1 = {\n newInstance: newInstance,\n extend: extend\n};\n\nexport { vtkImageSlice$1 as default, extend, newInstance };\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"import _defineProperty from '@babel/runtime/helpers/defineProperty';\nimport macro from '../../macros.js';\nimport vtkColorTransferFunction from './ColorTransferFunction.js';\nimport vtkPiecewiseFunction from '../../Common/DataModel/PiecewiseFunction.js';\nimport Constants from './VolumeProperty/Constants.js';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nvar InterpolationType = Constants.InterpolationType,\n OpacityMode = Constants.OpacityMode;\nvar vtkErrorMacro = macro.vtkErrorMacro;\nvar VTK_MAX_VRCOMP = 4; // ----------------------------------------------------------------------------\n// vtkVolumeProperty methods\n// ----------------------------------------------------------------------------\n\nfunction vtkVolumeProperty(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkVolumeProperty');\n\n publicAPI.getMTime = function () {\n var mTime = model.mtime;\n var time;\n\n for (var index = 0; index < VTK_MAX_VRCOMP; index++) {\n // Color MTimes\n if (model.componentData[index].colorChannels === 1) {\n if (model.componentData[index].grayTransferFunction) {\n // time that Gray transfer function was last modified\n time = model.componentData[index].grayTransferFunction.getMTime();\n mTime = mTime > time ? mTime : time;\n }\n } else if (model.componentData[index].colorChannels === 3) {\n if (model.componentData[index].rGBTransferFunction) {\n // time that RGB transfer function was last modified\n time = model.componentData[index].rGBTransferFunction.getMTime();\n mTime = mTime > time ? mTime : time;\n }\n } // Opacity MTimes\n\n\n if (model.componentData[index].scalarOpacity) {\n // time that Scalar opacity transfer function was last modified\n time = model.componentData[index].scalarOpacity.getMTime();\n mTime = mTime > time ? mTime : time;\n }\n\n if (model.componentData[index].gradientOpacity) {\n if (!model.componentData[index].disableGradientOpacity) {\n // time that Gradient opacity transfer function was last modified\n time = model.componentData[index].gradientOpacity.getMTime();\n mTime = mTime > time ? mTime : time;\n }\n }\n }\n\n return mTime;\n };\n\n publicAPI.getColorChannels = function (index) {\n if (index < 0 || index > 3) {\n vtkErrorMacro('Bad index - must be between 0 and 3');\n return 0;\n }\n\n return model.componentData[index].colorChannels;\n }; // Set the color of a volume to a gray transfer function\n\n\n publicAPI.setGrayTransferFunction = function (index, func) {\n var modified = false;\n\n if (model.componentData[index].grayTransferFunction !== func) {\n model.componentData[index].grayTransferFunction = func;\n modified = true;\n }\n\n if (model.componentData[index].colorChannels !== 1) {\n model.componentData[index].colorChannels = 1;\n modified = true;\n }\n\n if (modified) {\n publicAPI.modified();\n }\n\n return modified;\n }; // Get the currently set gray transfer function. Create one if none set.\n\n\n publicAPI.getGrayTransferFunction = function (index) {\n if (model.componentData[index].grayTransferFunction === null) {\n model.componentData[index].grayTransferFunction = vtkPiecewiseFunction.newInstance();\n model.componentData[index].grayTransferFunction.addPoint(0, 0.0);\n model.componentData[index].grayTransferFunction.addPoint(1024, 1.0);\n\n if (model.componentData[index].colorChannels !== 1) {\n model.componentData[index].colorChannels = 1;\n }\n\n publicAPI.modified();\n }\n\n return model.componentData[index].grayTransferFunction;\n }; // Set the color of a volume to an RGB transfer function\n\n\n publicAPI.setRGBTransferFunction = function (index, func) {\n var modified = false;\n\n if (model.componentData[index].rGBTransferFunction !== func) {\n model.componentData[index].rGBTransferFunction = func;\n modified = true;\n }\n\n if (model.componentData[index].colorChannels !== 3) {\n model.componentData[index].colorChannels = 3;\n modified = true;\n }\n\n if (modified) {\n publicAPI.modified();\n }\n\n return modified;\n }; // Get the currently set RGB transfer function. Create one if none set.\n\n\n publicAPI.getRGBTransferFunction = function (index) {\n if (model.componentData[index].rGBTransferFunction === null) {\n model.componentData[index].rGBTransferFunction = vtkColorTransferFunction.newInstance();\n model.componentData[index].rGBTransferFunction.addRGBPoint(0, 0.0, 0.0, 0.0);\n model.componentData[index].rGBTransferFunction.addRGBPoint(1024, 1.0, 1.0, 1.0);\n\n if (model.componentData[index].colorChannels !== 3) {\n model.componentData[index].colorChannels = 3;\n }\n\n publicAPI.modified();\n }\n\n return model.componentData[index].rGBTransferFunction;\n }; // Set the scalar opacity of a volume to a transfer function\n\n\n publicAPI.setScalarOpacity = function (index, func) {\n if (model.componentData[index].scalarOpacity !== func) {\n model.componentData[index].scalarOpacity = func;\n publicAPI.modified();\n return true;\n }\n\n return false;\n }; // Get the scalar opacity transfer function. Create one if none set.\n\n\n publicAPI.getScalarOpacity = function (index) {\n if (model.componentData[index].scalarOpacity === null) {\n model.componentData[index].scalarOpacity = vtkPiecewiseFunction.newInstance();\n model.componentData[index].scalarOpacity.addPoint(0, 1.0);\n model.componentData[index].scalarOpacity.addPoint(1024, 1.0);\n publicAPI.modified();\n }\n\n return model.componentData[index].scalarOpacity;\n };\n\n publicAPI.setComponentWeight = function (index, value) {\n if (index < 0 || index >= VTK_MAX_VRCOMP) {\n vtkErrorMacro('Invalid index');\n return false;\n }\n\n var val = Math.min(1, Math.max(0, value));\n\n if (model.componentData[index].componentWeight !== val) {\n model.componentData[index].componentWeight = val;\n publicAPI.modified();\n return true;\n }\n\n return false;\n };\n\n publicAPI.getComponentWeight = function (index) {\n if (index < 0 || index >= VTK_MAX_VRCOMP) {\n vtkErrorMacro('Invalid index');\n return 0.0;\n }\n\n return model.componentData[index].componentWeight;\n };\n\n publicAPI.setInterpolationTypeToNearest = function () {\n return publicAPI.setInterpolationType(InterpolationType.NEAREST);\n };\n\n publicAPI.setInterpolationTypeToLinear = function () {\n return publicAPI.setInterpolationType(InterpolationType.LINEAR);\n };\n\n publicAPI.setInterpolationTypeToFastLinear = function () {\n return publicAPI.setInterpolationType(InterpolationType.FAST_LINEAR);\n };\n\n publicAPI.getInterpolationTypeAsString = function () {\n return macro.enumToString(InterpolationType, model.interpolationType);\n };\n\n var sets = ['useGradientOpacity', 'scalarOpacityUnitDistance', 'gradientOpacityMinimumValue', 'gradientOpacityMinimumOpacity', 'gradientOpacityMaximumValue', 'gradientOpacityMaximumOpacity', 'opacityMode'];\n sets.forEach(function (val) {\n var cap = macro.capitalize(val);\n\n publicAPI[\"set\".concat(cap)] = function (index, value) {\n if (model.componentData[index][\"\".concat(val)] !== value) {\n model.componentData[index][\"\".concat(val)] = value;\n publicAPI.modified();\n return true;\n }\n\n return false;\n };\n });\n var gets = ['useGradientOpacity', 'scalarOpacityUnitDistance', 'gradientOpacityMinimumValue', 'gradientOpacityMinimumOpacity', 'gradientOpacityMaximumValue', 'gradientOpacityMaximumOpacity', 'opacityMode'];\n gets.forEach(function (val) {\n var cap = macro.capitalize(val);\n\n publicAPI[\"get\".concat(cap)] = function (index) {\n return model.componentData[index][\"\".concat(val)];\n };\n });\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n independentComponents: true,\n interpolationType: InterpolationType.FAST_LINEAR,\n shade: false,\n ambient: 0.1,\n diffuse: 0.7,\n specular: 0.2,\n specularPower: 10.0,\n useLabelOutline: false,\n labelOutlineThickness: 1,\n labelOutlineOpacity: 1.0\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Build VTK API\n\n macro.obj(publicAPI, model);\n\n if (!model.componentData) {\n model.componentData = [];\n\n for (var i = 0; i < VTK_MAX_VRCOMP; ++i) {\n model.componentData.push({\n colorChannels: 1,\n grayTransferFunction: null,\n rGBTransferFunction: null,\n scalarOpacity: null,\n scalarOpacityUnitDistance: 1.0,\n opacityMode: OpacityMode.FRACTIONAL,\n gradientOpacityMinimumValue: 0,\n gradientOpacityMinimumOpacity: 0.0,\n gradientOpacityMaximumValue: 1.0,\n gradientOpacityMaximumOpacity: 1.0,\n useGradientOpacity: false,\n componentWeight: 1.0\n });\n }\n }\n\n macro.setGet(publicAPI, model, ['independentComponents', 'interpolationType', 'shade', 'ambient', 'diffuse', 'specular', 'specularPower', 'useLabelOutline', 'labelOutlineThickness', 'labelOutlineOpacity']); // Object methods\n\n vtkVolumeProperty(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkVolumeProperty'); // ----------------------------------------------------------------------------\n\nvar vtkVolumeProperty$1 = _objectSpread({\n newInstance: newInstance,\n extend: extend\n}, Constants);\n\nexport { vtkVolumeProperty$1 as default, extend, newInstance };\n","import { mat4, vec3 } from 'gl-matrix';\nimport macro from '../../macros.js';\nimport vtkBoundingBox from '../../Common/DataModel/BoundingBox.js';\nimport vtkProp3D from './Prop3D.js';\nimport vtkVolumeProperty from './VolumeProperty.js';\n\nvar vtkDebugMacro = macro.vtkDebugMacro; // ----------------------------------------------------------------------------\n// vtkVolume methods\n// ----------------------------------------------------------------------------\n\nfunction vtkVolume(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkVolume');\n\n publicAPI.getVolumes = function () {\n return publicAPI;\n };\n\n publicAPI.makeProperty = vtkVolumeProperty.newInstance;\n\n publicAPI.getProperty = function () {\n if (model.property === null) {\n model.property = publicAPI.makeProperty();\n }\n\n return model.property;\n };\n\n publicAPI.getBounds = function () {\n if (model.mapper === null) {\n return model.bounds;\n } // Check for the special case when the mapper's bounds are unknown\n\n\n var bds = model.mapper.getBounds();\n\n if (!bds || bds.length !== 6) {\n return bds;\n } // Check for the special case when the actor is empty.\n\n\n if (bds[0] > bds[1]) {\n model.mapperBounds = bds.concat(); // copy the mapper's bounds\n\n model.bounds = [1, -1, 1, -1, 1, -1];\n model.boundsMTime.modified();\n return bds;\n } // Check if we have cached values for these bounds - we cache the\n // values returned by model.mapper.getBounds() and we store the time\n // of caching. If the values returned this time are different, or\n // the modified time of this class is newer than the cached time,\n // then we need to rebuild.\n\n\n var zip = function zip(rows) {\n return rows[0].map(function (_, c) {\n return rows.map(function (row) {\n return row[c];\n });\n });\n };\n\n if (!model.mapperBounds || !zip([bds, model.mapperBounds]).reduce(function (a, b) {\n return a && b[0] === b[1];\n }, true) || publicAPI.getMTime() > model.boundsMTime.getMTime()) {\n vtkDebugMacro('Recomputing bounds...');\n model.mapperBounds = bds.map(function (x) {\n return x;\n });\n var bbox = [];\n vtkBoundingBox.getCorners(bds, bbox);\n publicAPI.computeMatrix();\n var tmp4 = new Float64Array(16);\n mat4.transpose(tmp4, model.matrix);\n bbox.forEach(function (pt) {\n return vec3.transformMat4(pt, pt, tmp4);\n });\n /* eslint-disable no-multi-assign */\n\n model.bounds[0] = model.bounds[2] = model.bounds[4] = Number.MAX_VALUE;\n model.bounds[1] = model.bounds[3] = model.bounds[5] = -Number.MAX_VALUE;\n /* eslint-enable no-multi-assign */\n\n model.bounds = model.bounds.map(function (d, i) {\n return i % 2 === 0 ? bbox.reduce(function (a, b) {\n return a > b[i / 2] ? b[i / 2] : a;\n }, d) : bbox.reduce(function (a, b) {\n return a < b[(i - 1) / 2] ? b[(i - 1) / 2] : a;\n }, d);\n });\n model.boundsMTime.modified();\n }\n\n return model.bounds;\n };\n\n publicAPI.getMTime = function () {\n var mt = model.mtime;\n\n if (model.property !== null) {\n var time = model.property.getMTime();\n mt = time > mt ? time : mt;\n }\n\n return mt;\n };\n\n publicAPI.getRedrawMTime = function () {\n var mt = model.mtime;\n\n if (model.mapper !== null) {\n var time = model.mapper.getMTime();\n mt = time > mt ? time : mt;\n\n if (model.mapper.getInput() !== null) {\n // FIXME !!! getInputAlgorithm / getInput\n model.mapper.getInputAlgorithm().update();\n time = model.mapper.getInput().getMTime();\n mt = time > mt ? time : mt;\n }\n }\n\n return mt;\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n mapper: null,\n property: null,\n bounds: [1, -1, 1, -1, 1, -1]\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Inheritance\n\n vtkProp3D.extend(publicAPI, model, initialValues); // vtkTimeStamp\n\n model.boundsMTime = {};\n macro.obj(model.boundsMTime); // Build VTK API\n\n macro.set(publicAPI, model, ['property']);\n macro.setGet(publicAPI, model, ['mapper']);\n macro.getArray(publicAPI, model, ['bounds'], 6); // Object methods\n\n vtkVolume(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkVolume'); // ----------------------------------------------------------------------------\n\nvar vtkVolume$1 = {\n newInstance: newInstance,\n extend: extend\n};\n\nexport { vtkVolume$1 as default, extend, newInstance };\n",null,null,"import _defineProperty from '@babel/runtime/helpers/defineProperty';\nimport macro from '../../macros.js';\nimport { O as createUninitializedBounds, D as clampValue, K as floor } from '../../Common/Core/Math/index.js';\nimport Constants from './VolumeMapper/Constants.js';\nimport vtkAbstractMapper from './AbstractMapper.js';\nimport vtkPiecewiseFunction from '../../Common/DataModel/PiecewiseFunction.js';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nvar BlendMode = Constants.BlendMode,\n FilterMode = Constants.FilterMode;\n\nfunction createRadonTransferFunction(firstAbsorbentMaterialHounsfieldValue, firstAbsorbentMaterialAbsorption, maxAbsorbentMaterialHounsfieldValue, maxAbsorbentMaterialAbsorption, outputTransferFunction) {\n var ofun = null;\n\n if (outputTransferFunction) {\n ofun = outputTransferFunction;\n ofun.removeAllPoints();\n } else {\n ofun = vtkPiecewiseFunction.newInstance();\n }\n\n ofun.addPointLong(-1024, 0, 1, 1); // air (i.e. material with no absorption)\n\n ofun.addPoint(firstAbsorbentMaterialHounsfieldValue, firstAbsorbentMaterialAbsorption);\n ofun.addPoint(maxAbsorbentMaterialHounsfieldValue, maxAbsorbentMaterialAbsorption);\n return ofun;\n} // ----------------------------------------------------------------------------\n// Static API\n// ----------------------------------------------------------------------------\n\n\nvar STATIC = {\n createRadonTransferFunction: createRadonTransferFunction\n}; // ----------------------------------------------------------------------------\n// vtkVolumeMapper methods\n// ----------------------------------------------------------------------------\n\nfunction vtkVolumeMapper(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkVolumeMapper');\n\n var superClass = _objectSpread({}, publicAPI);\n\n publicAPI.getBounds = function () {\n var input = publicAPI.getInputData();\n\n if (!input) {\n model.bounds = createUninitializedBounds();\n } else {\n if (!model.static) {\n publicAPI.update();\n }\n\n model.bounds = input.getBounds();\n }\n\n return model.bounds;\n };\n\n publicAPI.update = function () {\n publicAPI.getInputData();\n };\n\n publicAPI.setBlendModeToComposite = function () {\n publicAPI.setBlendMode(BlendMode.COMPOSITE_BLEND);\n };\n\n publicAPI.setBlendModeToMaximumIntensity = function () {\n publicAPI.setBlendMode(BlendMode.MAXIMUM_INTENSITY_BLEND);\n };\n\n publicAPI.setBlendModeToMinimumIntensity = function () {\n publicAPI.setBlendMode(BlendMode.MINIMUM_INTENSITY_BLEND);\n };\n\n publicAPI.setBlendModeToAverageIntensity = function () {\n publicAPI.setBlendMode(BlendMode.AVERAGE_INTENSITY_BLEND);\n };\n\n publicAPI.setBlendModeToAdditiveIntensity = function () {\n publicAPI.setBlendMode(BlendMode.ADDITIVE_INTENSITY_BLEND);\n };\n\n publicAPI.setBlendModeToRadonTransform = function () {\n publicAPI.setBlendMode(BlendMode.RADON_TRANSFORM_BLEND);\n };\n\n publicAPI.getBlendModeAsString = function () {\n return macro.enumToString(BlendMode, model.blendMode);\n };\n\n publicAPI.setAverageIPScalarRange = function (min, max) {\n console.warn('setAverageIPScalarRange is deprecated use setIpScalarRange');\n publicAPI.setIpScalarRange(min, max);\n };\n\n publicAPI.getFilterModeAsString = function () {\n return macro.enumToString(FilterMode, model.filterMode);\n };\n\n publicAPI.setFilterModeToOff = function () {\n publicAPI.setFilterMode(FilterMode.OFF);\n };\n\n publicAPI.setFilterModeToNormalized = function () {\n publicAPI.setFilterMode(FilterMode.NORMALIZED);\n };\n\n publicAPI.setFilterModeToRaw = function () {\n publicAPI.setFilterMode(FilterMode.RAW);\n };\n\n publicAPI.setGlobalIlluminationReach = function (gl) {\n return superClass.setGlobalIlluminationReach(clampValue(gl, 0.0, 1.0));\n };\n\n publicAPI.setVolumetricScatteringBlending = function (vsb) {\n return superClass.setVolumetricScatteringBlending(clampValue(vsb, 0.0, 1.0));\n };\n\n publicAPI.setVolumeShadowSamplingDistFactor = function (vsdf) {\n return superClass.setVolumeShadowSamplingDistFactor(vsdf >= 1.0 ? vsdf : 1.0);\n };\n\n publicAPI.setAnisotropy = function (at) {\n return superClass.setAnisotropy(clampValue(at, -0.99, 0.99));\n };\n\n publicAPI.setLAOKernelSize = function (ks) {\n return superClass.setLAOKernelSize(floor(clampValue(ks, 1, 32)));\n };\n\n publicAPI.setLAOKernelRadius = function (kr) {\n return superClass.setLAOKernelRadius(kr >= 1 ? kr : 1);\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n// TODO: what values to use for averageIPScalarRange to get GLSL to use max / min values like [-Math.inf, Math.inf]?\n\n\nvar DEFAULT_VALUES = {\n bounds: [1, -1, 1, -1, 1, -1],\n sampleDistance: 1.0,\n imageSampleDistance: 1.0,\n maximumSamplesPerRay: 1000,\n autoAdjustSampleDistances: true,\n blendMode: BlendMode.COMPOSITE_BLEND,\n ipScalarRange: [-1000000.0, 1000000.0],\n filterMode: FilterMode.OFF,\n // ignored by WebGL so no behavior change\n preferSizeOverAccuracy: false,\n // Whether to use halfFloat representation of float, when it is inaccurate\n computeNormalFromOpacity: false,\n // volume shadow parameters\n volumetricScatteringBlending: 0.0,\n globalIlluminationReach: 0.0,\n volumeShadowSamplingDistFactor: 5.0,\n anisotropy: 0.0,\n // local ambient occlusion\n localAmbientOcclusion: false,\n LAOKernelSize: 15,\n LAOKernelRadius: 7\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues);\n vtkAbstractMapper.extend(publicAPI, model, initialValues);\n macro.setGet(publicAPI, model, ['sampleDistance', 'imageSampleDistance', 'maximumSamplesPerRay', 'autoAdjustSampleDistances', 'blendMode', 'filterMode', 'preferSizeOverAccuracy', 'computeNormalFromOpacity', 'volumetricScatteringBlending', 'globalIlluminationReach', 'volumeShadowSamplingDistFactor', 'anisotropy', 'localAmbientOcclusion', 'LAOKernelSize', 'LAOKernelRadius']);\n macro.setGetArray(publicAPI, model, ['ipScalarRange'], 2);\n macro.event(publicAPI, model, 'lightingActivated'); // Object methods\n\n vtkVolumeMapper(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkVolumeMapper'); // ----------------------------------------------------------------------------\n\nvar vtkVolumeMapper$1 = _objectSpread({\n newInstance: newInstance,\n extend: extend\n}, STATIC);\n\nexport { STATIC, vtkVolumeMapper$1 as default, extend, newInstance };\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"function e(e,t,r,n){return new(r||(r=Promise))((function(o,a){function i(e){try{d(n.next(e))}catch(e){a(e)}}function c(e){try{d(n.throw(e))}catch(e){a(e)}}function d(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,c)}d((n=n.apply(e,t||[])).next())}))}const t=[\"geforce 320m\",\"geforce 8600\",\"geforce 8600m gt\",\"geforce 8800 gs\",\"geforce 8800 gt\",\"geforce 9400\",\"geforce 9400m g\",\"geforce 9400m\",\"geforce 9600m gt\",\"geforce 9600m\",\"geforce fx go5200\",\"geforce gt 120\",\"geforce gt 130\",\"geforce gt 330m\",\"geforce gtx 285\",\"google swiftshader\",\"intel g41\",\"intel g45\",\"intel gma 4500mhd\",\"intel gma x3100\",\"intel hd 3000\",\"intel q45\",\"legacy\",\"mali-2\",\"mali-3\",\"mali-4\",\"quadro fx 1500\",\"quadro fx 4\",\"quadro fx 5\",\"radeon hd 2400\",\"radeon hd 2600\",\"radeon hd 4670\",\"radeon hd 4850\",\"radeon hd 4870\",\"radeon hd 5670\",\"radeon hd 5750\",\"radeon hd 6290\",\"radeon hd 6300\",\"radeon hd 6310\",\"radeon hd 6320\",\"radeon hd 6490m\",\"radeon hd 6630m\",\"radeon hd 6750m\",\"radeon hd 6770m\",\"radeon hd 6970m\",\"sgx 543\",\"sgx543\"];function r(e){return e=e.toLowerCase().replace(/^angle ?\\((.+)\\)*$/,\"$1\").replace(/\\s(\\d{1,2}gb|direct3d.+$)|\\(r\\)| \\([^)]+\\)$/g,\"\")}const n=\"undefined\"==typeof window,o=(()=>{if(n)return;const{userAgent:e,platform:t,maxTouchPoints:r}=window.navigator,o=/(iphone|ipod|ipad)/i.test(e),a=\"iPad\"===t||\"MacIntel\"===t&&r>0&&!window.MSStream;return{isIpad:a,isMobile:/android/i.test(e)||o||a,isSafari12:/Version\\/12.+Safari/.test(e)}})();function a(e,t,r){if(!r)return[t];const n=function(e){const t=\"\\n precision highp float;\\n attribute vec3 aPosition;\\n varying float vvv;\\n void main() {\\n vvv = 0.31622776601683794;\\n gl_Position = vec4(aPosition, 1.0);\\n }\\n \",r=\"\\n precision highp float;\\n varying float vvv;\\n void main() {\\n vec4 enc = vec4(1.0, 255.0, 65025.0, 16581375.0) * vvv;\\n enc = fract(enc);\\n enc -= enc.yzww * vec4(1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0, 0.0);\\n gl_FragColor = enc;\\n }\\n \",n=e.createShader(35633),o=e.createShader(35632),a=e.createProgram();if(!(o&&n&&a))return;e.shaderSource(n,t),e.shaderSource(o,r),e.compileShader(n),e.compileShader(o),e.attachShader(a,n),e.attachShader(a,o),e.linkProgram(a),e.detachShader(a,n),e.detachShader(a,o),e.deleteShader(n),e.deleteShader(o),e.useProgram(a);const i=e.createBuffer();e.bindBuffer(34962,i),e.bufferData(34962,new Float32Array([-1,-1,0,3,-1,0,-1,3,0]),35044);const c=e.getAttribLocation(a,\"aPosition\");e.vertexAttribPointer(c,3,5126,!1,0,0),e.enableVertexAttribArray(c),e.clearColor(1,1,1,1),e.clear(16384),e.viewport(0,0,1,1),e.drawArrays(4,0,3);const d=new Uint8Array(4);return e.readPixels(0,0,1,1,6408,5121,d),e.deleteProgram(a),e.deleteBuffer(i),d.join(\"\")}(e),a=\"801621810\",i=\"8016218135\",c=\"80162181161\",d=(null==o?void 0:o.isIpad)?[[\"a7\",c,12],[\"a8\",i,15],[\"a8x\",i,15],[\"a9\",i,15],[\"a9x\",i,15],[\"a10\",i,15],[\"a10x\",i,15],[\"a12\",a,15],[\"a12x\",a,15],[\"a12z\",a,15],[\"a14\",a,15],[\"m1\",a,15]]:[[\"a7\",c,12],[\"a8\",i,12],[\"a9\",i,15],[\"a10\",i,15],[\"a11\",a,15],[\"a12\",a,15],[\"a13\",a,15],[\"a14\",a,15]];let l;\"80162181255\"===n?l=d.filter((([,,e])=>e>=14)):(l=d.filter((([,e])=>e===n)),l.length||(l=d));return l.map((([e])=>`apple ${e} gpu`))}const i=[],c=[];function d(e,t){if(e===t)return 0;const r=e;e.length>t.length&&(e=t,t=r);let n=e.length,o=t.length;for(;n>0&&e.charCodeAt(~-n)===t.charCodeAt(~-o);)n--,o--;let a,d=0;for(;df?s>f?f+1:s:s>l?l+1:s;return f}function l(e){return null!=e}class s extends Error{constructor(e){super(e),Object.setPrototypeOf(this,new.target.prototype)}}const f=({mobileTiers:i=[0,15,30,60],desktopTiers:c=[0,15,30,60],override:f={},glContext:u,failIfMajorPerformanceCaveat:h=!1,benchmarksURL:g=\"https://unpkg.com/detect-gpu@4.0.24/dist/benchmarks\"}={})=>e(void 0,void 0,void 0,(function*(){const p={};if(n)return{tier:0,type:\"SSR\"};const{isIpad:m=!!(null==o?void 0:o.isIpad),isMobile:v=!!(null==o?void 0:o.isMobile),screenSize:w=window.screen,loadBenchmarks:x=(t=>e(void 0,void 0,void 0,(function*(){const e=yield fetch(`${g}/${t}`).then((e=>e.json()));if(parseInt(e.shift().split(\".\")[0],10)<4)throw new s(\"Detect GPU benchmark data is out of date. Please update to version 4x\");return e})))}=f;let{renderer:A}=f;const P=(e,t,r,n,o)=>({device:o,fps:n,gpu:r,isMobile:v,tier:e,type:t});let b,S=\"\";if(A)A=r(A),b=[A];else{const e=u||function(e,t=!1){const r={alpha:!1,antialias:!1,depth:!1,failIfMajorPerformanceCaveat:t,powerPreference:\"high-performance\",stencil:!1};e&&delete r.powerPreference;const n=window.document.createElement(\"canvas\"),o=n.getContext(\"webgl\",r)||n.getContext(\"experimental-webgl\",r);return null!=o?o:void 0}(null==o?void 0:o.isSafari12,h);if(!e)return P(0,\"WEBGL_UNSUPPORTED\");const t=e.getExtension(\"WEBGL_debug_renderer_info\");if(t&&(A=e.getParameter(t.UNMASKED_RENDERER_WEBGL)),!A)return P(1,\"FALLBACK\");S=A,A=r(A),b=function(e,t,r){return\"apple gpu\"===t?a(e,t,r):[t]}(e,A,v)}const y=(yield Promise.all(b.map((t=>e(void 0,void 0,void 0,(function*(){var e;const r=(e=>{const t=v?[\"adreno\",\"apple\",\"mali-t\",\"mali\",\"nvidia\",\"powervr\"]:[\"intel\",\"apple\",\"amd\",\"radeon\",\"nvidia\",\"geforce\"];for(const r of t)if(e.includes(r))return r})(t);if(!r)return;const n=`${v?\"m\":\"d\"}-${r}${m?\"-ipad\":\"\"}.json`,o=p[n]=null!==(e=p[n])&&void 0!==e?e:x(n);let a;try{a=yield o}catch(e){if(e instanceof s)throw e;return}const i=function(e){var t;const r=(e=e.replace(/\\([^)]+\\)/,\"\")).match(/\\d+/)||e.match(/(\\W|^)([A-Za-z]{1,3})(\\W|$)/g);return null!==(t=null==r?void 0:r.join(\"\").replace(/\\W|amd/g,\"\"))&&void 0!==t?t:\"\"}(t);let c=a.filter((([,e])=>e===i));c.length||(c=a.filter((([e])=>e.includes(t))));const l=c.length;if(0===l)return;let f,[u,,,h]=l>1?c.map((e=>[e,d(t,e[0])])).sort((([,e],[,t])=>e-t))[0][0]:c[0],g=Number.MAX_VALUE;const{devicePixelRatio:A}=window,P=w.width*A*w.height*A;for(const e of h){const[t,r]=e,n=t*r,o=Math.abs(P-n);oe===r?t-n:e-r));if(!y.length){const e=t.find((e=>A.includes(e)));return e?P(0,\"BLOCKLISTED\",e):P(1,\"FALLBACK\",`${A} (${S})`)}const[,C,E,L]=y[0];if(-1===C)return P(0,\"BLOCKLISTED\",E,C,L);const M=v?i:c;let $=0;for(let e=0;e=M[e]&&($=e);return P($,\"BENCHMARK\",E,C,L)}));export{f as getGPUTier};\n//# sourceMappingURL=detect-gpu.esm.js.map\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"import macro from '../../macros.js';\nimport vtkViewNodeFactory from '../SceneGraph/ViewNodeFactory.js';\n\nvar CLASS_MAPPING = Object.create(null);\nfunction registerOverride(className, fn) {\n CLASS_MAPPING[className] = fn;\n} // ----------------------------------------------------------------------------\n// vtkWebGPUViewNodeFactory methods\n// ----------------------------------------------------------------------------\n\nfunction vtkWebGPUViewNodeFactory(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkWebGPUViewNodeFactory');\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Static class mapping shared across instances\n\n model.overrides = CLASS_MAPPING; // Inheritance\n\n vtkViewNodeFactory.extend(publicAPI, model, initialValues); // Object methods\n\n vtkWebGPUViewNodeFactory(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkWebGPUViewNodeFactory'); // ----------------------------------------------------------------------------\n\nvar vtkWebGPUViewNodeFactory$1 = {\n newInstance: newInstance,\n extend: extend\n};\n\nexport { vtkWebGPUViewNodeFactory$1 as default, extend, newInstance, registerOverride };\n","import { mat4 } from 'gl-matrix';\nimport macro from '../../macros.js';\nimport vtkViewNode from '../SceneGraph/ViewNode.js';\nimport { registerOverride } from './ViewNodeFactory.js';\n\n// vtkWebGPUCamera methods\n// ----------------------------------------------------------------------------\n\nfunction vtkWebGPUCamera(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkWebGPUCamera');\n\n publicAPI.getProjectionMatrix = function (outMat, aspect, cRange, windowCenter) {\n mat4.identity(outMat);\n\n if (model.renderable.getParallelProjection()) {\n // set up a rectangular parallelipiped\n var parallelScale = model.renderable.getParallelScale();\n var width = parallelScale * aspect;\n var height = parallelScale;\n var xmin = (windowCenter[0] - 1.0) * width;\n var xmax = (windowCenter[0] + 1.0) * width;\n var ymin = (windowCenter[1] - 1.0) * height;\n var ymax = (windowCenter[1] + 1.0) * height;\n var xr = 1.0 / (xmax - xmin);\n var yr = 1.0 / (ymax - ymin);\n outMat[0] = 2.0 * xr;\n outMat[5] = 2.0 * yr;\n outMat[10] = 1.0 / (cRange[1] - cRange[0]);\n outMat[12] = (xmax + xmin) * xr;\n outMat[13] = (ymax + ymin) * yr;\n outMat[14] = cRange[1] / (cRange[1] - cRange[0]);\n } else {\n var tmp = Math.tan(Math.PI * model.renderable.getViewAngle() / 360.0);\n\n var _width;\n\n var _height;\n\n if (model.renderable.getUseHorizontalViewAngle() === true) {\n _width = cRange[0] * tmp;\n _height = cRange[0] * tmp / aspect;\n } else {\n _width = cRange[0] * tmp * aspect;\n _height = cRange[0] * tmp;\n }\n\n var _xmin = (windowCenter[0] - 1.0) * _width;\n\n var _xmax = (windowCenter[0] + 1.0) * _width;\n\n var _ymin = (windowCenter[1] - 1.0) * _height;\n\n var _ymax = (windowCenter[1] + 1.0) * _height;\n\n outMat[0] = 2.0 * cRange[0] / (_xmax - _xmin);\n outMat[5] = 2.0 * cRange[0] / (_ymax - _ymin);\n outMat[12] = (_xmin + _xmax) / (_xmax - _xmin);\n outMat[13] = (_ymin + _ymax) / (_ymax - _ymin);\n outMat[10] = 0.0;\n outMat[14] = cRange[0];\n outMat[11] = -1.0;\n outMat[15] = 0.0;\n }\n };\n\n publicAPI.convertToOpenGLDepth = function (val) {\n if (model.renderable.getParallelProjection()) {\n return 1.0 - val;\n }\n\n var cRange = model.renderable.getClippingRangeByReference();\n var zval = -cRange[0] / val;\n zval = (cRange[0] + cRange[1]) / (cRange[1] - cRange[0]) + 2.0 * cRange[0] * cRange[1] / (zval * (cRange[1] - cRange[0]));\n return 0.5 * zval + 0.5;\n };\n\n publicAPI.getKeyMatrices = function (webGPURenderer) {\n // has the camera changed?\n var ren = webGPURenderer.getRenderable();\n var webGPURenderWindow = webGPURenderer.getParent();\n\n if (Math.max(webGPURenderWindow.getMTime(), publicAPI.getMTime(), ren.getMTime(), model.renderable.getMTime(), webGPURenderer.getStabilizedTime()) > model.keyMatrixTime.getMTime()) {\n var wcvc = model.renderable.getViewMatrix();\n mat4.copy(model.keyMatrices.normalMatrix, wcvc); // zero out translation\n\n model.keyMatrices.normalMatrix[3] = 0.0;\n model.keyMatrices.normalMatrix[7] = 0.0;\n model.keyMatrices.normalMatrix[11] = 0.0;\n mat4.invert(model.keyMatrices.normalMatrix, model.keyMatrices.normalMatrix);\n mat4.transpose(model.keyMatrices.wcvc, wcvc);\n var center = webGPURenderer.getStabilizedCenterByReference();\n mat4.translate(model.keyMatrices.scvc, model.keyMatrices.wcvc, center);\n var aspectRatio = webGPURenderer.getAspectRatio();\n var cRange = model.renderable.getClippingRangeByReference();\n publicAPI.getProjectionMatrix(model.keyMatrices.vcpc, aspectRatio, cRange, model.renderable.getWindowCenterByReference());\n mat4.multiply(model.keyMatrices.scpc, model.keyMatrices.vcpc, model.keyMatrices.scvc);\n mat4.invert(model.keyMatrices.pcsc, model.keyMatrices.scpc);\n model.keyMatrixTime.modified();\n }\n\n return model.keyMatrices;\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n keyMatrixTime: null,\n keyMatrices: null\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Inheritance\n\n vtkViewNode.extend(publicAPI, model, initialValues);\n model.keyMatrixTime = {};\n macro.obj(model.keyMatrixTime); // values always get set by the get method\n\n model.keyMatrices = {\n normalMatrix: new Float64Array(16),\n vcpc: new Float64Array(16),\n pcsc: new Float64Array(16),\n wcvc: new Float64Array(16),\n scpc: new Float64Array(16),\n scvc: new Float64Array(16)\n }; // Build VTK API\n\n macro.setGet(publicAPI, model, ['keyMatrixTime']); // Object methods\n\n vtkWebGPUCamera(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend); // ----------------------------------------------------------------------------\n\nvar index = {\n newInstance: newInstance,\n extend: extend\n}; // Register ourself to WebGPU backend if imported\n\nregisterOverride('vtkCamera', newInstance);\n\nexport { index as default, extend, newInstance };\n","import macro from '../../macros.js';\n\n// vtkWebGPUBindGroup methods\n// ----------------------------------------------------------------------------\n\nfunction vtkWebGPUBindGroup(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkWebGPUBindGroup');\n\n publicAPI.setBindables = function (bindables) {\n // is there a difference between the old and new list?\n if (model.bindables.length === bindables.length) {\n var allMatch = true;\n\n for (var i = 0; i < model.bindables.length; i++) {\n if (model.bindables[i] !== bindables[i]) {\n allMatch = false;\n }\n }\n\n if (allMatch) {\n return;\n }\n } // there is a difference\n\n\n model.bindables = bindables;\n publicAPI.modified();\n };\n\n publicAPI.getBindGroupLayout = function (device) {\n var entries = [];\n\n for (var i = 0; i < model.bindables.length; i++) {\n var entry = model.bindables[i].getBindGroupLayoutEntry();\n entry.binding = i;\n entries.push(entry);\n }\n\n return device.getBindGroupLayout({\n entries: entries\n });\n };\n\n publicAPI.getBindGroup = function (device) {\n // check mtime\n var mtime = publicAPI.getMTime();\n\n for (var i = 0; i < model.bindables.length; i++) {\n var tm = model.bindables[i].getBindGroupTime().getMTime();\n mtime = tm > mtime ? tm : mtime;\n }\n\n if (mtime < model.bindGroupTime.getMTime()) {\n return model.bindGroup;\n }\n\n var entries = [];\n\n for (var _i = 0; _i < model.bindables.length; _i++) {\n var entry = model.bindables[_i].getBindGroupEntry();\n\n entry.binding = _i;\n entries.push(entry);\n }\n\n model.bindGroup = device.getHandle().createBindGroup({\n layout: publicAPI.getBindGroupLayout(device),\n entries: entries,\n label: model.label\n });\n model.bindGroupTime.modified();\n return model.bindGroup;\n };\n\n publicAPI.getShaderCode = function (pipeline) {\n var lines = [];\n var bgroup = pipeline.getBindGroupLayoutCount(model.label);\n\n for (var i = 0; i < model.bindables.length; i++) {\n lines.push(model.bindables[i].getShaderCode(i, bgroup));\n }\n\n return lines.join('\\n');\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n device: null,\n handle: null,\n label: null\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Object methods\n\n macro.obj(publicAPI, model);\n model.bindables = [];\n model.bindGroupTime = {};\n macro.obj(model.bindGroupTime, {\n mtime: 0\n });\n macro.get(publicAPI, model, ['bindGroupTime', 'handle', 'sizeInBytes', 'usage']);\n macro.setGet(publicAPI, model, ['label', 'device', 'arrayInformation']);\n vtkWebGPUBindGroup(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend); // ----------------------------------------------------------------------------\n\nvar vtkWebGPUBindGroup$1 = {\n newInstance: newInstance,\n extend: extend\n};\n\nexport { vtkWebGPUBindGroup$1 as default, extend, newInstance };\n","import macro from '../../macros.js';\n\n// vtkWebGPUShaderModule methods\n// ----------------------------------------------------------------------------\n\nfunction vtkWebGPUShaderModule(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkWebGPUShaderModule');\n\n publicAPI.initialize = function (device, shaderDesc) {\n model.device = device; // console.log(shaderDesc.getCode());\n\n model.handle = model.device.getHandle().createShaderModule({\n code: shaderDesc.getCode()\n });\n }; // publicAPI.setLastCameraMTime = (mtime) => {\n // model.lastCameraMTime = mtime;\n // };\n\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n device: null,\n handle: null\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Build VTK API\n\n macro.obj(publicAPI, model);\n macro.get(publicAPI, model, ['lastCameraMTime']);\n macro.setGet(publicAPI, model, ['device', 'handle']); // Object methods\n\n vtkWebGPUShaderModule(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\n\nvar newInstance = macro.newInstance(extend, 'vtkWebGPUShaderModule'); // ----------------------------------------------------------------------------\n\nvar vtkWebGPUShaderModule$1 = {\n newInstance: newInstance,\n extend: extend\n};\n\nexport { vtkWebGPUShaderModule$1 as default };\n","import macro from '../../macros.js';\nimport vtkWebGPUShaderModule from './ShaderModule.js';\n\n// this is useful for building up shader strings which typically involve\n// lots of string substitutions. Return true if a substitution was done.\n\nfunction substitute(source, search, replace) {\n var all = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n var replaceStr = Array.isArray(replace) ? replace.join('\\n') : replace;\n var replaced = false;\n\n if (source.search(search) !== -1) {\n replaced = true;\n }\n\n var gflag = '';\n\n if (all) {\n gflag = 'g';\n }\n\n var regex = new RegExp(search, gflag);\n var resultstr = source.replace(regex, replaceStr);\n return {\n replace: replaced,\n result: resultstr\n };\n} // ----------------------------------------------------------------------------\n// vtkWebGPUShaderCache methods\n// ----------------------------------------------------------------------------\n\n\nfunction vtkWebGPUShaderCache(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkWebGPUShaderCache');\n\n publicAPI.getShaderModule = function (shaderDesc) {\n // has it already been created?\n var sType = shaderDesc.getType();\n var sHash = shaderDesc.getHash();\n\n var keys = model._shaderModules.keys();\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (key.getHash() === sHash && key.getType() === sType) {\n return model._shaderModules.get(key);\n }\n } // console.log(JSON.stringify(shaderDesc));\n\n\n var sm = vtkWebGPUShaderModule.newInstance();\n sm.initialize(model.device, shaderDesc);\n\n model._shaderModules.set(shaderDesc, sm);\n\n return sm;\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n shaderModules: null,\n device: null,\n window: null\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Internal objects\n\n model._shaderModules = new Map(); // Build VTK API\n\n macro.obj(publicAPI, model);\n macro.setGet(publicAPI, model, ['device', 'window']); // Object methods\n\n vtkWebGPUShaderCache(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkWebGPUShaderCache'); // ----------------------------------------------------------------------------\n\nvar vtkWebGPUShaderCache$1 = {\n newInstance: newInstance,\n extend: extend,\n substitute: substitute\n};\n\nexport { vtkWebGPUShaderCache$1 as default, extend, newInstance };\n","import { newInstance as newInstance$1, obj, get, setGet } from '../../macros.js';\n\n// vtkWebGPUPipeline methods\n// ----------------------------------------------------------------------------\n\nfunction vtkWebGPUPipeline(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkWebGPUPipeline');\n\n publicAPI.getShaderDescriptions = function () {\n return model.shaderDescriptions;\n };\n\n publicAPI.initialize = function (device, hash) {\n // start with the renderencoder settings\n model.pipelineDescription = model.renderEncoder.getPipelineSettings();\n model.pipelineDescription.primitive.topology = model.topology;\n model.pipelineDescription.vertex = model.vertexState;\n model.pipelineDescription.label = hash; // add in bind group layouts\n\n var bindGroupLayouts = [];\n\n for (var i = 0; i < model.layouts.length; i++) {\n bindGroupLayouts.push(model.layouts[i].layout);\n }\n\n model.pipelineLayout = device.getHandle().createPipelineLayout({\n bindGroupLayouts: bindGroupLayouts\n });\n model.pipelineDescription.layout = model.pipelineLayout;\n\n for (var _i = 0; _i < model.shaderDescriptions.length; _i++) {\n var sd = model.shaderDescriptions[_i];\n var sm = device.getShaderModule(sd);\n\n if (sd.getType() === 'vertex') {\n model.pipelineDescription.vertex.module = sm.getHandle();\n model.pipelineDescription.vertex.entryPoint = 'main';\n }\n\n if (sd.getType() === 'fragment') {\n model.pipelineDescription.fragment.module = sm.getHandle();\n model.pipelineDescription.fragment.entryPoint = 'main';\n }\n }\n\n model.handle = device.getHandle().createRenderPipeline(model.pipelineDescription);\n };\n\n publicAPI.getShaderDescription = function (stype) {\n for (var i = 0; i < model.shaderDescriptions.length; i++) {\n if (model.shaderDescriptions[i].getType() === stype) return model.shaderDescriptions[i];\n }\n\n return null;\n };\n\n publicAPI.addBindGroupLayout = function (bindGroup) {\n if (!bindGroup) {\n return;\n }\n\n model.layouts.push({\n layout: bindGroup.getBindGroupLayout(model.device),\n label: bindGroup.getLabel()\n });\n };\n\n publicAPI.getBindGroupLayout = function (idx) {\n return model.layouts[idx].layout;\n };\n\n publicAPI.getBindGroupLayoutCount = function (llabel) {\n for (var i = 0; i < model.layouts.length; i++) {\n if (model.layouts[i].label === llabel) {\n return i;\n }\n }\n\n return 0;\n };\n\n publicAPI.bindVertexInput = function (renderEncoder, vInput) {\n vInput.bindBuffers(renderEncoder);\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n handle: null,\n layouts: null,\n renderEncoder: null,\n shaderDescriptions: null,\n vertexState: null,\n topology: null,\n pipelineDescription: null\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Build VTK API\n\n obj(publicAPI, model);\n model.layouts = [];\n model.shaderDescriptions = [];\n get(publicAPI, model, ['handle', 'pipelineDescription']);\n setGet(publicAPI, model, ['device', 'renderEncoder', 'topology', 'vertexState']); // For more macro methods, see \"Sources/macros.js\"\n // Object specific methods\n\n vtkWebGPUPipeline(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = newInstance$1(extend, 'vtkWebGPUPipeline'); // ----------------------------------------------------------------------------\n\nvar vtkWebGPUPipeline$1 = {\n newInstance: newInstance,\n extend: extend\n};\n\nexport { vtkWebGPUPipeline$1 as default, extend, newInstance };\n","import macro from '../../macros.js';\nimport vtkWebGPUShaderCache from './ShaderCache.js';\n\n// vtkWebGPUShaderDescription methods\n// ----------------------------------------------------------------------------\n// shader description\n\nfunction vtkWebGPUShaderDescription(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkWebGPUShaderDescription');\n\n publicAPI.hasOutput = function (name) {\n return model.outputNames.includes(name);\n };\n\n publicAPI.addOutput = function (type, name) {\n var interpolation = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;\n model.outputTypes.push(type);\n model.outputNames.push(name);\n model.outputInterpolations.push(interpolation);\n };\n\n publicAPI.addBuiltinOutput = function (type, name) {\n model.builtinOutputTypes.push(type);\n model.builtinOutputNames.push(name);\n };\n\n publicAPI.addBuiltinInput = function (type, name) {\n model.builtinInputTypes.push(type);\n model.builtinInputNames.push(name);\n }; // perform shader replacements for the input and outputs\n // of this shader. That includes vertex inputs if specified\n\n\n publicAPI.replaceShaderCode = function (priorStage, vertexInput) {\n var inputImpl = [];\n var iodec = [];\n\n if (vertexInput) {\n inputImpl.push(vertexInput.getShaderCode());\n }\n\n if (priorStage || model.builtinInputNames.length) {\n var inputStruct = [];\n inputStruct.push(\"struct \".concat(model.type, \"Input\\n{\"));\n\n if (priorStage) {\n var inputNames = priorStage.getOutputNamesByReference();\n var inputTypes = priorStage.getOutputTypesByReference();\n var inputInterpolations = priorStage.getOutputInterpolationsByReference();\n\n for (var i = 0; i < inputNames.length; i++) {\n if (inputInterpolations[i] !== undefined) {\n inputStruct.push(\" @location(\".concat(i, \") @interpolate(\").concat(inputInterpolations[i], \") \").concat(inputNames[i], \" : \").concat(inputTypes[i], \",\"));\n } else {\n inputStruct.push(\" @location(\".concat(i, \") \").concat(inputNames[i], \" : \").concat(inputTypes[i], \",\"));\n }\n }\n }\n\n for (var _i = 0; _i < model.builtinInputNames.length; _i++) {\n inputStruct.push(\" \".concat(model.builtinInputNames[_i], \" : \").concat(model.builtinInputTypes[_i], \",\"));\n }\n\n if (inputStruct.length > 1) {\n inputStruct.push('};');\n iodec = inputStruct;\n inputImpl[inputImpl.length - 1] += ',';\n inputImpl.push(\"input: \".concat(model.type, \"Input\"));\n }\n }\n\n if (inputImpl.length) {\n model.code = vtkWebGPUShaderCache.substitute(model.code, '//VTK::IOStructs::Input', inputImpl).result;\n }\n\n if (model.outputNames.length + model.builtinOutputNames.length) {\n var outputStruct = [\"struct \".concat(model.type, \"Output\\n{\")];\n\n for (var _i2 = 0; _i2 < model.outputNames.length; _i2++) {\n if (model.outputInterpolations[_i2] !== undefined) {\n outputStruct.push(\" @location(\".concat(_i2, \") @interpolate(\").concat(model.outputInterpolations[_i2], \") \").concat(model.outputNames[_i2], \" : \").concat(model.outputTypes[_i2], \",\"));\n } else {\n outputStruct.push(\" @location(\".concat(_i2, \") \").concat(model.outputNames[_i2], \" : \").concat(model.outputTypes[_i2], \",\"));\n }\n }\n\n for (var _i3 = 0; _i3 < model.builtinOutputNames.length; _i3++) {\n outputStruct.push(\" \".concat(model.builtinOutputNames[_i3], \" : \").concat(model.builtinOutputTypes[_i3], \",\"));\n }\n\n outputStruct.push('};');\n iodec = iodec.concat(outputStruct);\n model.code = vtkWebGPUShaderCache.substitute(model.code, '//VTK::IOStructs::Output', [\"-> \".concat(model.type, \"Output\")]).result;\n }\n\n model.code = vtkWebGPUShaderCache.substitute(model.code, '//VTK::IOStructs::Dec', iodec).result;\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n type: null,\n // 'vertex' or 'fragment'\n hash: null,\n code: null,\n outputNames: null,\n outputTypes: null\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues);\n model.outputNames = [];\n model.outputTypes = [];\n model.outputInterpolations = [];\n model.builtinOutputNames = [];\n model.builtinOutputTypes = [];\n model.builtinInputNames = [];\n model.builtinInputTypes = []; // Build VTK API\n\n macro.obj(publicAPI, model);\n macro.setGet(publicAPI, model, ['type', 'hash', 'code']);\n macro.getArray(publicAPI, model, ['outputTypes', 'outputNames', 'outputInterpolations']); // Object methods\n\n vtkWebGPUShaderDescription(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkWebGPUShaderDescription'); // ----------------------------------------------------------------------------\n\nvar vtkWebGPUShaderDescription$1 = {\n newInstance: newInstance,\n extend: extend\n};\n\nexport { vtkWebGPUShaderDescription$1 as default, extend, newInstance };\n","import { vtkErrorMacro } from '../../macros.js';\n\n// vtkWebGPUDevice static functions\n//\n// WebGPU uses types in a many places and calls, and often those types\n// need to be associated with byte sizes, alignments, native arrays etc.\n// The folowing methods are designed to help vtk.js introspect those types.\n// WebGPU currently tends to use multiple type formats:\n// - buffer types such as float32x4\n// - shader types suchs as vec4\n// - texture types such as rgba32float\n// ----------------------------------------------------------------------------\n// see https://gpuweb.github.io/gpuweb/#texture-formats\n// for possible formats, there are a lot of them\n\nvar textureDetails = {\n // 8-bit formats\n r8unorm: {\n numComponents: 1,\n nativeType: Uint8Array,\n stride: 1,\n elementSize: 1,\n sampleType: 'float'\n },\n r8snorm: {\n numComponents: 1,\n nativeType: Int8Array,\n stride: 1,\n elementSize: 1,\n sampleType: 'float'\n },\n r8uint: {\n numComponents: 1,\n nativeType: Uint8Array,\n stride: 1,\n elementSize: 1,\n sampleType: 'uint'\n },\n r8sint: {\n numComponents: 1,\n nativeType: Int8Array,\n stride: 1,\n elementSize: 1,\n sampleType: 'sint'\n },\n // 16-bit formats\n r16uint: {\n numComponents: 1,\n nativeType: Uint16Array,\n stride: 2,\n elementSize: 2,\n sampleType: 'uint'\n },\n r16sint: {\n numComponents: 1,\n nativeType: Int16Array,\n stride: 2,\n elementSize: 2,\n sampleType: 'sint'\n },\n r16float: {\n numComponents: 1,\n nativeType: Float32Array,\n stride: 2,\n elementSize: 2,\n sampleType: 'float'\n },\n rg8unorm: {\n numComponents: 2,\n nativeType: Uint8Array,\n stride: 2,\n elementSize: 1,\n sampleType: 'float'\n },\n rg8snorm: {\n numComponents: 2,\n nativeType: Int8Array,\n stride: 2,\n elementSize: 1,\n sampleType: 'float'\n },\n rg8uint: {\n numComponents: 2,\n nativeType: Uint8Array,\n stride: 2,\n elementSize: 1,\n sampleType: 'uint'\n },\n rg8sint: {\n numComponents: 2,\n nativeType: Int8Array,\n stride: 2,\n elementSize: 1,\n sampleType: 'sint'\n },\n // 32-bit formats\n r32uint: {\n numComponents: 1,\n nativeType: Uint32Array,\n stride: 4,\n elementSize: 4,\n sampleType: 'uint'\n },\n r32sint: {\n numComponents: 1,\n nativeType: Int32Array,\n stride: 4,\n elementSize: 4,\n sampleType: 'sint'\n },\n r32float: {\n numComponents: 1,\n nativeType: Float32Array,\n stride: 4,\n elementSize: 4,\n sampleType: 'unfilterable-float'\n },\n rg16uint: {\n numComponents: 2,\n nativeType: Uint16Array,\n stride: 4,\n elementSize: 2,\n sampleType: 'uint'\n },\n rg16sint: {\n numComponents: 2,\n nativeType: Int16Array,\n stride: 4,\n elementSize: 2,\n sampleType: 'sint'\n },\n rg16float: {\n numComponents: 2,\n nativeType: Float32Array,\n stride: 4,\n elementSize: 2,\n sampleType: 'float'\n },\n rgba8unorm: {\n numComponents: 4,\n nativeType: Uint8Array,\n stride: 4,\n elementSize: 1,\n sampleType: 'float'\n },\n 'rgba8unorm-srgb': {\n numComponents: 4,\n nativeType: Uint8Array,\n stride: 4,\n elementSize: 1,\n sampleType: 'float'\n },\n rgba8snorm: {\n numComponents: 4,\n nativeType: Int8Array,\n stride: 4,\n elementSize: 1,\n sampleType: 'float'\n },\n rgba8uint: {\n numComponents: 4,\n nativeType: Uint8Array,\n stride: 4,\n elementSize: 1,\n sampleType: 'uint'\n },\n rgba8sint: {\n numComponents: 4,\n nativeType: Int8Array,\n stride: 4,\n elementSize: 1,\n sampleType: 'sint'\n },\n bgra8unorm: {\n numComponents: 4,\n nativeType: Uint8Array,\n stride: 4,\n elementSize: 1,\n sampleType: 'float'\n },\n 'bgra8unorm-srgb': {\n numComponents: 4,\n nativeType: Uint8Array,\n stride: 4,\n elementSize: 1,\n sampleType: 'float'\n },\n // Packed 32-bit formats\n rgb9e5ufloat: {\n numComponents: 4,\n nativeType: Uint32Array,\n stride: 4,\n sampleType: 'float'\n },\n rgb10a2unorm: {\n numComponents: 4,\n nativeType: Uint32Array,\n stride: 4,\n sampleType: 'float'\n },\n rg11b10ufloat: {\n numComponents: 4,\n nativeType: Float32Array,\n stride: 4,\n sampleType: 'float'\n },\n // 64-bit formats\n rg32uint: {\n numComponents: 2,\n nativeType: Uint32Array,\n stride: 8,\n elementSize: 4,\n sampleType: 'uint'\n },\n rg32sint: {\n numComponents: 2,\n nativeType: Int32Array,\n stride: 8,\n elementSize: 4,\n sampleType: 'sint'\n },\n rg32float: {\n numComponents: 2,\n nativeType: Float32Array,\n stride: 8,\n elementSize: 4,\n sampleType: 'unfilterable-float'\n },\n rgba16uint: {\n numComponents: 4,\n nativeType: Uint16Array,\n stride: 8,\n elementSize: 2,\n sampleType: 'uint'\n },\n rgba16sint: {\n numComponents: 4,\n nativeType: Int16Array,\n stride: 8,\n elementSize: 2,\n sampleType: 'sint'\n },\n rgba16float: {\n numComponents: 4,\n nativeType: Float32Array,\n stride: 8,\n elementSize: 2,\n sampleType: 'float'\n },\n // 128-bit formats\n rgba32uint: {\n numComponents: 4,\n nativeType: Uint32Array,\n stride: 16,\n elementSize: 4,\n sampleType: 'uint'\n },\n rgba32sint: {\n numComponents: 4,\n nativeType: Int32Array,\n stride: 16,\n elementSize: 4,\n sampleType: 'sint'\n },\n rgba32float: {\n numComponents: 4,\n nativeType: Float32Array,\n stride: 16,\n elementSize: 4,\n sampleType: 'unfilterable-float'\n },\n // Depth and stencil formats\n stencil8: {\n numComponents: 1,\n nativeType: Uint8Array,\n stride: 1,\n elementSize: 1,\n sampleType: 'uint'\n },\n depth16unorm: {\n numComponents: 1,\n nativeType: Uint16Array,\n stride: 2,\n elementSize: 2,\n sampleType: 'depth'\n },\n depth24plus: {\n numComponents: 1,\n nativeType: Uint32Array,\n stride: 4,\n elementSize: 3,\n sampleType: 'depth'\n },\n 'depth24plus-stencil8': {\n numComponents: 2,\n nativeType: Uint32Array,\n stride: 4,\n sampleType: 'mixed'\n },\n depth32float: {\n numComponents: 1,\n nativeType: Float32Array,\n stride: 4,\n elementSize: 4,\n sampleType: 'depth'\n }\n};\n\nfunction getDetailsFromTextureFormat(format) {\n if (!format || format.length < 6) return 0;\n\n if (format in textureDetails === true) {\n return textureDetails[format];\n }\n\n vtkErrorMacro(\"unknown format \".concat(format));\n return null;\n} // see https://gpuweb.github.io/gpuweb/#enumdef-gpuvertexformat\n// for possible formats\n\n\nfunction getByteStrideFromBufferFormat(format) {\n if (!format || format.length < 5) return 0; // options are x2, x3, x4 or nothing\n\n var numComp = 1;\n\n if (format[format.length - 2] === 'x') {\n numComp = Number(format[format.length - 1]);\n }\n\n var sizeStart = numComp === 1 ? format.length - 1 : format.length - 3; // options are 8, 16, 32 resulting in 8, 6, 2 as the last char\n // plugged into the formula below gives 1, 2, 4 respectively\n\n var num = Number(format[sizeStart]);\n\n if (Number.isNaN(num)) {\n vtkErrorMacro(\"unknown format \".concat(format));\n return 0;\n }\n\n var typeSize = 5 - num / 2;\n return numComp * typeSize;\n} // see https://gpuweb.github.io/gpuweb/#enumdef-gpuvertexformat\n// for possible formats\n\n\nfunction getNumberOfComponentsFromBufferFormat(format) {\n if (!format || format.length < 5) return 0; // options are x2, x3, x4 or nothing\n\n var numComp = 1;\n\n if (format[format.length - 2] === 'x') {\n numComp = Number(format[format.length - 1]);\n }\n\n return numComp;\n} // see https://gpuweb.github.io/gpuweb/#enumdef-gpuvertexformat\n// for possible formats\n\n\nfunction getNativeTypeFromBufferFormat(format) {\n if (!format || format.length < 5) return 0; // raw types are Uint Int or Float as follows\n\n var result;\n\n if (format[0] === 'f') {\n result = 'Float';\n } else if (format[0] === 's') {\n result = 'Int';\n } else if (format[0] === 'u') {\n result = 'Uint';\n } else {\n vtkErrorMacro(\"unknown format \".concat(format));\n return undefined;\n } // options are 8, 16, 32 resulting in 8, 6, 2 as the last char\n // plugged into the formula below gives 1, 2, 4 respectively\n\n\n var base = format.split('x')[0];\n var num = Number(base[base.length - 1]);\n\n if (Number.isNaN(num)) {\n vtkErrorMacro(\"unknown format \".concat(format));\n return undefined;\n }\n\n result += 8 * (5 - num / 2);\n result += 'Array';\n return result;\n}\n\nfunction getShaderTypeFromBufferFormat(format) {\n var dataType;\n\n if (format[0] === 'f' || format[1] === 'n') {\n dataType = 'f32';\n } else if (format[0] === 's' && format[1] === 'i') {\n dataType = 'i32';\n } else if (format[0] === 'u' && format[1] === 'i') {\n dataType = 'u32';\n } else {\n vtkErrorMacro(\"unknown format \".concat(format));\n return undefined;\n } // options are x2, x3, x4 or nothing\n\n\n var numComp = 1;\n\n if (format[format.length - 2] === 'x') {\n numComp = Number(format[format.length - 1]);\n }\n\n if (numComp === 4) return \"vec4<\".concat(dataType, \">\");\n if (numComp === 3) return \"vec3<\".concat(dataType, \">\");\n if (numComp === 2) return \"vec2<\".concat(dataType, \">\");\n return dataType;\n}\n\nfunction getByteStrideFromShaderFormat(format) {\n if (!format) return 0;\n var numComp = 1;\n\n if (format.substring(0, 3) === 'vec') {\n numComp = Number(format[3]);\n } else if (format.substring(0, 3) === 'mat') {\n numComp = format[3] * format[5];\n }\n\n var typeSize = 4;\n return numComp * typeSize;\n}\n\nfunction getNativeTypeFromShaderFormat(format) {\n if (!format) return undefined;\n if (format.includes('f32')) return 'Float32Array';\n if (format.includes('i32')) return 'Int32Array';\n if (format.includes('u32')) return 'Uint32Array';\n vtkErrorMacro(\"unknown format \".concat(format));\n return undefined;\n}\n\nvar vtkWebGPUTypes = {\n getDetailsFromTextureFormat: getDetailsFromTextureFormat,\n getByteStrideFromBufferFormat: getByteStrideFromBufferFormat,\n getNumberOfComponentsFromBufferFormat: getNumberOfComponentsFromBufferFormat,\n getNativeTypeFromBufferFormat: getNativeTypeFromBufferFormat,\n getShaderTypeFromBufferFormat: getShaderTypeFromBufferFormat,\n getByteStrideFromShaderFormat: getByteStrideFromShaderFormat,\n getNativeTypeFromShaderFormat: getNativeTypeFromShaderFormat\n};\n\nexport { vtkWebGPUTypes as default };\n","import { newInstance as newInstance$1, obj, setGet } from '../../macros.js';\nimport vtkWebGPUTypes from './Types.js';\n\nfunction arraysEqual(a, b) {\n if (a === b) return true;\n if (a == null || b == null) return false;\n if (a.length !== b.length) return false;\n\n for (var i = 0; i < a.length; ++i) {\n if (!b.includes(a[i])) return false;\n }\n\n return true;\n} // ----------------------------------------------------------------------------\n// vtkWebGPUVertexInput methods\n// ----------------------------------------------------------------------------\n\n\nfunction vtkWebGPUVertexInput(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkWebGPUVertexInput');\n\n publicAPI.addBuffer = function (buffer, inames) {\n var stepMode = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'vertex';\n var names = inames;\n\n if (!Array.isArray(names)) {\n names = [names];\n } // only add if it is a new setting\n\n\n for (var i = 0; i < model.inputs.length; i++) {\n if (arraysEqual(model.inputs[i].names, names)) {\n if (model.inputs[i].buffer === buffer) {\n return;\n }\n\n model.inputs[i].buffer = buffer;\n return;\n }\n } // when adding a new entry, make sure we sort the array\n // as the order is important to the shader and must always\n // be the same, so alphabetical is an easy option\n\n\n model.inputs.push({\n buffer: buffer,\n stepMode: stepMode,\n names: names\n });\n model.inputs = model.inputs.sort(function (v1, v2) {\n if (v1.names[0] < v2.names[0]) {\n return -1;\n }\n\n if (v1.names[0] > v2.names[0]) {\n return 1;\n }\n\n return 0;\n });\n };\n\n publicAPI.removeBufferIfPresent = function (name) {\n for (var i = 0; i < model.inputs.length; i++) {\n if (model.inputs[i].names.includes(name)) {\n model.inputs.splice(i, 1);\n }\n }\n };\n\n publicAPI.getBuffer = function (name) {\n for (var i = 0; i < model.inputs.length; i++) {\n if (model.inputs[i].names.includes(name)) {\n return model.inputs[i].buffer;\n }\n }\n\n return null;\n };\n\n publicAPI.hasAttribute = function (name) {\n for (var i = 0; i < model.inputs.length; i++) {\n if (model.inputs[i].names.includes(name)) {\n return true;\n }\n }\n\n return false;\n };\n\n publicAPI.getAttributeTime = function (name) {\n for (var i = 0; i < model.inputs.length; i++) {\n if (model.inputs[i].names.includes(name)) {\n return model.inputs[i].buffer.getSourceTime();\n }\n }\n\n return 0;\n };\n\n publicAPI.getShaderCode = function () {\n var result = '';\n var nameCount = 0;\n\n for (var i = 0; i < model.inputs.length; i++) {\n for (var nm = 0; nm < model.inputs[i].names.length; nm++) {\n var arrayInfo = model.inputs[i].buffer.getArrayInformation()[nm];\n var type = vtkWebGPUTypes.getShaderTypeFromBufferFormat(arrayInfo.format);\n\n if (nameCount > 0) {\n result += ',\\n';\n }\n\n result = \"\".concat(result, \" @location(\").concat(nameCount, \") \").concat(model.inputs[i].names[nm], \" : \").concat(type);\n nameCount++;\n }\n }\n\n return result;\n };\n\n publicAPI.getVertexInputInformation = function () {\n var info = {};\n\n if (model.inputs.length) {\n var vertexBuffers = [];\n var nameCount = 0;\n\n for (var i = 0; i < model.inputs.length; i++) {\n var buf = model.inputs[i].buffer;\n var buffer = {\n arrayStride: buf.getStrideInBytes(),\n stepMode: model.inputs[i].stepMode,\n attributes: []\n };\n var arrayInfo = buf.getArrayInformation();\n\n for (var nm = 0; nm < model.inputs[i].names.length; nm++) {\n buffer.attributes.push({\n shaderLocation: nameCount,\n offset: arrayInfo[nm].offset,\n format: arrayInfo[nm].format\n });\n nameCount++;\n }\n\n vertexBuffers.push(buffer);\n }\n\n info.buffers = vertexBuffers;\n }\n\n return info;\n };\n\n publicAPI.bindBuffers = function (renderEncoder) {\n for (var i = 0; i < model.inputs.length; i++) {\n renderEncoder.setVertexBuffer(i, model.inputs[i].buffer.getHandle());\n }\n\n if (model.indexBuffer) {\n renderEncoder.setIndexBuffer(model.indexBuffer.getHandle(), model.indexBuffer.getArrayInformation()[0].format);\n }\n };\n\n publicAPI.getReady = function () {};\n\n publicAPI.releaseGraphicsResources = function () {\n if (model.created) {\n model.inputs = [];\n model.bindingDescriptions = [];\n model.attributeDescriptions = [];\n }\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n inputs: null,\n bindingDescriptions: false,\n attributeDescriptions: null,\n indexBuffer: null\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Build VTK API\n\n obj(publicAPI, model);\n model.bindingDescriptions = [];\n model.attributeDescriptions = [];\n model.inputs = [];\n setGet(publicAPI, model, ['created', 'device', 'handle', 'indexBuffer']); // For more macro methods, see \"Sources/macros.js\"\n // Object specific methods\n\n vtkWebGPUVertexInput(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = newInstance$1(extend, 'vtkWebGPUVertexInput'); // ----------------------------------------------------------------------------\n\nvar vtkWebGPUVertexInput$1 = {\n newInstance: newInstance,\n extend: extend\n};\n\nexport { vtkWebGPUVertexInput$1 as default, extend, newInstance };\n","import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';\nimport macro from '../../macros.js';\nimport vtkViewNode from '../SceneGraph/ViewNode.js';\nimport vtkWebGPUBindGroup from './BindGroup.js';\nimport vtkWebGPUPipeline from './Pipeline.js';\nimport vtkWebGPUShaderCache from './ShaderCache.js';\nimport vtkWebGPUShaderDescription from './ShaderDescription.js';\nimport vtkWebGPUVertexInput from './VertexInput.js';\n\nvar vtkWebGPUSimpleMapperVS = \"\\n//VTK::Renderer::Dec\\n\\n//VTK::Color::Dec\\n\\n//VTK::Normal::Dec\\n\\n//VTK::TCoord::Dec\\n\\n//VTK::Select::Dec\\n\\n//VTK::Mapper::Dec\\n\\n//VTK::IOStructs::Dec\\n\\n@vertex\\nfn main(\\n//VTK::IOStructs::Input\\n)\\n//VTK::IOStructs::Output\\n{\\n var output : vertexOutput;\\n\\n // var vertex: vec4 = vertexBC;\\n\\n //VTK::Color::Impl\\n\\n //VTK::Normal::Impl\\n\\n //VTK::TCoord::Impl\\n\\n //VTK::Select::Impl\\n\\n //VTK::Position::Impl\\n\\n return output;\\n}\\n\";\nvar vtkWebGPUSimpleMapperFS = \"\\n//VTK::Renderer::Dec\\n\\n//VTK::Color::Dec\\n\\n//VTK::Normal::Dec\\n\\n//VTK::TCoord::Dec\\n\\n//VTK::Select::Dec\\n\\n//VTK::RenderEncoder::Dec\\n\\n//VTK::Mapper::Dec\\n\\n//VTK::IOStructs::Dec\\n\\n@fragment\\nfn main(\\n//VTK::IOStructs::Input\\n)\\n//VTK::IOStructs::Output\\n{\\n var output : fragmentOutput;\\n\\n //VTK::Color::Impl\\n\\n //VTK::Normal::Impl\\n\\n //VTK::Light::Impl\\n\\n //VTK::TCoord::Impl\\n\\n //VTK::Select::Impl\\n\\n // var computedColor:vec4 = vec4(1.0,0.5,0.5,1.0);\\n\\n //VTK::RenderEncoder::Impl\\n return output;\\n}\\n\"; // ----------------------------------------------------------------------------\n// vtkWebGPUSimpleMapper methods\n// ----------------------------------------------------------------------------\n\nfunction vtkWebGPUSimpleMapper(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkWebGPUSimpleMapper');\n\n publicAPI.generateShaderDescriptions = function (hash, pipeline, vertexInput) {\n // create the shader descriptions\n var vDesc = vtkWebGPUShaderDescription.newInstance({\n type: 'vertex',\n hash: hash,\n code: model.vertexShaderTemplate\n });\n var fDesc = vtkWebGPUShaderDescription.newInstance({\n type: 'fragment',\n hash: hash,\n code: model.fragmentShaderTemplate\n }); // add them to the pipeline\n\n var sdrs = pipeline.getShaderDescriptions();\n sdrs.push(vDesc);\n sdrs.push(fDesc); // look for replacements to invoke\n\n var scode = model.vertexShaderTemplate + model.fragmentShaderTemplate; // eslint-disable-next-line prefer-regex-literals\n\n var re = new RegExp('//VTK::[^:]*::', 'g');\n var unique = scode.match(re).filter(function (v, i, a) {\n return a.indexOf(v) === i;\n });\n var fnames = unique.map(function (v) {\n return \"replaceShader\".concat(v.substring(7, v.length - 2));\n }); // now invoke shader replacement functions\n\n for (var i = 0; i < fnames.length; i++) {\n var fname = fnames[i];\n\n if (fname !== 'replaceShaderIOStructs' && model.shaderReplacements.has(fname)) {\n model.shaderReplacements.get(fname)(hash, pipeline, vertexInput);\n }\n } // always replace the IOStructs last as other replacement funcs may\n // add inputs or outputs\n\n\n publicAPI.replaceShaderIOStructs(hash, pipeline, vertexInput); // console.log(vDesc.getCode());\n // console.log(fDesc.getCode());\n };\n\n publicAPI.replaceShaderIOStructs = function (hash, pipeline, vertexInput) {\n var vDesc = pipeline.getShaderDescription('vertex');\n vDesc.replaceShaderCode(null, vertexInput);\n var fDesc = pipeline.getShaderDescription('fragment');\n fDesc.replaceShaderCode(vDesc);\n };\n\n publicAPI.replaceShaderRenderEncoder = function (hash, pipeline, vertexInput) {\n model.renderEncoder.replaceShaderCode(pipeline);\n };\n\n model.shaderReplacements.set('replaceShaderRenderEncoder', publicAPI.replaceShaderRenderEncoder);\n\n publicAPI.replaceShaderRenderer = function (hash, pipeline, vertexInput) {\n if (!model.WebGPURenderer) {\n return;\n }\n\n var ubocode = model.WebGPURenderer.getBindGroup().getShaderCode(pipeline);\n var vDesc = pipeline.getShaderDescription('vertex');\n var code = vDesc.getCode();\n code = vtkWebGPUShaderCache.substitute(code, '//VTK::Renderer::Dec', [ubocode]).result;\n vDesc.setCode(code);\n var fDesc = pipeline.getShaderDescription('fragment');\n code = fDesc.getCode();\n code = vtkWebGPUShaderCache.substitute(code, '//VTK::Renderer::Dec', [ubocode]).result;\n fDesc.setCode(code);\n };\n\n model.shaderReplacements.set('replaceShaderRenderer', publicAPI.replaceShaderRenderer);\n\n publicAPI.replaceShaderMapper = function (hash, pipeline, vertexInput) {\n var ubocode = model.bindGroup.getShaderCode(pipeline);\n var vDesc = pipeline.getShaderDescription('vertex');\n var code = vDesc.getCode();\n code = vtkWebGPUShaderCache.substitute(code, '//VTK::Mapper::Dec', [ubocode]).result;\n vDesc.setCode(code);\n var fDesc = pipeline.getShaderDescription('fragment');\n fDesc.addBuiltinInput('bool', '@builtin(front_facing) frontFacing');\n code = fDesc.getCode();\n code = vtkWebGPUShaderCache.substitute(code, '//VTK::Mapper::Dec', [ubocode]).result;\n fDesc.setCode(code);\n };\n\n model.shaderReplacements.set('replaceShaderMapper', publicAPI.replaceShaderMapper);\n\n publicAPI.replaceShaderPosition = function (hash, pipeline, vertexInput) {\n var vDesc = pipeline.getShaderDescription('vertex');\n vDesc.addBuiltinOutput('vec4', '@builtin(position) Position');\n var code = vDesc.getCode();\n code = vtkWebGPUShaderCache.substitute(code, '//VTK::Position::Impl', [' output.Position = rendererUBO.SCPCMatrix*vertexBC;']).result;\n vDesc.setCode(code);\n };\n\n model.shaderReplacements.set('replaceShaderPosition', publicAPI.replaceShaderPosition);\n\n publicAPI.replaceShaderTCoord = function (hash, pipeline, vertexInput) {\n var vDesc = pipeline.getShaderDescription('vertex');\n vDesc.addOutput('vec2', 'tcoordVS');\n };\n\n model.shaderReplacements.set('replaceShaderTCoord', publicAPI.replaceShaderTCoord);\n\n publicAPI.addTextureView = function (view) {\n // is it already there?\n if (model.textureViews.includes(view)) {\n return;\n }\n\n model.textureViews.push(view);\n }; // do everything required for this mapper to be rerady to draw\n // but do not bind or do the actual draw commands as the pipeline\n // is not neccessarily bound yet\n\n\n publicAPI.prepareToDraw = function (renderEncoder) {\n model.renderEncoder = renderEncoder; // do anything needed to get our input data up to date\n\n publicAPI.updateInput(); // make sure buffers are created and up to date\n\n publicAPI.updateBuffers(); // update bindings and bind groups/layouts\n // does not acutally bind them, that is done in draw(...)\n\n publicAPI.updateBindings(); // update the pipeline, includes computing the hash, and if needed\n // creating the pipeline, shader code etc\n\n publicAPI.updatePipeline();\n };\n\n publicAPI.updateInput = function () {};\n\n publicAPI.updateBuffers = function () {};\n\n publicAPI.updateBindings = function () {\n // bindings can change without a pipeline change\n // as long as their layout remains the same.\n // That is why this is done even when the pipeline\n // hash doesn't change.\n model.bindGroup.setBindables(publicAPI.getBindables());\n };\n\n publicAPI.computePipelineHash = function () {};\n\n publicAPI.registerDrawCallback = function (encoder) {\n encoder.registerDrawCallback(model.pipeline, publicAPI.draw);\n };\n\n publicAPI.prepareAndDraw = function (encoder) {\n publicAPI.prepareToDraw(encoder);\n encoder.setPipeline(model.pipeline);\n publicAPI.draw(encoder);\n }; // do the rest of the calls required to draw this mapper\n // at this point the command encouder and pipeline are\n // created and bound\n\n\n publicAPI.draw = function (renderEncoder) {\n var pipeline = renderEncoder.getBoundPipeline(); // bind the mapper bind group\n\n renderEncoder.activateBindGroup(model.bindGroup);\n\n if (model.WebGPURenderer) {\n model.WebGPURenderer.bindUBO(renderEncoder);\n } // bind the vertex input\n\n\n pipeline.bindVertexInput(renderEncoder, model.vertexInput);\n var indexBuffer = model.vertexInput.getIndexBuffer();\n\n if (indexBuffer) {\n renderEncoder.drawIndexed(indexBuffer.getIndexCount(), model.numberOfInstances, 0, 0, 0);\n } else {\n renderEncoder.draw(model.numberOfVertices, model.numberOfInstances, 0, 0);\n }\n };\n\n publicAPI.getBindables = function () {\n var bindables = _toConsumableArray(model.additionalBindables);\n\n if (model.UBO) {\n bindables.push(model.UBO);\n }\n\n if (model.SSBO) {\n bindables.push(model.SSBO);\n } // add texture BindGroupLayouts\n\n\n for (var t = 0; t < model.textureViews.length; t++) {\n bindables.push(model.textureViews[t]);\n var samp = model.textureViews[t].getSampler();\n\n if (samp) {\n bindables.push(samp);\n }\n }\n\n return bindables;\n };\n\n publicAPI.updatePipeline = function () {\n publicAPI.computePipelineHash();\n model.pipeline = model.device.getPipeline(model.pipelineHash); // build the pipeline if needed\n\n if (!model.pipeline) {\n model.pipeline = vtkWebGPUPipeline.newInstance();\n model.pipeline.setDevice(model.device);\n\n if (model.WebGPURenderer) {\n model.pipeline.addBindGroupLayout(model.WebGPURenderer.getBindGroup());\n }\n\n model.pipeline.addBindGroupLayout(model.bindGroup);\n publicAPI.generateShaderDescriptions(model.pipelineHash, model.pipeline, model.vertexInput);\n model.pipeline.setTopology(model.topology);\n model.pipeline.setRenderEncoder(model.renderEncoder);\n model.pipeline.setVertexState(model.vertexInput.getVertexInputInformation());\n model.device.createPipeline(model.pipelineHash, model.pipeline);\n }\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n additionalBindables: undefined,\n bindGroup: null,\n device: null,\n fragmentShaderTemplate: null,\n numberOfInstances: 1,\n numberOfVertices: 0,\n pipelineHash: null,\n shaderReplacements: null,\n SSBO: null,\n textureViews: null,\n topology: 'triangle-list',\n UBO: null,\n vertexShaderTemplate: null,\n WebGPURenderer: null\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Inheritance\n\n vtkViewNode.extend(publicAPI, model, initialValues);\n model.textureViews = [];\n model.vertexInput = vtkWebGPUVertexInput.newInstance();\n model.bindGroup = vtkWebGPUBindGroup.newInstance({\n label: 'mapperBG'\n });\n model.additionalBindables = [];\n model.fragmentShaderTemplate = model.fragmentShaderTemplate || vtkWebGPUSimpleMapperFS;\n model.vertexShaderTemplate = model.vertexShaderTemplate || vtkWebGPUSimpleMapperVS;\n model.shaderReplacements = new Map(); // Build VTK API\n\n macro.get(publicAPI, model, ['pipeline', 'vertexInput']);\n macro.setGet(publicAPI, model, ['additionalBindables', 'device', 'fragmentShaderTemplate', 'interpolate', 'numberOfInstances', 'numberOfVertices', 'pipelineHash', 'shaderReplacements', 'SSBO', 'textureViews', 'topology', 'UBO', 'vertexShaderTemplate', 'WebGPURenderer']); // Object methods\n\n vtkWebGPUSimpleMapper(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkWebGPUSimpleMapper'); // ----------------------------------------------------------------------------\n\nvar vtkWebGPUSimpleMapper$1 = {\n newInstance: newInstance,\n extend: extend\n};\n\nexport { vtkWebGPUSimpleMapper$1 as default, extend, newInstance };\n","import macro from '../../macros.js';\nimport vtkWebGPUShaderCache from './ShaderCache.js';\nimport vtkWebGPUSimpleMapper from './SimpleMapper.js';\n\n// vtkWebGPUFullScreenQuad methods\n// ----------------------------------------------------------------------------\n\nfunction vtkWebGPUFullScreenQuad(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkWebGPUFullScreenQuad');\n\n publicAPI.replaceShaderPosition = function (hash, pipeline, vertexInput) {\n var vDesc = pipeline.getShaderDescription('vertex');\n vDesc.addBuiltinOutput('vec4', '@builtin(position) Position');\n vDesc.addOutput('vec4', 'vertexVC');\n var code = vDesc.getCode();\n code = vtkWebGPUShaderCache.substitute(code, '//VTK::Position::Impl', ['output.tcoordVS = vec2(vertexBC.x * 0.5 + 0.5, 1.0 - vertexBC.y * 0.5 - 0.5);', 'output.Position = vec4(vertexBC, 1.0);', 'output.vertexVC = vec4(vertexBC, 1);']).result;\n vDesc.setCode(code);\n };\n\n model.shaderReplacements.set('replaceShaderPosition', publicAPI.replaceShaderPosition);\n\n publicAPI.updateBuffers = function () {\n var buff = model.device.getBufferManager().getFullScreenQuadBuffer();\n model.vertexInput.addBuffer(buff, ['vertexBC']);\n model.numberOfVertices = 6;\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Inheritance\n\n vtkWebGPUSimpleMapper.extend(publicAPI, model, initialValues); // Object methods\n\n vtkWebGPUFullScreenQuad(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkWebGPUFullScreenQuad'); // ----------------------------------------------------------------------------\n\nvar vtkWebGPUFullScreenQuad$1 = {\n newInstance: newInstance,\n extend: extend\n};\n\nexport { vtkWebGPUFullScreenQuad$1 as default, extend, newInstance };\n","var BufferUsage = {\n Verts: 0,\n Lines: 1,\n Triangles: 2,\n Strips: 3,\n LinesFromStrips: 4,\n LinesFromTriangles: 5,\n Points: 6,\n UniformArray: 7,\n PointArray: 8,\n NormalsFromPoints: 9,\n Texture: 10,\n RawVertex: 11,\n Storage: 12,\n Index: 13\n};\nvar PrimitiveTypes = {\n Start: 0,\n Points: 0,\n Lines: 1,\n Triangles: 2,\n TriangleStrips: 3,\n TriangleEdges: 4,\n TriangleStripEdges: 5,\n End: 6\n};\nvar Constants = {\n BufferUsage: BufferUsage,\n PrimitiveTypes: PrimitiveTypes\n};\n\nexport { BufferUsage, PrimitiveTypes, Constants as default };\n","import _defineProperty from '@babel/runtime/helpers/defineProperty';\nimport macro from '../../macros.js';\nimport Constants from './BufferManager/Constants.js';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nvar forwarded = ['getMappedRange', 'mapAsync', 'unmap'];\n\nfunction bufferSubData(device, destBuffer, destOffset, srcArrayBuffer) {\n var byteCount = srcArrayBuffer.byteLength;\n var srcBuffer = device.createBuffer({\n size: byteCount,\n\n /* eslint-disable no-undef */\n usage: GPUBufferUsage.COPY_SRC,\n\n /* eslint-enable no-undef */\n mappedAtCreation: true\n });\n var arrayBuffer = srcBuffer.getMappedRange(0, byteCount);\n new Uint8Array(arrayBuffer).set(new Uint8Array(srcArrayBuffer)); // memcpy\n\n srcBuffer.unmap();\n var encoder = device.createCommandEncoder();\n encoder.copyBufferToBuffer(srcBuffer, 0, destBuffer, destOffset, byteCount);\n var commandBuffer = encoder.finish();\n var queue = device.queue;\n queue.submit([commandBuffer]);\n srcBuffer.destroy();\n} // ----------------------------------------------------------------------------\n// vtkWebGPUBufferManager methods\n// ----------------------------------------------------------------------------\n\n\nfunction vtkWebGPUBuffer(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkWebGPUBuffer');\n\n publicAPI.create = function (sizeInBytes, usage) {\n model.handle = model.device.getHandle().createBuffer({\n size: sizeInBytes,\n usage: usage,\n label: model.label\n });\n model.sizeInBytes = sizeInBytes;\n model.usage = usage;\n };\n\n publicAPI.write = function (data) {\n bufferSubData(model.device.getHandle(), model.handle, 0, data.buffer);\n };\n\n publicAPI.createAndWrite = function (data, usage) {\n model.handle = model.device.getHandle().createBuffer({\n size: data.byteLength,\n usage: usage,\n mappedAtCreation: true,\n label: model.label\n });\n model.sizeInBytes = data.byteLength;\n model.usage = usage;\n new Uint8Array(model.handle.getMappedRange()).set(new Uint8Array(data.buffer)); // memcpy\n\n model.handle.unmap();\n }; // simple forwarders\n\n\n var _loop = function _loop(i) {\n publicAPI[forwarded[i]] = function () {\n var _model$handle;\n\n return (_model$handle = model.handle)[forwarded[i]].apply(_model$handle, arguments);\n };\n };\n\n for (var i = 0; i < forwarded.length; i++) {\n _loop(i);\n }\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n device: null,\n handle: null,\n sizeInBytes: 0,\n strideInBytes: 0,\n arrayInformation: null,\n usage: null,\n label: null,\n sourceTime: null\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Object methods\n\n macro.obj(publicAPI, model);\n macro.get(publicAPI, model, ['handle', 'sizeInBytes', 'usage']);\n macro.setGet(publicAPI, model, ['strideInBytes', 'device', 'arrayInformation', 'label', 'sourceTime']);\n vtkWebGPUBuffer(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend); // ----------------------------------------------------------------------------\n\nvar vtkWebGPUBuffer$1 = _objectSpread({\n newInstance: newInstance,\n extend: extend\n}, Constants);\n\nexport { vtkWebGPUBuffer$1 as default, extend, newInstance };\n","import _defineProperty from '@babel/runtime/helpers/defineProperty';\nimport _classCallCheck from '@babel/runtime/helpers/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/createClass';\nimport macro from '../../macros.js';\nimport Constants from './BufferManager/Constants.js';\nimport vtkProperty from '../Core/Property.js';\nimport vtkWebGPUBuffer from './Buffer.js';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nvar Representation = vtkProperty.Representation;\nvar PrimitiveTypes = Constants.PrimitiveTypes; // Simulate a small map of pointId to flatId for a cell. The original code\n// used a map and was 2.6x slower (4.7 to 1.9 seconds). Using two fixed\n// length arrays with a count is so much faster even with the required for\n// loops and if statements. This only works as we know the usage is\n// restricted to clear(), set() get() and has() so the count is always\n// incrmenting except for clear where it goes back to 0. Performance\n// improvement is probably due to this appoach not hitting the heap but wow\n// it is so much faster. Code that adds to these vectors checks against 9 to\n// make sure there is room. Switching to test against vec.length -1 results\n// in a small performance hit, so if you change 10, search for 9 in this\n// small class and change those as well.\n\nvar _LimitedMap = /*#__PURE__*/function () {\n function _LimitedMap() {\n _classCallCheck(this, _LimitedMap);\n\n this.keys = new Uint32Array(10);\n this.values = new Uint32Array(10);\n this.count = 0;\n }\n\n _createClass(_LimitedMap, [{\n key: \"clear\",\n value: function clear() {\n this.count = 0;\n }\n }, {\n key: \"has\",\n value: function has(key) {\n for (var i = 0; i < this.count; i++) {\n if (this.keys[i] === key) {\n return true;\n }\n }\n\n return undefined;\n }\n }, {\n key: \"get\",\n value: function get(key) {\n for (var i = 0; i < this.count; i++) {\n if (this.keys[i] === key) {\n return this.values[i];\n }\n }\n\n return undefined;\n }\n }, {\n key: \"set\",\n value: function set(key, value) {\n if (this.count < 9) {\n this.keys[this.count] = key;\n this.values[this.count++] = value;\n }\n }\n }]);\n\n return _LimitedMap;\n}();\n\nfunction getPrimitiveName(primType) {\n switch (primType) {\n case PrimitiveTypes.Points:\n return 'points';\n\n case PrimitiveTypes.Lines:\n return 'lines';\n\n case PrimitiveTypes.Triangles:\n case PrimitiveTypes.TriangleEdges:\n return 'polys';\n\n case PrimitiveTypes.TriangleStripEdges:\n case PrimitiveTypes.TriangleStrips:\n return 'strips';\n\n default:\n return '';\n }\n}\n\nfunction _getOrAddFlatId(state, ptId, cellId) {\n var flatId = state.pointIdToFlatId[ptId];\n\n if (flatId < 0) {\n flatId = state.flatId;\n state.pointIdToFlatId[ptId] = flatId;\n state.flatIdToPointId[state.flatId] = ptId;\n state.flatIdToCellId[state.flatId] = cellId;\n state.flatId++;\n }\n\n return flatId;\n}\n\nfunction fillCell(ptIds, cellId, state) {\n var numPtIds = ptIds.length; // are any points already marked for this cell? If so use that as the provoking point\n\n for (var ptIdx = 0; ptIdx < numPtIds; ptIdx++) {\n var _ptId = ptIds[ptIdx];\n\n if (state.cellProvokedMap.has(_ptId)) {\n state.ibo[state.iboId++] = state.cellProvokedMap.get(_ptId); // insert remaining ptIds (they do not need to provoke)\n\n for (var ptIdx2 = ptIdx + 1; ptIdx2 < ptIdx + numPtIds; ptIdx2++) {\n _ptId = ptIds[ptIdx2 % numPtIds];\n\n var _flatId = _getOrAddFlatId(state, _ptId, cellId); // add to ibo\n\n\n state.ibo[state.iboId++] = _flatId;\n } // all done now\n\n\n return;\n }\n } // else have any of the points not been used yet? (not in provokedPointIds)\n\n\n for (var _ptIdx = 0; _ptIdx < numPtIds; _ptIdx++) {\n var _ptId2 = ptIds[_ptIdx];\n\n if (!state.provokedPointIds[_ptId2]) {\n var _flatId2 = _getOrAddFlatId(state, _ptId2, cellId); // mark provoking and add to ibo\n\n\n state.provokedPointIds[_ptId2] = 1;\n state.cellProvokedMap.set(_ptId2, _flatId2); // when provoking always set the cellId as an original non-provoking value\n // will have been stored and we need to overwrite that\n\n state.flatIdToCellId[_flatId2] = cellId;\n state.ibo[state.iboId++] = _flatId2; // insert remaining ptIds (they do not need to provoke)\n\n for (var _ptIdx2 = _ptIdx + 1; _ptIdx2 < _ptIdx + numPtIds; _ptIdx2++) {\n _ptId2 = ptIds[_ptIdx2 % numPtIds];\n _flatId2 = _getOrAddFlatId(state, _ptId2, cellId); // add to ibo\n\n state.ibo[state.iboId++] = _flatId2;\n } // all done now\n\n\n return;\n }\n } // if we got here then none of the ptIds could be used to provoke\n // so just duplicate the first one\n\n\n var ptId = ptIds[0];\n var flatId = state.flatId;\n state.cellProvokedMap.set(ptId, flatId);\n state.flatIdToPointId[state.flatId] = ptId;\n state.flatIdToCellId[state.flatId] = cellId;\n state.flatId++; // add to ibo\n\n state.ibo[state.iboId++] = flatId; // insert remaining ptIds (they do not need to provoke)\n\n for (var _ptIdx3 = 1; _ptIdx3 < numPtIds; _ptIdx3++) {\n ptId = ptIds[_ptIdx3];\n flatId = _getOrAddFlatId(state, ptId, cellId); // add to ibo\n\n state.ibo[state.iboId++] = flatId;\n }\n}\n\nfunction countCell(ptIds, cellId, state) {\n var numPtIds = ptIds.length;\n state.iboSize += numPtIds; // are any points already marked for this cell? If so use that as the provoking point\n\n for (var ptIdx = 0; ptIdx < numPtIds; ptIdx++) {\n var ptId = ptIds[ptIdx];\n\n if (state.cellProvokedMap.has(ptId)) {\n return;\n }\n } // else have any of the points not been used yet? (not in provokedPointIds)\n\n\n for (var _ptIdx4 = 0; _ptIdx4 < numPtIds; _ptIdx4++) {\n var _ptId3 = ptIds[_ptIdx4];\n\n if (!state.provokedPointIds[_ptId3]) {\n state.provokedPointIds[_ptId3] = 1;\n state.cellProvokedMap.set(_ptId3, 1);\n return;\n }\n } // if we got here then none of the ptIds could be used to provoke\n\n\n state.cellProvokedMap.set(ptIds[0], 1);\n state.extraPoints++;\n}\n\nvar processCell;\n\nvar _single = new Uint32Array(1);\n\nvar _double = new Uint32Array(2);\n\nvar _triple = new Uint32Array(3);\n\nvar _indexCellBuilders = {\n // easy, every input point becomes an output point\n anythingToPoints: function anythingToPoints(numPoints, cellPts, offset, cellId, state) {\n for (var i = 0; i < numPoints; ++i) {\n _single[0] = cellPts[offset + i];\n processCell(_single, cellId, state);\n }\n },\n linesToWireframe: function linesToWireframe(numPoints, cellPts, offset, cellId, state) {\n // for lines we add a bunch of segments\n for (var i = 0; i < numPoints - 1; ++i) {\n _double[0] = cellPts[offset + i];\n _double[1] = cellPts[offset + i + 1];\n processCell(_double, cellId, state);\n }\n },\n polysToWireframe: function polysToWireframe(numPoints, cellPts, offset, cellId, state) {\n // for polys we add a bunch of segments and close it\n if (numPoints > 2) {\n for (var i = 0; i < numPoints; ++i) {\n _double[0] = cellPts[offset + i];\n _double[1] = cellPts[offset + (i + 1) % numPoints];\n processCell(_double, cellId, state);\n }\n }\n },\n stripsToWireframe: function stripsToWireframe(numPoints, cellPts, offset, cellId, state) {\n if (numPoints > 2) {\n // for strips we add a bunch of segments and close it\n for (var i = 0; i < numPoints - 1; ++i) {\n _double[0] = cellPts[offset + i];\n _double[1] = cellPts[offset + i + 1];\n processCell(_double, cellId, state);\n }\n\n for (var _i = 0; _i < numPoints - 2; _i++) {\n _double[0] = cellPts[offset + _i];\n _double[1] = cellPts[offset + _i + 2];\n processCell(_double, cellId, state);\n }\n }\n },\n polysToSurface: function polysToSurface(npts, cellPts, offset, cellId, state) {\n for (var i = 0; i < npts - 2; i++) {\n _triple[0] = cellPts[offset];\n _triple[1] = cellPts[offset + i + 1];\n _triple[2] = cellPts[offset + i + 2];\n processCell(_triple, cellId, state);\n }\n },\n stripsToSurface: function stripsToSurface(npts, cellPts, offset, cellId, state) {\n for (var i = 0; i < npts - 2; i++) {\n _triple[0] = cellPts[offset + i];\n _triple[1] = cellPts[offset + i + 1 + i % 2];\n _triple[2] = cellPts[offset + i + 1 + (i + 1) % 2];\n processCell(_triple, cellId, state);\n }\n }\n}; // ----------------------------------------------------------------------------\n// vtkWebGPUIndexBufferManager methods\n// ----------------------------------------------------------------------------\n\nfunction vtkWebGPUIndexBuffer(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkWebGPUIndexBuffer');\n\n publicAPI.buildIndexBuffer = function (req) {\n var cellArray = req.cells;\n var primitiveType = req.primitiveType;\n var representation = req.representation;\n var cellOffset = req.cellOffset;\n var array = cellArray.getData();\n var cellArraySize = array.length;\n var inRepName = getPrimitiveName(primitiveType);\n var numPts = req.numberOfPoints;\n var state = {\n provokedPointIds: new Uint8Array(numPts),\n // size is good\n extraPoints: 0,\n iboSize: 0,\n flatId: 0,\n iboId: 0,\n cellProvokedMap: new _LimitedMap()\n };\n var func = null;\n\n if (representation === Representation.POINTS || primitiveType === PrimitiveTypes.Points) {\n func = _indexCellBuilders.anythingToPoints;\n } else if (representation === Representation.WIREFRAME || primitiveType === PrimitiveTypes.Lines) {\n func = _indexCellBuilders[\"\".concat(inRepName, \"ToWireframe\")];\n } else {\n func = _indexCellBuilders[\"\".concat(inRepName, \"ToSurface\")];\n } // first we count how many extra provoking points we need\n\n\n processCell = countCell;\n var cellId = cellOffset || 0;\n\n for (var cellArrayIndex = 0; cellArrayIndex < cellArraySize;) {\n state.cellProvokedMap.clear();\n func(array[cellArrayIndex], array, cellArrayIndex + 1, cellId, state);\n cellArrayIndex += array[cellArrayIndex] + 1;\n cellId++;\n } // then we allocate the remaining structures\n // (we pick the best size to save space and transfer costs)\n\n\n if (numPts <= 0xffff) {\n state.flatIdToPointId = new Uint16Array(numPts + state.extraPoints);\n } else {\n state.flatIdToPointId = new Uint32Array(numPts + state.extraPoints);\n }\n\n if (numPts + state.extraPoints < 0x8fff) {\n state.pointIdToFlatId = new Int16Array(numPts);\n } else {\n state.pointIdToFlatId = new Int32Array(numPts);\n }\n\n if (numPts + state.extraPoints <= 0xffff) {\n state.ibo = new Uint16Array(state.iboSize);\n req.format = 'uint16';\n } else {\n state.ibo = new Uint32Array(state.iboSize);\n req.format = 'uint32';\n }\n\n if (cellId <= 0xffff) {\n state.flatIdToCellId = new Uint16Array(numPts + state.extraPoints);\n } else {\n state.flatIdToCellId = new Uint32Array(numPts + state.extraPoints);\n }\n\n state.pointIdToFlatId.fill(-1);\n state.provokedPointIds.fill(0); // and fill them in\n\n processCell = fillCell;\n cellId = cellOffset || 0;\n\n for (var _cellArrayIndex = 0; _cellArrayIndex < cellArraySize;) {\n state.cellProvokedMap.clear();\n func(array[_cellArrayIndex], array, _cellArrayIndex + 1, cellId, state);\n _cellArrayIndex += array[_cellArrayIndex] + 1;\n cellId++;\n }\n\n delete state.provokedPointIds;\n delete state.pointIdToFlatId; // store the results we need\n\n req.nativeArray = state.ibo;\n model.flatIdToPointId = state.flatIdToPointId;\n model.flatIdToCellId = state.flatIdToCellId;\n model.flatSize = state.flatId;\n model.indexCount = state.iboId;\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n flatIdToPointId: null,\n flatIdToCellId: null,\n flatSize: 0,\n indexCount: 0\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Inheritance\n\n vtkWebGPUBuffer.extend(publicAPI, model, initialValues);\n macro.setGet(publicAPI, model, ['flatIdToPointId', 'flatIdToCellId', 'flatSize', 'indexCount']);\n vtkWebGPUIndexBuffer(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend); // ----------------------------------------------------------------------------\n\nvar vtkWebGPUIndexBuffer$1 = _objectSpread({\n newInstance: newInstance,\n extend: extend\n}, Constants);\n\nexport { vtkWebGPUIndexBuffer$1 as default, extend, newInstance };\n","import _defineProperty from '@babel/runtime/helpers/defineProperty';\nimport { newInstance as newInstance$1, obj, setGet, vtkErrorMacro as vtkErrorMacro$1, newTypedArray } from '../../macros.js';\nimport { k as cross, m as normalize } from '../../Common/Core/Math/index.js';\nimport vtkDataArray from '../../Common/Core/DataArray.js';\nimport vtkWebGPUBuffer from './Buffer.js';\nimport vtkWebGPUIndexBuffer from './IndexBuffer.js';\nimport vtkWebGPUTypes from './Types.js';\nimport Constants from './BufferManager/Constants.js';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nvar BufferUsage = Constants.BufferUsage;\nvar vtkErrorMacro = vtkErrorMacro$1;\nvar VtkDataTypes = vtkDataArray.VtkDataTypes; // the webgpu constants all show up as undefined\n\n/* eslint-disable no-undef */\n// ----------------------------------------------------------------------------\n// Static API\n// ----------------------------------------------------------------------------\n\nvar STATIC = {};\n\nfunction _getFormatForDataArray(dataArray) {\n var format;\n\n switch (dataArray.getDataType()) {\n case VtkDataTypes.UNSIGNED_CHAR:\n format = 'uint8';\n break;\n\n case VtkDataTypes.FLOAT:\n format = 'float32';\n break;\n\n case VtkDataTypes.UNSIGNED_INT:\n format = 'uint32';\n break;\n\n case VtkDataTypes.INT:\n format = 'sint32';\n break;\n\n case VtkDataTypes.DOUBLE:\n format = 'float32';\n break;\n\n case VtkDataTypes.UNSIGNED_SHORT:\n format = 'uint16';\n break;\n\n case VtkDataTypes.SHORT:\n format = 'sin16';\n break;\n\n default:\n format = 'float32';\n break;\n }\n\n switch (dataArray.getNumberOfComponents()) {\n case 2:\n format += 'x2';\n break;\n\n case 3:\n // only 32bit types support x3\n if (!format.includes('32')) {\n vtkErrorMacro(\"unsupported x3 type for \".concat(format));\n }\n\n format += 'x3';\n break;\n\n case 4:\n format += 'x4';\n break;\n }\n\n return format;\n}\n\nfunction packArray(indexBuffer, inArrayData, numComp, outputType, options) {\n var result = {};\n var flatSize = indexBuffer.getFlatSize();\n\n if (!flatSize) {\n return result;\n } // setup shift and scale\n\n\n var shift = [0.0, 0.0, 0.0, 0.0];\n\n if (options.shift) {\n if (options.shift.length) {\n shift = options.shift;\n } else {\n shift.fill(options.shift);\n }\n }\n\n var scale = [1.0, 1.0, 1.0, 1.0];\n\n if (options.scale) {\n if (options.scale.length) {\n scale = options.scale;\n } else {\n scale.fill(options.scale);\n }\n }\n\n var packExtra = Object.prototype.hasOwnProperty.call(options, 'packExtra') ? options.packExtra : false;\n var addAPoint;\n var vboidx = 0;\n var stride = numComp + (packExtra ? 1 : 0);\n var packedVBO = newTypedArray(outputType, flatSize * stride); // pick the right function based on point versus cell data\n\n var flatIdMap = indexBuffer.getFlatIdToPointId();\n\n if (options.cellData) {\n flatIdMap = indexBuffer.getFlatIdToCellId();\n } // add data based on number of components\n\n\n if (numComp === 1) {\n addAPoint = function addAPointFunc(i) {\n packedVBO[vboidx++] = scale[0] * inArrayData[i] + shift[0];\n };\n } else if (numComp === 2) {\n addAPoint = function addAPointFunc(i) {\n packedVBO[vboidx++] = scale[0] * inArrayData[i] + shift[0];\n packedVBO[vboidx++] = scale[1] * inArrayData[i + 1] + shift[1];\n };\n } else if (numComp === 3 && !packExtra) {\n addAPoint = function addAPointFunc(i) {\n packedVBO[vboidx++] = scale[0] * inArrayData[i] + shift[0];\n packedVBO[vboidx++] = scale[1] * inArrayData[i + 1] + shift[1];\n packedVBO[vboidx++] = scale[2] * inArrayData[i + 2] + shift[2];\n };\n } else if (numComp === 3 && packExtra) {\n addAPoint = function addAPointFunc(i) {\n packedVBO[vboidx++] = scale[0] * inArrayData[i] + shift[0];\n packedVBO[vboidx++] = scale[1] * inArrayData[i + 1] + shift[1];\n packedVBO[vboidx++] = scale[2] * inArrayData[i + 2] + shift[2];\n packedVBO[vboidx++] = scale[3] * 1.0 + shift[3];\n };\n } else if (numComp === 4) {\n addAPoint = function addAPointFunc(i) {\n packedVBO[vboidx++] = scale[0] * inArrayData[i] + shift[0];\n packedVBO[vboidx++] = scale[1] * inArrayData[i + 1] + shift[1];\n packedVBO[vboidx++] = scale[2] * inArrayData[i + 2] + shift[2];\n packedVBO[vboidx++] = scale[3] * inArrayData[i + 3] + shift[3];\n };\n } // for each entry in the flat array process it\n\n\n for (var index = 0; index < flatSize; index++) {\n var inArrayId = numComp * flatIdMap[index];\n addAPoint(inArrayId);\n }\n\n result.nativeArray = packedVBO;\n return result;\n}\n\nfunction getNormal(pointData, i0, i1, i2) {\n var v1 = [pointData[i2 * 3] - pointData[i1 * 3], pointData[i2 * 3 + 1] - pointData[i1 * 3 + 1], pointData[i2 * 3 + 2] - pointData[i1 * 3 + 2]];\n var v2 = [pointData[i0 * 3] - pointData[i1 * 3], pointData[i0 * 3 + 1] - pointData[i1 * 3 + 1], pointData[i0 * 3 + 2] - pointData[i1 * 3 + 2]];\n var result = [];\n cross(v1, v2, result);\n normalize(result);\n return result;\n}\n\nfunction generateNormals(cellArray, pointArray) {\n var pointData = pointArray.getData();\n var cellArrayData = cellArray.getData();\n\n if (!cellArrayData || !pointData) {\n return null;\n } // return a cellArray of normals\n\n\n var packedVBO = new Int8Array(cellArray.getNumberOfCells() * 4);\n var size = cellArrayData.length;\n var vboidx = 0;\n\n for (var index = 0; index < size;) {\n var normal = getNormal(pointData, cellArrayData[index + 1], cellArrayData[index + 2], cellArrayData[index + 3]);\n packedVBO[vboidx++] = 127 * normal[0];\n packedVBO[vboidx++] = 127 * normal[1];\n packedVBO[vboidx++] = 127 * normal[2];\n packedVBO[vboidx++] = 127;\n index += cellArrayData[index] + 1;\n }\n\n return packedVBO;\n} // ----------------------------------------------------------------------------\n// vtkWebGPUBufferManager methods\n// ----------------------------------------------------------------------------\n\n\nfunction vtkWebGPUBufferManager(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkWebGPUBufferManager');\n\n function _createBuffer(req) {\n // if a dataArray is provided set the nativeArray\n if (req.dataArray && !req.nativeArray) {\n req.nativeArray = req.dataArray.getData();\n }\n\n var buffer;\n var gpuUsage; // handle index buffers\n\n if (req.usage === BufferUsage.Index) {\n // todo change to FlattenedIndex to be more clear\n buffer = vtkWebGPUIndexBuffer.newInstance({\n label: req.label\n });\n buffer.setDevice(model.device);\n /* eslint-disable no-bitwise */\n\n gpuUsage = GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST;\n /* eslint-enable no-bitwise */\n\n buffer.buildIndexBuffer(req);\n buffer.createAndWrite(req.nativeArray, gpuUsage);\n buffer.setArrayInformation([{\n format: req.format\n }]);\n } // create one if not done already\n\n\n if (!buffer) {\n buffer = vtkWebGPUBuffer.newInstance({\n label: req.label\n });\n buffer.setDevice(model.device);\n } // handle uniform buffers\n\n\n if (req.usage === BufferUsage.UniformArray) {\n /* eslint-disable no-bitwise */\n gpuUsage = GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST;\n /* eslint-enable no-bitwise */\n\n buffer.createAndWrite(req.nativeArray, gpuUsage);\n } // handle storage buffers\n\n\n if (req.usage === BufferUsage.Storage) {\n /* eslint-disable no-bitwise */\n gpuUsage = GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST;\n /* eslint-enable no-bitwise */\n\n buffer.createAndWrite(req.nativeArray, gpuUsage);\n } // handle textures\n\n\n if (req.usage === BufferUsage.Texture) {\n /* eslint-disable no-bitwise */\n gpuUsage = GPUBufferUsage.COPY_SRC;\n /* eslint-enable no-bitwise */\n\n buffer.createAndWrite(req.nativeArray, gpuUsage);\n } // all of the below types that have gpuUsage = VERTEX require format\n // to be provided.\n // handle point data\n\n\n if (req.usage === BufferUsage.PointArray) {\n gpuUsage = GPUBufferUsage.VERTEX;\n var arrayType = vtkWebGPUTypes.getNativeTypeFromBufferFormat(req.format);\n var result = packArray(req.indexBuffer, req.dataArray.getData(), req.dataArray.getNumberOfComponents(), arrayType, {\n packExtra: req.packExtra,\n shift: req.shift,\n scale: req.scale,\n cellData: req.cellData,\n cellOffset: req.cellOffset\n });\n buffer.createAndWrite(result.nativeArray, gpuUsage);\n buffer.setStrideInBytes(vtkWebGPUTypes.getByteStrideFromBufferFormat(req.format));\n buffer.setArrayInformation([{\n offset: 0,\n format: req.format,\n interpolation: req.cellData ? 'flat' : 'perspective'\n }]);\n } // handle normals from points, snorm8x4\n\n\n if (req.usage === BufferUsage.NormalsFromPoints) {\n gpuUsage = GPUBufferUsage.VERTEX;\n\n var _arrayType = vtkWebGPUTypes.getNativeTypeFromBufferFormat(req.format);\n\n var normals = generateNormals(req.cells, req.dataArray);\n\n var _result = packArray(req.indexBuffer, normals, 4, _arrayType, {\n cellData: true\n });\n\n buffer.createAndWrite(_result.nativeArray, gpuUsage);\n buffer.setStrideInBytes(vtkWebGPUTypes.getByteStrideFromBufferFormat(req.format));\n buffer.setArrayInformation([{\n offset: 0,\n format: req.format,\n interpolation: 'flat'\n }]);\n }\n\n if (req.usage === BufferUsage.RawVertex) {\n gpuUsage = GPUBufferUsage.VERTEX;\n buffer.createAndWrite(req.nativeArray, gpuUsage);\n buffer.setStrideInBytes(vtkWebGPUTypes.getByteStrideFromBufferFormat(req.format));\n buffer.setArrayInformation([{\n offset: 0,\n format: req.format\n }]);\n }\n\n buffer.setSourceTime(req.time);\n return buffer;\n } // is the buffer already present?\n\n\n publicAPI.hasBuffer = function (hash) {\n return model.device.hasCachedObject(hash);\n };\n\n publicAPI.getBuffer = function (req) {\n // if we have a source the get/create/cache the buffer\n if (req.hash) {\n return model.device.getCachedObject(req.hash, _createBuffer, req);\n }\n\n return _createBuffer(req);\n };\n\n publicAPI.getBufferForPointArray = function (dataArray, indexBuffer) {\n var format = _getFormatForDataArray(dataArray);\n\n var buffRequest = {\n hash: \"\".concat(dataArray.getMTime(), \"I\").concat(indexBuffer.getMTime()).concat(format),\n usage: BufferUsage.PointArray,\n format: format,\n dataArray: dataArray,\n indexBuffer: indexBuffer\n };\n return publicAPI.getBuffer(buffRequest);\n };\n\n publicAPI.getFullScreenQuadBuffer = function () {\n if (model.fullScreenQuadBuffer) {\n return model.fullScreenQuadBuffer;\n }\n\n model.fullScreenQuadBuffer = vtkWebGPUBuffer.newInstance();\n model.fullScreenQuadBuffer.setDevice(model.device); // prettier-ignore\n\n var array = new Float32Array([-1.0, -1.0, 0.0, 1.0, -1.0, 0.0, 1.0, 1.0, 0.0, -1.0, -1.0, 0.0, 1.0, 1.0, 0.0, -1.0, 1.0, 0.0]);\n model.fullScreenQuadBuffer.createAndWrite(array, GPUBufferUsage.VERTEX);\n model.fullScreenQuadBuffer.setStrideInBytes(12);\n model.fullScreenQuadBuffer.setArrayInformation([{\n offset: 0,\n format: 'float32x3'\n }]);\n return model.fullScreenQuadBuffer;\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n device: null,\n fullScreenQuadBuffer: null\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Object methods\n\n obj(publicAPI, model);\n setGet(publicAPI, model, ['device']);\n vtkWebGPUBufferManager(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = newInstance$1(extend); // ----------------------------------------------------------------------------\n\nvar vtkWebGPUBufferManager$1 = _objectSpread(_objectSpread({\n newInstance: newInstance,\n extend: extend\n}, STATIC), Constants);\n\nexport { STATIC, vtkWebGPUBufferManager$1 as default, extend, newInstance };\n","import macro from '../../macros.js';\nimport vtkWebGPUBufferManager from './BufferManager.js';\nimport vtkWebGPUTypes from './Types.js';\n\nvar BufferUsage = vtkWebGPUBufferManager.BufferUsage;\nvar vtkErrorMacro = macro.vtkErrorMacro; // ----------------------------------------------------------------------------\n// vtkWebGPUStorageBuffer - similar to the UniformBuffer class\n// but YOU are responsible for layout issues and alignment.\n// The order you add entries is the order they will be layed out\n// in memory. But you must follow layout rules.\n// ----------------------------------------------------------------------------\n// ----------------------------------------------------------------------------\n// vtkWebGPUStorageBuffer methods\n// ----------------------------------------------------------------------------\n\nfunction vtkWebGPUStorageBuffer(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkWebGPUStorageBuffer');\n\n publicAPI.addEntry = function (name, type) {\n if (model._bufferEntryNames.has(name)) {\n vtkErrorMacro(\"entry named \".concat(name, \" already exists\"));\n return;\n }\n\n model._bufferEntryNames.set(name, model.bufferEntries.length);\n\n var sizeInBytes = vtkWebGPUTypes.getByteStrideFromShaderFormat(type);\n model.bufferEntries.push({\n name: name,\n type: type,\n sizeInBytes: sizeInBytes,\n offset: model.sizeInBytes,\n nativeType: vtkWebGPUTypes.getNativeTypeFromShaderFormat(type)\n });\n model.sizeInBytes += sizeInBytes;\n };\n\n publicAPI.send = function (device) {\n if (!model._buffer) {\n var req = {\n nativeArray: model.Float32Array,\n usage: BufferUsage.Storage,\n label: model.label\n };\n model._buffer = device.getBufferManager().getBuffer(req);\n model.bindGroupTime.modified();\n\n model._sendTime.modified();\n\n return;\n }\n\n device.getHandle().queue.writeBuffer(model._buffer.getHandle(), 0, model.arrayBuffer, 0, model.sizeInBytes * model.numberOfInstances);\n\n model._sendTime.modified();\n };\n\n publicAPI.createView = function (type) {\n if (type in model === false) {\n if (!model.arrayBuffer) {\n model.arrayBuffer = new ArrayBuffer(model.sizeInBytes * model.numberOfInstances);\n }\n\n model[type] = macro.newTypedArray(type, model.arrayBuffer);\n }\n };\n\n publicAPI.setValue = function (name, instance, val) {\n var idx = model._bufferEntryNames.get(name);\n\n if (idx === undefined) {\n vtkErrorMacro(\"entry named \".concat(name, \" not found in UBO\"));\n return;\n }\n\n var entry = model.bufferEntries[idx];\n publicAPI.createView(entry.nativeType);\n var view = model[entry.nativeType];\n view[(entry.offset + instance * model.sizeInBytes) / view.BYTES_PER_ELEMENT] = val;\n };\n\n publicAPI.setArray = function (name, instance, arr) {\n var idx = model._bufferEntryNames.get(name);\n\n if (idx === undefined) {\n vtkErrorMacro(\"entry named \".concat(name, \" not found in UBO\"));\n return;\n }\n\n var entry = model.bufferEntries[idx];\n publicAPI.createView(entry.nativeType);\n var view = model[entry.nativeType];\n var ioffset = (entry.offset + instance * model.sizeInBytes) / view.BYTES_PER_ELEMENT;\n\n for (var i = 0; i < arr.length; i++) {\n view[ioffset + i] = arr[i];\n }\n };\n\n publicAPI.setAllInstancesFromArray = function (name, arr) {\n var idx = model._bufferEntryNames.get(name);\n\n if (idx === undefined) {\n vtkErrorMacro(\"entry named \".concat(name, \" not found in UBO\"));\n return;\n }\n\n var entry = model.bufferEntries[idx];\n publicAPI.createView(entry.nativeType);\n var view = model[entry.nativeType];\n var numComponents = arr.length / model.numberOfInstances;\n\n for (var inst = 0; inst < model.numberOfInstances; inst++) {\n var ioffset = (entry.offset + inst * model.sizeInBytes) / view.BYTES_PER_ELEMENT;\n\n for (var i = 0; i < numComponents; i++) {\n view[ioffset + i] = arr[inst * numComponents + i];\n }\n }\n };\n\n publicAPI.setAllInstancesFromArrayColorToFloat = function (name, arr) {\n var idx = model._bufferEntryNames.get(name);\n\n if (idx === undefined) {\n vtkErrorMacro(\"entry named \".concat(name, \" not found in UBO\"));\n return;\n }\n\n var entry = model.bufferEntries[idx];\n publicAPI.createView(entry.nativeType);\n var view = model[entry.nativeType];\n var numComponents = arr.length / model.numberOfInstances;\n\n for (var inst = 0; inst < model.numberOfInstances; inst++) {\n var ioffset = (entry.offset + inst * model.sizeInBytes) / view.BYTES_PER_ELEMENT;\n\n for (var i = 0; i < numComponents; i++) {\n view[ioffset + i] = arr[inst * numComponents + i] / 255.0;\n }\n }\n };\n\n publicAPI.setAllInstancesFromArray3x3To4x4 = function (name, arr) {\n var idx = model._bufferEntryNames.get(name);\n\n if (idx === undefined) {\n vtkErrorMacro(\"entry named \".concat(name, \" not found in UBO\"));\n return;\n }\n\n var entry = model.bufferEntries[idx];\n publicAPI.createView(entry.nativeType);\n var view = model[entry.nativeType];\n var numComponents = 9;\n\n for (var inst = 0; inst < model.numberOfInstances; inst++) {\n var ioffset = (entry.offset + inst * model.sizeInBytes) / view.BYTES_PER_ELEMENT;\n\n for (var j = 0; j < 3; j++) {\n for (var i = 0; i < 3; i++) {\n view[ioffset + j * 4 + i] = arr[inst * numComponents + j * 3 + i];\n }\n }\n }\n };\n\n publicAPI.getSendTime = function () {\n return model._sendTime.getMTime();\n };\n\n publicAPI.getShaderCode = function (binding, group) {\n var lines = [\"struct \".concat(model.label, \"StructEntry\\n{\")];\n\n for (var i = 0; i < model.bufferEntries.length; i++) {\n var entry = model.bufferEntries[i];\n lines.push(\" \".concat(entry.name, \": \").concat(entry.type, \",\"));\n }\n\n lines.push(\"\\n};\\nstruct \".concat(model.label, \"Struct\\n{\\n values: array<\").concat(model.label, \"StructEntry>,\\n};\\n@binding(\").concat(binding, \") @group(\").concat(group, \") var \").concat(model.label, \": \").concat(model.label, \"Struct;\\n\"));\n return lines.join('\\n');\n };\n\n publicAPI.getBindGroupEntry = function () {\n var foo = {\n resource: {\n buffer: model._buffer.getHandle()\n }\n };\n return foo;\n };\n\n publicAPI.clearData = function () {\n model.numberOfInstances = 0;\n model.sizeInBytes = 0;\n model.bufferEntries = [];\n model._bufferEntryNames = new Map();\n model._buffer = null;\n delete model.arrayBuffer;\n delete model.Float32Array;\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n bufferEntries: null,\n bufferEntryNames: null,\n sizeInBytes: 0,\n label: null,\n numberOfInstances: 1\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Build VTK API\n\n macro.obj(publicAPI, model); // Internal objects\n\n model._bufferEntryNames = new Map();\n model.bufferEntries = [];\n model._sendTime = {};\n macro.obj(model._sendTime, {\n mtime: 0\n });\n model.bindGroupTime = {};\n macro.obj(model.bindGroupTime, {\n mtime: 0\n }); // default SSBO desc\n\n model.bindGroupLayoutEntry = model.bindGroupLayoutEntry || {\n buffer: {\n type: 'read-only-storage'\n }\n };\n macro.get(publicAPI, model, ['bindGroupTime']);\n macro.setGet(publicAPI, model, ['device', 'bindGroupLayoutEntry', 'label', 'numberOfInstances', 'sizeInBytes']); // Object methods\n\n vtkWebGPUStorageBuffer(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkWebGPUStorageBuffer'); // ----------------------------------------------------------------------------\n\nvar vtkWebGPUStorageBuffer$1 = {\n newInstance: newInstance,\n extend: extend\n};\n\nexport { vtkWebGPUStorageBuffer$1 as default, extend, newInstance };\n","import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';\nimport macro from '../../macros.js';\nimport vtkWebGPUBufferManager from './BufferManager.js';\nimport vtkWebGPUTypes from './Types.js';\n\nvar BufferUsage = vtkWebGPUBufferManager.BufferUsage;\nvar vtkErrorMacro = macro.vtkErrorMacro; // ----------------------------------------------------------------------------\n// vtkWebGPUUniformBuffer methods\n// ----------------------------------------------------------------------------\n\nfunction vtkWebGPUUniformBuffer(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkWebGPUUniformBuffer');\n\n publicAPI.addEntry = function (name, type) {\n if (model._bufferEntryNames.has(name)) {\n vtkErrorMacro(\"entry named \".concat(name, \" already exists\"));\n return;\n }\n\n model.sortDirty = true;\n\n model._bufferEntryNames.set(name, model.bufferEntries.length);\n\n model.bufferEntries.push({\n name: name,\n type: type,\n sizeInBytes: vtkWebGPUTypes.getByteStrideFromShaderFormat(type),\n offset: -1,\n nativeType: vtkWebGPUTypes.getNativeTypeFromShaderFormat(type),\n packed: false\n });\n }; // UBOs have layout rules in terms of how memory is aligned so we\n // have to be careful how we order the entries. For example a vec4\n // must be aligned on a 16 byte offset, etc. See\n // https://gpuweb.github.io/gpuweb/wgsl/#memory-layouts\n // for more details. Right now you can create a situation that would fail\n // in the future we could add dummy spacer entries where needed to\n // handle alignment issues\n\n\n publicAPI.sortBufferEntries = function () {\n if (!model.sortDirty) {\n return;\n }\n\n var currOffset = 0;\n var newEntries = []; // compute the max alignment, this is required as WebGPU defines a UBO to have\n // a size that is a multiple of the maxAlignment\n\n var maxAlignment = 4;\n\n for (var i = 0; i < model.bufferEntries.length; i++) {\n var entry = model.bufferEntries[i];\n\n if (entry.sizeInBytes % 16 === 0) {\n maxAlignment = Math.max(16, maxAlignment);\n }\n\n if (entry.sizeInBytes % 8 === 0) {\n maxAlignment = Math.max(8, maxAlignment);\n }\n } // pack anything whose size is a multiple of 16 bytes first\n // this includes a couple types that don't require 16 byte alignment\n // such as mat2x2 but that is OK\n\n\n for (var _i = 0; _i < model.bufferEntries.length; _i++) {\n var _entry = model.bufferEntries[_i];\n\n if (_entry.packed === false && _entry.sizeInBytes % 16 === 0) {\n _entry.packed = true;\n _entry.offset = currOffset;\n newEntries.push(_entry);\n currOffset += _entry.sizeInBytes;\n }\n } // now it gets tough, we have the following common types (f32, i32, u32)\n // - vec2 8 byte size, 8 byte alignment\n // - vec3 12 byte size, 16 byte alignment\n // - f32 4 byte size, 4 byte alignment\n // try adding 12 byte, 4 byte pairs\n\n\n for (var _i2 = 0; _i2 < model.bufferEntries.length; _i2++) {\n var _entry2 = model.bufferEntries[_i2];\n\n if (_entry2.packed === false && _entry2.sizeInBytes === 12) {\n for (var i2 = 0; i2 < model.bufferEntries.length; i2++) {\n var entry2 = model.bufferEntries[i2];\n\n if (entry2.packed === false && entry2.sizeInBytes === 4) {\n _entry2.packed = true;\n _entry2.offset = currOffset;\n newEntries.push(_entry2);\n currOffset += _entry2.sizeInBytes;\n entry2.packed = true;\n entry2.offset = currOffset;\n newEntries.push(entry2);\n currOffset += entry2.sizeInBytes;\n break;\n }\n }\n }\n } // try adding 8 byte, 8 byte pairs\n\n\n for (var _i3 = 0; _i3 < model.bufferEntries.length; _i3++) {\n var _entry3 = model.bufferEntries[_i3];\n\n if (!_entry3.packed && _entry3.sizeInBytes % 8 === 0) {\n for (var _i4 = _i3 + 1; _i4 < model.bufferEntries.length; _i4++) {\n var _entry4 = model.bufferEntries[_i4];\n\n if (!_entry4.packed && _entry4.sizeInBytes % 8 === 0) {\n _entry3.packed = true;\n _entry3.offset = currOffset;\n newEntries.push(_entry3);\n currOffset += _entry3.sizeInBytes;\n _entry4.packed = true;\n _entry4.offset = currOffset;\n newEntries.push(_entry4);\n currOffset += _entry4.sizeInBytes;\n break;\n }\n }\n }\n } // try adding 8 byte, 4 byte 4 byte triplets\n\n\n for (var _i5 = 0; _i5 < model.bufferEntries.length; _i5++) {\n var _entry5 = model.bufferEntries[_i5];\n\n if (!_entry5.packed && _entry5.sizeInBytes % 8 === 0) {\n var found = false;\n\n for (var _i6 = 0; !found && _i6 < model.bufferEntries.length; _i6++) {\n var _entry6 = model.bufferEntries[_i6];\n\n if (!_entry6.packed && _entry6.sizeInBytes === 4) {\n for (var i3 = _i6 + 1; i3 < model.bufferEntries.length; i3++) {\n var entry3 = model.bufferEntries[i3];\n\n if (!entry3.packed && entry3.sizeInBytes === 4) {\n _entry5.packed = true;\n _entry5.offset = currOffset;\n newEntries.push(_entry5);\n currOffset += _entry5.sizeInBytes;\n _entry6.packed = true;\n _entry6.offset = currOffset;\n newEntries.push(_entry6);\n currOffset += _entry6.sizeInBytes;\n entry3.packed = true;\n entry3.offset = currOffset;\n newEntries.push(entry3);\n currOffset += entry3.sizeInBytes;\n found = true;\n break;\n }\n }\n }\n }\n }\n } // Add anything remaining that is larger than 4 bytes and hope we get lucky.\n // Likely if there is more than one item added here it will result\n // in a failed UBO\n\n\n for (var _i7 = 0; _i7 < model.bufferEntries.length; _i7++) {\n var _entry7 = model.bufferEntries[_i7];\n\n if (!_entry7.packed && _entry7.sizeInBytes > 4) {\n _entry7.packed = true;\n _entry7.offset = currOffset;\n newEntries.push(_entry7);\n currOffset += _entry7.sizeInBytes;\n }\n } // finally add remaining 4 byte items\n\n\n for (var _i8 = 0; _i8 < model.bufferEntries.length; _i8++) {\n var _entry8 = model.bufferEntries[_i8];\n\n if (!_entry8.packed) {\n _entry8.packed = true;\n _entry8.offset = currOffset;\n newEntries.push(_entry8);\n currOffset += _entry8.sizeInBytes;\n }\n } // update entries and entryNames\n\n\n model.bufferEntries = newEntries;\n\n model._bufferEntryNames.clear();\n\n for (var _i9 = 0; _i9 < model.bufferEntries.length; _i9++) {\n model._bufferEntryNames.set(model.bufferEntries[_i9].name, _i9);\n }\n\n model.sizeInBytes = currOffset;\n model.sizeInBytes = maxAlignment * Math.ceil(model.sizeInBytes / maxAlignment);\n model.sortDirty = false;\n };\n\n publicAPI.sendIfNeeded = function (device) {\n if (!model.UBO) {\n var req = {\n nativeArray: model.Float32Array,\n usage: BufferUsage.UniformArray,\n label: model.label\n };\n model.UBO = device.getBufferManager().getBuffer(req);\n model.bindGroupTime.modified();\n model.sendDirty = false;\n } // send data down if needed\n\n\n if (model.sendDirty) {\n device.getHandle().queue.writeBuffer(model.UBO.getHandle(), 0, model.arrayBuffer, 0, model.sizeInBytes);\n model.sendDirty = false;\n } // always updated as mappers depend on this time\n // it is more of a sentIfNeededTime\n\n\n model.sendTime.modified();\n };\n\n publicAPI.createView = function (type) {\n if (type in model === false) {\n if (!model.arrayBuffer) {\n model.arrayBuffer = new ArrayBuffer(model.sizeInBytes);\n }\n\n model[type] = macro.newTypedArray(type, model.arrayBuffer);\n }\n };\n\n publicAPI.setValue = function (name, val) {\n publicAPI.sortBufferEntries();\n\n var idx = model._bufferEntryNames.get(name);\n\n if (idx === undefined) {\n vtkErrorMacro(\"entry named \".concat(name, \" not found in UBO\"));\n return;\n }\n\n var entry = model.bufferEntries[idx];\n publicAPI.createView(entry.nativeType);\n var view = model[entry.nativeType];\n\n if (entry.lastValue !== val) {\n view[entry.offset / view.BYTES_PER_ELEMENT] = val;\n model.sendDirty = true;\n }\n\n entry.lastValue = val;\n };\n\n publicAPI.setArray = function (name, arr) {\n publicAPI.sortBufferEntries();\n\n var idx = model._bufferEntryNames.get(name);\n\n if (idx === undefined) {\n vtkErrorMacro(\"entry named \".concat(name, \" not found in UBO\"));\n return;\n }\n\n var entry = model.bufferEntries[idx];\n publicAPI.createView(entry.nativeType);\n var view = model[entry.nativeType];\n var changed = false;\n\n for (var i = 0; i < arr.length; i++) {\n if (!entry.lastValue || entry.lastValue[i] !== arr[i]) {\n view[entry.offset / view.BYTES_PER_ELEMENT + i] = arr[i];\n changed = true;\n }\n }\n\n if (changed) {\n model.sendDirty = true;\n entry.lastValue = _toConsumableArray(arr);\n }\n };\n\n publicAPI.getBindGroupEntry = function () {\n var foo = {\n resource: {\n buffer: model.UBO.getHandle()\n }\n };\n return foo;\n };\n\n publicAPI.getSendTime = function () {\n return model.sendTime.getMTime();\n };\n\n publicAPI.getShaderCode = function (binding, group) {\n // sort the entries\n publicAPI.sortBufferEntries();\n var lines = [\"struct \".concat(model.label, \"Struct\\n{\")];\n\n for (var i = 0; i < model.bufferEntries.length; i++) {\n var entry = model.bufferEntries[i];\n lines.push(\" \".concat(entry.name, \": \").concat(entry.type, \",\"));\n }\n\n lines.push(\"};\\n@binding(\".concat(binding, \") @group(\").concat(group, \") var \").concat(model.label, \": \").concat(model.label, \"Struct;\"));\n return lines.join('\\n');\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n bufferEntries: null,\n bufferEntryNames: null,\n sizeInBytes: 0,\n label: null,\n bindGroupLayoutEntry: null,\n bindGroupEntry: null\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Build VTK API\n\n macro.obj(publicAPI, model); // Internal objects\n\n model._bufferEntryNames = new Map();\n model.bufferEntries = []; // default UBO desc\n\n model.bindGroupLayoutEntry = model.bindGroupLayoutEntry || {\n buffer: {\n type: 'uniform'\n }\n };\n model.sendTime = {};\n macro.obj(model.sendTime, {\n mtime: 0\n });\n model.bindGroupTime = {};\n macro.obj(model.bindGroupTime, {\n mtime: 0\n });\n model.sendDirty = true;\n model.sortDirty = true;\n macro.get(publicAPI, model, ['binding', 'bindGroupTime']);\n macro.setGet(publicAPI, model, ['bindGroupLayoutEntry', 'device', 'label', 'sizeInBytes']); // Object methods\n\n vtkWebGPUUniformBuffer(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkWebGPUUniformBuffer'); // ----------------------------------------------------------------------------\n\nvar vtkWebGPUUniformBuffer$1 = {\n newInstance: newInstance,\n extend: extend\n};\n\nexport { vtkWebGPUUniformBuffer$1 as default, extend, newInstance };\n","import { mat4, vec3 } from 'gl-matrix';\nimport { newInstance as newInstance$1, obj, get, getArray, setGet, vtkDebugMacro as vtkDebugMacro$1 } from '../../macros.js';\nimport { r as radiansFromDegrees } from '../../Common/Core/Math/index.js';\nimport vtkViewNode from '../SceneGraph/ViewNode.js';\nimport vtkWebGPUBindGroup from './BindGroup.js';\nimport vtkWebGPUFullScreenQuad from './FullScreenQuad.js';\nimport vtkWebGPUStorageBuffer from './StorageBuffer.js';\nimport vtkWebGPUUniformBuffer from './UniformBuffer.js';\nimport { registerOverride } from './ViewNodeFactory.js';\n\nvar vtkDebugMacro = vtkDebugMacro$1;\nvar clearFragColorTemplate = \"\\n//VTK::Renderer::Dec\\n\\n//VTK::Mapper::Dec\\n\\n//VTK::TCoord::Dec\\n\\n//VTK::RenderEncoder::Dec\\n\\n//VTK::IOStructs::Dec\\n\\n@fragment\\nfn main(\\n//VTK::IOStructs::Input\\n)\\n//VTK::IOStructs::Output\\n{\\n var output: fragmentOutput;\\n\\n var computedColor: vec4 = mapperUBO.BackgroundColor;\\n\\n //VTK::RenderEncoder::Impl\\n return output;\\n}\\n\";\nvar clearFragTextureTemplate = \"\\nfn vecToRectCoord(dir: vec3) -> vec2 {\\n var tau: f32 = 6.28318530718;\\n var pi: f32 = 3.14159265359;\\n var out: vec2 = vec2(0.0);\\n\\n out.x = atan2(dir.z, dir.x) / tau;\\n out.x += 0.5;\\n\\n var phix: f32 = length(vec2(dir.x, dir.z));\\n out.y = atan2(dir.y, phix) / pi + 0.5;\\n\\n return out;\\n}\\n\\n//VTK::Renderer::Dec\\n\\n//VTK::Mapper::Dec\\n\\n//VTK::TCoord::Dec\\n\\n//VTK::RenderEncoder::Dec\\n\\n//VTK::IOStructs::Dec\\n\\n@fragment\\nfn main(\\n//VTK::IOStructs::Input\\n)\\n//VTK::IOStructs::Output\\n{\\n var output: fragmentOutput;\\n\\n var tcoord: vec4 = vec4(input.vertexVC.xy, -1, 1);\\n var V: vec4 = normalize(mapperUBO.FSQMatrix * tcoord); // vec2((input.tcoordVS.x - 0.5) * 2, -(input.tcoordVS.y - 0.5) * 2);\\n // textureSampleLevel gets rid of some ugly artifacts\\n var background = textureSampleLevel(EnvironmentTexture, EnvironmentTextureSampler, vecToRectCoord(V.xyz), 0);\\n var computedColor: vec4 = vec4(background.rgb, 1);\\n\\n //VTK::RenderEncoder::Impl\\n return output;\\n}\\n\";\n\nvar _fsqClearMat4 = new Float64Array(16);\n\nvar _tNormalMat4 = new Float64Array(16); // Light type index gives either 0, 1, or 2 which indicates what type of light there is.\n// While technically, there are only spot and directional lights, within the CellArrayMapper\n// there is a third, positional light. It is technically just a variant of a spot light with\n// a cone angle of 90 or above, however certain calculations can be skipped if it is treated\n// separately.\n// The mappings are shown below:\n// 0 -> positional light\n// 1 -> directional light\n// 2 -> spot light\n\n\nfunction getLightTypeIndex(light) {\n if (light.getPositional()) {\n if (light.getConeAngle() >= 90) {\n return 0;\n }\n\n return 2;\n }\n\n return 1;\n} // ----------------------------------------------------------------------------\n// vtkWebGPURenderer methods\n// ----------------------------------------------------------------------------\n\n/* eslint-disable no-bitwise */\n\n\nfunction vtkWebGPURenderer(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkWebGPURenderer'); // Builds myself.\n\n publicAPI.buildPass = function (prepass) {\n if (prepass) {\n if (!model.renderable) {\n return;\n }\n\n model.camera = model.renderable.getActiveCamera();\n publicAPI.updateLights();\n publicAPI.prepareNodes();\n publicAPI.addMissingNode(model.camera);\n publicAPI.addMissingNodes(model.renderable.getViewPropsWithNestedProps());\n publicAPI.removeUnusedNodes();\n model.webgpuCamera = publicAPI.getViewNodeFor(model.camera);\n publicAPI.updateStabilizedMatrix();\n }\n };\n\n publicAPI.updateStabilizedMatrix = function () {\n // This method is designed to help with floating point\n // issues when rendering datasets that push the limits of\n // resolutions on float.\n //\n // One of the most common cases is when the dataset is located far\n // away from the origin relative to the clipping range we are looking\n // at. For that case we want to perform the floating point sensitive\n // multiplications on the CPU in double. To this end we want the\n // vertex rendering ops to look something like\n //\n // Compute shifted points and load those into the VBO\n // pointCoordsSC = WorldToStabilizedMatrix * pointCoords;\n //\n // In the vertex shader do the following\n // positionVC = StabilizedToDeviceMatrix * ModelToStabilizedMatrix*vertexIn;\n //\n // We use two matrices because it is expensive to change the\n // WorldToStabilized matrix as we have to reupload all pointCoords\n // So that matrix (MCSCMatrix) is fairly static, the Stabilized to\n // Device matrix is the one that gets updated every time the camera\n // changes.\n //\n // The basic idea is that we should translate the data so that\n // when the center of the view frustum moves a lot\n // we recenter it. The center of the view frustum is roughly\n // camPos + dirOfProj*(far + near)*0.5\n var clipRange = model.camera.getClippingRange();\n var pos = model.camera.getPositionByReference();\n var dop = model.camera.getDirectionOfProjectionByReference();\n var center = [];\n var offset = [];\n vec3.scale(offset, dop, 0.5 * (clipRange[0] + clipRange[1]));\n vec3.add(center, pos, offset);\n vec3.sub(offset, center, model.stabilizedCenter);\n var length = vec3.len(offset);\n\n if (length / (clipRange[1] - clipRange[0]) > model.recenterThreshold) {\n model.stabilizedCenter = center;\n model.stabilizedTime.modified();\n }\n };\n\n publicAPI.updateLights = function () {\n var count = 0;\n var lights = model.renderable.getLightsByReference();\n\n for (var index = 0; index < lights.length; ++index) {\n if (lights[index].getSwitch() > 0.0) {\n count++;\n }\n }\n\n if (!count) {\n vtkDebugMacro('No lights are on, creating one.');\n model.renderable.createLight();\n }\n\n return count;\n };\n\n publicAPI.updateUBO = function () {\n // make sure the data is up to date\n // has the camera changed?\n var utime = model.UBO.getSendTime();\n\n if (model._parent.getMTime() > utime || publicAPI.getMTime() > utime || model.camera.getMTime() > utime || model.renderable.getMTime() > utime) {\n var _model$renderable$get;\n\n var keyMats = model.webgpuCamera.getKeyMatrices(publicAPI);\n model.UBO.setArray('WCVCMatrix', keyMats.wcvc);\n model.UBO.setArray('SCPCMatrix', keyMats.scpc);\n model.UBO.setArray('PCSCMatrix', keyMats.pcsc);\n model.UBO.setArray('SCVCMatrix', keyMats.scvc);\n model.UBO.setArray('VCPCMatrix', keyMats.vcpc);\n model.UBO.setArray('WCVCNormals', keyMats.normalMatrix);\n model.UBO.setValue('LightCount', model.renderable.getLights().length);\n model.UBO.setValue('MaxEnvironmentMipLevel', (_model$renderable$get = model.renderable.getEnvironmentTexture()) === null || _model$renderable$get === void 0 ? void 0 : _model$renderable$get.getMipLevel());\n model.UBO.setValue('BackgroundDiffuseStrength', model.renderable.getEnvironmentTextureDiffuseStrength());\n model.UBO.setValue('BackgroundSpecularStrength', model.renderable.getEnvironmentTextureSpecularStrength());\n var tsize = publicAPI.getYInvertedTiledSizeAndOrigin();\n model.UBO.setArray('viewportSize', [tsize.usize, tsize.vsize]);\n model.UBO.setValue('cameraParallel', model.camera.getParallelProjection());\n\n var device = model._parent.getDevice();\n\n model.UBO.sendIfNeeded(device);\n }\n };\n\n publicAPI.updateSSBO = function () {\n var lights = model.renderable.getLights();\n var keyMats = model.webgpuCamera.getKeyMatrices(publicAPI);\n var lightTimeString = \"\".concat(model.renderable.getMTime());\n\n for (var i = 0; i < lights.length; i++) {\n lightTimeString += lights[i].getMTime();\n }\n\n if (lightTimeString !== model.lightTimeString) {\n var lightPosArray = new Float32Array(lights.length * 4);\n var lightDirArray = new Float32Array(lights.length * 4);\n var lightColorArray = new Float32Array(lights.length * 4);\n var lightTypeArray = new Float32Array(lights.length * 4);\n\n for (var _i = 0; _i < lights.length; _i++) {\n var offset = _i * 4; // Position\n\n var viewCoordinatePosition = lights[_i].getPosition();\n\n vec3.transformMat4(viewCoordinatePosition, viewCoordinatePosition, keyMats.wcvc); // viewCoordinatePosition\n\n lightPosArray[offset] = viewCoordinatePosition[0];\n lightPosArray[offset + 1] = viewCoordinatePosition[1];\n lightPosArray[offset + 2] = viewCoordinatePosition[2];\n lightPosArray[offset + 3] = 0; // Rotation (All are negative to correct for -Z being forward)\n\n lightDirArray[offset] = -lights[_i].getDirection()[0];\n lightDirArray[offset + 1] = -lights[_i].getDirection()[1];\n lightDirArray[offset + 2] = -lights[_i].getDirection()[2];\n lightDirArray[offset + 3] = 0; // Color\n\n lightColorArray[offset] = lights[_i].getColor()[0];\n lightColorArray[offset + 1] = lights[_i].getColor()[1];\n lightColorArray[offset + 2] = lights[_i].getColor()[2];\n lightColorArray[offset + 3] = lights[_i].getIntensity() * 5; // arbitrary multiplication to fix the dullness of low value PBR lights\n // Type\n\n lightTypeArray[offset] = getLightTypeIndex(lights[_i]); // Type\n\n lightTypeArray[offset + 1] = Math.cos(radiansFromDegrees(lights[_i].getConeAngle())); // Inner Phi, should probably do some check on these to make sure they dont excede limits\n\n lightTypeArray[offset + 2] = Math.cos(radiansFromDegrees(lights[_i].getConeAngle() + lights[_i].getConeFalloff())); // Outer Phi\n\n lightTypeArray[offset + 3] = 0;\n } // Im not sure how correct this is, but this is what the example does\n // https://kitware.github.io/vtk-js/api/Rendering_WebGPU_VolumePassFSQ.html\n\n\n model.SSBO.clearData();\n model.SSBO.setNumberOfInstances(lights.length);\n model.SSBO.addEntry('LightPos', 'vec4'); // Position\n\n model.SSBO.addEntry('LightDir', 'vec4'); // Direction\n\n model.SSBO.addEntry('LightColor', 'vec4'); // Color (r, g, b, intensity)\n\n model.SSBO.addEntry('LightData', 'vec4'); // Other data (type, etc, etc, etc)\n\n model.SSBO.setAllInstancesFromArray('LightPos', lightPosArray);\n model.SSBO.setAllInstancesFromArray('LightDir', lightDirArray);\n model.SSBO.setAllInstancesFromArray('LightColor', lightColorArray);\n model.SSBO.setAllInstancesFromArray('LightData', lightTypeArray);\n\n var device = model._parent.getDevice();\n\n model.SSBO.send(device);\n }\n\n model.lightTimeString = lightTimeString;\n };\n\n publicAPI.scissorAndViewport = function (encoder) {\n var tsize = publicAPI.getYInvertedTiledSizeAndOrigin();\n encoder.getHandle().setViewport(tsize.lowerLeftU, tsize.lowerLeftV, tsize.usize, tsize.vsize, 0.0, 1.0); // set scissor\n\n encoder.getHandle().setScissorRect(tsize.lowerLeftU, tsize.lowerLeftV, tsize.usize, tsize.vsize);\n };\n\n publicAPI.bindUBO = function (renderEncoder) {\n renderEncoder.activateBindGroup(model.bindGroup);\n }; // Renders myself\n\n\n publicAPI.opaquePass = function (prepass) {\n if (prepass) {\n model.renderEncoder.begin(model._parent.getCommandEncoder());\n publicAPI.updateUBO();\n publicAPI.updateSSBO();\n } else {\n publicAPI.scissorAndViewport(model.renderEncoder);\n publicAPI.clear();\n model.renderEncoder.end();\n }\n };\n\n publicAPI.clear = function () {\n var _model$backgroundTex;\n\n if (model.renderable.getTransparent() || model.suppressClear) {\n return;\n }\n\n var device = model._parent.getDevice(); // Normal Solid Color\n\n\n if (!model.clearFSQ) {\n model.clearFSQ = vtkWebGPUFullScreenQuad.newInstance();\n model.clearFSQ.setDevice(device);\n model.clearFSQ.setPipelineHash('clearfsq');\n model.clearFSQ.setFragmentShaderTemplate(clearFragColorTemplate);\n var ubo = vtkWebGPUUniformBuffer.newInstance({\n label: 'mapperUBO'\n });\n ubo.addEntry('FSQMatrix', 'mat4x4');\n ubo.addEntry('BackgroundColor', 'vec4');\n model.clearFSQ.setUBO(ubo);\n model.backgroundTex = model.renderable.getEnvironmentTexture();\n } // Textured Background\n\n\n if (model.clearFSQ.getPipelineHash() !== 'clearfsqwithtexture' && model.renderable.getUseEnvironmentTextureAsBackground() && (_model$backgroundTex = model.backgroundTex) !== null && _model$backgroundTex !== void 0 && _model$backgroundTex.getImageLoaded()) {\n model.clearFSQ.setFragmentShaderTemplate(clearFragTextureTemplate);\n\n var _ubo = vtkWebGPUUniformBuffer.newInstance({\n label: 'mapperUBO'\n });\n\n _ubo.addEntry('FSQMatrix', 'mat4x4');\n\n _ubo.addEntry('BackgroundColor', 'vec4');\n\n model.clearFSQ.setUBO(_ubo);\n var environmentTextureHash = device.getTextureManager().getTextureForVTKTexture(model.backgroundTex);\n\n if (environmentTextureHash.getReady()) {\n var tview = environmentTextureHash.createView(\"EnvironmentTexture\");\n model.clearFSQ.setTextureViews([tview]);\n model.backgroundTexLoaded = true;\n var interpolate = model.backgroundTex.getInterpolate() ? 'linear' : 'nearest';\n tview.addSampler(device, {\n addressModeU: 'repeat',\n addressModeV: 'clamp-to-edge',\n addressModeW: 'repeat',\n minFilter: interpolate,\n magFilter: interpolate,\n mipmapFilter: 'linear'\n });\n }\n\n model.clearFSQ.setPipelineHash('clearfsqwithtexture');\n } else if (model.clearFSQ.getPipelineHash() === 'clearfsqwithtexture' && !model.renderable.getUseEnvironmentTextureAsBackground()) {\n // In case the mode is changed at runtime\n model.clearFSQ = vtkWebGPUFullScreenQuad.newInstance();\n model.clearFSQ.setDevice(device);\n model.clearFSQ.setPipelineHash('clearfsq');\n model.clearFSQ.setFragmentShaderTemplate(clearFragColorTemplate);\n\n var _ubo2 = vtkWebGPUUniformBuffer.newInstance({\n label: 'mapperUBO'\n });\n\n _ubo2.addEntry('FSQMatrix', 'mat4x4');\n\n _ubo2.addEntry('BackgroundColor', 'vec4');\n\n model.clearFSQ.setUBO(_ubo2);\n }\n\n var keyMats = model.webgpuCamera.getKeyMatrices(publicAPI);\n var background = model.renderable.getBackgroundByReference();\n model.clearFSQ.getUBO().setArray('BackgroundColor', background);\n mat4.transpose(_tNormalMat4, keyMats.normalMatrix);\n mat4.mul(_fsqClearMat4, keyMats.scvc, keyMats.pcsc);\n mat4.mul(_fsqClearMat4, _tNormalMat4, _fsqClearMat4);\n model.clearFSQ.getUBO().setArray('FSQMatrix', _fsqClearMat4);\n model.clearFSQ.getUBO().sendIfNeeded(device);\n model.clearFSQ.prepareAndDraw(model.renderEncoder);\n };\n\n publicAPI.translucentPass = function (prepass) {\n if (prepass) {\n model.renderEncoder.begin(model._parent.getCommandEncoder());\n } else {\n publicAPI.scissorAndViewport(model.renderEncoder);\n model.renderEncoder.end();\n }\n };\n\n publicAPI.volumeDepthRangePass = function (prepass) {\n if (prepass) {\n model.renderEncoder.begin(model._parent.getCommandEncoder());\n } else {\n publicAPI.scissorAndViewport(model.renderEncoder);\n model.renderEncoder.end();\n }\n };\n\n publicAPI.getAspectRatio = function () {\n var size = model._parent.getSizeByReference();\n\n var viewport = model.renderable.getViewportByReference();\n return size[0] * (viewport[2] - viewport[0]) / ((viewport[3] - viewport[1]) * size[1]);\n };\n\n publicAPI.convertToOpenGLDepth = function (val) {\n return model.webgpuCamera.convertToOpenGLDepth(val);\n };\n\n publicAPI.getYInvertedTiledSizeAndOrigin = function () {\n var res = publicAPI.getTiledSizeAndOrigin();\n\n var size = model._parent.getSizeByReference();\n\n res.lowerLeftV = size[1] - res.vsize - res.lowerLeftV;\n return res;\n };\n\n publicAPI.getTiledSizeAndOrigin = function () {\n var vport = model.renderable.getViewportByReference(); // if there is no window assume 0 1\n\n var tileViewPort = [0.0, 0.0, 1.0, 1.0]; // find the lower left corner of the viewport, taking into account the\n // lower left boundary of this tile\n\n var vpu = vport[0] - tileViewPort[0];\n var vpv = vport[1] - tileViewPort[1]; // store the result as a pixel value\n\n var ndvp = model._parent.normalizedDisplayToDisplay(vpu, vpv);\n\n var lowerLeftU = Math.round(ndvp[0]);\n var lowerLeftV = Math.round(ndvp[1]); // find the upper right corner of the viewport, taking into account the\n // lower left boundary of this tile\n\n var vpu2 = vport[2] - tileViewPort[0];\n var vpv2 = vport[3] - tileViewPort[1];\n\n var ndvp2 = model._parent.normalizedDisplayToDisplay(vpu2, vpv2); // now compute the size of the intersection of the viewport with the\n // current tile\n\n\n var usize = Math.round(ndvp2[0]) - lowerLeftU;\n var vsize = Math.round(ndvp2[1]) - lowerLeftV;\n\n if (usize < 0) {\n usize = 0;\n }\n\n if (vsize < 0) {\n vsize = 0;\n }\n\n return {\n usize: usize,\n vsize: vsize,\n lowerLeftU: lowerLeftU,\n lowerLeftV: lowerLeftV\n };\n };\n\n publicAPI.getPropFromID = function (id) {\n for (var i = 0; i < model.children.length; i++) {\n var res = model.children[i].getPropID ? model.children[i].getPropID() : -1;\n\n if (res === id) {\n return model.children[i];\n }\n }\n\n return null;\n };\n\n publicAPI.getStabilizedTime = function () {\n return model.stabilizedTime.getMTime();\n };\n\n publicAPI.releaseGraphicsResources = function () {\n if (model.selector !== null) {\n model.selector.releaseGraphicsResources();\n }\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n bindGroup: null,\n selector: null,\n renderEncoder: null,\n recenterThreshold: 20.0,\n suppressClear: false,\n stabilizedCenter: [0.0, 0.0, 0.0]\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Inheritance\n\n vtkViewNode.extend(publicAPI, model, initialValues); // UBO\n\n model.UBO = vtkWebGPUUniformBuffer.newInstance({\n label: 'rendererUBO'\n });\n model.UBO.addEntry('WCVCMatrix', 'mat4x4');\n model.UBO.addEntry('SCPCMatrix', 'mat4x4');\n model.UBO.addEntry('PCSCMatrix', 'mat4x4');\n model.UBO.addEntry('SCVCMatrix', 'mat4x4');\n model.UBO.addEntry('VCPCMatrix', 'mat4x4');\n model.UBO.addEntry('WCVCNormals', 'mat4x4');\n model.UBO.addEntry('viewportSize', 'vec2');\n model.UBO.addEntry('LightCount', 'i32');\n model.UBO.addEntry('MaxEnvironmentMipLevel', 'f32');\n model.UBO.addEntry('BackgroundDiffuseStrength', 'f32');\n model.UBO.addEntry('BackgroundSpecularStrength', 'f32');\n model.UBO.addEntry('cameraParallel', 'u32'); // SSBO (Light data)\n\n model.SSBO = vtkWebGPUStorageBuffer.newInstance({\n label: 'rendererLightSSBO'\n });\n model.lightTimeString = '';\n model.bindGroup = vtkWebGPUBindGroup.newInstance({\n label: 'rendererBG'\n });\n model.bindGroup.setBindables([model.UBO, model.SSBO]);\n model.tmpMat4 = mat4.identity(new Float64Array(16));\n model.stabilizedTime = {};\n obj(model.stabilizedTime, {\n mtime: 0\n }); // Build VTK API\n\n get(publicAPI, model, ['bindGroup', 'stabilizedTime']);\n getArray(publicAPI, model, ['stabilizedCenter']);\n setGet(publicAPI, model, ['renderEncoder', 'selector', 'suppressClear', 'UBO']); // Object methods\n\n vtkWebGPURenderer(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = newInstance$1(extend, 'vtkWebGPURenderer'); // ----------------------------------------------------------------------------\n\nvar index = {\n newInstance: newInstance,\n extend: extend\n}; // Register ourself to WebGPU backend if imported\n\nregisterOverride('vtkRenderer', newInstance);\n\nexport { index as default, extend, newInstance };\n","import macro from '../../macros.js';\n\n/* eslint-disable no-bitwise */\n// ----------------------------------------------------------------------------\n// vtkWebGPUSampler methods\n// ----------------------------------------------------------------------------\n\nfunction vtkWebGPUSampler(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkWebGPUSampler');\n\n publicAPI.create = function (device) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n model.device = device;\n model.options.addressModeU = options.addressModeU ? options.addressModeU : 'clamp-to-edge';\n model.options.addressModeV = options.addressModeV ? options.addressModeV : 'clamp-to-edge';\n model.options.addressModeW = options.addressModeW ? options.addressModeW : 'clamp-to-edge';\n model.options.magFilter = options.magFilter ? options.magFilter : 'nearest';\n model.options.minFilter = options.minFilter ? options.minFilter : 'nearest';\n model.options.mipmapFilter = options.mipmapFilter ? options.mipmapFilter : 'nearest';\n model.options.label = model.label;\n model.handle = model.device.getHandle().createSampler(model.options);\n model.bindGroupTime.modified();\n };\n\n publicAPI.getShaderCode = function (binding, group) {\n var result = \"@binding(\".concat(binding, \") @group(\").concat(group, \") var \").concat(model.label, \": sampler;\");\n return result;\n };\n\n publicAPI.getBindGroupEntry = function () {\n var foo = {\n resource: model.handle\n };\n return foo;\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n device: null,\n handle: null,\n label: null,\n options: null\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Object methods\n\n macro.obj(publicAPI, model);\n model.options = {};\n model.bindGroupLayoutEntry = {\n /* eslint-disable no-undef */\n visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n\n /* eslint-enable no-undef */\n sampler: {// type: 'filtering',\n }\n };\n model.bindGroupTime = {};\n macro.obj(model.bindGroupTime, {\n mtime: 0\n });\n macro.get(publicAPI, model, ['bindGroupTime', 'handle', 'options']);\n macro.setGet(publicAPI, model, ['bindGroupLayoutEntry', 'device', 'label']);\n vtkWebGPUSampler(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend); // ----------------------------------------------------------------------------\n\nvar vtkWebGPUSampler$1 = {\n newInstance: newInstance,\n extend: extend\n};\n\nexport { vtkWebGPUSampler$1 as default, extend, newInstance };\n","import { mat4, vec4 } from 'gl-matrix';\nimport Constants from '../Core/ImageMapper/Constants.js';\nimport { newInstance as newInstance$1, obj } from '../../macros.js';\nimport vtkWebGPUShaderCache from './ShaderCache.js';\nimport vtkWebGPUFullScreenQuad from './FullScreenQuad.js';\nimport vtkWebGPUUniformBuffer from './UniformBuffer.js';\nimport vtkWebGPUSampler from './Sampler.js';\nimport { InterpolationType } from '../Core/ImageProperty/Constants.js';\nimport { registerOverride } from './ViewNodeFactory.js';\n\nvar SlicingMode = Constants.SlicingMode;\nvar imgFragTemplate = \"\\n//VTK::Renderer::Dec\\n\\n//VTK::Mapper::Dec\\n\\n//VTK::TCoord::Dec\\n\\n//VTK::Image::Dec\\n\\n//VTK::RenderEncoder::Dec\\n\\n//VTK::IOStructs::Dec\\n\\n@fragment\\nfn main(\\n//VTK::IOStructs::Input\\n)\\n//VTK::IOStructs::Output\\n{\\n var output: fragmentOutput;\\n\\n //VTK::Image::Sample\\n\\n // var computedColor: vec4 = vec4(1.0,0.7, 0.5, 1.0);\\n\\n//VTK::RenderEncoder::Impl\\n\\n return output;\\n}\\n\"; // ----------------------------------------------------------------------------\n// helper methods\n// ----------------------------------------------------------------------------\n\nfunction computeFnToString(property, fn, numberOfComponents) {\n var pwfun = fn.apply(property);\n\n if (pwfun) {\n var iComps = property.getIndependentComponents();\n return \"\".concat(property.getMTime(), \"-\").concat(iComps, \"-\").concat(numberOfComponents);\n }\n\n return '0';\n} // ----------------------------------------------------------------------------\n// vtkWebGPUImageMapper methods\n// ----------------------------------------------------------------------------\n\n\nvar tmpMat4 = new Float64Array(16);\nvar tmp2Mat4 = new Float64Array(16);\nvar tmp3Mat4 = new Float64Array(16);\nvar ptsArray1 = new Float64Array(4);\nvar ptsArray2 = new Float64Array(4);\n\nfunction vtkWebGPUImageMapper(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkWebGPUImageMapper');\n\n publicAPI.buildPass = function (prepass) {\n if (prepass) {\n model.WebGPUImageSlice = publicAPI.getFirstAncestorOfType('vtkWebGPUImageSlice');\n model.WebGPURenderer = model.WebGPUImageSlice.getFirstAncestorOfType('vtkWebGPURenderer');\n model.WebGPURenderWindow = model.WebGPURenderer.getParent();\n model.device = model.WebGPURenderWindow.getDevice();\n var ren = model.WebGPURenderer.getRenderable(); // is slice set by the camera\n\n if (model.renderable.getSliceAtFocalPoint()) {\n model.renderable.setSliceFromCamera(ren.getActiveCamera());\n }\n }\n }; // Renders myself\n\n\n publicAPI.translucentPass = function (prepass) {\n if (prepass) {\n publicAPI.render();\n }\n };\n\n publicAPI.opaquePass = function (prepass) {\n if (prepass) {\n publicAPI.render();\n }\n };\n\n publicAPI.render = function () {\n model.renderable.update();\n model.currentInput = model.renderable.getInputData();\n publicAPI.prepareToDraw(model.WebGPURenderer.getRenderEncoder());\n model.renderEncoder.registerDrawCallback(model.pipeline, publicAPI.draw);\n };\n\n publicAPI.computePipelineHash = function () {\n var ext = model.currentInput.getExtent();\n\n if (ext[0] === ext[1] || ext[2] === ext[3] || ext[4] === ext[5]) {\n model.dimensions = 2;\n model.pipelineHash = 'img2';\n } else {\n model.dimensions = 3;\n model.pipelineHash = 'img3';\n }\n };\n\n publicAPI.updateUBO = function () {\n var utime = model.UBO.getSendTime();\n var actor = model.WebGPUImageSlice.getRenderable();\n var volMapr = actor.getMapper();\n\n if (publicAPI.getMTime() > utime || model.renderable.getMTime() > utime || actor.getProperty().getMTime() > utime) {\n // compute the SCTCMatrix\n var image = volMapr.getInputData();\n var center = model.WebGPURenderer.getStabilizedCenterByReference();\n mat4.identity(tmpMat4);\n mat4.translate(tmpMat4, tmpMat4, center); // tmpMat4 is now SC->World\n\n var mcwcmat = actor.getMatrix();\n mat4.transpose(tmp2Mat4, mcwcmat);\n mat4.invert(tmp2Mat4, tmp2Mat4); // tmp2Mat4 is now world to model\n\n mat4.multiply(tmpMat4, tmp2Mat4, tmpMat4); // tmp4Mat is now SC->Model\n // the method on the data is world to index but the volume is in\n // model coordinates so really in this context it is model to index\n\n var modelToIndex = image.getWorldToIndex();\n mat4.multiply(tmpMat4, modelToIndex, tmpMat4); // tmpMat4 is now SC -> Index, save this as we need it later\n\n mat4.invert(tmp3Mat4, tmpMat4); // need translation and scale\n\n mat4.fromTranslation(tmp2Mat4, [0.5, 0.5, 0.5]);\n mat4.multiply(tmpMat4, tmp2Mat4, tmpMat4);\n var dims = image.getDimensions();\n mat4.identity(tmp2Mat4);\n mat4.scale(tmp2Mat4, tmp2Mat4, [1.0 / dims[0], 1.0 / dims[1], 1.0 / dims[2]]);\n mat4.multiply(tmpMat4, tmp2Mat4, tmpMat4); // tmpMat4 is now SC -> Tcoord\n\n model.UBO.setArray('SCTCMatrix', tmpMat4); // need to compute the plane here in world coordinates\n // then pass that down in the UBO\n\n var ext = model.currentInput.getExtent(); // Find what IJK axis and what direction to slice along\n\n var _model$renderable$get = model.renderable.getClosestIJKAxis(),\n ijkMode = _model$renderable$get.ijkMode; // Find the IJK slice\n\n\n var nSlice = model.renderable.getSlice();\n\n if (ijkMode !== model.renderable.getSlicingMode()) {\n // If not IJK slicing, get the IJK slice from the XYZ position/slice\n nSlice = model.renderable.getSliceAtPosition(nSlice);\n }\n\n var axis0 = 2;\n var axis1 = 0;\n var axis2 = 1;\n\n if (ijkMode === SlicingMode.I) {\n axis0 = 0;\n axis1 = 1;\n axis2 = 2;\n } else if (ijkMode === SlicingMode.J) {\n axis0 = 1;\n axis1 = 2;\n axis2 = 0;\n }\n\n ptsArray1[axis0] = nSlice;\n ptsArray1[axis1] = ext[axis1 * 2] - 0.5;\n ptsArray1[axis2] = ext[axis2 * 2] - 0.5;\n ptsArray1[3] = 1.0;\n vec4.transformMat4(ptsArray1, ptsArray1, tmp3Mat4);\n model.UBO.setArray('Origin', ptsArray1);\n ptsArray2[axis0] = nSlice;\n ptsArray2[axis1] = ext[axis1 * 2 + 1] + 0.5;\n ptsArray2[axis2] = ext[axis2 * 2] - 0.5;\n ptsArray2[3] = 1.0;\n vec4.transformMat4(ptsArray2, ptsArray2, tmp3Mat4);\n vec4.subtract(ptsArray2, ptsArray2, ptsArray1);\n ptsArray2[3] = 1.0;\n model.UBO.setArray('Axis1', ptsArray2);\n ptsArray2[axis0] = nSlice;\n ptsArray2[axis1] = ext[axis1 * 2] - 0.5;\n ptsArray2[axis2] = ext[axis2 * 2 + 1] + 0.5;\n ptsArray2[3] = 1.0;\n vec4.transformMat4(ptsArray2, ptsArray2, tmp3Mat4);\n vec4.subtract(ptsArray2, ptsArray2, ptsArray1);\n ptsArray2[3] = 1.0;\n model.UBO.setArray('Axis2', ptsArray2); // three levels of shift scale combined into one\n // for performance in the fragment shader\n\n var cScale = [1, 1, 1, 1];\n var cShift = [0, 0, 0, 0];\n var tView = model.textureViews[0];\n var tScale = tView.getTexture().getScale();\n var numComp = tView.getTexture().getNumberOfComponents();\n var iComps = false; // todo handle independent?\n\n for (var i = 0; i < numComp; i++) {\n var cw = actor.getProperty().getColorWindow();\n var cl = actor.getProperty().getColorLevel();\n var target = iComps ? i : 0;\n var cfun = actor.getProperty().getRGBTransferFunction(target);\n\n if (cfun) {\n var cRange = cfun.getRange();\n cw = cRange[1] - cRange[0];\n cl = 0.5 * (cRange[1] + cRange[0]);\n }\n\n cScale[i] = tScale / cw;\n cShift[i] = -cl / cw + 0.5;\n }\n\n model.UBO.setArray('cScale', cScale);\n model.UBO.setArray('cShift', cShift);\n model.UBO.sendIfNeeded(model.device);\n }\n };\n\n publicAPI.updateLUTImage = function () {\n var actorProperty = model.WebGPUImageSlice.getRenderable().getProperty();\n var tView = publicAPI.getTextureViews()[0];\n tView.getTexture().getNumberOfComponents();\n\n var numIComps = 1;\n var cfunToString = computeFnToString(actorProperty, actorProperty.getRGBTransferFunction, numIComps);\n\n if (model.colorTextureString !== cfunToString) {\n model.numRows = numIComps;\n var colorArray = new Uint8Array(model.numRows * 2 * model.rowLength * 4);\n var cfun = actorProperty.getRGBTransferFunction();\n\n if (cfun) {\n var tmpTable = new Float32Array(model.rowLength * 3);\n\n for (var c = 0; c < numIComps; c++) {\n cfun = actorProperty.getRGBTransferFunction(c);\n var cRange = cfun.getRange();\n cfun.getTable(cRange[0], cRange[1], model.rowLength, tmpTable, 1);\n\n {\n for (var _i = 0; _i < model.rowLength; _i++) {\n var _idx = c * model.rowLength * 8 + _i * 4;\n\n colorArray[_idx] = 255.0 * tmpTable[_i * 3];\n colorArray[_idx + 1] = 255.0 * tmpTable[_i * 3 + 1];\n colorArray[_idx + 2] = 255.0 * tmpTable[_i * 3 + 2];\n colorArray[_idx + 3] = 255.0;\n\n for (var _j = 0; _j < 4; _j++) {\n colorArray[_idx + model.rowLength * 4 + _j] = colorArray[_idx + _j];\n }\n }\n }\n }\n } else {\n for (var _i2 = 0; _i2 < model.rowLength; ++_i2) {\n var grey = 255.0 * _i2 / (model.rowLength - 1);\n colorArray[_i2 * 4] = grey;\n colorArray[_i2 * 4 + 1] = grey;\n colorArray[_i2 * 4 + 2] = grey;\n colorArray[_i2 * 4 + 3] = 255.0;\n\n for (var _j2 = 0; _j2 < 4; _j2++) {\n colorArray[_i2 * 4 + model.rowLength * 4 + _j2] = colorArray[_i2 * 4 + _j2];\n }\n }\n }\n\n {\n var treq = {\n nativeArray: colorArray,\n width: model.rowLength,\n height: model.numRows * 2,\n depth: 1,\n format: 'rgba8unorm'\n };\n var newTex = model.device.getTextureManager().getTexture(treq);\n var tview = newTex.createView('tfunTexture');\n model.textureViews[1] = tview;\n }\n model.colorTextureString = cfunToString;\n }\n };\n\n var superClassUpdateBuffers = publicAPI.updateBuffers;\n\n publicAPI.updateBuffers = function () {\n superClassUpdateBuffers();\n var newTex = model.device.getTextureManager().getTextureForImageData(model.currentInput);\n var tViews = model.textureViews;\n\n if (!tViews[0] || tViews[0].getTexture() !== newTex) {\n var tview = newTex.createView('imgTexture');\n tViews[0] = tview;\n }\n\n publicAPI.updateLUTImage();\n publicAPI.updateUBO(); // set interpolation on the texture based on property setting\n\n var actorProperty = model.WebGPUImageSlice.getRenderable().getProperty();\n var iType = actorProperty.getInterpolationType() === InterpolationType.NEAREST ? 'nearest' : 'linear';\n\n if (!model.clampSampler || iType !== model.clampSampler.getOptions().minFilter) {\n model.clampSampler = vtkWebGPUSampler.newInstance({\n label: 'clampSampler'\n });\n model.clampSampler.create(model.device, {\n minFilter: iType,\n magFilter: iType\n });\n model.additionalBindables = [model.clampSampler];\n }\n };\n\n var sr = publicAPI.getShaderReplacements();\n\n publicAPI.replaceShaderPosition = function (hash, pipeline, vertexInput) {\n var vDesc = pipeline.getShaderDescription('vertex');\n vDesc.addBuiltinOutput('vec4', '@builtin(position) Position');\n var code = vDesc.getCode();\n var lines = ['var pos: vec4 = mapperUBO.Origin +', ' (vertexBC.x * 0.5 + 0.5) * mapperUBO.Axis1 + (vertexBC.y * 0.5 + 0.5) * mapperUBO.Axis2;', 'pos.w = 1.0;'];\n\n if (model.dimensions === 2) {\n lines.push('var tcoord : vec2 = (mapperUBO.SCTCMatrix * pos).xy;');\n } else {\n lines.push('var tcoord : vec3 = (mapperUBO.SCTCMatrix * pos).xyz;');\n }\n\n lines.push('output.tcoordVS = tcoord;', 'output.Position = rendererUBO.SCPCMatrix * pos;');\n code = vtkWebGPUShaderCache.substitute(code, '//VTK::Position::Impl', lines).result;\n vDesc.setCode(code);\n };\n\n sr.set('replaceShaderPosition', publicAPI.replaceShaderPosition);\n\n publicAPI.replaceShaderTCoord = function (hash, pipeline, vertexInput) {\n var vDesc = pipeline.getShaderDescription('vertex');\n\n if (model.dimensions === 2) {\n vDesc.addOutput('vec2', 'tcoordVS');\n } else {\n vDesc.addOutput('vec3', 'tcoordVS');\n }\n };\n\n sr.set('replaceShaderTCoord', publicAPI.replaceShaderTCoord);\n\n publicAPI.replaceShaderImage = function (hash, pipeline, vertexInput) {\n var fDesc = pipeline.getShaderDescription('fragment');\n var code = fDesc.getCode();\n\n if (model.dimensions === 3) {\n code = vtkWebGPUShaderCache.substitute(code, '//VTK::Image::Sample', [\" var computedColor: vec4 =\", \" textureSampleLevel(imgTexture, clampSampler, input.tcoordVS, 0.0);\", \"//VTK::Image::Sample\"]).result;\n } else {\n code = vtkWebGPUShaderCache.substitute(code, '//VTK::Image::Sample', [\" var computedColor: vec4 =\", \" textureSampleLevel(imgTexture, clampSampler, input.tcoordVS, 0.0);\", \"//VTK::Image::Sample\"]).result;\n }\n\n code = vtkWebGPUShaderCache.substitute(code, '//VTK::Image::Sample', [\" var coord: vec2 =\", \" vec2(computedColor.r * mapperUBO.cScale.r + mapperUBO.cShift.r, 0.5);\", \" computedColor = textureSampleLevel(tfunTexture, clampSampler, coord, 0.0);\"]).result;\n fDesc.setCode(code);\n };\n\n sr.set('replaceShaderImage', publicAPI.replaceShaderImage);\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n rowLength: 1024\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Inheritance\n\n vtkWebGPUFullScreenQuad.extend(publicAPI, model, initialValues);\n publicAPI.setFragmentShaderTemplate(imgFragTemplate);\n model.UBO = vtkWebGPUUniformBuffer.newInstance({\n label: 'mapperUBO'\n });\n model.UBO.addEntry('SCTCMatrix', 'mat4x4');\n model.UBO.addEntry('Origin', 'vec4');\n model.UBO.addEntry('Axis2', 'vec4');\n model.UBO.addEntry('Axis1', 'vec4');\n model.UBO.addEntry('cScale', 'vec4');\n model.UBO.addEntry('cShift', 'vec4');\n model.lutBuildTime = {};\n obj(model.lutBuildTime, {\n mtime: 0\n });\n model.imagemat = mat4.identity(new Float64Array(16));\n model.imagematinv = mat4.identity(new Float64Array(16));\n model.VBOBuildTime = {};\n obj(model.VBOBuildTime); // Object methods\n\n vtkWebGPUImageMapper(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = newInstance$1(extend, 'vtkWebGPUImageMapper'); // ----------------------------------------------------------------------------\n\nvar index = {\n newInstance: newInstance,\n extend: extend\n}; // Register ourself to WebGPU backend if imported\n\nregisterOverride('vtkImageMapper', newInstance);\n\nexport { index as default, extend, newInstance };\n","import { mat4 } from 'gl-matrix';\nimport { newInstance as newInstance$1, obj, get } from '../../macros.js';\nimport vtkViewNode from '../SceneGraph/ViewNode.js';\nimport { registerOverride } from './ViewNodeFactory.js';\n\n// vtkWebGPUImageSlice methods\n// ----------------------------------------------------------------------------\n\nfunction vtkWebGPUImageSlice(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkWebGPUImageSlice'); // Builds myself.\n\n publicAPI.buildPass = function (prepass) {\n if (!model.renderable || !model.renderable.getVisibility()) {\n return;\n }\n\n if (prepass) {\n if (!model.renderable) {\n return;\n }\n\n model.WebGPURenderer = publicAPI.getFirstAncestorOfType('vtkWebGPURenderer');\n model.WebGPURenderWindow = model.WebGPURenderer.getFirstAncestorOfType('vtkWebGPURenderWindow');\n\n if (model.propID === undefined) {\n model.propID = model.WebGPURenderWindow.getUniquePropID();\n }\n\n publicAPI.prepareNodes();\n publicAPI.addMissingNode(model.renderable.getMapper());\n publicAPI.removeUnusedNodes();\n }\n }; // we draw textures, then mapper, then post pass textures\n\n\n publicAPI.traverseOpaquePass = function (renderPass) {\n if (!model.renderable || !model.renderable.getNestedVisibility() || !model.renderable.getIsOpaque() || model.WebGPURenderer.getSelector() && !model.renderable.getNestedPickable()) {\n return;\n }\n\n publicAPI.apply(renderPass, true);\n model.children.forEach(function (child) {\n child.traverse(renderPass);\n });\n publicAPI.apply(renderPass, false);\n };\n\n publicAPI.traverseTranslucentPass = function (renderPass) {\n if (!model.renderable || !model.renderable.getNestedVisibility() || model.renderable.getIsOpaque() || model.WebGPURenderer.getSelector() && !model.renderable.getNestedPickable()) {\n return;\n }\n\n publicAPI.apply(renderPass, true);\n model.children.forEach(function (child) {\n child.traverse(renderPass);\n });\n publicAPI.apply(renderPass, false);\n };\n\n publicAPI.queryPass = function (prepass, renderPass) {\n if (prepass) {\n if (!model.renderable || !model.renderable.getVisibility()) {\n return;\n }\n\n if (model.renderable.getIsOpaque()) {\n renderPass.incrementOpaqueActorCount();\n } else {\n renderPass.incrementTranslucentActorCount();\n }\n }\n };\n\n publicAPI.getBufferShift = function (wgpuRen) {\n publicAPI.getKeyMatrices(wgpuRen);\n return model.bufferShift;\n };\n\n publicAPI.getKeyMatrices = function (wgpuRen) {\n // has the actor or stabilization center changed?\n if (Math.max(model.renderable.getMTime(), wgpuRen.getStabilizedTime()) > model.keyMatricesTime.getMTime()) {\n model.renderable.computeMatrix();\n var mcwc = model.renderable.getMatrix(); // compute the net shift\n\n var center = wgpuRen.getStabilizedCenterByReference();\n model.bufferShift[0] = mcwc[3] - center[0];\n model.bufferShift[1] = mcwc[7] - center[1];\n model.bufferShift[2] = mcwc[11] - center[2];\n mat4.transpose(model.keyMatrices.bcwc, mcwc);\n\n if (model.renderable.getIsIdentity()) {\n mat4.identity(model.keyMatrices.normalMatrix);\n } else {\n // we use bcwc BEFORE the translate below (just to get transposed mcvc)\n mat4.copy(model.keyMatrices.normalMatrix, model.keyMatrices.bcwc); // zero out translation\n\n model.keyMatrices.normalMatrix[3] = 0.0;\n model.keyMatrices.normalMatrix[7] = 0.0;\n model.keyMatrices.normalMatrix[11] = 0.0;\n mat4.invert(model.keyMatrices.normalMatrix, model.keyMatrices.normalMatrix);\n mat4.transpose(model.keyMatrices.normalMatrix, model.keyMatrices.normalMatrix);\n } // only meed the buffer shift to get to world\n\n\n mat4.translate(model.keyMatrices.bcwc, model.keyMatrices.bcwc, [-model.bufferShift[0], -model.bufferShift[1], -model.bufferShift[2]]); // to get to stabilized we also need the center\n\n mat4.translate(model.keyMatrices.bcsc, model.keyMatrices.bcwc, [-center[0], -center[1], -center[2]]);\n model.keyMatricesTime.modified();\n }\n\n return model.keyMatrices;\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n bufferShift: undefined,\n keyMatrixTime: null,\n keyMatrices: null,\n propID: undefined\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Inheritance\n\n vtkViewNode.extend(publicAPI, model, initialValues);\n model.keyMatricesTime = {};\n obj(model.keyMatricesTime, {\n mtime: 0\n });\n model.keyMatrices = {\n normalMatrix: new Float64Array(16),\n bcwc: new Float64Array(16),\n bcsc: new Float64Array(16)\n };\n model.keyMatrixTime = {};\n obj(model.keyMatrixTime, {\n mtime: 0\n });\n model.keyMatrices = {\n mcwc: mat4.identity(new Float64Array(16))\n };\n model.bufferShift = [0, 0, 0, 0];\n get(publicAPI, model, ['propID', 'keyMatricesTime']); // Object methods\n\n vtkWebGPUImageSlice(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = newInstance$1(extend, 'vtkWebGPUImageSlice'); // ----------------------------------------------------------------------------\n\nvar index = {\n newInstance: newInstance,\n extend: extend\n}; // Register ourself to WebGPU backend if imported\n\nregisterOverride('vtkImageSlice', newInstance);\n\nexport { index as default, extend, newInstance };\n","import { mat4 } from 'gl-matrix';\nimport macro from '../../macros.js';\nimport vtkViewNode from '../SceneGraph/ViewNode.js';\nimport { registerOverride } from './ViewNodeFactory.js';\n\n// vtkWebGPUVolume methods\n// ----------------------------------------------------------------------------\n\nfunction vtkWebGPUVolume(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkWebGPUVolume'); // Builds myself.\n\n publicAPI.buildPass = function (prepass) {\n if (!model.renderable || !model.renderable.getVisibility()) {\n return;\n }\n\n if (prepass) {\n model.WebGPURenderer = publicAPI.getFirstAncestorOfType('vtkWebGPURenderer');\n model.WebGPURenderWindow = model.WebGPURenderer.getFirstAncestorOfType('vtkWebGPURenderWindow'); // for the future if we support hardware selection of volumes\n\n if (model.propID === undefined) {\n model.propID = model.WebGPURenderWindow.getUniquePropID();\n }\n\n model.renderable.getMapper().update();\n }\n };\n\n publicAPI.queryPass = function (prepass, renderPass) {\n if (prepass) {\n if (!model.renderable || !model.renderable.getVisibility()) {\n return;\n } // Check for the special case when the mapper's bounds are unknown\n\n\n var bds = model.renderable.getMapper().getBounds();\n\n if (!bds || bds.length !== 6 || bds[0] > bds[1]) {\n return;\n }\n\n renderPass.addVolume(publicAPI);\n }\n }; // used in the method below\n\n\n var idx = new Float64Array(3);\n var vout = new Float64Array(3);\n\n publicAPI.getBoundingCubePoints = function (result, offset) {\n var input = model.renderable.getMapper().getInputData();\n\n if (!input) {\n return;\n }\n\n var extent = input.getExtent();\n var m = model.renderable.getMatrix();\n var count = 0;\n\n for (var iz = 4; iz < 6; iz++) {\n idx[2] = extent[iz];\n\n for (var iy = 2; iy < 4; iy++) {\n idx[1] = extent[iy];\n\n for (var ix = 0; ix < 2; ix++) {\n idx[0] = extent[ix];\n input.indexToWorld(idx, vout);\n var poffset = offset + count * 3;\n result[poffset++] = m[0] * vout[0] + m[1] * vout[1] + m[2] * vout[2] + m[3];\n result[poffset++] = m[4] * vout[0] + m[5] * vout[1] + m[6] * vout[2] + m[7];\n result[poffset++] = m[8] * vout[0] + m[9] * vout[1] + m[10] * vout[2] + m[11];\n count++;\n }\n }\n }\n };\n\n publicAPI.getKeyMatrices = function (wgpuRen) {\n // has the actor or stabilization center changed?\n if (Math.max(model.renderable.getMTime(), wgpuRen.getStabilizedTime()) > model.keyMatricesTime.getMTime()) {\n model.renderable.computeMatrix();\n var mcwc = model.renderable.getMatrix(); // compute the net shift\n\n var center = wgpuRen.getStabilizedCenterByReference();\n mat4.transpose(model.keyMatrices.bcwc, mcwc); // to get to stabilized we also need the center\n\n mat4.translate(model.keyMatrices.bcsc, model.keyMatrices.bcwc, [-center[0], -center[1], -center[2]]);\n model.keyMatricesTime.modified();\n }\n\n return model.keyMatrices;\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n propID: undefined,\n keyMatricesTime: null\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Inheritance\n\n vtkViewNode.extend(publicAPI, model, initialValues);\n model.keyMatricesTime = {};\n macro.obj(model.keyMatricesTime, {\n mtime: 0\n });\n model.keyMatrices = {\n bcwc: new Float64Array(16),\n bcsc: new Float64Array(16)\n };\n macro.get(publicAPI, model, ['propID', 'keyMatricesTime']); // Object methods\n\n vtkWebGPUVolume(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkWebGPUVolume'); // ----------------------------------------------------------------------------\n\nvar index = {\n newInstance: newInstance,\n extend: extend\n}; // Register ourself to WebGPU backend if imported\n\nregisterOverride('vtkVolume', newInstance);\n\nexport { index as default, extend, newInstance };\n","import macro from '../../macros.js';\nimport vtkViewNode from '../SceneGraph/ViewNode.js';\nimport { registerOverride } from './ViewNodeFactory.js';\n\n// vtkWebGPUPixelSpaceCallbackMapper methods\n// ----------------------------------------------------------------------------\n\nfunction vtkWebGPUPixelSpaceCallbackMapper(publicAPI, model) {\n model.classHierarchy.push('vtkWebGPUPixelSpaceCallbackMapper');\n\n publicAPI.opaquePass = function (prepass, renderPass) {\n model.WebGPURenderer = publicAPI.getFirstAncestorOfType('vtkWebGPURenderer');\n model.WebGPURenderWindow = model.WebGPURenderer.getParent();\n var aspectRatio = model.WebGPURenderer.getAspectRatio();\n var camera = model.WebGPURenderer ? model.WebGPURenderer.getRenderable().getActiveCamera() : null;\n var tsize = model.WebGPURenderer.getTiledSizeAndOrigin();\n var texels = null;\n\n if (model.renderable.getUseZValues()) ;\n\n model.renderable.invokeCallback(model.renderable.getInputData(), camera, aspectRatio, tsize, texels);\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Inheritance\n\n vtkViewNode.extend(publicAPI, model, initialValues); // Object methods\n\n vtkWebGPUPixelSpaceCallbackMapper(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkWebGPUPixelSpaceCallbackMapper'); // ----------------------------------------------------------------------------\n\nvar index = {\n newInstance: newInstance,\n extend: extend\n}; // Register ourself to WebGPU backend if imported\n\nregisterOverride('vtkPixelSpaceCallbackMapper', newInstance);\n\nexport { index as default, extend, newInstance };\n",null,null,null,null,null,null,null,null,null,null,null,null,"(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"cornerstoneWADOImageLoader\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"cornerstoneWADOImageLoader\"] = factory();\n\telse\n\t\troot[\"cornerstoneWADOImageLoader\"] = factory();\n})(this, () => {\nreturn ","var parent = require('../../stable/object/define-property');\n\nmodule.exports = parent;\n","var isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar flags = require('../regexp/flags');\n\nvar RegExpPrototype = RegExp.prototype;\n\nmodule.exports = function (it) {\n return (it === RegExpPrototype || isPrototypeOf(RegExpPrototype, it)) ? flags(it) : it.flags;\n};\n","require('../../modules/es.object.define-property');\nvar path = require('../../internals/path');\n\nvar Object = path.Object;\n\nvar defineProperty = module.exports = function defineProperty(it, key, desc) {\n return Object.defineProperty(it, key, desc);\n};\n\nif (Object.defineProperty.sham) defineProperty.sham = true;\n","require('../../modules/es.regexp.flags');\nvar getRegExpFlags = require('../../internals/regexp-get-flags');\n\nmodule.exports = getRegExpFlags;\n","module.exports = require('../../full/object/define-property');\n","var parent = require('../../actual/object/define-property');\n\nmodule.exports = parent;\n","var isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw $TypeError(tryToString(argument) + ' is not a function');\n};\n","var isObject = require('../internals/is-object');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw $TypeError($String(argument) + ' is not an object');\n};\n","var uncurryThisRaw = require('../internals/function-uncurry-this-raw');\n\nvar toString = uncurryThisRaw({}.toString);\nvar stringSlice = uncurryThisRaw(''.slice);\n\nmodule.exports = function (it) {\n return stringSlice(toString(it), 8, -1);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var global = require('../internals/global');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(global, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n global[key] = value;\n } return value;\n};\n","var fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","var documentAll = typeof document == 'object' && document.all;\n\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot\nvar IS_HTMLDDA = typeof documentAll == 'undefined' && documentAll !== undefined;\n\nmodule.exports = {\n all: documentAll,\n IS_HTMLDDA: IS_HTMLDDA\n};\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n","'use strict';\nvar global = require('../internals/global');\nvar apply = require('../internals/function-apply');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar isForced = require('../internals/is-forced');\nvar path = require('../internals/path');\nvar bind = require('../internals/function-bind-context');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\n\nvar wrapConstructor = function (NativeConstructor) {\n var Wrapper = function (a, b, c) {\n if (this instanceof Wrapper) {\n switch (arguments.length) {\n case 0: return new NativeConstructor();\n case 1: return new NativeConstructor(a);\n case 2: return new NativeConstructor(a, b);\n } return new NativeConstructor(a, b, c);\n } return apply(NativeConstructor, this, arguments);\n };\n Wrapper.prototype = NativeConstructor.prototype;\n return Wrapper;\n};\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.dontCallGetSet - prevent calling a getter on target\n options.name - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var PROTO = options.proto;\n\n var nativeSource = GLOBAL ? global : STATIC ? global[TARGET] : (global[TARGET] || {}).prototype;\n\n var target = GLOBAL ? path : path[TARGET] || createNonEnumerableProperty(path, TARGET, {})[TARGET];\n var targetPrototype = target.prototype;\n\n var FORCED, USE_NATIVE, VIRTUAL_PROTOTYPE;\n var key, sourceProperty, targetProperty, nativeProperty, resultProperty, descriptor;\n\n for (key in source) {\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contains in native\n USE_NATIVE = !FORCED && nativeSource && hasOwn(nativeSource, key);\n\n targetProperty = target[key];\n\n if (USE_NATIVE) if (options.dontCallGetSet) {\n descriptor = getOwnPropertyDescriptor(nativeSource, key);\n nativeProperty = descriptor && descriptor.value;\n } else nativeProperty = nativeSource[key];\n\n // export native or implementation\n sourceProperty = (USE_NATIVE && nativeProperty) ? nativeProperty : source[key];\n\n if (USE_NATIVE && typeof targetProperty == typeof sourceProperty) continue;\n\n // bind timers to global for call from export context\n if (options.bind && USE_NATIVE) resultProperty = bind(sourceProperty, global);\n // wrap global constructors for prevent changs in this version\n else if (options.wrap && USE_NATIVE) resultProperty = wrapConstructor(sourceProperty);\n // make static versions for prototype methods\n else if (PROTO && isCallable(sourceProperty)) resultProperty = uncurryThis(sourceProperty);\n // default case\n else resultProperty = sourceProperty;\n\n // add a flag to not completely full polyfills\n if (options.sham || (sourceProperty && sourceProperty.sham) || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(resultProperty, 'sham', true);\n }\n\n createNonEnumerableProperty(target, key, resultProperty);\n\n if (PROTO) {\n VIRTUAL_PROTOTYPE = TARGET + 'Prototype';\n if (!hasOwn(path, VIRTUAL_PROTOTYPE)) {\n createNonEnumerableProperty(path, VIRTUAL_PROTOTYPE, {});\n }\n // export virtual prototype methods\n createNonEnumerableProperty(path[VIRTUAL_PROTOTYPE], key, sourceProperty);\n // export real prototype methods\n if (options.real && targetPrototype && !targetPrototype[key]) {\n createNonEnumerableProperty(targetPrototype, key, sourceProperty);\n }\n }\n }\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","var NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar call = FunctionPrototype.call;\n\n// eslint-disable-next-line es/no-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () {\n return call.apply(apply, arguments);\n});\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar bind = uncurryThis(uncurryThis.bind);\n\n// optional / simple context binding\nmodule.exports = function (fn, that) {\n aCallable(fn);\n return that === undefined ? fn : NATIVE_BIND ? bind(fn, that) : function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-function-prototype-bind -- safe\n var test = (function () { /* empty */ }).bind();\n // eslint-disable-next-line no-prototype-builtins -- safe\n return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n","var NATIVE_BIND = require('../internals/function-bind-native');\n\nvar call = Function.prototype.call;\n\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n","var NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar call = FunctionPrototype.call;\nvar uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) {\n return function () {\n return call.apply(fn, arguments);\n };\n};\n","var classofRaw = require('../internals/classof-raw');\nvar uncurryThisRaw = require('../internals/function-uncurry-this-raw');\n\nmodule.exports = function (fn) {\n // Nashorn bug:\n // https://github.com/zloirock/core-js/issues/1128\n // https://github.com/zloirock/core-js/issues/1130\n if (classofRaw(fn) === 'Function') return uncurryThisRaw(fn);\n};\n","var path = require('../internals/path');\nvar global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (variable) {\n return isCallable(variable) ? variable : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace])\n : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method];\n};\n","var aCallable = require('../internals/a-callable');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return isNullOrUndefined(func) ? undefined : aCallable(func);\n};\n","var check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\n// eslint-disable-next-line es/no-object-hasown -- safe\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar $Object = Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !$Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split(it, '') : $Object(it);\n} : $Object;\n","var $documentAll = require('../internals/document-all');\n\nvar documentAll = $documentAll.all;\n\n// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\nmodule.exports = $documentAll.IS_HTMLDDA ? function (argument) {\n return typeof argument == 'function' || argument === documentAll;\n} : function (argument) {\n return typeof argument == 'function';\n};\n","var fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : isCallable(detection) ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","// we can't use just `it == null` since of `document.all` special case\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec\nmodule.exports = function (it) {\n return it === null || it === undefined;\n};\n","var isCallable = require('../internals/is-callable');\nvar $documentAll = require('../internals/document-all');\n\nvar documentAll = $documentAll.all;\n\nmodule.exports = $documentAll.IS_HTMLDDA ? function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it) || it === documentAll;\n} : function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","module.exports = true;\n","var getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar $Object = Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n var current = $getOwnPropertyDescriptor(O, P);\n if (current && current[WRITABLE]) {\n O[P] = Attributes.value;\n Attributes = {\n configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n writable: false\n };\n }\n } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw $TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar call = require('../internals/function-call');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","var call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar $TypeError = TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw $TypeError(\"Can't convert object to primitive value\");\n};\n","module.exports = {};\n","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.hasIndices) result += 'd';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.dotAll) result += 's';\n if (that.unicode) result += 'u';\n if (that.unicodeSets) result += 'v';\n if (that.sticky) result += 'y';\n return result;\n};\n","var call = require('../internals/function-call');\nvar hasOwn = require('../internals/has-own-property');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar regExpFlags = require('../internals/regexp-flags');\n\nvar RegExpPrototype = RegExp.prototype;\n\nmodule.exports = function (R) {\n var flags = R.flags;\n return flags === undefined && !('flags' in RegExpPrototype) && !hasOwn(R, 'flags') && isPrototypeOf(RegExpPrototype, R)\n ? call(regExpFlags, R) : flags;\n};\n","var isNullOrUndefined = require('../internals/is-null-or-undefined');\n\nvar $TypeError = TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (isNullOrUndefined(it)) throw $TypeError(\"Can't call method on \" + it);\n return it;\n};\n","var global = require('../internals/global');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || defineGlobalProperty(SHARED, {});\n\nmodule.exports = store;\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.26.0',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2014-2022 Denis Pushkarev (zloirock.ru)',\n license: 'https://github.com/zloirock/core-js/blob/v3.26.0/LICENSE',\n source: 'https://github.com/zloirock/core-js'\n});\n","/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/engine-v8-version');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol();\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n return !String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","var requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar $Object = Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return $Object(requireObjectCoercible(argument));\n};\n","var call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar $TypeError = TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw $TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","var toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n","var $String = String;\n\nmodule.exports = function (argument) {\n try {\n return $String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\nmodule.exports = NATIVE_SYMBOL\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n value: 42,\n writable: false\n }).prototype != 42;\n});\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar symbolFor = Symbol && Symbol['for'];\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {\n var description = 'Symbol.' + name;\n if (NATIVE_SYMBOL && hasOwn(Symbol, name)) {\n WellKnownSymbolsStore[name] = Symbol[name];\n } else if (USE_SYMBOL_AS_UID && symbolFor) {\n WellKnownSymbolsStore[name] = symbolFor(description);\n } else {\n WellKnownSymbolsStore[name] = createWellKnownSymbol(description);\n }\n } return WellKnownSymbolsStore[name];\n};\n","var $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar defineProperty = require('../internals/object-define-property').f;\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\n// eslint-disable-next-line es/no-object-defineproperty -- safe\n$({ target: 'Object', stat: true, forced: Object.defineProperty !== defineProperty, sham: !DESCRIPTORS }, {\n defineProperty: defineProperty\n});\n","var parent = require('../../es/instance/flags');\n\nmodule.exports = parent;\n","var parent = require('../../es/object/define-property');\n\nmodule.exports = parent;\n","/*!\n localForage -- Offline Storage, Improved\n Version 1.10.0\n https://localforage.github.io/localForage\n (c) 2013-2017 Mozilla, Apache License 2.0\n*/\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.localforage = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw (f.code=\"MODULE_NOT_FOUND\", f)}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var scriptEl = global.document.createElement('script');\n scriptEl.onreadystatechange = function () {\n nextTick();\n\n scriptEl.onreadystatechange = null;\n scriptEl.parentNode.removeChild(scriptEl);\n scriptEl = null;\n };\n global.document.documentElement.appendChild(scriptEl);\n };\n } else {\n scheduleDrain = function () {\n setTimeout(nextTick, 0);\n };\n }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n draining = true;\n var i, oldQueue;\n var len = queue.length;\n while (len) {\n oldQueue = queue;\n queue = [];\n i = -1;\n while (++i < len) {\n oldQueue[i]();\n }\n len = queue.length;\n }\n draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n if (queue.push(task) === 1 && !draining) {\n scheduleDrain();\n }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],2:[function(_dereq_,module,exports){\n'use strict';\nvar immediate = _dereq_(1);\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n if (typeof resolver !== 'function') {\n throw new TypeError('resolver must be a function');\n }\n this.state = PENDING;\n this.queue = [];\n this.outcome = void 0;\n if (resolver !== INTERNAL) {\n safelyResolveThenable(this, resolver);\n }\n}\n\nPromise.prototype[\"catch\"] = function (onRejected) {\n return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n typeof onRejected !== 'function' && this.state === REJECTED) {\n return this;\n }\n var promise = new this.constructor(INTERNAL);\n if (this.state !== PENDING) {\n var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n unwrap(promise, resolver, this.outcome);\n } else {\n this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n }\n\n return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n this.promise = promise;\n if (typeof onFulfilled === 'function') {\n this.onFulfilled = onFulfilled;\n this.callFulfilled = this.otherCallFulfilled;\n }\n if (typeof onRejected === 'function') {\n this.onRejected = onRejected;\n this.callRejected = this.otherCallRejected;\n }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n immediate(function () {\n var returnValue;\n try {\n returnValue = func(value);\n } catch (e) {\n return handlers.reject(promise, e);\n }\n if (returnValue === promise) {\n handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n } else {\n handlers.resolve(promise, returnValue);\n }\n });\n}\n\nhandlers.resolve = function (self, value) {\n var result = tryCatch(getThen, value);\n if (result.status === 'error') {\n return handlers.reject(self, result.value);\n }\n var thenable = result.value;\n\n if (thenable) {\n safelyResolveThenable(self, thenable);\n } else {\n self.state = FULFILLED;\n self.outcome = value;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callFulfilled(value);\n }\n }\n return self;\n};\nhandlers.reject = function (self, error) {\n self.state = REJECTED;\n self.outcome = error;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callRejected(error);\n }\n return self;\n};\n\nfunction getThen(obj) {\n // Make sure we only access the accessor once as required by the spec\n var then = obj && obj.then;\n if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {\n return function appyThen() {\n then.apply(obj, arguments);\n };\n }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n // Either fulfill, reject or reject with error\n var called = false;\n function onError(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.reject(self, value);\n }\n\n function onSuccess(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.resolve(self, value);\n }\n\n function tryToUnwrap() {\n thenable(onSuccess, onError);\n }\n\n var result = tryCatch(tryToUnwrap);\n if (result.status === 'error') {\n onError(result.value);\n }\n}\n\nfunction tryCatch(func, value) {\n var out = {};\n try {\n out.value = func(value);\n out.status = 'success';\n } catch (e) {\n out.status = 'error';\n out.value = e;\n }\n return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n if (value instanceof this) {\n return value;\n }\n return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n var promise = new this(INTERNAL);\n return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var values = new Array(len);\n var resolved = 0;\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n allResolver(iterable[i], i);\n }\n return promise;\n function allResolver(value, i) {\n self.resolve(value).then(resolveFromAll, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n function resolveFromAll(outValue) {\n values[i] = outValue;\n if (++resolved === len && !called) {\n called = true;\n handlers.resolve(promise, values);\n }\n }\n }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n resolver(iterable[i]);\n }\n return promise;\n function resolver(value) {\n self.resolve(value).then(function (response) {\n if (!called) {\n called = true;\n handlers.resolve(promise, response);\n }\n }, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n }\n}\n\n},{\"1\":1}],3:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nif (typeof global.Promise !== 'function') {\n global.Promise = _dereq_(2);\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"2\":2}],4:[function(_dereq_,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getIDB() {\n /* global indexedDB,webkitIndexedDB,mozIndexedDB,OIndexedDB,msIndexedDB */\n try {\n if (typeof indexedDB !== 'undefined') {\n return indexedDB;\n }\n if (typeof webkitIndexedDB !== 'undefined') {\n return webkitIndexedDB;\n }\n if (typeof mozIndexedDB !== 'undefined') {\n return mozIndexedDB;\n }\n if (typeof OIndexedDB !== 'undefined') {\n return OIndexedDB;\n }\n if (typeof msIndexedDB !== 'undefined') {\n return msIndexedDB;\n }\n } catch (e) {\n return;\n }\n}\n\nvar idb = getIDB();\n\nfunction isIndexedDBValid() {\n try {\n // Initialize IndexedDB; fall back to vendor-prefixed versions\n // if needed.\n if (!idb || !idb.open) {\n return false;\n }\n // We mimic PouchDB here;\n //\n // We test for openDatabase because IE Mobile identifies itself\n // as Safari. Oh the lulz...\n var isSafari = typeof openDatabase !== 'undefined' && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform);\n\n var hasFetch = typeof fetch === 'function' && fetch.toString().indexOf('[native code') !== -1;\n\n // Safari <10.1 does not meet our requirements for IDB support\n // (see: https://github.com/pouchdb/pouchdb/issues/5572).\n // Safari 10.1 shipped with fetch, we can use that to detect it.\n // Note: this creates issues with `window.fetch` polyfills and\n // overrides; see:\n // https://github.com/localForage/localForage/issues/856\n return (!isSafari || hasFetch) && typeof indexedDB !== 'undefined' &&\n // some outdated implementations of IDB that appear on Samsung\n // and HTC Android devices <4.4 are missing IDBKeyRange\n // See: https://github.com/mozilla/localForage/issues/128\n // See: https://github.com/mozilla/localForage/issues/272\n typeof IDBKeyRange !== 'undefined';\n } catch (e) {\n return false;\n }\n}\n\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\nfunction createBlob(parts, properties) {\n /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n parts = parts || [];\n properties = properties || {};\n try {\n return new Blob(parts, properties);\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : WebKitBlobBuilder;\n var builder = new Builder();\n for (var i = 0; i < parts.length; i += 1) {\n builder.append(parts[i]);\n }\n return builder.getBlob(properties.type);\n }\n}\n\n// This is CommonJS because lie is an external dependency, so Rollup\n// can just ignore it.\nif (typeof Promise === 'undefined') {\n // In the \"nopromises\" build this will just throw if you don't have\n // a global promise object, but it would throw anyway later.\n _dereq_(3);\n}\nvar Promise$1 = Promise;\n\nfunction executeCallback(promise, callback) {\n if (callback) {\n promise.then(function (result) {\n callback(null, result);\n }, function (error) {\n callback(error);\n });\n }\n}\n\nfunction executeTwoCallbacks(promise, callback, errorCallback) {\n if (typeof callback === 'function') {\n promise.then(callback);\n }\n\n if (typeof errorCallback === 'function') {\n promise[\"catch\"](errorCallback);\n }\n}\n\nfunction normalizeKey(key) {\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n return key;\n}\n\nfunction getCallback() {\n if (arguments.length && typeof arguments[arguments.length - 1] === 'function') {\n return arguments[arguments.length - 1];\n }\n}\n\n// Some code originally from async_storage.js in\n// [Gaia](https://github.com/mozilla-b2g/gaia).\n\nvar DETECT_BLOB_SUPPORT_STORE = 'local-forage-detect-blob-support';\nvar supportsBlobs = void 0;\nvar dbContexts = {};\nvar toString = Object.prototype.toString;\n\n// Transaction Modes\nvar READ_ONLY = 'readonly';\nvar READ_WRITE = 'readwrite';\n\n// Transform a binary string to an array buffer, because otherwise\n// weird stuff happens when you try to work with the binary string directly.\n// It is known.\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nfunction _binStringToArrayBuffer(bin) {\n var length = bin.length;\n var buf = new ArrayBuffer(length);\n var arr = new Uint8Array(buf);\n for (var i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n return buf;\n}\n\n//\n// Blobs are not supported in all versions of IndexedDB, notably\n// Chrome <37 and Android <5. In those versions, storing a blob will throw.\n//\n// Various other blob bugs exist in Chrome v37-42 (inclusive).\n// Detecting them is expensive and confusing to users, and Chrome 37-42\n// is at very low usage worldwide, so we do a hacky userAgent check instead.\n//\n// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120\n// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916\n// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836\n//\n// Code borrowed from PouchDB. See:\n// https://github.com/pouchdb/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js\n//\nfunction _checkBlobSupportWithoutCaching(idb) {\n return new Promise$1(function (resolve) {\n var txn = idb.transaction(DETECT_BLOB_SUPPORT_STORE, READ_WRITE);\n var blob = createBlob(['']);\n txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key');\n\n txn.onabort = function (e) {\n // If the transaction aborts now its due to not being able to\n // write to the database, likely due to the disk being full\n e.preventDefault();\n e.stopPropagation();\n resolve(false);\n };\n\n txn.oncomplete = function () {\n var matchedChrome = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n var matchedEdge = navigator.userAgent.match(/Edge\\//);\n // MS Edge pretends to be Chrome 42:\n // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx\n resolve(matchedEdge || !matchedChrome || parseInt(matchedChrome[1], 10) >= 43);\n };\n })[\"catch\"](function () {\n return false; // error, so assume unsupported\n });\n}\n\nfunction _checkBlobSupport(idb) {\n if (typeof supportsBlobs === 'boolean') {\n return Promise$1.resolve(supportsBlobs);\n }\n return _checkBlobSupportWithoutCaching(idb).then(function (value) {\n supportsBlobs = value;\n return supportsBlobs;\n });\n}\n\nfunction _deferReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Create a deferred object representing the current database operation.\n var deferredOperation = {};\n\n deferredOperation.promise = new Promise$1(function (resolve, reject) {\n deferredOperation.resolve = resolve;\n deferredOperation.reject = reject;\n });\n\n // Enqueue the deferred operation.\n dbContext.deferredOperations.push(deferredOperation);\n\n // Chain its promise to the database readiness.\n if (!dbContext.dbReady) {\n dbContext.dbReady = deferredOperation.promise;\n } else {\n dbContext.dbReady = dbContext.dbReady.then(function () {\n return deferredOperation.promise;\n });\n }\n}\n\nfunction _advanceReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Resolve its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.resolve();\n return deferredOperation.promise;\n }\n}\n\nfunction _rejectReadiness(dbInfo, err) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Reject its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.reject(err);\n return deferredOperation.promise;\n }\n}\n\nfunction _getConnection(dbInfo, upgradeNeeded) {\n return new Promise$1(function (resolve, reject) {\n dbContexts[dbInfo.name] = dbContexts[dbInfo.name] || createDbContext();\n\n if (dbInfo.db) {\n if (upgradeNeeded) {\n _deferReadiness(dbInfo);\n dbInfo.db.close();\n } else {\n return resolve(dbInfo.db);\n }\n }\n\n var dbArgs = [dbInfo.name];\n\n if (upgradeNeeded) {\n dbArgs.push(dbInfo.version);\n }\n\n var openreq = idb.open.apply(idb, dbArgs);\n\n if (upgradeNeeded) {\n openreq.onupgradeneeded = function (e) {\n var db = openreq.result;\n try {\n db.createObjectStore(dbInfo.storeName);\n if (e.oldVersion <= 1) {\n // Added when support for blob shims was added\n db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);\n }\n } catch (ex) {\n if (ex.name === 'ConstraintError') {\n console.warn('The database \"' + dbInfo.name + '\"' + ' has been upgraded from version ' + e.oldVersion + ' to version ' + e.newVersion + ', but the storage \"' + dbInfo.storeName + '\" already exists.');\n } else {\n throw ex;\n }\n }\n };\n }\n\n openreq.onerror = function (e) {\n e.preventDefault();\n reject(openreq.error);\n };\n\n openreq.onsuccess = function () {\n var db = openreq.result;\n db.onversionchange = function (e) {\n // Triggered when the database is modified (e.g. adding an objectStore) or\n // deleted (even when initiated by other sessions in different tabs).\n // Closing the connection here prevents those operations from being blocked.\n // If the database is accessed again later by this instance, the connection\n // will be reopened or the database recreated as needed.\n e.target.close();\n };\n resolve(db);\n _advanceReadiness(dbInfo);\n };\n });\n}\n\nfunction _getOriginalConnection(dbInfo) {\n return _getConnection(dbInfo, false);\n}\n\nfunction _getUpgradedConnection(dbInfo) {\n return _getConnection(dbInfo, true);\n}\n\nfunction _isUpgradeNeeded(dbInfo, defaultVersion) {\n if (!dbInfo.db) {\n return true;\n }\n\n var isNewStore = !dbInfo.db.objectStoreNames.contains(dbInfo.storeName);\n var isDowngrade = dbInfo.version < dbInfo.db.version;\n var isUpgrade = dbInfo.version > dbInfo.db.version;\n\n if (isDowngrade) {\n // If the version is not the default one\n // then warn for impossible downgrade.\n if (dbInfo.version !== defaultVersion) {\n console.warn('The database \"' + dbInfo.name + '\"' + \" can't be downgraded from version \" + dbInfo.db.version + ' to version ' + dbInfo.version + '.');\n }\n // Align the versions to prevent errors.\n dbInfo.version = dbInfo.db.version;\n }\n\n if (isUpgrade || isNewStore) {\n // If the store is new then increment the version (if needed).\n // This will trigger an \"upgradeneeded\" event which is required\n // for creating a store.\n if (isNewStore) {\n var incVersion = dbInfo.db.version + 1;\n if (incVersion > dbInfo.version) {\n dbInfo.version = incVersion;\n }\n }\n\n return true;\n }\n\n return false;\n}\n\n// encode a blob for indexeddb engines that don't support blobs\nfunction _encodeBlob(blob) {\n return new Promise$1(function (resolve, reject) {\n var reader = new FileReader();\n reader.onerror = reject;\n reader.onloadend = function (e) {\n var base64 = btoa(e.target.result || '');\n resolve({\n __local_forage_encoded_blob: true,\n data: base64,\n type: blob.type\n });\n };\n reader.readAsBinaryString(blob);\n });\n}\n\n// decode an encoded blob\nfunction _decodeBlob(encodedBlob) {\n var arrayBuff = _binStringToArrayBuffer(atob(encodedBlob.data));\n return createBlob([arrayBuff], { type: encodedBlob.type });\n}\n\n// is this one of our fancy encoded blobs?\nfunction _isEncodedBlob(value) {\n return value && value.__local_forage_encoded_blob;\n}\n\n// Specialize the default `ready()` function by making it dependent\n// on the current database operations. Thus, the driver will be actually\n// ready when it's been initialized (default) *and* there are no pending\n// operations on the database (initiated by some other instances).\nfunction _fullyReady(callback) {\n var self = this;\n\n var promise = self._initReady().then(function () {\n var dbContext = dbContexts[self._dbInfo.name];\n\n if (dbContext && dbContext.dbReady) {\n return dbContext.dbReady;\n }\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n}\n\n// Try to establish a new db connection to replace the\n// current one which is broken (i.e. experiencing\n// InvalidStateError while creating a transaction).\nfunction _tryReconnect(dbInfo) {\n _deferReadiness(dbInfo);\n\n var dbContext = dbContexts[dbInfo.name];\n var forages = dbContext.forages;\n\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n if (forage._dbInfo.db) {\n forage._dbInfo.db.close();\n forage._dbInfo.db = null;\n }\n }\n dbInfo.db = null;\n\n return _getOriginalConnection(dbInfo).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n // store the latest db reference\n // in case the db was upgraded\n dbInfo.db = dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n })[\"catch\"](function (err) {\n _rejectReadiness(dbInfo, err);\n throw err;\n });\n}\n\n// FF doesn't like Promises (micro-tasks) and IDDB store operations,\n// so we have to do it with callbacks\nfunction createTransaction(dbInfo, mode, callback, retries) {\n if (retries === undefined) {\n retries = 1;\n }\n\n try {\n var tx = dbInfo.db.transaction(dbInfo.storeName, mode);\n callback(null, tx);\n } catch (err) {\n if (retries > 0 && (!dbInfo.db || err.name === 'InvalidStateError' || err.name === 'NotFoundError')) {\n return Promise$1.resolve().then(function () {\n if (!dbInfo.db || err.name === 'NotFoundError' && !dbInfo.db.objectStoreNames.contains(dbInfo.storeName) && dbInfo.version <= dbInfo.db.version) {\n // increase the db version, to create the new ObjectStore\n if (dbInfo.db) {\n dbInfo.version = dbInfo.db.version + 1;\n }\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n }).then(function () {\n return _tryReconnect(dbInfo).then(function () {\n createTransaction(dbInfo, mode, callback, retries - 1);\n });\n })[\"catch\"](callback);\n }\n\n callback(err);\n }\n}\n\nfunction createDbContext() {\n return {\n // Running localForages sharing a database.\n forages: [],\n // Shared database.\n db: null,\n // Database readiness (promise).\n dbReady: null,\n // Deferred operations on the database.\n deferredOperations: []\n };\n}\n\n// Open the IndexedDB database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n // Get the current context of the database;\n var dbContext = dbContexts[dbInfo.name];\n\n // ...or create a new context.\n if (!dbContext) {\n dbContext = createDbContext();\n // Register the new context in the global container.\n dbContexts[dbInfo.name] = dbContext;\n }\n\n // Register itself as a running localForage in the current context.\n dbContext.forages.push(self);\n\n // Replace the default `ready()` function with the specialized one.\n if (!self._initReady) {\n self._initReady = self.ready;\n self.ready = _fullyReady;\n }\n\n // Create an array of initialization states of the related localForages.\n var initPromises = [];\n\n function ignoreErrors() {\n // Don't handle errors here,\n // just makes sure related localForages aren't pending.\n return Promise$1.resolve();\n }\n\n for (var j = 0; j < dbContext.forages.length; j++) {\n var forage = dbContext.forages[j];\n if (forage !== self) {\n // Don't wait for itself...\n initPromises.push(forage._initReady()[\"catch\"](ignoreErrors));\n }\n }\n\n // Take a snapshot of the related localForages.\n var forages = dbContext.forages.slice(0);\n\n // Initialize the connection process only when\n // all the related localForages aren't pending.\n return Promise$1.all(initPromises).then(function () {\n dbInfo.db = dbContext.db;\n // Get the connection or open a new one without upgrade.\n return _getOriginalConnection(dbInfo);\n }).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo, self._defaultConfig.version)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n dbInfo.db = dbContext.db = db;\n self._dbInfo = dbInfo;\n // Share the final connection amongst related localForages.\n for (var k = 0; k < forages.length; k++) {\n var forage = forages[k];\n if (forage !== self) {\n // Self is already up-to-date.\n forage._dbInfo.db = dbInfo.db;\n forage._dbInfo.version = dbInfo.version;\n }\n }\n });\n}\n\nfunction getItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.get(key);\n\n req.onsuccess = function () {\n var value = req.result;\n if (value === undefined) {\n value = null;\n }\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n resolve(value);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items stored in database.\nfunction iterate(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openCursor();\n var iterationNumber = 1;\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (cursor) {\n var value = cursor.value;\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n var result = iterator(value, cursor.key, iterationNumber++);\n\n // when the iterator callback returns any\n // (non-`undefined`) value, then we stop\n // the iteration immediately\n if (result !== void 0) {\n resolve(result);\n } else {\n cursor[\"continue\"]();\n }\n } else {\n resolve();\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n\nfunction setItem(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n var dbInfo;\n self.ready().then(function () {\n dbInfo = self._dbInfo;\n if (toString.call(value) === '[object Blob]') {\n return _checkBlobSupport(dbInfo.db).then(function (blobSupport) {\n if (blobSupport) {\n return value;\n }\n return _encodeBlob(value);\n });\n }\n return value;\n }).then(function (value) {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n\n // The reason we don't _save_ null is because IE 10 does\n // not support saving the `null` type in IndexedDB. How\n // ironic, given the bug below!\n // See: https://github.com/mozilla/localForage/issues/161\n if (value === null) {\n value = undefined;\n }\n\n var req = store.put(value, key);\n\n transaction.oncomplete = function () {\n // Cast to undefined so the value passed to\n // callback/promise is the same as what one would get out\n // of `getItem()` later. This leads to some weirdness\n // (setItem('foo', undefined) will return `null`), but\n // it's not my fault localStorage is our baseline and that\n // it's weird.\n if (value === undefined) {\n value = null;\n }\n\n resolve(value);\n };\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction removeItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n // We use a Grunt task to make this safe for IE and some\n // versions of Android (including those used by Cordova).\n // Normally IE won't like `.delete()` and will insist on\n // using `['delete']()`, but we have a build step that\n // fixes this for us now.\n var req = store[\"delete\"](key);\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onerror = function () {\n reject(req.error);\n };\n\n // The request will be also be aborted if we've exceeded our storage\n // space.\n transaction.onabort = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction clear(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.clear();\n\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction length(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.count();\n\n req.onsuccess = function () {\n resolve(req.result);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction key(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n if (n < 0) {\n resolve(null);\n\n return;\n }\n\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var advanced = false;\n var req = store.openKeyCursor();\n\n req.onsuccess = function () {\n var cursor = req.result;\n if (!cursor) {\n // this means there weren't enough keys\n resolve(null);\n\n return;\n }\n\n if (n === 0) {\n // We have the first key, return it if that's what they\n // wanted.\n resolve(cursor.key);\n } else {\n if (!advanced) {\n // Otherwise, ask the cursor to skip ahead n\n // records.\n advanced = true;\n cursor.advance(n);\n } else {\n // When we get here, we've got the nth key.\n resolve(cursor.key);\n }\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openKeyCursor();\n var keys = [];\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (!cursor) {\n resolve(keys);\n return;\n }\n\n keys.push(cursor.key);\n cursor[\"continue\"]();\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n var isCurrentDb = options.name === currentConfig.name && self._dbInfo.db;\n\n var dbPromise = isCurrentDb ? Promise$1.resolve(self._dbInfo.db) : _getOriginalConnection(options).then(function (db) {\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n return db;\n });\n\n if (!options.storeName) {\n promise = dbPromise.then(function (db) {\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n }\n\n var dropDBPromise = new Promise$1(function (resolve, reject) {\n var req = idb.deleteDatabase(options.name);\n\n req.onerror = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n reject(req.error);\n };\n\n req.onblocked = function () {\n // Closing all open connections in onversionchange handler should prevent this situation, but if\n // we do get here, it just means the request remains pending - eventually it will succeed or error\n console.warn('dropInstance blocked for database \"' + options.name + '\" until all open connections are closed');\n };\n\n req.onsuccess = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n resolve(db);\n };\n });\n\n return dropDBPromise.then(function (db) {\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n var _forage = forages[i];\n _advanceReadiness(_forage._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n } else {\n promise = dbPromise.then(function (db) {\n if (!db.objectStoreNames.contains(options.storeName)) {\n return;\n }\n\n var newVersion = db.version + 1;\n\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n forage._dbInfo.version = newVersion;\n }\n\n var dropObjectPromise = new Promise$1(function (resolve, reject) {\n var req = idb.open(options.name, newVersion);\n\n req.onerror = function (err) {\n var db = req.result;\n db.close();\n reject(err);\n };\n\n req.onupgradeneeded = function () {\n var db = req.result;\n db.deleteObjectStore(options.storeName);\n };\n\n req.onsuccess = function () {\n var db = req.result;\n db.close();\n resolve(db);\n };\n });\n\n return dropObjectPromise.then(function (db) {\n dbContext.db = db;\n for (var j = 0; j < forages.length; j++) {\n var _forage2 = forages[j];\n _forage2._dbInfo.db = db;\n _advanceReadiness(_forage2._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n }\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar asyncStorage = {\n _driver: 'asyncStorage',\n _initStorage: _initStorage,\n _support: isIndexedDBValid(),\n iterate: iterate,\n getItem: getItem,\n setItem: setItem,\n removeItem: removeItem,\n clear: clear,\n length: length,\n key: key,\n keys: keys,\n dropInstance: dropInstance\n};\n\nfunction isWebSQLValid() {\n return typeof openDatabase === 'function';\n}\n\n// Sadly, the best way to save binary data in WebSQL/localStorage is serializing\n// it to Base64, so this is how we store it to prevent very strange errors with less\n// verbose ways of binary <-> string data storage.\nvar BASE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nvar BLOB_TYPE_PREFIX = '~~local_forage_type~';\nvar BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/;\n\nvar SERIALIZED_MARKER = '__lfsc__:';\nvar SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length;\n\n// OMG the serializations!\nvar TYPE_ARRAYBUFFER = 'arbf';\nvar TYPE_BLOB = 'blob';\nvar TYPE_INT8ARRAY = 'si08';\nvar TYPE_UINT8ARRAY = 'ui08';\nvar TYPE_UINT8CLAMPEDARRAY = 'uic8';\nvar TYPE_INT16ARRAY = 'si16';\nvar TYPE_INT32ARRAY = 'si32';\nvar TYPE_UINT16ARRAY = 'ur16';\nvar TYPE_UINT32ARRAY = 'ui32';\nvar TYPE_FLOAT32ARRAY = 'fl32';\nvar TYPE_FLOAT64ARRAY = 'fl64';\nvar TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + TYPE_ARRAYBUFFER.length;\n\nvar toString$1 = Object.prototype.toString;\n\nfunction stringToBuffer(serializedString) {\n // Fill the string into a ArrayBuffer.\n var bufferLength = serializedString.length * 0.75;\n var len = serializedString.length;\n var i;\n var p = 0;\n var encoded1, encoded2, encoded3, encoded4;\n\n if (serializedString[serializedString.length - 1] === '=') {\n bufferLength--;\n if (serializedString[serializedString.length - 2] === '=') {\n bufferLength--;\n }\n }\n\n var buffer = new ArrayBuffer(bufferLength);\n var bytes = new Uint8Array(buffer);\n\n for (i = 0; i < len; i += 4) {\n encoded1 = BASE_CHARS.indexOf(serializedString[i]);\n encoded2 = BASE_CHARS.indexOf(serializedString[i + 1]);\n encoded3 = BASE_CHARS.indexOf(serializedString[i + 2]);\n encoded4 = BASE_CHARS.indexOf(serializedString[i + 3]);\n\n /*jslint bitwise: true */\n bytes[p++] = encoded1 << 2 | encoded2 >> 4;\n bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;\n bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;\n }\n return buffer;\n}\n\n// Converts a buffer to a string to store, serialized, in the backend\n// storage library.\nfunction bufferToString(buffer) {\n // base64-arraybuffer\n var bytes = new Uint8Array(buffer);\n var base64String = '';\n var i;\n\n for (i = 0; i < bytes.length; i += 3) {\n /*jslint bitwise: true */\n base64String += BASE_CHARS[bytes[i] >> 2];\n base64String += BASE_CHARS[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4];\n base64String += BASE_CHARS[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6];\n base64String += BASE_CHARS[bytes[i + 2] & 63];\n }\n\n if (bytes.length % 3 === 2) {\n base64String = base64String.substring(0, base64String.length - 1) + '=';\n } else if (bytes.length % 3 === 1) {\n base64String = base64String.substring(0, base64String.length - 2) + '==';\n }\n\n return base64String;\n}\n\n// Serialize a value, afterwards executing a callback (which usually\n// instructs the `setItem()` callback/promise to be executed). This is how\n// we store binary data with localStorage.\nfunction serialize(value, callback) {\n var valueType = '';\n if (value) {\n valueType = toString$1.call(value);\n }\n\n // Cannot use `value instanceof ArrayBuffer` or such here, as these\n // checks fail when running the tests using casper.js...\n //\n // TODO: See why those tests fail and use a better solution.\n if (value && (valueType === '[object ArrayBuffer]' || value.buffer && toString$1.call(value.buffer) === '[object ArrayBuffer]')) {\n // Convert binary arrays to a string and prefix the string with\n // a special marker.\n var buffer;\n var marker = SERIALIZED_MARKER;\n\n if (value instanceof ArrayBuffer) {\n buffer = value;\n marker += TYPE_ARRAYBUFFER;\n } else {\n buffer = value.buffer;\n\n if (valueType === '[object Int8Array]') {\n marker += TYPE_INT8ARRAY;\n } else if (valueType === '[object Uint8Array]') {\n marker += TYPE_UINT8ARRAY;\n } else if (valueType === '[object Uint8ClampedArray]') {\n marker += TYPE_UINT8CLAMPEDARRAY;\n } else if (valueType === '[object Int16Array]') {\n marker += TYPE_INT16ARRAY;\n } else if (valueType === '[object Uint16Array]') {\n marker += TYPE_UINT16ARRAY;\n } else if (valueType === '[object Int32Array]') {\n marker += TYPE_INT32ARRAY;\n } else if (valueType === '[object Uint32Array]') {\n marker += TYPE_UINT32ARRAY;\n } else if (valueType === '[object Float32Array]') {\n marker += TYPE_FLOAT32ARRAY;\n } else if (valueType === '[object Float64Array]') {\n marker += TYPE_FLOAT64ARRAY;\n } else {\n callback(new Error('Failed to get type for BinaryArray'));\n }\n }\n\n callback(marker + bufferToString(buffer));\n } else if (valueType === '[object Blob]') {\n // Conver the blob to a binaryArray and then to a string.\n var fileReader = new FileReader();\n\n fileReader.onload = function () {\n // Backwards-compatible prefix for the blob type.\n var str = BLOB_TYPE_PREFIX + value.type + '~' + bufferToString(this.result);\n\n callback(SERIALIZED_MARKER + TYPE_BLOB + str);\n };\n\n fileReader.readAsArrayBuffer(value);\n } else {\n try {\n callback(JSON.stringify(value));\n } catch (e) {\n console.error(\"Couldn't convert value into a JSON string: \", value);\n\n callback(null, e);\n }\n }\n}\n\n// Deserialize data we've inserted into a value column/field. We place\n// special markers into our strings to mark them as encoded; this isn't\n// as nice as a meta field, but it's the only sane thing we can do whilst\n// keeping localStorage support intact.\n//\n// Oftentimes this will just deserialize JSON content, but if we have a\n// special marker (SERIALIZED_MARKER, defined above), we will extract\n// some kind of arraybuffer/binary data/typed array out of the string.\nfunction deserialize(value) {\n // If we haven't marked this string as being specially serialized (i.e.\n // something other than serialized JSON), we can just return it and be\n // done with it.\n if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER) {\n return JSON.parse(value);\n }\n\n // The following code deals with deserializing some kind of Blob or\n // TypedArray. First we separate out the type of data we're dealing\n // with from the data itself.\n var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH);\n var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH);\n\n var blobType;\n // Backwards-compatible blob type serialization strategy.\n // DBs created with older versions of localForage will simply not have the blob type.\n if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {\n var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX);\n blobType = matcher[1];\n serializedString = serializedString.substring(matcher[0].length);\n }\n var buffer = stringToBuffer(serializedString);\n\n // Return the right type based on the code/type set during\n // serialization.\n switch (type) {\n case TYPE_ARRAYBUFFER:\n return buffer;\n case TYPE_BLOB:\n return createBlob([buffer], { type: blobType });\n case TYPE_INT8ARRAY:\n return new Int8Array(buffer);\n case TYPE_UINT8ARRAY:\n return new Uint8Array(buffer);\n case TYPE_UINT8CLAMPEDARRAY:\n return new Uint8ClampedArray(buffer);\n case TYPE_INT16ARRAY:\n return new Int16Array(buffer);\n case TYPE_UINT16ARRAY:\n return new Uint16Array(buffer);\n case TYPE_INT32ARRAY:\n return new Int32Array(buffer);\n case TYPE_UINT32ARRAY:\n return new Uint32Array(buffer);\n case TYPE_FLOAT32ARRAY:\n return new Float32Array(buffer);\n case TYPE_FLOAT64ARRAY:\n return new Float64Array(buffer);\n default:\n throw new Error('Unkown type: ' + type);\n }\n}\n\nvar localforageSerializer = {\n serialize: serialize,\n deserialize: deserialize,\n stringToBuffer: stringToBuffer,\n bufferToString: bufferToString\n};\n\n/*\n * Includes code from:\n *\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n\nfunction createDbTable(t, dbInfo, callback, errorCallback) {\n t.executeSql('CREATE TABLE IF NOT EXISTS ' + dbInfo.storeName + ' ' + '(id INTEGER PRIMARY KEY, key unique, value)', [], callback, errorCallback);\n}\n\n// Open the WebSQL database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage$1(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = typeof options[i] !== 'string' ? options[i].toString() : options[i];\n }\n }\n\n var dbInfoPromise = new Promise$1(function (resolve, reject) {\n // Open the database; the openDatabase API will automatically\n // create it for us if it doesn't exist.\n try {\n dbInfo.db = openDatabase(dbInfo.name, String(dbInfo.version), dbInfo.description, dbInfo.size);\n } catch (e) {\n return reject(e);\n }\n\n // Create our key/value table if it doesn't exist.\n dbInfo.db.transaction(function (t) {\n createDbTable(t, dbInfo, function () {\n self._dbInfo = dbInfo;\n resolve();\n }, function (t, error) {\n reject(error);\n });\n }, reject);\n });\n\n dbInfo.serializer = localforageSerializer;\n return dbInfoPromise;\n}\n\nfunction tryExecuteSql(t, dbInfo, sqlStatement, args, callback, errorCallback) {\n t.executeSql(sqlStatement, args, callback, function (t, error) {\n if (error.code === error.SYNTAX_ERR) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name = ?\", [dbInfo.storeName], function (t, results) {\n if (!results.rows.length) {\n // if the table is missing (was deleted)\n // re-create it table and retry\n createDbTable(t, dbInfo, function () {\n t.executeSql(sqlStatement, args, callback, errorCallback);\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n}\n\nfunction getItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName + ' WHERE key = ? LIMIT 1', [key], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).value : null;\n\n // Check to see if this is serialized content we need to\n // unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction iterate$1(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName, [], function (t, results) {\n var rows = results.rows;\n var length = rows.length;\n\n for (var i = 0; i < length; i++) {\n var item = rows.item(i);\n var result = item.value;\n\n // Check to see if this is serialized content\n // we need to unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n result = iterator(result, item.key, i + 1);\n\n // void(0) prevents problems with redefinition\n // of `undefined`.\n if (result !== void 0) {\n resolve(result);\n return;\n }\n }\n\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction _setItem(key, value, callback, retriesLeft) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n // The localStorage API doesn't return undefined values in an\n // \"expected\" way, so undefined is always cast to null in all\n // drivers. See: https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'INSERT OR REPLACE INTO ' + dbInfo.storeName + ' ' + '(key, value) VALUES (?, ?)', [key, value], function () {\n resolve(originalValue);\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n // The transaction failed; check\n // to see if it's a quota error.\n if (sqlError.code === sqlError.QUOTA_ERR) {\n // We reject the callback outright for now, but\n // it's worth trying to re-run the transaction.\n // Even if the user accepts the prompt to use\n // more storage on Safari, this error will\n // be called.\n //\n // Try to re-run the transaction.\n if (retriesLeft > 0) {\n resolve(_setItem.apply(self, [key, originalValue, callback, retriesLeft - 1]));\n return;\n }\n reject(sqlError);\n }\n });\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction setItem$1(key, value, callback) {\n return _setItem.apply(this, [key, value, callback, 1]);\n}\n\nfunction removeItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName + ' WHERE key = ?', [key], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Deletes every item in the table.\n// TODO: Find out if this resets the AUTO_INCREMENT number.\nfunction clear$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Does a simple `COUNT(key)` to get the number of items stored in\n// localForage.\nfunction length$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n // Ahhh, SQL makes this one soooooo easy.\n tryExecuteSql(t, dbInfo, 'SELECT COUNT(key) as c FROM ' + dbInfo.storeName, [], function (t, results) {\n var result = results.rows.item(0).c;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Return the key located at key index X; essentially gets the key from a\n// `WHERE id = ?`. This is the most efficient way I can think to implement\n// this rarely-used (in my experience) part of the API, but it can seem\n// inconsistent, because we do `INSERT OR REPLACE INTO` on `setItem()`, so\n// the ID of each key will change every time it's updated. Perhaps a stored\n// procedure for the `setItem()` SQL would solve this problem?\n// TODO: Don't change ID on `setItem()`.\nfunction key$1(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName + ' WHERE id = ? LIMIT 1', [n + 1], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).key : null;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName, [], function (t, results) {\n var keys = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n keys.push(results.rows.item(i).key);\n }\n\n resolve(keys);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// https://www.w3.org/TR/webdatabase/#databases\n// > There is no way to enumerate or delete the databases available for an origin from this API.\nfunction getAllStoreNames(db) {\n return new Promise$1(function (resolve, reject) {\n db.transaction(function (t) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'\", [], function (t, results) {\n var storeNames = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n storeNames.push(results.rows.item(i).name);\n }\n\n resolve({\n db: db,\n storeNames: storeNames\n });\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n}\n\nfunction dropInstance$1(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n var db;\n if (options.name === currentConfig.name) {\n // use the db reference of the current instance\n db = self._dbInfo.db;\n } else {\n db = openDatabase(options.name, '', '', 0);\n }\n\n if (!options.storeName) {\n // drop all database tables\n resolve(getAllStoreNames(db));\n } else {\n resolve({\n db: db,\n storeNames: [options.storeName]\n });\n }\n }).then(function (operationInfo) {\n return new Promise$1(function (resolve, reject) {\n operationInfo.db.transaction(function (t) {\n function dropTable(storeName) {\n return new Promise$1(function (resolve, reject) {\n t.executeSql('DROP TABLE IF EXISTS ' + storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n }\n\n var operations = [];\n for (var i = 0, len = operationInfo.storeNames.length; i < len; i++) {\n operations.push(dropTable(operationInfo.storeNames[i]));\n }\n\n Promise$1.all(operations).then(function () {\n resolve();\n })[\"catch\"](function (e) {\n reject(e);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar webSQLStorage = {\n _driver: 'webSQLStorage',\n _initStorage: _initStorage$1,\n _support: isWebSQLValid(),\n iterate: iterate$1,\n getItem: getItem$1,\n setItem: setItem$1,\n removeItem: removeItem$1,\n clear: clear$1,\n length: length$1,\n key: key$1,\n keys: keys$1,\n dropInstance: dropInstance$1\n};\n\nfunction isLocalStorageValid() {\n try {\n return typeof localStorage !== 'undefined' && 'setItem' in localStorage &&\n // in IE8 typeof localStorage.setItem === 'object'\n !!localStorage.setItem;\n } catch (e) {\n return false;\n }\n}\n\nfunction _getKeyPrefix(options, defaultConfig) {\n var keyPrefix = options.name + '/';\n\n if (options.storeName !== defaultConfig.storeName) {\n keyPrefix += options.storeName + '/';\n }\n return keyPrefix;\n}\n\n// Check if localStorage throws when saving an item\nfunction checkIfLocalStorageThrows() {\n var localStorageTestKey = '_localforage_support_test';\n\n try {\n localStorage.setItem(localStorageTestKey, true);\n localStorage.removeItem(localStorageTestKey);\n\n return false;\n } catch (e) {\n return true;\n }\n}\n\n// Check if localStorage is usable and allows to save an item\n// This method checks if localStorage is usable in Safari Private Browsing\n// mode, or in any other case where the available quota for localStorage\n// is 0 and there wasn't any saved items yet.\nfunction _isLocalStorageUsable() {\n return !checkIfLocalStorageThrows() || localStorage.length > 0;\n}\n\n// Config the localStorage backend, using options set in the config.\nfunction _initStorage$2(options) {\n var self = this;\n var dbInfo = {};\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n dbInfo.keyPrefix = _getKeyPrefix(options, self._defaultConfig);\n\n if (!_isLocalStorageUsable()) {\n return Promise$1.reject();\n }\n\n self._dbInfo = dbInfo;\n dbInfo.serializer = localforageSerializer;\n\n return Promise$1.resolve();\n}\n\n// Remove all keys from the datastore, effectively destroying all data in\n// the app's key/value store!\nfunction clear$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var keyPrefix = self._dbInfo.keyPrefix;\n\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Retrieve an item from the store. Unlike the original async_storage\n// library in Gaia, we don't modify return values at all. If a key's value\n// is `undefined`, we pass that value to the callback function.\nfunction getItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result = localStorage.getItem(dbInfo.keyPrefix + key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the key\n // is likely undefined and we'll pass it straight to the\n // callback.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items in the store.\nfunction iterate$2(iterator, callback) {\n var self = this;\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var keyPrefix = dbInfo.keyPrefix;\n var keyPrefixLength = keyPrefix.length;\n var length = localStorage.length;\n\n // We use a dedicated iterator instead of the `i` variable below\n // so other keys we fetch in localStorage aren't counted in\n // the `iterationNumber` argument passed to the `iterate()`\n // callback.\n //\n // See: github.com/mozilla/localForage/pull/435#discussion_r38061530\n var iterationNumber = 1;\n\n for (var i = 0; i < length; i++) {\n var key = localStorage.key(i);\n if (key.indexOf(keyPrefix) !== 0) {\n continue;\n }\n var value = localStorage.getItem(key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the\n // key is likely undefined and we'll pass it straight\n // to the iterator.\n if (value) {\n value = dbInfo.serializer.deserialize(value);\n }\n\n value = iterator(value, key.substring(keyPrefixLength), iterationNumber++);\n\n if (value !== void 0) {\n return value;\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Same as localStorage's key() method, except takes a callback.\nfunction key$2(n, callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result;\n try {\n result = localStorage.key(n);\n } catch (error) {\n result = null;\n }\n\n // Remove the prefix from the key, if a key is found.\n if (result) {\n result = result.substring(dbInfo.keyPrefix.length);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var length = localStorage.length;\n var keys = [];\n\n for (var i = 0; i < length; i++) {\n var itemKey = localStorage.key(i);\n if (itemKey.indexOf(dbInfo.keyPrefix) === 0) {\n keys.push(itemKey.substring(dbInfo.keyPrefix.length));\n }\n }\n\n return keys;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Supply the number of keys in the datastore to the callback function.\nfunction length$2(callback) {\n var self = this;\n var promise = self.keys().then(function (keys) {\n return keys.length;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Remove an item from the store, nice and simple.\nfunction removeItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n localStorage.removeItem(dbInfo.keyPrefix + key);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Set a key's value and run an optional callback once the value is set.\n// Unlike Gaia's implementation, the callback function is passed the value,\n// in case you want to operate on that value only after you're sure it\n// saved, or something like that.\nfunction setItem$2(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n // Convert undefined values to null.\n // https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n return new Promise$1(function (resolve, reject) {\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n try {\n localStorage.setItem(dbInfo.keyPrefix + key, value);\n resolve(originalValue);\n } catch (e) {\n // localStorage capacity exceeded.\n // TODO: Make this a specific error/event.\n if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {\n reject(e);\n }\n reject(e);\n }\n }\n });\n });\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance$2(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n var currentConfig = this.config();\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n if (!options.storeName) {\n resolve(options.name + '/');\n } else {\n resolve(_getKeyPrefix(options, self._defaultConfig));\n }\n }).then(function (keyPrefix) {\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar localStorageWrapper = {\n _driver: 'localStorageWrapper',\n _initStorage: _initStorage$2,\n _support: isLocalStorageValid(),\n iterate: iterate$2,\n getItem: getItem$2,\n setItem: setItem$2,\n removeItem: removeItem$2,\n clear: clear$2,\n length: length$2,\n key: key$2,\n keys: keys$2,\n dropInstance: dropInstance$2\n};\n\nvar sameValue = function sameValue(x, y) {\n return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y);\n};\n\nvar includes = function includes(array, searchElement) {\n var len = array.length;\n var i = 0;\n while (i < len) {\n if (sameValue(array[i], searchElement)) {\n return true;\n }\n i++;\n }\n\n return false;\n};\n\nvar isArray = Array.isArray || function (arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n};\n\n// Drivers are stored here when `defineDriver()` is called.\n// They are shared across all instances of localForage.\nvar DefinedDrivers = {};\n\nvar DriverSupport = {};\n\nvar DefaultDrivers = {\n INDEXEDDB: asyncStorage,\n WEBSQL: webSQLStorage,\n LOCALSTORAGE: localStorageWrapper\n};\n\nvar DefaultDriverOrder = [DefaultDrivers.INDEXEDDB._driver, DefaultDrivers.WEBSQL._driver, DefaultDrivers.LOCALSTORAGE._driver];\n\nvar OptionalDriverMethods = ['dropInstance'];\n\nvar LibraryMethods = ['clear', 'getItem', 'iterate', 'key', 'keys', 'length', 'removeItem', 'setItem'].concat(OptionalDriverMethods);\n\nvar DefaultConfig = {\n description: '',\n driver: DefaultDriverOrder.slice(),\n name: 'localforage',\n // Default DB size is _JUST UNDER_ 5MB, as it's the highest size\n // we can use without a prompt.\n size: 4980736,\n storeName: 'keyvaluepairs',\n version: 1.0\n};\n\nfunction callWhenReady(localForageInstance, libraryMethod) {\n localForageInstance[libraryMethod] = function () {\n var _args = arguments;\n return localForageInstance.ready().then(function () {\n return localForageInstance[libraryMethod].apply(localForageInstance, _args);\n });\n };\n}\n\nfunction extend() {\n for (var i = 1; i < arguments.length; i++) {\n var arg = arguments[i];\n\n if (arg) {\n for (var _key in arg) {\n if (arg.hasOwnProperty(_key)) {\n if (isArray(arg[_key])) {\n arguments[0][_key] = arg[_key].slice();\n } else {\n arguments[0][_key] = arg[_key];\n }\n }\n }\n }\n }\n\n return arguments[0];\n}\n\nvar LocalForage = function () {\n function LocalForage(options) {\n _classCallCheck(this, LocalForage);\n\n for (var driverTypeKey in DefaultDrivers) {\n if (DefaultDrivers.hasOwnProperty(driverTypeKey)) {\n var driver = DefaultDrivers[driverTypeKey];\n var driverName = driver._driver;\n this[driverTypeKey] = driverName;\n\n if (!DefinedDrivers[driverName]) {\n // we don't need to wait for the promise,\n // since the default drivers can be defined\n // in a blocking manner\n this.defineDriver(driver);\n }\n }\n }\n\n this._defaultConfig = extend({}, DefaultConfig);\n this._config = extend({}, this._defaultConfig, options);\n this._driverSet = null;\n this._initDriver = null;\n this._ready = false;\n this._dbInfo = null;\n\n this._wrapLibraryMethodsWithReady();\n this.setDriver(this._config.driver)[\"catch\"](function () {});\n }\n\n // Set any config values for localForage; can be called anytime before\n // the first API call (e.g. `getItem`, `setItem`).\n // We loop through options so we don't overwrite existing config\n // values.\n\n\n LocalForage.prototype.config = function config(options) {\n // If the options argument is an object, we use it to set values.\n // Otherwise, we return either a specified config value or all\n // config values.\n if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') {\n // If localforage is ready and fully initialized, we can't set\n // any new configuration values. Instead, we return an error.\n if (this._ready) {\n return new Error(\"Can't call config() after localforage \" + 'has been used.');\n }\n\n for (var i in options) {\n if (i === 'storeName') {\n options[i] = options[i].replace(/\\W/g, '_');\n }\n\n if (i === 'version' && typeof options[i] !== 'number') {\n return new Error('Database version must be a number.');\n }\n\n this._config[i] = options[i];\n }\n\n // after all config options are set and\n // the driver option is used, try setting it\n if ('driver' in options && options.driver) {\n return this.setDriver(this._config.driver);\n }\n\n return true;\n } else if (typeof options === 'string') {\n return this._config[options];\n } else {\n return this._config;\n }\n };\n\n // Used to define a custom driver, shared across all instances of\n // localForage.\n\n\n LocalForage.prototype.defineDriver = function defineDriver(driverObject, callback, errorCallback) {\n var promise = new Promise$1(function (resolve, reject) {\n try {\n var driverName = driverObject._driver;\n var complianceError = new Error('Custom driver not compliant; see ' + 'https://mozilla.github.io/localForage/#definedriver');\n\n // A driver name should be defined and not overlap with the\n // library-defined, default drivers.\n if (!driverObject._driver) {\n reject(complianceError);\n return;\n }\n\n var driverMethods = LibraryMethods.concat('_initStorage');\n for (var i = 0, len = driverMethods.length; i < len; i++) {\n var driverMethodName = driverMethods[i];\n\n // when the property is there,\n // it should be a method even when optional\n var isRequired = !includes(OptionalDriverMethods, driverMethodName);\n if ((isRequired || driverObject[driverMethodName]) && typeof driverObject[driverMethodName] !== 'function') {\n reject(complianceError);\n return;\n }\n }\n\n var configureMissingMethods = function configureMissingMethods() {\n var methodNotImplementedFactory = function methodNotImplementedFactory(methodName) {\n return function () {\n var error = new Error('Method ' + methodName + ' is not implemented by the current driver');\n var promise = Promise$1.reject(error);\n executeCallback(promise, arguments[arguments.length - 1]);\n return promise;\n };\n };\n\n for (var _i = 0, _len = OptionalDriverMethods.length; _i < _len; _i++) {\n var optionalDriverMethod = OptionalDriverMethods[_i];\n if (!driverObject[optionalDriverMethod]) {\n driverObject[optionalDriverMethod] = methodNotImplementedFactory(optionalDriverMethod);\n }\n }\n };\n\n configureMissingMethods();\n\n var setDriverSupport = function setDriverSupport(support) {\n if (DefinedDrivers[driverName]) {\n console.info('Redefining LocalForage driver: ' + driverName);\n }\n DefinedDrivers[driverName] = driverObject;\n DriverSupport[driverName] = support;\n // don't use a then, so that we can define\n // drivers that have simple _support methods\n // in a blocking manner\n resolve();\n };\n\n if ('_support' in driverObject) {\n if (driverObject._support && typeof driverObject._support === 'function') {\n driverObject._support().then(setDriverSupport, reject);\n } else {\n setDriverSupport(!!driverObject._support);\n }\n } else {\n setDriverSupport(true);\n }\n } catch (e) {\n reject(e);\n }\n });\n\n executeTwoCallbacks(promise, callback, errorCallback);\n return promise;\n };\n\n LocalForage.prototype.driver = function driver() {\n return this._driver || null;\n };\n\n LocalForage.prototype.getDriver = function getDriver(driverName, callback, errorCallback) {\n var getDriverPromise = DefinedDrivers[driverName] ? Promise$1.resolve(DefinedDrivers[driverName]) : Promise$1.reject(new Error('Driver not found.'));\n\n executeTwoCallbacks(getDriverPromise, callback, errorCallback);\n return getDriverPromise;\n };\n\n LocalForage.prototype.getSerializer = function getSerializer(callback) {\n var serializerPromise = Promise$1.resolve(localforageSerializer);\n executeTwoCallbacks(serializerPromise, callback);\n return serializerPromise;\n };\n\n LocalForage.prototype.ready = function ready(callback) {\n var self = this;\n\n var promise = self._driverSet.then(function () {\n if (self._ready === null) {\n self._ready = self._initDriver();\n }\n\n return self._ready;\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n };\n\n LocalForage.prototype.setDriver = function setDriver(drivers, callback, errorCallback) {\n var self = this;\n\n if (!isArray(drivers)) {\n drivers = [drivers];\n }\n\n var supportedDrivers = this._getSupportedDrivers(drivers);\n\n function setDriverToConfig() {\n self._config.driver = self.driver();\n }\n\n function extendSelfWithDriver(driver) {\n self._extend(driver);\n setDriverToConfig();\n\n self._ready = self._initStorage(self._config);\n return self._ready;\n }\n\n function initDriver(supportedDrivers) {\n return function () {\n var currentDriverIndex = 0;\n\n function driverPromiseLoop() {\n while (currentDriverIndex < supportedDrivers.length) {\n var driverName = supportedDrivers[currentDriverIndex];\n currentDriverIndex++;\n\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(extendSelfWithDriver)[\"catch\"](driverPromiseLoop);\n }\n\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n }\n\n return driverPromiseLoop();\n };\n }\n\n // There might be a driver initialization in progress\n // so wait for it to finish in order to avoid a possible\n // race condition to set _dbInfo\n var oldDriverSetDone = this._driverSet !== null ? this._driverSet[\"catch\"](function () {\n return Promise$1.resolve();\n }) : Promise$1.resolve();\n\n this._driverSet = oldDriverSetDone.then(function () {\n var driverName = supportedDrivers[0];\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(function (driver) {\n self._driver = driver._driver;\n setDriverToConfig();\n self._wrapLibraryMethodsWithReady();\n self._initDriver = initDriver(supportedDrivers);\n });\n })[\"catch\"](function () {\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n });\n\n executeTwoCallbacks(this._driverSet, callback, errorCallback);\n return this._driverSet;\n };\n\n LocalForage.prototype.supports = function supports(driverName) {\n return !!DriverSupport[driverName];\n };\n\n LocalForage.prototype._extend = function _extend(libraryMethodsAndProperties) {\n extend(this, libraryMethodsAndProperties);\n };\n\n LocalForage.prototype._getSupportedDrivers = function _getSupportedDrivers(drivers) {\n var supportedDrivers = [];\n for (var i = 0, len = drivers.length; i < len; i++) {\n var driverName = drivers[i];\n if (this.supports(driverName)) {\n supportedDrivers.push(driverName);\n }\n }\n return supportedDrivers;\n };\n\n LocalForage.prototype._wrapLibraryMethodsWithReady = function _wrapLibraryMethodsWithReady() {\n // Add a stub for each driver API method that delays the call to the\n // corresponding driver method until localForage is ready. These stubs\n // will be replaced by the driver methods as soon as the driver is\n // loaded, so there is no performance impact.\n for (var i = 0, len = LibraryMethods.length; i < len; i++) {\n callWhenReady(this, LibraryMethods[i]);\n }\n };\n\n LocalForage.prototype.createInstance = function createInstance(options) {\n return new LocalForage(options);\n };\n\n return LocalForage;\n}();\n\n// The actual localForage object that we expose as a module or via a\n// global. It's extended by pulling in one of our other libraries.\n\n\nvar localforage_js = new LocalForage();\n\nmodule.exports = localforage_js;\n\n},{\"3\":3}]},{},[4])(4)\n});\n","'use strict';\n\n\nconst zlib_inflate = require('./zlib/inflate');\nconst utils = require('./utils/common');\nconst strings = require('./utils/strings');\nconst msg = require('./zlib/messages');\nconst ZStream = require('./zlib/zstream');\nconst GZheader = require('./zlib/gzheader');\n\nconst toString = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_NO_FLUSH, Z_FINISH,\n Z_OK, Z_STREAM_END, Z_NEED_DICT, Z_STREAM_ERROR, Z_DATA_ERROR, Z_MEM_ERROR\n} = require('./zlib/constants');\n\n/* ===========================================================================*/\n\n\n/**\n * class Inflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[inflate]]\n * and [[inflateRaw]].\n **/\n\n/* internal\n * inflate.chunks -> Array\n *\n * Chunks of output data, if [[Inflate#onData]] not overridden.\n **/\n\n/**\n * Inflate.result -> Uint8Array|String\n *\n * Uncompressed result, generated by default [[Inflate#onData]]\n * and [[Inflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Inflate#push]] with `Z_FINISH` / `true` param).\n **/\n\n/**\n * Inflate.err -> Number\n *\n * Error code after inflate finished. 0 (Z_OK) on success.\n * Should be checked if broken data possible.\n **/\n\n/**\n * Inflate.msg -> String\n *\n * Error message, if [[Inflate.err]] != 0\n **/\n\n\n/**\n * new Inflate(options)\n * - options (Object): zlib inflate options.\n *\n * Creates new inflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `windowBits`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw inflate\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n * By default, when no options set, autodetect deflate/gzip data format via\n * wrapper header.\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n * const chunk1 = new Uint8Array([1,2,3,4,5,6,7,8,9])\n * const chunk2 = new Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * const inflate = new pako.Inflate({ level: 3});\n *\n * inflate.push(chunk1, false);\n * inflate.push(chunk2, true); // true -> last chunk\n *\n * if (inflate.err) { throw new Error(inflate.err); }\n *\n * console.log(inflate.result);\n * ```\n **/\nfunction Inflate(options) {\n this.options = utils.assign({\n chunkSize: 1024 * 64,\n windowBits: 15,\n to: ''\n }, options || {});\n\n const opt = this.options;\n\n // Force window size for `raw` data, if not set directly,\n // because we have no header for autodetect.\n if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {\n opt.windowBits = -opt.windowBits;\n if (opt.windowBits === 0) { opt.windowBits = -15; }\n }\n\n // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate\n if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&\n !(options && options.windowBits)) {\n opt.windowBits += 32;\n }\n\n // Gzip header has no info about windows size, we can do autodetect only\n // for deflate. So, if window size not set, force it to max when gzip possible\n if ((opt.windowBits > 15) && (opt.windowBits < 48)) {\n // bit 3 (16) -> gzipped data\n // bit 4 (32) -> autodetect gzip/deflate\n if ((opt.windowBits & 15) === 0) {\n opt.windowBits |= 15;\n }\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new ZStream();\n this.strm.avail_out = 0;\n\n let status = zlib_inflate.inflateInit2(\n this.strm,\n opt.windowBits\n );\n\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n\n this.header = new GZheader();\n\n zlib_inflate.inflateGetHeader(this.strm, this.header);\n\n // Setup dictionary\n if (opt.dictionary) {\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n opt.dictionary = strings.string2buf(opt.dictionary);\n } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n opt.dictionary = new Uint8Array(opt.dictionary);\n }\n if (opt.raw) { //In raw mode we need to set the dictionary early\n status = zlib_inflate.inflateSetDictionary(this.strm, opt.dictionary);\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n }\n }\n}\n\n/**\n * Inflate#push(data[, flush_mode]) -> Boolean\n * - data (Uint8Array|ArrayBuffer): input data\n * - flush_mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE\n * flush modes. See constants. Skipped or `false` means Z_NO_FLUSH,\n * `true` means Z_FINISH.\n *\n * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with\n * new output chunks. Returns `true` on success. If end of stream detected,\n * [[Inflate#onEnd]] will be called.\n *\n * `flush_mode` is not needed for normal operation, because end of stream\n * detected automatically. You may try to use it for advanced things, but\n * this functionality was not tested.\n *\n * On fail call [[Inflate#onEnd]] with error code and return false.\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nInflate.prototype.push = function (data, flush_mode) {\n const strm = this.strm;\n const chunkSize = this.options.chunkSize;\n const dictionary = this.options.dictionary;\n let status, _flush_mode, last_avail_out;\n\n if (this.ended) return false;\n\n if (flush_mode === ~~flush_mode) _flush_mode = flush_mode;\n else _flush_mode = flush_mode === true ? Z_FINISH : Z_NO_FLUSH;\n\n // Convert data if needed\n if (toString.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n for (;;) {\n if (strm.avail_out === 0) {\n strm.output = new Uint8Array(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n\n status = zlib_inflate.inflate(strm, _flush_mode);\n\n if (status === Z_NEED_DICT && dictionary) {\n status = zlib_inflate.inflateSetDictionary(strm, dictionary);\n\n if (status === Z_OK) {\n status = zlib_inflate.inflate(strm, _flush_mode);\n } else if (status === Z_DATA_ERROR) {\n // Replace code with more verbose\n status = Z_NEED_DICT;\n }\n }\n\n // Skip snyc markers if more data follows and not raw mode\n while (strm.avail_in > 0 &&\n status === Z_STREAM_END &&\n strm.state.wrap > 0 &&\n data[strm.next_in] !== 0)\n {\n zlib_inflate.inflateReset(strm);\n status = zlib_inflate.inflate(strm, _flush_mode);\n }\n\n switch (status) {\n case Z_STREAM_ERROR:\n case Z_DATA_ERROR:\n case Z_NEED_DICT:\n case Z_MEM_ERROR:\n this.onEnd(status);\n this.ended = true;\n return false;\n }\n\n // Remember real `avail_out` value, because we may patch out buffer content\n // to align utf8 strings boundaries.\n last_avail_out = strm.avail_out;\n\n if (strm.next_out) {\n if (strm.avail_out === 0 || status === Z_STREAM_END) {\n\n if (this.options.to === 'string') {\n\n let next_out_utf8 = strings.utf8border(strm.output, strm.next_out);\n\n let tail = strm.next_out - next_out_utf8;\n let utf8str = strings.buf2string(strm.output, next_out_utf8);\n\n // move tail & realign counters\n strm.next_out = tail;\n strm.avail_out = chunkSize - tail;\n if (tail) strm.output.set(strm.output.subarray(next_out_utf8, next_out_utf8 + tail), 0);\n\n this.onData(utf8str);\n\n } else {\n this.onData(strm.output.length === strm.next_out ? strm.output : strm.output.subarray(0, strm.next_out));\n }\n }\n }\n\n // Must repeat iteration if out buffer is full\n if (status === Z_OK && last_avail_out === 0) continue;\n\n // Finalize if end of stream reached.\n if (status === Z_STREAM_END) {\n status = zlib_inflate.inflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return true;\n }\n\n if (strm.avail_in === 0) break;\n }\n\n return true;\n};\n\n\n/**\n * Inflate#onData(chunk) -> Void\n * - chunk (Uint8Array|String): output data. When string output requested,\n * each chunk will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nInflate.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Inflate#onEnd(status) -> Void\n * - status (Number): inflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called either after you tell inflate that the input stream is\n * complete (Z_FINISH). By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nInflate.prototype.onEnd = function (status) {\n // On success - join\n if (status === Z_OK) {\n if (this.options.to === 'string') {\n this.result = this.chunks.join('');\n } else {\n this.result = utils.flattenChunks(this.chunks);\n }\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * inflate(data[, options]) -> Uint8Array|String\n * - data (Uint8Array|ArrayBuffer): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Decompress `data` with inflate/ungzip and `options`. Autodetect\n * format via wrapper header by default. That's why we don't provide\n * separate `ungzip` method.\n *\n * Supported options are:\n *\n * - windowBits\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako');\n * const input = pako.deflate(new Uint8Array([1,2,3,4,5,6,7,8,9]));\n * let output;\n *\n * try {\n * output = pako.inflate(input);\n * } catch (err) {\n * console.log(err);\n * }\n * ```\n **/\nfunction inflate(input, options) {\n const inflator = new Inflate(options);\n\n inflator.push(input);\n\n // That will never happens, if you don't cheat with options :)\n if (inflator.err) throw inflator.msg || msg[inflator.err];\n\n return inflator.result;\n}\n\n\n/**\n * inflateRaw(data[, options]) -> Uint8Array|String\n * - data (Uint8Array|ArrayBuffer): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * The same as [[inflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction inflateRaw(input, options) {\n options = options || {};\n options.raw = true;\n return inflate(input, options);\n}\n\n\n/**\n * ungzip(data[, options]) -> Uint8Array|String\n * - data (Uint8Array|ArrayBuffer): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Just shortcut to [[inflate]], because it autodetects format\n * by header.content. Done for convenience.\n **/\n\n\nmodule.exports.Inflate = Inflate;\nmodule.exports.inflate = inflate;\nmodule.exports.inflateRaw = inflateRaw;\nmodule.exports.ungzip = inflate;\nmodule.exports.constants = require('./zlib/constants');\n","'use strict';\n\n\nconst _has = (obj, key) => {\n return Object.prototype.hasOwnProperty.call(obj, key);\n};\n\nmodule.exports.assign = function (obj /*from1, from2, from3, ...*/) {\n const sources = Array.prototype.slice.call(arguments, 1);\n while (sources.length) {\n const source = sources.shift();\n if (!source) { continue; }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be non-object');\n }\n\n for (const p in source) {\n if (_has(source, p)) {\n obj[p] = source[p];\n }\n }\n }\n\n return obj;\n};\n\n\n// Join array of chunks to single array.\nmodule.exports.flattenChunks = (chunks) => {\n // calculate data length\n let len = 0;\n\n for (let i = 0, l = chunks.length; i < l; i++) {\n len += chunks[i].length;\n }\n\n // join chunks\n const result = new Uint8Array(len);\n\n for (let i = 0, pos = 0, l = chunks.length; i < l; i++) {\n let chunk = chunks[i];\n result.set(chunk, pos);\n pos += chunk.length;\n }\n\n return result;\n};\n","// String encode/decode helpers\n'use strict';\n\n\n// Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safari\n//\nlet STR_APPLY_UIA_OK = true;\n\ntry { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }\n\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nconst _utf8len = new Uint8Array(256);\nfor (let q = 0; q < 256; q++) {\n _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);\n}\n_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start\n\n\n// convert string to array (typed, when possible)\nmodule.exports.string2buf = (str) => {\n if (typeof TextEncoder === 'function' && TextEncoder.prototype.encode) {\n return new TextEncoder().encode(str);\n }\n\n let buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n // count binary size\n for (m_pos = 0; m_pos < str_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n }\n\n // allocate buffer\n buf = new Uint8Array(buf_len);\n\n // convert\n for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n if (c < 0x80) {\n /* one byte */\n buf[i++] = c;\n } else if (c < 0x800) {\n /* two bytes */\n buf[i++] = 0xC0 | (c >>> 6);\n buf[i++] = 0x80 | (c & 0x3f);\n } else if (c < 0x10000) {\n /* three bytes */\n buf[i++] = 0xE0 | (c >>> 12);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n } else {\n /* four bytes */\n buf[i++] = 0xf0 | (c >>> 18);\n buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n }\n }\n\n return buf;\n};\n\n// Helper\nconst buf2binstring = (buf, len) => {\n // On Chrome, the arguments in a function call that are allowed is `65534`.\n // If the length of the buffer is smaller than that, we can use this optimization,\n // otherwise we will take a slower path.\n if (len < 65534) {\n if (buf.subarray && STR_APPLY_UIA_OK) {\n return String.fromCharCode.apply(null, buf.length === len ? buf : buf.subarray(0, len));\n }\n }\n\n let result = '';\n for (let i = 0; i < len; i++) {\n result += String.fromCharCode(buf[i]);\n }\n return result;\n};\n\n\n// convert array to string\nmodule.exports.buf2string = (buf, max) => {\n const len = max || buf.length;\n\n if (typeof TextDecoder === 'function' && TextDecoder.prototype.decode) {\n return new TextDecoder().decode(buf.subarray(0, max));\n }\n\n let i, out;\n\n // Reserve max possible length (2 words per char)\n // NB: by unknown reasons, Array is significantly faster for\n // String.fromCharCode.apply than Uint16Array.\n const utf16buf = new Array(len * 2);\n\n for (out = 0, i = 0; i < len;) {\n let c = buf[i++];\n // quick process ascii\n if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n let c_len = _utf8len[c];\n // skip 5 & 6 byte codes\n if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }\n\n // apply mask on first byte\n c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n // join the rest\n while (c_len > 1 && i < len) {\n c = (c << 6) | (buf[i++] & 0x3f);\n c_len--;\n }\n\n // terminated by end of string?\n if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n if (c < 0x10000) {\n utf16buf[out++] = c;\n } else {\n c -= 0x10000;\n utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n }\n }\n\n return buf2binstring(utf16buf, out);\n};\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max - length limit (mandatory);\nmodule.exports.utf8border = (buf, max) => {\n\n max = max || buf.length;\n if (max > buf.length) { max = buf.length; }\n\n // go back from last position, until start of sequence found\n let pos = max - 1;\n while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n // Very small and broken sequence,\n // return max, because we should return something anyway.\n if (pos < 0) { return max; }\n\n // If we came to start of buffer - that means buffer is too small,\n // return max too.\n if (pos === 0) { return max; }\n\n return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n","'use strict';\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst adler32 = (adler, buf, len, pos) => {\n let s1 = (adler & 0xffff) |0,\n s2 = ((adler >>> 16) & 0xffff) |0,\n n = 0;\n\n while (len !== 0) {\n // Set limit ~ twice less than 5552, to keep\n // s2 in 31-bits, because we force signed ints.\n // in other case %= will fail.\n n = len > 2000 ? 2000 : len;\n len -= n;\n\n do {\n s1 = (s1 + buf[pos++]) |0;\n s2 = (s2 + s1) |0;\n } while (--n);\n\n s1 %= 65521;\n s2 %= 65521;\n }\n\n return (s1 | (s2 << 16)) |0;\n};\n\n\nmodule.exports = adler32;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n\n /* Allowed flush values; see deflate() and inflate() below for details */\n Z_NO_FLUSH: 0,\n Z_PARTIAL_FLUSH: 1,\n Z_SYNC_FLUSH: 2,\n Z_FULL_FLUSH: 3,\n Z_FINISH: 4,\n Z_BLOCK: 5,\n Z_TREES: 6,\n\n /* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\n Z_OK: 0,\n Z_STREAM_END: 1,\n Z_NEED_DICT: 2,\n Z_ERRNO: -1,\n Z_STREAM_ERROR: -2,\n Z_DATA_ERROR: -3,\n Z_MEM_ERROR: -4,\n Z_BUF_ERROR: -5,\n //Z_VERSION_ERROR: -6,\n\n /* compression levels */\n Z_NO_COMPRESSION: 0,\n Z_BEST_SPEED: 1,\n Z_BEST_COMPRESSION: 9,\n Z_DEFAULT_COMPRESSION: -1,\n\n\n Z_FILTERED: 1,\n Z_HUFFMAN_ONLY: 2,\n Z_RLE: 3,\n Z_FIXED: 4,\n Z_DEFAULT_STRATEGY: 0,\n\n /* Possible values of the data_type field (though see inflate()) */\n Z_BINARY: 0,\n Z_TEXT: 1,\n //Z_ASCII: 1, // = Z_TEXT (deprecated)\n Z_UNKNOWN: 2,\n\n /* The deflate compression method */\n Z_DEFLATED: 8\n //Z_NULL: null // Use -1 or null inline, depending on var type\n};\n","'use strict';\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nconst makeTable = () => {\n let c, table = [];\n\n for (var n = 0; n < 256; n++) {\n c = n;\n for (var k = 0; k < 8; k++) {\n c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n table[n] = c;\n }\n\n return table;\n};\n\n// Create table on load. Just 255 signed longs. Not a problem.\nconst crcTable = new Uint32Array(makeTable());\n\n\nconst crc32 = (crc, buf, len, pos) => {\n const t = crcTable;\n const end = pos + len;\n\n crc ^= -1;\n\n for (let i = pos; i < end; i++) {\n crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n }\n\n return (crc ^ (-1)); // >>> 0;\n};\n\n\nmodule.exports = crc32;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction GZheader() {\n /* true if compressed data believed to be text */\n this.text = 0;\n /* modification time */\n this.time = 0;\n /* extra flags (not used when writing a gzip file) */\n this.xflags = 0;\n /* operating system */\n this.os = 0;\n /* pointer to extra field or Z_NULL if none */\n this.extra = null;\n /* extra field length (valid if extra != Z_NULL) */\n this.extra_len = 0; // Actually, we don't need it in JS,\n // but leave for few code modifications\n\n //\n // Setup limits is not necessary because in js we should not preallocate memory\n // for inflate use constant limit in 65536 bytes\n //\n\n /* space at extra (only when reading header) */\n // this.extra_max = 0;\n /* pointer to zero-terminated file name or Z_NULL */\n this.name = '';\n /* space at name (only when reading header) */\n // this.name_max = 0;\n /* pointer to zero-terminated comment or Z_NULL */\n this.comment = '';\n /* space at comment (only when reading header) */\n // this.comm_max = 0;\n /* true if there was or will be a header crc */\n this.hcrc = 0;\n /* true when done reading gzip header (not used when writing a gzip file) */\n this.done = false;\n}\n\nmodule.exports = GZheader;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nconst BAD = 16209; /* got a data error -- remain here until reset */\nconst TYPE = 16191; /* i: waiting for type bits, including last-flag bit */\n\n/*\n Decode literal, length, and distance codes and write out the resulting\n literal and match bytes until either not enough input or output is\n available, an end-of-block is encountered, or a data error is encountered.\n When large enough input and output buffers are supplied to inflate(), for\n example, a 16K input buffer and a 64K output buffer, more than 95% of the\n inflate execution time is spent in this routine.\n\n Entry assumptions:\n\n state.mode === LEN\n strm.avail_in >= 6\n strm.avail_out >= 258\n start >= strm.avail_out\n state.bits < 8\n\n On return, state.mode is one of:\n\n LEN -- ran out of enough output space or enough available input\n TYPE -- reached end of block code, inflate() to interpret next block\n BAD -- error in block data\n\n Notes:\n\n - The maximum input bits used by a length/distance pair is 15 bits for the\n length code, 5 bits for the length extra, 15 bits for the distance code,\n and 13 bits for the distance extra. This totals 48 bits, or six bytes.\n Therefore if strm.avail_in >= 6, then there is enough input to avoid\n checking for available input while decoding.\n\n - The maximum bytes that a single length/distance pair can output is 258\n bytes, which is the maximum length that can be coded. inflate_fast()\n requires strm.avail_out >= 258 for each loop to avoid checking for\n output space.\n */\nmodule.exports = function inflate_fast(strm, start) {\n let _in; /* local strm.input */\n let last; /* have enough input while in < last */\n let _out; /* local strm.output */\n let beg; /* inflate()'s initial strm.output */\n let end; /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n let dmax; /* maximum distance from zlib header */\n//#endif\n let wsize; /* window size or zero if not using window */\n let whave; /* valid bytes in the window */\n let wnext; /* window write index */\n // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n let s_window; /* allocated sliding window, if wsize != 0 */\n let hold; /* local strm.hold */\n let bits; /* local strm.bits */\n let lcode; /* local strm.lencode */\n let dcode; /* local strm.distcode */\n let lmask; /* mask for first level of length codes */\n let dmask; /* mask for first level of distance codes */\n let here; /* retrieved table entry */\n let op; /* code bits, operation, extra bits, or */\n /* window position, window bytes to copy */\n let len; /* match length, unused bytes */\n let dist; /* match distance */\n let from; /* where to copy match from */\n let from_source;\n\n\n let input, output; // JS specific, because we have no pointers\n\n /* copy state to local variables */\n const state = strm.state;\n //here = state.here;\n _in = strm.next_in;\n input = strm.input;\n last = _in + (strm.avail_in - 5);\n _out = strm.next_out;\n output = strm.output;\n beg = _out - (start - strm.avail_out);\n end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n dmax = state.dmax;\n//#endif\n wsize = state.wsize;\n whave = state.whave;\n wnext = state.wnext;\n s_window = state.window;\n hold = state.hold;\n bits = state.bits;\n lcode = state.lencode;\n dcode = state.distcode;\n lmask = (1 << state.lenbits) - 1;\n dmask = (1 << state.distbits) - 1;\n\n\n /* decode literals and length/distances until end-of-block or not enough\n input data or output space */\n\n top:\n do {\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n\n here = lcode[hold & lmask];\n\n dolen:\n for (;;) { // Goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n if (op === 0) { /* literal */\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n output[_out++] = here & 0xffff/*here.val*/;\n }\n else if (op & 16) { /* length base */\n len = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (op) {\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n len += hold & ((1 << op) - 1);\n hold >>>= op;\n bits -= op;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", len));\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n here = dcode[hold & dmask];\n\n dodist:\n for (;;) { // goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n\n if (op & 16) { /* distance base */\n dist = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n }\n dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n if (dist > dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break top;\n }\n//#endif\n hold >>>= op;\n bits -= op;\n //Tracevv((stderr, \"inflate: distance %u\\n\", dist));\n op = _out - beg; /* max distance in output */\n if (dist > op) { /* see if copy from window */\n op = dist - op; /* distance back in window */\n if (op > whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break top;\n }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// if (len <= op - whave) {\n// do {\n// output[_out++] = 0;\n// } while (--len);\n// continue top;\n// }\n// len -= op - whave;\n// do {\n// output[_out++] = 0;\n// } while (--op > whave);\n// if (op === 0) {\n// from = _out - dist;\n// do {\n// output[_out++] = output[from++];\n// } while (--len);\n// continue top;\n// }\n//#endif\n }\n from = 0; // window index\n from_source = s_window;\n if (wnext === 0) { /* very common case */\n from += wsize - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n else if (wnext < op) { /* wrap around window */\n from += wsize + wnext - op;\n op -= wnext;\n if (op < len) { /* some from end of window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = 0;\n if (wnext < len) { /* some from start of window */\n op = wnext;\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n }\n else { /* contiguous in window */\n from += wnext - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n while (len > 2) {\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n len -= 3;\n }\n if (len) {\n output[_out++] = from_source[from++];\n if (len > 1) {\n output[_out++] = from_source[from++];\n }\n }\n }\n else {\n from = _out - dist; /* copy direct from output */\n do { /* minimum length is three */\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n len -= 3;\n } while (len > 2);\n if (len) {\n output[_out++] = output[from++];\n if (len > 1) {\n output[_out++] = output[from++];\n }\n }\n }\n }\n else if ((op & 64) === 0) { /* 2nd level distance code */\n here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dodist;\n }\n else {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n }\n else if ((op & 64) === 0) { /* 2nd level length code */\n here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dolen;\n }\n else if (op & 32) { /* end-of-block */\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.mode = TYPE;\n break top;\n }\n else {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n } while (_in < last && _out < end);\n\n /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n len = bits >> 3;\n _in -= len;\n bits -= len << 3;\n hold &= (1 << bits) - 1;\n\n /* update state and return */\n strm.next_in = _in;\n strm.next_out = _out;\n strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n state.hold = hold;\n state.bits = bits;\n return;\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst adler32 = require('./adler32');\nconst crc32 = require('./crc32');\nconst inflate_fast = require('./inffast');\nconst inflate_table = require('./inftrees');\n\nconst CODES = 0;\nconst LENS = 1;\nconst DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_FINISH, Z_BLOCK, Z_TREES,\n Z_OK, Z_STREAM_END, Z_NEED_DICT, Z_STREAM_ERROR, Z_DATA_ERROR, Z_MEM_ERROR, Z_BUF_ERROR,\n Z_DEFLATED\n} = require('./constants');\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nconst HEAD = 16180; /* i: waiting for magic header */\nconst FLAGS = 16181; /* i: waiting for method and flags (gzip) */\nconst TIME = 16182; /* i: waiting for modification time (gzip) */\nconst OS = 16183; /* i: waiting for extra flags and operating system (gzip) */\nconst EXLEN = 16184; /* i: waiting for extra length (gzip) */\nconst EXTRA = 16185; /* i: waiting for extra bytes (gzip) */\nconst NAME = 16186; /* i: waiting for end of file name (gzip) */\nconst COMMENT = 16187; /* i: waiting for end of comment (gzip) */\nconst HCRC = 16188; /* i: waiting for header crc (gzip) */\nconst DICTID = 16189; /* i: waiting for dictionary check value */\nconst DICT = 16190; /* waiting for inflateSetDictionary() call */\nconst TYPE = 16191; /* i: waiting for type bits, including last-flag bit */\nconst TYPEDO = 16192; /* i: same, but skip check to exit inflate on new block */\nconst STORED = 16193; /* i: waiting for stored size (length and complement) */\nconst COPY_ = 16194; /* i/o: same as COPY below, but only first time in */\nconst COPY = 16195; /* i/o: waiting for input or output to copy stored block */\nconst TABLE = 16196; /* i: waiting for dynamic block table lengths */\nconst LENLENS = 16197; /* i: waiting for code length code lengths */\nconst CODELENS = 16198; /* i: waiting for length/lit and distance code lengths */\nconst LEN_ = 16199; /* i: same as LEN below, but only first time in */\nconst LEN = 16200; /* i: waiting for length/lit/eob code */\nconst LENEXT = 16201; /* i: waiting for length extra bits */\nconst DIST = 16202; /* i: waiting for distance code */\nconst DISTEXT = 16203; /* i: waiting for distance extra bits */\nconst MATCH = 16204; /* o: waiting for output space to copy string */\nconst LIT = 16205; /* o: waiting for output space to write literal */\nconst CHECK = 16206; /* i: waiting for 32-bit check value */\nconst LENGTH = 16207; /* i: waiting for 32-bit length (gzip) */\nconst DONE = 16208; /* finished check, done -- remain here until reset */\nconst BAD = 16209; /* got a data error -- remain here until reset */\nconst MEM = 16210; /* got an inflate() memory error -- remain here until reset */\nconst SYNC = 16211; /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nconst ENOUGH_LENS = 852;\nconst ENOUGH_DISTS = 592;\n//const ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nconst MAX_WBITS = 15;\n/* 32K LZ77 window */\nconst DEF_WBITS = MAX_WBITS;\n\n\nconst zswap32 = (q) => {\n\n return (((q >>> 24) & 0xff) +\n ((q >>> 8) & 0xff00) +\n ((q & 0xff00) << 8) +\n ((q & 0xff) << 24));\n};\n\n\nfunction InflateState() {\n this.strm = null; /* pointer back to this zlib stream */\n this.mode = 0; /* current inflate mode */\n this.last = false; /* true if processing last block */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip,\n bit 2 true to validate check value */\n this.havedict = false; /* true if dictionary provided */\n this.flags = 0; /* gzip header method and flags (0 if zlib), or\n -1 if raw or no header yet */\n this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */\n this.check = 0; /* protected copy of check value */\n this.total = 0; /* protected copy of output count */\n // TODO: may be {}\n this.head = null; /* where to save gzip header information */\n\n /* sliding window */\n this.wbits = 0; /* log base 2 of requested window size */\n this.wsize = 0; /* window size or zero if not using window */\n this.whave = 0; /* valid bytes in the window */\n this.wnext = 0; /* window write index */\n this.window = null; /* allocated sliding window, if needed */\n\n /* bit accumulator */\n this.hold = 0; /* input bit accumulator */\n this.bits = 0; /* number of bits in \"in\" */\n\n /* for string and stored block copying */\n this.length = 0; /* literal or length of data to copy */\n this.offset = 0; /* distance back to copy string from */\n\n /* for table and code decoding */\n this.extra = 0; /* extra bits needed */\n\n /* fixed and dynamic code tables */\n this.lencode = null; /* starting table for length/literal codes */\n this.distcode = null; /* starting table for distance codes */\n this.lenbits = 0; /* index bits for lencode */\n this.distbits = 0; /* index bits for distcode */\n\n /* dynamic table building */\n this.ncode = 0; /* number of code length code lengths */\n this.nlen = 0; /* number of length code lengths */\n this.ndist = 0; /* number of distance code lengths */\n this.have = 0; /* number of code lengths in lens[] */\n this.next = null; /* next available space in codes[] */\n\n this.lens = new Uint16Array(320); /* temporary storage for code lengths */\n this.work = new Uint16Array(288); /* work area for code table building */\n\n /*\n because we don't have pointers in js, we use lencode and distcode directly\n as buffers so we don't need codes\n */\n //this.codes = new Int32Array(ENOUGH); /* space for code tables */\n this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */\n this.distdyn = null; /* dynamic table for distance codes (JS specific) */\n this.sane = 0; /* if false, allow invalid distance too far */\n this.back = 0; /* bits back of last unprocessed length/lit */\n this.was = 0; /* initial length of match */\n}\n\n\nconst inflateStateCheck = (strm) => {\n\n if (!strm) {\n return 1;\n }\n const state = strm.state;\n if (!state || state.strm !== strm ||\n state.mode < HEAD || state.mode > SYNC) {\n return 1;\n }\n return 0;\n};\n\n\nconst inflateResetKeep = (strm) => {\n\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR; }\n const state = strm.state;\n strm.total_in = strm.total_out = state.total = 0;\n strm.msg = ''; /*Z_NULL*/\n if (state.wrap) { /* to support ill-conceived Java test suite */\n strm.adler = state.wrap & 1;\n }\n state.mode = HEAD;\n state.last = 0;\n state.havedict = 0;\n state.flags = -1;\n state.dmax = 32768;\n state.head = null/*Z_NULL*/;\n state.hold = 0;\n state.bits = 0;\n //state.lencode = state.distcode = state.next = state.codes;\n state.lencode = state.lendyn = new Int32Array(ENOUGH_LENS);\n state.distcode = state.distdyn = new Int32Array(ENOUGH_DISTS);\n\n state.sane = 1;\n state.back = -1;\n //Tracev((stderr, \"inflate: reset\\n\"));\n return Z_OK;\n};\n\n\nconst inflateReset = (strm) => {\n\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR; }\n const state = strm.state;\n state.wsize = 0;\n state.whave = 0;\n state.wnext = 0;\n return inflateResetKeep(strm);\n\n};\n\n\nconst inflateReset2 = (strm, windowBits) => {\n let wrap;\n\n /* get the state */\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR; }\n const state = strm.state;\n\n /* extract wrap request from windowBits parameter */\n if (windowBits < 0) {\n wrap = 0;\n windowBits = -windowBits;\n }\n else {\n wrap = (windowBits >> 4) + 5;\n if (windowBits < 48) {\n windowBits &= 15;\n }\n }\n\n /* set number of window bits, free window if different */\n if (windowBits && (windowBits < 8 || windowBits > 15)) {\n return Z_STREAM_ERROR;\n }\n if (state.window !== null && state.wbits !== windowBits) {\n state.window = null;\n }\n\n /* update state and reset the rest of it */\n state.wrap = wrap;\n state.wbits = windowBits;\n return inflateReset(strm);\n};\n\n\nconst inflateInit2 = (strm, windowBits) => {\n\n if (!strm) { return Z_STREAM_ERROR; }\n //strm.msg = Z_NULL; /* in case we return an error */\n\n const state = new InflateState();\n\n //if (state === Z_NULL) return Z_MEM_ERROR;\n //Tracev((stderr, \"inflate: allocated\\n\"));\n strm.state = state;\n state.strm = strm;\n state.window = null/*Z_NULL*/;\n state.mode = HEAD; /* to pass state test in inflateReset2() */\n const ret = inflateReset2(strm, windowBits);\n if (ret !== Z_OK) {\n strm.state = null/*Z_NULL*/;\n }\n return ret;\n};\n\n\nconst inflateInit = (strm) => {\n\n return inflateInit2(strm, DEF_WBITS);\n};\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding. Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter. This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time. However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nlet virgin = true;\n\nlet lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\n\nconst fixedtables = (state) => {\n\n /* build fixed huffman tables if first call (may not be thread safe) */\n if (virgin) {\n lenfix = new Int32Array(512);\n distfix = new Int32Array(32);\n\n /* literal/length table */\n let sym = 0;\n while (sym < 144) { state.lens[sym++] = 8; }\n while (sym < 256) { state.lens[sym++] = 9; }\n while (sym < 280) { state.lens[sym++] = 7; }\n while (sym < 288) { state.lens[sym++] = 8; }\n\n inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 });\n\n /* distance table */\n sym = 0;\n while (sym < 32) { state.lens[sym++] = 5; }\n\n inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 });\n\n /* do this just once */\n virgin = false;\n }\n\n state.lencode = lenfix;\n state.lenbits = 9;\n state.distcode = distfix;\n state.distbits = 5;\n};\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning. If window does not exist yet, create it. This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nconst updatewindow = (strm, src, end, copy) => {\n\n let dist;\n const state = strm.state;\n\n /* if it hasn't been done already, allocate space for the window */\n if (state.window === null) {\n state.wsize = 1 << state.wbits;\n state.wnext = 0;\n state.whave = 0;\n\n state.window = new Uint8Array(state.wsize);\n }\n\n /* copy state->wsize or less output bytes into the circular window */\n if (copy >= state.wsize) {\n state.window.set(src.subarray(end - state.wsize, end), 0);\n state.wnext = 0;\n state.whave = state.wsize;\n }\n else {\n dist = state.wsize - state.wnext;\n if (dist > copy) {\n dist = copy;\n }\n //zmemcpy(state->window + state->wnext, end - copy, dist);\n state.window.set(src.subarray(end - copy, end - copy + dist), state.wnext);\n copy -= dist;\n if (copy) {\n //zmemcpy(state->window, end - copy, copy);\n state.window.set(src.subarray(end - copy, end), 0);\n state.wnext = copy;\n state.whave = state.wsize;\n }\n else {\n state.wnext += dist;\n if (state.wnext === state.wsize) { state.wnext = 0; }\n if (state.whave < state.wsize) { state.whave += dist; }\n }\n }\n return 0;\n};\n\n\nconst inflate = (strm, flush) => {\n\n let state;\n let input, output; // input/output buffers\n let next; /* next input INDEX */\n let put; /* next output INDEX */\n let have, left; /* available input and output */\n let hold; /* bit buffer */\n let bits; /* bits in bit buffer */\n let _in, _out; /* save starting available input and output */\n let copy; /* number of stored or match bytes to copy */\n let from; /* where to copy match bytes from */\n let from_source;\n let here = 0; /* current decoding table entry */\n let here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n //let last; /* parent table entry */\n let last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n let len; /* length to copy for repeats, bits to drop */\n let ret; /* return code */\n const hbuf = new Uint8Array(4); /* buffer for gzip header crc calculation */\n let opts;\n\n let n; // temporary variable for NEED_BITS\n\n const order = /* permutation of code lengths */\n new Uint8Array([ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]);\n\n\n if (inflateStateCheck(strm) || !strm.output ||\n (!strm.input && strm.avail_in !== 0)) {\n return Z_STREAM_ERROR;\n }\n\n state = strm.state;\n if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */\n\n\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n _in = have;\n _out = left;\n ret = Z_OK;\n\n inf_leave: // goto emulation\n for (;;) {\n switch (state.mode) {\n case HEAD:\n if (state.wrap === 0) {\n state.mode = TYPEDO;\n break;\n }\n //=== NEEDBITS(16);\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */\n if (state.wbits === 0) {\n state.wbits = 15;\n }\n state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = FLAGS;\n break;\n }\n if (state.head) {\n state.head.done = false;\n }\n if (!(state.wrap & 1) || /* check if zlib header allowed */\n (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n strm.msg = 'incorrect header check';\n state.mode = BAD;\n break;\n }\n if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n len = (hold & 0x0f)/*BITS(4)*/ + 8;\n if (state.wbits === 0) {\n state.wbits = len;\n }\n if (len > 15 || len > state.wbits) {\n strm.msg = 'invalid window size';\n state.mode = BAD;\n break;\n }\n\n // !!! pako patch. Force use `options.windowBits` if passed.\n // Required to always use max window size by default.\n state.dmax = 1 << state.wbits;\n //state.dmax = 1 << len;\n\n state.flags = 0; /* indicate zlib header */\n //Tracev((stderr, \"inflate: zlib header ok\\n\"));\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = hold & 0x200 ? DICTID : TYPE;\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n break;\n case FLAGS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.flags = hold;\n if ((state.flags & 0xff) !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n if (state.flags & 0xe000) {\n strm.msg = 'unknown header flags set';\n state.mode = BAD;\n break;\n }\n if (state.head) {\n state.head.text = ((hold >> 8) & 1);\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = TIME;\n /* falls through */\n case TIME:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.time = hold;\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC4(state.check, hold)\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n hbuf[2] = (hold >>> 16) & 0xff;\n hbuf[3] = (hold >>> 24) & 0xff;\n state.check = crc32(state.check, hbuf, 4, 0);\n //===\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = OS;\n /* falls through */\n case OS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.xflags = (hold & 0xff);\n state.head.os = (hold >> 8);\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = EXLEN;\n /* falls through */\n case EXLEN:\n if (state.flags & 0x0400) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length = hold;\n if (state.head) {\n state.head.extra_len = hold;\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n else if (state.head) {\n state.head.extra = null/*Z_NULL*/;\n }\n state.mode = EXTRA;\n /* falls through */\n case EXTRA:\n if (state.flags & 0x0400) {\n copy = state.length;\n if (copy > have) { copy = have; }\n if (copy) {\n if (state.head) {\n len = state.head.extra_len - state.length;\n if (!state.head.extra) {\n // Use untyped array for more convenient processing later\n state.head.extra = new Uint8Array(state.head.extra_len);\n }\n state.head.extra.set(\n input.subarray(\n next,\n // extra field is limited to 65536 bytes\n // - no need for additional size check\n next + copy\n ),\n /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n len\n );\n //zmemcpy(state.head.extra + len, next,\n // len + copy > state.head.extra_max ?\n // state.head.extra_max - len : copy);\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n state.length -= copy;\n }\n if (state.length) { break inf_leave; }\n }\n state.length = 0;\n state.mode = NAME;\n /* falls through */\n case NAME:\n if (state.flags & 0x0800) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n // TODO: 2 or 1 bytes?\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.name_max*/)) {\n state.head.name += String.fromCharCode(len);\n }\n } while (len && copy < have);\n\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.name = null;\n }\n state.length = 0;\n state.mode = COMMENT;\n /* falls through */\n case COMMENT:\n if (state.flags & 0x1000) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.comm_max*/)) {\n state.head.comment += String.fromCharCode(len);\n }\n } while (len && copy < have);\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.comment = null;\n }\n state.mode = HCRC;\n /* falls through */\n case HCRC:\n if (state.flags & 0x0200) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 4) && hold !== (state.check & 0xffff)) {\n strm.msg = 'header crc mismatch';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n if (state.head) {\n state.head.hcrc = ((state.flags >> 9) & 1);\n state.head.done = true;\n }\n strm.adler = state.check = 0;\n state.mode = TYPE;\n break;\n case DICTID:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n strm.adler = state.check = zswap32(hold);\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = DICT;\n /* falls through */\n case DICT:\n if (state.havedict === 0) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n return Z_NEED_DICT;\n }\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = TYPE;\n /* falls through */\n case TYPE:\n if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case TYPEDO:\n if (state.last) {\n //--- BYTEBITS() ---//\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n state.mode = CHECK;\n break;\n }\n //=== NEEDBITS(3); */\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.last = (hold & 0x01)/*BITS(1)*/;\n //--- DROPBITS(1) ---//\n hold >>>= 1;\n bits -= 1;\n //---//\n\n switch ((hold & 0x03)/*BITS(2)*/) {\n case 0: /* stored block */\n //Tracev((stderr, \"inflate: stored block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = STORED;\n break;\n case 1: /* fixed block */\n fixedtables(state);\n //Tracev((stderr, \"inflate: fixed codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = LEN_; /* decode codes */\n if (flush === Z_TREES) {\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break inf_leave;\n }\n break;\n case 2: /* dynamic block */\n //Tracev((stderr, \"inflate: dynamic codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = TABLE;\n break;\n case 3:\n strm.msg = 'invalid block type';\n state.mode = BAD;\n }\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break;\n case STORED:\n //--- BYTEBITS() ---// /* go to byte boundary */\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n strm.msg = 'invalid stored block lengths';\n state.mode = BAD;\n break;\n }\n state.length = hold & 0xffff;\n //Tracev((stderr, \"inflate: stored length %u\\n\",\n // state.length));\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = COPY_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case COPY_:\n state.mode = COPY;\n /* falls through */\n case COPY:\n copy = state.length;\n if (copy) {\n if (copy > have) { copy = have; }\n if (copy > left) { copy = left; }\n if (copy === 0) { break inf_leave; }\n //--- zmemcpy(put, next, copy); ---\n output.set(input.subarray(next, next + copy), put);\n //---//\n have -= copy;\n next += copy;\n left -= copy;\n put += copy;\n state.length -= copy;\n break;\n }\n //Tracev((stderr, \"inflate: stored end\\n\"));\n state.mode = TYPE;\n break;\n case TABLE:\n //=== NEEDBITS(14); */\n while (bits < 14) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n if (state.nlen > 286 || state.ndist > 30) {\n strm.msg = 'too many length or distance symbols';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracev((stderr, \"inflate: table sizes ok\\n\"));\n state.have = 0;\n state.mode = LENLENS;\n /* falls through */\n case LENLENS:\n while (state.have < state.ncode) {\n //=== NEEDBITS(3);\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n while (state.have < 19) {\n state.lens[order[state.have++]] = 0;\n }\n // We have separate tables & no pointers. 2 commented lines below not needed.\n //state.next = state.codes;\n //state.lencode = state.next;\n // Switch to use dynamic table\n state.lencode = state.lendyn;\n state.lenbits = 7;\n\n opts = { bits: state.lenbits };\n ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n state.lenbits = opts.bits;\n\n if (ret) {\n strm.msg = 'invalid code lengths set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, \"inflate: code lengths ok\\n\"));\n state.have = 0;\n state.mode = CODELENS;\n /* falls through */\n case CODELENS:\n while (state.have < state.nlen + state.ndist) {\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_val < 16) {\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.lens[state.have++] = here_val;\n }\n else {\n if (here_val === 16) {\n //=== NEEDBITS(here.bits + 2);\n n = here_bits + 2;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n if (state.have === 0) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n len = state.lens[state.have - 1];\n copy = 3 + (hold & 0x03);//BITS(2);\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n }\n else if (here_val === 17) {\n //=== NEEDBITS(here.bits + 3);\n n = here_bits + 3;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 3 + (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n else {\n //=== NEEDBITS(here.bits + 7);\n n = here_bits + 7;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 11 + (hold & 0x7f);//BITS(7);\n //--- DROPBITS(7) ---//\n hold >>>= 7;\n bits -= 7;\n //---//\n }\n if (state.have + copy > state.nlen + state.ndist) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n while (copy--) {\n state.lens[state.have++] = len;\n }\n }\n }\n\n /* handle error breaks in while */\n if (state.mode === BAD) { break; }\n\n /* check for end-of-block code (better have one) */\n if (state.lens[256] === 0) {\n strm.msg = 'invalid code -- missing end-of-block';\n state.mode = BAD;\n break;\n }\n\n /* build code tables -- note: do not change the lenbits or distbits\n values here (9 and 6) without reading the comments in inftrees.h\n concerning the ENOUGH constants, which depend on those values */\n state.lenbits = 9;\n\n opts = { bits: state.lenbits };\n ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.lenbits = opts.bits;\n // state.lencode = state.next;\n\n if (ret) {\n strm.msg = 'invalid literal/lengths set';\n state.mode = BAD;\n break;\n }\n\n state.distbits = 6;\n //state.distcode.copy(state.codes);\n // Switch to use dynamic table\n state.distcode = state.distdyn;\n opts = { bits: state.distbits };\n ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.distbits = opts.bits;\n // state.distcode = state.next;\n\n if (ret) {\n strm.msg = 'invalid distances set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, 'inflate: codes ok\\n'));\n state.mode = LEN_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case LEN_:\n state.mode = LEN;\n /* falls through */\n case LEN:\n if (have >= 6 && left >= 258) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n inflate_fast(strm, _out);\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n if (state.mode === TYPE) {\n state.back = -1;\n }\n break;\n }\n state.back = 0;\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if (here_bits <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_op && (here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.lencode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n state.length = here_val;\n if (here_op === 0) {\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n state.mode = LIT;\n break;\n }\n if (here_op & 32) {\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.back = -1;\n state.mode = TYPE;\n break;\n }\n if (here_op & 64) {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break;\n }\n state.extra = here_op & 15;\n state.mode = LENEXT;\n /* falls through */\n case LENEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", state.length));\n state.was = state.length;\n state.mode = DIST;\n /* falls through */\n case DIST:\n for (;;) {\n here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if ((here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.distcode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n if (here_op & 64) {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break;\n }\n state.offset = here_val;\n state.extra = (here_op) & 15;\n state.mode = DISTEXT;\n /* falls through */\n case DISTEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n//#ifdef INFLATE_STRICT\n if (state.offset > state.dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracevv((stderr, \"inflate: distance %u\\n\", state.offset));\n state.mode = MATCH;\n /* falls through */\n case MATCH:\n if (left === 0) { break inf_leave; }\n copy = _out - left;\n if (state.offset > copy) { /* copy from window */\n copy = state.offset - copy;\n if (copy > state.whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// Trace((stderr, \"inflate.c too far\\n\"));\n// copy -= state.whave;\n// if (copy > state.length) { copy = state.length; }\n// if (copy > left) { copy = left; }\n// left -= copy;\n// state.length -= copy;\n// do {\n// output[put++] = 0;\n// } while (--copy);\n// if (state.length === 0) { state.mode = LEN; }\n// break;\n//#endif\n }\n if (copy > state.wnext) {\n copy -= state.wnext;\n from = state.wsize - copy;\n }\n else {\n from = state.wnext - copy;\n }\n if (copy > state.length) { copy = state.length; }\n from_source = state.window;\n }\n else { /* copy from output */\n from_source = output;\n from = put - state.offset;\n copy = state.length;\n }\n if (copy > left) { copy = left; }\n left -= copy;\n state.length -= copy;\n do {\n output[put++] = from_source[from++];\n } while (--copy);\n if (state.length === 0) { state.mode = LEN; }\n break;\n case LIT:\n if (left === 0) { break inf_leave; }\n output[put++] = state.length;\n left--;\n state.mode = LEN;\n break;\n case CHECK:\n if (state.wrap) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n // Use '|' instead of '+' to make sure that result is signed\n hold |= input[next++] << bits;\n bits += 8;\n }\n //===//\n _out -= left;\n strm.total_out += _out;\n state.total += _out;\n if ((state.wrap & 4) && _out) {\n strm.adler = state.check =\n /*UPDATE_CHECK(state.check, put - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));\n\n }\n _out = left;\n // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n if ((state.wrap & 4) && (state.flags ? hold : zswap32(hold)) !== state.check) {\n strm.msg = 'incorrect data check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: check matches trailer\\n\"));\n }\n state.mode = LENGTH;\n /* falls through */\n case LENGTH:\n if (state.wrap && state.flags) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 4) && hold !== (state.total & 0xffffffff)) {\n strm.msg = 'incorrect length check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: length matches trailer\\n\"));\n }\n state.mode = DONE;\n /* falls through */\n case DONE:\n ret = Z_STREAM_END;\n break inf_leave;\n case BAD:\n ret = Z_DATA_ERROR;\n break inf_leave;\n case MEM:\n return Z_MEM_ERROR;\n case SYNC:\n /* falls through */\n default:\n return Z_STREAM_ERROR;\n }\n }\n\n // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n /*\n Return from inflate(), updating the total counts and the check value.\n If there was no progress during the inflate() call, return a buffer\n error. Call updatewindow() to create and/or update the window state.\n Note: a memory error from inflate() is non-recoverable.\n */\n\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n\n if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n (state.mode < CHECK || flush !== Z_FINISH))) {\n if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {\n state.mode = MEM;\n return Z_MEM_ERROR;\n }\n }\n _in -= strm.avail_in;\n _out -= strm.avail_out;\n strm.total_in += _in;\n strm.total_out += _out;\n state.total += _out;\n if ((state.wrap & 4) && _out) {\n strm.adler = state.check = /*UPDATE_CHECK(state.check, strm.next_out - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));\n }\n strm.data_type = state.bits + (state.last ? 64 : 0) +\n (state.mode === TYPE ? 128 : 0) +\n (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {\n ret = Z_BUF_ERROR;\n }\n return ret;\n};\n\n\nconst inflateEnd = (strm) => {\n\n if (inflateStateCheck(strm)) {\n return Z_STREAM_ERROR;\n }\n\n let state = strm.state;\n if (state.window) {\n state.window = null;\n }\n strm.state = null;\n return Z_OK;\n};\n\n\nconst inflateGetHeader = (strm, head) => {\n\n /* check state */\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR; }\n const state = strm.state;\n if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }\n\n /* save header structure */\n state.head = head;\n head.done = false;\n return Z_OK;\n};\n\n\nconst inflateSetDictionary = (strm, dictionary) => {\n const dictLength = dictionary.length;\n\n let state;\n let dictid;\n let ret;\n\n /* check state */\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR; }\n state = strm.state;\n\n if (state.wrap !== 0 && state.mode !== DICT) {\n return Z_STREAM_ERROR;\n }\n\n /* check for correct dictionary identifier */\n if (state.mode === DICT) {\n dictid = 1; /* adler32(0, null, 0)*/\n /* dictid = adler32(dictid, dictionary, dictLength); */\n dictid = adler32(dictid, dictionary, dictLength, 0);\n if (dictid !== state.check) {\n return Z_DATA_ERROR;\n }\n }\n /* copy dictionary to window using updatewindow(), which will amend the\n existing dictionary if appropriate */\n ret = updatewindow(strm, dictionary, dictLength, dictLength);\n if (ret) {\n state.mode = MEM;\n return Z_MEM_ERROR;\n }\n state.havedict = 1;\n // Tracev((stderr, \"inflate: dictionary set\\n\"));\n return Z_OK;\n};\n\n\nmodule.exports.inflateReset = inflateReset;\nmodule.exports.inflateReset2 = inflateReset2;\nmodule.exports.inflateResetKeep = inflateResetKeep;\nmodule.exports.inflateInit = inflateInit;\nmodule.exports.inflateInit2 = inflateInit2;\nmodule.exports.inflate = inflate;\nmodule.exports.inflateEnd = inflateEnd;\nmodule.exports.inflateGetHeader = inflateGetHeader;\nmodule.exports.inflateSetDictionary = inflateSetDictionary;\nmodule.exports.inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nmodule.exports.inflateCodesUsed = inflateCodesUsed;\nmodule.exports.inflateCopy = inflateCopy;\nmodule.exports.inflateGetDictionary = inflateGetDictionary;\nmodule.exports.inflateMark = inflateMark;\nmodule.exports.inflatePrime = inflatePrime;\nmodule.exports.inflateSync = inflateSync;\nmodule.exports.inflateSyncPoint = inflateSyncPoint;\nmodule.exports.inflateUndermine = inflateUndermine;\nmodule.exports.inflateValidate = inflateValidate;\n*/\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst MAXBITS = 15;\nconst ENOUGH_LENS = 852;\nconst ENOUGH_DISTS = 592;\n//const ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nconst CODES = 0;\nconst LENS = 1;\nconst DISTS = 2;\n\nconst lbase = new Uint16Array([ /* Length codes 257..285 base */\n 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n]);\n\nconst lext = new Uint8Array([ /* Length codes 257..285 extra */\n 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n]);\n\nconst dbase = new Uint16Array([ /* Distance codes 0..29 base */\n 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n 8193, 12289, 16385, 24577, 0, 0\n]);\n\nconst dext = new Uint8Array([ /* Distance codes 0..29 extra */\n 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n 28, 28, 29, 29, 64, 64\n]);\n\nconst inflate_table = (type, lens, lens_index, codes, table, table_index, work, opts) =>\n{\n const bits = opts.bits;\n //here = opts.here; /* table entry for duplication */\n\n let len = 0; /* a code's length in bits */\n let sym = 0; /* index of code symbols */\n let min = 0, max = 0; /* minimum and maximum code lengths */\n let root = 0; /* number of index bits for root table */\n let curr = 0; /* number of index bits for current table */\n let drop = 0; /* code bits to drop for sub-table */\n let left = 0; /* number of prefix codes available */\n let used = 0; /* code entries in table used */\n let huff = 0; /* Huffman code */\n let incr; /* for incrementing code, index */\n let fill; /* index for replicating entries */\n let low; /* low bits for current root entry */\n let mask; /* mask for low root bits */\n let next; /* next available space in table */\n let base = null; /* base value table to use */\n// let shoextra; /* extra bits table to use */\n let match; /* use base and extra for symbol >= match */\n const count = new Uint16Array(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */\n const offs = new Uint16Array(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */\n let extra = null;\n\n let here_bits, here_op, here_val;\n\n /*\n Process a set of code lengths to create a canonical Huffman code. The\n code lengths are lens[0..codes-1]. Each length corresponds to the\n symbols 0..codes-1. The Huffman code is generated by first sorting the\n symbols by length from short to long, and retaining the symbol order\n for codes with equal lengths. Then the code starts with all zero bits\n for the first code of the shortest length, and the codes are integer\n increments for the same length, and zeros are appended as the length\n increases. For the deflate format, these bits are stored backwards\n from their more natural integer increment ordering, and so when the\n decoding tables are built in the large loop below, the integer codes\n are incremented backwards.\n\n This routine assumes, but does not check, that all of the entries in\n lens[] are in the range 0..MAXBITS. The caller must assure this.\n 1..MAXBITS is interpreted as that code length. zero means that that\n symbol does not occur in this code.\n\n The codes are sorted by computing a count of codes for each length,\n creating from that a table of starting indices for each length in the\n sorted table, and then entering the symbols in order in the sorted\n table. The sorted table is work[], with that space being provided by\n the caller.\n\n The length counts are used for other purposes as well, i.e. finding\n the minimum and maximum length codes, determining if there are any\n codes at all, checking for a valid set of lengths, and looking ahead\n at length counts to determine sub-table sizes when building the\n decoding tables.\n */\n\n /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n for (len = 0; len <= MAXBITS; len++) {\n count[len] = 0;\n }\n for (sym = 0; sym < codes; sym++) {\n count[lens[lens_index + sym]]++;\n }\n\n /* bound code lengths, force root to be within code lengths */\n root = bits;\n for (max = MAXBITS; max >= 1; max--) {\n if (count[max] !== 0) { break; }\n }\n if (root > max) {\n root = max;\n }\n if (max === 0) { /* no symbols to code at all */\n //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */\n //table.bits[opts.table_index] = 1; //here.bits = (var char)1;\n //table.val[opts.table_index++] = 0; //here.val = (var short)0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n //table.op[opts.table_index] = 64;\n //table.bits[opts.table_index] = 1;\n //table.val[opts.table_index++] = 0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n opts.bits = 1;\n return 0; /* no symbols, but wait for decoding to report error */\n }\n for (min = 1; min < max; min++) {\n if (count[min] !== 0) { break; }\n }\n if (root < min) {\n root = min;\n }\n\n /* check for an over-subscribed or incomplete set of lengths */\n left = 1;\n for (len = 1; len <= MAXBITS; len++) {\n left <<= 1;\n left -= count[len];\n if (left < 0) {\n return -1;\n } /* over-subscribed */\n }\n if (left > 0 && (type === CODES || max !== 1)) {\n return -1; /* incomplete set */\n }\n\n /* generate offsets into symbol table for each length for sorting */\n offs[1] = 0;\n for (len = 1; len < MAXBITS; len++) {\n offs[len + 1] = offs[len] + count[len];\n }\n\n /* sort symbols by length, by symbol order within each length */\n for (sym = 0; sym < codes; sym++) {\n if (lens[lens_index + sym] !== 0) {\n work[offs[lens[lens_index + sym]]++] = sym;\n }\n }\n\n /*\n Create and fill in decoding tables. In this loop, the table being\n filled is at next and has curr index bits. The code being used is huff\n with length len. That code is converted to an index by dropping drop\n bits off of the bottom. For codes where len is less than drop + curr,\n those top drop + curr - len bits are incremented through all values to\n fill the table with replicated entries.\n\n root is the number of index bits for the root table. When len exceeds\n root, sub-tables are created pointed to by the root entry with an index\n of the low root bits of huff. This is saved in low to check for when a\n new sub-table should be started. drop is zero when the root table is\n being filled, and drop is root when sub-tables are being filled.\n\n When a new sub-table is needed, it is necessary to look ahead in the\n code lengths to determine what size sub-table is needed. The length\n counts are used for this, and so count[] is decremented as codes are\n entered in the tables.\n\n used keeps track of how many table entries have been allocated from the\n provided *table space. It is checked for LENS and DIST tables against\n the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n the initial root table size constants. See the comments in inftrees.h\n for more information.\n\n sym increments through all symbols, and the loop terminates when\n all codes of length max, i.e. all codes, have been processed. This\n routine permits incomplete codes, so another loop after this one fills\n in the rest of the decoding tables with invalid code markers.\n */\n\n /* set up for code type */\n // poor man optimization - use if-else instead of switch,\n // to avoid deopts in old v8\n if (type === CODES) {\n base = extra = work; /* dummy value--not used */\n match = 20;\n\n } else if (type === LENS) {\n base = lbase;\n extra = lext;\n match = 257;\n\n } else { /* DISTS */\n base = dbase;\n extra = dext;\n match = 0;\n }\n\n /* initialize opts for loop */\n huff = 0; /* starting code */\n sym = 0; /* starting code symbol */\n len = min; /* starting code length */\n next = table_index; /* current table to fill in */\n curr = root; /* current table index bits */\n drop = 0; /* current bits to drop from code for index */\n low = -1; /* trigger new sub-table when len > root */\n used = 1 << root; /* use root table entries */\n mask = used - 1; /* mask for comparing low */\n\n /* check available table space */\n if ((type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)) {\n return 1;\n }\n\n /* process all codes and make table entries */\n for (;;) {\n /* create table entry */\n here_bits = len - drop;\n if (work[sym] + 1 < match) {\n here_op = 0;\n here_val = work[sym];\n }\n else if (work[sym] >= match) {\n here_op = extra[work[sym] - match];\n here_val = base[work[sym] - match];\n }\n else {\n here_op = 32 + 64; /* end of block */\n here_val = 0;\n }\n\n /* replicate for those indices with low len bits equal to huff */\n incr = 1 << (len - drop);\n fill = 1 << curr;\n min = fill; /* save offset to next table */\n do {\n fill -= incr;\n table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n } while (fill !== 0);\n\n /* backwards increment the len-bit code huff */\n incr = 1 << (len - 1);\n while (huff & incr) {\n incr >>= 1;\n }\n if (incr !== 0) {\n huff &= incr - 1;\n huff += incr;\n } else {\n huff = 0;\n }\n\n /* go to next symbol, update count, len */\n sym++;\n if (--count[len] === 0) {\n if (len === max) { break; }\n len = lens[lens_index + work[sym]];\n }\n\n /* create new sub-table if needed */\n if (len > root && (huff & mask) !== low) {\n /* if first time, transition to sub-tables */\n if (drop === 0) {\n drop = root;\n }\n\n /* increment past last table */\n next += min; /* here min is 1 << curr */\n\n /* determine length of next table */\n curr = len - drop;\n left = 1 << curr;\n while (curr + drop < max) {\n left -= count[curr + drop];\n if (left <= 0) { break; }\n curr++;\n left <<= 1;\n }\n\n /* check for enough space */\n used += 1 << curr;\n if ((type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)) {\n return 1;\n }\n\n /* point entry in root table to sub-table */\n low = huff & mask;\n /*table.op[low] = curr;\n table.bits[low] = root;\n table.val[low] = next - opts.table_index;*/\n table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n }\n }\n\n /* fill in remaining table entry if code is incomplete (guaranteed to have\n at most one remaining entry, since if the code is incomplete, the\n maximum code length that was allowed to get this far is one bit) */\n if (huff !== 0) {\n //table.op[next + huff] = 64; /* invalid code marker */\n //table.bits[next + huff] = len - drop;\n //table.val[next + huff] = 0;\n table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n }\n\n /* set return parameters */\n //opts.table_index += used;\n opts.bits = root;\n return 0;\n};\n\n\nmodule.exports = inflate_table;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n 2: 'need dictionary', /* Z_NEED_DICT 2 */\n 1: 'stream end', /* Z_STREAM_END 1 */\n 0: '', /* Z_OK 0 */\n '-1': 'file error', /* Z_ERRNO (-1) */\n '-2': 'stream error', /* Z_STREAM_ERROR (-2) */\n '-3': 'data error', /* Z_DATA_ERROR (-3) */\n '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */\n '-5': 'buffer error', /* Z_BUF_ERROR (-5) */\n '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n /* next input byte */\n this.input = null; // JS specific, because we have no pointers\n this.next_in = 0;\n /* number of bytes available at input */\n this.avail_in = 0;\n /* total number of input bytes read so far */\n this.total_in = 0;\n /* next output byte should be put there */\n this.output = null; // JS specific, because we have no pointers\n this.next_out = 0;\n /* remaining free space at output */\n this.avail_out = 0;\n /* total number of bytes output so far */\n this.total_out = 0;\n /* last error message, NULL if no error */\n this.msg = ''/*Z_NULL*/;\n /* not visible by applications */\n this.state = null;\n /* best guess about the data type: binary or text */\n this.data_type = 2/*Z_UNKNOWN*/;\n /* adler32 value of the uncompressed data */\n this.adler = 0;\n}\n\nmodule.exports = ZStream;\n","module.exports = require(\"core-js-pure/stable/instance/flags\");","module.exports = require(\"core-js-pure/features/object/define-property\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","export default function (imageFrame, colorBuffer, useRGBA) {\n if (imageFrame === undefined) {\n throw new Error('decodeRGB: rgbBuffer must not be undefined');\n }\n if (imageFrame.length % 3 !== 0) {\n throw new Error('decodeRGB: rgbBuffer length must be divisible by 3');\n }\n\n const numPixels = imageFrame.length / 3;\n\n let rgbIndex = 0;\n\n let bufferIndex = 0;\n\n if (useRGBA) {\n for (let i = 0; i < numPixels; i++) {\n colorBuffer[bufferIndex++] = imageFrame[rgbIndex++]; // red\n colorBuffer[bufferIndex++] = imageFrame[rgbIndex++]; // green\n colorBuffer[bufferIndex++] = imageFrame[rgbIndex++]; // blue\n colorBuffer[bufferIndex++] = 255; // alpha\n }\n\n return;\n }\n\n // if RGB buffer\n colorBuffer.set(imageFrame);\n}\n","export default function (imageFrame, colorBuffer, useRGBA) {\n if (imageFrame === undefined) {\n throw new Error('decodeRGB: rgbBuffer must not be undefined');\n }\n if (imageFrame.length % 3 !== 0) {\n throw new Error('decodeRGB: rgbBuffer length must be divisible by 3');\n }\n\n const numPixels = imageFrame.length / 3;\n\n let bufferIndex = 0;\n\n let rIndex = 0;\n\n let gIndex = numPixels;\n\n let bIndex = numPixels * 2;\n\n if (useRGBA) {\n for (let i = 0; i < numPixels; i++) {\n colorBuffer[bufferIndex++] = imageFrame[rIndex++]; // red\n colorBuffer[bufferIndex++] = imageFrame[gIndex++]; // green\n colorBuffer[bufferIndex++] = imageFrame[bIndex++]; // blue\n colorBuffer[bufferIndex++] = 255; // alpha\n }\n\n return;\n }\n\n // if RGB buffer\n colorBuffer.set(imageFrame);\n}\n","export default function (imageFrame, colorBuffer, useRGBA) {\n if (imageFrame === undefined) {\n throw new Error('decodeRGB: ybrBuffer must not be undefined');\n }\n if (imageFrame.length % 3 !== 0) {\n throw new Error('decodeRGB: ybrBuffer length must be divisble by 3');\n }\n\n const numPixels = imageFrame.length / 3;\n\n let ybrIndex = 0;\n\n let bufferIndex = 0;\n\n if (useRGBA) {\n for (let i = 0; i < numPixels; i++) {\n const y = imageFrame[ybrIndex++];\n const cb = imageFrame[ybrIndex++];\n const cr = imageFrame[ybrIndex++];\n\n colorBuffer[bufferIndex++] = y + 1.402 * (cr - 128); // red\n colorBuffer[bufferIndex++] =\n y - 0.34414 * (cb - 128) - 0.71414 * (cr - 128); // green\n colorBuffer[bufferIndex++] = y + 1.772 * (cb - 128); // blue\n colorBuffer[bufferIndex++] = 255; // alpha\n }\n\n return;\n }\n\n for (let i = 0; i < numPixels; i++) {\n const y = imageFrame[ybrIndex++];\n const cb = imageFrame[ybrIndex++];\n const cr = imageFrame[ybrIndex++];\n\n colorBuffer[bufferIndex++] = y + 1.402 * (cr - 128); // red\n colorBuffer[bufferIndex++] =\n y - 0.34414 * (cb - 128) - 0.71414 * (cr - 128); // green\n colorBuffer[bufferIndex++] = y + 1.772 * (cb - 128); // blue\n }\n}\n","export default function (imageFrame, colorBuffer, useRGBA) {\n if (imageFrame === undefined) {\n throw new Error('decodeRGB: ybrBuffer must not be undefined');\n }\n if (imageFrame.length % 3 !== 0) {\n throw new Error('decodeRGB: ybrBuffer length must be divisble by 3');\n }\n\n const numPixels = imageFrame.length / 3;\n\n let bufferIndex = 0;\n\n let yIndex = 0;\n\n let cbIndex = numPixels;\n\n let crIndex = numPixels * 2;\n\n if (useRGBA) {\n for (let i = 0; i < numPixels; i++) {\n const y = imageFrame[yIndex++];\n const cb = imageFrame[cbIndex++];\n const cr = imageFrame[crIndex++];\n\n colorBuffer[bufferIndex++] = y + 1.402 * (cr - 128); // red\n colorBuffer[bufferIndex++] =\n y - 0.34414 * (cb - 128) - 0.71414 * (cr - 128); // green\n colorBuffer[bufferIndex++] = y + 1.772 * (cb - 128); // blue\n colorBuffer[bufferIndex++] = 255; // alpha\n }\n\n return;\n }\n\n for (let i = 0; i < numPixels; i++) {\n const y = imageFrame[yIndex++];\n const cb = imageFrame[cbIndex++];\n const cr = imageFrame[crIndex++];\n\n colorBuffer[bufferIndex++] = y + 1.402 * (cr - 128); // red\n colorBuffer[bufferIndex++] =\n y - 0.34414 * (cb - 128) - 0.71414 * (cr - 128); // green\n colorBuffer[bufferIndex++] = y + 1.772 * (cb - 128); // blue\n }\n}\n","/* eslint no-bitwise: 0 */\n\nfunction convertLUTto8Bit(lut, shift) {\n const numEntries = lut.length;\n const cleanedLUT = new Uint8ClampedArray(numEntries);\n\n for (let i = 0; i < numEntries; ++i) {\n cleanedLUT[i] = lut[i] >> shift;\n }\n\n return cleanedLUT;\n}\n\n/**\n * Convert pixel data with PALETTE COLOR Photometric Interpretation to RGBA\n *\n * @param {ImageFrame} imageFrame\n * @param {Uint8ClampedArray} colorBuffer\n * @returns {void}\n */\nexport default function (imageFrame, colorBuffer, useRGBA) {\n const numPixels = imageFrame.columns * imageFrame.rows;\n const pixelData = imageFrame.pixelData;\n const rData = imageFrame.redPaletteColorLookupTableData;\n const gData = imageFrame.greenPaletteColorLookupTableData;\n const bData = imageFrame.bluePaletteColorLookupTableData;\n const len = imageFrame.redPaletteColorLookupTableData.length;\n\n let palIndex = 0;\n\n let bufferIndex = 0;\n\n const start = imageFrame.redPaletteColorLookupTableDescriptor[1];\n const shift =\n imageFrame.redPaletteColorLookupTableDescriptor[2] === 8 ? 0 : 8;\n\n const rDataCleaned = convertLUTto8Bit(rData, shift);\n const gDataCleaned = convertLUTto8Bit(gData, shift);\n const bDataCleaned = convertLUTto8Bit(bData, shift);\n\n if (useRGBA) {\n for (let i = 0; i < numPixels; ++i) {\n let value = pixelData[palIndex++];\n\n if (value < start) {\n value = 0;\n } else if (value > start + len - 1) {\n value = len - 1;\n } else {\n value -= start;\n }\n\n colorBuffer[bufferIndex++] = rDataCleaned[value];\n colorBuffer[bufferIndex++] = gDataCleaned[value];\n colorBuffer[bufferIndex++] = bDataCleaned[value];\n colorBuffer[bufferIndex++] = 255;\n }\n\n return;\n }\n\n for (let i = 0; i < numPixels; ++i) {\n let value = pixelData[palIndex++];\n\n if (value < start) {\n value = 0;\n } else if (value > start + len - 1) {\n value = len - 1;\n } else {\n value -= start;\n }\n\n colorBuffer[bufferIndex++] = rDataCleaned[value];\n colorBuffer[bufferIndex++] = gDataCleaned[value];\n colorBuffer[bufferIndex++] = bDataCleaned[value];\n }\n}\n","function getLutDescriptor(dataSet, tag) {\n if (!dataSet.elements[tag] || dataSet.elements[tag].length !== 6) {\n return;\n }\n\n return [\n dataSet.uint16(tag, 0),\n dataSet.uint16(tag, 1),\n dataSet.uint16(tag, 2),\n ];\n}\n\nfunction getLutData(lutDataSet, tag, lutDescriptor) {\n const lut = [];\n const lutData = lutDataSet.elements[tag];\n\n for (let i = 0; i < lutDescriptor[0]; i++) {\n // Output range is always unsigned\n if (lutDescriptor[2] === 16) {\n lut[i] = lutDataSet.uint16(tag, i);\n } else {\n lut[i] = lutDataSet.byteArray[i + lutData.dataOffset];\n }\n }\n\n return lut;\n}\n\nfunction populatePaletteColorLut(dataSet, imagePixelModule) {\n imagePixelModule.redPaletteColorLookupTableDescriptor = getLutDescriptor(\n dataSet,\n 'x00281101'\n );\n imagePixelModule.greenPaletteColorLookupTableDescriptor = getLutDescriptor(\n dataSet,\n 'x00281102'\n );\n imagePixelModule.bluePaletteColorLookupTableDescriptor = getLutDescriptor(\n dataSet,\n 'x00281103'\n );\n\n // The first Palette Color Lookup Table Descriptor value is the number of entries in the lookup table.\n // When the number of table entries is equal to 2ˆ16 then this value shall be 0.\n // See http://dicom.nema.org/MEDICAL/DICOM/current/output/chtml/part03/sect_C.7.6.3.html#sect_C.7.6.3.1.5\n if (imagePixelModule.redPaletteColorLookupTableDescriptor[0] === 0) {\n imagePixelModule.redPaletteColorLookupTableDescriptor[0] = 65536;\n imagePixelModule.greenPaletteColorLookupTableDescriptor[0] = 65536;\n imagePixelModule.bluePaletteColorLookupTableDescriptor[0] = 65536;\n }\n\n // The third Palette Color Lookup Table Descriptor value specifies the number of bits for each entry in the Lookup Table Data.\n // It shall take the value of 8 or 16.\n // The LUT Data shall be stored in a format equivalent to 8 bits allocated when the number of bits for each entry is 8, and 16 bits allocated when the number of bits for each entry is 16, where in both cases the high bit is equal to bits allocated-1.\n // The third value shall be identical for each of the Red, Green and Blue Palette Color Lookup Table Descriptors.\n //\n // Note: Some implementations have encoded 8 bit entries with 16 bits allocated, padding the high bits;\n // this can be detected by comparing the number of entries specified in the LUT Descriptor with the actual value length of the LUT Data entry.\n // The value length in bytes should equal the number of entries if bits allocated is 8, and be twice as long if bits allocated is 16.\n const numLutEntries =\n imagePixelModule.redPaletteColorLookupTableDescriptor[0];\n const lutData = dataSet.elements.x00281201;\n const lutBitsAllocated = lutData.length === numLutEntries ? 8 : 16;\n\n // If the descriptors do not appear to have the correct values, correct them\n if (\n imagePixelModule.redPaletteColorLookupTableDescriptor[2] !==\n lutBitsAllocated\n ) {\n imagePixelModule.redPaletteColorLookupTableDescriptor[2] = lutBitsAllocated;\n imagePixelModule.greenPaletteColorLookupTableDescriptor[2] =\n lutBitsAllocated;\n imagePixelModule.bluePaletteColorLookupTableDescriptor[2] =\n lutBitsAllocated;\n }\n\n imagePixelModule.redPaletteColorLookupTableData = getLutData(\n dataSet,\n 'x00281201',\n imagePixelModule.redPaletteColorLookupTableDescriptor\n );\n imagePixelModule.greenPaletteColorLookupTableData = getLutData(\n dataSet,\n 'x00281202',\n imagePixelModule.greenPaletteColorLookupTableDescriptor\n );\n imagePixelModule.bluePaletteColorLookupTableData = getLutData(\n dataSet,\n 'x00281203',\n imagePixelModule.bluePaletteColorLookupTableDescriptor\n );\n}\n\nfunction populateSmallestLargestPixelValues(dataSet, imagePixelModule) {\n const pixelRepresentation = dataSet.uint16('x00280103');\n\n if (pixelRepresentation === 0) {\n imagePixelModule.smallestPixelValue = dataSet.uint16('x00280106');\n imagePixelModule.largestPixelValue = dataSet.uint16('x00280107');\n } else {\n imagePixelModule.smallestPixelValue = dataSet.int16('x00280106');\n imagePixelModule.largestPixelValue = dataSet.int16('x00280107');\n }\n}\n\nfunction getImagePixelModule(dataSet) {\n const imagePixelModule = {\n samplesPerPixel: dataSet.uint16('x00280002'),\n photometricInterpretation: dataSet.string('x00280004'),\n rows: dataSet.uint16('x00280010'),\n columns: dataSet.uint16('x00280011'),\n bitsAllocated: dataSet.uint16('x00280100'),\n bitsStored: dataSet.uint16('x00280101'),\n highBit: dataSet.uint16('x00280102'),\n pixelRepresentation: dataSet.uint16('x00280103'),\n planarConfiguration: dataSet.uint16('x00280006'),\n pixelAspectRatio: dataSet.string('x00280034'),\n };\n\n populateSmallestLargestPixelValues(dataSet, imagePixelModule);\n\n if (\n imagePixelModule.photometricInterpretation === 'PALETTE COLOR' &&\n dataSet.elements.x00281101\n ) {\n populatePaletteColorLut(dataSet, imagePixelModule);\n }\n\n return imagePixelModule;\n}\n\nexport default getImagePixelModule;\n","function getLUT(pixelRepresentation, lutDataSet) {\n let numLUTEntries = lutDataSet.uint16('x00283002', 0);\n\n if (numLUTEntries === 0) {\n numLUTEntries = 65535;\n }\n let firstValueMapped = 0;\n\n if (pixelRepresentation === 0) {\n firstValueMapped = lutDataSet.uint16('x00283002', 1);\n } else {\n firstValueMapped = lutDataSet.int16('x00283002', 1);\n }\n const numBitsPerEntry = lutDataSet.uint16('x00283002', 2);\n // console.log('LUT(', numLUTEntries, ',', firstValueMapped, ',', numBitsPerEntry, ')');\n const lut = {\n id: '1',\n firstValueMapped,\n numBitsPerEntry,\n lut: [],\n };\n\n // console.log(\"minValue=\", minValue, \"; maxValue=\", maxValue);\n for (let i = 0; i < numLUTEntries; i++) {\n if (pixelRepresentation === 0) {\n lut.lut[i] = lutDataSet.uint16('x00283006', i);\n } else {\n lut.lut[i] = lutDataSet.int16('x00283006', i);\n }\n }\n\n return lut;\n}\n\nfunction getLUTs(pixelRepresentation, lutSequence) {\n if (!lutSequence || !lutSequence.items || !lutSequence.items.length) {\n return;\n }\n const luts = [];\n\n for (let i = 0; i < lutSequence.items.length; i++) {\n const lutDataSet = lutSequence.items[i].dataSet;\n const lut = getLUT(pixelRepresentation, lutDataSet);\n\n if (lut) {\n luts.push(lut);\n }\n }\n\n return luts;\n}\n\nexport default getLUTs;\n","/* eslint no-bitwise: 0 */\n\nfunction getMinStoredPixelValue(dataSet) {\n const pixelRepresentation = dataSet.uint16('x00280103');\n const bitsStored = dataSet.uint16('x00280101');\n\n if (pixelRepresentation === 0) {\n return 0;\n }\n\n return -1 << (bitsStored - 1);\n}\n\n// 0 = unsigned / US, 1 = signed / SS\nfunction getModalityLUTOutputPixelRepresentation(dataSet) {\n // CT SOP Classes are always signed\n const sopClassUID = dataSet.string('x00080016');\n\n if (\n sopClassUID === '1.2.840.10008.5.1.4.1.1.2' ||\n sopClassUID === '1.2.840.10008.5.1.4.1.1.2.1'\n ) {\n return 1;\n }\n\n // if rescale intercept and rescale slope are present, pass the minimum stored\n // pixel value through them to see if we get a signed output range\n const rescaleIntercept = dataSet.floatString('x00281052');\n const rescaleSlope = dataSet.floatString('x00281053');\n\n if (rescaleIntercept !== undefined && rescaleSlope !== undefined) {\n const minStoredPixelValue = getMinStoredPixelValue(dataSet); //\n const minModalityLutValue =\n minStoredPixelValue * rescaleSlope + rescaleIntercept;\n\n if (minModalityLutValue < 0) {\n return 1;\n }\n\n return 0;\n }\n\n // Output of non linear modality lut is always unsigned\n if (dataSet.elements.x00283000 && dataSet.elements.x00283000.length > 0) {\n return 0;\n }\n\n // If no modality lut transform, output is same as pixel representation\n return dataSet.uint16('x00280103');\n}\n\nexport default getModalityLUTOutputPixelRepresentation;\n","function getNumberValues(dataSet, tag, minimumLength) {\n const values = [];\n const valueAsString = dataSet.string(tag);\n\n if (!valueAsString) {\n return;\n }\n const split = valueAsString.split('\\\\');\n\n if (minimumLength && split.length < minimumLength) {\n return;\n }\n for (let i = 0; i < split.length; i++) {\n values.push(parseFloat(split[i]));\n }\n\n return values;\n}\n\nexport default getNumberValues;\n","/**\n * Returns the raw value\n *\n * @param element - The javascript object for the specified element in the metadata\n * @param [index] - the index of the value in a multi-valued element, default is 0\n * @param [defaultValue] - The default value to return if the element does not exist\n * @returns {*}\n */\nfunction getValue(element, index, defaultValue) {\n index = index || 0;\n if (!element) {\n return defaultValue;\n }\n // Value is not present if the attribute has a zero length value\n if (!element.Value) {\n return defaultValue;\n }\n // make sure we have the specified index\n if (element.Value.length <= index) {\n return defaultValue;\n }\n\n return element.Value[index];\n}\n\nexport default getValue;\n","import getValue from './getValue.js';\n\nfunction getNumberValue(element, index) {\n const value = getValue(element, index);\n\n if (value === undefined) {\n return;\n }\n\n return parseFloat(value);\n}\n\nexport default getNumberValue;\n","/**\n * Returns the values as an array of javascript numbers\n *\n * @param element - The javascript object for the specified element in the metadata\n * @param [minimumLength] - the minimum number of values\n * @returns {*}\n */\nfunction getNumberValues(element, minimumLength) {\n if (!element) {\n return;\n }\n // Value is not present if the attribute has a zero length value\n if (!element.Value) {\n return;\n }\n // make sure we have the expected length\n if (minimumLength && element.Value.length < minimumLength) {\n return;\n }\n\n const values = [];\n\n for (let i = 0; i < element.Value.length; i++) {\n values.push(parseFloat(element.Value[i]));\n }\n\n return values;\n}\n\nexport default getNumberValues;\n","/**\n * Removes the data loader scheme from the imageId\n *\n * @param {string} imageId Image ID\n * @returns {string} imageId without the data loader scheme\n * @memberof Cache\n */\nexport default function imageIdToURI(imageId) {\n const colonIndex = imageId.indexOf(':');\n\n return imageId.substring(colonIndex + 1);\n}\n","import imageIdToURI from '../imageIdToURI.js';\n\nlet metadataByImageURI = [];\n\nfunction add(imageId, metadata) {\n const imageURI = imageIdToURI(imageId);\n\n metadataByImageURI[imageURI] = metadata;\n}\n\nfunction get(imageId) {\n const imageURI = imageIdToURI(imageId);\n\n return metadataByImageURI[imageURI];\n}\n\nfunction remove(imageId) {\n const imageURI = imageIdToURI(imageId);\n\n metadataByImageURI[imageURI] = undefined;\n}\n\nfunction purge() {\n metadataByImageURI = [];\n}\n\nexport default {\n add,\n get,\n remove,\n purge,\n};\n","import external from '../../../externalModules.js';\nimport getNumberValues from './getNumberValues.js';\nimport getValue from './getValue.js';\nimport getNumberValue from './getNumberValue.js';\nimport getOverlayPlaneModule from './getOverlayPlaneModule.js';\nimport metaDataManager from '../metaDataManager.js';\n\nfunction metaDataProvider(type, imageId) {\n const { dicomParser } = external;\n const metaData = metaDataManager.get(imageId);\n\n if (!metaData) {\n return;\n }\n\n if (type === 'generalSeriesModule') {\n return {\n modality: getValue(metaData['00080060']),\n seriesInstanceUID: getValue(metaData['0020000E']),\n seriesNumber: getNumberValue(metaData['00200011']),\n studyInstanceUID: getValue(metaData['0020000D']),\n seriesDate: dicomParser.parseDA(getValue(metaData['00080021'])),\n seriesTime: dicomParser.parseTM(getValue(metaData['00080031'], 0, '')),\n acquisitionDate: dicomParser.parseDA(getValue(metaData['00080022']), ''),\n acquisitionTime: dicomParser.parseTM(\n getValue(metaData['00080032'], 0, '')\n ),\n };\n }\n\n if (type === 'patientStudyModule') {\n return {\n patientAge: getNumberValue(metaData['00101010']),\n patientSize: getNumberValue(metaData['00101020']),\n patientSex: getValue(metaData['00100040']),\n patientWeight: getNumberValue(metaData['00101030']),\n };\n }\n\n if (type === 'imagePlaneModule') {\n const imageOrientationPatient = getNumberValues(metaData['00200037'], 6);\n const imagePositionPatient = getNumberValues(metaData['00200032'], 3);\n const pixelSpacing = getNumberValues(metaData['00280030'], 2);\n\n let columnPixelSpacing = null;\n\n let rowPixelSpacing = null;\n\n if (pixelSpacing) {\n rowPixelSpacing = pixelSpacing[0];\n columnPixelSpacing = pixelSpacing[1];\n }\n\n let rowCosines = null;\n\n let columnCosines = null;\n\n if (imageOrientationPatient) {\n rowCosines = [\n parseFloat(imageOrientationPatient[0]),\n parseFloat(imageOrientationPatient[1]),\n parseFloat(imageOrientationPatient[2]),\n ];\n columnCosines = [\n parseFloat(imageOrientationPatient[3]),\n parseFloat(imageOrientationPatient[4]),\n parseFloat(imageOrientationPatient[5]),\n ];\n }\n\n return {\n frameOfReferenceUID: getValue(metaData['00200052']),\n rows: getNumberValue(metaData['00280010']),\n columns: getNumberValue(metaData['00280011']),\n imageOrientationPatient,\n rowCosines,\n columnCosines,\n imagePositionPatient,\n sliceThickness: getNumberValue(metaData['00180050']),\n sliceLocation: getNumberValue(metaData['00201041']),\n pixelSpacing,\n rowPixelSpacing,\n columnPixelSpacing,\n };\n }\n\n if (type === 'imagePixelModule') {\n return {\n samplesPerPixel: getNumberValue(metaData['00280002']),\n photometricInterpretation: getValue(metaData['00280004']),\n rows: getNumberValue(metaData['00280010']),\n columns: getNumberValue(metaData['00280011']),\n bitsAllocated: getNumberValue(metaData['00280100']),\n bitsStored: getNumberValue(metaData['00280101']),\n highBit: getValue(metaData['00280102']),\n pixelRepresentation: getNumberValue(metaData['00280103']),\n planarConfiguration: getNumberValue(metaData['00280006']),\n pixelAspectRatio: getValue(metaData['00280034']),\n smallestPixelValue: getNumberValue(metaData['00280106']),\n largestPixelValue: getNumberValue(metaData['00280107']),\n redPaletteColorLookupTableDescriptor: getNumberValues(\n metaData['00281101']\n ),\n greenPaletteColorLookupTableDescriptor: getNumberValues(\n metaData['00281102']\n ),\n bluePaletteColorLookupTableDescriptor: getNumberValues(\n metaData['00281103']\n ),\n redPaletteColorLookupTableData: getNumberValues(metaData['00281201']),\n greenPaletteColorLookupTableData: getNumberValues(metaData['00281202']),\n bluePaletteColorLookupTableData: getNumberValues(metaData['00281203']),\n };\n }\n\n if (type === 'voiLutModule') {\n return {\n // TODO VOT LUT Sequence\n windowCenter: getNumberValues(metaData['00281050'], 1),\n windowWidth: getNumberValues(metaData['00281051'], 1),\n };\n }\n\n if (type === 'modalityLutModule') {\n return {\n // TODO VOT LUT Sequence\n rescaleIntercept: getNumberValue(metaData['00281052']),\n rescaleSlope: getNumberValue(metaData['00281053']),\n rescaleType: getValue(metaData['00281054']),\n };\n }\n\n if (type === 'sopCommonModule') {\n return {\n sopClassUID: getValue(metaData['00080016']),\n sopInstanceUID: getValue(metaData['00080018']),\n };\n }\n\n if (type === 'petIsotopeModule') {\n const radiopharmaceuticalInfo = getValue(metaData['00540016']);\n\n if (radiopharmaceuticalInfo === undefined) {\n return;\n }\n\n return {\n radiopharmaceuticalInfo: {\n radiopharmaceuticalStartTime: dicomParser.parseTM(\n getValue(radiopharmaceuticalInfo['00181072'], 0, '')\n ),\n radionuclideTotalDose: getNumberValue(\n radiopharmaceuticalInfo['00181074']\n ),\n radionuclideHalfLife: getNumberValue(\n radiopharmaceuticalInfo['00181075']\n ),\n },\n };\n }\n\n if (type === 'overlayPlaneModule') {\n return getOverlayPlaneModule(metaData);\n }\n\n // Note: this is not a DICOM module, but a useful metadata that can be\n // retrieved from the image\n if (type === 'transferSyntax') {\n return {\n transferSyntaxUID: getValue(metaData['00020010']),\n };\n }\n\n if (type === 'petSeriesModule') {\n return {\n correctedImage: getValue(metaData['00280051']),\n units: getValue(metaData['00541001']),\n decayCorrection: getValue(metaData['00541102']),\n };\n }\n\n if (type === 'petImageModule') {\n return {\n frameReferenceTime: getNumberValue(metaData['00541300']),\n actualFrameDuration: getNumberValue(metaData['00181242']),\n };\n }\n}\n\nexport default metaDataProvider;\n","import getValue from './getValue.js';\nimport getNumberValue from './getNumberValue.js';\n\nexport default function getOverlayPlaneModule(metaData) {\n const overlays = [];\n\n for (let overlayGroup = 0x00; overlayGroup <= 0x1e; overlayGroup += 0x02) {\n let groupStr = `x60${overlayGroup.toString(16)}`;\n\n if (groupStr.length === 4) {\n groupStr = `x600${overlayGroup.toString(16)}`;\n }\n\n const data = getValue(metaData[`${groupStr}3000`]);\n\n if (!data) {\n continue;\n }\n\n const pixelData = [];\n\n for (let i = 0; i < data.length; i++) {\n for (let k = 0; k < 8; k++) {\n const byte_as_int = metaData.Value[data.dataOffset + i];\n\n pixelData[i * 8 + k] = (byte_as_int >> k) & 0b1; // eslint-disable-line no-bitwise\n }\n }\n\n overlays.push({\n rows: getNumberValue(metaData[`${groupStr}0010`]),\n columns: getNumberValue(metaData[`${groupStr}0011`]),\n type: getValue(metaData[`${groupStr}0040`]),\n x: getNumberValue(metaData[`${groupStr}0050`], 1) - 1,\n y: getNumberValue(metaData[`${groupStr}0050`], 0) - 1,\n pixelData,\n description: getValue(metaData[`${groupStr}0022`]),\n label: getValue(metaData[`${groupStr}1500`]),\n roiArea: getValue(metaData[`${groupStr}1301`]),\n roiMean: getValue(metaData[`${groupStr}1302`]),\n roiStandardDeviation: getValue(metaData[`${groupStr}1303`]),\n });\n }\n\n return {\n overlays,\n };\n}\n","function checkToken(token, data, dataOffset) {\n if (dataOffset + token.length > data.length) {\n return false;\n }\n\n let endIndex = dataOffset;\n\n for (let i = 0; i < token.length; i++) {\n if (token[i] !== data[endIndex++]) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction stringToUint8Array(str) {\n const uint = new Uint8Array(str.length);\n\n for (let i = 0, j = str.length; i < j; i++) {\n uint[i] = str.charCodeAt(i);\n }\n\n return uint;\n}\n\nfunction findIndexOfString(data, str, offset) {\n offset = offset || 0;\n\n const token = stringToUint8Array(str);\n\n for (let i = offset; i < data.length; i++) {\n if (token[0] === data[i]) {\n // console.log('match @', i);\n if (checkToken(token, data, i)) {\n return i;\n }\n }\n }\n\n return -1;\n}\nexport default findIndexOfString;\n","import localforage from 'localforage';\nimport external from '../../externalModules.js';\n\nwindow.localforage = localforage;\n\nclass CachePoolAPIManager {\n constructor() {\n // key - [byte estimates]\n this.pool = {};\n this.grabTimeout = null;\n }\n\n /**\n * Takes a key + size. After a set amount of time (10ms)\n * reduce sum the key size and set in localforage.\n */\n saveLocalForagePool() {\n const pool = JSON.parse(JSON.stringify(this.pool));\n\n this.pool = {};\n const reducedPool = Object.keys(pool).reduce((prev, key) => {\n prev[key] = pool[key].reduce((b, a) => b + a, 0);\n\n return prev;\n }, {});\n\n const updateLocalForage = () =>\n Object.keys(reducedPool).map((key) =>\n localforage.getItem(key).then((obj) => {\n if (!obj) {\n obj = {\n date: null,\n byteLengthEstimate: 0,\n };\n }\n obj.date = new Date();\n obj.byteLengthEstimate += reducedPool[key];\n\n return localforage.setItem(key, obj);\n })\n );\n\n const allPromises = Promise.all(updateLocalForage());\n\n allPromises.catch(async (error) => {\n external.cornerstone.triggerEvent(\n external.cornerstone.events,\n 'CORNERSTONE_LOCALFORAGE_WRITE_FAILURE',\n {\n error,\n localforage,\n scopes: Object.keys(pool),\n retry: () => Promise.all(updateLocalForage()),\n }\n );\n });\n\n return allPromises;\n }\n\n addToLocalForagePool(key, value) {\n clearTimeout(this.grabTimeout);\n this.grabTimeout = setTimeout(this.saveLocalForagePool.bind(this), 100);\n if (!this.pool[key]) {\n this.pool[key] = [];\n }\n this.pool[key].push(value);\n }\n\n removeFromLocalForagePool(key, value) {\n clearTimeout(this.grabTimeout);\n this.grabTimeout = setTimeout(this.saveLocalForagePool.bind(this), 100);\n if (!this.pool[key]) {\n this.pool[key] = [];\n }\n this.pool[key].push(-1 * value);\n }\n}\n\nconst cachePoolAPIManager = new CachePoolAPIManager();\n\nconst getScope = ({ url }) => {\n /**\n * getScope takes in a url and returns a string representing a cache\n * scope. For instance, dicom series uid is a scope. This allows the\n * cacheAPI to remove related dicoms with one command.\n */\n const isDicomWeb = url.split('series/');\n\n if (isDicomWeb.length === 1) {\n return 'default-cornerstone-WADO-cache';\n }\n const scope = `${isDicomWeb[0]}series/${isDicomWeb[1].split('/')[0]}`;\n\n return scope;\n};\n\nconst writeCacheProxy = (xhr) => {\n // open cache based on url scoping this allows efficient cache deletion\n // using: window.caches.delete(scope);\n if (!window.caches) {\n return;\n }\n\n const scope = getScope({ url: xhr.responseURL });\n const cacheLogic = (cache, scope, xhr) => {\n const getXHRJSONHeaders = (xhr) => {\n // Mock headers of response object\n const headers = xhr.getAllResponseHeaders().split('\\r\\n');\n\n headers.pop(); // remove empty \"\"\n\n return headers.reduce((prev, h) => {\n const [key, value] = h.split(':');\n\n prev[key] = value.trim();\n\n return prev;\n }, {});\n };\n\n const res = new Response(xhr.response, {\n headers: getXHRJSONHeaders(xhr),\n });\n\n const triggerQuotaError = () => {\n const error = new DOMError('QuotaExceededError');\n\n external.cornerstone.triggerEvent(\n external.cornerstone.events,\n 'CORNERSTONE_CACHE_QUOTA_EXCEEDED_ERROR',\n {\n error,\n xhr,\n scope,\n cache,\n cachePoolAPIManager,\n localforage,\n retry: () => cacheLogic(cache, scope, xhr),\n }\n );\n\n return error;\n };\n\n return new Promise((resolve, reject) => {\n cache\n .put(xhr.responseURL, res)\n .then(() => {\n cachePoolAPIManager.addToLocalForagePool(\n scope,\n xhr.response.byteLength\n );\n resolve();\n })\n .catch((error) => {\n if (error.name === 'QuotaExceededError') {\n triggerQuotaError();\n }\n reject(error);\n });\n });\n };\n\n window.caches.open(scope).then((cache) => {\n cacheLogic(cache, scope, xhr);\n });\n};\n\nconst readCacheProxy = async (xhr, url, resolve) => {\n // open cache based on url scoping this allows efficient cache deletion\n // using: window.caches.delete(scope);\n const scope = getScope({ url });\n\n if (!window.caches) {\n return false;\n }\n\n try {\n const cache = await window.caches.open(scope);\n const res = await cache.match(url, {\n ignoreVary: true,\n ignoreMethod: true,\n ignoreSearch: true,\n });\n\n if (!res) {\n return false;\n }\n\n xhr.getResponseHeader = (name) => res.headers.get(name);\n resolve(res.arrayBuffer());\n\n return true;\n } catch (e) {\n console.error(e);\n\n return false;\n }\n};\n\nexport { writeCacheProxy, readCacheProxy, getScope };\n\n/**\n * Handling a cache overflow\n *\n * Today cache overflows are default silent. However, we fire the following events in the case\n * of a cache overflow:\n *\n * CORNERSTONE_CACHE_QUOTA_EXCEEDED_ERROR\n * CORNERSTONE_DUMMY_QUOTA_EXCEEDED_ERROR\n * CORNERSTONE_LOCALFORAGE_WRITE_FAILURE\n *\n * Localforage is used to keep track of an index of cache size + last access time\n * Localforage contains a 5MB dummy which is deleted in the case there is no space left on device, this allows\n * for proper syncing. If localforage fails to write a CORNERSTONE_LOCALFORAGE_WRITE_FAILURE is triggered.\n *\n * In the future, it may be easier to store a list of images which have been \"user accessed\". Regardless of size.\n * This would serve as the shortlist of cache keys to be deleted.\n *\n * This means we need to trigger the xhrRequest function with a \"background\" and \"foreground\" mode.\n * The background mode means the downloads are simply storing network calls and user is not viewing them\n * foreground is the default behaviour.\n *\n */\n","import {\n writeCacheProxy,\n readCacheProxy,\n getScope,\n} from './browserCacheAPIManager.js';\n\nlet options = {\n // callback to open the object\n open(xhr, url) {\n xhr.open('get', url, true);\n },\n // callback allowing customization of the xhr (e.g. adding custom auth headers, cors, etc)\n beforeSend(/* xhr, imageId */) {},\n // callback allowing modification of the xhr response before creating image objects\n beforeProcessing(xhr) {\n if (this.writeCache) {\n writeCacheProxy(xhr);\n }\n\n return Promise.resolve(xhr.response);\n },\n // callback allowing modification of newly created image objects\n imageCreated(/* image */) {},\n strict: false,\n decodeConfig: {\n convertFloatPixelDataToInt: true,\n use16BitDataType: true,\n },\n readCache: true,\n writeCache: true, // only write for prefetch\n cache: {\n getScope,\n readCacheProxy,\n writeCacheProxy,\n },\n};\n\nexport function setOptions(newOptions) {\n options = Object.assign(options, newOptions);\n}\n\nexport function getOptions() {\n return options;\n}\n","import external from '../../externalModules.js';\nimport { getOptions } from './options.js';\n\nfunction xhrRequest(\n url,\n imageId,\n defaultHeaders = {},\n params = {},\n customOptions = null\n) {\n const { cornerstone } = external;\n const options = customOptions || getOptions();\n\n const errorInterceptor = (xhr) => {\n if (typeof options.errorInterceptor === 'function') {\n const error = new Error('request failed');\n\n error.request = xhr;\n error.response = xhr.response;\n error.status = xhr.status;\n options.errorInterceptor(error);\n }\n };\n\n // Make the request for the DICOM P10 SOP Instance\n const xhr = new XMLHttpRequest();\n const promise = new Promise((resolve, reject) => {\n options.open(xhr, url, defaultHeaders, params);\n const beforeSendHeaders = options.beforeSend(\n xhr,\n imageId,\n defaultHeaders,\n params\n );\n\n xhr.responseType = 'arraybuffer';\n\n const headers = Object.assign({}, defaultHeaders, beforeSendHeaders);\n\n Object.keys(headers).forEach(function (key) {\n if (headers[key] === null) {\n return;\n }\n if (key === 'Accept' && url.indexOf('accept=') !== -1) {\n return;\n }\n xhr.setRequestHeader(key, headers[key]);\n });\n\n params.deferred = {\n resolve,\n reject,\n };\n params.url = url;\n params.imageId = imageId;\n\n // Event triggered when downloading an image starts\n xhr.onloadstart = function (event) {\n // Action\n if (options.onloadstart) {\n options.onloadstart(event, params);\n }\n\n // Event\n const eventData = {\n url,\n imageId,\n };\n\n cornerstone.triggerEvent(\n cornerstone.events,\n 'cornerstoneimageloadstart',\n eventData\n );\n };\n\n // Event triggered when downloading an image ends\n xhr.onloadend = function (event) {\n // Action\n if (options.onloadend) {\n options.onloadend(event, params);\n }\n\n const eventData = {\n url,\n imageId,\n };\n\n // Event\n cornerstone.triggerEvent(\n cornerstone.events,\n 'cornerstoneimageloadend',\n eventData\n );\n };\n\n // handle response data\n xhr.onreadystatechange = function (event) {\n // Action\n if (options.onreadystatechange) {\n options.onreadystatechange(event, params);\n\n return;\n }\n\n // Default action\n // TODO: consider sending out progress messages here as we receive\n // the pixel data\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n options\n .beforeProcessing(xhr)\n .then(resolve)\n .catch(() => {\n errorInterceptor(xhr);\n // request failed, reject the Promise\n reject(xhr);\n });\n } else {\n errorInterceptor(xhr);\n // request failed, reject the Promise\n reject(xhr);\n }\n }\n };\n\n // Event triggered when downloading an image progresses\n xhr.onprogress = function (oProgress) {\n // console.log('progress:',oProgress)\n const loaded = oProgress.loaded; // evt.loaded the bytes browser receive\n\n let total;\n\n let percentComplete;\n\n if (oProgress.lengthComputable) {\n total = oProgress.total; // evt.total the total bytes seted by the header\n percentComplete = Math.round((loaded / total) * 100);\n }\n\n // Action\n if (options.onprogress) {\n options.onprogress(oProgress, params);\n }\n\n // Event\n const eventData = {\n url,\n imageId,\n loaded,\n total,\n percentComplete,\n };\n\n cornerstone.triggerEvent(\n cornerstone.events,\n cornerstone.EVENTS.IMAGE_LOAD_PROGRESS,\n eventData\n );\n };\n xhr.onerror = function () {\n errorInterceptor(xhr);\n reject(xhr);\n };\n\n xhr.onabort = function () {\n errorInterceptor(xhr);\n reject(xhr);\n };\n\n if (options?.cache?.readCacheProxy && options.readCache) {\n options?.cache?.readCacheProxy(xhr, url, resolve).then((isCached) => {\n if (!isCached) {\n xhr.send();\n }\n });\n } else {\n xhr.send();\n }\n });\n\n promise.xhr = xhr;\n\n return promise;\n}\n\nexport default xhrRequest;\n","import { setOptions, getOptions } from './options.js';\nimport { default as xhrRequest } from './xhrRequest.js';\n\nconst internal = {\n xhrRequest,\n setOptions,\n getOptions,\n};\n\nexport { setOptions, getOptions, xhrRequest, internal };\n","import { xhrRequest } from '../internal/index.js';\nimport findIndexOfString from './findIndexOfString.js';\n\nfunction findBoundary(header) {\n for (let i = 0; i < header.length; i++) {\n if (header[i].substr(0, 2) === '--') {\n return header[i];\n }\n }\n}\n\nfunction findContentType(header) {\n for (let i = 0; i < header.length; i++) {\n if (header[i].substr(0, 13) === 'Content-Type:') {\n return header[i].substr(13).trim();\n }\n }\n}\n\nfunction uint8ArrayToString(data, offset, length) {\n offset = offset || 0;\n length = length || data.length - offset;\n let str = '';\n\n for (let i = offset; i < offset + length; i++) {\n str += String.fromCharCode(data[i]);\n }\n\n return str;\n}\n\nfunction getPixelData(uri, imageId, mediaType = 'application/octet-stream') {\n const headers = {\n Accept: mediaType,\n };\n\n return new Promise((resolve, reject) => {\n const loadPromise = xhrRequest(uri, imageId, headers);\n const { xhr } = loadPromise;\n\n loadPromise.then(function (imageFrameAsArrayBuffer) {\n // request succeeded, Parse the multi-part mime response\n const response = new Uint8Array(imageFrameAsArrayBuffer);\n\n const contentType =\n xhr.getResponseHeader('Content-Type') || 'application/octet-stream';\n\n if (contentType.indexOf('multipart') === -1) {\n resolve({\n contentType,\n imageFrame: {\n pixelData: response,\n },\n });\n\n return;\n }\n\n // First look for the multipart mime header\n const tokenIndex = findIndexOfString(response, '\\r\\n\\r\\n');\n\n if (tokenIndex === -1) {\n reject(new Error('invalid response - no multipart mime header'));\n }\n const header = uint8ArrayToString(response, 0, tokenIndex);\n // Now find the boundary marker\n const split = header.split('\\r\\n');\n const boundary = findBoundary(split);\n\n if (!boundary) {\n reject(new Error('invalid response - no boundary marker'));\n }\n const offset = tokenIndex + 4; // skip over the \\r\\n\\r\\n\n\n // find the terminal boundary marker\n const endIndex = findIndexOfString(response, boundary, offset);\n\n if (endIndex === -1) {\n reject(new Error('invalid response - terminating boundary not found'));\n }\n\n // Remove \\r\\n from the length\n const length = endIndex - offset - 2;\n\n // return the info for this pixel data\n resolve({\n contentType: findContentType(split),\n imageFrame: {\n pixelData: new Uint8Array(imageFrameAsArrayBuffer, offset, length),\n },\n });\n }, reject);\n });\n}\n\nexport default getPixelData;\n","import _Object$defineProperty from \"@babel/runtime-corejs3/core-js/object/define-property\";\nexport default function _defineProperty(obj, key, value) {\n if (key in obj) {\n _Object$defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","import external from '../externalModules.js';\n\nfunction getImageFrame(imageId) {\n const { cornerstone } = external;\n const imagePixelModule = cornerstone.metaData.get(\n 'imagePixelModule',\n imageId\n );\n\n return {\n samplesPerPixel: imagePixelModule.samplesPerPixel,\n photometricInterpretation: imagePixelModule.photometricInterpretation,\n planarConfiguration: imagePixelModule.planarConfiguration,\n rows: imagePixelModule.rows,\n columns: imagePixelModule.columns,\n bitsAllocated: imagePixelModule.bitsAllocated,\n bitsStored: imagePixelModule.bitsStored,\n pixelRepresentation: imagePixelModule.pixelRepresentation, // 0 = unsigned,\n smallestPixelValue: imagePixelModule.smallestPixelValue,\n largestPixelValue: imagePixelModule.largestPixelValue,\n redPaletteColorLookupTableDescriptor:\n imagePixelModule.redPaletteColorLookupTableDescriptor,\n greenPaletteColorLookupTableDescriptor:\n imagePixelModule.greenPaletteColorLookupTableDescriptor,\n bluePaletteColorLookupTableDescriptor:\n imagePixelModule.bluePaletteColorLookupTableDescriptor,\n redPaletteColorLookupTableData:\n imagePixelModule.redPaletteColorLookupTableData,\n greenPaletteColorLookupTableData:\n imagePixelModule.greenPaletteColorLookupTableData,\n bluePaletteColorLookupTableData:\n imagePixelModule.bluePaletteColorLookupTableData,\n pixelData: undefined, // populated later after decoding\n };\n}\n\nexport default getImageFrame;\n","export default function Worker_fn() {\n return new Worker(__webpack_public_path__ + \"index.worker.min.worker.js\");\n}\n","// Not sure why but webpack isn't splitting this out unless we explicitly use worker-loader!\n// eslint-disable-next-line\n// import cornerstoneWADOImageLoaderWebWorker from 'worker-loader!../webWorker/index.worker.js';\nimport cornerstoneWADOImageLoaderWebWorker from '../webWorker/index.worker.js';\n\n// This is for the Webpack 5 approch but it's currently broken\n// so we will continue relying on worker-loader for now\n// https://github.com/webpack/webpack/issues/13899\n/* const cornerstoneWADOImageLoaderWebWorkerPath = new URL(\n '../webWorker/index.js',\n import.meta.url\n);*/\n\nimport { getOptions } from './internal/options.js';\n\n// the taskId to assign to the next task added via addTask()\nlet nextTaskId = 0;\n\n// array of queued tasks sorted with highest priority task first\nconst tasks = [];\n\n// array of web workers to dispatch decode tasks to\nconst webWorkers = [];\n\n// The options for CornerstoneWADOImageLoader\nconst options = getOptions();\n\nconst defaultConfig = {\n maxWebWorkers: navigator.hardwareConcurrency || 1,\n startWebWorkersOnDemand: true,\n webWorkerTaskPaths: [],\n taskConfiguration: {\n decodeTask: {\n initializeCodecsOnStartup: false,\n strict: options.strict,\n },\n },\n};\n\nlet config;\n\nconst statistics = {\n maxWebWorkers: 0,\n numWebWorkers: 0,\n numTasksQueued: 0,\n numTasksExecuting: 0,\n numTasksCompleted: 0,\n totalTaskTimeInMS: 0,\n totalTimeDelayedInMS: 0,\n};\n\n/**\n * Function to start a task on a web worker\n */\nfunction startTaskOnWebWorker() {\n // return immediately if no decode tasks to do\n if (!tasks.length) {\n return;\n }\n\n // look for a web worker that is ready\n for (let i = 0; i < webWorkers.length; i++) {\n if (webWorkers[i].status === 'ready') {\n // mark it as busy so tasks are not assigned to it\n webWorkers[i].status = 'busy';\n\n // get the highest priority task\n const task = tasks.shift();\n\n task.start = new Date().getTime();\n\n // update stats with how long this task was delayed (waiting in queue)\n const end = new Date().getTime();\n\n statistics.totalTimeDelayedInMS += end - task.added;\n\n // assign this task to this web worker and send the web worker\n // a message to execute it\n webWorkers[i].task = task;\n webWorkers[i].worker.postMessage(\n {\n taskType: task.taskType,\n workerIndex: i,\n data: task.data,\n },\n task.transferList\n );\n statistics.numTasksExecuting++;\n\n return;\n }\n }\n\n // if no available web workers and we haven't started max web workers, start a new one\n if (webWorkers.length < config.maxWebWorkers) {\n spawnWebWorker();\n }\n}\n\n/**\n * Function to handle a message from a web worker\n * @param msg\n */\nfunction handleMessageFromWorker(msg) {\n // console.log('handleMessageFromWorker', msg.data);\n if (msg.data.taskType === 'initialize') {\n webWorkers[msg.data.workerIndex].status = 'ready';\n startTaskOnWebWorker();\n } else {\n const start = webWorkers[msg.data.workerIndex].task.start;\n\n const action = msg.data.status === 'success' ? 'resolve' : 'reject';\n\n try {\n webWorkers[msg.data.workerIndex].task.deferred[action](msg.data.result);\n } catch (e) {\n // Do a catch here to ensure the web worker is available\n console.warn('Caught error delivering response', e);\n }\n\n webWorkers[msg.data.workerIndex].task = undefined;\n\n statistics.numTasksExecuting--;\n webWorkers[msg.data.workerIndex].status = 'ready';\n statistics.numTasksCompleted++;\n\n const end = new Date().getTime();\n\n statistics.totalTaskTimeInMS += end - start;\n\n startTaskOnWebWorker();\n }\n}\n\n/**\n * Spawns a new web worker\n */\nfunction spawnWebWorker() {\n // prevent exceeding maxWebWorkers\n if (webWorkers.length >= config.maxWebWorkers) {\n return;\n }\n\n // spawn the webworker\n const worker = new cornerstoneWADOImageLoaderWebWorker();\n\n // This is for the Webpack 5 approach but it's currently broken\n /* const worker = new Worker(cornerstoneWADOImageLoaderWebWorkerPath, {\n name: `cornerstoneWADOImageLoaderWebWorkerPath-${webWorkers.length + 1}`,\n type: 'module',\n });*/\n\n // const worker = new Worker(\n // './cornerstoneWADOImageLoaderWebWorker.bundle.min.js',\n // {\n // name: `cornerstoneWADOImageLoaderWebWorkerPath-${webWorkers.length + 1}`,\n // }\n // );\n\n webWorkers.push({\n worker,\n status: 'initializing',\n });\n worker.addEventListener('message', handleMessageFromWorker);\n worker.postMessage({\n taskType: 'initialize',\n workerIndex: webWorkers.length - 1,\n config,\n });\n}\n\n/**\n * Initialization function for the web worker manager - spawns web workers\n * @param configObject\n */\nfunction initialize(configObject) {\n configObject = configObject || defaultConfig;\n\n // prevent being initialized more than once\n if (config) {\n // throw new Error('WebWorkerManager already initialized');\n }\n\n config = configObject;\n\n config.maxWebWorkers =\n config.maxWebWorkers || navigator.hardwareConcurrency || 1;\n\n // Spawn new web workers\n if (!config.startWebWorkersOnDemand) {\n for (let i = 0; i < config.maxWebWorkers; i++) {\n spawnWebWorker();\n }\n }\n}\n\n/**\n * Terminate all running web workers.\n */\nfunction terminate() {\n for (let i = 0; i < webWorkers.length; i++) {\n webWorkers[i].worker.terminate();\n }\n webWorkers.length = 0;\n config = undefined;\n}\n\n/**\n * dynamically loads a web worker task\n * @param sourcePath\n * @param taskConfig\n */\nfunction loadWebWorkerTask(sourcePath, taskConfig) {\n // add it to the list of web worker tasks paths so on demand web workers\n // load this properly\n config.webWorkerTaskPaths.push(sourcePath);\n\n // if a task specific configuration is provided, merge it into the config\n if (taskConfig) {\n config.taskConfiguration = Object.assign(\n config.taskConfiguration,\n taskConfig\n );\n }\n\n // tell each spawned web worker to load this task\n for (let i = 0; i < webWorkers.length; i++) {\n webWorkers[i].worker.postMessage({\n taskType: 'loadWebWorkerTask',\n workerIndex: webWorkers.length - 1,\n sourcePath,\n config,\n });\n }\n}\n\n/**\n * Function to add a decode task to be performed\n *\n * @param taskType - the taskType for this task\n * @param data - data specific to the task\n * @param priority - optional priority of the task (defaults to 0), > 0 is higher, < 0 is lower\n * @param transferList - optional array of data to transfer to web worker\n * @returns {*}\n */\nfunction addTask(taskType, data, priority = 0, transferList) {\n if (!config) {\n initialize();\n }\n\n let deferred = {};\n const promise = new Promise((resolve, reject) => {\n deferred = {\n resolve,\n reject,\n };\n });\n\n // find the right spot to insert this decode task (based on priority)\n let i;\n\n for (i = 0; i < tasks.length; i++) {\n if (tasks[i].priority < priority) {\n break;\n }\n }\n\n const taskId = nextTaskId++;\n\n // insert the decode task at position i\n tasks.splice(i, 0, {\n taskId,\n taskType,\n status: 'ready',\n added: new Date().getTime(),\n data,\n deferred,\n priority,\n transferList,\n });\n\n // try to start a task on the web worker since we just added a new task and a web worker may be available\n startTaskOnWebWorker();\n\n return {\n taskId,\n promise,\n };\n}\n\n/**\n * Changes the priority of a queued task\n * @param taskId - the taskId to change the priority of\n * @param priority - priority of the task (defaults to 0), > 0 is higher, < 0 is lower\n * @returns boolean - true on success, false if taskId not found\n */\nfunction setTaskPriority(taskId, priority = 0) {\n // search for this taskId\n for (let i = 0; i < tasks.length; i++) {\n if (tasks[i].taskId === taskId) {\n // taskId found, remove it\n const task = tasks.splice(i, 1)[0];\n\n // set its priority\n task.priority = priority;\n\n // find the right spot to insert this decode task (based on priority)\n for (i = 0; i < tasks.length; i++) {\n if (tasks[i].priority < priority) {\n break;\n }\n }\n\n // insert the decode task at position i\n tasks.splice(i, 0, task);\n\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Cancels a queued task and rejects\n * @param taskId - the taskId to cancel\n * @param reason - optional reason the task was rejected\n * @returns boolean - true on success, false if taskId not found\n */\nfunction cancelTask(taskId, reason) {\n // search for this taskId\n for (let i = 0; i < tasks.length; i++) {\n if (tasks[i].taskId === taskId) {\n // taskId found, remove it\n const task = tasks.splice(i, 1);\n\n task.deferred.reject(reason);\n\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Function to return the statistics on running web workers\n * @returns object containing statistics\n */\nfunction getStatistics() {\n statistics.maxWebWorkers = config.maxWebWorkers;\n statistics.numWebWorkers = webWorkers.length;\n statistics.numTasksQueued = tasks.length;\n\n return statistics;\n}\n\nexport default {\n initialize,\n loadWebWorkerTask,\n addTask,\n getStatistics,\n setTaskPriority,\n cancelTask,\n webWorkers,\n terminate,\n};\n","/**\n * Calculate the minimum and maximum values in an Array\n *\n * @param {Number[]} storedPixelData\n * @return {{min: Number, max: Number}}\n */\nfunction getMinMax(storedPixelData) {\n // we always calculate the min max values since they are not always\n // present in DICOM and we don't want to trust them anyway as cornerstone\n // depends on us providing reliable values for these\n let min = storedPixelData[0];\n\n let max = storedPixelData[0];\n\n let storedPixel;\n const numPixels = storedPixelData.length;\n\n for (let index = 1; index < numPixels; index++) {\n storedPixel = storedPixelData[index];\n min = Math.min(min, storedPixel);\n max = Math.max(max, storedPixel);\n }\n\n return {\n min,\n max,\n };\n}\n\nexport default getMinMax;\n","import getMinMax from '../shared/getMinMax.js';\n\n/**\n * Special decoder for 8 bit jpeg that leverages the browser's built in JPEG decoder for increased performance\n */\n\nfunction arrayBufferToString(buffer) {\n return binaryToString(\n String.fromCharCode.apply(\n null,\n Array.prototype.slice.apply(new Uint8Array(buffer))\n )\n );\n}\n\nfunction binaryToString(binary) {\n let error;\n\n try {\n return decodeURIComponent(escape(binary));\n } catch (_error) {\n error = _error;\n if (error instanceof URIError) {\n return binary;\n }\n throw error;\n }\n}\n\nfunction decodeJPEGBaseline8BitColor(imageFrame, pixelData, canvas) {\n const start = new Date().getTime();\n const imgBlob = new Blob([pixelData], { type: 'image/jpeg' });\n\n return new Promise((resolve, reject) => {\n const fileReader = new FileReader();\n\n if (fileReader.readAsBinaryString === undefined) {\n fileReader.readAsArrayBuffer(imgBlob);\n } else {\n fileReader.readAsBinaryString(imgBlob); // doesn't work on IE11\n }\n\n fileReader.onload = function () {\n const img = new Image();\n\n img.onload = function () {\n canvas.height = img.height;\n canvas.width = img.width;\n imageFrame.rows = img.height;\n imageFrame.columns = img.width;\n const context = canvas.getContext('2d');\n\n context.drawImage(this, 0, 0);\n const imageData = context.getImageData(0, 0, img.width, img.height);\n const end = new Date().getTime();\n\n imageFrame.pixelData = imageData.data;\n imageFrame.imageData = imageData;\n imageFrame.decodeTimeInMS = end - start;\n\n // calculate smallest and largest PixelValue\n const minMax = getMinMax(imageFrame.pixelData);\n\n imageFrame.smallestPixelValue = minMax.min;\n imageFrame.largestPixelValue = minMax.max;\n\n resolve(imageFrame);\n };\n\n img.onerror = function (error) {\n reject(error);\n };\n\n if (fileReader.readAsBinaryString === undefined) {\n img.src = `data:image/jpeg;base64,${window.btoa(\n arrayBufferToString(fileReader.result)\n )}`;\n } else {\n img.src = `data:image/jpeg;base64,${window.btoa(fileReader.result)}`; // doesn't work on IE11\n }\n };\n\n fileReader.onerror = (e) => {\n reject(e);\n };\n });\n}\n\nexport default decodeJPEGBaseline8BitColor;\n","import webWorkerManager from './webWorkerManager.js';\nimport decodeJPEGBaseline8BitColor from './decodeJPEGBaseline8BitColor.js';\n\n// dicomParser requires pako for browser-side decoding of deflate transfer syntax\n// We only need one function though, so lets import that so we don't make our bundle\n// too large.\nimport { inflateRaw } from 'pako/lib/inflate.js';\n\nwindow.pako = { inflateRaw };\n\nfunction processDecodeTask(\n imageFrame,\n transferSyntax,\n pixelData,\n options,\n decodeConfig\n) {\n const priority = options.priority || undefined;\n const transferList = options.transferPixelData\n ? [pixelData.buffer]\n : undefined;\n\n return webWorkerManager.addTask(\n 'decodeTask',\n {\n imageFrame,\n transferSyntax,\n pixelData,\n options,\n decodeConfig,\n },\n priority,\n transferList\n ).promise;\n}\n\nfunction decodeImageFrame(\n imageFrame,\n transferSyntax,\n pixelData,\n canvas,\n options = {},\n decodeConfig\n) {\n switch (transferSyntax) {\n case '1.2.840.10008.1.2':\n // Implicit VR Little Endian\n return processDecodeTask(\n imageFrame,\n transferSyntax,\n pixelData,\n options,\n decodeConfig\n );\n case '1.2.840.10008.1.2.1':\n // Explicit VR Little Endian\n return processDecodeTask(\n imageFrame,\n transferSyntax,\n pixelData,\n options,\n decodeConfig\n );\n case '1.2.840.10008.1.2.2':\n // Explicit VR Big Endian (retired)\n return processDecodeTask(\n imageFrame,\n transferSyntax,\n pixelData,\n options,\n decodeConfig\n );\n case '1.2.840.10008.1.2.1.99':\n // Deflate transfer syntax (deflated by dicomParser)\n return processDecodeTask(\n imageFrame,\n transferSyntax,\n pixelData,\n options,\n decodeConfig\n );\n case '1.2.840.10008.1.2.5':\n // RLE Lossless\n return processDecodeTask(\n imageFrame,\n transferSyntax,\n pixelData,\n options,\n decodeConfig\n );\n case '1.2.840.10008.1.2.4.50':\n // JPEG Baseline lossy process 1 (8 bit)\n\n // Handle 8-bit JPEG Baseline color images using the browser's built-in\n // JPEG decoding\n if (\n imageFrame.bitsAllocated === 8 &&\n (imageFrame.samplesPerPixel === 3 || imageFrame.samplesPerPixel === 4)\n ) {\n return decodeJPEGBaseline8BitColor(imageFrame, pixelData, canvas);\n }\n\n return processDecodeTask(\n imageFrame,\n transferSyntax,\n pixelData,\n options,\n decodeConfig\n );\n case '1.2.840.10008.1.2.4.51':\n // JPEG Baseline lossy process 2 & 4 (12 bit)\n return processDecodeTask(\n imageFrame,\n transferSyntax,\n pixelData,\n options,\n decodeConfig\n );\n case '1.2.840.10008.1.2.4.57':\n // JPEG Lossless, Nonhierarchical (Processes 14)\n return processDecodeTask(\n imageFrame,\n transferSyntax,\n pixelData,\n options,\n decodeConfig\n );\n case '1.2.840.10008.1.2.4.70':\n // JPEG Lossless, Nonhierarchical (Processes 14 [Selection 1])\n return processDecodeTask(\n imageFrame,\n transferSyntax,\n pixelData,\n options,\n decodeConfig\n );\n case '1.2.840.10008.1.2.4.80':\n // JPEG-LS Lossless Image Compression\n return processDecodeTask(\n imageFrame,\n transferSyntax,\n pixelData,\n options,\n decodeConfig\n );\n case '1.2.840.10008.1.2.4.81':\n // JPEG-LS Lossy (Near-Lossless) Image Compression\n return processDecodeTask(\n imageFrame,\n transferSyntax,\n pixelData,\n options,\n decodeConfig\n );\n case '1.2.840.10008.1.2.4.90':\n // JPEG 2000 Lossless\n return processDecodeTask(\n imageFrame,\n transferSyntax,\n pixelData,\n options,\n decodeConfig\n );\n case '1.2.840.10008.1.2.4.91':\n // JPEG 2000 Lossy\n return processDecodeTask(\n imageFrame,\n transferSyntax,\n pixelData,\n options,\n decodeConfig\n );\n\n case '3.2.840.10008.1.2.4.96':\n // HTJ2K\n return processDecodeTask(\n imageFrame,\n transferSyntax,\n pixelData,\n options,\n decodeConfig\n );\n }\n\n /* Don't know if these work...\n // JPEG 2000 Part 2 Multicomponent Image Compression (Lossless Only)\n else if(transferSyntax === \"1.2.840.10008.1.2.4.92\")\n {\n return cornerstoneWADOImageLoader.decodeJPEG2000(dataSet, frame);\n }\n // JPEG 2000 Part 2 Multicomponent Image Compression\n else if(transferSyntax === \"1.2.840.10008.1.2.4.93\")\n {\n return cornerstoneWADOImageLoader.decodeJPEG2000(dataSet, frame);\n }\n */\n\n return Promise.reject(\n new Error(`No decoder for transfer syntax ${transferSyntax}`)\n );\n}\n\nexport default decodeImageFrame;\n","export default function (photoMetricInterpretation) {\n return (\n photoMetricInterpretation === 'RGB' ||\n photoMetricInterpretation === 'PALETTE COLOR' ||\n photoMetricInterpretation === 'YBR_FULL' ||\n photoMetricInterpretation === 'YBR_FULL_422' ||\n photoMetricInterpretation === 'YBR_PARTIAL_422' ||\n photoMetricInterpretation === 'YBR_PARTIAL_420' ||\n photoMetricInterpretation === 'YBR_RCT' ||\n photoMetricInterpretation === 'YBR_ICT'\n );\n}\n","import {\n convertRGBColorByPixel,\n convertRGBColorByPlane,\n convertYBRFullByPixel,\n convertYBRFull422ByPixel,\n convertYBRFullByPlane,\n convertPALETTECOLOR,\n} from './colorSpaceConverters/index.js';\n\nfunction convertRGB(imageFrame, colorBuffer, useRGBA) {\n if (imageFrame.planarConfiguration === 0) {\n convertRGBColorByPixel(imageFrame.pixelData, colorBuffer, useRGBA);\n } else {\n convertRGBColorByPlane(imageFrame.pixelData, colorBuffer, useRGBA);\n }\n}\n\nfunction convertYBRFull(imageFrame, colorBuffer, useRGBA) {\n if (imageFrame.planarConfiguration === 0) {\n convertYBRFullByPixel(imageFrame.pixelData, colorBuffer, useRGBA);\n } else {\n convertYBRFullByPlane(imageFrame.pixelData, colorBuffer, useRGBA);\n }\n}\n\nexport default function convertColorSpace(imageFrame, colorBuffer, useRGBA) {\n // convert based on the photometric interpretation\n if (imageFrame.photometricInterpretation === 'RGB') {\n convertRGB(imageFrame, colorBuffer, useRGBA);\n } else if (imageFrame.photometricInterpretation === 'YBR_RCT') {\n convertRGB(imageFrame, colorBuffer, useRGBA);\n } else if (imageFrame.photometricInterpretation === 'YBR_ICT') {\n convertRGB(imageFrame, colorBuffer, useRGBA);\n } else if (imageFrame.photometricInterpretation === 'PALETTE COLOR') {\n convertPALETTECOLOR(imageFrame, colorBuffer, useRGBA);\n } else if (imageFrame.photometricInterpretation === 'YBR_FULL_422') {\n convertYBRFull422ByPixel(imageFrame.pixelData, colorBuffer, useRGBA);\n } else if (imageFrame.photometricInterpretation === 'YBR_FULL') {\n convertYBRFull(imageFrame, colorBuffer, useRGBA);\n } else {\n throw new Error(\n `No color space conversion for photometric interpretation ${imageFrame.photometricInterpretation}`\n );\n }\n}\n","export default function (imageFrame, colorBuffer, useRGBA) {\n if (imageFrame === undefined) {\n throw new Error('decodeRGB: ybrBuffer must not be undefined');\n }\n if (imageFrame.length % 2 !== 0) {\n throw new Error('decodeRGB: ybrBuffer length must be divisble by 3');\n }\n\n const numPixels = imageFrame.length / 2;\n\n let ybrIndex = 0;\n\n let bufferIndex = 0;\n\n if (useRGBA) {\n for (let i = 0; i < numPixels; i += 2) {\n const y1 = imageFrame[ybrIndex++];\n const y2 = imageFrame[ybrIndex++];\n const cb = imageFrame[ybrIndex++];\n const cr = imageFrame[ybrIndex++];\n\n colorBuffer[bufferIndex++] = y1 + 1.402 * (cr - 128); // red\n colorBuffer[bufferIndex++] =\n y1 - 0.34414 * (cb - 128) - 0.71414 * (cr - 128); // green\n colorBuffer[bufferIndex++] = y1 + 1.772 * (cb - 128); // blue\n colorBuffer[bufferIndex++] = 255; // alpha\n\n colorBuffer[bufferIndex++] = y2 + 1.402 * (cr - 128); // red\n colorBuffer[bufferIndex++] =\n y2 - 0.34414 * (cb - 128) - 0.71414 * (cr - 128); // green\n colorBuffer[bufferIndex++] = y2 + 1.772 * (cb - 128); // blue\n colorBuffer[bufferIndex++] = 255; // alpha\n }\n\n return;\n }\n\n for (let i = 0; i < numPixels; i += 2) {\n const y1 = imageFrame[ybrIndex++];\n const y2 = imageFrame[ybrIndex++];\n const cb = imageFrame[ybrIndex++];\n const cr = imageFrame[ybrIndex++];\n\n colorBuffer[bufferIndex++] = y1 + 1.402 * (cr - 128); // red\n colorBuffer[bufferIndex++] =\n y1 - 0.34414 * (cb - 128) - 0.71414 * (cr - 128); // green\n colorBuffer[bufferIndex++] = y1 + 1.772 * (cb - 128); // blue\n\n colorBuffer[bufferIndex++] = y2 + 1.402 * (cr - 128); // red\n colorBuffer[bufferIndex++] =\n y2 - 0.34414 * (cb - 128) - 0.71414 * (cr - 128); // green\n colorBuffer[bufferIndex++] = y2 + 1.772 * (cb - 128); // blue\n }\n}\n","function isJPEGBaseline8BitColor(imageFrame, transferSyntax) {\n transferSyntax = transferSyntax || imageFrame.transferSyntax;\n\n if (\n imageFrame.bitsAllocated === 8 &&\n transferSyntax === '1.2.840.10008.1.2.4.50' &&\n (imageFrame.samplesPerPixel === 3 || imageFrame.samplesPerPixel === 4)\n ) {\n return true;\n }\n}\n\nexport default isJPEGBaseline8BitColor;\n","/**\n * It returns the scaling parameters for the image with the given imageId. This can be\n * used to get passed (as an option) to the imageLoader in order to apply scaling to the image inside\n * the imageLoader.\n * @param imageId - The imageId of the image\n * @returns ScalingParameters\n */\nexport default function getScalingParameters(metaData, imageId) {\n const modalityLutModule = metaData.get('modalityLutModule', imageId) || {};\n\n const generalSeriesModule =\n metaData.get('generalSeriesModule', imageId) || {};\n\n const { modality } = generalSeriesModule;\n\n const scalingParameters = {\n rescaleSlope: modalityLutModule.rescaleSlope,\n rescaleIntercept: modalityLutModule.rescaleIntercept,\n modality,\n };\n\n const suvFactor = metaData.get('scalingModule', imageId) || {};\n\n return {\n ...scalingParameters,\n ...(modality === 'PT' && { suvbw: suvFactor.suvbw }),\n };\n}\n","import external from '../externalModules.js';\nimport getImageFrame from './getImageFrame.js';\nimport decodeImageFrame from './decodeImageFrame.js';\nimport isColorImageFn from './isColorImage.js';\nimport convertColorSpace from './convertColorSpace.js';\nimport getMinMax from '../shared/getMinMax.js';\nimport isJPEGBaseline8BitColor from './isJPEGBaseline8BitColor.js';\nimport { getOptions } from './internal/options.js';\nimport getScalingParameters from './getScalingParameters.js';\n\nlet lastImageIdDrawn = '';\n\nfunction isModalityLUTForDisplay(sopClassUid) {\n // special case for XA and XRF\n // https://groups.google.com/forum/#!searchin/comp.protocols.dicom/Modality$20LUT$20XA/comp.protocols.dicom/UBxhOZ2anJ0/D0R_QP8V2wIJ\n return (\n sopClassUid !== '1.2.840.10008.5.1.4.1.1.12.1' && // XA\n sopClassUid !== '1.2.840.10008.5.1.4.1.1.12.2.1'\n ); // XRF\n}\n\nfunction convertToIntPixelData(floatPixelData) {\n const floatMinMax = getMinMax(floatPixelData);\n const floatRange = Math.abs(floatMinMax.max - floatMinMax.min);\n const intRange = 65535;\n const slope = floatRange / intRange;\n const intercept = floatMinMax.min;\n const numPixels = floatPixelData.length;\n const intPixelData = new Uint16Array(numPixels);\n\n let min = 65535;\n\n let max = 0;\n\n for (let i = 0; i < numPixels; i++) {\n const rescaledPixel = Math.floor((floatPixelData[i] - intercept) / slope);\n\n intPixelData[i] = rescaledPixel;\n min = Math.min(min, rescaledPixel);\n max = Math.max(max, rescaledPixel);\n }\n\n return {\n min,\n max,\n intPixelData,\n slope,\n intercept,\n };\n}\n\n/**\n * Helper function to set pixel data to the right typed array. This is needed because web workers\n * can transfer array buffers but not typed arrays\n * @param imageFrame\n */\nfunction setPixelDataType(imageFrame) {\n if (imageFrame.bitsAllocated === 32) {\n imageFrame.pixelData = new Float32Array(imageFrame.pixelData);\n } else if (imageFrame.bitsAllocated === 16) {\n if (imageFrame.pixelRepresentation === 0) {\n imageFrame.pixelData = new Uint16Array(imageFrame.pixelData);\n } else {\n imageFrame.pixelData = new Int16Array(imageFrame.pixelData);\n }\n } else {\n imageFrame.pixelData = new Uint8Array(imageFrame.pixelData);\n }\n}\n\n/**\n * Removes the A from RGBA to return RGB buffer, this is used when the\n * decoding happens with browser API which results in RGBA, but if useRGBA flag\n * is set to false, we want to return RGB\n *\n * @param imageFrame - decoded image in RGBA\n * @param targetBuffer - target buffer to write to\n */\nfunction removeAFromRGBA(imageFrame, targetBuffer) {\n const numPixels = imageFrame.length / 4;\n\n let rgbIndex = 0;\n\n let bufferIndex = 0;\n\n for (let i = 0; i < numPixels; i++) {\n targetBuffer[bufferIndex++] = imageFrame[rgbIndex++]; // red\n targetBuffer[bufferIndex++] = imageFrame[rgbIndex++]; // green\n targetBuffer[bufferIndex++] = imageFrame[rgbIndex++]; // blue\n rgbIndex++; // skip alpha\n }\n\n return targetBuffer;\n}\n\nfunction createImage(imageId, pixelData, transferSyntax, options = {}) {\n // whether to use RGBA for color images, default true as cs-legacy uses RGBA\n // but we don't need RGBA in cs3d, and it's faster, and memory-efficient\n // in cs3d\n let useRGBA = true;\n\n if (options.useRGBA !== undefined) {\n useRGBA = options.useRGBA;\n }\n\n // always preScale the pixel array unless it is asked not to\n options.preScale = {\n enabled:\n options.preScale && options.preScale.enabled !== undefined\n ? options.preScale.enabled\n : false,\n };\n\n if (!pixelData || !pixelData.length) {\n return Promise.reject(new Error('The file does not contain image data.'));\n }\n\n const { cornerstone } = external;\n const canvas = document.createElement('canvas');\n const imageFrame = getImageFrame(imageId);\n\n // Get the scaling parameters from the metadata\n if (options.preScale.enabled) {\n const scalingParameters = getScalingParameters(\n cornerstone.metaData,\n imageId\n );\n\n if (scalingParameters) {\n options.preScale = {\n ...options.preScale,\n scalingParameters,\n };\n }\n }\n\n const { decodeConfig } = getOptions();\n\n const decodePromise = decodeImageFrame(\n imageFrame,\n transferSyntax,\n pixelData,\n canvas,\n options,\n decodeConfig\n );\n\n const { convertFloatPixelDataToInt, use16BitDataType } = decodeConfig;\n\n return new Promise((resolve, reject) => {\n // eslint-disable-next-line complexity\n decodePromise.then(function (imageFrame) {\n // if it is desired to skip creating image, return the imageFrame\n // after the decode. This might be useful for some applications\n // that only need the decoded pixel data and not the image object\n if (options.skipCreateImage) {\n return resolve(imageFrame);\n }\n // If we have a target buffer that was written to in the\n // Decode task, point the image to it here.\n // We can't have done it within the thread incase it was a SharedArrayBuffer.\n let alreadyTyped = false;\n\n if (options.targetBuffer) {\n let offset, length;\n // If we have a target buffer, write to that instead. This helps reduce memory duplication.\n\n ({ offset, length } = options.targetBuffer);\n const { arrayBuffer, type } = options.targetBuffer;\n\n let TypedArrayConstructor;\n\n if (length === null || length === undefined) {\n length = imageFrame.pixelDataLength;\n }\n\n if (offset === null || offset === undefined) {\n offset = 0;\n }\n\n switch (type) {\n case 'Uint8Array':\n TypedArrayConstructor = Uint8Array;\n break;\n case use16BitDataType && 'Uint16Array':\n TypedArrayConstructor = Uint16Array;\n break;\n case use16BitDataType && 'Int16Array':\n TypedArrayConstructor = Int16Array;\n break;\n case 'Float32Array':\n TypedArrayConstructor = Float32Array;\n break;\n default:\n throw new Error(\n 'target array for image does not have a valid type.'\n );\n }\n\n if (length !== imageFrame.pixelDataLength) {\n throw new Error(\n 'target array for image does not have the same length as the decoded image length.'\n );\n }\n\n // TypedArray.Set is api level and ~50x faster than copying elements even for\n // Arrays of different types, which aren't simply memcpy ops.\n let typedArray;\n\n if (arrayBuffer) {\n typedArray = new TypedArrayConstructor(arrayBuffer, offset, length);\n } else {\n typedArray = new TypedArrayConstructor(imageFrame.pixelData);\n }\n\n // If need to scale, need to scale correct array.\n imageFrame.pixelData = typedArray;\n alreadyTyped = true;\n }\n\n if (!alreadyTyped) {\n setPixelDataType(imageFrame);\n }\n\n const imagePlaneModule =\n cornerstone.metaData.get('imagePlaneModule', imageId) || {};\n const voiLutModule =\n cornerstone.metaData.get('voiLutModule', imageId) || {};\n const modalityLutModule =\n cornerstone.metaData.get('modalityLutModule', imageId) || {};\n const sopCommonModule =\n cornerstone.metaData.get('sopCommonModule', imageId) || {};\n const isColorImage = isColorImageFn(imageFrame.photometricInterpretation);\n\n if (isColorImage) {\n if (useRGBA) {\n // JPEGBaseline (8 bits) is already returning the pixel data in the right format (rgba)\n // because it's using a canvas to load and decode images.\n if (!isJPEGBaseline8BitColor(imageFrame, transferSyntax)) {\n canvas.height = imageFrame.rows;\n canvas.width = imageFrame.columns;\n\n const context = canvas.getContext('2d');\n\n const imageData = context.createImageData(\n imageFrame.columns,\n imageFrame.rows\n );\n\n convertColorSpace(imageFrame, imageData.data, useRGBA);\n\n imageFrame.imageData = imageData;\n imageFrame.pixelData = imageData.data;\n }\n } else if (isJPEGBaseline8BitColor(imageFrame, transferSyntax)) {\n // If we don't need the RGBA but the decoding is done with RGBA (the case\n // for JPEG Baseline 8 bit color), AND the option specifies to use RGB (no RGBA)\n // we need to remove the A channel from pixel data\n const colorBuffer = new Uint8ClampedArray(\n (imageFrame.pixelData.length / 4) * 3\n );\n\n // remove the A from the RGBA of the imageFrame\n imageFrame.pixelData = removeAFromRGBA(\n imageFrame.pixelData,\n colorBuffer\n );\n } else if (imageFrame.photometricInterpretation === 'PALETTE COLOR') {\n canvas.height = imageFrame.rows;\n canvas.width = imageFrame.columns;\n\n const context = canvas.getContext('2d');\n\n const imageData = context.createImageData(\n imageFrame.columns,\n imageFrame.rows\n );\n\n convertColorSpace(imageFrame, imageData.data, true);\n\n const colorBuffer = new imageData.data.constructor(\n (imageData.data.length / 4) * 3\n );\n\n // remove the A from the RGBA of the imageFrame\n imageFrame.pixelData = removeAFromRGBA(imageData.data, colorBuffer);\n }\n\n // calculate smallest and largest PixelValue of the converted pixelData\n const minMax = getMinMax(imageFrame.pixelData);\n\n imageFrame.smallestPixelValue = minMax.min;\n imageFrame.largestPixelValue = minMax.max;\n }\n\n const image = {\n imageId,\n color: isColorImage,\n columnPixelSpacing: imagePlaneModule.columnPixelSpacing,\n columns: imageFrame.columns,\n height: imageFrame.rows,\n preScale: imageFrame.preScale,\n intercept: modalityLutModule.rescaleIntercept\n ? modalityLutModule.rescaleIntercept\n : 0,\n slope: modalityLutModule.rescaleSlope\n ? modalityLutModule.rescaleSlope\n : 1,\n invert: imageFrame.photometricInterpretation === 'MONOCHROME1',\n minPixelValue: imageFrame.smallestPixelValue,\n maxPixelValue: imageFrame.largestPixelValue,\n rowPixelSpacing: imagePlaneModule.rowPixelSpacing,\n rows: imageFrame.rows,\n sizeInBytes: imageFrame.pixelData.byteLength,\n width: imageFrame.columns,\n windowCenter: voiLutModule.windowCenter\n ? voiLutModule.windowCenter[0]\n : undefined,\n windowWidth: voiLutModule.windowWidth\n ? voiLutModule.windowWidth[0]\n : undefined,\n voiLUTFunction: voiLutModule.voiLUTFunction\n ? voiLutModule.voiLUTFunction\n : undefined,\n decodeTimeInMS: imageFrame.decodeTimeInMS,\n floatPixelData: undefined,\n imageFrame,\n rgba: isColorImage && useRGBA,\n };\n\n // If pixel data is intrinsically floating 32 array, we convert it to int for\n // display in cornerstone. For other cases when pixel data is typed as\n // Float32Array for scaling; this conversion is not needed.\n if (\n imageFrame.pixelData instanceof Float32Array &&\n convertFloatPixelDataToInt\n ) {\n const floatPixelData = imageFrame.pixelData;\n const results = convertToIntPixelData(floatPixelData);\n\n image.minPixelValue = results.min;\n image.maxPixelValue = results.max;\n image.slope = results.slope;\n image.intercept = results.intercept;\n image.floatPixelData = floatPixelData;\n image.getPixelData = () => results.intPixelData;\n } else {\n image.getPixelData = () => imageFrame.pixelData;\n }\n\n if (image.color) {\n image.getCanvas = function () {\n if (lastImageIdDrawn === imageId) {\n return canvas;\n }\n\n canvas.height = image.rows;\n canvas.width = image.columns;\n const context = canvas.getContext('2d');\n\n context.putImageData(imageFrame.imageData, 0, 0);\n lastImageIdDrawn = imageId;\n\n return canvas;\n };\n }\n\n // Modality LUT\n if (\n modalityLutModule.modalityLUTSequence &&\n modalityLutModule.modalityLUTSequence.length > 0 &&\n isModalityLUTForDisplay(sopCommonModule.sopClassUID)\n ) {\n image.modalityLUT = modalityLutModule.modalityLUTSequence[0];\n }\n\n // VOI LUT\n if (\n voiLutModule.voiLUTSequence &&\n voiLutModule.voiLUTSequence.length > 0\n ) {\n image.voiLUT = voiLutModule.voiLUTSequence[0];\n }\n\n if (image.color) {\n image.windowWidth = 255;\n image.windowCenter = 127;\n }\n\n // set the ww/wc to cover the dynamic range of the image if no values are supplied\n if (image.windowCenter === undefined || image.windowWidth === undefined) {\n const maxVoi = image.maxPixelValue * image.slope + image.intercept;\n const minVoi = image.minPixelValue * image.slope + image.intercept;\n\n image.windowWidth = maxVoi - minVoi;\n image.windowCenter = (maxVoi + minVoi) / 2;\n }\n resolve(image);\n }, reject);\n });\n}\n\nexport default createImage;\n","import external from '../../externalModules.js';\nimport getPixelData from './getPixelData.js';\nimport createImage from '../createImage.js';\n\n/**\n * Helper method to extract the transfer-syntax from the response of the server.\n * @param {string} contentType The value of the content-type header as returned by the WADO-RS server.\n * @return The transfer-syntax as announced by the server, or Implicit Little Endian by default.\n */\nexport function getTransferSyntaxForContentType(contentType) {\n const defaultTransferSyntax = '1.2.840.10008.1.2'; // Default is Implicit Little Endian.\n\n if (!contentType) {\n return defaultTransferSyntax;\n }\n\n // Browse through the content type parameters\n const parameters = contentType.split(';');\n const params = {};\n\n parameters.forEach((parameter) => {\n // Look for a transfer-syntax=XXXX pair\n const parameterValues = parameter.split('=');\n\n if (parameterValues.length !== 2) {\n return;\n }\n\n const value = parameterValues[1].trim().replace(/\"/g, '');\n\n params[parameterValues[0].trim()] = value;\n });\n\n // This is useful if the PACS doesn't respond with a syntax\n // in the content type.\n // http://dicom.nema.org/medical/dicom/current/output/chtml/part18/chapter_6.html#table_6.1.1.8-3b\n const defaultTransferSyntaxByType = {\n 'image/jpeg': '1.2.840.10008.1.2.4.50',\n 'image/x-dicom-rle': '1.2.840.10008.1.2.5',\n 'image/x-jls': '1.2.840.10008.1.2.4.80',\n 'image/jls': '1.2.840.10008.1.2.4.80',\n 'image/jll': '1.2.840.10008.1.2.4.70',\n 'image/jp2': '1.2.840.10008.1.2.4.90',\n 'image/jpx': '1.2.840.10008.1.2.4.92',\n // Temporary types, until ratified by DICOM committed - TODO\n 'image/jphc': '3.2.840.10008.1.2.4.96',\n 'image/jxl': '1.2.840.10008.1.2.4.140',\n };\n\n if (params['transfer-syntax']) {\n return params['transfer-syntax'];\n } else if (\n contentType &&\n !Object.keys(params).length &&\n defaultTransferSyntaxByType[contentType]\n ) {\n // dcm4che seems to be reporting the content type as just 'image/jp2'?\n return defaultTransferSyntaxByType[contentType];\n } else if (params.type && defaultTransferSyntaxByType[params.type]) {\n return defaultTransferSyntaxByType[params.type];\n } else if (defaultTransferSyntaxByType[contentType]) {\n return defaultTransferSyntaxByType[contentType];\n }\n\n return defaultTransferSyntax;\n}\n\nfunction getImageRetrievalPool() {\n return external.cornerstone.imageRetrievalPoolManager;\n}\n\nfunction loadImage(imageId, options = {}) {\n const imageRetrievalPool = getImageRetrievalPool();\n\n const start = new Date().getTime();\n\n const promise = new Promise((resolve, reject) => {\n // TODO: load bulk data items that we might need\n\n // Uncomment this on to test jpegls codec in OHIF\n // const mediaType = 'multipart/related; type=\"image/x-jls\"';\n // const mediaType = 'multipart/related; type=\"application/octet-stream\"; transfer-syntax=\"image/x-jls\"';\n const mediaType =\n 'multipart/related; type=application/octet-stream; transfer-syntax=*';\n // const mediaType =\n // 'multipart/related; type=\"image/jpeg\"; transfer-syntax=1.2.840.10008.1.2.4.50';\n\n function sendXHR(imageURI, imageId, mediaType) {\n // get the pixel data from the server\n return getPixelData(imageURI, imageId, mediaType)\n .then((result) => {\n const transferSyntax = getTransferSyntaxForContentType(\n result.contentType\n );\n\n const pixelData = result.imageFrame.pixelData;\n const imagePromise = createImage(\n imageId,\n pixelData,\n transferSyntax,\n options\n );\n\n imagePromise.then((image) => {\n // add the loadTimeInMS property\n const end = new Date().getTime();\n\n image.loadTimeInMS = end - start;\n resolve(image);\n }, reject);\n }, reject)\n .catch((error) => {\n reject(error);\n });\n }\n\n const requestType = options.requestType || 'interaction';\n const additionalDetails = options.additionalDetails || { imageId };\n const priority = options.priority === undefined ? 5 : options.priority;\n const addToBeginning = options.addToBeginning || false;\n const uri = imageId.substring(7);\n\n imageRetrievalPool.addRequest(\n sendXHR.bind(this, uri, imageId, mediaType),\n requestType,\n additionalDetails,\n priority,\n addToBeginning\n );\n });\n\n return {\n promise,\n cancelFn: undefined,\n };\n}\n\nexport default loadImage;\n","/* eslint import/extensions:0 */\nimport registerLoaders from './imageLoader/registerLoaders.js';\n\nlet cornerstone;\n\nlet dicomParser;\n\nconst external = {\n set cornerstone(cs) {\n cornerstone = cs;\n\n registerLoaders(cornerstone);\n },\n get cornerstone() {\n if (!cornerstone) {\n if (window && window.cornerstone) {\n cornerstone = window.cornerstone;\n\n registerLoaders(cornerstone);\n } else {\n throw new Error(\n 'cornerstoneWADOImageLoader requires a copy of Cornerstone to work properly. Please add cornerstoneWADOImageLoader.external.cornerstone = cornerstone; to your application.'\n );\n }\n }\n\n return cornerstone;\n },\n set dicomParser(dp) {\n dicomParser = dp;\n },\n get dicomParser() {\n if (!dicomParser) {\n if (window && window.dicomParser) {\n dicomParser = window.dicomParser;\n } else {\n throw new Error(\n 'cornerstoneWADOImageLoader requires a copy of dicomParser to work properly. Please add cornerstoneWADOImageLoader.external.dicomParser = dicomParser; to your application.'\n );\n }\n }\n\n return dicomParser;\n },\n};\n\nexport default external;\n","import {\n getNumberString,\n getNumberValue,\n getNumberValues,\n getValue,\n metaDataProvider,\n} from './metaData/index.js';\n\nimport findIndexOfString from './findIndexOfString.js';\nimport getPixelData from './getPixelData.js';\nimport metaDataManager from './metaDataManager.js';\nimport loadImage from './loadImage.js';\nimport register from './register.js';\n\nconst metaData = {\n getNumberString,\n getNumberValue,\n getNumberValues,\n getValue,\n metaDataProvider,\n};\n\nexport default {\n metaData,\n findIndexOfString,\n getPixelData,\n loadImage,\n metaDataManager,\n register,\n};\n","import getValue from './getValue.js';\n\n/**\n * Returns the first string value as a Javascript number\n *\n * @param element - The javascript object for the specified element in the metadata\n * @param [index] - the index of the value in a multi-valued element, default is 0\n * @param [defaultValue] - The default value to return if the element does not exist\n * @returns {*}\n */\nfunction getNumberString(element, index, defaultValue) {\n const value = getValue(element, index, defaultValue);\n\n if (value === undefined) {\n return;\n }\n\n return parseFloat(value);\n}\n\nexport default getNumberString;\n","import loadImage from './loadImage.js';\nimport { metaDataProvider } from './metaData/index.js';\n\nexport default function (cornerstone) {\n // register wadors scheme and metadata provider\n cornerstone.registerImageLoader('wadors', loadImage);\n cornerstone.metaData.addProvider(metaDataProvider);\n}\n","import wadors from './wadors/index.js';\nimport wadouri from './wadouri/index.js';\n\n/**\n * Register the WADO-URI and WADO-RS image loaders and metaData providers\n * with an instance of Cornerstone Core.\n *\n * @param cornerstone The Cornerstone Core library to register the image loaders with\n */\nfunction registerLoaders(cornerstone) {\n wadors.register(cornerstone);\n wadouri.register(cornerstone);\n}\n\nexport default registerLoaders;\n","function parseImageId(imageId) {\n // build a url by parsing out the url scheme and frame index from the imageId\n const firstColonIndex = imageId.indexOf(':');\n\n let url = imageId.substring(firstColonIndex + 1);\n const frameIndex = url.indexOf('frame=');\n\n let frame;\n\n if (frameIndex !== -1) {\n const frameStr = url.substr(frameIndex + 6);\n\n frame = parseInt(frameStr, 10);\n url = url.substr(0, frameIndex - 1);\n }\n\n return {\n scheme: imageId.substr(0, firstColonIndex),\n url,\n frame,\n };\n}\n\nexport default parseImageId;\n","// @ts-check\n\nimport external from '../../externalModules.js';\n\nfunction fixFragments(dataSet) {\n // The partially parsed pixelData element has incorrect fragment\n // lengths because the byte array is truncated, so we manually set\n // it to the actual length.\n const fragments = dataSet.elements.x7fe00010.fragments;\n const totalLength = dataSet.byteArray.length;\n\n for (const fragment of fragments) {\n const { position, length } = fragment;\n\n if (length > totalLength - position) {\n console.log(\n `Truncated fragment, changing fragment length from ${\n fragment.length\n } to ${totalLength - position}`\n );\n fragment.length = totalLength - position;\n }\n }\n\n return dataSet;\n}\n\nfunction parsePartialByteArray(byteArray) {\n const { dicomParser } = external;\n /**\n * First parse just up to pixelData. This will make sure the\n * metadata header is correctly parsed (assuming no other error is\n * thrown during parsing). Then, parse again using the whole partial\n * arraybuffer. This will error, but still kick out the parsed\n * partial pixel data in the error object.\n */\n\n let dataSet = dicomParser.parseDicom(byteArray, {\n untilTag: 'x7fe00010',\n });\n\n if (!dataSet.elements.x7fe00010) {\n console.warn('Pixel data not found!');\n // Re-fetch more of the file\n }\n\n let pixelDataSet;\n\n try {\n // This is expected to fail, since the file is incomplete, but\n // dicomParser helpfully spits out the parsed partial dataset in\n // the error object. The problem is, the dataset here is\n // incomplete, because dicomParser throws *before* combining the\n // metadata header and regular datasets, so transfer syntax and\n // other metadata headers aren't included.\n pixelDataSet = dicomParser.parseDicom(byteArray);\n } catch (err) {\n console.error(err);\n console.log('pixel data dataset:', err.dataSet);\n pixelDataSet = err.dataSet;\n }\n\n // Add the parsed partial pixel data element to the dataset\n // including the metadata headers.\n dataSet.elements.x7fe00010 = pixelDataSet.elements.x7fe00010;\n\n dataSet = fixFragments(dataSet);\n\n return dataSet;\n}\n\nexport default async function dataSetFromPartialContent(\n byteArray,\n loadRequest,\n metadata\n) {\n const dataSet = parsePartialByteArray(byteArray);\n const { uri, imageId, fileTotalLength } = metadata;\n\n // Allow re-fetching of more of the file\n dataSet.fetchMore = async function (fetchOptions) {\n // Default to fetching the rest of the file if no lengthToFetch is set. Also\n // default to fetching the same URI/imageId\n const _options = Object.assign(\n {\n uri,\n imageId,\n fetchedLength: byteArray.length, // Not sure if this would ever need to be configurable tbh\n lengthToFetch: fileTotalLength - byteArray.length,\n },\n fetchOptions\n );\n const { fetchedLength, lengthToFetch } = _options;\n\n // Use passed xhr loader to re-fetch new byte range\n const { arrayBuffer } = await loadRequest(uri, imageId, {\n byteRange: `${fetchedLength}-${fetchedLength + lengthToFetch}`,\n });\n\n // Combine byte ranges\n const byteArrayToAppend = new Uint8Array(arrayBuffer);\n const combinedByteArray = new Uint8Array(\n dataSet.byteArray.length + byteArrayToAppend.length\n );\n\n combinedByteArray.set(dataSet.byteArray);\n combinedByteArray.set(byteArrayToAppend, dataSet.byteArray.length);\n\n // Re-parse potentially partial byte range and return\n return dataSetFromPartialContent(combinedByteArray, loadRequest, metadata);\n };\n\n return dataSet;\n}\n","import external from '../../externalModules.js';\nimport { xhrRequest } from '../internal/index.js';\nimport dataSetFromPartialContent from './dataset-from-partial-content.js';\n\n/**\n * This object supports loading of DICOM P10 dataset from a uri and caching it so it can be accessed\n * by the caller. This allows a caller to access the datasets without having to go through cornerstone's\n * image loader mechanism. One reason a caller may need to do this is to determine the number of frames\n * in a multiframe sop instance so it can create the imageId's correctly.\n */\nlet cacheSizeInBytes = 0;\n\nlet loadedDataSets = {};\n\nlet promises = {};\n\n// returns true if the wadouri for the specified index has been loaded\nfunction isLoaded(uri) {\n return loadedDataSets[uri] !== undefined;\n}\n\nfunction get(uri) {\n if (!loadedDataSets[uri]) {\n return;\n }\n\n return loadedDataSets[uri].dataSet;\n}\n\nfunction update(uri, dataSet) {\n const loadedDataSet = loadedDataSets[uri];\n\n if (!loadedDataSet) {\n console.error(`No loaded dataSet for uri ${uri}`);\n\n return;\n }\n // Update dataset\n cacheSizeInBytes -= loadedDataSet.dataSet.byteArray.length;\n loadedDataSet.dataSet = dataSet;\n cacheSizeInBytes += dataSet.byteArray.length;\n\n external.cornerstone.triggerEvent(\n external.cornerstone.events,\n 'datasetscachechanged',\n {\n uri,\n action: 'updated',\n cacheInfo: getInfo(),\n }\n );\n}\n\n// loads the dicom dataset from the wadouri sp\nfunction load(uri, loadRequest = xhrRequest, imageId) {\n const { cornerstone, dicomParser } = external;\n\n // if already loaded return it right away\n if (loadedDataSets[uri]) {\n // console.log('using loaded dataset ' + uri);\n return new Promise((resolve) => {\n loadedDataSets[uri].cacheCount++;\n resolve(loadedDataSets[uri].dataSet);\n });\n }\n\n // if we are currently loading this uri, increment the cacheCount and return its promise\n if (promises[uri]) {\n // console.log('returning existing load promise for ' + uri);\n promises[uri].cacheCount++;\n\n return promises[uri];\n }\n\n // This uri is not loaded or being loaded, load it via an xhrRequest\n const loadDICOMPromise = loadRequest(uri, imageId);\n\n // handle success and failure of the XHR request load\n const promise = new Promise((resolve, reject) => {\n loadDICOMPromise\n .then(async function (dicomPart10AsArrayBuffer) {\n const partialContent = {\n isPartialContent: false,\n fileTotalLength: null,\n };\n\n // Allow passing extra data with the loader promise so as not to change\n // the API\n if (!(dicomPart10AsArrayBuffer instanceof ArrayBuffer)) {\n if (!dicomPart10AsArrayBuffer.arrayBuffer) {\n return reject(\n new Error(\n 'If not returning ArrayBuffer, must return object with `arrayBuffer` parameter'\n )\n );\n }\n partialContent.isPartialContent =\n dicomPart10AsArrayBuffer.flags.isPartialContent;\n partialContent.fileTotalLength =\n dicomPart10AsArrayBuffer.flags.fileTotalLength;\n dicomPart10AsArrayBuffer = dicomPart10AsArrayBuffer.arrayBuffer;\n }\n\n const byteArray = new Uint8Array(dicomPart10AsArrayBuffer);\n\n // Reject the promise if parsing the dicom file fails\n let dataSet;\n\n try {\n if (partialContent.isPartialContent) {\n // This dataSet object will include a fetchMore function,\n dataSet = await dataSetFromPartialContent(byteArray, loadRequest, {\n uri,\n imageId,\n fileTotalLength: partialContent.fileTotalLength,\n });\n } else {\n dataSet = dicomParser.parseDicom(byteArray);\n }\n } catch (error) {\n return reject(error);\n }\n\n loadedDataSets[uri] = {\n dataSet,\n cacheCount: promise.cacheCount,\n };\n cacheSizeInBytes += dataSet.byteArray.length;\n resolve(dataSet);\n\n cornerstone.triggerEvent(cornerstone.events, 'datasetscachechanged', {\n uri,\n action: 'loaded',\n cacheInfo: getInfo(),\n });\n }, reject)\n .then(\n () => {\n // Remove the promise if success\n delete promises[uri];\n },\n () => {\n // Remove the promise if failure\n delete promises[uri];\n }\n );\n });\n\n promise.cacheCount = 1;\n\n promises[uri] = promise;\n\n return promise;\n}\n\n// remove the cached/loaded dicom dataset for the specified wadouri to free up memory\nfunction unload(uri) {\n const { cornerstone } = external;\n\n // console.log('unload for ' + uri);\n if (loadedDataSets[uri]) {\n loadedDataSets[uri].cacheCount--;\n if (loadedDataSets[uri].cacheCount === 0) {\n // console.log('removing loaded dataset for ' + uri);\n cacheSizeInBytes -= loadedDataSets[uri].dataSet.byteArray.length;\n delete loadedDataSets[uri];\n\n cornerstone.triggerEvent(cornerstone.events, 'datasetscachechanged', {\n uri,\n action: 'unloaded',\n cacheInfo: getInfo(),\n });\n }\n }\n}\n\nexport function getInfo() {\n return {\n cacheSizeInBytes,\n numberOfDataSetsCached: Object.keys(loadedDataSets).length,\n };\n}\n\n// removes all cached datasets from memory\nfunction purge() {\n loadedDataSets = {};\n promises = {};\n cacheSizeInBytes = 0;\n}\n\nexport default {\n isLoaded,\n load,\n unload,\n getInfo,\n purge,\n get,\n update,\n};\n","import external from '../../../externalModules.js';\nimport getNumberValues from './getNumberValues.js';\nimport parseImageId from '../parseImageId.js';\nimport dataSetCacheManager from '../dataSetCacheManager.js';\nimport getImagePixelModule from './getImagePixelModule.js';\nimport getOverlayPlaneModule from './getOverlayPlaneModule.js';\nimport getLUTs from './getLUTs.js';\nimport getModalityLUTOutputPixelRepresentation from './getModalityLUTOutputPixelRepresentation.js';\n\n/* eslint complexity: off */\nfunction metaDataProvider(type, imageId) {\n const { dicomParser } = external;\n const parsedImageId = parseImageId(imageId);\n\n const dataSet = dataSetCacheManager.get(parsedImageId.url);\n\n if (!dataSet) {\n return;\n }\n\n if (type === 'generalSeriesModule') {\n return {\n modality: dataSet.string('x00080060'),\n seriesInstanceUID: dataSet.string('x0020000e'),\n seriesNumber: dataSet.intString('x00200011'),\n studyInstanceUID: dataSet.string('x0020000d'),\n seriesDate: dicomParser.parseDA(dataSet.string('x00080021')),\n seriesTime: dicomParser.parseTM(dataSet.string('x00080031') || ''),\n acquisitionDate: dicomParser.parseDA(dataSet.string('x00080022') || ''),\n acquisitionTime: dicomParser.parseTM(dataSet.string('x00080032') || ''),\n };\n }\n\n if (type === 'patientStudyModule') {\n return {\n patientAge: dataSet.intString('x00101010'),\n patientSize: dataSet.floatString('x00101020'),\n patientWeight: dataSet.floatString('x00101030'),\n };\n }\n\n if (type === 'imagePlaneModule') {\n const imageOrientationPatient = getNumberValues(dataSet, 'x00200037', 6);\n const imagePositionPatient = getNumberValues(dataSet, 'x00200032', 3);\n const pixelSpacing = getNumberValues(dataSet, 'x00280030', 2);\n\n let columnPixelSpacing = null;\n\n let rowPixelSpacing = null;\n\n if (pixelSpacing) {\n rowPixelSpacing = pixelSpacing[0];\n columnPixelSpacing = pixelSpacing[1];\n }\n\n let rowCosines = null;\n\n let columnCosines = null;\n\n if (imageOrientationPatient) {\n rowCosines = [\n parseFloat(imageOrientationPatient[0]),\n parseFloat(imageOrientationPatient[1]),\n parseFloat(imageOrientationPatient[2]),\n ];\n columnCosines = [\n parseFloat(imageOrientationPatient[3]),\n parseFloat(imageOrientationPatient[4]),\n parseFloat(imageOrientationPatient[5]),\n ];\n }\n\n return {\n frameOfReferenceUID: dataSet.string('x00200052'),\n rows: dataSet.uint16('x00280010'),\n columns: dataSet.uint16('x00280011'),\n imageOrientationPatient,\n rowCosines,\n columnCosines,\n imagePositionPatient,\n sliceThickness: dataSet.floatString('x00180050'),\n sliceLocation: dataSet.floatString('x00201041'),\n pixelSpacing,\n rowPixelSpacing,\n columnPixelSpacing,\n };\n }\n\n if (type === 'imagePixelModule') {\n return getImagePixelModule(dataSet);\n }\n\n if (type === 'modalityLutModule') {\n return {\n rescaleIntercept: dataSet.floatString('x00281052'),\n rescaleSlope: dataSet.floatString('x00281053'),\n rescaleType: dataSet.string('x00281054'),\n modalityLUTSequence: getLUTs(\n dataSet.uint16('x00280103'),\n dataSet.elements.x00283000\n ),\n };\n }\n\n if (type === 'voiLutModule') {\n const modalityLUTOutputPixelRepresentation =\n getModalityLUTOutputPixelRepresentation(dataSet);\n\n return {\n windowCenter: getNumberValues(dataSet, 'x00281050', 1),\n windowWidth: getNumberValues(dataSet, 'x00281051', 1),\n voiLUTSequence: getLUTs(\n modalityLUTOutputPixelRepresentation,\n dataSet.elements.x00283010\n ),\n };\n }\n\n if (type === 'sopCommonModule') {\n return {\n sopClassUID: dataSet.string('x00080016'),\n sopInstanceUID: dataSet.string('x00080018'),\n };\n }\n\n if (type === 'petIsotopeModule') {\n const radiopharmaceuticalInfo = dataSet.elements.x00540016;\n\n if (radiopharmaceuticalInfo === undefined) {\n return;\n }\n\n const firstRadiopharmaceuticalInfoDataSet =\n radiopharmaceuticalInfo.items[0].dataSet;\n\n return {\n radiopharmaceuticalInfo: {\n radiopharmaceuticalStartTime: dicomParser.parseTM(\n firstRadiopharmaceuticalInfoDataSet.string('x00181072') || ''\n ),\n radionuclideTotalDose:\n firstRadiopharmaceuticalInfoDataSet.floatString('x00181074'),\n radionuclideHalfLife:\n firstRadiopharmaceuticalInfoDataSet.floatString('x00181075'),\n },\n };\n }\n\n if (type === 'overlayPlaneModule') {\n return getOverlayPlaneModule(dataSet);\n }\n\n // Note: this is not a DICOM module, but a useful metadata that can be\n // retrieved from the image\n if (type === 'transferSyntax') {\n return {\n transferSyntaxUID: dataSet.string('x00020010'),\n };\n }\n\n if (type === 'petSeriesModule') {\n return {\n correctedImage: dataSet.string('x00280051'),\n units: dataSet.string('x00541001'),\n decayCorrection: dataSet.string('x00541102'),\n };\n }\n\n if (type === 'petImageModule') {\n return {\n frameReferenceTime: dicomParser.floatString(\n dataSet.string('x00541300') || ''\n ),\n actualFrameDuration: dicomParser.intString(dataSet.string('x00181242')),\n };\n }\n}\n\nexport default metaDataProvider;\n","export default function getOverlayPlaneModule(dataSet) {\n const overlays = [];\n\n for (let overlayGroup = 0x00; overlayGroup <= 0x1e; overlayGroup += 0x02) {\n let groupStr = `x60${overlayGroup.toString(16)}`;\n\n if (groupStr.length === 4) {\n groupStr = `x600${overlayGroup.toString(16)}`;\n }\n\n const data = dataSet.elements[`${groupStr}3000`];\n\n if (!data) {\n continue;\n }\n\n const pixelData = [];\n\n for (let i = 0; i < data.length; i++) {\n for (let k = 0; k < 8; k++) {\n const byte_as_int = dataSet.byteArray[data.dataOffset + i];\n\n pixelData[i * 8 + k] = (byte_as_int >> k) & 0b1; // eslint-disable-line no-bitwise\n }\n }\n\n overlays.push({\n rows: dataSet.uint16(`${groupStr}0010`),\n columns: dataSet.uint16(`${groupStr}0011`),\n type: dataSet.string(`${groupStr}0040`),\n x: dataSet.int16(`${groupStr}0050`, 1) - 1,\n y: dataSet.int16(`${groupStr}0050`, 0) - 1,\n pixelData,\n description: dataSet.string(`${groupStr}0022`),\n label: dataSet.string(`${groupStr}1500`),\n roiArea: dataSet.string(`${groupStr}1301`),\n roiMean: dataSet.string(`${groupStr}1302`),\n roiStandardDeviation: dataSet.string(`${groupStr}1303`),\n });\n }\n\n return {\n overlays,\n };\n}\n","let files = [];\n\nfunction add(file) {\n const fileIndex = files.push(file);\n\n return `dicomfile:${fileIndex - 1}`;\n}\n\nfunction get(index) {\n return files[index];\n}\n\nfunction remove(index) {\n files[index] = undefined;\n}\n\nfunction purge() {\n files = [];\n}\n\nexport default {\n add,\n get,\n remove,\n purge,\n};\n","import external from '../../externalModules.js';\n\n/**\n * Function to deal with extracting an image frame from an encapsulated data set.\n */\n\nfunction framesAreFragmented(dataSet) {\n const numberOfFrames = dataSet.intString('x00280008');\n const pixelDataElement = dataSet.elements.x7fe00010;\n\n return numberOfFrames !== pixelDataElement.fragments.length;\n}\n\nexport default function getEncapsulatedImageFrame(dataSet, frameIndex) {\n const { dicomParser } = external;\n\n if (\n dataSet.elements.x7fe00010 &&\n dataSet.elements.x7fe00010.basicOffsetTable.length\n ) {\n // Basic Offset Table is not empty\n return dicomParser.readEncapsulatedImageFrame(\n dataSet,\n dataSet.elements.x7fe00010,\n frameIndex\n );\n }\n\n // Empty basic offset table\n\n if (framesAreFragmented(dataSet)) {\n const basicOffsetTable = dicomParser.createJPEGBasicOffsetTable(\n dataSet,\n dataSet.elements.x7fe00010\n );\n\n return dicomParser.readEncapsulatedImageFrame(\n dataSet,\n dataSet.elements.x7fe00010,\n frameIndex,\n basicOffsetTable\n );\n }\n\n return dicomParser.readEncapsulatedPixelDataFromFragments(\n dataSet,\n dataSet.elements.x7fe00010,\n frameIndex\n );\n}\n","/* eslint no-bitwise: 0 */\n\nfunction isBitSet(byte, bitPos) {\n return byte & (1 << bitPos);\n}\n\n/**\n * Function to deal with unpacking a binary frame\n */\nfunction unpackBinaryFrame(byteArray, frameOffset, pixelsPerFrame) {\n // Create a new pixel array given the image size\n const pixelData = new Uint8Array(pixelsPerFrame);\n\n for (let i = 0; i < pixelsPerFrame; i++) {\n // Compute byte position\n const bytePos = Math.floor(i / 8);\n\n // Get the current byte\n const byte = byteArray[bytePos + frameOffset];\n\n // Bit position (0-7) within byte\n const bitPos = i % 8;\n\n // Check whether bit at bitpos is set\n pixelData[i] = isBitSet(byte, bitPos) ? 1 : 0;\n }\n\n return pixelData;\n}\n\nexport default unpackBinaryFrame;\n","import unpackBinaryFrame from './unpackBinaryFrame.js';\n\n/**\n * Function to deal with extracting an image frame from an encapsulated data set.\n */\n\nfunction getUncompressedImageFrame(dataSet, frameIndex) {\n const pixelDataElement =\n dataSet.elements.x7fe00010 || dataSet.elements.x7fe00008;\n const bitsAllocated = dataSet.uint16('x00280100');\n const rows = dataSet.uint16('x00280010');\n const columns = dataSet.uint16('x00280011');\n\n let samplesPerPixel = dataSet.uint16('x00280002');\n\n /**\n * From: http://dicom.nema.org/medical/dicom/current/output/chtml/part03/sect_C.7.6.3.html\n *\n * Though the chrominance channels are downsampled, there are still nominally\n * three channels, hence Samples per Pixel (0028,0002) has a value of 3, not\n * 2. I.e., for pixel data in a Native (uncompressed) format, the Value Length\n * of Pixel Data (7FE0,0010) is not:\n *\n * Rows (0028,0010) * Columns (0028,0011) * Number of Frames (0028,0008) *\n * Samples per Pixel (0028,0002) * (⌊(Bits Allocated (0028,0100)-1)/8⌋+1)\n *\n * padded to an even length, as it would otherwise be, but rather is:\n *\n * Rows (0028,0010) * Columns (0028,0011) * Number of Frames (0028,0008) * 2 *\n * (⌊(Bits Allocated (0028,0100)-1)/8⌋+1)\n *\n * padded to an even length.\n */\n const photometricInterpretation = dataSet.string('x00280004');\n\n if (photometricInterpretation === 'YBR_FULL_422') {\n samplesPerPixel = 2;\n console.warn(\n `Using SamplesPerPixel of 2 for YBR_FULL_422 photometric interpretation.\n See http://dicom.nema.org/medical/dicom/current/output/chtml/part03/sect_C.7.6.3.html for more information.`\n );\n }\n\n const pixelDataOffset = pixelDataElement.dataOffset;\n const pixelsPerFrame = rows * columns * samplesPerPixel;\n\n let frameOffset;\n\n if (bitsAllocated === 8) {\n frameOffset = pixelDataOffset + frameIndex * pixelsPerFrame;\n if (frameOffset >= dataSet.byteArray.length) {\n throw new Error('frame exceeds size of pixelData');\n }\n\n return new Uint8Array(\n dataSet.byteArray.buffer.slice(frameOffset, frameOffset + pixelsPerFrame)\n );\n } else if (bitsAllocated === 16) {\n frameOffset = pixelDataOffset + frameIndex * pixelsPerFrame * 2;\n if (frameOffset >= dataSet.byteArray.length) {\n throw new Error('frame exceeds size of pixelData');\n }\n\n return new Uint8Array(\n dataSet.byteArray.buffer.slice(\n frameOffset,\n frameOffset + pixelsPerFrame * 2\n )\n );\n } else if (bitsAllocated === 1) {\n frameOffset = pixelDataOffset + frameIndex * pixelsPerFrame * 0.125;\n if (frameOffset >= dataSet.byteArray.length) {\n throw new Error('frame exceeds size of pixelData');\n }\n\n return unpackBinaryFrame(dataSet.byteArray, frameOffset, pixelsPerFrame);\n } else if (bitsAllocated === 32) {\n frameOffset = pixelDataOffset + frameIndex * pixelsPerFrame * 4;\n if (frameOffset >= dataSet.byteArray.length) {\n throw new Error('frame exceeds size of pixelData');\n }\n\n return new Uint8Array(\n dataSet.byteArray.buffer.slice(\n frameOffset,\n frameOffset + pixelsPerFrame * 4\n )\n );\n }\n\n throw new Error('unsupported pixel format');\n}\n\nexport default getUncompressedImageFrame;\n","import parseImageId from './parseImageId.js';\nimport fileManager from './fileManager.js';\n\nfunction loadFileRequest(uri) {\n const parsedImageId = parseImageId(uri);\n const fileIndex = parseInt(parsedImageId.url, 10);\n const file = fileManager.get(fileIndex);\n\n return new Promise((resolve, reject) => {\n const fileReader = new FileReader();\n\n fileReader.onload = (e) => {\n const dicomPart10AsArrayBuffer = e.target.result;\n\n resolve(dicomPart10AsArrayBuffer);\n };\n\n fileReader.onerror = reject;\n\n fileReader.readAsArrayBuffer(file);\n });\n}\n\nexport default loadFileRequest;\n","import getEncapsulatedImageFrame from './getEncapsulatedImageFrame.js';\nimport getUncompressedImageFrame from './getUncompressedImageFrame.js';\n\nfunction getPixelData(dataSet, frameIndex = 0) {\n const pixelDataElement =\n dataSet.elements.x7fe00010 || dataSet.elements.x7fe00008;\n\n if (!pixelDataElement) {\n return null;\n }\n\n if (pixelDataElement.encapsulatedPixelData) {\n return getEncapsulatedImageFrame(dataSet, frameIndex);\n }\n\n return getUncompressedImageFrame(dataSet, frameIndex);\n}\n\nexport default getPixelData;\n","import createImage from '../createImage.js';\nimport parseImageId from './parseImageId.js';\nimport dataSetCacheManager from './dataSetCacheManager.js';\nimport loadFileRequest from './loadFileRequest.js';\nimport getPixelData from './getPixelData.js';\nimport { xhrRequest } from '../internal/index.js';\n\n// add a decache callback function to clear out our dataSetCacheManager\nfunction addDecache(imageLoadObject, imageId) {\n imageLoadObject.decache = function () {\n // console.log('decache');\n const parsedImageId = parseImageId(imageId);\n\n dataSetCacheManager.unload(parsedImageId.url);\n };\n}\n\nfunction loadImageFromPromise(\n dataSetPromise,\n imageId,\n frame = 0,\n sharedCacheKey,\n options,\n callbacks\n) {\n const start = new Date().getTime();\n const imageLoadObject = {\n cancelFn: undefined,\n };\n\n imageLoadObject.promise = new Promise((resolve, reject) => {\n dataSetPromise.then(\n (dataSet /* , xhr*/) => {\n const pixelData = getPixelData(dataSet, frame);\n const transferSyntax = dataSet.string('x00020010');\n const loadEnd = new Date().getTime();\n const imagePromise = createImage(\n imageId,\n pixelData,\n transferSyntax,\n options\n );\n\n addDecache(imageLoadObject, imageId);\n\n imagePromise.then(\n (image) => {\n image.data = dataSet;\n image.sharedCacheKey = sharedCacheKey;\n const end = new Date().getTime();\n\n image.loadTimeInMS = loadEnd - start;\n image.totalTimeInMS = end - start;\n if (\n callbacks !== undefined &&\n callbacks.imageDoneCallback !== undefined\n ) {\n callbacks.imageDoneCallback(image);\n }\n resolve(image);\n },\n function (error) {\n // Reject the error, and the dataSet\n reject({\n error,\n dataSet,\n });\n }\n );\n },\n function (error) {\n // Reject the error\n reject({\n error,\n });\n }\n );\n });\n\n return imageLoadObject;\n}\n\nfunction loadImageFromDataSet(\n dataSet,\n imageId,\n frame = 0,\n sharedCacheKey,\n options\n) {\n const start = new Date().getTime();\n\n const promise = new Promise((resolve, reject) => {\n const loadEnd = new Date().getTime();\n\n let imagePromise;\n\n try {\n const pixelData = getPixelData(dataSet, frame);\n const transferSyntax = dataSet.string('x00020010');\n\n imagePromise = createImage(imageId, pixelData, transferSyntax, options);\n } catch (error) {\n // Reject the error, and the dataSet\n reject({\n error,\n dataSet,\n });\n\n return;\n }\n\n imagePromise.then((image) => {\n image.data = dataSet;\n image.sharedCacheKey = sharedCacheKey;\n const end = new Date().getTime();\n\n image.loadTimeInMS = loadEnd - start;\n image.totalTimeInMS = end - start;\n resolve(image);\n }, reject);\n });\n\n return {\n promise,\n cancelFn: undefined,\n };\n}\n\nfunction getLoaderForScheme(scheme) {\n if (scheme === 'dicomweb' || scheme === 'wadouri') {\n return xhrRequest;\n } else if (scheme === 'dicomfile') {\n return loadFileRequest;\n }\n}\n\nfunction loadImage(imageId, options = {}) {\n const parsedImageId = parseImageId(imageId);\n\n options = Object.assign({}, options);\n let loader = options.loader;\n\n if (loader === undefined) {\n loader = getLoaderForScheme(parsedImageId.scheme);\n } else {\n delete options.loader;\n }\n\n // if the dataset for this url is already loaded, use it\n if (dataSetCacheManager.isLoaded(parsedImageId.url)) {\n const dataSet = dataSetCacheManager.get(parsedImageId.url, loader, imageId);\n\n return loadImageFromDataSet(\n dataSet,\n imageId,\n parsedImageId.frame,\n parsedImageId.url,\n options\n );\n }\n\n // load the dataSet via the dataSetCacheManager\n const dataSetPromise = dataSetCacheManager.load(\n parsedImageId.url,\n loader,\n imageId\n );\n\n return loadImageFromPromise(\n dataSetPromise,\n imageId,\n parsedImageId.frame,\n parsedImageId.url,\n options\n );\n}\n\nexport { loadImageFromPromise, getLoaderForScheme, loadImage };\n","import {\n getImagePixelModule,\n getLUTs,\n getModalityLUTOutputPixelRepresentation,\n getNumberValues,\n metaDataProvider,\n} from './metaData/index.js';\n\nimport dataSetCacheManager from './dataSetCacheManager.js';\nimport fileManager from './fileManager.js';\nimport getEncapsulatedImageFrame from './getEncapsulatedImageFrame.js';\nimport getUncompressedImageFrame from './getUncompressedImageFrame.js';\nimport loadFileRequest from './loadFileRequest.js';\nimport {\n loadImageFromPromise,\n getLoaderForScheme,\n loadImage,\n} from './loadImage.js';\nimport parseImageId from './parseImageId.js';\nimport unpackBinaryFrame from './unpackBinaryFrame.js';\nimport register from './register.js';\n\nconst metaData = {\n getImagePixelModule,\n getLUTs,\n getModalityLUTOutputPixelRepresentation,\n getNumberValues,\n metaDataProvider,\n};\n\nexport default {\n metaData,\n dataSetCacheManager,\n fileManager,\n getEncapsulatedImageFrame,\n getUncompressedImageFrame,\n loadFileRequest,\n loadImageFromPromise,\n getLoaderForScheme,\n loadImage,\n parseImageId,\n unpackBinaryFrame,\n register,\n};\n","import { loadImage } from './loadImage.js';\nimport { metaDataProvider } from './metaData/index.js';\n\nexport default function (cornerstone) {\n // register dicomweb and wadouri image loader prefixes\n cornerstone.registerImageLoader('dicomweb', loadImage);\n cornerstone.registerImageLoader('wadouri', loadImage);\n cornerstone.registerImageLoader('dicomfile', loadImage);\n\n // add wadouri metadata provider\n cornerstone.metaData.addProvider(metaDataProvider);\n}\n","import { setOptions } from './internal/index.js';\n\nfunction configure(options) {\n setOptions(options);\n}\n\nexport default configure;\n","export default '0.0.0-semantically-released';\n","import {\n convertRGBColorByPixel,\n convertRGBColorByPlane,\n convertYBRFullByPixel,\n convertYBRFullByPlane,\n convertPALETTECOLOR,\n} from './colorSpaceConverters/index.js';\n\nimport { default as wadouri } from './wadouri/index.js';\nimport { default as wadors } from './wadors/index.js';\nimport { default as configure } from './configure.js';\nimport { default as convertColorSpace } from './convertColorSpace.js';\nimport { default as createImage } from './createImage.js';\nimport { default as decodeImageFrame } from './decodeImageFrame.js';\nimport { default as decodeJPEGBaseline8BitColor } from './decodeJPEGBaseline8BitColor.js';\nimport { default as getImageFrame } from './getImageFrame.js';\nimport { default as getMinMax } from '../shared/getMinMax.js';\nimport { default as isColorImage } from './isColorImage.js';\nimport { default as isJPEGBaseline8BitColor } from './isJPEGBaseline8BitColor.js';\nimport { default as webWorkerManager } from './webWorkerManager.js';\nimport { default as getPixelData } from './wadors/getPixelData.js';\nimport { default as version } from '../version.js';\nimport { internal } from './internal/index.js';\nimport { default as external } from '../externalModules.js';\n\nconst cornerstoneWADOImageLoader = {\n convertRGBColorByPixel,\n convertRGBColorByPlane,\n convertYBRFullByPixel,\n convertYBRFullByPlane,\n convertPALETTECOLOR,\n wadouri,\n wadors,\n configure,\n convertColorSpace,\n createImage,\n decodeImageFrame,\n decodeJPEGBaseline8BitColor,\n getImageFrame,\n getPixelData,\n getMinMax,\n isColorImage,\n isJPEGBaseline8BitColor,\n webWorkerManager,\n version,\n internal,\n external,\n};\n\nexport {\n convertRGBColorByPixel,\n convertRGBColorByPlane,\n convertYBRFullByPixel,\n convertYBRFullByPlane,\n convertPALETTECOLOR,\n wadouri,\n wadors,\n configure,\n convertColorSpace,\n createImage,\n decodeImageFrame,\n decodeJPEGBaseline8BitColor,\n getImageFrame,\n getPixelData,\n getMinMax,\n isColorImage,\n isJPEGBaseline8BitColor,\n webWorkerManager,\n version,\n internal,\n external,\n};\n\nexport default cornerstoneWADOImageLoader;\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBind = require('./');\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n","'use strict';\n\nvar bind = require('function-bind');\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n","/*!\n Copyright (c) 2018 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames() {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tif (arg.length) {\n\t\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\t\tif (inner) {\n\t\t\t\t\t\tclasses.push(inner);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tif (arg.toString === Object.prototype.toString) {\n\t\t\t\t\tfor (var key in arg) {\n\t\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tclasses.push(arg.toString());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","var CAN_USE_DOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\n// Adapted from Modernizr\n// https://github.com/Modernizr/Modernizr/blob/acb3f0d9/feature-detects/dom/passiveeventlisteners.js#L26-L37\nfunction testPassiveEventListeners() {\n if (!CAN_USE_DOM) {\n return false;\n }\n\n if (!window.addEventListener || !window.removeEventListener || !Object.defineProperty) {\n return false;\n }\n\n var supportsPassiveOption = false;\n try {\n var opts = Object.defineProperty({}, 'passive', {\n // eslint-disable-next-line getter-return\n get: function () {\n function get() {\n supportsPassiveOption = true;\n }\n\n return get;\n }()\n });\n var noop = function noop() {};\n window.addEventListener('testPassiveEventSupport', noop, opts);\n window.removeEventListener('testPassiveEventSupport', noop, opts);\n } catch (e) {\n // do nothing\n }\n\n return supportsPassiveOption;\n}\n\nvar memoized = void 0;\n\nfunction canUsePassiveEventListeners() {\n if (memoized === undefined) {\n memoized = testPassiveEventListeners();\n }\n return memoized;\n}\n\nfunction normalizeEventOptions(eventOptions) {\n if (!eventOptions) {\n return undefined;\n }\n\n if (!canUsePassiveEventListeners()) {\n // If the browser does not support the passive option, then it is expecting\n // a boolean for the options argument to specify whether it should use\n // capture or not. In more modern browsers, this is passed via the `capture`\n // option, so let's just hoist that value up.\n return !!eventOptions.capture;\n }\n\n return eventOptions;\n}\n\n/* eslint-disable no-bitwise */\n\n/**\n * Generate a unique key for any set of event options\n */\nfunction eventOptionsKey(normalizedEventOptions) {\n if (!normalizedEventOptions) {\n return 0;\n }\n\n // If the browser does not support passive event listeners, the normalized\n // event options will be a boolean.\n if (normalizedEventOptions === true) {\n return 100;\n }\n\n // At this point, the browser supports passive event listeners, so we expect\n // the event options to be an object with possible properties of capture,\n // passive, and once.\n //\n // We want to consistently return the same value, regardless of the order of\n // these properties, so let's use binary maths to assign each property to a\n // bit, and then add those together (with an offset to account for the\n // booleans at the beginning of this function).\n var capture = normalizedEventOptions.capture << 0;\n var passive = normalizedEventOptions.passive << 1;\n var once = normalizedEventOptions.once << 2;\n return capture + passive + once;\n}\n\nfunction ensureCanMutateNextEventHandlers(eventHandlers) {\n if (eventHandlers.handlers === eventHandlers.nextHandlers) {\n // eslint-disable-next-line no-param-reassign\n eventHandlers.nextHandlers = eventHandlers.handlers.slice();\n }\n}\n\nfunction TargetEventHandlers(target) {\n this.target = target;\n this.events = {};\n}\n\nTargetEventHandlers.prototype.getEventHandlers = function () {\n function getEventHandlers(eventName, options) {\n var key = String(eventName) + ' ' + String(eventOptionsKey(options));\n\n if (!this.events[key]) {\n this.events[key] = {\n handlers: [],\n handleEvent: undefined\n };\n this.events[key].nextHandlers = this.events[key].handlers;\n }\n\n return this.events[key];\n }\n\n return getEventHandlers;\n}();\n\nTargetEventHandlers.prototype.handleEvent = function () {\n function handleEvent(eventName, options, event) {\n var eventHandlers = this.getEventHandlers(eventName, options);\n eventHandlers.handlers = eventHandlers.nextHandlers;\n eventHandlers.handlers.forEach(function (handler) {\n if (handler) {\n // We need to check for presence here because a handler function may\n // cause later handlers to get removed. This can happen if you for\n // instance have a waypoint that unmounts another waypoint as part of an\n // onEnter/onLeave handler.\n handler(event);\n }\n });\n }\n\n return handleEvent;\n}();\n\nTargetEventHandlers.prototype.add = function () {\n function add(eventName, listener, options) {\n var _this = this;\n\n // options has already been normalized at this point.\n var eventHandlers = this.getEventHandlers(eventName, options);\n\n ensureCanMutateNextEventHandlers(eventHandlers);\n\n if (eventHandlers.nextHandlers.length === 0) {\n eventHandlers.handleEvent = this.handleEvent.bind(this, eventName, options);\n\n this.target.addEventListener(eventName, eventHandlers.handleEvent, options);\n }\n\n eventHandlers.nextHandlers.push(listener);\n\n var isSubscribed = true;\n var unsubscribe = function () {\n function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n\n isSubscribed = false;\n\n ensureCanMutateNextEventHandlers(eventHandlers);\n var index = eventHandlers.nextHandlers.indexOf(listener);\n eventHandlers.nextHandlers.splice(index, 1);\n\n if (eventHandlers.nextHandlers.length === 0) {\n // All event handlers have been removed, so we want to remove the event\n // listener from the target node.\n\n if (_this.target) {\n // There can be a race condition where the target may no longer exist\n // when this function is called, e.g. when a React component is\n // unmounting. Guarding against this prevents the following error:\n //\n // Cannot read property 'removeEventListener' of undefined\n _this.target.removeEventListener(eventName, eventHandlers.handleEvent, options);\n }\n\n eventHandlers.handleEvent = undefined;\n }\n }\n\n return unsubscribe;\n }();\n return unsubscribe;\n }\n\n return add;\n}();\n\nvar EVENT_HANDLERS_KEY = '__consolidated_events_handlers__';\n\n// eslint-disable-next-line import/prefer-default-export\nfunction addEventListener(target, eventName, listener, options) {\n if (!target[EVENT_HANDLERS_KEY]) {\n // eslint-disable-next-line no-param-reassign\n target[EVENT_HANDLERS_KEY] = new TargetEventHandlers(target);\n }\n var normalizedEventOptions = normalizeEventOptions(options);\n return target[EVENT_HANDLERS_KEY].add(eventName, listener, normalizedEventOptions);\n}\n\nexport { addEventListener };\n","/*! cornerstone-math - 0.1.9 - 2020-10-01 | (c) 2017 Chris Hafey | https://github.com/cornerstonejs/cornerstoneMath */\n!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(\"cornerstone-math\",[],e):\"object\"==typeof exports?exports[\"cornerstone-math\"]=e():t.cornerstoneMath=e()}(window,function(){return function(t){var e={};function n(i){if(e[i])return e[i].exports;var r=e[i]={i:i,l:!1,exports:{}};return t[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},n.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var r in t)n.d(i,r,function(e){return t[e]}.bind(null,r));return i},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,\"a\",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p=\"\",n(n.s=4)}([function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var i=function(){function t(t,e){for(var n=0;nt.x&&(this.x=t.x),this.y>t.y&&(this.y=t.y),this.z>t.z&&(this.z=t.z),this}},{key:\"max\",value:function(t){return this.xe.x&&(this.x=e.x),this.ye.y&&(this.y=e.y),this.ze.z&&(this.z=e.z),this}},{key:\"floor\",value:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}},{key:\"ceil\",value:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}},{key:\"round\",value:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}},{key:\"roundToZero\",value:function(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this}},{key:\"negate\",value:function(){return this.multiplyScalar(-1)}},{key:\"dot\",value:function(t){return this.x*t.x+this.y*t.y+this.z*t.z}},{key:\"lengthSq\",value:function(){return this.x*this.x+this.y*this.y+this.z*this.z}},{key:\"length\",value:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}},{key:\"lengthManhattan\",value:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}},{key:\"normalize\",value:function(){return this.divideScalar(this.length())}},{key:\"setLength\",value:function(t){var e=this.length();return 0!==e&&t!==e&&this.multiplyScalar(t/e),this}},{key:\"lerp\",value:function(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}},{key:\"cross\",value:function(t,e){if(void 0!==e)return console.warn(\"DEPRECATED: Vector3's .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.\"),this.crossVectors(t,e);var n=this.x,i=this.y,r=this.z;return this.x=i*t.z-r*t.y,this.y=r*t.x-n*t.z,this.z=n*t.y-i*t.x,this}},{key:\"crossVectors\",value:function(t,e){var n=t.x,i=t.y,r=t.z,o=e.x,s=e.y,a=e.z;return this.x=i*a-r*s,this.y=r*o-n*a,this.z=n*s-i*o,this}},{key:\"angleTo\",value:function(t){var e=this.dot(t)/(this.length()*t.length());return Math.acos((0,o.clamp)(e,-1,1))}},{key:\"distanceTo\",value:function(t){return Math.sqrt(this.distanceToSquared(t))}},{key:\"distanceToSquared\",value:function(t){var e=this.x-t.x,n=this.y-t.y,i=this.z-t.z;return e*e+n*n+i*i}},{key:\"setFromMatrixPosition\",value:function(t){return this.x=t.elements[12],this.y=t.elements[13],this.z=t.elements[14],this}},{key:\"setFromMatrixScale\",value:function(t){var e=this.set(t.elements[0],t.elements[1],t.elements[2]).length(),n=this.set(t.elements[4],t.elements[5],t.elements[6]).length(),i=this.set(t.elements[8],t.elements[9],t.elements[10]).length();return this.x=e,this.y=n,this.z=i,this}},{key:\"setFromMatrixColumn\",value:function(t,e){var n=4*t,i=e.elements;return this.x=i[n],this.y=i[n+1],this.z=i[n+2],this}},{key:\"equals\",value:function(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}},{key:\"fromArray\",value:function(t){return this.x=t[0],this.y=t[1],this.z=t[2],this}},{key:\"toArray\",value:function(){return[this.x,this.y,this.z]}},{key:\"clone\",value:function(){return new t(this.x,this.y,this.z)}}]),t}();s.prototype.projectOnVector=function(){var t=void 0,e=void 0;return function(n){return void 0===t&&(t=new s),t.copy(n).normalize(),e=this.dot(t),this.copy(t).multiplyScalar(e)}}(),s.prototype.projectOnPlane=function(){var t=void 0;return function(e){return void 0===t&&(t=new s),t.copy(this).projectOnVector(e),this.sub(t)}}(),s.prototype.reflect=function(){var t=void 0;return function(e){return void 0===t&&(t=new s),this.sub(t.copy(e).multiplyScalar(2*this.dot(e)))}}(),s.prototype.clampScalar=function(){var t=void 0,e=void 0;return function(n,i){return void 0===t&&(t=new s,e=new s),t.set(n,n,n),e.set(i,i,i),this.clamp(t,e)}}(),s.prototype.applyAxisAngle=function(){var t=void 0;return function(e,n){return void 0===t&&(t=new r.default),this.applyQuaternion(t.setFromAxisAngle(e.normalize(),n)),this}}(),e.default=s},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var i=1e-4;e.clamp=function(t,e,n){return tn?n:t},e.degToRad=function(t){return t*(Math.PI/180)},e.approximatelyEquals=function(t,e,n){var r=n||i;return Math.abs(t-e)<=r*Math.max(1,Math.abs(t),Math.abs(e))},e.radToDeg=function(t){return t*(180/Math.PI)},e.sign=function(t){return\"number\"==typeof t?t?t<0?-1:1:t==t?0:NaN:NaN}},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var i=function(){function t(t,e){for(var n=0;n0?(y=.5/Math.sqrt(c+1),this.w=.25/y,this.x=(h-a)*y,this.y=(r-u)*y,this.z=(o-i)*y):n>s&&n>l?(y=2*Math.sqrt(1+n-s-l),this.w=(h-a)/y,this.x=.25*y,this.y=(i+o)/y,this.z=(r+u)/y):s>l?(y=2*Math.sqrt(1+s-n-l),this.w=(r-u)/y,this.x=(i+o)/y,this.y=.25*y,this.z=(a+h)/y):(y=2*Math.sqrt(1+l-n-s),this.w=(o-i)/y,this.x=(r+u)/y,this.y=(a+h)/y,this.z=.25*y),this}}]),t}();e.default=r},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var i=n(1);function r(t){return t*t}function o(t,e){return r(t.x-e.x)+r(t.y-e.y)}var s={distanceToPoint:function(t,e){return Math.sqrt(function(t,e){var n=o(t.start,t.end);if(0===n)return o(e,t.start);var i=((e.x-t.start.x)*(t.end.x-t.start.x)+(e.y-t.start.y)*(t.end.y-t.start.y))/n;return o(e,i<0?t.start:i>1?t.end:{x:t.start.x+i*(t.end.x-t.start.x),y:t.start.y+i*(t.end.y-t.start.y)})}(t,e))},intersectLine:function(t,e){var n,r,o,s,a,u,h,l,c,y,f,d={},v=t.start.x,p=t.start.y,x=t.end.x,m=t.end.y,g=e.start.x,b=e.start.y,z=e.end.x,k=e.end.y,M=void 0;if(y=(n=m-p)*z+(o=v-x)*k+(a=x*p-v*m),(0===(c=n*g+o*b+a)||0===y||(0,i.sign)(c)!==(0,i.sign)(y))&&(l=(r=k-b)*x+(s=g-z)*m+(u=z*b-g*k),0===(h=r*v+s*p+u)||0===l||(0,i.sign)(h)!==(0,i.sign)(l))){f=n*s-r*o,M=o*u-s*a;var w=parseFloat(M/f);M=r*a-n*u;var P=parseFloat(M/f);return d.x=w,d.y=P,d}}};e.default=s},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Vector3=e.rect=e.quaternion=e.point=e.Plane=e.Matrix4=e.sign=e.radToDeg=e.degToRad=e.clamp=e.lineSegment=e.Line3=void 0;var i=y(n(5)),r=y(n(3)),o=n(1),s=y(n(6)),a=y(n(7)),u=y(n(8)),h=y(n(2)),l=y(n(9)),c=y(n(0));function y(t){return t&&t.__esModule?t:{default:t}}var f={Line3:i.default,lineSegment:r.default,clamp:o.clamp,degToRad:o.degToRad,radToDeg:o.radToDeg,sign:o.sign,Matrix4:s.default,Plane:a.default,point:u.default,quaternion:h.default,rect:l.default,Vector3:c.default};e.Line3=i.default,e.lineSegment=r.default,e.clamp=o.clamp,e.degToRad=o.degToRad,e.radToDeg=o.radToDeg,e.sign=o.sign,e.Matrix4=s.default,e.Plane=a.default,e.point=u.default,e.quaternion=h.default,e.rect=l.default,e.Vector3=c.default,e.default=f},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var i=function(){function t(t,e){for(var n=0;n1||isNaN(u))){var h=this.start.clone().add(e.clone().multiplyScalar(u));return h.clone().sub(t.start).lengthSq()+h.clone().sub(t.end).lengthSq()<=t.distanceSq()?h:void 0}}}}]),t}();e.default=s},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var i=function(){function t(t,e){for(var n=0;n0||n<0&&e>0}},{key:\"intersectPlane\",value:function(t){var e=this.normal.clone().cross(t.normal),n={origin:new r.default,direction:e};if(this.normal.clone().cross(t.normal).length<1e-10)return n.direction=new r.default,n;var i=this.constant,o=t.constant,s=this.normal.clone().dot(t.normal),a=-(i-o*s)/(1-s*s),u=-(o-i*s)/(1-s*s);return n.origin=this.normal.clone().multiplyScalar(a).add(t.normal.clone().multiplyScalar(u)),n}},{key:\"coplanarPoint\",value:function(t){return(t||new r.default).copy(this.normal).multiplyScalar(-this.constant)}},{key:\"translate\",value:function(t){return this.constant=this.constant-t.dot(this.normal),this}},{key:\"equals\",value:function(t){return t.normal.equals(this.normal)&&t.constant===this.constant}},{key:\"clone\",value:function(){return(new t).copy(this)}}]),t}();o.prototype.setFromCoplanarPoints=function(){var t=new r.default,e=new r.default;return function(n,i,r){var o=t.subVectors(r,i).cross(e.subVectors(n,i)).normalize();return this.setFromNormalAndCoplanarPoint(o,n),this}}(),o.prototype.intersectLine=function(){var t=new r.default;return function(e,n){var i=n||new r.default,o=e.delta(t),s=this.normal.dot(o);if(0===s)return 0===this.distanceToPoint(e.start)?i.copy(e.start):void 0;var a=-(e.start.dot(this.normal)+this.constant)/s;return a<0||a>1?void 0:i.copy(o).multiplyScalar(a).add(e.start)}}(),e.default=o},function(t,e,n){\"use strict\";function i(t,e){return{x:t.x-e.x,y:t.y-e.y}}function r(t,e){return Math.sqrt(o(t,e))}function o(t,e){var n=i(t,e);return n.x*n.x+n.y*n.y}Object.defineProperty(e,\"__esModule\",{value:!0});var s={subtract:i,copy:function(t){return{x:t.x,y:t.y}},pageToPoint:function(t){return{x:t.pageX,y:t.pageY}},distance:r,distanceSquared:o,insideRect:function(t,e){return!(t.xe.left+e.width||t.ye.top+e.height)},findClosestPoint:function(t,e){var n=[],i=void 0;return t.forEach(function(t,o){var s=r(t,e);n.push(s),i=0===o?s:Math.min(s,i)}),t[n.indexOf(i)]}};e.default=s},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var i=function(t){return t&&t.__esModule?t:{default:t}}(n(3));function r(t){return{topLeft:{x:t.left,y:t.top},bottomRight:{x:t.left+t.width,y:t.top+t.height}}}var o={distanceToPoint:function(t,e){var n=655535;return function(t){return[{start:{x:t.left,y:t.top},end:{x:t.left+t.width,y:t.top}},{start:{x:t.left+t.width,y:t.top},end:{x:t.left+t.width,y:t.top+t.height}},{start:{x:t.left+t.width,y:t.top+t.height},end:{x:t.left,y:t.top+t.height}},{start:{x:t.left,y:t.top+t.height},end:{x:t.left,y:t.top}}]}(t).forEach(function(t){var r=i.default.distanceToPoint(t,e);r=0?e.width>=0?!(o.bottomRight.x<=s.topLeft.x||s.bottomRight.x<=o.topLeft.x):!(o.bottomRight.x<=s.bottomRight.x||s.topLeft.x<=o.topLeft.x):e.width>=0?!(o.topLeft.x<=s.topLeft.x||s.bottomRight.x<=o.bottomRight.x):!(o.topLeft.x<=s.bottomRight.x||s.topLeft.x<=o.bottomRight.x),i=t.height>=0?e.height>=0?!(o.bottomRight.y<=s.topLeft.y||s.bottomRight.y<=o.topLeft.y):!(o.bottomRight.y<=s.bottomRight.y||s.topLeft.y<=o.topLeft.y):e.height>=0?!(o.topLeft.y<=s.topLeft.y||s.bottomRight.y<=o.bottomRight.y):!(o.topLeft.y<=s.bottomRight.y||s.top<=o.bottomRight.y),n&&i}(t,e)){var i=r(t),o=r(e);return t.width>=0?e.width>=0?(n.topLeft.x=Math.max(i.topLeft.x,o.topLeft.x),n.bottomRight.x=Math.min(i.bottomRight.x,o.bottomRight.x)):(n.topLeft.x=Math.max(i.topLeft.x,o.bottomRight.x),n.bottomRight.x=Math.min(i.bottomRight.x,o.topLeft.x)):e.width>=0?(n.topLeft.x=Math.min(i.topLeft.x,o.bottomRight.x),n.bottomRight.x=Math.max(i.bottomRight.x,o.topLeft.x)):(n.topLeft.x=Math.min(i.topLeft.x,o.topLeft.x),n.bottomRight.x=Math.max(i.bottomRight.x,o.bottomRight.x)),t.height>=0?e.height>=0?(n.topLeft.y=Math.max(i.topLeft.y,o.topLeft.y),n.bottomRight.y=Math.min(i.bottomRight.y,o.bottomRight.y)):(n.topLeft.y=Math.max(i.topLeft.y,o.bottomRight.y),n.bottomRight.y=Math.min(i.bottomRight.y,o.topLeft.y)):e.height>=0?(n.topLeft.y=Math.min(i.topLeft.y,o.bottomRight.y),n.bottomRight.y=Math.max(i.bottomRight.y,o.topLeft.y)):(n.topLeft.y=Math.min(i.topLeft.y,o.topLeft.y),n.bottomRight.y=Math.max(i.bottomRight.y,o.bottomRight.y)),n}}};e.default=o}])});\n//# sourceMappingURL=cornerstoneMath.min.js.map","var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\n/*\n Copyright © 2018 Andrew Powell\n\n This Source Code Form is subject to the terms of the Mozilla Public\n License, v. 2.0. If a copy of the MPL was not distributed with this\n file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n The above copyright notice and this permission notice shall be\n included in all copies or substantial portions of this Source Code Form.\n*/\n\nconst noop = () => {};\nconst levels = Symbol('log-levels');\nconst instance = Symbol('log-instance');\n\nvar MethodFactory_1 = class MethodFactory {\n constructor(logger) {\n this[instance] = logger;\n this[levels] = {\n TRACE: 0,\n DEBUG: 1,\n INFO: 2,\n WARN: 3,\n ERROR: 4,\n SILENT: 5\n };\n }\n\n get levels() {\n return this[levels];\n }\n\n get logger() {\n return this[instance];\n }\n\n set logger(logger) {\n this[instance] = logger;\n }\n\n get methods() {\n return Object.keys(this.levels)\n .map((key) => key.toLowerCase())\n .filter((key) => key !== 'silent');\n }\n\n // eslint-disable-next-line class-methods-use-this\n bindMethod(obj, methodName) {\n const method = obj[methodName];\n if (typeof method.bind === 'function') {\n return method.bind(obj);\n }\n\n try {\n return Function.prototype.bind.call(method, obj);\n } catch (e) {\n // Missing bind shim or IE8 + Modernizr, fallback to wrapping\n return function result() {\n // eslint-disable-next-line prefer-rest-params\n return Function.prototype.apply.apply(method, [obj, arguments]);\n };\n }\n }\n\n distillLevel(level) {\n let result = level;\n\n if (typeof result === 'string' && typeof this.levels[result.toUpperCase()] !== 'undefined') {\n result = this.levels[result.toUpperCase()];\n }\n\n if (this.levelValid(result)) {\n return result;\n }\n\n return false;\n }\n\n levelValid(level) {\n if (typeof level === 'number' && level >= 0 && level <= this.levels.SILENT) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Build the best logging method possible for this env\n * Wherever possible we want to bind, not wrap, to preserve stack traces.\n * Since we're targeting modern browsers, there's no need to wait for the\n * console to become available.\n */\n // eslint-disable-next-line class-methods-use-this\n make(methodName) {\n if (methodName === 'debug') {\n // eslint-disable-next-line no-param-reassign\n methodName = 'log';\n }\n\n /* eslint-disable no-console */\n if (typeof console[methodName] !== 'undefined') {\n return this.bindMethod(console, methodName);\n } else if (typeof console.log !== 'undefined') {\n return this.bindMethod(console, 'log');\n }\n\n /* eslint-enable no-console */\n return noop;\n }\n\n replaceMethods(logLevel) {\n const level = this.distillLevel(logLevel);\n\n if (level == null) {\n throw new Error(`loglevelnext: replaceMethods() called with invalid level: ${logLevel}`);\n }\n\n if (!this.logger || this.logger.type !== 'LogLevel') {\n throw new TypeError(\n 'loglevelnext: Logger is undefined or invalid. Please specify a valid Logger instance.'\n );\n }\n\n this.methods.forEach((methodName) => {\n const { [methodName.toUpperCase()]: methodLevel } = this.levels;\n\n this.logger[methodName] = methodLevel < level ? noop : this.make(methodName);\n });\n\n // Define log.log as an alias for log.debug\n this.logger.log = this.logger.debug;\n }\n};\n\n/*\n Copyright © 2018 Andrew Powell\n\n This Source Code Form is subject to the terms of the Mozilla Public\n License, v. 2.0. If a copy of the MPL was not distributed with this\n file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n The above copyright notice and this permission notice shall be\n included in all copies or substantial portions of this Source Code Form.\n*/\n\n\n\nconst defaults = {\n level: (opts) => `[${opts.level}]`,\n name: (opts) => opts.logger.name,\n template: '{{time}} {{level}} ',\n time: () => new Date().toTimeString().split(' ')[0]\n};\n\nvar PrefixFactory_1 = class PrefixFactory extends MethodFactory_1 {\n constructor(logger, options) {\n super(logger);\n this.options = Object.assign({}, defaults, options);\n }\n\n interpolate(level) {\n return this.options.template.replace(/{{([^{}]*)}}/g, (stache, prop) => {\n const fn = this.options[prop];\n\n if (fn) {\n return fn({ level, logger: this.logger });\n }\n\n return stache;\n });\n }\n\n make(methodName) {\n const og = super.make(methodName);\n\n return (...args) => {\n const output = this.interpolate(methodName);\n const [first] = args;\n\n if (typeof first === 'string') {\n // eslint-disable-next-line no-param-reassign\n args[0] = output + first;\n } else {\n args.unshift(output);\n }\n\n og(...args);\n };\n }\n};\n\n/*\n Copyright © 2018 Andrew Powell\n\n This Source Code Form is subject to the terms of the Mozilla Public\n License, v. 2.0. If a copy of the MPL was not distributed with this\n file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n The above copyright notice and this permission notice shall be\n included in all copies or substantial portions of this Source Code Form.\n*/\n\n\n\n\n\nconst defaults$1 = {\n factory: null,\n level: 'warn',\n name: +new Date(),\n prefix: null\n};\n\nvar LogLevel_1 = class LogLevel {\n constructor(options) {\n // implement for some _very_ loose type checking. avoids getting into a\n // circular require between MethodFactory and LogLevel\n this.type = 'LogLevel';\n this.options = Object.assign({}, defaults$1, options);\n this.methodFactory = options.factory;\n\n if (!this.methodFactory) {\n const factory = options.prefix\n ? new PrefixFactory_1(this, options.prefix)\n : new MethodFactory_1(this);\n this.methodFactory = factory;\n }\n\n if (!this.methodFactory.logger) {\n this.methodFactory.logger = this;\n }\n\n this.name = options.name || '';\n\n // this.level is a setter, do this after setting up the factory\n this.level = this.options.level;\n }\n\n get factory() {\n return this.methodFactory;\n }\n\n set factory(factory) {\n // eslint-disable-next-line no-param-reassign\n factory.logger = this;\n this.methodFactory = factory;\n this.methodFactory.replaceMethods(this.level);\n }\n\n disable() {\n this.level = this.levels.SILENT;\n }\n\n enable() {\n this.level = this.levels.TRACE;\n }\n\n get level() {\n return this.currentLevel;\n }\n\n set level(logLevel) {\n const level = this.methodFactory.distillLevel(logLevel);\n\n if (level === false || level == null) {\n throw new RangeError(`loglevelnext: setLevel() called with invalid level: ${logLevel}`);\n }\n\n this.currentLevel = level;\n this.methodFactory.replaceMethods(level);\n\n if (typeof console === 'undefined' && level < this.levels.SILENT) {\n // eslint-disable-next-line no-console\n console.warn('loglevelnext: console is undefined. The log will produce no output.');\n }\n }\n\n get levels() {\n // eslint-disable-line class-methods-use-this\n return this.methodFactory.levels;\n }\n};\n\nvar lib = createCommonjsModule(function (module) {\n/*\n Copyright © 2018 Andrew Powell\n\n This Source Code Form is subject to the terms of the Mozilla Public\n License, v. 2.0. If a copy of the MPL was not distributed with this\n file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n The above copyright notice and this permission notice shall be\n included in all copies or substantial portions of this Source Code Form.\n*/\n\n\n\n\n\nconst factories = Symbol('log-factories');\n\nclass DefaultLogger extends LogLevel_1 {\n constructor() {\n super({ name: 'default' });\n\n this.cache = { default: this };\n this[factories] = { MethodFactory: MethodFactory_1, PrefixFactory: PrefixFactory_1 };\n }\n\n get factories() {\n return this[factories];\n }\n\n get loggers() {\n return this.cache;\n }\n\n create(opts) {\n let options;\n\n if (typeof opts === 'string') {\n options = { name: opts };\n } else {\n options = Object.assign({}, opts);\n }\n\n if (!options.id) {\n options.id = options.name;\n }\n\n const { name, id } = options;\n const defaults = { level: this.level };\n\n if (typeof name !== 'string' || !name || !name.length) {\n throw new TypeError('You must supply a name when creating a logger.');\n }\n\n let logger = this.cache[id];\n if (!logger) {\n logger = new LogLevel_1(Object.assign({}, defaults, options));\n this.cache[id] = logger;\n }\n return logger;\n }\n}\n\nmodule.exports = new DefaultLogger();\n\n// TypeScript fix\nmodule.exports.default = module.exports;\n});\n\nvar log = lib.create(\"dcmjs\");\n\n/* eslint no-bitwise: 0 */\nvar BitArray = {\n getBytesForBinaryFrame: getBytesForBinaryFrame,\n pack: pack,\n unpack: unpack\n};\n\nfunction getBytesForBinaryFrame(numPixels) {\n // Check whether the 1-bit pixels exactly fit into bytes\n var remainder = numPixels % 8; // Number of bytes that work on an exact fit\n\n var bytesRequired = Math.floor(numPixels / 8); // Add one byte if we have a remainder\n\n if (remainder > 0) {\n bytesRequired++;\n }\n\n return bytesRequired;\n}\n\nfunction pack(pixelData) {\n var numPixels = pixelData.length;\n log.log(\"numPixels: \" + numPixels);\n var length = getBytesForBinaryFrame(numPixels); //log.log('getBytesForBinaryFrame: ' + length);\n\n var bitPixelData = new Uint8Array(length);\n var bytePos = 0;\n\n for (var i = 0; i < numPixels; i++) {\n // Compute byte position\n bytePos = Math.floor(i / 8);\n var pixValue = pixelData[i] !== 0; //log.log('i: ' + i);\n //log.log('pixValue: ' + pixValue);\n //log.log('bytePos: ' + bytePos);\n\n var bitPixelValue = pixValue << i % 8; //log.log('current bitPixelData: ' + bitPixelData[bytePos]);\n //log.log('this bitPixelValue: ' + bitPixelValue);\n\n bitPixelData[bytePos] |= bitPixelValue; //log.log('new bitPixelValue: ' + bitPixelData[bytePos]);\n }\n\n return bitPixelData;\n} // convert a packed bitwise pixel array into a byte-per-pixel\n// array with 255 corresponding to each set bit in the bit array\n\n\nfunction unpack(bitPixelArray) {\n var bitArray = new Uint8Array(bitPixelArray);\n var byteArray = new Uint8Array(8 * bitArray.length);\n\n for (var byteIndex = 0; byteIndex < byteArray.length; byteIndex++) {\n var bitIndex = byteIndex % 8;\n var bitByteIndex = Math.floor(byteIndex / 8);\n byteArray[byteIndex] = 255 * ((bitArray[bitByteIndex] & 1 << bitIndex) >> bitIndex);\n }\n\n return byteArray;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n\n return target;\n}\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction _construct(Parent, args, Class) {\n if (_isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) _setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}\n\nfunction _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\n\nfunction _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !_isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return _construct(Class, arguments, _getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return _setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _createSuper(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct();\n\n return function _createSuperInternal() {\n var Super = _getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = _getPrototypeOf(this).constructor;\n\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return _possibleConstructorReturn(this, result);\n };\n}\n\nfunction _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = _getPrototypeOf(object);\n if (object === null) break;\n }\n\n return object;\n}\n\nfunction _get() {\n if (typeof Reflect !== \"undefined\" && Reflect.get) {\n _get = Reflect.get;\n } else {\n _get = function _get(target, property, receiver) {\n var base = _superPropBase(target, property);\n\n if (!base) return;\n var desc = Object.getOwnPropertyDescriptor(base, property);\n\n if (desc.get) {\n return desc.get.call(arguments.length < 3 ? target : receiver);\n }\n\n return desc.value;\n };\n }\n\n return _get.apply(this, arguments);\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n\n if (!it) {\n if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n var i = 0;\n\n var F = function () {};\n\n return {\n s: F,\n n: function () {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function (e) {\n throw e;\n },\n f: F\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function () {\n it = it.call(o);\n },\n n: function () {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function (e) {\n didErr = true;\n err = e;\n },\n f: function () {\n try {\n if (!normalCompletion && it.return != null) it.return();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}\n\n/*! pako 2.0.4 https://github.com/nodeca/pako @license (MIT AND Zlib) */\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n/* eslint-disable space-unary-ops */\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//const Z_FILTERED = 1;\n//const Z_HUFFMAN_ONLY = 2;\n//const Z_RLE = 3;\nconst Z_FIXED$1 = 4;\n//const Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nconst Z_BINARY = 0;\nconst Z_TEXT = 1;\n//const Z_ASCII = 1; // = Z_TEXT\nconst Z_UNKNOWN$1 = 2;\n\n/*============================================================================*/\n\n\nfunction zero$1(buf) { let len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nconst STORED_BLOCK = 0;\nconst STATIC_TREES = 1;\nconst DYN_TREES = 2;\n/* The three kinds of block type */\n\nconst MIN_MATCH$1 = 3;\nconst MAX_MATCH$1 = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nconst LENGTH_CODES$1 = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nconst LITERALS$1 = 256;\n/* number of literal bytes 0..255 */\n\nconst L_CODES$1 = LITERALS$1 + 1 + LENGTH_CODES$1;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nconst D_CODES$1 = 30;\n/* number of distance codes */\n\nconst BL_CODES$1 = 19;\n/* number of codes used to transfer the bit lengths */\n\nconst HEAP_SIZE$1 = 2 * L_CODES$1 + 1;\n/* maximum heap size */\n\nconst MAX_BITS$1 = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nconst Buf_size = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nconst MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nconst END_BLOCK = 256;\n/* end of block literal code */\n\nconst REP_3_6 = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nconst REPZ_3_10 = 17;\n/* repeat a zero length 3-10 times (3 bits of repeat count) */\n\nconst REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nconst extra_lbits = /* extra bits for each length code */\n new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]);\n\nconst extra_dbits = /* extra bits for each distance code */\n new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]);\n\nconst extra_blbits = /* extra bits for each bit length code */\n new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]);\n\nconst bl_order =\n new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nconst DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1\nconst static_ltree = new Array((L_CODES$1 + 2) * 2);\nzero$1(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nconst static_dtree = new Array(D_CODES$1 * 2);\nzero$1(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nconst _dist_code = new Array(DIST_CODE_LEN);\nzero$1(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nconst _length_code = new Array(MAX_MATCH$1 - MIN_MATCH$1 + 1);\nzero$1(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nconst base_length = new Array(LENGTH_CODES$1);\nzero$1(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nconst base_dist = new Array(D_CODES$1);\nzero$1(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n this.static_tree = static_tree; /* static tree or NULL */\n this.extra_bits = extra_bits; /* extra bits for each code or NULL */\n this.extra_base = extra_base; /* base index for extra_bits */\n this.elems = elems; /* max number of elements in the tree */\n this.max_length = max_length; /* max bit length for the codes */\n\n // show if `static_tree` has data or dummy - needed for monomorphic objects\n this.has_stree = static_tree && static_tree.length;\n}\n\n\nlet static_l_desc;\nlet static_d_desc;\nlet static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n this.dyn_tree = dyn_tree; /* the dynamic tree */\n this.max_code = 0; /* largest code with non zero frequency */\n this.stat_desc = stat_desc; /* the corresponding static tree */\n}\n\n\n\nconst d_code = (dist) => {\n\n return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n};\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nconst put_short = (s, w) => {\n// put_byte(s, (uch)((w) & 0xff));\n// put_byte(s, (uch)((ush)(w) >> 8));\n s.pending_buf[s.pending++] = (w) & 0xff;\n s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n};\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nconst send_bits = (s, value, length) => {\n\n if (s.bi_valid > (Buf_size - length)) {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n put_short(s, s.bi_buf);\n s.bi_buf = value >> (Buf_size - s.bi_valid);\n s.bi_valid += length - Buf_size;\n } else {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n s.bi_valid += length;\n }\n};\n\n\nconst send_code = (s, c, tree) => {\n\n send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n};\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nconst bi_reverse = (code, len) => {\n\n let res = 0;\n do {\n res |= code & 1;\n code >>>= 1;\n res <<= 1;\n } while (--len > 0);\n return res >>> 1;\n};\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nconst bi_flush = (s) => {\n\n if (s.bi_valid === 16) {\n put_short(s, s.bi_buf);\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n } else if (s.bi_valid >= 8) {\n s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n s.bi_buf >>= 8;\n s.bi_valid -= 8;\n }\n};\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n * above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n * array bl_count contains the frequencies for each bit length.\n * The length opt_len is updated; static_len is also updated if stree is\n * not null.\n */\nconst gen_bitlen = (s, desc) =>\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n{\n const tree = desc.dyn_tree;\n const max_code = desc.max_code;\n const stree = desc.stat_desc.static_tree;\n const has_stree = desc.stat_desc.has_stree;\n const extra = desc.stat_desc.extra_bits;\n const base = desc.stat_desc.extra_base;\n const max_length = desc.stat_desc.max_length;\n let h; /* heap index */\n let n, m; /* iterate over the tree elements */\n let bits; /* bit length */\n let xbits; /* extra bits */\n let f; /* frequency */\n let overflow = 0; /* number of elements with bit length too large */\n\n for (bits = 0; bits <= MAX_BITS$1; bits++) {\n s.bl_count[bits] = 0;\n }\n\n /* In a first pass, compute the optimal bit lengths (which may\n * overflow in the case of the bit length tree).\n */\n tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n for (h = s.heap_max + 1; h < HEAP_SIZE$1; h++) {\n n = s.heap[h];\n bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n if (bits > max_length) {\n bits = max_length;\n overflow++;\n }\n tree[n * 2 + 1]/*.Len*/ = bits;\n /* We overwrite tree[n].Dad which is no longer needed */\n\n if (n > max_code) { continue; } /* not a leaf node */\n\n s.bl_count[bits]++;\n xbits = 0;\n if (n >= base) {\n xbits = extra[n - base];\n }\n f = tree[n * 2]/*.Freq*/;\n s.opt_len += f * (bits + xbits);\n if (has_stree) {\n s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n }\n }\n if (overflow === 0) { return; }\n\n // Trace((stderr,\"\\nbit length overflow\\n\"));\n /* This happens for example on obj2 and pic of the Calgary corpus */\n\n /* Find the first bit length which could increase: */\n do {\n bits = max_length - 1;\n while (s.bl_count[bits] === 0) { bits--; }\n s.bl_count[bits]--; /* move one leaf down the tree */\n s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n s.bl_count[max_length]--;\n /* The brother of the overflow item also moves one step up,\n * but this does not affect bl_count[max_length]\n */\n overflow -= 2;\n } while (overflow > 0);\n\n /* Now recompute all bit lengths, scanning in increasing frequency.\n * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n * lengths instead of fixing only the wrong ones. This idea is taken\n * from 'ar' written by Haruhiko Okumura.)\n */\n for (bits = max_length; bits !== 0; bits--) {\n n = s.bl_count[bits];\n while (n !== 0) {\n m = s.heap[--h];\n if (m > max_code) { continue; }\n if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n // Trace((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n tree[m * 2 + 1]/*.Len*/ = bits;\n }\n n--;\n }\n }\n};\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n * zero code length.\n */\nconst gen_codes = (tree, max_code, bl_count) =>\n// ct_data *tree; /* the tree to decorate */\n// int max_code; /* largest code with non zero frequency */\n// ushf *bl_count; /* number of codes at each bit length */\n{\n const next_code = new Array(MAX_BITS$1 + 1); /* next code value for each bit length */\n let code = 0; /* running code value */\n let bits; /* bit index */\n let n; /* code index */\n\n /* The distribution counts are first used to generate the code values\n * without bit reversal.\n */\n for (bits = 1; bits <= MAX_BITS$1; bits++) {\n next_code[bits] = code = (code + bl_count[bits - 1]) << 1;\n }\n /* Check that the bit counts in bl_count are consistent. The last code\n * must be all ones.\n */\n //Assert (code + bl_count[MAX_BITS]-1 == (1< {\n\n let n; /* iterates over tree elements */\n let bits; /* bit counter */\n let length; /* length value */\n let code; /* code value */\n let dist; /* distance index */\n const bl_count = new Array(MAX_BITS$1 + 1);\n /* number of codes at each bit length for an optimal tree */\n\n // do check in _tr_init()\n //if (static_init_done) return;\n\n /* For some embedded targets, global variables are not initialized: */\n/*#ifdef NO_INIT_GLOBAL_POINTERS\n static_l_desc.static_tree = static_ltree;\n static_l_desc.extra_bits = extra_lbits;\n static_d_desc.static_tree = static_dtree;\n static_d_desc.extra_bits = extra_dbits;\n static_bl_desc.extra_bits = extra_blbits;\n#endif*/\n\n /* Initialize the mapping length (0..255) -> length code (0..28) */\n length = 0;\n for (code = 0; code < LENGTH_CODES$1 - 1; code++) {\n base_length[code] = length;\n for (n = 0; n < (1 << extra_lbits[code]); n++) {\n _length_code[length++] = code;\n }\n }\n //Assert (length == 256, \"tr_static_init: length != 256\");\n /* Note that the length 255 (match length 258) can be represented\n * in two different ways: code 284 + 5 bits or code 285, so we\n * overwrite length_code[255] to use the best encoding:\n */\n _length_code[length - 1] = code;\n\n /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n dist = 0;\n for (code = 0; code < 16; code++) {\n base_dist[code] = dist;\n for (n = 0; n < (1 << extra_dbits[code]); n++) {\n _dist_code[dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: dist != 256\");\n dist >>= 7; /* from now on, all distances are divided by 128 */\n for (; code < D_CODES$1; code++) {\n base_dist[code] = dist << 7;\n for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n _dist_code[256 + dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n /* Construct the codes of the static literal tree */\n for (bits = 0; bits <= MAX_BITS$1; bits++) {\n bl_count[bits] = 0;\n }\n\n n = 0;\n while (n <= 143) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n while (n <= 255) {\n static_ltree[n * 2 + 1]/*.Len*/ = 9;\n n++;\n bl_count[9]++;\n }\n while (n <= 279) {\n static_ltree[n * 2 + 1]/*.Len*/ = 7;\n n++;\n bl_count[7]++;\n }\n while (n <= 287) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n /* Codes 286 and 287 do not exist, but we must include them in the\n * tree construction to get a canonical Huffman tree (longest code\n * all ones)\n */\n gen_codes(static_ltree, L_CODES$1 + 1, bl_count);\n\n /* The static distance tree is trivial: */\n for (n = 0; n < D_CODES$1; n++) {\n static_dtree[n * 2 + 1]/*.Len*/ = 5;\n static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n }\n\n // Now data ready and we can init static trees\n static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS$1 + 1, L_CODES$1, MAX_BITS$1);\n static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES$1, MAX_BITS$1);\n static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES$1, MAX_BL_BITS);\n\n //static_init_done = true;\n};\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nconst init_block = (s) => {\n\n let n; /* iterates over tree elements */\n\n /* Initialize the trees. */\n for (n = 0; n < L_CODES$1; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < D_CODES$1; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < BL_CODES$1; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n s.opt_len = s.static_len = 0;\n s.last_lit = s.matches = 0;\n};\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nconst bi_windup = (s) =>\n{\n if (s.bi_valid > 8) {\n put_short(s, s.bi_buf);\n } else if (s.bi_valid > 0) {\n //put_byte(s, (Byte)s->bi_buf);\n s.pending_buf[s.pending++] = s.bi_buf;\n }\n s.bi_buf = 0;\n s.bi_valid = 0;\n};\n\n/* ===========================================================================\n * Copy a stored block, storing first the length and its\n * one's complement if requested.\n */\nconst copy_block = (s, buf, len, header) =>\n//DeflateState *s;\n//charf *buf; /* the input data */\n//unsigned len; /* its length */\n//int header; /* true if block header must be written */\n{\n bi_windup(s); /* align on byte boundary */\n\n if (header) {\n put_short(s, len);\n put_short(s, ~len);\n }\n// while (len--) {\n// put_byte(s, *buf++);\n// }\n s.pending_buf.set(s.window.subarray(buf, buf + len), s.pending);\n s.pending += len;\n};\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nconst smaller = (tree, n, m, depth) => {\n\n const _n2 = n * 2;\n const _m2 = m * 2;\n return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n};\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nconst pqdownheap = (s, tree, k) =>\n// deflate_state *s;\n// ct_data *tree; /* the tree to restore */\n// int k; /* node to move down */\n{\n const v = s.heap[k];\n let j = k << 1; /* left son of k */\n while (j <= s.heap_len) {\n /* Set j to the smallest of the two sons: */\n if (j < s.heap_len &&\n smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n j++;\n }\n /* Exit if v is smaller than both sons */\n if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n /* Exchange v with the smallest son */\n s.heap[k] = s.heap[j];\n k = j;\n\n /* And continue down the tree, setting j to the left son of k */\n j <<= 1;\n }\n s.heap[k] = v;\n};\n\n\n// inlined manually\n// const SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nconst compress_block = (s, ltree, dtree) =>\n// deflate_state *s;\n// const ct_data *ltree; /* literal tree */\n// const ct_data *dtree; /* distance tree */\n{\n let dist; /* distance of matched string */\n let lc; /* match length or unmatched char (if dist == 0) */\n let lx = 0; /* running index in l_buf */\n let code; /* the code to send */\n let extra; /* number of extra bits to send */\n\n if (s.last_lit !== 0) {\n do {\n dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);\n lc = s.pending_buf[s.l_buf + lx];\n lx++;\n\n if (dist === 0) {\n send_code(s, lc, ltree); /* send a literal byte */\n //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n } else {\n /* Here, lc is the match length - MIN_MATCH */\n code = _length_code[lc];\n send_code(s, code + LITERALS$1 + 1, ltree); /* send the length code */\n extra = extra_lbits[code];\n if (extra !== 0) {\n lc -= base_length[code];\n send_bits(s, lc, extra); /* send the extra length bits */\n }\n dist--; /* dist is now the match distance - 1 */\n code = d_code(dist);\n //Assert (code < D_CODES, \"bad d_code\");\n\n send_code(s, code, dtree); /* send the distance code */\n extra = extra_dbits[code];\n if (extra !== 0) {\n dist -= base_dist[code];\n send_bits(s, dist, extra); /* send the extra distance bits */\n }\n } /* literal or match pair ? */\n\n /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */\n //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,\n // \"pendingBuf overflow\");\n\n } while (lx < s.last_lit);\n }\n\n send_code(s, END_BLOCK, ltree);\n};\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n * and corresponding code. The length opt_len is updated; static_len is\n * also updated if stree is not null. The field max_code is set.\n */\nconst build_tree = (s, desc) =>\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n{\n const tree = desc.dyn_tree;\n const stree = desc.stat_desc.static_tree;\n const has_stree = desc.stat_desc.has_stree;\n const elems = desc.stat_desc.elems;\n let n, m; /* iterate over heap elements */\n let max_code = -1; /* largest code with non zero frequency */\n let node; /* new node being created */\n\n /* Construct the initial heap, with least frequent element in\n * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n * heap[0] is not used.\n */\n s.heap_len = 0;\n s.heap_max = HEAP_SIZE$1;\n\n for (n = 0; n < elems; n++) {\n if (tree[n * 2]/*.Freq*/ !== 0) {\n s.heap[++s.heap_len] = max_code = n;\n s.depth[n] = 0;\n\n } else {\n tree[n * 2 + 1]/*.Len*/ = 0;\n }\n }\n\n /* The pkzip format requires that at least one distance code exists,\n * and that at least one bit should be sent even if there is only one\n * possible code. So to avoid special checks later on we force at least\n * two codes of non zero frequency.\n */\n while (s.heap_len < 2) {\n node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n tree[node * 2]/*.Freq*/ = 1;\n s.depth[node] = 0;\n s.opt_len--;\n\n if (has_stree) {\n s.static_len -= stree[node * 2 + 1]/*.Len*/;\n }\n /* node is 0 or 1 so it does not have extra bits */\n }\n desc.max_code = max_code;\n\n /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n * establish sub-heaps of increasing lengths:\n */\n for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n /* Construct the Huffman tree by repeatedly combining the least two\n * frequent nodes.\n */\n node = elems; /* next internal node of the tree */\n do {\n //pqremove(s, tree, n); /* n = node of least frequency */\n /*** pqremove ***/\n n = s.heap[1/*SMALLEST*/];\n s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n pqdownheap(s, tree, 1/*SMALLEST*/);\n /***/\n\n m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n s.heap[--s.heap_max] = m;\n\n /* Create a new node father of n and m */\n tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n /* and insert the new node in the heap */\n s.heap[1/*SMALLEST*/] = node++;\n pqdownheap(s, tree, 1/*SMALLEST*/);\n\n } while (s.heap_len >= 2);\n\n s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n /* At this point, the fields freq and dad are set. We can now\n * generate the bit lengths.\n */\n gen_bitlen(s, desc);\n\n /* The field len is now set, we can generate the bit codes */\n gen_codes(tree, max_code, s.bl_count);\n};\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nconst scan_tree = (s, tree, max_code) =>\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n{\n let n; /* iterates over all tree elements */\n let prevlen = -1; /* last emitted length */\n let curlen; /* length of current code */\n\n let nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n let count = 0; /* repeat count of the current code */\n let max_count = 7; /* max repeat count */\n let min_count = 4; /* min repeat count */\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n } else if (curlen !== 0) {\n\n if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n } else if (count <= 10) {\n s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n } else {\n s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n }\n\n count = 0;\n prevlen = curlen;\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n};\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nconst send_tree = (s, tree, max_code) =>\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n{\n let n; /* iterates over all tree elements */\n let prevlen = -1; /* last emitted length */\n let curlen; /* length of current code */\n\n let nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n let count = 0; /* repeat count of the current code */\n let max_count = 7; /* max repeat count */\n let min_count = 4; /* min repeat count */\n\n /* tree[max_code+1].Len = -1; */ /* guard already set */\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n } else if (curlen !== 0) {\n if (curlen !== prevlen) {\n send_code(s, curlen, s.bl_tree);\n count--;\n }\n //Assert(count >= 3 && count <= 6, \" 3_6?\");\n send_code(s, REP_3_6, s.bl_tree);\n send_bits(s, count - 3, 2);\n\n } else if (count <= 10) {\n send_code(s, REPZ_3_10, s.bl_tree);\n send_bits(s, count - 3, 3);\n\n } else {\n send_code(s, REPZ_11_138, s.bl_tree);\n send_bits(s, count - 11, 7);\n }\n\n count = 0;\n prevlen = curlen;\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n};\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nconst build_bl_tree = (s) => {\n\n let max_blindex; /* index of last bit length code of non zero freq */\n\n /* Determine the bit length frequencies for literal and distance trees */\n scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n /* Build the bit length tree: */\n build_tree(s, s.bl_desc);\n /* opt_len now includes the length of the tree representations, except\n * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n */\n\n /* Determine the number of bit length codes to send. The pkzip format\n * requires that at least 4 bit length codes be sent. (appnote.txt says\n * 3 but the actual value used is 4.)\n */\n for (max_blindex = BL_CODES$1 - 1; max_blindex >= 3; max_blindex--) {\n if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n break;\n }\n }\n /* Update opt_len to include the bit length tree and counts */\n s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n // s->opt_len, s->static_len));\n\n return max_blindex;\n};\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nconst send_all_trees = (s, lcodes, dcodes, blcodes) =>\n// deflate_state *s;\n// int lcodes, dcodes, blcodes; /* number of codes for each tree */\n{\n let rank; /* index in bl_order */\n\n //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n // \"too many codes\");\n //Tracev((stderr, \"\\nbl counts: \"));\n send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n send_bits(s, dcodes - 1, 5);\n send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */\n for (rank = 0; rank < blcodes; rank++) {\n //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n }\n //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n};\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n * a) There are no non-portable control characters belonging to the\n * \"black list\" (0..6, 14..25, 28..31).\n * b) There is at least one printable character belonging to the\n * \"white list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n * \"gray list\" that is ignored in this detection algorithm:\n * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nconst detect_data_type = (s) => {\n /* black_mask is the bit mask of black-listed bytes\n * set bits 0..6, 14..25, and 28..31\n * 0xf3ffc07f = binary 11110011111111111100000001111111\n */\n let black_mask = 0xf3ffc07f;\n let n;\n\n /* Check for non-textual (\"black-listed\") bytes. */\n for (n = 0; n <= 31; n++, black_mask >>>= 1) {\n if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n return Z_BINARY;\n }\n }\n\n /* Check for textual (\"white-listed\") bytes. */\n if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n for (n = 32; n < LITERALS$1; n++) {\n if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n }\n\n /* There are no \"black-listed\" or \"white-listed\" bytes:\n * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n */\n return Z_BINARY;\n};\n\n\nlet static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nconst _tr_init$1 = (s) =>\n{\n\n if (!static_init_done) {\n tr_static_init();\n static_init_done = true;\n }\n\n s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);\n s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);\n s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n /* Initialize the first block of the first file: */\n init_block(s);\n};\n\n\n/* ===========================================================================\n * Send a stored block\n */\nconst _tr_stored_block$1 = (s, buf, stored_len, last) =>\n//DeflateState *s;\n//charf *buf; /* input block */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n{\n send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */\n copy_block(s, buf, stored_len, true); /* with header */\n};\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nconst _tr_align$1 = (s) => {\n send_bits(s, STATIC_TREES << 1, 3);\n send_code(s, END_BLOCK, static_ltree);\n bi_flush(s);\n};\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and output the encoded block to the zip file.\n */\nconst _tr_flush_block$1 = (s, buf, stored_len, last) =>\n//DeflateState *s;\n//charf *buf; /* input block, or NULL if too old */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n{\n let opt_lenb, static_lenb; /* opt_len and static_len in bytes */\n let max_blindex = 0; /* index of last bit length code of non zero freq */\n\n /* Build the Huffman trees unless a stored block is forced */\n if (s.level > 0) {\n\n /* Check if the file is binary or text */\n if (s.strm.data_type === Z_UNKNOWN$1) {\n s.strm.data_type = detect_data_type(s);\n }\n\n /* Construct the literal and distance trees */\n build_tree(s, s.l_desc);\n // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n\n build_tree(s, s.d_desc);\n // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n /* At this point, opt_len and static_len are the total bit lengths of\n * the compressed block data, excluding the tree representations.\n */\n\n /* Build the bit length tree for the above two trees, and get the index\n * in bl_order of the last bit length code to send.\n */\n max_blindex = build_bl_tree(s);\n\n /* Determine the best encoding. Compute the block lengths in bytes. */\n opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n // s->last_lit));\n\n if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n } else {\n // Assert(buf != (char*)0, \"lost buf\");\n opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n }\n\n if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n /* 4: two words for the lengths */\n\n /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n * Otherwise we can't have processed more than WSIZE input bytes since\n * the last block flush, because compression would have been\n * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n * transform a block into a stored block.\n */\n _tr_stored_block$1(s, buf, stored_len, last);\n\n } else if (s.strategy === Z_FIXED$1 || static_lenb === opt_lenb) {\n\n send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n compress_block(s, static_ltree, static_dtree);\n\n } else {\n send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n compress_block(s, s.dyn_ltree, s.dyn_dtree);\n }\n // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n /* The above check is made mod 2^32, for files larger than 512 MB\n * and uLong implemented on 32 bits.\n */\n init_block(s);\n\n if (last) {\n bi_windup(s);\n }\n // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n // s->compressed_len-7*last));\n};\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nconst _tr_tally$1 = (s, dist, lc) =>\n// deflate_state *s;\n// unsigned dist; /* distance of matched string */\n// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */\n{\n //let out_length, in_length, dcode;\n\n s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff;\n s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;\n\n s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;\n s.last_lit++;\n\n if (dist === 0) {\n /* lc is the unmatched char */\n s.dyn_ltree[lc * 2]/*.Freq*/++;\n } else {\n s.matches++;\n /* Here, lc is the match length - MIN_MATCH */\n dist--; /* dist = match distance - 1 */\n //Assert((ush)dist < (ush)MAX_DIST(s) &&\n // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n // (ush)d_code(dist) < (ush)D_CODES, \"_tr_tally: bad match\");\n\n s.dyn_ltree[(_length_code[lc] + LITERALS$1 + 1) * 2]/*.Freq*/++;\n s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n\n//#ifdef TRUNCATE_BLOCK\n// /* Try to guess if it is profitable to stop the current block here */\n// if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {\n// /* Compute an upper bound for the compressed length */\n// out_length = s.last_lit*8;\n// in_length = s.strstart - s.block_start;\n//\n// for (dcode = 0; dcode < D_CODES; dcode++) {\n// out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);\n// }\n// out_length >>>= 3;\n// //Tracev((stderr,\"\\nlast_lit %u, in %ld, out ~%ld(%ld%%) \",\n// // s->last_lit, in_length, out_length,\n// // 100L - out_length*100L/in_length));\n// if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {\n// return true;\n// }\n// }\n//#endif\n\n return (s.last_lit === s.lit_bufsize - 1);\n /* We avoid equality with lit_bufsize because of wraparound at 64K\n * on 16 bit machines and because stored blocks are restricted to\n * 64K-1 bytes.\n */\n};\n\nvar _tr_init_1 = _tr_init$1;\nvar _tr_stored_block_1 = _tr_stored_block$1;\nvar _tr_flush_block_1 = _tr_flush_block$1;\nvar _tr_tally_1 = _tr_tally$1;\nvar _tr_align_1 = _tr_align$1;\n\nvar trees = {\n\t_tr_init: _tr_init_1,\n\t_tr_stored_block: _tr_stored_block_1,\n\t_tr_flush_block: _tr_flush_block_1,\n\t_tr_tally: _tr_tally_1,\n\t_tr_align: _tr_align_1\n};\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst adler32 = (adler, buf, len, pos) => {\n let s1 = (adler & 0xffff) |0,\n s2 = ((adler >>> 16) & 0xffff) |0,\n n = 0;\n\n while (len !== 0) {\n // Set limit ~ twice less than 5552, to keep\n // s2 in 31-bits, because we force signed ints.\n // in other case %= will fail.\n n = len > 2000 ? 2000 : len;\n len -= n;\n\n do {\n s1 = (s1 + buf[pos++]) |0;\n s2 = (s2 + s1) |0;\n } while (--n);\n\n s1 %= 65521;\n s2 %= 65521;\n }\n\n return (s1 | (s2 << 16)) |0;\n};\n\n\nvar adler32_1 = adler32;\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nconst makeTable = () => {\n let c, table = [];\n\n for (var n = 0; n < 256; n++) {\n c = n;\n for (var k = 0; k < 8; k++) {\n c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n table[n] = c;\n }\n\n return table;\n};\n\n// Create table on load. Just 255 signed longs. Not a problem.\nconst crcTable = new Uint32Array(makeTable());\n\n\nconst crc32 = (crc, buf, len, pos) => {\n const t = crcTable;\n const end = pos + len;\n\n crc ^= -1;\n\n for (let i = pos; i < end; i++) {\n crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n }\n\n return (crc ^ (-1)); // >>> 0;\n};\n\n\nvar crc32_1 = crc32;\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar messages = {\n 2: 'need dictionary', /* Z_NEED_DICT 2 */\n 1: 'stream end', /* Z_STREAM_END 1 */\n 0: '', /* Z_OK 0 */\n '-1': 'file error', /* Z_ERRNO (-1) */\n '-2': 'stream error', /* Z_STREAM_ERROR (-2) */\n '-3': 'data error', /* Z_DATA_ERROR (-3) */\n '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */\n '-5': 'buffer error', /* Z_BUF_ERROR (-5) */\n '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar constants$2 = {\n\n /* Allowed flush values; see deflate() and inflate() below for details */\n Z_NO_FLUSH: 0,\n Z_PARTIAL_FLUSH: 1,\n Z_SYNC_FLUSH: 2,\n Z_FULL_FLUSH: 3,\n Z_FINISH: 4,\n Z_BLOCK: 5,\n Z_TREES: 6,\n\n /* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\n Z_OK: 0,\n Z_STREAM_END: 1,\n Z_NEED_DICT: 2,\n Z_ERRNO: -1,\n Z_STREAM_ERROR: -2,\n Z_DATA_ERROR: -3,\n Z_MEM_ERROR: -4,\n Z_BUF_ERROR: -5,\n //Z_VERSION_ERROR: -6,\n\n /* compression levels */\n Z_NO_COMPRESSION: 0,\n Z_BEST_SPEED: 1,\n Z_BEST_COMPRESSION: 9,\n Z_DEFAULT_COMPRESSION: -1,\n\n\n Z_FILTERED: 1,\n Z_HUFFMAN_ONLY: 2,\n Z_RLE: 3,\n Z_FIXED: 4,\n Z_DEFAULT_STRATEGY: 0,\n\n /* Possible values of the data_type field (though see inflate()) */\n Z_BINARY: 0,\n Z_TEXT: 1,\n //Z_ASCII: 1, // = Z_TEXT (deprecated)\n Z_UNKNOWN: 2,\n\n /* The deflate compression method */\n Z_DEFLATED: 8\n //Z_NULL: null // Use -1 or null inline, depending on var type\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst { _tr_init, _tr_stored_block, _tr_flush_block, _tr_tally, _tr_align } = trees;\n\n\n\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_NO_FLUSH: Z_NO_FLUSH$2, Z_PARTIAL_FLUSH, Z_FULL_FLUSH: Z_FULL_FLUSH$1, Z_FINISH: Z_FINISH$3, Z_BLOCK: Z_BLOCK$1,\n Z_OK: Z_OK$3, Z_STREAM_END: Z_STREAM_END$3, Z_STREAM_ERROR: Z_STREAM_ERROR$2, Z_DATA_ERROR: Z_DATA_ERROR$2, Z_BUF_ERROR: Z_BUF_ERROR$1,\n Z_DEFAULT_COMPRESSION: Z_DEFAULT_COMPRESSION$1,\n Z_FILTERED, Z_HUFFMAN_ONLY, Z_RLE, Z_FIXED, Z_DEFAULT_STRATEGY: Z_DEFAULT_STRATEGY$1,\n Z_UNKNOWN,\n Z_DEFLATED: Z_DEFLATED$2\n} = constants$2;\n\n/*============================================================================*/\n\n\nconst MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nconst MAX_WBITS$1 = 15;\n/* 32K LZ77 window */\nconst DEF_MEM_LEVEL = 8;\n\n\nconst LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nconst LITERALS = 256;\n/* number of literal bytes 0..255 */\nconst L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nconst D_CODES = 30;\n/* number of distance codes */\nconst BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\nconst HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\nconst MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nconst MIN_MATCH = 3;\nconst MAX_MATCH = 258;\nconst MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nconst PRESET_DICT = 0x20;\n\nconst INIT_STATE = 42;\nconst EXTRA_STATE = 69;\nconst NAME_STATE = 73;\nconst COMMENT_STATE = 91;\nconst HCRC_STATE = 103;\nconst BUSY_STATE = 113;\nconst FINISH_STATE = 666;\n\nconst BS_NEED_MORE = 1; /* block not completed, need more input or more output */\nconst BS_BLOCK_DONE = 2; /* block flush performed */\nconst BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nconst BS_FINISH_DONE = 4; /* finish done, accept no more input or output */\n\nconst OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nconst err = (strm, errorCode) => {\n strm.msg = messages[errorCode];\n return errorCode;\n};\n\nconst rank = (f) => {\n return ((f) << 1) - ((f) > 4 ? 9 : 0);\n};\n\nconst zero = (buf) => {\n let len = buf.length; while (--len >= 0) { buf[len] = 0; }\n};\n\n\n/* eslint-disable new-cap */\nlet HASH_ZLIB = (s, prev, data) => ((prev << s.hash_shift) ^ data) & s.hash_mask;\n// This hash causes less collisions, https://github.com/nodeca/pako/issues/135\n// But breaks binary compatibility\n//let HASH_FAST = (s, prev, data) => ((prev << 8) + (prev >> 8) + (data << 4)) & s.hash_mask;\nlet HASH = HASH_ZLIB;\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output goes\n * through this function so some applications may wish to modify it\n * to avoid allocating a large strm->output buffer and copying into it.\n * (See also read_buf()).\n */\nconst flush_pending = (strm) => {\n const s = strm.state;\n\n //_tr_flush_bits(s);\n let len = s.pending;\n if (len > strm.avail_out) {\n len = strm.avail_out;\n }\n if (len === 0) { return; }\n\n strm.output.set(s.pending_buf.subarray(s.pending_out, s.pending_out + len), strm.next_out);\n strm.next_out += len;\n s.pending_out += len;\n strm.total_out += len;\n strm.avail_out -= len;\n s.pending -= len;\n if (s.pending === 0) {\n s.pending_out = 0;\n }\n};\n\n\nconst flush_block_only = (s, last) => {\n _tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n s.block_start = s.strstart;\n flush_pending(s.strm);\n};\n\n\nconst put_byte = (s, b) => {\n s.pending_buf[s.pending++] = b;\n};\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nconst putShortMSB = (s, b) => {\n\n // put_byte(s, (Byte)(b >> 8));\n// put_byte(s, (Byte)(b & 0xff));\n s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n s.pending_buf[s.pending++] = b & 0xff;\n};\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read. All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nconst read_buf = (strm, buf, start, size) => {\n\n let len = strm.avail_in;\n\n if (len > size) { len = size; }\n if (len === 0) { return 0; }\n\n strm.avail_in -= len;\n\n // zmemcpy(buf, strm->next_in, len);\n buf.set(strm.input.subarray(strm.next_in, strm.next_in + len), start);\n if (strm.state.wrap === 1) {\n strm.adler = adler32_1(strm.adler, buf, len, start);\n }\n\n else if (strm.state.wrap === 2) {\n strm.adler = crc32_1(strm.adler, buf, len, start);\n }\n\n strm.next_in += len;\n strm.total_in += len;\n\n return len;\n};\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nconst longest_match = (s, cur_match) => {\n\n let chain_length = s.max_chain_length; /* max hash chain length */\n let scan = s.strstart; /* current string */\n let match; /* matched string */\n let len; /* length of current match */\n let best_len = s.prev_length; /* best match length so far */\n let nice_match = s.nice_match; /* stop if match long enough */\n const limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n const _win = s.window; // shortcut\n\n const wmask = s.w_mask;\n const prev = s.prev;\n\n /* Stop when cur_match becomes <= limit. To simplify the code,\n * we prevent matches with the string of window index 0.\n */\n\n const strend = s.strstart + MAX_MATCH;\n let scan_end1 = _win[scan + best_len - 1];\n let scan_end = _win[scan + best_len];\n\n /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n * It is easy to get rid of this optimization if necessary.\n */\n // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n /* Do not waste too much time if we already have a good match: */\n if (s.prev_length >= s.good_match) {\n chain_length >>= 2;\n }\n /* Do not look for matches beyond the end of the input. This is necessary\n * to make deflate deterministic.\n */\n if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n do {\n // Assert(cur_match < s->strstart, \"no future\");\n match = cur_match;\n\n /* Skip to next match if the match length cannot increase\n * or if the match length is less than 2. Note that the checks below\n * for insufficient lookahead only occur occasionally for performance\n * reasons. Therefore uninitialized memory will be accessed, and\n * conditional jumps will be made that depend on those values.\n * However the length of the match is limited to the lookahead, so\n * the output of deflate is not affected by the uninitialized values.\n */\n\n if (_win[match + best_len] !== scan_end ||\n _win[match + best_len - 1] !== scan_end1 ||\n _win[match] !== _win[scan] ||\n _win[++match] !== _win[scan + 1]) {\n continue;\n }\n\n /* The check at best_len-1 can be removed because it will be made\n * again later. (This heuristic is not always a win.)\n * It is not necessary to compare scan[2] and match[2] since they\n * are always equal when the other bytes match, given that\n * the hash keys are equal and that HASH_BITS >= 8.\n */\n scan += 2;\n match++;\n // Assert(*scan == *match, \"match[2]?\");\n\n /* We check for insufficient lookahead only every 8th comparison;\n * the 256th check will be made at strstart+258.\n */\n do {\n /*jshint noempty:false*/\n } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n scan < strend);\n\n // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n len = MAX_MATCH - (strend - scan);\n scan = strend - MAX_MATCH;\n\n if (len > best_len) {\n s.match_start = cur_match;\n best_len = len;\n if (len >= nice_match) {\n break;\n }\n scan_end1 = _win[scan + best_len - 1];\n scan_end = _win[scan + best_len];\n }\n } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n if (best_len <= s.lookahead) {\n return best_len;\n }\n return s.lookahead;\n};\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n * At least one byte has been read, or avail_in == 0; reads are\n * performed for at least two bytes (required for the zip translate_eol\n * option -- not supported here).\n */\nconst fill_window = (s) => {\n\n const _w_size = s.w_size;\n let p, n, m, more, str;\n\n //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n do {\n more = s.window_size - s.lookahead - s.strstart;\n\n // JS ints have 32 bit, block below not needed\n /* Deal with !@#$% 64K limit: */\n //if (sizeof(int) <= 2) {\n // if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n // more = wsize;\n //\n // } else if (more == (unsigned)(-1)) {\n // /* Very unlikely, but possible on 16 bit machine if\n // * strstart == 0 && lookahead == 1 (input done a byte at time)\n // */\n // more--;\n // }\n //}\n\n\n /* If the window is almost full and there is insufficient lookahead,\n * move the upper half to the lower one to make room in the upper half.\n */\n if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n s.window.set(s.window.subarray(_w_size, _w_size + _w_size), 0);\n s.match_start -= _w_size;\n s.strstart -= _w_size;\n /* we now have strstart >= MAX_DIST */\n s.block_start -= _w_size;\n\n /* Slide the hash table (could be avoided with 32 bit values\n at the expense of memory usage). We slide even when level == 0\n to keep the hash table consistent if we switch back to level > 0\n later. (Using level 0 permanently is not an optimal usage of\n zlib, so we don't care about this pathological case.)\n */\n\n n = s.hash_size;\n p = n;\n\n do {\n m = s.head[--p];\n s.head[p] = (m >= _w_size ? m - _w_size : 0);\n } while (--n);\n\n n = _w_size;\n p = n;\n\n do {\n m = s.prev[--p];\n s.prev[p] = (m >= _w_size ? m - _w_size : 0);\n /* If n is not on any hash chain, prev[n] is garbage but\n * its value will never be used.\n */\n } while (--n);\n\n more += _w_size;\n }\n if (s.strm.avail_in === 0) {\n break;\n }\n\n /* If there was no sliding:\n * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n * more == window_size - lookahead - strstart\n * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n * => more >= window_size - 2*WSIZE + 2\n * In the BIG_MEM or MMAP case (not yet supported),\n * window_size == input_size + MIN_LOOKAHEAD &&\n * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n * Otherwise, window_size == 2*WSIZE so more >= 2.\n * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n */\n //Assert(more >= 2, \"more < 2\");\n n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n s.lookahead += n;\n\n /* Initialize the hash value now that we have some input: */\n if (s.lookahead + s.insert >= MIN_MATCH) {\n str = s.strstart - s.insert;\n s.ins_h = s.window[str];\n\n /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n s.ins_h = HASH(s, s.ins_h, s.window[str + 1]);\n//#if MIN_MATCH != 3\n// Call update_hash() MIN_MATCH-3 more times\n//#endif\n while (s.insert) {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = HASH(s, s.ins_h, s.window[str + MIN_MATCH - 1]);\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = str;\n str++;\n s.insert--;\n if (s.lookahead + s.insert < MIN_MATCH) {\n break;\n }\n }\n }\n /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n * but this is not important since only literal bytes will be emitted.\n */\n\n } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n /* If the WIN_INIT bytes after the end of the current data have never been\n * written, then zero those bytes in order to avoid memory check reports of\n * the use of uninitialized (or uninitialised as Julian writes) bytes by\n * the longest match routines. Update the high water mark for the next\n * time through here. WIN_INIT is set to MAX_MATCH since the longest match\n * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n */\n// if (s.high_water < s.window_size) {\n// const curr = s.strstart + s.lookahead;\n// let init = 0;\n//\n// if (s.high_water < curr) {\n// /* Previous high water mark below current data -- zero WIN_INIT\n// * bytes or up to end of window, whichever is less.\n// */\n// init = s.window_size - curr;\n// if (init > WIN_INIT)\n// init = WIN_INIT;\n// zmemzero(s->window + curr, (unsigned)init);\n// s->high_water = curr + init;\n// }\n// else if (s->high_water < (ulg)curr + WIN_INIT) {\n// /* High water mark at or above current data, but below current data\n// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n// * to end of window, whichever is less.\n// */\n// init = (ulg)curr + WIN_INIT - s->high_water;\n// if (init > s->window_size - s->high_water)\n// init = s->window_size - s->high_water;\n// zmemzero(s->window + s->high_water, (unsigned)init);\n// s->high_water += init;\n// }\n// }\n//\n// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n// \"not enough room for search\");\n};\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n * This function does not insert new strings in the dictionary since\n * uncompressible data is probably not useful. This function is used\n * only for the level=0 compression option.\n * NOTE: this function should be optimized to avoid extra copying from\n * window to pending_buf.\n */\nconst deflate_stored = (s, flush) => {\n\n /* Stored blocks are limited to 0xffff bytes, pending_buf is limited\n * to pending_buf_size, and each stored block has a 5 byte header:\n */\n let max_block_size = 0xffff;\n\n if (max_block_size > s.pending_buf_size - 5) {\n max_block_size = s.pending_buf_size - 5;\n }\n\n /* Copy as much as possible from input to output: */\n for (;;) {\n /* Fill the window as much as possible: */\n if (s.lookahead <= 1) {\n\n //Assert(s->strstart < s->w_size+MAX_DIST(s) ||\n // s->block_start >= (long)s->w_size, \"slide too late\");\n// if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||\n// s.block_start >= s.w_size)) {\n// throw new Error(\"slide too late\");\n// }\n\n fill_window(s);\n if (s.lookahead === 0 && flush === Z_NO_FLUSH$2) {\n return BS_NEED_MORE;\n }\n\n if (s.lookahead === 0) {\n break;\n }\n /* flush the current block */\n }\n //Assert(s->block_start >= 0L, \"block gone\");\n// if (s.block_start < 0) throw new Error(\"block gone\");\n\n s.strstart += s.lookahead;\n s.lookahead = 0;\n\n /* Emit a stored block if pending_buf will be full: */\n const max_start = s.block_start + max_block_size;\n\n if (s.strstart === 0 || s.strstart >= max_start) {\n /* strstart == 0 is possible when wraparound on 16-bit machine */\n s.lookahead = s.strstart - max_start;\n s.strstart = max_start;\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n\n\n }\n /* Flush if we may have to slide, otherwise block_start may become\n * negative and the data will be gone:\n */\n if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n\n s.insert = 0;\n\n if (flush === Z_FINISH$3) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n\n if (s.strstart > s.block_start) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_NEED_MORE;\n};\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nconst deflate_fast = (s, flush) => {\n\n let hash_head; /* head of the hash chain */\n let bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH$2) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) {\n break; /* flush the current block */\n }\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n * At this point we have always match_length < MIN_MATCH\n */\n if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n }\n if (s.match_length >= MIN_MATCH) {\n // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n /*** _tr_tally_dist(s, s.strstart - s.match_start,\n s.match_length - MIN_MATCH, bflush); ***/\n bflush = _tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n\n /* Insert new strings in the hash table only if the match length\n * is not too large. This saves time but degrades compression.\n */\n if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n s.match_length--; /* string at strstart already in table */\n do {\n s.strstart++;\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n * always MIN_MATCH bytes ahead.\n */\n } while (--s.match_length !== 0);\n s.strstart++;\n } else\n {\n s.strstart += s.match_length;\n s.match_length = 0;\n s.ins_h = s.window[s.strstart];\n /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + 1]);\n\n//#if MIN_MATCH != 3\n// Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n * matter since it will be recomputed at next deflate call.\n */\n }\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n if (flush === Z_FINISH$3) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n};\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nconst deflate_slow = (s, flush) => {\n\n let hash_head; /* head of hash chain */\n let bflush; /* set if current block must be flushed */\n\n let max_insert;\n\n /* Process the input block. */\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH$2) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n */\n s.prev_length = s.match_length;\n s.prev_match = s.match_start;\n s.match_length = MIN_MATCH - 1;\n\n if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n\n if (s.match_length <= 5 &&\n (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n /* If prev_match is also MIN_MATCH, match_start is garbage\n * but we will ignore the current match anyway.\n */\n s.match_length = MIN_MATCH - 1;\n }\n }\n /* If there was a match at the previous step and the current\n * match is not better, output the previous match:\n */\n if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n max_insert = s.strstart + s.lookahead - MIN_MATCH;\n /* Do not insert strings in hash table beyond this. */\n\n //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n s.prev_length - MIN_MATCH, bflush);***/\n bflush = _tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n /* Insert in hash table all strings up to the end of the match.\n * strstart-1 and strstart are already inserted. If there is not\n * enough lookahead, the last two strings are not inserted in\n * the hash table.\n */\n s.lookahead -= s.prev_length - 1;\n s.prev_length -= 2;\n do {\n if (++s.strstart <= max_insert) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n } while (--s.prev_length !== 0);\n s.match_available = 0;\n s.match_length = MIN_MATCH - 1;\n s.strstart++;\n\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n } else if (s.match_available) {\n /* If there was no match at the previous position, output a\n * single literal. If there was a match but the current match\n * is longer, truncate the previous match to a single literal.\n */\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart - 1]);\n\n if (bflush) {\n /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n flush_block_only(s, false);\n /***/\n }\n s.strstart++;\n s.lookahead--;\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n } else {\n /* There is no previous match to compare with, wait for\n * the next step to decide.\n */\n s.match_available = 1;\n s.strstart++;\n s.lookahead--;\n }\n }\n //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n if (s.match_available) {\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart - 1]);\n\n s.match_available = 0;\n }\n s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n if (flush === Z_FINISH$3) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_BLOCK_DONE;\n};\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one. Do not maintain a hash table. (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nconst deflate_rle = (s, flush) => {\n\n let bflush; /* set if current block must be flushed */\n let prev; /* byte at distance one to match */\n let scan, strend; /* scan goes up to strend for length of run */\n\n const _win = s.window;\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the longest run, plus one for the unrolled loop.\n */\n if (s.lookahead <= MAX_MATCH) {\n fill_window(s);\n if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH$2) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* See how many times the previous byte repeats */\n s.match_length = 0;\n if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n scan = s.strstart - 1;\n prev = _win[scan];\n if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n strend = s.strstart + MAX_MATCH;\n do {\n /*jshint noempty:false*/\n } while (prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n scan < strend);\n s.match_length = MAX_MATCH - (strend - scan);\n if (s.match_length > s.lookahead) {\n s.match_length = s.lookahead;\n }\n }\n //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n }\n\n /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n if (s.match_length >= MIN_MATCH) {\n //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n bflush = _tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n s.strstart += s.match_length;\n s.match_length = 0;\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH$3) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n};\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nconst deflate_huff = (s, flush) => {\n\n let bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we have a literal to write. */\n if (s.lookahead === 0) {\n fill_window(s);\n if (s.lookahead === 0) {\n if (flush === Z_NO_FLUSH$2) {\n return BS_NEED_MORE;\n }\n break; /* flush the current block */\n }\n }\n\n /* Output a literal byte */\n s.match_length = 0;\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart]);\n s.lookahead--;\n s.strstart++;\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH$3) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n};\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n\n this.good_length = good_length;\n this.max_lazy = max_lazy;\n this.nice_length = nice_length;\n this.max_chain = max_chain;\n this.func = func;\n}\n\nconst configuration_table = [\n /* good lazy nice chain */\n new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */\n new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */\n new Config(4, 5, 16, 8, deflate_fast), /* 2 */\n new Config(4, 6, 32, 32, deflate_fast), /* 3 */\n\n new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */\n new Config(8, 16, 32, 32, deflate_slow), /* 5 */\n new Config(8, 16, 128, 128, deflate_slow), /* 6 */\n new Config(8, 32, 128, 256, deflate_slow), /* 7 */\n new Config(32, 128, 258, 1024, deflate_slow), /* 8 */\n new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nconst lm_init = (s) => {\n\n s.window_size = 2 * s.w_size;\n\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n\n /* Set the default configuration parameters:\n */\n s.max_lazy_match = configuration_table[s.level].max_lazy;\n s.good_match = configuration_table[s.level].good_length;\n s.nice_match = configuration_table[s.level].nice_length;\n s.max_chain_length = configuration_table[s.level].max_chain;\n\n s.strstart = 0;\n s.block_start = 0;\n s.lookahead = 0;\n s.insert = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n s.ins_h = 0;\n};\n\n\nfunction DeflateState() {\n this.strm = null; /* pointer back to this zlib stream */\n this.status = 0; /* as the name implies */\n this.pending_buf = null; /* output still pending */\n this.pending_buf_size = 0; /* size of pending_buf */\n this.pending_out = 0; /* next pending byte to output to the stream */\n this.pending = 0; /* nb of bytes in the pending buffer */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.gzhead = null; /* gzip header information to write */\n this.gzindex = 0; /* where in extra, name, or comment */\n this.method = Z_DEFLATED$2; /* can only be DEFLATED */\n this.last_flush = -1; /* value of flush param for previous deflate call */\n\n this.w_size = 0; /* LZ77 window size (32K by default) */\n this.w_bits = 0; /* log2(w_size) (8..16) */\n this.w_mask = 0; /* w_size - 1 */\n\n this.window = null;\n /* Sliding window. Input bytes are read into the second half of the window,\n * and move to the first half later to keep a dictionary of at least wSize\n * bytes. With this organization, matches are limited to a distance of\n * wSize-MAX_MATCH bytes, but this ensures that IO is always\n * performed with a length multiple of the block size.\n */\n\n this.window_size = 0;\n /* Actual size of window: 2*wSize, except when the user input buffer\n * is directly used as sliding window.\n */\n\n this.prev = null;\n /* Link to older string with same hash index. To limit the size of this\n * array to 64K, this link is maintained only for the last 32K strings.\n * An index in this array is thus a window index modulo 32K.\n */\n\n this.head = null; /* Heads of the hash chains or NIL. */\n\n this.ins_h = 0; /* hash index of string to be inserted */\n this.hash_size = 0; /* number of elements in hash table */\n this.hash_bits = 0; /* log2(hash_size) */\n this.hash_mask = 0; /* hash_size-1 */\n\n this.hash_shift = 0;\n /* Number of bits by which ins_h must be shifted at each input\n * step. It must be such that after MIN_MATCH steps, the oldest\n * byte no longer takes part in the hash key, that is:\n * hash_shift * MIN_MATCH >= hash_bits\n */\n\n this.block_start = 0;\n /* Window position at the beginning of the current output block. Gets\n * negative when the window is moved backwards.\n */\n\n this.match_length = 0; /* length of best match */\n this.prev_match = 0; /* previous match */\n this.match_available = 0; /* set if previous match exists */\n this.strstart = 0; /* start of string to insert */\n this.match_start = 0; /* start of matching string */\n this.lookahead = 0; /* number of valid bytes ahead in window */\n\n this.prev_length = 0;\n /* Length of the best match at previous step. Matches not greater than this\n * are discarded. This is used in the lazy match evaluation.\n */\n\n this.max_chain_length = 0;\n /* To speed up deflation, hash chains are never searched beyond this\n * length. A higher limit improves compression ratio but degrades the\n * speed.\n */\n\n this.max_lazy_match = 0;\n /* Attempt to find a better match only when the current match is strictly\n * smaller than this value. This mechanism is used only for compression\n * levels >= 4.\n */\n // That's alias to max_lazy_match, don't use directly\n //this.max_insert_length = 0;\n /* Insert new strings in the hash table only if the match length is not\n * greater than this length. This saves time but degrades compression.\n * max_insert_length is used only for compression levels <= 3.\n */\n\n this.level = 0; /* compression level (1..9) */\n this.strategy = 0; /* favor or force Huffman coding*/\n\n this.good_match = 0;\n /* Use a faster search when the previous match is longer than this */\n\n this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n /* used by trees.c: */\n\n /* Didn't use ct_data typedef below to suppress compiler warning */\n\n // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */\n // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */\n\n // Use flat array of DOUBLE size, with interleaved fata,\n // because JS does not support effective\n this.dyn_ltree = new Uint16Array(HEAP_SIZE * 2);\n this.dyn_dtree = new Uint16Array((2 * D_CODES + 1) * 2);\n this.bl_tree = new Uint16Array((2 * BL_CODES + 1) * 2);\n zero(this.dyn_ltree);\n zero(this.dyn_dtree);\n zero(this.bl_tree);\n\n this.l_desc = null; /* desc. for literal tree */\n this.d_desc = null; /* desc. for distance tree */\n this.bl_desc = null; /* desc. for bit length tree */\n\n //ush bl_count[MAX_BITS+1];\n this.bl_count = new Uint16Array(MAX_BITS + 1);\n /* number of codes at each bit length for an optimal tree */\n\n //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */\n this.heap = new Uint16Array(2 * L_CODES + 1); /* heap used to build the Huffman trees */\n zero(this.heap);\n\n this.heap_len = 0; /* number of elements in the heap */\n this.heap_max = 0; /* element of largest frequency */\n /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n * The same heap array is used to build all trees.\n */\n\n this.depth = new Uint16Array(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n zero(this.depth);\n /* Depth of each subtree used as tie breaker for trees of equal frequency\n */\n\n this.l_buf = 0; /* buffer index for literals or lengths */\n\n this.lit_bufsize = 0;\n /* Size of match buffer for literals/lengths. There are 4 reasons for\n * limiting lit_bufsize to 64K:\n * - frequencies can be kept in 16 bit counters\n * - if compression is not successful for the first block, all input\n * data is still in the window so we can still emit a stored block even\n * when input comes from standard input. (This can also be done for\n * all blocks if lit_bufsize is not greater than 32K.)\n * - if compression is not successful for a file smaller than 64K, we can\n * even emit a stored file instead of a stored block (saving 5 bytes).\n * This is applicable only for zip (not gzip or zlib).\n * - creating new Huffman trees less frequently may not provide fast\n * adaptation to changes in the input data statistics. (Take for\n * example a binary file with poorly compressible code followed by\n * a highly compressible string table.) Smaller buffer sizes give\n * fast adaptation but have of course the overhead of transmitting\n * trees more frequently.\n * - I can't count above 4\n */\n\n this.last_lit = 0; /* running index in l_buf */\n\n this.d_buf = 0;\n /* Buffer index for distances. To simplify the code, d_buf and l_buf have\n * the same number of elements. To use different lengths, an extra flag\n * array would be necessary.\n */\n\n this.opt_len = 0; /* bit length of current block with optimal trees */\n this.static_len = 0; /* bit length of current block with static trees */\n this.matches = 0; /* number of string matches in current block */\n this.insert = 0; /* bytes at end of window left to insert */\n\n\n this.bi_buf = 0;\n /* Output buffer. bits are inserted starting at the bottom (least\n * significant bits).\n */\n this.bi_valid = 0;\n /* Number of valid bits in bi_buf. All bits above the last valid bit\n * are always zero.\n */\n\n // Used for window memory init. We safely ignore it for JS. That makes\n // sense only for pointers and memory check tools.\n //this.high_water = 0;\n /* High water mark offset in window for initialized bytes -- bytes above\n * this are set to zero in order to avoid memory check warnings when\n * longest match routines access bytes past the input. This is then\n * updated to the new high water mark.\n */\n}\n\n\nconst deflateResetKeep = (strm) => {\n\n if (!strm || !strm.state) {\n return err(strm, Z_STREAM_ERROR$2);\n }\n\n strm.total_in = strm.total_out = 0;\n strm.data_type = Z_UNKNOWN;\n\n const s = strm.state;\n s.pending = 0;\n s.pending_out = 0;\n\n if (s.wrap < 0) {\n s.wrap = -s.wrap;\n /* was made negative by deflate(..., Z_FINISH); */\n }\n s.status = (s.wrap ? INIT_STATE : BUSY_STATE);\n strm.adler = (s.wrap === 2) ?\n 0 // crc32(0, Z_NULL, 0)\n :\n 1; // adler32(0, Z_NULL, 0)\n s.last_flush = Z_NO_FLUSH$2;\n _tr_init(s);\n return Z_OK$3;\n};\n\n\nconst deflateReset = (strm) => {\n\n const ret = deflateResetKeep(strm);\n if (ret === Z_OK$3) {\n lm_init(strm.state);\n }\n return ret;\n};\n\n\nconst deflateSetHeader = (strm, head) => {\n\n if (!strm || !strm.state) { return Z_STREAM_ERROR$2; }\n if (strm.state.wrap !== 2) { return Z_STREAM_ERROR$2; }\n strm.state.gzhead = head;\n return Z_OK$3;\n};\n\n\nconst deflateInit2 = (strm, level, method, windowBits, memLevel, strategy) => {\n\n if (!strm) { // === Z_NULL\n return Z_STREAM_ERROR$2;\n }\n let wrap = 1;\n\n if (level === Z_DEFAULT_COMPRESSION$1) {\n level = 6;\n }\n\n if (windowBits < 0) { /* suppress zlib wrapper */\n wrap = 0;\n windowBits = -windowBits;\n }\n\n else if (windowBits > 15) {\n wrap = 2; /* write gzip wrapper instead */\n windowBits -= 16;\n }\n\n\n if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED$2 ||\n windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n strategy < 0 || strategy > Z_FIXED) {\n return err(strm, Z_STREAM_ERROR$2);\n }\n\n\n if (windowBits === 8) {\n windowBits = 9;\n }\n /* until 256-byte window bug fixed */\n\n const s = new DeflateState();\n\n strm.state = s;\n s.strm = strm;\n\n s.wrap = wrap;\n s.gzhead = null;\n s.w_bits = windowBits;\n s.w_size = 1 << s.w_bits;\n s.w_mask = s.w_size - 1;\n\n s.hash_bits = memLevel + 7;\n s.hash_size = 1 << s.hash_bits;\n s.hash_mask = s.hash_size - 1;\n s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n s.window = new Uint8Array(s.w_size * 2);\n s.head = new Uint16Array(s.hash_size);\n s.prev = new Uint16Array(s.w_size);\n\n // Don't need mem init magic for JS.\n //s.high_water = 0; /* nothing written to s->window yet */\n\n s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n s.pending_buf_size = s.lit_bufsize * 4;\n\n //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);\n //s->pending_buf = (uchf *) overlay;\n s.pending_buf = new Uint8Array(s.pending_buf_size);\n\n // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);\n s.d_buf = 1 * s.lit_bufsize;\n\n //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;\n s.l_buf = (1 + 2) * s.lit_bufsize;\n\n s.level = level;\n s.strategy = strategy;\n s.method = method;\n\n return deflateReset(strm);\n};\n\nconst deflateInit = (strm, level) => {\n\n return deflateInit2(strm, level, Z_DEFLATED$2, MAX_WBITS$1, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY$1);\n};\n\n\nconst deflate$2 = (strm, flush) => {\n\n let beg, val; // for gzip header write only\n\n if (!strm || !strm.state ||\n flush > Z_BLOCK$1 || flush < 0) {\n return strm ? err(strm, Z_STREAM_ERROR$2) : Z_STREAM_ERROR$2;\n }\n\n const s = strm.state;\n\n if (!strm.output ||\n (!strm.input && strm.avail_in !== 0) ||\n (s.status === FINISH_STATE && flush !== Z_FINISH$3)) {\n return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR$1 : Z_STREAM_ERROR$2);\n }\n\n s.strm = strm; /* just in case */\n const old_flush = s.last_flush;\n s.last_flush = flush;\n\n /* Write the header */\n if (s.status === INIT_STATE) {\n\n if (s.wrap === 2) { // GZIP header\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n put_byte(s, 31);\n put_byte(s, 139);\n put_byte(s, 8);\n if (!s.gzhead) { // s->gzhead == Z_NULL\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, OS_CODE);\n s.status = BUSY_STATE;\n }\n else {\n put_byte(s, (s.gzhead.text ? 1 : 0) +\n (s.gzhead.hcrc ? 2 : 0) +\n (!s.gzhead.extra ? 0 : 4) +\n (!s.gzhead.name ? 0 : 8) +\n (!s.gzhead.comment ? 0 : 16)\n );\n put_byte(s, s.gzhead.time & 0xff);\n put_byte(s, (s.gzhead.time >> 8) & 0xff);\n put_byte(s, (s.gzhead.time >> 16) & 0xff);\n put_byte(s, (s.gzhead.time >> 24) & 0xff);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, s.gzhead.os & 0xff);\n if (s.gzhead.extra && s.gzhead.extra.length) {\n put_byte(s, s.gzhead.extra.length & 0xff);\n put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n }\n if (s.gzhead.hcrc) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending, 0);\n }\n s.gzindex = 0;\n s.status = EXTRA_STATE;\n }\n }\n else // DEFLATE header\n {\n let header = (Z_DEFLATED$2 + ((s.w_bits - 8) << 4)) << 8;\n let level_flags = -1;\n\n if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n level_flags = 0;\n } else if (s.level < 6) {\n level_flags = 1;\n } else if (s.level === 6) {\n level_flags = 2;\n } else {\n level_flags = 3;\n }\n header |= (level_flags << 6);\n if (s.strstart !== 0) { header |= PRESET_DICT; }\n header += 31 - (header % 31);\n\n s.status = BUSY_STATE;\n putShortMSB(s, header);\n\n /* Save the adler32 of the preset dictionary: */\n if (s.strstart !== 0) {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n strm.adler = 1; // adler32(0L, Z_NULL, 0);\n }\n }\n\n//#ifdef GZIP\n if (s.status === EXTRA_STATE) {\n if (s.gzhead.extra/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n\n while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n break;\n }\n }\n put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);\n s.gzindex++;\n }\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (s.gzindex === s.gzhead.extra.length) {\n s.gzindex = 0;\n s.status = NAME_STATE;\n }\n }\n else {\n s.status = NAME_STATE;\n }\n }\n if (s.status === NAME_STATE) {\n if (s.gzhead.name/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n //int val;\n\n do {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n val = 1;\n break;\n }\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.name.length) {\n val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (val === 0) {\n s.gzindex = 0;\n s.status = COMMENT_STATE;\n }\n }\n else {\n s.status = COMMENT_STATE;\n }\n }\n if (s.status === COMMENT_STATE) {\n if (s.gzhead.comment/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n //int val;\n\n do {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n val = 1;\n break;\n }\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.comment.length) {\n val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (val === 0) {\n s.status = HCRC_STATE;\n }\n }\n else {\n s.status = HCRC_STATE;\n }\n }\n if (s.status === HCRC_STATE) {\n if (s.gzhead.hcrc) {\n if (s.pending + 2 > s.pending_buf_size) {\n flush_pending(strm);\n }\n if (s.pending + 2 <= s.pending_buf_size) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n s.status = BUSY_STATE;\n }\n }\n else {\n s.status = BUSY_STATE;\n }\n }\n//#endif\n\n /* Flush as much pending output as possible */\n if (s.pending !== 0) {\n flush_pending(strm);\n if (strm.avail_out === 0) {\n /* Since avail_out is 0, deflate will be called again with\n * more output space, but possibly with both pending and\n * avail_in equal to zero. There won't be anything to do,\n * but this is not an error situation so make sure we\n * return OK instead of BUF_ERROR at next call of deflate:\n */\n s.last_flush = -1;\n return Z_OK$3;\n }\n\n /* Make sure there is something to do and avoid duplicate consecutive\n * flushes. For repeated and useless calls with Z_FINISH, we keep\n * returning Z_STREAM_END instead of Z_BUF_ERROR.\n */\n } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n flush !== Z_FINISH$3) {\n return err(strm, Z_BUF_ERROR$1);\n }\n\n /* User must not provide more input after the first FINISH: */\n if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n return err(strm, Z_BUF_ERROR$1);\n }\n\n /* Start a new block or continue the current one.\n */\n if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n (flush !== Z_NO_FLUSH$2 && s.status !== FINISH_STATE)) {\n let bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :\n (s.strategy === Z_RLE ? deflate_rle(s, flush) :\n configuration_table[s.level].func(s, flush));\n\n if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n s.status = FINISH_STATE;\n }\n if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n if (strm.avail_out === 0) {\n s.last_flush = -1;\n /* avoid BUF_ERROR next call, see above */\n }\n return Z_OK$3;\n /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n * of deflate should use the same flush parameter to make sure\n * that the flush is complete. So we don't have to output an\n * empty block here, this will be done at next call. This also\n * ensures that for a very small output buffer, we emit at most\n * one empty block.\n */\n }\n if (bstate === BS_BLOCK_DONE) {\n if (flush === Z_PARTIAL_FLUSH) {\n _tr_align(s);\n }\n else if (flush !== Z_BLOCK$1) { /* FULL_FLUSH or SYNC_FLUSH */\n\n _tr_stored_block(s, 0, 0, false);\n /* For a full flush, this empty block will be recognized\n * as a special marker by inflate_sync().\n */\n if (flush === Z_FULL_FLUSH$1) {\n /*** CLEAR_HASH(s); ***/ /* forget history */\n zero(s.head); // Fill with NIL (= 0);\n\n if (s.lookahead === 0) {\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n }\n }\n flush_pending(strm);\n if (strm.avail_out === 0) {\n s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n return Z_OK$3;\n }\n }\n }\n //Assert(strm->avail_out > 0, \"bug2\");\n //if (strm.avail_out <= 0) { throw new Error(\"bug2\");}\n\n if (flush !== Z_FINISH$3) { return Z_OK$3; }\n if (s.wrap <= 0) { return Z_STREAM_END$3; }\n\n /* Write the trailer */\n if (s.wrap === 2) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n put_byte(s, (strm.adler >> 16) & 0xff);\n put_byte(s, (strm.adler >> 24) & 0xff);\n put_byte(s, strm.total_in & 0xff);\n put_byte(s, (strm.total_in >> 8) & 0xff);\n put_byte(s, (strm.total_in >> 16) & 0xff);\n put_byte(s, (strm.total_in >> 24) & 0xff);\n }\n else\n {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n\n flush_pending(strm);\n /* If avail_out is zero, the application will call deflate again\n * to flush the rest.\n */\n if (s.wrap > 0) { s.wrap = -s.wrap; }\n /* write the trailer only once! */\n return s.pending !== 0 ? Z_OK$3 : Z_STREAM_END$3;\n};\n\n\nconst deflateEnd = (strm) => {\n\n if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n return Z_STREAM_ERROR$2;\n }\n\n const status = strm.state.status;\n if (status !== INIT_STATE &&\n status !== EXTRA_STATE &&\n status !== NAME_STATE &&\n status !== COMMENT_STATE &&\n status !== HCRC_STATE &&\n status !== BUSY_STATE &&\n status !== FINISH_STATE\n ) {\n return err(strm, Z_STREAM_ERROR$2);\n }\n\n strm.state = null;\n\n return status === BUSY_STATE ? err(strm, Z_DATA_ERROR$2) : Z_OK$3;\n};\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nconst deflateSetDictionary = (strm, dictionary) => {\n\n let dictLength = dictionary.length;\n\n if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n return Z_STREAM_ERROR$2;\n }\n\n const s = strm.state;\n const wrap = s.wrap;\n\n if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n return Z_STREAM_ERROR$2;\n }\n\n /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n if (wrap === 1) {\n /* adler32(strm->adler, dictionary, dictLength); */\n strm.adler = adler32_1(strm.adler, dictionary, dictLength, 0);\n }\n\n s.wrap = 0; /* avoid computing Adler-32 in read_buf */\n\n /* if dictionary would fill window, just replace the history */\n if (dictLength >= s.w_size) {\n if (wrap === 0) { /* already empty otherwise */\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n /* use the tail */\n // dictionary = dictionary.slice(dictLength - s.w_size);\n let tmpDict = new Uint8Array(s.w_size);\n tmpDict.set(dictionary.subarray(dictLength - s.w_size, dictLength), 0);\n dictionary = tmpDict;\n dictLength = s.w_size;\n }\n /* insert dictionary into window and hash */\n const avail = strm.avail_in;\n const next = strm.next_in;\n const input = strm.input;\n strm.avail_in = dictLength;\n strm.next_in = 0;\n strm.input = dictionary;\n fill_window(s);\n while (s.lookahead >= MIN_MATCH) {\n let str = s.strstart;\n let n = s.lookahead - (MIN_MATCH - 1);\n do {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = HASH(s, s.ins_h, s.window[str + MIN_MATCH - 1]);\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n s.head[s.ins_h] = str;\n str++;\n } while (--n);\n s.strstart = str;\n s.lookahead = MIN_MATCH - 1;\n fill_window(s);\n }\n s.strstart += s.lookahead;\n s.block_start = s.strstart;\n s.insert = s.lookahead;\n s.lookahead = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n strm.next_in = next;\n strm.input = input;\n strm.avail_in = avail;\n s.wrap = wrap;\n return Z_OK$3;\n};\n\n\nvar deflateInit_1 = deflateInit;\nvar deflateInit2_1 = deflateInit2;\nvar deflateReset_1 = deflateReset;\nvar deflateResetKeep_1 = deflateResetKeep;\nvar deflateSetHeader_1 = deflateSetHeader;\nvar deflate_2$1 = deflate$2;\nvar deflateEnd_1 = deflateEnd;\nvar deflateSetDictionary_1 = deflateSetDictionary;\nvar deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nmodule.exports.deflateBound = deflateBound;\nmodule.exports.deflateCopy = deflateCopy;\nmodule.exports.deflateParams = deflateParams;\nmodule.exports.deflatePending = deflatePending;\nmodule.exports.deflatePrime = deflatePrime;\nmodule.exports.deflateTune = deflateTune;\n*/\n\nvar deflate_1$2 = {\n\tdeflateInit: deflateInit_1,\n\tdeflateInit2: deflateInit2_1,\n\tdeflateReset: deflateReset_1,\n\tdeflateResetKeep: deflateResetKeep_1,\n\tdeflateSetHeader: deflateSetHeader_1,\n\tdeflate: deflate_2$1,\n\tdeflateEnd: deflateEnd_1,\n\tdeflateSetDictionary: deflateSetDictionary_1,\n\tdeflateInfo: deflateInfo\n};\n\nconst _has = (obj, key) => {\n return Object.prototype.hasOwnProperty.call(obj, key);\n};\n\nvar assign = function (obj /*from1, from2, from3, ...*/) {\n const sources = Array.prototype.slice.call(arguments, 1);\n while (sources.length) {\n const source = sources.shift();\n if (!source) { continue; }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be non-object');\n }\n\n for (const p in source) {\n if (_has(source, p)) {\n obj[p] = source[p];\n }\n }\n }\n\n return obj;\n};\n\n\n// Join array of chunks to single array.\nvar flattenChunks = (chunks) => {\n // calculate data length\n let len = 0;\n\n for (let i = 0, l = chunks.length; i < l; i++) {\n len += chunks[i].length;\n }\n\n // join chunks\n const result = new Uint8Array(len);\n\n for (let i = 0, pos = 0, l = chunks.length; i < l; i++) {\n let chunk = chunks[i];\n result.set(chunk, pos);\n pos += chunk.length;\n }\n\n return result;\n};\n\nvar common = {\n\tassign: assign,\n\tflattenChunks: flattenChunks\n};\n\n// String encode/decode helpers\n\n\n// Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safari\n//\nlet STR_APPLY_UIA_OK = true;\n\ntry { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }\n\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nconst _utf8len = new Uint8Array(256);\nfor (let q = 0; q < 256; q++) {\n _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);\n}\n_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start\n\n\n// convert string to array (typed, when possible)\nvar string2buf = (str) => {\n if (typeof TextEncoder === 'function' && TextEncoder.prototype.encode) {\n return new TextEncoder().encode(str);\n }\n\n let buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n // count binary size\n for (m_pos = 0; m_pos < str_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n }\n\n // allocate buffer\n buf = new Uint8Array(buf_len);\n\n // convert\n for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n if (c < 0x80) {\n /* one byte */\n buf[i++] = c;\n } else if (c < 0x800) {\n /* two bytes */\n buf[i++] = 0xC0 | (c >>> 6);\n buf[i++] = 0x80 | (c & 0x3f);\n } else if (c < 0x10000) {\n /* three bytes */\n buf[i++] = 0xE0 | (c >>> 12);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n } else {\n /* four bytes */\n buf[i++] = 0xf0 | (c >>> 18);\n buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n }\n }\n\n return buf;\n};\n\n// Helper\nconst buf2binstring = (buf, len) => {\n // On Chrome, the arguments in a function call that are allowed is `65534`.\n // If the length of the buffer is smaller than that, we can use this optimization,\n // otherwise we will take a slower path.\n if (len < 65534) {\n if (buf.subarray && STR_APPLY_UIA_OK) {\n return String.fromCharCode.apply(null, buf.length === len ? buf : buf.subarray(0, len));\n }\n }\n\n let result = '';\n for (let i = 0; i < len; i++) {\n result += String.fromCharCode(buf[i]);\n }\n return result;\n};\n\n\n// convert array to string\nvar buf2string = (buf, max) => {\n const len = max || buf.length;\n\n if (typeof TextDecoder === 'function' && TextDecoder.prototype.decode) {\n return new TextDecoder().decode(buf.subarray(0, max));\n }\n\n let i, out;\n\n // Reserve max possible length (2 words per char)\n // NB: by unknown reasons, Array is significantly faster for\n // String.fromCharCode.apply than Uint16Array.\n const utf16buf = new Array(len * 2);\n\n for (out = 0, i = 0; i < len;) {\n let c = buf[i++];\n // quick process ascii\n if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n let c_len = _utf8len[c];\n // skip 5 & 6 byte codes\n if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }\n\n // apply mask on first byte\n c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n // join the rest\n while (c_len > 1 && i < len) {\n c = (c << 6) | (buf[i++] & 0x3f);\n c_len--;\n }\n\n // terminated by end of string?\n if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n if (c < 0x10000) {\n utf16buf[out++] = c;\n } else {\n c -= 0x10000;\n utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n }\n }\n\n return buf2binstring(utf16buf, out);\n};\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max - length limit (mandatory);\nvar utf8border = (buf, max) => {\n\n max = max || buf.length;\n if (max > buf.length) { max = buf.length; }\n\n // go back from last position, until start of sequence found\n let pos = max - 1;\n while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n // Very small and broken sequence,\n // return max, because we should return something anyway.\n if (pos < 0) { return max; }\n\n // If we came to start of buffer - that means buffer is too small,\n // return max too.\n if (pos === 0) { return max; }\n\n return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n\nvar strings = {\n\tstring2buf: string2buf,\n\tbuf2string: buf2string,\n\tutf8border: utf8border\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n /* next input byte */\n this.input = null; // JS specific, because we have no pointers\n this.next_in = 0;\n /* number of bytes available at input */\n this.avail_in = 0;\n /* total number of input bytes read so far */\n this.total_in = 0;\n /* next output byte should be put there */\n this.output = null; // JS specific, because we have no pointers\n this.next_out = 0;\n /* remaining free space at output */\n this.avail_out = 0;\n /* total number of bytes output so far */\n this.total_out = 0;\n /* last error message, NULL if no error */\n this.msg = ''/*Z_NULL*/;\n /* not visible by applications */\n this.state = null;\n /* best guess about the data type: binary or text */\n this.data_type = 2/*Z_UNKNOWN*/;\n /* adler32 value of the uncompressed data */\n this.adler = 0;\n}\n\nvar zstream = ZStream;\n\nconst toString$1 = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_NO_FLUSH: Z_NO_FLUSH$1, Z_SYNC_FLUSH, Z_FULL_FLUSH, Z_FINISH: Z_FINISH$2,\n Z_OK: Z_OK$2, Z_STREAM_END: Z_STREAM_END$2,\n Z_DEFAULT_COMPRESSION,\n Z_DEFAULT_STRATEGY,\n Z_DEFLATED: Z_DEFLATED$1\n} = constants$2;\n\n/* ===========================================================================*/\n\n\n/**\n * class Deflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[deflate]],\n * [[deflateRaw]] and [[gzip]].\n **/\n\n/* internal\n * Deflate.chunks -> Array\n *\n * Chunks of output data, if [[Deflate#onData]] not overridden.\n **/\n\n/**\n * Deflate.result -> Uint8Array\n *\n * Compressed result, generated by default [[Deflate#onData]]\n * and [[Deflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Deflate#push]] with `Z_FINISH` / `true` param).\n **/\n\n/**\n * Deflate.err -> Number\n *\n * Error code after deflate finished. 0 (Z_OK) on success.\n * You will not need it in real life, because deflate errors\n * are possible only on wrong options or bad `onData` / `onEnd`\n * custom handlers.\n **/\n\n/**\n * Deflate.msg -> String\n *\n * Error message, if [[Deflate.err]] != 0\n **/\n\n\n/**\n * new Deflate(options)\n * - options (Object): zlib deflate options.\n *\n * Creates new deflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `level`\n * - `windowBits`\n * - `memLevel`\n * - `strategy`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw deflate\n * - `gzip` (Boolean) - create gzip wrapper\n * - `header` (Object) - custom header for gzip\n * - `text` (Boolean) - true if compressed data believed to be text\n * - `time` (Number) - modification time, unix timestamp\n * - `os` (Number) - operation system code\n * - `extra` (Array) - array of bytes with extra data (max 65536)\n * - `name` (String) - file name (binary string)\n * - `comment` (String) - comment (binary string)\n * - `hcrc` (Boolean) - true if header crc should be added\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n * , chunk1 = new Uint8Array([1,2,3,4,5,6,7,8,9])\n * , chunk2 = new Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * const deflate = new pako.Deflate({ level: 3});\n *\n * deflate.push(chunk1, false);\n * deflate.push(chunk2, true); // true -> last chunk\n *\n * if (deflate.err) { throw new Error(deflate.err); }\n *\n * console.log(deflate.result);\n * ```\n **/\nfunction Deflate$1(options) {\n this.options = common.assign({\n level: Z_DEFAULT_COMPRESSION,\n method: Z_DEFLATED$1,\n chunkSize: 16384,\n windowBits: 15,\n memLevel: 8,\n strategy: Z_DEFAULT_STRATEGY\n }, options || {});\n\n let opt = this.options;\n\n if (opt.raw && (opt.windowBits > 0)) {\n opt.windowBits = -opt.windowBits;\n }\n\n else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {\n opt.windowBits += 16;\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new zstream();\n this.strm.avail_out = 0;\n\n let status = deflate_1$2.deflateInit2(\n this.strm,\n opt.level,\n opt.method,\n opt.windowBits,\n opt.memLevel,\n opt.strategy\n );\n\n if (status !== Z_OK$2) {\n throw new Error(messages[status]);\n }\n\n if (opt.header) {\n deflate_1$2.deflateSetHeader(this.strm, opt.header);\n }\n\n if (opt.dictionary) {\n let dict;\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n // If we need to compress text, change encoding to utf8.\n dict = strings.string2buf(opt.dictionary);\n } else if (toString$1.call(opt.dictionary) === '[object ArrayBuffer]') {\n dict = new Uint8Array(opt.dictionary);\n } else {\n dict = opt.dictionary;\n }\n\n status = deflate_1$2.deflateSetDictionary(this.strm, dict);\n\n if (status !== Z_OK$2) {\n throw new Error(messages[status]);\n }\n\n this._dict_set = true;\n }\n}\n\n/**\n * Deflate#push(data[, flush_mode]) -> Boolean\n * - data (Uint8Array|ArrayBuffer|String): input data. Strings will be\n * converted to utf8 byte sequence.\n * - flush_mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with\n * new compressed chunks. Returns `true` on success. The last data block must\n * have `flush_mode` Z_FINISH (or `true`). That will flush internal pending\n * buffers and call [[Deflate#onEnd]].\n *\n * On fail call [[Deflate#onEnd]] with error code and return false.\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nDeflate$1.prototype.push = function (data, flush_mode) {\n const strm = this.strm;\n const chunkSize = this.options.chunkSize;\n let status, _flush_mode;\n\n if (this.ended) { return false; }\n\n if (flush_mode === ~~flush_mode) _flush_mode = flush_mode;\n else _flush_mode = flush_mode === true ? Z_FINISH$2 : Z_NO_FLUSH$1;\n\n // Convert data if needed\n if (typeof data === 'string') {\n // If we need to compress text, change encoding to utf8.\n strm.input = strings.string2buf(data);\n } else if (toString$1.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n for (;;) {\n if (strm.avail_out === 0) {\n strm.output = new Uint8Array(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n\n // Make sure avail_out > 6 to avoid repeating markers\n if ((_flush_mode === Z_SYNC_FLUSH || _flush_mode === Z_FULL_FLUSH) && strm.avail_out <= 6) {\n this.onData(strm.output.subarray(0, strm.next_out));\n strm.avail_out = 0;\n continue;\n }\n\n status = deflate_1$2.deflate(strm, _flush_mode);\n\n // Ended => flush and finish\n if (status === Z_STREAM_END$2) {\n if (strm.next_out > 0) {\n this.onData(strm.output.subarray(0, strm.next_out));\n }\n status = deflate_1$2.deflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return status === Z_OK$2;\n }\n\n // Flush if out buffer full\n if (strm.avail_out === 0) {\n this.onData(strm.output);\n continue;\n }\n\n // Flush if requested and has data\n if (_flush_mode > 0 && strm.next_out > 0) {\n this.onData(strm.output.subarray(0, strm.next_out));\n strm.avail_out = 0;\n continue;\n }\n\n if (strm.avail_in === 0) break;\n }\n\n return true;\n};\n\n\n/**\n * Deflate#onData(chunk) -> Void\n * - chunk (Uint8Array): output data.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nDeflate$1.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Deflate#onEnd(status) -> Void\n * - status (Number): deflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called once after you tell deflate that the input stream is\n * complete (Z_FINISH). By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nDeflate$1.prototype.onEnd = function (status) {\n // On success - join\n if (status === Z_OK$2) {\n this.result = common.flattenChunks(this.chunks);\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * deflate(data[, options]) -> Uint8Array\n * - data (Uint8Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * Compress `data` with deflate algorithm and `options`.\n *\n * Supported options are:\n *\n * - level\n * - windowBits\n * - memLevel\n * - strategy\n * - dictionary\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n * const data = new Uint8Array([1,2,3,4,5,6,7,8,9]);\n *\n * console.log(pako.deflate(data));\n * ```\n **/\nfunction deflate$1(input, options) {\n const deflator = new Deflate$1(options);\n\n deflator.push(input, true);\n\n // That will never happens, if you don't cheat with options :)\n if (deflator.err) { throw deflator.msg || messages[deflator.err]; }\n\n return deflator.result;\n}\n\n\n/**\n * deflateRaw(data[, options]) -> Uint8Array\n * - data (Uint8Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction deflateRaw$1(input, options) {\n options = options || {};\n options.raw = true;\n return deflate$1(input, options);\n}\n\n\n/**\n * gzip(data[, options]) -> Uint8Array\n * - data (Uint8Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but create gzip wrapper instead of\n * deflate one.\n **/\nfunction gzip$1(input, options) {\n options = options || {};\n options.gzip = true;\n return deflate$1(input, options);\n}\n\n\nvar Deflate_1$1 = Deflate$1;\nvar deflate_2 = deflate$1;\nvar deflateRaw_1$1 = deflateRaw$1;\nvar gzip_1$1 = gzip$1;\nvar constants$1 = constants$2;\n\nvar deflate_1$1 = {\n\tDeflate: Deflate_1$1,\n\tdeflate: deflate_2,\n\tdeflateRaw: deflateRaw_1$1,\n\tgzip: gzip_1$1,\n\tconstants: constants$1\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nconst BAD$1 = 30; /* got a data error -- remain here until reset */\nconst TYPE$1 = 12; /* i: waiting for type bits, including last-flag bit */\n\n/*\n Decode literal, length, and distance codes and write out the resulting\n literal and match bytes until either not enough input or output is\n available, an end-of-block is encountered, or a data error is encountered.\n When large enough input and output buffers are supplied to inflate(), for\n example, a 16K input buffer and a 64K output buffer, more than 95% of the\n inflate execution time is spent in this routine.\n\n Entry assumptions:\n\n state.mode === LEN\n strm.avail_in >= 6\n strm.avail_out >= 258\n start >= strm.avail_out\n state.bits < 8\n\n On return, state.mode is one of:\n\n LEN -- ran out of enough output space or enough available input\n TYPE -- reached end of block code, inflate() to interpret next block\n BAD -- error in block data\n\n Notes:\n\n - The maximum input bits used by a length/distance pair is 15 bits for the\n length code, 5 bits for the length extra, 15 bits for the distance code,\n and 13 bits for the distance extra. This totals 48 bits, or six bytes.\n Therefore if strm.avail_in >= 6, then there is enough input to avoid\n checking for available input while decoding.\n\n - The maximum bytes that a single length/distance pair can output is 258\n bytes, which is the maximum length that can be coded. inflate_fast()\n requires strm.avail_out >= 258 for each loop to avoid checking for\n output space.\n */\nvar inffast = function inflate_fast(strm, start) {\n let _in; /* local strm.input */\n let last; /* have enough input while in < last */\n let _out; /* local strm.output */\n let beg; /* inflate()'s initial strm.output */\n let end; /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n let dmax; /* maximum distance from zlib header */\n//#endif\n let wsize; /* window size or zero if not using window */\n let whave; /* valid bytes in the window */\n let wnext; /* window write index */\n // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n let s_window; /* allocated sliding window, if wsize != 0 */\n let hold; /* local strm.hold */\n let bits; /* local strm.bits */\n let lcode; /* local strm.lencode */\n let dcode; /* local strm.distcode */\n let lmask; /* mask for first level of length codes */\n let dmask; /* mask for first level of distance codes */\n let here; /* retrieved table entry */\n let op; /* code bits, operation, extra bits, or */\n /* window position, window bytes to copy */\n let len; /* match length, unused bytes */\n let dist; /* match distance */\n let from; /* where to copy match from */\n let from_source;\n\n\n let input, output; // JS specific, because we have no pointers\n\n /* copy state to local variables */\n const state = strm.state;\n //here = state.here;\n _in = strm.next_in;\n input = strm.input;\n last = _in + (strm.avail_in - 5);\n _out = strm.next_out;\n output = strm.output;\n beg = _out - (start - strm.avail_out);\n end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n dmax = state.dmax;\n//#endif\n wsize = state.wsize;\n whave = state.whave;\n wnext = state.wnext;\n s_window = state.window;\n hold = state.hold;\n bits = state.bits;\n lcode = state.lencode;\n dcode = state.distcode;\n lmask = (1 << state.lenbits) - 1;\n dmask = (1 << state.distbits) - 1;\n\n\n /* decode literals and length/distances until end-of-block or not enough\n input data or output space */\n\n top:\n do {\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n\n here = lcode[hold & lmask];\n\n dolen:\n for (;;) { // Goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n if (op === 0) { /* literal */\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n output[_out++] = here & 0xffff/*here.val*/;\n }\n else if (op & 16) { /* length base */\n len = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (op) {\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n len += hold & ((1 << op) - 1);\n hold >>>= op;\n bits -= op;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", len));\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n here = dcode[hold & dmask];\n\n dodist:\n for (;;) { // goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n\n if (op & 16) { /* distance base */\n dist = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n }\n dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n if (dist > dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD$1;\n break top;\n }\n//#endif\n hold >>>= op;\n bits -= op;\n //Tracevv((stderr, \"inflate: distance %u\\n\", dist));\n op = _out - beg; /* max distance in output */\n if (dist > op) { /* see if copy from window */\n op = dist - op; /* distance back in window */\n if (op > whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD$1;\n break top;\n }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// if (len <= op - whave) {\n// do {\n// output[_out++] = 0;\n// } while (--len);\n// continue top;\n// }\n// len -= op - whave;\n// do {\n// output[_out++] = 0;\n// } while (--op > whave);\n// if (op === 0) {\n// from = _out - dist;\n// do {\n// output[_out++] = output[from++];\n// } while (--len);\n// continue top;\n// }\n//#endif\n }\n from = 0; // window index\n from_source = s_window;\n if (wnext === 0) { /* very common case */\n from += wsize - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n else if (wnext < op) { /* wrap around window */\n from += wsize + wnext - op;\n op -= wnext;\n if (op < len) { /* some from end of window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = 0;\n if (wnext < len) { /* some from start of window */\n op = wnext;\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n }\n else { /* contiguous in window */\n from += wnext - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n while (len > 2) {\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n len -= 3;\n }\n if (len) {\n output[_out++] = from_source[from++];\n if (len > 1) {\n output[_out++] = from_source[from++];\n }\n }\n }\n else {\n from = _out - dist; /* copy direct from output */\n do { /* minimum length is three */\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n len -= 3;\n } while (len > 2);\n if (len) {\n output[_out++] = output[from++];\n if (len > 1) {\n output[_out++] = output[from++];\n }\n }\n }\n }\n else if ((op & 64) === 0) { /* 2nd level distance code */\n here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dodist;\n }\n else {\n strm.msg = 'invalid distance code';\n state.mode = BAD$1;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n }\n else if ((op & 64) === 0) { /* 2nd level length code */\n here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dolen;\n }\n else if (op & 32) { /* end-of-block */\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.mode = TYPE$1;\n break top;\n }\n else {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD$1;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n } while (_in < last && _out < end);\n\n /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n len = bits >> 3;\n _in -= len;\n bits -= len << 3;\n hold &= (1 << bits) - 1;\n\n /* update state and return */\n strm.next_in = _in;\n strm.next_out = _out;\n strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n state.hold = hold;\n state.bits = bits;\n return;\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst MAXBITS = 15;\nconst ENOUGH_LENS$1 = 852;\nconst ENOUGH_DISTS$1 = 592;\n//const ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nconst CODES$1 = 0;\nconst LENS$1 = 1;\nconst DISTS$1 = 2;\n\nconst lbase = new Uint16Array([ /* Length codes 257..285 base */\n 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n]);\n\nconst lext = new Uint8Array([ /* Length codes 257..285 extra */\n 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n]);\n\nconst dbase = new Uint16Array([ /* Distance codes 0..29 base */\n 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n 8193, 12289, 16385, 24577, 0, 0\n]);\n\nconst dext = new Uint8Array([ /* Distance codes 0..29 extra */\n 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n 28, 28, 29, 29, 64, 64\n]);\n\nconst inflate_table = (type, lens, lens_index, codes, table, table_index, work, opts) =>\n{\n const bits = opts.bits;\n //here = opts.here; /* table entry for duplication */\n\n let len = 0; /* a code's length in bits */\n let sym = 0; /* index of code symbols */\n let min = 0, max = 0; /* minimum and maximum code lengths */\n let root = 0; /* number of index bits for root table */\n let curr = 0; /* number of index bits for current table */\n let drop = 0; /* code bits to drop for sub-table */\n let left = 0; /* number of prefix codes available */\n let used = 0; /* code entries in table used */\n let huff = 0; /* Huffman code */\n let incr; /* for incrementing code, index */\n let fill; /* index for replicating entries */\n let low; /* low bits for current root entry */\n let mask; /* mask for low root bits */\n let next; /* next available space in table */\n let base = null; /* base value table to use */\n let base_index = 0;\n// let shoextra; /* extra bits table to use */\n let end; /* use base and extra for symbol > end */\n const count = new Uint16Array(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */\n const offs = new Uint16Array(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */\n let extra = null;\n let extra_index = 0;\n\n let here_bits, here_op, here_val;\n\n /*\n Process a set of code lengths to create a canonical Huffman code. The\n code lengths are lens[0..codes-1]. Each length corresponds to the\n symbols 0..codes-1. The Huffman code is generated by first sorting the\n symbols by length from short to long, and retaining the symbol order\n for codes with equal lengths. Then the code starts with all zero bits\n for the first code of the shortest length, and the codes are integer\n increments for the same length, and zeros are appended as the length\n increases. For the deflate format, these bits are stored backwards\n from their more natural integer increment ordering, and so when the\n decoding tables are built in the large loop below, the integer codes\n are incremented backwards.\n\n This routine assumes, but does not check, that all of the entries in\n lens[] are in the range 0..MAXBITS. The caller must assure this.\n 1..MAXBITS is interpreted as that code length. zero means that that\n symbol does not occur in this code.\n\n The codes are sorted by computing a count of codes for each length,\n creating from that a table of starting indices for each length in the\n sorted table, and then entering the symbols in order in the sorted\n table. The sorted table is work[], with that space being provided by\n the caller.\n\n The length counts are used for other purposes as well, i.e. finding\n the minimum and maximum length codes, determining if there are any\n codes at all, checking for a valid set of lengths, and looking ahead\n at length counts to determine sub-table sizes when building the\n decoding tables.\n */\n\n /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n for (len = 0; len <= MAXBITS; len++) {\n count[len] = 0;\n }\n for (sym = 0; sym < codes; sym++) {\n count[lens[lens_index + sym]]++;\n }\n\n /* bound code lengths, force root to be within code lengths */\n root = bits;\n for (max = MAXBITS; max >= 1; max--) {\n if (count[max] !== 0) { break; }\n }\n if (root > max) {\n root = max;\n }\n if (max === 0) { /* no symbols to code at all */\n //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */\n //table.bits[opts.table_index] = 1; //here.bits = (var char)1;\n //table.val[opts.table_index++] = 0; //here.val = (var short)0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n //table.op[opts.table_index] = 64;\n //table.bits[opts.table_index] = 1;\n //table.val[opts.table_index++] = 0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n opts.bits = 1;\n return 0; /* no symbols, but wait for decoding to report error */\n }\n for (min = 1; min < max; min++) {\n if (count[min] !== 0) { break; }\n }\n if (root < min) {\n root = min;\n }\n\n /* check for an over-subscribed or incomplete set of lengths */\n left = 1;\n for (len = 1; len <= MAXBITS; len++) {\n left <<= 1;\n left -= count[len];\n if (left < 0) {\n return -1;\n } /* over-subscribed */\n }\n if (left > 0 && (type === CODES$1 || max !== 1)) {\n return -1; /* incomplete set */\n }\n\n /* generate offsets into symbol table for each length for sorting */\n offs[1] = 0;\n for (len = 1; len < MAXBITS; len++) {\n offs[len + 1] = offs[len] + count[len];\n }\n\n /* sort symbols by length, by symbol order within each length */\n for (sym = 0; sym < codes; sym++) {\n if (lens[lens_index + sym] !== 0) {\n work[offs[lens[lens_index + sym]]++] = sym;\n }\n }\n\n /*\n Create and fill in decoding tables. In this loop, the table being\n filled is at next and has curr index bits. The code being used is huff\n with length len. That code is converted to an index by dropping drop\n bits off of the bottom. For codes where len is less than drop + curr,\n those top drop + curr - len bits are incremented through all values to\n fill the table with replicated entries.\n\n root is the number of index bits for the root table. When len exceeds\n root, sub-tables are created pointed to by the root entry with an index\n of the low root bits of huff. This is saved in low to check for when a\n new sub-table should be started. drop is zero when the root table is\n being filled, and drop is root when sub-tables are being filled.\n\n When a new sub-table is needed, it is necessary to look ahead in the\n code lengths to determine what size sub-table is needed. The length\n counts are used for this, and so count[] is decremented as codes are\n entered in the tables.\n\n used keeps track of how many table entries have been allocated from the\n provided *table space. It is checked for LENS and DIST tables against\n the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n the initial root table size constants. See the comments in inftrees.h\n for more information.\n\n sym increments through all symbols, and the loop terminates when\n all codes of length max, i.e. all codes, have been processed. This\n routine permits incomplete codes, so another loop after this one fills\n in the rest of the decoding tables with invalid code markers.\n */\n\n /* set up for code type */\n // poor man optimization - use if-else instead of switch,\n // to avoid deopts in old v8\n if (type === CODES$1) {\n base = extra = work; /* dummy value--not used */\n end = 19;\n\n } else if (type === LENS$1) {\n base = lbase;\n base_index -= 257;\n extra = lext;\n extra_index -= 257;\n end = 256;\n\n } else { /* DISTS */\n base = dbase;\n extra = dext;\n end = -1;\n }\n\n /* initialize opts for loop */\n huff = 0; /* starting code */\n sym = 0; /* starting code symbol */\n len = min; /* starting code length */\n next = table_index; /* current table to fill in */\n curr = root; /* current table index bits */\n drop = 0; /* current bits to drop from code for index */\n low = -1; /* trigger new sub-table when len > root */\n used = 1 << root; /* use root table entries */\n mask = used - 1; /* mask for comparing low */\n\n /* check available table space */\n if ((type === LENS$1 && used > ENOUGH_LENS$1) ||\n (type === DISTS$1 && used > ENOUGH_DISTS$1)) {\n return 1;\n }\n\n /* process all codes and make table entries */\n for (;;) {\n /* create table entry */\n here_bits = len - drop;\n if (work[sym] < end) {\n here_op = 0;\n here_val = work[sym];\n }\n else if (work[sym] > end) {\n here_op = extra[extra_index + work[sym]];\n here_val = base[base_index + work[sym]];\n }\n else {\n here_op = 32 + 64; /* end of block */\n here_val = 0;\n }\n\n /* replicate for those indices with low len bits equal to huff */\n incr = 1 << (len - drop);\n fill = 1 << curr;\n min = fill; /* save offset to next table */\n do {\n fill -= incr;\n table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n } while (fill !== 0);\n\n /* backwards increment the len-bit code huff */\n incr = 1 << (len - 1);\n while (huff & incr) {\n incr >>= 1;\n }\n if (incr !== 0) {\n huff &= incr - 1;\n huff += incr;\n } else {\n huff = 0;\n }\n\n /* go to next symbol, update count, len */\n sym++;\n if (--count[len] === 0) {\n if (len === max) { break; }\n len = lens[lens_index + work[sym]];\n }\n\n /* create new sub-table if needed */\n if (len > root && (huff & mask) !== low) {\n /* if first time, transition to sub-tables */\n if (drop === 0) {\n drop = root;\n }\n\n /* increment past last table */\n next += min; /* here min is 1 << curr */\n\n /* determine length of next table */\n curr = len - drop;\n left = 1 << curr;\n while (curr + drop < max) {\n left -= count[curr + drop];\n if (left <= 0) { break; }\n curr++;\n left <<= 1;\n }\n\n /* check for enough space */\n used += 1 << curr;\n if ((type === LENS$1 && used > ENOUGH_LENS$1) ||\n (type === DISTS$1 && used > ENOUGH_DISTS$1)) {\n return 1;\n }\n\n /* point entry in root table to sub-table */\n low = huff & mask;\n /*table.op[low] = curr;\n table.bits[low] = root;\n table.val[low] = next - opts.table_index;*/\n table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n }\n }\n\n /* fill in remaining table entry if code is incomplete (guaranteed to have\n at most one remaining entry, since if the code is incomplete, the\n maximum code length that was allowed to get this far is one bit) */\n if (huff !== 0) {\n //table.op[next + huff] = 64; /* invalid code marker */\n //table.bits[next + huff] = len - drop;\n //table.val[next + huff] = 0;\n table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n }\n\n /* set return parameters */\n //opts.table_index += used;\n opts.bits = root;\n return 0;\n};\n\n\nvar inftrees = inflate_table;\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n\n\n\n\n\nconst CODES = 0;\nconst LENS = 1;\nconst DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_FINISH: Z_FINISH$1, Z_BLOCK, Z_TREES,\n Z_OK: Z_OK$1, Z_STREAM_END: Z_STREAM_END$1, Z_NEED_DICT: Z_NEED_DICT$1, Z_STREAM_ERROR: Z_STREAM_ERROR$1, Z_DATA_ERROR: Z_DATA_ERROR$1, Z_MEM_ERROR: Z_MEM_ERROR$1, Z_BUF_ERROR,\n Z_DEFLATED\n} = constants$2;\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nconst HEAD = 1; /* i: waiting for magic header */\nconst FLAGS = 2; /* i: waiting for method and flags (gzip) */\nconst TIME = 3; /* i: waiting for modification time (gzip) */\nconst OS = 4; /* i: waiting for extra flags and operating system (gzip) */\nconst EXLEN = 5; /* i: waiting for extra length (gzip) */\nconst EXTRA = 6; /* i: waiting for extra bytes (gzip) */\nconst NAME = 7; /* i: waiting for end of file name (gzip) */\nconst COMMENT = 8; /* i: waiting for end of comment (gzip) */\nconst HCRC = 9; /* i: waiting for header crc (gzip) */\nconst DICTID = 10; /* i: waiting for dictionary check value */\nconst DICT = 11; /* waiting for inflateSetDictionary() call */\nconst TYPE = 12; /* i: waiting for type bits, including last-flag bit */\nconst TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */\nconst STORED = 14; /* i: waiting for stored size (length and complement) */\nconst COPY_ = 15; /* i/o: same as COPY below, but only first time in */\nconst COPY = 16; /* i/o: waiting for input or output to copy stored block */\nconst TABLE = 17; /* i: waiting for dynamic block table lengths */\nconst LENLENS = 18; /* i: waiting for code length code lengths */\nconst CODELENS = 19; /* i: waiting for length/lit and distance code lengths */\nconst LEN_ = 20; /* i: same as LEN below, but only first time in */\nconst LEN = 21; /* i: waiting for length/lit/eob code */\nconst LENEXT = 22; /* i: waiting for length extra bits */\nconst DIST = 23; /* i: waiting for distance code */\nconst DISTEXT = 24; /* i: waiting for distance extra bits */\nconst MATCH = 25; /* o: waiting for output space to copy string */\nconst LIT = 26; /* o: waiting for output space to write literal */\nconst CHECK = 27; /* i: waiting for 32-bit check value */\nconst LENGTH = 28; /* i: waiting for 32-bit length (gzip) */\nconst DONE = 29; /* finished check, done -- remain here until reset */\nconst BAD = 30; /* got a data error -- remain here until reset */\nconst MEM = 31; /* got an inflate() memory error -- remain here until reset */\nconst SYNC = 32; /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nconst ENOUGH_LENS = 852;\nconst ENOUGH_DISTS = 592;\n//const ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nconst MAX_WBITS = 15;\n/* 32K LZ77 window */\nconst DEF_WBITS = MAX_WBITS;\n\n\nconst zswap32 = (q) => {\n\n return (((q >>> 24) & 0xff) +\n ((q >>> 8) & 0xff00) +\n ((q & 0xff00) << 8) +\n ((q & 0xff) << 24));\n};\n\n\nfunction InflateState() {\n this.mode = 0; /* current inflate mode */\n this.last = false; /* true if processing last block */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.havedict = false; /* true if dictionary provided */\n this.flags = 0; /* gzip header method and flags (0 if zlib) */\n this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */\n this.check = 0; /* protected copy of check value */\n this.total = 0; /* protected copy of output count */\n // TODO: may be {}\n this.head = null; /* where to save gzip header information */\n\n /* sliding window */\n this.wbits = 0; /* log base 2 of requested window size */\n this.wsize = 0; /* window size or zero if not using window */\n this.whave = 0; /* valid bytes in the window */\n this.wnext = 0; /* window write index */\n this.window = null; /* allocated sliding window, if needed */\n\n /* bit accumulator */\n this.hold = 0; /* input bit accumulator */\n this.bits = 0; /* number of bits in \"in\" */\n\n /* for string and stored block copying */\n this.length = 0; /* literal or length of data to copy */\n this.offset = 0; /* distance back to copy string from */\n\n /* for table and code decoding */\n this.extra = 0; /* extra bits needed */\n\n /* fixed and dynamic code tables */\n this.lencode = null; /* starting table for length/literal codes */\n this.distcode = null; /* starting table for distance codes */\n this.lenbits = 0; /* index bits for lencode */\n this.distbits = 0; /* index bits for distcode */\n\n /* dynamic table building */\n this.ncode = 0; /* number of code length code lengths */\n this.nlen = 0; /* number of length code lengths */\n this.ndist = 0; /* number of distance code lengths */\n this.have = 0; /* number of code lengths in lens[] */\n this.next = null; /* next available space in codes[] */\n\n this.lens = new Uint16Array(320); /* temporary storage for code lengths */\n this.work = new Uint16Array(288); /* work area for code table building */\n\n /*\n because we don't have pointers in js, we use lencode and distcode directly\n as buffers so we don't need codes\n */\n //this.codes = new Int32Array(ENOUGH); /* space for code tables */\n this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */\n this.distdyn = null; /* dynamic table for distance codes (JS specific) */\n this.sane = 0; /* if false, allow invalid distance too far */\n this.back = 0; /* bits back of last unprocessed length/lit */\n this.was = 0; /* initial length of match */\n}\n\n\nconst inflateResetKeep = (strm) => {\n\n if (!strm || !strm.state) { return Z_STREAM_ERROR$1; }\n const state = strm.state;\n strm.total_in = strm.total_out = state.total = 0;\n strm.msg = ''; /*Z_NULL*/\n if (state.wrap) { /* to support ill-conceived Java test suite */\n strm.adler = state.wrap & 1;\n }\n state.mode = HEAD;\n state.last = 0;\n state.havedict = 0;\n state.dmax = 32768;\n state.head = null/*Z_NULL*/;\n state.hold = 0;\n state.bits = 0;\n //state.lencode = state.distcode = state.next = state.codes;\n state.lencode = state.lendyn = new Int32Array(ENOUGH_LENS);\n state.distcode = state.distdyn = new Int32Array(ENOUGH_DISTS);\n\n state.sane = 1;\n state.back = -1;\n //Tracev((stderr, \"inflate: reset\\n\"));\n return Z_OK$1;\n};\n\n\nconst inflateReset = (strm) => {\n\n if (!strm || !strm.state) { return Z_STREAM_ERROR$1; }\n const state = strm.state;\n state.wsize = 0;\n state.whave = 0;\n state.wnext = 0;\n return inflateResetKeep(strm);\n\n};\n\n\nconst inflateReset2 = (strm, windowBits) => {\n let wrap;\n\n /* get the state */\n if (!strm || !strm.state) { return Z_STREAM_ERROR$1; }\n const state = strm.state;\n\n /* extract wrap request from windowBits parameter */\n if (windowBits < 0) {\n wrap = 0;\n windowBits = -windowBits;\n }\n else {\n wrap = (windowBits >> 4) + 1;\n if (windowBits < 48) {\n windowBits &= 15;\n }\n }\n\n /* set number of window bits, free window if different */\n if (windowBits && (windowBits < 8 || windowBits > 15)) {\n return Z_STREAM_ERROR$1;\n }\n if (state.window !== null && state.wbits !== windowBits) {\n state.window = null;\n }\n\n /* update state and reset the rest of it */\n state.wrap = wrap;\n state.wbits = windowBits;\n return inflateReset(strm);\n};\n\n\nconst inflateInit2 = (strm, windowBits) => {\n\n if (!strm) { return Z_STREAM_ERROR$1; }\n //strm.msg = Z_NULL; /* in case we return an error */\n\n const state = new InflateState();\n\n //if (state === Z_NULL) return Z_MEM_ERROR;\n //Tracev((stderr, \"inflate: allocated\\n\"));\n strm.state = state;\n state.window = null/*Z_NULL*/;\n const ret = inflateReset2(strm, windowBits);\n if (ret !== Z_OK$1) {\n strm.state = null/*Z_NULL*/;\n }\n return ret;\n};\n\n\nconst inflateInit = (strm) => {\n\n return inflateInit2(strm, DEF_WBITS);\n};\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding. Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter. This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time. However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nlet virgin = true;\n\nlet lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\n\nconst fixedtables = (state) => {\n\n /* build fixed huffman tables if first call (may not be thread safe) */\n if (virgin) {\n lenfix = new Int32Array(512);\n distfix = new Int32Array(32);\n\n /* literal/length table */\n let sym = 0;\n while (sym < 144) { state.lens[sym++] = 8; }\n while (sym < 256) { state.lens[sym++] = 9; }\n while (sym < 280) { state.lens[sym++] = 7; }\n while (sym < 288) { state.lens[sym++] = 8; }\n\n inftrees(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 });\n\n /* distance table */\n sym = 0;\n while (sym < 32) { state.lens[sym++] = 5; }\n\n inftrees(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 });\n\n /* do this just once */\n virgin = false;\n }\n\n state.lencode = lenfix;\n state.lenbits = 9;\n state.distcode = distfix;\n state.distbits = 5;\n};\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning. If window does not exist yet, create it. This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nconst updatewindow = (strm, src, end, copy) => {\n\n let dist;\n const state = strm.state;\n\n /* if it hasn't been done already, allocate space for the window */\n if (state.window === null) {\n state.wsize = 1 << state.wbits;\n state.wnext = 0;\n state.whave = 0;\n\n state.window = new Uint8Array(state.wsize);\n }\n\n /* copy state->wsize or less output bytes into the circular window */\n if (copy >= state.wsize) {\n state.window.set(src.subarray(end - state.wsize, end), 0);\n state.wnext = 0;\n state.whave = state.wsize;\n }\n else {\n dist = state.wsize - state.wnext;\n if (dist > copy) {\n dist = copy;\n }\n //zmemcpy(state->window + state->wnext, end - copy, dist);\n state.window.set(src.subarray(end - copy, end - copy + dist), state.wnext);\n copy -= dist;\n if (copy) {\n //zmemcpy(state->window, end - copy, copy);\n state.window.set(src.subarray(end - copy, end), 0);\n state.wnext = copy;\n state.whave = state.wsize;\n }\n else {\n state.wnext += dist;\n if (state.wnext === state.wsize) { state.wnext = 0; }\n if (state.whave < state.wsize) { state.whave += dist; }\n }\n }\n return 0;\n};\n\n\nconst inflate$2 = (strm, flush) => {\n\n let state;\n let input, output; // input/output buffers\n let next; /* next input INDEX */\n let put; /* next output INDEX */\n let have, left; /* available input and output */\n let hold; /* bit buffer */\n let bits; /* bits in bit buffer */\n let _in, _out; /* save starting available input and output */\n let copy; /* number of stored or match bytes to copy */\n let from; /* where to copy match bytes from */\n let from_source;\n let here = 0; /* current decoding table entry */\n let here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n //let last; /* parent table entry */\n let last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n let len; /* length to copy for repeats, bits to drop */\n let ret; /* return code */\n const hbuf = new Uint8Array(4); /* buffer for gzip header crc calculation */\n let opts;\n\n let n; // temporary variable for NEED_BITS\n\n const order = /* permutation of code lengths */\n new Uint8Array([ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]);\n\n\n if (!strm || !strm.state || !strm.output ||\n (!strm.input && strm.avail_in !== 0)) {\n return Z_STREAM_ERROR$1;\n }\n\n state = strm.state;\n if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */\n\n\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n _in = have;\n _out = left;\n ret = Z_OK$1;\n\n inf_leave: // goto emulation\n for (;;) {\n switch (state.mode) {\n case HEAD:\n if (state.wrap === 0) {\n state.mode = TYPEDO;\n break;\n }\n //=== NEEDBITS(16);\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */\n state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32_1(state.check, hbuf, 2, 0);\n //===//\n\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = FLAGS;\n break;\n }\n state.flags = 0; /* expect zlib header */\n if (state.head) {\n state.head.done = false;\n }\n if (!(state.wrap & 1) || /* check if zlib header allowed */\n (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n strm.msg = 'incorrect header check';\n state.mode = BAD;\n break;\n }\n if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n len = (hold & 0x0f)/*BITS(4)*/ + 8;\n if (state.wbits === 0) {\n state.wbits = len;\n }\n else if (len > state.wbits) {\n strm.msg = 'invalid window size';\n state.mode = BAD;\n break;\n }\n\n // !!! pako patch. Force use `options.windowBits` if passed.\n // Required to always use max window size by default.\n state.dmax = 1 << state.wbits;\n //state.dmax = 1 << len;\n\n //Tracev((stderr, \"inflate: zlib header ok\\n\"));\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = hold & 0x200 ? DICTID : TYPE;\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n break;\n case FLAGS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.flags = hold;\n if ((state.flags & 0xff) !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n if (state.flags & 0xe000) {\n strm.msg = 'unknown header flags set';\n state.mode = BAD;\n break;\n }\n if (state.head) {\n state.head.text = ((hold >> 8) & 1);\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32_1(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = TIME;\n /* falls through */\n case TIME:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.time = hold;\n }\n if (state.flags & 0x0200) {\n //=== CRC4(state.check, hold)\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n hbuf[2] = (hold >>> 16) & 0xff;\n hbuf[3] = (hold >>> 24) & 0xff;\n state.check = crc32_1(state.check, hbuf, 4, 0);\n //===\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = OS;\n /* falls through */\n case OS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.xflags = (hold & 0xff);\n state.head.os = (hold >> 8);\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32_1(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = EXLEN;\n /* falls through */\n case EXLEN:\n if (state.flags & 0x0400) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length = hold;\n if (state.head) {\n state.head.extra_len = hold;\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32_1(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n else if (state.head) {\n state.head.extra = null/*Z_NULL*/;\n }\n state.mode = EXTRA;\n /* falls through */\n case EXTRA:\n if (state.flags & 0x0400) {\n copy = state.length;\n if (copy > have) { copy = have; }\n if (copy) {\n if (state.head) {\n len = state.head.extra_len - state.length;\n if (!state.head.extra) {\n // Use untyped array for more convenient processing later\n state.head.extra = new Uint8Array(state.head.extra_len);\n }\n state.head.extra.set(\n input.subarray(\n next,\n // extra field is limited to 65536 bytes\n // - no need for additional size check\n next + copy\n ),\n /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n len\n );\n //zmemcpy(state.head.extra + len, next,\n // len + copy > state.head.extra_max ?\n // state.head.extra_max - len : copy);\n }\n if (state.flags & 0x0200) {\n state.check = crc32_1(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n state.length -= copy;\n }\n if (state.length) { break inf_leave; }\n }\n state.length = 0;\n state.mode = NAME;\n /* falls through */\n case NAME:\n if (state.flags & 0x0800) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n // TODO: 2 or 1 bytes?\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.name_max*/)) {\n state.head.name += String.fromCharCode(len);\n }\n } while (len && copy < have);\n\n if (state.flags & 0x0200) {\n state.check = crc32_1(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.name = null;\n }\n state.length = 0;\n state.mode = COMMENT;\n /* falls through */\n case COMMENT:\n if (state.flags & 0x1000) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.comm_max*/)) {\n state.head.comment += String.fromCharCode(len);\n }\n } while (len && copy < have);\n if (state.flags & 0x0200) {\n state.check = crc32_1(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.comment = null;\n }\n state.mode = HCRC;\n /* falls through */\n case HCRC:\n if (state.flags & 0x0200) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (hold !== (state.check & 0xffff)) {\n strm.msg = 'header crc mismatch';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n if (state.head) {\n state.head.hcrc = ((state.flags >> 9) & 1);\n state.head.done = true;\n }\n strm.adler = state.check = 0;\n state.mode = TYPE;\n break;\n case DICTID:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n strm.adler = state.check = zswap32(hold);\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = DICT;\n /* falls through */\n case DICT:\n if (state.havedict === 0) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n return Z_NEED_DICT$1;\n }\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = TYPE;\n /* falls through */\n case TYPE:\n if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case TYPEDO:\n if (state.last) {\n //--- BYTEBITS() ---//\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n state.mode = CHECK;\n break;\n }\n //=== NEEDBITS(3); */\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.last = (hold & 0x01)/*BITS(1)*/;\n //--- DROPBITS(1) ---//\n hold >>>= 1;\n bits -= 1;\n //---//\n\n switch ((hold & 0x03)/*BITS(2)*/) {\n case 0: /* stored block */\n //Tracev((stderr, \"inflate: stored block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = STORED;\n break;\n case 1: /* fixed block */\n fixedtables(state);\n //Tracev((stderr, \"inflate: fixed codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = LEN_; /* decode codes */\n if (flush === Z_TREES) {\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break inf_leave;\n }\n break;\n case 2: /* dynamic block */\n //Tracev((stderr, \"inflate: dynamic codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = TABLE;\n break;\n case 3:\n strm.msg = 'invalid block type';\n state.mode = BAD;\n }\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break;\n case STORED:\n //--- BYTEBITS() ---// /* go to byte boundary */\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n strm.msg = 'invalid stored block lengths';\n state.mode = BAD;\n break;\n }\n state.length = hold & 0xffff;\n //Tracev((stderr, \"inflate: stored length %u\\n\",\n // state.length));\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = COPY_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case COPY_:\n state.mode = COPY;\n /* falls through */\n case COPY:\n copy = state.length;\n if (copy) {\n if (copy > have) { copy = have; }\n if (copy > left) { copy = left; }\n if (copy === 0) { break inf_leave; }\n //--- zmemcpy(put, next, copy); ---\n output.set(input.subarray(next, next + copy), put);\n //---//\n have -= copy;\n next += copy;\n left -= copy;\n put += copy;\n state.length -= copy;\n break;\n }\n //Tracev((stderr, \"inflate: stored end\\n\"));\n state.mode = TYPE;\n break;\n case TABLE:\n //=== NEEDBITS(14); */\n while (bits < 14) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n if (state.nlen > 286 || state.ndist > 30) {\n strm.msg = 'too many length or distance symbols';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracev((stderr, \"inflate: table sizes ok\\n\"));\n state.have = 0;\n state.mode = LENLENS;\n /* falls through */\n case LENLENS:\n while (state.have < state.ncode) {\n //=== NEEDBITS(3);\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n while (state.have < 19) {\n state.lens[order[state.have++]] = 0;\n }\n // We have separate tables & no pointers. 2 commented lines below not needed.\n //state.next = state.codes;\n //state.lencode = state.next;\n // Switch to use dynamic table\n state.lencode = state.lendyn;\n state.lenbits = 7;\n\n opts = { bits: state.lenbits };\n ret = inftrees(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n state.lenbits = opts.bits;\n\n if (ret) {\n strm.msg = 'invalid code lengths set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, \"inflate: code lengths ok\\n\"));\n state.have = 0;\n state.mode = CODELENS;\n /* falls through */\n case CODELENS:\n while (state.have < state.nlen + state.ndist) {\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_val < 16) {\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.lens[state.have++] = here_val;\n }\n else {\n if (here_val === 16) {\n //=== NEEDBITS(here.bits + 2);\n n = here_bits + 2;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n if (state.have === 0) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n len = state.lens[state.have - 1];\n copy = 3 + (hold & 0x03);//BITS(2);\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n }\n else if (here_val === 17) {\n //=== NEEDBITS(here.bits + 3);\n n = here_bits + 3;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 3 + (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n else {\n //=== NEEDBITS(here.bits + 7);\n n = here_bits + 7;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 11 + (hold & 0x7f);//BITS(7);\n //--- DROPBITS(7) ---//\n hold >>>= 7;\n bits -= 7;\n //---//\n }\n if (state.have + copy > state.nlen + state.ndist) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n while (copy--) {\n state.lens[state.have++] = len;\n }\n }\n }\n\n /* handle error breaks in while */\n if (state.mode === BAD) { break; }\n\n /* check for end-of-block code (better have one) */\n if (state.lens[256] === 0) {\n strm.msg = 'invalid code -- missing end-of-block';\n state.mode = BAD;\n break;\n }\n\n /* build code tables -- note: do not change the lenbits or distbits\n values here (9 and 6) without reading the comments in inftrees.h\n concerning the ENOUGH constants, which depend on those values */\n state.lenbits = 9;\n\n opts = { bits: state.lenbits };\n ret = inftrees(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.lenbits = opts.bits;\n // state.lencode = state.next;\n\n if (ret) {\n strm.msg = 'invalid literal/lengths set';\n state.mode = BAD;\n break;\n }\n\n state.distbits = 6;\n //state.distcode.copy(state.codes);\n // Switch to use dynamic table\n state.distcode = state.distdyn;\n opts = { bits: state.distbits };\n ret = inftrees(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.distbits = opts.bits;\n // state.distcode = state.next;\n\n if (ret) {\n strm.msg = 'invalid distances set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, 'inflate: codes ok\\n'));\n state.mode = LEN_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case LEN_:\n state.mode = LEN;\n /* falls through */\n case LEN:\n if (have >= 6 && left >= 258) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n inffast(strm, _out);\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n if (state.mode === TYPE) {\n state.back = -1;\n }\n break;\n }\n state.back = 0;\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if (here_bits <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_op && (here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.lencode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n state.length = here_val;\n if (here_op === 0) {\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n state.mode = LIT;\n break;\n }\n if (here_op & 32) {\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.back = -1;\n state.mode = TYPE;\n break;\n }\n if (here_op & 64) {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break;\n }\n state.extra = here_op & 15;\n state.mode = LENEXT;\n /* falls through */\n case LENEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", state.length));\n state.was = state.length;\n state.mode = DIST;\n /* falls through */\n case DIST:\n for (;;) {\n here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if ((here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.distcode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n if (here_op & 64) {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break;\n }\n state.offset = here_val;\n state.extra = (here_op) & 15;\n state.mode = DISTEXT;\n /* falls through */\n case DISTEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n//#ifdef INFLATE_STRICT\n if (state.offset > state.dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracevv((stderr, \"inflate: distance %u\\n\", state.offset));\n state.mode = MATCH;\n /* falls through */\n case MATCH:\n if (left === 0) { break inf_leave; }\n copy = _out - left;\n if (state.offset > copy) { /* copy from window */\n copy = state.offset - copy;\n if (copy > state.whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// Trace((stderr, \"inflate.c too far\\n\"));\n// copy -= state.whave;\n// if (copy > state.length) { copy = state.length; }\n// if (copy > left) { copy = left; }\n// left -= copy;\n// state.length -= copy;\n// do {\n// output[put++] = 0;\n// } while (--copy);\n// if (state.length === 0) { state.mode = LEN; }\n// break;\n//#endif\n }\n if (copy > state.wnext) {\n copy -= state.wnext;\n from = state.wsize - copy;\n }\n else {\n from = state.wnext - copy;\n }\n if (copy > state.length) { copy = state.length; }\n from_source = state.window;\n }\n else { /* copy from output */\n from_source = output;\n from = put - state.offset;\n copy = state.length;\n }\n if (copy > left) { copy = left; }\n left -= copy;\n state.length -= copy;\n do {\n output[put++] = from_source[from++];\n } while (--copy);\n if (state.length === 0) { state.mode = LEN; }\n break;\n case LIT:\n if (left === 0) { break inf_leave; }\n output[put++] = state.length;\n left--;\n state.mode = LEN;\n break;\n case CHECK:\n if (state.wrap) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n // Use '|' instead of '+' to make sure that result is signed\n hold |= input[next++] << bits;\n bits += 8;\n }\n //===//\n _out -= left;\n strm.total_out += _out;\n state.total += _out;\n if (_out) {\n strm.adler = state.check =\n /*UPDATE(state.check, put - _out, _out);*/\n (state.flags ? crc32_1(state.check, output, _out, put - _out) : adler32_1(state.check, output, _out, put - _out));\n\n }\n _out = left;\n // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n if ((state.flags ? hold : zswap32(hold)) !== state.check) {\n strm.msg = 'incorrect data check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: check matches trailer\\n\"));\n }\n state.mode = LENGTH;\n /* falls through */\n case LENGTH:\n if (state.wrap && state.flags) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (hold !== (state.total & 0xffffffff)) {\n strm.msg = 'incorrect length check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: length matches trailer\\n\"));\n }\n state.mode = DONE;\n /* falls through */\n case DONE:\n ret = Z_STREAM_END$1;\n break inf_leave;\n case BAD:\n ret = Z_DATA_ERROR$1;\n break inf_leave;\n case MEM:\n return Z_MEM_ERROR$1;\n case SYNC:\n /* falls through */\n default:\n return Z_STREAM_ERROR$1;\n }\n }\n\n // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n /*\n Return from inflate(), updating the total counts and the check value.\n If there was no progress during the inflate() call, return a buffer\n error. Call updatewindow() to create and/or update the window state.\n Note: a memory error from inflate() is non-recoverable.\n */\n\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n\n if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n (state.mode < CHECK || flush !== Z_FINISH$1))) {\n if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) ;\n }\n _in -= strm.avail_in;\n _out -= strm.avail_out;\n strm.total_in += _in;\n strm.total_out += _out;\n state.total += _out;\n if (state.wrap && _out) {\n strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/\n (state.flags ? crc32_1(state.check, output, _out, strm.next_out - _out) : adler32_1(state.check, output, _out, strm.next_out - _out));\n }\n strm.data_type = state.bits + (state.last ? 64 : 0) +\n (state.mode === TYPE ? 128 : 0) +\n (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n if (((_in === 0 && _out === 0) || flush === Z_FINISH$1) && ret === Z_OK$1) {\n ret = Z_BUF_ERROR;\n }\n return ret;\n};\n\n\nconst inflateEnd = (strm) => {\n\n if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {\n return Z_STREAM_ERROR$1;\n }\n\n let state = strm.state;\n if (state.window) {\n state.window = null;\n }\n strm.state = null;\n return Z_OK$1;\n};\n\n\nconst inflateGetHeader = (strm, head) => {\n\n /* check state */\n if (!strm || !strm.state) { return Z_STREAM_ERROR$1; }\n const state = strm.state;\n if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR$1; }\n\n /* save header structure */\n state.head = head;\n head.done = false;\n return Z_OK$1;\n};\n\n\nconst inflateSetDictionary = (strm, dictionary) => {\n const dictLength = dictionary.length;\n\n let state;\n let dictid;\n let ret;\n\n /* check state */\n if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR$1; }\n state = strm.state;\n\n if (state.wrap !== 0 && state.mode !== DICT) {\n return Z_STREAM_ERROR$1;\n }\n\n /* check for correct dictionary identifier */\n if (state.mode === DICT) {\n dictid = 1; /* adler32(0, null, 0)*/\n /* dictid = adler32(dictid, dictionary, dictLength); */\n dictid = adler32_1(dictid, dictionary, dictLength, 0);\n if (dictid !== state.check) {\n return Z_DATA_ERROR$1;\n }\n }\n /* copy dictionary to window using updatewindow(), which will amend the\n existing dictionary if appropriate */\n ret = updatewindow(strm, dictionary, dictLength, dictLength);\n if (ret) {\n state.mode = MEM;\n return Z_MEM_ERROR$1;\n }\n state.havedict = 1;\n // Tracev((stderr, \"inflate: dictionary set\\n\"));\n return Z_OK$1;\n};\n\n\nvar inflateReset_1 = inflateReset;\nvar inflateReset2_1 = inflateReset2;\nvar inflateResetKeep_1 = inflateResetKeep;\nvar inflateInit_1 = inflateInit;\nvar inflateInit2_1 = inflateInit2;\nvar inflate_2$1 = inflate$2;\nvar inflateEnd_1 = inflateEnd;\nvar inflateGetHeader_1 = inflateGetHeader;\nvar inflateSetDictionary_1 = inflateSetDictionary;\nvar inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nmodule.exports.inflateCopy = inflateCopy;\nmodule.exports.inflateGetDictionary = inflateGetDictionary;\nmodule.exports.inflateMark = inflateMark;\nmodule.exports.inflatePrime = inflatePrime;\nmodule.exports.inflateSync = inflateSync;\nmodule.exports.inflateSyncPoint = inflateSyncPoint;\nmodule.exports.inflateUndermine = inflateUndermine;\n*/\n\nvar inflate_1$2 = {\n\tinflateReset: inflateReset_1,\n\tinflateReset2: inflateReset2_1,\n\tinflateResetKeep: inflateResetKeep_1,\n\tinflateInit: inflateInit_1,\n\tinflateInit2: inflateInit2_1,\n\tinflate: inflate_2$1,\n\tinflateEnd: inflateEnd_1,\n\tinflateGetHeader: inflateGetHeader_1,\n\tinflateSetDictionary: inflateSetDictionary_1,\n\tinflateInfo: inflateInfo\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction GZheader() {\n /* true if compressed data believed to be text */\n this.text = 0;\n /* modification time */\n this.time = 0;\n /* extra flags (not used when writing a gzip file) */\n this.xflags = 0;\n /* operating system */\n this.os = 0;\n /* pointer to extra field or Z_NULL if none */\n this.extra = null;\n /* extra field length (valid if extra != Z_NULL) */\n this.extra_len = 0; // Actually, we don't need it in JS,\n // but leave for few code modifications\n\n //\n // Setup limits is not necessary because in js we should not preallocate memory\n // for inflate use constant limit in 65536 bytes\n //\n\n /* space at extra (only when reading header) */\n // this.extra_max = 0;\n /* pointer to zero-terminated file name or Z_NULL */\n this.name = '';\n /* space at name (only when reading header) */\n // this.name_max = 0;\n /* pointer to zero-terminated comment or Z_NULL */\n this.comment = '';\n /* space at comment (only when reading header) */\n // this.comm_max = 0;\n /* true if there was or will be a header crc */\n this.hcrc = 0;\n /* true when done reading gzip header (not used when writing a gzip file) */\n this.done = false;\n}\n\nvar gzheader = GZheader;\n\nconst toString = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_NO_FLUSH, Z_FINISH,\n Z_OK, Z_STREAM_END, Z_NEED_DICT, Z_STREAM_ERROR, Z_DATA_ERROR, Z_MEM_ERROR\n} = constants$2;\n\n/* ===========================================================================*/\n\n\n/**\n * class Inflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[inflate]]\n * and [[inflateRaw]].\n **/\n\n/* internal\n * inflate.chunks -> Array\n *\n * Chunks of output data, if [[Inflate#onData]] not overridden.\n **/\n\n/**\n * Inflate.result -> Uint8Array|String\n *\n * Uncompressed result, generated by default [[Inflate#onData]]\n * and [[Inflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Inflate#push]] with `Z_FINISH` / `true` param).\n **/\n\n/**\n * Inflate.err -> Number\n *\n * Error code after inflate finished. 0 (Z_OK) on success.\n * Should be checked if broken data possible.\n **/\n\n/**\n * Inflate.msg -> String\n *\n * Error message, if [[Inflate.err]] != 0\n **/\n\n\n/**\n * new Inflate(options)\n * - options (Object): zlib inflate options.\n *\n * Creates new inflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `windowBits`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw inflate\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n * By default, when no options set, autodetect deflate/gzip data format via\n * wrapper header.\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n * const chunk1 = new Uint8Array([1,2,3,4,5,6,7,8,9])\n * const chunk2 = new Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * const inflate = new pako.Inflate({ level: 3});\n *\n * inflate.push(chunk1, false);\n * inflate.push(chunk2, true); // true -> last chunk\n *\n * if (inflate.err) { throw new Error(inflate.err); }\n *\n * console.log(inflate.result);\n * ```\n **/\nfunction Inflate$1(options) {\n this.options = common.assign({\n chunkSize: 1024 * 64,\n windowBits: 15,\n to: ''\n }, options || {});\n\n const opt = this.options;\n\n // Force window size for `raw` data, if not set directly,\n // because we have no header for autodetect.\n if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {\n opt.windowBits = -opt.windowBits;\n if (opt.windowBits === 0) { opt.windowBits = -15; }\n }\n\n // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate\n if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&\n !(options && options.windowBits)) {\n opt.windowBits += 32;\n }\n\n // Gzip header has no info about windows size, we can do autodetect only\n // for deflate. So, if window size not set, force it to max when gzip possible\n if ((opt.windowBits > 15) && (opt.windowBits < 48)) {\n // bit 3 (16) -> gzipped data\n // bit 4 (32) -> autodetect gzip/deflate\n if ((opt.windowBits & 15) === 0) {\n opt.windowBits |= 15;\n }\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new zstream();\n this.strm.avail_out = 0;\n\n let status = inflate_1$2.inflateInit2(\n this.strm,\n opt.windowBits\n );\n\n if (status !== Z_OK) {\n throw new Error(messages[status]);\n }\n\n this.header = new gzheader();\n\n inflate_1$2.inflateGetHeader(this.strm, this.header);\n\n // Setup dictionary\n if (opt.dictionary) {\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n opt.dictionary = strings.string2buf(opt.dictionary);\n } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n opt.dictionary = new Uint8Array(opt.dictionary);\n }\n if (opt.raw) { //In raw mode we need to set the dictionary early\n status = inflate_1$2.inflateSetDictionary(this.strm, opt.dictionary);\n if (status !== Z_OK) {\n throw new Error(messages[status]);\n }\n }\n }\n}\n\n/**\n * Inflate#push(data[, flush_mode]) -> Boolean\n * - data (Uint8Array|ArrayBuffer): input data\n * - flush_mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE\n * flush modes. See constants. Skipped or `false` means Z_NO_FLUSH,\n * `true` means Z_FINISH.\n *\n * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with\n * new output chunks. Returns `true` on success. If end of stream detected,\n * [[Inflate#onEnd]] will be called.\n *\n * `flush_mode` is not needed for normal operation, because end of stream\n * detected automatically. You may try to use it for advanced things, but\n * this functionality was not tested.\n *\n * On fail call [[Inflate#onEnd]] with error code and return false.\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nInflate$1.prototype.push = function (data, flush_mode) {\n const strm = this.strm;\n const chunkSize = this.options.chunkSize;\n const dictionary = this.options.dictionary;\n let status, _flush_mode, last_avail_out;\n\n if (this.ended) return false;\n\n if (flush_mode === ~~flush_mode) _flush_mode = flush_mode;\n else _flush_mode = flush_mode === true ? Z_FINISH : Z_NO_FLUSH;\n\n // Convert data if needed\n if (toString.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n for (;;) {\n if (strm.avail_out === 0) {\n strm.output = new Uint8Array(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n\n status = inflate_1$2.inflate(strm, _flush_mode);\n\n if (status === Z_NEED_DICT && dictionary) {\n status = inflate_1$2.inflateSetDictionary(strm, dictionary);\n\n if (status === Z_OK) {\n status = inflate_1$2.inflate(strm, _flush_mode);\n } else if (status === Z_DATA_ERROR) {\n // Replace code with more verbose\n status = Z_NEED_DICT;\n }\n }\n\n // Skip snyc markers if more data follows and not raw mode\n while (strm.avail_in > 0 &&\n status === Z_STREAM_END &&\n strm.state.wrap > 0 &&\n data[strm.next_in] !== 0)\n {\n inflate_1$2.inflateReset(strm);\n status = inflate_1$2.inflate(strm, _flush_mode);\n }\n\n switch (status) {\n case Z_STREAM_ERROR:\n case Z_DATA_ERROR:\n case Z_NEED_DICT:\n case Z_MEM_ERROR:\n this.onEnd(status);\n this.ended = true;\n return false;\n }\n\n // Remember real `avail_out` value, because we may patch out buffer content\n // to align utf8 strings boundaries.\n last_avail_out = strm.avail_out;\n\n if (strm.next_out) {\n if (strm.avail_out === 0 || status === Z_STREAM_END) {\n\n if (this.options.to === 'string') {\n\n let next_out_utf8 = strings.utf8border(strm.output, strm.next_out);\n\n let tail = strm.next_out - next_out_utf8;\n let utf8str = strings.buf2string(strm.output, next_out_utf8);\n\n // move tail & realign counters\n strm.next_out = tail;\n strm.avail_out = chunkSize - tail;\n if (tail) strm.output.set(strm.output.subarray(next_out_utf8, next_out_utf8 + tail), 0);\n\n this.onData(utf8str);\n\n } else {\n this.onData(strm.output.length === strm.next_out ? strm.output : strm.output.subarray(0, strm.next_out));\n }\n }\n }\n\n // Must repeat iteration if out buffer is full\n if (status === Z_OK && last_avail_out === 0) continue;\n\n // Finalize if end of stream reached.\n if (status === Z_STREAM_END) {\n status = inflate_1$2.inflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return true;\n }\n\n if (strm.avail_in === 0) break;\n }\n\n return true;\n};\n\n\n/**\n * Inflate#onData(chunk) -> Void\n * - chunk (Uint8Array|String): output data. When string output requested,\n * each chunk will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nInflate$1.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Inflate#onEnd(status) -> Void\n * - status (Number): inflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called either after you tell inflate that the input stream is\n * complete (Z_FINISH). By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nInflate$1.prototype.onEnd = function (status) {\n // On success - join\n if (status === Z_OK) {\n if (this.options.to === 'string') {\n this.result = this.chunks.join('');\n } else {\n this.result = common.flattenChunks(this.chunks);\n }\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * inflate(data[, options]) -> Uint8Array|String\n * - data (Uint8Array): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Decompress `data` with inflate/ungzip and `options`. Autodetect\n * format via wrapper header by default. That's why we don't provide\n * separate `ungzip` method.\n *\n * Supported options are:\n *\n * - windowBits\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako');\n * const input = pako.deflate(new Uint8Array([1,2,3,4,5,6,7,8,9]));\n * let output;\n *\n * try {\n * output = pako.inflate(input);\n * } catch (err) {\n * console.log(err);\n * }\n * ```\n **/\nfunction inflate$1(input, options) {\n const inflator = new Inflate$1(options);\n\n inflator.push(input);\n\n // That will never happens, if you don't cheat with options :)\n if (inflator.err) throw inflator.msg || messages[inflator.err];\n\n return inflator.result;\n}\n\n\n/**\n * inflateRaw(data[, options]) -> Uint8Array|String\n * - data (Uint8Array): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * The same as [[inflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction inflateRaw$1(input, options) {\n options = options || {};\n options.raw = true;\n return inflate$1(input, options);\n}\n\n\n/**\n * ungzip(data[, options]) -> Uint8Array|String\n * - data (Uint8Array): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Just shortcut to [[inflate]], because it autodetects format\n * by header.content. Done for convenience.\n **/\n\n\nvar Inflate_1$1 = Inflate$1;\nvar inflate_2 = inflate$1;\nvar inflateRaw_1$1 = inflateRaw$1;\nvar ungzip$1 = inflate$1;\nvar constants = constants$2;\n\nvar inflate_1$1 = {\n\tInflate: Inflate_1$1,\n\tinflate: inflate_2,\n\tinflateRaw: inflateRaw_1$1,\n\tungzip: ungzip$1,\n\tconstants: constants\n};\n\nconst { Deflate, deflate, deflateRaw, gzip } = deflate_1$1;\n\nconst { Inflate, inflate, inflateRaw, ungzip } = inflate_1$1;\n\n\n\nvar Deflate_1 = Deflate;\nvar deflate_1 = deflate;\nvar deflateRaw_1 = deflateRaw;\nvar gzip_1 = gzip;\nvar Inflate_1 = Inflate;\nvar inflate_1 = inflate;\nvar inflateRaw_1 = inflateRaw;\nvar ungzip_1 = ungzip;\nvar constants_1 = constants$2;\n\nvar pako = {\n\tDeflate: Deflate_1,\n\tdeflate: deflate_1,\n\tdeflateRaw: deflateRaw_1,\n\tgzip: gzip_1,\n\tInflate: Inflate_1,\n\tinflate: inflate_1,\n\tinflateRaw: inflateRaw_1,\n\tungzip: ungzip_1,\n\tconstants: constants_1\n};\n\nfunction toInt(val) {\n if (isNaN(val)) {\n throw new Error(\"Not a number: \" + val);\n } else if (typeof val == \"string\") {\n return parseInt(val);\n } else return val;\n}\n\nfunction toFloat(val) {\n if (isNaN(val)) {\n throw new Error(\"Not a number: \" + val);\n } else if (typeof val == \"string\") {\n return parseFloat(val);\n } else return val;\n}\n\nvar BufferStream = /*#__PURE__*/function () {\n function BufferStream(sizeOrBuffer, littleEndian) {\n _classCallCheck(this, BufferStream);\n\n this.buffer = typeof sizeOrBuffer == \"number\" ? new ArrayBuffer(sizeOrBuffer) : sizeOrBuffer;\n\n if (!this.buffer) {\n this.buffer = new ArrayBuffer(0);\n }\n\n this.view = new DataView(this.buffer);\n this.offset = 0;\n this.isLittleEndian = littleEndian || false;\n this.size = 0;\n this.encoder = new TextEncoder(\"utf-8\");\n }\n\n _createClass(BufferStream, [{\n key: \"setEndian\",\n value: function setEndian(isLittle) {\n this.isLittleEndian = isLittle;\n }\n }, {\n key: \"writeUint8\",\n value: function writeUint8(value) {\n this.checkSize(1);\n this.view.setUint8(this.offset, toInt(value));\n return this.increment(1);\n }\n }, {\n key: \"writeUint8Repeat\",\n value: function writeUint8Repeat(value, count) {\n var v = toInt(value);\n this.checkSize(count);\n\n for (var i = 0; i < count; i++) {\n this.view.setUint8(this.offset + i, v);\n }\n\n return this.increment(count);\n }\n }, {\n key: \"writeInt8\",\n value: function writeInt8(value) {\n this.checkSize(1);\n this.view.setInt8(this.offset, toInt(value));\n return this.increment(1);\n }\n }, {\n key: \"writeUint16\",\n value: function writeUint16(value) {\n this.checkSize(2);\n this.view.setUint16(this.offset, toInt(value), this.isLittleEndian);\n return this.increment(2);\n }\n }, {\n key: \"writeTwoUint16s\",\n value: function writeTwoUint16s(value) {\n this.checkSize(4);\n var first = value >> 16;\n var second = value & 0xffff;\n this.view.setUint16(this.offset, toInt(first), this.isLittleEndian);\n this.view.setUint16(this.offset + 2, toInt(second), this.isLittleEndian);\n return this.increment(4);\n }\n }, {\n key: \"writeInt16\",\n value: function writeInt16(value) {\n this.checkSize(2);\n this.view.setInt16(this.offset, toInt(value), this.isLittleEndian);\n return this.increment(2);\n }\n }, {\n key: \"writeUint32\",\n value: function writeUint32(value) {\n this.checkSize(4);\n this.view.setUint32(this.offset, toInt(value), this.isLittleEndian);\n return this.increment(4);\n }\n }, {\n key: \"writeInt32\",\n value: function writeInt32(value) {\n this.checkSize(4);\n this.view.setInt32(this.offset, toInt(value), this.isLittleEndian);\n return this.increment(4);\n }\n }, {\n key: \"writeFloat\",\n value: function writeFloat(value) {\n this.checkSize(4);\n this.view.setFloat32(this.offset, toFloat(value), this.isLittleEndian);\n return this.increment(4);\n }\n }, {\n key: \"writeDouble\",\n value: function writeDouble(value) {\n this.checkSize(8);\n this.view.setFloat64(this.offset, toFloat(value), this.isLittleEndian);\n return this.increment(8);\n }\n }, {\n key: \"writeUTF8String\",\n value: function writeUTF8String(value) {\n var encodedString = this.encoder.encode(value);\n this.checkSize(encodedString.byteLength);\n new Uint8Array(this.buffer).set(encodedString, this.offset);\n return this.increment(encodedString.byteLength);\n }\n }, {\n key: \"writeAsciiString\",\n value: function writeAsciiString(value) {\n value = value || \"\";\n var len = value.length;\n this.checkSize(len);\n var startOffset = this.offset;\n\n for (var i = 0; i < len; i++) {\n var charcode = value.charCodeAt(i);\n this.view.setUint8(startOffset + i, charcode);\n }\n\n return this.increment(len);\n }\n }, {\n key: \"readUint32\",\n value: function readUint32() {\n var val = this.view.getUint32(this.offset, this.isLittleEndian);\n this.increment(4);\n return val;\n }\n }, {\n key: \"readUint16\",\n value: function readUint16() {\n var val = this.view.getUint16(this.offset, this.isLittleEndian);\n this.increment(2);\n return val;\n }\n }, {\n key: \"readUint8\",\n value: function readUint8() {\n var val = this.view.getUint8(this.offset);\n this.increment(1);\n return val;\n }\n }, {\n key: \"peekUint8\",\n value: function peekUint8(offset) {\n return this.view.getUint8(this.offset + offset);\n }\n }, {\n key: \"readUint8Array\",\n value: function readUint8Array(length) {\n var arr = new Uint8Array(this.buffer, this.offset, length);\n this.increment(length);\n return arr;\n }\n }, {\n key: \"readUint16Array\",\n value: function readUint16Array(length) {\n var sixlen = length / 2,\n arr = new Uint16Array(sixlen),\n i = 0;\n\n while (i++ < sixlen) {\n arr[i] = this.view.getUint16(this.offset, this.isLittleEndian);\n this.offset += 2;\n }\n\n return arr;\n }\n }, {\n key: \"readInt16\",\n value: function readInt16() {\n var val = this.view.getInt16(this.offset, this.isLittleEndian);\n this.increment(2);\n return val;\n }\n }, {\n key: \"readInt32\",\n value: function readInt32() {\n var val = this.view.getInt32(this.offset, this.isLittleEndian);\n this.increment(4);\n return val;\n }\n }, {\n key: \"readFloat\",\n value: function readFloat() {\n var val = this.view.getFloat32(this.offset, this.isLittleEndian);\n this.increment(4);\n return val;\n }\n }, {\n key: \"readDouble\",\n value: function readDouble() {\n var val = this.view.getFloat64(this.offset, this.isLittleEndian);\n this.increment(8);\n return val;\n }\n }, {\n key: \"readAsciiString\",\n value: function readAsciiString(length) {\n var result = \"\";\n var start = this.offset;\n var end = this.offset + length;\n\n if (end >= this.buffer.byteLength) {\n end = this.buffer.byteLength;\n }\n\n for (var i = start; i < end; ++i) {\n result += String.fromCharCode(this.view.getUint8(i));\n }\n\n this.increment(end - start);\n return result;\n }\n }, {\n key: \"readVR\",\n value: function readVR() {\n var vr = String.fromCharCode(this.view.getUint8(this.offset)) + String.fromCharCode(this.view.getUint8(this.offset + 1));\n this.increment(2);\n return vr;\n }\n }, {\n key: \"readEncodedString\",\n value: function readEncodedString(length) {\n if (this.offset + length >= this.buffer.byteLength) {\n length = this.buffer.byteLength - this.offset;\n }\n\n var view = new DataView(this.buffer, this.offset, length);\n var result = this.decoder.decode(view);\n this.increment(length);\n return result;\n }\n }, {\n key: \"readHex\",\n value: function readHex(length) {\n var hexString = \"\";\n\n for (var i = 0; i < length; i++) {\n hexString += this.readUint8().toString(16);\n }\n\n return hexString;\n }\n }, {\n key: \"checkSize\",\n value: function checkSize(step) {\n if (this.offset + step > this.buffer.byteLength) {\n //throw new Error(\"Writing exceeded the size of buffer\");\n //\n // Resize the buffer.\n // The idea is that when it is necessary to increase the buffer size,\n // there will likely be more bytes which need to be written to the\n // buffer in the future. Buffer allocation is costly.\n // So we increase the buffer size right now\n // by a larger amount than necessary, to reserve space for later\n // writes which then can be done much faster. The current size of\n // the buffer is the best estimate of the scale by which the size\n // should increase.\n // So approximately doubling the size of the buffer\n // (while ensuring it fits the new data) is a simple but effective strategy.\n var dstSize = this.offset + step + this.buffer.byteLength;\n var dst = new ArrayBuffer(dstSize);\n new Uint8Array(dst).set(new Uint8Array(this.buffer));\n this.buffer = dst;\n this.view = new DataView(this.buffer);\n }\n }\n }, {\n key: \"concat\",\n value: function concat(stream) {\n var available = this.buffer.byteLength - this.offset;\n\n if (stream.size > available) {\n var newbuf = new ArrayBuffer(this.offset + stream.size);\n var int8 = new Uint8Array(newbuf);\n int8.set(new Uint8Array(this.getBuffer(0, this.offset)));\n int8.set(new Uint8Array(stream.getBuffer(0, stream.size)), this.offset);\n this.buffer = newbuf;\n this.view = new DataView(this.buffer);\n } else {\n var _int = new Uint8Array(this.buffer);\n\n _int.set(new Uint8Array(stream.getBuffer(0, stream.size)), this.offset);\n }\n\n this.offset += stream.size;\n this.size = this.offset;\n return this.buffer.byteLength;\n }\n }, {\n key: \"increment\",\n value: function increment(step) {\n this.offset += step;\n\n if (this.offset > this.size) {\n this.size = this.offset;\n }\n\n return step;\n }\n }, {\n key: \"getBuffer\",\n value: function getBuffer(start, end) {\n if (!start && !end) {\n start = 0;\n end = this.size;\n }\n\n return this.buffer.slice(start, end);\n }\n }, {\n key: \"more\",\n value: function more(length) {\n if (this.offset + length > this.endOffset) {\n throw new Error(\"Request more than currently allocated buffer\");\n }\n\n var newBuf = new ReadBufferStream(this.buffer, null, {\n start: this.offset,\n stop: this.offset + length\n });\n this.increment(length);\n return newBuf;\n }\n }, {\n key: \"reset\",\n value: function reset() {\n this.offset = 0;\n return this;\n }\n }, {\n key: \"end\",\n value: function end() {\n return this.offset >= this.buffer.byteLength;\n }\n }, {\n key: \"toEnd\",\n value: function toEnd() {\n this.offset = this.buffer.byteLength;\n }\n }]);\n\n return BufferStream;\n}();\n\nvar ReadBufferStream = /*#__PURE__*/function (_BufferStream) {\n _inherits(ReadBufferStream, _BufferStream);\n\n var _super = _createSuper(ReadBufferStream);\n\n function ReadBufferStream(buffer, littleEndian) {\n var _this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {\n start: null,\n stop: null,\n noCopy: false\n };\n\n _classCallCheck(this, ReadBufferStream);\n\n _this = _super.call(this, buffer, littleEndian);\n _this.offset = options.start || 0;\n _this.size = options.stop || _this.buffer.byteLength;\n _this.noCopy = options.noCopy;\n _this.startOffset = _this.offset;\n _this.endOffset = _this.size;\n _this.decoder = new TextDecoder(\"latin1\");\n return _this;\n }\n\n _createClass(ReadBufferStream, [{\n key: \"setDecoder\",\n value: function setDecoder(decoder) {\n this.decoder = decoder;\n }\n }, {\n key: \"getBuffer\",\n value: function getBuffer(start, end) {\n if (this.noCopy) {\n return new Uint8Array(this.buffer, start, end - start);\n }\n\n if (!start && !end) {\n start = 0;\n end = this.size;\n }\n\n return this.buffer.slice(start, end);\n }\n }, {\n key: \"reset\",\n value: function reset() {\n this.offset = this.startOffset;\n return this;\n }\n }, {\n key: \"end\",\n value: function end() {\n return this.offset >= this.endOffset;\n }\n }, {\n key: \"toEnd\",\n value: function toEnd() {\n this.offset = this.endOffset;\n }\n }, {\n key: \"writeUint8\",\n value: function writeUint8(value) {\n throw new Error(value, \"writeUint8 not implemented\");\n }\n }, {\n key: \"writeUint8Repeat\",\n value: function writeUint8Repeat(value, count) {\n throw new Error(value, \"writeUint8Repeat not implemented\");\n }\n }, {\n key: \"writeInt8\",\n value: function writeInt8(value) {\n throw new Error(value, \"writeInt8 not implemented\");\n }\n }, {\n key: \"writeUint16\",\n value: function writeUint16(value) {\n throw new Error(value, \"writeUint16 not implemented\");\n }\n }, {\n key: \"writeTwoUint16s\",\n value: function writeTwoUint16s(value) {\n throw new Error(value, \"writeTwoUint16s not implemented\");\n }\n }, {\n key: \"writeInt16\",\n value: function writeInt16(value) {\n throw new Error(value, \"writeInt16 not implemented\");\n }\n }, {\n key: \"writeUint32\",\n value: function writeUint32(value) {\n throw new Error(value, \"writeUint32 not implemented\");\n }\n }, {\n key: \"writeInt32\",\n value: function writeInt32(value) {\n throw new Error(value, \"writeInt32 not implemented\");\n }\n }, {\n key: \"writeFloat\",\n value: function writeFloat(value) {\n throw new Error(value, \"writeFloat not implemented\");\n }\n }, {\n key: \"writeDouble\",\n value: function writeDouble(value) {\n throw new Error(value, \"writeDouble not implemented\");\n }\n }, {\n key: \"writeAsciiString\",\n value: function writeAsciiString(value) {\n throw new Error(value, \"writeAsciiString not implemented\");\n }\n }, {\n key: \"writeUTF8String\",\n value: function writeUTF8String(value) {\n throw new Error(value, \"writeUTF8String not implemented\");\n }\n }, {\n key: \"checkSize\",\n value: function checkSize(step) {\n throw new Error(step, \"checkSize not implemented\");\n }\n }, {\n key: \"concat\",\n value: function concat(stream) {\n throw new Error(stream, \"concat not implemented\");\n }\n }]);\n\n return ReadBufferStream;\n}(BufferStream);\n\nvar DeflatedReadBufferStream = /*#__PURE__*/function (_ReadBufferStream) {\n _inherits(DeflatedReadBufferStream, _ReadBufferStream);\n\n var _super2 = _createSuper(DeflatedReadBufferStream);\n\n function DeflatedReadBufferStream(stream, options) {\n _classCallCheck(this, DeflatedReadBufferStream);\n\n var inflatedBuffer = pako.inflateRaw(stream.getBuffer(stream.offset, stream.size));\n return _super2.call(this, inflatedBuffer.buffer, stream.littleEndian, options);\n }\n\n return _createClass(DeflatedReadBufferStream);\n}(ReadBufferStream);\n\nvar WriteBufferStream = /*#__PURE__*/function (_BufferStream2) {\n _inherits(WriteBufferStream, _BufferStream2);\n\n var _super3 = _createSuper(WriteBufferStream);\n\n function WriteBufferStream(buffer, littleEndian) {\n var _this2;\n\n _classCallCheck(this, WriteBufferStream);\n\n _this2 = _super3.call(this, buffer, littleEndian);\n _this2.size = 0;\n return _this2;\n }\n\n return _createClass(WriteBufferStream);\n}(BufferStream);\n\nfunction rtrim(str) {\n return str.replace(/\\s*$/g, \"\");\n}\n\nfunction toWindows(inputArray, size) {\n return Array.from({\n length: inputArray.length - (size - 1)\n }, //get the appropriate length\n function (_, index) {\n return inputArray.slice(index, index + size);\n } //create the windows\n );\n}\n\nvar binaryVRs = [\"FL\", \"FD\", \"SL\", \"SS\", \"UL\", \"US\", \"AT\"],\n explicitVRs = [\"OB\", \"OW\", \"OF\", \"SQ\", \"UC\", \"UR\", \"UT\", \"UN\"],\n singleVRs = [\"SQ\", \"OF\", \"OW\", \"OB\", \"UN\"];\n\nvar ValueRepresentation = /*#__PURE__*/function () {\n function ValueRepresentation(type) {\n _classCallCheck(this, ValueRepresentation);\n\n this.type = type;\n this.multi = false;\n this._isBinary = binaryVRs.indexOf(this.type) != -1;\n this._allowMultiple = !this._isBinary && singleVRs.indexOf(this.type) == -1;\n this._isExplicit = explicitVRs.indexOf(this.type) != -1;\n }\n\n _createClass(ValueRepresentation, [{\n key: \"isBinary\",\n value: function isBinary() {\n return this._isBinary;\n }\n }, {\n key: \"allowMultiple\",\n value: function allowMultiple() {\n return this._allowMultiple;\n }\n }, {\n key: \"isExplicit\",\n value: function isExplicit() {\n return this._isExplicit;\n }\n }, {\n key: \"read\",\n value: function read(stream, length, syntax) {\n if (this.fixed && this.maxLength) {\n if (!length) return this.defaultValue;\n if (this.maxLength != length) log.error(\"Invalid length for fixed length tag, vr \" + this.type + \", length \" + this.maxLength + \" != \" + length);\n }\n\n return this.readBytes(stream, length, syntax);\n }\n }, {\n key: \"readBytes\",\n value: function readBytes(stream, length) {\n return stream.readAsciiString(length);\n }\n }, {\n key: \"readNullPaddedString\",\n value: function readNullPaddedString(stream, length) {\n if (!length) return \"\";\n\n if (stream.peekUint8(length - 1) !== 0) {\n return stream.readAsciiString(length);\n } else {\n var val = stream.readAsciiString(length - 1);\n stream.increment(1);\n return val;\n }\n }\n }, {\n key: \"write\",\n value: function write(stream, type) {\n var args = Array.from(arguments);\n\n if (args[2] === null || args[2] === \"\" || args[2] === undefined) {\n return [stream.writeAsciiString(\"\")];\n } else {\n var written = [],\n valueArgs = args.slice(2),\n func = stream[\"write\" + type];\n\n if (Array.isArray(valueArgs[0])) {\n if (valueArgs[0].length < 1) {\n written.push(0);\n } else {\n var self = this;\n valueArgs[0].forEach(function (v, k) {\n if (self.allowMultiple() && k > 0) {\n stream.writeUint8(0x5c);\n }\n\n var singularArgs = [v].concat(valueArgs.slice(1));\n var byteCount = func.apply(stream, singularArgs);\n written.push(byteCount);\n });\n }\n } else {\n written.push(func.apply(stream, valueArgs));\n }\n\n return written;\n }\n }\n }, {\n key: \"writeBytes\",\n value: function writeBytes(stream, value, lengths) {\n var writeOptions = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {\n allowInvalidVRLength: false\n };\n var allowInvalidVRLength = writeOptions.allowInvalidVRLength;\n var valid = true,\n valarr = Array.isArray(value) ? value : [value],\n total = 0;\n\n for (var i = 0; i < valarr.length; i++) {\n var checkValue = valarr[i],\n checklen = lengths[i],\n isString = false,\n displaylen = checklen;\n\n if (checkValue === null || allowInvalidVRLength) {\n valid = true;\n } else if (this.checkLength) {\n valid = this.checkLength(checkValue);\n } else if (this.maxCharLength) {\n var check = this.maxCharLength; //, checklen = checkValue.length;\n\n valid = checkValue.length <= check;\n displaylen = checkValue.length;\n isString = true;\n } else if (this.maxLength) {\n valid = checklen <= this.maxLength;\n }\n\n if (!valid) {\n var errmsg = \"Value exceeds max length, vr: \" + this.type + \", value: \" + checkValue + \", length: \" + displaylen;\n if (isString) log.log(errmsg);else throw new Error(errmsg);\n }\n\n total += checklen;\n }\n\n if (this.allowMultiple()) {\n total += valarr.length ? valarr.length - 1 : 0;\n } //check for odd\n\n\n var written = total;\n\n if (total & 1) {\n stream.writeUint8(this.padByte);\n written++;\n }\n\n return written;\n }\n }], [{\n key: \"createByTypeString\",\n value: function createByTypeString(type) {\n var vr = VRinstances[type];\n\n if (vr === undefined) {\n if (type == \"ox\") {\n // TODO: determine VR based on context (could be 1 byte pixel data)\n // https://github.com/dgobbi/vtk-dicom/issues/38\n log.error(\"Invalid vr type \" + type + \" - using OW\");\n vr = VRinstances[\"OW\"];\n } else if (type == \"xs\") {\n log.error(\"Invalid vr type \" + type + \" - using US\");\n vr = VRinstances[\"US\"];\n } else {\n log.error(\"Invalid vr type \" + type + \" - using UN\");\n vr = VRinstances[\"UN\"];\n }\n }\n\n return vr;\n }\n }]);\n\n return ValueRepresentation;\n}();\n\nvar AsciiStringRepresentation = /*#__PURE__*/function (_ValueRepresentation) {\n _inherits(AsciiStringRepresentation, _ValueRepresentation);\n\n var _super = _createSuper(AsciiStringRepresentation);\n\n function AsciiStringRepresentation(type) {\n _classCallCheck(this, AsciiStringRepresentation);\n\n return _super.call(this, type);\n }\n\n _createClass(AsciiStringRepresentation, [{\n key: \"readBytes\",\n value: function readBytes(stream, length) {\n return stream.readAsciiString(length);\n }\n }, {\n key: \"writeBytes\",\n value: function writeBytes(stream, value, writeOptions) {\n var written = _get(_getPrototypeOf(AsciiStringRepresentation.prototype), \"write\", this).call(this, stream, \"AsciiString\", value);\n\n return _get(_getPrototypeOf(AsciiStringRepresentation.prototype), \"writeBytes\", this).call(this, stream, value, written, writeOptions);\n }\n }]);\n\n return AsciiStringRepresentation;\n}(ValueRepresentation);\n\nvar EncodedStringRepresentation = /*#__PURE__*/function (_ValueRepresentation2) {\n _inherits(EncodedStringRepresentation, _ValueRepresentation2);\n\n var _super2 = _createSuper(EncodedStringRepresentation);\n\n function EncodedStringRepresentation(type) {\n _classCallCheck(this, EncodedStringRepresentation);\n\n return _super2.call(this, type);\n }\n\n _createClass(EncodedStringRepresentation, [{\n key: \"readBytes\",\n value: function readBytes(stream, length) {\n return stream.readEncodedString(length);\n }\n }, {\n key: \"writeBytes\",\n value: function writeBytes(stream, value, writeOptions) {\n var written = _get(_getPrototypeOf(EncodedStringRepresentation.prototype), \"write\", this).call(this, stream, \"UTF8String\", value);\n\n return _get(_getPrototypeOf(EncodedStringRepresentation.prototype), \"writeBytes\", this).call(this, stream, value, written, writeOptions);\n }\n }]);\n\n return EncodedStringRepresentation;\n}(ValueRepresentation);\n\nvar BinaryRepresentation = /*#__PURE__*/function (_ValueRepresentation3) {\n _inherits(BinaryRepresentation, _ValueRepresentation3);\n\n var _super3 = _createSuper(BinaryRepresentation);\n\n function BinaryRepresentation(type) {\n _classCallCheck(this, BinaryRepresentation);\n\n return _super3.call(this, type);\n }\n\n _createClass(BinaryRepresentation, [{\n key: \"writeBytes\",\n value: function writeBytes(stream, value, syntax, isEncapsulated) {\n var writeOptions = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n var i;\n var binaryStream;\n var _writeOptions$fragmen = writeOptions.fragmentMultiframe,\n fragmentMultiframe = _writeOptions$fragmen === void 0 ? true : _writeOptions$fragmen;\n value = value === null || value === undefined ? [] : value;\n\n if (isEncapsulated) {\n var fragmentSize = 1024 * 20,\n frames = value.length,\n startOffset = []; // Calculate a total length for storing binary stream\n\n var bufferLength = 0;\n\n for (i = 0; i < frames; i++) {\n var needsPadding = Boolean(value[i].byteLength & 1);\n bufferLength += value[i].byteLength + (needsPadding ? 1 : 0);\n var _fragmentsLength = 1;\n\n if (fragmentMultiframe) {\n _fragmentsLength = Math.ceil(value[i].byteLength / fragmentSize);\n } // 8 bytes per fragment are needed to store 0xffff (2 bytes), 0xe000 (2 bytes), and frageStream size (4 bytes)\n\n\n bufferLength += _fragmentsLength * 8;\n }\n\n binaryStream = new WriteBufferStream(bufferLength, stream.isLittleEndian);\n\n for (i = 0; i < frames; i++) {\n var _needsPadding = Boolean(value[i].byteLength & 1);\n\n startOffset.push(binaryStream.size);\n var frameBuffer = value[i],\n frameStream = new ReadBufferStream(frameBuffer);\n var fragmentsLength = 1;\n\n if (fragmentMultiframe) {\n fragmentsLength = Math.ceil(frameStream.size / fragmentSize);\n }\n\n for (var j = 0, fragmentStart = 0; j < fragmentsLength; j++) {\n var isFinalFragment = j === fragmentsLength - 1;\n var fragmentEnd = fragmentStart + frameStream.size;\n\n if (fragmentMultiframe) {\n fragmentEnd = fragmentStart + fragmentSize;\n }\n\n if (isFinalFragment) {\n fragmentEnd = frameStream.size;\n }\n\n var fragStream = new ReadBufferStream(frameStream.getBuffer(fragmentStart, fragmentEnd));\n fragmentStart = fragmentEnd;\n binaryStream.writeUint16(0xfffe);\n binaryStream.writeUint16(0xe000);\n var addPaddingByte = isFinalFragment && _needsPadding;\n binaryStream.writeUint32(fragStream.size + (addPaddingByte ? 1 : 0));\n binaryStream.concat(fragStream);\n\n if (addPaddingByte) {\n binaryStream.writeInt8(this.padByte);\n }\n }\n }\n\n stream.writeUint16(0xfffe);\n stream.writeUint16(0xe000);\n stream.writeUint32(startOffset.length * 4);\n\n for (i = 0; i < startOffset.length; i++) {\n stream.writeUint32(startOffset[i]);\n }\n\n stream.concat(binaryStream);\n stream.writeUint16(0xfffe);\n stream.writeUint16(0xe0dd);\n stream.writeUint32(0x0);\n return 0xffffffff;\n } else {\n var binaryData = value[0];\n binaryStream = new ReadBufferStream(binaryData);\n stream.concat(binaryStream);\n return _get(_getPrototypeOf(BinaryRepresentation.prototype), \"writeBytes\", this).call(this, stream, binaryData, [binaryStream.size], writeOptions);\n }\n }\n }, {\n key: \"readBytes\",\n value: function readBytes(stream, length) {\n if (length == 0xffffffff) {\n var itemTagValue = Tag.readTag(stream),\n frames = [];\n\n if (itemTagValue.is(0xfffee000)) {\n var itemLength = stream.readUint32(),\n numOfFrames = 1,\n offsets = [];\n\n if (itemLength > 0x0) {\n //has frames\n numOfFrames = itemLength / 4;\n var i = 0;\n\n while (i++ < numOfFrames) {\n offsets.push(stream.readUint32());\n }\n } else {\n offsets = [];\n }\n\n var SequenceItemTag = 0xfffee000;\n var SequenceDelimiterTag = 0xfffee0dd;\n\n var getNextSequenceItemData = function getNextSequenceItemData(stream) {\n var nextTag = Tag.readTag(stream);\n\n if (nextTag.is(SequenceItemTag)) {\n var _itemLength = stream.readUint32();\n\n var buffer = stream.getBuffer(stream.offset, stream.offset + _itemLength);\n stream.increment(_itemLength);\n return buffer;\n } else if (nextTag.is(SequenceDelimiterTag)) {\n // Read SequenceDelimiterItem value for the SequenceDelimiterTag\n if (stream.readUint32() !== 0) {\n throw Error(\"SequenceDelimiterItem tag value was not zero\");\n }\n\n return null;\n }\n\n throw Error(\"Invalid tag in sequence\");\n }; // If there is an offset table, use that to loop through pixel data sequence\n\n\n if (offsets.length > 0) {\n // make offsets relative to the stream, not tag\n offsets = offsets.map(function (e) {\n return e + stream.offset;\n });\n offsets.push(stream.size); // window offsets to an array of [start,stop] locations\n\n frames = toWindows(offsets, 2).map(function (range) {\n var fragments = [];\n\n var _range = _slicedToArray(range, 2),\n start = _range[0],\n stop = _range[1]; // create a new readable stream based on the range\n\n\n var rangeStream = new ReadBufferStream(stream.buffer, stream.isLittleEndian, {\n start: start,\n stop: stop,\n noCopy: stream.noCopy\n });\n var frameSize = 0;\n\n while (!rangeStream.end()) {\n var buf = getNextSequenceItemData(rangeStream);\n\n if (buf === null) {\n break;\n }\n\n fragments.push(buf);\n frameSize += buf.byteLength;\n } // Ensure the parent stream's offset is kept up to date\n\n\n stream.offset = rangeStream.offset; // If there's only one buffer thne just return it directly\n\n if (fragments.length === 1) {\n return fragments[0];\n }\n\n if (rangeStream.noCopy) {\n // return the fragments for downstream application to process\n return fragments;\n } else {\n // Allocate a final ArrayBuffer and concat all buffers into it\n var mergedFrame = new ArrayBuffer(frameSize);\n var u8Data = new Uint8Array(mergedFrame);\n fragments.reduce(function (offset, buffer) {\n u8Data.set(new Uint8Array(buffer), offset);\n return offset + buffer.byteLength;\n }, 0);\n return mergedFrame;\n }\n });\n } // If no offset table, loop through remainder of stream looking for termination tag\n else {\n while (!stream.end()) {\n var buffer = getNextSequenceItemData(stream);\n\n if (buffer === null) {\n break;\n }\n\n frames.push(buffer);\n }\n }\n } else {\n throw new Error(\"Item tag not found after undefined binary length\");\n }\n\n return frames;\n } else {\n var bytes;\n /*if (this.type == 'OW') {\n bytes = stream.readUint16Array(length);\n } else if (this.type == 'OB') {\n bytes = stream.readUint8Array(length);\n }*/\n\n bytes = stream.getBuffer(stream.offset, stream.offset + length);\n stream.increment(length);\n return [bytes];\n }\n }\n }]);\n\n return BinaryRepresentation;\n}(ValueRepresentation);\n\nvar ApplicationEntity = /*#__PURE__*/function (_AsciiStringRepresent) {\n _inherits(ApplicationEntity, _AsciiStringRepresent);\n\n var _super4 = _createSuper(ApplicationEntity);\n\n function ApplicationEntity() {\n var _this;\n\n _classCallCheck(this, ApplicationEntity);\n\n _this = _super4.call(this, \"AE\");\n _this.maxLength = 16;\n _this.padByte = 0x20;\n return _this;\n }\n\n _createClass(ApplicationEntity, [{\n key: \"readBytes\",\n value: function readBytes(stream, length) {\n return stream.readAsciiString(length).trim();\n }\n }]);\n\n return ApplicationEntity;\n}(AsciiStringRepresentation);\n\nvar CodeString = /*#__PURE__*/function (_AsciiStringRepresent2) {\n _inherits(CodeString, _AsciiStringRepresent2);\n\n var _super5 = _createSuper(CodeString);\n\n function CodeString() {\n var _this2;\n\n _classCallCheck(this, CodeString);\n\n _this2 = _super5.call(this, \"CS\");\n _this2.maxLength = 16;\n _this2.padByte = 0x20;\n return _this2;\n }\n\n _createClass(CodeString, [{\n key: \"readBytes\",\n value: function readBytes(stream, length) {\n return stream.readAsciiString(length).trim();\n }\n }]);\n\n return CodeString;\n}(AsciiStringRepresentation);\n\nvar AgeString = /*#__PURE__*/function (_AsciiStringRepresent3) {\n _inherits(AgeString, _AsciiStringRepresent3);\n\n var _super6 = _createSuper(AgeString);\n\n function AgeString() {\n var _this3;\n\n _classCallCheck(this, AgeString);\n\n _this3 = _super6.call(this, \"AS\");\n _this3.maxLength = 4;\n _this3.padByte = 0x20;\n _this3.fixed = true;\n _this3.defaultValue = \"\";\n return _this3;\n }\n\n return _createClass(AgeString);\n}(AsciiStringRepresentation);\n\nvar AttributeTag = /*#__PURE__*/function (_ValueRepresentation4) {\n _inherits(AttributeTag, _ValueRepresentation4);\n\n var _super7 = _createSuper(AttributeTag);\n\n function AttributeTag() {\n var _this4;\n\n _classCallCheck(this, AttributeTag);\n\n _this4 = _super7.call(this, \"AT\");\n _this4.maxLength = 4;\n _this4.valueLength = 4;\n _this4.padByte = 0;\n _this4.fixed = true;\n return _this4;\n }\n\n _createClass(AttributeTag, [{\n key: \"readBytes\",\n value: function readBytes(stream) {\n return Tag.readTag(stream).value;\n }\n }, {\n key: \"writeBytes\",\n value: function writeBytes(stream, value, writeOptions) {\n return _get(_getPrototypeOf(AttributeTag.prototype), \"writeBytes\", this).call(this, stream, value, _get(_getPrototypeOf(AttributeTag.prototype), \"write\", this).call(this, stream, \"TwoUint16s\", value), writeOptions);\n }\n }]);\n\n return AttributeTag;\n}(ValueRepresentation);\n\nvar DateValue = /*#__PURE__*/function (_AsciiStringRepresent4) {\n _inherits(DateValue, _AsciiStringRepresent4);\n\n var _super8 = _createSuper(DateValue);\n\n function DateValue(value) {\n var _this5;\n\n _classCallCheck(this, DateValue);\n\n _this5 = _super8.call(this, \"DA\", value);\n _this5.maxLength = 18;\n _this5.padByte = 0x20; //this.fixed = true;\n\n _this5.defaultValue = \"\";\n return _this5;\n }\n\n return _createClass(DateValue);\n}(AsciiStringRepresentation);\n\nvar DecimalString = /*#__PURE__*/function (_AsciiStringRepresent5) {\n _inherits(DecimalString, _AsciiStringRepresent5);\n\n var _super9 = _createSuper(DecimalString);\n\n function DecimalString() {\n var _this6;\n\n _classCallCheck(this, DecimalString);\n\n _this6 = _super9.call(this, \"DS\");\n _this6.maxLength = 16;\n _this6.padByte = 0x20;\n return _this6;\n }\n\n _createClass(DecimalString, [{\n key: \"readBytes\",\n value: function readBytes(stream, length) {\n var BACKSLASH = String.fromCharCode(0x5c);\n var ds = stream.readAsciiString(length);\n ds = ds.replace(/[^0-9.\\\\\\-+e]/gi, \"\");\n\n if (ds.indexOf(BACKSLASH) !== -1) {\n // handle decimal string with multiplicity\n var dsArray = ds.split(BACKSLASH);\n ds = dsArray.map(function (ds) {\n return ds === \"\" ? null : Number(ds);\n });\n } else {\n ds = [ds === \"\" ? null : Number(ds)];\n }\n\n return ds;\n }\n }, {\n key: \"formatValue\",\n value: function formatValue(value) {\n if (value === null) {\n return \"\";\n }\n\n var str = String(value);\n\n if (str.length > this.maxLength) {\n return value.toExponential();\n }\n\n return str;\n }\n }, {\n key: \"writeBytes\",\n value: function writeBytes(stream, value, writeOptions) {\n var _this7 = this;\n\n var val = Array.isArray(value) ? value.map(function (ds) {\n return _this7.formatValue(ds);\n }) : [this.formatValue(value)];\n return _get(_getPrototypeOf(DecimalString.prototype), \"writeBytes\", this).call(this, stream, val, writeOptions);\n }\n }]);\n\n return DecimalString;\n}(AsciiStringRepresentation);\n\nvar DateTime = /*#__PURE__*/function (_AsciiStringRepresent6) {\n _inherits(DateTime, _AsciiStringRepresent6);\n\n var _super10 = _createSuper(DateTime);\n\n function DateTime() {\n var _this8;\n\n _classCallCheck(this, DateTime);\n\n _this8 = _super10.call(this, \"DT\");\n _this8.maxLength = 26;\n _this8.padByte = 0x20;\n return _this8;\n }\n\n return _createClass(DateTime);\n}(AsciiStringRepresentation);\n\nvar FloatingPointSingle = /*#__PURE__*/function (_ValueRepresentation5) {\n _inherits(FloatingPointSingle, _ValueRepresentation5);\n\n var _super11 = _createSuper(FloatingPointSingle);\n\n function FloatingPointSingle() {\n var _this9;\n\n _classCallCheck(this, FloatingPointSingle);\n\n _this9 = _super11.call(this, \"FL\");\n _this9.maxLength = 4;\n _this9.padByte = 0;\n _this9.fixed = true;\n _this9.defaultValue = 0.0;\n return _this9;\n }\n\n _createClass(FloatingPointSingle, [{\n key: \"readBytes\",\n value: function readBytes(stream) {\n return Number(stream.readFloat());\n }\n }, {\n key: \"writeBytes\",\n value: function writeBytes(stream, value, writeOptions) {\n return _get(_getPrototypeOf(FloatingPointSingle.prototype), \"writeBytes\", this).call(this, stream, value, _get(_getPrototypeOf(FloatingPointSingle.prototype), \"write\", this).call(this, stream, \"Float\", value), writeOptions);\n }\n }]);\n\n return FloatingPointSingle;\n}(ValueRepresentation);\n\nvar FloatingPointDouble = /*#__PURE__*/function (_ValueRepresentation6) {\n _inherits(FloatingPointDouble, _ValueRepresentation6);\n\n var _super12 = _createSuper(FloatingPointDouble);\n\n function FloatingPointDouble() {\n var _this10;\n\n _classCallCheck(this, FloatingPointDouble);\n\n _this10 = _super12.call(this, \"FD\");\n _this10.maxLength = 8;\n _this10.padByte = 0;\n _this10.fixed = true;\n _this10.defaultValue = 0.0;\n return _this10;\n }\n\n _createClass(FloatingPointDouble, [{\n key: \"readBytes\",\n value: function readBytes(stream) {\n return Number(stream.readDouble());\n }\n }, {\n key: \"writeBytes\",\n value: function writeBytes(stream, value, writeOptions) {\n return _get(_getPrototypeOf(FloatingPointDouble.prototype), \"writeBytes\", this).call(this, stream, value, _get(_getPrototypeOf(FloatingPointDouble.prototype), \"write\", this).call(this, stream, \"Double\", value), writeOptions);\n }\n }]);\n\n return FloatingPointDouble;\n}(ValueRepresentation);\n\nvar IntegerString = /*#__PURE__*/function (_AsciiStringRepresent7) {\n _inherits(IntegerString, _AsciiStringRepresent7);\n\n var _super13 = _createSuper(IntegerString);\n\n function IntegerString() {\n var _this11;\n\n _classCallCheck(this, IntegerString);\n\n _this11 = _super13.call(this, \"IS\");\n _this11.maxLength = 12;\n _this11.padByte = 0x20;\n return _this11;\n }\n\n _createClass(IntegerString, [{\n key: \"readBytes\",\n value: function readBytes(stream, length) {\n var BACKSLASH = String.fromCharCode(0x5c);\n var is = stream.readAsciiString(length).trim();\n is = is.replace(/[^0-9.\\\\\\-+e]/gi, \"\");\n\n if (is.indexOf(BACKSLASH) !== -1) {\n // handle integer string with multiplicity\n var integerStringArray = is.split(BACKSLASH);\n is = integerStringArray.map(function (is) {\n return is === \"\" ? null : Number(is);\n });\n } else {\n is = [is === \"\" ? null : Number(is)];\n }\n\n return is;\n }\n }, {\n key: \"formatValue\",\n value: function formatValue(value) {\n return value === null ? \"\" : String(value);\n }\n }, {\n key: \"writeBytes\",\n value: function writeBytes(stream, value, writeOptions) {\n var _this12 = this;\n\n var val = Array.isArray(value) ? value.map(function (is) {\n return _this12.formatValue(is);\n }) : [this.formatValue(value)];\n return _get(_getPrototypeOf(IntegerString.prototype), \"writeBytes\", this).call(this, stream, val, writeOptions);\n }\n }]);\n\n return IntegerString;\n}(AsciiStringRepresentation);\n\nvar LongString = /*#__PURE__*/function (_EncodedStringReprese) {\n _inherits(LongString, _EncodedStringReprese);\n\n var _super14 = _createSuper(LongString);\n\n function LongString() {\n var _this13;\n\n _classCallCheck(this, LongString);\n\n _this13 = _super14.call(this, \"LO\");\n _this13.maxCharLength = 64;\n _this13.padByte = 0x20;\n return _this13;\n }\n\n _createClass(LongString, [{\n key: \"readBytes\",\n value: function readBytes(stream, length) {\n return stream.readEncodedString(length).trim();\n }\n }]);\n\n return LongString;\n}(EncodedStringRepresentation);\n\nvar LongText = /*#__PURE__*/function (_EncodedStringReprese2) {\n _inherits(LongText, _EncodedStringReprese2);\n\n var _super15 = _createSuper(LongText);\n\n function LongText() {\n var _this14;\n\n _classCallCheck(this, LongText);\n\n _this14 = _super15.call(this, \"LT\");\n _this14.maxCharLength = 10240;\n _this14.padByte = 0x20;\n return _this14;\n }\n\n _createClass(LongText, [{\n key: \"readBytes\",\n value: function readBytes(stream, length) {\n return rtrim(stream.readEncodedString(length));\n }\n }]);\n\n return LongText;\n}(EncodedStringRepresentation);\n\nvar PersonName = /*#__PURE__*/function (_EncodedStringReprese3) {\n _inherits(PersonName, _EncodedStringReprese3);\n\n var _super16 = _createSuper(PersonName);\n\n function PersonName() {\n var _this15;\n\n _classCallCheck(this, PersonName);\n\n _this15 = _super16.call(this, \"PN\");\n _this15.maxLength = null;\n _this15.padByte = 0x20;\n return _this15;\n }\n\n _createClass(PersonName, [{\n key: \"checkLength\",\n value: function checkLength(value) {\n var components = [];\n\n if (_typeof(value) === \"object\" && value !== null) {\n // In DICOM JSON, components are encoded as a mapping (object),\n // where the keys are one or more of the following: \"Alphabetic\",\n // \"Ideographic\", \"Phonetic\".\n // http://dicom.nema.org/medical/dicom/current/output/chtml/part18/sect_F.2.2.html\n components = Object.keys(value).forEach(function (key) {\n return value[key];\n });\n } else if (typeof value === \"string\" || value instanceof String) {\n // In DICOM Part10, components are encoded as a string,\n // where components (\"Alphabetic\", \"Ideographic\", \"Phonetic\")\n // are separated by the \"=\" delimeter.\n // http://dicom.nema.org/medical/dicom/current/output/chtml/part05/sect_6.2.html\n components = value.split(/\\=/);\n }\n\n for (var i in components) {\n var cmp = components[i];\n if (cmp.length > 64) return false;\n }\n\n return true;\n }\n }, {\n key: \"readBytes\",\n value: function readBytes(stream, length) {\n return rtrim(stream.readEncodedString(length));\n }\n }]);\n\n return PersonName;\n}(EncodedStringRepresentation);\n\nvar ShortString = /*#__PURE__*/function (_EncodedStringReprese4) {\n _inherits(ShortString, _EncodedStringReprese4);\n\n var _super17 = _createSuper(ShortString);\n\n function ShortString() {\n var _this16;\n\n _classCallCheck(this, ShortString);\n\n _this16 = _super17.call(this, \"SH\");\n _this16.maxCharLength = 16;\n _this16.padByte = 0x20;\n return _this16;\n }\n\n _createClass(ShortString, [{\n key: \"readBytes\",\n value: function readBytes(stream, length) {\n return stream.readEncodedString(length).trim();\n }\n }]);\n\n return ShortString;\n}(EncodedStringRepresentation);\n\nvar SignedLong = /*#__PURE__*/function (_ValueRepresentation7) {\n _inherits(SignedLong, _ValueRepresentation7);\n\n var _super18 = _createSuper(SignedLong);\n\n function SignedLong() {\n var _this17;\n\n _classCallCheck(this, SignedLong);\n\n _this17 = _super18.call(this, \"SL\");\n _this17.maxLength = 4;\n _this17.padByte = 0;\n _this17.fixed = true;\n _this17.defaultValue = 0;\n return _this17;\n }\n\n _createClass(SignedLong, [{\n key: \"readBytes\",\n value: function readBytes(stream) {\n return stream.readInt32();\n }\n }, {\n key: \"writeBytes\",\n value: function writeBytes(stream, value, writeOptions) {\n return _get(_getPrototypeOf(SignedLong.prototype), \"writeBytes\", this).call(this, stream, value, _get(_getPrototypeOf(SignedLong.prototype), \"write\", this).call(this, stream, \"Int32\", value), writeOptions);\n }\n }]);\n\n return SignedLong;\n}(ValueRepresentation);\n\nvar SequenceOfItems = /*#__PURE__*/function (_ValueRepresentation8) {\n _inherits(SequenceOfItems, _ValueRepresentation8);\n\n var _super19 = _createSuper(SequenceOfItems);\n\n function SequenceOfItems() {\n var _this18;\n\n _classCallCheck(this, SequenceOfItems);\n\n _this18 = _super19.call(this, \"SQ\");\n _this18.maxLength = null;\n _this18.padByte = 0;\n _this18.noMultiple = true;\n return _this18;\n }\n\n _createClass(SequenceOfItems, [{\n key: \"readBytes\",\n value: function readBytes(stream, sqlength, syntax) {\n if (sqlength == 0x0) {\n return []; //contains no dataset\n } else {\n var undefLength = sqlength == 0xffffffff,\n elements = [],\n read = 0;\n /* eslint-disable-next-line no-constant-condition */\n\n while (true) {\n var tag = Tag.readTag(stream),\n length = null;\n read += 4;\n\n if (tag.is(0xfffee0dd)) {\n stream.readUint32();\n break;\n } else if (!undefLength && read == sqlength) {\n break;\n } else if (tag.is(0xfffee000)) {\n length = stream.readUint32();\n read += 4;\n var itemStream = null,\n toRead = 0,\n undef = length == 0xffffffff;\n\n if (undef) {\n var stack = 0;\n /* eslint-disable-next-line no-constant-condition */\n\n while (1) {\n var g = stream.readUint16();\n\n if (g == 0xfffe) {\n // some control tag is about to be read\n var ge = stream.readUint16();\n\n if (ge == 0xe00d) {\n // item delimitation tag has been read\n stack--;\n\n if (stack < 0) {\n // if we are outside every stack, then we are finished reading the sequence of items\n stream.increment(4);\n read += 8;\n break;\n } else {\n // otherwise, we were in a nested sequence of items\n toRead += 4;\n }\n } else if (ge == 0xe000) {\n // a new item has been found\n stack++;\n toRead += 4;\n var itemLength = stream.readUint32();\n stream.increment(-4);\n\n if (itemLength === 0) {\n // in some odd cases, DICOMs rely on the length being zero to denote that the item has closed\n stack--;\n }\n } else {\n // some control tag that does not concern sequence of items has been read\n toRead += 2;\n stream.increment(-2);\n }\n } else {\n // anything else has been read\n toRead += 2;\n }\n }\n } else {\n toRead = length;\n }\n\n if (toRead) {\n stream.increment(undef ? -toRead - 8 : 0);\n itemStream = stream.more(toRead); //parseElements\n\n read += toRead;\n if (undef) stream.increment(8);\n\n var items = DicomMessage._read(itemStream, syntax);\n\n elements.push(items);\n }\n\n if (!undefLength && read == sqlength) {\n break;\n }\n }\n }\n\n return elements;\n }\n }\n }, {\n key: \"writeBytes\",\n value: function writeBytes(stream, value, syntax, writeOptions) {\n var written = 0;\n\n if (value) {\n for (var i = 0; i < value.length; i++) {\n var item = value[i];\n\n _get(_getPrototypeOf(SequenceOfItems.prototype), \"write\", this).call(this, stream, \"Uint16\", 0xfffe);\n\n _get(_getPrototypeOf(SequenceOfItems.prototype), \"write\", this).call(this, stream, \"Uint16\", 0xe000);\n\n _get(_getPrototypeOf(SequenceOfItems.prototype), \"write\", this).call(this, stream, \"Uint32\", 0xffffffff);\n\n written += DicomMessage.write(item, stream, syntax, writeOptions);\n\n _get(_getPrototypeOf(SequenceOfItems.prototype), \"write\", this).call(this, stream, \"Uint16\", 0xfffe);\n\n _get(_getPrototypeOf(SequenceOfItems.prototype), \"write\", this).call(this, stream, \"Uint16\", 0xe00d);\n\n _get(_getPrototypeOf(SequenceOfItems.prototype), \"write\", this).call(this, stream, \"Uint32\", 0x00000000);\n\n written += 16;\n }\n }\n\n _get(_getPrototypeOf(SequenceOfItems.prototype), \"write\", this).call(this, stream, \"Uint16\", 0xfffe);\n\n _get(_getPrototypeOf(SequenceOfItems.prototype), \"write\", this).call(this, stream, \"Uint16\", 0xe0dd);\n\n _get(_getPrototypeOf(SequenceOfItems.prototype), \"write\", this).call(this, stream, \"Uint32\", 0x00000000);\n\n written += 8;\n return _get(_getPrototypeOf(SequenceOfItems.prototype), \"writeBytes\", this).call(this, stream, value, [written], writeOptions);\n }\n }]);\n\n return SequenceOfItems;\n}(ValueRepresentation);\n\nvar SignedShort = /*#__PURE__*/function (_ValueRepresentation9) {\n _inherits(SignedShort, _ValueRepresentation9);\n\n var _super20 = _createSuper(SignedShort);\n\n function SignedShort() {\n var _this19;\n\n _classCallCheck(this, SignedShort);\n\n _this19 = _super20.call(this, \"SS\");\n _this19.maxLength = 2;\n _this19.valueLength = 2;\n _this19.padByte = 0;\n _this19.fixed = true;\n _this19.defaultValue = 0;\n return _this19;\n }\n\n _createClass(SignedShort, [{\n key: \"readBytes\",\n value: function readBytes(stream) {\n return stream.readInt16();\n }\n }, {\n key: \"writeBytes\",\n value: function writeBytes(stream, value, writeOptions) {\n return _get(_getPrototypeOf(SignedShort.prototype), \"writeBytes\", this).call(this, stream, value, _get(_getPrototypeOf(SignedShort.prototype), \"write\", this).call(this, stream, \"Int16\", value), writeOptions);\n }\n }]);\n\n return SignedShort;\n}(ValueRepresentation);\n\nvar ShortText = /*#__PURE__*/function (_EncodedStringReprese5) {\n _inherits(ShortText, _EncodedStringReprese5);\n\n var _super21 = _createSuper(ShortText);\n\n function ShortText() {\n var _this20;\n\n _classCallCheck(this, ShortText);\n\n _this20 = _super21.call(this, \"ST\");\n _this20.maxCharLength = 1024;\n _this20.padByte = 0x20;\n return _this20;\n }\n\n _createClass(ShortText, [{\n key: \"readBytes\",\n value: function readBytes(stream, length) {\n return rtrim(stream.readEncodedString(length));\n }\n }]);\n\n return ShortText;\n}(EncodedStringRepresentation);\n\nvar TimeValue = /*#__PURE__*/function (_AsciiStringRepresent8) {\n _inherits(TimeValue, _AsciiStringRepresent8);\n\n var _super22 = _createSuper(TimeValue);\n\n function TimeValue() {\n var _this21;\n\n _classCallCheck(this, TimeValue);\n\n _this21 = _super22.call(this, \"TM\");\n _this21.maxLength = 14;\n _this21.padByte = 0x20;\n return _this21;\n }\n\n _createClass(TimeValue, [{\n key: \"readBytes\",\n value: function readBytes(stream, length) {\n return rtrim(stream.readAsciiString(length));\n }\n }]);\n\n return TimeValue;\n}(AsciiStringRepresentation);\n\nvar UnlimitedCharacters = /*#__PURE__*/function (_EncodedStringReprese6) {\n _inherits(UnlimitedCharacters, _EncodedStringReprese6);\n\n var _super23 = _createSuper(UnlimitedCharacters);\n\n function UnlimitedCharacters() {\n var _this22;\n\n _classCallCheck(this, UnlimitedCharacters);\n\n _this22 = _super23.call(this, \"UC\");\n _this22.maxLength = null;\n _this22.multi = true;\n _this22.padByte = 0x20;\n return _this22;\n }\n\n _createClass(UnlimitedCharacters, [{\n key: \"readBytes\",\n value: function readBytes(stream, length) {\n return rtrim(stream.readEncodedString(length));\n }\n }]);\n\n return UnlimitedCharacters;\n}(EncodedStringRepresentation);\n\nvar UnlimitedText = /*#__PURE__*/function (_EncodedStringReprese7) {\n _inherits(UnlimitedText, _EncodedStringReprese7);\n\n var _super24 = _createSuper(UnlimitedText);\n\n function UnlimitedText() {\n var _this23;\n\n _classCallCheck(this, UnlimitedText);\n\n _this23 = _super24.call(this, \"UT\");\n _this23.maxLength = null;\n _this23.padByte = 0x20;\n return _this23;\n }\n\n _createClass(UnlimitedText, [{\n key: \"readBytes\",\n value: function readBytes(stream, length) {\n return rtrim(stream.readEncodedString(length));\n }\n }]);\n\n return UnlimitedText;\n}(EncodedStringRepresentation);\n\nvar UnsignedShort = /*#__PURE__*/function (_ValueRepresentation10) {\n _inherits(UnsignedShort, _ValueRepresentation10);\n\n var _super25 = _createSuper(UnsignedShort);\n\n function UnsignedShort() {\n var _this24;\n\n _classCallCheck(this, UnsignedShort);\n\n _this24 = _super25.call(this, \"US\");\n _this24.maxLength = 2;\n _this24.padByte = 0;\n _this24.fixed = true;\n _this24.defaultValue = 0;\n return _this24;\n }\n\n _createClass(UnsignedShort, [{\n key: \"readBytes\",\n value: function readBytes(stream) {\n return stream.readUint16();\n }\n }, {\n key: \"writeBytes\",\n value: function writeBytes(stream, value, writeOptions) {\n return _get(_getPrototypeOf(UnsignedShort.prototype), \"writeBytes\", this).call(this, stream, value, _get(_getPrototypeOf(UnsignedShort.prototype), \"write\", this).call(this, stream, \"Uint16\", value), writeOptions);\n }\n }]);\n\n return UnsignedShort;\n}(ValueRepresentation);\n\nvar UnsignedLong = /*#__PURE__*/function (_ValueRepresentation11) {\n _inherits(UnsignedLong, _ValueRepresentation11);\n\n var _super26 = _createSuper(UnsignedLong);\n\n function UnsignedLong() {\n var _this25;\n\n _classCallCheck(this, UnsignedLong);\n\n _this25 = _super26.call(this, \"UL\");\n _this25.maxLength = 4;\n _this25.padByte = 0;\n _this25.fixed = true;\n _this25.defaultValue = 0;\n return _this25;\n }\n\n _createClass(UnsignedLong, [{\n key: \"readBytes\",\n value: function readBytes(stream) {\n return stream.readUint32();\n }\n }, {\n key: \"writeBytes\",\n value: function writeBytes(stream, value, writeOptions) {\n return _get(_getPrototypeOf(UnsignedLong.prototype), \"writeBytes\", this).call(this, stream, value, _get(_getPrototypeOf(UnsignedLong.prototype), \"write\", this).call(this, stream, \"Uint32\", value), writeOptions);\n }\n }]);\n\n return UnsignedLong;\n}(ValueRepresentation);\n\nvar UniqueIdentifier = /*#__PURE__*/function (_AsciiStringRepresent9) {\n _inherits(UniqueIdentifier, _AsciiStringRepresent9);\n\n var _super27 = _createSuper(UniqueIdentifier);\n\n function UniqueIdentifier() {\n var _this26;\n\n _classCallCheck(this, UniqueIdentifier);\n\n _this26 = _super27.call(this, \"UI\");\n _this26.maxLength = 64;\n _this26.padByte = 0;\n return _this26;\n }\n\n _createClass(UniqueIdentifier, [{\n key: \"readBytes\",\n value: function readBytes(stream, length) {\n var result = this.readNullPaddedString(stream, length);\n var BACKSLASH = String.fromCharCode(0x5c);\n var uidRegExp = /[^0-9.]/g; // Treat backslashes as a delimiter for multiple UIDs, in which case an\n // array of UIDs is returned. This is used by DICOM Q&R to support\n // querying and matching multiple items on a UID field in a single\n // query. For more details see:\n //\n // https://dicom.nema.org/medical/dicom/current/output/chtml/part04/sect_C.2.2.2.2.html\n // https://dicom.nema.org/medical/dicom/current/output/chtml/part05/sect_6.4.html\n\n if (result.indexOf(BACKSLASH) === -1) {\n return result.replace(uidRegExp, \"\");\n } else {\n return result.split(BACKSLASH).map(function (uid) {\n return uid.replace(uidRegExp, \"\");\n });\n }\n }\n }]);\n\n return UniqueIdentifier;\n}(AsciiStringRepresentation);\n\nvar UniversalResource = /*#__PURE__*/function (_AsciiStringRepresent10) {\n _inherits(UniversalResource, _AsciiStringRepresent10);\n\n var _super28 = _createSuper(UniversalResource);\n\n function UniversalResource() {\n var _this27;\n\n _classCallCheck(this, UniversalResource);\n\n _this27 = _super28.call(this, \"UR\");\n _this27.maxLength = null;\n _this27.padByte = 0x20;\n return _this27;\n }\n\n _createClass(UniversalResource, [{\n key: \"readBytes\",\n value: function readBytes(stream, length) {\n return stream.readAsciiString(length);\n }\n }]);\n\n return UniversalResource;\n}(AsciiStringRepresentation);\n\nvar UnknownValue = /*#__PURE__*/function (_BinaryRepresentation) {\n _inherits(UnknownValue, _BinaryRepresentation);\n\n var _super29 = _createSuper(UnknownValue);\n\n function UnknownValue() {\n var _this28;\n\n _classCallCheck(this, UnknownValue);\n\n _this28 = _super29.call(this, \"UN\");\n _this28.maxLength = null;\n _this28.padByte = 0;\n _this28.noMultiple = true;\n return _this28;\n }\n\n return _createClass(UnknownValue);\n}(BinaryRepresentation);\n\nvar OtherWordString = /*#__PURE__*/function (_BinaryRepresentation2) {\n _inherits(OtherWordString, _BinaryRepresentation2);\n\n var _super30 = _createSuper(OtherWordString);\n\n function OtherWordString() {\n var _this29;\n\n _classCallCheck(this, OtherWordString);\n\n _this29 = _super30.call(this, \"OW\");\n _this29.maxLength = null;\n _this29.padByte = 0;\n _this29.noMultiple = true;\n return _this29;\n }\n\n return _createClass(OtherWordString);\n}(BinaryRepresentation);\n\nvar OtherByteString = /*#__PURE__*/function (_BinaryRepresentation3) {\n _inherits(OtherByteString, _BinaryRepresentation3);\n\n var _super31 = _createSuper(OtherByteString);\n\n function OtherByteString() {\n var _this30;\n\n _classCallCheck(this, OtherByteString);\n\n _this30 = _super31.call(this, \"OB\");\n _this30.maxLength = null;\n _this30.padByte = 0;\n _this30.noMultiple = true;\n return _this30;\n }\n\n return _createClass(OtherByteString);\n}(BinaryRepresentation);\n\nvar OtherDoubleString = /*#__PURE__*/function (_BinaryRepresentation4) {\n _inherits(OtherDoubleString, _BinaryRepresentation4);\n\n var _super32 = _createSuper(OtherDoubleString);\n\n function OtherDoubleString() {\n var _this31;\n\n _classCallCheck(this, OtherDoubleString);\n\n _this31 = _super32.call(this, \"OD\");\n _this31.maxLength = null;\n _this31.padByte = 0;\n _this31.noMultiple = true;\n return _this31;\n }\n\n return _createClass(OtherDoubleString);\n}(BinaryRepresentation);\n\nvar OtherFloatString = /*#__PURE__*/function (_BinaryRepresentation5) {\n _inherits(OtherFloatString, _BinaryRepresentation5);\n\n var _super33 = _createSuper(OtherFloatString);\n\n function OtherFloatString() {\n var _this32;\n\n _classCallCheck(this, OtherFloatString);\n\n _this32 = _super33.call(this, \"OF\");\n _this32.maxLength = null;\n _this32.padByte = 0;\n _this32.noMultiple = true;\n return _this32;\n }\n\n return _createClass(OtherFloatString);\n}(BinaryRepresentation); // these VR instances are precreate and are reused for each requested vr/tag\n\n\nvar VRinstances = {\n AE: new ApplicationEntity(),\n AS: new AgeString(),\n AT: new AttributeTag(),\n CS: new CodeString(),\n DA: new DateValue(),\n DS: new DecimalString(),\n DT: new DateTime(),\n FL: new FloatingPointSingle(),\n FD: new FloatingPointDouble(),\n IS: new IntegerString(),\n LO: new LongString(),\n LT: new LongText(),\n OB: new OtherByteString(),\n OD: new OtherDoubleString(),\n OF: new OtherFloatString(),\n OW: new OtherWordString(),\n PN: new PersonName(),\n SH: new ShortString(),\n SL: new SignedLong(),\n SQ: new SequenceOfItems(),\n SS: new SignedShort(),\n ST: new ShortText(),\n TM: new TimeValue(),\n UC: new UnlimitedCharacters(),\n UI: new UniqueIdentifier(),\n UL: new UnsignedLong(),\n UN: new UnknownValue(),\n UR: new UniversalResource(),\n US: new UnsignedShort(),\n UT: new UnlimitedText()\n};\n\nvar IMPLICIT_LITTLE_ENDIAN = \"1.2.840.10008.1.2\";\nvar EXPLICIT_LITTLE_ENDIAN = \"1.2.840.10008.1.2.1\";\n\nfunction paddingLeft(paddingValue, string) {\n return String(paddingValue + string).slice(-paddingValue.length);\n}\n\nvar Tag = /*#__PURE__*/function () {\n function Tag(value) {\n _classCallCheck(this, Tag);\n\n this.value = value;\n }\n\n _createClass(Tag, [{\n key: \"toString\",\n value: function toString() {\n return \"(\" + paddingLeft(\"0000\", this.group().toString(16).toUpperCase()) + \",\" + paddingLeft(\"0000\", this.element().toString(16).toUpperCase()) + \")\";\n }\n }, {\n key: \"toCleanString\",\n value: function toCleanString() {\n return paddingLeft(\"0000\", this.group().toString(16).toUpperCase()) + paddingLeft(\"0000\", this.element().toString(16).toUpperCase());\n }\n }, {\n key: \"is\",\n value: function is(t) {\n return this.value == t;\n }\n }, {\n key: \"group\",\n value: function group() {\n return this.value >>> 16;\n }\n }, {\n key: \"element\",\n value: function element() {\n return this.value & 0xffff;\n }\n }, {\n key: \"isPixelDataTag\",\n value: function isPixelDataTag() {\n return this.is(0x7fe00010);\n }\n }, {\n key: \"isPrivateCreator\",\n value: function isPrivateCreator() {\n var group = this.group();\n var element = this.element();\n return group % 2 === 1 && element < 0x100 && element > 0x00;\n }\n }, {\n key: \"write\",\n value: function write(stream, vrType, values, syntax, writeOptions) {\n var vr = ValueRepresentation.createByTypeString(vrType),\n useSyntax = DicomMessage._normalizeSyntax(syntax);\n\n var implicit = useSyntax == IMPLICIT_LITTLE_ENDIAN ? true : false,\n isLittleEndian = useSyntax == IMPLICIT_LITTLE_ENDIAN || useSyntax == EXPLICIT_LITTLE_ENDIAN ? true : false,\n isEncapsulated = this.isPixelDataTag() && DicomMessage.isEncapsulated(syntax);\n var oldEndian = stream.isLittleEndian;\n stream.setEndian(isLittleEndian);\n stream.writeUint16(this.group());\n stream.writeUint16(this.element());\n var tagStream = new WriteBufferStream(256),\n valueLength;\n tagStream.setEndian(isLittleEndian);\n\n if (vrType == \"OW\" || vrType == \"OB\" || vrType == \"UN\") {\n valueLength = vr.writeBytes(tagStream, values, useSyntax, isEncapsulated, writeOptions);\n } else if (vrType == \"SQ\") {\n valueLength = vr.writeBytes(tagStream, values, useSyntax, writeOptions);\n } else {\n valueLength = vr.writeBytes(tagStream, values, writeOptions);\n }\n\n if (vrType == \"SQ\") {\n valueLength = 0xffffffff;\n }\n\n var written = tagStream.size + 4;\n\n if (implicit) {\n stream.writeUint32(valueLength);\n written += 4;\n } else {\n if (vr.isExplicit()) {\n stream.writeAsciiString(vr.type);\n stream.writeUint16(0);\n stream.writeUint32(valueLength);\n written += 8;\n } else {\n stream.writeAsciiString(vr.type);\n stream.writeUint16(valueLength);\n written += 4;\n }\n }\n\n stream.concat(tagStream);\n stream.setEndian(oldEndian);\n return written;\n }\n }], [{\n key: \"fromString\",\n value: function fromString(str) {\n var group = parseInt(str.substring(0, 4), 16),\n element = parseInt(str.substring(4), 16);\n return Tag.fromNumbers(group, element);\n }\n }, {\n key: \"fromPString\",\n value: function fromPString(str) {\n var group = parseInt(str.substring(1, 5), 16),\n element = parseInt(str.substring(6, 10), 16);\n return Tag.fromNumbers(group, element);\n }\n }, {\n key: \"fromNumbers\",\n value: function fromNumbers(group, element) {\n return new Tag((group << 16 | element) >>> 0);\n }\n }, {\n key: \"readTag\",\n value: function readTag(stream) {\n var group = stream.readUint16(),\n element = stream.readUint16();\n return Tag.fromNumbers(group, element);\n }\n }]);\n\n return Tag;\n}();\n\nvar dictionary={\"(0000,0000)\":{tag:\"(0000,0000)\",vr:\"UL\",name:\"CommandGroupLength\",vm:\"1\",version:\"DICOM\"},\"(0000,0002)\":{tag:\"(0000,0002)\",vr:\"UI\",name:\"AffectedSOPClassUID\",vm:\"1\",version:\"DICOM\"},\"(0000,0003)\":{tag:\"(0000,0003)\",vr:\"UI\",name:\"RequestedSOPClassUID\",vm:\"1\",version:\"DICOM\"},\"(0000,0100)\":{tag:\"(0000,0100)\",vr:\"US\",name:\"CommandField\",vm:\"1\",version:\"DICOM\"},\"(0000,0110)\":{tag:\"(0000,0110)\",vr:\"US\",name:\"MessageID\",vm:\"1\",version:\"DICOM\"},\"(0000,0120)\":{tag:\"(0000,0120)\",vr:\"US\",name:\"MessageIDBeingRespondedTo\",vm:\"1\",version:\"DICOM\"},\"(0000,0600)\":{tag:\"(0000,0600)\",vr:\"AE\",name:\"MoveDestination\",vm:\"1\",version:\"DICOM\"},\"(0000,0700)\":{tag:\"(0000,0700)\",vr:\"US\",name:\"Priority\",vm:\"1\",version:\"DICOM\"},\"(0000,0800)\":{tag:\"(0000,0800)\",vr:\"US\",name:\"CommandDataSetType\",vm:\"1\",version:\"DICOM\"},\"(0000,0900)\":{tag:\"(0000,0900)\",vr:\"US\",name:\"Status\",vm:\"1\",version:\"DICOM\"},\"(0000,0901)\":{tag:\"(0000,0901)\",vr:\"AT\",name:\"OffendingElement\",vm:\"1-n\",version:\"DICOM\"},\"(0000,0902)\":{tag:\"(0000,0902)\",vr:\"LO\",name:\"ErrorComment\",vm:\"1\",version:\"DICOM\"},\"(0000,0903)\":{tag:\"(0000,0903)\",vr:\"US\",name:\"ErrorID\",vm:\"1\",version:\"DICOM\"},\"(0000,1000)\":{tag:\"(0000,1000)\",vr:\"UI\",name:\"AffectedSOPInstanceUID\",vm:\"1\",version:\"DICOM\"},\"(0000,1001)\":{tag:\"(0000,1001)\",vr:\"UI\",name:\"RequestedSOPInstanceUID\",vm:\"1\",version:\"DICOM\"},\"(0000,1002)\":{tag:\"(0000,1002)\",vr:\"US\",name:\"EventTypeID\",vm:\"1\",version:\"DICOM\"},\"(0000,1005)\":{tag:\"(0000,1005)\",vr:\"AT\",name:\"AttributeIdentifierList\",vm:\"1-n\",version:\"DICOM\"},\"(0000,1008)\":{tag:\"(0000,1008)\",vr:\"US\",name:\"ActionTypeID\",vm:\"1\",version:\"DICOM\"},\"(0000,1020)\":{tag:\"(0000,1020)\",vr:\"US\",name:\"NumberOfRemainingSuboperations\",vm:\"1\",version:\"DICOM\"},\"(0000,1021)\":{tag:\"(0000,1021)\",vr:\"US\",name:\"NumberOfCompletedSuboperations\",vm:\"1\",version:\"DICOM\"},\"(0000,1022)\":{tag:\"(0000,1022)\",vr:\"US\",name:\"NumberOfFailedSuboperations\",vm:\"1\",version:\"DICOM\"},\"(0000,1023)\":{tag:\"(0000,1023)\",vr:\"US\",name:\"NumberOfWarningSuboperations\",vm:\"1\",version:\"DICOM\"},\"(0000,1030)\":{tag:\"(0000,1030)\",vr:\"AE\",name:\"MoveOriginatorApplicationEntityTitle\",vm:\"1\",version:\"DICOM\"},\"(0000,1031)\":{tag:\"(0000,1031)\",vr:\"US\",name:\"MoveOriginatorMessageID\",vm:\"1\",version:\"DICOM\"},\"(0002,0000)\":{tag:\"(0002,0000)\",vr:\"UL\",name:\"FileMetaInformationGroupLength\",vm:\"1\",version:\"DICOM\"},\"(0002,0001)\":{tag:\"(0002,0001)\",vr:\"OB\",name:\"FileMetaInformationVersion\",vm:\"1\",version:\"DICOM\"},\"(0002,0002)\":{tag:\"(0002,0002)\",vr:\"UI\",name:\"MediaStorageSOPClassUID\",vm:\"1\",version:\"DICOM\"},\"(0002,0003)\":{tag:\"(0002,0003)\",vr:\"UI\",name:\"MediaStorageSOPInstanceUID\",vm:\"1\",version:\"DICOM\"},\"(0002,0010)\":{tag:\"(0002,0010)\",vr:\"UI\",name:\"TransferSyntaxUID\",vm:\"1\",version:\"DICOM\"},\"(0002,0012)\":{tag:\"(0002,0012)\",vr:\"UI\",name:\"ImplementationClassUID\",vm:\"1\",version:\"DICOM\"},\"(0002,0013)\":{tag:\"(0002,0013)\",vr:\"SH\",name:\"ImplementationVersionName\",vm:\"1\",version:\"DICOM\"},\"(0002,0016)\":{tag:\"(0002,0016)\",vr:\"AE\",name:\"SourceApplicationEntityTitle\",vm:\"1\",version:\"DICOM\"},\"(0002,0017)\":{tag:\"(0002,0017)\",vr:\"AE\",name:\"SendingApplicationEntityTitle\",vm:\"1\",version:\"DICOM\"},\"(0002,0018)\":{tag:\"(0002,0018)\",vr:\"AE\",name:\"ReceivingApplicationEntityTitle\",vm:\"1\",version:\"DICOM\"},\"(0002,0100)\":{tag:\"(0002,0100)\",vr:\"UI\",name:\"PrivateInformationCreatorUID\",vm:\"1\",version:\"DICOM\"},\"(0002,0102)\":{tag:\"(0002,0102)\",vr:\"OB\",name:\"PrivateInformation\",vm:\"1\",version:\"DICOM\"},\"(0004,1130)\":{tag:\"(0004,1130)\",vr:\"CS\",name:\"FileSetID\",vm:\"1\",version:\"DICOM\"},\"(0004,1141)\":{tag:\"(0004,1141)\",vr:\"CS\",name:\"FileSetDescriptorFileID\",vm:\"1-8\",version:\"DICOM\"},\"(0004,1142)\":{tag:\"(0004,1142)\",vr:\"CS\",name:\"SpecificCharacterSetOfFileSetDescriptorFile\",vm:\"1\",version:\"DICOM\"},\"(0004,1200)\":{tag:\"(0004,1200)\",vr:\"up\",name:\"OffsetOfTheFirstDirectoryRecordOfTheRootDirectoryEntity\",vm:\"1\",version:\"DICOM\"},\"(0004,1202)\":{tag:\"(0004,1202)\",vr:\"up\",name:\"OffsetOfTheLastDirectoryRecordOfTheRootDirectoryEntity\",vm:\"1\",version:\"DICOM\"},\"(0004,1212)\":{tag:\"(0004,1212)\",vr:\"US\",name:\"FileSetConsistencyFlag\",vm:\"1\",version:\"DICOM\"},\"(0004,1220)\":{tag:\"(0004,1220)\",vr:\"SQ\",name:\"DirectoryRecordSequence\",vm:\"1\",version:\"DICOM\"},\"(0004,1400)\":{tag:\"(0004,1400)\",vr:\"up\",name:\"OffsetOfTheNextDirectoryRecord\",vm:\"1\",version:\"DICOM\"},\"(0004,1410)\":{tag:\"(0004,1410)\",vr:\"US\",name:\"RecordInUseFlag\",vm:\"1\",version:\"DICOM\"},\"(0004,1420)\":{tag:\"(0004,1420)\",vr:\"up\",name:\"OffsetOfReferencedLowerLevelDirectoryEntity\",vm:\"1\",version:\"DICOM\"},\"(0004,1430)\":{tag:\"(0004,1430)\",vr:\"CS\",name:\"DirectoryRecordType\",vm:\"1\",version:\"DICOM\"},\"(0004,1432)\":{tag:\"(0004,1432)\",vr:\"UI\",name:\"PrivateRecordUID\",vm:\"1\",version:\"DICOM\"},\"(0004,1500)\":{tag:\"(0004,1500)\",vr:\"CS\",name:\"ReferencedFileID\",vm:\"1-8\",version:\"DICOM\"},\"(0004,1510)\":{tag:\"(0004,1510)\",vr:\"UI\",name:\"ReferencedSOPClassUIDInFile\",vm:\"1\",version:\"DICOM\"},\"(0004,1511)\":{tag:\"(0004,1511)\",vr:\"UI\",name:\"ReferencedSOPInstanceUIDInFile\",vm:\"1\",version:\"DICOM\"},\"(0004,1512)\":{tag:\"(0004,1512)\",vr:\"UI\",name:\"ReferencedTransferSyntaxUIDInFile\",vm:\"1\",version:\"DICOM\"},\"(0004,151A)\":{tag:\"(0004,151A)\",vr:\"UI\",name:\"ReferencedRelatedGeneralSOPClassUIDInFile\",vm:\"1-n\",version:\"DICOM\"},\"(0008,0005)\":{tag:\"(0008,0005)\",vr:\"CS\",name:\"SpecificCharacterSet\",vm:\"1-n\",version:\"DICOM\"},\"(0008,0006)\":{tag:\"(0008,0006)\",vr:\"SQ\",name:\"LanguageCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,0008)\":{tag:\"(0008,0008)\",vr:\"CS\",name:\"ImageType\",vm:\"2-n\",version:\"DICOM\"},\"(0008,0012)\":{tag:\"(0008,0012)\",vr:\"DA\",name:\"InstanceCreationDate\",vm:\"1\",version:\"DICOM\"},\"(0008,0013)\":{tag:\"(0008,0013)\",vr:\"TM\",name:\"InstanceCreationTime\",vm:\"1\",version:\"DICOM\"},\"(0008,0014)\":{tag:\"(0008,0014)\",vr:\"UI\",name:\"InstanceCreatorUID\",vm:\"1\",version:\"DICOM\"},\"(0008,0015)\":{tag:\"(0008,0015)\",vr:\"DT\",name:\"InstanceCoercionDateTime\",vm:\"1\",version:\"DICOM\"},\"(0008,0016)\":{tag:\"(0008,0016)\",vr:\"UI\",name:\"SOPClassUID\",vm:\"1\",version:\"DICOM\"},\"(0008,0018)\":{tag:\"(0008,0018)\",vr:\"UI\",name:\"SOPInstanceUID\",vm:\"1\",version:\"DICOM\"},\"(0008,001A)\":{tag:\"(0008,001A)\",vr:\"UI\",name:\"RelatedGeneralSOPClassUID\",vm:\"1-n\",version:\"DICOM\"},\"(0008,001B)\":{tag:\"(0008,001B)\",vr:\"UI\",name:\"OriginalSpecializedSOPClassUID\",vm:\"1\",version:\"DICOM\"},\"(0008,0020)\":{tag:\"(0008,0020)\",vr:\"DA\",name:\"StudyDate\",vm:\"1\",version:\"DICOM\"},\"(0008,0021)\":{tag:\"(0008,0021)\",vr:\"DA\",name:\"SeriesDate\",vm:\"1\",version:\"DICOM\"},\"(0008,0022)\":{tag:\"(0008,0022)\",vr:\"DA\",name:\"AcquisitionDate\",vm:\"1\",version:\"DICOM\"},\"(0008,0023)\":{tag:\"(0008,0023)\",vr:\"DA\",name:\"ContentDate\",vm:\"1\",version:\"DICOM\"},\"(0008,002A)\":{tag:\"(0008,002A)\",vr:\"DT\",name:\"AcquisitionDateTime\",vm:\"1\",version:\"DICOM\"},\"(0008,0030)\":{tag:\"(0008,0030)\",vr:\"TM\",name:\"StudyTime\",vm:\"1\",version:\"DICOM\"},\"(0008,0031)\":{tag:\"(0008,0031)\",vr:\"TM\",name:\"SeriesTime\",vm:\"1\",version:\"DICOM\"},\"(0008,0032)\":{tag:\"(0008,0032)\",vr:\"TM\",name:\"AcquisitionTime\",vm:\"1\",version:\"DICOM\"},\"(0008,0033)\":{tag:\"(0008,0033)\",vr:\"TM\",name:\"ContentTime\",vm:\"1\",version:\"DICOM\"},\"(0008,0050)\":{tag:\"(0008,0050)\",vr:\"SH\",name:\"AccessionNumber\",vm:\"1\",version:\"DICOM\"},\"(0008,0051)\":{tag:\"(0008,0051)\",vr:\"SQ\",name:\"IssuerOfAccessionNumberSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,0052)\":{tag:\"(0008,0052)\",vr:\"CS\",name:\"QueryRetrieveLevel\",vm:\"1\",version:\"DICOM\"},\"(0008,0053)\":{tag:\"(0008,0053)\",vr:\"CS\",name:\"QueryRetrieveView\",vm:\"1\",version:\"DICOM\"},\"(0008,0054)\":{tag:\"(0008,0054)\",vr:\"AE\",name:\"RetrieveAETitle\",vm:\"1-n\",version:\"DICOM\"},\"(0008,0055)\":{tag:\"(0008,0055)\",vr:\"AE\",name:\"StationAETitle\",vm:\"1\",version:\"DICOM\"},\"(0008,0056)\":{tag:\"(0008,0056)\",vr:\"CS\",name:\"InstanceAvailability\",vm:\"1\",version:\"DICOM\"},\"(0008,0058)\":{tag:\"(0008,0058)\",vr:\"UI\",name:\"FailedSOPInstanceUIDList\",vm:\"1-n\",version:\"DICOM\"},\"(0008,0060)\":{tag:\"(0008,0060)\",vr:\"CS\",name:\"Modality\",vm:\"1\",version:\"DICOM\"},\"(0008,0061)\":{tag:\"(0008,0061)\",vr:\"CS\",name:\"ModalitiesInStudy\",vm:\"1-n\",version:\"DICOM\"},\"(0008,0062)\":{tag:\"(0008,0062)\",vr:\"UI\",name:\"SOPClassesInStudy\",vm:\"1-n\",version:\"DICOM\"},\"(0008,0063)\":{tag:\"(0008,0063)\",vr:\"SQ\",name:\"AnatomicRegionsInStudyCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,0064)\":{tag:\"(0008,0064)\",vr:\"CS\",name:\"ConversionType\",vm:\"1\",version:\"DICOM\"},\"(0008,0068)\":{tag:\"(0008,0068)\",vr:\"CS\",name:\"PresentationIntentType\",vm:\"1\",version:\"DICOM\"},\"(0008,0070)\":{tag:\"(0008,0070)\",vr:\"LO\",name:\"Manufacturer\",vm:\"1\",version:\"DICOM\"},\"(0008,0080)\":{tag:\"(0008,0080)\",vr:\"LO\",name:\"InstitutionName\",vm:\"1\",version:\"DICOM\"},\"(0008,0081)\":{tag:\"(0008,0081)\",vr:\"ST\",name:\"InstitutionAddress\",vm:\"1\",version:\"DICOM\"},\"(0008,0082)\":{tag:\"(0008,0082)\",vr:\"SQ\",name:\"InstitutionCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,0090)\":{tag:\"(0008,0090)\",vr:\"PN\",name:\"ReferringPhysicianName\",vm:\"1\",version:\"DICOM\"},\"(0008,0092)\":{tag:\"(0008,0092)\",vr:\"ST\",name:\"ReferringPhysicianAddress\",vm:\"1\",version:\"DICOM\"},\"(0008,0094)\":{tag:\"(0008,0094)\",vr:\"SH\",name:\"ReferringPhysicianTelephoneNumbers\",vm:\"1-n\",version:\"DICOM\"},\"(0008,0096)\":{tag:\"(0008,0096)\",vr:\"SQ\",name:\"ReferringPhysicianIdentificationSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,009C)\":{tag:\"(0008,009C)\",vr:\"PN\",name:\"ConsultingPhysicianName\",vm:\"1-n\",version:\"DICOM\"},\"(0008,009D)\":{tag:\"(0008,009D)\",vr:\"SQ\",name:\"ConsultingPhysicianIdentificationSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,0100)\":{tag:\"(0008,0100)\",vr:\"SH\",name:\"CodeValue\",vm:\"1\",version:\"DICOM\"},\"(0008,0101)\":{tag:\"(0008,0101)\",vr:\"LO\",name:\"ExtendedCodeValue\",vm:\"1\",version:\"DICOM/DICOS\"},\"(0008,0102)\":{tag:\"(0008,0102)\",vr:\"SH\",name:\"CodingSchemeDesignator\",vm:\"1\",version:\"DICOM\"},\"(0008,0103)\":{tag:\"(0008,0103)\",vr:\"SH\",name:\"CodingSchemeVersion\",vm:\"1\",version:\"DICOM\"},\"(0008,0104)\":{tag:\"(0008,0104)\",vr:\"LO\",name:\"CodeMeaning\",vm:\"1\",version:\"DICOM\"},\"(0008,0105)\":{tag:\"(0008,0105)\",vr:\"CS\",name:\"MappingResource\",vm:\"1\",version:\"DICOM\"},\"(0008,0106)\":{tag:\"(0008,0106)\",vr:\"DT\",name:\"ContextGroupVersion\",vm:\"1\",version:\"DICOM\"},\"(0008,0107)\":{tag:\"(0008,0107)\",vr:\"DT\",name:\"ContextGroupLocalVersion\",vm:\"1\",version:\"DICOM\"},\"(0008,0108)\":{tag:\"(0008,0108)\",vr:\"LT\",name:\"ExtendedCodeMeaning\",vm:\"1\",version:\"DICOM/DICOS\"},\"(0008,0109)\":{tag:\"(0008,0109)\",vr:\"SQ\",name:\"CodingSchemeResourcesSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,010A)\":{tag:\"(0008,010A)\",vr:\"CS\",name:\"CodingSchemeURLType\",vm:\"1\",version:\"DICOM\"},\"(0008,010B)\":{tag:\"(0008,010B)\",vr:\"CS\",name:\"ContextGroupExtensionFlag\",vm:\"1\",version:\"DICOM\"},\"(0008,010C)\":{tag:\"(0008,010C)\",vr:\"UI\",name:\"CodingSchemeUID\",vm:\"1\",version:\"DICOM\"},\"(0008,010D)\":{tag:\"(0008,010D)\",vr:\"UI\",name:\"ContextGroupExtensionCreatorUID\",vm:\"1\",version:\"DICOM\"},\"(0008,010E)\":{tag:\"(0008,010E)\",vr:\"UR\",name:\"CodingSchemeURL\",vm:\"1\",version:\"DICOM\"},\"(0008,010F)\":{tag:\"(0008,010F)\",vr:\"CS\",name:\"ContextIdentifier\",vm:\"1\",version:\"DICOM\"},\"(0008,0110)\":{tag:\"(0008,0110)\",vr:\"SQ\",name:\"CodingSchemeIdentificationSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,0112)\":{tag:\"(0008,0112)\",vr:\"LO\",name:\"CodingSchemeRegistry\",vm:\"1\",version:\"DICOM\"},\"(0008,0114)\":{tag:\"(0008,0114)\",vr:\"ST\",name:\"CodingSchemeExternalID\",vm:\"1\",version:\"DICOM\"},\"(0008,0115)\":{tag:\"(0008,0115)\",vr:\"ST\",name:\"CodingSchemeName\",vm:\"1\",version:\"DICOM\"},\"(0008,0116)\":{tag:\"(0008,0116)\",vr:\"ST\",name:\"CodingSchemeResponsibleOrganization\",vm:\"1\",version:\"DICOM\"},\"(0008,0117)\":{tag:\"(0008,0117)\",vr:\"UI\",name:\"ContextUID\",vm:\"1\",version:\"DICOM\"},\"(0008,0118)\":{tag:\"(0008,0118)\",vr:\"UI\",name:\"MappingResourceUID\",vm:\"1\",version:\"DICOM\"},\"(0008,0119)\":{tag:\"(0008,0119)\",vr:\"UC\",name:\"LongCodeValue\",vm:\"1\",version:\"DICOM\"},\"(0008,0120)\":{tag:\"(0008,0120)\",vr:\"UR\",name:\"URNCodeValue\",vm:\"1\",version:\"DICOM\"},\"(0008,0121)\":{tag:\"(0008,0121)\",vr:\"SQ\",name:\"EquivalentCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,0122)\":{tag:\"(0008,0122)\",vr:\"LO\",name:\"MappingResourceName\",vm:\"1\",version:\"DICOM\"},\"(0008,0123)\":{tag:\"(0008,0123)\",vr:\"SQ\",name:\"ContextGroupIdentificationSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,0124)\":{tag:\"(0008,0124)\",vr:\"SQ\",name:\"MappingResourceIdentificationSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,0201)\":{tag:\"(0008,0201)\",vr:\"SH\",name:\"TimezoneOffsetFromUTC\",vm:\"1\",version:\"DICOM\"},\"(0008,0220)\":{tag:\"(0008,0220)\",vr:\"SQ\",name:\"ResponsibleGroupCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,0221)\":{tag:\"(0008,0221)\",vr:\"CS\",name:\"EquipmentModality\",vm:\"1\",version:\"DICOM\"},\"(0008,0222)\":{tag:\"(0008,0222)\",vr:\"LO\",name:\"ManufacturerRelatedModelGroup\",vm:\"1\",version:\"DICOM\"},\"(0008,0300)\":{tag:\"(0008,0300)\",vr:\"SQ\",name:\"PrivateDataElementCharacteristicsSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,0301)\":{tag:\"(0008,0301)\",vr:\"US\",name:\"PrivateGroupReference\",vm:\"1\",version:\"DICOM\"},\"(0008,0302)\":{tag:\"(0008,0302)\",vr:\"LO\",name:\"PrivateCreatorReference\",vm:\"1\",version:\"DICOM\"},\"(0008,0303)\":{tag:\"(0008,0303)\",vr:\"CS\",name:\"BlockIdentifyingInformationStatus\",vm:\"1\",version:\"DICOM\"},\"(0008,0304)\":{tag:\"(0008,0304)\",vr:\"US\",name:\"NonidentifyingPrivateElements\",vm:\"1-n\",version:\"DICOM\"},\"(0008,0305)\":{tag:\"(0008,0305)\",vr:\"SQ\",name:\"DeidentificationActionSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,0306)\":{tag:\"(0008,0306)\",vr:\"US\",name:\"IdentifyingPrivateElements\",vm:\"1-n\",version:\"DICOM\"},\"(0008,0307)\":{tag:\"(0008,0307)\",vr:\"CS\",name:\"DeidentificationAction\",vm:\"1\",version:\"DICOM\"},\"(0008,0308)\":{tag:\"(0008,0308)\",vr:\"US\",name:\"PrivateDataElement\",vm:\"1\",version:\"DICOM\"},\"(0008,0309)\":{tag:\"(0008,0309)\",vr:\"UL\",name:\"PrivateDataElementValueMultiplicity\",vm:\"1-3\",version:\"DICOM\"},\"(0008,030A)\":{tag:\"(0008,030A)\",vr:\"CS\",name:\"PrivateDataElementValueRepresentation\",vm:\"1\",version:\"DICOM\"},\"(0008,030B)\":{tag:\"(0008,030B)\",vr:\"UL\",name:\"PrivateDataElementNumberOfItems\",vm:\"1-2\",version:\"DICOM\"},\"(0008,030C)\":{tag:\"(0008,030C)\",vr:\"UC\",name:\"PrivateDataElementName\",vm:\"1\",version:\"DICOM\"},\"(0008,030D)\":{tag:\"(0008,030D)\",vr:\"UC\",name:\"PrivateDataElementKeyword\",vm:\"1\",version:\"DICOM\"},\"(0008,030E)\":{tag:\"(0008,030E)\",vr:\"UT\",name:\"PrivateDataElementDescription\",vm:\"1\",version:\"DICOM\"},\"(0008,030F)\":{tag:\"(0008,030F)\",vr:\"UT\",name:\"PrivateDataElementEncoding\",vm:\"1\",version:\"DICOM\"},\"(0008,0310)\":{tag:\"(0008,0310)\",vr:\"SQ\",name:\"PrivateDataElementDefinitionSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,1010)\":{tag:\"(0008,1010)\",vr:\"SH\",name:\"StationName\",vm:\"1\",version:\"DICOM\"},\"(0008,1030)\":{tag:\"(0008,1030)\",vr:\"LO\",name:\"StudyDescription\",vm:\"1\",version:\"DICOM\"},\"(0008,1032)\":{tag:\"(0008,1032)\",vr:\"SQ\",name:\"ProcedureCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,103E)\":{tag:\"(0008,103E)\",vr:\"LO\",name:\"SeriesDescription\",vm:\"1\",version:\"DICOM\"},\"(0008,103F)\":{tag:\"(0008,103F)\",vr:\"SQ\",name:\"SeriesDescriptionCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,1040)\":{tag:\"(0008,1040)\",vr:\"LO\",name:\"InstitutionalDepartmentName\",vm:\"1\",version:\"DICOM\"},\"(0008,1041)\":{tag:\"(0008,1041)\",vr:\"SQ\",name:\"InstitutionalDepartmentTypeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,1048)\":{tag:\"(0008,1048)\",vr:\"PN\",name:\"PhysiciansOfRecord\",vm:\"1-n\",version:\"DICOM\"},\"(0008,1049)\":{tag:\"(0008,1049)\",vr:\"SQ\",name:\"PhysiciansOfRecordIdentificationSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,1050)\":{tag:\"(0008,1050)\",vr:\"PN\",name:\"PerformingPhysicianName\",vm:\"1-n\",version:\"DICOM\"},\"(0008,1052)\":{tag:\"(0008,1052)\",vr:\"SQ\",name:\"PerformingPhysicianIdentificationSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,1060)\":{tag:\"(0008,1060)\",vr:\"PN\",name:\"NameOfPhysiciansReadingStudy\",vm:\"1-n\",version:\"DICOM\"},\"(0008,1062)\":{tag:\"(0008,1062)\",vr:\"SQ\",name:\"PhysiciansReadingStudyIdentificationSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,1070)\":{tag:\"(0008,1070)\",vr:\"PN\",name:\"OperatorsName\",vm:\"1-n\",version:\"DICOM\"},\"(0008,1072)\":{tag:\"(0008,1072)\",vr:\"SQ\",name:\"OperatorIdentificationSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,1080)\":{tag:\"(0008,1080)\",vr:\"LO\",name:\"AdmittingDiagnosesDescription\",vm:\"1-n\",version:\"DICOM\"},\"(0008,1084)\":{tag:\"(0008,1084)\",vr:\"SQ\",name:\"AdmittingDiagnosesCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,1090)\":{tag:\"(0008,1090)\",vr:\"LO\",name:\"ManufacturerModelName\",vm:\"1\",version:\"DICOM\"},\"(0008,1110)\":{tag:\"(0008,1110)\",vr:\"SQ\",name:\"ReferencedStudySequence\",vm:\"1\",version:\"DICOM\"},\"(0008,1111)\":{tag:\"(0008,1111)\",vr:\"SQ\",name:\"ReferencedPerformedProcedureStepSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,1115)\":{tag:\"(0008,1115)\",vr:\"SQ\",name:\"ReferencedSeriesSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,1120)\":{tag:\"(0008,1120)\",vr:\"SQ\",name:\"ReferencedPatientSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,1125)\":{tag:\"(0008,1125)\",vr:\"SQ\",name:\"ReferencedVisitSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,1134)\":{tag:\"(0008,1134)\",vr:\"SQ\",name:\"ReferencedStereometricInstanceSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,113A)\":{tag:\"(0008,113A)\",vr:\"SQ\",name:\"ReferencedWaveformSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,1140)\":{tag:\"(0008,1140)\",vr:\"SQ\",name:\"ReferencedImageSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,114A)\":{tag:\"(0008,114A)\",vr:\"SQ\",name:\"ReferencedInstanceSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,114B)\":{tag:\"(0008,114B)\",vr:\"SQ\",name:\"ReferencedRealWorldValueMappingInstanceSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,1150)\":{tag:\"(0008,1150)\",vr:\"UI\",name:\"ReferencedSOPClassUID\",vm:\"1\",version:\"DICOM\"},\"(0008,1155)\":{tag:\"(0008,1155)\",vr:\"UI\",name:\"ReferencedSOPInstanceUID\",vm:\"1\",version:\"DICOM\"},\"(0008,1156)\":{tag:\"(0008,1156)\",vr:\"SQ\",name:\"DefinitionSourceSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,115A)\":{tag:\"(0008,115A)\",vr:\"UI\",name:\"SOPClassesSupported\",vm:\"1-n\",version:\"DICOM\"},\"(0008,1160)\":{tag:\"(0008,1160)\",vr:\"IS\",name:\"ReferencedFrameNumber\",vm:\"1-n\",version:\"DICOM\"},\"(0008,1161)\":{tag:\"(0008,1161)\",vr:\"UL\",name:\"SimpleFrameList\",vm:\"1-n\",version:\"DICOM\"},\"(0008,1162)\":{tag:\"(0008,1162)\",vr:\"UL\",name:\"CalculatedFrameList\",vm:\"3-3n\",version:\"DICOM\"},\"(0008,1163)\":{tag:\"(0008,1163)\",vr:\"FD\",name:\"TimeRange\",vm:\"2\",version:\"DICOM\"},\"(0008,1164)\":{tag:\"(0008,1164)\",vr:\"SQ\",name:\"FrameExtractionSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,1167)\":{tag:\"(0008,1167)\",vr:\"UI\",name:\"MultiFrameSourceSOPInstanceUID\",vm:\"1\",version:\"DICOM\"},\"(0008,1190)\":{tag:\"(0008,1190)\",vr:\"UR\",name:\"RetrieveURL\",vm:\"1\",version:\"DICOM\"},\"(0008,1195)\":{tag:\"(0008,1195)\",vr:\"UI\",name:\"TransactionUID\",vm:\"1\",version:\"DICOM\"},\"(0008,1196)\":{tag:\"(0008,1196)\",vr:\"US\",name:\"WarningReason\",vm:\"1\",version:\"DICOM\"},\"(0008,1197)\":{tag:\"(0008,1197)\",vr:\"US\",name:\"FailureReason\",vm:\"1\",version:\"DICOM\"},\"(0008,1198)\":{tag:\"(0008,1198)\",vr:\"SQ\",name:\"FailedSOPSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,1199)\":{tag:\"(0008,1199)\",vr:\"SQ\",name:\"ReferencedSOPSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,119A)\":{tag:\"(0008,119A)\",vr:\"SQ\",name:\"OtherFailuresSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,1200)\":{tag:\"(0008,1200)\",vr:\"SQ\",name:\"StudiesContainingOtherReferencedInstancesSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,1250)\":{tag:\"(0008,1250)\",vr:\"SQ\",name:\"RelatedSeriesSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,2111)\":{tag:\"(0008,2111)\",vr:\"ST\",name:\"DerivationDescription\",vm:\"1\",version:\"DICOM\"},\"(0008,2112)\":{tag:\"(0008,2112)\",vr:\"SQ\",name:\"SourceImageSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,2120)\":{tag:\"(0008,2120)\",vr:\"SH\",name:\"StageName\",vm:\"1\",version:\"DICOM\"},\"(0008,2122)\":{tag:\"(0008,2122)\",vr:\"IS\",name:\"StageNumber\",vm:\"1\",version:\"DICOM\"},\"(0008,2124)\":{tag:\"(0008,2124)\",vr:\"IS\",name:\"NumberOfStages\",vm:\"1\",version:\"DICOM\"},\"(0008,2127)\":{tag:\"(0008,2127)\",vr:\"SH\",name:\"ViewName\",vm:\"1\",version:\"DICOM\"},\"(0008,2128)\":{tag:\"(0008,2128)\",vr:\"IS\",name:\"ViewNumber\",vm:\"1\",version:\"DICOM\"},\"(0008,2129)\":{tag:\"(0008,2129)\",vr:\"IS\",name:\"NumberOfEventTimers\",vm:\"1\",version:\"DICOM\"},\"(0008,212A)\":{tag:\"(0008,212A)\",vr:\"IS\",name:\"NumberOfViewsInStage\",vm:\"1\",version:\"DICOM\"},\"(0008,2130)\":{tag:\"(0008,2130)\",vr:\"DS\",name:\"EventElapsedTimes\",vm:\"1-n\",version:\"DICOM\"},\"(0008,2132)\":{tag:\"(0008,2132)\",vr:\"LO\",name:\"EventTimerNames\",vm:\"1-n\",version:\"DICOM\"},\"(0008,2133)\":{tag:\"(0008,2133)\",vr:\"SQ\",name:\"EventTimerSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,2134)\":{tag:\"(0008,2134)\",vr:\"FD\",name:\"EventTimeOffset\",vm:\"1\",version:\"DICOM\"},\"(0008,2135)\":{tag:\"(0008,2135)\",vr:\"SQ\",name:\"EventCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,2142)\":{tag:\"(0008,2142)\",vr:\"IS\",name:\"StartTrim\",vm:\"1\",version:\"DICOM\"},\"(0008,2143)\":{tag:\"(0008,2143)\",vr:\"IS\",name:\"StopTrim\",vm:\"1\",version:\"DICOM\"},\"(0008,2144)\":{tag:\"(0008,2144)\",vr:\"IS\",name:\"RecommendedDisplayFrameRate\",vm:\"1\",version:\"DICOM\"},\"(0008,2218)\":{tag:\"(0008,2218)\",vr:\"SQ\",name:\"AnatomicRegionSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,2220)\":{tag:\"(0008,2220)\",vr:\"SQ\",name:\"AnatomicRegionModifierSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,2228)\":{tag:\"(0008,2228)\",vr:\"SQ\",name:\"PrimaryAnatomicStructureSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,2229)\":{tag:\"(0008,2229)\",vr:\"SQ\",name:\"AnatomicStructureSpaceOrRegionSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,2230)\":{tag:\"(0008,2230)\",vr:\"SQ\",name:\"PrimaryAnatomicStructureModifierSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,3001)\":{tag:\"(0008,3001)\",vr:\"SQ\",name:\"AlternateRepresentationSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,3002)\":{tag:\"(0008,3002)\",vr:\"UI\",name:\"AvailableTransferSyntaxUID\",vm:\"1-n\",version:\"DICOM\"},\"(0008,3010)\":{tag:\"(0008,3010)\",vr:\"UI\",name:\"IrradiationEventUID\",vm:\"1-n\",version:\"DICOM\"},\"(0008,3011)\":{tag:\"(0008,3011)\",vr:\"SQ\",name:\"SourceIrradiationEventSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,3012)\":{tag:\"(0008,3012)\",vr:\"UI\",name:\"RadiopharmaceuticalAdministrationEventUID\",vm:\"1\",version:\"DICOM\"},\"(0008,9007)\":{tag:\"(0008,9007)\",vr:\"CS\",name:\"FrameType\",vm:\"4\",version:\"DICOM\"},\"(0008,9092)\":{tag:\"(0008,9092)\",vr:\"SQ\",name:\"ReferencedImageEvidenceSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,9121)\":{tag:\"(0008,9121)\",vr:\"SQ\",name:\"ReferencedRawDataSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,9123)\":{tag:\"(0008,9123)\",vr:\"UI\",name:\"CreatorVersionUID\",vm:\"1\",version:\"DICOM\"},\"(0008,9124)\":{tag:\"(0008,9124)\",vr:\"SQ\",name:\"DerivationImageSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,9154)\":{tag:\"(0008,9154)\",vr:\"SQ\",name:\"SourceImageEvidenceSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,9205)\":{tag:\"(0008,9205)\",vr:\"CS\",name:\"PixelPresentation\",vm:\"1\",version:\"DICOM\"},\"(0008,9206)\":{tag:\"(0008,9206)\",vr:\"CS\",name:\"VolumetricProperties\",vm:\"1\",version:\"DICOM\"},\"(0008,9207)\":{tag:\"(0008,9207)\",vr:\"CS\",name:\"VolumeBasedCalculationTechnique\",vm:\"1\",version:\"DICOM\"},\"(0008,9208)\":{tag:\"(0008,9208)\",vr:\"CS\",name:\"ComplexImageComponent\",vm:\"1\",version:\"DICOM\"},\"(0008,9209)\":{tag:\"(0008,9209)\",vr:\"CS\",name:\"AcquisitionContrast\",vm:\"1\",version:\"DICOM\"},\"(0008,9215)\":{tag:\"(0008,9215)\",vr:\"SQ\",name:\"DerivationCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,9237)\":{tag:\"(0008,9237)\",vr:\"SQ\",name:\"ReferencedPresentationStateSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,9410)\":{tag:\"(0008,9410)\",vr:\"SQ\",name:\"ReferencedOtherPlaneSequence\",vm:\"1\",version:\"DICOM\"},\"(0008,9458)\":{tag:\"(0008,9458)\",vr:\"SQ\",name:\"FrameDisplaySequence\",vm:\"1\",version:\"DICOM\"},\"(0008,9459)\":{tag:\"(0008,9459)\",vr:\"FL\",name:\"RecommendedDisplayFrameRateInFloat\",vm:\"1\",version:\"DICOM\"},\"(0008,9460)\":{tag:\"(0008,9460)\",vr:\"CS\",name:\"SkipFrameRangeFlag\",vm:\"1\",version:\"DICOM\"},\"(0010,0010)\":{tag:\"(0010,0010)\",vr:\"PN\",name:\"PatientName\",vm:\"1\",version:\"DICOM\"},\"(0010,0020)\":{tag:\"(0010,0020)\",vr:\"LO\",name:\"PatientID\",vm:\"1\",version:\"DICOM\"},\"(0010,0021)\":{tag:\"(0010,0021)\",vr:\"LO\",name:\"IssuerOfPatientID\",vm:\"1\",version:\"DICOM\"},\"(0010,0022)\":{tag:\"(0010,0022)\",vr:\"CS\",name:\"TypeOfPatientID\",vm:\"1\",version:\"DICOM\"},\"(0010,0024)\":{tag:\"(0010,0024)\",vr:\"SQ\",name:\"IssuerOfPatientIDQualifiersSequence\",vm:\"1\",version:\"DICOM\"},\"(0010,0026)\":{tag:\"(0010,0026)\",vr:\"SQ\",name:\"SourcePatientGroupIdentificationSequence\",vm:\"1\",version:\"DICOM\"},\"(0010,0027)\":{tag:\"(0010,0027)\",vr:\"SQ\",name:\"GroupOfPatientsIdentificationSequence\",vm:\"1\",version:\"DICOM\"},\"(0010,0028)\":{tag:\"(0010,0028)\",vr:\"US\",name:\"SubjectRelativePositionInImage\",vm:\"3\",version:\"DICOM\"},\"(0010,0030)\":{tag:\"(0010,0030)\",vr:\"DA\",name:\"PatientBirthDate\",vm:\"1\",version:\"DICOM\"},\"(0010,0032)\":{tag:\"(0010,0032)\",vr:\"TM\",name:\"PatientBirthTime\",vm:\"1\",version:\"DICOM\"},\"(0010,0033)\":{tag:\"(0010,0033)\",vr:\"LO\",name:\"PatientBirthDateInAlternativeCalendar\",vm:\"1\",version:\"DICOM\"},\"(0010,0034)\":{tag:\"(0010,0034)\",vr:\"LO\",name:\"PatientDeathDateInAlternativeCalendar\",vm:\"1\",version:\"DICOM\"},\"(0010,0035)\":{tag:\"(0010,0035)\",vr:\"CS\",name:\"PatientAlternativeCalendar\",vm:\"1\",version:\"DICOM\"},\"(0010,0040)\":{tag:\"(0010,0040)\",vr:\"CS\",name:\"PatientSex\",vm:\"1\",version:\"DICOM\"},\"(0010,0050)\":{tag:\"(0010,0050)\",vr:\"SQ\",name:\"PatientInsurancePlanCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0010,0101)\":{tag:\"(0010,0101)\",vr:\"SQ\",name:\"PatientPrimaryLanguageCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0010,0102)\":{tag:\"(0010,0102)\",vr:\"SQ\",name:\"PatientPrimaryLanguageModifierCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0010,0200)\":{tag:\"(0010,0200)\",vr:\"CS\",name:\"QualityControlSubject\",vm:\"1\",version:\"DICOM\"},\"(0010,0201)\":{tag:\"(0010,0201)\",vr:\"SQ\",name:\"QualityControlSubjectTypeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0010,0212)\":{tag:\"(0010,0212)\",vr:\"UC\",name:\"StrainDescription\",vm:\"1\",version:\"DICOM\"},\"(0010,0213)\":{tag:\"(0010,0213)\",vr:\"LO\",name:\"StrainNomenclature\",vm:\"1\",version:\"DICOM\"},\"(0010,0214)\":{tag:\"(0010,0214)\",vr:\"LO\",name:\"StrainStockNumber\",vm:\"1\",version:\"DICOM\"},\"(0010,0215)\":{tag:\"(0010,0215)\",vr:\"SQ\",name:\"StrainSourceRegistryCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0010,0216)\":{tag:\"(0010,0216)\",vr:\"SQ\",name:\"StrainStockSequence\",vm:\"1\",version:\"DICOM\"},\"(0010,0217)\":{tag:\"(0010,0217)\",vr:\"LO\",name:\"StrainSource\",vm:\"1\",version:\"DICOM\"},\"(0010,0218)\":{tag:\"(0010,0218)\",vr:\"UT\",name:\"StrainAdditionalInformation\",vm:\"1\",version:\"DICOM\"},\"(0010,0219)\":{tag:\"(0010,0219)\",vr:\"SQ\",name:\"StrainCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0010,0221)\":{tag:\"(0010,0221)\",vr:\"SQ\",name:\"GeneticModificationsSequence\",vm:\"1\",version:\"DICOM\"},\"(0010,0222)\":{tag:\"(0010,0222)\",vr:\"UC\",name:\"GeneticModificationsDescription\",vm:\"1\",version:\"DICOM\"},\"(0010,0223)\":{tag:\"(0010,0223)\",vr:\"LO\",name:\"GeneticModificationsNomenclature\",vm:\"1\",version:\"DICOM\"},\"(0010,0229)\":{tag:\"(0010,0229)\",vr:\"SQ\",name:\"GeneticModificationsCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0010,1000)\":{tag:\"(0010,1000)\",vr:\"LO\",name:\"OtherPatientIDs\",vm:\"1-n\",version:\"DICOM\"},\"(0010,1001)\":{tag:\"(0010,1001)\",vr:\"PN\",name:\"OtherPatientNames\",vm:\"1-n\",version:\"DICOM\"},\"(0010,1002)\":{tag:\"(0010,1002)\",vr:\"SQ\",name:\"OtherPatientIDsSequence\",vm:\"1\",version:\"DICOM\"},\"(0010,1005)\":{tag:\"(0010,1005)\",vr:\"PN\",name:\"PatientBirthName\",vm:\"1\",version:\"DICOM\"},\"(0010,1010)\":{tag:\"(0010,1010)\",vr:\"AS\",name:\"PatientAge\",vm:\"1\",version:\"DICOM\"},\"(0010,1020)\":{tag:\"(0010,1020)\",vr:\"DS\",name:\"PatientSize\",vm:\"1\",version:\"DICOM\"},\"(0010,1021)\":{tag:\"(0010,1021)\",vr:\"SQ\",name:\"PatientSizeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0010,1022)\":{tag:\"(0010,1022)\",vr:\"DS\",name:\"PatientBodyMassIndex\",vm:\"1\",version:\"DICOM\"},\"(0010,1023)\":{tag:\"(0010,1023)\",vr:\"DS\",name:\"MeasuredAPDimension\",vm:\"1\",version:\"DICOM\"},\"(0010,1024)\":{tag:\"(0010,1024)\",vr:\"DS\",name:\"MeasuredLateralDimension\",vm:\"1\",version:\"DICOM\"},\"(0010,1030)\":{tag:\"(0010,1030)\",vr:\"DS\",name:\"PatientWeight\",vm:\"1\",version:\"DICOM\"},\"(0010,1040)\":{tag:\"(0010,1040)\",vr:\"LO\",name:\"PatientAddress\",vm:\"1\",version:\"DICOM\"},\"(0010,1060)\":{tag:\"(0010,1060)\",vr:\"PN\",name:\"PatientMotherBirthName\",vm:\"1\",version:\"DICOM\"},\"(0010,1080)\":{tag:\"(0010,1080)\",vr:\"LO\",name:\"MilitaryRank\",vm:\"1\",version:\"DICOM\"},\"(0010,1081)\":{tag:\"(0010,1081)\",vr:\"LO\",name:\"BranchOfService\",vm:\"1\",version:\"DICOM\"},\"(0010,1090)\":{tag:\"(0010,1090)\",vr:\"LO\",name:\"MedicalRecordLocator\",vm:\"1\",version:\"DICOM\"},\"(0010,1100)\":{tag:\"(0010,1100)\",vr:\"SQ\",name:\"ReferencedPatientPhotoSequence\",vm:\"1\",version:\"DICOM\"},\"(0010,2000)\":{tag:\"(0010,2000)\",vr:\"LO\",name:\"MedicalAlerts\",vm:\"1-n\",version:\"DICOM\"},\"(0010,2110)\":{tag:\"(0010,2110)\",vr:\"LO\",name:\"Allergies\",vm:\"1-n\",version:\"DICOM\"},\"(0010,2150)\":{tag:\"(0010,2150)\",vr:\"LO\",name:\"CountryOfResidence\",vm:\"1\",version:\"DICOM\"},\"(0010,2152)\":{tag:\"(0010,2152)\",vr:\"LO\",name:\"RegionOfResidence\",vm:\"1\",version:\"DICOM\"},\"(0010,2154)\":{tag:\"(0010,2154)\",vr:\"SH\",name:\"PatientTelephoneNumbers\",vm:\"1-n\",version:\"DICOM\"},\"(0010,2155)\":{tag:\"(0010,2155)\",vr:\"LT\",name:\"PatientTelecomInformation\",vm:\"1\",version:\"DICOM\"},\"(0010,2160)\":{tag:\"(0010,2160)\",vr:\"SH\",name:\"EthnicGroup\",vm:\"1\",version:\"DICOM\"},\"(0010,2180)\":{tag:\"(0010,2180)\",vr:\"SH\",name:\"Occupation\",vm:\"1\",version:\"DICOM\"},\"(0010,21A0)\":{tag:\"(0010,21A0)\",vr:\"CS\",name:\"SmokingStatus\",vm:\"1\",version:\"DICOM\"},\"(0010,21B0)\":{tag:\"(0010,21B0)\",vr:\"LT\",name:\"AdditionalPatientHistory\",vm:\"1\",version:\"DICOM\"},\"(0010,21C0)\":{tag:\"(0010,21C0)\",vr:\"US\",name:\"PregnancyStatus\",vm:\"1\",version:\"DICOM\"},\"(0010,21D0)\":{tag:\"(0010,21D0)\",vr:\"DA\",name:\"LastMenstrualDate\",vm:\"1\",version:\"DICOM\"},\"(0010,21F0)\":{tag:\"(0010,21F0)\",vr:\"LO\",name:\"PatientReligiousPreference\",vm:\"1\",version:\"DICOM\"},\"(0010,2201)\":{tag:\"(0010,2201)\",vr:\"LO\",name:\"PatientSpeciesDescription\",vm:\"1\",version:\"DICOM\"},\"(0010,2202)\":{tag:\"(0010,2202)\",vr:\"SQ\",name:\"PatientSpeciesCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0010,2203)\":{tag:\"(0010,2203)\",vr:\"CS\",name:\"PatientSexNeutered\",vm:\"1\",version:\"DICOM\"},\"(0010,2210)\":{tag:\"(0010,2210)\",vr:\"CS\",name:\"AnatomicalOrientationType\",vm:\"1\",version:\"DICOM\"},\"(0010,2292)\":{tag:\"(0010,2292)\",vr:\"LO\",name:\"PatientBreedDescription\",vm:\"1\",version:\"DICOM\"},\"(0010,2293)\":{tag:\"(0010,2293)\",vr:\"SQ\",name:\"PatientBreedCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0010,2294)\":{tag:\"(0010,2294)\",vr:\"SQ\",name:\"BreedRegistrationSequence\",vm:\"1\",version:\"DICOM\"},\"(0010,2295)\":{tag:\"(0010,2295)\",vr:\"LO\",name:\"BreedRegistrationNumber\",vm:\"1\",version:\"DICOM\"},\"(0010,2296)\":{tag:\"(0010,2296)\",vr:\"SQ\",name:\"BreedRegistryCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0010,2297)\":{tag:\"(0010,2297)\",vr:\"PN\",name:\"ResponsiblePerson\",vm:\"1\",version:\"DICOM\"},\"(0010,2298)\":{tag:\"(0010,2298)\",vr:\"CS\",name:\"ResponsiblePersonRole\",vm:\"1\",version:\"DICOM\"},\"(0010,2299)\":{tag:\"(0010,2299)\",vr:\"LO\",name:\"ResponsibleOrganization\",vm:\"1\",version:\"DICOM\"},\"(0010,4000)\":{tag:\"(0010,4000)\",vr:\"LT\",name:\"PatientComments\",vm:\"1\",version:\"DICOM\"},\"(0010,9431)\":{tag:\"(0010,9431)\",vr:\"FL\",name:\"ExaminedBodyThickness\",vm:\"1\",version:\"DICOM\"},\"(0012,0010)\":{tag:\"(0012,0010)\",vr:\"LO\",name:\"ClinicalTrialSponsorName\",vm:\"1\",version:\"DICOM\"},\"(0012,0020)\":{tag:\"(0012,0020)\",vr:\"LO\",name:\"ClinicalTrialProtocolID\",vm:\"1\",version:\"DICOM\"},\"(0012,0021)\":{tag:\"(0012,0021)\",vr:\"LO\",name:\"ClinicalTrialProtocolName\",vm:\"1\",version:\"DICOM\"},\"(0012,0030)\":{tag:\"(0012,0030)\",vr:\"LO\",name:\"ClinicalTrialSiteID\",vm:\"1\",version:\"DICOM\"},\"(0012,0031)\":{tag:\"(0012,0031)\",vr:\"LO\",name:\"ClinicalTrialSiteName\",vm:\"1\",version:\"DICOM\"},\"(0012,0040)\":{tag:\"(0012,0040)\",vr:\"LO\",name:\"ClinicalTrialSubjectID\",vm:\"1\",version:\"DICOM\"},\"(0012,0042)\":{tag:\"(0012,0042)\",vr:\"LO\",name:\"ClinicalTrialSubjectReadingID\",vm:\"1\",version:\"DICOM\"},\"(0012,0050)\":{tag:\"(0012,0050)\",vr:\"LO\",name:\"ClinicalTrialTimePointID\",vm:\"1\",version:\"DICOM\"},\"(0012,0051)\":{tag:\"(0012,0051)\",vr:\"ST\",name:\"ClinicalTrialTimePointDescription\",vm:\"1\",version:\"DICOM\"},\"(0012,0052)\":{tag:\"(0012,0052)\",vr:\"FD\",name:\"LongitudinalTemporalOffsetFromEvent\",vm:\"1\",version:\"DICOM\"},\"(0012,0053)\":{tag:\"(0012,0053)\",vr:\"CS\",name:\"LongitudinalTemporalEventType\",vm:\"1\",version:\"DICOM\"},\"(0012,0060)\":{tag:\"(0012,0060)\",vr:\"LO\",name:\"ClinicalTrialCoordinatingCenterName\",vm:\"1\",version:\"DICOM\"},\"(0012,0062)\":{tag:\"(0012,0062)\",vr:\"CS\",name:\"PatientIdentityRemoved\",vm:\"1\",version:\"DICOM\"},\"(0012,0063)\":{tag:\"(0012,0063)\",vr:\"LO\",name:\"DeidentificationMethod\",vm:\"1-n\",version:\"DICOM\"},\"(0012,0064)\":{tag:\"(0012,0064)\",vr:\"SQ\",name:\"DeidentificationMethodCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0012,0071)\":{tag:\"(0012,0071)\",vr:\"LO\",name:\"ClinicalTrialSeriesID\",vm:\"1\",version:\"DICOM\"},\"(0012,0072)\":{tag:\"(0012,0072)\",vr:\"LO\",name:\"ClinicalTrialSeriesDescription\",vm:\"1\",version:\"DICOM\"},\"(0012,0081)\":{tag:\"(0012,0081)\",vr:\"LO\",name:\"ClinicalTrialProtocolEthicsCommitteeName\",vm:\"1\",version:\"DICOM\"},\"(0012,0082)\":{tag:\"(0012,0082)\",vr:\"LO\",name:\"ClinicalTrialProtocolEthicsCommitteeApprovalNumber\",vm:\"1\",version:\"DICOM\"},\"(0012,0083)\":{tag:\"(0012,0083)\",vr:\"SQ\",name:\"ConsentForClinicalTrialUseSequence\",vm:\"1\",version:\"DICOM\"},\"(0012,0084)\":{tag:\"(0012,0084)\",vr:\"CS\",name:\"DistributionType\",vm:\"1\",version:\"DICOM\"},\"(0012,0085)\":{tag:\"(0012,0085)\",vr:\"CS\",name:\"ConsentForDistributionFlag\",vm:\"1\",version:\"DICOM\"},\"(0014,0025)\":{tag:\"(0014,0025)\",vr:\"ST\",name:\"ComponentManufacturingProcedure\",vm:\"1-n\",version:\"DICOM/DICONDE\"},\"(0014,0028)\":{tag:\"(0014,0028)\",vr:\"ST\",name:\"ComponentManufacturer\",vm:\"1-n\",version:\"DICOM/DICONDE\"},\"(0014,0030)\":{tag:\"(0014,0030)\",vr:\"DS\",name:\"MaterialThickness\",vm:\"1-n\",version:\"DICOM/DICONDE\"},\"(0014,0032)\":{tag:\"(0014,0032)\",vr:\"DS\",name:\"MaterialPipeDiameter\",vm:\"1-n\",version:\"DICOM/DICONDE\"},\"(0014,0034)\":{tag:\"(0014,0034)\",vr:\"DS\",name:\"MaterialIsolationDiameter\",vm:\"1-n\",version:\"DICOM/DICONDE\"},\"(0014,0042)\":{tag:\"(0014,0042)\",vr:\"ST\",name:\"MaterialGrade\",vm:\"1-n\",version:\"DICOM/DICONDE\"},\"(0014,0044)\":{tag:\"(0014,0044)\",vr:\"ST\",name:\"MaterialPropertiesDescription\",vm:\"1-n\",version:\"DICOM/DICONDE\"},\"(0014,0046)\":{tag:\"(0014,0046)\",vr:\"LT\",name:\"MaterialNotes\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,0050)\":{tag:\"(0014,0050)\",vr:\"CS\",name:\"ComponentShape\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,0052)\":{tag:\"(0014,0052)\",vr:\"CS\",name:\"CurvatureType\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,0054)\":{tag:\"(0014,0054)\",vr:\"DS\",name:\"OuterDiameter\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,0056)\":{tag:\"(0014,0056)\",vr:\"DS\",name:\"InnerDiameter\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,1010)\":{tag:\"(0014,1010)\",vr:\"ST\",name:\"ActualEnvironmentalConditions\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,1020)\":{tag:\"(0014,1020)\",vr:\"DA\",name:\"ExpiryDate\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,1040)\":{tag:\"(0014,1040)\",vr:\"ST\",name:\"EnvironmentalConditions\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,2002)\":{tag:\"(0014,2002)\",vr:\"SQ\",name:\"EvaluatorSequence\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,2004)\":{tag:\"(0014,2004)\",vr:\"IS\",name:\"EvaluatorNumber\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,2006)\":{tag:\"(0014,2006)\",vr:\"PN\",name:\"EvaluatorName\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,2008)\":{tag:\"(0014,2008)\",vr:\"IS\",name:\"EvaluationAttempt\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,2012)\":{tag:\"(0014,2012)\",vr:\"SQ\",name:\"IndicationSequence\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,2014)\":{tag:\"(0014,2014)\",vr:\"IS\",name:\"IndicationNumber\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,2016)\":{tag:\"(0014,2016)\",vr:\"SH\",name:\"IndicationLabel\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,2018)\":{tag:\"(0014,2018)\",vr:\"ST\",name:\"IndicationDescription\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,201A)\":{tag:\"(0014,201A)\",vr:\"CS\",name:\"IndicationType\",vm:\"1-n\",version:\"DICOM/DICONDE\"},\"(0014,201C)\":{tag:\"(0014,201C)\",vr:\"CS\",name:\"IndicationDisposition\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,201E)\":{tag:\"(0014,201E)\",vr:\"SQ\",name:\"IndicationROISequence\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,2030)\":{tag:\"(0014,2030)\",vr:\"SQ\",name:\"IndicationPhysicalPropertySequence\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,2032)\":{tag:\"(0014,2032)\",vr:\"SH\",name:\"PropertyLabel\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,2202)\":{tag:\"(0014,2202)\",vr:\"IS\",name:\"CoordinateSystemNumberOfAxes\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,2204)\":{tag:\"(0014,2204)\",vr:\"SQ\",name:\"CoordinateSystemAxesSequence\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,2206)\":{tag:\"(0014,2206)\",vr:\"ST\",name:\"CoordinateSystemAxisDescription\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,2208)\":{tag:\"(0014,2208)\",vr:\"CS\",name:\"CoordinateSystemDataSetMapping\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,220A)\":{tag:\"(0014,220A)\",vr:\"IS\",name:\"CoordinateSystemAxisNumber\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,220C)\":{tag:\"(0014,220C)\",vr:\"CS\",name:\"CoordinateSystemAxisType\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,220E)\":{tag:\"(0014,220E)\",vr:\"CS\",name:\"CoordinateSystemAxisUnits\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,2210)\":{tag:\"(0014,2210)\",vr:\"OB\",name:\"CoordinateSystemAxisValues\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,2220)\":{tag:\"(0014,2220)\",vr:\"SQ\",name:\"CoordinateSystemTransformSequence\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,2222)\":{tag:\"(0014,2222)\",vr:\"ST\",name:\"TransformDescription\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,2224)\":{tag:\"(0014,2224)\",vr:\"IS\",name:\"TransformNumberOfAxes\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,2226)\":{tag:\"(0014,2226)\",vr:\"IS\",name:\"TransformOrderOfAxes\",vm:\"1-n\",version:\"DICOM/DICONDE\"},\"(0014,2228)\":{tag:\"(0014,2228)\",vr:\"CS\",name:\"TransformedAxisUnits\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,222A)\":{tag:\"(0014,222A)\",vr:\"DS\",name:\"CoordinateSystemTransformRotationAndScaleMatrix\",vm:\"1-n\",version:\"DICOM/DICONDE\"},\"(0014,222C)\":{tag:\"(0014,222C)\",vr:\"DS\",name:\"CoordinateSystemTransformTranslationMatrix\",vm:\"1-n\",version:\"DICOM/DICONDE\"},\"(0014,3011)\":{tag:\"(0014,3011)\",vr:\"DS\",name:\"InternalDetectorFrameTime\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,3012)\":{tag:\"(0014,3012)\",vr:\"DS\",name:\"NumberOfFramesIntegrated\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,3020)\":{tag:\"(0014,3020)\",vr:\"SQ\",name:\"DetectorTemperatureSequence\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,3022)\":{tag:\"(0014,3022)\",vr:\"ST\",name:\"SensorName\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,3024)\":{tag:\"(0014,3024)\",vr:\"DS\",name:\"HorizontalOffsetOfSensor\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,3026)\":{tag:\"(0014,3026)\",vr:\"DS\",name:\"VerticalOffsetOfSensor\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,3028)\":{tag:\"(0014,3028)\",vr:\"DS\",name:\"SensorTemperature\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,3040)\":{tag:\"(0014,3040)\",vr:\"SQ\",name:\"DarkCurrentSequence\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,3050)\":{tag:\"(0014,3050)\",vr:\"ox\",name:\"DarkCurrentCounts\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,3060)\":{tag:\"(0014,3060)\",vr:\"SQ\",name:\"GainCorrectionReferenceSequence\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,3070)\":{tag:\"(0014,3070)\",vr:\"ox\",name:\"AirCounts\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,3071)\":{tag:\"(0014,3071)\",vr:\"DS\",name:\"KVUsedInGainCalibration\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,3072)\":{tag:\"(0014,3072)\",vr:\"DS\",name:\"MAUsedInGainCalibration\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,3073)\":{tag:\"(0014,3073)\",vr:\"DS\",name:\"NumberOfFramesUsedForIntegration\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,3074)\":{tag:\"(0014,3074)\",vr:\"LO\",name:\"FilterMaterialUsedInGainCalibration\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,3075)\":{tag:\"(0014,3075)\",vr:\"DS\",name:\"FilterThicknessUsedInGainCalibration\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,3076)\":{tag:\"(0014,3076)\",vr:\"DA\",name:\"DateOfGainCalibration\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,3077)\":{tag:\"(0014,3077)\",vr:\"TM\",name:\"TimeOfGainCalibration\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,3080)\":{tag:\"(0014,3080)\",vr:\"OB\",name:\"BadPixelImage\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,3099)\":{tag:\"(0014,3099)\",vr:\"LT\",name:\"CalibrationNotes\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4002)\":{tag:\"(0014,4002)\",vr:\"SQ\",name:\"PulserEquipmentSequence\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4004)\":{tag:\"(0014,4004)\",vr:\"CS\",name:\"PulserType\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4006)\":{tag:\"(0014,4006)\",vr:\"LT\",name:\"PulserNotes\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4008)\":{tag:\"(0014,4008)\",vr:\"SQ\",name:\"ReceiverEquipmentSequence\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,400A)\":{tag:\"(0014,400A)\",vr:\"CS\",name:\"AmplifierType\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,400C)\":{tag:\"(0014,400C)\",vr:\"LT\",name:\"ReceiverNotes\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,400E)\":{tag:\"(0014,400E)\",vr:\"SQ\",name:\"PreAmplifierEquipmentSequence\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,400F)\":{tag:\"(0014,400F)\",vr:\"LT\",name:\"PreAmplifierNotes\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4010)\":{tag:\"(0014,4010)\",vr:\"SQ\",name:\"TransmitTransducerSequence\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4011)\":{tag:\"(0014,4011)\",vr:\"SQ\",name:\"ReceiveTransducerSequence\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4012)\":{tag:\"(0014,4012)\",vr:\"US\",name:\"NumberOfElements\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4013)\":{tag:\"(0014,4013)\",vr:\"CS\",name:\"ElementShape\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4014)\":{tag:\"(0014,4014)\",vr:\"DS\",name:\"ElementDimensionA\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4015)\":{tag:\"(0014,4015)\",vr:\"DS\",name:\"ElementDimensionB\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4016)\":{tag:\"(0014,4016)\",vr:\"DS\",name:\"ElementPitchA\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4017)\":{tag:\"(0014,4017)\",vr:\"DS\",name:\"MeasuredBeamDimensionA\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4018)\":{tag:\"(0014,4018)\",vr:\"DS\",name:\"MeasuredBeamDimensionB\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4019)\":{tag:\"(0014,4019)\",vr:\"DS\",name:\"LocationOfMeasuredBeamDiameter\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,401A)\":{tag:\"(0014,401A)\",vr:\"DS\",name:\"NominalFrequency\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,401B)\":{tag:\"(0014,401B)\",vr:\"DS\",name:\"MeasuredCenterFrequency\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,401C)\":{tag:\"(0014,401C)\",vr:\"DS\",name:\"MeasuredBandwidth\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,401D)\":{tag:\"(0014,401D)\",vr:\"DS\",name:\"ElementPitchB\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4020)\":{tag:\"(0014,4020)\",vr:\"SQ\",name:\"PulserSettingsSequence\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4022)\":{tag:\"(0014,4022)\",vr:\"DS\",name:\"PulseWidth\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4024)\":{tag:\"(0014,4024)\",vr:\"DS\",name:\"ExcitationFrequency\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4026)\":{tag:\"(0014,4026)\",vr:\"CS\",name:\"ModulationType\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4028)\":{tag:\"(0014,4028)\",vr:\"DS\",name:\"Damping\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4030)\":{tag:\"(0014,4030)\",vr:\"SQ\",name:\"ReceiverSettingsSequence\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4031)\":{tag:\"(0014,4031)\",vr:\"DS\",name:\"AcquiredSoundpathLength\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4032)\":{tag:\"(0014,4032)\",vr:\"CS\",name:\"AcquisitionCompressionType\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4033)\":{tag:\"(0014,4033)\",vr:\"IS\",name:\"AcquisitionSampleSize\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4034)\":{tag:\"(0014,4034)\",vr:\"DS\",name:\"RectifierSmoothing\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4035)\":{tag:\"(0014,4035)\",vr:\"SQ\",name:\"DACSequence\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4036)\":{tag:\"(0014,4036)\",vr:\"CS\",name:\"DACType\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4038)\":{tag:\"(0014,4038)\",vr:\"DS\",name:\"DACGainPoints\",vm:\"1-n\",version:\"DICOM/DICONDE\"},\"(0014,403A)\":{tag:\"(0014,403A)\",vr:\"DS\",name:\"DACTimePoints\",vm:\"1-n\",version:\"DICOM/DICONDE\"},\"(0014,403C)\":{tag:\"(0014,403C)\",vr:\"DS\",name:\"DACAmplitude\",vm:\"1-n\",version:\"DICOM/DICONDE\"},\"(0014,4040)\":{tag:\"(0014,4040)\",vr:\"SQ\",name:\"PreAmplifierSettingsSequence\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4050)\":{tag:\"(0014,4050)\",vr:\"SQ\",name:\"TransmitTransducerSettingsSequence\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4051)\":{tag:\"(0014,4051)\",vr:\"SQ\",name:\"ReceiveTransducerSettingsSequence\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4052)\":{tag:\"(0014,4052)\",vr:\"DS\",name:\"IncidentAngle\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4054)\":{tag:\"(0014,4054)\",vr:\"ST\",name:\"CouplingTechnique\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4056)\":{tag:\"(0014,4056)\",vr:\"ST\",name:\"CouplingMedium\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4057)\":{tag:\"(0014,4057)\",vr:\"DS\",name:\"CouplingVelocity\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4058)\":{tag:\"(0014,4058)\",vr:\"DS\",name:\"ProbeCenterLocationX\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4059)\":{tag:\"(0014,4059)\",vr:\"DS\",name:\"ProbeCenterLocationZ\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,405A)\":{tag:\"(0014,405A)\",vr:\"DS\",name:\"SoundPathLength\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,405C)\":{tag:\"(0014,405C)\",vr:\"ST\",name:\"DelayLawIdentifier\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4060)\":{tag:\"(0014,4060)\",vr:\"SQ\",name:\"GateSettingsSequence\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4062)\":{tag:\"(0014,4062)\",vr:\"DS\",name:\"GateThreshold\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4064)\":{tag:\"(0014,4064)\",vr:\"DS\",name:\"VelocityOfSound\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4070)\":{tag:\"(0014,4070)\",vr:\"SQ\",name:\"CalibrationSettingsSequence\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4072)\":{tag:\"(0014,4072)\",vr:\"ST\",name:\"CalibrationProcedure\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4074)\":{tag:\"(0014,4074)\",vr:\"SH\",name:\"ProcedureVersion\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4076)\":{tag:\"(0014,4076)\",vr:\"DA\",name:\"ProcedureCreationDate\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4078)\":{tag:\"(0014,4078)\",vr:\"DA\",name:\"ProcedureExpirationDate\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,407A)\":{tag:\"(0014,407A)\",vr:\"DA\",name:\"ProcedureLastModifiedDate\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,407C)\":{tag:\"(0014,407C)\",vr:\"TM\",name:\"CalibrationTime\",vm:\"1-n\",version:\"DICOM/DICONDE\"},\"(0014,407E)\":{tag:\"(0014,407E)\",vr:\"DA\",name:\"CalibrationDate\",vm:\"1-n\",version:\"DICOM/DICONDE\"},\"(0014,4080)\":{tag:\"(0014,4080)\",vr:\"SQ\",name:\"ProbeDriveEquipmentSequence\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4081)\":{tag:\"(0014,4081)\",vr:\"CS\",name:\"DriveType\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4082)\":{tag:\"(0014,4082)\",vr:\"LT\",name:\"ProbeDriveNotes\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4083)\":{tag:\"(0014,4083)\",vr:\"SQ\",name:\"DriveProbeSequence\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4084)\":{tag:\"(0014,4084)\",vr:\"DS\",name:\"ProbeInductance\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4085)\":{tag:\"(0014,4085)\",vr:\"DS\",name:\"ProbeResistance\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4086)\":{tag:\"(0014,4086)\",vr:\"SQ\",name:\"ReceiveProbeSequence\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4087)\":{tag:\"(0014,4087)\",vr:\"SQ\",name:\"ProbeDriveSettingsSequence\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4088)\":{tag:\"(0014,4088)\",vr:\"DS\",name:\"BridgeResistors\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4089)\":{tag:\"(0014,4089)\",vr:\"DS\",name:\"ProbeOrientationAngle\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,408B)\":{tag:\"(0014,408B)\",vr:\"DS\",name:\"UserSelectedGainY\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,408C)\":{tag:\"(0014,408C)\",vr:\"DS\",name:\"UserSelectedPhase\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,408D)\":{tag:\"(0014,408D)\",vr:\"DS\",name:\"UserSelectedOffsetX\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,408E)\":{tag:\"(0014,408E)\",vr:\"DS\",name:\"UserSelectedOffsetY\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4091)\":{tag:\"(0014,4091)\",vr:\"SQ\",name:\"ChannelSettingsSequence\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,4092)\":{tag:\"(0014,4092)\",vr:\"DS\",name:\"ChannelThreshold\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,409A)\":{tag:\"(0014,409A)\",vr:\"SQ\",name:\"ScannerSettingsSequence\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,409B)\":{tag:\"(0014,409B)\",vr:\"ST\",name:\"ScanProcedure\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,409C)\":{tag:\"(0014,409C)\",vr:\"DS\",name:\"TranslationRateX\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,409D)\":{tag:\"(0014,409D)\",vr:\"DS\",name:\"TranslationRateY\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,409F)\":{tag:\"(0014,409F)\",vr:\"DS\",name:\"ChannelOverlap\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,40A0)\":{tag:\"(0014,40A0)\",vr:\"LO\",name:\"ImageQualityIndicatorType\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,40A1)\":{tag:\"(0014,40A1)\",vr:\"LO\",name:\"ImageQualityIndicatorMaterial\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,40A2)\":{tag:\"(0014,40A2)\",vr:\"LO\",name:\"ImageQualityIndicatorSize\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,5002)\":{tag:\"(0014,5002)\",vr:\"IS\",name:\"LINACEnergy\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,5004)\":{tag:\"(0014,5004)\",vr:\"IS\",name:\"LINACOutput\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,5100)\":{tag:\"(0014,5100)\",vr:\"US\",name:\"ActiveAperture\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,5101)\":{tag:\"(0014,5101)\",vr:\"DS\",name:\"TotalAperture\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,5102)\":{tag:\"(0014,5102)\",vr:\"DS\",name:\"ApertureElevation\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,5103)\":{tag:\"(0014,5103)\",vr:\"DS\",name:\"MainLobeAngle\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,5104)\":{tag:\"(0014,5104)\",vr:\"DS\",name:\"MainRoofAngle\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,5105)\":{tag:\"(0014,5105)\",vr:\"CS\",name:\"ConnectorType\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,5106)\":{tag:\"(0014,5106)\",vr:\"SH\",name:\"WedgeModelNumber\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,5107)\":{tag:\"(0014,5107)\",vr:\"DS\",name:\"WedgeAngleFloat\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,5108)\":{tag:\"(0014,5108)\",vr:\"DS\",name:\"WedgeRoofAngle\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,5109)\":{tag:\"(0014,5109)\",vr:\"CS\",name:\"WedgeElement1Position\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,510A)\":{tag:\"(0014,510A)\",vr:\"DS\",name:\"WedgeMaterialVelocity\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,510B)\":{tag:\"(0014,510B)\",vr:\"SH\",name:\"WedgeMaterial\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,510C)\":{tag:\"(0014,510C)\",vr:\"DS\",name:\"WedgeOffsetZ\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,510D)\":{tag:\"(0014,510D)\",vr:\"DS\",name:\"WedgeOriginOffsetX\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,510E)\":{tag:\"(0014,510E)\",vr:\"DS\",name:\"WedgeTimeDelay\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,510F)\":{tag:\"(0014,510F)\",vr:\"SH\",name:\"WedgeName\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,5110)\":{tag:\"(0014,5110)\",vr:\"SH\",name:\"WedgeManufacturerName\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,5111)\":{tag:\"(0014,5111)\",vr:\"LO\",name:\"WedgeDescription\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,5112)\":{tag:\"(0014,5112)\",vr:\"DS\",name:\"NominalBeamAngle\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,5113)\":{tag:\"(0014,5113)\",vr:\"DS\",name:\"WedgeOffsetX\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,5114)\":{tag:\"(0014,5114)\",vr:\"DS\",name:\"WedgeOffsetY\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,5115)\":{tag:\"(0014,5115)\",vr:\"DS\",name:\"WedgeTotalLength\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,5116)\":{tag:\"(0014,5116)\",vr:\"DS\",name:\"WedgeInContactLength\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,5117)\":{tag:\"(0014,5117)\",vr:\"DS\",name:\"WedgeFrontGap\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,5118)\":{tag:\"(0014,5118)\",vr:\"DS\",name:\"WedgeTotalHeight\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,5119)\":{tag:\"(0014,5119)\",vr:\"DS\",name:\"WedgeFrontHeight\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,511A)\":{tag:\"(0014,511A)\",vr:\"DS\",name:\"WedgeRearHeight\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,511B)\":{tag:\"(0014,511B)\",vr:\"DS\",name:\"WedgeTotalWidth\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,511C)\":{tag:\"(0014,511C)\",vr:\"DS\",name:\"WedgeInContactWidth\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,511D)\":{tag:\"(0014,511D)\",vr:\"DS\",name:\"WedgeChamferHeight\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,511E)\":{tag:\"(0014,511E)\",vr:\"CS\",name:\"WedgeCurve\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0014,511F)\":{tag:\"(0014,511F)\",vr:\"DS\",name:\"RadiusAlongWedge\",vm:\"1\",version:\"DICOM/DICONDE\"},\"(0012,0086)\":{tag:\"(0012,0086)\",vr:\"DA\",name:\"EthicsCommitteeApprovalEffectivenessStartDate\",vm:\"1\",version:\"DICOM\"},\"(0012,0087)\":{tag:\"(0012,0087)\",vr:\"DA\",name:\"EthicsCommitteeApprovalEffectivenessEndDate\",vm:\"1\",version:\"DICOM\"},\"(0014,0100)\":{tag:\"(0014,0100)\",vr:\"LO\",name:\"ComponentWelderIDs\",vm:\"1-n\",version:\"DICOM\"},\"(0014,0101)\":{tag:\"(0014,0101)\",vr:\"CS\",name:\"SecondaryApprovalStatus\",vm:\"1\",version:\"DICOM\"},\"(0014,0102)\":{tag:\"(0014,0102)\",vr:\"DA\",name:\"SecondaryReviewDate\",vm:\"1\",version:\"DICOM\"},\"(0014,0103)\":{tag:\"(0014,0103)\",vr:\"TM\",name:\"SecondaryReviewTime\",vm:\"1\",version:\"DICOM\"},\"(0014,0104)\":{tag:\"(0014,0104)\",vr:\"PN\",name:\"SecondaryReviewerName\",vm:\"1\",version:\"DICOM\"},\"(0014,0105)\":{tag:\"(0014,0105)\",vr:\"ST\",name:\"RepairID\",vm:\"1\",version:\"DICOM\"},\"(0014,0106)\":{tag:\"(0014,0106)\",vr:\"SQ\",name:\"MultipleComponentApprovalSequence\",vm:\"1\",version:\"DICOM\"},\"(0014,0107)\":{tag:\"(0014,0107)\",vr:\"CS\",name:\"OtherApprovalStatus\",vm:\"1-n\",version:\"DICOM\"},\"(0014,0108)\":{tag:\"(0014,0108)\",vr:\"CS\",name:\"OtherSecondaryApprovalStatus\",vm:\"1-n\",version:\"DICOM\"},\"(0016,0001)\":{tag:\"(0016,0001)\",vr:\"DS\",name:\"WhitePoint\",vm:\"1\",version:\"DICOM\"},\"(0016,0002)\":{tag:\"(0016,0002)\",vr:\"DS\",name:\"PrimaryChromaticities\",vm:\"3\",version:\"DICOM\"},\"(0016,0003)\":{tag:\"(0016,0003)\",vr:\"UT\",name:\"BatteryLevel\",vm:\"1\",version:\"DICOM\"},\"(0016,0004)\":{tag:\"(0016,0004)\",vr:\"DS\",name:\"ExposureTimeInSeconds\",vm:\"1\",version:\"DICOM\"},\"(0016,0005)\":{tag:\"(0016,0005)\",vr:\"DS\",name:\"FNumber\",vm:\"1\",version:\"DICOM\"},\"(0016,0006)\":{tag:\"(0016,0006)\",vr:\"IS\",name:\"OECFRows\",vm:\"1\",version:\"DICOM\"},\"(0016,0007)\":{tag:\"(0016,0007)\",vr:\"IS\",name:\"OECFColumns\",vm:\"1\",version:\"DICOM\"},\"(0016,0008)\":{tag:\"(0016,0008)\",vr:\"UC\",name:\"OECFColumnNames\",vm:\"1-n\",version:\"DICOM\"},\"(0016,0009)\":{tag:\"(0016,0009)\",vr:\"DS\",name:\"OECFValues\",vm:\"1-n\",version:\"DICOM\"},\"(0016,000A)\":{tag:\"(0016,000A)\",vr:\"IS\",name:\"SpatialFrequencyResponseRows\",vm:\"1\",version:\"DICOM\"},\"(0016,000B)\":{tag:\"(0016,000B)\",vr:\"IS\",name:\"SpatialFrequencyResponseColumns\",vm:\"1\",version:\"DICOM\"},\"(0016,000C)\":{tag:\"(0016,000C)\",vr:\"UC\",name:\"SpatialFrequencyResponseColumnNames\",vm:\"1-n\",version:\"DICOM\"},\"(0016,000D)\":{tag:\"(0016,000D)\",vr:\"DS\",name:\"SpatialFrequencyResponseValues\",vm:\"1-n\",version:\"DICOM\"},\"(0016,000E)\":{tag:\"(0016,000E)\",vr:\"IS\",name:\"ColorFilterArrayPatternRows\",vm:\"1\",version:\"DICOM\"},\"(0016,000F)\":{tag:\"(0016,000F)\",vr:\"IS\",name:\"ColorFilterArrayPatternColumns\",vm:\"1\",version:\"DICOM\"},\"(0016,0010)\":{tag:\"(0016,0010)\",vr:\"DS\",name:\"ColorFilterArrayPatternValues\",vm:\"1-n\",version:\"DICOM\"},\"(0016,0011)\":{tag:\"(0016,0011)\",vr:\"US\",name:\"FlashFiringStatus\",vm:\"1\",version:\"DICOM\"},\"(0016,0012)\":{tag:\"(0016,0012)\",vr:\"US\",name:\"FlashReturnStatus\",vm:\"1\",version:\"DICOM\"},\"(0016,0013)\":{tag:\"(0016,0013)\",vr:\"US\",name:\"FlashMode\",vm:\"1\",version:\"DICOM\"},\"(0016,0014)\":{tag:\"(0016,0014)\",vr:\"US\",name:\"FlashFunctionPresent\",vm:\"1\",version:\"DICOM\"},\"(0016,0015)\":{tag:\"(0016,0015)\",vr:\"US\",name:\"FlashRedEyeMode\",vm:\"1\",version:\"DICOM\"},\"(0016,0016)\":{tag:\"(0016,0016)\",vr:\"US\",name:\"ExposureProgram\",vm:\"1\",version:\"DICOM\"},\"(0016,0017)\":{tag:\"(0016,0017)\",vr:\"UT\",name:\"SpectralSensitivity\",vm:\"1\",version:\"DICOM\"},\"(0016,0018)\":{tag:\"(0016,0018)\",vr:\"IS\",name:\"PhotographicSensitivity\",vm:\"1\",version:\"DICOM\"},\"(0016,0019)\":{tag:\"(0016,0019)\",vr:\"IS\",name:\"SelfTimerMode\",vm:\"1\",version:\"DICOM\"},\"(0016,001A)\":{tag:\"(0016,001A)\",vr:\"US\",name:\"SensitivityType\",vm:\"1\",version:\"DICOM\"},\"(0016,001B)\":{tag:\"(0016,001B)\",vr:\"IS\",name:\"StandardOutputSensitivity\",vm:\"1\",version:\"DICOM\"},\"(0016,001C)\":{tag:\"(0016,001C)\",vr:\"IS\",name:\"RecommendedExposureIndex\",vm:\"1\",version:\"DICOM\"},\"(0016,001D)\":{tag:\"(0016,001D)\",vr:\"IS\",name:\"ISOSpeed\",vm:\"1\",version:\"DICOM\"},\"(0016,001E)\":{tag:\"(0016,001E)\",vr:\"IS\",name:\"ISOSpeedLatitudeyyy\",vm:\"1\",version:\"DICOM\"},\"(0016,001F)\":{tag:\"(0016,001F)\",vr:\"IS\",name:\"ISOSpeedLatitudezzz\",vm:\"1\",version:\"DICOM\"},\"(0016,0020)\":{tag:\"(0016,0020)\",vr:\"UT\",name:\"EXIFVersion\",vm:\"1\",version:\"DICOM\"},\"(0016,0021)\":{tag:\"(0016,0021)\",vr:\"DS\",name:\"ShutterSpeedValue\",vm:\"1\",version:\"DICOM\"},\"(0016,0022)\":{tag:\"(0016,0022)\",vr:\"DS\",name:\"ApertureValue\",vm:\"1\",version:\"DICOM\"},\"(0016,0023)\":{tag:\"(0016,0023)\",vr:\"DS\",name:\"BrightnessValue\",vm:\"1\",version:\"DICOM\"},\"(0016,0024)\":{tag:\"(0016,0024)\",vr:\"DS\",name:\"ExposureBiasValue\",vm:\"1\",version:\"DICOM\"},\"(0016,0025)\":{tag:\"(0016,0025)\",vr:\"DS\",name:\"MaxApertureValue\",vm:\"1\",version:\"DICOM\"},\"(0016,0026)\":{tag:\"(0016,0026)\",vr:\"DS\",name:\"SubjectDistance\",vm:\"1\",version:\"DICOM\"},\"(0016,0027)\":{tag:\"(0016,0027)\",vr:\"US\",name:\"MeteringMode\",vm:\"1\",version:\"DICOM\"},\"(0016,0028)\":{tag:\"(0016,0028)\",vr:\"US\",name:\"LightSource\",vm:\"1\",version:\"DICOM\"},\"(0016,0029)\":{tag:\"(0016,0029)\",vr:\"DS\",name:\"FocalLength\",vm:\"1\",version:\"DICOM\"},\"(0016,002A)\":{tag:\"(0016,002A)\",vr:\"IS\",name:\"SubjectArea\",vm:\"2-4\",version:\"DICOM\"},\"(0016,002B)\":{tag:\"(0016,002B)\",vr:\"OB\",name:\"MakerNote\",vm:\"1\",version:\"DICOM\"},\"(0016,0030)\":{tag:\"(0016,0030)\",vr:\"DS\",name:\"Temperature\",vm:\"1\",version:\"DICOM\"},\"(0016,0031)\":{tag:\"(0016,0031)\",vr:\"DS\",name:\"Humidity\",vm:\"1\",version:\"DICOM\"},\"(0016,0032)\":{tag:\"(0016,0032)\",vr:\"DS\",name:\"Pressure\",vm:\"1\",version:\"DICOM\"},\"(0016,0033)\":{tag:\"(0016,0033)\",vr:\"DS\",name:\"WaterDepth\",vm:\"1\",version:\"DICOM\"},\"(0016,0034)\":{tag:\"(0016,0034)\",vr:\"DS\",name:\"Acceleration\",vm:\"1\",version:\"DICOM\"},\"(0016,0035)\":{tag:\"(0016,0035)\",vr:\"DS\",name:\"CameraElevationAngle\",vm:\"1\",version:\"DICOM\"},\"(0016,0036)\":{tag:\"(0016,0036)\",vr:\"DS\",name:\"FlashEnergy\",vm:\"1-2\",version:\"DICOM\"},\"(0016,0037)\":{tag:\"(0016,0037)\",vr:\"IS\",name:\"SubjectLocation\",vm:\"2\",version:\"DICOM\"},\"(0016,0038)\":{tag:\"(0016,0038)\",vr:\"DS\",name:\"PhotographicExposureIndex\",vm:\"1\",version:\"DICOM\"},\"(0016,0039)\":{tag:\"(0016,0039)\",vr:\"US\",name:\"SensingMethod\",vm:\"1\",version:\"DICOM\"},\"(0016,003A)\":{tag:\"(0016,003A)\",vr:\"US\",name:\"FileSource\",vm:\"1\",version:\"DICOM\"},\"(0016,003B)\":{tag:\"(0016,003B)\",vr:\"US\",name:\"SceneType\",vm:\"1\",version:\"DICOM\"},\"(0016,0041)\":{tag:\"(0016,0041)\",vr:\"US\",name:\"CustomRendered\",vm:\"1\",version:\"DICOM\"},\"(0016,0042)\":{tag:\"(0016,0042)\",vr:\"US\",name:\"ExposureMode\",vm:\"1\",version:\"DICOM\"},\"(0016,0043)\":{tag:\"(0016,0043)\",vr:\"US\",name:\"WhiteBalance\",vm:\"1\",version:\"DICOM\"},\"(0016,0044)\":{tag:\"(0016,0044)\",vr:\"DS\",name:\"DigitalZoomRatio\",vm:\"1\",version:\"DICOM\"},\"(0016,0045)\":{tag:\"(0016,0045)\",vr:\"IS\",name:\"FocalLengthIn35mmFilm\",vm:\"1\",version:\"DICOM\"},\"(0016,0046)\":{tag:\"(0016,0046)\",vr:\"US\",name:\"SceneCaptureType\",vm:\"1\",version:\"DICOM\"},\"(0016,0047)\":{tag:\"(0016,0047)\",vr:\"US\",name:\"GainControl\",vm:\"1\",version:\"DICOM\"},\"(0016,0048)\":{tag:\"(0016,0048)\",vr:\"US\",name:\"Contrast\",vm:\"1\",version:\"DICOM\"},\"(0016,0049)\":{tag:\"(0016,0049)\",vr:\"US\",name:\"Saturation\",vm:\"1\",version:\"DICOM\"},\"(0016,004A)\":{tag:\"(0016,004A)\",vr:\"US\",name:\"Sharpness\",vm:\"1\",version:\"DICOM\"},\"(0016,004B)\":{tag:\"(0016,004B)\",vr:\"OB\",name:\"DeviceSettingDescription\",vm:\"1\",version:\"DICOM\"},\"(0016,004C)\":{tag:\"(0016,004C)\",vr:\"US\",name:\"SubjectDistanceRange\",vm:\"1\",version:\"DICOM\"},\"(0016,004D)\":{tag:\"(0016,004D)\",vr:\"UT\",name:\"CameraOwnerName\",vm:\"1\",version:\"DICOM\"},\"(0016,004E)\":{tag:\"(0016,004E)\",vr:\"DS\",name:\"LensSpecification\",vm:\"4\",version:\"DICOM\"},\"(0016,004F)\":{tag:\"(0016,004F)\",vr:\"UT\",name:\"LensMake\",vm:\"1\",version:\"DICOM\"},\"(0016,0050)\":{tag:\"(0016,0050)\",vr:\"UT\",name:\"LensModel\",vm:\"1\",version:\"DICOM\"},\"(0016,0051)\":{tag:\"(0016,0051)\",vr:\"UT\",name:\"LensSerialNumber\",vm:\"1\",version:\"DICOM\"},\"(0016,0061)\":{tag:\"(0016,0061)\",vr:\"CS\",name:\"InteroperabilityIndex\",vm:\"1\",version:\"DICOM\"},\"(0016,0062)\":{tag:\"(0016,0062)\",vr:\"OB\",name:\"InteroperabilityVersion\",vm:\"1\",version:\"DICOM\"},\"(0016,0070)\":{tag:\"(0016,0070)\",vr:\"OB\",name:\"GPSVersionID\",vm:\"1\",version:\"DICOM\"},\"(0016,0071)\":{tag:\"(0016,0071)\",vr:\"CS\",name:\"GPSLatitudeRef\",vm:\"1\",version:\"DICOM\"},\"(0016,0072)\":{tag:\"(0016,0072)\",vr:\"DS\",name:\"GPSLatitude\",vm:\"3\",version:\"DICOM\"},\"(0016,0073)\":{tag:\"(0016,0073)\",vr:\"CS\",name:\"GPSLongitudeRef\",vm:\"1\",version:\"DICOM\"},\"(0016,0074)\":{tag:\"(0016,0074)\",vr:\"DS\",name:\"GPSLongitude\",vm:\"3\",version:\"DICOM\"},\"(0016,0075)\":{tag:\"(0016,0075)\",vr:\"US\",name:\"GPSAltitudeRef\",vm:\"1\",version:\"DICOM\"},\"(0016,0076)\":{tag:\"(0016,0076)\",vr:\"DS\",name:\"GPSAltitude\",vm:\"1\",version:\"DICOM\"},\"(0016,0077)\":{tag:\"(0016,0077)\",vr:\"DT\",name:\"GPSTimeStamp\",vm:\"1\",version:\"DICOM\"},\"(0016,0078)\":{tag:\"(0016,0078)\",vr:\"UT\",name:\"GPSSatellites\",vm:\"1\",version:\"DICOM\"},\"(0016,0079)\":{tag:\"(0016,0079)\",vr:\"CS\",name:\"GPSStatus\",vm:\"1\",version:\"DICOM\"},\"(0016,007A)\":{tag:\"(0016,007A)\",vr:\"CS\",name:\"GPSMeasureMode\",vm:\"1\",version:\"DICOM\"},\"(0016,007B)\":{tag:\"(0016,007B)\",vr:\"DS\",name:\"GPSDOP\",vm:\"1\",version:\"DICOM\"},\"(0016,007C)\":{tag:\"(0016,007C)\",vr:\"CS\",name:\"GPSSpeedRef\",vm:\"1\",version:\"DICOM\"},\"(0016,007D)\":{tag:\"(0016,007D)\",vr:\"DS\",name:\"GPSSpeed\",vm:\"1\",version:\"DICOM\"},\"(0016,007E)\":{tag:\"(0016,007E)\",vr:\"CS\",name:\"GPSTrackRef\",vm:\"1\",version:\"DICOM\"},\"(0016,007F)\":{tag:\"(0016,007F)\",vr:\"DS\",name:\"GPSTrack\",vm:\"1\",version:\"DICOM\"},\"(0016,0080)\":{tag:\"(0016,0080)\",vr:\"CS\",name:\"GPSImgDirectionRef\",vm:\"1\",version:\"DICOM\"},\"(0016,0081)\":{tag:\"(0016,0081)\",vr:\"DS\",name:\"GPSImgDirection\",vm:\"1\",version:\"DICOM\"},\"(0016,0082)\":{tag:\"(0016,0082)\",vr:\"UT\",name:\"GPSMapDatum\",vm:\"1\",version:\"DICOM\"},\"(0016,0083)\":{tag:\"(0016,0083)\",vr:\"CS\",name:\"GPSDestLatitudeRef\",vm:\"1\",version:\"DICOM\"},\"(0016,0084)\":{tag:\"(0016,0084)\",vr:\"DS\",name:\"GPSDestLatitude\",vm:\"3\",version:\"DICOM\"},\"(0016,0085)\":{tag:\"(0016,0085)\",vr:\"CS\",name:\"GPSDestLongitudeRef\",vm:\"1\",version:\"DICOM\"},\"(0016,0086)\":{tag:\"(0016,0086)\",vr:\"DS\",name:\"GPSDestLongitude\",vm:\"3\",version:\"DICOM\"},\"(0016,0087)\":{tag:\"(0016,0087)\",vr:\"CS\",name:\"GPSDestBearingRef\",vm:\"1\",version:\"DICOM\"},\"(0016,0088)\":{tag:\"(0016,0088)\",vr:\"DS\",name:\"GPSDestBearing\",vm:\"1\",version:\"DICOM\"},\"(0016,0089)\":{tag:\"(0016,0089)\",vr:\"CS\",name:\"GPSDestDistanceRef\",vm:\"1\",version:\"DICOM\"},\"(0016,008A)\":{tag:\"(0016,008A)\",vr:\"DS\",name:\"GPSDestDistance\",vm:\"1\",version:\"DICOM\"},\"(0016,008B)\":{tag:\"(0016,008B)\",vr:\"OB\",name:\"GPSProcessingMethod\",vm:\"1\",version:\"DICOM\"},\"(0016,008C)\":{tag:\"(0016,008C)\",vr:\"OB\",name:\"GPSAreaInformation\",vm:\"1\",version:\"DICOM\"},\"(0016,008D)\":{tag:\"(0016,008D)\",vr:\"DT\",name:\"GPSDateStamp\",vm:\"1\",version:\"DICOM\"},\"(0016,008E)\":{tag:\"(0016,008E)\",vr:\"IS\",name:\"GPSDifferential\",vm:\"1\",version:\"DICOM\"},\"(0016,1001)\":{tag:\"(0016,1001)\",vr:\"CS\",name:\"LightSourcePolarization\",vm:\"1\",version:\"DICOM\"},\"(0016,1002)\":{tag:\"(0016,1002)\",vr:\"DS\",name:\"EmitterColorTemperature\",vm:\"1\",version:\"DICOM\"},\"(0016,1003)\":{tag:\"(0016,1003)\",vr:\"CS\",name:\"ContactMethod\",vm:\"1\",version:\"DICOM\"},\"(0016,1004)\":{tag:\"(0016,1004)\",vr:\"CS\",name:\"ImmersionMedia\",vm:\"1-n\",version:\"DICOM\"},\"(0016,1005)\":{tag:\"(0016,1005)\",vr:\"DS\",name:\"OpticalMagnificationFactor\",vm:\"1\",version:\"DICOM\"},\"(0018,0010)\":{tag:\"(0018,0010)\",vr:\"LO\",name:\"ContrastBolusAgent\",vm:\"1\",version:\"DICOM\"},\"(0018,0012)\":{tag:\"(0018,0012)\",vr:\"SQ\",name:\"ContrastBolusAgentSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,0013)\":{tag:\"(0018,0013)\",vr:\"FL\",name:\"ContrastBolusT1Relaxivity\",vm:\"1\",version:\"DICOM\"},\"(0018,0014)\":{tag:\"(0018,0014)\",vr:\"SQ\",name:\"ContrastBolusAdministrationRouteSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,0015)\":{tag:\"(0018,0015)\",vr:\"CS\",name:\"BodyPartExamined\",vm:\"1\",version:\"DICOM\"},\"(0018,0020)\":{tag:\"(0018,0020)\",vr:\"CS\",name:\"ScanningSequence\",vm:\"1-n\",version:\"DICOM\"},\"(0018,0021)\":{tag:\"(0018,0021)\",vr:\"CS\",name:\"SequenceVariant\",vm:\"1-n\",version:\"DICOM\"},\"(0018,0022)\":{tag:\"(0018,0022)\",vr:\"CS\",name:\"ScanOptions\",vm:\"1-n\",version:\"DICOM\"},\"(0018,0023)\":{tag:\"(0018,0023)\",vr:\"CS\",name:\"MRAcquisitionType\",vm:\"1\",version:\"DICOM\"},\"(0018,0024)\":{tag:\"(0018,0024)\",vr:\"SH\",name:\"SequenceName\",vm:\"1\",version:\"DICOM\"},\"(0018,0025)\":{tag:\"(0018,0025)\",vr:\"CS\",name:\"AngioFlag\",vm:\"1\",version:\"DICOM\"},\"(0018,0026)\":{tag:\"(0018,0026)\",vr:\"SQ\",name:\"InterventionDrugInformationSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,0027)\":{tag:\"(0018,0027)\",vr:\"TM\",name:\"InterventionDrugStopTime\",vm:\"1\",version:\"DICOM\"},\"(0018,0028)\":{tag:\"(0018,0028)\",vr:\"DS\",name:\"InterventionDrugDose\",vm:\"1\",version:\"DICOM\"},\"(0018,0029)\":{tag:\"(0018,0029)\",vr:\"SQ\",name:\"InterventionDrugCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,002A)\":{tag:\"(0018,002A)\",vr:\"SQ\",name:\"AdditionalDrugSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,0031)\":{tag:\"(0018,0031)\",vr:\"LO\",name:\"Radiopharmaceutical\",vm:\"1\",version:\"DICOM\"},\"(0018,0034)\":{tag:\"(0018,0034)\",vr:\"LO\",name:\"InterventionDrugName\",vm:\"1\",version:\"DICOM\"},\"(0018,0035)\":{tag:\"(0018,0035)\",vr:\"TM\",name:\"InterventionDrugStartTime\",vm:\"1\",version:\"DICOM\"},\"(0018,0036)\":{tag:\"(0018,0036)\",vr:\"SQ\",name:\"InterventionSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,0038)\":{tag:\"(0018,0038)\",vr:\"CS\",name:\"InterventionStatus\",vm:\"1\",version:\"DICOM\"},\"(0018,003A)\":{tag:\"(0018,003A)\",vr:\"ST\",name:\"InterventionDescription\",vm:\"1\",version:\"DICOM\"},\"(0018,0040)\":{tag:\"(0018,0040)\",vr:\"IS\",name:\"CineRate\",vm:\"1\",version:\"DICOM\"},\"(0018,0042)\":{tag:\"(0018,0042)\",vr:\"CS\",name:\"InitialCineRunState\",vm:\"1\",version:\"DICOM\"},\"(0018,0050)\":{tag:\"(0018,0050)\",vr:\"DS\",name:\"SliceThickness\",vm:\"1\",version:\"DICOM\"},\"(0018,0060)\":{tag:\"(0018,0060)\",vr:\"DS\",name:\"KVP\",vm:\"1\",version:\"DICOM\"},\"(0018,0070)\":{tag:\"(0018,0070)\",vr:\"IS\",name:\"CountsAccumulated\",vm:\"1\",version:\"DICOM\"},\"(0018,0071)\":{tag:\"(0018,0071)\",vr:\"CS\",name:\"AcquisitionTerminationCondition\",vm:\"1\",version:\"DICOM\"},\"(0018,0072)\":{tag:\"(0018,0072)\",vr:\"DS\",name:\"EffectiveDuration\",vm:\"1\",version:\"DICOM\"},\"(0018,0073)\":{tag:\"(0018,0073)\",vr:\"CS\",name:\"AcquisitionStartCondition\",vm:\"1\",version:\"DICOM\"},\"(0018,0074)\":{tag:\"(0018,0074)\",vr:\"IS\",name:\"AcquisitionStartConditionData\",vm:\"1\",version:\"DICOM\"},\"(0018,0075)\":{tag:\"(0018,0075)\",vr:\"IS\",name:\"AcquisitionTerminationConditionData\",vm:\"1\",version:\"DICOM\"},\"(0018,0080)\":{tag:\"(0018,0080)\",vr:\"DS\",name:\"RepetitionTime\",vm:\"1\",version:\"DICOM\"},\"(0018,0081)\":{tag:\"(0018,0081)\",vr:\"DS\",name:\"EchoTime\",vm:\"1\",version:\"DICOM\"},\"(0018,0082)\":{tag:\"(0018,0082)\",vr:\"DS\",name:\"InversionTime\",vm:\"1\",version:\"DICOM\"},\"(0018,0083)\":{tag:\"(0018,0083)\",vr:\"DS\",name:\"NumberOfAverages\",vm:\"1\",version:\"DICOM\"},\"(0018,0084)\":{tag:\"(0018,0084)\",vr:\"DS\",name:\"ImagingFrequency\",vm:\"1\",version:\"DICOM\"},\"(0018,0085)\":{tag:\"(0018,0085)\",vr:\"SH\",name:\"ImagedNucleus\",vm:\"1\",version:\"DICOM\"},\"(0018,0086)\":{tag:\"(0018,0086)\",vr:\"IS\",name:\"EchoNumbers\",vm:\"1-n\",version:\"DICOM\"},\"(0018,0087)\":{tag:\"(0018,0087)\",vr:\"DS\",name:\"MagneticFieldStrength\",vm:\"1\",version:\"DICOM\"},\"(0018,0088)\":{tag:\"(0018,0088)\",vr:\"DS\",name:\"SpacingBetweenSlices\",vm:\"1\",version:\"DICOM\"},\"(0018,0089)\":{tag:\"(0018,0089)\",vr:\"IS\",name:\"NumberOfPhaseEncodingSteps\",vm:\"1\",version:\"DICOM\"},\"(0018,0090)\":{tag:\"(0018,0090)\",vr:\"DS\",name:\"DataCollectionDiameter\",vm:\"1\",version:\"DICOM\"},\"(0018,0091)\":{tag:\"(0018,0091)\",vr:\"IS\",name:\"EchoTrainLength\",vm:\"1\",version:\"DICOM\"},\"(0018,0093)\":{tag:\"(0018,0093)\",vr:\"DS\",name:\"PercentSampling\",vm:\"1\",version:\"DICOM\"},\"(0018,0094)\":{tag:\"(0018,0094)\",vr:\"DS\",name:\"PercentPhaseFieldOfView\",vm:\"1\",version:\"DICOM\"},\"(0018,0095)\":{tag:\"(0018,0095)\",vr:\"DS\",name:\"PixelBandwidth\",vm:\"1\",version:\"DICOM\"},\"(0018,1000)\":{tag:\"(0018,1000)\",vr:\"LO\",name:\"DeviceSerialNumber\",vm:\"1\",version:\"DICOM\"},\"(0018,1002)\":{tag:\"(0018,1002)\",vr:\"UI\",name:\"DeviceUID\",vm:\"1\",version:\"DICOM\"},\"(0018,1003)\":{tag:\"(0018,1003)\",vr:\"LO\",name:\"DeviceID\",vm:\"1\",version:\"DICOM\"},\"(0018,1004)\":{tag:\"(0018,1004)\",vr:\"LO\",name:\"PlateID\",vm:\"1\",version:\"DICOM\"},\"(0018,1005)\":{tag:\"(0018,1005)\",vr:\"LO\",name:\"GeneratorID\",vm:\"1\",version:\"DICOM\"},\"(0018,1006)\":{tag:\"(0018,1006)\",vr:\"LO\",name:\"GridID\",vm:\"1\",version:\"DICOM\"},\"(0018,1007)\":{tag:\"(0018,1007)\",vr:\"LO\",name:\"CassetteID\",vm:\"1\",version:\"DICOM\"},\"(0018,1008)\":{tag:\"(0018,1008)\",vr:\"LO\",name:\"GantryID\",vm:\"1\",version:\"DICOM\"},\"(0018,1009)\":{tag:\"(0018,1009)\",vr:\"UT\",name:\"UniqueDeviceIdentifier\",vm:\"1\",version:\"DICOM\"},\"(0018,100A)\":{tag:\"(0018,100A)\",vr:\"SQ\",name:\"UDISequence\",vm:\"1\",version:\"DICOM\"},\"(0018,100B)\":{tag:\"(0018,100B)\",vr:\"UI\",name:\"ManufacturerDeviceClassUID\",vm:\"1-n\",version:\"DICOM\"},\"(0018,1010)\":{tag:\"(0018,1010)\",vr:\"LO\",name:\"SecondaryCaptureDeviceID\",vm:\"1\",version:\"DICOM\"},\"(0018,1012)\":{tag:\"(0018,1012)\",vr:\"DA\",name:\"DateOfSecondaryCapture\",vm:\"1\",version:\"DICOM\"},\"(0018,1014)\":{tag:\"(0018,1014)\",vr:\"TM\",name:\"TimeOfSecondaryCapture\",vm:\"1\",version:\"DICOM\"},\"(0018,1016)\":{tag:\"(0018,1016)\",vr:\"LO\",name:\"SecondaryCaptureDeviceManufacturer\",vm:\"1\",version:\"DICOM\"},\"(0018,1018)\":{tag:\"(0018,1018)\",vr:\"LO\",name:\"SecondaryCaptureDeviceManufacturerModelName\",vm:\"1\",version:\"DICOM\"},\"(0018,1019)\":{tag:\"(0018,1019)\",vr:\"LO\",name:\"SecondaryCaptureDeviceSoftwareVersions\",vm:\"1-n\",version:\"DICOM\"},\"(0018,1020)\":{tag:\"(0018,1020)\",vr:\"LO\",name:\"SoftwareVersions\",vm:\"1-n\",version:\"DICOM\"},\"(0018,1022)\":{tag:\"(0018,1022)\",vr:\"SH\",name:\"VideoImageFormatAcquired\",vm:\"1\",version:\"DICOM\"},\"(0018,1023)\":{tag:\"(0018,1023)\",vr:\"LO\",name:\"DigitalImageFormatAcquired\",vm:\"1\",version:\"DICOM\"},\"(0018,1030)\":{tag:\"(0018,1030)\",vr:\"LO\",name:\"ProtocolName\",vm:\"1\",version:\"DICOM\"},\"(0018,1040)\":{tag:\"(0018,1040)\",vr:\"LO\",name:\"ContrastBolusRoute\",vm:\"1\",version:\"DICOM\"},\"(0018,1041)\":{tag:\"(0018,1041)\",vr:\"DS\",name:\"ContrastBolusVolume\",vm:\"1\",version:\"DICOM\"},\"(0018,1042)\":{tag:\"(0018,1042)\",vr:\"TM\",name:\"ContrastBolusStartTime\",vm:\"1\",version:\"DICOM\"},\"(0018,1043)\":{tag:\"(0018,1043)\",vr:\"TM\",name:\"ContrastBolusStopTime\",vm:\"1\",version:\"DICOM\"},\"(0018,1044)\":{tag:\"(0018,1044)\",vr:\"DS\",name:\"ContrastBolusTotalDose\",vm:\"1\",version:\"DICOM\"},\"(0018,1045)\":{tag:\"(0018,1045)\",vr:\"IS\",name:\"SyringeCounts\",vm:\"1\",version:\"DICOM\"},\"(0018,1046)\":{tag:\"(0018,1046)\",vr:\"DS\",name:\"ContrastFlowRate\",vm:\"1-n\",version:\"DICOM\"},\"(0018,1047)\":{tag:\"(0018,1047)\",vr:\"DS\",name:\"ContrastFlowDuration\",vm:\"1-n\",version:\"DICOM\"},\"(0018,1048)\":{tag:\"(0018,1048)\",vr:\"CS\",name:\"ContrastBolusIngredient\",vm:\"1\",version:\"DICOM\"},\"(0018,1049)\":{tag:\"(0018,1049)\",vr:\"DS\",name:\"ContrastBolusIngredientConcentration\",vm:\"1\",version:\"DICOM\"},\"(0018,1050)\":{tag:\"(0018,1050)\",vr:\"DS\",name:\"SpatialResolution\",vm:\"1\",version:\"DICOM\"},\"(0018,1060)\":{tag:\"(0018,1060)\",vr:\"DS\",name:\"TriggerTime\",vm:\"1\",version:\"DICOM\"},\"(0018,1061)\":{tag:\"(0018,1061)\",vr:\"LO\",name:\"TriggerSourceOrType\",vm:\"1\",version:\"DICOM\"},\"(0018,1062)\":{tag:\"(0018,1062)\",vr:\"IS\",name:\"NominalInterval\",vm:\"1\",version:\"DICOM\"},\"(0018,1063)\":{tag:\"(0018,1063)\",vr:\"DS\",name:\"FrameTime\",vm:\"1\",version:\"DICOM\"},\"(0018,1064)\":{tag:\"(0018,1064)\",vr:\"LO\",name:\"CardiacFramingType\",vm:\"1\",version:\"DICOM\"},\"(0018,1065)\":{tag:\"(0018,1065)\",vr:\"DS\",name:\"FrameTimeVector\",vm:\"1-n\",version:\"DICOM\"},\"(0018,1066)\":{tag:\"(0018,1066)\",vr:\"DS\",name:\"FrameDelay\",vm:\"1\",version:\"DICOM\"},\"(0018,1067)\":{tag:\"(0018,1067)\",vr:\"DS\",name:\"ImageTriggerDelay\",vm:\"1\",version:\"DICOM\"},\"(0018,1068)\":{tag:\"(0018,1068)\",vr:\"DS\",name:\"MultiplexGroupTimeOffset\",vm:\"1\",version:\"DICOM\"},\"(0018,1069)\":{tag:\"(0018,1069)\",vr:\"DS\",name:\"TriggerTimeOffset\",vm:\"1\",version:\"DICOM\"},\"(0018,106A)\":{tag:\"(0018,106A)\",vr:\"CS\",name:\"SynchronizationTrigger\",vm:\"1\",version:\"DICOM\"},\"(0018,106C)\":{tag:\"(0018,106C)\",vr:\"US\",name:\"SynchronizationChannel\",vm:\"2\",version:\"DICOM\"},\"(0018,106E)\":{tag:\"(0018,106E)\",vr:\"UL\",name:\"TriggerSamplePosition\",vm:\"1\",version:\"DICOM\"},\"(0018,1070)\":{tag:\"(0018,1070)\",vr:\"LO\",name:\"RadiopharmaceuticalRoute\",vm:\"1\",version:\"DICOM\"},\"(0018,1071)\":{tag:\"(0018,1071)\",vr:\"DS\",name:\"RadiopharmaceuticalVolume\",vm:\"1\",version:\"DICOM\"},\"(0018,1072)\":{tag:\"(0018,1072)\",vr:\"TM\",name:\"RadiopharmaceuticalStartTime\",vm:\"1\",version:\"DICOM\"},\"(0018,1073)\":{tag:\"(0018,1073)\",vr:\"TM\",name:\"RadiopharmaceuticalStopTime\",vm:\"1\",version:\"DICOM\"},\"(0018,1074)\":{tag:\"(0018,1074)\",vr:\"DS\",name:\"RadionuclideTotalDose\",vm:\"1\",version:\"DICOM\"},\"(0018,1075)\":{tag:\"(0018,1075)\",vr:\"DS\",name:\"RadionuclideHalfLife\",vm:\"1\",version:\"DICOM\"},\"(0018,1076)\":{tag:\"(0018,1076)\",vr:\"DS\",name:\"RadionuclidePositronFraction\",vm:\"1\",version:\"DICOM\"},\"(0018,1077)\":{tag:\"(0018,1077)\",vr:\"DS\",name:\"RadiopharmaceuticalSpecificActivity\",vm:\"1\",version:\"DICOM\"},\"(0018,1078)\":{tag:\"(0018,1078)\",vr:\"DT\",name:\"RadiopharmaceuticalStartDateTime\",vm:\"1\",version:\"DICOM\"},\"(0018,1079)\":{tag:\"(0018,1079)\",vr:\"DT\",name:\"RadiopharmaceuticalStopDateTime\",vm:\"1\",version:\"DICOM\"},\"(0018,1080)\":{tag:\"(0018,1080)\",vr:\"CS\",name:\"BeatRejectionFlag\",vm:\"1\",version:\"DICOM\"},\"(0018,1081)\":{tag:\"(0018,1081)\",vr:\"IS\",name:\"LowRRValue\",vm:\"1\",version:\"DICOM\"},\"(0018,1082)\":{tag:\"(0018,1082)\",vr:\"IS\",name:\"HighRRValue\",vm:\"1\",version:\"DICOM\"},\"(0018,1083)\":{tag:\"(0018,1083)\",vr:\"IS\",name:\"IntervalsAcquired\",vm:\"1\",version:\"DICOM\"},\"(0018,1084)\":{tag:\"(0018,1084)\",vr:\"IS\",name:\"IntervalsRejected\",vm:\"1\",version:\"DICOM\"},\"(0018,1085)\":{tag:\"(0018,1085)\",vr:\"LO\",name:\"PVCRejection\",vm:\"1\",version:\"DICOM\"},\"(0018,1086)\":{tag:\"(0018,1086)\",vr:\"IS\",name:\"SkipBeats\",vm:\"1\",version:\"DICOM\"},\"(0018,1088)\":{tag:\"(0018,1088)\",vr:\"IS\",name:\"HeartRate\",vm:\"1\",version:\"DICOM\"},\"(0018,1090)\":{tag:\"(0018,1090)\",vr:\"IS\",name:\"CardiacNumberOfImages\",vm:\"1\",version:\"DICOM\"},\"(0018,1094)\":{tag:\"(0018,1094)\",vr:\"IS\",name:\"TriggerWindow\",vm:\"1\",version:\"DICOM\"},\"(0018,1100)\":{tag:\"(0018,1100)\",vr:\"DS\",name:\"ReconstructionDiameter\",vm:\"1\",version:\"DICOM\"},\"(0018,1110)\":{tag:\"(0018,1110)\",vr:\"DS\",name:\"DistanceSourceToDetector\",vm:\"1\",version:\"DICOM\"},\"(0018,1111)\":{tag:\"(0018,1111)\",vr:\"DS\",name:\"DistanceSourceToPatient\",vm:\"1\",version:\"DICOM\"},\"(0018,1114)\":{tag:\"(0018,1114)\",vr:\"DS\",name:\"EstimatedRadiographicMagnificationFactor\",vm:\"1\",version:\"DICOM\"},\"(0018,1120)\":{tag:\"(0018,1120)\",vr:\"DS\",name:\"GantryDetectorTilt\",vm:\"1\",version:\"DICOM\"},\"(0018,1121)\":{tag:\"(0018,1121)\",vr:\"DS\",name:\"GantryDetectorSlew\",vm:\"1\",version:\"DICOM\"},\"(0018,1130)\":{tag:\"(0018,1130)\",vr:\"DS\",name:\"TableHeight\",vm:\"1\",version:\"DICOM\"},\"(0018,1131)\":{tag:\"(0018,1131)\",vr:\"DS\",name:\"TableTraverse\",vm:\"1\",version:\"DICOM\"},\"(0018,1134)\":{tag:\"(0018,1134)\",vr:\"CS\",name:\"TableMotion\",vm:\"1\",version:\"DICOM\"},\"(0018,1135)\":{tag:\"(0018,1135)\",vr:\"DS\",name:\"TableVerticalIncrement\",vm:\"1-n\",version:\"DICOM\"},\"(0018,1136)\":{tag:\"(0018,1136)\",vr:\"DS\",name:\"TableLateralIncrement\",vm:\"1-n\",version:\"DICOM\"},\"(0018,1137)\":{tag:\"(0018,1137)\",vr:\"DS\",name:\"TableLongitudinalIncrement\",vm:\"1-n\",version:\"DICOM\"},\"(0018,1138)\":{tag:\"(0018,1138)\",vr:\"DS\",name:\"TableAngle\",vm:\"1\",version:\"DICOM\"},\"(0018,113A)\":{tag:\"(0018,113A)\",vr:\"CS\",name:\"TableType\",vm:\"1\",version:\"DICOM\"},\"(0018,1140)\":{tag:\"(0018,1140)\",vr:\"CS\",name:\"RotationDirection\",vm:\"1\",version:\"DICOM\"},\"(0018,1142)\":{tag:\"(0018,1142)\",vr:\"DS\",name:\"RadialPosition\",vm:\"1-n\",version:\"DICOM\"},\"(0018,1143)\":{tag:\"(0018,1143)\",vr:\"DS\",name:\"ScanArc\",vm:\"1\",version:\"DICOM\"},\"(0018,1144)\":{tag:\"(0018,1144)\",vr:\"DS\",name:\"AngularStep\",vm:\"1\",version:\"DICOM\"},\"(0018,1145)\":{tag:\"(0018,1145)\",vr:\"DS\",name:\"CenterOfRotationOffset\",vm:\"1\",version:\"DICOM\"},\"(0018,1147)\":{tag:\"(0018,1147)\",vr:\"CS\",name:\"FieldOfViewShape\",vm:\"1\",version:\"DICOM\"},\"(0018,1149)\":{tag:\"(0018,1149)\",vr:\"IS\",name:\"FieldOfViewDimensions\",vm:\"1-2\",version:\"DICOM\"},\"(0018,1150)\":{tag:\"(0018,1150)\",vr:\"IS\",name:\"ExposureTime\",vm:\"1\",version:\"DICOM\"},\"(0018,1151)\":{tag:\"(0018,1151)\",vr:\"IS\",name:\"XRayTubeCurrent\",vm:\"1\",version:\"DICOM\"},\"(0018,1152)\":{tag:\"(0018,1152)\",vr:\"IS\",name:\"Exposure\",vm:\"1\",version:\"DICOM\"},\"(0018,1153)\":{tag:\"(0018,1153)\",vr:\"IS\",name:\"ExposureInuAs\",vm:\"1\",version:\"DICOM\"},\"(0018,1154)\":{tag:\"(0018,1154)\",vr:\"DS\",name:\"AveragePulseWidth\",vm:\"1\",version:\"DICOM\"},\"(0018,1155)\":{tag:\"(0018,1155)\",vr:\"CS\",name:\"RadiationSetting\",vm:\"1\",version:\"DICOM\"},\"(0018,1156)\":{tag:\"(0018,1156)\",vr:\"CS\",name:\"RectificationType\",vm:\"1\",version:\"DICOM\"},\"(0018,115A)\":{tag:\"(0018,115A)\",vr:\"CS\",name:\"RadiationMode\",vm:\"1\",version:\"DICOM\"},\"(0018,115E)\":{tag:\"(0018,115E)\",vr:\"DS\",name:\"ImageAndFluoroscopyAreaDoseProduct\",vm:\"1\",version:\"DICOM\"},\"(0018,1160)\":{tag:\"(0018,1160)\",vr:\"SH\",name:\"FilterType\",vm:\"1\",version:\"DICOM\"},\"(0018,1161)\":{tag:\"(0018,1161)\",vr:\"LO\",name:\"TypeOfFilters\",vm:\"1-n\",version:\"DICOM\"},\"(0018,1162)\":{tag:\"(0018,1162)\",vr:\"DS\",name:\"IntensifierSize\",vm:\"1\",version:\"DICOM\"},\"(0018,1164)\":{tag:\"(0018,1164)\",vr:\"DS\",name:\"ImagerPixelSpacing\",vm:\"2\",version:\"DICOM\"},\"(0018,1166)\":{tag:\"(0018,1166)\",vr:\"CS\",name:\"Grid\",vm:\"1-n\",version:\"DICOM\"},\"(0018,1170)\":{tag:\"(0018,1170)\",vr:\"IS\",name:\"GeneratorPower\",vm:\"1\",version:\"DICOM\"},\"(0018,1180)\":{tag:\"(0018,1180)\",vr:\"SH\",name:\"CollimatorGridName\",vm:\"1\",version:\"DICOM\"},\"(0018,1181)\":{tag:\"(0018,1181)\",vr:\"CS\",name:\"CollimatorType\",vm:\"1\",version:\"DICOM\"},\"(0018,1182)\":{tag:\"(0018,1182)\",vr:\"IS\",name:\"FocalDistance\",vm:\"1-2\",version:\"DICOM\"},\"(0018,1183)\":{tag:\"(0018,1183)\",vr:\"DS\",name:\"XFocusCenter\",vm:\"1-2\",version:\"DICOM\"},\"(0018,1184)\":{tag:\"(0018,1184)\",vr:\"DS\",name:\"YFocusCenter\",vm:\"1-2\",version:\"DICOM\"},\"(0018,1190)\":{tag:\"(0018,1190)\",vr:\"DS\",name:\"FocalSpots\",vm:\"1-n\",version:\"DICOM\"},\"(0018,1191)\":{tag:\"(0018,1191)\",vr:\"CS\",name:\"AnodeTargetMaterial\",vm:\"1\",version:\"DICOM\"},\"(0018,11A0)\":{tag:\"(0018,11A0)\",vr:\"DS\",name:\"BodyPartThickness\",vm:\"1\",version:\"DICOM\"},\"(0018,11A2)\":{tag:\"(0018,11A2)\",vr:\"DS\",name:\"CompressionForce\",vm:\"1\",version:\"DICOM\"},\"(0018,11A3)\":{tag:\"(0018,11A3)\",vr:\"DS\",name:\"CompressionPressure\",vm:\"1\",version:\"DICOM\"},\"(0018,11A4)\":{tag:\"(0018,11A4)\",vr:\"LO\",name:\"PaddleDescription\",vm:\"1\",version:\"DICOM\"},\"(0018,11A5)\":{tag:\"(0018,11A5)\",vr:\"DS\",name:\"CompressionContactArea\",vm:\"1\",version:\"DICOM\"},\"(0018,11B0)\":{tag:\"(0018,11B0)\",vr:\"LO\",name:\"AcquisitionMode\",vm:\"1\",version:\"DICOM\"},\"(0018,11B1)\":{tag:\"(0018,11B1)\",vr:\"LO\",name:\"DoseModeName\",vm:\"1\",version:\"DICOM\"},\"(0018,11B2)\":{tag:\"(0018,11B2)\",vr:\"CS\",name:\"AcquiredSubtractionMaskFlag\",vm:\"1\",version:\"DICOM\"},\"(0018,11B3)\":{tag:\"(0018,11B3)\",vr:\"CS\",name:\"FluoroscopyPersistenceFlag\",vm:\"1\",version:\"DICOM\"},\"(0018,11B4)\":{tag:\"(0018,11B4)\",vr:\"CS\",name:\"FluoroscopyLastImageHoldPersistenceFlag\",vm:\"1\",version:\"DICOM\"},\"(0018,11B5)\":{tag:\"(0018,11B5)\",vr:\"IS\",name:\"UpperLimitNumberOfPersistentFluoroscopyFrames\",vm:\"1\",version:\"DICOM\"},\"(0018,11B6)\":{tag:\"(0018,11B6)\",vr:\"CS\",name:\"ContrastBolusAutoInjectionTriggerFlag\",vm:\"1\",version:\"DICOM\"},\"(0018,11B7)\":{tag:\"(0018,11B7)\",vr:\"FD\",name:\"ContrastBolusInjectionDelay\",vm:\"1\",version:\"DICOM\"},\"(0018,11B8)\":{tag:\"(0018,11B8)\",vr:\"SQ\",name:\"XAAcquisitionPhaseDetailsSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,11B9)\":{tag:\"(0018,11B9)\",vr:\"FD\",name:\"XAAcquisitionFrameRate\",vm:\"1\",version:\"DICOM\"},\"(0018,11BA)\":{tag:\"(0018,11BA)\",vr:\"SQ\",name:\"XAPlaneDetailsSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,11BB)\":{tag:\"(0018,11BB)\",vr:\"LO\",name:\"AcquisitionFieldOfViewLabel\",vm:\"1\",version:\"DICOM\"},\"(0018,11BC)\":{tag:\"(0018,11BC)\",vr:\"SQ\",name:\"XRayFilterDetailsSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,11BD)\":{tag:\"(0018,11BD)\",vr:\"FD\",name:\"XAAcquisitionDuration\",vm:\"1\",version:\"DICOM\"},\"(0018,11BE)\":{tag:\"(0018,11BE)\",vr:\"CS\",name:\"ReconstructionPipelineType\",vm:\"1\",version:\"DICOM\"},\"(0018,11BF)\":{tag:\"(0018,11BF)\",vr:\"SQ\",name:\"ImageFilterDetailsSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,11C0)\":{tag:\"(0018,11C0)\",vr:\"CS\",name:\"AppliedMaskSubtractionFlag\",vm:\"1\",version:\"DICOM\"},\"(0018,11C1)\":{tag:\"(0018,11C1)\",vr:\"SQ\",name:\"RequestedSeriesDescriptionCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,1200)\":{tag:\"(0018,1200)\",vr:\"DA\",name:\"DateOfLastCalibration\",vm:\"1-n\",version:\"DICOM\"},\"(0018,1201)\":{tag:\"(0018,1201)\",vr:\"TM\",name:\"TimeOfLastCalibration\",vm:\"1-n\",version:\"DICOM\"},\"(0018,1202)\":{tag:\"(0018,1202)\",vr:\"DT\",name:\"DateTimeOfLastCalibration\",vm:\"1\",version:\"DICOM\"},\"(0018,1210)\":{tag:\"(0018,1210)\",vr:\"SH\",name:\"ConvolutionKernel\",vm:\"1-n\",version:\"DICOM\"},\"(0018,1242)\":{tag:\"(0018,1242)\",vr:\"IS\",name:\"ActualFrameDuration\",vm:\"1\",version:\"DICOM\"},\"(0018,1243)\":{tag:\"(0018,1243)\",vr:\"IS\",name:\"CountRate\",vm:\"1\",version:\"DICOM\"},\"(0018,1244)\":{tag:\"(0018,1244)\",vr:\"US\",name:\"PreferredPlaybackSequencing\",vm:\"1\",version:\"DICOM\"},\"(0018,1250)\":{tag:\"(0018,1250)\",vr:\"SH\",name:\"ReceiveCoilName\",vm:\"1\",version:\"DICOM\"},\"(0018,1251)\":{tag:\"(0018,1251)\",vr:\"SH\",name:\"TransmitCoilName\",vm:\"1\",version:\"DICOM\"},\"(0018,1260)\":{tag:\"(0018,1260)\",vr:\"SH\",name:\"PlateType\",vm:\"1\",version:\"DICOM\"},\"(0018,1261)\":{tag:\"(0018,1261)\",vr:\"LO\",name:\"PhosphorType\",vm:\"1\",version:\"DICOM\"},\"(0018,1271)\":{tag:\"(0018,1271)\",vr:\"FD\",name:\"WaterEquivalentDiameter\",vm:\"1\",version:\"DICOM\"},\"(0018,1272)\":{tag:\"(0018,1272)\",vr:\"SQ\",name:\"WaterEquivalentDiameterCalculationMethodCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,1300)\":{tag:\"(0018,1300)\",vr:\"DS\",name:\"ScanVelocity\",vm:\"1\",version:\"DICOM\"},\"(0018,1301)\":{tag:\"(0018,1301)\",vr:\"CS\",name:\"WholeBodyTechnique\",vm:\"1-n\",version:\"DICOM\"},\"(0018,1302)\":{tag:\"(0018,1302)\",vr:\"IS\",name:\"ScanLength\",vm:\"1\",version:\"DICOM\"},\"(0018,1310)\":{tag:\"(0018,1310)\",vr:\"US\",name:\"AcquisitionMatrix\",vm:\"4\",version:\"DICOM\"},\"(0018,1312)\":{tag:\"(0018,1312)\",vr:\"CS\",name:\"InPlanePhaseEncodingDirection\",vm:\"1\",version:\"DICOM\"},\"(0018,1314)\":{tag:\"(0018,1314)\",vr:\"DS\",name:\"FlipAngle\",vm:\"1\",version:\"DICOM\"},\"(0018,1315)\":{tag:\"(0018,1315)\",vr:\"CS\",name:\"VariableFlipAngleFlag\",vm:\"1\",version:\"DICOM\"},\"(0018,1316)\":{tag:\"(0018,1316)\",vr:\"DS\",name:\"SAR\",vm:\"1\",version:\"DICOM\"},\"(0018,1318)\":{tag:\"(0018,1318)\",vr:\"DS\",name:\"dBdt\",vm:\"1\",version:\"DICOM\"},\"(0018,1400)\":{tag:\"(0018,1400)\",vr:\"LO\",name:\"AcquisitionDeviceProcessingDescription\",vm:\"1\",version:\"DICOM\"},\"(0018,1401)\":{tag:\"(0018,1401)\",vr:\"LO\",name:\"AcquisitionDeviceProcessingCode\",vm:\"1\",version:\"DICOM\"},\"(0018,1402)\":{tag:\"(0018,1402)\",vr:\"CS\",name:\"CassetteOrientation\",vm:\"1\",version:\"DICOM\"},\"(0018,1403)\":{tag:\"(0018,1403)\",vr:\"CS\",name:\"CassetteSize\",vm:\"1\",version:\"DICOM\"},\"(0018,1404)\":{tag:\"(0018,1404)\",vr:\"US\",name:\"ExposuresOnPlate\",vm:\"1\",version:\"DICOM\"},\"(0018,1405)\":{tag:\"(0018,1405)\",vr:\"IS\",name:\"RelativeXRayExposure\",vm:\"1\",version:\"DICOM\"},\"(0018,1411)\":{tag:\"(0018,1411)\",vr:\"DS\",name:\"ExposureIndex\",vm:\"1\",version:\"DICOM\"},\"(0018,1412)\":{tag:\"(0018,1412)\",vr:\"DS\",name:\"TargetExposureIndex\",vm:\"1\",version:\"DICOM\"},\"(0018,1413)\":{tag:\"(0018,1413)\",vr:\"DS\",name:\"DeviationIndex\",vm:\"1\",version:\"DICOM\"},\"(0018,1450)\":{tag:\"(0018,1450)\",vr:\"DS\",name:\"ColumnAngulation\",vm:\"1\",version:\"DICOM\"},\"(0018,1460)\":{tag:\"(0018,1460)\",vr:\"DS\",name:\"TomoLayerHeight\",vm:\"1\",version:\"DICOM\"},\"(0018,1470)\":{tag:\"(0018,1470)\",vr:\"DS\",name:\"TomoAngle\",vm:\"1\",version:\"DICOM\"},\"(0018,1480)\":{tag:\"(0018,1480)\",vr:\"DS\",name:\"TomoTime\",vm:\"1\",version:\"DICOM\"},\"(0018,1490)\":{tag:\"(0018,1490)\",vr:\"CS\",name:\"TomoType\",vm:\"1\",version:\"DICOM\"},\"(0018,1491)\":{tag:\"(0018,1491)\",vr:\"CS\",name:\"TomoClass\",vm:\"1\",version:\"DICOM\"},\"(0018,1495)\":{tag:\"(0018,1495)\",vr:\"IS\",name:\"NumberOfTomosynthesisSourceImages\",vm:\"1\",version:\"DICOM\"},\"(0018,1500)\":{tag:\"(0018,1500)\",vr:\"CS\",name:\"PositionerMotion\",vm:\"1\",version:\"DICOM\"},\"(0018,1508)\":{tag:\"(0018,1508)\",vr:\"CS\",name:\"PositionerType\",vm:\"1\",version:\"DICOM\"},\"(0018,1510)\":{tag:\"(0018,1510)\",vr:\"DS\",name:\"PositionerPrimaryAngle\",vm:\"1\",version:\"DICOM\"},\"(0018,1511)\":{tag:\"(0018,1511)\",vr:\"DS\",name:\"PositionerSecondaryAngle\",vm:\"1\",version:\"DICOM\"},\"(0018,1520)\":{tag:\"(0018,1520)\",vr:\"DS\",name:\"PositionerPrimaryAngleIncrement\",vm:\"1-n\",version:\"DICOM\"},\"(0018,1521)\":{tag:\"(0018,1521)\",vr:\"DS\",name:\"PositionerSecondaryAngleIncrement\",vm:\"1-n\",version:\"DICOM\"},\"(0018,1530)\":{tag:\"(0018,1530)\",vr:\"DS\",name:\"DetectorPrimaryAngle\",vm:\"1\",version:\"DICOM\"},\"(0018,1531)\":{tag:\"(0018,1531)\",vr:\"DS\",name:\"DetectorSecondaryAngle\",vm:\"1\",version:\"DICOM\"},\"(0018,1600)\":{tag:\"(0018,1600)\",vr:\"CS\",name:\"ShutterShape\",vm:\"1-3\",version:\"DICOM\"},\"(0018,1602)\":{tag:\"(0018,1602)\",vr:\"IS\",name:\"ShutterLeftVerticalEdge\",vm:\"1\",version:\"DICOM\"},\"(0018,1604)\":{tag:\"(0018,1604)\",vr:\"IS\",name:\"ShutterRightVerticalEdge\",vm:\"1\",version:\"DICOM\"},\"(0018,1606)\":{tag:\"(0018,1606)\",vr:\"IS\",name:\"ShutterUpperHorizontalEdge\",vm:\"1\",version:\"DICOM\"},\"(0018,1608)\":{tag:\"(0018,1608)\",vr:\"IS\",name:\"ShutterLowerHorizontalEdge\",vm:\"1\",version:\"DICOM\"},\"(0018,1610)\":{tag:\"(0018,1610)\",vr:\"IS\",name:\"CenterOfCircularShutter\",vm:\"2\",version:\"DICOM\"},\"(0018,1612)\":{tag:\"(0018,1612)\",vr:\"IS\",name:\"RadiusOfCircularShutter\",vm:\"1\",version:\"DICOM\"},\"(0018,1620)\":{tag:\"(0018,1620)\",vr:\"IS\",name:\"VerticesOfThePolygonalShutter\",vm:\"2-2n\",version:\"DICOM\"},\"(0018,1622)\":{tag:\"(0018,1622)\",vr:\"US\",name:\"ShutterPresentationValue\",vm:\"1\",version:\"DICOM\"},\"(0018,1623)\":{tag:\"(0018,1623)\",vr:\"US\",name:\"ShutterOverlayGroup\",vm:\"1\",version:\"DICOM\"},\"(0018,1624)\":{tag:\"(0018,1624)\",vr:\"US\",name:\"ShutterPresentationColorCIELabValue\",vm:\"3\",version:\"DICOM\"},\"(0018,1630)\":{tag:\"(0018,1630)\",vr:\"CS\",name:\"OutlineShapeType\",vm:\"1\",version:\"DICOM\"},\"(0018,1631)\":{tag:\"(0018,1631)\",vr:\"FD\",name:\"OutlineLeftVerticalEdge\",vm:\"1\",version:\"DICOM\"},\"(0018,1632)\":{tag:\"(0018,1632)\",vr:\"FD\",name:\"OutlineRightVerticalEdge\",vm:\"1\",version:\"DICOM\"},\"(0018,1633)\":{tag:\"(0018,1633)\",vr:\"FD\",name:\"OutlineUpperHorizontalEdge\",vm:\"1\",version:\"DICOM\"},\"(0018,1634)\":{tag:\"(0018,1634)\",vr:\"FD\",name:\"OutlineLowerHorizontalEdge\",vm:\"1\",version:\"DICOM\"},\"(0018,1635)\":{tag:\"(0018,1635)\",vr:\"FD\",name:\"CenterOfCircularOutline\",vm:\"2\",version:\"DICOM\"},\"(0018,1636)\":{tag:\"(0018,1636)\",vr:\"FD\",name:\"DiameterOfCircularOutline\",vm:\"1\",version:\"DICOM\"},\"(0018,1637)\":{tag:\"(0018,1637)\",vr:\"UL\",name:\"NumberOfPolygonalVertices\",vm:\"1\",version:\"DICOM\"},\"(0018,1638)\":{tag:\"(0018,1638)\",vr:\"OF\",name:\"VerticesOfThePolygonalOutline\",vm:\"1\",version:\"DICOM\"},\"(0018,1700)\":{tag:\"(0018,1700)\",vr:\"CS\",name:\"CollimatorShape\",vm:\"1-3\",version:\"DICOM\"},\"(0018,1702)\":{tag:\"(0018,1702)\",vr:\"IS\",name:\"CollimatorLeftVerticalEdge\",vm:\"1\",version:\"DICOM\"},\"(0018,1704)\":{tag:\"(0018,1704)\",vr:\"IS\",name:\"CollimatorRightVerticalEdge\",vm:\"1\",version:\"DICOM\"},\"(0018,1706)\":{tag:\"(0018,1706)\",vr:\"IS\",name:\"CollimatorUpperHorizontalEdge\",vm:\"1\",version:\"DICOM\"},\"(0018,1708)\":{tag:\"(0018,1708)\",vr:\"IS\",name:\"CollimatorLowerHorizontalEdge\",vm:\"1\",version:\"DICOM\"},\"(0018,1710)\":{tag:\"(0018,1710)\",vr:\"IS\",name:\"CenterOfCircularCollimator\",vm:\"2\",version:\"DICOM\"},\"(0018,1712)\":{tag:\"(0018,1712)\",vr:\"IS\",name:\"RadiusOfCircularCollimator\",vm:\"1\",version:\"DICOM\"},\"(0018,1720)\":{tag:\"(0018,1720)\",vr:\"IS\",name:\"VerticesOfThePolygonalCollimator\",vm:\"2-2n\",version:\"DICOM\"},\"(0018,1800)\":{tag:\"(0018,1800)\",vr:\"CS\",name:\"AcquisitionTimeSynchronized\",vm:\"1\",version:\"DICOM\"},\"(0018,1801)\":{tag:\"(0018,1801)\",vr:\"SH\",name:\"TimeSource\",vm:\"1\",version:\"DICOM\"},\"(0018,1802)\":{tag:\"(0018,1802)\",vr:\"CS\",name:\"TimeDistributionProtocol\",vm:\"1\",version:\"DICOM\"},\"(0018,1803)\":{tag:\"(0018,1803)\",vr:\"LO\",name:\"NTPSourceAddress\",vm:\"1\",version:\"DICOM\"},\"(0018,2001)\":{tag:\"(0018,2001)\",vr:\"IS\",name:\"PageNumberVector\",vm:\"1-n\",version:\"DICOM\"},\"(0018,2002)\":{tag:\"(0018,2002)\",vr:\"SH\",name:\"FrameLabelVector\",vm:\"1-n\",version:\"DICOM\"},\"(0018,2003)\":{tag:\"(0018,2003)\",vr:\"DS\",name:\"FramePrimaryAngleVector\",vm:\"1-n\",version:\"DICOM\"},\"(0018,2004)\":{tag:\"(0018,2004)\",vr:\"DS\",name:\"FrameSecondaryAngleVector\",vm:\"1-n\",version:\"DICOM\"},\"(0018,2005)\":{tag:\"(0018,2005)\",vr:\"DS\",name:\"SliceLocationVector\",vm:\"1-n\",version:\"DICOM\"},\"(0018,2006)\":{tag:\"(0018,2006)\",vr:\"SH\",name:\"DisplayWindowLabelVector\",vm:\"1-n\",version:\"DICOM\"},\"(0018,2010)\":{tag:\"(0018,2010)\",vr:\"DS\",name:\"NominalScannedPixelSpacing\",vm:\"2\",version:\"DICOM\"},\"(0018,2020)\":{tag:\"(0018,2020)\",vr:\"CS\",name:\"DigitizingDeviceTransportDirection\",vm:\"1\",version:\"DICOM\"},\"(0018,2030)\":{tag:\"(0018,2030)\",vr:\"DS\",name:\"RotationOfScannedFilm\",vm:\"1\",version:\"DICOM\"},\"(0018,2041)\":{tag:\"(0018,2041)\",vr:\"SQ\",name:\"BiopsyTargetSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,2042)\":{tag:\"(0018,2042)\",vr:\"UI\",name:\"TargetUID\",vm:\"1\",version:\"DICOM\"},\"(0018,2043)\":{tag:\"(0018,2043)\",vr:\"FL\",name:\"LocalizingCursorPosition\",vm:\"2\",version:\"DICOM\"},\"(0018,2044)\":{tag:\"(0018,2044)\",vr:\"FL\",name:\"CalculatedTargetPosition\",vm:\"3\",version:\"DICOM\"},\"(0018,2045)\":{tag:\"(0018,2045)\",vr:\"SH\",name:\"TargetLabel\",vm:\"1\",version:\"DICOM\"},\"(0018,2046)\":{tag:\"(0018,2046)\",vr:\"FL\",name:\"DisplayedZValue\",vm:\"1\",version:\"DICOM\"},\"(0018,3100)\":{tag:\"(0018,3100)\",vr:\"CS\",name:\"IVUSAcquisition\",vm:\"1\",version:\"DICOM\"},\"(0018,3101)\":{tag:\"(0018,3101)\",vr:\"DS\",name:\"IVUSPullbackRate\",vm:\"1\",version:\"DICOM\"},\"(0018,3102)\":{tag:\"(0018,3102)\",vr:\"DS\",name:\"IVUSGatedRate\",vm:\"1\",version:\"DICOM\"},\"(0018,3103)\":{tag:\"(0018,3103)\",vr:\"IS\",name:\"IVUSPullbackStartFrameNumber\",vm:\"1\",version:\"DICOM\"},\"(0018,3104)\":{tag:\"(0018,3104)\",vr:\"IS\",name:\"IVUSPullbackStopFrameNumber\",vm:\"1\",version:\"DICOM\"},\"(0018,3105)\":{tag:\"(0018,3105)\",vr:\"IS\",name:\"LesionNumber\",vm:\"1-n\",version:\"DICOM\"},\"(0018,5000)\":{tag:\"(0018,5000)\",vr:\"SH\",name:\"OutputPower\",vm:\"1-n\",version:\"DICOM\"},\"(0018,5010)\":{tag:\"(0018,5010)\",vr:\"LO\",name:\"TransducerData\",vm:\"1-n\",version:\"DICOM\"},\"(0018,5011)\":{tag:\"(0018,5011)\",vr:\"SQ\",name:\"TransducerIdentificationSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,5012)\":{tag:\"(0018,5012)\",vr:\"DS\",name:\"FocusDepth\",vm:\"1\",version:\"DICOM\"},\"(0018,5020)\":{tag:\"(0018,5020)\",vr:\"LO\",name:\"ProcessingFunction\",vm:\"1\",version:\"DICOM\"},\"(0018,5022)\":{tag:\"(0018,5022)\",vr:\"DS\",name:\"MechanicalIndex\",vm:\"1\",version:\"DICOM\"},\"(0018,5024)\":{tag:\"(0018,5024)\",vr:\"DS\",name:\"BoneThermalIndex\",vm:\"1\",version:\"DICOM\"},\"(0018,5026)\":{tag:\"(0018,5026)\",vr:\"DS\",name:\"CranialThermalIndex\",vm:\"1\",version:\"DICOM\"},\"(0018,5027)\":{tag:\"(0018,5027)\",vr:\"DS\",name:\"SoftTissueThermalIndex\",vm:\"1\",version:\"DICOM\"},\"(0018,5028)\":{tag:\"(0018,5028)\",vr:\"DS\",name:\"SoftTissueFocusThermalIndex\",vm:\"1\",version:\"DICOM\"},\"(0018,5029)\":{tag:\"(0018,5029)\",vr:\"DS\",name:\"SoftTissueSurfaceThermalIndex\",vm:\"1\",version:\"DICOM\"},\"(0018,5050)\":{tag:\"(0018,5050)\",vr:\"IS\",name:\"DepthOfScanField\",vm:\"1\",version:\"DICOM\"},\"(0018,5100)\":{tag:\"(0018,5100)\",vr:\"CS\",name:\"PatientPosition\",vm:\"1\",version:\"DICOM\"},\"(0018,5101)\":{tag:\"(0018,5101)\",vr:\"CS\",name:\"ViewPosition\",vm:\"1\",version:\"DICOM\"},\"(0018,5104)\":{tag:\"(0018,5104)\",vr:\"SQ\",name:\"ProjectionEponymousNameCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,6000)\":{tag:\"(0018,6000)\",vr:\"DS\",name:\"Sensitivity\",vm:\"1\",version:\"DICOM\"},\"(0018,6011)\":{tag:\"(0018,6011)\",vr:\"SQ\",name:\"SequenceOfUltrasoundRegions\",vm:\"1\",version:\"DICOM\"},\"(0018,6012)\":{tag:\"(0018,6012)\",vr:\"US\",name:\"RegionSpatialFormat\",vm:\"1\",version:\"DICOM\"},\"(0018,6014)\":{tag:\"(0018,6014)\",vr:\"US\",name:\"RegionDataType\",vm:\"1\",version:\"DICOM\"},\"(0018,6016)\":{tag:\"(0018,6016)\",vr:\"UL\",name:\"RegionFlags\",vm:\"1\",version:\"DICOM\"},\"(0018,6018)\":{tag:\"(0018,6018)\",vr:\"UL\",name:\"RegionLocationMinX0\",vm:\"1\",version:\"DICOM\"},\"(0018,601A)\":{tag:\"(0018,601A)\",vr:\"UL\",name:\"RegionLocationMinY0\",vm:\"1\",version:\"DICOM\"},\"(0018,601C)\":{tag:\"(0018,601C)\",vr:\"UL\",name:\"RegionLocationMaxX1\",vm:\"1\",version:\"DICOM\"},\"(0018,601E)\":{tag:\"(0018,601E)\",vr:\"UL\",name:\"RegionLocationMaxY1\",vm:\"1\",version:\"DICOM\"},\"(0018,6020)\":{tag:\"(0018,6020)\",vr:\"SL\",name:\"ReferencePixelX0\",vm:\"1\",version:\"DICOM\"},\"(0018,6022)\":{tag:\"(0018,6022)\",vr:\"SL\",name:\"ReferencePixelY0\",vm:\"1\",version:\"DICOM\"},\"(0018,6024)\":{tag:\"(0018,6024)\",vr:\"US\",name:\"PhysicalUnitsXDirection\",vm:\"1\",version:\"DICOM\"},\"(0018,6026)\":{tag:\"(0018,6026)\",vr:\"US\",name:\"PhysicalUnitsYDirection\",vm:\"1\",version:\"DICOM\"},\"(0018,6028)\":{tag:\"(0018,6028)\",vr:\"FD\",name:\"ReferencePixelPhysicalValueX\",vm:\"1\",version:\"DICOM\"},\"(0018,602A)\":{tag:\"(0018,602A)\",vr:\"FD\",name:\"ReferencePixelPhysicalValueY\",vm:\"1\",version:\"DICOM\"},\"(0018,602C)\":{tag:\"(0018,602C)\",vr:\"FD\",name:\"PhysicalDeltaX\",vm:\"1\",version:\"DICOM\"},\"(0018,602E)\":{tag:\"(0018,602E)\",vr:\"FD\",name:\"PhysicalDeltaY\",vm:\"1\",version:\"DICOM\"},\"(0018,6030)\":{tag:\"(0018,6030)\",vr:\"UL\",name:\"TransducerFrequency\",vm:\"1\",version:\"DICOM\"},\"(0018,6031)\":{tag:\"(0018,6031)\",vr:\"CS\",name:\"TransducerType\",vm:\"1\",version:\"DICOM\"},\"(0018,6032)\":{tag:\"(0018,6032)\",vr:\"UL\",name:\"PulseRepetitionFrequency\",vm:\"1\",version:\"DICOM\"},\"(0018,6034)\":{tag:\"(0018,6034)\",vr:\"FD\",name:\"DopplerCorrectionAngle\",vm:\"1\",version:\"DICOM\"},\"(0018,6036)\":{tag:\"(0018,6036)\",vr:\"FD\",name:\"SteeringAngle\",vm:\"1\",version:\"DICOM\"},\"(0018,6039)\":{tag:\"(0018,6039)\",vr:\"SL\",name:\"DopplerSampleVolumeXPosition\",vm:\"1\",version:\"DICOM\"},\"(0018,603B)\":{tag:\"(0018,603B)\",vr:\"SL\",name:\"DopplerSampleVolumeYPosition\",vm:\"1\",version:\"DICOM\"},\"(0018,603D)\":{tag:\"(0018,603D)\",vr:\"SL\",name:\"TMLinePositionX0\",vm:\"1\",version:\"DICOM\"},\"(0018,603F)\":{tag:\"(0018,603F)\",vr:\"SL\",name:\"TMLinePositionY0\",vm:\"1\",version:\"DICOM\"},\"(0018,6041)\":{tag:\"(0018,6041)\",vr:\"SL\",name:\"TMLinePositionX1\",vm:\"1\",version:\"DICOM\"},\"(0018,6043)\":{tag:\"(0018,6043)\",vr:\"SL\",name:\"TMLinePositionY1\",vm:\"1\",version:\"DICOM\"},\"(0018,6044)\":{tag:\"(0018,6044)\",vr:\"US\",name:\"PixelComponentOrganization\",vm:\"1\",version:\"DICOM\"},\"(0018,6046)\":{tag:\"(0018,6046)\",vr:\"UL\",name:\"PixelComponentMask\",vm:\"1\",version:\"DICOM\"},\"(0018,6048)\":{tag:\"(0018,6048)\",vr:\"UL\",name:\"PixelComponentRangeStart\",vm:\"1\",version:\"DICOM\"},\"(0018,604A)\":{tag:\"(0018,604A)\",vr:\"UL\",name:\"PixelComponentRangeStop\",vm:\"1\",version:\"DICOM\"},\"(0018,604C)\":{tag:\"(0018,604C)\",vr:\"US\",name:\"PixelComponentPhysicalUnits\",vm:\"1\",version:\"DICOM\"},\"(0018,604E)\":{tag:\"(0018,604E)\",vr:\"US\",name:\"PixelComponentDataType\",vm:\"1\",version:\"DICOM\"},\"(0018,6050)\":{tag:\"(0018,6050)\",vr:\"UL\",name:\"NumberOfTableBreakPoints\",vm:\"1\",version:\"DICOM\"},\"(0018,6052)\":{tag:\"(0018,6052)\",vr:\"UL\",name:\"TableOfXBreakPoints\",vm:\"1-n\",version:\"DICOM\"},\"(0018,6054)\":{tag:\"(0018,6054)\",vr:\"FD\",name:\"TableOfYBreakPoints\",vm:\"1-n\",version:\"DICOM\"},\"(0018,6056)\":{tag:\"(0018,6056)\",vr:\"UL\",name:\"NumberOfTableEntries\",vm:\"1\",version:\"DICOM\"},\"(0018,6058)\":{tag:\"(0018,6058)\",vr:\"UL\",name:\"TableOfPixelValues\",vm:\"1-n\",version:\"DICOM\"},\"(0018,605A)\":{tag:\"(0018,605A)\",vr:\"FL\",name:\"TableOfParameterValues\",vm:\"1-n\",version:\"DICOM\"},\"(0018,6060)\":{tag:\"(0018,6060)\",vr:\"FL\",name:\"RWaveTimeVector\",vm:\"1-n\",version:\"DICOM\"},\"(0018,6070)\":{tag:\"(0018,6070)\",vr:\"US\",name:\"ActiveImageAreaOverlayGroup\",vm:\"1\",version:\"DICOM\"},\"(0018,7000)\":{tag:\"(0018,7000)\",vr:\"CS\",name:\"DetectorConditionsNominalFlag\",vm:\"1\",version:\"DICOM\"},\"(0018,7001)\":{tag:\"(0018,7001)\",vr:\"DS\",name:\"DetectorTemperature\",vm:\"1\",version:\"DICOM\"},\"(0018,7004)\":{tag:\"(0018,7004)\",vr:\"CS\",name:\"DetectorType\",vm:\"1\",version:\"DICOM\"},\"(0018,7005)\":{tag:\"(0018,7005)\",vr:\"CS\",name:\"DetectorConfiguration\",vm:\"1\",version:\"DICOM\"},\"(0018,7006)\":{tag:\"(0018,7006)\",vr:\"LT\",name:\"DetectorDescription\",vm:\"1\",version:\"DICOM\"},\"(0018,7008)\":{tag:\"(0018,7008)\",vr:\"LT\",name:\"DetectorMode\",vm:\"1\",version:\"DICOM\"},\"(0018,700A)\":{tag:\"(0018,700A)\",vr:\"SH\",name:\"DetectorID\",vm:\"1\",version:\"DICOM\"},\"(0018,700C)\":{tag:\"(0018,700C)\",vr:\"DA\",name:\"DateOfLastDetectorCalibration\",vm:\"1\",version:\"DICOM\"},\"(0018,700E)\":{tag:\"(0018,700E)\",vr:\"TM\",name:\"TimeOfLastDetectorCalibration\",vm:\"1\",version:\"DICOM\"},\"(0018,7010)\":{tag:\"(0018,7010)\",vr:\"IS\",name:\"ExposuresOnDetectorSinceLastCalibration\",vm:\"1\",version:\"DICOM\"},\"(0018,7011)\":{tag:\"(0018,7011)\",vr:\"IS\",name:\"ExposuresOnDetectorSinceManufactured\",vm:\"1\",version:\"DICOM\"},\"(0018,7012)\":{tag:\"(0018,7012)\",vr:\"DS\",name:\"DetectorTimeSinceLastExposure\",vm:\"1\",version:\"DICOM\"},\"(0018,7014)\":{tag:\"(0018,7014)\",vr:\"DS\",name:\"DetectorActiveTime\",vm:\"1\",version:\"DICOM\"},\"(0018,7016)\":{tag:\"(0018,7016)\",vr:\"DS\",name:\"DetectorActivationOffsetFromExposure\",vm:\"1\",version:\"DICOM\"},\"(0018,701A)\":{tag:\"(0018,701A)\",vr:\"DS\",name:\"DetectorBinning\",vm:\"2\",version:\"DICOM\"},\"(0018,7020)\":{tag:\"(0018,7020)\",vr:\"DS\",name:\"DetectorElementPhysicalSize\",vm:\"2\",version:\"DICOM\"},\"(0018,7022)\":{tag:\"(0018,7022)\",vr:\"DS\",name:\"DetectorElementSpacing\",vm:\"2\",version:\"DICOM\"},\"(0018,7024)\":{tag:\"(0018,7024)\",vr:\"CS\",name:\"DetectorActiveShape\",vm:\"1\",version:\"DICOM\"},\"(0018,7026)\":{tag:\"(0018,7026)\",vr:\"DS\",name:\"DetectorActiveDimensions\",vm:\"1-2\",version:\"DICOM\"},\"(0018,7028)\":{tag:\"(0018,7028)\",vr:\"DS\",name:\"DetectorActiveOrigin\",vm:\"2\",version:\"DICOM\"},\"(0018,702A)\":{tag:\"(0018,702A)\",vr:\"LO\",name:\"DetectorManufacturerName\",vm:\"1\",version:\"DICOM\"},\"(0018,702B)\":{tag:\"(0018,702B)\",vr:\"LO\",name:\"DetectorManufacturerModelName\",vm:\"1\",version:\"DICOM\"},\"(0018,7030)\":{tag:\"(0018,7030)\",vr:\"DS\",name:\"FieldOfViewOrigin\",vm:\"2\",version:\"DICOM\"},\"(0018,7032)\":{tag:\"(0018,7032)\",vr:\"DS\",name:\"FieldOfViewRotation\",vm:\"1\",version:\"DICOM\"},\"(0018,7034)\":{tag:\"(0018,7034)\",vr:\"CS\",name:\"FieldOfViewHorizontalFlip\",vm:\"1\",version:\"DICOM\"},\"(0018,7036)\":{tag:\"(0018,7036)\",vr:\"FL\",name:\"PixelDataAreaOriginRelativeToFOV\",vm:\"2\",version:\"DICOM\"},\"(0018,7038)\":{tag:\"(0018,7038)\",vr:\"FL\",name:\"PixelDataAreaRotationAngleRelativeToFOV\",vm:\"1\",version:\"DICOM\"},\"(0018,7040)\":{tag:\"(0018,7040)\",vr:\"LT\",name:\"GridAbsorbingMaterial\",vm:\"1\",version:\"DICOM\"},\"(0018,7041)\":{tag:\"(0018,7041)\",vr:\"LT\",name:\"GridSpacingMaterial\",vm:\"1\",version:\"DICOM\"},\"(0018,7042)\":{tag:\"(0018,7042)\",vr:\"DS\",name:\"GridThickness\",vm:\"1\",version:\"DICOM\"},\"(0018,7044)\":{tag:\"(0018,7044)\",vr:\"DS\",name:\"GridPitch\",vm:\"1\",version:\"DICOM\"},\"(0018,7046)\":{tag:\"(0018,7046)\",vr:\"IS\",name:\"GridAspectRatio\",vm:\"2\",version:\"DICOM\"},\"(0018,7048)\":{tag:\"(0018,7048)\",vr:\"DS\",name:\"GridPeriod\",vm:\"1\",version:\"DICOM\"},\"(0018,704C)\":{tag:\"(0018,704C)\",vr:\"DS\",name:\"GridFocalDistance\",vm:\"1\",version:\"DICOM\"},\"(0018,7050)\":{tag:\"(0018,7050)\",vr:\"CS\",name:\"FilterMaterial\",vm:\"1-n\",version:\"DICOM\"},\"(0018,7052)\":{tag:\"(0018,7052)\",vr:\"DS\",name:\"FilterThicknessMinimum\",vm:\"1-n\",version:\"DICOM\"},\"(0018,7054)\":{tag:\"(0018,7054)\",vr:\"DS\",name:\"FilterThicknessMaximum\",vm:\"1-n\",version:\"DICOM\"},\"(0018,7056)\":{tag:\"(0018,7056)\",vr:\"FL\",name:\"FilterBeamPathLengthMinimum\",vm:\"1-n\",version:\"DICOM\"},\"(0018,7058)\":{tag:\"(0018,7058)\",vr:\"FL\",name:\"FilterBeamPathLengthMaximum\",vm:\"1-n\",version:\"DICOM\"},\"(0018,7060)\":{tag:\"(0018,7060)\",vr:\"CS\",name:\"ExposureControlMode\",vm:\"1\",version:\"DICOM\"},\"(0018,7062)\":{tag:\"(0018,7062)\",vr:\"LT\",name:\"ExposureControlModeDescription\",vm:\"1\",version:\"DICOM\"},\"(0018,7064)\":{tag:\"(0018,7064)\",vr:\"CS\",name:\"ExposureStatus\",vm:\"1\",version:\"DICOM\"},\"(0018,7065)\":{tag:\"(0018,7065)\",vr:\"DS\",name:\"PhototimerSetting\",vm:\"1\",version:\"DICOM\"},\"(0018,8150)\":{tag:\"(0018,8150)\",vr:\"DS\",name:\"ExposureTimeInuS\",vm:\"1\",version:\"DICOM\"},\"(0018,8151)\":{tag:\"(0018,8151)\",vr:\"DS\",name:\"XRayTubeCurrentInuA\",vm:\"1\",version:\"DICOM\"},\"(0018,9004)\":{tag:\"(0018,9004)\",vr:\"CS\",name:\"ContentQualification\",vm:\"1\",version:\"DICOM\"},\"(0018,9005)\":{tag:\"(0018,9005)\",vr:\"SH\",name:\"PulseSequenceName\",vm:\"1\",version:\"DICOM\"},\"(0018,9006)\":{tag:\"(0018,9006)\",vr:\"SQ\",name:\"MRImagingModifierSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9008)\":{tag:\"(0018,9008)\",vr:\"CS\",name:\"EchoPulseSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9009)\":{tag:\"(0018,9009)\",vr:\"CS\",name:\"InversionRecovery\",vm:\"1\",version:\"DICOM\"},\"(0018,9010)\":{tag:\"(0018,9010)\",vr:\"CS\",name:\"FlowCompensation\",vm:\"1\",version:\"DICOM\"},\"(0018,9011)\":{tag:\"(0018,9011)\",vr:\"CS\",name:\"MultipleSpinEcho\",vm:\"1\",version:\"DICOM\"},\"(0018,9012)\":{tag:\"(0018,9012)\",vr:\"CS\",name:\"MultiPlanarExcitation\",vm:\"1\",version:\"DICOM\"},\"(0018,9014)\":{tag:\"(0018,9014)\",vr:\"CS\",name:\"PhaseContrast\",vm:\"1\",version:\"DICOM\"},\"(0018,9015)\":{tag:\"(0018,9015)\",vr:\"CS\",name:\"TimeOfFlightContrast\",vm:\"1\",version:\"DICOM\"},\"(0018,9016)\":{tag:\"(0018,9016)\",vr:\"CS\",name:\"Spoiling\",vm:\"1\",version:\"DICOM\"},\"(0018,9017)\":{tag:\"(0018,9017)\",vr:\"CS\",name:\"SteadyStatePulseSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9018)\":{tag:\"(0018,9018)\",vr:\"CS\",name:\"EchoPlanarPulseSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9019)\":{tag:\"(0018,9019)\",vr:\"FD\",name:\"TagAngleFirstAxis\",vm:\"1\",version:\"DICOM\"},\"(0018,9020)\":{tag:\"(0018,9020)\",vr:\"CS\",name:\"MagnetizationTransfer\",vm:\"1\",version:\"DICOM\"},\"(0018,9021)\":{tag:\"(0018,9021)\",vr:\"CS\",name:\"T2Preparation\",vm:\"1\",version:\"DICOM\"},\"(0018,9022)\":{tag:\"(0018,9022)\",vr:\"CS\",name:\"BloodSignalNulling\",vm:\"1\",version:\"DICOM\"},\"(0018,9024)\":{tag:\"(0018,9024)\",vr:\"CS\",name:\"SaturationRecovery\",vm:\"1\",version:\"DICOM\"},\"(0018,9025)\":{tag:\"(0018,9025)\",vr:\"CS\",name:\"SpectrallySelectedSuppression\",vm:\"1\",version:\"DICOM\"},\"(0018,9026)\":{tag:\"(0018,9026)\",vr:\"CS\",name:\"SpectrallySelectedExcitation\",vm:\"1\",version:\"DICOM\"},\"(0018,9027)\":{tag:\"(0018,9027)\",vr:\"CS\",name:\"SpatialPresaturation\",vm:\"1\",version:\"DICOM\"},\"(0018,9028)\":{tag:\"(0018,9028)\",vr:\"CS\",name:\"Tagging\",vm:\"1\",version:\"DICOM\"},\"(0018,9029)\":{tag:\"(0018,9029)\",vr:\"CS\",name:\"OversamplingPhase\",vm:\"1\",version:\"DICOM\"},\"(0018,9030)\":{tag:\"(0018,9030)\",vr:\"FD\",name:\"TagSpacingFirstDimension\",vm:\"1\",version:\"DICOM\"},\"(0018,9032)\":{tag:\"(0018,9032)\",vr:\"CS\",name:\"GeometryOfKSpaceTraversal\",vm:\"1\",version:\"DICOM\"},\"(0018,9033)\":{tag:\"(0018,9033)\",vr:\"CS\",name:\"SegmentedKSpaceTraversal\",vm:\"1\",version:\"DICOM\"},\"(0018,9034)\":{tag:\"(0018,9034)\",vr:\"CS\",name:\"RectilinearPhaseEncodeReordering\",vm:\"1\",version:\"DICOM\"},\"(0018,9035)\":{tag:\"(0018,9035)\",vr:\"FD\",name:\"TagThickness\",vm:\"1\",version:\"DICOM\"},\"(0018,9036)\":{tag:\"(0018,9036)\",vr:\"CS\",name:\"PartialFourierDirection\",vm:\"1\",version:\"DICOM\"},\"(0018,9037)\":{tag:\"(0018,9037)\",vr:\"CS\",name:\"CardiacSynchronizationTechnique\",vm:\"1\",version:\"DICOM\"},\"(0018,9041)\":{tag:\"(0018,9041)\",vr:\"LO\",name:\"ReceiveCoilManufacturerName\",vm:\"1\",version:\"DICOM\"},\"(0018,9042)\":{tag:\"(0018,9042)\",vr:\"SQ\",name:\"MRReceiveCoilSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9043)\":{tag:\"(0018,9043)\",vr:\"CS\",name:\"ReceiveCoilType\",vm:\"1\",version:\"DICOM\"},\"(0018,9044)\":{tag:\"(0018,9044)\",vr:\"CS\",name:\"QuadratureReceiveCoil\",vm:\"1\",version:\"DICOM\"},\"(0018,9045)\":{tag:\"(0018,9045)\",vr:\"SQ\",name:\"MultiCoilDefinitionSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9046)\":{tag:\"(0018,9046)\",vr:\"LO\",name:\"MultiCoilConfiguration\",vm:\"1\",version:\"DICOM\"},\"(0018,9047)\":{tag:\"(0018,9047)\",vr:\"SH\",name:\"MultiCoilElementName\",vm:\"1\",version:\"DICOM\"},\"(0018,9048)\":{tag:\"(0018,9048)\",vr:\"CS\",name:\"MultiCoilElementUsed\",vm:\"1\",version:\"DICOM\"},\"(0018,9049)\":{tag:\"(0018,9049)\",vr:\"SQ\",name:\"MRTransmitCoilSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9050)\":{tag:\"(0018,9050)\",vr:\"LO\",name:\"TransmitCoilManufacturerName\",vm:\"1\",version:\"DICOM\"},\"(0018,9051)\":{tag:\"(0018,9051)\",vr:\"CS\",name:\"TransmitCoilType\",vm:\"1\",version:\"DICOM\"},\"(0018,9052)\":{tag:\"(0018,9052)\",vr:\"FD\",name:\"SpectralWidth\",vm:\"1-2\",version:\"DICOM\"},\"(0018,9053)\":{tag:\"(0018,9053)\",vr:\"FD\",name:\"ChemicalShiftReference\",vm:\"1-2\",version:\"DICOM\"},\"(0018,9054)\":{tag:\"(0018,9054)\",vr:\"CS\",name:\"VolumeLocalizationTechnique\",vm:\"1\",version:\"DICOM\"},\"(0018,9058)\":{tag:\"(0018,9058)\",vr:\"US\",name:\"MRAcquisitionFrequencyEncodingSteps\",vm:\"1\",version:\"DICOM\"},\"(0018,9059)\":{tag:\"(0018,9059)\",vr:\"CS\",name:\"Decoupling\",vm:\"1\",version:\"DICOM\"},\"(0018,9060)\":{tag:\"(0018,9060)\",vr:\"CS\",name:\"DecoupledNucleus\",vm:\"1-2\",version:\"DICOM\"},\"(0018,9061)\":{tag:\"(0018,9061)\",vr:\"FD\",name:\"DecouplingFrequency\",vm:\"1-2\",version:\"DICOM\"},\"(0018,9062)\":{tag:\"(0018,9062)\",vr:\"CS\",name:\"DecouplingMethod\",vm:\"1\",version:\"DICOM\"},\"(0018,9063)\":{tag:\"(0018,9063)\",vr:\"FD\",name:\"DecouplingChemicalShiftReference\",vm:\"1-2\",version:\"DICOM\"},\"(0018,9064)\":{tag:\"(0018,9064)\",vr:\"CS\",name:\"KSpaceFiltering\",vm:\"1\",version:\"DICOM\"},\"(0018,9065)\":{tag:\"(0018,9065)\",vr:\"CS\",name:\"TimeDomainFiltering\",vm:\"1-2\",version:\"DICOM\"},\"(0018,9066)\":{tag:\"(0018,9066)\",vr:\"US\",name:\"NumberOfZeroFills\",vm:\"1-2\",version:\"DICOM\"},\"(0018,9067)\":{tag:\"(0018,9067)\",vr:\"CS\",name:\"BaselineCorrection\",vm:\"1\",version:\"DICOM\"},\"(0018,9069)\":{tag:\"(0018,9069)\",vr:\"FD\",name:\"ParallelReductionFactorInPlane\",vm:\"1\",version:\"DICOM\"},\"(0018,9070)\":{tag:\"(0018,9070)\",vr:\"FD\",name:\"CardiacRRIntervalSpecified\",vm:\"1\",version:\"DICOM\"},\"(0018,9073)\":{tag:\"(0018,9073)\",vr:\"FD\",name:\"AcquisitionDuration\",vm:\"1\",version:\"DICOM\"},\"(0018,9074)\":{tag:\"(0018,9074)\",vr:\"DT\",name:\"FrameAcquisitionDateTime\",vm:\"1\",version:\"DICOM\"},\"(0018,9075)\":{tag:\"(0018,9075)\",vr:\"CS\",name:\"DiffusionDirectionality\",vm:\"1\",version:\"DICOM\"},\"(0018,9076)\":{tag:\"(0018,9076)\",vr:\"SQ\",name:\"DiffusionGradientDirectionSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9077)\":{tag:\"(0018,9077)\",vr:\"CS\",name:\"ParallelAcquisition\",vm:\"1\",version:\"DICOM\"},\"(0018,9078)\":{tag:\"(0018,9078)\",vr:\"CS\",name:\"ParallelAcquisitionTechnique\",vm:\"1\",version:\"DICOM\"},\"(0018,9079)\":{tag:\"(0018,9079)\",vr:\"FD\",name:\"InversionTimes\",vm:\"1-n\",version:\"DICOM\"},\"(0018,9080)\":{tag:\"(0018,9080)\",vr:\"ST\",name:\"MetaboliteMapDescription\",vm:\"1\",version:\"DICOM\"},\"(0018,9081)\":{tag:\"(0018,9081)\",vr:\"CS\",name:\"PartialFourier\",vm:\"1\",version:\"DICOM\"},\"(0018,9082)\":{tag:\"(0018,9082)\",vr:\"FD\",name:\"EffectiveEchoTime\",vm:\"1\",version:\"DICOM\"},\"(0018,9083)\":{tag:\"(0018,9083)\",vr:\"SQ\",name:\"MetaboliteMapCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9084)\":{tag:\"(0018,9084)\",vr:\"SQ\",name:\"ChemicalShiftSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9085)\":{tag:\"(0018,9085)\",vr:\"CS\",name:\"CardiacSignalSource\",vm:\"1\",version:\"DICOM\"},\"(0018,9087)\":{tag:\"(0018,9087)\",vr:\"FD\",name:\"DiffusionBValue\",vm:\"1\",version:\"DICOM\"},\"(0018,9089)\":{tag:\"(0018,9089)\",vr:\"FD\",name:\"DiffusionGradientOrientation\",vm:\"3\",version:\"DICOM\"},\"(0018,9090)\":{tag:\"(0018,9090)\",vr:\"FD\",name:\"VelocityEncodingDirection\",vm:\"3\",version:\"DICOM\"},\"(0018,9091)\":{tag:\"(0018,9091)\",vr:\"FD\",name:\"VelocityEncodingMinimumValue\",vm:\"1\",version:\"DICOM\"},\"(0018,9092)\":{tag:\"(0018,9092)\",vr:\"SQ\",name:\"VelocityEncodingAcquisitionSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9093)\":{tag:\"(0018,9093)\",vr:\"US\",name:\"NumberOfKSpaceTrajectories\",vm:\"1\",version:\"DICOM\"},\"(0018,9094)\":{tag:\"(0018,9094)\",vr:\"CS\",name:\"CoverageOfKSpace\",vm:\"1\",version:\"DICOM\"},\"(0018,9095)\":{tag:\"(0018,9095)\",vr:\"UL\",name:\"SpectroscopyAcquisitionPhaseRows\",vm:\"1\",version:\"DICOM\"},\"(0018,9098)\":{tag:\"(0018,9098)\",vr:\"FD\",name:\"TransmitterFrequency\",vm:\"1-2\",version:\"DICOM\"},\"(0018,9100)\":{tag:\"(0018,9100)\",vr:\"CS\",name:\"ResonantNucleus\",vm:\"1-2\",version:\"DICOM\"},\"(0018,9101)\":{tag:\"(0018,9101)\",vr:\"CS\",name:\"FrequencyCorrection\",vm:\"1\",version:\"DICOM\"},\"(0018,9103)\":{tag:\"(0018,9103)\",vr:\"SQ\",name:\"MRSpectroscopyFOVGeometrySequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9104)\":{tag:\"(0018,9104)\",vr:\"FD\",name:\"SlabThickness\",vm:\"1\",version:\"DICOM\"},\"(0018,9105)\":{tag:\"(0018,9105)\",vr:\"FD\",name:\"SlabOrientation\",vm:\"3\",version:\"DICOM\"},\"(0018,9106)\":{tag:\"(0018,9106)\",vr:\"FD\",name:\"MidSlabPosition\",vm:\"3\",version:\"DICOM\"},\"(0018,9107)\":{tag:\"(0018,9107)\",vr:\"SQ\",name:\"MRSpatialSaturationSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9112)\":{tag:\"(0018,9112)\",vr:\"SQ\",name:\"MRTimingAndRelatedParametersSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9114)\":{tag:\"(0018,9114)\",vr:\"SQ\",name:\"MREchoSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9115)\":{tag:\"(0018,9115)\",vr:\"SQ\",name:\"MRModifierSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9117)\":{tag:\"(0018,9117)\",vr:\"SQ\",name:\"MRDiffusionSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9118)\":{tag:\"(0018,9118)\",vr:\"SQ\",name:\"CardiacSynchronizationSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9119)\":{tag:\"(0018,9119)\",vr:\"SQ\",name:\"MRAveragesSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9125)\":{tag:\"(0018,9125)\",vr:\"SQ\",name:\"MRFOVGeometrySequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9126)\":{tag:\"(0018,9126)\",vr:\"SQ\",name:\"VolumeLocalizationSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9127)\":{tag:\"(0018,9127)\",vr:\"UL\",name:\"SpectroscopyAcquisitionDataColumns\",vm:\"1\",version:\"DICOM\"},\"(0018,9147)\":{tag:\"(0018,9147)\",vr:\"CS\",name:\"DiffusionAnisotropyType\",vm:\"1\",version:\"DICOM\"},\"(0018,9151)\":{tag:\"(0018,9151)\",vr:\"DT\",name:\"FrameReferenceDateTime\",vm:\"1\",version:\"DICOM\"},\"(0018,9152)\":{tag:\"(0018,9152)\",vr:\"SQ\",name:\"MRMetaboliteMapSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9155)\":{tag:\"(0018,9155)\",vr:\"FD\",name:\"ParallelReductionFactorOutOfPlane\",vm:\"1\",version:\"DICOM\"},\"(0018,9159)\":{tag:\"(0018,9159)\",vr:\"UL\",name:\"SpectroscopyAcquisitionOutOfPlanePhaseSteps\",vm:\"1\",version:\"DICOM\"},\"(0018,9168)\":{tag:\"(0018,9168)\",vr:\"FD\",name:\"ParallelReductionFactorSecondInPlane\",vm:\"1\",version:\"DICOM\"},\"(0018,9169)\":{tag:\"(0018,9169)\",vr:\"CS\",name:\"CardiacBeatRejectionTechnique\",vm:\"1\",version:\"DICOM\"},\"(0018,9170)\":{tag:\"(0018,9170)\",vr:\"CS\",name:\"RespiratoryMotionCompensationTechnique\",vm:\"1\",version:\"DICOM\"},\"(0018,9171)\":{tag:\"(0018,9171)\",vr:\"CS\",name:\"RespiratorySignalSource\",vm:\"1\",version:\"DICOM\"},\"(0018,9172)\":{tag:\"(0018,9172)\",vr:\"CS\",name:\"BulkMotionCompensationTechnique\",vm:\"1\",version:\"DICOM\"},\"(0018,9173)\":{tag:\"(0018,9173)\",vr:\"CS\",name:\"BulkMotionSignalSource\",vm:\"1\",version:\"DICOM\"},\"(0018,9174)\":{tag:\"(0018,9174)\",vr:\"CS\",name:\"ApplicableSafetyStandardAgency\",vm:\"1\",version:\"DICOM\"},\"(0018,9175)\":{tag:\"(0018,9175)\",vr:\"LO\",name:\"ApplicableSafetyStandardDescription\",vm:\"1\",version:\"DICOM\"},\"(0018,9176)\":{tag:\"(0018,9176)\",vr:\"SQ\",name:\"OperatingModeSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9177)\":{tag:\"(0018,9177)\",vr:\"CS\",name:\"OperatingModeType\",vm:\"1\",version:\"DICOM\"},\"(0018,9178)\":{tag:\"(0018,9178)\",vr:\"CS\",name:\"OperatingMode\",vm:\"1\",version:\"DICOM\"},\"(0018,9179)\":{tag:\"(0018,9179)\",vr:\"CS\",name:\"SpecificAbsorptionRateDefinition\",vm:\"1\",version:\"DICOM\"},\"(0018,9180)\":{tag:\"(0018,9180)\",vr:\"CS\",name:\"GradientOutputType\",vm:\"1\",version:\"DICOM\"},\"(0018,9181)\":{tag:\"(0018,9181)\",vr:\"FD\",name:\"SpecificAbsorptionRateValue\",vm:\"1\",version:\"DICOM\"},\"(0018,9182)\":{tag:\"(0018,9182)\",vr:\"FD\",name:\"GradientOutput\",vm:\"1\",version:\"DICOM\"},\"(0018,9183)\":{tag:\"(0018,9183)\",vr:\"CS\",name:\"FlowCompensationDirection\",vm:\"1\",version:\"DICOM\"},\"(0018,9184)\":{tag:\"(0018,9184)\",vr:\"FD\",name:\"TaggingDelay\",vm:\"1\",version:\"DICOM\"},\"(0018,9185)\":{tag:\"(0018,9185)\",vr:\"ST\",name:\"RespiratoryMotionCompensationTechniqueDescription\",vm:\"1\",version:\"DICOM\"},\"(0018,9186)\":{tag:\"(0018,9186)\",vr:\"SH\",name:\"RespiratorySignalSourceID\",vm:\"1\",version:\"DICOM\"},\"(0018,9197)\":{tag:\"(0018,9197)\",vr:\"SQ\",name:\"MRVelocityEncodingSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9198)\":{tag:\"(0018,9198)\",vr:\"CS\",name:\"FirstOrderPhaseCorrection\",vm:\"1\",version:\"DICOM\"},\"(0018,9199)\":{tag:\"(0018,9199)\",vr:\"CS\",name:\"WaterReferencedPhaseCorrection\",vm:\"1\",version:\"DICOM\"},\"(0018,9200)\":{tag:\"(0018,9200)\",vr:\"CS\",name:\"MRSpectroscopyAcquisitionType\",vm:\"1\",version:\"DICOM\"},\"(0018,9214)\":{tag:\"(0018,9214)\",vr:\"CS\",name:\"RespiratoryCyclePosition\",vm:\"1\",version:\"DICOM\"},\"(0018,9217)\":{tag:\"(0018,9217)\",vr:\"FD\",name:\"VelocityEncodingMaximumValue\",vm:\"1\",version:\"DICOM\"},\"(0018,9218)\":{tag:\"(0018,9218)\",vr:\"FD\",name:\"TagSpacingSecondDimension\",vm:\"1\",version:\"DICOM\"},\"(0018,9219)\":{tag:\"(0018,9219)\",vr:\"SS\",name:\"TagAngleSecondAxis\",vm:\"1\",version:\"DICOM\"},\"(0018,9220)\":{tag:\"(0018,9220)\",vr:\"FD\",name:\"FrameAcquisitionDuration\",vm:\"1\",version:\"DICOM\"},\"(0018,9226)\":{tag:\"(0018,9226)\",vr:\"SQ\",name:\"MRImageFrameTypeSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9227)\":{tag:\"(0018,9227)\",vr:\"SQ\",name:\"MRSpectroscopyFrameTypeSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9231)\":{tag:\"(0018,9231)\",vr:\"US\",name:\"MRAcquisitionPhaseEncodingStepsInPlane\",vm:\"1\",version:\"DICOM\"},\"(0018,9232)\":{tag:\"(0018,9232)\",vr:\"US\",name:\"MRAcquisitionPhaseEncodingStepsOutOfPlane\",vm:\"1\",version:\"DICOM\"},\"(0018,9234)\":{tag:\"(0018,9234)\",vr:\"UL\",name:\"SpectroscopyAcquisitionPhaseColumns\",vm:\"1\",version:\"DICOM\"},\"(0018,9236)\":{tag:\"(0018,9236)\",vr:\"CS\",name:\"CardiacCyclePosition\",vm:\"1\",version:\"DICOM\"},\"(0018,9239)\":{tag:\"(0018,9239)\",vr:\"SQ\",name:\"SpecificAbsorptionRateSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9240)\":{tag:\"(0018,9240)\",vr:\"US\",name:\"RFEchoTrainLength\",vm:\"1\",version:\"DICOM\"},\"(0018,9241)\":{tag:\"(0018,9241)\",vr:\"US\",name:\"GradientEchoTrainLength\",vm:\"1\",version:\"DICOM\"},\"(0018,9250)\":{tag:\"(0018,9250)\",vr:\"CS\",name:\"ArterialSpinLabelingContrast\",vm:\"1\",version:\"DICOM\"},\"(0018,9251)\":{tag:\"(0018,9251)\",vr:\"SQ\",name:\"MRArterialSpinLabelingSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9252)\":{tag:\"(0018,9252)\",vr:\"LO\",name:\"ASLTechniqueDescription\",vm:\"1\",version:\"DICOM\"},\"(0018,9253)\":{tag:\"(0018,9253)\",vr:\"US\",name:\"ASLSlabNumber\",vm:\"1\",version:\"DICOM\"},\"(0018,9254)\":{tag:\"(0018,9254)\",vr:\"FD\",name:\"ASLSlabThickness\",vm:\"1\",version:\"DICOM\"},\"(0018,9255)\":{tag:\"(0018,9255)\",vr:\"FD\",name:\"ASLSlabOrientation\",vm:\"3\",version:\"DICOM\"},\"(0018,9256)\":{tag:\"(0018,9256)\",vr:\"FD\",name:\"ASLMidSlabPosition\",vm:\"3\",version:\"DICOM\"},\"(0018,9257)\":{tag:\"(0018,9257)\",vr:\"CS\",name:\"ASLContext\",vm:\"1\",version:\"DICOM\"},\"(0018,9258)\":{tag:\"(0018,9258)\",vr:\"UL\",name:\"ASLPulseTrainDuration\",vm:\"1\",version:\"DICOM\"},\"(0018,9259)\":{tag:\"(0018,9259)\",vr:\"CS\",name:\"ASLCrusherFlag\",vm:\"1\",version:\"DICOM\"},\"(0018,925A)\":{tag:\"(0018,925A)\",vr:\"FD\",name:\"ASLCrusherFlowLimit\",vm:\"1\",version:\"DICOM\"},\"(0018,925B)\":{tag:\"(0018,925B)\",vr:\"LO\",name:\"ASLCrusherDescription\",vm:\"1\",version:\"DICOM\"},\"(0018,925C)\":{tag:\"(0018,925C)\",vr:\"CS\",name:\"ASLBolusCutoffFlag\",vm:\"1\",version:\"DICOM\"},\"(0018,925D)\":{tag:\"(0018,925D)\",vr:\"SQ\",name:\"ASLBolusCutoffTimingSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,925E)\":{tag:\"(0018,925E)\",vr:\"LO\",name:\"ASLBolusCutoffTechnique\",vm:\"1\",version:\"DICOM\"},\"(0018,925F)\":{tag:\"(0018,925F)\",vr:\"UL\",name:\"ASLBolusCutoffDelayTime\",vm:\"1\",version:\"DICOM\"},\"(0018,9260)\":{tag:\"(0018,9260)\",vr:\"SQ\",name:\"ASLSlabSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9295)\":{tag:\"(0018,9295)\",vr:\"FD\",name:\"ChemicalShiftMinimumIntegrationLimitInppm\",vm:\"1\",version:\"DICOM\"},\"(0018,9296)\":{tag:\"(0018,9296)\",vr:\"FD\",name:\"ChemicalShiftMaximumIntegrationLimitInppm\",vm:\"1\",version:\"DICOM\"},\"(0018,9297)\":{tag:\"(0018,9297)\",vr:\"CS\",name:\"WaterReferenceAcquisition\",vm:\"1\",version:\"DICOM\"},\"(0018,9298)\":{tag:\"(0018,9298)\",vr:\"IS\",name:\"EchoPeakPosition\",vm:\"1\",version:\"DICOM\"},\"(0018,9301)\":{tag:\"(0018,9301)\",vr:\"SQ\",name:\"CTAcquisitionTypeSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9302)\":{tag:\"(0018,9302)\",vr:\"CS\",name:\"AcquisitionType\",vm:\"1\",version:\"DICOM\"},\"(0018,9303)\":{tag:\"(0018,9303)\",vr:\"FD\",name:\"TubeAngle\",vm:\"1\",version:\"DICOM\"},\"(0018,9304)\":{tag:\"(0018,9304)\",vr:\"SQ\",name:\"CTAcquisitionDetailsSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9305)\":{tag:\"(0018,9305)\",vr:\"FD\",name:\"RevolutionTime\",vm:\"1\",version:\"DICOM\"},\"(0018,9306)\":{tag:\"(0018,9306)\",vr:\"FD\",name:\"SingleCollimationWidth\",vm:\"1\",version:\"DICOM\"},\"(0018,9307)\":{tag:\"(0018,9307)\",vr:\"FD\",name:\"TotalCollimationWidth\",vm:\"1\",version:\"DICOM\"},\"(0018,9308)\":{tag:\"(0018,9308)\",vr:\"SQ\",name:\"CTTableDynamicsSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9309)\":{tag:\"(0018,9309)\",vr:\"FD\",name:\"TableSpeed\",vm:\"1\",version:\"DICOM\"},\"(0018,9310)\":{tag:\"(0018,9310)\",vr:\"FD\",name:\"TableFeedPerRotation\",vm:\"1\",version:\"DICOM\"},\"(0018,9311)\":{tag:\"(0018,9311)\",vr:\"FD\",name:\"SpiralPitchFactor\",vm:\"1\",version:\"DICOM\"},\"(0018,9312)\":{tag:\"(0018,9312)\",vr:\"SQ\",name:\"CTGeometrySequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9313)\":{tag:\"(0018,9313)\",vr:\"FD\",name:\"DataCollectionCenterPatient\",vm:\"3\",version:\"DICOM\"},\"(0018,9314)\":{tag:\"(0018,9314)\",vr:\"SQ\",name:\"CTReconstructionSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9315)\":{tag:\"(0018,9315)\",vr:\"CS\",name:\"ReconstructionAlgorithm\",vm:\"1\",version:\"DICOM\"},\"(0018,9316)\":{tag:\"(0018,9316)\",vr:\"CS\",name:\"ConvolutionKernelGroup\",vm:\"1\",version:\"DICOM\"},\"(0018,9317)\":{tag:\"(0018,9317)\",vr:\"FD\",name:\"ReconstructionFieldOfView\",vm:\"2\",version:\"DICOM\"},\"(0018,9318)\":{tag:\"(0018,9318)\",vr:\"FD\",name:\"ReconstructionTargetCenterPatient\",vm:\"3\",version:\"DICOM\"},\"(0018,9319)\":{tag:\"(0018,9319)\",vr:\"FD\",name:\"ReconstructionAngle\",vm:\"1\",version:\"DICOM\"},\"(0018,9320)\":{tag:\"(0018,9320)\",vr:\"SH\",name:\"ImageFilter\",vm:\"1\",version:\"DICOM\"},\"(0018,9321)\":{tag:\"(0018,9321)\",vr:\"SQ\",name:\"CTExposureSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9322)\":{tag:\"(0018,9322)\",vr:\"FD\",name:\"ReconstructionPixelSpacing\",vm:\"2\",version:\"DICOM\"},\"(0018,9323)\":{tag:\"(0018,9323)\",vr:\"CS\",name:\"ExposureModulationType\",vm:\"1\",version:\"DICOM\"},\"(0018,9324)\":{tag:\"(0018,9324)\",vr:\"FD\",name:\"EstimatedDoseSaving\",vm:\"1\",version:\"DICOM\"},\"(0018,9325)\":{tag:\"(0018,9325)\",vr:\"SQ\",name:\"CTXRayDetailsSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9326)\":{tag:\"(0018,9326)\",vr:\"SQ\",name:\"CTPositionSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9327)\":{tag:\"(0018,9327)\",vr:\"FD\",name:\"TablePosition\",vm:\"1\",version:\"DICOM\"},\"(0018,9328)\":{tag:\"(0018,9328)\",vr:\"FD\",name:\"ExposureTimeInms\",vm:\"1\",version:\"DICOM\"},\"(0018,9329)\":{tag:\"(0018,9329)\",vr:\"SQ\",name:\"CTImageFrameTypeSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9330)\":{tag:\"(0018,9330)\",vr:\"FD\",name:\"XRayTubeCurrentInmA\",vm:\"1\",version:\"DICOM\"},\"(0018,9332)\":{tag:\"(0018,9332)\",vr:\"FD\",name:\"ExposureInmAs\",vm:\"1\",version:\"DICOM\"},\"(0018,9333)\":{tag:\"(0018,9333)\",vr:\"CS\",name:\"ConstantVolumeFlag\",vm:\"1\",version:\"DICOM\"},\"(0018,9334)\":{tag:\"(0018,9334)\",vr:\"CS\",name:\"FluoroscopyFlag\",vm:\"1\",version:\"DICOM\"},\"(0018,9335)\":{tag:\"(0018,9335)\",vr:\"FD\",name:\"DistanceSourceToDataCollectionCenter\",vm:\"1\",version:\"DICOM\"},\"(0018,9337)\":{tag:\"(0018,9337)\",vr:\"US\",name:\"ContrastBolusAgentNumber\",vm:\"1\",version:\"DICOM\"},\"(0018,9338)\":{tag:\"(0018,9338)\",vr:\"SQ\",name:\"ContrastBolusIngredientCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9340)\":{tag:\"(0018,9340)\",vr:\"SQ\",name:\"ContrastAdministrationProfileSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9341)\":{tag:\"(0018,9341)\",vr:\"SQ\",name:\"ContrastBolusUsageSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9342)\":{tag:\"(0018,9342)\",vr:\"CS\",name:\"ContrastBolusAgentAdministered\",vm:\"1\",version:\"DICOM\"},\"(0018,9343)\":{tag:\"(0018,9343)\",vr:\"CS\",name:\"ContrastBolusAgentDetected\",vm:\"1\",version:\"DICOM\"},\"(0018,9344)\":{tag:\"(0018,9344)\",vr:\"CS\",name:\"ContrastBolusAgentPhase\",vm:\"1\",version:\"DICOM\"},\"(0018,9345)\":{tag:\"(0018,9345)\",vr:\"FD\",name:\"CTDIvol\",vm:\"1\",version:\"DICOM\"},\"(0018,9346)\":{tag:\"(0018,9346)\",vr:\"SQ\",name:\"CTDIPhantomTypeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9351)\":{tag:\"(0018,9351)\",vr:\"FL\",name:\"CalciumScoringMassFactorPatient\",vm:\"1\",version:\"DICOM\"},\"(0018,9352)\":{tag:\"(0018,9352)\",vr:\"FL\",name:\"CalciumScoringMassFactorDevice\",vm:\"3\",version:\"DICOM\"},\"(0018,9353)\":{tag:\"(0018,9353)\",vr:\"FL\",name:\"EnergyWeightingFactor\",vm:\"1\",version:\"DICOM\"},\"(0018,9360)\":{tag:\"(0018,9360)\",vr:\"SQ\",name:\"CTAdditionalXRaySourceSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9361)\":{tag:\"(0018,9361)\",vr:\"CS\",name:\"MultienergyCTAcquisition\",vm:\"1\",version:\"DICOM\"},\"(0018,9362)\":{tag:\"(0018,9362)\",vr:\"SQ\",name:\"MultienergyCTAcquisitionSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9363)\":{tag:\"(0018,9363)\",vr:\"SQ\",name:\"MultienergyCTProcessingSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9364)\":{tag:\"(0018,9364)\",vr:\"SQ\",name:\"MultienergyCTCharacteristicsSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9365)\":{tag:\"(0018,9365)\",vr:\"SQ\",name:\"MultienergyCTXRaySourceSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9366)\":{tag:\"(0018,9366)\",vr:\"US\",name:\"XRaySourceIndex\",vm:\"1\",version:\"DICOM\"},\"(0018,9367)\":{tag:\"(0018,9367)\",vr:\"UC\",name:\"XRaySourceID\",vm:\"1\",version:\"DICOM\"},\"(0018,9368)\":{tag:\"(0018,9368)\",vr:\"CS\",name:\"MultienergySourceTechnique\",vm:\"1\",version:\"DICOM\"},\"(0018,9369)\":{tag:\"(0018,9369)\",vr:\"DT\",name:\"SourceStartDateTime\",vm:\"1\",version:\"DICOM\"},\"(0018,936A)\":{tag:\"(0018,936A)\",vr:\"DT\",name:\"SourceEndDateTime\",vm:\"1\",version:\"DICOM\"},\"(0018,936B)\":{tag:\"(0018,936B)\",vr:\"US\",name:\"SwitchingPhaseNumber\",vm:\"1\",version:\"DICOM\"},\"(0018,936C)\":{tag:\"(0018,936C)\",vr:\"DS\",name:\"SwitchingPhaseNominalDuration\",vm:\"1\",version:\"DICOM\"},\"(0018,936D)\":{tag:\"(0018,936D)\",vr:\"DS\",name:\"SwitchingPhaseTransitionDuration\",vm:\"1\",version:\"DICOM\"},\"(0018,936E)\":{tag:\"(0018,936E)\",vr:\"DS\",name:\"EffectiveBinEnergy\",vm:\"1\",version:\"DICOM\"},\"(0018,936F)\":{tag:\"(0018,936F)\",vr:\"SQ\",name:\"MultienergyCTXRayDetectorSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9370)\":{tag:\"(0018,9370)\",vr:\"US\",name:\"XRayDetectorIndex\",vm:\"1\",version:\"DICOM\"},\"(0018,9371)\":{tag:\"(0018,9371)\",vr:\"UC\",name:\"XRayDetectorID\",vm:\"1\",version:\"DICOM\"},\"(0018,9372)\":{tag:\"(0018,9372)\",vr:\"CS\",name:\"MultienergyDetectorType\",vm:\"1\",version:\"DICOM\"},\"(0018,9373)\":{tag:\"(0018,9373)\",vr:\"ST\",name:\"XRayDetectorLabel\",vm:\"1\",version:\"DICOM\"},\"(0018,9374)\":{tag:\"(0018,9374)\",vr:\"DS\",name:\"NominalMaxEnergy\",vm:\"1\",version:\"DICOM\"},\"(0018,9375)\":{tag:\"(0018,9375)\",vr:\"DS\",name:\"NominalMinEnergy\",vm:\"1\",version:\"DICOM\"},\"(0018,9376)\":{tag:\"(0018,9376)\",vr:\"US\",name:\"ReferencedXRayDetectorIndex\",vm:\"1-n\",version:\"DICOM\"},\"(0018,9377)\":{tag:\"(0018,9377)\",vr:\"US\",name:\"ReferencedXRaySourceIndex\",vm:\"1-n\",version:\"DICOM\"},\"(0018,9378)\":{tag:\"(0018,9378)\",vr:\"US\",name:\"ReferencedPathIndex\",vm:\"1-n\",version:\"DICOM\"},\"(0018,9379)\":{tag:\"(0018,9379)\",vr:\"SQ\",name:\"MultienergyCTPathSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,937A)\":{tag:\"(0018,937A)\",vr:\"US\",name:\"MultienergyCTPathIndex\",vm:\"1\",version:\"DICOM\"},\"(0018,937B)\":{tag:\"(0018,937B)\",vr:\"UT\",name:\"MultienergyAcquisitionDescription\",vm:\"1\",version:\"DICOM\"},\"(0018,937C)\":{tag:\"(0018,937C)\",vr:\"FD\",name:\"MonoenergeticEnergyEquivalent\",vm:\"1\",version:\"DICOM\"},\"(0018,937D)\":{tag:\"(0018,937D)\",vr:\"SQ\",name:\"MaterialCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,937E)\":{tag:\"(0018,937E)\",vr:\"CS\",name:\"DecompositionMethod\",vm:\"1\",version:\"DICOM\"},\"(0018,937F)\":{tag:\"(0018,937F)\",vr:\"UT\",name:\"DecompositionDescription\",vm:\"1\",version:\"DICOM\"},\"(0018,9380)\":{tag:\"(0018,9380)\",vr:\"SQ\",name:\"DecompositionAlgorithmIdentificationSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9381)\":{tag:\"(0018,9381)\",vr:\"SQ\",name:\"DecompositionMaterialSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9382)\":{tag:\"(0018,9382)\",vr:\"SQ\",name:\"MaterialAttenuationSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9383)\":{tag:\"(0018,9383)\",vr:\"DS\",name:\"PhotonEnergy\",vm:\"1\",version:\"DICOM\"},\"(0018,9384)\":{tag:\"(0018,9384)\",vr:\"DS\",name:\"XRayMassAttenuationCoefficient\",vm:\"1\",version:\"DICOM\"},\"(0018,9401)\":{tag:\"(0018,9401)\",vr:\"SQ\",name:\"ProjectionPixelCalibrationSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9402)\":{tag:\"(0018,9402)\",vr:\"FL\",name:\"DistanceSourceToIsocenter\",vm:\"1\",version:\"DICOM\"},\"(0018,9403)\":{tag:\"(0018,9403)\",vr:\"FL\",name:\"DistanceObjectToTableTop\",vm:\"1\",version:\"DICOM\"},\"(0018,9404)\":{tag:\"(0018,9404)\",vr:\"FL\",name:\"ObjectPixelSpacingInCenterOfBeam\",vm:\"2\",version:\"DICOM\"},\"(0018,9405)\":{tag:\"(0018,9405)\",vr:\"SQ\",name:\"PositionerPositionSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9406)\":{tag:\"(0018,9406)\",vr:\"SQ\",name:\"TablePositionSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9407)\":{tag:\"(0018,9407)\",vr:\"SQ\",name:\"CollimatorShapeSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9410)\":{tag:\"(0018,9410)\",vr:\"CS\",name:\"PlanesInAcquisition\",vm:\"1\",version:\"DICOM\"},\"(0018,9412)\":{tag:\"(0018,9412)\",vr:\"SQ\",name:\"XAXRFFrameCharacteristicsSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9417)\":{tag:\"(0018,9417)\",vr:\"SQ\",name:\"FrameAcquisitionSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9420)\":{tag:\"(0018,9420)\",vr:\"CS\",name:\"XRayReceptorType\",vm:\"1\",version:\"DICOM\"},\"(0018,9423)\":{tag:\"(0018,9423)\",vr:\"LO\",name:\"AcquisitionProtocolName\",vm:\"1\",version:\"DICOM\"},\"(0018,9424)\":{tag:\"(0018,9424)\",vr:\"LT\",name:\"AcquisitionProtocolDescription\",vm:\"1\",version:\"DICOM\"},\"(0018,9425)\":{tag:\"(0018,9425)\",vr:\"CS\",name:\"ContrastBolusIngredientOpaque\",vm:\"1\",version:\"DICOM\"},\"(0018,9426)\":{tag:\"(0018,9426)\",vr:\"FL\",name:\"DistanceReceptorPlaneToDetectorHousing\",vm:\"1\",version:\"DICOM\"},\"(0018,9427)\":{tag:\"(0018,9427)\",vr:\"CS\",name:\"IntensifierActiveShape\",vm:\"1\",version:\"DICOM\"},\"(0018,9428)\":{tag:\"(0018,9428)\",vr:\"FL\",name:\"IntensifierActiveDimensions\",vm:\"1-2\",version:\"DICOM\"},\"(0018,9429)\":{tag:\"(0018,9429)\",vr:\"FL\",name:\"PhysicalDetectorSize\",vm:\"2\",version:\"DICOM\"},\"(0018,9430)\":{tag:\"(0018,9430)\",vr:\"FL\",name:\"PositionOfIsocenterProjection\",vm:\"2\",version:\"DICOM\"},\"(0018,9432)\":{tag:\"(0018,9432)\",vr:\"SQ\",name:\"FieldOfViewSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9433)\":{tag:\"(0018,9433)\",vr:\"LO\",name:\"FieldOfViewDescription\",vm:\"1\",version:\"DICOM\"},\"(0018,9434)\":{tag:\"(0018,9434)\",vr:\"SQ\",name:\"ExposureControlSensingRegionsSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9435)\":{tag:\"(0018,9435)\",vr:\"CS\",name:\"ExposureControlSensingRegionShape\",vm:\"1\",version:\"DICOM\"},\"(0018,9436)\":{tag:\"(0018,9436)\",vr:\"SS\",name:\"ExposureControlSensingRegionLeftVerticalEdge\",vm:\"1\",version:\"DICOM\"},\"(0018,9437)\":{tag:\"(0018,9437)\",vr:\"SS\",name:\"ExposureControlSensingRegionRightVerticalEdge\",vm:\"1\",version:\"DICOM\"},\"(0018,9438)\":{tag:\"(0018,9438)\",vr:\"SS\",name:\"ExposureControlSensingRegionUpperHorizontalEdge\",vm:\"1\",version:\"DICOM\"},\"(0018,9439)\":{tag:\"(0018,9439)\",vr:\"SS\",name:\"ExposureControlSensingRegionLowerHorizontalEdge\",vm:\"1\",version:\"DICOM\"},\"(0018,9440)\":{tag:\"(0018,9440)\",vr:\"SS\",name:\"CenterOfCircularExposureControlSensingRegion\",vm:\"2\",version:\"DICOM\"},\"(0018,9441)\":{tag:\"(0018,9441)\",vr:\"US\",name:\"RadiusOfCircularExposureControlSensingRegion\",vm:\"1\",version:\"DICOM\"},\"(0018,9442)\":{tag:\"(0018,9442)\",vr:\"SS\",name:\"VerticesOfThePolygonalExposureControlSensingRegion\",vm:\"2-n\",version:\"DICOM\"},\"(0018,9447)\":{tag:\"(0018,9447)\",vr:\"FL\",name:\"ColumnAngulationPatient\",vm:\"1\",version:\"DICOM\"},\"(0018,9449)\":{tag:\"(0018,9449)\",vr:\"FL\",name:\"BeamAngle\",vm:\"1\",version:\"DICOM\"},\"(0018,9451)\":{tag:\"(0018,9451)\",vr:\"SQ\",name:\"FrameDetectorParametersSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9452)\":{tag:\"(0018,9452)\",vr:\"FL\",name:\"CalculatedAnatomyThickness\",vm:\"1\",version:\"DICOM\"},\"(0018,9455)\":{tag:\"(0018,9455)\",vr:\"SQ\",name:\"CalibrationSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9456)\":{tag:\"(0018,9456)\",vr:\"SQ\",name:\"ObjectThicknessSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9457)\":{tag:\"(0018,9457)\",vr:\"CS\",name:\"PlaneIdentification\",vm:\"1\",version:\"DICOM\"},\"(0018,9461)\":{tag:\"(0018,9461)\",vr:\"FL\",name:\"FieldOfViewDimensionsInFloat\",vm:\"1-2\",version:\"DICOM\"},\"(0018,9462)\":{tag:\"(0018,9462)\",vr:\"SQ\",name:\"IsocenterReferenceSystemSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9463)\":{tag:\"(0018,9463)\",vr:\"FL\",name:\"PositionerIsocenterPrimaryAngle\",vm:\"1\",version:\"DICOM\"},\"(0018,9464)\":{tag:\"(0018,9464)\",vr:\"FL\",name:\"PositionerIsocenterSecondaryAngle\",vm:\"1\",version:\"DICOM\"},\"(0018,9465)\":{tag:\"(0018,9465)\",vr:\"FL\",name:\"PositionerIsocenterDetectorRotationAngle\",vm:\"1\",version:\"DICOM\"},\"(0018,9466)\":{tag:\"(0018,9466)\",vr:\"FL\",name:\"TableXPositionToIsocenter\",vm:\"1\",version:\"DICOM\"},\"(0018,9467)\":{tag:\"(0018,9467)\",vr:\"FL\",name:\"TableYPositionToIsocenter\",vm:\"1\",version:\"DICOM\"},\"(0018,9468)\":{tag:\"(0018,9468)\",vr:\"FL\",name:\"TableZPositionToIsocenter\",vm:\"1\",version:\"DICOM\"},\"(0018,9469)\":{tag:\"(0018,9469)\",vr:\"FL\",name:\"TableHorizontalRotationAngle\",vm:\"1\",version:\"DICOM\"},\"(0018,9470)\":{tag:\"(0018,9470)\",vr:\"FL\",name:\"TableHeadTiltAngle\",vm:\"1\",version:\"DICOM\"},\"(0018,9471)\":{tag:\"(0018,9471)\",vr:\"FL\",name:\"TableCradleTiltAngle\",vm:\"1\",version:\"DICOM\"},\"(0018,9472)\":{tag:\"(0018,9472)\",vr:\"SQ\",name:\"FrameDisplayShutterSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9473)\":{tag:\"(0018,9473)\",vr:\"FL\",name:\"AcquiredImageAreaDoseProduct\",vm:\"1\",version:\"DICOM\"},\"(0018,9474)\":{tag:\"(0018,9474)\",vr:\"CS\",name:\"CArmPositionerTabletopRelationship\",vm:\"1\",version:\"DICOM\"},\"(0018,9476)\":{tag:\"(0018,9476)\",vr:\"SQ\",name:\"XRayGeometrySequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9477)\":{tag:\"(0018,9477)\",vr:\"SQ\",name:\"IrradiationEventIdentificationSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9504)\":{tag:\"(0018,9504)\",vr:\"SQ\",name:\"XRay3DFrameTypeSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9506)\":{tag:\"(0018,9506)\",vr:\"SQ\",name:\"ContributingSourcesSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9507)\":{tag:\"(0018,9507)\",vr:\"SQ\",name:\"XRay3DAcquisitionSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9508)\":{tag:\"(0018,9508)\",vr:\"FL\",name:\"PrimaryPositionerScanArc\",vm:\"1\",version:\"DICOM\"},\"(0018,9509)\":{tag:\"(0018,9509)\",vr:\"FL\",name:\"SecondaryPositionerScanArc\",vm:\"1\",version:\"DICOM\"},\"(0018,9510)\":{tag:\"(0018,9510)\",vr:\"FL\",name:\"PrimaryPositionerScanStartAngle\",vm:\"1\",version:\"DICOM\"},\"(0018,9511)\":{tag:\"(0018,9511)\",vr:\"FL\",name:\"SecondaryPositionerScanStartAngle\",vm:\"1\",version:\"DICOM\"},\"(0018,9514)\":{tag:\"(0018,9514)\",vr:\"FL\",name:\"PrimaryPositionerIncrement\",vm:\"1\",version:\"DICOM\"},\"(0018,9515)\":{tag:\"(0018,9515)\",vr:\"FL\",name:\"SecondaryPositionerIncrement\",vm:\"1\",version:\"DICOM\"},\"(0018,9516)\":{tag:\"(0018,9516)\",vr:\"DT\",name:\"StartAcquisitionDateTime\",vm:\"1\",version:\"DICOM\"},\"(0018,9517)\":{tag:\"(0018,9517)\",vr:\"DT\",name:\"EndAcquisitionDateTime\",vm:\"1\",version:\"DICOM\"},\"(0018,9518)\":{tag:\"(0018,9518)\",vr:\"SS\",name:\"PrimaryPositionerIncrementSign\",vm:\"1\",version:\"DICOM\"},\"(0018,9519)\":{tag:\"(0018,9519)\",vr:\"SS\",name:\"SecondaryPositionerIncrementSign\",vm:\"1\",version:\"DICOM\"},\"(0018,9524)\":{tag:\"(0018,9524)\",vr:\"LO\",name:\"ApplicationName\",vm:\"1\",version:\"DICOM\"},\"(0018,9525)\":{tag:\"(0018,9525)\",vr:\"LO\",name:\"ApplicationVersion\",vm:\"1\",version:\"DICOM\"},\"(0018,9526)\":{tag:\"(0018,9526)\",vr:\"LO\",name:\"ApplicationManufacturer\",vm:\"1\",version:\"DICOM\"},\"(0018,9527)\":{tag:\"(0018,9527)\",vr:\"CS\",name:\"AlgorithmType\",vm:\"1\",version:\"DICOM\"},\"(0018,9528)\":{tag:\"(0018,9528)\",vr:\"LO\",name:\"AlgorithmDescription\",vm:\"1\",version:\"DICOM\"},\"(0018,9530)\":{tag:\"(0018,9530)\",vr:\"SQ\",name:\"XRay3DReconstructionSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9531)\":{tag:\"(0018,9531)\",vr:\"LO\",name:\"ReconstructionDescription\",vm:\"1\",version:\"DICOM\"},\"(0018,9538)\":{tag:\"(0018,9538)\",vr:\"SQ\",name:\"PerProjectionAcquisitionSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9541)\":{tag:\"(0018,9541)\",vr:\"SQ\",name:\"DetectorPositionSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9542)\":{tag:\"(0018,9542)\",vr:\"SQ\",name:\"XRayAcquisitionDoseSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9543)\":{tag:\"(0018,9543)\",vr:\"FD\",name:\"XRaySourceIsocenterPrimaryAngle\",vm:\"1\",version:\"DICOM\"},\"(0018,9544)\":{tag:\"(0018,9544)\",vr:\"FD\",name:\"XRaySourceIsocenterSecondaryAngle\",vm:\"1\",version:\"DICOM\"},\"(0018,9545)\":{tag:\"(0018,9545)\",vr:\"FD\",name:\"BreastSupportIsocenterPrimaryAngle\",vm:\"1\",version:\"DICOM\"},\"(0018,9546)\":{tag:\"(0018,9546)\",vr:\"FD\",name:\"BreastSupportIsocenterSecondaryAngle\",vm:\"1\",version:\"DICOM\"},\"(0018,9547)\":{tag:\"(0018,9547)\",vr:\"FD\",name:\"BreastSupportXPositionToIsocenter\",vm:\"1\",version:\"DICOM\"},\"(0018,9548)\":{tag:\"(0018,9548)\",vr:\"FD\",name:\"BreastSupportYPositionToIsocenter\",vm:\"1\",version:\"DICOM\"},\"(0018,9549)\":{tag:\"(0018,9549)\",vr:\"FD\",name:\"BreastSupportZPositionToIsocenter\",vm:\"1\",version:\"DICOM\"},\"(0018,9550)\":{tag:\"(0018,9550)\",vr:\"FD\",name:\"DetectorIsocenterPrimaryAngle\",vm:\"1\",version:\"DICOM\"},\"(0018,9551)\":{tag:\"(0018,9551)\",vr:\"FD\",name:\"DetectorIsocenterSecondaryAngle\",vm:\"1\",version:\"DICOM\"},\"(0018,9552)\":{tag:\"(0018,9552)\",vr:\"FD\",name:\"DetectorXPositionToIsocenter\",vm:\"1\",version:\"DICOM\"},\"(0018,9553)\":{tag:\"(0018,9553)\",vr:\"FD\",name:\"DetectorYPositionToIsocenter\",vm:\"1\",version:\"DICOM\"},\"(0018,9554)\":{tag:\"(0018,9554)\",vr:\"FD\",name:\"DetectorZPositionToIsocenter\",vm:\"1\",version:\"DICOM\"},\"(0018,9555)\":{tag:\"(0018,9555)\",vr:\"SQ\",name:\"XRayGridSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9556)\":{tag:\"(0018,9556)\",vr:\"SQ\",name:\"XRayFilterSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9557)\":{tag:\"(0018,9557)\",vr:\"FD\",name:\"DetectorActiveAreaTLHCPosition\",vm:\"3\",version:\"DICOM\"},\"(0018,9558)\":{tag:\"(0018,9558)\",vr:\"FD\",name:\"DetectorActiveAreaOrientation\",vm:\"6\",version:\"DICOM\"},\"(0018,9559)\":{tag:\"(0018,9559)\",vr:\"CS\",name:\"PositionerPrimaryAngleDirection\",vm:\"1\",version:\"DICOM\"},\"(0018,9601)\":{tag:\"(0018,9601)\",vr:\"SQ\",name:\"DiffusionBMatrixSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9602)\":{tag:\"(0018,9602)\",vr:\"FD\",name:\"DiffusionBValueXX\",vm:\"1\",version:\"DICOM\"},\"(0018,9603)\":{tag:\"(0018,9603)\",vr:\"FD\",name:\"DiffusionBValueXY\",vm:\"1\",version:\"DICOM\"},\"(0018,9604)\":{tag:\"(0018,9604)\",vr:\"FD\",name:\"DiffusionBValueXZ\",vm:\"1\",version:\"DICOM\"},\"(0018,9605)\":{tag:\"(0018,9605)\",vr:\"FD\",name:\"DiffusionBValueYY\",vm:\"1\",version:\"DICOM\"},\"(0018,9606)\":{tag:\"(0018,9606)\",vr:\"FD\",name:\"DiffusionBValueYZ\",vm:\"1\",version:\"DICOM\"},\"(0018,9607)\":{tag:\"(0018,9607)\",vr:\"FD\",name:\"DiffusionBValueZZ\",vm:\"1\",version:\"DICOM\"},\"(0018,9621)\":{tag:\"(0018,9621)\",vr:\"SQ\",name:\"FunctionalMRSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9622)\":{tag:\"(0018,9622)\",vr:\"CS\",name:\"FunctionalSettlingPhaseFramesPresent\",vm:\"1\",version:\"DICOM\"},\"(0018,9623)\":{tag:\"(0018,9623)\",vr:\"DT\",name:\"FunctionalSyncPulse\",vm:\"1\",version:\"DICOM\"},\"(0018,9624)\":{tag:\"(0018,9624)\",vr:\"CS\",name:\"SettlingPhaseFrame\",vm:\"1\",version:\"DICOM\"},\"(0018,9701)\":{tag:\"(0018,9701)\",vr:\"DT\",name:\"DecayCorrectionDateTime\",vm:\"1\",version:\"DICOM\"},\"(0018,9715)\":{tag:\"(0018,9715)\",vr:\"FD\",name:\"StartDensityThreshold\",vm:\"1\",version:\"DICOM\"},\"(0018,9716)\":{tag:\"(0018,9716)\",vr:\"FD\",name:\"StartRelativeDensityDifferenceThreshold\",vm:\"1\",version:\"DICOM\"},\"(0018,9717)\":{tag:\"(0018,9717)\",vr:\"FD\",name:\"StartCardiacTriggerCountThreshold\",vm:\"1\",version:\"DICOM\"},\"(0018,9718)\":{tag:\"(0018,9718)\",vr:\"FD\",name:\"StartRespiratoryTriggerCountThreshold\",vm:\"1\",version:\"DICOM\"},\"(0018,9719)\":{tag:\"(0018,9719)\",vr:\"FD\",name:\"TerminationCountsThreshold\",vm:\"1\",version:\"DICOM\"},\"(0018,9720)\":{tag:\"(0018,9720)\",vr:\"FD\",name:\"TerminationDensityThreshold\",vm:\"1\",version:\"DICOM\"},\"(0018,9721)\":{tag:\"(0018,9721)\",vr:\"FD\",name:\"TerminationRelativeDensityThreshold\",vm:\"1\",version:\"DICOM\"},\"(0018,9722)\":{tag:\"(0018,9722)\",vr:\"FD\",name:\"TerminationTimeThreshold\",vm:\"1\",version:\"DICOM\"},\"(0018,9723)\":{tag:\"(0018,9723)\",vr:\"FD\",name:\"TerminationCardiacTriggerCountThreshold\",vm:\"1\",version:\"DICOM\"},\"(0018,9724)\":{tag:\"(0018,9724)\",vr:\"FD\",name:\"TerminationRespiratoryTriggerCountThreshold\",vm:\"1\",version:\"DICOM\"},\"(0018,9725)\":{tag:\"(0018,9725)\",vr:\"CS\",name:\"DetectorGeometry\",vm:\"1\",version:\"DICOM\"},\"(0018,9726)\":{tag:\"(0018,9726)\",vr:\"FD\",name:\"TransverseDetectorSeparation\",vm:\"1\",version:\"DICOM\"},\"(0018,9727)\":{tag:\"(0018,9727)\",vr:\"FD\",name:\"AxialDetectorDimension\",vm:\"1\",version:\"DICOM\"},\"(0018,9729)\":{tag:\"(0018,9729)\",vr:\"US\",name:\"RadiopharmaceuticalAgentNumber\",vm:\"1\",version:\"DICOM\"},\"(0018,9732)\":{tag:\"(0018,9732)\",vr:\"SQ\",name:\"PETFrameAcquisitionSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9733)\":{tag:\"(0018,9733)\",vr:\"SQ\",name:\"PETDetectorMotionDetailsSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9734)\":{tag:\"(0018,9734)\",vr:\"SQ\",name:\"PETTableDynamicsSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9735)\":{tag:\"(0018,9735)\",vr:\"SQ\",name:\"PETPositionSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9736)\":{tag:\"(0018,9736)\",vr:\"SQ\",name:\"PETFrameCorrectionFactorsSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9737)\":{tag:\"(0018,9737)\",vr:\"SQ\",name:\"RadiopharmaceuticalUsageSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9738)\":{tag:\"(0018,9738)\",vr:\"CS\",name:\"AttenuationCorrectionSource\",vm:\"1\",version:\"DICOM\"},\"(0018,9739)\":{tag:\"(0018,9739)\",vr:\"US\",name:\"NumberOfIterations\",vm:\"1\",version:\"DICOM\"},\"(0018,9740)\":{tag:\"(0018,9740)\",vr:\"US\",name:\"NumberOfSubsets\",vm:\"1\",version:\"DICOM\"},\"(0018,9749)\":{tag:\"(0018,9749)\",vr:\"SQ\",name:\"PETReconstructionSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9751)\":{tag:\"(0018,9751)\",vr:\"SQ\",name:\"PETFrameTypeSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9755)\":{tag:\"(0018,9755)\",vr:\"CS\",name:\"TimeOfFlightInformationUsed\",vm:\"1\",version:\"DICOM\"},\"(0018,9756)\":{tag:\"(0018,9756)\",vr:\"CS\",name:\"ReconstructionType\",vm:\"1\",version:\"DICOM\"},\"(0018,9758)\":{tag:\"(0018,9758)\",vr:\"CS\",name:\"DecayCorrected\",vm:\"1\",version:\"DICOM\"},\"(0018,9759)\":{tag:\"(0018,9759)\",vr:\"CS\",name:\"AttenuationCorrected\",vm:\"1\",version:\"DICOM\"},\"(0018,9760)\":{tag:\"(0018,9760)\",vr:\"CS\",name:\"ScatterCorrected\",vm:\"1\",version:\"DICOM\"},\"(0018,9761)\":{tag:\"(0018,9761)\",vr:\"CS\",name:\"DeadTimeCorrected\",vm:\"1\",version:\"DICOM\"},\"(0018,9762)\":{tag:\"(0018,9762)\",vr:\"CS\",name:\"GantryMotionCorrected\",vm:\"1\",version:\"DICOM\"},\"(0018,9763)\":{tag:\"(0018,9763)\",vr:\"CS\",name:\"PatientMotionCorrected\",vm:\"1\",version:\"DICOM\"},\"(0018,9764)\":{tag:\"(0018,9764)\",vr:\"CS\",name:\"CountLossNormalizationCorrected\",vm:\"1\",version:\"DICOM\"},\"(0018,9765)\":{tag:\"(0018,9765)\",vr:\"CS\",name:\"RandomsCorrected\",vm:\"1\",version:\"DICOM\"},\"(0018,9766)\":{tag:\"(0018,9766)\",vr:\"CS\",name:\"NonUniformRadialSamplingCorrected\",vm:\"1\",version:\"DICOM\"},\"(0018,9767)\":{tag:\"(0018,9767)\",vr:\"CS\",name:\"SensitivityCalibrated\",vm:\"1\",version:\"DICOM\"},\"(0018,9768)\":{tag:\"(0018,9768)\",vr:\"CS\",name:\"DetectorNormalizationCorrection\",vm:\"1\",version:\"DICOM\"},\"(0018,9769)\":{tag:\"(0018,9769)\",vr:\"CS\",name:\"IterativeReconstructionMethod\",vm:\"1\",version:\"DICOM\"},\"(0018,9770)\":{tag:\"(0018,9770)\",vr:\"CS\",name:\"AttenuationCorrectionTemporalRelationship\",vm:\"1\",version:\"DICOM\"},\"(0018,9771)\":{tag:\"(0018,9771)\",vr:\"SQ\",name:\"PatientPhysiologicalStateSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9772)\":{tag:\"(0018,9772)\",vr:\"SQ\",name:\"PatientPhysiologicalStateCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9801)\":{tag:\"(0018,9801)\",vr:\"FD\",name:\"DepthsOfFocus\",vm:\"1-n\",version:\"DICOM\"},\"(0018,9803)\":{tag:\"(0018,9803)\",vr:\"SQ\",name:\"ExcludedIntervalsSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9804)\":{tag:\"(0018,9804)\",vr:\"DT\",name:\"ExclusionStartDateTime\",vm:\"1\",version:\"DICOM\"},\"(0018,9805)\":{tag:\"(0018,9805)\",vr:\"FD\",name:\"ExclusionDuration\",vm:\"1\",version:\"DICOM\"},\"(0018,9806)\":{tag:\"(0018,9806)\",vr:\"SQ\",name:\"USImageDescriptionSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9807)\":{tag:\"(0018,9807)\",vr:\"SQ\",name:\"ImageDataTypeSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9808)\":{tag:\"(0018,9808)\",vr:\"CS\",name:\"DataType\",vm:\"1\",version:\"DICOM\"},\"(0018,9809)\":{tag:\"(0018,9809)\",vr:\"SQ\",name:\"TransducerScanPatternCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,980B)\":{tag:\"(0018,980B)\",vr:\"CS\",name:\"AliasedDataType\",vm:\"1\",version:\"DICOM\"},\"(0018,980C)\":{tag:\"(0018,980C)\",vr:\"CS\",name:\"PositionMeasuringDeviceUsed\",vm:\"1\",version:\"DICOM\"},\"(0018,980D)\":{tag:\"(0018,980D)\",vr:\"SQ\",name:\"TransducerGeometryCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,980E)\":{tag:\"(0018,980E)\",vr:\"SQ\",name:\"TransducerBeamSteeringCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,980F)\":{tag:\"(0018,980F)\",vr:\"SQ\",name:\"TransducerApplicationCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9810)\":{tag:\"(0018,9810)\",vr:\"xs\",name:\"ZeroVelocityPixelValue\",vm:\"1\",version:\"DICOM\"},\"(0018,9900)\":{tag:\"(0018,9900)\",vr:\"LO\",name:\"ReferenceLocationLabel\",vm:\"1\",version:\"DICOM\"},\"(0018,9901)\":{tag:\"(0018,9901)\",vr:\"UT\",name:\"ReferenceLocationDescription\",vm:\"1\",version:\"DICOM\"},\"(0018,9902)\":{tag:\"(0018,9902)\",vr:\"SQ\",name:\"ReferenceBasisCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9903)\":{tag:\"(0018,9903)\",vr:\"SQ\",name:\"ReferenceGeometryCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9904)\":{tag:\"(0018,9904)\",vr:\"DS\",name:\"OffsetDistance\",vm:\"1\",version:\"DICOM\"},\"(0018,9905)\":{tag:\"(0018,9905)\",vr:\"CS\",name:\"OffsetDirection\",vm:\"1\",version:\"DICOM\"},\"(0018,9906)\":{tag:\"(0018,9906)\",vr:\"SQ\",name:\"PotentialScheduledProtocolCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9907)\":{tag:\"(0018,9907)\",vr:\"SQ\",name:\"PotentialRequestedProcedureCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9908)\":{tag:\"(0018,9908)\",vr:\"UC\",name:\"PotentialReasonsForProcedure\",vm:\"1-n\",version:\"DICOM\"},\"(0018,9909)\":{tag:\"(0018,9909)\",vr:\"SQ\",name:\"PotentialReasonsForProcedureCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,990A)\":{tag:\"(0018,990A)\",vr:\"UC\",name:\"PotentialDiagnosticTasks\",vm:\"1-n\",version:\"DICOM\"},\"(0018,990B)\":{tag:\"(0018,990B)\",vr:\"SQ\",name:\"ContraindicationsCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,990C)\":{tag:\"(0018,990C)\",vr:\"SQ\",name:\"ReferencedDefinedProtocolSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,990D)\":{tag:\"(0018,990D)\",vr:\"SQ\",name:\"ReferencedPerformedProtocolSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,990E)\":{tag:\"(0018,990E)\",vr:\"SQ\",name:\"PredecessorProtocolSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,990F)\":{tag:\"(0018,990F)\",vr:\"UT\",name:\"ProtocolPlanningInformation\",vm:\"1\",version:\"DICOM\"},\"(0018,9910)\":{tag:\"(0018,9910)\",vr:\"UT\",name:\"ProtocolDesignRationale\",vm:\"1\",version:\"DICOM\"},\"(0018,9911)\":{tag:\"(0018,9911)\",vr:\"SQ\",name:\"PatientSpecificationSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9912)\":{tag:\"(0018,9912)\",vr:\"SQ\",name:\"ModelSpecificationSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9913)\":{tag:\"(0018,9913)\",vr:\"SQ\",name:\"ParametersSpecificationSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9914)\":{tag:\"(0018,9914)\",vr:\"SQ\",name:\"InstructionSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9915)\":{tag:\"(0018,9915)\",vr:\"US\",name:\"InstructionIndex\",vm:\"1\",version:\"DICOM\"},\"(0018,9916)\":{tag:\"(0018,9916)\",vr:\"LO\",name:\"InstructionText\",vm:\"1\",version:\"DICOM\"},\"(0018,9917)\":{tag:\"(0018,9917)\",vr:\"UT\",name:\"InstructionDescription\",vm:\"1\",version:\"DICOM\"},\"(0018,9918)\":{tag:\"(0018,9918)\",vr:\"CS\",name:\"InstructionPerformedFlag\",vm:\"1\",version:\"DICOM\"},\"(0018,9919)\":{tag:\"(0018,9919)\",vr:\"DT\",name:\"InstructionPerformedDateTime\",vm:\"1\",version:\"DICOM\"},\"(0018,991A)\":{tag:\"(0018,991A)\",vr:\"UT\",name:\"InstructionPerformanceComment\",vm:\"1\",version:\"DICOM\"},\"(0018,991B)\":{tag:\"(0018,991B)\",vr:\"SQ\",name:\"PatientPositioningInstructionSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,991C)\":{tag:\"(0018,991C)\",vr:\"SQ\",name:\"PositioningMethodCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,991D)\":{tag:\"(0018,991D)\",vr:\"SQ\",name:\"PositioningLandmarkSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,991E)\":{tag:\"(0018,991E)\",vr:\"UI\",name:\"TargetFrameOfReferenceUID\",vm:\"1\",version:\"DICOM\"},\"(0018,991F)\":{tag:\"(0018,991F)\",vr:\"SQ\",name:\"AcquisitionProtocolElementSpecificationSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9920)\":{tag:\"(0018,9920)\",vr:\"SQ\",name:\"AcquisitionProtocolElementSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9921)\":{tag:\"(0018,9921)\",vr:\"US\",name:\"ProtocolElementNumber\",vm:\"1\",version:\"DICOM\"},\"(0018,9922)\":{tag:\"(0018,9922)\",vr:\"LO\",name:\"ProtocolElementName\",vm:\"1\",version:\"DICOM\"},\"(0018,9923)\":{tag:\"(0018,9923)\",vr:\"UT\",name:\"ProtocolElementCharacteristicsSummary\",vm:\"1\",version:\"DICOM\"},\"(0018,9924)\":{tag:\"(0018,9924)\",vr:\"UT\",name:\"ProtocolElementPurpose\",vm:\"1\",version:\"DICOM\"},\"(0018,9930)\":{tag:\"(0018,9930)\",vr:\"CS\",name:\"AcquisitionMotion\",vm:\"1\",version:\"DICOM\"},\"(0018,9931)\":{tag:\"(0018,9931)\",vr:\"SQ\",name:\"AcquisitionStartLocationSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9932)\":{tag:\"(0018,9932)\",vr:\"SQ\",name:\"AcquisitionEndLocationSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9933)\":{tag:\"(0018,9933)\",vr:\"SQ\",name:\"ReconstructionProtocolElementSpecificationSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9934)\":{tag:\"(0018,9934)\",vr:\"SQ\",name:\"ReconstructionProtocolElementSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9935)\":{tag:\"(0018,9935)\",vr:\"SQ\",name:\"StorageProtocolElementSpecificationSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9936)\":{tag:\"(0018,9936)\",vr:\"SQ\",name:\"StorageProtocolElementSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9937)\":{tag:\"(0018,9937)\",vr:\"LO\",name:\"RequestedSeriesDescription\",vm:\"1\",version:\"DICOM\"},\"(0018,9938)\":{tag:\"(0018,9938)\",vr:\"US\",name:\"SourceAcquisitionProtocolElementNumber\",vm:\"1-n\",version:\"DICOM\"},\"(0018,9939)\":{tag:\"(0018,9939)\",vr:\"US\",name:\"SourceAcquisitionBeamNumber\",vm:\"1-n\",version:\"DICOM\"},\"(0018,993A)\":{tag:\"(0018,993A)\",vr:\"US\",name:\"SourceReconstructionProtocolElementNumber\",vm:\"1-n\",version:\"DICOM\"},\"(0018,993B)\":{tag:\"(0018,993B)\",vr:\"SQ\",name:\"ReconstructionStartLocationSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,993C)\":{tag:\"(0018,993C)\",vr:\"SQ\",name:\"ReconstructionEndLocationSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,993D)\":{tag:\"(0018,993D)\",vr:\"SQ\",name:\"ReconstructionAlgorithmSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,993E)\":{tag:\"(0018,993E)\",vr:\"SQ\",name:\"ReconstructionTargetCenterLocationSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,9941)\":{tag:\"(0018,9941)\",vr:\"UT\",name:\"ImageFilterDescription\",vm:\"1\",version:\"DICOM\"},\"(0018,9942)\":{tag:\"(0018,9942)\",vr:\"FD\",name:\"CTDIvolNotificationTrigger\",vm:\"1\",version:\"DICOM\"},\"(0018,9943)\":{tag:\"(0018,9943)\",vr:\"FD\",name:\"DLPNotificationTrigger\",vm:\"1\",version:\"DICOM\"},\"(0018,9944)\":{tag:\"(0018,9944)\",vr:\"CS\",name:\"AutoKVPSelectionType\",vm:\"1\",version:\"DICOM\"},\"(0018,9945)\":{tag:\"(0018,9945)\",vr:\"FD\",name:\"AutoKVPUpperBound\",vm:\"1\",version:\"DICOM\"},\"(0018,9946)\":{tag:\"(0018,9946)\",vr:\"FD\",name:\"AutoKVPLowerBound\",vm:\"1\",version:\"DICOM\"},\"(0018,9947)\":{tag:\"(0018,9947)\",vr:\"CS\",name:\"ProtocolDefinedPatientPosition\",vm:\"1\",version:\"DICOM\"},\"(0018,A001)\":{tag:\"(0018,A001)\",vr:\"SQ\",name:\"ContributingEquipmentSequence\",vm:\"1\",version:\"DICOM\"},\"(0018,A002)\":{tag:\"(0018,A002)\",vr:\"DT\",name:\"ContributionDateTime\",vm:\"1\",version:\"DICOM\"},\"(0018,A003)\":{tag:\"(0018,A003)\",vr:\"ST\",name:\"ContributionDescription\",vm:\"1\",version:\"DICOM\"},\"(0020,000D)\":{tag:\"(0020,000D)\",vr:\"UI\",name:\"StudyInstanceUID\",vm:\"1\",version:\"DICOM\"},\"(0020,000E)\":{tag:\"(0020,000E)\",vr:\"UI\",name:\"SeriesInstanceUID\",vm:\"1\",version:\"DICOM\"},\"(0020,0010)\":{tag:\"(0020,0010)\",vr:\"SH\",name:\"StudyID\",vm:\"1\",version:\"DICOM\"},\"(0020,0011)\":{tag:\"(0020,0011)\",vr:\"IS\",name:\"SeriesNumber\",vm:\"1\",version:\"DICOM\"},\"(0020,0012)\":{tag:\"(0020,0012)\",vr:\"IS\",name:\"AcquisitionNumber\",vm:\"1\",version:\"DICOM\"},\"(0020,0013)\":{tag:\"(0020,0013)\",vr:\"IS\",name:\"InstanceNumber\",vm:\"1\",version:\"DICOM\"},\"(0020,0019)\":{tag:\"(0020,0019)\",vr:\"IS\",name:\"ItemNumber\",vm:\"1\",version:\"DICOM\"},\"(0020,0020)\":{tag:\"(0020,0020)\",vr:\"CS\",name:\"PatientOrientation\",vm:\"2\",version:\"DICOM\"},\"(0020,0032)\":{tag:\"(0020,0032)\",vr:\"DS\",name:\"ImagePositionPatient\",vm:\"3\",version:\"DICOM\"},\"(0020,0037)\":{tag:\"(0020,0037)\",vr:\"DS\",name:\"ImageOrientationPatient\",vm:\"6\",version:\"DICOM\"},\"(0020,0052)\":{tag:\"(0020,0052)\",vr:\"UI\",name:\"FrameOfReferenceUID\",vm:\"1\",version:\"DICOM\"},\"(0020,0060)\":{tag:\"(0020,0060)\",vr:\"CS\",name:\"Laterality\",vm:\"1\",version:\"DICOM\"},\"(0020,0062)\":{tag:\"(0020,0062)\",vr:\"CS\",name:\"ImageLaterality\",vm:\"1\",version:\"DICOM\"},\"(0020,0100)\":{tag:\"(0020,0100)\",vr:\"IS\",name:\"TemporalPositionIdentifier\",vm:\"1\",version:\"DICOM\"},\"(0020,0105)\":{tag:\"(0020,0105)\",vr:\"IS\",name:\"NumberOfTemporalPositions\",vm:\"1\",version:\"DICOM\"},\"(0020,0110)\":{tag:\"(0020,0110)\",vr:\"DS\",name:\"TemporalResolution\",vm:\"1\",version:\"DICOM\"},\"(0020,0200)\":{tag:\"(0020,0200)\",vr:\"UI\",name:\"SynchronizationFrameOfReferenceUID\",vm:\"1\",version:\"DICOM\"},\"(0020,0242)\":{tag:\"(0020,0242)\",vr:\"UI\",name:\"SOPInstanceUIDOfConcatenationSource\",vm:\"1\",version:\"DICOM\"},\"(0020,1002)\":{tag:\"(0020,1002)\",vr:\"IS\",name:\"ImagesInAcquisition\",vm:\"1\",version:\"DICOM\"},\"(0020,103F)\":{tag:\"(0020,103F)\",vr:\"LO\",name:\"TargetPositionReferenceIndicator\",vm:\"1\",version:\"DICOM\"},\"(0020,1040)\":{tag:\"(0020,1040)\",vr:\"LO\",name:\"PositionReferenceIndicator\",vm:\"1\",version:\"DICOM\"},\"(0020,1041)\":{tag:\"(0020,1041)\",vr:\"DS\",name:\"SliceLocation\",vm:\"1\",version:\"DICOM\"},\"(0020,1200)\":{tag:\"(0020,1200)\",vr:\"IS\",name:\"NumberOfPatientRelatedStudies\",vm:\"1\",version:\"DICOM\"},\"(0020,1202)\":{tag:\"(0020,1202)\",vr:\"IS\",name:\"NumberOfPatientRelatedSeries\",vm:\"1\",version:\"DICOM\"},\"(0020,1204)\":{tag:\"(0020,1204)\",vr:\"IS\",name:\"NumberOfPatientRelatedInstances\",vm:\"1\",version:\"DICOM\"},\"(0020,1206)\":{tag:\"(0020,1206)\",vr:\"IS\",name:\"NumberOfStudyRelatedSeries\",vm:\"1\",version:\"DICOM\"},\"(0020,1208)\":{tag:\"(0020,1208)\",vr:\"IS\",name:\"NumberOfStudyRelatedInstances\",vm:\"1\",version:\"DICOM\"},\"(0020,1209)\":{tag:\"(0020,1209)\",vr:\"IS\",name:\"NumberOfSeriesRelatedInstances\",vm:\"1\",version:\"DICOM\"},\"(0020,4000)\":{tag:\"(0020,4000)\",vr:\"LT\",name:\"ImageComments\",vm:\"1\",version:\"DICOM\"},\"(0020,9056)\":{tag:\"(0020,9056)\",vr:\"SH\",name:\"StackID\",vm:\"1\",version:\"DICOM\"},\"(0020,9057)\":{tag:\"(0020,9057)\",vr:\"UL\",name:\"InStackPositionNumber\",vm:\"1\",version:\"DICOM\"},\"(0020,9071)\":{tag:\"(0020,9071)\",vr:\"SQ\",name:\"FrameAnatomySequence\",vm:\"1\",version:\"DICOM\"},\"(0020,9072)\":{tag:\"(0020,9072)\",vr:\"CS\",name:\"FrameLaterality\",vm:\"1\",version:\"DICOM\"},\"(0020,9111)\":{tag:\"(0020,9111)\",vr:\"SQ\",name:\"FrameContentSequence\",vm:\"1\",version:\"DICOM\"},\"(0020,9113)\":{tag:\"(0020,9113)\",vr:\"SQ\",name:\"PlanePositionSequence\",vm:\"1\",version:\"DICOM\"},\"(0020,9116)\":{tag:\"(0020,9116)\",vr:\"SQ\",name:\"PlaneOrientationSequence\",vm:\"1\",version:\"DICOM\"},\"(0020,9128)\":{tag:\"(0020,9128)\",vr:\"UL\",name:\"TemporalPositionIndex\",vm:\"1\",version:\"DICOM\"},\"(0020,9153)\":{tag:\"(0020,9153)\",vr:\"FD\",name:\"NominalCardiacTriggerDelayTime\",vm:\"1\",version:\"DICOM\"},\"(0020,9154)\":{tag:\"(0020,9154)\",vr:\"FL\",name:\"NominalCardiacTriggerTimePriorToRPeak\",vm:\"1\",version:\"DICOM\"},\"(0020,9155)\":{tag:\"(0020,9155)\",vr:\"FL\",name:\"ActualCardiacTriggerTimePriorToRPeak\",vm:\"1\",version:\"DICOM\"},\"(0020,9156)\":{tag:\"(0020,9156)\",vr:\"US\",name:\"FrameAcquisitionNumber\",vm:\"1\",version:\"DICOM\"},\"(0020,9157)\":{tag:\"(0020,9157)\",vr:\"UL\",name:\"DimensionIndexValues\",vm:\"1-n\",version:\"DICOM\"},\"(0020,9158)\":{tag:\"(0020,9158)\",vr:\"LT\",name:\"FrameComments\",vm:\"1\",version:\"DICOM\"},\"(0020,9161)\":{tag:\"(0020,9161)\",vr:\"UI\",name:\"ConcatenationUID\",vm:\"1\",version:\"DICOM\"},\"(0020,9162)\":{tag:\"(0020,9162)\",vr:\"US\",name:\"InConcatenationNumber\",vm:\"1\",version:\"DICOM\"},\"(0020,9163)\":{tag:\"(0020,9163)\",vr:\"US\",name:\"InConcatenationTotalNumber\",vm:\"1\",version:\"DICOM\"},\"(0020,9164)\":{tag:\"(0020,9164)\",vr:\"UI\",name:\"DimensionOrganizationUID\",vm:\"1\",version:\"DICOM\"},\"(0020,9165)\":{tag:\"(0020,9165)\",vr:\"AT\",name:\"DimensionIndexPointer\",vm:\"1\",version:\"DICOM\"},\"(0020,9167)\":{tag:\"(0020,9167)\",vr:\"AT\",name:\"FunctionalGroupPointer\",vm:\"1\",version:\"DICOM\"},\"(0020,9170)\":{tag:\"(0020,9170)\",vr:\"SQ\",name:\"UnassignedSharedConvertedAttributesSequence\",vm:\"1\",version:\"DICOM\"},\"(0020,9171)\":{tag:\"(0020,9171)\",vr:\"SQ\",name:\"UnassignedPerFrameConvertedAttributesSequence\",vm:\"1\",version:\"DICOM\"},\"(0020,9172)\":{tag:\"(0020,9172)\",vr:\"SQ\",name:\"ConversionSourceAttributesSequence\",vm:\"1\",version:\"DICOM\"},\"(0020,9213)\":{tag:\"(0020,9213)\",vr:\"LO\",name:\"DimensionIndexPrivateCreator\",vm:\"1\",version:\"DICOM\"},\"(0020,9221)\":{tag:\"(0020,9221)\",vr:\"SQ\",name:\"DimensionOrganizationSequence\",vm:\"1\",version:\"DICOM\"},\"(0020,9222)\":{tag:\"(0020,9222)\",vr:\"SQ\",name:\"DimensionIndexSequence\",vm:\"1\",version:\"DICOM\"},\"(0020,9228)\":{tag:\"(0020,9228)\",vr:\"UL\",name:\"ConcatenationFrameOffsetNumber\",vm:\"1\",version:\"DICOM\"},\"(0020,9238)\":{tag:\"(0020,9238)\",vr:\"LO\",name:\"FunctionalGroupPrivateCreator\",vm:\"1\",version:\"DICOM\"},\"(0020,9241)\":{tag:\"(0020,9241)\",vr:\"FL\",name:\"NominalPercentageOfCardiacPhase\",vm:\"1\",version:\"DICOM\"},\"(0020,9245)\":{tag:\"(0020,9245)\",vr:\"FL\",name:\"NominalPercentageOfRespiratoryPhase\",vm:\"1\",version:\"DICOM\"},\"(0020,9246)\":{tag:\"(0020,9246)\",vr:\"FL\",name:\"StartingRespiratoryAmplitude\",vm:\"1\",version:\"DICOM\"},\"(0020,9247)\":{tag:\"(0020,9247)\",vr:\"CS\",name:\"StartingRespiratoryPhase\",vm:\"1\",version:\"DICOM\"},\"(0020,9248)\":{tag:\"(0020,9248)\",vr:\"FL\",name:\"EndingRespiratoryAmplitude\",vm:\"1\",version:\"DICOM\"},\"(0020,9249)\":{tag:\"(0020,9249)\",vr:\"CS\",name:\"EndingRespiratoryPhase\",vm:\"1\",version:\"DICOM\"},\"(0020,9250)\":{tag:\"(0020,9250)\",vr:\"CS\",name:\"RespiratoryTriggerType\",vm:\"1\",version:\"DICOM\"},\"(0020,9251)\":{tag:\"(0020,9251)\",vr:\"FD\",name:\"RRIntervalTimeNominal\",vm:\"1\",version:\"DICOM\"},\"(0020,9252)\":{tag:\"(0020,9252)\",vr:\"FD\",name:\"ActualCardiacTriggerDelayTime\",vm:\"1\",version:\"DICOM\"},\"(0020,9253)\":{tag:\"(0020,9253)\",vr:\"SQ\",name:\"RespiratorySynchronizationSequence\",vm:\"1\",version:\"DICOM\"},\"(0020,9254)\":{tag:\"(0020,9254)\",vr:\"FD\",name:\"RespiratoryIntervalTime\",vm:\"1\",version:\"DICOM\"},\"(0020,9255)\":{tag:\"(0020,9255)\",vr:\"FD\",name:\"NominalRespiratoryTriggerDelayTime\",vm:\"1\",version:\"DICOM\"},\"(0020,9256)\":{tag:\"(0020,9256)\",vr:\"FD\",name:\"RespiratoryTriggerDelayThreshold\",vm:\"1\",version:\"DICOM\"},\"(0020,9257)\":{tag:\"(0020,9257)\",vr:\"FD\",name:\"ActualRespiratoryTriggerDelayTime\",vm:\"1\",version:\"DICOM\"},\"(0020,9301)\":{tag:\"(0020,9301)\",vr:\"FD\",name:\"ImagePositionVolume\",vm:\"3\",version:\"DICOM\"},\"(0020,9302)\":{tag:\"(0020,9302)\",vr:\"FD\",name:\"ImageOrientationVolume\",vm:\"6\",version:\"DICOM\"},\"(0020,9307)\":{tag:\"(0020,9307)\",vr:\"CS\",name:\"UltrasoundAcquisitionGeometry\",vm:\"1\",version:\"DICOM\"},\"(0020,9308)\":{tag:\"(0020,9308)\",vr:\"FD\",name:\"ApexPosition\",vm:\"3\",version:\"DICOM\"},\"(0020,9309)\":{tag:\"(0020,9309)\",vr:\"FD\",name:\"VolumeToTransducerMappingMatrix\",vm:\"16\",version:\"DICOM\"},\"(0020,930A)\":{tag:\"(0020,930A)\",vr:\"FD\",name:\"VolumeToTableMappingMatrix\",vm:\"16\",version:\"DICOM\"},\"(0020,930B)\":{tag:\"(0020,930B)\",vr:\"CS\",name:\"VolumeToTransducerRelationship\",vm:\"1\",version:\"DICOM\"},\"(0020,930C)\":{tag:\"(0020,930C)\",vr:\"CS\",name:\"PatientFrameOfReferenceSource\",vm:\"1\",version:\"DICOM\"},\"(0020,930D)\":{tag:\"(0020,930D)\",vr:\"FD\",name:\"TemporalPositionTimeOffset\",vm:\"1\",version:\"DICOM\"},\"(0020,930E)\":{tag:\"(0020,930E)\",vr:\"SQ\",name:\"PlanePositionVolumeSequence\",vm:\"1\",version:\"DICOM\"},\"(0020,930F)\":{tag:\"(0020,930F)\",vr:\"SQ\",name:\"PlaneOrientationVolumeSequence\",vm:\"1\",version:\"DICOM\"},\"(0020,9310)\":{tag:\"(0020,9310)\",vr:\"SQ\",name:\"TemporalPositionSequence\",vm:\"1\",version:\"DICOM\"},\"(0020,9311)\":{tag:\"(0020,9311)\",vr:\"CS\",name:\"DimensionOrganizationType\",vm:\"1\",version:\"DICOM\"},\"(0020,9312)\":{tag:\"(0020,9312)\",vr:\"UI\",name:\"VolumeFrameOfReferenceUID\",vm:\"1\",version:\"DICOM\"},\"(0020,9313)\":{tag:\"(0020,9313)\",vr:\"UI\",name:\"TableFrameOfReferenceUID\",vm:\"1\",version:\"DICOM\"},\"(0020,9421)\":{tag:\"(0020,9421)\",vr:\"LO\",name:\"DimensionDescriptionLabel\",vm:\"1\",version:\"DICOM\"},\"(0020,9450)\":{tag:\"(0020,9450)\",vr:\"SQ\",name:\"PatientOrientationInFrameSequence\",vm:\"1\",version:\"DICOM\"},\"(0020,9453)\":{tag:\"(0020,9453)\",vr:\"LO\",name:\"FrameLabel\",vm:\"1\",version:\"DICOM\"},\"(0020,9518)\":{tag:\"(0020,9518)\",vr:\"US\",name:\"AcquisitionIndex\",vm:\"1-n\",version:\"DICOM\"},\"(0020,9529)\":{tag:\"(0020,9529)\",vr:\"SQ\",name:\"ContributingSOPInstancesReferenceSequence\",vm:\"1\",version:\"DICOM\"},\"(0020,9536)\":{tag:\"(0020,9536)\",vr:\"US\",name:\"ReconstructionIndex\",vm:\"1\",version:\"DICOM\"},\"(0022,0001)\":{tag:\"(0022,0001)\",vr:\"US\",name:\"LightPathFilterPassThroughWavelength\",vm:\"1\",version:\"DICOM\"},\"(0022,0002)\":{tag:\"(0022,0002)\",vr:\"US\",name:\"LightPathFilterPassBand\",vm:\"2\",version:\"DICOM\"},\"(0022,0003)\":{tag:\"(0022,0003)\",vr:\"US\",name:\"ImagePathFilterPassThroughWavelength\",vm:\"1\",version:\"DICOM\"},\"(0022,0004)\":{tag:\"(0022,0004)\",vr:\"US\",name:\"ImagePathFilterPassBand\",vm:\"2\",version:\"DICOM\"},\"(0022,0005)\":{tag:\"(0022,0005)\",vr:\"CS\",name:\"PatientEyeMovementCommanded\",vm:\"1\",version:\"DICOM\"},\"(0022,0006)\":{tag:\"(0022,0006)\",vr:\"SQ\",name:\"PatientEyeMovementCommandCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,0007)\":{tag:\"(0022,0007)\",vr:\"FL\",name:\"SphericalLensPower\",vm:\"1\",version:\"DICOM\"},\"(0022,0008)\":{tag:\"(0022,0008)\",vr:\"FL\",name:\"CylinderLensPower\",vm:\"1\",version:\"DICOM\"},\"(0022,0009)\":{tag:\"(0022,0009)\",vr:\"FL\",name:\"CylinderAxis\",vm:\"1\",version:\"DICOM\"},\"(0022,000A)\":{tag:\"(0022,000A)\",vr:\"FL\",name:\"EmmetropicMagnification\",vm:\"1\",version:\"DICOM\"},\"(0022,000B)\":{tag:\"(0022,000B)\",vr:\"FL\",name:\"IntraOcularPressure\",vm:\"1\",version:\"DICOM\"},\"(0022,000C)\":{tag:\"(0022,000C)\",vr:\"FL\",name:\"HorizontalFieldOfView\",vm:\"1\",version:\"DICOM\"},\"(0022,000D)\":{tag:\"(0022,000D)\",vr:\"CS\",name:\"PupilDilated\",vm:\"1\",version:\"DICOM\"},\"(0022,000E)\":{tag:\"(0022,000E)\",vr:\"FL\",name:\"DegreeOfDilation\",vm:\"1\",version:\"DICOM\"},\"(0022,0010)\":{tag:\"(0022,0010)\",vr:\"FL\",name:\"StereoBaselineAngle\",vm:\"1\",version:\"DICOM\"},\"(0022,0011)\":{tag:\"(0022,0011)\",vr:\"FL\",name:\"StereoBaselineDisplacement\",vm:\"1\",version:\"DICOM\"},\"(0022,0012)\":{tag:\"(0022,0012)\",vr:\"FL\",name:\"StereoHorizontalPixelOffset\",vm:\"1\",version:\"DICOM\"},\"(0022,0013)\":{tag:\"(0022,0013)\",vr:\"FL\",name:\"StereoVerticalPixelOffset\",vm:\"1\",version:\"DICOM\"},\"(0022,0014)\":{tag:\"(0022,0014)\",vr:\"FL\",name:\"StereoRotation\",vm:\"1\",version:\"DICOM\"},\"(0022,0015)\":{tag:\"(0022,0015)\",vr:\"SQ\",name:\"AcquisitionDeviceTypeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,0016)\":{tag:\"(0022,0016)\",vr:\"SQ\",name:\"IlluminationTypeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,0017)\":{tag:\"(0022,0017)\",vr:\"SQ\",name:\"LightPathFilterTypeStackCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,0018)\":{tag:\"(0022,0018)\",vr:\"SQ\",name:\"ImagePathFilterTypeStackCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,0019)\":{tag:\"(0022,0019)\",vr:\"SQ\",name:\"LensesCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,001A)\":{tag:\"(0022,001A)\",vr:\"SQ\",name:\"ChannelDescriptionCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,001B)\":{tag:\"(0022,001B)\",vr:\"SQ\",name:\"RefractiveStateSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,001C)\":{tag:\"(0022,001C)\",vr:\"SQ\",name:\"MydriaticAgentCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,001D)\":{tag:\"(0022,001D)\",vr:\"SQ\",name:\"RelativeImagePositionCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,001E)\":{tag:\"(0022,001E)\",vr:\"FL\",name:\"CameraAngleOfView\",vm:\"1\",version:\"DICOM\"},\"(0022,0020)\":{tag:\"(0022,0020)\",vr:\"SQ\",name:\"StereoPairsSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,0021)\":{tag:\"(0022,0021)\",vr:\"SQ\",name:\"LeftImageSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,0022)\":{tag:\"(0022,0022)\",vr:\"SQ\",name:\"RightImageSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,0028)\":{tag:\"(0022,0028)\",vr:\"CS\",name:\"StereoPairsPresent\",vm:\"1\",version:\"DICOM\"},\"(0022,0030)\":{tag:\"(0022,0030)\",vr:\"FL\",name:\"AxialLengthOfTheEye\",vm:\"1\",version:\"DICOM\"},\"(0022,0031)\":{tag:\"(0022,0031)\",vr:\"SQ\",name:\"OphthalmicFrameLocationSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,0032)\":{tag:\"(0022,0032)\",vr:\"FL\",name:\"ReferenceCoordinates\",vm:\"2-2n\",version:\"DICOM\"},\"(0022,0035)\":{tag:\"(0022,0035)\",vr:\"FL\",name:\"DepthSpatialResolution\",vm:\"1\",version:\"DICOM\"},\"(0022,0036)\":{tag:\"(0022,0036)\",vr:\"FL\",name:\"MaximumDepthDistortion\",vm:\"1\",version:\"DICOM\"},\"(0022,0037)\":{tag:\"(0022,0037)\",vr:\"FL\",name:\"AlongScanSpatialResolution\",vm:\"1\",version:\"DICOM\"},\"(0022,0038)\":{tag:\"(0022,0038)\",vr:\"FL\",name:\"MaximumAlongScanDistortion\",vm:\"1\",version:\"DICOM\"},\"(0022,0039)\":{tag:\"(0022,0039)\",vr:\"CS\",name:\"OphthalmicImageOrientation\",vm:\"1\",version:\"DICOM\"},\"(0022,0041)\":{tag:\"(0022,0041)\",vr:\"FL\",name:\"DepthOfTransverseImage\",vm:\"1\",version:\"DICOM\"},\"(0022,0042)\":{tag:\"(0022,0042)\",vr:\"SQ\",name:\"MydriaticAgentConcentrationUnitsSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,0048)\":{tag:\"(0022,0048)\",vr:\"FL\",name:\"AcrossScanSpatialResolution\",vm:\"1\",version:\"DICOM\"},\"(0022,0049)\":{tag:\"(0022,0049)\",vr:\"FL\",name:\"MaximumAcrossScanDistortion\",vm:\"1\",version:\"DICOM\"},\"(0022,004E)\":{tag:\"(0022,004E)\",vr:\"DS\",name:\"MydriaticAgentConcentration\",vm:\"1\",version:\"DICOM\"},\"(0022,0055)\":{tag:\"(0022,0055)\",vr:\"FL\",name:\"IlluminationWaveLength\",vm:\"1\",version:\"DICOM\"},\"(0022,0056)\":{tag:\"(0022,0056)\",vr:\"FL\",name:\"IlluminationPower\",vm:\"1\",version:\"DICOM\"},\"(0022,0057)\":{tag:\"(0022,0057)\",vr:\"FL\",name:\"IlluminationBandwidth\",vm:\"1\",version:\"DICOM\"},\"(0022,0058)\":{tag:\"(0022,0058)\",vr:\"SQ\",name:\"MydriaticAgentSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1007)\":{tag:\"(0022,1007)\",vr:\"SQ\",name:\"OphthalmicAxialMeasurementsRightEyeSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1008)\":{tag:\"(0022,1008)\",vr:\"SQ\",name:\"OphthalmicAxialMeasurementsLeftEyeSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1009)\":{tag:\"(0022,1009)\",vr:\"CS\",name:\"OphthalmicAxialMeasurementsDeviceType\",vm:\"1\",version:\"DICOM\"},\"(0022,1010)\":{tag:\"(0022,1010)\",vr:\"CS\",name:\"OphthalmicAxialLengthMeasurementsType\",vm:\"1\",version:\"DICOM\"},\"(0022,1012)\":{tag:\"(0022,1012)\",vr:\"SQ\",name:\"OphthalmicAxialLengthSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1019)\":{tag:\"(0022,1019)\",vr:\"FL\",name:\"OphthalmicAxialLength\",vm:\"1\",version:\"DICOM\"},\"(0022,1024)\":{tag:\"(0022,1024)\",vr:\"SQ\",name:\"LensStatusCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1025)\":{tag:\"(0022,1025)\",vr:\"SQ\",name:\"VitreousStatusCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1028)\":{tag:\"(0022,1028)\",vr:\"SQ\",name:\"IOLFormulaCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1029)\":{tag:\"(0022,1029)\",vr:\"LO\",name:\"IOLFormulaDetail\",vm:\"1\",version:\"DICOM\"},\"(0022,1033)\":{tag:\"(0022,1033)\",vr:\"FL\",name:\"KeratometerIndex\",vm:\"1\",version:\"DICOM\"},\"(0022,1035)\":{tag:\"(0022,1035)\",vr:\"SQ\",name:\"SourceOfOphthalmicAxialLengthCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1036)\":{tag:\"(0022,1036)\",vr:\"SQ\",name:\"SourceOfCornealSizeDataCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1037)\":{tag:\"(0022,1037)\",vr:\"FL\",name:\"TargetRefraction\",vm:\"1\",version:\"DICOM\"},\"(0022,1039)\":{tag:\"(0022,1039)\",vr:\"CS\",name:\"RefractiveProcedureOccurred\",vm:\"1\",version:\"DICOM\"},\"(0022,1040)\":{tag:\"(0022,1040)\",vr:\"SQ\",name:\"RefractiveSurgeryTypeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1044)\":{tag:\"(0022,1044)\",vr:\"SQ\",name:\"OphthalmicUltrasoundMethodCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1045)\":{tag:\"(0022,1045)\",vr:\"SQ\",name:\"SurgicallyInducedAstigmatismSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1046)\":{tag:\"(0022,1046)\",vr:\"CS\",name:\"TypeOfOpticalCorrection\",vm:\"1\",version:\"DICOM\"},\"(0022,1047)\":{tag:\"(0022,1047)\",vr:\"SQ\",name:\"ToricIOLPowerSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1048)\":{tag:\"(0022,1048)\",vr:\"SQ\",name:\"PredictedToricErrorSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1049)\":{tag:\"(0022,1049)\",vr:\"CS\",name:\"PreSelectedForImplantation\",vm:\"1\",version:\"DICOM\"},\"(0022,104A)\":{tag:\"(0022,104A)\",vr:\"SQ\",name:\"ToricIOLPowerForExactEmmetropiaSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,104B)\":{tag:\"(0022,104B)\",vr:\"SQ\",name:\"ToricIOLPowerForExactTargetRefractionSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1050)\":{tag:\"(0022,1050)\",vr:\"SQ\",name:\"OphthalmicAxialLengthMeasurementsSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1053)\":{tag:\"(0022,1053)\",vr:\"FL\",name:\"IOLPower\",vm:\"1\",version:\"DICOM\"},\"(0022,1054)\":{tag:\"(0022,1054)\",vr:\"FL\",name:\"PredictedRefractiveError\",vm:\"1\",version:\"DICOM\"},\"(0022,1059)\":{tag:\"(0022,1059)\",vr:\"FL\",name:\"OphthalmicAxialLengthVelocity\",vm:\"1\",version:\"DICOM\"},\"(0022,1065)\":{tag:\"(0022,1065)\",vr:\"LO\",name:\"LensStatusDescription\",vm:\"1\",version:\"DICOM\"},\"(0022,1066)\":{tag:\"(0022,1066)\",vr:\"LO\",name:\"VitreousStatusDescription\",vm:\"1\",version:\"DICOM\"},\"(0022,1090)\":{tag:\"(0022,1090)\",vr:\"SQ\",name:\"IOLPowerSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1092)\":{tag:\"(0022,1092)\",vr:\"SQ\",name:\"LensConstantSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1093)\":{tag:\"(0022,1093)\",vr:\"LO\",name:\"IOLManufacturer\",vm:\"1\",version:\"DICOM\"},\"(0022,1095)\":{tag:\"(0022,1095)\",vr:\"LO\",name:\"ImplantName\",vm:\"1\",version:\"DICOM\"},\"(0022,1096)\":{tag:\"(0022,1096)\",vr:\"SQ\",name:\"KeratometryMeasurementTypeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1097)\":{tag:\"(0022,1097)\",vr:\"LO\",name:\"ImplantPartNumber\",vm:\"1\",version:\"DICOM\"},\"(0022,1100)\":{tag:\"(0022,1100)\",vr:\"SQ\",name:\"ReferencedOphthalmicAxialMeasurementsSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1101)\":{tag:\"(0022,1101)\",vr:\"SQ\",name:\"OphthalmicAxialLengthMeasurementsSegmentNameCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1103)\":{tag:\"(0022,1103)\",vr:\"SQ\",name:\"RefractiveErrorBeforeRefractiveSurgeryCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1121)\":{tag:\"(0022,1121)\",vr:\"FL\",name:\"IOLPowerForExactEmmetropia\",vm:\"1\",version:\"DICOM\"},\"(0022,1122)\":{tag:\"(0022,1122)\",vr:\"FL\",name:\"IOLPowerForExactTargetRefraction\",vm:\"1\",version:\"DICOM\"},\"(0022,1125)\":{tag:\"(0022,1125)\",vr:\"SQ\",name:\"AnteriorChamberDepthDefinitionCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1127)\":{tag:\"(0022,1127)\",vr:\"SQ\",name:\"LensThicknessSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1128)\":{tag:\"(0022,1128)\",vr:\"SQ\",name:\"AnteriorChamberDepthSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,112A)\":{tag:\"(0022,112A)\",vr:\"SQ\",name:\"CalculationCommentSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,112B)\":{tag:\"(0022,112B)\",vr:\"CS\",name:\"CalculationCommentType\",vm:\"1\",version:\"DICOM\"},\"(0022,112C)\":{tag:\"(0022,112C)\",vr:\"LT\",name:\"CalculationComment\",vm:\"1\",version:\"DICOM\"},\"(0022,1130)\":{tag:\"(0022,1130)\",vr:\"FL\",name:\"LensThickness\",vm:\"1\",version:\"DICOM\"},\"(0022,1131)\":{tag:\"(0022,1131)\",vr:\"FL\",name:\"AnteriorChamberDepth\",vm:\"1\",version:\"DICOM\"},\"(0022,1132)\":{tag:\"(0022,1132)\",vr:\"SQ\",name:\"SourceOfLensThicknessDataCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1133)\":{tag:\"(0022,1133)\",vr:\"SQ\",name:\"SourceOfAnteriorChamberDepthDataCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1134)\":{tag:\"(0022,1134)\",vr:\"SQ\",name:\"SourceOfRefractiveMeasurementsSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1135)\":{tag:\"(0022,1135)\",vr:\"SQ\",name:\"SourceOfRefractiveMeasurementsCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1140)\":{tag:\"(0022,1140)\",vr:\"CS\",name:\"OphthalmicAxialLengthMeasurementModified\",vm:\"1\",version:\"DICOM\"},\"(0022,1150)\":{tag:\"(0022,1150)\",vr:\"SQ\",name:\"OphthalmicAxialLengthDataSourceCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1155)\":{tag:\"(0022,1155)\",vr:\"FL\",name:\"SignalToNoiseRatio\",vm:\"1\",version:\"DICOM\"},\"(0022,1159)\":{tag:\"(0022,1159)\",vr:\"LO\",name:\"OphthalmicAxialLengthDataSourceDescription\",vm:\"1\",version:\"DICOM\"},\"(0022,1210)\":{tag:\"(0022,1210)\",vr:\"SQ\",name:\"OphthalmicAxialLengthMeasurementsTotalLengthSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1211)\":{tag:\"(0022,1211)\",vr:\"SQ\",name:\"OphthalmicAxialLengthMeasurementsSegmentalLengthSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1212)\":{tag:\"(0022,1212)\",vr:\"SQ\",name:\"OphthalmicAxialLengthMeasurementsLengthSummationSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1220)\":{tag:\"(0022,1220)\",vr:\"SQ\",name:\"UltrasoundOphthalmicAxialLengthMeasurementsSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1225)\":{tag:\"(0022,1225)\",vr:\"SQ\",name:\"OpticalOphthalmicAxialLengthMeasurementsSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1230)\":{tag:\"(0022,1230)\",vr:\"SQ\",name:\"UltrasoundSelectedOphthalmicAxialLengthSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1250)\":{tag:\"(0022,1250)\",vr:\"SQ\",name:\"OphthalmicAxialLengthSelectionMethodCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1255)\":{tag:\"(0022,1255)\",vr:\"SQ\",name:\"OpticalSelectedOphthalmicAxialLengthSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1257)\":{tag:\"(0022,1257)\",vr:\"SQ\",name:\"SelectedSegmentalOphthalmicAxialLengthSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1260)\":{tag:\"(0022,1260)\",vr:\"SQ\",name:\"SelectedTotalOphthalmicAxialLengthSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1262)\":{tag:\"(0022,1262)\",vr:\"SQ\",name:\"OphthalmicAxialLengthQualityMetricSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1300)\":{tag:\"(0022,1300)\",vr:\"SQ\",name:\"IntraocularLensCalculationsRightEyeSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1310)\":{tag:\"(0022,1310)\",vr:\"SQ\",name:\"IntraocularLensCalculationsLeftEyeSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1330)\":{tag:\"(0022,1330)\",vr:\"SQ\",name:\"ReferencedOphthalmicAxialLengthMeasurementQCImageSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1415)\":{tag:\"(0022,1415)\",vr:\"CS\",name:\"OphthalmicMappingDeviceType\",vm:\"1\",version:\"DICOM\"},\"(0022,1420)\":{tag:\"(0022,1420)\",vr:\"SQ\",name:\"AcquisitionMethodCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1423)\":{tag:\"(0022,1423)\",vr:\"SQ\",name:\"AcquisitionMethodAlgorithmSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1436)\":{tag:\"(0022,1436)\",vr:\"SQ\",name:\"OphthalmicThicknessMapTypeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1443)\":{tag:\"(0022,1443)\",vr:\"SQ\",name:\"OphthalmicThicknessMappingNormalsSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1445)\":{tag:\"(0022,1445)\",vr:\"SQ\",name:\"RetinalThicknessDefinitionCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1450)\":{tag:\"(0022,1450)\",vr:\"SQ\",name:\"PixelValueMappingToCodedConceptSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1452)\":{tag:\"(0022,1452)\",vr:\"xs\",name:\"MappedPixelValue\",vm:\"1\",version:\"DICOM\"},\"(0022,1454)\":{tag:\"(0022,1454)\",vr:\"LO\",name:\"PixelValueMappingExplanation\",vm:\"1\",version:\"DICOM\"},\"(0022,1458)\":{tag:\"(0022,1458)\",vr:\"SQ\",name:\"OphthalmicThicknessMapQualityThresholdSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1460)\":{tag:\"(0022,1460)\",vr:\"FL\",name:\"OphthalmicThicknessMapThresholdQualityRating\",vm:\"1\",version:\"DICOM\"},\"(0022,1463)\":{tag:\"(0022,1463)\",vr:\"FL\",name:\"AnatomicStructureReferencePoint\",vm:\"2\",version:\"DICOM\"},\"(0022,1465)\":{tag:\"(0022,1465)\",vr:\"SQ\",name:\"RegistrationToLocalizerSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1466)\":{tag:\"(0022,1466)\",vr:\"CS\",name:\"RegisteredLocalizerUnits\",vm:\"1\",version:\"DICOM\"},\"(0022,1467)\":{tag:\"(0022,1467)\",vr:\"FL\",name:\"RegisteredLocalizerTopLeftHandCorner\",vm:\"2\",version:\"DICOM\"},\"(0022,1468)\":{tag:\"(0022,1468)\",vr:\"FL\",name:\"RegisteredLocalizerBottomRightHandCorner\",vm:\"2\",version:\"DICOM\"},\"(0022,1470)\":{tag:\"(0022,1470)\",vr:\"SQ\",name:\"OphthalmicThicknessMapQualityRatingSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1472)\":{tag:\"(0022,1472)\",vr:\"SQ\",name:\"RelevantOPTAttributesSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1512)\":{tag:\"(0022,1512)\",vr:\"SQ\",name:\"TransformationMethodCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1513)\":{tag:\"(0022,1513)\",vr:\"SQ\",name:\"TransformationAlgorithmSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1515)\":{tag:\"(0022,1515)\",vr:\"CS\",name:\"OphthalmicAxialLengthMethod\",vm:\"1\",version:\"DICOM\"},\"(0022,1517)\":{tag:\"(0022,1517)\",vr:\"FL\",name:\"OphthalmicFOV\",vm:\"1\",version:\"DICOM\"},\"(0022,1518)\":{tag:\"(0022,1518)\",vr:\"SQ\",name:\"TwoDimensionalToThreeDimensionalMapSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1525)\":{tag:\"(0022,1525)\",vr:\"SQ\",name:\"WideFieldOphthalmicPhotographyQualityRatingSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1526)\":{tag:\"(0022,1526)\",vr:\"SQ\",name:\"WideFieldOphthalmicPhotographyQualityThresholdSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1527)\":{tag:\"(0022,1527)\",vr:\"FL\",name:\"WideFieldOphthalmicPhotographyThresholdQualityRating\",vm:\"1\",version:\"DICOM\"},\"(0022,1528)\":{tag:\"(0022,1528)\",vr:\"FL\",name:\"XCoordinatesCenterPixelViewAngle\",vm:\"1\",version:\"DICOM\"},\"(0022,1529)\":{tag:\"(0022,1529)\",vr:\"FL\",name:\"YCoordinatesCenterPixelViewAngle\",vm:\"1\",version:\"DICOM\"},\"(0022,1530)\":{tag:\"(0022,1530)\",vr:\"UL\",name:\"NumberOfMapPoints\",vm:\"1\",version:\"DICOM\"},\"(0022,1531)\":{tag:\"(0022,1531)\",vr:\"OF\",name:\"TwoDimensionalToThreeDimensionalMapData\",vm:\"1\",version:\"DICOM\"},\"(0022,1612)\":{tag:\"(0022,1612)\",vr:\"SQ\",name:\"DerivationAlgorithmSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1615)\":{tag:\"(0022,1615)\",vr:\"SQ\",name:\"OphthalmicImageTypeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1616)\":{tag:\"(0022,1616)\",vr:\"LO\",name:\"OphthalmicImageTypeDescription\",vm:\"1\",version:\"DICOM\"},\"(0022,1618)\":{tag:\"(0022,1618)\",vr:\"SQ\",name:\"ScanPatternTypeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1620)\":{tag:\"(0022,1620)\",vr:\"SQ\",name:\"ReferencedSurfaceMeshIdentificationSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1622)\":{tag:\"(0022,1622)\",vr:\"CS\",name:\"OphthalmicVolumetricPropertiesFlag\",vm:\"1\",version:\"DICOM\"},\"(0022,1624)\":{tag:\"(0022,1624)\",vr:\"FL\",name:\"OphthalmicAnatomicReferencePointXCoordinate\",vm:\"1\",version:\"DICOM\"},\"(0022,1626)\":{tag:\"(0022,1626)\",vr:\"FL\",name:\"OphthalmicAnatomicReferencePointYCoordinate\",vm:\"1\",version:\"DICOM\"},\"(0022,1628)\":{tag:\"(0022,1628)\",vr:\"SQ\",name:\"OphthalmicEnFaceImageQualityRatingSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1630)\":{tag:\"(0022,1630)\",vr:\"DS\",name:\"QualityThreshold\",vm:\"1\",version:\"DICOM\"},\"(0022,1640)\":{tag:\"(0022,1640)\",vr:\"SQ\",name:\"OCTBscanAnalysisAcquisitionParametersSequence\",vm:\"1\",version:\"DICOM\"},\"(0022,1642)\":{tag:\"(0022,1642)\",vr:\"UL\",name:\"NumberofBscansPerFrame\",vm:\"1\",version:\"DICOM\"},\"(0022,1643)\":{tag:\"(0022,1643)\",vr:\"FL\",name:\"BscanSlabThickness\",vm:\"1\",version:\"DICOM\"},\"(0022,1644)\":{tag:\"(0022,1644)\",vr:\"FL\",name:\"DistanceBetweenBscanSlabs\",vm:\"1\",version:\"DICOM\"},\"(0022,1645)\":{tag:\"(0022,1645)\",vr:\"FL\",name:\"BscanCycleTime\",vm:\"1\",version:\"DICOM\"},\"(0022,1646)\":{tag:\"(0022,1646)\",vr:\"FL\",name:\"BscanCycleTimeVector\",vm:\"1-n\",version:\"DICOM\"},\"(0022,1649)\":{tag:\"(0022,1649)\",vr:\"FL\",name:\"AscanRate\",vm:\"1\",version:\"DICOM\"},\"(0022,1650)\":{tag:\"(0022,1650)\",vr:\"FL\",name:\"BscanRate\",vm:\"1\",version:\"DICOM\"},\"(0022,1658)\":{tag:\"(0022,1658)\",vr:\"UL\",name:\"SurfaceMeshZPixelOffset\",vm:\"1\",version:\"DICOM\"},\"(0024,0010)\":{tag:\"(0024,0010)\",vr:\"FL\",name:\"VisualFieldHorizontalExtent\",vm:\"1\",version:\"DICOM\"},\"(0024,0011)\":{tag:\"(0024,0011)\",vr:\"FL\",name:\"VisualFieldVerticalExtent\",vm:\"1\",version:\"DICOM\"},\"(0024,0012)\":{tag:\"(0024,0012)\",vr:\"CS\",name:\"VisualFieldShape\",vm:\"1\",version:\"DICOM\"},\"(0024,0016)\":{tag:\"(0024,0016)\",vr:\"SQ\",name:\"ScreeningTestModeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0024,0018)\":{tag:\"(0024,0018)\",vr:\"FL\",name:\"MaximumStimulusLuminance\",vm:\"1\",version:\"DICOM\"},\"(0024,0020)\":{tag:\"(0024,0020)\",vr:\"FL\",name:\"BackgroundLuminance\",vm:\"1\",version:\"DICOM\"},\"(0024,0021)\":{tag:\"(0024,0021)\",vr:\"SQ\",name:\"StimulusColorCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0024,0024)\":{tag:\"(0024,0024)\",vr:\"SQ\",name:\"BackgroundIlluminationColorCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0024,0025)\":{tag:\"(0024,0025)\",vr:\"FL\",name:\"StimulusArea\",vm:\"1\",version:\"DICOM\"},\"(0024,0028)\":{tag:\"(0024,0028)\",vr:\"FL\",name:\"StimulusPresentationTime\",vm:\"1\",version:\"DICOM\"},\"(0024,0032)\":{tag:\"(0024,0032)\",vr:\"SQ\",name:\"FixationSequence\",vm:\"1\",version:\"DICOM\"},\"(0024,0033)\":{tag:\"(0024,0033)\",vr:\"SQ\",name:\"FixationMonitoringCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0024,0034)\":{tag:\"(0024,0034)\",vr:\"SQ\",name:\"VisualFieldCatchTrialSequence\",vm:\"1\",version:\"DICOM\"},\"(0024,0035)\":{tag:\"(0024,0035)\",vr:\"US\",name:\"FixationCheckedQuantity\",vm:\"1\",version:\"DICOM\"},\"(0024,0036)\":{tag:\"(0024,0036)\",vr:\"US\",name:\"PatientNotProperlyFixatedQuantity\",vm:\"1\",version:\"DICOM\"},\"(0024,0037)\":{tag:\"(0024,0037)\",vr:\"CS\",name:\"PresentedVisualStimuliDataFlag\",vm:\"1\",version:\"DICOM\"},\"(0024,0038)\":{tag:\"(0024,0038)\",vr:\"US\",name:\"NumberOfVisualStimuli\",vm:\"1\",version:\"DICOM\"},\"(0024,0039)\":{tag:\"(0024,0039)\",vr:\"CS\",name:\"ExcessiveFixationLossesDataFlag\",vm:\"1\",version:\"DICOM\"},\"(0024,0040)\":{tag:\"(0024,0040)\",vr:\"CS\",name:\"ExcessiveFixationLosses\",vm:\"1\",version:\"DICOM\"},\"(0024,0042)\":{tag:\"(0024,0042)\",vr:\"US\",name:\"StimuliRetestingQuantity\",vm:\"1\",version:\"DICOM\"},\"(0024,0044)\":{tag:\"(0024,0044)\",vr:\"LT\",name:\"CommentsOnPatientPerformanceOfVisualField\",vm:\"1\",version:\"DICOM\"},\"(0024,0045)\":{tag:\"(0024,0045)\",vr:\"CS\",name:\"FalseNegativesEstimateFlag\",vm:\"1\",version:\"DICOM\"},\"(0024,0046)\":{tag:\"(0024,0046)\",vr:\"FL\",name:\"FalseNegativesEstimate\",vm:\"1\",version:\"DICOM\"},\"(0024,0048)\":{tag:\"(0024,0048)\",vr:\"US\",name:\"NegativeCatchTrialsQuantity\",vm:\"1\",version:\"DICOM\"},\"(0024,0050)\":{tag:\"(0024,0050)\",vr:\"US\",name:\"FalseNegativesQuantity\",vm:\"1\",version:\"DICOM\"},\"(0024,0051)\":{tag:\"(0024,0051)\",vr:\"CS\",name:\"ExcessiveFalseNegativesDataFlag\",vm:\"1\",version:\"DICOM\"},\"(0024,0052)\":{tag:\"(0024,0052)\",vr:\"CS\",name:\"ExcessiveFalseNegatives\",vm:\"1\",version:\"DICOM\"},\"(0024,0053)\":{tag:\"(0024,0053)\",vr:\"CS\",name:\"FalsePositivesEstimateFlag\",vm:\"1\",version:\"DICOM\"},\"(0024,0054)\":{tag:\"(0024,0054)\",vr:\"FL\",name:\"FalsePositivesEstimate\",vm:\"1\",version:\"DICOM\"},\"(0024,0055)\":{tag:\"(0024,0055)\",vr:\"CS\",name:\"CatchTrialsDataFlag\",vm:\"1\",version:\"DICOM\"},\"(0024,0056)\":{tag:\"(0024,0056)\",vr:\"US\",name:\"PositiveCatchTrialsQuantity\",vm:\"1\",version:\"DICOM\"},\"(0024,0057)\":{tag:\"(0024,0057)\",vr:\"CS\",name:\"TestPointNormalsDataFlag\",vm:\"1\",version:\"DICOM\"},\"(0024,0058)\":{tag:\"(0024,0058)\",vr:\"SQ\",name:\"TestPointNormalsSequence\",vm:\"1\",version:\"DICOM\"},\"(0024,0059)\":{tag:\"(0024,0059)\",vr:\"CS\",name:\"GlobalDeviationProbabilityNormalsFlag\",vm:\"1\",version:\"DICOM\"},\"(0024,0060)\":{tag:\"(0024,0060)\",vr:\"US\",name:\"FalsePositivesQuantity\",vm:\"1\",version:\"DICOM\"},\"(0024,0061)\":{tag:\"(0024,0061)\",vr:\"CS\",name:\"ExcessiveFalsePositivesDataFlag\",vm:\"1\",version:\"DICOM\"},\"(0024,0062)\":{tag:\"(0024,0062)\",vr:\"CS\",name:\"ExcessiveFalsePositives\",vm:\"1\",version:\"DICOM\"},\"(0024,0063)\":{tag:\"(0024,0063)\",vr:\"CS\",name:\"VisualFieldTestNormalsFlag\",vm:\"1\",version:\"DICOM\"},\"(0024,0064)\":{tag:\"(0024,0064)\",vr:\"SQ\",name:\"ResultsNormalsSequence\",vm:\"1\",version:\"DICOM\"},\"(0024,0065)\":{tag:\"(0024,0065)\",vr:\"SQ\",name:\"AgeCorrectedSensitivityDeviationAlgorithmSequence\",vm:\"1\",version:\"DICOM\"},\"(0024,0066)\":{tag:\"(0024,0066)\",vr:\"FL\",name:\"GlobalDeviationFromNormal\",vm:\"1\",version:\"DICOM\"},\"(0024,0067)\":{tag:\"(0024,0067)\",vr:\"SQ\",name:\"GeneralizedDefectSensitivityDeviationAlgorithmSequence\",vm:\"1\",version:\"DICOM\"},\"(0024,0068)\":{tag:\"(0024,0068)\",vr:\"FL\",name:\"LocalizedDeviationFromNormal\",vm:\"1\",version:\"DICOM\"},\"(0024,0069)\":{tag:\"(0024,0069)\",vr:\"LO\",name:\"PatientReliabilityIndicator\",vm:\"1\",version:\"DICOM\"},\"(0024,0070)\":{tag:\"(0024,0070)\",vr:\"FL\",name:\"VisualFieldMeanSensitivity\",vm:\"1\",version:\"DICOM\"},\"(0024,0071)\":{tag:\"(0024,0071)\",vr:\"FL\",name:\"GlobalDeviationProbability\",vm:\"1\",version:\"DICOM\"},\"(0024,0072)\":{tag:\"(0024,0072)\",vr:\"CS\",name:\"LocalDeviationProbabilityNormalsFlag\",vm:\"1\",version:\"DICOM\"},\"(0024,0073)\":{tag:\"(0024,0073)\",vr:\"FL\",name:\"LocalizedDeviationProbability\",vm:\"1\",version:\"DICOM\"},\"(0024,0074)\":{tag:\"(0024,0074)\",vr:\"CS\",name:\"ShortTermFluctuationCalculated\",vm:\"1\",version:\"DICOM\"},\"(0024,0075)\":{tag:\"(0024,0075)\",vr:\"FL\",name:\"ShortTermFluctuation\",vm:\"1\",version:\"DICOM\"},\"(0024,0076)\":{tag:\"(0024,0076)\",vr:\"CS\",name:\"ShortTermFluctuationProbabilityCalculated\",vm:\"1\",version:\"DICOM\"},\"(0024,0077)\":{tag:\"(0024,0077)\",vr:\"FL\",name:\"ShortTermFluctuationProbability\",vm:\"1\",version:\"DICOM\"},\"(0024,0078)\":{tag:\"(0024,0078)\",vr:\"CS\",name:\"CorrectedLocalizedDeviationFromNormalCalculated\",vm:\"1\",version:\"DICOM\"},\"(0024,0079)\":{tag:\"(0024,0079)\",vr:\"FL\",name:\"CorrectedLocalizedDeviationFromNormal\",vm:\"1\",version:\"DICOM\"},\"(0024,0080)\":{tag:\"(0024,0080)\",vr:\"CS\",name:\"CorrectedLocalizedDeviationFromNormalProbabilityCalculated\",vm:\"1\",version:\"DICOM\"},\"(0024,0081)\":{tag:\"(0024,0081)\",vr:\"FL\",name:\"CorrectedLocalizedDeviationFromNormalProbability\",vm:\"1\",version:\"DICOM\"},\"(0024,0083)\":{tag:\"(0024,0083)\",vr:\"SQ\",name:\"GlobalDeviationProbabilitySequence\",vm:\"1\",version:\"DICOM\"},\"(0024,0085)\":{tag:\"(0024,0085)\",vr:\"SQ\",name:\"LocalizedDeviationProbabilitySequence\",vm:\"1\",version:\"DICOM\"},\"(0024,0086)\":{tag:\"(0024,0086)\",vr:\"CS\",name:\"FovealSensitivityMeasured\",vm:\"1\",version:\"DICOM\"},\"(0024,0087)\":{tag:\"(0024,0087)\",vr:\"FL\",name:\"FovealSensitivity\",vm:\"1\",version:\"DICOM\"},\"(0024,0088)\":{tag:\"(0024,0088)\",vr:\"FL\",name:\"VisualFieldTestDuration\",vm:\"1\",version:\"DICOM\"},\"(0024,0089)\":{tag:\"(0024,0089)\",vr:\"SQ\",name:\"VisualFieldTestPointSequence\",vm:\"1\",version:\"DICOM\"},\"(0024,0090)\":{tag:\"(0024,0090)\",vr:\"FL\",name:\"VisualFieldTestPointXCoordinate\",vm:\"1\",version:\"DICOM\"},\"(0024,0091)\":{tag:\"(0024,0091)\",vr:\"FL\",name:\"VisualFieldTestPointYCoordinate\",vm:\"1\",version:\"DICOM\"},\"(0024,0092)\":{tag:\"(0024,0092)\",vr:\"FL\",name:\"AgeCorrectedSensitivityDeviationValue\",vm:\"1\",version:\"DICOM\"},\"(0024,0093)\":{tag:\"(0024,0093)\",vr:\"CS\",name:\"StimulusResults\",vm:\"1\",version:\"DICOM\"},\"(0024,0094)\":{tag:\"(0024,0094)\",vr:\"FL\",name:\"SensitivityValue\",vm:\"1\",version:\"DICOM\"},\"(0024,0095)\":{tag:\"(0024,0095)\",vr:\"CS\",name:\"RetestStimulusSeen\",vm:\"1\",version:\"DICOM\"},\"(0024,0096)\":{tag:\"(0024,0096)\",vr:\"FL\",name:\"RetestSensitivityValue\",vm:\"1\",version:\"DICOM\"},\"(0024,0097)\":{tag:\"(0024,0097)\",vr:\"SQ\",name:\"VisualFieldTestPointNormalsSequence\",vm:\"1\",version:\"DICOM\"},\"(0024,0098)\":{tag:\"(0024,0098)\",vr:\"FL\",name:\"QuantifiedDefect\",vm:\"1\",version:\"DICOM\"},\"(0024,0100)\":{tag:\"(0024,0100)\",vr:\"FL\",name:\"AgeCorrectedSensitivityDeviationProbabilityValue\",vm:\"1\",version:\"DICOM\"},\"(0024,0102)\":{tag:\"(0024,0102)\",vr:\"CS\",name:\"GeneralizedDefectCorrectedSensitivityDeviationFlag\",vm:\"1\",version:\"DICOM\"},\"(0024,0103)\":{tag:\"(0024,0103)\",vr:\"FL\",name:\"GeneralizedDefectCorrectedSensitivityDeviationValue\",vm:\"1\",version:\"DICOM\"},\"(0024,0104)\":{tag:\"(0024,0104)\",vr:\"FL\",name:\"GeneralizedDefectCorrectedSensitivityDeviationProbabilityValue\",vm:\"1\",version:\"DICOM\"},\"(0024,0105)\":{tag:\"(0024,0105)\",vr:\"FL\",name:\"MinimumSensitivityValue\",vm:\"1\",version:\"DICOM\"},\"(0024,0106)\":{tag:\"(0024,0106)\",vr:\"CS\",name:\"BlindSpotLocalized\",vm:\"1\",version:\"DICOM\"},\"(0024,0107)\":{tag:\"(0024,0107)\",vr:\"FL\",name:\"BlindSpotXCoordinate\",vm:\"1\",version:\"DICOM\"},\"(0024,0108)\":{tag:\"(0024,0108)\",vr:\"FL\",name:\"BlindSpotYCoordinate\",vm:\"1\",version:\"DICOM\"},\"(0024,0110)\":{tag:\"(0024,0110)\",vr:\"SQ\",name:\"VisualAcuityMeasurementSequence\",vm:\"1\",version:\"DICOM\"},\"(0024,0112)\":{tag:\"(0024,0112)\",vr:\"SQ\",name:\"RefractiveParametersUsedOnPatientSequence\",vm:\"1\",version:\"DICOM\"},\"(0024,0113)\":{tag:\"(0024,0113)\",vr:\"CS\",name:\"MeasurementLaterality\",vm:\"1\",version:\"DICOM\"},\"(0024,0114)\":{tag:\"(0024,0114)\",vr:\"SQ\",name:\"OphthalmicPatientClinicalInformationLeftEyeSequence\",vm:\"1\",version:\"DICOM\"},\"(0024,0115)\":{tag:\"(0024,0115)\",vr:\"SQ\",name:\"OphthalmicPatientClinicalInformationRightEyeSequence\",vm:\"1\",version:\"DICOM\"},\"(0024,0117)\":{tag:\"(0024,0117)\",vr:\"CS\",name:\"FovealPointNormativeDataFlag\",vm:\"1\",version:\"DICOM\"},\"(0024,0118)\":{tag:\"(0024,0118)\",vr:\"FL\",name:\"FovealPointProbabilityValue\",vm:\"1\",version:\"DICOM\"},\"(0024,0120)\":{tag:\"(0024,0120)\",vr:\"CS\",name:\"ScreeningBaselineMeasured\",vm:\"1\",version:\"DICOM\"},\"(0024,0122)\":{tag:\"(0024,0122)\",vr:\"SQ\",name:\"ScreeningBaselineMeasuredSequence\",vm:\"1\",version:\"DICOM\"},\"(0024,0124)\":{tag:\"(0024,0124)\",vr:\"CS\",name:\"ScreeningBaselineType\",vm:\"1\",version:\"DICOM\"},\"(0024,0126)\":{tag:\"(0024,0126)\",vr:\"FL\",name:\"ScreeningBaselineValue\",vm:\"1\",version:\"DICOM\"},\"(0024,0202)\":{tag:\"(0024,0202)\",vr:\"LO\",name:\"AlgorithmSource\",vm:\"1\",version:\"DICOM\"},\"(0024,0306)\":{tag:\"(0024,0306)\",vr:\"LO\",name:\"DataSetName\",vm:\"1\",version:\"DICOM\"},\"(0024,0307)\":{tag:\"(0024,0307)\",vr:\"LO\",name:\"DataSetVersion\",vm:\"1\",version:\"DICOM\"},\"(0024,0308)\":{tag:\"(0024,0308)\",vr:\"LO\",name:\"DataSetSource\",vm:\"1\",version:\"DICOM\"},\"(0024,0309)\":{tag:\"(0024,0309)\",vr:\"LO\",name:\"DataSetDescription\",vm:\"1\",version:\"DICOM\"},\"(0024,0317)\":{tag:\"(0024,0317)\",vr:\"SQ\",name:\"VisualFieldTestReliabilityGlobalIndexSequence\",vm:\"1\",version:\"DICOM\"},\"(0024,0320)\":{tag:\"(0024,0320)\",vr:\"SQ\",name:\"VisualFieldGlobalResultsIndexSequence\",vm:\"1\",version:\"DICOM\"},\"(0024,0325)\":{tag:\"(0024,0325)\",vr:\"SQ\",name:\"DataObservationSequence\",vm:\"1\",version:\"DICOM\"},\"(0024,0338)\":{tag:\"(0024,0338)\",vr:\"CS\",name:\"IndexNormalsFlag\",vm:\"1\",version:\"DICOM\"},\"(0024,0341)\":{tag:\"(0024,0341)\",vr:\"FL\",name:\"IndexProbability\",vm:\"1\",version:\"DICOM\"},\"(0024,0344)\":{tag:\"(0024,0344)\",vr:\"SQ\",name:\"IndexProbabilitySequence\",vm:\"1\",version:\"DICOM\"},\"(0028,0002)\":{tag:\"(0028,0002)\",vr:\"US\",name:\"SamplesPerPixel\",vm:\"1\",version:\"DICOM\"},\"(0028,0003)\":{tag:\"(0028,0003)\",vr:\"US\",name:\"SamplesPerPixelUsed\",vm:\"1\",version:\"DICOM\"},\"(0028,0004)\":{tag:\"(0028,0004)\",vr:\"CS\",name:\"PhotometricInterpretation\",vm:\"1\",version:\"DICOM\"},\"(0028,0006)\":{tag:\"(0028,0006)\",vr:\"US\",name:\"PlanarConfiguration\",vm:\"1\",version:\"DICOM\"},\"(0028,0008)\":{tag:\"(0028,0008)\",vr:\"IS\",name:\"NumberOfFrames\",vm:\"1\",version:\"DICOM\"},\"(0028,0009)\":{tag:\"(0028,0009)\",vr:\"AT\",name:\"FrameIncrementPointer\",vm:\"1-n\",version:\"DICOM\"},\"(0028,000A)\":{tag:\"(0028,000A)\",vr:\"AT\",name:\"FrameDimensionPointer\",vm:\"1-n\",version:\"DICOM\"},\"(0028,0010)\":{tag:\"(0028,0010)\",vr:\"US\",name:\"Rows\",vm:\"1\",version:\"DICOM\"},\"(0028,0011)\":{tag:\"(0028,0011)\",vr:\"US\",name:\"Columns\",vm:\"1\",version:\"DICOM\"},\"(0028,0014)\":{tag:\"(0028,0014)\",vr:\"US\",name:\"UltrasoundColorDataPresent\",vm:\"1\",version:\"DICOM\"},\"(0028,0030)\":{tag:\"(0028,0030)\",vr:\"DS\",name:\"PixelSpacing\",vm:\"2\",version:\"DICOM\"},\"(0028,0031)\":{tag:\"(0028,0031)\",vr:\"DS\",name:\"ZoomFactor\",vm:\"2\",version:\"DICOM\"},\"(0028,0032)\":{tag:\"(0028,0032)\",vr:\"DS\",name:\"ZoomCenter\",vm:\"2\",version:\"DICOM\"},\"(0028,0034)\":{tag:\"(0028,0034)\",vr:\"IS\",name:\"PixelAspectRatio\",vm:\"2\",version:\"DICOM\"},\"(0028,0051)\":{tag:\"(0028,0051)\",vr:\"CS\",name:\"CorrectedImage\",vm:\"1-n\",version:\"DICOM\"},\"(0028,0100)\":{tag:\"(0028,0100)\",vr:\"US\",name:\"BitsAllocated\",vm:\"1\",version:\"DICOM\"},\"(0028,0101)\":{tag:\"(0028,0101)\",vr:\"US\",name:\"BitsStored\",vm:\"1\",version:\"DICOM\"},\"(0028,0102)\":{tag:\"(0028,0102)\",vr:\"US\",name:\"HighBit\",vm:\"1\",version:\"DICOM\"},\"(0028,0103)\":{tag:\"(0028,0103)\",vr:\"US\",name:\"PixelRepresentation\",vm:\"1\",version:\"DICOM\"},\"(0028,0106)\":{tag:\"(0028,0106)\",vr:\"xs\",name:\"SmallestImagePixelValue\",vm:\"1\",version:\"DICOM\"},\"(0028,0107)\":{tag:\"(0028,0107)\",vr:\"xs\",name:\"LargestImagePixelValue\",vm:\"1\",version:\"DICOM\"},\"(0028,0108)\":{tag:\"(0028,0108)\",vr:\"xs\",name:\"SmallestPixelValueInSeries\",vm:\"1\",version:\"DICOM\"},\"(0028,0109)\":{tag:\"(0028,0109)\",vr:\"xs\",name:\"LargestPixelValueInSeries\",vm:\"1\",version:\"DICOM\"},\"(0028,0120)\":{tag:\"(0028,0120)\",vr:\"xs\",name:\"PixelPaddingValue\",vm:\"1\",version:\"DICOM\"},\"(0028,0121)\":{tag:\"(0028,0121)\",vr:\"xs\",name:\"PixelPaddingRangeLimit\",vm:\"1\",version:\"DICOM\"},\"(0028,0122)\":{tag:\"(0028,0122)\",vr:\"FL\",name:\"FloatPixelPaddingValue\",vm:\"1\",version:\"DICOM\"},\"(0028,0123)\":{tag:\"(0028,0123)\",vr:\"FD\",name:\"DoubleFloatPixelPaddingValue\",vm:\"1\",version:\"DICOM\"},\"(0028,0124)\":{tag:\"(0028,0124)\",vr:\"FL\",name:\"FloatPixelPaddingRangeLimit\",vm:\"1\",version:\"DICOM\"},\"(0028,0125)\":{tag:\"(0028,0125)\",vr:\"FD\",name:\"DoubleFloatPixelPaddingRangeLimit\",vm:\"1\",version:\"DICOM\"},\"(0028,0300)\":{tag:\"(0028,0300)\",vr:\"CS\",name:\"QualityControlImage\",vm:\"1\",version:\"DICOM\"},\"(0028,0301)\":{tag:\"(0028,0301)\",vr:\"CS\",name:\"BurnedInAnnotation\",vm:\"1\",version:\"DICOM\"},\"(0028,0302)\":{tag:\"(0028,0302)\",vr:\"CS\",name:\"RecognizableVisualFeatures\",vm:\"1\",version:\"DICOM\"},\"(0028,0303)\":{tag:\"(0028,0303)\",vr:\"CS\",name:\"LongitudinalTemporalInformationModified\",vm:\"1\",version:\"DICOM\"},\"(0028,0304)\":{tag:\"(0028,0304)\",vr:\"UI\",name:\"ReferencedColorPaletteInstanceUID\",vm:\"1\",version:\"DICOM\"},\"(0028,0A02)\":{tag:\"(0028,0A02)\",vr:\"CS\",name:\"PixelSpacingCalibrationType\",vm:\"1\",version:\"DICOM\"},\"(0028,0A04)\":{tag:\"(0028,0A04)\",vr:\"LO\",name:\"PixelSpacingCalibrationDescription\",vm:\"1\",version:\"DICOM\"},\"(0028,1040)\":{tag:\"(0028,1040)\",vr:\"CS\",name:\"PixelIntensityRelationship\",vm:\"1\",version:\"DICOM\"},\"(0028,1041)\":{tag:\"(0028,1041)\",vr:\"SS\",name:\"PixelIntensityRelationshipSign\",vm:\"1\",version:\"DICOM\"},\"(0028,1050)\":{tag:\"(0028,1050)\",vr:\"DS\",name:\"WindowCenter\",vm:\"1-n\",version:\"DICOM\"},\"(0028,1051)\":{tag:\"(0028,1051)\",vr:\"DS\",name:\"WindowWidth\",vm:\"1-n\",version:\"DICOM\"},\"(0028,1052)\":{tag:\"(0028,1052)\",vr:\"DS\",name:\"RescaleIntercept\",vm:\"1\",version:\"DICOM\"},\"(0028,1053)\":{tag:\"(0028,1053)\",vr:\"DS\",name:\"RescaleSlope\",vm:\"1\",version:\"DICOM\"},\"(0028,1054)\":{tag:\"(0028,1054)\",vr:\"LO\",name:\"RescaleType\",vm:\"1\",version:\"DICOM\"},\"(0028,1055)\":{tag:\"(0028,1055)\",vr:\"LO\",name:\"WindowCenterWidthExplanation\",vm:\"1-n\",version:\"DICOM\"},\"(0028,1056)\":{tag:\"(0028,1056)\",vr:\"CS\",name:\"VOILUTFunction\",vm:\"1\",version:\"DICOM\"},\"(0028,1090)\":{tag:\"(0028,1090)\",vr:\"CS\",name:\"RecommendedViewingMode\",vm:\"1\",version:\"DICOM\"},\"(0028,1101)\":{tag:\"(0028,1101)\",vr:\"xs\",name:\"RedPaletteColorLookupTableDescriptor\",vm:\"3\",version:\"DICOM\"},\"(0028,1102)\":{tag:\"(0028,1102)\",vr:\"xs\",name:\"GreenPaletteColorLookupTableDescriptor\",vm:\"3\",version:\"DICOM\"},\"(0028,1103)\":{tag:\"(0028,1103)\",vr:\"xs\",name:\"BluePaletteColorLookupTableDescriptor\",vm:\"3\",version:\"DICOM\"},\"(0028,1104)\":{tag:\"(0028,1104)\",vr:\"US\",name:\"AlphaPaletteColorLookupTableDescriptor\",vm:\"3\",version:\"DICOM\"},\"(0028,1199)\":{tag:\"(0028,1199)\",vr:\"UI\",name:\"PaletteColorLookupTableUID\",vm:\"1\",version:\"DICOM\"},\"(0028,1201)\":{tag:\"(0028,1201)\",vr:\"OW\",name:\"RedPaletteColorLookupTableData\",vm:\"1\",version:\"DICOM\"},\"(0028,1202)\":{tag:\"(0028,1202)\",vr:\"OW\",name:\"GreenPaletteColorLookupTableData\",vm:\"1\",version:\"DICOM\"},\"(0028,1203)\":{tag:\"(0028,1203)\",vr:\"OW\",name:\"BluePaletteColorLookupTableData\",vm:\"1\",version:\"DICOM\"},\"(0028,1204)\":{tag:\"(0028,1204)\",vr:\"OW\",name:\"AlphaPaletteColorLookupTableData\",vm:\"1\",version:\"DICOM\"},\"(0028,1221)\":{tag:\"(0028,1221)\",vr:\"OW\",name:\"SegmentedRedPaletteColorLookupTableData\",vm:\"1\",version:\"DICOM\"},\"(0028,1222)\":{tag:\"(0028,1222)\",vr:\"OW\",name:\"SegmentedGreenPaletteColorLookupTableData\",vm:\"1\",version:\"DICOM\"},\"(0028,1223)\":{tag:\"(0028,1223)\",vr:\"OW\",name:\"SegmentedBluePaletteColorLookupTableData\",vm:\"1\",version:\"DICOM\"},\"(0028,1230)\":{tag:\"(0028,1230)\",vr:\"SQ\",name:\"StoredValueColorRangeSequence\",vm:\"1\",version:\"DICOM\"},\"(0028,1231)\":{tag:\"(0028,1231)\",vr:\"FD\",name:\"MinimumStoredValueMapped\",vm:\"1\",version:\"DICOM\"},\"(0028,1232)\":{tag:\"(0028,1232)\",vr:\"FD\",name:\"MaximumStoredValueMapped\",vm:\"1\",version:\"DICOM\"},\"(0028,1300)\":{tag:\"(0028,1300)\",vr:\"CS\",name:\"BreastImplantPresent\",vm:\"1\",version:\"DICOM\"},\"(0028,1350)\":{tag:\"(0028,1350)\",vr:\"CS\",name:\"PartialView\",vm:\"1\",version:\"DICOM\"},\"(0028,1351)\":{tag:\"(0028,1351)\",vr:\"ST\",name:\"PartialViewDescription\",vm:\"1\",version:\"DICOM\"},\"(0028,1352)\":{tag:\"(0028,1352)\",vr:\"SQ\",name:\"PartialViewCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0028,135A)\":{tag:\"(0028,135A)\",vr:\"CS\",name:\"SpatialLocationsPreserved\",vm:\"1\",version:\"DICOM\"},\"(0028,1401)\":{tag:\"(0028,1401)\",vr:\"SQ\",name:\"DataFrameAssignmentSequence\",vm:\"1\",version:\"DICOM\"},\"(0028,1402)\":{tag:\"(0028,1402)\",vr:\"CS\",name:\"DataPathAssignment\",vm:\"1\",version:\"DICOM\"},\"(0028,1403)\":{tag:\"(0028,1403)\",vr:\"US\",name:\"BitsMappedToColorLookupTable\",vm:\"1\",version:\"DICOM\"},\"(0028,1404)\":{tag:\"(0028,1404)\",vr:\"SQ\",name:\"BlendingLUT1Sequence\",vm:\"1\",version:\"DICOM\"},\"(0028,1405)\":{tag:\"(0028,1405)\",vr:\"CS\",name:\"BlendingLUT1TransferFunction\",vm:\"1\",version:\"DICOM\"},\"(0028,1406)\":{tag:\"(0028,1406)\",vr:\"FD\",name:\"BlendingWeightConstant\",vm:\"1\",version:\"DICOM\"},\"(0028,1407)\":{tag:\"(0028,1407)\",vr:\"US\",name:\"BlendingLookupTableDescriptor\",vm:\"3\",version:\"DICOM\"},\"(0028,1408)\":{tag:\"(0028,1408)\",vr:\"OW\",name:\"BlendingLookupTableData\",vm:\"1\",version:\"DICOM\"},\"(0028,140B)\":{tag:\"(0028,140B)\",vr:\"SQ\",name:\"EnhancedPaletteColorLookupTableSequence\",vm:\"1\",version:\"DICOM\"},\"(0028,140C)\":{tag:\"(0028,140C)\",vr:\"SQ\",name:\"BlendingLUT2Sequence\",vm:\"1\",version:\"DICOM\"},\"(0028,140D)\":{tag:\"(0028,140D)\",vr:\"CS\",name:\"BlendingLUT2TransferFunction\",vm:\"1\",version:\"DICOM\"},\"(0028,140E)\":{tag:\"(0028,140E)\",vr:\"CS\",name:\"DataPathID\",vm:\"1\",version:\"DICOM\"},\"(0028,140F)\":{tag:\"(0028,140F)\",vr:\"CS\",name:\"RGBLUTTransferFunction\",vm:\"1\",version:\"DICOM\"},\"(0028,1410)\":{tag:\"(0028,1410)\",vr:\"CS\",name:\"AlphaLUTTransferFunction\",vm:\"1\",version:\"DICOM\"},\"(0028,2000)\":{tag:\"(0028,2000)\",vr:\"OB\",name:\"ICCProfile\",vm:\"1\",version:\"DICOM\"},\"(0028,2110)\":{tag:\"(0028,2110)\",vr:\"CS\",name:\"LossyImageCompression\",vm:\"1\",version:\"DICOM\"},\"(0028,2112)\":{tag:\"(0028,2112)\",vr:\"DS\",name:\"LossyImageCompressionRatio\",vm:\"1-n\",version:\"DICOM\"},\"(0028,2114)\":{tag:\"(0028,2114)\",vr:\"CS\",name:\"LossyImageCompressionMethod\",vm:\"1-n\",version:\"DICOM\"},\"(0028,3000)\":{tag:\"(0028,3000)\",vr:\"SQ\",name:\"ModalityLUTSequence\",vm:\"1\",version:\"DICOM\"},\"(0028,3002)\":{tag:\"(0028,3002)\",vr:\"xs\",name:\"LUTDescriptor\",vm:\"3\",version:\"DICOM\"},\"(0028,3003)\":{tag:\"(0028,3003)\",vr:\"LO\",name:\"LUTExplanation\",vm:\"1\",version:\"DICOM\"},\"(0028,3004)\":{tag:\"(0028,3004)\",vr:\"LO\",name:\"ModalityLUTType\",vm:\"1\",version:\"DICOM\"},\"(0028,3006)\":{tag:\"(0028,3006)\",vr:\"lt\",name:\"LUTData\",vm:\"1-n\",version:\"DICOM\"},\"(0028,3010)\":{tag:\"(0028,3010)\",vr:\"SQ\",name:\"VOILUTSequence\",vm:\"1\",version:\"DICOM\"},\"(0028,3110)\":{tag:\"(0028,3110)\",vr:\"SQ\",name:\"SoftcopyVOILUTSequence\",vm:\"1\",version:\"DICOM\"},\"(0028,6010)\":{tag:\"(0028,6010)\",vr:\"US\",name:\"RepresentativeFrameNumber\",vm:\"1\",version:\"DICOM\"},\"(0028,6020)\":{tag:\"(0028,6020)\",vr:\"US\",name:\"FrameNumbersOfInterest\",vm:\"1-n\",version:\"DICOM\"},\"(0028,6022)\":{tag:\"(0028,6022)\",vr:\"LO\",name:\"FrameOfInterestDescription\",vm:\"1-n\",version:\"DICOM\"},\"(0028,6023)\":{tag:\"(0028,6023)\",vr:\"CS\",name:\"FrameOfInterestType\",vm:\"1-n\",version:\"DICOM\"},\"(0028,6040)\":{tag:\"(0028,6040)\",vr:\"US\",name:\"RWavePointer\",vm:\"1-n\",version:\"DICOM\"},\"(0028,6100)\":{tag:\"(0028,6100)\",vr:\"SQ\",name:\"MaskSubtractionSequence\",vm:\"1\",version:\"DICOM\"},\"(0028,6101)\":{tag:\"(0028,6101)\",vr:\"CS\",name:\"MaskOperation\",vm:\"1\",version:\"DICOM\"},\"(0028,6102)\":{tag:\"(0028,6102)\",vr:\"US\",name:\"ApplicableFrameRange\",vm:\"2-2n\",version:\"DICOM\"},\"(0028,6110)\":{tag:\"(0028,6110)\",vr:\"US\",name:\"MaskFrameNumbers\",vm:\"1-n\",version:\"DICOM\"},\"(0028,6112)\":{tag:\"(0028,6112)\",vr:\"US\",name:\"ContrastFrameAveraging\",vm:\"1\",version:\"DICOM\"},\"(0028,6114)\":{tag:\"(0028,6114)\",vr:\"FL\",name:\"MaskSubPixelShift\",vm:\"2\",version:\"DICOM\"},\"(0028,6120)\":{tag:\"(0028,6120)\",vr:\"SS\",name:\"TIDOffset\",vm:\"1\",version:\"DICOM\"},\"(0028,6190)\":{tag:\"(0028,6190)\",vr:\"ST\",name:\"MaskOperationExplanation\",vm:\"1\",version:\"DICOM\"},\"(0028,7000)\":{tag:\"(0028,7000)\",vr:\"SQ\",name:\"EquipmentAdministratorSequence\",vm:\"1\",version:\"DICOM\"},\"(0028,7001)\":{tag:\"(0028,7001)\",vr:\"US\",name:\"NumberOfDisplaySubsystems\",vm:\"1\",version:\"DICOM\"},\"(0028,7002)\":{tag:\"(0028,7002)\",vr:\"US\",name:\"CurrentConfigurationID\",vm:\"1\",version:\"DICOM\"},\"(0028,7003)\":{tag:\"(0028,7003)\",vr:\"US\",name:\"DisplaySubsystemID\",vm:\"1\",version:\"DICOM\"},\"(0028,7004)\":{tag:\"(0028,7004)\",vr:\"SH\",name:\"DisplaySubsystemName\",vm:\"1\",version:\"DICOM\"},\"(0028,7005)\":{tag:\"(0028,7005)\",vr:\"LO\",name:\"DisplaySubsystemDescription\",vm:\"1\",version:\"DICOM\"},\"(0028,7006)\":{tag:\"(0028,7006)\",vr:\"CS\",name:\"SystemStatus\",vm:\"1\",version:\"DICOM\"},\"(0028,7007)\":{tag:\"(0028,7007)\",vr:\"LO\",name:\"SystemStatusComment\",vm:\"1\",version:\"DICOM\"},\"(0028,7008)\":{tag:\"(0028,7008)\",vr:\"SQ\",name:\"TargetLuminanceCharacteristicsSequence\",vm:\"1\",version:\"DICOM\"},\"(0028,7009)\":{tag:\"(0028,7009)\",vr:\"US\",name:\"LuminanceCharacteristicsID\",vm:\"1\",version:\"DICOM\"},\"(0028,700A)\":{tag:\"(0028,700A)\",vr:\"SQ\",name:\"DisplaySubsystemConfigurationSequence\",vm:\"1\",version:\"DICOM\"},\"(0028,700B)\":{tag:\"(0028,700B)\",vr:\"US\",name:\"ConfigurationID\",vm:\"1\",version:\"DICOM\"},\"(0028,700C)\":{tag:\"(0028,700C)\",vr:\"SH\",name:\"ConfigurationName\",vm:\"1\",version:\"DICOM\"},\"(0028,700D)\":{tag:\"(0028,700D)\",vr:\"LO\",name:\"ConfigurationDescription\",vm:\"1\",version:\"DICOM\"},\"(0028,700E)\":{tag:\"(0028,700E)\",vr:\"US\",name:\"ReferencedTargetLuminanceCharacteristicsID\",vm:\"1\",version:\"DICOM\"},\"(0028,700F)\":{tag:\"(0028,700F)\",vr:\"SQ\",name:\"QAResultsSequence\",vm:\"1\",version:\"DICOM\"},\"(0028,7010)\":{tag:\"(0028,7010)\",vr:\"SQ\",name:\"DisplaySubsystemQAResultsSequence\",vm:\"1\",version:\"DICOM\"},\"(0028,7011)\":{tag:\"(0028,7011)\",vr:\"SQ\",name:\"ConfigurationQAResultsSequence\",vm:\"1\",version:\"DICOM\"},\"(0028,7012)\":{tag:\"(0028,7012)\",vr:\"SQ\",name:\"MeasurementEquipmentSequence\",vm:\"1\",version:\"DICOM\"},\"(0028,7013)\":{tag:\"(0028,7013)\",vr:\"CS\",name:\"MeasurementFunctions\",vm:\"1-n\",version:\"DICOM\"},\"(0028,7014)\":{tag:\"(0028,7014)\",vr:\"CS\",name:\"MeasurementEquipmentType\",vm:\"1\",version:\"DICOM\"},\"(0028,7015)\":{tag:\"(0028,7015)\",vr:\"SQ\",name:\"VisualEvaluationResultSequence\",vm:\"1\",version:\"DICOM\"},\"(0028,7016)\":{tag:\"(0028,7016)\",vr:\"SQ\",name:\"DisplayCalibrationResultSequence\",vm:\"1\",version:\"DICOM\"},\"(0028,7017)\":{tag:\"(0028,7017)\",vr:\"US\",name:\"DDLValue\",vm:\"1\",version:\"DICOM\"},\"(0028,7018)\":{tag:\"(0028,7018)\",vr:\"FL\",name:\"CIExyWhitePoint\",vm:\"2\",version:\"DICOM\"},\"(0028,7019)\":{tag:\"(0028,7019)\",vr:\"CS\",name:\"DisplayFunctionType\",vm:\"1\",version:\"DICOM\"},\"(0028,701A)\":{tag:\"(0028,701A)\",vr:\"FL\",name:\"GammaValue\",vm:\"1\",version:\"DICOM\"},\"(0028,701B)\":{tag:\"(0028,701B)\",vr:\"US\",name:\"NumberOfLuminancePoints\",vm:\"1\",version:\"DICOM\"},\"(0028,701C)\":{tag:\"(0028,701C)\",vr:\"SQ\",name:\"LuminanceResponseSequence\",vm:\"1\",version:\"DICOM\"},\"(0028,701D)\":{tag:\"(0028,701D)\",vr:\"FL\",name:\"TargetMinimumLuminance\",vm:\"1\",version:\"DICOM\"},\"(0028,701E)\":{tag:\"(0028,701E)\",vr:\"FL\",name:\"TargetMaximumLuminance\",vm:\"1\",version:\"DICOM\"},\"(0028,701F)\":{tag:\"(0028,701F)\",vr:\"FL\",name:\"LuminanceValue\",vm:\"1\",version:\"DICOM\"},\"(0028,7020)\":{tag:\"(0028,7020)\",vr:\"LO\",name:\"LuminanceResponseDescription\",vm:\"1\",version:\"DICOM\"},\"(0028,7021)\":{tag:\"(0028,7021)\",vr:\"CS\",name:\"WhitePointFlag\",vm:\"1\",version:\"DICOM\"},\"(0028,7022)\":{tag:\"(0028,7022)\",vr:\"SQ\",name:\"DisplayDeviceTypeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0028,7023)\":{tag:\"(0028,7023)\",vr:\"SQ\",name:\"DisplaySubsystemSequence\",vm:\"1\",version:\"DICOM\"},\"(0028,7024)\":{tag:\"(0028,7024)\",vr:\"SQ\",name:\"LuminanceResultSequence\",vm:\"1\",version:\"DICOM\"},\"(0028,7025)\":{tag:\"(0028,7025)\",vr:\"CS\",name:\"AmbientLightValueSource\",vm:\"1\",version:\"DICOM\"},\"(0028,7026)\":{tag:\"(0028,7026)\",vr:\"CS\",name:\"MeasuredCharacteristics\",vm:\"1-n\",version:\"DICOM\"},\"(0028,7027)\":{tag:\"(0028,7027)\",vr:\"SQ\",name:\"LuminanceUniformityResultSequence\",vm:\"1\",version:\"DICOM\"},\"(0028,7028)\":{tag:\"(0028,7028)\",vr:\"SQ\",name:\"VisualEvaluationTestSequence\",vm:\"1\",version:\"DICOM\"},\"(0028,7029)\":{tag:\"(0028,7029)\",vr:\"CS\",name:\"TestResult\",vm:\"1\",version:\"DICOM\"},\"(0028,702A)\":{tag:\"(0028,702A)\",vr:\"LO\",name:\"TestResultComment\",vm:\"1\",version:\"DICOM\"},\"(0028,702B)\":{tag:\"(0028,702B)\",vr:\"CS\",name:\"TestImageValidation\",vm:\"1\",version:\"DICOM\"},\"(0028,702C)\":{tag:\"(0028,702C)\",vr:\"SQ\",name:\"TestPatternCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0028,702D)\":{tag:\"(0028,702D)\",vr:\"SQ\",name:\"MeasurementPatternCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0028,702E)\":{tag:\"(0028,702E)\",vr:\"SQ\",name:\"VisualEvaluationMethodCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0028,7FE0)\":{tag:\"(0028,7FE0)\",vr:\"UR\",name:\"PixelDataProviderURL\",vm:\"1\",version:\"DICOM\"},\"(0028,9001)\":{tag:\"(0028,9001)\",vr:\"UL\",name:\"DataPointRows\",vm:\"1\",version:\"DICOM\"},\"(0028,9002)\":{tag:\"(0028,9002)\",vr:\"UL\",name:\"DataPointColumns\",vm:\"1\",version:\"DICOM\"},\"(0028,9003)\":{tag:\"(0028,9003)\",vr:\"CS\",name:\"SignalDomainColumns\",vm:\"1\",version:\"DICOM\"},\"(0028,9108)\":{tag:\"(0028,9108)\",vr:\"CS\",name:\"DataRepresentation\",vm:\"1\",version:\"DICOM\"},\"(0028,9110)\":{tag:\"(0028,9110)\",vr:\"SQ\",name:\"PixelMeasuresSequence\",vm:\"1\",version:\"DICOM\"},\"(0028,9132)\":{tag:\"(0028,9132)\",vr:\"SQ\",name:\"FrameVOILUTSequence\",vm:\"1\",version:\"DICOM\"},\"(0028,9145)\":{tag:\"(0028,9145)\",vr:\"SQ\",name:\"PixelValueTransformationSequence\",vm:\"1\",version:\"DICOM\"},\"(0028,9235)\":{tag:\"(0028,9235)\",vr:\"CS\",name:\"SignalDomainRows\",vm:\"1\",version:\"DICOM\"},\"(0028,9411)\":{tag:\"(0028,9411)\",vr:\"FL\",name:\"DisplayFilterPercentage\",vm:\"1\",version:\"DICOM\"},\"(0028,9415)\":{tag:\"(0028,9415)\",vr:\"SQ\",name:\"FramePixelShiftSequence\",vm:\"1\",version:\"DICOM\"},\"(0028,9416)\":{tag:\"(0028,9416)\",vr:\"US\",name:\"SubtractionItemID\",vm:\"1\",version:\"DICOM\"},\"(0028,9422)\":{tag:\"(0028,9422)\",vr:\"SQ\",name:\"PixelIntensityRelationshipLUTSequence\",vm:\"1\",version:\"DICOM\"},\"(0028,9443)\":{tag:\"(0028,9443)\",vr:\"SQ\",name:\"FramePixelDataPropertiesSequence\",vm:\"1\",version:\"DICOM\"},\"(0028,9444)\":{tag:\"(0028,9444)\",vr:\"CS\",name:\"GeometricalProperties\",vm:\"1\",version:\"DICOM\"},\"(0028,9445)\":{tag:\"(0028,9445)\",vr:\"FL\",name:\"GeometricMaximumDistortion\",vm:\"1\",version:\"DICOM\"},\"(0028,9446)\":{tag:\"(0028,9446)\",vr:\"CS\",name:\"ImageProcessingApplied\",vm:\"1-n\",version:\"DICOM\"},\"(0028,9454)\":{tag:\"(0028,9454)\",vr:\"CS\",name:\"MaskSelectionMode\",vm:\"1\",version:\"DICOM\"},\"(0028,9474)\":{tag:\"(0028,9474)\",vr:\"CS\",name:\"LUTFunction\",vm:\"1\",version:\"DICOM\"},\"(0028,9478)\":{tag:\"(0028,9478)\",vr:\"FL\",name:\"MaskVisibilityPercentage\",vm:\"1\",version:\"DICOM\"},\"(0028,9501)\":{tag:\"(0028,9501)\",vr:\"SQ\",name:\"PixelShiftSequence\",vm:\"1\",version:\"DICOM\"},\"(0028,9502)\":{tag:\"(0028,9502)\",vr:\"SQ\",name:\"RegionPixelShiftSequence\",vm:\"1\",version:\"DICOM\"},\"(0028,9503)\":{tag:\"(0028,9503)\",vr:\"SS\",name:\"VerticesOfTheRegion\",vm:\"2-2n\",version:\"DICOM\"},\"(0028,9505)\":{tag:\"(0028,9505)\",vr:\"SQ\",name:\"MultiFramePresentationSequence\",vm:\"1\",version:\"DICOM\"},\"(0028,9506)\":{tag:\"(0028,9506)\",vr:\"US\",name:\"PixelShiftFrameRange\",vm:\"2-2n\",version:\"DICOM\"},\"(0028,9507)\":{tag:\"(0028,9507)\",vr:\"US\",name:\"LUTFrameRange\",vm:\"2-2n\",version:\"DICOM\"},\"(0028,9520)\":{tag:\"(0028,9520)\",vr:\"DS\",name:\"ImageToEquipmentMappingMatrix\",vm:\"16\",version:\"DICOM\"},\"(0028,9537)\":{tag:\"(0028,9537)\",vr:\"CS\",name:\"EquipmentCoordinateSystemIdentification\",vm:\"1\",version:\"DICOM\"},\"(0032,1031)\":{tag:\"(0032,1031)\",vr:\"SQ\",name:\"RequestingPhysicianIdentificationSequence\",vm:\"1\",version:\"DICOM\"},\"(0032,1032)\":{tag:\"(0032,1032)\",vr:\"PN\",name:\"RequestingPhysician\",vm:\"1\",version:\"DICOM\"},\"(0032,1033)\":{tag:\"(0032,1033)\",vr:\"LO\",name:\"RequestingService\",vm:\"1\",version:\"DICOM\"},\"(0032,1034)\":{tag:\"(0032,1034)\",vr:\"SQ\",name:\"RequestingServiceCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0032,1060)\":{tag:\"(0032,1060)\",vr:\"LO\",name:\"RequestedProcedureDescription\",vm:\"1\",version:\"DICOM\"},\"(0032,1064)\":{tag:\"(0032,1064)\",vr:\"SQ\",name:\"RequestedProcedureCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0032,1066)\":{tag:\"(0032,1066)\",vr:\"UT\",name:\"ReasonForVisit\",vm:\"1\",version:\"DICOM\"},\"(0032,1067)\":{tag:\"(0032,1067)\",vr:\"SQ\",name:\"ReasonForVisitCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0032,1070)\":{tag:\"(0032,1070)\",vr:\"LO\",name:\"RequestedContrastAgent\",vm:\"1\",version:\"DICOM\"},\"(0034,0001)\":{tag:\"(0034,0001)\",vr:\"SQ\",name:\"FlowIdentifierSequence\",vm:\"1\",version:\"DICOM\"},\"(0034,0002)\":{tag:\"(0034,0002)\",vr:\"OB\",name:\"FlowIdentifier\",vm:\"1\",version:\"DICOM\"},\"(0034,0003)\":{tag:\"(0034,0003)\",vr:\"UI\",name:\"FlowTransferSyntaxUID\",vm:\"1\",version:\"DICOM\"},\"(0034,0004)\":{tag:\"(0034,0004)\",vr:\"UL\",name:\"FlowRTPSamplingRate\",vm:\"1\",version:\"DICOM\"},\"(0034,0005)\":{tag:\"(0034,0005)\",vr:\"OB\",name:\"SourceIdentifier\",vm:\"1\",version:\"DICOM\"},\"(0034,0007)\":{tag:\"(0034,0007)\",vr:\"OB\",name:\"FrameOriginTimestamp\",vm:\"1\",version:\"DICOM\"},\"(0034,0008)\":{tag:\"(0034,0008)\",vr:\"CS\",name:\"IncludesImagingSubject\",vm:\"1\",version:\"DICOM\"},\"(0034,0009)\":{tag:\"(0034,0009)\",vr:\"SQ\",name:\"FrameUsefulnessGroupSequence\",vm:\"1\",version:\"DICOM\"},\"(0034,000A)\":{tag:\"(0034,000A)\",vr:\"SQ\",name:\"RealTimeBulkDataFlowSequence\",vm:\"1\",version:\"DICOM\"},\"(0034,000B)\":{tag:\"(0034,000B)\",vr:\"SQ\",name:\"CameraPositionGroupSequence\",vm:\"1\",version:\"DICOM\"},\"(0034,000C)\":{tag:\"(0034,000C)\",vr:\"CS\",name:\"IncludesInformation\",vm:\"1\",version:\"DICOM\"},\"(0034,000D)\":{tag:\"(0034,000D)\",vr:\"SQ\",name:\"TimeOfFrameGroupSequence\",vm:\"1\",version:\"DICOM\"},\"(0038,0004)\":{tag:\"(0038,0004)\",vr:\"SQ\",name:\"ReferencedPatientAliasSequence\",vm:\"1\",version:\"DICOM\"},\"(0038,0008)\":{tag:\"(0038,0008)\",vr:\"CS\",name:\"VisitStatusID\",vm:\"1\",version:\"DICOM\"},\"(0038,0010)\":{tag:\"(0038,0010)\",vr:\"LO\",name:\"AdmissionID\",vm:\"1\",version:\"DICOM\"},\"(0038,0014)\":{tag:\"(0038,0014)\",vr:\"SQ\",name:\"IssuerOfAdmissionIDSequence\",vm:\"1\",version:\"DICOM\"},\"(0038,0016)\":{tag:\"(0038,0016)\",vr:\"LO\",name:\"RouteOfAdmissions\",vm:\"1\",version:\"DICOM\"},\"(0038,0020)\":{tag:\"(0038,0020)\",vr:\"DA\",name:\"AdmittingDate\",vm:\"1\",version:\"DICOM\"},\"(0038,0021)\":{tag:\"(0038,0021)\",vr:\"TM\",name:\"AdmittingTime\",vm:\"1\",version:\"DICOM\"},\"(0038,0050)\":{tag:\"(0038,0050)\",vr:\"LO\",name:\"SpecialNeeds\",vm:\"1\",version:\"DICOM\"},\"(0038,0060)\":{tag:\"(0038,0060)\",vr:\"LO\",name:\"ServiceEpisodeID\",vm:\"1\",version:\"DICOM\"},\"(0038,0062)\":{tag:\"(0038,0062)\",vr:\"LO\",name:\"ServiceEpisodeDescription\",vm:\"1\",version:\"DICOM\"},\"(0038,0064)\":{tag:\"(0038,0064)\",vr:\"SQ\",name:\"IssuerOfServiceEpisodeIDSequence\",vm:\"1\",version:\"DICOM\"},\"(0038,0100)\":{tag:\"(0038,0100)\",vr:\"SQ\",name:\"PertinentDocumentsSequence\",vm:\"1\",version:\"DICOM\"},\"(0038,0101)\":{tag:\"(0038,0101)\",vr:\"SQ\",name:\"PertinentResourcesSequence\",vm:\"1\",version:\"DICOM\"},\"(0038,0102)\":{tag:\"(0038,0102)\",vr:\"LO\",name:\"ResourceDescription\",vm:\"1\",version:\"DICOM\"},\"(0038,0300)\":{tag:\"(0038,0300)\",vr:\"LO\",name:\"CurrentPatientLocation\",vm:\"1\",version:\"DICOM\"},\"(0038,0400)\":{tag:\"(0038,0400)\",vr:\"LO\",name:\"PatientInstitutionResidence\",vm:\"1\",version:\"DICOM\"},\"(0038,0500)\":{tag:\"(0038,0500)\",vr:\"LO\",name:\"PatientState\",vm:\"1\",version:\"DICOM\"},\"(0038,0502)\":{tag:\"(0038,0502)\",vr:\"SQ\",name:\"PatientClinicalTrialParticipationSequence\",vm:\"1\",version:\"DICOM\"},\"(0038,4000)\":{tag:\"(0038,4000)\",vr:\"LT\",name:\"VisitComments\",vm:\"1\",version:\"DICOM\"},\"(003A,0004)\":{tag:\"(003A,0004)\",vr:\"CS\",name:\"WaveformOriginality\",vm:\"1\",version:\"DICOM\"},\"(003A,0005)\":{tag:\"(003A,0005)\",vr:\"US\",name:\"NumberOfWaveformChannels\",vm:\"1\",version:\"DICOM\"},\"(003A,0010)\":{tag:\"(003A,0010)\",vr:\"UL\",name:\"NumberOfWaveformSamples\",vm:\"1\",version:\"DICOM\"},\"(003A,001A)\":{tag:\"(003A,001A)\",vr:\"DS\",name:\"SamplingFrequency\",vm:\"1\",version:\"DICOM\"},\"(003A,0020)\":{tag:\"(003A,0020)\",vr:\"SH\",name:\"MultiplexGroupLabel\",vm:\"1\",version:\"DICOM\"},\"(003A,0200)\":{tag:\"(003A,0200)\",vr:\"SQ\",name:\"ChannelDefinitionSequence\",vm:\"1\",version:\"DICOM\"},\"(003A,0202)\":{tag:\"(003A,0202)\",vr:\"IS\",name:\"WaveformChannelNumber\",vm:\"1\",version:\"DICOM\"},\"(003A,0203)\":{tag:\"(003A,0203)\",vr:\"SH\",name:\"ChannelLabel\",vm:\"1\",version:\"DICOM\"},\"(003A,0205)\":{tag:\"(003A,0205)\",vr:\"CS\",name:\"ChannelStatus\",vm:\"1-n\",version:\"DICOM\"},\"(003A,0208)\":{tag:\"(003A,0208)\",vr:\"SQ\",name:\"ChannelSourceSequence\",vm:\"1\",version:\"DICOM\"},\"(003A,0209)\":{tag:\"(003A,0209)\",vr:\"SQ\",name:\"ChannelSourceModifiersSequence\",vm:\"1\",version:\"DICOM\"},\"(003A,020A)\":{tag:\"(003A,020A)\",vr:\"SQ\",name:\"SourceWaveformSequence\",vm:\"1\",version:\"DICOM\"},\"(003A,020C)\":{tag:\"(003A,020C)\",vr:\"LO\",name:\"ChannelDerivationDescription\",vm:\"1\",version:\"DICOM\"},\"(003A,0210)\":{tag:\"(003A,0210)\",vr:\"DS\",name:\"ChannelSensitivity\",vm:\"1\",version:\"DICOM\"},\"(003A,0211)\":{tag:\"(003A,0211)\",vr:\"SQ\",name:\"ChannelSensitivityUnitsSequence\",vm:\"1\",version:\"DICOM\"},\"(003A,0212)\":{tag:\"(003A,0212)\",vr:\"DS\",name:\"ChannelSensitivityCorrectionFactor\",vm:\"1\",version:\"DICOM\"},\"(003A,0213)\":{tag:\"(003A,0213)\",vr:\"DS\",name:\"ChannelBaseline\",vm:\"1\",version:\"DICOM\"},\"(003A,0214)\":{tag:\"(003A,0214)\",vr:\"DS\",name:\"ChannelTimeSkew\",vm:\"1\",version:\"DICOM\"},\"(003A,0215)\":{tag:\"(003A,0215)\",vr:\"DS\",name:\"ChannelSampleSkew\",vm:\"1\",version:\"DICOM\"},\"(003A,0218)\":{tag:\"(003A,0218)\",vr:\"DS\",name:\"ChannelOffset\",vm:\"1\",version:\"DICOM\"},\"(003A,021A)\":{tag:\"(003A,021A)\",vr:\"US\",name:\"WaveformBitsStored\",vm:\"1\",version:\"DICOM\"},\"(003A,0220)\":{tag:\"(003A,0220)\",vr:\"DS\",name:\"FilterLowFrequency\",vm:\"1\",version:\"DICOM\"},\"(003A,0221)\":{tag:\"(003A,0221)\",vr:\"DS\",name:\"FilterHighFrequency\",vm:\"1\",version:\"DICOM\"},\"(003A,0222)\":{tag:\"(003A,0222)\",vr:\"DS\",name:\"NotchFilterFrequency\",vm:\"1\",version:\"DICOM\"},\"(003A,0223)\":{tag:\"(003A,0223)\",vr:\"DS\",name:\"NotchFilterBandwidth\",vm:\"1\",version:\"DICOM\"},\"(003A,0230)\":{tag:\"(003A,0230)\",vr:\"FL\",name:\"WaveformDataDisplayScale\",vm:\"1\",version:\"DICOM\"},\"(003A,0231)\":{tag:\"(003A,0231)\",vr:\"US\",name:\"WaveformDisplayBackgroundCIELabValue\",vm:\"3\",version:\"DICOM\"},\"(003A,0240)\":{tag:\"(003A,0240)\",vr:\"SQ\",name:\"WaveformPresentationGroupSequence\",vm:\"1\",version:\"DICOM\"},\"(003A,0241)\":{tag:\"(003A,0241)\",vr:\"US\",name:\"PresentationGroupNumber\",vm:\"1\",version:\"DICOM\"},\"(003A,0242)\":{tag:\"(003A,0242)\",vr:\"SQ\",name:\"ChannelDisplaySequence\",vm:\"1\",version:\"DICOM\"},\"(003A,0244)\":{tag:\"(003A,0244)\",vr:\"US\",name:\"ChannelRecommendedDisplayCIELabValue\",vm:\"3\",version:\"DICOM\"},\"(003A,0245)\":{tag:\"(003A,0245)\",vr:\"FL\",name:\"ChannelPosition\",vm:\"1\",version:\"DICOM\"},\"(003A,0246)\":{tag:\"(003A,0246)\",vr:\"CS\",name:\"DisplayShadingFlag\",vm:\"1\",version:\"DICOM\"},\"(003A,0247)\":{tag:\"(003A,0247)\",vr:\"FL\",name:\"FractionalChannelDisplayScale\",vm:\"1\",version:\"DICOM\"},\"(003A,0248)\":{tag:\"(003A,0248)\",vr:\"FL\",name:\"AbsoluteChannelDisplayScale\",vm:\"1\",version:\"DICOM\"},\"(003A,0300)\":{tag:\"(003A,0300)\",vr:\"SQ\",name:\"MultiplexedAudioChannelsDescriptionCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(003A,0301)\":{tag:\"(003A,0301)\",vr:\"IS\",name:\"ChannelIdentificationCode\",vm:\"1\",version:\"DICOM\"},\"(003A,0302)\":{tag:\"(003A,0302)\",vr:\"CS\",name:\"ChannelMode\",vm:\"1\",version:\"DICOM\"},\"(003A,0310)\":{tag:\"(003A,0310)\",vr:\"UI\",name:\"MultiplexGroupUID\",vm:\"1\",version:\"DICOM\"},\"(003A,0311)\":{tag:\"(003A,0311)\",vr:\"DS\",name:\"PowerlineFrequency\",vm:\"1\",version:\"DICOM\"},\"(003A,0312)\":{tag:\"(003A,0312)\",vr:\"SQ\",name:\"ChannelImpedanceSequence\",vm:\"1\",version:\"DICOM\"},\"(003A,0313)\":{tag:\"(003A,0313)\",vr:\"DS\",name:\"ImpedanceValue\",vm:\"1\",version:\"DICOM\"},\"(003A,0314)\":{tag:\"(003A,0314)\",vr:\"DT\",name:\"ImpedanceMeasurementDateTime\",vm:\"1\",version:\"DICOM\"},\"(003A,0315)\":{tag:\"(003A,0315)\",vr:\"DS\",name:\"ImpedanceMeasurementFrequency\",vm:\"1\",version:\"DICOM\"},\"(003A,0316)\":{tag:\"(003A,0316)\",vr:\"CS\",name:\"ImpedanceMeasurementCurrentType\",vm:\"1\",version:\"DICOM\"},\"(0040,0001)\":{tag:\"(0040,0001)\",vr:\"AE\",name:\"ScheduledStationAETitle\",vm:\"1-n\",version:\"DICOM\"},\"(0040,0002)\":{tag:\"(0040,0002)\",vr:\"DA\",name:\"ScheduledProcedureStepStartDate\",vm:\"1\",version:\"DICOM\"},\"(0040,0003)\":{tag:\"(0040,0003)\",vr:\"TM\",name:\"ScheduledProcedureStepStartTime\",vm:\"1\",version:\"DICOM\"},\"(0040,0004)\":{tag:\"(0040,0004)\",vr:\"DA\",name:\"ScheduledProcedureStepEndDate\",vm:\"1\",version:\"DICOM\"},\"(0040,0005)\":{tag:\"(0040,0005)\",vr:\"TM\",name:\"ScheduledProcedureStepEndTime\",vm:\"1\",version:\"DICOM\"},\"(0040,0006)\":{tag:\"(0040,0006)\",vr:\"PN\",name:\"ScheduledPerformingPhysicianName\",vm:\"1\",version:\"DICOM\"},\"(0040,0007)\":{tag:\"(0040,0007)\",vr:\"LO\",name:\"ScheduledProcedureStepDescription\",vm:\"1\",version:\"DICOM\"},\"(0040,0008)\":{tag:\"(0040,0008)\",vr:\"SQ\",name:\"ScheduledProtocolCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,0009)\":{tag:\"(0040,0009)\",vr:\"SH\",name:\"ScheduledProcedureStepID\",vm:\"1\",version:\"DICOM\"},\"(0040,000A)\":{tag:\"(0040,000A)\",vr:\"SQ\",name:\"StageCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,000B)\":{tag:\"(0040,000B)\",vr:\"SQ\",name:\"ScheduledPerformingPhysicianIdentificationSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,0010)\":{tag:\"(0040,0010)\",vr:\"SH\",name:\"ScheduledStationName\",vm:\"1-n\",version:\"DICOM\"},\"(0040,0011)\":{tag:\"(0040,0011)\",vr:\"SH\",name:\"ScheduledProcedureStepLocation\",vm:\"1\",version:\"DICOM\"},\"(0040,0012)\":{tag:\"(0040,0012)\",vr:\"LO\",name:\"PreMedication\",vm:\"1\",version:\"DICOM\"},\"(0040,0020)\":{tag:\"(0040,0020)\",vr:\"CS\",name:\"ScheduledProcedureStepStatus\",vm:\"1\",version:\"DICOM\"},\"(0040,0026)\":{tag:\"(0040,0026)\",vr:\"SQ\",name:\"OrderPlacerIdentifierSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,0027)\":{tag:\"(0040,0027)\",vr:\"SQ\",name:\"OrderFillerIdentifierSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,0031)\":{tag:\"(0040,0031)\",vr:\"UT\",name:\"LocalNamespaceEntityID\",vm:\"1\",version:\"DICOM\"},\"(0040,0032)\":{tag:\"(0040,0032)\",vr:\"UT\",name:\"UniversalEntityID\",vm:\"1\",version:\"DICOM\"},\"(0040,0033)\":{tag:\"(0040,0033)\",vr:\"CS\",name:\"UniversalEntityIDType\",vm:\"1\",version:\"DICOM\"},\"(0040,0035)\":{tag:\"(0040,0035)\",vr:\"CS\",name:\"IdentifierTypeCode\",vm:\"1\",version:\"DICOM\"},\"(0040,0036)\":{tag:\"(0040,0036)\",vr:\"SQ\",name:\"AssigningFacilitySequence\",vm:\"1\",version:\"DICOM\"},\"(0040,0039)\":{tag:\"(0040,0039)\",vr:\"SQ\",name:\"AssigningJurisdictionCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,003A)\":{tag:\"(0040,003A)\",vr:\"SQ\",name:\"AssigningAgencyOrDepartmentCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,0100)\":{tag:\"(0040,0100)\",vr:\"SQ\",name:\"ScheduledProcedureStepSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,0220)\":{tag:\"(0040,0220)\",vr:\"SQ\",name:\"ReferencedNonImageCompositeSOPInstanceSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,0241)\":{tag:\"(0040,0241)\",vr:\"AE\",name:\"PerformedStationAETitle\",vm:\"1\",version:\"DICOM\"},\"(0040,0242)\":{tag:\"(0040,0242)\",vr:\"SH\",name:\"PerformedStationName\",vm:\"1\",version:\"DICOM\"},\"(0040,0243)\":{tag:\"(0040,0243)\",vr:\"SH\",name:\"PerformedLocation\",vm:\"1\",version:\"DICOM\"},\"(0040,0244)\":{tag:\"(0040,0244)\",vr:\"DA\",name:\"PerformedProcedureStepStartDate\",vm:\"1\",version:\"DICOM\"},\"(0040,0245)\":{tag:\"(0040,0245)\",vr:\"TM\",name:\"PerformedProcedureStepStartTime\",vm:\"1\",version:\"DICOM\"},\"(0040,0250)\":{tag:\"(0040,0250)\",vr:\"DA\",name:\"PerformedProcedureStepEndDate\",vm:\"1\",version:\"DICOM\"},\"(0040,0251)\":{tag:\"(0040,0251)\",vr:\"TM\",name:\"PerformedProcedureStepEndTime\",vm:\"1\",version:\"DICOM\"},\"(0040,0252)\":{tag:\"(0040,0252)\",vr:\"CS\",name:\"PerformedProcedureStepStatus\",vm:\"1\",version:\"DICOM\"},\"(0040,0253)\":{tag:\"(0040,0253)\",vr:\"SH\",name:\"PerformedProcedureStepID\",vm:\"1\",version:\"DICOM\"},\"(0040,0254)\":{tag:\"(0040,0254)\",vr:\"LO\",name:\"PerformedProcedureStepDescription\",vm:\"1\",version:\"DICOM\"},\"(0040,0255)\":{tag:\"(0040,0255)\",vr:\"LO\",name:\"PerformedProcedureTypeDescription\",vm:\"1\",version:\"DICOM\"},\"(0040,0260)\":{tag:\"(0040,0260)\",vr:\"SQ\",name:\"PerformedProtocolCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,0261)\":{tag:\"(0040,0261)\",vr:\"CS\",name:\"PerformedProtocolType\",vm:\"1\",version:\"DICOM\"},\"(0040,0270)\":{tag:\"(0040,0270)\",vr:\"SQ\",name:\"ScheduledStepAttributesSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,0275)\":{tag:\"(0040,0275)\",vr:\"SQ\",name:\"RequestAttributesSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,0280)\":{tag:\"(0040,0280)\",vr:\"ST\",name:\"CommentsOnThePerformedProcedureStep\",vm:\"1\",version:\"DICOM\"},\"(0040,0281)\":{tag:\"(0040,0281)\",vr:\"SQ\",name:\"PerformedProcedureStepDiscontinuationReasonCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,0293)\":{tag:\"(0040,0293)\",vr:\"SQ\",name:\"QuantitySequence\",vm:\"1\",version:\"DICOM\"},\"(0040,0294)\":{tag:\"(0040,0294)\",vr:\"DS\",name:\"Quantity\",vm:\"1\",version:\"DICOM\"},\"(0040,0295)\":{tag:\"(0040,0295)\",vr:\"SQ\",name:\"MeasuringUnitsSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,0296)\":{tag:\"(0040,0296)\",vr:\"SQ\",name:\"BillingItemSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,0300)\":{tag:\"(0040,0300)\",vr:\"US\",name:\"TotalTimeOfFluoroscopy\",vm:\"1\",version:\"DICOM\"},\"(0040,0301)\":{tag:\"(0040,0301)\",vr:\"US\",name:\"TotalNumberOfExposures\",vm:\"1\",version:\"DICOM\"},\"(0040,0302)\":{tag:\"(0040,0302)\",vr:\"US\",name:\"EntranceDose\",vm:\"1\",version:\"DICOM\"},\"(0040,0303)\":{tag:\"(0040,0303)\",vr:\"US\",name:\"ExposedArea\",vm:\"1-2\",version:\"DICOM\"},\"(0040,0306)\":{tag:\"(0040,0306)\",vr:\"DS\",name:\"DistanceSourceToEntrance\",vm:\"1\",version:\"DICOM\"},\"(0040,030E)\":{tag:\"(0040,030E)\",vr:\"SQ\",name:\"ExposureDoseSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,0310)\":{tag:\"(0040,0310)\",vr:\"ST\",name:\"CommentsOnRadiationDose\",vm:\"1\",version:\"DICOM\"},\"(0040,0312)\":{tag:\"(0040,0312)\",vr:\"DS\",name:\"XRayOutput\",vm:\"1\",version:\"DICOM\"},\"(0040,0314)\":{tag:\"(0040,0314)\",vr:\"DS\",name:\"HalfValueLayer\",vm:\"1\",version:\"DICOM\"},\"(0040,0316)\":{tag:\"(0040,0316)\",vr:\"DS\",name:\"OrganDose\",vm:\"1\",version:\"DICOM\"},\"(0040,0318)\":{tag:\"(0040,0318)\",vr:\"CS\",name:\"OrganExposed\",vm:\"1\",version:\"DICOM\"},\"(0040,0320)\":{tag:\"(0040,0320)\",vr:\"SQ\",name:\"BillingProcedureStepSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,0321)\":{tag:\"(0040,0321)\",vr:\"SQ\",name:\"FilmConsumptionSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,0324)\":{tag:\"(0040,0324)\",vr:\"SQ\",name:\"BillingSuppliesAndDevicesSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,0340)\":{tag:\"(0040,0340)\",vr:\"SQ\",name:\"PerformedSeriesSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,0400)\":{tag:\"(0040,0400)\",vr:\"LT\",name:\"CommentsOnTheScheduledProcedureStep\",vm:\"1\",version:\"DICOM\"},\"(0040,0440)\":{tag:\"(0040,0440)\",vr:\"SQ\",name:\"ProtocolContextSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,0441)\":{tag:\"(0040,0441)\",vr:\"SQ\",name:\"ContentItemModifierSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,0500)\":{tag:\"(0040,0500)\",vr:\"SQ\",name:\"ScheduledSpecimenSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,0512)\":{tag:\"(0040,0512)\",vr:\"LO\",name:\"ContainerIdentifier\",vm:\"1\",version:\"DICOM\"},\"(0040,0513)\":{tag:\"(0040,0513)\",vr:\"SQ\",name:\"IssuerOfTheContainerIdentifierSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,0515)\":{tag:\"(0040,0515)\",vr:\"SQ\",name:\"AlternateContainerIdentifierSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,0518)\":{tag:\"(0040,0518)\",vr:\"SQ\",name:\"ContainerTypeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,051A)\":{tag:\"(0040,051A)\",vr:\"LO\",name:\"ContainerDescription\",vm:\"1\",version:\"DICOM\"},\"(0040,0520)\":{tag:\"(0040,0520)\",vr:\"SQ\",name:\"ContainerComponentSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,0551)\":{tag:\"(0040,0551)\",vr:\"LO\",name:\"SpecimenIdentifier\",vm:\"1\",version:\"DICOM\"},\"(0040,0554)\":{tag:\"(0040,0554)\",vr:\"UI\",name:\"SpecimenUID\",vm:\"1\",version:\"DICOM\"},\"(0040,0555)\":{tag:\"(0040,0555)\",vr:\"SQ\",name:\"AcquisitionContextSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,0556)\":{tag:\"(0040,0556)\",vr:\"ST\",name:\"AcquisitionContextDescription\",vm:\"1\",version:\"DICOM\"},\"(0040,0560)\":{tag:\"(0040,0560)\",vr:\"SQ\",name:\"SpecimenDescriptionSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,0562)\":{tag:\"(0040,0562)\",vr:\"SQ\",name:\"IssuerOfTheSpecimenIdentifierSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,059A)\":{tag:\"(0040,059A)\",vr:\"SQ\",name:\"SpecimenTypeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,0600)\":{tag:\"(0040,0600)\",vr:\"LO\",name:\"SpecimenShortDescription\",vm:\"1\",version:\"DICOM\"},\"(0040,0602)\":{tag:\"(0040,0602)\",vr:\"UT\",name:\"SpecimenDetailedDescription\",vm:\"1\",version:\"DICOM\"},\"(0040,0610)\":{tag:\"(0040,0610)\",vr:\"SQ\",name:\"SpecimenPreparationSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,0612)\":{tag:\"(0040,0612)\",vr:\"SQ\",name:\"SpecimenPreparationStepContentItemSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,0620)\":{tag:\"(0040,0620)\",vr:\"SQ\",name:\"SpecimenLocalizationContentItemSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,0710)\":{tag:\"(0040,0710)\",vr:\"SQ\",name:\"WholeSlideMicroscopyImageFrameTypeSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,071A)\":{tag:\"(0040,071A)\",vr:\"SQ\",name:\"ImageCenterPointCoordinatesSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,072A)\":{tag:\"(0040,072A)\",vr:\"DS\",name:\"XOffsetInSlideCoordinateSystem\",vm:\"1\",version:\"DICOM\"},\"(0040,073A)\":{tag:\"(0040,073A)\",vr:\"DS\",name:\"YOffsetInSlideCoordinateSystem\",vm:\"1\",version:\"DICOM\"},\"(0040,074A)\":{tag:\"(0040,074A)\",vr:\"DS\",name:\"ZOffsetInSlideCoordinateSystem\",vm:\"1\",version:\"DICOM\"},\"(0040,08EA)\":{tag:\"(0040,08EA)\",vr:\"SQ\",name:\"MeasurementUnitsCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,1001)\":{tag:\"(0040,1001)\",vr:\"SH\",name:\"RequestedProcedureID\",vm:\"1\",version:\"DICOM\"},\"(0040,1002)\":{tag:\"(0040,1002)\",vr:\"LO\",name:\"ReasonForTheRequestedProcedure\",vm:\"1\",version:\"DICOM\"},\"(0040,1003)\":{tag:\"(0040,1003)\",vr:\"SH\",name:\"RequestedProcedurePriority\",vm:\"1\",version:\"DICOM\"},\"(0040,1004)\":{tag:\"(0040,1004)\",vr:\"LO\",name:\"PatientTransportArrangements\",vm:\"1\",version:\"DICOM\"},\"(0040,1005)\":{tag:\"(0040,1005)\",vr:\"LO\",name:\"RequestedProcedureLocation\",vm:\"1\",version:\"DICOM\"},\"(0040,1008)\":{tag:\"(0040,1008)\",vr:\"LO\",name:\"ConfidentialityCode\",vm:\"1\",version:\"DICOM\"},\"(0040,1009)\":{tag:\"(0040,1009)\",vr:\"SH\",name:\"ReportingPriority\",vm:\"1\",version:\"DICOM\"},\"(0040,100A)\":{tag:\"(0040,100A)\",vr:\"SQ\",name:\"ReasonForRequestedProcedureCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,1010)\":{tag:\"(0040,1010)\",vr:\"PN\",name:\"NamesOfIntendedRecipientsOfResults\",vm:\"1-n\",version:\"DICOM\"},\"(0040,1011)\":{tag:\"(0040,1011)\",vr:\"SQ\",name:\"IntendedRecipientsOfResultsIdentificationSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,1012)\":{tag:\"(0040,1012)\",vr:\"SQ\",name:\"ReasonForPerformedProcedureCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,1101)\":{tag:\"(0040,1101)\",vr:\"SQ\",name:\"PersonIdentificationCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,1102)\":{tag:\"(0040,1102)\",vr:\"ST\",name:\"PersonAddress\",vm:\"1\",version:\"DICOM\"},\"(0040,1103)\":{tag:\"(0040,1103)\",vr:\"LO\",name:\"PersonTelephoneNumbers\",vm:\"1-n\",version:\"DICOM\"},\"(0040,1104)\":{tag:\"(0040,1104)\",vr:\"LT\",name:\"PersonTelecomInformation\",vm:\"1\",version:\"DICOM\"},\"(0040,1400)\":{tag:\"(0040,1400)\",vr:\"LT\",name:\"RequestedProcedureComments\",vm:\"1\",version:\"DICOM\"},\"(0040,2004)\":{tag:\"(0040,2004)\",vr:\"DA\",name:\"IssueDateOfImagingServiceRequest\",vm:\"1\",version:\"DICOM\"},\"(0040,2005)\":{tag:\"(0040,2005)\",vr:\"TM\",name:\"IssueTimeOfImagingServiceRequest\",vm:\"1\",version:\"DICOM\"},\"(0040,2008)\":{tag:\"(0040,2008)\",vr:\"PN\",name:\"OrderEnteredBy\",vm:\"1\",version:\"DICOM\"},\"(0040,2009)\":{tag:\"(0040,2009)\",vr:\"SH\",name:\"OrderEntererLocation\",vm:\"1\",version:\"DICOM\"},\"(0040,2010)\":{tag:\"(0040,2010)\",vr:\"SH\",name:\"OrderCallbackPhoneNumber\",vm:\"1\",version:\"DICOM\"},\"(0040,2011)\":{tag:\"(0040,2011)\",vr:\"LT\",name:\"OrderCallbackTelecomInformation\",vm:\"1\",version:\"DICOM\"},\"(0040,2016)\":{tag:\"(0040,2016)\",vr:\"LO\",name:\"PlacerOrderNumberImagingServiceRequest\",vm:\"1\",version:\"DICOM\"},\"(0040,2017)\":{tag:\"(0040,2017)\",vr:\"LO\",name:\"FillerOrderNumberImagingServiceRequest\",vm:\"1\",version:\"DICOM\"},\"(0040,2400)\":{tag:\"(0040,2400)\",vr:\"LT\",name:\"ImagingServiceRequestComments\",vm:\"1\",version:\"DICOM\"},\"(0040,3001)\":{tag:\"(0040,3001)\",vr:\"LO\",name:\"ConfidentialityConstraintOnPatientDataDescription\",vm:\"1\",version:\"DICOM\"},\"(0040,4005)\":{tag:\"(0040,4005)\",vr:\"DT\",name:\"ScheduledProcedureStepStartDateTime\",vm:\"1\",version:\"DICOM\"},\"(0040,4007)\":{tag:\"(0040,4007)\",vr:\"SQ\",name:\"PerformedProcessingApplicationsCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,4008)\":{tag:\"(0040,4008)\",vr:\"DT\",name:\"ScheduledProcedureStepExpirationDateTime\",vm:\"1\",version:\"DICOM\"},\"(0040,4009)\":{tag:\"(0040,4009)\",vr:\"SQ\",name:\"HumanPerformerCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,4010)\":{tag:\"(0040,4010)\",vr:\"DT\",name:\"ScheduledProcedureStepModificationDateTime\",vm:\"1\",version:\"DICOM\"},\"(0040,4011)\":{tag:\"(0040,4011)\",vr:\"DT\",name:\"ExpectedCompletionDateTime\",vm:\"1\",version:\"DICOM\"},\"(0040,4018)\":{tag:\"(0040,4018)\",vr:\"SQ\",name:\"ScheduledWorkitemCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,4019)\":{tag:\"(0040,4019)\",vr:\"SQ\",name:\"PerformedWorkitemCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,4020)\":{tag:\"(0040,4020)\",vr:\"CS\",name:\"InputAvailabilityFlag\",vm:\"1\",version:\"DICOM\"},\"(0040,4021)\":{tag:\"(0040,4021)\",vr:\"SQ\",name:\"InputInformationSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,4025)\":{tag:\"(0040,4025)\",vr:\"SQ\",name:\"ScheduledStationNameCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,4026)\":{tag:\"(0040,4026)\",vr:\"SQ\",name:\"ScheduledStationClassCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,4027)\":{tag:\"(0040,4027)\",vr:\"SQ\",name:\"ScheduledStationGeographicLocationCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,4028)\":{tag:\"(0040,4028)\",vr:\"SQ\",name:\"PerformedStationNameCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,4029)\":{tag:\"(0040,4029)\",vr:\"SQ\",name:\"PerformedStationClassCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,4030)\":{tag:\"(0040,4030)\",vr:\"SQ\",name:\"PerformedStationGeographicLocationCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,4033)\":{tag:\"(0040,4033)\",vr:\"SQ\",name:\"OutputInformationSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,4034)\":{tag:\"(0040,4034)\",vr:\"SQ\",name:\"ScheduledHumanPerformersSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,4035)\":{tag:\"(0040,4035)\",vr:\"SQ\",name:\"ActualHumanPerformersSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,4036)\":{tag:\"(0040,4036)\",vr:\"LO\",name:\"HumanPerformerOrganization\",vm:\"1\",version:\"DICOM\"},\"(0040,4037)\":{tag:\"(0040,4037)\",vr:\"PN\",name:\"HumanPerformerName\",vm:\"1\",version:\"DICOM\"},\"(0040,4040)\":{tag:\"(0040,4040)\",vr:\"CS\",name:\"RawDataHandling\",vm:\"1\",version:\"DICOM\"},\"(0040,4041)\":{tag:\"(0040,4041)\",vr:\"CS\",name:\"InputReadinessState\",vm:\"1\",version:\"DICOM\"},\"(0040,4050)\":{tag:\"(0040,4050)\",vr:\"DT\",name:\"PerformedProcedureStepStartDateTime\",vm:\"1\",version:\"DICOM\"},\"(0040,4051)\":{tag:\"(0040,4051)\",vr:\"DT\",name:\"PerformedProcedureStepEndDateTime\",vm:\"1\",version:\"DICOM\"},\"(0040,4052)\":{tag:\"(0040,4052)\",vr:\"DT\",name:\"ProcedureStepCancellationDateTime\",vm:\"1\",version:\"DICOM\"},\"(0040,8302)\":{tag:\"(0040,8302)\",vr:\"DS\",name:\"EntranceDoseInmGy\",vm:\"1\",version:\"DICOM\"},\"(0040,8303)\":{tag:\"(0040,8303)\",vr:\"CS\",name:\"EntranceDoseDerivation\",vm:\"1\",version:\"DICOM\"},\"(0040,9092)\":{tag:\"(0040,9092)\",vr:\"SQ\",name:\"ParametricMapFrameTypeSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,9094)\":{tag:\"(0040,9094)\",vr:\"SQ\",name:\"ReferencedImageRealWorldValueMappingSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,9096)\":{tag:\"(0040,9096)\",vr:\"SQ\",name:\"RealWorldValueMappingSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,9098)\":{tag:\"(0040,9098)\",vr:\"SQ\",name:\"PixelValueMappingCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,9210)\":{tag:\"(0040,9210)\",vr:\"SH\",name:\"LUTLabel\",vm:\"1\",version:\"DICOM\"},\"(0040,9211)\":{tag:\"(0040,9211)\",vr:\"xs\",name:\"RealWorldValueLastValueMapped\",vm:\"1\",version:\"DICOM\"},\"(0040,9212)\":{tag:\"(0040,9212)\",vr:\"FD\",name:\"RealWorldValueLUTData\",vm:\"1-n\",version:\"DICOM\"},\"(0040,9216)\":{tag:\"(0040,9216)\",vr:\"xs\",name:\"RealWorldValueFirstValueMapped\",vm:\"1\",version:\"DICOM\"},\"(0040,9220)\":{tag:\"(0040,9220)\",vr:\"SQ\",name:\"QuantityDefinitionSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,9224)\":{tag:\"(0040,9224)\",vr:\"FD\",name:\"RealWorldValueIntercept\",vm:\"1\",version:\"DICOM\"},\"(0040,9225)\":{tag:\"(0040,9225)\",vr:\"FD\",name:\"RealWorldValueSlope\",vm:\"1\",version:\"DICOM\"},\"(0040,A010)\":{tag:\"(0040,A010)\",vr:\"CS\",name:\"RelationshipType\",vm:\"1\",version:\"DICOM\"},\"(0040,A027)\":{tag:\"(0040,A027)\",vr:\"LO\",name:\"VerifyingOrganization\",vm:\"1\",version:\"DICOM\"},\"(0040,A030)\":{tag:\"(0040,A030)\",vr:\"DT\",name:\"VerificationDateTime\",vm:\"1\",version:\"DICOM\"},\"(0040,A032)\":{tag:\"(0040,A032)\",vr:\"DT\",name:\"ObservationDateTime\",vm:\"1\",version:\"DICOM\"},\"(0040,A033)\":{tag:\"(0040,A033)\",vr:\"DT\",name:\"ObservationStartDateTime\",vm:\"1\",version:\"DICOM\"},\"(0040,A040)\":{tag:\"(0040,A040)\",vr:\"CS\",name:\"ValueType\",vm:\"1\",version:\"DICOM\"},\"(0040,A043)\":{tag:\"(0040,A043)\",vr:\"SQ\",name:\"ConceptNameCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,A050)\":{tag:\"(0040,A050)\",vr:\"CS\",name:\"ContinuityOfContent\",vm:\"1\",version:\"DICOM\"},\"(0040,A073)\":{tag:\"(0040,A073)\",vr:\"SQ\",name:\"VerifyingObserverSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,A075)\":{tag:\"(0040,A075)\",vr:\"PN\",name:\"VerifyingObserverName\",vm:\"1\",version:\"DICOM\"},\"(0040,A078)\":{tag:\"(0040,A078)\",vr:\"SQ\",name:\"AuthorObserverSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,A07A)\":{tag:\"(0040,A07A)\",vr:\"SQ\",name:\"ParticipantSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,A07C)\":{tag:\"(0040,A07C)\",vr:\"SQ\",name:\"CustodialOrganizationSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,A080)\":{tag:\"(0040,A080)\",vr:\"CS\",name:\"ParticipationType\",vm:\"1\",version:\"DICOM\"},\"(0040,A082)\":{tag:\"(0040,A082)\",vr:\"DT\",name:\"ParticipationDateTime\",vm:\"1\",version:\"DICOM\"},\"(0040,A084)\":{tag:\"(0040,A084)\",vr:\"CS\",name:\"ObserverType\",vm:\"1\",version:\"DICOM\"},\"(0040,A088)\":{tag:\"(0040,A088)\",vr:\"SQ\",name:\"VerifyingObserverIdentificationCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,A0B0)\":{tag:\"(0040,A0B0)\",vr:\"US\",name:\"ReferencedWaveformChannels\",vm:\"2-2n\",version:\"DICOM\"},\"(0040,A120)\":{tag:\"(0040,A120)\",vr:\"DT\",name:\"DateTime\",vm:\"1\",version:\"DICOM\"},\"(0040,A121)\":{tag:\"(0040,A121)\",vr:\"DA\",name:\"Date\",vm:\"1\",version:\"DICOM\"},\"(0040,A122)\":{tag:\"(0040,A122)\",vr:\"TM\",name:\"Time\",vm:\"1\",version:\"DICOM\"},\"(0040,A123)\":{tag:\"(0040,A123)\",vr:\"PN\",name:\"PersonName\",vm:\"1\",version:\"DICOM\"},\"(0040,A124)\":{tag:\"(0040,A124)\",vr:\"UI\",name:\"UID\",vm:\"1\",version:\"DICOM\"},\"(0040,A130)\":{tag:\"(0040,A130)\",vr:\"CS\",name:\"TemporalRangeType\",vm:\"1\",version:\"DICOM\"},\"(0040,A132)\":{tag:\"(0040,A132)\",vr:\"UL\",name:\"ReferencedSamplePositions\",vm:\"1-n\",version:\"DICOM\"},\"(0040,A136)\":{tag:\"(0040,A136)\",vr:\"US\",name:\"ReferencedFrameNumbers\",vm:\"1-n\",version:\"DICOM\"},\"(0040,A138)\":{tag:\"(0040,A138)\",vr:\"DS\",name:\"ReferencedTimeOffsets\",vm:\"1-n\",version:\"DICOM\"},\"(0040,A13A)\":{tag:\"(0040,A13A)\",vr:\"DT\",name:\"ReferencedDateTime\",vm:\"1-n\",version:\"DICOM\"},\"(0040,A160)\":{tag:\"(0040,A160)\",vr:\"UT\",name:\"TextValue\",vm:\"1\",version:\"DICOM\"},\"(0040,A161)\":{tag:\"(0040,A161)\",vr:\"FD\",name:\"FloatingPointValue\",vm:\"1-n\",version:\"DICOM\"},\"(0040,A162)\":{tag:\"(0040,A162)\",vr:\"SL\",name:\"RationalNumeratorValue\",vm:\"1-n\",version:\"DICOM\"},\"(0040,A163)\":{tag:\"(0040,A163)\",vr:\"UL\",name:\"RationalDenominatorValue\",vm:\"1-n\",version:\"DICOM\"},\"(0040,A168)\":{tag:\"(0040,A168)\",vr:\"SQ\",name:\"ConceptCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,A170)\":{tag:\"(0040,A170)\",vr:\"SQ\",name:\"PurposeOfReferenceCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,A171)\":{tag:\"(0040,A171)\",vr:\"UI\",name:\"ObservationUID\",vm:\"1\",version:\"DICOM\"},\"(0040,A180)\":{tag:\"(0040,A180)\",vr:\"US\",name:\"AnnotationGroupNumber\",vm:\"1\",version:\"DICOM\"},\"(0040,A195)\":{tag:\"(0040,A195)\",vr:\"SQ\",name:\"ModifierCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,A300)\":{tag:\"(0040,A300)\",vr:\"SQ\",name:\"MeasuredValueSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,A301)\":{tag:\"(0040,A301)\",vr:\"SQ\",name:\"NumericValueQualifierCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,A30A)\":{tag:\"(0040,A30A)\",vr:\"DS\",name:\"NumericValue\",vm:\"1-n\",version:\"DICOM\"},\"(0040,A360)\":{tag:\"(0040,A360)\",vr:\"SQ\",name:\"PredecessorDocumentsSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,A370)\":{tag:\"(0040,A370)\",vr:\"SQ\",name:\"ReferencedRequestSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,A372)\":{tag:\"(0040,A372)\",vr:\"SQ\",name:\"PerformedProcedureCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,A375)\":{tag:\"(0040,A375)\",vr:\"SQ\",name:\"CurrentRequestedProcedureEvidenceSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,A385)\":{tag:\"(0040,A385)\",vr:\"SQ\",name:\"PertinentOtherEvidenceSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,A390)\":{tag:\"(0040,A390)\",vr:\"SQ\",name:\"HL7StructuredDocumentReferenceSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,A491)\":{tag:\"(0040,A491)\",vr:\"CS\",name:\"CompletionFlag\",vm:\"1\",version:\"DICOM\"},\"(0040,A492)\":{tag:\"(0040,A492)\",vr:\"LO\",name:\"CompletionFlagDescription\",vm:\"1\",version:\"DICOM\"},\"(0040,A493)\":{tag:\"(0040,A493)\",vr:\"CS\",name:\"VerificationFlag\",vm:\"1\",version:\"DICOM\"},\"(0040,A494)\":{tag:\"(0040,A494)\",vr:\"CS\",name:\"ArchiveRequested\",vm:\"1\",version:\"DICOM\"},\"(0040,A496)\":{tag:\"(0040,A496)\",vr:\"CS\",name:\"PreliminaryFlag\",vm:\"1\",version:\"DICOM\"},\"(0040,A504)\":{tag:\"(0040,A504)\",vr:\"SQ\",name:\"ContentTemplateSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,A525)\":{tag:\"(0040,A525)\",vr:\"SQ\",name:\"IdenticalDocumentsSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,A730)\":{tag:\"(0040,A730)\",vr:\"SQ\",name:\"ContentSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,A801)\":{tag:\"(0040,A801)\",vr:\"SQ\",name:\"TabulatedValuesSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,A802)\":{tag:\"(0040,A802)\",vr:\"UL\",name:\"NumberOfTableRows\",vm:\"1\",version:\"DICOM\"},\"(0040,A803)\":{tag:\"(0040,A803)\",vr:\"UL\",name:\"NumbeOfTableColumns\",vm:\"1\",version:\"DICOM\"},\"(0040,A804)\":{tag:\"(0040,A804)\",vr:\"UL\",name:\"TableRowNumber\",vm:\"1\",version:\"DICOM\"},\"(0040,A805)\":{tag:\"(0040,A805)\",vr:\"UL\",name:\"TableColumnNumber\",vm:\"1\",version:\"DICOM\"},\"(0040,A806)\":{tag:\"(0040,A806)\",vr:\"SQ\",name:\"TableRowDefinitionSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,A807)\":{tag:\"(0040,A807)\",vr:\"SQ\",name:\"TableColumnDefinitionSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,A808)\":{tag:\"(0040,A808)\",vr:\"SQ\",name:\"CellValuesSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,B020)\":{tag:\"(0040,B020)\",vr:\"SQ\",name:\"WaveformAnnotationSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,DB00)\":{tag:\"(0040,DB00)\",vr:\"CS\",name:\"TemplateIdentifier\",vm:\"1\",version:\"DICOM\"},\"(0040,DB73)\":{tag:\"(0040,DB73)\",vr:\"UL\",name:\"ReferencedContentItemIdentifier\",vm:\"1-n\",version:\"DICOM\"},\"(0040,E001)\":{tag:\"(0040,E001)\",vr:\"ST\",name:\"HL7InstanceIdentifier\",vm:\"1\",version:\"DICOM\"},\"(0040,E004)\":{tag:\"(0040,E004)\",vr:\"DT\",name:\"HL7DocumentEffectiveTime\",vm:\"1\",version:\"DICOM\"},\"(0040,E006)\":{tag:\"(0040,E006)\",vr:\"SQ\",name:\"HL7DocumentTypeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,E008)\":{tag:\"(0040,E008)\",vr:\"SQ\",name:\"DocumentClassCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,E010)\":{tag:\"(0040,E010)\",vr:\"UR\",name:\"RetrieveURI\",vm:\"1\",version:\"DICOM\"},\"(0040,E011)\":{tag:\"(0040,E011)\",vr:\"UI\",name:\"RetrieveLocationUID\",vm:\"1\",version:\"DICOM\"},\"(0040,E020)\":{tag:\"(0040,E020)\",vr:\"CS\",name:\"TypeOfInstances\",vm:\"1\",version:\"DICOM\"},\"(0040,E021)\":{tag:\"(0040,E021)\",vr:\"SQ\",name:\"DICOMRetrievalSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,E022)\":{tag:\"(0040,E022)\",vr:\"SQ\",name:\"DICOMMediaRetrievalSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,E023)\":{tag:\"(0040,E023)\",vr:\"SQ\",name:\"WADORetrievalSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,E024)\":{tag:\"(0040,E024)\",vr:\"SQ\",name:\"XDSRetrievalSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,E025)\":{tag:\"(0040,E025)\",vr:\"SQ\",name:\"WADORSRetrievalSequence\",vm:\"1\",version:\"DICOM\"},\"(0040,E030)\":{tag:\"(0040,E030)\",vr:\"UI\",name:\"RepositoryUniqueID\",vm:\"1\",version:\"DICOM\"},\"(0040,E031)\":{tag:\"(0040,E031)\",vr:\"UI\",name:\"HomeCommunityID\",vm:\"1\",version:\"DICOM\"},\"(0042,0010)\":{tag:\"(0042,0010)\",vr:\"ST\",name:\"DocumentTitle\",vm:\"1\",version:\"DICOM\"},\"(0042,0011)\":{tag:\"(0042,0011)\",vr:\"OB\",name:\"EncapsulatedDocument\",vm:\"1\",version:\"DICOM\"},\"(0042,0012)\":{tag:\"(0042,0012)\",vr:\"LO\",name:\"MIMETypeOfEncapsulatedDocument\",vm:\"1\",version:\"DICOM\"},\"(0042,0013)\":{tag:\"(0042,0013)\",vr:\"SQ\",name:\"SourceInstanceSequence\",vm:\"1\",version:\"DICOM\"},\"(0042,0014)\":{tag:\"(0042,0014)\",vr:\"LO\",name:\"ListOfMIMETypes\",vm:\"1-n\",version:\"DICOM\"},\"(0042,0015)\":{tag:\"(0042,0015)\",vr:\"UL\",name:\"EncapsulatedDocumentLength\",vm:\"1\",version:\"DICOM\"},\"(0044,0001)\":{tag:\"(0044,0001)\",vr:\"ST\",name:\"ProductPackageIdentifier\",vm:\"1\",version:\"DICOM\"},\"(0044,0002)\":{tag:\"(0044,0002)\",vr:\"CS\",name:\"SubstanceAdministrationApproval\",vm:\"1\",version:\"DICOM\"},\"(0044,0003)\":{tag:\"(0044,0003)\",vr:\"LT\",name:\"ApprovalStatusFurtherDescription\",vm:\"1\",version:\"DICOM\"},\"(0044,0004)\":{tag:\"(0044,0004)\",vr:\"DT\",name:\"ApprovalStatusDateTime\",vm:\"1\",version:\"DICOM\"},\"(0044,0007)\":{tag:\"(0044,0007)\",vr:\"SQ\",name:\"ProductTypeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0044,0008)\":{tag:\"(0044,0008)\",vr:\"LO\",name:\"ProductName\",vm:\"1-n\",version:\"DICOM\"},\"(0044,0009)\":{tag:\"(0044,0009)\",vr:\"LT\",name:\"ProductDescription\",vm:\"1\",version:\"DICOM\"},\"(0044,000A)\":{tag:\"(0044,000A)\",vr:\"LO\",name:\"ProductLotIdentifier\",vm:\"1\",version:\"DICOM\"},\"(0044,000B)\":{tag:\"(0044,000B)\",vr:\"DT\",name:\"ProductExpirationDateTime\",vm:\"1\",version:\"DICOM\"},\"(0044,0010)\":{tag:\"(0044,0010)\",vr:\"DT\",name:\"SubstanceAdministrationDateTime\",vm:\"1\",version:\"DICOM\"},\"(0044,0011)\":{tag:\"(0044,0011)\",vr:\"LO\",name:\"SubstanceAdministrationNotes\",vm:\"1\",version:\"DICOM\"},\"(0044,0012)\":{tag:\"(0044,0012)\",vr:\"LO\",name:\"SubstanceAdministrationDeviceID\",vm:\"1\",version:\"DICOM\"},\"(0044,0013)\":{tag:\"(0044,0013)\",vr:\"SQ\",name:\"ProductParameterSequence\",vm:\"1\",version:\"DICOM\"},\"(0044,0019)\":{tag:\"(0044,0019)\",vr:\"SQ\",name:\"SubstanceAdministrationParameterSequence\",vm:\"1\",version:\"DICOM\"},\"(0044,0100)\":{tag:\"(0044,0100)\",vr:\"SQ\",name:\"ApprovalSequence\",vm:\"1\",version:\"DICOM\"},\"(0044,0101)\":{tag:\"(0044,0101)\",vr:\"SQ\",name:\"AssertionCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0044,0102)\":{tag:\"(0044,0102)\",vr:\"UI\",name:\"AssertionUID\",vm:\"1\",version:\"DICOM\"},\"(0044,0103)\":{tag:\"(0044,0103)\",vr:\"SQ\",name:\"AsserterIdentificationSequence\",vm:\"1\",version:\"DICOM\"},\"(0044,0104)\":{tag:\"(0044,0104)\",vr:\"DT\",name:\"AssertionDateTime\",vm:\"1\",version:\"DICOM\"},\"(0044,0105)\":{tag:\"(0044,0105)\",vr:\"DT\",name:\"AssertionExpirationDateTime\",vm:\"1\",version:\"DICOM\"},\"(0044,0106)\":{tag:\"(0044,0106)\",vr:\"UT\",name:\"AssertionComments\",vm:\"1\",version:\"DICOM\"},\"(0044,0107)\":{tag:\"(0044,0107)\",vr:\"SQ\",name:\"RelatedAssertionSequence\",vm:\"1\",version:\"DICOM\"},\"(0044,0108)\":{tag:\"(0044,0108)\",vr:\"UI\",name:\"ReferencedAssertionUID\",vm:\"1\",version:\"DICOM\"},\"(0044,0109)\":{tag:\"(0044,0109)\",vr:\"SQ\",name:\"ApprovalSubjectSequence\",vm:\"1\",version:\"DICOM\"},\"(0044,010A)\":{tag:\"(0044,010A)\",vr:\"SQ\",name:\"OrganizationalRoleCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0046,0012)\":{tag:\"(0046,0012)\",vr:\"LO\",name:\"LensDescription\",vm:\"1\",version:\"DICOM\"},\"(0046,0014)\":{tag:\"(0046,0014)\",vr:\"SQ\",name:\"RightLensSequence\",vm:\"1\",version:\"DICOM\"},\"(0046,0015)\":{tag:\"(0046,0015)\",vr:\"SQ\",name:\"LeftLensSequence\",vm:\"1\",version:\"DICOM\"},\"(0046,0016)\":{tag:\"(0046,0016)\",vr:\"SQ\",name:\"UnspecifiedLateralityLensSequence\",vm:\"1\",version:\"DICOM\"},\"(0046,0018)\":{tag:\"(0046,0018)\",vr:\"SQ\",name:\"CylinderSequence\",vm:\"1\",version:\"DICOM\"},\"(0046,0028)\":{tag:\"(0046,0028)\",vr:\"SQ\",name:\"PrismSequence\",vm:\"1\",version:\"DICOM\"},\"(0046,0030)\":{tag:\"(0046,0030)\",vr:\"FD\",name:\"HorizontalPrismPower\",vm:\"1\",version:\"DICOM\"},\"(0046,0032)\":{tag:\"(0046,0032)\",vr:\"CS\",name:\"HorizontalPrismBase\",vm:\"1\",version:\"DICOM\"},\"(0046,0034)\":{tag:\"(0046,0034)\",vr:\"FD\",name:\"VerticalPrismPower\",vm:\"1\",version:\"DICOM\"},\"(0046,0036)\":{tag:\"(0046,0036)\",vr:\"CS\",name:\"VerticalPrismBase\",vm:\"1\",version:\"DICOM\"},\"(0046,0038)\":{tag:\"(0046,0038)\",vr:\"CS\",name:\"LensSegmentType\",vm:\"1\",version:\"DICOM\"},\"(0046,0040)\":{tag:\"(0046,0040)\",vr:\"FD\",name:\"OpticalTransmittance\",vm:\"1\",version:\"DICOM\"},\"(0046,0042)\":{tag:\"(0046,0042)\",vr:\"FD\",name:\"ChannelWidth\",vm:\"1\",version:\"DICOM\"},\"(0046,0044)\":{tag:\"(0046,0044)\",vr:\"FD\",name:\"PupilSize\",vm:\"1\",version:\"DICOM\"},\"(0046,0046)\":{tag:\"(0046,0046)\",vr:\"FD\",name:\"CornealSize\",vm:\"1\",version:\"DICOM\"},\"(0046,0047)\":{tag:\"(0046,0047)\",vr:\"SQ\",name:\"CornealSizeSequence\",vm:\"1\",version:\"DICOM\"},\"(0046,0050)\":{tag:\"(0046,0050)\",vr:\"SQ\",name:\"AutorefractionRightEyeSequence\",vm:\"1\",version:\"DICOM\"},\"(0046,0052)\":{tag:\"(0046,0052)\",vr:\"SQ\",name:\"AutorefractionLeftEyeSequence\",vm:\"1\",version:\"DICOM\"},\"(0046,0060)\":{tag:\"(0046,0060)\",vr:\"FD\",name:\"DistancePupillaryDistance\",vm:\"1\",version:\"DICOM\"},\"(0046,0062)\":{tag:\"(0046,0062)\",vr:\"FD\",name:\"NearPupillaryDistance\",vm:\"1\",version:\"DICOM\"},\"(0046,0063)\":{tag:\"(0046,0063)\",vr:\"FD\",name:\"IntermediatePupillaryDistance\",vm:\"1\",version:\"DICOM\"},\"(0046,0064)\":{tag:\"(0046,0064)\",vr:\"FD\",name:\"OtherPupillaryDistance\",vm:\"1\",version:\"DICOM\"},\"(0046,0070)\":{tag:\"(0046,0070)\",vr:\"SQ\",name:\"KeratometryRightEyeSequence\",vm:\"1\",version:\"DICOM\"},\"(0046,0071)\":{tag:\"(0046,0071)\",vr:\"SQ\",name:\"KeratometryLeftEyeSequence\",vm:\"1\",version:\"DICOM\"},\"(0046,0074)\":{tag:\"(0046,0074)\",vr:\"SQ\",name:\"SteepKeratometricAxisSequence\",vm:\"1\",version:\"DICOM\"},\"(0046,0075)\":{tag:\"(0046,0075)\",vr:\"FD\",name:\"RadiusOfCurvature\",vm:\"1\",version:\"DICOM\"},\"(0046,0076)\":{tag:\"(0046,0076)\",vr:\"FD\",name:\"KeratometricPower\",vm:\"1\",version:\"DICOM\"},\"(0046,0077)\":{tag:\"(0046,0077)\",vr:\"FD\",name:\"KeratometricAxis\",vm:\"1\",version:\"DICOM\"},\"(0046,0080)\":{tag:\"(0046,0080)\",vr:\"SQ\",name:\"FlatKeratometricAxisSequence\",vm:\"1\",version:\"DICOM\"},\"(0046,0092)\":{tag:\"(0046,0092)\",vr:\"CS\",name:\"BackgroundColor\",vm:\"1\",version:\"DICOM\"},\"(0046,0094)\":{tag:\"(0046,0094)\",vr:\"CS\",name:\"Optotype\",vm:\"1\",version:\"DICOM\"},\"(0046,0095)\":{tag:\"(0046,0095)\",vr:\"CS\",name:\"OptotypePresentation\",vm:\"1\",version:\"DICOM\"},\"(0046,0097)\":{tag:\"(0046,0097)\",vr:\"SQ\",name:\"SubjectiveRefractionRightEyeSequence\",vm:\"1\",version:\"DICOM\"},\"(0046,0098)\":{tag:\"(0046,0098)\",vr:\"SQ\",name:\"SubjectiveRefractionLeftEyeSequence\",vm:\"1\",version:\"DICOM\"},\"(0046,0100)\":{tag:\"(0046,0100)\",vr:\"SQ\",name:\"AddNearSequence\",vm:\"1\",version:\"DICOM\"},\"(0046,0101)\":{tag:\"(0046,0101)\",vr:\"SQ\",name:\"AddIntermediateSequence\",vm:\"1\",version:\"DICOM\"},\"(0046,0102)\":{tag:\"(0046,0102)\",vr:\"SQ\",name:\"AddOtherSequence\",vm:\"1\",version:\"DICOM\"},\"(0046,0104)\":{tag:\"(0046,0104)\",vr:\"FD\",name:\"AddPower\",vm:\"1\",version:\"DICOM\"},\"(0046,0106)\":{tag:\"(0046,0106)\",vr:\"FD\",name:\"ViewingDistance\",vm:\"1\",version:\"DICOM\"},\"(0046,0110)\":{tag:\"(0046,0110)\",vr:\"SQ\",name:\"CorneaMeasurementsSequence\",vm:\"1\",version:\"DICOM\"},\"(0046,0111)\":{tag:\"(0046,0111)\",vr:\"SQ\",name:\"SourceOfCorneaMeasurementDataCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0046,0112)\":{tag:\"(0046,0112)\",vr:\"SQ\",name:\"SteepCornealAxisSequence\",vm:\"1\",version:\"DICOM\"},\"(0046,0113)\":{tag:\"(0046,0113)\",vr:\"SQ\",name:\"FlatCornealAxisSequence\",vm:\"1\",version:\"DICOM\"},\"(0046,0114)\":{tag:\"(0046,0114)\",vr:\"FD\",name:\"CornealPower\",vm:\"1\",version:\"DICOM\"},\"(0046,0115)\":{tag:\"(0046,0115)\",vr:\"FD\",name:\"CornealAxis\",vm:\"1\",version:\"DICOM\"},\"(0046,0116)\":{tag:\"(0046,0116)\",vr:\"SQ\",name:\"CorneaMeasurementMethodCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0046,0117)\":{tag:\"(0046,0117)\",vr:\"FL\",name:\"RefractiveIndexOfCornea\",vm:\"1\",version:\"DICOM\"},\"(0046,0118)\":{tag:\"(0046,0118)\",vr:\"FL\",name:\"RefractiveIndexOfAqueousHumor\",vm:\"1\",version:\"DICOM\"},\"(0046,0121)\":{tag:\"(0046,0121)\",vr:\"SQ\",name:\"VisualAcuityTypeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0046,0122)\":{tag:\"(0046,0122)\",vr:\"SQ\",name:\"VisualAcuityRightEyeSequence\",vm:\"1\",version:\"DICOM\"},\"(0046,0123)\":{tag:\"(0046,0123)\",vr:\"SQ\",name:\"VisualAcuityLeftEyeSequence\",vm:\"1\",version:\"DICOM\"},\"(0046,0124)\":{tag:\"(0046,0124)\",vr:\"SQ\",name:\"VisualAcuityBothEyesOpenSequence\",vm:\"1\",version:\"DICOM\"},\"(0046,0125)\":{tag:\"(0046,0125)\",vr:\"CS\",name:\"ViewingDistanceType\",vm:\"1\",version:\"DICOM\"},\"(0046,0135)\":{tag:\"(0046,0135)\",vr:\"SS\",name:\"VisualAcuityModifiers\",vm:\"2\",version:\"DICOM\"},\"(0046,0137)\":{tag:\"(0046,0137)\",vr:\"FD\",name:\"DecimalVisualAcuity\",vm:\"1\",version:\"DICOM\"},\"(0046,0139)\":{tag:\"(0046,0139)\",vr:\"LO\",name:\"OptotypeDetailedDefinition\",vm:\"1\",version:\"DICOM\"},\"(0046,0145)\":{tag:\"(0046,0145)\",vr:\"SQ\",name:\"ReferencedRefractiveMeasurementsSequence\",vm:\"1\",version:\"DICOM\"},\"(0046,0146)\":{tag:\"(0046,0146)\",vr:\"FD\",name:\"SpherePower\",vm:\"1\",version:\"DICOM\"},\"(0046,0147)\":{tag:\"(0046,0147)\",vr:\"FD\",name:\"CylinderPower\",vm:\"1\",version:\"DICOM\"},\"(0046,0201)\":{tag:\"(0046,0201)\",vr:\"CS\",name:\"CornealTopographySurface\",vm:\"1\",version:\"DICOM\"},\"(0046,0202)\":{tag:\"(0046,0202)\",vr:\"FL\",name:\"CornealVertexLocation\",vm:\"2\",version:\"DICOM\"},\"(0046,0203)\":{tag:\"(0046,0203)\",vr:\"FL\",name:\"PupilCentroidXCoordinate\",vm:\"1\",version:\"DICOM\"},\"(0046,0204)\":{tag:\"(0046,0204)\",vr:\"FL\",name:\"PupilCentroidYCoordinate\",vm:\"1\",version:\"DICOM\"},\"(0046,0205)\":{tag:\"(0046,0205)\",vr:\"FL\",name:\"EquivalentPupilRadius\",vm:\"1\",version:\"DICOM\"},\"(0046,0207)\":{tag:\"(0046,0207)\",vr:\"SQ\",name:\"CornealTopographyMapTypeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0046,0208)\":{tag:\"(0046,0208)\",vr:\"IS\",name:\"VerticesOfTheOutlineOfPupil\",vm:\"2-2n\",version:\"DICOM\"},\"(0046,0210)\":{tag:\"(0046,0210)\",vr:\"SQ\",name:\"CornealTopographyMappingNormalsSequence\",vm:\"1\",version:\"DICOM\"},\"(0046,0211)\":{tag:\"(0046,0211)\",vr:\"SQ\",name:\"MaximumCornealCurvatureSequence\",vm:\"1\",version:\"DICOM\"},\"(0046,0212)\":{tag:\"(0046,0212)\",vr:\"FL\",name:\"MaximumCornealCurvature\",vm:\"1\",version:\"DICOM\"},\"(0046,0213)\":{tag:\"(0046,0213)\",vr:\"FL\",name:\"MaximumCornealCurvatureLocation\",vm:\"2\",version:\"DICOM\"},\"(0046,0215)\":{tag:\"(0046,0215)\",vr:\"SQ\",name:\"MinimumKeratometricSequence\",vm:\"1\",version:\"DICOM\"},\"(0046,0218)\":{tag:\"(0046,0218)\",vr:\"SQ\",name:\"SimulatedKeratometricCylinderSequence\",vm:\"1\",version:\"DICOM\"},\"(0046,0220)\":{tag:\"(0046,0220)\",vr:\"FL\",name:\"AverageCornealPower\",vm:\"1\",version:\"DICOM\"},\"(0046,0224)\":{tag:\"(0046,0224)\",vr:\"FL\",name:\"CornealISValue\",vm:\"1\",version:\"DICOM\"},\"(0046,0227)\":{tag:\"(0046,0227)\",vr:\"FL\",name:\"AnalyzedArea\",vm:\"1\",version:\"DICOM\"},\"(0046,0230)\":{tag:\"(0046,0230)\",vr:\"FL\",name:\"SurfaceRegularityIndex\",vm:\"1\",version:\"DICOM\"},\"(0046,0232)\":{tag:\"(0046,0232)\",vr:\"FL\",name:\"SurfaceAsymmetryIndex\",vm:\"1\",version:\"DICOM\"},\"(0046,0234)\":{tag:\"(0046,0234)\",vr:\"FL\",name:\"CornealEccentricityIndex\",vm:\"1\",version:\"DICOM\"},\"(0046,0236)\":{tag:\"(0046,0236)\",vr:\"FL\",name:\"KeratoconusPredictionIndex\",vm:\"1\",version:\"DICOM\"},\"(0046,0238)\":{tag:\"(0046,0238)\",vr:\"FL\",name:\"DecimalPotentialVisualAcuity\",vm:\"1\",version:\"DICOM\"},\"(0046,0242)\":{tag:\"(0046,0242)\",vr:\"CS\",name:\"CornealTopographyMapQualityEvaluation\",vm:\"1\",version:\"DICOM\"},\"(0046,0244)\":{tag:\"(0046,0244)\",vr:\"SQ\",name:\"SourceImageCornealProcessedDataSequence\",vm:\"1\",version:\"DICOM\"},\"(0046,0247)\":{tag:\"(0046,0247)\",vr:\"FL\",name:\"CornealPointLocation\",vm:\"3\",version:\"DICOM\"},\"(0046,0248)\":{tag:\"(0046,0248)\",vr:\"CS\",name:\"CornealPointEstimated\",vm:\"1\",version:\"DICOM\"},\"(0046,0249)\":{tag:\"(0046,0249)\",vr:\"FL\",name:\"AxialPower\",vm:\"1\",version:\"DICOM\"},\"(0046,0250)\":{tag:\"(0046,0250)\",vr:\"FL\",name:\"TangentialPower\",vm:\"1\",version:\"DICOM\"},\"(0046,0251)\":{tag:\"(0046,0251)\",vr:\"FL\",name:\"RefractivePower\",vm:\"1\",version:\"DICOM\"},\"(0046,0252)\":{tag:\"(0046,0252)\",vr:\"FL\",name:\"RelativeElevation\",vm:\"1\",version:\"DICOM\"},\"(0046,0253)\":{tag:\"(0046,0253)\",vr:\"FL\",name:\"CornealWavefront\",vm:\"1\",version:\"DICOM\"},\"(0048,0001)\":{tag:\"(0048,0001)\",vr:\"FL\",name:\"ImagedVolumeWidth\",vm:\"1\",version:\"DICOM\"},\"(0048,0002)\":{tag:\"(0048,0002)\",vr:\"FL\",name:\"ImagedVolumeHeight\",vm:\"1\",version:\"DICOM\"},\"(0048,0003)\":{tag:\"(0048,0003)\",vr:\"FL\",name:\"ImagedVolumeDepth\",vm:\"1\",version:\"DICOM\"},\"(0048,0006)\":{tag:\"(0048,0006)\",vr:\"UL\",name:\"TotalPixelMatrixColumns\",vm:\"1\",version:\"DICOM\"},\"(0048,0007)\":{tag:\"(0048,0007)\",vr:\"UL\",name:\"TotalPixelMatrixRows\",vm:\"1\",version:\"DICOM\"},\"(0048,0008)\":{tag:\"(0048,0008)\",vr:\"SQ\",name:\"TotalPixelMatrixOriginSequence\",vm:\"1\",version:\"DICOM\"},\"(0048,0010)\":{tag:\"(0048,0010)\",vr:\"CS\",name:\"SpecimenLabelInImage\",vm:\"1\",version:\"DICOM\"},\"(0048,0011)\":{tag:\"(0048,0011)\",vr:\"CS\",name:\"FocusMethod\",vm:\"1\",version:\"DICOM\"},\"(0048,0012)\":{tag:\"(0048,0012)\",vr:\"CS\",name:\"ExtendedDepthOfField\",vm:\"1\",version:\"DICOM\"},\"(0048,0013)\":{tag:\"(0048,0013)\",vr:\"US\",name:\"NumberOfFocalPlanes\",vm:\"1\",version:\"DICOM\"},\"(0048,0014)\":{tag:\"(0048,0014)\",vr:\"FL\",name:\"DistanceBetweenFocalPlanes\",vm:\"1\",version:\"DICOM\"},\"(0048,0015)\":{tag:\"(0048,0015)\",vr:\"US\",name:\"RecommendedAbsentPixelCIELabValue\",vm:\"3\",version:\"DICOM\"},\"(0048,0100)\":{tag:\"(0048,0100)\",vr:\"SQ\",name:\"IlluminatorTypeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0048,0102)\":{tag:\"(0048,0102)\",vr:\"DS\",name:\"ImageOrientationSlide\",vm:\"6\",version:\"DICOM\"},\"(0048,0105)\":{tag:\"(0048,0105)\",vr:\"SQ\",name:\"OpticalPathSequence\",vm:\"1\",version:\"DICOM\"},\"(0048,0106)\":{tag:\"(0048,0106)\",vr:\"SH\",name:\"OpticalPathIdentifier\",vm:\"1\",version:\"DICOM\"},\"(0048,0107)\":{tag:\"(0048,0107)\",vr:\"ST\",name:\"OpticalPathDescription\",vm:\"1\",version:\"DICOM\"},\"(0048,0108)\":{tag:\"(0048,0108)\",vr:\"SQ\",name:\"IlluminationColorCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0048,0110)\":{tag:\"(0048,0110)\",vr:\"SQ\",name:\"SpecimenReferenceSequence\",vm:\"1\",version:\"DICOM\"},\"(0048,0111)\":{tag:\"(0048,0111)\",vr:\"DS\",name:\"CondenserLensPower\",vm:\"1\",version:\"DICOM\"},\"(0048,0112)\":{tag:\"(0048,0112)\",vr:\"DS\",name:\"ObjectiveLensPower\",vm:\"1\",version:\"DICOM\"},\"(0048,0113)\":{tag:\"(0048,0113)\",vr:\"DS\",name:\"ObjectiveLensNumericalAperture\",vm:\"1\",version:\"DICOM\"},\"(0048,0120)\":{tag:\"(0048,0120)\",vr:\"SQ\",name:\"PaletteColorLookupTableSequence\",vm:\"1\",version:\"DICOM\"},\"(0048,0200)\":{tag:\"(0048,0200)\",vr:\"SQ\",name:\"ReferencedImageNavigationSequence\",vm:\"1\",version:\"DICOM\"},\"(0048,0201)\":{tag:\"(0048,0201)\",vr:\"US\",name:\"TopLeftHandCornerOfLocalizerArea\",vm:\"2\",version:\"DICOM\"},\"(0048,0202)\":{tag:\"(0048,0202)\",vr:\"US\",name:\"BottomRightHandCornerOfLocalizerArea\",vm:\"2\",version:\"DICOM\"},\"(0048,0207)\":{tag:\"(0048,0207)\",vr:\"SQ\",name:\"OpticalPathIdentificationSequence\",vm:\"1\",version:\"DICOM\"},\"(0048,021A)\":{tag:\"(0048,021A)\",vr:\"SQ\",name:\"PlanePositionSlideSequence\",vm:\"1\",version:\"DICOM\"},\"(0048,021E)\":{tag:\"(0048,021E)\",vr:\"SL\",name:\"ColumnPositionInTotalImagePixelMatrix\",vm:\"1\",version:\"DICOM\"},\"(0048,021F)\":{tag:\"(0048,021F)\",vr:\"SL\",name:\"RowPositionInTotalImagePixelMatrix\",vm:\"1\",version:\"DICOM\"},\"(0048,0301)\":{tag:\"(0048,0301)\",vr:\"CS\",name:\"PixelOriginInterpretation\",vm:\"1\",version:\"DICOM\"},\"(0048,0302)\":{tag:\"(0048,0302)\",vr:\"UL\",name:\"NumberOfOpticalPaths\",vm:\"1\",version:\"DICOM\"},\"(0048,0303)\":{tag:\"(0048,0303)\",vr:\"UL\",name:\"TotalPixelMatrixFocalPlanes\",vm:\"1\",version:\"DICOM\"},\"(0050,0004)\":{tag:\"(0050,0004)\",vr:\"CS\",name:\"CalibrationImage\",vm:\"1\",version:\"DICOM\"},\"(0050,0010)\":{tag:\"(0050,0010)\",vr:\"SQ\",name:\"DeviceSequence\",vm:\"1\",version:\"DICOM\"},\"(0050,0012)\":{tag:\"(0050,0012)\",vr:\"SQ\",name:\"ContainerComponentTypeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0050,0013)\":{tag:\"(0050,0013)\",vr:\"FD\",name:\"ContainerComponentThickness\",vm:\"1\",version:\"DICOM\"},\"(0050,0014)\":{tag:\"(0050,0014)\",vr:\"DS\",name:\"DeviceLength\",vm:\"1\",version:\"DICOM\"},\"(0050,0015)\":{tag:\"(0050,0015)\",vr:\"FD\",name:\"ContainerComponentWidth\",vm:\"1\",version:\"DICOM\"},\"(0050,0016)\":{tag:\"(0050,0016)\",vr:\"DS\",name:\"DeviceDiameter\",vm:\"1\",version:\"DICOM\"},\"(0050,0017)\":{tag:\"(0050,0017)\",vr:\"CS\",name:\"DeviceDiameterUnits\",vm:\"1\",version:\"DICOM\"},\"(0050,0018)\":{tag:\"(0050,0018)\",vr:\"DS\",name:\"DeviceVolume\",vm:\"1\",version:\"DICOM\"},\"(0050,0019)\":{tag:\"(0050,0019)\",vr:\"DS\",name:\"InterMarkerDistance\",vm:\"1\",version:\"DICOM\"},\"(0050,001A)\":{tag:\"(0050,001A)\",vr:\"CS\",name:\"ContainerComponentMaterial\",vm:\"1\",version:\"DICOM\"},\"(0050,001B)\":{tag:\"(0050,001B)\",vr:\"LO\",name:\"ContainerComponentID\",vm:\"1\",version:\"DICOM\"},\"(0050,001C)\":{tag:\"(0050,001C)\",vr:\"FD\",name:\"ContainerComponentLength\",vm:\"1\",version:\"DICOM\"},\"(0050,001D)\":{tag:\"(0050,001D)\",vr:\"FD\",name:\"ContainerComponentDiameter\",vm:\"1\",version:\"DICOM\"},\"(0050,001E)\":{tag:\"(0050,001E)\",vr:\"LO\",name:\"ContainerComponentDescription\",vm:\"1\",version:\"DICOM\"},\"(0050,0020)\":{tag:\"(0050,0020)\",vr:\"LO\",name:\"DeviceDescription\",vm:\"1\",version:\"DICOM\"},\"(0050,0021)\":{tag:\"(0050,0021)\",vr:\"ST\",name:\"LongDeviceDescription\",vm:\"1\",version:\"DICOM\"},\"(0052,0001)\":{tag:\"(0052,0001)\",vr:\"FL\",name:\"ContrastBolusIngredientPercentByVolume\",vm:\"1\",version:\"DICOM\"},\"(0052,0002)\":{tag:\"(0052,0002)\",vr:\"FD\",name:\"OCTFocalDistance\",vm:\"1\",version:\"DICOM\"},\"(0052,0003)\":{tag:\"(0052,0003)\",vr:\"FD\",name:\"BeamSpotSize\",vm:\"1\",version:\"DICOM\"},\"(0052,0004)\":{tag:\"(0052,0004)\",vr:\"FD\",name:\"EffectiveRefractiveIndex\",vm:\"1\",version:\"DICOM\"},\"(0052,0006)\":{tag:\"(0052,0006)\",vr:\"CS\",name:\"OCTAcquisitionDomain\",vm:\"1\",version:\"DICOM\"},\"(0052,0007)\":{tag:\"(0052,0007)\",vr:\"FD\",name:\"OCTOpticalCenterWavelength\",vm:\"1\",version:\"DICOM\"},\"(0052,0008)\":{tag:\"(0052,0008)\",vr:\"FD\",name:\"AxialResolution\",vm:\"1\",version:\"DICOM\"},\"(0052,0009)\":{tag:\"(0052,0009)\",vr:\"FD\",name:\"RangingDepth\",vm:\"1\",version:\"DICOM\"},\"(0052,0011)\":{tag:\"(0052,0011)\",vr:\"FD\",name:\"ALineRate\",vm:\"1\",version:\"DICOM\"},\"(0052,0012)\":{tag:\"(0052,0012)\",vr:\"US\",name:\"ALinesPerFrame\",vm:\"1\",version:\"DICOM\"},\"(0052,0013)\":{tag:\"(0052,0013)\",vr:\"FD\",name:\"CatheterRotationalRate\",vm:\"1\",version:\"DICOM\"},\"(0052,0014)\":{tag:\"(0052,0014)\",vr:\"FD\",name:\"ALinePixelSpacing\",vm:\"1\",version:\"DICOM\"},\"(0052,0016)\":{tag:\"(0052,0016)\",vr:\"SQ\",name:\"ModeOfPercutaneousAccessSequence\",vm:\"1\",version:\"DICOM\"},\"(0052,0025)\":{tag:\"(0052,0025)\",vr:\"SQ\",name:\"IntravascularOCTFrameTypeSequence\",vm:\"1\",version:\"DICOM\"},\"(0052,0026)\":{tag:\"(0052,0026)\",vr:\"CS\",name:\"OCTZOffsetApplied\",vm:\"1\",version:\"DICOM\"},\"(0052,0027)\":{tag:\"(0052,0027)\",vr:\"SQ\",name:\"IntravascularFrameContentSequence\",vm:\"1\",version:\"DICOM\"},\"(0052,0028)\":{tag:\"(0052,0028)\",vr:\"FD\",name:\"IntravascularLongitudinalDistance\",vm:\"1\",version:\"DICOM\"},\"(0052,0029)\":{tag:\"(0052,0029)\",vr:\"SQ\",name:\"IntravascularOCTFrameContentSequence\",vm:\"1\",version:\"DICOM\"},\"(0052,0030)\":{tag:\"(0052,0030)\",vr:\"SS\",name:\"OCTZOffsetCorrection\",vm:\"1\",version:\"DICOM\"},\"(0052,0031)\":{tag:\"(0052,0031)\",vr:\"CS\",name:\"CatheterDirectionOfRotation\",vm:\"1\",version:\"DICOM\"},\"(0052,0033)\":{tag:\"(0052,0033)\",vr:\"FD\",name:\"SeamLineLocation\",vm:\"1\",version:\"DICOM\"},\"(0052,0034)\":{tag:\"(0052,0034)\",vr:\"FD\",name:\"FirstALineLocation\",vm:\"1\",version:\"DICOM\"},\"(0052,0036)\":{tag:\"(0052,0036)\",vr:\"US\",name:\"SeamLineIndex\",vm:\"1\",version:\"DICOM\"},\"(0052,0038)\":{tag:\"(0052,0038)\",vr:\"US\",name:\"NumberOfPaddedALines\",vm:\"1\",version:\"DICOM\"},\"(0052,0039)\":{tag:\"(0052,0039)\",vr:\"CS\",name:\"InterpolationType\",vm:\"1\",version:\"DICOM\"},\"(0052,003A)\":{tag:\"(0052,003A)\",vr:\"CS\",name:\"RefractiveIndexApplied\",vm:\"1\",version:\"DICOM\"},\"(0054,0010)\":{tag:\"(0054,0010)\",vr:\"US\",name:\"EnergyWindowVector\",vm:\"1-n\",version:\"DICOM\"},\"(0054,0011)\":{tag:\"(0054,0011)\",vr:\"US\",name:\"NumberOfEnergyWindows\",vm:\"1\",version:\"DICOM\"},\"(0054,0012)\":{tag:\"(0054,0012)\",vr:\"SQ\",name:\"EnergyWindowInformationSequence\",vm:\"1\",version:\"DICOM\"},\"(0054,0013)\":{tag:\"(0054,0013)\",vr:\"SQ\",name:\"EnergyWindowRangeSequence\",vm:\"1\",version:\"DICOM\"},\"(0054,0014)\":{tag:\"(0054,0014)\",vr:\"DS\",name:\"EnergyWindowLowerLimit\",vm:\"1\",version:\"DICOM\"},\"(0054,0015)\":{tag:\"(0054,0015)\",vr:\"DS\",name:\"EnergyWindowUpperLimit\",vm:\"1\",version:\"DICOM\"},\"(0054,0016)\":{tag:\"(0054,0016)\",vr:\"SQ\",name:\"RadiopharmaceuticalInformationSequence\",vm:\"1\",version:\"DICOM\"},\"(0054,0017)\":{tag:\"(0054,0017)\",vr:\"IS\",name:\"ResidualSyringeCounts\",vm:\"1\",version:\"DICOM\"},\"(0054,0018)\":{tag:\"(0054,0018)\",vr:\"SH\",name:\"EnergyWindowName\",vm:\"1\",version:\"DICOM\"},\"(0054,0020)\":{tag:\"(0054,0020)\",vr:\"US\",name:\"DetectorVector\",vm:\"1-n\",version:\"DICOM\"},\"(0054,0021)\":{tag:\"(0054,0021)\",vr:\"US\",name:\"NumberOfDetectors\",vm:\"1\",version:\"DICOM\"},\"(0054,0022)\":{tag:\"(0054,0022)\",vr:\"SQ\",name:\"DetectorInformationSequence\",vm:\"1\",version:\"DICOM\"},\"(0054,0030)\":{tag:\"(0054,0030)\",vr:\"US\",name:\"PhaseVector\",vm:\"1-n\",version:\"DICOM\"},\"(0054,0031)\":{tag:\"(0054,0031)\",vr:\"US\",name:\"NumberOfPhases\",vm:\"1\",version:\"DICOM\"},\"(0054,0032)\":{tag:\"(0054,0032)\",vr:\"SQ\",name:\"PhaseInformationSequence\",vm:\"1\",version:\"DICOM\"},\"(0054,0033)\":{tag:\"(0054,0033)\",vr:\"US\",name:\"NumberOfFramesInPhase\",vm:\"1\",version:\"DICOM\"},\"(0054,0036)\":{tag:\"(0054,0036)\",vr:\"IS\",name:\"PhaseDelay\",vm:\"1\",version:\"DICOM\"},\"(0054,0038)\":{tag:\"(0054,0038)\",vr:\"IS\",name:\"PauseBetweenFrames\",vm:\"1\",version:\"DICOM\"},\"(0054,0039)\":{tag:\"(0054,0039)\",vr:\"CS\",name:\"PhaseDescription\",vm:\"1\",version:\"DICOM\"},\"(0054,0050)\":{tag:\"(0054,0050)\",vr:\"US\",name:\"RotationVector\",vm:\"1-n\",version:\"DICOM\"},\"(0054,0051)\":{tag:\"(0054,0051)\",vr:\"US\",name:\"NumberOfRotations\",vm:\"1\",version:\"DICOM\"},\"(0054,0052)\":{tag:\"(0054,0052)\",vr:\"SQ\",name:\"RotationInformationSequence\",vm:\"1\",version:\"DICOM\"},\"(0054,0053)\":{tag:\"(0054,0053)\",vr:\"US\",name:\"NumberOfFramesInRotation\",vm:\"1\",version:\"DICOM\"},\"(0054,0060)\":{tag:\"(0054,0060)\",vr:\"US\",name:\"RRIntervalVector\",vm:\"1-n\",version:\"DICOM\"},\"(0054,0061)\":{tag:\"(0054,0061)\",vr:\"US\",name:\"NumberOfRRIntervals\",vm:\"1\",version:\"DICOM\"},\"(0054,0062)\":{tag:\"(0054,0062)\",vr:\"SQ\",name:\"GatedInformationSequence\",vm:\"1\",version:\"DICOM\"},\"(0054,0063)\":{tag:\"(0054,0063)\",vr:\"SQ\",name:\"DataInformationSequence\",vm:\"1\",version:\"DICOM\"},\"(0054,0070)\":{tag:\"(0054,0070)\",vr:\"US\",name:\"TimeSlotVector\",vm:\"1-n\",version:\"DICOM\"},\"(0054,0071)\":{tag:\"(0054,0071)\",vr:\"US\",name:\"NumberOfTimeSlots\",vm:\"1\",version:\"DICOM\"},\"(0054,0072)\":{tag:\"(0054,0072)\",vr:\"SQ\",name:\"TimeSlotInformationSequence\",vm:\"1\",version:\"DICOM\"},\"(0054,0073)\":{tag:\"(0054,0073)\",vr:\"DS\",name:\"TimeSlotTime\",vm:\"1\",version:\"DICOM\"},\"(0054,0080)\":{tag:\"(0054,0080)\",vr:\"US\",name:\"SliceVector\",vm:\"1-n\",version:\"DICOM\"},\"(0054,0081)\":{tag:\"(0054,0081)\",vr:\"US\",name:\"NumberOfSlices\",vm:\"1\",version:\"DICOM\"},\"(0054,0090)\":{tag:\"(0054,0090)\",vr:\"US\",name:\"AngularViewVector\",vm:\"1-n\",version:\"DICOM\"},\"(0054,0100)\":{tag:\"(0054,0100)\",vr:\"US\",name:\"TimeSliceVector\",vm:\"1-n\",version:\"DICOM\"},\"(0054,0101)\":{tag:\"(0054,0101)\",vr:\"US\",name:\"NumberOfTimeSlices\",vm:\"1\",version:\"DICOM\"},\"(0054,0200)\":{tag:\"(0054,0200)\",vr:\"DS\",name:\"StartAngle\",vm:\"1\",version:\"DICOM\"},\"(0054,0202)\":{tag:\"(0054,0202)\",vr:\"CS\",name:\"TypeOfDetectorMotion\",vm:\"1\",version:\"DICOM\"},\"(0054,0210)\":{tag:\"(0054,0210)\",vr:\"IS\",name:\"TriggerVector\",vm:\"1-n\",version:\"DICOM\"},\"(0054,0211)\":{tag:\"(0054,0211)\",vr:\"US\",name:\"NumberOfTriggersInPhase\",vm:\"1\",version:\"DICOM\"},\"(0054,0220)\":{tag:\"(0054,0220)\",vr:\"SQ\",name:\"ViewCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0054,0222)\":{tag:\"(0054,0222)\",vr:\"SQ\",name:\"ViewModifierCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0054,0300)\":{tag:\"(0054,0300)\",vr:\"SQ\",name:\"RadionuclideCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0054,0302)\":{tag:\"(0054,0302)\",vr:\"SQ\",name:\"AdministrationRouteCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0054,0304)\":{tag:\"(0054,0304)\",vr:\"SQ\",name:\"RadiopharmaceuticalCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0054,0306)\":{tag:\"(0054,0306)\",vr:\"SQ\",name:\"CalibrationDataSequence\",vm:\"1\",version:\"DICOM\"},\"(0054,0308)\":{tag:\"(0054,0308)\",vr:\"US\",name:\"EnergyWindowNumber\",vm:\"1\",version:\"DICOM\"},\"(0054,0400)\":{tag:\"(0054,0400)\",vr:\"SH\",name:\"ImageID\",vm:\"1\",version:\"DICOM\"},\"(0054,0410)\":{tag:\"(0054,0410)\",vr:\"SQ\",name:\"PatientOrientationCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0054,0412)\":{tag:\"(0054,0412)\",vr:\"SQ\",name:\"PatientOrientationModifierCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0054,0414)\":{tag:\"(0054,0414)\",vr:\"SQ\",name:\"PatientGantryRelationshipCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0054,0500)\":{tag:\"(0054,0500)\",vr:\"CS\",name:\"SliceProgressionDirection\",vm:\"1\",version:\"DICOM\"},\"(0054,0501)\":{tag:\"(0054,0501)\",vr:\"CS\",name:\"ScanProgressionDirection\",vm:\"1\",version:\"DICOM\"},\"(0054,1000)\":{tag:\"(0054,1000)\",vr:\"CS\",name:\"SeriesType\",vm:\"2\",version:\"DICOM\"},\"(0054,1001)\":{tag:\"(0054,1001)\",vr:\"CS\",name:\"Units\",vm:\"1\",version:\"DICOM\"},\"(0054,1002)\":{tag:\"(0054,1002)\",vr:\"CS\",name:\"CountsSource\",vm:\"1\",version:\"DICOM\"},\"(0054,1004)\":{tag:\"(0054,1004)\",vr:\"CS\",name:\"ReprojectionMethod\",vm:\"1\",version:\"DICOM\"},\"(0054,1006)\":{tag:\"(0054,1006)\",vr:\"CS\",name:\"SUVType\",vm:\"1\",version:\"DICOM\"},\"(0054,1100)\":{tag:\"(0054,1100)\",vr:\"CS\",name:\"RandomsCorrectionMethod\",vm:\"1\",version:\"DICOM\"},\"(0054,1101)\":{tag:\"(0054,1101)\",vr:\"LO\",name:\"AttenuationCorrectionMethod\",vm:\"1\",version:\"DICOM\"},\"(0054,1102)\":{tag:\"(0054,1102)\",vr:\"CS\",name:\"DecayCorrection\",vm:\"1\",version:\"DICOM\"},\"(0054,1103)\":{tag:\"(0054,1103)\",vr:\"LO\",name:\"ReconstructionMethod\",vm:\"1\",version:\"DICOM\"},\"(0054,1104)\":{tag:\"(0054,1104)\",vr:\"LO\",name:\"DetectorLinesOfResponseUsed\",vm:\"1\",version:\"DICOM\"},\"(0054,1105)\":{tag:\"(0054,1105)\",vr:\"LO\",name:\"ScatterCorrectionMethod\",vm:\"1\",version:\"DICOM\"},\"(0054,1200)\":{tag:\"(0054,1200)\",vr:\"DS\",name:\"AxialAcceptance\",vm:\"1\",version:\"DICOM\"},\"(0054,1201)\":{tag:\"(0054,1201)\",vr:\"IS\",name:\"AxialMash\",vm:\"2\",version:\"DICOM\"},\"(0054,1202)\":{tag:\"(0054,1202)\",vr:\"IS\",name:\"TransverseMash\",vm:\"1\",version:\"DICOM\"},\"(0054,1203)\":{tag:\"(0054,1203)\",vr:\"DS\",name:\"DetectorElementSize\",vm:\"2\",version:\"DICOM\"},\"(0054,1210)\":{tag:\"(0054,1210)\",vr:\"DS\",name:\"CoincidenceWindowWidth\",vm:\"1\",version:\"DICOM\"},\"(0054,1220)\":{tag:\"(0054,1220)\",vr:\"CS\",name:\"SecondaryCountsType\",vm:\"1-n\",version:\"DICOM\"},\"(0054,1300)\":{tag:\"(0054,1300)\",vr:\"DS\",name:\"FrameReferenceTime\",vm:\"1\",version:\"DICOM\"},\"(0054,1310)\":{tag:\"(0054,1310)\",vr:\"IS\",name:\"PrimaryPromptsCountsAccumulated\",vm:\"1\",version:\"DICOM\"},\"(0054,1311)\":{tag:\"(0054,1311)\",vr:\"IS\",name:\"SecondaryCountsAccumulated\",vm:\"1-n\",version:\"DICOM\"},\"(0054,1320)\":{tag:\"(0054,1320)\",vr:\"DS\",name:\"SliceSensitivityFactor\",vm:\"1\",version:\"DICOM\"},\"(0054,1321)\":{tag:\"(0054,1321)\",vr:\"DS\",name:\"DecayFactor\",vm:\"1\",version:\"DICOM\"},\"(0054,1322)\":{tag:\"(0054,1322)\",vr:\"DS\",name:\"DoseCalibrationFactor\",vm:\"1\",version:\"DICOM\"},\"(0054,1323)\":{tag:\"(0054,1323)\",vr:\"DS\",name:\"ScatterFractionFactor\",vm:\"1\",version:\"DICOM\"},\"(0054,1324)\":{tag:\"(0054,1324)\",vr:\"DS\",name:\"DeadTimeFactor\",vm:\"1\",version:\"DICOM\"},\"(0054,1330)\":{tag:\"(0054,1330)\",vr:\"US\",name:\"ImageIndex\",vm:\"1\",version:\"DICOM\"},\"(0060,3000)\":{tag:\"(0060,3000)\",vr:\"SQ\",name:\"HistogramSequence\",vm:\"1\",version:\"DICOM\"},\"(0060,3002)\":{tag:\"(0060,3002)\",vr:\"US\",name:\"HistogramNumberOfBins\",vm:\"1\",version:\"DICOM\"},\"(0060,3004)\":{tag:\"(0060,3004)\",vr:\"xs\",name:\"HistogramFirstBinValue\",vm:\"1\",version:\"DICOM\"},\"(0060,3006)\":{tag:\"(0060,3006)\",vr:\"xs\",name:\"HistogramLastBinValue\",vm:\"1\",version:\"DICOM\"},\"(0060,3008)\":{tag:\"(0060,3008)\",vr:\"US\",name:\"HistogramBinWidth\",vm:\"1\",version:\"DICOM\"},\"(0060,3010)\":{tag:\"(0060,3010)\",vr:\"LO\",name:\"HistogramExplanation\",vm:\"1\",version:\"DICOM\"},\"(0060,3020)\":{tag:\"(0060,3020)\",vr:\"UL\",name:\"HistogramData\",vm:\"1-n\",version:\"DICOM\"},\"(0062,0001)\":{tag:\"(0062,0001)\",vr:\"CS\",name:\"SegmentationType\",vm:\"1\",version:\"DICOM\"},\"(0062,0002)\":{tag:\"(0062,0002)\",vr:\"SQ\",name:\"SegmentSequence\",vm:\"1\",version:\"DICOM\"},\"(0062,0003)\":{tag:\"(0062,0003)\",vr:\"SQ\",name:\"SegmentedPropertyCategoryCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0062,0004)\":{tag:\"(0062,0004)\",vr:\"US\",name:\"SegmentNumber\",vm:\"1\",version:\"DICOM\"},\"(0062,0005)\":{tag:\"(0062,0005)\",vr:\"LO\",name:\"SegmentLabel\",vm:\"1\",version:\"DICOM\"},\"(0062,0006)\":{tag:\"(0062,0006)\",vr:\"ST\",name:\"SegmentDescription\",vm:\"1\",version:\"DICOM\"},\"(0062,0007)\":{tag:\"(0062,0007)\",vr:\"SQ\",name:\"SegmentationAlgorithmIdentificationSequence\",vm:\"1\",version:\"DICOM\"},\"(0062,0008)\":{tag:\"(0062,0008)\",vr:\"CS\",name:\"SegmentAlgorithmType\",vm:\"1\",version:\"DICOM\"},\"(0062,0009)\":{tag:\"(0062,0009)\",vr:\"LO\",name:\"SegmentAlgorithmName\",vm:\"1\",version:\"DICOM\"},\"(0062,000A)\":{tag:\"(0062,000A)\",vr:\"SQ\",name:\"SegmentIdentificationSequence\",vm:\"1\",version:\"DICOM\"},\"(0062,000B)\":{tag:\"(0062,000B)\",vr:\"US\",name:\"ReferencedSegmentNumber\",vm:\"1-n\",version:\"DICOM\"},\"(0062,000C)\":{tag:\"(0062,000C)\",vr:\"US\",name:\"RecommendedDisplayGrayscaleValue\",vm:\"1\",version:\"DICOM\"},\"(0062,000D)\":{tag:\"(0062,000D)\",vr:\"US\",name:\"RecommendedDisplayCIELabValue\",vm:\"3\",version:\"DICOM\"},\"(0062,000E)\":{tag:\"(0062,000E)\",vr:\"US\",name:\"MaximumFractionalValue\",vm:\"1\",version:\"DICOM\"},\"(0062,000F)\":{tag:\"(0062,000F)\",vr:\"SQ\",name:\"SegmentedPropertyTypeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0062,0010)\":{tag:\"(0062,0010)\",vr:\"CS\",name:\"SegmentationFractionalType\",vm:\"1\",version:\"DICOM\"},\"(0062,0011)\":{tag:\"(0062,0011)\",vr:\"SQ\",name:\"SegmentedPropertyTypeModifierCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0062,0012)\":{tag:\"(0062,0012)\",vr:\"SQ\",name:\"UsedSegmentsSequence\",vm:\"1\",version:\"DICOM\"},\"(0062,0013)\":{tag:\"(0062,0013)\",vr:\"CS\",name:\"SegmentsOverlap\",vm:\"1\",version:\"DICOM\"},\"(0062,0020)\":{tag:\"(0062,0020)\",vr:\"UT\",name:\"TrackingID\",vm:\"1\",version:\"DICOM\"},\"(0062,0021)\":{tag:\"(0062,0021)\",vr:\"UI\",name:\"TrackingUID\",vm:\"1\",version:\"DICOM\"},\"(0064,0002)\":{tag:\"(0064,0002)\",vr:\"SQ\",name:\"DeformableRegistrationSequence\",vm:\"1\",version:\"DICOM\"},\"(0064,0003)\":{tag:\"(0064,0003)\",vr:\"UI\",name:\"SourceFrameOfReferenceUID\",vm:\"1\",version:\"DICOM\"},\"(0064,0005)\":{tag:\"(0064,0005)\",vr:\"SQ\",name:\"DeformableRegistrationGridSequence\",vm:\"1\",version:\"DICOM\"},\"(0064,0007)\":{tag:\"(0064,0007)\",vr:\"UL\",name:\"GridDimensions\",vm:\"3\",version:\"DICOM\"},\"(0064,0008)\":{tag:\"(0064,0008)\",vr:\"FD\",name:\"GridResolution\",vm:\"3\",version:\"DICOM\"},\"(0064,0009)\":{tag:\"(0064,0009)\",vr:\"OF\",name:\"VectorGridData\",vm:\"1\",version:\"DICOM\"},\"(0064,000F)\":{tag:\"(0064,000F)\",vr:\"SQ\",name:\"PreDeformationMatrixRegistrationSequence\",vm:\"1\",version:\"DICOM\"},\"(0064,0010)\":{tag:\"(0064,0010)\",vr:\"SQ\",name:\"PostDeformationMatrixRegistrationSequence\",vm:\"1\",version:\"DICOM\"},\"(0066,0001)\":{tag:\"(0066,0001)\",vr:\"UL\",name:\"NumberOfSurfaces\",vm:\"1\",version:\"DICOM\"},\"(0066,0002)\":{tag:\"(0066,0002)\",vr:\"SQ\",name:\"SurfaceSequence\",vm:\"1\",version:\"DICOM\"},\"(0066,0003)\":{tag:\"(0066,0003)\",vr:\"UL\",name:\"SurfaceNumber\",vm:\"1\",version:\"DICOM\"},\"(0066,0004)\":{tag:\"(0066,0004)\",vr:\"LT\",name:\"SurfaceComments\",vm:\"1\",version:\"DICOM\"},\"(0066,0009)\":{tag:\"(0066,0009)\",vr:\"CS\",name:\"SurfaceProcessing\",vm:\"1\",version:\"DICOM\"},\"(0066,000A)\":{tag:\"(0066,000A)\",vr:\"FL\",name:\"SurfaceProcessingRatio\",vm:\"1\",version:\"DICOM\"},\"(0066,000B)\":{tag:\"(0066,000B)\",vr:\"LO\",name:\"SurfaceProcessingDescription\",vm:\"1\",version:\"DICOM\"},\"(0066,000C)\":{tag:\"(0066,000C)\",vr:\"FL\",name:\"RecommendedPresentationOpacity\",vm:\"1\",version:\"DICOM\"},\"(0066,000D)\":{tag:\"(0066,000D)\",vr:\"CS\",name:\"RecommendedPresentationType\",vm:\"1\",version:\"DICOM\"},\"(0066,000E)\":{tag:\"(0066,000E)\",vr:\"CS\",name:\"FiniteVolume\",vm:\"1\",version:\"DICOM\"},\"(0066,0010)\":{tag:\"(0066,0010)\",vr:\"CS\",name:\"Manifold\",vm:\"1\",version:\"DICOM\"},\"(0066,0011)\":{tag:\"(0066,0011)\",vr:\"SQ\",name:\"SurfacePointsSequence\",vm:\"1\",version:\"DICOM\"},\"(0066,0012)\":{tag:\"(0066,0012)\",vr:\"SQ\",name:\"SurfacePointsNormalsSequence\",vm:\"1\",version:\"DICOM\"},\"(0066,0013)\":{tag:\"(0066,0013)\",vr:\"SQ\",name:\"SurfaceMeshPrimitivesSequence\",vm:\"1\",version:\"DICOM\"},\"(0066,0015)\":{tag:\"(0066,0015)\",vr:\"UL\",name:\"NumberOfSurfacePoints\",vm:\"1\",version:\"DICOM\"},\"(0066,0016)\":{tag:\"(0066,0016)\",vr:\"OF\",name:\"PointCoordinatesData\",vm:\"1\",version:\"DICOM\"},\"(0066,0017)\":{tag:\"(0066,0017)\",vr:\"FL\",name:\"PointPositionAccuracy\",vm:\"3\",version:\"DICOM\"},\"(0066,0018)\":{tag:\"(0066,0018)\",vr:\"FL\",name:\"MeanPointDistance\",vm:\"1\",version:\"DICOM\"},\"(0066,0019)\":{tag:\"(0066,0019)\",vr:\"FL\",name:\"MaximumPointDistance\",vm:\"1\",version:\"DICOM\"},\"(0066,001A)\":{tag:\"(0066,001A)\",vr:\"FL\",name:\"PointsBoundingBoxCoordinates\",vm:\"6\",version:\"DICOM\"},\"(0066,001B)\":{tag:\"(0066,001B)\",vr:\"FL\",name:\"AxisOfRotation\",vm:\"3\",version:\"DICOM\"},\"(0066,001C)\":{tag:\"(0066,001C)\",vr:\"FL\",name:\"CenterOfRotation\",vm:\"3\",version:\"DICOM\"},\"(0066,001E)\":{tag:\"(0066,001E)\",vr:\"UL\",name:\"NumberOfVectors\",vm:\"1\",version:\"DICOM\"},\"(0066,001F)\":{tag:\"(0066,001F)\",vr:\"US\",name:\"VectorDimensionality\",vm:\"1\",version:\"DICOM\"},\"(0066,0020)\":{tag:\"(0066,0020)\",vr:\"FL\",name:\"VectorAccuracy\",vm:\"1-n\",version:\"DICOM\"},\"(0066,0021)\":{tag:\"(0066,0021)\",vr:\"OF\",name:\"VectorCoordinateData\",vm:\"1\",version:\"DICOM\"},\"(0066,0023)\":{tag:\"(0066,0023)\",vr:\"OW\",name:\"TrianglePointIndexList\",vm:\"1\",version:\"DICOM\"},\"(0066,0024)\":{tag:\"(0066,0024)\",vr:\"OW\",name:\"EdgePointIndexList\",vm:\"1\",version:\"DICOM\"},\"(0066,0025)\":{tag:\"(0066,0025)\",vr:\"OW\",name:\"VertexPointIndexList\",vm:\"1\",version:\"DICOM\"},\"(0066,0026)\":{tag:\"(0066,0026)\",vr:\"SQ\",name:\"TriangleStripSequence\",vm:\"1\",version:\"DICOM\"},\"(0066,0027)\":{tag:\"(0066,0027)\",vr:\"SQ\",name:\"TriangleFanSequence\",vm:\"1\",version:\"DICOM\"},\"(0066,0028)\":{tag:\"(0066,0028)\",vr:\"SQ\",name:\"LineSequence\",vm:\"1\",version:\"DICOM\"},\"(0066,0029)\":{tag:\"(0066,0029)\",vr:\"OW\",name:\"PrimitivePointIndexList\",vm:\"1\",version:\"DICOM\"},\"(0066,002A)\":{tag:\"(0066,002A)\",vr:\"UL\",name:\"SurfaceCount\",vm:\"1\",version:\"DICOM\"},\"(0066,002B)\":{tag:\"(0066,002B)\",vr:\"SQ\",name:\"ReferencedSurfaceSequence\",vm:\"1\",version:\"DICOM\"},\"(0066,002C)\":{tag:\"(0066,002C)\",vr:\"UL\",name:\"ReferencedSurfaceNumber\",vm:\"1\",version:\"DICOM\"},\"(0066,002D)\":{tag:\"(0066,002D)\",vr:\"SQ\",name:\"SegmentSurfaceGenerationAlgorithmIdentificationSequence\",vm:\"1\",version:\"DICOM\"},\"(0066,002E)\":{tag:\"(0066,002E)\",vr:\"SQ\",name:\"SegmentSurfaceSourceInstanceSequence\",vm:\"1\",version:\"DICOM\"},\"(0066,002F)\":{tag:\"(0066,002F)\",vr:\"SQ\",name:\"AlgorithmFamilyCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0066,0030)\":{tag:\"(0066,0030)\",vr:\"SQ\",name:\"AlgorithmNameCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0066,0031)\":{tag:\"(0066,0031)\",vr:\"LO\",name:\"AlgorithmVersion\",vm:\"1\",version:\"DICOM\"},\"(0066,0032)\":{tag:\"(0066,0032)\",vr:\"LT\",name:\"AlgorithmParameters\",vm:\"1\",version:\"DICOM\"},\"(0066,0034)\":{tag:\"(0066,0034)\",vr:\"SQ\",name:\"FacetSequence\",vm:\"1\",version:\"DICOM\"},\"(0066,0035)\":{tag:\"(0066,0035)\",vr:\"SQ\",name:\"SurfaceProcessingAlgorithmIdentificationSequence\",vm:\"1\",version:\"DICOM\"},\"(0066,0036)\":{tag:\"(0066,0036)\",vr:\"LO\",name:\"AlgorithmName\",vm:\"1\",version:\"DICOM\"},\"(0066,0037)\":{tag:\"(0066,0037)\",vr:\"FL\",name:\"RecommendedPointRadius\",vm:\"1\",version:\"DICOM\"},\"(0066,0038)\":{tag:\"(0066,0038)\",vr:\"FL\",name:\"RecommendedLineThickness\",vm:\"1\",version:\"DICOM\"},\"(0066,0040)\":{tag:\"(0066,0040)\",vr:\"UL\",name:\"LongPrimitivePointIndexList\",vm:\"1-n\",version:\"DICOM\"},\"(0066,0041)\":{tag:\"(0066,0041)\",vr:\"UL\",name:\"LongTrianglePointIndexList\",vm:\"3-3n\",version:\"DICOM\"},\"(0066,0042)\":{tag:\"(0066,0042)\",vr:\"UL\",name:\"LongEdgePointIndexList\",vm:\"2-2n\",version:\"DICOM\"},\"(0066,0043)\":{tag:\"(0066,0043)\",vr:\"UL\",name:\"LongVertexPointIndexList\",vm:\"1-n\",version:\"DICOM\"},\"(0066,0101)\":{tag:\"(0066,0101)\",vr:\"SQ\",name:\"TrackSetSequence\",vm:\"1\",version:\"DICOM\"},\"(0066,0102)\":{tag:\"(0066,0102)\",vr:\"SQ\",name:\"TrackSequence\",vm:\"1\",version:\"DICOM\"},\"(0066,0103)\":{tag:\"(0066,0103)\",vr:\"OW\",name:\"RecommendedDisplayCIELabValueList\",vm:\"1\",version:\"DICOM\"},\"(0066,0104)\":{tag:\"(0066,0104)\",vr:\"SQ\",name:\"TrackingAlgorithmIdentificationSequence\",vm:\"1\",version:\"DICOM\"},\"(0066,0105)\":{tag:\"(0066,0105)\",vr:\"UL\",name:\"TrackSetNumber\",vm:\"1\",version:\"DICOM\"},\"(0066,0106)\":{tag:\"(0066,0106)\",vr:\"LO\",name:\"TrackSetLabel\",vm:\"1\",version:\"DICOM\"},\"(0066,0107)\":{tag:\"(0066,0107)\",vr:\"UT\",name:\"TrackSetDescription\",vm:\"1\",version:\"DICOM\"},\"(0066,0108)\":{tag:\"(0066,0108)\",vr:\"SQ\",name:\"TrackSetAnatomicalTypeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0066,0121)\":{tag:\"(0066,0121)\",vr:\"SQ\",name:\"MeasurementsSequence\",vm:\"1\",version:\"DICOM\"},\"(0066,0124)\":{tag:\"(0066,0124)\",vr:\"SQ\",name:\"TrackSetStatisticsSequence\",vm:\"1\",version:\"DICOM\"},\"(0066,0125)\":{tag:\"(0066,0125)\",vr:\"OF\",name:\"FloatingPointValues\",vm:\"1\",version:\"DICOM\"},\"(0066,0129)\":{tag:\"(0066,0129)\",vr:\"OL\",name:\"TrackPointIndexList\",vm:\"1\",version:\"DICOM\"},\"(0066,0130)\":{tag:\"(0066,0130)\",vr:\"SQ\",name:\"TrackStatisticsSequence\",vm:\"1\",version:\"DICOM\"},\"(0066,0132)\":{tag:\"(0066,0132)\",vr:\"SQ\",name:\"MeasurementValuesSequence\",vm:\"1\",version:\"DICOM\"},\"(0066,0133)\":{tag:\"(0066,0133)\",vr:\"SQ\",name:\"DiffusionAcquisitionCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0066,0134)\":{tag:\"(0066,0134)\",vr:\"SQ\",name:\"DiffusionModelCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0068,6210)\":{tag:\"(0068,6210)\",vr:\"LO\",name:\"ImplantSize\",vm:\"1\",version:\"DICOM\"},\"(0068,6221)\":{tag:\"(0068,6221)\",vr:\"LO\",name:\"ImplantTemplateVersion\",vm:\"1\",version:\"DICOM\"},\"(0068,6222)\":{tag:\"(0068,6222)\",vr:\"SQ\",name:\"ReplacedImplantTemplateSequence\",vm:\"1\",version:\"DICOM\"},\"(0068,6223)\":{tag:\"(0068,6223)\",vr:\"CS\",name:\"ImplantType\",vm:\"1\",version:\"DICOM\"},\"(0068,6224)\":{tag:\"(0068,6224)\",vr:\"SQ\",name:\"DerivationImplantTemplateSequence\",vm:\"1\",version:\"DICOM\"},\"(0068,6225)\":{tag:\"(0068,6225)\",vr:\"SQ\",name:\"OriginalImplantTemplateSequence\",vm:\"1\",version:\"DICOM\"},\"(0068,6226)\":{tag:\"(0068,6226)\",vr:\"DT\",name:\"EffectiveDateTime\",vm:\"1\",version:\"DICOM\"},\"(0068,6230)\":{tag:\"(0068,6230)\",vr:\"SQ\",name:\"ImplantTargetAnatomySequence\",vm:\"1\",version:\"DICOM\"},\"(0068,6260)\":{tag:\"(0068,6260)\",vr:\"SQ\",name:\"InformationFromManufacturerSequence\",vm:\"1\",version:\"DICOM\"},\"(0068,6265)\":{tag:\"(0068,6265)\",vr:\"SQ\",name:\"NotificationFromManufacturerSequence\",vm:\"1\",version:\"DICOM\"},\"(0068,6270)\":{tag:\"(0068,6270)\",vr:\"DT\",name:\"InformationIssueDateTime\",vm:\"1\",version:\"DICOM\"},\"(0068,6280)\":{tag:\"(0068,6280)\",vr:\"ST\",name:\"InformationSummary\",vm:\"1\",version:\"DICOM\"},\"(0068,62A0)\":{tag:\"(0068,62A0)\",vr:\"SQ\",name:\"ImplantRegulatoryDisapprovalCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0068,62A5)\":{tag:\"(0068,62A5)\",vr:\"FD\",name:\"OverallTemplateSpatialTolerance\",vm:\"1\",version:\"DICOM\"},\"(0068,62C0)\":{tag:\"(0068,62C0)\",vr:\"SQ\",name:\"HPGLDocumentSequence\",vm:\"1\",version:\"DICOM\"},\"(0068,62D0)\":{tag:\"(0068,62D0)\",vr:\"US\",name:\"HPGLDocumentID\",vm:\"1\",version:\"DICOM\"},\"(0068,62D5)\":{tag:\"(0068,62D5)\",vr:\"LO\",name:\"HPGLDocumentLabel\",vm:\"1\",version:\"DICOM\"},\"(0068,62E0)\":{tag:\"(0068,62E0)\",vr:\"SQ\",name:\"ViewOrientationCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0068,62F0)\":{tag:\"(0068,62F0)\",vr:\"FD\",name:\"ViewOrientationModifier\",vm:\"9\",version:\"DICOM\"},\"(0068,62F2)\":{tag:\"(0068,62F2)\",vr:\"FD\",name:\"HPGLDocumentScaling\",vm:\"1\",version:\"DICOM\"},\"(0068,6300)\":{tag:\"(0068,6300)\",vr:\"OB\",name:\"HPGLDocument\",vm:\"1\",version:\"DICOM\"},\"(0068,6310)\":{tag:\"(0068,6310)\",vr:\"US\",name:\"HPGLContourPenNumber\",vm:\"1\",version:\"DICOM\"},\"(0068,6320)\":{tag:\"(0068,6320)\",vr:\"SQ\",name:\"HPGLPenSequence\",vm:\"1\",version:\"DICOM\"},\"(0068,6330)\":{tag:\"(0068,6330)\",vr:\"US\",name:\"HPGLPenNumber\",vm:\"1\",version:\"DICOM\"},\"(0068,6340)\":{tag:\"(0068,6340)\",vr:\"LO\",name:\"HPGLPenLabel\",vm:\"1\",version:\"DICOM\"},\"(0068,6345)\":{tag:\"(0068,6345)\",vr:\"ST\",name:\"HPGLPenDescription\",vm:\"1\",version:\"DICOM\"},\"(0068,6346)\":{tag:\"(0068,6346)\",vr:\"FD\",name:\"RecommendedRotationPoint\",vm:\"2\",version:\"DICOM\"},\"(0068,6347)\":{tag:\"(0068,6347)\",vr:\"FD\",name:\"BoundingRectangle\",vm:\"4\",version:\"DICOM\"},\"(0068,6350)\":{tag:\"(0068,6350)\",vr:\"US\",name:\"ImplantTemplate3DModelSurfaceNumber\",vm:\"1-n\",version:\"DICOM\"},\"(0068,6360)\":{tag:\"(0068,6360)\",vr:\"SQ\",name:\"SurfaceModelDescriptionSequence\",vm:\"1\",version:\"DICOM\"},\"(0068,6380)\":{tag:\"(0068,6380)\",vr:\"LO\",name:\"SurfaceModelLabel\",vm:\"1\",version:\"DICOM\"},\"(0068,6390)\":{tag:\"(0068,6390)\",vr:\"FD\",name:\"SurfaceModelScalingFactor\",vm:\"1\",version:\"DICOM\"},\"(0068,63A0)\":{tag:\"(0068,63A0)\",vr:\"SQ\",name:\"MaterialsCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0068,63A4)\":{tag:\"(0068,63A4)\",vr:\"SQ\",name:\"CoatingMaterialsCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0068,63A8)\":{tag:\"(0068,63A8)\",vr:\"SQ\",name:\"ImplantTypeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0068,63AC)\":{tag:\"(0068,63AC)\",vr:\"SQ\",name:\"FixationMethodCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0068,63B0)\":{tag:\"(0068,63B0)\",vr:\"SQ\",name:\"MatingFeatureSetsSequence\",vm:\"1\",version:\"DICOM\"},\"(0068,63C0)\":{tag:\"(0068,63C0)\",vr:\"US\",name:\"MatingFeatureSetID\",vm:\"1\",version:\"DICOM\"},\"(0068,63D0)\":{tag:\"(0068,63D0)\",vr:\"LO\",name:\"MatingFeatureSetLabel\",vm:\"1\",version:\"DICOM\"},\"(0068,63E0)\":{tag:\"(0068,63E0)\",vr:\"SQ\",name:\"MatingFeatureSequence\",vm:\"1\",version:\"DICOM\"},\"(0068,63F0)\":{tag:\"(0068,63F0)\",vr:\"US\",name:\"MatingFeatureID\",vm:\"1\",version:\"DICOM\"},\"(0068,6400)\":{tag:\"(0068,6400)\",vr:\"SQ\",name:\"MatingFeatureDegreeOfFreedomSequence\",vm:\"1\",version:\"DICOM\"},\"(0068,6410)\":{tag:\"(0068,6410)\",vr:\"US\",name:\"DegreeOfFreedomID\",vm:\"1\",version:\"DICOM\"},\"(0068,6420)\":{tag:\"(0068,6420)\",vr:\"CS\",name:\"DegreeOfFreedomType\",vm:\"1\",version:\"DICOM\"},\"(0068,6430)\":{tag:\"(0068,6430)\",vr:\"SQ\",name:\"TwoDMatingFeatureCoordinatesSequence\",vm:\"1\",version:\"DICOM\"},\"(0068,6440)\":{tag:\"(0068,6440)\",vr:\"US\",name:\"ReferencedHPGLDocumentID\",vm:\"1\",version:\"DICOM\"},\"(0068,6450)\":{tag:\"(0068,6450)\",vr:\"FD\",name:\"TwoDMatingPoint\",vm:\"2\",version:\"DICOM\"},\"(0068,6460)\":{tag:\"(0068,6460)\",vr:\"FD\",name:\"TwoDMatingAxes\",vm:\"4\",version:\"DICOM\"},\"(0068,6470)\":{tag:\"(0068,6470)\",vr:\"SQ\",name:\"TwoDDegreeOfFreedomSequence\",vm:\"1\",version:\"DICOM\"},\"(0068,6490)\":{tag:\"(0068,6490)\",vr:\"FD\",name:\"ThreeDDegreeOfFreedomAxis\",vm:\"3\",version:\"DICOM\"},\"(0068,64A0)\":{tag:\"(0068,64A0)\",vr:\"FD\",name:\"RangeOfFreedom\",vm:\"2\",version:\"DICOM\"},\"(0068,64C0)\":{tag:\"(0068,64C0)\",vr:\"FD\",name:\"ThreeDMatingPoint\",vm:\"3\",version:\"DICOM\"},\"(0068,64D0)\":{tag:\"(0068,64D0)\",vr:\"FD\",name:\"ThreeDMatingAxes\",vm:\"9\",version:\"DICOM\"},\"(0068,64F0)\":{tag:\"(0068,64F0)\",vr:\"FD\",name:\"TwoDDegreeOfFreedomAxis\",vm:\"3\",version:\"DICOM\"},\"(0068,6500)\":{tag:\"(0068,6500)\",vr:\"SQ\",name:\"PlanningLandmarkPointSequence\",vm:\"1\",version:\"DICOM\"},\"(0068,6510)\":{tag:\"(0068,6510)\",vr:\"SQ\",name:\"PlanningLandmarkLineSequence\",vm:\"1\",version:\"DICOM\"},\"(0068,6520)\":{tag:\"(0068,6520)\",vr:\"SQ\",name:\"PlanningLandmarkPlaneSequence\",vm:\"1\",version:\"DICOM\"},\"(0068,6530)\":{tag:\"(0068,6530)\",vr:\"US\",name:\"PlanningLandmarkID\",vm:\"1\",version:\"DICOM\"},\"(0068,6540)\":{tag:\"(0068,6540)\",vr:\"LO\",name:\"PlanningLandmarkDescription\",vm:\"1\",version:\"DICOM\"},\"(0068,6545)\":{tag:\"(0068,6545)\",vr:\"SQ\",name:\"PlanningLandmarkIdentificationCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0068,6550)\":{tag:\"(0068,6550)\",vr:\"SQ\",name:\"TwoDPointCoordinatesSequence\",vm:\"1\",version:\"DICOM\"},\"(0068,6560)\":{tag:\"(0068,6560)\",vr:\"FD\",name:\"TwoDPointCoordinates\",vm:\"2\",version:\"DICOM\"},\"(0068,6590)\":{tag:\"(0068,6590)\",vr:\"FD\",name:\"ThreeDPointCoordinates\",vm:\"3\",version:\"DICOM\"},\"(0068,65A0)\":{tag:\"(0068,65A0)\",vr:\"SQ\",name:\"TwoDLineCoordinatesSequence\",vm:\"1\",version:\"DICOM\"},\"(0068,65B0)\":{tag:\"(0068,65B0)\",vr:\"FD\",name:\"TwoDLineCoordinates\",vm:\"4\",version:\"DICOM\"},\"(0068,65D0)\":{tag:\"(0068,65D0)\",vr:\"FD\",name:\"ThreeDLineCoordinates\",vm:\"6\",version:\"DICOM\"},\"(0068,65E0)\":{tag:\"(0068,65E0)\",vr:\"SQ\",name:\"TwoDPlaneCoordinatesSequence\",vm:\"1\",version:\"DICOM\"},\"(0068,65F0)\":{tag:\"(0068,65F0)\",vr:\"FD\",name:\"TwoDPlaneIntersection\",vm:\"4\",version:\"DICOM\"},\"(0068,6610)\":{tag:\"(0068,6610)\",vr:\"FD\",name:\"ThreeDPlaneOrigin\",vm:\"3\",version:\"DICOM\"},\"(0068,6620)\":{tag:\"(0068,6620)\",vr:\"FD\",name:\"ThreeDPlaneNormal\",vm:\"3\",version:\"DICOM\"},\"(0068,7001)\":{tag:\"(0068,7001)\",vr:\"CS\",name:\"ModelModification\",vm:\"1\",version:\"DICOM\"},\"(0068,7002)\":{tag:\"(0068,7002)\",vr:\"CS\",name:\"ModelMirroring\",vm:\"1\",version:\"DICOM\"},\"(0068,7003)\":{tag:\"(0068,7003)\",vr:\"SQ\",name:\"ModelUsageCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0068,7004)\":{tag:\"(0068,7004)\",vr:\"UI\",name:\"ModelGroupUID\",vm:\"1\",version:\"DICOM\"},\"(0068,7005)\":{tag:\"(0068,7005)\",vr:\"UR\",name:\"RelativeURIReferenceWithinEncapsulatedDocument\",vm:\"1\",version:\"DICOM\"},\"(0070,0001)\":{tag:\"(0070,0001)\",vr:\"SQ\",name:\"GraphicAnnotationSequence\",vm:\"1\",version:\"DICOM\"},\"(0070,0002)\":{tag:\"(0070,0002)\",vr:\"CS\",name:\"GraphicLayer\",vm:\"1\",version:\"DICOM\"},\"(0070,0003)\":{tag:\"(0070,0003)\",vr:\"CS\",name:\"BoundingBoxAnnotationUnits\",vm:\"1\",version:\"DICOM\"},\"(0070,0004)\":{tag:\"(0070,0004)\",vr:\"CS\",name:\"AnchorPointAnnotationUnits\",vm:\"1\",version:\"DICOM\"},\"(0070,0005)\":{tag:\"(0070,0005)\",vr:\"CS\",name:\"GraphicAnnotationUnits\",vm:\"1\",version:\"DICOM\"},\"(0070,0006)\":{tag:\"(0070,0006)\",vr:\"ST\",name:\"UnformattedTextValue\",vm:\"1\",version:\"DICOM\"},\"(0070,0008)\":{tag:\"(0070,0008)\",vr:\"SQ\",name:\"TextObjectSequence\",vm:\"1\",version:\"DICOM\"},\"(0070,0009)\":{tag:\"(0070,0009)\",vr:\"SQ\",name:\"GraphicObjectSequence\",vm:\"1\",version:\"DICOM\"},\"(0070,0010)\":{tag:\"(0070,0010)\",vr:\"FL\",name:\"BoundingBoxTopLeftHandCorner\",vm:\"2\",version:\"DICOM\"},\"(0070,0011)\":{tag:\"(0070,0011)\",vr:\"FL\",name:\"BoundingBoxBottomRightHandCorner\",vm:\"2\",version:\"DICOM\"},\"(0070,0012)\":{tag:\"(0070,0012)\",vr:\"CS\",name:\"BoundingBoxTextHorizontalJustification\",vm:\"1\",version:\"DICOM\"},\"(0070,0014)\":{tag:\"(0070,0014)\",vr:\"FL\",name:\"AnchorPoint\",vm:\"2\",version:\"DICOM\"},\"(0070,0015)\":{tag:\"(0070,0015)\",vr:\"CS\",name:\"AnchorPointVisibility\",vm:\"1\",version:\"DICOM\"},\"(0070,0020)\":{tag:\"(0070,0020)\",vr:\"US\",name:\"GraphicDimensions\",vm:\"1\",version:\"DICOM\"},\"(0070,0021)\":{tag:\"(0070,0021)\",vr:\"US\",name:\"NumberOfGraphicPoints\",vm:\"1\",version:\"DICOM\"},\"(0070,0022)\":{tag:\"(0070,0022)\",vr:\"FL\",name:\"GraphicData\",vm:\"2-n\",version:\"DICOM\"},\"(0070,0023)\":{tag:\"(0070,0023)\",vr:\"CS\",name:\"GraphicType\",vm:\"1\",version:\"DICOM\"},\"(0070,0024)\":{tag:\"(0070,0024)\",vr:\"CS\",name:\"GraphicFilled\",vm:\"1\",version:\"DICOM\"},\"(0070,0041)\":{tag:\"(0070,0041)\",vr:\"CS\",name:\"ImageHorizontalFlip\",vm:\"1\",version:\"DICOM\"},\"(0070,0042)\":{tag:\"(0070,0042)\",vr:\"US\",name:\"ImageRotation\",vm:\"1\",version:\"DICOM\"},\"(0070,0052)\":{tag:\"(0070,0052)\",vr:\"SL\",name:\"DisplayedAreaTopLeftHandCorner\",vm:\"2\",version:\"DICOM\"},\"(0070,0053)\":{tag:\"(0070,0053)\",vr:\"SL\",name:\"DisplayedAreaBottomRightHandCorner\",vm:\"2\",version:\"DICOM\"},\"(0070,005A)\":{tag:\"(0070,005A)\",vr:\"SQ\",name:\"DisplayedAreaSelectionSequence\",vm:\"1\",version:\"DICOM\"},\"(0070,0060)\":{tag:\"(0070,0060)\",vr:\"SQ\",name:\"GraphicLayerSequence\",vm:\"1\",version:\"DICOM\"},\"(0070,0062)\":{tag:\"(0070,0062)\",vr:\"IS\",name:\"GraphicLayerOrder\",vm:\"1\",version:\"DICOM\"},\"(0070,0066)\":{tag:\"(0070,0066)\",vr:\"US\",name:\"GraphicLayerRecommendedDisplayGrayscaleValue\",vm:\"1\",version:\"DICOM\"},\"(0070,0068)\":{tag:\"(0070,0068)\",vr:\"LO\",name:\"GraphicLayerDescription\",vm:\"1\",version:\"DICOM\"},\"(0070,0080)\":{tag:\"(0070,0080)\",vr:\"CS\",name:\"ContentLabel\",vm:\"1\",version:\"DICOM\"},\"(0070,0081)\":{tag:\"(0070,0081)\",vr:\"LO\",name:\"ContentDescription\",vm:\"1\",version:\"DICOM\"},\"(0070,0082)\":{tag:\"(0070,0082)\",vr:\"DA\",name:\"PresentationCreationDate\",vm:\"1\",version:\"DICOM\"},\"(0070,0083)\":{tag:\"(0070,0083)\",vr:\"TM\",name:\"PresentationCreationTime\",vm:\"1\",version:\"DICOM\"},\"(0070,0084)\":{tag:\"(0070,0084)\",vr:\"PN\",name:\"ContentCreatorName\",vm:\"1\",version:\"DICOM\"},\"(0070,0086)\":{tag:\"(0070,0086)\",vr:\"SQ\",name:\"ContentCreatorIdentificationCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0070,0087)\":{tag:\"(0070,0087)\",vr:\"SQ\",name:\"AlternateContentDescriptionSequence\",vm:\"1\",version:\"DICOM\"},\"(0070,0100)\":{tag:\"(0070,0100)\",vr:\"CS\",name:\"PresentationSizeMode\",vm:\"1\",version:\"DICOM\"},\"(0070,0101)\":{tag:\"(0070,0101)\",vr:\"DS\",name:\"PresentationPixelSpacing\",vm:\"2\",version:\"DICOM\"},\"(0070,0102)\":{tag:\"(0070,0102)\",vr:\"IS\",name:\"PresentationPixelAspectRatio\",vm:\"2\",version:\"DICOM\"},\"(0070,0103)\":{tag:\"(0070,0103)\",vr:\"FL\",name:\"PresentationPixelMagnificationRatio\",vm:\"1\",version:\"DICOM\"},\"(0070,0207)\":{tag:\"(0070,0207)\",vr:\"LO\",name:\"GraphicGroupLabel\",vm:\"1\",version:\"DICOM\"},\"(0070,0208)\":{tag:\"(0070,0208)\",vr:\"ST\",name:\"GraphicGroupDescription\",vm:\"1\",version:\"DICOM\"},\"(0070,0209)\":{tag:\"(0070,0209)\",vr:\"SQ\",name:\"CompoundGraphicSequence\",vm:\"1\",version:\"DICOM\"},\"(0070,0226)\":{tag:\"(0070,0226)\",vr:\"UL\",name:\"CompoundGraphicInstanceID\",vm:\"1\",version:\"DICOM\"},\"(0070,0227)\":{tag:\"(0070,0227)\",vr:\"LO\",name:\"FontName\",vm:\"1\",version:\"DICOM\"},\"(0070,0228)\":{tag:\"(0070,0228)\",vr:\"CS\",name:\"FontNameType\",vm:\"1\",version:\"DICOM\"},\"(0070,0229)\":{tag:\"(0070,0229)\",vr:\"LO\",name:\"CSSFontName\",vm:\"1\",version:\"DICOM\"},\"(0070,0230)\":{tag:\"(0070,0230)\",vr:\"FD\",name:\"RotationAngle\",vm:\"1\",version:\"DICOM\"},\"(0070,0231)\":{tag:\"(0070,0231)\",vr:\"SQ\",name:\"TextStyleSequence\",vm:\"1\",version:\"DICOM\"},\"(0070,0232)\":{tag:\"(0070,0232)\",vr:\"SQ\",name:\"LineStyleSequence\",vm:\"1\",version:\"DICOM\"},\"(0070,0233)\":{tag:\"(0070,0233)\",vr:\"SQ\",name:\"FillStyleSequence\",vm:\"1\",version:\"DICOM\"},\"(0070,0234)\":{tag:\"(0070,0234)\",vr:\"SQ\",name:\"GraphicGroupSequence\",vm:\"1\",version:\"DICOM\"},\"(0070,0241)\":{tag:\"(0070,0241)\",vr:\"US\",name:\"TextColorCIELabValue\",vm:\"3\",version:\"DICOM\"},\"(0070,0242)\":{tag:\"(0070,0242)\",vr:\"CS\",name:\"HorizontalAlignment\",vm:\"1\",version:\"DICOM\"},\"(0070,0243)\":{tag:\"(0070,0243)\",vr:\"CS\",name:\"VerticalAlignment\",vm:\"1\",version:\"DICOM\"},\"(0070,0244)\":{tag:\"(0070,0244)\",vr:\"CS\",name:\"ShadowStyle\",vm:\"1\",version:\"DICOM\"},\"(0070,0245)\":{tag:\"(0070,0245)\",vr:\"FL\",name:\"ShadowOffsetX\",vm:\"1\",version:\"DICOM\"},\"(0070,0246)\":{tag:\"(0070,0246)\",vr:\"FL\",name:\"ShadowOffsetY\",vm:\"1\",version:\"DICOM\"},\"(0070,0247)\":{tag:\"(0070,0247)\",vr:\"US\",name:\"ShadowColorCIELabValue\",vm:\"3\",version:\"DICOM\"},\"(0070,0248)\":{tag:\"(0070,0248)\",vr:\"CS\",name:\"Underlined\",vm:\"1\",version:\"DICOM\"},\"(0070,0249)\":{tag:\"(0070,0249)\",vr:\"CS\",name:\"Bold\",vm:\"1\",version:\"DICOM\"},\"(0070,0250)\":{tag:\"(0070,0250)\",vr:\"CS\",name:\"Italic\",vm:\"1\",version:\"DICOM\"},\"(0070,0251)\":{tag:\"(0070,0251)\",vr:\"US\",name:\"PatternOnColorCIELabValue\",vm:\"3\",version:\"DICOM\"},\"(0070,0252)\":{tag:\"(0070,0252)\",vr:\"US\",name:\"PatternOffColorCIELabValue\",vm:\"3\",version:\"DICOM\"},\"(0070,0253)\":{tag:\"(0070,0253)\",vr:\"FL\",name:\"LineThickness\",vm:\"1\",version:\"DICOM\"},\"(0070,0254)\":{tag:\"(0070,0254)\",vr:\"CS\",name:\"LineDashingStyle\",vm:\"1\",version:\"DICOM\"},\"(0070,0255)\":{tag:\"(0070,0255)\",vr:\"UL\",name:\"LinePattern\",vm:\"1\",version:\"DICOM\"},\"(0070,0256)\":{tag:\"(0070,0256)\",vr:\"OB\",name:\"FillPattern\",vm:\"1\",version:\"DICOM\"},\"(0070,0257)\":{tag:\"(0070,0257)\",vr:\"CS\",name:\"FillMode\",vm:\"1\",version:\"DICOM\"},\"(0070,0258)\":{tag:\"(0070,0258)\",vr:\"FL\",name:\"ShadowOpacity\",vm:\"1\",version:\"DICOM\"},\"(0070,0261)\":{tag:\"(0070,0261)\",vr:\"FL\",name:\"GapLength\",vm:\"1\",version:\"DICOM\"},\"(0070,0262)\":{tag:\"(0070,0262)\",vr:\"FL\",name:\"DiameterOfVisibility\",vm:\"1\",version:\"DICOM\"},\"(0070,0273)\":{tag:\"(0070,0273)\",vr:\"FL\",name:\"RotationPoint\",vm:\"2\",version:\"DICOM\"},\"(0070,0274)\":{tag:\"(0070,0274)\",vr:\"CS\",name:\"TickAlignment\",vm:\"1\",version:\"DICOM\"},\"(0070,0278)\":{tag:\"(0070,0278)\",vr:\"CS\",name:\"ShowTickLabel\",vm:\"1\",version:\"DICOM\"},\"(0070,0279)\":{tag:\"(0070,0279)\",vr:\"CS\",name:\"TickLabelAlignment\",vm:\"1\",version:\"DICOM\"},\"(0070,0282)\":{tag:\"(0070,0282)\",vr:\"CS\",name:\"CompoundGraphicUnits\",vm:\"1\",version:\"DICOM\"},\"(0070,0284)\":{tag:\"(0070,0284)\",vr:\"FL\",name:\"PatternOnOpacity\",vm:\"1\",version:\"DICOM\"},\"(0070,0285)\":{tag:\"(0070,0285)\",vr:\"FL\",name:\"PatternOffOpacity\",vm:\"1\",version:\"DICOM\"},\"(0070,0287)\":{tag:\"(0070,0287)\",vr:\"SQ\",name:\"MajorTicksSequence\",vm:\"1\",version:\"DICOM\"},\"(0070,0288)\":{tag:\"(0070,0288)\",vr:\"FL\",name:\"TickPosition\",vm:\"1\",version:\"DICOM\"},\"(0070,0289)\":{tag:\"(0070,0289)\",vr:\"SH\",name:\"TickLabel\",vm:\"1\",version:\"DICOM\"},\"(0070,0294)\":{tag:\"(0070,0294)\",vr:\"CS\",name:\"CompoundGraphicType\",vm:\"1\",version:\"DICOM\"},\"(0070,0295)\":{tag:\"(0070,0295)\",vr:\"UL\",name:\"GraphicGroupID\",vm:\"1\",version:\"DICOM\"},\"(0070,0306)\":{tag:\"(0070,0306)\",vr:\"CS\",name:\"ShapeType\",vm:\"1\",version:\"DICOM\"},\"(0070,0308)\":{tag:\"(0070,0308)\",vr:\"SQ\",name:\"RegistrationSequence\",vm:\"1\",version:\"DICOM\"},\"(0070,0309)\":{tag:\"(0070,0309)\",vr:\"SQ\",name:\"MatrixRegistrationSequence\",vm:\"1\",version:\"DICOM\"},\"(0070,030A)\":{tag:\"(0070,030A)\",vr:\"SQ\",name:\"MatrixSequence\",vm:\"1\",version:\"DICOM\"},\"(0070,030B)\":{tag:\"(0070,030B)\",vr:\"FD\",name:\"FrameOfReferenceToDisplayedCoordinateSystemTransformationMatrix\",vm:\"16\",version:\"DICOM\"},\"(0070,030C)\":{tag:\"(0070,030C)\",vr:\"CS\",name:\"FrameOfReferenceTransformationMatrixType\",vm:\"1\",version:\"DICOM\"},\"(0070,030D)\":{tag:\"(0070,030D)\",vr:\"SQ\",name:\"RegistrationTypeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0070,030F)\":{tag:\"(0070,030F)\",vr:\"ST\",name:\"FiducialDescription\",vm:\"1\",version:\"DICOM\"},\"(0070,0310)\":{tag:\"(0070,0310)\",vr:\"SH\",name:\"FiducialIdentifier\",vm:\"1\",version:\"DICOM\"},\"(0070,0311)\":{tag:\"(0070,0311)\",vr:\"SQ\",name:\"FiducialIdentifierCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0070,0312)\":{tag:\"(0070,0312)\",vr:\"FD\",name:\"ContourUncertaintyRadius\",vm:\"1\",version:\"DICOM\"},\"(0070,0314)\":{tag:\"(0070,0314)\",vr:\"SQ\",name:\"UsedFiducialsSequence\",vm:\"1\",version:\"DICOM\"},\"(0070,0318)\":{tag:\"(0070,0318)\",vr:\"SQ\",name:\"GraphicCoordinatesDataSequence\",vm:\"1\",version:\"DICOM\"},\"(0070,031A)\":{tag:\"(0070,031A)\",vr:\"UI\",name:\"FiducialUID\",vm:\"1\",version:\"DICOM\"},\"(0070,031B)\":{tag:\"(0070,031B)\",vr:\"UI\",name:\"ReferencedFiducialUID\",vm:\"1\",version:\"DICOM\"},\"(0070,031C)\":{tag:\"(0070,031C)\",vr:\"SQ\",name:\"FiducialSetSequence\",vm:\"1\",version:\"DICOM\"},\"(0070,031E)\":{tag:\"(0070,031E)\",vr:\"SQ\",name:\"FiducialSequence\",vm:\"1\",version:\"DICOM\"},\"(0070,031F)\":{tag:\"(0070,031F)\",vr:\"SQ\",name:\"FiducialsPropertyCategoryCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0070,0401)\":{tag:\"(0070,0401)\",vr:\"US\",name:\"GraphicLayerRecommendedDisplayCIELabValue\",vm:\"3\",version:\"DICOM\"},\"(0070,0402)\":{tag:\"(0070,0402)\",vr:\"SQ\",name:\"BlendingSequence\",vm:\"1\",version:\"DICOM\"},\"(0070,0403)\":{tag:\"(0070,0403)\",vr:\"FL\",name:\"RelativeOpacity\",vm:\"1\",version:\"DICOM\"},\"(0070,0404)\":{tag:\"(0070,0404)\",vr:\"SQ\",name:\"ReferencedSpatialRegistrationSequence\",vm:\"1\",version:\"DICOM\"},\"(0070,0405)\":{tag:\"(0070,0405)\",vr:\"CS\",name:\"BlendingPosition\",vm:\"1\",version:\"DICOM\"},\"(0070,1209)\":{tag:\"(0070,1209)\",vr:\"UI\",name:\"VolumetricPresentationInputSetUID\",vm:\"1\",version:\"DICOM\"},\"(0070,120A)\":{tag:\"(0070,120A)\",vr:\"SQ\",name:\"VolumetricPresentationInputSetSequence\",vm:\"1\",version:\"DICOM\"},\"(0070,120B)\":{tag:\"(0070,120B)\",vr:\"CS\",name:\"GlobalCrop\",vm:\"1\",version:\"DICOM\"},\"(0070,120C)\":{tag:\"(0070,120C)\",vr:\"US\",name:\"GlobalCroppingSpecificationIndex\",vm:\"1-n\",version:\"DICOM\"},\"(0070,120D)\":{tag:\"(0070,120D)\",vr:\"CS\",name:\"RenderingMethod\",vm:\"1\",version:\"DICOM\"},\"(0070,1602)\":{tag:\"(0070,1602)\",vr:\"CS\",name:\"RenderProjection\",vm:\"1\",version:\"DICOM\"},\"(0070,1603)\":{tag:\"(0070,1603)\",vr:\"FD\",name:\"ViewpointPosition\",vm:\"3\",version:\"DICOM\"},\"(0070,1604)\":{tag:\"(0070,1604)\",vr:\"FD\",name:\"ViewpointLookAtPoint\",vm:\"3\",version:\"DICOM\"},\"(0070,1605)\":{tag:\"(0070,1605)\",vr:\"FD\",name:\"ViewpointUpDirection\",vm:\"3\",version:\"DICOM\"},\"(0070,1606)\":{tag:\"(0070,1606)\",vr:\"FD\",name:\"RenderFieldOfView\",vm:\"6\",version:\"DICOM\"},\"(0070,1607)\":{tag:\"(0070,1607)\",vr:\"FD\",name:\"SamplingStepSize\",vm:\"1\",version:\"DICOM\"},\"(0070,1701)\":{tag:\"(0070,1701)\",vr:\"CS\",name:\"ShadingStyle\",vm:\"1\",version:\"DICOM\"},\"(0070,1702)\":{tag:\"(0070,1702)\",vr:\"FD\",name:\"AmbientReflectionIntensity\",vm:\"1\",version:\"DICOM\"},\"(0070,1703)\":{tag:\"(0070,1703)\",vr:\"FD\",name:\"LightDirection\",vm:\"3\",version:\"DICOM\"},\"(0070,1704)\":{tag:\"(0070,1704)\",vr:\"FD\",name:\"DiffuseReflectionIntensity\",vm:\"1\",version:\"DICOM\"},\"(0070,1705)\":{tag:\"(0070,1705)\",vr:\"FD\",name:\"SpecularReflectionIntensity\",vm:\"1\",version:\"DICOM\"},\"(0070,1706)\":{tag:\"(0070,1706)\",vr:\"FD\",name:\"Shininess\",vm:\"1\",version:\"DICOM\"},\"(0070,1A06)\":{tag:\"(0070,1A06)\",vr:\"FD\",name:\"SwivelRange\",vm:\"1\",version:\"DICOM\"},\"(0070,1A07)\":{tag:\"(0070,1A07)\",vr:\"OD\",name:\"VolumetricCurveUpDirections\",vm:\"1\",version:\"DICOM\"},\"(0070,1A08)\":{tag:\"(0070,1A08)\",vr:\"SQ\",name:\"VolumeStreamSequence\",vm:\"1\",version:\"DICOM\"},\"(0070,1A09)\":{tag:\"(0070,1A09)\",vr:\"LO\",name:\"RGBATransferFunctionDescription\",vm:\"1\",version:\"DICOM\"},\"(0070,1B01)\":{tag:\"(0070,1B01)\",vr:\"SQ\",name:\"AdvancedBlendingSequence\",vm:\"1\",version:\"DICOM\"},\"(0070,1B02)\":{tag:\"(0070,1B02)\",vr:\"US\",name:\"BlendingInputNumber\",vm:\"1\",version:\"DICOM\"},\"(0070,1B03)\":{tag:\"(0070,1B03)\",vr:\"SQ\",name:\"BlendingDisplayInputSequence\",vm:\"1\",version:\"DICOM\"},\"(0070,1B04)\":{tag:\"(0070,1B04)\",vr:\"SQ\",name:\"BlendingDisplaySequence\",vm:\"1\",version:\"DICOM\"},\"(0070,1B06)\":{tag:\"(0070,1B06)\",vr:\"CS\",name:\"BlendingMode\",vm:\"1\",version:\"DICOM\"},\"(0070,1B07)\":{tag:\"(0070,1B07)\",vr:\"CS\",name:\"TimeSeriesBlending\",vm:\"1\",version:\"DICOM\"},\"(0070,1B08)\":{tag:\"(0070,1B08)\",vr:\"CS\",name:\"GeometryForDisplay\",vm:\"1\",version:\"DICOM\"},\"(0070,1B11)\":{tag:\"(0070,1B11)\",vr:\"SQ\",name:\"ThresholdSequence\",vm:\"1\",version:\"DICOM\"},\"(0070,1B12)\":{tag:\"(0070,1B12)\",vr:\"SQ\",name:\"ThresholdValueSequence\",vm:\"1\",version:\"DICOM\"},\"(0070,1B13)\":{tag:\"(0070,1B13)\",vr:\"CS\",name:\"ThresholdType\",vm:\"1\",version:\"DICOM\"},\"(0070,1B14)\":{tag:\"(0070,1B14)\",vr:\"FD\",name:\"ThresholdValue\",vm:\"1\",version:\"DICOM\"},\"(0072,0002)\":{tag:\"(0072,0002)\",vr:\"SH\",name:\"HangingProtocolName\",vm:\"1\",version:\"DICOM\"},\"(0072,0004)\":{tag:\"(0072,0004)\",vr:\"LO\",name:\"HangingProtocolDescription\",vm:\"1\",version:\"DICOM\"},\"(0072,0006)\":{tag:\"(0072,0006)\",vr:\"CS\",name:\"HangingProtocolLevel\",vm:\"1\",version:\"DICOM\"},\"(0072,0008)\":{tag:\"(0072,0008)\",vr:\"LO\",name:\"HangingProtocolCreator\",vm:\"1\",version:\"DICOM\"},\"(0072,000A)\":{tag:\"(0072,000A)\",vr:\"DT\",name:\"HangingProtocolCreationDateTime\",vm:\"1\",version:\"DICOM\"},\"(0072,000C)\":{tag:\"(0072,000C)\",vr:\"SQ\",name:\"HangingProtocolDefinitionSequence\",vm:\"1\",version:\"DICOM\"},\"(0072,000E)\":{tag:\"(0072,000E)\",vr:\"SQ\",name:\"HangingProtocolUserIdentificationCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0072,0010)\":{tag:\"(0072,0010)\",vr:\"LO\",name:\"HangingProtocolUserGroupName\",vm:\"1\",version:\"DICOM\"},\"(0072,0012)\":{tag:\"(0072,0012)\",vr:\"SQ\",name:\"SourceHangingProtocolSequence\",vm:\"1\",version:\"DICOM\"},\"(0072,0014)\":{tag:\"(0072,0014)\",vr:\"US\",name:\"NumberOfPriorsReferenced\",vm:\"1\",version:\"DICOM\"},\"(0072,0020)\":{tag:\"(0072,0020)\",vr:\"SQ\",name:\"ImageSetsSequence\",vm:\"1\",version:\"DICOM\"},\"(0072,0022)\":{tag:\"(0072,0022)\",vr:\"SQ\",name:\"ImageSetSelectorSequence\",vm:\"1\",version:\"DICOM\"},\"(0072,0024)\":{tag:\"(0072,0024)\",vr:\"CS\",name:\"ImageSetSelectorUsageFlag\",vm:\"1\",version:\"DICOM\"},\"(0072,0026)\":{tag:\"(0072,0026)\",vr:\"AT\",name:\"SelectorAttribute\",vm:\"1\",version:\"DICOM\"},\"(0072,0028)\":{tag:\"(0072,0028)\",vr:\"US\",name:\"SelectorValueNumber\",vm:\"1\",version:\"DICOM\"},\"(0072,0030)\":{tag:\"(0072,0030)\",vr:\"SQ\",name:\"TimeBasedImageSetsSequence\",vm:\"1\",version:\"DICOM\"},\"(0072,0032)\":{tag:\"(0072,0032)\",vr:\"US\",name:\"ImageSetNumber\",vm:\"1\",version:\"DICOM\"},\"(0072,0034)\":{tag:\"(0072,0034)\",vr:\"CS\",name:\"ImageSetSelectorCategory\",vm:\"1\",version:\"DICOM\"},\"(0072,0038)\":{tag:\"(0072,0038)\",vr:\"US\",name:\"RelativeTime\",vm:\"2\",version:\"DICOM\"},\"(0072,003A)\":{tag:\"(0072,003A)\",vr:\"CS\",name:\"RelativeTimeUnits\",vm:\"1\",version:\"DICOM\"},\"(0072,003C)\":{tag:\"(0072,003C)\",vr:\"SS\",name:\"AbstractPriorValue\",vm:\"2\",version:\"DICOM\"},\"(0072,003E)\":{tag:\"(0072,003E)\",vr:\"SQ\",name:\"AbstractPriorCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0072,0040)\":{tag:\"(0072,0040)\",vr:\"LO\",name:\"ImageSetLabel\",vm:\"1\",version:\"DICOM\"},\"(0072,0050)\":{tag:\"(0072,0050)\",vr:\"CS\",name:\"SelectorAttributeVR\",vm:\"1\",version:\"DICOM\"},\"(0072,0052)\":{tag:\"(0072,0052)\",vr:\"AT\",name:\"SelectorSequencePointer\",vm:\"1-n\",version:\"DICOM\"},\"(0072,0054)\":{tag:\"(0072,0054)\",vr:\"LO\",name:\"SelectorSequencePointerPrivateCreator\",vm:\"1-n\",version:\"DICOM\"},\"(0072,0056)\":{tag:\"(0072,0056)\",vr:\"LO\",name:\"SelectorAttributePrivateCreator\",vm:\"1\",version:\"DICOM\"},\"(0072,005E)\":{tag:\"(0072,005E)\",vr:\"AE\",name:\"SelectorAEValue\",vm:\"1-n\",version:\"DICOM\"},\"(0072,005F)\":{tag:\"(0072,005F)\",vr:\"AS\",name:\"SelectorASValue\",vm:\"1-n\",version:\"DICOM\"},\"(0072,0060)\":{tag:\"(0072,0060)\",vr:\"AT\",name:\"SelectorATValue\",vm:\"1-n\",version:\"DICOM\"},\"(0072,0061)\":{tag:\"(0072,0061)\",vr:\"DA\",name:\"SelectorDAValue\",vm:\"1-n\",version:\"DICOM\"},\"(0072,0062)\":{tag:\"(0072,0062)\",vr:\"CS\",name:\"SelectorCSValue\",vm:\"1-n\",version:\"DICOM\"},\"(0072,0063)\":{tag:\"(0072,0063)\",vr:\"DT\",name:\"SelectorDTValue\",vm:\"1-n\",version:\"DICOM\"},\"(0072,0064)\":{tag:\"(0072,0064)\",vr:\"IS\",name:\"SelectorISValue\",vm:\"1-n\",version:\"DICOM\"},\"(0072,0065)\":{tag:\"(0072,0065)\",vr:\"OB\",name:\"SelectorOBValue\",vm:\"1\",version:\"DICOM\"},\"(0072,0066)\":{tag:\"(0072,0066)\",vr:\"LO\",name:\"SelectorLOValue\",vm:\"1-n\",version:\"DICOM\"},\"(0072,0067)\":{tag:\"(0072,0067)\",vr:\"OF\",name:\"SelectorOFValue\",vm:\"1\",version:\"DICOM\"},\"(0072,0068)\":{tag:\"(0072,0068)\",vr:\"LT\",name:\"SelectorLTValue\",vm:\"1\",version:\"DICOM\"},\"(0072,0069)\":{tag:\"(0072,0069)\",vr:\"OW\",name:\"SelectorOWValue\",vm:\"1\",version:\"DICOM\"},\"(0072,006A)\":{tag:\"(0072,006A)\",vr:\"PN\",name:\"SelectorPNValue\",vm:\"1-n\",version:\"DICOM\"},\"(0072,006B)\":{tag:\"(0072,006B)\",vr:\"TM\",name:\"SelectorTMValue\",vm:\"1-n\",version:\"DICOM\"},\"(0072,006C)\":{tag:\"(0072,006C)\",vr:\"SH\",name:\"SelectorSHValue\",vm:\"1-n\",version:\"DICOM\"},\"(0072,006D)\":{tag:\"(0072,006D)\",vr:\"UN\",name:\"SelectorUNValue\",vm:\"1\",version:\"DICOM\"},\"(0072,006E)\":{tag:\"(0072,006E)\",vr:\"ST\",name:\"SelectorSTValue\",vm:\"1\",version:\"DICOM\"},\"(0072,006F)\":{tag:\"(0072,006F)\",vr:\"UC\",name:\"SelectorUCValue\",vm:\"1-n\",version:\"DICOM\"},\"(0072,0070)\":{tag:\"(0072,0070)\",vr:\"UT\",name:\"SelectorUTValue\",vm:\"1\",version:\"DICOM\"},\"(0072,0071)\":{tag:\"(0072,0071)\",vr:\"UR\",name:\"SelectorURValue\",vm:\"1\",version:\"DICOM\"},\"(0072,0072)\":{tag:\"(0072,0072)\",vr:\"DS\",name:\"SelectorDSValue\",vm:\"1-n\",version:\"DICOM\"},\"(0072,0073)\":{tag:\"(0072,0073)\",vr:\"OD\",name:\"SelectorODValue\",vm:\"1\",version:\"DICOM\"},\"(0072,0074)\":{tag:\"(0072,0074)\",vr:\"FD\",name:\"SelectorFDValue\",vm:\"1-n\",version:\"DICOM\"},\"(0072,0075)\":{tag:\"(0072,0075)\",vr:\"OL\",name:\"SelectorOLValue\",vm:\"1\",version:\"DICOM\"},\"(0072,0076)\":{tag:\"(0072,0076)\",vr:\"FL\",name:\"SelectorFLValue\",vm:\"1-n\",version:\"DICOM\"},\"(0072,0078)\":{tag:\"(0072,0078)\",vr:\"UL\",name:\"SelectorULValue\",vm:\"1-n\",version:\"DICOM\"},\"(0072,007A)\":{tag:\"(0072,007A)\",vr:\"US\",name:\"SelectorUSValue\",vm:\"1-n\",version:\"DICOM\"},\"(0072,007C)\":{tag:\"(0072,007C)\",vr:\"SL\",name:\"SelectorSLValue\",vm:\"1-n\",version:\"DICOM\"},\"(0072,007E)\":{tag:\"(0072,007E)\",vr:\"SS\",name:\"SelectorSSValue\",vm:\"1-n\",version:\"DICOM\"},\"(0072,007F)\":{tag:\"(0072,007F)\",vr:\"UI\",name:\"SelectorUIValue\",vm:\"1-n\",version:\"DICOM\"},\"(0072,0080)\":{tag:\"(0072,0080)\",vr:\"SQ\",name:\"SelectorCodeSequenceValue\",vm:\"1\",version:\"DICOM\"},\"(0072,0081)\":{tag:\"(0072,0081)\",vr:\"OV\",name:\"SelectorOVValue\",vm:\"1\",version:\"DICOM\"},\"(0072,0082)\":{tag:\"(0072,0082)\",vr:\"SV\",name:\"SelectorSVValue\",vm:\"1-n\",version:\"DICOM\"},\"(0072,0083)\":{tag:\"(0072,0083)\",vr:\"UV\",name:\"SelectorUVValue\",vm:\"1-n\",version:\"DICOM\"},\"(0072,0100)\":{tag:\"(0072,0100)\",vr:\"US\",name:\"NumberOfScreens\",vm:\"1\",version:\"DICOM\"},\"(0072,0102)\":{tag:\"(0072,0102)\",vr:\"SQ\",name:\"NominalScreenDefinitionSequence\",vm:\"1\",version:\"DICOM\"},\"(0072,0104)\":{tag:\"(0072,0104)\",vr:\"US\",name:\"NumberOfVerticalPixels\",vm:\"1\",version:\"DICOM\"},\"(0072,0106)\":{tag:\"(0072,0106)\",vr:\"US\",name:\"NumberOfHorizontalPixels\",vm:\"1\",version:\"DICOM\"},\"(0072,0108)\":{tag:\"(0072,0108)\",vr:\"FD\",name:\"DisplayEnvironmentSpatialPosition\",vm:\"4\",version:\"DICOM\"},\"(0072,010A)\":{tag:\"(0072,010A)\",vr:\"US\",name:\"ScreenMinimumGrayscaleBitDepth\",vm:\"1\",version:\"DICOM\"},\"(0072,010C)\":{tag:\"(0072,010C)\",vr:\"US\",name:\"ScreenMinimumColorBitDepth\",vm:\"1\",version:\"DICOM\"},\"(0072,010E)\":{tag:\"(0072,010E)\",vr:\"US\",name:\"ApplicationMaximumRepaintTime\",vm:\"1\",version:\"DICOM\"},\"(0072,0200)\":{tag:\"(0072,0200)\",vr:\"SQ\",name:\"DisplaySetsSequence\",vm:\"1\",version:\"DICOM\"},\"(0072,0202)\":{tag:\"(0072,0202)\",vr:\"US\",name:\"DisplaySetNumber\",vm:\"1\",version:\"DICOM\"},\"(0072,0203)\":{tag:\"(0072,0203)\",vr:\"LO\",name:\"DisplaySetLabel\",vm:\"1\",version:\"DICOM\"},\"(0072,0204)\":{tag:\"(0072,0204)\",vr:\"US\",name:\"DisplaySetPresentationGroup\",vm:\"1\",version:\"DICOM\"},\"(0072,0206)\":{tag:\"(0072,0206)\",vr:\"LO\",name:\"DisplaySetPresentationGroupDescription\",vm:\"1\",version:\"DICOM\"},\"(0072,0208)\":{tag:\"(0072,0208)\",vr:\"CS\",name:\"PartialDataDisplayHandling\",vm:\"1\",version:\"DICOM\"},\"(0072,0210)\":{tag:\"(0072,0210)\",vr:\"SQ\",name:\"SynchronizedScrollingSequence\",vm:\"1\",version:\"DICOM\"},\"(0072,0212)\":{tag:\"(0072,0212)\",vr:\"US\",name:\"DisplaySetScrollingGroup\",vm:\"2-n\",version:\"DICOM\"},\"(0072,0214)\":{tag:\"(0072,0214)\",vr:\"SQ\",name:\"NavigationIndicatorSequence\",vm:\"1\",version:\"DICOM\"},\"(0072,0216)\":{tag:\"(0072,0216)\",vr:\"US\",name:\"NavigationDisplaySet\",vm:\"1\",version:\"DICOM\"},\"(0072,0218)\":{tag:\"(0072,0218)\",vr:\"US\",name:\"ReferenceDisplaySets\",vm:\"1-n\",version:\"DICOM\"},\"(0072,0300)\":{tag:\"(0072,0300)\",vr:\"SQ\",name:\"ImageBoxesSequence\",vm:\"1\",version:\"DICOM\"},\"(0072,0302)\":{tag:\"(0072,0302)\",vr:\"US\",name:\"ImageBoxNumber\",vm:\"1\",version:\"DICOM\"},\"(0072,0304)\":{tag:\"(0072,0304)\",vr:\"CS\",name:\"ImageBoxLayoutType\",vm:\"1\",version:\"DICOM\"},\"(0072,0306)\":{tag:\"(0072,0306)\",vr:\"US\",name:\"ImageBoxTileHorizontalDimension\",vm:\"1\",version:\"DICOM\"},\"(0072,0308)\":{tag:\"(0072,0308)\",vr:\"US\",name:\"ImageBoxTileVerticalDimension\",vm:\"1\",version:\"DICOM\"},\"(0072,0310)\":{tag:\"(0072,0310)\",vr:\"CS\",name:\"ImageBoxScrollDirection\",vm:\"1\",version:\"DICOM\"},\"(0072,0312)\":{tag:\"(0072,0312)\",vr:\"CS\",name:\"ImageBoxSmallScrollType\",vm:\"1\",version:\"DICOM\"},\"(0072,0314)\":{tag:\"(0072,0314)\",vr:\"US\",name:\"ImageBoxSmallScrollAmount\",vm:\"1\",version:\"DICOM\"},\"(0072,0316)\":{tag:\"(0072,0316)\",vr:\"CS\",name:\"ImageBoxLargeScrollType\",vm:\"1\",version:\"DICOM\"},\"(0072,0318)\":{tag:\"(0072,0318)\",vr:\"US\",name:\"ImageBoxLargeScrollAmount\",vm:\"1\",version:\"DICOM\"},\"(0072,0320)\":{tag:\"(0072,0320)\",vr:\"US\",name:\"ImageBoxOverlapPriority\",vm:\"1\",version:\"DICOM\"},\"(0072,0330)\":{tag:\"(0072,0330)\",vr:\"FD\",name:\"CineRelativeToRealTime\",vm:\"1\",version:\"DICOM\"},\"(0072,0400)\":{tag:\"(0072,0400)\",vr:\"SQ\",name:\"FilterOperationsSequence\",vm:\"1\",version:\"DICOM\"},\"(0072,0402)\":{tag:\"(0072,0402)\",vr:\"CS\",name:\"FilterByCategory\",vm:\"1\",version:\"DICOM\"},\"(0072,0404)\":{tag:\"(0072,0404)\",vr:\"CS\",name:\"FilterByAttributePresence\",vm:\"1\",version:\"DICOM\"},\"(0072,0406)\":{tag:\"(0072,0406)\",vr:\"CS\",name:\"FilterByOperator\",vm:\"1\",version:\"DICOM\"},\"(0072,0420)\":{tag:\"(0072,0420)\",vr:\"US\",name:\"StructuredDisplayBackgroundCIELabValue\",vm:\"3\",version:\"DICOM\"},\"(0072,0421)\":{tag:\"(0072,0421)\",vr:\"US\",name:\"EmptyImageBoxCIELabValue\",vm:\"3\",version:\"DICOM\"},\"(0072,0422)\":{tag:\"(0072,0422)\",vr:\"SQ\",name:\"StructuredDisplayImageBoxSequence\",vm:\"1\",version:\"DICOM\"},\"(0072,0424)\":{tag:\"(0072,0424)\",vr:\"SQ\",name:\"StructuredDisplayTextBoxSequence\",vm:\"1\",version:\"DICOM\"},\"(0072,0427)\":{tag:\"(0072,0427)\",vr:\"SQ\",name:\"ReferencedFirstFrameSequence\",vm:\"1\",version:\"DICOM\"},\"(0072,0430)\":{tag:\"(0072,0430)\",vr:\"SQ\",name:\"ImageBoxSynchronizationSequence\",vm:\"1\",version:\"DICOM\"},\"(0072,0432)\":{tag:\"(0072,0432)\",vr:\"US\",name:\"SynchronizedImageBoxList\",vm:\"2-n\",version:\"DICOM\"},\"(0072,0434)\":{tag:\"(0072,0434)\",vr:\"CS\",name:\"TypeOfSynchronization\",vm:\"1\",version:\"DICOM\"},\"(0072,0500)\":{tag:\"(0072,0500)\",vr:\"CS\",name:\"BlendingOperationType\",vm:\"1\",version:\"DICOM\"},\"(0072,0510)\":{tag:\"(0072,0510)\",vr:\"CS\",name:\"ReformattingOperationType\",vm:\"1\",version:\"DICOM\"},\"(0072,0512)\":{tag:\"(0072,0512)\",vr:\"FD\",name:\"ReformattingThickness\",vm:\"1\",version:\"DICOM\"},\"(0072,0514)\":{tag:\"(0072,0514)\",vr:\"FD\",name:\"ReformattingInterval\",vm:\"1\",version:\"DICOM\"},\"(0072,0516)\":{tag:\"(0072,0516)\",vr:\"CS\",name:\"ReformattingOperationInitialViewDirection\",vm:\"1\",version:\"DICOM\"},\"(0072,0520)\":{tag:\"(0072,0520)\",vr:\"CS\",name:\"ThreeDRenderingType\",vm:\"1-n\",version:\"DICOM\"},\"(0072,0600)\":{tag:\"(0072,0600)\",vr:\"SQ\",name:\"SortingOperationsSequence\",vm:\"1\",version:\"DICOM\"},\"(0072,0602)\":{tag:\"(0072,0602)\",vr:\"CS\",name:\"SortByCategory\",vm:\"1\",version:\"DICOM\"},\"(0072,0604)\":{tag:\"(0072,0604)\",vr:\"CS\",name:\"SortingDirection\",vm:\"1\",version:\"DICOM\"},\"(0072,0700)\":{tag:\"(0072,0700)\",vr:\"CS\",name:\"DisplaySetPatientOrientation\",vm:\"2\",version:\"DICOM\"},\"(0072,0702)\":{tag:\"(0072,0702)\",vr:\"CS\",name:\"VOIType\",vm:\"1\",version:\"DICOM\"},\"(0072,0704)\":{tag:\"(0072,0704)\",vr:\"CS\",name:\"PseudoColorType\",vm:\"1\",version:\"DICOM\"},\"(0072,0705)\":{tag:\"(0072,0705)\",vr:\"SQ\",name:\"PseudoColorPaletteInstanceReferenceSequence\",vm:\"1\",version:\"DICOM\"},\"(0072,0706)\":{tag:\"(0072,0706)\",vr:\"CS\",name:\"ShowGrayscaleInverted\",vm:\"1\",version:\"DICOM\"},\"(0072,0710)\":{tag:\"(0072,0710)\",vr:\"CS\",name:\"ShowImageTrueSizeFlag\",vm:\"1\",version:\"DICOM\"},\"(0072,0712)\":{tag:\"(0072,0712)\",vr:\"CS\",name:\"ShowGraphicAnnotationFlag\",vm:\"1\",version:\"DICOM\"},\"(0072,0714)\":{tag:\"(0072,0714)\",vr:\"CS\",name:\"ShowPatientDemographicsFlag\",vm:\"1\",version:\"DICOM\"},\"(0072,0716)\":{tag:\"(0072,0716)\",vr:\"CS\",name:\"ShowAcquisitionTechniquesFlag\",vm:\"1\",version:\"DICOM\"},\"(0072,0717)\":{tag:\"(0072,0717)\",vr:\"CS\",name:\"DisplaySetHorizontalJustification\",vm:\"1\",version:\"DICOM\"},\"(0072,0718)\":{tag:\"(0072,0718)\",vr:\"CS\",name:\"DisplaySetVerticalJustification\",vm:\"1\",version:\"DICOM\"},\"(0074,0120)\":{tag:\"(0074,0120)\",vr:\"FD\",name:\"ContinuationStartMeterset\",vm:\"1\",version:\"DICOM\"},\"(0074,0121)\":{tag:\"(0074,0121)\",vr:\"FD\",name:\"ContinuationEndMeterset\",vm:\"1\",version:\"DICOM\"},\"(0074,1000)\":{tag:\"(0074,1000)\",vr:\"CS\",name:\"ProcedureStepState\",vm:\"1\",version:\"DICOM\"},\"(0074,1002)\":{tag:\"(0074,1002)\",vr:\"SQ\",name:\"ProcedureStepProgressInformationSequence\",vm:\"1\",version:\"DICOM\"},\"(0074,1004)\":{tag:\"(0074,1004)\",vr:\"DS\",name:\"ProcedureStepProgress\",vm:\"1\",version:\"DICOM\"},\"(0074,1006)\":{tag:\"(0074,1006)\",vr:\"ST\",name:\"ProcedureStepProgressDescription\",vm:\"1\",version:\"DICOM\"},\"(0074,1007)\":{tag:\"(0074,1007)\",vr:\"SQ\",name:\"ProcedureStepProgressParametersSequence\",vm:\"1\",version:\"DICOM\"},\"(0074,1008)\":{tag:\"(0074,1008)\",vr:\"SQ\",name:\"ProcedureStepCommunicationsURISequence\",vm:\"1\",version:\"DICOM\"},\"(0074,100A)\":{tag:\"(0074,100A)\",vr:\"UR\",name:\"ContactURI\",vm:\"1\",version:\"DICOM\"},\"(0074,100C)\":{tag:\"(0074,100C)\",vr:\"LO\",name:\"ContactDisplayName\",vm:\"1\",version:\"DICOM\"},\"(0074,100E)\":{tag:\"(0074,100E)\",vr:\"SQ\",name:\"ProcedureStepDiscontinuationReasonCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0074,1020)\":{tag:\"(0074,1020)\",vr:\"SQ\",name:\"BeamTaskSequence\",vm:\"1\",version:\"DICOM\"},\"(0074,1022)\":{tag:\"(0074,1022)\",vr:\"CS\",name:\"BeamTaskType\",vm:\"1\",version:\"DICOM\"},\"(0074,1025)\":{tag:\"(0074,1025)\",vr:\"CS\",name:\"AutosequenceFlag\",vm:\"1\",version:\"DICOM\"},\"(0074,1026)\":{tag:\"(0074,1026)\",vr:\"FD\",name:\"TableTopVerticalAdjustedPosition\",vm:\"1\",version:\"DICOM\"},\"(0074,1027)\":{tag:\"(0074,1027)\",vr:\"FD\",name:\"TableTopLongitudinalAdjustedPosition\",vm:\"1\",version:\"DICOM\"},\"(0074,1028)\":{tag:\"(0074,1028)\",vr:\"FD\",name:\"TableTopLateralAdjustedPosition\",vm:\"1\",version:\"DICOM\"},\"(0074,102A)\":{tag:\"(0074,102A)\",vr:\"FD\",name:\"PatientSupportAdjustedAngle\",vm:\"1\",version:\"DICOM\"},\"(0074,102B)\":{tag:\"(0074,102B)\",vr:\"FD\",name:\"TableTopEccentricAdjustedAngle\",vm:\"1\",version:\"DICOM\"},\"(0074,102C)\":{tag:\"(0074,102C)\",vr:\"FD\",name:\"TableTopPitchAdjustedAngle\",vm:\"1\",version:\"DICOM\"},\"(0074,102D)\":{tag:\"(0074,102D)\",vr:\"FD\",name:\"TableTopRollAdjustedAngle\",vm:\"1\",version:\"DICOM\"},\"(0074,1030)\":{tag:\"(0074,1030)\",vr:\"SQ\",name:\"DeliveryVerificationImageSequence\",vm:\"1\",version:\"DICOM\"},\"(0074,1032)\":{tag:\"(0074,1032)\",vr:\"CS\",name:\"VerificationImageTiming\",vm:\"1\",version:\"DICOM\"},\"(0074,1034)\":{tag:\"(0074,1034)\",vr:\"CS\",name:\"DoubleExposureFlag\",vm:\"1\",version:\"DICOM\"},\"(0074,1036)\":{tag:\"(0074,1036)\",vr:\"CS\",name:\"DoubleExposureOrdering\",vm:\"1\",version:\"DICOM\"},\"(0074,1040)\":{tag:\"(0074,1040)\",vr:\"SQ\",name:\"RelatedReferenceRTImageSequence\",vm:\"1\",version:\"DICOM\"},\"(0074,1042)\":{tag:\"(0074,1042)\",vr:\"SQ\",name:\"GeneralMachineVerificationSequence\",vm:\"1\",version:\"DICOM\"},\"(0074,1044)\":{tag:\"(0074,1044)\",vr:\"SQ\",name:\"ConventionalMachineVerificationSequence\",vm:\"1\",version:\"DICOM\"},\"(0074,1046)\":{tag:\"(0074,1046)\",vr:\"SQ\",name:\"IonMachineVerificationSequence\",vm:\"1\",version:\"DICOM\"},\"(0074,1048)\":{tag:\"(0074,1048)\",vr:\"SQ\",name:\"FailedAttributesSequence\",vm:\"1\",version:\"DICOM\"},\"(0074,104A)\":{tag:\"(0074,104A)\",vr:\"SQ\",name:\"OverriddenAttributesSequence\",vm:\"1\",version:\"DICOM\"},\"(0074,104C)\":{tag:\"(0074,104C)\",vr:\"SQ\",name:\"ConventionalControlPointVerificationSequence\",vm:\"1\",version:\"DICOM\"},\"(0074,104E)\":{tag:\"(0074,104E)\",vr:\"SQ\",name:\"IonControlPointVerificationSequence\",vm:\"1\",version:\"DICOM\"},\"(0074,1050)\":{tag:\"(0074,1050)\",vr:\"SQ\",name:\"AttributeOccurrenceSequence\",vm:\"1\",version:\"DICOM\"},\"(0074,1052)\":{tag:\"(0074,1052)\",vr:\"AT\",name:\"AttributeOccurrencePointer\",vm:\"1\",version:\"DICOM\"},\"(0074,1054)\":{tag:\"(0074,1054)\",vr:\"UL\",name:\"AttributeItemSelector\",vm:\"1\",version:\"DICOM\"},\"(0074,1056)\":{tag:\"(0074,1056)\",vr:\"LO\",name:\"AttributeOccurrencePrivateCreator\",vm:\"1\",version:\"DICOM\"},\"(0074,1057)\":{tag:\"(0074,1057)\",vr:\"IS\",name:\"SelectorSequencePointerItems\",vm:\"1-n\",version:\"DICOM\"},\"(0074,1200)\":{tag:\"(0074,1200)\",vr:\"CS\",name:\"ScheduledProcedureStepPriority\",vm:\"1\",version:\"DICOM\"},\"(0074,1202)\":{tag:\"(0074,1202)\",vr:\"LO\",name:\"WorklistLabel\",vm:\"1\",version:\"DICOM\"},\"(0074,1204)\":{tag:\"(0074,1204)\",vr:\"LO\",name:\"ProcedureStepLabel\",vm:\"1\",version:\"DICOM\"},\"(0074,1210)\":{tag:\"(0074,1210)\",vr:\"SQ\",name:\"ScheduledProcessingParametersSequence\",vm:\"1\",version:\"DICOM\"},\"(0074,1212)\":{tag:\"(0074,1212)\",vr:\"SQ\",name:\"PerformedProcessingParametersSequence\",vm:\"1\",version:\"DICOM\"},\"(0074,1216)\":{tag:\"(0074,1216)\",vr:\"SQ\",name:\"UnifiedProcedureStepPerformedProcedureSequence\",vm:\"1\",version:\"DICOM\"},\"(0074,1224)\":{tag:\"(0074,1224)\",vr:\"SQ\",name:\"ReplacedProcedureStepSequence\",vm:\"1\",version:\"DICOM\"},\"(0074,1230)\":{tag:\"(0074,1230)\",vr:\"LO\",name:\"DeletionLock\",vm:\"1\",version:\"DICOM\"},\"(0074,1234)\":{tag:\"(0074,1234)\",vr:\"AE\",name:\"ReceivingAE\",vm:\"1\",version:\"DICOM\"},\"(0074,1236)\":{tag:\"(0074,1236)\",vr:\"AE\",name:\"RequestingAE\",vm:\"1\",version:\"DICOM\"},\"(0074,1238)\":{tag:\"(0074,1238)\",vr:\"LT\",name:\"ReasonForCancellation\",vm:\"1\",version:\"DICOM\"},\"(0074,1242)\":{tag:\"(0074,1242)\",vr:\"CS\",name:\"SCPStatus\",vm:\"1\",version:\"DICOM\"},\"(0074,1244)\":{tag:\"(0074,1244)\",vr:\"CS\",name:\"SubscriptionListStatus\",vm:\"1\",version:\"DICOM\"},\"(0074,1246)\":{tag:\"(0074,1246)\",vr:\"CS\",name:\"UnifiedProcedureStepListStatus\",vm:\"1\",version:\"DICOM\"},\"(0074,1324)\":{tag:\"(0074,1324)\",vr:\"UL\",name:\"BeamOrderIndex\",vm:\"1\",version:\"DICOM\"},\"(0074,1338)\":{tag:\"(0074,1338)\",vr:\"FD\",name:\"DoubleExposureMeterset\",vm:\"1\",version:\"DICOM\"},\"(0074,133A)\":{tag:\"(0074,133A)\",vr:\"FD\",name:\"DoubleExposureFieldDelta\",vm:\"4\",version:\"DICOM\"},\"(0074,1401)\":{tag:\"(0074,1401)\",vr:\"SQ\",name:\"BrachyTaskSequence\",vm:\"1\",version:\"DICOM\"},\"(0074,1402)\":{tag:\"(0074,1402)\",vr:\"DS\",name:\"ContinuationStartTotalReferenceAirKerma\",vm:\"1\",version:\"DICOM\"},\"(0074,1403)\":{tag:\"(0074,1403)\",vr:\"DS\",name:\"ContinuationEndTotalReferenceAirKerma\",vm:\"1\",version:\"DICOM\"},\"(0074,1404)\":{tag:\"(0074,1404)\",vr:\"IS\",name:\"ContinuationPulseNumber\",vm:\"1\",version:\"DICOM\"},\"(0074,1405)\":{tag:\"(0074,1405)\",vr:\"SQ\",name:\"ChannelDeliveryOrderSequence\",vm:\"1\",version:\"DICOM\"},\"(0074,1406)\":{tag:\"(0074,1406)\",vr:\"IS\",name:\"ReferencedChannelNumber\",vm:\"1\",version:\"DICOM\"},\"(0074,1407)\":{tag:\"(0074,1407)\",vr:\"DS\",name:\"StartCumulativeTimeWeight\",vm:\"1\",version:\"DICOM\"},\"(0074,1408)\":{tag:\"(0074,1408)\",vr:\"DS\",name:\"EndCumulativeTimeWeight\",vm:\"1\",version:\"DICOM\"},\"(0074,1409)\":{tag:\"(0074,1409)\",vr:\"SQ\",name:\"OmittedChannelSequence\",vm:\"1\",version:\"DICOM\"},\"(0074,140A)\":{tag:\"(0074,140A)\",vr:\"CS\",name:\"ReasonForChannelOmission\",vm:\"1\",version:\"DICOM\"},\"(0074,140B)\":{tag:\"(0074,140B)\",vr:\"LO\",name:\"ReasonForChannelOmissionDescription\",vm:\"1\",version:\"DICOM\"},\"(0074,140C)\":{tag:\"(0074,140C)\",vr:\"IS\",name:\"ChannelDeliveryOrderIndex\",vm:\"1\",version:\"DICOM\"},\"(0074,140D)\":{tag:\"(0074,140D)\",vr:\"SQ\",name:\"ChannelDeliveryContinuationSequence\",vm:\"1\",version:\"DICOM\"},\"(0074,140E)\":{tag:\"(0074,140E)\",vr:\"SQ\",name:\"OmittedApplicationSetupSequence\",vm:\"1\",version:\"DICOM\"},\"(0076,0001)\":{tag:\"(0076,0001)\",vr:\"LO\",name:\"ImplantAssemblyTemplateName\",vm:\"1\",version:\"DICOM\"},\"(0076,0003)\":{tag:\"(0076,0003)\",vr:\"LO\",name:\"ImplantAssemblyTemplateIssuer\",vm:\"1\",version:\"DICOM\"},\"(0076,0006)\":{tag:\"(0076,0006)\",vr:\"LO\",name:\"ImplantAssemblyTemplateVersion\",vm:\"1\",version:\"DICOM\"},\"(0076,0008)\":{tag:\"(0076,0008)\",vr:\"SQ\",name:\"ReplacedImplantAssemblyTemplateSequence\",vm:\"1\",version:\"DICOM\"},\"(0076,000A)\":{tag:\"(0076,000A)\",vr:\"CS\",name:\"ImplantAssemblyTemplateType\",vm:\"1\",version:\"DICOM\"},\"(0076,000C)\":{tag:\"(0076,000C)\",vr:\"SQ\",name:\"OriginalImplantAssemblyTemplateSequence\",vm:\"1\",version:\"DICOM\"},\"(0076,000E)\":{tag:\"(0076,000E)\",vr:\"SQ\",name:\"DerivationImplantAssemblyTemplateSequence\",vm:\"1\",version:\"DICOM\"},\"(0076,0010)\":{tag:\"(0076,0010)\",vr:\"SQ\",name:\"ImplantAssemblyTemplateTargetAnatomySequence\",vm:\"1\",version:\"DICOM\"},\"(0076,0020)\":{tag:\"(0076,0020)\",vr:\"SQ\",name:\"ProcedureTypeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0076,0030)\":{tag:\"(0076,0030)\",vr:\"LO\",name:\"SurgicalTechnique\",vm:\"1\",version:\"DICOM\"},\"(0076,0032)\":{tag:\"(0076,0032)\",vr:\"SQ\",name:\"ComponentTypesSequence\",vm:\"1\",version:\"DICOM\"},\"(0076,0034)\":{tag:\"(0076,0034)\",vr:\"CS\",name:\"ComponentTypeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0076,0036)\":{tag:\"(0076,0036)\",vr:\"CS\",name:\"ExclusiveComponentType\",vm:\"1\",version:\"DICOM\"},\"(0076,0038)\":{tag:\"(0076,0038)\",vr:\"CS\",name:\"MandatoryComponentType\",vm:\"1\",version:\"DICOM\"},\"(0076,0040)\":{tag:\"(0076,0040)\",vr:\"SQ\",name:\"ComponentSequence\",vm:\"1\",version:\"DICOM\"},\"(0076,0055)\":{tag:\"(0076,0055)\",vr:\"US\",name:\"ComponentID\",vm:\"1\",version:\"DICOM\"},\"(0076,0060)\":{tag:\"(0076,0060)\",vr:\"SQ\",name:\"ComponentAssemblySequence\",vm:\"1\",version:\"DICOM\"},\"(0076,0070)\":{tag:\"(0076,0070)\",vr:\"US\",name:\"Component1ReferencedID\",vm:\"1\",version:\"DICOM\"},\"(0076,0080)\":{tag:\"(0076,0080)\",vr:\"US\",name:\"Component1ReferencedMatingFeatureSetID\",vm:\"1\",version:\"DICOM\"},\"(0076,0090)\":{tag:\"(0076,0090)\",vr:\"US\",name:\"Component1ReferencedMatingFeatureID\",vm:\"1\",version:\"DICOM\"},\"(0076,00A0)\":{tag:\"(0076,00A0)\",vr:\"US\",name:\"Component2ReferencedID\",vm:\"1\",version:\"DICOM\"},\"(0076,00B0)\":{tag:\"(0076,00B0)\",vr:\"US\",name:\"Component2ReferencedMatingFeatureSetID\",vm:\"1\",version:\"DICOM\"},\"(0076,00C0)\":{tag:\"(0076,00C0)\",vr:\"US\",name:\"Component2ReferencedMatingFeatureID\",vm:\"1\",version:\"DICOM\"},\"(0078,0001)\":{tag:\"(0078,0001)\",vr:\"LO\",name:\"ImplantTemplateGroupName\",vm:\"1\",version:\"DICOM\"},\"(0078,0010)\":{tag:\"(0078,0010)\",vr:\"ST\",name:\"ImplantTemplateGroupDescription\",vm:\"1\",version:\"DICOM\"},\"(0078,0020)\":{tag:\"(0078,0020)\",vr:\"LO\",name:\"ImplantTemplateGroupIssuer\",vm:\"1\",version:\"DICOM\"},\"(0078,0024)\":{tag:\"(0078,0024)\",vr:\"LO\",name:\"ImplantTemplateGroupVersion\",vm:\"1\",version:\"DICOM\"},\"(0078,0026)\":{tag:\"(0078,0026)\",vr:\"SQ\",name:\"ReplacedImplantTemplateGroupSequence\",vm:\"1\",version:\"DICOM\"},\"(0078,0028)\":{tag:\"(0078,0028)\",vr:\"SQ\",name:\"ImplantTemplateGroupTargetAnatomySequence\",vm:\"1\",version:\"DICOM\"},\"(0078,002A)\":{tag:\"(0078,002A)\",vr:\"SQ\",name:\"ImplantTemplateGroupMembersSequence\",vm:\"1\",version:\"DICOM\"},\"(0078,002E)\":{tag:\"(0078,002E)\",vr:\"US\",name:\"ImplantTemplateGroupMemberID\",vm:\"1\",version:\"DICOM\"},\"(0078,0050)\":{tag:\"(0078,0050)\",vr:\"FD\",name:\"ThreeDImplantTemplateGroupMemberMatchingPoint\",vm:\"3\",version:\"DICOM\"},\"(0078,0060)\":{tag:\"(0078,0060)\",vr:\"FD\",name:\"ThreeDImplantTemplateGroupMemberMatchingAxes\",vm:\"9\",version:\"DICOM\"},\"(0078,0070)\":{tag:\"(0078,0070)\",vr:\"SQ\",name:\"ImplantTemplateGroupMemberMatching2DCoordinatesSequence\",vm:\"1\",version:\"DICOM\"},\"(0078,0090)\":{tag:\"(0078,0090)\",vr:\"FD\",name:\"TwoDImplantTemplateGroupMemberMatchingPoint\",vm:\"2\",version:\"DICOM\"},\"(0078,00A0)\":{tag:\"(0078,00A0)\",vr:\"FD\",name:\"TwoDImplantTemplateGroupMemberMatchingAxes\",vm:\"4\",version:\"DICOM\"},\"(0078,00B0)\":{tag:\"(0078,00B0)\",vr:\"SQ\",name:\"ImplantTemplateGroupVariationDimensionSequence\",vm:\"1\",version:\"DICOM\"},\"(0078,00B2)\":{tag:\"(0078,00B2)\",vr:\"LO\",name:\"ImplantTemplateGroupVariationDimensionName\",vm:\"1\",version:\"DICOM\"},\"(0078,00B4)\":{tag:\"(0078,00B4)\",vr:\"SQ\",name:\"ImplantTemplateGroupVariationDimensionRankSequence\",vm:\"1\",version:\"DICOM\"},\"(0078,00B6)\":{tag:\"(0078,00B6)\",vr:\"US\",name:\"ReferencedImplantTemplateGroupMemberID\",vm:\"1\",version:\"DICOM\"},\"(0078,00B8)\":{tag:\"(0078,00B8)\",vr:\"US\",name:\"ImplantTemplateGroupVariationDimensionRank\",vm:\"1\",version:\"DICOM\"},\"(0080,0001)\":{tag:\"(0080,0001)\",vr:\"SQ\",name:\"SurfaceScanAcquisitionTypeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0080,0002)\":{tag:\"(0080,0002)\",vr:\"SQ\",name:\"SurfaceScanModeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0080,0003)\":{tag:\"(0080,0003)\",vr:\"SQ\",name:\"RegistrationMethodCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0080,0004)\":{tag:\"(0080,0004)\",vr:\"FD\",name:\"ShotDurationTime\",vm:\"1\",version:\"DICOM\"},\"(0080,0005)\":{tag:\"(0080,0005)\",vr:\"FD\",name:\"ShotOffsetTime\",vm:\"1\",version:\"DICOM\"},\"(0080,0006)\":{tag:\"(0080,0006)\",vr:\"US\",name:\"SurfacePointPresentationValueData\",vm:\"1-n\",version:\"DICOM\"},\"(0080,0007)\":{tag:\"(0080,0007)\",vr:\"US\",name:\"SurfacePointColorCIELabValueData\",vm:\"3-3n\",version:\"DICOM\"},\"(0080,0008)\":{tag:\"(0080,0008)\",vr:\"SQ\",name:\"UVMappingSequence\",vm:\"1\",version:\"DICOM\"},\"(0080,0009)\":{tag:\"(0080,0009)\",vr:\"SH\",name:\"TextureLabel\",vm:\"1\",version:\"DICOM\"},\"(0080,0010)\":{tag:\"(0080,0010)\",vr:\"OF\",name:\"UValueData\",vm:\"1-n\",version:\"DICOM\"},\"(0080,0011)\":{tag:\"(0080,0011)\",vr:\"OF\",name:\"VValueData\",vm:\"1-n\",version:\"DICOM\"},\"(0080,0012)\":{tag:\"(0080,0012)\",vr:\"SQ\",name:\"ReferencedTextureSequence\",vm:\"1\",version:\"DICOM\"},\"(0080,0013)\":{tag:\"(0080,0013)\",vr:\"SQ\",name:\"ReferencedSurfaceDataSequence\",vm:\"1\",version:\"DICOM\"},\"(0082,0001)\":{tag:\"(0082,0001)\",vr:\"CS\",name:\"AssessmentSummary\",vm:\"1\",version:\"DICOM\"},\"(0082,0003)\":{tag:\"(0082,0003)\",vr:\"UT\",name:\"AssessmentSummaryDescription\",vm:\"1\",version:\"DICOM\"},\"(0082,0004)\":{tag:\"(0082,0004)\",vr:\"SQ\",name:\"AssessedSOPInstanceSequence\",vm:\"1\",version:\"DICOM\"},\"(0082,0005)\":{tag:\"(0082,0005)\",vr:\"SQ\",name:\"ReferencedComparisonSOPInstanceSequence\",vm:\"1\",version:\"DICOM\"},\"(0082,0006)\":{tag:\"(0082,0006)\",vr:\"UL\",name:\"NumberOfAssessmentObservations\",vm:\"1\",version:\"DICOM\"},\"(0082,0007)\":{tag:\"(0082,0007)\",vr:\"SQ\",name:\"AssessmentObservationsSequence\",vm:\"1\",version:\"DICOM\"},\"(0082,0008)\":{tag:\"(0082,0008)\",vr:\"CS\",name:\"ObservationSignificance\",vm:\"1\",version:\"DICOM\"},\"(0082,000A)\":{tag:\"(0082,000A)\",vr:\"UT\",name:\"ObservationDescription\",vm:\"1\",version:\"DICOM\"},\"(0082,000C)\":{tag:\"(0082,000C)\",vr:\"SQ\",name:\"StructuredConstraintObservationSequence\",vm:\"1\",version:\"DICOM\"},\"(0082,0010)\":{tag:\"(0082,0010)\",vr:\"SQ\",name:\"AssessedAttributeValueSequence\",vm:\"1\",version:\"DICOM\"},\"(0082,0016)\":{tag:\"(0082,0016)\",vr:\"LO\",name:\"AssessmentSetID\",vm:\"1\",version:\"DICOM\"},\"(0082,0017)\":{tag:\"(0082,0017)\",vr:\"SQ\",name:\"AssessmentRequesterSequence\",vm:\"1\",version:\"DICOM\"},\"(0082,0018)\":{tag:\"(0082,0018)\",vr:\"LO\",name:\"SelectorAttributeName\",vm:\"1\",version:\"DICOM\"},\"(0082,0019)\":{tag:\"(0082,0019)\",vr:\"LO\",name:\"SelectorAttributeKeyword\",vm:\"1\",version:\"DICOM\"},\"(0082,0021)\":{tag:\"(0082,0021)\",vr:\"SQ\",name:\"AssessmentTypeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0082,0022)\":{tag:\"(0082,0022)\",vr:\"SQ\",name:\"ObservationBasisCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0082,0023)\":{tag:\"(0082,0023)\",vr:\"LO\",name:\"AssessmentLabel\",vm:\"1\",version:\"DICOM\"},\"(0082,0032)\":{tag:\"(0082,0032)\",vr:\"CS\",name:\"ConstraintType\",vm:\"1\",version:\"DICOM\"},\"(0082,0033)\":{tag:\"(0082,0033)\",vr:\"UT\",name:\"SpecificationSelectionGuidance\",vm:\"1\",version:\"DICOM\"},\"(0082,0034)\":{tag:\"(0082,0034)\",vr:\"SQ\",name:\"ConstraintValueSequence\",vm:\"1\",version:\"DICOM\"},\"(0082,0035)\":{tag:\"(0082,0035)\",vr:\"SQ\",name:\"RecommendedDefaultValueSequence\",vm:\"1\",version:\"DICOM\"},\"(0082,0036)\":{tag:\"(0082,0036)\",vr:\"CS\",name:\"ConstraintViolationSignificance\",vm:\"1\",version:\"DICOM\"},\"(0082,0037)\":{tag:\"(0082,0037)\",vr:\"UT\",name:\"ConstraintViolationCondition\",vm:\"1\",version:\"DICOM\"},\"(0082,0038)\":{tag:\"(0082,0038)\",vr:\"CS\",name:\"ModifiableConstraintFlag\",vm:\"1\",version:\"DICOM\"},\"(0088,0130)\":{tag:\"(0088,0130)\",vr:\"SH\",name:\"StorageMediaFileSetID\",vm:\"1\",version:\"DICOM\"},\"(0088,0140)\":{tag:\"(0088,0140)\",vr:\"UI\",name:\"StorageMediaFileSetUID\",vm:\"1\",version:\"DICOM\"},\"(0088,0200)\":{tag:\"(0088,0200)\",vr:\"SQ\",name:\"IconImageSequence\",vm:\"1\",version:\"DICOM\"},\"(0100,0410)\":{tag:\"(0100,0410)\",vr:\"CS\",name:\"SOPInstanceStatus\",vm:\"1\",version:\"DICOM\"},\"(0100,0420)\":{tag:\"(0100,0420)\",vr:\"DT\",name:\"SOPAuthorizationDateTime\",vm:\"1\",version:\"DICOM\"},\"(0100,0424)\":{tag:\"(0100,0424)\",vr:\"LT\",name:\"SOPAuthorizationComment\",vm:\"1\",version:\"DICOM\"},\"(0100,0426)\":{tag:\"(0100,0426)\",vr:\"LO\",name:\"AuthorizationEquipmentCertificationNumber\",vm:\"1\",version:\"DICOM\"},\"(0400,0005)\":{tag:\"(0400,0005)\",vr:\"US\",name:\"MACIDNumber\",vm:\"1\",version:\"DICOM\"},\"(0400,0010)\":{tag:\"(0400,0010)\",vr:\"UI\",name:\"MACCalculationTransferSyntaxUID\",vm:\"1\",version:\"DICOM\"},\"(0400,0015)\":{tag:\"(0400,0015)\",vr:\"CS\",name:\"MACAlgorithm\",vm:\"1\",version:\"DICOM\"},\"(0400,0020)\":{tag:\"(0400,0020)\",vr:\"AT\",name:\"DataElementsSigned\",vm:\"1-n\",version:\"DICOM\"},\"(0400,0100)\":{tag:\"(0400,0100)\",vr:\"UI\",name:\"DigitalSignatureUID\",vm:\"1\",version:\"DICOM\"},\"(0400,0105)\":{tag:\"(0400,0105)\",vr:\"DT\",name:\"DigitalSignatureDateTime\",vm:\"1\",version:\"DICOM\"},\"(0400,0110)\":{tag:\"(0400,0110)\",vr:\"CS\",name:\"CertificateType\",vm:\"1\",version:\"DICOM\"},\"(0400,0115)\":{tag:\"(0400,0115)\",vr:\"OB\",name:\"CertificateOfSigner\",vm:\"1\",version:\"DICOM\"},\"(0400,0120)\":{tag:\"(0400,0120)\",vr:\"OB\",name:\"Signature\",vm:\"1\",version:\"DICOM\"},\"(0400,0305)\":{tag:\"(0400,0305)\",vr:\"CS\",name:\"CertifiedTimestampType\",vm:\"1\",version:\"DICOM\"},\"(0400,0310)\":{tag:\"(0400,0310)\",vr:\"OB\",name:\"CertifiedTimestamp\",vm:\"1\",version:\"DICOM\"},\"(0400,0401)\":{tag:\"(0400,0401)\",vr:\"SQ\",name:\"DigitalSignaturePurposeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(0400,0402)\":{tag:\"(0400,0402)\",vr:\"SQ\",name:\"ReferencedDigitalSignatureSequence\",vm:\"1\",version:\"DICOM\"},\"(0400,0403)\":{tag:\"(0400,0403)\",vr:\"SQ\",name:\"ReferencedSOPInstanceMACSequence\",vm:\"1\",version:\"DICOM\"},\"(0400,0404)\":{tag:\"(0400,0404)\",vr:\"OB\",name:\"MAC\",vm:\"1\",version:\"DICOM\"},\"(0400,0500)\":{tag:\"(0400,0500)\",vr:\"SQ\",name:\"EncryptedAttributesSequence\",vm:\"1\",version:\"DICOM\"},\"(0400,0510)\":{tag:\"(0400,0510)\",vr:\"UI\",name:\"EncryptedContentTransferSyntaxUID\",vm:\"1\",version:\"DICOM\"},\"(0400,0520)\":{tag:\"(0400,0520)\",vr:\"OB\",name:\"EncryptedContent\",vm:\"1\",version:\"DICOM\"},\"(0400,0550)\":{tag:\"(0400,0550)\",vr:\"SQ\",name:\"ModifiedAttributesSequence\",vm:\"1\",version:\"DICOM\"},\"(0400,0551)\":{tag:\"(0400,0551)\",vr:\"SQ\",name:\"NonconformingModifiedAttributesSequence\",vm:\"1\",version:\"DICOM\"},\"(0400,0552)\":{tag:\"(0400,0552)\",vr:\"OB\",name:\"NonconformingDataElementValue\",vm:\"1\",version:\"DICOM\"},\"(0400,0561)\":{tag:\"(0400,0561)\",vr:\"SQ\",name:\"OriginalAttributesSequence\",vm:\"1\",version:\"DICOM\"},\"(0400,0562)\":{tag:\"(0400,0562)\",vr:\"DT\",name:\"AttributeModificationDateTime\",vm:\"1\",version:\"DICOM\"},\"(0400,0563)\":{tag:\"(0400,0563)\",vr:\"LO\",name:\"ModifyingSystem\",vm:\"1\",version:\"DICOM\"},\"(0400,0564)\":{tag:\"(0400,0564)\",vr:\"LO\",name:\"SourceOfPreviousValues\",vm:\"1\",version:\"DICOM\"},\"(0400,0565)\":{tag:\"(0400,0565)\",vr:\"CS\",name:\"ReasonForTheAttributeModification\",vm:\"1\",version:\"DICOM\"},\"(0400,0600)\":{tag:\"(0400,0600)\",vr:\"CS\",name:\"InstanceOriginStatus\",vm:\"1\",version:\"DICOM\"},\"(2000,0010)\":{tag:\"(2000,0010)\",vr:\"IS\",name:\"NumberOfCopies\",vm:\"1\",version:\"DICOM\"},\"(2000,001E)\":{tag:\"(2000,001E)\",vr:\"SQ\",name:\"PrinterConfigurationSequence\",vm:\"1\",version:\"DICOM\"},\"(2000,0020)\":{tag:\"(2000,0020)\",vr:\"CS\",name:\"PrintPriority\",vm:\"1\",version:\"DICOM\"},\"(2000,0030)\":{tag:\"(2000,0030)\",vr:\"CS\",name:\"MediumType\",vm:\"1\",version:\"DICOM\"},\"(2000,0040)\":{tag:\"(2000,0040)\",vr:\"CS\",name:\"FilmDestination\",vm:\"1\",version:\"DICOM\"},\"(2000,0050)\":{tag:\"(2000,0050)\",vr:\"LO\",name:\"FilmSessionLabel\",vm:\"1\",version:\"DICOM\"},\"(2000,0060)\":{tag:\"(2000,0060)\",vr:\"IS\",name:\"MemoryAllocation\",vm:\"1\",version:\"DICOM\"},\"(2000,0061)\":{tag:\"(2000,0061)\",vr:\"IS\",name:\"MaximumMemoryAllocation\",vm:\"1\",version:\"DICOM\"},\"(2000,00A0)\":{tag:\"(2000,00A0)\",vr:\"US\",name:\"MemoryBitDepth\",vm:\"1\",version:\"DICOM\"},\"(2000,00A1)\":{tag:\"(2000,00A1)\",vr:\"US\",name:\"PrintingBitDepth\",vm:\"1\",version:\"DICOM\"},\"(2000,00A2)\":{tag:\"(2000,00A2)\",vr:\"SQ\",name:\"MediaInstalledSequence\",vm:\"1\",version:\"DICOM\"},\"(2000,00A4)\":{tag:\"(2000,00A4)\",vr:\"SQ\",name:\"OtherMediaAvailableSequence\",vm:\"1\",version:\"DICOM\"},\"(2000,00A8)\":{tag:\"(2000,00A8)\",vr:\"SQ\",name:\"SupportedImageDisplayFormatsSequence\",vm:\"1\",version:\"DICOM\"},\"(2000,0500)\":{tag:\"(2000,0500)\",vr:\"SQ\",name:\"ReferencedFilmBoxSequence\",vm:\"1\",version:\"DICOM\"},\"(2010,0010)\":{tag:\"(2010,0010)\",vr:\"ST\",name:\"ImageDisplayFormat\",vm:\"1\",version:\"DICOM\"},\"(2010,0030)\":{tag:\"(2010,0030)\",vr:\"CS\",name:\"AnnotationDisplayFormatID\",vm:\"1\",version:\"DICOM\"},\"(2010,0040)\":{tag:\"(2010,0040)\",vr:\"CS\",name:\"FilmOrientation\",vm:\"1\",version:\"DICOM\"},\"(2010,0050)\":{tag:\"(2010,0050)\",vr:\"CS\",name:\"FilmSizeID\",vm:\"1\",version:\"DICOM\"},\"(2010,0052)\":{tag:\"(2010,0052)\",vr:\"CS\",name:\"PrinterResolutionID\",vm:\"1\",version:\"DICOM\"},\"(2010,0054)\":{tag:\"(2010,0054)\",vr:\"CS\",name:\"DefaultPrinterResolutionID\",vm:\"1\",version:\"DICOM\"},\"(2010,0060)\":{tag:\"(2010,0060)\",vr:\"CS\",name:\"MagnificationType\",vm:\"1\",version:\"DICOM\"},\"(2010,0080)\":{tag:\"(2010,0080)\",vr:\"CS\",name:\"SmoothingType\",vm:\"1\",version:\"DICOM\"},\"(2010,00A6)\":{tag:\"(2010,00A6)\",vr:\"CS\",name:\"DefaultMagnificationType\",vm:\"1\",version:\"DICOM\"},\"(2010,00A7)\":{tag:\"(2010,00A7)\",vr:\"CS\",name:\"OtherMagnificationTypesAvailable\",vm:\"1-n\",version:\"DICOM\"},\"(2010,00A8)\":{tag:\"(2010,00A8)\",vr:\"CS\",name:\"DefaultSmoothingType\",vm:\"1\",version:\"DICOM\"},\"(2010,00A9)\":{tag:\"(2010,00A9)\",vr:\"CS\",name:\"OtherSmoothingTypesAvailable\",vm:\"1-n\",version:\"DICOM\"},\"(2010,0100)\":{tag:\"(2010,0100)\",vr:\"CS\",name:\"BorderDensity\",vm:\"1\",version:\"DICOM\"},\"(2010,0110)\":{tag:\"(2010,0110)\",vr:\"CS\",name:\"EmptyImageDensity\",vm:\"1\",version:\"DICOM\"},\"(2010,0120)\":{tag:\"(2010,0120)\",vr:\"US\",name:\"MinDensity\",vm:\"1\",version:\"DICOM\"},\"(2010,0130)\":{tag:\"(2010,0130)\",vr:\"US\",name:\"MaxDensity\",vm:\"1\",version:\"DICOM\"},\"(2010,0140)\":{tag:\"(2010,0140)\",vr:\"CS\",name:\"Trim\",vm:\"1\",version:\"DICOM\"},\"(2010,0150)\":{tag:\"(2010,0150)\",vr:\"ST\",name:\"ConfigurationInformation\",vm:\"1\",version:\"DICOM\"},\"(2010,0152)\":{tag:\"(2010,0152)\",vr:\"LT\",name:\"ConfigurationInformationDescription\",vm:\"1\",version:\"DICOM\"},\"(2010,0154)\":{tag:\"(2010,0154)\",vr:\"IS\",name:\"MaximumCollatedFilms\",vm:\"1\",version:\"DICOM\"},\"(2010,015E)\":{tag:\"(2010,015E)\",vr:\"US\",name:\"Illumination\",vm:\"1\",version:\"DICOM\"},\"(2010,0160)\":{tag:\"(2010,0160)\",vr:\"US\",name:\"ReflectedAmbientLight\",vm:\"1\",version:\"DICOM\"},\"(2010,0376)\":{tag:\"(2010,0376)\",vr:\"DS\",name:\"PrinterPixelSpacing\",vm:\"2\",version:\"DICOM\"},\"(2010,0500)\":{tag:\"(2010,0500)\",vr:\"SQ\",name:\"ReferencedFilmSessionSequence\",vm:\"1\",version:\"DICOM\"},\"(2010,0510)\":{tag:\"(2010,0510)\",vr:\"SQ\",name:\"ReferencedImageBoxSequence\",vm:\"1\",version:\"DICOM\"},\"(2010,0520)\":{tag:\"(2010,0520)\",vr:\"SQ\",name:\"ReferencedBasicAnnotationBoxSequence\",vm:\"1\",version:\"DICOM\"},\"(2020,0010)\":{tag:\"(2020,0010)\",vr:\"US\",name:\"ImageBoxPosition\",vm:\"1\",version:\"DICOM\"},\"(2020,0020)\":{tag:\"(2020,0020)\",vr:\"CS\",name:\"Polarity\",vm:\"1\",version:\"DICOM\"},\"(2020,0030)\":{tag:\"(2020,0030)\",vr:\"DS\",name:\"RequestedImageSize\",vm:\"1\",version:\"DICOM\"},\"(2020,0040)\":{tag:\"(2020,0040)\",vr:\"CS\",name:\"RequestedDecimateCropBehavior\",vm:\"1\",version:\"DICOM\"},\"(2020,0050)\":{tag:\"(2020,0050)\",vr:\"CS\",name:\"RequestedResolutionID\",vm:\"1\",version:\"DICOM\"},\"(2020,00A0)\":{tag:\"(2020,00A0)\",vr:\"CS\",name:\"RequestedImageSizeFlag\",vm:\"1\",version:\"DICOM\"},\"(2020,00A2)\":{tag:\"(2020,00A2)\",vr:\"CS\",name:\"DecimateCropResult\",vm:\"1\",version:\"DICOM\"},\"(2020,0110)\":{tag:\"(2020,0110)\",vr:\"SQ\",name:\"BasicGrayscaleImageSequence\",vm:\"1\",version:\"DICOM\"},\"(2020,0111)\":{tag:\"(2020,0111)\",vr:\"SQ\",name:\"BasicColorImageSequence\",vm:\"1\",version:\"DICOM\"},\"(2030,0010)\":{tag:\"(2030,0010)\",vr:\"US\",name:\"AnnotationPosition\",vm:\"1\",version:\"DICOM\"},\"(2030,0020)\":{tag:\"(2030,0020)\",vr:\"LO\",name:\"TextString\",vm:\"1\",version:\"DICOM\"},\"(2050,0010)\":{tag:\"(2050,0010)\",vr:\"SQ\",name:\"PresentationLUTSequence\",vm:\"1\",version:\"DICOM\"},\"(2050,0020)\":{tag:\"(2050,0020)\",vr:\"CS\",name:\"PresentationLUTShape\",vm:\"1\",version:\"DICOM\"},\"(2050,0500)\":{tag:\"(2050,0500)\",vr:\"SQ\",name:\"ReferencedPresentationLUTSequence\",vm:\"1\",version:\"DICOM\"},\"(2100,0020)\":{tag:\"(2100,0020)\",vr:\"CS\",name:\"ExecutionStatus\",vm:\"1\",version:\"DICOM\"},\"(2100,0030)\":{tag:\"(2100,0030)\",vr:\"CS\",name:\"ExecutionStatusInfo\",vm:\"1\",version:\"DICOM\"},\"(2100,0040)\":{tag:\"(2100,0040)\",vr:\"DA\",name:\"CreationDate\",vm:\"1\",version:\"DICOM\"},\"(2100,0050)\":{tag:\"(2100,0050)\",vr:\"TM\",name:\"CreationTime\",vm:\"1\",version:\"DICOM\"},\"(2100,0070)\":{tag:\"(2100,0070)\",vr:\"AE\",name:\"Originator\",vm:\"1\",version:\"DICOM\"},\"(2100,0160)\":{tag:\"(2100,0160)\",vr:\"SH\",name:\"OwnerID\",vm:\"1\",version:\"DICOM\"},\"(2100,0170)\":{tag:\"(2100,0170)\",vr:\"IS\",name:\"NumberOfFilms\",vm:\"1\",version:\"DICOM\"},\"(2110,0010)\":{tag:\"(2110,0010)\",vr:\"CS\",name:\"PrinterStatus\",vm:\"1\",version:\"DICOM\"},\"(2110,0020)\":{tag:\"(2110,0020)\",vr:\"CS\",name:\"PrinterStatusInfo\",vm:\"1\",version:\"DICOM\"},\"(2110,0030)\":{tag:\"(2110,0030)\",vr:\"LO\",name:\"PrinterName\",vm:\"1\",version:\"DICOM\"},\"(2200,0001)\":{tag:\"(2200,0001)\",vr:\"CS\",name:\"LabelUsingInformationExtractedFromInstances\",vm:\"1\",version:\"DICOM\"},\"(2200,0002)\":{tag:\"(2200,0002)\",vr:\"UT\",name:\"LabelText\",vm:\"1\",version:\"DICOM\"},\"(2200,0003)\":{tag:\"(2200,0003)\",vr:\"CS\",name:\"LabelStyleSelection\",vm:\"1\",version:\"DICOM\"},\"(2200,0004)\":{tag:\"(2200,0004)\",vr:\"LT\",name:\"MediaDisposition\",vm:\"1\",version:\"DICOM\"},\"(2200,0005)\":{tag:\"(2200,0005)\",vr:\"LT\",name:\"BarcodeValue\",vm:\"1\",version:\"DICOM\"},\"(2200,0006)\":{tag:\"(2200,0006)\",vr:\"CS\",name:\"BarcodeSymbology\",vm:\"1\",version:\"DICOM\"},\"(2200,0007)\":{tag:\"(2200,0007)\",vr:\"CS\",name:\"AllowMediaSplitting\",vm:\"1\",version:\"DICOM\"},\"(2200,0008)\":{tag:\"(2200,0008)\",vr:\"CS\",name:\"IncludeNonDICOMObjects\",vm:\"1\",version:\"DICOM\"},\"(2200,0009)\":{tag:\"(2200,0009)\",vr:\"CS\",name:\"IncludeDisplayApplication\",vm:\"1\",version:\"DICOM\"},\"(2200,000A)\":{tag:\"(2200,000A)\",vr:\"CS\",name:\"PreserveCompositeInstancesAfterMediaCreation\",vm:\"1\",version:\"DICOM\"},\"(2200,000B)\":{tag:\"(2200,000B)\",vr:\"US\",name:\"TotalNumberOfPiecesOfMediaCreated\",vm:\"1\",version:\"DICOM\"},\"(2200,000C)\":{tag:\"(2200,000C)\",vr:\"LO\",name:\"RequestedMediaApplicationProfile\",vm:\"1\",version:\"DICOM\"},\"(2200,000D)\":{tag:\"(2200,000D)\",vr:\"SQ\",name:\"ReferencedStorageMediaSequence\",vm:\"1\",version:\"DICOM\"},\"(2200,000E)\":{tag:\"(2200,000E)\",vr:\"AT\",name:\"FailureAttributes\",vm:\"1-n\",version:\"DICOM\"},\"(2200,000F)\":{tag:\"(2200,000F)\",vr:\"CS\",name:\"AllowLossyCompression\",vm:\"1\",version:\"DICOM\"},\"(2200,0020)\":{tag:\"(2200,0020)\",vr:\"CS\",name:\"RequestPriority\",vm:\"1\",version:\"DICOM\"},\"(3002,0002)\":{tag:\"(3002,0002)\",vr:\"SH\",name:\"RTImageLabel\",vm:\"1\",version:\"DICOM\"},\"(3002,0003)\":{tag:\"(3002,0003)\",vr:\"LO\",name:\"RTImageName\",vm:\"1\",version:\"DICOM\"},\"(3002,0004)\":{tag:\"(3002,0004)\",vr:\"ST\",name:\"RTImageDescription\",vm:\"1\",version:\"DICOM\"},\"(3002,000A)\":{tag:\"(3002,000A)\",vr:\"CS\",name:\"ReportedValuesOrigin\",vm:\"1\",version:\"DICOM\"},\"(3002,000C)\":{tag:\"(3002,000C)\",vr:\"CS\",name:\"RTImagePlane\",vm:\"1\",version:\"DICOM\"},\"(3002,000D)\":{tag:\"(3002,000D)\",vr:\"DS\",name:\"XRayImageReceptorTranslation\",vm:\"3\",version:\"DICOM\"},\"(3002,000E)\":{tag:\"(3002,000E)\",vr:\"DS\",name:\"XRayImageReceptorAngle\",vm:\"1\",version:\"DICOM\"},\"(3002,0010)\":{tag:\"(3002,0010)\",vr:\"DS\",name:\"RTImageOrientation\",vm:\"6\",version:\"DICOM\"},\"(3002,0011)\":{tag:\"(3002,0011)\",vr:\"DS\",name:\"ImagePlanePixelSpacing\",vm:\"2\",version:\"DICOM\"},\"(3002,0012)\":{tag:\"(3002,0012)\",vr:\"DS\",name:\"RTImagePosition\",vm:\"2\",version:\"DICOM\"},\"(3002,0020)\":{tag:\"(3002,0020)\",vr:\"SH\",name:\"RadiationMachineName\",vm:\"1\",version:\"DICOM\"},\"(3002,0022)\":{tag:\"(3002,0022)\",vr:\"DS\",name:\"RadiationMachineSAD\",vm:\"1\",version:\"DICOM\"},\"(3002,0024)\":{tag:\"(3002,0024)\",vr:\"DS\",name:\"RadiationMachineSSD\",vm:\"1\",version:\"DICOM\"},\"(3002,0026)\":{tag:\"(3002,0026)\",vr:\"DS\",name:\"RTImageSID\",vm:\"1\",version:\"DICOM\"},\"(3002,0028)\":{tag:\"(3002,0028)\",vr:\"DS\",name:\"SourceToReferenceObjectDistance\",vm:\"1\",version:\"DICOM\"},\"(3002,0029)\":{tag:\"(3002,0029)\",vr:\"IS\",name:\"FractionNumber\",vm:\"1\",version:\"DICOM\"},\"(3002,0030)\":{tag:\"(3002,0030)\",vr:\"SQ\",name:\"ExposureSequence\",vm:\"1\",version:\"DICOM\"},\"(3002,0032)\":{tag:\"(3002,0032)\",vr:\"DS\",name:\"MetersetExposure\",vm:\"1\",version:\"DICOM\"},\"(3002,0034)\":{tag:\"(3002,0034)\",vr:\"DS\",name:\"DiaphragmPosition\",vm:\"4\",version:\"DICOM\"},\"(3002,0040)\":{tag:\"(3002,0040)\",vr:\"SQ\",name:\"FluenceMapSequence\",vm:\"1\",version:\"DICOM\"},\"(3002,0041)\":{tag:\"(3002,0041)\",vr:\"CS\",name:\"FluenceDataSource\",vm:\"1\",version:\"DICOM\"},\"(3002,0042)\":{tag:\"(3002,0042)\",vr:\"DS\",name:\"FluenceDataScale\",vm:\"1\",version:\"DICOM\"},\"(3002,0050)\":{tag:\"(3002,0050)\",vr:\"SQ\",name:\"PrimaryFluenceModeSequence\",vm:\"1\",version:\"DICOM\"},\"(3002,0051)\":{tag:\"(3002,0051)\",vr:\"CS\",name:\"FluenceMode\",vm:\"1\",version:\"DICOM\"},\"(3002,0052)\":{tag:\"(3002,0052)\",vr:\"SH\",name:\"FluenceModeID\",vm:\"1\",version:\"DICOM\"},\"(3004,0001)\":{tag:\"(3004,0001)\",vr:\"CS\",name:\"DVHType\",vm:\"1\",version:\"DICOM\"},\"(3004,0002)\":{tag:\"(3004,0002)\",vr:\"CS\",name:\"DoseUnits\",vm:\"1\",version:\"DICOM\"},\"(3004,0004)\":{tag:\"(3004,0004)\",vr:\"CS\",name:\"DoseType\",vm:\"1\",version:\"DICOM\"},\"(3004,0005)\":{tag:\"(3004,0005)\",vr:\"CS\",name:\"SpatialTransformOfDose\",vm:\"1\",version:\"DICOM\"},\"(3004,0006)\":{tag:\"(3004,0006)\",vr:\"LO\",name:\"DoseComment\",vm:\"1\",version:\"DICOM\"},\"(3004,0008)\":{tag:\"(3004,0008)\",vr:\"DS\",name:\"NormalizationPoint\",vm:\"3\",version:\"DICOM\"},\"(3004,000A)\":{tag:\"(3004,000A)\",vr:\"CS\",name:\"DoseSummationType\",vm:\"1\",version:\"DICOM\"},\"(3004,000C)\":{tag:\"(3004,000C)\",vr:\"DS\",name:\"GridFrameOffsetVector\",vm:\"2-n\",version:\"DICOM\"},\"(3004,000E)\":{tag:\"(3004,000E)\",vr:\"DS\",name:\"DoseGridScaling\",vm:\"1\",version:\"DICOM\"},\"(3004,0010)\":{tag:\"(3004,0010)\",vr:\"SQ\",name:\"RTDoseROISequence\",vm:\"1\",version:\"DICOM\"},\"(3004,0012)\":{tag:\"(3004,0012)\",vr:\"DS\",name:\"DoseValue\",vm:\"1\",version:\"DICOM\"},\"(3004,0014)\":{tag:\"(3004,0014)\",vr:\"CS\",name:\"TissueHeterogeneityCorrection\",vm:\"1-3\",version:\"DICOM\"},\"(3004,0040)\":{tag:\"(3004,0040)\",vr:\"DS\",name:\"DVHNormalizationPoint\",vm:\"3\",version:\"DICOM\"},\"(3004,0042)\":{tag:\"(3004,0042)\",vr:\"DS\",name:\"DVHNormalizationDoseValue\",vm:\"1\",version:\"DICOM\"},\"(3004,0050)\":{tag:\"(3004,0050)\",vr:\"SQ\",name:\"DVHSequence\",vm:\"1\",version:\"DICOM\"},\"(3004,0052)\":{tag:\"(3004,0052)\",vr:\"DS\",name:\"DVHDoseScaling\",vm:\"1\",version:\"DICOM\"},\"(3004,0054)\":{tag:\"(3004,0054)\",vr:\"CS\",name:\"DVHVolumeUnits\",vm:\"1\",version:\"DICOM\"},\"(3004,0056)\":{tag:\"(3004,0056)\",vr:\"IS\",name:\"DVHNumberOfBins\",vm:\"1\",version:\"DICOM\"},\"(3004,0058)\":{tag:\"(3004,0058)\",vr:\"DS\",name:\"DVHData\",vm:\"2-2n\",version:\"DICOM\"},\"(3004,0060)\":{tag:\"(3004,0060)\",vr:\"SQ\",name:\"DVHReferencedROISequence\",vm:\"1\",version:\"DICOM\"},\"(3004,0062)\":{tag:\"(3004,0062)\",vr:\"CS\",name:\"DVHROIContributionType\",vm:\"1\",version:\"DICOM\"},\"(3004,0070)\":{tag:\"(3004,0070)\",vr:\"DS\",name:\"DVHMinimumDose\",vm:\"1\",version:\"DICOM\"},\"(3004,0072)\":{tag:\"(3004,0072)\",vr:\"DS\",name:\"DVHMaximumDose\",vm:\"1\",version:\"DICOM\"},\"(3004,0074)\":{tag:\"(3004,0074)\",vr:\"DS\",name:\"DVHMeanDose\",vm:\"1\",version:\"DICOM\"},\"(3006,0002)\":{tag:\"(3006,0002)\",vr:\"SH\",name:\"StructureSetLabel\",vm:\"1\",version:\"DICOM\"},\"(3006,0004)\":{tag:\"(3006,0004)\",vr:\"LO\",name:\"StructureSetName\",vm:\"1\",version:\"DICOM\"},\"(3006,0006)\":{tag:\"(3006,0006)\",vr:\"ST\",name:\"StructureSetDescription\",vm:\"1\",version:\"DICOM\"},\"(3006,0008)\":{tag:\"(3006,0008)\",vr:\"DA\",name:\"StructureSetDate\",vm:\"1\",version:\"DICOM\"},\"(3006,0009)\":{tag:\"(3006,0009)\",vr:\"TM\",name:\"StructureSetTime\",vm:\"1\",version:\"DICOM\"},\"(3006,0010)\":{tag:\"(3006,0010)\",vr:\"SQ\",name:\"ReferencedFrameOfReferenceSequence\",vm:\"1\",version:\"DICOM\"},\"(3006,0012)\":{tag:\"(3006,0012)\",vr:\"SQ\",name:\"RTReferencedStudySequence\",vm:\"1\",version:\"DICOM\"},\"(3006,0014)\":{tag:\"(3006,0014)\",vr:\"SQ\",name:\"RTReferencedSeriesSequence\",vm:\"1\",version:\"DICOM\"},\"(3006,0016)\":{tag:\"(3006,0016)\",vr:\"SQ\",name:\"ContourImageSequence\",vm:\"1\",version:\"DICOM\"},\"(3006,0018)\":{tag:\"(3006,0018)\",vr:\"SQ\",name:\"PredecessorStructureSetSequence\",vm:\"1\",version:\"DICOM\"},\"(3006,0020)\":{tag:\"(3006,0020)\",vr:\"SQ\",name:\"StructureSetROISequence\",vm:\"1\",version:\"DICOM\"},\"(3006,0022)\":{tag:\"(3006,0022)\",vr:\"IS\",name:\"ROINumber\",vm:\"1\",version:\"DICOM\"},\"(3006,0024)\":{tag:\"(3006,0024)\",vr:\"UI\",name:\"ReferencedFrameOfReferenceUID\",vm:\"1\",version:\"DICOM\"},\"(3006,0026)\":{tag:\"(3006,0026)\",vr:\"LO\",name:\"ROIName\",vm:\"1\",version:\"DICOM\"},\"(3006,0028)\":{tag:\"(3006,0028)\",vr:\"ST\",name:\"ROIDescription\",vm:\"1\",version:\"DICOM\"},\"(3006,002A)\":{tag:\"(3006,002A)\",vr:\"IS\",name:\"ROIDisplayColor\",vm:\"3\",version:\"DICOM\"},\"(3006,002C)\":{tag:\"(3006,002C)\",vr:\"DS\",name:\"ROIVolume\",vm:\"1\",version:\"DICOM\"},\"(3006,0030)\":{tag:\"(3006,0030)\",vr:\"SQ\",name:\"RTRelatedROISequence\",vm:\"1\",version:\"DICOM\"},\"(3006,0033)\":{tag:\"(3006,0033)\",vr:\"CS\",name:\"RTROIRelationship\",vm:\"1\",version:\"DICOM\"},\"(3006,0036)\":{tag:\"(3006,0036)\",vr:\"CS\",name:\"ROIGenerationAlgorithm\",vm:\"1\",version:\"DICOM\"},\"(3006,0037)\":{tag:\"(3006,0037)\",vr:\"SQ\",name:\"ROIDerivationAlgorithmIdentificationSequence\",vm:\"1\",version:\"DICOM\"},\"(3006,0038)\":{tag:\"(3006,0038)\",vr:\"LO\",name:\"ROIGenerationDescription\",vm:\"1\",version:\"DICOM\"},\"(3006,0039)\":{tag:\"(3006,0039)\",vr:\"SQ\",name:\"ROIContourSequence\",vm:\"1\",version:\"DICOM\"},\"(3006,0040)\":{tag:\"(3006,0040)\",vr:\"SQ\",name:\"ContourSequence\",vm:\"1\",version:\"DICOM\"},\"(3006,0042)\":{tag:\"(3006,0042)\",vr:\"CS\",name:\"ContourGeometricType\",vm:\"1\",version:\"DICOM\"},\"(3006,0044)\":{tag:\"(3006,0044)\",vr:\"DS\",name:\"ContourSlabThickness\",vm:\"1\",version:\"DICOM\"},\"(3006,0045)\":{tag:\"(3006,0045)\",vr:\"DS\",name:\"ContourOffsetVector\",vm:\"3\",version:\"DICOM\"},\"(3006,0046)\":{tag:\"(3006,0046)\",vr:\"IS\",name:\"NumberOfContourPoints\",vm:\"1\",version:\"DICOM\"},\"(3006,0048)\":{tag:\"(3006,0048)\",vr:\"IS\",name:\"ContourNumber\",vm:\"1\",version:\"DICOM\"},\"(3006,0049)\":{tag:\"(3006,0049)\",vr:\"IS\",name:\"AttachedContours\",vm:\"1-n\",version:\"DICOM\"},\"(3006,004A)\":{tag:\"(3006,004A)\",vr:\"SQ\",name:\"SourcePixelPlanesCharacteristicsSequence\",vm:\"1\",version:\"DICOM\"},\"(3006,0050)\":{tag:\"(3006,0050)\",vr:\"DS\",name:\"ContourData\",vm:\"3-3n\",version:\"DICOM\"},\"(3006,0080)\":{tag:\"(3006,0080)\",vr:\"SQ\",name:\"RTROIObservationsSequence\",vm:\"1\",version:\"DICOM\"},\"(3006,0082)\":{tag:\"(3006,0082)\",vr:\"IS\",name:\"ObservationNumber\",vm:\"1\",version:\"DICOM\"},\"(3006,0084)\":{tag:\"(3006,0084)\",vr:\"IS\",name:\"ReferencedROINumber\",vm:\"1\",version:\"DICOM\"},\"(3006,0085)\":{tag:\"(3006,0085)\",vr:\"SH\",name:\"ROIObservationLabel\",vm:\"1\",version:\"DICOM\"},\"(3006,0086)\":{tag:\"(3006,0086)\",vr:\"SQ\",name:\"RTROIIdentificationCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(3006,0088)\":{tag:\"(3006,0088)\",vr:\"ST\",name:\"ROIObservationDescription\",vm:\"1\",version:\"DICOM\"},\"(3006,00A0)\":{tag:\"(3006,00A0)\",vr:\"SQ\",name:\"RelatedRTROIObservationsSequence\",vm:\"1\",version:\"DICOM\"},\"(3006,00A4)\":{tag:\"(3006,00A4)\",vr:\"CS\",name:\"RTROIInterpretedType\",vm:\"1\",version:\"DICOM\"},\"(3006,00A6)\":{tag:\"(3006,00A6)\",vr:\"PN\",name:\"ROIInterpreter\",vm:\"1\",version:\"DICOM\"},\"(3006,00B0)\":{tag:\"(3006,00B0)\",vr:\"SQ\",name:\"ROIPhysicalPropertiesSequence\",vm:\"1\",version:\"DICOM\"},\"(3006,00B2)\":{tag:\"(3006,00B2)\",vr:\"CS\",name:\"ROIPhysicalProperty\",vm:\"1\",version:\"DICOM\"},\"(3006,00B4)\":{tag:\"(3006,00B4)\",vr:\"DS\",name:\"ROIPhysicalPropertyValue\",vm:\"1\",version:\"DICOM\"},\"(3006,00B6)\":{tag:\"(3006,00B6)\",vr:\"SQ\",name:\"ROIElementalCompositionSequence\",vm:\"1\",version:\"DICOM\"},\"(3006,00B7)\":{tag:\"(3006,00B7)\",vr:\"US\",name:\"ROIElementalCompositionAtomicNumber\",vm:\"1\",version:\"DICOM\"},\"(3006,00B8)\":{tag:\"(3006,00B8)\",vr:\"FL\",name:\"ROIElementalCompositionAtomicMassFraction\",vm:\"1\",version:\"DICOM\"},\"(3006,00B9)\":{tag:\"(3006,00B9)\",vr:\"SQ\",name:\"AdditionalRTROIIdentificationCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(3006,00C6)\":{tag:\"(3006,00C6)\",vr:\"DS\",name:\"FrameOfReferenceTransformationMatrix\",vm:\"16\",version:\"DICOM\"},\"(3006,00C8)\":{tag:\"(3006,00C8)\",vr:\"LO\",name:\"FrameOfReferenceTransformationComment\",vm:\"1\",version:\"DICOM\"},\"(3006,00C9)\":{tag:\"(3006,00C9)\",vr:\"SQ\",name:\"PatientLocationCoordinatesSequence\",vm:\"1\",version:\"DICOM\"},\"(3006,00CA)\":{tag:\"(3006,00CA)\",vr:\"SQ\",name:\"PatientLocationCoordinatesCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(3006,00CB)\":{tag:\"(3006,00CB)\",vr:\"SQ\",name:\"PatientSupportPositionSequence\",vm:\"1\",version:\"DICOM\"},\"(3008,0010)\":{tag:\"(3008,0010)\",vr:\"SQ\",name:\"MeasuredDoseReferenceSequence\",vm:\"1\",version:\"DICOM\"},\"(3008,0012)\":{tag:\"(3008,0012)\",vr:\"ST\",name:\"MeasuredDoseDescription\",vm:\"1\",version:\"DICOM\"},\"(3008,0014)\":{tag:\"(3008,0014)\",vr:\"CS\",name:\"MeasuredDoseType\",vm:\"1\",version:\"DICOM\"},\"(3008,0016)\":{tag:\"(3008,0016)\",vr:\"DS\",name:\"MeasuredDoseValue\",vm:\"1\",version:\"DICOM\"},\"(3008,0020)\":{tag:\"(3008,0020)\",vr:\"SQ\",name:\"TreatmentSessionBeamSequence\",vm:\"1\",version:\"DICOM\"},\"(3008,0021)\":{tag:\"(3008,0021)\",vr:\"SQ\",name:\"TreatmentSessionIonBeamSequence\",vm:\"1\",version:\"DICOM\"},\"(3008,0022)\":{tag:\"(3008,0022)\",vr:\"IS\",name:\"CurrentFractionNumber\",vm:\"1\",version:\"DICOM\"},\"(3008,0024)\":{tag:\"(3008,0024)\",vr:\"DA\",name:\"TreatmentControlPointDate\",vm:\"1\",version:\"DICOM\"},\"(3008,0025)\":{tag:\"(3008,0025)\",vr:\"TM\",name:\"TreatmentControlPointTime\",vm:\"1\",version:\"DICOM\"},\"(3008,002A)\":{tag:\"(3008,002A)\",vr:\"CS\",name:\"TreatmentTerminationStatus\",vm:\"1\",version:\"DICOM\"},\"(3008,002B)\":{tag:\"(3008,002B)\",vr:\"SH\",name:\"TreatmentTerminationCode\",vm:\"1\",version:\"DICOM\"},\"(3008,002C)\":{tag:\"(3008,002C)\",vr:\"CS\",name:\"TreatmentVerificationStatus\",vm:\"1\",version:\"DICOM\"},\"(3008,0030)\":{tag:\"(3008,0030)\",vr:\"SQ\",name:\"ReferencedTreatmentRecordSequence\",vm:\"1\",version:\"DICOM\"},\"(3008,0032)\":{tag:\"(3008,0032)\",vr:\"DS\",name:\"SpecifiedPrimaryMeterset\",vm:\"1\",version:\"DICOM\"},\"(3008,0033)\":{tag:\"(3008,0033)\",vr:\"DS\",name:\"SpecifiedSecondaryMeterset\",vm:\"1\",version:\"DICOM\"},\"(3008,0036)\":{tag:\"(3008,0036)\",vr:\"DS\",name:\"DeliveredPrimaryMeterset\",vm:\"1\",version:\"DICOM\"},\"(3008,0037)\":{tag:\"(3008,0037)\",vr:\"DS\",name:\"DeliveredSecondaryMeterset\",vm:\"1\",version:\"DICOM\"},\"(3008,003A)\":{tag:\"(3008,003A)\",vr:\"DS\",name:\"SpecifiedTreatmentTime\",vm:\"1\",version:\"DICOM\"},\"(3008,003B)\":{tag:\"(3008,003B)\",vr:\"DS\",name:\"DeliveredTreatmentTime\",vm:\"1\",version:\"DICOM\"},\"(3008,0040)\":{tag:\"(3008,0040)\",vr:\"SQ\",name:\"ControlPointDeliverySequence\",vm:\"1\",version:\"DICOM\"},\"(3008,0041)\":{tag:\"(3008,0041)\",vr:\"SQ\",name:\"IonControlPointDeliverySequence\",vm:\"1\",version:\"DICOM\"},\"(3008,0042)\":{tag:\"(3008,0042)\",vr:\"DS\",name:\"SpecifiedMeterset\",vm:\"1\",version:\"DICOM\"},\"(3008,0044)\":{tag:\"(3008,0044)\",vr:\"DS\",name:\"DeliveredMeterset\",vm:\"1\",version:\"DICOM\"},\"(3008,0045)\":{tag:\"(3008,0045)\",vr:\"FL\",name:\"MetersetRateSet\",vm:\"1\",version:\"DICOM\"},\"(3008,0046)\":{tag:\"(3008,0046)\",vr:\"FL\",name:\"MetersetRateDelivered\",vm:\"1\",version:\"DICOM\"},\"(3008,0047)\":{tag:\"(3008,0047)\",vr:\"FL\",name:\"ScanSpotMetersetsDelivered\",vm:\"1-n\",version:\"DICOM\"},\"(3008,0048)\":{tag:\"(3008,0048)\",vr:\"DS\",name:\"DoseRateDelivered\",vm:\"1\",version:\"DICOM\"},\"(3008,0050)\":{tag:\"(3008,0050)\",vr:\"SQ\",name:\"TreatmentSummaryCalculatedDoseReferenceSequence\",vm:\"1\",version:\"DICOM\"},\"(3008,0052)\":{tag:\"(3008,0052)\",vr:\"DS\",name:\"CumulativeDoseToDoseReference\",vm:\"1\",version:\"DICOM\"},\"(3008,0054)\":{tag:\"(3008,0054)\",vr:\"DA\",name:\"FirstTreatmentDate\",vm:\"1\",version:\"DICOM\"},\"(3008,0056)\":{tag:\"(3008,0056)\",vr:\"DA\",name:\"MostRecentTreatmentDate\",vm:\"1\",version:\"DICOM\"},\"(3008,005A)\":{tag:\"(3008,005A)\",vr:\"IS\",name:\"NumberOfFractionsDelivered\",vm:\"1\",version:\"DICOM\"},\"(3008,0060)\":{tag:\"(3008,0060)\",vr:\"SQ\",name:\"OverrideSequence\",vm:\"1\",version:\"DICOM\"},\"(3008,0061)\":{tag:\"(3008,0061)\",vr:\"AT\",name:\"ParameterSequencePointer\",vm:\"1\",version:\"DICOM\"},\"(3008,0062)\":{tag:\"(3008,0062)\",vr:\"AT\",name:\"OverrideParameterPointer\",vm:\"1\",version:\"DICOM\"},\"(3008,0063)\":{tag:\"(3008,0063)\",vr:\"IS\",name:\"ParameterItemIndex\",vm:\"1\",version:\"DICOM\"},\"(3008,0064)\":{tag:\"(3008,0064)\",vr:\"IS\",name:\"MeasuredDoseReferenceNumber\",vm:\"1\",version:\"DICOM\"},\"(3008,0065)\":{tag:\"(3008,0065)\",vr:\"AT\",name:\"ParameterPointer\",vm:\"1\",version:\"DICOM\"},\"(3008,0066)\":{tag:\"(3008,0066)\",vr:\"ST\",name:\"OverrideReason\",vm:\"1\",version:\"DICOM\"},\"(3008,0067)\":{tag:\"(3008,0067)\",vr:\"US\",name:\"ParameterValueNumber\",vm:\"1\",version:\"DICOM\"},\"(3008,0068)\":{tag:\"(3008,0068)\",vr:\"SQ\",name:\"CorrectedParameterSequence\",vm:\"1\",version:\"DICOM\"},\"(3008,006A)\":{tag:\"(3008,006A)\",vr:\"FL\",name:\"CorrectionValue\",vm:\"1\",version:\"DICOM\"},\"(3008,0070)\":{tag:\"(3008,0070)\",vr:\"SQ\",name:\"CalculatedDoseReferenceSequence\",vm:\"1\",version:\"DICOM\"},\"(3008,0072)\":{tag:\"(3008,0072)\",vr:\"IS\",name:\"CalculatedDoseReferenceNumber\",vm:\"1\",version:\"DICOM\"},\"(3008,0074)\":{tag:\"(3008,0074)\",vr:\"ST\",name:\"CalculatedDoseReferenceDescription\",vm:\"1\",version:\"DICOM\"},\"(3008,0076)\":{tag:\"(3008,0076)\",vr:\"DS\",name:\"CalculatedDoseReferenceDoseValue\",vm:\"1\",version:\"DICOM\"},\"(3008,0078)\":{tag:\"(3008,0078)\",vr:\"DS\",name:\"StartMeterset\",vm:\"1\",version:\"DICOM\"},\"(3008,007A)\":{tag:\"(3008,007A)\",vr:\"DS\",name:\"EndMeterset\",vm:\"1\",version:\"DICOM\"},\"(3008,0080)\":{tag:\"(3008,0080)\",vr:\"SQ\",name:\"ReferencedMeasuredDoseReferenceSequence\",vm:\"1\",version:\"DICOM\"},\"(3008,0082)\":{tag:\"(3008,0082)\",vr:\"IS\",name:\"ReferencedMeasuredDoseReferenceNumber\",vm:\"1\",version:\"DICOM\"},\"(3008,0090)\":{tag:\"(3008,0090)\",vr:\"SQ\",name:\"ReferencedCalculatedDoseReferenceSequence\",vm:\"1\",version:\"DICOM\"},\"(3008,0092)\":{tag:\"(3008,0092)\",vr:\"IS\",name:\"ReferencedCalculatedDoseReferenceNumber\",vm:\"1\",version:\"DICOM\"},\"(3008,00A0)\":{tag:\"(3008,00A0)\",vr:\"SQ\",name:\"BeamLimitingDeviceLeafPairsSequence\",vm:\"1\",version:\"DICOM\"},\"(3008,00B0)\":{tag:\"(3008,00B0)\",vr:\"SQ\",name:\"RecordedWedgeSequence\",vm:\"1\",version:\"DICOM\"},\"(3008,00C0)\":{tag:\"(3008,00C0)\",vr:\"SQ\",name:\"RecordedCompensatorSequence\",vm:\"1\",version:\"DICOM\"},\"(3008,00D0)\":{tag:\"(3008,00D0)\",vr:\"SQ\",name:\"RecordedBlockSequence\",vm:\"1\",version:\"DICOM\"},\"(3008,00E0)\":{tag:\"(3008,00E0)\",vr:\"SQ\",name:\"TreatmentSummaryMeasuredDoseReferenceSequence\",vm:\"1\",version:\"DICOM\"},\"(3008,00F0)\":{tag:\"(3008,00F0)\",vr:\"SQ\",name:\"RecordedSnoutSequence\",vm:\"1\",version:\"DICOM\"},\"(3008,00F2)\":{tag:\"(3008,00F2)\",vr:\"SQ\",name:\"RecordedRangeShifterSequence\",vm:\"1\",version:\"DICOM\"},\"(3008,00F4)\":{tag:\"(3008,00F4)\",vr:\"SQ\",name:\"RecordedLateralSpreadingDeviceSequence\",vm:\"1\",version:\"DICOM\"},\"(3008,00F6)\":{tag:\"(3008,00F6)\",vr:\"SQ\",name:\"RecordedRangeModulatorSequence\",vm:\"1\",version:\"DICOM\"},\"(3008,0100)\":{tag:\"(3008,0100)\",vr:\"SQ\",name:\"RecordedSourceSequence\",vm:\"1\",version:\"DICOM\"},\"(3008,0105)\":{tag:\"(3008,0105)\",vr:\"LO\",name:\"SourceSerialNumber\",vm:\"1\",version:\"DICOM\"},\"(3008,0110)\":{tag:\"(3008,0110)\",vr:\"SQ\",name:\"TreatmentSessionApplicationSetupSequence\",vm:\"1\",version:\"DICOM\"},\"(3008,0116)\":{tag:\"(3008,0116)\",vr:\"CS\",name:\"ApplicationSetupCheck\",vm:\"1\",version:\"DICOM\"},\"(3008,0120)\":{tag:\"(3008,0120)\",vr:\"SQ\",name:\"RecordedBrachyAccessoryDeviceSequence\",vm:\"1\",version:\"DICOM\"},\"(3008,0122)\":{tag:\"(3008,0122)\",vr:\"IS\",name:\"ReferencedBrachyAccessoryDeviceNumber\",vm:\"1\",version:\"DICOM\"},\"(3008,0130)\":{tag:\"(3008,0130)\",vr:\"SQ\",name:\"RecordedChannelSequence\",vm:\"1\",version:\"DICOM\"},\"(3008,0132)\":{tag:\"(3008,0132)\",vr:\"DS\",name:\"SpecifiedChannelTotalTime\",vm:\"1\",version:\"DICOM\"},\"(3008,0134)\":{tag:\"(3008,0134)\",vr:\"DS\",name:\"DeliveredChannelTotalTime\",vm:\"1\",version:\"DICOM\"},\"(3008,0136)\":{tag:\"(3008,0136)\",vr:\"IS\",name:\"SpecifiedNumberOfPulses\",vm:\"1\",version:\"DICOM\"},\"(3008,0138)\":{tag:\"(3008,0138)\",vr:\"IS\",name:\"DeliveredNumberOfPulses\",vm:\"1\",version:\"DICOM\"},\"(3008,013A)\":{tag:\"(3008,013A)\",vr:\"DS\",name:\"SpecifiedPulseRepetitionInterval\",vm:\"1\",version:\"DICOM\"},\"(3008,013C)\":{tag:\"(3008,013C)\",vr:\"DS\",name:\"DeliveredPulseRepetitionInterval\",vm:\"1\",version:\"DICOM\"},\"(3008,0140)\":{tag:\"(3008,0140)\",vr:\"SQ\",name:\"RecordedSourceApplicatorSequence\",vm:\"1\",version:\"DICOM\"},\"(3008,0142)\":{tag:\"(3008,0142)\",vr:\"IS\",name:\"ReferencedSourceApplicatorNumber\",vm:\"1\",version:\"DICOM\"},\"(3008,0150)\":{tag:\"(3008,0150)\",vr:\"SQ\",name:\"RecordedChannelShieldSequence\",vm:\"1\",version:\"DICOM\"},\"(3008,0152)\":{tag:\"(3008,0152)\",vr:\"IS\",name:\"ReferencedChannelShieldNumber\",vm:\"1\",version:\"DICOM\"},\"(3008,0160)\":{tag:\"(3008,0160)\",vr:\"SQ\",name:\"BrachyControlPointDeliveredSequence\",vm:\"1\",version:\"DICOM\"},\"(3008,0162)\":{tag:\"(3008,0162)\",vr:\"DA\",name:\"SafePositionExitDate\",vm:\"1\",version:\"DICOM\"},\"(3008,0164)\":{tag:\"(3008,0164)\",vr:\"TM\",name:\"SafePositionExitTime\",vm:\"1\",version:\"DICOM\"},\"(3008,0166)\":{tag:\"(3008,0166)\",vr:\"DA\",name:\"SafePositionReturnDate\",vm:\"1\",version:\"DICOM\"},\"(3008,0168)\":{tag:\"(3008,0168)\",vr:\"TM\",name:\"SafePositionReturnTime\",vm:\"1\",version:\"DICOM\"},\"(3008,0171)\":{tag:\"(3008,0171)\",vr:\"SQ\",name:\"PulseSpecificBrachyControlPointDeliveredSequence\",vm:\"1\",version:\"DICOM\"},\"(3008,0172)\":{tag:\"(3008,0172)\",vr:\"US\",name:\"PulseNumber\",vm:\"1\",version:\"DICOM\"},\"(3008,0173)\":{tag:\"(3008,0173)\",vr:\"SQ\",name:\"BrachyPulseControlPointDeliveredSequence\",vm:\"1\",version:\"DICOM\"},\"(3008,0200)\":{tag:\"(3008,0200)\",vr:\"CS\",name:\"CurrentTreatmentStatus\",vm:\"1\",version:\"DICOM\"},\"(3008,0202)\":{tag:\"(3008,0202)\",vr:\"ST\",name:\"TreatmentStatusComment\",vm:\"1\",version:\"DICOM\"},\"(3008,0220)\":{tag:\"(3008,0220)\",vr:\"SQ\",name:\"FractionGroupSummarySequence\",vm:\"1\",version:\"DICOM\"},\"(3008,0223)\":{tag:\"(3008,0223)\",vr:\"IS\",name:\"ReferencedFractionNumber\",vm:\"1\",version:\"DICOM\"},\"(3008,0224)\":{tag:\"(3008,0224)\",vr:\"CS\",name:\"FractionGroupType\",vm:\"1\",version:\"DICOM\"},\"(3008,0230)\":{tag:\"(3008,0230)\",vr:\"CS\",name:\"BeamStopperPosition\",vm:\"1\",version:\"DICOM\"},\"(3008,0240)\":{tag:\"(3008,0240)\",vr:\"SQ\",name:\"FractionStatusSummarySequence\",vm:\"1\",version:\"DICOM\"},\"(3008,0250)\":{tag:\"(3008,0250)\",vr:\"DA\",name:\"TreatmentDate\",vm:\"1\",version:\"DICOM\"},\"(3008,0251)\":{tag:\"(3008,0251)\",vr:\"TM\",name:\"TreatmentTime\",vm:\"1\",version:\"DICOM\"},\"(300A,0002)\":{tag:\"(300A,0002)\",vr:\"SH\",name:\"RTPlanLabel\",vm:\"1\",version:\"DICOM\"},\"(300A,0003)\":{tag:\"(300A,0003)\",vr:\"LO\",name:\"RTPlanName\",vm:\"1\",version:\"DICOM\"},\"(300A,0004)\":{tag:\"(300A,0004)\",vr:\"ST\",name:\"RTPlanDescription\",vm:\"1\",version:\"DICOM\"},\"(300A,0006)\":{tag:\"(300A,0006)\",vr:\"DA\",name:\"RTPlanDate\",vm:\"1\",version:\"DICOM\"},\"(300A,0007)\":{tag:\"(300A,0007)\",vr:\"TM\",name:\"RTPlanTime\",vm:\"1\",version:\"DICOM\"},\"(300A,0009)\":{tag:\"(300A,0009)\",vr:\"LO\",name:\"TreatmentProtocols\",vm:\"1-n\",version:\"DICOM\"},\"(300A,000A)\":{tag:\"(300A,000A)\",vr:\"CS\",name:\"PlanIntent\",vm:\"1\",version:\"DICOM\"},\"(300A,000B)\":{tag:\"(300A,000B)\",vr:\"LO\",name:\"TreatmentSites\",vm:\"1-n\",version:\"DICOM\"},\"(300A,000C)\":{tag:\"(300A,000C)\",vr:\"CS\",name:\"RTPlanGeometry\",vm:\"1\",version:\"DICOM\"},\"(300A,000E)\":{tag:\"(300A,000E)\",vr:\"ST\",name:\"PrescriptionDescription\",vm:\"1\",version:\"DICOM\"},\"(300A,0010)\":{tag:\"(300A,0010)\",vr:\"SQ\",name:\"DoseReferenceSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0012)\":{tag:\"(300A,0012)\",vr:\"IS\",name:\"DoseReferenceNumber\",vm:\"1\",version:\"DICOM\"},\"(300A,0013)\":{tag:\"(300A,0013)\",vr:\"UI\",name:\"DoseReferenceUID\",vm:\"1\",version:\"DICOM\"},\"(300A,0014)\":{tag:\"(300A,0014)\",vr:\"CS\",name:\"DoseReferenceStructureType\",vm:\"1\",version:\"DICOM\"},\"(300A,0015)\":{tag:\"(300A,0015)\",vr:\"CS\",name:\"NominalBeamEnergyUnit\",vm:\"1\",version:\"DICOM\"},\"(300A,0016)\":{tag:\"(300A,0016)\",vr:\"LO\",name:\"DoseReferenceDescription\",vm:\"1\",version:\"DICOM\"},\"(300A,0018)\":{tag:\"(300A,0018)\",vr:\"DS\",name:\"DoseReferencePointCoordinates\",vm:\"3\",version:\"DICOM\"},\"(300A,001A)\":{tag:\"(300A,001A)\",vr:\"DS\",name:\"NominalPriorDose\",vm:\"1\",version:\"DICOM\"},\"(300A,0020)\":{tag:\"(300A,0020)\",vr:\"CS\",name:\"DoseReferenceType\",vm:\"1\",version:\"DICOM\"},\"(300A,0021)\":{tag:\"(300A,0021)\",vr:\"DS\",name:\"ConstraintWeight\",vm:\"1\",version:\"DICOM\"},\"(300A,0022)\":{tag:\"(300A,0022)\",vr:\"DS\",name:\"DeliveryWarningDose\",vm:\"1\",version:\"DICOM\"},\"(300A,0023)\":{tag:\"(300A,0023)\",vr:\"DS\",name:\"DeliveryMaximumDose\",vm:\"1\",version:\"DICOM\"},\"(300A,0025)\":{tag:\"(300A,0025)\",vr:\"DS\",name:\"TargetMinimumDose\",vm:\"1\",version:\"DICOM\"},\"(300A,0026)\":{tag:\"(300A,0026)\",vr:\"DS\",name:\"TargetPrescriptionDose\",vm:\"1\",version:\"DICOM\"},\"(300A,0027)\":{tag:\"(300A,0027)\",vr:\"DS\",name:\"TargetMaximumDose\",vm:\"1\",version:\"DICOM\"},\"(300A,0028)\":{tag:\"(300A,0028)\",vr:\"DS\",name:\"TargetUnderdoseVolumeFraction\",vm:\"1\",version:\"DICOM\"},\"(300A,002A)\":{tag:\"(300A,002A)\",vr:\"DS\",name:\"OrganAtRiskFullVolumeDose\",vm:\"1\",version:\"DICOM\"},\"(300A,002B)\":{tag:\"(300A,002B)\",vr:\"DS\",name:\"OrganAtRiskLimitDose\",vm:\"1\",version:\"DICOM\"},\"(300A,002C)\":{tag:\"(300A,002C)\",vr:\"DS\",name:\"OrganAtRiskMaximumDose\",vm:\"1\",version:\"DICOM\"},\"(300A,002D)\":{tag:\"(300A,002D)\",vr:\"DS\",name:\"OrganAtRiskOverdoseVolumeFraction\",vm:\"1\",version:\"DICOM\"},\"(300A,0040)\":{tag:\"(300A,0040)\",vr:\"SQ\",name:\"ToleranceTableSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0042)\":{tag:\"(300A,0042)\",vr:\"IS\",name:\"ToleranceTableNumber\",vm:\"1\",version:\"DICOM\"},\"(300A,0043)\":{tag:\"(300A,0043)\",vr:\"SH\",name:\"ToleranceTableLabel\",vm:\"1\",version:\"DICOM\"},\"(300A,0044)\":{tag:\"(300A,0044)\",vr:\"DS\",name:\"GantryAngleTolerance\",vm:\"1\",version:\"DICOM\"},\"(300A,0046)\":{tag:\"(300A,0046)\",vr:\"DS\",name:\"BeamLimitingDeviceAngleTolerance\",vm:\"1\",version:\"DICOM\"},\"(300A,0048)\":{tag:\"(300A,0048)\",vr:\"SQ\",name:\"BeamLimitingDeviceToleranceSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,004A)\":{tag:\"(300A,004A)\",vr:\"DS\",name:\"BeamLimitingDevicePositionTolerance\",vm:\"1\",version:\"DICOM\"},\"(300A,004B)\":{tag:\"(300A,004B)\",vr:\"FL\",name:\"SnoutPositionTolerance\",vm:\"1\",version:\"DICOM\"},\"(300A,004C)\":{tag:\"(300A,004C)\",vr:\"DS\",name:\"PatientSupportAngleTolerance\",vm:\"1\",version:\"DICOM\"},\"(300A,004E)\":{tag:\"(300A,004E)\",vr:\"DS\",name:\"TableTopEccentricAngleTolerance\",vm:\"1\",version:\"DICOM\"},\"(300A,004F)\":{tag:\"(300A,004F)\",vr:\"FL\",name:\"TableTopPitchAngleTolerance\",vm:\"1\",version:\"DICOM\"},\"(300A,0050)\":{tag:\"(300A,0050)\",vr:\"FL\",name:\"TableTopRollAngleTolerance\",vm:\"1\",version:\"DICOM\"},\"(300A,0051)\":{tag:\"(300A,0051)\",vr:\"DS\",name:\"TableTopVerticalPositionTolerance\",vm:\"1\",version:\"DICOM\"},\"(300A,0052)\":{tag:\"(300A,0052)\",vr:\"DS\",name:\"TableTopLongitudinalPositionTolerance\",vm:\"1\",version:\"DICOM\"},\"(300A,0053)\":{tag:\"(300A,0053)\",vr:\"DS\",name:\"TableTopLateralPositionTolerance\",vm:\"1\",version:\"DICOM\"},\"(300A,0055)\":{tag:\"(300A,0055)\",vr:\"CS\",name:\"RTPlanRelationship\",vm:\"1\",version:\"DICOM\"},\"(300A,0070)\":{tag:\"(300A,0070)\",vr:\"SQ\",name:\"FractionGroupSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0071)\":{tag:\"(300A,0071)\",vr:\"IS\",name:\"FractionGroupNumber\",vm:\"1\",version:\"DICOM\"},\"(300A,0072)\":{tag:\"(300A,0072)\",vr:\"LO\",name:\"FractionGroupDescription\",vm:\"1\",version:\"DICOM\"},\"(300A,0078)\":{tag:\"(300A,0078)\",vr:\"IS\",name:\"NumberOfFractionsPlanned\",vm:\"1\",version:\"DICOM\"},\"(300A,0079)\":{tag:\"(300A,0079)\",vr:\"IS\",name:\"NumberOfFractionPatternDigitsPerDay\",vm:\"1\",version:\"DICOM\"},\"(300A,007A)\":{tag:\"(300A,007A)\",vr:\"IS\",name:\"RepeatFractionCycleLength\",vm:\"1\",version:\"DICOM\"},\"(300A,007B)\":{tag:\"(300A,007B)\",vr:\"LT\",name:\"FractionPattern\",vm:\"1\",version:\"DICOM\"},\"(300A,0080)\":{tag:\"(300A,0080)\",vr:\"IS\",name:\"NumberOfBeams\",vm:\"1\",version:\"DICOM\"},\"(300A,0082)\":{tag:\"(300A,0082)\",vr:\"DS\",name:\"BeamDoseSpecificationPoint\",vm:\"3\",version:\"DICOM\"},\"(300A,0083)\":{tag:\"(300A,0083)\",vr:\"UI\",name:\"ReferencedDoseReferenceUID\",vm:\"1\",version:\"DICOM\"},\"(300A,0084)\":{tag:\"(300A,0084)\",vr:\"DS\",name:\"BeamDose\",vm:\"1\",version:\"DICOM\"},\"(300A,0086)\":{tag:\"(300A,0086)\",vr:\"DS\",name:\"BeamMeterset\",vm:\"1\",version:\"DICOM\"},\"(300A,008B)\":{tag:\"(300A,008B)\",vr:\"CS\",name:\"BeamDoseMeaning\",vm:\"1\",version:\"DICOM\"},\"(300A,008C)\":{tag:\"(300A,008C)\",vr:\"SQ\",name:\"BeamDoseVerificationControlPointSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,008D)\":{tag:\"(300A,008D)\",vr:\"FL\",name:\"AverageBeamDosePointDepth\",vm:\"1\",version:\"DICOM\"},\"(300A,008E)\":{tag:\"(300A,008E)\",vr:\"FL\",name:\"AverageBeamDosePointEquivalentDepth\",vm:\"1\",version:\"DICOM\"},\"(300A,008F)\":{tag:\"(300A,008F)\",vr:\"FL\",name:\"AverageBeamDosePointSSD\",vm:\"1\",version:\"DICOM\"},\"(300A,0090)\":{tag:\"(300A,0090)\",vr:\"CS\",name:\"BeamDoseType\",vm:\"1\",version:\"DICOM\"},\"(300A,0091)\":{tag:\"(300A,0091)\",vr:\"DS\",name:\"AlternateBeamDose\",vm:\"1\",version:\"DICOM\"},\"(300A,0092)\":{tag:\"(300A,0092)\",vr:\"CS\",name:\"AlternateBeamDoseType\",vm:\"1\",version:\"DICOM\"},\"(300A,0093)\":{tag:\"(300A,0093)\",vr:\"CS\",name:\"DepthValueAveragingFlag\",vm:\"1\",version:\"DICOM\"},\"(300A,0094)\":{tag:\"(300A,0094)\",vr:\"DS\",name:\"BeamDosePointSourceToExternalContourDistance\",vm:\"1\",version:\"DICOM\"},\"(300A,00A0)\":{tag:\"(300A,00A0)\",vr:\"IS\",name:\"NumberOfBrachyApplicationSetups\",vm:\"1\",version:\"DICOM\"},\"(300A,00A2)\":{tag:\"(300A,00A2)\",vr:\"DS\",name:\"BrachyApplicationSetupDoseSpecificationPoint\",vm:\"3\",version:\"DICOM\"},\"(300A,00A4)\":{tag:\"(300A,00A4)\",vr:\"DS\",name:\"BrachyApplicationSetupDose\",vm:\"1\",version:\"DICOM\"},\"(300A,00B0)\":{tag:\"(300A,00B0)\",vr:\"SQ\",name:\"BeamSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,00B2)\":{tag:\"(300A,00B2)\",vr:\"SH\",name:\"TreatmentMachineName\",vm:\"1\",version:\"DICOM\"},\"(300A,00B3)\":{tag:\"(300A,00B3)\",vr:\"CS\",name:\"PrimaryDosimeterUnit\",vm:\"1\",version:\"DICOM\"},\"(300A,00B4)\":{tag:\"(300A,00B4)\",vr:\"DS\",name:\"SourceAxisDistance\",vm:\"1\",version:\"DICOM\"},\"(300A,00B6)\":{tag:\"(300A,00B6)\",vr:\"SQ\",name:\"BeamLimitingDeviceSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,00B8)\":{tag:\"(300A,00B8)\",vr:\"CS\",name:\"RTBeamLimitingDeviceType\",vm:\"1\",version:\"DICOM\"},\"(300A,00BA)\":{tag:\"(300A,00BA)\",vr:\"DS\",name:\"SourceToBeamLimitingDeviceDistance\",vm:\"1\",version:\"DICOM\"},\"(300A,00BB)\":{tag:\"(300A,00BB)\",vr:\"FL\",name:\"IsocenterToBeamLimitingDeviceDistance\",vm:\"1\",version:\"DICOM\"},\"(300A,00BC)\":{tag:\"(300A,00BC)\",vr:\"IS\",name:\"NumberOfLeafJawPairs\",vm:\"1\",version:\"DICOM\"},\"(300A,00BE)\":{tag:\"(300A,00BE)\",vr:\"DS\",name:\"LeafPositionBoundaries\",vm:\"3-n\",version:\"DICOM\"},\"(300A,00C0)\":{tag:\"(300A,00C0)\",vr:\"IS\",name:\"BeamNumber\",vm:\"1\",version:\"DICOM\"},\"(300A,00C2)\":{tag:\"(300A,00C2)\",vr:\"LO\",name:\"BeamName\",vm:\"1\",version:\"DICOM\"},\"(300A,00C3)\":{tag:\"(300A,00C3)\",vr:\"ST\",name:\"BeamDescription\",vm:\"1\",version:\"DICOM\"},\"(300A,00C4)\":{tag:\"(300A,00C4)\",vr:\"CS\",name:\"BeamType\",vm:\"1\",version:\"DICOM\"},\"(300A,00C5)\":{tag:\"(300A,00C5)\",vr:\"FD\",name:\"BeamDeliveryDurationLimit\",vm:\"1\",version:\"DICOM\"},\"(300A,00C6)\":{tag:\"(300A,00C6)\",vr:\"CS\",name:\"RadiationType\",vm:\"1\",version:\"DICOM\"},\"(300A,00C7)\":{tag:\"(300A,00C7)\",vr:\"CS\",name:\"HighDoseTechniqueType\",vm:\"1\",version:\"DICOM\"},\"(300A,00C8)\":{tag:\"(300A,00C8)\",vr:\"IS\",name:\"ReferenceImageNumber\",vm:\"1\",version:\"DICOM\"},\"(300A,00CA)\":{tag:\"(300A,00CA)\",vr:\"SQ\",name:\"PlannedVerificationImageSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,00CC)\":{tag:\"(300A,00CC)\",vr:\"LO\",name:\"ImagingDeviceSpecificAcquisitionParameters\",vm:\"1-n\",version:\"DICOM\"},\"(300A,00CE)\":{tag:\"(300A,00CE)\",vr:\"CS\",name:\"TreatmentDeliveryType\",vm:\"1\",version:\"DICOM\"},\"(300A,00D0)\":{tag:\"(300A,00D0)\",vr:\"IS\",name:\"NumberOfWedges\",vm:\"1\",version:\"DICOM\"},\"(300A,00D1)\":{tag:\"(300A,00D1)\",vr:\"SQ\",name:\"WedgeSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,00D2)\":{tag:\"(300A,00D2)\",vr:\"IS\",name:\"WedgeNumber\",vm:\"1\",version:\"DICOM\"},\"(300A,00D3)\":{tag:\"(300A,00D3)\",vr:\"CS\",name:\"WedgeType\",vm:\"1\",version:\"DICOM\"},\"(300A,00D4)\":{tag:\"(300A,00D4)\",vr:\"SH\",name:\"WedgeID\",vm:\"1\",version:\"DICOM\"},\"(300A,00D5)\":{tag:\"(300A,00D5)\",vr:\"IS\",name:\"WedgeAngle\",vm:\"1\",version:\"DICOM\"},\"(300A,00D6)\":{tag:\"(300A,00D6)\",vr:\"DS\",name:\"WedgeFactor\",vm:\"1\",version:\"DICOM\"},\"(300A,00D7)\":{tag:\"(300A,00D7)\",vr:\"FL\",name:\"TotalWedgeTrayWaterEquivalentThickness\",vm:\"1\",version:\"DICOM\"},\"(300A,00D8)\":{tag:\"(300A,00D8)\",vr:\"DS\",name:\"WedgeOrientation\",vm:\"1\",version:\"DICOM\"},\"(300A,00D9)\":{tag:\"(300A,00D9)\",vr:\"FL\",name:\"IsocenterToWedgeTrayDistance\",vm:\"1\",version:\"DICOM\"},\"(300A,00DA)\":{tag:\"(300A,00DA)\",vr:\"DS\",name:\"SourceToWedgeTrayDistance\",vm:\"1\",version:\"DICOM\"},\"(300A,00DB)\":{tag:\"(300A,00DB)\",vr:\"FL\",name:\"WedgeThinEdgePosition\",vm:\"1\",version:\"DICOM\"},\"(300A,00DC)\":{tag:\"(300A,00DC)\",vr:\"SH\",name:\"BolusID\",vm:\"1\",version:\"DICOM\"},\"(300A,00DD)\":{tag:\"(300A,00DD)\",vr:\"ST\",name:\"BolusDescription\",vm:\"1\",version:\"DICOM\"},\"(300A,00DE)\":{tag:\"(300A,00DE)\",vr:\"DS\",name:\"EffectiveWedgeAngle\",vm:\"1\",version:\"DICOM\"},\"(300A,00E0)\":{tag:\"(300A,00E0)\",vr:\"IS\",name:\"NumberOfCompensators\",vm:\"1\",version:\"DICOM\"},\"(300A,00E1)\":{tag:\"(300A,00E1)\",vr:\"SH\",name:\"MaterialID\",vm:\"1\",version:\"DICOM\"},\"(300A,00E2)\":{tag:\"(300A,00E2)\",vr:\"DS\",name:\"TotalCompensatorTrayFactor\",vm:\"1\",version:\"DICOM\"},\"(300A,00E3)\":{tag:\"(300A,00E3)\",vr:\"SQ\",name:\"CompensatorSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,00E4)\":{tag:\"(300A,00E4)\",vr:\"IS\",name:\"CompensatorNumber\",vm:\"1\",version:\"DICOM\"},\"(300A,00E5)\":{tag:\"(300A,00E5)\",vr:\"SH\",name:\"CompensatorID\",vm:\"1\",version:\"DICOM\"},\"(300A,00E6)\":{tag:\"(300A,00E6)\",vr:\"DS\",name:\"SourceToCompensatorTrayDistance\",vm:\"1\",version:\"DICOM\"},\"(300A,00E7)\":{tag:\"(300A,00E7)\",vr:\"IS\",name:\"CompensatorRows\",vm:\"1\",version:\"DICOM\"},\"(300A,00E8)\":{tag:\"(300A,00E8)\",vr:\"IS\",name:\"CompensatorColumns\",vm:\"1\",version:\"DICOM\"},\"(300A,00E9)\":{tag:\"(300A,00E9)\",vr:\"DS\",name:\"CompensatorPixelSpacing\",vm:\"2\",version:\"DICOM\"},\"(300A,00EA)\":{tag:\"(300A,00EA)\",vr:\"DS\",name:\"CompensatorPosition\",vm:\"2\",version:\"DICOM\"},\"(300A,00EB)\":{tag:\"(300A,00EB)\",vr:\"DS\",name:\"CompensatorTransmissionData\",vm:\"1-n\",version:\"DICOM\"},\"(300A,00EC)\":{tag:\"(300A,00EC)\",vr:\"DS\",name:\"CompensatorThicknessData\",vm:\"1-n\",version:\"DICOM\"},\"(300A,00ED)\":{tag:\"(300A,00ED)\",vr:\"IS\",name:\"NumberOfBoli\",vm:\"1\",version:\"DICOM\"},\"(300A,00EE)\":{tag:\"(300A,00EE)\",vr:\"CS\",name:\"CompensatorType\",vm:\"1\",version:\"DICOM\"},\"(300A,00EF)\":{tag:\"(300A,00EF)\",vr:\"SH\",name:\"CompensatorTrayID\",vm:\"1\",version:\"DICOM\"},\"(300A,00F0)\":{tag:\"(300A,00F0)\",vr:\"IS\",name:\"NumberOfBlocks\",vm:\"1\",version:\"DICOM\"},\"(300A,00F2)\":{tag:\"(300A,00F2)\",vr:\"DS\",name:\"TotalBlockTrayFactor\",vm:\"1\",version:\"DICOM\"},\"(300A,00F3)\":{tag:\"(300A,00F3)\",vr:\"FL\",name:\"TotalBlockTrayWaterEquivalentThickness\",vm:\"1\",version:\"DICOM\"},\"(300A,00F4)\":{tag:\"(300A,00F4)\",vr:\"SQ\",name:\"BlockSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,00F5)\":{tag:\"(300A,00F5)\",vr:\"SH\",name:\"BlockTrayID\",vm:\"1\",version:\"DICOM\"},\"(300A,00F6)\":{tag:\"(300A,00F6)\",vr:\"DS\",name:\"SourceToBlockTrayDistance\",vm:\"1\",version:\"DICOM\"},\"(300A,00F7)\":{tag:\"(300A,00F7)\",vr:\"FL\",name:\"IsocenterToBlockTrayDistance\",vm:\"1\",version:\"DICOM\"},\"(300A,00F8)\":{tag:\"(300A,00F8)\",vr:\"CS\",name:\"BlockType\",vm:\"1\",version:\"DICOM\"},\"(300A,00F9)\":{tag:\"(300A,00F9)\",vr:\"LO\",name:\"AccessoryCode\",vm:\"1\",version:\"DICOM\"},\"(300A,00FA)\":{tag:\"(300A,00FA)\",vr:\"CS\",name:\"BlockDivergence\",vm:\"1\",version:\"DICOM\"},\"(300A,00FB)\":{tag:\"(300A,00FB)\",vr:\"CS\",name:\"BlockMountingPosition\",vm:\"1\",version:\"DICOM\"},\"(300A,00FC)\":{tag:\"(300A,00FC)\",vr:\"IS\",name:\"BlockNumber\",vm:\"1\",version:\"DICOM\"},\"(300A,00FE)\":{tag:\"(300A,00FE)\",vr:\"LO\",name:\"BlockName\",vm:\"1\",version:\"DICOM\"},\"(300A,0100)\":{tag:\"(300A,0100)\",vr:\"DS\",name:\"BlockThickness\",vm:\"1\",version:\"DICOM\"},\"(300A,0102)\":{tag:\"(300A,0102)\",vr:\"DS\",name:\"BlockTransmission\",vm:\"1\",version:\"DICOM\"},\"(300A,0104)\":{tag:\"(300A,0104)\",vr:\"IS\",name:\"BlockNumberOfPoints\",vm:\"1\",version:\"DICOM\"},\"(300A,0106)\":{tag:\"(300A,0106)\",vr:\"DS\",name:\"BlockData\",vm:\"2-2n\",version:\"DICOM\"},\"(300A,0107)\":{tag:\"(300A,0107)\",vr:\"SQ\",name:\"ApplicatorSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0108)\":{tag:\"(300A,0108)\",vr:\"SH\",name:\"ApplicatorID\",vm:\"1\",version:\"DICOM\"},\"(300A,0109)\":{tag:\"(300A,0109)\",vr:\"CS\",name:\"ApplicatorType\",vm:\"1\",version:\"DICOM\"},\"(300A,010A)\":{tag:\"(300A,010A)\",vr:\"LO\",name:\"ApplicatorDescription\",vm:\"1\",version:\"DICOM\"},\"(300A,010C)\":{tag:\"(300A,010C)\",vr:\"DS\",name:\"CumulativeDoseReferenceCoefficient\",vm:\"1\",version:\"DICOM\"},\"(300A,010E)\":{tag:\"(300A,010E)\",vr:\"DS\",name:\"FinalCumulativeMetersetWeight\",vm:\"1\",version:\"DICOM\"},\"(300A,0110)\":{tag:\"(300A,0110)\",vr:\"IS\",name:\"NumberOfControlPoints\",vm:\"1\",version:\"DICOM\"},\"(300A,0111)\":{tag:\"(300A,0111)\",vr:\"SQ\",name:\"ControlPointSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0112)\":{tag:\"(300A,0112)\",vr:\"IS\",name:\"ControlPointIndex\",vm:\"1\",version:\"DICOM\"},\"(300A,0114)\":{tag:\"(300A,0114)\",vr:\"DS\",name:\"NominalBeamEnergy\",vm:\"1\",version:\"DICOM\"},\"(300A,0115)\":{tag:\"(300A,0115)\",vr:\"DS\",name:\"DoseRateSet\",vm:\"1\",version:\"DICOM\"},\"(300A,0116)\":{tag:\"(300A,0116)\",vr:\"SQ\",name:\"WedgePositionSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0118)\":{tag:\"(300A,0118)\",vr:\"CS\",name:\"WedgePosition\",vm:\"1\",version:\"DICOM\"},\"(300A,011A)\":{tag:\"(300A,011A)\",vr:\"SQ\",name:\"BeamLimitingDevicePositionSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,011C)\":{tag:\"(300A,011C)\",vr:\"DS\",name:\"LeafJawPositions\",vm:\"2-2n\",version:\"DICOM\"},\"(300A,011E)\":{tag:\"(300A,011E)\",vr:\"DS\",name:\"GantryAngle\",vm:\"1\",version:\"DICOM\"},\"(300A,011F)\":{tag:\"(300A,011F)\",vr:\"CS\",name:\"GantryRotationDirection\",vm:\"1\",version:\"DICOM\"},\"(300A,0120)\":{tag:\"(300A,0120)\",vr:\"DS\",name:\"BeamLimitingDeviceAngle\",vm:\"1\",version:\"DICOM\"},\"(300A,0121)\":{tag:\"(300A,0121)\",vr:\"CS\",name:\"BeamLimitingDeviceRotationDirection\",vm:\"1\",version:\"DICOM\"},\"(300A,0122)\":{tag:\"(300A,0122)\",vr:\"DS\",name:\"PatientSupportAngle\",vm:\"1\",version:\"DICOM\"},\"(300A,0123)\":{tag:\"(300A,0123)\",vr:\"CS\",name:\"PatientSupportRotationDirection\",vm:\"1\",version:\"DICOM\"},\"(300A,0124)\":{tag:\"(300A,0124)\",vr:\"DS\",name:\"TableTopEccentricAxisDistance\",vm:\"1\",version:\"DICOM\"},\"(300A,0125)\":{tag:\"(300A,0125)\",vr:\"DS\",name:\"TableTopEccentricAngle\",vm:\"1\",version:\"DICOM\"},\"(300A,0126)\":{tag:\"(300A,0126)\",vr:\"CS\",name:\"TableTopEccentricRotationDirection\",vm:\"1\",version:\"DICOM\"},\"(300A,0128)\":{tag:\"(300A,0128)\",vr:\"DS\",name:\"TableTopVerticalPosition\",vm:\"1\",version:\"DICOM\"},\"(300A,0129)\":{tag:\"(300A,0129)\",vr:\"DS\",name:\"TableTopLongitudinalPosition\",vm:\"1\",version:\"DICOM\"},\"(300A,012A)\":{tag:\"(300A,012A)\",vr:\"DS\",name:\"TableTopLateralPosition\",vm:\"1\",version:\"DICOM\"},\"(300A,012C)\":{tag:\"(300A,012C)\",vr:\"DS\",name:\"IsocenterPosition\",vm:\"3\",version:\"DICOM\"},\"(300A,012E)\":{tag:\"(300A,012E)\",vr:\"DS\",name:\"SurfaceEntryPoint\",vm:\"3\",version:\"DICOM\"},\"(300A,0130)\":{tag:\"(300A,0130)\",vr:\"DS\",name:\"SourceToSurfaceDistance\",vm:\"1\",version:\"DICOM\"},\"(300A,0131)\":{tag:\"(300A,0131)\",vr:\"FL\",name:\"AverageBeamDosePointSourceToExternalContourSurfaceDistance\",vm:\"1\",version:\"DICOM\"},\"(300A,0132)\":{tag:\"(300A,0132)\",vr:\"FL\",name:\"SourceToExternalContourDistance\",vm:\"1\",version:\"DICOM\"},\"(300A,0133)\":{tag:\"(300A,0133)\",vr:\"FL\",name:\"ExternalContourEntryPoint\",vm:\"3\",version:\"DICOM\"},\"(300A,0134)\":{tag:\"(300A,0134)\",vr:\"DS\",name:\"CumulativeMetersetWeight\",vm:\"1\",version:\"DICOM\"},\"(300A,0140)\":{tag:\"(300A,0140)\",vr:\"FL\",name:\"TableTopPitchAngle\",vm:\"1\",version:\"DICOM\"},\"(300A,0142)\":{tag:\"(300A,0142)\",vr:\"CS\",name:\"TableTopPitchRotationDirection\",vm:\"1\",version:\"DICOM\"},\"(300A,0144)\":{tag:\"(300A,0144)\",vr:\"FL\",name:\"TableTopRollAngle\",vm:\"1\",version:\"DICOM\"},\"(300A,0146)\":{tag:\"(300A,0146)\",vr:\"CS\",name:\"TableTopRollRotationDirection\",vm:\"1\",version:\"DICOM\"},\"(300A,0148)\":{tag:\"(300A,0148)\",vr:\"FL\",name:\"HeadFixationAngle\",vm:\"1\",version:\"DICOM\"},\"(300A,014A)\":{tag:\"(300A,014A)\",vr:\"FL\",name:\"GantryPitchAngle\",vm:\"1\",version:\"DICOM\"},\"(300A,014C)\":{tag:\"(300A,014C)\",vr:\"CS\",name:\"GantryPitchRotationDirection\",vm:\"1\",version:\"DICOM\"},\"(300A,014E)\":{tag:\"(300A,014E)\",vr:\"FL\",name:\"GantryPitchAngleTolerance\",vm:\"1\",version:\"DICOM\"},\"(300A,0150)\":{tag:\"(300A,0150)\",vr:\"CS\",name:\"FixationEye\",vm:\"1\",version:\"DICOM\"},\"(300A,0151)\":{tag:\"(300A,0151)\",vr:\"DS\",name:\"ChairHeadFramePosition\",vm:\"1\",version:\"DICOM\"},\"(300A,0152)\":{tag:\"(300A,0152)\",vr:\"DS\",name:\"HeadFixationAngleTolerance\",vm:\"1\",version:\"DICOM\"},\"(300A,0153)\":{tag:\"(300A,0153)\",vr:\"DS\",name:\"ChairHeadFramePositionTolerance\",vm:\"1\",version:\"DICOM\"},\"(300A,0154)\":{tag:\"(300A,0154)\",vr:\"DS\",name:\"FixationLightAzimuthalAngleTolerance\",vm:\"1\",version:\"DICOM\"},\"(300A,0155)\":{tag:\"(300A,0155)\",vr:\"DS\",name:\"FixationLightPolarAngleTolerance\",vm:\"1\",version:\"DICOM\"},\"(300A,0180)\":{tag:\"(300A,0180)\",vr:\"SQ\",name:\"PatientSetupSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0182)\":{tag:\"(300A,0182)\",vr:\"IS\",name:\"PatientSetupNumber\",vm:\"1\",version:\"DICOM\"},\"(300A,0183)\":{tag:\"(300A,0183)\",vr:\"LO\",name:\"PatientSetupLabel\",vm:\"1\",version:\"DICOM\"},\"(300A,0184)\":{tag:\"(300A,0184)\",vr:\"LO\",name:\"PatientAdditionalPosition\",vm:\"1\",version:\"DICOM\"},\"(300A,0190)\":{tag:\"(300A,0190)\",vr:\"SQ\",name:\"FixationDeviceSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0192)\":{tag:\"(300A,0192)\",vr:\"CS\",name:\"FixationDeviceType\",vm:\"1\",version:\"DICOM\"},\"(300A,0194)\":{tag:\"(300A,0194)\",vr:\"SH\",name:\"FixationDeviceLabel\",vm:\"1\",version:\"DICOM\"},\"(300A,0196)\":{tag:\"(300A,0196)\",vr:\"ST\",name:\"FixationDeviceDescription\",vm:\"1\",version:\"DICOM\"},\"(300A,0198)\":{tag:\"(300A,0198)\",vr:\"SH\",name:\"FixationDevicePosition\",vm:\"1\",version:\"DICOM\"},\"(300A,0199)\":{tag:\"(300A,0199)\",vr:\"FL\",name:\"FixationDevicePitchAngle\",vm:\"1\",version:\"DICOM\"},\"(300A,019A)\":{tag:\"(300A,019A)\",vr:\"FL\",name:\"FixationDeviceRollAngle\",vm:\"1\",version:\"DICOM\"},\"(300A,01A0)\":{tag:\"(300A,01A0)\",vr:\"SQ\",name:\"ShieldingDeviceSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,01A2)\":{tag:\"(300A,01A2)\",vr:\"CS\",name:\"ShieldingDeviceType\",vm:\"1\",version:\"DICOM\"},\"(300A,01A4)\":{tag:\"(300A,01A4)\",vr:\"SH\",name:\"ShieldingDeviceLabel\",vm:\"1\",version:\"DICOM\"},\"(300A,01A6)\":{tag:\"(300A,01A6)\",vr:\"ST\",name:\"ShieldingDeviceDescription\",vm:\"1\",version:\"DICOM\"},\"(300A,01A8)\":{tag:\"(300A,01A8)\",vr:\"SH\",name:\"ShieldingDevicePosition\",vm:\"1\",version:\"DICOM\"},\"(300A,01B0)\":{tag:\"(300A,01B0)\",vr:\"CS\",name:\"SetupTechnique\",vm:\"1\",version:\"DICOM\"},\"(300A,01B2)\":{tag:\"(300A,01B2)\",vr:\"ST\",name:\"SetupTechniqueDescription\",vm:\"1\",version:\"DICOM\"},\"(300A,01B4)\":{tag:\"(300A,01B4)\",vr:\"SQ\",name:\"SetupDeviceSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,01B6)\":{tag:\"(300A,01B6)\",vr:\"CS\",name:\"SetupDeviceType\",vm:\"1\",version:\"DICOM\"},\"(300A,01B8)\":{tag:\"(300A,01B8)\",vr:\"SH\",name:\"SetupDeviceLabel\",vm:\"1\",version:\"DICOM\"},\"(300A,01BA)\":{tag:\"(300A,01BA)\",vr:\"ST\",name:\"SetupDeviceDescription\",vm:\"1\",version:\"DICOM\"},\"(300A,01BC)\":{tag:\"(300A,01BC)\",vr:\"DS\",name:\"SetupDeviceParameter\",vm:\"1\",version:\"DICOM\"},\"(300A,01D0)\":{tag:\"(300A,01D0)\",vr:\"ST\",name:\"SetupReferenceDescription\",vm:\"1\",version:\"DICOM\"},\"(300A,01D2)\":{tag:\"(300A,01D2)\",vr:\"DS\",name:\"TableTopVerticalSetupDisplacement\",vm:\"1\",version:\"DICOM\"},\"(300A,01D4)\":{tag:\"(300A,01D4)\",vr:\"DS\",name:\"TableTopLongitudinalSetupDisplacement\",vm:\"1\",version:\"DICOM\"},\"(300A,01D6)\":{tag:\"(300A,01D6)\",vr:\"DS\",name:\"TableTopLateralSetupDisplacement\",vm:\"1\",version:\"DICOM\"},\"(300A,0200)\":{tag:\"(300A,0200)\",vr:\"CS\",name:\"BrachyTreatmentTechnique\",vm:\"1\",version:\"DICOM\"},\"(300A,0202)\":{tag:\"(300A,0202)\",vr:\"CS\",name:\"BrachyTreatmentType\",vm:\"1\",version:\"DICOM\"},\"(300A,0206)\":{tag:\"(300A,0206)\",vr:\"SQ\",name:\"TreatmentMachineSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0210)\":{tag:\"(300A,0210)\",vr:\"SQ\",name:\"SourceSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0212)\":{tag:\"(300A,0212)\",vr:\"IS\",name:\"SourceNumber\",vm:\"1\",version:\"DICOM\"},\"(300A,0214)\":{tag:\"(300A,0214)\",vr:\"CS\",name:\"SourceType\",vm:\"1\",version:\"DICOM\"},\"(300A,0216)\":{tag:\"(300A,0216)\",vr:\"LO\",name:\"SourceManufacturer\",vm:\"1\",version:\"DICOM\"},\"(300A,0218)\":{tag:\"(300A,0218)\",vr:\"DS\",name:\"ActiveSourceDiameter\",vm:\"1\",version:\"DICOM\"},\"(300A,021A)\":{tag:\"(300A,021A)\",vr:\"DS\",name:\"ActiveSourceLength\",vm:\"1\",version:\"DICOM\"},\"(300A,021B)\":{tag:\"(300A,021B)\",vr:\"SH\",name:\"SourceModelID\",vm:\"1\",version:\"DICOM\"},\"(300A,021C)\":{tag:\"(300A,021C)\",vr:\"LO\",name:\"SourceDescription\",vm:\"1\",version:\"DICOM\"},\"(300A,0222)\":{tag:\"(300A,0222)\",vr:\"DS\",name:\"SourceEncapsulationNominalThickness\",vm:\"1\",version:\"DICOM\"},\"(300A,0224)\":{tag:\"(300A,0224)\",vr:\"DS\",name:\"SourceEncapsulationNominalTransmission\",vm:\"1\",version:\"DICOM\"},\"(300A,0226)\":{tag:\"(300A,0226)\",vr:\"LO\",name:\"SourceIsotopeName\",vm:\"1\",version:\"DICOM\"},\"(300A,0228)\":{tag:\"(300A,0228)\",vr:\"DS\",name:\"SourceIsotopeHalfLife\",vm:\"1\",version:\"DICOM\"},\"(300A,0229)\":{tag:\"(300A,0229)\",vr:\"CS\",name:\"SourceStrengthUnits\",vm:\"1\",version:\"DICOM\"},\"(300A,022A)\":{tag:\"(300A,022A)\",vr:\"DS\",name:\"ReferenceAirKermaRate\",vm:\"1\",version:\"DICOM\"},\"(300A,022B)\":{tag:\"(300A,022B)\",vr:\"DS\",name:\"SourceStrength\",vm:\"1\",version:\"DICOM\"},\"(300A,022C)\":{tag:\"(300A,022C)\",vr:\"DA\",name:\"SourceStrengthReferenceDate\",vm:\"1\",version:\"DICOM\"},\"(300A,022E)\":{tag:\"(300A,022E)\",vr:\"TM\",name:\"SourceStrengthReferenceTime\",vm:\"1\",version:\"DICOM\"},\"(300A,0230)\":{tag:\"(300A,0230)\",vr:\"SQ\",name:\"ApplicationSetupSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0232)\":{tag:\"(300A,0232)\",vr:\"CS\",name:\"ApplicationSetupType\",vm:\"1\",version:\"DICOM\"},\"(300A,0234)\":{tag:\"(300A,0234)\",vr:\"IS\",name:\"ApplicationSetupNumber\",vm:\"1\",version:\"DICOM\"},\"(300A,0236)\":{tag:\"(300A,0236)\",vr:\"LO\",name:\"ApplicationSetupName\",vm:\"1\",version:\"DICOM\"},\"(300A,0238)\":{tag:\"(300A,0238)\",vr:\"LO\",name:\"ApplicationSetupManufacturer\",vm:\"1\",version:\"DICOM\"},\"(300A,0240)\":{tag:\"(300A,0240)\",vr:\"IS\",name:\"TemplateNumber\",vm:\"1\",version:\"DICOM\"},\"(300A,0242)\":{tag:\"(300A,0242)\",vr:\"SH\",name:\"TemplateType\",vm:\"1\",version:\"DICOM\"},\"(300A,0244)\":{tag:\"(300A,0244)\",vr:\"LO\",name:\"TemplateName\",vm:\"1\",version:\"DICOM\"},\"(300A,0250)\":{tag:\"(300A,0250)\",vr:\"DS\",name:\"TotalReferenceAirKerma\",vm:\"1\",version:\"DICOM\"},\"(300A,0260)\":{tag:\"(300A,0260)\",vr:\"SQ\",name:\"BrachyAccessoryDeviceSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0262)\":{tag:\"(300A,0262)\",vr:\"IS\",name:\"BrachyAccessoryDeviceNumber\",vm:\"1\",version:\"DICOM\"},\"(300A,0263)\":{tag:\"(300A,0263)\",vr:\"SH\",name:\"BrachyAccessoryDeviceID\",vm:\"1\",version:\"DICOM\"},\"(300A,0264)\":{tag:\"(300A,0264)\",vr:\"CS\",name:\"BrachyAccessoryDeviceType\",vm:\"1\",version:\"DICOM\"},\"(300A,0266)\":{tag:\"(300A,0266)\",vr:\"LO\",name:\"BrachyAccessoryDeviceName\",vm:\"1\",version:\"DICOM\"},\"(300A,026A)\":{tag:\"(300A,026A)\",vr:\"DS\",name:\"BrachyAccessoryDeviceNominalThickness\",vm:\"1\",version:\"DICOM\"},\"(300A,026C)\":{tag:\"(300A,026C)\",vr:\"DS\",name:\"BrachyAccessoryDeviceNominalTransmission\",vm:\"1\",version:\"DICOM\"},\"(300A,0271)\":{tag:\"(300A,0271)\",vr:\"DS\",name:\"ChannelEffectiveLength\",vm:\"1\",version:\"DICOM\"},\"(300A,0272)\":{tag:\"(300A,0272)\",vr:\"DS\",name:\"ChannelInnerLength\",vm:\"1\",version:\"DICOM\"},\"(300A,0273)\":{tag:\"(300A,0273)\",vr:\"SH\",name:\"AfterloaderChannelID\",vm:\"1\",version:\"DICOM\"},\"(300A,0274)\":{tag:\"(300A,0274)\",vr:\"DS\",name:\"SourceApplicatorTipLength\",vm:\"1\",version:\"DICOM\"},\"(300A,0280)\":{tag:\"(300A,0280)\",vr:\"SQ\",name:\"ChannelSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0282)\":{tag:\"(300A,0282)\",vr:\"IS\",name:\"ChannelNumber\",vm:\"1\",version:\"DICOM\"},\"(300A,0284)\":{tag:\"(300A,0284)\",vr:\"DS\",name:\"ChannelLength\",vm:\"1\",version:\"DICOM\"},\"(300A,0286)\":{tag:\"(300A,0286)\",vr:\"DS\",name:\"ChannelTotalTime\",vm:\"1\",version:\"DICOM\"},\"(300A,0288)\":{tag:\"(300A,0288)\",vr:\"CS\",name:\"SourceMovementType\",vm:\"1\",version:\"DICOM\"},\"(300A,028A)\":{tag:\"(300A,028A)\",vr:\"IS\",name:\"NumberOfPulses\",vm:\"1\",version:\"DICOM\"},\"(300A,028C)\":{tag:\"(300A,028C)\",vr:\"DS\",name:\"PulseRepetitionInterval\",vm:\"1\",version:\"DICOM\"},\"(300A,0290)\":{tag:\"(300A,0290)\",vr:\"IS\",name:\"SourceApplicatorNumber\",vm:\"1\",version:\"DICOM\"},\"(300A,0291)\":{tag:\"(300A,0291)\",vr:\"SH\",name:\"SourceApplicatorID\",vm:\"1\",version:\"DICOM\"},\"(300A,0292)\":{tag:\"(300A,0292)\",vr:\"CS\",name:\"SourceApplicatorType\",vm:\"1\",version:\"DICOM\"},\"(300A,0294)\":{tag:\"(300A,0294)\",vr:\"LO\",name:\"SourceApplicatorName\",vm:\"1\",version:\"DICOM\"},\"(300A,0296)\":{tag:\"(300A,0296)\",vr:\"DS\",name:\"SourceApplicatorLength\",vm:\"1\",version:\"DICOM\"},\"(300A,0298)\":{tag:\"(300A,0298)\",vr:\"LO\",name:\"SourceApplicatorManufacturer\",vm:\"1\",version:\"DICOM\"},\"(300A,029C)\":{tag:\"(300A,029C)\",vr:\"DS\",name:\"SourceApplicatorWallNominalThickness\",vm:\"1\",version:\"DICOM\"},\"(300A,029E)\":{tag:\"(300A,029E)\",vr:\"DS\",name:\"SourceApplicatorWallNominalTransmission\",vm:\"1\",version:\"DICOM\"},\"(300A,02A0)\":{tag:\"(300A,02A0)\",vr:\"DS\",name:\"SourceApplicatorStepSize\",vm:\"1\",version:\"DICOM\"},\"(300A,02A2)\":{tag:\"(300A,02A2)\",vr:\"IS\",name:\"TransferTubeNumber\",vm:\"1\",version:\"DICOM\"},\"(300A,02A4)\":{tag:\"(300A,02A4)\",vr:\"DS\",name:\"TransferTubeLength\",vm:\"1\",version:\"DICOM\"},\"(300A,02B0)\":{tag:\"(300A,02B0)\",vr:\"SQ\",name:\"ChannelShieldSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,02B2)\":{tag:\"(300A,02B2)\",vr:\"IS\",name:\"ChannelShieldNumber\",vm:\"1\",version:\"DICOM\"},\"(300A,02B3)\":{tag:\"(300A,02B3)\",vr:\"SH\",name:\"ChannelShieldID\",vm:\"1\",version:\"DICOM\"},\"(300A,02B4)\":{tag:\"(300A,02B4)\",vr:\"LO\",name:\"ChannelShieldName\",vm:\"1\",version:\"DICOM\"},\"(300A,02B8)\":{tag:\"(300A,02B8)\",vr:\"DS\",name:\"ChannelShieldNominalThickness\",vm:\"1\",version:\"DICOM\"},\"(300A,02BA)\":{tag:\"(300A,02BA)\",vr:\"DS\",name:\"ChannelShieldNominalTransmission\",vm:\"1\",version:\"DICOM\"},\"(300A,02C8)\":{tag:\"(300A,02C8)\",vr:\"DS\",name:\"FinalCumulativeTimeWeight\",vm:\"1\",version:\"DICOM\"},\"(300A,02D0)\":{tag:\"(300A,02D0)\",vr:\"SQ\",name:\"BrachyControlPointSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,02D2)\":{tag:\"(300A,02D2)\",vr:\"DS\",name:\"ControlPointRelativePosition\",vm:\"1\",version:\"DICOM\"},\"(300A,02D4)\":{tag:\"(300A,02D4)\",vr:\"DS\",name:\"ControlPoint3DPosition\",vm:\"3\",version:\"DICOM\"},\"(300A,02D6)\":{tag:\"(300A,02D6)\",vr:\"DS\",name:\"CumulativeTimeWeight\",vm:\"1\",version:\"DICOM\"},\"(300A,02E0)\":{tag:\"(300A,02E0)\",vr:\"CS\",name:\"CompensatorDivergence\",vm:\"1\",version:\"DICOM\"},\"(300A,02E1)\":{tag:\"(300A,02E1)\",vr:\"CS\",name:\"CompensatorMountingPosition\",vm:\"1\",version:\"DICOM\"},\"(300A,02E2)\":{tag:\"(300A,02E2)\",vr:\"DS\",name:\"SourceToCompensatorDistance\",vm:\"1-n\",version:\"DICOM\"},\"(300A,02E3)\":{tag:\"(300A,02E3)\",vr:\"FL\",name:\"TotalCompensatorTrayWaterEquivalentThickness\",vm:\"1\",version:\"DICOM\"},\"(300A,02E4)\":{tag:\"(300A,02E4)\",vr:\"FL\",name:\"IsocenterToCompensatorTrayDistance\",vm:\"1\",version:\"DICOM\"},\"(300A,02E5)\":{tag:\"(300A,02E5)\",vr:\"FL\",name:\"CompensatorColumnOffset\",vm:\"1\",version:\"DICOM\"},\"(300A,02E6)\":{tag:\"(300A,02E6)\",vr:\"FL\",name:\"IsocenterToCompensatorDistances\",vm:\"1-n\",version:\"DICOM\"},\"(300A,02E7)\":{tag:\"(300A,02E7)\",vr:\"FL\",name:\"CompensatorRelativeStoppingPowerRatio\",vm:\"1\",version:\"DICOM\"},\"(300A,02E8)\":{tag:\"(300A,02E8)\",vr:\"FL\",name:\"CompensatorMillingToolDiameter\",vm:\"1\",version:\"DICOM\"},\"(300A,02EA)\":{tag:\"(300A,02EA)\",vr:\"SQ\",name:\"IonRangeCompensatorSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,02EB)\":{tag:\"(300A,02EB)\",vr:\"LT\",name:\"CompensatorDescription\",vm:\"1\",version:\"DICOM\"},\"(300A,0302)\":{tag:\"(300A,0302)\",vr:\"IS\",name:\"RadiationMassNumber\",vm:\"1\",version:\"DICOM\"},\"(300A,0304)\":{tag:\"(300A,0304)\",vr:\"IS\",name:\"RadiationAtomicNumber\",vm:\"1\",version:\"DICOM\"},\"(300A,0306)\":{tag:\"(300A,0306)\",vr:\"SS\",name:\"RadiationChargeState\",vm:\"1\",version:\"DICOM\"},\"(300A,0308)\":{tag:\"(300A,0308)\",vr:\"CS\",name:\"ScanMode\",vm:\"1\",version:\"DICOM\"},\"(300A,0309)\":{tag:\"(300A,0309)\",vr:\"CS\",name:\"ModulatedScanModeType\",vm:\"1\",version:\"DICOM\"},\"(300A,030A)\":{tag:\"(300A,030A)\",vr:\"FL\",name:\"VirtualSourceAxisDistances\",vm:\"2\",version:\"DICOM\"},\"(300A,030C)\":{tag:\"(300A,030C)\",vr:\"SQ\",name:\"SnoutSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,030D)\":{tag:\"(300A,030D)\",vr:\"FL\",name:\"SnoutPosition\",vm:\"1\",version:\"DICOM\"},\"(300A,030F)\":{tag:\"(300A,030F)\",vr:\"SH\",name:\"SnoutID\",vm:\"1\",version:\"DICOM\"},\"(300A,0312)\":{tag:\"(300A,0312)\",vr:\"IS\",name:\"NumberOfRangeShifters\",vm:\"1\",version:\"DICOM\"},\"(300A,0314)\":{tag:\"(300A,0314)\",vr:\"SQ\",name:\"RangeShifterSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0316)\":{tag:\"(300A,0316)\",vr:\"IS\",name:\"RangeShifterNumber\",vm:\"1\",version:\"DICOM\"},\"(300A,0318)\":{tag:\"(300A,0318)\",vr:\"SH\",name:\"RangeShifterID\",vm:\"1\",version:\"DICOM\"},\"(300A,0320)\":{tag:\"(300A,0320)\",vr:\"CS\",name:\"RangeShifterType\",vm:\"1\",version:\"DICOM\"},\"(300A,0322)\":{tag:\"(300A,0322)\",vr:\"LO\",name:\"RangeShifterDescription\",vm:\"1\",version:\"DICOM\"},\"(300A,0330)\":{tag:\"(300A,0330)\",vr:\"IS\",name:\"NumberOfLateralSpreadingDevices\",vm:\"1\",version:\"DICOM\"},\"(300A,0332)\":{tag:\"(300A,0332)\",vr:\"SQ\",name:\"LateralSpreadingDeviceSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0334)\":{tag:\"(300A,0334)\",vr:\"IS\",name:\"LateralSpreadingDeviceNumber\",vm:\"1\",version:\"DICOM\"},\"(300A,0336)\":{tag:\"(300A,0336)\",vr:\"SH\",name:\"LateralSpreadingDeviceID\",vm:\"1\",version:\"DICOM\"},\"(300A,0338)\":{tag:\"(300A,0338)\",vr:\"CS\",name:\"LateralSpreadingDeviceType\",vm:\"1\",version:\"DICOM\"},\"(300A,033A)\":{tag:\"(300A,033A)\",vr:\"LO\",name:\"LateralSpreadingDeviceDescription\",vm:\"1\",version:\"DICOM\"},\"(300A,033C)\":{tag:\"(300A,033C)\",vr:\"FL\",name:\"LateralSpreadingDeviceWaterEquivalentThickness\",vm:\"1\",version:\"DICOM\"},\"(300A,0340)\":{tag:\"(300A,0340)\",vr:\"IS\",name:\"NumberOfRangeModulators\",vm:\"1\",version:\"DICOM\"},\"(300A,0342)\":{tag:\"(300A,0342)\",vr:\"SQ\",name:\"RangeModulatorSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0344)\":{tag:\"(300A,0344)\",vr:\"IS\",name:\"RangeModulatorNumber\",vm:\"1\",version:\"DICOM\"},\"(300A,0346)\":{tag:\"(300A,0346)\",vr:\"SH\",name:\"RangeModulatorID\",vm:\"1\",version:\"DICOM\"},\"(300A,0348)\":{tag:\"(300A,0348)\",vr:\"CS\",name:\"RangeModulatorType\",vm:\"1\",version:\"DICOM\"},\"(300A,034A)\":{tag:\"(300A,034A)\",vr:\"LO\",name:\"RangeModulatorDescription\",vm:\"1\",version:\"DICOM\"},\"(300A,034C)\":{tag:\"(300A,034C)\",vr:\"SH\",name:\"BeamCurrentModulationID\",vm:\"1\",version:\"DICOM\"},\"(300A,0350)\":{tag:\"(300A,0350)\",vr:\"CS\",name:\"PatientSupportType\",vm:\"1\",version:\"DICOM\"},\"(300A,0352)\":{tag:\"(300A,0352)\",vr:\"SH\",name:\"PatientSupportID\",vm:\"1\",version:\"DICOM\"},\"(300A,0354)\":{tag:\"(300A,0354)\",vr:\"LO\",name:\"PatientSupportAccessoryCode\",vm:\"1\",version:\"DICOM\"},\"(300A,0355)\":{tag:\"(300A,0355)\",vr:\"LO\",name:\"TrayAccessoryCode\",vm:\"1\",version:\"DICOM\"},\"(300A,0356)\":{tag:\"(300A,0356)\",vr:\"FL\",name:\"FixationLightAzimuthalAngle\",vm:\"1\",version:\"DICOM\"},\"(300A,0358)\":{tag:\"(300A,0358)\",vr:\"FL\",name:\"FixationLightPolarAngle\",vm:\"1\",version:\"DICOM\"},\"(300A,035A)\":{tag:\"(300A,035A)\",vr:\"FL\",name:\"MetersetRate\",vm:\"1\",version:\"DICOM\"},\"(300A,0360)\":{tag:\"(300A,0360)\",vr:\"SQ\",name:\"RangeShifterSettingsSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0362)\":{tag:\"(300A,0362)\",vr:\"LO\",name:\"RangeShifterSetting\",vm:\"1\",version:\"DICOM\"},\"(300A,0364)\":{tag:\"(300A,0364)\",vr:\"FL\",name:\"IsocenterToRangeShifterDistance\",vm:\"1\",version:\"DICOM\"},\"(300A,0366)\":{tag:\"(300A,0366)\",vr:\"FL\",name:\"RangeShifterWaterEquivalentThickness\",vm:\"1\",version:\"DICOM\"},\"(300A,0370)\":{tag:\"(300A,0370)\",vr:\"SQ\",name:\"LateralSpreadingDeviceSettingsSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0372)\":{tag:\"(300A,0372)\",vr:\"LO\",name:\"LateralSpreadingDeviceSetting\",vm:\"1\",version:\"DICOM\"},\"(300A,0374)\":{tag:\"(300A,0374)\",vr:\"FL\",name:\"IsocenterToLateralSpreadingDeviceDistance\",vm:\"1\",version:\"DICOM\"},\"(300A,0380)\":{tag:\"(300A,0380)\",vr:\"SQ\",name:\"RangeModulatorSettingsSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0382)\":{tag:\"(300A,0382)\",vr:\"FL\",name:\"RangeModulatorGatingStartValue\",vm:\"1\",version:\"DICOM\"},\"(300A,0384)\":{tag:\"(300A,0384)\",vr:\"FL\",name:\"RangeModulatorGatingStopValue\",vm:\"1\",version:\"DICOM\"},\"(300A,0386)\":{tag:\"(300A,0386)\",vr:\"FL\",name:\"RangeModulatorGatingStartWaterEquivalentThickness\",vm:\"1\",version:\"DICOM\"},\"(300A,0388)\":{tag:\"(300A,0388)\",vr:\"FL\",name:\"RangeModulatorGatingStopWaterEquivalentThickness\",vm:\"1\",version:\"DICOM\"},\"(300A,038A)\":{tag:\"(300A,038A)\",vr:\"FL\",name:\"IsocenterToRangeModulatorDistance\",vm:\"1\",version:\"DICOM\"},\"(300A,038F)\":{tag:\"(300A,038F)\",vr:\"FL\",name:\"ScanSpotTimeOffset\",vm:\"1-n\",version:\"DICOM\"},\"(300A,0390)\":{tag:\"(300A,0390)\",vr:\"SH\",name:\"ScanSpotTuneID\",vm:\"1\",version:\"DICOM\"},\"(300A,0391)\":{tag:\"(300A,0391)\",vr:\"IS\",name:\"ScanSpotPrescribedIndices\",vm:\"1-n\",version:\"DICOM\"},\"(300A,0392)\":{tag:\"(300A,0392)\",vr:\"IS\",name:\"NumberOfScanSpotPositions\",vm:\"1\",version:\"DICOM\"},\"(300A,0393)\":{tag:\"(300A,0393)\",vr:\"CS\",name:\"ScanSpotReordered\",vm:\"1\",version:\"DICOM\"},\"(300A,0394)\":{tag:\"(300A,0394)\",vr:\"FL\",name:\"ScanSpotPositionMap\",vm:\"1-n\",version:\"DICOM\"},\"(300A,0395)\":{tag:\"(300A,0395)\",vr:\"CS\",name:\"ScanSpotReorderingAllowed\",vm:\"1\",version:\"DICOM\"},\"(300A,0396)\":{tag:\"(300A,0396)\",vr:\"FL\",name:\"ScanSpotMetersetWeights\",vm:\"1-n\",version:\"DICOM\"},\"(300A,0398)\":{tag:\"(300A,0398)\",vr:\"FL\",name:\"ScanningSpotSize\",vm:\"2\",version:\"DICOM\"},\"(300A,0399)\":{tag:\"(300A,0399)\",vr:\"FL\",name:\"ScanSpotSizesDelivered\",vm:\"2-2n\",version:\"DICOM\"},\"(300A,039A)\":{tag:\"(300A,039A)\",vr:\"IS\",name:\"NumberOfPaintings\",vm:\"1\",version:\"DICOM\"},\"(300A,03A0)\":{tag:\"(300A,03A0)\",vr:\"SQ\",name:\"IonToleranceTableSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,03A2)\":{tag:\"(300A,03A2)\",vr:\"SQ\",name:\"IonBeamSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,03A4)\":{tag:\"(300A,03A4)\",vr:\"SQ\",name:\"IonBeamLimitingDeviceSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,03A6)\":{tag:\"(300A,03A6)\",vr:\"SQ\",name:\"IonBlockSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,03A8)\":{tag:\"(300A,03A8)\",vr:\"SQ\",name:\"IonControlPointSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,03AA)\":{tag:\"(300A,03AA)\",vr:\"SQ\",name:\"IonWedgeSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,03AC)\":{tag:\"(300A,03AC)\",vr:\"SQ\",name:\"IonWedgePositionSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0401)\":{tag:\"(300A,0401)\",vr:\"SQ\",name:\"ReferencedSetupImageSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0402)\":{tag:\"(300A,0402)\",vr:\"ST\",name:\"SetupImageComment\",vm:\"1\",version:\"DICOM\"},\"(300A,0410)\":{tag:\"(300A,0410)\",vr:\"SQ\",name:\"MotionSynchronizationSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0412)\":{tag:\"(300A,0412)\",vr:\"FL\",name:\"ControlPointOrientation\",vm:\"3\",version:\"DICOM\"},\"(300A,0420)\":{tag:\"(300A,0420)\",vr:\"SQ\",name:\"GeneralAccessorySequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0421)\":{tag:\"(300A,0421)\",vr:\"SH\",name:\"GeneralAccessoryID\",vm:\"1\",version:\"DICOM\"},\"(300A,0422)\":{tag:\"(300A,0422)\",vr:\"ST\",name:\"GeneralAccessoryDescription\",vm:\"1\",version:\"DICOM\"},\"(300A,0423)\":{tag:\"(300A,0423)\",vr:\"CS\",name:\"GeneralAccessoryType\",vm:\"1\",version:\"DICOM\"},\"(300A,0424)\":{tag:\"(300A,0424)\",vr:\"IS\",name:\"GeneralAccessoryNumber\",vm:\"1\",version:\"DICOM\"},\"(300A,0425)\":{tag:\"(300A,0425)\",vr:\"FL\",name:\"SourceToGeneralAccessoryDistance\",vm:\"1\",version:\"DICOM\"},\"(300A,0426)\":{tag:\"(300A,0426)\",vr:\"DS\",name:\"IsocenterToGeneralAccessoryDistance\",vm:\"1\",version:\"DICOM\"},\"(300A,0431)\":{tag:\"(300A,0431)\",vr:\"SQ\",name:\"ApplicatorGeometrySequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0432)\":{tag:\"(300A,0432)\",vr:\"CS\",name:\"ApplicatorApertureShape\",vm:\"1\",version:\"DICOM\"},\"(300A,0433)\":{tag:\"(300A,0433)\",vr:\"FL\",name:\"ApplicatorOpening\",vm:\"1\",version:\"DICOM\"},\"(300A,0434)\":{tag:\"(300A,0434)\",vr:\"FL\",name:\"ApplicatorOpeningX\",vm:\"1\",version:\"DICOM\"},\"(300A,0435)\":{tag:\"(300A,0435)\",vr:\"FL\",name:\"ApplicatorOpeningY\",vm:\"1\",version:\"DICOM\"},\"(300A,0436)\":{tag:\"(300A,0436)\",vr:\"FL\",name:\"SourceToApplicatorMountingPositionDistance\",vm:\"1\",version:\"DICOM\"},\"(300A,0440)\":{tag:\"(300A,0440)\",vr:\"IS\",name:\"NumberOfBlockSlabItems\",vm:\"1\",version:\"DICOM\"},\"(300A,0441)\":{tag:\"(300A,0441)\",vr:\"SQ\",name:\"BlockSlabSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0442)\":{tag:\"(300A,0442)\",vr:\"DS\",name:\"BlockSlabThickness\",vm:\"1\",version:\"DICOM\"},\"(300A,0443)\":{tag:\"(300A,0443)\",vr:\"US\",name:\"BlockSlabNumber\",vm:\"1\",version:\"DICOM\"},\"(300A,0450)\":{tag:\"(300A,0450)\",vr:\"SQ\",name:\"DeviceMotionControlSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0451)\":{tag:\"(300A,0451)\",vr:\"CS\",name:\"DeviceMotionExecutionMode\",vm:\"1\",version:\"DICOM\"},\"(300A,0452)\":{tag:\"(300A,0452)\",vr:\"CS\",name:\"DeviceMotionObservationMode\",vm:\"1\",version:\"DICOM\"},\"(300A,0453)\":{tag:\"(300A,0453)\",vr:\"SQ\",name:\"DeviceMotionParameterCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0501)\":{tag:\"(300A,0501)\",vr:\"FL\",name:\"DistalDepthFraction\",vm:\"1\",version:\"DICOM\"},\"(300A,0502)\":{tag:\"(300A,0502)\",vr:\"FL\",name:\"DistalDepth\",vm:\"1\",version:\"DICOM\"},\"(300A,0503)\":{tag:\"(300A,0503)\",vr:\"FL\",name:\"NominalRangeModulationFractions\",vm:\"2\",version:\"DICOM\"},\"(300A,0504)\":{tag:\"(300A,0504)\",vr:\"FL\",name:\"NominalRangeModulatedRegionDepths\",vm:\"2\",version:\"DICOM\"},\"(300A,0505)\":{tag:\"(300A,0505)\",vr:\"SQ\",name:\"DepthDoseParametersSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0506)\":{tag:\"(300A,0506)\",vr:\"SQ\",name:\"DeliveredDepthDoseParametersSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0507)\":{tag:\"(300A,0507)\",vr:\"FL\",name:\"DeliveredDistalDepthFraction\",vm:\"1\",version:\"DICOM\"},\"(300A,0508)\":{tag:\"(300A,0508)\",vr:\"FL\",name:\"DeliveredDistalDepth\",vm:\"1\",version:\"DICOM\"},\"(300A,0509)\":{tag:\"(300A,0509)\",vr:\"FL\",name:\"DeliveredNominalRangeModulationFractions\",vm:\"2\",version:\"DICOM\"},\"(300A,0510)\":{tag:\"(300A,0510)\",vr:\"FL\",name:\"DeliveredNominalRangeModulatedRegionDepths\",vm:\"2\",version:\"DICOM\"},\"(300A,0511)\":{tag:\"(300A,0511)\",vr:\"CS\",name:\"DeliveredReferenceDoseDefinition\",vm:\"1\",version:\"DICOM\"},\"(300A,0512)\":{tag:\"(300A,0512)\",vr:\"CS\",name:\"ReferenceDoseDefinition\",vm:\"1\",version:\"DICOM\"},\"(300A,0600)\":{tag:\"(300A,0600)\",vr:\"US\",name:\"RTControlPointIndex\",vm:\"1\",version:\"DICOM\"},\"(300A,0601)\":{tag:\"(300A,0601)\",vr:\"US\",name:\"RadiationGenerationModeIndex\",vm:\"1\",version:\"DICOM\"},\"(300A,0602)\":{tag:\"(300A,0602)\",vr:\"US\",name:\"ReferencedDefinedDeviceIndex\",vm:\"1\",version:\"DICOM\"},\"(300A,0603)\":{tag:\"(300A,0603)\",vr:\"US\",name:\"RadiationDoseIdentificationIndex\",vm:\"1\",version:\"DICOM\"},\"(300A,0604)\":{tag:\"(300A,0604)\",vr:\"US\",name:\"NumberOfRTControlPoints\",vm:\"1\",version:\"DICOM\"},\"(300A,0605)\":{tag:\"(300A,0605)\",vr:\"US\",name:\"ReferencedRadiationGenerationModeIndex\",vm:\"1\",version:\"DICOM\"},\"(300A,0606)\":{tag:\"(300A,0606)\",vr:\"US\",name:\"TreatmentPositionIndex\",vm:\"1\",version:\"DICOM\"},\"(300A,0607)\":{tag:\"(300A,0607)\",vr:\"US\",name:\"ReferencedDeviceIndex\",vm:\"1\",version:\"DICOM\"},\"(300A,0608)\":{tag:\"(300A,0608)\",vr:\"LO\",name:\"TreatmentPositionGroupLabel\",vm:\"1\",version:\"DICOM\"},\"(300A,0609)\":{tag:\"(300A,0609)\",vr:\"UI\",name:\"TreatmentPositionGroupUID\",vm:\"1\",version:\"DICOM\"},\"(300A,060A)\":{tag:\"(300A,060A)\",vr:\"SQ\",name:\"TreatmentPositionGroupSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,060B)\":{tag:\"(300A,060B)\",vr:\"US\",name:\"ReferencedTreatmentPositionIndex\",vm:\"1\",version:\"DICOM\"},\"(300A,060C)\":{tag:\"(300A,060C)\",vr:\"US\",name:\"ReferencedRadiationDoseIdentificationIndex\",vm:\"1\",version:\"DICOM\"},\"(300A,060D)\":{tag:\"(300A,060D)\",vr:\"FD\",name:\"RTAccessoryHolderWaterEquivalentThickness\",vm:\"1\",version:\"DICOM\"},\"(300A,060E)\":{tag:\"(300A,060E)\",vr:\"US\",name:\"ReferencedRTAccessoryHolderDeviceIndex\",vm:\"1\",version:\"DICOM\"},\"(300A,060F)\":{tag:\"(300A,060F)\",vr:\"CS\",name:\"RTAccessoryHolderSlotExistenceFlag\",vm:\"1\",version:\"DICOM\"},\"(300A,0610)\":{tag:\"(300A,0610)\",vr:\"SQ\",name:\"RTAccessoryHolderSlotSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0611)\":{tag:\"(300A,0611)\",vr:\"LO\",name:\"RTAccessoryHolderSlotID\",vm:\"1\",version:\"DICOM\"},\"(300A,0612)\":{tag:\"(300A,0612)\",vr:\"FD\",name:\"RTAccessoryHolderSlotDistance\",vm:\"1\",version:\"DICOM\"},\"(300A,0613)\":{tag:\"(300A,0613)\",vr:\"FD\",name:\"RTAccessorySlotDistance\",vm:\"1\",version:\"DICOM\"},\"(300A,0614)\":{tag:\"(300A,0614)\",vr:\"SQ\",name:\"RTAccessoryHolderDefinitionSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0615)\":{tag:\"(300A,0615)\",vr:\"LO\",name:\"RTAccessoryDeviceSlotID\",vm:\"1\",version:\"DICOM\"},\"(300A,0616)\":{tag:\"(300A,0616)\",vr:\"SQ\",name:\"RTRadiationSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0617)\":{tag:\"(300A,0617)\",vr:\"SQ\",name:\"RadiationDoseSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0618)\":{tag:\"(300A,0618)\",vr:\"SQ\",name:\"RadiationDoseIdentificationSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0619)\":{tag:\"(300A,0619)\",vr:\"LO\",name:\"RadiationDoseIdentificationLabel\",vm:\"1\",version:\"DICOM\"},\"(300A,061A)\":{tag:\"(300A,061A)\",vr:\"CS\",name:\"ReferenceDoseType\",vm:\"1\",version:\"DICOM\"},\"(300A,061B)\":{tag:\"(300A,061B)\",vr:\"CS\",name:\"PrimaryDoseValueIndicator\",vm:\"1\",version:\"DICOM\"},\"(300A,061C)\":{tag:\"(300A,061C)\",vr:\"SQ\",name:\"DoseValuesSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,061D)\":{tag:\"(300A,061D)\",vr:\"CS\",name:\"DoseValuePurpose\",vm:\"1-n\",version:\"DICOM\"},\"(300A,061E)\":{tag:\"(300A,061E)\",vr:\"FD\",name:\"ReferenceDosePointCoordinates\",vm:\"3\",version:\"DICOM\"},\"(300A,061F)\":{tag:\"(300A,061F)\",vr:\"SQ\",name:\"RadiationDoseValuesParametersSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0620)\":{tag:\"(300A,0620)\",vr:\"SQ\",name:\"MetersetToDoseMappingSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0621)\":{tag:\"(300A,0621)\",vr:\"SQ\",name:\"ExpectedInVivoMeasurementValuesSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0622)\":{tag:\"(300A,0622)\",vr:\"US\",name:\"ExpectedInVivoMeasurementValueIndex\",vm:\"1\",version:\"DICOM\"},\"(300A,0623)\":{tag:\"(300A,0623)\",vr:\"LO\",name:\"RadiationDoseInVivoMeasurementLabel\",vm:\"1\",version:\"DICOM\"},\"(300A,0624)\":{tag:\"(300A,0624)\",vr:\"FD\",name:\"RadiationDoseCentralAxisDisplacement\",vm:\"2\",version:\"DICOM\"},\"(300A,0625)\":{tag:\"(300A,0625)\",vr:\"FD\",name:\"RadiationDoseValue\",vm:\"1\",version:\"DICOM\"},\"(300A,0626)\":{tag:\"(300A,0626)\",vr:\"FD\",name:\"RadiationDoseSourceToSkinDistance\",vm:\"1\",version:\"DICOM\"},\"(300A,0627)\":{tag:\"(300A,0627)\",vr:\"FD\",name:\"RadiationDoseMeasurementPointCoordinates\",vm:\"3\",version:\"DICOM\"},\"(300A,0628)\":{tag:\"(300A,0628)\",vr:\"FD\",name:\"RadiationDoseSourceToExternalContourDistance\",vm:\"1\",version:\"DICOM\"},\"(300A,0629)\":{tag:\"(300A,0629)\",vr:\"SQ\",name:\"RTToleranceSetSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,062A)\":{tag:\"(300A,062A)\",vr:\"LO\",name:\"RTToleranceSetLabel\",vm:\"1\",version:\"DICOM\"},\"(300A,062B)\":{tag:\"(300A,062B)\",vr:\"SQ\",name:\"AttributeToleranceValuesSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,062C)\":{tag:\"(300A,062C)\",vr:\"FD\",name:\"ToleranceValue\",vm:\"1\",version:\"DICOM\"},\"(300A,062D)\":{tag:\"(300A,062D)\",vr:\"SQ\",name:\"PatientSupportPositionToleranceSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,062E)\":{tag:\"(300A,062E)\",vr:\"FD\",name:\"TreatmentTimeLimit\",vm:\"1\",version:\"DICOM\"},\"(300A,062F)\":{tag:\"(300A,062F)\",vr:\"SQ\",name:\"CArmPhotonElectronControlPointSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0630)\":{tag:\"(300A,0630)\",vr:\"SQ\",name:\"ReferencedRTRadiationSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0631)\":{tag:\"(300A,0631)\",vr:\"SQ\",name:\"ReferencedRTInstanceSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0632)\":{tag:\"(300A,0632)\",vr:\"SQ\",name:\"ReferencedRTPatientSetupSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0634)\":{tag:\"(300A,0634)\",vr:\"FD\",name:\"SourceToPatientSurfaceDistance\",vm:\"1\",version:\"DICOM\"},\"(300A,0635)\":{tag:\"(300A,0635)\",vr:\"SQ\",name:\"TreatmentMachineSpecialModeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0636)\":{tag:\"(300A,0636)\",vr:\"US\",name:\"IntendedNumberOfFractions\",vm:\"1\",version:\"DICOM\"},\"(300A,0637)\":{tag:\"(300A,0637)\",vr:\"CS\",name:\"RTRadiationSetIntent\",vm:\"1\",version:\"DICOM\"},\"(300A,0638)\":{tag:\"(300A,0638)\",vr:\"CS\",name:\"RTRadiationPhysicalAndGeometricContentDetailFlag\",vm:\"1\",version:\"DICOM\"},\"(300A,0639)\":{tag:\"(300A,0639)\",vr:\"CS\",name:\"RTRecordFlag\",vm:\"1\",version:\"DICOM\"},\"(300A,063A)\":{tag:\"(300A,063A)\",vr:\"SQ\",name:\"TreatmentDeviceIdentificationSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,063B)\":{tag:\"(300A,063B)\",vr:\"SQ\",name:\"ReferencedRTPhysicianIntentSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,063C)\":{tag:\"(300A,063C)\",vr:\"FD\",name:\"CumulativeMeterset\",vm:\"1\",version:\"DICOM\"},\"(300A,063D)\":{tag:\"(300A,063D)\",vr:\"FD\",name:\"DeliveryRate\",vm:\"1\",version:\"DICOM\"},\"(300A,063E)\":{tag:\"(300A,063E)\",vr:\"SQ\",name:\"DeliveryRateUnitSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,063F)\":{tag:\"(300A,063F)\",vr:\"SQ\",name:\"TreatmentPositionSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0640)\":{tag:\"(300A,0640)\",vr:\"FD\",name:\"RadiationSourceAxisDistance\",vm:\"1\",version:\"DICOM\"},\"(300A,0641)\":{tag:\"(300A,0641)\",vr:\"US\",name:\"NumberOfRTBeamLimitingDevices\",vm:\"1\",version:\"DICOM\"},\"(300A,0642)\":{tag:\"(300A,0642)\",vr:\"FD\",name:\"RTBeamLimitingDeviceProximalDistance\",vm:\"1\",version:\"DICOM\"},\"(300A,0643)\":{tag:\"(300A,0643)\",vr:\"FD\",name:\"RTBeamLimitingDeviceDistalDistance\",vm:\"1\",version:\"DICOM\"},\"(300A,0644)\":{tag:\"(300A,0644)\",vr:\"SQ\",name:\"ParallelRTBeamDelimiterDeviceOrientationLabelCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0645)\":{tag:\"(300A,0645)\",vr:\"FD\",name:\"BeamModifierOrientationAngle\",vm:\"1\",version:\"DICOM\"},\"(300A,0646)\":{tag:\"(300A,0646)\",vr:\"SQ\",name:\"FixedRTBeamDelimiterDeviceSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0647)\":{tag:\"(300A,0647)\",vr:\"SQ\",name:\"ParallelRTBeamDelimiterDeviceSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0648)\":{tag:\"(300A,0648)\",vr:\"US\",name:\"NumberOfParallelRTBeamDelimiters\",vm:\"1\",version:\"DICOM\"},\"(300A,0649)\":{tag:\"(300A,0649)\",vr:\"FD\",name:\"ParallelRTBeamDelimiterBoundaries\",vm:\"2-n\",version:\"DICOM\"},\"(300A,064A)\":{tag:\"(300A,064A)\",vr:\"FD\",name:\"ParallelRTBeamDelimiterPositions\",vm:\"2-n\",version:\"DICOM\"},\"(300A,064B)\":{tag:\"(300A,064B)\",vr:\"FD\",name:\"RTBeamLimitingDeviceOffset\",vm:\"2\",version:\"DICOM\"},\"(300A,064C)\":{tag:\"(300A,064C)\",vr:\"SQ\",name:\"RTBeamDelimiterGeometrySequence\",vm:\"1\",version:\"DICOM\"},\"(300A,064D)\":{tag:\"(300A,064D)\",vr:\"SQ\",name:\"RTBeamLimitingDeviceDefinitionSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,064E)\":{tag:\"(300A,064E)\",vr:\"CS\",name:\"ParallelRTBeamDelimiterOpeningMode\",vm:\"1\",version:\"DICOM\"},\"(300A,064F)\":{tag:\"(300A,064F)\",vr:\"CS\",name:\"ParallelRTBeamDelimiterLeafMountingSide\",vm:\"1-n\",version:\"DICOM\"},\"(300A,0650)\":{tag:\"(300A,0650)\",vr:\"UI\",name:\"PatientSetupUID\",vm:\"1\",version:\"DICOM\"},\"(300A,0651)\":{tag:\"(300A,0651)\",vr:\"SQ\",name:\"WedgeDefinitionSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0652)\":{tag:\"(300A,0652)\",vr:\"FD\",name:\"RadiationBeamWedgeAngle\",vm:\"1\",version:\"DICOM\"},\"(300A,0653)\":{tag:\"(300A,0653)\",vr:\"FD\",name:\"RadiationBeamWedgeThinEdgeDistance\",vm:\"1\",version:\"DICOM\"},\"(300A,0654)\":{tag:\"(300A,0654)\",vr:\"FD\",name:\"RadiationBeamEffectiveWedgeAngle\",vm:\"1\",version:\"DICOM\"},\"(300A,0655)\":{tag:\"(300A,0655)\",vr:\"US\",name:\"NumberOfWedgePositions\",vm:\"1\",version:\"DICOM\"},\"(300A,0656)\":{tag:\"(300A,0656)\",vr:\"SQ\",name:\"RTBeamLimitingDeviceOpeningSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0657)\":{tag:\"(300A,0657)\",vr:\"US\",name:\"NumberOfRTBeamLimitingDeviceOpenings\",vm:\"1\",version:\"DICOM\"},\"(300A,0658)\":{tag:\"(300A,0658)\",vr:\"SQ\",name:\"RadiationDosimeterUnitSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0659)\":{tag:\"(300A,0659)\",vr:\"SQ\",name:\"RTDeviceDistanceReferenceLocationCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,065A)\":{tag:\"(300A,065A)\",vr:\"SQ\",name:\"RadiationDeviceConfigurationAndCommissioningKeySequence\",vm:\"1\",version:\"DICOM\"},\"(300A,065B)\":{tag:\"(300A,065B)\",vr:\"SQ\",name:\"PatientSupportPositionParameterSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,065C)\":{tag:\"(300A,065C)\",vr:\"CS\",name:\"PatientSupportPositionSpecificationMethod\",vm:\"1\",version:\"DICOM\"},\"(300A,065D)\":{tag:\"(300A,065D)\",vr:\"SQ\",name:\"PatientSupportPositionDeviceParameterSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,065E)\":{tag:\"(300A,065E)\",vr:\"US\",name:\"DeviceOrderIndex\",vm:\"1\",version:\"DICOM\"},\"(300A,065F)\":{tag:\"(300A,065F)\",vr:\"US\",name:\"PatientSupportPositionParameterOrderIndex\",vm:\"1\",version:\"DICOM\"},\"(300A,0660)\":{tag:\"(300A,0660)\",vr:\"SQ\",name:\"PatientSupportPositionDeviceToleranceSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0661)\":{tag:\"(300A,0661)\",vr:\"US\",name:\"PatientSupportPositionToleranceOrderIndex\",vm:\"1\",version:\"DICOM\"},\"(300A,0662)\":{tag:\"(300A,0662)\",vr:\"SQ\",name:\"CompensatorDefinitionSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0663)\":{tag:\"(300A,0663)\",vr:\"CS\",name:\"CompensatorMapOrientation\",vm:\"1\",version:\"DICOM\"},\"(300A,0664)\":{tag:\"(300A,0664)\",vr:\"OF\",name:\"CompensatorProximalThicknessMap\",vm:\"1\",version:\"DICOM\"},\"(300A,0665)\":{tag:\"(300A,0665)\",vr:\"OF\",name:\"CompensatorDistalThicknessMap\",vm:\"1\",version:\"DICOM\"},\"(300A,0666)\":{tag:\"(300A,0666)\",vr:\"FD\",name:\"CompensatorBasePlaneOffset\",vm:\"1\",version:\"DICOM\"},\"(300A,0667)\":{tag:\"(300A,0667)\",vr:\"SQ\",name:\"CompensatorShapeFabricationCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0668)\":{tag:\"(300A,0668)\",vr:\"SQ\",name:\"CompensatorShapeSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0669)\":{tag:\"(300A,0669)\",vr:\"FD\",name:\"RadiationBeamCompensatorMillingToolDiameter\",vm:\"1\",version:\"DICOM\"},\"(300A,066A)\":{tag:\"(300A,066A)\",vr:\"SQ\",name:\"BlockDefinitionSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,066B)\":{tag:\"(300A,066B)\",vr:\"OF\",name:\"BlockEdgeData\",vm:\"1\",version:\"DICOM\"},\"(300A,066C)\":{tag:\"(300A,066C)\",vr:\"CS\",name:\"BlockOrientation\",vm:\"1\",version:\"DICOM\"},\"(300A,066D)\":{tag:\"(300A,066D)\",vr:\"FD\",name:\"RadiationBeamBlockThickness\",vm:\"1\",version:\"DICOM\"},\"(300A,066E)\":{tag:\"(300A,066E)\",vr:\"FD\",name:\"RadiationBeamBlockSlabThickness\",vm:\"1\",version:\"DICOM\"},\"(300A,066F)\":{tag:\"(300A,066F)\",vr:\"SQ\",name:\"BlockEdgeDataSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0670)\":{tag:\"(300A,0670)\",vr:\"US\",name:\"NumberOfRTAccessoryHolders\",vm:\"1\",version:\"DICOM\"},\"(300A,0671)\":{tag:\"(300A,0671)\",vr:\"SQ\",name:\"GeneralAccessoryDefinitionSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0672)\":{tag:\"(300A,0672)\",vr:\"US\",name:\"NumberOfGeneralAccessories\",vm:\"1\",version:\"DICOM\"},\"(300A,0673)\":{tag:\"(300A,0673)\",vr:\"SQ\",name:\"BolusDefinitionSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0674)\":{tag:\"(300A,0674)\",vr:\"US\",name:\"NumberOfBoluses\",vm:\"1\",version:\"DICOM\"},\"(300A,0675)\":{tag:\"(300A,0675)\",vr:\"UI\",name:\"EquipmentFrameOfReferenceUID\",vm:\"1\",version:\"DICOM\"},\"(300A,0676)\":{tag:\"(300A,0676)\",vr:\"ST\",name:\"EquipmentFrameOfReferenceDescription\",vm:\"1\",version:\"DICOM\"},\"(300A,0677)\":{tag:\"(300A,0677)\",vr:\"SQ\",name:\"EquipmentReferencePointCoordinatesSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0678)\":{tag:\"(300A,0678)\",vr:\"SQ\",name:\"EquipmentReferencePointCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0679)\":{tag:\"(300A,0679)\",vr:\"FD\",name:\"RTBeamLimitingDeviceAngle\",vm:\"1\",version:\"DICOM\"},\"(300A,067A)\":{tag:\"(300A,067A)\",vr:\"FD\",name:\"SourceRollAngle\",vm:\"1\",version:\"DICOM\"},\"(300A,067B)\":{tag:\"(300A,067B)\",vr:\"SQ\",name:\"RadiationGenerationModeSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,067C)\":{tag:\"(300A,067C)\",vr:\"SH\",name:\"RadiationGenerationModeLabel\",vm:\"1\",version:\"DICOM\"},\"(300A,067D)\":{tag:\"(300A,067D)\",vr:\"ST\",name:\"RadiationGenerationModeDescription\",vm:\"1\",version:\"DICOM\"},\"(300A,067E)\":{tag:\"(300A,067E)\",vr:\"SQ\",name:\"RadiationGenerationModeMachineCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,067F)\":{tag:\"(300A,067F)\",vr:\"SQ\",name:\"RadiationTypeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0680)\":{tag:\"(300A,0680)\",vr:\"DS\",name:\"NominalEnergy\",vm:\"1\",version:\"DICOM\"},\"(300A,0681)\":{tag:\"(300A,0681)\",vr:\"DS\",name:\"MinimumNominalEnergy\",vm:\"1\",version:\"DICOM\"},\"(300A,0682)\":{tag:\"(300A,0682)\",vr:\"DS\",name:\"MaximumNominalEnergy\",vm:\"1\",version:\"DICOM\"},\"(300A,0683)\":{tag:\"(300A,0683)\",vr:\"SQ\",name:\"RadiationFluenceModifierCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0684)\":{tag:\"(300A,0684)\",vr:\"SQ\",name:\"EnergyUnitCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0685)\":{tag:\"(300A,0685)\",vr:\"US\",name:\"NumberOfRadiationGenerationModes\",vm:\"1\",version:\"DICOM\"},\"(300A,0686)\":{tag:\"(300A,0686)\",vr:\"SQ\",name:\"PatientSupportDevicesSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0687)\":{tag:\"(300A,0687)\",vr:\"US\",name:\"NumberOfPatientSupportDevices\",vm:\"1\",version:\"DICOM\"},\"(300A,0688)\":{tag:\"(300A,0688)\",vr:\"FD\",name:\"RTBeamModifierDefinitionDistance\",vm:\"1\",version:\"DICOM\"},\"(300A,0689)\":{tag:\"(300A,0689)\",vr:\"SQ\",name:\"BeamAreaLimitSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,068A)\":{tag:\"(300A,068A)\",vr:\"SQ\",name:\"ReferencedRTPrescriptionSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0700)\":{tag:\"(300A,0700)\",vr:\"UI\",name:\"TreatmentSessionUID\",vm:\"1\",version:\"DICOM\"},\"(300A,0701)\":{tag:\"(300A,0701)\",vr:\"CS\",name:\"RTRadiationUsage\",vm:\"1\",version:\"DICOM\"},\"(300A,0702)\":{tag:\"(300A,0702)\",vr:\"SQ\",name:\"ReferencedRTRadiationSetSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0703)\":{tag:\"(300A,0703)\",vr:\"SQ\",name:\"ReferencedRTRadiationRecordSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0704)\":{tag:\"(300A,0704)\",vr:\"US\",name:\"RTRadiationSetDeliveryNumber\",vm:\"1\",version:\"DICOM\"},\"(300A,0705)\":{tag:\"(300A,0705)\",vr:\"US\",name:\"ClinicalFractionNumber\",vm:\"1\",version:\"DICOM\"},\"(300A,0706)\":{tag:\"(300A,0706)\",vr:\"CS\",name:\"RTTreatmentFractionCompletionStatus\",vm:\"1\",version:\"DICOM\"},\"(300A,0707)\":{tag:\"(300A,0707)\",vr:\"CS\",name:\"RTRadiationSetUsage\",vm:\"1\",version:\"DICOM\"},\"(300A,0708)\":{tag:\"(300A,0708)\",vr:\"CS\",name:\"TreatmentDeliveryContinuationFlag\",vm:\"1\",version:\"DICOM\"},\"(300A,0709)\":{tag:\"(300A,0709)\",vr:\"CS\",name:\"TreatmentRecordContentOrigin\",vm:\"1\",version:\"DICOM\"},\"(300A,0714)\":{tag:\"(300A,0714)\",vr:\"CS\",name:\"RTTreatmentTerminationStatus\",vm:\"1\",version:\"DICOM\"},\"(300A,0715)\":{tag:\"(300A,0715)\",vr:\"SQ\",name:\"RTTreatmentTerminationReasonCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0716)\":{tag:\"(300A,0716)\",vr:\"SQ\",name:\"MachineSpecificTreatmentTerminationCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0722)\":{tag:\"(300A,0722)\",vr:\"SQ\",name:\"RTRadiationSalvageRecordControlPointSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0723)\":{tag:\"(300A,0723)\",vr:\"CS\",name:\"StartingMetersetValueKnownFlag\",vm:\"1\",version:\"DICOM\"},\"(300A,0730)\":{tag:\"(300A,0730)\",vr:\"ST\",name:\"TreatmentTerminationDescription\",vm:\"1\",version:\"DICOM\"},\"(300A,0731)\":{tag:\"(300A,0731)\",vr:\"SQ\",name:\"TreatmentToleranceViolationSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0732)\":{tag:\"(300A,0732)\",vr:\"CS\",name:\"TreatmentToleranceViolationCategory\",vm:\"1\",version:\"DICOM\"},\"(300A,0733)\":{tag:\"(300A,0733)\",vr:\"SQ\",name:\"TreatmentToleranceViolationAttributeSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0734)\":{tag:\"(300A,0734)\",vr:\"ST\",name:\"TreatmentToleranceViolationDescription\",vm:\"1\",version:\"DICOM\"},\"(300A,0735)\":{tag:\"(300A,0735)\",vr:\"ST\",name:\"TreatmentToleranceViolationIdentification\",vm:\"1\",version:\"DICOM\"},\"(300A,0736)\":{tag:\"(300A,0736)\",vr:\"DT\",name:\"TreatmentToleranceViolationDateTime\",vm:\"1\",version:\"DICOM\"},\"(300A,073A)\":{tag:\"(300A,073A)\",vr:\"DT\",name:\"RecordedRTControlPointDateTime\",vm:\"1\",version:\"DICOM\"},\"(300A,073B)\":{tag:\"(300A,073B)\",vr:\"US\",name:\"ReferencedRadiationRTControlPointIndex\",vm:\"1\",version:\"DICOM\"},\"(300A,073E)\":{tag:\"(300A,073E)\",vr:\"SQ\",name:\"AlternateValueSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,073F)\":{tag:\"(300A,073F)\",vr:\"SQ\",name:\"ConfirmationSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0740)\":{tag:\"(300A,0740)\",vr:\"SQ\",name:\"InterlockSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0741)\":{tag:\"(300A,0741)\",vr:\"DT\",name:\"InterlockDateTime\",vm:\"1\",version:\"DICOM\"},\"(300A,0742)\":{tag:\"(300A,0742)\",vr:\"ST\",name:\"InterlockDescription\",vm:\"1\",version:\"DICOM\"},\"(300A,0743)\":{tag:\"(300A,0743)\",vr:\"SQ\",name:\"InterlockOriginatingDeviceSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0744)\":{tag:\"(300A,0744)\",vr:\"SQ\",name:\"InterlockCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0745)\":{tag:\"(300A,0745)\",vr:\"SQ\",name:\"InterlockResolutionCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0746)\":{tag:\"(300A,0746)\",vr:\"SQ\",name:\"InterlockResolutionUserSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0760)\":{tag:\"(300A,0760)\",vr:\"DT\",name:\"OverrideDateTime\",vm:\"1\",version:\"DICOM\"},\"(300A,0761)\":{tag:\"(300A,0761)\",vr:\"SQ\",name:\"TreatmentToleranceViolationTypeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0762)\":{tag:\"(300A,0762)\",vr:\"SQ\",name:\"TreatmentToleranceViolationCauseCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0772)\":{tag:\"(300A,0772)\",vr:\"SQ\",name:\"MeasuredMetersetToDoseMappingSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0773)\":{tag:\"(300A,0773)\",vr:\"US\",name:\"ReferencedExpectedInVivoMeasurementValueIndex\",vm:\"1\",version:\"DICOM\"},\"(300A,0774)\":{tag:\"(300A,0774)\",vr:\"SQ\",name:\"DoseMeasurementDeviceCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0780)\":{tag:\"(300A,0780)\",vr:\"SQ\",name:\"AdditionalParameterRecordingInstanceSequence\",vm:\"1\",version:\"DICOM\"},\"(300A,0783)\":{tag:\"(300A,0783)\",vr:\"ST\",name:\"InterlockOriginDescription\",vm:\"1\",version:\"DICOM\"},\"(300C,0002)\":{tag:\"(300C,0002)\",vr:\"SQ\",name:\"ReferencedRTPlanSequence\",vm:\"1\",version:\"DICOM\"},\"(300C,0004)\":{tag:\"(300C,0004)\",vr:\"SQ\",name:\"ReferencedBeamSequence\",vm:\"1\",version:\"DICOM\"},\"(300C,0006)\":{tag:\"(300C,0006)\",vr:\"IS\",name:\"ReferencedBeamNumber\",vm:\"1\",version:\"DICOM\"},\"(300C,0007)\":{tag:\"(300C,0007)\",vr:\"IS\",name:\"ReferencedReferenceImageNumber\",vm:\"1\",version:\"DICOM\"},\"(300C,0008)\":{tag:\"(300C,0008)\",vr:\"DS\",name:\"StartCumulativeMetersetWeight\",vm:\"1\",version:\"DICOM\"},\"(300C,0009)\":{tag:\"(300C,0009)\",vr:\"DS\",name:\"EndCumulativeMetersetWeight\",vm:\"1\",version:\"DICOM\"},\"(300C,000A)\":{tag:\"(300C,000A)\",vr:\"SQ\",name:\"ReferencedBrachyApplicationSetupSequence\",vm:\"1\",version:\"DICOM\"},\"(300C,000C)\":{tag:\"(300C,000C)\",vr:\"IS\",name:\"ReferencedBrachyApplicationSetupNumber\",vm:\"1\",version:\"DICOM\"},\"(300C,000E)\":{tag:\"(300C,000E)\",vr:\"IS\",name:\"ReferencedSourceNumber\",vm:\"1\",version:\"DICOM\"},\"(300C,0020)\":{tag:\"(300C,0020)\",vr:\"SQ\",name:\"ReferencedFractionGroupSequence\",vm:\"1\",version:\"DICOM\"},\"(300C,0022)\":{tag:\"(300C,0022)\",vr:\"IS\",name:\"ReferencedFractionGroupNumber\",vm:\"1\",version:\"DICOM\"},\"(300C,0040)\":{tag:\"(300C,0040)\",vr:\"SQ\",name:\"ReferencedVerificationImageSequence\",vm:\"1\",version:\"DICOM\"},\"(300C,0042)\":{tag:\"(300C,0042)\",vr:\"SQ\",name:\"ReferencedReferenceImageSequence\",vm:\"1\",version:\"DICOM\"},\"(300C,0050)\":{tag:\"(300C,0050)\",vr:\"SQ\",name:\"ReferencedDoseReferenceSequence\",vm:\"1\",version:\"DICOM\"},\"(300C,0051)\":{tag:\"(300C,0051)\",vr:\"IS\",name:\"ReferencedDoseReferenceNumber\",vm:\"1\",version:\"DICOM\"},\"(300C,0055)\":{tag:\"(300C,0055)\",vr:\"SQ\",name:\"BrachyReferencedDoseReferenceSequence\",vm:\"1\",version:\"DICOM\"},\"(300C,0060)\":{tag:\"(300C,0060)\",vr:\"SQ\",name:\"ReferencedStructureSetSequence\",vm:\"1\",version:\"DICOM\"},\"(300C,006A)\":{tag:\"(300C,006A)\",vr:\"IS\",name:\"ReferencedPatientSetupNumber\",vm:\"1\",version:\"DICOM\"},\"(300C,0080)\":{tag:\"(300C,0080)\",vr:\"SQ\",name:\"ReferencedDoseSequence\",vm:\"1\",version:\"DICOM\"},\"(300C,00A0)\":{tag:\"(300C,00A0)\",vr:\"IS\",name:\"ReferencedToleranceTableNumber\",vm:\"1\",version:\"DICOM\"},\"(300C,00B0)\":{tag:\"(300C,00B0)\",vr:\"SQ\",name:\"ReferencedBolusSequence\",vm:\"1\",version:\"DICOM\"},\"(300C,00C0)\":{tag:\"(300C,00C0)\",vr:\"IS\",name:\"ReferencedWedgeNumber\",vm:\"1\",version:\"DICOM\"},\"(300C,00D0)\":{tag:\"(300C,00D0)\",vr:\"IS\",name:\"ReferencedCompensatorNumber\",vm:\"1\",version:\"DICOM\"},\"(300C,00E0)\":{tag:\"(300C,00E0)\",vr:\"IS\",name:\"ReferencedBlockNumber\",vm:\"1\",version:\"DICOM\"},\"(300C,00F0)\":{tag:\"(300C,00F0)\",vr:\"IS\",name:\"ReferencedControlPointIndex\",vm:\"1\",version:\"DICOM\"},\"(300C,00F2)\":{tag:\"(300C,00F2)\",vr:\"SQ\",name:\"ReferencedControlPointSequence\",vm:\"1\",version:\"DICOM\"},\"(300C,00F4)\":{tag:\"(300C,00F4)\",vr:\"IS\",name:\"ReferencedStartControlPointIndex\",vm:\"1\",version:\"DICOM\"},\"(300C,00F6)\":{tag:\"(300C,00F6)\",vr:\"IS\",name:\"ReferencedStopControlPointIndex\",vm:\"1\",version:\"DICOM\"},\"(300C,0100)\":{tag:\"(300C,0100)\",vr:\"IS\",name:\"ReferencedRangeShifterNumber\",vm:\"1\",version:\"DICOM\"},\"(300C,0102)\":{tag:\"(300C,0102)\",vr:\"IS\",name:\"ReferencedLateralSpreadingDeviceNumber\",vm:\"1\",version:\"DICOM\"},\"(300C,0104)\":{tag:\"(300C,0104)\",vr:\"IS\",name:\"ReferencedRangeModulatorNumber\",vm:\"1\",version:\"DICOM\"},\"(300C,0111)\":{tag:\"(300C,0111)\",vr:\"SQ\",name:\"OmittedBeamTaskSequence\",vm:\"1\",version:\"DICOM\"},\"(300C,0112)\":{tag:\"(300C,0112)\",vr:\"CS\",name:\"ReasonForOmission\",vm:\"1\",version:\"DICOM\"},\"(300C,0113)\":{tag:\"(300C,0113)\",vr:\"LO\",name:\"ReasonForOmissionDescription\",vm:\"1\",version:\"DICOM\"},\"(300E,0002)\":{tag:\"(300E,0002)\",vr:\"CS\",name:\"ApprovalStatus\",vm:\"1\",version:\"DICOM\"},\"(300E,0004)\":{tag:\"(300E,0004)\",vr:\"DA\",name:\"ReviewDate\",vm:\"1\",version:\"DICOM\"},\"(300E,0005)\":{tag:\"(300E,0005)\",vr:\"TM\",name:\"ReviewTime\",vm:\"1\",version:\"DICOM\"},\"(300E,0008)\":{tag:\"(300E,0008)\",vr:\"PN\",name:\"ReviewerName\",vm:\"1\",version:\"DICOM\"},\"(4010,0001)\":{tag:\"(4010,0001)\",vr:\"CS\",name:\"LowEnergyDetectors\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,0002)\":{tag:\"(4010,0002)\",vr:\"CS\",name:\"HighEnergyDetectors\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,0004)\":{tag:\"(4010,0004)\",vr:\"SQ\",name:\"DetectorGeometrySequence\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1001)\":{tag:\"(4010,1001)\",vr:\"SQ\",name:\"ThreatROIVoxelSequence\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1004)\":{tag:\"(4010,1004)\",vr:\"FL\",name:\"ThreatROIBase\",vm:\"3\",version:\"DICOM/DICOS\"},\"(4010,1005)\":{tag:\"(4010,1005)\",vr:\"FL\",name:\"ThreatROIExtents\",vm:\"3\",version:\"DICOM/DICOS\"},\"(4010,1006)\":{tag:\"(4010,1006)\",vr:\"OB\",name:\"ThreatROIBitmap\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1007)\":{tag:\"(4010,1007)\",vr:\"SH\",name:\"RouteSegmentID\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1008)\":{tag:\"(4010,1008)\",vr:\"CS\",name:\"GantryType\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1009)\":{tag:\"(4010,1009)\",vr:\"CS\",name:\"OOIOwnerType\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,100A)\":{tag:\"(4010,100A)\",vr:\"SQ\",name:\"RouteSegmentSequence\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1010)\":{tag:\"(4010,1010)\",vr:\"US\",name:\"PotentialThreatObjectID\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1011)\":{tag:\"(4010,1011)\",vr:\"SQ\",name:\"ThreatSequence\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1012)\":{tag:\"(4010,1012)\",vr:\"CS\",name:\"ThreatCategory\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1013)\":{tag:\"(4010,1013)\",vr:\"LT\",name:\"ThreatCategoryDescription\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1014)\":{tag:\"(4010,1014)\",vr:\"CS\",name:\"ATDAbilityAssessment\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1015)\":{tag:\"(4010,1015)\",vr:\"CS\",name:\"ATDAssessmentFlag\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1016)\":{tag:\"(4010,1016)\",vr:\"FL\",name:\"ATDAssessmentProbability\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1017)\":{tag:\"(4010,1017)\",vr:\"FL\",name:\"Mass\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1018)\":{tag:\"(4010,1018)\",vr:\"FL\",name:\"Density\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1019)\":{tag:\"(4010,1019)\",vr:\"FL\",name:\"ZEffective\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,101A)\":{tag:\"(4010,101A)\",vr:\"SH\",name:\"BoardingPassID\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,101B)\":{tag:\"(4010,101B)\",vr:\"FL\",name:\"CenterOfMass\",vm:\"3\",version:\"DICOM/DICOS\"},\"(4010,101C)\":{tag:\"(4010,101C)\",vr:\"FL\",name:\"CenterOfPTO\",vm:\"3\",version:\"DICOM/DICOS\"},\"(4010,101D)\":{tag:\"(4010,101D)\",vr:\"FL\",name:\"BoundingPolygon\",vm:\"6-n\",version:\"DICOM/DICOS\"},\"(4010,101E)\":{tag:\"(4010,101E)\",vr:\"SH\",name:\"RouteSegmentStartLocationID\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,101F)\":{tag:\"(4010,101F)\",vr:\"SH\",name:\"RouteSegmentEndLocationID\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1020)\":{tag:\"(4010,1020)\",vr:\"CS\",name:\"RouteSegmentLocationIDType\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1021)\":{tag:\"(4010,1021)\",vr:\"CS\",name:\"AbortReason\",vm:\"1-n\",version:\"DICOM/DICOS\"},\"(4010,1023)\":{tag:\"(4010,1023)\",vr:\"FL\",name:\"VolumeOfPTO\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1024)\":{tag:\"(4010,1024)\",vr:\"CS\",name:\"AbortFlag\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1025)\":{tag:\"(4010,1025)\",vr:\"DT\",name:\"RouteSegmentStartTime\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1026)\":{tag:\"(4010,1026)\",vr:\"DT\",name:\"RouteSegmentEndTime\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1027)\":{tag:\"(4010,1027)\",vr:\"CS\",name:\"TDRType\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1028)\":{tag:\"(4010,1028)\",vr:\"CS\",name:\"InternationalRouteSegment\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1029)\":{tag:\"(4010,1029)\",vr:\"LO\",name:\"ThreatDetectionAlgorithmandVersion\",vm:\"1-n\",version:\"DICOM/DICOS\"},\"(4010,102A)\":{tag:\"(4010,102A)\",vr:\"SH\",name:\"AssignedLocation\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,102B)\":{tag:\"(4010,102B)\",vr:\"DT\",name:\"AlarmDecisionTime\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1031)\":{tag:\"(4010,1031)\",vr:\"CS\",name:\"AlarmDecision\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1033)\":{tag:\"(4010,1033)\",vr:\"US\",name:\"NumberOfTotalObjects\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1034)\":{tag:\"(4010,1034)\",vr:\"US\",name:\"NumberOfAlarmObjects\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1037)\":{tag:\"(4010,1037)\",vr:\"SQ\",name:\"PTORepresentationSequence\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1038)\":{tag:\"(4010,1038)\",vr:\"SQ\",name:\"ATDAssessmentSequence\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1039)\":{tag:\"(4010,1039)\",vr:\"CS\",name:\"TIPType\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,103A)\":{tag:\"(4010,103A)\",vr:\"CS\",name:\"DICOSVersion\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1041)\":{tag:\"(4010,1041)\",vr:\"DT\",name:\"OOIOwnerCreationTime\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1042)\":{tag:\"(4010,1042)\",vr:\"CS\",name:\"OOIType\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1043)\":{tag:\"(4010,1043)\",vr:\"FL\",name:\"OOISize\",vm:\"3\",version:\"DICOM/DICOS\"},\"(4010,1044)\":{tag:\"(4010,1044)\",vr:\"CS\",name:\"AcquisitionStatus\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1045)\":{tag:\"(4010,1045)\",vr:\"SQ\",name:\"BasisMaterialsCodeSequence\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1046)\":{tag:\"(4010,1046)\",vr:\"CS\",name:\"PhantomType\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1047)\":{tag:\"(4010,1047)\",vr:\"SQ\",name:\"OOIOwnerSequence\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1048)\":{tag:\"(4010,1048)\",vr:\"CS\",name:\"ScanType\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1051)\":{tag:\"(4010,1051)\",vr:\"LO\",name:\"ItineraryID\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1052)\":{tag:\"(4010,1052)\",vr:\"SH\",name:\"ItineraryIDType\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1053)\":{tag:\"(4010,1053)\",vr:\"LO\",name:\"ItineraryIDAssigningAuthority\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1054)\":{tag:\"(4010,1054)\",vr:\"SH\",name:\"RouteID\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1055)\":{tag:\"(4010,1055)\",vr:\"SH\",name:\"RouteIDAssigningAuthority\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1056)\":{tag:\"(4010,1056)\",vr:\"CS\",name:\"InboundArrivalType\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1058)\":{tag:\"(4010,1058)\",vr:\"SH\",name:\"CarrierID\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1059)\":{tag:\"(4010,1059)\",vr:\"CS\",name:\"CarrierIDAssigningAuthority\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1060)\":{tag:\"(4010,1060)\",vr:\"FL\",name:\"SourceOrientation\",vm:\"3\",version:\"DICOM/DICOS\"},\"(4010,1061)\":{tag:\"(4010,1061)\",vr:\"FL\",name:\"SourcePosition\",vm:\"3\",version:\"DICOM/DICOS\"},\"(4010,1062)\":{tag:\"(4010,1062)\",vr:\"FL\",name:\"BeltHeight\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1064)\":{tag:\"(4010,1064)\",vr:\"SQ\",name:\"AlgorithmRoutingCodeSequence\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1067)\":{tag:\"(4010,1067)\",vr:\"CS\",name:\"TransportClassification\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1068)\":{tag:\"(4010,1068)\",vr:\"LT\",name:\"OOITypeDescriptor\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1069)\":{tag:\"(4010,1069)\",vr:\"FL\",name:\"TotalProcessingTime\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,106C)\":{tag:\"(4010,106C)\",vr:\"OB\",name:\"DetectorCalibrationData\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,106D)\":{tag:\"(4010,106D)\",vr:\"CS\",name:\"AdditionalScreeningPerformed\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,106E)\":{tag:\"(4010,106E)\",vr:\"CS\",name:\"AdditionalInspectionSelectionCriteria\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,106F)\":{tag:\"(4010,106F)\",vr:\"SQ\",name:\"AdditionalInspectionMethodSequence\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1070)\":{tag:\"(4010,1070)\",vr:\"CS\",name:\"AITDeviceType\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1071)\":{tag:\"(4010,1071)\",vr:\"SQ\",name:\"QRMeasurementsSequence\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1072)\":{tag:\"(4010,1072)\",vr:\"SQ\",name:\"TargetMaterialSequence\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1073)\":{tag:\"(4010,1073)\",vr:\"FD\",name:\"SNRThreshold\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1075)\":{tag:\"(4010,1075)\",vr:\"DS\",name:\"ImageScaleRepresentation\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1076)\":{tag:\"(4010,1076)\",vr:\"SQ\",name:\"ReferencedPTOSequence\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1077)\":{tag:\"(4010,1077)\",vr:\"SQ\",name:\"ReferencedTDRInstanceSequence\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1078)\":{tag:\"(4010,1078)\",vr:\"ST\",name:\"PTOLocationDescription\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,1079)\":{tag:\"(4010,1079)\",vr:\"SQ\",name:\"AnomalyLocatorIndicatorSequence\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,107A)\":{tag:\"(4010,107A)\",vr:\"FL\",name:\"AnomalyLocatorIndicator\",vm:\"3\",version:\"DICOM/DICOS\"},\"(4010,107B)\":{tag:\"(4010,107B)\",vr:\"SQ\",name:\"PTORegionSequence\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,107C)\":{tag:\"(4010,107C)\",vr:\"CS\",name:\"InspectionSelectionCriteria\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,107D)\":{tag:\"(4010,107D)\",vr:\"SQ\",name:\"SecondaryInspectionMethodSequence\",vm:\"1\",version:\"DICOM/DICOS\"},\"(4010,107E)\":{tag:\"(4010,107E)\",vr:\"DS\",name:\"PRCSToRCSOrientation\",vm:\"6\",version:\"DICOM/DICOS\"},\"(3010,0001)\":{tag:\"(3010,0001)\",vr:\"SQ\",name:\"RadiobiologicalDoseEffectSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0002)\":{tag:\"(3010,0002)\",vr:\"CS\",name:\"RadiobiologicalDoseEffectFlag\",vm:\"1\",version:\"DICOM\"},\"(3010,0003)\":{tag:\"(3010,0003)\",vr:\"SQ\",name:\"EffectiveDoseCalculationMethodCategoryCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0004)\":{tag:\"(3010,0004)\",vr:\"SQ\",name:\"EffectiveDoseCalculationMethodCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0005)\":{tag:\"(3010,0005)\",vr:\"LO\",name:\"EffectiveDoseCalculationMethodDescription\",vm:\"1\",version:\"DICOM\"},\"(3010,0006)\":{tag:\"(3010,0006)\",vr:\"UI\",name:\"ConceptualVolumeUID\",vm:\"1\",version:\"DICOM\"},\"(3010,0007)\":{tag:\"(3010,0007)\",vr:\"SQ\",name:\"OriginatingSOPInstanceReferenceSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0008)\":{tag:\"(3010,0008)\",vr:\"SQ\",name:\"ConceptualVolumeConstituentSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0009)\":{tag:\"(3010,0009)\",vr:\"SQ\",name:\"EquivalentConceptualVolumeInstanceReferenceSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,000A)\":{tag:\"(3010,000A)\",vr:\"SQ\",name:\"EquivalentConceptualVolumesSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,000B)\":{tag:\"(3010,000B)\",vr:\"UI\",name:\"ReferencedConceptualVolumeUID\",vm:\"1\",version:\"DICOM\"},\"(3010,000C)\":{tag:\"(3010,000C)\",vr:\"UT\",name:\"ConceptualVolumeCombinationExpression\",vm:\"1\",version:\"DICOM\"},\"(3010,000D)\":{tag:\"(3010,000D)\",vr:\"US\",name:\"ConceptualVolumeConstituentIndex\",vm:\"1\",version:\"DICOM\"},\"(3010,000E)\":{tag:\"(3010,000E)\",vr:\"CS\",name:\"ConceptualVolumeCombinationFlag\",vm:\"1\",version:\"DICOM\"},\"(3010,000F)\":{tag:\"(3010,000F)\",vr:\"ST\",name:\"ConceptualVolumeCombinationDescription\",vm:\"1\",version:\"DICOM\"},\"(3010,0010)\":{tag:\"(3010,0010)\",vr:\"CS\",name:\"ConceptualVolumeSegmentationDefinedFlag\",vm:\"1\",version:\"DICOM\"},\"(3010,0011)\":{tag:\"(3010,0011)\",vr:\"SQ\",name:\"ConceptualVolumeSegmentationReferenceSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0012)\":{tag:\"(3010,0012)\",vr:\"SQ\",name:\"ConceptualVolumeConstituentSegmentationReferenceSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0013)\":{tag:\"(3010,0013)\",vr:\"UI\",name:\"ConstituentConceptualVolumeUID\",vm:\"1\",version:\"DICOM\"},\"(3010,0014)\":{tag:\"(3010,0014)\",vr:\"SQ\",name:\"DerivationConceptualVolumeSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0015)\":{tag:\"(3010,0015)\",vr:\"UI\",name:\"SourceConceptualVolumeUID\",vm:\"1\",version:\"DICOM\"},\"(3010,0016)\":{tag:\"(3010,0016)\",vr:\"SQ\",name:\"ConceptualVolumeDerivationAlgorithmSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0017)\":{tag:\"(3010,0017)\",vr:\"ST\",name:\"ConceptualVolumeDescription\",vm:\"1\",version:\"DICOM\"},\"(3010,0018)\":{tag:\"(3010,0018)\",vr:\"SQ\",name:\"SourceConceptualVolumeSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0019)\":{tag:\"(3010,0019)\",vr:\"SQ\",name:\"AuthorIdentificationSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,001A)\":{tag:\"(3010,001A)\",vr:\"LO\",name:\"ManufacturerModelVersion\",vm:\"1\",version:\"DICOM\"},\"(3010,001B)\":{tag:\"(3010,001B)\",vr:\"UC\",name:\"DeviceAlternateIdentifier\",vm:\"1\",version:\"DICOM\"},\"(3010,001C)\":{tag:\"(3010,001C)\",vr:\"CS\",name:\"DeviceAlternateIdentifierType\",vm:\"1\",version:\"DICOM\"},\"(3010,001D)\":{tag:\"(3010,001D)\",vr:\"LT\",name:\"DeviceAlternateIdentifierFormat\",vm:\"1\",version:\"DICOM\"},\"(3010,001E)\":{tag:\"(3010,001E)\",vr:\"LO\",name:\"SegmentationCreationTemplateLabel\",vm:\"1\",version:\"DICOM\"},\"(3010,001F)\":{tag:\"(3010,001F)\",vr:\"UI\",name:\"SegmentationTemplateUID\",vm:\"1\",version:\"DICOM\"},\"(3010,0020)\":{tag:\"(3010,0020)\",vr:\"US\",name:\"ReferencedSegmentReferenceIndex\",vm:\"1\",version:\"DICOM\"},\"(3010,0021)\":{tag:\"(3010,0021)\",vr:\"SQ\",name:\"SegmentReferenceSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0022)\":{tag:\"(3010,0022)\",vr:\"US\",name:\"SegmentReferenceIndex\",vm:\"1\",version:\"DICOM\"},\"(3010,0023)\":{tag:\"(3010,0023)\",vr:\"SQ\",name:\"DirectSegmentReferenceSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0024)\":{tag:\"(3010,0024)\",vr:\"SQ\",name:\"CombinationSegmentReferenceSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0025)\":{tag:\"(3010,0025)\",vr:\"SQ\",name:\"ConceptualVolumeSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0026)\":{tag:\"(3010,0026)\",vr:\"SQ\",name:\"SegmentedRTAccessoryDeviceSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0027)\":{tag:\"(3010,0027)\",vr:\"SQ\",name:\"SegmentCharacteristicsSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0028)\":{tag:\"(3010,0028)\",vr:\"SQ\",name:\"RelatedSegmentCharacteristicsSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0029)\":{tag:\"(3010,0029)\",vr:\"US\",name:\"SegmentCharacteristicsPrecedence\",vm:\"1\",version:\"DICOM\"},\"(3010,002A)\":{tag:\"(3010,002A)\",vr:\"SQ\",name:\"RTSegmentAnnotationSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,002B)\":{tag:\"(3010,002B)\",vr:\"SQ\",name:\"SegmentAnnotationCategoryCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,002C)\":{tag:\"(3010,002C)\",vr:\"SQ\",name:\"SegmentAnnotationTypeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,002D)\":{tag:\"(3010,002D)\",vr:\"LO\",name:\"DeviceLabel\",vm:\"1\",version:\"DICOM\"},\"(3010,002E)\":{tag:\"(3010,002E)\",vr:\"SQ\",name:\"DeviceTypeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,002F)\":{tag:\"(3010,002F)\",vr:\"SQ\",name:\"SegmentAnnotationTypeModifierCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0030)\":{tag:\"(3010,0030)\",vr:\"SQ\",name:\"PatientEquipmentRelationshipCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0031)\":{tag:\"(3010,0031)\",vr:\"UI\",name:\"ReferencedFiducialsUID\",vm:\"1\",version:\"DICOM\"},\"(3010,0032)\":{tag:\"(3010,0032)\",vr:\"SQ\",name:\"PatientTreatmentOrientationSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0033)\":{tag:\"(3010,0033)\",vr:\"SH\",name:\"UserContentLabel\",vm:\"1\",version:\"DICOM\"},\"(3010,0034)\":{tag:\"(3010,0034)\",vr:\"LO\",name:\"UserContentLongLabel\",vm:\"1\",version:\"DICOM\"},\"(3010,0035)\":{tag:\"(3010,0035)\",vr:\"SH\",name:\"EntityLabel\",vm:\"1\",version:\"DICOM\"},\"(3010,0036)\":{tag:\"(3010,0036)\",vr:\"LO\",name:\"EntityName\",vm:\"1\",version:\"DICOM\"},\"(3010,0037)\":{tag:\"(3010,0037)\",vr:\"ST\",name:\"EntityDescription\",vm:\"1\",version:\"DICOM\"},\"(3010,0038)\":{tag:\"(3010,0038)\",vr:\"LO\",name:\"EntityLongLabel\",vm:\"1\",version:\"DICOM\"},\"(3010,0039)\":{tag:\"(3010,0039)\",vr:\"US\",name:\"DeviceIndex\",vm:\"1\",version:\"DICOM\"},\"(3010,003A)\":{tag:\"(3010,003A)\",vr:\"US\",name:\"RTTreatmentPhaseIndex\",vm:\"1\",version:\"DICOM\"},\"(3010,003B)\":{tag:\"(3010,003B)\",vr:\"UI\",name:\"RTTreatmentPhaseUID\",vm:\"1\",version:\"DICOM\"},\"(3010,003C)\":{tag:\"(3010,003C)\",vr:\"US\",name:\"RTPrescriptionIndex\",vm:\"1\",version:\"DICOM\"},\"(3010,003D)\":{tag:\"(3010,003D)\",vr:\"US\",name:\"RTSegmentAnnotationIndex\",vm:\"1\",version:\"DICOM\"},\"(3010,003E)\":{tag:\"(3010,003E)\",vr:\"US\",name:\"BasisRTTreatmentPhaseIndex\",vm:\"1\",version:\"DICOM\"},\"(3010,003F)\":{tag:\"(3010,003F)\",vr:\"US\",name:\"RelatedRTTreatmentPhaseIndex\",vm:\"1\",version:\"DICOM\"},\"(3010,0040)\":{tag:\"(3010,0040)\",vr:\"US\",name:\"ReferencedRTTreatmentPhaseIndex\",vm:\"1\",version:\"DICOM\"},\"(3010,0041)\":{tag:\"(3010,0041)\",vr:\"US\",name:\"ReferencedRTPrescriptionIndex\",vm:\"1\",version:\"DICOM\"},\"(3010,0042)\":{tag:\"(3010,0042)\",vr:\"US\",name:\"ReferencedParentRTPrescriptionIndex\",vm:\"1\",version:\"DICOM\"},\"(3010,0043)\":{tag:\"(3010,0043)\",vr:\"ST\",name:\"ManufacturerDeviceIdentifier\",vm:\"1\",version:\"DICOM\"},\"(3010,0044)\":{tag:\"(3010,0044)\",vr:\"SQ\",name:\"InstanceLevelReferencedPerformedProcedureStepSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0045)\":{tag:\"(3010,0045)\",vr:\"CS\",name:\"RTTreatmentPhaseIntentPresenceFlag\",vm:\"1\",version:\"DICOM\"},\"(3010,0046)\":{tag:\"(3010,0046)\",vr:\"CS\",name:\"RadiotherapyTreatmentType\",vm:\"1\",version:\"DICOM\"},\"(3010,0047)\":{tag:\"(3010,0047)\",vr:\"CS\",name:\"TeletherapyRadiationType\",vm:\"1-n\",version:\"DICOM\"},\"(3010,0048)\":{tag:\"(3010,0048)\",vr:\"CS\",name:\"BrachytherapySourceType\",vm:\"1-n\",version:\"DICOM\"},\"(3010,0049)\":{tag:\"(3010,0049)\",vr:\"SQ\",name:\"ReferencedRTTreatmentPhaseSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,004A)\":{tag:\"(3010,004A)\",vr:\"SQ\",name:\"ReferencedDirectSegmentInstanceSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,004B)\":{tag:\"(3010,004B)\",vr:\"SQ\",name:\"IntendedRTTreatmentPhaseSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,004C)\":{tag:\"(3010,004C)\",vr:\"DA\",name:\"IntendedPhaseStartDate\",vm:\"1\",version:\"DICOM\"},\"(3010,004D)\":{tag:\"(3010,004D)\",vr:\"DA\",name:\"IntendedPhaseEndDate\",vm:\"1\",version:\"DICOM\"},\"(3010,004E)\":{tag:\"(3010,004E)\",vr:\"SQ\",name:\"RTTreatmentPhaseIntervalSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,004F)\":{tag:\"(3010,004F)\",vr:\"CS\",name:\"TemporalRelationshipIntervalAnchor\",vm:\"1\",version:\"DICOM\"},\"(3010,0050)\":{tag:\"(3010,0050)\",vr:\"FD\",name:\"MinimumNumberOfIntervalDays\",vm:\"1\",version:\"DICOM\"},\"(3010,0051)\":{tag:\"(3010,0051)\",vr:\"FD\",name:\"MaximumNumberOfIntervalDays\",vm:\"1\",version:\"DICOM\"},\"(3010,0052)\":{tag:\"(3010,0052)\",vr:\"UI\",name:\"PertinentSOPClassesInStudy\",vm:\"1-n\",version:\"DICOM\"},\"(3010,0053)\":{tag:\"(3010,0053)\",vr:\"UI\",name:\"PertinentSOPClassesInSeries\",vm:\"1-n\",version:\"DICOM\"},\"(3010,0054)\":{tag:\"(3010,0054)\",vr:\"LO\",name:\"RTPrescriptionLabel\",vm:\"1\",version:\"DICOM\"},\"(3010,0055)\":{tag:\"(3010,0055)\",vr:\"SQ\",name:\"RTPhysicianIntentPredecessorSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0056)\":{tag:\"(3010,0056)\",vr:\"LO\",name:\"RTTreatmentApproachLabel\",vm:\"1\",version:\"DICOM\"},\"(3010,0057)\":{tag:\"(3010,0057)\",vr:\"SQ\",name:\"RTPhysicianIntentSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0058)\":{tag:\"(3010,0058)\",vr:\"US\",name:\"RTPhysicianIntentIndex\",vm:\"1\",version:\"DICOM\"},\"(3010,0059)\":{tag:\"(3010,0059)\",vr:\"CS\",name:\"RTTreatmentIntentType\",vm:\"1\",version:\"DICOM\"},\"(3010,005A)\":{tag:\"(3010,005A)\",vr:\"UT\",name:\"RTPhysicianIntentNarrative\",vm:\"1\",version:\"DICOM\"},\"(3010,005B)\":{tag:\"(3010,005B)\",vr:\"SQ\",name:\"RTProtocolCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,005C)\":{tag:\"(3010,005C)\",vr:\"ST\",name:\"ReasonForSuperseding\",vm:\"1\",version:\"DICOM\"},\"(3010,005D)\":{tag:\"(3010,005D)\",vr:\"SQ\",name:\"RTDiagnosisCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,005E)\":{tag:\"(3010,005E)\",vr:\"US\",name:\"ReferencedRTPhysicianIntentIndex\",vm:\"1\",version:\"DICOM\"},\"(3010,005F)\":{tag:\"(3010,005F)\",vr:\"SQ\",name:\"RTPhysicianIntentInputInstanceSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0060)\":{tag:\"(3010,0060)\",vr:\"SQ\",name:\"RTAnatomicPrescriptionSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0061)\":{tag:\"(3010,0061)\",vr:\"UT\",name:\"PriorTreatmentDoseDescription\",vm:\"1\",version:\"DICOM\"},\"(3010,0062)\":{tag:\"(3010,0062)\",vr:\"SQ\",name:\"PriorTreatmentReferenceSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0063)\":{tag:\"(3010,0063)\",vr:\"CS\",name:\"DosimetricObjectiveEvaluationScope\",vm:\"1\",version:\"DICOM\"},\"(3010,0064)\":{tag:\"(3010,0064)\",vr:\"SQ\",name:\"TherapeuticRoleCategoryCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0065)\":{tag:\"(3010,0065)\",vr:\"SQ\",name:\"TherapeuticRoleTypeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0066)\":{tag:\"(3010,0066)\",vr:\"US\",name:\"ConceptualVolumeOptimizationPrecedence\",vm:\"1\",version:\"DICOM\"},\"(3010,0067)\":{tag:\"(3010,0067)\",vr:\"SQ\",name:\"ConceptualVolumeCategoryCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0068)\":{tag:\"(3010,0068)\",vr:\"CS\",name:\"ConceptualVolumeBlockingConstraint\",vm:\"1\",version:\"DICOM\"},\"(3010,0069)\":{tag:\"(3010,0069)\",vr:\"SQ\",name:\"ConceptualVolumeTypeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,006A)\":{tag:\"(3010,006A)\",vr:\"SQ\",name:\"ConceptualVolumeTypeModifierCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,006B)\":{tag:\"(3010,006B)\",vr:\"SQ\",name:\"RTPrescriptionSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,006C)\":{tag:\"(3010,006C)\",vr:\"SQ\",name:\"DosimetricObjectiveSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,006D)\":{tag:\"(3010,006D)\",vr:\"SQ\",name:\"DosimetricObjectiveTypeCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,006E)\":{tag:\"(3010,006E)\",vr:\"UI\",name:\"DosimetricObjectiveUID\",vm:\"1\",version:\"DICOM\"},\"(3010,006F)\":{tag:\"(3010,006F)\",vr:\"UI\",name:\"ReferencedDosimetricObjectiveUID\",vm:\"1\",version:\"DICOM\"},\"(3010,0070)\":{tag:\"(3010,0070)\",vr:\"SQ\",name:\"DosimetricObjectiveParameterSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0071)\":{tag:\"(3010,0071)\",vr:\"SQ\",name:\"ReferencedDosimetricObjectivesSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0073)\":{tag:\"(3010,0073)\",vr:\"CS\",name:\"AbsoluteDosimetricObjectiveFlag\",vm:\"1\",version:\"DICOM\"},\"(3010,0074)\":{tag:\"(3010,0074)\",vr:\"FD\",name:\"DosimetricObjectiveWeight\",vm:\"1\",version:\"DICOM\"},\"(3010,0075)\":{tag:\"(3010,0075)\",vr:\"CS\",name:\"DosimetricObjectivePurpose\",vm:\"1\",version:\"DICOM\"},\"(3010,0076)\":{tag:\"(3010,0076)\",vr:\"SQ\",name:\"PlanningInputInformationSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0077)\":{tag:\"(3010,0077)\",vr:\"LO\",name:\"TreatmentSite\",vm:\"1\",version:\"DICOM\"},\"(3010,0078)\":{tag:\"(3010,0078)\",vr:\"SQ\",name:\"TreatmentSiteCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0079)\":{tag:\"(3010,0079)\",vr:\"SQ\",name:\"FractionPatternSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,007A)\":{tag:\"(3010,007A)\",vr:\"UT\",name:\"TreatmentTechniqueNotes\",vm:\"1\",version:\"DICOM\"},\"(3010,007B)\":{tag:\"(3010,007B)\",vr:\"UT\",name:\"PrescriptionNotes\",vm:\"1\",version:\"DICOM\"},\"(3010,007C)\":{tag:\"(3010,007C)\",vr:\"IS\",name:\"NumberOfIntervalFractions\",vm:\"1\",version:\"DICOM\"},\"(3010,007D)\":{tag:\"(3010,007D)\",vr:\"US\",name:\"NumberOfFractions\",vm:\"1\",version:\"DICOM\"},\"(3010,007E)\":{tag:\"(3010,007E)\",vr:\"US\",name:\"IntendedDeliveryDuration\",vm:\"1\",version:\"DICOM\"},\"(3010,007F)\":{tag:\"(3010,007F)\",vr:\"UT\",name:\"FractionationNotes\",vm:\"1\",version:\"DICOM\"},\"(3010,0080)\":{tag:\"(3010,0080)\",vr:\"SQ\",name:\"RTTreatmentTechniqueCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0081)\":{tag:\"(3010,0081)\",vr:\"SQ\",name:\"PrescriptionNotesSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0082)\":{tag:\"(3010,0082)\",vr:\"SQ\",name:\"FractionBasedRelationshipSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0083)\":{tag:\"(3010,0083)\",vr:\"CS\",name:\"FractionBasedRelationshipIntervalAnchor\",vm:\"1\",version:\"DICOM\"},\"(3010,0084)\":{tag:\"(3010,0084)\",vr:\"FD\",name:\"MinimumHoursBetweenFractions\",vm:\"1\",version:\"DICOM\"},\"(3010,0085)\":{tag:\"(3010,0085)\",vr:\"TM\",name:\"IntendedFractionStartTime\",vm:\"1-n\",version:\"DICOM\"},\"(3010,0086)\":{tag:\"(3010,0086)\",vr:\"LT\",name:\"IntendedStartDayOfWeek\",vm:\"1\",version:\"DICOM\"},\"(3010,0087)\":{tag:\"(3010,0087)\",vr:\"SQ\",name:\"WeekdayFractionPatternSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0088)\":{tag:\"(3010,0088)\",vr:\"SQ\",name:\"DeliveryTimeStructureCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0089)\":{tag:\"(3010,0089)\",vr:\"SQ\",name:\"TreatmentSiteModifierCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0090)\":{tag:\"(3010,0090)\",vr:\"CS\",name:\"RoboticBaseLocationIndicator\",vm:\"1\",version:\"DICOM\"},\"(3010,0091)\":{tag:\"(3010,0091)\",vr:\"SQ\",name:\"RoboticPathNodeSetCodeSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0092)\":{tag:\"(3010,0092)\",vr:\"UL\",name:\"RoboticNodeIdentifier\",vm:\"1\",version:\"DICOM\"},\"(3010,0093)\":{tag:\"(3010,0093)\",vr:\"FD\",name:\"RTTreatmentSourceCoordinates\",vm:\"3\",version:\"DICOM\"},\"(3010,0094)\":{tag:\"(3010,0094)\",vr:\"FD\",name:\"RadiationSourceCoordinateSystemYawAngle\",vm:\"1\",version:\"DICOM\"},\"(3010,0095)\":{tag:\"(3010,0095)\",vr:\"FD\",name:\"RadiationSourceCoordinateSystemRollAngle\",vm:\"1\",version:\"DICOM\"},\"(3010,0096)\":{tag:\"(3010,0096)\",vr:\"FD\",name:\"RadiationSourceCoordinateSystemPitchAngle\",vm:\"1\",version:\"DICOM\"},\"(3010,0097)\":{tag:\"(3010,0097)\",vr:\"SQ\",name:\"RoboticPathControlPointSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0098)\":{tag:\"(3010,0098)\",vr:\"SQ\",name:\"TomotherapeuticControlPointSequence\",vm:\"1\",version:\"DICOM\"},\"(3010,0099)\":{tag:\"(3010,0099)\",vr:\"FD\",name:\"TomotherapeuticLeafOpenDurations\",vm:\"1-n\",version:\"DICOM\"},\"(3010,009A)\":{tag:\"(3010,009A)\",vr:\"FD\",name:\"TomotherapeuticLeafInitialClosedDurations\",vm:\"1-n\",version:\"DICOM\"},\"(4FFE,0001)\":{tag:\"(4FFE,0001)\",vr:\"SQ\",name:\"MACParametersSequence\",vm:\"1\",version:\"DICOM\"},\"(5200,9229)\":{tag:\"(5200,9229)\",vr:\"SQ\",name:\"SharedFunctionalGroupsSequence\",vm:\"1\",version:\"DICOM\"},\"(5200,9230)\":{tag:\"(5200,9230)\",vr:\"SQ\",name:\"PerFrameFunctionalGroupsSequence\",vm:\"1\",version:\"DICOM\"},\"(5400,0100)\":{tag:\"(5400,0100)\",vr:\"SQ\",name:\"WaveformSequence\",vm:\"1\",version:\"DICOM\"},\"(5400,0110)\":{tag:\"(5400,0110)\",vr:\"ox\",name:\"ChannelMinimumValue\",vm:\"1\",version:\"DICOM\"},\"(5400,0112)\":{tag:\"(5400,0112)\",vr:\"ox\",name:\"ChannelMaximumValue\",vm:\"1\",version:\"DICOM\"},\"(5400,1004)\":{tag:\"(5400,1004)\",vr:\"US\",name:\"WaveformBitsAllocated\",vm:\"1\",version:\"DICOM\"},\"(5400,1006)\":{tag:\"(5400,1006)\",vr:\"CS\",name:\"WaveformSampleInterpretation\",vm:\"1\",version:\"DICOM\"},\"(5400,100A)\":{tag:\"(5400,100A)\",vr:\"ox\",name:\"WaveformPaddingValue\",vm:\"1\",version:\"DICOM\"},\"(5400,1010)\":{tag:\"(5400,1010)\",vr:\"ox\",name:\"WaveformData\",vm:\"1\",version:\"DICOM\"},\"(5600,0010)\":{tag:\"(5600,0010)\",vr:\"OF\",name:\"FirstOrderPhaseCorrectionAngle\",vm:\"1\",version:\"DICOM\"},\"(5600,0020)\":{tag:\"(5600,0020)\",vr:\"OF\",name:\"SpectroscopyData\",vm:\"1\",version:\"DICOM\"},\"(6000-60FF,0010)\":{tag:\"(6000-60FF,0010)\",vr:\"US\",name:\"OverlayRows\",vm:\"1\",version:\"DICOM\"},\"(6000-60FF,0011)\":{tag:\"(6000-60FF,0011)\",vr:\"US\",name:\"OverlayColumns\",vm:\"1\",version:\"DICOM\"},\"(6000-60FF,0015)\":{tag:\"(6000-60FF,0015)\",vr:\"IS\",name:\"NumberOfFramesInOverlay\",vm:\"1\",version:\"DICOM\"},\"(6000-60FF,0022)\":{tag:\"(6000-60FF,0022)\",vr:\"LO\",name:\"OverlayDescription\",vm:\"1\",version:\"DICOM\"},\"(6000-60FF,0040)\":{tag:\"(6000-60FF,0040)\",vr:\"CS\",name:\"OverlayType\",vm:\"1\",version:\"DICOM\"},\"(6000-60FF,0045)\":{tag:\"(6000-60FF,0045)\",vr:\"LO\",name:\"OverlaySubtype\",vm:\"1\",version:\"DICOM\"},\"(6000-60FF,0050)\":{tag:\"(6000-60FF,0050)\",vr:\"SS\",name:\"OverlayOrigin\",vm:\"2\",version:\"DICOM\"},\"(6000-60FF,0051)\":{tag:\"(6000-60FF,0051)\",vr:\"US\",name:\"ImageFrameOrigin\",vm:\"1\",version:\"DICOM\"},\"(6000-60FF,0100)\":{tag:\"(6000-60FF,0100)\",vr:\"US\",name:\"OverlayBitsAllocated\",vm:\"1\",version:\"DICOM\"},\"(6000-60FF,0102)\":{tag:\"(6000-60FF,0102)\",vr:\"US\",name:\"OverlayBitPosition\",vm:\"1\",version:\"DICOM\"},\"(6000-60FF,1001)\":{tag:\"(6000-60FF,1001)\",vr:\"CS\",name:\"OverlayActivationLayer\",vm:\"1\",version:\"DICOM\"},\"(6000-60FF,1301)\":{tag:\"(6000-60FF,1301)\",vr:\"IS\",name:\"ROIArea\",vm:\"1\",version:\"DICOM\"},\"(6000-60FF,1302)\":{tag:\"(6000-60FF,1302)\",vr:\"DS\",name:\"ROIMean\",vm:\"1\",version:\"DICOM\"},\"(6000-60FF,1303)\":{tag:\"(6000-60FF,1303)\",vr:\"DS\",name:\"ROIStandardDeviation\",vm:\"1\",version:\"DICOM\"},\"(6000-60FF,1500)\":{tag:\"(6000-60FF,1500)\",vr:\"LO\",name:\"OverlayLabel\",vm:\"1\",version:\"DICOM\"},\"(6000-60FF,3000)\":{tag:\"(6000-60FF,3000)\",vr:\"ox\",name:\"OverlayData\",vm:\"1\",version:\"DICOM\"},\"(7FE0,0001)\":{tag:\"(7FE0,0001)\",vr:\"OV\",name:\"ExtendedOffsetTable\",vm:\"1\",version:\"DICOM\"},\"(7FE0,0002)\":{tag:\"(7FE0,0002)\",vr:\"OV\",name:\"ExtendedOffsetTableLengths\",vm:\"1\",version:\"DICOM\"},\"(7FE0,0008)\":{tag:\"(7FE0,0008)\",vr:\"OF\",name:\"FloatPixelData\",vm:\"1\",version:\"DICOM\"},\"(7FE0,0009)\":{tag:\"(7FE0,0009)\",vr:\"OD\",name:\"DoubleFloatPixelData\",vm:\"1\",version:\"DICOM\"},\"(7FE0,0010)\":{tag:\"(7FE0,0010)\",vr:\"ox\",name:\"PixelData\",vm:\"1\",version:\"DICOM\"},\"(FFFA,FFFA)\":{tag:\"(FFFA,FFFA)\",vr:\"SQ\",name:\"DigitalSignaturesSequence\",vm:\"1\",version:\"DICOM\"},\"(FFFC,FFFC)\":{tag:\"(FFFC,FFFC)\",vr:\"OB\",name:\"DataSetTrailingPadding\",vm:\"1\",version:\"DICOM\"},\"(FFFE,E000)\":{tag:\"(FFFE,E000)\",vr:\"na\",name:\"Item\",vm:\"1\",version:\"DICOM\"},\"(FFFE,E00D)\":{tag:\"(FFFE,E00D)\",vr:\"na\",name:\"ItemDelimitationItem\",vm:\"1\",version:\"DICOM\"},\"(FFFE,E0DD)\":{tag:\"(FFFE,E0DD)\",vr:\"na\",name:\"SequenceDelimitationItem\",vm:\"1\",version:\"DICOM\"},\"(0028,1224)\":{tag:\"(0028,1224)\",vr:\"OW\",name:\"SegmentedAlphaPaletteColorLookupTableData\",vm:\"1\",version:\"Supplement_156\"},\"(0070,1101)\":{tag:\"(0070,1101)\",vr:\"UI\",name:\"PresentationDisplayCollectionUID\",vm:\"1\",version:\"Supplement_156\"},\"(0070,1102)\":{tag:\"(0070,1102)\",vr:\"UI\",name:\"PresentationSequenceCollectionUID\",vm:\"1\",version:\"Supplement_156\"},\"(0070,1103)\":{tag:\"(0070,1103)\",vr:\"US\",name:\"PresentationSequencePositionIndex\",vm:\"1\",version:\"Supplement_156\"},\"(0070,1104)\":{tag:\"(0070,1104)\",vr:\"SQ\",name:\"RenderedImageReferenceSequence\",vm:\"1\",version:\"Supplement_156\"},\"(0070,1201)\":{tag:\"(0070,1201)\",vr:\"SQ\",name:\"VolumetricPresentationStateInputSequence\",vm:\"1\",version:\"Supplement_156\"},\"(0070,1202)\":{tag:\"(0070,1202)\",vr:\"CS\",name:\"PresentationInputType\",vm:\"1\",version:\"Supplement_156\"},\"(0070,1203)\":{tag:\"(0070,1203)\",vr:\"US\",name:\"InputSequencePositionIndex\",vm:\"1\",version:\"Supplement_156\"},\"(0070,1204)\":{tag:\"(0070,1204)\",vr:\"CS\",name:\"Crop\",vm:\"1\",version:\"Supplement_156\"},\"(0070,1205)\":{tag:\"(0070,1205)\",vr:\"US\",name:\"CroppingSpecificationIndex\",vm:\"1-n\",version:\"Supplement_156\"},\"(0070,1206)\":{tag:\"(0070,1206)\",vr:\"CS\",name:\"CompositingMethod\",vm:\"1\",version:\"Supplement_156\"},\"(0070,1207)\":{tag:\"(0070,1207)\",vr:\"US\",name:\"VolumetricPresentationInputNumber\",vm:\"1\",version:\"Supplement_156\"},\"(0070,1208)\":{tag:\"(0070,1208)\",vr:\"CS\",name:\"ImageVolumeGeometry\",vm:\"1\",version:\"Supplement_156\"},\"(0070,1301)\":{tag:\"(0070,1301)\",vr:\"SQ\",name:\"VolumeCroppingSequence\",vm:\"1\",version:\"Supplement_156\"},\"(0070,1302)\":{tag:\"(0070,1302)\",vr:\"CS\",name:\"VolumeCroppingMethod\",vm:\"1\",version:\"Supplement_156\"},\"(0070,1303)\":{tag:\"(0070,1303)\",vr:\"FD\",name:\"BoundingBoxCrop\",vm:\"6\",version:\"Supplement_156\"},\"(0070,1304)\":{tag:\"(0070,1304)\",vr:\"SQ\",name:\"ObliqueCroppingPlaneSequence\",vm:\"1\",version:\"Supplement_156\"},\"(0070,1305)\":{tag:\"(0070,1305)\",vr:\"FD\",name:\"ObliqueCroppingPlane\",vm:\"4\",version:\"Supplement_156\"},\"(0070,1306)\":{tag:\"(0070,1306)\",vr:\"FD\",name:\"ObliqueCroppingPlaneNormal\",vm:\"3\",version:\"Supplement_156\"},\"(0070,1309)\":{tag:\"(0070,1309)\",vr:\"US\",name:\"CroppingSpecificationNumber\",vm:\"1\",version:\"Supplement_156\"},\"(0070,1501)\":{tag:\"(0070,1501)\",vr:\"CS\",name:\"MultiPlanarReconstructionStyle\",vm:\"1\",version:\"Supplement_156\"},\"(0070,1502)\":{tag:\"(0070,1502)\",vr:\"CS\",name:\"MPRThicknessType\",vm:\"1\",version:\"Supplement_156\"},\"(0070,1503)\":{tag:\"(0070,1503)\",vr:\"FD\",name:\"MPRSlabThickness\",vm:\"1\",version:\"Supplement_156\"},\"(0070,1505)\":{tag:\"(0070,1505)\",vr:\"FD\",name:\"MPRTopLeftHandCorner\",vm:\"3\",version:\"Supplement_156\"},\"(0070,1507)\":{tag:\"(0070,1507)\",vr:\"FD\",name:\"MPRViewWidthDirection\",vm:\"3\",version:\"Supplement_156\"},\"(0070,1508)\":{tag:\"(0070,1508)\",vr:\"FD\",name:\"MPRViewWidth\",vm:\"1\",version:\"Supplement_156\"},\"(0070,150C)\":{tag:\"(0070,150C)\",vr:\"FL\",name:\"NumberOfVolumetricCurvePoints\",vm:\"1\",version:\"Supplement_156\"},\"(0070,150D)\":{tag:\"(0070,150D)\",vr:\"OD\",name:\"VolumetricCurvePoints\",vm:\"1\",version:\"Supplement_156\"},\"(0070,1511)\":{tag:\"(0070,1511)\",vr:\"FD\",name:\"MPRViewHeightDirection\",vm:\"3\",version:\"Supplement_156\"},\"(0070,1512)\":{tag:\"(0070,1512)\",vr:\"FD\",name:\"MPRViewHeight\",vm:\"1\",version:\"Supplement_156\"},\"(0070,1801)\":{tag:\"(0070,1801)\",vr:\"SQ\",name:\"PresentationStateClassificationComponentSequence\",vm:\"1\",version:\"Supplement_156\"},\"(0070,1802)\":{tag:\"(0070,1802)\",vr:\"CS\",name:\"ComponentType\",vm:\"1\",version:\"Supplement_156\"},\"(0070,1803)\":{tag:\"(0070,1803)\",vr:\"SQ\",name:\"ComponentInputSequence\",vm:\"1\",version:\"Supplement_156\"},\"(0070,1804)\":{tag:\"(0070,1804)\",vr:\"US\",name:\"VolumetricPresentationInputIndex\",vm:\"1\",version:\"Supplement_156\"},\"(0070,1805)\":{tag:\"(0070,1805)\",vr:\"SQ\",name:\"PresentationStateCompositorComponentSequence\",vm:\"1\",version:\"Supplement_156\"},\"(0070,1806)\":{tag:\"(0070,1806)\",vr:\"SQ\",name:\"WeightingTransferFunctionSequence\",vm:\"1\",version:\"Supplement_156\"},\"(0070,1807)\":{tag:\"(0070,1807)\",vr:\"US\",name:\"WeightingLookupTableDescriptor\",vm:\"3\",version:\"Supplement_156\"},\"(0070,1808)\":{tag:\"(0070,1808)\",vr:\"OB\",name:\"WeightingLookupTableData\",vm:\"1\",version:\"Supplement_156\"},\"(0070,1901)\":{tag:\"(0070,1901)\",vr:\"SQ\",name:\"VolumetricAnnotationSequence\",vm:\"1\",version:\"Supplement_156\"},\"(0070,1903)\":{tag:\"(0070,1903)\",vr:\"SQ\",name:\"ReferencedStructuredContextSequence\",vm:\"1\",version:\"Supplement_156\"},\"(0070,1904)\":{tag:\"(0070,1904)\",vr:\"UI\",name:\"ReferencedContentItem\",vm:\"1\",version:\"Supplement_156\"},\"(0070,1905)\":{tag:\"(0070,1905)\",vr:\"SQ\",name:\"VolumetricPresentationInputAnnotationSequence\",vm:\"1\",version:\"Supplement_156\"},\"(0070,1907)\":{tag:\"(0070,1907)\",vr:\"CS\",name:\"AnnotationClipping\",vm:\"1\",version:\"Supplement_156\"},\"(0070,1A01)\":{tag:\"(0070,1A01)\",vr:\"CS\",name:\"PresentationAnimationStyle\",vm:\"1\",version:\"Supplement_156\"},\"(0070,1A03)\":{tag:\"(0070,1A03)\",vr:\"FD\",name:\"RecommendedAnimationRate\",vm:\"1\",version:\"Supplement_156\"},\"(0070,1A04)\":{tag:\"(0070,1A04)\",vr:\"SQ\",name:\"AnimationCurveSequence\",vm:\"1\",version:\"Supplement_156\"},\"(0070,1A05)\":{tag:\"(0070,1A05)\",vr:\"FD\",name:\"AnimationStepSize\",vm:\"1\",version:\"Supplement_156\"},\"(0040,4070)\":{tag:\"(0040,4070)\",vr:\"SQ\",name:\"OutputDestinationSequence\",vm:\"1\",version:\"CP_1441\"},\"(0040,4071)\":{tag:\"(0040,4071)\",vr:\"SQ\",name:\"DICOMStorageSequence\",vm:\"1\",version:\"CP_1441\"},\"(0040,4072)\":{tag:\"(0040,4072)\",vr:\"SQ\",name:\"STOWRSStorageSequence\",vm:\"1\",version:\"CP_1441\"},\"(0040,4073)\":{tag:\"(0040,4073)\",vr:\"UR\",name:\"StorageURL\",vm:\"1\",version:\"CP_1441\"},\"(0040,4074)\":{tag:\"(0040,4074)\",vr:\"SQ\",name:\"XDSStorageSequence\",vm:\"1\",version:\"CP_1441\"},\"(0028,2002)\":{tag:\"(0028,2002)\",vr:\"CS\",name:\"ColorSpace\",vm:\"1\",version:\"CP_1454\"},\"(0040,9213)\":{tag:\"(0040,9213)\",vr:\"FD\",name:\"DoubleFloatRealWorldValueLastValueMapped\",vm:\"1\",version:\"CP_1458\"},\"(0040,9214)\":{tag:\"(0040,9214)\",vr:\"FD\",name:\"DoubleFloatRealWorldValueFirstValueMapped\",vm:\"1\",version:\"CP_1458\"},\"(0018,1320)\":{tag:\"(0018,1320)\",vr:\"FL\",name:\"B1rms\",vm:\"1\",version:\"CP_1461\"},\"(0009-o-FFFF,0000)\":{tag:\"(0009-o-FFFF,0000)\",vr:\"UL\",name:\"PrivateGroupLength\",vm:\"1\",version:\"PRIVATE\"},\"(0009-o-FFFF,0010-u-00FF)\":{tag:\"(0009-o-FFFF,0010-u-00FF)\",vr:\"LO\",name:\"PrivateCreator\",vm:\"1\",version:\"PRIVATE\"},\"(0001-o-0007,0000)\":{tag:\"(0001-o-0007,0000)\",vr:\"UL\",name:\"IllegalGroupLength\",vm:\"1\",version:\"ILLEGAL\"},\"(0001-o-0007,0010-u-00FF)\":{tag:\"(0001-o-0007,0010-u-00FF)\",vr:\"LO\",name:\"IllegalPrivateCreator\",vm:\"1\",version:\"ILLEGAL\"},\"(0000-u-FFFF,0000)\":{tag:\"(0000-u-FFFF,0000)\",vr:\"UL\",name:\"GenericGroupLength\",vm:\"1\",version:\"GENERIC\"},\"(0000,0001)\":{tag:\"(0000,0001)\",vr:\"UL\",name:\"RETIRED_CommandLengthToEnd\",vm:\"1\",version:\"DICOM/retired\"},\"(0000,0010)\":{tag:\"(0000,0010)\",vr:\"SH\",name:\"RETIRED_CommandRecognitionCode\",vm:\"1\",version:\"DICOM/retired\"},\"(0000,0200)\":{tag:\"(0000,0200)\",vr:\"AE\",name:\"RETIRED_Initiator\",vm:\"1\",version:\"DICOM/retired\"},\"(0000,0300)\":{tag:\"(0000,0300)\",vr:\"AE\",name:\"RETIRED_Receiver\",vm:\"1\",version:\"DICOM/retired\"},\"(0000,0400)\":{tag:\"(0000,0400)\",vr:\"AE\",name:\"RETIRED_FindLocation\",vm:\"1\",version:\"DICOM/retired\"},\"(0000,0850)\":{tag:\"(0000,0850)\",vr:\"US\",name:\"RETIRED_NumberOfMatches\",vm:\"1\",version:\"DICOM/retired\"},\"(0000,0860)\":{tag:\"(0000,0860)\",vr:\"US\",name:\"RETIRED_ResponseSequenceNumber\",vm:\"1\",version:\"DICOM/retired\"},\"(0000,4000)\":{tag:\"(0000,4000)\",vr:\"LT\",name:\"RETIRED_DialogReceiver\",vm:\"1\",version:\"DICOM/retired\"},\"(0000,4010)\":{tag:\"(0000,4010)\",vr:\"LT\",name:\"RETIRED_TerminalType\",vm:\"1\",version:\"DICOM/retired\"},\"(0000,5010)\":{tag:\"(0000,5010)\",vr:\"SH\",name:\"RETIRED_MessageSetID\",vm:\"1\",version:\"DICOM/retired\"},\"(0000,5020)\":{tag:\"(0000,5020)\",vr:\"SH\",name:\"RETIRED_EndMessageID\",vm:\"1\",version:\"DICOM/retired\"},\"(0000,5110)\":{tag:\"(0000,5110)\",vr:\"LT\",name:\"RETIRED_DisplayFormat\",vm:\"1\",version:\"DICOM/retired\"},\"(0000,5120)\":{tag:\"(0000,5120)\",vr:\"LT\",name:\"RETIRED_PagePositionID\",vm:\"1\",version:\"DICOM/retired\"},\"(0000,5130)\":{tag:\"(0000,5130)\",vr:\"CS\",name:\"RETIRED_TextFormatID\",vm:\"1\",version:\"DICOM/retired\"},\"(0000,5140)\":{tag:\"(0000,5140)\",vr:\"CS\",name:\"RETIRED_NormalReverse\",vm:\"1\",version:\"DICOM/retired\"},\"(0000,5150)\":{tag:\"(0000,5150)\",vr:\"CS\",name:\"RETIRED_AddGrayScale\",vm:\"1\",version:\"DICOM/retired\"},\"(0000,5160)\":{tag:\"(0000,5160)\",vr:\"CS\",name:\"RETIRED_Borders\",vm:\"1\",version:\"DICOM/retired\"},\"(0000,5170)\":{tag:\"(0000,5170)\",vr:\"IS\",name:\"RETIRED_Copies\",vm:\"1\",version:\"DICOM/retired\"},\"(0000,5180)\":{tag:\"(0000,5180)\",vr:\"CS\",name:\"RETIRED_CommandMagnificationType\",vm:\"1\",version:\"DICOM/retired\"},\"(0000,5190)\":{tag:\"(0000,5190)\",vr:\"CS\",name:\"RETIRED_Erase\",vm:\"1\",version:\"DICOM/retired\"},\"(0000,51A0)\":{tag:\"(0000,51A0)\",vr:\"CS\",name:\"RETIRED_Print\",vm:\"1\",version:\"DICOM/retired\"},\"(0000,51B0)\":{tag:\"(0000,51B0)\",vr:\"US\",name:\"RETIRED_Overlays\",vm:\"1-n\",version:\"DICOM/retired\"},\"(0004,1504)\":{tag:\"(0004,1504)\",vr:\"up\",name:\"RETIRED_MRDRDirectoryRecordOffset\",vm:\"1\",version:\"DICOM/retired\"},\"(0004,1600)\":{tag:\"(0004,1600)\",vr:\"UL\",name:\"RETIRED_NumberOfReferences\",vm:\"1\",version:\"DICOM/retired\"},\"(0008,0001)\":{tag:\"(0008,0001)\",vr:\"UL\",name:\"RETIRED_LengthToEnd\",vm:\"1\",version:\"DICOM/retired\"},\"(0008,0010)\":{tag:\"(0008,0010)\",vr:\"SH\",name:\"RETIRED_RecognitionCode\",vm:\"1\",version:\"DICOM/retired\"},\"(0008,0024)\":{tag:\"(0008,0024)\",vr:\"DA\",name:\"RETIRED_OverlayDate\",vm:\"1\",version:\"DICOM/retired\"},\"(0008,0025)\":{tag:\"(0008,0025)\",vr:\"DA\",name:\"RETIRED_CurveDate\",vm:\"1\",version:\"DICOM/retired\"},\"(0008,0034)\":{tag:\"(0008,0034)\",vr:\"TM\",name:\"RETIRED_OverlayTime\",vm:\"1\",version:\"DICOM/retired\"},\"(0008,0035)\":{tag:\"(0008,0035)\",vr:\"TM\",name:\"RETIRED_CurveTime\",vm:\"1\",version:\"DICOM/retired\"},\"(0008,0040)\":{tag:\"(0008,0040)\",vr:\"US\",name:\"RETIRED_DataSetType\",vm:\"1\",version:\"DICOM/retired\"},\"(0008,0041)\":{tag:\"(0008,0041)\",vr:\"LO\",name:\"RETIRED_DataSetSubtype\",vm:\"1\",version:\"DICOM/retired\"},\"(0008,0042)\":{tag:\"(0008,0042)\",vr:\"CS\",name:\"RETIRED_NuclearMedicineSeriesType\",vm:\"1\",version:\"DICOM/retired\"},\"(0008,1000)\":{tag:\"(0008,1000)\",vr:\"AE\",name:\"RETIRED_NetworkID\",vm:\"1\",version:\"DICOM/retired\"},\"(0008,1100)\":{tag:\"(0008,1100)\",vr:\"SQ\",name:\"RETIRED_ReferencedResultsSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(0008,1130)\":{tag:\"(0008,1130)\",vr:\"SQ\",name:\"RETIRED_ReferencedOverlaySequence\",vm:\"1\",version:\"DICOM/retired\"},\"(0008,1145)\":{tag:\"(0008,1145)\",vr:\"SQ\",name:\"RETIRED_ReferencedCurveSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(0008,2110)\":{tag:\"(0008,2110)\",vr:\"CS\",name:\"RETIRED_LossyImageCompressionRetired\",vm:\"1\",version:\"DICOM/retired\"},\"(0008,2200)\":{tag:\"(0008,2200)\",vr:\"CS\",name:\"RETIRED_TransducerPosition\",vm:\"1\",version:\"DICOM/retired\"},\"(0008,2204)\":{tag:\"(0008,2204)\",vr:\"CS\",name:\"RETIRED_TransducerOrientation\",vm:\"1\",version:\"DICOM/retired\"},\"(0008,2208)\":{tag:\"(0008,2208)\",vr:\"CS\",name:\"RETIRED_AnatomicStructure\",vm:\"1\",version:\"DICOM/retired\"},\"(0008,2240)\":{tag:\"(0008,2240)\",vr:\"SQ\",name:\"RETIRED_TransducerPositionSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(0008,2242)\":{tag:\"(0008,2242)\",vr:\"SQ\",name:\"RETIRED_TransducerPositionModifierSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(0008,2244)\":{tag:\"(0008,2244)\",vr:\"SQ\",name:\"RETIRED_TransducerOrientationSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(0008,2246)\":{tag:\"(0008,2246)\",vr:\"SQ\",name:\"RETIRED_TransducerOrientationModifierSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(0008,2251)\":{tag:\"(0008,2251)\",vr:\"SQ\",name:\"RETIRED_AnatomicStructureSpaceOrRegionCodeSequenceTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0008,2253)\":{tag:\"(0008,2253)\",vr:\"SQ\",name:\"RETIRED_AnatomicPortalOfEntranceCodeSequenceTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0008,2255)\":{tag:\"(0008,2255)\",vr:\"SQ\",name:\"RETIRED_AnatomicApproachDirectionCodeSequenceTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0008,2256)\":{tag:\"(0008,2256)\",vr:\"ST\",name:\"RETIRED_AnatomicPerspectiveDescriptionTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0008,2257)\":{tag:\"(0008,2257)\",vr:\"SQ\",name:\"RETIRED_AnatomicPerspectiveCodeSequenceTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0008,2258)\":{tag:\"(0008,2258)\",vr:\"ST\",name:\"RETIRED_AnatomicLocationOfExaminingInstrumentDescriptionTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0008,2259)\":{tag:\"(0008,2259)\",vr:\"SQ\",name:\"RETIRED_AnatomicLocationOfExaminingInstrumentCodeSequenceTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0008,225A)\":{tag:\"(0008,225A)\",vr:\"SQ\",name:\"RETIRED_AnatomicStructureSpaceOrRegionModifierCodeSequenceTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0008,225C)\":{tag:\"(0008,225C)\",vr:\"SQ\",name:\"RETIRED_OnAxisBackgroundAnatomicStructureCodeSequenceTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0008,4000)\":{tag:\"(0008,4000)\",vr:\"LT\",name:\"RETIRED_IdentifyingComments\",vm:\"1\",version:\"DICOM/retired\"},\"(0010,1050)\":{tag:\"(0010,1050)\",vr:\"LO\",name:\"RETIRED_InsurancePlanIdentification\",vm:\"1-n\",version:\"DICOM/retired\"},\"(0014,0023)\":{tag:\"(0014,0023)\",vr:\"ST\",name:\"RETIRED_CADFileFormat\",vm:\"1-n\",version:\"DICOM/retired\"},\"(0014,0024)\":{tag:\"(0014,0024)\",vr:\"ST\",name:\"RETIRED_ComponentReferenceSystem\",vm:\"1-n\",version:\"DICOM/retired\"},\"(0014,0045)\":{tag:\"(0014,0045)\",vr:\"ST\",name:\"RETIRED_MaterialPropertiesFileFormatRetired\",vm:\"1-n\",version:\"DICOM/retired\"},\"(0018,0030)\":{tag:\"(0018,0030)\",vr:\"LO\",name:\"RETIRED_Radionuclide\",vm:\"1-n\",version:\"DICOM/retired\"},\"(0018,0032)\":{tag:\"(0018,0032)\",vr:\"DS\",name:\"RETIRED_EnergyWindowCenterline\",vm:\"1\",version:\"DICOM/retired\"},\"(0018,0033)\":{tag:\"(0018,0033)\",vr:\"DS\",name:\"RETIRED_EnergyWindowTotalWidth\",vm:\"1-n\",version:\"DICOM/retired\"},\"(0018,0037)\":{tag:\"(0018,0037)\",vr:\"CS\",name:\"RETIRED_TherapyType\",vm:\"1\",version:\"DICOM/retired\"},\"(0018,0039)\":{tag:\"(0018,0039)\",vr:\"CS\",name:\"RETIRED_TherapyDescription\",vm:\"1\",version:\"DICOM/retired\"},\"(0018,0061)\":{tag:\"(0018,0061)\",vr:\"DS\",name:\"RETIRED_undefined\",vm:\"1\",version:\"DICOM/retired\"},\"(0018,1011)\":{tag:\"(0018,1011)\",vr:\"LO\",name:\"RETIRED_HardcopyCreationDeviceID\",vm:\"1\",version:\"DICOM/retired\"},\"(0018,1017)\":{tag:\"(0018,1017)\",vr:\"LO\",name:\"RETIRED_HardcopyDeviceManufacturer\",vm:\"1\",version:\"DICOM/retired\"},\"(0018,101A)\":{tag:\"(0018,101A)\",vr:\"LO\",name:\"RETIRED_HardcopyDeviceSoftwareVersion\",vm:\"1-n\",version:\"DICOM/retired\"},\"(0018,101B)\":{tag:\"(0018,101B)\",vr:\"LO\",name:\"RETIRED_HardcopyDeviceManufacturerModelName\",vm:\"1\",version:\"DICOM/retired\"},\"(0018,1141)\":{tag:\"(0018,1141)\",vr:\"DS\",name:\"RETIRED_AngularPosition\",vm:\"1\",version:\"DICOM/retired\"},\"(0018,1146)\":{tag:\"(0018,1146)\",vr:\"DS\",name:\"RETIRED_RotationOffset\",vm:\"1-n\",version:\"DICOM/retired\"},\"(0018,1240)\":{tag:\"(0018,1240)\",vr:\"IS\",name:\"RETIRED_UpperLowerPixelValues\",vm:\"1-n\",version:\"DICOM/retired\"},\"(0018,4000)\":{tag:\"(0018,4000)\",vr:\"LT\",name:\"RETIRED_AcquisitionComments\",vm:\"1\",version:\"DICOM/retired\"},\"(0018,5021)\":{tag:\"(0018,5021)\",vr:\"LO\",name:\"RETIRED_PostprocessingFunction\",vm:\"1\",version:\"DICOM/retired\"},\"(0018,5030)\":{tag:\"(0018,5030)\",vr:\"DS\",name:\"RETIRED_DynamicRange\",vm:\"1\",version:\"DICOM/retired\"},\"(0018,5040)\":{tag:\"(0018,5040)\",vr:\"DS\",name:\"RETIRED_TotalGain\",vm:\"1\",version:\"DICOM/retired\"},\"(0018,5210)\":{tag:\"(0018,5210)\",vr:\"DS\",name:\"RETIRED_ImageTransformationMatrix\",vm:\"6\",version:\"DICOM/retired\"},\"(0018,5212)\":{tag:\"(0018,5212)\",vr:\"DS\",name:\"RETIRED_ImageTranslationVector\",vm:\"3\",version:\"DICOM/retired\"},\"(0018,6038)\":{tag:\"(0018,6038)\",vr:\"UL\",name:\"RETIRED_DopplerSampleVolumeXPositionRetired\",vm:\"1\",version:\"DICOM/retired\"},\"(0018,603A)\":{tag:\"(0018,603A)\",vr:\"UL\",name:\"RETIRED_DopplerSampleVolumeYPositionRetired\",vm:\"1\",version:\"DICOM/retired\"},\"(0018,603C)\":{tag:\"(0018,603C)\",vr:\"UL\",name:\"RETIRED_TMLinePositionX0Retired\",vm:\"1\",version:\"DICOM/retired\"},\"(0018,603E)\":{tag:\"(0018,603E)\",vr:\"UL\",name:\"RETIRED_TMLinePositionY0Retired\",vm:\"1\",version:\"DICOM/retired\"},\"(0018,6040)\":{tag:\"(0018,6040)\",vr:\"UL\",name:\"RETIRED_TMLinePositionX1Retired\",vm:\"1\",version:\"DICOM/retired\"},\"(0018,6042)\":{tag:\"(0018,6042)\",vr:\"UL\",name:\"RETIRED_TMLinePositionY1Retired\",vm:\"1\",version:\"DICOM/retired\"},\"(0018,9096)\":{tag:\"(0018,9096)\",vr:\"FD\",name:\"RETIRED_ParallelReductionFactorInPlaneRetired\",vm:\"1\",version:\"DICOM/retired\"},\"(0018,9166)\":{tag:\"(0018,9166)\",vr:\"CS\",name:\"RETIRED_BulkMotionStatus\",vm:\"1\",version:\"DICOM/retired\"},\"(0018,9195)\":{tag:\"(0018,9195)\",vr:\"FD\",name:\"RETIRED_ChemicalShiftMinimumIntegrationLimitInHz\",vm:\"1\",version:\"DICOM/retired\"},\"(0018,9196)\":{tag:\"(0018,9196)\",vr:\"FD\",name:\"RETIRED_ChemicalShiftMaximumIntegrationLimitInHz\",vm:\"1\",version:\"DICOM/retired\"},\"(0020,0014)\":{tag:\"(0020,0014)\",vr:\"IS\",name:\"RETIRED_IsotopeNumber\",vm:\"1\",version:\"DICOM/retired\"},\"(0020,0015)\":{tag:\"(0020,0015)\",vr:\"IS\",name:\"RETIRED_PhaseNumber\",vm:\"1\",version:\"DICOM/retired\"},\"(0020,0016)\":{tag:\"(0020,0016)\",vr:\"IS\",name:\"RETIRED_IntervalNumber\",vm:\"1\",version:\"DICOM/retired\"},\"(0020,0017)\":{tag:\"(0020,0017)\",vr:\"IS\",name:\"RETIRED_TimeSlotNumber\",vm:\"1\",version:\"DICOM/retired\"},\"(0020,0018)\":{tag:\"(0020,0018)\",vr:\"IS\",name:\"RETIRED_AngleNumber\",vm:\"1\",version:\"DICOM/retired\"},\"(0020,0022)\":{tag:\"(0020,0022)\",vr:\"IS\",name:\"RETIRED_OverlayNumber\",vm:\"1\",version:\"DICOM/retired\"},\"(0020,0024)\":{tag:\"(0020,0024)\",vr:\"IS\",name:\"RETIRED_CurveNumber\",vm:\"1\",version:\"DICOM/retired\"},\"(0020,0026)\":{tag:\"(0020,0026)\",vr:\"IS\",name:\"RETIRED_LUTNumber\",vm:\"1\",version:\"DICOM/retired\"},\"(0020,0030)\":{tag:\"(0020,0030)\",vr:\"DS\",name:\"RETIRED_ImagePosition\",vm:\"3\",version:\"DICOM/retired\"},\"(0020,0035)\":{tag:\"(0020,0035)\",vr:\"DS\",name:\"RETIRED_ImageOrientation\",vm:\"6\",version:\"DICOM/retired\"},\"(0020,0050)\":{tag:\"(0020,0050)\",vr:\"DS\",name:\"RETIRED_Location\",vm:\"1\",version:\"DICOM/retired\"},\"(0020,0070)\":{tag:\"(0020,0070)\",vr:\"LO\",name:\"RETIRED_ImageGeometryType\",vm:\"1\",version:\"DICOM/retired\"},\"(0020,0080)\":{tag:\"(0020,0080)\",vr:\"CS\",name:\"RETIRED_MaskingImage\",vm:\"1-n\",version:\"DICOM/retired\"},\"(0020,00AA)\":{tag:\"(0020,00AA)\",vr:\"IS\",name:\"RETIRED_ReportNumber\",vm:\"1\",version:\"DICOM/retired\"},\"(0020,1000)\":{tag:\"(0020,1000)\",vr:\"IS\",name:\"RETIRED_SeriesInStudy\",vm:\"1\",version:\"DICOM/retired\"},\"(0020,1001)\":{tag:\"(0020,1001)\",vr:\"IS\",name:\"RETIRED_AcquisitionsInSeries\",vm:\"1\",version:\"DICOM/retired\"},\"(0020,1003)\":{tag:\"(0020,1003)\",vr:\"IS\",name:\"RETIRED_ImagesInSeries\",vm:\"1\",version:\"DICOM/retired\"},\"(0020,1004)\":{tag:\"(0020,1004)\",vr:\"IS\",name:\"RETIRED_AcquisitionsInStudy\",vm:\"1\",version:\"DICOM/retired\"},\"(0020,1005)\":{tag:\"(0020,1005)\",vr:\"IS\",name:\"RETIRED_ImagesInStudy\",vm:\"1\",version:\"DICOM/retired\"},\"(0020,1020)\":{tag:\"(0020,1020)\",vr:\"LO\",name:\"RETIRED_Reference\",vm:\"1-n\",version:\"DICOM/retired\"},\"(0020,1070)\":{tag:\"(0020,1070)\",vr:\"IS\",name:\"RETIRED_OtherStudyNumbers\",vm:\"1-n\",version:\"DICOM/retired\"},\"(0020,3100-31FF)\":{tag:\"(0020,3100-31FF)\",vr:\"CS\",name:\"RETIRED_SourceImageIDs\",vm:\"1-n\",version:\"DICOM/retired\"},\"(0020,3401)\":{tag:\"(0020,3401)\",vr:\"CS\",name:\"RETIRED_ModifyingDeviceID\",vm:\"1\",version:\"DICOM/retired\"},\"(0020,3402)\":{tag:\"(0020,3402)\",vr:\"CS\",name:\"RETIRED_ModifiedImageID\",vm:\"1\",version:\"DICOM/retired\"},\"(0020,3403)\":{tag:\"(0020,3403)\",vr:\"DA\",name:\"RETIRED_ModifiedImageDate\",vm:\"1\",version:\"DICOM/retired\"},\"(0020,3404)\":{tag:\"(0020,3404)\",vr:\"LO\",name:\"RETIRED_ModifyingDeviceManufacturer\",vm:\"1\",version:\"DICOM/retired\"},\"(0020,3405)\":{tag:\"(0020,3405)\",vr:\"TM\",name:\"RETIRED_ModifiedImageTime\",vm:\"1\",version:\"DICOM/retired\"},\"(0020,3406)\":{tag:\"(0020,3406)\",vr:\"LO\",name:\"RETIRED_ModifiedImageDescription\",vm:\"1\",version:\"DICOM/retired\"},\"(0020,5000)\":{tag:\"(0020,5000)\",vr:\"AT\",name:\"RETIRED_OriginalImageIdentification\",vm:\"1-n\",version:\"DICOM/retired\"},\"(0020,5002)\":{tag:\"(0020,5002)\",vr:\"LO\",name:\"RETIRED_OriginalImageIdentificationNomenclature\",vm:\"1-n\",version:\"DICOM/retired\"},\"(0022,1094)\":{tag:\"(0022,1094)\",vr:\"LO\",name:\"RETIRED_LensConstantDescription\",vm:\"1\",version:\"DICOM/retired\"},\"(0022,1153)\":{tag:\"(0022,1153)\",vr:\"SQ\",name:\"RETIRED_OphthalmicAxialLengthAcquisitionMethodCodeSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(0022,1265)\":{tag:\"(0022,1265)\",vr:\"SQ\",name:\"RETIRED_OphthalmicAxialLengthQualityMetricTypeCodeSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(0022,1273)\":{tag:\"(0022,1273)\",vr:\"LO\",name:\"RETIRED_OphthalmicAxialLengthQualityMetricTypeDescription\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,0005)\":{tag:\"(0028,0005)\",vr:\"US\",name:\"RETIRED_ImageDimensions\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,0012)\":{tag:\"(0028,0012)\",vr:\"US\",name:\"RETIRED_Planes\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,0040)\":{tag:\"(0028,0040)\",vr:\"CS\",name:\"RETIRED_ImageFormat\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,0050)\":{tag:\"(0028,0050)\",vr:\"LO\",name:\"RETIRED_ManipulatedImage\",vm:\"1-n\",version:\"DICOM/retired\"},\"(0028,005F)\":{tag:\"(0028,005F)\",vr:\"LO\",name:\"RETIRED_CompressionRecognitionCode\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,0060)\":{tag:\"(0028,0060)\",vr:\"CS\",name:\"RETIRED_CompressionCode\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,0061)\":{tag:\"(0028,0061)\",vr:\"SH\",name:\"RETIRED_CompressionOriginator\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,0062)\":{tag:\"(0028,0062)\",vr:\"LO\",name:\"RETIRED_CompressionLabel\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,0063)\":{tag:\"(0028,0063)\",vr:\"SH\",name:\"RETIRED_CompressionDescription\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,0065)\":{tag:\"(0028,0065)\",vr:\"CS\",name:\"RETIRED_CompressionSequence\",vm:\"1-n\",version:\"DICOM/retired\"},\"(0028,0066)\":{tag:\"(0028,0066)\",vr:\"AT\",name:\"RETIRED_CompressionStepPointers\",vm:\"1-n\",version:\"DICOM/retired\"},\"(0028,0068)\":{tag:\"(0028,0068)\",vr:\"US\",name:\"RETIRED_RepeatInterval\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,0069)\":{tag:\"(0028,0069)\",vr:\"US\",name:\"RETIRED_BitsGrouped\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,0070)\":{tag:\"(0028,0070)\",vr:\"US\",name:\"RETIRED_PerimeterTable\",vm:\"1-n\",version:\"DICOM/retired\"},\"(0028,0071)\":{tag:\"(0028,0071)\",vr:\"xs\",name:\"RETIRED_PerimeterValue\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,0080)\":{tag:\"(0028,0080)\",vr:\"US\",name:\"RETIRED_PredictorRows\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,0081)\":{tag:\"(0028,0081)\",vr:\"US\",name:\"RETIRED_PredictorColumns\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,0082)\":{tag:\"(0028,0082)\",vr:\"US\",name:\"RETIRED_PredictorConstants\",vm:\"1-n\",version:\"DICOM/retired\"},\"(0028,0090)\":{tag:\"(0028,0090)\",vr:\"CS\",name:\"RETIRED_BlockedPixels\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,0091)\":{tag:\"(0028,0091)\",vr:\"US\",name:\"RETIRED_BlockRows\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,0092)\":{tag:\"(0028,0092)\",vr:\"US\",name:\"RETIRED_BlockColumns\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,0093)\":{tag:\"(0028,0093)\",vr:\"US\",name:\"RETIRED_RowOverlap\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,0094)\":{tag:\"(0028,0094)\",vr:\"US\",name:\"RETIRED_ColumnOverlap\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,0104)\":{tag:\"(0028,0104)\",vr:\"xs\",name:\"RETIRED_SmallestValidPixelValue\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,0105)\":{tag:\"(0028,0105)\",vr:\"xs\",name:\"RETIRED_LargestValidPixelValue\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,0110)\":{tag:\"(0028,0110)\",vr:\"xs\",name:\"RETIRED_SmallestImagePixelValueInPlane\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,0111)\":{tag:\"(0028,0111)\",vr:\"xs\",name:\"RETIRED_LargestImagePixelValueInPlane\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,0200)\":{tag:\"(0028,0200)\",vr:\"US\",name:\"RETIRED_ImageLocation\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,0400)\":{tag:\"(0028,0400)\",vr:\"LO\",name:\"RETIRED_TransformLabel\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,0401)\":{tag:\"(0028,0401)\",vr:\"LO\",name:\"RETIRED_TransformVersionNumber\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,0402)\":{tag:\"(0028,0402)\",vr:\"US\",name:\"RETIRED_NumberOfTransformSteps\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,0403)\":{tag:\"(0028,0403)\",vr:\"LO\",name:\"RETIRED_SequenceOfCompressedData\",vm:\"1-n\",version:\"DICOM/retired\"},\"(0028,0404)\":{tag:\"(0028,0404)\",vr:\"AT\",name:\"RETIRED_DetailsOfCoefficients\",vm:\"1-n\",version:\"DICOM/retired\"},\"(0028,0410)\":{tag:\"(0028,0410)\",vr:\"US\",name:\"RETIRED_RowsForNthOrderCoefficients\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,0411)\":{tag:\"(0028,0411)\",vr:\"US\",name:\"RETIRED_ColumnsForNthOrderCoefficients\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,0412)\":{tag:\"(0028,0412)\",vr:\"LO\",name:\"RETIRED_CoefficientCoding\",vm:\"1-n\",version:\"DICOM/retired\"},\"(0028,0413)\":{tag:\"(0028,0413)\",vr:\"AT\",name:\"RETIRED_CoefficientCodingPointers\",vm:\"1-n\",version:\"DICOM/retired\"},\"(0028,0700)\":{tag:\"(0028,0700)\",vr:\"LO\",name:\"RETIRED_DCTLabel\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,0701)\":{tag:\"(0028,0701)\",vr:\"CS\",name:\"RETIRED_DataBlockDescription\",vm:\"1-n\",version:\"DICOM/retired\"},\"(0028,0702)\":{tag:\"(0028,0702)\",vr:\"AT\",name:\"RETIRED_DataBlock\",vm:\"1-n\",version:\"DICOM/retired\"},\"(0028,0710)\":{tag:\"(0028,0710)\",vr:\"US\",name:\"RETIRED_NormalizationFactorFormat\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,0720)\":{tag:\"(0028,0720)\",vr:\"US\",name:\"RETIRED_ZonalMapNumberFormat\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,0721)\":{tag:\"(0028,0721)\",vr:\"AT\",name:\"RETIRED_ZonalMapLocation\",vm:\"1-n\",version:\"DICOM/retired\"},\"(0028,0722)\":{tag:\"(0028,0722)\",vr:\"US\",name:\"RETIRED_ZonalMapFormat\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,0730)\":{tag:\"(0028,0730)\",vr:\"US\",name:\"RETIRED_AdaptiveMapFormat\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,0740)\":{tag:\"(0028,0740)\",vr:\"US\",name:\"RETIRED_CodeNumberFormat\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,0800)\":{tag:\"(0028,0800)\",vr:\"CS\",name:\"RETIRED_CodeLabel\",vm:\"1-n\",version:\"DICOM/retired\"},\"(0028,0802)\":{tag:\"(0028,0802)\",vr:\"US\",name:\"RETIRED_NumberOfTables\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,0803)\":{tag:\"(0028,0803)\",vr:\"AT\",name:\"RETIRED_CodeTableLocation\",vm:\"1-n\",version:\"DICOM/retired\"},\"(0028,0804)\":{tag:\"(0028,0804)\",vr:\"US\",name:\"RETIRED_BitsForCodeWord\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,0808)\":{tag:\"(0028,0808)\",vr:\"AT\",name:\"RETIRED_ImageDataLocation\",vm:\"1-n\",version:\"DICOM/retired\"},\"(0028,1080)\":{tag:\"(0028,1080)\",vr:\"CS\",name:\"RETIRED_GrayScale\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,1100)\":{tag:\"(0028,1100)\",vr:\"xs\",name:\"RETIRED_GrayLookupTableDescriptor\",vm:\"3\",version:\"DICOM/retired\"},\"(0028,1111)\":{tag:\"(0028,1111)\",vr:\"xs\",name:\"RETIRED_LargeRedPaletteColorLookupTableDescriptor\",vm:\"4\",version:\"DICOM/retired\"},\"(0028,1112)\":{tag:\"(0028,1112)\",vr:\"xs\",name:\"RETIRED_LargeGreenPaletteColorLookupTableDescriptor\",vm:\"4\",version:\"DICOM/retired\"},\"(0028,1113)\":{tag:\"(0028,1113)\",vr:\"xs\",name:\"RETIRED_LargeBluePaletteColorLookupTableDescriptor\",vm:\"4\",version:\"DICOM/retired\"},\"(0028,1200)\":{tag:\"(0028,1200)\",vr:\"lt\",name:\"RETIRED_GrayLookupTableData\",vm:\"1-n\",version:\"DICOM/retired\"},\"(0028,1211)\":{tag:\"(0028,1211)\",vr:\"OW\",name:\"RETIRED_LargeRedPaletteColorLookupTableData\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,1212)\":{tag:\"(0028,1212)\",vr:\"OW\",name:\"RETIRED_LargeGreenPaletteColorLookupTableData\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,1213)\":{tag:\"(0028,1213)\",vr:\"OW\",name:\"RETIRED_LargeBluePaletteColorLookupTableData\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,1214)\":{tag:\"(0028,1214)\",vr:\"UI\",name:\"RETIRED_LargePaletteColorLookupTableUID\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,4000)\":{tag:\"(0028,4000)\",vr:\"LT\",name:\"RETIRED_ImagePresentationComments\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,5000)\":{tag:\"(0028,5000)\",vr:\"SQ\",name:\"RETIRED_BiPlaneAcquisitionSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(0028,6030)\":{tag:\"(0028,6030)\",vr:\"US\",name:\"RETIRED_MaskPointers\",vm:\"1-n\",version:\"DICOM/retired\"},\"(0028,9099)\":{tag:\"(0028,9099)\",vr:\"US\",name:\"RETIRED_LargestMonochromePixelValue\",vm:\"1\",version:\"DICOM/retired\"},\"(0032,000A)\":{tag:\"(0032,000A)\",vr:\"CS\",name:\"RETIRED_StudyStatusID\",vm:\"1\",version:\"DICOM/retired\"},\"(0032,000C)\":{tag:\"(0032,000C)\",vr:\"CS\",name:\"RETIRED_StudyPriorityID\",vm:\"1\",version:\"DICOM/retired\"},\"(0032,0012)\":{tag:\"(0032,0012)\",vr:\"LO\",name:\"RETIRED_StudyIDIssuer\",vm:\"1\",version:\"DICOM/retired\"},\"(0032,0032)\":{tag:\"(0032,0032)\",vr:\"DA\",name:\"RETIRED_StudyVerifiedDate\",vm:\"1\",version:\"DICOM/retired\"},\"(0032,0033)\":{tag:\"(0032,0033)\",vr:\"TM\",name:\"RETIRED_StudyVerifiedTime\",vm:\"1\",version:\"DICOM/retired\"},\"(0032,0034)\":{tag:\"(0032,0034)\",vr:\"DA\",name:\"RETIRED_StudyReadDate\",vm:\"1\",version:\"DICOM/retired\"},\"(0032,0035)\":{tag:\"(0032,0035)\",vr:\"TM\",name:\"RETIRED_StudyReadTime\",vm:\"1\",version:\"DICOM/retired\"},\"(0032,1000)\":{tag:\"(0032,1000)\",vr:\"DA\",name:\"RETIRED_ScheduledStudyStartDate\",vm:\"1\",version:\"DICOM/retired\"},\"(0032,1001)\":{tag:\"(0032,1001)\",vr:\"TM\",name:\"RETIRED_ScheduledStudyStartTime\",vm:\"1\",version:\"DICOM/retired\"},\"(0032,1010)\":{tag:\"(0032,1010)\",vr:\"DA\",name:\"RETIRED_ScheduledStudyStopDate\",vm:\"1\",version:\"DICOM/retired\"},\"(0032,1011)\":{tag:\"(0032,1011)\",vr:\"TM\",name:\"RETIRED_ScheduledStudyStopTime\",vm:\"1\",version:\"DICOM/retired\"},\"(0032,1020)\":{tag:\"(0032,1020)\",vr:\"LO\",name:\"RETIRED_ScheduledStudyLocation\",vm:\"1\",version:\"DICOM/retired\"},\"(0032,1021)\":{tag:\"(0032,1021)\",vr:\"AE\",name:\"RETIRED_ScheduledStudyLocationAETitle\",vm:\"1-n\",version:\"DICOM/retired\"},\"(0032,1030)\":{tag:\"(0032,1030)\",vr:\"LO\",name:\"RETIRED_ReasonForStudy\",vm:\"1\",version:\"DICOM/retired\"},\"(0032,1040)\":{tag:\"(0032,1040)\",vr:\"DA\",name:\"RETIRED_StudyArrivalDate\",vm:\"1\",version:\"DICOM/retired\"},\"(0032,1041)\":{tag:\"(0032,1041)\",vr:\"TM\",name:\"RETIRED_StudyArrivalTime\",vm:\"1\",version:\"DICOM/retired\"},\"(0032,1050)\":{tag:\"(0032,1050)\",vr:\"DA\",name:\"RETIRED_StudyCompletionDate\",vm:\"1\",version:\"DICOM/retired\"},\"(0032,1051)\":{tag:\"(0032,1051)\",vr:\"TM\",name:\"RETIRED_StudyCompletionTime\",vm:\"1\",version:\"DICOM/retired\"},\"(0032,1055)\":{tag:\"(0032,1055)\",vr:\"CS\",name:\"RETIRED_StudyComponentStatusID\",vm:\"1\",version:\"DICOM/retired\"},\"(0032,4000)\":{tag:\"(0032,4000)\",vr:\"LT\",name:\"RETIRED_StudyComments\",vm:\"1\",version:\"DICOM/retired\"},\"(0038,0011)\":{tag:\"(0038,0011)\",vr:\"LO\",name:\"RETIRED_IssuerOfAdmissionID\",vm:\"1\",version:\"DICOM/retired\"},\"(0038,001A)\":{tag:\"(0038,001A)\",vr:\"DA\",name:\"RETIRED_ScheduledAdmissionDate\",vm:\"1\",version:\"DICOM/retired\"},\"(0038,001B)\":{tag:\"(0038,001B)\",vr:\"TM\",name:\"RETIRED_ScheduledAdmissionTime\",vm:\"1\",version:\"DICOM/retired\"},\"(0038,001C)\":{tag:\"(0038,001C)\",vr:\"DA\",name:\"RETIRED_ScheduledDischargeDate\",vm:\"1\",version:\"DICOM/retired\"},\"(0038,001D)\":{tag:\"(0038,001D)\",vr:\"TM\",name:\"RETIRED_ScheduledDischargeTime\",vm:\"1\",version:\"DICOM/retired\"},\"(0038,001E)\":{tag:\"(0038,001E)\",vr:\"LO\",name:\"RETIRED_ScheduledPatientInstitutionResidence\",vm:\"1\",version:\"DICOM/retired\"},\"(0038,0030)\":{tag:\"(0038,0030)\",vr:\"DA\",name:\"RETIRED_DischargeDate\",vm:\"1\",version:\"DICOM/retired\"},\"(0038,0032)\":{tag:\"(0038,0032)\",vr:\"TM\",name:\"RETIRED_DischargeTime\",vm:\"1\",version:\"DICOM/retired\"},\"(0038,0040)\":{tag:\"(0038,0040)\",vr:\"LO\",name:\"RETIRED_DischargeDiagnosisDescription\",vm:\"1\",version:\"DICOM/retired\"},\"(0038,0044)\":{tag:\"(0038,0044)\",vr:\"SQ\",name:\"RETIRED_DischargeDiagnosisCodeSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(0038,0061)\":{tag:\"(0038,0061)\",vr:\"LO\",name:\"RETIRED_IssuerOfServiceEpisodeID\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,0307)\":{tag:\"(0040,0307)\",vr:\"DS\",name:\"RETIRED_DistanceSourceToSupport\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,0330)\":{tag:\"(0040,0330)\",vr:\"SQ\",name:\"RETIRED_ReferencedProcedureStepSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,050A)\":{tag:\"(0040,050A)\",vr:\"LO\",name:\"RETIRED_SpecimenAccessionNumber\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,0550)\":{tag:\"(0040,0550)\",vr:\"SQ\",name:\"RETIRED_SpecimenSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,0552)\":{tag:\"(0040,0552)\",vr:\"SQ\",name:\"RETIRED_SpecimenDescriptionSequenceTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,0553)\":{tag:\"(0040,0553)\",vr:\"ST\",name:\"RETIRED_SpecimenDescriptionTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,06FA)\":{tag:\"(0040,06FA)\",vr:\"LO\",name:\"RETIRED_SlideIdentifier\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,08D8)\":{tag:\"(0040,08D8)\",vr:\"SQ\",name:\"RETIRED_PixelSpacingSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,08DA)\":{tag:\"(0040,08DA)\",vr:\"SQ\",name:\"RETIRED_CoordinateSystemAxisCodeSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,09F8)\":{tag:\"(0040,09F8)\",vr:\"SQ\",name:\"RETIRED_VitalStainCodeSequenceTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,1006)\":{tag:\"(0040,1006)\",vr:\"SH\",name:\"RETIRED_PlacerOrderNumberProcedure\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,1007)\":{tag:\"(0040,1007)\",vr:\"SH\",name:\"RETIRED_FillerOrderNumberProcedure\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,1060)\":{tag:\"(0040,1060)\",vr:\"LO\",name:\"RETIRED_RequestedProcedureDescriptionTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,2001)\":{tag:\"(0040,2001)\",vr:\"LO\",name:\"RETIRED_ReasonForTheImagingServiceRequest\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,2006)\":{tag:\"(0040,2006)\",vr:\"SH\",name:\"RETIRED_PlacerOrderNumberImagingServiceRequestRetired\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,2007)\":{tag:\"(0040,2007)\",vr:\"SH\",name:\"RETIRED_FillerOrderNumberImagingServiceRequestRetired\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,4001)\":{tag:\"(0040,4001)\",vr:\"CS\",name:\"RETIRED_GeneralPurposeScheduledProcedureStepStatus\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,4002)\":{tag:\"(0040,4002)\",vr:\"CS\",name:\"RETIRED_GeneralPurposePerformedProcedureStepStatus\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,4003)\":{tag:\"(0040,4003)\",vr:\"CS\",name:\"RETIRED_GeneralPurposeScheduledProcedureStepPriority\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,4004)\":{tag:\"(0040,4004)\",vr:\"SQ\",name:\"RETIRED_ScheduledProcessingApplicationsCodeSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,4006)\":{tag:\"(0040,4006)\",vr:\"CS\",name:\"RETIRED_MultipleCopiesFlag\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,4015)\":{tag:\"(0040,4015)\",vr:\"SQ\",name:\"RETIRED_ResultingGeneralPurposePerformedProcedureStepsSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,4016)\":{tag:\"(0040,4016)\",vr:\"SQ\",name:\"RETIRED_ReferencedGeneralPurposeScheduledProcedureStepSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,4022)\":{tag:\"(0040,4022)\",vr:\"SQ\",name:\"RETIRED_RelevantInformationSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,4023)\":{tag:\"(0040,4023)\",vr:\"UI\",name:\"RETIRED_ReferencedGeneralPurposeScheduledProcedureStepTransactionUID\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,4031)\":{tag:\"(0040,4031)\",vr:\"SQ\",name:\"RETIRED_RequestedSubsequentWorkitemCodeSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,4032)\":{tag:\"(0040,4032)\",vr:\"SQ\",name:\"RETIRED_NonDICOMOutputCodeSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A007)\":{tag:\"(0040,A007)\",vr:\"CS\",name:\"RETIRED_FindingsFlagTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A020)\":{tag:\"(0040,A020)\",vr:\"SQ\",name:\"RETIRED_FindingsSequenceTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A021)\":{tag:\"(0040,A021)\",vr:\"UI\",name:\"RETIRED_FindingsGroupUIDTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A022)\":{tag:\"(0040,A022)\",vr:\"UI\",name:\"RETIRED_ReferencedFindingsGroupUIDTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A023)\":{tag:\"(0040,A023)\",vr:\"DA\",name:\"RETIRED_FindingsGroupRecordingDateTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A024)\":{tag:\"(0040,A024)\",vr:\"TM\",name:\"RETIRED_FindingsGroupRecordingTimeTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A026)\":{tag:\"(0040,A026)\",vr:\"SQ\",name:\"RETIRED_FindingsSourceCategoryCodeSequenceTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A028)\":{tag:\"(0040,A028)\",vr:\"SQ\",name:\"RETIRED_DocumentingOrganizationIdentifierCodeSequenceTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A047)\":{tag:\"(0040,A047)\",vr:\"LO\",name:\"RETIRED_MeasurementPrecisionDescriptionTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A057)\":{tag:\"(0040,A057)\",vr:\"CS\",name:\"RETIRED_UrgencyOrPriorityAlertsTrial\",vm:\"1-n\",version:\"DICOM/retired\"},\"(0040,A060)\":{tag:\"(0040,A060)\",vr:\"LO\",name:\"RETIRED_SequencingIndicatorTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A066)\":{tag:\"(0040,A066)\",vr:\"SQ\",name:\"RETIRED_DocumentIdentifierCodeSequenceTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A067)\":{tag:\"(0040,A067)\",vr:\"PN\",name:\"RETIRED_DocumentAuthorTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A068)\":{tag:\"(0040,A068)\",vr:\"SQ\",name:\"RETIRED_DocumentAuthorIdentifierCodeSequenceTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A070)\":{tag:\"(0040,A070)\",vr:\"SQ\",name:\"RETIRED_IdentifierCodeSequenceTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A074)\":{tag:\"(0040,A074)\",vr:\"OB\",name:\"RETIRED_ObjectBinaryIdentifierTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A076)\":{tag:\"(0040,A076)\",vr:\"SQ\",name:\"RETIRED_DocumentingObserverIdentifierCodeSequenceTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A085)\":{tag:\"(0040,A085)\",vr:\"SQ\",name:\"RETIRED_ProcedureIdentifierCodeSequenceTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A089)\":{tag:\"(0040,A089)\",vr:\"OB\",name:\"RETIRED_ObjectDirectoryBinaryIdentifierTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A090)\":{tag:\"(0040,A090)\",vr:\"SQ\",name:\"RETIRED_EquivalentCDADocumentSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A110)\":{tag:\"(0040,A110)\",vr:\"DA\",name:\"RETIRED_DateOfDocumentOrVerbalTransactionTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A112)\":{tag:\"(0040,A112)\",vr:\"TM\",name:\"RETIRED_TimeOfDocumentCreationOrVerbalTransactionTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A125)\":{tag:\"(0040,A125)\",vr:\"CS\",name:\"RETIRED_ReportStatusIDTrial\",vm:\"2\",version:\"DICOM/retired\"},\"(0040,A167)\":{tag:\"(0040,A167)\",vr:\"SQ\",name:\"RETIRED_ObservationCategoryCodeSequenceTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A16A)\":{tag:\"(0040,A16A)\",vr:\"ST\",name:\"RETIRED_BibliographicCitationTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A172)\":{tag:\"(0040,A172)\",vr:\"UI\",name:\"RETIRED_ReferencedObservationUIDTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A173)\":{tag:\"(0040,A173)\",vr:\"CS\",name:\"RETIRED_ReferencedObservationClassTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A174)\":{tag:\"(0040,A174)\",vr:\"CS\",name:\"RETIRED_ReferencedObjectObservationClassTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A192)\":{tag:\"(0040,A192)\",vr:\"DA\",name:\"RETIRED_ObservationDateTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A193)\":{tag:\"(0040,A193)\",vr:\"TM\",name:\"RETIRED_ObservationTimeTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A194)\":{tag:\"(0040,A194)\",vr:\"CS\",name:\"RETIRED_MeasurementAutomationTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A224)\":{tag:\"(0040,A224)\",vr:\"ST\",name:\"RETIRED_IdentificationDescriptionTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A290)\":{tag:\"(0040,A290)\",vr:\"CS\",name:\"RETIRED_CoordinatesSetGeometricTypeTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A296)\":{tag:\"(0040,A296)\",vr:\"SQ\",name:\"RETIRED_AlgorithmCodeSequenceTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A297)\":{tag:\"(0040,A297)\",vr:\"ST\",name:\"RETIRED_AlgorithmDescriptionTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A29A)\":{tag:\"(0040,A29A)\",vr:\"SL\",name:\"RETIRED_PixelCoordinatesSetTrial\",vm:\"2-2n\",version:\"DICOM/retired\"},\"(0040,A307)\":{tag:\"(0040,A307)\",vr:\"PN\",name:\"RETIRED_CurrentObserverTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A313)\":{tag:\"(0040,A313)\",vr:\"SQ\",name:\"RETIRED_ReferencedAccessionSequenceTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A33A)\":{tag:\"(0040,A33A)\",vr:\"ST\",name:\"RETIRED_ReportStatusCommentTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A340)\":{tag:\"(0040,A340)\",vr:\"SQ\",name:\"RETIRED_ProcedureContextSequenceTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A352)\":{tag:\"(0040,A352)\",vr:\"PN\",name:\"RETIRED_VerbalSourceTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A353)\":{tag:\"(0040,A353)\",vr:\"ST\",name:\"RETIRED_AddressTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A354)\":{tag:\"(0040,A354)\",vr:\"LO\",name:\"RETIRED_TelephoneNumberTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A358)\":{tag:\"(0040,A358)\",vr:\"SQ\",name:\"RETIRED_VerbalSourceIdentifierCodeSequenceTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A380)\":{tag:\"(0040,A380)\",vr:\"SQ\",name:\"RETIRED_ReportDetailSequenceTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A402)\":{tag:\"(0040,A402)\",vr:\"UI\",name:\"RETIRED_ObservationSubjectUIDTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A403)\":{tag:\"(0040,A403)\",vr:\"CS\",name:\"RETIRED_ObservationSubjectClassTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A404)\":{tag:\"(0040,A404)\",vr:\"SQ\",name:\"RETIRED_ObservationSubjectTypeCodeSequenceTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A600)\":{tag:\"(0040,A600)\",vr:\"CS\",name:\"RETIRED_ObservationSubjectContextFlagTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A601)\":{tag:\"(0040,A601)\",vr:\"CS\",name:\"RETIRED_ObserverContextFlagTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A603)\":{tag:\"(0040,A603)\",vr:\"CS\",name:\"RETIRED_ProcedureContextFlagTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A731)\":{tag:\"(0040,A731)\",vr:\"SQ\",name:\"RETIRED_RelationshipSequenceTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A732)\":{tag:\"(0040,A732)\",vr:\"SQ\",name:\"RETIRED_RelationshipTypeCodeSequenceTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A744)\":{tag:\"(0040,A744)\",vr:\"SQ\",name:\"RETIRED_LanguageCodeSequenceTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,A992)\":{tag:\"(0040,A992)\",vr:\"ST\",name:\"RETIRED_UniformResourceLocatorTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,DB06)\":{tag:\"(0040,DB06)\",vr:\"DT\",name:\"RETIRED_TemplateVersion\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,DB07)\":{tag:\"(0040,DB07)\",vr:\"DT\",name:\"RETIRED_TemplateLocalVersion\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,DB0B)\":{tag:\"(0040,DB0B)\",vr:\"CS\",name:\"RETIRED_TemplateExtensionFlag\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,DB0C)\":{tag:\"(0040,DB0C)\",vr:\"UI\",name:\"RETIRED_TemplateExtensionOrganizationUID\",vm:\"1\",version:\"DICOM/retired\"},\"(0040,DB0D)\":{tag:\"(0040,DB0D)\",vr:\"UI\",name:\"RETIRED_TemplateExtensionCreatorUID\",vm:\"1\",version:\"DICOM/retired\"},\"(0054,1400)\":{tag:\"(0054,1400)\",vr:\"CS\",name:\"RETIRED_CountsIncluded\",vm:\"1-n\",version:\"DICOM/retired\"},\"(0054,1401)\":{tag:\"(0054,1401)\",vr:\"CS\",name:\"RETIRED_DeadTimeCorrectionFlag\",vm:\"1\",version:\"DICOM/retired\"},\"(0070,0040)\":{tag:\"(0070,0040)\",vr:\"IS\",name:\"RETIRED_ImageRotationRetired\",vm:\"1\",version:\"DICOM/retired\"},\"(0070,0050)\":{tag:\"(0070,0050)\",vr:\"US\",name:\"RETIRED_DisplayedAreaTopLeftHandCornerTrial\",vm:\"2\",version:\"DICOM/retired\"},\"(0070,0051)\":{tag:\"(0070,0051)\",vr:\"US\",name:\"RETIRED_DisplayedAreaBottomRightHandCornerTrial\",vm:\"2\",version:\"DICOM/retired\"},\"(0070,0067)\":{tag:\"(0070,0067)\",vr:\"US\",name:\"RETIRED_GraphicLayerRecommendedDisplayRGBValue\",vm:\"3\",version:\"DICOM/retired\"},\"(0074,1024)\":{tag:\"(0074,1024)\",vr:\"IS\",name:\"RETIRED_BeamOrderIndexTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0074,1038)\":{tag:\"(0074,1038)\",vr:\"DS\",name:\"RETIRED_DoubleExposureMetersetTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(0074,103A)\":{tag:\"(0074,103A)\",vr:\"DS\",name:\"RETIRED_DoubleExposureFieldDeltaTrial\",vm:\"4\",version:\"DICOM/retired\"},\"(0074,1220)\":{tag:\"(0074,1220)\",vr:\"SQ\",name:\"RETIRED_RelatedProcedureStepSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(0074,1222)\":{tag:\"(0074,1222)\",vr:\"LO\",name:\"RETIRED_ProcedureStepRelationshipType\",vm:\"1\",version:\"DICOM/retired\"},\"(0088,0904)\":{tag:\"(0088,0904)\",vr:\"LO\",name:\"RETIRED_TopicTitle\",vm:\"1\",version:\"DICOM/retired\"},\"(0088,0906)\":{tag:\"(0088,0906)\",vr:\"ST\",name:\"RETIRED_TopicSubject\",vm:\"1\",version:\"DICOM/retired\"},\"(0088,0910)\":{tag:\"(0088,0910)\",vr:\"LO\",name:\"RETIRED_TopicAuthor\",vm:\"1\",version:\"DICOM/retired\"},\"(0088,0912)\":{tag:\"(0088,0912)\",vr:\"LO\",name:\"RETIRED_TopicKeywords\",vm:\"1-32\",version:\"DICOM/retired\"},\"(0400,0315)\":{tag:\"(0400,0315)\",vr:\"FL\",name:\"RETIRED_undefined\",vm:\"1\",version:\"DICOM/retired\"},\"(1000,0010)\":{tag:\"(1000,0010)\",vr:\"US\",name:\"RETIRED_EscapeTriplet\",vm:\"3\",version:\"DICOM/retired\"},\"(1000,0011)\":{tag:\"(1000,0011)\",vr:\"US\",name:\"RETIRED_RunLengthTriplet\",vm:\"3\",version:\"DICOM/retired\"},\"(1000,0012)\":{tag:\"(1000,0012)\",vr:\"US\",name:\"RETIRED_HuffmanTableSize\",vm:\"1\",version:\"DICOM/retired\"},\"(1000,0013)\":{tag:\"(1000,0013)\",vr:\"US\",name:\"RETIRED_HuffmanTableTriplet\",vm:\"3\",version:\"DICOM/retired\"},\"(1000,0014)\":{tag:\"(1000,0014)\",vr:\"US\",name:\"RETIRED_ShiftTableSize\",vm:\"1\",version:\"DICOM/retired\"},\"(1000,0015)\":{tag:\"(1000,0015)\",vr:\"US\",name:\"RETIRED_ShiftTableTriplet\",vm:\"3\",version:\"DICOM/retired\"},\"(1010,0004)\":{tag:\"(1010,0004)\",vr:\"US\",name:\"RETIRED_ZonalMap\",vm:\"1-n\",version:\"DICOM/retired\"},\"(2000,0062)\":{tag:\"(2000,0062)\",vr:\"CS\",name:\"RETIRED_ColorImagePrintingFlag\",vm:\"1\",version:\"DICOM/retired\"},\"(2000,0063)\":{tag:\"(2000,0063)\",vr:\"CS\",name:\"RETIRED_CollationFlag\",vm:\"1\",version:\"DICOM/retired\"},\"(2000,0065)\":{tag:\"(2000,0065)\",vr:\"CS\",name:\"RETIRED_AnnotationFlag\",vm:\"1\",version:\"DICOM/retired\"},\"(2000,0067)\":{tag:\"(2000,0067)\",vr:\"CS\",name:\"RETIRED_ImageOverlayFlag\",vm:\"1\",version:\"DICOM/retired\"},\"(2000,0069)\":{tag:\"(2000,0069)\",vr:\"CS\",name:\"RETIRED_PresentationLUTFlag\",vm:\"1\",version:\"DICOM/retired\"},\"(2000,006A)\":{tag:\"(2000,006A)\",vr:\"CS\",name:\"RETIRED_ImageBoxPresentationLUTFlag\",vm:\"1\",version:\"DICOM/retired\"},\"(2000,0510)\":{tag:\"(2000,0510)\",vr:\"SQ\",name:\"RETIRED_ReferencedStoredPrintSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(2020,0130)\":{tag:\"(2020,0130)\",vr:\"SQ\",name:\"RETIRED_ReferencedImageOverlayBoxSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(2020,0140)\":{tag:\"(2020,0140)\",vr:\"SQ\",name:\"RETIRED_ReferencedVOILUTBoxSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(2040,0010)\":{tag:\"(2040,0010)\",vr:\"SQ\",name:\"RETIRED_ReferencedOverlayPlaneSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(2040,0011)\":{tag:\"(2040,0011)\",vr:\"US\",name:\"RETIRED_ReferencedOverlayPlaneGroups\",vm:\"1-99\",version:\"DICOM/retired\"},\"(2040,0020)\":{tag:\"(2040,0020)\",vr:\"SQ\",name:\"RETIRED_OverlayPixelDataSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(2040,0060)\":{tag:\"(2040,0060)\",vr:\"CS\",name:\"RETIRED_OverlayMagnificationType\",vm:\"1\",version:\"DICOM/retired\"},\"(2040,0070)\":{tag:\"(2040,0070)\",vr:\"CS\",name:\"RETIRED_OverlaySmoothingType\",vm:\"1\",version:\"DICOM/retired\"},\"(2040,0072)\":{tag:\"(2040,0072)\",vr:\"CS\",name:\"RETIRED_OverlayOrImageMagnification\",vm:\"1\",version:\"DICOM/retired\"},\"(2040,0074)\":{tag:\"(2040,0074)\",vr:\"US\",name:\"RETIRED_MagnifyToNumberOfColumns\",vm:\"1\",version:\"DICOM/retired\"},\"(2040,0080)\":{tag:\"(2040,0080)\",vr:\"CS\",name:\"RETIRED_OverlayForegroundDensity\",vm:\"1\",version:\"DICOM/retired\"},\"(2040,0082)\":{tag:\"(2040,0082)\",vr:\"CS\",name:\"RETIRED_OverlayBackgroundDensity\",vm:\"1\",version:\"DICOM/retired\"},\"(2040,0090)\":{tag:\"(2040,0090)\",vr:\"CS\",name:\"RETIRED_OverlayMode\",vm:\"1\",version:\"DICOM/retired\"},\"(2040,0100)\":{tag:\"(2040,0100)\",vr:\"CS\",name:\"RETIRED_ThresholdDensity\",vm:\"1\",version:\"DICOM/retired\"},\"(2040,0500)\":{tag:\"(2040,0500)\",vr:\"SQ\",name:\"RETIRED_ReferencedImageBoxSequenceRetired\",vm:\"1\",version:\"DICOM/retired\"},\"(2100,0010)\":{tag:\"(2100,0010)\",vr:\"SH\",name:\"RETIRED_PrintJobID\",vm:\"1\",version:\"DICOM/retired\"},\"(2100,0140)\":{tag:\"(2100,0140)\",vr:\"AE\",name:\"RETIRED_DestinationAE\",vm:\"1\",version:\"DICOM/retired\"},\"(2100,0500)\":{tag:\"(2100,0500)\",vr:\"SQ\",name:\"RETIRED_ReferencedPrintJobSequencePullStoredPrint\",vm:\"1\",version:\"DICOM/retired\"},\"(2110,0099)\":{tag:\"(2110,0099)\",vr:\"SH\",name:\"RETIRED_PrintQueueID\",vm:\"1\",version:\"DICOM/retired\"},\"(2120,0010)\":{tag:\"(2120,0010)\",vr:\"CS\",name:\"RETIRED_QueueStatus\",vm:\"1\",version:\"DICOM/retired\"},\"(2120,0050)\":{tag:\"(2120,0050)\",vr:\"SQ\",name:\"RETIRED_PrintJobDescriptionSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(2120,0070)\":{tag:\"(2120,0070)\",vr:\"SQ\",name:\"RETIRED_ReferencedPrintJobSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(2130,0010)\":{tag:\"(2130,0010)\",vr:\"SQ\",name:\"RETIRED_PrintManagementCapabilitiesSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(2130,0015)\":{tag:\"(2130,0015)\",vr:\"SQ\",name:\"RETIRED_PrinterCharacteristicsSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(2130,0030)\":{tag:\"(2130,0030)\",vr:\"SQ\",name:\"RETIRED_FilmBoxContentSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(2130,0040)\":{tag:\"(2130,0040)\",vr:\"SQ\",name:\"RETIRED_ImageBoxContentSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(2130,0050)\":{tag:\"(2130,0050)\",vr:\"SQ\",name:\"RETIRED_AnnotationContentSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(2130,0060)\":{tag:\"(2130,0060)\",vr:\"SQ\",name:\"RETIRED_ImageOverlayBoxContentSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(2130,0080)\":{tag:\"(2130,0080)\",vr:\"SQ\",name:\"RETIRED_PresentationLUTContentSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(2130,00A0)\":{tag:\"(2130,00A0)\",vr:\"SQ\",name:\"RETIRED_ProposedStudySequence\",vm:\"1\",version:\"DICOM/retired\"},\"(2130,00C0)\":{tag:\"(2130,00C0)\",vr:\"SQ\",name:\"RETIRED_OriginalImageSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(3006,00C0)\":{tag:\"(3006,00C0)\",vr:\"SQ\",name:\"RETIRED_FrameOfReferenceRelationshipSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(3006,00C2)\":{tag:\"(3006,00C2)\",vr:\"UI\",name:\"RETIRED_RelatedFrameOfReferenceUID\",vm:\"1\",version:\"DICOM/retired\"},\"(3006,00C4)\":{tag:\"(3006,00C4)\",vr:\"CS\",name:\"RETIRED_FrameOfReferenceTransformationType\",vm:\"1\",version:\"DICOM/retired\"},\"(300A,0088)\":{tag:\"(300A,0088)\",vr:\"FL\",name:\"RETIRED_BeamDosePointDepth\",vm:\"1\",version:\"DICOM/retired\"},\"(300A,0089)\":{tag:\"(300A,0089)\",vr:\"FL\",name:\"RETIRED_BeamDosePointEquivalentDepth\",vm:\"1\",version:\"DICOM/retired\"},\"(300A,008A)\":{tag:\"(300A,008A)\",vr:\"FL\",name:\"RETIRED_BeamDosePointSSD\",vm:\"1\",version:\"DICOM/retired\"},\"(300A,0782)\":{tag:\"(300A,0782)\",vr:\"US\",name:\"RETIRED_undefined\",vm:\"1\",version:\"DICOM/retired\"},\"(4000,0010)\":{tag:\"(4000,0010)\",vr:\"LT\",name:\"RETIRED_Arbitrary\",vm:\"1\",version:\"DICOM/retired\"},\"(4000,4000)\":{tag:\"(4000,4000)\",vr:\"LT\",name:\"RETIRED_TextComments\",vm:\"1\",version:\"DICOM/retired\"},\"(4008,0040)\":{tag:\"(4008,0040)\",vr:\"SH\",name:\"RETIRED_ResultsID\",vm:\"1\",version:\"DICOM/retired\"},\"(4008,0042)\":{tag:\"(4008,0042)\",vr:\"LO\",name:\"RETIRED_ResultsIDIssuer\",vm:\"1\",version:\"DICOM/retired\"},\"(4008,0050)\":{tag:\"(4008,0050)\",vr:\"SQ\",name:\"RETIRED_ReferencedInterpretationSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(4008,00FF)\":{tag:\"(4008,00FF)\",vr:\"CS\",name:\"RETIRED_ReportProductionStatusTrial\",vm:\"1\",version:\"DICOM/retired\"},\"(4008,0100)\":{tag:\"(4008,0100)\",vr:\"DA\",name:\"RETIRED_InterpretationRecordedDate\",vm:\"1\",version:\"DICOM/retired\"},\"(4008,0101)\":{tag:\"(4008,0101)\",vr:\"TM\",name:\"RETIRED_InterpretationRecordedTime\",vm:\"1\",version:\"DICOM/retired\"},\"(4008,0102)\":{tag:\"(4008,0102)\",vr:\"PN\",name:\"RETIRED_InterpretationRecorder\",vm:\"1\",version:\"DICOM/retired\"},\"(4008,0103)\":{tag:\"(4008,0103)\",vr:\"LO\",name:\"RETIRED_ReferenceToRecordedSound\",vm:\"1\",version:\"DICOM/retired\"},\"(4008,0108)\":{tag:\"(4008,0108)\",vr:\"DA\",name:\"RETIRED_InterpretationTranscriptionDate\",vm:\"1\",version:\"DICOM/retired\"},\"(4008,0109)\":{tag:\"(4008,0109)\",vr:\"TM\",name:\"RETIRED_InterpretationTranscriptionTime\",vm:\"1\",version:\"DICOM/retired\"},\"(4008,010A)\":{tag:\"(4008,010A)\",vr:\"PN\",name:\"RETIRED_InterpretationTranscriber\",vm:\"1\",version:\"DICOM/retired\"},\"(4008,010B)\":{tag:\"(4008,010B)\",vr:\"ST\",name:\"RETIRED_InterpretationText\",vm:\"1\",version:\"DICOM/retired\"},\"(4008,010C)\":{tag:\"(4008,010C)\",vr:\"PN\",name:\"RETIRED_InterpretationAuthor\",vm:\"1\",version:\"DICOM/retired\"},\"(4008,0111)\":{tag:\"(4008,0111)\",vr:\"SQ\",name:\"RETIRED_InterpretationApproverSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(4008,0112)\":{tag:\"(4008,0112)\",vr:\"DA\",name:\"RETIRED_InterpretationApprovalDate\",vm:\"1\",version:\"DICOM/retired\"},\"(4008,0113)\":{tag:\"(4008,0113)\",vr:\"TM\",name:\"RETIRED_InterpretationApprovalTime\",vm:\"1\",version:\"DICOM/retired\"},\"(4008,0114)\":{tag:\"(4008,0114)\",vr:\"PN\",name:\"RETIRED_PhysicianApprovingInterpretation\",vm:\"1\",version:\"DICOM/retired\"},\"(4008,0115)\":{tag:\"(4008,0115)\",vr:\"LT\",name:\"RETIRED_InterpretationDiagnosisDescription\",vm:\"1\",version:\"DICOM/retired\"},\"(4008,0117)\":{tag:\"(4008,0117)\",vr:\"SQ\",name:\"RETIRED_InterpretationDiagnosisCodeSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(4008,0118)\":{tag:\"(4008,0118)\",vr:\"SQ\",name:\"RETIRED_ResultsDistributionListSequence\",vm:\"1\",version:\"DICOM/retired\"},\"(4008,0119)\":{tag:\"(4008,0119)\",vr:\"PN\",name:\"RETIRED_DistributionName\",vm:\"1\",version:\"DICOM/retired\"},\"(4008,011A)\":{tag:\"(4008,011A)\",vr:\"LO\",name:\"RETIRED_DistributionAddress\",vm:\"1\",version:\"DICOM/retired\"},\"(4008,0200)\":{tag:\"(4008,0200)\",vr:\"SH\",name:\"RETIRED_InterpretationID\",vm:\"1\",version:\"DICOM/retired\"},\"(4008,0202)\":{tag:\"(4008,0202)\",vr:\"LO\",name:\"RETIRED_InterpretationIDIssuer\",vm:\"1\",version:\"DICOM/retired\"},\"(4008,0210)\":{tag:\"(4008,0210)\",vr:\"CS\",name:\"RETIRED_InterpretationTypeID\",vm:\"1\",version:\"DICOM/retired\"},\"(4008,0212)\":{tag:\"(4008,0212)\",vr:\"CS\",name:\"RETIRED_InterpretationStatusID\",vm:\"1\",version:\"DICOM/retired\"},\"(4008,0300)\":{tag:\"(4008,0300)\",vr:\"ST\",name:\"RETIRED_Impressions\",vm:\"1\",version:\"DICOM/retired\"},\"(4008,4000)\":{tag:\"(4008,4000)\",vr:\"ST\",name:\"RETIRED_ResultsComments\",vm:\"1\",version:\"DICOM/retired\"},\"(5000-50FF,0005)\":{tag:\"(5000-50FF,0005)\",vr:\"US\",name:\"RETIRED_CurveDimensions\",vm:\"1\",version:\"DICOM/retired\"},\"(5000-50FF,0010)\":{tag:\"(5000-50FF,0010)\",vr:\"US\",name:\"RETIRED_NumberOfPoints\",vm:\"1\",version:\"DICOM/retired\"},\"(5000-50FF,0020)\":{tag:\"(5000-50FF,0020)\",vr:\"CS\",name:\"RETIRED_TypeOfData\",vm:\"1\",version:\"DICOM/retired\"},\"(5000-50FF,0022)\":{tag:\"(5000-50FF,0022)\",vr:\"LO\",name:\"RETIRED_CurveDescription\",vm:\"1\",version:\"DICOM/retired\"},\"(5000-50FF,0030)\":{tag:\"(5000-50FF,0030)\",vr:\"SH\",name:\"RETIRED_AxisUnits\",vm:\"1-n\",version:\"DICOM/retired\"},\"(5000-50FF,0040)\":{tag:\"(5000-50FF,0040)\",vr:\"SH\",name:\"RETIRED_AxisLabels\",vm:\"1-n\",version:\"DICOM/retired\"},\"(5000-50FF,0103)\":{tag:\"(5000-50FF,0103)\",vr:\"US\",name:\"RETIRED_DataValueRepresentation\",vm:\"1\",version:\"DICOM/retired\"},\"(5000-50FF,0104)\":{tag:\"(5000-50FF,0104)\",vr:\"US\",name:\"RETIRED_MinimumCoordinateValue\",vm:\"1-n\",version:\"DICOM/retired\"},\"(5000-50FF,0105)\":{tag:\"(5000-50FF,0105)\",vr:\"US\",name:\"RETIRED_MaximumCoordinateValue\",vm:\"1-n\",version:\"DICOM/retired\"},\"(5000-50FF,0106)\":{tag:\"(5000-50FF,0106)\",vr:\"SH\",name:\"RETIRED_CurveRange\",vm:\"1-n\",version:\"DICOM/retired\"},\"(5000-50FF,0110)\":{tag:\"(5000-50FF,0110)\",vr:\"US\",name:\"RETIRED_CurveDataDescriptor\",vm:\"1-n\",version:\"DICOM/retired\"},\"(5000-50FF,0112)\":{tag:\"(5000-50FF,0112)\",vr:\"US\",name:\"RETIRED_CoordinateStartValue\",vm:\"1-n\",version:\"DICOM/retired\"},\"(5000-50FF,0114)\":{tag:\"(5000-50FF,0114)\",vr:\"US\",name:\"RETIRED_CoordinateStepValue\",vm:\"1-n\",version:\"DICOM/retired\"},\"(5000-50FF,1001)\":{tag:\"(5000-50FF,1001)\",vr:\"CS\",name:\"RETIRED_CurveActivationLayer\",vm:\"1\",version:\"DICOM/retired\"},\"(5000-50FF,2000)\":{tag:\"(5000-50FF,2000)\",vr:\"US\",name:\"RETIRED_AudioType\",vm:\"1\",version:\"DICOM/retired\"},\"(5000-50FF,2002)\":{tag:\"(5000-50FF,2002)\",vr:\"US\",name:\"RETIRED_AudioSampleFormat\",vm:\"1\",version:\"DICOM/retired\"},\"(5000-50FF,2004)\":{tag:\"(5000-50FF,2004)\",vr:\"US\",name:\"RETIRED_NumberOfChannels\",vm:\"1\",version:\"DICOM/retired\"},\"(5000-50FF,2006)\":{tag:\"(5000-50FF,2006)\",vr:\"UL\",name:\"RETIRED_NumberOfSamples\",vm:\"1\",version:\"DICOM/retired\"},\"(5000-50FF,2008)\":{tag:\"(5000-50FF,2008)\",vr:\"UL\",name:\"RETIRED_SampleRate\",vm:\"1\",version:\"DICOM/retired\"},\"(5000-50FF,200A)\":{tag:\"(5000-50FF,200A)\",vr:\"UL\",name:\"RETIRED_TotalTime\",vm:\"1\",version:\"DICOM/retired\"},\"(5000-50FF,200C)\":{tag:\"(5000-50FF,200C)\",vr:\"ox\",name:\"RETIRED_AudioSampleData\",vm:\"1\",version:\"DICOM/retired\"},\"(5000-50FF,200E)\":{tag:\"(5000-50FF,200E)\",vr:\"LT\",name:\"RETIRED_AudioComments\",vm:\"1\",version:\"DICOM/retired\"},\"(5000-50FF,2500)\":{tag:\"(5000-50FF,2500)\",vr:\"LO\",name:\"RETIRED_CurveLabel\",vm:\"1\",version:\"DICOM/retired\"},\"(5000-50FF,2600)\":{tag:\"(5000-50FF,2600)\",vr:\"SQ\",name:\"RETIRED_CurveReferencedOverlaySequence\",vm:\"1\",version:\"DICOM/retired\"},\"(5000-50FF,2610)\":{tag:\"(5000-50FF,2610)\",vr:\"US\",name:\"RETIRED_CurveReferencedOverlayGroup\",vm:\"1\",version:\"DICOM/retired\"},\"(5000-50FF,3000)\":{tag:\"(5000-50FF,3000)\",vr:\"ox\",name:\"RETIRED_CurveData\",vm:\"1\",version:\"DICOM/retired\"},\"(6000-60FF,0012)\":{tag:\"(6000-60FF,0012)\",vr:\"US\",name:\"RETIRED_OverlayPlanes\",vm:\"1\",version:\"DICOM/retired\"},\"(6000-60FF,0052)\":{tag:\"(6000-60FF,0052)\",vr:\"US\",name:\"RETIRED_OverlayPlaneOrigin\",vm:\"1\",version:\"DICOM/retired\"},\"(6000-60FF,0060)\":{tag:\"(6000-60FF,0060)\",vr:\"CS\",name:\"RETIRED_OverlayCompressionCode\",vm:\"1\",version:\"DICOM/retired\"},\"(6000-60FF,0061)\":{tag:\"(6000-60FF,0061)\",vr:\"SH\",name:\"RETIRED_OverlayCompressionOriginator\",vm:\"1\",version:\"DICOM/retired\"},\"(6000-60FF,0062)\":{tag:\"(6000-60FF,0062)\",vr:\"SH\",name:\"RETIRED_OverlayCompressionLabel\",vm:\"1\",version:\"DICOM/retired\"},\"(6000-60FF,0063)\":{tag:\"(6000-60FF,0063)\",vr:\"CS\",name:\"RETIRED_OverlayCompressionDescription\",vm:\"1\",version:\"DICOM/retired\"},\"(6000-60FF,0066)\":{tag:\"(6000-60FF,0066)\",vr:\"AT\",name:\"RETIRED_OverlayCompressionStepPointers\",vm:\"1-n\",version:\"DICOM/retired\"},\"(6000-60FF,0068)\":{tag:\"(6000-60FF,0068)\",vr:\"US\",name:\"RETIRED_OverlayRepeatInterval\",vm:\"1\",version:\"DICOM/retired\"},\"(6000-60FF,0069)\":{tag:\"(6000-60FF,0069)\",vr:\"US\",name:\"RETIRED_OverlayBitsGrouped\",vm:\"1\",version:\"DICOM/retired\"},\"(6000-60FF,0110)\":{tag:\"(6000-60FF,0110)\",vr:\"CS\",name:\"RETIRED_OverlayFormat\",vm:\"1\",version:\"DICOM/retired\"},\"(6000-60FF,0200)\":{tag:\"(6000-60FF,0200)\",vr:\"US\",name:\"RETIRED_OverlayLocation\",vm:\"1\",version:\"DICOM/retired\"},\"(6000-60FF,0800)\":{tag:\"(6000-60FF,0800)\",vr:\"CS\",name:\"RETIRED_OverlayCodeLabel\",vm:\"1-n\",version:\"DICOM/retired\"},\"(6000-60FF,0802)\":{tag:\"(6000-60FF,0802)\",vr:\"US\",name:\"RETIRED_OverlayNumberOfTables\",vm:\"1\",version:\"DICOM/retired\"},\"(6000-60FF,0803)\":{tag:\"(6000-60FF,0803)\",vr:\"AT\",name:\"RETIRED_OverlayCodeTableLocation\",vm:\"1-n\",version:\"DICOM/retired\"},\"(6000-60FF,0804)\":{tag:\"(6000-60FF,0804)\",vr:\"US\",name:\"RETIRED_OverlayBitsForCodeWord\",vm:\"1\",version:\"DICOM/retired\"},\"(6000-60FF,1100)\":{tag:\"(6000-60FF,1100)\",vr:\"US\",name:\"RETIRED_OverlayDescriptorGray\",vm:\"1\",version:\"DICOM/retired\"},\"(6000-60FF,1101)\":{tag:\"(6000-60FF,1101)\",vr:\"US\",name:\"RETIRED_OverlayDescriptorRed\",vm:\"1\",version:\"DICOM/retired\"},\"(6000-60FF,1102)\":{tag:\"(6000-60FF,1102)\",vr:\"US\",name:\"RETIRED_OverlayDescriptorGreen\",vm:\"1\",version:\"DICOM/retired\"},\"(6000-60FF,1103)\":{tag:\"(6000-60FF,1103)\",vr:\"US\",name:\"RETIRED_OverlayDescriptorBlue\",vm:\"1\",version:\"DICOM/retired\"},\"(6000-60FF,1200)\":{tag:\"(6000-60FF,1200)\",vr:\"US\",name:\"RETIRED_OverlaysGray\",vm:\"1-n\",version:\"DICOM/retired\"},\"(6000-60FF,1201)\":{tag:\"(6000-60FF,1201)\",vr:\"US\",name:\"RETIRED_OverlaysRed\",vm:\"1-n\",version:\"DICOM/retired\"},\"(6000-60FF,1202)\":{tag:\"(6000-60FF,1202)\",vr:\"US\",name:\"RETIRED_OverlaysGreen\",vm:\"1-n\",version:\"DICOM/retired\"},\"(6000-60FF,1203)\":{tag:\"(6000-60FF,1203)\",vr:\"US\",name:\"RETIRED_OverlaysBlue\",vm:\"1-n\",version:\"DICOM/retired\"},\"(6000-60FF,4000)\":{tag:\"(6000-60FF,4000)\",vr:\"LT\",name:\"RETIRED_OverlayComments\",vm:\"1\",version:\"DICOM/retired\"},\"(7FE0,0020)\":{tag:\"(7FE0,0020)\",vr:\"OW\",name:\"RETIRED_CoefficientsSDVN\",vm:\"1\",version:\"DICOM/retired\"},\"(7FE0,0030)\":{tag:\"(7FE0,0030)\",vr:\"OW\",name:\"RETIRED_CoefficientsSDHN\",vm:\"1\",version:\"DICOM/retired\"},\"(7FE0,0040)\":{tag:\"(7FE0,0040)\",vr:\"OW\",name:\"RETIRED_CoefficientsSDDN\",vm:\"1\",version:\"DICOM/retired\"},\"(7F00-7FFF,0010)\":{tag:\"(7F00-7FFF,0010)\",vr:\"ox\",name:\"RETIRED_VariablePixelData\",vm:\"1\",version:\"DICOM/retired\"},\"(7F00-7FFF,0011)\":{tag:\"(7F00-7FFF,0011)\",vr:\"US\",name:\"RETIRED_VariableNextDataGroup\",vm:\"1\",version:\"DICOM/retired\"},\"(7F00-7FFF,0020)\":{tag:\"(7F00-7FFF,0020)\",vr:\"OW\",name:\"RETIRED_VariableCoefficientsSDVN\",vm:\"1\",version:\"DICOM/retired\"},\"(7F00-7FFF,0030)\":{tag:\"(7F00-7FFF,0030)\",vr:\"OW\",name:\"RETIRED_VariableCoefficientsSDHN\",vm:\"1\",version:\"DICOM/retired\"},\"(7F00-7FFF,0040)\":{tag:\"(7F00-7FFF,0040)\",vr:\"OW\",name:\"RETIRED_VariableCoefficientsSDDN\",vm:\"1\",version:\"DICOM/retired\"},\"\":{tag:\"\"},'(0019,\"1.2.840.113681\",10)':{tag:'(0019,\"1.2.840.113681\",10)',vr:\"ST\",name:\"CRImageParamsCommon\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"1.2.840.113681\",11)':{tag:'(0019,\"1.2.840.113681\",11)',vr:\"ST\",name:\"CRImageIPParamsSingle\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"1.2.840.113681\",12)':{tag:'(0019,\"1.2.840.113681\",12)',vr:\"ST\",name:\"CRImageIPParamsLeft\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"1.2.840.113681\",13)':{tag:'(0019,\"1.2.840.113681\",13)',vr:\"ST\",name:\"CRImageIPParamsRight\",vm:\"1\",version:\"PrivateTag\"},'(0087,\"1.2.840.113708.794.1.1.2.0\",10)':{tag:'(0087,\"1.2.840.113708.794.1.1.2.0\",10)',vr:\"CS\",name:\"MediaType\",vm:\"1\",version:\"PrivateTag\"},'(0087,\"1.2.840.113708.794.1.1.2.0\",20)':{tag:'(0087,\"1.2.840.113708.794.1.1.2.0\",20)',vr:\"CS\",name:\"MediaLocation\",vm:\"1\",version:\"PrivateTag\"},'(0087,\"1.2.840.113708.794.1.1.2.0\",50)':{tag:'(0087,\"1.2.840.113708.794.1.1.2.0\",50)',vr:\"IS\",name:\"EstimatedRetrieveTime\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"ACUSON\",00)':{tag:'(0009,\"ACUSON\",00)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"ACUSON\",01)':{tag:'(0009,\"ACUSON\",01)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"ACUSON\",02)':{tag:'(0009,\"ACUSON\",02)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"ACUSON\",03)':{tag:'(0009,\"ACUSON\",03)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"ACUSON\",04)':{tag:'(0009,\"ACUSON\",04)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"ACUSON\",05)':{tag:'(0009,\"ACUSON\",05)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"ACUSON\",06)':{tag:'(0009,\"ACUSON\",06)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"ACUSON\",07)':{tag:'(0009,\"ACUSON\",07)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"ACUSON\",08)':{tag:'(0009,\"ACUSON\",08)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"ACUSON\",09)':{tag:'(0009,\"ACUSON\",09)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"ACUSON\",0a)':{tag:'(0009,\"ACUSON\",0a)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"ACUSON\",0b)':{tag:'(0009,\"ACUSON\",0b)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"ACUSON\",0c)':{tag:'(0009,\"ACUSON\",0c)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"ACUSON\",0d)':{tag:'(0009,\"ACUSON\",0d)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"ACUSON\",0e)':{tag:'(0009,\"ACUSON\",0e)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"ACUSON\",0f)':{tag:'(0009,\"ACUSON\",0f)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"ACUSON\",10)':{tag:'(0009,\"ACUSON\",10)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"ACUSON\",11)':{tag:'(0009,\"ACUSON\",11)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"ACUSON\",12)':{tag:'(0009,\"ACUSON\",12)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"ACUSON\",13)':{tag:'(0009,\"ACUSON\",13)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"ACUSON\",14)':{tag:'(0009,\"ACUSON\",14)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"ACUSON\",15)':{tag:'(0009,\"ACUSON\",15)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0003,\"AEGIS_DICOM_2.00\",00)':{tag:'(0003,\"AEGIS_DICOM_2.00\",00)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0005,\"AEGIS_DICOM_2.00\",00)':{tag:'(0005,\"AEGIS_DICOM_2.00\",00)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0009,\"AEGIS_DICOM_2.00\",00)':{tag:'(0009,\"AEGIS_DICOM_2.00\",00)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"AEGIS_DICOM_2.00\",00)':{tag:'(0019,\"AEGIS_DICOM_2.00\",00)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0029,\"AEGIS_DICOM_2.00\",00)':{tag:'(0029,\"AEGIS_DICOM_2.00\",00)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(1369,\"AEGIS_DICOM_2.00\",00)':{tag:'(1369,\"AEGIS_DICOM_2.00\",00)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0009,\"AGFA\",10)':{tag:'(0009,\"AGFA\",10)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"AGFA\",11)':{tag:'(0009,\"AGFA\",11)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"AGFA\",13)':{tag:'(0009,\"AGFA\",13)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"AGFA\",14)':{tag:'(0009,\"AGFA\",14)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"AGFA\",15)':{tag:'(0009,\"AGFA\",15)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0031,\"AGFA PACS Archive Mirroring 1.0\",00)':{tag:'(0031,\"AGFA PACS Archive Mirroring 1.0\",00)',vr:\"CS\",name:\"StudyStatus\",vm:\"1\",version:\"PrivateTag\"},'(0031,\"AGFA PACS Archive Mirroring 1.0\",01)':{tag:'(0031,\"AGFA PACS Archive Mirroring 1.0\",01)',vr:\"UL\",name:\"DateTimeVerified\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"CAMTRONICS IP\",10)':{tag:'(0029,\"CAMTRONICS IP\",10)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"CAMTRONICS IP\",20)':{tag:'(0029,\"CAMTRONICS IP\",20)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"CAMTRONICS IP\",30)':{tag:'(0029,\"CAMTRONICS IP\",30)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"CAMTRONICS IP\",40)':{tag:'(0029,\"CAMTRONICS IP\",40)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"CAMTRONICS\",10)':{tag:'(0029,\"CAMTRONICS\",10)',vr:\"LT\",name:\"Commentline\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"CAMTRONICS\",20)':{tag:'(0029,\"CAMTRONICS\",20)',vr:\"DS\",name:\"EdgeEnhancementCoefficient\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"CAMTRONICS\",50)':{tag:'(0029,\"CAMTRONICS\",50)',vr:\"LT\",name:\"SceneText\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"CAMTRONICS\",60)':{tag:'(0029,\"CAMTRONICS\",60)',vr:\"LT\",name:\"ImageText\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"CAMTRONICS\",70)':{tag:'(0029,\"CAMTRONICS\",70)',vr:\"IS\",name:\"PixelShiftHorizontal\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"CAMTRONICS\",80)':{tag:'(0029,\"CAMTRONICS\",80)',vr:\"IS\",name:\"PixelShiftVertical\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"CAMTRONICS\",90)':{tag:'(0029,\"CAMTRONICS\",90)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"CARDIO-D.R. 1.0\",00)':{tag:'(0009,\"CARDIO-D.R. 1.0\",00)',vr:\"UL\",name:\"FileLocation\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"CARDIO-D.R. 1.0\",01)':{tag:'(0009,\"CARDIO-D.R. 1.0\",01)',vr:\"UL\",name:\"FileSize\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"CARDIO-D.R. 1.0\",40)':{tag:'(0009,\"CARDIO-D.R. 1.0\",40)',vr:\"SQ\",name:\"AlternateImageSequence\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"CARDIO-D.R. 1.0\",00)':{tag:'(0019,\"CARDIO-D.R. 1.0\",00)',vr:\"CS\",name:\"ImageBlankingShape\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"CARDIO-D.R. 1.0\",02)':{tag:'(0019,\"CARDIO-D.R. 1.0\",02)',vr:\"IS\",name:\"ImageBlankingLeftVerticalEdge\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"CARDIO-D.R. 1.0\",04)':{tag:'(0019,\"CARDIO-D.R. 1.0\",04)',vr:\"IS\",name:\"ImageBlankingRightVerticalEdge\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"CARDIO-D.R. 1.0\",06)':{tag:'(0019,\"CARDIO-D.R. 1.0\",06)',vr:\"IS\",name:\"ImageBlankingUpperHorizontalEdge\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"CARDIO-D.R. 1.0\",08)':{tag:'(0019,\"CARDIO-D.R. 1.0\",08)',vr:\"IS\",name:\"ImageBlankingLowerHorizontalEdge\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"CARDIO-D.R. 1.0\",10)':{tag:'(0019,\"CARDIO-D.R. 1.0\",10)',vr:\"IS\",name:\"CenterOfCircularImageBlanking\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"CARDIO-D.R. 1.0\",12)':{tag:'(0019,\"CARDIO-D.R. 1.0\",12)',vr:\"IS\",name:\"RadiusOfCircularImageBlanking\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"CARDIO-D.R. 1.0\",30)':{tag:'(0019,\"CARDIO-D.R. 1.0\",30)',vr:\"UL\",name:\"MaximumImageFrameSize\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"CARDIO-D.R. 1.0\",13)':{tag:'(0021,\"CARDIO-D.R. 1.0\",13)',vr:\"IS\",name:\"ImageSequenceNumber\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"CARDIO-D.R. 1.0\",00)':{tag:'(0029,\"CARDIO-D.R. 1.0\",00)',vr:\"SQ\",name:\"EdgeEnhancementSequence\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"CARDIO-D.R. 1.0\",01)':{tag:'(0029,\"CARDIO-D.R. 1.0\",01)',vr:\"US\",name:\"ConvolutionKernelSize\",vm:\"2\",version:\"PrivateTag\"},'(0029,\"CARDIO-D.R. 1.0\",02)':{tag:'(0029,\"CARDIO-D.R. 1.0\",02)',vr:\"DS\",name:\"ConvolutionKernelCoefficients\",vm:\"1-n\",version:\"PrivateTag\"},'(0029,\"CARDIO-D.R. 1.0\",03)':{tag:'(0029,\"CARDIO-D.R. 1.0\",03)',vr:\"DS\",name:\"EdgeEnhancementGain\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"CMR42 CIRCLECVI\",1010)':{tag:'(0025,\"CMR42 CIRCLECVI\",1010)',vr:\"LO\",name:\"WorkspaceID\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"CMR42 CIRCLECVI\",1020)':{tag:'(0025,\"CMR42 CIRCLECVI\",1020)',vr:\"LO\",name:\"WorkspaceTimeString\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"CMR42 CIRCLECVI\",1030)':{tag:'(0025,\"CMR42 CIRCLECVI\",1030)',vr:\"OB\",name:\"WorkspaceStream\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"DCMTK_ANONYMIZER\",00)':{tag:'(0009,\"DCMTK_ANONYMIZER\",00)',vr:\"SQ\",name:\"AnonymizerUIDMap\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"DCMTK_ANONYMIZER\",10)':{tag:'(0009,\"DCMTK_ANONYMIZER\",10)',vr:\"UI\",name:\"AnonymizerUIDKey\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"DCMTK_ANONYMIZER\",20)':{tag:'(0009,\"DCMTK_ANONYMIZER\",20)',vr:\"UI\",name:\"AnonymizerUIDValue\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"DCMTK_ANONYMIZER\",30)':{tag:'(0009,\"DCMTK_ANONYMIZER\",30)',vr:\"SQ\",name:\"AnonymizerPatientIDMap\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"DCMTK_ANONYMIZER\",40)':{tag:'(0009,\"DCMTK_ANONYMIZER\",40)',vr:\"LO\",name:\"AnonymizerPatientIDKey\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"DCMTK_ANONYMIZER\",50)':{tag:'(0009,\"DCMTK_ANONYMIZER\",50)',vr:\"LO\",name:\"AnonymizerPatientIDValue\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DIDI TO PCR 1.1\",22)':{tag:'(0019,\"DIDI TO PCR 1.1\",22)',vr:\"UN\",name:\"RouteAET\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DIDI TO PCR 1.1\",23)':{tag:'(0019,\"DIDI TO PCR 1.1\",23)',vr:\"DS\",name:\"PCRPrintScale\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DIDI TO PCR 1.1\",24)':{tag:'(0019,\"DIDI TO PCR 1.1\",24)',vr:\"UN\",name:\"PCRPrintJobEnd\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DIDI TO PCR 1.1\",25)':{tag:'(0019,\"DIDI TO PCR 1.1\",25)',vr:\"IS\",name:\"PCRNoFilmCopies\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DIDI TO PCR 1.1\",26)':{tag:'(0019,\"DIDI TO PCR 1.1\",26)',vr:\"IS\",name:\"PCRFilmLayoutPosition\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DIDI TO PCR 1.1\",27)':{tag:'(0019,\"DIDI TO PCR 1.1\",27)',vr:\"UN\",name:\"PCRPrintReportName\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DIDI TO PCR 1.1\",70)':{tag:'(0019,\"DIDI TO PCR 1.1\",70)',vr:\"UN\",name:\"RADProtocolPrinter\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DIDI TO PCR 1.1\",71)':{tag:'(0019,\"DIDI TO PCR 1.1\",71)',vr:\"UN\",name:\"RADProtocolMedium\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DIDI TO PCR 1.1\",90)':{tag:'(0019,\"DIDI TO PCR 1.1\",90)',vr:\"LO\",name:\"UnprocessedFlag\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DIDI TO PCR 1.1\",91)':{tag:'(0019,\"DIDI TO PCR 1.1\",91)',vr:\"UN\",name:\"KeyValues\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DIDI TO PCR 1.1\",92)':{tag:'(0019,\"DIDI TO PCR 1.1\",92)',vr:\"UN\",name:\"DestinationPostprocessingFunction\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DIDI TO PCR 1.1\",A0)':{tag:'(0019,\"DIDI TO PCR 1.1\",A0)',vr:\"UN\",name:\"Version\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DIDI TO PCR 1.1\",A1)':{tag:'(0019,\"DIDI TO PCR 1.1\",A1)',vr:\"UN\",name:\"RangingMode\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DIDI TO PCR 1.1\",A2)':{tag:'(0019,\"DIDI TO PCR 1.1\",A2)',vr:\"UN\",name:\"AbdomenBrightness\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DIDI TO PCR 1.1\",A3)':{tag:'(0019,\"DIDI TO PCR 1.1\",A3)',vr:\"UN\",name:\"FixedBrightness\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DIDI TO PCR 1.1\",A4)':{tag:'(0019,\"DIDI TO PCR 1.1\",A4)',vr:\"UN\",name:\"DetailContrast\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DIDI TO PCR 1.1\",A5)':{tag:'(0019,\"DIDI TO PCR 1.1\",A5)',vr:\"UN\",name:\"ContrastBalance\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DIDI TO PCR 1.1\",A6)':{tag:'(0019,\"DIDI TO PCR 1.1\",A6)',vr:\"UN\",name:\"StructureBoost\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DIDI TO PCR 1.1\",A7)':{tag:'(0019,\"DIDI TO PCR 1.1\",A7)',vr:\"UN\",name:\"StructurePreference\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DIDI TO PCR 1.1\",A8)':{tag:'(0019,\"DIDI TO PCR 1.1\",A8)',vr:\"UN\",name:\"NoiseRobustness\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DIDI TO PCR 1.1\",A9)':{tag:'(0019,\"DIDI TO PCR 1.1\",A9)',vr:\"UN\",name:\"NoiseDoseLimit\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DIDI TO PCR 1.1\",AA)':{tag:'(0019,\"DIDI TO PCR 1.1\",AA)',vr:\"UN\",name:\"NoiseDoseStep\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DIDI TO PCR 1.1\",AB)':{tag:'(0019,\"DIDI TO PCR 1.1\",AB)',vr:\"UN\",name:\"NoiseFrequencyLimit\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DIDI TO PCR 1.1\",AC)':{tag:'(0019,\"DIDI TO PCR 1.1\",AC)',vr:\"UN\",name:\"WeakContrastLimit\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DIDI TO PCR 1.1\",AD)':{tag:'(0019,\"DIDI TO PCR 1.1\",AD)',vr:\"UN\",name:\"StrongContrastLimit\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DIDI TO PCR 1.1\",AE)':{tag:'(0019,\"DIDI TO PCR 1.1\",AE)',vr:\"UN\",name:\"StructureBoostOffset\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DIDI TO PCR 1.1\",AF)':{tag:'(0019,\"DIDI TO PCR 1.1\",AF)',vr:\"UN\",name:\"SmoothGain\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DIDI TO PCR 1.1\",B0)':{tag:'(0019,\"DIDI TO PCR 1.1\",B0)',vr:\"UN\",name:\"MeasureField1\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DIDI TO PCR 1.1\",B1)':{tag:'(0019,\"DIDI TO PCR 1.1\",B1)',vr:\"UN\",name:\"MeasureField2\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DIDI TO PCR 1.1\",B2)':{tag:'(0019,\"DIDI TO PCR 1.1\",B2)',vr:\"UN\",name:\"KeyPercentile1\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DIDI TO PCR 1.1\",B3)':{tag:'(0019,\"DIDI TO PCR 1.1\",B3)',vr:\"UN\",name:\"KeyPercentile2\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DIDI TO PCR 1.1\",B4)':{tag:'(0019,\"DIDI TO PCR 1.1\",B4)',vr:\"UN\",name:\"DensityLUT\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DIDI TO PCR 1.1\",B5)':{tag:'(0019,\"DIDI TO PCR 1.1\",B5)',vr:\"UN\",name:\"Brightness\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DIDI TO PCR 1.1\",B6)':{tag:'(0019,\"DIDI TO PCR 1.1\",B6)',vr:\"UN\",name:\"Gamma\",vm:\"1\",version:\"PrivateTag\"},'(0089,\"DIDI TO PCR 1.1\",10)':{tag:'(0089,\"DIDI TO PCR 1.1\",10)',vr:\"SQ\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"DIGISCAN IMAGE\",31)':{tag:'(0029,\"DIGISCAN IMAGE\",31)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0029,\"DIGISCAN IMAGE\",32)':{tag:'(0029,\"DIGISCAN IMAGE\",32)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0029,\"DIGISCAN IMAGE\",33)':{tag:'(0029,\"DIGISCAN IMAGE\",33)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"DIGISCAN IMAGE\",34)':{tag:'(0029,\"DIGISCAN IMAGE\",34)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(7001-o-70ff,\"DLX_ANNOT_01\",04)':{tag:'(7001-o-70ff,\"DLX_ANNOT_01\",04)',vr:\"ST\",name:\"TextAnnotation\",vm:\"1\",version:\"PrivateTag\"},'(7001-o-70ff,\"DLX_ANNOT_01\",05)':{tag:'(7001-o-70ff,\"DLX_ANNOT_01\",05)',vr:\"IS\",name:\"Box\",vm:\"2\",version:\"PrivateTag\"},'(7001-o-70ff,\"DLX_ANNOT_01\",07)':{tag:'(7001-o-70ff,\"DLX_ANNOT_01\",07)',vr:\"IS\",name:\"ArrowEnd\",vm:\"2\",version:\"PrivateTag\"},'(0015,\"DLX_EXAMS_01\",01)':{tag:'(0015,\"DLX_EXAMS_01\",01)',vr:\"DS\",name:\"StenosisCalibrationRatio\",vm:\"1\",version:\"PrivateTag\"},'(0015,\"DLX_EXAMS_01\",02)':{tag:'(0015,\"DLX_EXAMS_01\",02)',vr:\"DS\",name:\"StenosisMagnification\",vm:\"1\",version:\"PrivateTag\"},'(0015,\"DLX_EXAMS_01\",03)':{tag:'(0015,\"DLX_EXAMS_01\",03)',vr:\"DS\",name:\"CardiacCalibrationRatio\",vm:\"1\",version:\"PrivateTag\"},'(6001-o-60ff,\"DLX_LKUP_01\",01)':{tag:'(6001-o-60ff,\"DLX_LKUP_01\",01)',vr:\"US\",name:\"GrayPaletteColorLookupTableDescriptor\",vm:\"3\",version:\"PrivateTag\"},'(6001-o-60ff,\"DLX_LKUP_01\",02)':{tag:'(6001-o-60ff,\"DLX_LKUP_01\",02)',vr:\"US\",name:\"GrayPaletteColorLookupTableData\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"DLX_PATNT_01\",01)':{tag:'(0011,\"DLX_PATNT_01\",01)',vr:\"LT\",name:\"PatientDOB\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DLX_SERIE_01\",01)':{tag:'(0019,\"DLX_SERIE_01\",01)',vr:\"DS\",name:\"AngleValueLArm\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DLX_SERIE_01\",02)':{tag:'(0019,\"DLX_SERIE_01\",02)',vr:\"DS\",name:\"AngleValuePArm\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DLX_SERIE_01\",03)':{tag:'(0019,\"DLX_SERIE_01\",03)',vr:\"DS\",name:\"AngleValueCArm\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DLX_SERIE_01\",04)':{tag:'(0019,\"DLX_SERIE_01\",04)',vr:\"CS\",name:\"AngleLabelLArm\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DLX_SERIE_01\",05)':{tag:'(0019,\"DLX_SERIE_01\",05)',vr:\"CS\",name:\"AngleLabelPArm\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DLX_SERIE_01\",06)':{tag:'(0019,\"DLX_SERIE_01\",06)',vr:\"CS\",name:\"AngleLabelCArm\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DLX_SERIE_01\",07)':{tag:'(0019,\"DLX_SERIE_01\",07)',vr:\"ST\",name:\"ProcedureName\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DLX_SERIE_01\",08)':{tag:'(0019,\"DLX_SERIE_01\",08)',vr:\"ST\",name:\"ExamName\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DLX_SERIE_01\",09)':{tag:'(0019,\"DLX_SERIE_01\",09)',vr:\"SH\",name:\"PatientSize\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DLX_SERIE_01\",0a)':{tag:'(0019,\"DLX_SERIE_01\",0a)',vr:\"IS\",name:\"RecordView\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DLX_SERIE_01\",10)':{tag:'(0019,\"DLX_SERIE_01\",10)',vr:\"DS\",name:\"InjectorDelay\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DLX_SERIE_01\",11)':{tag:'(0019,\"DLX_SERIE_01\",11)',vr:\"CS\",name:\"AutoInject\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DLX_SERIE_01\",14)':{tag:'(0019,\"DLX_SERIE_01\",14)',vr:\"IS\",name:\"AcquisitionMode\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DLX_SERIE_01\",15)':{tag:'(0019,\"DLX_SERIE_01\",15)',vr:\"CS\",name:\"CameraRotationEnabled\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DLX_SERIE_01\",16)':{tag:'(0019,\"DLX_SERIE_01\",16)',vr:\"CS\",name:\"ReverseSweep\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DLX_SERIE_01\",17)':{tag:'(0019,\"DLX_SERIE_01\",17)',vr:\"IS\",name:\"SpatialFilterStrength\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DLX_SERIE_01\",18)':{tag:'(0019,\"DLX_SERIE_01\",18)',vr:\"IS\",name:\"ZoomFactor\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DLX_SERIE_01\",19)':{tag:'(0019,\"DLX_SERIE_01\",19)',vr:\"IS\",name:\"XZoomCenter\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DLX_SERIE_01\",1a)':{tag:'(0019,\"DLX_SERIE_01\",1a)',vr:\"IS\",name:\"YZoomCenter\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DLX_SERIE_01\",1b)':{tag:'(0019,\"DLX_SERIE_01\",1b)',vr:\"DS\",name:\"Focus\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DLX_SERIE_01\",1c)':{tag:'(0019,\"DLX_SERIE_01\",1c)',vr:\"CS\",name:\"Dose\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DLX_SERIE_01\",1d)':{tag:'(0019,\"DLX_SERIE_01\",1d)',vr:\"IS\",name:\"SideMark\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DLX_SERIE_01\",1e)':{tag:'(0019,\"DLX_SERIE_01\",1e)',vr:\"IS\",name:\"PercentageLandscape\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"DLX_SERIE_01\",1f)':{tag:'(0019,\"DLX_SERIE_01\",1f)',vr:\"DS\",name:\"ExposureDuration\",vm:\"1\",version:\"PrivateTag\"},'(00E1,\"ELSCINT1\",01)':{tag:'(00E1,\"ELSCINT1\",01)',vr:\"US\",name:\"DataDictionaryVersion\",vm:\"1\",version:\"PrivateTag\"},'(00E1,\"ELSCINT1\",14)':{tag:'(00E1,\"ELSCINT1\",14)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(00E1,\"ELSCINT1\",22)':{tag:'(00E1,\"ELSCINT1\",22)',vr:\"DS\",name:\"Unknown\",vm:\"2\",version:\"PrivateTag\"},'(00E1,\"ELSCINT1\",23)':{tag:'(00E1,\"ELSCINT1\",23)',vr:\"DS\",name:\"Unknown\",vm:\"2\",version:\"PrivateTag\"},'(00E1,\"ELSCINT1\",24)':{tag:'(00E1,\"ELSCINT1\",24)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(00E1,\"ELSCINT1\",25)':{tag:'(00E1,\"ELSCINT1\",25)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(00E1,\"ELSCINT1\",40)':{tag:'(00E1,\"ELSCINT1\",40)',vr:\"SH\",name:\"OffsetFromCTMRImages\",vm:\"1\",version:\"PrivateTag\"},'(0601,\"ELSCINT1\",00)':{tag:'(0601,\"ELSCINT1\",00)',vr:\"SH\",name:\"ImplementationVersion\",vm:\"1\",version:\"PrivateTag\"},'(0601,\"ELSCINT1\",20)':{tag:'(0601,\"ELSCINT1\",20)',vr:\"DS\",name:\"RelativeTablePosition\",vm:\"1\",version:\"PrivateTag\"},'(0601,\"ELSCINT1\",21)':{tag:'(0601,\"ELSCINT1\",21)',vr:\"DS\",name:\"RelativeTableHeight\",vm:\"1\",version:\"PrivateTag\"},'(0601,\"ELSCINT1\",30)':{tag:'(0601,\"ELSCINT1\",30)',vr:\"SH\",name:\"SurviewDirection\",vm:\"1\",version:\"PrivateTag\"},'(0601,\"ELSCINT1\",31)':{tag:'(0601,\"ELSCINT1\",31)',vr:\"DS\",name:\"SurviewLength\",vm:\"1\",version:\"PrivateTag\"},'(0601,\"ELSCINT1\",50)':{tag:'(0601,\"ELSCINT1\",50)',vr:\"SH\",name:\"ImageViewType\",vm:\"1\",version:\"PrivateTag\"},'(0601,\"ELSCINT1\",70)':{tag:'(0601,\"ELSCINT1\",70)',vr:\"DS\",name:\"BatchNumber\",vm:\"1\",version:\"PrivateTag\"},'(0601,\"ELSCINT1\",71)':{tag:'(0601,\"ELSCINT1\",71)',vr:\"DS\",name:\"BatchSize\",vm:\"1\",version:\"PrivateTag\"},'(0601,\"ELSCINT1\",72)':{tag:'(0601,\"ELSCINT1\",72)',vr:\"DS\",name:\"BatchSliceNumber\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"FDMS 1.0\",04)':{tag:'(0009,\"FDMS 1.0\",04)',vr:\"SH\",name:\"ImageControlUnit\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"FDMS 1.0\",05)':{tag:'(0009,\"FDMS 1.0\",05)',vr:\"OW\",name:\"ImageUID\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"FDMS 1.0\",06)':{tag:'(0009,\"FDMS 1.0\",06)',vr:\"OW\",name:\"RouteImageUID\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"FDMS 1.0\",08)':{tag:'(0009,\"FDMS 1.0\",08)',vr:\"UL\",name:\"ImageDisplayInformationVersionNo\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"FDMS 1.0\",09)':{tag:'(0009,\"FDMS 1.0\",09)',vr:\"UL\",name:\"PatientInformationVersionNo\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"FDMS 1.0\",0C)':{tag:'(0009,\"FDMS 1.0\",0C)',vr:\"OW\",name:\"FilmUID\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"FDMS 1.0\",10)':{tag:'(0009,\"FDMS 1.0\",10)',vr:\"CS\",name:\"ExposureUnitTypeCode\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"FDMS 1.0\",80)':{tag:'(0009,\"FDMS 1.0\",80)',vr:\"LO\",name:\"KanjiHospitalName\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"FDMS 1.0\",90)':{tag:'(0009,\"FDMS 1.0\",90)',vr:\"ST\",name:\"DistributionCode\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"FDMS 1.0\",92)':{tag:'(0009,\"FDMS 1.0\",92)',vr:\"SH\",name:\"KanjiDepartmentName\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"FDMS 1.0\",F0)':{tag:'(0009,\"FDMS 1.0\",F0)',vr:\"CS\",name:\"BlackeningProcessFlag\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"FDMS 1.0\",15)':{tag:'(0019,\"FDMS 1.0\",15)',vr:\"LO\",name:\"KanjiBodyPartForExposure\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"FDMS 1.0\",32)':{tag:'(0019,\"FDMS 1.0\",32)',vr:\"LO\",name:\"KanjiMenuName\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"FDMS 1.0\",40)':{tag:'(0019,\"FDMS 1.0\",40)',vr:\"CS\",name:\"ImageProcessingType\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"FDMS 1.0\",50)':{tag:'(0019,\"FDMS 1.0\",50)',vr:\"CS\",name:\"EDRMode\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"FDMS 1.0\",60)':{tag:'(0019,\"FDMS 1.0\",60)',vr:\"SH\",name:\"RadiographersCode\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"FDMS 1.0\",70)':{tag:'(0019,\"FDMS 1.0\",70)',vr:\"IS\",name:\"SplitExposureFormat\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"FDMS 1.0\",71)':{tag:'(0019,\"FDMS 1.0\",71)',vr:\"IS\",name:\"NoOfSplitExposureFrames\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"FDMS 1.0\",80)':{tag:'(0019,\"FDMS 1.0\",80)',vr:\"IS\",name:\"ReadingPositionSpecification\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"FDMS 1.0\",81)':{tag:'(0019,\"FDMS 1.0\",81)',vr:\"IS\",name:\"ReadingSensitivityCenter\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"FDMS 1.0\",90)':{tag:'(0019,\"FDMS 1.0\",90)',vr:\"SH\",name:\"FilmAnnotationCharacterString1\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"FDMS 1.0\",91)':{tag:'(0019,\"FDMS 1.0\",91)',vr:\"SH\",name:\"FilmAnnotationCharacterString2\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"FDMS 1.0\",10)':{tag:'(0021,\"FDMS 1.0\",10)',vr:\"CS\",name:\"FCRImageID\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"FDMS 1.0\",30)':{tag:'(0021,\"FDMS 1.0\",30)',vr:\"CS\",name:\"SetNo\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"FDMS 1.0\",40)':{tag:'(0021,\"FDMS 1.0\",40)',vr:\"IS\",name:\"ImageNoInTheSet\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"FDMS 1.0\",50)':{tag:'(0021,\"FDMS 1.0\",50)',vr:\"CS\",name:\"PairProcessingInformation\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"FDMS 1.0\",80)':{tag:'(0021,\"FDMS 1.0\",80)',vr:\"OB\",name:\"EquipmentTypeSpecificInformation\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"FDMS 1.0\",10)':{tag:'(0023,\"FDMS 1.0\",10)',vr:\"SQ\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"FDMS 1.0\",20)':{tag:'(0023,\"FDMS 1.0\",20)',vr:\"SQ\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"FDMS 1.0\",30)':{tag:'(0023,\"FDMS 1.0\",30)',vr:\"SQ\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",10)':{tag:'(0025,\"FDMS 1.0\",10)',vr:\"US\",name:\"RelativeLightEmissionAmountSk\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",11)':{tag:'(0025,\"FDMS 1.0\",11)',vr:\"US\",name:\"TermOfCorrectionForEachIPTypeSt\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",12)':{tag:'(0025,\"FDMS 1.0\",12)',vr:\"US\",name:\"ReadingGainGp\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",13)':{tag:'(0025,\"FDMS 1.0\",13)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",15)':{tag:'(0025,\"FDMS 1.0\",15)',vr:\"CS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",20)':{tag:'(0025,\"FDMS 1.0\",20)',vr:\"US\",name:\"Unknown\",vm:\"2\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",21)':{tag:'(0025,\"FDMS 1.0\",21)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",30)':{tag:'(0025,\"FDMS 1.0\",30)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",31)':{tag:'(0025,\"FDMS 1.0\",31)',vr:\"SS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",32)':{tag:'(0025,\"FDMS 1.0\",32)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",33)':{tag:'(0025,\"FDMS 1.0\",33)',vr:\"SS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",34)':{tag:'(0025,\"FDMS 1.0\",34)',vr:\"SS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",40)':{tag:'(0025,\"FDMS 1.0\",40)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",41)':{tag:'(0025,\"FDMS 1.0\",41)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",42)':{tag:'(0025,\"FDMS 1.0\",42)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",43)':{tag:'(0025,\"FDMS 1.0\",43)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",50)':{tag:'(0025,\"FDMS 1.0\",50)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",51)':{tag:'(0025,\"FDMS 1.0\",51)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",52)':{tag:'(0025,\"FDMS 1.0\",52)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",53)':{tag:'(0025,\"FDMS 1.0\",53)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",60)':{tag:'(0025,\"FDMS 1.0\",60)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",61)':{tag:'(0025,\"FDMS 1.0\",61)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",62)':{tag:'(0025,\"FDMS 1.0\",62)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",63)':{tag:'(0025,\"FDMS 1.0\",63)',vr:\"CS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",70)':{tag:'(0025,\"FDMS 1.0\",70)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",71)':{tag:'(0025,\"FDMS 1.0\",71)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",72)':{tag:'(0025,\"FDMS 1.0\",72)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",73)':{tag:'(0025,\"FDMS 1.0\",73)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",74)':{tag:'(0025,\"FDMS 1.0\",74)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",80)':{tag:'(0025,\"FDMS 1.0\",80)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",81)':{tag:'(0025,\"FDMS 1.0\",81)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",82)':{tag:'(0025,\"FDMS 1.0\",82)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",83)':{tag:'(0025,\"FDMS 1.0\",83)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",84)':{tag:'(0025,\"FDMS 1.0\",84)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",90)':{tag:'(0025,\"FDMS 1.0\",90)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",91)':{tag:'(0025,\"FDMS 1.0\",91)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",92)':{tag:'(0025,\"FDMS 1.0\",92)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",93)':{tag:'(0025,\"FDMS 1.0\",93)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",94)':{tag:'(0025,\"FDMS 1.0\",94)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",95)':{tag:'(0025,\"FDMS 1.0\",95)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",96)':{tag:'(0025,\"FDMS 1.0\",96)',vr:\"CS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",a0)':{tag:'(0025,\"FDMS 1.0\",a0)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",a1)':{tag:'(0025,\"FDMS 1.0\",a1)',vr:\"SS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",a2)':{tag:'(0025,\"FDMS 1.0\",a2)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"FDMS 1.0\",a3)':{tag:'(0025,\"FDMS 1.0\",a3)',vr:\"SS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"FDMS 1.0\",10)':{tag:'(0027,\"FDMS 1.0\",10)',vr:\"SQ\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"FDMS 1.0\",20)':{tag:'(0027,\"FDMS 1.0\",20)',vr:\"SQ\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"FDMS 1.0\",30)':{tag:'(0027,\"FDMS 1.0\",30)',vr:\"SQ\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"FDMS 1.0\",40)':{tag:'(0027,\"FDMS 1.0\",40)',vr:\"SQ\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"FDMS 1.0\",50)':{tag:'(0027,\"FDMS 1.0\",50)',vr:\"SQ\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"FDMS 1.0\",60)':{tag:'(0027,\"FDMS 1.0\",60)',vr:\"SQ\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"FDMS 1.0\",70)':{tag:'(0027,\"FDMS 1.0\",70)',vr:\"SQ\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"FDMS 1.0\",80)':{tag:'(0027,\"FDMS 1.0\",80)',vr:\"SQ\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"FDMS 1.0\",a0)':{tag:'(0027,\"FDMS 1.0\",a0)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"FDMS 1.0\",a1)':{tag:'(0027,\"FDMS 1.0\",a1)',vr:\"CS\",name:\"Unknown\",vm:\"2\",version:\"PrivateTag\"},'(0027,\"FDMS 1.0\",a2)':{tag:'(0027,\"FDMS 1.0\",a2)',vr:\"CS\",name:\"Unknown\",vm:\"2\",version:\"PrivateTag\"},'(0027,\"FDMS 1.0\",a3)':{tag:'(0027,\"FDMS 1.0\",a3)',vr:\"SS\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0029,\"FDMS 1.0\",20)':{tag:'(0029,\"FDMS 1.0\",20)',vr:\"CS\",name:\"ImageScanningDirection\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"FDMS 1.0\",30)':{tag:'(0029,\"FDMS 1.0\",30)',vr:\"CS\",name:\"ExtendedReadingSizeValue\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"FDMS 1.0\",34)':{tag:'(0029,\"FDMS 1.0\",34)',vr:\"US\",name:\"MagnificationReductionRatio\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"FDMS 1.0\",44)':{tag:'(0029,\"FDMS 1.0\",44)',vr:\"CS\",name:\"LineDensityCode\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"FDMS 1.0\",50)':{tag:'(0029,\"FDMS 1.0\",50)',vr:\"CS\",name:\"DataCompressionCode\",vm:\"1\",version:\"PrivateTag\"},'(2011,\"FDMS 1.0\",11)':{tag:'(2011,\"FDMS 1.0\",11)',vr:\"CS\",name:\"ImagePosition SpecifyingFlag\",vm:\"1\",version:\"PrivateTag\"},'(50F1,\"FDMS 1.0\",06)':{tag:'(50F1,\"FDMS 1.0\",06)',vr:\"CS\",name:\"EnergySubtractionParam\",vm:\"1\",version:\"PrivateTag\"},'(50F1,\"FDMS 1.0\",07)':{tag:'(50F1,\"FDMS 1.0\",07)',vr:\"CS\",name:\"SubtractionRegistrationResult\",vm:\"1\",version:\"PrivateTag\"},'(50F1,\"FDMS 1.0\",08)':{tag:'(50F1,\"FDMS 1.0\",08)',vr:\"CS\",name:\"EnergySubtractionParam2\",vm:\"1\",version:\"PrivateTag\"},'(50F1,\"FDMS 1.0\",09)':{tag:'(50F1,\"FDMS 1.0\",09)',vr:\"SL\",name:\"AfinConversionCoefficient\",vm:\"1\",version:\"PrivateTag\"},'(50F1,\"FDMS 1.0\",10)':{tag:'(50F1,\"FDMS 1.0\",10)',vr:\"CS\",name:\"FilmOutputFormat\",vm:\"1\",version:\"PrivateTag\"},'(50F1,\"FDMS 1.0\",20)':{tag:'(50F1,\"FDMS 1.0\",20)',vr:\"CS\",name:\"ImageProcessingModificationFlag\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"FFP DATA\",01)':{tag:'(0009,\"FFP DATA\",01)',vr:\"UN\",name:\"CRHeaderInformation\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GE ??? From Adantage Review CS\",30)':{tag:'(0019,\"GE ??? From Adantage Review CS\",30)',vr:\"LO\",name:\"CREDRMode\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GE ??? From Adantage Review CS\",40)':{tag:'(0019,\"GE ??? From Adantage Review CS\",40)',vr:\"LO\",name:\"CRLatitude\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GE ??? From Adantage Review CS\",50)':{tag:'(0019,\"GE ??? From Adantage Review CS\",50)',vr:\"LO\",name:\"CRGroupNumber\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GE ??? From Adantage Review CS\",70)':{tag:'(0019,\"GE ??? From Adantage Review CS\",70)',vr:\"LO\",name:\"CRImageSerialNumber\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GE ??? From Adantage Review CS\",80)':{tag:'(0019,\"GE ??? From Adantage Review CS\",80)',vr:\"LO\",name:\"CRBarCodeNumber\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GE ??? From Adantage Review CS\",90)':{tag:'(0019,\"GE ??? From Adantage Review CS\",90)',vr:\"LO\",name:\"CRFilmOutputExposures\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_ACQU_01\",24)':{tag:'(0009,\"GEMS_ACQU_01\",24)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_ACQU_01\",25)':{tag:'(0009,\"GEMS_ACQU_01\",25)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_ACQU_01\",3e)':{tag:'(0009,\"GEMS_ACQU_01\",3e)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_ACQU_01\",3f)':{tag:'(0009,\"GEMS_ACQU_01\",3f)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_ACQU_01\",42)':{tag:'(0009,\"GEMS_ACQU_01\",42)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_ACQU_01\",43)':{tag:'(0009,\"GEMS_ACQU_01\",43)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_ACQU_01\",f8)':{tag:'(0009,\"GEMS_ACQU_01\",f8)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_ACQU_01\",fb)':{tag:'(0009,\"GEMS_ACQU_01\",fb)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",01)':{tag:'(0019,\"GEMS_ACQU_01\",01)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",02)':{tag:'(0019,\"GEMS_ACQU_01\",02)',vr:\"SL\",name:\"NumberOfCellsInDetector\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",03)':{tag:'(0019,\"GEMS_ACQU_01\",03)',vr:\"DS\",name:\"CellNumberAtTheta\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",04)':{tag:'(0019,\"GEMS_ACQU_01\",04)',vr:\"DS\",name:\"CellSpacing\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",05)':{tag:'(0019,\"GEMS_ACQU_01\",05)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",06)':{tag:'(0019,\"GEMS_ACQU_01\",06)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",0e)':{tag:'(0019,\"GEMS_ACQU_01\",0e)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",0f)':{tag:'(0019,\"GEMS_ACQU_01\",0f)',vr:\"DS\",name:\"HorizontalFrameOfReference\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",11)':{tag:'(0019,\"GEMS_ACQU_01\",11)',vr:\"SS\",name:\"SeriesContrast\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",12)':{tag:'(0019,\"GEMS_ACQU_01\",12)',vr:\"SS\",name:\"LastPseq\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",13)':{tag:'(0019,\"GEMS_ACQU_01\",13)',vr:\"SS\",name:\"StartNumberForBaseline\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",14)':{tag:'(0019,\"GEMS_ACQU_01\",14)',vr:\"SS\",name:\"End NumberForBaseline\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",15)':{tag:'(0019,\"GEMS_ACQU_01\",15)',vr:\"SS\",name:\"StartNumberForEnhancedScans\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",16)':{tag:'(0019,\"GEMS_ACQU_01\",16)',vr:\"SS\",name:\"EndNumberForEnhancedScans\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",17)':{tag:'(0019,\"GEMS_ACQU_01\",17)',vr:\"SS\",name:\"SeriesPlane\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",18)':{tag:'(0019,\"GEMS_ACQU_01\",18)',vr:\"LO\",name:\"FirstScanRAS\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",19)':{tag:'(0019,\"GEMS_ACQU_01\",19)',vr:\"DS\",name:\"FirstScanLocation\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",1a)':{tag:'(0019,\"GEMS_ACQU_01\",1a)',vr:\"LO\",name:\"LastScanRAS\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",1b)':{tag:'(0019,\"GEMS_ACQU_01\",1b)',vr:\"DS\",name:\"LastScanLocation\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",1e)':{tag:'(0019,\"GEMS_ACQU_01\",1e)',vr:\"DS\",name:\"DisplayFieldOfView\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",20)':{tag:'(0019,\"GEMS_ACQU_01\",20)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",22)':{tag:'(0019,\"GEMS_ACQU_01\",22)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",23)':{tag:'(0019,\"GEMS_ACQU_01\",23)',vr:\"DS\",name:\"TableSpeed\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",24)':{tag:'(0019,\"GEMS_ACQU_01\",24)',vr:\"DS\",name:\"MidScanTime\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",25)':{tag:'(0019,\"GEMS_ACQU_01\",25)',vr:\"SS\",name:\"MidScanFlag\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",26)':{tag:'(0019,\"GEMS_ACQU_01\",26)',vr:\"SL\",name:\"DegreesOfAzimuth\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",27)':{tag:'(0019,\"GEMS_ACQU_01\",27)',vr:\"DS\",name:\"GantryPeriod\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",2a)':{tag:'(0019,\"GEMS_ACQU_01\",2a)',vr:\"DS\",name:\"XrayOnPosition\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",2b)':{tag:'(0019,\"GEMS_ACQU_01\",2b)',vr:\"DS\",name:\"XrayOffPosition\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",2c)':{tag:'(0019,\"GEMS_ACQU_01\",2c)',vr:\"SL\",name:\"NumberOfTriggers\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",2d)':{tag:'(0019,\"GEMS_ACQU_01\",2d)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",2e)':{tag:'(0019,\"GEMS_ACQU_01\",2e)',vr:\"DS\",name:\"AngleOfFirstView\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",2f)':{tag:'(0019,\"GEMS_ACQU_01\",2f)',vr:\"DS\",name:\"TriggerFrequency\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",39)':{tag:'(0019,\"GEMS_ACQU_01\",39)',vr:\"SS\",name:\"ScanFOVType\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",3a)':{tag:'(0019,\"GEMS_ACQU_01\",3a)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",3b)':{tag:'(0019,\"GEMS_ACQU_01\",3b)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",3c)':{tag:'(0019,\"GEMS_ACQU_01\",3c)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",3e)':{tag:'(0019,\"GEMS_ACQU_01\",3e)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",3f)':{tag:'(0019,\"GEMS_ACQU_01\",3f)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",40)':{tag:'(0019,\"GEMS_ACQU_01\",40)',vr:\"SS\",name:\"StatReconFlag\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",41)':{tag:'(0019,\"GEMS_ACQU_01\",41)',vr:\"SS\",name:\"ComputeType\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",42)':{tag:'(0019,\"GEMS_ACQU_01\",42)',vr:\"SS\",name:\"SegmentNumber\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",43)':{tag:'(0019,\"GEMS_ACQU_01\",43)',vr:\"SS\",name:\"TotalSegmentsRequested\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",44)':{tag:'(0019,\"GEMS_ACQU_01\",44)',vr:\"DS\",name:\"InterscanDelay\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",47)':{tag:'(0019,\"GEMS_ACQU_01\",47)',vr:\"SS\",name:\"ViewCompressionFactor\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",48)':{tag:'(0019,\"GEMS_ACQU_01\",48)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",49)':{tag:'(0019,\"GEMS_ACQU_01\",49)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",4a)':{tag:'(0019,\"GEMS_ACQU_01\",4a)',vr:\"SS\",name:\"TotalNumberOfRefChannels\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",4b)':{tag:'(0019,\"GEMS_ACQU_01\",4b)',vr:\"SL\",name:\"DataSizeForScanData\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",52)':{tag:'(0019,\"GEMS_ACQU_01\",52)',vr:\"SS\",name:\"ReconPostProcessingFlag\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",54)':{tag:'(0019,\"GEMS_ACQU_01\",54)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",57)':{tag:'(0019,\"GEMS_ACQU_01\",57)',vr:\"SS\",name:\"CTWaterNumber\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",58)':{tag:'(0019,\"GEMS_ACQU_01\",58)',vr:\"SS\",name:\"CTBoneNumber\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",5a)':{tag:'(0019,\"GEMS_ACQU_01\",5a)',vr:\"FL\",name:\"AcquisitionDuration\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",5d)':{tag:'(0019,\"GEMS_ACQU_01\",5d)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",5e)':{tag:'(0019,\"GEMS_ACQU_01\",5e)',vr:\"SL\",name:\"NumberOfChannels1To512\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",5f)':{tag:'(0019,\"GEMS_ACQU_01\",5f)',vr:\"SL\",name:\"IncrementBetweenChannels\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",60)':{tag:'(0019,\"GEMS_ACQU_01\",60)',vr:\"SL\",name:\"StartingView\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",61)':{tag:'(0019,\"GEMS_ACQU_01\",61)',vr:\"SL\",name:\"NumberOfViews\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",62)':{tag:'(0019,\"GEMS_ACQU_01\",62)',vr:\"SL\",name:\"IncrementBetweenViews\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",6a)':{tag:'(0019,\"GEMS_ACQU_01\",6a)',vr:\"SS\",name:\"DependantOnNumberOfViewsProcessed\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",6b)':{tag:'(0019,\"GEMS_ACQU_01\",6b)',vr:\"SS\",name:\"FieldOfViewInDetectorCells\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",70)':{tag:'(0019,\"GEMS_ACQU_01\",70)',vr:\"SS\",name:\"ValueOfBackProjectionButton\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",71)':{tag:'(0019,\"GEMS_ACQU_01\",71)',vr:\"SS\",name:\"SetIfFatqEstimatesWereUsed\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",72)':{tag:'(0019,\"GEMS_ACQU_01\",72)',vr:\"DS\",name:\"ZChannelAvgOverViews\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",73)':{tag:'(0019,\"GEMS_ACQU_01\",73)',vr:\"DS\",name:\"AvgOfLeftRefChannelsOverViews\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",74)':{tag:'(0019,\"GEMS_ACQU_01\",74)',vr:\"DS\",name:\"MaxLeftChannelOverViews\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",75)':{tag:'(0019,\"GEMS_ACQU_01\",75)',vr:\"DS\",name:\"AvgOfRightRefChannelsOverViews\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",76)':{tag:'(0019,\"GEMS_ACQU_01\",76)',vr:\"DS\",name:\"MaxRightChannelOverViews\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",7d)':{tag:'(0019,\"GEMS_ACQU_01\",7d)',vr:\"DS\",name:\"SecondEcho\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",7e)':{tag:'(0019,\"GEMS_ACQU_01\",7e)',vr:\"SS\",name:\"NumberOfEchos\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",7f)':{tag:'(0019,\"GEMS_ACQU_01\",7f)',vr:\"DS\",name:\"TableDelta\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",81)':{tag:'(0019,\"GEMS_ACQU_01\",81)',vr:\"SS\",name:\"Contiguous\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",82)':{tag:'(0019,\"GEMS_ACQU_01\",82)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",83)':{tag:'(0019,\"GEMS_ACQU_01\",83)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",84)':{tag:'(0019,\"GEMS_ACQU_01\",84)',vr:\"DS\",name:\"PeakSAR\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",85)':{tag:'(0019,\"GEMS_ACQU_01\",85)',vr:\"SS\",name:\"MonitorSAR\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",86)':{tag:'(0019,\"GEMS_ACQU_01\",86)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",87)':{tag:'(0019,\"GEMS_ACQU_01\",87)',vr:\"DS\",name:\"CardiacRepetition Time\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",88)':{tag:'(0019,\"GEMS_ACQU_01\",88)',vr:\"SS\",name:\"ImagesPerCardiacCycle\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",8a)':{tag:'(0019,\"GEMS_ACQU_01\",8a)',vr:\"SS\",name:\"ActualReceiveGainAnalog\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",8b)':{tag:'(0019,\"GEMS_ACQU_01\",8b)',vr:\"SS\",name:\"ActualReceiveGainDigital\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",8d)':{tag:'(0019,\"GEMS_ACQU_01\",8d)',vr:\"DS\",name:\"DelayAfterTrigger\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",8f)':{tag:'(0019,\"GEMS_ACQU_01\",8f)',vr:\"SS\",name:\"SwapPhaseFrequency\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",90)':{tag:'(0019,\"GEMS_ACQU_01\",90)',vr:\"SS\",name:\"PauseInterval\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",91)':{tag:'(0019,\"GEMS_ACQU_01\",91)',vr:\"DS\",name:\"PulseTime\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",92)':{tag:'(0019,\"GEMS_ACQU_01\",92)',vr:\"SL\",name:\"SliceOffsetOnFrequencyAxis\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",93)':{tag:'(0019,\"GEMS_ACQU_01\",93)',vr:\"DS\",name:\"CenterFrequency\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",94)':{tag:'(0019,\"GEMS_ACQU_01\",94)',vr:\"SS\",name:\"TransmitGain\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",95)':{tag:'(0019,\"GEMS_ACQU_01\",95)',vr:\"SS\",name:\"AnalogReceiverGain\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",96)':{tag:'(0019,\"GEMS_ACQU_01\",96)',vr:\"SS\",name:\"DigitalReceiverGain\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",97)':{tag:'(0019,\"GEMS_ACQU_01\",97)',vr:\"SL\",name:\"BitmapDefiningCVs\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",98)':{tag:'(0019,\"GEMS_ACQU_01\",98)',vr:\"SS\",name:\"CenterFrequencyMethod\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",99)':{tag:'(0019,\"GEMS_ACQU_01\",99)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",9b)':{tag:'(0019,\"GEMS_ACQU_01\",9b)',vr:\"SS\",name:\"PulseSequenceMode\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",9c)':{tag:'(0019,\"GEMS_ACQU_01\",9c)',vr:\"LO\",name:\"PulseSequenceName\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",9d)':{tag:'(0019,\"GEMS_ACQU_01\",9d)',vr:\"DT\",name:\"PulseSequenceDate\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",9e)':{tag:'(0019,\"GEMS_ACQU_01\",9e)',vr:\"LO\",name:\"InternalPulseSequenceName\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",9f)':{tag:'(0019,\"GEMS_ACQU_01\",9f)',vr:\"SS\",name:\"TransmittingCoil\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",a0)':{tag:'(0019,\"GEMS_ACQU_01\",a0)',vr:\"SS\",name:\"SurfaceCoilType\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",a1)':{tag:'(0019,\"GEMS_ACQU_01\",a1)',vr:\"SS\",name:\"ExtremityCoilFlag\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",a2)':{tag:'(0019,\"GEMS_ACQU_01\",a2)',vr:\"SL\",name:\"RawDataRunNumber\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",a3)':{tag:'(0019,\"GEMS_ACQU_01\",a3)',vr:\"UL\",name:\"CalibratedFieldStrength\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",a4)':{tag:'(0019,\"GEMS_ACQU_01\",a4)',vr:\"SS\",name:\"SATFatWaterBone\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",a5)':{tag:'(0019,\"GEMS_ACQU_01\",a5)',vr:\"DS\",name:\"ReceiveBandwidth\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",a7)':{tag:'(0019,\"GEMS_ACQU_01\",a7)',vr:\"DS\",name:\"UserData\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",a8)':{tag:'(0019,\"GEMS_ACQU_01\",a8)',vr:\"DS\",name:\"UserData\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",a9)':{tag:'(0019,\"GEMS_ACQU_01\",a9)',vr:\"DS\",name:\"UserData\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",aa)':{tag:'(0019,\"GEMS_ACQU_01\",aa)',vr:\"DS\",name:\"UserData\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",ab)':{tag:'(0019,\"GEMS_ACQU_01\",ab)',vr:\"DS\",name:\"UserData\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",ac)':{tag:'(0019,\"GEMS_ACQU_01\",ac)',vr:\"DS\",name:\"UserData\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",ad)':{tag:'(0019,\"GEMS_ACQU_01\",ad)',vr:\"DS\",name:\"UserData\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",ae)':{tag:'(0019,\"GEMS_ACQU_01\",ae)',vr:\"DS\",name:\"UserData\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",af)':{tag:'(0019,\"GEMS_ACQU_01\",af)',vr:\"DS\",name:\"UserData\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",b0)':{tag:'(0019,\"GEMS_ACQU_01\",b0)',vr:\"DS\",name:\"UserData\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",b1)':{tag:'(0019,\"GEMS_ACQU_01\",b1)',vr:\"DS\",name:\"UserData\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",b2)':{tag:'(0019,\"GEMS_ACQU_01\",b2)',vr:\"DS\",name:\"UserData\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",b3)':{tag:'(0019,\"GEMS_ACQU_01\",b3)',vr:\"DS\",name:\"UserData\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",b4)':{tag:'(0019,\"GEMS_ACQU_01\",b4)',vr:\"DS\",name:\"UserData\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",b5)':{tag:'(0019,\"GEMS_ACQU_01\",b5)',vr:\"DS\",name:\"UserData\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",b6)':{tag:'(0019,\"GEMS_ACQU_01\",b6)',vr:\"DS\",name:\"UserData\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",b7)':{tag:'(0019,\"GEMS_ACQU_01\",b7)',vr:\"DS\",name:\"UserData\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",b8)':{tag:'(0019,\"GEMS_ACQU_01\",b8)',vr:\"DS\",name:\"UserData\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",b9)':{tag:'(0019,\"GEMS_ACQU_01\",b9)',vr:\"DS\",name:\"UserData\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",ba)':{tag:'(0019,\"GEMS_ACQU_01\",ba)',vr:\"DS\",name:\"UserData\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",bb)':{tag:'(0019,\"GEMS_ACQU_01\",bb)',vr:\"DS\",name:\"UserData\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",bc)':{tag:'(0019,\"GEMS_ACQU_01\",bc)',vr:\"DS\",name:\"UserData\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",bd)':{tag:'(0019,\"GEMS_ACQU_01\",bd)',vr:\"DS\",name:\"UserData\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",be)':{tag:'(0019,\"GEMS_ACQU_01\",be)',vr:\"DS\",name:\"ProjectionAngle\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",c0)':{tag:'(0019,\"GEMS_ACQU_01\",c0)',vr:\"SS\",name:\"SaturationPlanes\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",c1)':{tag:'(0019,\"GEMS_ACQU_01\",c1)',vr:\"SS\",name:\"SurfaceCoilIntensityCorrectionFlag\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",c2)':{tag:'(0019,\"GEMS_ACQU_01\",c2)',vr:\"SS\",name:\"SATLocationR\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",c3)':{tag:'(0019,\"GEMS_ACQU_01\",c3)',vr:\"SS\",name:\"SATLocationL\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",c4)':{tag:'(0019,\"GEMS_ACQU_01\",c4)',vr:\"SS\",name:\"SATLocationA\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",c5)':{tag:'(0019,\"GEMS_ACQU_01\",c5)',vr:\"SS\",name:\"SATLocationP\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",c6)':{tag:'(0019,\"GEMS_ACQU_01\",c6)',vr:\"SS\",name:\"SATLocationH\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",c7)':{tag:'(0019,\"GEMS_ACQU_01\",c7)',vr:\"SS\",name:\"SATLocationF\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",c8)':{tag:'(0019,\"GEMS_ACQU_01\",c8)',vr:\"SS\",name:\"SATThicknessRL\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",c9)':{tag:'(0019,\"GEMS_ACQU_01\",c9)',vr:\"SS\",name:\"SATThicknessAP\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",ca)':{tag:'(0019,\"GEMS_ACQU_01\",ca)',vr:\"SS\",name:\"SATThicknessHF\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",cb)':{tag:'(0019,\"GEMS_ACQU_01\",cb)',vr:\"SS\",name:\"PrescribedFlowAxis\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",cc)':{tag:'(0019,\"GEMS_ACQU_01\",cc)',vr:\"SS\",name:\"VelocityEncoding\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",cd)':{tag:'(0019,\"GEMS_ACQU_01\",cd)',vr:\"SS\",name:\"ThicknessDisclaimer\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",ce)':{tag:'(0019,\"GEMS_ACQU_01\",ce)',vr:\"SS\",name:\"PrescanType\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",cf)':{tag:'(0019,\"GEMS_ACQU_01\",cf)',vr:\"SS\",name:\"PrescanStatus\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",d0)':{tag:'(0019,\"GEMS_ACQU_01\",d0)',vr:\"SH\",name:\"RawDataType\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",d2)':{tag:'(0019,\"GEMS_ACQU_01\",d2)',vr:\"SS\",name:\"ProjectionAlgorithm\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",d3)':{tag:'(0019,\"GEMS_ACQU_01\",d3)',vr:\"SH\",name:\"ProjectionAlgorithm\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",d4)':{tag:'(0019,\"GEMS_ACQU_01\",d4)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",d5)':{tag:'(0019,\"GEMS_ACQU_01\",d5)',vr:\"SS\",name:\"FractionalEcho\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",d6)':{tag:'(0019,\"GEMS_ACQU_01\",d6)',vr:\"SS\",name:\"PrepPulse\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",d7)':{tag:'(0019,\"GEMS_ACQU_01\",d7)',vr:\"SS\",name:\"CardiacPhases\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",d8)':{tag:'(0019,\"GEMS_ACQU_01\",d8)',vr:\"SS\",name:\"VariableEchoFlag\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",d9)':{tag:'(0019,\"GEMS_ACQU_01\",d9)',vr:\"DS\",name:\"ConcatenatedSAT\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",da)':{tag:'(0019,\"GEMS_ACQU_01\",da)',vr:\"SS\",name:\"ReferenceChannelUsed\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",db)':{tag:'(0019,\"GEMS_ACQU_01\",db)',vr:\"DS\",name:\"BackProjectorCoefficient\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",dc)':{tag:'(0019,\"GEMS_ACQU_01\",dc)',vr:\"SS\",name:\"PrimarySpeedCorrectionUsed\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",dd)':{tag:'(0019,\"GEMS_ACQU_01\",dd)',vr:\"SS\",name:\"OverrangeCorrectionUsed\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",de)':{tag:'(0019,\"GEMS_ACQU_01\",de)',vr:\"DS\",name:\"DynamicZAlphaValue\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",df)':{tag:'(0019,\"GEMS_ACQU_01\",df)',vr:\"DS\",name:\"UserData\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",e0)':{tag:'(0019,\"GEMS_ACQU_01\",e0)',vr:\"DS\",name:\"UserData\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",e1)':{tag:'(0019,\"GEMS_ACQU_01\",e1)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",e2)':{tag:'(0019,\"GEMS_ACQU_01\",e2)',vr:\"DS\",name:\"VelocityEncodeScale\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",e3)':{tag:'(0019,\"GEMS_ACQU_01\",e3)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",e4)':{tag:'(0019,\"GEMS_ACQU_01\",e4)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",e5)':{tag:'(0019,\"GEMS_ACQU_01\",e5)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",e6)':{tag:'(0019,\"GEMS_ACQU_01\",e6)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",e8)':{tag:'(0019,\"GEMS_ACQU_01\",e8)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",e9)':{tag:'(0019,\"GEMS_ACQU_01\",e9)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",eb)':{tag:'(0019,\"GEMS_ACQU_01\",eb)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",ec)':{tag:'(0019,\"GEMS_ACQU_01\",ec)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",f0)':{tag:'(0019,\"GEMS_ACQU_01\",f0)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",f1)':{tag:'(0019,\"GEMS_ACQU_01\",f1)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",f2)':{tag:'(0019,\"GEMS_ACQU_01\",f2)',vr:\"SS\",name:\"FastPhases\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",f3)':{tag:'(0019,\"GEMS_ACQU_01\",f3)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",f4)':{tag:'(0019,\"GEMS_ACQU_01\",f4)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GEMS_ACQU_01\",f9)':{tag:'(0019,\"GEMS_ACQU_01\",f9)',vr:\"DS\",name:\"TransmitGain\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_1.0 BLOCK1\",00)':{tag:'(0023,\"GEMS_ACRQA_1.0 BLOCK1\",00)',vr:\"LO\",name:\"CRExposureMenuCode\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_1.0 BLOCK1\",10)':{tag:'(0023,\"GEMS_ACRQA_1.0 BLOCK1\",10)',vr:\"LO\",name:\"CRExposureMenuString\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_1.0 BLOCK1\",20)':{tag:'(0023,\"GEMS_ACRQA_1.0 BLOCK1\",20)',vr:\"LO\",name:\"CREDRMode\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_1.0 BLOCK1\",30)':{tag:'(0023,\"GEMS_ACRQA_1.0 BLOCK1\",30)',vr:\"LO\",name:\"CRLatitude\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_1.0 BLOCK1\",40)':{tag:'(0023,\"GEMS_ACRQA_1.0 BLOCK1\",40)',vr:\"LO\",name:\"CRGroupNumber\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_1.0 BLOCK1\",50)':{tag:'(0023,\"GEMS_ACRQA_1.0 BLOCK1\",50)',vr:\"US\",name:\"CRImageSerialNumber\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_1.0 BLOCK1\",60)':{tag:'(0023,\"GEMS_ACRQA_1.0 BLOCK1\",60)',vr:\"LO\",name:\"CRBarCodeNumber\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_1.0 BLOCK1\",70)':{tag:'(0023,\"GEMS_ACRQA_1.0 BLOCK1\",70)',vr:\"LO\",name:\"CRFilmOutputExposure\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_1.0 BLOCK1\",80)':{tag:'(0023,\"GEMS_ACRQA_1.0 BLOCK1\",80)',vr:\"LO\",name:\"CRFilmFormat\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_1.0 BLOCK1\",90)':{tag:'(0023,\"GEMS_ACRQA_1.0 BLOCK1\",90)',vr:\"LO\",name:\"CRSShiftString\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_1.0 BLOCK2\",00)':{tag:'(0023,\"GEMS_ACRQA_1.0 BLOCK2\",00)',vr:\"US\",name:\"CRSShift\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_1.0 BLOCK2\",10)':{tag:'(0023,\"GEMS_ACRQA_1.0 BLOCK2\",10)',vr:\"DS\",name:\"CRCShift\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_1.0 BLOCK2\",20)':{tag:'(0023,\"GEMS_ACRQA_1.0 BLOCK2\",20)',vr:\"DS\",name:\"CRGT\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_1.0 BLOCK2\",30)':{tag:'(0023,\"GEMS_ACRQA_1.0 BLOCK2\",30)',vr:\"DS\",name:\"CRGA\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_1.0 BLOCK2\",40)':{tag:'(0023,\"GEMS_ACRQA_1.0 BLOCK2\",40)',vr:\"DS\",name:\"CRGC\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_1.0 BLOCK2\",50)':{tag:'(0023,\"GEMS_ACRQA_1.0 BLOCK2\",50)',vr:\"DS\",name:\"CRGS\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_1.0 BLOCK2\",60)':{tag:'(0023,\"GEMS_ACRQA_1.0 BLOCK2\",60)',vr:\"DS\",name:\"CRRT\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_1.0 BLOCK2\",70)':{tag:'(0023,\"GEMS_ACRQA_1.0 BLOCK2\",70)',vr:\"DS\",name:\"CRRE\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_1.0 BLOCK2\",80)':{tag:'(0023,\"GEMS_ACRQA_1.0 BLOCK2\",80)',vr:\"US\",name:\"CRRN\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_1.0 BLOCK2\",90)':{tag:'(0023,\"GEMS_ACRQA_1.0 BLOCK2\",90)',vr:\"DS\",name:\"CRDRT\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_1.0 BLOCK3\",00)':{tag:'(0023,\"GEMS_ACRQA_1.0 BLOCK3\",00)',vr:\"DS\",name:\"CRDRE\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_1.0 BLOCK3\",10)':{tag:'(0023,\"GEMS_ACRQA_1.0 BLOCK3\",10)',vr:\"US\",name:\"CRDRN\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_1.0 BLOCK3\",20)':{tag:'(0023,\"GEMS_ACRQA_1.0 BLOCK3\",20)',vr:\"DS\",name:\"CRORE\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_1.0 BLOCK3\",30)':{tag:'(0023,\"GEMS_ACRQA_1.0 BLOCK3\",30)',vr:\"US\",name:\"CRORN\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_1.0 BLOCK3\",40)':{tag:'(0023,\"GEMS_ACRQA_1.0 BLOCK3\",40)',vr:\"US\",name:\"CRORD\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_1.0 BLOCK3\",50)':{tag:'(0023,\"GEMS_ACRQA_1.0 BLOCK3\",50)',vr:\"LO\",name:\"CRCassetteSize\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_1.0 BLOCK3\",60)':{tag:'(0023,\"GEMS_ACRQA_1.0 BLOCK3\",60)',vr:\"LO\",name:\"CRMachineID\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_1.0 BLOCK3\",70)':{tag:'(0023,\"GEMS_ACRQA_1.0 BLOCK3\",70)',vr:\"LO\",name:\"CRMachineType\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_1.0 BLOCK3\",80)':{tag:'(0023,\"GEMS_ACRQA_1.0 BLOCK3\",80)',vr:\"LO\",name:\"CRTechnicianCode\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_1.0 BLOCK3\",90)':{tag:'(0023,\"GEMS_ACRQA_1.0 BLOCK3\",90)',vr:\"LO\",name:\"CREnergySubtractionParameters\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_2.0 BLOCK1\",00)':{tag:'(0023,\"GEMS_ACRQA_2.0 BLOCK1\",00)',vr:\"LO\",name:\"CRExposureMenuCode\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_2.0 BLOCK1\",10)':{tag:'(0023,\"GEMS_ACRQA_2.0 BLOCK1\",10)',vr:\"LO\",name:\"CRExposureMenuString\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_2.0 BLOCK1\",20)':{tag:'(0023,\"GEMS_ACRQA_2.0 BLOCK1\",20)',vr:\"LO\",name:\"CREDRMode\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_2.0 BLOCK1\",30)':{tag:'(0023,\"GEMS_ACRQA_2.0 BLOCK1\",30)',vr:\"LO\",name:\"CRLatitude\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_2.0 BLOCK1\",40)':{tag:'(0023,\"GEMS_ACRQA_2.0 BLOCK1\",40)',vr:\"LO\",name:\"CRGroupNumber\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_2.0 BLOCK1\",50)':{tag:'(0023,\"GEMS_ACRQA_2.0 BLOCK1\",50)',vr:\"US\",name:\"CRImageSerialNumber\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_2.0 BLOCK1\",60)':{tag:'(0023,\"GEMS_ACRQA_2.0 BLOCK1\",60)',vr:\"LO\",name:\"CRBarCodeNumber\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_2.0 BLOCK1\",70)':{tag:'(0023,\"GEMS_ACRQA_2.0 BLOCK1\",70)',vr:\"LO\",name:\"CRFilmOutputExposure\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_2.0 BLOCK1\",80)':{tag:'(0023,\"GEMS_ACRQA_2.0 BLOCK1\",80)',vr:\"LO\",name:\"CRFilmFormat\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_2.0 BLOCK1\",90)':{tag:'(0023,\"GEMS_ACRQA_2.0 BLOCK1\",90)',vr:\"LO\",name:\"CRSShiftString\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_2.0 BLOCK2\",00)':{tag:'(0023,\"GEMS_ACRQA_2.0 BLOCK2\",00)',vr:\"US\",name:\"CRSShift\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_2.0 BLOCK2\",10)':{tag:'(0023,\"GEMS_ACRQA_2.0 BLOCK2\",10)',vr:\"LO\",name:\"CRCShift\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_2.0 BLOCK2\",20)':{tag:'(0023,\"GEMS_ACRQA_2.0 BLOCK2\",20)',vr:\"LO\",name:\"CRGT\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_2.0 BLOCK2\",30)':{tag:'(0023,\"GEMS_ACRQA_2.0 BLOCK2\",30)',vr:\"DS\",name:\"CRGA\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_2.0 BLOCK2\",40)':{tag:'(0023,\"GEMS_ACRQA_2.0 BLOCK2\",40)',vr:\"DS\",name:\"CRGC\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_2.0 BLOCK2\",50)':{tag:'(0023,\"GEMS_ACRQA_2.0 BLOCK2\",50)',vr:\"DS\",name:\"CRGS\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_2.0 BLOCK2\",60)':{tag:'(0023,\"GEMS_ACRQA_2.0 BLOCK2\",60)',vr:\"LO\",name:\"CRRT\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_2.0 BLOCK2\",70)':{tag:'(0023,\"GEMS_ACRQA_2.0 BLOCK2\",70)',vr:\"DS\",name:\"CRRE\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_2.0 BLOCK2\",80)':{tag:'(0023,\"GEMS_ACRQA_2.0 BLOCK2\",80)',vr:\"US\",name:\"CRRN\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_2.0 BLOCK2\",90)':{tag:'(0023,\"GEMS_ACRQA_2.0 BLOCK2\",90)',vr:\"DS\",name:\"CRDRT\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_2.0 BLOCK3\",00)':{tag:'(0023,\"GEMS_ACRQA_2.0 BLOCK3\",00)',vr:\"DS\",name:\"CRDRE\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_2.0 BLOCK3\",10)':{tag:'(0023,\"GEMS_ACRQA_2.0 BLOCK3\",10)',vr:\"US\",name:\"CRDRN\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_2.0 BLOCK3\",20)':{tag:'(0023,\"GEMS_ACRQA_2.0 BLOCK3\",20)',vr:\"DS\",name:\"CRORE\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_2.0 BLOCK3\",30)':{tag:'(0023,\"GEMS_ACRQA_2.0 BLOCK3\",30)',vr:\"US\",name:\"CRORN\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_2.0 BLOCK3\",40)':{tag:'(0023,\"GEMS_ACRQA_2.0 BLOCK3\",40)',vr:\"US\",name:\"CRORD\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_2.0 BLOCK3\",50)':{tag:'(0023,\"GEMS_ACRQA_2.0 BLOCK3\",50)',vr:\"LO\",name:\"CRCassetteSize\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_2.0 BLOCK3\",60)':{tag:'(0023,\"GEMS_ACRQA_2.0 BLOCK3\",60)',vr:\"LO\",name:\"CRMachineID\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_2.0 BLOCK3\",70)':{tag:'(0023,\"GEMS_ACRQA_2.0 BLOCK3\",70)',vr:\"LO\",name:\"CRMachineType\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_2.0 BLOCK3\",80)':{tag:'(0023,\"GEMS_ACRQA_2.0 BLOCK3\",80)',vr:\"LO\",name:\"CRTechnicianCode\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_2.0 BLOCK3\",90)':{tag:'(0023,\"GEMS_ACRQA_2.0 BLOCK3\",90)',vr:\"LO\",name:\"CREnergySubtractionParameters\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_2.0 BLOCK3\",f0)':{tag:'(0023,\"GEMS_ACRQA_2.0 BLOCK3\",f0)',vr:\"LO\",name:\"CRDistributionCode\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_ACRQA_2.0 BLOCK3\",ff)':{tag:'(0023,\"GEMS_ACRQA_2.0 BLOCK3\",ff)',vr:\"US\",name:\"CRShuttersApplied\",vm:\"1\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",01)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",01)',vr:\"SQ\",name:\"Reconstruction Parameters Sequence\",vm:\"1\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",50)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",50)',vr:\"UL\",name:\"VolumeVoxelCount\",vm:\"1\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",51)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",51)',vr:\"UL\",name:\"VolumeSegmentCount\",vm:\"1\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",53)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",53)',vr:\"US\",name:\"VolumeSliceSize\",vm:\"1\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",54)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",54)',vr:\"US\",name:\"VolumeSliceCount\",vm:\"1\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",55)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",55)',vr:\"SL\",name:\"VolumeThresholdValue\",vm:\"1\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",57)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",57)',vr:\"DS\",name:\"VolumeVoxelRatio\",vm:\"1\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",58)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",58)',vr:\"DS\",name:\"VolumeVoxelSize\",vm:\"1\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",59)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",59)',vr:\"US\",name:\"VolumeZPositionSize\",vm:\"1\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",60)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",60)',vr:\"DS\",name:\"VolumeBaseLine\",vm:\"9\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",61)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",61)',vr:\"DS\",name:\"VolumeCenterPoint\",vm:\"3\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",63)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",63)',vr:\"SL\",name:\"VolumeSkewBase\",vm:\"1\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",64)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",64)',vr:\"DS\",name:\"VolumeRegistrationTransformRotationMatrix\",vm:\"9\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",65)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",65)',vr:\"DS\",name:\"VolumeRegistrationTransformTranslationVector\",vm:\"3\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",70)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",70)',vr:\"DS\",name:\"KVPList\",vm:\"1-n\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",71)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",71)',vr:\"IS\",name:\"XRayTubeCurrentList\",vm:\"1-n\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",72)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",72)',vr:\"IS\",name:\"ExposureList\",vm:\"1-n\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",80)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",80)',vr:\"LO\",name:\"AcquisitionDLXIdentifier\",vm:\"1\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",85)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",85)',vr:\"SQ\",name:\"AcquisitionDLX2DSeriesSequence\",vm:\"1\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",89)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",89)',vr:\"DS\",name:\"ContrastAgentVolumeList\",vm:\"1-n\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",8A)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",8A)',vr:\"US\",name:\"NumberOfInjections\",vm:\"1\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",8B)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",8B)',vr:\"US\",name:\"FrameCount\",vm:\"1\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",91)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",91)',vr:\"LO\",name:\"XA3DReconstructionAlgorithmName\",vm:\"1\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",92)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",92)',vr:\"CS\",name:\"XA3DReconstructionAlgorithmVersion\",vm:\"1\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",93)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",93)',vr:\"DA\",name:\"DLXCalibrationDate\",vm:\"1\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",94)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",94)',vr:\"TM\",name:\"DLXCalibrationTime\",vm:\"1\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",95)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",95)',vr:\"CS\",name:\"DLXCalibrationStatus\",vm:\"1\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",96)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",96)',vr:\"IS\",name:\"UsedFrames\",vm:\"1-n\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",98)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",98)',vr:\"US\",name:\"TransformCount\",vm:\"1\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",99)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",99)',vr:\"SQ\",name:\"TransformSequence\",vm:\"1\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",9A)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",9A)',vr:\"DS\",name:\"TransformRotationMatrix\",vm:\"9\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",9B)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",9B)',vr:\"DS\",name:\"TransformTranslationVector\",vm:\"3\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",9C)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",9C)',vr:\"LO\",name:\"TransformLabel\",vm:\"1\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",B0)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",B0)',vr:\"SQ\",name:\"WireframeList\",vm:\"1\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",B1)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",B1)',vr:\"US\",name:\"WireframeCount\",vm:\"1\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",B2)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",B2)',vr:\"US\",name:\"LocationSystem\",vm:\"1\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",B5)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",B5)',vr:\"LO\",name:\"WireframeName\",vm:\"1\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",B6)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",B6)',vr:\"LO\",name:\"WireframeGroupName\",vm:\"1\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",B7)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",B7)',vr:\"LO\",name:\"WireframeColor\",vm:\"1\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",B8)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",B8)',vr:\"SL\",name:\"WireframeAttributes\",vm:\"1\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",B9)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",B9)',vr:\"SL\",name:\"WireframePointCount\",vm:\"1\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",BA)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",BA)',vr:\"SL\",name:\"WireframeTimestamp\",vm:\"1\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",BB)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",BB)',vr:\"SQ\",name:\"WireframePointList\",vm:\"1\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",BC)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",BC)',vr:\"DS\",name:\"WireframePointsCoordinates\",vm:\"3\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",C0)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",C0)',vr:\"DS\",name:\"VolumeUpperLeftHighCornerRAS\",vm:\"3\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",C1)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",C1)',vr:\"DS\",name:\"VolumeSliceToRASRotationMatrix\",vm:\"9\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",C2)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",C2)',vr:\"DS\",name:\"VolumeUpperLeftHighCornerTLOC\",vm:\"1\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",D1)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",D1)',vr:\"OB\",name:\"VolumeSegmentList\",vm:\"1\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",D2)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",D2)',vr:\"OB\",name:\"VolumeGradientList\",vm:\"1\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",D3)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",D3)',vr:\"OB\",name:\"VolumeDensityList\",vm:\"1\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",D4)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",D4)',vr:\"OB\",name:\"VolumeZPositionList\",vm:\"1\",version:\"PrivateTag\"},'(0047,\"GEMS_ADWSoft_3D1\",D5)':{tag:'(0047,\"GEMS_ADWSoft_3D1\",D5)',vr:\"OB\",name:\"VolumeOriginalIndexList\",vm:\"1\",version:\"PrivateTag\"},'(0039,\"GEMS_ADWSoft_DPO\",80)':{tag:'(0039,\"GEMS_ADWSoft_DPO\",80)',vr:\"IS\",name:\"PrivateEntityNumber\",vm:\"1\",version:\"PrivateTag\"},'(0039,\"GEMS_ADWSoft_DPO\",85)':{tag:'(0039,\"GEMS_ADWSoft_DPO\",85)',vr:\"DA\",name:\"PrivateEntityDate\",vm:\"1\",version:\"PrivateTag\"},'(0039,\"GEMS_ADWSoft_DPO\",90)':{tag:'(0039,\"GEMS_ADWSoft_DPO\",90)',vr:\"TM\",name:\"PrivateEntityTime\",vm:\"1\",version:\"PrivateTag\"},'(0039,\"GEMS_ADWSoft_DPO\",95)':{tag:'(0039,\"GEMS_ADWSoft_DPO\",95)',vr:\"LO\",name:\"PrivateEntityLaunchCommand\",vm:\"1\",version:\"PrivateTag\"},'(0039,\"GEMS_ADWSoft_DPO\",AA)':{tag:'(0039,\"GEMS_ADWSoft_DPO\",AA)',vr:\"CS\",name:\"PrivateEntityType\",vm:\"1\",version:\"PrivateTag\"},'(0033,\"GEMS_CTHD_01\",02)':{tag:'(0033,\"GEMS_CTHD_01\",02)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0037,\"GEMS_DRS_1\",10)':{tag:'(0037,\"GEMS_DRS_1\",10)',vr:\"LO\",name:\"ReferringDepartment\",vm:\"1\",version:\"PrivateTag\"},'(0037,\"GEMS_DRS_1\",20)':{tag:'(0037,\"GEMS_DRS_1\",20)',vr:\"US\",name:\"ScreenNumber\",vm:\"1\",version:\"PrivateTag\"},'(0037,\"GEMS_DRS_1\",40)':{tag:'(0037,\"GEMS_DRS_1\",40)',vr:\"SH\",name:\"LeftOrientation\",vm:\"1\",version:\"PrivateTag\"},'(0037,\"GEMS_DRS_1\",42)':{tag:'(0037,\"GEMS_DRS_1\",42)',vr:\"SH\",name:\"RightOrientation\",vm:\"1\",version:\"PrivateTag\"},'(0037,\"GEMS_DRS_1\",50)':{tag:'(0037,\"GEMS_DRS_1\",50)',vr:\"CS\",name:\"Inversion\",vm:\"1\",version:\"PrivateTag\"},'(0037,\"GEMS_DRS_1\",60)':{tag:'(0037,\"GEMS_DRS_1\",60)',vr:\"US\",name:\"DSA\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_GENIE_1\",10)':{tag:'(0009,\"GEMS_GENIE_1\",10)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_GENIE_1\",11)':{tag:'(0009,\"GEMS_GENIE_1\",11)',vr:\"SL\",name:\"StudyFlags\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_GENIE_1\",12)':{tag:'(0009,\"GEMS_GENIE_1\",12)',vr:\"SL\",name:\"StudyType\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_GENIE_1\",1e)':{tag:'(0009,\"GEMS_GENIE_1\",1e)',vr:\"UI\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_GENIE_1\",20)':{tag:'(0009,\"GEMS_GENIE_1\",20)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_GENIE_1\",21)':{tag:'(0009,\"GEMS_GENIE_1\",21)',vr:\"SL\",name:\"SeriesFlags\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_GENIE_1\",22)':{tag:'(0009,\"GEMS_GENIE_1\",22)',vr:\"SH\",name:\"UserOrientation\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_GENIE_1\",23)':{tag:'(0009,\"GEMS_GENIE_1\",23)',vr:\"SL\",name:\"InitiationType\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_GENIE_1\",24)':{tag:'(0009,\"GEMS_GENIE_1\",24)',vr:\"SL\",name:\"InitiationDelay\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_GENIE_1\",25)':{tag:'(0009,\"GEMS_GENIE_1\",25)',vr:\"SL\",name:\"InitiationCountRate\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_GENIE_1\",26)':{tag:'(0009,\"GEMS_GENIE_1\",26)',vr:\"SL\",name:\"NumberEnergySets\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_GENIE_1\",27)':{tag:'(0009,\"GEMS_GENIE_1\",27)',vr:\"SL\",name:\"NumberDetectors\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_GENIE_1\",29)':{tag:'(0009,\"GEMS_GENIE_1\",29)',vr:\"SL\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_GENIE_1\",2a)':{tag:'(0009,\"GEMS_GENIE_1\",2a)',vr:\"SL\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_GENIE_1\",2c)':{tag:'(0009,\"GEMS_GENIE_1\",2c)',vr:\"LO\",name:\"SeriesComments\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_GENIE_1\",2d)':{tag:'(0009,\"GEMS_GENIE_1\",2d)',vr:\"SL\",name:\"TrackBeatAverage\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_GENIE_1\",2e)':{tag:'(0009,\"GEMS_GENIE_1\",2e)',vr:\"FD\",name:\"DistancePrescribed\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_GENIE_1\",30)':{tag:'(0009,\"GEMS_GENIE_1\",30)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_GENIE_1\",35)':{tag:'(0009,\"GEMS_GENIE_1\",35)',vr:\"SL\",name:\"GantryLocusType\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_GENIE_1\",37)':{tag:'(0009,\"GEMS_GENIE_1\",37)',vr:\"SL\",name:\"StartingHeartRate\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_GENIE_1\",38)':{tag:'(0009,\"GEMS_GENIE_1\",38)',vr:\"SL\",name:\"RRWindowWidth\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_GENIE_1\",39)':{tag:'(0009,\"GEMS_GENIE_1\",39)',vr:\"SL\",name:\"RRWindowOffset\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_GENIE_1\",3a)':{tag:'(0009,\"GEMS_GENIE_1\",3a)',vr:\"SL\",name:\"PercentCycleImaged\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_GENIE_1\",40)':{tag:'(0009,\"GEMS_GENIE_1\",40)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_GENIE_1\",41)':{tag:'(0009,\"GEMS_GENIE_1\",41)',vr:\"SL\",name:\"PatientFlags\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_GENIE_1\",42)':{tag:'(0009,\"GEMS_GENIE_1\",42)',vr:\"DA\",name:\"PatientCreationDate\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_GENIE_1\",43)':{tag:'(0009,\"GEMS_GENIE_1\",43)',vr:\"TM\",name:\"PatientCreationTime\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",0a)':{tag:'(0011,\"GEMS_GENIE_1\",0a)',vr:\"SL\",name:\"SeriesType\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",0b)':{tag:'(0011,\"GEMS_GENIE_1\",0b)',vr:\"SL\",name:\"EffectiveSeriesDuration\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",0c)':{tag:'(0011,\"GEMS_GENIE_1\",0c)',vr:\"SL\",name:\"NumBeats\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",0d)':{tag:'(0011,\"GEMS_GENIE_1\",0d)',vr:\"LO\",name:\"RadioNuclideName\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",10)':{tag:'(0011,\"GEMS_GENIE_1\",10)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",12)':{tag:'(0011,\"GEMS_GENIE_1\",12)',vr:\"LO\",name:\"DatasetName\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",13)':{tag:'(0011,\"GEMS_GENIE_1\",13)',vr:\"SL\",name:\"DatasetType\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",15)':{tag:'(0011,\"GEMS_GENIE_1\",15)',vr:\"SL\",name:\"DetectorNumber\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",16)':{tag:'(0011,\"GEMS_GENIE_1\",16)',vr:\"SL\",name:\"EnergyNumber\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",17)':{tag:'(0011,\"GEMS_GENIE_1\",17)',vr:\"SL\",name:\"RRIntervalWindowNumber\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",18)':{tag:'(0011,\"GEMS_GENIE_1\",18)',vr:\"SL\",name:\"MGBinNumber\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",19)':{tag:'(0011,\"GEMS_GENIE_1\",19)',vr:\"FD\",name:\"RadiusOfRotation\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",1a)':{tag:'(0011,\"GEMS_GENIE_1\",1a)',vr:\"SL\",name:\"DetectorCountZone\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",1b)':{tag:'(0011,\"GEMS_GENIE_1\",1b)',vr:\"SL\",name:\"NumEnergyWindows\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",1c)':{tag:'(0011,\"GEMS_GENIE_1\",1c)',vr:\"SL\",name:\"EnergyOffset\",vm:\"4\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",1d)':{tag:'(0011,\"GEMS_GENIE_1\",1d)',vr:\"SL\",name:\"EnergyRange\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",1f)':{tag:'(0011,\"GEMS_GENIE_1\",1f)',vr:\"SL\",name:\"ImageOrientation\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",23)':{tag:'(0011,\"GEMS_GENIE_1\",23)',vr:\"SL\",name:\"UseFOVMask\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",24)':{tag:'(0011,\"GEMS_GENIE_1\",24)',vr:\"SL\",name:\"FOVMaskYCutoffAngle\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",25)':{tag:'(0011,\"GEMS_GENIE_1\",25)',vr:\"SL\",name:\"FOVMaskCutoffAngle\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",26)':{tag:'(0011,\"GEMS_GENIE_1\",26)',vr:\"SL\",name:\"TableOrientation\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",27)':{tag:'(0011,\"GEMS_GENIE_1\",27)',vr:\"SL\",name:\"ROITopLeft\",vm:\"2\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",28)':{tag:'(0011,\"GEMS_GENIE_1\",28)',vr:\"SL\",name:\"ROIBottomRight\",vm:\"2\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",30)':{tag:'(0011,\"GEMS_GENIE_1\",30)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",33)':{tag:'(0011,\"GEMS_GENIE_1\",33)',vr:\"LO\",name:\"EnergyCorrectName\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",34)':{tag:'(0011,\"GEMS_GENIE_1\",34)',vr:\"LO\",name:\"SpatialCorrectName\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",35)':{tag:'(0011,\"GEMS_GENIE_1\",35)',vr:\"LO\",name:\"TuningCalibName\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",36)':{tag:'(0011,\"GEMS_GENIE_1\",36)',vr:\"LO\",name:\"UniformityCorrectName\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",37)':{tag:'(0011,\"GEMS_GENIE_1\",37)',vr:\"LO\",name:\"AcquisitionSpecificCorrectName\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",38)':{tag:'(0011,\"GEMS_GENIE_1\",38)',vr:\"SL\",name:\"ByteOrder\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",3a)':{tag:'(0011,\"GEMS_GENIE_1\",3a)',vr:\"SL\",name:\"PictureFormat\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",3b)':{tag:'(0011,\"GEMS_GENIE_1\",3b)',vr:\"FD\",name:\"PixelScale\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",3c)':{tag:'(0011,\"GEMS_GENIE_1\",3c)',vr:\"FD\",name:\"PixelOffset\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",3e)':{tag:'(0011,\"GEMS_GENIE_1\",3e)',vr:\"SL\",name:\"FOVShape\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",3f)':{tag:'(0011,\"GEMS_GENIE_1\",3f)',vr:\"SL\",name:\"DatasetFlags\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",44)':{tag:'(0011,\"GEMS_GENIE_1\",44)',vr:\"FD\",name:\"ThresholdCenter\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",45)':{tag:'(0011,\"GEMS_GENIE_1\",45)',vr:\"FD\",name:\"ThresholdWidth\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",46)':{tag:'(0011,\"GEMS_GENIE_1\",46)',vr:\"SL\",name:\"InterpolationType\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",55)':{tag:'(0011,\"GEMS_GENIE_1\",55)',vr:\"FD\",name:\"Period\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"GEMS_GENIE_1\",56)':{tag:'(0011,\"GEMS_GENIE_1\",56)',vr:\"FD\",name:\"ElapsedTime\",vm:\"1\",version:\"PrivateTag\"},'(0013,\"GEMS_GENIE_1\",10)':{tag:'(0013,\"GEMS_GENIE_1\",10)',vr:\"FD\",name:\"DigitalFOV\",vm:\"2\",version:\"PrivateTag\"},'(0013,\"GEMS_GENIE_1\",11)':{tag:'(0013,\"GEMS_GENIE_1\",11)',vr:\"SL\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0013,\"GEMS_GENIE_1\",12)':{tag:'(0013,\"GEMS_GENIE_1\",12)',vr:\"SL\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0013,\"GEMS_GENIE_1\",16)':{tag:'(0013,\"GEMS_GENIE_1\",16)',vr:\"SL\",name:\"AutoTrackPeak\",vm:\"1\",version:\"PrivateTag\"},'(0013,\"GEMS_GENIE_1\",17)':{tag:'(0013,\"GEMS_GENIE_1\",17)',vr:\"SL\",name:\"AutoTrackWidth\",vm:\"1\",version:\"PrivateTag\"},'(0013,\"GEMS_GENIE_1\",18)':{tag:'(0013,\"GEMS_GENIE_1\",18)',vr:\"FD\",name:\"TransmissionScanTime\",vm:\"1\",version:\"PrivateTag\"},'(0013,\"GEMS_GENIE_1\",19)':{tag:'(0013,\"GEMS_GENIE_1\",19)',vr:\"FD\",name:\"TransmissionMaskWidth\",vm:\"1\",version:\"PrivateTag\"},'(0013,\"GEMS_GENIE_1\",1a)':{tag:'(0013,\"GEMS_GENIE_1\",1a)',vr:\"FD\",name:\"CopperAttenuatorThickness\",vm:\"1\",version:\"PrivateTag\"},'(0013,\"GEMS_GENIE_1\",1c)':{tag:'(0013,\"GEMS_GENIE_1\",1c)',vr:\"FD\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0013,\"GEMS_GENIE_1\",1d)':{tag:'(0013,\"GEMS_GENIE_1\",1d)',vr:\"FD\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0013,\"GEMS_GENIE_1\",1e)':{tag:'(0013,\"GEMS_GENIE_1\",1e)',vr:\"FD\",name:\"TomoViewOffset\",vm:\"1-n\",version:\"PrivateTag\"},'(0013,\"GEMS_GENIE_1\",26)':{tag:'(0013,\"GEMS_GENIE_1\",26)',vr:\"LT\",name:\"StudyComments\",vm:\"1\",version:\"PrivateTag\"},'(0033,\"GEMS_GNHD_01\",01)':{tag:'(0033,\"GEMS_GNHD_01\",01)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0033,\"GEMS_GNHD_01\",02)':{tag:'(0033,\"GEMS_GNHD_01\",02)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_IDEN_01\",01)':{tag:'(0009,\"GEMS_IDEN_01\",01)',vr:\"LO\",name:\"FullFidelity\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_IDEN_01\",02)':{tag:'(0009,\"GEMS_IDEN_01\",02)',vr:\"SH\",name:\"SuiteId\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_IDEN_01\",04)':{tag:'(0009,\"GEMS_IDEN_01\",04)',vr:\"SH\",name:\"ProductId\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_IDEN_01\",17)':{tag:'(0009,\"GEMS_IDEN_01\",17)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_IDEN_01\",1a)':{tag:'(0009,\"GEMS_IDEN_01\",1a)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_IDEN_01\",20)':{tag:'(0009,\"GEMS_IDEN_01\",20)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_IDEN_01\",27)':{tag:'(0009,\"GEMS_IDEN_01\",27)',vr:\"SL\",name:\"ImageActualDate\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_IDEN_01\",2f)':{tag:'(0009,\"GEMS_IDEN_01\",2f)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_IDEN_01\",30)':{tag:'(0009,\"GEMS_IDEN_01\",30)',vr:\"SH\",name:\"ServiceId\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_IDEN_01\",31)':{tag:'(0009,\"GEMS_IDEN_01\",31)',vr:\"SH\",name:\"MobileLocationNumber\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_IDEN_01\",e2)':{tag:'(0009,\"GEMS_IDEN_01\",e2)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_IDEN_01\",e3)':{tag:'(0009,\"GEMS_IDEN_01\",e3)',vr:\"UI\",name:\"EquipmentUID\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_IDEN_01\",e6)':{tag:'(0009,\"GEMS_IDEN_01\",e6)',vr:\"SH\",name:\"GenesisVersionNow\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_IDEN_01\",e7)':{tag:'(0009,\"GEMS_IDEN_01\",e7)',vr:\"UL\",name:\"ExamRecordChecksum\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_IDEN_01\",e8)':{tag:'(0009,\"GEMS_IDEN_01\",e8)',vr:\"UL\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"GEMS_IDEN_01\",e9)':{tag:'(0009,\"GEMS_IDEN_01\",e9)',vr:\"SL\",name:\"ActualSeriesDataTimeStamp\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"GEMS_IMAG_01\",06)':{tag:'(0027,\"GEMS_IMAG_01\",06)',vr:\"SL\",name:\"ImageArchiveFlag\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"GEMS_IMAG_01\",10)':{tag:'(0027,\"GEMS_IMAG_01\",10)',vr:\"SS\",name:\"ScoutType\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"GEMS_IMAG_01\",1c)':{tag:'(0027,\"GEMS_IMAG_01\",1c)',vr:\"SL\",name:\"VmaMamp\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"GEMS_IMAG_01\",1d)':{tag:'(0027,\"GEMS_IMAG_01\",1d)',vr:\"SS\",name:\"VmaPhase\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"GEMS_IMAG_01\",1e)':{tag:'(0027,\"GEMS_IMAG_01\",1e)',vr:\"SL\",name:\"VmaMod\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"GEMS_IMAG_01\",1f)':{tag:'(0027,\"GEMS_IMAG_01\",1f)',vr:\"SL\",name:\"VmaClip\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"GEMS_IMAG_01\",20)':{tag:'(0027,\"GEMS_IMAG_01\",20)',vr:\"SS\",name:\"SmartScanOnOffFlag\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"GEMS_IMAG_01\",30)':{tag:'(0027,\"GEMS_IMAG_01\",30)',vr:\"SH\",name:\"ForeignImageRevision\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"GEMS_IMAG_01\",31)':{tag:'(0027,\"GEMS_IMAG_01\",31)',vr:\"SS\",name:\"ImagingMode\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"GEMS_IMAG_01\",32)':{tag:'(0027,\"GEMS_IMAG_01\",32)',vr:\"SS\",name:\"PulseSequence\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"GEMS_IMAG_01\",33)':{tag:'(0027,\"GEMS_IMAG_01\",33)',vr:\"SL\",name:\"ImagingOptions\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"GEMS_IMAG_01\",35)':{tag:'(0027,\"GEMS_IMAG_01\",35)',vr:\"SS\",name:\"PlaneType\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"GEMS_IMAG_01\",36)':{tag:'(0027,\"GEMS_IMAG_01\",36)',vr:\"SL\",name:\"ObliquePlane\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"GEMS_IMAG_01\",40)':{tag:'(0027,\"GEMS_IMAG_01\",40)',vr:\"SH\",name:\"RASLetterOfImageLocation\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"GEMS_IMAG_01\",41)':{tag:'(0027,\"GEMS_IMAG_01\",41)',vr:\"FL\",name:\"ImageLocation\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"GEMS_IMAG_01\",42)':{tag:'(0027,\"GEMS_IMAG_01\",42)',vr:\"FL\",name:\"CenterRCoordOfPlaneImage\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"GEMS_IMAG_01\",43)':{tag:'(0027,\"GEMS_IMAG_01\",43)',vr:\"FL\",name:\"CenterACoordOfPlaneImage\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"GEMS_IMAG_01\",44)':{tag:'(0027,\"GEMS_IMAG_01\",44)',vr:\"FL\",name:\"CenterSCoordOfPlaneImage\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"GEMS_IMAG_01\",45)':{tag:'(0027,\"GEMS_IMAG_01\",45)',vr:\"FL\",name:\"NormalRCoord\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"GEMS_IMAG_01\",46)':{tag:'(0027,\"GEMS_IMAG_01\",46)',vr:\"FL\",name:\"NormalACoord\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"GEMS_IMAG_01\",47)':{tag:'(0027,\"GEMS_IMAG_01\",47)',vr:\"FL\",name:\"NormalSCoord\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"GEMS_IMAG_01\",48)':{tag:'(0027,\"GEMS_IMAG_01\",48)',vr:\"FL\",name:\"RCoordOfTopRightCorner\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"GEMS_IMAG_01\",49)':{tag:'(0027,\"GEMS_IMAG_01\",49)',vr:\"FL\",name:\"ACoordOfTopRightCorner\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"GEMS_IMAG_01\",4a)':{tag:'(0027,\"GEMS_IMAG_01\",4a)',vr:\"FL\",name:\"SCoordOfTopRightCorner\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"GEMS_IMAG_01\",4b)':{tag:'(0027,\"GEMS_IMAG_01\",4b)',vr:\"FL\",name:\"RCoordOfBottomRightCorner\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"GEMS_IMAG_01\",4c)':{tag:'(0027,\"GEMS_IMAG_01\",4c)',vr:\"FL\",name:\"ACoordOfBottomRightCorner\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"GEMS_IMAG_01\",4d)':{tag:'(0027,\"GEMS_IMAG_01\",4d)',vr:\"FL\",name:\"SCoordOfBottomRightCorner\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"GEMS_IMAG_01\",50)':{tag:'(0027,\"GEMS_IMAG_01\",50)',vr:\"FL\",name:\"TableStartLocation\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"GEMS_IMAG_01\",51)':{tag:'(0027,\"GEMS_IMAG_01\",51)',vr:\"FL\",name:\"TableEndLocation\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"GEMS_IMAG_01\",52)':{tag:'(0027,\"GEMS_IMAG_01\",52)',vr:\"SH\",name:\"RASLetterForSideOfImage\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"GEMS_IMAG_01\",53)':{tag:'(0027,\"GEMS_IMAG_01\",53)',vr:\"SH\",name:\"RASLetterForAnteriorPosterior\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"GEMS_IMAG_01\",54)':{tag:'(0027,\"GEMS_IMAG_01\",54)',vr:\"SH\",name:\"RASLetterForScoutStartLoc\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"GEMS_IMAG_01\",55)':{tag:'(0027,\"GEMS_IMAG_01\",55)',vr:\"SH\",name:\"RASLetterForScoutEndLoc\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"GEMS_IMAG_01\",60)':{tag:'(0027,\"GEMS_IMAG_01\",60)',vr:\"FL\",name:\"ImageDimensionX\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"GEMS_IMAG_01\",61)':{tag:'(0027,\"GEMS_IMAG_01\",61)',vr:\"FL\",name:\"ImageDimensionY\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"GEMS_IMAG_01\",62)':{tag:'(0027,\"GEMS_IMAG_01\",62)',vr:\"FL\",name:\"NumberOfExcitations\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"GEMS_IMPS_01\",04)':{tag:'(0029,\"GEMS_IMPS_01\",04)',vr:\"SL\",name:\"LowerRangeOfPixels\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"GEMS_IMPS_01\",05)':{tag:'(0029,\"GEMS_IMPS_01\",05)',vr:\"DS\",name:\"LowerRangeOfPixels\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"GEMS_IMPS_01\",06)':{tag:'(0029,\"GEMS_IMPS_01\",06)',vr:\"DS\",name:\"LowerRangeOfPixels\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"GEMS_IMPS_01\",07)':{tag:'(0029,\"GEMS_IMPS_01\",07)',vr:\"SL\",name:\"LowerRangeOfPixels\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"GEMS_IMPS_01\",08)':{tag:'(0029,\"GEMS_IMPS_01\",08)',vr:\"SH\",name:\"LowerRangeOfPixels\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"GEMS_IMPS_01\",09)':{tag:'(0029,\"GEMS_IMPS_01\",09)',vr:\"SH\",name:\"LowerRangeOfPixels\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"GEMS_IMPS_01\",0a)':{tag:'(0029,\"GEMS_IMPS_01\",0a)',vr:\"SS\",name:\"LowerRangeOfPixels\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"GEMS_IMPS_01\",15)':{tag:'(0029,\"GEMS_IMPS_01\",15)',vr:\"SL\",name:\"LowerRangeOfPixels\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"GEMS_IMPS_01\",16)':{tag:'(0029,\"GEMS_IMPS_01\",16)',vr:\"SL\",name:\"LowerRangeOfPixels\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"GEMS_IMPS_01\",17)':{tag:'(0029,\"GEMS_IMPS_01\",17)',vr:\"SL\",name:\"LowerRangeOfPixels\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"GEMS_IMPS_01\",18)':{tag:'(0029,\"GEMS_IMPS_01\",18)',vr:\"SL\",name:\"UpperRangeOfPixels\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"GEMS_IMPS_01\",1a)':{tag:'(0029,\"GEMS_IMPS_01\",1a)',vr:\"SL\",name:\"LengthOfTotalHeaderInBytes\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"GEMS_IMPS_01\",26)':{tag:'(0029,\"GEMS_IMPS_01\",26)',vr:\"SS\",name:\"VersionOfHeaderStructure\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"GEMS_IMPS_01\",34)':{tag:'(0029,\"GEMS_IMPS_01\",34)',vr:\"SL\",name:\"AdvantageCompOverflow\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"GEMS_IMPS_01\",35)':{tag:'(0029,\"GEMS_IMPS_01\",35)',vr:\"SL\",name:\"AdvantageCompUnderflow\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",01)':{tag:'(0043,\"GEMS_PARM_01\",01)',vr:\"SS\",name:\"BitmapOfPrescanOptions\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",02)':{tag:'(0043,\"GEMS_PARM_01\",02)',vr:\"SS\",name:\"GradientOffsetInX\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",03)':{tag:'(0043,\"GEMS_PARM_01\",03)',vr:\"SS\",name:\"GradientOffsetInY\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",04)':{tag:'(0043,\"GEMS_PARM_01\",04)',vr:\"SS\",name:\"GradientOffsetInZ\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",05)':{tag:'(0043,\"GEMS_PARM_01\",05)',vr:\"SS\",name:\"ImageIsOriginalOrUnoriginal\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",06)':{tag:'(0043,\"GEMS_PARM_01\",06)',vr:\"SS\",name:\"NumberOfEPIShots\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",07)':{tag:'(0043,\"GEMS_PARM_01\",07)',vr:\"SS\",name:\"ViewsPerSegment\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",08)':{tag:'(0043,\"GEMS_PARM_01\",08)',vr:\"SS\",name:\"RespiratoryRateInBPM\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",09)':{tag:'(0043,\"GEMS_PARM_01\",09)',vr:\"SS\",name:\"RespiratoryTriggerPoint\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",0a)':{tag:'(0043,\"GEMS_PARM_01\",0a)',vr:\"SS\",name:\"TypeOfReceiverUsed\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",0b)':{tag:'(0043,\"GEMS_PARM_01\",0b)',vr:\"DS\",name:\"PeakRateOfChangeOfGradientField\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",0c)':{tag:'(0043,\"GEMS_PARM_01\",0c)',vr:\"DS\",name:\"LimitsInUnitsOfPercent\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",0d)':{tag:'(0043,\"GEMS_PARM_01\",0d)',vr:\"DS\",name:\"PSDEstimatedLimit\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",0e)':{tag:'(0043,\"GEMS_PARM_01\",0e)',vr:\"DS\",name:\"PSDEstimatedLimitInTeslaPerSecond\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",0f)':{tag:'(0043,\"GEMS_PARM_01\",0f)',vr:\"DS\",name:\"SARAvgHead\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",10)':{tag:'(0043,\"GEMS_PARM_01\",10)',vr:\"US\",name:\"WindowValue\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",11)':{tag:'(0043,\"GEMS_PARM_01\",11)',vr:\"US\",name:\"TotalInputViews\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",12)':{tag:'(0043,\"GEMS_PARM_01\",12)',vr:\"SS\",name:\"XrayChain\",vm:\"3\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",13)':{tag:'(0043,\"GEMS_PARM_01\",13)',vr:\"SS\",name:\"ReconKernelParameters\",vm:\"5\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",14)':{tag:'(0043,\"GEMS_PARM_01\",14)',vr:\"SS\",name:\"CalibrationParameters\",vm:\"3\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",15)':{tag:'(0043,\"GEMS_PARM_01\",15)',vr:\"SS\",name:\"TotalOutputViews\",vm:\"3\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",16)':{tag:'(0043,\"GEMS_PARM_01\",16)',vr:\"SS\",name:\"NumberOfOverranges\",vm:\"5\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",17)':{tag:'(0043,\"GEMS_PARM_01\",17)',vr:\"DS\",name:\"IBHImageScaleFactors\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",18)':{tag:'(0043,\"GEMS_PARM_01\",18)',vr:\"DS\",name:\"BBHCoefficients\",vm:\"3\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",19)':{tag:'(0043,\"GEMS_PARM_01\",19)',vr:\"SS\",name:\"NumberOfBBHChainsToBlend\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",1a)':{tag:'(0043,\"GEMS_PARM_01\",1a)',vr:\"SL\",name:\"StartingChannelNumber\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",1b)':{tag:'(0043,\"GEMS_PARM_01\",1b)',vr:\"SS\",name:\"PPScanParameters\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",1c)':{tag:'(0043,\"GEMS_PARM_01\",1c)',vr:\"SS\",name:\"GEImageIntegrity\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",1d)':{tag:'(0043,\"GEMS_PARM_01\",1d)',vr:\"SS\",name:\"LevelValue\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",1e)':{tag:'(0043,\"GEMS_PARM_01\",1e)',vr:\"DS\",name:\"DeltaStartTime\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",1f)':{tag:'(0043,\"GEMS_PARM_01\",1f)',vr:\"SL\",name:\"MaxOverrangesInAView\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",20)':{tag:'(0043,\"GEMS_PARM_01\",20)',vr:\"DS\",name:\"AvgOverrangesAllViews\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",21)':{tag:'(0043,\"GEMS_PARM_01\",21)',vr:\"SS\",name:\"CorrectedAfterglowTerms\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",25)':{tag:'(0043,\"GEMS_PARM_01\",25)',vr:\"SS\",name:\"ReferenceChannels\",vm:\"6\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",26)':{tag:'(0043,\"GEMS_PARM_01\",26)',vr:\"US\",name:\"NoViewsRefChannelsBlocked\",vm:\"6\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",27)':{tag:'(0043,\"GEMS_PARM_01\",27)',vr:\"SH\",name:\"ScanPitchRatio\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",28)':{tag:'(0043,\"GEMS_PARM_01\",28)',vr:\"OB\",name:\"UniqueImageIdentifier\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",29)':{tag:'(0043,\"GEMS_PARM_01\",29)',vr:\"OB\",name:\"HistogramTables\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",2a)':{tag:'(0043,\"GEMS_PARM_01\",2a)',vr:\"OB\",name:\"UserDefinedData\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",2b)':{tag:'(0043,\"GEMS_PARM_01\",2b)',vr:\"SS\",name:\"PrivateScanOptions\",vm:\"4\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",2c)':{tag:'(0043,\"GEMS_PARM_01\",2c)',vr:\"SS\",name:\"EffectiveEchoSpacing\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",2d)':{tag:'(0043,\"GEMS_PARM_01\",2d)',vr:\"SH\",name:\"StringSlopField1\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",2e)':{tag:'(0043,\"GEMS_PARM_01\",2e)',vr:\"SH\",name:\"StringSlopField2\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",2f)':{tag:'(0043,\"GEMS_PARM_01\",2f)',vr:\"SS\",name:\"RawDataType\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",30)':{tag:'(0043,\"GEMS_PARM_01\",30)',vr:\"SS\",name:\"RawDataType\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",31)':{tag:'(0043,\"GEMS_PARM_01\",31)',vr:\"DS\",name:\"RACoordOfTargetReconCentre\",vm:\"2\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",32)':{tag:'(0043,\"GEMS_PARM_01\",32)',vr:\"SS\",name:\"RawDataType\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",33)':{tag:'(0043,\"GEMS_PARM_01\",33)',vr:\"FL\",name:\"NegScanSpacing\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",34)':{tag:'(0043,\"GEMS_PARM_01\",34)',vr:\"IS\",name:\"OffsetFrequency\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",35)':{tag:'(0043,\"GEMS_PARM_01\",35)',vr:\"UL\",name:\"UserUsageTag\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",36)':{tag:'(0043,\"GEMS_PARM_01\",36)',vr:\"UL\",name:\"UserFillMapMSW\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",37)':{tag:'(0043,\"GEMS_PARM_01\",37)',vr:\"UL\",name:\"UserFillMapLSW\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",38)':{tag:'(0043,\"GEMS_PARM_01\",38)',vr:\"FL\",name:\"User25ToUser48\",vm:\"24\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",39)':{tag:'(0043,\"GEMS_PARM_01\",39)',vr:\"IS\",name:\"SlopInteger6ToSlopInteger9\",vm:\"4\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",40)':{tag:'(0043,\"GEMS_PARM_01\",40)',vr:\"FL\",name:\"TriggerOnPosition\",vm:\"4\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",41)':{tag:'(0043,\"GEMS_PARM_01\",41)',vr:\"FL\",name:\"DegreeOfRotation\",vm:\"4\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",42)':{tag:'(0043,\"GEMS_PARM_01\",42)',vr:\"SL\",name:\"DASTriggerSource\",vm:\"4\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",43)':{tag:'(0043,\"GEMS_PARM_01\",43)',vr:\"SL\",name:\"DASFpaGain\",vm:\"4\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",44)':{tag:'(0043,\"GEMS_PARM_01\",44)',vr:\"SL\",name:\"DASOutputSource\",vm:\"4\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",45)':{tag:'(0043,\"GEMS_PARM_01\",45)',vr:\"SL\",name:\"DASAdInput\",vm:\"4\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",46)':{tag:'(0043,\"GEMS_PARM_01\",46)',vr:\"SL\",name:\"DASCalMode\",vm:\"4\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",47)':{tag:'(0043,\"GEMS_PARM_01\",47)',vr:\"SL\",name:\"DASCalFrequency\",vm:\"4\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",48)':{tag:'(0043,\"GEMS_PARM_01\",48)',vr:\"SL\",name:\"DASRegXm\",vm:\"4\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",49)':{tag:'(0043,\"GEMS_PARM_01\",49)',vr:\"SL\",name:\"DASAutoZero\",vm:\"4\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",4a)':{tag:'(0043,\"GEMS_PARM_01\",4a)',vr:\"SS\",name:\"StartingChannelOfView\",vm:\"4\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",4b)':{tag:'(0043,\"GEMS_PARM_01\",4b)',vr:\"SL\",name:\"DASXmPattern\",vm:\"4\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",4c)':{tag:'(0043,\"GEMS_PARM_01\",4c)',vr:\"SS\",name:\"TGGCTriggerMode\",vm:\"4\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",4d)':{tag:'(0043,\"GEMS_PARM_01\",4d)',vr:\"FL\",name:\"StartScanToXrayOnDelay\",vm:\"4\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",4e)':{tag:'(0043,\"GEMS_PARM_01\",4e)',vr:\"FL\",name:\"DurationOfXrayOn\",vm:\"4\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",60)':{tag:'(0043,\"GEMS_PARM_01\",60)',vr:\"IS\",name:\"SlopInteger10ToSlopInteger17\",vm:\"8\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",61)':{tag:'(0043,\"GEMS_PARM_01\",61)',vr:\"UI\",name:\"ScannerStudyEntityUID\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",62)':{tag:'(0043,\"GEMS_PARM_01\",62)',vr:\"SH\",name:\"ScannerStudyID\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",6f)':{tag:'(0043,\"GEMS_PARM_01\",6f)',vr:\"DS\",name:\"ScannerTableEntry\",vm:\"3\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",70)':{tag:'(0043,\"GEMS_PARM_01\",70)',vr:\"LO\",name:\"ParadigmName\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",71)':{tag:'(0043,\"GEMS_PARM_01\",71)',vr:\"ST\",name:\"ParadigmDescription\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",72)':{tag:'(0043,\"GEMS_PARM_01\",72)',vr:\"UI\",name:\"ParadigmUID\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",73)':{tag:'(0043,\"GEMS_PARM_01\",73)',vr:\"US\",name:\"ExperimentType\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",74)':{tag:'(0043,\"GEMS_PARM_01\",74)',vr:\"US\",name:\"NumberOfRestVolumes\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",75)':{tag:'(0043,\"GEMS_PARM_01\",75)',vr:\"US\",name:\"NumberOfActiveVolumes\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",76)':{tag:'(0043,\"GEMS_PARM_01\",76)',vr:\"US\",name:\"NumberOfDummyScans\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",77)':{tag:'(0043,\"GEMS_PARM_01\",77)',vr:\"SH\",name:\"ApplicationName\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",78)':{tag:'(0043,\"GEMS_PARM_01\",78)',vr:\"SH\",name:\"ApplicationVersion\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",79)':{tag:'(0043,\"GEMS_PARM_01\",79)',vr:\"US\",name:\"SlicesPerVolume\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",7a)':{tag:'(0043,\"GEMS_PARM_01\",7a)',vr:\"US\",name:\"ExpectedTimePoints\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",7b)':{tag:'(0043,\"GEMS_PARM_01\",7b)',vr:\"FL\",name:\"RegressorValues\",vm:\"1-n\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",7c)':{tag:'(0043,\"GEMS_PARM_01\",7c)',vr:\"FL\",name:\"DelayAfterSliceGroup\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",7d)':{tag:'(0043,\"GEMS_PARM_01\",7d)',vr:\"US\",name:\"ReconModeFlagWord\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",7e)':{tag:'(0043,\"GEMS_PARM_01\",7e)',vr:\"LO\",name:\"PACCSpecificInformation\",vm:\"1-n\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",7f)':{tag:'(0043,\"GEMS_PARM_01\",7f)',vr:\"DS\",name:\"EDWIScaleFactor\",vm:\"1-n\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",80)':{tag:'(0043,\"GEMS_PARM_01\",80)',vr:\"LO\",name:\"CoilIDData\",vm:\"1-n\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",81)':{tag:'(0043,\"GEMS_PARM_01\",81)',vr:\"LO\",name:\"GECoilName\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",82)':{tag:'(0043,\"GEMS_PARM_01\",82)',vr:\"LO\",name:\"SystemConfigurationInformation\",vm:\"1-n\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",83)':{tag:'(0043,\"GEMS_PARM_01\",83)',vr:\"DS\",name:\"AssetRFactors\",vm:\"1-2\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",84)':{tag:'(0043,\"GEMS_PARM_01\",84)',vr:\"LO\",name:\"AdditionalAssetData\",vm:\"5-n\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",85)':{tag:'(0043,\"GEMS_PARM_01\",85)',vr:\"UT\",name:\"DebugDataTextFormat\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",86)':{tag:'(0043,\"GEMS_PARM_01\",86)',vr:\"OB\",name:\"DebugDataBinaryFormat\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",87)':{tag:'(0043,\"GEMS_PARM_01\",87)',vr:\"UT\",name:\"ScannerSoftwareVersionLongForm\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",88)':{tag:'(0043,\"GEMS_PARM_01\",88)',vr:\"UI\",name:\"PUREAcquisitionCalibrationSeriesUID\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",89)':{tag:'(0043,\"GEMS_PARM_01\",89)',vr:\"LO\",name:\"GoverningBodydBdtAndSARDefinition\",vm:\"3\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",8a)':{tag:'(0043,\"GEMS_PARM_01\",8a)',vr:\"CS\",name:\"PrivateInPlanePhaseEncodingDirection\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",8b)':{tag:'(0043,\"GEMS_PARM_01\",8b)',vr:\"OB\",name:\"FMRIBinaryDataBlock\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",8c)':{tag:'(0043,\"GEMS_PARM_01\",8c)',vr:\"DS\",name:\"VoxelLocation\",vm:\"6\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",8d)':{tag:'(0043,\"GEMS_PARM_01\",8d)',vr:\"DS\",name:\"SATBandLocations\",vm:\"7-7n\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",8e)':{tag:'(0043,\"GEMS_PARM_01\",8e)',vr:\"DS\",name:\"SpectroPrescanValues\",vm:\"3\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",8f)':{tag:'(0043,\"GEMS_PARM_01\",8f)',vr:\"DS\",name:\"SpectroParameters\",vm:\"3\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",90)':{tag:'(0043,\"GEMS_PARM_01\",90)',vr:\"LO\",name:\"SARDefinition\",vm:\"1-n\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",91)':{tag:'(0043,\"GEMS_PARM_01\",91)',vr:\"DS\",name:\"SARValue\",vm:\"1-n\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",92)':{tag:'(0043,\"GEMS_PARM_01\",92)',vr:\"LO\",name:\"ImageErrorText\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",93)':{tag:'(0043,\"GEMS_PARM_01\",93)',vr:\"DS\",name:\"SpectroQuantitationValues\",vm:\"1-n\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",94)':{tag:'(0043,\"GEMS_PARM_01\",94)',vr:\"DS\",name:\"SpectroRatioValues\",vm:\"1-n\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",95)':{tag:'(0043,\"GEMS_PARM_01\",95)',vr:\"LO\",name:\"PrescanReuseString\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",96)':{tag:'(0043,\"GEMS_PARM_01\",96)',vr:\"CS\",name:\"ContentQualification\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",97)':{tag:'(0043,\"GEMS_PARM_01\",97)',vr:\"LO\",name:\"ImageFilteringParameters\",vm:\"9\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",98)':{tag:'(0043,\"GEMS_PARM_01\",98)',vr:\"UI\",name:\"ASSETAcquisitionCalibrationSeriesUID\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",99)':{tag:'(0043,\"GEMS_PARM_01\",99)',vr:\"LO\",name:\"ExtendedOptions\",vm:\"1-n\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",9a)':{tag:'(0043,\"GEMS_PARM_01\",9a)',vr:\"IS\",name:\"RxStackIdentification\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",9b)':{tag:'(0043,\"GEMS_PARM_01\",9b)',vr:\"DS\",name:\"NPWFactor\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",9c)':{tag:'(0043,\"GEMS_PARM_01\",9c)',vr:\"OB\",name:\"ResearchTag1\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",9d)':{tag:'(0043,\"GEMS_PARM_01\",9d)',vr:\"OB\",name:\"ResearchTag2\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",9e)':{tag:'(0043,\"GEMS_PARM_01\",9e)',vr:\"OB\",name:\"ResearchTag3\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GEMS_PARM_01\",9f)':{tag:'(0043,\"GEMS_PARM_01\",9f)',vr:\"OB\",name:\"ResearchTag4\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"GEMS_PATI_01\",10)':{tag:'(0011,\"GEMS_PATI_01\",10)',vr:\"SS\",name:\"PatientStatus\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",03)':{tag:'(0021,\"GEMS_RELA_01\",03)',vr:\"SS\",name:\"SeriesFromWhichPrescribed\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",05)':{tag:'(0021,\"GEMS_RELA_01\",05)',vr:\"SH\",name:\"GenesisVersionNow\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",07)':{tag:'(0021,\"GEMS_RELA_01\",07)',vr:\"UL\",name:\"SeriesRecordChecksum\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",15)':{tag:'(0021,\"GEMS_RELA_01\",15)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",16)':{tag:'(0021,\"GEMS_RELA_01\",16)',vr:\"SS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",18)':{tag:'(0021,\"GEMS_RELA_01\",18)',vr:\"SH\",name:\"GenesisVersionNow\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",19)':{tag:'(0021,\"GEMS_RELA_01\",19)',vr:\"UL\",name:\"AcqReconRecordChecksum\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",20)':{tag:'(0021,\"GEMS_RELA_01\",20)',vr:\"DS\",name:\"TableStartLocation\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",35)':{tag:'(0021,\"GEMS_RELA_01\",35)',vr:\"SS\",name:\"SeriesFromWhichPrescribed\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",36)':{tag:'(0021,\"GEMS_RELA_01\",36)',vr:\"SS\",name:\"ImageFromWhichPrescribed\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",37)':{tag:'(0021,\"GEMS_RELA_01\",37)',vr:\"SS\",name:\"ScreenFormat\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",4a)':{tag:'(0021,\"GEMS_RELA_01\",4a)',vr:\"LO\",name:\"AnatomicalReferenceForScout\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",4e)':{tag:'(0021,\"GEMS_RELA_01\",4e)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",4f)':{tag:'(0021,\"GEMS_RELA_01\",4f)',vr:\"SS\",name:\"LocationsInAcquisition\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",50)':{tag:'(0021,\"GEMS_RELA_01\",50)',vr:\"SS\",name:\"GraphicallyPrescribed\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",51)':{tag:'(0021,\"GEMS_RELA_01\",51)',vr:\"DS\",name:\"RotationFromSourceXRot\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",52)':{tag:'(0021,\"GEMS_RELA_01\",52)',vr:\"DS\",name:\"RotationFromSourceYRot\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",53)':{tag:'(0021,\"GEMS_RELA_01\",53)',vr:\"DS\",name:\"RotationFromSourceZRot\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",54)':{tag:'(0021,\"GEMS_RELA_01\",54)',vr:\"SH\",name:\"ImagePosition\",vm:\"3\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",55)':{tag:'(0021,\"GEMS_RELA_01\",55)',vr:\"SH\",name:\"ImageOrientation\",vm:\"6\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",56)':{tag:'(0021,\"GEMS_RELA_01\",56)',vr:\"SL\",name:\"IntegerSlop\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",57)':{tag:'(0021,\"GEMS_RELA_01\",57)',vr:\"SL\",name:\"IntegerSlop\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",58)':{tag:'(0021,\"GEMS_RELA_01\",58)',vr:\"SL\",name:\"IntegerSlop\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",59)':{tag:'(0021,\"GEMS_RELA_01\",59)',vr:\"SL\",name:\"IntegerSlop\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",5a)':{tag:'(0021,\"GEMS_RELA_01\",5a)',vr:\"SL\",name:\"IntegerSlop\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",5b)':{tag:'(0021,\"GEMS_RELA_01\",5b)',vr:\"DS\",name:\"FloatSlop\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",5c)':{tag:'(0021,\"GEMS_RELA_01\",5c)',vr:\"DS\",name:\"FloatSlop\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",5d)':{tag:'(0021,\"GEMS_RELA_01\",5d)',vr:\"DS\",name:\"FloatSlop\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",5e)':{tag:'(0021,\"GEMS_RELA_01\",5e)',vr:\"DS\",name:\"FloatSlop\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",5f)':{tag:'(0021,\"GEMS_RELA_01\",5f)',vr:\"DS\",name:\"FloatSlop\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",70)':{tag:'(0021,\"GEMS_RELA_01\",70)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",71)':{tag:'(0021,\"GEMS_RELA_01\",71)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",81)':{tag:'(0021,\"GEMS_RELA_01\",81)',vr:\"DS\",name:\"AutoWindowLevelAlpha\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",82)':{tag:'(0021,\"GEMS_RELA_01\",82)',vr:\"DS\",name:\"AutoWindowLevelBeta\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",83)':{tag:'(0021,\"GEMS_RELA_01\",83)',vr:\"DS\",name:\"AutoWindowLevelWindow\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",84)':{tag:'(0021,\"GEMS_RELA_01\",84)',vr:\"DS\",name:\"AutoWindowLevelLevel\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",90)':{tag:'(0021,\"GEMS_RELA_01\",90)',vr:\"SS\",name:\"TubeFocalSpotPosition\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",91)':{tag:'(0021,\"GEMS_RELA_01\",91)',vr:\"SS\",name:\"BiopsyPosition\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",92)':{tag:'(0021,\"GEMS_RELA_01\",92)',vr:\"FL\",name:\"BiopsyTLocation\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"GEMS_RELA_01\",93)':{tag:'(0021,\"GEMS_RELA_01\",93)',vr:\"FL\",name:\"BiopsyRefLocation\",vm:\"1\",version:\"PrivateTag\"},'(0045,\"GEMS_SENO_02\",04)':{tag:'(0045,\"GEMS_SENO_02\",04)',vr:\"CS\",name:\"AES\",vm:\"1\",version:\"PrivateTag\"},'(0045,\"GEMS_SENO_02\",06)':{tag:'(0045,\"GEMS_SENO_02\",06)',vr:\"DS\",name:\"Angulation\",vm:\"1\",version:\"PrivateTag\"},'(0045,\"GEMS_SENO_02\",09)':{tag:'(0045,\"GEMS_SENO_02\",09)',vr:\"DS\",name:\"RealMagnificationFactor\",vm:\"1\",version:\"PrivateTag\"},'(0045,\"GEMS_SENO_02\",0b)':{tag:'(0045,\"GEMS_SENO_02\",0b)',vr:\"CS\",name:\"SenographType\",vm:\"1\",version:\"PrivateTag\"},'(0045,\"GEMS_SENO_02\",0c)':{tag:'(0045,\"GEMS_SENO_02\",0c)',vr:\"DS\",name:\"IntegrationTime\",vm:\"1\",version:\"PrivateTag\"},'(0045,\"GEMS_SENO_02\",0d)':{tag:'(0045,\"GEMS_SENO_02\",0d)',vr:\"DS\",name:\"ROIOriginXY\",vm:\"1\",version:\"PrivateTag\"},'(0045,\"GEMS_SENO_02\",11)':{tag:'(0045,\"GEMS_SENO_02\",11)',vr:\"DS\",name:\"ReceptorSizeCmXY\",vm:\"2\",version:\"PrivateTag\"},'(0045,\"GEMS_SENO_02\",12)':{tag:'(0045,\"GEMS_SENO_02\",12)',vr:\"IS\",name:\"ReceptorSizePixelsXY\",vm:\"2\",version:\"PrivateTag\"},'(0045,\"GEMS_SENO_02\",13)':{tag:'(0045,\"GEMS_SENO_02\",13)',vr:\"ST\",name:\"Screen\",vm:\"1\",version:\"PrivateTag\"},'(0045,\"GEMS_SENO_02\",14)':{tag:'(0045,\"GEMS_SENO_02\",14)',vr:\"DS\",name:\"PixelPitchMicrons\",vm:\"1\",version:\"PrivateTag\"},'(0045,\"GEMS_SENO_02\",15)':{tag:'(0045,\"GEMS_SENO_02\",15)',vr:\"IS\",name:\"PixelDepthBits\",vm:\"1\",version:\"PrivateTag\"},'(0045,\"GEMS_SENO_02\",16)':{tag:'(0045,\"GEMS_SENO_02\",16)',vr:\"IS\",name:\"BinningFactorXY\",vm:\"2\",version:\"PrivateTag\"},'(0045,\"GEMS_SENO_02\",1B)':{tag:'(0045,\"GEMS_SENO_02\",1B)',vr:\"CS\",name:\"ClinicalView\",vm:\"1\",version:\"PrivateTag\"},'(0045,\"GEMS_SENO_02\",1D)':{tag:'(0045,\"GEMS_SENO_02\",1D)',vr:\"DS\",name:\"MeanOfRawGrayLevels\",vm:\"1\",version:\"PrivateTag\"},'(0045,\"GEMS_SENO_02\",1E)':{tag:'(0045,\"GEMS_SENO_02\",1E)',vr:\"DS\",name:\"MeanOfOffsetGrayLevels\",vm:\"1\",version:\"PrivateTag\"},'(0045,\"GEMS_SENO_02\",1F)':{tag:'(0045,\"GEMS_SENO_02\",1F)',vr:\"DS\",name:\"MeanOfCorrectedGrayLevels\",vm:\"1\",version:\"PrivateTag\"},'(0045,\"GEMS_SENO_02\",20)':{tag:'(0045,\"GEMS_SENO_02\",20)',vr:\"DS\",name:\"MeanOfRegionGrayLevels\",vm:\"1\",version:\"PrivateTag\"},'(0045,\"GEMS_SENO_02\",21)':{tag:'(0045,\"GEMS_SENO_02\",21)',vr:\"DS\",name:\"MeanOfLogRegionGrayLevels\",vm:\"1\",version:\"PrivateTag\"},'(0045,\"GEMS_SENO_02\",22)':{tag:'(0045,\"GEMS_SENO_02\",22)',vr:\"DS\",name:\"StandardDeviationOfRawGrayLevels\",vm:\"1\",version:\"PrivateTag\"},'(0045,\"GEMS_SENO_02\",23)':{tag:'(0045,\"GEMS_SENO_02\",23)',vr:\"DS\",name:\"StandardDeviationOfCorrectedGrayLevels\",vm:\"1\",version:\"PrivateTag\"},'(0045,\"GEMS_SENO_02\",24)':{tag:'(0045,\"GEMS_SENO_02\",24)',vr:\"DS\",name:\"StandardDeviationOfRegionGrayLevels\",vm:\"1\",version:\"PrivateTag\"},'(0045,\"GEMS_SENO_02\",25)':{tag:'(0045,\"GEMS_SENO_02\",25)',vr:\"DS\",name:\"StandardDeviationOfLogRegionGrayLevels\",vm:\"1\",version:\"PrivateTag\"},'(0045,\"GEMS_SENO_02\",26)':{tag:'(0045,\"GEMS_SENO_02\",26)',vr:\"OB\",name:\"MAOBuffer\",vm:\"1\",version:\"PrivateTag\"},'(0045,\"GEMS_SENO_02\",27)':{tag:'(0045,\"GEMS_SENO_02\",27)',vr:\"IS\",name:\"SetNumber\",vm:\"1\",version:\"PrivateTag\"},'(0045,\"GEMS_SENO_02\",28)':{tag:'(0045,\"GEMS_SENO_02\",28)',vr:\"CS\",name:\"WindowingType\",vm:\"1\",version:\"PrivateTag\"},'(0045,\"GEMS_SENO_02\",29)':{tag:'(0045,\"GEMS_SENO_02\",29)',vr:\"DS\",name:\"WindowingParameters\",vm:\"1-n\",version:\"PrivateTag\"},'(0045,\"GEMS_SENO_02\",2a)':{tag:'(0045,\"GEMS_SENO_02\",2a)',vr:\"IS\",name:\"CrosshairCursorXCoordinates\",vm:\"1\",version:\"PrivateTag\"},'(0045,\"GEMS_SENO_02\",2b)':{tag:'(0045,\"GEMS_SENO_02\",2b)',vr:\"IS\",name:\"CrosshairCursorYCoordinates\",vm:\"1\",version:\"PrivateTag\"},'(0045,\"GEMS_SENO_02\",39)':{tag:'(0045,\"GEMS_SENO_02\",39)',vr:\"US\",name:\"VignetteRows\",vm:\"1\",version:\"PrivateTag\"},'(0045,\"GEMS_SENO_02\",3a)':{tag:'(0045,\"GEMS_SENO_02\",3a)',vr:\"US\",name:\"VignetteColumns\",vm:\"1\",version:\"PrivateTag\"},'(0045,\"GEMS_SENO_02\",3b)':{tag:'(0045,\"GEMS_SENO_02\",3b)',vr:\"US\",name:\"VignetteBitsAllocated\",vm:\"1\",version:\"PrivateTag\"},'(0045,\"GEMS_SENO_02\",3c)':{tag:'(0045,\"GEMS_SENO_02\",3c)',vr:\"US\",name:\"VignetteBitsStored\",vm:\"1\",version:\"PrivateTag\"},'(0045,\"GEMS_SENO_02\",3d)':{tag:'(0045,\"GEMS_SENO_02\",3d)',vr:\"US\",name:\"VignetteHighBit\",vm:\"1\",version:\"PrivateTag\"},'(0045,\"GEMS_SENO_02\",3e)':{tag:'(0045,\"GEMS_SENO_02\",3e)',vr:\"US\",name:\"VignettePixelRepresentation\",vm:\"1\",version:\"PrivateTag\"},'(0045,\"GEMS_SENO_02\",3f)':{tag:'(0045,\"GEMS_SENO_02\",3f)',vr:\"OB\",name:\"VignettePixelData\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"GEMS_SERS_01\",06)':{tag:'(0025,\"GEMS_SERS_01\",06)',vr:\"SS\",name:\"LastPulseSequenceUsed\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"GEMS_SERS_01\",07)':{tag:'(0025,\"GEMS_SERS_01\",07)',vr:\"SL\",name:\"ImagesInSeries\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"GEMS_SERS_01\",10)':{tag:'(0025,\"GEMS_SERS_01\",10)',vr:\"SL\",name:\"LandmarkCounter\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"GEMS_SERS_01\",11)':{tag:'(0025,\"GEMS_SERS_01\",11)',vr:\"SS\",name:\"NumberOfAcquisitions\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"GEMS_SERS_01\",14)':{tag:'(0025,\"GEMS_SERS_01\",14)',vr:\"SL\",name:\"IndicatesNumberOfUpdatesToHeader\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"GEMS_SERS_01\",17)':{tag:'(0025,\"GEMS_SERS_01\",17)',vr:\"SL\",name:\"SeriesCompleteFlag\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"GEMS_SERS_01\",18)':{tag:'(0025,\"GEMS_SERS_01\",18)',vr:\"SL\",name:\"NumberOfImagesArchived\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"GEMS_SERS_01\",19)':{tag:'(0025,\"GEMS_SERS_01\",19)',vr:\"SL\",name:\"LastImageNumberUsed\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"GEMS_SERS_01\",1a)':{tag:'(0025,\"GEMS_SERS_01\",1a)',vr:\"SH\",name:\"PrimaryReceiverSuiteAndHost\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_STDY_01\",01)':{tag:'(0023,\"GEMS_STDY_01\",01)',vr:\"SL\",name:\"NumberOfSeriesInStudy\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_STDY_01\",02)':{tag:'(0023,\"GEMS_STDY_01\",02)',vr:\"SL\",name:\"NumberOfUnarchivedSeries\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_STDY_01\",10)':{tag:'(0023,\"GEMS_STDY_01\",10)',vr:\"SS\",name:\"ReferenceImageField\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_STDY_01\",50)':{tag:'(0023,\"GEMS_STDY_01\",50)',vr:\"SS\",name:\"SummaryImage\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_STDY_01\",70)':{tag:'(0023,\"GEMS_STDY_01\",70)',vr:\"FD\",name:\"StartTimeSecsInFirstAxial\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_STDY_01\",74)':{tag:'(0023,\"GEMS_STDY_01\",74)',vr:\"SL\",name:\"NumberOfUpdatesToHeader\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"GEMS_STDY_01\",7d)':{tag:'(0023,\"GEMS_STDY_01\",7d)',vr:\"SS\",name:\"IndicatesIfStudyHasCompleteInfo\",vm:\"1\",version:\"PrivateTag\"},'(0033,\"GEMS_YMHD_01\",05)':{tag:'(0033,\"GEMS_YMHD_01\",05)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0033,\"GEMS_YMHD_01\",06)':{tag:'(0033,\"GEMS_YMHD_01\",06)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GE_GENESIS_REV3.0\",39)':{tag:'(0019,\"GE_GENESIS_REV3.0\",39)',vr:\"SS\",name:\"AxialType\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GE_GENESIS_REV3.0\",8f)':{tag:'(0019,\"GE_GENESIS_REV3.0\",8f)',vr:\"SS\",name:\"SwapPhaseFrequency\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GE_GENESIS_REV3.0\",9c)':{tag:'(0019,\"GE_GENESIS_REV3.0\",9c)',vr:\"SS\",name:\"PulseSequenceName\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GE_GENESIS_REV3.0\",9f)':{tag:'(0019,\"GE_GENESIS_REV3.0\",9f)',vr:\"SS\",name:\"CoilType\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GE_GENESIS_REV3.0\",a4)':{tag:'(0019,\"GE_GENESIS_REV3.0\",a4)',vr:\"SS\",name:\"SATFatWaterBone\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GE_GENESIS_REV3.0\",c0)':{tag:'(0019,\"GE_GENESIS_REV3.0\",c0)',vr:\"SS\",name:\"BitmapOfSATSelections\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GE_GENESIS_REV3.0\",c1)':{tag:'(0019,\"GE_GENESIS_REV3.0\",c1)',vr:\"SS\",name:\"SurfaceCoilIntensityCorrectionFlag\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GE_GENESIS_REV3.0\",cb)':{tag:'(0019,\"GE_GENESIS_REV3.0\",cb)',vr:\"SS\",name:\"PhaseContrastFlowAxis\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GE_GENESIS_REV3.0\",cc)':{tag:'(0019,\"GE_GENESIS_REV3.0\",cc)',vr:\"SS\",name:\"PhaseContrastVelocityEncoding\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GE_GENESIS_REV3.0\",d5)':{tag:'(0019,\"GE_GENESIS_REV3.0\",d5)',vr:\"SS\",name:\"FractionalEcho\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GE_GENESIS_REV3.0\",d8)':{tag:'(0019,\"GE_GENESIS_REV3.0\",d8)',vr:\"SS\",name:\"VariableEchoFlag\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GE_GENESIS_REV3.0\",d9)':{tag:'(0019,\"GE_GENESIS_REV3.0\",d9)',vr:\"DS\",name:\"ConcatenatedSat\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"GE_GENESIS_REV3.0\",f2)':{tag:'(0019,\"GE_GENESIS_REV3.0\",f2)',vr:\"SS\",name:\"NumberOfPhases\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GE_GENESIS_REV3.0\",1e)':{tag:'(0043,\"GE_GENESIS_REV3.0\",1e)',vr:\"DS\",name:\"DeltaStartTime\",vm:\"1\",version:\"PrivateTag\"},'(0043,\"GE_GENESIS_REV3.0\",27)':{tag:'(0043,\"GE_GENESIS_REV3.0\",27)',vr:\"SH\",name:\"ScanPitchRatio\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"INTELERAD MEDICAL SYSTEMS\",01)':{tag:'(0029,\"INTELERAD MEDICAL SYSTEMS\",01)',vr:\"FD\",name:\"ImageCompressionFraction\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"INTELERAD MEDICAL SYSTEMS\",02)':{tag:'(0029,\"INTELERAD MEDICAL SYSTEMS\",02)',vr:\"FD\",name:\"ImageQuality\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"INTELERAD MEDICAL SYSTEMS\",03)':{tag:'(0029,\"INTELERAD MEDICAL SYSTEMS\",03)',vr:\"FD\",name:\"ImageBytesTransferred\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"INTELERAD MEDICAL SYSTEMS\",10)':{tag:'(0029,\"INTELERAD MEDICAL SYSTEMS\",10)',vr:\"SH\",name:\"J2cParameterType\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"INTELERAD MEDICAL SYSTEMS\",11)':{tag:'(0029,\"INTELERAD MEDICAL SYSTEMS\",11)',vr:\"US\",name:\"J2cPixelRepresentation\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"INTELERAD MEDICAL SYSTEMS\",12)':{tag:'(0029,\"INTELERAD MEDICAL SYSTEMS\",12)',vr:\"US\",name:\"J2cBitsAllocated\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"INTELERAD MEDICAL SYSTEMS\",13)':{tag:'(0029,\"INTELERAD MEDICAL SYSTEMS\",13)',vr:\"US\",name:\"J2cPixelShiftValue\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"INTELERAD MEDICAL SYSTEMS\",14)':{tag:'(0029,\"INTELERAD MEDICAL SYSTEMS\",14)',vr:\"US\",name:\"J2cPlanarConfiguration\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"INTELERAD MEDICAL SYSTEMS\",15)':{tag:'(0029,\"INTELERAD MEDICAL SYSTEMS\",15)',vr:\"DS\",name:\"J2cRescaleIntercept\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"INTELERAD MEDICAL SYSTEMS\",20)':{tag:'(0029,\"INTELERAD MEDICAL SYSTEMS\",20)',vr:\"LO\",name:\"PixelDataMD5SumPerFrame\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"INTELERAD MEDICAL SYSTEMS\",21)':{tag:'(0029,\"INTELERAD MEDICAL SYSTEMS\",21)',vr:\"US\",name:\"HistogramPercentileLabels\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"INTELERAD MEDICAL SYSTEMS\",22)':{tag:'(0029,\"INTELERAD MEDICAL SYSTEMS\",22)',vr:\"FD\",name:\"HistogramPercentileValues\",vm:\"1\",version:\"PrivateTag\"},'(3f01,\"INTELERAD MEDICAL SYSTEMS\",01)':{tag:'(3f01,\"INTELERAD MEDICAL SYSTEMS\",01)',vr:\"LO\",name:\"InstitutionCode\",vm:\"1\",version:\"PrivateTag\"},'(3f01,\"INTELERAD MEDICAL SYSTEMS\",02)':{tag:'(3f01,\"INTELERAD MEDICAL SYSTEMS\",02)',vr:\"LO\",name:\"RoutedTransferAE\",vm:\"1\",version:\"PrivateTag\"},'(3f01,\"INTELERAD MEDICAL SYSTEMS\",03)':{tag:'(3f01,\"INTELERAD MEDICAL SYSTEMS\",03)',vr:\"LO\",name:\"SourceAE\",vm:\"1\",version:\"PrivateTag\"},'(3f01,\"INTELERAD MEDICAL SYSTEMS\",04)':{tag:'(3f01,\"INTELERAD MEDICAL SYSTEMS\",04)',vr:\"SH\",name:\"DeferredValidation\",vm:\"1\",version:\"PrivateTag\"},'(3f01,\"INTELERAD MEDICAL SYSTEMS\",05)':{tag:'(3f01,\"INTELERAD MEDICAL SYSTEMS\",05)',vr:\"LO\",name:\"SeriesOwner\",vm:\"1\",version:\"PrivateTag\"},'(3f01,\"INTELERAD MEDICAL SYSTEMS\",06)':{tag:'(3f01,\"INTELERAD MEDICAL SYSTEMS\",06)',vr:\"LO\",name:\"OrderGroupNumber\",vm:\"1\",version:\"PrivateTag\"},'(3f01,\"INTELERAD MEDICAL SYSTEMS\",07)':{tag:'(3f01,\"INTELERAD MEDICAL SYSTEMS\",07)',vr:\"SH\",name:\"StrippedPixelData\",vm:\"1\",version:\"PrivateTag\"},'(3f01,\"INTELERAD MEDICAL SYSTEMS\",08)':{tag:'(3f01,\"INTELERAD MEDICAL SYSTEMS\",08)',vr:\"SH\",name:\"PendingMoveRequest\",vm:\"1\",version:\"PrivateTag\"},'(0041,\"INTEGRIS 1.0\",20)':{tag:'(0041,\"INTEGRIS 1.0\",20)',vr:\"FL\",name:\"AccumulatedFluoroscopyDose\",vm:\"1\",version:\"PrivateTag\"},'(0041,\"INTEGRIS 1.0\",30)':{tag:'(0041,\"INTEGRIS 1.0\",30)',vr:\"FL\",name:\"AccumulatedExposureDose\",vm:\"1\",version:\"PrivateTag\"},'(0041,\"INTEGRIS 1.0\",40)':{tag:'(0041,\"INTEGRIS 1.0\",40)',vr:\"FL\",name:\"TotalDose\",vm:\"1\",version:\"PrivateTag\"},'(0041,\"INTEGRIS 1.0\",41)':{tag:'(0041,\"INTEGRIS 1.0\",41)',vr:\"FL\",name:\"TotalNumberOfFrames\",vm:\"1\",version:\"PrivateTag\"},'(0041,\"INTEGRIS 1.0\",50)':{tag:'(0041,\"INTEGRIS 1.0\",50)',vr:\"SQ\",name:\"ExposureInformationSequence\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"INTEGRIS 1.0\",08)':{tag:'(0009,\"INTEGRIS 1.0\",08)',vr:\"CS\",name:\"ExposureChannel\",vm:\"1-n\",version:\"PrivateTag\"},'(0009,\"INTEGRIS 1.0\",32)':{tag:'(0009,\"INTEGRIS 1.0\",32)',vr:\"TM\",name:\"ExposureStartTime\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"INTEGRIS 1.0\",00)':{tag:'(0019,\"INTEGRIS 1.0\",00)',vr:\"LO\",name:\"APRName\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"INTEGRIS 1.0\",40)':{tag:'(0019,\"INTEGRIS 1.0\",40)',vr:\"DS\",name:\"FrameRate\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"INTEGRIS 1.0\",12)':{tag:'(0021,\"INTEGRIS 1.0\",12)',vr:\"IS\",name:\"ExposureNumber\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"INTEGRIS 1.0\",08)':{tag:'(0029,\"INTEGRIS 1.0\",08)',vr:\"IS\",name:\"NumberOfExposureResults\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"ISG shadow\",70)':{tag:'(0029,\"ISG shadow\",70)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"ISG shadow\",80)':{tag:'(0029,\"ISG shadow\",80)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"ISG shadow\",90)':{tag:'(0029,\"ISG shadow\",90)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"ISI\",01)':{tag:'(0009,\"ISI\",01)',vr:\"UN\",name:\"SIENETGeneralPurposeIMGEF\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"MERGE TECHNOLOGIES, INC.\",00)':{tag:'(0009,\"MERGE TECHNOLOGIES, INC.\",00)',vr:\"OB\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"OCULUS Optikgeraete GmbH\",1010)':{tag:'(0029,\"OCULUS Optikgeraete GmbH\",1010)',vr:\"OB\",name:\"OriginalMeasuringData\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"OCULUS Optikgeraete GmbH\",1012)':{tag:'(0029,\"OCULUS Optikgeraete GmbH\",1012)',vr:\"UL\",name:\"OriginalMeasuringDataLength\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"OCULUS Optikgeraete GmbH\",1020)':{tag:'(0029,\"OCULUS Optikgeraete GmbH\",1020)',vr:\"OB\",name:\"OriginalMeasuringRawData\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"OCULUS Optikgeraete GmbH\",1022)':{tag:'(0029,\"OCULUS Optikgeraete GmbH\",1022)',vr:\"UL\",name:\"OriginalMeasuringRawDataLength\",vm:\"1\",version:\"PrivateTag\"},'(0041,\"PAPYRUS 3.0\",00)':{tag:'(0041,\"PAPYRUS 3.0\",00)',vr:\"LT\",name:\"PapyrusComments\",vm:\"1\",version:\"PrivateTag\"},'(0041,\"PAPYRUS 3.0\",10)':{tag:'(0041,\"PAPYRUS 3.0\",10)',vr:\"SQ\",name:\"PointerSequence\",vm:\"1\",version:\"PrivateTag\"},'(0041,\"PAPYRUS 3.0\",11)':{tag:'(0041,\"PAPYRUS 3.0\",11)',vr:\"UL\",name:\"ImagePointer\",vm:\"1\",version:\"PrivateTag\"},'(0041,\"PAPYRUS 3.0\",12)':{tag:'(0041,\"PAPYRUS 3.0\",12)',vr:\"UL\",name:\"PixelOffset\",vm:\"1\",version:\"PrivateTag\"},'(0041,\"PAPYRUS 3.0\",13)':{tag:'(0041,\"PAPYRUS 3.0\",13)',vr:\"SQ\",name:\"ImageIdentifierSequence\",vm:\"1\",version:\"PrivateTag\"},'(0041,\"PAPYRUS 3.0\",14)':{tag:'(0041,\"PAPYRUS 3.0\",14)',vr:\"SQ\",name:\"ExternalFileReferenceSequence\",vm:\"1\",version:\"PrivateTag\"},'(0041,\"PAPYRUS 3.0\",15)':{tag:'(0041,\"PAPYRUS 3.0\",15)',vr:\"US\",name:\"NumberOfImages\",vm:\"1\",version:\"PrivateTag\"},'(0041,\"PAPYRUS 3.0\",21)':{tag:'(0041,\"PAPYRUS 3.0\",21)',vr:\"UI\",name:\"ReferencedSOPClassUID\",vm:\"1\",version:\"PrivateTag\"},'(0041,\"PAPYRUS 3.0\",22)':{tag:'(0041,\"PAPYRUS 3.0\",22)',vr:\"UI\",name:\"ReferencedSOPInstanceUID\",vm:\"1\",version:\"PrivateTag\"},'(0041,\"PAPYRUS 3.0\",31)':{tag:'(0041,\"PAPYRUS 3.0\",31)',vr:\"LT\",name:\"ReferencedFileName\",vm:\"1\",version:\"PrivateTag\"},'(0041,\"PAPYRUS 3.0\",32)':{tag:'(0041,\"PAPYRUS 3.0\",32)',vr:\"LT\",name:\"ReferencedFilePath\",vm:\"1-n\",version:\"PrivateTag\"},'(0041,\"PAPYRUS 3.0\",41)':{tag:'(0041,\"PAPYRUS 3.0\",41)',vr:\"UI\",name:\"ReferencedImageSOPClassUID\",vm:\"1\",version:\"PrivateTag\"},'(0041,\"PAPYRUS 3.0\",42)':{tag:'(0041,\"PAPYRUS 3.0\",42)',vr:\"UI\",name:\"ReferencedImageSOPInstanceUID\",vm:\"1\",version:\"PrivateTag\"},'(0041,\"PAPYRUS 3.0\",50)':{tag:'(0041,\"PAPYRUS 3.0\",50)',vr:\"SQ\",name:\"ImageSequence\",vm:\"1\",version:\"PrivateTag\"},'(6001-o-60ff,\"PAPYRUS 3.0\",00)':{tag:'(6001-o-60ff,\"PAPYRUS 3.0\",00)',vr:\"IS\",name:\"OverlayID\",vm:\"1\",version:\"PrivateTag\"},'(6001-o-60ff,\"PAPYRUS 3.0\",01)':{tag:'(6001-o-60ff,\"PAPYRUS 3.0\",01)',vr:\"LT\",name:\"LinkedOverlays\",vm:\"1-n\",version:\"PrivateTag\"},'(6001-o-60ff,\"PAPYRUS 3.0\",10)':{tag:'(6001-o-60ff,\"PAPYRUS 3.0\",10)',vr:\"US\",name:\"OverlayRows\",vm:\"1\",version:\"PrivateTag\"},'(6001-o-60ff,\"PAPYRUS 3.0\",11)':{tag:'(6001-o-60ff,\"PAPYRUS 3.0\",11)',vr:\"US\",name:\"OverlayColumns\",vm:\"1\",version:\"PrivateTag\"},'(6001-o-60ff,\"PAPYRUS 3.0\",40)':{tag:'(6001-o-60ff,\"PAPYRUS 3.0\",40)',vr:\"LO\",name:\"OverlayType\",vm:\"1\",version:\"PrivateTag\"},'(6001-o-60ff,\"PAPYRUS 3.0\",50)':{tag:'(6001-o-60ff,\"PAPYRUS 3.0\",50)',vr:\"US\",name:\"OverlayOrigin\",vm:\"1-n\",version:\"PrivateTag\"},'(6001-o-60ff,\"PAPYRUS 3.0\",60)':{tag:'(6001-o-60ff,\"PAPYRUS 3.0\",60)',vr:\"LO\",name:\"Editable\",vm:\"1\",version:\"PrivateTag\"},'(6001-o-60ff,\"PAPYRUS 3.0\",70)':{tag:'(6001-o-60ff,\"PAPYRUS 3.0\",70)',vr:\"LO\",name:\"OverlayFont\",vm:\"1\",version:\"PrivateTag\"},'(6001-o-60ff,\"PAPYRUS 3.0\",72)':{tag:'(6001-o-60ff,\"PAPYRUS 3.0\",72)',vr:\"LO\",name:\"OverlayStyle\",vm:\"1\",version:\"PrivateTag\"},'(6001-o-60ff,\"PAPYRUS 3.0\",74)':{tag:'(6001-o-60ff,\"PAPYRUS 3.0\",74)',vr:\"US\",name:\"OverlayFontSize\",vm:\"1\",version:\"PrivateTag\"},'(6001-o-60ff,\"PAPYRUS 3.0\",76)':{tag:'(6001-o-60ff,\"PAPYRUS 3.0\",76)',vr:\"LO\",name:\"OverlayColor\",vm:\"1\",version:\"PrivateTag\"},'(6001-o-60ff,\"PAPYRUS 3.0\",78)':{tag:'(6001-o-60ff,\"PAPYRUS 3.0\",78)',vr:\"US\",name:\"ShadowSize\",vm:\"1\",version:\"PrivateTag\"},'(6001-o-60ff,\"PAPYRUS 3.0\",80)':{tag:'(6001-o-60ff,\"PAPYRUS 3.0\",80)',vr:\"LO\",name:\"FillPattern\",vm:\"1\",version:\"PrivateTag\"},'(6001-o-60ff,\"PAPYRUS 3.0\",82)':{tag:'(6001-o-60ff,\"PAPYRUS 3.0\",82)',vr:\"US\",name:\"OverlayPenSize\",vm:\"1\",version:\"PrivateTag\"},'(6001-o-60ff,\"PAPYRUS 3.0\",a0)':{tag:'(6001-o-60ff,\"PAPYRUS 3.0\",a0)',vr:\"LO\",name:\"Label\",vm:\"1\",version:\"PrivateTag\"},'(6001-o-60ff,\"PAPYRUS 3.0\",a2)':{tag:'(6001-o-60ff,\"PAPYRUS 3.0\",a2)',vr:\"LT\",name:\"PostItText\",vm:\"1\",version:\"PrivateTag\"},'(6001-o-60ff,\"PAPYRUS 3.0\",a4)':{tag:'(6001-o-60ff,\"PAPYRUS 3.0\",a4)',vr:\"US\",name:\"AnchorPoint\",vm:\"2\",version:\"PrivateTag\"},'(6001-o-60ff,\"PAPYRUS 3.0\",b0)':{tag:'(6001-o-60ff,\"PAPYRUS 3.0\",b0)',vr:\"LO\",name:\"ROIType\",vm:\"1\",version:\"PrivateTag\"},'(6001-o-60ff,\"PAPYRUS 3.0\",b2)':{tag:'(6001-o-60ff,\"PAPYRUS 3.0\",b2)',vr:\"LT\",name:\"AttachedAnnotation\",vm:\"1\",version:\"PrivateTag\"},'(6001-o-60ff,\"PAPYRUS 3.0\",ba)':{tag:'(6001-o-60ff,\"PAPYRUS 3.0\",ba)',vr:\"US\",name:\"ContourPoints\",vm:\"1-n\",version:\"PrivateTag\"},'(6001-o-60ff,\"PAPYRUS 3.0\",bc)':{tag:'(6001-o-60ff,\"PAPYRUS 3.0\",bc)',vr:\"US\",name:\"MaskData\",vm:\"1-n\",version:\"PrivateTag\"},'(6001-o-60ff,\"PAPYRUS 3.0\",c0)':{tag:'(6001-o-60ff,\"PAPYRUS 3.0\",c0)',vr:\"SQ\",name:\"UINOverlaySequence\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"PAPYRUS\",00)':{tag:'(0009,\"PAPYRUS\",00)',vr:\"LT\",name:\"OriginalFileName\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"PAPYRUS\",10)':{tag:'(0009,\"PAPYRUS\",10)',vr:\"LT\",name:\"OriginalFileLocation\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"PAPYRUS\",18)':{tag:'(0009,\"PAPYRUS\",18)',vr:\"LT\",name:\"DataSetIdentifier\",vm:\"1\",version:\"PrivateTag\"},'(0041,\"PAPYRUS\",00)':{tag:'(0041,\"PAPYRUS\",00)',vr:\"LT\",name:\"PapyrusComments\",vm:\"1-n\",version:\"PrivateTag\"},'(0041,\"PAPYRUS\",10)':{tag:'(0041,\"PAPYRUS\",10)',vr:\"US\",name:\"FolderType\",vm:\"1\",version:\"PrivateTag\"},'(0041,\"PAPYRUS\",11)':{tag:'(0041,\"PAPYRUS\",11)',vr:\"LT\",name:\"PatientFolderDataSetID\",vm:\"1\",version:\"PrivateTag\"},'(0041,\"PAPYRUS\",20)':{tag:'(0041,\"PAPYRUS\",20)',vr:\"LT\",name:\"FolderName\",vm:\"1\",version:\"PrivateTag\"},'(0041,\"PAPYRUS\",30)':{tag:'(0041,\"PAPYRUS\",30)',vr:\"DA\",name:\"CreationDate\",vm:\"1\",version:\"PrivateTag\"},'(0041,\"PAPYRUS\",32)':{tag:'(0041,\"PAPYRUS\",32)',vr:\"TM\",name:\"CreationTime\",vm:\"1\",version:\"PrivateTag\"},'(0041,\"PAPYRUS\",34)':{tag:'(0041,\"PAPYRUS\",34)',vr:\"DA\",name:\"ModifiedDate\",vm:\"1\",version:\"PrivateTag\"},'(0041,\"PAPYRUS\",36)':{tag:'(0041,\"PAPYRUS\",36)',vr:\"TM\",name:\"ModifiedTime\",vm:\"1\",version:\"PrivateTag\"},'(0041,\"PAPYRUS\",40)':{tag:'(0041,\"PAPYRUS\",40)',vr:\"LT\",name:\"OwnerName\",vm:\"1-n\",version:\"PrivateTag\"},'(0041,\"PAPYRUS\",50)':{tag:'(0041,\"PAPYRUS\",50)',vr:\"LT\",name:\"FolderStatus\",vm:\"1\",version:\"PrivateTag\"},'(0041,\"PAPYRUS\",60)':{tag:'(0041,\"PAPYRUS\",60)',vr:\"UL\",name:\"NumberOfImages\",vm:\"1\",version:\"PrivateTag\"},'(0041,\"PAPYRUS\",62)':{tag:'(0041,\"PAPYRUS\",62)',vr:\"UL\",name:\"NumberOfOther\",vm:\"1\",version:\"PrivateTag\"},'(0041,\"PAPYRUS\",a0)':{tag:'(0041,\"PAPYRUS\",a0)',vr:\"LT\",name:\"ExternalFolderElementDSID\",vm:\"1-n\",version:\"PrivateTag\"},'(0041,\"PAPYRUS\",a1)':{tag:'(0041,\"PAPYRUS\",a1)',vr:\"US\",name:\"ExternalFolderElementDataSetType\",vm:\"1-n\",version:\"PrivateTag\"},'(0041,\"PAPYRUS\",a2)':{tag:'(0041,\"PAPYRUS\",a2)',vr:\"LT\",name:\"ExternalFolderElementFileLocation\",vm:\"1-n\",version:\"PrivateTag\"},'(0041,\"PAPYRUS\",a3)':{tag:'(0041,\"PAPYRUS\",a3)',vr:\"UL\",name:\"ExternalFolderElementLength\",vm:\"1-n\",version:\"PrivateTag\"},'(0041,\"PAPYRUS\",b0)':{tag:'(0041,\"PAPYRUS\",b0)',vr:\"LT\",name:\"InternalFolderElementDSID\",vm:\"1-n\",version:\"PrivateTag\"},'(0041,\"PAPYRUS\",b1)':{tag:'(0041,\"PAPYRUS\",b1)',vr:\"US\",name:\"InternalFolderElementDataSetType\",vm:\"1-n\",version:\"PrivateTag\"},'(0041,\"PAPYRUS\",b2)':{tag:'(0041,\"PAPYRUS\",b2)',vr:\"UL\",name:\"InternalOffsetToDataSet\",vm:\"1-n\",version:\"PrivateTag\"},'(0041,\"PAPYRUS\",b3)':{tag:'(0041,\"PAPYRUS\",b3)',vr:\"UL\",name:\"InternalOffsetToImage\",vm:\"1-n\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",01)':{tag:'(2001,\"Philips Imaging DD 001\",01)',vr:\"FL\",name:\"ChemicalShift\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",02)':{tag:'(2001,\"Philips Imaging DD 001\",02)',vr:\"IS\",name:\"ChemicalShiftNumberMR\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",03)':{tag:'(2001,\"Philips Imaging DD 001\",03)',vr:\"FL\",name:\"DiffusionBFactor\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",04)':{tag:'(2001,\"Philips Imaging DD 001\",04)',vr:\"CS\",name:\"DiffusionDirection\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",06)':{tag:'(2001,\"Philips Imaging DD 001\",06)',vr:\"CS\",name:\"ImageEnhanced\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",07)':{tag:'(2001,\"Philips Imaging DD 001\",07)',vr:\"CS\",name:\"ImageTypeEDES\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",08)':{tag:'(2001,\"Philips Imaging DD 001\",08)',vr:\"IS\",name:\"PhaseNumber\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",09)':{tag:'(2001,\"Philips Imaging DD 001\",09)',vr:\"FL\",name:\"ImagePrepulseDelay\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",0a)':{tag:'(2001,\"Philips Imaging DD 001\",0a)',vr:\"IS\",name:\"SliceNumberMR\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",0b)':{tag:'(2001,\"Philips Imaging DD 001\",0b)',vr:\"CS\",name:\"SliceOrientation\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",0c)':{tag:'(2001,\"Philips Imaging DD 001\",0c)',vr:\"CS\",name:\"ArrhythmiaRejection\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",0e)':{tag:'(2001,\"Philips Imaging DD 001\",0e)',vr:\"CS\",name:\"CardiacCycled\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",0f)':{tag:'(2001,\"Philips Imaging DD 001\",0f)',vr:\"SS\",name:\"CardiacGateWidth\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",10)':{tag:'(2001,\"Philips Imaging DD 001\",10)',vr:\"CS\",name:\"CardiacSync\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",11)':{tag:'(2001,\"Philips Imaging DD 001\",11)',vr:\"FL\",name:\"DiffusionEchoTime\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",12)':{tag:'(2001,\"Philips Imaging DD 001\",12)',vr:\"CS\",name:\"DynamicSeries\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",13)':{tag:'(2001,\"Philips Imaging DD 001\",13)',vr:\"SL\",name:\"EPIFactor\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",14)':{tag:'(2001,\"Philips Imaging DD 001\",14)',vr:\"SL\",name:\"NumberOfEchoes\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",15)':{tag:'(2001,\"Philips Imaging DD 001\",15)',vr:\"SS\",name:\"NumberOfLocations\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",16)':{tag:'(2001,\"Philips Imaging DD 001\",16)',vr:\"SS\",name:\"NumberOfPCDirections\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",17)':{tag:'(2001,\"Philips Imaging DD 001\",17)',vr:\"SL\",name:\"NumberOfPhasesMR\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",18)':{tag:'(2001,\"Philips Imaging DD 001\",18)',vr:\"SL\",name:\"NumberOfSlicesMR\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",19)':{tag:'(2001,\"Philips Imaging DD 001\",19)',vr:\"CS\",name:\"PartialMatrixScanned\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",1a)':{tag:'(2001,\"Philips Imaging DD 001\",1a)',vr:\"FL\",name:\"PCVelocity\",vm:\"1-n\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",1b)':{tag:'(2001,\"Philips Imaging DD 001\",1b)',vr:\"FL\",name:\"PrepulseDelay\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",1c)':{tag:'(2001,\"Philips Imaging DD 001\",1c)',vr:\"CS\",name:\"PrepulseType\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",1d)':{tag:'(2001,\"Philips Imaging DD 001\",1d)',vr:\"IS\",name:\"ReconstructionNumberMR\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",1f)':{tag:'(2001,\"Philips Imaging DD 001\",1f)',vr:\"CS\",name:\"RespirationSync\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",20)':{tag:'(2001,\"Philips Imaging DD 001\",20)',vr:\"LO\",name:\"ScanningTechnique\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",21)':{tag:'(2001,\"Philips Imaging DD 001\",21)',vr:\"CS\",name:\"SPIR\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",22)':{tag:'(2001,\"Philips Imaging DD 001\",22)',vr:\"FL\",name:\"WaterFatShift\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",23)':{tag:'(2001,\"Philips Imaging DD 001\",23)',vr:\"DS\",name:\"FlipAnglePhilips\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",24)':{tag:'(2001,\"Philips Imaging DD 001\",24)',vr:\"CS\",name:\"SeriesIsInteractive\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",25)':{tag:'(2001,\"Philips Imaging DD 001\",25)',vr:\"SH\",name:\"EchoTimeDisplayMR\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",26)':{tag:'(2001,\"Philips Imaging DD 001\",26)',vr:\"CS\",name:\"PresentationStateSubtractionActive\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",2d)':{tag:'(2001,\"Philips Imaging DD 001\",2d)',vr:\"SS\",name:\"StackNumberOfSlices\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",32)':{tag:'(2001,\"Philips Imaging DD 001\",32)',vr:\"FL\",name:\"StackRadialAngle\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",33)':{tag:'(2001,\"Philips Imaging DD 001\",33)',vr:\"CS\",name:\"StackRadialAxis\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",35)':{tag:'(2001,\"Philips Imaging DD 001\",35)',vr:\"SS\",name:\"StackSliceNumber\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",36)':{tag:'(2001,\"Philips Imaging DD 001\",36)',vr:\"CS\",name:\"StackType\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",3f)':{tag:'(2001,\"Philips Imaging DD 001\",3f)',vr:\"CS\",name:\"ZoomMode\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",58)':{tag:'(2001,\"Philips Imaging DD 001\",58)',vr:\"UL\",name:\"ContrastTransferTaste\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",5f)':{tag:'(2001,\"Philips Imaging DD 001\",5f)',vr:\"SQ\",name:\"StackSequence\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",60)':{tag:'(2001,\"Philips Imaging DD 001\",60)',vr:\"SL\",name:\"NumberOfStacks\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",61)':{tag:'(2001,\"Philips Imaging DD 001\",61)',vr:\"CS\",name:\"SeriesTransmitted\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",62)':{tag:'(2001,\"Philips Imaging DD 001\",62)',vr:\"CS\",name:\"SeriesCommitted\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",63)':{tag:'(2001,\"Philips Imaging DD 001\",63)',vr:\"CS\",name:\"ExaminationSource\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",67)':{tag:'(2001,\"Philips Imaging DD 001\",67)',vr:\"CS\",name:\"LinearPresentationGLTrafoShapeSub\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",77)':{tag:'(2001,\"Philips Imaging DD 001\",77)',vr:\"CS\",name:\"GLTrafoType\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",7b)':{tag:'(2001,\"Philips Imaging DD 001\",7b)',vr:\"IS\",name:\"AcquisitionNumber\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",81)':{tag:'(2001,\"Philips Imaging DD 001\",81)',vr:\"IS\",name:\"NumberOfDynamicScans\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",9f)':{tag:'(2001,\"Philips Imaging DD 001\",9f)',vr:\"US\",name:\"PixelProcessingKernelSize\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",a1)':{tag:'(2001,\"Philips Imaging DD 001\",a1)',vr:\"CS\",name:\"IsRawImage\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",f1)':{tag:'(2001,\"Philips Imaging DD 001\",f1)',vr:\"FL\",name:\"ProspectiveMotionCorrection\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"Philips Imaging DD 001\",f2)':{tag:'(2001,\"Philips Imaging DD 001\",f2)',vr:\"FL\",name:\"RetrospectiveMotionCorrection\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",01)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",01)',vr:\"FL\",name:\"ChemicalShift\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",02)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",02)',vr:\"IS\",name:\"ChemicalShiftNumberMR\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",03)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",03)',vr:\"FL\",name:\"DiffusionBFactor\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",04)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",04)',vr:\"CS\",name:\"DiffusionDirection\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",06)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",06)',vr:\"CS\",name:\"ImageEnhanced\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",07)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",07)',vr:\"CS\",name:\"ImageTypeEDES\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",08)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",08)',vr:\"IS\",name:\"PhaseNumber\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",09)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",09)',vr:\"FL\",name:\"ImagePrepulseDelay\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",0a)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",0a)',vr:\"IS\",name:\"SliceNumberMR\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",0b)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",0b)',vr:\"CS\",name:\"SliceOrientation\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",0c)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",0c)',vr:\"CS\",name:\"ArrhythmiaRejection\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",0e)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",0e)',vr:\"CS\",name:\"CardiacCycled\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",0f)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",0f)',vr:\"SS\",name:\"CardiacGateWidth\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",10)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",10)',vr:\"CS\",name:\"CardiacSync\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",11)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",11)',vr:\"FL\",name:\"DiffusionEchoTime\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",12)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",12)',vr:\"CS\",name:\"DynamicSeries\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",13)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",13)',vr:\"SL\",name:\"EPIFactor\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",14)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",14)',vr:\"SL\",name:\"NumberOfEchoes\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",15)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",15)',vr:\"SS\",name:\"NumberOfLocations\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",16)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",16)',vr:\"SS\",name:\"NumberOfPCDirections\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",17)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",17)',vr:\"SL\",name:\"NumberOfPhasesMR\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",18)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",18)',vr:\"SL\",name:\"NumberOfSlicesMR\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",19)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",19)',vr:\"CS\",name:\"PartialMatrixScanned\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",1a)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",1a)',vr:\"FL\",name:\"PCVelocity\",vm:\"1-n\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",1b)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",1b)',vr:\"FL\",name:\"PrepulseDelay\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",1c)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",1c)',vr:\"CS\",name:\"PrepulseType\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",1d)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",1d)',vr:\"IS\",name:\"ReconstructionNumberMR\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",1f)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",1f)',vr:\"CS\",name:\"RespirationSync\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",20)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",20)',vr:\"LO\",name:\"ScanningTechnique\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",21)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",21)',vr:\"CS\",name:\"SPIR\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",22)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",22)',vr:\"FL\",name:\"WaterFatShift\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",23)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",23)',vr:\"DS\",name:\"FlipAnglePhilips\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",24)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",24)',vr:\"CS\",name:\"SeriesIsInteractive\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",25)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",25)',vr:\"SH\",name:\"EchoTimeDisplayMR\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",26)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",26)',vr:\"CS\",name:\"PresentationStateSubtractionActive\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",2d)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",2d)',vr:\"SS\",name:\"StackNumberOfSlices\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",32)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",32)',vr:\"FL\",name:\"StackRadialAngle\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",33)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",33)',vr:\"CS\",name:\"StackRadialAxis\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",35)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",35)',vr:\"SS\",name:\"StackSliceNumber\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",36)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",36)',vr:\"CS\",name:\"StackType\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",3f)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",3f)',vr:\"CS\",name:\"ZoomMode\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",58)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",58)',vr:\"UL\",name:\"ContrastTransferTaste\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",5f)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",5f)',vr:\"SQ\",name:\"StackSequence\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",60)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",60)',vr:\"SL\",name:\"NumberOfStacks\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",61)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",61)',vr:\"CS\",name:\"SeriesTransmitted\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",62)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",62)',vr:\"CS\",name:\"SeriesCommitted\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",63)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",63)',vr:\"CS\",name:\"ExaminationSource\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",67)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",67)',vr:\"CS\",name:\"LinearPresentationGLTrafoShapeSub\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",77)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",77)',vr:\"CS\",name:\"GLTrafoType\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",7b)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",7b)',vr:\"IS\",name:\"AcquisitionNumber\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",81)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",81)',vr:\"IS\",name:\"NumberOfDynamicScans\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",9f)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",9f)',vr:\"US\",name:\"PixelProcessingKernelSize\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",a1)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",a1)',vr:\"CS\",name:\"IsRawImage\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",f1)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",f1)',vr:\"FL\",name:\"ProspectiveMotionCorrection\",vm:\"1\",version:\"PrivateTag\"},'(2001,\"PHILIPS IMAGING DD 001\",f2)':{tag:'(2001,\"PHILIPS IMAGING DD 001\",f2)',vr:\"FL\",name:\"RetrospectiveMotionCorrection\",vm:\"1\",version:\"PrivateTag\"},'(2005,\"Philips MR Imaging DD 001\",05)':{tag:'(2005,\"Philips MR Imaging DD 001\",05)',vr:\"CS\",name:\"SynergyReconstructionType\",vm:\"1\",version:\"PrivateTag\"},'(2005,\"Philips MR Imaging DD 001\",1e)':{tag:'(2005,\"Philips MR Imaging DD 001\",1e)',vr:\"SH\",name:\"MIPProtocol\",vm:\"1\",version:\"PrivateTag\"},'(2005,\"Philips MR Imaging DD 001\",1f)':{tag:'(2005,\"Philips MR Imaging DD 001\",1f)',vr:\"SH\",name:\"MPRProtocol\",vm:\"1\",version:\"PrivateTag\"},'(2005,\"Philips MR Imaging DD 001\",20)':{tag:'(2005,\"Philips MR Imaging DD 001\",20)',vr:\"SL\",name:\"NumberOfChemicalShifts\",vm:\"1\",version:\"PrivateTag\"},'(2005,\"Philips MR Imaging DD 001\",2d)':{tag:'(2005,\"Philips MR Imaging DD 001\",2d)',vr:\"SS\",name:\"NumberOfStackSlices\",vm:\"1\",version:\"PrivateTag\"},'(2005,\"Philips MR Imaging DD 001\",83)':{tag:'(2005,\"Philips MR Imaging DD 001\",83)',vr:\"SQ\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(2005,\"Philips MR Imaging DD 001\",a1)':{tag:'(2005,\"Philips MR Imaging DD 001\",a1)',vr:\"CS\",name:\"SyncraScanType\",vm:\"1\",version:\"PrivateTag\"},'(2005,\"Philips MR Imaging DD 001\",b0)':{tag:'(2005,\"Philips MR Imaging DD 001\",b0)',vr:\"FL\",name:\"DiffusionDirectionRL\",vm:\"1\",version:\"PrivateTag\"},'(2005,\"Philips MR Imaging DD 001\",b1)':{tag:'(2005,\"Philips MR Imaging DD 001\",b1)',vr:\"FL\",name:\"DiffusionDirectionAP\",vm:\"1\",version:\"PrivateTag\"},'(2005,\"Philips MR Imaging DD 001\",b2)':{tag:'(2005,\"Philips MR Imaging DD 001\",b2)',vr:\"FL\",name:\"DiffusionDirectionFH\",vm:\"1\",version:\"PrivateTag\"},'(2005,\"Philips MR Imaging DD 005\",02)':{tag:'(2005,\"Philips MR Imaging DD 005\",02)',vr:\"SQ\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(2005,\"PHILIPS MR IMAGING DD 001\",05)':{tag:'(2005,\"PHILIPS MR IMAGING DD 001\",05)',vr:\"CS\",name:\"SynergyReconstructionType\",vm:\"1\",version:\"PrivateTag\"},'(2005,\"PHILIPS MR IMAGING DD 001\",1e)':{tag:'(2005,\"PHILIPS MR IMAGING DD 001\",1e)',vr:\"SH\",name:\"MIPProtocol\",vm:\"1\",version:\"PrivateTag\"},'(2005,\"PHILIPS MR IMAGING DD 001\",1f)':{tag:'(2005,\"PHILIPS MR IMAGING DD 001\",1f)',vr:\"SH\",name:\"MPRProtocol\",vm:\"1\",version:\"PrivateTag\"},'(2005,\"PHILIPS MR IMAGING DD 001\",20)':{tag:'(2005,\"PHILIPS MR IMAGING DD 001\",20)',vr:\"SL\",name:\"NumberOfChemicalShifts\",vm:\"1\",version:\"PrivateTag\"},'(2005,\"PHILIPS MR IMAGING DD 001\",2d)':{tag:'(2005,\"PHILIPS MR IMAGING DD 001\",2d)',vr:\"SS\",name:\"NumberOfStackSlices\",vm:\"1\",version:\"PrivateTag\"},'(2005,\"PHILIPS MR IMAGING DD 001\",83)':{tag:'(2005,\"PHILIPS MR IMAGING DD 001\",83)',vr:\"SQ\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(2005,\"PHILIPS MR IMAGING DD 001\",a1)':{tag:'(2005,\"PHILIPS MR IMAGING DD 001\",a1)',vr:\"CS\",name:\"SyncraScanType\",vm:\"1\",version:\"PrivateTag\"},'(2005,\"PHILIPS MR IMAGING DD 001\",b0)':{tag:'(2005,\"PHILIPS MR IMAGING DD 001\",b0)',vr:\"FL\",name:\"DiffusionDirectionRL\",vm:\"1\",version:\"PrivateTag\"},'(2005,\"PHILIPS MR IMAGING DD 001\",b1)':{tag:'(2005,\"PHILIPS MR IMAGING DD 001\",b1)',vr:\"FL\",name:\"DiffusionDirectionAP\",vm:\"1\",version:\"PrivateTag\"},'(2005,\"PHILIPS MR IMAGING DD 001\",b2)':{tag:'(2005,\"PHILIPS MR IMAGING DD 001\",b2)',vr:\"FL\",name:\"DiffusionDirectionFH\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR R5.5/PART\",1000)':{tag:'(0019,\"PHILIPS MR R5.5/PART\",1000)',vr:\"DS\",name:\"FieldOfView\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR R5.6/PART\",1000)':{tag:'(0019,\"PHILIPS MR R5.6/PART\",1000)',vr:\"DS\",name:\"FieldOfView\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",01)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",01)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",02)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",02)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",03)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",03)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",04)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",04)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",05)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",05)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",06)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",06)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",07)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",07)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",08)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",08)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",09)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",09)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",10)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",10)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",12)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",12)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",13)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",13)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",14)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",14)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",15)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",15)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",16)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",16)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",17)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",17)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",18)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",18)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",20)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",20)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",21)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",21)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",22)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",22)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",23)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",23)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",24)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",24)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",25)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",25)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",26)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",26)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",27)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",27)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",28)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",28)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",29)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",29)',vr:\"IS\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",31)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",31)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",32)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",32)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",41)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",41)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",42)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",42)',vr:\"IS\",name:\"Unknown\",vm:\"2\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",43)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",43)',vr:\"IS\",name:\"Unknown\",vm:\"2\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",45)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",45)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",46)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",46)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",47)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",47)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",48)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",48)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",49)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",49)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",50)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",50)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",60)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",60)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",61)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",61)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",70)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",70)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",71)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",71)',vr:\"IS\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",72)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",72)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",73)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",73)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",74)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",74)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",76)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",76)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",77)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",77)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",78)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",78)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",79)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",79)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR SPECTRO;1\",80)':{tag:'(0019,\"PHILIPS MR SPECTRO;1\",80)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"PHILIPS MR\",10)':{tag:'(0009,\"PHILIPS MR\",10)',vr:\"LO\",name:\"SPIRelease\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"PHILIPS MR\",12)':{tag:'(0009,\"PHILIPS MR\",12)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/LAST\",09)':{tag:'(0019,\"PHILIPS MR/LAST\",09)',vr:\"DS\",name:\"MainMagneticField\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/LAST\",0e)':{tag:'(0019,\"PHILIPS MR/LAST\",0e)',vr:\"IS\",name:\"FlowCompensation\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/LAST\",b1)':{tag:'(0019,\"PHILIPS MR/LAST\",b1)',vr:\"IS\",name:\"MinimumRRInterval\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/LAST\",b2)':{tag:'(0019,\"PHILIPS MR/LAST\",b2)',vr:\"IS\",name:\"MaximumRRInterval\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/LAST\",b3)':{tag:'(0019,\"PHILIPS MR/LAST\",b3)',vr:\"IS\",name:\"NumberOfRejections\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/LAST\",b4)':{tag:'(0019,\"PHILIPS MR/LAST\",b4)',vr:\"IS\",name:\"NumberOfRRIntervals\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/LAST\",b5)':{tag:'(0019,\"PHILIPS MR/LAST\",b5)',vr:\"IS\",name:\"ArrhythmiaRejection\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/LAST\",c0)':{tag:'(0019,\"PHILIPS MR/LAST\",c0)',vr:\"DS\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/LAST\",c6)':{tag:'(0019,\"PHILIPS MR/LAST\",c6)',vr:\"IS\",name:\"CycledMultipleSlice\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/LAST\",ce)':{tag:'(0019,\"PHILIPS MR/LAST\",ce)',vr:\"IS\",name:\"REST\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/LAST\",d5)':{tag:'(0019,\"PHILIPS MR/LAST\",d5)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/LAST\",d6)':{tag:'(0019,\"PHILIPS MR/LAST\",d6)',vr:\"IS\",name:\"FourierInterpolation\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/LAST\",d9)':{tag:'(0019,\"PHILIPS MR/LAST\",d9)',vr:\"IS\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/LAST\",e0)':{tag:'(0019,\"PHILIPS MR/LAST\",e0)',vr:\"IS\",name:\"Prepulse\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/LAST\",e1)':{tag:'(0019,\"PHILIPS MR/LAST\",e1)',vr:\"DS\",name:\"PrepulseDelay\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/LAST\",e2)':{tag:'(0019,\"PHILIPS MR/LAST\",e2)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/LAST\",e3)':{tag:'(0019,\"PHILIPS MR/LAST\",e3)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/LAST\",f0)':{tag:'(0019,\"PHILIPS MR/LAST\",f0)',vr:\"LT\",name:\"WSProtocolString1\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/LAST\",f1)':{tag:'(0019,\"PHILIPS MR/LAST\",f1)',vr:\"LT\",name:\"WSProtocolString2\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/LAST\",f2)':{tag:'(0019,\"PHILIPS MR/LAST\",f2)',vr:\"LT\",name:\"WSProtocolString3\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/LAST\",f3)':{tag:'(0019,\"PHILIPS MR/LAST\",f3)',vr:\"LT\",name:\"WSProtocolString4\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"PHILIPS MR/LAST\",00)':{tag:'(0021,\"PHILIPS MR/LAST\",00)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"PHILIPS MR/LAST\",10)':{tag:'(0021,\"PHILIPS MR/LAST\",10)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"PHILIPS MR/LAST\",20)':{tag:'(0021,\"PHILIPS MR/LAST\",20)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"PHILIPS MR/LAST\",21)':{tag:'(0021,\"PHILIPS MR/LAST\",21)',vr:\"DS\",name:\"SliceGap\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"PHILIPS MR/LAST\",22)':{tag:'(0021,\"PHILIPS MR/LAST\",22)',vr:\"DS\",name:\"StackRadialAngle\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"PHILIPS MR/LAST\",00)':{tag:'(0027,\"PHILIPS MR/LAST\",00)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"PHILIPS MR/LAST\",11)':{tag:'(0027,\"PHILIPS MR/LAST\",11)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0027,\"PHILIPS MR/LAST\",12)':{tag:'(0027,\"PHILIPS MR/LAST\",12)',vr:\"DS\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0027,\"PHILIPS MR/LAST\",13)':{tag:'(0027,\"PHILIPS MR/LAST\",13)',vr:\"DS\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0027,\"PHILIPS MR/LAST\",14)':{tag:'(0027,\"PHILIPS MR/LAST\",14)',vr:\"DS\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0027,\"PHILIPS MR/LAST\",15)':{tag:'(0027,\"PHILIPS MR/LAST\",15)',vr:\"DS\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0027,\"PHILIPS MR/LAST\",16)':{tag:'(0027,\"PHILIPS MR/LAST\",16)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"PHILIPS MR/LAST\",10)':{tag:'(0029,\"PHILIPS MR/LAST\",10)',vr:\"DS\",name:\"FPMin\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"PHILIPS MR/LAST\",20)':{tag:'(0029,\"PHILIPS MR/LAST\",20)',vr:\"DS\",name:\"FPMax\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"PHILIPS MR/LAST\",30)':{tag:'(0029,\"PHILIPS MR/LAST\",30)',vr:\"DS\",name:\"ScaledMinimum\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"PHILIPS MR/LAST\",40)':{tag:'(0029,\"PHILIPS MR/LAST\",40)',vr:\"DS\",name:\"ScaledMaximum\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"PHILIPS MR/LAST\",50)':{tag:'(0029,\"PHILIPS MR/LAST\",50)',vr:\"DS\",name:\"WindowMinimum\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"PHILIPS MR/LAST\",60)':{tag:'(0029,\"PHILIPS MR/LAST\",60)',vr:\"DS\",name:\"WindowMaximum\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"PHILIPS MR/LAST\",61)':{tag:'(0029,\"PHILIPS MR/LAST\",61)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"PHILIPS MR/LAST\",70)':{tag:'(0029,\"PHILIPS MR/LAST\",70)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"PHILIPS MR/LAST\",71)':{tag:'(0029,\"PHILIPS MR/LAST\",71)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"PHILIPS MR/LAST\",72)':{tag:'(0029,\"PHILIPS MR/LAST\",72)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"PHILIPS MR/LAST\",80)':{tag:'(0029,\"PHILIPS MR/LAST\",80)',vr:\"IS\",name:\"ViewCenter\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"PHILIPS MR/LAST\",81)':{tag:'(0029,\"PHILIPS MR/LAST\",81)',vr:\"IS\",name:\"ViewSize\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"PHILIPS MR/LAST\",82)':{tag:'(0029,\"PHILIPS MR/LAST\",82)',vr:\"IS\",name:\"ViewZoom\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"PHILIPS MR/LAST\",83)':{tag:'(0029,\"PHILIPS MR/LAST\",83)',vr:\"IS\",name:\"ViewTransform\",vm:\"1\",version:\"PrivateTag\"},'(6001,\"PHILIPS MR/LAST\",00)':{tag:'(6001,\"PHILIPS MR/LAST\",00)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",1000)':{tag:'(0019,\"PHILIPS MR/PART\",1000)',vr:\"DS\",name:\"FieldOfView\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",1005)':{tag:'(0019,\"PHILIPS MR/PART\",1005)',vr:\"DS\",name:\"CCAngulation\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",1006)':{tag:'(0019,\"PHILIPS MR/PART\",1006)',vr:\"DS\",name:\"APAngulation\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",1007)':{tag:'(0019,\"PHILIPS MR/PART\",1007)',vr:\"DS\",name:\"LRAngulation\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",1008)':{tag:'(0019,\"PHILIPS MR/PART\",1008)',vr:\"IS\",name:\"PatientPosition\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",1009)':{tag:'(0019,\"PHILIPS MR/PART\",1009)',vr:\"IS\",name:\"PatientOrientation\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",100a)':{tag:'(0019,\"PHILIPS MR/PART\",100a)',vr:\"IS\",name:\"SliceOrientation\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",100b)':{tag:'(0019,\"PHILIPS MR/PART\",100b)',vr:\"DS\",name:\"LROffcenter\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",100c)':{tag:'(0019,\"PHILIPS MR/PART\",100c)',vr:\"DS\",name:\"CCOffcenter\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",100d)':{tag:'(0019,\"PHILIPS MR/PART\",100d)',vr:\"DS\",name:\"APOffcenter\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",100e)':{tag:'(0019,\"PHILIPS MR/PART\",100e)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",100f)':{tag:'(0019,\"PHILIPS MR/PART\",100f)',vr:\"IS\",name:\"NumberOfSlices\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",1010)':{tag:'(0019,\"PHILIPS MR/PART\",1010)',vr:\"DS\",name:\"SliceFactor\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",1011)':{tag:'(0019,\"PHILIPS MR/PART\",1011)',vr:\"DS\",name:\"EchoTimes\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",1015)':{tag:'(0019,\"PHILIPS MR/PART\",1015)',vr:\"IS\",name:\"DynamicStudy\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",1018)':{tag:'(0019,\"PHILIPS MR/PART\",1018)',vr:\"DS\",name:\"HeartbeatInterval\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",1019)':{tag:'(0019,\"PHILIPS MR/PART\",1019)',vr:\"DS\",name:\"RepetitionTimeFFE\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",101a)':{tag:'(0019,\"PHILIPS MR/PART\",101a)',vr:\"DS\",name:\"FFEFlipAngle\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",101b)':{tag:'(0019,\"PHILIPS MR/PART\",101b)',vr:\"IS\",name:\"NumberOfScans\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",1021)':{tag:'(0019,\"PHILIPS MR/PART\",1021)',vr:\"DS\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",1022)':{tag:'(0019,\"PHILIPS MR/PART\",1022)',vr:\"DS\",name:\"DynamicScanTimeBegin\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",1024)':{tag:'(0019,\"PHILIPS MR/PART\",1024)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",1064)':{tag:'(0019,\"PHILIPS MR/PART\",1064)',vr:\"DS\",name:\"RepetitionTimeSE\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",1065)':{tag:'(0019,\"PHILIPS MR/PART\",1065)',vr:\"DS\",name:\"RepetitionTimeIR\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",1069)':{tag:'(0019,\"PHILIPS MR/PART\",1069)',vr:\"IS\",name:\"NumberOfPhases\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",106a)':{tag:'(0019,\"PHILIPS MR/PART\",106a)',vr:\"IS\",name:\"CardiacFrequency\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",106b)':{tag:'(0019,\"PHILIPS MR/PART\",106b)',vr:\"DS\",name:\"InversionDelay\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",106c)':{tag:'(0019,\"PHILIPS MR/PART\",106c)',vr:\"DS\",name:\"GateDelay\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",106d)':{tag:'(0019,\"PHILIPS MR/PART\",106d)',vr:\"DS\",name:\"GateWidth\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",106e)':{tag:'(0019,\"PHILIPS MR/PART\",106e)',vr:\"DS\",name:\"TriggerDelayTime\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",1080)':{tag:'(0019,\"PHILIPS MR/PART\",1080)',vr:\"IS\",name:\"NumberOfChemicalShifts\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",1081)':{tag:'(0019,\"PHILIPS MR/PART\",1081)',vr:\"DS\",name:\"ChemicalShift\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",1084)':{tag:'(0019,\"PHILIPS MR/PART\",1084)',vr:\"IS\",name:\"NumberOfRows\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",1085)':{tag:'(0019,\"PHILIPS MR/PART\",1085)',vr:\"IS\",name:\"NumberOfSamples\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",1094)':{tag:'(0019,\"PHILIPS MR/PART\",1094)',vr:\"LO\",name:\"MagnetizationTransferContrast\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",1095)':{tag:'(0019,\"PHILIPS MR/PART\",1095)',vr:\"LO\",name:\"SpectralPresaturationWithInversionRecovery\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",1096)':{tag:'(0019,\"PHILIPS MR/PART\",1096)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",1097)':{tag:'(0019,\"PHILIPS MR/PART\",1097)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",10a0)':{tag:'(0019,\"PHILIPS MR/PART\",10a0)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",10a1)':{tag:'(0019,\"PHILIPS MR/PART\",10a1)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",10a3)':{tag:'(0019,\"PHILIPS MR/PART\",10a3)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",10a4)':{tag:'(0019,\"PHILIPS MR/PART\",10a4)',vr:\"CS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",10c8)':{tag:'(0019,\"PHILIPS MR/PART\",10c8)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",10c9)':{tag:'(0019,\"PHILIPS MR/PART\",10c9)',vr:\"IS\",name:\"FoldoverDirectionTransverse\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",10ca)':{tag:'(0019,\"PHILIPS MR/PART\",10ca)',vr:\"IS\",name:\"FoldoverDirectionSagittal\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",10cb)':{tag:'(0019,\"PHILIPS MR/PART\",10cb)',vr:\"IS\",name:\"FoldoverDirectionCoronal\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",10cc)':{tag:'(0019,\"PHILIPS MR/PART\",10cc)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",10cd)':{tag:'(0019,\"PHILIPS MR/PART\",10cd)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",10ce)':{tag:'(0019,\"PHILIPS MR/PART\",10ce)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",10cf)':{tag:'(0019,\"PHILIPS MR/PART\",10cf)',vr:\"IS\",name:\"NumberOfEchoes\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",10d0)':{tag:'(0019,\"PHILIPS MR/PART\",10d0)',vr:\"IS\",name:\"ScanResolution\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",10d2)':{tag:'(0019,\"PHILIPS MR/PART\",10d2)',vr:\"LO\",name:\"WaterFatShift\",vm:\"2\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",10d4)':{tag:'(0019,\"PHILIPS MR/PART\",10d4)',vr:\"IS\",name:\"ArtifactReduction\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",10d5)':{tag:'(0019,\"PHILIPS MR/PART\",10d5)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",10d6)':{tag:'(0019,\"PHILIPS MR/PART\",10d6)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",10d7)':{tag:'(0019,\"PHILIPS MR/PART\",10d7)',vr:\"DS\",name:\"ScanPercentage\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",10d8)':{tag:'(0019,\"PHILIPS MR/PART\",10d8)',vr:\"IS\",name:\"Halfscan\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",10d9)':{tag:'(0019,\"PHILIPS MR/PART\",10d9)',vr:\"IS\",name:\"EPIFactor\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",10da)':{tag:'(0019,\"PHILIPS MR/PART\",10da)',vr:\"IS\",name:\"TurboFactor\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",10db)':{tag:'(0019,\"PHILIPS MR/PART\",10db)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",10e0)':{tag:'(0019,\"PHILIPS MR/PART\",10e0)',vr:\"IS\",name:\"PercentageOfScanCompleted\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",10e1)':{tag:'(0019,\"PHILIPS MR/PART\",10e1)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",1100)':{tag:'(0019,\"PHILIPS MR/PART\",1100)',vr:\"IS\",name:\"NumberOfStacks\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",1101)':{tag:'(0019,\"PHILIPS MR/PART\",1101)',vr:\"IS\",name:\"StackType\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",1102)':{tag:'(0019,\"PHILIPS MR/PART\",1102)',vr:\"IS\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",110b)':{tag:'(0019,\"PHILIPS MR/PART\",110b)',vr:\"DS\",name:\"LROffcenter\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",110c)':{tag:'(0019,\"PHILIPS MR/PART\",110c)',vr:\"DS\",name:\"CCOffcenter\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",110d)':{tag:'(0019,\"PHILIPS MR/PART\",110d)',vr:\"DS\",name:\"APOffcenter\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",1145)':{tag:'(0019,\"PHILIPS MR/PART\",1145)',vr:\"IS\",name:\"ReconstructionResolution\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",11fc)':{tag:'(0019,\"PHILIPS MR/PART\",11fc)',vr:\"IS\",name:\"ResonanceFrequency\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",12c0)':{tag:'(0019,\"PHILIPS MR/PART\",12c0)',vr:\"DS\",name:\"TriggerDelayTimes\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",12e0)':{tag:'(0019,\"PHILIPS MR/PART\",12e0)',vr:\"IS\",name:\"PrepulseType\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",12e1)':{tag:'(0019,\"PHILIPS MR/PART\",12e1)',vr:\"DS\",name:\"PrepulseDelay\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS MR/PART\",12e3)':{tag:'(0019,\"PHILIPS MR/PART\",12e3)',vr:\"DS\",name:\"PhaseContrastVelocity\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"PHILIPS MR/PART\",1000)':{tag:'(0021,\"PHILIPS MR/PART\",1000)',vr:\"IS\",name:\"ReconstructionNumber\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"PHILIPS MR/PART\",1010)':{tag:'(0021,\"PHILIPS MR/PART\",1010)',vr:\"IS\",name:\"ImageType\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"PHILIPS MR/PART\",1020)':{tag:'(0021,\"PHILIPS MR/PART\",1020)',vr:\"IS\",name:\"SliceNumber\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"PHILIPS MR/PART\",1030)':{tag:'(0021,\"PHILIPS MR/PART\",1030)',vr:\"IS\",name:\"EchoNumber\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"PHILIPS MR/PART\",1031)':{tag:'(0021,\"PHILIPS MR/PART\",1031)',vr:\"DS\",name:\"PatientReferenceID\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"PHILIPS MR/PART\",1035)':{tag:'(0021,\"PHILIPS MR/PART\",1035)',vr:\"IS\",name:\"ChemicalShiftNumber\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"PHILIPS MR/PART\",1040)':{tag:'(0021,\"PHILIPS MR/PART\",1040)',vr:\"IS\",name:\"PhaseNumber\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"PHILIPS MR/PART\",1050)':{tag:'(0021,\"PHILIPS MR/PART\",1050)',vr:\"IS\",name:\"DynamicScanNumber\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"PHILIPS MR/PART\",1060)':{tag:'(0021,\"PHILIPS MR/PART\",1060)',vr:\"IS\",name:\"NumberOfRowsInObject\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"PHILIPS MR/PART\",1061)':{tag:'(0021,\"PHILIPS MR/PART\",1061)',vr:\"IS\",name:\"RowNumber\",vm:\"1-n\",version:\"PrivateTag\"},'(0021,\"PHILIPS MR/PART\",1062)':{tag:'(0021,\"PHILIPS MR/PART\",1062)',vr:\"IS\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0021,\"PHILIPS MR/PART\",1100)':{tag:'(0021,\"PHILIPS MR/PART\",1100)',vr:\"DA\",name:\"ScanDate\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"PHILIPS MR/PART\",1110)':{tag:'(0021,\"PHILIPS MR/PART\",1110)',vr:\"TM\",name:\"ScanTime\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"PHILIPS MR/PART\",1221)':{tag:'(0021,\"PHILIPS MR/PART\",1221)',vr:\"IS\",name:\"SliceGap\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"PHILIPS MR/PART\",00)':{tag:'(0029,\"PHILIPS MR/PART\",00)',vr:\"DS\",name:\"Unknown\",vm:\"2\",version:\"PrivateTag\"},'(0029,\"PHILIPS MR/PART\",04)':{tag:'(0029,\"PHILIPS MR/PART\",04)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"PHILIPS MR/PART\",10)':{tag:'(0029,\"PHILIPS MR/PART\",10)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"PHILIPS MR/PART\",11)':{tag:'(0029,\"PHILIPS MR/PART\",11)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"PHILIPS MR/PART\",20)':{tag:'(0029,\"PHILIPS MR/PART\",20)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"PHILIPS MR/PART\",31)':{tag:'(0029,\"PHILIPS MR/PART\",31)',vr:\"DS\",name:\"Unknown\",vm:\"2\",version:\"PrivateTag\"},'(0029,\"PHILIPS MR/PART\",32)':{tag:'(0029,\"PHILIPS MR/PART\",32)',vr:\"DS\",name:\"Unknown\",vm:\"2\",version:\"PrivateTag\"},'(0029,\"PHILIPS MR/PART\",c3)':{tag:'(0029,\"PHILIPS MR/PART\",c3)',vr:\"IS\",name:\"ScanResolution\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"PHILIPS MR/PART\",c4)':{tag:'(0029,\"PHILIPS MR/PART\",c4)',vr:\"IS\",name:\"FieldOfView\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"PHILIPS MR/PART\",d5)':{tag:'(0029,\"PHILIPS MR/PART\",d5)',vr:\"LT\",name:\"SliceThickness\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS-MR-1\",11)':{tag:'(0019,\"PHILIPS-MR-1\",11)',vr:\"IS\",name:\"ChemicalShiftNumber\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"PHILIPS-MR-1\",12)':{tag:'(0019,\"PHILIPS-MR-1\",12)',vr:\"IS\",name:\"PhaseNumber\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"PHILIPS-MR-1\",01)':{tag:'(0021,\"PHILIPS-MR-1\",01)',vr:\"IS\",name:\"ReconstructionNumber\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"PHILIPS-MR-1\",02)':{tag:'(0021,\"PHILIPS-MR-1\",02)',vr:\"IS\",name:\"SliceNumber\",vm:\"1\",version:\"PrivateTag\"},'(7001,\"Picker NM Private Group\",01)':{tag:'(7001,\"Picker NM Private Group\",01)',vr:\"UI\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(7001,\"Picker NM Private Group\",02)':{tag:'(7001,\"Picker NM Private Group\",02)',vr:\"OB\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CM VA0 ACQU\",10)':{tag:'(0019,\"SIEMENS CM VA0 ACQU\",10)',vr:\"LT\",name:\"ParameterFileName\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CM VA0 ACQU\",11)':{tag:'(0019,\"SIEMENS CM VA0 ACQU\",11)',vr:\"LO\",name:\"SequenceFileName\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CM VA0 ACQU\",12)':{tag:'(0019,\"SIEMENS CM VA0 ACQU\",12)',vr:\"LT\",name:\"SequenceFileOwner\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CM VA0 ACQU\",13)':{tag:'(0019,\"SIEMENS CM VA0 ACQU\",13)',vr:\"LT\",name:\"SequenceDescription\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CM VA0 ACQU\",14)':{tag:'(0019,\"SIEMENS CM VA0 ACQU\",14)',vr:\"LT\",name:\"EPIFileName\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIEMENS CM VA0 CMS\",00)':{tag:'(0009,\"SIEMENS CM VA0 CMS\",00)',vr:\"DS\",name:\"NumberOfMeasurements\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIEMENS CM VA0 CMS\",10)':{tag:'(0009,\"SIEMENS CM VA0 CMS\",10)',vr:\"LT\",name:\"StorageMode\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIEMENS CM VA0 CMS\",12)':{tag:'(0009,\"SIEMENS CM VA0 CMS\",12)',vr:\"UL\",name:\"EvaluationMaskImage\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIEMENS CM VA0 CMS\",26)':{tag:'(0009,\"SIEMENS CM VA0 CMS\",26)',vr:\"DA\",name:\"LastMoveDate\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIEMENS CM VA0 CMS\",27)':{tag:'(0009,\"SIEMENS CM VA0 CMS\",27)',vr:\"TM\",name:\"LastMoveTime\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS CM VA0 CMS\",0a)':{tag:'(0011,\"SIEMENS CM VA0 CMS\",0a)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS CM VA0 CMS\",10)':{tag:'(0011,\"SIEMENS CM VA0 CMS\",10)',vr:\"DA\",name:\"RegistrationDate\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS CM VA0 CMS\",11)':{tag:'(0011,\"SIEMENS CM VA0 CMS\",11)',vr:\"TM\",name:\"RegistrationTime\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS CM VA0 CMS\",22)':{tag:'(0011,\"SIEMENS CM VA0 CMS\",22)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS CM VA0 CMS\",23)':{tag:'(0011,\"SIEMENS CM VA0 CMS\",23)',vr:\"DS\",name:\"UsedPatientWeight\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS CM VA0 CMS\",40)':{tag:'(0011,\"SIEMENS CM VA0 CMS\",40)',vr:\"IS\",name:\"OrganCode\",vm:\"1\",version:\"PrivateTag\"},'(0013,\"SIEMENS CM VA0 CMS\",00)':{tag:'(0013,\"SIEMENS CM VA0 CMS\",00)',vr:\"LT\",name:\"ModifyingPhysician\",vm:\"1\",version:\"PrivateTag\"},'(0013,\"SIEMENS CM VA0 CMS\",10)':{tag:'(0013,\"SIEMENS CM VA0 CMS\",10)',vr:\"DA\",name:\"ModificationDate\",vm:\"1\",version:\"PrivateTag\"},'(0013,\"SIEMENS CM VA0 CMS\",12)':{tag:'(0013,\"SIEMENS CM VA0 CMS\",12)',vr:\"TM\",name:\"ModificationTime\",vm:\"1\",version:\"PrivateTag\"},'(0013,\"SIEMENS CM VA0 CMS\",20)':{tag:'(0013,\"SIEMENS CM VA0 CMS\",20)',vr:\"LO\",name:\"PatientName\",vm:\"1\",version:\"PrivateTag\"},'(0013,\"SIEMENS CM VA0 CMS\",22)':{tag:'(0013,\"SIEMENS CM VA0 CMS\",22)',vr:\"LO\",name:\"PatientId\",vm:\"1\",version:\"PrivateTag\"},'(0013,\"SIEMENS CM VA0 CMS\",30)':{tag:'(0013,\"SIEMENS CM VA0 CMS\",30)',vr:\"DA\",name:\"PatientBirthdate\",vm:\"1\",version:\"PrivateTag\"},'(0013,\"SIEMENS CM VA0 CMS\",31)':{tag:'(0013,\"SIEMENS CM VA0 CMS\",31)',vr:\"DS\",name:\"PatientWeight\",vm:\"1\",version:\"PrivateTag\"},'(0013,\"SIEMENS CM VA0 CMS\",32)':{tag:'(0013,\"SIEMENS CM VA0 CMS\",32)',vr:\"LT\",name:\"PatientsMaidenName\",vm:\"1\",version:\"PrivateTag\"},'(0013,\"SIEMENS CM VA0 CMS\",33)':{tag:'(0013,\"SIEMENS CM VA0 CMS\",33)',vr:\"LT\",name:\"ReferringPhysician\",vm:\"1\",version:\"PrivateTag\"},'(0013,\"SIEMENS CM VA0 CMS\",34)':{tag:'(0013,\"SIEMENS CM VA0 CMS\",34)',vr:\"LT\",name:\"AdmittingDiagnosis\",vm:\"1\",version:\"PrivateTag\"},'(0013,\"SIEMENS CM VA0 CMS\",35)':{tag:'(0013,\"SIEMENS CM VA0 CMS\",35)',vr:\"LO\",name:\"PatientSex\",vm:\"1\",version:\"PrivateTag\"},'(0013,\"SIEMENS CM VA0 CMS\",40)':{tag:'(0013,\"SIEMENS CM VA0 CMS\",40)',vr:\"LO\",name:\"ProcedureDescription\",vm:\"1\",version:\"PrivateTag\"},'(0013,\"SIEMENS CM VA0 CMS\",42)':{tag:'(0013,\"SIEMENS CM VA0 CMS\",42)',vr:\"LO\",name:\"RestDirection\",vm:\"1\",version:\"PrivateTag\"},'(0013,\"SIEMENS CM VA0 CMS\",44)':{tag:'(0013,\"SIEMENS CM VA0 CMS\",44)',vr:\"LO\",name:\"PatientPosition\",vm:\"1\",version:\"PrivateTag\"},'(0013,\"SIEMENS CM VA0 CMS\",46)':{tag:'(0013,\"SIEMENS CM VA0 CMS\",46)',vr:\"LT\",name:\"ViewDirection\",vm:\"1\",version:\"PrivateTag\"},'(0013,\"SIEMENS CM VA0 CMS\",50)':{tag:'(0013,\"SIEMENS CM VA0 CMS\",50)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0013,\"SIEMENS CM VA0 CMS\",51)':{tag:'(0013,\"SIEMENS CM VA0 CMS\",51)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0013,\"SIEMENS CM VA0 CMS\",52)':{tag:'(0013,\"SIEMENS CM VA0 CMS\",52)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0013,\"SIEMENS CM VA0 CMS\",53)':{tag:'(0013,\"SIEMENS CM VA0 CMS\",53)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0013,\"SIEMENS CM VA0 CMS\",54)':{tag:'(0013,\"SIEMENS CM VA0 CMS\",54)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0013,\"SIEMENS CM VA0 CMS\",55)':{tag:'(0013,\"SIEMENS CM VA0 CMS\",55)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0013,\"SIEMENS CM VA0 CMS\",56)':{tag:'(0013,\"SIEMENS CM VA0 CMS\",56)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CM VA0 CMS\",10)':{tag:'(0019,\"SIEMENS CM VA0 CMS\",10)',vr:\"DS\",name:\"NetFrequency\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CM VA0 CMS\",20)':{tag:'(0019,\"SIEMENS CM VA0 CMS\",20)',vr:\"LT\",name:\"MeasurementMode\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CM VA0 CMS\",30)':{tag:'(0019,\"SIEMENS CM VA0 CMS\",30)',vr:\"LT\",name:\"CalculationMode\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CM VA0 CMS\",50)':{tag:'(0019,\"SIEMENS CM VA0 CMS\",50)',vr:\"IS\",name:\"NoiseLevel\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CM VA0 CMS\",60)':{tag:'(0019,\"SIEMENS CM VA0 CMS\",60)',vr:\"IS\",name:\"NumberOfDataBytes\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS CM VA0 CMS\",20)':{tag:'(0021,\"SIEMENS CM VA0 CMS\",20)',vr:\"DS\",name:\"FoV\",vm:\"2\",version:\"PrivateTag\"},'(0021,\"SIEMENS CM VA0 CMS\",22)':{tag:'(0021,\"SIEMENS CM VA0 CMS\",22)',vr:\"DS\",name:\"ImageMagnificationFactor\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS CM VA0 CMS\",24)':{tag:'(0021,\"SIEMENS CM VA0 CMS\",24)',vr:\"DS\",name:\"ImageScrollOffset\",vm:\"2\",version:\"PrivateTag\"},'(0021,\"SIEMENS CM VA0 CMS\",26)':{tag:'(0021,\"SIEMENS CM VA0 CMS\",26)',vr:\"IS\",name:\"ImagePixelOffset\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS CM VA0 CMS\",30)':{tag:'(0021,\"SIEMENS CM VA0 CMS\",30)',vr:\"LT\",name:\"ViewDirection\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS CM VA0 CMS\",32)':{tag:'(0021,\"SIEMENS CM VA0 CMS\",32)',vr:\"CS\",name:\"PatientRestDirection\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS CM VA0 CMS\",60)':{tag:'(0021,\"SIEMENS CM VA0 CMS\",60)',vr:\"DS\",name:\"ImagePosition\",vm:\"3\",version:\"PrivateTag\"},'(0021,\"SIEMENS CM VA0 CMS\",61)':{tag:'(0021,\"SIEMENS CM VA0 CMS\",61)',vr:\"DS\",name:\"ImageNormal\",vm:\"3\",version:\"PrivateTag\"},'(0021,\"SIEMENS CM VA0 CMS\",63)':{tag:'(0021,\"SIEMENS CM VA0 CMS\",63)',vr:\"DS\",name:\"ImageDistance\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS CM VA0 CMS\",65)':{tag:'(0021,\"SIEMENS CM VA0 CMS\",65)',vr:\"US\",name:\"ImagePositioningHistoryMask\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS CM VA0 CMS\",6a)':{tag:'(0021,\"SIEMENS CM VA0 CMS\",6a)',vr:\"DS\",name:\"ImageRow\",vm:\"3\",version:\"PrivateTag\"},'(0021,\"SIEMENS CM VA0 CMS\",6b)':{tag:'(0021,\"SIEMENS CM VA0 CMS\",6b)',vr:\"DS\",name:\"ImageColumn\",vm:\"3\",version:\"PrivateTag\"},'(0021,\"SIEMENS CM VA0 CMS\",70)':{tag:'(0021,\"SIEMENS CM VA0 CMS\",70)',vr:\"LT\",name:\"PatientOrientationSet1\",vm:\"3\",version:\"PrivateTag\"},'(0021,\"SIEMENS CM VA0 CMS\",71)':{tag:'(0021,\"SIEMENS CM VA0 CMS\",71)',vr:\"LT\",name:\"PatientOrientationSet2\",vm:\"3\",version:\"PrivateTag\"},'(0021,\"SIEMENS CM VA0 CMS\",80)':{tag:'(0021,\"SIEMENS CM VA0 CMS\",80)',vr:\"LT\",name:\"StudyName\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS CM VA0 CMS\",82)':{tag:'(0021,\"SIEMENS CM VA0 CMS\",82)',vr:\"LT\",name:\"StudyType\",vm:\"3\",version:\"PrivateTag\"},'(0029,\"SIEMENS CM VA0 CMS\",10)':{tag:'(0029,\"SIEMENS CM VA0 CMS\",10)',vr:\"LT\",name:\"WindowStyle\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS CM VA0 CMS\",11)':{tag:'(0029,\"SIEMENS CM VA0 CMS\",11)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS CM VA0 CMS\",13)':{tag:'(0029,\"SIEMENS CM VA0 CMS\",13)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS CM VA0 CMS\",20)':{tag:'(0029,\"SIEMENS CM VA0 CMS\",20)',vr:\"LT\",name:\"PixelQualityCode\",vm:\"3\",version:\"PrivateTag\"},'(0029,\"SIEMENS CM VA0 CMS\",22)':{tag:'(0029,\"SIEMENS CM VA0 CMS\",22)',vr:\"IS\",name:\"PixelQualityValue\",vm:\"3\",version:\"PrivateTag\"},'(0029,\"SIEMENS CM VA0 CMS\",50)':{tag:'(0029,\"SIEMENS CM VA0 CMS\",50)',vr:\"LT\",name:\"ArchiveCode\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS CM VA0 CMS\",51)':{tag:'(0029,\"SIEMENS CM VA0 CMS\",51)',vr:\"LT\",name:\"ExposureCode\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS CM VA0 CMS\",52)':{tag:'(0029,\"SIEMENS CM VA0 CMS\",52)',vr:\"LT\",name:\"SortCode\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS CM VA0 CMS\",53)':{tag:'(0029,\"SIEMENS CM VA0 CMS\",53)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS CM VA0 CMS\",60)':{tag:'(0029,\"SIEMENS CM VA0 CMS\",60)',vr:\"LT\",name:\"Splash\",vm:\"1\",version:\"PrivateTag\"},'(0051,\"SIEMENS CM VA0 CMS\",10)':{tag:'(0051,\"SIEMENS CM VA0 CMS\",10)',vr:\"LT\",name:\"ImageText\",vm:\"1-n\",version:\"PrivateTag\"},'(6021,\"SIEMENS CM VA0 CMS\",00)':{tag:'(6021,\"SIEMENS CM VA0 CMS\",00)',vr:\"LT\",name:\"ImageGraphicsFormatCode\",vm:\"1\",version:\"PrivateTag\"},'(6021,\"SIEMENS CM VA0 CMS\",10)':{tag:'(6021,\"SIEMENS CM VA0 CMS\",10)',vr:\"LT\",name:\"ImageGraphics\",vm:\"1\",version:\"PrivateTag\"},'(7fe1,\"SIEMENS CM VA0 CMS\",00)':{tag:'(7fe1,\"SIEMENS CM VA0 CMS\",00)',vr:\"OB\",name:\"BinaryData\",vm:\"1-n\",version:\"PrivateTag\"},'(0009,\"SIEMENS CM VA0 LAB\",10)':{tag:'(0009,\"SIEMENS CM VA0 LAB\",10)',vr:\"LT\",name:\"GeneratorIdentificationLabel\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIEMENS CM VA0 LAB\",11)':{tag:'(0009,\"SIEMENS CM VA0 LAB\",11)',vr:\"LT\",name:\"GantryIdentificationLabel\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIEMENS CM VA0 LAB\",12)':{tag:'(0009,\"SIEMENS CM VA0 LAB\",12)',vr:\"LT\",name:\"X-RayTubeIdentificationLabel\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIEMENS CM VA0 LAB\",13)':{tag:'(0009,\"SIEMENS CM VA0 LAB\",13)',vr:\"LT\",name:\"DetectorIdentificationLabel\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIEMENS CM VA0 LAB\",14)':{tag:'(0009,\"SIEMENS CM VA0 LAB\",14)',vr:\"LT\",name:\"DASIdentificationLabel\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIEMENS CM VA0 LAB\",15)':{tag:'(0009,\"SIEMENS CM VA0 LAB\",15)',vr:\"LT\",name:\"SMIIdentificationLabel\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIEMENS CM VA0 LAB\",16)':{tag:'(0009,\"SIEMENS CM VA0 LAB\",16)',vr:\"LT\",name:\"CPUIdentificationLabel\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIEMENS CM VA0 LAB\",20)':{tag:'(0009,\"SIEMENS CM VA0 LAB\",20)',vr:\"LT\",name:\"HeaderVersion\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS CSA HEADER\",08)':{tag:'(0029,\"SIEMENS CSA HEADER\",08)',vr:\"CS\",name:\"CSAImageHeaderType\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS CSA HEADER\",09)':{tag:'(0029,\"SIEMENS CSA HEADER\",09)',vr:\"LO\",name:\"CSAImageHeaderVersion\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS CSA HEADER\",10)':{tag:'(0029,\"SIEMENS CSA HEADER\",10)',vr:\"OB\",name:\"CSAImageHeaderInfo\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS CSA HEADER\",18)':{tag:'(0029,\"SIEMENS CSA HEADER\",18)',vr:\"CS\",name:\"CSASeriesHeaderType\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS CSA HEADER\",19)':{tag:'(0029,\"SIEMENS CSA HEADER\",19)',vr:\"LO\",name:\"CSASeriesHeaderVersion\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS CSA HEADER\",20)':{tag:'(0029,\"SIEMENS CSA HEADER\",20)',vr:\"OB\",name:\"CSASeriesHeaderInfo\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS CSA NON-IMAGE\",08)':{tag:'(0029,\"SIEMENS CSA NON-IMAGE\",08)',vr:\"CS\",name:\"CSADataType\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS CSA NON-IMAGE\",09)':{tag:'(0029,\"SIEMENS CSA NON-IMAGE\",09)',vr:\"LO\",name:\"CSADataVersion\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS CSA NON-IMAGE\",10)':{tag:'(0029,\"SIEMENS CSA NON-IMAGE\",10)',vr:\"OB\",name:\"CSADataInfo\",vm:\"1\",version:\"PrivateTag\"},'(7FE1,\"SIEMENS CSA NON-IMAGE\",10)':{tag:'(7FE1,\"SIEMENS CSA NON-IMAGE\",10)',vr:\"OB\",name:\"CSAData\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",10)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",10)',vr:\"DS\",name:\"DistanceSourceToSourceSideCollimator\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",11)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",11)',vr:\"DS\",name:\"DistanceSourceToDetectorSideCollimator\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",20)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",20)',vr:\"IS\",name:\"NumberOfPossibleChannels\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",21)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",21)',vr:\"IS\",name:\"MeanChannelNumber\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",22)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",22)',vr:\"DS\",name:\"DetectorSpacing\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",23)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",23)',vr:\"DS\",name:\"DetectorCenter\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",24)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",24)',vr:\"DS\",name:\"ReadingIntegrationTime\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",50)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",50)',vr:\"DS\",name:\"DetectorAlignment\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",52)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",52)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",54)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",54)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",60)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",60)',vr:\"DS\",name:\"FocusAlignment\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",65)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",65)',vr:\"UL\",name:\"FocalSpotDeflectionAmplitude\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",66)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",66)',vr:\"UL\",name:\"FocalSpotDeflectionPhase\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",67)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",67)',vr:\"UL\",name:\"FocalSpotDeflectionOffset\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",70)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",70)',vr:\"DS\",name:\"WaterScalingFactor\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",71)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",71)',vr:\"DS\",name:\"InterpolationFactor\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",80)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",80)',vr:\"LT\",name:\"PatientRegion\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",82)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",82)',vr:\"LT\",name:\"PatientPhaseOfLife\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",90)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",90)',vr:\"DS\",name:\"OsteoOffset\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",92)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",92)',vr:\"DS\",name:\"OsteoRegressionLineSlope\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",93)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",93)',vr:\"DS\",name:\"OsteoRegressionLineIntercept\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",94)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",94)',vr:\"DS\",name:\"OsteoStandardizationCode\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",96)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",96)',vr:\"IS\",name:\"OsteoPhantomNumber\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",A3)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",A3)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",A4)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",A4)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",A5)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",A5)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",A6)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",A6)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",A7)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",A7)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",A8)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",A8)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",A9)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",A9)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",AA)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",AA)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",AB)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",AB)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",AC)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",AC)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",AD)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",AD)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",AE)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",AE)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",AF)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",AF)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",B0)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",B0)',vr:\"DS\",name:\"FeedPerRotation\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",BD)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",BD)',vr:\"IS\",name:\"PulmoTriggerLevel\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",BE)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",BE)',vr:\"DS\",name:\"ExpiratoricReserveVolume\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",BF)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",BF)',vr:\"DS\",name:\"VitalCapacity\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",C0)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",C0)',vr:\"DS\",name:\"PulmoWater\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",C1)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",C1)',vr:\"DS\",name:\"PulmoAir\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",C2)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",C2)',vr:\"DA\",name:\"PulmoDate\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 COAD\",C3)':{tag:'(0019,\"SIEMENS CT VA0 COAD\",C3)',vr:\"TM\",name:\"PulmoTime\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 GEN\",10)':{tag:'(0019,\"SIEMENS CT VA0 GEN\",10)',vr:\"DS\",name:\"SourceSideCollimatorAperture\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 GEN\",11)':{tag:'(0019,\"SIEMENS CT VA0 GEN\",11)',vr:\"DS\",name:\"DetectorSideCollimatorAperture\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 GEN\",20)':{tag:'(0019,\"SIEMENS CT VA0 GEN\",20)',vr:\"DS\",name:\"ExposureTime\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 GEN\",21)':{tag:'(0019,\"SIEMENS CT VA0 GEN\",21)',vr:\"DS\",name:\"ExposureCurrent\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 GEN\",25)':{tag:'(0019,\"SIEMENS CT VA0 GEN\",25)',vr:\"DS\",name:\"KVPGeneratorPowerCurrent\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 GEN\",26)':{tag:'(0019,\"SIEMENS CT VA0 GEN\",26)',vr:\"DS\",name:\"GeneratorVoltage\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 GEN\",40)':{tag:'(0019,\"SIEMENS CT VA0 GEN\",40)',vr:\"UL\",name:\"MasterControlMask\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 GEN\",42)':{tag:'(0019,\"SIEMENS CT VA0 GEN\",42)',vr:\"US\",name:\"ProcessingMask\",vm:\"5\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 GEN\",44)':{tag:'(0019,\"SIEMENS CT VA0 GEN\",44)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 GEN\",45)':{tag:'(0019,\"SIEMENS CT VA0 GEN\",45)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 GEN\",62)':{tag:'(0019,\"SIEMENS CT VA0 GEN\",62)',vr:\"IS\",name:\"NumberOfVirtuellChannels\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 GEN\",70)':{tag:'(0019,\"SIEMENS CT VA0 GEN\",70)',vr:\"IS\",name:\"NumberOfReadings\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 GEN\",71)':{tag:'(0019,\"SIEMENS CT VA0 GEN\",71)',vr:\"LT\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 GEN\",74)':{tag:'(0019,\"SIEMENS CT VA0 GEN\",74)',vr:\"IS\",name:\"NumberOfProjections\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 GEN\",75)':{tag:'(0019,\"SIEMENS CT VA0 GEN\",75)',vr:\"IS\",name:\"NumberOfBytes\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 GEN\",80)':{tag:'(0019,\"SIEMENS CT VA0 GEN\",80)',vr:\"LT\",name:\"ReconstructionAlgorithmSet\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 GEN\",81)':{tag:'(0019,\"SIEMENS CT VA0 GEN\",81)',vr:\"LT\",name:\"ReconstructionAlgorithmIndex\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 GEN\",82)':{tag:'(0019,\"SIEMENS CT VA0 GEN\",82)',vr:\"LT\",name:\"RegenerationSoftwareVersion\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS CT VA0 GEN\",88)':{tag:'(0019,\"SIEMENS CT VA0 GEN\",88)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 GEN\",10)':{tag:'(0021,\"SIEMENS CT VA0 GEN\",10)',vr:\"IS\",name:\"RotationAngle\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 GEN\",11)':{tag:'(0021,\"SIEMENS CT VA0 GEN\",11)',vr:\"IS\",name:\"StartAngle\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 GEN\",20)':{tag:'(0021,\"SIEMENS CT VA0 GEN\",20)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 GEN\",30)':{tag:'(0021,\"SIEMENS CT VA0 GEN\",30)',vr:\"IS\",name:\"TopogramTubePosition\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 GEN\",32)':{tag:'(0021,\"SIEMENS CT VA0 GEN\",32)',vr:\"DS\",name:\"LengthOfTopogram\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 GEN\",34)':{tag:'(0021,\"SIEMENS CT VA0 GEN\",34)',vr:\"DS\",name:\"TopogramCorrectionFactor\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 GEN\",36)':{tag:'(0021,\"SIEMENS CT VA0 GEN\",36)',vr:\"DS\",name:\"MaximumTablePosition\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 GEN\",40)':{tag:'(0021,\"SIEMENS CT VA0 GEN\",40)',vr:\"IS\",name:\"TableMoveDirectionCode\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 GEN\",45)':{tag:'(0021,\"SIEMENS CT VA0 GEN\",45)',vr:\"IS\",name:\"VOIStartRow\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 GEN\",46)':{tag:'(0021,\"SIEMENS CT VA0 GEN\",46)',vr:\"IS\",name:\"VOIStopRow\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 GEN\",47)':{tag:'(0021,\"SIEMENS CT VA0 GEN\",47)',vr:\"IS\",name:\"VOIStartColumn\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 GEN\",48)':{tag:'(0021,\"SIEMENS CT VA0 GEN\",48)',vr:\"IS\",name:\"VOIStopColumn\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 GEN\",49)':{tag:'(0021,\"SIEMENS CT VA0 GEN\",49)',vr:\"IS\",name:\"VOIStartSlice\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 GEN\",4a)':{tag:'(0021,\"SIEMENS CT VA0 GEN\",4a)',vr:\"IS\",name:\"VOIStopSlice\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 GEN\",50)':{tag:'(0021,\"SIEMENS CT VA0 GEN\",50)',vr:\"IS\",name:\"VectorStartRow\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 GEN\",51)':{tag:'(0021,\"SIEMENS CT VA0 GEN\",51)',vr:\"IS\",name:\"VectorRowStep\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 GEN\",52)':{tag:'(0021,\"SIEMENS CT VA0 GEN\",52)',vr:\"IS\",name:\"VectorStartColumn\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 GEN\",53)':{tag:'(0021,\"SIEMENS CT VA0 GEN\",53)',vr:\"IS\",name:\"VectorColumnStep\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 GEN\",60)':{tag:'(0021,\"SIEMENS CT VA0 GEN\",60)',vr:\"IS\",name:\"RangeTypeCode\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 GEN\",62)':{tag:'(0021,\"SIEMENS CT VA0 GEN\",62)',vr:\"IS\",name:\"ReferenceTypeCode\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 GEN\",70)':{tag:'(0021,\"SIEMENS CT VA0 GEN\",70)',vr:\"DS\",name:\"ObjectOrientation\",vm:\"3\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 GEN\",72)':{tag:'(0021,\"SIEMENS CT VA0 GEN\",72)',vr:\"DS\",name:\"LightOrientation\",vm:\"3\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 GEN\",75)':{tag:'(0021,\"SIEMENS CT VA0 GEN\",75)',vr:\"DS\",name:\"LightBrightness\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 GEN\",76)':{tag:'(0021,\"SIEMENS CT VA0 GEN\",76)',vr:\"DS\",name:\"LightContrast\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 GEN\",7a)':{tag:'(0021,\"SIEMENS CT VA0 GEN\",7a)',vr:\"IS\",name:\"OverlayThreshold\",vm:\"2\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 GEN\",7b)':{tag:'(0021,\"SIEMENS CT VA0 GEN\",7b)',vr:\"IS\",name:\"SurfaceThreshold\",vm:\"2\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 GEN\",7c)':{tag:'(0021,\"SIEMENS CT VA0 GEN\",7c)',vr:\"IS\",name:\"GreyScaleThreshold\",vm:\"2\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 GEN\",a0)':{tag:'(0021,\"SIEMENS CT VA0 GEN\",a0)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 GEN\",a2)':{tag:'(0021,\"SIEMENS CT VA0 GEN\",a2)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 GEN\",a7)':{tag:'(0021,\"SIEMENS CT VA0 GEN\",a7)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIEMENS CT VA0 IDE\",10)':{tag:'(0009,\"SIEMENS CT VA0 IDE\",10)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIEMENS CT VA0 IDE\",30)':{tag:'(0009,\"SIEMENS CT VA0 IDE\",30)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIEMENS CT VA0 IDE\",31)':{tag:'(0009,\"SIEMENS CT VA0 IDE\",31)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIEMENS CT VA0 IDE\",32)':{tag:'(0009,\"SIEMENS CT VA0 IDE\",32)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIEMENS CT VA0 IDE\",34)':{tag:'(0009,\"SIEMENS CT VA0 IDE\",34)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIEMENS CT VA0 IDE\",40)':{tag:'(0009,\"SIEMENS CT VA0 IDE\",40)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIEMENS CT VA0 IDE\",42)':{tag:'(0009,\"SIEMENS CT VA0 IDE\",42)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIEMENS CT VA0 IDE\",50)':{tag:'(0009,\"SIEMENS CT VA0 IDE\",50)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIEMENS CT VA0 IDE\",51)':{tag:'(0009,\"SIEMENS CT VA0 IDE\",51)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIEMENS CT VA0 ORI\",20)':{tag:'(0009,\"SIEMENS CT VA0 ORI\",20)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIEMENS CT VA0 ORI\",30)':{tag:'(0009,\"SIEMENS CT VA0 ORI\",30)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(6021,\"SIEMENS CT VA0 OST\",00)':{tag:'(6021,\"SIEMENS CT VA0 OST\",00)',vr:\"LT\",name:\"OsteoContourComment\",vm:\"1\",version:\"PrivateTag\"},'(6021,\"SIEMENS CT VA0 OST\",10)':{tag:'(6021,\"SIEMENS CT VA0 OST\",10)',vr:\"US\",name:\"OsteoContourBuffer\",vm:\"256\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 RAW\",10)':{tag:'(0021,\"SIEMENS CT VA0 RAW\",10)',vr:\"UL\",name:\"CreationMask\",vm:\"2\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 RAW\",20)':{tag:'(0021,\"SIEMENS CT VA0 RAW\",20)',vr:\"UL\",name:\"EvaluationMask\",vm:\"2\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 RAW\",30)':{tag:'(0021,\"SIEMENS CT VA0 RAW\",30)',vr:\"US\",name:\"ExtendedProcessingMask\",vm:\"7\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 RAW\",40)':{tag:'(0021,\"SIEMENS CT VA0 RAW\",40)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 RAW\",41)':{tag:'(0021,\"SIEMENS CT VA0 RAW\",41)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 RAW\",42)':{tag:'(0021,\"SIEMENS CT VA0 RAW\",42)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 RAW\",43)':{tag:'(0021,\"SIEMENS CT VA0 RAW\",43)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 RAW\",44)':{tag:'(0021,\"SIEMENS CT VA0 RAW\",44)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0021,\"SIEMENS CT VA0 RAW\",50)':{tag:'(0021,\"SIEMENS CT VA0 RAW\",50)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIEMENS DICOM\",10)':{tag:'(0009,\"SIEMENS DICOM\",10)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIEMENS DICOM\",12)':{tag:'(0009,\"SIEMENS DICOM\",12)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",10)':{tag:'(0019,\"SIEMENS DLR.01\",10)',vr:\"LT\",name:\"MeasurementMode\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",11)':{tag:'(0019,\"SIEMENS DLR.01\",11)',vr:\"LT\",name:\"ImageType\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",15)':{tag:'(0019,\"SIEMENS DLR.01\",15)',vr:\"LT\",name:\"SoftwareVersion\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",20)':{tag:'(0019,\"SIEMENS DLR.01\",20)',vr:\"LT\",name:\"MPMCode\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",21)':{tag:'(0019,\"SIEMENS DLR.01\",21)',vr:\"LT\",name:\"Latitude\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",22)':{tag:'(0019,\"SIEMENS DLR.01\",22)',vr:\"LT\",name:\"Sensitivity\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",23)':{tag:'(0019,\"SIEMENS DLR.01\",23)',vr:\"LT\",name:\"EDR\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",24)':{tag:'(0019,\"SIEMENS DLR.01\",24)',vr:\"LT\",name:\"LFix\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",25)':{tag:'(0019,\"SIEMENS DLR.01\",25)',vr:\"LT\",name:\"SFix\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",26)':{tag:'(0019,\"SIEMENS DLR.01\",26)',vr:\"LT\",name:\"PresetMode\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",27)':{tag:'(0019,\"SIEMENS DLR.01\",27)',vr:\"LT\",name:\"Region\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",28)':{tag:'(0019,\"SIEMENS DLR.01\",28)',vr:\"LT\",name:\"Subregion\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",30)':{tag:'(0019,\"SIEMENS DLR.01\",30)',vr:\"LT\",name:\"Orientation\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",31)':{tag:'(0019,\"SIEMENS DLR.01\",31)',vr:\"LT\",name:\"MarkOnFilm\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",32)':{tag:'(0019,\"SIEMENS DLR.01\",32)',vr:\"LT\",name:\"RotationOnDRC\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",40)':{tag:'(0019,\"SIEMENS DLR.01\",40)',vr:\"LT\",name:\"ReaderType\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",41)':{tag:'(0019,\"SIEMENS DLR.01\",41)',vr:\"LT\",name:\"SubModality\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",42)':{tag:'(0019,\"SIEMENS DLR.01\",42)',vr:\"LT\",name:\"ReaderSerialNumber\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",50)':{tag:'(0019,\"SIEMENS DLR.01\",50)',vr:\"LT\",name:\"CassetteScale\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",51)':{tag:'(0019,\"SIEMENS DLR.01\",51)',vr:\"LT\",name:\"CassetteMatrix\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",52)':{tag:'(0019,\"SIEMENS DLR.01\",52)',vr:\"LT\",name:\"CassetteSubmatrix\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",53)':{tag:'(0019,\"SIEMENS DLR.01\",53)',vr:\"LT\",name:\"Barcode\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",60)':{tag:'(0019,\"SIEMENS DLR.01\",60)',vr:\"LT\",name:\"ContrastType\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",61)':{tag:'(0019,\"SIEMENS DLR.01\",61)',vr:\"LT\",name:\"RotationAmount\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",62)':{tag:'(0019,\"SIEMENS DLR.01\",62)',vr:\"LT\",name:\"RotationCenter\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",63)':{tag:'(0019,\"SIEMENS DLR.01\",63)',vr:\"LT\",name:\"DensityShift\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",64)':{tag:'(0019,\"SIEMENS DLR.01\",64)',vr:\"US\",name:\"FrequencyRank\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",65)':{tag:'(0019,\"SIEMENS DLR.01\",65)',vr:\"LT\",name:\"FrequencyEnhancement\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",66)':{tag:'(0019,\"SIEMENS DLR.01\",66)',vr:\"LT\",name:\"FrequencyType\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",67)':{tag:'(0019,\"SIEMENS DLR.01\",67)',vr:\"LT\",name:\"KernelLength\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",68)':{tag:'(0019,\"SIEMENS DLR.01\",68)',vr:\"UL\",name:\"KernelMode\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",69)':{tag:'(0019,\"SIEMENS DLR.01\",69)',vr:\"UL\",name:\"ConvolutionMode\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",70)':{tag:'(0019,\"SIEMENS DLR.01\",70)',vr:\"LT\",name:\"PLASource\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",71)':{tag:'(0019,\"SIEMENS DLR.01\",71)',vr:\"LT\",name:\"PLADestination\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",75)':{tag:'(0019,\"SIEMENS DLR.01\",75)',vr:\"LT\",name:\"UIDOriginalImage\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",76)':{tag:'(0019,\"SIEMENS DLR.01\",76)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",80)':{tag:'(0019,\"SIEMENS DLR.01\",80)',vr:\"LT\",name:\"ReaderHeader\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",90)':{tag:'(0019,\"SIEMENS DLR.01\",90)',vr:\"LT\",name:\"PLAOfSecondaryDestination\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",a0)':{tag:'(0019,\"SIEMENS DLR.01\",a0)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS DLR.01\",a1)':{tag:'(0019,\"SIEMENS DLR.01\",a1)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0041,\"SIEMENS DLR.01\",10)':{tag:'(0041,\"SIEMENS DLR.01\",10)',vr:\"US\",name:\"NumberOfHardcopies\",vm:\"1\",version:\"PrivateTag\"},'(0041,\"SIEMENS DLR.01\",20)':{tag:'(0041,\"SIEMENS DLR.01\",20)',vr:\"LT\",name:\"FilmFormat\",vm:\"1\",version:\"PrivateTag\"},'(0041,\"SIEMENS DLR.01\",30)':{tag:'(0041,\"SIEMENS DLR.01\",30)',vr:\"LT\",name:\"FilmSize\",vm:\"1\",version:\"PrivateTag\"},'(0041,\"SIEMENS DLR.01\",31)':{tag:'(0041,\"SIEMENS DLR.01\",31)',vr:\"LT\",name:\"FullFilmFormat\",vm:\"1\",version:\"PrivateTag\"},'(0003,\"SIEMENS ISI\",08)':{tag:'(0003,\"SIEMENS ISI\",08)',vr:\"US\",name:\"ISICommandField\",vm:\"1\",version:\"PrivateTag\"},'(0003,\"SIEMENS ISI\",11)':{tag:'(0003,\"SIEMENS ISI\",11)',vr:\"US\",name:\"AttachIDApplicationCode\",vm:\"1\",version:\"PrivateTag\"},'(0003,\"SIEMENS ISI\",12)':{tag:'(0003,\"SIEMENS ISI\",12)',vr:\"UL\",name:\"AttachIDMessageCount\",vm:\"1\",version:\"PrivateTag\"},'(0003,\"SIEMENS ISI\",13)':{tag:'(0003,\"SIEMENS ISI\",13)',vr:\"DA\",name:\"AttachIDDate\",vm:\"1\",version:\"PrivateTag\"},'(0003,\"SIEMENS ISI\",14)':{tag:'(0003,\"SIEMENS ISI\",14)',vr:\"TM\",name:\"AttachIDTime\",vm:\"1\",version:\"PrivateTag\"},'(0003,\"SIEMENS ISI\",20)':{tag:'(0003,\"SIEMENS ISI\",20)',vr:\"US\",name:\"MessageType\",vm:\"1\",version:\"PrivateTag\"},'(0003,\"SIEMENS ISI\",30)':{tag:'(0003,\"SIEMENS ISI\",30)',vr:\"DA\",name:\"MaxWaitingDate\",vm:\"1\",version:\"PrivateTag\"},'(0003,\"SIEMENS ISI\",31)':{tag:'(0003,\"SIEMENS ISI\",31)',vr:\"TM\",name:\"MaxWaitingTime\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIEMENS ISI\",01)':{tag:'(0009,\"SIEMENS ISI\",01)',vr:\"UN\",name:\"RISPatientInfoIMGEF\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS ISI\",03)':{tag:'(0011,\"SIEMENS ISI\",03)',vr:\"LT\",name:\"PatientUID\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS ISI\",04)':{tag:'(0011,\"SIEMENS ISI\",04)',vr:\"LT\",name:\"PatientID\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS ISI\",0a)':{tag:'(0011,\"SIEMENS ISI\",0a)',vr:\"LT\",name:\"CaseID\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS ISI\",22)':{tag:'(0011,\"SIEMENS ISI\",22)',vr:\"LT\",name:\"RequestID\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS ISI\",23)':{tag:'(0011,\"SIEMENS ISI\",23)',vr:\"LT\",name:\"ExaminationUID\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS ISI\",a1)':{tag:'(0011,\"SIEMENS ISI\",a1)',vr:\"DA\",name:\"PatientRegistrationDate\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS ISI\",a2)':{tag:'(0011,\"SIEMENS ISI\",a2)',vr:\"TM\",name:\"PatientRegistrationTime\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS ISI\",b0)':{tag:'(0011,\"SIEMENS ISI\",b0)',vr:\"LT\",name:\"PatientLastName\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS ISI\",b2)':{tag:'(0011,\"SIEMENS ISI\",b2)',vr:\"LT\",name:\"PatientFirstName\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS ISI\",b4)':{tag:'(0011,\"SIEMENS ISI\",b4)',vr:\"LT\",name:\"PatientHospitalStatus\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS ISI\",bc)':{tag:'(0011,\"SIEMENS ISI\",bc)',vr:\"TM\",name:\"CurrentLocationTime\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS ISI\",c0)':{tag:'(0011,\"SIEMENS ISI\",c0)',vr:\"LT\",name:\"PatientInsuranceStatus\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS ISI\",d0)':{tag:'(0011,\"SIEMENS ISI\",d0)',vr:\"LT\",name:\"PatientBillingType\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS ISI\",d2)':{tag:'(0011,\"SIEMENS ISI\",d2)',vr:\"LT\",name:\"PatientBillingAddress\",vm:\"1\",version:\"PrivateTag\"},'(0031,\"SIEMENS ISI\",12)':{tag:'(0031,\"SIEMENS ISI\",12)',vr:\"LT\",name:\"ExaminationReason\",vm:\"1\",version:\"PrivateTag\"},'(0031,\"SIEMENS ISI\",30)':{tag:'(0031,\"SIEMENS ISI\",30)',vr:\"DA\",name:\"RequestedDate\",vm:\"1\",version:\"PrivateTag\"},'(0031,\"SIEMENS ISI\",32)':{tag:'(0031,\"SIEMENS ISI\",32)',vr:\"TM\",name:\"WorklistRequestStartTime\",vm:\"1\",version:\"PrivateTag\"},'(0031,\"SIEMENS ISI\",33)':{tag:'(0031,\"SIEMENS ISI\",33)',vr:\"TM\",name:\"WorklistRequestEndTime\",vm:\"1\",version:\"PrivateTag\"},'(0031,\"SIEMENS ISI\",4a)':{tag:'(0031,\"SIEMENS ISI\",4a)',vr:\"TM\",name:\"RequestedTime\",vm:\"1\",version:\"PrivateTag\"},'(0031,\"SIEMENS ISI\",80)':{tag:'(0031,\"SIEMENS ISI\",80)',vr:\"LT\",name:\"RequestedLocation\",vm:\"1\",version:\"PrivateTag\"},'(0055,\"SIEMENS ISI\",46)':{tag:'(0055,\"SIEMENS ISI\",46)',vr:\"LT\",name:\"CurrentWard\",vm:\"1\",version:\"PrivateTag\"},'(0193,\"SIEMENS ISI\",02)':{tag:'(0193,\"SIEMENS ISI\",02)',vr:\"DS\",name:\"RISKey\",vm:\"1\",version:\"PrivateTag\"},'(0307,\"SIEMENS ISI\",01)':{tag:'(0307,\"SIEMENS ISI\",01)',vr:\"UN\",name:\"RISWorklistIMGEF\",vm:\"1\",version:\"PrivateTag\"},'(0309,\"SIEMENS ISI\",01)':{tag:'(0309,\"SIEMENS ISI\",01)',vr:\"UN\",name:\"RISReportIMGEF\",vm:\"1\",version:\"PrivateTag\"},'(4009,\"SIEMENS ISI\",01)':{tag:'(4009,\"SIEMENS ISI\",01)',vr:\"LT\",name:\"ReportID\",vm:\"1\",version:\"PrivateTag\"},'(4009,\"SIEMENS ISI\",20)':{tag:'(4009,\"SIEMENS ISI\",20)',vr:\"LT\",name:\"ReportStatus\",vm:\"1\",version:\"PrivateTag\"},'(4009,\"SIEMENS ISI\",30)':{tag:'(4009,\"SIEMENS ISI\",30)',vr:\"DA\",name:\"ReportCreationDate\",vm:\"1\",version:\"PrivateTag\"},'(4009,\"SIEMENS ISI\",70)':{tag:'(4009,\"SIEMENS ISI\",70)',vr:\"LT\",name:\"ReportApprovingPhysician\",vm:\"1\",version:\"PrivateTag\"},'(4009,\"SIEMENS ISI\",e0)':{tag:'(4009,\"SIEMENS ISI\",e0)',vr:\"LT\",name:\"ReportText\",vm:\"1\",version:\"PrivateTag\"},'(4009,\"SIEMENS ISI\",e1)':{tag:'(4009,\"SIEMENS ISI\",e1)',vr:\"LT\",name:\"ReportAuthor\",vm:\"1\",version:\"PrivateTag\"},'(4009,\"SIEMENS ISI\",e3)':{tag:'(4009,\"SIEMENS ISI\",e3)',vr:\"LT\",name:\"ReportingRadiologist\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MED DISPLAY\",04)':{tag:'(0029,\"SIEMENS MED DISPLAY\",04)',vr:\"LT\",name:\"PhotometricInterpretation\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MED DISPLAY\",10)':{tag:'(0029,\"SIEMENS MED DISPLAY\",10)',vr:\"US\",name:\"RowsOfSubmatrix\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MED DISPLAY\",11)':{tag:'(0029,\"SIEMENS MED DISPLAY\",11)',vr:\"US\",name:\"ColumnsOfSubmatrix\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MED DISPLAY\",20)':{tag:'(0029,\"SIEMENS MED DISPLAY\",20)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MED DISPLAY\",21)':{tag:'(0029,\"SIEMENS MED DISPLAY\",21)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MED DISPLAY\",50)':{tag:'(0029,\"SIEMENS MED DISPLAY\",50)',vr:\"US\",name:\"OriginOfSubmatrix\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MED DISPLAY\",99)':{tag:'(0029,\"SIEMENS MED DISPLAY\",99)',vr:\"LT\",name:\"ShutterType\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MED DISPLAY\",a0)':{tag:'(0029,\"SIEMENS MED DISPLAY\",a0)',vr:\"US\",name:\"RowsOfRectangularShutter\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MED DISPLAY\",a1)':{tag:'(0029,\"SIEMENS MED DISPLAY\",a1)',vr:\"US\",name:\"ColumnsOfRectangularShutter\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MED DISPLAY\",a2)':{tag:'(0029,\"SIEMENS MED DISPLAY\",a2)',vr:\"US\",name:\"OriginOfRectangularShutter\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MED DISPLAY\",b0)':{tag:'(0029,\"SIEMENS MED DISPLAY\",b0)',vr:\"US\",name:\"RadiusOfCircularShutter\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MED DISPLAY\",b2)':{tag:'(0029,\"SIEMENS MED DISPLAY\",b2)',vr:\"US\",name:\"OriginOfCircularShutter\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MED DISPLAY\",c1)':{tag:'(0029,\"SIEMENS MED DISPLAY\",c1)',vr:\"US\",name:\"ContourOfIrregularShutter\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MED HG\",10)':{tag:'(0029,\"SIEMENS MED HG\",10)',vr:\"US\",name:\"ListOfGroupNumbers\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MED HG\",15)':{tag:'(0029,\"SIEMENS MED HG\",15)',vr:\"LT\",name:\"ListOfShadowOwnerCodes\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MED HG\",20)':{tag:'(0029,\"SIEMENS MED HG\",20)',vr:\"US\",name:\"ListOfElementNumbers\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MED HG\",30)':{tag:'(0029,\"SIEMENS MED HG\",30)',vr:\"US\",name:\"ListOfTotalDisplayLength\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MED HG\",40)':{tag:'(0029,\"SIEMENS MED HG\",40)',vr:\"LT\",name:\"ListOfDisplayPrefix\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MED HG\",50)':{tag:'(0029,\"SIEMENS MED HG\",50)',vr:\"LT\",name:\"ListOfDisplayPostfix\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MED HG\",60)':{tag:'(0029,\"SIEMENS MED HG\",60)',vr:\"US\",name:\"ListOfTextPosition\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MED HG\",70)':{tag:'(0029,\"SIEMENS MED HG\",70)',vr:\"LT\",name:\"ListOfTextConcatenation\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MED MG\",10)':{tag:'(0029,\"SIEMENS MED MG\",10)',vr:\"US\",name:\"ListOfGroupNumbers\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MED MG\",15)':{tag:'(0029,\"SIEMENS MED MG\",15)',vr:\"LT\",name:\"ListOfShadowOwnerCodes\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MED MG\",20)':{tag:'(0029,\"SIEMENS MED MG\",20)',vr:\"US\",name:\"ListOfElementNumbers\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MED MG\",30)':{tag:'(0029,\"SIEMENS MED MG\",30)',vr:\"US\",name:\"ListOfTotalDisplayLength\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MED MG\",40)':{tag:'(0029,\"SIEMENS MED MG\",40)',vr:\"LT\",name:\"ListOfDisplayPrefix\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MED MG\",50)':{tag:'(0029,\"SIEMENS MED MG\",50)',vr:\"LT\",name:\"ListOfDisplayPostfix\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MED MG\",60)':{tag:'(0029,\"SIEMENS MED MG\",60)',vr:\"US\",name:\"ListOfTextPosition\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MED MG\",70)':{tag:'(0029,\"SIEMENS MED MG\",70)',vr:\"LT\",name:\"ListOfTextConcatenation\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIEMENS MED\",10)':{tag:'(0009,\"SIEMENS MED\",10)',vr:\"LO\",name:\"RecognitionCode\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIEMENS MED\",30)':{tag:'(0009,\"SIEMENS MED\",30)',vr:\"UL\",name:\"ByteOffsetOfOriginalHeader\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIEMENS MED\",31)':{tag:'(0009,\"SIEMENS MED\",31)',vr:\"UL\",name:\"LengthOfOriginalHeader\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIEMENS MED\",40)':{tag:'(0009,\"SIEMENS MED\",40)',vr:\"UL\",name:\"ByteOffsetOfPixelmatrix\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIEMENS MED\",41)':{tag:'(0009,\"SIEMENS MED\",41)',vr:\"UL\",name:\"LengthOfPixelmatrixInBytes\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIEMENS MED\",50)':{tag:'(0009,\"SIEMENS MED\",50)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIEMENS MED\",51)':{tag:'(0009,\"SIEMENS MED\",51)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIEMENS MED\",f5)':{tag:'(0009,\"SIEMENS MED\",f5)',vr:\"LT\",name:\"PDMEFIDPlaceholder\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIEMENS MED\",f6)':{tag:'(0009,\"SIEMENS MED\",f6)',vr:\"LT\",name:\"PDMDataObjectTypeExtension\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MED\",10)':{tag:'(0021,\"SIEMENS MED\",10)',vr:\"DS\",name:\"Zoom\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MED\",11)':{tag:'(0021,\"SIEMENS MED\",11)',vr:\"DS\",name:\"Target\",vm:\"2\",version:\"PrivateTag\"},'(0021,\"SIEMENS MED\",12)':{tag:'(0021,\"SIEMENS MED\",12)',vr:\"IS\",name:\"TubeAngle\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MED\",20)':{tag:'(0021,\"SIEMENS MED\",20)',vr:\"US\",name:\"ROIMask\",vm:\"1\",version:\"PrivateTag\"},'(7001,\"SIEMENS MED\",10)':{tag:'(7001,\"SIEMENS MED\",10)',vr:\"LT\",name:\"Dummy\",vm:\"1\",version:\"PrivateTag\"},'(7003,\"SIEMENS MED\",10)':{tag:'(7003,\"SIEMENS MED\",10)',vr:\"LT\",name:\"Header\",vm:\"1\",version:\"PrivateTag\"},'(7005,\"SIEMENS MED\",10)':{tag:'(7005,\"SIEMENS MED\",10)',vr:\"LT\",name:\"Dummy\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MEDCOM HEADER\",08)':{tag:'(0029,\"SIEMENS MEDCOM HEADER\",08)',vr:\"CS\",name:\"MedComHeaderType\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MEDCOM HEADER\",09)':{tag:'(0029,\"SIEMENS MEDCOM HEADER\",09)',vr:\"LO\",name:\"MedComHeaderVersion\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MEDCOM HEADER\",10)':{tag:'(0029,\"SIEMENS MEDCOM HEADER\",10)',vr:\"OB\",name:\"MedComHeaderInfo\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MEDCOM HEADER\",20)':{tag:'(0029,\"SIEMENS MEDCOM HEADER\",20)',vr:\"OB\",name:\"MedComHistoryInformation\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MEDCOM HEADER\",31)':{tag:'(0029,\"SIEMENS MEDCOM HEADER\",31)',vr:\"LO\",name:\"PMTFInformation1\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MEDCOM HEADER\",32)':{tag:'(0029,\"SIEMENS MEDCOM HEADER\",32)',vr:\"UL\",name:\"PMTFInformation2\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MEDCOM HEADER\",33)':{tag:'(0029,\"SIEMENS MEDCOM HEADER\",33)',vr:\"UL\",name:\"PMTFInformation3\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MEDCOM HEADER\",34)':{tag:'(0029,\"SIEMENS MEDCOM HEADER\",34)',vr:\"CS\",name:\"PMTFInformation4\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MEDCOM HEADER\",35)':{tag:'(0029,\"SIEMENS MEDCOM HEADER\",35)',vr:\"UL\",name:\"PMTFInformation5\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MEDCOM HEADER\",40)':{tag:'(0029,\"SIEMENS MEDCOM HEADER\",40)',vr:\"SQ\",name:\"ApplicationHeaderSequence\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MEDCOM HEADER\",41)':{tag:'(0029,\"SIEMENS MEDCOM HEADER\",41)',vr:\"CS\",name:\"ApplicationHeaderType\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MEDCOM HEADER\",42)':{tag:'(0029,\"SIEMENS MEDCOM HEADER\",42)',vr:\"LO\",name:\"ApplicationHeaderID\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MEDCOM HEADER\",43)':{tag:'(0029,\"SIEMENS MEDCOM HEADER\",43)',vr:\"LO\",name:\"ApplicationHeaderVersion\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MEDCOM HEADER\",44)':{tag:'(0029,\"SIEMENS MEDCOM HEADER\",44)',vr:\"OB\",name:\"ApplicationHeaderInfo\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MEDCOM HEADER\",50)':{tag:'(0029,\"SIEMENS MEDCOM HEADER\",50)',vr:\"LO\",name:\"WorkflowControlFlags\",vm:\"8\",version:\"PrivateTag\"},'(0029,\"SIEMENS MEDCOM HEADER\",51)':{tag:'(0029,\"SIEMENS MEDCOM HEADER\",51)',vr:\"CS\",name:\"ArchiveManagementFlagKeepOnline\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MEDCOM HEADER\",52)':{tag:'(0029,\"SIEMENS MEDCOM HEADER\",52)',vr:\"CS\",name:\"ArchiveManagementFlagDoNotArchive\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MEDCOM HEADER\",53)':{tag:'(0029,\"SIEMENS MEDCOM HEADER\",53)',vr:\"CS\",name:\"ImageLocationStatus\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MEDCOM HEADER\",54)':{tag:'(0029,\"SIEMENS MEDCOM HEADER\",54)',vr:\"DS\",name:\"EstimatedRetrieveTime\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MEDCOM HEADER\",55)':{tag:'(0029,\"SIEMENS MEDCOM HEADER\",55)',vr:\"DS\",name:\"DataSizeOfRetrievedImages\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MEDCOM HEADER\",70)':{tag:'(0029,\"SIEMENS MEDCOM HEADER\",70)',vr:\"SQ\",name:\"SiemensLinkSequence\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MEDCOM HEADER\",71)':{tag:'(0029,\"SIEMENS MEDCOM HEADER\",71)',vr:\"AT\",name:\"ReferencedTag\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MEDCOM HEADER\",72)':{tag:'(0029,\"SIEMENS MEDCOM HEADER\",72)',vr:\"CS\",name:\"ReferencedTagType\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MEDCOM HEADER\",73)':{tag:'(0029,\"SIEMENS MEDCOM HEADER\",73)',vr:\"UL\",name:\"ReferencedValueLength\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MEDCOM HEADER\",74)':{tag:'(0029,\"SIEMENS MEDCOM HEADER\",74)',vr:\"CS\",name:\"ReferencedObjectDeviceType\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MEDCOM HEADER\",75)':{tag:'(0029,\"SIEMENS MEDCOM HEADER\",75)',vr:\"OB\",name:\"ReferencedObjectDeviceLocation\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MEDCOM HEADER\",76)':{tag:'(0029,\"SIEMENS MEDCOM HEADER\",76)',vr:\"OB\",name:\"ReferencedObjectDeviceID\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MEDCOM HEADER2\",60)':{tag:'(0029,\"SIEMENS MEDCOM HEADER2\",60)',vr:\"LO\",name:\"SeriesWorkflowStatus\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MEDCOM OOG\",08)':{tag:'(0029,\"SIEMENS MEDCOM OOG\",08)',vr:\"CS\",name:\"MEDCOMOOGType\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MEDCOM OOG\",09)':{tag:'(0029,\"SIEMENS MEDCOM OOG\",09)',vr:\"LO\",name:\"MEDCOMOOGVersion\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SIEMENS MEDCOM OOG\",10)':{tag:'(0029,\"SIEMENS MEDCOM OOG\",10)',vr:\"OB\",name:\"MEDCOMOOGInfo\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",12)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",12)',vr:\"DS\",name:\"MagneticFieldStrength\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",14)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",14)',vr:\"DS\",name:\"ADCVoltage\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",16)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",16)',vr:\"DS\",name:\"ADCOffset\",vm:\"2\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",20)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",20)',vr:\"DS\",name:\"TransmitterAmplitude\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",21)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",21)',vr:\"IS\",name:\"NumberOfTransmitterAmplitudes\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",22)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",22)',vr:\"DS\",name:\"TransmitterAttenuator\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",24)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",24)',vr:\"DS\",name:\"TransmitterCalibration\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",26)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",26)',vr:\"DS\",name:\"TransmitterReference\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",50)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",50)',vr:\"DS\",name:\"ReceiverTotalGain\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",51)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",51)',vr:\"DS\",name:\"ReceiverAmplifierGain\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",52)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",52)',vr:\"DS\",name:\"ReceiverPreamplifierGain\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",54)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",54)',vr:\"DS\",name:\"ReceiverCableAttenuation\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",55)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",55)',vr:\"DS\",name:\"ReceiverReferenceGain\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",56)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",56)',vr:\"DS\",name:\"ReceiverFilterFrequency\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",60)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",60)',vr:\"DS\",name:\"ReconstructionScaleFactor\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",62)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",62)',vr:\"DS\",name:\"ReferenceScaleFactor\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",70)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",70)',vr:\"DS\",name:\"PhaseGradientAmplitude\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",71)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",71)',vr:\"DS\",name:\"ReadoutGradientAmplitude\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",72)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",72)',vr:\"DS\",name:\"SelectionGradientAmplitude\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",80)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",80)',vr:\"DS\",name:\"GradientDelayTime\",vm:\"3\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",82)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",82)',vr:\"DS\",name:\"TotalGradientDelayTime\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",90)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",90)',vr:\"LT\",name:\"SensitivityCorrectionLabel\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",91)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",91)',vr:\"DS\",name:\"SaturationPhaseEncodingVectorCoronalComponent\",vm:\"6\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",92)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",92)',vr:\"DS\",name:\"SaturationReadoutVectorCoronalComponent\",vm:\"6\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",a0)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",a0)',vr:\"US\",name:\"RFWatchdogMask\",vm:\"3\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",a1)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",a1)',vr:\"DS\",name:\"EPIReconstructionSlope\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",a2)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",a2)',vr:\"DS\",name:\"RFPowerErrorIndicator\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",a5)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",a5)',vr:\"DS\",name:\"SpecificAbsorptionRateWholeBody\",vm:\"3\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",a6)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",a6)',vr:\"DS\",name:\"SpecificEnergyDose\",vm:\"3\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",b0)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",b0)',vr:\"UL\",name:\"AdjustmentStatusMask\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",c1)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",c1)',vr:\"DS\",name:\"EPICapacity\",vm:\"6\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",c2)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",c2)',vr:\"DS\",name:\"EPIInductance\",vm:\"3\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",c3)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",c3)',vr:\"IS\",name:\"EPISwitchConfigurationCode\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",c4)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",c4)',vr:\"IS\",name:\"EPISwitchHardwareCode\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",c5)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",c5)',vr:\"DS\",name:\"EPISwitchDelayTime\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",d1)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",d1)',vr:\"DS\",name:\"FlowSensitivity\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",d2)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",d2)',vr:\"LT\",name:\"CalculationSubmode\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",d3)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",d3)',vr:\"DS\",name:\"FieldOfViewRatio\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",d4)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",d4)',vr:\"IS\",name:\"BaseRawMatrixSize\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",d5)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",d5)',vr:\"IS\",name:\"2DOversamplingLines\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",d6)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",d6)',vr:\"IS\",name:\"3DPhaseOversamplingPartitions\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",d7)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",d7)',vr:\"IS\",name:\"EchoLinePosition\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",d8)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",d8)',vr:\"IS\",name:\"EchoColumnPosition\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",d9)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",d9)',vr:\"IS\",name:\"LinesPerSegment\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 COAD\",da)':{tag:'(0019,\"SIEMENS MR VA0 COAD\",da)',vr:\"LT\",name:\"PhaseCodingDirection\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",10)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",10)',vr:\"DS\",name:\"TotalMeasurementTimeNominal\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",11)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",11)',vr:\"DS\",name:\"TotalMeasurementTimeCurrent\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",12)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",12)',vr:\"DS\",name:\"StartDelayTime\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",13)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",13)',vr:\"DS\",name:\"DwellTime\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",14)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",14)',vr:\"IS\",name:\"NumberOfPhases\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",16)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",16)',vr:\"UL\",name:\"SequenceControlMask\",vm:\"2\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",18)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",18)',vr:\"UL\",name:\"MeasurementStatusMask\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",20)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",20)',vr:\"IS\",name:\"NumberOfFourierLinesNominal\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",21)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",21)',vr:\"IS\",name:\"NumberOfFourierLinesCurrent\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",26)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",26)',vr:\"IS\",name:\"NumberOfFourierLinesAfterZero\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",28)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",28)',vr:\"IS\",name:\"FirstMeasuredFourierLine\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",30)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",30)',vr:\"IS\",name:\"AcquisitionColumns\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",31)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",31)',vr:\"IS\",name:\"ReconstructionColumns\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",40)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",40)',vr:\"IS\",name:\"ArrayCoilElementNumber\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",41)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",41)',vr:\"UL\",name:\"ArrayCoilElementSelectMask\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",42)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",42)',vr:\"UL\",name:\"ArrayCoilElementDataMask\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",43)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",43)',vr:\"IS\",name:\"ArrayCoilElementToADCConnect\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",44)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",44)',vr:\"DS\",name:\"ArrayCoilElementNoiseLevel\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",45)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",45)',vr:\"IS\",name:\"ArrayCoilADCPairNumber\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",46)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",46)',vr:\"UL\",name:\"ArrayCoilCombinationMask\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",50)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",50)',vr:\"IS\",name:\"NumberOfAverages\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",60)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",60)',vr:\"DS\",name:\"FlipAngle\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",70)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",70)',vr:\"IS\",name:\"NumberOfPrescans\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",81)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",81)',vr:\"LT\",name:\"FilterTypeForRawData\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",82)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",82)',vr:\"DS\",name:\"FilterParameterForRawData\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",83)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",83)',vr:\"LT\",name:\"FilterTypeForImageData\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",84)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",84)',vr:\"DS\",name:\"FilterParameterForImageData\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",85)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",85)',vr:\"LT\",name:\"FilterTypeForPhaseCorrection\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",86)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",86)',vr:\"DS\",name:\"FilterParameterForPhaseCorrection\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",87)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",87)',vr:\"LT\",name:\"NormalizationFilterTypeForImageData\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",88)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",88)',vr:\"DS\",name:\"NormalizationFilterParameterForImageData\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",90)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",90)',vr:\"IS\",name:\"NumberOfSaturationRegions\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",91)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",91)',vr:\"DS\",name:\"SaturationPhaseEncodingVectorSagittalComponent\",vm:\"6\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",92)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",92)',vr:\"DS\",name:\"SaturationReadoutVectorSagittalComponent\",vm:\"6\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",93)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",93)',vr:\"DS\",name:\"EPIStimulationMonitorMode\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",94)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",94)',vr:\"DS\",name:\"ImageRotationAngle\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",96)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",96)',vr:\"UL\",name:\"CoilIDMask\",vm:\"3\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",97)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",97)',vr:\"UL\",name:\"CoilClassMask\",vm:\"2\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",98)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",98)',vr:\"DS\",name:\"CoilPosition\",vm:\"3\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",a0)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",a0)',vr:\"DS\",name:\"EPIReconstructionPhase\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS MR VA0 GEN\",a1)':{tag:'(0019,\"SIEMENS MR VA0 GEN\",a1)',vr:\"DS\",name:\"EPIReconstructionSlope\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",20)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",20)',vr:\"IS\",name:\"PhaseCorrectionRowsSequence\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",21)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",21)',vr:\"IS\",name:\"PhaseCorrectionColumnsSequence\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",22)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",22)',vr:\"IS\",name:\"PhaseCorrectionRowsReconstruction\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",24)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",24)',vr:\"IS\",name:\"PhaseCorrectionColumnsReconstruction\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",30)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",30)',vr:\"IS\",name:\"NumberOf3DRawPartitionsNominal\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",31)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",31)',vr:\"IS\",name:\"NumberOf3DRawPartitionsCurrent\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",34)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",34)',vr:\"IS\",name:\"NumberOf3DImagePartitions\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",36)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",36)',vr:\"IS\",name:\"Actual3DImagePartitionNumber\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",39)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",39)',vr:\"DS\",name:\"SlabThickness\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",40)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",40)',vr:\"IS\",name:\"NumberOfSlicesNominal\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",41)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",41)',vr:\"IS\",name:\"NumberOfSlicesCurrent\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",42)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",42)',vr:\"IS\",name:\"CurrentSliceNumber\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",43)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",43)',vr:\"IS\",name:\"CurrentGroupNumber\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",44)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",44)',vr:\"DS\",name:\"CurrentSliceDistanceFactor\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",45)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",45)',vr:\"IS\",name:\"MIPStartRow\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",46)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",46)',vr:\"IS\",name:\"MIPStopRow\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",47)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",47)',vr:\"IS\",name:\"MIPStartColumn\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",48)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",48)',vr:\"IS\",name:\"MIPStartColumn\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",49)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",49)',vr:\"IS\",name:\"MIPStartSlice Name=\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",4a)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",4a)',vr:\"IS\",name:\"MIPStartSlice\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",4f)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",4f)',vr:\"LT\",name:\"OrderofSlices\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",50)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",50)',vr:\"US\",name:\"SignalMask\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",52)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",52)',vr:\"DS\",name:\"DelayAfterTrigger\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",53)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",53)',vr:\"IS\",name:\"RRInterval\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",54)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",54)',vr:\"DS\",name:\"NumberOfTriggerPulses\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",56)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",56)',vr:\"DS\",name:\"RepetitionTimeEffective\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",57)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",57)',vr:\"LT\",name:\"GatePhase\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",58)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",58)',vr:\"DS\",name:\"GateThreshold\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",59)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",59)',vr:\"DS\",name:\"GatedRatio\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",60)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",60)',vr:\"IS\",name:\"NumberOfInterpolatedImages\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",70)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",70)',vr:\"IS\",name:\"NumberOfEchoes\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",72)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",72)',vr:\"DS\",name:\"SecondEchoTime\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",73)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",73)',vr:\"DS\",name:\"SecondRepetitionTime\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",80)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",80)',vr:\"IS\",name:\"CardiacCode\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",91)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",91)',vr:\"DS\",name:\"SaturationPhaseEncodingVectorTransverseComponent\",vm:\"6\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",92)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",92)',vr:\"DS\",name:\"SaturationReadoutVectorTransverseComponent\",vm:\"6\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",93)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",93)',vr:\"DS\",name:\"EPIChangeValueOfMagnitude\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",94)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",94)',vr:\"DS\",name:\"EPIChangeValueOfXComponent\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",95)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",95)',vr:\"DS\",name:\"EPIChangeValueOfYComponent\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 GEN\",96)':{tag:'(0021,\"SIEMENS MR VA0 GEN\",96)',vr:\"DS\",name:\"EPIChangeValueOfZComponent\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 RAW\",00)':{tag:'(0021,\"SIEMENS MR VA0 RAW\",00)',vr:\"LT\",name:\"SequenceType\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 RAW\",01)':{tag:'(0021,\"SIEMENS MR VA0 RAW\",01)',vr:\"IS\",name:\"VectorSizeOriginal\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 RAW\",02)':{tag:'(0021,\"SIEMENS MR VA0 RAW\",02)',vr:\"IS\",name:\"VectorSizeExtended\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 RAW\",03)':{tag:'(0021,\"SIEMENS MR VA0 RAW\",03)',vr:\"DS\",name:\"AcquiredSpectralRange\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 RAW\",04)':{tag:'(0021,\"SIEMENS MR VA0 RAW\",04)',vr:\"DS\",name:\"VOIPosition\",vm:\"3\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 RAW\",05)':{tag:'(0021,\"SIEMENS MR VA0 RAW\",05)',vr:\"DS\",name:\"VOISize\",vm:\"3\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 RAW\",06)':{tag:'(0021,\"SIEMENS MR VA0 RAW\",06)',vr:\"IS\",name:\"CSIMatrixSizeOriginal\",vm:\"3\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 RAW\",07)':{tag:'(0021,\"SIEMENS MR VA0 RAW\",07)',vr:\"IS\",name:\"CSIMatrixSizeExtended\",vm:\"3\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 RAW\",08)':{tag:'(0021,\"SIEMENS MR VA0 RAW\",08)',vr:\"DS\",name:\"SpatialGridShift\",vm:\"3\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 RAW\",09)':{tag:'(0021,\"SIEMENS MR VA0 RAW\",09)',vr:\"DS\",name:\"SignalLimitsMinimum\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 RAW\",10)':{tag:'(0021,\"SIEMENS MR VA0 RAW\",10)',vr:\"DS\",name:\"SignalLimitsMaximum\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 RAW\",11)':{tag:'(0021,\"SIEMENS MR VA0 RAW\",11)',vr:\"DS\",name:\"SpecInfoMask\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 RAW\",12)':{tag:'(0021,\"SIEMENS MR VA0 RAW\",12)',vr:\"DS\",name:\"EPITimeRateOfChangeOfMagnitude\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 RAW\",13)':{tag:'(0021,\"SIEMENS MR VA0 RAW\",13)',vr:\"DS\",name:\"EPITimeRateOfChangeOfXComponent\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 RAW\",14)':{tag:'(0021,\"SIEMENS MR VA0 RAW\",14)',vr:\"DS\",name:\"EPITimeRateOfChangeOfYComponent\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 RAW\",15)':{tag:'(0021,\"SIEMENS MR VA0 RAW\",15)',vr:\"DS\",name:\"EPITimeRateOfChangeOfZComponent\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 RAW\",16)':{tag:'(0021,\"SIEMENS MR VA0 RAW\",16)',vr:\"DS\",name:\"EPITimeRateOfChangeLegalLimit1\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 RAW\",17)':{tag:'(0021,\"SIEMENS MR VA0 RAW\",17)',vr:\"DS\",name:\"EPIOperationModeFlag\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 RAW\",18)':{tag:'(0021,\"SIEMENS MR VA0 RAW\",18)',vr:\"DS\",name:\"EPIFieldCalculationSafetyFactor\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 RAW\",19)':{tag:'(0021,\"SIEMENS MR VA0 RAW\",19)',vr:\"DS\",name:\"EPILegalLimit1OfChangeValue\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 RAW\",20)':{tag:'(0021,\"SIEMENS MR VA0 RAW\",20)',vr:\"DS\",name:\"EPILegalLimit2OfChangeValue\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 RAW\",21)':{tag:'(0021,\"SIEMENS MR VA0 RAW\",21)',vr:\"DS\",name:\"EPIRiseTime\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 RAW\",30)':{tag:'(0021,\"SIEMENS MR VA0 RAW\",30)',vr:\"DS\",name:\"ArrayCoilADCOffset\",vm:\"16\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 RAW\",31)':{tag:'(0021,\"SIEMENS MR VA0 RAW\",31)',vr:\"DS\",name:\"ArrayCoilPreamplifierGain\",vm:\"16\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 RAW\",50)':{tag:'(0021,\"SIEMENS MR VA0 RAW\",50)',vr:\"LT\",name:\"SaturationType\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 RAW\",51)':{tag:'(0021,\"SIEMENS MR VA0 RAW\",51)',vr:\"DS\",name:\"SaturationNormalVector\",vm:\"3\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 RAW\",52)':{tag:'(0021,\"SIEMENS MR VA0 RAW\",52)',vr:\"DS\",name:\"SaturationPositionVector\",vm:\"3\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 RAW\",53)':{tag:'(0021,\"SIEMENS MR VA0 RAW\",53)',vr:\"DS\",name:\"SaturationThickness\",vm:\"6\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 RAW\",54)':{tag:'(0021,\"SIEMENS MR VA0 RAW\",54)',vr:\"DS\",name:\"SaturationWidth\",vm:\"6\",version:\"PrivateTag\"},'(0021,\"SIEMENS MR VA0 RAW\",55)':{tag:'(0021,\"SIEMENS MR VA0 RAW\",55)',vr:\"DS\",name:\"SaturationDistance\",vm:\"6\",version:\"PrivateTag\"},'(7fe3,\"SIEMENS NUMARIS II\",00)':{tag:'(7fe3,\"SIEMENS NUMARIS II\",00)',vr:\"LT\",name:\"ImageGraphicsFormatCode\",vm:\"1\",version:\"PrivateTag\"},'(7fe3,\"SIEMENS NUMARIS II\",10)':{tag:'(7fe3,\"SIEMENS NUMARIS II\",10)',vr:\"OB\",name:\"ImageGraphics\",vm:\"1\",version:\"PrivateTag\"},'(7fe3,\"SIEMENS NUMARIS II\",20)':{tag:'(7fe3,\"SIEMENS NUMARIS II\",20)',vr:\"OB\",name:\"ImageGraphicsDummy\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS RA GEN\",20)':{tag:'(0011,\"SIEMENS RA GEN\",20)',vr:\"SL\",name:\"FluoroTimer\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS RA GEN\",25)':{tag:'(0011,\"SIEMENS RA GEN\",25)',vr:\"SL\",name:\"PtopDoseAreaProduct\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS RA GEN\",26)':{tag:'(0011,\"SIEMENS RA GEN\",26)',vr:\"SL\",name:\"PtopTotalSkinDose\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS RA GEN\",30)':{tag:'(0011,\"SIEMENS RA GEN\",30)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS RA GEN\",35)':{tag:'(0011,\"SIEMENS RA GEN\",35)',vr:\"LO\",name:\"PatientInitialPuckCounter\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS RA GEN\",40)':{tag:'(0011,\"SIEMENS RA GEN\",40)',vr:\"SS\",name:\"SPIDataObjectType\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",15)':{tag:'(0019,\"SIEMENS RA GEN\",15)',vr:\"LO\",name:\"AcquiredPlane\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",1f)':{tag:'(0019,\"SIEMENS RA GEN\",1f)',vr:\"SS\",name:\"DefaultTableIsoCenterHeight\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",20)':{tag:'(0019,\"SIEMENS RA GEN\",20)',vr:\"SL\",name:\"SceneFlag\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",22)':{tag:'(0019,\"SIEMENS RA GEN\",22)',vr:\"SL\",name:\"RefPhotofileFlag\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",24)':{tag:'(0019,\"SIEMENS RA GEN\",24)',vr:\"LO\",name:\"SceneName\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",26)':{tag:'(0019,\"SIEMENS RA GEN\",26)',vr:\"SS\",name:\"AcquisitionIndex\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",28)':{tag:'(0019,\"SIEMENS RA GEN\",28)',vr:\"SS\",name:\"MixedPulseMode\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",2a)':{tag:'(0019,\"SIEMENS RA GEN\",2a)',vr:\"SS\",name:\"NoOfPositions\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",2c)':{tag:'(0019,\"SIEMENS RA GEN\",2c)',vr:\"SS\",name:\"NoOfPhases\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",2e)':{tag:'(0019,\"SIEMENS RA GEN\",2e)',vr:\"SS\",name:\"FrameRateForPositions\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",30)':{tag:'(0019,\"SIEMENS RA GEN\",30)',vr:\"SS\",name:\"NoOfFramesForPositions\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",32)':{tag:'(0019,\"SIEMENS RA GEN\",32)',vr:\"SS\",name:\"SteppingDirection\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",34)':{tag:'(0019,\"SIEMENS RA GEN\",34)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",36)':{tag:'(0019,\"SIEMENS RA GEN\",36)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",38)':{tag:'(0019,\"SIEMENS RA GEN\",38)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",3a)':{tag:'(0019,\"SIEMENS RA GEN\",3a)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",3c)':{tag:'(0019,\"SIEMENS RA GEN\",3c)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",3e)':{tag:'(0019,\"SIEMENS RA GEN\",3e)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",40)':{tag:'(0019,\"SIEMENS RA GEN\",40)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",42)':{tag:'(0019,\"SIEMENS RA GEN\",42)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",44)':{tag:'(0019,\"SIEMENS RA GEN\",44)',vr:\"SS\",name:\"ImageTransferDelay\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",46)':{tag:'(0019,\"SIEMENS RA GEN\",46)',vr:\"SL\",name:\"InversFlag\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",48)':{tag:'(0019,\"SIEMENS RA GEN\",48)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",4a)':{tag:'(0019,\"SIEMENS RA GEN\",4a)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",4c)':{tag:'(0019,\"SIEMENS RA GEN\",4c)',vr:\"SS\",name:\"BlankingCircleDiameter\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",50)':{tag:'(0019,\"SIEMENS RA GEN\",50)',vr:\"SL\",name:\"StandDataValid\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",52)':{tag:'(0019,\"SIEMENS RA GEN\",52)',vr:\"SS\",name:\"TableTilt\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",54)':{tag:'(0019,\"SIEMENS RA GEN\",54)',vr:\"SS\",name:\"TableAxisRotation\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",56)':{tag:'(0019,\"SIEMENS RA GEN\",56)',vr:\"SS\",name:\"TableLongitudalPosition\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",58)':{tag:'(0019,\"SIEMENS RA GEN\",58)',vr:\"SS\",name:\"TableSideOffset\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",5a)':{tag:'(0019,\"SIEMENS RA GEN\",5a)',vr:\"SS\",name:\"TableIsoCenterHeight\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",5c)':{tag:'(0019,\"SIEMENS RA GEN\",5c)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",5e)':{tag:'(0019,\"SIEMENS RA GEN\",5e)',vr:\"SL\",name:\"CollimationDataValid\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",60)':{tag:'(0019,\"SIEMENS RA GEN\",60)',vr:\"SL\",name:\"PeriSequenceNo\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",62)':{tag:'(0019,\"SIEMENS RA GEN\",62)',vr:\"SL\",name:\"PeriTotalScenes\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",64)':{tag:'(0019,\"SIEMENS RA GEN\",64)',vr:\"SL\",name:\"PeriOverlapTop\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",66)':{tag:'(0019,\"SIEMENS RA GEN\",66)',vr:\"SL\",name:\"PeriOverlapBottom\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",68)':{tag:'(0019,\"SIEMENS RA GEN\",68)',vr:\"SL\",name:\"RawImageNumber\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",6a)':{tag:'(0019,\"SIEMENS RA GEN\",6a)',vr:\"SL\",name:\"XRayDataValid\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",70)':{tag:'(0019,\"SIEMENS RA GEN\",70)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",72)':{tag:'(0019,\"SIEMENS RA GEN\",72)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",74)':{tag:'(0019,\"SIEMENS RA GEN\",74)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",76)':{tag:'(0019,\"SIEMENS RA GEN\",76)',vr:\"SL\",name:\"FillingAverageFactor\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",78)':{tag:'(0019,\"SIEMENS RA GEN\",78)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",7a)':{tag:'(0019,\"SIEMENS RA GEN\",7a)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",7c)':{tag:'(0019,\"SIEMENS RA GEN\",7c)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",7e)':{tag:'(0019,\"SIEMENS RA GEN\",7e)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",80)':{tag:'(0019,\"SIEMENS RA GEN\",80)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",82)':{tag:'(0019,\"SIEMENS RA GEN\",82)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",84)':{tag:'(0019,\"SIEMENS RA GEN\",84)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",86)':{tag:'(0019,\"SIEMENS RA GEN\",86)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",88)':{tag:'(0019,\"SIEMENS RA GEN\",88)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",8a)':{tag:'(0019,\"SIEMENS RA GEN\",8a)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",8c)':{tag:'(0019,\"SIEMENS RA GEN\",8c)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",8e)':{tag:'(0019,\"SIEMENS RA GEN\",8e)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",92)':{tag:'(0019,\"SIEMENS RA GEN\",92)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",94)':{tag:'(0019,\"SIEMENS RA GEN\",94)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",96)':{tag:'(0019,\"SIEMENS RA GEN\",96)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",98)':{tag:'(0019,\"SIEMENS RA GEN\",98)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",9a)':{tag:'(0019,\"SIEMENS RA GEN\",9a)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",9c)':{tag:'(0019,\"SIEMENS RA GEN\",9c)',vr:\"SL\",name:\"IntensifierLevelCalibrationFactor\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",9e)':{tag:'(0019,\"SIEMENS RA GEN\",9e)',vr:\"SL\",name:\"NativeReviewFlag\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",a2)':{tag:'(0019,\"SIEMENS RA GEN\",a2)',vr:\"SL\",name:\"SceneNumber\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",a4)':{tag:'(0019,\"SIEMENS RA GEN\",a4)',vr:\"SS\",name:\"AcquisitionMode\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",a5)':{tag:'(0019,\"SIEMENS RA GEN\",a5)',vr:\"SS\",name:\"AcquisitonFrameRate\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",a6)':{tag:'(0019,\"SIEMENS RA GEN\",a6)',vr:\"SL\",name:\"ECGFlag\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",a7)':{tag:'(0019,\"SIEMENS RA GEN\",a7)',vr:\"SL\",name:\"AdditionalSceneData\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",a8)':{tag:'(0019,\"SIEMENS RA GEN\",a8)',vr:\"SL\",name:\"FileCopyFlag\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",a9)':{tag:'(0019,\"SIEMENS RA GEN\",a9)',vr:\"SL\",name:\"PhlebovisionFlag\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",aa)':{tag:'(0019,\"SIEMENS RA GEN\",aa)',vr:\"SL\",name:\"Co2Flag\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",ab)':{tag:'(0019,\"SIEMENS RA GEN\",ab)',vr:\"SS\",name:\"MaxSpeed\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",ac)':{tag:'(0019,\"SIEMENS RA GEN\",ac)',vr:\"SS\",name:\"StepWidth\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",ad)':{tag:'(0019,\"SIEMENS RA GEN\",ad)',vr:\"SL\",name:\"DigitalAcquisitionZoom\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA GEN\",ff)':{tag:'(0019,\"SIEMENS RA GEN\",ff)',vr:\"SS\",name:\"Internal\",vm:\"1-n\",version:\"PrivateTag\"},'(0021,\"SIEMENS RA GEN\",15)':{tag:'(0021,\"SIEMENS RA GEN\",15)',vr:\"SS\",name:\"ImagesInStudy\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS RA GEN\",20)':{tag:'(0021,\"SIEMENS RA GEN\",20)',vr:\"SS\",name:\"ScenesInStudy\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS RA GEN\",25)':{tag:'(0021,\"SIEMENS RA GEN\",25)',vr:\"SS\",name:\"ImagesInPhotofile\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS RA GEN\",27)':{tag:'(0021,\"SIEMENS RA GEN\",27)',vr:\"SS\",name:\"PlaneBImagesExist\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS RA GEN\",28)':{tag:'(0021,\"SIEMENS RA GEN\",28)',vr:\"SS\",name:\"NoOf2MBChunks\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS RA GEN\",30)':{tag:'(0021,\"SIEMENS RA GEN\",30)',vr:\"SS\",name:\"ImagesInAllScenes\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS RA GEN\",40)':{tag:'(0021,\"SIEMENS RA GEN\",40)',vr:\"SS\",name:\"ArchiveSWInternalVersion\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS RA PLANE A\",28)':{tag:'(0011,\"SIEMENS RA PLANE A\",28)',vr:\"SL\",name:\"FluoroTimerA\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS RA PLANE A\",29)':{tag:'(0011,\"SIEMENS RA PLANE A\",29)',vr:\"SL\",name:\"FluoroSkinDoseA\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS RA PLANE A\",2a)':{tag:'(0011,\"SIEMENS RA PLANE A\",2a)',vr:\"SL\",name:\"TotalSkinDoseA\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS RA PLANE A\",2b)':{tag:'(0011,\"SIEMENS RA PLANE A\",2b)',vr:\"SL\",name:\"FluoroDoseAreaProductA\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS RA PLANE A\",2c)':{tag:'(0011,\"SIEMENS RA PLANE A\",2c)',vr:\"SL\",name:\"TotalDoseAreaProductA\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",15)':{tag:'(0019,\"SIEMENS RA PLANE A\",15)',vr:\"LT\",name:\"OfflineUID\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",18)':{tag:'(0019,\"SIEMENS RA PLANE A\",18)',vr:\"SS\",name:\"Internal\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",19)':{tag:'(0019,\"SIEMENS RA PLANE A\",19)',vr:\"SS\",name:\"Internal\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",1a)':{tag:'(0019,\"SIEMENS RA PLANE A\",1a)',vr:\"SS\",name:\"Internal\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",1b)':{tag:'(0019,\"SIEMENS RA PLANE A\",1b)',vr:\"SS\",name:\"Internal\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",1c)':{tag:'(0019,\"SIEMENS RA PLANE A\",1c)',vr:\"SS\",name:\"Internal\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",1d)':{tag:'(0019,\"SIEMENS RA PLANE A\",1d)',vr:\"SS\",name:\"Internal\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",1e)':{tag:'(0019,\"SIEMENS RA PLANE A\",1e)',vr:\"SS\",name:\"Internal\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",1f)':{tag:'(0019,\"SIEMENS RA PLANE A\",1f)',vr:\"SS\",name:\"Internal\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",20)':{tag:'(0019,\"SIEMENS RA PLANE A\",20)',vr:\"SS\",name:\"SystemCalibFactorPlaneA\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",22)':{tag:'(0019,\"SIEMENS RA PLANE A\",22)',vr:\"SS\",name:\"XRayParameterSetNo\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",24)':{tag:'(0019,\"SIEMENS RA PLANE A\",24)',vr:\"SS\",name:\"XRaySystem\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",26)':{tag:'(0019,\"SIEMENS RA PLANE A\",26)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",28)':{tag:'(0019,\"SIEMENS RA PLANE A\",28)',vr:\"SS\",name:\"AcquiredDisplayMode\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",2a)':{tag:'(0019,\"SIEMENS RA PLANE A\",2a)',vr:\"SS\",name:\"AcquisitionDelay\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",2c)':{tag:'(0019,\"SIEMENS RA PLANE A\",2c)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",2e)':{tag:'(0019,\"SIEMENS RA PLANE A\",2e)',vr:\"SS\",name:\"MaxFramesLimit\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",30)':{tag:'(0019,\"SIEMENS RA PLANE A\",30)',vr:\"US\",name:\"MaximumFrameSizeNIU\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",32)':{tag:'(0019,\"SIEMENS RA PLANE A\",32)',vr:\"SS\",name:\"SubtractedFilterType\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",34)':{tag:'(0019,\"SIEMENS RA PLANE A\",34)',vr:\"SS\",name:\"FilterFactorNative\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",36)':{tag:'(0019,\"SIEMENS RA PLANE A\",36)',vr:\"SS\",name:\"AnatomicBackgroundFactor\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",38)':{tag:'(0019,\"SIEMENS RA PLANE A\",38)',vr:\"SS\",name:\"WindowUpperLimitNative\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",3a)':{tag:'(0019,\"SIEMENS RA PLANE A\",3a)',vr:\"SS\",name:\"WindowLowerLimitNative\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",3c)':{tag:'(0019,\"SIEMENS RA PLANE A\",3c)',vr:\"SS\",name:\"WindowBrightnessPhase1\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",3e)':{tag:'(0019,\"SIEMENS RA PLANE A\",3e)',vr:\"SS\",name:\"WindowBrightnessPhase2\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",40)':{tag:'(0019,\"SIEMENS RA PLANE A\",40)',vr:\"SS\",name:\"WindowContrastPhase1\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",42)':{tag:'(0019,\"SIEMENS RA PLANE A\",42)',vr:\"SS\",name:\"WindowContrastPhase2\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",44)':{tag:'(0019,\"SIEMENS RA PLANE A\",44)',vr:\"SS\",name:\"FilterFactorSub\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",46)':{tag:'(0019,\"SIEMENS RA PLANE A\",46)',vr:\"SS\",name:\"PeakOpacified\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",48)':{tag:'(0019,\"SIEMENS RA PLANE A\",48)',vr:\"SL\",name:\"MaskFrame\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",4a)':{tag:'(0019,\"SIEMENS RA PLANE A\",4a)',vr:\"SL\",name:\"BIHFrame\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",4c)':{tag:'(0019,\"SIEMENS RA PLANE A\",4c)',vr:\"SS\",name:\"CentBeamAngulationCaudCran\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",4e)':{tag:'(0019,\"SIEMENS RA PLANE A\",4e)',vr:\"SS\",name:\"CentBeamAngulationLRAnterior\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",50)':{tag:'(0019,\"SIEMENS RA PLANE A\",50)',vr:\"SS\",name:\"LongitudinalPosition\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",52)':{tag:'(0019,\"SIEMENS RA PLANE A\",52)',vr:\"SS\",name:\"SideOffset\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",54)':{tag:'(0019,\"SIEMENS RA PLANE A\",54)',vr:\"SS\",name:\"IsoCenterHeight\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",56)':{tag:'(0019,\"SIEMENS RA PLANE A\",56)',vr:\"SS\",name:\"ImageTwist\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",58)':{tag:'(0019,\"SIEMENS RA PLANE A\",58)',vr:\"SS\",name:\"SourceImageDistance\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",5a)':{tag:'(0019,\"SIEMENS RA PLANE A\",5a)',vr:\"SS\",name:\"MechanicalMagnificationFactor\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",5c)':{tag:'(0019,\"SIEMENS RA PLANE A\",5c)',vr:\"SL\",name:\"CalibrationFlag\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",5e)':{tag:'(0019,\"SIEMENS RA PLANE A\",5e)',vr:\"SL\",name:\"CalibrationAngleCranCaud\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",60)':{tag:'(0019,\"SIEMENS RA PLANE A\",60)',vr:\"SL\",name:\"CalibrationAngleRAOLAO\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",62)':{tag:'(0019,\"SIEMENS RA PLANE A\",62)',vr:\"SL\",name:\"CalibrationTableToFloorDist\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",64)':{tag:'(0019,\"SIEMENS RA PLANE A\",64)',vr:\"SL\",name:\"CalibrationIsocenterToFloorDist\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",66)':{tag:'(0019,\"SIEMENS RA PLANE A\",66)',vr:\"SL\",name:\"CalibrationIsocenterToSourceDist\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",68)':{tag:'(0019,\"SIEMENS RA PLANE A\",68)',vr:\"SL\",name:\"CalibrationSourceToII\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",6a)':{tag:'(0019,\"SIEMENS RA PLANE A\",6a)',vr:\"SL\",name:\"CalibrationIIZoom\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",6c)':{tag:'(0019,\"SIEMENS RA PLANE A\",6c)',vr:\"SL\",name:\"CalibrationIIField\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",6e)':{tag:'(0019,\"SIEMENS RA PLANE A\",6e)',vr:\"SL\",name:\"CalibrationFactor\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",70)':{tag:'(0019,\"SIEMENS RA PLANE A\",70)',vr:\"SL\",name:\"CalibrationObjectToImageDistance\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",72)':{tag:'(0019,\"SIEMENS RA PLANE A\",72)',vr:\"SL\",name:\"CalibrationSystemFactor\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",74)':{tag:'(0019,\"SIEMENS RA PLANE A\",74)',vr:\"SL\",name:\"CalibrationSystemCorrection\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",76)':{tag:'(0019,\"SIEMENS RA PLANE A\",76)',vr:\"SL\",name:\"CalibrationSystemIIFormats\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",78)':{tag:'(0019,\"SIEMENS RA PLANE A\",78)',vr:\"SL\",name:\"CalibrationGantryDataValid\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",7a)':{tag:'(0019,\"SIEMENS RA PLANE A\",7a)',vr:\"SS\",name:\"CollimatorSquareBreadth\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",7c)':{tag:'(0019,\"SIEMENS RA PLANE A\",7c)',vr:\"SS\",name:\"CollimatorSquareHeight\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",7e)':{tag:'(0019,\"SIEMENS RA PLANE A\",7e)',vr:\"SS\",name:\"CollimatorSquareDiameter\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",80)':{tag:'(0019,\"SIEMENS RA PLANE A\",80)',vr:\"SS\",name:\"CollimaterFingerTurnAngle\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",82)':{tag:'(0019,\"SIEMENS RA PLANE A\",82)',vr:\"SS\",name:\"CollimaterFingerPosition\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",84)':{tag:'(0019,\"SIEMENS RA PLANE A\",84)',vr:\"SS\",name:\"CollimaterDiaphragmTurnAngle\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",86)':{tag:'(0019,\"SIEMENS RA PLANE A\",86)',vr:\"SS\",name:\"CollimaterDiaphragmPosition1\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",88)':{tag:'(0019,\"SIEMENS RA PLANE A\",88)',vr:\"SS\",name:\"CollimaterDiaphragmPosition2\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",8a)':{tag:'(0019,\"SIEMENS RA PLANE A\",8a)',vr:\"SS\",name:\"CollimaterDiaphragmMode\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",8c)':{tag:'(0019,\"SIEMENS RA PLANE A\",8c)',vr:\"SS\",name:\"CollimaterBeamLimitBreadth\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",8e)':{tag:'(0019,\"SIEMENS RA PLANE A\",8e)',vr:\"SS\",name:\"CollimaterBeamLimitHeight\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",90)':{tag:'(0019,\"SIEMENS RA PLANE A\",90)',vr:\"SS\",name:\"CollimaterBeamLimitDiameter\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",92)':{tag:'(0019,\"SIEMENS RA PLANE A\",92)',vr:\"SS\",name:\"X-RayControlMOde\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",94)':{tag:'(0019,\"SIEMENS RA PLANE A\",94)',vr:\"SS\",name:\"X-RaySystem\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",96)':{tag:'(0019,\"SIEMENS RA PLANE A\",96)',vr:\"SS\",name:\"FocalSpot\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",98)':{tag:'(0019,\"SIEMENS RA PLANE A\",98)',vr:\"SS\",name:\"ExposureControl\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",9a)':{tag:'(0019,\"SIEMENS RA PLANE A\",9a)',vr:\"SL\",name:\"XRayVoltage\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",9c)':{tag:'(0019,\"SIEMENS RA PLANE A\",9c)',vr:\"SL\",name:\"XRayCurrent\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",9e)':{tag:'(0019,\"SIEMENS RA PLANE A\",9e)',vr:\"SL\",name:\"XRayCurrentTimeProduct\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",a0)':{tag:'(0019,\"SIEMENS RA PLANE A\",a0)',vr:\"SL\",name:\"XRayPulseTime\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",a2)':{tag:'(0019,\"SIEMENS RA PLANE A\",a2)',vr:\"SL\",name:\"XRaySceneTimeFluoroClock\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",a4)':{tag:'(0019,\"SIEMENS RA PLANE A\",a4)',vr:\"SS\",name:\"MaximumPulseRate\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",a6)':{tag:'(0019,\"SIEMENS RA PLANE A\",a6)',vr:\"SS\",name:\"PulsesPerScene\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",a8)':{tag:'(0019,\"SIEMENS RA PLANE A\",a8)',vr:\"SL\",name:\"DoseAreaProductOfScene\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",aa)':{tag:'(0019,\"SIEMENS RA PLANE A\",aa)',vr:\"SS\",name:\"Dose\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",ac)':{tag:'(0019,\"SIEMENS RA PLANE A\",ac)',vr:\"SS\",name:\"DoseRate\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",ae)':{tag:'(0019,\"SIEMENS RA PLANE A\",ae)',vr:\"SL\",name:\"IIToCoverDistance\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",b0)':{tag:'(0019,\"SIEMENS RA PLANE A\",b0)',vr:\"SS\",name:\"LastFramePhase1\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",b1)':{tag:'(0019,\"SIEMENS RA PLANE A\",b1)',vr:\"SS\",name:\"FrameRatePhase1\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",b2)':{tag:'(0019,\"SIEMENS RA PLANE A\",b2)',vr:\"SS\",name:\"LastFramePhase2\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",b3)':{tag:'(0019,\"SIEMENS RA PLANE A\",b3)',vr:\"SS\",name:\"FrameRatePhase2\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",b4)':{tag:'(0019,\"SIEMENS RA PLANE A\",b4)',vr:\"SS\",name:\"LastFramePhase3\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",b5)':{tag:'(0019,\"SIEMENS RA PLANE A\",b5)',vr:\"SS\",name:\"FrameRatePhase3\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",b6)':{tag:'(0019,\"SIEMENS RA PLANE A\",b6)',vr:\"SS\",name:\"LastFramePhase4\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",b7)':{tag:'(0019,\"SIEMENS RA PLANE A\",b7)',vr:\"SS\",name:\"FrameRatePhase4\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",b8)':{tag:'(0019,\"SIEMENS RA PLANE A\",b8)',vr:\"SS\",name:\"GammaOfNativeImage\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",b9)':{tag:'(0019,\"SIEMENS RA PLANE A\",b9)',vr:\"SS\",name:\"GammaOfTVSystem\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",bb)':{tag:'(0019,\"SIEMENS RA PLANE A\",bb)',vr:\"SL\",name:\"PixelshiftX\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",bc)':{tag:'(0019,\"SIEMENS RA PLANE A\",bc)',vr:\"SL\",name:\"PixelshiftY\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",bd)':{tag:'(0019,\"SIEMENS RA PLANE A\",bd)',vr:\"SL\",name:\"MaskAverageFactor\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",be)':{tag:'(0019,\"SIEMENS RA PLANE A\",be)',vr:\"SL\",name:\"BlankingCircleFlag\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",bf)':{tag:'(0019,\"SIEMENS RA PLANE A\",bf)',vr:\"SL\",name:\"CircleRowStart\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",c0)':{tag:'(0019,\"SIEMENS RA PLANE A\",c0)',vr:\"SL\",name:\"CircleRowEnd\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",c1)':{tag:'(0019,\"SIEMENS RA PLANE A\",c1)',vr:\"SL\",name:\"CircleColumnStart\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",c2)':{tag:'(0019,\"SIEMENS RA PLANE A\",c2)',vr:\"SL\",name:\"CircleColumnEnd\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",c3)':{tag:'(0019,\"SIEMENS RA PLANE A\",c3)',vr:\"SL\",name:\"CircleDiameter\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",c4)':{tag:'(0019,\"SIEMENS RA PLANE A\",c4)',vr:\"SL\",name:\"RectangularCollimaterFlag\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",c5)':{tag:'(0019,\"SIEMENS RA PLANE A\",c5)',vr:\"SL\",name:\"RectangleRowStart\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",c6)':{tag:'(0019,\"SIEMENS RA PLANE A\",c6)',vr:\"SL\",name:\"RectangleRowEnd\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",c7)':{tag:'(0019,\"SIEMENS RA PLANE A\",c7)',vr:\"SL\",name:\"RectangleColumnStart\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",c8)':{tag:'(0019,\"SIEMENS RA PLANE A\",c8)',vr:\"SL\",name:\"RectangleColumnEnd\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",c9)':{tag:'(0019,\"SIEMENS RA PLANE A\",c9)',vr:\"SL\",name:\"RectangleAngulation\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",ca)':{tag:'(0019,\"SIEMENS RA PLANE A\",ca)',vr:\"SL\",name:\"IrisCollimatorFlag\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",cb)':{tag:'(0019,\"SIEMENS RA PLANE A\",cb)',vr:\"SL\",name:\"IrisRowStart\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",cc)':{tag:'(0019,\"SIEMENS RA PLANE A\",cc)',vr:\"SL\",name:\"IrisRowEnd\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",cd)':{tag:'(0019,\"SIEMENS RA PLANE A\",cd)',vr:\"SL\",name:\"IrisColumnStart\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",ce)':{tag:'(0019,\"SIEMENS RA PLANE A\",ce)',vr:\"SL\",name:\"IrisColumnEnd\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",cf)':{tag:'(0019,\"SIEMENS RA PLANE A\",cf)',vr:\"SL\",name:\"IrisAngulation\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",d1)':{tag:'(0019,\"SIEMENS RA PLANE A\",d1)',vr:\"SS\",name:\"NumberOfFramesPlane\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",d2)':{tag:'(0019,\"SIEMENS RA PLANE A\",d2)',vr:\"SS\",name:\"Internal\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",d3)':{tag:'(0019,\"SIEMENS RA PLANE A\",d3)',vr:\"SS\",name:\"Internal\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",d4)':{tag:'(0019,\"SIEMENS RA PLANE A\",d4)',vr:\"SS\",name:\"Internal\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",d5)':{tag:'(0019,\"SIEMENS RA PLANE A\",d5)',vr:\"SS\",name:\"Internal\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",d6)':{tag:'(0019,\"SIEMENS RA PLANE A\",d6)',vr:\"SS\",name:\"Internal\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",d7)':{tag:'(0019,\"SIEMENS RA PLANE A\",d7)',vr:\"SS\",name:\"Internal\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",d8)':{tag:'(0019,\"SIEMENS RA PLANE A\",d8)',vr:\"SS\",name:\"Internal\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",d9)':{tag:'(0019,\"SIEMENS RA PLANE A\",d9)',vr:\"SS\",name:\"Internal\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",da)':{tag:'(0019,\"SIEMENS RA PLANE A\",da)',vr:\"SS\",name:\"Internal\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",db)':{tag:'(0019,\"SIEMENS RA PLANE A\",db)',vr:\"SS\",name:\"Internal\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",dc)':{tag:'(0019,\"SIEMENS RA PLANE A\",dc)',vr:\"SS\",name:\"Internal\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",dd)':{tag:'(0019,\"SIEMENS RA PLANE A\",dd)',vr:\"SL\",name:\"AnatomicBackground\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",de)':{tag:'(0019,\"SIEMENS RA PLANE A\",de)',vr:\"SL\",name:\"AutoWindowBase\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",df)':{tag:'(0019,\"SIEMENS RA PLANE A\",df)',vr:\"SS\",name:\"Internal\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE A\",e0)':{tag:'(0019,\"SIEMENS RA PLANE A\",e0)',vr:\"SL\",name:\"Internal\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS RA PLANE B\",28)':{tag:'(0011,\"SIEMENS RA PLANE B\",28)',vr:\"SL\",name:\"FluoroTimerB\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS RA PLANE B\",29)':{tag:'(0011,\"SIEMENS RA PLANE B\",29)',vr:\"SL\",name:\"FluoroSkinDoseB\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS RA PLANE B\",2a)':{tag:'(0011,\"SIEMENS RA PLANE B\",2a)',vr:\"SL\",name:\"TotalSkinDoseB\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS RA PLANE B\",2b)':{tag:'(0011,\"SIEMENS RA PLANE B\",2b)',vr:\"SL\",name:\"FluoroDoseAreaProductB\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS RA PLANE B\",2c)':{tag:'(0011,\"SIEMENS RA PLANE B\",2c)',vr:\"SL\",name:\"TotalDoseAreaProductB\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",18)':{tag:'(0019,\"SIEMENS RA PLANE B\",18)',vr:\"SS\",name:\"Internal\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",19)':{tag:'(0019,\"SIEMENS RA PLANE B\",19)',vr:\"SS\",name:\"Internal\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",1a)':{tag:'(0019,\"SIEMENS RA PLANE B\",1a)',vr:\"SS\",name:\"Internal\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",1b)':{tag:'(0019,\"SIEMENS RA PLANE B\",1b)',vr:\"SS\",name:\"Internal\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",1c)':{tag:'(0019,\"SIEMENS RA PLANE B\",1c)',vr:\"SS\",name:\"Internal\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",1d)':{tag:'(0019,\"SIEMENS RA PLANE B\",1d)',vr:\"SS\",name:\"Internal\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",1e)':{tag:'(0019,\"SIEMENS RA PLANE B\",1e)',vr:\"SS\",name:\"Internal\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",1f)':{tag:'(0019,\"SIEMENS RA PLANE B\",1f)',vr:\"SS\",name:\"Internal\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",20)':{tag:'(0019,\"SIEMENS RA PLANE B\",20)',vr:\"SL\",name:\"SystemCalibFactorPlaneB\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",22)':{tag:'(0019,\"SIEMENS RA PLANE B\",22)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",24)':{tag:'(0019,\"SIEMENS RA PLANE B\",24)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",26)':{tag:'(0019,\"SIEMENS RA PLANE B\",26)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",28)':{tag:'(0019,\"SIEMENS RA PLANE B\",28)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",2a)':{tag:'(0019,\"SIEMENS RA PLANE B\",2a)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",2c)':{tag:'(0019,\"SIEMENS RA PLANE B\",2c)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",2e)':{tag:'(0019,\"SIEMENS RA PLANE B\",2e)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",30)':{tag:'(0019,\"SIEMENS RA PLANE B\",30)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",32)':{tag:'(0019,\"SIEMENS RA PLANE B\",32)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",34)':{tag:'(0019,\"SIEMENS RA PLANE B\",34)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",36)':{tag:'(0019,\"SIEMENS RA PLANE B\",36)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",38)':{tag:'(0019,\"SIEMENS RA PLANE B\",38)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",3a)':{tag:'(0019,\"SIEMENS RA PLANE B\",3a)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",3c)':{tag:'(0019,\"SIEMENS RA PLANE B\",3c)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",3e)':{tag:'(0019,\"SIEMENS RA PLANE B\",3e)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",40)':{tag:'(0019,\"SIEMENS RA PLANE B\",40)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",42)':{tag:'(0019,\"SIEMENS RA PLANE B\",42)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",44)':{tag:'(0019,\"SIEMENS RA PLANE B\",44)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",46)':{tag:'(0019,\"SIEMENS RA PLANE B\",46)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",48)':{tag:'(0019,\"SIEMENS RA PLANE B\",48)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",4a)':{tag:'(0019,\"SIEMENS RA PLANE B\",4a)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",4c)':{tag:'(0019,\"SIEMENS RA PLANE B\",4c)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",4e)':{tag:'(0019,\"SIEMENS RA PLANE B\",4e)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",50)':{tag:'(0019,\"SIEMENS RA PLANE B\",50)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",52)':{tag:'(0019,\"SIEMENS RA PLANE B\",52)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",54)':{tag:'(0019,\"SIEMENS RA PLANE B\",54)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",56)':{tag:'(0019,\"SIEMENS RA PLANE B\",56)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",58)':{tag:'(0019,\"SIEMENS RA PLANE B\",58)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",5a)':{tag:'(0019,\"SIEMENS RA PLANE B\",5a)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",5c)':{tag:'(0019,\"SIEMENS RA PLANE B\",5c)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",5e)':{tag:'(0019,\"SIEMENS RA PLANE B\",5e)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",60)':{tag:'(0019,\"SIEMENS RA PLANE B\",60)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",62)':{tag:'(0019,\"SIEMENS RA PLANE B\",62)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",64)':{tag:'(0019,\"SIEMENS RA PLANE B\",64)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",66)':{tag:'(0019,\"SIEMENS RA PLANE B\",66)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",68)':{tag:'(0019,\"SIEMENS RA PLANE B\",68)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",6a)':{tag:'(0019,\"SIEMENS RA PLANE B\",6a)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",6c)':{tag:'(0019,\"SIEMENS RA PLANE B\",6c)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",6e)':{tag:'(0019,\"SIEMENS RA PLANE B\",6e)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",70)':{tag:'(0019,\"SIEMENS RA PLANE B\",70)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",72)':{tag:'(0019,\"SIEMENS RA PLANE B\",72)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",74)':{tag:'(0019,\"SIEMENS RA PLANE B\",74)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",76)':{tag:'(0019,\"SIEMENS RA PLANE B\",76)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",78)':{tag:'(0019,\"SIEMENS RA PLANE B\",78)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",7a)':{tag:'(0019,\"SIEMENS RA PLANE B\",7a)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",7c)':{tag:'(0019,\"SIEMENS RA PLANE B\",7c)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",7e)':{tag:'(0019,\"SIEMENS RA PLANE B\",7e)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",80)':{tag:'(0019,\"SIEMENS RA PLANE B\",80)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",82)':{tag:'(0019,\"SIEMENS RA PLANE B\",82)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",84)':{tag:'(0019,\"SIEMENS RA PLANE B\",84)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",86)':{tag:'(0019,\"SIEMENS RA PLANE B\",86)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",88)':{tag:'(0019,\"SIEMENS RA PLANE B\",88)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",8a)':{tag:'(0019,\"SIEMENS RA PLANE B\",8a)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",8c)':{tag:'(0019,\"SIEMENS RA PLANE B\",8c)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",8e)':{tag:'(0019,\"SIEMENS RA PLANE B\",8e)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",90)':{tag:'(0019,\"SIEMENS RA PLANE B\",90)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",92)':{tag:'(0019,\"SIEMENS RA PLANE B\",92)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",94)':{tag:'(0019,\"SIEMENS RA PLANE B\",94)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",96)':{tag:'(0019,\"SIEMENS RA PLANE B\",96)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",98)':{tag:'(0019,\"SIEMENS RA PLANE B\",98)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",9a)':{tag:'(0019,\"SIEMENS RA PLANE B\",9a)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",9c)':{tag:'(0019,\"SIEMENS RA PLANE B\",9c)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",9e)':{tag:'(0019,\"SIEMENS RA PLANE B\",9e)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",a0)':{tag:'(0019,\"SIEMENS RA PLANE B\",a0)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",a2)':{tag:'(0019,\"SIEMENS RA PLANE B\",a2)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",a4)':{tag:'(0019,\"SIEMENS RA PLANE B\",a4)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",a6)':{tag:'(0019,\"SIEMENS RA PLANE B\",a6)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",a8)':{tag:'(0019,\"SIEMENS RA PLANE B\",a8)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",aa)':{tag:'(0019,\"SIEMENS RA PLANE B\",aa)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS RA PLANE B\",ac)':{tag:'(0019,\"SIEMENS RA PLANE B\",ac)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS RIS\",10)':{tag:'(0011,\"SIEMENS RIS\",10)',vr:\"LT\",name:\"PatientUID\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS RIS\",11)':{tag:'(0011,\"SIEMENS RIS\",11)',vr:\"LT\",name:\"PatientID\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS RIS\",20)':{tag:'(0011,\"SIEMENS RIS\",20)',vr:\"DA\",name:\"PatientRegistrationDate\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS RIS\",21)':{tag:'(0011,\"SIEMENS RIS\",21)',vr:\"TM\",name:\"PatientRegistrationTime\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS RIS\",30)':{tag:'(0011,\"SIEMENS RIS\",30)',vr:\"LT\",name:\"PatientnameRIS\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS RIS\",31)':{tag:'(0011,\"SIEMENS RIS\",31)',vr:\"LT\",name:\"PatientprenameRIS\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS RIS\",40)':{tag:'(0011,\"SIEMENS RIS\",40)',vr:\"LT\",name:\"PatientHospitalStatus\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS RIS\",41)':{tag:'(0011,\"SIEMENS RIS\",41)',vr:\"LT\",name:\"MedicalAlerts\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SIEMENS RIS\",42)':{tag:'(0011,\"SIEMENS RIS\",42)',vr:\"LT\",name:\"ContrastAllergies\",vm:\"1\",version:\"PrivateTag\"},'(0031,\"SIEMENS RIS\",10)':{tag:'(0031,\"SIEMENS RIS\",10)',vr:\"LT\",name:\"RequestUID\",vm:\"1\",version:\"PrivateTag\"},'(0031,\"SIEMENS RIS\",45)':{tag:'(0031,\"SIEMENS RIS\",45)',vr:\"LT\",name:\"RequestingPhysician\",vm:\"1\",version:\"PrivateTag\"},'(0031,\"SIEMENS RIS\",50)':{tag:'(0031,\"SIEMENS RIS\",50)',vr:\"LT\",name:\"RequestedPhysician\",vm:\"1\",version:\"PrivateTag\"},'(0033,\"SIEMENS RIS\",10)':{tag:'(0033,\"SIEMENS RIS\",10)',vr:\"LT\",name:\"PatientStudyUID\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS SMS-AX ACQ 1.0\",00)':{tag:'(0021,\"SIEMENS SMS-AX ACQ 1.0\",00)',vr:\"US\",name:\"AcquisitionType\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS SMS-AX ACQ 1.0\",01)':{tag:'(0021,\"SIEMENS SMS-AX ACQ 1.0\",01)',vr:\"US\",name:\"AcquisitionMode\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS SMS-AX ACQ 1.0\",02)':{tag:'(0021,\"SIEMENS SMS-AX ACQ 1.0\",02)',vr:\"US\",name:\"FootswitchIndex\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS SMS-AX ACQ 1.0\",03)':{tag:'(0021,\"SIEMENS SMS-AX ACQ 1.0\",03)',vr:\"US\",name:\"AcquisitionRoom\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS SMS-AX ACQ 1.0\",04)':{tag:'(0021,\"SIEMENS SMS-AX ACQ 1.0\",04)',vr:\"SL\",name:\"CurrentTimeProduct\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS SMS-AX ACQ 1.0\",05)':{tag:'(0021,\"SIEMENS SMS-AX ACQ 1.0\",05)',vr:\"SL\",name:\"Dose\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS SMS-AX ACQ 1.0\",06)':{tag:'(0021,\"SIEMENS SMS-AX ACQ 1.0\",06)',vr:\"SL\",name:\"SkinDosePercent\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS SMS-AX ACQ 1.0\",07)':{tag:'(0021,\"SIEMENS SMS-AX ACQ 1.0\",07)',vr:\"SL\",name:\"SkinDoseAccumulation\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS SMS-AX ACQ 1.0\",08)':{tag:'(0021,\"SIEMENS SMS-AX ACQ 1.0\",08)',vr:\"SL\",name:\"SkinDoseRate\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS SMS-AX ACQ 1.0\",0A)':{tag:'(0021,\"SIEMENS SMS-AX ACQ 1.0\",0A)',vr:\"UL\",name:\"CopperFilter\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS SMS-AX ACQ 1.0\",0B)':{tag:'(0021,\"SIEMENS SMS-AX ACQ 1.0\",0B)',vr:\"US\",name:\"MeasuringField\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS SMS-AX ACQ 1.0\",0C)':{tag:'(0021,\"SIEMENS SMS-AX ACQ 1.0\",0C)',vr:\"SS\",name:\"PostBlankingCircle\",vm:\"3\",version:\"PrivateTag\"},'(0021,\"SIEMENS SMS-AX ACQ 1.0\",0D)':{tag:'(0021,\"SIEMENS SMS-AX ACQ 1.0\",0D)',vr:\"SS\",name:\"DynaAngles\",vm:\"2-2n\",version:\"PrivateTag\"},'(0021,\"SIEMENS SMS-AX ACQ 1.0\",0E)':{tag:'(0021,\"SIEMENS SMS-AX ACQ 1.0\",0E)',vr:\"SS\",name:\"TotalSteps\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS SMS-AX ACQ 1.0\",0F)':{tag:'(0021,\"SIEMENS SMS-AX ACQ 1.0\",0F)',vr:\"SL\",name:\"DynaXRayInfo\",vm:\"3-3n\",version:\"PrivateTag\"},'(0021,\"SIEMENS SMS-AX ACQ 1.0\",10)':{tag:'(0021,\"SIEMENS SMS-AX ACQ 1.0\",10)',vr:\"US\",name:\"ModalityLUTInputGamma\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS SMS-AX ACQ 1.0\",11)':{tag:'(0021,\"SIEMENS SMS-AX ACQ 1.0\",11)',vr:\"US\",name:\"ModalityLUTOutputGamma\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS SMS-AX ACQ 1.0\",12)':{tag:'(0021,\"SIEMENS SMS-AX ACQ 1.0\",12)',vr:\"OB\",name:\"SH_STPAR\",vm:\"1-n\",version:\"PrivateTag\"},'(0021,\"SIEMENS SMS-AX ACQ 1.0\",13)':{tag:'(0021,\"SIEMENS SMS-AX ACQ 1.0\",13)',vr:\"US\",name:\"AcquisitionZoom\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS SMS-AX ACQ 1.0\",14)':{tag:'(0021,\"SIEMENS SMS-AX ACQ 1.0\",14)',vr:\"SS\",name:\"DynaAngulationStepWidth\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS SMS-AX ACQ 1.0\",15)':{tag:'(0021,\"SIEMENS SMS-AX ACQ 1.0\",15)',vr:\"US\",name:\"Harmonization\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS SMS-AX ACQ 1.0\",16)':{tag:'(0021,\"SIEMENS SMS-AX ACQ 1.0\",16)',vr:\"US\",name:\"DRSingleFlag\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS SMS-AX ACQ 1.0\",17)':{tag:'(0021,\"SIEMENS SMS-AX ACQ 1.0\",17)',vr:\"SL\",name:\"SourceToIsocenter\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS SMS-AX ACQ 1.0\",18)':{tag:'(0021,\"SIEMENS SMS-AX ACQ 1.0\",18)',vr:\"US\",name:\"PressureData\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS SMS-AX ACQ 1.0\",19)':{tag:'(0021,\"SIEMENS SMS-AX ACQ 1.0\",19)',vr:\"SL\",name:\"ECGIndexArray\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS SMS-AX ACQ 1.0\",1A)':{tag:'(0021,\"SIEMENS SMS-AX ACQ 1.0\",1A)',vr:\"US\",name:\"FDFlag\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS SMS-AX ACQ 1.0\",1B)':{tag:'(0021,\"SIEMENS SMS-AX ACQ 1.0\",1B)',vr:\"OB\",name:\"SH_ZOOM\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS SMS-AX ACQ 1.0\",1C)':{tag:'(0021,\"SIEMENS SMS-AX ACQ 1.0\",1C)',vr:\"OB\",name:\"SH_COLPAR\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS SMS-AX ACQ 1.0\",1D)':{tag:'(0021,\"SIEMENS SMS-AX ACQ 1.0\",1D)',vr:\"US\",name:\"K_Factor\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS SMS-AX ACQ 1.0\",1E)':{tag:'(0021,\"SIEMENS SMS-AX ACQ 1.0\",1E)',vr:\"US\",name:\"EVE\",vm:\"8\",version:\"PrivateTag\"},'(0021,\"SIEMENS SMS-AX ACQ 1.0\",1F)':{tag:'(0021,\"SIEMENS SMS-AX ACQ 1.0\",1F)',vr:\"SL\",name:\"TotalSceneTime\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS SMS-AX ACQ 1.0\",20)':{tag:'(0021,\"SIEMENS SMS-AX ACQ 1.0\",20)',vr:\"US\",name:\"RestoreFlag\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS SMS-AX ACQ 1.0\",21)':{tag:'(0021,\"SIEMENS SMS-AX ACQ 1.0\",21)',vr:\"US\",name:\"StandMovementFlag\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS SMS-AX ACQ 1.0\",22)':{tag:'(0021,\"SIEMENS SMS-AX ACQ 1.0\",22)',vr:\"US\",name:\"FDRows\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS SMS-AX ACQ 1.0\",23)':{tag:'(0021,\"SIEMENS SMS-AX ACQ 1.0\",23)',vr:\"US\",name:\"FDColumns\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS SMS-AX ACQ 1.0\",24)':{tag:'(0021,\"SIEMENS SMS-AX ACQ 1.0\",24)',vr:\"US\",name:\"TableMovementFlag\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS SMS-AX ACQ 1.0\",25)':{tag:'(0021,\"SIEMENS SMS-AX ACQ 1.0\",25)',vr:\"LO\",name:\"OriginalOrganProgramName\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SIEMENS SMS-AX ACQ 1.0\",26)':{tag:'(0021,\"SIEMENS SMS-AX ACQ 1.0\",26)',vr:\"DS\",name:\"CrispyXPIFilter\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",00)':{tag:'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",00)',vr:\"US\",name:\"ViewNative\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",01)':{tag:'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",01)',vr:\"US\",name:\"OriginalSeriesNumber\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",02)':{tag:'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",02)',vr:\"US\",name:\"OriginalImageNumber\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",03)':{tag:'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",03)',vr:\"US\",name:\"WinCenter\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",04)':{tag:'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",04)',vr:\"US\",name:\"WinWidth\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",05)':{tag:'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",05)',vr:\"US\",name:\"WinBrightness\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",06)':{tag:'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",06)',vr:\"US\",name:\"WinContrast\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",07)':{tag:'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",07)',vr:\"US\",name:\"OriginalFrameNumber\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",08)':{tag:'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",08)',vr:\"US\",name:\"OriginalMaskFrameNumber\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",09)':{tag:'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",09)',vr:\"US\",name:\"Opac\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",0A)':{tag:'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",0A)',vr:\"US\",name:\"OriginalNumberOfFrames\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",0B)':{tag:'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",0B)',vr:\"DS\",name:\"OriginalSceneDuration\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",0C)':{tag:'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",0C)',vr:\"LO\",name:\"IdentifierLOID\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",0D)':{tag:'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",0D)',vr:\"SS\",name:\"OriginalSceneVFRInfo\",vm:\"1-n\",version:\"PrivateTag\"},'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",0E)':{tag:'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",0E)',vr:\"SS\",name:\"OriginalFrameECGPosition\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",0F)':{tag:'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",0F)',vr:\"SS\",name:\"OriginalECG1stFrameOffset_retired\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",10)':{tag:'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",10)',vr:\"SS\",name:\"ZoomFlag\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",11)':{tag:'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",11)',vr:\"US\",name:\"Flex\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",12)':{tag:'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",12)',vr:\"US\",name:\"NumberOfMaskFrames\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",13)':{tag:'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",13)',vr:\"US\",name:\"NumberOfFillFrames\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",14)':{tag:'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",14)',vr:\"US\",name:\"SeriesNumber\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",15)':{tag:'(0025,\"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0\",15)',vr:\"IS\",name:\"ImageNumber\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"SIEMENS SMS-AX QUANT 1.0\",00)':{tag:'(0023,\"SIEMENS SMS-AX QUANT 1.0\",00)',vr:\"DS\",name:\"HorizontalCalibrationPixelSize\",vm:\"2\",version:\"PrivateTag\"},'(0023,\"SIEMENS SMS-AX QUANT 1.0\",01)':{tag:'(0023,\"SIEMENS SMS-AX QUANT 1.0\",01)',vr:\"DS\",name:\"VerticalCalibrationPixelSize\",vm:\"2\",version:\"PrivateTag\"},'(0023,\"SIEMENS SMS-AX QUANT 1.0\",02)':{tag:'(0023,\"SIEMENS SMS-AX QUANT 1.0\",02)',vr:\"LO\",name:\"CalibrationObject\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"SIEMENS SMS-AX QUANT 1.0\",03)':{tag:'(0023,\"SIEMENS SMS-AX QUANT 1.0\",03)',vr:\"DS\",name:\"CalibrationObjectSize\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"SIEMENS SMS-AX QUANT 1.0\",04)':{tag:'(0023,\"SIEMENS SMS-AX QUANT 1.0\",04)',vr:\"LO\",name:\"CalibrationMethod\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"SIEMENS SMS-AX QUANT 1.0\",05)':{tag:'(0023,\"SIEMENS SMS-AX QUANT 1.0\",05)',vr:\"ST\",name:\"Filename\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"SIEMENS SMS-AX QUANT 1.0\",06)':{tag:'(0023,\"SIEMENS SMS-AX QUANT 1.0\",06)',vr:\"IS\",name:\"FrameNumber\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"SIEMENS SMS-AX QUANT 1.0\",07)':{tag:'(0023,\"SIEMENS SMS-AX QUANT 1.0\",07)',vr:\"IS\",name:\"CalibrationFactorMultiplicity\",vm:\"2\",version:\"PrivateTag\"},'(0023,\"SIEMENS SMS-AX QUANT 1.0\",08)':{tag:'(0023,\"SIEMENS SMS-AX QUANT 1.0\",08)',vr:\"IS\",name:\"CalibrationTODValue\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS SMS-AX VIEW 1.0\",00)':{tag:'(0019,\"SIEMENS SMS-AX VIEW 1.0\",00)',vr:\"US\",name:\"ReviewMode\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS SMS-AX VIEW 1.0\",01)':{tag:'(0019,\"SIEMENS SMS-AX VIEW 1.0\",01)',vr:\"US\",name:\"AnatomicalBackgroundPercent\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS SMS-AX VIEW 1.0\",02)':{tag:'(0019,\"SIEMENS SMS-AX VIEW 1.0\",02)',vr:\"US\",name:\"NumberOfPhases\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS SMS-AX VIEW 1.0\",03)':{tag:'(0019,\"SIEMENS SMS-AX VIEW 1.0\",03)',vr:\"US\",name:\"ApplyAnatomicalBackground\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS SMS-AX VIEW 1.0\",04)':{tag:'(0019,\"SIEMENS SMS-AX VIEW 1.0\",04)',vr:\"SS\",name:\"PixelShiftArray\",vm:\"4-4n\",version:\"PrivateTag\"},'(0019,\"SIEMENS SMS-AX VIEW 1.0\",05)':{tag:'(0019,\"SIEMENS SMS-AX VIEW 1.0\",05)',vr:\"US\",name:\"Brightness\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS SMS-AX VIEW 1.0\",06)':{tag:'(0019,\"SIEMENS SMS-AX VIEW 1.0\",06)',vr:\"US\",name:\"Contrast\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS SMS-AX VIEW 1.0\",07)':{tag:'(0019,\"SIEMENS SMS-AX VIEW 1.0\",07)',vr:\"US\",name:\"Enabled\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS SMS-AX VIEW 1.0\",08)':{tag:'(0019,\"SIEMENS SMS-AX VIEW 1.0\",08)',vr:\"US\",name:\"NativeEdgeEnhancementPercentGain\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS SMS-AX VIEW 1.0\",09)':{tag:'(0019,\"SIEMENS SMS-AX VIEW 1.0\",09)',vr:\"SS\",name:\"NativeEdgeEnhancementLUTIndex\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS SMS-AX VIEW 1.0\",0A)':{tag:'(0019,\"SIEMENS SMS-AX VIEW 1.0\",0A)',vr:\"SS\",name:\"NativeEdgeEnhancementKernelSize\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS SMS-AX VIEW 1.0\",0B)':{tag:'(0019,\"SIEMENS SMS-AX VIEW 1.0\",0B)',vr:\"US\",name:\"SubtrEdgeEnhancementPercentGain\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS SMS-AX VIEW 1.0\",0C)':{tag:'(0019,\"SIEMENS SMS-AX VIEW 1.0\",0C)',vr:\"SS\",name:\"SubtrEdgeEnhancementLUTIndex\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS SMS-AX VIEW 1.0\",0D)':{tag:'(0019,\"SIEMENS SMS-AX VIEW 1.0\",0D)',vr:\"SS\",name:\"SubtrEdgeEnhancementKernelSize\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS SMS-AX VIEW 1.0\",0E)':{tag:'(0019,\"SIEMENS SMS-AX VIEW 1.0\",0E)',vr:\"US\",name:\"FadePercent\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS SMS-AX VIEW 1.0\",0F)':{tag:'(0019,\"SIEMENS SMS-AX VIEW 1.0\",0F)',vr:\"US\",name:\"FlippedBeforeLateralityApplied\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS SMS-AX VIEW 1.0\",10)':{tag:'(0019,\"SIEMENS SMS-AX VIEW 1.0\",10)',vr:\"US\",name:\"ApplyFade\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS SMS-AX VIEW 1.0\",12)':{tag:'(0019,\"SIEMENS SMS-AX VIEW 1.0\",12)',vr:\"US\",name:\"Zoom\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS SMS-AX VIEW 1.0\",13)':{tag:'(0019,\"SIEMENS SMS-AX VIEW 1.0\",13)',vr:\"SS\",name:\"PanX\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS SMS-AX VIEW 1.0\",14)':{tag:'(0019,\"SIEMENS SMS-AX VIEW 1.0\",14)',vr:\"SS\",name:\"PanY\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS SMS-AX VIEW 1.0\",15)':{tag:'(0019,\"SIEMENS SMS-AX VIEW 1.0\",15)',vr:\"SS\",name:\"NativeEdgeEnhancementAdvPercGain\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS SMS-AX VIEW 1.0\",16)':{tag:'(0019,\"SIEMENS SMS-AX VIEW 1.0\",16)',vr:\"SS\",name:\"SubtrEdgeEnhancementAdvPercGain\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS SMS-AX VIEW 1.0\",17)':{tag:'(0019,\"SIEMENS SMS-AX VIEW 1.0\",17)',vr:\"US\",name:\"InvertFlag\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS SMS-AX VIEW 1.0\",1A)':{tag:'(0019,\"SIEMENS SMS-AX VIEW 1.0\",1A)',vr:\"OB\",name:\"Quant1KOverlay\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS SMS-AX VIEW 1.0\",1B)':{tag:'(0019,\"SIEMENS SMS-AX VIEW 1.0\",1B)',vr:\"US\",name:\"OriginalResolution\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS SMS-AX VIEW 1.0\",1C)':{tag:'(0019,\"SIEMENS SMS-AX VIEW 1.0\",1C)',vr:\"DS\",name:\"AutoWindowCenter\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SIEMENS SMS-AX VIEW 1.0\",1D)':{tag:'(0019,\"SIEMENS SMS-AX VIEW 1.0\",1D)',vr:\"DS\",name:\"AutoWindowWidth\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIENET\",01)':{tag:'(0009,\"SIENET\",01)',vr:\"US\",name:\"SIENETCommandField\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIENET\",14)':{tag:'(0009,\"SIENET\",14)',vr:\"LT\",name:\"ReceiverPLA\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIENET\",16)':{tag:'(0009,\"SIENET\",16)',vr:\"US\",name:\"TransferPriority\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SIENET\",29)':{tag:'(0009,\"SIENET\",29)',vr:\"LT\",name:\"ActualUser\",vm:\"1\",version:\"PrivateTag\"},'(0095,\"SIENET\",01)':{tag:'(0095,\"SIENET\",01)',vr:\"LT\",name:\"ExaminationFolderID\",vm:\"1\",version:\"PrivateTag\"},'(0095,\"SIENET\",04)':{tag:'(0095,\"SIENET\",04)',vr:\"UL\",name:\"FolderReportedStatus\",vm:\"1\",version:\"PrivateTag\"},'(0095,\"SIENET\",05)':{tag:'(0095,\"SIENET\",05)',vr:\"LT\",name:\"FolderReportingRadiologist\",vm:\"1\",version:\"PrivateTag\"},'(0095,\"SIENET\",07)':{tag:'(0095,\"SIENET\",07)',vr:\"LT\",name:\"SIENETISAPLA\",vm:\"1\",version:\"PrivateTag\"},'(0099,\"SIENET\",02)':{tag:'(0099,\"SIENET\",02)',vr:\"UL\",name:\"DataObjectAttributes\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI RELEASE 1\",10)':{tag:'(0009,\"SPI RELEASE 1\",10)',vr:\"LT\",name:\"Comments\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI RELEASE 1\",15)':{tag:'(0009,\"SPI RELEASE 1\",15)',vr:\"LO\",name:\"SPIImageUID\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI RELEASE 1\",40)':{tag:'(0009,\"SPI RELEASE 1\",40)',vr:\"US\",name:\"DataObjectType\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI RELEASE 1\",41)':{tag:'(0009,\"SPI RELEASE 1\",41)',vr:\"LO\",name:\"DataObjectSubtype\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SPI RELEASE 1\",10)':{tag:'(0011,\"SPI RELEASE 1\",10)',vr:\"LO\",name:\"Organ\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SPI RELEASE 1\",15)':{tag:'(0011,\"SPI RELEASE 1\",15)',vr:\"LO\",name:\"AllergyIndication\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SPI RELEASE 1\",20)':{tag:'(0011,\"SPI RELEASE 1\",20)',vr:\"LO\",name:\"Pregnancy\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI RELEASE 1\",60)':{tag:'(0029,\"SPI RELEASE 1\",60)',vr:\"LT\",name:\"CompressionAlgorithm\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI Release 1\",10)':{tag:'(0009,\"SPI Release 1\",10)',vr:\"LT\",name:\"Comments\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI Release 1\",15)':{tag:'(0009,\"SPI Release 1\",15)',vr:\"LO\",name:\"SPIImageUID\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI Release 1\",40)':{tag:'(0009,\"SPI Release 1\",40)',vr:\"US\",name:\"DataObjectType\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI Release 1\",41)':{tag:'(0009,\"SPI Release 1\",41)',vr:\"LO\",name:\"DataObjectSubtype\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SPI Release 1\",10)':{tag:'(0011,\"SPI Release 1\",10)',vr:\"LO\",name:\"Organ\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SPI Release 1\",15)':{tag:'(0011,\"SPI Release 1\",15)',vr:\"LO\",name:\"AllergyIndication\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SPI Release 1\",20)':{tag:'(0011,\"SPI Release 1\",20)',vr:\"LO\",name:\"Pregnancy\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI Release 1\",60)':{tag:'(0029,\"SPI Release 1\",60)',vr:\"LT\",name:\"CompressionAlgorithm\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI\",10)':{tag:'(0009,\"SPI\",10)',vr:\"LO\",name:\"Comments\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI\",15)':{tag:'(0009,\"SPI\",15)',vr:\"LO\",name:\"SPIImageUID\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI\",40)':{tag:'(0009,\"SPI\",40)',vr:\"US\",name:\"DataObjectType\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI\",41)':{tag:'(0009,\"SPI\",41)',vr:\"LT\",name:\"DataObjectSubtype\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SPI\",10)':{tag:'(0011,\"SPI\",10)',vr:\"LT\",name:\"Organ\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SPI\",15)':{tag:'(0011,\"SPI\",15)',vr:\"LT\",name:\"AllergyIndication\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SPI\",20)':{tag:'(0011,\"SPI\",20)',vr:\"LT\",name:\"Pregnancy\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI\",60)':{tag:'(0029,\"SPI\",60)',vr:\"LT\",name:\"CompressionAlgorithm\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI-P Release 1\",00)':{tag:'(0009,\"SPI-P Release 1\",00)',vr:\"LT\",name:\"DataObjectRecognitionCode\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI-P Release 1\",04)':{tag:'(0009,\"SPI-P Release 1\",04)',vr:\"LO\",name:\"ImageDataConsistence\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI-P Release 1\",08)':{tag:'(0009,\"SPI-P Release 1\",08)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI-P Release 1\",12)':{tag:'(0009,\"SPI-P Release 1\",12)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI-P Release 1\",15)':{tag:'(0009,\"SPI-P Release 1\",15)',vr:\"LO\",name:\"UniqueIdentifier\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI-P Release 1\",16)':{tag:'(0009,\"SPI-P Release 1\",16)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI-P Release 1\",18)':{tag:'(0009,\"SPI-P Release 1\",18)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI-P Release 1\",21)':{tag:'(0009,\"SPI-P Release 1\",21)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI-P Release 1\",31)':{tag:'(0009,\"SPI-P Release 1\",31)',vr:\"LT\",name:\"PACSUniqueIdentifier\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI-P Release 1\",34)':{tag:'(0009,\"SPI-P Release 1\",34)',vr:\"LT\",name:\"ClusterUniqueIdentifier\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI-P Release 1\",38)':{tag:'(0009,\"SPI-P Release 1\",38)',vr:\"LT\",name:\"SystemUniqueIdentifier\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI-P Release 1\",39)':{tag:'(0009,\"SPI-P Release 1\",39)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI-P Release 1\",51)':{tag:'(0009,\"SPI-P Release 1\",51)',vr:\"LT\",name:\"StudyUniqueIdentifier\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI-P Release 1\",61)':{tag:'(0009,\"SPI-P Release 1\",61)',vr:\"LT\",name:\"SeriesUniqueIdentifier\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI-P Release 1\",91)':{tag:'(0009,\"SPI-P Release 1\",91)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI-P Release 1\",f2)':{tag:'(0009,\"SPI-P Release 1\",f2)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI-P Release 1\",f3)':{tag:'(0009,\"SPI-P Release 1\",f3)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI-P Release 1\",f4)':{tag:'(0009,\"SPI-P Release 1\",f4)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI-P Release 1\",f5)':{tag:'(0009,\"SPI-P Release 1\",f5)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI-P Release 1\",f7)':{tag:'(0009,\"SPI-P Release 1\",f7)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SPI-P Release 1\",10)':{tag:'(0011,\"SPI-P Release 1\",10)',vr:\"LT\",name:\"PatientEntryID\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SPI-P Release 1\",21)':{tag:'(0011,\"SPI-P Release 1\",21)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SPI-P Release 1\",22)':{tag:'(0011,\"SPI-P Release 1\",22)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SPI-P Release 1\",31)':{tag:'(0011,\"SPI-P Release 1\",31)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SPI-P Release 1\",32)':{tag:'(0011,\"SPI-P Release 1\",32)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1\",00)':{tag:'(0019,\"SPI-P Release 1\",00)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1\",01)':{tag:'(0019,\"SPI-P Release 1\",01)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1\",02)':{tag:'(0019,\"SPI-P Release 1\",02)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1\",10)':{tag:'(0019,\"SPI-P Release 1\",10)',vr:\"US\",name:\"MainsFrequency\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1\",25)':{tag:'(0019,\"SPI-P Release 1\",25)',vr:\"LT\",name:\"OriginalPixelDataQuality\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1\",30)':{tag:'(0019,\"SPI-P Release 1\",30)',vr:\"US\",name:\"ECGTriggering\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1\",31)':{tag:'(0019,\"SPI-P Release 1\",31)',vr:\"UN\",name:\"ECG1Offset\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1\",32)':{tag:'(0019,\"SPI-P Release 1\",32)',vr:\"UN\",name:\"ECG2Offset1\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1\",33)':{tag:'(0019,\"SPI-P Release 1\",33)',vr:\"UN\",name:\"ECG2Offset2\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1\",50)':{tag:'(0019,\"SPI-P Release 1\",50)',vr:\"US\",name:\"VideoScanMode\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1\",51)':{tag:'(0019,\"SPI-P Release 1\",51)',vr:\"US\",name:\"VideoLineRate\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1\",60)':{tag:'(0019,\"SPI-P Release 1\",60)',vr:\"US\",name:\"XrayTechnique\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1\",61)':{tag:'(0019,\"SPI-P Release 1\",61)',vr:\"DS\",name:\"ImageIdentifierFromat\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1\",62)':{tag:'(0019,\"SPI-P Release 1\",62)',vr:\"US\",name:\"IrisDiaphragm\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1\",63)':{tag:'(0019,\"SPI-P Release 1\",63)',vr:\"CS\",name:\"Filter\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1\",64)':{tag:'(0019,\"SPI-P Release 1\",64)',vr:\"CS\",name:\"CineParallel\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1\",65)':{tag:'(0019,\"SPI-P Release 1\",65)',vr:\"CS\",name:\"CineMaster\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1\",70)':{tag:'(0019,\"SPI-P Release 1\",70)',vr:\"US\",name:\"ExposureChannel\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1\",71)':{tag:'(0019,\"SPI-P Release 1\",71)',vr:\"UN\",name:\"ExposureChannelFirstImage\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1\",72)':{tag:'(0019,\"SPI-P Release 1\",72)',vr:\"US\",name:\"ProcessingChannel\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1\",80)':{tag:'(0019,\"SPI-P Release 1\",80)',vr:\"DS\",name:\"AcquisitionDelay\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1\",81)':{tag:'(0019,\"SPI-P Release 1\",81)',vr:\"UN\",name:\"RelativeImageTime\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1\",90)':{tag:'(0019,\"SPI-P Release 1\",90)',vr:\"CS\",name:\"VideoWhiteCompression\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1\",a0)':{tag:'(0019,\"SPI-P Release 1\",a0)',vr:\"US\",name:\"Angulation\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1\",a1)':{tag:'(0019,\"SPI-P Release 1\",a1)',vr:\"US\",name:\"Rotation\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SPI-P Release 1\",12)':{tag:'(0021,\"SPI-P Release 1\",12)',vr:\"LT\",name:\"SeriesUniqueIdentifier\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SPI-P Release 1\",14)':{tag:'(0021,\"SPI-P Release 1\",14)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1\",00)':{tag:'(0029,\"SPI-P Release 1\",00)',vr:\"DS\",name:\"Unknown\",vm:\"4\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1\",20)':{tag:'(0029,\"SPI-P Release 1\",20)',vr:\"DS\",name:\"PixelAspectRatio\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1\",25)':{tag:'(0029,\"SPI-P Release 1\",25)',vr:\"LO\",name:\"ProcessedPixelDataQuality\",vm:\"1-n\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1\",30)':{tag:'(0029,\"SPI-P Release 1\",30)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1\",38)':{tag:'(0029,\"SPI-P Release 1\",38)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1\",60)':{tag:'(0029,\"SPI-P Release 1\",60)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1\",61)':{tag:'(0029,\"SPI-P Release 1\",61)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1\",67)':{tag:'(0029,\"SPI-P Release 1\",67)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1\",70)':{tag:'(0029,\"SPI-P Release 1\",70)',vr:\"LT\",name:\"WindowID\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1\",71)':{tag:'(0029,\"SPI-P Release 1\",71)',vr:\"CS\",name:\"VideoInvertSubtracted\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1\",72)':{tag:'(0029,\"SPI-P Release 1\",72)',vr:\"CS\",name:\"VideoInvertNonsubtracted\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1\",77)':{tag:'(0029,\"SPI-P Release 1\",77)',vr:\"CS\",name:\"WindowSelectStatus\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1\",78)':{tag:'(0029,\"SPI-P Release 1\",78)',vr:\"LT\",name:\"ECGDisplayPrintingID\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1\",79)':{tag:'(0029,\"SPI-P Release 1\",79)',vr:\"CS\",name:\"ECGDisplayPrinting\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1\",7e)':{tag:'(0029,\"SPI-P Release 1\",7e)',vr:\"CS\",name:\"ECGDisplayPrintingEnableStatus\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1\",7f)':{tag:'(0029,\"SPI-P Release 1\",7f)',vr:\"CS\",name:\"ECGDisplayPrintingSelectStatus\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1\",80)':{tag:'(0029,\"SPI-P Release 1\",80)',vr:\"LT\",name:\"PhysiologicalDisplayID\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1\",81)':{tag:'(0029,\"SPI-P Release 1\",81)',vr:\"US\",name:\"PreferredPhysiologicalChannelDisplay\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1\",8e)':{tag:'(0029,\"SPI-P Release 1\",8e)',vr:\"CS\",name:\"PhysiologicalDisplayEnableStatus\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1\",8f)':{tag:'(0029,\"SPI-P Release 1\",8f)',vr:\"CS\",name:\"PhysiologicalDisplaySelectStatus\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1\",c0)':{tag:'(0029,\"SPI-P Release 1\",c0)',vr:\"LT\",name:\"FunctionalShutterID\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1\",c1)':{tag:'(0029,\"SPI-P Release 1\",c1)',vr:\"US\",name:\"FieldOfShutter\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1\",c5)':{tag:'(0029,\"SPI-P Release 1\",c5)',vr:\"LT\",name:\"FieldOfShutterRectangle\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1\",ce)':{tag:'(0029,\"SPI-P Release 1\",ce)',vr:\"CS\",name:\"ShutterEnableStatus\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1\",cf)':{tag:'(0029,\"SPI-P Release 1\",cf)',vr:\"CS\",name:\"ShutterSelectStatus\",vm:\"1\",version:\"PrivateTag\"},'(7FE1,\"SPI-P Release 1\",10)':{tag:'(7FE1,\"SPI-P Release 1\",10)',vr:\"ox\",name:\"PixelData\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI-P Release 1;1\",c0)':{tag:'(0009,\"SPI-P Release 1;1\",c0)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI-P Release 1;1\",c1)':{tag:'(0009,\"SPI-P Release 1;1\",c1)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1;1\",00)':{tag:'(0019,\"SPI-P Release 1;1\",00)',vr:\"UN\",name:\"PhysiologicalDataType\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1;1\",01)':{tag:'(0019,\"SPI-P Release 1;1\",01)',vr:\"UN\",name:\"PhysiologicalDataChannelAndKind\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1;1\",02)':{tag:'(0019,\"SPI-P Release 1;1\",02)',vr:\"US\",name:\"SampleBitsAllocated\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1;1\",03)':{tag:'(0019,\"SPI-P Release 1;1\",03)',vr:\"US\",name:\"SampleBitsStored\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1;1\",04)':{tag:'(0019,\"SPI-P Release 1;1\",04)',vr:\"US\",name:\"SampleHighBit\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1;1\",05)':{tag:'(0019,\"SPI-P Release 1;1\",05)',vr:\"US\",name:\"SampleRepresentation\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1;1\",06)':{tag:'(0019,\"SPI-P Release 1;1\",06)',vr:\"UN\",name:\"SmallestSampleValue\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1;1\",07)':{tag:'(0019,\"SPI-P Release 1;1\",07)',vr:\"UN\",name:\"LargestSampleValue\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1;1\",08)':{tag:'(0019,\"SPI-P Release 1;1\",08)',vr:\"UN\",name:\"NumberOfSamples\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1;1\",09)':{tag:'(0019,\"SPI-P Release 1;1\",09)',vr:\"UN\",name:\"SampleData\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1;1\",0a)':{tag:'(0019,\"SPI-P Release 1;1\",0a)',vr:\"UN\",name:\"SampleRate\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1;1\",10)':{tag:'(0019,\"SPI-P Release 1;1\",10)',vr:\"UN\",name:\"PhysiologicalDataType2\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1;1\",11)':{tag:'(0019,\"SPI-P Release 1;1\",11)',vr:\"UN\",name:\"PhysiologicalDataChannelAndKind2\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1;1\",12)':{tag:'(0019,\"SPI-P Release 1;1\",12)',vr:\"US\",name:\"SampleBitsAllocated2\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1;1\",13)':{tag:'(0019,\"SPI-P Release 1;1\",13)',vr:\"US\",name:\"SampleBitsStored2\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1;1\",14)':{tag:'(0019,\"SPI-P Release 1;1\",14)',vr:\"US\",name:\"SampleHighBit2\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1;1\",15)':{tag:'(0019,\"SPI-P Release 1;1\",15)',vr:\"US\",name:\"SampleRepresentation2\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1;1\",16)':{tag:'(0019,\"SPI-P Release 1;1\",16)',vr:\"UN\",name:\"SmallestSampleValue2\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1;1\",17)':{tag:'(0019,\"SPI-P Release 1;1\",17)',vr:\"UN\",name:\"LargestSampleValue2\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1;1\",18)':{tag:'(0019,\"SPI-P Release 1;1\",18)',vr:\"UN\",name:\"NumberOfSamples2\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1;1\",19)':{tag:'(0019,\"SPI-P Release 1;1\",19)',vr:\"UN\",name:\"SampleData2\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P Release 1;1\",1a)':{tag:'(0019,\"SPI-P Release 1;1\",1a)',vr:\"UN\",name:\"SampleRate2\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1;1\",00)':{tag:'(0029,\"SPI-P Release 1;1\",00)',vr:\"LT\",name:\"ZoomID\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1;1\",01)':{tag:'(0029,\"SPI-P Release 1;1\",01)',vr:\"DS\",name:\"ZoomRectangle\",vm:\"1-n\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1;1\",03)':{tag:'(0029,\"SPI-P Release 1;1\",03)',vr:\"DS\",name:\"ZoomFactor\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1;1\",04)':{tag:'(0029,\"SPI-P Release 1;1\",04)',vr:\"US\",name:\"ZoomFunction\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1;1\",0e)':{tag:'(0029,\"SPI-P Release 1;1\",0e)',vr:\"CS\",name:\"ZoomEnableStatus\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1;1\",0f)':{tag:'(0029,\"SPI-P Release 1;1\",0f)',vr:\"CS\",name:\"ZoomSelectStatus\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1;1\",40)':{tag:'(0029,\"SPI-P Release 1;1\",40)',vr:\"LT\",name:\"MagnifyingGlassID\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1;1\",41)':{tag:'(0029,\"SPI-P Release 1;1\",41)',vr:\"DS\",name:\"MagnifyingGlassRectangle\",vm:\"1-n\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1;1\",43)':{tag:'(0029,\"SPI-P Release 1;1\",43)',vr:\"DS\",name:\"MagnifyingGlassFactor\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1;1\",44)':{tag:'(0029,\"SPI-P Release 1;1\",44)',vr:\"US\",name:\"MagnifyingGlassFunction\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1;1\",4e)':{tag:'(0029,\"SPI-P Release 1;1\",4e)',vr:\"CS\",name:\"MagnifyingGlassEnableStatus\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1;1\",4f)':{tag:'(0029,\"SPI-P Release 1;1\",4f)',vr:\"CS\",name:\"MagnifyingGlassSelectStatus\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1;2\",00)':{tag:'(0029,\"SPI-P Release 1;2\",00)',vr:\"LT\",name:\"SubtractionMaskID\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1;2\",04)':{tag:'(0029,\"SPI-P Release 1;2\",04)',vr:\"UN\",name:\"MaskingFunction\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1;2\",0c)':{tag:'(0029,\"SPI-P Release 1;2\",0c)',vr:\"UN\",name:\"ProprietaryMaskingParameters\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1;2\",1e)':{tag:'(0029,\"SPI-P Release 1;2\",1e)',vr:\"CS\",name:\"SubtractionMaskEnableStatus\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1;2\",1f)':{tag:'(0029,\"SPI-P Release 1;2\",1f)',vr:\"CS\",name:\"SubtractionMaskSelectStatus\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1;3\",00)':{tag:'(0029,\"SPI-P Release 1;3\",00)',vr:\"LT\",name:\"ImageEnhancementID\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1;3\",01)':{tag:'(0029,\"SPI-P Release 1;3\",01)',vr:\"LT\",name:\"ImageEnhancement\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1;3\",02)':{tag:'(0029,\"SPI-P Release 1;3\",02)',vr:\"LT\",name:\"ConvolutionID\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1;3\",03)':{tag:'(0029,\"SPI-P Release 1;3\",03)',vr:\"LT\",name:\"ConvolutionType\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1;3\",04)':{tag:'(0029,\"SPI-P Release 1;3\",04)',vr:\"LT\",name:\"ConvolutionKernelSizeID\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1;3\",05)':{tag:'(0029,\"SPI-P Release 1;3\",05)',vr:\"US\",name:\"ConvolutionKernelSize\",vm:\"2\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1;3\",06)':{tag:'(0029,\"SPI-P Release 1;3\",06)',vr:\"US\",name:\"ConvolutionKernel\",vm:\"1-n\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1;3\",0c)':{tag:'(0029,\"SPI-P Release 1;3\",0c)',vr:\"DS\",name:\"EnhancementGain\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1;3\",1e)':{tag:'(0029,\"SPI-P Release 1;3\",1e)',vr:\"CS\",name:\"ImageEnhancementEnableStatus\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P Release 1;3\",1f)':{tag:'(0029,\"SPI-P Release 1;3\",1f)',vr:\"CS\",name:\"ImageEnhancementSelectStatus\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"SPI-P Release 2;1\",18)':{tag:'(0011,\"SPI-P Release 2;1\",18)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"SPI-P Release 2;1\",0d)':{tag:'(0023,\"SPI-P Release 2;1\",0d)',vr:\"UI\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"SPI-P Release 2;1\",0e)':{tag:'(0023,\"SPI-P Release 2;1\",0e)',vr:\"UI\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI-P-GV-CT Release 1\",00)':{tag:'(0009,\"SPI-P-GV-CT Release 1\",00)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI-P-GV-CT Release 1\",10)':{tag:'(0009,\"SPI-P-GV-CT Release 1\",10)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI-P-GV-CT Release 1\",20)':{tag:'(0009,\"SPI-P-GV-CT Release 1\",20)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI-P-GV-CT Release 1\",30)':{tag:'(0009,\"SPI-P-GV-CT Release 1\",30)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI-P-GV-CT Release 1\",40)':{tag:'(0009,\"SPI-P-GV-CT Release 1\",40)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI-P-GV-CT Release 1\",50)':{tag:'(0009,\"SPI-P-GV-CT Release 1\",50)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI-P-GV-CT Release 1\",60)':{tag:'(0009,\"SPI-P-GV-CT Release 1\",60)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI-P-GV-CT Release 1\",70)':{tag:'(0009,\"SPI-P-GV-CT Release 1\",70)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI-P-GV-CT Release 1\",75)':{tag:'(0009,\"SPI-P-GV-CT Release 1\",75)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI-P-GV-CT Release 1\",80)':{tag:'(0009,\"SPI-P-GV-CT Release 1\",80)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"SPI-P-GV-CT Release 1\",90)':{tag:'(0009,\"SPI-P-GV-CT Release 1\",90)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P-GV-CT Release 1\",08)':{tag:'(0019,\"SPI-P-GV-CT Release 1\",08)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P-GV-CT Release 1\",09)':{tag:'(0019,\"SPI-P-GV-CT Release 1\",09)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P-GV-CT Release 1\",0a)':{tag:'(0019,\"SPI-P-GV-CT Release 1\",0a)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P-GV-CT Release 1\",10)':{tag:'(0019,\"SPI-P-GV-CT Release 1\",10)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P-GV-CT Release 1\",20)':{tag:'(0019,\"SPI-P-GV-CT Release 1\",20)',vr:\"TM\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P-GV-CT Release 1\",50)':{tag:'(0019,\"SPI-P-GV-CT Release 1\",50)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P-GV-CT Release 1\",60)':{tag:'(0019,\"SPI-P-GV-CT Release 1\",60)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P-GV-CT Release 1\",61)':{tag:'(0019,\"SPI-P-GV-CT Release 1\",61)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P-GV-CT Release 1\",63)':{tag:'(0019,\"SPI-P-GV-CT Release 1\",63)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P-GV-CT Release 1\",64)':{tag:'(0019,\"SPI-P-GV-CT Release 1\",64)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P-GV-CT Release 1\",65)':{tag:'(0019,\"SPI-P-GV-CT Release 1\",65)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P-GV-CT Release 1\",70)':{tag:'(0019,\"SPI-P-GV-CT Release 1\",70)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P-GV-CT Release 1\",80)':{tag:'(0019,\"SPI-P-GV-CT Release 1\",80)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P-GV-CT Release 1\",81)':{tag:'(0019,\"SPI-P-GV-CT Release 1\",81)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P-GV-CT Release 1\",90)':{tag:'(0019,\"SPI-P-GV-CT Release 1\",90)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P-GV-CT Release 1\",a0)':{tag:'(0019,\"SPI-P-GV-CT Release 1\",a0)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P-GV-CT Release 1\",a1)':{tag:'(0019,\"SPI-P-GV-CT Release 1\",a1)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P-GV-CT Release 1\",a2)':{tag:'(0019,\"SPI-P-GV-CT Release 1\",a2)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P-GV-CT Release 1\",a3)':{tag:'(0019,\"SPI-P-GV-CT Release 1\",a3)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P-GV-CT Release 1\",b0)':{tag:'(0019,\"SPI-P-GV-CT Release 1\",b0)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P-GV-CT Release 1\",b1)':{tag:'(0019,\"SPI-P-GV-CT Release 1\",b1)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SPI-P-GV-CT Release 1\",20)':{tag:'(0021,\"SPI-P-GV-CT Release 1\",20)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SPI-P-GV-CT Release 1\",30)':{tag:'(0021,\"SPI-P-GV-CT Release 1\",30)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SPI-P-GV-CT Release 1\",40)':{tag:'(0021,\"SPI-P-GV-CT Release 1\",40)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SPI-P-GV-CT Release 1\",50)':{tag:'(0021,\"SPI-P-GV-CT Release 1\",50)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SPI-P-GV-CT Release 1\",60)':{tag:'(0021,\"SPI-P-GV-CT Release 1\",60)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SPI-P-GV-CT Release 1\",70)':{tag:'(0021,\"SPI-P-GV-CT Release 1\",70)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SPI-P-GV-CT Release 1\",80)':{tag:'(0021,\"SPI-P-GV-CT Release 1\",80)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SPI-P-GV-CT Release 1\",90)':{tag:'(0021,\"SPI-P-GV-CT Release 1\",90)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SPI-P-GV-CT Release 1\",a0)':{tag:'(0021,\"SPI-P-GV-CT Release 1\",a0)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SPI-P-GV-CT Release 1\",a1)':{tag:'(0021,\"SPI-P-GV-CT Release 1\",a1)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SPI-P-GV-CT Release 1\",a2)':{tag:'(0021,\"SPI-P-GV-CT Release 1\",a2)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SPI-P-GV-CT Release 1\",a3)':{tag:'(0021,\"SPI-P-GV-CT Release 1\",a3)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SPI-P-GV-CT Release 1\",a4)':{tag:'(0021,\"SPI-P-GV-CT Release 1\",a4)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SPI-P-GV-CT Release 1\",b0)':{tag:'(0021,\"SPI-P-GV-CT Release 1\",b0)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SPI-P-GV-CT Release 1\",c0)':{tag:'(0021,\"SPI-P-GV-CT Release 1\",c0)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-GV-CT Release 1\",10)':{tag:'(0029,\"SPI-P-GV-CT Release 1\",10)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-GV-CT Release 1\",30)':{tag:'(0029,\"SPI-P-GV-CT Release 1\",30)',vr:\"UL\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-GV-CT Release 1\",31)':{tag:'(0029,\"SPI-P-GV-CT Release 1\",31)',vr:\"UL\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-GV-CT Release 1\",32)':{tag:'(0029,\"SPI-P-GV-CT Release 1\",32)',vr:\"UL\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-GV-CT Release 1\",33)':{tag:'(0029,\"SPI-P-GV-CT Release 1\",33)',vr:\"UL\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-GV-CT Release 1\",80)':{tag:'(0029,\"SPI-P-GV-CT Release 1\",80)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-GV-CT Release 1\",90)':{tag:'(0029,\"SPI-P-GV-CT Release 1\",90)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-GV-CT Release 1\",d0)':{tag:'(0029,\"SPI-P-GV-CT Release 1\",d0)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-GV-CT Release 1\",d1)':{tag:'(0029,\"SPI-P-GV-CT Release 1\",d1)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P-PCR Release 2\",30)':{tag:'(0019,\"SPI-P-PCR Release 2\",30)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SPI-P-Private-CWS Release 1\",00)':{tag:'(0021,\"SPI-P-Private-CWS Release 1\",00)',vr:\"LT\",name:\"WindowOfImagesID\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SPI-P-Private-CWS Release 1\",01)':{tag:'(0021,\"SPI-P-Private-CWS Release 1\",01)',vr:\"CS\",name:\"WindowOfImagesType\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SPI-P-Private-CWS Release 1\",02)':{tag:'(0021,\"SPI-P-Private-CWS Release 1\",02)',vr:\"IS\",name:\"WindowOfImagesScope\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"SPI-P-Private-DCI Release 1\",10)':{tag:'(0019,\"SPI-P-Private-DCI Release 1\",10)',vr:\"UN\",name:\"ECGTimeMapDataBitsAllocated\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P-Private-DCI Release 1\",11)':{tag:'(0019,\"SPI-P-Private-DCI Release 1\",11)',vr:\"UN\",name:\"ECGTimeMapDataBitsStored\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P-Private-DCI Release 1\",12)':{tag:'(0019,\"SPI-P-Private-DCI Release 1\",12)',vr:\"UN\",name:\"ECGTimeMapDataHighBit\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P-Private-DCI Release 1\",13)':{tag:'(0019,\"SPI-P-Private-DCI Release 1\",13)',vr:\"UN\",name:\"ECGTimeMapDataRepresentation\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P-Private-DCI Release 1\",14)':{tag:'(0019,\"SPI-P-Private-DCI Release 1\",14)',vr:\"UN\",name:\"ECGTimeMapDataSmallestDataValue\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P-Private-DCI Release 1\",15)':{tag:'(0019,\"SPI-P-Private-DCI Release 1\",15)',vr:\"UN\",name:\"ECGTimeMapDataLargestDataValue\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P-Private-DCI Release 1\",16)':{tag:'(0019,\"SPI-P-Private-DCI Release 1\",16)',vr:\"UN\",name:\"ECGTimeMapDataNumberOfDataValues\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P-Private-DCI Release 1\",17)':{tag:'(0019,\"SPI-P-Private-DCI Release 1\",17)',vr:\"UN\",name:\"ECGTimeMapData\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SPI-P-Private_CDS Release 1\",40)':{tag:'(0021,\"SPI-P-Private_CDS Release 1\",40)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-Private_CDS Release 1\",00)':{tag:'(0029,\"SPI-P-Private_CDS Release 1\",00)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P-Private_ICS Release 1\",30)':{tag:'(0019,\"SPI-P-Private_ICS Release 1\",30)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P-Private_ICS Release 1\",31)':{tag:'(0019,\"SPI-P-Private_ICS Release 1\",31)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-Private_ICS Release 1\",08)':{tag:'(0029,\"SPI-P-Private_ICS Release 1\",08)',vr:\"SQ\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-Private_ICS Release 1\",0f)':{tag:'(0029,\"SPI-P-Private_ICS Release 1\",0f)',vr:\"SQ\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-Private_ICS Release 1\",10)':{tag:'(0029,\"SPI-P-Private_ICS Release 1\",10)',vr:\"SQ\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-Private_ICS Release 1\",1b)':{tag:'(0029,\"SPI-P-Private_ICS Release 1\",1b)',vr:\"SQ\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-Private_ICS Release 1\",1c)':{tag:'(0029,\"SPI-P-Private_ICS Release 1\",1c)',vr:\"SQ\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-Private_ICS Release 1\",21)':{tag:'(0029,\"SPI-P-Private_ICS Release 1\",21)',vr:\"SQ\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-Private_ICS Release 1\",43)':{tag:'(0029,\"SPI-P-Private_ICS Release 1\",43)',vr:\"SQ\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-Private_ICS Release 1\",44)':{tag:'(0029,\"SPI-P-Private_ICS Release 1\",44)',vr:\"SQ\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-Private_ICS Release 1\",4C)':{tag:'(0029,\"SPI-P-Private_ICS Release 1\",4C)',vr:\"SQ\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-Private_ICS Release 1\",67)':{tag:'(0029,\"SPI-P-Private_ICS Release 1\",67)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-Private_ICS Release 1\",68)':{tag:'(0029,\"SPI-P-Private_ICS Release 1\",68)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-Private_ICS Release 1\",6A)':{tag:'(0029,\"SPI-P-Private_ICS Release 1\",6A)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-Private_ICS Release 1\",6B)':{tag:'(0029,\"SPI-P-Private_ICS Release 1\",6B)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-Private_ICS Release 1;1\",00)':{tag:'(0029,\"SPI-P-Private_ICS Release 1;1\",00)',vr:\"SL\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-Private_ICS Release 1;1\",05)':{tag:'(0029,\"SPI-P-Private_ICS Release 1;1\",05)',vr:\"FL\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-Private_ICS Release 1;1\",06)':{tag:'(0029,\"SPI-P-Private_ICS Release 1;1\",06)',vr:\"FL\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-Private_ICS Release 1;1\",20)':{tag:'(0029,\"SPI-P-Private_ICS Release 1;1\",20)',vr:\"FL\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-Private_ICS Release 1;1\",21)':{tag:'(0029,\"SPI-P-Private_ICS Release 1;1\",21)',vr:\"FL\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-Private_ICS Release 1;1\",CD)':{tag:'(0029,\"SPI-P-Private_ICS Release 1;1\",CD)',vr:\"SQ\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-Private_ICS Release 1;2\",00)':{tag:'(0029,\"SPI-P-Private_ICS Release 1;2\",00)',vr:\"FD\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-Private_ICS Release 1;2\",01)':{tag:'(0029,\"SPI-P-Private_ICS Release 1;2\",01)',vr:\"FD\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-Private_ICS Release 1;2\",02)':{tag:'(0029,\"SPI-P-Private_ICS Release 1;2\",02)',vr:\"FD\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-Private_ICS Release 1;2\",03)':{tag:'(0029,\"SPI-P-Private_ICS Release 1;2\",03)',vr:\"SL\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-Private_ICS Release 1;2\",04)':{tag:'(0029,\"SPI-P-Private_ICS Release 1;2\",04)',vr:\"SL\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-Private_ICS Release 1;2\",05)':{tag:'(0029,\"SPI-P-Private_ICS Release 1;2\",05)',vr:\"SL\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-Private_ICS Release 1;3\",C0)':{tag:'(0029,\"SPI-P-Private_ICS Release 1;3\",C0)',vr:\"SQ\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-Private_ICS Release 1;3\",C1)':{tag:'(0029,\"SPI-P-Private_ICS Release 1;3\",C1)',vr:\"SQ\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-Private_ICS Release 1;3\",C2)':{tag:'(0029,\"SPI-P-Private_ICS Release 1;3\",C2)',vr:\"SQ\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-Private_ICS Release 1;3\",C3)':{tag:'(0029,\"SPI-P-Private_ICS Release 1;3\",C3)',vr:\"SQ\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-Private_ICS Release 1;3\",C4)':{tag:'(0029,\"SPI-P-Private_ICS Release 1;3\",C4)',vr:\"SQ\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-Private_ICS Release 1;3\",C5)':{tag:'(0029,\"SPI-P-Private_ICS Release 1;3\",C5)',vr:\"SQ\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-Private_ICS Release 1;4\",02)':{tag:'(0029,\"SPI-P-Private_ICS Release 1;4\",02)',vr:\"SQ\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-Private_ICS Release 1;4\",9A)':{tag:'(0029,\"SPI-P-Private_ICS Release 1;4\",9A)',vr:\"SQ\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-Private_ICS Release 1;4\",E0)':{tag:'(0029,\"SPI-P-Private_ICS Release 1;4\",E0)',vr:\"SQ\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-Private_ICS Release 1;5\",50)':{tag:'(0029,\"SPI-P-Private_ICS Release 1;5\",50)',vr:\"CS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"SPI-P-Private_ICS Release 1;5\",55)':{tag:'(0029,\"SPI-P-Private_ICS Release 1;5\",55)',vr:\"CS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P-XSB-DCI Release 1\",10)':{tag:'(0019,\"SPI-P-XSB-DCI Release 1\",10)',vr:\"LT\",name:\"VideoBeamBoost\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P-XSB-DCI Release 1\",11)':{tag:'(0019,\"SPI-P-XSB-DCI Release 1\",11)',vr:\"US\",name:\"ChannelGeneratingVideoSync\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P-XSB-DCI Release 1\",12)':{tag:'(0019,\"SPI-P-XSB-DCI Release 1\",12)',vr:\"US\",name:\"VideoGain\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P-XSB-DCI Release 1\",13)':{tag:'(0019,\"SPI-P-XSB-DCI Release 1\",13)',vr:\"US\",name:\"VideoOffset\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SPI-P-XSB-DCI Release 1\",20)':{tag:'(0019,\"SPI-P-XSB-DCI Release 1\",20)',vr:\"DS\",name:\"RTDDataCompressionFactor\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Annot V1.0\",11)':{tag:'(0029,\"Silhouette Annot V1.0\",11)',vr:\"IS\",name:\"AnnotationName\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Annot V1.0\",12)':{tag:'(0029,\"Silhouette Annot V1.0\",12)',vr:\"LT\",name:\"AnnotationFont\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Annot V1.0\",13)':{tag:'(0029,\"Silhouette Annot V1.0\",13)',vr:\"LT\",name:\"AnnotationTextForegroundColor\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Annot V1.0\",14)':{tag:'(0029,\"Silhouette Annot V1.0\",14)',vr:\"LT\",name:\"AnnotationTextBackgroundColor\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Annot V1.0\",15)':{tag:'(0029,\"Silhouette Annot V1.0\",15)',vr:\"UL\",name:\"AnnotationTextBackingMode\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Annot V1.0\",16)':{tag:'(0029,\"Silhouette Annot V1.0\",16)',vr:\"UL\",name:\"AnnotationTextJustification\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Annot V1.0\",17)':{tag:'(0029,\"Silhouette Annot V1.0\",17)',vr:\"UL\",name:\"AnnotationTextLocation\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Annot V1.0\",18)':{tag:'(0029,\"Silhouette Annot V1.0\",18)',vr:\"LT\",name:\"AnnotationTextString\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Annot V1.0\",19)':{tag:'(0029,\"Silhouette Annot V1.0\",19)',vr:\"UL\",name:\"AnnotationTextAttachMode\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Annot V1.0\",20)':{tag:'(0029,\"Silhouette Annot V1.0\",20)',vr:\"UL\",name:\"AnnotationTextCursorMode\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Annot V1.0\",21)':{tag:'(0029,\"Silhouette Annot V1.0\",21)',vr:\"UL\",name:\"AnnotationTextShadowOffsetX\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Annot V1.0\",22)':{tag:'(0029,\"Silhouette Annot V1.0\",22)',vr:\"UL\",name:\"AnnotationTextShadowOffsetY\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Annot V1.0\",23)':{tag:'(0029,\"Silhouette Annot V1.0\",23)',vr:\"LT\",name:\"AnnotationLineColor\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Annot V1.0\",24)':{tag:'(0029,\"Silhouette Annot V1.0\",24)',vr:\"UL\",name:\"AnnotationLineThickness\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Annot V1.0\",25)':{tag:'(0029,\"Silhouette Annot V1.0\",25)',vr:\"UL\",name:\"AnnotationLineType\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Annot V1.0\",26)':{tag:'(0029,\"Silhouette Annot V1.0\",26)',vr:\"UL\",name:\"AnnotationLineStyle\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Annot V1.0\",27)':{tag:'(0029,\"Silhouette Annot V1.0\",27)',vr:\"UL\",name:\"AnnotationLineDashLength\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Annot V1.0\",28)':{tag:'(0029,\"Silhouette Annot V1.0\",28)',vr:\"UL\",name:\"AnnotationLineAttachMode\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Annot V1.0\",29)':{tag:'(0029,\"Silhouette Annot V1.0\",29)',vr:\"UL\",name:\"AnnotationLinePointCount\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Annot V1.0\",30)':{tag:'(0029,\"Silhouette Annot V1.0\",30)',vr:\"FD\",name:\"AnnotationLinePoints\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Annot V1.0\",31)':{tag:'(0029,\"Silhouette Annot V1.0\",31)',vr:\"UL\",name:\"AnnotationLineControlSize\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Annot V1.0\",32)':{tag:'(0029,\"Silhouette Annot V1.0\",32)',vr:\"LT\",name:\"AnnotationMarkerColor\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Annot V1.0\",33)':{tag:'(0029,\"Silhouette Annot V1.0\",33)',vr:\"UL\",name:\"AnnotationMarkerType\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Annot V1.0\",34)':{tag:'(0029,\"Silhouette Annot V1.0\",34)',vr:\"UL\",name:\"AnnotationMarkerSize\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Annot V1.0\",35)':{tag:'(0029,\"Silhouette Annot V1.0\",35)',vr:\"FD\",name:\"AnnotationMarkerLocation\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Annot V1.0\",36)':{tag:'(0029,\"Silhouette Annot V1.0\",36)',vr:\"UL\",name:\"AnnotationMarkerAttachMode\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Annot V1.0\",37)':{tag:'(0029,\"Silhouette Annot V1.0\",37)',vr:\"LT\",name:\"AnnotationGeomColor\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Annot V1.0\",38)':{tag:'(0029,\"Silhouette Annot V1.0\",38)',vr:\"UL\",name:\"AnnotationGeomThickness\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Annot V1.0\",39)':{tag:'(0029,\"Silhouette Annot V1.0\",39)',vr:\"UL\",name:\"AnnotationGeomLineStyle\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Annot V1.0\",40)':{tag:'(0029,\"Silhouette Annot V1.0\",40)',vr:\"UL\",name:\"AnnotationGeomDashLength\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Annot V1.0\",41)':{tag:'(0029,\"Silhouette Annot V1.0\",41)',vr:\"UL\",name:\"AnnotationGeomFillPattern\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Annot V1.0\",42)':{tag:'(0029,\"Silhouette Annot V1.0\",42)',vr:\"UL\",name:\"AnnotationInteractivity\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Annot V1.0\",43)':{tag:'(0029,\"Silhouette Annot V1.0\",43)',vr:\"FD\",name:\"AnnotationArrowLength\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Annot V1.0\",44)':{tag:'(0029,\"Silhouette Annot V1.0\",44)',vr:\"FD\",name:\"AnnotationArrowAngle\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Annot V1.0\",45)':{tag:'(0029,\"Silhouette Annot V1.0\",45)',vr:\"UL\",name:\"AnnotationDontSave\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Graphics Export V1.0\",00)':{tag:'(0029,\"Silhouette Graphics Export V1.0\",00)',vr:\"UI\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Line V1.0\",11)':{tag:'(0029,\"Silhouette Line V1.0\",11)',vr:\"IS\",name:\"LineName\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Line V1.0\",12)':{tag:'(0029,\"Silhouette Line V1.0\",12)',vr:\"LT\",name:\"LineNameFont\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Line V1.0\",13)':{tag:'(0029,\"Silhouette Line V1.0\",13)',vr:\"UL\",name:\"LineNameDisplay\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Line V1.0\",14)':{tag:'(0029,\"Silhouette Line V1.0\",14)',vr:\"LT\",name:\"LineNormalColor\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Line V1.0\",15)':{tag:'(0029,\"Silhouette Line V1.0\",15)',vr:\"UL\",name:\"LineType\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Line V1.0\",16)':{tag:'(0029,\"Silhouette Line V1.0\",16)',vr:\"UL\",name:\"LineThickness\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Line V1.0\",17)':{tag:'(0029,\"Silhouette Line V1.0\",17)',vr:\"UL\",name:\"LineStyle\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Line V1.0\",18)':{tag:'(0029,\"Silhouette Line V1.0\",18)',vr:\"UL\",name:\"LineDashLength\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Line V1.0\",19)':{tag:'(0029,\"Silhouette Line V1.0\",19)',vr:\"UL\",name:\"LineInteractivity\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Line V1.0\",20)':{tag:'(0029,\"Silhouette Line V1.0\",20)',vr:\"LT\",name:\"LineMeasurementColor\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Line V1.0\",21)':{tag:'(0029,\"Silhouette Line V1.0\",21)',vr:\"LT\",name:\"LineMeasurementFont\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Line V1.0\",22)':{tag:'(0029,\"Silhouette Line V1.0\",22)',vr:\"UL\",name:\"LineMeasurementDashLength\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Line V1.0\",23)':{tag:'(0029,\"Silhouette Line V1.0\",23)',vr:\"UL\",name:\"LinePointSpace\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Line V1.0\",24)':{tag:'(0029,\"Silhouette Line V1.0\",24)',vr:\"FD\",name:\"LinePoints\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Line V1.0\",25)':{tag:'(0029,\"Silhouette Line V1.0\",25)',vr:\"UL\",name:\"LineControlPointSize\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Line V1.0\",26)':{tag:'(0029,\"Silhouette Line V1.0\",26)',vr:\"UL\",name:\"LineControlPointSpace\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Line V1.0\",27)':{tag:'(0029,\"Silhouette Line V1.0\",27)',vr:\"FD\",name:\"LineControlPoints\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Line V1.0\",28)':{tag:'(0029,\"Silhouette Line V1.0\",28)',vr:\"LT\",name:\"LineLabel\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Line V1.0\",29)':{tag:'(0029,\"Silhouette Line V1.0\",29)',vr:\"UL\",name:\"LineDontSave\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette ROI V1.0\",11)':{tag:'(0029,\"Silhouette ROI V1.0\",11)',vr:\"IS\",name:\"ROIName\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette ROI V1.0\",12)':{tag:'(0029,\"Silhouette ROI V1.0\",12)',vr:\"LT\",name:\"ROINameFont\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette ROI V1.0\",13)':{tag:'(0029,\"Silhouette ROI V1.0\",13)',vr:\"LT\",name:\"ROINormalColor\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette ROI V1.0\",14)':{tag:'(0029,\"Silhouette ROI V1.0\",14)',vr:\"UL\",name:\"ROIFillPattern\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette ROI V1.0\",15)':{tag:'(0029,\"Silhouette ROI V1.0\",15)',vr:\"UL\",name:\"ROIBpSeg\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette ROI V1.0\",16)':{tag:'(0029,\"Silhouette ROI V1.0\",16)',vr:\"UN\",name:\"ROIBpSegPairs\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette ROI V1.0\",17)':{tag:'(0029,\"Silhouette ROI V1.0\",17)',vr:\"UL\",name:\"ROISeedSpace\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette ROI V1.0\",18)':{tag:'(0029,\"Silhouette ROI V1.0\",18)',vr:\"UN\",name:\"ROISeeds\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette ROI V1.0\",19)':{tag:'(0029,\"Silhouette ROI V1.0\",19)',vr:\"UL\",name:\"ROILineThickness\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette ROI V1.0\",20)':{tag:'(0029,\"Silhouette ROI V1.0\",20)',vr:\"UL\",name:\"ROILineStyle\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette ROI V1.0\",21)':{tag:'(0029,\"Silhouette ROI V1.0\",21)',vr:\"UL\",name:\"ROILineDashLength\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette ROI V1.0\",22)':{tag:'(0029,\"Silhouette ROI V1.0\",22)',vr:\"UL\",name:\"ROIInteractivity\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette ROI V1.0\",23)':{tag:'(0029,\"Silhouette ROI V1.0\",23)',vr:\"UL\",name:\"ROINamePosition\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette ROI V1.0\",24)':{tag:'(0029,\"Silhouette ROI V1.0\",24)',vr:\"UL\",name:\"ROINameDisplay\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette ROI V1.0\",25)':{tag:'(0029,\"Silhouette ROI V1.0\",25)',vr:\"LT\",name:\"ROILabel\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette ROI V1.0\",26)':{tag:'(0029,\"Silhouette ROI V1.0\",26)',vr:\"UL\",name:\"ROIShape\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette ROI V1.0\",27)':{tag:'(0029,\"Silhouette ROI V1.0\",27)',vr:\"FD\",name:\"ROIShapeTilt\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette ROI V1.0\",28)':{tag:'(0029,\"Silhouette ROI V1.0\",28)',vr:\"UL\",name:\"ROIShapePointsCount\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette ROI V1.0\",29)':{tag:'(0029,\"Silhouette ROI V1.0\",29)',vr:\"UL\",name:\"ROIShapePointsSpace\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette ROI V1.0\",30)':{tag:'(0029,\"Silhouette ROI V1.0\",30)',vr:\"FD\",name:\"ROIShapePoints\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette ROI V1.0\",31)':{tag:'(0029,\"Silhouette ROI V1.0\",31)',vr:\"UL\",name:\"ROIShapeControlPointsCount\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette ROI V1.0\",32)':{tag:'(0029,\"Silhouette ROI V1.0\",32)',vr:\"UL\",name:\"ROIShapeControlPointsSpace\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette ROI V1.0\",33)':{tag:'(0029,\"Silhouette ROI V1.0\",33)',vr:\"FD\",name:\"ROIShapeControlPoints\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette ROI V1.0\",34)':{tag:'(0029,\"Silhouette ROI V1.0\",34)',vr:\"UL\",name:\"ROIDontSave\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Sequence Ids V1.0\",41)':{tag:'(0029,\"Silhouette Sequence Ids V1.0\",41)',vr:\"SQ\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Sequence Ids V1.0\",42)':{tag:'(0029,\"Silhouette Sequence Ids V1.0\",42)',vr:\"SQ\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette Sequence Ids V1.0\",43)':{tag:'(0029,\"Silhouette Sequence Ids V1.0\",43)',vr:\"SQ\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette V1.0\",13)':{tag:'(0029,\"Silhouette V1.0\",13)',vr:\"UL\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette V1.0\",14)':{tag:'(0029,\"Silhouette V1.0\",14)',vr:\"UL\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette V1.0\",17)':{tag:'(0029,\"Silhouette V1.0\",17)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette V1.0\",18)':{tag:'(0029,\"Silhouette V1.0\",18)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette V1.0\",19)':{tag:'(0029,\"Silhouette V1.0\",19)',vr:\"UL\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette V1.0\",1a)':{tag:'(0029,\"Silhouette V1.0\",1a)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette V1.0\",1b)':{tag:'(0029,\"Silhouette V1.0\",1b)',vr:\"UL\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette V1.0\",1c)':{tag:'(0029,\"Silhouette V1.0\",1c)',vr:\"UL\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette V1.0\",1d)':{tag:'(0029,\"Silhouette V1.0\",1d)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette V1.0\",1e)':{tag:'(0029,\"Silhouette V1.0\",1e)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette V1.0\",21)':{tag:'(0029,\"Silhouette V1.0\",21)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette V1.0\",22)':{tag:'(0029,\"Silhouette V1.0\",22)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette V1.0\",23)':{tag:'(0029,\"Silhouette V1.0\",23)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette V1.0\",24)':{tag:'(0029,\"Silhouette V1.0\",24)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette V1.0\",25)':{tag:'(0029,\"Silhouette V1.0\",25)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette V1.0\",27)':{tag:'(0029,\"Silhouette V1.0\",27)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette V1.0\",28)':{tag:'(0029,\"Silhouette V1.0\",28)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette V1.0\",29)':{tag:'(0029,\"Silhouette V1.0\",29)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette V1.0\",30)':{tag:'(0029,\"Silhouette V1.0\",30)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette V1.0\",52)':{tag:'(0029,\"Silhouette V1.0\",52)',vr:\"US\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette V1.0\",53)':{tag:'(0029,\"Silhouette V1.0\",53)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette V1.0\",54)':{tag:'(0029,\"Silhouette V1.0\",54)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette V1.0\",55)':{tag:'(0029,\"Silhouette V1.0\",55)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette V1.0\",56)':{tag:'(0029,\"Silhouette V1.0\",56)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0029,\"Silhouette V1.0\",57)':{tag:'(0029,\"Silhouette V1.0\",57)',vr:\"UN\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0135,\"SONOWAND AS\",10)':{tag:'(0135,\"SONOWAND AS\",10)',vr:\"LO\",name:\"UltrasoundScannerName\",vm:\"1\",version:\"PrivateTag\"},'(0135,\"SONOWAND AS\",11)':{tag:'(0135,\"SONOWAND AS\",11)',vr:\"LO\",name:\"TransducerSerial\",vm:\"1\",version:\"PrivateTag\"},'(0135,\"SONOWAND AS\",12)':{tag:'(0135,\"SONOWAND AS\",12)',vr:\"LO\",name:\"ProbeApplication\",vm:\"1\",version:\"PrivateTag\"},'(0017,\"SVISION\",00)':{tag:'(0017,\"SVISION\",00)',vr:\"LO\",name:\"ExtendedBodyPart\",vm:\"1\",version:\"PrivateTag\"},'(0017,\"SVISION\",10)':{tag:'(0017,\"SVISION\",10)',vr:\"LO\",name:\"ExtendedViewPosition\",vm:\"1\",version:\"PrivateTag\"},'(0017,\"SVISION\",F0)':{tag:'(0017,\"SVISION\",F0)',vr:\"IS\",name:\"ImagesSOPClass\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SVISION\",00)':{tag:'(0019,\"SVISION\",00)',vr:\"IS\",name:\"AECField\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SVISION\",01)':{tag:'(0019,\"SVISION\",01)',vr:\"IS\",name:\"AECFilmScreen\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SVISION\",02)':{tag:'(0019,\"SVISION\",02)',vr:\"IS\",name:\"AECDensity\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SVISION\",10)':{tag:'(0019,\"SVISION\",10)',vr:\"IS\",name:\"PatientThickness\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SVISION\",18)':{tag:'(0019,\"SVISION\",18)',vr:\"IS\",name:\"BeamDistance\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SVISION\",20)':{tag:'(0019,\"SVISION\",20)',vr:\"IS\",name:\"WorkstationNumber\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SVISION\",28)':{tag:'(0019,\"SVISION\",28)',vr:\"IS\",name:\"TubeNumber\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SVISION\",30)':{tag:'(0019,\"SVISION\",30)',vr:\"IS\",name:\"BuckyGrid\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SVISION\",34)':{tag:'(0019,\"SVISION\",34)',vr:\"IS\",name:\"Focus\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SVISION\",38)':{tag:'(0019,\"SVISION\",38)',vr:\"IS\",name:\"Child\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SVISION\",40)':{tag:'(0019,\"SVISION\",40)',vr:\"IS\",name:\"CollimatorDistanceX\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SVISION\",41)':{tag:'(0019,\"SVISION\",41)',vr:\"IS\",name:\"CollimatorDistanceY\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SVISION\",50)':{tag:'(0019,\"SVISION\",50)',vr:\"IS\",name:\"CentralBeamHeight\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SVISION\",60)':{tag:'(0019,\"SVISION\",60)',vr:\"IS\",name:\"BuckyAngle\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SVISION\",68)':{tag:'(0019,\"SVISION\",68)',vr:\"IS\",name:\"CArmAngle\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SVISION\",69)':{tag:'(0019,\"SVISION\",69)',vr:\"IS\",name:\"CollimatorAngle\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SVISION\",70)':{tag:'(0019,\"SVISION\",70)',vr:\"IS\",name:\"FilterNumber\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SVISION\",74)':{tag:'(0019,\"SVISION\",74)',vr:\"LO\",name:\"FilterMaterial1\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SVISION\",75)':{tag:'(0019,\"SVISION\",75)',vr:\"LO\",name:\"FilterMaterial2\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SVISION\",78)':{tag:'(0019,\"SVISION\",78)',vr:\"DS\",name:\"FilterThickness1\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SVISION\",79)':{tag:'(0019,\"SVISION\",79)',vr:\"DS\",name:\"FilterThickness2\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SVISION\",80)':{tag:'(0019,\"SVISION\",80)',vr:\"IS\",name:\"BuckyFormat\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SVISION\",81)':{tag:'(0019,\"SVISION\",81)',vr:\"IS\",name:\"ObjectPosition\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SVISION\",90)':{tag:'(0019,\"SVISION\",90)',vr:\"LO\",name:\"DeskCommand\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SVISION\",A0)':{tag:'(0019,\"SVISION\",A0)',vr:\"DS\",name:\"ExtendedExposureTime\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SVISION\",A1)':{tag:'(0019,\"SVISION\",A1)',vr:\"DS\",name:\"ActualExposureTime\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"SVISION\",A8)':{tag:'(0019,\"SVISION\",A8)',vr:\"DS\",name:\"ExtendedXRayTubeCurrent\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SVISION\",00)':{tag:'(0021,\"SVISION\",00)',vr:\"DS\",name:\"NoiseReduction\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SVISION\",01)':{tag:'(0021,\"SVISION\",01)',vr:\"DS\",name:\"ContrastAmplification\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SVISION\",02)':{tag:'(0021,\"SVISION\",02)',vr:\"DS\",name:\"EdgeContrastBoosting\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SVISION\",03)':{tag:'(0021,\"SVISION\",03)',vr:\"DS\",name:\"LatitudeReduction\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SVISION\",10)':{tag:'(0021,\"SVISION\",10)',vr:\"LO\",name:\"FindRangeAlgorithm\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SVISION\",11)':{tag:'(0021,\"SVISION\",11)',vr:\"DS\",name:\"ThresholdCAlgorithm\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SVISION\",20)':{tag:'(0021,\"SVISION\",20)',vr:\"LO\",name:\"SensometricCurve\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SVISION\",30)':{tag:'(0021,\"SVISION\",30)',vr:\"DS\",name:\"LowerWindowOffset\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SVISION\",31)':{tag:'(0021,\"SVISION\",31)',vr:\"DS\",name:\"UpperWindowOffset\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SVISION\",40)':{tag:'(0021,\"SVISION\",40)',vr:\"DS\",name:\"MinPrintableDensity\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SVISION\",41)':{tag:'(0021,\"SVISION\",41)',vr:\"DS\",name:\"MaxPrintableDensity\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SVISION\",90)':{tag:'(0021,\"SVISION\",90)',vr:\"DS\",name:\"Brightness\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SVISION\",91)':{tag:'(0021,\"SVISION\",91)',vr:\"DS\",name:\"Contrast\",vm:\"1\",version:\"PrivateTag\"},'(0021,\"SVISION\",92)':{tag:'(0021,\"SVISION\",92)',vr:\"DS\",name:\"ShapeFactor\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"SVISION\",00)':{tag:'(0023,\"SVISION\",00)',vr:\"LO\",name:\"ImageLaterality\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"SVISION\",01)':{tag:'(0023,\"SVISION\",01)',vr:\"IS\",name:\"LetterPosition\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"SVISION\",02)':{tag:'(0023,\"SVISION\",02)',vr:\"IS\",name:\"BurnedInAnnotation\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"SVISION\",03)':{tag:'(0023,\"SVISION\",03)',vr:\"LO\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0023,\"SVISION\",F0)':{tag:'(0023,\"SVISION\",F0)',vr:\"IS\",name:\"ImageSOPClass\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"SVISION\",00)':{tag:'(0025,\"SVISION\",00)',vr:\"IS\",name:\"OriginalImage\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"SVISION\",01)':{tag:'(0025,\"SVISION\",01)',vr:\"IS\",name:\"NotProcessedImage\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"SVISION\",02)':{tag:'(0025,\"SVISION\",02)',vr:\"IS\",name:\"CutOutImage\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"SVISION\",03)':{tag:'(0025,\"SVISION\",03)',vr:\"IS\",name:\"DuplicatedImage\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"SVISION\",04)':{tag:'(0025,\"SVISION\",04)',vr:\"IS\",name:\"StoredImage\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"SVISION\",05)':{tag:'(0025,\"SVISION\",05)',vr:\"IS\",name:\"RetrievedImage\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"SVISION\",06)':{tag:'(0025,\"SVISION\",06)',vr:\"IS\",name:\"RemoteImage\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"SVISION\",07)':{tag:'(0025,\"SVISION\",07)',vr:\"IS\",name:\"MediaStoredImage\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"SVISION\",08)':{tag:'(0025,\"SVISION\",08)',vr:\"IS\",name:\"ImageState\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"SVISION\",20)':{tag:'(0025,\"SVISION\",20)',vr:\"LO\",name:\"SourceImageFile\",vm:\"1\",version:\"PrivateTag\"},'(0025,\"SVISION\",21)':{tag:'(0025,\"SVISION\",21)',vr:\"UI\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"SVISION\",00)':{tag:'(0027,\"SVISION\",00)',vr:\"IS\",name:\"NumberOfSeries\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"SVISION\",01)':{tag:'(0027,\"SVISION\",01)',vr:\"IS\",name:\"NumberOfStudies\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"SVISION\",10)':{tag:'(0027,\"SVISION\",10)',vr:\"DT\",name:\"OldestSeries\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"SVISION\",11)':{tag:'(0027,\"SVISION\",11)',vr:\"DT\",name:\"NewestSeries\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"SVISION\",12)':{tag:'(0027,\"SVISION\",12)',vr:\"DT\",name:\"OldestStudy\",vm:\"1\",version:\"PrivateTag\"},'(0027,\"SVISION\",13)':{tag:'(0027,\"SVISION\",13)',vr:\"DT\",name:\"NewestStudy\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"TOSHIBA_MEC_1.0\",01)':{tag:'(0009,\"TOSHIBA_MEC_1.0\",01)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0009,\"TOSHIBA_MEC_1.0\",02)':{tag:'(0009,\"TOSHIBA_MEC_1.0\",02)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0009,\"TOSHIBA_MEC_1.0\",03)':{tag:'(0009,\"TOSHIBA_MEC_1.0\",03)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0009,\"TOSHIBA_MEC_1.0\",04)':{tag:'(0009,\"TOSHIBA_MEC_1.0\",04)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0011,\"TOSHIBA_MEC_1.0\",01)':{tag:'(0011,\"TOSHIBA_MEC_1.0\",01)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0011,\"TOSHIBA_MEC_1.0\",02)':{tag:'(0011,\"TOSHIBA_MEC_1.0\",02)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"TOSHIBA_MEC_1.0\",01)':{tag:'(0019,\"TOSHIBA_MEC_1.0\",01)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"TOSHIBA_MEC_1.0\",02)':{tag:'(0019,\"TOSHIBA_MEC_1.0\",02)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0021,\"TOSHIBA_MEC_1.0\",01)':{tag:'(0021,\"TOSHIBA_MEC_1.0\",01)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0021,\"TOSHIBA_MEC_1.0\",02)':{tag:'(0021,\"TOSHIBA_MEC_1.0\",02)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0021,\"TOSHIBA_MEC_1.0\",03)':{tag:'(0021,\"TOSHIBA_MEC_1.0\",03)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(7ff1,\"TOSHIBA_MEC_1.0\",01)':{tag:'(7ff1,\"TOSHIBA_MEC_1.0\",01)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(7ff1,\"TOSHIBA_MEC_1.0\",02)':{tag:'(7ff1,\"TOSHIBA_MEC_1.0\",02)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(7ff1,\"TOSHIBA_MEC_1.0\",03)':{tag:'(7ff1,\"TOSHIBA_MEC_1.0\",03)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(7ff1,\"TOSHIBA_MEC_1.0\",10)':{tag:'(7ff1,\"TOSHIBA_MEC_1.0\",10)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"TOSHIBA_MEC_CT_1.0\",01)':{tag:'(0019,\"TOSHIBA_MEC_CT_1.0\",01)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"TOSHIBA_MEC_CT_1.0\",02)':{tag:'(0019,\"TOSHIBA_MEC_CT_1.0\",02)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"TOSHIBA_MEC_CT_1.0\",03)':{tag:'(0019,\"TOSHIBA_MEC_CT_1.0\",03)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"TOSHIBA_MEC_CT_1.0\",04)':{tag:'(0019,\"TOSHIBA_MEC_CT_1.0\",04)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"TOSHIBA_MEC_CT_1.0\",05)':{tag:'(0019,\"TOSHIBA_MEC_CT_1.0\",05)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"TOSHIBA_MEC_CT_1.0\",06)':{tag:'(0019,\"TOSHIBA_MEC_CT_1.0\",06)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"TOSHIBA_MEC_CT_1.0\",07)':{tag:'(0019,\"TOSHIBA_MEC_CT_1.0\",07)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"TOSHIBA_MEC_CT_1.0\",08)':{tag:'(0019,\"TOSHIBA_MEC_CT_1.0\",08)',vr:\"LT\",name:\"OrientationHeadFeet\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"TOSHIBA_MEC_CT_1.0\",09)':{tag:'(0019,\"TOSHIBA_MEC_CT_1.0\",09)',vr:\"LT\",name:\"ViewDirection\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"TOSHIBA_MEC_CT_1.0\",0a)':{tag:'(0019,\"TOSHIBA_MEC_CT_1.0\",0a)',vr:\"LT\",name:\"OrientationSupineProne\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"TOSHIBA_MEC_CT_1.0\",0b)':{tag:'(0019,\"TOSHIBA_MEC_CT_1.0\",0b)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"TOSHIBA_MEC_CT_1.0\",0c)':{tag:'(0019,\"TOSHIBA_MEC_CT_1.0\",0c)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(0019,\"TOSHIBA_MEC_CT_1.0\",0d)':{tag:'(0019,\"TOSHIBA_MEC_CT_1.0\",0d)',vr:\"TM\",name:\"Time\",vm:\"1\",version:\"PrivateTag\"},'(0019,\"TOSHIBA_MEC_CT_1.0\",0e)':{tag:'(0019,\"TOSHIBA_MEC_CT_1.0\",0e)',vr:\"DS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(7ff1,\"TOSHIBA_MEC_CT_1.0\",01)':{tag:'(7ff1,\"TOSHIBA_MEC_CT_1.0\",01)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(7ff1,\"TOSHIBA_MEC_CT_1.0\",02)':{tag:'(7ff1,\"TOSHIBA_MEC_CT_1.0\",02)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(7ff1,\"TOSHIBA_MEC_CT_1.0\",03)':{tag:'(7ff1,\"TOSHIBA_MEC_CT_1.0\",03)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(7ff1,\"TOSHIBA_MEC_CT_1.0\",04)':{tag:'(7ff1,\"TOSHIBA_MEC_CT_1.0\",04)',vr:\"IS\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(7ff1,\"TOSHIBA_MEC_CT_1.0\",05)':{tag:'(7ff1,\"TOSHIBA_MEC_CT_1.0\",05)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(7ff1,\"TOSHIBA_MEC_CT_1.0\",07)':{tag:'(7ff1,\"TOSHIBA_MEC_CT_1.0\",07)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(7ff1,\"TOSHIBA_MEC_CT_1.0\",08)':{tag:'(7ff1,\"TOSHIBA_MEC_CT_1.0\",08)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(7ff1,\"TOSHIBA_MEC_CT_1.0\",09)':{tag:'(7ff1,\"TOSHIBA_MEC_CT_1.0\",09)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(7ff1,\"TOSHIBA_MEC_CT_1.0\",0a)':{tag:'(7ff1,\"TOSHIBA_MEC_CT_1.0\",0a)',vr:\"LT\",name:\"Unknown\",vm:\"1\",version:\"PrivateTag\"},'(7ff1,\"TOSHIBA_MEC_CT_1.0\",0b)':{tag:'(7ff1,\"TOSHIBA_MEC_CT_1.0\",0b)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(7ff1,\"TOSHIBA_MEC_CT_1.0\",0c)':{tag:'(7ff1,\"TOSHIBA_MEC_CT_1.0\",0c)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"},'(7ff1,\"TOSHIBA_MEC_CT_1.0\",0d)':{tag:'(7ff1,\"TOSHIBA_MEC_CT_1.0\",0d)',vr:\"US\",name:\"Unknown\",vm:\"1-n\",version:\"PrivateTag\"}};\n\nvar handler = {\n /**\n * Get a proxied value from the array or property value\n * Note that the property value get works even if you update the underlying object.\n * Also, return true of proxy.__isProxy in order to distinguish proxies and not double proxy them.\n */\n get: function get(target, prop) {\n if (prop == \"__isProxy\") return true;\n if (prop in target) return target[prop];\n return target[0][prop];\n },\n set: function set(obj, prop, value) {\n if (typeof prop === \"number\") {\n obj[prop] = value;\n } else if (prop in obj) {\n obj[prop] = value;\n } else {\n obj[0][prop] = value;\n }\n\n return true;\n }\n};\n/**\n * Add a proxy object for sqZero or the src[0] element if sqZero is unspecified, AND\n * src is an array of length 1.\n *\n * If sqZero isn't passed in, then assume this is a create call on the destination object\n * itself, by:\n * 1. If not an object, return dest\n * 2. If an array of length != 1, return dest\n * 3. If an array, use dest[0] as sqZero\n * 4. Use dest as sqZero\n *\n * @example\n * src = [{a:5,b:'string', c:null}]\n * addAccessors(src)\n * src.c = 'outerChange'\n * src[0].b='innerChange'\n *\n * assert src.a===5\n * assert src[0].c === 'outerChange'\n * assert src.b === 'innerChange'\n */\n\nvar addAccessors = function addAccessors(dest, sqZero) {\n if (dest.__isProxy) return dest;\n var itemZero = sqZero;\n\n if (itemZero === undefined) {\n if (_typeof(dest) !== \"object\") return dest;\n if (Array.isArray(dest) && dest.length !== 1) return dest;\n itemZero = Array.isArray(dest) ? dest[0] : dest;\n }\n\n var ret = [itemZero];\n return new Proxy(ret, handler);\n};\n\nvar DicomMetaDictionary = /*#__PURE__*/function () {\n // intakes a custom dictionary that will be used to parse/denaturalize the dataset\n function DicomMetaDictionary(customDictionary) {\n _classCallCheck(this, DicomMetaDictionary);\n\n this.customDictionary = customDictionary;\n this.customNameMap = DicomMetaDictionary._generateCustomNameMap(customDictionary);\n }\n\n _createClass(DicomMetaDictionary, [{\n key: \"denaturalizeDataset\",\n value: // denaturalizes dataset using custom dictionary and nameMap\n function denaturalizeDataset(dataset) {\n return DicomMetaDictionary.denaturalizeDataset(dataset, this.customNameMap);\n }\n }], [{\n key: \"punctuateTag\",\n value: function punctuateTag(rawTag) {\n if (rawTag.indexOf(\",\") !== -1) {\n return rawTag;\n }\n\n if (rawTag.length === 8 && rawTag === rawTag.match(/[0-9a-fA-F]*/)[0]) {\n var tag = rawTag.toUpperCase();\n return \"(\" + tag.substring(0, 4) + \",\" + tag.substring(4, 8) + \")\";\n }\n }\n }, {\n key: \"unpunctuateTag\",\n value: function unpunctuateTag(tag) {\n if (tag.indexOf(\",\") === -1) {\n return tag;\n }\n\n return tag.substring(1, 10).replace(\",\", \"\");\n } // fixes some common errors in VRs\n // TODO: if this gets longer it could go in ValueRepresentation.js\n // or in a dedicated class\n\n }, {\n key: \"cleanDataset\",\n value: function cleanDataset(dataset) {\n var cleanedDataset = {};\n Object.keys(dataset).forEach(function (tag) {\n var data = Object.assign({}, dataset[tag]);\n\n if (data.vr == \"SQ\") {\n var cleanedValues = [];\n Object.keys(data.Value).forEach(function (index) {\n cleanedValues.push(DicomMetaDictionary.cleanDataset(data.Value[index]));\n });\n data.Value = cleanedValues;\n } else {\n // remove null characters from strings\n data.Value = Object.keys(data.Value).map(function (index) {\n var item = data.Value[index];\n\n if (item.constructor.name == \"String\") {\n return item.replace(/\\0/, \"\");\n }\n\n return item;\n });\n }\n\n cleanedDataset[tag] = data;\n });\n return cleanedDataset;\n } // unlike naturalizeDataset, this only\n // changes the names of the member variables\n // but leaves the values intact\n\n }, {\n key: \"namifyDataset\",\n value: function namifyDataset(dataset) {\n var namedDataset = {};\n Object.keys(dataset).forEach(function (tag) {\n var data = Object.assign({}, dataset[tag]);\n\n if (data.vr == \"SQ\") {\n var namedValues = [];\n Object.keys(data.Value).forEach(function (index) {\n namedValues.push(DicomMetaDictionary.namifyDataset(data.Value[index]));\n });\n data.Value = namedValues;\n }\n\n var punctuatedTag = DicomMetaDictionary.punctuateTag(tag);\n var entry = DicomMetaDictionary.dictionary[punctuatedTag];\n var name = tag;\n\n if (entry) {\n name = entry.name;\n }\n\n namedDataset[name] = data;\n });\n return namedDataset;\n }\n /** converts from DICOM JSON Model dataset to a natural dataset\n * - sequences become lists\n * - single element lists are replaced by their first element,\n * with single element lists remaining lists, but being a\n * proxy for the child values, see addAccessors for examples\n * - object member names are dictionary, not group/element tag\n */\n\n }, {\n key: \"naturalizeDataset\",\n value: function naturalizeDataset(dataset) {\n var naturalDataset = {\n _vrMap: {}\n };\n Object.keys(dataset).forEach(function (tag) {\n var data = dataset[tag];\n var punctuatedTag = DicomMetaDictionary.punctuateTag(tag);\n var entry = DicomMetaDictionary.dictionary[punctuatedTag];\n var naturalName = tag;\n\n if (entry) {\n naturalName = entry.name;\n\n if (entry.vr == \"ox\") {\n // when the vr is data-dependent, keep track of the original type\n naturalDataset._vrMap[naturalName] = data.vr;\n }\n }\n\n if (data.Value === undefined) {\n // In the case of type 2, add this tag but explictly set it null to indicate its empty.\n naturalDataset[naturalName] = null;\n\n if (data.InlineBinary) {\n naturalDataset[naturalName] = {\n InlineBinary: data.InlineBinary\n };\n } else if (data.BulkDataURI) {\n naturalDataset[naturalName] = {\n BulkDataURI: data.BulkDataURI\n };\n }\n } else {\n if (data.vr === \"SQ\") {\n // convert sequence to list of values\n var naturalValues = [];\n Object.keys(data.Value).forEach(function (index) {\n naturalValues.push(DicomMetaDictionary.naturalizeDataset(data.Value[index]));\n });\n naturalDataset[naturalName] = naturalValues;\n } else {\n naturalDataset[naturalName] = data.Value;\n }\n\n if (naturalDataset[naturalName].length === 1) {\n var sqZero = naturalDataset[naturalName][0];\n\n if (sqZero && _typeof(sqZero) === \"object\" && !sqZero.length) {\n naturalDataset[naturalName] = addAccessors(naturalDataset[naturalName], sqZero);\n } else {\n naturalDataset[naturalName] = sqZero;\n }\n }\n }\n });\n return naturalDataset;\n }\n }, {\n key: \"denaturalizeValue\",\n value: function denaturalizeValue(naturalValue) {\n var value = naturalValue;\n\n if (!Array.isArray(value)) {\n value = [value];\n } else {\n var thereIsUndefinedValues = naturalValue.some(function (item) {\n return item === undefined;\n });\n\n if (thereIsUndefinedValues) {\n throw new Error(\"There are undefined values at the array naturalValue in DicomMetaDictionary.denaturalizeValue\");\n }\n }\n\n value = value.map(function (entry) {\n return entry.constructor.name == \"Number\" ? String(entry) : entry;\n });\n return value;\n } // keep the static function to support previous calls to the class\n\n }, {\n key: \"denaturalizeDataset\",\n value: function denaturalizeDataset(dataset) {\n var nameMap = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DicomMetaDictionary.nameMap;\n var unnaturalDataset = {};\n Object.keys(dataset).forEach(function (naturalName) {\n // check if it's a sequence\n var name = naturalName;\n var entry = nameMap[name];\n\n if (entry) {\n var dataValue = dataset[naturalName];\n\n if (dataValue === undefined) {\n // handle the case where it was deleted from the object but is in keys\n return;\n } // process this one entry\n\n\n var dataItem = {\n vr: entry.vr,\n Value: dataset[naturalName]\n };\n\n if (dataValue !== null) {\n if (entry.vr == \"ox\") {\n if (dataset._vrMap && dataset._vrMap[naturalName]) {\n dataItem.vr = dataset._vrMap[naturalName];\n } else {\n log.error(\"No value representation given for\", naturalName);\n }\n }\n\n dataItem.Value = DicomMetaDictionary.denaturalizeValue(dataItem.Value);\n\n if (entry.vr == \"SQ\") {\n var unnaturalValues = [];\n\n for (var datasetIndex = 0; datasetIndex < dataItem.Value.length; datasetIndex++) {\n var nestedDataset = dataItem.Value[datasetIndex];\n unnaturalValues.push(DicomMetaDictionary.denaturalizeDataset(nestedDataset, nameMap));\n }\n\n dataItem.Value = unnaturalValues;\n }\n\n var vr = ValueRepresentation.createByTypeString(dataItem.vr);\n\n if (!vr.isBinary() && vr.maxLength) {\n dataItem.Value = dataItem.Value.map(function (value) {\n if (value.length > vr.maxLength) {\n log.warn(\"Truncating value \".concat(value, \" of \").concat(naturalName, \" because it is longer than \").concat(vr.maxLength));\n return value.slice(0, vr.maxLength);\n } else {\n return value;\n }\n });\n }\n }\n\n var tag = DicomMetaDictionary.unpunctuateTag(entry.tag);\n unnaturalDataset[tag] = dataItem;\n } else {\n var validMetaNames = [\"_vrMap\", \"_meta\"];\n\n if (validMetaNames.indexOf(name) == -1) {\n log.warn(\"Unknown name in dataset\", name, \":\", dataset[name]);\n }\n }\n });\n return unnaturalDataset;\n }\n }, {\n key: \"uid\",\n value: function uid() {\n var uid = \"2.25.\" + Math.floor(1 + Math.random() * 9);\n\n for (var index = 0; index < 38; index++) {\n uid = uid + Math.floor(Math.random() * 10);\n }\n\n return uid;\n } // date and time in UTC\n\n }, {\n key: \"date\",\n value: function date() {\n var now = new Date();\n return now.toISOString().replace(/-/g, \"\").slice(0, 8);\n }\n }, {\n key: \"time\",\n value: function time() {\n var now = new Date();\n return now.toISOString().replace(/:/g, \"\").slice(11, 17);\n }\n }, {\n key: \"dateTime\",\n value: function dateTime() {\n // \"2017-07-07T16:09:18.079Z\" -> \"20170707160918.079\"\n var now = new Date();\n return now.toISOString().replace(/[:\\-TZ]/g, \"\");\n }\n }, {\n key: \"_generateNameMap\",\n value: function _generateNameMap() {\n DicomMetaDictionary.nameMap = {};\n Object.keys(DicomMetaDictionary.dictionary).forEach(function (tag) {\n var dict = DicomMetaDictionary.dictionary[tag];\n\n if (dict.version != \"PrivateTag\") {\n DicomMetaDictionary.nameMap[dict.name] = dict;\n }\n });\n }\n }, {\n key: \"_generateCustomNameMap\",\n value: function _generateCustomNameMap(dictionary) {\n var nameMap = {};\n Object.keys(dictionary).forEach(function (tag) {\n var dict = dictionary[tag];\n\n if (dict.version != \"PrivateTag\") {\n nameMap[dict.name] = dict;\n }\n });\n return nameMap;\n }\n }, {\n key: \"_generateUIDMap\",\n value: function _generateUIDMap() {\n DicomMetaDictionary.sopClassUIDsByName = {};\n Object.keys(DicomMetaDictionary.sopClassNamesByUID).forEach(function (uid) {\n var name = DicomMetaDictionary.sopClassNamesByUID[uid];\n DicomMetaDictionary.sopClassUIDsByName[name] = uid;\n });\n }\n }]);\n\n return DicomMetaDictionary;\n}(); // Subset of those listed at:\n// http://dicom.nema.org/medical/dicom/current/output/html/part04.html#sect_B.5\n\n\nDicomMetaDictionary.sopClassNamesByUID = {\n \"1.2.840.10008.5.1.4.1.1.2\": \"CTImage\",\n \"1.2.840.10008.5.1.4.1.1.2.1\": \"EnhancedCTImage\",\n \"1.2.840.10008.5.1.4.1.1.2.2\": \"LegacyConvertedEnhancedCTImage\",\n \"1.2.840.10008.5.1.4.1.1.3.1\": \"USMultiframeImage\",\n \"1.2.840.10008.5.1.4.1.1.4\": \"MRImage\",\n \"1.2.840.10008.5.1.4.1.1.4.1\": \"EnhancedMRImage\",\n \"1.2.840.10008.5.1.4.1.1.4.2\": \"MRSpectroscopy\",\n \"1.2.840.10008.5.1.4.1.1.4.3\": \"EnhancedMRColorImage\",\n \"1.2.840.10008.5.1.4.1.1.4.4\": \"LegacyConvertedEnhancedMRImage\",\n \"1.2.840.10008.5.1.4.1.1.6.1\": \"USImage\",\n \"1.2.840.10008.5.1.4.1.1.6.2\": \"EnhancedUSVolume\",\n \"1.2.840.10008.5.1.4.1.1.7\": \"SecondaryCaptureImage\",\n \"1.2.840.10008.5.1.4.1.1.30\": \"ParametricMapStorage\",\n \"1.2.840.10008.5.1.4.1.1.66\": \"RawData\",\n \"1.2.840.10008.5.1.4.1.1.66.1\": \"SpatialRegistration\",\n \"1.2.840.10008.5.1.4.1.1.66.2\": \"SpatialFiducials\",\n \"1.2.840.10008.5.1.4.1.1.66.3\": \"DeformableSpatialRegistration\",\n \"1.2.840.10008.5.1.4.1.1.66.4\": \"Segmentation\",\n \"1.2.840.10008.5.1.4.1.1.67\": \"RealWorldValueMapping\",\n \"1.2.840.10008.5.1.4.1.1.88.11\": \"BasicTextSR\",\n \"1.2.840.10008.5.1.4.1.1.88.22\": \"EnhancedSR\",\n \"1.2.840.10008.5.1.4.1.1.88.33\": \"ComprehensiveSR\",\n \"1.2.840.10008.5.1.4.1.1.128\": \"PETImage\",\n \"1.2.840.10008.5.1.4.1.1.130\": \"EnhancedPETImage\",\n \"1.2.840.10008.5.1.4.1.1.128.1\": \"LegacyConvertedEnhancedPETImage\"\n};\nDicomMetaDictionary.dictionary = dictionary;\n\nDicomMetaDictionary._generateNameMap();\n\nDicomMetaDictionary._generateUIDMap();\n\nvar IMPLICIT_LITTLE_ENDIAN$1 = \"1.2.840.10008.1.2\";\nvar EXPLICIT_LITTLE_ENDIAN$1 = \"1.2.840.10008.1.2.1\";\nvar DEFLATED_EXPLICIT_LITTLE_ENDIAN = \"1.2.840.10008.1.2.1.99\";\nvar EXPLICIT_BIG_ENDIAN = \"1.2.840.10008.1.2.2\";\nvar singleVRs$1 = [\"SQ\", \"OF\", \"OW\", \"OB\", \"UN\", \"LT\"];\nvar encodingMapping = {\n \"\": \"iso-8859-1\",\n \"iso-ir-6\": \"iso-8859-1\",\n \"iso-ir-13\": \"shift-jis\",\n \"iso-ir-100\": \"latin1\",\n \"iso-ir-101\": \"iso-8859-2\",\n \"iso-ir-109\": \"iso-8859-3\",\n \"iso-ir-110\": \"iso-8859-4\",\n \"iso-ir-126\": \"iso-ir-126\",\n \"iso-ir-127\": \"iso-ir-127\",\n \"iso-ir-138\": \"iso-ir-138\",\n \"iso-ir-144\": \"iso-ir-144\",\n \"iso-ir-148\": \"iso-ir-148\",\n \"iso-ir-166\": \"tis-620\",\n \"iso-2022-ir-6\": \"iso-8859-1\",\n \"iso-2022-ir-13\": \"shift-jis\",\n \"iso-2022-ir-87\": \"iso-2022-jp\",\n \"iso-2022-ir-100\": \"latin1\",\n \"iso-2022-ir-101\": \"iso-8859-2\",\n \"iso-2022-ir-109\": \"iso-8859-3\",\n \"iso-2022-ir-110\": \"iso-8859-4\",\n \"iso-2022-ir-126\": \"iso-ir-126\",\n \"iso-2022-ir-127\": \"iso-ir-127\",\n \"iso-2022-ir-138\": \"iso-ir-138\",\n \"iso-2022-ir-144\": \"iso-ir-144\",\n \"iso-2022-ir-148\": \"iso-ir-148\",\n \"iso-2022-ir-149\": \"euc-kr\",\n \"iso-2022-ir-159\": \"iso-2022-jp\",\n \"iso-2022-ir-166\": \"tis-620\",\n \"iso-2022-ir-58\": \"iso-ir-58\",\n \"iso-ir-192\": \"utf-8\",\n gb18030: \"gb18030\",\n \"iso-2022-gbk\": \"gbk\",\n \"iso-2022-58\": \"gb2312\",\n gbk: \"gbk\"\n};\nvar encapsulatedSyntaxes = [\"1.2.840.10008.1.2.4.50\", \"1.2.840.10008.1.2.4.51\", \"1.2.840.10008.1.2.4.57\", \"1.2.840.10008.1.2.4.70\", \"1.2.840.10008.1.2.4.80\", \"1.2.840.10008.1.2.4.81\", \"1.2.840.10008.1.2.4.90\", \"1.2.840.10008.1.2.4.91\", \"1.2.840.10008.1.2.4.92\", \"1.2.840.10008.1.2.4.93\", \"1.2.840.10008.1.2.4.94\", \"1.2.840.10008.1.2.4.95\", \"1.2.840.10008.1.2.5\", \"1.2.840.10008.1.2.6.1\", \"1.2.840.10008.1.2.4.100\", \"1.2.840.10008.1.2.4.102\", \"1.2.840.10008.1.2.4.103\"];\n\nvar DicomMessage = /*#__PURE__*/function () {\n function DicomMessage() {\n _classCallCheck(this, DicomMessage);\n }\n\n _createClass(DicomMessage, null, [{\n key: \"read\",\n value: function read(bufferStream, syntax, ignoreErrors) {\n var untilTag = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n var includeUntilTagValue = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n console.warn(\"DicomMessage.read to be deprecated after dcmjs 0.24.x\");\n return this._read(bufferStream, syntax, {\n ignoreErrors: ignoreErrors,\n untilTag: untilTag,\n includeUntilTagValue: includeUntilTagValue\n });\n }\n }, {\n key: \"readTag\",\n value: function readTag(bufferStream, syntax) {\n var untilTag = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var includeUntilTagValue = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n console.warn(\"DicomMessage.readTag to be deprecated after dcmjs 0.24.x\");\n return this._readTag(bufferStream, syntax, {\n untilTag: untilTag,\n includeUntilTagValue: includeUntilTagValue\n });\n }\n }, {\n key: \"_read\",\n value: function _read(bufferStream, syntax) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {\n ignoreErrors: false,\n untilTag: null,\n includeUntilTagValue: false\n };\n var ignoreErrors = options.ignoreErrors,\n untilTag = options.untilTag;\n var dict = {};\n\n try {\n while (!bufferStream.end()) {\n var readInfo = DicomMessage._readTag(bufferStream, syntax, options);\n\n var cleanTagString = readInfo.tag.toCleanString();\n\n if (cleanTagString === \"00080005\") {\n if (readInfo.values.length > 0) {\n var coding = readInfo.values[0];\n coding = coding.replace(/[_ ]/g, \"-\").toLowerCase();\n\n if (coding in encodingMapping) {\n coding = encodingMapping[coding];\n bufferStream.setDecoder(new TextDecoder(coding));\n } else if (ignoreErrors) {\n console.warn(\"Unsupported character set: \".concat(coding, \", using default character set\"));\n } else {\n throw Error(\"Unsupported character set: \".concat(coding));\n }\n }\n\n if (readInfo.values.length > 1) {\n if (ignoreErrors) {\n console.warn(\"Using multiple character sets is not supported, proceeding with just the first character set\", readInfo.values);\n } else {\n throw Error(\"Using multiple character sets is not supported: \".concat(readInfo.values));\n }\n }\n\n readInfo.values = [\"ISO_IR 192\"]; // change SpecificCharacterSet to UTF-8\n }\n\n dict[cleanTagString] = {\n vr: readInfo.vr.type,\n Value: readInfo.values\n };\n\n if (untilTag && untilTag === cleanTagString) {\n break;\n }\n }\n\n return dict;\n } catch (err) {\n if (ignoreErrors) {\n console.warn(\"WARN:\", err);\n return dict;\n }\n\n throw err;\n }\n }\n }, {\n key: \"_normalizeSyntax\",\n value: function _normalizeSyntax(syntax) {\n if (syntax == IMPLICIT_LITTLE_ENDIAN$1 || syntax == EXPLICIT_LITTLE_ENDIAN$1 || syntax == EXPLICIT_BIG_ENDIAN) {\n return syntax;\n } else {\n return EXPLICIT_LITTLE_ENDIAN$1;\n }\n }\n }, {\n key: \"isEncapsulated\",\n value: function isEncapsulated(syntax) {\n return encapsulatedSyntaxes.indexOf(syntax) != -1;\n }\n }, {\n key: \"readFile\",\n value: function readFile(buffer) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n ignoreErrors: false,\n untilTag: null,\n includeUntilTagValue: false,\n noCopy: false\n };\n var stream = new ReadBufferStream(buffer, null, {\n noCopy: options.noCopy\n }),\n useSyntax = EXPLICIT_LITTLE_ENDIAN$1;\n stream.reset();\n stream.increment(128);\n\n if (stream.readAsciiString(4) !== \"DICM\") {\n throw new Error(\"Invalid DICOM file, expected header is missing\");\n }\n\n var el = DicomMessage._readTag(stream, useSyntax),\n metaLength = el.values[0]; //read header buffer\n\n\n var metaStream = stream.more(metaLength);\n\n var metaHeader = DicomMessage._read(metaStream, useSyntax, options); //get the syntax\n\n\n var mainSyntax = metaHeader[\"00020010\"].Value[0]; //in case of deflated dataset, decompress and continue\n\n if (mainSyntax === DEFLATED_EXPLICIT_LITTLE_ENDIAN) {\n stream = new DeflatedReadBufferStream(stream, {\n noCopy: options.noCopy\n });\n }\n\n mainSyntax = DicomMessage._normalizeSyntax(mainSyntax);\n\n var objects = DicomMessage._read(stream, mainSyntax, options);\n\n var dicomDict = new DicomDict(metaHeader);\n dicomDict.dict = objects;\n return dicomDict;\n }\n }, {\n key: \"writeTagObject\",\n value: function writeTagObject(stream, tagString, vr, values, syntax, writeOptions) {\n var tag = Tag.fromString(tagString);\n tag.write(stream, vr, values, syntax, writeOptions);\n }\n }, {\n key: \"write\",\n value: function write(jsonObjects, useStream, syntax, writeOptions) {\n var written = 0;\n var sortedTags = Object.keys(jsonObjects).sort();\n sortedTags.forEach(function (tagString) {\n var tag = Tag.fromString(tagString),\n tagObject = jsonObjects[tagString],\n vrType = tagObject.vr,\n values = tagObject.Value;\n written += tag.write(useStream, vrType, values, syntax, writeOptions);\n });\n return written;\n }\n }, {\n key: \"_readTag\",\n value: function _readTag(stream, syntax) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {\n untilTag: null,\n includeUntilTagValue: false\n };\n var untilTag = options.untilTag,\n includeUntilTagValue = options.includeUntilTagValue;\n var implicit = syntax == IMPLICIT_LITTLE_ENDIAN$1 ? true : false,\n isLittleEndian = syntax == IMPLICIT_LITTLE_ENDIAN$1 || syntax == EXPLICIT_LITTLE_ENDIAN$1 ? true : false;\n var oldEndian = stream.isLittleEndian;\n stream.setEndian(isLittleEndian);\n var tag = Tag.readTag(stream);\n\n if (untilTag === tag.toCleanString() && untilTag !== null) {\n if (!includeUntilTagValue) {\n return {\n tag: tag,\n vr: 0,\n values: 0\n };\n }\n }\n\n var length = null,\n vr = null,\n vrType;\n\n if (implicit) {\n length = stream.readUint32();\n var elementData = DicomMessage.lookupTag(tag);\n\n if (elementData) {\n vrType = elementData.vr;\n } else {\n //unknown tag\n if (length == 0xffffffff) {\n vrType = \"SQ\";\n } else if (tag.isPixelDataTag()) {\n vrType = \"OW\";\n } else if (vrType == \"xs\") {\n vrType = \"US\";\n } else if (tag.isPrivateCreator()) {\n vrType = \"LO\";\n } else {\n vrType = \"UN\";\n }\n }\n\n vr = ValueRepresentation.createByTypeString(vrType);\n } else {\n vrType = stream.readVR();\n vr = ValueRepresentation.createByTypeString(vrType);\n\n if (vr.isExplicit()) {\n stream.increment(2);\n length = stream.readUint32();\n } else {\n length = stream.readUint16();\n }\n }\n\n var values = [];\n\n if (vr.isBinary() && length > vr.maxLength && !vr.noMultiple) {\n var times = length / vr.maxLength,\n i = 0;\n\n while (i++ < times) {\n values.push(vr.read(stream, vr.maxLength, syntax));\n }\n } else {\n var val = vr.read(stream, length, syntax);\n\n if (!vr.isBinary() && singleVRs$1.indexOf(vr.type) == -1) {\n values = val;\n\n if (typeof val === \"string\") {\n values = val.split(String.fromCharCode(0x5c));\n }\n } else if (vr.type == \"SQ\") {\n values = val;\n } else if (vr.type == \"OW\" || vr.type == \"OB\") {\n values = val;\n } else {\n Array.isArray(val) ? values = val : values.push(val);\n }\n }\n\n stream.setEndian(oldEndian);\n return {\n tag: tag,\n vr: vr,\n values: values\n };\n }\n }, {\n key: \"lookupTag\",\n value: function lookupTag(tag) {\n return DicomMetaDictionary.dictionary[tag.toString()];\n }\n }]);\n\n return DicomMessage;\n}();\n\nvar EXPLICIT_LITTLE_ENDIAN$2 = \"1.2.840.10008.1.2.1\";\n\nvar DicomDict = /*#__PURE__*/function () {\n function DicomDict(meta) {\n _classCallCheck(this, DicomDict);\n\n this.meta = meta;\n this.dict = {};\n }\n\n _createClass(DicomDict, [{\n key: \"upsertTag\",\n value: function upsertTag(tag, vr, values) {\n if (this.dict[tag]) {\n this.dict[tag].Value = values;\n } else {\n this.dict[tag] = {\n vr: vr,\n Value: values\n };\n }\n }\n }, {\n key: \"write\",\n value: function write() {\n var writeOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n allowInvalidVRLength: false\n };\n var metaSyntax = EXPLICIT_LITTLE_ENDIAN$2;\n var fileStream = new WriteBufferStream(4096, true);\n fileStream.writeUint8Repeat(0, 128);\n fileStream.writeAsciiString(\"DICM\");\n var metaStream = new WriteBufferStream(1024);\n\n if (!this.meta[\"00020010\"]) {\n this.meta[\"00020010\"] = {\n vr: \"UI\",\n Value: [EXPLICIT_LITTLE_ENDIAN$2]\n };\n }\n\n DicomMessage.write(this.meta, metaStream, metaSyntax, writeOptions);\n DicomMessage.writeTagObject(fileStream, \"00020000\", \"UL\", metaStream.size, metaSyntax, writeOptions);\n fileStream.concat(metaStream);\n var useSyntax = this.meta[\"00020010\"].Value[0];\n DicomMessage.write(this.dict, fileStream, useSyntax, writeOptions);\n return fileStream.getBuffer();\n }\n }]);\n\n return DicomDict;\n}();\n\nvar DICOMWEB = /*#__PURE__*/function () {\n /*\n JavaScript DICOMweb REST API for browser use.\n Design:\n * map rest api to high-level code with modern conventions\n ** ES6: classes, arrow functions, let...\n ** promises\n ** json converted to objects\n examples: see tests() method below.\n */\n function DICOMWEB() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, DICOMWEB);\n\n this.rootURL = options.rootURL;\n this.progressCallback = options.progressCallback;\n }\n\n _createClass(DICOMWEB, [{\n key: \"request\",\n value: function request(endpoint) {\n var parameters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var payload = arguments.length > 2 ? arguments[2] : undefined;\n var responseType = DICOMWEB.responseType(endpoint);\n var service = DICOMWEB.endpointService(endpoint);\n var url = this.rootURL + \"/\" + service + endpoint;\n var firstParameter = true;\n Object.keys(parameters).forEach(function (parameter) {\n if (firstParameter) {\n url += \"?\";\n firstParameter = false;\n } else {\n url += \"&\";\n }\n\n url += parameter + \"=\" + encodeURIComponent(parameters[parameter]);\n });\n\n function promiseHandler(resolve, reject) {\n var request = new XMLHttpRequest();\n request.open(\"GET\", url);\n request.responseType = responseType;\n\n request.onload = function () {\n resolve(request.response);\n };\n\n request.onprogress = this.progressCallback;\n\n request.onerror = function (error) {\n log.error(request.response);\n reject(error);\n };\n\n request.send(payload);\n }\n\n var promise = new Promise(promiseHandler.bind(this));\n return promise;\n }\n }, {\n key: \"patients\",\n value: function patients() {\n return this.request(\"patients\");\n }\n }, {\n key: \"studies\",\n value: function studies(patientID) {\n return this.request(\"studies\", {\n PatientID: patientID\n });\n }\n }, {\n key: \"series\",\n value: function series(studyInstanceUID) {\n return this.request(\"series\", {\n StudyInstanceUID: studyInstanceUID\n });\n }\n }, {\n key: \"instances\",\n value: function instances(studyInstanceUID, seriesInstanceUID) {\n return this.request(\"instances\", {\n StudyInstanceUID: studyInstanceUID,\n SeriesInstanceUID: seriesInstanceUID\n });\n }\n }, {\n key: \"instance\",\n value: function instance(studyInstanceUID, seriesInstanceUID, sopInstanceUID) {\n return this.request(\"wado\", {\n requestType: \"WADO\",\n studyUID: studyInstanceUID,\n seriesUID: seriesInstanceUID,\n objectUID: sopInstanceUID,\n contentType: \"application/dicom\"\n });\n }\n }, {\n key: \"tests\",\n value: function tests() {\n var testingServerURL = \"http://quantome.org:4242/dcm4chee-arc/aets/DCM4CHEE\";\n var testOptions = {\n rootURL: testingServerURL\n };\n new DICOMWEB(testOptions).patients().then(function (responses) {\n responses.forEach(function (patient) {\n log.log(patient);\n });\n });\n }\n }], [{\n key: \"responseType\",\n value: function responseType(endpoint) {\n var types = {\n wado: \"arraybuffer\"\n };\n return types[endpoint] ? types[endpoint] : \"json\";\n } // which URL service to use for each of the high level services\n\n }, {\n key: \"endpointService\",\n value: function endpointService(endpoint) {\n var services = {\n wado: \"\"\n };\n return Object.keys(services).indexOf(endpoint) != -1 ? services[endpoint] : \"rs/\";\n }\n }, {\n key: \"randomEntry\",\n value: function randomEntry(array) {\n return array[Math.floor(Math.random() * array.length)];\n }\n }]);\n\n return DICOMWEB;\n}();\n\n//\n// Handle DICOM and CIELAB colors\n// based on:\n// https://github.com/michaelonken/dcmtk/blob/3c68f0e882e22e6d9e2a42f836332c0ca21b3e7f/dcmiod/libsrc/cielabutil.cc\n//\n// RGB here refers to sRGB 0-1 per component.\n// dicomlab is CIELAB values as defined in the dicom standard\n// XYZ is CIEXYZ convention\n//\n// TODO: needs a test suite\n// TODO: only dicomlab2RGB tested on real data\n//\n//\nvar Colors = /*#__PURE__*/function () {\n function Colors() {\n _classCallCheck(this, Colors);\n }\n\n _createClass(Colors, null, [{\n key: \"d65WhitePointXYZ\",\n value: function d65WhitePointXYZ() {\n // white points of D65 light point (CIELAB standard white point)\n return [0.950456, 1.0, 1.088754];\n }\n }, {\n key: \"dicomlab2RGB\",\n value: function dicomlab2RGB(dicomlab) {\n return Colors.lab2RGB(Colors.dicomlab2LAB(dicomlab));\n }\n }, {\n key: \"rgb2DICOMLAB\",\n value: function rgb2DICOMLAB(rgb) {\n return Colors.lab2DICOMLAB(Colors.rgb2LAB(rgb));\n }\n }, {\n key: \"dicomlab2LAB\",\n value: function dicomlab2LAB(dicomlab) {\n return [dicomlab[0] * 100.0 / 65535.0, // results in 0 <= L <= 100\n dicomlab[1] * 255.0 / 65535.0 - 128, // results in -128 <= a <= 127\n dicomlab[2] * 255.0 / 65535.0 - 128 // results in -128 <= b <= 127\n ];\n }\n }, {\n key: \"lab2DICOMLAB\",\n value: function lab2DICOMLAB(lab) {\n return [lab[0] * 65535.0 / 100.0, // results in 0 <= L <= 65535\n (lab[1] + 128) * 65535.0 / 255.0, // results in 0 <= a <= 65535\n (lab[2] + 128) * 65535.0 / 255.0 // results in 0 <= b <= 65535\n ];\n }\n }, {\n key: \"rgb2LAB\",\n value: function rgb2LAB(rgb) {\n return Colors.xyz2LAB(Colors.rgb2XYZ(rgb));\n }\n }, {\n key: \"gammaCorrection\",\n value: function gammaCorrection(n) {\n if (n <= 0.0031306684425005883) {\n return 12.92 * n;\n } else {\n return 1.055 * Math.pow(n, 0.416666666666666667) - 0.055;\n }\n }\n }, {\n key: \"invGammaCorrection\",\n value: function invGammaCorrection(n) {\n if (n <= 0.0404482362771076) {\n return n / 12.92;\n } else {\n return Math.pow((n + 0.055) / 1.055, 2.4);\n }\n }\n }, {\n key: \"rgb2XYZ\",\n value: function rgb2XYZ(rgb) {\n var R = Colors.invGammaCorrection(rgb[0]);\n var G = Colors.invGammaCorrection(rgb[1]);\n var B = Colors.invGammaCorrection(rgb[2]);\n return [0.4123955889674142161 * R + 0.3575834307637148171 * G + 0.1804926473817015735 * B, 0.2125862307855955516 * R + 0.7151703037034108499 * G + 0.07220049864333622685 * B, 0.01929721549174694484 * R + 0.1191838645808485318 * G + 0.950497125131579766 * B];\n }\n }, {\n key: \"xyz2LAB\",\n value: function xyz2LAB(xyz) {\n var whitePoint = Colors.d65WhitePointXYZ();\n var X = xyz[0] / whitePoint[0];\n var Y = xyz[1] / whitePoint[1];\n var Z = xyz[2] / whitePoint[2];\n X = Colors.labf(X);\n Y = Colors.labf(Y);\n Z = Colors.labf(Z);\n return [116 * Y - 16, 500 * (X - Y), 200 * (Y - Z)];\n }\n }, {\n key: \"lab2RGB\",\n value: function lab2RGB(lab) {\n return Colors.xyz2RGB(Colors.lab2XYZ(lab));\n }\n }, {\n key: \"lab2XYZ\",\n value: function lab2XYZ(lab) {\n var L = (lab[0] + 16) / 116;\n var a = L + lab[1] / 500;\n var b = L - lab[2] / 200;\n var whitePoint = Colors.d65WhitePointXYZ();\n return [whitePoint[0] * Colors.labfInv(a), whitePoint[1] * Colors.labfInv(L), whitePoint[2] * Colors.labfInv(b)];\n }\n }, {\n key: \"xyz2RGB\",\n value: function xyz2RGB(xyz) {\n var R1 = 3.2406 * xyz[0] - 1.5372 * xyz[1] - 0.4986 * xyz[2];\n var G1 = -0.9689 * xyz[0] + 1.8758 * xyz[1] + 0.0415 * xyz[2];\n var B1 = 0.0557 * xyz[0] - 0.204 * xyz[1] + 1.057 * xyz[2];\n /* Force nonnegative values so that gamma correction is well-defined. */\n\n var minimumComponent = Math.min(R1, G1);\n minimumComponent = Math.min(minimumComponent, B1);\n\n if (minimumComponent < 0) {\n R1 -= minimumComponent;\n G1 -= minimumComponent;\n B1 -= minimumComponent;\n }\n /* Transform from RGB to R'G'B' */\n\n\n return [Colors.gammaCorrection(R1), Colors.gammaCorrection(G1), Colors.gammaCorrection(B1)];\n }\n }, {\n key: \"labf\",\n value: function labf(n) {\n if (n >= 8.85645167903563082e-3) {\n return Math.pow(n, 0.333333333333333);\n } else {\n return 841.0 / 108.0 * n + 4.0 / 29.0;\n }\n }\n }, {\n key: \"labfInv\",\n value: function labfInv(n) {\n if (n >= 0.206896551724137931) {\n return n * n * n;\n } else {\n return 108.0 / 841.0 * (n - 4.0 / 29.0);\n }\n }\n }]);\n\n return Colors;\n}();\n\nvar global$1 = (typeof global !== \"undefined\" ? global :\n typeof self !== \"undefined\" ? self :\n typeof window !== \"undefined\" ? window : {});\n\nvar lookup = [];\nvar revLookup = [];\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array;\nvar inited = false;\nfunction init () {\n inited = true;\n var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n for (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i];\n revLookup[code.charCodeAt(i)] = i;\n }\n\n revLookup['-'.charCodeAt(0)] = 62;\n revLookup['_'.charCodeAt(0)] = 63;\n}\n\nfunction toByteArray (b64) {\n if (!inited) {\n init();\n }\n var i, j, l, tmp, placeHolders, arr;\n var len = b64.length;\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // the number of equal signs (place holders)\n // if there are two placeholders, than the two characters before it\n // represent one byte\n // if there is only one, then the three characters before it represent 2 bytes\n // this is just a cheap hack to not do indexOf twice\n placeHolders = b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0;\n\n // base64 is 4/3 + up to two characters of the original data\n arr = new Arr(len * 3 / 4 - placeHolders);\n\n // if there are placeholders, only get up to the last complete 4 chars\n l = placeHolders > 0 ? len - 4 : len;\n\n var L = 0;\n\n for (i = 0, j = 0; i < l; i += 4, j += 3) {\n tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)];\n arr[L++] = (tmp >> 16) & 0xFF;\n arr[L++] = (tmp >> 8) & 0xFF;\n arr[L++] = tmp & 0xFF;\n }\n\n if (placeHolders === 2) {\n tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4);\n arr[L++] = tmp & 0xFF;\n } else if (placeHolders === 1) {\n tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2);\n arr[L++] = (tmp >> 8) & 0xFF;\n arr[L++] = tmp & 0xFF;\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp;\n var output = [];\n for (var i = start; i < end; i += 3) {\n tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]);\n output.push(tripletToBase64(tmp));\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n if (!inited) {\n init();\n }\n var tmp;\n var len = uint8.length;\n var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes\n var output = '';\n var parts = [];\n var maxChunkLength = 16383; // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)));\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1];\n output += lookup[tmp >> 2];\n output += lookup[(tmp << 4) & 0x3F];\n output += '==';\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + (uint8[len - 1]);\n output += lookup[tmp >> 10];\n output += lookup[(tmp >> 4) & 0x3F];\n output += lookup[(tmp << 2) & 0x3F];\n output += '=';\n }\n\n parts.push(output);\n\n return parts.join('')\n}\n\nfunction read (buffer, offset, isLE, mLen, nBytes) {\n var e, m;\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = -7;\n var i = isLE ? (nBytes - 1) : 0;\n var d = isLE ? -1 : 1;\n var s = buffer[offset + i];\n\n i += d;\n\n e = s & ((1 << (-nBits)) - 1);\n s >>= (-nBits);\n nBits += eLen;\n for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1);\n e >>= (-nBits);\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen);\n e = e - eBias;\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nfunction write (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c;\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0);\n var i = isLE ? 0 : (nBytes - 1);\n var d = isLE ? 1 : -1;\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0;\n\n value = Math.abs(value);\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0;\n e = eMax;\n } else {\n e = Math.floor(Math.log(value) / Math.LN2);\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * Math.pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * Math.pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);\n e = 0;\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m;\n eLen += mLen;\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128;\n}\n\nvar toString$2 = {}.toString;\n\nvar isArray = Array.isArray || function (arr) {\n return toString$2.call(arr) == '[object Array]';\n};\n\nvar INSPECT_MAX_BYTES = 50;\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global$1.TYPED_ARRAY_SUPPORT !== undefined\n ? global$1.TYPED_ARRAY_SUPPORT\n : true;\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length);\n that.__proto__ = Buffer.prototype;\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length);\n }\n that.length = length;\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192; // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype;\n return arr\n};\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n};\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype;\n Buffer.__proto__ = Uint8Array;\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size);\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n};\n\nfunction allocUnsafe (that, size) {\n assertSize(size);\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0);\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0;\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n};\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n};\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8';\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0;\n that = createBuffer(that, length);\n\n var actual = that.write(string, encoding);\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual);\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0;\n that = createBuffer(that, length);\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255;\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength; // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array);\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset);\n } else {\n array = new Uint8Array(array, byteOffset, length);\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array;\n that.__proto__ = Buffer.prototype;\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array);\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (internalIsBuffer(obj)) {\n var len = checked(obj.length) | 0;\n that = createBuffer(that, len);\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len);\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\nBuffer.isBuffer = isBuffer;\nfunction internalIsBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!internalIsBuffer(a) || !internalIsBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length;\n var y = b.length;\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i];\n y = b[i];\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n};\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n};\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i;\n if (length === undefined) {\n length = 0;\n for (i = 0; i < list.length; ++i) {\n length += list[i].length;\n }\n }\n\n var buffer = Buffer.allocUnsafe(length);\n var pos = 0;\n for (i = 0; i < list.length; ++i) {\n var buf = list[i];\n if (!internalIsBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos);\n pos += buf.length;\n }\n return buffer\n};\n\nfunction byteLength (string, encoding) {\n if (internalIsBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string;\n }\n\n var len = string.length;\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false;\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase();\n loweredCase = true;\n }\n }\n}\nBuffer.byteLength = byteLength;\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false;\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0;\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length;\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0;\n start >>>= 0;\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8';\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase();\n loweredCase = true;\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true;\n\nfunction swap (b, n, m) {\n var i = b[n];\n b[n] = b[m];\n b[m] = i;\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length;\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1);\n }\n return this\n};\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length;\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3);\n swap(this, i + 1, i + 2);\n }\n return this\n};\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length;\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7);\n swap(this, i + 1, i + 6);\n swap(this, i + 2, i + 5);\n swap(this, i + 3, i + 4);\n }\n return this\n};\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0;\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n};\n\nBuffer.prototype.equals = function equals (b) {\n if (!internalIsBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n};\n\nBuffer.prototype.inspect = function inspect () {\n var str = '';\n var max = INSPECT_MAX_BYTES;\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ');\n if (this.length > max) str += ' ... ';\n }\n return ''\n};\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!internalIsBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0;\n }\n if (end === undefined) {\n end = target ? target.length : 0;\n }\n if (thisStart === undefined) {\n thisStart = 0;\n }\n if (thisEnd === undefined) {\n thisEnd = this.length;\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0;\n end >>>= 0;\n thisStart >>>= 0;\n thisEnd >>>= 0;\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart;\n var y = end - start;\n var len = Math.min(x, y);\n\n var thisCopy = this.slice(thisStart, thisEnd);\n var targetCopy = target.slice(start, end);\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i];\n y = targetCopy[i];\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n};\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset;\n byteOffset = 0;\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff;\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000;\n }\n byteOffset = +byteOffset; // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1);\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset;\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1;\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0;\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding);\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (internalIsBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF; // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1;\n var arrLength = arr.length;\n var valLength = val.length;\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase();\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2;\n arrLength /= 2;\n valLength /= 2;\n byteOffset /= 2;\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i;\n if (dir) {\n var foundIndex = -1;\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i;\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex;\n foundIndex = -1;\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength;\n for (i = byteOffset; i >= 0; i--) {\n var found = true;\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false;\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n};\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n};\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n};\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0;\n var remaining = buf.length - offset;\n if (!length) {\n length = remaining;\n } else {\n length = Number(length);\n if (length > remaining) {\n length = remaining;\n }\n }\n\n // must be an even number of digits\n var strLen = string.length;\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2;\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16);\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed;\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8';\n length = this.length;\n offset = 0;\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset;\n length = this.length;\n offset = 0;\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0;\n if (isFinite(length)) {\n length = length | 0;\n if (encoding === undefined) encoding = 'utf8';\n } else {\n encoding = length;\n length = undefined;\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset;\n if (length === undefined || length > remaining) length = remaining;\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8';\n\n var loweredCase = false;\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase();\n loweredCase = true;\n }\n }\n};\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n};\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return fromByteArray(buf)\n } else {\n return fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end);\n var res = [];\n\n var i = start;\n while (i < end) {\n var firstByte = buf[i];\n var codePoint = null;\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1;\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint;\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte;\n }\n break\n case 2:\n secondByte = buf[i + 1];\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F);\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint;\n }\n }\n break\n case 3:\n secondByte = buf[i + 1];\n thirdByte = buf[i + 2];\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F);\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint;\n }\n }\n break\n case 4:\n secondByte = buf[i + 1];\n thirdByte = buf[i + 2];\n fourthByte = buf[i + 3];\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F);\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint;\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD;\n bytesPerSequence = 1;\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000;\n res.push(codePoint >>> 10 & 0x3FF | 0xD800);\n codePoint = 0xDC00 | codePoint & 0x3FF;\n }\n\n res.push(codePoint);\n i += bytesPerSequence;\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000;\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length;\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = '';\n var i = 0;\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n );\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = '';\n end = Math.min(buf.length, end);\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F);\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = '';\n end = Math.min(buf.length, end);\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i]);\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length;\n\n if (!start || start < 0) start = 0;\n if (!end || end < 0 || end > len) end = len;\n\n var out = '';\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i]);\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end);\n var res = '';\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length;\n start = ~~start;\n end = end === undefined ? len : ~~end;\n\n if (start < 0) {\n start += len;\n if (start < 0) start = 0;\n } else if (start > len) {\n start = len;\n }\n\n if (end < 0) {\n end += len;\n if (end < 0) end = 0;\n } else if (end > len) {\n end = len;\n }\n\n if (end < start) end = start;\n\n var newBuf;\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end);\n newBuf.__proto__ = Buffer.prototype;\n } else {\n var sliceLen = end - start;\n newBuf = new Buffer(sliceLen, undefined);\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start];\n }\n }\n\n return newBuf\n};\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n\n var val = this[offset];\n var mul = 1;\n var i = 0;\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul;\n }\n\n return val\n};\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length);\n }\n\n var val = this[offset + --byteLength];\n var mul = 1;\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul;\n }\n\n return val\n};\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length);\n return this[offset]\n};\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length);\n return this[offset] | (this[offset + 1] << 8)\n};\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length);\n return (this[offset] << 8) | this[offset + 1]\n};\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n};\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n};\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n\n var val = this[offset];\n var mul = 1;\n var i = 0;\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul;\n }\n mul *= 0x80;\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n\n return val\n};\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n\n var i = byteLength;\n var mul = 1;\n var val = this[offset + --i];\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul;\n }\n mul *= 0x80;\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n\n return val\n};\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length);\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n};\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length);\n var val = this[offset] | (this[offset + 1] << 8);\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n};\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length);\n var val = this[offset + 1] | (this[offset] << 8);\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n};\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n};\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n};\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n return read(this, offset, true, 23, 4)\n};\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n return read(this, offset, false, 23, 4)\n};\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length);\n return read(this, offset, true, 52, 8)\n};\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length);\n return read(this, offset, false, 52, 8)\n};\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!internalIsBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1;\n checkInt(this, value, offset, byteLength, maxBytes, 0);\n }\n\n var mul = 1;\n var i = 0;\n this[offset] = value & 0xFF;\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF;\n }\n\n return offset + byteLength\n};\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1;\n checkInt(this, value, offset, byteLength, maxBytes, 0);\n }\n\n var i = byteLength - 1;\n var mul = 1;\n this[offset + i] = value & 0xFF;\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF;\n }\n\n return offset + byteLength\n};\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0);\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);\n this[offset] = (value & 0xff);\n return offset + 1\n};\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1;\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8;\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff);\n this[offset + 1] = (value >>> 8);\n } else {\n objectWriteUInt16(this, value, offset, true);\n }\n return offset + 2\n};\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8);\n this[offset + 1] = (value & 0xff);\n } else {\n objectWriteUInt16(this, value, offset, false);\n }\n return offset + 2\n};\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1;\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff;\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24);\n this[offset + 2] = (value >>> 16);\n this[offset + 1] = (value >>> 8);\n this[offset] = (value & 0xff);\n } else {\n objectWriteUInt32(this, value, offset, true);\n }\n return offset + 4\n};\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24);\n this[offset + 1] = (value >>> 16);\n this[offset + 2] = (value >>> 8);\n this[offset + 3] = (value & 0xff);\n } else {\n objectWriteUInt32(this, value, offset, false);\n }\n return offset + 4\n};\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1);\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit);\n }\n\n var i = 0;\n var mul = 1;\n var sub = 0;\n this[offset] = value & 0xFF;\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1;\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF;\n }\n\n return offset + byteLength\n};\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1);\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit);\n }\n\n var i = byteLength - 1;\n var mul = 1;\n var sub = 0;\n this[offset + i] = value & 0xFF;\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1;\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF;\n }\n\n return offset + byteLength\n};\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80);\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);\n if (value < 0) value = 0xff + value + 1;\n this[offset] = (value & 0xff);\n return offset + 1\n};\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff);\n this[offset + 1] = (value >>> 8);\n } else {\n objectWriteUInt16(this, value, offset, true);\n }\n return offset + 2\n};\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8);\n this[offset + 1] = (value & 0xff);\n } else {\n objectWriteUInt16(this, value, offset, false);\n }\n return offset + 2\n};\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff);\n this[offset + 1] = (value >>> 8);\n this[offset + 2] = (value >>> 16);\n this[offset + 3] = (value >>> 24);\n } else {\n objectWriteUInt32(this, value, offset, true);\n }\n return offset + 4\n};\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);\n if (value < 0) value = 0xffffffff + value + 1;\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24);\n this[offset + 1] = (value >>> 16);\n this[offset + 2] = (value >>> 8);\n this[offset + 3] = (value & 0xff);\n } else {\n objectWriteUInt32(this, value, offset, false);\n }\n return offset + 4\n};\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4);\n }\n write(buf, value, offset, littleEndian, 23, 4);\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n};\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n};\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8);\n }\n write(buf, value, offset, littleEndian, 52, 8);\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n};\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n};\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0;\n if (!end && end !== 0) end = this.length;\n if (targetStart >= target.length) targetStart = target.length;\n if (!targetStart) targetStart = 0;\n if (end > 0 && end < start) end = start;\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length;\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start;\n }\n\n var len = end - start;\n var i;\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start];\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start];\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n );\n }\n\n return len\n};\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start;\n start = 0;\n end = this.length;\n } else if (typeof end === 'string') {\n encoding = end;\n end = this.length;\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0);\n if (code < 256) {\n val = code;\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255;\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0;\n end = end === undefined ? this.length : end >>> 0;\n\n if (!val) val = 0;\n\n var i;\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val;\n }\n } else {\n var bytes = internalIsBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString());\n var len = bytes.length;\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len];\n }\n }\n\n return this\n};\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g;\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '');\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '=';\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity;\n var codePoint;\n var length = string.length;\n var leadSurrogate = null;\n var bytes = [];\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i);\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint;\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n leadSurrogate = codePoint;\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000;\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n }\n\n leadSurrogate = null;\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint);\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n );\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n );\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n );\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = [];\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF);\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo;\n var byteArray = [];\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i);\n hi = c >> 8;\n lo = c % 256;\n byteArray.push(lo);\n byteArray.push(hi);\n }\n\n return byteArray\n}\n\n\nfunction base64ToBytes (str) {\n return toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i];\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n\n\n// the following is from is-buffer, also by Feross Aboukhadijeh and with same lisence\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nfunction isBuffer(obj) {\n return obj != null && (!!obj._isBuffer || isFastBuffer(obj) || isSlowBuffer(obj))\n}\n\nfunction isFastBuffer (obj) {\n return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isFastBuffer(obj.slice(0, 0))\n}\n\nfunction datasetToDict(dataset) {\n var fileMetaInformationVersionArray = new Uint8Array(2);\n fileMetaInformationVersionArray[1] = 1;\n var TransferSyntaxUID = dataset._meta.TransferSyntaxUID && dataset._meta.TransferSyntaxUID.Value && dataset._meta.TransferSyntaxUID.Value[0] ? dataset._meta.TransferSyntaxUID.Value[0] : \"1.2.840.10008.1.2.1\";\n dataset._meta = {\n MediaStorageSOPClassUID: dataset.SOPClassUID,\n MediaStorageSOPInstanceUID: dataset.SOPInstanceUID,\n ImplementationVersionName: \"dcmjs-0.0\",\n TransferSyntaxUID: TransferSyntaxUID,\n ImplementationClassUID: \"2.25.80302813137786398554742050926734630921603366648225212145404\",\n FileMetaInformationVersion: fileMetaInformationVersionArray.buffer\n };\n var denaturalized = DicomMetaDictionary.denaturalizeDataset(dataset._meta);\n var dicomDict = new DicomDict(denaturalized);\n dicomDict.dict = DicomMetaDictionary.denaturalizeDataset(dataset);\n return dicomDict;\n}\n\nfunction datasetToBuffer(dataset) {\n return Buffer.from(datasetToDict(dataset).write());\n}\n\nfunction datasetToBlob(dataset) {\n var buffer = datasetToBuffer(dataset);\n return new Blob([buffer], {\n type: \"application/dicom\"\n });\n}\n\nvar DerivedDataset = /*#__PURE__*/function () {\n function DerivedDataset(datasets) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, DerivedDataset);\n\n this.options = JSON.parse(JSON.stringify(options));\n var o = this.options;\n o.Manufacturer = options.Manufacturer || \"Unspecified\";\n o.ManufacturerModelName = options.ManufacturerModelName || \"Unspecified\";\n o.SeriesDescription = options.SeriesDescription || \"Research Derived series\";\n o.SeriesNumber = options.SeriesNumber || \"99\";\n o.SoftwareVersions = options.SoftwareVersions || \"0\";\n o.DeviceSerialNumber = options.DeviceSerialNumber || \"1\";\n var date = DicomMetaDictionary.date();\n var time = DicomMetaDictionary.time();\n o.SeriesDate = options.SeriesDate || date;\n o.SeriesTime = options.SeriesTime || time;\n o.ContentDate = options.ContentDate || date;\n o.ContentTime = options.ContentTime || time;\n o.SOPInstanceUID = options.SOPInstanceUID || DicomMetaDictionary.uid();\n o.SeriesInstanceUID = options.SeriesInstanceUID || DicomMetaDictionary.uid();\n o.ClinicalTrialTimePointID = options.ClinicalTrialTimePointID || \"\";\n o.ClinicalTrialCoordinatingCenterName = options.ClinicalTrialCoordinatingCenterName || \"\";\n o.ClinicalTrialSeriesID = options.ClinicalTrialSeriesID || \"\";\n o.ImageComments = options.ImageComments || \"NOT FOR CLINICAL USE\";\n o.ContentQualification = \"RESEARCH\";\n this.referencedDatasets = datasets; // list of one or more dicom-like object instances\n\n this.referencedDataset = this.referencedDatasets[0];\n this.dataset = {\n _vrMap: this.referencedDataset._vrMap,\n _meta: this.referencedDataset._meta\n };\n this.derive();\n }\n\n _createClass(DerivedDataset, [{\n key: \"assignToDataset\",\n value: function assignToDataset(data) {\n var _this = this;\n\n Object.keys(data).forEach(function (key) {\n return _this.dataset[key] = data[key];\n });\n }\n }, {\n key: \"assignFromReference\",\n value: function assignFromReference(tags) {\n var _this2 = this;\n\n tags.forEach(function (tag) {\n return _this2.dataset[tag] = _this2.referencedDataset[tag] || \"\";\n });\n }\n }, {\n key: \"assignFromOptions\",\n value: function assignFromOptions(tags) {\n var _this3 = this;\n\n tags.forEach(function (tag) {\n return _this3.dataset[tag] = _this3.options[tag] || \"\";\n });\n }\n }, {\n key: \"derive\",\n value: function derive() {\n // common for all instances in study\n this.assignFromReference([\"AccessionNumber\", \"ReferringPhysicianName\", \"StudyDate\", \"StudyID\", \"StudyTime\", \"PatientName\", \"PatientID\", \"PatientBirthDate\", \"PatientSex\", \"PatientAge\", \"StudyInstanceUID\", \"StudyID\"]);\n this.assignFromOptions([\"Manufacturer\", \"SoftwareVersions\", \"DeviceSerialNumber\", \"ManufacturerModelName\", \"SeriesDescription\", \"SeriesNumber\", \"ImageComments\", \"SeriesDate\", \"SeriesTime\", \"ContentDate\", \"ContentTime\", \"ContentQualification\", \"SOPInstanceUID\", \"SeriesInstanceUID\"]);\n }\n }], [{\n key: \"copyDataset\",\n value: function copyDataset(dataset) {\n // copies everything but the buffers\n return JSON.parse(JSON.stringify(dataset));\n }\n }]);\n\n return DerivedDataset;\n}();\n\nvar DerivedPixels = /*#__PURE__*/function (_DerivedDataset) {\n _inherits(DerivedPixels, _DerivedDataset);\n\n var _super = _createSuper(DerivedPixels);\n\n function DerivedPixels(datasets) {\n var _this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, DerivedPixels);\n\n _this = _super.call(this, datasets, options);\n var o = _this.options;\n o.ContentLabel = options.ContentLabel || \"\";\n o.ContentDescription = options.ContentDescription || \"\";\n o.ContentCreatorName = options.ContentCreatorName || \"\";\n return _this;\n } // this assumes a normalized multiframe input and will create\n // a multiframe derived image\n\n\n _createClass(DerivedPixels, [{\n key: \"derive\",\n value: function derive() {\n _get(_getPrototypeOf(DerivedPixels.prototype), \"derive\", this).call(this);\n\n this.assignToDataset({\n ImageType: [\"DERIVED\", \"PRIMARY\"],\n LossyImageCompression: \"00\",\n InstanceNumber: \"1\"\n });\n this.assignFromReference([\"SOPClassUID\", \"Modality\", \"FrameOfReferenceUID\", \"PositionReferenceIndicator\", \"NumberOfFrames\", \"Rows\", \"Columns\", \"SamplesPerPixel\", \"PhotometricInterpretation\", \"BitsStored\", \"HighBit\"]);\n this.assignFromOptions([\"ContentLabel\", \"ContentDescription\", \"ContentCreatorName\"]); //\n // TODO: more carefully copy only PixelMeasures and related\n // TODO: add derivation references\n //\n\n if (this.referencedDataset.SharedFunctionalGroupsSequence) {\n this.dataset.SharedFunctionalGroupsSequence = DerivedDataset.copyDataset(this.referencedDataset.SharedFunctionalGroupsSequence);\n }\n\n if (this.referencedDataset.PerFrameFunctionalGroupsSequence) {\n this.dataset.PerFrameFunctionalGroupsSequence = DerivedDataset.copyDataset(this.referencedDataset.PerFrameFunctionalGroupsSequence);\n } // make an array of zeros for the pixels\n\n\n this.dataset.PixelData = new ArrayBuffer(this.referencedDataset.PixelData.byteLength);\n }\n }]);\n\n return DerivedPixels;\n}(DerivedDataset);\n\nvar DerivedImage = /*#__PURE__*/function (_DerivedPixels) {\n _inherits(DerivedImage, _DerivedPixels);\n\n var _super = _createSuper(DerivedImage);\n\n function DerivedImage(datasets) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, DerivedImage);\n\n return _super.call(this, datasets, options);\n }\n\n _createClass(DerivedImage, [{\n key: \"derive\",\n value: function derive() {\n _get(_getPrototypeOf(DerivedImage.prototype), \"derive\", this).call(this);\n\n this.assignFromReference([\"WindowCenter\", \"WindowWidth\", \"BitsAllocated\", \"PixelRepresentation\", \"BodyPartExamined\", \"Laterality\", \"PatientPosition\", \"RescaleSlope\", \"RescaleIntercept\", \"PixelPresentation\", \"VolumetricProperties\", \"VolumeBasedCalculationTechnique\", \"PresentationLUTShape\"]);\n }\n }]);\n\n return DerivedImage;\n}(DerivedPixels);\n\nvar Normalizer = /*#__PURE__*/function () {\n function Normalizer(datasets) {\n _classCallCheck(this, Normalizer);\n\n this.datasets = datasets; // one or more dicom-like object instances\n\n this.dataset = undefined; // a normalized multiframe dicom object instance\n }\n\n _createClass(Normalizer, [{\n key: \"normalize\",\n value: function normalize() {\n return \"No normalization defined\";\n }\n }], [{\n key: \"consistentSOPClassUIDs\",\n value: function consistentSOPClassUIDs(datasets) {\n // return sopClassUID if all exist and match, otherwise undefined\n var sopClassUID;\n datasets.forEach(function (dataset) {\n if (!dataset.SOPClassUID) {\n return undefined;\n }\n\n if (!sopClassUID) {\n sopClassUID = dataset.SOPClassUID;\n }\n\n if (dataset.SOPClassUID !== sopClassUID) {\n log.error(\"inconsistent sopClassUIDs: \", dataset.SOPClassUID, sopClassUID);\n return undefined;\n }\n });\n return sopClassUID;\n }\n }, {\n key: \"normalizerForSOPClassUID\",\n value: function normalizerForSOPClassUID(sopClassUID) {\n sopClassUID = sopClassUID.replace(/[^0-9.]/g, \"\"); // TODO: clean all VRs as part of normalizing\n\n var toUID = DicomMetaDictionary.sopClassUIDsByName;\n var sopClassUIDMap = {};\n sopClassUIDMap[toUID.CTImage] = CTImageNormalizer;\n sopClassUIDMap[toUID.ParametricMapStorage] = PMImageNormalizer;\n sopClassUIDMap[toUID.MRImage] = MRImageNormalizer;\n sopClassUIDMap[toUID.EnhancedCTImage] = EnhancedCTImageNormalizer;\n sopClassUIDMap[toUID.LegacyConvertedEnhancedCTImage] = EnhancedCTImageNormalizer;\n sopClassUIDMap[toUID.EnhancedMRImage] = EnhancedMRImageNormalizer;\n sopClassUIDMap[toUID.LegacyConvertedEnhancedMRImage] = EnhancedMRImageNormalizer;\n sopClassUIDMap[toUID.EnhancedUSVolume] = EnhancedUSVolumeNormalizer;\n sopClassUIDMap[toUID.PETImage] = PETImageNormalizer;\n sopClassUIDMap[toUID.EnhancedPETImage] = PETImageNormalizer;\n sopClassUIDMap[toUID.LegacyConvertedEnhancedPETImage] = PETImageNormalizer;\n sopClassUIDMap[toUID.Segmentation] = SEGImageNormalizer;\n sopClassUIDMap[toUID.DeformableSpatialRegistration] = DSRNormalizer;\n return sopClassUIDMap[sopClassUID];\n }\n }, {\n key: \"isMultiframeSOPClassUID\",\n value: function isMultiframeSOPClassUID(sopClassUID) {\n var toUID = DicomMetaDictionary.sopClassUIDsByName;\n var multiframeSOPClasses = [toUID.EnhancedMRImage, toUID.LegacyConvertedEnhancedMRImage, toUID.EnhancedCTImage, toUID.LegacyConvertedEnhancedCTImage, toUID.EnhancedUSVolume, toUID.EnhancedPETImage, toUID.LegacyConvertedEnhancedPETImage, toUID.Segmentation, toUID.ParametricMapStorage];\n return multiframeSOPClasses.indexOf(sopClassUID) !== -1;\n }\n }, {\n key: \"isMultiframeDataset\",\n value: function isMultiframeDataset() {\n var ds = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.dataset;\n var sopClassUID = ds.SOPClassUID.replace(/[^0-9.]/g, \"\"); // TODO: clean all VRs as part of normalizing\n\n return Normalizer.isMultiframeSOPClassUID(sopClassUID);\n }\n }, {\n key: \"normalizeToDataset\",\n value: function normalizeToDataset(datasets) {\n var sopClassUID = Normalizer.consistentSOPClassUIDs(datasets);\n var normalizerClass = Normalizer.normalizerForSOPClassUID(sopClassUID);\n\n if (!normalizerClass) {\n log.error(\"no normalizerClass for \", sopClassUID);\n return undefined;\n }\n\n var normalizer = new normalizerClass(datasets);\n normalizer.normalize();\n return normalizer.dataset;\n }\n }]);\n\n return Normalizer;\n}();\n\nvar ImageNormalizer = /*#__PURE__*/function (_Normalizer) {\n _inherits(ImageNormalizer, _Normalizer);\n\n var _super = _createSuper(ImageNormalizer);\n\n function ImageNormalizer() {\n _classCallCheck(this, ImageNormalizer);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(ImageNormalizer, [{\n key: \"normalize\",\n value: function normalize() {\n this.convertToMultiframe();\n this.normalizeMultiframe();\n }\n }, {\n key: \"convertToMultiframe\",\n value: function convertToMultiframe() {\n if (this.datasets.length === 1 && Normalizer.isMultiframeDataset(this.datasets[0])) {\n // already a multiframe, so just use it\n this.dataset = this.datasets[0];\n return;\n }\n\n this.derivation = new DerivedImage(this.datasets);\n this.dataset = this.derivation.dataset;\n var ds = this.dataset; // create a new multiframe from the source datasets\n // fill in only those elements required to make a valid image\n // for volumetric processing\n\n var referenceDataset = this.datasets[0];\n ds.NumberOfFrames = this.datasets.length; // TODO: develop sets of elements to copy over in loops\n\n ds.SOPClassUID = referenceDataset.SOPClassUID;\n ds.Rows = referenceDataset.Rows;\n ds.Columns = referenceDataset.Columns;\n ds.BitsAllocated = referenceDataset.BitsAllocated;\n ds.PixelRepresentation = referenceDataset.PixelRepresentation;\n ds.RescaleSlope = referenceDataset.RescaleSlope || \"1\";\n ds.RescaleIntercept = referenceDataset.RescaleIntercept || \"0\"; //ds.BurnedInAnnotation = referenceDataset.BurnedInAnnotation || \"YES\";\n // sort\n // https://github.com/pieper/Slicer3/blob/master/Base/GUI/Tcl/LoadVolume.tcl\n // TODO: add spacing checks:\n // https://github.com/Slicer/Slicer/blob/master/Modules/Scripted/DICOMPlugins/DICOMScalarVolumePlugin.py#L228-L250\n // TODO: put this information into the Shared and PerFrame functional groups\n // TODO: sorting of frames could happen in normalizeMultiframe instead, since other\n // multiframe converters may not sort the images\n // TODO: sorting can be seen as part of generation of the Dimension Multiframe Dimension Module\n // and should really be done in an acquisition-specific way (e.g. for DCE)\n\n var referencePosition = referenceDataset.ImagePositionPatient;\n var rowVector = referenceDataset.ImageOrientationPatient.slice(0, 3);\n var columnVector = referenceDataset.ImageOrientationPatient.slice(3, 6);\n var scanAxis = ImageNormalizer.vec3CrossProduct(rowVector, columnVector);\n var distanceDatasetPairs = [];\n this.datasets.forEach(function (dataset) {\n var position = dataset.ImagePositionPatient.slice();\n var positionVector = ImageNormalizer.vec3Subtract(position, referencePosition);\n var distance = ImageNormalizer.vec3Dot(positionVector, scanAxis);\n distanceDatasetPairs.push([distance, dataset]);\n });\n distanceDatasetPairs.sort(function (a, b) {\n return b[0] - a[0];\n }); // assign array buffers\n\n if (ds.BitsAllocated !== 16) {\n log.error(\"Only works with 16 bit data, not \" + String(this.dataset.BitsAllocated));\n }\n\n if (referenceDataset._vrMap && !referenceDataset._vrMap.PixelData) {\n log.warn(\"No vr map given for pixel data, using OW\");\n ds._vrMap = {\n PixelData: \"OW\"\n };\n } else {\n ds._vrMap = {\n PixelData: referenceDataset._vrMap.PixelData\n };\n }\n\n var frameSize = referenceDataset.PixelData.byteLength;\n ds.PixelData = new ArrayBuffer(ds.NumberOfFrames * frameSize);\n var frame = 0;\n distanceDatasetPairs.forEach(function (pair) {\n var dataset = pair[1];\n var pixels = new Uint16Array(dataset.PixelData);\n var frameView = new Uint16Array(ds.PixelData, frame * frameSize, frameSize / 2);\n\n try {\n frameView.set(pixels);\n } catch (e) {\n if (e instanceof RangeError) {\n var message = \"Error inserting pixels in PixelData\\n\" + \"frameSize \".concat(frameSize, \"\\n\") + \"NumberOfFrames \".concat(ds.NumberOfFrames, \"\\n\") + \"pair \".concat(pair, \"\\n\") + \"dataset PixelData size \".concat(dataset.PixelData.length);\n log.error(message);\n }\n }\n\n frame++;\n });\n\n if (ds.NumberOfFrames < 2) {\n // TODO\n log.error(\"Cannot populate shared groups uniquely without multiple frames\");\n }\n\n var _distanceDatasetPairs = _slicedToArray(distanceDatasetPairs[0], 2),\n distance0 = _distanceDatasetPairs[0],\n dataset0 = _distanceDatasetPairs[1];\n\n var distance1 = distanceDatasetPairs[1][0]; //\n // make the functional groups\n //\n // shared\n\n var SpacingBetweenSlices = Math.abs(distance1 - distance0);\n ds.SharedFunctionalGroupsSequence = {\n PlaneOrientationSequence: {\n ImageOrientationPatient: dataset0.ImageOrientationPatient\n },\n PixelMeasuresSequence: {\n PixelSpacing: dataset0.PixelSpacing,\n SpacingBetweenSlices: SpacingBetweenSlices,\n SliceThickness: SpacingBetweenSlices\n }\n };\n ds.ReferencedSeriesSequence = {\n SeriesInstanceUID: dataset0.SeriesInstanceUID,\n ReferencedInstanceSequence: []\n }; // per-frame\n\n ds.PerFrameFunctionalGroupsSequence = []; // copy over each datasets window/level into the per-frame groups\n // and set the referenced series uid\n\n distanceDatasetPairs.forEach(function (pair) {\n var dataset = pair[1];\n ds.PerFrameFunctionalGroupsSequence.push({\n PlanePositionSequence: {\n ImagePositionPatient: dataset.ImagePositionPatient\n },\n FrameVOILUTSequence: {\n WindowCenter: dataset.WindowCenter,\n WindowWidth: dataset.WindowWidth\n }\n });\n ds.ReferencedSeriesSequence.ReferencedInstanceSequence.push({\n ReferencedSOPClassUID: dataset.SOPClassUID,\n ReferencedSOPInstanceUID: dataset.SOPInstanceUID\n });\n });\n var dimensionUID = DicomMetaDictionary.uid();\n this.dataset.DimensionOrganizationSequence = {\n DimensionOrganizationUID: dimensionUID\n };\n this.dataset.DimensionIndexSequence = [{\n DimensionOrganizationUID: dimensionUID,\n DimensionIndexPointer: 2097202,\n FunctionalGroupPointer: 2134291,\n // PlanePositionSequence\n DimensionDescriptionLabel: \"ImagePositionPatient\"\n }];\n }\n }, {\n key: \"normalizeMultiframe\",\n value: function normalizeMultiframe() {\n var ds = this.dataset;\n\n if (!ds.NumberOfFrames) {\n log.error(\"Missing number or frames not supported\");\n return;\n }\n\n if (!ds.PixelRepresentation) {\n // Required tag: guess signed\n ds.PixelRepresentation = 1;\n }\n\n if (!ds.StudyID || ds.StudyID === \"\") {\n // Required tag: fill in if needed\n ds.StudyID = \"No Study ID\";\n }\n\n var validLateralities = [\"R\", \"L\"];\n\n if (validLateralities.indexOf(ds.Laterality) === -1) {\n delete ds.Laterality;\n }\n\n if (!ds.PresentationLUTShape) {\n ds.PresentationLUTShape = \"IDENTITY\";\n }\n\n if (!ds.SharedFunctionalGroupsSequence) {\n log.error(\"Can only process multiframe data with SharedFunctionalGroupsSequence\");\n } // TODO: special case!\n\n\n if (ds.BodyPartExamined === \"PROSTATE\") {\n ds.SharedFunctionalGroupsSequence.FrameAnatomySequence = {\n AnatomicRegionSequence: {\n CodeValue: \"T-9200B\",\n CodingSchemeDesignator: \"SRT\",\n CodeMeaning: \"Prostate\"\n },\n FrameLaterality: \"U\"\n };\n }\n\n var rescaleIntercept = ds.RescaleIntercept || 0;\n var rescaleSlope = ds.RescaleSlope || 1;\n ds.SharedFunctionalGroupsSequence.PixelValueTransformationSequence = {\n RescaleIntercept: rescaleIntercept,\n RescaleSlope: rescaleSlope,\n RescaleType: \"US\"\n };\n var frameNumber = 1;\n this.datasets.forEach(function (dataset) {\n if (ds.NumberOfFrames === 1) ds.PerFrameFunctionalGroupsSequence = [ds.PerFrameFunctionalGroupsSequence];\n ds.PerFrameFunctionalGroupsSequence[frameNumber - 1].FrameContentSequence = {\n FrameAcquisitionDuration: 0,\n StackID: 1,\n InStackPositionNumber: frameNumber,\n DimensionIndexValues: frameNumber\n };\n var frameTime = dataset.AcquisitionDate + dataset.AcquisitionTime;\n\n if (!isNaN(frameTime)) {\n var frameContentSequence = ds.PerFrameFunctionalGroupsSequence[frameNumber - 1].FrameContentSequence;\n frameContentSequence.FrameAcquisitionDateTime = frameTime;\n frameContentSequence.FrameReferenceDateTime = frameTime;\n }\n\n frameNumber++;\n }); //\n // TODO: convert this to shared functional group not top level element\n //\n\n if (ds.WindowCenter && ds.WindowWidth) {\n // if they exist as single values, make them lists for consistency\n if (!Array.isArray(ds.WindowCenter)) {\n ds.WindowCenter = [ds.WindowCenter];\n }\n\n if (!Array.isArray(ds.WindowWidth)) {\n ds.WindowWidth = [ds.WindowWidth];\n }\n }\n\n if (!ds.WindowCenter || !ds.WindowWidth) {\n // if they don't exist, make them empty lists and try to initialize them\n ds.WindowCenter = []; // both must exist and be the same length\n\n ds.WindowWidth = []; // provide a volume-level window/level guess (mean of per-frame)\n\n if (ds.PerFrameFunctionalGroupsSequence) {\n var wcww = {\n center: 0,\n width: 0,\n count: 0\n };\n ds.PerFrameFunctionalGroupsSequence.forEach(function (functionalGroup) {\n if (functionalGroup.FrameVOILUT) {\n var wc = functionalGroup.FrameVOILUTSequence.WindowCenter;\n var ww = functionalGroup.FrameVOILUTSequence.WindowWidth;\n\n if (functionalGroup.FrameVOILUTSequence && wc && ww) {\n if (Array.isArray(wc)) {\n wc = wc[0];\n }\n\n if (Array.isArray(ww)) {\n ww = ww[0];\n }\n\n wcww.center += Number(wc);\n wcww.width += Number(ww);\n wcww.count++;\n }\n }\n });\n\n if (wcww.count > 0) {\n ds.WindowCenter.push(String(wcww.center / wcww.count));\n ds.WindowWidth.push(String(wcww.width / wcww.count));\n }\n }\n } // last gasp, pick an arbitrary default\n\n\n if (ds.WindowCenter.length === 0) {\n ds.WindowCenter = [300];\n }\n\n if (ds.WindowWidth.length === 0) {\n ds.WindowWidth = [500];\n }\n }\n }], [{\n key: \"vec3CrossProduct\",\n value: function vec3CrossProduct(a, b) {\n var ax = a[0],\n ay = a[1],\n az = a[2],\n bx = b[0],\n by = b[1],\n bz = b[2];\n var out = [];\n out[0] = ay * bz - az * by;\n out[1] = az * bx - ax * bz;\n out[2] = ax * by - ay * bx;\n return out;\n }\n }, {\n key: \"vec3Subtract\",\n value: function vec3Subtract(a, b) {\n var out = [];\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n return out;\n }\n }, {\n key: \"vec3Dot\",\n value: function vec3Dot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n }\n }]);\n\n return ImageNormalizer;\n}(Normalizer);\n\nvar MRImageNormalizer = /*#__PURE__*/function (_ImageNormalizer) {\n _inherits(MRImageNormalizer, _ImageNormalizer);\n\n var _super2 = _createSuper(MRImageNormalizer);\n\n function MRImageNormalizer() {\n _classCallCheck(this, MRImageNormalizer);\n\n return _super2.apply(this, arguments);\n }\n\n _createClass(MRImageNormalizer, [{\n key: \"normalize\",\n value: function normalize() {\n _get(_getPrototypeOf(MRImageNormalizer.prototype), \"normalize\", this).call(this); // TODO: make specialization for LegacyConverted vs normal EnhanceMRImage\n //let toUID = DicomMetaDictionary.sopClassUIDsByName;\n\n\n this.dataset.SOPClassUID = \"LegacyConvertedEnhancedMRImage\"; //this.dataset.SOPClassUID = toUID.EnhancedMRImage;\n }\n }, {\n key: \"normalizeMultiframe\",\n value: function normalizeMultiframe() {\n _get(_getPrototypeOf(MRImageNormalizer.prototype), \"normalizeMultiframe\", this).call(this);\n\n var ds = this.dataset;\n\n if (!ds.ImageType || !ds.ImageType.constructor || ds.ImageType.constructor.name != \"Array\" || ds.ImageType.length != 4) {\n ds.ImageType = [\"ORIGINAL\", \"PRIMARY\", \"OTHER\", \"NONE\"];\n }\n\n ds.SharedFunctionalGroupsSequence.MRImageFrameTypeSequence = {\n FrameType: ds.ImageType,\n PixelPresentation: \"MONOCHROME\",\n VolumetricProperties: \"VOLUME\",\n VolumeBasedCalculationTechnique: \"NONE\",\n ComplexImageComponent: \"MAGNITUDE\",\n AcquisitionContrast: \"UNKNOWN\"\n };\n }\n }]);\n\n return MRImageNormalizer;\n}(ImageNormalizer);\n\nvar EnhancedCTImageNormalizer = /*#__PURE__*/function (_ImageNormalizer2) {\n _inherits(EnhancedCTImageNormalizer, _ImageNormalizer2);\n\n var _super3 = _createSuper(EnhancedCTImageNormalizer);\n\n function EnhancedCTImageNormalizer() {\n _classCallCheck(this, EnhancedCTImageNormalizer);\n\n return _super3.apply(this, arguments);\n }\n\n _createClass(EnhancedCTImageNormalizer, [{\n key: \"normalize\",\n value: function normalize() {\n _get(_getPrototypeOf(EnhancedCTImageNormalizer.prototype), \"normalize\", this).call(this);\n }\n }]);\n\n return EnhancedCTImageNormalizer;\n}(ImageNormalizer);\n\nvar EnhancedMRImageNormalizer = /*#__PURE__*/function (_ImageNormalizer3) {\n _inherits(EnhancedMRImageNormalizer, _ImageNormalizer3);\n\n var _super4 = _createSuper(EnhancedMRImageNormalizer);\n\n function EnhancedMRImageNormalizer() {\n _classCallCheck(this, EnhancedMRImageNormalizer);\n\n return _super4.apply(this, arguments);\n }\n\n _createClass(EnhancedMRImageNormalizer, [{\n key: \"normalize\",\n value: function normalize() {\n _get(_getPrototypeOf(EnhancedMRImageNormalizer.prototype), \"normalize\", this).call(this);\n }\n }]);\n\n return EnhancedMRImageNormalizer;\n}(ImageNormalizer);\n\nvar EnhancedUSVolumeNormalizer = /*#__PURE__*/function (_ImageNormalizer4) {\n _inherits(EnhancedUSVolumeNormalizer, _ImageNormalizer4);\n\n var _super5 = _createSuper(EnhancedUSVolumeNormalizer);\n\n function EnhancedUSVolumeNormalizer() {\n _classCallCheck(this, EnhancedUSVolumeNormalizer);\n\n return _super5.apply(this, arguments);\n }\n\n _createClass(EnhancedUSVolumeNormalizer, [{\n key: \"normalize\",\n value: function normalize() {\n _get(_getPrototypeOf(EnhancedUSVolumeNormalizer.prototype), \"normalize\", this).call(this);\n }\n }]);\n\n return EnhancedUSVolumeNormalizer;\n}(ImageNormalizer);\n\nvar CTImageNormalizer = /*#__PURE__*/function (_ImageNormalizer5) {\n _inherits(CTImageNormalizer, _ImageNormalizer5);\n\n var _super6 = _createSuper(CTImageNormalizer);\n\n function CTImageNormalizer() {\n _classCallCheck(this, CTImageNormalizer);\n\n return _super6.apply(this, arguments);\n }\n\n _createClass(CTImageNormalizer, [{\n key: \"normalize\",\n value: function normalize() {\n _get(_getPrototypeOf(CTImageNormalizer.prototype), \"normalize\", this).call(this); // TODO: provide option at export to swap in LegacyConverted UID\n\n\n var toUID = DicomMetaDictionary.sopClassUIDsByName; //this.dataset.SOPClassUID = \"LegacyConvertedEnhancedCTImage\";\n\n this.dataset.SOPClassUID = toUID.EnhancedCTImage;\n }\n }]);\n\n return CTImageNormalizer;\n}(ImageNormalizer);\n\nvar PETImageNormalizer = /*#__PURE__*/function (_ImageNormalizer6) {\n _inherits(PETImageNormalizer, _ImageNormalizer6);\n\n var _super7 = _createSuper(PETImageNormalizer);\n\n function PETImageNormalizer() {\n _classCallCheck(this, PETImageNormalizer);\n\n return _super7.apply(this, arguments);\n }\n\n _createClass(PETImageNormalizer, [{\n key: \"normalize\",\n value: function normalize() {\n _get(_getPrototypeOf(PETImageNormalizer.prototype), \"normalize\", this).call(this); // TODO: provide option at export to swap in LegacyConverted UID\n\n\n var toUID = DicomMetaDictionary.sopClassUIDsByName; //this.dataset.SOPClassUID = \"LegacyConvertedEnhancedPETImage\";\n\n this.dataset.SOPClassUID = toUID.EnhancedPETImage;\n }\n }]);\n\n return PETImageNormalizer;\n}(ImageNormalizer);\n\nvar SEGImageNormalizer = /*#__PURE__*/function (_ImageNormalizer7) {\n _inherits(SEGImageNormalizer, _ImageNormalizer7);\n\n var _super8 = _createSuper(SEGImageNormalizer);\n\n function SEGImageNormalizer() {\n _classCallCheck(this, SEGImageNormalizer);\n\n return _super8.apply(this, arguments);\n }\n\n _createClass(SEGImageNormalizer, [{\n key: \"normalize\",\n value: function normalize() {\n _get(_getPrototypeOf(SEGImageNormalizer.prototype), \"normalize\", this).call(this);\n }\n }]);\n\n return SEGImageNormalizer;\n}(ImageNormalizer);\n\nvar PMImageNormalizer = /*#__PURE__*/function (_ImageNormalizer8) {\n _inherits(PMImageNormalizer, _ImageNormalizer8);\n\n var _super9 = _createSuper(PMImageNormalizer);\n\n function PMImageNormalizer() {\n _classCallCheck(this, PMImageNormalizer);\n\n return _super9.apply(this, arguments);\n }\n\n _createClass(PMImageNormalizer, [{\n key: \"normalize\",\n value: function normalize() {\n _get(_getPrototypeOf(PMImageNormalizer.prototype), \"normalize\", this).call(this);\n\n var ds = this.datasets[0];\n\n if (ds.BitsAllocated !== 32) {\n log.error(\"Only works with 32 bit data, not \" + String(ds.BitsAllocated));\n }\n }\n }]);\n\n return PMImageNormalizer;\n}(ImageNormalizer);\n\nvar DSRNormalizer = /*#__PURE__*/function (_Normalizer2) {\n _inherits(DSRNormalizer, _Normalizer2);\n\n var _super10 = _createSuper(DSRNormalizer);\n\n function DSRNormalizer() {\n _classCallCheck(this, DSRNormalizer);\n\n return _super10.apply(this, arguments);\n }\n\n _createClass(DSRNormalizer, [{\n key: \"normalize\",\n value: function normalize() {\n this.dataset = this.datasets[0]; // only one dataset per series and for now we assume it is normalized\n }\n }]);\n\n return DSRNormalizer;\n}(Normalizer);\n\nvar Segmentation = /*#__PURE__*/function (_DerivedPixels) {\n _inherits(Segmentation, _DerivedPixels);\n\n var _super = _createSuper(Segmentation);\n\n function Segmentation(datasets) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n includeSliceSpacing: true\n };\n\n _classCallCheck(this, Segmentation);\n\n return _super.call(this, datasets, options);\n }\n\n _createClass(Segmentation, [{\n key: \"derive\",\n value: function derive() {\n _get(_getPrototypeOf(Segmentation.prototype), \"derive\", this).call(this);\n\n this.assignToDataset({\n SOPClassUID: DicomMetaDictionary.sopClassUIDsByName.Segmentation,\n Modality: \"SEG\",\n SamplesPerPixel: \"1\",\n PhotometricInterpretation: \"MONOCHROME2\",\n BitsAllocated: \"1\",\n BitsStored: \"1\",\n HighBit: \"0\",\n PixelRepresentation: \"0\",\n LossyImageCompression: \"00\",\n SegmentationType: \"BINARY\",\n ContentLabel: \"SEGMENTATION\"\n });\n var dimensionUID = DicomMetaDictionary.uid();\n this.dataset.DimensionOrganizationSequence = {\n DimensionOrganizationUID: dimensionUID\n };\n this.dataset.DimensionIndexSequence = [{\n DimensionOrganizationUID: dimensionUID,\n DimensionIndexPointer: 6422539,\n FunctionalGroupPointer: 6422538,\n // SegmentIdentificationSequence\n DimensionDescriptionLabel: \"ReferencedSegmentNumber\"\n }, {\n DimensionOrganizationUID: dimensionUID,\n DimensionIndexPointer: 2097202,\n FunctionalGroupPointer: 2134291,\n // PlanePositionSequence\n DimensionDescriptionLabel: \"ImagePositionPatient\"\n }];\n this.dataset.SegmentSequence = []; // TODO: check logic here.\n // If the referenced dataset itself references a series, then copy.\n // Otherwise, reference the dataset itself.\n // This should allow Slicer and others to get the correct original\n // images when loading Legacy Converted Images, but it's a workaround\n // that really doesn't belong here.\n\n if (this.referencedDataset.ReferencedSeriesSequence) {\n this.dataset.ReferencedSeriesSequence = DerivedDataset.copyDataset(this.referencedDataset.ReferencedSeriesSequence);\n } else {\n var ReferencedInstanceSequence = [];\n\n for (var i = 0; i < this.referencedDatasets.length; i++) {\n ReferencedInstanceSequence.push({\n ReferencedSOPClassUID: this.referencedDatasets[i].SOPClassUID,\n ReferencedSOPInstanceUID: this.referencedDatasets[i].SOPInstanceUID\n });\n }\n\n this.dataset.ReferencedSeriesSequence = {\n SeriesInstanceUID: this.referencedDataset.SeriesInstanceUID,\n StudyInstanceUID: this.referencedDataset.StudyInstanceUID,\n ReferencedInstanceSequence: ReferencedInstanceSequence\n };\n }\n\n if (!this.options.includeSliceSpacing) {\n // per dciodvfy this should not be included, but dcmqi/Slicer requires it\n delete this.dataset.SharedFunctionalGroupsSequence.PixelMeasuresSequence.SpacingBetweenSlices;\n }\n\n if (this.dataset.SharedFunctionalGroupsSequence.PixelValueTransformationSequence) {\n // If derived from a CT, this shouldn't be left in the SEG.\n delete this.dataset.SharedFunctionalGroupsSequence.PixelValueTransformationSequence;\n } // The pixelData array needs to be defined once you know how many frames you'll have.\n\n\n this.dataset.PixelData = undefined;\n this.dataset.NumberOfFrames = 0;\n this.dataset.PerFrameFunctionalGroupsSequence = [];\n }\n /**\n * setNumberOfFrames - Sets the number of frames of the segmentation object\n * and allocates (non-bitpacked) memory for the PixelData for constuction.\n *\n * @param {type} NumberOfFrames The number of segmentation frames.\n */\n\n }, {\n key: \"setNumberOfFrames\",\n value: function setNumberOfFrames(NumberOfFrames) {\n var dataset = this.dataset;\n dataset.NumberOfFrames = NumberOfFrames;\n dataset.PixelData = new ArrayBuffer(dataset.Rows * dataset.Columns * NumberOfFrames);\n }\n /**\n * bitPackPixelData - Bitpacks the pixeldata, should be called after all\n * segments are addded.\n *\n * @returns {type} description\n */\n\n }, {\n key: \"bitPackPixelData\",\n value: function bitPackPixelData() {\n if (this.isBitpacked) {\n console.warn(\"This.bitPackPixelData has already been called, it should only be called once, when all frames have been added. Exiting.\");\n }\n\n var dataset = this.dataset;\n var unpackedPixelData = dataset.PixelData;\n var uInt8ViewUnpackedPixelData = new Uint8Array(unpackedPixelData);\n var bitPackedPixelData = BitArray.pack(uInt8ViewUnpackedPixelData);\n dataset.PixelData = bitPackedPixelData.buffer;\n this.isBitpacked = true;\n }\n /**\n * addSegmentFromLabelmap - Adds a segment to the dataset,\n * where the labelmaps are a set of 2D labelmaps, from which to extract the binary maps.\n *\n * @param {type} Segment The segment metadata.\n * @param {Uint8Array[]} labelmaps labelmap arrays for each index of referencedFrameNumbers.\n * @param {number} segmentIndexInLabelmap The segment index to extract from the labelmap\n * (might be different to the segment metadata depending on implementation).\n * @param {number[]} referencedFrameNumbers The frames that the\n * segmentation references.\n *\n */\n\n }, {\n key: \"addSegmentFromLabelmap\",\n value: function addSegmentFromLabelmap(Segment, labelmaps, segmentIndexInLabelmap, referencedFrameNumbers) {\n if (this.dataset.NumberOfFrames === 0) {\n throw new Error(\"Must set the total number of frames via setNumberOfFrames() before adding segments to the segmentation.\");\n }\n\n this._addSegmentPixelDataFromLabelmaps(labelmaps, segmentIndexInLabelmap);\n\n var ReferencedSegmentNumber = this._addSegmentMetadata(Segment);\n\n this._addPerFrameFunctionalGroups(ReferencedSegmentNumber, referencedFrameNumbers);\n }\n }, {\n key: \"_addSegmentPixelDataFromLabelmaps\",\n value: function _addSegmentPixelDataFromLabelmaps(labelmaps, segmentIndex) {\n var dataset = this.dataset;\n var existingFrames = dataset.PerFrameFunctionalGroupsSequence.length;\n var sliceLength = dataset.Rows * dataset.Columns;\n var byteOffset = existingFrames * sliceLength;\n var pixelDataUInt8View = new Uint8Array(dataset.PixelData, byteOffset, labelmaps.length * sliceLength);\n\n var occupiedValue = this._getOccupiedValue();\n\n for (var l = 0; l < labelmaps.length; l++) {\n var labelmap = labelmaps[l];\n\n for (var i = 0; i < labelmap.length; i++) {\n if (labelmap[i] === segmentIndex) {\n pixelDataUInt8View[l * sliceLength + i] = occupiedValue;\n }\n }\n }\n }\n }, {\n key: \"_getOccupiedValue\",\n value: function _getOccupiedValue() {\n if (this.dataset.SegmentationType === \"FRACTIONAL\") {\n return 255;\n }\n\n return 1;\n }\n /**\n * addSegment - Adds a segment to the dataset.\n *\n * @param {type} Segment The segment metadata.\n * @param {Uint8Array} pixelData The pixelData array containing all frames\n * of the segmentation.\n * @param {Number[]} referencedFrameNumbers The frames that the\n * segmentation references.\n *\n */\n\n }, {\n key: \"addSegment\",\n value: function addSegment(Segment, pixelData, referencedFrameNumbers) {\n if (this.dataset.NumberOfFrames === 0) {\n throw new Error(\"Must set the total number of frames via setNumberOfFrames() before adding segments to the segmentation.\");\n }\n\n this._addSegmentPixelData(pixelData);\n\n var ReferencedSegmentNumber = this._addSegmentMetadata(Segment);\n\n this._addPerFrameFunctionalGroups(ReferencedSegmentNumber, referencedFrameNumbers);\n }\n }, {\n key: \"_addSegmentPixelData\",\n value: function _addSegmentPixelData(pixelData) {\n var dataset = this.dataset;\n var existingFrames = dataset.PerFrameFunctionalGroupsSequence.length;\n var sliceLength = dataset.Rows * dataset.Columns;\n var byteOffset = existingFrames * sliceLength;\n var pixelDataUInt8View = new Uint8Array(dataset.PixelData, byteOffset, pixelData.length);\n\n for (var i = 0; i < pixelData.length; i++) {\n pixelDataUInt8View[i] = pixelData[i];\n }\n }\n }, {\n key: \"_addPerFrameFunctionalGroups\",\n value: function _addPerFrameFunctionalGroups(ReferencedSegmentNumber, referencedFrameNumbers) {\n var PerFrameFunctionalGroupsSequence = this.dataset.PerFrameFunctionalGroupsSequence;\n var ReferencedSeriesSequence = this.referencedDataset.ReferencedSeriesSequence;\n\n for (var i = 0; i < referencedFrameNumbers.length; i++) {\n var frameNumber = referencedFrameNumbers[i];\n var perFrameFunctionalGroups = {};\n perFrameFunctionalGroups.PlanePositionSequence = DerivedDataset.copyDataset(this.referencedDataset.PerFrameFunctionalGroupsSequence[frameNumber - 1].PlanePositionSequence); // If the PlaneOrientationSequence is not in the SharedFunctionalGroupsSequence,\n // extract it from the PerFrameFunctionalGroupsSequence.\n\n if (!this.dataset.SharedFunctionalGroupsSequence.PlaneOrientationSequence) {\n perFrameFunctionalGroups.PlaneOrientationSequence = DerivedDataset.copyDataset(this.referencedDataset.PerFrameFunctionalGroupsSequence[frameNumber - 1].PlaneOrientationSequence);\n }\n\n perFrameFunctionalGroups.FrameContentSequence = {\n DimensionIndexValues: [ReferencedSegmentNumber, frameNumber]\n };\n perFrameFunctionalGroups.SegmentIdentificationSequence = {\n ReferencedSegmentNumber: ReferencedSegmentNumber\n };\n var ReferencedSOPClassUID = void 0;\n var ReferencedSOPInstanceUID = void 0;\n var ReferencedFrameNumber = void 0;\n\n if (ReferencedSeriesSequence) {\n var referencedInstanceSequenceI = ReferencedSeriesSequence.ReferencedInstanceSequence[frameNumber - 1];\n ReferencedSOPClassUID = referencedInstanceSequenceI.ReferencedSOPClassUID;\n ReferencedSOPInstanceUID = referencedInstanceSequenceI.ReferencedSOPInstanceUID;\n\n if (Normalizer.isMultiframeSOPClassUID(ReferencedSOPClassUID)) {\n ReferencedFrameNumber = frameNumber;\n }\n } else {\n ReferencedSOPClassUID = this.referencedDataset.SOPClassUID;\n ReferencedSOPInstanceUID = this.referencedDataset.SOPInstanceUID;\n ReferencedFrameNumber = frameNumber;\n }\n\n if (ReferencedFrameNumber) {\n perFrameFunctionalGroups.DerivationImageSequence = {\n SourceImageSequence: {\n ReferencedSOPClassUID: ReferencedSOPClassUID,\n ReferencedSOPInstanceUID: ReferencedSOPInstanceUID,\n ReferencedFrameNumber: ReferencedFrameNumber,\n PurposeOfReferenceCodeSequence: {\n CodeValue: \"121322\",\n CodingSchemeDesignator: \"DCM\",\n CodeMeaning: \"Source image for image processing operation\"\n }\n },\n DerivationCodeSequence: {\n CodeValue: \"113076\",\n CodingSchemeDesignator: \"DCM\",\n CodeMeaning: \"Segmentation\"\n }\n };\n } else {\n perFrameFunctionalGroups.DerivationImageSequence = {\n SourceImageSequence: {\n ReferencedSOPClassUID: ReferencedSOPClassUID,\n ReferencedSOPInstanceUID: ReferencedSOPInstanceUID,\n PurposeOfReferenceCodeSequence: {\n CodeValue: \"121322\",\n CodingSchemeDesignator: \"DCM\",\n CodeMeaning: \"Source image for image processing operation\"\n }\n },\n DerivationCodeSequence: {\n CodeValue: \"113076\",\n CodingSchemeDesignator: \"DCM\",\n CodeMeaning: \"Segmentation\"\n }\n };\n }\n\n PerFrameFunctionalGroupsSequence.push(perFrameFunctionalGroups);\n }\n }\n }, {\n key: \"_addSegmentMetadata\",\n value: function _addSegmentMetadata(Segment) {\n if (!Segment.SegmentLabel || !Segment.SegmentedPropertyCategoryCodeSequence || !Segment.SegmentedPropertyTypeCodeSequence || !Segment.SegmentAlgorithmType) {\n throw new Error(\"Segment does not contain all the required fields.\");\n } // Capitalise the SegmentAlgorithmType if it happens to be given in\n // Lower/mixed case.\n\n\n Segment.SegmentAlgorithmType = Segment.SegmentAlgorithmType.toUpperCase(); // Check SegmentAlgorithmType and SegmentAlgorithmName if necessary.\n\n switch (Segment.SegmentAlgorithmType) {\n case \"AUTOMATIC\":\n case \"SEMIAUTOMATIC\":\n if (!Segment.SegmentAlgorithmName) {\n throw new Error(\"If the SegmentAlgorithmType is SEMIAUTOMATIC or AUTOMATIC,\\n SegmentAlgorithmName must be provided\");\n }\n\n break;\n\n case \"MANUAL\":\n break;\n\n default:\n throw new Error(\"SegmentAlgorithmType \".concat(Segment.SegmentAlgorithmType, \" invalid.\"));\n } // Deep copy, so we don't change the segment index stored in cornerstoneTools.\n\n\n var SegmentSequence = this.dataset.SegmentSequence;\n var SegmentAlgorithmType = Segment.SegmentAlgorithmType;\n var reNumberedSegmentCopy = {\n SegmentedPropertyCategoryCodeSequence: Segment.SegmentedPropertyCategoryCodeSequence,\n SegmentNumber: (SegmentSequence.length + 1).toString(),\n SegmentLabel: Segment.SegmentLabel,\n SegmentAlgorithmType: SegmentAlgorithmType,\n RecommendedDisplayCIELabValue: Segment.RecommendedDisplayCIELabValue,\n SegmentedPropertyTypeCodeSequence: Segment.SegmentedPropertyTypeCodeSequence\n };\n\n if (SegmentAlgorithmType === \"AUTOMATIC\" || SegmentAlgorithmType === \"SEMIAUTOMATIC\") {\n reNumberedSegmentCopy.SegmentAlgorithmName = Segment.SegmentAlgorithmName;\n }\n\n SegmentSequence.push(reNumberedSegmentCopy);\n return reNumberedSegmentCopy.SegmentNumber;\n }\n }]);\n\n return Segmentation;\n}(DerivedPixels);\n\nvar ParametricMap = /*#__PURE__*/function (_DerivedDataset) {\n _inherits(ParametricMap, _DerivedDataset);\n\n var _super = _createSuper(ParametricMap);\n\n function ParametricMap(datasets) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, ParametricMap);\n\n return _super.call(this, datasets, options);\n } // this assumes a normalized multiframe input and will create\n // a multiframe derived image\n\n\n _createClass(ParametricMap, [{\n key: \"derive\",\n value: function derive() {\n _get(_getPrototypeOf(ParametricMap.prototype), \"derive\", this).call(this);\n\n this.assignToDataset({// TODO: ???\n });\n this.assignFromReference([]);\n }\n }]);\n\n return ParametricMap;\n}(DerivedDataset);\n\nvar StructuredReport = /*#__PURE__*/function (_DerivedDataset) {\n _inherits(StructuredReport, _DerivedDataset);\n\n var _super = _createSuper(StructuredReport);\n\n function StructuredReport(datasets) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, StructuredReport);\n\n return _super.call(this, datasets, options);\n } // this assumes a normalized multiframe input and will create\n // a multiframe derived image\n\n\n _createClass(StructuredReport, [{\n key: \"derive\",\n value: function derive() {\n _get(_getPrototypeOf(StructuredReport.prototype), \"derive\", this).call(this);\n\n this.assignToDataset({\n SOPClassUID: DicomMetaDictionary.sopClassUIDsByName.EnhancedSR,\n Modality: \"SR\",\n ValueType: \"CONTAINER\"\n });\n this.assignFromReference([]);\n }\n }]);\n\n return StructuredReport;\n}(DerivedDataset);\n\nvar TID1500MeasurementReport = /*#__PURE__*/function () {\n function TID1500MeasurementReport(TIDIncludeGroups) {\n _classCallCheck(this, TID1500MeasurementReport);\n\n this.TIDIncludeGroups = TIDIncludeGroups;\n var ImageLibraryContentSequence = [];\n var CurrentRequestedProcedureEvidenceSequence = [];\n this.ImageLibraryContentSequence = ImageLibraryContentSequence;\n this.CurrentRequestedProcedureEvidenceSequence = CurrentRequestedProcedureEvidenceSequence;\n this.PersonObserverName = {\n RelationshipType: \"HAS OBS CONTEXT\",\n ValueType: \"PNAME\",\n ConceptNameCodeSequence: {\n CodeValue: \"121008\",\n CodingSchemeDesignator: \"DCM\",\n CodeMeaning: \"Person Observer Name\"\n },\n PersonName: \"unknown^unknown\"\n };\n this.tid1500 = {\n ConceptNameCodeSequence: {\n CodeValue: \"126000\",\n CodingSchemeDesignator: \"DCM\",\n CodeMeaning: \"Imaging Measurement Report\"\n },\n ContinuityOfContent: \"SEPARATE\",\n PerformedProcedureCodeSequence: [],\n CompletionFlag: \"COMPLETE\",\n VerificationFlag: \"UNVERIFIED\",\n ReferencedPerformedProcedureStepSequence: [],\n InstanceNumber: 1,\n CurrentRequestedProcedureEvidenceSequence: CurrentRequestedProcedureEvidenceSequence,\n CodingSchemeIdentificationSequence: {\n CodingSchemeDesignator: \"99dcmjs\",\n CodingSchemeName: \"Codes used for dcmjs\",\n CodingSchemeVersion: \"0\",\n CodingSchemeResponsibleOrganization: \"https://github.com/dcmjs-org/dcmjs\"\n },\n ContentTemplateSequence: {\n MappingResource: \"DCMR\",\n TemplateIdentifier: \"1500\"\n },\n ContentSequence: [{\n RelationshipType: \"HAS CONCEPT MOD\",\n ValueType: \"CODE\",\n ConceptNameCodeSequence: addAccessors({\n CodeValue: \"121049\",\n CodingSchemeDesignator: \"DCM\",\n CodeMeaning: \"Language of Content Item and Descendants\"\n }),\n ConceptCodeSequence: addAccessors({\n CodeValue: \"eng\",\n CodingSchemeDesignator: \"RFC5646\",\n CodeMeaning: \"English\"\n }),\n ContentSequence: addAccessors({\n RelationshipType: \"HAS CONCEPT MOD\",\n ValueType: \"CODE\",\n ConceptNameCodeSequence: addAccessors({\n CodeValue: \"121046\",\n CodingSchemeDesignator: \"DCM\",\n CodeMeaning: \"Country of Language\"\n }),\n ConceptCodeSequence: addAccessors({\n CodeValue: \"US\",\n CodingSchemeDesignator: \"ISO3166_1\",\n CodeMeaning: \"United States\"\n })\n })\n }, this.PersonObserverName, {\n RelationshipType: \"HAS CONCEPT MOD\",\n ValueType: \"CODE\",\n ConceptNameCodeSequence: addAccessors({\n CodeValue: \"121058\",\n CodingSchemeDesignator: \"DCM\",\n CodeMeaning: \"Procedure reported\"\n }),\n ConceptCodeSequence: addAccessors({\n CodeValue: \"1\",\n CodingSchemeDesignator: \"99dcmjs\",\n CodeMeaning: \"Unknown procedure\"\n })\n }, {\n RelationshipType: \"CONTAINS\",\n ValueType: \"CONTAINER\",\n ConceptNameCodeSequence: {\n CodeValue: \"111028\",\n CodingSchemeDesignator: \"DCM\",\n CodeMeaning: \"Image Library\"\n },\n ContinuityOfContent: \"SEPARATE\",\n ContentSequence: {\n RelationshipType: \"CONTAINS\",\n ValueType: \"CONTAINER\",\n ConceptNameCodeSequence: {\n CodeValue: \"126200\",\n CodingSchemeDesignator: \"DCM\",\n CodeMeaning: \"Image Library Group\"\n },\n ContinuityOfContent: \"SEPARATE\",\n ContentSequence: ImageLibraryContentSequence\n }\n }]\n };\n }\n\n _createClass(TID1500MeasurementReport, [{\n key: \"validate\",\n value: function validate() {}\n }, {\n key: \"contentItem\",\n value: function contentItem(derivationSourceDatasetOrDatasets) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (options.PersonName) {\n this.PersonObserverName.PersonName = options.PersonName;\n } // Note this is left in for compatibility with the Cornerstone Legacy adapter which only supports one series for now.\n\n\n var derivationSourceDatasets = Array.isArray(derivationSourceDatasetOrDatasets) ? derivationSourceDatasetOrDatasets : [derivationSourceDatasetOrDatasets]; // Add the Measurement Groups to the Measurement Report\n\n this.addTID1501MeasurementGroups(derivationSourceDatasets, options);\n return this.tid1500;\n }\n }, {\n key: \"addTID1501MeasurementGroups\",\n value: function addTID1501MeasurementGroups(derivationSourceDatasets) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var CurrentRequestedProcedureEvidenceSequence = this.CurrentRequestedProcedureEvidenceSequence,\n ImageLibraryContentSequence = this.ImageLibraryContentSequence;\n var sopInstanceUIDsToSeriesInstanceUIDMap = options.sopInstanceUIDsToSeriesInstanceUIDMap;\n\n if (derivationSourceDatasets.length > 1 && sopInstanceUIDsToSeriesInstanceUIDMap === undefined) {\n throw new Error(\"addTID1501MeasurementGroups provided with \".concat(derivationSourceDatasets.length, \" derivationSourceDatasets, with no sopInstanceUIDsToSeriesInstanceUIDMap in options.\"));\n }\n\n var TID1501MeasurementGroups = this.TIDIncludeGroups.TID1501MeasurementGroups;\n\n if (!TID1501MeasurementGroups) {\n return;\n }\n\n var ContentSequence = [];\n TID1501MeasurementGroups.forEach(function (child) {\n ContentSequence = ContentSequence.concat(child.contentItem());\n });\n var parsedSOPInstances = []; // For each measurement that is referenced, add a link to the\n // Image Library Group and the Current Requested Procedure Evidence\n // with the proper ReferencedSOPSequence\n\n TID1501MeasurementGroups.forEach(function (measurementGroup) {\n measurementGroup.TID300Measurements.forEach(function (measurement) {\n var ReferencedSOPInstanceUID = measurement.ReferencedSOPSequence.ReferencedSOPInstanceUID;\n\n if (!parsedSOPInstances.includes(ReferencedSOPInstanceUID)) {\n ImageLibraryContentSequence.push({\n RelationshipType: \"CONTAINS\",\n ValueType: \"IMAGE\",\n ReferencedSOPSequence: measurement.ReferencedSOPSequence\n });\n var derivationSourceDataset;\n\n if (derivationSourceDatasets.length === 1) {\n // If there is only one derivationSourceDataset, use it.\n derivationSourceDataset = derivationSourceDatasets[0];\n } else {\n var SeriesInstanceUID = sopInstanceUIDsToSeriesInstanceUIDMap[ReferencedSOPInstanceUID];\n derivationSourceDataset = derivationSourceDatasets.find(function (dsd) {\n return dsd.SeriesInstanceUID === SeriesInstanceUID;\n });\n }\n /**\n * Note: the VM of the ReferencedSeriesSequence and ReferencedSOPSequence are 1, so\n * it is correct that we have a full `CurrentRequestedProcedureEvidenceSequence`\n * item per `SOPInstanceUID`.\n */\n\n\n CurrentRequestedProcedureEvidenceSequence.push({\n StudyInstanceUID: derivationSourceDataset.StudyInstanceUID,\n ReferencedSeriesSequence: {\n SeriesInstanceUID: derivationSourceDataset.SeriesInstanceUID,\n ReferencedSOPSequence: measurement.ReferencedSOPSequence\n }\n });\n parsedSOPInstances.push(ReferencedSOPInstanceUID);\n }\n });\n });\n var ImagingMeasurments = {\n RelationshipType: \"CONTAINS\",\n ValueType: \"CONTAINER\",\n ConceptNameCodeSequence: {\n CodeValue: \"126010\",\n CodingSchemeDesignator: \"DCM\",\n CodeMeaning: \"Imaging Measurements\" // TODO: would be nice to abstract the code sequences (in a dictionary? a service?)\n\n },\n ContinuityOfContent: \"SEPARATE\",\n ContentSequence: ContentSequence\n };\n this.tid1500.ContentSequence.push(ImagingMeasurments);\n }\n }]);\n\n return TID1500MeasurementReport;\n}();\n\nvar TID1501MeasurementGroup = /*#__PURE__*/function () {\n function TID1501MeasurementGroup(TID300Measurements) {\n _classCallCheck(this, TID1501MeasurementGroup);\n\n this.TID300Measurements = TID300Measurements;\n }\n\n _createClass(TID1501MeasurementGroup, [{\n key: \"contentItem\",\n value: function contentItem() {\n var _this = this;\n\n var TID300Measurements = this.TID300Measurements; // TODO: Is there nothing else in this group?\n\n var measurementGroups = [];\n TID300Measurements.forEach(function (TID300Measurement) {\n measurementGroups.push(_this.getMeasurementGroup(TID300Measurement.contentItem()));\n });\n return measurementGroups;\n }\n }, {\n key: \"getMeasurementGroup\",\n value: function getMeasurementGroup(contentSequenceEntries) {\n return {\n RelationshipType: \"CONTAINS\",\n ValueType: \"CONTAINER\",\n ConceptNameCodeSequence: {\n CodeValue: \"125007\",\n CodingSchemeDesignator: \"DCM\",\n CodeMeaning: \"Measurement Group\"\n },\n ContinuityOfContent: \"SEPARATE\",\n ContentSequence: _toConsumableArray(contentSequenceEntries)\n };\n }\n }]);\n\n return TID1501MeasurementGroup;\n}();\n\nvar toArray = function toArray(x) {\n return Array.isArray(x) ? x : [x];\n};\n\nvar codeMeaningEquals = function codeMeaningEquals(codeMeaningName) {\n return function (contentItem) {\n return contentItem.ConceptNameCodeSequence.CodeMeaning === codeMeaningName;\n };\n};\n\nvar graphicTypeEquals = function graphicTypeEquals(graphicType) {\n return function (contentItem) {\n return contentItem && contentItem.GraphicType === graphicType;\n };\n};\n\nvar FINDING = {\n CodingSchemeDesignator: \"DCM\",\n CodeValue: \"121071\"\n};\nvar FINDING_SITE = {\n CodingSchemeDesignator: \"SCT\",\n CodeValue: \"363698007\"\n};\nvar FINDING_SITE_OLD = {\n CodingSchemeDesignator: \"SRT\",\n CodeValue: \"G-C0E3\"\n};\n\nvar codeValueMatch = function codeValueMatch(group, code, oldCode) {\n var ConceptNameCodeSequence = group.ConceptNameCodeSequence;\n if (!ConceptNameCodeSequence) return;\n var CodingSchemeDesignator = ConceptNameCodeSequence.CodingSchemeDesignator,\n CodeValue = ConceptNameCodeSequence.CodeValue;\n return CodingSchemeDesignator == code.CodingSchemeDesignator && CodeValue == code.CodeValue || oldCode && CodingSchemeDesignator == oldCode.CodingSchemeDesignator && CodeValue == oldCode.CodeValue;\n};\n\nfunction getTID300ContentItem(tool, toolType, ReferencedSOPSequence, toolClass) {\n var args = toolClass.getTID300RepresentationArguments(tool);\n args.ReferencedSOPSequence = ReferencedSOPSequence;\n var TID300Measurement = new toolClass.TID300Representation(args);\n return TID300Measurement;\n}\n\nfunction getMeasurementGroup(toolType, toolData, ReferencedSOPSequence) {\n var toolTypeData = toolData[toolType];\n var toolClass = MeasurementReport.CORNERSTONE_TOOL_CLASSES_BY_TOOL_TYPE[toolType];\n\n if (!toolTypeData || !toolTypeData.data || !toolTypeData.data.length || !toolClass) {\n return;\n } // Loop through the array of tool instances\n // for this tool\n\n\n var Measurements = toolTypeData.data.map(function (tool) {\n return getTID300ContentItem(tool, toolType, ReferencedSOPSequence, toolClass);\n });\n return new TID1501MeasurementGroup(Measurements);\n}\n\nvar MeasurementReport = /*#__PURE__*/function () {\n function MeasurementReport() {\n _classCallCheck(this, MeasurementReport);\n }\n\n _createClass(MeasurementReport, null, [{\n key: \"getSetupMeasurementData\",\n value: function getSetupMeasurementData(MeasurementGroup) {\n var ContentSequence = MeasurementGroup.ContentSequence;\n var contentSequenceArr = toArray(ContentSequence);\n var findingGroup = contentSequenceArr.find(function (group) {\n return codeValueMatch(group, FINDING);\n });\n var findingSiteGroups = contentSequenceArr.filter(function (group) {\n return codeValueMatch(group, FINDING_SITE, FINDING_SITE_OLD);\n }) || [];\n var NUMGroup = contentSequenceArr.find(function (group) {\n return group.ValueType === \"NUM\";\n });\n var SCOORDGroup = toArray(NUMGroup.ContentSequence).find(function (group) {\n return group.ValueType === \"SCOORD\";\n });\n var ReferencedSOPSequence = SCOORDGroup.ContentSequence.ReferencedSOPSequence;\n var ReferencedSOPInstanceUID = ReferencedSOPSequence.ReferencedSOPInstanceUID,\n ReferencedFrameNumber = ReferencedSOPSequence.ReferencedFrameNumber;\n var defaultState = {\n sopInstanceUid: ReferencedSOPInstanceUID,\n frameIndex: ReferencedFrameNumber || 1,\n complete: true,\n finding: findingGroup ? addAccessors(findingGroup.ConceptCodeSequence) : undefined,\n findingSites: findingSiteGroups.map(function (fsg) {\n return addAccessors(fsg.ConceptCodeSequence);\n })\n };\n\n if (defaultState.finding) {\n defaultState.description = defaultState.finding.CodeMeaning;\n }\n\n var findingSite = defaultState.findingSites && defaultState.findingSites[0];\n\n if (findingSite) {\n defaultState.location = findingSite[0] && findingSite[0].CodeMeaning || findingSite.CodeMeaning;\n }\n\n return {\n defaultState: defaultState,\n findingGroup: findingGroup,\n findingSiteGroups: findingSiteGroups,\n NUMGroup: NUMGroup,\n SCOORDGroup: SCOORDGroup,\n ReferencedSOPSequence: ReferencedSOPSequence,\n ReferencedSOPInstanceUID: ReferencedSOPInstanceUID,\n ReferencedFrameNumber: ReferencedFrameNumber\n };\n }\n }, {\n key: \"generateReport\",\n value: function generateReport(toolState, metadataProvider, options) {\n // ToolState for array of imageIDs to a Report\n // Assume Cornerstone metadata provider has access to Study / Series / Sop Instance UID\n var allMeasurementGroups = [];\n var firstImageId = Object.keys(toolState)[0];\n\n if (!firstImageId) {\n throw new Error(\"No measurements provided.\");\n }\n /* Patient ID\n Warning - Missing attribute or value that would be needed to build DICOMDIR - Patient ID\n Warning - Missing attribute or value that would be needed to build DICOMDIR - Study Date\n Warning - Missing attribute or value that would be needed to build DICOMDIR - Study Time\n Warning - Missing attribute or value that would be needed to build DICOMDIR - Study ID\n */\n\n\n var generalSeriesModule = metadataProvider.get(\"generalSeriesModule\", firstImageId); //const sopCommonModule = metadataProvider.get('sopCommonModule', firstImageId);\n // NOTE: We are getting the Series and Study UIDs from the first imageId of the toolState\n // which means that if the toolState is for multiple series, the report will have the incorrect\n // SeriesInstanceUIDs\n\n var studyInstanceUID = generalSeriesModule.studyInstanceUID,\n seriesInstanceUID = generalSeriesModule.seriesInstanceUID; // Loop through each image in the toolData\n\n Object.keys(toolState).forEach(function (imageId) {\n var sopCommonModule = metadataProvider.get(\"sopCommonModule\", imageId);\n var frameNumber = metadataProvider.get(\"frameNumber\", imageId);\n var toolData = toolState[imageId];\n var toolTypes = Object.keys(toolData);\n var ReferencedSOPSequence = {\n ReferencedSOPClassUID: sopCommonModule.sopClassUID,\n ReferencedSOPInstanceUID: sopCommonModule.sopInstanceUID\n };\n\n if (Normalizer.isMultiframeSOPClassUID(sopCommonModule.sopClassUID)) {\n ReferencedSOPSequence.ReferencedFrameNumber = frameNumber;\n } // Loop through each tool type for the image\n\n\n var measurementGroups = [];\n toolTypes.forEach(function (toolType) {\n var group = getMeasurementGroup(toolType, toolData, ReferencedSOPSequence);\n\n if (group) {\n measurementGroups.push(group);\n }\n });\n allMeasurementGroups = allMeasurementGroups.concat(measurementGroups);\n });\n\n var _MeasurementReport = new TID1500MeasurementReport({\n TID1501MeasurementGroups: allMeasurementGroups\n }, options); // TODO: what is the correct metaheader\n // http://dicom.nema.org/medical/Dicom/current/output/chtml/part10/chapter_7.html\n // TODO: move meta creation to happen in derivations.js\n\n\n var fileMetaInformationVersionArray = new Uint8Array(2);\n fileMetaInformationVersionArray[1] = 1;\n var derivationSourceDataset = {\n StudyInstanceUID: studyInstanceUID,\n SeriesInstanceUID: seriesInstanceUID //SOPInstanceUID: sopInstanceUID, // TODO: Necessary?\n //SOPClassUID: sopClassUID,\n\n };\n var _meta = {\n FileMetaInformationVersion: {\n Value: [fileMetaInformationVersionArray.buffer],\n vr: \"OB\"\n },\n //MediaStorageSOPClassUID\n //MediaStorageSOPInstanceUID: sopCommonModule.sopInstanceUID,\n TransferSyntaxUID: {\n Value: [\"1.2.840.10008.1.2.1\"],\n vr: \"UI\"\n },\n ImplementationClassUID: {\n Value: [DicomMetaDictionary.uid()],\n // TODO: could be git hash or other valid id\n vr: \"UI\"\n },\n ImplementationVersionName: {\n Value: [\"dcmjs\"],\n vr: \"SH\"\n }\n };\n var _vrMap = {\n PixelData: \"OW\"\n };\n derivationSourceDataset._meta = _meta;\n derivationSourceDataset._vrMap = _vrMap;\n var report = new StructuredReport([derivationSourceDataset]);\n\n var contentItem = _MeasurementReport.contentItem(derivationSourceDataset); // Merge the derived dataset with the content from the Measurement Report\n\n\n report.dataset = Object.assign(report.dataset, contentItem);\n report.dataset._meta = _meta;\n return report;\n }\n /**\n * Generate Cornerstone tool state from dataset\n * @param {object} dataset dataset\n * @param {object} hooks\n * @param {function} hooks.getToolClass Function to map dataset to a tool class\n * @returns\n */\n\n }, {\n key: \"generateToolState\",\n value: function generateToolState(dataset) {\n var hooks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n // For now, bail out if the dataset is not a TID1500 SR with length measurements\n if (dataset.ContentTemplateSequence.TemplateIdentifier !== \"1500\") {\n throw new Error(\"This package can currently only interpret DICOM SR TID 1500\");\n }\n\n var REPORT = \"Imaging Measurements\";\n var GROUP = \"Measurement Group\";\n var TRACKING_IDENTIFIER = \"Tracking Identifier\"; // Identify the Imaging Measurements\n\n var imagingMeasurementContent = toArray(dataset.ContentSequence).find(codeMeaningEquals(REPORT)); // Retrieve the Measurements themselves\n\n var measurementGroups = toArray(imagingMeasurementContent.ContentSequence).filter(codeMeaningEquals(GROUP)); // For each of the supported measurement types, compute the measurement data\n\n var measurementData = {};\n var cornerstoneToolClasses = MeasurementReport.CORNERSTONE_TOOL_CLASSES_BY_UTILITY_TYPE;\n var registeredToolClasses = [];\n Object.keys(cornerstoneToolClasses).forEach(function (key) {\n registeredToolClasses.push(cornerstoneToolClasses[key]);\n measurementData[key] = [];\n });\n measurementGroups.forEach(function (measurementGroup) {\n var measurementGroupContentSequence = toArray(measurementGroup.ContentSequence);\n var TrackingIdentifierGroup = measurementGroupContentSequence.find(function (contentItem) {\n return contentItem.ConceptNameCodeSequence.CodeMeaning === TRACKING_IDENTIFIER;\n });\n var TrackingIdentifierValue = TrackingIdentifierGroup.TextValue;\n var toolClass = hooks.getToolClass ? hooks.getToolClass(measurementGroup, dataset, registeredToolClasses) : registeredToolClasses.find(function (tc) {\n return tc.isValidCornerstoneTrackingIdentifier(TrackingIdentifierValue);\n });\n\n if (toolClass) {\n var measurement = toolClass.getMeasurementData(measurementGroup);\n console.log(\"=== \".concat(toolClass.toolType, \" ===\"));\n console.log(measurement);\n measurementData[toolClass.toolType].push(measurement);\n }\n }); // NOTE: There is no way of knowing the cornerstone imageIds as that could be anything.\n // That is up to the consumer to derive from the SOPInstanceUIDs.\n\n return measurementData;\n }\n }, {\n key: \"registerTool\",\n value: function registerTool(toolClass) {\n MeasurementReport.CORNERSTONE_TOOL_CLASSES_BY_UTILITY_TYPE[toolClass.utilityToolType] = toolClass;\n MeasurementReport.CORNERSTONE_TOOL_CLASSES_BY_TOOL_TYPE[toolClass.toolType] = toolClass;\n MeasurementReport.MEASUREMENT_BY_TOOLTYPE[toolClass.toolType] = toolClass.utilityToolType;\n }\n }]);\n\n return MeasurementReport;\n}();\nMeasurementReport.MEASUREMENT_BY_TOOLTYPE = {};\nMeasurementReport.CORNERSTONE_TOOL_CLASSES_BY_UTILITY_TYPE = {};\nMeasurementReport.CORNERSTONE_TOOL_CLASSES_BY_TOOL_TYPE = {};\n\nvar TID300Measurement = /*#__PURE__*/function () {\n function TID300Measurement(props) {\n _classCallCheck(this, TID300Measurement);\n\n this.ReferencedSOPSequence = props.ReferencedSOPSequence;\n this.props = props;\n }\n\n _createClass(TID300Measurement, [{\n key: \"getMeasurement\",\n value: function getMeasurement(contentSequenceEntries) {\n return [].concat(_toConsumableArray(this.getTrackingGroups()), _toConsumableArray(this.getFindingGroup()), _toConsumableArray(this.getFindingSiteGroups()), _toConsumableArray(contentSequenceEntries));\n }\n }, {\n key: \"getTrackingGroups\",\n value: function getTrackingGroups() {\n var trackingIdentifierTextValue = this.props.trackingIdentifierTextValue;\n return [{\n RelationshipType: \"HAS OBS CONTEXT\",\n ValueType: \"TEXT\",\n ConceptNameCodeSequence: {\n CodeValue: \"112039\",\n CodingSchemeDesignator: \"DCM\",\n CodeMeaning: \"Tracking Identifier\"\n },\n TextValue: trackingIdentifierTextValue || \"web annotation\"\n }, {\n RelationshipType: \"HAS OBS CONTEXT\",\n ValueType: \"UIDREF\",\n ConceptNameCodeSequence: {\n CodeValue: \"112040\",\n CodingSchemeDesignator: \"DCM\",\n CodeMeaning: \"Tracking Unique Identifier\"\n },\n UID: DicomMetaDictionary.uid()\n }];\n }\n }, {\n key: \"getFindingGroup\",\n value: function getFindingGroup() {\n var finding = this.props.finding;\n\n if (!finding) {\n return [];\n }\n\n var CodeValue = finding.CodeValue,\n CodingSchemeDesignator = finding.CodingSchemeDesignator,\n CodeMeaning = finding.CodeMeaning;\n return [{\n RelationshipType: \"CONTAINS\",\n ValueType: \"CODE\",\n ConceptNameCodeSequence: addAccessors({\n CodeValue: \"121071\",\n CodingSchemeDesignator: \"DCM\",\n CodeMeaning: \"Finding\"\n }),\n ConceptCodeSequence: addAccessors({\n CodeValue: CodeValue,\n //: \"SAMPLE FINDING\",\n CodingSchemeDesignator: CodingSchemeDesignator,\n //: \"99dcmjs\",\n CodeMeaning: CodeMeaning //: \"Sample Finding\"\n\n })\n }];\n }\n }, {\n key: \"getFindingSiteGroups\",\n value: function getFindingSiteGroups() {\n var findingSites = this.props.findingSites || [];\n return findingSites.map(function (findingSite) {\n var CodeValue = findingSite.CodeValue,\n CodingSchemeDesignator = findingSite.CodingSchemeDesignator,\n CodeMeaning = findingSite.CodeMeaning;\n return {\n RelationshipType: \"CONTAINS\",\n ValueType: \"CODE\",\n ConceptNameCodeSequence: addAccessors({\n CodeValue: \"363698007\",\n CodingSchemeDesignator: \"SCT\",\n CodeMeaning: \"Finding Site\"\n }),\n ConceptCodeSequence: addAccessors({\n CodeValue: CodeValue,\n //: \"SAMPLE FINDING SITE\",\n CodingSchemeDesignator: CodingSchemeDesignator,\n //: \"99dcmjs\",\n CodeMeaning: CodeMeaning //: \"Sample Finding Site\"\n\n })\n };\n });\n }\n }]);\n\n return TID300Measurement;\n}();\n\nvar Length = /*#__PURE__*/function (_TID300Measurement) {\n _inherits(Length, _TID300Measurement);\n\n var _super = _createSuper(Length);\n\n function Length() {\n _classCallCheck(this, Length);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(Length, [{\n key: \"contentItem\",\n value: function contentItem() {\n var _this$props = this.props,\n point1 = _this$props.point1,\n point2 = _this$props.point2,\n distance = _this$props.distance,\n ReferencedSOPSequence = _this$props.ReferencedSOPSequence;\n return this.getMeasurement([{\n RelationshipType: \"CONTAINS\",\n ValueType: \"NUM\",\n ConceptNameCodeSequence: {\n CodeValue: \"G-D7FE\",\n CodingSchemeDesignator: \"SRT\",\n CodeMeaning: \"Length\"\n },\n MeasuredValueSequence: {\n MeasurementUnitsCodeSequence: {\n CodeValue: \"mm\",\n CodingSchemeDesignator: \"UCUM\",\n CodingSchemeVersion: \"1.4\",\n CodeMeaning: \"millimeter\"\n },\n NumericValue: distance\n },\n ContentSequence: {\n RelationshipType: \"INFERRED FROM\",\n ValueType: \"SCOORD\",\n GraphicType: \"POLYLINE\",\n GraphicData: [point1.x, point1.y, point2.x, point2.y],\n ContentSequence: {\n RelationshipType: \"SELECTED FROM\",\n ValueType: \"IMAGE\",\n ReferencedSOPSequence: ReferencedSOPSequence\n }\n }\n }]);\n }\n }]);\n\n return Length;\n}(TID300Measurement);\n\nvar CORNERSTONE_4_TAG = \"cornerstoneTools@^4.0.0\";\n\nvar LENGTH$1 = \"Length\";\n\nvar Length$1 = /*#__PURE__*/function () {\n function Length() {\n _classCallCheck(this, Length);\n } // TODO: this function is required for all Cornerstone Tool Adapters, since it is called by MeasurementReport.\n\n\n _createClass(Length, null, [{\n key: \"getMeasurementData\",\n value: function getMeasurementData(MeasurementGroup) {\n var _MeasurementReport$ge = MeasurementReport.getSetupMeasurementData(MeasurementGroup),\n defaultState = _MeasurementReport$ge.defaultState,\n NUMGroup = _MeasurementReport$ge.NUMGroup,\n SCOORDGroup = _MeasurementReport$ge.SCOORDGroup;\n\n var state = _objectSpread2(_objectSpread2({}, defaultState), {}, {\n length: NUMGroup.MeasuredValueSequence.NumericValue,\n toolType: Length.toolType,\n handles: {\n start: {},\n end: {},\n textBox: {\n hasMoved: false,\n movesIndependently: false,\n drawnIndependently: true,\n allowedOutsideImage: true,\n hasBoundingBox: true\n }\n }\n });\n\n var _SCOORDGroup$GraphicD = _slicedToArray(SCOORDGroup.GraphicData, 4);\n\n state.handles.start.x = _SCOORDGroup$GraphicD[0];\n state.handles.start.y = _SCOORDGroup$GraphicD[1];\n state.handles.end.x = _SCOORDGroup$GraphicD[2];\n state.handles.end.y = _SCOORDGroup$GraphicD[3];\n return state;\n }\n }, {\n key: \"getTID300RepresentationArguments\",\n value: function getTID300RepresentationArguments(tool) {\n var handles = tool.handles,\n finding = tool.finding,\n findingSites = tool.findingSites;\n var point1 = handles.start;\n var point2 = handles.end;\n var distance = tool.length;\n var trackingIdentifierTextValue = \"cornerstoneTools@^4.0.0:Length\";\n return {\n point1: point1,\n point2: point2,\n distance: distance,\n trackingIdentifierTextValue: trackingIdentifierTextValue,\n finding: finding,\n findingSites: findingSites || []\n };\n }\n }]);\n\n return Length;\n}();\n\nLength$1.toolType = LENGTH$1;\nLength$1.utilityToolType = LENGTH$1;\nLength$1.TID300Representation = Length;\n\nLength$1.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {\n if (!TrackingIdentifier.includes(\":\")) {\n return false;\n }\n\n var _TrackingIdentifier$s = TrackingIdentifier.split(\":\"),\n _TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),\n cornerstone4Tag = _TrackingIdentifier$s2[0],\n toolType = _TrackingIdentifier$s2[1];\n\n if (cornerstone4Tag !== CORNERSTONE_4_TAG) {\n return false;\n }\n\n return toolType === LENGTH$1;\n};\n\nMeasurementReport.registerTool(Length$1);\n\n/**\n * Expand an array of points stored as objects into\n * a flattened array of points\n *\n * @param points [{x: 0, y: 1}, {x: 1, y: 2}] or [{x: 0, y: 1, z: 0}, {x: 1, y: 2, z: 0}]\n * @return {Array} [point1x, point1y, point2x, point2y] or [point1x, point1y, point1z, point2x, point2y, point2z]\n */\n\nfunction expandPoints(points) {\n var allPoints = [];\n points.forEach(function (point) {\n allPoints.push(point[0] || point.x);\n allPoints.push(point[1] || point.y);\n\n if (point[2] !== undefined || point.z !== undefined) {\n allPoints.push(point[2] || point.z);\n }\n });\n return allPoints;\n}\n\nvar Polyline = /*#__PURE__*/function (_TID300Measurement) {\n _inherits(Polyline, _TID300Measurement);\n\n var _super = _createSuper(Polyline);\n\n function Polyline() {\n _classCallCheck(this, Polyline);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(Polyline, [{\n key: \"contentItem\",\n value: function contentItem() {\n var _this$props = this.props,\n points = _this$props.points,\n area = _this$props.area,\n ReferencedSOPSequence = _this$props.ReferencedSOPSequence,\n _this$props$use3DSpat = _this$props.use3DSpatialCoordinates,\n use3DSpatialCoordinates = _this$props$use3DSpat === void 0 ? false : _this$props$use3DSpat,\n perimeter = _this$props.perimeter;\n var GraphicData = expandPoints(points); // TODO: Add Mean and STDev value of (modality?) pixels\n\n return this.getMeasurement([{\n RelationshipType: \"CONTAINS\",\n ValueType: \"NUM\",\n ConceptNameCodeSequence: {\n CodeValue: \"131191004\",\n CodingSchemeDesignator: \"SCT\",\n CodeMeaning: \"Perimeter\"\n },\n MeasuredValueSequence: {\n MeasurementUnitsCodeSequence: {\n CodeValue: \"mm\",\n CodingSchemeDesignator: \"UCUM\",\n CodingSchemeVersion: \"1.4\",\n CodeMeaning: \"millimeter\"\n },\n NumericValue: perimeter\n },\n ContentSequence: {\n RelationshipType: \"INFERRED FROM\",\n ValueType: use3DSpatialCoordinates ? \"SCOORD3D\" : \"SCOORD\",\n GraphicType: \"POLYLINE\",\n GraphicData: GraphicData,\n ContentSequence: use3DSpatialCoordinates ? undefined : {\n RelationshipType: \"SELECTED FROM\",\n ValueType: \"IMAGE\",\n ReferencedSOPSequence: ReferencedSOPSequence\n }\n }\n }, {\n // TODO: This feels weird to repeat the GraphicData\n RelationshipType: \"CONTAINS\",\n ValueType: \"NUM\",\n ConceptNameCodeSequence: {\n CodeValue: \"G-A166\",\n CodingSchemeDesignator: \"SRT\",\n CodeMeaning: \"Area\" // TODO: Look this up from a Code Meaning dictionary\n\n },\n MeasuredValueSequence: {\n MeasurementUnitsCodeSequence: {\n CodeValue: \"mm2\",\n CodingSchemeDesignator: \"UCUM\",\n CodingSchemeVersion: \"1.4\",\n CodeMeaning: \"SquareMilliMeter\"\n },\n NumericValue: area\n },\n ContentSequence: {\n RelationshipType: \"INFERRED FROM\",\n ValueType: use3DSpatialCoordinates ? \"SCOORD3D\" : \"SCOORD\",\n GraphicType: \"POLYLINE\",\n GraphicData: GraphicData,\n ContentSequence: use3DSpatialCoordinates ? undefined : {\n RelationshipType: \"SELECTED FROM\",\n ValueType: \"IMAGE\",\n ReferencedSOPSequence: ReferencedSOPSequence\n }\n }\n }]);\n }\n }]);\n\n return Polyline;\n}(TID300Measurement);\n\nvar FreehandRoi = /*#__PURE__*/function () {\n function FreehandRoi() {\n _classCallCheck(this, FreehandRoi);\n }\n\n _createClass(FreehandRoi, null, [{\n key: \"getMeasurementData\",\n value: function getMeasurementData(MeasurementGroup) {\n var _MeasurementReport$ge = MeasurementReport.getSetupMeasurementData(MeasurementGroup),\n defaultState = _MeasurementReport$ge.defaultState,\n SCOORDGroup = _MeasurementReport$ge.SCOORDGroup,\n NUMGroup = _MeasurementReport$ge.NUMGroup;\n\n var state = _objectSpread2(_objectSpread2({}, defaultState), {}, {\n toolType: FreehandRoi.toolType,\n handles: {\n points: [],\n textBox: {\n active: false,\n hasMoved: false,\n movesIndependently: false,\n drawnIndependently: true,\n allowedOutsideImage: true,\n hasBoundingBox: true\n }\n },\n cachedStats: {\n area: NUMGroup ? NUMGroup.MeasuredValueSequence.NumericValue : 0\n },\n color: undefined,\n invalidated: true\n });\n\n var GraphicData = SCOORDGroup.GraphicData;\n\n for (var i = 0; i < GraphicData.length; i += 2) {\n state.handles.points.push({\n x: GraphicData[i],\n y: GraphicData[i + 1]\n });\n }\n\n return state;\n }\n }, {\n key: \"getTID300RepresentationArguments\",\n value: function getTID300RepresentationArguments(tool) {\n var handles = tool.handles,\n finding = tool.finding,\n findingSites = tool.findingSites,\n _tool$cachedStats = tool.cachedStats,\n cachedStats = _tool$cachedStats === void 0 ? {} : _tool$cachedStats;\n var points = handles.points;\n var _cachedStats$area = cachedStats.area,\n area = _cachedStats$area === void 0 ? 0 : _cachedStats$area,\n _cachedStats$perimete = cachedStats.perimeter,\n perimeter = _cachedStats$perimete === void 0 ? 0 : _cachedStats$perimete;\n var trackingIdentifierTextValue = \"cornerstoneTools@^4.0.0:FreehandRoi\";\n return {\n points: points,\n area: area,\n perimeter: perimeter,\n trackingIdentifierTextValue: trackingIdentifierTextValue,\n finding: finding,\n findingSites: findingSites || []\n };\n }\n }]);\n\n return FreehandRoi;\n}();\n\nFreehandRoi.toolType = \"FreehandRoi\";\nFreehandRoi.utilityToolType = \"FreehandRoi\";\nFreehandRoi.TID300Representation = Polyline;\n\nFreehandRoi.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {\n if (!TrackingIdentifier.includes(\":\")) {\n return false;\n }\n\n var _TrackingIdentifier$s = TrackingIdentifier.split(\":\"),\n _TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),\n cornerstone4Tag = _TrackingIdentifier$s2[0],\n toolType = _TrackingIdentifier$s2[1];\n\n if (cornerstone4Tag !== CORNERSTONE_4_TAG) {\n return false;\n }\n\n return toolType === FreehandRoi.toolType;\n};\n\nMeasurementReport.registerTool(FreehandRoi);\n\nvar Bidirectional = /*#__PURE__*/function (_TID300Measurement) {\n _inherits(Bidirectional, _TID300Measurement);\n\n var _super = _createSuper(Bidirectional);\n\n function Bidirectional() {\n _classCallCheck(this, Bidirectional);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(Bidirectional, [{\n key: \"contentItem\",\n value: function contentItem() {\n var _this$props = this.props,\n longAxis = _this$props.longAxis,\n shortAxis = _this$props.shortAxis,\n longAxisLength = _this$props.longAxisLength,\n shortAxisLength = _this$props.shortAxisLength,\n ReferencedSOPSequence = _this$props.ReferencedSOPSequence;\n return this.getMeasurement([{\n RelationshipType: \"CONTAINS\",\n ValueType: \"NUM\",\n ConceptNameCodeSequence: {\n CodeValue: \"G-A185\",\n CodingSchemeDesignator: \"SRT\",\n CodeMeaning: \"Long Axis\"\n },\n MeasuredValueSequence: {\n MeasurementUnitsCodeSequence: {\n CodeValue: \"mm\",\n CodingSchemeDesignator: \"UCUM\",\n CodingSchemeVersion: \"1.4\",\n CodeMeaning: \"millimeter\"\n },\n NumericValue: longAxisLength\n },\n ContentSequence: {\n RelationshipType: \"INFERRED FROM\",\n ValueType: \"SCOORD\",\n GraphicType: \"POLYLINE\",\n GraphicData: [longAxis.point1.x, longAxis.point1.y, longAxis.point2.x, longAxis.point2.y],\n ContentSequence: {\n RelationshipType: \"SELECTED FROM\",\n ValueType: \"IMAGE\",\n ReferencedSOPSequence: ReferencedSOPSequence\n }\n }\n }, {\n RelationshipType: \"CONTAINS\",\n ValueType: \"NUM\",\n ConceptNameCodeSequence: {\n CodeValue: \"G-A186\",\n CodingSchemeDesignator: \"SRT\",\n CodeMeaning: \"Short Axis\"\n },\n MeasuredValueSequence: {\n MeasurementUnitsCodeSequence: {\n CodeValue: \"mm\",\n CodingSchemeDesignator: \"UCUM\",\n CodingSchemeVersion: \"1.4\",\n CodeMeaning: \"millimeter\"\n },\n NumericValue: shortAxisLength\n },\n ContentSequence: {\n RelationshipType: \"INFERRED FROM\",\n ValueType: \"SCOORD\",\n GraphicType: \"POLYLINE\",\n GraphicData: [shortAxis.point1.x, shortAxis.point1.y, shortAxis.point2.x, shortAxis.point2.y],\n ContentSequence: {\n RelationshipType: \"SELECTED FROM\",\n ValueType: \"IMAGE\",\n ReferencedSOPSequence: ReferencedSOPSequence\n }\n }\n }]);\n }\n }]);\n\n return Bidirectional;\n}(TID300Measurement);\n\nvar BIDIRECTIONAL = \"Bidirectional\";\nvar LONG_AXIS = \"Long Axis\";\nvar SHORT_AXIS = \"Short Axis\";\nvar FINDING$1 = \"121071\";\nvar FINDING_SITE$1 = \"G-C0E3\";\n\nvar Bidirectional$1 = /*#__PURE__*/function () {\n function Bidirectional() {\n _classCallCheck(this, Bidirectional);\n } // TODO: this function is required for all Cornerstone Tool Adapters, since it is called by MeasurementReport.\n\n\n _createClass(Bidirectional, null, [{\n key: \"getMeasurementData\",\n value: function getMeasurementData(MeasurementGroup) {\n var _state;\n\n var ContentSequence = MeasurementGroup.ContentSequence;\n var findingGroup = toArray(ContentSequence).find(function (group) {\n return group.ConceptNameCodeSequence.CodeValue === FINDING$1;\n });\n var findingSiteGroups = toArray(ContentSequence).filter(function (group) {\n return group.ConceptNameCodeSequence.CodeValue === FINDING_SITE$1;\n });\n var longAxisNUMGroup = toArray(ContentSequence).find(function (group) {\n return group.ConceptNameCodeSequence.CodeMeaning === LONG_AXIS;\n });\n var longAxisSCOORDGroup = toArray(longAxisNUMGroup.ContentSequence).find(function (group) {\n return group.ValueType === \"SCOORD\";\n });\n var shortAxisNUMGroup = toArray(ContentSequence).find(function (group) {\n return group.ConceptNameCodeSequence.CodeMeaning === SHORT_AXIS;\n });\n var shortAxisSCOORDGroup = toArray(shortAxisNUMGroup.ContentSequence).find(function (group) {\n return group.ValueType === \"SCOORD\";\n });\n var ReferencedSOPSequence = longAxisSCOORDGroup.ContentSequence.ReferencedSOPSequence;\n var ReferencedSOPInstanceUID = ReferencedSOPSequence.ReferencedSOPInstanceUID,\n ReferencedFrameNumber = ReferencedSOPSequence.ReferencedFrameNumber; // Long axis\n\n var longestDiameter = String(longAxisNUMGroup.MeasuredValueSequence.NumericValue);\n var shortestDiameter = String(shortAxisNUMGroup.MeasuredValueSequence.NumericValue);\n var bottomRight = {\n x: Math.max(longAxisSCOORDGroup.GraphicData[0], longAxisSCOORDGroup.GraphicData[2], shortAxisSCOORDGroup.GraphicData[0], shortAxisSCOORDGroup.GraphicData[2]),\n y: Math.max(longAxisSCOORDGroup.GraphicData[1], longAxisSCOORDGroup.GraphicData[3], shortAxisSCOORDGroup.GraphicData[1], shortAxisSCOORDGroup.GraphicData[3])\n };\n var state = (_state = {\n sopInstanceUid: ReferencedSOPInstanceUID,\n frameIndex: ReferencedFrameNumber || 1,\n toolType: Bidirectional.toolType,\n active: false,\n handles: {\n start: {\n x: longAxisSCOORDGroup.GraphicData[0],\n y: longAxisSCOORDGroup.GraphicData[1],\n drawnIndependently: false,\n allowedOutsideImage: false,\n active: false,\n highlight: false,\n index: 0\n },\n end: {\n x: longAxisSCOORDGroup.GraphicData[2],\n y: longAxisSCOORDGroup.GraphicData[3],\n drawnIndependently: false,\n allowedOutsideImage: false,\n active: false,\n highlight: false,\n index: 1\n },\n perpendicularStart: {\n x: shortAxisSCOORDGroup.GraphicData[0],\n y: shortAxisSCOORDGroup.GraphicData[1],\n drawnIndependently: false,\n allowedOutsideImage: false,\n active: false,\n highlight: false,\n index: 2\n },\n perpendicularEnd: {\n x: shortAxisSCOORDGroup.GraphicData[2],\n y: shortAxisSCOORDGroup.GraphicData[3],\n drawnIndependently: false,\n allowedOutsideImage: false,\n active: false,\n highlight: false,\n index: 3\n },\n textBox: {\n highlight: false,\n hasMoved: true,\n active: false,\n movesIndependently: false,\n drawnIndependently: true,\n allowedOutsideImage: true,\n hasBoundingBox: true,\n x: bottomRight.x + 10,\n y: bottomRight.y + 10\n }\n },\n invalidated: false,\n isCreating: false,\n longestDiameter: longestDiameter,\n shortestDiameter: shortestDiameter\n }, _defineProperty(_state, \"toolType\", \"Bidirectional\"), _defineProperty(_state, \"toolName\", \"Bidirectional\"), _defineProperty(_state, \"visible\", true), _defineProperty(_state, \"finding\", findingGroup ? findingGroup.ConceptCodeSequence : undefined), _defineProperty(_state, \"findingSites\", findingSiteGroups.map(function (fsg) {\n return fsg.ConceptCodeSequence;\n })), _state);\n return state;\n }\n }, {\n key: \"getTID300RepresentationArguments\",\n value: function getTID300RepresentationArguments(tool) {\n var _tool$handles = tool.handles,\n start = _tool$handles.start,\n end = _tool$handles.end,\n perpendicularStart = _tool$handles.perpendicularStart,\n perpendicularEnd = _tool$handles.perpendicularEnd;\n var shortestDiameter = tool.shortestDiameter,\n longestDiameter = tool.longestDiameter,\n finding = tool.finding,\n findingSites = tool.findingSites;\n var trackingIdentifierTextValue = \"cornerstoneTools@^4.0.0:Bidirectional\";\n return {\n longAxis: {\n point1: start,\n point2: end\n },\n shortAxis: {\n point1: perpendicularStart,\n point2: perpendicularEnd\n },\n longAxisLength: longestDiameter,\n shortAxisLength: shortestDiameter,\n trackingIdentifierTextValue: trackingIdentifierTextValue,\n finding: finding,\n findingSites: findingSites || []\n };\n }\n }]);\n\n return Bidirectional;\n}();\n\nBidirectional$1.toolType = BIDIRECTIONAL;\nBidirectional$1.utilityToolType = BIDIRECTIONAL;\nBidirectional$1.TID300Representation = Bidirectional;\n\nBidirectional$1.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {\n if (!TrackingIdentifier.includes(\":\")) {\n return false;\n }\n\n var _TrackingIdentifier$s = TrackingIdentifier.split(\":\"),\n _TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),\n cornerstone4Tag = _TrackingIdentifier$s2[0],\n toolType = _TrackingIdentifier$s2[1];\n\n if (cornerstone4Tag !== CORNERSTONE_4_TAG) {\n return false;\n }\n\n return toolType === BIDIRECTIONAL;\n};\n\nMeasurementReport.registerTool(Bidirectional$1);\n\n/**\n * Expand an array of points stored as objects into\n * a flattened array of points\n *\n * @param points\n * @return {Array}\n */\n\nfunction expandPoints$1(points) {\n var allPoints = [];\n points.forEach(function (point) {\n allPoints.push(point.x);\n allPoints.push(point.y);\n });\n return allPoints;\n}\n\nvar Ellipse = /*#__PURE__*/function (_TID300Measurement) {\n _inherits(Ellipse, _TID300Measurement);\n\n var _super = _createSuper(Ellipse);\n\n function Ellipse() {\n _classCallCheck(this, Ellipse);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(Ellipse, [{\n key: \"contentItem\",\n value: function contentItem() {\n var _this$props = this.props,\n points = _this$props.points,\n ReferencedSOPSequence = _this$props.ReferencedSOPSequence,\n area = _this$props.area;\n var GraphicData = expandPoints$1(points);\n return this.getMeasurement([{\n RelationshipType: \"CONTAINS\",\n ValueType: \"NUM\",\n ConceptNameCodeSequence: {\n CodeValue: \"G-D7FE\",\n CodingSchemeDesignator: \"SRT\",\n CodeMeaning: \"AREA\"\n },\n MeasuredValueSequence: {\n MeasurementUnitsCodeSequence: {\n CodeValue: \"mm2\",\n CodingSchemeDesignator: \"UCUM\",\n CodingSchemeVersion: \"1.4\",\n CodeMeaning: \"squaremillimeter\"\n },\n NumericValue: area\n },\n ContentSequence: {\n RelationshipType: \"INFERRED FROM\",\n ValueType: \"SCOORD\",\n GraphicType: \"ELLIPSE\",\n GraphicData: GraphicData,\n ContentSequence: {\n RelationshipType: \"SELECTED FROM\",\n ValueType: \"IMAGE\",\n ReferencedSOPSequence: ReferencedSOPSequence\n }\n }\n }]);\n }\n }]);\n\n return Ellipse;\n}(TID300Measurement);\n\nvar ELLIPTICALROI = \"EllipticalRoi\";\n\nvar EllipticalRoi = /*#__PURE__*/function () {\n function EllipticalRoi() {\n _classCallCheck(this, EllipticalRoi);\n } // TODO: this function is required for all Cornerstone Tool Adapters, since it is called by MeasurementReport.\n\n\n _createClass(EllipticalRoi, null, [{\n key: \"getMeasurementData\",\n value: function getMeasurementData(MeasurementGroup) {\n var _MeasurementReport$ge = MeasurementReport.getSetupMeasurementData(MeasurementGroup),\n defaultState = _MeasurementReport$ge.defaultState,\n NUMGroup = _MeasurementReport$ge.NUMGroup,\n SCOORDGroup = _MeasurementReport$ge.SCOORDGroup;\n\n var GraphicData = SCOORDGroup.GraphicData;\n var majorAxis = [{\n x: GraphicData[0],\n y: GraphicData[1]\n }, {\n x: GraphicData[2],\n y: GraphicData[3]\n }];\n var minorAxis = [{\n x: GraphicData[4],\n y: GraphicData[5]\n }, {\n x: GraphicData[6],\n y: GraphicData[7]\n }]; // Calculate two opposite corners of box defined by two axes.\n\n var minorAxisLength = Math.sqrt(Math.pow(minorAxis[0].x - minorAxis[1].x, 2) + Math.pow(minorAxis[0].y - minorAxis[1].y, 2));\n var minorAxisDirection = {\n x: (minorAxis[1].x - minorAxis[0].x) / minorAxisLength,\n y: (minorAxis[1].y - minorAxis[0].y) / minorAxisLength\n };\n var halfMinorAxisLength = minorAxisLength / 2; // First end point of major axis + half minor axis vector\n\n var corner1 = {\n x: majorAxis[0].x + minorAxisDirection.x * halfMinorAxisLength,\n y: majorAxis[0].y + minorAxisDirection.y * halfMinorAxisLength\n }; // Second end point of major axis - half of minor axis vector\n\n var corner2 = {\n x: majorAxis[1].x - minorAxisDirection.x * halfMinorAxisLength,\n y: majorAxis[1].y - minorAxisDirection.y * halfMinorAxisLength\n };\n\n var state = _objectSpread2(_objectSpread2({}, defaultState), {}, {\n toolType: EllipticalRoi.toolType,\n active: false,\n cachedStats: {\n area: NUMGroup ? NUMGroup.MeasuredValueSequence.NumericValue : 0\n },\n handles: {\n end: {\n x: corner1.x,\n y: corner1.y,\n highlight: false,\n active: false\n },\n initialRotation: 0,\n start: {\n x: corner2.x,\n y: corner2.y,\n highlight: false,\n active: false\n },\n textBox: {\n hasMoved: false,\n movesIndependently: false,\n drawnIndependently: true,\n allowedOutsideImage: true,\n hasBoundingBox: true\n }\n },\n invalidated: true,\n visible: true\n });\n\n return state;\n }\n }, {\n key: \"getTID300RepresentationArguments\",\n value: function getTID300RepresentationArguments(tool) {\n var _tool$cachedStats = tool.cachedStats,\n cachedStats = _tool$cachedStats === void 0 ? {} : _tool$cachedStats,\n handles = tool.handles,\n finding = tool.finding,\n findingSites = tool.findingSites;\n var start = handles.start,\n end = handles.end;\n var area = cachedStats.area;\n var halfXLength = Math.abs(start.x - end.x) / 2;\n var halfYLength = Math.abs(start.y - end.y) / 2;\n var points = [];\n var center = {\n x: (start.x + end.x) / 2,\n y: (start.y + end.y) / 2\n };\n\n if (halfXLength > halfYLength) {\n // X-axis major\n // Major axis\n points.push({\n x: center.x - halfXLength,\n y: center.y\n });\n points.push({\n x: center.x + halfXLength,\n y: center.y\n }); // Minor axis\n\n points.push({\n x: center.x,\n y: center.y - halfYLength\n });\n points.push({\n x: center.x,\n y: center.y + halfYLength\n });\n } else {\n // Y-axis major\n // Major axis\n points.push({\n x: center.x,\n y: center.y - halfYLength\n });\n points.push({\n x: center.x,\n y: center.y + halfYLength\n }); // Minor axis\n\n points.push({\n x: center.x - halfXLength,\n y: center.y\n });\n points.push({\n x: center.x + halfXLength,\n y: center.y\n });\n }\n\n var trackingIdentifierTextValue = \"cornerstoneTools@^4.0.0:EllipticalRoi\";\n return {\n area: area,\n points: points,\n trackingIdentifierTextValue: trackingIdentifierTextValue,\n finding: finding,\n findingSites: findingSites || []\n };\n }\n }]);\n\n return EllipticalRoi;\n}();\n\nEllipticalRoi.toolType = ELLIPTICALROI;\nEllipticalRoi.utilityToolType = ELLIPTICALROI;\nEllipticalRoi.TID300Representation = Ellipse;\n\nEllipticalRoi.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {\n if (!TrackingIdentifier.includes(\":\")) {\n return false;\n }\n\n var _TrackingIdentifier$s = TrackingIdentifier.split(\":\"),\n _TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),\n cornerstone4Tag = _TrackingIdentifier$s2[0],\n toolType = _TrackingIdentifier$s2[1];\n\n if (cornerstone4Tag !== CORNERSTONE_4_TAG) {\n return false;\n }\n\n return toolType === ELLIPTICALROI;\n};\n\nMeasurementReport.registerTool(EllipticalRoi);\n\n/**\n * Expand an array of points stored as objects into\n * a flattened array of points\n *\n * @param points [{x: 0, y: 1}, {x: 1, y: 2}] or [{x: 0, y: 1, z: 0}, {x: 1, y: 2, z: 0}]\n * @return {Array} [point1x, point1y, point2x, point2y] or [point1x, point1y, point1z, point2x, point2y, point2z]\n */\n\nfunction expandPoints$2(points) {\n var allPoints = [];\n points.forEach(function (point) {\n allPoints.push(point.x);\n allPoints.push(point.y);\n });\n return allPoints;\n}\n\nvar Circle = /*#__PURE__*/function (_TID300Measurement) {\n _inherits(Circle, _TID300Measurement);\n\n var _super = _createSuper(Circle);\n\n function Circle() {\n _classCallCheck(this, Circle);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(Circle, [{\n key: \"contentItem\",\n value: function contentItem() {\n var _this$props = this.props,\n points = _this$props.points,\n ReferencedSOPSequence = _this$props.ReferencedSOPSequence,\n _this$props$use3DSpat = _this$props.use3DSpatialCoordinates,\n use3DSpatialCoordinates = _this$props$use3DSpat === void 0 ? false : _this$props$use3DSpat,\n perimeter = _this$props.perimeter,\n area = _this$props.area; // Combine all lengths to save the perimeter\n // @ToDO The permiter has to be implemented\n // const reducer = (accumulator, currentValue) => accumulator + currentValue;\n // const perimeter = lengths.reduce(reducer);\n\n var GraphicData = expandPoints$2(points); // TODO: Add Mean and STDev value of (modality?) pixels\n\n return this.getMeasurement([{\n RelationshipType: \"CONTAINS\",\n ValueType: \"NUM\",\n ConceptNameCodeSequence: {\n CodeValue: \"G-A197\",\n CodingSchemeDesignator: \"SRT\",\n CodeMeaning: \"Perimeter\" // TODO: Look this up from a Code Meaning dictionary\n\n },\n MeasuredValueSequence: {\n MeasurementUnitsCodeSequence: {\n CodeValue: \"mm\",\n CodingSchemeDesignator: \"UCUM\",\n CodingSchemeVersion: \"1.4\",\n CodeMeaning: \"millimeter\"\n },\n NumericValue: perimeter\n },\n ContentSequence: {\n RelationshipType: \"INFERRED FROM\",\n ValueType: use3DSpatialCoordinates ? \"SCOORD3D\" : \"SCOORD\",\n GraphicType: \"CIRCLE\",\n GraphicData: GraphicData,\n ContentSequence: use3DSpatialCoordinates ? undefined : {\n RelationshipType: \"SELECTED FROM\",\n ValueType: \"IMAGE\",\n ReferencedSOPSequence: ReferencedSOPSequence\n }\n }\n }, {\n // TODO: This feels weird to repeat the GraphicData\n RelationshipType: \"CONTAINS\",\n ValueType: \"NUM\",\n ConceptNameCodeSequence: {\n CodeValue: \"G-A166\",\n CodingSchemeDesignator: \"SRT\",\n CodeMeaning: \"Area\" // TODO: Look this up from a Code Meaning dictionary\n\n },\n MeasuredValueSequence: {\n MeasurementUnitsCodeSequence: {\n CodeValue: \"mm2\",\n CodingSchemeDesignator: \"UCUM\",\n CodingSchemeVersion: \"1.4\",\n CodeMeaning: \"SquareMilliMeter\"\n },\n NumericValue: area\n },\n ContentSequence: {\n RelationshipType: \"INFERRED FROM\",\n ValueType: use3DSpatialCoordinates ? \"SCOORD3D\" : \"SCOORD\",\n GraphicType: \"CIRCLE\",\n GraphicData: GraphicData,\n ContentSequence: use3DSpatialCoordinates ? undefined : {\n RelationshipType: \"SELECTED FROM\",\n ValueType: \"IMAGE\",\n ReferencedSOPSequence: ReferencedSOPSequence\n }\n }\n }]);\n }\n }]);\n\n return Circle;\n}(TID300Measurement);\n\nvar CIRCLEROI = \"CircleRoi\";\n\nvar CircleRoi = /*#__PURE__*/function () {\n function CircleRoi() {\n _classCallCheck(this, CircleRoi);\n }\n /** Gets the measurement data for cornerstone, given DICOM SR measurement data. */\n\n\n _createClass(CircleRoi, null, [{\n key: \"getMeasurementData\",\n value: function getMeasurementData(MeasurementGroup) {\n var _MeasurementReport$ge = MeasurementReport.getSetupMeasurementData(MeasurementGroup),\n defaultState = _MeasurementReport$ge.defaultState,\n NUMGroup = _MeasurementReport$ge.NUMGroup,\n SCOORDGroup = _MeasurementReport$ge.SCOORDGroup;\n\n var GraphicData = SCOORDGroup.GraphicData;\n var center = {\n x: GraphicData[0],\n y: GraphicData[1]\n };\n var end = {\n x: GraphicData[2],\n y: GraphicData[3]\n };\n\n var state = _objectSpread2(_objectSpread2({}, defaultState), {}, {\n toolType: CircleRoi.toolType,\n active: false,\n cachedStats: {\n area: NUMGroup ? NUMGroup.MeasuredValueSequence.NumericValue : 0,\n // Dummy values to be updated by cornerstone\n radius: 0,\n perimeter: 0\n },\n handles: {\n end: _objectSpread2(_objectSpread2({}, end), {}, {\n highlight: false,\n active: false\n }),\n initialRotation: 0,\n start: _objectSpread2(_objectSpread2({}, center), {}, {\n highlight: false,\n active: false\n }),\n textBox: {\n hasMoved: false,\n movesIndependently: false,\n drawnIndependently: true,\n allowedOutsideImage: true,\n hasBoundingBox: true\n }\n },\n invalidated: true,\n visible: true\n });\n\n return state;\n }\n /**\n * Gets the TID 300 representation of a circle, given the cornerstone representation.\n *\n * @param {Object} tool\n * @returns\n */\n\n }, {\n key: \"getTID300RepresentationArguments\",\n value: function getTID300RepresentationArguments(tool) {\n var _tool$cachedStats = tool.cachedStats,\n cachedStats = _tool$cachedStats === void 0 ? {} : _tool$cachedStats,\n handles = tool.handles,\n finding = tool.finding,\n findingSites = tool.findingSites;\n var center = handles.start,\n end = handles.end;\n var area = cachedStats.area,\n radius = cachedStats.radius;\n var perimeter = 2 * Math.PI * radius;\n var points = [];\n points.push(center);\n points.push(end);\n var trackingIdentifierTextValue = \"cornerstoneTools@^4.0.0:CircleRoi\";\n return {\n area: area,\n perimeter: perimeter,\n radius: radius,\n points: points,\n trackingIdentifierTextValue: trackingIdentifierTextValue,\n finding: finding,\n findingSites: findingSites || []\n };\n }\n }]);\n\n return CircleRoi;\n}();\n\nCircleRoi.toolType = CIRCLEROI;\nCircleRoi.utilityToolType = CIRCLEROI;\nCircleRoi.TID300Representation = Circle;\n\nCircleRoi.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {\n if (!TrackingIdentifier.includes(\":\")) {\n return false;\n }\n\n var _TrackingIdentifier$s = TrackingIdentifier.split(\":\"),\n _TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),\n cornerstone4Tag = _TrackingIdentifier$s2[0],\n toolType = _TrackingIdentifier$s2[1];\n\n if (cornerstone4Tag !== CORNERSTONE_4_TAG) {\n return false;\n }\n\n return toolType === CIRCLEROI;\n};\n\nMeasurementReport.registerTool(CircleRoi);\n\nvar Point = /*#__PURE__*/function (_TID300Measurement) {\n _inherits(Point, _TID300Measurement);\n\n var _super = _createSuper(Point);\n\n function Point() {\n _classCallCheck(this, Point);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(Point, [{\n key: \"contentItem\",\n value: function contentItem() {\n var _this$props = this.props,\n points = _this$props.points,\n ReferencedSOPSequence = _this$props.ReferencedSOPSequence,\n _this$props$use3DSpat = _this$props.use3DSpatialCoordinates,\n use3DSpatialCoordinates = _this$props$use3DSpat === void 0 ? false : _this$props$use3DSpat;\n var GraphicData = use3DSpatialCoordinates ? [points[0].x, points[0].y, points[0].z] : [points[0].x, points[0].y]; // Allow storing another point as part of an indicator showing a single point\n\n if (points.length == 2) {\n GraphicData.push(points[1].x);\n GraphicData.push(points[1].y);\n if (use3DSpatialCoordinates) GraphicData.push(points[1].z);\n }\n\n return this.getMeasurement([{\n RelationshipType: \"CONTAINS\",\n ValueType: \"NUM\",\n ConceptNameCodeSequence: {\n CodeValue: \"111010\",\n CodingSchemeDesignator: \"DCM\",\n CodeMeaning: \"Center\"\n },\n //MeasuredValueSequence: ,\n ContentSequence: {\n RelationshipType: \"INFERRED FROM\",\n ValueType: use3DSpatialCoordinates ? \"SCOORD3D\" : \"SCOORD\",\n GraphicType: \"POINT\",\n GraphicData: GraphicData,\n ContentSequence: use3DSpatialCoordinates ? undefined : {\n RelationshipType: \"SELECTED FROM\",\n ValueType: \"IMAGE\",\n ReferencedSOPSequence: ReferencedSOPSequence\n }\n }\n }]);\n }\n }]);\n\n return Point;\n}(TID300Measurement);\n\nvar ARROW_ANNOTATE = \"ArrowAnnotate\";\nvar CORNERSTONEFREETEXT = \"CORNERSTONEFREETEXT\";\n\nvar ArrowAnnotate = /*#__PURE__*/function () {\n function ArrowAnnotate() {\n _classCallCheck(this, ArrowAnnotate);\n }\n\n _createClass(ArrowAnnotate, null, [{\n key: \"getMeasurementData\",\n value: function getMeasurementData(MeasurementGroup) {\n var _MeasurementReport$ge = MeasurementReport.getSetupMeasurementData(MeasurementGroup),\n defaultState = _MeasurementReport$ge.defaultState,\n SCOORDGroup = _MeasurementReport$ge.SCOORDGroup,\n findingGroup = _MeasurementReport$ge.findingGroup;\n\n var text = findingGroup.ConceptCodeSequence.CodeMeaning;\n var GraphicData = SCOORDGroup.GraphicData;\n\n var state = _objectSpread2(_objectSpread2({}, defaultState), {}, {\n toolType: ArrowAnnotate.toolType,\n active: false,\n handles: {\n start: {\n x: GraphicData[0],\n y: GraphicData[1],\n highlight: true,\n active: false\n },\n // Use a generic offset if the stored data doesn't have the endpoint, otherwise\n // use the actual endpoint.\n end: {\n x: GraphicData.length == 4 ? GraphicData[2] : GraphicData[0] + 20,\n y: GraphicData.length == 4 ? GraphicData[3] : GraphicData[1] + 20,\n highlight: true,\n active: false\n },\n textBox: {\n hasMoved: false,\n movesIndependently: false,\n drawnIndependently: true,\n allowedOutsideImage: true,\n hasBoundingBox: true\n }\n },\n invalidated: true,\n text: text,\n visible: true\n });\n\n return state;\n }\n }, {\n key: \"getTID300RepresentationArguments\",\n value: function getTID300RepresentationArguments(tool) {\n var points = [tool.handles.start, tool.handles.end];\n var finding = tool.finding,\n findingSites = tool.findingSites;\n var TID300RepresentationArguments = {\n points: points,\n trackingIdentifierTextValue: \"cornerstoneTools@^4.0.0:ArrowAnnotate\",\n findingSites: findingSites || []\n }; // If freetext finding isn't present, add it from the tool text.\n\n if (!finding || finding.CodeValue !== CORNERSTONEFREETEXT) {\n finding = {\n CodeValue: CORNERSTONEFREETEXT,\n CodingSchemeDesignator: \"CST4\",\n CodeMeaning: tool.text\n };\n }\n\n TID300RepresentationArguments.finding = finding;\n return TID300RepresentationArguments;\n }\n }]);\n\n return ArrowAnnotate;\n}();\n\nArrowAnnotate.toolType = ARROW_ANNOTATE;\nArrowAnnotate.utilityToolType = ARROW_ANNOTATE;\nArrowAnnotate.TID300Representation = Point;\n\nArrowAnnotate.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {\n if (!TrackingIdentifier.includes(\":\")) {\n return false;\n }\n\n var _TrackingIdentifier$s = TrackingIdentifier.split(\":\"),\n _TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),\n cornerstone4Tag = _TrackingIdentifier$s2[0],\n toolType = _TrackingIdentifier$s2[1];\n\n if (cornerstone4Tag !== CORNERSTONE_4_TAG) {\n return false;\n }\n\n return toolType === ARROW_ANNOTATE;\n};\n\nMeasurementReport.registerTool(ArrowAnnotate);\n\nfunction iota(n) {\n var result = new Array(n);\n for(var i=0; i\n * @license MIT\n */\n\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nvar isBuffer_1 = function (obj) {\n return obj != null && (isBuffer$1(obj) || isSlowBuffer$1(obj) || !!obj._isBuffer)\n};\n\nfunction isBuffer$1 (obj) {\n return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer$1 (obj) {\n return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer$1(obj.slice(0, 0))\n}\n\nvar hasTypedArrays = ((typeof Float64Array) !== \"undefined\");\n\nfunction compare1st(a, b) {\n return a[0] - b[0]\n}\n\nfunction order() {\n var stride = this.stride;\n var terms = new Array(stride.length);\n var i;\n for(i=0; iMath.abs(this.stride[1]))?[1,0]:[0,1]}})\");\n } else if(dimension === 3) {\n code.push(\n\"var s0=Math.abs(this.stride[0]),s1=Math.abs(this.stride[1]),s2=Math.abs(this.stride[2]);\\\nif(s0>s1){\\\nif(s1>s2){\\\nreturn [2,1,0];\\\n}else if(s0>s2){\\\nreturn [1,2,0];\\\n}else{\\\nreturn [1,0,2];\\\n}\\\n}else if(s0>s2){\\\nreturn [2,0,1];\\\n}else if(s2>s1){\\\nreturn [0,1,2];\\\n}else{\\\nreturn [0,2,1];\\\n}}})\");\n }\n } else {\n code.push(\"ORDER})\");\n }\n }\n\n //view.set(i0, ..., v):\n code.push(\n\"proto.set=function \"+className+\"_set(\"+args.join(\",\")+\",v){\");\n if(useGetters) {\n code.push(\"return this.data.set(\"+index_str+\",v)}\");\n } else {\n code.push(\"return this.data[\"+index_str+\"]=v}\");\n }\n\n //view.get(i0, ...):\n code.push(\"proto.get=function \"+className+\"_get(\"+args.join(\",\")+\"){\");\n if(useGetters) {\n code.push(\"return this.data.get(\"+index_str+\")}\");\n } else {\n code.push(\"return this.data[\"+index_str+\"]}\");\n }\n\n //view.index:\n code.push(\n \"proto.index=function \"+className+\"_index(\", args.join(), \"){return \"+index_str+\"}\");\n\n //view.hi():\n code.push(\"proto.hi=function \"+className+\"_hi(\"+args.join(\",\")+\"){return new \"+className+\"(this.data,\"+\n indices.map(function(i) {\n return [\"(typeof i\",i,\"!=='number'||i\",i,\"<0)?this.shape[\", i, \"]:i\", i,\"|0\"].join(\"\")\n }).join(\",\")+\",\"+\n indices.map(function(i) {\n return \"this.stride[\"+i + \"]\"\n }).join(\",\")+\",this.offset)}\");\n\n //view.lo():\n var a_vars = indices.map(function(i) { return \"a\"+i+\"=this.shape[\"+i+\"]\" });\n var c_vars = indices.map(function(i) { return \"c\"+i+\"=this.stride[\"+i+\"]\" });\n code.push(\"proto.lo=function \"+className+\"_lo(\"+args.join(\",\")+\"){var b=this.offset,d=0,\"+a_vars.join(\",\")+\",\"+c_vars.join(\",\"));\n for(var i=0; i=0){\\\nd=i\"+i+\"|0;\\\nb+=c\"+i+\"*d;\\\na\"+i+\"-=d}\");\n }\n code.push(\"return new \"+className+\"(this.data,\"+\n indices.map(function(i) {\n return \"a\"+i\n }).join(\",\")+\",\"+\n indices.map(function(i) {\n return \"c\"+i\n }).join(\",\")+\",b)}\");\n\n //view.step():\n code.push(\"proto.step=function \"+className+\"_step(\"+args.join(\",\")+\"){var \"+\n indices.map(function(i) {\n return \"a\"+i+\"=this.shape[\"+i+\"]\"\n }).join(\",\")+\",\"+\n indices.map(function(i) {\n return \"b\"+i+\"=this.stride[\"+i+\"]\"\n }).join(\",\")+\",c=this.offset,d=0,ceil=Math.ceil\");\n for(var i=0; i=0){c=(c+this.stride[\"+i+\"]*i\"+i+\")|0}else{a.push(this.shape[\"+i+\"]);b.push(this.stride[\"+i+\"])}\");\n }\n code.push(\"var ctor=CTOR_LIST[a.length+1];return ctor(this.data,a,b,c)}\");\n\n //Add return statement\n code.push(\"return function construct_\"+className+\"(data,shape,stride,offset){return new \"+className+\"(data,\"+\n indices.map(function(i) {\n return \"shape[\"+i+\"]\"\n }).join(\",\")+\",\"+\n indices.map(function(i) {\n return \"stride[\"+i+\"]\"\n }).join(\",\")+\",offset)}\");\n\n //Compile procedure\n var procedure = new Function(\"CTOR_LIST\", \"ORDER\", code.join(\"\\n\"));\n return procedure(CACHED_CONSTRUCTORS[dtype], order)\n}\n\nfunction arrayDType(data) {\n if(isBuffer_1(data)) {\n return \"buffer\"\n }\n if(hasTypedArrays) {\n switch(Object.prototype.toString.call(data)) {\n case \"[object Float64Array]\":\n return \"float64\"\n case \"[object Float32Array]\":\n return \"float32\"\n case \"[object Int8Array]\":\n return \"int8\"\n case \"[object Int16Array]\":\n return \"int16\"\n case \"[object Int32Array]\":\n return \"int32\"\n case \"[object Uint8Array]\":\n return \"uint8\"\n case \"[object Uint16Array]\":\n return \"uint16\"\n case \"[object Uint32Array]\":\n return \"uint32\"\n case \"[object Uint8ClampedArray]\":\n return \"uint8_clamped\"\n case \"[object BigInt64Array]\":\n return \"bigint64\"\n case \"[object BigUint64Array]\":\n return \"biguint64\"\n }\n }\n if(Array.isArray(data)) {\n return \"array\"\n }\n return \"generic\"\n}\n\nvar CACHED_CONSTRUCTORS = {\n \"float32\":[],\n \"float64\":[],\n \"int8\":[],\n \"int16\":[],\n \"int32\":[],\n \"uint8\":[],\n \"uint16\":[],\n \"uint32\":[],\n \"array\":[],\n \"uint8_clamped\":[],\n \"bigint64\": [],\n \"biguint64\": [],\n \"buffer\":[],\n \"generic\":[]\n}\n\n;\nfunction wrappedNDArrayCtor(data, shape, stride, offset) {\n if(data === undefined) {\n var ctor = CACHED_CONSTRUCTORS.array[0];\n return ctor([])\n } else if(typeof data === \"number\") {\n data = [data];\n }\n if(shape === undefined) {\n shape = [ data.length ];\n }\n var d = shape.length;\n if(stride === undefined) {\n stride = new Array(d);\n for(var i=d-1, sz=1; i>=0; --i) {\n stride[i] = sz;\n sz *= shape[i];\n }\n }\n if(offset === undefined) {\n offset = 0;\n for(var i=0; i 2 && arguments[2] !== undefined ? arguments[2] : {\n includeSliceSpacing: true\n };\n var toolState = brushData.toolState,\n segments = brushData.segments; // Calculate the dimensions of the data cube.\n\n var image0 = images[0];\n var dims = {\n x: image0.columns,\n y: image0.rows,\n z: images.length\n };\n dims.xy = dims.x * dims.y;\n\n var numSegments = _getSegCount(seg, segments);\n\n if (!numSegments) {\n throw new Error(\"No segments to export!\");\n }\n\n var isMultiframe = image0.imageId.includes(\"?frame\");\n\n var seg = _createSegFromImages(images, isMultiframe, options);\n\n var _getNumberOfFramesPer = _getNumberOfFramesPerSegment(toolState, images, segments),\n referencedFramesPerSegment = _getNumberOfFramesPer.referencedFramesPerSegment,\n segmentIndicies = _getNumberOfFramesPer.segmentIndicies;\n\n var NumberOfFrames = 0;\n\n for (var i = 0; i < referencedFramesPerSegment.length; i++) {\n NumberOfFrames += referencedFramesPerSegment[i].length;\n }\n\n seg.setNumberOfFrames(NumberOfFrames);\n\n for (var _i = 0; _i < segmentIndicies.length; _i++) {\n var segmentIndex = segmentIndicies[_i];\n var referencedFrameIndicies = referencedFramesPerSegment[_i]; // Frame numbers start from 1.\n\n var referencedFrameNumbers = referencedFrameIndicies.map(function (element) {\n return element + 1;\n });\n var segment = segments[segmentIndex];\n seg.addSegment(segment, _extractCornerstoneToolsPixelData(segmentIndex, referencedFrameIndicies, toolState, images, dims), referencedFrameNumbers);\n }\n\n seg.bitPackPixelData();\n var segBlob = datasetToBlob(seg.dataset);\n return segBlob;\n}\n\nfunction _extractCornerstoneToolsPixelData(segmentIndex, referencedFrames, toolState, images, dims) {\n var pixelData = new Uint8Array(dims.xy * referencedFrames.length);\n var pixelDataIndex = 0;\n\n for (var i = 0; i < referencedFrames.length; i++) {\n var frame = referencedFrames[i];\n var imageId = images[frame].imageId;\n var imageIdSpecificToolState = toolState[imageId];\n var brushPixelData = imageIdSpecificToolState.brush.data[segmentIndex].pixelData;\n\n for (var p = 0; p < brushPixelData.length; p++) {\n pixelData[pixelDataIndex] = brushPixelData[p];\n pixelDataIndex++;\n }\n }\n\n return pixelData;\n}\n\nfunction _getNumberOfFramesPerSegment(toolState, images, segments) {\n var segmentIndicies = [];\n var referencedFramesPerSegment = [];\n\n for (var i = 0; i < segments.length; i++) {\n if (segments[i]) {\n segmentIndicies.push(i);\n referencedFramesPerSegment.push([]);\n }\n }\n\n for (var z = 0; z < images.length; z++) {\n var imageId = images[z].imageId;\n var imageIdSpecificToolState = toolState[imageId];\n\n for (var _i2 = 0; _i2 < segmentIndicies.length; _i2++) {\n var segIdx = segmentIndicies[_i2];\n\n if (imageIdSpecificToolState && imageIdSpecificToolState.brush && imageIdSpecificToolState.brush.data && imageIdSpecificToolState.brush.data[segIdx] && imageIdSpecificToolState.brush.data[segIdx].pixelData) {\n referencedFramesPerSegment[_i2].push(z);\n }\n }\n }\n\n return {\n referencedFramesPerSegment: referencedFramesPerSegment,\n segmentIndicies: segmentIndicies\n };\n}\n\nfunction _getSegCount(seg, segments) {\n var numSegments = 0;\n\n for (var i = 0; i < segments.length; i++) {\n if (segments[i]) {\n numSegments++;\n }\n }\n\n return numSegments;\n}\n/**\n * _createSegFromImages - description\n *\n * @param {Object[]} images An array of the cornerstone image objects.\n * @param {Boolean} isMultiframe Whether the images are multiframe.\n * @returns {Object} The Seg derived dataSet.\n */\n\n\nfunction _createSegFromImages(images, isMultiframe, options) {\n var datasets = [];\n\n if (isMultiframe) {\n var image = images[0];\n var arrayBuffer = image.data.byteArray.buffer;\n var dicomData = DicomMessage.readFile(arrayBuffer);\n var dataset = DicomMetaDictionary.naturalizeDataset(dicomData.dict);\n dataset._meta = DicomMetaDictionary.namifyDataset(dicomData.meta);\n datasets.push(dataset);\n } else {\n for (var i = 0; i < images.length; i++) {\n var _image = images[i];\n var _arrayBuffer = _image.data.byteArray.buffer;\n\n var _dicomData = DicomMessage.readFile(_arrayBuffer);\n\n var _dataset = DicomMetaDictionary.naturalizeDataset(_dicomData.dict);\n\n _dataset._meta = DicomMetaDictionary.namifyDataset(_dicomData.meta);\n datasets.push(_dataset);\n }\n }\n\n var multiframe = Normalizer.normalizeToDataset(datasets);\n return new Segmentation([multiframe], options);\n}\n/**\n * generateToolState - Given a set of cornrstoneTools imageIds and a Segmentation buffer,\n * derive cornerstoneTools toolState and brush metadata.\n *\n * @param {string[]} imageIds An array of the imageIds.\n * @param {ArrayBuffer} arrayBuffer The SEG arrayBuffer.\n * @param {*} metadataProvider\n * @returns {Object} The toolState and an object from which the\n * segment metadata can be derived.\n */\n\n\nfunction generateToolState(imageIds, arrayBuffer, metadataProvider) {\n var dicomData = DicomMessage.readFile(arrayBuffer);\n var dataset = DicomMetaDictionary.naturalizeDataset(dicomData.dict);\n dataset._meta = DicomMetaDictionary.namifyDataset(dicomData.meta);\n var multiframe = Normalizer.normalizeToDataset([dataset]);\n var imagePlaneModule = metadataProvider.get(\"imagePlaneModule\", imageIds[0]);\n\n if (!imagePlaneModule) {\n console.warn(\"Insufficient metadata, imagePlaneModule missing.\");\n }\n\n var ImageOrientationPatient = Array.isArray(imagePlaneModule.rowCosines) ? [].concat(_toConsumableArray(imagePlaneModule.rowCosines), _toConsumableArray(imagePlaneModule.columnCosines)) : [imagePlaneModule.rowCosines.x, imagePlaneModule.rowCosines.y, imagePlaneModule.rowCosines.z, imagePlaneModule.columnCosines.x, imagePlaneModule.columnCosines.y, imagePlaneModule.columnCosines.z]; // Get IOP from ref series, compute supported orientations:\n\n var validOrientations = getValidOrientations(ImageOrientationPatient);\n var SharedFunctionalGroupsSequence = multiframe.SharedFunctionalGroupsSequence;\n var sharedImageOrientationPatient = SharedFunctionalGroupsSequence.PlaneOrientationSequence ? SharedFunctionalGroupsSequence.PlaneOrientationSequence.ImageOrientationPatient : undefined;\n var sliceLength = multiframe.Columns * multiframe.Rows;\n var segMetadata = getSegmentMetadata(multiframe);\n var pixelData = unpackPixelData(multiframe);\n var PerFrameFunctionalGroupsSequence = multiframe.PerFrameFunctionalGroupsSequence;\n var toolState = {};\n var inPlane = true;\n\n for (var i = 0; i < PerFrameFunctionalGroupsSequence.length; i++) {\n var PerFrameFunctionalGroups = PerFrameFunctionalGroupsSequence[i];\n var ImageOrientationPatientI = sharedImageOrientationPatient || PerFrameFunctionalGroups.PlaneOrientationSequence.ImageOrientationPatient;\n var pixelDataI2D = ndarray(new Uint8Array(pixelData.buffer, i * sliceLength, sliceLength), [multiframe.Rows, multiframe.Columns]);\n var alignedPixelDataI = alignPixelDataWithSourceData(pixelDataI2D, ImageOrientationPatientI, validOrientations);\n\n if (!alignedPixelDataI) {\n console.warn(\"This segmentation object is not in-plane with the source data. Bailing out of IO. It'd be better to render this with vtkjs. \");\n inPlane = false;\n break;\n }\n\n var segmentIndex = PerFrameFunctionalGroups.SegmentIdentificationSequence.ReferencedSegmentNumber - 1;\n var SourceImageSequence = void 0;\n\n if (SharedFunctionalGroupsSequence.DerivationImageSequence && SharedFunctionalGroupsSequence.DerivationImageSequence.SourceImageSequence) {\n SourceImageSequence = SharedFunctionalGroupsSequence.DerivationImageSequence.SourceImageSequence[i];\n } else {\n SourceImageSequence = PerFrameFunctionalGroups.DerivationImageSequence.SourceImageSequence;\n }\n\n var imageId = getImageIdOfSourceImage(SourceImageSequence, imageIds, metadataProvider);\n addImageIdSpecificBrushToolState(toolState, imageId, segmentIndex, alignedPixelDataI);\n }\n\n if (!inPlane) {\n return;\n }\n\n return {\n toolState: toolState,\n segMetadata: segMetadata\n };\n}\n/**\n * unpackPixelData - Unpacks bitpacked pixelData if the Segmentation is BINARY.\n *\n * @param {Object} multiframe The multiframe dataset.\n * @return {Uint8Array} The unpacked pixelData.\n */\n\n\nfunction unpackPixelData(multiframe) {\n var segType = multiframe.SegmentationType;\n\n if (segType === \"BINARY\") {\n return BitArray.unpack(multiframe.PixelData);\n }\n\n var pixelData = new Uint8Array(multiframe.PixelData);\n var max = multiframe.MaximumFractionalValue;\n var onlyMaxAndZero = pixelData.find(function (element) {\n return element !== 0 && element !== max;\n }) === undefined;\n\n if (!onlyMaxAndZero) {\n log.warn(\"This is a fractional segmentation, which is not currently supported.\");\n return;\n }\n\n log.warn(\"This segmentation object is actually binary... processing as such.\");\n return pixelData;\n}\n/**\n * addImageIdSpecificBrushToolState - Adds brush pixel data to cornerstoneTools\n * formatted toolState object.\n *\n * @param {Object} toolState The toolState object to modify\n * @param {String} imageId The imageId of the toolState to add the data.\n * @param {Number} segmentIndex The index of the segment data being added.\n * @param {Ndarray} pixelData2D The pixelData in Ndarry 2D format.\n */\n\n\nfunction addImageIdSpecificBrushToolState(toolState, imageId, segmentIndex, pixelData2D) {\n if (!toolState[imageId]) {\n toolState[imageId] = {};\n toolState[imageId].brush = {};\n toolState[imageId].brush.data = [];\n } else if (!toolState[imageId].brush) {\n toolState[imageId].brush = {};\n toolState[imageId].brush.data = [];\n } else if (!toolState[imageId].brush.data) {\n toolState[imageId].brush.data = [];\n }\n\n toolState[imageId].brush.data[segmentIndex] = {};\n var brushDataI = toolState[imageId].brush.data[segmentIndex];\n brushDataI.pixelData = new Uint8Array(pixelData2D.data.length);\n var cToolsPixelData = brushDataI.pixelData;\n\n var _pixelData2D$shape = _slicedToArray(pixelData2D.shape, 2),\n rows = _pixelData2D$shape[0],\n cols = _pixelData2D$shape[1];\n\n for (var p = 0; p < cToolsPixelData.length; p++) {\n if (pixelData2D.data[p]) {\n cToolsPixelData[p] = 1;\n } else {\n cToolsPixelData[p] = 0;\n }\n }\n}\n/**\n * getImageIdOfSourceImage - Returns the Cornerstone imageId of the source image.\n *\n * @param {Object} SourceImageSequence Sequence describing the source image.\n * @param {String[]} imageIds A list of imageIds.\n * @param {Object} metadataProvider A Cornerstone metadataProvider to query\n * metadata from imageIds.\n * @return {String} The corresponding imageId.\n */\n\n\nfunction getImageIdOfSourceImage(SourceImageSequence, imageIds, metadataProvider) {\n var ReferencedSOPInstanceUID = SourceImageSequence.ReferencedSOPInstanceUID,\n ReferencedFrameNumber = SourceImageSequence.ReferencedFrameNumber;\n return ReferencedFrameNumber ? getImageIdOfReferencedFrame(ReferencedSOPInstanceUID, ReferencedFrameNumber, imageIds, metadataProvider) : getImageIdOfReferencedSingleFramedSOPInstance(ReferencedSOPInstanceUID, imageIds, metadataProvider);\n}\n/**\n * getImageIdOfReferencedSingleFramedSOPInstance - Returns the imageId\n * corresponding to the specified sopInstanceUid for single-frame images.\n *\n * @param {String} sopInstanceUid The sopInstanceUid of the desired image.\n * @param {String[]} imageIds The list of imageIds.\n * @param {Object} metadataProvider The metadataProvider to obtain sopInstanceUids\n * from the cornerstone imageIds.\n * @return {String} The imageId that corresponds to the sopInstanceUid.\n */\n\n\nfunction getImageIdOfReferencedSingleFramedSOPInstance(sopInstanceUid, imageIds, metadataProvider) {\n return imageIds.find(function (imageId) {\n var sopCommonModule = metadataProvider.get(\"sopCommonModule\", imageId);\n\n if (!sopCommonModule) {\n return;\n }\n\n return sopCommonModule.sopInstanceUID === sopInstanceUid;\n });\n}\n/**\n * getImageIdOfReferencedFrame - Returns the imageId corresponding to the\n * specified sopInstanceUid and frameNumber for multi-frame images.\n *\n * @param {String} sopInstanceUid The sopInstanceUid of the desired image.\n * @param {Number} frameNumber The frame number.\n * @param {String} imageIds The list of imageIds.\n * @param {Object} metadataProvider The metadataProvider to obtain sopInstanceUids\n * from the cornerstone imageIds.\n * @return {String} The imageId that corresponds to the sopInstanceUid.\n */\n\n\nfunction getImageIdOfReferencedFrame(sopInstanceUid, frameNumber, imageIds, metadataProvider) {\n var imageId = imageIds.find(function (imageId) {\n var sopCommonModule = metadataProvider.get(\"sopCommonModule\", imageId);\n\n if (!sopCommonModule) {\n return;\n }\n\n var imageIdFrameNumber = Number(imageId.split(\"frame=\")[1]);\n return (//frameNumber is zero indexed for cornerstoneWADOImageLoader image Ids.\n sopCommonModule.sopInstanceUID === sopInstanceUid && imageIdFrameNumber === frameNumber - 1\n );\n });\n return imageId;\n}\n/**\n * getValidOrientations - returns an array of valid orientations.\n *\n * @param {Number[6]} iop The row (0..2) an column (3..5) direction cosines.\n * @return {Number[8][6]} An array of valid orientations.\n */\n\n\nfunction getValidOrientations(iop) {\n var orientations = []; // [0, 1, 2]: 0, 0hf, 0vf\n // [3, 4, 5]: 90, 90hf, 90vf\n // [6, 7]: 180, 270\n\n orientations[0] = iop;\n orientations[1] = flipImageOrientationPatient.h(iop);\n orientations[2] = flipImageOrientationPatient.v(iop);\n var iop90 = rotateDirectionCosinesInPlane(iop, Math.PI / 2);\n orientations[3] = iop90;\n orientations[4] = flipImageOrientationPatient.h(iop90);\n orientations[5] = flipImageOrientationPatient.v(iop90);\n orientations[6] = rotateDirectionCosinesInPlane(iop, Math.PI);\n orientations[7] = rotateDirectionCosinesInPlane(iop, 1.5 * Math.PI);\n return orientations;\n}\n/**\n * alignPixelDataWithSourceData -\n *\n * @param {Ndarray} pixelData2D The data to align.\n * @param {Number[6]} iop The orientation of the image slice.\n * @param {Number[8][6]} orientations An array of valid imageOrientationPatient values.\n * @return {Ndarray} The aligned pixelData.\n */\n\n\nfunction alignPixelDataWithSourceData(pixelData2D, iop, orientations) {\n if (compareIOP(iop, orientations[0])) {\n //Same orientation.\n return pixelData2D;\n } else if (compareIOP(iop, orientations[1])) {\n //Flipped vertically.\n return flipMatrix2D.v(pixelData2D);\n } else if (compareIOP(iop, orientations[2])) {\n //Flipped horizontally.\n return flipMatrix2D.h(pixelData2D);\n } else if (compareIOP(iop, orientations[3])) {\n //Rotated 90 degrees.\n return rotateMatrix902D(pixelData2D);\n } else if (compareIOP(iop, orientations[4])) {\n //Rotated 90 degrees and fliped horizontally.\n return flipMatrix2D.h(rotateMatrix902D(pixelData2D));\n } else if (compareIOP(iop, orientations[5])) {\n //Rotated 90 degrees and fliped vertically.\n return flipMatrix2D.v(rotateMatrix902D(pixelData2D));\n } else if (compareIOP(iop, orientations[6])) {\n //Rotated 180 degrees. // TODO -> Do this more effeciently, there is a 1:1 mapping like 90 degree rotation.\n return rotateMatrix902D(rotateMatrix902D(pixelData2D));\n } else if (compareIOP(iop, orientations[7])) {\n //Rotated 270 degrees. // TODO -> Do this more effeciently, there is a 1:1 mapping like 90 degree rotation.\n return rotateMatrix902D(rotateMatrix902D(rotateMatrix902D(pixelData2D)));\n }\n}\n\nvar dx = 1e-5;\n/**\n * compareIOP - Returns true if iop1 and iop2 are equal\n * within a tollerance, dx.\n *\n * @param {Number[6]} iop1 An ImageOrientationPatient array.\n * @param {Number[6]} iop2 An ImageOrientationPatient array.\n * @return {Boolean} True if iop1 and iop2 are equal.\n */\n\nfunction compareIOP(iop1, iop2) {\n return Math.abs(iop1[0] - iop2[0]) < dx && Math.abs(iop1[1] - iop2[1]) < dx && Math.abs(iop1[2] - iop2[2]) < dx && Math.abs(iop1[3] - iop2[3]) < dx && Math.abs(iop1[4] - iop2[4]) < dx && Math.abs(iop1[5] - iop2[5]) < dx;\n}\n\nfunction getSegmentMetadata(multiframe) {\n var data = [];\n var segmentSequence = multiframe.SegmentSequence;\n\n if (Array.isArray(segmentSequence)) {\n for (var segIdx = 0; segIdx < segmentSequence.length; segIdx++) {\n data.push(segmentSequence[segIdx]);\n }\n } else {\n // Only one segment, will be stored as an object.\n data.push(segmentSequence);\n }\n\n return {\n seriesInstanceUid: multiframe.ReferencedSeriesSequence.SeriesInstanceUID,\n data: data\n };\n}\n\n/**\r\n * Common utilities\r\n * @module glMatrix\r\n */\n// Configuration Constants\nvar EPSILON = 0.000001;\nvar ARRAY_TYPE = typeof Float32Array !== 'undefined' ? Float32Array : Array;\nvar RANDOM = Math.random;\nif (!Math.hypot) Math.hypot = function () {\n var y = 0,\n i = arguments.length;\n\n while (i--) {\n y += arguments[i] * arguments[i];\n }\n\n return Math.sqrt(y);\n};\n\n/**\r\n * 3x3 Matrix\r\n * @module mat3\r\n */\n\n/**\r\n * Creates a new identity mat3\r\n *\r\n * @returns {mat3} a new 3x3 matrix\r\n */\n\nfunction create() {\n var out = new ARRAY_TYPE(9);\n\n if (ARRAY_TYPE != Float32Array) {\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n }\n\n out[0] = 1;\n out[4] = 1;\n out[8] = 1;\n return out;\n}\n\n/**\r\n * 3 Dimensional Vector\r\n * @module vec3\r\n */\n\n/**\r\n * Creates a new, empty vec3\r\n *\r\n * @returns {vec3} a new 3D vector\r\n */\n\nfunction create$1() {\n var out = new ARRAY_TYPE(3);\n\n if (ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n }\n\n return out;\n}\n/**\r\n * Creates a new vec3 initialized with values from an existing vector\r\n *\r\n * @param {ReadonlyVec3} a vector to clone\r\n * @returns {vec3} a new 3D vector\r\n */\n\nfunction clone(a) {\n var out = new ARRAY_TYPE(3);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n}\n/**\r\n * Calculates the length of a vec3\r\n *\r\n * @param {ReadonlyVec3} a vector to calculate length of\r\n * @returns {Number} length of a\r\n */\n\nfunction length(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n return Math.hypot(x, y, z);\n}\n/**\r\n * Creates a new vec3 initialized with the given values\r\n *\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @param {Number} z Z component\r\n * @returns {vec3} a new 3D vector\r\n */\n\nfunction fromValues(x, y, z) {\n var out = new ARRAY_TYPE(3);\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n}\n/**\r\n * Copy the values from one vec3 to another\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the source vector\r\n * @returns {vec3} out\r\n */\n\nfunction copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n}\n/**\r\n * Set the components of a vec3 to the given values\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @param {Number} z Z component\r\n * @returns {vec3} out\r\n */\n\nfunction set(out, x, y, z) {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n}\n/**\r\n * Adds two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nfunction add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n return out;\n}\n/**\r\n * Subtracts vector b from vector a\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nfunction subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n return out;\n}\n/**\r\n * Multiplies two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nfunction multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n out[2] = a[2] * b[2];\n return out;\n}\n/**\r\n * Divides two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nfunction divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n out[2] = a[2] / b[2];\n return out;\n}\n/**\r\n * Math.ceil the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a vector to ceil\r\n * @returns {vec3} out\r\n */\n\nfunction ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n out[2] = Math.ceil(a[2]);\n return out;\n}\n/**\r\n * Math.floor the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a vector to floor\r\n * @returns {vec3} out\r\n */\n\nfunction floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n out[2] = Math.floor(a[2]);\n return out;\n}\n/**\r\n * Returns the minimum of two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nfunction min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n out[2] = Math.min(a[2], b[2]);\n return out;\n}\n/**\r\n * Returns the maximum of two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nfunction max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n out[2] = Math.max(a[2], b[2]);\n return out;\n}\n/**\r\n * Math.round the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a vector to round\r\n * @returns {vec3} out\r\n */\n\nfunction round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n out[2] = Math.round(a[2]);\n return out;\n}\n/**\r\n * Scales a vec3 by a scalar number\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the vector to scale\r\n * @param {Number} b amount to scale the vector by\r\n * @returns {vec3} out\r\n */\n\nfunction scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n return out;\n}\n/**\r\n * Adds two vec3's after scaling the second operand by a scalar value\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @param {Number} scale the amount to scale b by before adding\r\n * @returns {vec3} out\r\n */\n\nfunction scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n return out;\n}\n/**\r\n * Calculates the euclidian distance between two vec3's\r\n *\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {Number} distance between a and b\r\n */\n\nfunction distance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n return Math.hypot(x, y, z);\n}\n/**\r\n * Calculates the squared euclidian distance between two vec3's\r\n *\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {Number} squared distance between a and b\r\n */\n\nfunction squaredDistance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n return x * x + y * y + z * z;\n}\n/**\r\n * Calculates the squared length of a vec3\r\n *\r\n * @param {ReadonlyVec3} a vector to calculate squared length of\r\n * @returns {Number} squared length of a\r\n */\n\nfunction squaredLength(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n return x * x + y * y + z * z;\n}\n/**\r\n * Negates the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a vector to negate\r\n * @returns {vec3} out\r\n */\n\nfunction negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n return out;\n}\n/**\r\n * Returns the inverse of the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a vector to invert\r\n * @returns {vec3} out\r\n */\n\nfunction inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n out[2] = 1.0 / a[2];\n return out;\n}\n/**\r\n * Normalize a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a vector to normalize\r\n * @returns {vec3} out\r\n */\n\nfunction normalize(out, a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var len = x * x + y * y + z * z;\n\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n }\n\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n out[2] = a[2] * len;\n return out;\n}\n/**\r\n * Calculates the dot product of two vec3's\r\n *\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {Number} dot product of a and b\r\n */\n\nfunction dot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n/**\r\n * Computes the cross product of two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nfunction cross(out, a, b) {\n var ax = a[0],\n ay = a[1],\n az = a[2];\n var bx = b[0],\n by = b[1],\n bz = b[2];\n out[0] = ay * bz - az * by;\n out[1] = az * bx - ax * bz;\n out[2] = ax * by - ay * bx;\n return out;\n}\n/**\r\n * Performs a linear interpolation between two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec3} out\r\n */\n\nfunction lerp(out, a, b, t) {\n var ax = a[0];\n var ay = a[1];\n var az = a[2];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n out[2] = az + t * (b[2] - az);\n return out;\n}\n/**\r\n * Performs a hermite interpolation with two control points\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @param {ReadonlyVec3} c the third operand\r\n * @param {ReadonlyVec3} d the fourth operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec3} out\r\n */\n\nfunction hermite(out, a, b, c, d, t) {\n var factorTimes2 = t * t;\n var factor1 = factorTimes2 * (2 * t - 3) + 1;\n var factor2 = factorTimes2 * (t - 2) + t;\n var factor3 = factorTimes2 * (t - 1);\n var factor4 = factorTimes2 * (3 - 2 * t);\n out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n return out;\n}\n/**\r\n * Performs a bezier interpolation with two control points\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @param {ReadonlyVec3} c the third operand\r\n * @param {ReadonlyVec3} d the fourth operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec3} out\r\n */\n\nfunction bezier(out, a, b, c, d, t) {\n var inverseFactor = 1 - t;\n var inverseFactorTimesTwo = inverseFactor * inverseFactor;\n var factorTimes2 = t * t;\n var factor1 = inverseFactorTimesTwo * inverseFactor;\n var factor2 = 3 * t * inverseFactorTimesTwo;\n var factor3 = 3 * factorTimes2 * inverseFactor;\n var factor4 = factorTimes2 * t;\n out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n return out;\n}\n/**\r\n * Generates a random vector with the given scale\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\r\n * @returns {vec3} out\r\n */\n\nfunction random(out, scale) {\n scale = scale || 1.0;\n var r = RANDOM() * 2.0 * Math.PI;\n var z = RANDOM() * 2.0 - 1.0;\n var zScale = Math.sqrt(1.0 - z * z) * scale;\n out[0] = Math.cos(r) * zScale;\n out[1] = Math.sin(r) * zScale;\n out[2] = z * scale;\n return out;\n}\n/**\r\n * Transforms the vec3 with a mat4.\r\n * 4th vector component is implicitly '1'\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the vector to transform\r\n * @param {ReadonlyMat4} m matrix to transform with\r\n * @returns {vec3} out\r\n */\n\nfunction transformMat4(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2];\n var w = m[3] * x + m[7] * y + m[11] * z + m[15];\n w = w || 1.0;\n out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\n out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\n out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\n return out;\n}\n/**\r\n * Transforms the vec3 with a mat3.\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the vector to transform\r\n * @param {ReadonlyMat3} m the 3x3 matrix to transform with\r\n * @returns {vec3} out\r\n */\n\nfunction transformMat3(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2];\n out[0] = x * m[0] + y * m[3] + z * m[6];\n out[1] = x * m[1] + y * m[4] + z * m[7];\n out[2] = x * m[2] + y * m[5] + z * m[8];\n return out;\n}\n/**\r\n * Transforms the vec3 with a quat\r\n * Can also be used for dual quaternions. (Multiply it with the real part)\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the vector to transform\r\n * @param {ReadonlyQuat} q quaternion to transform with\r\n * @returns {vec3} out\r\n */\n\nfunction transformQuat(out, a, q) {\n // benchmarks: https://jsperf.com/quaternion-transform-vec3-implementations-fixed\n var qx = q[0],\n qy = q[1],\n qz = q[2],\n qw = q[3];\n var x = a[0],\n y = a[1],\n z = a[2]; // var qvec = [qx, qy, qz];\n // var uv = vec3.cross([], qvec, a);\n\n var uvx = qy * z - qz * y,\n uvy = qz * x - qx * z,\n uvz = qx * y - qy * x; // var uuv = vec3.cross([], qvec, uv);\n\n var uuvx = qy * uvz - qz * uvy,\n uuvy = qz * uvx - qx * uvz,\n uuvz = qx * uvy - qy * uvx; // vec3.scale(uv, uv, 2 * w);\n\n var w2 = qw * 2;\n uvx *= w2;\n uvy *= w2;\n uvz *= w2; // vec3.scale(uuv, uuv, 2);\n\n uuvx *= 2;\n uuvy *= 2;\n uuvz *= 2; // return vec3.add(out, a, vec3.add(out, uv, uuv));\n\n out[0] = x + uvx + uuvx;\n out[1] = y + uvy + uuvy;\n out[2] = z + uvz + uuvz;\n return out;\n}\n/**\r\n * Rotate a 3D vector around the x-axis\r\n * @param {vec3} out The receiving vec3\r\n * @param {ReadonlyVec3} a The vec3 point to rotate\r\n * @param {ReadonlyVec3} b The origin of the rotation\r\n * @param {Number} rad The angle of rotation in radians\r\n * @returns {vec3} out\r\n */\n\nfunction rotateX(out, a, b, rad) {\n var p = [],\n r = []; //Translate point to the origin\n\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2]; //perform rotation\n\n r[0] = p[0];\n r[1] = p[1] * Math.cos(rad) - p[2] * Math.sin(rad);\n r[2] = p[1] * Math.sin(rad) + p[2] * Math.cos(rad); //translate to correct position\n\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n/**\r\n * Rotate a 3D vector around the y-axis\r\n * @param {vec3} out The receiving vec3\r\n * @param {ReadonlyVec3} a The vec3 point to rotate\r\n * @param {ReadonlyVec3} b The origin of the rotation\r\n * @param {Number} rad The angle of rotation in radians\r\n * @returns {vec3} out\r\n */\n\nfunction rotateY(out, a, b, rad) {\n var p = [],\n r = []; //Translate point to the origin\n\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2]; //perform rotation\n\n r[0] = p[2] * Math.sin(rad) + p[0] * Math.cos(rad);\n r[1] = p[1];\n r[2] = p[2] * Math.cos(rad) - p[0] * Math.sin(rad); //translate to correct position\n\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n/**\r\n * Rotate a 3D vector around the z-axis\r\n * @param {vec3} out The receiving vec3\r\n * @param {ReadonlyVec3} a The vec3 point to rotate\r\n * @param {ReadonlyVec3} b The origin of the rotation\r\n * @param {Number} rad The angle of rotation in radians\r\n * @returns {vec3} out\r\n */\n\nfunction rotateZ(out, a, b, rad) {\n var p = [],\n r = []; //Translate point to the origin\n\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2]; //perform rotation\n\n r[0] = p[0] * Math.cos(rad) - p[1] * Math.sin(rad);\n r[1] = p[0] * Math.sin(rad) + p[1] * Math.cos(rad);\n r[2] = p[2]; //translate to correct position\n\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n/**\r\n * Get the angle between two 3D vectors\r\n * @param {ReadonlyVec3} a The first operand\r\n * @param {ReadonlyVec3} b The second operand\r\n * @returns {Number} The angle in radians\r\n */\n\nfunction angle(a, b) {\n var ax = a[0],\n ay = a[1],\n az = a[2],\n bx = b[0],\n by = b[1],\n bz = b[2],\n mag1 = Math.sqrt(ax * ax + ay * ay + az * az),\n mag2 = Math.sqrt(bx * bx + by * by + bz * bz),\n mag = mag1 * mag2,\n cosine = mag && dot(a, b) / mag;\n return Math.acos(Math.min(Math.max(cosine, -1), 1));\n}\n/**\r\n * Set the components of a vec3 to zero\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @returns {vec3} out\r\n */\n\nfunction zero$2(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n out[2] = 0.0;\n return out;\n}\n/**\r\n * Returns a string representation of a vector\r\n *\r\n * @param {ReadonlyVec3} a vector to represent as a string\r\n * @returns {String} string representation of the vector\r\n */\n\nfunction str(a) {\n return \"vec3(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \")\";\n}\n/**\r\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\r\n *\r\n * @param {ReadonlyVec3} a The first vector.\r\n * @param {ReadonlyVec3} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\n\nfunction exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];\n}\n/**\r\n * Returns whether or not the vectors have approximately the same elements in the same position.\r\n *\r\n * @param {ReadonlyVec3} a The first vector.\r\n * @param {ReadonlyVec3} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\n\nfunction equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2];\n return Math.abs(a0 - b0) <= EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2));\n}\n/**\r\n * Alias for {@link vec3.subtract}\r\n * @function\r\n */\n\nvar sub = subtract;\n/**\r\n * Alias for {@link vec3.multiply}\r\n * @function\r\n */\n\nvar mul = multiply;\n/**\r\n * Alias for {@link vec3.divide}\r\n * @function\r\n */\n\nvar div = divide;\n/**\r\n * Alias for {@link vec3.distance}\r\n * @function\r\n */\n\nvar dist = distance;\n/**\r\n * Alias for {@link vec3.squaredDistance}\r\n * @function\r\n */\n\nvar sqrDist = squaredDistance;\n/**\r\n * Alias for {@link vec3.length}\r\n * @function\r\n */\n\nvar len = length;\n/**\r\n * Alias for {@link vec3.squaredLength}\r\n * @function\r\n */\n\nvar sqrLen = squaredLength;\n/**\r\n * Perform some operation over an array of vec3s.\r\n *\r\n * @param {Array} a the array of vectors to iterate over\r\n * @param {Number} stride Number of elements between the start of each vec3. If 0 assumes tightly packed\r\n * @param {Number} offset Number of elements to skip at the beginning of the array\r\n * @param {Number} count Number of vec3s to iterate over. If 0 iterates over entire array\r\n * @param {Function} fn Function to call for each vector in the array\r\n * @param {Object} [arg] additional argument to pass to fn\r\n * @returns {Array} a\r\n * @function\r\n */\n\nvar forEach = function () {\n var vec = create$1();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n\n if (!stride) {\n stride = 3;\n }\n\n if (!offset) {\n offset = 0;\n }\n\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n vec[2] = a[i + 2];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n a[i + 2] = vec[2];\n }\n\n return a;\n };\n}();\n\nvar vec3 = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tcreate: create$1,\n\tclone: clone,\n\tlength: length,\n\tfromValues: fromValues,\n\tcopy: copy,\n\tset: set,\n\tadd: add,\n\tsubtract: subtract,\n\tmultiply: multiply,\n\tdivide: divide,\n\tceil: ceil,\n\tfloor: floor,\n\tmin: min,\n\tmax: max,\n\tround: round,\n\tscale: scale,\n\tscaleAndAdd: scaleAndAdd,\n\tdistance: distance,\n\tsquaredDistance: squaredDistance,\n\tsquaredLength: squaredLength,\n\tnegate: negate,\n\tinverse: inverse,\n\tnormalize: normalize,\n\tdot: dot,\n\tcross: cross,\n\tlerp: lerp,\n\thermite: hermite,\n\tbezier: bezier,\n\trandom: random,\n\ttransformMat4: transformMat4,\n\ttransformMat3: transformMat3,\n\ttransformQuat: transformQuat,\n\trotateX: rotateX,\n\trotateY: rotateY,\n\trotateZ: rotateZ,\n\tangle: angle,\n\tzero: zero$2,\n\tstr: str,\n\texactEquals: exactEquals,\n\tequals: equals,\n\tsub: sub,\n\tmul: mul,\n\tdiv: div,\n\tdist: dist,\n\tsqrDist: sqrDist,\n\tlen: len,\n\tsqrLen: sqrLen,\n\tforEach: forEach\n});\n\n/**\r\n * 4 Dimensional Vector\r\n * @module vec4\r\n */\n\n/**\r\n * Creates a new, empty vec4\r\n *\r\n * @returns {vec4} a new 4D vector\r\n */\n\nfunction create$2() {\n var out = new ARRAY_TYPE(4);\n\n if (ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n }\n\n return out;\n}\n/**\r\n * Normalize a vec4\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a vector to normalize\r\n * @returns {vec4} out\r\n */\n\nfunction normalize$1(out, a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var w = a[3];\n var len = x * x + y * y + z * z + w * w;\n\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n }\n\n out[0] = x * len;\n out[1] = y * len;\n out[2] = z * len;\n out[3] = w * len;\n return out;\n}\n/**\r\n * Perform some operation over an array of vec4s.\r\n *\r\n * @param {Array} a the array of vectors to iterate over\r\n * @param {Number} stride Number of elements between the start of each vec4. If 0 assumes tightly packed\r\n * @param {Number} offset Number of elements to skip at the beginning of the array\r\n * @param {Number} count Number of vec4s to iterate over. If 0 iterates over entire array\r\n * @param {Function} fn Function to call for each vector in the array\r\n * @param {Object} [arg] additional argument to pass to fn\r\n * @returns {Array} a\r\n * @function\r\n */\n\nvar forEach$1 = function () {\n var vec = create$2();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n\n if (!stride) {\n stride = 4;\n }\n\n if (!offset) {\n offset = 0;\n }\n\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n vec[2] = a[i + 2];\n vec[3] = a[i + 3];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n a[i + 2] = vec[2];\n a[i + 3] = vec[3];\n }\n\n return a;\n };\n}();\n\n/**\r\n * Quaternion\r\n * @module quat\r\n */\n\n/**\r\n * Creates a new identity quat\r\n *\r\n * @returns {quat} a new quaternion\r\n */\n\nfunction create$3() {\n var out = new ARRAY_TYPE(4);\n\n if (ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n }\n\n out[3] = 1;\n return out;\n}\n/**\r\n * Sets a quat from the given angle and rotation axis,\r\n * then returns it.\r\n *\r\n * @param {quat} out the receiving quaternion\r\n * @param {ReadonlyVec3} axis the axis around which to rotate\r\n * @param {Number} rad the angle in radians\r\n * @returns {quat} out\r\n **/\n\nfunction setAxisAngle(out, axis, rad) {\n rad = rad * 0.5;\n var s = Math.sin(rad);\n out[0] = s * axis[0];\n out[1] = s * axis[1];\n out[2] = s * axis[2];\n out[3] = Math.cos(rad);\n return out;\n}\n/**\r\n * Performs a spherical linear interpolation between two quat\r\n *\r\n * @param {quat} out the receiving quaternion\r\n * @param {ReadonlyQuat} a the first operand\r\n * @param {ReadonlyQuat} b the second operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {quat} out\r\n */\n\nfunction slerp(out, a, b, t) {\n // benchmarks:\n // http://jsperf.com/quaternion-slerp-implementations\n var ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n var bx = b[0],\n by = b[1],\n bz = b[2],\n bw = b[3];\n var omega, cosom, sinom, scale0, scale1; // calc cosine\n\n cosom = ax * bx + ay * by + az * bz + aw * bw; // adjust signs (if necessary)\n\n if (cosom < 0.0) {\n cosom = -cosom;\n bx = -bx;\n by = -by;\n bz = -bz;\n bw = -bw;\n } // calculate coefficients\n\n\n if (1.0 - cosom > EPSILON) {\n // standard case (slerp)\n omega = Math.acos(cosom);\n sinom = Math.sin(omega);\n scale0 = Math.sin((1.0 - t) * omega) / sinom;\n scale1 = Math.sin(t * omega) / sinom;\n } else {\n // \"from\" and \"to\" quaternions are very close\n // ... so we can do a linear interpolation\n scale0 = 1.0 - t;\n scale1 = t;\n } // calculate final values\n\n\n out[0] = scale0 * ax + scale1 * bx;\n out[1] = scale0 * ay + scale1 * by;\n out[2] = scale0 * az + scale1 * bz;\n out[3] = scale0 * aw + scale1 * bw;\n return out;\n}\n/**\r\n * Creates a quaternion from the given 3x3 rotation matrix.\r\n *\r\n * NOTE: The resultant quaternion is not normalized, so you should be sure\r\n * to renormalize the quaternion yourself where necessary.\r\n *\r\n * @param {quat} out the receiving quaternion\r\n * @param {ReadonlyMat3} m rotation matrix\r\n * @returns {quat} out\r\n * @function\r\n */\n\nfunction fromMat3(out, m) {\n // Algorithm in Ken Shoemake's article in 1987 SIGGRAPH course notes\n // article \"Quaternion Calculus and Fast Animation\".\n var fTrace = m[0] + m[4] + m[8];\n var fRoot;\n\n if (fTrace > 0.0) {\n // |w| > 1/2, may as well choose w > 1/2\n fRoot = Math.sqrt(fTrace + 1.0); // 2w\n\n out[3] = 0.5 * fRoot;\n fRoot = 0.5 / fRoot; // 1/(4w)\n\n out[0] = (m[5] - m[7]) * fRoot;\n out[1] = (m[6] - m[2]) * fRoot;\n out[2] = (m[1] - m[3]) * fRoot;\n } else {\n // |w| <= 1/2\n var i = 0;\n if (m[4] > m[0]) i = 1;\n if (m[8] > m[i * 3 + i]) i = 2;\n var j = (i + 1) % 3;\n var k = (i + 2) % 3;\n fRoot = Math.sqrt(m[i * 3 + i] - m[j * 3 + j] - m[k * 3 + k] + 1.0);\n out[i] = 0.5 * fRoot;\n fRoot = 0.5 / fRoot;\n out[3] = (m[j * 3 + k] - m[k * 3 + j]) * fRoot;\n out[j] = (m[j * 3 + i] + m[i * 3 + j]) * fRoot;\n out[k] = (m[k * 3 + i] + m[i * 3 + k]) * fRoot;\n }\n\n return out;\n}\n/**\r\n * Normalize a quat\r\n *\r\n * @param {quat} out the receiving quaternion\r\n * @param {ReadonlyQuat} a quaternion to normalize\r\n * @returns {quat} out\r\n * @function\r\n */\n\nvar normalize$2 = normalize$1;\n/**\r\n * Sets a quaternion to represent the shortest rotation from one\r\n * vector to another.\r\n *\r\n * Both vectors are assumed to be unit length.\r\n *\r\n * @param {quat} out the receiving quaternion.\r\n * @param {ReadonlyVec3} a the initial vector\r\n * @param {ReadonlyVec3} b the destination vector\r\n * @returns {quat} out\r\n */\n\nvar rotationTo = function () {\n var tmpvec3 = create$1();\n var xUnitVec3 = fromValues(1, 0, 0);\n var yUnitVec3 = fromValues(0, 1, 0);\n return function (out, a, b) {\n var dot$1 = dot(a, b);\n\n if (dot$1 < -0.999999) {\n cross(tmpvec3, xUnitVec3, a);\n if (len(tmpvec3) < 0.000001) cross(tmpvec3, yUnitVec3, a);\n normalize(tmpvec3, tmpvec3);\n setAxisAngle(out, tmpvec3, Math.PI);\n return out;\n } else if (dot$1 > 0.999999) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n return out;\n } else {\n cross(tmpvec3, a, b);\n out[0] = tmpvec3[0];\n out[1] = tmpvec3[1];\n out[2] = tmpvec3[2];\n out[3] = 1 + dot$1;\n return normalize$2(out, out);\n }\n };\n}();\n/**\r\n * Performs a spherical linear interpolation with two control points\r\n *\r\n * @param {quat} out the receiving quaternion\r\n * @param {ReadonlyQuat} a the first operand\r\n * @param {ReadonlyQuat} b the second operand\r\n * @param {ReadonlyQuat} c the third operand\r\n * @param {ReadonlyQuat} d the fourth operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {quat} out\r\n */\n\nvar sqlerp = function () {\n var temp1 = create$3();\n var temp2 = create$3();\n return function (out, a, b, c, d, t) {\n slerp(temp1, a, d, t);\n slerp(temp2, b, c, t);\n slerp(out, temp1, temp2, 2 * t * (1 - t));\n return out;\n };\n}();\n/**\r\n * Sets the specified quaternion with values corresponding to the given\r\n * axes. Each axis is a vec3 and is expected to be unit length and\r\n * perpendicular to all other specified axes.\r\n *\r\n * @param {ReadonlyVec3} view the vector representing the viewing direction\r\n * @param {ReadonlyVec3} right the vector representing the local \"right\" direction\r\n * @param {ReadonlyVec3} up the vector representing the local \"up\" direction\r\n * @returns {quat} out\r\n */\n\nvar setAxes = function () {\n var matr = create();\n return function (out, view, right, up) {\n matr[0] = right[0];\n matr[3] = right[1];\n matr[6] = right[2];\n matr[1] = up[0];\n matr[4] = up[1];\n matr[7] = up[2];\n matr[2] = -view[0];\n matr[5] = -view[1];\n matr[8] = -view[2];\n return normalize$2(out, fromMat3(out, matr));\n };\n}();\n\n/**\r\n * 2 Dimensional Vector\r\n * @module vec2\r\n */\n\n/**\r\n * Creates a new, empty vec2\r\n *\r\n * @returns {vec2} a new 2D vector\r\n */\n\nfunction create$4() {\n var out = new ARRAY_TYPE(2);\n\n if (ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n }\n\n return out;\n}\n/**\r\n * Perform some operation over an array of vec2s.\r\n *\r\n * @param {Array} a the array of vectors to iterate over\r\n * @param {Number} stride Number of elements between the start of each vec2. If 0 assumes tightly packed\r\n * @param {Number} offset Number of elements to skip at the beginning of the array\r\n * @param {Number} count Number of vec2s to iterate over. If 0 iterates over entire array\r\n * @param {Function} fn Function to call for each vector in the array\r\n * @param {Object} [arg] additional argument to pass to fn\r\n * @returns {Array} a\r\n * @function\r\n */\n\nvar forEach$2 = function () {\n var vec = create$4();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n\n if (!stride) {\n stride = 2;\n }\n\n if (!offset) {\n offset = 0;\n }\n\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n }\n\n return a;\n };\n}();\n\n/**\n * Encodes a non-bitpacked frame which has one sample per pixel.\n *\n * @param {*} buffer\n * @param {*} numberOfFrames\n * @param {*} rows\n * @param {*} cols\n */\n\nfunction encode(buffer, numberOfFrames, rows, cols) {\n var frameLength = rows * cols;\n var header = createHeader();\n var encodedFrames = [];\n\n for (var frame = 0; frame < numberOfFrames; frame++) {\n var frameOffset = frameLength * frame;\n encodedFrames.push(encodeFrame(buffer, frameOffset, rows, cols, header));\n }\n\n return encodedFrames;\n}\n\nfunction encodeFrame(buffer, frameOffset, rows, cols, header) {\n // Add header to frame:\n var rleArray = [];\n\n for (var r = 0; r < rows; r++) {\n var rowOffset = r * cols;\n var uint8Row = new Uint8Array(buffer, frameOffset + rowOffset, cols);\n var i = 0;\n\n while (i < uint8Row.length) {\n var literalRunLength = getLiteralRunLength(uint8Row, i);\n\n if (literalRunLength) {\n // State how many in litteral run\n rleArray.push(literalRunLength - 1); // Append litteral run.\n\n var literalRun = uint8Row.slice(i, i + literalRunLength);\n rleArray = [].concat(_toConsumableArray(rleArray), _toConsumableArray(literalRun));\n i += literalRunLength;\n }\n\n if (i >= uint8Row.length) {\n break;\n } // Next must be a replicate run.\n\n\n var replicateRunLength = getReplicateRunLength(uint8Row, i);\n\n if (replicateRunLength) {\n // State how many in replicate run\n rleArray.push(257 - replicateRunLength);\n rleArray.push(uint8Row[i]);\n i += replicateRunLength;\n }\n }\n }\n\n var headerLength = 64;\n var bodyLength = rleArray.length % 2 === 0 ? rleArray.length : rleArray.length + 1;\n var encodedFrameBuffer = new ArrayBuffer(headerLength + bodyLength); // Copy header into encodedFrameBuffer.\n\n var headerView = new Uint32Array(encodedFrameBuffer, 0, 16);\n\n for (var _i = 0; _i < headerView.length; _i++) {\n headerView[_i] = header[_i];\n }\n\n for (var _i2 = 0; _i2 < headerView.length; _i2++) {\n rleArray.push(headerView[_i2]);\n } // Copy rle data into encodedFrameBuffer.\n\n\n var bodyView = new Uint8Array(encodedFrameBuffer, 64);\n\n for (var _i3 = 0; _i3 < rleArray.length; _i3++) {\n bodyView[_i3] = rleArray[_i3];\n }\n\n return encodedFrameBuffer;\n}\n\nfunction createHeader() {\n var headerUint32 = new Uint32Array(16);\n headerUint32[0] = 1; // 1 Segment.\n\n headerUint32[1] = 64; // Data offset is 64 bytes.\n // Return byte-array version of header:\n\n return headerUint32;\n}\n\nfunction getLiteralRunLength(uint8Row, i) {\n for (var l = 0; l < uint8Row.length - i; l++) {\n if (uint8Row[i + l] === uint8Row[i + l + 1] && uint8Row[i + l + 1] === uint8Row[i + l + 2]) {\n return l;\n }\n\n if (l === 128) {\n return l;\n }\n }\n\n return uint8Row.length - i;\n}\n\nfunction getReplicateRunLength(uint8Row, i) {\n var first = uint8Row[i];\n\n for (var l = 1; l < uint8Row.length - i; l++) {\n if (uint8Row[i + l] !== first) {\n return l;\n }\n\n if (l === 128) {\n return l;\n }\n }\n\n return uint8Row.length - i;\n}\n\nfunction decode(rleEncodedFrames, rows, cols) {\n var pixelData = new Uint8Array(rows * cols * rleEncodedFrames.length);\n var buffer = pixelData.buffer;\n var frameLength = rows * cols;\n\n for (var i = 0; i < rleEncodedFrames.length; i++) {\n var rleEncodedFrame = rleEncodedFrames[i];\n var uint8FrameView = new Uint8Array(buffer, i * frameLength, frameLength);\n decodeFrame(rleEncodedFrame, uint8FrameView);\n }\n\n return pixelData;\n}\n\nfunction decodeFrame(rleEncodedFrame, pixelData) {\n // Check HEADER:\n var header = new Uint32Array(rleEncodedFrame, 0, 16);\n\n if (header[0] !== 1) {\n log.error(\"rleSingleSamplePerPixel only supports fragments with single Byte Segments (for rle encoded segmentation data) at the current time. This rleEncodedFrame has \".concat(header[0], \" Byte Segments.\"));\n return;\n }\n\n if (header[1] !== 64) {\n log.error(\"Data offset of Byte Segment 1 should be 64 bytes, this rle fragment is encoded incorrectly.\");\n return;\n }\n\n var uInt8Frame = new Uint8Array(rleEncodedFrame, 64);\n var pixelDataIndex = 0;\n var i = 0;\n\n while (pixelDataIndex < pixelData.length) {\n var byteValue = uInt8Frame[i];\n\n if (byteValue === undefined) {\n break;\n }\n\n if (byteValue <= 127) {\n // TODO -> Interpret the next N+1 bytes literally.\n var N = byteValue + 1;\n var next = i + 1; // Read the next N bytes literally.\n\n for (var p = next; p < next + N; p++) {\n pixelData[pixelDataIndex] = uInt8Frame[p];\n pixelDataIndex++;\n }\n\n i += N + 1;\n }\n\n if (byteValue >= 129) {\n var _N = 257 - byteValue;\n\n var _next = i + 1; // Repeat the next byte N times.\n\n\n for (var _p = 0; _p < _N; _p++) {\n pixelData[pixelDataIndex] = uInt8Frame[_next];\n pixelDataIndex++;\n }\n\n i += 2;\n }\n\n if (i === uInt8Frame.length) {\n break;\n }\n }\n}\n\nvar lodash_clonedeep = createCommonjsModule(function (module, exports) {\n/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/**\n * Adds the key-value `pair` to `map`.\n *\n * @private\n * @param {Object} map The map to modify.\n * @param {Array} pair The key-value pair to add.\n * @returns {Object} Returns `map`.\n */\nfunction addMapEntry(map, pair) {\n // Don't return `map.set` because it's not chainable in IE 11.\n map.set(pair[0], pair[1]);\n return map;\n}\n\n/**\n * Adds `value` to `set`.\n *\n * @private\n * @param {Object} set The set to modify.\n * @param {*} value The value to add.\n * @returns {Object} Returns `set`.\n */\nfunction addSetEntry(set, value) {\n // Don't return `set.add` because it's not chainable in IE 11.\n set.add(value);\n return set;\n}\n\n/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\n/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array ? array.length : 0;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n this.__data__ = new ListCache(entries);\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n return this.__data__['delete'](key);\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var cache = this.__data__;\n if (cache instanceof ListCache) {\n var pairs = cache.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n return this;\n }\n cache = this.__data__ = new MapCache(pairs);\n }\n cache.set(key, value);\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n // Safari 9 makes `arguments.length` enumerable in strict mode.\n var result = (isArray(value) || isArguments(value))\n ? baseTimes(value.length, String)\n : [];\n\n var length = result.length,\n skipIndexes = !!length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n object[key] = value;\n }\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @param {boolean} [isFull] Specify a clone including symbols.\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, isDeep, isFull, customizer, key, object, stack) {\n var result;\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n if (isHostObject(value)) {\n return object ? value : {};\n }\n result = initCloneObject(isFunc ? {} : value);\n if (!isDeep) {\n return copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, baseClone, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (!isArr) {\n var props = isFull ? getAllKeys(value) : keys(value);\n }\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack));\n });\n return result;\n}\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} prototype The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nfunction baseCreate(proto) {\n return isObject(proto) ? objectCreate(proto) : {};\n}\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\n/**\n * The base implementation of `getTag`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n return objectToString.call(value);\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var result = new buffer.constructor(buffer.length);\n buffer.copy(result);\n return result;\n}\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\n/**\n * Creates a clone of `map`.\n *\n * @private\n * @param {Object} map The map to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned map.\n */\nfunction cloneMap(map, isDeep, cloneFunc) {\n var array = isDeep ? cloneFunc(mapToArray(map), true) : mapToArray(map);\n return arrayReduce(array, addMapEntry, new map.constructor);\n}\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\n/**\n * Creates a clone of `set`.\n *\n * @private\n * @param {Object} set The set to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned set.\n */\nfunction cloneSet(set, isDeep, cloneFunc) {\n var array = isDeep ? cloneFunc(setToArray(set), true) : setToArray(set);\n return arrayReduce(array, addSetEntry, new set.constructor);\n}\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\n/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n assignValue(object, key, newValue === undefined ? source[key] : newValue);\n }\n return object;\n}\n\n/**\n * Copies own symbol properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Creates an array of the own enumerable symbol properties of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray;\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11,\n// for data views in Edge < 14, and promises in Node.js.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = objectToString.call(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : undefined;\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, cloneFunc, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return cloneMap(object, isDeep, cloneFunc);\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return cloneSet(object, isDeep, cloneFunc);\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return baseClone(value, true, true);\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = cloneDeep;\n});\n\nvar Segmentation$2 = {\n generateSegmentation: generateSegmentation$1,\n generateToolState: generateToolState$1,\n fillSegmentation: fillSegmentation\n};\n/**\n *\n * @typedef {Object} BrushData\n * @property {Object} toolState - The cornerstoneTools global toolState.\n * @property {Object[]} segments - The cornerstoneTools segment metadata that corresponds to the\n * seriesInstanceUid.\n */\n\nvar generateSegmentationDefaultOptions = {\n includeSliceSpacing: true,\n rleEncode: true\n};\n/**\n * generateSegmentation - Generates cornerstoneTools brush data, given a stack of\n * imageIds, images and the cornerstoneTools brushData.\n *\n * @param {object[]} images An array of cornerstone images that contain the source\n * data under `image.data.byteArray.buffer`.\n * @param {Object|Object[]} inputLabelmaps3D The cornerstone `Labelmap3D` object, or an array of objects.\n * @param {Object} userOptions Options to pass to the segmentation derivation and `fillSegmentation`.\n * @returns {Blob}\n */\n\nfunction generateSegmentation$1(images, inputLabelmaps3D) {\n var userOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var isMultiframe = images[0].imageId.includes(\"?frame\");\n\n var segmentation = _createSegFromImages$1(images, isMultiframe, userOptions);\n\n return fillSegmentation(segmentation, inputLabelmaps3D, userOptions);\n}\n/**\n * fillSegmentation - Fills a derived segmentation dataset with cornerstoneTools `LabelMap3D` data.\n *\n * @param {object[]} segmentation An empty segmentation derived dataset.\n * @param {Object|Object[]} inputLabelmaps3D The cornerstone `Labelmap3D` object, or an array of objects.\n * @param {Object} userOptions Options object to override default options.\n * @returns {Blob} description\n */\n\n\nfunction fillSegmentation(segmentation, inputLabelmaps3D) {\n var userOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var options = Object.assign({}, generateSegmentationDefaultOptions, userOptions); // Use another variable so we don't redefine labelmaps3D.\n\n var labelmaps3D = Array.isArray(inputLabelmaps3D) ? inputLabelmaps3D : [inputLabelmaps3D];\n var numberOfFrames = 0;\n var referencedFramesPerLabelmap = [];\n\n var _loop = function _loop(labelmapIndex) {\n var labelmap3D = labelmaps3D[labelmapIndex];\n var labelmaps2D = labelmap3D.labelmaps2D,\n metadata = labelmap3D.metadata;\n var referencedFramesPerSegment = [];\n\n for (var _i = 1; _i < metadata.length; _i++) {\n if (metadata[_i]) {\n referencedFramesPerSegment[_i] = [];\n }\n }\n\n var _loop2 = function _loop2(_i2) {\n var labelmap2D = labelmaps2D[_i2];\n\n if (labelmaps2D[_i2]) {\n var segmentsOnLabelmap = labelmap2D.segmentsOnLabelmap;\n segmentsOnLabelmap.forEach(function (segmentIndex) {\n if (segmentIndex !== 0) {\n referencedFramesPerSegment[segmentIndex].push(_i2);\n numberOfFrames++;\n }\n });\n }\n };\n\n for (var _i2 = 0; _i2 < labelmaps2D.length; _i2++) {\n _loop2(_i2);\n }\n\n referencedFramesPerLabelmap[labelmapIndex] = referencedFramesPerSegment;\n };\n\n for (var labelmapIndex = 0; labelmapIndex < labelmaps3D.length; labelmapIndex++) {\n _loop(labelmapIndex);\n }\n\n segmentation.setNumberOfFrames(numberOfFrames);\n\n for (var _labelmapIndex = 0; _labelmapIndex < labelmaps3D.length; _labelmapIndex++) {\n var referencedFramesPerSegment = referencedFramesPerLabelmap[_labelmapIndex];\n var labelmap3D = labelmaps3D[_labelmapIndex];\n var metadata = labelmap3D.metadata;\n\n for (var segmentIndex = 1; segmentIndex < referencedFramesPerSegment.length; segmentIndex++) {\n var referencedFrameIndicies = referencedFramesPerSegment[segmentIndex];\n\n if (referencedFrameIndicies) {\n // Frame numbers start from 1.\n var referencedFrameNumbers = referencedFrameIndicies.map(function (element) {\n return element + 1;\n });\n var segmentMetadata = metadata[segmentIndex];\n\n var labelmaps = _getLabelmapsFromRefernecedFrameIndicies(labelmap3D, referencedFrameIndicies);\n\n segmentation.addSegmentFromLabelmap(segmentMetadata, labelmaps, segmentIndex, referencedFrameNumbers);\n }\n }\n }\n\n if (options.rleEncode) {\n var rleEncodedFrames = encode(segmentation.dataset.PixelData, numberOfFrames, segmentation.dataset.Rows, segmentation.dataset.Columns); // Must use fractional now to RLE encode, as the DICOM standard only allows BitStored && BitsAllocated\n // to be 1 for BINARY. This is not ideal and there should be a better format for compression in this manner\n // added to the standard.\n\n segmentation.assignToDataset({\n BitsAllocated: \"8\",\n BitsStored: \"8\",\n HighBit: \"7\",\n SegmentationType: \"FRACTIONAL\",\n SegmentationFractionalType: \"PROBABILITY\",\n MaximumFractionalValue: \"255\"\n });\n segmentation.dataset._meta.TransferSyntaxUID = {\n Value: [\"1.2.840.10008.1.2.5\"],\n vr: \"UI\"\n };\n segmentation.dataset._vrMap.PixelData = \"OB\";\n segmentation.dataset.PixelData = rleEncodedFrames;\n } else {\n // If no rleEncoding, at least bitpack the data.\n segmentation.bitPackPixelData();\n }\n\n var segBlob = datasetToBlob(segmentation.dataset);\n return segBlob;\n}\n\nfunction _getLabelmapsFromRefernecedFrameIndicies(labelmap3D, referencedFrameIndicies) {\n var labelmaps2D = labelmap3D.labelmaps2D;\n var labelmaps = [];\n\n for (var _i3 = 0; _i3 < referencedFrameIndicies.length; _i3++) {\n var frame = referencedFrameIndicies[_i3];\n labelmaps.push(labelmaps2D[frame].pixelData);\n }\n\n return labelmaps;\n}\n/**\n * _createSegFromImages - description\n *\n * @param {Object[]} images An array of the cornerstone image objects.\n * @param {Boolean} isMultiframe Whether the images are multiframe.\n * @returns {Object} The Seg derived dataSet.\n */\n\n\nfunction _createSegFromImages$1(images, isMultiframe, options) {\n var datasets = [];\n\n if (isMultiframe) {\n var image = images[0];\n var arrayBuffer = image.data.byteArray.buffer;\n var dicomData = DicomMessage.readFile(arrayBuffer);\n var dataset = DicomMetaDictionary.naturalizeDataset(dicomData.dict);\n dataset._meta = DicomMetaDictionary.namifyDataset(dicomData.meta);\n datasets.push(dataset);\n } else {\n for (var _i4 = 0; _i4 < images.length; _i4++) {\n var _image = images[_i4];\n var _arrayBuffer = _image.data.byteArray.buffer;\n\n var _dicomData = DicomMessage.readFile(_arrayBuffer);\n\n var _dataset = DicomMetaDictionary.naturalizeDataset(_dicomData.dict);\n\n _dataset._meta = DicomMetaDictionary.namifyDataset(_dicomData.meta);\n datasets.push(_dataset);\n }\n }\n\n var multiframe = Normalizer.normalizeToDataset(datasets);\n return new Segmentation([multiframe], options);\n}\n/**\n * generateToolState - Given a set of cornrstoneTools imageIds and a Segmentation buffer,\n * derive cornerstoneTools toolState and brush metadata.\n *\n * @param {string[]} imageIds - An array of the imageIds.\n * @param {ArrayBuffer} arrayBuffer - The SEG arrayBuffer.\n * @param {*} metadataProvider.\n * @param {bool} skipOverlapping - skip checks for overlapping segs, default value false.\n * @param {number} tolerance - default value 1.e-3.\n *\n * @return {[]ArrayBuffer}a list of array buffer for each labelMap\n * @return {Object} an object from which the segment metadata can be derived\n * @return {[][][]} 2D list containing the track of segments per frame\n * @return {[][][]} 3D list containing the track of segments per frame for each labelMap\n * (available only for the overlapping case).\n */\n\n\nfunction generateToolState$1(imageIds, arrayBuffer, metadataProvider) {\n var skipOverlapping = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var tolerance = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1e-3;\n var dicomData = DicomMessage.readFile(arrayBuffer);\n var dataset = DicomMetaDictionary.naturalizeDataset(dicomData.dict);\n dataset._meta = DicomMetaDictionary.namifyDataset(dicomData.meta);\n var multiframe = Normalizer.normalizeToDataset([dataset]);\n var imagePlaneModule = metadataProvider.get(\"imagePlaneModule\", imageIds[0]);\n var generalSeriesModule = metadataProvider.get(\"generalSeriesModule\", imageIds[0]);\n var SeriesInstanceUID = generalSeriesModule.seriesInstanceUID;\n\n if (!imagePlaneModule) {\n console.warn(\"Insufficient metadata, imagePlaneModule missing.\");\n }\n\n var ImageOrientationPatient = Array.isArray(imagePlaneModule.rowCosines) ? [].concat(_toConsumableArray(imagePlaneModule.rowCosines), _toConsumableArray(imagePlaneModule.columnCosines)) : [imagePlaneModule.rowCosines.x, imagePlaneModule.rowCosines.y, imagePlaneModule.rowCosines.z, imagePlaneModule.columnCosines.x, imagePlaneModule.columnCosines.y, imagePlaneModule.columnCosines.z]; // Get IOP from ref series, compute supported orientations:\n\n var validOrientations = getValidOrientations$1(ImageOrientationPatient);\n var sliceLength = multiframe.Columns * multiframe.Rows;\n var segMetadata = getSegmentMetadata$1(multiframe, SeriesInstanceUID);\n var TransferSyntaxUID = multiframe._meta.TransferSyntaxUID.Value[0];\n var pixelData;\n\n if (TransferSyntaxUID === \"1.2.840.10008.1.2.5\") {\n var rleEncodedFrames = Array.isArray(multiframe.PixelData) ? multiframe.PixelData : [multiframe.PixelData];\n pixelData = decode(rleEncodedFrames, multiframe.Rows, multiframe.Columns);\n\n if (multiframe.BitsStored === 1) {\n console.warn(\"No implementation for rle + bitbacking.\");\n return;\n }\n } else {\n pixelData = unpackPixelData$1(multiframe);\n\n if (!pixelData) {\n throw new Error(\"Fractional segmentations are not yet supported\");\n }\n }\n\n var orientation = checkOrientation(multiframe, validOrientations, [imagePlaneModule.rows, imagePlaneModule.columns, imageIds.length], tolerance);\n var overlapping = false;\n\n if (!skipOverlapping) {\n overlapping = checkSEGsOverlapping(pixelData, multiframe, imageIds, validOrientations, metadataProvider, tolerance);\n }\n\n var insertFunction;\n\n switch (orientation) {\n case \"Planar\":\n if (overlapping) {\n insertFunction = insertOverlappingPixelDataPlanar;\n } else {\n insertFunction = insertPixelDataPlanar;\n }\n\n break;\n\n case \"Perpendicular\":\n //insertFunction = insertPixelDataPerpendicular;\n throw new Error(\"Segmentations orthogonal to the acquisition plane of the source data are not yet supported.\");\n\n case \"Oblique\":\n throw new Error(\"Segmentations oblique to the acquisition plane of the source data are not yet supported.\");\n }\n /* if SEGs are overlapping:\n 1) the labelmapBuffer will contain M volumes which have non-overlapping segments;\n 2) segmentsOnFrame will have M * numberOfFrames values to track in which labelMap are the segments;\n 3) insertFunction will return the number of LabelMaps\n 4) generateToolState return is an array*/\n\n\n var segmentsOnFrameArray = [];\n segmentsOnFrameArray[0] = [];\n var segmentsOnFrame = [];\n var arrayBufferLength = sliceLength * imageIds.length * 2; // 2 bytes per label voxel in cst4.\n\n var labelmapBufferArray = [];\n labelmapBufferArray[0] = new ArrayBuffer(arrayBufferLength);\n insertFunction(segmentsOnFrame, segmentsOnFrameArray, labelmapBufferArray, pixelData, multiframe, imageIds, validOrientations, metadataProvider, tolerance);\n return {\n labelmapBufferArray: labelmapBufferArray,\n segMetadata: segMetadata,\n segmentsOnFrame: segmentsOnFrame,\n segmentsOnFrameArray: segmentsOnFrameArray\n };\n}\n/**\n * Find the reference frame of the segmentation frame in the source data.\n *\n * @param {Object} multiframe dicom metadata\n * @param {Int} frameSegment frame dicom index\n * @param {String[]} imageIds A list of imageIds.\n * @param {Object} metadataProvider A Cornerstone metadataProvider to query\n * metadata from imageIds.\n * @param {Float} tolerance The tolerance parameter\n *\n * @returns {String} Returns the imageId\n */\n\n\nfunction findReferenceSourceImageId(multiframe, frameSegment, imageIds, metadataProvider, tolerance) {\n var imageId = undefined;\n\n if (!multiframe) {\n return imageId;\n }\n\n var FrameOfReferenceUID = multiframe.FrameOfReferenceUID,\n PerFrameFunctionalGroupsSequence = multiframe.PerFrameFunctionalGroupsSequence,\n SourceImageSequence = multiframe.SourceImageSequence,\n ReferencedSeriesSequence = multiframe.ReferencedSeriesSequence;\n\n if (!PerFrameFunctionalGroupsSequence || PerFrameFunctionalGroupsSequence.length === 0) {\n return imageId;\n }\n\n var PerFrameFunctionalGroup = PerFrameFunctionalGroupsSequence[frameSegment];\n\n if (!PerFrameFunctionalGroup) {\n return imageId;\n }\n\n var frameSourceImageSequence = undefined;\n\n if (SourceImageSequence && SourceImageSequence.length !== 0) {\n frameSourceImageSequence = SourceImageSequence[frameSegment];\n } else if (PerFrameFunctionalGroup.DerivationImageSequence) {\n var DerivationImageSequence = PerFrameFunctionalGroup.DerivationImageSequence;\n\n if (Array.isArray(DerivationImageSequence)) {\n if (DerivationImageSequence.length !== 0) {\n DerivationImageSequence = DerivationImageSequence[0];\n } else {\n DerivationImageSequence = undefined;\n }\n }\n\n if (DerivationImageSequence) {\n frameSourceImageSequence = DerivationImageSequence.SourceImageSequence;\n\n if (Array.isArray(frameSourceImageSequence)) {\n if (frameSourceImageSequence.length !== 0) {\n frameSourceImageSequence = frameSourceImageSequence[0];\n } else {\n frameSourceImageSequence = undefined;\n }\n }\n }\n }\n\n if (frameSourceImageSequence) {\n imageId = getImageIdOfSourceImagebySourceImageSequence(frameSourceImageSequence, imageIds, metadataProvider);\n }\n\n if (imageId === undefined && ReferencedSeriesSequence) {\n var referencedSeriesSequence = Array.isArray(ReferencedSeriesSequence) ? ReferencedSeriesSequence[0] : ReferencedSeriesSequence;\n var ReferencedSeriesInstanceUID = referencedSeriesSequence.SeriesInstanceUID;\n imageId = getImageIdOfSourceImagebyGeometry(ReferencedSeriesInstanceUID, FrameOfReferenceUID, PerFrameFunctionalGroup, imageIds, metadataProvider, tolerance);\n }\n\n return imageId;\n}\n/**\n * Checks if there is any overlapping segmentations.\n * @returns {boolean} Returns a flag if segmentations overlapping\n */\n\n\nfunction checkSEGsOverlapping(pixelData, multiframe, imageIds, validOrientations, metadataProvider, tolerance) {\n var SharedFunctionalGroupsSequence = multiframe.SharedFunctionalGroupsSequence,\n PerFrameFunctionalGroupsSequence = multiframe.PerFrameFunctionalGroupsSequence,\n SegmentSequence = multiframe.SegmentSequence,\n Rows = multiframe.Rows,\n Columns = multiframe.Columns;\n var numberOfSegs = SegmentSequence.length;\n\n if (numberOfSegs < 2) {\n return false;\n }\n\n var sharedImageOrientationPatient = SharedFunctionalGroupsSequence.PlaneOrientationSequence ? SharedFunctionalGroupsSequence.PlaneOrientationSequence.ImageOrientationPatient : undefined;\n var sliceLength = Columns * Rows;\n var groupsLen = PerFrameFunctionalGroupsSequence.length;\n /** sort groupsLen to have all the segments for each frame in an array\n * frame 2 : 1, 2\n * frame 4 : 1, 3\n * frame 5 : 4\n */\n\n var frameSegmentsMapping = new Map();\n\n var _loop3 = function _loop3(frameSegment) {\n var segmentIndex = getSegmentIndex(multiframe, frameSegment);\n\n if (segmentIndex === undefined) {\n console.warn(\"Could not retrieve the segment index for frame segment \" + frameSegment + \", skipping this frame.\");\n return \"continue\";\n }\n\n var imageId = findReferenceSourceImageId(multiframe, frameSegment, imageIds, metadataProvider, tolerance);\n\n if (!imageId) {\n console.warn(\"Image not present in stack, can't import frame : \" + i + \".\");\n return \"continue\";\n }\n\n var imageIdIndex = imageIds.findIndex(function (element) {\n return element === imageId;\n });\n\n if (frameSegmentsMapping.has(imageIdIndex)) {\n var segmentArray = frameSegmentsMapping.get(imageIdIndex);\n\n if (!segmentArray.includes(frameSegment)) {\n segmentArray.push(frameSegment);\n frameSegmentsMapping.set(imageIdIndex, segmentArray);\n }\n } else {\n frameSegmentsMapping.set(imageIdIndex, [frameSegment]);\n }\n };\n\n for (var frameSegment = 0; frameSegment < groupsLen; ++frameSegment) {\n var _ret = _loop3(frameSegment);\n\n if (_ret === \"continue\") continue;\n }\n\n var _iterator = _createForOfIteratorHelper(frameSegmentsMapping.entries()),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = _slicedToArray(_step.value, 2),\n user = _step$value[0],\n role = _step$value[1];\n\n var temp2DArray = new Uint16Array(sliceLength).fill(0);\n\n for (var _i5 = 0; _i5 < role.length; ++_i5) {\n var _frameSegment = role[_i5];\n var PerFrameFunctionalGroups = PerFrameFunctionalGroupsSequence[_frameSegment];\n var ImageOrientationPatientI = sharedImageOrientationPatient || PerFrameFunctionalGroups.PlaneOrientationSequence.ImageOrientationPatient;\n var pixelDataI2D = ndarray(new Uint8Array(pixelData.buffer, _frameSegment * sliceLength, sliceLength), [Rows, Columns]);\n var alignedPixelDataI = alignPixelDataWithSourceData$1(pixelDataI2D, ImageOrientationPatientI, validOrientations, tolerance);\n\n if (!alignedPixelDataI) {\n console.warn(\"Individual SEG frames are out of plane with respect to the first SEG frame, this is not yet supported, skipping this frame.\");\n continue;\n }\n\n var data = alignedPixelDataI.data;\n\n for (var j = 0, len = data.length; j < len; ++j) {\n if (data[j] !== 0) {\n temp2DArray[j]++;\n\n if (temp2DArray[j] > 1) {\n return true;\n }\n }\n }\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n return false;\n}\n\nfunction insertOverlappingPixelDataPlanar(segmentsOnFrame, segmentsOnFrameArray, labelmapBufferArray, pixelData, multiframe, imageIds, validOrientations, metadataProvider, tolerance) {\n var SharedFunctionalGroupsSequence = multiframe.SharedFunctionalGroupsSequence,\n PerFrameFunctionalGroupsSequence = multiframe.PerFrameFunctionalGroupsSequence,\n Rows = multiframe.Rows,\n Columns = multiframe.Columns;\n var sharedImageOrientationPatient = SharedFunctionalGroupsSequence.PlaneOrientationSequence ? SharedFunctionalGroupsSequence.PlaneOrientationSequence.ImageOrientationPatient : undefined;\n var sliceLength = Columns * Rows;\n var arrayBufferLength = sliceLength * imageIds.length * 2; // 2 bytes per label voxel in cst4.\n // indicate the number of labelMaps\n\n var M = 1; // indicate the current labelMap array index;\n\n var m = 0; // temp array for checking overlaps\n\n var tempBuffer = labelmapBufferArray[m].slice(0); // temp list for checking overlaps\n\n var tempSegmentsOnFrame = lodash_clonedeep(segmentsOnFrameArray[m]);\n /** split overlapping SEGs algorithm for each segment:\n * A) copy the labelmapBuffer in the array with index 0\n * B) add the segment pixel per pixel on the copied buffer from (A)\n * C) if no overlap, copy the results back on the orignal array from (A)\n * D) if overlap, repeat increasing the index m up to M (if out of memory, add new buffer in the array and M++);\n */\n\n var numberOfSegs = multiframe.SegmentSequence.length;\n\n for (var segmentIndexToProcess = 1; segmentIndexToProcess <= numberOfSegs; ++segmentIndexToProcess) {\n var _loop4 = function _loop4(groupsLen, _i7) {\n var PerFrameFunctionalGroups = PerFrameFunctionalGroupsSequence[_i7];\n var segmentIndex = getSegmentIndex(multiframe, _i7);\n\n if (segmentIndex === undefined) {\n throw new Error(\"Could not retrieve the segment index. Aborting segmentation loading.\");\n }\n\n if (segmentIndex !== segmentIndexToProcess) {\n _i6 = _i7;\n return \"continue\";\n }\n\n var ImageOrientationPatientI = sharedImageOrientationPatient || PerFrameFunctionalGroups.PlaneOrientationSequence.ImageOrientationPatient;\n var pixelDataI2D = ndarray(new Uint8Array(pixelData.buffer, _i7 * sliceLength, sliceLength), [Rows, Columns]);\n var alignedPixelDataI = alignPixelDataWithSourceData$1(pixelDataI2D, ImageOrientationPatientI, validOrientations, tolerance);\n\n if (!alignedPixelDataI) {\n throw new Error(\"Individual SEG frames are out of plane with respect to the first SEG frame. \" + \"This is not yet supported. Aborting segmentation loading.\");\n }\n\n var imageId = findReferenceSourceImageId(multiframe, _i7, imageIds, metadataProvider, tolerance);\n\n if (!imageId) {\n console.warn(\"Image not present in stack, can't import frame : \" + _i7 + \".\");\n _i6 = _i7;\n return \"continue\";\n }\n\n var sourceImageMetadata = metadataProvider.get(\"instance\", imageId);\n\n if (Rows !== sourceImageMetadata.Rows || Columns !== sourceImageMetadata.Columns) {\n throw new Error(\"Individual SEG frames have different geometry dimensions (Rows and Columns) \" + \"respect to the source image reference frame. This is not yet supported. \" + \"Aborting segmentation loading. \");\n }\n\n var imageIdIndex = imageIds.findIndex(function (element) {\n return element === imageId;\n });\n var byteOffset = sliceLength * 2 * imageIdIndex; // 2 bytes/pixel\n\n var labelmap2DView = new Uint16Array(tempBuffer, byteOffset, sliceLength);\n var data = alignedPixelDataI.data;\n var segmentOnFrame = false;\n\n for (var j = 0, len = alignedPixelDataI.data.length; j < len; ++j) {\n if (data[j]) {\n if (labelmap2DView[j] !== 0) {\n m++;\n\n if (m >= M) {\n labelmapBufferArray[m] = new ArrayBuffer(arrayBufferLength);\n segmentsOnFrameArray[m] = [];\n M++;\n }\n\n tempBuffer = labelmapBufferArray[m].slice(0);\n tempSegmentsOnFrame = lodash_clonedeep(segmentsOnFrameArray[m]);\n _i7 = 0;\n break;\n } else {\n labelmap2DView[j] = segmentIndex;\n segmentOnFrame = true;\n }\n }\n }\n\n if (segmentOnFrame) {\n if (!tempSegmentsOnFrame[imageIdIndex]) {\n tempSegmentsOnFrame[imageIdIndex] = [];\n }\n\n tempSegmentsOnFrame[imageIdIndex].push(segmentIndex);\n\n if (!segmentsOnFrame[imageIdIndex]) {\n segmentsOnFrame[imageIdIndex] = [];\n }\n\n segmentsOnFrame[imageIdIndex].push(segmentIndex);\n }\n\n _i6 = _i7;\n };\n\n for (var _i6 = 0, groupsLen = PerFrameFunctionalGroupsSequence.length; _i6 < groupsLen; ++_i6) {\n var _ret2 = _loop4(groupsLen, _i6);\n\n if (_ret2 === \"continue\") continue;\n }\n\n labelmapBufferArray[m] = tempBuffer.slice(0);\n segmentsOnFrameArray[m] = lodash_clonedeep(tempSegmentsOnFrame); // reset temp variables/buffers for new segment\n\n m = 0;\n tempBuffer = labelmapBufferArray[m].slice(0);\n tempSegmentsOnFrame = lodash_clonedeep(segmentsOnFrameArray[m]);\n }\n}\n\nvar getSegmentIndex = function getSegmentIndex(multiframe, frame) {\n var PerFrameFunctionalGroupsSequence = multiframe.PerFrameFunctionalGroupsSequence,\n SharedFunctionalGroupsSequence = multiframe.SharedFunctionalGroupsSequence;\n var PerFrameFunctionalGroups = PerFrameFunctionalGroupsSequence[frame];\n return PerFrameFunctionalGroups && PerFrameFunctionalGroups.SegmentIdentificationSequence ? PerFrameFunctionalGroups.SegmentIdentificationSequence.ReferencedSegmentNumber : SharedFunctionalGroupsSequence.SegmentIdentificationSequence ? SharedFunctionalGroupsSequence.SegmentIdentificationSequence.ReferencedSegmentNumber : undefined;\n};\n\nfunction insertPixelDataPlanar(segmentsOnFrame, segmentsOnFrameArray, labelmapBufferArray, pixelData, multiframe, imageIds, validOrientations, metadataProvider, tolerance) {\n var SharedFunctionalGroupsSequence = multiframe.SharedFunctionalGroupsSequence,\n PerFrameFunctionalGroupsSequence = multiframe.PerFrameFunctionalGroupsSequence,\n Rows = multiframe.Rows,\n Columns = multiframe.Columns;\n var sharedImageOrientationPatient = SharedFunctionalGroupsSequence.PlaneOrientationSequence ? SharedFunctionalGroupsSequence.PlaneOrientationSequence.ImageOrientationPatient : undefined;\n var sliceLength = Columns * Rows;\n\n var _loop5 = function _loop5(groupsLen, _i8) {\n var PerFrameFunctionalGroups = PerFrameFunctionalGroupsSequence[_i8];\n var ImageOrientationPatientI = sharedImageOrientationPatient || PerFrameFunctionalGroups.PlaneOrientationSequence.ImageOrientationPatient;\n var pixelDataI2D = ndarray(new Uint8Array(pixelData.buffer, _i8 * sliceLength, sliceLength), [Rows, Columns]);\n var alignedPixelDataI = alignPixelDataWithSourceData$1(pixelDataI2D, ImageOrientationPatientI, validOrientations, tolerance);\n\n if (!alignedPixelDataI) {\n throw new Error(\"Individual SEG frames are out of plane with respect to the first SEG frame. \" + \"This is not yet supported. Aborting segmentation loading.\");\n }\n\n var segmentIndex = getSegmentIndex(multiframe, _i8);\n\n if (segmentIndex === undefined) {\n throw new Error(\"Could not retrieve the segment index. Aborting segmentation loading.\");\n }\n\n var imageId = findReferenceSourceImageId(multiframe, _i8, imageIds, metadataProvider, tolerance);\n\n if (!imageId) {\n console.warn(\"Image not present in stack, can't import frame : \" + _i8 + \".\");\n return \"continue\";\n }\n\n var sourceImageMetadata = metadataProvider.get(\"instance\", imageId);\n\n if (Rows !== sourceImageMetadata.Rows || Columns !== sourceImageMetadata.Columns) {\n throw new Error(\"Individual SEG frames have different geometry dimensions (Rows and Columns) \" + \"respect to the source image reference frame. This is not yet supported. \" + \"Aborting segmentation loading. \");\n }\n\n var imageIdIndex = imageIds.findIndex(function (element) {\n return element === imageId;\n });\n var byteOffset = sliceLength * 2 * imageIdIndex; // 2 bytes/pixel\n\n var labelmap2DView = new Uint16Array(labelmapBufferArray[0], byteOffset, sliceLength);\n var data = alignedPixelDataI.data;\n\n for (var j = 0, len = alignedPixelDataI.data.length; j < len; ++j) {\n if (data[j]) {\n for (var x = j; x < len; ++x) {\n if (data[x]) {\n labelmap2DView[x] = segmentIndex;\n }\n }\n\n if (!segmentsOnFrame[imageIdIndex]) {\n segmentsOnFrame[imageIdIndex] = [];\n }\n\n segmentsOnFrame[imageIdIndex].push(segmentIndex);\n break;\n }\n }\n };\n\n for (var _i8 = 0, groupsLen = PerFrameFunctionalGroupsSequence.length; _i8 < groupsLen; ++_i8) {\n var _ret3 = _loop5(groupsLen, _i8);\n\n if (_ret3 === \"continue\") continue;\n }\n}\n\nfunction checkOrientation(multiframe, validOrientations, sourceDataDimensions, tolerance) {\n var SharedFunctionalGroupsSequence = multiframe.SharedFunctionalGroupsSequence,\n PerFrameFunctionalGroupsSequence = multiframe.PerFrameFunctionalGroupsSequence;\n var sharedImageOrientationPatient = SharedFunctionalGroupsSequence.PlaneOrientationSequence ? SharedFunctionalGroupsSequence.PlaneOrientationSequence.ImageOrientationPatient : undefined; // Check if in plane.\n\n var PerFrameFunctionalGroups = PerFrameFunctionalGroupsSequence[0];\n var iop = sharedImageOrientationPatient || PerFrameFunctionalGroups.PlaneOrientationSequence.ImageOrientationPatient;\n var inPlane = validOrientations.some(function (operation) {\n return compareArrays(iop, operation, tolerance);\n });\n\n if (inPlane) {\n return \"Planar\";\n }\n\n if (checkIfPerpendicular(iop, validOrientations[0], tolerance) && sourceDataDimensions.includes(multiframe.Rows) && sourceDataDimensions.includes(multiframe.Columns)) {\n // Perpendicular and fits on same grid.\n return \"Perpendicular\";\n }\n\n return \"Oblique\";\n}\n/**\n * checkIfPerpendicular - Returns true if iop1 and iop2 are perpendicular\n * within a tolerance.\n *\n * @param {Number[6]} iop1 An ImageOrientationPatient array.\n * @param {Number[6]} iop2 An ImageOrientationPatient array.\n * @param {Number} tolerance.\n * @return {Boolean} True if iop1 and iop2 are equal.\n */\n\n\nfunction checkIfPerpendicular(iop1, iop2, tolerance) {\n var absDotColumnCosines = Math.abs(iop1[0] * iop2[0] + iop1[1] * iop2[1] + iop1[2] * iop2[2]);\n var absDotRowCosines = Math.abs(iop1[3] * iop2[3] + iop1[4] * iop2[4] + iop1[5] * iop2[5]);\n return (absDotColumnCosines < tolerance || Math.abs(absDotColumnCosines - 1) < tolerance) && (absDotRowCosines < tolerance || Math.abs(absDotRowCosines - 1) < tolerance);\n}\n/**\n * unpackPixelData - Unpacks bitpacked pixelData if the Segmentation is BINARY.\n *\n * @param {Object} multiframe The multiframe dataset.\n * @return {Uint8Array} The unpacked pixelData.\n */\n\n\nfunction unpackPixelData$1(multiframe) {\n var segType = multiframe.SegmentationType;\n var data;\n\n if (Array.isArray(multiframe.PixelData)) {\n data = multiframe.PixelData[0];\n } else {\n data = multiframe.PixelData;\n }\n\n if (data === undefined) {\n log.error(\"This segmentation pixeldata is undefined.\");\n }\n\n if (segType === \"BINARY\") {\n return BitArray.unpack(data);\n }\n\n var pixelData = new Uint8Array(data);\n var max = multiframe.MaximumFractionalValue;\n var onlyMaxAndZero = pixelData.find(function (element) {\n return element !== 0 && element !== max;\n }) === undefined;\n\n if (!onlyMaxAndZero) {\n // This is a fractional segmentation, which is not currently supported.\n return;\n }\n\n log.warn(\"This segmentation object is actually binary... processing as such.\");\n return pixelData;\n}\n/**\n * getImageIdOfSourceImagebySourceImageSequence - Returns the Cornerstone imageId of the source image.\n *\n * @param {Object} SourceImageSequence Sequence describing the source image.\n * @param {String[]} imageIds A list of imageIds.\n * @param {Object} metadataProvider A Cornerstone metadataProvider to query\n * metadata from imageIds.\n * @return {String} The corresponding imageId.\n */\n\n\nfunction getImageIdOfSourceImagebySourceImageSequence(SourceImageSequence, imageIds, metadataProvider) {\n var ReferencedSOPInstanceUID = SourceImageSequence.ReferencedSOPInstanceUID,\n ReferencedFrameNumber = SourceImageSequence.ReferencedFrameNumber;\n return ReferencedFrameNumber ? getImageIdOfReferencedFrame$1(ReferencedSOPInstanceUID, ReferencedFrameNumber, imageIds, metadataProvider) : getImageIdOfReferencedSingleFramedSOPInstance$1(ReferencedSOPInstanceUID, imageIds, metadataProvider);\n}\n/**\n * getImageIdOfSourceImagebyGeometry - Returns the Cornerstone imageId of the source image.\n *\n * @param {String} ReferencedSeriesInstanceUID Referenced series of the source image.\n * @param {String} FrameOfReferenceUID Frame of reference.\n * @param {Object} PerFrameFunctionalGroup Sequence describing segmentation reference attributes per frame.\n * @param {String[]} imageIds A list of imageIds.\n * @param {Object} metadataProvider A Cornerstone metadataProvider to query\n * @param {Float} tolerance The tolerance parameter\n *\n * @return {String} The corresponding imageId.\n */\n\n\nfunction getImageIdOfSourceImagebyGeometry(ReferencedSeriesInstanceUID, FrameOfReferenceUID, PerFrameFunctionalGroup, imageIds, metadataProvider, tolerance) {\n if (ReferencedSeriesInstanceUID === undefined || PerFrameFunctionalGroup.PlanePositionSequence === undefined || PerFrameFunctionalGroup.PlanePositionSequence[0] === undefined || PerFrameFunctionalGroup.PlanePositionSequence[0].ImagePositionPatient === undefined) {\n return undefined;\n }\n\n for (var imageIdsIndexc = 0; imageIdsIndexc < imageIds.length; ++imageIdsIndexc) {\n var sourceImageMetadata = metadataProvider.get(\"instance\", imageIds[imageIdsIndexc]);\n\n if (sourceImageMetadata === undefined || sourceImageMetadata.ImagePositionPatient === undefined || sourceImageMetadata.FrameOfReferenceUID !== FrameOfReferenceUID || sourceImageMetadata.SeriesInstanceUID !== ReferencedSeriesInstanceUID) {\n continue;\n }\n\n if (compareArrays(PerFrameFunctionalGroup.PlanePositionSequence[0].ImagePositionPatient, sourceImageMetadata.ImagePositionPatient, tolerance)) {\n return imageIds[imageIdsIndexc];\n }\n }\n}\n/**\n * getImageIdOfReferencedSingleFramedSOPInstance - Returns the imageId\n * corresponding to the specified sopInstanceUid for single-frame images.\n *\n * @param {String} sopInstanceUid The sopInstanceUid of the desired image.\n * @param {String[]} imageIds The list of imageIds.\n * @param {Object} metadataProvider The metadataProvider to obtain sopInstanceUids\n * from the cornerstone imageIds.\n * @return {String} The imageId that corresponds to the sopInstanceUid.\n */\n\n\nfunction getImageIdOfReferencedSingleFramedSOPInstance$1(sopInstanceUid, imageIds, metadataProvider) {\n return imageIds.find(function (imageId) {\n var sopCommonModule = metadataProvider.get(\"sopCommonModule\", imageId);\n\n if (!sopCommonModule) {\n return;\n }\n\n return sopCommonModule.sopInstanceUID === sopInstanceUid;\n });\n}\n/**\n * getImageIdOfReferencedFrame - Returns the imageId corresponding to the\n * specified sopInstanceUid and frameNumber for multi-frame images.\n *\n * @param {String} sopInstanceUid The sopInstanceUid of the desired image.\n * @param {Number} frameNumber The frame number.\n * @param {String} imageIds The list of imageIds.\n * @param {Object} metadataProvider The metadataProvider to obtain sopInstanceUids\n * from the cornerstone imageIds.\n * @return {String} The imageId that corresponds to the sopInstanceUid.\n */\n\n\nfunction getImageIdOfReferencedFrame$1(sopInstanceUid, frameNumber, imageIds, metadataProvider) {\n var imageId = imageIds.find(function (imageId) {\n var sopCommonModule = metadataProvider.get(\"sopCommonModule\", imageId);\n\n if (!sopCommonModule) {\n return;\n }\n\n var imageIdFrameNumber = Number(imageId.split(\"frame=\")[1]);\n return (//frameNumber is zero indexed for cornerstoneWADOImageLoader image Ids.\n sopCommonModule.sopInstanceUID === sopInstanceUid && imageIdFrameNumber === frameNumber - 1\n );\n });\n return imageId;\n}\n/**\n * getValidOrientations - returns an array of valid orientations.\n *\n * @param {Number[6]} iop The row (0..2) an column (3..5) direction cosines.\n * @return {Number[8][6]} An array of valid orientations.\n */\n\n\nfunction getValidOrientations$1(iop) {\n var orientations = []; // [0, 1, 2]: 0, 0hf, 0vf\n // [3, 4, 5]: 90, 90hf, 90vf\n // [6, 7]: 180, 270\n\n orientations[0] = iop;\n orientations[1] = flipImageOrientationPatient.h(iop);\n orientations[2] = flipImageOrientationPatient.v(iop);\n var iop90 = rotateDirectionCosinesInPlane(iop, Math.PI / 2);\n orientations[3] = iop90;\n orientations[4] = flipImageOrientationPatient.h(iop90);\n orientations[5] = flipImageOrientationPatient.v(iop90);\n orientations[6] = rotateDirectionCosinesInPlane(iop, Math.PI);\n orientations[7] = rotateDirectionCosinesInPlane(iop, 1.5 * Math.PI);\n return orientations;\n}\n/**\n * alignPixelDataWithSourceData -\n *\n * @param {Ndarray} pixelData2D - The data to align.\n * @param {Number[6]} iop - The orientation of the image slice.\n * @param {Number[8][6]} orientations - An array of valid imageOrientationPatient values.\n * @param {Number} tolerance.\n * @return {Ndarray} The aligned pixelData.\n */\n\n\nfunction alignPixelDataWithSourceData$1(pixelData2D, iop, orientations, tolerance) {\n if (compareArrays(iop, orientations[0], tolerance)) {\n return pixelData2D;\n } else if (compareArrays(iop, orientations[1], tolerance)) {\n // Flipped vertically.\n // Undo Flip\n return flipMatrix2D.v(pixelData2D);\n } else if (compareArrays(iop, orientations[2], tolerance)) {\n // Flipped horizontally.\n // Unfo flip\n return flipMatrix2D.h(pixelData2D);\n } else if (compareArrays(iop, orientations[3], tolerance)) {\n //Rotated 90 degrees\n // Rotate back\n return rotateMatrix902D(pixelData2D);\n } else if (compareArrays(iop, orientations[4], tolerance)) {\n //Rotated 90 degrees and fliped horizontally.\n // Undo flip and rotate back.\n return rotateMatrix902D(flipMatrix2D.h(pixelData2D));\n } else if (compareArrays(iop, orientations[5], tolerance)) {\n // Rotated 90 degrees and fliped vertically\n // Unfo flip and rotate back.\n return rotateMatrix902D(flipMatrix2D.v(pixelData2D));\n } else if (compareArrays(iop, orientations[6], tolerance)) {\n // Rotated 180 degrees. // TODO -> Do this more effeciently, there is a 1:1 mapping like 90 degree rotation.\n return rotateMatrix902D(rotateMatrix902D(pixelData2D));\n } else if (compareArrays(iop, orientations[7], tolerance)) {\n // Rotated 270 degrees\n // Rotate back.\n return rotateMatrix902D(rotateMatrix902D(rotateMatrix902D(pixelData2D)));\n }\n}\n/**\n * compareArrays - Returns true if array1 and array2 are equal\n * within a tolerance.\n *\n * @param {Number[]} array1 - An array.\n * @param {Number[]} array2 - An array.\n * @param {Number} tolerance.\n * @return {Boolean} True if array1 and array2 are equal.\n */\n\n\nfunction compareArrays(array1, array2, tolerance) {\n if (array1.length != array2.length) {\n return false;\n }\n\n for (var _i9 = 0; _i9 < array1.length; ++_i9) {\n if (!nearlyEqual(array1[_i9], array2[_i9], tolerance)) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction getSegmentMetadata$1(multiframe, seriesInstanceUid) {\n var segmentSequence = multiframe.SegmentSequence;\n var data = [];\n\n if (Array.isArray(segmentSequence)) {\n data = [undefined].concat(_toConsumableArray(segmentSequence));\n } else {\n // Only one segment, will be stored as an object.\n data = [undefined, segmentSequence];\n }\n\n return {\n seriesInstanceUid: seriesInstanceUid,\n data: data\n };\n}\n\nvar Segmentation$3 = {\n generateSegmentation: generateSegmentation$2,\n generateToolState: generateToolState$2,\n fillSegmentation: fillSegmentation$1\n};\n/**\n * generateSegmentation - Generates a DICOM Segmentation object given cornerstoneTools data.\n *\n * @param {object[]} images An array of the cornerstone image objects.\n * @param {Object|Object[]} labelmaps3DorBrushData For 4.X: The cornerstone `Labelmap3D` object, or an array of objects.\n * For 3.X: the BrushData.\n * @param {number} cornerstoneToolsVersion The cornerstoneTools major version to map against.\n * @returns {Object}\n */\n\nfunction generateSegmentation$2(images, labelmaps3DorBrushData) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {\n includeSliceSpacing: true\n };\n var cornerstoneToolsVersion = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 4;\n\n if (cornerstoneToolsVersion === 4) {\n return Segmentation$2.generateSegmentation(images, labelmaps3DorBrushData, options);\n }\n\n if (cornerstoneToolsVersion === 3) {\n return Segmentation$1.generateSegmentation(images, labelmaps3DorBrushData, options);\n }\n\n console.warn(\"No generateSegmentation adapater for cornerstone version \".concat(cornerstoneToolsVersion, \", exiting.\"));\n}\n/**\n * generateToolState - Given a set of cornrstoneTools imageIds and a Segmentation buffer,\n * derive cornerstoneTools toolState and brush metadata.\n *\n * @param {string[]} imageIds An array of the imageIds.\n * @param {ArrayBuffer} arrayBuffer The SEG arrayBuffer.\n * @param {*} metadataProvider\n * @param {bool} skipOverlapping - skip checks for overlapping segs, default value false.\n * @param {number} tolerance - default value 1.e-3.\n * @param {number} cornerstoneToolsVersion - default value 4.\n *\n * @returns {Object} The toolState and an object from which the\n * segment metadata can be derived.\n */\n\n\nfunction generateToolState$2(imageIds, arrayBuffer, metadataProvider) {\n var skipOverlapping = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var tolerance = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1e-3;\n var cornerstoneToolsVersion = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 4;\n\n if (cornerstoneToolsVersion === 4) {\n return Segmentation$2.generateToolState(imageIds, arrayBuffer, metadataProvider, skipOverlapping, tolerance);\n }\n\n if (cornerstoneToolsVersion === 3) {\n return Segmentation$1.generateToolState(imageIds, arrayBuffer, metadataProvider);\n }\n\n console.warn(\"No generateToolState adapater for cornerstone version \".concat(cornerstoneToolsVersion, \", exiting.\"));\n}\n/**\n * fillSegmentation - Fills a derived segmentation dataset with cornerstoneTools `LabelMap3D` data.\n *\n * @param {object[]} segmentation An empty segmentation derived dataset.\n * @param {Object|Object[]} inputLabelmaps3D The cornerstone `Labelmap3D` object, or an array of objects.\n * @param {Object} userOptions Options object to override default options.\n * @returns {Blob} description\n */\n\n\nfunction fillSegmentation$1(segmentation, inputLabelmaps3D) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {\n includeSliceSpacing: true\n };\n var cornerstoneToolsVersion = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 4;\n\n if (cornerstoneToolsVersion === 4) {\n return Segmentation$2.fillSegmentation(segmentation, inputLabelmaps3D, options);\n }\n\n console.warn(\"No generateSegmentation adapater for cornerstone version \".concat(cornerstoneToolsVersion, \", exiting.\"));\n}\n\nvar CobbAngle = /*#__PURE__*/function (_TID300Measurement) {\n _inherits(CobbAngle, _TID300Measurement);\n\n var _super = _createSuper(CobbAngle);\n\n function CobbAngle() {\n _classCallCheck(this, CobbAngle);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(CobbAngle, [{\n key: \"contentItem\",\n value: function contentItem() {\n var _this$props = this.props,\n point1 = _this$props.point1,\n point2 = _this$props.point2,\n point3 = _this$props.point3,\n point4 = _this$props.point4,\n rAngle = _this$props.rAngle,\n ReferencedSOPSequence = _this$props.ReferencedSOPSequence;\n return this.getMeasurement([{\n RelationshipType: \"CONTAINS\",\n ValueType: \"NUM\",\n ConceptNameCodeSequence: {\n CodeValue: \"285285000\",\n CodingSchemeDesignator: \"SCT\",\n CodeMeaning: \"Cobb angle\"\n },\n MeasuredValueSequence: {\n MeasurementUnitsCodeSequence: {\n CodeValue: \"deg\",\n CodingSchemeDesignator: \"UCUM\",\n CodingSchemeVersion: \"1.4\",\n CodeMeaning: \"\\xB0\"\n },\n NumericValue: rAngle\n },\n ContentSequence: {\n RelationshipType: \"INFERRED FROM\",\n ValueType: \"SCOORD\",\n GraphicType: \"POLYLINE\",\n GraphicData: [point1.x, point1.y, point2.x, point2.y, point3.x, point3.y, point4.x, point4.y],\n ContentSequence: {\n RelationshipType: \"SELECTED FROM\",\n ValueType: \"IMAGE\",\n ReferencedSOPSequence: ReferencedSOPSequence\n }\n }\n }]);\n }\n }]);\n\n return CobbAngle;\n}(TID300Measurement);\n\nvar COBB_ANGLE = \"CobbAngle\";\n\nvar CobbAngle$1 = /*#__PURE__*/function () {\n function CobbAngle() {\n _classCallCheck(this, CobbAngle);\n } // TODO: this function is required for all Cornerstone Tool Adapters, since it is called by MeasurementReport.\n\n\n _createClass(CobbAngle, null, [{\n key: \"getMeasurementData\",\n value: function getMeasurementData(MeasurementGroup) {\n var _MeasurementReport$ge = MeasurementReport.getSetupMeasurementData(MeasurementGroup),\n defaultState = _MeasurementReport$ge.defaultState,\n NUMGroup = _MeasurementReport$ge.NUMGroup,\n SCOORDGroup = _MeasurementReport$ge.SCOORDGroup;\n\n var state = _objectSpread2(_objectSpread2({}, defaultState), {}, {\n rAngle: NUMGroup.MeasuredValueSequence.NumericValue,\n toolType: CobbAngle.toolType,\n handles: {\n start: {},\n end: {},\n start2: {\n highlight: true,\n drawnIndependently: true\n },\n end2: {\n highlight: true,\n drawnIndependently: true\n },\n textBox: {\n hasMoved: false,\n movesIndependently: false,\n drawnIndependently: true,\n allowedOutsideImage: true,\n hasBoundingBox: true\n }\n }\n });\n\n var _SCOORDGroup$GraphicD = _slicedToArray(SCOORDGroup.GraphicData, 8);\n\n state.handles.start.x = _SCOORDGroup$GraphicD[0];\n state.handles.start.y = _SCOORDGroup$GraphicD[1];\n state.handles.end.x = _SCOORDGroup$GraphicD[2];\n state.handles.end.y = _SCOORDGroup$GraphicD[3];\n state.handles.start2.x = _SCOORDGroup$GraphicD[4];\n state.handles.start2.y = _SCOORDGroup$GraphicD[5];\n state.handles.end2.x = _SCOORDGroup$GraphicD[6];\n state.handles.end2.y = _SCOORDGroup$GraphicD[7];\n return state;\n }\n }, {\n key: \"getTID300RepresentationArguments\",\n value: function getTID300RepresentationArguments(tool) {\n var handles = tool.handles,\n finding = tool.finding,\n findingSites = tool.findingSites;\n var point1 = handles.start;\n var point2 = handles.end;\n var point3 = handles.start2;\n var point4 = handles.end2;\n var rAngle = tool.rAngle;\n var trackingIdentifierTextValue = \"cornerstoneTools@^4.0.0:CobbAngle\";\n return {\n point1: point1,\n point2: point2,\n point3: point3,\n point4: point4,\n rAngle: rAngle,\n trackingIdentifierTextValue: trackingIdentifierTextValue,\n finding: finding,\n findingSites: findingSites || []\n };\n }\n }]);\n\n return CobbAngle;\n}();\n\nCobbAngle$1.toolType = COBB_ANGLE;\nCobbAngle$1.utilityToolType = COBB_ANGLE;\nCobbAngle$1.TID300Representation = CobbAngle;\n\nCobbAngle$1.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {\n if (!TrackingIdentifier.includes(\":\")) {\n return false;\n }\n\n var _TrackingIdentifier$s = TrackingIdentifier.split(\":\"),\n _TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),\n cornerstone4Tag = _TrackingIdentifier$s2[0],\n toolType = _TrackingIdentifier$s2[1];\n\n if (cornerstone4Tag !== CORNERSTONE_4_TAG) {\n return false;\n }\n\n return toolType === COBB_ANGLE;\n};\n\nMeasurementReport.registerTool(CobbAngle$1);\n\nvar ANGLE = \"Angle\";\n\nvar Angle = /*#__PURE__*/function () {\n function Angle() {\n _classCallCheck(this, Angle);\n }\n /**\n * Generate TID300 measurement data for a plane angle measurement - use a CobbAngle, but label it as Angle\n * @param MeasurementGroup\n * @returns\n */\n\n\n _createClass(Angle, null, [{\n key: \"getMeasurementData\",\n value: function getMeasurementData(MeasurementGroup) {\n var _MeasurementReport$ge = MeasurementReport.getSetupMeasurementData(MeasurementGroup),\n defaultState = _MeasurementReport$ge.defaultState,\n NUMGroup = _MeasurementReport$ge.NUMGroup,\n SCOORDGroup = _MeasurementReport$ge.SCOORDGroup;\n\n var state = _objectSpread2(_objectSpread2({}, defaultState), {}, {\n rAngle: NUMGroup.MeasuredValueSequence.NumericValue,\n toolType: Angle.toolType,\n handles: {\n start: {},\n middle: {},\n end: {},\n textBox: {\n hasMoved: false,\n movesIndependently: false,\n drawnIndependently: true,\n allowedOutsideImage: true,\n hasBoundingBox: true\n }\n }\n });\n\n var _SCOORDGroup$GraphicD = _slicedToArray(SCOORDGroup.GraphicData, 8);\n\n state.handles.start.x = _SCOORDGroup$GraphicD[0];\n state.handles.start.y = _SCOORDGroup$GraphicD[1];\n state.handles.middle.x = _SCOORDGroup$GraphicD[2];\n state.handles.middle.y = _SCOORDGroup$GraphicD[3];\n state.handles.middle.x = _SCOORDGroup$GraphicD[4];\n state.handles.middle.y = _SCOORDGroup$GraphicD[5];\n state.handles.end.x = _SCOORDGroup$GraphicD[6];\n state.handles.end.y = _SCOORDGroup$GraphicD[7];\n return state;\n }\n }, {\n key: \"getTID300RepresentationArguments\",\n value: function getTID300RepresentationArguments(tool) {\n var handles = tool.handles,\n finding = tool.finding,\n findingSites = tool.findingSites;\n var point1 = handles.start;\n var point2 = handles.middle;\n var point3 = handles.middle;\n var point4 = handles.end;\n var rAngle = tool.rAngle;\n var trackingIdentifierTextValue = \"cornerstoneTools@^4.0.0:Angle\";\n return {\n point1: point1,\n point2: point2,\n point3: point3,\n point4: point4,\n rAngle: rAngle,\n trackingIdentifierTextValue: trackingIdentifierTextValue,\n finding: finding,\n findingSites: findingSites || []\n };\n }\n }]);\n\n return Angle;\n}();\n\nAngle.toolType = ANGLE;\nAngle.utilityToolType = ANGLE;\nAngle.TID300Representation = CobbAngle;\n\nAngle.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {\n if (!TrackingIdentifier.includes(\":\")) {\n return false;\n }\n\n var _TrackingIdentifier$s = TrackingIdentifier.split(\":\"),\n _TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),\n cornerstone4Tag = _TrackingIdentifier$s2[0],\n toolType = _TrackingIdentifier$s2[1];\n\n if (cornerstone4Tag !== CORNERSTONE_4_TAG) {\n return false;\n }\n\n return toolType === ANGLE;\n};\n\nMeasurementReport.registerTool(Angle);\n\nvar RectangleRoi = /*#__PURE__*/function () {\n function RectangleRoi() {\n _classCallCheck(this, RectangleRoi);\n }\n\n _createClass(RectangleRoi, null, [{\n key: \"getMeasurementData\",\n value: function getMeasurementData(MeasurementGroup) {\n var _MeasurementReport$ge = MeasurementReport.getSetupMeasurementData(MeasurementGroup),\n defaultState = _MeasurementReport$ge.defaultState,\n SCOORDGroup = _MeasurementReport$ge.SCOORDGroup,\n NUMGroup = _MeasurementReport$ge.NUMGroup;\n\n var state = _objectSpread2(_objectSpread2({}, defaultState), {}, {\n toolType: RectangleRoi.toolType,\n handles: {\n start: {},\n end: {},\n textBox: {\n active: false,\n hasMoved: false,\n movesIndependently: false,\n drawnIndependently: true,\n allowedOutsideImage: true,\n hasBoundingBox: true\n },\n initialRotation: 0\n },\n cachedStats: {\n area: NUMGroup ? NUMGroup.MeasuredValueSequence.NumericValue : 0\n },\n color: undefined,\n invalidated: true\n });\n\n var intermediate = {};\n\n var _SCOORDGroup$GraphicD = _slicedToArray(SCOORDGroup.GraphicData, 6);\n\n state.handles.start.x = _SCOORDGroup$GraphicD[0];\n state.handles.start.y = _SCOORDGroup$GraphicD[1];\n intermediate.x = _SCOORDGroup$GraphicD[2];\n intermediate.y = _SCOORDGroup$GraphicD[3];\n state.handles.end.x = _SCOORDGroup$GraphicD[4];\n state.handles.end.y = _SCOORDGroup$GraphicD[5];\n return state;\n }\n }, {\n key: \"getTID300RepresentationArguments\",\n value: function getTID300RepresentationArguments(tool) {\n var finding = tool.finding,\n findingSites = tool.findingSites,\n _tool$cachedStats = tool.cachedStats,\n cachedStats = _tool$cachedStats === void 0 ? {} : _tool$cachedStats,\n handles = tool.handles;\n console.log(\"getTID300 Rectangle\", tool, cachedStats, handles);\n var start = handles.start,\n end = handles.end;\n var points = [start, {\n x: start.x,\n y: end.y\n }, end, {\n x: end.x,\n y: start.y\n }];\n var area = cachedStats.area,\n perimeter = cachedStats.perimeter;\n console.log(\"Point=\", points, \"cachedStats=\", cachedStats);\n var trackingIdentifierTextValue = \"cornerstoneTools@^4.0.0:RectangleRoi\";\n return {\n points: points,\n area: area,\n perimeter: perimeter,\n trackingIdentifierTextValue: trackingIdentifierTextValue,\n finding: finding,\n findingSites: findingSites || []\n };\n }\n }]);\n\n return RectangleRoi;\n}();\n\nRectangleRoi.toolType = \"RectangleRoi\";\nRectangleRoi.utilityToolType = \"RectangleRoi\";\nRectangleRoi.TID300Representation = Polyline;\n\nRectangleRoi.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {\n if (!TrackingIdentifier.includes(\":\")) {\n return false;\n }\n\n var _TrackingIdentifier$s = TrackingIdentifier.split(\":\"),\n _TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),\n cornerstone4Tag = _TrackingIdentifier$s2[0],\n toolType = _TrackingIdentifier$s2[1];\n\n if (cornerstone4Tag !== CORNERSTONE_4_TAG) {\n return false;\n }\n\n return toolType === RectangleRoi.toolType;\n};\n\nMeasurementReport.registerTool(RectangleRoi);\n\nvar Cornerstone = {\n Length: Length$1,\n FreehandRoi: FreehandRoi,\n Bidirectional: Bidirectional$1,\n EllipticalRoi: EllipticalRoi,\n CircleRoi: CircleRoi,\n ArrowAnnotate: ArrowAnnotate,\n MeasurementReport: MeasurementReport,\n Segmentation: Segmentation$3,\n CobbAngle: CobbAngle$1,\n Angle: Angle,\n RectangleRoi: RectangleRoi\n};\n\n// This is a custom coding scheme defined to store some annotations from Cornerstone.\n// Note: CodeMeaning is VR type LO, which means we only actually support 64 characters\n// here this is fine for most labels, but may be problematic at some point.\nvar CORNERSTONEFREETEXT$1 = \"CORNERSTONEFREETEXT\"; // Cornerstone specified coding scheme for storing findings\n\nvar CodingSchemeDesignator = \"CORNERSTONEJS\";\nvar CodingScheme = {\n CodingSchemeDesignator: CodingSchemeDesignator,\n codeValues: {\n CORNERSTONEFREETEXT: CORNERSTONEFREETEXT$1\n }\n};\n\nvar FINDING$2 = {\n CodingSchemeDesignator: \"DCM\",\n CodeValue: \"121071\"\n};\nvar FINDING_SITE$2 = {\n CodingSchemeDesignator: \"SCT\",\n CodeValue: \"363698007\"\n};\nvar FINDING_SITE_OLD$1 = {\n CodingSchemeDesignator: \"SRT\",\n CodeValue: \"G-C0E3\"\n};\n\nvar codeValueMatch$1 = function codeValueMatch(group, code, oldCode) {\n var ConceptNameCodeSequence = group.ConceptNameCodeSequence;\n if (!ConceptNameCodeSequence) return;\n var CodingSchemeDesignator = ConceptNameCodeSequence.CodingSchemeDesignator,\n CodeValue = ConceptNameCodeSequence.CodeValue;\n return CodingSchemeDesignator == code.CodingSchemeDesignator && CodeValue == code.CodeValue || oldCode && CodingSchemeDesignator == oldCode.CodingSchemeDesignator && CodeValue == oldCode.CodeValue;\n};\n\nfunction getTID300ContentItem$1(tool, toolType, ReferencedSOPSequence, toolClass, worldToImageCoords) {\n var args = toolClass.getTID300RepresentationArguments(tool, worldToImageCoords);\n args.ReferencedSOPSequence = ReferencedSOPSequence;\n var TID300Measurement = new toolClass.TID300Representation(args);\n return TID300Measurement;\n}\n\nfunction getMeasurementGroup$1(toolType, toolData, ReferencedSOPSequence, worldToImageCoords) {\n var toolTypeData = toolData[toolType];\n var toolClass = MeasurementReport$1.CORNERSTONE_TOOL_CLASSES_BY_TOOL_TYPE[toolType];\n\n if (!toolTypeData || !toolTypeData.data || !toolTypeData.data.length || !toolClass) {\n return;\n } // Loop through the array of tool instances\n // for this tool\n\n\n var Measurements = toolTypeData.data.map(function (tool) {\n return getTID300ContentItem$1(tool, toolType, ReferencedSOPSequence, toolClass, worldToImageCoords);\n });\n return new TID1501MeasurementGroup(Measurements);\n}\n\nvar MeasurementReport$1 = /*#__PURE__*/function () {\n function MeasurementReport() {\n _classCallCheck(this, MeasurementReport);\n }\n\n _createClass(MeasurementReport, null, [{\n key: \"getCornerstoneLabelFromDefaultState\",\n value: function getCornerstoneLabelFromDefaultState(defaultState) {\n var _defaultState$finding = defaultState.findingSites,\n findingSites = _defaultState$finding === void 0 ? [] : _defaultState$finding,\n finding = defaultState.finding;\n var cornersoneFreeTextCodingValue = CodingScheme.codeValues.CORNERSTONEFREETEXT;\n var freeTextLabel = findingSites.find(function (fs) {\n return fs.CodeValue === cornersoneFreeTextCodingValue;\n });\n\n if (freeTextLabel) {\n return freeTextLabel.CodeMeaning;\n }\n\n if (finding && finding.CodeValue === cornersoneFreeTextCodingValue) {\n return finding.CodeMeaning;\n }\n }\n }, {\n key: \"generateDatasetMeta\",\n value: function generateDatasetMeta() {\n // TODO: what is the correct metaheader\n // http://dicom.nema.org/medical/Dicom/current/output/chtml/part10/chapter_7.html\n // TODO: move meta creation to happen in derivations.js\n var fileMetaInformationVersionArray = new Uint8Array(2);\n fileMetaInformationVersionArray[1] = 1;\n var _meta = {\n FileMetaInformationVersion: {\n Value: [fileMetaInformationVersionArray.buffer],\n vr: \"OB\"\n },\n //MediaStorageSOPClassUID\n //MediaStorageSOPInstanceUID: sopCommonModule.sopInstanceUID,\n TransferSyntaxUID: {\n Value: [\"1.2.840.10008.1.2.1\"],\n vr: \"UI\"\n },\n ImplementationClassUID: {\n Value: [DicomMetaDictionary.uid()],\n // TODO: could be git hash or other valid id\n vr: \"UI\"\n },\n ImplementationVersionName: {\n Value: [\"dcmjs\"],\n vr: \"SH\"\n }\n };\n return _meta;\n }\n }, {\n key: \"generateDerivationSourceDataset\",\n value: function generateDerivationSourceDataset(StudyInstanceUID, SeriesInstanceUID) {\n var _vrMap = {\n PixelData: \"OW\"\n };\n\n var _meta = MeasurementReport.generateDatasetMeta();\n\n var derivationSourceDataset = {\n StudyInstanceUID: StudyInstanceUID,\n SeriesInstanceUID: SeriesInstanceUID,\n _meta: _meta,\n _vrMap: _vrMap\n };\n return derivationSourceDataset;\n }\n }, {\n key: \"getSetupMeasurementData\",\n value: function getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, toolType) {\n var ContentSequence = MeasurementGroup.ContentSequence;\n var contentSequenceArr = toArray(ContentSequence);\n var findingGroup = contentSequenceArr.find(function (group) {\n return codeValueMatch$1(group, FINDING$2);\n });\n var findingSiteGroups = contentSequenceArr.filter(function (group) {\n return codeValueMatch$1(group, FINDING_SITE$2, FINDING_SITE_OLD$1);\n }) || [];\n var NUMGroup = contentSequenceArr.find(function (group) {\n return group.ValueType === \"NUM\";\n });\n var SCOORDGroup = toArray(NUMGroup.ContentSequence).find(function (group) {\n return group.ValueType === \"SCOORD\";\n });\n var ReferencedSOPSequence = SCOORDGroup.ContentSequence.ReferencedSOPSequence;\n var ReferencedSOPInstanceUID = ReferencedSOPSequence.ReferencedSOPInstanceUID,\n ReferencedFrameNumber = ReferencedSOPSequence.ReferencedFrameNumber;\n var referencedImageId = sopInstanceUIDToImageIdMap[ReferencedSOPInstanceUID];\n var imagePlaneModule = metadata.get(\"imagePlaneModule\", referencedImageId);\n var finding = findingGroup ? addAccessors(findingGroup.ConceptCodeSequence) : undefined;\n var findingSites = findingSiteGroups.map(function (fsg) {\n return addAccessors(fsg.ConceptCodeSequence);\n });\n var defaultState = {\n sopInstanceUid: ReferencedSOPInstanceUID,\n annotation: {\n annotationUID: DicomMetaDictionary.uid(),\n metadata: {\n toolName: toolType,\n referencedImageId: referencedImageId,\n FrameOfReferenceUID: imagePlaneModule.frameOfReferenceUID,\n label: \"\"\n }\n },\n finding: finding,\n findingSites: findingSites\n };\n\n if (defaultState.finding) {\n defaultState.description = defaultState.finding.CodeMeaning;\n }\n\n defaultState.annotation.metadata.label = MeasurementReport.getCornerstoneLabelFromDefaultState(defaultState);\n return {\n defaultState: defaultState,\n NUMGroup: NUMGroup,\n SCOORDGroup: SCOORDGroup,\n ReferencedSOPSequence: ReferencedSOPSequence,\n ReferencedSOPInstanceUID: ReferencedSOPInstanceUID,\n ReferencedFrameNumber: ReferencedFrameNumber\n };\n }\n }, {\n key: \"generateReport\",\n value: function generateReport(toolState, metadataProvider, worldToImageCoords, options) {\n // ToolState for array of imageIDs to a Report\n // Assume Cornerstone metadata provider has access to Study / Series / Sop Instance UID\n var allMeasurementGroups = [];\n /* Patient ID\n Warning - Missing attribute or value that would be needed to build DICOMDIR - Patient ID\n Warning - Missing attribute or value that would be needed to build DICOMDIR - Study Date\n Warning - Missing attribute or value that would be needed to build DICOMDIR - Study Time\n Warning - Missing attribute or value that would be needed to build DICOMDIR - Study ID\n */\n\n var sopInstanceUIDsToSeriesInstanceUIDMap = {};\n var derivationSourceDatasets = [];\n\n var _meta = MeasurementReport.generateDatasetMeta(); // Loop through each image in the toolData\n\n\n Object.keys(toolState).forEach(function (imageId) {\n var sopCommonModule = metadataProvider.get(\"sopCommonModule\", imageId);\n var generalSeriesModule = metadataProvider.get(\"generalSeriesModule\", imageId);\n var sopInstanceUID = sopCommonModule.sopInstanceUID,\n sopClassUID = sopCommonModule.sopClassUID;\n var studyInstanceUID = generalSeriesModule.studyInstanceUID,\n seriesInstanceUID = generalSeriesModule.seriesInstanceUID;\n sopInstanceUIDsToSeriesInstanceUIDMap[sopInstanceUID] = seriesInstanceUID;\n\n if (!derivationSourceDatasets.find(function (dsd) {\n return dsd.SeriesInstanceUID === seriesInstanceUID;\n })) {\n // Entry not present for series, create one.\n var derivationSourceDataset = MeasurementReport.generateDerivationSourceDataset(studyInstanceUID, seriesInstanceUID);\n derivationSourceDatasets.push(derivationSourceDataset);\n }\n\n var frameNumber = metadataProvider.get(\"frameNumber\", imageId);\n var toolData = toolState[imageId];\n var toolTypes = Object.keys(toolData);\n var ReferencedSOPSequence = {\n ReferencedSOPClassUID: sopClassUID,\n ReferencedSOPInstanceUID: sopInstanceUID\n };\n var instance = metadataProvider.get(\"instance\", imageId);\n\n if (instance && instance.NumberOfFrames && instance.NumberOfFrames > 1 || Normalizer.isMultiframeSOPClassUID(sopClassUID)) {\n ReferencedSOPSequence.ReferencedFrameNumber = frameNumber;\n } // Loop through each tool type for the image\n\n\n var measurementGroups = [];\n toolTypes.forEach(function (toolType) {\n var group = getMeasurementGroup$1(toolType, toolData, ReferencedSOPSequence, worldToImageCoords);\n\n if (group) {\n measurementGroups.push(group);\n }\n });\n allMeasurementGroups = allMeasurementGroups.concat(measurementGroups);\n });\n var tid1500MeasurementReport = new TID1500MeasurementReport({\n TID1501MeasurementGroups: allMeasurementGroups\n }, options);\n var report = new StructuredReport(derivationSourceDatasets);\n var contentItem = tid1500MeasurementReport.contentItem(derivationSourceDatasets, {\n sopInstanceUIDsToSeriesInstanceUIDMap: sopInstanceUIDsToSeriesInstanceUIDMap\n }); // Merge the derived dataset with the content from the Measurement Report\n\n report.dataset = Object.assign(report.dataset, contentItem);\n report.dataset._meta = _meta;\n return report;\n }\n /**\n * Generate Cornerstone tool state from dataset\n * @param {object} dataset dataset\n * @param {object} hooks\n * @param {function} hooks.getToolClass Function to map dataset to a tool class\n * @returns\n */\n\n }, {\n key: \"generateToolState\",\n value: function generateToolState(dataset, sopInstanceUIDToImageIdMap, imageToWorldCoords, metadata) {\n var hooks = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n\n // For now, bail out if the dataset is not a TID1500 SR with length measurements\n if (dataset.ContentTemplateSequence.TemplateIdentifier !== \"1500\") {\n throw new Error(\"This package can currently only interpret DICOM SR TID 1500\");\n }\n\n var REPORT = \"Imaging Measurements\";\n var GROUP = \"Measurement Group\";\n var TRACKING_IDENTIFIER = \"Tracking Identifier\"; // Identify the Imaging Measurements\n\n var imagingMeasurementContent = toArray(dataset.ContentSequence).find(codeMeaningEquals(REPORT)); // Retrieve the Measurements themselves\n\n var measurementGroups = toArray(imagingMeasurementContent.ContentSequence).filter(codeMeaningEquals(GROUP)); // For each of the supported measurement types, compute the measurement data\n\n var measurementData = {};\n var cornerstoneToolClasses = MeasurementReport.CORNERSTONE_TOOL_CLASSES_BY_UTILITY_TYPE;\n var registeredToolClasses = [];\n Object.keys(cornerstoneToolClasses).forEach(function (key) {\n registeredToolClasses.push(cornerstoneToolClasses[key]);\n measurementData[key] = [];\n });\n measurementGroups.forEach(function (measurementGroup, index) {\n var measurementGroupContentSequence = toArray(measurementGroup.ContentSequence);\n var TrackingIdentifierGroup = measurementGroupContentSequence.find(function (contentItem) {\n return contentItem.ConceptNameCodeSequence.CodeMeaning === TRACKING_IDENTIFIER;\n });\n var TrackingIdentifierValue = TrackingIdentifierGroup.TextValue;\n var toolClass = hooks.getToolClass ? hooks.getToolClass(measurementGroup, dataset, registeredToolClasses) : registeredToolClasses.find(function (tc) {\n return tc.isValidCornerstoneTrackingIdentifier(TrackingIdentifierValue);\n });\n\n if (toolClass) {\n var measurement = toolClass.getMeasurementData(measurementGroup, sopInstanceUIDToImageIdMap, imageToWorldCoords, metadata);\n console.log(\"=== \".concat(toolClass.toolType, \" ===\"));\n console.log(measurement);\n measurementData[toolClass.toolType].push(measurement);\n }\n }); // NOTE: There is no way of knowing the cornerstone imageIds as that could be anything.\n // That is up to the consumer to derive from the SOPInstanceUIDs.\n\n return measurementData;\n }\n }, {\n key: \"registerTool\",\n value: function registerTool(toolClass) {\n MeasurementReport.CORNERSTONE_TOOL_CLASSES_BY_UTILITY_TYPE[toolClass.utilityToolType] = toolClass;\n MeasurementReport.CORNERSTONE_TOOL_CLASSES_BY_TOOL_TYPE[toolClass.toolType] = toolClass;\n MeasurementReport.MEASUREMENT_BY_TOOLTYPE[toolClass.toolType] = toolClass.utilityToolType;\n }\n }]);\n\n return MeasurementReport;\n}();\nMeasurementReport$1.MEASUREMENT_BY_TOOLTYPE = {};\nMeasurementReport$1.CORNERSTONE_TOOL_CLASSES_BY_UTILITY_TYPE = {};\nMeasurementReport$1.CORNERSTONE_TOOL_CLASSES_BY_TOOL_TYPE = {};\n\nvar CORNERSTONE_3D_TAG = \"Cornerstone3DTools@^0.1.0\";\n\nvar LENGTH$2 = \"Length\";\nvar trackingIdentifierTextValue = \"\".concat(CORNERSTONE_3D_TAG, \":\").concat(LENGTH$2);\n\nvar Length$2 = /*#__PURE__*/function () {\n function Length() {\n _classCallCheck(this, Length);\n } // TODO: this function is required for all Cornerstone Tool Adapters, since it is called by MeasurementReport.\n\n\n _createClass(Length, null, [{\n key: \"getMeasurementData\",\n value: function getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, imageToWorldCoords, metadata) {\n var _MeasurementReport$ge = MeasurementReport$1.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, Length.toolType),\n defaultState = _MeasurementReport$ge.defaultState,\n NUMGroup = _MeasurementReport$ge.NUMGroup,\n SCOORDGroup = _MeasurementReport$ge.SCOORDGroup,\n ReferencedFrameNumber = _MeasurementReport$ge.ReferencedFrameNumber;\n\n var referencedImageId = defaultState.annotation.metadata.referencedImageId;\n var GraphicData = SCOORDGroup.GraphicData;\n var worldCoords = [];\n\n for (var i = 0; i < GraphicData.length; i += 2) {\n var point = imageToWorldCoords(referencedImageId, [GraphicData[i], GraphicData[i + 1]]);\n worldCoords.push(point);\n }\n\n var state = defaultState;\n state.annotation.data = {\n handles: {\n points: [worldCoords[0], worldCoords[1]],\n activeHandleIndex: 0,\n textBox: {\n hasMoved: false\n }\n },\n cachedStats: _defineProperty({}, \"imageId:\".concat(referencedImageId), {\n length: NUMGroup ? NUMGroup.MeasuredValueSequence.NumericValue : 0\n }),\n frameNumber: ReferencedFrameNumber\n };\n return state;\n }\n }, {\n key: \"getTID300RepresentationArguments\",\n value: function getTID300RepresentationArguments(tool, worldToImageCoords) {\n var data = tool.data,\n finding = tool.finding,\n findingSites = tool.findingSites,\n metadata = tool.metadata;\n var _data$cachedStats = data.cachedStats,\n cachedStats = _data$cachedStats === void 0 ? {} : _data$cachedStats,\n handles = data.handles;\n var referencedImageId = metadata.referencedImageId;\n\n if (!referencedImageId) {\n throw new Error(\"Length.getTID300RepresentationArguments: referencedImageId is not defined\");\n }\n\n var start = worldToImageCoords(referencedImageId, handles.points[0]);\n var end = worldToImageCoords(referencedImageId, handles.points[1]);\n var point1 = {\n x: start[0],\n y: start[1]\n };\n var point2 = {\n x: end[0],\n y: end[1]\n };\n\n var _ref = cachedStats[\"imageId:\".concat(referencedImageId)] || {},\n distance = _ref.length;\n\n return {\n point1: point1,\n point2: point2,\n distance: distance,\n trackingIdentifierTextValue: trackingIdentifierTextValue,\n finding: finding,\n findingSites: findingSites || []\n };\n }\n }]);\n\n return Length;\n}();\n\nLength$2.toolType = LENGTH$2;\nLength$2.utilityToolType = LENGTH$2;\nLength$2.TID300Representation = Length;\n\nLength$2.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {\n if (!TrackingIdentifier.includes(\":\")) {\n return false;\n }\n\n var _TrackingIdentifier$s = TrackingIdentifier.split(\":\"),\n _TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),\n cornerstone3DTag = _TrackingIdentifier$s2[0],\n toolType = _TrackingIdentifier$s2[1];\n\n if (cornerstone3DTag !== CORNERSTONE_3D_TAG) {\n return false;\n }\n\n return toolType === LENGTH$2;\n};\n\nMeasurementReport$1.registerTool(Length$2);\n\nvar BIDIRECTIONAL$1 = \"Bidirectional\";\nvar LONG_AXIS$1 = \"Long Axis\";\nvar SHORT_AXIS$1 = \"Short Axis\";\nvar trackingIdentifierTextValue$1 = \"\".concat(CORNERSTONE_3D_TAG, \":\").concat(BIDIRECTIONAL$1);\n\nvar Bidirectional$2 = /*#__PURE__*/function () {\n function Bidirectional() {\n _classCallCheck(this, Bidirectional);\n }\n\n _createClass(Bidirectional, null, [{\n key: \"getMeasurementData\",\n value: function getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, imageToWorldCoords, metadata) {\n var _MeasurementReport$ge = MeasurementReport$1.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, Bidirectional.toolType),\n defaultState = _MeasurementReport$ge.defaultState,\n ReferencedFrameNumber = _MeasurementReport$ge.ReferencedFrameNumber;\n\n var referencedImageId = defaultState.annotation.metadata.referencedImageId;\n var ContentSequence = MeasurementGroup.ContentSequence;\n var longAxisNUMGroup = toArray(ContentSequence).find(function (group) {\n return group.ConceptNameCodeSequence.CodeMeaning === LONG_AXIS$1;\n });\n var longAxisSCOORDGroup = toArray(longAxisNUMGroup.ContentSequence).find(function (group) {\n return group.ValueType === \"SCOORD\";\n });\n var shortAxisNUMGroup = toArray(ContentSequence).find(function (group) {\n return group.ConceptNameCodeSequence.CodeMeaning === SHORT_AXIS$1;\n });\n var shortAxisSCOORDGroup = toArray(shortAxisNUMGroup.ContentSequence).find(function (group) {\n return group.ValueType === \"SCOORD\";\n });\n var worldCoords = [];\n [longAxisSCOORDGroup, shortAxisSCOORDGroup].forEach(function (group) {\n var GraphicData = group.GraphicData;\n\n for (var i = 0; i < GraphicData.length; i += 2) {\n var point = imageToWorldCoords(referencedImageId, [GraphicData[i], GraphicData[i + 1]]);\n worldCoords.push(point);\n }\n });\n var state = defaultState;\n state.annotation.data = {\n handles: {\n points: [worldCoords[0], worldCoords[1], worldCoords[2], worldCoords[3]],\n activeHandleIndex: 0,\n textBox: {\n hasMoved: false\n }\n },\n cachedStats: _defineProperty({}, \"imageId:\".concat(referencedImageId), {\n length: longAxisNUMGroup.MeasuredValueSequence.NumericValue,\n width: shortAxisNUMGroup.MeasuredValueSequence.NumericValue\n }),\n frameNumber: ReferencedFrameNumber\n };\n return state;\n }\n }, {\n key: \"getTID300RepresentationArguments\",\n value: function getTID300RepresentationArguments(tool, worldToImageCoords) {\n var data = tool.data,\n finding = tool.finding,\n findingSites = tool.findingSites,\n metadata = tool.metadata;\n var _data$cachedStats = data.cachedStats,\n cachedStats = _data$cachedStats === void 0 ? {} : _data$cachedStats,\n handles = data.handles;\n var referencedImageId = metadata.referencedImageId;\n\n if (!referencedImageId) {\n throw new Error(\"Bidirectional.getTID300RepresentationArguments: referencedImageId is not defined\");\n }\n\n var _ref = cachedStats[\"imageId:\".concat(referencedImageId)] || {},\n length = _ref.length,\n width = _ref.width;\n\n var points = handles.points; // Find the length and width point pairs by comparing the distances of the points at 0,1 to points at 2,3\n\n var firstPointPairs = [points[0], points[1]];\n var secondPointPairs = [points[2], points[3]];\n var firstPointPairsDistance = Math.sqrt(Math.pow(firstPointPairs[0][0] - firstPointPairs[1][0], 2) + Math.pow(firstPointPairs[0][1] - firstPointPairs[1][1], 2) + Math.pow(firstPointPairs[0][2] - firstPointPairs[1][2], 2));\n var secondPointPairsDistance = Math.sqrt(Math.pow(secondPointPairs[0][0] - secondPointPairs[1][0], 2) + Math.pow(secondPointPairs[0][1] - secondPointPairs[1][1], 2) + Math.pow(secondPointPairs[0][2] - secondPointPairs[1][2], 2));\n var shortAxisPoints;\n var longAxisPoints;\n\n if (firstPointPairsDistance > secondPointPairsDistance) {\n shortAxisPoints = firstPointPairs;\n longAxisPoints = secondPointPairs;\n } else {\n shortAxisPoints = secondPointPairs;\n longAxisPoints = firstPointPairs;\n }\n\n var longAxisStartImage = worldToImageCoords(referencedImageId, shortAxisPoints[0]);\n var longAxisEndImage = worldToImageCoords(referencedImageId, shortAxisPoints[1]);\n var shortAxisStartImage = worldToImageCoords(referencedImageId, longAxisPoints[0]);\n var shortAxisEndImage = worldToImageCoords(referencedImageId, longAxisPoints[1]);\n return {\n longAxis: {\n point1: {\n x: longAxisStartImage[0],\n y: longAxisStartImage[1]\n },\n point2: {\n x: longAxisEndImage[0],\n y: longAxisEndImage[1]\n }\n },\n shortAxis: {\n point1: {\n x: shortAxisStartImage[0],\n y: shortAxisStartImage[1]\n },\n point2: {\n x: shortAxisEndImage[0],\n y: shortAxisEndImage[1]\n }\n },\n longAxisLength: length,\n shortAxisLength: width,\n trackingIdentifierTextValue: trackingIdentifierTextValue$1,\n finding: finding,\n findingSites: findingSites || []\n };\n }\n }]);\n\n return Bidirectional;\n}();\n\nBidirectional$2.toolType = BIDIRECTIONAL$1;\nBidirectional$2.utilityToolType = BIDIRECTIONAL$1;\nBidirectional$2.TID300Representation = Bidirectional;\n\nBidirectional$2.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {\n if (!TrackingIdentifier.includes(\":\")) {\n return false;\n }\n\n var _TrackingIdentifier$s = TrackingIdentifier.split(\":\"),\n _TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),\n cornerstone3DTag = _TrackingIdentifier$s2[0],\n toolType = _TrackingIdentifier$s2[1];\n\n if (cornerstone3DTag !== CORNERSTONE_3D_TAG) {\n return false;\n }\n\n return toolType === BIDIRECTIONAL$1;\n};\n\nMeasurementReport$1.registerTool(Bidirectional$2);\n\nvar ELLIPTICALROI$1 = \"EllipticalROI\";\nvar EPSILON$1 = 1e-4;\nvar trackingIdentifierTextValue$2 = \"\".concat(CORNERSTONE_3D_TAG, \":\").concat(ELLIPTICALROI$1);\n\nvar EllipticalROI = /*#__PURE__*/function () {\n function EllipticalROI() {\n _classCallCheck(this, EllipticalROI);\n }\n\n _createClass(EllipticalROI, null, [{\n key: \"getMeasurementData\",\n value: function getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, imageToWorldCoords, metadata) {\n var _MeasurementReport$ge = MeasurementReport$1.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, EllipticalROI.toolType),\n defaultState = _MeasurementReport$ge.defaultState,\n NUMGroup = _MeasurementReport$ge.NUMGroup,\n SCOORDGroup = _MeasurementReport$ge.SCOORDGroup,\n ReferencedFrameNumber = _MeasurementReport$ge.ReferencedFrameNumber;\n\n var referencedImageId = defaultState.annotation.metadata.referencedImageId;\n var GraphicData = SCOORDGroup.GraphicData; // GraphicData is ordered as [majorAxisStartX, majorAxisStartY, majorAxisEndX, majorAxisEndY, minorAxisStartX, minorAxisStartY, minorAxisEndX, minorAxisEndY]\n // But Cornerstone3D points are ordered as top, bottom, left, right for the\n // ellipse so we need to identify if the majorAxis is horizontal or vertical\n // in the image plane and then choose the correct points to use for the ellipse.\n\n var pointsWorld = [];\n\n for (var i = 0; i < GraphicData.length; i += 2) {\n var worldPos = imageToWorldCoords(referencedImageId, [GraphicData[i], GraphicData[i + 1]]);\n pointsWorld.push(worldPos);\n }\n\n var majorAxisStart = fromValues.apply(vec3, _toConsumableArray(pointsWorld[0]));\n var majorAxisEnd = fromValues.apply(vec3, _toConsumableArray(pointsWorld[1]));\n var minorAxisStart = fromValues.apply(vec3, _toConsumableArray(pointsWorld[2]));\n var minorAxisEnd = fromValues.apply(vec3, _toConsumableArray(pointsWorld[3]));\n var majorAxisVec = create$1();\n sub(majorAxisVec, majorAxisEnd, majorAxisStart); // normalize majorAxisVec to avoid scaling issues\n\n normalize(majorAxisVec, majorAxisVec);\n var minorAxisVec = create$1();\n sub(minorAxisVec, minorAxisEnd, minorAxisStart);\n normalize(minorAxisVec, minorAxisVec);\n var imagePlaneModule = metadata.get(\"imagePlaneModule\", referencedImageId);\n\n if (!imagePlaneModule) {\n throw new Error(\"imageId does not have imagePlaneModule metadata\");\n }\n\n var columnCosines = imagePlaneModule.columnCosines; // find which axis is parallel to the columnCosines\n\n var columnCosinesVec = fromValues.apply(vec3, _toConsumableArray(columnCosines));\n var projectedMajorAxisOnColVec = dot(columnCosinesVec, majorAxisVec);\n var projectedMinorAxisOnColVec = dot(columnCosinesVec, minorAxisVec);\n var absoluteOfMajorDotProduct = Math.abs(projectedMajorAxisOnColVec);\n var absoluteOfMinorDotProduct = Math.abs(projectedMinorAxisOnColVec);\n var ellipsePoints = [];\n\n if (Math.abs(absoluteOfMajorDotProduct - 1) < EPSILON$1) {\n ellipsePoints = [pointsWorld[0], pointsWorld[1], pointsWorld[2], pointsWorld[3]];\n } else if (Math.abs(absoluteOfMinorDotProduct - 1) < EPSILON$1) {\n ellipsePoints = [pointsWorld[2], pointsWorld[3], pointsWorld[0], pointsWorld[1]];\n } else {\n console.warn(\"OBLIQUE ELLIPSE NOT YET SUPPORTED\");\n }\n\n var state = defaultState;\n state.annotation.data = {\n handles: {\n points: _toConsumableArray(ellipsePoints),\n activeHandleIndex: 0,\n textBox: {\n hasMoved: false\n }\n },\n cachedStats: _defineProperty({}, \"imageId:\".concat(referencedImageId), {\n area: NUMGroup ? NUMGroup.MeasuredValueSequence.NumericValue : 0\n }),\n frameNumber: ReferencedFrameNumber\n };\n return state;\n }\n }, {\n key: \"getTID300RepresentationArguments\",\n value: function getTID300RepresentationArguments(tool, worldToImageCoords) {\n var data = tool.data,\n finding = tool.finding,\n findingSites = tool.findingSites,\n metadata = tool.metadata;\n var _data$cachedStats = data.cachedStats,\n cachedStats = _data$cachedStats === void 0 ? {} : _data$cachedStats,\n handles = data.handles;\n var referencedImageId = metadata.referencedImageId;\n\n if (!referencedImageId) {\n throw new Error(\"EllipticalROI.getTID300RepresentationArguments: referencedImageId is not defined\");\n }\n\n var top = worldToImageCoords(referencedImageId, handles.points[0]);\n var bottom = worldToImageCoords(referencedImageId, handles.points[1]);\n var left = worldToImageCoords(referencedImageId, handles.points[2]);\n var right = worldToImageCoords(referencedImageId, handles.points[3]); // find the major axis and minor axis\n\n var topBottomLength = Math.abs(top[1] - bottom[1]);\n var leftRightLength = Math.abs(left[0] - right[0]);\n var points = [];\n\n if (topBottomLength > leftRightLength) {\n // major axis is bottom to top\n points.push({\n x: top[0],\n y: top[1]\n });\n points.push({\n x: bottom[0],\n y: bottom[1]\n }); // minor axis is left to right\n\n points.push({\n x: left[0],\n y: left[1]\n });\n points.push({\n x: right[0],\n y: right[1]\n });\n } else {\n // major axis is left to right\n points.push({\n x: left[0],\n y: left[1]\n });\n points.push({\n x: right[0],\n y: right[1]\n }); // minor axis is bottom to top\n\n points.push({\n x: top[0],\n y: top[1]\n });\n points.push({\n x: bottom[0],\n y: bottom[1]\n });\n }\n\n var _ref = cachedStats[\"imageId:\".concat(referencedImageId)] || {},\n area = _ref.area;\n\n return {\n area: area,\n points: points,\n trackingIdentifierTextValue: trackingIdentifierTextValue$2,\n finding: finding,\n findingSites: findingSites || []\n };\n }\n }]);\n\n return EllipticalROI;\n}();\n\nEllipticalROI.toolType = ELLIPTICALROI$1;\nEllipticalROI.utilityToolType = ELLIPTICALROI$1;\nEllipticalROI.TID300Representation = Ellipse;\n\nEllipticalROI.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {\n if (!TrackingIdentifier.includes(\":\")) {\n return false;\n }\n\n var _TrackingIdentifier$s = TrackingIdentifier.split(\":\"),\n _TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),\n cornerstone3DTag = _TrackingIdentifier$s2[0],\n toolType = _TrackingIdentifier$s2[1];\n\n if (cornerstone3DTag !== CORNERSTONE_3D_TAG) {\n return false;\n } // The following is needed since the new cornerstone3D has changed\n // the EllipticalRoi toolName (which was in the old cornerstone) to EllipticalROI\n\n\n return toolType.toLowerCase() === ELLIPTICALROI$1.toLowerCase();\n};\n\nMeasurementReport$1.registerTool(EllipticalROI);\n\nvar ARROW_ANNOTATE$1 = \"ArrowAnnotate\";\nvar trackingIdentifierTextValue$3 = \"\".concat(CORNERSTONE_3D_TAG, \":\").concat(ARROW_ANNOTATE$1);\nvar codeValues = CodingScheme.codeValues,\n CodingSchemeDesignator$1 = CodingScheme.CodingSchemeDesignator;\n\nvar ArrowAnnotate$1 = /*#__PURE__*/function () {\n function ArrowAnnotate() {\n _classCallCheck(this, ArrowAnnotate);\n }\n\n _createClass(ArrowAnnotate, null, [{\n key: \"getMeasurementData\",\n value: function getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, imageToWorldCoords, metadata) {\n var _MeasurementReport$ge = MeasurementReport$1.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, ArrowAnnotate.toolType),\n defaultState = _MeasurementReport$ge.defaultState,\n SCOORDGroup = _MeasurementReport$ge.SCOORDGroup,\n ReferencedFrameNumber = _MeasurementReport$ge.ReferencedFrameNumber;\n\n var referencedImageId = defaultState.annotation.metadata.referencedImageId;\n var text = defaultState.annotation.metadata.label;\n var GraphicData = SCOORDGroup.GraphicData;\n var worldCoords = [];\n\n for (var i = 0; i < GraphicData.length; i += 2) {\n var point = imageToWorldCoords(referencedImageId, [GraphicData[i], GraphicData[i + 1]]);\n worldCoords.push(point);\n } // Since the arrowAnnotate measurement is just a point, to generate the tool state\n // we derive the second point based on the image size relative to the first point.\n\n\n if (worldCoords.length === 1) {\n var imagePixelModule = metadata.get(\"imagePixelModule\", referencedImageId);\n var xOffset = 10;\n var yOffset = 10;\n\n if (imagePixelModule) {\n var columns = imagePixelModule.columns,\n rows = imagePixelModule.rows;\n xOffset = columns / 10;\n yOffset = rows / 10;\n }\n\n var secondPoint = imageToWorldCoords(referencedImageId, [GraphicData[0] + xOffset, GraphicData[1] + yOffset]);\n worldCoords.push(secondPoint);\n }\n\n var state = defaultState;\n state.annotation.data = {\n text: text,\n handles: {\n arrowFirst: true,\n points: [worldCoords[0], worldCoords[1]],\n activeHandleIndex: 0,\n textBox: {\n hasMoved: false\n }\n },\n frameNumber: ReferencedFrameNumber\n };\n return state;\n }\n }, {\n key: \"getTID300RepresentationArguments\",\n value: function getTID300RepresentationArguments(tool, worldToImageCoords) {\n var data = tool.data,\n metadata = tool.metadata;\n var finding = tool.finding,\n findingSites = tool.findingSites;\n var referencedImageId = metadata.referencedImageId;\n\n if (!referencedImageId) {\n throw new Error(\"ArrowAnnotate.getTID300RepresentationArguments: referencedImageId is not defined\");\n }\n\n var _data$handles = data.handles,\n points = _data$handles.points,\n arrowFirst = _data$handles.arrowFirst;\n var point;\n\n if (arrowFirst) {\n point = points[0];\n } else {\n point = points[1];\n }\n\n var pointImage = worldToImageCoords(referencedImageId, point);\n var TID300RepresentationArguments = {\n points: [{\n x: pointImage[0],\n y: pointImage[1]\n }],\n trackingIdentifierTextValue: trackingIdentifierTextValue$3,\n findingSites: findingSites || []\n }; // If freetext finding isn't present, add it from the tool text.\n\n if (!finding || finding.CodeValue !== codeValues.CORNERSTONEFREETEXT) {\n finding = {\n CodeValue: codeValues.CORNERSTONEFREETEXT,\n CodingSchemeDesignator: CodingSchemeDesignator$1,\n CodeMeaning: data.text\n };\n }\n\n TID300RepresentationArguments.finding = finding;\n return TID300RepresentationArguments;\n }\n }]);\n\n return ArrowAnnotate;\n}();\n\nArrowAnnotate$1.toolType = ARROW_ANNOTATE$1;\nArrowAnnotate$1.utilityToolType = ARROW_ANNOTATE$1;\nArrowAnnotate$1.TID300Representation = Point;\n\nArrowAnnotate$1.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {\n if (!TrackingIdentifier.includes(\":\")) {\n return false;\n }\n\n var _TrackingIdentifier$s = TrackingIdentifier.split(\":\"),\n _TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),\n cornerstone3DTag = _TrackingIdentifier$s2[0],\n toolType = _TrackingIdentifier$s2[1];\n\n if (cornerstone3DTag !== CORNERSTONE_3D_TAG) {\n return false;\n }\n\n return toolType === ARROW_ANNOTATE$1;\n};\n\nMeasurementReport$1.registerTool(ArrowAnnotate$1);\n\nvar PROBE = \"Probe\";\nvar trackingIdentifierTextValue$4 = \"\".concat(CORNERSTONE_3D_TAG, \":\").concat(PROBE);\n\nvar Probe = /*#__PURE__*/function () {\n function Probe() {\n _classCallCheck(this, Probe);\n }\n\n _createClass(Probe, null, [{\n key: \"getMeasurementData\",\n value: function getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, imageToWorldCoords, metadata) {\n var _MeasurementReport$ge = MeasurementReport$1.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, Probe.toolType),\n defaultState = _MeasurementReport$ge.defaultState,\n SCOORDGroup = _MeasurementReport$ge.SCOORDGroup,\n ReferencedFrameNumber = _MeasurementReport$ge.ReferencedFrameNumber;\n\n var referencedImageId = defaultState.annotation.metadata.referencedImageId;\n var GraphicData = SCOORDGroup.GraphicData;\n var worldCoords = [];\n\n for (var i = 0; i < GraphicData.length; i += 2) {\n var point = imageToWorldCoords(referencedImageId, [GraphicData[i], GraphicData[i + 1]]);\n worldCoords.push(point);\n }\n\n var state = defaultState;\n state.annotation.data = {\n handles: {\n points: worldCoords,\n activeHandleIndex: null,\n textBox: {\n hasMoved: false\n }\n },\n frameNumber: ReferencedFrameNumber\n };\n return state;\n }\n }, {\n key: \"getTID300RepresentationArguments\",\n value: function getTID300RepresentationArguments(tool, worldToImageCoords) {\n var data = tool.data,\n metadata = tool.metadata;\n var finding = tool.finding,\n findingSites = tool.findingSites;\n var referencedImageId = metadata.referencedImageId;\n\n if (!referencedImageId) {\n throw new Error(\"Probe.getTID300RepresentationArguments: referencedImageId is not defined\");\n }\n\n var points = data.handles.points;\n var pointsImage = points.map(function (point) {\n var pointImage = worldToImageCoords(referencedImageId, point);\n return {\n x: pointImage[0],\n y: pointImage[1]\n };\n });\n var TID300RepresentationArguments = {\n points: pointsImage,\n trackingIdentifierTextValue: trackingIdentifierTextValue$4,\n findingSites: findingSites || [],\n finding: finding\n };\n return TID300RepresentationArguments;\n }\n }]);\n\n return Probe;\n}();\n\nProbe.toolType = PROBE;\nProbe.utilityToolType = PROBE;\nProbe.TID300Representation = Point;\n\nProbe.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {\n if (!TrackingIdentifier.includes(\":\")) {\n return false;\n }\n\n var _TrackingIdentifier$s = TrackingIdentifier.split(\":\"),\n _TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),\n cornerstone3DTag = _TrackingIdentifier$s2[0],\n toolType = _TrackingIdentifier$s2[1];\n\n if (cornerstone3DTag !== CORNERSTONE_3D_TAG) {\n return false;\n }\n\n return toolType === PROBE;\n};\n\nMeasurementReport$1.registerTool(Probe);\n\nvar PLANARFREEHANDROI = \"PlanarFreehandROI\";\nvar trackingIdentifierTextValue$5 = \"\".concat(CORNERSTONE_3D_TAG, \":\").concat(PLANARFREEHANDROI);\nvar closedContourThreshold = 1e-5;\n\nvar PlanarFreehandROI = /*#__PURE__*/function () {\n function PlanarFreehandROI() {\n _classCallCheck(this, PlanarFreehandROI);\n }\n\n _createClass(PlanarFreehandROI, null, [{\n key: \"getMeasurementData\",\n value: function getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, imageToWorldCoords, metadata) {\n var _MeasurementReport$ge = MeasurementReport$1.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, PlanarFreehandROI.toolType),\n defaultState = _MeasurementReport$ge.defaultState,\n SCOORDGroup = _MeasurementReport$ge.SCOORDGroup,\n ReferencedFrameNumber = _MeasurementReport$ge.ReferencedFrameNumber;\n\n var referencedImageId = defaultState.annotation.metadata.referencedImageId;\n var GraphicData = SCOORDGroup.GraphicData;\n var worldCoords = [];\n\n for (var i = 0; i < GraphicData.length; i += 2) {\n var point = imageToWorldCoords(referencedImageId, [GraphicData[i], GraphicData[i + 1]]);\n worldCoords.push(point);\n }\n\n var distanceBetweenFirstAndLastPoint = distance(worldCoords[worldCoords.length - 1], worldCoords[0]);\n var isOpenContour = true; // If the contour is closed, this should have been encoded as exactly the same point, so check for a very small difference.\n\n if (distanceBetweenFirstAndLastPoint < closedContourThreshold) {\n worldCoords.pop(); // Remove the last element which is duplicated.\n\n isOpenContour = false;\n }\n\n var points = [];\n\n if (isOpenContour) {\n points.push(worldCoords[0], worldCoords[worldCoords.length - 1]);\n }\n\n var state = defaultState;\n state.annotation.data = {\n polyline: worldCoords,\n isOpenContour: isOpenContour,\n handles: {\n points: points,\n activeHandleIndex: null,\n textBox: {\n hasMoved: false\n }\n },\n frameNumber: ReferencedFrameNumber\n };\n return state;\n }\n }, {\n key: \"getTID300RepresentationArguments\",\n value: function getTID300RepresentationArguments(tool, worldToImageCoords) {\n var data = tool.data,\n finding = tool.finding,\n findingSites = tool.findingSites,\n metadata = tool.metadata;\n var isOpenContour = data.isOpenContour,\n polyline = data.polyline;\n var referencedImageId = metadata.referencedImageId;\n\n if (!referencedImageId) {\n throw new Error(\"PlanarFreehandROI.getTID300RepresentationArguments: referencedImageId is not defined\");\n }\n\n var points = polyline.map(function (worldPos) {\n return worldToImageCoords(referencedImageId, worldPos);\n });\n\n if (!isOpenContour) {\n // Need to repeat the first point at the end of to have an explicitly closed contour.\n var firstPoint = points[0]; // Explicitly expand to avoid ciruclar references.\n\n points.push([firstPoint[0], firstPoint[1]]);\n }\n\n var area = 0; // TODO -> The tool doesn't have these stats yet.\n\n var perimeter = 0;\n return {\n points: points,\n area: area,\n perimeter: perimeter,\n trackingIdentifierTextValue: trackingIdentifierTextValue$5,\n finding: finding,\n findingSites: findingSites || []\n };\n }\n }]);\n\n return PlanarFreehandROI;\n}();\n\nPlanarFreehandROI.toolType = PLANARFREEHANDROI;\nPlanarFreehandROI.utilityToolType = PLANARFREEHANDROI;\nPlanarFreehandROI.TID300Representation = Polyline;\n\nPlanarFreehandROI.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {\n if (!TrackingIdentifier.includes(\":\")) {\n return false;\n }\n\n var _TrackingIdentifier$s = TrackingIdentifier.split(\":\"),\n _TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),\n cornerstone3DTag = _TrackingIdentifier$s2[0],\n toolType = _TrackingIdentifier$s2[1];\n\n if (cornerstone3DTag !== CORNERSTONE_3D_TAG) {\n return false;\n }\n\n return toolType === PLANARFREEHANDROI;\n};\n\nMeasurementReport$1.registerTool(PlanarFreehandROI);\n\nvar Cornerstone3D = {\n Length: Length$2,\n Bidirectional: Bidirectional$2,\n EllipticalROI: EllipticalROI,\n ArrowAnnotate: ArrowAnnotate$1,\n Probe: Probe,\n PlanarFreehandROI: PlanarFreehandROI,\n MeasurementReport: MeasurementReport$1,\n CodeScheme: CodingScheme,\n CORNERSTONE_3D_TAG: CORNERSTONE_3D_TAG\n};\n\n// Should we move it to Colors.js\n\nfunction dicomlab2RGBA(cielab) {\n var rgba = Colors.dicomlab2RGB(cielab).map(function (x) {\n return Math.round(x * 255);\n });\n rgba.push(255);\n return rgba;\n} // TODO: Copied these functions in from VTK Math so we don't need a dependency.\n// I guess we should put them somewhere\n// https://github.com/Kitware/vtk-js/blob/master/Sources/Common/Core/Math/index.js\n\n\nfunction cross$1(x, y, out) {\n var Zx = x[1] * y[2] - x[2] * y[1];\n var Zy = x[2] * y[0] - x[0] * y[2];\n var Zz = x[0] * y[1] - x[1] * y[0];\n out[0] = Zx;\n out[1] = Zy;\n out[2] = Zz;\n}\n\nfunction norm(x) {\n var n = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 3;\n\n switch (n) {\n case 1:\n return Math.abs(x);\n\n case 2:\n return Math.sqrt(x[0] * x[0] + x[1] * x[1]);\n\n case 3:\n return Math.sqrt(x[0] * x[0] + x[1] * x[1] + x[2] * x[2]);\n\n default:\n {\n var sum = 0;\n\n for (var i = 0; i < n; i++) {\n sum += x[i] * x[i];\n }\n\n return Math.sqrt(sum);\n }\n }\n}\n\nfunction normalize$3(x) {\n var den = norm(x);\n\n if (den !== 0.0) {\n x[0] /= den;\n x[1] /= den;\n x[2] /= den;\n }\n\n return den;\n}\n\nfunction subtract$1(a, b, out) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n} // TODO: This is a useful utility on its own. We should move it somewhere?\n// dcmjs.adapters.vtk.Multiframe? dcmjs.utils?\n\n\nfunction geometryFromFunctionalGroups(dataset, PerFrameFunctionalGroups) {\n var geometry = {};\n var pixelMeasures = dataset.SharedFunctionalGroupsSequence.PixelMeasuresSequence;\n var planeOrientation = dataset.SharedFunctionalGroupsSequence.PlaneOrientationSequence; // Find the origin of the volume from the PerFrameFunctionalGroups' ImagePositionPatient values\n //\n // TODO: assumes sorted frames. This should read the ImagePositionPatient from each frame and\n // sort them to obtain the first and last position along the acquisition axis.\n\n var firstFunctionalGroup = PerFrameFunctionalGroups[0];\n var lastFunctionalGroup = PerFrameFunctionalGroups[PerFrameFunctionalGroups.length - 1];\n var firstPosition = firstFunctionalGroup.PlanePositionSequence.ImagePositionPatient.map(Number);\n var lastPosition = lastFunctionalGroup.PlanePositionSequence.ImagePositionPatient.map(Number);\n geometry.origin = firstPosition; // NB: DICOM PixelSpacing is defined as Row then Column,\n // unlike ImageOrientationPatient\n\n geometry.spacing = [pixelMeasures.PixelSpacing[1], pixelMeasures.PixelSpacing[0], pixelMeasures.SpacingBetweenSlices].map(Number);\n geometry.dimensions = [dataset.Columns, dataset.Rows, PerFrameFunctionalGroups.length].map(Number);\n var orientation = planeOrientation.ImageOrientationPatient.map(Number);\n var columnStepToPatient = orientation.slice(0, 3);\n var rowStepToPatient = orientation.slice(3, 6);\n geometry.planeNormal = [];\n cross$1(columnStepToPatient, rowStepToPatient, geometry.planeNormal);\n geometry.sliceStep = [];\n subtract$1(lastPosition, firstPosition, geometry.sliceStep);\n normalize$3(geometry.sliceStep);\n geometry.direction = columnStepToPatient.concat(rowStepToPatient).concat(geometry.sliceStep);\n return geometry;\n}\n\nvar Segmentation$4 = /*#__PURE__*/function () {\n function Segmentation() {\n _classCallCheck(this, Segmentation);\n }\n /**\n * Produces an array of Segments from an input DICOM Segmentation dataset\n *\n * Segments are returned with Geometry values that can be used to create\n * VTK Image Data objects.\n *\n * @example Example usage to create VTK Volume actors from each segment:\n *\n * const actors = [];\n * const segments = generateToolState(dataset);\n * segments.forEach(segment => {\n * // now make actors using the segment information\n * const scalarArray = vtk.Common.Core.vtkDataArray.newInstance({\n * name: \"Scalars\",\n * numberOfComponents: 1,\n * values: segment.pixelData,\n * });\n *\n * const imageData = vtk.Common.DataModel.vtkImageData.newInstance();\n * imageData.getPointData().setScalars(scalarArray);\n * imageData.setDimensions(geometry.dimensions);\n * imageData.setSpacing(geometry.spacing);\n * imageData.setOrigin(geometry.origin);\n * imageData.setDirection(geometry.direction);\n *\n * const mapper = vtk.Rendering.Core.vtkVolumeMapper.newInstance();\n * mapper.setInputData(imageData);\n * mapper.setSampleDistance(2.);\n *\n * const actor = vtk.Rendering.Core.vtkVolume.newInstance();\n * actor.setMapper(mapper);\n *\n * actors.push(actor);\n * });\n *\n * @param dataset\n * @return {{}}\n */\n\n\n _createClass(Segmentation, null, [{\n key: \"generateSegments\",\n value: function generateSegments(dataset) {\n if (dataset.SegmentSequence.constructor.name !== \"Array\") {\n dataset.SegmentSequence = [dataset.SegmentSequence];\n }\n\n dataset.SegmentSequence.forEach(function (segment) {\n // TODO: other interesting fields could be extracted from the segment\n // TODO: Read SegmentsOverlay field\n // http://dicom.nema.org/medical/dicom/current/output/chtml/part03/sect_C.8.20.2.html\n // TODO: Looks like vtkColor only wants RGB in 0-1 values.\n // Why was this example converting to RGBA with 0-255 values?\n var color = dicomlab2RGBA(segment.RecommendedDisplayCIELabValue);\n segments[segment.SegmentNumber] = {\n color: color,\n functionalGroups: [],\n offset: null,\n size: null,\n pixelData: null\n };\n }); // make a list of functional groups per segment\n\n dataset.PerFrameFunctionalGroupsSequence.forEach(function (functionalGroup) {\n var segmentNumber = functionalGroup.SegmentIdentificationSequence.ReferencedSegmentNumber;\n segments[segmentNumber].functionalGroups.push(functionalGroup);\n }); // determine per-segment index into the pixel data\n // TODO: only handles one-bit-per pixel\n\n var frameSize = Math.ceil(dataset.Rows * dataset.Columns / 8);\n var nextOffset = 0;\n Object.keys(segments).forEach(function (segmentNumber) {\n var segment = segments[segmentNumber];\n segment.numberOfFrames = segment.functionalGroups.length;\n segment.size = segment.numberOfFrames * frameSize;\n segment.offset = nextOffset;\n nextOffset = segment.offset + segment.size;\n var packedSegment = dataset.PixelData.slice(segment.offset, nextOffset);\n segment.pixelData = BitArray.unpack(packedSegment);\n var geometry = geometryFromFunctionalGroups(dataset, segment.functionalGroups);\n segment.geometry = geometry;\n });\n return segments;\n }\n }]);\n\n return Segmentation;\n}();\n\nvar VTKjs = {\n Segmentation: Segmentation$4\n};\n\nfunction getTID300ContentItem$2(tool, toolClass) {\n var args = toolClass.getTID300RepresentationArguments(tool);\n args.use3DSpatialCoordinates = true;\n return new toolClass.TID300Representation(args);\n}\n\nfunction getMeasurementGroup$2(graphicType, measurements) {\n var toolClass = MeasurementReport$2.MICROSCOPY_TOOL_CLASSES_BY_TOOL_TYPE[graphicType]; // Loop through the array of tool instances\n // for this tool\n\n var Measurements = measurements.map(function (tool) {\n return getTID300ContentItem$2(tool, toolClass);\n });\n return new TID1501MeasurementGroup(Measurements);\n}\n\nvar MeasurementReport$2 = /*#__PURE__*/function () {\n function MeasurementReport() {\n _classCallCheck(this, MeasurementReport);\n }\n\n _createClass(MeasurementReport, null, [{\n key: \"generateReport\",\n value: function generateReport(rois, metadataProvider, options) {\n // Input is all ROIS returned via viewer.getALLROIs()\n // let report = MeasurementReport.generateReport(viewer.getAllROIs());\n // Sort and split into arrays by scoord3d.graphicType\n var measurementsByGraphicType = {};\n rois.forEach(function (roi) {\n var graphicType = roi.scoord3d.graphicType;\n\n if (graphicType !== \"POINT\") {\n // adding z coord as 0\n roi.scoord3d.graphicData.map(function (coord) {\n return coord.push(0);\n });\n }\n\n if (!measurementsByGraphicType[graphicType]) {\n measurementsByGraphicType[graphicType] = [];\n }\n\n measurementsByGraphicType[graphicType].push(roi.scoord3d);\n }); // For each measurement, get the utility arguments using the adapter, and create TID300 Measurement\n // Group these TID300 Measurements into a TID1501 Measurement Group (for each graphicType)\n // Use TID1500MeasurementReport utility to create a single report from the created groups\n // return report;\n\n var allMeasurementGroups = [];\n var measurementGroups = [];\n Object.keys(measurementsByGraphicType).forEach(function (graphicType) {\n var measurements = measurementsByGraphicType[graphicType];\n var group = getMeasurementGroup$2(graphicType, measurements);\n\n if (group) {\n measurementGroups.push(group);\n }\n\n allMeasurementGroups = allMeasurementGroups.concat(measurementGroups);\n });\n\n var _MeasurementReport = new TID1500MeasurementReport({\n TID1501MeasurementGroups: allMeasurementGroups\n }, options); // TODO: what is the correct metaheader\n // http://dicom.nema.org/medical/Dicom/current/output/chtml/part10/chapter_7.html\n // TODO: move meta creation to happen in derivations.js\n\n\n var fileMetaInformationVersionArray = new Uint8Array(2);\n fileMetaInformationVersionArray[1] = 1; // TODO: Find out how to reference the data from dicom-microscopy-viewer\n\n var studyInstanceUID = \"12.4\";\n var seriesInstanceUID = \"12.4\";\n var derivationSourceDataset = {\n StudyInstanceUID: studyInstanceUID,\n SeriesInstanceUID: seriesInstanceUID //SOPInstanceUID: sopInstanceUID, // TODO: Necessary?\n //SOPClassUID: sopClassUID,\n\n };\n var _meta = {\n FileMetaInformationVersion: {\n Value: [fileMetaInformationVersionArray.buffer],\n vr: \"OB\"\n },\n //MediaStorageSOPClassUID\n //MediaStorageSOPInstanceUID: sopCommonModule.sopInstanceUID,\n TransferSyntaxUID: {\n Value: [\"1.2.840.10008.1.2.1\"],\n vr: \"UI\"\n },\n ImplementationClassUID: {\n Value: [DicomMetaDictionary.uid()],\n // TODO: could be git hash or other valid id\n vr: \"UI\"\n },\n ImplementationVersionName: {\n Value: [\"dcmjs\"],\n vr: \"SH\"\n }\n };\n var _vrMap = {\n PixelData: \"OW\"\n };\n derivationSourceDataset._meta = _meta;\n derivationSourceDataset._vrMap = _vrMap;\n var report = new StructuredReport([derivationSourceDataset]);\n\n var contentItem = _MeasurementReport.contentItem(derivationSourceDataset); // Merge the derived dataset with the content from the Measurement Report\n\n\n report.dataset = Object.assign(report.dataset, contentItem);\n report.dataset._meta = _meta;\n return report;\n } //@ToDo\n\n }, {\n key: \"generateToolState\",\n value: function generateToolState(dataset) {\n // For now, bail out if the dataset is not a TID1500 SR with length measurements\n if (dataset.ContentTemplateSequence.TemplateIdentifier !== \"1500\") {\n throw new Error(\"This package can currently only interpret DICOM SR TID 1500\");\n }\n\n var REPORT = \"Imaging Measurements\";\n var GROUP = \"Measurement Group\"; // Split the imagingMeasurementContent into measurement groups by their code meaning\n\n var imagingMeasurementContent = toArray(dataset.ContentSequence).find(codeMeaningEquals(REPORT)); // Retrieve the Measurements themselves\n\n var measurementGroups = toArray(imagingMeasurementContent.ContentSequence).filter(codeMeaningEquals(GROUP)); // // For each of the supported measurement types, compute the measurement data\n\n var measurementData = {};\n measurementGroups.forEach(function (mg) {\n Object.keys(MeasurementReport.MICROSCOPY_TOOL_CLASSES_BY_UTILITY_TYPE).forEach(function (measurementType) {\n // Find supported measurement types in the Structured Report\n var measurementGroupContentSequence = toArray(mg.ContentSequence);\n var measurementContent = measurementGroupContentSequence.filter(graphicTypeEquals(measurementType.toUpperCase()));\n\n if (!measurementContent || measurementContent.length === 0) {\n return;\n }\n\n var toolClass = MeasurementReport.MICROSCOPY_TOOL_CLASSES_BY_UTILITY_TYPE[measurementType];\n var toolType = toolClass.toolType;\n\n if (!toolClass.getMeasurementData) {\n throw new Error(\"MICROSCOPY Tool Adapters must define a getMeasurementData static method.\");\n }\n\n if (!measurementData[toolType]) {\n measurementData[toolType] = [];\n }\n\n measurementData[toolType] = [].concat(_toConsumableArray(measurementData[toolType]), _toConsumableArray(toolClass.getMeasurementData(measurementContent)));\n });\n });\n return measurementData;\n }\n }, {\n key: \"registerTool\",\n value: function registerTool(toolClass) {\n MeasurementReport.MICROSCOPY_TOOL_CLASSES_BY_UTILITY_TYPE[toolClass.utilityToolType] = toolClass;\n MeasurementReport.MICROSCOPY_TOOL_CLASSES_BY_TOOL_TYPE[toolClass.graphicType] = toolClass;\n MeasurementReport.MEASUREMENT_BY_TOOLTYPE[toolClass.graphicType] = toolClass.utilityToolType;\n }\n }]);\n\n return MeasurementReport;\n}();\nMeasurementReport$2.MEASUREMENT_BY_TOOLTYPE = {};\nMeasurementReport$2.MICROSCOPY_TOOL_CLASSES_BY_UTILITY_TYPE = {};\nMeasurementReport$2.MICROSCOPY_TOOL_CLASSES_BY_TOOL_TYPE = {};\n\nvar Polyline$1 = /*#__PURE__*/function () {\n function Polyline() {\n _classCallCheck(this, Polyline);\n }\n\n _createClass(Polyline, null, [{\n key: \"getMeasurementData\",\n value: function getMeasurementData(measurementContent) {\n // removing duplication and Getting only the graphicData information\n var measurement = measurementContent.map(function (item) {\n return item.GraphicData;\n }).filter(function (s) {\n return function (a) {\n return function (j) {\n return !s.has(j) && s.add(j);\n }(JSON.stringify(a));\n };\n }(new Set())); // Chunking the array into size of three\n\n return measurement.map(function (measurement) {\n return measurement.reduce(function (all, one, i) {\n var ch = Math.floor(i / 3);\n all[ch] = [].concat(all[ch] || [], one);\n return all;\n }, []);\n });\n }\n }, {\n key: \"getTID300RepresentationArguments\",\n value: function getTID300RepresentationArguments(scoord3d) {\n if (scoord3d.graphicType !== \"POLYLINE\") {\n throw new Error(\"We expected a POLYLINE graphicType\");\n }\n\n var points = scoord3d.graphicData;\n var lengths = 1;\n return {\n points: points,\n lengths: lengths\n };\n }\n }]);\n\n return Polyline;\n}();\n\nPolyline$1.graphicType = \"POLYLINE\";\nPolyline$1.toolType = \"Polyline\";\nPolyline$1.utilityToolType = \"Polyline\";\nPolyline$1.TID300Representation = Polyline;\nMeasurementReport$2.registerTool(Polyline$1);\n\n/**\n * Expand an array of points stored as objects into\n * a flattened array of points\n *\n * @param points [{x: 0, y: 1}, {x: 1, y: 2}] or [{x: 0, y: 1, z: 0}, {x: 1, y: 2, z: 0}]\n * @return {Array} [point1x, point1y, point2x, point2y] or [point1x, point1y, point1z, point2x, point2y, point2z]\n */\n\nfunction expandPoints$3(points) {\n var allPoints = [];\n points.forEach(function (point) {\n allPoints.push(point[0]);\n allPoints.push(point[1]);\n\n if (point[2] !== undefined) {\n allPoints.push(point[2]);\n }\n });\n return allPoints;\n}\n\nvar Polygon = /*#__PURE__*/function (_TID300Measurement) {\n _inherits(Polygon, _TID300Measurement);\n\n var _super = _createSuper(Polygon);\n\n function Polygon() {\n _classCallCheck(this, Polygon);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(Polygon, [{\n key: \"contentItem\",\n value: function contentItem() {\n var _this$props = this.props,\n points = _this$props.points,\n ReferencedSOPSequence = _this$props.ReferencedSOPSequence,\n _this$props$use3DSpat = _this$props.use3DSpatialCoordinates,\n use3DSpatialCoordinates = _this$props$use3DSpat === void 0 ? false : _this$props$use3DSpat;\n var perimeter = {};\n var GraphicData = expandPoints$3(points);\n return this.getMeasurement([{\n RelationshipType: \"CONTAINS\",\n ValueType: \"NUM\",\n ConceptNameCodeSequence: {\n CodeValue: \"G-A197\",\n CodingSchemeDesignator: \"SRT\",\n CodeMeaning: \"Perimeter\"\n },\n MeasuredValueSequence: {\n MeasurementUnitsCodeSequence: {\n CodeValue: \"mm\",\n CodingSchemeDesignator: \"UCUM\",\n CodingSchemeVersion: \"1.4\",\n CodeMeaning: \"millimeter\"\n },\n NumericValue: perimeter\n },\n ContentSequence: {\n RelationshipType: \"INFERRED FROM\",\n ValueType: use3DSpatialCoordinates ? \"SCOORD3D\" : \"SCOORD\",\n GraphicType: \"POLYGON\",\n GraphicData: GraphicData,\n ContentSequence: use3DSpatialCoordinates ? undefined : {\n RelationshipType: \"SELECTED FROM\",\n ValueType: \"IMAGE\",\n ReferencedSOPSequence: ReferencedSOPSequence\n }\n }\n }, {\n RelationshipType: \"CONTAINS\",\n ValueType: \"NUM\",\n ConceptNameCodeSequence: {\n CodeValue: \"G-A166\",\n CodingSchemeDesignator: \"SRT\",\n CodeMeaning: \"Area\"\n },\n MeasuredValueSequence: {\n MeasurementUnitsCodeSequence: {\n CodeValue: \"mm2\",\n CodingSchemeDesignator: \"UCUM\",\n CodingSchemeVersion: \"1.4\",\n CodeMeaning: \"SquareMilliMeter\"\n },\n NumericValue: perimeter\n },\n ContentSequence: {\n RelationshipType: \"INFERRED FROM\",\n ValueType: use3DSpatialCoordinates ? \"SCOORD3D\" : \"SCOORD\",\n GraphicType: \"POLYGON\",\n GraphicData: GraphicData,\n ContentSequence: use3DSpatialCoordinates ? undefined : {\n RelationshipType: \"SELECTED FROM\",\n ValueType: \"IMAGE\",\n ReferencedSOPSequence: ReferencedSOPSequence\n }\n }\n }]);\n }\n }]);\n\n return Polygon;\n}(TID300Measurement);\n\nvar Polygon$1 = /*#__PURE__*/function () {\n function Polygon() {\n _classCallCheck(this, Polygon);\n }\n\n _createClass(Polygon, null, [{\n key: \"getMeasurementData\",\n value: function getMeasurementData(measurementContent) {\n // removing duplication and Getting only the graphicData information\n var measurement = measurementContent.map(function (item) {\n return item.GraphicData;\n }).filter(function (s) {\n return function (a) {\n return function (j) {\n return !s.has(j) && s.add(j);\n }(JSON.stringify(a));\n };\n }(new Set())); // Chunking the array into size of three\n\n return measurement.map(function (measurement) {\n return measurement.reduce(function (all, one, i) {\n var ch = Math.floor(i / 3);\n all[ch] = [].concat(all[ch] || [], one);\n return all;\n }, []);\n });\n }\n }, {\n key: \"getTID300RepresentationArguments\",\n value: function getTID300RepresentationArguments(scoord3d) {\n if (scoord3d.graphicType !== \"POLYGON\") {\n throw new Error(\"We expected a POLYGON graphicType\");\n }\n\n var points = scoord3d.graphicData;\n var lengths = 1;\n return {\n points: points,\n lengths: lengths\n };\n }\n }]);\n\n return Polygon;\n}();\n\nPolygon$1.graphicType = \"POLYGON\";\nPolygon$1.toolType = \"Polygon\";\nPolygon$1.utilityToolType = \"Polygon\";\nPolygon$1.TID300Representation = Polygon;\nMeasurementReport$2.registerTool(Polygon$1);\n\nvar Point$1 = /*#__PURE__*/function () {\n function Point() {\n _classCallCheck(this, Point);\n }\n\n _createClass(Point, null, [{\n key: \"getMeasurementData\",\n value: function getMeasurementData(measurementContent) {\n var measurement = measurementContent.map(function (item) {\n return item.GraphicData;\n });\n return measurement.filter(function (s) {\n return function (a) {\n return function (j) {\n return !s.has(j) && s.add(j);\n }(JSON.stringify(a));\n };\n }(new Set()));\n }\n }, {\n key: \"getTID300RepresentationArguments\",\n value: function getTID300RepresentationArguments(scoord3d) {\n if (scoord3d.graphicType !== \"POINT\") {\n throw new Error(\"We expected a POINT graphicType\");\n }\n\n var points = [scoord3d.graphicData];\n var lengths = 1;\n return {\n points: points,\n lengths: lengths\n };\n }\n }]);\n\n return Point;\n}();\n\nPoint$1.graphicType = \"POINT\";\nPoint$1.toolType = \"Point\";\nPoint$1.utilityToolType = \"Point\";\nPoint$1.TID300Representation = Point;\nMeasurementReport$2.registerTool(Point$1);\n\nvar Circle$1 = /*#__PURE__*/function () {\n function Circle() {\n _classCallCheck(this, Circle);\n }\n\n _createClass(Circle, null, [{\n key: \"getMeasurementData\",\n value: function getMeasurementData(measurementContent) {\n // removing duplication and Getting only the graphicData information\n var measurement = measurementContent.map(function (item) {\n return item.GraphicData;\n }).filter(function (s) {\n return function (a) {\n return function (j) {\n return !s.has(j) && s.add(j);\n }(JSON.stringify(a));\n };\n }(new Set())); // Chunking the array into size of three\n\n return measurement.map(function (measurement) {\n return measurement.reduce(function (all, one, i) {\n var ch = Math.floor(i / 3);\n all[ch] = [].concat(all[ch] || [], one);\n return all;\n }, []);\n });\n }\n }, {\n key: \"getTID300RepresentationArguments\",\n value: function getTID300RepresentationArguments(scoord3d) {\n if (scoord3d.graphicType !== \"CIRCLE\") {\n throw new Error(\"We expected a CIRCLE graphicType\");\n }\n\n var points = scoord3d.graphicData;\n var lengths = 1;\n return {\n points: points,\n lengths: lengths\n };\n }\n }]);\n\n return Circle;\n}();\n\nCircle$1.graphicType = \"CIRCLE\";\nCircle$1.toolType = \"Circle\";\nCircle$1.utilityToolType = \"Circle\";\nCircle$1.TID300Representation = Circle;\nMeasurementReport$2.registerTool(Circle$1);\n\nvar Ellipse$1 = /*#__PURE__*/function () {\n function Ellipse() {\n _classCallCheck(this, Ellipse);\n }\n\n _createClass(Ellipse, null, [{\n key: \"getMeasurementData\",\n value: function getMeasurementData(measurementContent) {\n // removing duplication and Getting only the graphicData information\n var measurement = measurementContent.map(function (item) {\n return item.GraphicData;\n }).filter(function (s) {\n return function (a) {\n return function (j) {\n return !s.has(j) && s.add(j);\n }(JSON.stringify(a));\n };\n }(new Set())); // Chunking the array into size of three\n\n return measurement.map(function (measurement) {\n return measurement.reduce(function (all, one, i) {\n var ch = Math.floor(i / 3);\n all[ch] = [].concat(all[ch] || [], one);\n return all;\n }, []);\n });\n }\n }, {\n key: \"getTID300RepresentationArguments\",\n value: function getTID300RepresentationArguments(scoord3d) {\n if (scoord3d.graphicType !== \"Ellipse\") {\n throw new Error(\"We expected a Ellipse graphicType\");\n }\n\n var points = scoord3d.graphicData;\n var lengths = 1;\n return {\n points: points,\n lengths: lengths\n };\n }\n }]);\n\n return Ellipse;\n}();\n\nEllipse$1.graphicType = \"ELLIPSE\";\nEllipse$1.toolType = \"Ellipse\";\nEllipse$1.utilityToolType = \"Ellipse\";\nEllipse$1.TID300Representation = Ellipse;\nMeasurementReport$2.registerTool(Ellipse$1);\n\nvar DICOMMicroscopyViewer = {\n Polyline: Polyline$1,\n Polygon: Polygon$1,\n Point: Point$1,\n Circle: Circle$1,\n Ellipse: Ellipse$1,\n MeasurementReport: MeasurementReport$2\n};\n\nvar adapters = {\n Cornerstone: Cornerstone,\n Cornerstone3D: Cornerstone3D,\n VTKjs: VTKjs,\n DICOMMicroscopyViewer: DICOMMicroscopyViewer\n};\n\nvar TID1500 = {\n TID1500MeasurementReport: TID1500MeasurementReport,\n TID1501MeasurementGroup: TID1501MeasurementGroup\n};\n\n// - Cornerstone Probe\n// Note: OHIF currently uses Cornerstone's 'dragProbe'. We need to add the regular Probe tool, which drops a single point.\n//\n// Hierarchy\n// TID 1500 MeasurementReport\n// --TID 1501 Measurement Group\n// ---Measurement Group (DCM 125007)\n// ----TID 300 Measurement\n// ------SCOORD. Graphic Type: POINT\n//\n//\n// - Cornerstone Ellipse:\n//\n// Should specify the Mean Modality Pixel Value measured in whatever units the image is in\n// Should specify the Standard Deviation Modality Pixel Value measured in whatever units the image is in\n//\n//\n// - Cornerstone Rectangle ROI\n//\n// Hierarchy\n// TID 1500 MeasurementReport\n// --TID 1501 Measurement Group\n// ---Measurement Group (DCM 125007)\n// ----TID 300 Measurement\n// ------SCOORD. Graphic Type: POLYLINE\n// ------ Use concept corresponding to Rectangle measurement\n//\n// http://dicom.nema.org/medical/dicom/current/output/html/part16.html#sect_TID_4019\n//\n// OR\n// Note: This should be the same as a Freehand ROI, more or less. We add a TID 4019: Algorithm Identification flag to specify that this was created (and should be rehydrated) into a Rectangle ROI.\n// TODO: Should we use a Derivation instead? http://dicom.nema.org/medical/dicom/current/output/html/part16.html#DCM_121401\n// Should specify the Area measured in mmˆ2, including the units in UCUM\n// Should specify the Mean Modality Pixel Value measured in whatever units the image is in\n// Should specify the Standard Deviation Modality Pixel Value measured in whatever units the image is in\n//\n//\n// - Cornerstone Simple Angle tool\n//\n// Hierarchy\n// TID 1500 MeasurementReport\n// --TID 1501 Measurement Group\n// ---Measurement Group (DCM 125007)\n// ----TID 300 Measurement\n// ------SCOORD. Graphic Type: POLYLINE\n// (ftp://dicom.nema.org/MEDICAL/dicom/current/output/chtml/part03/sect_C.10.5.html)\n// ----TID 300 Measurement\n// ------SCOORD. Graphic Type: POLYLINE\n// (ftp://dicom.nema.org/MEDICAL/dicom/current/output/chtml/part03/sect_C.10.5.html)\n//\n// ------ Use concept corresponding to Angle measurement\n//\n// Two lines specify the angle\n// Should specify the Angle measured in Degrees, including the units in UCUM\n//\n\nvar TID300 = {\n TID300Measurement: TID300Measurement,\n Length: Length,\n CobbAngle: CobbAngle,\n Bidirectional: Bidirectional,\n Polyline: Polyline,\n Ellipse: Ellipse\n};\n\n/**\n * Converts a Uint8Array to a String.\n * @param {Uint8Array} array that should be converted\n * @param {Number} offset array offset in case only subset of array items should be extracted (default: 0)\n * @param {Number} limit maximum number of array items that should be extracted (defaults to length of array)\n * @returns {String}\n */\nfunction uint8ArrayToString(arr, offset, limit) {\n offset = offset || 0;\n limit = limit || arr.length - offset;\n var str = \"\";\n\n for (var i = offset; i < offset + limit; i++) {\n str += String.fromCharCode(arr[i]);\n }\n\n return str;\n}\n/**\n * Converts a String to a Uint8Array.\n * @param {String} str string that should be converted\n * @returns {Uint8Array}\n */\n\n\nfunction stringToUint8Array(str) {\n var arr = new Uint8Array(str.length);\n\n for (var i = 0, j = str.length; i < j; i++) {\n arr[i] = str.charCodeAt(i);\n }\n\n return arr;\n}\n/**\n * Identifies the boundary in a multipart/related message header.\n * @param {String} header message header\n * @returns {String} boundary\n */\n\n\nfunction identifyBoundary(header) {\n var parts = header.split(\"\\r\\n\");\n\n for (var i = 0; i < parts.length; i++) {\n if (parts[i].substr(0, 2) === \"--\") {\n return parts[i];\n }\n }\n}\n/**\n * Checks whether a given token is contained by a message at a given offset.\n * @param {Uint8Array} message message content\n * @param {Uint8Array} token substring that should be present\n * @param {Number} offset offset in message content from where search should start\n * @returns {Boolean} whether message contains token at offset\n */\n\n\nfunction containsToken(message, token) {\n var offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n\n if (offset + token.length > message.length) {\n return false;\n }\n\n var index = offset;\n\n for (var i = 0; i < token.length; i++) {\n if (token[i] !== message[index++]) {\n return false;\n }\n }\n\n return true;\n}\n/**\n * Finds a given token in a message at a given offset.\n * @param {Uint8Array} message message content\n * @param {Uint8Array} token substring that should be found\n * @param {Number} offset message body offset from where search should start\n * @returns {Boolean} whether message has a part at given offset or not\n */\n\n\nfunction findToken(message, token) {\n var offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var maxSearchLength = arguments.length > 3 ? arguments[3] : undefined;\n var searchLength = message.length;\n\n if (maxSearchLength) {\n searchLength = Math.min(offset + maxSearchLength, message.length);\n }\n\n for (var i = offset; i < searchLength; i++) {\n // If the first value of the message matches\n // the first value of the token, check if\n // this is the full token.\n if (message[i] === token[0]) {\n if (containsToken(message, token, i)) {\n return i;\n }\n }\n }\n\n return -1;\n}\n/**\n * @typedef {Object} MultipartEncodedData\n * @property {ArrayBuffer} data The encoded Multipart Data\n * @property {String} boundary The boundary used to divide pieces of the encoded data\n */\n\n/**\n * Encode one or more DICOM datasets into a single body so it can be\n * sent using the Multipart Content-Type.\n *\n * @param {ArrayBuffer[]} datasets Array containing each file to be encoded in the multipart body, passed as ArrayBuffers.\n * @param {String} [boundary] Optional string to define a boundary between each part of the multipart body. If this is not specified, a random GUID will be generated.\n * @return {MultipartEncodedData} The Multipart encoded data returned as an Object. This contains both the data itself, and the boundary string used to divide it.\n */\n\n\nfunction multipartEncode(datasets) {\n var boundary = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : guid();\n var contentType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \"application/dicom\";\n var contentTypeString = \"Content-Type: \".concat(contentType);\n var header = \"\\r\\n--\".concat(boundary, \"\\r\\n\").concat(contentTypeString, \"\\r\\n\\r\\n\");\n var footer = \"\\r\\n--\".concat(boundary, \"--\");\n var headerArray = stringToUint8Array(header);\n var footerArray = stringToUint8Array(footer);\n var headerLength = headerArray.length;\n var footerLength = footerArray.length;\n var length = 0; // Calculate the total length for the final array\n\n var contentArrays = datasets.map(function (datasetBuffer) {\n var contentArray = new Uint8Array(datasetBuffer);\n var contentLength = contentArray.length;\n length += headerLength + contentLength + footerLength;\n return contentArray;\n }); // Allocate the array\n\n var multipartArray = new Uint8Array(length); // Set the initial header\n\n multipartArray.set(headerArray, 0); // Write each dataset into the multipart array\n\n var position = 0;\n contentArrays.forEach(function (contentArray) {\n var contentLength = contentArray.length;\n multipartArray.set(headerArray, position);\n multipartArray.set(contentArray, position + headerLength);\n position += headerLength + contentArray.length;\n });\n multipartArray.set(footerArray, position);\n return {\n data: multipartArray.buffer,\n boundary: boundary\n };\n}\n/**\n * Decode a Multipart encoded ArrayBuffer and return the components as an Array.\n *\n * @param {ArrayBuffer} response Data encoded as a 'multipart/related' message\n * @returns {Array} The content\n */\n\n\nfunction multipartDecode(response) {\n var message = new Uint8Array(response);\n /* Set a maximum length to search for the header boundaries, otherwise\n findToken can run for a long time\n */\n\n var maxSearchLength = 1000; // First look for the multipart mime header\n\n var separator = stringToUint8Array(\"\\r\\n\\r\\n\");\n var headerIndex = findToken(message, separator, 0, maxSearchLength);\n\n if (headerIndex === -1) {\n throw new Error(\"Response message has no multipart mime header\");\n }\n\n var header = uint8ArrayToString(message, 0, headerIndex);\n var boundaryString = identifyBoundary(header);\n\n if (!boundaryString) {\n throw new Error(\"Header of response message does not specify boundary\");\n }\n\n var boundary = stringToUint8Array(boundaryString);\n var components = [];\n var offset = headerIndex + separator.length; // Loop until we cannot find any more boundaries\n\n var boundaryIndex;\n\n while (boundaryIndex !== -1) {\n // Search for the next boundary in the message, starting\n // from the current offset position\n boundaryIndex = findToken(message, boundary, offset); // If no further boundaries are found, stop here.\n\n if (boundaryIndex === -1) {\n break;\n } // Extract data from response message, excluding \"\\r\\n\"\n\n\n var spacingLength = 2;\n var length = boundaryIndex - offset - spacingLength;\n var data = response.slice(offset, offset + length); // Add the data to the array of results\n\n components.push(data); // find the end of the boundary\n\n var boundaryEnd = findToken(message, separator, boundaryIndex + 1, maxSearchLength);\n if (boundaryEnd === -1) break; // Move the offset to the end of the identified boundary\n\n offset = boundaryEnd + separator.length;\n }\n\n return components;\n}\n/**\n * Create a random GUID\n *\n * @return {string}\n */\n\n\nfunction guid() {\n function s4() {\n return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);\n }\n\n return s4() + s4() + \"-\" + s4() + \"-\" + s4() + \"-\" + s4() + \"-\" + s4() + s4() + s4();\n}\n\nvar message = {\n containsToken: containsToken,\n findToken: findToken,\n identifyBoundary: identifyBoundary,\n uint8ArrayToString: uint8ArrayToString,\n stringToUint8Array: stringToUint8Array,\n multipartEncode: multipartEncode,\n multipartDecode: multipartDecode,\n guid: guid\n};\n\nvar utilities = {\n TID1500: TID1500,\n TID300: TID300,\n message: message,\n addAccessors: addAccessors\n};\n\nvar Code = /*#__PURE__*/function () {\n function Code(options) {\n _classCallCheck(this, Code);\n\n this[_value] = options.value;\n this[_meaning] = options.meaning;\n this[_schemeDesignator] = options.schemeDesignator;\n this[_schemeVersion] = options.schemeVersion || null;\n }\n\n _createClass(Code, [{\n key: \"value\",\n get: function get() {\n return this[_value];\n }\n }, {\n key: \"meaning\",\n get: function get() {\n return this[_meaning];\n }\n }, {\n key: \"schemeDesignator\",\n get: function get() {\n return this[_schemeDesignator];\n }\n }, {\n key: \"schemeVersion\",\n get: function get() {\n return this[_schemeVersion];\n }\n }]);\n\n return Code;\n}();\n\nvar CodedConcept = /*#__PURE__*/function () {\n function CodedConcept(options) {\n _classCallCheck(this, CodedConcept);\n\n if (options.value === undefined) {\n throw new Error(\"Option 'value' is required for CodedConcept.\");\n }\n\n if (options.meaning === undefined) {\n throw new Error(\"Option 'meaning' is required for CodedConcept.\");\n }\n\n if (options.schemeDesignator === undefined) {\n throw new Error(\"Option 'schemeDesignator' is required for CodedConcept.\");\n }\n\n this.CodeValue = options.value;\n this.CodeMeaning = options.meaning;\n this.CodingSchemeDesignator = options.schemeDesignator;\n\n if (\"schemeVersion\" in options) {\n this.CodingSchemeVersion = options.schemeVersion;\n }\n }\n\n _createClass(CodedConcept, [{\n key: \"equals\",\n value: function equals(other) {\n if (other.value === this.value && other.schemeDesignator === this.schemeDesignator) {\n if (other.schemeVersion && this.schemeVersion) {\n return other.schemeVersion === this.schemeVersion;\n }\n\n return true;\n }\n\n return false;\n }\n }, {\n key: \"value\",\n get: function get() {\n return this.CodeValue;\n }\n }, {\n key: \"meaning\",\n get: function get() {\n return this.CodeMeaning;\n }\n }, {\n key: \"schemeDesignator\",\n get: function get() {\n return this.CodingSchemeDesignator;\n }\n }, {\n key: \"schemeVersion\",\n get: function get() {\n return this.CodingSchemeVersion;\n }\n }]);\n\n return CodedConcept;\n}();\n\nvar coding = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tCode: Code,\n\tCodedConcept: CodedConcept\n});\n\nvar ValueTypes = {\n CODE: \"CODE\",\n COMPOSITE: \"COMPOSITE\",\n CONTAINER: \"CONTAINER\",\n DATE: \"DATE\",\n DATETIME: \"DATETIME\",\n IMAGE: \"IMAGE\",\n NUM: \"NUM\",\n PNAME: \"PNAME\",\n SCOORD: \"SCOORD\",\n SCOORD3D: \"SCOORD3D\",\n TCOORD: \"TCOORD\",\n TEXT: \"TEXT\",\n TIME: \"TIME\",\n UIDREF: \"UIDREF\",\n WAVEFORM: \"WAVEFORM\"\n};\nObject.freeze(ValueTypes);\nvar GraphicTypes = {\n CIRCLE: \"CIRCLE\",\n ELLIPSE: \"ELLIPSE\",\n ELLIPSOID: \"ELLIPSOID\",\n MULTIPOINT: \"MULTIPOINT\",\n POINT: \"POINT\",\n POLYLINE: \"POLYLINE\"\n};\nObject.freeze(GraphicTypes);\nvar GraphicTypes3D = {\n ELLIPSE: \"ELLIPSE\",\n ELLIPSOID: \"ELLIPSOID\",\n MULTIPOINT: \"MULTIPOINT\",\n POINT: \"POINT\",\n POLYLINE: \"POLYLINE\",\n POLYGON: \"POLYGON\"\n};\nObject.freeze(GraphicTypes3D);\nvar TemporalRangeTypes = {\n BEGIN: \"BEGIN\",\n END: \"END\",\n MULTIPOINT: \"MULTIPOINT\",\n MULTISEGMENT: \"MULTISEGMENT\",\n POINT: \"POINT\",\n SEGMENT: \"SEGMENT\"\n};\nObject.freeze(TemporalRangeTypes);\nvar RelationshipTypes = {\n CONTAINS: \"CONTAINS\",\n HAS_ACQ_CONTENT: \"HAS ACQ CONTENT\",\n HAS_CONCEPT_MOD: \"HAS CONCEPT MOD\",\n HAS_OBS_CONTEXT: \"HAS OBS CONTEXT\",\n HAS_PROPERTIES: \"HAS PROPERTIES\",\n INFERRED_FROM: \"INFERRED FROM\",\n SELECTED_FROM: \"SELECTED FROM\"\n};\nObject.freeze(RelationshipTypes);\nvar PixelOriginInterpretations = {\n FRAME: \"FRAME\",\n VOLUME: \"VOLUME\"\n};\nObject.freeze(RelationshipTypes);\n\nfunction isFloat(n) {\n return n === +n && n !== (n | 0);\n}\n\nfunction zeroPad(value) {\n return (value > 9 ? \"\" : \"0\") + value;\n}\n\nfunction TM(date) {\n // %H%M%S.%f\n var hours = date.getHours();\n var minutes = date.getMinutes();\n var seconds = date.getSeconds();\n var milliseconds = date.getMilliseconds();\n return zeroPad(hours) + zeroPad(minutes) + zeroPad(seconds) + milliseconds;\n}\n\nfunction DA(date) {\n var year = date.getFullYear();\n var month = date.getMonth() + 1;\n var day = date.getDate();\n return year + zeroPad(month) + zeroPad(day);\n}\n\nfunction DT(date) {\n return DA(date) + TM(date);\n}\n\nvar ContentSequence$1 = /*#__PURE__*/function (_Array) {\n _inherits(ContentSequence, _Array);\n\n var _super = _createSuper(ContentSequence);\n\n function ContentSequence() {\n _classCallCheck(this, ContentSequence);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _super.call.apply(_super, [this].concat(args));\n } // filterBy(options) {\n // }\n\n\n return _createClass(ContentSequence);\n}( /*#__PURE__*/_wrapNativeSuper(Array));\n\nvar ContentItem = /*#__PURE__*/_createClass(function ContentItem(options) {\n _classCallCheck(this, ContentItem);\n\n if (options.name === undefined) {\n throw new Error(\"Option 'name' is required for ContentItem.\");\n }\n\n if (options.name.constructor !== CodedConcept) {\n throw new Error(\"Option 'name' must have type CodedConcept.\");\n }\n\n this.ConceptNameCodeSequence = [options.name];\n\n if (options.valueType === undefined) {\n throw new Error(\"Option 'valueType' is required for ContentItem.\");\n }\n\n if (!(Object.values(ValueTypes).indexOf(options.valueType) !== -1)) {\n throw new Error(\"Invalid value type \".concat(options.valueType));\n }\n\n this.ValueType = options.valueType;\n\n if (options.relationshipType !== undefined) {\n if (!(Object.values(RelationshipTypes).indexOf(options.relationshipType) !== -1)) {\n throw new Error(\"Invalid relationship type \".concat(options.relationshipTypes));\n }\n\n this.RelationshipType = options.relationshipType;\n } // TODO: relationship type is required\n\n} // getContentItems(options) {\n// // TODO: filter by name, value type and relationship type\n// return this.ContentSequence;\n// }\n);\n\nvar CodeContentItem = /*#__PURE__*/function (_ContentItem) {\n _inherits(CodeContentItem, _ContentItem);\n\n var _super2 = _createSuper(CodeContentItem);\n\n function CodeContentItem(options) {\n var _this;\n\n _classCallCheck(this, CodeContentItem);\n\n _this = _super2.call(this, {\n name: options.name,\n relationshipType: options.relationshipType,\n valueType: ValueTypes.CODE\n });\n\n if (options.value === undefined) {\n throw new Error(\"Option 'value' is required for CodeContentItem.\");\n }\n\n if (!(options.value || options.value.constructor === CodedConcept)) {\n throw new Error(\"Option 'value' must have type CodedConcept.\");\n }\n\n _this.ConceptCodeSequence = [options.value];\n return _this;\n }\n\n return _createClass(CodeContentItem);\n}(ContentItem);\n\nvar TextContentItem = /*#__PURE__*/function (_ContentItem2) {\n _inherits(TextContentItem, _ContentItem2);\n\n var _super3 = _createSuper(TextContentItem);\n\n function TextContentItem(options) {\n var _this2;\n\n _classCallCheck(this, TextContentItem);\n\n _this2 = _super3.call(this, {\n name: options.name,\n relationshipType: options.relationshipType,\n valueType: ValueTypes.TEXT\n });\n\n if (options.value === undefined) {\n throw new Error(\"Option 'value' is required for TextContentItem.\");\n }\n\n if (!(typeof options.value === \"string\" || options.value instanceof String)) {\n throw new Error(\"Option 'value' must have type String.\");\n }\n\n _this2.TextValue = options.value;\n return _this2;\n }\n\n return _createClass(TextContentItem);\n}(ContentItem);\n\nvar PNameContentItem = /*#__PURE__*/function (_ContentItem3) {\n _inherits(PNameContentItem, _ContentItem3);\n\n var _super4 = _createSuper(PNameContentItem);\n\n function PNameContentItem(options) {\n var _this3;\n\n _classCallCheck(this, PNameContentItem);\n\n _this3 = _super4.call(this, {\n name: options.name,\n relationshipType: options.relationshipType,\n valueType: ValueTypes.PNAME\n });\n\n if (options.value === undefined) {\n throw new Error(\"Option 'value' is required for PNameContentItem.\");\n }\n\n if (!(typeof options.value === \"string\" || options.value instanceof String)) {\n throw new Error(\"Option 'value' must have type String.\");\n }\n\n _this3.PersonName = options.value;\n return _this3;\n }\n\n return _createClass(PNameContentItem);\n}(ContentItem);\n\nvar TimeContentItem = /*#__PURE__*/function (_ContentItem4) {\n _inherits(TimeContentItem, _ContentItem4);\n\n var _super5 = _createSuper(TimeContentItem);\n\n function TimeContentItem(options) {\n var _this4;\n\n _classCallCheck(this, TimeContentItem);\n\n _this4 = _super5.call(this, {\n name: options.name,\n relationshipType: options.relationshipType,\n valueType: ValueTypes.TIME\n });\n\n if (options.value === undefined) {\n throw new Error(\"Option 'value' is required for TimeContentItem.\");\n }\n\n if (!(_typeof(options.value) === \"object\" || options.value instanceof Date)) {\n throw new Error(\"Option 'value' must have type Date.\");\n }\n\n _this4.Time = TM(options.value);\n return _this4;\n }\n\n return _createClass(TimeContentItem);\n}(ContentItem);\n\nvar DateContentItem = /*#__PURE__*/function (_ContentItem5) {\n _inherits(DateContentItem, _ContentItem5);\n\n var _super6 = _createSuper(DateContentItem);\n\n function DateContentItem(options) {\n var _this5;\n\n _classCallCheck(this, DateContentItem);\n\n _this5 = _super6.call(this, {\n name: options.name,\n relationshipType: options.relationshipType,\n valueType: ValueTypes.DATE\n });\n\n if (options.value === undefined) {\n throw new Error(\"Option 'value' is required for DateContentItem.\");\n }\n\n if (!(_typeof(options.value) === \"object\" || options.value instanceof Date)) {\n throw new Error(\"Option 'value' must have type Date.\");\n }\n\n _this5.Date = DA(options.value);\n return _this5;\n }\n\n return _createClass(DateContentItem);\n}(ContentItem);\n\nvar DateTimeContentItem = /*#__PURE__*/function (_ContentItem6) {\n _inherits(DateTimeContentItem, _ContentItem6);\n\n var _super7 = _createSuper(DateTimeContentItem);\n\n function DateTimeContentItem(options) {\n var _this6;\n\n _classCallCheck(this, DateTimeContentItem);\n\n _this6 = _super7.call(this, {\n name: options.name,\n relationshipType: options.relationshipType,\n valueType: ValueTypes.DATETIME\n });\n\n if (options.value === undefined) {\n throw new Error(\"Option 'value' is required for DateTimeContentItem.\");\n }\n\n if (!(_typeof(options.value) === \"object\" || options.value instanceof Date)) {\n throw new Error(\"Option 'value' must have type Date.\");\n }\n\n _this6.DateTime = DT(otions.value);\n return _this6;\n }\n\n return _createClass(DateTimeContentItem);\n}(ContentItem);\n\nvar UIDRefContentItem = /*#__PURE__*/function (_ContentItem7) {\n _inherits(UIDRefContentItem, _ContentItem7);\n\n var _super8 = _createSuper(UIDRefContentItem);\n\n function UIDRefContentItem(options) {\n var _this7;\n\n _classCallCheck(this, UIDRefContentItem);\n\n _this7 = _super8.call(this, {\n name: options.name,\n relationshipType: options.relationshipType,\n valueType: ValueTypes.UIDREF\n });\n\n if (options.value === undefined) {\n throw new Error(\"Option 'value' is required for UIDRefContentItem.\");\n }\n\n if (!(typeof options.value === \"string\" || options.value instanceof String)) {\n throw new Error(\"Option 'value' must have type String.\");\n }\n\n _this7.UID = options.value;\n return _this7;\n }\n\n return _createClass(UIDRefContentItem);\n}(ContentItem);\n\nvar NumContentItem = /*#__PURE__*/function (_ContentItem8) {\n _inherits(NumContentItem, _ContentItem8);\n\n var _super9 = _createSuper(NumContentItem);\n\n function NumContentItem(options) {\n var _this8;\n\n _classCallCheck(this, NumContentItem);\n\n _this8 = _super9.call(this, {\n name: options.name,\n relationshipType: options.relationshipType,\n valueType: ValueTypes.NUM\n });\n\n if (options.value !== undefined) {\n if (!(typeof options.value === \"number\" || options.value instanceof Number)) {\n throw new Error(\"Option 'value' must have type Number.\");\n }\n\n if (options.unit === undefined) {\n throw new Error(\"Option 'unit' is required for NumContentItem with 'value'.\");\n }\n\n if (options.unit.constructor !== CodedConcept) {\n throw new Error(\"Option 'unit' must have type CodedConcept.\");\n }\n\n var item = {};\n item.NumericValue = options.value;\n\n if (isFloat(options.value)) {\n item.FloatingPointValue = options.value;\n }\n\n item.MeasurementUnitsCodeSequence = [options.unit];\n _this8.MeasuredValueSequence = [item];\n } else if (options.qualifier !== undefined) {\n if (!(options.qualifier || options.qualifier.constructor === CodedConcept)) {\n throw new Error(\"Option 'qualifier' must have type CodedConcept.\");\n }\n\n _this8.NumericValueQualifierCodeSequence = [options.qualifier];\n } else {\n throw new Error(\"Either option 'value' or 'qualifier' is required for NumContentItem.\");\n }\n\n return _this8;\n }\n\n return _createClass(NumContentItem);\n}(ContentItem);\n\nvar ContainerContentItem = /*#__PURE__*/function (_ContentItem9) {\n _inherits(ContainerContentItem, _ContentItem9);\n\n var _super10 = _createSuper(ContainerContentItem);\n\n function ContainerContentItem(options) {\n var _this9;\n\n _classCallCheck(this, ContainerContentItem);\n\n _this9 = _super10.call(this, {\n name: options.name,\n relationshipType: options.relationshipType,\n valueType: ValueTypes.CONTAINER\n });\n\n if (options.isContentContinuous !== undefined) {\n _this9.ContinuityOfContent = \"CONTINUOUS\";\n } else {\n _this9.ContinuityOfContent = \"SEPARATE\";\n }\n\n if (options.templateID !== undefined) {\n if (!(typeof options.templateID === \"string\" || options.templateID instanceof String)) {\n throw new Error(\"Option 'templateID' must have type String.\");\n }\n\n var item = {};\n item.MappingResource = \"DCMR\";\n item.TemplateIdentifier = options.templateID;\n _this9.ContentTemplateSequence = [item];\n }\n\n return _this9;\n }\n\n return _createClass(ContainerContentItem);\n}(ContentItem);\n\nvar CompositeContentItem = /*#__PURE__*/function (_ContentItem10) {\n _inherits(CompositeContentItem, _ContentItem10);\n\n var _super11 = _createSuper(CompositeContentItem);\n\n function CompositeContentItem(options) {\n var _this10;\n\n _classCallCheck(this, CompositeContentItem);\n\n _this10 = _super11.call(this, {\n name: options.name,\n relationshipType: options.relationshipType,\n valueType: ValueTypes.COMPOSITE\n });\n\n if (options.referencedSOPClassUID === undefined) {\n throw new Error(\"Option 'referencedSOPClassUID' is required for CompositeContentItem.\");\n }\n\n if (options.referencedSOPInstanceUID === undefined) {\n throw new Error(\"Option 'referencedSOPInstanceUID' is required for CompositeContentItem.\");\n }\n\n if (!(typeof options.referencedSOPClassUID === \"string\" || options.referencedSOPClassUID instanceof String)) {\n throw new Error(\"Option 'referencedSOPClassUID' must have type String.\");\n }\n\n if (!(typeof options.referencedSOPInstanceUID === \"string\" || options.referencedSOPInstanceUID instanceof String)) {\n throw new Error(\"Option 'referencedSOPInstanceUID' must have type String.\");\n }\n\n var item = {};\n item.ReferencedSOPClassUID = options.referencedSOPClassUID;\n item.ReferencedSOPInstanceUID = options.referencedSOPInstanceUID;\n _this10.ReferenceSOPSequence = [item];\n return _this10;\n }\n\n return _createClass(CompositeContentItem);\n}(ContentItem);\n\nvar ImageContentItem = /*#__PURE__*/function (_ContentItem11) {\n _inherits(ImageContentItem, _ContentItem11);\n\n var _super12 = _createSuper(ImageContentItem);\n\n function ImageContentItem(options) {\n var _this11;\n\n _classCallCheck(this, ImageContentItem);\n\n _this11 = _super12.call(this, {\n name: options.name,\n relationshipType: options.relationshipType,\n valueType: ValueTypes.IMAGE\n });\n\n if (options.referencedSOPClassUID === undefined) {\n throw new Error(\"Option 'referencedSOPClassUID' is required for ImageContentItem.\");\n }\n\n if (options.referencedSOPInstanceUID === undefined) {\n throw new Error(\"Option 'referencedSOPInstanceUID' is required for ImageContentItem.\");\n }\n\n if (!(typeof options.referencedSOPClassUID === \"string\" || options.referencedSOPClassUID instanceof String)) {\n throw new Error(\"Option 'referencedSOPClassUID' must have type String.\");\n }\n\n if (!(typeof options.referencedSOPInstanceUID === \"string\" || options.referencedSOPInstanceUID instanceof String)) {\n throw new Error(\"Option 'referencedSOPInstanceUID' must have type String.\");\n }\n\n var item = {};\n item.ReferencedSOPClassUID = options.referencedSOPClassUID;\n item.ReferencedSOPInstanceUID = options.referencedSOPInstanceUID;\n\n if (options.referencedFrameNumbers !== undefined) {\n if (!(_typeof(options.referencedFrameNumbers) === \"object\" || options.referencedFrameNumbers instanceof Array)) {\n throw new Error(\"Option 'referencedFrameNumbers' must have type Array.\");\n } // FIXME: value multiplicity\n\n\n item.ReferencedFrameNumber = options.referencedFrameNumbers;\n }\n\n if (options.referencedFrameSegmentNumber !== undefined) {\n if (!(_typeof(options.referencedSegmentNumbers) === \"object\" || options.referencedSegmentNumbers instanceof Array)) {\n throw new Error(\"Option 'referencedSegmentNumbers' must have type Array.\");\n } // FIXME: value multiplicity\n\n\n item.ReferencedSegmentNumber = options.referencedSegmentNumbers;\n }\n\n _this11.ReferencedSOPSequence = [item];\n return _this11;\n }\n\n return _createClass(ImageContentItem);\n}(ContentItem);\n\nvar ScoordContentItem = /*#__PURE__*/function (_ContentItem12) {\n _inherits(ScoordContentItem, _ContentItem12);\n\n var _super13 = _createSuper(ScoordContentItem);\n\n function ScoordContentItem(options) {\n var _this12;\n\n _classCallCheck(this, ScoordContentItem);\n\n _this12 = _super13.call(this, {\n name: options.name,\n relationshipType: options.relationshipType,\n valueType: ValueTypes.SCOORD\n });\n\n if (options.graphicType === undefined) {\n throw new Error(\"Option 'graphicType' is required for ScoordContentItem.\");\n }\n\n if (!(typeof options.graphicType === \"string\" || options.graphicType instanceof String)) {\n throw new Error(\"Option 'graphicType' of ScoordContentItem must have type String.\");\n }\n\n if (options.graphicData === undefined) {\n throw new Error(\"Option 'graphicData' is required for ScoordContentItem.\");\n }\n\n if (!(_typeof(options.graphicData) === \"object\" || options.graphicData instanceof Array)) {\n throw new Error(\"Option 'graphicData' of ScoordContentItem must have type Array.\");\n }\n\n if (Object.values(GraphicTypes).indexOf(options.graphicType) === -1) {\n throw new Error(\"Invalid graphic type '\".concat(options.graphicType, \"'.\"));\n }\n\n if (options.graphicData[0] instanceof Array) {\n options.graphicData = [].concat.apply([], options.graphicData);\n }\n\n _this12.GraphicData = options.graphicData;\n options.pixelOriginInterpretation = options.pixelOriginInterpretation || PixelOriginInterpretations.VOLUME;\n\n if (!(typeof options.pixelOriginInterpretation === \"string\" || options.pixelOriginInterpretation instanceof String)) {\n throw new Error(\"Option 'pixelOriginInterpretation' must have type String.\");\n }\n\n if (Object.values(PixelOriginInterpretations).indexOf(options.pixelOriginInterpretation) === -1) {\n throw new Error(\"Invalid pixel origin interpretation '\".concat(options.pixelOriginInterpretation, \"'.\"));\n }\n\n if (options.fiducialUID !== undefined) {\n if (!(typeof options.fiducialUID === \"string\" || options.fiducialUID instanceof String)) {\n throw new Error(\"Option 'fiducialUID' must have type String.\");\n }\n\n _this12.FiducialUID = options.fiducialUID;\n }\n\n return _this12;\n }\n\n return _createClass(ScoordContentItem);\n}(ContentItem);\n\nvar Scoord3DContentItem = /*#__PURE__*/function (_ContentItem13) {\n _inherits(Scoord3DContentItem, _ContentItem13);\n\n var _super14 = _createSuper(Scoord3DContentItem);\n\n function Scoord3DContentItem(options) {\n var _this13;\n\n _classCallCheck(this, Scoord3DContentItem);\n\n _this13 = _super14.call(this, {\n name: options.name,\n relationshipType: options.relationshipType,\n valueType: ValueTypes.SCOORD3D\n });\n\n if (options.graphicType === undefined) {\n throw new Error(\"Option 'graphicType' is required for Scoord3DContentItem.\");\n }\n\n if (!(typeof options.graphicType === \"string\" || options.graphicType instanceof String)) {\n throw new Error(\"Option 'graphicType' must have type String.\");\n }\n\n if (options.graphicData === undefined) {\n throw new Error(\"Option 'graphicData' is required for Scoord3DContentItem.\");\n }\n\n if (!(_typeof(options.graphicData) === \"object\" || options.graphicData instanceof Array)) {\n throw new Error(\"Option 'graphicData' must have type Array.\");\n }\n\n if (Object.values(GraphicTypes3D).indexOf(options.graphicType) === -1) {\n throw new Error(\"Invalid graphic type '\".concat(options.graphicType, \"'.\"));\n }\n\n if (options.graphicData[0] instanceof Array) {\n options.graphicData = [].concat.apply([], options.graphicData);\n }\n\n _this13.GraphicType = options.graphicType;\n _this13.GraphicData = options.graphicData;\n\n if (options.frameOfReferenceUID === undefined) {\n throw new Error(\"Option 'frameOfReferenceUID' is required for Scoord3DContentItem.\");\n }\n\n if (!(typeof options.frameOfReferenceUID === \"string\" || options.frameOfReferenceUID instanceof String)) {\n throw new Error(\"Option 'frameOfReferenceUID' must have type String.\");\n }\n\n _this13.ReferencedFrameOfReferenceUID = options.frameOfReferenceUID;\n\n if (\"fiducialUID\" in options) {\n if (!(typeof options.fiducialUID === \"string\" || options.fiducialUID instanceof String)) {\n throw new Error(\"Option 'fiducialUID' must have type String.\");\n }\n\n _this13.FiducialUID = fiducialUID;\n }\n\n return _this13;\n }\n\n return _createClass(Scoord3DContentItem);\n}(ContentItem);\n\nvar TcoordContentItem = /*#__PURE__*/function (_ContentItem14) {\n _inherits(TcoordContentItem, _ContentItem14);\n\n var _super15 = _createSuper(TcoordContentItem);\n\n function TcoordContentItem(options) {\n var _this14;\n\n _classCallCheck(this, TcoordContentItem);\n\n _this14 = _super15.call(this, {\n name: options.name,\n relationshipType: options.relationshipType,\n valueType: ValueTypes.TCOORD\n });\n\n if (options.temporalRangeType === undefined) {\n throw new Error(\"Option 'temporalRangeType' is required for TcoordContentItem.\");\n }\n\n if (Object.values(TemporalRangeTypes).indexOf(options.temporalRangeType) === -1) {\n throw new Error(\"Invalid temporal range type '\".concat(options.temporalRangeType, \"'.\"));\n }\n\n if (options.referencedSamplePositions === undefined) {\n if (!(_typeof(options.referencedSamplePositions) === \"object\" || options.referencedSamplePositions instanceof Array)) {\n throw new Error(\"Option 'referencedSamplePositions' must have type Array.\");\n } // TODO: ensure values are integers\n\n\n _this14.ReferencedSamplePositions = options.referencedSamplePositions;\n } else if (options.referencedTimeOffsets === undefined) {\n if (!(_typeof(options.referencedTimeOffsets) === \"object\" || options.referencedTimeOffsets instanceof Array)) {\n throw new Error(\"Option 'referencedTimeOffsets' must have type Array.\");\n } // TODO: ensure values are floats\n\n\n _this14.ReferencedTimeOffsets = options.referencedTimeOffsets;\n } else if (options.referencedDateTime === undefined) {\n if (!(_typeof(options.referencedDateTime) === \"object\" || options.referencedDateTime instanceof Array)) {\n throw new Error(\"Option 'referencedDateTime' must have type Array.\");\n }\n\n _this14.ReferencedDateTime = options.referencedDateTime;\n } else {\n throw new Error(\"One of the following options is required for TcoordContentItem: \" + \"'referencedSamplePositions', 'referencedTimeOffsets', or \" + \"'referencedDateTime'.\");\n }\n\n return _this14;\n }\n\n return _createClass(TcoordContentItem);\n}(ContentItem);\n\nvar valueTypes = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tCodeContentItem: CodeContentItem,\n\tContainerContentItem: ContainerContentItem,\n\tContentSequence: ContentSequence$1,\n\tCompositeContentItem: CompositeContentItem,\n\tDateContentItem: DateContentItem,\n\tDateTimeContentItem: DateTimeContentItem,\n\tGraphicTypes: GraphicTypes,\n\tGraphicTypes3D: GraphicTypes3D,\n\tImageContentItem: ImageContentItem,\n\tNumContentItem: NumContentItem,\n\tPNameContentItem: PNameContentItem,\n\tPixelOriginInterpretations: PixelOriginInterpretations,\n\tRelationshipTypes: RelationshipTypes,\n\tScoordContentItem: ScoordContentItem,\n\tScoord3DContentItem: Scoord3DContentItem,\n\tTcoordContentItem: TcoordContentItem,\n\tTemporalRangeTypes: TemporalRangeTypes,\n\tTextContentItem: TextContentItem,\n\tTimeContentItem: TimeContentItem,\n\tUIDRefContentItem: UIDRefContentItem,\n\tValueTypes: ValueTypes\n});\n\nvar LongitudinalTemporalOffsetFromEvent = /*#__PURE__*/function (_NumContentItem) {\n _inherits(LongitudinalTemporalOffsetFromEvent, _NumContentItem);\n\n var _super = _createSuper(LongitudinalTemporalOffsetFromEvent);\n\n function LongitudinalTemporalOffsetFromEvent(options) {\n var _this;\n\n _classCallCheck(this, LongitudinalTemporalOffsetFromEvent);\n\n _this = _super.call(this, {\n name: new CodedConcept({\n value: \"128740\",\n meaning: \"Longitudinal Temporal Offset from Event\",\n schemeDesignator: \"DCM\"\n }),\n value: options.value,\n unit: options.unit,\n relationshipType: RelationshipTypes.HAS_OBS_CONTEXT\n });\n _this.ContentSequence = new ContentSequence$1();\n var item = new CodeContentItem({\n name: new CodedConcept({\n value: \"128741\",\n meaning: \"Longitudinal Temporal Event Type\",\n schemeDesignator: \"DCM\"\n }),\n value: options.eventType,\n relationshipType: RelationshipTypes.HAS_CONCEPT_MOD\n });\n\n _this.ContentSequence.push(item);\n\n return _this;\n }\n\n return _createClass(LongitudinalTemporalOffsetFromEvent);\n}(NumContentItem);\n\nvar SourceImageForRegion = /*#__PURE__*/function (_ImageContentItem) {\n _inherits(SourceImageForRegion, _ImageContentItem);\n\n var _super2 = _createSuper(SourceImageForRegion);\n\n function SourceImageForRegion(options) {\n _classCallCheck(this, SourceImageForRegion);\n\n return _super2.call(this, {\n name: new CodedConcept({\n value: \"121324\",\n meaning: \"Source Image\",\n schemeDesignator: \"DCM\"\n }),\n referencedSOPClassUID: options.referencedSOPClassUID,\n referencedSOPInstanceUID: options.referencedSOPInstanceUID,\n referencedFrameNumbers: options.referencedFrameNumbers,\n relationshipType: RelationshipTypes.SELECTED_FROM\n });\n }\n\n return _createClass(SourceImageForRegion);\n}(ImageContentItem);\n\nvar SourceImageForSegmentation = /*#__PURE__*/function (_ImageContentItem2) {\n _inherits(SourceImageForSegmentation, _ImageContentItem2);\n\n var _super3 = _createSuper(SourceImageForSegmentation);\n\n function SourceImageForSegmentation(options) {\n _classCallCheck(this, SourceImageForSegmentation);\n\n return _super3.call(this, {\n name: new CodedConcept({\n value: \"121233\",\n meaning: \"Source Image for Segmentation\",\n schemeDesignator: \"DCM\"\n }),\n referencedSOPClassUID: options.referencedSOPClassUID,\n referencedSOPInstanceUID: options.referencedSOPInstanceUID,\n referencedFrameNumbers: options.referencedFrameNumbers,\n relationshipType: RelationshipTypes.SELECTED_FROM\n });\n }\n\n return _createClass(SourceImageForSegmentation);\n}(ImageContentItem);\n\nvar SourceSeriesForSegmentation = /*#__PURE__*/function (_UIDRefContentItem) {\n _inherits(SourceSeriesForSegmentation, _UIDRefContentItem);\n\n var _super4 = _createSuper(SourceSeriesForSegmentation);\n\n function SourceSeriesForSegmentation(options) {\n _classCallCheck(this, SourceSeriesForSegmentation);\n\n return _super4.call(this, {\n name: new CodedConcept({\n value: \"121232\",\n meaning: \"Source Series for Segmentation\",\n schemeDesignator: \"DCM\"\n }),\n value: options.referencedSeriesInstanceUID,\n relationshipType: RelationshipTypes.CONTAINS\n });\n }\n\n return _createClass(SourceSeriesForSegmentation);\n}(UIDRefContentItem);\n\nvar ImageRegion = /*#__PURE__*/function (_ScoordContentItem) {\n _inherits(ImageRegion, _ScoordContentItem);\n\n var _super5 = _createSuper(ImageRegion);\n\n function ImageRegion(options) {\n var _this2;\n\n _classCallCheck(this, ImageRegion);\n\n _this2 = _super5.call(this, {\n name: new CodedConcept({\n value: \"111030\",\n meaning: \"Image Region\",\n schemeDesignator: \"DCM\"\n }),\n graphicType: options.graphicType,\n graphicData: options.graphicData,\n pixelOriginInterpretation: options.pixelOriginInterpretation,\n relationshipType: RelationshipTypes.CONTAINS\n });\n\n if (options.graphicType === GraphicTypes.MULTIPOINT) {\n throw new Error(\"Graphic type 'MULTIPOINT' is not valid for region.\");\n }\n\n if (options.sourceImage === undefined) {\n throw Error(\"Option 'sourceImage' is required for ImageRegion.\");\n }\n\n if (!(options.sourceImage || options.sourceImage.constructor === SourceImageForRegion)) {\n throw new Error(\"Option 'sourceImage' of ImageRegion must have type \" + \"SourceImageForRegion.\");\n }\n\n _this2.ContentSequence = new ContentSequence$1();\n\n _this2.ContentSequence.push(options.sourceImage);\n\n return _this2;\n }\n\n return _createClass(ImageRegion);\n}(ScoordContentItem);\n\nvar ImageRegion3D = /*#__PURE__*/function (_Scoord3DContentItem) {\n _inherits(ImageRegion3D, _Scoord3DContentItem);\n\n var _super6 = _createSuper(ImageRegion3D);\n\n function ImageRegion3D(options) {\n var _this3;\n\n _classCallCheck(this, ImageRegion3D);\n\n _this3 = _super6.call(this, {\n name: new CodedConcept({\n value: \"111030\",\n meaning: \"Image Region\",\n schemeDesignator: \"DCM\"\n }),\n graphicType: options.graphicType,\n graphicData: options.graphicData,\n frameOfReferenceUID: options.frameOfReferenceUID,\n relationshipType: RelationshipTypes.CONTAINS\n });\n\n if (options.graphicType === GraphicTypes3D.MULTIPOINT) {\n throw new Error(\"Graphic type 'MULTIPOINT' is not valid for region.\");\n }\n\n if (options.graphicType === GraphicTypes3D.ELLIPSOID) {\n throw new Error(\"Graphic type 'ELLIPSOID' is not valid for region.\");\n }\n\n return _this3;\n }\n\n return _createClass(ImageRegion3D);\n}(Scoord3DContentItem);\n\nvar VolumeSurface = /*#__PURE__*/function (_Scoord3DContentItem2) {\n _inherits(VolumeSurface, _Scoord3DContentItem2);\n\n var _super7 = _createSuper(VolumeSurface);\n\n function VolumeSurface(options) {\n var _this4;\n\n _classCallCheck(this, VolumeSurface);\n\n _this4 = _super7.call(this, {\n name: new CodedConcept({\n value: \"121231\",\n meaning: \"Volume Surface\",\n schemeDesignator: \"DCM\"\n }),\n graphicType: options.graphicType,\n graphicData: options.graphicData,\n frameOfFeferenceUID: options.frameOfFeferenceUID,\n relationshipType: RelationshipTypes.CONTAINS\n });\n\n if (options.graphicType !== GraphicTypes3D.ELLIPSOID) {\n throw new Error(\"Graphic type for volume surface must be 'ELLIPSOID'.\");\n }\n\n _this4.ContentSequence = new ContentSequence$1();\n\n if (options.sourceImages) {\n options.sourceImages.forEach(function (image) {\n if (!(image || image.constructor === SourceImageForRegion)) {\n throw new Error(\"Items of option 'sourceImages' of VolumeSurface \" + \"must have type SourceImageForRegion.\");\n }\n\n _this4.ContentSequence.push(image);\n });\n } else if (options.sourceSeries) {\n if (!(options.sourceSeries || options.sourceSeries.constructor === SourceSeriesForRegion)) {\n throw new Error(\"Option 'sourceSeries' of VolumeSurface \" + \"must have type SourceSeriesForRegion.\");\n }\n\n _this4.ContentSequence.push(options.sourceSeries);\n } else {\n throw new Error(\"One of the following two options must be provided: \" + \"'sourceImage' or 'sourceSeries'.\");\n }\n\n return _this4;\n }\n\n return _createClass(VolumeSurface);\n}(Scoord3DContentItem);\n\nvar ReferencedRealWorldValueMap = /*#__PURE__*/function (_CompositeContentItem) {\n _inherits(ReferencedRealWorldValueMap, _CompositeContentItem);\n\n var _super8 = _createSuper(ReferencedRealWorldValueMap);\n\n function ReferencedRealWorldValueMap(options) {\n _classCallCheck(this, ReferencedRealWorldValueMap);\n\n return _super8.call(this, {\n name: new CodedConcept({\n value: \"126100\",\n meaning: \"Real World Value Map used for measurement\",\n schemeDesignator: \"DCM\"\n }),\n referencedSOPClassUID: option.referencedSOPClassUID,\n referencedSOPInstanceUID: options.referencedSOPInstanceUID,\n relationshipType: RelationshipTypes.CONTAINS\n });\n }\n\n return _createClass(ReferencedRealWorldValueMap);\n}(CompositeContentItem);\n\nvar FindingSite = /*#__PURE__*/function (_CodeContentItem) {\n _inherits(FindingSite, _CodeContentItem);\n\n var _super9 = _createSuper(FindingSite);\n\n function FindingSite(options) {\n var _this5;\n\n _classCallCheck(this, FindingSite);\n\n _this5 = _super9.call(this, {\n name: new CodedConcept({\n value: \"363698007\",\n meaning: \"Finding Site\",\n schemeDesignator: \"SCT\"\n }),\n value: options.anatomicLocation,\n relationshipType: RelationshipTypes.HAS_CONCEPT_MOD\n });\n _this5.ContentSequence = new ContentSequence$1();\n\n if (options.laterality) {\n var item = new CodeContentItem({\n name: new CodedConcept({\n value: \"272741003\",\n meaning: \"Laterality\",\n schemeDesignator: \"SCT\"\n }),\n value: options.laterality,\n relationshipType: RelationshipTypes.HAS_CONCEPT_MOD\n });\n\n _this5.ContentSequence.push(item);\n }\n\n if (options.topographicalModifier) {\n var _item = new CodeContentItem({\n name: new CodedConcept({\n value: \"106233006\",\n meaning: \"Topographical Modifier\",\n schemeDesignator: \"SCT\"\n }),\n value: options.topographicalModifier,\n relationshipType: RelationshipTypes.HAS_CONCEPT_MOD\n });\n\n _this5.ContentSequence.push(_item);\n }\n\n return _this5;\n }\n\n return _createClass(FindingSite);\n}(CodeContentItem);\n\nvar ReferencedSegmentationFrame = /*#__PURE__*/function (_ContentSequence) {\n _inherits(ReferencedSegmentationFrame, _ContentSequence);\n\n var _super10 = _createSuper(ReferencedSegmentationFrame);\n\n function ReferencedSegmentationFrame(options) {\n var _this6;\n\n _classCallCheck(this, ReferencedSegmentationFrame);\n\n if (options.sopClassUID === undefined) {\n throw new Error(\"Option 'sopClassUID' is required for ReferencedSegmentationFrame.\");\n }\n\n if (options.sopInstanceUID === undefined) {\n throw new Error(\"Option 'sopInstanceUID' is required for ReferencedSegmentationFrame.\");\n }\n\n if (options.frameNumber === undefined) {\n throw new Error(\"Option 'frameNumber' is required for ReferencedSegmentationFrame.\");\n }\n\n if (options.segmentNumber === undefined) {\n throw new Error(\"Option 'segmentNumber' is required for ReferencedSegmentationFrame.\");\n }\n\n if (options.sourceImage === undefined) {\n throw new Error(\"Option 'sourceImage' is required for ReferencedSegmentationFrame.\");\n }\n\n _this6 = _super10.call(this);\n var segmentationItem = ImageContentItem({\n name: new CodedConcept({\n value: \"121214\",\n meaning: \"Referenced Segmentation Frame\",\n schemeDesignator: \"DCM\"\n }),\n referencedSOPClassUid: options.sopClassUid,\n referencedSOPInstanceUid: options.sopInstanceUid,\n referencedFrameNumber: options.frameNumber,\n referencedSegmentNumber: options.segmentNumber\n });\n\n _this6.push(segmentationItem);\n\n if (options.sourceImage.constructor !== SourceImageForSegmentation) {\n throw new Error(\"Option 'sourceImage' must have type SourceImageForSegmentation.\");\n }\n\n _this6.push(sourceImage);\n\n return _this6;\n }\n\n return _createClass(ReferencedSegmentationFrame);\n}(ContentSequence$1);\n\nvar ReferencedSegmentation = /*#__PURE__*/function (_ContentSequence2) {\n _inherits(ReferencedSegmentation, _ContentSequence2);\n\n var _super11 = _createSuper(ReferencedSegmentation);\n\n function ReferencedSegmentation(options) {\n var _this7;\n\n _classCallCheck(this, ReferencedSegmentation);\n\n if (options.sopClassUID === undefined) {\n throw new Error(\"Option 'sopClassUID' is required for ReferencedSegmentation.\");\n }\n\n if (options.sopInstanceUID === undefined) {\n throw new Error(\"Option 'sopInstanceUID' is required for ReferencedSegmentation.\");\n }\n\n if (options.frameNumbers === undefined) {\n throw new Error(\"Option 'frameNumbers' is required for ReferencedSegmentation.\");\n }\n\n if (options.segmentNumber === undefined) {\n throw new Error(\"Option 'segmentNumber' is required for ReferencedSegmentation.\");\n }\n\n _this7 = _super11.call(this);\n var segmentationItem = new ImageContentItem({\n name: new CodedConcept({\n value: \"121191\",\n meaning: \"Referenced Segment\",\n schemeDesignator: \"DCM\"\n }),\n referencedSOPClassUid: options.sopClassUid,\n referencedSOPInstanceUid: options.sopInstanceUid,\n referencedFrameNumber: options.frameNumbers,\n referencedSegmentNumber: options.segmentNumber\n });\n\n _this7.push(segmentationItem);\n\n if (options.sourceImages !== undefined) {\n options.sourceImages.forEach(function (image) {\n if (!image || image.constructor !== SourceImageForSegmentation) {\n throw new Error(\"Items of option 'sourceImages' must have type \" + \"SourceImageForSegmentation.\");\n }\n\n _this7.push(image);\n });\n } else if (options.sourceSeries !== undefined) {\n if (options.sourceSeries.constructor !== SourceSeriesForSegmentation) {\n throw new Error(\"Option 'sourceSeries' must have type SourceSeriesForSegmentation.\");\n }\n\n _this7.push(sourceSeries);\n } else {\n throw new Error(\"One of the following two options must be provided: \" + \"'sourceImages' or 'sourceSeries'.\");\n }\n\n return _this7;\n }\n\n return _createClass(ReferencedSegmentation);\n}(ContentSequence$1);\n\nvar contentItems = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tFindingSite: FindingSite,\n\tLongitudinalTemporalOffsetFromEvent: LongitudinalTemporalOffsetFromEvent,\n\tReferencedRealWorldValueMap: ReferencedRealWorldValueMap,\n\tImageRegion: ImageRegion,\n\tImageRegion3D: ImageRegion3D,\n\tReferencedSegmentation: ReferencedSegmentation,\n\tReferencedSegmentationFrame: ReferencedSegmentationFrame,\n\tVolumeSurface: VolumeSurface,\n\tSourceImageForRegion: SourceImageForRegion,\n\tSourceImageForSegmentation: SourceImageForSegmentation,\n\tSourceSeriesForSegmentation: SourceSeriesForSegmentation\n});\n\nvar Template = /*#__PURE__*/function (_ContentSequence) {\n _inherits(Template, _ContentSequence);\n\n var _super = _createSuper(Template);\n\n function Template() {\n _classCallCheck(this, Template);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _super.call.apply(_super, [this].concat(args));\n }\n\n return _createClass(Template);\n}(ContentSequence$1);\n\nvar Measurement = /*#__PURE__*/function (_Template) {\n _inherits(Measurement, _Template);\n\n var _super2 = _createSuper(Measurement);\n\n function Measurement(options) {\n var _valueItem$ContentSeq;\n\n var _this;\n\n _classCallCheck(this, Measurement);\n\n _this = _super2.call(this);\n var valueItem = new NumContentItem({\n name: options.name,\n value: options.value,\n unit: options.unit,\n qualifier: options.qualifier,\n relationshipType: RelationshipTypes.CONTAINS\n });\n valueItem.ContentSequence = new ContentSequence$1();\n\n if (options.trackingIdentifier === undefined) {\n throw new Error(\"Option 'trackingIdentifier' is required for Measurement.\");\n }\n\n if (options.trackingIdentifier.constructor === TrackingIdentifier) {\n throw new Error(\"Option 'trackingIdentifier' must have type TrackingIdentifier.\");\n }\n\n (_valueItem$ContentSeq = valueItem.ContentSequence).push.apply(_valueItem$ContentSeq, _toConsumableArray(options.trackingIdentifier));\n\n if (options.method !== undefined) {\n var methodItem = new CodeContentItem({\n name: new CodedConcept({\n value: \"370129005\",\n meaning: \"Measurement Method\",\n schemeDesignator: \"SCT\"\n }),\n value: options.method,\n relationshipType: RelationshipTypes.HAS_CONCEPT_MOD\n });\n valueItem.ContentSequence.push(methodItem);\n }\n\n if (options.derivation !== undefined) {\n var derivationItem = new CodeContentItem({\n name: new CodedConcept({\n value: \"121401\",\n meaning: \"Derivation\",\n schemeDesignator: \"DCM\"\n }),\n value: options.derivation,\n relationshipType: RelationshipTypes.HAS_CONCEPT_MOD\n });\n valueItem.ContentSequence.push(derivationItem);\n }\n\n if (options.findingSites !== undefined) {\n if (!(_typeof(options.findingSites) === \"object\" || options.findingSites instanceof Array)) {\n throw new Error(\"Option 'findingSites' must have type Array.\");\n }\n\n options.findingSites.forEach(function (site) {\n if (!site || site.constructor !== FindingSite) {\n throw new Error(\"Items of option 'findingSites' must have type FindingSite.\");\n }\n\n valueItem.ContentSequence.push(site);\n });\n }\n\n if (options.properties !== undefined) {\n var _valueItem$ContentSeq2;\n\n if (options.properties.constructor !== MeasurementProperties) {\n throw new Error(\"Option 'properties' must have type MeasurementProperties.\");\n }\n\n (_valueItem$ContentSeq2 = valueItem.ContentSequence).push.apply(_valueItem$ContentSeq2, _toConsumableArray(options.properties));\n }\n\n if (options.referencedRegions !== undefined) {\n if (!(_typeof(options.referencedRegions) === \"object\" || options.referencedRegions instanceof Array)) {\n throw new Error(\"Option 'referencedRegions' must have type Array.\");\n }\n\n options.referencedRegions.forEach(function (region) {\n if (!region || region.constructor !== ImageRegion && region.constructor !== ImageRegion3D) {\n throw new Error(\"Items of option 'referencedRegion' must have type \" + \"ImageRegion or ImageRegion3D.\");\n }\n\n valueItem.ContentSequence.push(region);\n });\n } else if (options.referencedVolume !== undefined) {\n if (options.referencedVolume.constructor !== VolumeSurface) {\n throw new Error(\"Option 'referencedVolume' must have type VolumeSurface.\");\n }\n\n valueItem.ContentSequence.push(options.referencedVolume);\n } else if (options.referencedSegmentation !== undefined) {\n if (options.referencedSegmentation.constructor !== ReferencedSegmentation && options.referencedSegmentation.constructor !== ReferencedSegmentationFrame) {\n throw new Error(\"Option 'referencedSegmentation' must have type \" + \"ReferencedSegmentation or ReferencedSegmentationFrame.\");\n }\n\n valueItem.ContentSequence.push(options.referencedSegmentation);\n }\n\n if (options.referencedRealWorldValueMap !== undefined) {\n if (options.referencedRealWorldValueMap.constructor !== ReferencedRealWorldValueMap) {\n throw new Error(\"Option 'referencedRealWorldValueMap' must have type \" + \"ReferencedRealWorldValueMap.\");\n }\n\n valueItem.ContentSequence.push(options.referencedRealWorldValueMap);\n }\n\n if (options.algorithmId !== undefined) {\n var _valueItem$ContentSeq3;\n\n if (options.algorithmId.constructor !== AlgorithmIdentification) {\n throw new Error(\"Option 'algorithmId' must have type AlgorithmIdentification.\");\n }\n\n (_valueItem$ContentSeq3 = valueItem.ContentSequence).push.apply(_valueItem$ContentSeq3, _toConsumableArray(options.algorithmId));\n }\n\n _this.push(valueItem);\n\n return _this;\n }\n\n return _createClass(Measurement);\n}(Template);\n\nvar MeasurementProperties = /*#__PURE__*/function (_Template2) {\n _inherits(MeasurementProperties, _Template2);\n\n var _super3 = _createSuper(MeasurementProperties);\n\n function MeasurementProperties(options) {\n var _this2;\n\n _classCallCheck(this, MeasurementProperties);\n\n _this2 = _super3.call(this);\n\n if (options.normality !== undefined) {\n var normalityItem = new CodeContentItem({\n name: new CodedConcept({\n value: \"121402\",\n schemeDesignator: \"DCM\",\n meaning: \"Normality\"\n }),\n value: options.normality,\n relationshipType: RelationshipTypes.HAS_PROPERTIES\n });\n\n _this2.push(normalityItem);\n }\n\n if (options.measurementStatisticalProperties !== undefined) {\n var _this3;\n\n if (options.measurementStatisticalProperties.constructor !== MeasurementStatisticalProperties) {\n throw new Error(\"Option 'measurmentStatisticalProperties' must have type \" + \"MeasurementStatisticalProperties.\");\n }\n\n (_this3 = _this2).push.apply(_this3, _toConsumableArray(measurementStatisticalProperties));\n }\n\n if (options.normalRangeProperties !== undefined) {\n var _this4;\n\n if (options.normalRangeProperties.constructor !== NormalRangeProperties) {\n throw new Error(\"Option 'normalRangeProperties' must have type NormalRangeProperties.\");\n }\n\n (_this4 = _this2).push.apply(_this4, _toConsumableArray(normalRangeProperties));\n }\n\n if (options.levelOfSignificance !== undefined) {\n var levelOfSignificanceItem = new CodeContentItem({\n name: new CodedConcept({\n value: \"121403\",\n schemeDesignator: \"DCM\",\n meaning: \"Level of Significance\"\n }),\n value: options.levelOfSignificance,\n relationshipType: RelationshipTypes.HAS_PROPERTIES\n });\n\n _this2.push(levelOfSignificanceItem);\n }\n\n if (options.selectionStatus !== undefined) {\n var selectionStatusItem = new CodeContentItem({\n name: new CodedConcept({\n value: \"121404\",\n schemeDesignator: \"DCM\",\n meaning: \"Selection Status\"\n }),\n value: options.selectionStatus,\n relationshipType: RelationshipTypes.HAS_PROPERTIES\n });\n\n _this2.push(selectionStatusItem);\n }\n\n if (options.upperMeasurementUncertainty !== undefined) {\n var upperMeasurementUncertaintyItem = new CodeContentItem({\n name: new CodedConcept({\n value: \"R-00364\",\n schemeDesignator: \"SRT\",\n meaning: \"Range of Upper Measurement Uncertainty\"\n }),\n value: options.upperMeasurementUncertainty,\n relationshipType: RelationshipTypes.HAS_PROPERTIES\n });\n\n _this2.push(upperMeasurementUncertaintyItem);\n }\n\n if (options.lowerMeasurementUncertainty !== undefined) {\n var lowerMeasurementUncertaintyItem = new CodeContentItem({\n name: new CodedConcept({\n value: \"R-00362\",\n schemeDesignator: \"SRT\",\n meaning: \"Range of Lower Measurement Uncertainty\"\n }),\n value: options.lowerMeasurementUncertainty,\n relationshipType: RelationshipTypes.HAS_PROPERTIES\n });\n\n _this2.push(lowerMeasurementUncertaintyItem);\n }\n\n return _this2;\n }\n\n return _createClass(MeasurementProperties);\n}(Template);\n\nvar MeasurementStatisticalProperties = /*#__PURE__*/function (_Template3) {\n _inherits(MeasurementStatisticalProperties, _Template3);\n\n var _super4 = _createSuper(MeasurementStatisticalProperties);\n\n function MeasurementStatisticalProperties(options) {\n var _this5;\n\n _classCallCheck(this, MeasurementStatisticalProperties);\n\n _this5 = _super4.call(this);\n\n if (options.values === undefined) {\n throw new Error(\"Option 'values' is required for MeasurementStatisticalProperties.\");\n }\n\n if (!(_typeof(options.values) === \"object\" || options.values instanceof Array)) {\n throw new Error(\"Option 'values' must have type Array.\");\n }\n\n options.values.forEach(function (value) {\n if (!options.concept || options.concept.constructor !== NumContentItem) {\n throw new Error(\"Items of option 'values' must have type NumContentItem.\");\n }\n\n _this5.push(value);\n });\n\n if (options.description !== undefined) {\n var descriptionItem = new TextContentItem({\n name: new CodedConcept({\n value: \"121405\",\n schemeDesignator: \"DCM\",\n meaning: \"Population Description\"\n }),\n value: options.authority,\n relationshipType: RelationshipTypes.HAS_PROPERTIES\n });\n\n _this5.push(authorityItem);\n }\n\n if (options.authority !== undefined) {\n var _authorityItem = new TextContentItem({\n name: new CodedConcept({\n value: \"121406\",\n schemeDesignator: \"DCM\",\n meaning: \"Population Authority\"\n }),\n value: options.authority,\n relationshipType: RelationshipTypes.HAS_PROPERTIES\n });\n\n _this5.push(_authorityItem);\n }\n\n return _this5;\n }\n\n return _createClass(MeasurementStatisticalProperties);\n}(Template);\n\nvar NormalRangeProperties = /*#__PURE__*/function (_Template4) {\n _inherits(NormalRangeProperties, _Template4);\n\n var _super5 = _createSuper(NormalRangeProperties);\n\n function NormalRangeProperties(options) {\n var _this6;\n\n _classCallCheck(this, NormalRangeProperties);\n\n _this6 = _super5.call(this);\n\n if (options.values === undefined) {\n throw new Error(\"Option 'values' is required for NormalRangeProperties.\");\n }\n\n if (!(_typeof(options.values) === \"object\" || options.values instanceof Array)) {\n throw new Error(\"Option 'values' must have type Array.\");\n }\n\n options.values.forEach(function (value) {\n if (!options.concept || options.concept.constructor !== NumContentItem) {\n throw new Error(\"Items of option 'values' must have type NumContentItem.\");\n }\n\n _this6.push(value);\n });\n\n if (options.description !== undefined) {\n var descriptionItem = new TextContentItem({\n name: new CodedConcept({\n value: \"121407\",\n schemeDesignator: \"DCM\",\n meaning: \"Normal Range Description\"\n }),\n value: options.authority,\n relationshipType: RelationshipTypes.HAS_PROPERTIES\n });\n\n _this6.push(authorityItem);\n }\n\n if (options.authority !== undefined) {\n var _authorityItem2 = new TextContentItem({\n name: new CodedConcept({\n value: \"121408\",\n schemeDesignator: \"DCM\",\n meaning: \"Normal Range Authority\"\n }),\n value: options.authority,\n relationshipType: RelationshipTypes.HAS_PROPERTIES\n });\n\n _this6.push(_authorityItem2);\n }\n\n return _this6;\n }\n\n return _createClass(NormalRangeProperties);\n}(Template);\n\nvar ObservationContext = /*#__PURE__*/function (_Template5) {\n _inherits(ObservationContext, _Template5);\n\n var _super6 = _createSuper(ObservationContext);\n\n function ObservationContext(options) {\n var _this8;\n\n var _this7;\n\n _classCallCheck(this, ObservationContext);\n\n _this7 = _super6.call(this);\n\n if (options.observerPersonContext === undefined) {\n throw new Error(\"Option 'observerPersonContext' is required for ObservationContext.\");\n }\n\n if (options.observerPersonContext.constructor !== ObserverContext) {\n throw new Error(\"Option 'observerPersonContext' must have type ObserverContext\");\n }\n\n (_this8 = _this7).push.apply(_this8, _toConsumableArray(options.observerPersonContext));\n\n if (options.observerDeviceContext !== undefined) {\n var _this9;\n\n if (options.observerDeviceContext.constructor !== ObserverContext) {\n throw new Error(\"Option 'observerDeviceContext' must have type ObserverContext\");\n }\n\n (_this9 = _this7).push.apply(_this9, _toConsumableArray(options.observerDeviceContext));\n }\n\n if (options.subjectContext !== undefined) {\n var _this10;\n\n if (options.subjectContext.constructor !== SubjectContext) {\n throw new Error(\"Option 'subjectContext' must have type SubjectContext\");\n }\n\n (_this10 = _this7).push.apply(_this10, _toConsumableArray(options.subjectContext));\n }\n\n return _this7;\n }\n\n return _createClass(ObservationContext);\n}(Template);\n\nvar ObserverContext = /*#__PURE__*/function (_Template6) {\n _inherits(ObserverContext, _Template6);\n\n var _super7 = _createSuper(ObserverContext);\n\n function ObserverContext(options) {\n var _this12;\n\n var _this11;\n\n _classCallCheck(this, ObserverContext);\n\n _this11 = _super7.call(this);\n\n if (options.observerType === undefined) {\n throw new Error(\"Option 'observerType' is required for ObserverContext.\");\n } else {\n if (options.observerType.constructor !== Code && options.observerType.constructor !== CodedConcept) {\n throw new Error(\"Option 'observerType' must have type Code or CodedConcept.\");\n }\n }\n\n var observerTypeItem = new CodeContentItem({\n name: new CodedConcept({\n value: \"121005\",\n meaning: \"Observer Type\",\n schemeDesignator: \"DCM\"\n }),\n value: options.observerType,\n relationshipType: RelationshipTypes.HAS_OBS_CONTEXT\n });\n\n _this11.push(observerTypeItem);\n\n if (options.observerIdentifyingAttributes === undefined) {\n throw new Error(\"Option 'observerIdentifyingAttributes' is required for ObserverContext.\");\n } // FIXME\n\n\n var person = new CodedConcept({\n value: \"121006\",\n schemeDesignator: \"DCM\",\n meaning: \"Person\"\n });\n var device = new CodedConcept({\n value: \"121007\",\n schemeDesignator: \"DCM\",\n meaning: \"Device\"\n });\n\n if (person.equals(options.observerType)) {\n if (options.observerIdentifyingAttributes.constructor !== PersonObserverIdentifyingAttributes) {\n throw new Error(\"Option 'observerIdentifyingAttributes' must have type \" + \"PersonObserverIdentifyingAttributes for 'Person' observer type.\");\n }\n } else if (device.equals(options.observerType)) {\n if (options.observerIdentifyingAttributes.constructor !== DeviceObserverIdentifyingAttributes) {\n throw new Error(\"Option 'observerIdentifyingAttributes' must have type \" + \"DeviceObserverIdentifyingAttributes for 'Device' observer type.\");\n }\n } else {\n throw new Error(\"Option 'oberverType' must be either 'Person' or 'Device'.\");\n }\n\n (_this12 = _this11).push.apply(_this12, _toConsumableArray(options.observerIdentifyingAttributes));\n\n return _this11;\n }\n\n return _createClass(ObserverContext);\n}(Template);\n\nvar PersonObserverIdentifyingAttributes = /*#__PURE__*/function (_Template7) {\n _inherits(PersonObserverIdentifyingAttributes, _Template7);\n\n var _super8 = _createSuper(PersonObserverIdentifyingAttributes);\n\n function PersonObserverIdentifyingAttributes(options) {\n var _this13;\n\n _classCallCheck(this, PersonObserverIdentifyingAttributes);\n\n _this13 = _super8.call(this);\n\n if (options.name === undefined) {\n throw new Error(\"Option 'name' is required for PersonObserverIdentifyingAttributes.\");\n }\n\n var nameItem = new PNameContentItem({\n name: new CodedConcept({\n value: \"121008\",\n meaning: \"Person Observer Name\",\n schemeDesignator: \"DCM\"\n }),\n value: options.name,\n relationshipType: RelationshipTypes.HAS_OBS_CONTEXT\n });\n\n _this13.push(nameItem);\n\n if (options.loginName !== undefined) {\n var loginNameItem = new TextContentItem({\n name: new CodedConcept({\n value: \"128774\",\n meaning: \"Person Observer's Login Name\",\n schemeDesignator: \"DCM\"\n }),\n value: options.loginName,\n relationshipType: RelationshipTypes.HAS_OBS_CONTEXT\n });\n\n _this13.push(loginNameItem);\n }\n\n if (options.organizationName !== undefined) {\n var organizationNameItem = new TextContentItem({\n name: new CodedConcept({\n value: \"121009\",\n meaning: \"Person Observer's Organization Name\",\n schemeDesignator: \"DCM\"\n }),\n value: options.organizationName,\n relationshipType: RelationshipTypes.HAS_OBS_CONTEXT\n });\n\n _this13.push(organizationNameItem);\n }\n\n if (options.roleInOrganization !== undefined) {\n var roleInOrganizationItem = new CodeContentItem({\n name: new CodedConcept({\n value: \"121010\",\n meaning: \"Person Observer's Role in the Organization\",\n schemeDesignator: \"DCM\"\n }),\n value: options.roleInOrganization,\n relationshipType: RelationshipTypes.HAS_OBS_CONTEXT\n });\n\n _this13.push(roleInOrganizationItem);\n }\n\n if (options.roleInProcedure !== undefined) {\n var roleInProcedureItem = new CodeContentItem({\n name: new CodedConcept({\n value: \"121011\",\n meaning: \"Person Observer's Role in this Procedure\",\n schemeDesignator: \"DCM\"\n }),\n value: options.roleInProcedure,\n relationshipType: RelationshipTypes.HAS_OBS_CONTEXT\n });\n\n _this13.push(roleInProcedureItem);\n }\n\n return _this13;\n }\n\n return _createClass(PersonObserverIdentifyingAttributes);\n}(Template);\n\nvar DeviceObserverIdentifyingAttributes = /*#__PURE__*/function (_Template8) {\n _inherits(DeviceObserverIdentifyingAttributes, _Template8);\n\n var _super9 = _createSuper(DeviceObserverIdentifyingAttributes);\n\n function DeviceObserverIdentifyingAttributes(options) {\n var _this14;\n\n _classCallCheck(this, DeviceObserverIdentifyingAttributes);\n\n _this14 = _super9.call(this);\n\n if (options.uid === undefined) {\n throw new Error(\"Option 'uid' is required for DeviceObserverIdentifyingAttributes.\");\n }\n\n var deviceObserverItem = new UIDRefContentItem({\n name: new CodedConcept({\n value: \"121012\",\n meaning: \"Device Observer UID\",\n schemeDesignator: \"DCM\"\n }),\n value: options.uid,\n relationshipType: RelationshipTypes.HAS_OBS_CONTEXT\n });\n\n _this14.push(deviceObserverItem);\n\n if (options.manufacturerName !== undefined) {\n var manufacturerNameItem = new TextContentItem({\n name: new CodedConcept({\n value: \"121013\",\n meaning: \"Device Observer Manufacturer\",\n schemeDesignator: \"DCM\"\n }),\n value: options.manufacturerName,\n relationshipType: RelationshipTypes.HAS_OBS_CONTEXT\n });\n\n _this14.push(manufacturerNameItem);\n }\n\n if (options.modelName !== undefined) {\n var modelNameItem = new TextContentItem({\n name: new CodedConcept({\n value: \"121015\",\n meaning: \"Device Observer Model Name\",\n schemeDesignator: \"DCM\"\n }),\n value: options.modelName,\n relationshipType: RelationshipTypes.HAS_OBS_CONTEXT\n });\n\n _this14.push(modelNameItem);\n }\n\n if (options.serialNumber !== undefined) {\n var serialNumberItem = new TextContentItem({\n name: new CodedConcept({\n value: \"121016\",\n meaning: \"Device Observer Serial Number\",\n schemeDesignator: \"DCM\"\n }),\n value: options.serialNumber,\n relationshipType: RelationshipTypes.HAS_OBS_CONTEXT\n });\n\n _this14.push(serialNumberItem);\n }\n\n if (options.physicalLocation !== undefined) {\n var physicalLocationItem = new TextContentItem({\n name: new CodedConcept({\n value: \"121017\",\n meaning: \"Device Observer Physical Location During Observation\",\n schemeDesignator: \"DCM\"\n }),\n value: options.physicalLocation,\n relationshipType: RelationshipTypes.HAS_OBS_CONTEXT\n });\n\n _this14.push(physicalLocationItem);\n }\n\n if (options.roleInProcedure !== undefined) {\n var roleInProcedureItem = new CodeContentItem({\n name: new CodedConcept({\n value: \"113876\",\n meaning: \"Device Role in Procedure\",\n schemeDesignator: \"DCM\"\n }),\n value: options.roleInProcedure,\n relationshipType: RelationshipTypes.HAS_OBS_CONTEXT\n });\n\n _this14.push(roleInProcedureItem);\n }\n\n return _this14;\n }\n\n return _createClass(DeviceObserverIdentifyingAttributes);\n}(Template);\n\nvar SubjectContext = /*#__PURE__*/function (_Template9) {\n _inherits(SubjectContext, _Template9);\n\n var _super10 = _createSuper(SubjectContext);\n\n function SubjectContext(options) {\n var _this16;\n\n var _this15;\n\n _classCallCheck(this, SubjectContext);\n\n _this15 = _super10.call(this);\n\n if (options.subjectClass === undefined) {\n throw new Error(\"Option 'subjectClass' is required for SubjectContext.\");\n }\n\n if (options.subjectClassSpecificContext === undefined) {\n throw new Error(\"Option 'subjectClassSpecificContext' is required for SubjectContext.\");\n }\n\n var subjectClassItem = new CodeContentItem({\n name: new CodedConcept({\n value: \"121024\",\n meaning: \"Subject Class\",\n schemeDesignator: \"DCM\"\n }),\n value: options.subjectClass,\n relationshipType: RelationshipTypes.HAS_OBS_CONTEXT\n });\n\n _this15.push(subjectClassItem);\n\n var fetus = new CodedConcept({\n value: \"121026 \",\n schemeDesignator: \"DCM\",\n meaning: \"Fetus\"\n });\n var specimen = new CodedConcept({\n value: \"121027\",\n schemeDesignator: \"DCM\",\n meaning: \"Specimen\"\n });\n var device = new CodedConcept({\n value: \"121192\",\n schemeDesignator: \"DCM\",\n meaning: \"Device Subject\"\n });\n\n if (fetus.equals(options.subjectClass)) {\n if (options.subjectClassSpecificContext.constructor !== SubjectContextFetus) {\n throw new Error(\"Option 'subjectClass' must have type \" + \"SubjectContextFetus for 'Fetus' subject class.\");\n }\n } else if (specimen.equals(options.subjectClass)) {\n if (options.subjectClassSpecificContext.constructor !== SubjectContextSpecimen) {\n throw new Error(\"Option 'subjectClass' must have type \" + \"SubjectContextSpecimen for 'Specimen' subject class.\");\n }\n } else if (device.equals(options.subjectClass)) {\n if (options.subjectClassSpecificContext.constructor !== SubjectContextDevice) {\n throw new Error(\"Option 'subjectClass' must have type \" + \"SubjectContextDevice for 'Device' subject class.\");\n }\n } else {\n throw new Error(\"Option 'subjectClass' must be either 'Fetus', 'Specimen', or 'Device'.\");\n }\n\n (_this16 = _this15).push.apply(_this16, _toConsumableArray(options.subjectClassSpecificContext));\n\n return _this15;\n }\n\n return _createClass(SubjectContext);\n}(Template);\n\nvar SubjectContextFetus = /*#__PURE__*/function (_Template10) {\n _inherits(SubjectContextFetus, _Template10);\n\n var _super11 = _createSuper(SubjectContextFetus);\n\n function SubjectContextFetus(options) {\n var _this17;\n\n _classCallCheck(this, SubjectContextFetus);\n\n _this17 = _super11.call(this);\n\n if (options.subjectID === undefined) {\n throw new Error(\"Option 'subjectID' is required for SubjectContextFetus.\");\n }\n\n var subjectIdItem = new TextContentItem({\n name: new CodedConcept({\n value: \"121030\",\n meaning: \"Subject ID\",\n schemeDesignator: \"DCM\"\n }),\n value: options.subjectID,\n relationshipType: RelationshipTypes.HAS_OBS_CONTEXT\n });\n\n _this17.push(subjectIdItem);\n\n return _this17;\n }\n\n return _createClass(SubjectContextFetus);\n}(Template);\n\nvar SubjectContextSpecimen = /*#__PURE__*/function (_Template11) {\n _inherits(SubjectContextSpecimen, _Template11);\n\n var _super12 = _createSuper(SubjectContextSpecimen);\n\n function SubjectContextSpecimen(options) {\n var _this18;\n\n _classCallCheck(this, SubjectContextSpecimen);\n\n _this18 = _super12.call(this);\n\n if (options.uid === undefined) {\n throw new Error(\"Option 'uid' is required for SubjectContextSpecimen.\");\n }\n\n var specimenUidItem = new UIDRefContentItem({\n name: new CodedConcept({\n value: \"121039\",\n meaning: \"Specimen UID\",\n schemeDesignator: \"DCM\"\n }),\n value: options.uid,\n relationshipType: RelationshipTypes.HAS_OBS_CONTEXT\n });\n\n _this18.push(specimenUidItem);\n\n if (options.identifier !== undefined) {\n var specimenIdentifierItem = new TextContentItem({\n name: new CodedConcept({\n value: \"121041\",\n meaning: \"Specimen Identifier\",\n schemeDesignator: \"DCM\"\n }),\n value: options.identifier,\n relationshipType: RelationshipTypes.HAS_OBS_CONTEXT\n });\n\n _this18.push(specimenIdentifierItem);\n }\n\n if (options.containerIdentifier !== undefined) {\n var containerIdentifierItem = new TextContentItem({\n name: new CodedConcept({\n value: \"111700\",\n meaning: \"Specimen Container Identifier\",\n schemeDesignator: \"DCM\"\n }),\n value: options.containerIdentifier,\n relationshipType: RelationshipTypes.HAS_OBS_CONTEXT\n });\n\n _this18.push(containerIdentifierItem);\n }\n\n if (options.specimenType !== undefined) {\n var specimenTypeItem = new CodeContentItem({\n name: new CodedConcept({\n value: \"R-00254\",\n meaning: \"Specimen Type\",\n schemeDesignator: \"DCM\"\n }),\n value: options.specimenType,\n relationshipType: RelationshipTypes.HAS_OBS_CONTEXT\n });\n\n _this18.push(specimenTypeItem);\n }\n\n return _this18;\n }\n\n return _createClass(SubjectContextSpecimen);\n}(Template);\n\nvar SubjectContextDevice = /*#__PURE__*/function (_Template12) {\n _inherits(SubjectContextDevice, _Template12);\n\n var _super13 = _createSuper(SubjectContextDevice);\n\n function SubjectContextDevice(options) {\n var _this19;\n\n _classCallCheck(this, SubjectContextDevice);\n\n if (options.name === undefined) {\n throw new Error(\"Option 'name' is required for SubjectContextDevice.\");\n }\n\n var deviceNameItem = new TextContentItem({\n name: new CodedConcept({\n value: \"121193\",\n meaning: \"Device Subject Name\",\n schemeDesignator: \"DCM\"\n }),\n value: options.name,\n relationshipType: RelationshipTypes.HAS_OBS_CONTEXT\n });\n\n _this19.push(deviceNameItem);\n\n if (options.uid !== undefined) {\n var deviceUidItem = new UIDRefContentItem({\n name: new CodedConcept({\n value: \"121198\",\n meaning: \"Device Subject UID\",\n schemeDesignator: \"DCM\"\n }),\n value: options.uid,\n relationshipType: RelationshipTypes.HAS_OBS_CONTEXT\n });\n\n _this19.push(deviceUidItem);\n }\n\n if (options.manufacturerName !== undefined) {\n var manufacturerNameItem = new TextContentItem({\n name: new CodedConcept({\n value: \"121194\",\n meaning: \"Device Subject Manufacturer\",\n schemeDesignator: \"DCM\"\n }),\n value: options.manufacturerName,\n relationshipType: RelationshipTypes.HAS_OBS_CONTEXT\n });\n\n _this19.push(manufacturerNameItem);\n }\n\n if (options.modelName !== undefined) {\n var modelNameItem = new TextContentItem({\n name: new CodedConcept({\n value: \"121195\",\n meaning: \"Device Subject Model Name\",\n schemeDesignator: \"DCM\"\n }),\n value: options.modelName,\n relationshipType: RelationshipTypes.HAS_OBS_CONTEXT\n });\n\n _this19.push(modelNameItem);\n }\n\n if (options.serialNumber !== undefined) {\n var serialNumberItem = new TextContentItem({\n name: new CodedConcept({\n value: \"121196\",\n meaning: \"Device Subject Serial Number\",\n schemeDesignator: \"DCM\"\n }),\n value: options.serialNumber,\n relationshipType: RelationshipTypes.HAS_OBS_CONTEXT\n });\n\n _this19.push(serialNumberItem);\n }\n\n if (options.physicalLocation !== undefined) {\n var physicalLocationItem = new TextContentItem({\n name: new CodedConcept({\n value: \"121197\",\n meaning: \"Device Subject Physical Location During Observation\",\n schemeDesignator: \"DCM\"\n }),\n value: options.physicalLocation,\n relationshipType: RelationshipTypes.HAS_OBS_CONTEXT\n });\n\n _this19.push(physicalLocationItem);\n }\n\n return _possibleConstructorReturn(_this19);\n }\n\n return _createClass(SubjectContextDevice);\n}(Template);\n\nvar LanguageOfContentItemAndDescendants = /*#__PURE__*/function (_Template13) {\n _inherits(LanguageOfContentItemAndDescendants, _Template13);\n\n var _super14 = _createSuper(LanguageOfContentItemAndDescendants);\n\n function LanguageOfContentItemAndDescendants(options) {\n var _this20;\n\n _classCallCheck(this, LanguageOfContentItemAndDescendants);\n\n _this20 = _super14.call(this);\n\n if (options.language === undefined) {\n options.language = new CodedConcept({\n value: \"en-US\",\n schemeDesignator: \"RFC5646\",\n meaning: \"English (United States)\"\n });\n }\n\n var languageItem = new CodeContentItem({\n name: new CodedConcept({\n value: \"121049\",\n meaning: \"Language of Content Item and Descendants\",\n schemeDesignator: \"DCM\"\n }),\n value: options.language,\n relationshipType: RelationshipTypes.HAS_CONCEPT_MOD\n });\n\n _this20.push(languageItem);\n\n return _this20;\n }\n\n return _createClass(LanguageOfContentItemAndDescendants);\n}(Template);\n\nvar _MeasurementsAndQualitatitiveEvaluations = /*#__PURE__*/function (_Template14) {\n _inherits(_MeasurementsAndQualitatitiveEvaluations, _Template14);\n\n var _super15 = _createSuper(_MeasurementsAndQualitatitiveEvaluations);\n\n function _MeasurementsAndQualitatitiveEvaluations(options) {\n var _groupItem$ContentSeq;\n\n var _this21;\n\n _classCallCheck(this, _MeasurementsAndQualitatitiveEvaluations);\n\n _this21 = _super15.call(this);\n var groupItem = new ContainerContentItem({\n name: new CodedConcept({\n value: \"125007\",\n meaning: \"Measurement Group\",\n schemeDesignator: \"DCM\"\n }),\n relationshipType: RelationshipTypes.CONTAINS\n });\n groupItem.ContentSequence = new ContentSequence$1();\n\n if (options.trackingIdentifier === undefined) {\n throw new Error(\"Option 'trackingIdentifier' is required for measurements group.\");\n }\n\n if (options.trackingIdentifier.constructor !== TrackingIdentifier) {\n throw new Error(\"Option 'trackingIdentifier' must have type TrackingIdentifier.\");\n }\n\n if (options.trackingIdentifier.length !== 2) {\n throw new Error(\"Option 'trackingIdentifier' must include a human readable tracking \" + \"identifier and a tracking unique identifier.\");\n }\n\n (_groupItem$ContentSeq = groupItem.ContentSequence).push.apply(_groupItem$ContentSeq, _toConsumableArray(options.trackingIdentifier));\n\n if (options.session !== undefined) {\n var sessionItem = new TextContentItem({\n name: new CodedConcept({\n value: \"C67447\",\n meaning: \"Activity Session\",\n schemeDesignator: \"NCIt\"\n }),\n value: options.session,\n relationshipType: RelationshipTypes.HAS_OBS_CONTEXT\n });\n groupItem.ContentSequence.push(sessionItem);\n }\n\n if (options.findingType !== undefined) {\n var findingTypeItem = new CodeContentItem({\n name: new CodedConcept({\n value: \"121071\",\n meaning: \"Finding\",\n schemeDesignator: \"DCM\"\n }),\n value: options.findingType,\n relationshipType: RelationshipTypes.CONTAINS\n });\n groupItem.ContentSequence.push(findingTypeItem);\n }\n\n if (options.timePointContext !== undefined) {\n var _groupItem$ContentSeq2;\n\n if (options.timePointContext.constructor !== TimePointContext) {\n throw new Error(\"Option 'timePointContext' must have type TimePointContext.\");\n }\n\n (_groupItem$ContentSeq2 = groupItem.ContentSequence).push.apply(_groupItem$ContentSeq2, _toConsumableArray(timePointContext));\n }\n\n if (options.referencedRealWorldValueMap !== undefined) {\n if (options.referencedRealWorldValueMap.constructor !== ReferencedRealWorldValueMap) {\n throw new Error(\"Option 'referencedRealWorldValleMap' must have type \" + \"ReferencedRealWorldValueMap.\");\n }\n\n groupItem.ContentSequence.push(options.referencedRealWorldValueMap);\n }\n\n if (options.measurements !== undefined) {\n if (!(_typeof(options.measurements) === \"object\" || options.measurements instanceof Array)) {\n throw new Error(\"Option 'measurements' must have type Array.\");\n }\n\n options.measurements.forEach(function (measurement) {\n console.log(measurement);\n\n if (!measurement || measurement.constructor !== NumContentItem) {\n throw new Error(\"Items of option 'measurement' must have type NumContentItem.\");\n }\n\n groupItem.ContentSequence.push(measurement);\n });\n }\n\n if (options.qualitativeEvaluations !== undefined) {\n if (!(_typeof(options.qualitativeEvaluations) === \"object\" || options.qualitativeEvaluations instanceof Array)) {\n throw new Error(\"Option 'qualitativeEvaluations' must have type Array.\");\n }\n\n options.qualitativeEvaluations.forEach(function (evaluation) {\n if (!evaluation || evaluation.constructor !== CodeContentItem && evaluation.constructor !== TextContentItem) {\n throw new Error(\"Items of option 'qualitativeEvaluations' must have type \" + \"CodeContentItem or TextContentItem.\");\n }\n\n groupItem.ContentSequence.push(evaluation);\n });\n }\n\n _this21.push(groupItem);\n\n return _this21;\n }\n\n return _createClass(_MeasurementsAndQualitatitiveEvaluations);\n}(Template);\n\nvar _ROIMeasurementsAndQualitativeEvaluations = /*#__PURE__*/function (_MeasurementsAndQuali) {\n _inherits(_ROIMeasurementsAndQualitativeEvaluations, _MeasurementsAndQuali);\n\n var _super16 = _createSuper(_ROIMeasurementsAndQualitativeEvaluations);\n\n function _ROIMeasurementsAndQualitativeEvaluations(options) {\n var _this22;\n\n _classCallCheck(this, _ROIMeasurementsAndQualitativeEvaluations);\n\n _this22 = _super16.call(this, {\n trackingIdentifier: options.trackingIdentifier,\n timePointContext: options.timePointContext,\n findingType: options.findingType,\n session: options.session,\n measurements: options.measurements,\n qualitativeEvaluations: options.qualitativeEvaluations\n });\n var groupItem = _this22[0];\n var wereReferencesProvided = [options.referencedRegions !== undefined, options.referencedVolume !== undefined, options.referencedSegmentation !== undefined];\n var numReferences = wereReferencesProvided.reduce(function (a, b) {\n return a + b;\n });\n\n if (numReferences === 0) {\n throw new Error(\"One of the following options must be provided: \" + \"'referencedRegions', 'referencedVolume', or \" + \"'referencedSegmentation'.\");\n } else if (numReferences > 1) {\n throw new Error(\"Only one of the following options should be provided: \" + \"'referencedRegions', 'referencedVolume', or \" + \"'referencedSegmentation'.\");\n }\n\n if (options.referencedRegions !== undefined) {\n if (!(_typeof(options.referencedRegions) === \"object\" || options.referencedRegions instanceof Array)) {\n throw new Error(\"Option 'referencedRegions' must have type Array.\");\n }\n\n if (options.referencedRegions.length === 0) {\n throw new Error(\"Option 'referencedRegion' must have non-zero length.\");\n }\n\n options.referencedRegions.forEach(function (region) {\n if (region === undefined || region.constructor !== ImageRegion && region.constructor !== ImageRegion3D) {\n throw new Error(\"Items of option 'referencedRegion' must have type \" + \"ImageRegion or ImageRegion3D.\");\n }\n\n groupItem.ContentSequence.push(region);\n });\n } else if (options.referencedVolume !== undefined) {\n if (options.referencedVolume.constructor !== VolumeSurface) {\n throw new Error(\"Items of option 'referencedVolume' must have type VolumeSurface.\");\n }\n\n groupItem.ContentSequence.push(referencedVolume);\n } else if (options.referencedSegmentation !== undefined) {\n if (options.referencedSegmentation.constructor !== ReferencedSegmentation && options.referencedSegmentation.constructor !== ReferencedSegmentationFrame) {\n throw new Error(\"Option 'referencedSegmentation' must have type \" + \"ReferencedSegmentation or ReferencedSegmentationFrame.\");\n }\n\n groupItem.ContentSequence.push(referencedSegmentation);\n }\n\n _this22[0] = groupItem;\n return _this22;\n }\n\n return _createClass(_ROIMeasurementsAndQualitativeEvaluations);\n}(_MeasurementsAndQualitatitiveEvaluations);\n\nvar PlanarROIMeasurementsAndQualitativeEvaluations = /*#__PURE__*/function (_ROIMeasurementsAndQu) {\n _inherits(PlanarROIMeasurementsAndQualitativeEvaluations, _ROIMeasurementsAndQu);\n\n var _super17 = _createSuper(PlanarROIMeasurementsAndQualitativeEvaluations);\n\n function PlanarROIMeasurementsAndQualitativeEvaluations(options) {\n _classCallCheck(this, PlanarROIMeasurementsAndQualitativeEvaluations);\n\n var wereReferencesProvided = [options.referencedRegion !== undefined, options.referencedSegmentation !== undefined];\n var numReferences = wereReferencesProvided.reduce(function (a, b) {\n return a + b;\n });\n\n if (numReferences === 0) {\n throw new Error(\"One of the following options must be provided: \" + \"'referencedRegion', 'referencedSegmentation'.\");\n } else if (numReferences > 1) {\n throw new Error(\"Only one of the following options should be provided: \" + \"'referencedRegion', 'referencedSegmentation'.\");\n }\n\n return _super17.call(this, {\n trackingIdentifier: options.trackingIdentifier,\n referencedRegions: [options.referencedRegion],\n referencedSegmentation: options.referencedSegmentation,\n referencedRealWorldValueMap: options.referencedRealWorldValueMap,\n timePointContext: options.timePointContext,\n findingType: options.findingType,\n session: options.session,\n measurements: options.measurements,\n qualitativeEvaluations: options.qualitativeEvaluations\n });\n }\n\n return _createClass(PlanarROIMeasurementsAndQualitativeEvaluations);\n}(_ROIMeasurementsAndQualitativeEvaluations);\n\nvar VolumetricROIMeasurementsAndQualitativeEvaluations = /*#__PURE__*/function (_ROIMeasurementsAndQu2) {\n _inherits(VolumetricROIMeasurementsAndQualitativeEvaluations, _ROIMeasurementsAndQu2);\n\n var _super18 = _createSuper(VolumetricROIMeasurementsAndQualitativeEvaluations);\n\n function VolumetricROIMeasurementsAndQualitativeEvaluations(options) {\n _classCallCheck(this, VolumetricROIMeasurementsAndQualitativeEvaluations);\n\n return _super18.call(this, {\n trackingIdentifier: options.trackingIdentifier,\n referencedRegions: options.referencedRegions,\n referencedSegmentation: options.referencedSegmentation,\n referencedRealWorldValueMap: options.referencedRealWorldValueMap,\n timePointContext: options.timePointContext,\n findingType: options.findingType,\n session: options.session,\n measurements: options.measurements,\n qualitativeEvaluations: options.qualitativeEvaluations\n });\n }\n\n return _createClass(VolumetricROIMeasurementsAndQualitativeEvaluations);\n}(_ROIMeasurementsAndQualitativeEvaluations);\n\nvar MeasurementsDerivedFromMultipleROIMeasurements = /*#__PURE__*/function (_Template15) {\n _inherits(MeasurementsDerivedFromMultipleROIMeasurements, _Template15);\n\n var _super19 = _createSuper(MeasurementsDerivedFromMultipleROIMeasurements);\n\n function MeasurementsDerivedFromMultipleROIMeasurements(options) {\n var _this23;\n\n _classCallCheck(this, MeasurementsDerivedFromMultipleROIMeasurements);\n\n if (options.derivation === undefined) {\n throw new Error(\"Option 'derivation' is required for \" + \"MeasurementsDerivedFromMultipleROIMeasurements.\");\n } // FIXME\n\n\n var valueItem = new NumContentItem({\n name: options.derivation\n });\n valueItem.ContentSequence = new ContentSequence$1();\n\n if (options.measurementGroups === undefined) {\n throw new Error(\"Option 'measurementGroups' is required for \" + \"MeasurementsDerivedFromMultipleROIMeasurements.\");\n }\n\n if (!(_typeof(options.measurementGroups) === \"object\" || options.measurementGroups instanceof Array)) {\n throw new Error(\"Option 'measurementGroups' must have type Array.\");\n }\n\n options.measurementGroups.forEach(function (group) {\n var _valueItem$ContentSeq4;\n\n if (!group || group.constructor !== PlanarROIMeasurementsAndQualitativeEvaluations && group.constructor !== VolumetricROIMeasurementsAndQualitativeEvaluations) {\n throw new Error(\"Items of option 'measurementGroups' must have type \" + \"PlanarROIMeasurementsAndQualitativeEvaluations or \" + \"VolumetricROIMeasurementsAndQualitativeEvaluations.\");\n }\n\n group[0].RelationshipType = \"R-INFERRED FROM\";\n\n (_valueItem$ContentSeq4 = valueItem.ContentSequence).push.apply(_valueItem$ContentSeq4, _toConsumableArray(group));\n });\n\n if (options.measurementProperties !== undefined) {\n var _valueItem$ContentSeq5;\n\n if (options.measurementProperties.constructor !== MeasurementProperties) {\n throw new Error(\"Option 'measurementProperties' must have type MeasurementProperties.\");\n }\n\n (_valueItem$ContentSeq5 = valueItem.ContentSequence).push.apply(_valueItem$ContentSeq5, _toConsumableArray(options.measurementProperties));\n }\n\n _this23.push(valueItem);\n\n return _possibleConstructorReturn(_this23);\n }\n\n return _createClass(MeasurementsDerivedFromMultipleROIMeasurements);\n}(Template);\n\nvar MeasurementAndQualitativeEvaluationGroup = /*#__PURE__*/function (_MeasurementsAndQuali2) {\n _inherits(MeasurementAndQualitativeEvaluationGroup, _MeasurementsAndQuali2);\n\n var _super20 = _createSuper(MeasurementAndQualitativeEvaluationGroup);\n\n function MeasurementAndQualitativeEvaluationGroup(options) {\n _classCallCheck(this, MeasurementAndQualitativeEvaluationGroup);\n\n return _super20.call(this, {\n trackingIdentifier: options.trackingIdentifier,\n referencedRealWorldValueMap: options.referencedRealWorldValueMap,\n timePointContext: options.timePointContext,\n findingType: options.findingType,\n session: options.session,\n measurements: options.measurements,\n qualitativeEvaluations: options.qualitativeEvaluations\n });\n }\n\n return _createClass(MeasurementAndQualitativeEvaluationGroup);\n}(_MeasurementsAndQualitatitiveEvaluations);\n\nvar ROIMeasurements = /*#__PURE__*/function (_Template16) {\n _inherits(ROIMeasurements, _Template16);\n\n var _super21 = _createSuper(ROIMeasurements);\n\n function ROIMeasurements(options) {\n var _this24;\n\n _classCallCheck(this, ROIMeasurements);\n\n _this24 = _super21.call(this);\n\n if (options.method !== undefined) {\n var methodItem = new CodeContentItem({\n name: new CodedConcept({\n value: \"370129005\",\n meaning: \"Measurement Method\",\n schemeDesignator: \"SCT\"\n }),\n value: options.method,\n relationshipType: RelationshipTypes.HAS_CONCEPT_MOD\n });\n\n _this24.push(methodItem);\n }\n\n if (options.findingSites !== undefined) {\n if (!(_typeof(options.findingSites) === \"object\" || options.findingSites instanceof Array)) {\n throw new Error(\"Option 'findingSites' must have type Array.\");\n }\n\n options.findingSites.forEach(function (site) {\n if (!site || site.constructor !== FindingSite) {\n throw new Error(\"Items of option 'findingSites' must have type FindingSite.\");\n }\n\n _this24.push(site);\n });\n }\n\n if (options.measurements === undefined) {\n throw new Error(\"Options 'measurements' is required ROIMeasurements.\");\n }\n\n if (!(_typeof(options.measurements) === \"object\" || options.measurements instanceof Array)) {\n throw new Error(\"Option 'measurements' must have type Array.\");\n }\n\n if (options.measurements.length === 0) {\n throw new Error(\"Option 'measurements' must have non-zero length.\");\n }\n\n options.measurements.forEach(function (measurement) {\n if (!measurement || measurement.constructor !== Measurement) {\n throw new Error(\"Items of option 'measurements' must have type Measurement.\");\n }\n\n _this24.push(measurement);\n });\n return _this24;\n }\n\n return _createClass(ROIMeasurements);\n}(Template);\n\nvar MeasurementReport$3 = /*#__PURE__*/function (_Template17) {\n _inherits(MeasurementReport, _Template17);\n\n var _super22 = _createSuper(MeasurementReport);\n\n function MeasurementReport(options) {\n var _item$ContentSequence, _item$ContentSequence2, _item$ContentSequence3;\n\n var _this25;\n\n _classCallCheck(this, MeasurementReport);\n\n _this25 = _super22.call(this);\n\n if (options.observationContext === undefined) {\n throw new Error(\"Option 'observationContext' is required for MeasurementReport.\");\n }\n\n if (options.procedureReported === undefined) {\n throw new Error(\"Option 'procedureReported' is required for MeasurementReport.\");\n }\n\n var item = new ContainerContentItem({\n name: new CodedConcept({\n value: \"126000\",\n schemeDesignator: \"DCM\",\n meaning: \"Imaging Measurement Report\"\n }),\n templateID: \"1500\"\n });\n item.ContentSequence = new ContentSequence$1();\n\n if (options.languageOfContentItemAndDescendants === undefined) {\n throw new Error(\"Option 'languageOfContentItemAndDescendants' is required for \" + \"MeasurementReport.\");\n }\n\n if (options.languageOfContentItemAndDescendants.constructor !== LanguageOfContentItemAndDescendants) {\n throw new Error(\"Option 'languageOfContentItemAndDescendants' must have type \" + \"LanguageOfContentItemAndDescendants.\");\n }\n\n (_item$ContentSequence = item.ContentSequence).push.apply(_item$ContentSequence, _toConsumableArray(options.languageOfContentItemAndDescendants));\n\n (_item$ContentSequence2 = item.ContentSequence).push.apply(_item$ContentSequence2, _toConsumableArray(options.observationContext));\n\n if (options.procedureReported.constructor === CodedConcept || options.procedureReported.constructor === Code) {\n options.procedureReported = [options.procedureReported];\n }\n\n if (!(_typeof(options.procedureReported) === \"object\" || options.procedureReported instanceof Array)) {\n throw new Error(\"Option 'procedureReported' must have type Array.\");\n }\n\n options.procedureReported.forEach(function (procedure) {\n var procedureItem = new CodeContentItem({\n name: new CodedConcept({\n value: \"121058\",\n meaning: \"Procedure reported\",\n schemeDesignator: \"DCM\"\n }),\n value: procedure,\n relationshipType: RelationshipTypes.HAS_CONCEPT_MOD\n });\n item.ContentSequence.push(procedureItem);\n });\n var imageLibraryItem = new ImageLibrary();\n\n (_item$ContentSequence3 = item.ContentSequence).push.apply(_item$ContentSequence3, _toConsumableArray(imageLibraryItem));\n\n var wereOptionsProvided = [options.imagingMeasurements !== undefined, options.derivedImagingMeasurements !== undefined, options.qualitativeEvaluations !== undefined];\n var numOptionsProvided = wereOptionsProvided.reduce(function (a, b) {\n return a + b;\n });\n\n if (numOptionsProvided > 1) {\n throw new Error(\"Only one of the following options should be provided: \" + \"'imagingMeasurements', 'derivedImagingMeasurement', \" + \"'qualitativeEvaluations'.\");\n }\n\n if (options.imagingMeasurements !== undefined) {\n var containerItem = new ContainerContentItem({\n name: new CodedConcept({\n value: \"126010\",\n meaning: \"Imaging Measurements\",\n schemeDesignator: \"DCM\"\n }),\n relationshipType: RelationshipTypes.CONTAINS\n });\n containerItem.ContentSequence = _construct(ContentSequence$1, _toConsumableArray(options.imagingMeasurements));\n item.ContentSequence.push(containerItem);\n } else if (options.derivedImagingMeasurements !== undefined) {\n var _containerItem = new ContainerContentItem({\n name: new CodedConcept({\n value: \"126011\",\n meaning: \"Derived Imaging Measurements\",\n schemeDesignator: \"DCM\"\n }),\n relationshipType: RelationshipTypes.CONTAINS\n });\n\n _containerItem.ContentSequence = _construct(ContentSequence$1, _toConsumableArray(options.derivedImagingMeasurements));\n item.ContentSequence.push(_containerItem);\n } else if (options.qualitativeEvaluations !== undefined) {\n var _containerItem2 = new ContainerContentItem({\n name: new CodedConcept({\n value: \"C0034375\",\n meaning: \"Qualitative Evaluations\",\n schemeDesignator: \"UMLS\"\n }),\n relationshipType: RelationshipTypes.CONTAINS\n });\n\n _containerItem2.ContentSequence = _construct(ContentSequence$1, _toConsumableArray(options.qualitativeEvaluations));\n item.ContentSequence.push(_containerItem2);\n }\n\n _this25.push(item);\n\n return _this25;\n }\n\n return _createClass(MeasurementReport);\n}(Template);\n\nvar TimePointContext = /*#__PURE__*/function (_Template18) {\n _inherits(TimePointContext, _Template18);\n\n var _super23 = _createSuper(TimePointContext);\n\n function TimePointContext(options) {\n var _this26;\n\n _classCallCheck(this, TimePointContext);\n\n if (options.timePoint === undefined) {\n throw new Error(\"Option 'timePoint' is required for TimePointContext.\");\n }\n\n var timePointItem = new TextContentItem({\n name: new CodedConcept({\n value: \"C2348792\",\n meaning: \"Time Point\",\n schemeDesignator: \"UMLS\"\n }),\n value: options.timePoint,\n relationshipType: RelationshipTypes.HAS_OBS_CONTEXT\n });\n\n _this26.push(timePointItem);\n\n if (options.timePointType !== undefined) {\n var timePointTypeItem = new CodeContentItem({\n name: new CodedConcept({\n value: \"126072\",\n meaning: \"Time Point Type\",\n schemeDesignator: \"DCM\"\n }),\n value: options.timePointType,\n relationshipType: RelationshipTypes.HAS_OBS_CONTEXT\n });\n\n _this26.push(timePointTypeItem);\n }\n\n if (options.timePointOrder !== undefined) {\n var timePointOrderItem = new NumContentItem({\n name: new CodedConcept({\n value: \"126073\",\n meaning: \"Time Point Order\",\n schemeDesignator: \"DCM\"\n }),\n value: options.timePointOrder,\n relationshipType: RelationshipTypes.HAS_OBS_CONTEXT\n });\n\n _this26.push(timePointOrderItem);\n }\n\n if (options.subjectTimePointIdentifier !== undefined) {\n var subjectTimePointIdentifierItem = new NumContentItem({\n name: new CodedConcept({\n value: \"126070\",\n meaning: \"Subject Time Point Identifier\",\n schemeDesignator: \"DCM\"\n }),\n value: options.subjectTimePointIdentifier,\n relationshipType: RelationshipTypes.HAS_OBS_CONTEXT\n });\n\n _this26.push(subjectTimePointIdentifierItem);\n }\n\n if (options.protocolTimePointIdentifier !== undefined) {\n var protocolTimePointIdentifierItem = new NumContentItem({\n name: new CodedConcept({\n value: \"126071\",\n meaning: \"Protocol Time Point Identifier\",\n schemeDesignator: \"DCM\"\n }),\n value: options.protocolTimePointIdentifier,\n relationshipType: RelationshipTypes.HAS_OBS_CONTEXT\n });\n\n _this26.push(protocolTimePointIdentifierItem);\n }\n\n if (options.temporalOffsetFromEvent !== undefined) {\n if (options.temporalOffsetFromEvent.constructor !== LongitudinalTemporalOffsetFromEventContentItem) {\n throw new Error(\"Option 'temporalOffsetFromEvent' must have type \" + \"LongitudinalTemporalOffsetFromEventContentItem.\");\n }\n\n _this26.push(temporalOffsetFromEvent);\n }\n\n return _possibleConstructorReturn(_this26);\n }\n\n return _createClass(TimePointContext);\n}(Template);\n\nvar ImageLibrary = /*#__PURE__*/function (_Template19) {\n _inherits(ImageLibrary, _Template19);\n\n var _super24 = _createSuper(ImageLibrary);\n\n function ImageLibrary(options) {\n var _this27;\n\n _classCallCheck(this, ImageLibrary);\n\n _this27 = _super24.call(this);\n var libraryItem = new ContainerContentItem({\n name: new CodedConcept({\n value: \"111028\",\n meaning: \"Image Library\",\n schemeDesignator: \"DCM\"\n }),\n relationshipType: RelationshipTypes.CONTAINS\n });\n\n _this27.push(libraryItem);\n\n return _this27;\n }\n\n return _createClass(ImageLibrary);\n}(Template);\n\nvar AlgorithmIdentification = /*#__PURE__*/function (_Template20) {\n _inherits(AlgorithmIdentification, _Template20);\n\n var _super25 = _createSuper(AlgorithmIdentification);\n\n function AlgorithmIdentification(options) {\n var _this28;\n\n _classCallCheck(this, AlgorithmIdentification);\n\n _this28 = _super25.call(this);\n\n if (options.name === undefined) {\n throw new Error(\"Option 'name' is required for AlgorithmIdentification.\");\n }\n\n if (options.version === undefined) {\n throw new Error(\"Option 'version' is required for AlgorithmIdentification.\");\n }\n\n var nameItem = new TextContentItem({\n name: new CodedConcept({\n value: \"111001\",\n meaning: \"Algorithm Name\",\n schemeDesignator: \"DCM\"\n }),\n value: options.name,\n relationshipType: RelationshipTypes.HAS_CONCEPT_MOD\n });\n\n _this28.push(nameItem);\n\n var versionItem = new TextContentItem({\n name: new CodedConcept({\n value: \"111003\",\n meaning: \"Algorithm Version\",\n schemeDesignator: \"DCM\"\n }),\n value: options.version,\n relationshipType: RelationshipTypes.HAS_CONCEPT_MOD\n });\n\n _this28.push(versionItem);\n\n if (options.parameters !== undefined) {\n if (!(_typeof(options.parameters) === \"object\" || options.parameters instanceof Array)) {\n throw new Error(\"Option 'parameters' must have type Array.\");\n }\n\n options.parameters.forEach(function (parameter) {\n var parameterItem = new TextContentItem({\n name: new CodedConcept({\n value: \"111002\",\n meaning: \"Algorithm Parameter\",\n schemeDesignator: \"DCM\"\n }),\n value: param,\n relationshipType: RelationshipTypes.HAS_CONCEPT_MOD\n });\n\n _this28.push(parameterItem);\n });\n }\n\n return _this28;\n }\n\n return _createClass(AlgorithmIdentification);\n}(Template);\n\nvar TrackingIdentifier = /*#__PURE__*/function (_Template21) {\n _inherits(TrackingIdentifier, _Template21);\n\n var _super26 = _createSuper(TrackingIdentifier);\n\n function TrackingIdentifier(options) {\n var _this29;\n\n _classCallCheck(this, TrackingIdentifier);\n\n _this29 = _super26.call(this);\n\n if (options.uid === undefined) {\n throw new Error(\"Option 'uid' is required for TrackingIdentifier.\");\n }\n\n if (options.identifier !== undefined) {\n var trackingIdentifierItem = new TextContentItem({\n name: new CodedConcept({\n value: \"112039\",\n meaning: \"Tracking Identifier\",\n schemeDesignator: \"DCM\"\n }),\n value: options.identifier,\n relationshipType: RelationshipTypes.HAS_OBS_CONTEXT\n });\n\n _this29.push(trackingIdentifierItem);\n }\n\n var trackingUIDItem = new UIDRefContentItem({\n name: new CodedConcept({\n value: \"112040\",\n meaning: \"Tracking Unique Identifier\",\n schemeDesignator: \"DCM\"\n }),\n value: options.uid,\n relationshipType: RelationshipTypes.HAS_OBS_CONTEXT\n });\n\n _this29.push(trackingUIDItem);\n\n return _this29;\n }\n\n return _createClass(TrackingIdentifier);\n}(Template);\n\nvar templates = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tAlgorithmIdentification: AlgorithmIdentification,\n\tDeviceObserverIdentifyingAttributes: DeviceObserverIdentifyingAttributes,\n\tImageLibrary: ImageLibrary,\n\tLanguageOfContentItemAndDescendants: LanguageOfContentItemAndDescendants,\n\tMeasurement: Measurement,\n\tMeasurementAndQualitativeEvaluationGroup: MeasurementAndQualitativeEvaluationGroup,\n\tMeasurementReport: MeasurementReport$3,\n\tMeasurementsDerivedFromMultipleROIMeasurements: MeasurementsDerivedFromMultipleROIMeasurements,\n\tObservationContext: ObservationContext,\n\tObserverContext: ObserverContext,\n\tPersonObserverIdentifyingAttributes: PersonObserverIdentifyingAttributes,\n\tPlanarROIMeasurementsAndQualitativeEvaluations: PlanarROIMeasurementsAndQualitativeEvaluations,\n\tROIMeasurements: ROIMeasurements,\n\tSubjectContext: SubjectContext,\n\tSubjectContextDevice: SubjectContextDevice,\n\tSubjectContextFetus: SubjectContextFetus,\n\tSubjectContextSpecimen: SubjectContextSpecimen,\n\tTimePointContext: TimePointContext,\n\tTrackingIdentifier: TrackingIdentifier,\n\tVolumetricROIMeasurementsAndQualitativeEvaluations: VolumetricROIMeasurementsAndQualitativeEvaluations\n});\n\nvar _attributesToInclude = [// Patient\n\"00080054\", \"00080100\", \"00080102\", \"00080103\", \"00080104\", \"00080105\", \"00080106\", \"00080107\", \"0008010B\", \"0008010D\", \"0008010F\", \"00080117\", \"00080118\", \"00080119\", \"00080120\", \"00080121\", \"00080122\", \"00081120\", \"00081150\", \"00081155\", \"00081160\", \"00081190\", \"00081199\", \"00100010\", \"00100020\", \"00100021\", \"00100022\", \"00100024\", \"00100026\", \"00100027\", \"00100028\", \"00100030\", \"00100032\", \"00100033\", \"00100034\", \"00100035\", \"00100040\", \"00100200\", \"00100212\", \"00100213\", \"00100214\", \"00100215\", \"00100216\", \"00100217\", \"00100218\", \"00100219\", \"00100221\", \"00100222\", \"00100223\", \"00100229\", \"00101001\", \"00101002\", \"00101100\", \"00102160\", \"00102201\", \"00102202\", \"00102292\", \"00102293\", \"00102294\", \"00102295\", \"00102296\", \"00102297\", \"00102298\", \"00102299\", \"00104000\", \"00120062\", \"00120063\", \"00120064\", \"0020000D\", \"00400031\", \"00400032\", \"00400033\", \"00400035\", \"00400036\", \"00400039\", \"0040003A\", \"0040E001\", \"0040E010\", \"0040E020\", \"0040E021\", \"0040E022\", \"0040E023\", \"0040E024\", \"0040E025\", \"0040E030\", \"0040E031\", \"0062000B\", \"00880130\", \"00880140\", // Patient Study\n\"00080100\", \"00080102\", \"00080103\", \"00080104\", \"00080105\", \"00080106\", \"00080107\", \"0008010B\", \"0008010D\", \"0008010F\", \"00080117\", \"00080118\", \"00080119\", \"00080120\", \"00080121\", \"00080122\", \"00081080\", \"00081084\", \"00101010\", \"00101020\", \"00101021\", \"00101022\", \"00101023\", \"00101024\", \"00101030\", \"00102000\", \"00102110\", \"00102180\", \"001021A0\", \"001021B0\", \"001021C0\", \"001021D0\", \"00102203\", \"00380010\", \"00380014\", \"00380060\", \"00380062\", \"00380064\", \"00380500\", \"00400031\", \"00400032\", \"00400033\", // General Study\n\"00080020\", \"00080030\", \"00080050\", \"00080051\", \"00080080\", \"00080081\", \"00080082\", \"00080090\", \"00080096\", \"0008009C\", \"0008009D\", \"00080100\", \"00080102\", \"00080103\", \"00080104\", \"00080105\", \"00080106\", \"00080107\", \"0008010B\", \"0008010D\", \"0008010F\", \"00080117\", \"00080118\", \"00080119\", \"00080120\", \"00080121\", \"00080122\", \"00081030\", \"00081032\", \"00081048\", \"00081049\", \"00081060\", \"00081062\", \"00081110\", \"00081150\", \"00081155\", \"0020000D\", \"00200010\", \"00321034\", \"00400031\", \"00400032\", \"00400033\", \"00401012\", \"00401101\", \"00401102\", \"00401103\", \"00401104\", // Clinical Trial Subject\n\"00120010\", \"00120020\", \"00120021\", \"00120030\", \"00120031\", \"00120040\", \"00120042\", \"00120081\", \"00120082\", // Clinical Trial Study\n\"00120020\", \"00120050\", \"00120051\", \"00120052\", \"00120053\", \"00120083\", \"00120084\", \"00120085\"];\n\nvar Comprehensive3DSR = /*#__PURE__*/_createClass(function Comprehensive3DSR(options) {\n var _this = this;\n\n _classCallCheck(this, Comprehensive3DSR);\n\n if (options.evidence === undefined) {\n throw new Error(\"Option 'evidence' is required for Comprehensive3DSR.\");\n }\n\n if (!(_typeof(options.evidence) === \"object\" || options.evidence instanceof Array)) {\n throw new Error(\"Option 'evidence' must have type Array.\");\n }\n\n if (options.evidence.length === 0) {\n throw new Error(\"Option 'evidence' must have non-zero length.\");\n }\n\n if (options.content === undefined) {\n throw new Error(\"Option 'content' is required for Comprehensive3DSR.\");\n }\n\n if (options.seriesInstanceUID === undefined) {\n throw new Error(\"Option 'seriesInstanceUID' is required for Comprehensive3DSR.\");\n }\n\n if (options.seriesNumber === undefined) {\n throw new Error(\"Option 'seriesNumber' is required for Comprehensive3DSR.\");\n }\n\n if (options.seriesDescription === undefined) {\n throw new Error(\"Option 'seriesDescription' is required for Comprehensive3DSR.\");\n }\n\n if (options.sopInstanceUID === undefined) {\n throw new Error(\"Option 'sopInstanceUID' is required for Comprehensive3DSR.\");\n }\n\n if (options.instanceNumber === undefined) {\n throw new Error(\"Option 'instanceNumber' is required for Comprehensive3DSR.\");\n }\n\n if (options.manufacturer === undefined) {\n throw new Error(\"Option 'manufacturer' is required for Comprehensive3DSR.\");\n }\n\n this.SOPClassUID = \"1.2.840.10008.5.1.4.1.1.88.34\";\n this.SOPInstanceUID = options.sopInstanceUID;\n this.Modality = \"SR\";\n this.SeriesDescription = options.seriesDescription;\n this.SeriesInstanceUID = options.seriesInstanceUID;\n this.SeriesNumber = options.seriesNumber;\n this.InstanceNumber = options.instanceNumber;\n this.Manufacturer = options.manufacturer;\n\n if (options.institutionName !== undefined) {\n this.InstitutionName = options.institutionName;\n\n if (options.institutionalDepartmentName !== undefined) {\n this.InstitutionalDepartmentName = options.institutionDepartmentName;\n }\n }\n\n if (options.isComplete) {\n this.CompletionFlag = \"COMPLETE\";\n } else {\n this.CompletionFlag = \"PARTIAL\";\n }\n\n if (options.isVerified) {\n if (options.verifyingObserverName === undefined) {\n throw new Error(\"Verifying Observer Name must be specified if SR document \" + \"has been verified.\");\n }\n\n if (options.verifyingOrganization === undefined) {\n throw new Error(\"Verifying Organization must be specified if SR document \" + \"has been verified.\");\n }\n\n this.VerificationFlag = \"VERIFIED\";\n var ovserver_item = {};\n ovserver_item.VerifyingObserverName = options.verifyingObserverName;\n ovserver_item.VerifyingOrganization = options.verifyingOrganization;\n ovserver_item.VerificationDateTime = DicomMetaDictionary.dateTime();\n this.VerifyingObserverSequence = [observer_item];\n } else {\n this.VerificationFlag = \"UNVERIFIED\";\n }\n\n if (options.isFinal) {\n this.PreliminaryFlag = \"FINAL\";\n } else {\n this.PreliminaryFlag = \"PRELIMINARY\";\n }\n\n this.ContentDate = DicomMetaDictionary.date();\n this.ContentTime = DicomMetaDictionary.time();\n Object.keys(options.content).forEach(function (keyword) {\n _this[keyword] = options.content[keyword];\n });\n var evidenceCollection = {};\n options.evidence.forEach(function (evidence) {\n if (evidence.StudyInstanceUID !== options.evidence[0].StudyInstanceUID) {\n throw new Error(\"Referenced data sets must all belong to the same study.\");\n }\n\n if (!(evidence.SeriesInstanceUID in evidenceCollection)) {\n evidenceCollection[evidence.SeriesInstanceUID] = [];\n }\n\n var instanceItem = {};\n instanceItem.ReferencedSOPClassUID = evidence.SOPClassUID;\n instanceItem.ReferencedSOPInstanceUID = evidence.SOPInstanceUID;\n evidenceCollection[evidence.SeriesInstanceUID].push(instanceItem);\n });\n var evidenceStudyItem = {};\n evidenceStudyItem.StudyInstanceUID = options.evidence[0].StudyInstanceUID;\n evidenceStudyItem.ReferencedSeriesSequence = [];\n Object.keys(evidenceCollection).forEach(function (seriesInstanceUID) {\n var seriesItem = {};\n seriesItem.SeriesInstanceUID = seriesInstanceUID;\n seriesItem.ReferencedSOPSequence = evidenceCollection[seriesInstanceUID];\n evidenceStudyItem.ReferencedSeriesSequence.push(seriesItem);\n });\n\n if (options.requestedProcedures !== undefined) {\n if (!(_typeof(options.requestedProcedures) === \"object\" || options.requestedProcedures instanceof Array)) {\n throw new Error(\"Option 'requestedProcedures' must have type Array.\");\n }\n\n this.ReferencedRequestSequence = _construct(ContentSequence, _toConsumableArray(options.requestedProcedures));\n this.CurrentRequestedProcedureEvidenceSequence = [evidenceStudyItem];\n } else {\n this.PertinentOtherEvidenceSequence = [evidenceStudyItem];\n }\n\n if (options.previousVersions !== undefined) {\n var preCollection = {};\n options.previousVersions.forEach(function (version) {\n if (version.StudyInstanceUID != options.evidence[0].StudyInstanceUID) {\n throw new Error(\"Previous version data sets must belong to the same study.\");\n }\n\n var instanceItem = {};\n instanceItem.ReferencedSOPClassUID = version.SOPClassUID;\n instanceItem.ReferencedSOPInstanceUID = version.SOPInstanceUID;\n preCollection[version.SeriesInstanceUID].push(instanceItem);\n });\n var preStudyItem = {};\n preStudyItem.StudyInstanceUID = options.previousVersions[0].StudyInstanceUID;\n preStudyItem.ReferencedSeriesSequence = [];\n Object.keys(preCollection).forEach(function (seriesInstanceUID) {\n var seriesItem = {};\n seriesItem.SeriesInstanceUID = seriesInstanceUID;\n seriesItem.ReferencedSOPSequence = preCollection[seriesInstanceUID];\n preStudyItem.ReferencedSeriesSequence.push(seriesItem);\n });\n this.PredecessorDocumentsSequence = [preStudyItem];\n }\n\n if (options.performedProcedureCodes !== undefined) {\n if (!(_typeof(options.performedProcedureCodes) === \"object\" || options.performedProcedureCodes instanceof Array)) {\n throw new Error(\"Option 'performedProcedureCodes' must have type Array.\");\n }\n\n this.PerformedProcedureCodeSequence = _construct(ContentSequence, _toConsumableArray(options.performedProcedureCodes));\n } else {\n this.PerformedProcedureCodeSequence = [];\n }\n\n this.ReferencedPerformedProcedureStepSequence = [];\n\n _attributesToInclude.forEach(function (tag) {\n var key = DicomMetaDictionary.punctuateTag(tag);\n var element = DicomMetaDictionary.dictionary[key];\n\n if (element !== undefined) {\n var keyword = element.name;\n var value = options.evidence[0][keyword];\n\n if (value !== undefined) {\n _this[keyword] = value;\n }\n }\n });\n});\n\nvar documents = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tComprehensive3DSR: Comprehensive3DSR\n});\n\nvar sr = {\n coding: coding,\n contentItems: contentItems,\n documents: documents,\n templates: templates,\n valueTypes: valueTypes\n};\n\nvar tagNamesToEmpty = [// please override these in specificReplaceDefaults to have useful values\n\"PatientID\", \"PatientName\", // 0/3: those that appear missing in CTP\n\"SeriesDate\", \"AccessionNumber\", // (valuable, but sometimes manually filled)\n\"SeriesDescription\", // cat 1/3: CTP: set to empty explicitely using @empty\n\"StudyTime\", \"ContentTime\", \"ReferringPhysicianName\", \"PatientBirthDate\", \"PatientSex\", \"ClinicalTrialSiteID\", \"ClinicalTrialSiteName\", \"ClinicalTrialSubjectID\", \"ClinicalTrialSubjectReadingID\", \"ClinicalTrialTimePointID\", \"ClinicalTrialTimePointDescription\", \"ContrastBolusAgent\", \"StudyID\", // cat 2/3: CTP: set to increment dates\n\"InstanceCreationDate\", \"StudyDate\", \"ContentDate\", \"DateOfSecondaryCapture\", \"DateOfLastCalibration\", \"DateOfLastDetectorCalibration\", \"FrameAcquisitionDatetime\", \"FrameReferenceDatetime\", \"StudyVerifiedDate\", \"StudyReadDate\", \"ScheduledStudyStartDate\", \"ScheduledStudyStopDate\", \"StudyArrivalDate\", \"StudyCompletionDate\", \"ScheduledAdmissionDate\", \"ScheduledDischargeDate\", \"DischargeDate\", \"SPSStartDate\", \"SPSEndDate\", \"PPSStartDate\", \"PPSEndDate\", \"IssueDateOfImagingServiceRequest\", \"VerificationDateTime\", \"ObservationDateTime\", \"DateTime\", \"Date\", \"RefDatetime\", // cat 3/3: CTP: set to remove using @remove\n\"AcquisitionDate\", \"OverlayDate\", \"CurveDate\", \"AcquisitionDatetime\", \"SeriesTime\", \"AcquisitionTime\", \"OverlayTime\", \"CurveTime\", \"InstitutionName\", \"InstitutionAddress\", \"ReferringPhysicianAddress\", \"ReferringPhysicianPhoneNumbers\", \"ReferringPhysiciansIDSeq\", \"TimezoneOffsetFromUTC\", \"StationName\", \"StudyDescription\", \"InstitutionalDepartmentName\", \"PhysicianOfRecord\", \"PhysicianOfRecordIdSeq\", \"PerformingPhysicianName\", \"PerformingPhysicianIdSeq\", \"NameOfPhysicianReadingStudy\", \"PhysicianReadingStudyIdSeq\", \"OperatorName\", \"OperatorsIdentificationSeq\", \"AdmittingDiagnosisDescription\", \"AdmittingDiagnosisCodeSeq\", \"RefStudySeq\", \"RefPPSSeq\", \"RefPatientSeq\", \"RefImageSeq\", \"DerivationDescription\", \"SourceImageSeq\", \"IdentifyingComments\", \"IssuerOfPatientID\", \"PatientBirthTime\", \"PatientInsurancePlanCodeSeq\", \"PatientPrimaryLanguageCodeSeq\", \"PatientPrimaryLanguageModifierCodeSeq\", \"OtherPatientIDs\", \"OtherPatientNames\", \"OtherPatientIDsSeq\", \"PatientBirthName\", \"PatientAge\", \"PatientSize\", \"PatientWeight\", \"PatientAddress\", \"InsurancePlanIdentification\", \"PatientMotherBirthName\", \"MilitaryRank\", \"BranchOfService\", \"MedicalRecordLocator\", \"MedicalAlerts\", \"ContrastAllergies\", \"CountryOfResidence\", \"RegionOfResidence\", \"PatientPhoneNumbers\", \"EthnicGroup\", \"Occupation\", \"SmokingStatus\", \"AdditionalPatientHistory\", \"PregnancyStatus\", \"LastMenstrualDate\", \"PatientReligiousPreference\", \"PatientSexNeutered\", \"ResponsiblePerson\", \"ResponsibleOrganization\", \"PatientComments\", \"DeviceSerialNumber\", \"PlateID\", \"GeneratorID\", \"CassetteID\", \"GantryID\", // we keep - should be SoftwareVersions anyway\n// \"SoftwareVersion\",\n\"ProtocolName\", \"AcquisitionDeviceProcessingDescription\", \"AcquisitionComments\", \"DetectorID\", \"AcquisitionProtocolDescription\", \"ContributionDescription\", \"ModifyingDeviceID\", \"ModifyingDeviceManufacturer\", \"ModifiedImageDescription\", \"ImageComments\", \"ImagePresentationComments\", \"StudyIDIssuer\", \"ScheduledStudyLocation\", \"ScheduledStudyLocationAET\", \"ReasonforStudy\", \"RequestingPhysician\", \"RequestingService\", \"RequestedProcedureDescription\", \"RequestedContrastAgent\", \"StudyComments\", \"AdmissionID\", \"IssuerOfAdmissionID\", \"ScheduledPatientInstitutionResidence\", \"AdmittingDate\", \"AdmittingTime\", \"DischargeDiagnosisDescription\", \"SpecialNeeds\", \"ServiceEpisodeID\", \"IssuerOfServiceEpisodeId\", \"ServiceEpisodeDescription\", \"CurrentPatientLocation\", \"PatientInstitutionResidence\", \"PatientState\", \"ReferencedPatientAliasSeq\", \"VisitComments\", \"ScheduledStationAET\", \"ScheduledPerformingPhysicianName\", \"SPSDescription\", \"ScheduledStationName\", \"SPSLocation\", \"PreMedication\", \"PerformedStationAET\", \"PerformedStationName\", \"PerformedLocation\", \"PerformedStationNameCodeSeq\", \"PPSID\", \"PPSDescription\", \"RequestAttributesSeq\", \"PPSComments\", \"AcquisitionContextSeq\", \"PatientTransportArrangements\", \"RequestedProcedureLocation\", \"NamesOfIntendedRecipientsOfResults\", \"IntendedRecipientsOfResultsIDSequence\", \"PersonAddress\", \"PersonTelephoneNumbers\", \"RequestedProcedureComments\", \"ReasonForTheImagingServiceRequest\", \"OrderEnteredBy\", \"OrderEntererLocation\", \"OrderCallbackPhoneNumber\", \"ImagingServiceRequestComments\", \"ConfidentialityPatientData\", \"ScheduledStationNameCodeSeq\", \"ScheduledStationGeographicLocCodeSeq\", \"PerformedStationGeoLocCodeSeq\", \"ScheduledHumanPerformersSeq\", \"ActualHumanPerformersSequence\", \"HumanPerformersOrganization\", \"HumanPerformersName\", \"VerifyingOrganization\", \"VerifyingObserverName\", \"AuthorObserverSequence\", \"ParticipantSequence\", \"CustodialOrganizationSeq\", \"VerifyingObserverIdentificationCodeSeq\", \"PersonName\", \"ContentSeq\", \"OverlayData\", \"OverlayComments\", \"IconImageSequence\", \"TopicSubject\", \"TopicAuthor\", \"TopicKeyWords\", \"TextString\", \"Arbitrary\", \"TextComments\", \"ResultsIDIssuer\", \"InterpretationRecorder\", \"InterpretationTranscriber\", \"InterpretationText\", \"InterpretationAuthor\", \"InterpretationApproverSequence\", \"PhysicianApprovingInterpretation\", \"InterpretationDiagnosisDescription\", \"ResultsDistributionListSeq\", \"DistributionName\", \"DistributionAddress\", \"InterpretationIdIssuer\", \"Impressions\", \"ResultComments\", \"DigitalSignaturesSeq\", \"DataSetTrailingPadding\"];\nfunction getTagsNameToEmpty() {\n return [].concat(tagNamesToEmpty);\n}\nfunction cleanTags(dict) {\n var tagNamesToReplace = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n var customTagNamesToEmpty = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;\n\n if (tagNamesToReplace == undefined) {\n tagNamesToReplace = {\n \"00100010\": \"ANON^PATIENT\",\n \"00100020\": \"ANON^ID\"\n };\n }\n\n var tags = customTagNamesToEmpty != undefined ? customTagNamesToEmpty : tagNamesToEmpty;\n tags.forEach(function (tag) {\n var tagInfo = DicomMetaDictionary.nameMap[tag];\n\n if (tagInfo && tagInfo.version != \"PrivateTag\") {\n var tagNumber = tagInfo.tag,\n tagString = Tag.fromPString(tagNumber).toCleanString();\n\n if (dict[tagString]) {\n var newValue;\n\n if (tagString in tagNamesToReplace) {\n newValue = [tagNamesToReplace[tagString]];\n } else {\n newValue = [];\n }\n\n dict[tagString].Value = newValue;\n }\n }\n });\n}\n\n// Data\nvar data = {\n BitArray: BitArray,\n ReadBufferStream: ReadBufferStream,\n DeflatedReadBufferStream: DeflatedReadBufferStream,\n WriteBufferStream: WriteBufferStream,\n DicomDict: DicomDict,\n DicomMessage: DicomMessage,\n DicomMetaDictionary: DicomMetaDictionary,\n Tag: Tag,\n ValueRepresentation: ValueRepresentation,\n Colors: Colors,\n datasetToDict: datasetToDict,\n datasetToBuffer: datasetToBuffer,\n datasetToBlob: datasetToBlob\n};\nvar derivations = {\n DerivedDataset: DerivedDataset,\n DerivedPixels: DerivedPixels,\n DerivedImage: DerivedImage,\n Segmentation: Segmentation,\n StructuredReport: StructuredReport,\n ParametricMap: ParametricMap\n};\nvar normalizers = {\n Normalizer: Normalizer,\n ImageNormalizer: ImageNormalizer,\n MRImageNormalizer: MRImageNormalizer,\n EnhancedMRImageNormalizer: EnhancedMRImageNormalizer,\n EnhancedUSVolumeNormalizer: EnhancedUSVolumeNormalizer,\n CTImageNormalizer: CTImageNormalizer,\n PETImageNormalizer: PETImageNormalizer,\n SEGImageNormalizer: SEGImageNormalizer,\n DSRNormalizer: DSRNormalizer\n};\nvar anonymizer = {\n cleanTags: cleanTags,\n getTagsNameToEmpty: getTagsNameToEmpty\n};\nvar dcmjs = {\n DICOMWEB: DICOMWEB,\n adapters: adapters,\n data: data,\n derivations: derivations,\n normalizers: normalizers,\n sr: sr,\n utilities: utilities,\n log: log,\n anonymizer: anonymizer\n};\n\nexport default dcmjs;\nexport { DICOMWEB, adapters, anonymizer, data, derivations, log, normalizers, sr, utilities };\n//# sourceMappingURL=dcmjs.es.js.map\n","'use strict';\nvar token = '%[a-f0-9]{2}';\nvar singleMatcher = new RegExp(token, 'gi');\nvar multiMatcher = new RegExp('(' + token + ')+', 'gi');\n\nfunction decodeComponents(components, split) {\n\ttry {\n\t\t// Try to decode the entire string first\n\t\treturn decodeURIComponent(components.join(''));\n\t} catch (err) {\n\t\t// Do nothing\n\t}\n\n\tif (components.length === 1) {\n\t\treturn components;\n\t}\n\n\tsplit = split || 1;\n\n\t// Split the array in 2 parts\n\tvar left = components.slice(0, split);\n\tvar right = components.slice(split);\n\n\treturn Array.prototype.concat.call([], decodeComponents(left), decodeComponents(right));\n}\n\nfunction decode(input) {\n\ttry {\n\t\treturn decodeURIComponent(input);\n\t} catch (err) {\n\t\tvar tokens = input.match(singleMatcher);\n\n\t\tfor (var i = 1; i < tokens.length; i++) {\n\t\t\tinput = decodeComponents(tokens, i).join('');\n\n\t\t\ttokens = input.match(singleMatcher);\n\t\t}\n\n\t\treturn input;\n\t}\n}\n\nfunction customDecodeURIComponent(input) {\n\t// Keep track of all the replacements and prefill the map with the `BOM`\n\tvar replaceMap = {\n\t\t'%FE%FF': '\\uFFFD\\uFFFD',\n\t\t'%FF%FE': '\\uFFFD\\uFFFD'\n\t};\n\n\tvar match = multiMatcher.exec(input);\n\twhile (match) {\n\t\ttry {\n\t\t\t// Decode as big chunks as possible\n\t\t\treplaceMap[match[0]] = decodeURIComponent(match[0]);\n\t\t} catch (err) {\n\t\t\tvar result = decode(match[0]);\n\n\t\t\tif (result !== match[0]) {\n\t\t\t\treplaceMap[match[0]] = result;\n\t\t\t}\n\t\t}\n\n\t\tmatch = multiMatcher.exec(input);\n\t}\n\n\t// Add `%C2` at the end of the map to make sure it does not replace the combinator before everything else\n\treplaceMap['%C2'] = '\\uFFFD';\n\n\tvar entries = Object.keys(replaceMap);\n\n\tfor (var i = 0; i < entries.length; i++) {\n\t\t// Replace all decoded components\n\t\tvar key = entries[i];\n\t\tinput = input.replace(new RegExp(key, 'g'), replaceMap[key]);\n\t}\n\n\treturn input;\n}\n\nmodule.exports = function (encodedURI) {\n\tif (typeof encodedURI !== 'string') {\n\t\tthrow new TypeError('Expected `encodedURI` to be of type `string`, got `' + typeof encodedURI + '`');\n\t}\n\n\ttry {\n\t\tencodedURI = encodedURI.replace(/\\+/g, ' ');\n\n\t\t// Try the built in decoder first\n\t\treturn decodeURIComponent(encodedURI);\n\t} catch (err) {\n\t\t// Fallback to a more advanced decoder\n\t\treturn customDecodeURIComponent(encodedURI);\n\t}\n};\n","'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn target.propertyIsEnumerable(symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n","'use strict';\n\nvar keys = require('object-keys');\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar hasPropertyDescriptors = require('has-property-descriptors')();\n\nvar supportsDescriptors = origDefineProperty && hasPropertyDescriptors;\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value; // eslint-disable-line no-param-reassign\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n","/*! dicom-parser - 1.8.12 - 2022-02-07 | (c) 2017 Chris Hafey | https://github.com/cornerstonejs/dicomParser */\n!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t(require(\"zlib\")):\"function\"==typeof define&&define.amd?define(\"dicom-parser\",[\"zlib\"],t):\"object\"==typeof exports?exports[\"dicom-parser\"]=t(require(\"zlib\")):e.dicomParser=t(e.zlib)}(this,function(r){return a=[function(e,t){e.exports=r},function(e,t,s){\"use strict\";s.r(t),s.d(t,\"isStringVr\",function(){return d}),s.d(t,\"isPrivateTag\",function(){return f}),s.d(t,\"parsePN\",function(){return a}),s.d(t,\"parseTM\",function(){return n}),s.d(t,\"parseDA\",function(){return o}),s.d(t,\"explicitElementToString\",function(){return l}),s.d(t,\"explicitDataSetToJS\",function(){return u}),s.d(t,\"createJPEGBasicOffsetTable\",function(){return p}),s.d(t,\"parseDicomDataSetExplicit\",function(){return q}),s.d(t,\"parseDicomDataSetImplicit\",function(){return T}),s.d(t,\"readFixedString\",function(){return b}),s.d(t,\"alloc\",function(){return k}),s.d(t,\"version\",function(){return L}),s.d(t,\"bigEndianByteArrayParser\",function(){return N}),s.d(t,\"ByteStream\",function(){return J}),s.d(t,\"sharedCopy\",function(){return j}),s.d(t,\"DataSet\",function(){return w}),s.d(t,\"findAndSetUNElementLength\",function(){return y}),s.d(t,\"findEndOfEncapsulatedElement\",function(){return g}),s.d(t,\"findItemDelimitationItemAndSetElementLength\",function(){return x}),s.d(t,\"littleEndianByteArrayParser\",function(){return M}),s.d(t,\"parseDicom\",function(){return V}),s.d(t,\"readDicomElementExplicit\",function(){return B}),s.d(t,\"readDicomElementImplicit\",function(){return A}),s.d(t,\"readEncapsulatedImageFrame\",function(){return W}),s.d(t,\"readEncapsulatedPixelData\",function(){return K}),s.d(t,\"readEncapsulatedPixelDataFromFragments\",function(){return _}),s.d(t,\"readPart10Header\",function(){return G}),s.d(t,\"readSequenceItemsExplicit\",function(){return I}),s.d(t,\"readSequenceItemsImplicit\",function(){return F}),s.d(t,\"readSequenceItem\",function(){return S}),s.d(t,\"readTag\",function(){return h});var r={AE:!0,AS:!0,AT:!1,CS:!0,DA:!0,DS:!0,DT:!0,FL:!1,FD:!1,IS:!0,LO:!0,LT:!0,OB:!1,OD:!1,OF:!1,OW:!1,PN:!0,SH:!0,SL:!1,SQ:!1,SS:!1,ST:!0,TM:!0,UI:!0,UL:!1,UN:void 0,UR:!0,US:!1,UT:!0},d=function(e){return r[e]},f=function(e){return parseInt(e[4],10)%2==1},a=function(e){if(void 0!==e){e=e.split(\"^\");return{familyName:e[0],givenName:e[1],middleName:e[2],prefix:e[3],suffix:e[4]}}};function n(e,t){if(2<=e.length){var r=parseInt(e.substring(0,2),10),a=4<=e.length?parseInt(e.substring(2,4),10):void 0,n=6<=e.length?parseInt(e.substring(4,6),10):void 0,i=8<=e.length?e.substring(7,13):void 0,i=i?parseInt(i,10)*Math.pow(10,6-i.length):void 0;if(t&&(isNaN(r)||void 0!==a&&isNaN(a)||void 0!==n&&isNaN(n)||void 0!==i&&isNaN(i)||r<0||23e.byteArray.length-e.position&&(d=e.byteArray.length-e.position),t.fragments.push({offset:e.position-o-8,position:e.position,length:d}),e.seek(d),void(t.length=e.position-t.dataOffset);t.fragments.push({offset:e.position-o-8,position:e.position,length:d}),e.seek(d)}r&&r.push(\"pixel data element \".concat(t.tag,\" missing sequence delimiter tag xfffee0dd\"))}function y(e,t){if(void 0===e)throw\"dicomParser.findAndSetUNElementLength: missing required parameter 'byteStream'\";for(var r=e.byteArray.length-8;e.position<=r;)if(65534===e.readUint16()){var a=e.readUint16();if(57565===a)return 0!==e.readUint32()&&e.warnings(\"encountered non zero length following item delimiter at position \".concat(e.position-4,\" while reading element of undefined length with tag \").concat(t.tag)),void(t.length=e.position-t.dataOffset)}t.length=e.byteArray.length-t.dataOffset,e.seek(e.byteArray.length-e.position)}function b(e,t,r){if(r<0)throw\"dicomParser.readFixedString - length cannot be less than 0\";if(t+r>e.length)throw\"dicomParser.readFixedString: attempt to read past end of buffer\";for(var a,n=\"\",i=0;it.byteArray.length)throw\"dicomParser.parseDicomDataSetExplicit: invalid value for parameter 'maxP osition'\";for(var n=e.elements;t.positionr)throw\"dicomParser:parseDicomDataSetExplicit: buffer overrun\"}function T(e,t,r){var a=3t.byteArray.length)throw\"dicomParser.parseDicomDataSetImplicit: invalid value for parameter 'maxPosition'\";for(var n=e.elements;t.positione.length)throw\"bigEndianByteArrayParser.readUint16: attempt to read past end of buffer\";return(e[t]<<8)+e[t+1]},readInt16:function(e,t){if(t<0)throw\"bigEndianByteArrayParser.readInt16: position cannot be less than 0\";if(t+2>e.length)throw\"bigEndianByteArrayParser.readInt16: attempt to read past end of buffer\";t=(e[t]<<8)+e[t+1];return t=32768&t?t-65535-1:t},readUint32:function(e,t){if(t<0)throw\"bigEndianByteArrayParser.readUint32: position cannot be less than 0\";if(t+4>e.length)throw\"bigEndianByteArrayParser.readUint32: attempt to read past end of buffer\";return 256*(256*(256*e[t]+e[t+1])+e[t+2])+e[t+3]},readInt32:function(e,t){if(t<0)throw\"bigEndianByteArrayParser.readInt32: position cannot be less than 0\";if(t+4>e.length)throw\"bigEndianByteArrayParser.readInt32: attempt to read past end of buffer\";return(e[t]<<24)+(e[t+1]<<16)+(e[t+2]<<8)+e[t+3]},readFloat:function(e,t){if(t<0)throw\"bigEndianByteArrayParser.readFloat: position cannot be less than 0\";if(t+4>e.length)throw\"bigEndianByteArrayParser.readFloat: attempt to read past end of buffer\";var r=new Uint8Array(4);return r[3]=e[t],r[2]=e[t+1],r[1]=e[t+2],r[0]=e[t+3],new Float32Array(r.buffer)[0]},readDouble:function(e,t){if(t<0)throw\"bigEndianByteArrayParser.readDouble: position cannot be less than 0\";if(t+8>e.length)throw\"bigEndianByteArrayParser.readDouble: attempt to read past end of buffer\";var r=new Uint8Array(8);return r[7]=e[t],r[6]=e[t+1],r[5]=e[t+2],r[4]=e[t+3],r[3]=e[t+4],r[2]=e[t+5],r[1]=e[t+6],r[0]=e[t+7],new Float64Array(r.buffer)[0]}};function j(e,t,r){if(\"undefined\"!=typeof Buffer&&e instanceof Buffer)return e.slice(t,t+r);if(e instanceof Uint8Array)return new Uint8Array(e.buffer,e.byteOffset+t,r);throw\"dicomParser.from: unknown type for byteArray\"}function C(e,t){for(var r=0;r=t.length)throw\"dicomParser.ByteStream: parameter 'position' cannot be greater than or equal to 'byteArray' length\";this.byteArrayParser=e,this.byteArray=t,this.position=r||0,this.warnings=[]}var e,t,r;return e=a,(t=[{key:\"seek\",value:function(e){if(this.position+e<0)throw\"dicomParser.ByteStream.prototype.seek: cannot seek to position < 0\";this.position+=e}},{key:\"readByteStream\",value:function(e){if(this.position+e>this.byteArray.length)throw\"dicomParser.ByteStream.prototype.readByteStream: readByteStream - buffer overread\";var t=j(this.byteArray,this.position,e);return this.position+=e,new a(this.byteArrayParser,t)}},{key:\"getSize\",value:function(){return this.byteArray.length}},{key:\"readUint16\",value:function(){var e=this.byteArrayParser.readUint16(this.byteArray,this.position);return this.position+=2,e}},{key:\"readUint32\",value:function(){var e=this.byteArrayParser.readUint32(this.byteArray,this.position);return this.position+=4,e}},{key:\"readFixedString\",value:function(e){var t=b(this.byteArray,this.position,e);return this.position+=e,t}}])&&C(e.prototype,t),r&&C(e,r),Object.defineProperty(e,\"prototype\",{writable:!1}),a}(),M={readUint16:function(e,t){if(t<0)throw\"littleEndianByteArrayParser.readUint16: position cannot be less than 0\";if(t+2>e.length)throw\"littleEndianByteArrayParser.readUint16: attempt to read past end of buffer\";return e[t]+256*e[t+1]},readInt16:function(e,t){if(t<0)throw\"littleEndianByteArrayParser.readInt16: position cannot be less than 0\";if(t+2>e.length)throw\"littleEndianByteArrayParser.readInt16: attempt to read past end of buffer\";t=e[t]+(e[t+1]<<8);return t=32768&t?t-65535-1:t},readUint32:function(e,t){if(t<0)throw\"littleEndianByteArrayParser.readUint32: position cannot be less than 0\";if(t+4>e.length)throw\"littleEndianByteArrayParser.readUint32: attempt to read past end of buffer\";return e[t]+256*e[t+1]+256*e[t+2]*256+256*e[t+3]*256*256},readInt32:function(e,t){if(t<0)throw\"littleEndianByteArrayParser.readInt32: position cannot be less than 0\";if(t+4>e.length)throw\"littleEndianByteArrayParser.readInt32: attempt to read past end of buffer\";return e[t]+(e[t+1]<<8)+(e[t+2]<<16)+(e[t+3]<<24)},readFloat:function(e,t){if(t<0)throw\"littleEndianByteArrayParser.readFloat: position cannot be less than 0\";if(t+4>e.length)throw\"littleEndianByteArrayParser.readFloat: attempt to read past end of buffer\";var r=new Uint8Array(4);return r[0]=e[t],r[1]=e[t+1],r[2]=e[t+2],r[3]=e[t+3],new Float32Array(r.buffer)[0]},readDouble:function(e,t){if(t<0)throw\"littleEndianByteArrayParser.readDouble: position cannot be less than 0\";if(t+8>e.length)throw\"littleEndianByteArrayParser.readDouble: attempt to read past end of buffer\";var r=new Uint8Array(8);return r[0]=e[t],r[1]=e[t+1],r[2]=e[t+2],r[3]=e[t+3],r[4]=e[t+4],r[5]=e[t+5],r[6]=e[t+6],r[7]=e[t+7],new Float64Array(r.buffer)[0]}};function G(e){var i=1= 0\";if(r>=t.fragments.length)throw\"dicomParser.readEncapsulatedPixelDataFromFragments: parameter 'startFragmentIndex' must be < number of fragments\";if(a<1)throw\"dicomParser.readEncapsulatedPixelDataFromFragments: parameter 'numFragments' must be > 0\";if(r+a>t.fragments.length)throw\"dicomParser.readEncapsulatedPixelDataFromFragments: parameter 'startFragment' + 'numFragments' < number of fragments\";var i=new J(e.byteArrayParser,e.byteArray,t.dataOffset),t=S(i);if(\"xfffee000\"!==t.tag)throw\"dicomParser.readEncapsulatedPixelData: missing basic offset table xfffee000\";i.seek(t.length);var o=i.position;if(1===a)return j(i.byteArray,o+n[r].offset+8,n[r].length);for(var t=R(n,r,a),s=k(i.byteArray,t),d=0,f=r;f= 0\";if(r>=a.length)throw\"dicomParser.readEncapsulatedImageFrame: parameter 'frameIndex' must be < basicOffsetTable.length\";var i=a[r],i=H(n,i);if(void 0===i)throw\"dicomParser.readEncapsulatedImageFrame: unable to find fragment that matches basic offset table entry\";return _(e,t,i,Q(r,a,n,i),n)}var $=!1;function K(e,t,r){if($||($=!0,console&&console.log&&console.log(\"WARNING: dicomParser.readEncapsulatedPixelData() has been deprecated\")),void 0===e)throw\"dicomParser.readEncapsulatedPixelData: missing required parameter 'dataSet'\";if(void 0===t)throw\"dicomParser.readEncapsulatedPixelData: missing required parameter 'element'\";if(void 0===r)throw\"dicomParser.readEncapsulatedPixelData: missing required parameter 'frame'\";if(\"x7fe00010\"!==t.tag)throw\"dicomParser.readEncapsulatedPixelData: parameter 'element' refers to non pixel data tag (expected tag = x7fe00010)\";if(!0!==t.encapsulatedPixelData)throw\"dicomParser.readEncapsulatedPixelData: parameter 'element' refers to pixel data element that does not have encapsulated pixel data\";if(!0!==t.hadUndefinedLength)throw\"dicomParser.readEncapsulatedPixelData: parameter 'element' refers to pixel data element that does not have encapsulated pixel data\";if(void 0===t.basicOffsetTable)throw\"dicomParser.readEncapsulatedPixelData: parameter 'element' refers to pixel data element that does not have encapsulated pixel data\";if(void 0===t.fragments)throw\"dicomParser.readEncapsulatedPixelData: parameter 'element' refers to pixel data element that does not have encapsulated pixel data\";if(r<0)throw\"dicomParser.readEncapsulatedPixelData: parameter 'frame' must be >= 0\";return 0!==t.basicOffsetTable.length?W(e,t,r):_(e,t,0,t.fragments.length)}t.default={isStringVr:d,isPrivateTag:f,parsePN:a,parseTM:n,parseDA:o,explicitElementToString:l,explicitDataSetToJS:u,createJPEGBasicOffsetTable:p,parseDicomDataSetExplicit:q,parseDicomDataSetImplicit:T,readFixedString:b,alloc:k,version:L,bigEndianByteArrayParser:N,ByteStream:J,sharedCopy:j,DataSet:w,findAndSetUNElementLength:y,findEndOfEncapsulatedElement:g,findItemDelimitationItemAndSetElementLength:x,littleEndianByteArrayParser:M,parseDicom:V,readDicomElementExplicit:B,readDicomElementImplicit:A,readEncapsulatedImageFrame:W,readEncapsulatedPixelData:K,readEncapsulatedPixelDataFromFragments:_,readPart10Header:G,readSequenceItemsExplicit:I,readSequenceItemsImplicit:F,readSequenceItem:S,readTag:h,LEI:\"1.2.840.10008.1.2\",LEE:\"1.2.840.10008.1.2.1\"}}],i={},n.m=a,n.c=i,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var a in t)n.d(r,a,function(e){return t[e]}.bind(null,a));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,\"a\",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=\"\",n(n.s=1);function n(e){if(i[e])return i[e].exports;var t=i[e]={i:e,l:!1,exports:{}};return a[e].call(t.exports,t,t.exports,n),t.l=!0,t.exports}var a,i});\n//# sourceMappingURL=dicomParser.min.js.map","'use strict';\n\nmodule.exports = function contains(other) {\n\tif (arguments.length < 1) {\n\t\tthrow new TypeError('1 argument is required');\n\t}\n\tif (typeof other !== 'object') {\n\t\tthrow new TypeError('Argument 1 (”other“) to Node.contains must be an instance of Node');\n\t}\n\n\tvar node = other;\n\tdo {\n\t\tif (this === node) {\n\t\t\treturn true;\n\t\t}\n\t\tif (node) {\n\t\t\tnode = node.parentNode;\n\t\t}\n\t} while (node);\n\n\treturn false;\n};\n","'use strict';\n\nvar define = require('define-properties');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar polyfill = getPolyfill();\nvar shim = require('./shim');\n\nvar boundContains = function contains(node, other) {\n\treturn polyfill.apply(node, [other]);\n};\n\ndefine(boundContains, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = boundContains;\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = function getPolyfill() {\n\tif (typeof document !== 'undefined') {\n\t\tif (document.contains) {\n\t\t\treturn document.contains;\n\t\t}\n\t\tif (document.body && document.body.contains) {\n\t\t\ttry {\n\t\t\t\tif (typeof document.body.contains.call(document, '') === 'boolean') {\n\t\t\t\t\treturn document.body.contains;\n\t\t\t\t}\n\t\t\t} catch (e) { /**/ }\n\t\t}\n\t}\n\treturn implementation;\n};\n","'use strict';\n\nvar define = require('define-properties');\nvar getPolyfill = require('./polyfill');\n\nmodule.exports = function shimContains() {\n\tvar polyfill = getPolyfill();\n\tif (typeof document !== 'undefined') {\n\t\tdefine(\n\t\t\tdocument,\n\t\t\t{ contains: polyfill },\n\t\t\t{ contains: function () { return document.contains !== polyfill; } }\n\t\t);\n\t\tif (typeof Element !== 'undefined') {\n\t\t\tdefine(\n\t\t\t\tElement.prototype,\n\t\t\t\t{ contains: polyfill },\n\t\t\t\t{ contains: function () { return Element.prototype.contains !== polyfill; } }\n\t\t\t);\n\t\t}\n\t}\n\treturn polyfill;\n};\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = shallowEqual;\n\nvar _objectIs = _interopRequireDefault(require(\"object-is\"));\n\nvar _has = _interopRequireDefault(require(\"has\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n// adapted from https://github.com/facebook/react/blob/144328fe81719e916b946e22660479e31561bb0b/packages/shared/shallowEqual.js#L36-L68\nfunction shallowEqual(objA, objB) {\n if ((0, _objectIs[\"default\"])(objA, objB)) {\n return true;\n }\n\n if (!objA || !objB || _typeof(objA) !== 'object' || _typeof(objB) !== 'object') {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n keysA.sort();\n keysB.sort(); // Test for A's keys different from B.\n\n for (var i = 0; i < keysA.length; i += 1) {\n if (!(0, _has[\"default\"])(objB, keysA[i]) || !(0, _objectIs[\"default\"])(objA[keysA[i]], objB[keysA[i]])) {\n return false;\n }\n }\n\n return true;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJzaGFsbG93RXF1YWwiLCJvYmpBIiwib2JqQiIsImtleXNBIiwiT2JqZWN0Iiwia2V5cyIsImtleXNCIiwibGVuZ3RoIiwic29ydCIsImkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7Ozs7O0FBRUE7QUFDZSxTQUFTQSxZQUFULENBQXNCQyxJQUF0QixFQUE0QkMsSUFBNUIsRUFBa0M7QUFDL0MsTUFBSSwwQkFBR0QsSUFBSCxFQUFTQyxJQUFULENBQUosRUFBb0I7QUFDbEIsV0FBTyxJQUFQO0FBQ0Q7O0FBRUQsTUFBSSxDQUFDRCxJQUFELElBQVMsQ0FBQ0MsSUFBVixJQUFrQixRQUFPRCxJQUFQLE1BQWdCLFFBQWxDLElBQThDLFFBQU9DLElBQVAsTUFBZ0IsUUFBbEUsRUFBNEU7QUFDMUUsV0FBTyxLQUFQO0FBQ0Q7O0FBRUQsTUFBTUMsS0FBSyxHQUFHQyxNQUFNLENBQUNDLElBQVAsQ0FBWUosSUFBWixDQUFkO0FBQ0EsTUFBTUssS0FBSyxHQUFHRixNQUFNLENBQUNDLElBQVAsQ0FBWUgsSUFBWixDQUFkOztBQUVBLE1BQUlDLEtBQUssQ0FBQ0ksTUFBTixLQUFpQkQsS0FBSyxDQUFDQyxNQUEzQixFQUFtQztBQUNqQyxXQUFPLEtBQVA7QUFDRDs7QUFFREosRUFBQUEsS0FBSyxDQUFDSyxJQUFOO0FBQ0FGLEVBQUFBLEtBQUssQ0FBQ0UsSUFBTixHQWpCK0MsQ0FtQi9DOztBQUNBLE9BQUssSUFBSUMsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR04sS0FBSyxDQUFDSSxNQUExQixFQUFrQ0UsQ0FBQyxJQUFJLENBQXZDLEVBQTBDO0FBQ3hDLFFBQUksQ0FBQyxxQkFBSVAsSUFBSixFQUFVQyxLQUFLLENBQUNNLENBQUQsQ0FBZixDQUFELElBQXdCLENBQUMsMEJBQUdSLElBQUksQ0FBQ0UsS0FBSyxDQUFDTSxDQUFELENBQU4sQ0FBUCxFQUFtQlAsSUFBSSxDQUFDQyxLQUFLLENBQUNNLENBQUQsQ0FBTixDQUF2QixDQUE3QixFQUFpRTtBQUMvRCxhQUFPLEtBQVA7QUFDRDtBQUNGOztBQUVELFNBQU8sSUFBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGlzIGZyb20gJ29iamVjdC1pcyc7XG5pbXBvcnQgaGFzIGZyb20gJ2hhcyc7XG5cbi8vIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvYmxvYi8xNDQzMjhmZTgxNzE5ZTkxNmI5NDZlMjI2NjA0NzllMzE1NjFiYjBiL3BhY2thZ2VzL3NoYXJlZC9zaGFsbG93RXF1YWwuanMjTDM2LUw2OFxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2hhbGxvd0VxdWFsKG9iakEsIG9iakIpIHtcbiAgaWYgKGlzKG9iakEsIG9iakIpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoIW9iakEgfHwgIW9iakIgfHwgdHlwZW9mIG9iakEgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBvYmpCICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGtleXNBID0gT2JqZWN0LmtleXMob2JqQSk7XG4gIGNvbnN0IGtleXNCID0gT2JqZWN0LmtleXMob2JqQik7XG5cbiAgaWYgKGtleXNBLmxlbmd0aCAhPT0ga2V5c0IubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAga2V5c0Euc29ydCgpO1xuICBrZXlzQi5zb3J0KCk7XG5cbiAgLy8gVGVzdCBmb3IgQSdzIGtleXMgZGlmZmVyZW50IGZyb20gQi5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzQS5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGlmICghaGFzKG9iakIsIGtleXNBW2ldKSB8fCAhaXMob2JqQVtrZXlzQVtpXV0sIG9iakJba2V5c0FbaV1dKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuIl19\n//# sourceMappingURL=index.js.map","'use strict';\n\nvar has = require('has');\n\nvar hasUnscopables = typeof Symbol === 'function' && typeof Symbol.unscopables === 'symbol';\n\nvar map = hasUnscopables && Array.prototype[Symbol.unscopables];\n\nvar $TypeError = TypeError;\n\nmodule.exports = function shimUnscopables(method) {\n\tif (typeof method !== 'string' || !method) {\n\t\tthrow new $TypeError('method must be a non-empty string');\n\t}\n\tif (!has(Array.prototype, method)) {\n\t\tthrow new $TypeError('method must be on Array.prototype');\n\t}\n\tif (hasUnscopables) {\n\t\tmap[method] = true;\n\t}\n};\n","'use strict';\n\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';\n\nvar isPrimitive = require('./helpers/isPrimitive');\nvar isCallable = require('is-callable');\nvar isDate = require('is-date-object');\nvar isSymbol = require('is-symbol');\n\nvar ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) {\n\tif (typeof O === 'undefined' || O === null) {\n\t\tthrow new TypeError('Cannot call method on ' + O);\n\t}\n\tif (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) {\n\t\tthrow new TypeError('hint must be \"string\" or \"number\"');\n\t}\n\tvar methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\tvar method, result, i;\n\tfor (i = 0; i < methodNames.length; ++i) {\n\t\tmethod = O[methodNames[i]];\n\t\tif (isCallable(method)) {\n\t\t\tresult = method.call(O);\n\t\t\tif (isPrimitive(result)) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t}\n\tthrow new TypeError('No default value');\n};\n\nvar GetMethod = function GetMethod(O, P) {\n\tvar func = O[P];\n\tif (func !== null && typeof func !== 'undefined') {\n\t\tif (!isCallable(func)) {\n\t\t\tthrow new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function');\n\t\t}\n\t\treturn func;\n\t}\n\treturn void 0;\n};\n\n// http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tvar hint = 'default';\n\tif (arguments.length > 1) {\n\t\tif (arguments[1] === String) {\n\t\t\thint = 'string';\n\t\t} else if (arguments[1] === Number) {\n\t\t\thint = 'number';\n\t\t}\n\t}\n\n\tvar exoticToPrim;\n\tif (hasSymbols) {\n\t\tif (Symbol.toPrimitive) {\n\t\t\texoticToPrim = GetMethod(input, Symbol.toPrimitive);\n\t\t} else if (isSymbol(input)) {\n\t\t\texoticToPrim = Symbol.prototype.valueOf;\n\t\t}\n\t}\n\tif (typeof exoticToPrim !== 'undefined') {\n\t\tvar result = exoticToPrim.call(input, hint);\n\t\tif (isPrimitive(result)) {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new TypeError('unable to convert exotic object to primitive');\n\t}\n\tif (hint === 'default' && (isDate(input) || isSymbol(input))) {\n\t\thint = 'string';\n\t}\n\treturn ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint);\n};\n","'use strict';\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n","/*!\n Copyright (c) 2015 Jed Watson.\n Based on code that is Copyright 2013-2015, Facebook, Inc.\n All rights reserved.\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar canUseDOM = !!(\n\t\ttypeof window !== 'undefined' &&\n\t\twindow.document &&\n\t\twindow.document.createElement\n\t);\n\n\tvar ExecutionEnvironment = {\n\n\t\tcanUseDOM: canUseDOM,\n\n\t\tcanUseWorkers: typeof Worker !== 'undefined',\n\n\t\tcanUseEventListeners:\n\t\t\tcanUseDOM && !!(window.addEventListener || window.attachEvent),\n\n\t\tcanUseViewport: canUseDOM && !!window.screen\n\n\t};\n\n\tif (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\tdefine(function () {\n\t\t\treturn ExecutionEnvironment;\n\t\t});\n\t} else if (typeof module !== 'undefined' && module.exports) {\n\t\tmodule.exports = ExecutionEnvironment;\n\t} else {\n\t\twindow.ExecutionEnvironment = ExecutionEnvironment;\n\t}\n\n}());\n","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","'use strict';\nmodule.exports = function (obj, predicate) {\n\tvar ret = {};\n\tvar keys = Object.keys(obj);\n\tvar isArr = Array.isArray(predicate);\n\n\tfor (var i = 0; i < keys.length; i++) {\n\t\tvar key = keys[i];\n\t\tvar val = obj[key];\n\n\t\tif (isArr ? predicate.indexOf(key) !== -1 : predicate(key, val, obj)) {\n\t\t\tret[key] = val;\n\t\t}\n\t}\n\n\treturn ret;\n};\n","'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","'use strict';\n\nvar IsCallable = require('es-abstract/2021/IsCallable');\nvar functionsHaveNames = require('functions-have-names')();\nvar callBound = require('call-bind/callBound');\nvar $functionToString = callBound('Function.prototype.toString');\nvar $stringMatch = callBound('String.prototype.match');\n\nvar classRegex = /^class /;\n\nvar isClass = function isClassConstructor(fn) {\n\tif (IsCallable(fn)) {\n\t\treturn false;\n\t}\n\tif (typeof fn !== 'function') {\n\t\treturn false;\n\t}\n\ttry {\n\t\tvar match = $stringMatch($functionToString(fn), classRegex);\n\t\treturn !!match;\n\t} catch (e) {}\n\treturn false;\n};\n\nvar regex = /\\s*function\\s+([^(\\s]*)\\s*/;\n\nvar functionProto = Function.prototype;\n\nmodule.exports = function getName() {\n\tif (!isClass(this) && !IsCallable(this)) {\n\t\tthrow new TypeError('Function.prototype.name sham getter called on non-function');\n\t}\n\tif (functionsHaveNames) {\n\t\treturn this.name;\n\t}\n\tif (this === functionProto) {\n\t\treturn '';\n\t}\n\tvar str = $functionToString(this);\n\tvar match = $stringMatch(str, regex);\n\tvar name = match && match[1];\n\treturn name;\n};\n","'use strict';\n\nvar define = require('define-properties');\nvar callBind = require('call-bind');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar bound = callBind(implementation);\n\ndefine(bound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = bound;\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = function getPolyfill() {\n\treturn implementation;\n};\n","'use strict';\n\nvar supportsDescriptors = require('define-properties').supportsDescriptors;\nvar functionsHaveNames = require('functions-have-names')();\nvar getPolyfill = require('./polyfill');\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\n\nmodule.exports = function shimName() {\n\tvar polyfill = getPolyfill();\n\tif (functionsHaveNames) {\n\t\treturn polyfill;\n\t}\n\tif (!supportsDescriptors) {\n\t\tthrow new TypeErr('Shimming Function.prototype.name support requires ES5 property descriptor support.');\n\t}\n\tvar functionProto = Function.prototype;\n\tdefineProperty(functionProto, 'name', {\n\t\tconfigurable: true,\n\t\tenumerable: false,\n\t\tget: function () {\n\t\t\tvar name = polyfill.call(this);\n\t\t\tif (this !== functionProto) {\n\t\t\t\tdefineProperty(this, 'name', {\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\tvalue: name,\n\t\t\t\t\twritable: false\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn name;\n\t\t}\n\t});\n\treturn polyfill;\n};\n","'use strict';\n\nvar functionsHaveNames = function functionsHaveNames() {\n\treturn typeof function f() {}.name === 'string';\n};\n\nvar gOPD = Object.getOwnPropertyDescriptor;\nif (gOPD) {\n\ttry {\n\t\tgOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\tgOPD = null;\n\t}\n}\n\nfunctionsHaveNames.functionsHaveConfigurableNames = function functionsHaveConfigurableNames() {\n\tif (!functionsHaveNames() || !gOPD) {\n\t\treturn false;\n\t}\n\tvar desc = gOPD(function () {}, 'name');\n\treturn !!desc && !!desc.configurable;\n};\n\nvar $bind = Function.prototype.bind;\n\nfunctionsHaveNames.boundFunctionsHaveNames = function boundFunctionsHaveNames() {\n\treturn functionsHaveNames() && typeof $bind === 'function' && function f() {}.bind().name !== '';\n};\n\nmodule.exports = functionsHaveNames;\n","'use strict';\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('has');\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n","/**\n * Common utilities\n * @module glMatrix\n */\n// Configuration Constants\nexport var EPSILON = 0.000001;\nexport var ARRAY_TYPE = typeof Float32Array !== 'undefined' ? Float32Array : Array;\nexport var RANDOM = Math.random;\n/**\n * Sets the type of array used when creating new vectors and matrices\n *\n * @param {Float32ArrayConstructor | ArrayConstructor} type Array type, such as Float32Array or Array\n */\n\nexport function setMatrixArrayType(type) {\n ARRAY_TYPE = type;\n}\nvar degree = Math.PI / 180;\n/**\n * Convert Degree To Radian\n *\n * @param {Number} a Angle in Degrees\n */\n\nexport function toRadian(a) {\n return a * degree;\n}\n/**\n * Tests whether or not the arguments have approximately the same value, within an absolute\n * or relative tolerance of glMatrix.EPSILON (an absolute tolerance is used for values less\n * than or equal to 1.0, and a relative tolerance is used for larger values)\n *\n * @param {Number} a The first number to test.\n * @param {Number} b The second number to test.\n * @returns {Boolean} True if the numbers are approximately equal, false otherwise.\n */\n\nexport function equals(a, b) {\n return Math.abs(a - b) <= EPSILON * Math.max(1.0, Math.abs(a), Math.abs(b));\n}\nif (!Math.hypot) Math.hypot = function () {\n var y = 0,\n i = arguments.length;\n\n while (i--) {\n y += arguments[i] * arguments[i];\n }\n\n return Math.sqrt(y);\n};","import * as glMatrix from \"./common.js\";\n/**\n * 3x3 Matrix\n * @module mat3\n */\n\n/**\n * Creates a new identity mat3\n *\n * @returns {mat3} a new 3x3 matrix\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(9);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n }\n\n out[0] = 1;\n out[4] = 1;\n out[8] = 1;\n return out;\n}\n/**\n * Copies the upper-left 3x3 values into the given mat3.\n *\n * @param {mat3} out the receiving 3x3 matrix\n * @param {ReadonlyMat4} a the source 4x4 matrix\n * @returns {mat3} out\n */\n\nexport function fromMat4(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[4];\n out[4] = a[5];\n out[5] = a[6];\n out[6] = a[8];\n out[7] = a[9];\n out[8] = a[10];\n return out;\n}\n/**\n * Creates a new mat3 initialized with values from an existing matrix\n *\n * @param {ReadonlyMat3} a matrix to clone\n * @returns {mat3} a new 3x3 matrix\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(9);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n}\n/**\n * Copy the values from one mat3 to another\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the source matrix\n * @returns {mat3} out\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n}\n/**\n * Create a new mat3 with the given values\n *\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\n * @param {Number} m10 Component in column 1, row 0 position (index 3)\n * @param {Number} m11 Component in column 1, row 1 position (index 4)\n * @param {Number} m12 Component in column 1, row 2 position (index 5)\n * @param {Number} m20 Component in column 2, row 0 position (index 6)\n * @param {Number} m21 Component in column 2, row 1 position (index 7)\n * @param {Number} m22 Component in column 2, row 2 position (index 8)\n * @returns {mat3} A new mat3\n */\n\nexport function fromValues(m00, m01, m02, m10, m11, m12, m20, m21, m22) {\n var out = new glMatrix.ARRAY_TYPE(9);\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m10;\n out[4] = m11;\n out[5] = m12;\n out[6] = m20;\n out[7] = m21;\n out[8] = m22;\n return out;\n}\n/**\n * Set the components of a mat3 to the given values\n *\n * @param {mat3} out the receiving matrix\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\n * @param {Number} m10 Component in column 1, row 0 position (index 3)\n * @param {Number} m11 Component in column 1, row 1 position (index 4)\n * @param {Number} m12 Component in column 1, row 2 position (index 5)\n * @param {Number} m20 Component in column 2, row 0 position (index 6)\n * @param {Number} m21 Component in column 2, row 1 position (index 7)\n * @param {Number} m22 Component in column 2, row 2 position (index 8)\n * @returns {mat3} out\n */\n\nexport function set(out, m00, m01, m02, m10, m11, m12, m20, m21, m22) {\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m10;\n out[4] = m11;\n out[5] = m12;\n out[6] = m20;\n out[7] = m21;\n out[8] = m22;\n return out;\n}\n/**\n * Set a mat3 to the identity matrix\n *\n * @param {mat3} out the receiving matrix\n * @returns {mat3} out\n */\n\nexport function identity(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 1;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n}\n/**\n * Transpose the values of a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the source matrix\n * @returns {mat3} out\n */\n\nexport function transpose(out, a) {\n // If we are transposing ourselves we can skip a few steps but have to cache some values\n if (out === a) {\n var a01 = a[1],\n a02 = a[2],\n a12 = a[5];\n out[1] = a[3];\n out[2] = a[6];\n out[3] = a01;\n out[5] = a[7];\n out[6] = a02;\n out[7] = a12;\n } else {\n out[0] = a[0];\n out[1] = a[3];\n out[2] = a[6];\n out[3] = a[1];\n out[4] = a[4];\n out[5] = a[7];\n out[6] = a[2];\n out[7] = a[5];\n out[8] = a[8];\n }\n\n return out;\n}\n/**\n * Inverts a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the source matrix\n * @returns {mat3} out\n */\n\nexport function invert(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n var b01 = a22 * a11 - a12 * a21;\n var b11 = -a22 * a10 + a12 * a20;\n var b21 = a21 * a10 - a11 * a20; // Calculate the determinant\n\n var det = a00 * b01 + a01 * b11 + a02 * b21;\n\n if (!det) {\n return null;\n }\n\n det = 1.0 / det;\n out[0] = b01 * det;\n out[1] = (-a22 * a01 + a02 * a21) * det;\n out[2] = (a12 * a01 - a02 * a11) * det;\n out[3] = b11 * det;\n out[4] = (a22 * a00 - a02 * a20) * det;\n out[5] = (-a12 * a00 + a02 * a10) * det;\n out[6] = b21 * det;\n out[7] = (-a21 * a00 + a01 * a20) * det;\n out[8] = (a11 * a00 - a01 * a10) * det;\n return out;\n}\n/**\n * Calculates the adjugate of a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the source matrix\n * @returns {mat3} out\n */\n\nexport function adjoint(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n out[0] = a11 * a22 - a12 * a21;\n out[1] = a02 * a21 - a01 * a22;\n out[2] = a01 * a12 - a02 * a11;\n out[3] = a12 * a20 - a10 * a22;\n out[4] = a00 * a22 - a02 * a20;\n out[5] = a02 * a10 - a00 * a12;\n out[6] = a10 * a21 - a11 * a20;\n out[7] = a01 * a20 - a00 * a21;\n out[8] = a00 * a11 - a01 * a10;\n return out;\n}\n/**\n * Calculates the determinant of a mat3\n *\n * @param {ReadonlyMat3} a the source matrix\n * @returns {Number} determinant of a\n */\n\nexport function determinant(a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n return a00 * (a22 * a11 - a12 * a21) + a01 * (-a22 * a10 + a12 * a20) + a02 * (a21 * a10 - a11 * a20);\n}\n/**\n * Multiplies two mat3's\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the first operand\n * @param {ReadonlyMat3} b the second operand\n * @returns {mat3} out\n */\n\nexport function multiply(out, a, b) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n var b00 = b[0],\n b01 = b[1],\n b02 = b[2];\n var b10 = b[3],\n b11 = b[4],\n b12 = b[5];\n var b20 = b[6],\n b21 = b[7],\n b22 = b[8];\n out[0] = b00 * a00 + b01 * a10 + b02 * a20;\n out[1] = b00 * a01 + b01 * a11 + b02 * a21;\n out[2] = b00 * a02 + b01 * a12 + b02 * a22;\n out[3] = b10 * a00 + b11 * a10 + b12 * a20;\n out[4] = b10 * a01 + b11 * a11 + b12 * a21;\n out[5] = b10 * a02 + b11 * a12 + b12 * a22;\n out[6] = b20 * a00 + b21 * a10 + b22 * a20;\n out[7] = b20 * a01 + b21 * a11 + b22 * a21;\n out[8] = b20 * a02 + b21 * a12 + b22 * a22;\n return out;\n}\n/**\n * Translate a mat3 by the given vector\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to translate\n * @param {ReadonlyVec2} v vector to translate by\n * @returns {mat3} out\n */\n\nexport function translate(out, a, v) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a10 = a[3],\n a11 = a[4],\n a12 = a[5],\n a20 = a[6],\n a21 = a[7],\n a22 = a[8],\n x = v[0],\n y = v[1];\n out[0] = a00;\n out[1] = a01;\n out[2] = a02;\n out[3] = a10;\n out[4] = a11;\n out[5] = a12;\n out[6] = x * a00 + y * a10 + a20;\n out[7] = x * a01 + y * a11 + a21;\n out[8] = x * a02 + y * a12 + a22;\n return out;\n}\n/**\n * Rotates a mat3 by the given angle\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat3} out\n */\n\nexport function rotate(out, a, rad) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a10 = a[3],\n a11 = a[4],\n a12 = a[5],\n a20 = a[6],\n a21 = a[7],\n a22 = a[8],\n s = Math.sin(rad),\n c = Math.cos(rad);\n out[0] = c * a00 + s * a10;\n out[1] = c * a01 + s * a11;\n out[2] = c * a02 + s * a12;\n out[3] = c * a10 - s * a00;\n out[4] = c * a11 - s * a01;\n out[5] = c * a12 - s * a02;\n out[6] = a20;\n out[7] = a21;\n out[8] = a22;\n return out;\n}\n/**\n * Scales the mat3 by the dimensions in the given vec2\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to rotate\n * @param {ReadonlyVec2} v the vec2 to scale the matrix by\n * @returns {mat3} out\n **/\n\nexport function scale(out, a, v) {\n var x = v[0],\n y = v[1];\n out[0] = x * a[0];\n out[1] = x * a[1];\n out[2] = x * a[2];\n out[3] = y * a[3];\n out[4] = y * a[4];\n out[5] = y * a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n}\n/**\n * Creates a matrix from a vector translation\n * This is equivalent to (but much faster than):\n *\n * mat3.identity(dest);\n * mat3.translate(dest, dest, vec);\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {ReadonlyVec2} v Translation vector\n * @returns {mat3} out\n */\n\nexport function fromTranslation(out, v) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 1;\n out[5] = 0;\n out[6] = v[0];\n out[7] = v[1];\n out[8] = 1;\n return out;\n}\n/**\n * Creates a matrix from a given angle\n * This is equivalent to (but much faster than):\n *\n * mat3.identity(dest);\n * mat3.rotate(dest, dest, rad);\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat3} out\n */\n\nexport function fromRotation(out, rad) {\n var s = Math.sin(rad),\n c = Math.cos(rad);\n out[0] = c;\n out[1] = s;\n out[2] = 0;\n out[3] = -s;\n out[4] = c;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n}\n/**\n * Creates a matrix from a vector scaling\n * This is equivalent to (but much faster than):\n *\n * mat3.identity(dest);\n * mat3.scale(dest, dest, vec);\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {ReadonlyVec2} v Scaling vector\n * @returns {mat3} out\n */\n\nexport function fromScaling(out, v) {\n out[0] = v[0];\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = v[1];\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n}\n/**\n * Copies the values from a mat2d into a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat2d} a the matrix to copy\n * @returns {mat3} out\n **/\n\nexport function fromMat2d(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = 0;\n out[3] = a[2];\n out[4] = a[3];\n out[5] = 0;\n out[6] = a[4];\n out[7] = a[5];\n out[8] = 1;\n return out;\n}\n/**\n * Calculates a 3x3 matrix from the given quaternion\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {ReadonlyQuat} q Quaternion to create matrix from\n *\n * @returns {mat3} out\n */\n\nexport function fromQuat(out, q) {\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var yx = y * x2;\n var yy = y * y2;\n var zx = z * x2;\n var zy = z * y2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n out[0] = 1 - yy - zz;\n out[3] = yx - wz;\n out[6] = zx + wy;\n out[1] = yx + wz;\n out[4] = 1 - xx - zz;\n out[7] = zy - wx;\n out[2] = zx - wy;\n out[5] = zy + wx;\n out[8] = 1 - xx - yy;\n return out;\n}\n/**\n * Calculates a 3x3 normal matrix (transpose inverse) from the 4x4 matrix\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {ReadonlyMat4} a Mat4 to derive the normal matrix from\n *\n * @returns {mat3} out\n */\n\nexport function normalFromMat4(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n var b00 = a00 * a11 - a01 * a10;\n var b01 = a00 * a12 - a02 * a10;\n var b02 = a00 * a13 - a03 * a10;\n var b03 = a01 * a12 - a02 * a11;\n var b04 = a01 * a13 - a03 * a11;\n var b05 = a02 * a13 - a03 * a12;\n var b06 = a20 * a31 - a21 * a30;\n var b07 = a20 * a32 - a22 * a30;\n var b08 = a20 * a33 - a23 * a30;\n var b09 = a21 * a32 - a22 * a31;\n var b10 = a21 * a33 - a23 * a31;\n var b11 = a22 * a33 - a23 * a32; // Calculate the determinant\n\n var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n if (!det) {\n return null;\n }\n\n det = 1.0 / det;\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[2] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n out[3] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[4] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[5] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n out[6] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[7] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[8] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n return out;\n}\n/**\n * Generates a 2D projection matrix with the given bounds\n *\n * @param {mat3} out mat3 frustum matrix will be written into\n * @param {number} width Width of your gl context\n * @param {number} height Height of gl context\n * @returns {mat3} out\n */\n\nexport function projection(out, width, height) {\n out[0] = 2 / width;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = -2 / height;\n out[5] = 0;\n out[6] = -1;\n out[7] = 1;\n out[8] = 1;\n return out;\n}\n/**\n * Returns a string representation of a mat3\n *\n * @param {ReadonlyMat3} a matrix to represent as a string\n * @returns {String} string representation of the matrix\n */\n\nexport function str(a) {\n return \"mat3(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \", \" + a[4] + \", \" + a[5] + \", \" + a[6] + \", \" + a[7] + \", \" + a[8] + \")\";\n}\n/**\n * Returns Frobenius norm of a mat3\n *\n * @param {ReadonlyMat3} a the matrix to calculate Frobenius norm of\n * @returns {Number} Frobenius norm\n */\n\nexport function frob(a) {\n return Math.hypot(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);\n}\n/**\n * Adds two mat3's\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the first operand\n * @param {ReadonlyMat3} b the second operand\n * @returns {mat3} out\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n out[4] = a[4] + b[4];\n out[5] = a[5] + b[5];\n out[6] = a[6] + b[6];\n out[7] = a[7] + b[7];\n out[8] = a[8] + b[8];\n return out;\n}\n/**\n * Subtracts matrix b from matrix a\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the first operand\n * @param {ReadonlyMat3} b the second operand\n * @returns {mat3} out\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n out[4] = a[4] - b[4];\n out[5] = a[5] - b[5];\n out[6] = a[6] - b[6];\n out[7] = a[7] - b[7];\n out[8] = a[8] - b[8];\n return out;\n}\n/**\n * Multiply each element of the matrix by a scalar.\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to scale\n * @param {Number} b amount to scale the matrix's elements by\n * @returns {mat3} out\n */\n\nexport function multiplyScalar(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n out[4] = a[4] * b;\n out[5] = a[5] * b;\n out[6] = a[6] * b;\n out[7] = a[7] * b;\n out[8] = a[8] * b;\n return out;\n}\n/**\n * Adds two mat3's after multiplying each element of the second operand by a scalar value.\n *\n * @param {mat3} out the receiving vector\n * @param {ReadonlyMat3} a the first operand\n * @param {ReadonlyMat3} b the second operand\n * @param {Number} scale the amount to scale b's elements by before adding\n * @returns {mat3} out\n */\n\nexport function multiplyScalarAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n out[4] = a[4] + b[4] * scale;\n out[5] = a[5] + b[5] * scale;\n out[6] = a[6] + b[6] * scale;\n out[7] = a[7] + b[7] * scale;\n out[8] = a[8] + b[8] * scale;\n return out;\n}\n/**\n * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyMat3} a The first matrix.\n * @param {ReadonlyMat3} b The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n */\n\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7] && a[8] === b[8];\n}\n/**\n * Returns whether or not the matrices have approximately the same elements in the same position.\n *\n * @param {ReadonlyMat3} a The first matrix.\n * @param {ReadonlyMat3} b The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3],\n a4 = a[4],\n a5 = a[5],\n a6 = a[6],\n a7 = a[7],\n a8 = a[8];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7)) && Math.abs(a8 - b8) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a8), Math.abs(b8));\n}\n/**\n * Alias for {@link mat3.multiply}\n * @function\n */\n\nexport var mul = multiply;\n/**\n * Alias for {@link mat3.subtract}\n * @function\n */\n\nexport var sub = subtract;","import * as glMatrix from \"./common.js\";\n/**\n * 4x4 Matrix
Format: column-major, when typed out it looks like row-major
The matrices are being post multiplied.\n * @module mat4\n */\n\n/**\n * Creates a new identity mat4\n *\n * @returns {mat4} a new 4x4 matrix\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(16);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n }\n\n out[0] = 1;\n out[5] = 1;\n out[10] = 1;\n out[15] = 1;\n return out;\n}\n/**\n * Creates a new mat4 initialized with values from an existing matrix\n *\n * @param {ReadonlyMat4} a matrix to clone\n * @returns {mat4} a new 4x4 matrix\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(16);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n/**\n * Copy the values from one mat4 to another\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the source matrix\n * @returns {mat4} out\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n/**\n * Create a new mat4 with the given values\n *\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\n * @param {Number} m03 Component in column 0, row 3 position (index 3)\n * @param {Number} m10 Component in column 1, row 0 position (index 4)\n * @param {Number} m11 Component in column 1, row 1 position (index 5)\n * @param {Number} m12 Component in column 1, row 2 position (index 6)\n * @param {Number} m13 Component in column 1, row 3 position (index 7)\n * @param {Number} m20 Component in column 2, row 0 position (index 8)\n * @param {Number} m21 Component in column 2, row 1 position (index 9)\n * @param {Number} m22 Component in column 2, row 2 position (index 10)\n * @param {Number} m23 Component in column 2, row 3 position (index 11)\n * @param {Number} m30 Component in column 3, row 0 position (index 12)\n * @param {Number} m31 Component in column 3, row 1 position (index 13)\n * @param {Number} m32 Component in column 3, row 2 position (index 14)\n * @param {Number} m33 Component in column 3, row 3 position (index 15)\n * @returns {mat4} A new mat4\n */\n\nexport function fromValues(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\n var out = new glMatrix.ARRAY_TYPE(16);\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m03;\n out[4] = m10;\n out[5] = m11;\n out[6] = m12;\n out[7] = m13;\n out[8] = m20;\n out[9] = m21;\n out[10] = m22;\n out[11] = m23;\n out[12] = m30;\n out[13] = m31;\n out[14] = m32;\n out[15] = m33;\n return out;\n}\n/**\n * Set the components of a mat4 to the given values\n *\n * @param {mat4} out the receiving matrix\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\n * @param {Number} m03 Component in column 0, row 3 position (index 3)\n * @param {Number} m10 Component in column 1, row 0 position (index 4)\n * @param {Number} m11 Component in column 1, row 1 position (index 5)\n * @param {Number} m12 Component in column 1, row 2 position (index 6)\n * @param {Number} m13 Component in column 1, row 3 position (index 7)\n * @param {Number} m20 Component in column 2, row 0 position (index 8)\n * @param {Number} m21 Component in column 2, row 1 position (index 9)\n * @param {Number} m22 Component in column 2, row 2 position (index 10)\n * @param {Number} m23 Component in column 2, row 3 position (index 11)\n * @param {Number} m30 Component in column 3, row 0 position (index 12)\n * @param {Number} m31 Component in column 3, row 1 position (index 13)\n * @param {Number} m32 Component in column 3, row 2 position (index 14)\n * @param {Number} m33 Component in column 3, row 3 position (index 15)\n * @returns {mat4} out\n */\n\nexport function set(out, m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m03;\n out[4] = m10;\n out[5] = m11;\n out[6] = m12;\n out[7] = m13;\n out[8] = m20;\n out[9] = m21;\n out[10] = m22;\n out[11] = m23;\n out[12] = m30;\n out[13] = m31;\n out[14] = m32;\n out[15] = m33;\n return out;\n}\n/**\n * Set a mat4 to the identity matrix\n *\n * @param {mat4} out the receiving matrix\n * @returns {mat4} out\n */\n\nexport function identity(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Transpose the values of a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the source matrix\n * @returns {mat4} out\n */\n\nexport function transpose(out, a) {\n // If we are transposing ourselves we can skip a few steps but have to cache some values\n if (out === a) {\n var a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a12 = a[6],\n a13 = a[7];\n var a23 = a[11];\n out[1] = a[4];\n out[2] = a[8];\n out[3] = a[12];\n out[4] = a01;\n out[6] = a[9];\n out[7] = a[13];\n out[8] = a02;\n out[9] = a12;\n out[11] = a[14];\n out[12] = a03;\n out[13] = a13;\n out[14] = a23;\n } else {\n out[0] = a[0];\n out[1] = a[4];\n out[2] = a[8];\n out[3] = a[12];\n out[4] = a[1];\n out[5] = a[5];\n out[6] = a[9];\n out[7] = a[13];\n out[8] = a[2];\n out[9] = a[6];\n out[10] = a[10];\n out[11] = a[14];\n out[12] = a[3];\n out[13] = a[7];\n out[14] = a[11];\n out[15] = a[15];\n }\n\n return out;\n}\n/**\n * Inverts a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the source matrix\n * @returns {mat4} out\n */\n\nexport function invert(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n var b00 = a00 * a11 - a01 * a10;\n var b01 = a00 * a12 - a02 * a10;\n var b02 = a00 * a13 - a03 * a10;\n var b03 = a01 * a12 - a02 * a11;\n var b04 = a01 * a13 - a03 * a11;\n var b05 = a02 * a13 - a03 * a12;\n var b06 = a20 * a31 - a21 * a30;\n var b07 = a20 * a32 - a22 * a30;\n var b08 = a20 * a33 - a23 * a30;\n var b09 = a21 * a32 - a22 * a31;\n var b10 = a21 * a33 - a23 * a31;\n var b11 = a22 * a33 - a23 * a32; // Calculate the determinant\n\n var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n if (!det) {\n return null;\n }\n\n det = 1.0 / det;\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;\n out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;\n out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;\n out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;\n out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;\n out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;\n out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;\n return out;\n}\n/**\n * Calculates the adjugate of a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the source matrix\n * @returns {mat4} out\n */\n\nexport function adjoint(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n out[0] = a11 * (a22 * a33 - a23 * a32) - a21 * (a12 * a33 - a13 * a32) + a31 * (a12 * a23 - a13 * a22);\n out[1] = -(a01 * (a22 * a33 - a23 * a32) - a21 * (a02 * a33 - a03 * a32) + a31 * (a02 * a23 - a03 * a22));\n out[2] = a01 * (a12 * a33 - a13 * a32) - a11 * (a02 * a33 - a03 * a32) + a31 * (a02 * a13 - a03 * a12);\n out[3] = -(a01 * (a12 * a23 - a13 * a22) - a11 * (a02 * a23 - a03 * a22) + a21 * (a02 * a13 - a03 * a12));\n out[4] = -(a10 * (a22 * a33 - a23 * a32) - a20 * (a12 * a33 - a13 * a32) + a30 * (a12 * a23 - a13 * a22));\n out[5] = a00 * (a22 * a33 - a23 * a32) - a20 * (a02 * a33 - a03 * a32) + a30 * (a02 * a23 - a03 * a22);\n out[6] = -(a00 * (a12 * a33 - a13 * a32) - a10 * (a02 * a33 - a03 * a32) + a30 * (a02 * a13 - a03 * a12));\n out[7] = a00 * (a12 * a23 - a13 * a22) - a10 * (a02 * a23 - a03 * a22) + a20 * (a02 * a13 - a03 * a12);\n out[8] = a10 * (a21 * a33 - a23 * a31) - a20 * (a11 * a33 - a13 * a31) + a30 * (a11 * a23 - a13 * a21);\n out[9] = -(a00 * (a21 * a33 - a23 * a31) - a20 * (a01 * a33 - a03 * a31) + a30 * (a01 * a23 - a03 * a21));\n out[10] = a00 * (a11 * a33 - a13 * a31) - a10 * (a01 * a33 - a03 * a31) + a30 * (a01 * a13 - a03 * a11);\n out[11] = -(a00 * (a11 * a23 - a13 * a21) - a10 * (a01 * a23 - a03 * a21) + a20 * (a01 * a13 - a03 * a11));\n out[12] = -(a10 * (a21 * a32 - a22 * a31) - a20 * (a11 * a32 - a12 * a31) + a30 * (a11 * a22 - a12 * a21));\n out[13] = a00 * (a21 * a32 - a22 * a31) - a20 * (a01 * a32 - a02 * a31) + a30 * (a01 * a22 - a02 * a21);\n out[14] = -(a00 * (a11 * a32 - a12 * a31) - a10 * (a01 * a32 - a02 * a31) + a30 * (a01 * a12 - a02 * a11));\n out[15] = a00 * (a11 * a22 - a12 * a21) - a10 * (a01 * a22 - a02 * a21) + a20 * (a01 * a12 - a02 * a11);\n return out;\n}\n/**\n * Calculates the determinant of a mat4\n *\n * @param {ReadonlyMat4} a the source matrix\n * @returns {Number} determinant of a\n */\n\nexport function determinant(a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n var b00 = a00 * a11 - a01 * a10;\n var b01 = a00 * a12 - a02 * a10;\n var b02 = a00 * a13 - a03 * a10;\n var b03 = a01 * a12 - a02 * a11;\n var b04 = a01 * a13 - a03 * a11;\n var b05 = a02 * a13 - a03 * a12;\n var b06 = a20 * a31 - a21 * a30;\n var b07 = a20 * a32 - a22 * a30;\n var b08 = a20 * a33 - a23 * a30;\n var b09 = a21 * a32 - a22 * a31;\n var b10 = a21 * a33 - a23 * a31;\n var b11 = a22 * a33 - a23 * a32; // Calculate the determinant\n\n return b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n}\n/**\n * Multiplies two mat4s\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @returns {mat4} out\n */\n\nexport function multiply(out, a, b) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15]; // Cache only the current line of the second matrix\n\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3];\n out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[4];\n b1 = b[5];\n b2 = b[6];\n b3 = b[7];\n out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[8];\n b1 = b[9];\n b2 = b[10];\n b3 = b[11];\n out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[12];\n b1 = b[13];\n b2 = b[14];\n b3 = b[15];\n out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n return out;\n}\n/**\n * Translate a mat4 by the given vector\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to translate\n * @param {ReadonlyVec3} v vector to translate by\n * @returns {mat4} out\n */\n\nexport function translate(out, a, v) {\n var x = v[0],\n y = v[1],\n z = v[2];\n var a00, a01, a02, a03;\n var a10, a11, a12, a13;\n var a20, a21, a22, a23;\n\n if (a === out) {\n out[12] = a[0] * x + a[4] * y + a[8] * z + a[12];\n out[13] = a[1] * x + a[5] * y + a[9] * z + a[13];\n out[14] = a[2] * x + a[6] * y + a[10] * z + a[14];\n out[15] = a[3] * x + a[7] * y + a[11] * z + a[15];\n } else {\n a00 = a[0];\n a01 = a[1];\n a02 = a[2];\n a03 = a[3];\n a10 = a[4];\n a11 = a[5];\n a12 = a[6];\n a13 = a[7];\n a20 = a[8];\n a21 = a[9];\n a22 = a[10];\n a23 = a[11];\n out[0] = a00;\n out[1] = a01;\n out[2] = a02;\n out[3] = a03;\n out[4] = a10;\n out[5] = a11;\n out[6] = a12;\n out[7] = a13;\n out[8] = a20;\n out[9] = a21;\n out[10] = a22;\n out[11] = a23;\n out[12] = a00 * x + a10 * y + a20 * z + a[12];\n out[13] = a01 * x + a11 * y + a21 * z + a[13];\n out[14] = a02 * x + a12 * y + a22 * z + a[14];\n out[15] = a03 * x + a13 * y + a23 * z + a[15];\n }\n\n return out;\n}\n/**\n * Scales the mat4 by the dimensions in the given vec3 not using vectorization\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to scale\n * @param {ReadonlyVec3} v the vec3 to scale the matrix by\n * @returns {mat4} out\n **/\n\nexport function scale(out, a, v) {\n var x = v[0],\n y = v[1],\n z = v[2];\n out[0] = a[0] * x;\n out[1] = a[1] * x;\n out[2] = a[2] * x;\n out[3] = a[3] * x;\n out[4] = a[4] * y;\n out[5] = a[5] * y;\n out[6] = a[6] * y;\n out[7] = a[7] * y;\n out[8] = a[8] * z;\n out[9] = a[9] * z;\n out[10] = a[10] * z;\n out[11] = a[11] * z;\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n/**\n * Rotates a mat4 by the given angle around the given axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @param {ReadonlyVec3} axis the axis to rotate around\n * @returns {mat4} out\n */\n\nexport function rotate(out, a, rad, axis) {\n var x = axis[0],\n y = axis[1],\n z = axis[2];\n var len = Math.hypot(x, y, z);\n var s, c, t;\n var a00, a01, a02, a03;\n var a10, a11, a12, a13;\n var a20, a21, a22, a23;\n var b00, b01, b02;\n var b10, b11, b12;\n var b20, b21, b22;\n\n if (len < glMatrix.EPSILON) {\n return null;\n }\n\n len = 1 / len;\n x *= len;\n y *= len;\n z *= len;\n s = Math.sin(rad);\n c = Math.cos(rad);\n t = 1 - c;\n a00 = a[0];\n a01 = a[1];\n a02 = a[2];\n a03 = a[3];\n a10 = a[4];\n a11 = a[5];\n a12 = a[6];\n a13 = a[7];\n a20 = a[8];\n a21 = a[9];\n a22 = a[10];\n a23 = a[11]; // Construct the elements of the rotation matrix\n\n b00 = x * x * t + c;\n b01 = y * x * t + z * s;\n b02 = z * x * t - y * s;\n b10 = x * y * t - z * s;\n b11 = y * y * t + c;\n b12 = z * y * t + x * s;\n b20 = x * z * t + y * s;\n b21 = y * z * t - x * s;\n b22 = z * z * t + c; // Perform rotation-specific matrix multiplication\n\n out[0] = a00 * b00 + a10 * b01 + a20 * b02;\n out[1] = a01 * b00 + a11 * b01 + a21 * b02;\n out[2] = a02 * b00 + a12 * b01 + a22 * b02;\n out[3] = a03 * b00 + a13 * b01 + a23 * b02;\n out[4] = a00 * b10 + a10 * b11 + a20 * b12;\n out[5] = a01 * b10 + a11 * b11 + a21 * b12;\n out[6] = a02 * b10 + a12 * b11 + a22 * b12;\n out[7] = a03 * b10 + a13 * b11 + a23 * b12;\n out[8] = a00 * b20 + a10 * b21 + a20 * b22;\n out[9] = a01 * b20 + a11 * b21 + a21 * b22;\n out[10] = a02 * b20 + a12 * b21 + a22 * b22;\n out[11] = a03 * b20 + a13 * b21 + a23 * b22;\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged last row\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n\n return out;\n}\n/**\n * Rotates a matrix by the given angle around the X axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\n\nexport function rotateX(out, a, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n var a10 = a[4];\n var a11 = a[5];\n var a12 = a[6];\n var a13 = a[7];\n var a20 = a[8];\n var a21 = a[9];\n var a22 = a[10];\n var a23 = a[11];\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged rows\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n } // Perform axis-specific matrix multiplication\n\n\n out[4] = a10 * c + a20 * s;\n out[5] = a11 * c + a21 * s;\n out[6] = a12 * c + a22 * s;\n out[7] = a13 * c + a23 * s;\n out[8] = a20 * c - a10 * s;\n out[9] = a21 * c - a11 * s;\n out[10] = a22 * c - a12 * s;\n out[11] = a23 * c - a13 * s;\n return out;\n}\n/**\n * Rotates a matrix by the given angle around the Y axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\n\nexport function rotateY(out, a, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n var a00 = a[0];\n var a01 = a[1];\n var a02 = a[2];\n var a03 = a[3];\n var a20 = a[8];\n var a21 = a[9];\n var a22 = a[10];\n var a23 = a[11];\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged rows\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n } // Perform axis-specific matrix multiplication\n\n\n out[0] = a00 * c - a20 * s;\n out[1] = a01 * c - a21 * s;\n out[2] = a02 * c - a22 * s;\n out[3] = a03 * c - a23 * s;\n out[8] = a00 * s + a20 * c;\n out[9] = a01 * s + a21 * c;\n out[10] = a02 * s + a22 * c;\n out[11] = a03 * s + a23 * c;\n return out;\n}\n/**\n * Rotates a matrix by the given angle around the Z axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\n\nexport function rotateZ(out, a, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n var a00 = a[0];\n var a01 = a[1];\n var a02 = a[2];\n var a03 = a[3];\n var a10 = a[4];\n var a11 = a[5];\n var a12 = a[6];\n var a13 = a[7];\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged last row\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n } // Perform axis-specific matrix multiplication\n\n\n out[0] = a00 * c + a10 * s;\n out[1] = a01 * c + a11 * s;\n out[2] = a02 * c + a12 * s;\n out[3] = a03 * c + a13 * s;\n out[4] = a10 * c - a00 * s;\n out[5] = a11 * c - a01 * s;\n out[6] = a12 * c - a02 * s;\n out[7] = a13 * c - a03 * s;\n return out;\n}\n/**\n * Creates a matrix from a vector translation\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, dest, vec);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {ReadonlyVec3} v Translation vector\n * @returns {mat4} out\n */\n\nexport function fromTranslation(out, v) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from a vector scaling\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.scale(dest, dest, vec);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {ReadonlyVec3} v Scaling vector\n * @returns {mat4} out\n */\n\nexport function fromScaling(out, v) {\n out[0] = v[0];\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = v[1];\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = v[2];\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from a given angle around a given axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotate(dest, dest, rad, axis);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @param {ReadonlyVec3} axis the axis to rotate around\n * @returns {mat4} out\n */\n\nexport function fromRotation(out, rad, axis) {\n var x = axis[0],\n y = axis[1],\n z = axis[2];\n var len = Math.hypot(x, y, z);\n var s, c, t;\n\n if (len < glMatrix.EPSILON) {\n return null;\n }\n\n len = 1 / len;\n x *= len;\n y *= len;\n z *= len;\n s = Math.sin(rad);\n c = Math.cos(rad);\n t = 1 - c; // Perform rotation-specific matrix multiplication\n\n out[0] = x * x * t + c;\n out[1] = y * x * t + z * s;\n out[2] = z * x * t - y * s;\n out[3] = 0;\n out[4] = x * y * t - z * s;\n out[5] = y * y * t + c;\n out[6] = z * y * t + x * s;\n out[7] = 0;\n out[8] = x * z * t + y * s;\n out[9] = y * z * t - x * s;\n out[10] = z * z * t + c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from the given angle around the X axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotateX(dest, dest, rad);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\n\nexport function fromXRotation(out, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad); // Perform axis-specific matrix multiplication\n\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = c;\n out[6] = s;\n out[7] = 0;\n out[8] = 0;\n out[9] = -s;\n out[10] = c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from the given angle around the Y axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotateY(dest, dest, rad);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\n\nexport function fromYRotation(out, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad); // Perform axis-specific matrix multiplication\n\n out[0] = c;\n out[1] = 0;\n out[2] = -s;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = s;\n out[9] = 0;\n out[10] = c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from the given angle around the Z axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotateZ(dest, dest, rad);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\n\nexport function fromZRotation(out, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad); // Perform axis-specific matrix multiplication\n\n out[0] = c;\n out[1] = s;\n out[2] = 0;\n out[3] = 0;\n out[4] = -s;\n out[5] = c;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from a quaternion rotation and vector translation\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, vec);\n * let quatMat = mat4.create();\n * quat4.toMat4(quat, quatMat);\n * mat4.multiply(dest, quatMat);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {quat4} q Rotation quaternion\n * @param {ReadonlyVec3} v Translation vector\n * @returns {mat4} out\n */\n\nexport function fromRotationTranslation(out, q, v) {\n // Quaternion math\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var xy = x * y2;\n var xz = x * z2;\n var yy = y * y2;\n var yz = y * z2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n out[0] = 1 - (yy + zz);\n out[1] = xy + wz;\n out[2] = xz - wy;\n out[3] = 0;\n out[4] = xy - wz;\n out[5] = 1 - (xx + zz);\n out[6] = yz + wx;\n out[7] = 0;\n out[8] = xz + wy;\n out[9] = yz - wx;\n out[10] = 1 - (xx + yy);\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n}\n/**\n * Creates a new mat4 from a dual quat.\n *\n * @param {mat4} out Matrix\n * @param {ReadonlyQuat2} a Dual Quaternion\n * @returns {mat4} mat4 receiving operation result\n */\n\nexport function fromQuat2(out, a) {\n var translation = new glMatrix.ARRAY_TYPE(3);\n var bx = -a[0],\n by = -a[1],\n bz = -a[2],\n bw = a[3],\n ax = a[4],\n ay = a[5],\n az = a[6],\n aw = a[7];\n var magnitude = bx * bx + by * by + bz * bz + bw * bw; //Only scale if it makes sense\n\n if (magnitude > 0) {\n translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2 / magnitude;\n translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2 / magnitude;\n translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2 / magnitude;\n } else {\n translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2;\n translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2;\n translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2;\n }\n\n fromRotationTranslation(out, a, translation);\n return out;\n}\n/**\n * Returns the translation vector component of a transformation\n * matrix. If a matrix is built with fromRotationTranslation,\n * the returned vector will be the same as the translation vector\n * originally supplied.\n * @param {vec3} out Vector to receive translation component\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\n * @return {vec3} out\n */\n\nexport function getTranslation(out, mat) {\n out[0] = mat[12];\n out[1] = mat[13];\n out[2] = mat[14];\n return out;\n}\n/**\n * Returns the scaling factor component of a transformation\n * matrix. If a matrix is built with fromRotationTranslationScale\n * with a normalized Quaternion paramter, the returned vector will be\n * the same as the scaling vector\n * originally supplied.\n * @param {vec3} out Vector to receive scaling factor component\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\n * @return {vec3} out\n */\n\nexport function getScaling(out, mat) {\n var m11 = mat[0];\n var m12 = mat[1];\n var m13 = mat[2];\n var m21 = mat[4];\n var m22 = mat[5];\n var m23 = mat[6];\n var m31 = mat[8];\n var m32 = mat[9];\n var m33 = mat[10];\n out[0] = Math.hypot(m11, m12, m13);\n out[1] = Math.hypot(m21, m22, m23);\n out[2] = Math.hypot(m31, m32, m33);\n return out;\n}\n/**\n * Returns a quaternion representing the rotational component\n * of a transformation matrix. If a matrix is built with\n * fromRotationTranslation, the returned quaternion will be the\n * same as the quaternion originally supplied.\n * @param {quat} out Quaternion to receive the rotation component\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\n * @return {quat} out\n */\n\nexport function getRotation(out, mat) {\n var scaling = new glMatrix.ARRAY_TYPE(3);\n getScaling(scaling, mat);\n var is1 = 1 / scaling[0];\n var is2 = 1 / scaling[1];\n var is3 = 1 / scaling[2];\n var sm11 = mat[0] * is1;\n var sm12 = mat[1] * is2;\n var sm13 = mat[2] * is3;\n var sm21 = mat[4] * is1;\n var sm22 = mat[5] * is2;\n var sm23 = mat[6] * is3;\n var sm31 = mat[8] * is1;\n var sm32 = mat[9] * is2;\n var sm33 = mat[10] * is3;\n var trace = sm11 + sm22 + sm33;\n var S = 0;\n\n if (trace > 0) {\n S = Math.sqrt(trace + 1.0) * 2;\n out[3] = 0.25 * S;\n out[0] = (sm23 - sm32) / S;\n out[1] = (sm31 - sm13) / S;\n out[2] = (sm12 - sm21) / S;\n } else if (sm11 > sm22 && sm11 > sm33) {\n S = Math.sqrt(1.0 + sm11 - sm22 - sm33) * 2;\n out[3] = (sm23 - sm32) / S;\n out[0] = 0.25 * S;\n out[1] = (sm12 + sm21) / S;\n out[2] = (sm31 + sm13) / S;\n } else if (sm22 > sm33) {\n S = Math.sqrt(1.0 + sm22 - sm11 - sm33) * 2;\n out[3] = (sm31 - sm13) / S;\n out[0] = (sm12 + sm21) / S;\n out[1] = 0.25 * S;\n out[2] = (sm23 + sm32) / S;\n } else {\n S = Math.sqrt(1.0 + sm33 - sm11 - sm22) * 2;\n out[3] = (sm12 - sm21) / S;\n out[0] = (sm31 + sm13) / S;\n out[1] = (sm23 + sm32) / S;\n out[2] = 0.25 * S;\n }\n\n return out;\n}\n/**\n * Creates a matrix from a quaternion rotation, vector translation and vector scale\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, vec);\n * let quatMat = mat4.create();\n * quat4.toMat4(quat, quatMat);\n * mat4.multiply(dest, quatMat);\n * mat4.scale(dest, scale)\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {quat4} q Rotation quaternion\n * @param {ReadonlyVec3} v Translation vector\n * @param {ReadonlyVec3} s Scaling vector\n * @returns {mat4} out\n */\n\nexport function fromRotationTranslationScale(out, q, v, s) {\n // Quaternion math\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var xy = x * y2;\n var xz = x * z2;\n var yy = y * y2;\n var yz = y * z2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n var sx = s[0];\n var sy = s[1];\n var sz = s[2];\n out[0] = (1 - (yy + zz)) * sx;\n out[1] = (xy + wz) * sx;\n out[2] = (xz - wy) * sx;\n out[3] = 0;\n out[4] = (xy - wz) * sy;\n out[5] = (1 - (xx + zz)) * sy;\n out[6] = (yz + wx) * sy;\n out[7] = 0;\n out[8] = (xz + wy) * sz;\n out[9] = (yz - wx) * sz;\n out[10] = (1 - (xx + yy)) * sz;\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from a quaternion rotation, vector translation and vector scale, rotating and scaling around the given origin\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, vec);\n * mat4.translate(dest, origin);\n * let quatMat = mat4.create();\n * quat4.toMat4(quat, quatMat);\n * mat4.multiply(dest, quatMat);\n * mat4.scale(dest, scale)\n * mat4.translate(dest, negativeOrigin);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {quat4} q Rotation quaternion\n * @param {ReadonlyVec3} v Translation vector\n * @param {ReadonlyVec3} s Scaling vector\n * @param {ReadonlyVec3} o The origin vector around which to scale and rotate\n * @returns {mat4} out\n */\n\nexport function fromRotationTranslationScaleOrigin(out, q, v, s, o) {\n // Quaternion math\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var xy = x * y2;\n var xz = x * z2;\n var yy = y * y2;\n var yz = y * z2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n var sx = s[0];\n var sy = s[1];\n var sz = s[2];\n var ox = o[0];\n var oy = o[1];\n var oz = o[2];\n var out0 = (1 - (yy + zz)) * sx;\n var out1 = (xy + wz) * sx;\n var out2 = (xz - wy) * sx;\n var out4 = (xy - wz) * sy;\n var out5 = (1 - (xx + zz)) * sy;\n var out6 = (yz + wx) * sy;\n var out8 = (xz + wy) * sz;\n var out9 = (yz - wx) * sz;\n var out10 = (1 - (xx + yy)) * sz;\n out[0] = out0;\n out[1] = out1;\n out[2] = out2;\n out[3] = 0;\n out[4] = out4;\n out[5] = out5;\n out[6] = out6;\n out[7] = 0;\n out[8] = out8;\n out[9] = out9;\n out[10] = out10;\n out[11] = 0;\n out[12] = v[0] + ox - (out0 * ox + out4 * oy + out8 * oz);\n out[13] = v[1] + oy - (out1 * ox + out5 * oy + out9 * oz);\n out[14] = v[2] + oz - (out2 * ox + out6 * oy + out10 * oz);\n out[15] = 1;\n return out;\n}\n/**\n * Calculates a 4x4 matrix from the given quaternion\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {ReadonlyQuat} q Quaternion to create matrix from\n *\n * @returns {mat4} out\n */\n\nexport function fromQuat(out, q) {\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var yx = y * x2;\n var yy = y * y2;\n var zx = z * x2;\n var zy = z * y2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n out[0] = 1 - yy - zz;\n out[1] = yx + wz;\n out[2] = zx - wy;\n out[3] = 0;\n out[4] = yx - wz;\n out[5] = 1 - xx - zz;\n out[6] = zy + wx;\n out[7] = 0;\n out[8] = zx + wy;\n out[9] = zy - wx;\n out[10] = 1 - xx - yy;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Generates a frustum matrix with the given bounds\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {Number} left Left bound of the frustum\n * @param {Number} right Right bound of the frustum\n * @param {Number} bottom Bottom bound of the frustum\n * @param {Number} top Top bound of the frustum\n * @param {Number} near Near bound of the frustum\n * @param {Number} far Far bound of the frustum\n * @returns {mat4} out\n */\n\nexport function frustum(out, left, right, bottom, top, near, far) {\n var rl = 1 / (right - left);\n var tb = 1 / (top - bottom);\n var nf = 1 / (near - far);\n out[0] = near * 2 * rl;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = near * 2 * tb;\n out[6] = 0;\n out[7] = 0;\n out[8] = (right + left) * rl;\n out[9] = (top + bottom) * tb;\n out[10] = (far + near) * nf;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[14] = far * near * 2 * nf;\n out[15] = 0;\n return out;\n}\n/**\n * Generates a perspective projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],\n * which matches WebGL/OpenGL's clip volume.\n * Passing null/undefined/no value for far will generate infinite projection matrix.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} fovy Vertical field of view in radians\n * @param {number} aspect Aspect ratio. typically viewport width/height\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum, can be null or Infinity\n * @returns {mat4} out\n */\n\nexport function perspectiveNO(out, fovy, aspect, near, far) {\n var f = 1.0 / Math.tan(fovy / 2),\n nf;\n out[0] = f / aspect;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = f;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[15] = 0;\n\n if (far != null && far !== Infinity) {\n nf = 1 / (near - far);\n out[10] = (far + near) * nf;\n out[14] = 2 * far * near * nf;\n } else {\n out[10] = -1;\n out[14] = -2 * near;\n }\n\n return out;\n}\n/**\n * Alias for {@link mat4.perspectiveNO}\n * @function\n */\n\nexport var perspective = perspectiveNO;\n/**\n * Generates a perspective projection matrix suitable for WebGPU with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],\n * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.\n * Passing null/undefined/no value for far will generate infinite projection matrix.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} fovy Vertical field of view in radians\n * @param {number} aspect Aspect ratio. typically viewport width/height\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum, can be null or Infinity\n * @returns {mat4} out\n */\n\nexport function perspectiveZO(out, fovy, aspect, near, far) {\n var f = 1.0 / Math.tan(fovy / 2),\n nf;\n out[0] = f / aspect;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = f;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[15] = 0;\n\n if (far != null && far !== Infinity) {\n nf = 1 / (near - far);\n out[10] = far * nf;\n out[14] = far * near * nf;\n } else {\n out[10] = -1;\n out[14] = -near;\n }\n\n return out;\n}\n/**\n * Generates a perspective projection matrix with the given field of view.\n * This is primarily useful for generating projection matrices to be used\n * with the still experiemental WebVR API.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {Object} fov Object containing the following values: upDegrees, downDegrees, leftDegrees, rightDegrees\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\n\nexport function perspectiveFromFieldOfView(out, fov, near, far) {\n var upTan = Math.tan(fov.upDegrees * Math.PI / 180.0);\n var downTan = Math.tan(fov.downDegrees * Math.PI / 180.0);\n var leftTan = Math.tan(fov.leftDegrees * Math.PI / 180.0);\n var rightTan = Math.tan(fov.rightDegrees * Math.PI / 180.0);\n var xScale = 2.0 / (leftTan + rightTan);\n var yScale = 2.0 / (upTan + downTan);\n out[0] = xScale;\n out[1] = 0.0;\n out[2] = 0.0;\n out[3] = 0.0;\n out[4] = 0.0;\n out[5] = yScale;\n out[6] = 0.0;\n out[7] = 0.0;\n out[8] = -((leftTan - rightTan) * xScale * 0.5);\n out[9] = (upTan - downTan) * yScale * 0.5;\n out[10] = far / (near - far);\n out[11] = -1.0;\n out[12] = 0.0;\n out[13] = 0.0;\n out[14] = far * near / (near - far);\n out[15] = 0.0;\n return out;\n}\n/**\n * Generates a orthogonal projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],\n * which matches WebGL/OpenGL's clip volume.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} left Left bound of the frustum\n * @param {number} right Right bound of the frustum\n * @param {number} bottom Bottom bound of the frustum\n * @param {number} top Top bound of the frustum\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\n\nexport function orthoNO(out, left, right, bottom, top, near, far) {\n var lr = 1 / (left - right);\n var bt = 1 / (bottom - top);\n var nf = 1 / (near - far);\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 2 * nf;\n out[11] = 0;\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = (far + near) * nf;\n out[15] = 1;\n return out;\n}\n/**\n * Alias for {@link mat4.orthoNO}\n * @function\n */\n\nexport var ortho = orthoNO;\n/**\n * Generates a orthogonal projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],\n * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} left Left bound of the frustum\n * @param {number} right Right bound of the frustum\n * @param {number} bottom Bottom bound of the frustum\n * @param {number} top Top bound of the frustum\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\n\nexport function orthoZO(out, left, right, bottom, top, near, far) {\n var lr = 1 / (left - right);\n var bt = 1 / (bottom - top);\n var nf = 1 / (near - far);\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = nf;\n out[11] = 0;\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = near * nf;\n out[15] = 1;\n return out;\n}\n/**\n * Generates a look-at matrix with the given eye position, focal point, and up axis.\n * If you want a matrix that actually makes an object look at another object, you should use targetTo instead.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {ReadonlyVec3} eye Position of the viewer\n * @param {ReadonlyVec3} center Point the viewer is looking at\n * @param {ReadonlyVec3} up vec3 pointing up\n * @returns {mat4} out\n */\n\nexport function lookAt(out, eye, center, up) {\n var x0, x1, x2, y0, y1, y2, z0, z1, z2, len;\n var eyex = eye[0];\n var eyey = eye[1];\n var eyez = eye[2];\n var upx = up[0];\n var upy = up[1];\n var upz = up[2];\n var centerx = center[0];\n var centery = center[1];\n var centerz = center[2];\n\n if (Math.abs(eyex - centerx) < glMatrix.EPSILON && Math.abs(eyey - centery) < glMatrix.EPSILON && Math.abs(eyez - centerz) < glMatrix.EPSILON) {\n return identity(out);\n }\n\n z0 = eyex - centerx;\n z1 = eyey - centery;\n z2 = eyez - centerz;\n len = 1 / Math.hypot(z0, z1, z2);\n z0 *= len;\n z1 *= len;\n z2 *= len;\n x0 = upy * z2 - upz * z1;\n x1 = upz * z0 - upx * z2;\n x2 = upx * z1 - upy * z0;\n len = Math.hypot(x0, x1, x2);\n\n if (!len) {\n x0 = 0;\n x1 = 0;\n x2 = 0;\n } else {\n len = 1 / len;\n x0 *= len;\n x1 *= len;\n x2 *= len;\n }\n\n y0 = z1 * x2 - z2 * x1;\n y1 = z2 * x0 - z0 * x2;\n y2 = z0 * x1 - z1 * x0;\n len = Math.hypot(y0, y1, y2);\n\n if (!len) {\n y0 = 0;\n y1 = 0;\n y2 = 0;\n } else {\n len = 1 / len;\n y0 *= len;\n y1 *= len;\n y2 *= len;\n }\n\n out[0] = x0;\n out[1] = y0;\n out[2] = z0;\n out[3] = 0;\n out[4] = x1;\n out[5] = y1;\n out[6] = z1;\n out[7] = 0;\n out[8] = x2;\n out[9] = y2;\n out[10] = z2;\n out[11] = 0;\n out[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);\n out[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);\n out[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);\n out[15] = 1;\n return out;\n}\n/**\n * Generates a matrix that makes something look at something else.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {ReadonlyVec3} eye Position of the viewer\n * @param {ReadonlyVec3} center Point the viewer is looking at\n * @param {ReadonlyVec3} up vec3 pointing up\n * @returns {mat4} out\n */\n\nexport function targetTo(out, eye, target, up) {\n var eyex = eye[0],\n eyey = eye[1],\n eyez = eye[2],\n upx = up[0],\n upy = up[1],\n upz = up[2];\n var z0 = eyex - target[0],\n z1 = eyey - target[1],\n z2 = eyez - target[2];\n var len = z0 * z0 + z1 * z1 + z2 * z2;\n\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n z0 *= len;\n z1 *= len;\n z2 *= len;\n }\n\n var x0 = upy * z2 - upz * z1,\n x1 = upz * z0 - upx * z2,\n x2 = upx * z1 - upy * z0;\n len = x0 * x0 + x1 * x1 + x2 * x2;\n\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n x0 *= len;\n x1 *= len;\n x2 *= len;\n }\n\n out[0] = x0;\n out[1] = x1;\n out[2] = x2;\n out[3] = 0;\n out[4] = z1 * x2 - z2 * x1;\n out[5] = z2 * x0 - z0 * x2;\n out[6] = z0 * x1 - z1 * x0;\n out[7] = 0;\n out[8] = z0;\n out[9] = z1;\n out[10] = z2;\n out[11] = 0;\n out[12] = eyex;\n out[13] = eyey;\n out[14] = eyez;\n out[15] = 1;\n return out;\n}\n/**\n * Returns a string representation of a mat4\n *\n * @param {ReadonlyMat4} a matrix to represent as a string\n * @returns {String} string representation of the matrix\n */\n\nexport function str(a) {\n return \"mat4(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \", \" + a[4] + \", \" + a[5] + \", \" + a[6] + \", \" + a[7] + \", \" + a[8] + \", \" + a[9] + \", \" + a[10] + \", \" + a[11] + \", \" + a[12] + \", \" + a[13] + \", \" + a[14] + \", \" + a[15] + \")\";\n}\n/**\n * Returns Frobenius norm of a mat4\n *\n * @param {ReadonlyMat4} a the matrix to calculate Frobenius norm of\n * @returns {Number} Frobenius norm\n */\n\nexport function frob(a) {\n return Math.hypot(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15]);\n}\n/**\n * Adds two mat4's\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @returns {mat4} out\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n out[4] = a[4] + b[4];\n out[5] = a[5] + b[5];\n out[6] = a[6] + b[6];\n out[7] = a[7] + b[7];\n out[8] = a[8] + b[8];\n out[9] = a[9] + b[9];\n out[10] = a[10] + b[10];\n out[11] = a[11] + b[11];\n out[12] = a[12] + b[12];\n out[13] = a[13] + b[13];\n out[14] = a[14] + b[14];\n out[15] = a[15] + b[15];\n return out;\n}\n/**\n * Subtracts matrix b from matrix a\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @returns {mat4} out\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n out[4] = a[4] - b[4];\n out[5] = a[5] - b[5];\n out[6] = a[6] - b[6];\n out[7] = a[7] - b[7];\n out[8] = a[8] - b[8];\n out[9] = a[9] - b[9];\n out[10] = a[10] - b[10];\n out[11] = a[11] - b[11];\n out[12] = a[12] - b[12];\n out[13] = a[13] - b[13];\n out[14] = a[14] - b[14];\n out[15] = a[15] - b[15];\n return out;\n}\n/**\n * Multiply each element of the matrix by a scalar.\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to scale\n * @param {Number} b amount to scale the matrix's elements by\n * @returns {mat4} out\n */\n\nexport function multiplyScalar(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n out[4] = a[4] * b;\n out[5] = a[5] * b;\n out[6] = a[6] * b;\n out[7] = a[7] * b;\n out[8] = a[8] * b;\n out[9] = a[9] * b;\n out[10] = a[10] * b;\n out[11] = a[11] * b;\n out[12] = a[12] * b;\n out[13] = a[13] * b;\n out[14] = a[14] * b;\n out[15] = a[15] * b;\n return out;\n}\n/**\n * Adds two mat4's after multiplying each element of the second operand by a scalar value.\n *\n * @param {mat4} out the receiving vector\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @param {Number} scale the amount to scale b's elements by before adding\n * @returns {mat4} out\n */\n\nexport function multiplyScalarAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n out[4] = a[4] + b[4] * scale;\n out[5] = a[5] + b[5] * scale;\n out[6] = a[6] + b[6] * scale;\n out[7] = a[7] + b[7] * scale;\n out[8] = a[8] + b[8] * scale;\n out[9] = a[9] + b[9] * scale;\n out[10] = a[10] + b[10] * scale;\n out[11] = a[11] + b[11] * scale;\n out[12] = a[12] + b[12] * scale;\n out[13] = a[13] + b[13] * scale;\n out[14] = a[14] + b[14] * scale;\n out[15] = a[15] + b[15] * scale;\n return out;\n}\n/**\n * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyMat4} a The first matrix.\n * @param {ReadonlyMat4} b The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n */\n\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7] && a[8] === b[8] && a[9] === b[9] && a[10] === b[10] && a[11] === b[11] && a[12] === b[12] && a[13] === b[13] && a[14] === b[14] && a[15] === b[15];\n}\n/**\n * Returns whether or not the matrices have approximately the same elements in the same position.\n *\n * @param {ReadonlyMat4} a The first matrix.\n * @param {ReadonlyMat4} b The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3];\n var a4 = a[4],\n a5 = a[5],\n a6 = a[6],\n a7 = a[7];\n var a8 = a[8],\n a9 = a[9],\n a10 = a[10],\n a11 = a[11];\n var a12 = a[12],\n a13 = a[13],\n a14 = a[14],\n a15 = a[15];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3];\n var b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7];\n var b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11];\n var b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7)) && Math.abs(a8 - b8) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a8), Math.abs(b8)) && Math.abs(a9 - b9) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a9), Math.abs(b9)) && Math.abs(a10 - b10) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a10), Math.abs(b10)) && Math.abs(a11 - b11) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a11), Math.abs(b11)) && Math.abs(a12 - b12) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a12), Math.abs(b12)) && Math.abs(a13 - b13) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a13), Math.abs(b13)) && Math.abs(a14 - b14) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a14), Math.abs(b14)) && Math.abs(a15 - b15) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a15), Math.abs(b15));\n}\n/**\n * Alias for {@link mat4.multiply}\n * @function\n */\n\nexport var mul = multiply;\n/**\n * Alias for {@link mat4.subtract}\n * @function\n */\n\nexport var sub = subtract;","import * as glMatrix from \"./common.js\";\nimport * as mat3 from \"./mat3.js\";\nimport * as vec3 from \"./vec3.js\";\nimport * as vec4 from \"./vec4.js\";\n/**\n * Quaternion\n * @module quat\n */\n\n/**\n * Creates a new identity quat\n *\n * @returns {quat} a new quaternion\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(4);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n }\n\n out[3] = 1;\n return out;\n}\n/**\n * Set a quat to the identity quaternion\n *\n * @param {quat} out the receiving quaternion\n * @returns {quat} out\n */\n\nexport function identity(out) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n return out;\n}\n/**\n * Sets a quat from the given angle and rotation axis,\n * then returns it.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyVec3} axis the axis around which to rotate\n * @param {Number} rad the angle in radians\n * @returns {quat} out\n **/\n\nexport function setAxisAngle(out, axis, rad) {\n rad = rad * 0.5;\n var s = Math.sin(rad);\n out[0] = s * axis[0];\n out[1] = s * axis[1];\n out[2] = s * axis[2];\n out[3] = Math.cos(rad);\n return out;\n}\n/**\n * Gets the rotation axis and angle for a given\n * quaternion. If a quaternion is created with\n * setAxisAngle, this method will return the same\n * values as providied in the original parameter list\n * OR functionally equivalent values.\n * Example: The quaternion formed by axis [0, 0, 1] and\n * angle -90 is the same as the quaternion formed by\n * [0, 0, 1] and 270. This method favors the latter.\n * @param {vec3} out_axis Vector receiving the axis of rotation\n * @param {ReadonlyQuat} q Quaternion to be decomposed\n * @return {Number} Angle, in radians, of the rotation\n */\n\nexport function getAxisAngle(out_axis, q) {\n var rad = Math.acos(q[3]) * 2.0;\n var s = Math.sin(rad / 2.0);\n\n if (s > glMatrix.EPSILON) {\n out_axis[0] = q[0] / s;\n out_axis[1] = q[1] / s;\n out_axis[2] = q[2] / s;\n } else {\n // If s is zero, return any axis (no rotation - axis does not matter)\n out_axis[0] = 1;\n out_axis[1] = 0;\n out_axis[2] = 0;\n }\n\n return rad;\n}\n/**\n * Gets the angular distance between two unit quaternions\n *\n * @param {ReadonlyQuat} a Origin unit quaternion\n * @param {ReadonlyQuat} b Destination unit quaternion\n * @return {Number} Angle, in radians, between the two quaternions\n */\n\nexport function getAngle(a, b) {\n var dotproduct = dot(a, b);\n return Math.acos(2 * dotproduct * dotproduct - 1);\n}\n/**\n * Multiplies two quat's\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a the first operand\n * @param {ReadonlyQuat} b the second operand\n * @returns {quat} out\n */\n\nexport function multiply(out, a, b) {\n var ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n var bx = b[0],\n by = b[1],\n bz = b[2],\n bw = b[3];\n out[0] = ax * bw + aw * bx + ay * bz - az * by;\n out[1] = ay * bw + aw * by + az * bx - ax * bz;\n out[2] = az * bw + aw * bz + ax * by - ay * bx;\n out[3] = aw * bw - ax * bx - ay * by - az * bz;\n return out;\n}\n/**\n * Rotates a quaternion by the given angle about the X axis\n *\n * @param {quat} out quat receiving operation result\n * @param {ReadonlyQuat} a quat to rotate\n * @param {number} rad angle (in radians) to rotate\n * @returns {quat} out\n */\n\nexport function rotateX(out, a, rad) {\n rad *= 0.5;\n var ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n var bx = Math.sin(rad),\n bw = Math.cos(rad);\n out[0] = ax * bw + aw * bx;\n out[1] = ay * bw + az * bx;\n out[2] = az * bw - ay * bx;\n out[3] = aw * bw - ax * bx;\n return out;\n}\n/**\n * Rotates a quaternion by the given angle about the Y axis\n *\n * @param {quat} out quat receiving operation result\n * @param {ReadonlyQuat} a quat to rotate\n * @param {number} rad angle (in radians) to rotate\n * @returns {quat} out\n */\n\nexport function rotateY(out, a, rad) {\n rad *= 0.5;\n var ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n var by = Math.sin(rad),\n bw = Math.cos(rad);\n out[0] = ax * bw - az * by;\n out[1] = ay * bw + aw * by;\n out[2] = az * bw + ax * by;\n out[3] = aw * bw - ay * by;\n return out;\n}\n/**\n * Rotates a quaternion by the given angle about the Z axis\n *\n * @param {quat} out quat receiving operation result\n * @param {ReadonlyQuat} a quat to rotate\n * @param {number} rad angle (in radians) to rotate\n * @returns {quat} out\n */\n\nexport function rotateZ(out, a, rad) {\n rad *= 0.5;\n var ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n var bz = Math.sin(rad),\n bw = Math.cos(rad);\n out[0] = ax * bw + ay * bz;\n out[1] = ay * bw - ax * bz;\n out[2] = az * bw + aw * bz;\n out[3] = aw * bw - az * bz;\n return out;\n}\n/**\n * Calculates the W component of a quat from the X, Y, and Z components.\n * Assumes that quaternion is 1 unit in length.\n * Any existing W component will be ignored.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quat to calculate W component of\n * @returns {quat} out\n */\n\nexport function calculateW(out, a) {\n var x = a[0],\n y = a[1],\n z = a[2];\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = Math.sqrt(Math.abs(1.0 - x * x - y * y - z * z));\n return out;\n}\n/**\n * Calculate the exponential of a unit quaternion.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quat to calculate the exponential of\n * @returns {quat} out\n */\n\nexport function exp(out, a) {\n var x = a[0],\n y = a[1],\n z = a[2],\n w = a[3];\n var r = Math.sqrt(x * x + y * y + z * z);\n var et = Math.exp(w);\n var s = r > 0 ? et * Math.sin(r) / r : 0;\n out[0] = x * s;\n out[1] = y * s;\n out[2] = z * s;\n out[3] = et * Math.cos(r);\n return out;\n}\n/**\n * Calculate the natural logarithm of a unit quaternion.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quat to calculate the exponential of\n * @returns {quat} out\n */\n\nexport function ln(out, a) {\n var x = a[0],\n y = a[1],\n z = a[2],\n w = a[3];\n var r = Math.sqrt(x * x + y * y + z * z);\n var t = r > 0 ? Math.atan2(r, w) / r : 0;\n out[0] = x * t;\n out[1] = y * t;\n out[2] = z * t;\n out[3] = 0.5 * Math.log(x * x + y * y + z * z + w * w);\n return out;\n}\n/**\n * Calculate the scalar power of a unit quaternion.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quat to calculate the exponential of\n * @param {Number} b amount to scale the quaternion by\n * @returns {quat} out\n */\n\nexport function pow(out, a, b) {\n ln(out, a);\n scale(out, out, b);\n exp(out, out);\n return out;\n}\n/**\n * Performs a spherical linear interpolation between two quat\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a the first operand\n * @param {ReadonlyQuat} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {quat} out\n */\n\nexport function slerp(out, a, b, t) {\n // benchmarks:\n // http://jsperf.com/quaternion-slerp-implementations\n var ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n var bx = b[0],\n by = b[1],\n bz = b[2],\n bw = b[3];\n var omega, cosom, sinom, scale0, scale1; // calc cosine\n\n cosom = ax * bx + ay * by + az * bz + aw * bw; // adjust signs (if necessary)\n\n if (cosom < 0.0) {\n cosom = -cosom;\n bx = -bx;\n by = -by;\n bz = -bz;\n bw = -bw;\n } // calculate coefficients\n\n\n if (1.0 - cosom > glMatrix.EPSILON) {\n // standard case (slerp)\n omega = Math.acos(cosom);\n sinom = Math.sin(omega);\n scale0 = Math.sin((1.0 - t) * omega) / sinom;\n scale1 = Math.sin(t * omega) / sinom;\n } else {\n // \"from\" and \"to\" quaternions are very close\n // ... so we can do a linear interpolation\n scale0 = 1.0 - t;\n scale1 = t;\n } // calculate final values\n\n\n out[0] = scale0 * ax + scale1 * bx;\n out[1] = scale0 * ay + scale1 * by;\n out[2] = scale0 * az + scale1 * bz;\n out[3] = scale0 * aw + scale1 * bw;\n return out;\n}\n/**\n * Generates a random unit quaternion\n *\n * @param {quat} out the receiving quaternion\n * @returns {quat} out\n */\n\nexport function random(out) {\n // Implementation of http://planning.cs.uiuc.edu/node198.html\n // TODO: Calling random 3 times is probably not the fastest solution\n var u1 = glMatrix.RANDOM();\n var u2 = glMatrix.RANDOM();\n var u3 = glMatrix.RANDOM();\n var sqrt1MinusU1 = Math.sqrt(1 - u1);\n var sqrtU1 = Math.sqrt(u1);\n out[0] = sqrt1MinusU1 * Math.sin(2.0 * Math.PI * u2);\n out[1] = sqrt1MinusU1 * Math.cos(2.0 * Math.PI * u2);\n out[2] = sqrtU1 * Math.sin(2.0 * Math.PI * u3);\n out[3] = sqrtU1 * Math.cos(2.0 * Math.PI * u3);\n return out;\n}\n/**\n * Calculates the inverse of a quat\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quat to calculate inverse of\n * @returns {quat} out\n */\n\nexport function invert(out, a) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3];\n var dot = a0 * a0 + a1 * a1 + a2 * a2 + a3 * a3;\n var invDot = dot ? 1.0 / dot : 0; // TODO: Would be faster to return [0,0,0,0] immediately if dot == 0\n\n out[0] = -a0 * invDot;\n out[1] = -a1 * invDot;\n out[2] = -a2 * invDot;\n out[3] = a3 * invDot;\n return out;\n}\n/**\n * Calculates the conjugate of a quat\n * If the quaternion is normalized, this function is faster than quat.inverse and produces the same result.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quat to calculate conjugate of\n * @returns {quat} out\n */\n\nexport function conjugate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n out[3] = a[3];\n return out;\n}\n/**\n * Creates a quaternion from the given 3x3 rotation matrix.\n *\n * NOTE: The resultant quaternion is not normalized, so you should be sure\n * to renormalize the quaternion yourself where necessary.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyMat3} m rotation matrix\n * @returns {quat} out\n * @function\n */\n\nexport function fromMat3(out, m) {\n // Algorithm in Ken Shoemake's article in 1987 SIGGRAPH course notes\n // article \"Quaternion Calculus and Fast Animation\".\n var fTrace = m[0] + m[4] + m[8];\n var fRoot;\n\n if (fTrace > 0.0) {\n // |w| > 1/2, may as well choose w > 1/2\n fRoot = Math.sqrt(fTrace + 1.0); // 2w\n\n out[3] = 0.5 * fRoot;\n fRoot = 0.5 / fRoot; // 1/(4w)\n\n out[0] = (m[5] - m[7]) * fRoot;\n out[1] = (m[6] - m[2]) * fRoot;\n out[2] = (m[1] - m[3]) * fRoot;\n } else {\n // |w| <= 1/2\n var i = 0;\n if (m[4] > m[0]) i = 1;\n if (m[8] > m[i * 3 + i]) i = 2;\n var j = (i + 1) % 3;\n var k = (i + 2) % 3;\n fRoot = Math.sqrt(m[i * 3 + i] - m[j * 3 + j] - m[k * 3 + k] + 1.0);\n out[i] = 0.5 * fRoot;\n fRoot = 0.5 / fRoot;\n out[3] = (m[j * 3 + k] - m[k * 3 + j]) * fRoot;\n out[j] = (m[j * 3 + i] + m[i * 3 + j]) * fRoot;\n out[k] = (m[k * 3 + i] + m[i * 3 + k]) * fRoot;\n }\n\n return out;\n}\n/**\n * Creates a quaternion from the given euler angle x, y, z.\n *\n * @param {quat} out the receiving quaternion\n * @param {x} Angle to rotate around X axis in degrees.\n * @param {y} Angle to rotate around Y axis in degrees.\n * @param {z} Angle to rotate around Z axis in degrees.\n * @returns {quat} out\n * @function\n */\n\nexport function fromEuler(out, x, y, z) {\n var halfToRad = 0.5 * Math.PI / 180.0;\n x *= halfToRad;\n y *= halfToRad;\n z *= halfToRad;\n var sx = Math.sin(x);\n var cx = Math.cos(x);\n var sy = Math.sin(y);\n var cy = Math.cos(y);\n var sz = Math.sin(z);\n var cz = Math.cos(z);\n out[0] = sx * cy * cz - cx * sy * sz;\n out[1] = cx * sy * cz + sx * cy * sz;\n out[2] = cx * cy * sz - sx * sy * cz;\n out[3] = cx * cy * cz + sx * sy * sz;\n return out;\n}\n/**\n * Returns a string representation of a quatenion\n *\n * @param {ReadonlyQuat} a vector to represent as a string\n * @returns {String} string representation of the vector\n */\n\nexport function str(a) {\n return \"quat(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \")\";\n}\n/**\n * Creates a new quat initialized with values from an existing quaternion\n *\n * @param {ReadonlyQuat} a quaternion to clone\n * @returns {quat} a new quaternion\n * @function\n */\n\nexport var clone = vec4.clone;\n/**\n * Creates a new quat initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {quat} a new quaternion\n * @function\n */\n\nexport var fromValues = vec4.fromValues;\n/**\n * Copy the values from one quat to another\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a the source quaternion\n * @returns {quat} out\n * @function\n */\n\nexport var copy = vec4.copy;\n/**\n * Set the components of a quat to the given values\n *\n * @param {quat} out the receiving quaternion\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {quat} out\n * @function\n */\n\nexport var set = vec4.set;\n/**\n * Adds two quat's\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a the first operand\n * @param {ReadonlyQuat} b the second operand\n * @returns {quat} out\n * @function\n */\n\nexport var add = vec4.add;\n/**\n * Alias for {@link quat.multiply}\n * @function\n */\n\nexport var mul = multiply;\n/**\n * Scales a quat by a scalar number\n *\n * @param {quat} out the receiving vector\n * @param {ReadonlyQuat} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {quat} out\n * @function\n */\n\nexport var scale = vec4.scale;\n/**\n * Calculates the dot product of two quat's\n *\n * @param {ReadonlyQuat} a the first operand\n * @param {ReadonlyQuat} b the second operand\n * @returns {Number} dot product of a and b\n * @function\n */\n\nexport var dot = vec4.dot;\n/**\n * Performs a linear interpolation between two quat's\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a the first operand\n * @param {ReadonlyQuat} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {quat} out\n * @function\n */\n\nexport var lerp = vec4.lerp;\n/**\n * Calculates the length of a quat\n *\n * @param {ReadonlyQuat} a vector to calculate length of\n * @returns {Number} length of a\n */\n\nexport var length = vec4.length;\n/**\n * Alias for {@link quat.length}\n * @function\n */\n\nexport var len = length;\n/**\n * Calculates the squared length of a quat\n *\n * @param {ReadonlyQuat} a vector to calculate squared length of\n * @returns {Number} squared length of a\n * @function\n */\n\nexport var squaredLength = vec4.squaredLength;\n/**\n * Alias for {@link quat.squaredLength}\n * @function\n */\n\nexport var sqrLen = squaredLength;\n/**\n * Normalize a quat\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quaternion to normalize\n * @returns {quat} out\n * @function\n */\n\nexport var normalize = vec4.normalize;\n/**\n * Returns whether or not the quaternions have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyQuat} a The first quaternion.\n * @param {ReadonlyQuat} b The second quaternion.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport var exactEquals = vec4.exactEquals;\n/**\n * Returns whether or not the quaternions have approximately the same elements in the same position.\n *\n * @param {ReadonlyQuat} a The first vector.\n * @param {ReadonlyQuat} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport var equals = vec4.equals;\n/**\n * Sets a quaternion to represent the shortest rotation from one\n * vector to another.\n *\n * Both vectors are assumed to be unit length.\n *\n * @param {quat} out the receiving quaternion.\n * @param {ReadonlyVec3} a the initial vector\n * @param {ReadonlyVec3} b the destination vector\n * @returns {quat} out\n */\n\nexport var rotationTo = function () {\n var tmpvec3 = vec3.create();\n var xUnitVec3 = vec3.fromValues(1, 0, 0);\n var yUnitVec3 = vec3.fromValues(0, 1, 0);\n return function (out, a, b) {\n var dot = vec3.dot(a, b);\n\n if (dot < -0.999999) {\n vec3.cross(tmpvec3, xUnitVec3, a);\n if (vec3.len(tmpvec3) < 0.000001) vec3.cross(tmpvec3, yUnitVec3, a);\n vec3.normalize(tmpvec3, tmpvec3);\n setAxisAngle(out, tmpvec3, Math.PI);\n return out;\n } else if (dot > 0.999999) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n return out;\n } else {\n vec3.cross(tmpvec3, a, b);\n out[0] = tmpvec3[0];\n out[1] = tmpvec3[1];\n out[2] = tmpvec3[2];\n out[3] = 1 + dot;\n return normalize(out, out);\n }\n };\n}();\n/**\n * Performs a spherical linear interpolation with two control points\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a the first operand\n * @param {ReadonlyQuat} b the second operand\n * @param {ReadonlyQuat} c the third operand\n * @param {ReadonlyQuat} d the fourth operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {quat} out\n */\n\nexport var sqlerp = function () {\n var temp1 = create();\n var temp2 = create();\n return function (out, a, b, c, d, t) {\n slerp(temp1, a, d, t);\n slerp(temp2, b, c, t);\n slerp(out, temp1, temp2, 2 * t * (1 - t));\n return out;\n };\n}();\n/**\n * Sets the specified quaternion with values corresponding to the given\n * axes. Each axis is a vec3 and is expected to be unit length and\n * perpendicular to all other specified axes.\n *\n * @param {ReadonlyVec3} view the vector representing the viewing direction\n * @param {ReadonlyVec3} right the vector representing the local \"right\" direction\n * @param {ReadonlyVec3} up the vector representing the local \"up\" direction\n * @returns {quat} out\n */\n\nexport var setAxes = function () {\n var matr = mat3.create();\n return function (out, view, right, up) {\n matr[0] = right[0];\n matr[3] = right[1];\n matr[6] = right[2];\n matr[1] = up[0];\n matr[4] = up[1];\n matr[7] = up[2];\n matr[2] = -view[0];\n matr[5] = -view[1];\n matr[8] = -view[2];\n return normalize(out, fromMat3(out, matr));\n };\n}();","import * as glMatrix from \"./common.js\";\n/**\n * 2 Dimensional Vector\n * @module vec2\n */\n\n/**\n * Creates a new, empty vec2\n *\n * @returns {vec2} a new 2D vector\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(2);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n }\n\n return out;\n}\n/**\n * Creates a new vec2 initialized with values from an existing vector\n *\n * @param {ReadonlyVec2} a vector to clone\n * @returns {vec2} a new 2D vector\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(2);\n out[0] = a[0];\n out[1] = a[1];\n return out;\n}\n/**\n * Creates a new vec2 initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @returns {vec2} a new 2D vector\n */\n\nexport function fromValues(x, y) {\n var out = new glMatrix.ARRAY_TYPE(2);\n out[0] = x;\n out[1] = y;\n return out;\n}\n/**\n * Copy the values from one vec2 to another\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the source vector\n * @returns {vec2} out\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n return out;\n}\n/**\n * Set the components of a vec2 to the given values\n *\n * @param {vec2} out the receiving vector\n * @param {Number} x X component\n * @param {Number} y Y component\n * @returns {vec2} out\n */\n\nexport function set(out, x, y) {\n out[0] = x;\n out[1] = y;\n return out;\n}\n/**\n * Adds two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {vec2} out\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n return out;\n}\n/**\n * Subtracts vector b from vector a\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {vec2} out\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n return out;\n}\n/**\n * Multiplies two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {vec2} out\n */\n\nexport function multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n return out;\n}\n/**\n * Divides two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {vec2} out\n */\n\nexport function divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n return out;\n}\n/**\n * Math.ceil the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a vector to ceil\n * @returns {vec2} out\n */\n\nexport function ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n return out;\n}\n/**\n * Math.floor the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a vector to floor\n * @returns {vec2} out\n */\n\nexport function floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n return out;\n}\n/**\n * Returns the minimum of two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {vec2} out\n */\n\nexport function min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n return out;\n}\n/**\n * Returns the maximum of two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {vec2} out\n */\n\nexport function max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n return out;\n}\n/**\n * Math.round the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a vector to round\n * @returns {vec2} out\n */\n\nexport function round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n return out;\n}\n/**\n * Scales a vec2 by a scalar number\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec2} out\n */\n\nexport function scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n return out;\n}\n/**\n * Adds two vec2's after scaling the second operand by a scalar value\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @param {Number} scale the amount to scale b by before adding\n * @returns {vec2} out\n */\n\nexport function scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n return out;\n}\n/**\n * Calculates the euclidian distance between two vec2's\n *\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {Number} distance between a and b\n */\n\nexport function distance(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1];\n return Math.hypot(x, y);\n}\n/**\n * Calculates the squared euclidian distance between two vec2's\n *\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {Number} squared distance between a and b\n */\n\nexport function squaredDistance(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1];\n return x * x + y * y;\n}\n/**\n * Calculates the length of a vec2\n *\n * @param {ReadonlyVec2} a vector to calculate length of\n * @returns {Number} length of a\n */\n\nexport function length(a) {\n var x = a[0],\n y = a[1];\n return Math.hypot(x, y);\n}\n/**\n * Calculates the squared length of a vec2\n *\n * @param {ReadonlyVec2} a vector to calculate squared length of\n * @returns {Number} squared length of a\n */\n\nexport function squaredLength(a) {\n var x = a[0],\n y = a[1];\n return x * x + y * y;\n}\n/**\n * Negates the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a vector to negate\n * @returns {vec2} out\n */\n\nexport function negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n return out;\n}\n/**\n * Returns the inverse of the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a vector to invert\n * @returns {vec2} out\n */\n\nexport function inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n return out;\n}\n/**\n * Normalize a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a vector to normalize\n * @returns {vec2} out\n */\n\nexport function normalize(out, a) {\n var x = a[0],\n y = a[1];\n var len = x * x + y * y;\n\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n }\n\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n return out;\n}\n/**\n * Calculates the dot product of two vec2's\n *\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {Number} dot product of a and b\n */\n\nexport function dot(a, b) {\n return a[0] * b[0] + a[1] * b[1];\n}\n/**\n * Computes the cross product of two vec2's\n * Note that the cross product must by definition produce a 3D vector\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {vec3} out\n */\n\nexport function cross(out, a, b) {\n var z = a[0] * b[1] - a[1] * b[0];\n out[0] = out[1] = 0;\n out[2] = z;\n return out;\n}\n/**\n * Performs a linear interpolation between two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec2} out\n */\n\nexport function lerp(out, a, b, t) {\n var ax = a[0],\n ay = a[1];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n return out;\n}\n/**\n * Generates a random vector with the given scale\n *\n * @param {vec2} out the receiving vector\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\n * @returns {vec2} out\n */\n\nexport function random(out, scale) {\n scale = scale || 1.0;\n var r = glMatrix.RANDOM() * 2.0 * Math.PI;\n out[0] = Math.cos(r) * scale;\n out[1] = Math.sin(r) * scale;\n return out;\n}\n/**\n * Transforms the vec2 with a mat2\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the vector to transform\n * @param {ReadonlyMat2} m matrix to transform with\n * @returns {vec2} out\n */\n\nexport function transformMat2(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[2] * y;\n out[1] = m[1] * x + m[3] * y;\n return out;\n}\n/**\n * Transforms the vec2 with a mat2d\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the vector to transform\n * @param {ReadonlyMat2d} m matrix to transform with\n * @returns {vec2} out\n */\n\nexport function transformMat2d(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[2] * y + m[4];\n out[1] = m[1] * x + m[3] * y + m[5];\n return out;\n}\n/**\n * Transforms the vec2 with a mat3\n * 3rd vector component is implicitly '1'\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the vector to transform\n * @param {ReadonlyMat3} m matrix to transform with\n * @returns {vec2} out\n */\n\nexport function transformMat3(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[3] * y + m[6];\n out[1] = m[1] * x + m[4] * y + m[7];\n return out;\n}\n/**\n * Transforms the vec2 with a mat4\n * 3rd vector component is implicitly '0'\n * 4th vector component is implicitly '1'\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the vector to transform\n * @param {ReadonlyMat4} m matrix to transform with\n * @returns {vec2} out\n */\n\nexport function transformMat4(out, a, m) {\n var x = a[0];\n var y = a[1];\n out[0] = m[0] * x + m[4] * y + m[12];\n out[1] = m[1] * x + m[5] * y + m[13];\n return out;\n}\n/**\n * Rotate a 2D vector\n * @param {vec2} out The receiving vec2\n * @param {ReadonlyVec2} a The vec2 point to rotate\n * @param {ReadonlyVec2} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @returns {vec2} out\n */\n\nexport function rotate(out, a, b, rad) {\n //Translate point to the origin\n var p0 = a[0] - b[0],\n p1 = a[1] - b[1],\n sinC = Math.sin(rad),\n cosC = Math.cos(rad); //perform rotation and translate to correct position\n\n out[0] = p0 * cosC - p1 * sinC + b[0];\n out[1] = p0 * sinC + p1 * cosC + b[1];\n return out;\n}\n/**\n * Get the angle between two 2D vectors\n * @param {ReadonlyVec2} a The first operand\n * @param {ReadonlyVec2} b The second operand\n * @returns {Number} The angle in radians\n */\n\nexport function angle(a, b) {\n var x1 = a[0],\n y1 = a[1],\n x2 = b[0],\n y2 = b[1],\n // mag is the product of the magnitudes of a and b\n mag = Math.sqrt(x1 * x1 + y1 * y1) * Math.sqrt(x2 * x2 + y2 * y2),\n // mag &&.. short circuits if mag == 0\n cosine = mag && (x1 * x2 + y1 * y2) / mag; // Math.min(Math.max(cosine, -1), 1) clamps the cosine between -1 and 1\n\n return Math.acos(Math.min(Math.max(cosine, -1), 1));\n}\n/**\n * Set the components of a vec2 to zero\n *\n * @param {vec2} out the receiving vector\n * @returns {vec2} out\n */\n\nexport function zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n return out;\n}\n/**\n * Returns a string representation of a vector\n *\n * @param {ReadonlyVec2} a vector to represent as a string\n * @returns {String} string representation of the vector\n */\n\nexport function str(a) {\n return \"vec2(\" + a[0] + \", \" + a[1] + \")\";\n}\n/**\n * Returns whether or not the vectors exactly have the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyVec2} a The first vector.\n * @param {ReadonlyVec2} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1];\n}\n/**\n * Returns whether or not the vectors have approximately the same elements in the same position.\n *\n * @param {ReadonlyVec2} a The first vector.\n * @param {ReadonlyVec2} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1];\n var b0 = b[0],\n b1 = b[1];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1));\n}\n/**\n * Alias for {@link vec2.length}\n * @function\n */\n\nexport var len = length;\n/**\n * Alias for {@link vec2.subtract}\n * @function\n */\n\nexport var sub = subtract;\n/**\n * Alias for {@link vec2.multiply}\n * @function\n */\n\nexport var mul = multiply;\n/**\n * Alias for {@link vec2.divide}\n * @function\n */\n\nexport var div = divide;\n/**\n * Alias for {@link vec2.distance}\n * @function\n */\n\nexport var dist = distance;\n/**\n * Alias for {@link vec2.squaredDistance}\n * @function\n */\n\nexport var sqrDist = squaredDistance;\n/**\n * Alias for {@link vec2.squaredLength}\n * @function\n */\n\nexport var sqrLen = squaredLength;\n/**\n * Perform some operation over an array of vec2s.\n *\n * @param {Array} a the array of vectors to iterate over\n * @param {Number} stride Number of elements between the start of each vec2. If 0 assumes tightly packed\n * @param {Number} offset Number of elements to skip at the beginning of the array\n * @param {Number} count Number of vec2s to iterate over. If 0 iterates over entire array\n * @param {Function} fn Function to call for each vector in the array\n * @param {Object} [arg] additional argument to pass to fn\n * @returns {Array} a\n * @function\n */\n\nexport var forEach = function () {\n var vec = create();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n\n if (!stride) {\n stride = 2;\n }\n\n if (!offset) {\n offset = 0;\n }\n\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n }\n\n return a;\n };\n}();","import * as glMatrix from \"./common.js\";\n/**\n * 3 Dimensional Vector\n * @module vec3\n */\n\n/**\n * Creates a new, empty vec3\n *\n * @returns {vec3} a new 3D vector\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(3);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n }\n\n return out;\n}\n/**\n * Creates a new vec3 initialized with values from an existing vector\n *\n * @param {ReadonlyVec3} a vector to clone\n * @returns {vec3} a new 3D vector\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(3);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n}\n/**\n * Calculates the length of a vec3\n *\n * @param {ReadonlyVec3} a vector to calculate length of\n * @returns {Number} length of a\n */\n\nexport function length(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n return Math.hypot(x, y, z);\n}\n/**\n * Creates a new vec3 initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @returns {vec3} a new 3D vector\n */\n\nexport function fromValues(x, y, z) {\n var out = new glMatrix.ARRAY_TYPE(3);\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n}\n/**\n * Copy the values from one vec3 to another\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the source vector\n * @returns {vec3} out\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n}\n/**\n * Set the components of a vec3 to the given values\n *\n * @param {vec3} out the receiving vector\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @returns {vec3} out\n */\n\nexport function set(out, x, y, z) {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n}\n/**\n * Adds two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n return out;\n}\n/**\n * Subtracts vector b from vector a\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n return out;\n}\n/**\n * Multiplies two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n out[2] = a[2] * b[2];\n return out;\n}\n/**\n * Divides two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n out[2] = a[2] / b[2];\n return out;\n}\n/**\n * Math.ceil the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to ceil\n * @returns {vec3} out\n */\n\nexport function ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n out[2] = Math.ceil(a[2]);\n return out;\n}\n/**\n * Math.floor the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to floor\n * @returns {vec3} out\n */\n\nexport function floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n out[2] = Math.floor(a[2]);\n return out;\n}\n/**\n * Returns the minimum of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n out[2] = Math.min(a[2], b[2]);\n return out;\n}\n/**\n * Returns the maximum of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n out[2] = Math.max(a[2], b[2]);\n return out;\n}\n/**\n * Math.round the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to round\n * @returns {vec3} out\n */\n\nexport function round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n out[2] = Math.round(a[2]);\n return out;\n}\n/**\n * Scales a vec3 by a scalar number\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec3} out\n */\n\nexport function scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n return out;\n}\n/**\n * Adds two vec3's after scaling the second operand by a scalar value\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {Number} scale the amount to scale b by before adding\n * @returns {vec3} out\n */\n\nexport function scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n return out;\n}\n/**\n * Calculates the euclidian distance between two vec3's\n *\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {Number} distance between a and b\n */\n\nexport function distance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n return Math.hypot(x, y, z);\n}\n/**\n * Calculates the squared euclidian distance between two vec3's\n *\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {Number} squared distance between a and b\n */\n\nexport function squaredDistance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n return x * x + y * y + z * z;\n}\n/**\n * Calculates the squared length of a vec3\n *\n * @param {ReadonlyVec3} a vector to calculate squared length of\n * @returns {Number} squared length of a\n */\n\nexport function squaredLength(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n return x * x + y * y + z * z;\n}\n/**\n * Negates the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to negate\n * @returns {vec3} out\n */\n\nexport function negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n return out;\n}\n/**\n * Returns the inverse of the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to invert\n * @returns {vec3} out\n */\n\nexport function inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n out[2] = 1.0 / a[2];\n return out;\n}\n/**\n * Normalize a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to normalize\n * @returns {vec3} out\n */\n\nexport function normalize(out, a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var len = x * x + y * y + z * z;\n\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n }\n\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n out[2] = a[2] * len;\n return out;\n}\n/**\n * Calculates the dot product of two vec3's\n *\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {Number} dot product of a and b\n */\n\nexport function dot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n/**\n * Computes the cross product of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function cross(out, a, b) {\n var ax = a[0],\n ay = a[1],\n az = a[2];\n var bx = b[0],\n by = b[1],\n bz = b[2];\n out[0] = ay * bz - az * by;\n out[1] = az * bx - ax * bz;\n out[2] = ax * by - ay * bx;\n return out;\n}\n/**\n * Performs a linear interpolation between two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec3} out\n */\n\nexport function lerp(out, a, b, t) {\n var ax = a[0];\n var ay = a[1];\n var az = a[2];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n out[2] = az + t * (b[2] - az);\n return out;\n}\n/**\n * Performs a hermite interpolation with two control points\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {ReadonlyVec3} c the third operand\n * @param {ReadonlyVec3} d the fourth operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec3} out\n */\n\nexport function hermite(out, a, b, c, d, t) {\n var factorTimes2 = t * t;\n var factor1 = factorTimes2 * (2 * t - 3) + 1;\n var factor2 = factorTimes2 * (t - 2) + t;\n var factor3 = factorTimes2 * (t - 1);\n var factor4 = factorTimes2 * (3 - 2 * t);\n out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n return out;\n}\n/**\n * Performs a bezier interpolation with two control points\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {ReadonlyVec3} c the third operand\n * @param {ReadonlyVec3} d the fourth operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec3} out\n */\n\nexport function bezier(out, a, b, c, d, t) {\n var inverseFactor = 1 - t;\n var inverseFactorTimesTwo = inverseFactor * inverseFactor;\n var factorTimes2 = t * t;\n var factor1 = inverseFactorTimesTwo * inverseFactor;\n var factor2 = 3 * t * inverseFactorTimesTwo;\n var factor3 = 3 * factorTimes2 * inverseFactor;\n var factor4 = factorTimes2 * t;\n out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n return out;\n}\n/**\n * Generates a random vector with the given scale\n *\n * @param {vec3} out the receiving vector\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\n * @returns {vec3} out\n */\n\nexport function random(out, scale) {\n scale = scale || 1.0;\n var r = glMatrix.RANDOM() * 2.0 * Math.PI;\n var z = glMatrix.RANDOM() * 2.0 - 1.0;\n var zScale = Math.sqrt(1.0 - z * z) * scale;\n out[0] = Math.cos(r) * zScale;\n out[1] = Math.sin(r) * zScale;\n out[2] = z * scale;\n return out;\n}\n/**\n * Transforms the vec3 with a mat4.\n * 4th vector component is implicitly '1'\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to transform\n * @param {ReadonlyMat4} m matrix to transform with\n * @returns {vec3} out\n */\n\nexport function transformMat4(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2];\n var w = m[3] * x + m[7] * y + m[11] * z + m[15];\n w = w || 1.0;\n out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\n out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\n out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\n return out;\n}\n/**\n * Transforms the vec3 with a mat3.\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to transform\n * @param {ReadonlyMat3} m the 3x3 matrix to transform with\n * @returns {vec3} out\n */\n\nexport function transformMat3(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2];\n out[0] = x * m[0] + y * m[3] + z * m[6];\n out[1] = x * m[1] + y * m[4] + z * m[7];\n out[2] = x * m[2] + y * m[5] + z * m[8];\n return out;\n}\n/**\n * Transforms the vec3 with a quat\n * Can also be used for dual quaternions. (Multiply it with the real part)\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to transform\n * @param {ReadonlyQuat} q quaternion to transform with\n * @returns {vec3} out\n */\n\nexport function transformQuat(out, a, q) {\n // benchmarks: https://jsperf.com/quaternion-transform-vec3-implementations-fixed\n var qx = q[0],\n qy = q[1],\n qz = q[2],\n qw = q[3];\n var x = a[0],\n y = a[1],\n z = a[2]; // var qvec = [qx, qy, qz];\n // var uv = vec3.cross([], qvec, a);\n\n var uvx = qy * z - qz * y,\n uvy = qz * x - qx * z,\n uvz = qx * y - qy * x; // var uuv = vec3.cross([], qvec, uv);\n\n var uuvx = qy * uvz - qz * uvy,\n uuvy = qz * uvx - qx * uvz,\n uuvz = qx * uvy - qy * uvx; // vec3.scale(uv, uv, 2 * w);\n\n var w2 = qw * 2;\n uvx *= w2;\n uvy *= w2;\n uvz *= w2; // vec3.scale(uuv, uuv, 2);\n\n uuvx *= 2;\n uuvy *= 2;\n uuvz *= 2; // return vec3.add(out, a, vec3.add(out, uv, uuv));\n\n out[0] = x + uvx + uuvx;\n out[1] = y + uvy + uuvy;\n out[2] = z + uvz + uuvz;\n return out;\n}\n/**\n * Rotate a 3D vector around the x-axis\n * @param {vec3} out The receiving vec3\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @returns {vec3} out\n */\n\nexport function rotateX(out, a, b, rad) {\n var p = [],\n r = []; //Translate point to the origin\n\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2]; //perform rotation\n\n r[0] = p[0];\n r[1] = p[1] * Math.cos(rad) - p[2] * Math.sin(rad);\n r[2] = p[1] * Math.sin(rad) + p[2] * Math.cos(rad); //translate to correct position\n\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n/**\n * Rotate a 3D vector around the y-axis\n * @param {vec3} out The receiving vec3\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @returns {vec3} out\n */\n\nexport function rotateY(out, a, b, rad) {\n var p = [],\n r = []; //Translate point to the origin\n\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2]; //perform rotation\n\n r[0] = p[2] * Math.sin(rad) + p[0] * Math.cos(rad);\n r[1] = p[1];\n r[2] = p[2] * Math.cos(rad) - p[0] * Math.sin(rad); //translate to correct position\n\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n/**\n * Rotate a 3D vector around the z-axis\n * @param {vec3} out The receiving vec3\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @returns {vec3} out\n */\n\nexport function rotateZ(out, a, b, rad) {\n var p = [],\n r = []; //Translate point to the origin\n\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2]; //perform rotation\n\n r[0] = p[0] * Math.cos(rad) - p[1] * Math.sin(rad);\n r[1] = p[0] * Math.sin(rad) + p[1] * Math.cos(rad);\n r[2] = p[2]; //translate to correct position\n\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n/**\n * Get the angle between two 3D vectors\n * @param {ReadonlyVec3} a The first operand\n * @param {ReadonlyVec3} b The second operand\n * @returns {Number} The angle in radians\n */\n\nexport function angle(a, b) {\n var ax = a[0],\n ay = a[1],\n az = a[2],\n bx = b[0],\n by = b[1],\n bz = b[2],\n mag1 = Math.sqrt(ax * ax + ay * ay + az * az),\n mag2 = Math.sqrt(bx * bx + by * by + bz * bz),\n mag = mag1 * mag2,\n cosine = mag && dot(a, b) / mag;\n return Math.acos(Math.min(Math.max(cosine, -1), 1));\n}\n/**\n * Set the components of a vec3 to zero\n *\n * @param {vec3} out the receiving vector\n * @returns {vec3} out\n */\n\nexport function zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n out[2] = 0.0;\n return out;\n}\n/**\n * Returns a string representation of a vector\n *\n * @param {ReadonlyVec3} a vector to represent as a string\n * @returns {String} string representation of the vector\n */\n\nexport function str(a) {\n return \"vec3(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \")\";\n}\n/**\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyVec3} a The first vector.\n * @param {ReadonlyVec3} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];\n}\n/**\n * Returns whether or not the vectors have approximately the same elements in the same position.\n *\n * @param {ReadonlyVec3} a The first vector.\n * @param {ReadonlyVec3} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2));\n}\n/**\n * Alias for {@link vec3.subtract}\n * @function\n */\n\nexport var sub = subtract;\n/**\n * Alias for {@link vec3.multiply}\n * @function\n */\n\nexport var mul = multiply;\n/**\n * Alias for {@link vec3.divide}\n * @function\n */\n\nexport var div = divide;\n/**\n * Alias for {@link vec3.distance}\n * @function\n */\n\nexport var dist = distance;\n/**\n * Alias for {@link vec3.squaredDistance}\n * @function\n */\n\nexport var sqrDist = squaredDistance;\n/**\n * Alias for {@link vec3.length}\n * @function\n */\n\nexport var len = length;\n/**\n * Alias for {@link vec3.squaredLength}\n * @function\n */\n\nexport var sqrLen = squaredLength;\n/**\n * Perform some operation over an array of vec3s.\n *\n * @param {Array} a the array of vectors to iterate over\n * @param {Number} stride Number of elements between the start of each vec3. If 0 assumes tightly packed\n * @param {Number} offset Number of elements to skip at the beginning of the array\n * @param {Number} count Number of vec3s to iterate over. If 0 iterates over entire array\n * @param {Function} fn Function to call for each vector in the array\n * @param {Object} [arg] additional argument to pass to fn\n * @returns {Array} a\n * @function\n */\n\nexport var forEach = function () {\n var vec = create();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n\n if (!stride) {\n stride = 3;\n }\n\n if (!offset) {\n offset = 0;\n }\n\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n vec[2] = a[i + 2];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n a[i + 2] = vec[2];\n }\n\n return a;\n };\n}();","import * as glMatrix from \"./common.js\";\n/**\n * 4 Dimensional Vector\n * @module vec4\n */\n\n/**\n * Creates a new, empty vec4\n *\n * @returns {vec4} a new 4D vector\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(4);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n }\n\n return out;\n}\n/**\n * Creates a new vec4 initialized with values from an existing vector\n *\n * @param {ReadonlyVec4} a vector to clone\n * @returns {vec4} a new 4D vector\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(4);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n}\n/**\n * Creates a new vec4 initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {vec4} a new 4D vector\n */\n\nexport function fromValues(x, y, z, w) {\n var out = new glMatrix.ARRAY_TYPE(4);\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = w;\n return out;\n}\n/**\n * Copy the values from one vec4 to another\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the source vector\n * @returns {vec4} out\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n}\n/**\n * Set the components of a vec4 to the given values\n *\n * @param {vec4} out the receiving vector\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {vec4} out\n */\n\nexport function set(out, x, y, z, w) {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = w;\n return out;\n}\n/**\n * Adds two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n return out;\n}\n/**\n * Subtracts vector b from vector a\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n return out;\n}\n/**\n * Multiplies two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\n\nexport function multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n out[2] = a[2] * b[2];\n out[3] = a[3] * b[3];\n return out;\n}\n/**\n * Divides two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\n\nexport function divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n out[2] = a[2] / b[2];\n out[3] = a[3] / b[3];\n return out;\n}\n/**\n * Math.ceil the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to ceil\n * @returns {vec4} out\n */\n\nexport function ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n out[2] = Math.ceil(a[2]);\n out[3] = Math.ceil(a[3]);\n return out;\n}\n/**\n * Math.floor the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to floor\n * @returns {vec4} out\n */\n\nexport function floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n out[2] = Math.floor(a[2]);\n out[3] = Math.floor(a[3]);\n return out;\n}\n/**\n * Returns the minimum of two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\n\nexport function min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n out[2] = Math.min(a[2], b[2]);\n out[3] = Math.min(a[3], b[3]);\n return out;\n}\n/**\n * Returns the maximum of two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\n\nexport function max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n out[2] = Math.max(a[2], b[2]);\n out[3] = Math.max(a[3], b[3]);\n return out;\n}\n/**\n * Math.round the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to round\n * @returns {vec4} out\n */\n\nexport function round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n out[2] = Math.round(a[2]);\n out[3] = Math.round(a[3]);\n return out;\n}\n/**\n * Scales a vec4 by a scalar number\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec4} out\n */\n\nexport function scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n return out;\n}\n/**\n * Adds two vec4's after scaling the second operand by a scalar value\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @param {Number} scale the amount to scale b by before adding\n * @returns {vec4} out\n */\n\nexport function scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n return out;\n}\n/**\n * Calculates the euclidian distance between two vec4's\n *\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {Number} distance between a and b\n */\n\nexport function distance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n var w = b[3] - a[3];\n return Math.hypot(x, y, z, w);\n}\n/**\n * Calculates the squared euclidian distance between two vec4's\n *\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {Number} squared distance between a and b\n */\n\nexport function squaredDistance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n var w = b[3] - a[3];\n return x * x + y * y + z * z + w * w;\n}\n/**\n * Calculates the length of a vec4\n *\n * @param {ReadonlyVec4} a vector to calculate length of\n * @returns {Number} length of a\n */\n\nexport function length(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var w = a[3];\n return Math.hypot(x, y, z, w);\n}\n/**\n * Calculates the squared length of a vec4\n *\n * @param {ReadonlyVec4} a vector to calculate squared length of\n * @returns {Number} squared length of a\n */\n\nexport function squaredLength(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var w = a[3];\n return x * x + y * y + z * z + w * w;\n}\n/**\n * Negates the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to negate\n * @returns {vec4} out\n */\n\nexport function negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n out[3] = -a[3];\n return out;\n}\n/**\n * Returns the inverse of the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to invert\n * @returns {vec4} out\n */\n\nexport function inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n out[2] = 1.0 / a[2];\n out[3] = 1.0 / a[3];\n return out;\n}\n/**\n * Normalize a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to normalize\n * @returns {vec4} out\n */\n\nexport function normalize(out, a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var w = a[3];\n var len = x * x + y * y + z * z + w * w;\n\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n }\n\n out[0] = x * len;\n out[1] = y * len;\n out[2] = z * len;\n out[3] = w * len;\n return out;\n}\n/**\n * Calculates the dot product of two vec4's\n *\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {Number} dot product of a and b\n */\n\nexport function dot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\n}\n/**\n * Returns the cross-product of three vectors in a 4-dimensional space\n *\n * @param {ReadonlyVec4} result the receiving vector\n * @param {ReadonlyVec4} U the first vector\n * @param {ReadonlyVec4} V the second vector\n * @param {ReadonlyVec4} W the third vector\n * @returns {vec4} result\n */\n\nexport function cross(out, u, v, w) {\n var A = v[0] * w[1] - v[1] * w[0],\n B = v[0] * w[2] - v[2] * w[0],\n C = v[0] * w[3] - v[3] * w[0],\n D = v[1] * w[2] - v[2] * w[1],\n E = v[1] * w[3] - v[3] * w[1],\n F = v[2] * w[3] - v[3] * w[2];\n var G = u[0];\n var H = u[1];\n var I = u[2];\n var J = u[3];\n out[0] = H * F - I * E + J * D;\n out[1] = -(G * F) + I * C - J * B;\n out[2] = G * E - H * C + J * A;\n out[3] = -(G * D) + H * B - I * A;\n return out;\n}\n/**\n * Performs a linear interpolation between two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec4} out\n */\n\nexport function lerp(out, a, b, t) {\n var ax = a[0];\n var ay = a[1];\n var az = a[2];\n var aw = a[3];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n out[2] = az + t * (b[2] - az);\n out[3] = aw + t * (b[3] - aw);\n return out;\n}\n/**\n * Generates a random vector with the given scale\n *\n * @param {vec4} out the receiving vector\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\n * @returns {vec4} out\n */\n\nexport function random(out, scale) {\n scale = scale || 1.0; // Marsaglia, George. Choosing a Point from the Surface of a\n // Sphere. Ann. Math. Statist. 43 (1972), no. 2, 645--646.\n // http://projecteuclid.org/euclid.aoms/1177692644;\n\n var v1, v2, v3, v4;\n var s1, s2;\n\n do {\n v1 = glMatrix.RANDOM() * 2 - 1;\n v2 = glMatrix.RANDOM() * 2 - 1;\n s1 = v1 * v1 + v2 * v2;\n } while (s1 >= 1);\n\n do {\n v3 = glMatrix.RANDOM() * 2 - 1;\n v4 = glMatrix.RANDOM() * 2 - 1;\n s2 = v3 * v3 + v4 * v4;\n } while (s2 >= 1);\n\n var d = Math.sqrt((1 - s1) / s2);\n out[0] = scale * v1;\n out[1] = scale * v2;\n out[2] = scale * v3 * d;\n out[3] = scale * v4 * d;\n return out;\n}\n/**\n * Transforms the vec4 with a mat4.\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the vector to transform\n * @param {ReadonlyMat4} m matrix to transform with\n * @returns {vec4} out\n */\n\nexport function transformMat4(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2],\n w = a[3];\n out[0] = m[0] * x + m[4] * y + m[8] * z + m[12] * w;\n out[1] = m[1] * x + m[5] * y + m[9] * z + m[13] * w;\n out[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w;\n out[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w;\n return out;\n}\n/**\n * Transforms the vec4 with a quat\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the vector to transform\n * @param {ReadonlyQuat} q quaternion to transform with\n * @returns {vec4} out\n */\n\nexport function transformQuat(out, a, q) {\n var x = a[0],\n y = a[1],\n z = a[2];\n var qx = q[0],\n qy = q[1],\n qz = q[2],\n qw = q[3]; // calculate quat * vec\n\n var ix = qw * x + qy * z - qz * y;\n var iy = qw * y + qz * x - qx * z;\n var iz = qw * z + qx * y - qy * x;\n var iw = -qx * x - qy * y - qz * z; // calculate result * inverse quat\n\n out[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy;\n out[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz;\n out[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx;\n out[3] = a[3];\n return out;\n}\n/**\n * Set the components of a vec4 to zero\n *\n * @param {vec4} out the receiving vector\n * @returns {vec4} out\n */\n\nexport function zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n out[2] = 0.0;\n out[3] = 0.0;\n return out;\n}\n/**\n * Returns a string representation of a vector\n *\n * @param {ReadonlyVec4} a vector to represent as a string\n * @returns {String} string representation of the vector\n */\n\nexport function str(a) {\n return \"vec4(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \")\";\n}\n/**\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyVec4} a The first vector.\n * @param {ReadonlyVec4} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n}\n/**\n * Returns whether or not the vectors have approximately the same elements in the same position.\n *\n * @param {ReadonlyVec4} a The first vector.\n * @param {ReadonlyVec4} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3));\n}\n/**\n * Alias for {@link vec4.subtract}\n * @function\n */\n\nexport var sub = subtract;\n/**\n * Alias for {@link vec4.multiply}\n * @function\n */\n\nexport var mul = multiply;\n/**\n * Alias for {@link vec4.divide}\n * @function\n */\n\nexport var div = divide;\n/**\n * Alias for {@link vec4.distance}\n * @function\n */\n\nexport var dist = distance;\n/**\n * Alias for {@link vec4.squaredDistance}\n * @function\n */\n\nexport var sqrDist = squaredDistance;\n/**\n * Alias for {@link vec4.length}\n * @function\n */\n\nexport var len = length;\n/**\n * Alias for {@link vec4.squaredLength}\n * @function\n */\n\nexport var sqrLen = squaredLength;\n/**\n * Perform some operation over an array of vec4s.\n *\n * @param {Array} a the array of vectors to iterate over\n * @param {Number} stride Number of elements between the start of each vec4. If 0 assumes tightly packed\n * @param {Number} offset Number of elements to skip at the beginning of the array\n * @param {Number} count Number of vec4s to iterate over. If 0 iterates over entire array\n * @param {Function} fn Function to call for each vector in the array\n * @param {Object} [arg] additional argument to pass to fn\n * @returns {Array} a\n * @function\n */\n\nexport var forEach = function () {\n var vec = create();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n\n if (!stride) {\n stride = 4;\n }\n\n if (!offset) {\n offset = 0;\n }\n\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n vec[2] = a[i + 2];\n vec[3] = a[i + 3];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n a[i + 2] = vec[2];\n a[i + 3] = vec[3];\n }\n\n return a;\n };\n}();","'use strict';\n\nvar define = require('define-properties');\nvar isSymbol = require('is-symbol');\n\nvar globalKey = '__ global cache key __';\n/* istanbul ignore else */\n// eslint-disable-next-line no-restricted-properties\nif (typeof Symbol === 'function' && isSymbol(Symbol('foo')) && typeof Symbol['for'] === 'function') {\n\t// eslint-disable-next-line no-restricted-properties\n\tglobalKey = Symbol['for'](globalKey);\n}\n\nvar trueThunk = function () {\n\treturn true;\n};\n\nvar ensureCache = function ensureCache() {\n\tif (!global[globalKey]) {\n\t\tvar properties = {};\n\t\tproperties[globalKey] = {};\n\t\tvar predicates = {};\n\t\tpredicates[globalKey] = trueThunk;\n\t\tdefine(global, properties, predicates);\n\t}\n\treturn global[globalKey];\n};\n\nvar cache = ensureCache();\n\nvar isPrimitive = function isPrimitive(val) {\n\treturn val === null || (typeof val !== 'object' && typeof val !== 'function');\n};\n\nvar getPrimitiveKey = function getPrimitiveKey(val) {\n\tif (isSymbol(val)) {\n\t\treturn Symbol.prototype.valueOf.call(val);\n\t}\n\treturn typeof val + ' | ' + String(val);\n};\n\nvar requirePrimitiveKey = function requirePrimitiveKey(val) {\n\tif (!isPrimitive(val)) {\n\t\tthrow new TypeError('key must not be an object');\n\t}\n};\n\nvar globalCache = {\n\tclear: function clear() {\n\t\tdelete global[globalKey];\n\t\tcache = ensureCache();\n\t},\n\n\t'delete': function deleteKey(key) {\n\t\trequirePrimitiveKey(key);\n\t\tdelete cache[getPrimitiveKey(key)];\n\t\treturn !globalCache.has(key);\n\t},\n\n\tget: function get(key) {\n\t\trequirePrimitiveKey(key);\n\t\treturn cache[getPrimitiveKey(key)];\n\t},\n\n\thas: function has(key) {\n\t\trequirePrimitiveKey(key);\n\t\treturn getPrimitiveKey(key) in cache;\n\t},\n\n\tset: function set(key, value) {\n\t\trequirePrimitiveKey(key);\n\t\tvar primitiveKey = getPrimitiveKey(key);\n\t\tvar props = {};\n\t\tprops[primitiveKey] = value;\n\t\tvar predicates = {};\n\t\tpredicates[primitiveKey] = trueThunk;\n\t\tdefine(cache, props, predicates);\n\t\treturn globalCache.has(key);\n\t},\n\n\tsetIfMissingThenGet: function setIfMissingThenGet(key, valueThunk) {\n\t\tif (globalCache.has(key)) {\n\t\t\treturn globalCache.get(key);\n\t\t}\n\t\tvar item = valueThunk();\n\t\tglobalCache.set(key, item);\n\t\treturn item;\n\t}\n};\n\nmodule.exports = globalCache;\n","/* eslint no-negated-condition: 0, no-new-func: 0 */\n\n'use strict';\n\nif (typeof self !== 'undefined') {\n\tmodule.exports = self;\n} else if (typeof window !== 'undefined') {\n\tmodule.exports = window;\n} else {\n\tmodule.exports = Function('return this')();\n}\n","'use strict';\n\nvar defineProperties = require('define-properties');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar polyfill = getPolyfill();\n\nvar getGlobal = function () { return polyfill; };\n\ndefineProperties(getGlobal, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = getGlobal;\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = function getPolyfill() {\n\tif (typeof global !== 'object' || !global || global.Math !== Math || global.Array !== Array) {\n\t\treturn implementation;\n\t}\n\treturn global;\n};\n","'use strict';\n\nvar define = require('define-properties');\nvar getPolyfill = require('./polyfill');\n\nmodule.exports = function shimGlobal() {\n\tvar polyfill = getPolyfill();\n\tif (define.supportsDescriptors) {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(polyfill, 'globalThis');\n\t\tif (!descriptor || (descriptor.configurable && (descriptor.enumerable || !descriptor.writable || globalThis !== polyfill))) { // eslint-disable-line max-len\n\t\t\tObject.defineProperty(polyfill, 'globalThis', {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: polyfill,\n\t\t\t\twritable: true\n\t\t\t});\n\t\t}\n\t} else if (typeof globalThis !== 'object' || globalThis !== polyfill) {\n\t\tpolyfill.globalThis = polyfill;\n\t}\n\treturn polyfill;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar hasPropertyDescriptors = function hasPropertyDescriptors() {\n\tif ($defineProperty) {\n\t\ttry {\n\t\t\t$defineProperty({}, 'a', { value: 1 });\n\t\t\treturn true;\n\t\t} catch (e) {\n\t\t\t// IE 8 has a broken defineProperty\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn false;\n};\n\nhasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() {\n\t// node v0.6 has a bug where array lengths can be Set but not Defined\n\tif (!hasPropertyDescriptors()) {\n\t\treturn null;\n\t}\n\ttry {\n\t\treturn $defineProperty([], 'length', { value: 1 }).length !== 1;\n\t} catch (e) {\n\t\t// In Firefox 4-22, defining length on an array throws an exception.\n\t\treturn true;\n\t}\n};\n\nmodule.exports = hasPropertyDescriptors;\n","'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n","'use strict';\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n","'use strict';\n\nvar hasSymbols = require('has-symbols/shams');\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n","'use strict';\n\nvar bind = require('function-bind');\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","module.exports = {\n parse: require('./lib/parse'),\n stringify: require('./lib/stringify')\n};\n","var attrRE = /([\\w-]+)|=|(['\"])([.\\s\\S]*?)\\2/g;\nvar voidElements = require('void-elements');\n\nmodule.exports = function (tag) {\n var i = 0;\n var key;\n var expectingValueAfterEquals = true;\n var res = {\n type: 'tag',\n name: '',\n voidElement: false,\n attrs: {},\n children: []\n };\n\n tag.replace(attrRE, function (match) {\n if (match === '=') {\n expectingValueAfterEquals = true;\n i++;\n return;\n }\n\n if (!expectingValueAfterEquals) {\n if (key) {\n res.attrs[key] = key; // boolean attribute\n }\n key=match;\n } else {\n if (i === 0) {\n if (voidElements[match] || tag.charAt(tag.length - 2) === '/') {\n res.voidElement = true;\n }\n res.name = match;\n } else {\n res.attrs[key] = match.replace(/^['\"]|['\"]$/g, '');\n key=undefined;\n }\n }\n i++;\n expectingValueAfterEquals = false;\n });\n\n return res;\n};\n","/*jshint -W030 */\nvar tagRE = /(?:|<(?:\"[^\"]*\"['\"]*|'[^']*'['\"]*|[^'\">])+>)/g;\nvar parseTag = require('./parse-tag');\n// re-used obj for quick lookups of components\nvar empty = Object.create ? Object.create(null) : {};\n// common logic for pushing a child node onto a list\nfunction pushTextNode(list, html, level, start, ignoreWhitespace) {\n // calculate correct end of the content slice in case there's\n // no tag after the text node.\n var end = html.indexOf('<', start);\n var content = html.slice(start, end === -1 ? undefined : end);\n // if a node is nothing but whitespace, collapse it as the spec states:\n // https://www.w3.org/TR/html4/struct/text.html#h-9.1\n if (/^\\s*$/.test(content)) {\n content = ' ';\n }\n // don't add whitespace-only text nodes if they would be trailing text nodes\n // or if they would be leading whitespace-only text nodes:\n // * end > -1 indicates this is not a trailing text node\n // * leading node is when level is -1 and list has length 0\n if ((!ignoreWhitespace && end > -1 && level + list.length >= 0) || content !== ' ') {\n list.push({\n type: 'text',\n content: content\n });\n }\n}\n\nmodule.exports = function parse(html, options) {\n options || (options = {});\n options.components || (options.components = empty);\n var result = [];\n var current;\n var level = -1;\n var arr = [];\n var byTag = {};\n var inComponent = false;\n\n html.replace(tagRE, function (tag, index) {\n if (inComponent) {\n if (tag !== ('')) {\n return;\n } else {\n inComponent = false;\n }\n }\n\n var isOpen = tag.charAt(1) !== '/';\n var isComment = tag.indexOf(' always true\n return true;\n } else if (number < 10) {\n // Only 1 digit\n if (4 <= number && number <= 7) {\n return true;\n }\n return false;\n } else if (number < 100) {\n // 2 digits\n var lastDigit = number % 10, firstDigit = number / 10;\n if (lastDigit === 0) {\n return eifelerRegelAppliesToNumber(firstDigit);\n }\n return eifelerRegelAppliesToNumber(lastDigit);\n } else if (number < 10000) {\n // 3 or 4 digits --> recursively check first digit\n while (number >= 10) {\n number = number / 10;\n }\n return eifelerRegelAppliesToNumber(number);\n } else {\n // Anything larger than 4 digits: recursively check first n-3 digits\n number = number / 1000;\n return eifelerRegelAppliesToNumber(number);\n }\n }\n\n var lb = moment.defineLocale('lb', {\n months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),\n monthsParseExact : true,\n weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'),\n weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),\n weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),\n weekdaysParseExact : true,\n longDateFormat: {\n LT: 'H:mm [Auer]',\n LTS: 'H:mm:ss [Auer]',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm [Auer]',\n LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]'\n },\n calendar: {\n sameDay: '[Haut um] LT',\n sameElse: 'L',\n nextDay: '[Muer um] LT',\n nextWeek: 'dddd [um] LT',\n lastDay: '[Gëschter um] LT',\n lastWeek: function () {\n // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule\n switch (this.day()) {\n case 2:\n case 4:\n return '[Leschten] dddd [um] LT';\n default:\n return '[Leschte] dddd [um] LT';\n }\n }\n },\n relativeTime : {\n future : processFutureTime,\n past : processPastTime,\n s : 'e puer Sekonnen',\n ss : '%d Sekonnen',\n m : processRelativeTime,\n mm : '%d Minutten',\n h : processRelativeTime,\n hh : '%d Stonnen',\n d : processRelativeTime,\n dd : '%d Deeg',\n M : processRelativeTime,\n MM : '%d Méint',\n y : processRelativeTime,\n yy : '%d Joer'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return lb;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var lo = moment.defineLocale('lo', {\n months : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),\n monthsShort : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),\n weekdays : 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n weekdaysShort : 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n weekdaysMin : 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'ວັນdddd D MMMM YYYY HH:mm'\n },\n meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,\n isPM: function (input) {\n return input === 'ຕອນແລງ';\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ຕອນເຊົ້າ';\n } else {\n return 'ຕອນແລງ';\n }\n },\n calendar : {\n sameDay : '[ມື້ນີ້ເວລາ] LT',\n nextDay : '[ມື້ອື່ນເວລາ] LT',\n nextWeek : '[ວັນ]dddd[ໜ້າເວລາ] LT',\n lastDay : '[ມື້ວານນີ້ເວລາ] LT',\n lastWeek : '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'ອີກ %s',\n past : '%sຜ່ານມາ',\n s : 'ບໍ່ເທົ່າໃດວິນາທີ',\n ss : '%d ວິນາທີ' ,\n m : '1 ນາທີ',\n mm : '%d ນາທີ',\n h : '1 ຊົ່ວໂມງ',\n hh : '%d ຊົ່ວໂມງ',\n d : '1 ມື້',\n dd : '%d ມື້',\n M : '1 ເດືອນ',\n MM : '%d ເດືອນ',\n y : '1 ປີ',\n yy : '%d ປີ'\n },\n dayOfMonthOrdinalParse: /(ທີ່)\\d{1,2}/,\n ordinal : function (number) {\n return 'ທີ່' + number;\n }\n });\n\n return lo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var units = {\n 'ss' : 'sekundė_sekundžių_sekundes',\n 'm' : 'minutė_minutės_minutę',\n 'mm': 'minutės_minučių_minutes',\n 'h' : 'valanda_valandos_valandą',\n 'hh': 'valandos_valandų_valandas',\n 'd' : 'diena_dienos_dieną',\n 'dd': 'dienos_dienų_dienas',\n 'M' : 'mėnuo_mėnesio_mėnesį',\n 'MM': 'mėnesiai_mėnesių_mėnesius',\n 'y' : 'metai_metų_metus',\n 'yy': 'metai_metų_metus'\n };\n function translateSeconds(number, withoutSuffix, key, isFuture) {\n if (withoutSuffix) {\n return 'kelios sekundės';\n } else {\n return isFuture ? 'kelių sekundžių' : 'kelias sekundes';\n }\n }\n function translateSingular(number, withoutSuffix, key, isFuture) {\n return withoutSuffix ? forms(key)[0] : (isFuture ? forms(key)[1] : forms(key)[2]);\n }\n function special(number) {\n return number % 10 === 0 || (number > 10 && number < 20);\n }\n function forms(key) {\n return units[key].split('_');\n }\n function translate(number, withoutSuffix, key, isFuture) {\n var result = number + ' ';\n if (number === 1) {\n return result + translateSingular(number, withoutSuffix, key[0], isFuture);\n } else if (withoutSuffix) {\n return result + (special(number) ? forms(key)[1] : forms(key)[0]);\n } else {\n if (isFuture) {\n return result + forms(key)[1];\n } else {\n return result + (special(number) ? forms(key)[1] : forms(key)[2]);\n }\n }\n }\n var lt = moment.defineLocale('lt', {\n months : {\n format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'),\n standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split('_'),\n isFormat: /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|MMMM?(\\[[^\\[\\]]*\\]|\\s)+D[oD]?/\n },\n monthsShort : 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),\n weekdays : {\n format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split('_'),\n standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_'),\n isFormat: /dddd HH:mm/\n },\n weekdaysShort : 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),\n weekdaysMin : 'S_P_A_T_K_Pn_Š'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'YYYY-MM-DD',\n LL : 'YYYY [m.] MMMM D [d.]',\n LLL : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n LLLL : 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',\n l : 'YYYY-MM-DD',\n ll : 'YYYY [m.] MMMM D [d.]',\n lll : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n llll : 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]'\n },\n calendar : {\n sameDay : '[Šiandien] LT',\n nextDay : '[Rytoj] LT',\n nextWeek : 'dddd LT',\n lastDay : '[Vakar] LT',\n lastWeek : '[Praėjusį] dddd LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'po %s',\n past : 'prieš %s',\n s : translateSeconds,\n ss : translate,\n m : translateSingular,\n mm : translate,\n h : translateSingular,\n hh : translate,\n d : translateSingular,\n dd : translate,\n M : translateSingular,\n MM : translate,\n y : translateSingular,\n yy : translate\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-oji/,\n ordinal : function (number) {\n return number + '-oji';\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return lt;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var units = {\n 'ss': 'sekundes_sekundēm_sekunde_sekundes'.split('_'),\n 'm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n 'mm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n 'h': 'stundas_stundām_stunda_stundas'.split('_'),\n 'hh': 'stundas_stundām_stunda_stundas'.split('_'),\n 'd': 'dienas_dienām_diena_dienas'.split('_'),\n 'dd': 'dienas_dienām_diena_dienas'.split('_'),\n 'M': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n 'MM': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n 'y': 'gada_gadiem_gads_gadi'.split('_'),\n 'yy': 'gada_gadiem_gads_gadi'.split('_')\n };\n /**\n * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.\n */\n function format(forms, number, withoutSuffix) {\n if (withoutSuffix) {\n // E.g. \"21 minūte\", \"3 minūtes\".\n return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];\n } else {\n // E.g. \"21 minūtes\" as in \"pēc 21 minūtes\".\n // E.g. \"3 minūtēm\" as in \"pēc 3 minūtēm\".\n return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];\n }\n }\n function relativeTimeWithPlural(number, withoutSuffix, key) {\n return number + ' ' + format(units[key], number, withoutSuffix);\n }\n function relativeTimeWithSingular(number, withoutSuffix, key) {\n return format(units[key], number, withoutSuffix);\n }\n function relativeSeconds(number, withoutSuffix) {\n return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';\n }\n\n var lv = moment.defineLocale('lv', {\n months : 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split('_'),\n monthsShort : 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),\n weekdays : 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split('_'),\n weekdaysShort : 'Sv_P_O_T_C_Pk_S'.split('_'),\n weekdaysMin : 'Sv_P_O_T_C_Pk_S'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY.',\n LL : 'YYYY. [gada] D. MMMM',\n LLL : 'YYYY. [gada] D. MMMM, HH:mm',\n LLLL : 'YYYY. [gada] D. MMMM, dddd, HH:mm'\n },\n calendar : {\n sameDay : '[Šodien pulksten] LT',\n nextDay : '[Rīt pulksten] LT',\n nextWeek : 'dddd [pulksten] LT',\n lastDay : '[Vakar pulksten] LT',\n lastWeek : '[Pagājušā] dddd [pulksten] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'pēc %s',\n past : 'pirms %s',\n s : relativeSeconds,\n ss : relativeTimeWithPlural,\n m : relativeTimeWithSingular,\n mm : relativeTimeWithPlural,\n h : relativeTimeWithSingular,\n hh : relativeTimeWithPlural,\n d : relativeTimeWithSingular,\n dd : relativeTimeWithPlural,\n M : relativeTimeWithSingular,\n MM : relativeTimeWithPlural,\n y : relativeTimeWithSingular,\n yy : relativeTimeWithPlural\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return lv;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var translator = {\n words: { //Different grammatical cases\n ss: ['sekund', 'sekunda', 'sekundi'],\n m: ['jedan minut', 'jednog minuta'],\n mm: ['minut', 'minuta', 'minuta'],\n h: ['jedan sat', 'jednog sata'],\n hh: ['sat', 'sata', 'sati'],\n dd: ['dan', 'dana', 'dana'],\n MM: ['mjesec', 'mjeseca', 'mjeseci'],\n yy: ['godina', 'godine', 'godina']\n },\n correctGrammaticalCase: function (number, wordKey) {\n return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n },\n translate: function (number, withoutSuffix, key) {\n var wordKey = translator.words[key];\n if (key.length === 1) {\n return withoutSuffix ? wordKey[0] : wordKey[1];\n } else {\n return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n }\n }\n };\n\n var me = moment.defineLocale('me', {\n months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),\n monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n monthsParseExact : true,\n weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n weekdaysParseExact : true,\n longDateFormat: {\n LT: 'H:mm',\n LTS : 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm',\n LLLL: 'dddd, D. MMMM YYYY H:mm'\n },\n calendar: {\n sameDay: '[danas u] LT',\n nextDay: '[sjutra u] LT',\n\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[u] [nedjelju] [u] LT';\n case 3:\n return '[u] [srijedu] [u] LT';\n case 6:\n return '[u] [subotu] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[u] dddd [u] LT';\n }\n },\n lastDay : '[juče u] LT',\n lastWeek : function () {\n var lastWeekDays = [\n '[prošle] [nedjelje] [u] LT',\n '[prošlog] [ponedjeljka] [u] LT',\n '[prošlog] [utorka] [u] LT',\n '[prošle] [srijede] [u] LT',\n '[prošlog] [četvrtka] [u] LT',\n '[prošlog] [petka] [u] LT',\n '[prošle] [subote] [u] LT'\n ];\n return lastWeekDays[this.day()];\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'za %s',\n past : 'prije %s',\n s : 'nekoliko sekundi',\n ss : translator.translate,\n m : translator.translate,\n mm : translator.translate,\n h : translator.translate,\n hh : translator.translate,\n d : 'dan',\n dd : translator.translate,\n M : 'mjesec',\n MM : translator.translate,\n y : 'godinu',\n yy : translator.translate\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return me;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var mi = moment.defineLocale('mi', {\n months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split('_'),\n monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split('_'),\n monthsRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n monthsStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n monthsShortRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n monthsShortStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,2}/i,\n weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),\n weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY [i] HH:mm',\n LLLL: 'dddd, D MMMM YYYY [i] HH:mm'\n },\n calendar: {\n sameDay: '[i teie mahana, i] LT',\n nextDay: '[apopo i] LT',\n nextWeek: 'dddd [i] LT',\n lastDay: '[inanahi i] LT',\n lastWeek: 'dddd [whakamutunga i] LT',\n sameElse: 'L'\n },\n relativeTime: {\n future: 'i roto i %s',\n past: '%s i mua',\n s: 'te hēkona ruarua',\n ss: '%d hēkona',\n m: 'he meneti',\n mm: '%d meneti',\n h: 'te haora',\n hh: '%d haora',\n d: 'he ra',\n dd: '%d ra',\n M: 'he marama',\n MM: '%d marama',\n y: 'he tau',\n yy: '%d tau'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal: '%dº',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return mi;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var mk = moment.defineLocale('mk', {\n months : 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split('_'),\n monthsShort : 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),\n weekdays : 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split('_'),\n weekdaysShort : 'нед_пон_вто_сре_чет_пет_саб'.split('_'),\n weekdaysMin : 'нe_пo_вт_ср_че_пе_сa'.split('_'),\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'D.MM.YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY H:mm',\n LLLL : 'dddd, D MMMM YYYY H:mm'\n },\n calendar : {\n sameDay : '[Денес во] LT',\n nextDay : '[Утре во] LT',\n nextWeek : '[Во] dddd [во] LT',\n lastDay : '[Вчера во] LT',\n lastWeek : function () {\n switch (this.day()) {\n case 0:\n case 3:\n case 6:\n return '[Изминатата] dddd [во] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[Изминатиот] dddd [во] LT';\n }\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'после %s',\n past : 'пред %s',\n s : 'неколку секунди',\n ss : '%d секунди',\n m : 'минута',\n mm : '%d минути',\n h : 'час',\n hh : '%d часа',\n d : 'ден',\n dd : '%d дена',\n M : 'месец',\n MM : '%d месеци',\n y : 'година',\n yy : '%d години'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n ordinal : function (number) {\n var lastDigit = number % 10,\n last2Digits = number % 100;\n if (number === 0) {\n return number + '-ев';\n } else if (last2Digits === 0) {\n return number + '-ен';\n } else if (last2Digits > 10 && last2Digits < 20) {\n return number + '-ти';\n } else if (lastDigit === 1) {\n return number + '-ви';\n } else if (lastDigit === 2) {\n return number + '-ри';\n } else if (lastDigit === 7 || lastDigit === 8) {\n return number + '-ми';\n } else {\n return number + '-ти';\n }\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return mk;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var ml = moment.defineLocale('ml', {\n months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split('_'),\n monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split('_'),\n monthsParseExact : true,\n weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split('_'),\n weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),\n weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),\n longDateFormat : {\n LT : 'A h:mm -നു',\n LTS : 'A h:mm:ss -നു',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY, A h:mm -നു',\n LLLL : 'dddd, D MMMM YYYY, A h:mm -നു'\n },\n calendar : {\n sameDay : '[ഇന്ന്] LT',\n nextDay : '[നാളെ] LT',\n nextWeek : 'dddd, LT',\n lastDay : '[ഇന്നലെ] LT',\n lastWeek : '[കഴിഞ്ഞ] dddd, LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s കഴിഞ്ഞ്',\n past : '%s മുൻപ്',\n s : 'അൽപ നിമിഷങ്ങൾ',\n ss : '%d സെക്കൻഡ്',\n m : 'ഒരു മിനിറ്റ്',\n mm : '%d മിനിറ്റ്',\n h : 'ഒരു മണിക്കൂർ',\n hh : '%d മണിക്കൂർ',\n d : 'ഒരു ദിവസം',\n dd : '%d ദിവസം',\n M : 'ഒരു മാസം',\n MM : '%d മാസം',\n y : 'ഒരു വർഷം',\n yy : '%d വർഷം'\n },\n meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if ((meridiem === 'രാത്രി' && hour >= 4) ||\n meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||\n meridiem === 'വൈകുന്നേരം') {\n return hour + 12;\n } else {\n return hour;\n }\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 4) {\n return 'രാത്രി';\n } else if (hour < 12) {\n return 'രാവിലെ';\n } else if (hour < 17) {\n return 'ഉച്ച കഴിഞ്ഞ്';\n } else if (hour < 20) {\n return 'വൈകുന്നേരം';\n } else {\n return 'രാത്രി';\n }\n }\n });\n\n return ml;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n function translate(number, withoutSuffix, key, isFuture) {\n switch (key) {\n case 's':\n return withoutSuffix ? 'хэдхэн секунд' : 'хэдхэн секундын';\n case 'ss':\n return number + (withoutSuffix ? ' секунд' : ' секундын');\n case 'm':\n case 'mm':\n return number + (withoutSuffix ? ' минут' : ' минутын');\n case 'h':\n case 'hh':\n return number + (withoutSuffix ? ' цаг' : ' цагийн');\n case 'd':\n case 'dd':\n return number + (withoutSuffix ? ' өдөр' : ' өдрийн');\n case 'M':\n case 'MM':\n return number + (withoutSuffix ? ' сар' : ' сарын');\n case 'y':\n case 'yy':\n return number + (withoutSuffix ? ' жил' : ' жилийн');\n default:\n return number;\n }\n }\n\n var mn = moment.defineLocale('mn', {\n months : 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split('_'),\n monthsShort : '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split('_'),\n monthsParseExact : true,\n weekdays : 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'),\n weekdaysShort : 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'),\n weekdaysMin : 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'YYYY-MM-DD',\n LL : 'YYYY оны MMMMын D',\n LLL : 'YYYY оны MMMMын D HH:mm',\n LLLL : 'dddd, YYYY оны MMMMын D HH:mm'\n },\n meridiemParse: /ҮӨ|ҮХ/i,\n isPM : function (input) {\n return input === 'ҮХ';\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ҮӨ';\n } else {\n return 'ҮХ';\n }\n },\n calendar : {\n sameDay : '[Өнөөдөр] LT',\n nextDay : '[Маргааш] LT',\n nextWeek : '[Ирэх] dddd LT',\n lastDay : '[Өчигдөр] LT',\n lastWeek : '[Өнгөрсөн] dddd LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s дараа',\n past : '%s өмнө',\n s : translate,\n ss : translate,\n m : translate,\n mm : translate,\n h : translate,\n hh : translate,\n d : translate,\n dd : translate,\n M : translate,\n MM : translate,\n y : translate,\n yy : translate\n },\n dayOfMonthOrdinalParse: /\\d{1,2} өдөр/,\n ordinal : function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + ' өдөр';\n default:\n return number;\n }\n }\n });\n\n return mn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '१',\n '2': '२',\n '3': '३',\n '4': '४',\n '5': '५',\n '6': '६',\n '7': '७',\n '8': '८',\n '9': '९',\n '0': '०'\n },\n numberMap = {\n '१': '1',\n '२': '2',\n '३': '3',\n '४': '4',\n '५': '5',\n '६': '6',\n '७': '7',\n '८': '8',\n '९': '9',\n '०': '0'\n };\n\n function relativeTimeMr(number, withoutSuffix, string, isFuture)\n {\n var output = '';\n if (withoutSuffix) {\n switch (string) {\n case 's': output = 'काही सेकंद'; break;\n case 'ss': output = '%d सेकंद'; break;\n case 'm': output = 'एक मिनिट'; break;\n case 'mm': output = '%d मिनिटे'; break;\n case 'h': output = 'एक तास'; break;\n case 'hh': output = '%d तास'; break;\n case 'd': output = 'एक दिवस'; break;\n case 'dd': output = '%d दिवस'; break;\n case 'M': output = 'एक महिना'; break;\n case 'MM': output = '%d महिने'; break;\n case 'y': output = 'एक वर्ष'; break;\n case 'yy': output = '%d वर्षे'; break;\n }\n }\n else {\n switch (string) {\n case 's': output = 'काही सेकंदां'; break;\n case 'ss': output = '%d सेकंदां'; break;\n case 'm': output = 'एका मिनिटा'; break;\n case 'mm': output = '%d मिनिटां'; break;\n case 'h': output = 'एका तासा'; break;\n case 'hh': output = '%d तासां'; break;\n case 'd': output = 'एका दिवसा'; break;\n case 'dd': output = '%d दिवसां'; break;\n case 'M': output = 'एका महिन्या'; break;\n case 'MM': output = '%d महिन्यां'; break;\n case 'y': output = 'एका वर्षा'; break;\n case 'yy': output = '%d वर्षां'; break;\n }\n }\n return output.replace(/%d/i, number);\n }\n\n var mr = moment.defineLocale('mr', {\n months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'),\n monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'),\n monthsParseExact : true,\n weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),\n weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),\n longDateFormat : {\n LT : 'A h:mm वाजता',\n LTS : 'A h:mm:ss वाजता',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY, A h:mm वाजता',\n LLLL : 'dddd, D MMMM YYYY, A h:mm वाजता'\n },\n calendar : {\n sameDay : '[आज] LT',\n nextDay : '[उद्या] LT',\n nextWeek : 'dddd, LT',\n lastDay : '[काल] LT',\n lastWeek: '[मागील] dddd, LT',\n sameElse : 'L'\n },\n relativeTime : {\n future: '%sमध्ये',\n past: '%sपूर्वी',\n s: relativeTimeMr,\n ss: relativeTimeMr,\n m: relativeTimeMr,\n mm: relativeTimeMr,\n h: relativeTimeMr,\n hh: relativeTimeMr,\n d: relativeTimeMr,\n dd: relativeTimeMr,\n M: relativeTimeMr,\n MM: relativeTimeMr,\n y: relativeTimeMr,\n yy: relativeTimeMr\n },\n preparse: function (string) {\n return string.replace(/[१२३४५६७८९०]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n meridiemParse: /रात्री|सकाळी|दुपारी|सायंकाळी/,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'रात्री') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'सकाळी') {\n return hour;\n } else if (meridiem === 'दुपारी') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'सायंकाळी') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'रात्री';\n } else if (hour < 10) {\n return 'सकाळी';\n } else if (hour < 17) {\n return 'दुपारी';\n } else if (hour < 20) {\n return 'सायंकाळी';\n } else {\n return 'रात्री';\n }\n },\n week : {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 6th is the first week of the year.\n }\n });\n\n return mr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var msMy = moment.defineLocale('ms-my', {\n months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),\n monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n longDateFormat : {\n LT : 'HH.mm',\n LTS : 'HH.mm.ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY [pukul] HH.mm',\n LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n },\n meridiemParse: /pagi|tengahari|petang|malam/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'pagi') {\n return hour;\n } else if (meridiem === 'tengahari') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'petang' || meridiem === 'malam') {\n return hour + 12;\n }\n },\n meridiem : function (hours, minutes, isLower) {\n if (hours < 11) {\n return 'pagi';\n } else if (hours < 15) {\n return 'tengahari';\n } else if (hours < 19) {\n return 'petang';\n } else {\n return 'malam';\n }\n },\n calendar : {\n sameDay : '[Hari ini pukul] LT',\n nextDay : '[Esok pukul] LT',\n nextWeek : 'dddd [pukul] LT',\n lastDay : '[Kelmarin pukul] LT',\n lastWeek : 'dddd [lepas pukul] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'dalam %s',\n past : '%s yang lepas',\n s : 'beberapa saat',\n ss : '%d saat',\n m : 'seminit',\n mm : '%d minit',\n h : 'sejam',\n hh : '%d jam',\n d : 'sehari',\n dd : '%d hari',\n M : 'sebulan',\n MM : '%d bulan',\n y : 'setahun',\n yy : '%d tahun'\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return msMy;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var ms = moment.defineLocale('ms', {\n months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),\n monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n longDateFormat : {\n LT : 'HH.mm',\n LTS : 'HH.mm.ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY [pukul] HH.mm',\n LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n },\n meridiemParse: /pagi|tengahari|petang|malam/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'pagi') {\n return hour;\n } else if (meridiem === 'tengahari') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'petang' || meridiem === 'malam') {\n return hour + 12;\n }\n },\n meridiem : function (hours, minutes, isLower) {\n if (hours < 11) {\n return 'pagi';\n } else if (hours < 15) {\n return 'tengahari';\n } else if (hours < 19) {\n return 'petang';\n } else {\n return 'malam';\n }\n },\n calendar : {\n sameDay : '[Hari ini pukul] LT',\n nextDay : '[Esok pukul] LT',\n nextWeek : 'dddd [pukul] LT',\n lastDay : '[Kelmarin pukul] LT',\n lastWeek : 'dddd [lepas pukul] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'dalam %s',\n past : '%s yang lepas',\n s : 'beberapa saat',\n ss : '%d saat',\n m : 'seminit',\n mm : '%d minit',\n h : 'sejam',\n hh : '%d jam',\n d : 'sehari',\n dd : '%d hari',\n M : 'sebulan',\n MM : '%d bulan',\n y : 'setahun',\n yy : '%d tahun'\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return ms;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var mt = moment.defineLocale('mt', {\n months : 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split('_'),\n monthsShort : 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'),\n weekdays : 'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split('_'),\n weekdaysShort : 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'),\n weekdaysMin : 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[Illum fil-]LT',\n nextDay : '[Għada fil-]LT',\n nextWeek : 'dddd [fil-]LT',\n lastDay : '[Il-bieraħ fil-]LT',\n lastWeek : 'dddd [li għadda] [fil-]LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'f’ %s',\n past : '%s ilu',\n s : 'ftit sekondi',\n ss : '%d sekondi',\n m : 'minuta',\n mm : '%d minuti',\n h : 'siegħa',\n hh : '%d siegħat',\n d : 'ġurnata',\n dd : '%d ġranet',\n M : 'xahar',\n MM : '%d xhur',\n y : 'sena',\n yy : '%d sni'\n },\n dayOfMonthOrdinalParse : /\\d{1,2}º/,\n ordinal: '%dº',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return mt;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '၁',\n '2': '၂',\n '3': '၃',\n '4': '၄',\n '5': '၅',\n '6': '၆',\n '7': '၇',\n '8': '၈',\n '9': '၉',\n '0': '၀'\n }, numberMap = {\n '၁': '1',\n '၂': '2',\n '၃': '3',\n '၄': '4',\n '၅': '5',\n '၆': '6',\n '၇': '7',\n '၈': '8',\n '၉': '9',\n '၀': '0'\n };\n\n var my = moment.defineLocale('my', {\n months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'),\n monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),\n weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'),\n weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm'\n },\n calendar: {\n sameDay: '[ယနေ.] LT [မှာ]',\n nextDay: '[မနက်ဖြန်] LT [မှာ]',\n nextWeek: 'dddd LT [မှာ]',\n lastDay: '[မနေ.က] LT [မှာ]',\n lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',\n sameElse: 'L'\n },\n relativeTime: {\n future: 'လာမည့် %s မှာ',\n past: 'လွန်ခဲ့သော %s က',\n s: 'စက္ကန်.အနည်းငယ်',\n ss : '%d စက္ကန့်',\n m: 'တစ်မိနစ်',\n mm: '%d မိနစ်',\n h: 'တစ်နာရီ',\n hh: '%d နာရီ',\n d: 'တစ်ရက်',\n dd: '%d ရက်',\n M: 'တစ်လ',\n MM: '%d လ',\n y: 'တစ်နှစ်',\n yy: '%d နှစ်'\n },\n preparse: function (string) {\n return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return my;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var nb = moment.defineLocale('nb', {\n months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n monthsShort : 'jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),\n monthsParseExact : true,\n weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n weekdaysShort : 'sø._ma._ti._on._to._fr._lø.'.split('_'),\n weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY [kl.] HH:mm',\n LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'\n },\n calendar : {\n sameDay: '[i dag kl.] LT',\n nextDay: '[i morgen kl.] LT',\n nextWeek: 'dddd [kl.] LT',\n lastDay: '[i går kl.] LT',\n lastWeek: '[forrige] dddd [kl.] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'om %s',\n past : '%s siden',\n s : 'noen sekunder',\n ss : '%d sekunder',\n m : 'ett minutt',\n mm : '%d minutter',\n h : 'en time',\n hh : '%d timer',\n d : 'en dag',\n dd : '%d dager',\n M : 'en måned',\n MM : '%d måneder',\n y : 'ett år',\n yy : '%d år'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return nb;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '१',\n '2': '२',\n '3': '३',\n '4': '४',\n '5': '५',\n '6': '६',\n '7': '७',\n '8': '८',\n '9': '९',\n '0': '०'\n },\n numberMap = {\n '१': '1',\n '२': '2',\n '३': '3',\n '४': '4',\n '५': '5',\n '६': '6',\n '७': '7',\n '८': '8',\n '९': '9',\n '०': '0'\n };\n\n var ne = moment.defineLocale('ne', {\n months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split('_'),\n monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split('_'),\n monthsParseExact : true,\n weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'),\n weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),\n weekdaysMin : 'आ._सो._मं._बु._बि._शु._श.'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'Aको h:mm बजे',\n LTS : 'Aको h:mm:ss बजे',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY, Aको h:mm बजे',\n LLLL : 'dddd, D MMMM YYYY, Aको h:mm बजे'\n },\n preparse: function (string) {\n return string.replace(/[१२३४५६७८९०]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n meridiemParse: /राति|बिहान|दिउँसो|साँझ/,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'राति') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'बिहान') {\n return hour;\n } else if (meridiem === 'दिउँसो') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'साँझ') {\n return hour + 12;\n }\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 3) {\n return 'राति';\n } else if (hour < 12) {\n return 'बिहान';\n } else if (hour < 16) {\n return 'दिउँसो';\n } else if (hour < 20) {\n return 'साँझ';\n } else {\n return 'राति';\n }\n },\n calendar : {\n sameDay : '[आज] LT',\n nextDay : '[भोलि] LT',\n nextWeek : '[आउँदो] dddd[,] LT',\n lastDay : '[हिजो] LT',\n lastWeek : '[गएको] dddd[,] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%sमा',\n past : '%s अगाडि',\n s : 'केही क्षण',\n ss : '%d सेकेण्ड',\n m : 'एक मिनेट',\n mm : '%d मिनेट',\n h : 'एक घण्टा',\n hh : '%d घण्टा',\n d : 'एक दिन',\n dd : '%d दिन',\n M : 'एक महिना',\n MM : '%d महिना',\n y : 'एक बर्ष',\n yy : '%d बर्ष'\n },\n week : {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 6th is the first week of the year.\n }\n });\n\n return ne;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');\n\n var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];\n var monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n var nlBe = moment.defineLocale('nl-be', {\n months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),\n monthsShort : function (m, format) {\n if (!m) {\n return monthsShortWithDots;\n } else if (/-MMM-/.test(format)) {\n return monthsShortWithoutDots[m.month()];\n } else {\n return monthsShortWithDots[m.month()];\n }\n },\n\n monthsRegex: monthsRegex,\n monthsShortRegex: monthsRegex,\n monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n monthsShortStrictRegex: /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n monthsParse : monthsParse,\n longMonthsParse : monthsParse,\n shortMonthsParse : monthsParse,\n\n weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),\n weekdaysMin : 'zo_ma_di_wo_do_vr_za'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[vandaag om] LT',\n nextDay: '[morgen om] LT',\n nextWeek: 'dddd [om] LT',\n lastDay: '[gisteren om] LT',\n lastWeek: '[afgelopen] dddd [om] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'over %s',\n past : '%s geleden',\n s : 'een paar seconden',\n ss : '%d seconden',\n m : 'één minuut',\n mm : '%d minuten',\n h : 'één uur',\n hh : '%d uur',\n d : 'één dag',\n dd : '%d dagen',\n M : 'één maand',\n MM : '%d maanden',\n y : 'één jaar',\n yy : '%d jaar'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n ordinal : function (number) {\n return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return nlBe;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');\n\n var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];\n var monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n var nl = moment.defineLocale('nl', {\n months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),\n monthsShort : function (m, format) {\n if (!m) {\n return monthsShortWithDots;\n } else if (/-MMM-/.test(format)) {\n return monthsShortWithoutDots[m.month()];\n } else {\n return monthsShortWithDots[m.month()];\n }\n },\n\n monthsRegex: monthsRegex,\n monthsShortRegex: monthsRegex,\n monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n monthsShortStrictRegex: /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n monthsParse : monthsParse,\n longMonthsParse : monthsParse,\n shortMonthsParse : monthsParse,\n\n weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),\n weekdaysMin : 'zo_ma_di_wo_do_vr_za'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD-MM-YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[vandaag om] LT',\n nextDay: '[morgen om] LT',\n nextWeek: 'dddd [om] LT',\n lastDay: '[gisteren om] LT',\n lastWeek: '[afgelopen] dddd [om] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'over %s',\n past : '%s geleden',\n s : 'een paar seconden',\n ss : '%d seconden',\n m : 'één minuut',\n mm : '%d minuten',\n h : 'één uur',\n hh : '%d uur',\n d : 'één dag',\n dd : '%d dagen',\n M : 'één maand',\n MM : '%d maanden',\n y : 'één jaar',\n yy : '%d jaar'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n ordinal : function (number) {\n return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return nl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var nn = moment.defineLocale('nn', {\n months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n weekdays : 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),\n weekdaysShort : 'sun_mån_tys_ons_tor_fre_lau'.split('_'),\n weekdaysMin : 'su_må_ty_on_to_fr_lø'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY [kl.] H:mm',\n LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'\n },\n calendar : {\n sameDay: '[I dag klokka] LT',\n nextDay: '[I morgon klokka] LT',\n nextWeek: 'dddd [klokka] LT',\n lastDay: '[I går klokka] LT',\n lastWeek: '[Føregåande] dddd [klokka] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'om %s',\n past : '%s sidan',\n s : 'nokre sekund',\n ss : '%d sekund',\n m : 'eit minutt',\n mm : '%d minutt',\n h : 'ein time',\n hh : '%d timar',\n d : 'ein dag',\n dd : '%d dagar',\n M : 'ein månad',\n MM : '%d månader',\n y : 'eit år',\n yy : '%d år'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return nn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '੧',\n '2': '੨',\n '3': '੩',\n '4': '੪',\n '5': '੫',\n '6': '੬',\n '7': '੭',\n '8': '੮',\n '9': '੯',\n '0': '੦'\n },\n numberMap = {\n '੧': '1',\n '੨': '2',\n '੩': '3',\n '੪': '4',\n '੫': '5',\n '੬': '6',\n '੭': '7',\n '੮': '8',\n '੯': '9',\n '੦': '0'\n };\n\n var paIn = moment.defineLocale('pa-in', {\n // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi.\n months : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),\n monthsShort : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),\n weekdays : 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split('_'),\n weekdaysShort : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n weekdaysMin : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n longDateFormat : {\n LT : 'A h:mm ਵਜੇ',\n LTS : 'A h:mm:ss ਵਜੇ',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY, A h:mm ਵਜੇ',\n LLLL : 'dddd, D MMMM YYYY, A h:mm ਵਜੇ'\n },\n calendar : {\n sameDay : '[ਅਜ] LT',\n nextDay : '[ਕਲ] LT',\n nextWeek : '[ਅਗਲਾ] dddd, LT',\n lastDay : '[ਕਲ] LT',\n lastWeek : '[ਪਿਛਲੇ] dddd, LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s ਵਿੱਚ',\n past : '%s ਪਿਛਲੇ',\n s : 'ਕੁਝ ਸਕਿੰਟ',\n ss : '%d ਸਕਿੰਟ',\n m : 'ਇਕ ਮਿੰਟ',\n mm : '%d ਮਿੰਟ',\n h : 'ਇੱਕ ਘੰਟਾ',\n hh : '%d ਘੰਟੇ',\n d : 'ਇੱਕ ਦਿਨ',\n dd : '%d ਦਿਨ',\n M : 'ਇੱਕ ਮਹੀਨਾ',\n MM : '%d ਮਹੀਨੇ',\n y : 'ਇੱਕ ਸਾਲ',\n yy : '%d ਸਾਲ'\n },\n preparse: function (string) {\n return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n // Punjabi notation for meridiems are quite fuzzy in practice. While there exists\n // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.\n meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'ਰਾਤ') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'ਸਵੇਰ') {\n return hour;\n } else if (meridiem === 'ਦੁਪਹਿਰ') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'ਸ਼ਾਮ') {\n return hour + 12;\n }\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 4) {\n return 'ਰਾਤ';\n } else if (hour < 10) {\n return 'ਸਵੇਰ';\n } else if (hour < 17) {\n return 'ਦੁਪਹਿਰ';\n } else if (hour < 20) {\n return 'ਸ਼ਾਮ';\n } else {\n return 'ਰਾਤ';\n }\n },\n week : {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 6th is the first week of the year.\n }\n });\n\n return paIn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_'),\n monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_');\n function plural(n) {\n return (n % 10 < 5) && (n % 10 > 1) && ((~~(n / 10) % 10) !== 1);\n }\n function translate(number, withoutSuffix, key) {\n var result = number + ' ';\n switch (key) {\n case 'ss':\n return result + (plural(number) ? 'sekundy' : 'sekund');\n case 'm':\n return withoutSuffix ? 'minuta' : 'minutę';\n case 'mm':\n return result + (plural(number) ? 'minuty' : 'minut');\n case 'h':\n return withoutSuffix ? 'godzina' : 'godzinę';\n case 'hh':\n return result + (plural(number) ? 'godziny' : 'godzin');\n case 'MM':\n return result + (plural(number) ? 'miesiące' : 'miesięcy');\n case 'yy':\n return result + (plural(number) ? 'lata' : 'lat');\n }\n }\n\n var pl = moment.defineLocale('pl', {\n months : function (momentToFormat, format) {\n if (!momentToFormat) {\n return monthsNominative;\n } else if (format === '') {\n // Hack: if format empty we know this is used to generate\n // RegExp by moment. Give then back both valid forms of months\n // in RegExp ready format.\n return '(' + monthsSubjective[momentToFormat.month()] + '|' + monthsNominative[momentToFormat.month()] + ')';\n } else if (/D MMMM/.test(format)) {\n return monthsSubjective[momentToFormat.month()];\n } else {\n return monthsNominative[momentToFormat.month()];\n }\n },\n monthsShort : 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),\n weekdays : 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),\n weekdaysShort : 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),\n weekdaysMin : 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[Dziś o] LT',\n nextDay: '[Jutro o] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[W niedzielę o] LT';\n\n case 2:\n return '[We wtorek o] LT';\n\n case 3:\n return '[W środę o] LT';\n\n case 6:\n return '[W sobotę o] LT';\n\n default:\n return '[W] dddd [o] LT';\n }\n },\n lastDay: '[Wczoraj o] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return '[W zeszłą niedzielę o] LT';\n case 3:\n return '[W zeszłą środę o] LT';\n case 6:\n return '[W zeszłą sobotę o] LT';\n default:\n return '[W zeszły] dddd [o] LT';\n }\n },\n sameElse: 'L'\n },\n relativeTime : {\n future : 'za %s',\n past : '%s temu',\n s : 'kilka sekund',\n ss : translate,\n m : translate,\n mm : translate,\n h : translate,\n hh : translate,\n d : '1 dzień',\n dd : '%d dni',\n M : 'miesiąc',\n MM : translate,\n y : 'rok',\n yy : translate\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return pl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var ptBr = moment.defineLocale('pt-br', {\n months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),\n monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),\n weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D [de] MMMM [de] YYYY',\n LLL : 'D [de] MMMM [de] YYYY [às] HH:mm',\n LLLL : 'dddd, D [de] MMMM [de] YYYY [às] HH:mm'\n },\n calendar : {\n sameDay: '[Hoje às] LT',\n nextDay: '[Amanhã às] LT',\n nextWeek: 'dddd [às] LT',\n lastDay: '[Ontem às] LT',\n lastWeek: function () {\n return (this.day() === 0 || this.day() === 6) ?\n '[Último] dddd [às] LT' : // Saturday + Sunday\n '[Última] dddd [às] LT'; // Monday - Friday\n },\n sameElse: 'L'\n },\n relativeTime : {\n future : 'em %s',\n past : 'há %s',\n s : 'poucos segundos',\n ss : '%d segundos',\n m : 'um minuto',\n mm : '%d minutos',\n h : 'uma hora',\n hh : '%d horas',\n d : 'um dia',\n dd : '%d dias',\n M : 'um mês',\n MM : '%d meses',\n y : 'um ano',\n yy : '%d anos'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal : '%dº'\n });\n\n return ptBr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var pt = moment.defineLocale('pt', {\n months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),\n monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),\n weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D [de] MMMM [de] YYYY',\n LLL : 'D [de] MMMM [de] YYYY HH:mm',\n LLLL : 'dddd, D [de] MMMM [de] YYYY HH:mm'\n },\n calendar : {\n sameDay: '[Hoje às] LT',\n nextDay: '[Amanhã às] LT',\n nextWeek: 'dddd [às] LT',\n lastDay: '[Ontem às] LT',\n lastWeek: function () {\n return (this.day() === 0 || this.day() === 6) ?\n '[Último] dddd [às] LT' : // Saturday + Sunday\n '[Última] dddd [às] LT'; // Monday - Friday\n },\n sameElse: 'L'\n },\n relativeTime : {\n future : 'em %s',\n past : 'há %s',\n s : 'segundos',\n ss : '%d segundos',\n m : 'um minuto',\n mm : '%d minutos',\n h : 'uma hora',\n hh : '%d horas',\n d : 'um dia',\n dd : '%d dias',\n M : 'um mês',\n MM : '%d meses',\n y : 'um ano',\n yy : '%d anos'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal : '%dº',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return pt;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n function relativeTimeWithPlural(number, withoutSuffix, key) {\n var format = {\n 'ss': 'secunde',\n 'mm': 'minute',\n 'hh': 'ore',\n 'dd': 'zile',\n 'MM': 'luni',\n 'yy': 'ani'\n },\n separator = ' ';\n if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {\n separator = ' de ';\n }\n return number + separator + format[key];\n }\n\n var ro = moment.defineLocale('ro', {\n months : 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split('_'),\n monthsShort : 'ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split('_'),\n monthsParseExact: true,\n weekdays : 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),\n weekdaysShort : 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),\n weekdaysMin : 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY H:mm',\n LLLL : 'dddd, D MMMM YYYY H:mm'\n },\n calendar : {\n sameDay: '[azi la] LT',\n nextDay: '[mâine la] LT',\n nextWeek: 'dddd [la] LT',\n lastDay: '[ieri la] LT',\n lastWeek: '[fosta] dddd [la] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'peste %s',\n past : '%s în urmă',\n s : 'câteva secunde',\n ss : relativeTimeWithPlural,\n m : 'un minut',\n mm : relativeTimeWithPlural,\n h : 'o oră',\n hh : relativeTimeWithPlural,\n d : 'o zi',\n dd : relativeTimeWithPlural,\n M : 'o lună',\n MM : relativeTimeWithPlural,\n y : 'un an',\n yy : relativeTimeWithPlural\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return ro;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n function plural(word, num) {\n var forms = word.split('_');\n return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n }\n function relativeTimeWithPlural(number, withoutSuffix, key) {\n var format = {\n 'ss': withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n 'mm': withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',\n 'hh': 'час_часа_часов',\n 'dd': 'день_дня_дней',\n 'MM': 'месяц_месяца_месяцев',\n 'yy': 'год_года_лет'\n };\n if (key === 'm') {\n return withoutSuffix ? 'минута' : 'минуту';\n }\n else {\n return number + ' ' + plural(format[key], +number);\n }\n }\n var monthsParse = [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[йя]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i];\n\n // http://new.gramota.ru/spravka/rules/139-prop : § 103\n // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637\n // CLDR data: http://www.unicode.org/cldr/charts/28/summary/ru.html#1753\n var ru = moment.defineLocale('ru', {\n months : {\n format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_'),\n standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_')\n },\n monthsShort : {\n // по CLDR именно \"июл.\" и \"июн.\", но какой смысл менять букву на точку ?\n format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_'),\n standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_')\n },\n weekdays : {\n standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'),\n format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_'),\n isFormat: /\\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\\] ?dddd/\n },\n weekdaysShort : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n weekdaysMin : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n monthsParse : monthsParse,\n longMonthsParse : monthsParse,\n shortMonthsParse : monthsParse,\n\n // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки\n monthsRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n // копия предыдущего\n monthsShortRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n // полные названия с падежами\n monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,\n\n // Выражение, которое соотвествует только сокращённым формам\n monthsShortStrictRegex: /^(янв\\.|февр?\\.|мар[т.]|апр\\.|ма[яй]|июн[ья.]|июл[ья.]|авг\\.|сент?\\.|окт\\.|нояб?\\.|дек\\.)/i,\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY г.',\n LLL : 'D MMMM YYYY г., H:mm',\n LLLL : 'dddd, D MMMM YYYY г., H:mm'\n },\n calendar : {\n sameDay: '[Сегодня, в] LT',\n nextDay: '[Завтра, в] LT',\n lastDay: '[Вчера, в] LT',\n nextWeek: function (now) {\n if (now.week() !== this.week()) {\n switch (this.day()) {\n case 0:\n return '[В следующее] dddd, [в] LT';\n case 1:\n case 2:\n case 4:\n return '[В следующий] dddd, [в] LT';\n case 3:\n case 5:\n case 6:\n return '[В следующую] dddd, [в] LT';\n }\n } else {\n if (this.day() === 2) {\n return '[Во] dddd, [в] LT';\n } else {\n return '[В] dddd, [в] LT';\n }\n }\n },\n lastWeek: function (now) {\n if (now.week() !== this.week()) {\n switch (this.day()) {\n case 0:\n return '[В прошлое] dddd, [в] LT';\n case 1:\n case 2:\n case 4:\n return '[В прошлый] dddd, [в] LT';\n case 3:\n case 5:\n case 6:\n return '[В прошлую] dddd, [в] LT';\n }\n } else {\n if (this.day() === 2) {\n return '[Во] dddd, [в] LT';\n } else {\n return '[В] dddd, [в] LT';\n }\n }\n },\n sameElse: 'L'\n },\n relativeTime : {\n future : 'через %s',\n past : '%s назад',\n s : 'несколько секунд',\n ss : relativeTimeWithPlural,\n m : relativeTimeWithPlural,\n mm : relativeTimeWithPlural,\n h : 'час',\n hh : relativeTimeWithPlural,\n d : 'день',\n dd : relativeTimeWithPlural,\n M : 'месяц',\n MM : relativeTimeWithPlural,\n y : 'год',\n yy : relativeTimeWithPlural\n },\n meridiemParse: /ночи|утра|дня|вечера/i,\n isPM : function (input) {\n return /^(дня|вечера)$/.test(input);\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 4) {\n return 'ночи';\n } else if (hour < 12) {\n return 'утра';\n } else if (hour < 17) {\n return 'дня';\n } else {\n return 'вечера';\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(й|го|я)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'M':\n case 'd':\n case 'DDD':\n return number + '-й';\n case 'D':\n return number + '-го';\n case 'w':\n case 'W':\n return number + '-я';\n default:\n return number;\n }\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return ru;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var months = [\n 'جنوري',\n 'فيبروري',\n 'مارچ',\n 'اپريل',\n 'مئي',\n 'جون',\n 'جولاءِ',\n 'آگسٽ',\n 'سيپٽمبر',\n 'آڪٽوبر',\n 'نومبر',\n 'ڊسمبر'\n ];\n var days = [\n 'آچر',\n 'سومر',\n 'اڱارو',\n 'اربع',\n 'خميس',\n 'جمع',\n 'ڇنڇر'\n ];\n\n var sd = moment.defineLocale('sd', {\n months : months,\n monthsShort : months,\n weekdays : days,\n weekdaysShort : days,\n weekdaysMin : days,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd، D MMMM YYYY HH:mm'\n },\n meridiemParse: /صبح|شام/,\n isPM : function (input) {\n return 'شام' === input;\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 12) {\n return 'صبح';\n }\n return 'شام';\n },\n calendar : {\n sameDay : '[اڄ] LT',\n nextDay : '[سڀاڻي] LT',\n nextWeek : 'dddd [اڳين هفتي تي] LT',\n lastDay : '[ڪالهه] LT',\n lastWeek : '[گزريل هفتي] dddd [تي] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s پوء',\n past : '%s اڳ',\n s : 'چند سيڪنڊ',\n ss : '%d سيڪنڊ',\n m : 'هڪ منٽ',\n mm : '%d منٽ',\n h : 'هڪ ڪلاڪ',\n hh : '%d ڪلاڪ',\n d : 'هڪ ڏينهن',\n dd : '%d ڏينهن',\n M : 'هڪ مهينو',\n MM : '%d مهينا',\n y : 'هڪ سال',\n yy : '%d سال'\n },\n preparse: function (string) {\n return string.replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/,/g, '،');\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return sd;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var se = moment.defineLocale('se', {\n months : 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split('_'),\n monthsShort : 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),\n weekdays : 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split('_'),\n weekdaysShort : 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),\n weekdaysMin : 's_v_m_g_d_b_L'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'MMMM D. [b.] YYYY',\n LLL : 'MMMM D. [b.] YYYY [ti.] HH:mm',\n LLLL : 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm'\n },\n calendar : {\n sameDay: '[otne ti] LT',\n nextDay: '[ihttin ti] LT',\n nextWeek: 'dddd [ti] LT',\n lastDay: '[ikte ti] LT',\n lastWeek: '[ovddit] dddd [ti] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : '%s geažes',\n past : 'maŋit %s',\n s : 'moadde sekunddat',\n ss: '%d sekunddat',\n m : 'okta minuhta',\n mm : '%d minuhtat',\n h : 'okta diimmu',\n hh : '%d diimmut',\n d : 'okta beaivi',\n dd : '%d beaivvit',\n M : 'okta mánnu',\n MM : '%d mánut',\n y : 'okta jahki',\n yy : '%d jagit'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return se;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n /*jshint -W100*/\n var si = moment.defineLocale('si', {\n months : 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split('_'),\n monthsShort : 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split('_'),\n weekdays : 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split('_'),\n weekdaysShort : 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),\n weekdaysMin : 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'a h:mm',\n LTS : 'a h:mm:ss',\n L : 'YYYY/MM/DD',\n LL : 'YYYY MMMM D',\n LLL : 'YYYY MMMM D, a h:mm',\n LLLL : 'YYYY MMMM D [වැනි] dddd, a h:mm:ss'\n },\n calendar : {\n sameDay : '[අද] LT[ට]',\n nextDay : '[හෙට] LT[ට]',\n nextWeek : 'dddd LT[ට]',\n lastDay : '[ඊයේ] LT[ට]',\n lastWeek : '[පසුගිය] dddd LT[ට]',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%sකින්',\n past : '%sකට පෙර',\n s : 'තත්පර කිහිපය',\n ss : 'තත්පර %d',\n m : 'මිනිත්තුව',\n mm : 'මිනිත්තු %d',\n h : 'පැය',\n hh : 'පැය %d',\n d : 'දිනය',\n dd : 'දින %d',\n M : 'මාසය',\n MM : 'මාස %d',\n y : 'වසර',\n yy : 'වසර %d'\n },\n dayOfMonthOrdinalParse: /\\d{1,2} වැනි/,\n ordinal : function (number) {\n return number + ' වැනි';\n },\n meridiemParse : /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,\n isPM : function (input) {\n return input === 'ප.ව.' || input === 'පස් වරු';\n },\n meridiem : function (hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'ප.ව.' : 'පස් වරු';\n } else {\n return isLower ? 'පෙ.ව.' : 'පෙර වරු';\n }\n }\n });\n\n return si;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var months = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_'),\n monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');\n function plural(n) {\n return (n > 1) && (n < 5);\n }\n function translate(number, withoutSuffix, key, isFuture) {\n var result = number + ' ';\n switch (key) {\n case 's': // a few seconds / in a few seconds / a few seconds ago\n return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami';\n case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'sekundy' : 'sekúnd');\n } else {\n return result + 'sekundami';\n }\n break;\n case 'm': // a minute / in a minute / a minute ago\n return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou');\n case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'minúty' : 'minút');\n } else {\n return result + 'minútami';\n }\n break;\n case 'h': // an hour / in an hour / an hour ago\n return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');\n case 'hh': // 9 hours / in 9 hours / 9 hours ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'hodiny' : 'hodín');\n } else {\n return result + 'hodinami';\n }\n break;\n case 'd': // a day / in a day / a day ago\n return (withoutSuffix || isFuture) ? 'deň' : 'dňom';\n case 'dd': // 9 days / in 9 days / 9 days ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'dni' : 'dní');\n } else {\n return result + 'dňami';\n }\n break;\n case 'M': // a month / in a month / a month ago\n return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom';\n case 'MM': // 9 months / in 9 months / 9 months ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'mesiace' : 'mesiacov');\n } else {\n return result + 'mesiacmi';\n }\n break;\n case 'y': // a year / in a year / a year ago\n return (withoutSuffix || isFuture) ? 'rok' : 'rokom';\n case 'yy': // 9 years / in 9 years / 9 years ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'roky' : 'rokov');\n } else {\n return result + 'rokmi';\n }\n break;\n }\n }\n\n var sk = moment.defineLocale('sk', {\n months : months,\n monthsShort : monthsShort,\n weekdays : 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),\n weekdaysShort : 'ne_po_ut_st_št_pi_so'.split('_'),\n weekdaysMin : 'ne_po_ut_st_št_pi_so'.split('_'),\n longDateFormat : {\n LT: 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY H:mm',\n LLLL : 'dddd D. MMMM YYYY H:mm'\n },\n calendar : {\n sameDay: '[dnes o] LT',\n nextDay: '[zajtra o] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[v nedeľu o] LT';\n case 1:\n case 2:\n return '[v] dddd [o] LT';\n case 3:\n return '[v stredu o] LT';\n case 4:\n return '[vo štvrtok o] LT';\n case 5:\n return '[v piatok o] LT';\n case 6:\n return '[v sobotu o] LT';\n }\n },\n lastDay: '[včera o] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return '[minulú nedeľu o] LT';\n case 1:\n case 2:\n return '[minulý] dddd [o] LT';\n case 3:\n return '[minulú stredu o] LT';\n case 4:\n case 5:\n return '[minulý] dddd [o] LT';\n case 6:\n return '[minulú sobotu o] LT';\n }\n },\n sameElse: 'L'\n },\n relativeTime : {\n future : 'za %s',\n past : 'pred %s',\n s : translate,\n ss : translate,\n m : translate,\n mm : translate,\n h : translate,\n hh : translate,\n d : translate,\n dd : translate,\n M : translate,\n MM : translate,\n y : translate,\n yy : translate\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return sk;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var result = number + ' ';\n switch (key) {\n case 's':\n return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami';\n case 'ss':\n if (number === 1) {\n result += withoutSuffix ? 'sekundo' : 'sekundi';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';\n } else {\n result += 'sekund';\n }\n return result;\n case 'm':\n return withoutSuffix ? 'ena minuta' : 'eno minuto';\n case 'mm':\n if (number === 1) {\n result += withoutSuffix ? 'minuta' : 'minuto';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'minuti' : 'minutama';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'minute' : 'minutami';\n } else {\n result += withoutSuffix || isFuture ? 'minut' : 'minutami';\n }\n return result;\n case 'h':\n return withoutSuffix ? 'ena ura' : 'eno uro';\n case 'hh':\n if (number === 1) {\n result += withoutSuffix ? 'ura' : 'uro';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'uri' : 'urama';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'ure' : 'urami';\n } else {\n result += withoutSuffix || isFuture ? 'ur' : 'urami';\n }\n return result;\n case 'd':\n return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';\n case 'dd':\n if (number === 1) {\n result += withoutSuffix || isFuture ? 'dan' : 'dnem';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';\n } else {\n result += withoutSuffix || isFuture ? 'dni' : 'dnevi';\n }\n return result;\n case 'M':\n return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';\n case 'MM':\n if (number === 1) {\n result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'mesece' : 'meseci';\n } else {\n result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';\n }\n return result;\n case 'y':\n return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';\n case 'yy':\n if (number === 1) {\n result += withoutSuffix || isFuture ? 'leto' : 'letom';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'leti' : 'letoma';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'leta' : 'leti';\n } else {\n result += withoutSuffix || isFuture ? 'let' : 'leti';\n }\n return result;\n }\n }\n\n var sl = moment.defineLocale('sl', {\n months : 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'),\n monthsShort : 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'),\n monthsParseExact: true,\n weekdays : 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),\n weekdaysShort : 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),\n weekdaysMin : 'ne_po_to_sr_če_pe_so'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY H:mm',\n LLLL : 'dddd, D. MMMM YYYY H:mm'\n },\n calendar : {\n sameDay : '[danes ob] LT',\n nextDay : '[jutri ob] LT',\n\n nextWeek : function () {\n switch (this.day()) {\n case 0:\n return '[v] [nedeljo] [ob] LT';\n case 3:\n return '[v] [sredo] [ob] LT';\n case 6:\n return '[v] [soboto] [ob] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[v] dddd [ob] LT';\n }\n },\n lastDay : '[včeraj ob] LT',\n lastWeek : function () {\n switch (this.day()) {\n case 0:\n return '[prejšnjo] [nedeljo] [ob] LT';\n case 3:\n return '[prejšnjo] [sredo] [ob] LT';\n case 6:\n return '[prejšnjo] [soboto] [ob] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[prejšnji] dddd [ob] LT';\n }\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'čez %s',\n past : 'pred %s',\n s : processRelativeTime,\n ss : processRelativeTime,\n m : processRelativeTime,\n mm : processRelativeTime,\n h : processRelativeTime,\n hh : processRelativeTime,\n d : processRelativeTime,\n dd : processRelativeTime,\n M : processRelativeTime,\n MM : processRelativeTime,\n y : processRelativeTime,\n yy : processRelativeTime\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return sl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var sq = moment.defineLocale('sq', {\n months : 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'),\n monthsShort : 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),\n weekdays : 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'),\n weekdaysShort : 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),\n weekdaysMin : 'D_H_Ma_Më_E_P_Sh'.split('_'),\n weekdaysParseExact : true,\n meridiemParse: /PD|MD/,\n isPM: function (input) {\n return input.charAt(0) === 'M';\n },\n meridiem : function (hours, minutes, isLower) {\n return hours < 12 ? 'PD' : 'MD';\n },\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[Sot në] LT',\n nextDay : '[Nesër në] LT',\n nextWeek : 'dddd [në] LT',\n lastDay : '[Dje në] LT',\n lastWeek : 'dddd [e kaluar në] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'në %s',\n past : '%s më parë',\n s : 'disa sekonda',\n ss : '%d sekonda',\n m : 'një minutë',\n mm : '%d minuta',\n h : 'një orë',\n hh : '%d orë',\n d : 'një ditë',\n dd : '%d ditë',\n M : 'një muaj',\n MM : '%d muaj',\n y : 'një vit',\n yy : '%d vite'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return sq;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var translator = {\n words: { //Different grammatical cases\n ss: ['секунда', 'секунде', 'секунди'],\n m: ['један минут', 'једне минуте'],\n mm: ['минут', 'минуте', 'минута'],\n h: ['један сат', 'једног сата'],\n hh: ['сат', 'сата', 'сати'],\n dd: ['дан', 'дана', 'дана'],\n MM: ['месец', 'месеца', 'месеци'],\n yy: ['година', 'године', 'година']\n },\n correctGrammaticalCase: function (number, wordKey) {\n return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n },\n translate: function (number, withoutSuffix, key) {\n var wordKey = translator.words[key];\n if (key.length === 1) {\n return withoutSuffix ? wordKey[0] : wordKey[1];\n } else {\n return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n }\n }\n };\n\n var srCyrl = moment.defineLocale('sr-cyrl', {\n months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split('_'),\n monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'),\n monthsParseExact: true,\n weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),\n weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),\n weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),\n weekdaysParseExact : true,\n longDateFormat: {\n LT: 'H:mm',\n LTS : 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm',\n LLLL: 'dddd, D. MMMM YYYY H:mm'\n },\n calendar: {\n sameDay: '[данас у] LT',\n nextDay: '[сутра у] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[у] [недељу] [у] LT';\n case 3:\n return '[у] [среду] [у] LT';\n case 6:\n return '[у] [суботу] [у] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[у] dddd [у] LT';\n }\n },\n lastDay : '[јуче у] LT',\n lastWeek : function () {\n var lastWeekDays = [\n '[прошле] [недеље] [у] LT',\n '[прошлог] [понедељка] [у] LT',\n '[прошлог] [уторка] [у] LT',\n '[прошле] [среде] [у] LT',\n '[прошлог] [четвртка] [у] LT',\n '[прошлог] [петка] [у] LT',\n '[прошле] [суботе] [у] LT'\n ];\n return lastWeekDays[this.day()];\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'за %s',\n past : 'пре %s',\n s : 'неколико секунди',\n ss : translator.translate,\n m : translator.translate,\n mm : translator.translate,\n h : translator.translate,\n hh : translator.translate,\n d : 'дан',\n dd : translator.translate,\n M : 'месец',\n MM : translator.translate,\n y : 'годину',\n yy : translator.translate\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return srCyrl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var translator = {\n words: { //Different grammatical cases\n ss: ['sekunda', 'sekunde', 'sekundi'],\n m: ['jedan minut', 'jedne minute'],\n mm: ['minut', 'minute', 'minuta'],\n h: ['jedan sat', 'jednog sata'],\n hh: ['sat', 'sata', 'sati'],\n dd: ['dan', 'dana', 'dana'],\n MM: ['mesec', 'meseca', 'meseci'],\n yy: ['godina', 'godine', 'godina']\n },\n correctGrammaticalCase: function (number, wordKey) {\n return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n },\n translate: function (number, withoutSuffix, key) {\n var wordKey = translator.words[key];\n if (key.length === 1) {\n return withoutSuffix ? wordKey[0] : wordKey[1];\n } else {\n return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n }\n }\n };\n\n var sr = moment.defineLocale('sr', {\n months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),\n monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n monthsParseExact: true,\n weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split('_'),\n weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),\n weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n weekdaysParseExact : true,\n longDateFormat: {\n LT: 'H:mm',\n LTS : 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm',\n LLLL: 'dddd, D. MMMM YYYY H:mm'\n },\n calendar: {\n sameDay: '[danas u] LT',\n nextDay: '[sutra u] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[u] [nedelju] [u] LT';\n case 3:\n return '[u] [sredu] [u] LT';\n case 6:\n return '[u] [subotu] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[u] dddd [u] LT';\n }\n },\n lastDay : '[juče u] LT',\n lastWeek : function () {\n var lastWeekDays = [\n '[prošle] [nedelje] [u] LT',\n '[prošlog] [ponedeljka] [u] LT',\n '[prošlog] [utorka] [u] LT',\n '[prošle] [srede] [u] LT',\n '[prošlog] [četvrtka] [u] LT',\n '[prošlog] [petka] [u] LT',\n '[prošle] [subote] [u] LT'\n ];\n return lastWeekDays[this.day()];\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'za %s',\n past : 'pre %s',\n s : 'nekoliko sekundi',\n ss : translator.translate,\n m : translator.translate,\n mm : translator.translate,\n h : translator.translate,\n hh : translator.translate,\n d : 'dan',\n dd : translator.translate,\n M : 'mesec',\n MM : translator.translate,\n y : 'godinu',\n yy : translator.translate\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return sr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var ss = moment.defineLocale('ss', {\n months : \"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni\".split('_'),\n monthsShort : 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),\n weekdays : 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split('_'),\n weekdaysShort : 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),\n weekdaysMin : 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'h:mm A',\n LTS : 'h:mm:ss A',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY h:mm A',\n LLLL : 'dddd, D MMMM YYYY h:mm A'\n },\n calendar : {\n sameDay : '[Namuhla nga] LT',\n nextDay : '[Kusasa nga] LT',\n nextWeek : 'dddd [nga] LT',\n lastDay : '[Itolo nga] LT',\n lastWeek : 'dddd [leliphelile] [nga] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'nga %s',\n past : 'wenteka nga %s',\n s : 'emizuzwana lomcane',\n ss : '%d mzuzwana',\n m : 'umzuzu',\n mm : '%d emizuzu',\n h : 'lihora',\n hh : '%d emahora',\n d : 'lilanga',\n dd : '%d emalanga',\n M : 'inyanga',\n MM : '%d tinyanga',\n y : 'umnyaka',\n yy : '%d iminyaka'\n },\n meridiemParse: /ekuseni|emini|entsambama|ebusuku/,\n meridiem : function (hours, minutes, isLower) {\n if (hours < 11) {\n return 'ekuseni';\n } else if (hours < 15) {\n return 'emini';\n } else if (hours < 19) {\n return 'entsambama';\n } else {\n return 'ebusuku';\n }\n },\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'ekuseni') {\n return hour;\n } else if (meridiem === 'emini') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {\n if (hour === 0) {\n return 0;\n }\n return hour + 12;\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}/,\n ordinal : '%d',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return ss;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var sv = moment.defineLocale('sv', {\n months : 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'),\n monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n weekdays : 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),\n weekdaysShort : 'sön_mån_tis_ons_tor_fre_lör'.split('_'),\n weekdaysMin : 'sö_må_ti_on_to_fr_lö'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'YYYY-MM-DD',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY [kl.] HH:mm',\n LLLL : 'dddd D MMMM YYYY [kl.] HH:mm',\n lll : 'D MMM YYYY HH:mm',\n llll : 'ddd D MMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[Idag] LT',\n nextDay: '[Imorgon] LT',\n lastDay: '[Igår] LT',\n nextWeek: '[På] dddd LT',\n lastWeek: '[I] dddd[s] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'om %s',\n past : 'för %s sedan',\n s : 'några sekunder',\n ss : '%d sekunder',\n m : 'en minut',\n mm : '%d minuter',\n h : 'en timme',\n hh : '%d timmar',\n d : 'en dag',\n dd : '%d dagar',\n M : 'en månad',\n MM : '%d månader',\n y : 'ett år',\n yy : '%d år'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(e|a)/,\n ordinal : function (number) {\n var b = number % 10,\n output = (~~(number % 100 / 10) === 1) ? 'e' :\n (b === 1) ? 'a' :\n (b === 2) ? 'a' :\n (b === 3) ? 'e' : 'e';\n return number + output;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return sv;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var sw = moment.defineLocale('sw', {\n months : 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split('_'),\n monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),\n weekdays : 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split('_'),\n weekdaysShort : 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),\n weekdaysMin : 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[leo saa] LT',\n nextDay : '[kesho saa] LT',\n nextWeek : '[wiki ijayo] dddd [saat] LT',\n lastDay : '[jana] LT',\n lastWeek : '[wiki iliyopita] dddd [saat] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s baadaye',\n past : 'tokea %s',\n s : 'hivi punde',\n ss : 'sekunde %d',\n m : 'dakika moja',\n mm : 'dakika %d',\n h : 'saa limoja',\n hh : 'masaa %d',\n d : 'siku moja',\n dd : 'masiku %d',\n M : 'mwezi mmoja',\n MM : 'miezi %d',\n y : 'mwaka mmoja',\n yy : 'miaka %d'\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return sw;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '௧',\n '2': '௨',\n '3': '௩',\n '4': '௪',\n '5': '௫',\n '6': '௬',\n '7': '௭',\n '8': '௮',\n '9': '௯',\n '0': '௦'\n }, numberMap = {\n '௧': '1',\n '௨': '2',\n '௩': '3',\n '௪': '4',\n '௫': '5',\n '௬': '6',\n '௭': '7',\n '௮': '8',\n '௯': '9',\n '௦': '0'\n };\n\n var ta = moment.defineLocale('ta', {\n months : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),\n monthsShort : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),\n weekdays : 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split('_'),\n weekdaysShort : 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split('_'),\n weekdaysMin : 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY, HH:mm',\n LLLL : 'dddd, D MMMM YYYY, HH:mm'\n },\n calendar : {\n sameDay : '[இன்று] LT',\n nextDay : '[நாளை] LT',\n nextWeek : 'dddd, LT',\n lastDay : '[நேற்று] LT',\n lastWeek : '[கடந்த வாரம்] dddd, LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s இல்',\n past : '%s முன்',\n s : 'ஒரு சில விநாடிகள்',\n ss : '%d விநாடிகள்',\n m : 'ஒரு நிமிடம்',\n mm : '%d நிமிடங்கள்',\n h : 'ஒரு மணி நேரம்',\n hh : '%d மணி நேரம்',\n d : 'ஒரு நாள்',\n dd : '%d நாட்கள்',\n M : 'ஒரு மாதம்',\n MM : '%d மாதங்கள்',\n y : 'ஒரு வருடம்',\n yy : '%d ஆண்டுகள்'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}வது/,\n ordinal : function (number) {\n return number + 'வது';\n },\n preparse: function (string) {\n return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n // refer http://ta.wikipedia.org/s/1er1\n meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,\n meridiem : function (hour, minute, isLower) {\n if (hour < 2) {\n return ' யாமம்';\n } else if (hour < 6) {\n return ' வைகறை'; // வைகறை\n } else if (hour < 10) {\n return ' காலை'; // காலை\n } else if (hour < 14) {\n return ' நண்பகல்'; // நண்பகல்\n } else if (hour < 18) {\n return ' எற்பாடு'; // எற்பாடு\n } else if (hour < 22) {\n return ' மாலை'; // மாலை\n } else {\n return ' யாமம்';\n }\n },\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'யாமம்') {\n return hour < 2 ? hour : hour + 12;\n } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {\n return hour;\n } else if (meridiem === 'நண்பகல்') {\n return hour >= 10 ? hour : hour + 12;\n } else {\n return hour + 12;\n }\n },\n week : {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 6th is the first week of the year.\n }\n });\n\n return ta;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var te = moment.defineLocale('te', {\n months : 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split('_'),\n monthsShort : 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split('_'),\n monthsParseExact : true,\n weekdays : 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split('_'),\n weekdaysShort : 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),\n weekdaysMin : 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),\n longDateFormat : {\n LT : 'A h:mm',\n LTS : 'A h:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY, A h:mm',\n LLLL : 'dddd, D MMMM YYYY, A h:mm'\n },\n calendar : {\n sameDay : '[నేడు] LT',\n nextDay : '[రేపు] LT',\n nextWeek : 'dddd, LT',\n lastDay : '[నిన్న] LT',\n lastWeek : '[గత] dddd, LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s లో',\n past : '%s క్రితం',\n s : 'కొన్ని క్షణాలు',\n ss : '%d సెకన్లు',\n m : 'ఒక నిమిషం',\n mm : '%d నిమిషాలు',\n h : 'ఒక గంట',\n hh : '%d గంటలు',\n d : 'ఒక రోజు',\n dd : '%d రోజులు',\n M : 'ఒక నెల',\n MM : '%d నెలలు',\n y : 'ఒక సంవత్సరం',\n yy : '%d సంవత్సరాలు'\n },\n dayOfMonthOrdinalParse : /\\d{1,2}వ/,\n ordinal : '%dవ',\n meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'రాత్రి') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'ఉదయం') {\n return hour;\n } else if (meridiem === 'మధ్యాహ్నం') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'సాయంత్రం') {\n return hour + 12;\n }\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 4) {\n return 'రాత్రి';\n } else if (hour < 10) {\n return 'ఉదయం';\n } else if (hour < 17) {\n return 'మధ్యాహ్నం';\n } else if (hour < 20) {\n return 'సాయంత్రం';\n } else {\n return 'రాత్రి';\n }\n },\n week : {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 6th is the first week of the year.\n }\n });\n\n return te;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var tet = moment.defineLocale('tet', {\n months : 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split('_'),\n monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n weekdays : 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),\n weekdaysShort : 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),\n weekdaysMin : 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[Ohin iha] LT',\n nextDay: '[Aban iha] LT',\n nextWeek: 'dddd [iha] LT',\n lastDay: '[Horiseik iha] LT',\n lastWeek: 'dddd [semana kotuk] [iha] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'iha %s',\n past : '%s liuba',\n s : 'minutu balun',\n ss : 'minutu %d',\n m : 'minutu ida',\n mm : 'minutu %d',\n h : 'oras ida',\n hh : 'oras %d',\n d : 'loron ida',\n dd : 'loron %d',\n M : 'fulan ida',\n MM : 'fulan %d',\n y : 'tinan ida',\n yy : 'tinan %d'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal : function (number) {\n var b = number % 10,\n output = (~~(number % 100 / 10) === 1) ? 'th' :\n (b === 1) ? 'st' :\n (b === 2) ? 'nd' :\n (b === 3) ? 'rd' : 'th';\n return number + output;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return tet;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var suffixes = {\n 0: '-ум',\n 1: '-ум',\n 2: '-юм',\n 3: '-юм',\n 4: '-ум',\n 5: '-ум',\n 6: '-ум',\n 7: '-ум',\n 8: '-ум',\n 9: '-ум',\n 10: '-ум',\n 12: '-ум',\n 13: '-ум',\n 20: '-ум',\n 30: '-юм',\n 40: '-ум',\n 50: '-ум',\n 60: '-ум',\n 70: '-ум',\n 80: '-ум',\n 90: '-ум',\n 100: '-ум'\n };\n\n var tg = moment.defineLocale('tg', {\n months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),\n monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n weekdays : 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split('_'),\n weekdaysShort : 'яшб_дшб_сшб_чшб_пшб_ҷум_шнб'.split('_'),\n weekdaysMin : 'яш_дш_сш_чш_пш_ҷм_шб'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[Имрӯз соати] LT',\n nextDay : '[Пагоҳ соати] LT',\n lastDay : '[Дирӯз соати] LT',\n nextWeek : 'dddd[и] [ҳафтаи оянда соати] LT',\n lastWeek : 'dddd[и] [ҳафтаи гузашта соати] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'баъди %s',\n past : '%s пеш',\n s : 'якчанд сония',\n m : 'як дақиқа',\n mm : '%d дақиқа',\n h : 'як соат',\n hh : '%d соат',\n d : 'як рӯз',\n dd : '%d рӯз',\n M : 'як моҳ',\n MM : '%d моҳ',\n y : 'як сол',\n yy : '%d сол'\n },\n meridiemParse: /шаб|субҳ|рӯз|бегоҳ/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'шаб') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'субҳ') {\n return hour;\n } else if (meridiem === 'рӯз') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'бегоҳ') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'шаб';\n } else if (hour < 11) {\n return 'субҳ';\n } else if (hour < 16) {\n return 'рӯз';\n } else if (hour < 19) {\n return 'бегоҳ';\n } else {\n return 'шаб';\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(ум|юм)/,\n ordinal: function (number) {\n var a = number % 10,\n b = number >= 100 ? 100 : null;\n return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 1th is the first week of the year.\n }\n });\n\n return tg;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var th = moment.defineLocale('th', {\n months : 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'),\n monthsShort : 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split('_'),\n monthsParseExact: true,\n weekdays : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),\n weekdaysShort : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference\n weekdaysMin : 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY เวลา H:mm',\n LLLL : 'วันddddที่ D MMMM YYYY เวลา H:mm'\n },\n meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,\n isPM: function (input) {\n return input === 'หลังเที่ยง';\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ก่อนเที่ยง';\n } else {\n return 'หลังเที่ยง';\n }\n },\n calendar : {\n sameDay : '[วันนี้ เวลา] LT',\n nextDay : '[พรุ่งนี้ เวลา] LT',\n nextWeek : 'dddd[หน้า เวลา] LT',\n lastDay : '[เมื่อวานนี้ เวลา] LT',\n lastWeek : '[วัน]dddd[ที่แล้ว เวลา] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'อีก %s',\n past : '%sที่แล้ว',\n s : 'ไม่กี่วินาที',\n ss : '%d วินาที',\n m : '1 นาที',\n mm : '%d นาที',\n h : '1 ชั่วโมง',\n hh : '%d ชั่วโมง',\n d : '1 วัน',\n dd : '%d วัน',\n M : '1 เดือน',\n MM : '%d เดือน',\n y : '1 ปี',\n yy : '%d ปี'\n }\n });\n\n return th;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var tlPh = moment.defineLocale('tl-ph', {\n months : 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'),\n monthsShort : 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n weekdays : 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'),\n weekdaysShort : 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n weekdaysMin : 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'MM/D/YYYY',\n LL : 'MMMM D, YYYY',\n LLL : 'MMMM D, YYYY HH:mm',\n LLLL : 'dddd, MMMM DD, YYYY HH:mm'\n },\n calendar : {\n sameDay: 'LT [ngayong araw]',\n nextDay: '[Bukas ng] LT',\n nextWeek: 'LT [sa susunod na] dddd',\n lastDay: 'LT [kahapon]',\n lastWeek: 'LT [noong nakaraang] dddd',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'sa loob ng %s',\n past : '%s ang nakalipas',\n s : 'ilang segundo',\n ss : '%d segundo',\n m : 'isang minuto',\n mm : '%d minuto',\n h : 'isang oras',\n hh : '%d oras',\n d : 'isang araw',\n dd : '%d araw',\n M : 'isang buwan',\n MM : '%d buwan',\n y : 'isang taon',\n yy : '%d taon'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}/,\n ordinal : function (number) {\n return number;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return tlPh;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');\n\n function translateFuture(output) {\n var time = output;\n time = (output.indexOf('jaj') !== -1) ?\n time.slice(0, -3) + 'leS' :\n (output.indexOf('jar') !== -1) ?\n time.slice(0, -3) + 'waQ' :\n (output.indexOf('DIS') !== -1) ?\n time.slice(0, -3) + 'nem' :\n time + ' pIq';\n return time;\n }\n\n function translatePast(output) {\n var time = output;\n time = (output.indexOf('jaj') !== -1) ?\n time.slice(0, -3) + 'Hu’' :\n (output.indexOf('jar') !== -1) ?\n time.slice(0, -3) + 'wen' :\n (output.indexOf('DIS') !== -1) ?\n time.slice(0, -3) + 'ben' :\n time + ' ret';\n return time;\n }\n\n function translate(number, withoutSuffix, string, isFuture) {\n var numberNoun = numberAsNoun(number);\n switch (string) {\n case 'ss':\n return numberNoun + ' lup';\n case 'mm':\n return numberNoun + ' tup';\n case 'hh':\n return numberNoun + ' rep';\n case 'dd':\n return numberNoun + ' jaj';\n case 'MM':\n return numberNoun + ' jar';\n case 'yy':\n return numberNoun + ' DIS';\n }\n }\n\n function numberAsNoun(number) {\n var hundred = Math.floor((number % 1000) / 100),\n ten = Math.floor((number % 100) / 10),\n one = number % 10,\n word = '';\n if (hundred > 0) {\n word += numbersNouns[hundred] + 'vatlh';\n }\n if (ten > 0) {\n word += ((word !== '') ? ' ' : '') + numbersNouns[ten] + 'maH';\n }\n if (one > 0) {\n word += ((word !== '') ? ' ' : '') + numbersNouns[one];\n }\n return (word === '') ? 'pagh' : word;\n }\n\n var tlh = moment.defineLocale('tlh', {\n months : 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split('_'),\n monthsShort : 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split('_'),\n monthsParseExact : true,\n weekdays : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n weekdaysShort : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n weekdaysMin : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[DaHjaj] LT',\n nextDay: '[wa’leS] LT',\n nextWeek: 'LLL',\n lastDay: '[wa’Hu’] LT',\n lastWeek: 'LLL',\n sameElse: 'L'\n },\n relativeTime : {\n future : translateFuture,\n past : translatePast,\n s : 'puS lup',\n ss : translate,\n m : 'wa’ tup',\n mm : translate,\n h : 'wa’ rep',\n hh : translate,\n d : 'wa’ jaj',\n dd : translate,\n M : 'wa’ jar',\n MM : translate,\n y : 'wa’ DIS',\n yy : translate\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return tlh;\n\n})));\n","\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n var suffixes = {\n 1: '\\'inci',\n 5: '\\'inci',\n 8: '\\'inci',\n 70: '\\'inci',\n 80: '\\'inci',\n 2: '\\'nci',\n 7: '\\'nci',\n 20: '\\'nci',\n 50: '\\'nci',\n 3: '\\'üncü',\n 4: '\\'üncü',\n 100: '\\'üncü',\n 6: '\\'ncı',\n 9: '\\'uncu',\n 10: '\\'uncu',\n 30: '\\'uncu',\n 60: '\\'ıncı',\n 90: '\\'ıncı'\n };\n\n var tr = moment.defineLocale('tr', {\n months : 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split('_'),\n monthsShort : 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),\n weekdays : 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split('_'),\n weekdaysShort : 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'),\n weekdaysMin : 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[bugün saat] LT',\n nextDay : '[yarın saat] LT',\n nextWeek : '[gelecek] dddd [saat] LT',\n lastDay : '[dün] LT',\n lastWeek : '[geçen] dddd [saat] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s sonra',\n past : '%s önce',\n s : 'birkaç saniye',\n ss : '%d saniye',\n m : 'bir dakika',\n mm : '%d dakika',\n h : 'bir saat',\n hh : '%d saat',\n d : 'bir gün',\n dd : '%d gün',\n M : 'bir ay',\n MM : '%d ay',\n y : 'bir yıl',\n yy : '%d yıl'\n },\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'Do':\n case 'DD':\n return number;\n default:\n if (number === 0) { // special case for zero\n return number + '\\'ıncı';\n }\n var a = number % 10,\n b = number % 100 - a,\n c = number >= 100 ? 100 : null;\n return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n }\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return tr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.\n // This is currently too difficult (maybe even impossible) to add.\n var tzl = moment.defineLocale('tzl', {\n months : 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split('_'),\n monthsShort : 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),\n weekdays : 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),\n weekdaysShort : 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),\n weekdaysMin : 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),\n longDateFormat : {\n LT : 'HH.mm',\n LTS : 'HH.mm.ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM [dallas] YYYY',\n LLL : 'D. MMMM [dallas] YYYY HH.mm',\n LLLL : 'dddd, [li] D. MMMM [dallas] YYYY HH.mm'\n },\n meridiemParse: /d\\'o|d\\'a/i,\n isPM : function (input) {\n return 'd\\'o' === input.toLowerCase();\n },\n meridiem : function (hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'd\\'o' : 'D\\'O';\n } else {\n return isLower ? 'd\\'a' : 'D\\'A';\n }\n },\n calendar : {\n sameDay : '[oxhi à] LT',\n nextDay : '[demà à] LT',\n nextWeek : 'dddd [à] LT',\n lastDay : '[ieiri à] LT',\n lastWeek : '[sür el] dddd [lasteu à] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'osprei %s',\n past : 'ja%s',\n s : processRelativeTime,\n ss : processRelativeTime,\n m : processRelativeTime,\n mm : processRelativeTime,\n h : processRelativeTime,\n hh : processRelativeTime,\n d : processRelativeTime,\n dd : processRelativeTime,\n M : processRelativeTime,\n MM : processRelativeTime,\n y : processRelativeTime,\n yy : processRelativeTime\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n 's': ['viensas secunds', '\\'iensas secunds'],\n 'ss': [number + ' secunds', '' + number + ' secunds'],\n 'm': ['\\'n míut', '\\'iens míut'],\n 'mm': [number + ' míuts', '' + number + ' míuts'],\n 'h': ['\\'n þora', '\\'iensa þora'],\n 'hh': [number + ' þoras', '' + number + ' þoras'],\n 'd': ['\\'n ziua', '\\'iensa ziua'],\n 'dd': [number + ' ziuas', '' + number + ' ziuas'],\n 'M': ['\\'n mes', '\\'iens mes'],\n 'MM': [number + ' mesen', '' + number + ' mesen'],\n 'y': ['\\'n ar', '\\'iens ar'],\n 'yy': [number + ' ars', '' + number + ' ars']\n };\n return isFuture ? format[key][0] : (withoutSuffix ? format[key][0] : format[key][1]);\n }\n\n return tzl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var tzmLatn = moment.defineLocale('tzm-latn', {\n months : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),\n monthsShort : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),\n weekdays : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n weekdaysShort : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n weekdaysMin : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[asdkh g] LT',\n nextDay: '[aska g] LT',\n nextWeek: 'dddd [g] LT',\n lastDay: '[assant g] LT',\n lastWeek: 'dddd [g] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'dadkh s yan %s',\n past : 'yan %s',\n s : 'imik',\n ss : '%d imik',\n m : 'minuḍ',\n mm : '%d minuḍ',\n h : 'saɛa',\n hh : '%d tassaɛin',\n d : 'ass',\n dd : '%d ossan',\n M : 'ayowr',\n MM : '%d iyyirn',\n y : 'asgas',\n yy : '%d isgasn'\n },\n week : {\n dow : 6, // Saturday is the first day of the week.\n doy : 12 // The week that contains Jan 12th is the first week of the year.\n }\n });\n\n return tzmLatn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var tzm = moment.defineLocale('tzm', {\n months : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),\n monthsShort : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),\n weekdays : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n weekdaysShort : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n weekdaysMin : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS: 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',\n nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',\n nextWeek: 'dddd [ⴴ] LT',\n lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',\n lastWeek: 'dddd [ⴴ] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',\n past : 'ⵢⴰⵏ %s',\n s : 'ⵉⵎⵉⴽ',\n ss : '%d ⵉⵎⵉⴽ',\n m : 'ⵎⵉⵏⵓⴺ',\n mm : '%d ⵎⵉⵏⵓⴺ',\n h : 'ⵙⴰⵄⴰ',\n hh : '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',\n d : 'ⴰⵙⵙ',\n dd : '%d oⵙⵙⴰⵏ',\n M : 'ⴰⵢoⵓⵔ',\n MM : '%d ⵉⵢⵢⵉⵔⵏ',\n y : 'ⴰⵙⴳⴰⵙ',\n yy : '%d ⵉⵙⴳⴰⵙⵏ'\n },\n week : {\n dow : 6, // Saturday is the first day of the week.\n doy : 12 // The week that contains Jan 12th is the first week of the year.\n }\n });\n\n return tzm;\n\n})));\n","//! moment.js language configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var ugCn = moment.defineLocale('ug-cn', {\n months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n '_'\n ),\n monthsShort: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n '_'\n ),\n weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split(\n '_'\n ),\n weekdaysShort: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n weekdaysMin: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY-MM-DD',\n LL: 'YYYY-يىلىM-ئاينىڭD-كۈنى',\n LLL: 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n LLLL: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm'\n },\n meridiemParse: /يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (\n meridiem === 'يېرىم كېچە' ||\n meridiem === 'سەھەر' ||\n meridiem === 'چۈشتىن بۇرۇن'\n ) {\n return hour;\n } else if (meridiem === 'چۈشتىن كېيىن' || meridiem === 'كەچ') {\n return hour + 12;\n } else {\n return hour >= 11 ? hour : hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n var hm = hour * 100 + minute;\n if (hm < 600) {\n return 'يېرىم كېچە';\n } else if (hm < 900) {\n return 'سەھەر';\n } else if (hm < 1130) {\n return 'چۈشتىن بۇرۇن';\n } else if (hm < 1230) {\n return 'چۈش';\n } else if (hm < 1800) {\n return 'چۈشتىن كېيىن';\n } else {\n return 'كەچ';\n }\n },\n calendar: {\n sameDay: '[بۈگۈن سائەت] LT',\n nextDay: '[ئەتە سائەت] LT',\n nextWeek: '[كېلەركى] dddd [سائەت] LT',\n lastDay: '[تۆنۈگۈن] LT',\n lastWeek: '[ئالدىنقى] dddd [سائەت] LT',\n sameElse: 'L'\n },\n relativeTime: {\n future: '%s كېيىن',\n past: '%s بۇرۇن',\n s: 'نەچچە سېكونت',\n ss: '%d سېكونت',\n m: 'بىر مىنۇت',\n mm: '%d مىنۇت',\n h: 'بىر سائەت',\n hh: '%d سائەت',\n d: 'بىر كۈن',\n dd: '%d كۈن',\n M: 'بىر ئاي',\n MM: '%d ئاي',\n y: 'بىر يىل',\n yy: '%d يىل'\n },\n\n dayOfMonthOrdinalParse: /\\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + '-كۈنى';\n case 'w':\n case 'W':\n return number + '-ھەپتە';\n default:\n return number;\n }\n },\n preparse: function (string) {\n return string.replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/,/g, '،');\n },\n week: {\n // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n dow: 1, // Monday is the first day of the week.\n doy: 7 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return ugCn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n function plural(word, num) {\n var forms = word.split('_');\n return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n }\n function relativeTimeWithPlural(number, withoutSuffix, key) {\n var format = {\n 'ss': withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд',\n 'mm': withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',\n 'hh': withoutSuffix ? 'година_години_годин' : 'годину_години_годин',\n 'dd': 'день_дні_днів',\n 'MM': 'місяць_місяці_місяців',\n 'yy': 'рік_роки_років'\n };\n if (key === 'm') {\n return withoutSuffix ? 'хвилина' : 'хвилину';\n }\n else if (key === 'h') {\n return withoutSuffix ? 'година' : 'годину';\n }\n else {\n return number + ' ' + plural(format[key], +number);\n }\n }\n function weekdaysCaseReplace(m, format) {\n var weekdays = {\n 'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'),\n 'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'),\n 'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_')\n };\n\n if (m === true) {\n return weekdays['nominative'].slice(1, 7).concat(weekdays['nominative'].slice(0, 1));\n }\n if (!m) {\n return weekdays['nominative'];\n }\n\n var nounCase = (/(\\[[ВвУу]\\]) ?dddd/).test(format) ?\n 'accusative' :\n ((/\\[?(?:минулої|наступної)? ?\\] ?dddd/).test(format) ?\n 'genitive' :\n 'nominative');\n return weekdays[nounCase][m.day()];\n }\n function processHoursFunction(str) {\n return function () {\n return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';\n };\n }\n\n var uk = moment.defineLocale('uk', {\n months : {\n 'format': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_'),\n 'standalone': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_')\n },\n monthsShort : 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'),\n weekdays : weekdaysCaseReplace,\n weekdaysShort : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY р.',\n LLL : 'D MMMM YYYY р., HH:mm',\n LLLL : 'dddd, D MMMM YYYY р., HH:mm'\n },\n calendar : {\n sameDay: processHoursFunction('[Сьогодні '),\n nextDay: processHoursFunction('[Завтра '),\n lastDay: processHoursFunction('[Вчора '),\n nextWeek: processHoursFunction('[У] dddd ['),\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n case 3:\n case 5:\n case 6:\n return processHoursFunction('[Минулої] dddd [').call(this);\n case 1:\n case 2:\n case 4:\n return processHoursFunction('[Минулого] dddd [').call(this);\n }\n },\n sameElse: 'L'\n },\n relativeTime : {\n future : 'за %s',\n past : '%s тому',\n s : 'декілька секунд',\n ss : relativeTimeWithPlural,\n m : relativeTimeWithPlural,\n mm : relativeTimeWithPlural,\n h : 'годину',\n hh : relativeTimeWithPlural,\n d : 'день',\n dd : relativeTimeWithPlural,\n M : 'місяць',\n MM : relativeTimeWithPlural,\n y : 'рік',\n yy : relativeTimeWithPlural\n },\n // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason\n meridiemParse: /ночі|ранку|дня|вечора/,\n isPM: function (input) {\n return /^(дня|вечора)$/.test(input);\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 4) {\n return 'ночі';\n } else if (hour < 12) {\n return 'ранку';\n } else if (hour < 17) {\n return 'дня';\n } else {\n return 'вечора';\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(й|го)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'M':\n case 'd':\n case 'DDD':\n case 'w':\n case 'W':\n return number + '-й';\n case 'D':\n return number + '-го';\n default:\n return number;\n }\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return uk;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var months = [\n 'جنوری',\n 'فروری',\n 'مارچ',\n 'اپریل',\n 'مئی',\n 'جون',\n 'جولائی',\n 'اگست',\n 'ستمبر',\n 'اکتوبر',\n 'نومبر',\n 'دسمبر'\n ];\n var days = [\n 'اتوار',\n 'پیر',\n 'منگل',\n 'بدھ',\n 'جمعرات',\n 'جمعہ',\n 'ہفتہ'\n ];\n\n var ur = moment.defineLocale('ur', {\n months : months,\n monthsShort : months,\n weekdays : days,\n weekdaysShort : days,\n weekdaysMin : days,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd، D MMMM YYYY HH:mm'\n },\n meridiemParse: /صبح|شام/,\n isPM : function (input) {\n return 'شام' === input;\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 12) {\n return 'صبح';\n }\n return 'شام';\n },\n calendar : {\n sameDay : '[آج بوقت] LT',\n nextDay : '[کل بوقت] LT',\n nextWeek : 'dddd [بوقت] LT',\n lastDay : '[گذشتہ روز بوقت] LT',\n lastWeek : '[گذشتہ] dddd [بوقت] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s بعد',\n past : '%s قبل',\n s : 'چند سیکنڈ',\n ss : '%d سیکنڈ',\n m : 'ایک منٹ',\n mm : '%d منٹ',\n h : 'ایک گھنٹہ',\n hh : '%d گھنٹے',\n d : 'ایک دن',\n dd : '%d دن',\n M : 'ایک ماہ',\n MM : '%d ماہ',\n y : 'ایک سال',\n yy : '%d سال'\n },\n preparse: function (string) {\n return string.replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/,/g, '،');\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return ur;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var uzLatn = moment.defineLocale('uz-latn', {\n months : 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split('_'),\n monthsShort : 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),\n weekdays : 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split('_'),\n weekdaysShort : 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),\n weekdaysMin : 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'D MMMM YYYY, dddd HH:mm'\n },\n calendar : {\n sameDay : '[Bugun soat] LT [da]',\n nextDay : '[Ertaga] LT [da]',\n nextWeek : 'dddd [kuni soat] LT [da]',\n lastDay : '[Kecha soat] LT [da]',\n lastWeek : '[O\\'tgan] dddd [kuni soat] LT [da]',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'Yaqin %s ichida',\n past : 'Bir necha %s oldin',\n s : 'soniya',\n ss : '%d soniya',\n m : 'bir daqiqa',\n mm : '%d daqiqa',\n h : 'bir soat',\n hh : '%d soat',\n d : 'bir kun',\n dd : '%d kun',\n M : 'bir oy',\n MM : '%d oy',\n y : 'bir yil',\n yy : '%d yil'\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 7th is the first week of the year.\n }\n });\n\n return uzLatn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var uz = moment.defineLocale('uz', {\n months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),\n monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n weekdays : 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),\n weekdaysShort : 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),\n weekdaysMin : 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'D MMMM YYYY, dddd HH:mm'\n },\n calendar : {\n sameDay : '[Бугун соат] LT [да]',\n nextDay : '[Эртага] LT [да]',\n nextWeek : 'dddd [куни соат] LT [да]',\n lastDay : '[Кеча соат] LT [да]',\n lastWeek : '[Утган] dddd [куни соат] LT [да]',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'Якин %s ичида',\n past : 'Бир неча %s олдин',\n s : 'фурсат',\n ss : '%d фурсат',\n m : 'бир дакика',\n mm : '%d дакика',\n h : 'бир соат',\n hh : '%d соат',\n d : 'бир кун',\n dd : '%d кун',\n M : 'бир ой',\n MM : '%d ой',\n y : 'бир йил',\n yy : '%d йил'\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return uz;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var vi = moment.defineLocale('vi', {\n months : 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split('_'),\n monthsShort : 'Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12'.split('_'),\n monthsParseExact : true,\n weekdays : 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split('_'),\n weekdaysShort : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n weekdaysMin : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n weekdaysParseExact : true,\n meridiemParse: /sa|ch/i,\n isPM : function (input) {\n return /^ch$/i.test(input);\n },\n meridiem : function (hours, minutes, isLower) {\n if (hours < 12) {\n return isLower ? 'sa' : 'SA';\n } else {\n return isLower ? 'ch' : 'CH';\n }\n },\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM [năm] YYYY',\n LLL : 'D MMMM [năm] YYYY HH:mm',\n LLLL : 'dddd, D MMMM [năm] YYYY HH:mm',\n l : 'DD/M/YYYY',\n ll : 'D MMM YYYY',\n lll : 'D MMM YYYY HH:mm',\n llll : 'ddd, D MMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[Hôm nay lúc] LT',\n nextDay: '[Ngày mai lúc] LT',\n nextWeek: 'dddd [tuần tới lúc] LT',\n lastDay: '[Hôm qua lúc] LT',\n lastWeek: 'dddd [tuần rồi lúc] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : '%s tới',\n past : '%s trước',\n s : 'vài giây',\n ss : '%d giây' ,\n m : 'một phút',\n mm : '%d phút',\n h : 'một giờ',\n hh : '%d giờ',\n d : 'một ngày',\n dd : '%d ngày',\n M : 'một tháng',\n MM : '%d tháng',\n y : 'một năm',\n yy : '%d năm'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}/,\n ordinal : function (number) {\n return number;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return vi;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var xPseudo = moment.defineLocale('x-pseudo', {\n months : 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split('_'),\n monthsShort : 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split('_'),\n monthsParseExact : true,\n weekdays : 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split('_'),\n weekdaysShort : 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),\n weekdaysMin : 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[T~ódá~ý át] LT',\n nextDay : '[T~ómó~rró~w át] LT',\n nextWeek : 'dddd [át] LT',\n lastDay : '[Ý~ést~érdá~ý át] LT',\n lastWeek : '[L~ást] dddd [át] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'í~ñ %s',\n past : '%s á~gó',\n s : 'á ~féw ~sécó~ñds',\n ss : '%d s~écóñ~ds',\n m : 'á ~míñ~úté',\n mm : '%d m~íñú~tés',\n h : 'á~ñ hó~úr',\n hh : '%d h~óúrs',\n d : 'á ~dáý',\n dd : '%d d~áýs',\n M : 'á ~móñ~th',\n MM : '%d m~óñt~hs',\n y : 'á ~ýéár',\n yy : '%d ý~éárs'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal : function (number) {\n var b = number % 10,\n output = (~~(number % 100 / 10) === 1) ? 'th' :\n (b === 1) ? 'st' :\n (b === 2) ? 'nd' :\n (b === 3) ? 'rd' : 'th';\n return number + output;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return xPseudo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var yo = moment.defineLocale('yo', {\n months : 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split('_'),\n monthsShort : 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),\n weekdays : 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),\n weekdaysShort : 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),\n weekdaysMin : 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),\n longDateFormat : {\n LT : 'h:mm A',\n LTS : 'h:mm:ss A',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY h:mm A',\n LLLL : 'dddd, D MMMM YYYY h:mm A'\n },\n calendar : {\n sameDay : '[Ònì ni] LT',\n nextDay : '[Ọ̀la ni] LT',\n nextWeek : 'dddd [Ọsẹ̀ tón\\'bọ] [ni] LT',\n lastDay : '[Àna ni] LT',\n lastWeek : 'dddd [Ọsẹ̀ tólọ́] [ni] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'ní %s',\n past : '%s kọjá',\n s : 'ìsẹjú aayá die',\n ss :'aayá %d',\n m : 'ìsẹjú kan',\n mm : 'ìsẹjú %d',\n h : 'wákati kan',\n hh : 'wákati %d',\n d : 'ọjọ́ kan',\n dd : 'ọjọ́ %d',\n M : 'osù kan',\n MM : 'osù %d',\n y : 'ọdún kan',\n yy : 'ọdún %d'\n },\n dayOfMonthOrdinalParse : /ọjọ́\\s\\d{1,2}/,\n ordinal : 'ọjọ́ %d',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return yo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var zhCn = moment.defineLocale('zh-cn', {\n months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n weekdaysShort : '周日_周一_周二_周三_周四_周五_周六'.split('_'),\n weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'YYYY/MM/DD',\n LL : 'YYYY年M月D日',\n LLL : 'YYYY年M月D日Ah点mm分',\n LLLL : 'YYYY年M月D日ddddAh点mm分',\n l : 'YYYY/M/D',\n ll : 'YYYY年M月D日',\n lll : 'YYYY年M月D日 HH:mm',\n llll : 'YYYY年M月D日dddd HH:mm'\n },\n meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === '凌晨' || meridiem === '早上' ||\n meridiem === '上午') {\n return hour;\n } else if (meridiem === '下午' || meridiem === '晚上') {\n return hour + 12;\n } else {\n // '中午'\n return hour >= 11 ? hour : hour + 12;\n }\n },\n meridiem : function (hour, minute, isLower) {\n var hm = hour * 100 + minute;\n if (hm < 600) {\n return '凌晨';\n } else if (hm < 900) {\n return '早上';\n } else if (hm < 1130) {\n return '上午';\n } else if (hm < 1230) {\n return '中午';\n } else if (hm < 1800) {\n return '下午';\n } else {\n return '晚上';\n }\n },\n calendar : {\n sameDay : '[今天]LT',\n nextDay : '[明天]LT',\n nextWeek : '[下]ddddLT',\n lastDay : '[昨天]LT',\n lastWeek : '[上]ddddLT',\n sameElse : 'L'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(日|月|周)/,\n ordinal : function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + '日';\n case 'M':\n return number + '月';\n case 'w':\n case 'W':\n return number + '周';\n default:\n return number;\n }\n },\n relativeTime : {\n future : '%s内',\n past : '%s前',\n s : '几秒',\n ss : '%d 秒',\n m : '1 分钟',\n mm : '%d 分钟',\n h : '1 小时',\n hh : '%d 小时',\n d : '1 天',\n dd : '%d 天',\n M : '1 个月',\n MM : '%d 个月',\n y : '1 年',\n yy : '%d 年'\n },\n week : {\n // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return zhCn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var zhHk = moment.defineLocale('zh-hk', {\n months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'YYYY/MM/DD',\n LL : 'YYYY年M月D日',\n LLL : 'YYYY年M月D日 HH:mm',\n LLLL : 'YYYY年M月D日dddd HH:mm',\n l : 'YYYY/M/D',\n ll : 'YYYY年M月D日',\n lll : 'YYYY年M月D日 HH:mm',\n llll : 'YYYY年M月D日dddd HH:mm'\n },\n meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n return hour;\n } else if (meridiem === '中午') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === '下午' || meridiem === '晚上') {\n return hour + 12;\n }\n },\n meridiem : function (hour, minute, isLower) {\n var hm = hour * 100 + minute;\n if (hm < 600) {\n return '凌晨';\n } else if (hm < 900) {\n return '早上';\n } else if (hm < 1130) {\n return '上午';\n } else if (hm < 1230) {\n return '中午';\n } else if (hm < 1800) {\n return '下午';\n } else {\n return '晚上';\n }\n },\n calendar : {\n sameDay : '[今天]LT',\n nextDay : '[明天]LT',\n nextWeek : '[下]ddddLT',\n lastDay : '[昨天]LT',\n lastWeek : '[上]ddddLT',\n sameElse : 'L'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n ordinal : function (number, period) {\n switch (period) {\n case 'd' :\n case 'D' :\n case 'DDD' :\n return number + '日';\n case 'M' :\n return number + '月';\n case 'w' :\n case 'W' :\n return number + '週';\n default :\n return number;\n }\n },\n relativeTime : {\n future : '%s內',\n past : '%s前',\n s : '幾秒',\n ss : '%d 秒',\n m : '1 分鐘',\n mm : '%d 分鐘',\n h : '1 小時',\n hh : '%d 小時',\n d : '1 天',\n dd : '%d 天',\n M : '1 個月',\n MM : '%d 個月',\n y : '1 年',\n yy : '%d 年'\n }\n });\n\n return zhHk;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var zhTw = moment.defineLocale('zh-tw', {\n months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'YYYY/MM/DD',\n LL : 'YYYY年M月D日',\n LLL : 'YYYY年M月D日 HH:mm',\n LLLL : 'YYYY年M月D日dddd HH:mm',\n l : 'YYYY/M/D',\n ll : 'YYYY年M月D日',\n lll : 'YYYY年M月D日 HH:mm',\n llll : 'YYYY年M月D日dddd HH:mm'\n },\n meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n return hour;\n } else if (meridiem === '中午') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === '下午' || meridiem === '晚上') {\n return hour + 12;\n }\n },\n meridiem : function (hour, minute, isLower) {\n var hm = hour * 100 + minute;\n if (hm < 600) {\n return '凌晨';\n } else if (hm < 900) {\n return '早上';\n } else if (hm < 1130) {\n return '上午';\n } else if (hm < 1230) {\n return '中午';\n } else if (hm < 1800) {\n return '下午';\n } else {\n return '晚上';\n }\n },\n calendar : {\n sameDay : '[今天] LT',\n nextDay : '[明天] LT',\n nextWeek : '[下]dddd LT',\n lastDay : '[昨天] LT',\n lastWeek : '[上]dddd LT',\n sameElse : 'L'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n ordinal : function (number, period) {\n switch (period) {\n case 'd' :\n case 'D' :\n case 'DDD' :\n return number + '日';\n case 'M' :\n return number + '月';\n case 'w' :\n case 'W' :\n return number + '週';\n default :\n return number;\n }\n },\n relativeTime : {\n future : '%s內',\n past : '%s前',\n s : '幾秒',\n ss : '%d 秒',\n m : '1 分鐘',\n mm : '%d 分鐘',\n h : '1 小時',\n hh : '%d 小時',\n d : '1 天',\n dd : '%d 天',\n M : '1 個月',\n MM : '%d 個月',\n y : '1 年',\n yy : '%d 年'\n }\n });\n\n return zhTw;\n\n})));\n","var map = {\n\t\"./af\": 95286,\n\t\"./af.js\": 95286,\n\t\"./ar\": 6561,\n\t\"./ar-dz\": 2146,\n\t\"./ar-dz.js\": 2146,\n\t\"./ar-kw\": 38047,\n\t\"./ar-kw.js\": 38047,\n\t\"./ar-ly\": 22833,\n\t\"./ar-ly.js\": 22833,\n\t\"./ar-ma\": 30186,\n\t\"./ar-ma.js\": 30186,\n\t\"./ar-sa\": 66922,\n\t\"./ar-sa.js\": 66922,\n\t\"./ar-tn\": 490,\n\t\"./ar-tn.js\": 490,\n\t\"./ar.js\": 6561,\n\t\"./az\": 48641,\n\t\"./az.js\": 48641,\n\t\"./be\": 23299,\n\t\"./be.js\": 23299,\n\t\"./bg\": 21502,\n\t\"./bg.js\": 21502,\n\t\"./bm\": 24574,\n\t\"./bm.js\": 24574,\n\t\"./bn\": 11729,\n\t\"./bn.js\": 11729,\n\t\"./bo\": 9925,\n\t\"./bo.js\": 9925,\n\t\"./br\": 1988,\n\t\"./br.js\": 1988,\n\t\"./bs\": 85793,\n\t\"./bs.js\": 85793,\n\t\"./ca\": 60347,\n\t\"./ca.js\": 60347,\n\t\"./cs\": 10999,\n\t\"./cs.js\": 10999,\n\t\"./cv\": 81690,\n\t\"./cv.js\": 81690,\n\t\"./cy\": 72638,\n\t\"./cy.js\": 72638,\n\t\"./da\": 66820,\n\t\"./da.js\": 66820,\n\t\"./de\": 38413,\n\t\"./de-at\": 15502,\n\t\"./de-at.js\": 15502,\n\t\"./de-ch\": 67569,\n\t\"./de-ch.js\": 67569,\n\t\"./de.js\": 38413,\n\t\"./dv\": 15335,\n\t\"./dv.js\": 15335,\n\t\"./el\": 21406,\n\t\"./el.js\": 21406,\n\t\"./en-SG\": 43432,\n\t\"./en-SG.js\": 43432,\n\t\"./en-au\": 19612,\n\t\"./en-au.js\": 19612,\n\t\"./en-ca\": 87302,\n\t\"./en-ca.js\": 87302,\n\t\"./en-gb\": 21543,\n\t\"./en-gb.js\": 21543,\n\t\"./en-ie\": 96745,\n\t\"./en-ie.js\": 96745,\n\t\"./en-il\": 69560,\n\t\"./en-il.js\": 69560,\n\t\"./en-nz\": 87883,\n\t\"./en-nz.js\": 87883,\n\t\"./eo\": 38066,\n\t\"./eo.js\": 38066,\n\t\"./es\": 96730,\n\t\"./es-do\": 61848,\n\t\"./es-do.js\": 61848,\n\t\"./es-us\": 32779,\n\t\"./es-us.js\": 32779,\n\t\"./es.js\": 96730,\n\t\"./et\": 61386,\n\t\"./et.js\": 61386,\n\t\"./eu\": 49220,\n\t\"./eu.js\": 49220,\n\t\"./fa\": 81123,\n\t\"./fa.js\": 81123,\n\t\"./fi\": 95495,\n\t\"./fi.js\": 95495,\n\t\"./fo\": 15855,\n\t\"./fo.js\": 15855,\n\t\"./fr\": 93843,\n\t\"./fr-ca\": 72251,\n\t\"./fr-ca.js\": 72251,\n\t\"./fr-ch\": 41713,\n\t\"./fr-ch.js\": 41713,\n\t\"./fr.js\": 93843,\n\t\"./fy\": 91316,\n\t\"./fy.js\": 91316,\n\t\"./ga\": 70089,\n\t\"./ga.js\": 70089,\n\t\"./gd\": 39957,\n\t\"./gd.js\": 39957,\n\t\"./gl\": 28775,\n\t\"./gl.js\": 28775,\n\t\"./gom-latn\": 82190,\n\t\"./gom-latn.js\": 82190,\n\t\"./gu\": 22018,\n\t\"./gu.js\": 22018,\n\t\"./he\": 41636,\n\t\"./he.js\": 41636,\n\t\"./hi\": 96602,\n\t\"./hi.js\": 96602,\n\t\"./hr\": 91898,\n\t\"./hr.js\": 91898,\n\t\"./hu\": 23597,\n\t\"./hu.js\": 23597,\n\t\"./hy-am\": 86557,\n\t\"./hy-am.js\": 86557,\n\t\"./id\": 48186,\n\t\"./id.js\": 48186,\n\t\"./is\": 92004,\n\t\"./is.js\": 92004,\n\t\"./it\": 31032,\n\t\"./it-ch\": 62219,\n\t\"./it-ch.js\": 62219,\n\t\"./it.js\": 31032,\n\t\"./ja\": 31461,\n\t\"./ja.js\": 31461,\n\t\"./jv\": 40721,\n\t\"./jv.js\": 40721,\n\t\"./ka\": 22116,\n\t\"./ka.js\": 22116,\n\t\"./kk\": 31007,\n\t\"./kk.js\": 31007,\n\t\"./km\": 7765,\n\t\"./km.js\": 7765,\n\t\"./kn\": 3735,\n\t\"./kn.js\": 3735,\n\t\"./ko\": 86880,\n\t\"./ko.js\": 86880,\n\t\"./ku\": 98841,\n\t\"./ku.js\": 98841,\n\t\"./ky\": 24125,\n\t\"./ky.js\": 24125,\n\t\"./lb\": 10047,\n\t\"./lb.js\": 10047,\n\t\"./lo\": 16396,\n\t\"./lo.js\": 16396,\n\t\"./lt\": 93903,\n\t\"./lt.js\": 93903,\n\t\"./lv\": 4162,\n\t\"./lv.js\": 4162,\n\t\"./me\": 53933,\n\t\"./me.js\": 53933,\n\t\"./mi\": 4044,\n\t\"./mi.js\": 4044,\n\t\"./mk\": 26326,\n\t\"./mk.js\": 26326,\n\t\"./ml\": 5774,\n\t\"./ml.js\": 5774,\n\t\"./mn\": 9012,\n\t\"./mn.js\": 9012,\n\t\"./mr\": 52738,\n\t\"./mr.js\": 52738,\n\t\"./ms\": 77364,\n\t\"./ms-my\": 35304,\n\t\"./ms-my.js\": 35304,\n\t\"./ms.js\": 77364,\n\t\"./mt\": 35926,\n\t\"./mt.js\": 35926,\n\t\"./my\": 49515,\n\t\"./my.js\": 49515,\n\t\"./nb\": 38267,\n\t\"./nb.js\": 38267,\n\t\"./ne\": 68871,\n\t\"./ne.js\": 68871,\n\t\"./nl\": 130,\n\t\"./nl-be\": 33615,\n\t\"./nl-be.js\": 33615,\n\t\"./nl.js\": 130,\n\t\"./nn\": 4484,\n\t\"./nn.js\": 4484,\n\t\"./pa-in\": 75380,\n\t\"./pa-in.js\": 75380,\n\t\"./pl\": 80255,\n\t\"./pl.js\": 80255,\n\t\"./pt\": 15179,\n\t\"./pt-br\": 43809,\n\t\"./pt-br.js\": 43809,\n\t\"./pt.js\": 15179,\n\t\"./ro\": 71998,\n\t\"./ro.js\": 71998,\n\t\"./ru\": 13586,\n\t\"./ru.js\": 13586,\n\t\"./sd\": 65424,\n\t\"./sd.js\": 65424,\n\t\"./se\": 19412,\n\t\"./se.js\": 19412,\n\t\"./si\": 19220,\n\t\"./si.js\": 19220,\n\t\"./sk\": 47374,\n\t\"./sk.js\": 47374,\n\t\"./sl\": 67574,\n\t\"./sl.js\": 67574,\n\t\"./sq\": 62977,\n\t\"./sq.js\": 62977,\n\t\"./sr\": 76792,\n\t\"./sr-cyrl\": 53388,\n\t\"./sr-cyrl.js\": 53388,\n\t\"./sr.js\": 76792,\n\t\"./ss\": 41676,\n\t\"./ss.js\": 41676,\n\t\"./sv\": 89807,\n\t\"./sv.js\": 89807,\n\t\"./sw\": 39893,\n\t\"./sw.js\": 39893,\n\t\"./ta\": 81610,\n\t\"./ta.js\": 81610,\n\t\"./te\": 38921,\n\t\"./te.js\": 38921,\n\t\"./tet\": 16791,\n\t\"./tet.js\": 16791,\n\t\"./tg\": 7353,\n\t\"./tg.js\": 7353,\n\t\"./th\": 10035,\n\t\"./th.js\": 10035,\n\t\"./tl-ph\": 72526,\n\t\"./tl-ph.js\": 72526,\n\t\"./tlh\": 8730,\n\t\"./tlh.js\": 8730,\n\t\"./tr\": 59059,\n\t\"./tr.js\": 59059,\n\t\"./tzl\": 88459,\n\t\"./tzl.js\": 88459,\n\t\"./tzm\": 46357,\n\t\"./tzm-latn\": 98904,\n\t\"./tzm-latn.js\": 98904,\n\t\"./tzm.js\": 46357,\n\t\"./ug-cn\": 40014,\n\t\"./ug-cn.js\": 40014,\n\t\"./uk\": 87166,\n\t\"./uk.js\": 87166,\n\t\"./ur\": 42450,\n\t\"./ur.js\": 42450,\n\t\"./uz\": 76150,\n\t\"./uz-latn\": 42939,\n\t\"./uz-latn.js\": 42939,\n\t\"./uz.js\": 76150,\n\t\"./vi\": 62959,\n\t\"./vi.js\": 62959,\n\t\"./x-pseudo\": 76756,\n\t\"./x-pseudo.js\": 76756,\n\t\"./yo\": 21873,\n\t\"./yo.js\": 21873,\n\t\"./zh-cn\": 26077,\n\t\"./zh-cn.js\": 26077,\n\t\"./zh-hk\": 18230,\n\t\"./zh-hk.js\": 18230,\n\t\"./zh-tw\": 99603,\n\t\"./zh-tw.js\": 99603\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 84179;","//! moment.js\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n global.moment = factory()\n}(this, (function () { 'use strict';\n\n var hookCallback;\n\n function hooks () {\n return hookCallback.apply(null, arguments);\n }\n\n // This is done to register the method called with moment()\n // without creating circular dependencies.\n function setHookCallback (callback) {\n hookCallback = callback;\n }\n\n function isArray(input) {\n return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';\n }\n\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return input != null && Object.prototype.toString.call(input) === '[object Object]';\n }\n\n function isObjectEmpty(obj) {\n if (Object.getOwnPropertyNames) {\n return (Object.getOwnPropertyNames(obj).length === 0);\n } else {\n var k;\n for (k in obj) {\n if (obj.hasOwnProperty(k)) {\n return false;\n }\n }\n return true;\n }\n }\n\n function isUndefined(input) {\n return input === void 0;\n }\n\n function isNumber(input) {\n return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';\n }\n\n function isDate(input) {\n return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\n }\n\n function map(arr, fn) {\n var res = [], i;\n for (i = 0; i < arr.length; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n }\n\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\n\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function createUTC (input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty : false,\n unusedTokens : [],\n unusedInput : [],\n overflow : -2,\n charsLeftOver : 0,\n nullInput : false,\n invalidMonth : null,\n invalidFormat : false,\n userInvalidated : false,\n iso : false,\n parsedDateParts : [],\n meridiem : null,\n rfc2822 : false,\n weekdayMismatch : false\n };\n }\n\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n\n var some;\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function (fun) {\n var t = Object(this);\n var len = t.length >>> 0;\n\n for (var i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n function isValid(m) {\n if (m._isValid == null) {\n var flags = getParsingFlags(m);\n var parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n });\n var isNowValid = !isNaN(m._d.getTime()) &&\n flags.overflow < 0 &&\n !flags.empty &&\n !flags.invalidMonth &&\n !flags.invalidWeekday &&\n !flags.weekdayMismatch &&\n !flags.nullInput &&\n !flags.invalidFormat &&\n !flags.userInvalidated &&\n (!flags.meridiem || (flags.meridiem && parsedParts));\n\n if (m._strict) {\n isNowValid = isNowValid &&\n flags.charsLeftOver === 0 &&\n flags.unusedTokens.length === 0 &&\n flags.bigHour === undefined;\n }\n\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\n m._isValid = isNowValid;\n }\n else {\n return isNowValid;\n }\n }\n return m._isValid;\n }\n\n function createInvalid (flags) {\n var m = createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n }\n else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n }\n\n // Plugins that add properties should also add the key here (null value),\n // so we can properly clone ourselves.\n var momentProperties = hooks.momentProperties = [];\n\n function copyConfig(to, from) {\n var i, prop, val;\n\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n\n if (momentProperties.length > 0) {\n for (i = 0; i < momentProperties.length; i++) {\n prop = momentProperties[i];\n val = from[prop];\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n\n return to;\n }\n\n var updateInProgress = false;\n\n // Moment prototype object\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n if (!this.isValid()) {\n this._d = new Date(NaN);\n }\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n\n function isMoment (obj) {\n return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);\n }\n\n function absFloor (number) {\n if (number < 0) {\n // -0 -> 0\n return Math.ceil(number) || 0;\n } else {\n return Math.floor(number);\n }\n }\n\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n }\n\n // compare two arrays, return the number of differences\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if ((dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n }\n\n function warn(msg) {\n if (hooks.suppressDeprecationWarnings === false &&\n (typeof console !== 'undefined') && console.warn) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n if (firstTime) {\n var args = [];\n var arg;\n for (var i = 0; i < arguments.length; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (var key in arguments[0]) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(msg + '\\nArguments: ' + Array.prototype.slice.call(args).join('') + '\\n' + (new Error()).stack);\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\n function deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n\n function isFunction(input) {\n return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n }\n\n function set (config) {\n var prop, i;\n for (i in config) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n this._config = config;\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n this._dayOfMonthOrdinalParseLenient = new RegExp(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n '|' + (/\\d{1,2}/).source);\n }\n\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig), prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n\n var keys;\n\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function (obj) {\n var i, res = [];\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n return res;\n };\n }\n\n var defaultCalendar = {\n sameDay : '[Today at] LT',\n nextDay : '[Tomorrow at] LT',\n nextWeek : 'dddd [at] LT',\n lastDay : '[Yesterday at] LT',\n lastWeek : '[Last] dddd [at] LT',\n sameElse : 'L'\n };\n\n function calendar (key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n }\n\n var defaultLongDateFormat = {\n LTS : 'h:mm:ss A',\n LT : 'h:mm A',\n L : 'MM/DD/YYYY',\n LL : 'MMMM D, YYYY',\n LLL : 'MMMM D, YYYY h:mm A',\n LLLL : 'dddd, MMMM D, YYYY h:mm A'\n };\n\n function longDateFormat (key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {\n return val.slice(1);\n });\n\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate () {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d';\n var defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n function ordinal (number) {\n return this._ordinal.replace('%d', number);\n }\n\n var defaultRelativeTime = {\n future : 'in %s',\n past : '%s ago',\n s : 'a few seconds',\n ss : '%d seconds',\n m : 'a minute',\n mm : '%d minutes',\n h : 'an hour',\n hh : '%d hours',\n d : 'a day',\n dd : '%d days',\n M : 'a month',\n MM : '%d months',\n y : 'a year',\n yy : '%d years'\n };\n\n function relativeTime (number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return (isFunction(output)) ?\n output(number, withoutSuffix, string, isFuture) :\n output.replace(/%d/i, number);\n }\n\n function pastFuture (diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n }\n\n var aliases = {};\n\n function addUnitAlias (unit, shorthand) {\n var lowerCase = unit.toLowerCase();\n aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n }\n\n function normalizeUnits(units) {\n return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;\n }\n\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n\n return normalizedInput;\n }\n\n var priorities = {};\n\n function addUnitPriority(unit, priority) {\n priorities[unit] = priority;\n }\n\n function getPrioritizedUnits(unitsObj) {\n var units = [];\n for (var u in unitsObj) {\n units.push({unit: u, priority: priorities[u]});\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;\n }\n\n var formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;\n\n var localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g;\n\n var formatFunctions = {};\n\n var formatTokenFunctions = {};\n\n // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n function addFormatToken (token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(func.apply(this, arguments), token);\n };\n }\n }\n\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n }\n\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens), i, length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '', i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];\n }\n return output;\n };\n }\n\n // format date using native date object\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\n\n var match1 = /\\d/; // 0 - 9\n var match2 = /\\d\\d/; // 00 - 99\n var match3 = /\\d{3}/; // 000 - 999\n var match4 = /\\d{4}/; // 0000 - 9999\n var match6 = /[+-]?\\d{6}/; // -999999 - 999999\n var match1to2 = /\\d\\d?/; // 0 - 99\n var match3to4 = /\\d\\d\\d\\d?/; // 999 - 9999\n var match5to6 = /\\d\\d\\d\\d\\d\\d?/; // 99999 - 999999\n var match1to3 = /\\d{1,3}/; // 0 - 999\n var match1to4 = /\\d{1,4}/; // 0 - 9999\n var match1to6 = /[+-]?\\d{1,6}/; // -999999 - 999999\n\n var matchUnsigned = /\\d+/; // 0 - inf\n var matchSigned = /[+-]?\\d+/; // -inf - inf\n\n var matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi; // +00:00 -00:00 +0000 -0000 or Z\n var matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n\n var matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/; // 123456789 123456789.123\n\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n var matchWord = /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i;\n\n var regexes = {};\n\n function addRegexToken (token, regex, strictRegex) {\n regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {\n return (isStrict && strictRegex) ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken (token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n }\n\n // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n function unescapeFormat(s) {\n return regexEscape(s.replace('\\\\', '').replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }));\n }\n\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n var tokens = {};\n\n function addParseToken (token, callback) {\n var i, func = callback;\n if (typeof token === 'string') {\n token = [token];\n }\n if (isNumber(callback)) {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n for (i = 0; i < token.length; i++) {\n tokens[token[i]] = func;\n }\n }\n\n function addWeekParseToken (token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n\n var YEAR = 0;\n var MONTH = 1;\n var DATE = 2;\n var HOUR = 3;\n var MINUTE = 4;\n var SECOND = 5;\n var MILLISECOND = 6;\n var WEEK = 7;\n var WEEKDAY = 8;\n\n // FORMATTING\n\n addFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? '' + y : '+' + y;\n });\n\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\n\n addFormatToken(0, ['YYYY', 4], 0, 'year');\n addFormatToken(0, ['YYYYY', 5], 0, 'year');\n addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n // ALIASES\n\n addUnitAlias('year', 'y');\n\n // PRIORITIES\n\n addUnitPriority('year', 1);\n\n // PARSING\n\n addRegexToken('Y', matchSigned);\n addRegexToken('YY', match1to2, match2);\n addRegexToken('YYYY', match1to4, match4);\n addRegexToken('YYYYY', match1to6, match6);\n addRegexToken('YYYYYY', match1to6, match6);\n\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n });\n addParseToken('YY', function (input, array) {\n array[YEAR] = hooks.parseTwoDigitYear(input);\n });\n addParseToken('Y', function (input, array) {\n array[YEAR] = parseInt(input, 10);\n });\n\n // HELPERS\n\n function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n }\n\n function isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n\n // HOOKS\n\n hooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n };\n\n // MOMENTS\n\n var getSetYear = makeGetSet('FullYear', true);\n\n function getIsLeapYear () {\n return isLeapYear(this.year());\n }\n\n function makeGetSet (unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n }\n\n function get (mom, unit) {\n return mom.isValid() ?\n mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;\n }\n\n function set$1 (mom, unit, value) {\n if (mom.isValid() && !isNaN(value)) {\n if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) {\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month()));\n }\n else {\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n }\n }\n }\n\n // MOMENTS\n\n function stringGet (units) {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units]();\n }\n return this;\n }\n\n\n function stringSet (units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units);\n for (var i = 0; i < prioritized.length; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n return this;\n }\n\n function mod(n, x) {\n return ((n % x) + x) % x;\n }\n\n var indexOf;\n\n if (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n } else {\n indexOf = function (o) {\n // I know\n var i;\n for (i = 0; i < this.length; ++i) {\n if (this[i] === o) {\n return i;\n }\n }\n return -1;\n };\n }\n\n function daysInMonth(year, month) {\n if (isNaN(year) || isNaN(month)) {\n return NaN;\n }\n var modMonth = mod(month, 12);\n year += (month - modMonth) / 12;\n return modMonth === 1 ? (isLeapYear(year) ? 29 : 28) : (31 - modMonth % 7 % 2);\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\n\n addFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n });\n\n // ALIASES\n\n addUnitAlias('month', 'M');\n\n // PRIORITY\n\n addUnitPriority('month', 8);\n\n // PARSING\n\n addRegexToken('M', match1to2);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n });\n addRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n });\n\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n });\n\n // LOCALES\n\n var MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/;\n var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');\n function localeMonths (m, format) {\n if (!m) {\n return isArray(this._months) ? this._months :\n this._months['standalone'];\n }\n return isArray(this._months) ? this._months[m.month()] :\n this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];\n }\n\n var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');\n function localeMonthsShort (m, format) {\n if (!m) {\n return isArray(this._monthsShort) ? this._monthsShort :\n this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort) ? this._monthsShort[m.month()] :\n this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];\n }\n\n function handleStrictParse(monthName, format, strict) {\n var i, ii, mom, llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeMonthsParse (monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');\n this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');\n }\n if (!strict && !this._monthsParse[i]) {\n regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {\n return i;\n } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function setMonth (mom, value) {\n var dayOfMonth;\n\n if (!mom.isValid()) {\n // No op\n return mom;\n }\n\n if (typeof value === 'string') {\n if (/^\\d+$/.test(value)) {\n value = toInt(value);\n } else {\n value = mom.localeData().monthsParse(value);\n // TODO: Another silent failure?\n if (!isNumber(value)) {\n return mom;\n }\n }\n }\n\n dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n return mom;\n }\n\n function getSetMonth (value) {\n if (value != null) {\n setMonth(this, value);\n hooks.updateOffset(this, true);\n return this;\n } else {\n return get(this, 'Month');\n }\n }\n\n function getDaysInMonth () {\n return daysInMonth(this.year(), this.month());\n }\n\n var defaultMonthsShortRegex = matchWord;\n function monthsShortRegex (isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsShortStrictRegex;\n } else {\n return this._monthsShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsShortRegex')) {\n this._monthsShortRegex = defaultMonthsShortRegex;\n }\n return this._monthsShortStrictRegex && isStrict ?\n this._monthsShortStrictRegex : this._monthsShortRegex;\n }\n }\n\n var defaultMonthsRegex = matchWord;\n function monthsRegex (isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsStrictRegex;\n } else {\n return this._monthsRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsRegex')) {\n this._monthsRegex = defaultMonthsRegex;\n }\n return this._monthsStrictRegex && isStrict ?\n this._monthsStrictRegex : this._monthsRegex;\n }\n }\n\n function computeMonthsParse () {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var shortPieces = [], longPieces = [], mixedPieces = [],\n i, mom;\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortPieces.push(this.monthsShort(mom, ''));\n longPieces.push(this.months(mom, ''));\n mixedPieces.push(this.months(mom, ''));\n mixedPieces.push(this.monthsShort(mom, ''));\n }\n // Sorting makes sure if one month (or abbr) is a prefix of another it\n // will match the longer piece.\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n for (i = 0; i < 12; i++) {\n shortPieces[i] = regexEscape(shortPieces[i]);\n longPieces[i] = regexEscape(longPieces[i]);\n }\n for (i = 0; i < 24; i++) {\n mixedPieces[i] = regexEscape(mixedPieces[i]);\n }\n\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n }\n\n function createDate (y, m, d, h, M, s, ms) {\n // can't just apply() to create a date:\n // https://stackoverflow.com/q/181348\n var date;\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n date = new Date(y + 400, m, d, h, M, s, ms);\n if (isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n } else {\n date = new Date(y, m, d, h, M, s, ms);\n }\n\n return date;\n }\n\n function createUTCDate (y) {\n var date;\n // the Date.UTC function remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n var args = Array.prototype.slice.call(arguments);\n // preserve leap years using a full 400 year cycle, then reset\n args[0] = y + 400;\n date = new Date(Date.UTC.apply(null, args));\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n } else {\n date = new Date(Date.UTC.apply(null, arguments));\n }\n\n return date;\n }\n\n // start-of-first-week - start-of-year\n function firstWeekOffset(year, dow, doy) {\n var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n fwd = 7 + dow - doy,\n // first-week day local weekday -- which local weekday is fwd\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n return -fwdlw + fwd - 1;\n }\n\n // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n var localWeekday = (7 + weekday - dow) % 7,\n weekOffset = firstWeekOffset(year, dow, doy),\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n resYear, resDayOfYear;\n\n if (dayOfYear <= 0) {\n resYear = year - 1;\n resDayOfYear = daysInYear(resYear) + dayOfYear;\n } else if (dayOfYear > daysInYear(year)) {\n resYear = year + 1;\n resDayOfYear = dayOfYear - daysInYear(year);\n } else {\n resYear = year;\n resDayOfYear = dayOfYear;\n }\n\n return {\n year: resYear,\n dayOfYear: resDayOfYear\n };\n }\n\n function weekOfYear(mom, dow, doy) {\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n resWeek, resYear;\n\n if (week < 1) {\n resYear = mom.year() - 1;\n resWeek = week + weeksInYear(resYear, dow, doy);\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\n resWeek = week - weeksInYear(mom.year(), dow, doy);\n resYear = mom.year() + 1;\n } else {\n resYear = mom.year();\n resWeek = week;\n }\n\n return {\n week: resWeek,\n year: resYear\n };\n }\n\n function weeksInYear(year, dow, doy) {\n var weekOffset = firstWeekOffset(year, dow, doy),\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n }\n\n // FORMATTING\n\n addFormatToken('w', ['ww', 2], 'wo', 'week');\n addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n // ALIASES\n\n addUnitAlias('week', 'w');\n addUnitAlias('isoWeek', 'W');\n\n // PRIORITIES\n\n addUnitPriority('week', 5);\n addUnitPriority('isoWeek', 5);\n\n // PARSING\n\n addRegexToken('w', match1to2);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2);\n addRegexToken('WW', match1to2, match2);\n\n addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n });\n\n // HELPERS\n\n // LOCALES\n\n function localeWeek (mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n\n var defaultLocaleWeek = {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 6th is the first week of the year.\n };\n\n function localeFirstDayOfWeek () {\n return this._week.dow;\n }\n\n function localeFirstDayOfYear () {\n return this._week.doy;\n }\n\n // MOMENTS\n\n function getSetWeek (input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n function getSetISOWeek (input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('d', 0, 'do', 'day');\n\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday');\n\n // ALIASES\n\n addUnitAlias('day', 'd');\n addUnitAlias('weekday', 'e');\n addUnitAlias('isoWeekday', 'E');\n\n // PRIORITY\n addUnitPriority('day', 11);\n addUnitPriority('weekday', 11);\n addUnitPriority('isoWeekday', 11);\n\n // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n });\n addRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n });\n addRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n });\n\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n });\n\n // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\n\n function parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n return isNaN(input) ? null : input;\n }\n\n // LOCALES\n function shiftWeekdays (ws, n) {\n return ws.slice(n, 7).concat(ws.slice(0, n));\n }\n\n var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');\n function localeWeekdays (m, format) {\n var weekdays = isArray(this._weekdays) ? this._weekdays :\n this._weekdays[(m && m !== true && this._weekdays.isFormat.test(format)) ? 'format' : 'standalone'];\n return (m === true) ? shiftWeekdays(weekdays, this._week.dow)\n : (m) ? weekdays[m.day()] : weekdays;\n }\n\n var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');\n function localeWeekdaysShort (m) {\n return (m === true) ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n : (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;\n }\n\n var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');\n function localeWeekdaysMin (m) {\n return (m === true) ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n : (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;\n }\n\n function handleStrictParse$1(weekdayName, format, strict) {\n var i, ii, mom, llc = weekdayName.toLocaleLowerCase();\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeWeekdaysParse (weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n\n mom = createUTC([2000, 1]).day(i);\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$', 'i');\n this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$', 'i');\n this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$', 'i');\n }\n if (!this._weekdaysParse[i]) {\n regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {\n return i;\n } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {\n return i;\n } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function getSetDayOfWeek (input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n }\n\n function getSetLocaleDayOfWeek (input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n }\n\n function getSetISODayOfWeek (input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n\n if (input != null) {\n var weekday = parseIsoWeekday(input, this.localeData());\n return this.day(this.day() % 7 ? weekday : weekday - 7);\n } else {\n return this.day() || 7;\n }\n }\n\n var defaultWeekdaysRegex = matchWord;\n function weekdaysRegex (isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysStrictRegex;\n } else {\n return this._weekdaysRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n this._weekdaysRegex = defaultWeekdaysRegex;\n }\n return this._weekdaysStrictRegex && isStrict ?\n this._weekdaysStrictRegex : this._weekdaysRegex;\n }\n }\n\n var defaultWeekdaysShortRegex = matchWord;\n function weekdaysShortRegex (isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysShortStrictRegex;\n } else {\n return this._weekdaysShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n }\n return this._weekdaysShortStrictRegex && isStrict ?\n this._weekdaysShortStrictRegex : this._weekdaysShortRegex;\n }\n }\n\n var defaultWeekdaysMinRegex = matchWord;\n function weekdaysMinRegex (isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysMinStrictRegex;\n } else {\n return this._weekdaysMinRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n }\n return this._weekdaysMinStrictRegex && isStrict ?\n this._weekdaysMinStrictRegex : this._weekdaysMinRegex;\n }\n }\n\n\n function computeWeekdaysParse () {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],\n i, mom, minp, shortp, longp;\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n minp = this.weekdaysMin(mom, '');\n shortp = this.weekdaysShort(mom, '');\n longp = this.weekdays(mom, '');\n minPieces.push(minp);\n shortPieces.push(shortp);\n longPieces.push(longp);\n mixedPieces.push(minp);\n mixedPieces.push(shortp);\n mixedPieces.push(longp);\n }\n // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n // will match the longer piece.\n minPieces.sort(cmpLenRev);\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n for (i = 0; i < 7; i++) {\n shortPieces[i] = regexEscape(shortPieces[i]);\n longPieces[i] = regexEscape(longPieces[i]);\n mixedPieces[i] = regexEscape(mixedPieces[i]);\n }\n\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n\n this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');\n }\n\n // FORMATTING\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n\n function kFormat() {\n return this.hours() || 24;\n }\n\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('hmmss', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2);\n });\n\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('Hmmss', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2);\n });\n\n function meridiem (token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);\n });\n }\n\n meridiem('a', true);\n meridiem('A', false);\n\n // ALIASES\n\n addUnitAlias('hour', 'h');\n\n // PRIORITY\n addUnitPriority('hour', 13);\n\n // PARSING\n\n function matchMeridiem (isStrict, locale) {\n return locale._meridiemParse;\n }\n\n addRegexToken('a', matchMeridiem);\n addRegexToken('A', matchMeridiem);\n addRegexToken('H', match1to2);\n addRegexToken('h', match1to2);\n addRegexToken('k', match1to2);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n addRegexToken('kk', match1to2, match2);\n\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n });\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4;\n var pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n });\n addParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4;\n var pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n });\n\n // LOCALES\n\n function localeIsPM (input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return ((input + '').toLowerCase().charAt(0) === 'p');\n }\n\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i;\n function localeMeridiem (hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n\n\n // MOMENTS\n\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n var getSetHour = makeGetSet('Hours', true);\n\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n\n week: defaultLocaleWeek,\n\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n\n meridiemParse: defaultLocaleMeridiemParse\n };\n\n // internal storage for locale config files\n var locales = {};\n var localeFamilies = {};\n var globalLocale;\n\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n }\n\n // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n function chooseLocale(names) {\n var i = 0, j, next, locale, split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n }\n\n function loadLocale(name) {\n var oldLocale = null;\n // TODO: Find a better way to register and load all the locales in Node\n if (!locales[name] && (typeof module !== 'undefined') &&\n module && module.exports) {\n try {\n oldLocale = globalLocale._abbr;\n var aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {}\n }\n return locales[name];\n }\n\n // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n function getSetGlobalLocale (key, values) {\n var data;\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n }\n else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n }\n else {\n if ((typeof console !== 'undefined') && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn('Locale ' + key + ' not found. Did you forget to load it?');\n }\n }\n }\n\n return globalLocale._abbr;\n }\n\n function defineLocale (name, config) {\n if (config !== null) {\n var locale, parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple('defineLocaleOverride',\n 'use moment.updateLocale(localeName, config) to change ' +\n 'an existing locale. moment.defineLocale(localeName, ' +\n 'config) should only be used for creating a new locale ' +\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config\n });\n return null;\n }\n }\n }\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n }\n\n // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n getSetGlobalLocale(name);\n\n\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n function updateLocale(name, config) {\n if (config != null) {\n var locale, tmpLocale, parentConfig = baseConfig;\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n\n // backwards compat for now: also set the locale\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n return locales[name];\n }\n\n // returns locale data\n function getLocale (key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n\n return chooseLocale(key);\n }\n\n function listLocales() {\n return keys(locales);\n }\n\n function checkOverflow (m) {\n var overflow;\n var a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11 ? MONTH :\n a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE :\n a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :\n a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE :\n a[SECOND] < 0 || a[SECOND] > 59 ? SECOND :\n a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :\n -1;\n\n if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n }\n\n // Pick the first defined of two or three arguments.\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n }\n\n function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n }\n\n // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n function configFromArray (config) {\n var i, date, input = [], currentDate, expectedWeekday, yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);\n expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;\n\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n\n var curWeek = weekOfYear(createLocal(), dow, doy);\n\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from beginning of week\n weekday = w.e + dow;\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to beginning of week\n weekday = dow;\n }\n }\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n }\n\n // iso 8601 regex\n // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n var extendedIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n var basicIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n\n var tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/;\n\n var isoDates = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n ['YYYYYYMMDD', /[+-]\\d{10}/],\n ['YYYYMMDD', /\\d{8}/],\n // YYYYMM is NOT allowed by the standard\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/]\n ];\n\n // iso time formats and regexes\n var isoTimes = [\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /\\d\\d:\\d\\d/],\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n ['HHmm', /\\d\\d\\d\\d/],\n ['HH', /\\d\\d/]\n ];\n\n var aspNetJsonRegex = /^\\/?Date\\((\\-?\\d+)/i;\n\n // date from iso format\n function configFromISO(config) {\n var i, l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime, dateFormat, timeFormat, tzFormat;\n\n if (match) {\n getParsingFlags(config).iso = true;\n\n for (i = 0, l = isoDates.length; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n if (match[3]) {\n for (i = 0, l = isoTimes.length; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n }\n\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/;\n\n function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n var result = [\n untruncateYear(yearStr),\n defaultLocaleMonthsShort.indexOf(monthStr),\n parseInt(dayStr, 10),\n parseInt(hourStr, 10),\n parseInt(minuteStr, 10)\n ];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n }\n\n function untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n return year;\n }\n\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s.replace(/\\([^)]*\\)|[\\n\\t]/g, ' ').replace(/(\\s\\s+)/g, ' ').replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n }\n\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\n\n var obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60\n };\n\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10);\n var m = hm % 100, h = (hm - m) / 100;\n return h * 60 + m;\n }\n }\n\n // date and time from ref 2822 format\n function configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i));\n if (match) {\n var parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]);\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n }\n\n // date from iso format or fallback\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n\n hooks.createFromInputFallback = deprecate(\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n 'discouraged and will be removed in an upcoming major release. Please refer to ' +\n 'http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\n );\n\n // constant that refers to the ISO standard\n hooks.ISO_8601 = function () {};\n\n // constant that refers to the RFC 2822 form\n hooks.RFC_2822 = function () {};\n\n // date from string and format string\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i, parsedInput, tokens, token, skipped,\n stringLength = string.length,\n totalParsedInputLength = 0;\n\n tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];\n // console.log('token', token, 'parsedInput', parsedInput,\n // 'regex', getParseRegexForToken(token, config));\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(string.indexOf(parsedInput) + parsedInput.length);\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n }\n else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n }\n else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);\n\n configFromArray(config);\n checkOverflow(config);\n }\n\n\n function meridiemFixWrap (locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n }\n\n // date from string and array of format strings\n function configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n\n scoreToBeat,\n i,\n currentScore;\n\n if (config._f.length === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < config._f.length; i++) {\n currentScore = 0;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (!isValid(tempConfig)) {\n continue;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n getParsingFlags(tempConfig).score = currentScore;\n\n if (scoreToBeat == null || currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i);\n config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {\n return obj && parseInt(obj, 10);\n });\n\n configFromArray(config);\n }\n\n function createFromConfig (config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n }\n\n function prepareConfig (config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return createInvalid({nullInput: true});\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n }\n\n function configFromInput(config) {\n var input = config._i;\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n }\n\n function createLocalOrUTC (input, format, locale, strict, isUTC) {\n var c = {};\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if ((isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n\n return createFromConfig(c);\n }\n\n function createLocal (input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n var prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n function pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n }\n\n // TODO: Use [].sort instead?\n function min () {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isBefore', args);\n }\n\n function max () {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n }\n\n var now = function () {\n return Date.now ? Date.now() : +(new Date());\n };\n\n var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];\n\n function isDurationValid(m) {\n for (var key in m) {\n if (!(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {\n return false;\n }\n }\n\n var unitHasDecimal = false;\n for (var i = 0; i < ordering.length; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n\n return true;\n }\n\n function isValid$1() {\n return this._isValid;\n }\n\n function createInvalid$1() {\n return createDuration(NaN);\n }\n\n function Duration (duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds = +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days +\n weeks * 7;\n // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months +\n quarters * 3 +\n years * 12;\n\n this._data = {};\n\n this._locale = getLocale();\n\n this._bubble();\n }\n\n function isDuration (obj) {\n return obj instanceof Duration;\n }\n\n function absRound (number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n }\n\n // FORMATTING\n\n function offset (token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset();\n var sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);\n });\n }\n\n offset('Z', ':');\n offset('ZZ', '');\n\n // PARSING\n\n addRegexToken('Z', matchShortOffset);\n addRegexToken('ZZ', matchShortOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n });\n\n // HELPERS\n\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher);\n\n if (matches === null) {\n return null;\n }\n\n var chunk = matches[matches.length - 1] || [];\n var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n var minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n return minutes === 0 ?\n 0 :\n parts[0] === '+' ? minutes : -minutes;\n }\n\n // Return a moment from input, that is local/utc/zone equivalent to model.\n function cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n\n function getDateOffset (m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset() / 15) * 15;\n }\n\n // HOOKS\n\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n hooks.updateOffset = function () {};\n\n // MOMENTS\n\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n function getSetOffset (input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(this, createDuration(input - offset, 'm'), 1, false);\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n\n function getSetZone (input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC (keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal (keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\n\n function setOffsetToParsedOffset () {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n if (tZone != null) {\n this.utcOffset(tZone);\n }\n else {\n this.utcOffset(0, true);\n }\n }\n return this;\n }\n\n function hasAlignedHourOffset (input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime () {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n }\n\n function isDaylightSavingTimeShifted () {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {};\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted = this.isValid() &&\n compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal () {\n return this.isValid() ? !this._isUTC : false;\n }\n\n function isUtcOffset () {\n return this.isValid() ? this._isUTC : false;\n }\n\n function isUtc () {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n }\n\n // ASP.NET json date format regex\n var aspNetRegex = /^(\\-|\\+)?(?:(\\d*)[. ])?(\\d+)\\:(\\d+)(?:\\:(\\d+)(\\.\\d*)?)?$/;\n\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n var isoRegex = /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n function createDuration (input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms : input._milliseconds,\n d : input._days,\n M : input._months\n };\n } else if (isNumber(input)) {\n duration = {};\n if (key) {\n duration[key] = input;\n } else {\n duration.milliseconds = input;\n }\n } else if (!!(match = aspNetRegex.exec(input))) {\n sign = (match[1] === '-') ? -1 : 1;\n duration = {\n y : 0,\n d : toInt(match[DATE]) * sign,\n h : toInt(match[HOUR]) * sign,\n m : toInt(match[MINUTE]) * sign,\n s : toInt(match[SECOND]) * sign,\n ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match\n };\n } else if (!!(match = isoRegex.exec(input))) {\n sign = (match[1] === '-') ? -1 : 1;\n duration = {\n y : parseIso(match[2], sign),\n M : parseIso(match[3], sign),\n w : parseIso(match[4], sign),\n d : parseIso(match[5], sign),\n h : parseIso(match[6], sign),\n m : parseIso(match[7], sign),\n s : parseIso(match[8], sign)\n };\n } else if (duration == null) {// checks for null or undefined\n duration = {};\n } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {\n diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n return ret;\n }\n\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n\n function parseIso (inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n }\n\n function positiveMomentsDifference(base, other) {\n var res = {};\n\n res.months = other.month() - base.month() +\n (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +(base.clone().add(res.months, 'M'));\n\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return {milliseconds: 0, months: 0};\n }\n\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n }\n\n // TODO: remove 'name' arg after deprecation is removed\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');\n tmp = val; val = period; period = tmp;\n }\n\n val = typeof val === 'string' ? +val : val;\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n }\n\n function addSubtract (mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n }\n\n var add = createAdder(1, 'add');\n var subtract = createAdder(-1, 'subtract');\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6 ? 'sameElse' :\n diff < -1 ? 'lastWeek' :\n diff < 0 ? 'lastDay' :\n diff < 1 ? 'sameDay' :\n diff < 2 ? 'nextDay' :\n diff < 7 ? 'nextWeek' : 'sameElse';\n }\n\n function calendar$1 (time, formats) {\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse';\n\n var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);\n\n return this.format(output || this.localeData().calendar(format, this, createLocal(now)));\n }\n\n function clone () {\n return new Moment(this);\n }\n\n function isAfter (input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n }\n\n function isBefore (input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n }\n\n function isBetween (from, to, units, inclusivity) {\n var localFrom = isMoment(from) ? from : createLocal(from),\n localTo = isMoment(to) ? to : createLocal(to);\n if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n return false;\n }\n inclusivity = inclusivity || '()';\n return (inclusivity[0] === '(' ? this.isAfter(localFrom, units) : !this.isBefore(localFrom, units)) &&\n (inclusivity[1] === ')' ? this.isBefore(localTo, units) : !this.isAfter(localTo, units));\n }\n\n function isSame (input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();\n }\n }\n\n function isSameOrAfter (input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n }\n\n function isSameOrBefore (input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n }\n\n function diff (input, units, asFloat) {\n var that,\n zoneDelta,\n output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n units = normalizeUnits(units);\n\n switch (units) {\n case 'year': output = monthDiff(this, that) / 12; break;\n case 'month': output = monthDiff(this, that); break;\n case 'quarter': output = monthDiff(this, that) / 3; break;\n case 'second': output = (this - that) / 1e3; break; // 1000\n case 'minute': output = (this - that) / 6e4; break; // 1000 * 60\n case 'hour': output = (this - that) / 36e5; break; // 1000 * 60 * 60\n case 'day': output = (this - that - zoneDelta) / 864e5; break; // 1000 * 60 * 60 * 24, negate dst\n case 'week': output = (this - that - zoneDelta) / 6048e5; break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default: output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\n\n function monthDiff (a, b) {\n // difference in months\n var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2, adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n //check for negative zero, return zero if negative zero\n return -(wholeMonthDiff + adjust) || 0;\n }\n\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n function toString () {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n\n function toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n var utc = keepOffset !== true;\n var m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(m, utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ');\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000).toISOString().replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(m, utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ');\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n function inspect () {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment';\n var zone = '';\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n var prefix = '[' + func + '(\"]';\n var year = (0 <= this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY';\n var datetime = '-MM-DD[T]HH:mm:ss.SSS';\n var suffix = zone + '[\")]';\n\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format (inputString) {\n if (!inputString) {\n inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from (time, withoutSuffix) {\n if (this.isValid() &&\n ((isMoment(time) && time.isValid()) ||\n createLocal(time).isValid())) {\n return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function fromNow (withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n\n function to (time, withoutSuffix) {\n if (this.isValid() &&\n ((isMoment(time) && time.isValid()) ||\n createLocal(time).isValid())) {\n return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function toNow (withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n }\n\n // If passed a locale key, it will set the locale for this\n // instance. Otherwise, it will return the locale configuration\n // variables for this instance.\n function locale (key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n }\n\n var lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n );\n\n function localeData () {\n return this._locale;\n }\n\n var MS_PER_SECOND = 1000;\n var MS_PER_MINUTE = 60 * MS_PER_SECOND;\n var MS_PER_HOUR = 60 * MS_PER_MINUTE;\n var MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n // actual modulo - handles negative numbers (for dates before 1970):\n function mod$1(dividend, divisor) {\n return (dividend % divisor + divisor) % divisor;\n }\n\n function localStartOfDate(y, m, d) {\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return new Date(y, m, d).valueOf();\n }\n }\n\n function utcStartOfDate(y, m, d) {\n // Date.UTC remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return Date.UTC(y, m, d);\n }\n }\n\n function startOf (units) {\n var time;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n var startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n case 'quarter':\n time = startOfDate(this.year(), this.month() - this.month() % 3, 1);\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(this.year(), this.month(), this.date() - this.weekday());\n break;\n case 'isoWeek':\n time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1));\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date());\n break;\n case 'hour':\n time = this._d.valueOf();\n time -= mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR);\n break;\n case 'minute':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_MINUTE);\n break;\n case 'second':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_SECOND);\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function endOf (units) {\n var time;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n var startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n case 'quarter':\n time = startOfDate(this.year(), this.month() - this.month() % 3 + 3, 1) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time = startOfDate(this.year(), this.month(), this.date() - this.weekday() + 7) - 1;\n break;\n case 'isoWeek':\n time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1) + 7) - 1;\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n break;\n case 'hour':\n time = this._d.valueOf();\n time += MS_PER_HOUR - mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR) - 1;\n break;\n case 'minute':\n time = this._d.valueOf();\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n break;\n case 'second':\n time = this._d.valueOf();\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function valueOf () {\n return this._d.valueOf() - ((this._offset || 0) * 60000);\n }\n\n function unix () {\n return Math.floor(this.valueOf() / 1000);\n }\n\n function toDate () {\n return new Date(this.valueOf());\n }\n\n function toArray () {\n var m = this;\n return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];\n }\n\n function toObject () {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds()\n };\n }\n\n function toJSON () {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n\n function isValid$2 () {\n return isValid(this);\n }\n\n function parsingFlags () {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt () {\n return getParsingFlags(this).overflow;\n }\n\n function creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict\n };\n }\n\n // FORMATTING\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n\n function addWeekYearFormatToken (token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\n\n addWeekYearFormatToken('gggg', 'weekYear');\n addWeekYearFormatToken('ggggg', 'weekYear');\n addWeekYearFormatToken('GGGG', 'isoWeekYear');\n addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n // ALIASES\n\n addUnitAlias('weekYear', 'gg');\n addUnitAlias('isoWeekYear', 'GG');\n\n // PRIORITY\n\n addUnitPriority('weekYear', 1);\n addUnitPriority('isoWeekYear', 1);\n\n\n // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n\n addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n });\n\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n });\n\n // MOMENTS\n\n function getSetWeekYear (input) {\n return getSetWeekYearHelper.call(this,\n input,\n this.week(),\n this.weekday(),\n this.localeData()._week.dow,\n this.localeData()._week.doy);\n }\n\n function getSetISOWeekYear (input) {\n return getSetWeekYearHelper.call(this,\n input, this.isoWeek(), this.isoWeekday(), 1, 4);\n }\n\n function getISOWeeksInYear () {\n return weeksInYear(this.year(), 1, 4);\n }\n\n function getWeeksInYear () {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n\n function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n var weeksTarget;\n if (input == null) {\n return weekOfYear(this, dow, doy).year;\n } else {\n weeksTarget = weeksInYear(input, dow, doy);\n if (week > weeksTarget) {\n week = weeksTarget;\n }\n return setWeekAll.call(this, input, week, weekday, dow, doy);\n }\n }\n\n function setWeekAll(weekYear, week, weekday, dow, doy) {\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n this.year(date.getUTCFullYear());\n this.month(date.getUTCMonth());\n this.date(date.getUTCDate());\n return this;\n }\n\n // FORMATTING\n\n addFormatToken('Q', 0, 'Qo', 'quarter');\n\n // ALIASES\n\n addUnitAlias('quarter', 'Q');\n\n // PRIORITY\n\n addUnitPriority('quarter', 7);\n\n // PARSING\n\n addRegexToken('Q', match1);\n addParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n });\n\n // MOMENTS\n\n function getSetQuarter (input) {\n return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);\n }\n\n // FORMATTING\n\n addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n // ALIASES\n\n addUnitAlias('date', 'D');\n\n // PRIORITY\n addUnitPriority('date', 9);\n\n // PARSING\n\n addRegexToken('D', match1to2);\n addRegexToken('DD', match1to2, match2);\n addRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict ?\n (locale._dayOfMonthOrdinalParse || locale._ordinalParse) :\n locale._dayOfMonthOrdinalParseLenient;\n });\n\n addParseToken(['D', 'DD'], DATE);\n addParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0]);\n });\n\n // MOMENTS\n\n var getSetDayOfMonth = makeGetSet('Date', true);\n\n // FORMATTING\n\n addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n // ALIASES\n\n addUnitAlias('dayOfYear', 'DDD');\n\n // PRIORITY\n addUnitPriority('dayOfYear', 4);\n\n // PARSING\n\n addRegexToken('DDD', match1to3);\n addRegexToken('DDDD', match3);\n addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n });\n\n // HELPERS\n\n // MOMENTS\n\n function getSetDayOfYear (input) {\n var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;\n return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');\n }\n\n // FORMATTING\n\n addFormatToken('m', ['mm', 2], 0, 'minute');\n\n // ALIASES\n\n addUnitAlias('minute', 'm');\n\n // PRIORITY\n\n addUnitPriority('minute', 14);\n\n // PARSING\n\n addRegexToken('m', match1to2);\n addRegexToken('mm', match1to2, match2);\n addParseToken(['m', 'mm'], MINUTE);\n\n // MOMENTS\n\n var getSetMinute = makeGetSet('Minutes', false);\n\n // FORMATTING\n\n addFormatToken('s', ['ss', 2], 0, 'second');\n\n // ALIASES\n\n addUnitAlias('second', 's');\n\n // PRIORITY\n\n addUnitPriority('second', 15);\n\n // PARSING\n\n addRegexToken('s', match1to2);\n addRegexToken('ss', match1to2, match2);\n addParseToken(['s', 'ss'], SECOND);\n\n // MOMENTS\n\n var getSetSecond = makeGetSet('Seconds', false);\n\n // FORMATTING\n\n addFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n });\n\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\n\n addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n addFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n });\n addFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n });\n addFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n });\n addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n });\n addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n });\n addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n });\n\n\n // ALIASES\n\n addUnitAlias('millisecond', 'ms');\n\n // PRIORITY\n\n addUnitPriority('millisecond', 16);\n\n // PARSING\n\n addRegexToken('S', match1to3, match1);\n addRegexToken('SS', match1to3, match2);\n addRegexToken('SSS', match1to3, match3);\n\n var token;\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n }\n // MOMENTS\n\n var getSetMillisecond = makeGetSet('Milliseconds', false);\n\n // FORMATTING\n\n addFormatToken('z', 0, 0, 'zoneAbbr');\n addFormatToken('zz', 0, 0, 'zoneName');\n\n // MOMENTS\n\n function getZoneAbbr () {\n return this._isUTC ? 'UTC' : '';\n }\n\n function getZoneName () {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n\n var proto = Moment.prototype;\n\n proto.add = add;\n proto.calendar = calendar$1;\n proto.clone = clone;\n proto.diff = diff;\n proto.endOf = endOf;\n proto.format = format;\n proto.from = from;\n proto.fromNow = fromNow;\n proto.to = to;\n proto.toNow = toNow;\n proto.get = stringGet;\n proto.invalidAt = invalidAt;\n proto.isAfter = isAfter;\n proto.isBefore = isBefore;\n proto.isBetween = isBetween;\n proto.isSame = isSame;\n proto.isSameOrAfter = isSameOrAfter;\n proto.isSameOrBefore = isSameOrBefore;\n proto.isValid = isValid$2;\n proto.lang = lang;\n proto.locale = locale;\n proto.localeData = localeData;\n proto.max = prototypeMax;\n proto.min = prototypeMin;\n proto.parsingFlags = parsingFlags;\n proto.set = stringSet;\n proto.startOf = startOf;\n proto.subtract = subtract;\n proto.toArray = toArray;\n proto.toObject = toObject;\n proto.toDate = toDate;\n proto.toISOString = toISOString;\n proto.inspect = inspect;\n proto.toJSON = toJSON;\n proto.toString = toString;\n proto.unix = unix;\n proto.valueOf = valueOf;\n proto.creationData = creationData;\n proto.year = getSetYear;\n proto.isLeapYear = getIsLeapYear;\n proto.weekYear = getSetWeekYear;\n proto.isoWeekYear = getSetISOWeekYear;\n proto.quarter = proto.quarters = getSetQuarter;\n proto.month = getSetMonth;\n proto.daysInMonth = getDaysInMonth;\n proto.week = proto.weeks = getSetWeek;\n proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n proto.weeksInYear = getWeeksInYear;\n proto.isoWeeksInYear = getISOWeeksInYear;\n proto.date = getSetDayOfMonth;\n proto.day = proto.days = getSetDayOfWeek;\n proto.weekday = getSetLocaleDayOfWeek;\n proto.isoWeekday = getSetISODayOfWeek;\n proto.dayOfYear = getSetDayOfYear;\n proto.hour = proto.hours = getSetHour;\n proto.minute = proto.minutes = getSetMinute;\n proto.second = proto.seconds = getSetSecond;\n proto.millisecond = proto.milliseconds = getSetMillisecond;\n proto.utcOffset = getSetOffset;\n proto.utc = setOffsetToUTC;\n proto.local = setOffsetToLocal;\n proto.parseZone = setOffsetToParsedOffset;\n proto.hasAlignedHourOffset = hasAlignedHourOffset;\n proto.isDST = isDaylightSavingTime;\n proto.isLocal = isLocal;\n proto.isUtcOffset = isUtcOffset;\n proto.isUtc = isUtc;\n proto.isUTC = isUtc;\n proto.zoneAbbr = getZoneAbbr;\n proto.zoneName = getZoneName;\n proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\n proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\n proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear);\n proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);\n proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);\n\n function createUnix (input) {\n return createLocal(input * 1000);\n }\n\n function createInZone () {\n return createLocal.apply(null, arguments).parseZone();\n }\n\n function preParsePostFormat (string) {\n return string;\n }\n\n var proto$1 = Locale.prototype;\n\n proto$1.calendar = calendar;\n proto$1.longDateFormat = longDateFormat;\n proto$1.invalidDate = invalidDate;\n proto$1.ordinal = ordinal;\n proto$1.preparse = preParsePostFormat;\n proto$1.postformat = preParsePostFormat;\n proto$1.relativeTime = relativeTime;\n proto$1.pastFuture = pastFuture;\n proto$1.set = set;\n\n proto$1.months = localeMonths;\n proto$1.monthsShort = localeMonthsShort;\n proto$1.monthsParse = localeMonthsParse;\n proto$1.monthsRegex = monthsRegex;\n proto$1.monthsShortRegex = monthsShortRegex;\n proto$1.week = localeWeek;\n proto$1.firstDayOfYear = localeFirstDayOfYear;\n proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\n\n function get$1 (format, index, field, setter) {\n var locale = getLocale();\n var utc = createUTC().set(setter, index);\n return locale[field](utc, format);\n }\n\n function listMonthsImpl (format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\n\n var i;\n var out = [];\n for (i = 0; i < 12; i++) {\n out[i] = get$1(format, i, field, 'month');\n }\n return out;\n }\n\n // ()\n // (5)\n // (fmt, 5)\n // (fmt)\n // (true)\n // (true, 5)\n // (true, fmt, 5)\n // (true, fmt)\n function listWeekdaysImpl (localeSorted, format, index, field) {\n if (typeof localeSorted === 'boolean') {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n }\n\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0;\n\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n\n var i;\n var out = [];\n for (i = 0; i < 7; i++) {\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\n }\n return out;\n }\n\n function listMonths (format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n\n function listMonthsShort (format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n\n function listWeekdays (localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n\n function listWeekdaysShort (localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n\n function listWeekdaysMin (localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n\n getSetGlobalLocale('en', {\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal : function (number) {\n var b = number % 10,\n output = (toInt(number % 100 / 10) === 1) ? 'th' :\n (b === 1) ? 'st' :\n (b === 2) ? 'nd' :\n (b === 3) ? 'rd' : 'th';\n return number + output;\n }\n });\n\n // Side effect imports\n\n hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);\n hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);\n\n var mathAbs = Math.abs;\n\n function abs () {\n var data = this._data;\n\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n\n return this;\n }\n\n function addSubtract$1 (duration, input, value, direction) {\n var other = createDuration(input, value);\n\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n\n return duration._bubble();\n }\n\n // supports only 2.0-style add(1, 's') or add(duration)\n function add$1 (input, value) {\n return addSubtract$1(this, input, value, 1);\n }\n\n // supports only 2.0-style subtract(1, 's') or subtract(duration)\n function subtract$1 (input, value) {\n return addSubtract$1(this, input, value, -1);\n }\n\n function absCeil (number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n }\n\n function bubble () {\n var milliseconds = this._milliseconds;\n var days = this._days;\n var months = this._months;\n var data = this._data;\n var seconds, minutes, hours, years, monthsFromDays;\n\n // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||\n (milliseconds <= 0 && days <= 0 && months <= 0))) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n }\n\n // The following code bubbles up values, see the tests for\n // examples of what that means.\n data.milliseconds = milliseconds % 1000;\n\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n\n days += absFloor(hours / 24);\n\n // convert days to months\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays));\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n data.days = days;\n data.months = months;\n data.years = years;\n\n return this;\n }\n\n function daysToMonths (days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return days * 4800 / 146097;\n }\n\n function monthsToDays (months) {\n // the reverse of daysToMonths\n return months * 146097 / 4800;\n }\n\n function as (units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days;\n var months;\n var milliseconds = this._milliseconds;\n\n units = normalizeUnits(units);\n\n if (units === 'month' || units === 'quarter' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n switch (units) {\n case 'month': return months;\n case 'quarter': return months / 3;\n case 'year': return months / 12;\n }\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n switch (units) {\n case 'week' : return days / 7 + milliseconds / 6048e5;\n case 'day' : return days + milliseconds / 864e5;\n case 'hour' : return days * 24 + milliseconds / 36e5;\n case 'minute' : return days * 1440 + milliseconds / 6e4;\n case 'second' : return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n case 'millisecond': return Math.floor(days * 864e5) + milliseconds;\n default: throw new Error('Unknown unit ' + units);\n }\n }\n }\n\n // TODO: Use this.as('ms')?\n function valueOf$1 () {\n if (!this.isValid()) {\n return NaN;\n }\n return (\n this._milliseconds +\n this._days * 864e5 +\n (this._months % 12) * 2592e6 +\n toInt(this._months / 12) * 31536e6\n );\n }\n\n function makeAs (alias) {\n return function () {\n return this.as(alias);\n };\n }\n\n var asMilliseconds = makeAs('ms');\n var asSeconds = makeAs('s');\n var asMinutes = makeAs('m');\n var asHours = makeAs('h');\n var asDays = makeAs('d');\n var asWeeks = makeAs('w');\n var asMonths = makeAs('M');\n var asQuarters = makeAs('Q');\n var asYears = makeAs('y');\n\n function clone$1 () {\n return createDuration(this);\n }\n\n function get$2 (units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\n }\n\n var milliseconds = makeGetter('milliseconds');\n var seconds = makeGetter('seconds');\n var minutes = makeGetter('minutes');\n var hours = makeGetter('hours');\n var days = makeGetter('days');\n var months = makeGetter('months');\n var years = makeGetter('years');\n\n function weeks () {\n return absFloor(this.days() / 7);\n }\n\n var round = Math.round;\n var thresholds = {\n ss: 44, // a few seconds to seconds\n s : 45, // seconds to minute\n m : 45, // minutes to hour\n h : 22, // hours to day\n d : 26, // days to month\n M : 11 // months to year\n };\n\n // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n }\n\n function relativeTime$1 (posNegDuration, withoutSuffix, locale) {\n var duration = createDuration(posNegDuration).abs();\n var seconds = round(duration.as('s'));\n var minutes = round(duration.as('m'));\n var hours = round(duration.as('h'));\n var days = round(duration.as('d'));\n var months = round(duration.as('M'));\n var years = round(duration.as('y'));\n\n var a = seconds <= thresholds.ss && ['s', seconds] ||\n seconds < thresholds.s && ['ss', seconds] ||\n minutes <= 1 && ['m'] ||\n minutes < thresholds.m && ['mm', minutes] ||\n hours <= 1 && ['h'] ||\n hours < thresholds.h && ['hh', hours] ||\n days <= 1 && ['d'] ||\n days < thresholds.d && ['dd', days] ||\n months <= 1 && ['M'] ||\n months < thresholds.M && ['MM', months] ||\n years <= 1 && ['y'] || ['yy', years];\n\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n }\n\n // This function allows you to set the rounding function for relative time strings\n function getSetRelativeTimeRounding (roundingFunction) {\n if (roundingFunction === undefined) {\n return round;\n }\n if (typeof(roundingFunction) === 'function') {\n round = roundingFunction;\n return true;\n }\n return false;\n }\n\n // This function allows you to set a threshold for relative time strings\n function getSetRelativeTimeThreshold (threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n if (limit === undefined) {\n return thresholds[threshold];\n }\n thresholds[threshold] = limit;\n if (threshold === 's') {\n thresholds.ss = limit - 1;\n }\n return true;\n }\n\n function humanize (withSuffix) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var locale = this.localeData();\n var output = relativeTime$1(this, !withSuffix, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n }\n\n var abs$1 = Math.abs;\n\n function sign(x) {\n return ((x > 0) - (x < 0)) || +x;\n }\n\n function toISOString$1() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var seconds = abs$1(this._milliseconds) / 1000;\n var days = abs$1(this._days);\n var months = abs$1(this._months);\n var minutes, hours, years;\n\n // 3600 seconds -> 60 minutes -> 1 hour\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60;\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n var Y = years;\n var M = months;\n var D = days;\n var h = hours;\n var m = minutes;\n var s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n var total = this.asSeconds();\n\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n }\n\n var totalSign = total < 0 ? '-' : '';\n var ymSign = sign(this._months) !== sign(total) ? '-' : '';\n var daysSign = sign(this._days) !== sign(total) ? '-' : '';\n var hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n return totalSign + 'P' +\n (Y ? ymSign + Y + 'Y' : '') +\n (M ? ymSign + M + 'M' : '') +\n (D ? daysSign + D + 'D' : '') +\n ((h || m || s) ? 'T' : '') +\n (h ? hmsSign + h + 'H' : '') +\n (m ? hmsSign + m + 'M' : '') +\n (s ? hmsSign + s + 'S' : '');\n }\n\n var proto$2 = Duration.prototype;\n\n proto$2.isValid = isValid$1;\n proto$2.abs = abs;\n proto$2.add = add$1;\n proto$2.subtract = subtract$1;\n proto$2.as = as;\n proto$2.asMilliseconds = asMilliseconds;\n proto$2.asSeconds = asSeconds;\n proto$2.asMinutes = asMinutes;\n proto$2.asHours = asHours;\n proto$2.asDays = asDays;\n proto$2.asWeeks = asWeeks;\n proto$2.asMonths = asMonths;\n proto$2.asQuarters = asQuarters;\n proto$2.asYears = asYears;\n proto$2.valueOf = valueOf$1;\n proto$2._bubble = bubble;\n proto$2.clone = clone$1;\n proto$2.get = get$2;\n proto$2.milliseconds = milliseconds;\n proto$2.seconds = seconds;\n proto$2.minutes = minutes;\n proto$2.hours = hours;\n proto$2.days = days;\n proto$2.weeks = weeks;\n proto$2.months = months;\n proto$2.years = years;\n proto$2.humanize = humanize;\n proto$2.toISOString = toISOString$1;\n proto$2.toString = toISOString$1;\n proto$2.toJSON = toISOString$1;\n proto$2.locale = locale;\n proto$2.localeData = localeData;\n\n proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);\n proto$2.lang = lang;\n\n // Side effect imports\n\n // FORMATTING\n\n addFormatToken('X', 0, 0, 'unix');\n addFormatToken('x', 0, 0, 'valueOf');\n\n // PARSING\n\n addRegexToken('x', matchSigned);\n addRegexToken('X', matchTimestamp);\n addParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input, 10) * 1000);\n });\n addParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n });\n\n // Side effect imports\n\n\n hooks.version = '2.24.0';\n\n setHookCallback(createLocal);\n\n hooks.fn = proto;\n hooks.min = min;\n hooks.max = max;\n hooks.now = now;\n hooks.utc = createUTC;\n hooks.unix = createUnix;\n hooks.months = listMonths;\n hooks.isDate = isDate;\n hooks.locale = getSetGlobalLocale;\n hooks.invalid = createInvalid;\n hooks.duration = createDuration;\n hooks.isMoment = isMoment;\n hooks.weekdays = listWeekdays;\n hooks.parseZone = createInZone;\n hooks.localeData = getLocale;\n hooks.isDuration = isDuration;\n hooks.monthsShort = listMonthsShort;\n hooks.weekdaysMin = listWeekdaysMin;\n hooks.defineLocale = defineLocale;\n hooks.updateLocale = updateLocale;\n hooks.locales = listLocales;\n hooks.weekdaysShort = listWeekdaysShort;\n hooks.normalizeUnits = normalizeUnits;\n hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n hooks.calendarFormat = getCalendarFormat;\n hooks.prototype = proto;\n\n // currently HTML5 input type only supports 24-hour formats\n hooks.HTML5_FMT = {\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // \n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // \n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // \n DATE: 'YYYY-MM-DD', // \n TIME: 'HH:mm', // \n TIME_SECONDS: 'HH:mm:ss', // \n TIME_MS: 'HH:mm:ss.SSS', // \n WEEK: 'GGGG-[W]WW', // \n MONTH: 'YYYY-MM' // \n };\n\n return hooks;\n\n})));\n","/*global define:false */\n/**\n * Copyright 2012-2017 Craig Campbell\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * Mousetrap is a simple keyboard shortcut library for Javascript with\n * no external dependencies\n *\n * @version 1.6.5\n * @url craig.is/killing/mice\n */\n(function(window, document, undefined) {\n\n // Check if mousetrap is used inside browser, if not, return\n if (!window) {\n return;\n }\n\n /**\n * mapping of special keycodes to their corresponding keys\n *\n * everything in this dictionary cannot use keypress events\n * so it has to be here to map to the correct keycodes for\n * keyup/keydown events\n *\n * @type {Object}\n */\n var _MAP = {\n 8: 'backspace',\n 9: 'tab',\n 13: 'enter',\n 16: 'shift',\n 17: 'ctrl',\n 18: 'alt',\n 20: 'capslock',\n 27: 'esc',\n 32: 'space',\n 33: 'pageup',\n 34: 'pagedown',\n 35: 'end',\n 36: 'home',\n 37: 'left',\n 38: 'up',\n 39: 'right',\n 40: 'down',\n 45: 'ins',\n 46: 'del',\n 91: 'meta',\n 93: 'meta',\n 224: 'meta'\n };\n\n /**\n * mapping for special characters so they can support\n *\n * this dictionary is only used incase you want to bind a\n * keyup or keydown event to one of these keys\n *\n * @type {Object}\n */\n var _KEYCODE_MAP = {\n 106: '*',\n 107: '+',\n 109: '-',\n 110: '.',\n 111 : '/',\n 186: ';',\n 187: '=',\n 188: ',',\n 189: '-',\n 190: '.',\n 191: '/',\n 192: '`',\n 219: '[',\n 220: '\\\\',\n 221: ']',\n 222: '\\''\n };\n\n /**\n * this is a mapping of keys that require shift on a US keypad\n * back to the non shift equivelents\n *\n * this is so you can use keyup events with these keys\n *\n * note that this will only work reliably on US keyboards\n *\n * @type {Object}\n */\n var _SHIFT_MAP = {\n '~': '`',\n '!': '1',\n '@': '2',\n '#': '3',\n '$': '4',\n '%': '5',\n '^': '6',\n '&': '7',\n '*': '8',\n '(': '9',\n ')': '0',\n '_': '-',\n '+': '=',\n ':': ';',\n '\\\"': '\\'',\n '<': ',',\n '>': '.',\n '?': '/',\n '|': '\\\\'\n };\n\n /**\n * this is a list of special strings you can use to map\n * to modifier keys when you specify your keyboard shortcuts\n *\n * @type {Object}\n */\n var _SPECIAL_ALIASES = {\n 'option': 'alt',\n 'command': 'meta',\n 'return': 'enter',\n 'escape': 'esc',\n 'plus': '+',\n 'mod': /Mac|iPod|iPhone|iPad/.test(navigator.platform) ? 'meta' : 'ctrl'\n };\n\n /**\n * variable to store the flipped version of _MAP from above\n * needed to check if we should use keypress or not when no action\n * is specified\n *\n * @type {Object|undefined}\n */\n var _REVERSE_MAP;\n\n /**\n * loop through the f keys, f1 to f19 and add them to the map\n * programatically\n */\n for (var i = 1; i < 20; ++i) {\n _MAP[111 + i] = 'f' + i;\n }\n\n /**\n * loop through to map numbers on the numeric keypad\n */\n for (i = 0; i <= 9; ++i) {\n\n // This needs to use a string cause otherwise since 0 is falsey\n // mousetrap will never fire for numpad 0 pressed as part of a keydown\n // event.\n //\n // @see https://github.com/ccampbell/mousetrap/pull/258\n _MAP[i + 96] = i.toString();\n }\n\n /**\n * cross browser add event method\n *\n * @param {Element|HTMLDocument} object\n * @param {string} type\n * @param {Function} callback\n * @returns void\n */\n function _addEvent(object, type, callback) {\n if (object.addEventListener) {\n object.addEventListener(type, callback, false);\n return;\n }\n\n object.attachEvent('on' + type, callback);\n }\n\n /**\n * takes the event and returns the key character\n *\n * @param {Event} e\n * @return {string}\n */\n function _characterFromEvent(e) {\n\n // for keypress events we should return the character as is\n if (e.type == 'keypress') {\n var character = String.fromCharCode(e.which);\n\n // if the shift key is not pressed then it is safe to assume\n // that we want the character to be lowercase. this means if\n // you accidentally have caps lock on then your key bindings\n // will continue to work\n //\n // the only side effect that might not be desired is if you\n // bind something like 'A' cause you want to trigger an\n // event when capital A is pressed caps lock will no longer\n // trigger the event. shift+a will though.\n if (!e.shiftKey) {\n character = character.toLowerCase();\n }\n\n return character;\n }\n\n // for non keypress events the special maps are needed\n if (_MAP[e.which]) {\n return _MAP[e.which];\n }\n\n if (_KEYCODE_MAP[e.which]) {\n return _KEYCODE_MAP[e.which];\n }\n\n // if it is not in the special map\n\n // with keydown and keyup events the character seems to always\n // come in as an uppercase character whether you are pressing shift\n // or not. we should make sure it is always lowercase for comparisons\n return String.fromCharCode(e.which).toLowerCase();\n }\n\n /**\n * checks if two arrays are equal\n *\n * @param {Array} modifiers1\n * @param {Array} modifiers2\n * @returns {boolean}\n */\n function _modifiersMatch(modifiers1, modifiers2) {\n return modifiers1.sort().join(',') === modifiers2.sort().join(',');\n }\n\n /**\n * takes a key event and figures out what the modifiers are\n *\n * @param {Event} e\n * @returns {Array}\n */\n function _eventModifiers(e) {\n var modifiers = [];\n\n if (e.shiftKey) {\n modifiers.push('shift');\n }\n\n if (e.altKey) {\n modifiers.push('alt');\n }\n\n if (e.ctrlKey) {\n modifiers.push('ctrl');\n }\n\n if (e.metaKey) {\n modifiers.push('meta');\n }\n\n return modifiers;\n }\n\n /**\n * prevents default for this event\n *\n * @param {Event} e\n * @returns void\n */\n function _preventDefault(e) {\n if (e.preventDefault) {\n e.preventDefault();\n return;\n }\n\n e.returnValue = false;\n }\n\n /**\n * stops propogation for this event\n *\n * @param {Event} e\n * @returns void\n */\n function _stopPropagation(e) {\n if (e.stopPropagation) {\n e.stopPropagation();\n return;\n }\n\n e.cancelBubble = true;\n }\n\n /**\n * determines if the keycode specified is a modifier key or not\n *\n * @param {string} key\n * @returns {boolean}\n */\n function _isModifier(key) {\n return key == 'shift' || key == 'ctrl' || key == 'alt' || key == 'meta';\n }\n\n /**\n * reverses the map lookup so that we can look for specific keys\n * to see what can and can't use keypress\n *\n * @return {Object}\n */\n function _getReverseMap() {\n if (!_REVERSE_MAP) {\n _REVERSE_MAP = {};\n for (var key in _MAP) {\n\n // pull out the numeric keypad from here cause keypress should\n // be able to detect the keys from the character\n if (key > 95 && key < 112) {\n continue;\n }\n\n if (_MAP.hasOwnProperty(key)) {\n _REVERSE_MAP[_MAP[key]] = key;\n }\n }\n }\n return _REVERSE_MAP;\n }\n\n /**\n * picks the best action based on the key combination\n *\n * @param {string} key - character for key\n * @param {Array} modifiers\n * @param {string=} action passed in\n */\n function _pickBestAction(key, modifiers, action) {\n\n // if no action was picked in we should try to pick the one\n // that we think would work best for this key\n if (!action) {\n action = _getReverseMap()[key] ? 'keydown' : 'keypress';\n }\n\n // modifier keys don't work as expected with keypress,\n // switch to keydown\n if (action == 'keypress' && modifiers.length) {\n action = 'keydown';\n }\n\n return action;\n }\n\n /**\n * Converts from a string key combination to an array\n *\n * @param {string} combination like \"command+shift+l\"\n * @return {Array}\n */\n function _keysFromString(combination) {\n if (combination === '+') {\n return ['+'];\n }\n\n combination = combination.replace(/\\+{2}/g, '+plus');\n return combination.split('+');\n }\n\n /**\n * Gets info for a specific key combination\n *\n * @param {string} combination key combination (\"command+s\" or \"a\" or \"*\")\n * @param {string=} action\n * @returns {Object}\n */\n function _getKeyInfo(combination, action) {\n var keys;\n var key;\n var i;\n var modifiers = [];\n\n // take the keys from this pattern and figure out what the actual\n // pattern is all about\n keys = _keysFromString(combination);\n\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n\n // normalize key names\n if (_SPECIAL_ALIASES[key]) {\n key = _SPECIAL_ALIASES[key];\n }\n\n // if this is not a keypress event then we should\n // be smart about using shift keys\n // this will only work for US keyboards however\n if (action && action != 'keypress' && _SHIFT_MAP[key]) {\n key = _SHIFT_MAP[key];\n modifiers.push('shift');\n }\n\n // if this key is a modifier then add it to the list of modifiers\n if (_isModifier(key)) {\n modifiers.push(key);\n }\n }\n\n // depending on what the key combination is\n // we will try to pick the best event for it\n action = _pickBestAction(key, modifiers, action);\n\n return {\n key: key,\n modifiers: modifiers,\n action: action\n };\n }\n\n function _belongsTo(element, ancestor) {\n if (element === null || element === document) {\n return false;\n }\n\n if (element === ancestor) {\n return true;\n }\n\n return _belongsTo(element.parentNode, ancestor);\n }\n\n function Mousetrap(targetElement) {\n var self = this;\n\n targetElement = targetElement || document;\n\n if (!(self instanceof Mousetrap)) {\n return new Mousetrap(targetElement);\n }\n\n /**\n * element to attach key events to\n *\n * @type {Element}\n */\n self.target = targetElement;\n\n /**\n * a list of all the callbacks setup via Mousetrap.bind()\n *\n * @type {Object}\n */\n self._callbacks = {};\n\n /**\n * direct map of string combinations to callbacks used for trigger()\n *\n * @type {Object}\n */\n self._directMap = {};\n\n /**\n * keeps track of what level each sequence is at since multiple\n * sequences can start out with the same sequence\n *\n * @type {Object}\n */\n var _sequenceLevels = {};\n\n /**\n * variable to store the setTimeout call\n *\n * @type {null|number}\n */\n var _resetTimer;\n\n /**\n * temporary state where we will ignore the next keyup\n *\n * @type {boolean|string}\n */\n var _ignoreNextKeyup = false;\n\n /**\n * temporary state where we will ignore the next keypress\n *\n * @type {boolean}\n */\n var _ignoreNextKeypress = false;\n\n /**\n * are we currently inside of a sequence?\n * type of action (\"keyup\" or \"keydown\" or \"keypress\") or false\n *\n * @type {boolean|string}\n */\n var _nextExpectedAction = false;\n\n /**\n * resets all sequence counters except for the ones passed in\n *\n * @param {Object} doNotReset\n * @returns void\n */\n function _resetSequences(doNotReset) {\n doNotReset = doNotReset || {};\n\n var activeSequences = false,\n key;\n\n for (key in _sequenceLevels) {\n if (doNotReset[key]) {\n activeSequences = true;\n continue;\n }\n _sequenceLevels[key] = 0;\n }\n\n if (!activeSequences) {\n _nextExpectedAction = false;\n }\n }\n\n /**\n * finds all callbacks that match based on the keycode, modifiers,\n * and action\n *\n * @param {string} character\n * @param {Array} modifiers\n * @param {Event|Object} e\n * @param {string=} sequenceName - name of the sequence we are looking for\n * @param {string=} combination\n * @param {number=} level\n * @returns {Array}\n */\n function _getMatches(character, modifiers, e, sequenceName, combination, level) {\n var i;\n var callback;\n var matches = [];\n var action = e.type;\n\n // if there are no events related to this keycode\n if (!self._callbacks[character]) {\n return [];\n }\n\n // if a modifier key is coming up on its own we should allow it\n if (action == 'keyup' && _isModifier(character)) {\n modifiers = [character];\n }\n\n // loop through all callbacks for the key that was pressed\n // and see if any of them match\n for (i = 0; i < self._callbacks[character].length; ++i) {\n callback = self._callbacks[character][i];\n\n // if a sequence name is not specified, but this is a sequence at\n // the wrong level then move onto the next match\n if (!sequenceName && callback.seq && _sequenceLevels[callback.seq] != callback.level) {\n continue;\n }\n\n // if the action we are looking for doesn't match the action we got\n // then we should keep going\n if (action != callback.action) {\n continue;\n }\n\n // if this is a keypress event and the meta key and control key\n // are not pressed that means that we need to only look at the\n // character, otherwise check the modifiers as well\n //\n // chrome will not fire a keypress if meta or control is down\n // safari will fire a keypress if meta or meta+shift is down\n // firefox will fire a keypress if meta or control is down\n if ((action == 'keypress' && !e.metaKey && !e.ctrlKey) || _modifiersMatch(modifiers, callback.modifiers)) {\n\n // when you bind a combination or sequence a second time it\n // should overwrite the first one. if a sequenceName or\n // combination is specified in this call it does just that\n //\n // @todo make deleting its own method?\n var deleteCombo = !sequenceName && callback.combo == combination;\n var deleteSequence = sequenceName && callback.seq == sequenceName && callback.level == level;\n if (deleteCombo || deleteSequence) {\n self._callbacks[character].splice(i, 1);\n }\n\n matches.push(callback);\n }\n }\n\n return matches;\n }\n\n /**\n * actually calls the callback function\n *\n * if your callback function returns false this will use the jquery\n * convention - prevent default and stop propogation on the event\n *\n * @param {Function} callback\n * @param {Event} e\n * @returns void\n */\n function _fireCallback(callback, e, combo, sequence) {\n\n // if this event should not happen stop here\n if (self.stopCallback(e, e.target || e.srcElement, combo, sequence)) {\n return;\n }\n\n if (callback(e, combo) === false) {\n _preventDefault(e);\n _stopPropagation(e);\n }\n }\n\n /**\n * handles a character key event\n *\n * @param {string} character\n * @param {Array} modifiers\n * @param {Event} e\n * @returns void\n */\n self._handleKey = function(character, modifiers, e) {\n var callbacks = _getMatches(character, modifiers, e);\n var i;\n var doNotReset = {};\n var maxLevel = 0;\n var processedSequenceCallback = false;\n\n // Calculate the maxLevel for sequences so we can only execute the longest callback sequence\n for (i = 0; i < callbacks.length; ++i) {\n if (callbacks[i].seq) {\n maxLevel = Math.max(maxLevel, callbacks[i].level);\n }\n }\n\n // loop through matching callbacks for this key event\n for (i = 0; i < callbacks.length; ++i) {\n\n // fire for all sequence callbacks\n // this is because if for example you have multiple sequences\n // bound such as \"g i\" and \"g t\" they both need to fire the\n // callback for matching g cause otherwise you can only ever\n // match the first one\n if (callbacks[i].seq) {\n\n // only fire callbacks for the maxLevel to prevent\n // subsequences from also firing\n //\n // for example 'a option b' should not cause 'option b' to fire\n // even though 'option b' is part of the other sequence\n //\n // any sequences that do not match here will be discarded\n // below by the _resetSequences call\n if (callbacks[i].level != maxLevel) {\n continue;\n }\n\n processedSequenceCallback = true;\n\n // keep a list of which sequences were matches for later\n doNotReset[callbacks[i].seq] = 1;\n _fireCallback(callbacks[i].callback, e, callbacks[i].combo, callbacks[i].seq);\n continue;\n }\n\n // if there were no sequence matches but we are still here\n // that means this is a regular match so we should fire that\n if (!processedSequenceCallback) {\n _fireCallback(callbacks[i].callback, e, callbacks[i].combo);\n }\n }\n\n // if the key you pressed matches the type of sequence without\n // being a modifier (ie \"keyup\" or \"keypress\") then we should\n // reset all sequences that were not matched by this event\n //\n // this is so, for example, if you have the sequence \"h a t\" and you\n // type \"h e a r t\" it does not match. in this case the \"e\" will\n // cause the sequence to reset\n //\n // modifier keys are ignored because you can have a sequence\n // that contains modifiers such as \"enter ctrl+space\" and in most\n // cases the modifier key will be pressed before the next key\n //\n // also if you have a sequence such as \"ctrl+b a\" then pressing the\n // \"b\" key will trigger a \"keypress\" and a \"keydown\"\n //\n // the \"keydown\" is expected when there is a modifier, but the\n // \"keypress\" ends up matching the _nextExpectedAction since it occurs\n // after and that causes the sequence to reset\n //\n // we ignore keypresses in a sequence that directly follow a keydown\n // for the same character\n var ignoreThisKeypress = e.type == 'keypress' && _ignoreNextKeypress;\n if (e.type == _nextExpectedAction && !_isModifier(character) && !ignoreThisKeypress) {\n _resetSequences(doNotReset);\n }\n\n _ignoreNextKeypress = processedSequenceCallback && e.type == 'keydown';\n };\n\n /**\n * handles a keydown event\n *\n * @param {Event} e\n * @returns void\n */\n function _handleKeyEvent(e) {\n\n // normalize e.which for key events\n // @see http://stackoverflow.com/questions/4285627/javascript-keycode-vs-charcode-utter-confusion\n if (typeof e.which !== 'number') {\n e.which = e.keyCode;\n }\n\n var character = _characterFromEvent(e);\n\n // no character found then stop\n if (!character) {\n return;\n }\n\n // need to use === for the character check because the character can be 0\n if (e.type == 'keyup' && _ignoreNextKeyup === character) {\n _ignoreNextKeyup = false;\n return;\n }\n\n self.handleKey(character, _eventModifiers(e), e);\n }\n\n /**\n * called to set a 1 second timeout on the specified sequence\n *\n * this is so after each key press in the sequence you have 1 second\n * to press the next key before you have to start over\n *\n * @returns void\n */\n function _resetSequenceTimer() {\n clearTimeout(_resetTimer);\n _resetTimer = setTimeout(_resetSequences, 1000);\n }\n\n /**\n * binds a key sequence to an event\n *\n * @param {string} combo - combo specified in bind call\n * @param {Array} keys\n * @param {Function} callback\n * @param {string=} action\n * @returns void\n */\n function _bindSequence(combo, keys, callback, action) {\n\n // start off by adding a sequence level record for this combination\n // and setting the level to 0\n _sequenceLevels[combo] = 0;\n\n /**\n * callback to increase the sequence level for this sequence and reset\n * all other sequences that were active\n *\n * @param {string} nextAction\n * @returns {Function}\n */\n function _increaseSequence(nextAction) {\n return function() {\n _nextExpectedAction = nextAction;\n ++_sequenceLevels[combo];\n _resetSequenceTimer();\n };\n }\n\n /**\n * wraps the specified callback inside of another function in order\n * to reset all sequence counters as soon as this sequence is done\n *\n * @param {Event} e\n * @returns void\n */\n function _callbackAndReset(e) {\n _fireCallback(callback, e, combo);\n\n // we should ignore the next key up if the action is key down\n // or keypress. this is so if you finish a sequence and\n // release the key the final key will not trigger a keyup\n if (action !== 'keyup') {\n _ignoreNextKeyup = _characterFromEvent(e);\n }\n\n // weird race condition if a sequence ends with the key\n // another sequence begins with\n setTimeout(_resetSequences, 10);\n }\n\n // loop through keys one at a time and bind the appropriate callback\n // function. for any key leading up to the final one it should\n // increase the sequence. after the final, it should reset all sequences\n //\n // if an action is specified in the original bind call then that will\n // be used throughout. otherwise we will pass the action that the\n // next key in the sequence should match. this allows a sequence\n // to mix and match keypress and keydown events depending on which\n // ones are better suited to the key provided\n for (var i = 0; i < keys.length; ++i) {\n var isFinal = i + 1 === keys.length;\n var wrappedCallback = isFinal ? _callbackAndReset : _increaseSequence(action || _getKeyInfo(keys[i + 1]).action);\n _bindSingle(keys[i], wrappedCallback, action, combo, i);\n }\n }\n\n /**\n * binds a single keyboard combination\n *\n * @param {string} combination\n * @param {Function} callback\n * @param {string=} action\n * @param {string=} sequenceName - name of sequence if part of sequence\n * @param {number=} level - what part of the sequence the command is\n * @returns void\n */\n function _bindSingle(combination, callback, action, sequenceName, level) {\n\n // store a direct mapped reference for use with Mousetrap.trigger\n self._directMap[combination + ':' + action] = callback;\n\n // make sure multiple spaces in a row become a single space\n combination = combination.replace(/\\s+/g, ' ');\n\n var sequence = combination.split(' ');\n var info;\n\n // if this pattern is a sequence of keys then run through this method\n // to reprocess each pattern one key at a time\n if (sequence.length > 1) {\n _bindSequence(combination, sequence, callback, action);\n return;\n }\n\n info = _getKeyInfo(combination, action);\n\n // make sure to initialize array if this is the first time\n // a callback is added for this key\n self._callbacks[info.key] = self._callbacks[info.key] || [];\n\n // remove an existing match if there is one\n _getMatches(info.key, info.modifiers, {type: info.action}, sequenceName, combination, level);\n\n // add this call back to the array\n // if it is a sequence put it at the beginning\n // if not put it at the end\n //\n // this is important because the way these are processed expects\n // the sequence ones to come first\n self._callbacks[info.key][sequenceName ? 'unshift' : 'push']({\n callback: callback,\n modifiers: info.modifiers,\n action: info.action,\n seq: sequenceName,\n level: level,\n combo: combination\n });\n }\n\n /**\n * binds multiple combinations to the same callback\n *\n * @param {Array} combinations\n * @param {Function} callback\n * @param {string|undefined} action\n * @returns void\n */\n self._bindMultiple = function(combinations, callback, action) {\n for (var i = 0; i < combinations.length; ++i) {\n _bindSingle(combinations[i], callback, action);\n }\n };\n\n // start!\n _addEvent(targetElement, 'keypress', _handleKeyEvent);\n _addEvent(targetElement, 'keydown', _handleKeyEvent);\n _addEvent(targetElement, 'keyup', _handleKeyEvent);\n }\n\n /**\n * binds an event to mousetrap\n *\n * can be a single key, a combination of keys separated with +,\n * an array of keys, or a sequence of keys separated by spaces\n *\n * be sure to list the modifier keys first to make sure that the\n * correct key ends up getting bound (the last key in the pattern)\n *\n * @param {string|Array} keys\n * @param {Function} callback\n * @param {string=} action - 'keypress', 'keydown', or 'keyup'\n * @returns void\n */\n Mousetrap.prototype.bind = function(keys, callback, action) {\n var self = this;\n keys = keys instanceof Array ? keys : [keys];\n self._bindMultiple.call(self, keys, callback, action);\n return self;\n };\n\n /**\n * unbinds an event to mousetrap\n *\n * the unbinding sets the callback function of the specified key combo\n * to an empty function and deletes the corresponding key in the\n * _directMap dict.\n *\n * TODO: actually remove this from the _callbacks dictionary instead\n * of binding an empty function\n *\n * the keycombo+action has to be exactly the same as\n * it was defined in the bind method\n *\n * @param {string|Array} keys\n * @param {string} action\n * @returns void\n */\n Mousetrap.prototype.unbind = function(keys, action) {\n var self = this;\n return self.bind.call(self, keys, function() {}, action);\n };\n\n /**\n * triggers an event that has already been bound\n *\n * @param {string} keys\n * @param {string=} action\n * @returns void\n */\n Mousetrap.prototype.trigger = function(keys, action) {\n var self = this;\n if (self._directMap[keys + ':' + action]) {\n self._directMap[keys + ':' + action]({}, keys);\n }\n return self;\n };\n\n /**\n * resets the library back to its initial state. this is useful\n * if you want to clear out the current keyboard shortcuts and bind\n * new ones - for example if you switch to another page\n *\n * @returns void\n */\n Mousetrap.prototype.reset = function() {\n var self = this;\n self._callbacks = {};\n self._directMap = {};\n return self;\n };\n\n /**\n * should we stop this event before firing off callbacks\n *\n * @param {Event} e\n * @param {Element} element\n * @return {boolean}\n */\n Mousetrap.prototype.stopCallback = function(e, element) {\n var self = this;\n\n // if the element has the class \"mousetrap\" then no need to stop\n if ((' ' + element.className + ' ').indexOf(' mousetrap ') > -1) {\n return false;\n }\n\n if (_belongsTo(element, self.target)) {\n return false;\n }\n\n // Events originating from a shadow DOM are re-targetted and `e.target` is the shadow host,\n // not the initial event target in the shadow tree. Note that not all events cross the\n // shadow boundary.\n // For shadow trees with `mode: 'open'`, the initial event target is the first element in\n // the event’s composed path. For shadow trees with `mode: 'closed'`, the initial event\n // target cannot be obtained.\n if ('composedPath' in e && typeof e.composedPath === 'function') {\n // For open shadow trees, update `element` so that the following check works.\n var initialEventTarget = e.composedPath()[0];\n if (initialEventTarget !== e.target) {\n element = initialEventTarget;\n }\n }\n\n // stop for input, select, and textarea\n return element.tagName == 'INPUT' || element.tagName == 'SELECT' || element.tagName == 'TEXTAREA' || element.isContentEditable;\n };\n\n /**\n * exposes _handleKey publicly so it can be overwritten by extensions\n */\n Mousetrap.prototype.handleKey = function() {\n var self = this;\n return self._handleKey.apply(self, arguments);\n };\n\n /**\n * allow custom key mappings\n */\n Mousetrap.addKeycodes = function(object) {\n for (var key in object) {\n if (object.hasOwnProperty(key)) {\n _MAP[key] = object[key];\n }\n }\n _REVERSE_MAP = null;\n };\n\n /**\n * Init the global mousetrap functions\n *\n * This method is needed to allow the global mousetrap functions to work\n * now that mousetrap is a constructor function.\n */\n Mousetrap.init = function() {\n var documentMousetrap = Mousetrap(document);\n for (var method in documentMousetrap) {\n if (method.charAt(0) !== '_') {\n Mousetrap[method] = (function(method) {\n return function() {\n return documentMousetrap[method].apply(documentMousetrap, arguments);\n };\n } (method));\n }\n }\n };\n\n Mousetrap.init();\n\n // expose mousetrap to the global object\n window.Mousetrap = Mousetrap;\n\n // expose as a common js module\n if (typeof module !== 'undefined' && module.exports) {\n module.exports = Mousetrap;\n }\n\n // expose mousetrap as an AMD module\n if (typeof define === 'function' && define.amd) {\n define(function() {\n return Mousetrap;\n });\n }\n}) (typeof window !== 'undefined' ? window : null, typeof window !== 'undefined' ? document : null);\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","!function(e){var t;\"object\"==typeof exports?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(\"undefined\"!=typeof window?t=window:\"undefined\"!=typeof global?t=global:\"undefined\"!=typeof self&&(t=self),t.objectHash=e())}(function(){return function o(i,u,a){function s(n,e){if(!u[n]){if(!i[n]){var t=\"function\"==typeof require&&require;if(!e&&t)return t(n,!0);if(f)return f(n,!0);throw new Error(\"Cannot find module '\"+n+\"'\")}var r=u[n]={exports:{}};i[n][0].call(r.exports,function(e){var t=i[n][1][e];return s(t||e)},r,r.exports,o,i,u,a)}return u[n].exports}for(var f=\"function\"==typeof require&&require,e=0;e>16),s((65280&n)>>8),s(255&n);return 2==o?s(255&(n=l(e.charAt(t))<<2|l(e.charAt(t+1))>>4)):1==o&&(s((n=l(e.charAt(t))<<10|l(e.charAt(t+1))<<4|l(e.charAt(t+2))>>2)>>8&255),s(255&n)),i},e.fromByteArray=function(e){var t,n,r,o,i=e.length%3,u=\"\";function a(e){return\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\".charAt(e)}for(t=0,r=e.length-i;t>18&63)+a(o>>12&63)+a(o>>6&63)+a(63&o);switch(i){case 1:u+=a((n=e[e.length-1])>>2),u+=a(n<<4&63),u+=\"==\";break;case 2:u+=a((n=(e[e.length-2]<<8)+e[e.length-1])>>10),u+=a(n>>4&63),u+=a(n<<2&63),u+=\"=\"}return u}}(void 0===f?this.base64js={}:f)}).call(this,e(\"lYpoI2\"),\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{},e(\"buffer\").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],\"/node_modules/gulp-browserify/node_modules/base64-js/lib/b64.js\",\"/node_modules/gulp-browserify/node_modules/base64-js/lib\")},{buffer:3,lYpoI2:10}],3:[function(O,e,H){(function(e,t,g,n,r,o,i,u,a){var s=O(\"base64-js\"),f=O(\"ieee754\");function g(e,t,n){if(!(this instanceof g))return new g(e,t,n);var r,o,i,u,a,s=typeof e;if(\"base64\"===t&&\"string\"==s)for(e=(r=e).trim?r.trim():r.replace(/^\\s+|\\s+$/g,\"\");e.length%4!=0;)e+=\"=\";if(\"number\"==s)o=x(e);else if(\"string\"==s)o=g.byteLength(e,t);else{if(\"object\"!=s)throw new Error(\"First argument needs to be a number, array or string.\");o=x(e.length)}if(g._useTypedArrays?i=g._augment(new Uint8Array(o)):((i=this).length=o,i._isBuffer=!0),g._useTypedArrays&&\"number\"==typeof e.byteLength)i._set(e);else if(S(a=e)||g.isBuffer(a)||a&&\"object\"==typeof a&&\"number\"==typeof a.length)for(u=0;u>8,r=t%256,o.push(r),o.push(n);return o}(t),e,n,r)}function l(e,t,n){var r=\"\";n=Math.min(e.length,n);for(var o=t;o>>0)):(t+1>>0),o}function h(e,t,n,r){if(r||(D(\"boolean\"==typeof n,\"missing or invalid endian\"),D(null!=t,\"missing offset\"),D(t+1>>8*(r?u:1-u)}function _(e,t,n,r,o){o||(D(null!=t,\"missing value\"),D(\"boolean\"==typeof r,\"missing or invalid endian\"),D(null!=n,\"missing offset\"),D(n+3>>8*(r?u:3-u)&255}function E(e,t,n,r,o){o||(D(null!=t,\"missing value\"),D(\"boolean\"==typeof r,\"missing or invalid endian\"),D(null!=n,\"missing offset\"),D(n+1this.length&&(r=this.length),e.length-t=this.length))return this[e]},g.prototype.readUInt16LE=function(e,t){return c(this,e,!0,t)},g.prototype.readUInt16BE=function(e,t){return c(this,e,!1,t)},g.prototype.readUInt32LE=function(e,t){return d(this,e,!0,t)},g.prototype.readUInt32BE=function(e,t){return d(this,e,!1,t)},g.prototype.readInt8=function(e,t){if(t||(D(null!=e,\"missing offset\"),D(e=this.length))return 128&this[e]?-1*(255-this[e]+1):this[e]},g.prototype.readInt16LE=function(e,t){return h(this,e,!0,t)},g.prototype.readInt16BE=function(e,t){return h(this,e,!1,t)},g.prototype.readInt32LE=function(e,t){return p(this,e,!0,t)},g.prototype.readInt32BE=function(e,t){return p(this,e,!1,t)},g.prototype.readFloatLE=function(e,t){return b(this,e,!0,t)},g.prototype.readFloatBE=function(e,t){return b(this,e,!1,t)},g.prototype.readDoubleLE=function(e,t){return m(this,e,!0,t)},g.prototype.readDoubleBE=function(e,t){return m(this,e,!1,t)},g.prototype.writeUInt8=function(e,t,n){n||(D(null!=e,\"missing value\"),D(null!=t,\"missing offset\"),D(t=this.length||(this[t]=e)},g.prototype.writeUInt16LE=function(e,t,n){v(this,e,t,!0,n)},g.prototype.writeUInt16BE=function(e,t,n){v(this,e,t,!1,n)},g.prototype.writeUInt32LE=function(e,t,n){_(this,e,t,!0,n)},g.prototype.writeUInt32BE=function(e,t,n){_(this,e,t,!1,n)},g.prototype.writeInt8=function(e,t,n){n||(D(null!=e,\"missing value\"),D(null!=t,\"missing offset\"),D(t=this.length||(0<=e?this.writeUInt8(e,t,n):this.writeUInt8(255+e+1,t,n))},g.prototype.writeInt16LE=function(e,t,n){E(this,e,t,!0,n)},g.prototype.writeInt16BE=function(e,t,n){E(this,e,t,!1,n)},g.prototype.writeInt32LE=function(e,t,n){I(this,e,t,!0,n)},g.prototype.writeInt32BE=function(e,t,n){I(this,e,t,!1,n)},g.prototype.writeFloatLE=function(e,t,n){A(this,e,t,!0,n)},g.prototype.writeFloatBE=function(e,t,n){A(this,e,t,!1,n)},g.prototype.writeDoubleLE=function(e,t,n){B(this,e,t,!0,n)},g.prototype.writeDoubleBE=function(e,t,n){B(this,e,t,!1,n)},g.prototype.fill=function(e,t,n){if(e=e||0,t=t||0,n=n||this.length,\"string\"==typeof e&&(e=e.charCodeAt(0)),D(\"number\"==typeof e&&!isNaN(e),\"value is not a number\"),D(t<=n,\"end < start\"),n!==t&&0!==this.length){D(0<=t&&t\"},g.prototype.toArrayBuffer=function(){if(\"undefined\"==typeof Uint8Array)throw new Error(\"Buffer.toArrayBuffer not supported in this browser\");if(g._useTypedArrays)return new g(this).buffer;for(var e=new Uint8Array(this.length),t=0,n=e.length;t=t.length||o>=e.length);o++)t[o+n]=e[o];return o}function M(e){try{return decodeURIComponent(e)}catch(e){return String.fromCharCode(65533)}}function N(e,t){D(\"number\"==typeof e,\"cannot write a non-number as a number\"),D(0<=e,\"specified a negative value for writing an unsigned value\"),D(e<=t,\"value is larger than maximum value for type\"),D(Math.floor(e)===e,\"value has a fractional component\")}function Y(e,t,n){D(\"number\"==typeof e,\"cannot write a non-number as a number\"),D(e<=t,\"value larger than maximum allowed value\"),D(n<=e,\"value smaller than minimum allowed value\"),D(Math.floor(e)===e,\"value has a fractional component\")}function F(e,t,n){D(\"number\"==typeof e,\"cannot write a non-number as a number\"),D(e<=t,\"value larger than maximum allowed value\"),D(n<=e,\"value smaller than minimum allowed value\")}function D(e,t){if(!e)throw new Error(t||\"Failed assertion\")}g._augment=function(e){return e._isBuffer=!0,e._get=e.get,e._set=e.set,e.get=L.get,e.set=L.set,e.write=L.write,e.toString=L.toString,e.toLocaleString=L.toString,e.toJSON=L.toJSON,e.copy=L.copy,e.slice=L.slice,e.readUInt8=L.readUInt8,e.readUInt16LE=L.readUInt16LE,e.readUInt16BE=L.readUInt16BE,e.readUInt32LE=L.readUInt32LE,e.readUInt32BE=L.readUInt32BE,e.readInt8=L.readInt8,e.readInt16LE=L.readInt16LE,e.readInt16BE=L.readInt16BE,e.readInt32LE=L.readInt32LE,e.readInt32BE=L.readInt32BE,e.readFloatLE=L.readFloatLE,e.readFloatBE=L.readFloatBE,e.readDoubleLE=L.readDoubleLE,e.readDoubleBE=L.readDoubleBE,e.writeUInt8=L.writeUInt8,e.writeUInt16LE=L.writeUInt16LE,e.writeUInt16BE=L.writeUInt16BE,e.writeUInt32LE=L.writeUInt32LE,e.writeUInt32BE=L.writeUInt32BE,e.writeInt8=L.writeInt8,e.writeInt16LE=L.writeInt16LE,e.writeInt16BE=L.writeInt16BE,e.writeInt32LE=L.writeInt32LE,e.writeInt32BE=L.writeInt32BE,e.writeFloatLE=L.writeFloatLE,e.writeFloatBE=L.writeFloatBE,e.writeDoubleLE=L.writeDoubleLE,e.writeDoubleBE=L.writeDoubleBE,e.fill=L.fill,e.inspect=L.inspect,e.toArrayBuffer=L.toArrayBuffer,e}}).call(this,O(\"lYpoI2\"),\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{},O(\"buffer\").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],\"/node_modules/gulp-browserify/node_modules/buffer/index.js\",\"/node_modules/gulp-browserify/node_modules/buffer\")},{\"base64-js\":2,buffer:3,ieee754:11,lYpoI2:10}],4:[function(c,d,e){(function(e,t,u,n,r,o,i,a,s){var u=c(\"buffer\").Buffer,f=4,l=new u(f);l.fill(0);d.exports={hash:function(e,t,n,r){return u.isBuffer(e)||(e=new u(e)),function(e,t,n){for(var r=new u(t),o=n?r.writeInt32BE:r.writeInt32LE,i=0;ih?t=e(t):t.length>5]|=128<>>9<<4)]=t;for(var n=1732584193,r=-271733879,o=-1732584194,i=271733878,u=0;u>>32-a,n);var u,a}function d(e,t,n,r,o,i,u){return c(t&n|~t&r,e,t,o,i,u)}function h(e,t,n,r,o,i,u){return c(t&r|n&~r,e,t,o,i,u)}function p(e,t,n,r,o,i,u){return c(t^n^r,e,t,o,i,u)}function g(e,t,n,r,o,i,u){return c(n^(t|~r),e,t,o,i,u)}function y(e,t){var n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}b.exports=function(e){return f.hash(e,l,16)}}).call(this,w(\"lYpoI2\"),\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{},w(\"buffer\").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],\"/node_modules/gulp-browserify/node_modules/crypto-browserify/md5.js\",\"/node_modules/gulp-browserify/node_modules/crypto-browserify\")},{\"./helpers\":4,buffer:3,lYpoI2:10}],7:[function(e,c,t){(function(e,t,n,r,o,i,u,a,s){var f,l;l=function(e){for(var t,n=new Array(e),r=0;r>>((3&r)<<3)&255;return n},c.exports=f||l}).call(this,e(\"lYpoI2\"),\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{},e(\"buffer\").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],\"/node_modules/gulp-browserify/node_modules/crypto-browserify/rng.js\",\"/node_modules/gulp-browserify/node_modules/crypto-browserify\")},{buffer:3,lYpoI2:10}],8:[function(c,d,e){(function(e,t,n,r,o,i,u,a,s){var f=c(\"./helpers\");function l(e,t){e[t>>5]|=128<<24-t%32,e[15+(t+64>>9<<4)]=t;for(var n,r,o,i,u,a=Array(80),s=1732584193,f=-271733879,l=-1732584194,c=271733878,d=-1009589776,h=0;h>16)+(t>>16)+(n>>16)<<16|65535&n}function E(e,t){return e<>>32-t}d.exports=function(e){return f.hash(e,l,20,!0)}}).call(this,c(\"lYpoI2\"),\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{},c(\"buffer\").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],\"/node_modules/gulp-browserify/node_modules/crypto-browserify/sha.js\",\"/node_modules/gulp-browserify/node_modules/crypto-browserify\")},{\"./helpers\":4,buffer:3,lYpoI2:10}],9:[function(c,d,e){(function(e,t,n,r,o,i,u,a,s){function B(e,t){var n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}function L(e,t){return e>>>t|e<<32-t}function f(e,t){var n,r,o,i,u,a,s,f,l,c,d=new Array(1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298),h=new Array(1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225),p=new Array(64);e[t>>5]|=128<<24-t%32,e[15+(t+64>>9<<4)]=t;for(var g,y,w,b,m,v,_,E,I=0;I>>10),p[A-7]),(_=p[A-15],L(_,7)^L(_,18)^_>>>3)),p[A-16]),l=B(B(B(B(f,L(v=u,6)^L(v,11)^L(v,25)),(m=u)&a^~m&s),d[A]),p[A]),c=B(L(b=n,2)^L(b,13)^L(b,22),(g=n)&(y=r)^g&(w=o)^y&w),f=s,s=a,a=u,u=B(i,l),i=o,o=r,r=n,n=B(l,c);h[0]=B(n,h[0]),h[1]=B(r,h[1]),h[2]=B(o,h[2]),h[3]=B(i,h[3]),h[4]=B(u,h[4]),h[5]=B(a,h[5]),h[6]=B(s,h[6]),h[7]=B(f,h[7])}return h}var l=c(\"./helpers\");d.exports=function(e){return l.hash(e,f,32,!0)}}).call(this,c(\"lYpoI2\"),\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{},c(\"buffer\").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],\"/node_modules/gulp-browserify/node_modules/crypto-browserify/sha256.js\",\"/node_modules/gulp-browserify/node_modules/crypto-browserify\")},{\"./helpers\":4,buffer:3,lYpoI2:10}],10:[function(e,l,t){(function(e,t,n,r,o,i,u,a,s){function f(){}(e=l.exports={}).nextTick=function(){var e=\"undefined\"!=typeof window&&window.setImmediate,t=\"undefined\"!=typeof window&&window.postMessage&&window.addEventListener;if(e)return function(e){return window.setImmediate(e)};if(t){var n=[];return window.addEventListener(\"message\",function(e){var t=e.source;t!==window&&null!==t||\"process-tick\"!==e.data||(e.stopPropagation(),0>1,l=-7,c=n?o-1:0,d=n?-1:1,h=e[t+c];for(c+=d,i=h&(1<<-l)-1,h>>=-l,l+=a;0>=-l,l+=r;0>1,d=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,h=r?0:i-1,p=r?1:-1,g=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(a=isNaN(t)?1:0,u=l):(u=Math.floor(Math.log(t)/Math.LN2),t*(s=Math.pow(2,-u))<1&&(u--,s*=2),2<=(t+=1<=u+c?d/s:d*Math.pow(2,1-c))*s&&(u++,s/=2),l<=u+c?(a=0,u=l):1<=u+c?(a=(t*s-1)*Math.pow(2,o),u+=c):(a=t*Math.pow(2,c-1)*Math.pow(2,o),u=0));8<=o;e[n+h]=255&a,h+=p,a/=256,o-=8);for(u=u< -1000 && num < 1000)\n || $test.call(/e/, str)\n ) {\n return str;\n }\n var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;\n if (typeof num === 'number') {\n var int = num < 0 ? -$floor(-num) : $floor(num); // trunc(num)\n if (int !== num) {\n var intStr = String(int);\n var dec = $slice.call(str, intStr.length + 1);\n return $replace.call(intStr, sepRegex, '$&_') + '.' + $replace.call($replace.call(dec, /([0-9]{3})/g, '$&_'), /_$/, '');\n }\n }\n return $replace.call(str, sepRegex, '$&_');\n}\n\nvar utilInspect = require('./util.inspect');\nvar inspectCustom = utilInspect.custom;\nvar inspectSymbol = isSymbol(inspectCustom) ? inspectCustom : null;\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n var opts = options || {};\n\n if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n }\n if (\n has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n : opts.maxStringLength !== null\n )\n ) {\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n }\n var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n }\n\n if (\n has(opts, 'indent')\n && opts.indent !== null\n && opts.indent !== '\\t'\n && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n ) {\n throw new TypeError('option \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n }\n if (has(opts, 'numericSeparator') && typeof opts.numericSeparator !== 'boolean') {\n throw new TypeError('option \"numericSeparator\", if provided, must be `true` or `false`');\n }\n var numericSeparator = opts.numericSeparator;\n\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n if (obj === null) {\n return 'null';\n }\n if (typeof obj === 'boolean') {\n return obj ? 'true' : 'false';\n }\n\n if (typeof obj === 'string') {\n return inspectString(obj, opts);\n }\n if (typeof obj === 'number') {\n if (obj === 0) {\n return Infinity / obj > 0 ? '0' : '-0';\n }\n var str = String(obj);\n return numericSeparator ? addNumericSeparator(obj, str) : str;\n }\n if (typeof obj === 'bigint') {\n var bigIntStr = String(obj) + 'n';\n return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr;\n }\n\n var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n if (typeof depth === 'undefined') { depth = 0; }\n if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n return isArray(obj) ? '[Array]' : '[Object]';\n }\n\n var indent = getIndent(opts, depth);\n\n if (typeof seen === 'undefined') {\n seen = [];\n } else if (indexOf(seen, obj) >= 0) {\n return '[Circular]';\n }\n\n function inspect(value, from, noIndent) {\n if (from) {\n seen = $arrSlice.call(seen);\n seen.push(from);\n }\n if (noIndent) {\n var newOpts = {\n depth: opts.depth\n };\n if (has(opts, 'quoteStyle')) {\n newOpts.quoteStyle = opts.quoteStyle;\n }\n return inspect_(value, newOpts, depth + 1, seen);\n }\n return inspect_(value, opts, depth + 1, seen);\n }\n\n if (typeof obj === 'function' && !isRegExp(obj)) { // in older engines, regexes are callable\n var name = nameOf(obj);\n var keys = arrObjKeys(obj, inspect);\n return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + $join.call(keys, ', ') + ' }' : '');\n }\n if (isSymbol(obj)) {\n var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n }\n if (isElement(obj)) {\n var s = '<' + $toLowerCase.call(String(obj.nodeName));\n var attrs = obj.attributes || [];\n for (var i = 0; i < attrs.length; i++) {\n s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n }\n s += '>';\n if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n s += '';\n return s;\n }\n if (isArray(obj)) {\n if (obj.length === 0) { return '[]'; }\n var xs = arrObjKeys(obj, inspect);\n if (indent && !singleLineValues(xs)) {\n return '[' + indentedJoin(xs, indent) + ']';\n }\n return '[ ' + $join.call(xs, ', ') + ' ]';\n }\n if (isError(obj)) {\n var parts = arrObjKeys(obj, inspect);\n if (!('cause' in Error.prototype) && 'cause' in obj && !isEnumerable.call(obj, 'cause')) {\n return '{ [' + String(obj) + '] ' + $join.call($concat.call('[cause]: ' + inspect(obj.cause), parts), ', ') + ' }';\n }\n if (parts.length === 0) { return '[' + String(obj) + ']'; }\n return '{ [' + String(obj) + '] ' + $join.call(parts, ', ') + ' }';\n }\n if (typeof obj === 'object' && customInspect) {\n if (inspectSymbol && typeof obj[inspectSymbol] === 'function' && utilInspect) {\n return utilInspect(obj, { depth: maxDepth - depth });\n } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n return obj.inspect();\n }\n }\n if (isMap(obj)) {\n var mapParts = [];\n mapForEach.call(obj, function (value, key) {\n mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n });\n return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n }\n if (isSet(obj)) {\n var setParts = [];\n setForEach.call(obj, function (value) {\n setParts.push(inspect(value, obj));\n });\n return collectionOf('Set', setSize.call(obj), setParts, indent);\n }\n if (isWeakMap(obj)) {\n return weakCollectionOf('WeakMap');\n }\n if (isWeakSet(obj)) {\n return weakCollectionOf('WeakSet');\n }\n if (isWeakRef(obj)) {\n return weakCollectionOf('WeakRef');\n }\n if (isNumber(obj)) {\n return markBoxed(inspect(Number(obj)));\n }\n if (isBigInt(obj)) {\n return markBoxed(inspect(bigIntValueOf.call(obj)));\n }\n if (isBoolean(obj)) {\n return markBoxed(booleanValueOf.call(obj));\n }\n if (isString(obj)) {\n return markBoxed(inspect(String(obj)));\n }\n if (!isDate(obj) && !isRegExp(obj)) {\n var ys = arrObjKeys(obj, inspect);\n var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n var protoTag = obj instanceof Object ? '' : 'null prototype';\n var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? 'Object' : '';\n var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n var tag = constructorTag + (stringTag || protoTag ? '[' + $join.call($concat.call([], stringTag || [], protoTag || []), ': ') + '] ' : '');\n if (ys.length === 0) { return tag + '{}'; }\n if (indent) {\n return tag + '{' + indentedJoin(ys, indent) + '}';\n }\n return tag + '{ ' + $join.call(ys, ', ') + ' }';\n }\n return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '\"' : \"'\";\n return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n return $replace.call(String(s), /\"/g, '"');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n if (hasShammedSymbols) {\n return obj && typeof obj === 'object' && obj instanceof Symbol;\n }\n if (typeof obj === 'symbol') {\n return true;\n }\n if (!obj || typeof obj !== 'object' || !symToString) {\n return false;\n }\n try {\n symToString.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isBigInt(obj) {\n if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n return false;\n }\n try {\n bigIntValueOf.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n if (f.name) { return f.name; }\n var m = $match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n if (m) { return m[1]; }\n return null;\n}\n\nfunction indexOf(xs, x) {\n if (xs.indexOf) { return xs.indexOf(x); }\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) { return i; }\n }\n return -1;\n}\n\nfunction isMap(x) {\n if (!mapSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n mapSize.call(x);\n try {\n setSize.call(x);\n } catch (s) {\n return true;\n }\n return x instanceof Map; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakMap(x) {\n if (!weakMapHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakMapHas.call(x, weakMapHas);\n try {\n weakSetHas.call(x, weakSetHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakRef(x) {\n if (!weakRefDeref || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakRefDeref.call(x);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isSet(x) {\n if (!setSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n setSize.call(x);\n try {\n mapSize.call(x);\n } catch (m) {\n return true;\n }\n return x instanceof Set; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakSet(x) {\n if (!weakSetHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakSetHas.call(x, weakSetHas);\n try {\n weakMapHas.call(x, weakMapHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isElement(x) {\n if (!x || typeof x !== 'object') { return false; }\n if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n return true;\n }\n return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n if (str.length > opts.maxStringLength) {\n var remaining = str.length - opts.maxStringLength;\n var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer;\n }\n // eslint-disable-next-line no-control-regex\n var s = $replace.call($replace.call(str, /(['\\\\])/g, '\\\\$1'), /[\\x00-\\x1f]/g, lowbyte);\n return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n var n = c.charCodeAt(0);\n var x = {\n 8: 'b',\n 9: 't',\n 10: 'n',\n 12: 'f',\n 13: 'r'\n }[n];\n if (x) { return '\\\\' + x; }\n return '\\\\x' + (n < 0x10 ? '0' : '') + $toUpperCase.call(n.toString(16));\n}\n\nfunction markBoxed(str) {\n return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n var joinedEntries = indent ? indentedJoin(entries, indent) : $join.call(entries, ', ');\n return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n for (var i = 0; i < xs.length; i++) {\n if (indexOf(xs[i], '\\n') >= 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction getIndent(opts, depth) {\n var baseIndent;\n if (opts.indent === '\\t') {\n baseIndent = '\\t';\n } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n baseIndent = $join.call(Array(opts.indent + 1), ' ');\n } else {\n return null;\n }\n return {\n base: baseIndent,\n prev: $join.call(Array(depth + 1), baseIndent)\n };\n}\n\nfunction indentedJoin(xs, indent) {\n if (xs.length === 0) { return ''; }\n var lineJoiner = '\\n' + indent.prev + indent.base;\n return lineJoiner + $join.call(xs, ',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n var isArr = isArray(obj);\n var xs = [];\n if (isArr) {\n xs.length = obj.length;\n for (var i = 0; i < obj.length; i++) {\n xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n }\n }\n var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n var symMap;\n if (hasShammedSymbols) {\n symMap = {};\n for (var k = 0; k < syms.length; k++) {\n symMap['$' + syms[k]] = syms[k];\n }\n }\n\n for (var key in obj) { // eslint-disable-line no-restricted-syntax\n if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n } else if ($test.call(/[^\\w$]/, key)) {\n xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n } else {\n xs.push(key + ': ' + inspect(obj[key], obj));\n }\n }\n if (typeof gOPS === 'function') {\n for (var j = 0; j < syms.length; j++) {\n if (isEnumerable.call(obj, syms[j])) {\n xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n }\n }\n }\n return xs;\n}\n","'use strict';\n\nvar numberIsNaN = function (value) {\n\treturn value !== value;\n};\n\nmodule.exports = function is(a, b) {\n\tif (a === 0 && b === 0) {\n\t\treturn 1 / a === 1 / b;\n\t}\n\tif (a === b) {\n\t\treturn true;\n\t}\n\tif (numberIsNaN(a) && numberIsNaN(b)) {\n\t\treturn true;\n\t}\n\treturn false;\n};\n\n","'use strict';\n\nvar define = require('define-properties');\nvar callBind = require('call-bind');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar polyfill = callBind(getPolyfill(), Object);\n\ndefine(polyfill, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = polyfill;\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = function getPolyfill() {\n\treturn typeof Object.is === 'function' ? Object.is : implementation;\n};\n","'use strict';\n\nvar getPolyfill = require('./polyfill');\nvar define = require('define-properties');\n\nmodule.exports = function shimObjectIs() {\n\tvar polyfill = getPolyfill();\n\tdefine(Object, { is: polyfill }, {\n\t\tis: function testObjectIs() {\n\t\t\treturn Object.is !== polyfill;\n\t\t}\n\t});\n\treturn polyfill;\n};\n","'use strict';\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = require('./isArguments'); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n","'use strict';\n\nvar slice = Array.prototype.slice;\nvar isArgs = require('./isArguments');\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : require('./implementation');\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n","'use strict';\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n","'use strict';\n\n// modified from https://github.com/es-shims/es6-shim\nvar keys = require('object-keys');\nvar canBeObject = function (obj) {\n\treturn typeof obj !== 'undefined' && obj !== null;\n};\nvar hasSymbols = require('has-symbols/shams')();\nvar callBound = require('call-bind/callBound');\nvar toObject = Object;\nvar $push = callBound('Array.prototype.push');\nvar $propIsEnumerable = callBound('Object.prototype.propertyIsEnumerable');\nvar originalGetSymbols = hasSymbols ? Object.getOwnPropertySymbols : null;\n\n// eslint-disable-next-line no-unused-vars\nmodule.exports = function assign(target, source1) {\n\tif (!canBeObject(target)) { throw new TypeError('target must be an object'); }\n\tvar objTarget = toObject(target);\n\tvar s, source, i, props, syms, value, key;\n\tfor (s = 1; s < arguments.length; ++s) {\n\t\tsource = toObject(arguments[s]);\n\t\tprops = keys(source);\n\t\tvar getSymbols = hasSymbols && (Object.getOwnPropertySymbols || originalGetSymbols);\n\t\tif (getSymbols) {\n\t\t\tsyms = getSymbols(source);\n\t\t\tfor (i = 0; i < syms.length; ++i) {\n\t\t\t\tkey = syms[i];\n\t\t\t\tif ($propIsEnumerable(source, key)) {\n\t\t\t\t\t$push(props, key);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfor (i = 0; i < props.length; ++i) {\n\t\t\tkey = props[i];\n\t\t\tvalue = source[key];\n\t\t\tif ($propIsEnumerable(source, key)) {\n\t\t\t\tobjTarget[key] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn objTarget;\n};\n","'use strict';\n\nvar defineProperties = require('define-properties');\nvar callBind = require('call-bind');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar polyfill = callBind.apply(getPolyfill());\n// eslint-disable-next-line no-unused-vars\nvar bound = function assign(target, source1) {\n\treturn polyfill(Object, arguments);\n};\n\ndefineProperties(bound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = bound;\n","'use strict';\n\nvar implementation = require('./implementation');\n\nvar lacksProperEnumerationOrder = function () {\n\tif (!Object.assign) {\n\t\treturn false;\n\t}\n\t/*\n\t * v8, specifically in node 4.x, has a bug with incorrect property enumeration order\n\t * note: this does not detect the bug unless there's 20 characters\n\t */\n\tvar str = 'abcdefghijklmnopqrst';\n\tvar letters = str.split('');\n\tvar map = {};\n\tfor (var i = 0; i < letters.length; ++i) {\n\t\tmap[letters[i]] = letters[i];\n\t}\n\tvar obj = Object.assign({}, map);\n\tvar actual = '';\n\tfor (var k in obj) {\n\t\tactual += k;\n\t}\n\treturn str !== actual;\n};\n\nvar assignHasPendingExceptions = function () {\n\tif (!Object.assign || !Object.preventExtensions) {\n\t\treturn false;\n\t}\n\t/*\n\t * Firefox 37 still has \"pending exception\" logic in its Object.assign implementation,\n\t * which is 72% slower than our shim, and Firefox 40's native implementation.\n\t */\n\tvar thrower = Object.preventExtensions({ 1: 2 });\n\ttry {\n\t\tObject.assign(thrower, 'xy');\n\t} catch (e) {\n\t\treturn thrower[1] === 'y';\n\t}\n\treturn false;\n};\n\nmodule.exports = function getPolyfill() {\n\tif (!Object.assign) {\n\t\treturn implementation;\n\t}\n\tif (lacksProperEnumerationOrder()) {\n\t\treturn implementation;\n\t}\n\tif (assignHasPendingExceptions()) {\n\t\treturn implementation;\n\t}\n\treturn Object.assign;\n};\n","'use strict';\n\nvar define = require('define-properties');\nvar getPolyfill = require('./polyfill');\n\nmodule.exports = function shimAssign() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tObject,\n\t\t{ assign: polyfill },\n\t\t{ assign: function () { return Object.assign !== polyfill; } }\n\t);\n\treturn polyfill;\n};\n","'use strict';\n\nvar RequireObjectCoercible = require('es-abstract/2021/RequireObjectCoercible');\nvar callBound = require('call-bind/callBound');\n\nvar $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');\nvar $push = callBound('Array.prototype.push');\n\nmodule.exports = function values(O) {\n\tvar obj = RequireObjectCoercible(O);\n\tvar vals = [];\n\tfor (var key in obj) {\n\t\tif ($isEnumerable(obj, key)) { // checks own-ness as well\n\t\t\t$push(vals, obj[key]);\n\t\t}\n\t}\n\treturn vals;\n};\n","'use strict';\n\nvar define = require('define-properties');\nvar callBind = require('call-bind');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar polyfill = callBind(getPolyfill(), Object);\n\ndefine(polyfill, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = polyfill;\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = function getPolyfill() {\n\treturn typeof Object.values === 'function' ? Object.values : implementation;\n};\n","'use strict';\n\nvar getPolyfill = require('./polyfill');\nvar define = require('define-properties');\n\nmodule.exports = function shimValues() {\n\tvar polyfill = getPolyfill();\n\tdefine(Object, { values: polyfill }, {\n\t\tvalues: function testValues() {\n\t\t\treturn Object.values !== polyfill;\n\t\t}\n\t});\n\treturn polyfill;\n};\n","!function t(e,r){if(\"object\"==typeof exports&&\"object\"==typeof module)module.exports=r();else if(\"function\"==typeof define&&define.amd)define([],r);else{var n=r();for(var i in n)(\"object\"==typeof exports?exports:e)[i]=n[i]}}(this,(function(){return function(t){var e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=t,r.c=e,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var i in t)r.d(n,i,function(e){return t[e]}.bind(null,i));return n},r.n=function(t){var e=t&&t.__esModule?function e(){return t.default}:function e(){return t};return r.d(e,\"a\",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p=\"\",r(r.s=22)}([function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=function(){function t(t,e){for(var r=0;r=4){for(var e=arguments.length,r=Array(e),n=0;n=3){for(var e=arguments.length,r=Array(e),n=0;n=2){for(var e=arguments.length,r=Array(e),n=0;n=1){for(var e=arguments.length,r=Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:o.JsonService;if(s(this,t),!e)throw i.Log.error(\"MetadataService: No settings passed to MetadataService\"),new Error(\"settings\");this._settings=e,this._jsonService=new r([\"application/jwk-set+json\"])}return t.prototype.resetSigningKeys=function t(){this._settings=this._settings||{},this._settings.signingKeys=void 0},t.prototype.getMetadata=function t(){var e=this;return this._settings.metadata?(i.Log.debug(\"MetadataService.getMetadata: Returning metadata from settings\"),Promise.resolve(this._settings.metadata)):this.metadataUrl?(i.Log.debug(\"MetadataService.getMetadata: getting metadata from\",this.metadataUrl),this._jsonService.getJson(this.metadataUrl).then((function(t){i.Log.debug(\"MetadataService.getMetadata: json received\");var r=e._settings.metadataSeed||{};return e._settings.metadata=Object.assign({},r,t),e._settings.metadata}))):(i.Log.error(\"MetadataService.getMetadata: No authority or metadataUrl configured on settings\"),Promise.reject(new Error(\"No authority or metadataUrl configured on settings\")))},t.prototype.getIssuer=function t(){return this._getMetadataProperty(\"issuer\")},t.prototype.getAuthorizationEndpoint=function t(){return this._getMetadataProperty(\"authorization_endpoint\")},t.prototype.getUserInfoEndpoint=function t(){return this._getMetadataProperty(\"userinfo_endpoint\")},t.prototype.getTokenEndpoint=function t(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return this._getMetadataProperty(\"token_endpoint\",e)},t.prototype.getCheckSessionIframe=function t(){return this._getMetadataProperty(\"check_session_iframe\",!0)},t.prototype.getEndSessionEndpoint=function t(){return this._getMetadataProperty(\"end_session_endpoint\",!0)},t.prototype.getRevocationEndpoint=function t(){return this._getMetadataProperty(\"revocation_endpoint\",!0)},t.prototype.getKeysEndpoint=function t(){return this._getMetadataProperty(\"jwks_uri\",!0)},t.prototype._getMetadataProperty=function t(e){var r=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return i.Log.debug(\"MetadataService.getMetadataProperty for: \"+e),this.getMetadata().then((function(t){if(i.Log.debug(\"MetadataService.getMetadataProperty: metadata recieved\"),void 0===t[e]){if(!0===r)return void i.Log.warn(\"MetadataService.getMetadataProperty: Metadata does not contain optional property \"+e);throw i.Log.error(\"MetadataService.getMetadataProperty: Metadata does not contain property \"+e),new Error(\"Metadata does not contain property \"+e)}return t[e]}))},t.prototype.getSigningKeys=function t(){var e=this;return this._settings.signingKeys?(i.Log.debug(\"MetadataService.getSigningKeys: Returning signingKeys from settings\"),Promise.resolve(this._settings.signingKeys)):this._getMetadataProperty(\"jwks_uri\").then((function(t){return i.Log.debug(\"MetadataService.getSigningKeys: jwks_uri received\",t),e._jsonService.getJson(t).then((function(t){if(i.Log.debug(\"MetadataService.getSigningKeys: key set received\",t),!t.keys)throw i.Log.error(\"MetadataService.getSigningKeys: Missing keys on keyset\"),new Error(\"Missing keys on keyset\");return e._settings.signingKeys=t.keys,e._settings.signingKeys}))}))},n(t,[{key:\"metadataUrl\",get:function t(){return this._metadataUrl||(this._settings.metadataUrl?this._metadataUrl=this._settings.metadataUrl:(this._metadataUrl=this._settings.authority,this._metadataUrl&&this._metadataUrl.indexOf(a)<0&&(\"/\"!==this._metadataUrl[this._metadataUrl.length-1]&&(this._metadataUrl+=\"/\"),this._metadataUrl+=a))),this._metadataUrl}}]),t}()},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.UrlUtility=void 0;var n=r(0),i=r(1);e.UrlUtility=function(){function t(){!function e(t,r){if(!(t instanceof r))throw new TypeError(\"Cannot call a class as a function\")}(this,t)}return t.addQueryParam=function t(e,r,n){return e.indexOf(\"?\")<0&&(e+=\"?\"),\"?\"!==e[e.length-1]&&(e+=\"&\"),e+=encodeURIComponent(r),e+=\"=\",e+=encodeURIComponent(n)},t.parseUrlFragment=function t(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"#\",o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.Global;\"string\"!=typeof e&&(e=o.location.href);var s=e.lastIndexOf(r);s>=0&&(e=e.substr(s+1)),\"?\"===r&&(s=e.indexOf(\"#\"))>=0&&(e=e.substr(0,s));for(var a,u={},c=/([^&=]+)=([^&]*)/g,h=0;a=c.exec(e);)if(u[decodeURIComponent(a[1])]=decodeURIComponent(a[2].replace(/\\+/g,\" \")),h++>50)return n.Log.error(\"UrlUtility.parseUrlFragment: response exceeded expected number of parameters\",e),{error:\"Response exceeded expected number of parameters\"};for(var l in u)return u;return{}},t}()},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.JoseUtil=void 0;var n=r(26),i=function o(t){return t&&t.__esModule?t:{default:t}}(r(33));e.JoseUtil=(0,i.default)({jws:n.jws,KeyUtil:n.KeyUtil,X509:n.X509,crypto:n.crypto,hextob64u:n.hextob64u,b64tohex:n.b64tohex,AllowedSigningAlgs:n.AllowedSigningAlgs})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.OidcClientSettings=void 0;var n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},i=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},r=e.authority,i=e.metadataUrl,o=e.metadata,l=e.signingKeys,p=e.metadataSeed,v=e.client_id,y=e.client_secret,m=e.response_type,_=void 0===m?f:m,S=e.scope,b=void 0===S?g:S,w=e.redirect_uri,F=e.post_logout_redirect_uri,E=e.client_authentication,x=void 0===E?d:E,A=e.prompt,k=e.display,P=e.max_age,C=e.ui_locales,T=e.acr_values,R=e.resource,I=e.response_mode,D=e.filterProtocolClaims,L=void 0===D||D,N=e.loadUserInfo,U=void 0===N||N,B=e.staleStateAge,O=void 0===B?900:B,j=e.clockSkew,M=void 0===j?300:j,H=e.clockService,V=void 0===H?new s.ClockService:H,K=e.userInfoJwtIssuer,q=void 0===K?\"OP\":K,J=e.mergeClaims,W=void 0!==J&&J,z=e.stateStore,Y=void 0===z?new a.WebStorageStateStore:z,G=e.ResponseValidatorCtor,X=void 0===G?u.ResponseValidator:G,$=e.MetadataServiceCtor,Q=void 0===$?c.MetadataService:$,Z=e.extraQueryParams,tt=void 0===Z?{}:Z,et=e.extraTokenParams,rt=void 0===et?{}:et;h(this,t),this._authority=r,this._metadataUrl=i,this._metadata=o,this._metadataSeed=p,this._signingKeys=l,this._client_id=v,this._client_secret=y,this._response_type=_,this._scope=b,this._redirect_uri=w,this._post_logout_redirect_uri=F,this._client_authentication=x,this._prompt=A,this._display=k,this._max_age=P,this._ui_locales=C,this._acr_values=T,this._resource=R,this._response_mode=I,this._filterProtocolClaims=!!L,this._loadUserInfo=!!U,this._staleStateAge=O,this._clockSkew=M,this._clockService=V,this._userInfoJwtIssuer=q,this._mergeClaims=!!W,this._stateStore=Y,this._validator=new X(this),this._metadataService=new Q(this),this._extraQueryParams=\"object\"===(void 0===tt?\"undefined\":n(tt))?tt:{},this._extraTokenParams=\"object\"===(void 0===rt?\"undefined\":n(rt))?rt:{}}return t.prototype.getEpochTime=function t(){return this._clockService.getEpochTime()},i(t,[{key:\"client_id\",get:function t(){return this._client_id},set:function t(e){if(this._client_id)throw o.Log.error(\"OidcClientSettings.set_client_id: client_id has already been assigned.\"),new Error(\"client_id has already been assigned.\");this._client_id=e}},{key:\"client_secret\",get:function t(){return this._client_secret}},{key:\"response_type\",get:function t(){return this._response_type}},{key:\"scope\",get:function t(){return this._scope}},{key:\"redirect_uri\",get:function t(){return this._redirect_uri}},{key:\"post_logout_redirect_uri\",get:function t(){return this._post_logout_redirect_uri}},{key:\"client_authentication\",get:function t(){return this._client_authentication}},{key:\"prompt\",get:function t(){return this._prompt}},{key:\"display\",get:function t(){return this._display}},{key:\"max_age\",get:function t(){return this._max_age}},{key:\"ui_locales\",get:function t(){return this._ui_locales}},{key:\"acr_values\",get:function t(){return this._acr_values}},{key:\"resource\",get:function t(){return this._resource}},{key:\"response_mode\",get:function t(){return this._response_mode}},{key:\"authority\",get:function t(){return this._authority},set:function t(e){if(this._authority)throw o.Log.error(\"OidcClientSettings.set_authority: authority has already been assigned.\"),new Error(\"authority has already been assigned.\");this._authority=e}},{key:\"metadataUrl\",get:function t(){return this._metadataUrl||(this._metadataUrl=this.authority,this._metadataUrl&&this._metadataUrl.indexOf(l)<0&&(\"/\"!==this._metadataUrl[this._metadataUrl.length-1]&&(this._metadataUrl+=\"/\"),this._metadataUrl+=l)),this._metadataUrl}},{key:\"metadata\",get:function t(){return this._metadata},set:function t(e){this._metadata=e}},{key:\"metadataSeed\",get:function t(){return this._metadataSeed},set:function t(e){this._metadataSeed=e}},{key:\"signingKeys\",get:function t(){return this._signingKeys},set:function t(e){this._signingKeys=e}},{key:\"filterProtocolClaims\",get:function t(){return this._filterProtocolClaims}},{key:\"loadUserInfo\",get:function t(){return this._loadUserInfo}},{key:\"staleStateAge\",get:function t(){return this._staleStateAge}},{key:\"clockSkew\",get:function t(){return this._clockSkew}},{key:\"userInfoJwtIssuer\",get:function t(){return this._userInfoJwtIssuer}},{key:\"mergeClaims\",get:function t(){return this._mergeClaims}},{key:\"stateStore\",get:function t(){return this._stateStore}},{key:\"validator\",get:function t(){return this._validator}},{key:\"metadataService\",get:function t(){return this._metadataService}},{key:\"extraQueryParams\",get:function t(){return this._extraQueryParams},set:function t(e){\"object\"===(void 0===e?\"undefined\":n(e))?this._extraQueryParams=e:this._extraQueryParams={}}},{key:\"extraTokenParams\",get:function t(){return this._extraTokenParams},set:function t(e){\"object\"===(void 0===e?\"undefined\":n(e))?this._extraTokenParams=e:this._extraTokenParams={}}}]),t}()},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.WebStorageStateStore=void 0;var n=r(0),i=r(1);function o(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}e.WebStorageStateStore=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.prefix,n=void 0===r?\"oidc.\":r,s=e.store,a=void 0===s?i.Global.localStorage:s;o(this,t),this._store=a,this._prefix=n}return t.prototype.set=function t(e,r){return n.Log.debug(\"WebStorageStateStore.set\",e),e=this._prefix+e,this._store.setItem(e,r),Promise.resolve()},t.prototype.get=function t(e){n.Log.debug(\"WebStorageStateStore.get\",e),e=this._prefix+e;var r=this._store.getItem(e);return Promise.resolve(r)},t.prototype.remove=function t(e){n.Log.debug(\"WebStorageStateStore.remove\",e),e=this._prefix+e;var r=this._store.getItem(e);return this._store.removeItem(e),Promise.resolve(r)},t.prototype.getAllKeys=function t(){n.Log.debug(\"WebStorageStateStore.getAllKeys\");for(var e=[],r=0;r0&&void 0!==arguments[0]?arguments[0]:null,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i.Global.XMLHttpRequest,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;o(this,t),e&&Array.isArray(e)?this._contentTypes=e.slice():this._contentTypes=[],this._contentTypes.push(\"application/json\"),n&&this._contentTypes.push(\"application/jwt\"),this._XMLHttpRequest=r,this._jwtHandler=n}return t.prototype.getJson=function t(e,r){var i=this;if(!e)throw n.Log.error(\"JsonService.getJson: No url passed\"),new Error(\"url\");return n.Log.debug(\"JsonService.getJson, url: \",e),new Promise((function(t,o){var s=new i._XMLHttpRequest;s.open(\"GET\",e);var a=i._contentTypes,u=i._jwtHandler;s.onload=function(){if(n.Log.debug(\"JsonService.getJson: HTTP response received, status\",s.status),200===s.status){var r=s.getResponseHeader(\"Content-Type\");if(r){var i=a.find((function(t){if(r.startsWith(t))return!0}));if(\"application/jwt\"==i)return void u(s).then(t,o);if(i)try{return void t(JSON.parse(s.responseText))}catch(t){return n.Log.error(\"JsonService.getJson: Error parsing JSON response\",t.message),void o(t)}}o(Error(\"Invalid response Content-Type: \"+r+\", from URL: \"+e))}else o(Error(s.statusText+\" (\"+s.status+\")\"))},s.onerror=function(){n.Log.error(\"JsonService.getJson: network error\"),o(Error(\"Network Error\"))},r&&(n.Log.debug(\"JsonService.getJson: token passed, setting Authorization header\"),s.setRequestHeader(\"Authorization\",\"Bearer \"+r)),s.send()}))},t.prototype.postForm=function t(e,r,i){var o=this;if(!e)throw n.Log.error(\"JsonService.postForm: No url passed\"),new Error(\"url\");return n.Log.debug(\"JsonService.postForm, url: \",e),new Promise((function(t,s){var a=new o._XMLHttpRequest;a.open(\"POST\",e);var u=o._contentTypes;a.onload=function(){if(n.Log.debug(\"JsonService.postForm: HTTP response received, status\",a.status),200!==a.status){if(400===a.status)if(i=a.getResponseHeader(\"Content-Type\"))if(u.find((function(t){if(i.startsWith(t))return!0})))try{var r=JSON.parse(a.responseText);if(r&&r.error)return n.Log.error(\"JsonService.postForm: Error from server: \",r.error),void s(new Error(r.error))}catch(t){return n.Log.error(\"JsonService.postForm: Error parsing JSON response\",t.message),void s(t)}s(Error(a.statusText+\" (\"+a.status+\")\"))}else{var i;if((i=a.getResponseHeader(\"Content-Type\"))&&u.find((function(t){if(i.startsWith(t))return!0})))try{return void t(JSON.parse(a.responseText))}catch(t){return n.Log.error(\"JsonService.postForm: Error parsing JSON response\",t.message),void s(t)}s(Error(\"Invalid response Content-Type: \"+i+\", from URL: \"+e))}},a.onerror=function(){n.Log.error(\"JsonService.postForm: network error\"),s(Error(\"Network Error\"))};var c=\"\";for(var h in r){var l=r[h];l&&(c.length>0&&(c+=\"&\"),c+=encodeURIComponent(h),c+=\"=\",c+=encodeURIComponent(l))}a.setRequestHeader(\"Content-Type\",\"application/x-www-form-urlencoded\"),void 0!==i&&a.setRequestHeader(\"Authorization\",\"Basic \"+btoa(i)),a.send(c)}))},t}()},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.SigninRequest=void 0;var n=r(0),i=r(3),o=r(13);e.SigninRequest=function(){function t(e){var r=e.url,s=e.client_id,a=e.redirect_uri,u=e.response_type,c=e.scope,h=e.authority,l=e.data,f=e.prompt,g=e.display,d=e.max_age,p=e.ui_locales,v=e.id_token_hint,y=e.login_hint,m=e.acr_values,_=e.resource,S=e.response_mode,b=e.request,w=e.request_uri,F=e.extraQueryParams,E=e.request_type,x=e.client_secret,A=e.extraTokenParams,k=e.skipUserInfo;if(function P(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),!r)throw n.Log.error(\"SigninRequest.ctor: No url passed\"),new Error(\"url\");if(!s)throw n.Log.error(\"SigninRequest.ctor: No client_id passed\"),new Error(\"client_id\");if(!a)throw n.Log.error(\"SigninRequest.ctor: No redirect_uri passed\"),new Error(\"redirect_uri\");if(!u)throw n.Log.error(\"SigninRequest.ctor: No response_type passed\"),new Error(\"response_type\");if(!c)throw n.Log.error(\"SigninRequest.ctor: No scope passed\"),new Error(\"scope\");if(!h)throw n.Log.error(\"SigninRequest.ctor: No authority passed\"),new Error(\"authority\");var C=t.isOidc(u),T=t.isCode(u);S||(S=t.isCode(u)?\"query\":null),this.state=new o.SigninState({nonce:C,data:l,client_id:s,authority:h,redirect_uri:a,code_verifier:T,request_type:E,response_mode:S,client_secret:x,scope:c,extraTokenParams:A,skipUserInfo:k}),r=i.UrlUtility.addQueryParam(r,\"client_id\",s),r=i.UrlUtility.addQueryParam(r,\"redirect_uri\",a),r=i.UrlUtility.addQueryParam(r,\"response_type\",u),r=i.UrlUtility.addQueryParam(r,\"scope\",c),r=i.UrlUtility.addQueryParam(r,\"state\",this.state.id),C&&(r=i.UrlUtility.addQueryParam(r,\"nonce\",this.state.nonce)),T&&(r=i.UrlUtility.addQueryParam(r,\"code_challenge\",this.state.code_challenge),r=i.UrlUtility.addQueryParam(r,\"code_challenge_method\",\"S256\"));var R={prompt:f,display:g,max_age:d,ui_locales:p,id_token_hint:v,login_hint:y,acr_values:m,resource:_,request:b,request_uri:w,response_mode:S};for(var I in R)R[I]&&(r=i.UrlUtility.addQueryParam(r,I,R[I]));for(var D in F)r=i.UrlUtility.addQueryParam(r,D,F[D]);this.url=r}return t.isOidc=function t(e){return!!e.split(/\\s+/g).filter((function(t){return\"id_token\"===t}))[0]},t.isOAuth=function t(e){return!!e.split(/\\s+/g).filter((function(t){return\"token\"===t}))[0]},t.isCode=function t(e){return!!e.split(/\\s+/g).filter((function(t){return\"code\"===t}))[0]},t}()},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.State=void 0;var n=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},r=e.id,n=e.data,i=e.created,s=e.request_type;a(this,t),this._id=r||(0,o.default)(),this._data=n,this._created=\"number\"==typeof i&&i>0?i:parseInt(Date.now()/1e3),this._request_type=s}return t.prototype.toStorageString=function t(){return i.Log.debug(\"State.toStorageString\"),JSON.stringify({id:this.id,data:this.data,created:this.created,request_type:this.request_type})},t.fromStorageString=function e(r){return i.Log.debug(\"State.fromStorageString\"),new t(JSON.parse(r))},t.clearStaleState=function e(r,n){var o=Date.now()/1e3-n;return r.getAllKeys().then((function(e){i.Log.debug(\"State.clearStaleState: got keys\",e);for(var n=[],s=function s(a){var c=e[a];u=r.get(c).then((function(e){var n=!1;if(e)try{var s=t.fromStorageString(e);i.Log.debug(\"State.clearStaleState: got item from key: \",c,s.created),s.created<=o&&(n=!0)}catch(t){i.Log.error(\"State.clearStaleState: Error parsing state for key\",c,t.message),n=!0}else i.Log.debug(\"State.clearStaleState: no item in storage for key: \",c),n=!0;if(n)return i.Log.debug(\"State.clearStaleState: removed item for key: \",c),r.remove(c)})),n.push(u)},a=0;a0&&void 0!==arguments[0]?arguments[0]:{};g(this,t),e instanceof o.OidcClientSettings?this._settings=e:this._settings=new o.OidcClientSettings(e)}return t.prototype.createSigninRequest=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=r.response_type,o=r.scope,s=r.redirect_uri,u=r.data,c=r.state,h=r.prompt,l=r.display,f=r.max_age,g=r.ui_locales,d=r.id_token_hint,p=r.login_hint,v=r.acr_values,y=r.resource,m=r.request,_=r.request_uri,S=r.response_mode,b=r.extraQueryParams,w=r.extraTokenParams,F=r.request_type,E=r.skipUserInfo,x=arguments[1];i.Log.debug(\"OidcClient.createSigninRequest\");var A=this._settings.client_id;n=n||this._settings.response_type,o=o||this._settings.scope,s=s||this._settings.redirect_uri,h=h||this._settings.prompt,l=l||this._settings.display,f=f||this._settings.max_age,g=g||this._settings.ui_locales,v=v||this._settings.acr_values,y=y||this._settings.resource,S=S||this._settings.response_mode,b=b||this._settings.extraQueryParams,w=w||this._settings.extraTokenParams;var k=this._settings.authority;return a.SigninRequest.isCode(n)&&\"code\"!==n?Promise.reject(new Error(\"OpenID Connect hybrid flow is not supported\")):this._metadataService.getAuthorizationEndpoint().then((function(t){i.Log.debug(\"OidcClient.createSigninRequest: Received authorization endpoint\",t);var r=new a.SigninRequest({url:t,client_id:A,redirect_uri:s,response_type:n,scope:o,data:u||c,authority:k,prompt:h,display:l,max_age:f,ui_locales:g,id_token_hint:d,login_hint:p,acr_values:v,resource:y,request:m,request_uri:_,extraQueryParams:b,extraTokenParams:w,request_type:F,response_mode:S,client_secret:e._settings.client_secret,skipUserInfo:E}),P=r.state;return(x=x||e._stateStore).set(P.id,P.toStorageString()).then((function(){return r}))}))},t.prototype.readSigninResponseState=function t(e,r){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];i.Log.debug(\"OidcClient.readSigninResponseState\");var o=\"query\"===this._settings.response_mode||!this._settings.response_mode&&a.SigninRequest.isCode(this._settings.response_type),s=o?\"?\":\"#\",c=new u.SigninResponse(e,s);if(!c.state)return i.Log.error(\"OidcClient.readSigninResponseState: No state in response\"),Promise.reject(new Error(\"No state in response\"));r=r||this._stateStore;var h=n?r.remove.bind(r):r.get.bind(r);return h(c.state).then((function(t){if(!t)throw i.Log.error(\"OidcClient.readSigninResponseState: No matching state found in storage\"),new Error(\"No matching state found in storage\");return{state:l.SigninState.fromStorageString(t),response:c}}))},t.prototype.processSigninResponse=function t(e,r){var n=this;return i.Log.debug(\"OidcClient.processSigninResponse\"),this.readSigninResponseState(e,r,!0).then((function(t){var e=t.state,r=t.response;return i.Log.debug(\"OidcClient.processSigninResponse: Received state from storage; validating response\"),n._validator.validateSigninResponse(e,r)}))},t.prototype.createSignoutRequest=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=r.id_token_hint,o=r.data,s=r.state,a=r.post_logout_redirect_uri,u=r.extraQueryParams,h=r.request_type,l=arguments[1];return i.Log.debug(\"OidcClient.createSignoutRequest\"),a=a||this._settings.post_logout_redirect_uri,u=u||this._settings.extraQueryParams,this._metadataService.getEndSessionEndpoint().then((function(t){if(!t)throw i.Log.error(\"OidcClient.createSignoutRequest: No end session endpoint url returned\"),new Error(\"no end session endpoint\");i.Log.debug(\"OidcClient.createSignoutRequest: Received end session endpoint\",t);var r=new c.SignoutRequest({url:t,id_token_hint:n,post_logout_redirect_uri:a,data:o||s,extraQueryParams:u,request_type:h}),f=r.state;return f&&(i.Log.debug(\"OidcClient.createSignoutRequest: Signout request has state to persist\"),(l=l||e._stateStore).set(f.id,f.toStorageString())),r}))},t.prototype.readSignoutResponseState=function t(e,r){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];i.Log.debug(\"OidcClient.readSignoutResponseState\");var o=new h.SignoutResponse(e);if(!o.state)return i.Log.debug(\"OidcClient.readSignoutResponseState: No state in response\"),o.error?(i.Log.warn(\"OidcClient.readSignoutResponseState: Response was error: \",o.error),Promise.reject(new s.ErrorResponse(o))):Promise.resolve({state:void 0,response:o});var a=o.state;r=r||this._stateStore;var u=n?r.remove.bind(r):r.get.bind(r);return u(a).then((function(t){if(!t)throw i.Log.error(\"OidcClient.readSignoutResponseState: No matching state found in storage\"),new Error(\"No matching state found in storage\");return{state:f.State.fromStorageString(t),response:o}}))},t.prototype.processSignoutResponse=function t(e,r){var n=this;return i.Log.debug(\"OidcClient.processSignoutResponse\"),this.readSignoutResponseState(e,r,!0).then((function(t){var e=t.state,r=t.response;return e?(i.Log.debug(\"OidcClient.processSignoutResponse: Received state from storage; validating response\"),n._validator.validateSignoutResponse(e,r)):(i.Log.debug(\"OidcClient.processSignoutResponse: No state from storage; skipping validating response\"),r)}))},t.prototype.clearStaleState=function t(e){return i.Log.debug(\"OidcClient.clearStaleState\"),e=e||this._stateStore,f.State.clearStaleState(e,this.settings.staleStateAge)},n(t,[{key:\"_stateStore\",get:function t(){return this.settings.stateStore}},{key:\"_validator\",get:function t(){return this.settings.validator}},{key:\"_metadataService\",get:function t(){return this.settings.metadataService}},{key:\"settings\",get:function t(){return this._settings}},{key:\"metadataService\",get:function t(){return this._metadataService}}]),t}()},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.TokenClient=void 0;var n=r(7),i=r(2),o=r(0);function s(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}e.TokenClient=function(){function t(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.JsonService,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.MetadataService;if(s(this,t),!e)throw o.Log.error(\"TokenClient.ctor: No settings passed\"),new Error(\"settings\");this._settings=e,this._jsonService=new r,this._metadataService=new a(this._settings)}return t.prototype.exchangeCode=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(r=Object.assign({},r)).grant_type=r.grant_type||\"authorization_code\",r.client_id=r.client_id||this._settings.client_id,r.client_secret=r.client_secret||this._settings.client_secret,r.redirect_uri=r.redirect_uri||this._settings.redirect_uri;var n=void 0,i=r._client_authentication||this._settings._client_authentication;return delete r._client_authentication,r.code?r.redirect_uri?r.code_verifier?r.client_id?r.client_secret||\"client_secret_basic\"!=i?(\"client_secret_basic\"==i&&(n=r.client_id+\":\"+r.client_secret,delete r.client_id,delete r.client_secret),this._metadataService.getTokenEndpoint(!1).then((function(t){return o.Log.debug(\"TokenClient.exchangeCode: Received token endpoint\"),e._jsonService.postForm(t,r,n).then((function(t){return o.Log.debug(\"TokenClient.exchangeCode: response received\"),t}))}))):(o.Log.error(\"TokenClient.exchangeCode: No client_secret passed\"),Promise.reject(new Error(\"A client_secret is required\"))):(o.Log.error(\"TokenClient.exchangeCode: No client_id passed\"),Promise.reject(new Error(\"A client_id is required\"))):(o.Log.error(\"TokenClient.exchangeCode: No code_verifier passed\"),Promise.reject(new Error(\"A code_verifier is required\"))):(o.Log.error(\"TokenClient.exchangeCode: No redirect_uri passed\"),Promise.reject(new Error(\"A redirect_uri is required\"))):(o.Log.error(\"TokenClient.exchangeCode: No code passed\"),Promise.reject(new Error(\"A code is required\")))},t.prototype.exchangeRefreshToken=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(r=Object.assign({},r)).grant_type=r.grant_type||\"refresh_token\",r.client_id=r.client_id||this._settings.client_id,r.client_secret=r.client_secret||this._settings.client_secret;var n=void 0,i=r._client_authentication||this._settings._client_authentication;return delete r._client_authentication,r.refresh_token?r.client_id?(\"client_secret_basic\"==i&&(n=r.client_id+\":\"+r.client_secret,delete r.client_id,delete r.client_secret),this._metadataService.getTokenEndpoint(!1).then((function(t){return o.Log.debug(\"TokenClient.exchangeRefreshToken: Received token endpoint\"),e._jsonService.postForm(t,r,n).then((function(t){return o.Log.debug(\"TokenClient.exchangeRefreshToken: response received\"),t}))}))):(o.Log.error(\"TokenClient.exchangeRefreshToken: No client_id passed\"),Promise.reject(new Error(\"A client_id is required\"))):(o.Log.error(\"TokenClient.exchangeRefreshToken: No refresh_token passed\"),Promise.reject(new Error(\"A refresh_token is required\")))},t}()},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ErrorResponse=void 0;var n=r(0);function i(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}function o(t,e){if(!t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!e||\"object\"!=typeof e&&\"function\"!=typeof e?t:e}e.ErrorResponse=function(t){function e(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},s=r.error,a=r.error_description,u=r.error_uri,c=r.state,h=r.session_state;if(i(this,e),!s)throw n.Log.error(\"No error passed to ErrorResponse\"),new Error(\"error\");var l=o(this,t.call(this,a||s));return l.name=\"ErrorResponse\",l.error=s,l.error_description=a,l.error_uri=u,l.state=c,l.session_state=h,l}return function r(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e}(Error)},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.SigninState=void 0;var n=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},n=r.nonce,i=r.authority,o=r.client_id,u=r.redirect_uri,l=r.code_verifier,f=r.response_mode,g=r.client_secret,d=r.scope,p=r.extraTokenParams,v=r.skipUserInfo;c(this,e);var y=h(this,t.call(this,arguments[0]));if(!0===n?y._nonce=(0,a.default)():n&&(y._nonce=n),!0===l?y._code_verifier=(0,a.default)()+(0,a.default)()+(0,a.default)():l&&(y._code_verifier=l),y.code_verifier){var m=s.JoseUtil.hashString(y.code_verifier,\"SHA256\");y._code_challenge=s.JoseUtil.hexToBase64Url(m)}return y._redirect_uri=u,y._authority=i,y._client_id=o,y._response_mode=f,y._client_secret=g,y._scope=d,y._extraTokenParams=p,y._skipUserInfo=v,y}return function r(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e.prototype.toStorageString=function t(){return i.Log.debug(\"SigninState.toStorageString\"),JSON.stringify({id:this.id,data:this.data,created:this.created,request_type:this.request_type,nonce:this.nonce,code_verifier:this.code_verifier,redirect_uri:this.redirect_uri,authority:this.authority,client_id:this.client_id,response_mode:this.response_mode,client_secret:this.client_secret,scope:this.scope,extraTokenParams:this.extraTokenParams,skipUserInfo:this.skipUserInfo})},e.fromStorageString=function t(r){return i.Log.debug(\"SigninState.fromStorageString\"),new e(JSON.parse(r))},n(e,[{key:\"nonce\",get:function t(){return this._nonce}},{key:\"authority\",get:function t(){return this._authority}},{key:\"client_id\",get:function t(){return this._client_id}},{key:\"redirect_uri\",get:function t(){return this._redirect_uri}},{key:\"code_verifier\",get:function t(){return this._code_verifier}},{key:\"code_challenge\",get:function t(){return this._code_challenge}},{key:\"response_mode\",get:function t(){return this._response_mode}},{key:\"client_secret\",get:function t(){return this._client_secret}},{key:\"scope\",get:function t(){return this._scope}},{key:\"extraTokenParams\",get:function t(){return this._extraTokenParams}},{key:\"skipUserInfo\",get:function t(){return this._skipUserInfo}}]),e}(o.State)},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function n(){return(\"undefined\"!=i&&null!==i&&void 0!==i.getRandomValues?o:s)().replace(/-/g,\"\")};var i=\"undefined\"!=typeof window?window.crypto||window.msCrypto:null;function o(){return([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,(function(t){return(t^i.getRandomValues(new Uint8Array(1))[0]&15>>t/4).toString(16)}))}function s(){return([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,(function(t){return(t^16*Math.random()>>t/4).toString(16)}))}t.exports=e.default},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.User=void 0;var n=function(){function t(t,e){for(var r=0;r0){var n=parseInt(Date.now()/1e3);this.expires_at=n+r}}},{key:\"expired\",get:function t(){var e=this.expires_in;if(void 0!==e)return e<=0}},{key:\"scopes\",get:function t(){return(this.scope||\"\").split(\" \")}}]),t}()},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AccessTokenEvents=void 0;var n=r(0),i=r(46);function o(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}e.AccessTokenEvents=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.accessTokenExpiringNotificationTime,n=void 0===r?60:r,s=e.accessTokenExpiringTimer,a=void 0===s?new i.Timer(\"Access token expiring\"):s,u=e.accessTokenExpiredTimer,c=void 0===u?new i.Timer(\"Access token expired\"):u;o(this,t),this._accessTokenExpiringNotificationTime=n,this._accessTokenExpiring=a,this._accessTokenExpired=c}return t.prototype.load=function t(e){if(e.access_token&&void 0!==e.expires_in){var r=e.expires_in;if(n.Log.debug(\"AccessTokenEvents.load: access token present, remaining duration:\",r),r>0){var i=r-this._accessTokenExpiringNotificationTime;i<=0&&(i=1),n.Log.debug(\"AccessTokenEvents.load: registering expiring timer in:\",i),this._accessTokenExpiring.init(i)}else n.Log.debug(\"AccessTokenEvents.load: canceling existing expiring timer becase we're past expiration.\"),this._accessTokenExpiring.cancel();var o=r+1;n.Log.debug(\"AccessTokenEvents.load: registering expired timer in:\",o),this._accessTokenExpired.init(o)}else this._accessTokenExpiring.cancel(),this._accessTokenExpired.cancel()},t.prototype.unload=function t(){n.Log.debug(\"AccessTokenEvents.unload: canceling existing access token timers\"),this._accessTokenExpiring.cancel(),this._accessTokenExpired.cancel()},t.prototype.addAccessTokenExpiring=function t(e){this._accessTokenExpiring.addHandler(e)},t.prototype.removeAccessTokenExpiring=function t(e){this._accessTokenExpiring.removeHandler(e)},t.prototype.addAccessTokenExpired=function t(e){this._accessTokenExpired.addHandler(e)},t.prototype.removeAccessTokenExpired=function t(e){this._accessTokenExpired.removeHandler(e)},t}()},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Event=void 0;var n=r(0);e.Event=function(){function t(e){!function r(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this._name=e,this._callbacks=[]}return t.prototype.addHandler=function t(e){this._callbacks.push(e)},t.prototype.removeHandler=function t(e){var r=this._callbacks.findIndex((function(t){return t===e}));r>=0&&this._callbacks.splice(r,1)},t.prototype.raise=function t(){n.Log.debug(\"Event: Raising event: \"+this._name);for(var e=0;e1&&void 0!==arguments[1]?arguments[1]:o.CheckSessionIFrame,u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:s.Global.timer;if(a(this,t),!e)throw i.Log.error(\"SessionMonitor.ctor: No user manager passed to SessionMonitor\"),new Error(\"userManager\");this._userManager=e,this._CheckSessionIFrameCtor=n,this._timer=u,this._userManager.events.addUserLoaded(this._start.bind(this)),this._userManager.events.addUserUnloaded(this._stop.bind(this)),Promise.resolve(this._userManager.getUser().then((function(t){t?r._start(t):r._settings.monitorAnonymousSession&&r._userManager.querySessionStatus().then((function(t){var e={session_state:t.session_state};t.sub&&t.sid&&(e.profile={sub:t.sub,sid:t.sid}),r._start(e)})).catch((function(t){i.Log.error(\"SessionMonitor ctor: error from querySessionStatus:\",t.message)}))})).catch((function(t){i.Log.error(\"SessionMonitor ctor: error from getUser:\",t.message)})))}return t.prototype._start=function t(e){var r=this,n=e.session_state;n&&(e.profile?(this._sub=e.profile.sub,this._sid=e.profile.sid,i.Log.debug(\"SessionMonitor._start: session_state:\",n,\", sub:\",this._sub)):(this._sub=void 0,this._sid=void 0,i.Log.debug(\"SessionMonitor._start: session_state:\",n,\", anonymous user\")),this._checkSessionIFrame?this._checkSessionIFrame.start(n):this._metadataService.getCheckSessionIframe().then((function(t){if(t){i.Log.debug(\"SessionMonitor._start: Initializing check session iframe\");var e=r._client_id,o=r._checkSessionInterval,s=r._stopCheckSessionOnError;r._checkSessionIFrame=new r._CheckSessionIFrameCtor(r._callback.bind(r),e,t,o,s),r._checkSessionIFrame.load().then((function(){r._checkSessionIFrame.start(n)}))}else i.Log.warn(\"SessionMonitor._start: No check session iframe found in the metadata\")})).catch((function(t){i.Log.error(\"SessionMonitor._start: Error from getCheckSessionIframe:\",t.message)})))},t.prototype._stop=function t(){var e=this;if(this._sub=void 0,this._sid=void 0,this._checkSessionIFrame&&(i.Log.debug(\"SessionMonitor._stop\"),this._checkSessionIFrame.stop()),this._settings.monitorAnonymousSession)var r=this._timer.setInterval((function(){e._timer.clearInterval(r),e._userManager.querySessionStatus().then((function(t){var r={session_state:t.session_state};t.sub&&t.sid&&(r.profile={sub:t.sub,sid:t.sid}),e._start(r)})).catch((function(t){i.Log.error(\"SessionMonitor: error from querySessionStatus:\",t.message)}))}),1e3)},t.prototype._callback=function t(){var e=this;this._userManager.querySessionStatus().then((function(t){var r=!0;t?t.sub===e._sub?(r=!1,e._checkSessionIFrame.start(t.session_state),t.sid===e._sid?i.Log.debug(\"SessionMonitor._callback: Same sub still logged in at OP, restarting check session iframe; session_state:\",t.session_state):(i.Log.debug(\"SessionMonitor._callback: Same sub still logged in at OP, session state has changed, restarting check session iframe; session_state:\",t.session_state),e._userManager.events._raiseUserSessionChanged())):i.Log.debug(\"SessionMonitor._callback: Different subject signed into OP:\",t.sub):i.Log.debug(\"SessionMonitor._callback: Subject no longer signed into OP\"),r&&(e._sub?(i.Log.debug(\"SessionMonitor._callback: SessionMonitor._callback; raising signed out event\"),e._userManager.events._raiseUserSignedOut()):(i.Log.debug(\"SessionMonitor._callback: SessionMonitor._callback; raising signed in event\"),e._userManager.events._raiseUserSignedIn()))})).catch((function(t){e._sub&&(i.Log.debug(\"SessionMonitor._callback: Error calling queryCurrentSigninSession; raising signed out event\",t.message),e._userManager.events._raiseUserSignedOut())}))},n(t,[{key:\"_settings\",get:function t(){return this._userManager.settings}},{key:\"_metadataService\",get:function t(){return this._userManager.metadataService}},{key:\"_client_id\",get:function t(){return this._settings.client_id}},{key:\"_checkSessionInterval\",get:function t(){return this._settings.checkSessionInterval}},{key:\"_stopCheckSessionOnError\",get:function t(){return this._settings.stopCheckSessionOnError}}]),t}()},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CheckSessionIFrame=void 0;var n=r(0);function i(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}e.CheckSessionIFrame=function(){function t(e,r,n,o){var s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4];i(this,t),this._callback=e,this._client_id=r,this._url=n,this._interval=o||2e3,this._stopOnError=s;var a=n.indexOf(\"/\",n.indexOf(\"//\")+2);this._frame_origin=n.substr(0,a),this._frame=window.document.createElement(\"iframe\"),this._frame.style.visibility=\"hidden\",this._frame.style.position=\"absolute\",this._frame.style.display=\"none\",this._frame.width=0,this._frame.height=0,this._frame.src=n}return t.prototype.load=function t(){var e=this;return new Promise((function(t){e._frame.onload=function(){t()},window.document.body.appendChild(e._frame),e._boundMessageEvent=e._message.bind(e),window.addEventListener(\"message\",e._boundMessageEvent,!1)}))},t.prototype._message=function t(e){e.origin===this._frame_origin&&e.source===this._frame.contentWindow&&(\"error\"===e.data?(n.Log.error(\"CheckSessionIFrame: error message from check session op iframe\"),this._stopOnError&&this.stop()):\"changed\"===e.data?(n.Log.debug(\"CheckSessionIFrame: changed message from check session op iframe\"),this.stop(),this._callback()):n.Log.debug(\"CheckSessionIFrame: \"+e.data+\" message from check session op iframe\"))},t.prototype.start=function t(e){var r=this;if(this._session_state!==e){n.Log.debug(\"CheckSessionIFrame.start\"),this.stop(),this._session_state=e;var i=function t(){r._frame.contentWindow.postMessage(r._client_id+\" \"+r._session_state,r._frame_origin)};i(),this._timer=window.setInterval(i,this._interval)}},t.prototype.stop=function t(){this._session_state=null,this._timer&&(n.Log.debug(\"CheckSessionIFrame.stop\"),window.clearInterval(this._timer),this._timer=null)},t}()},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.TokenRevocationClient=void 0;var n=r(0),i=r(2),o=r(1);function s(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}var a=\"access_token\",u=\"refresh_token\";e.TokenRevocationClient=function(){function t(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:o.Global.XMLHttpRequest,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.MetadataService;if(s(this,t),!e)throw n.Log.error(\"TokenRevocationClient.ctor: No settings provided\"),new Error(\"No settings provided.\");this._settings=e,this._XMLHttpRequestCtor=r,this._metadataService=new a(this._settings)}return t.prototype.revoke=function t(e,r){var i=this,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"access_token\";if(!e)throw n.Log.error(\"TokenRevocationClient.revoke: No token provided\"),new Error(\"No token provided.\");if(o!==a&&o!=u)throw n.Log.error(\"TokenRevocationClient.revoke: Invalid token type\"),new Error(\"Invalid token type.\");return this._metadataService.getRevocationEndpoint().then((function(t){if(t){n.Log.debug(\"TokenRevocationClient.revoke: Revoking \"+o);var s=i._settings.client_id,a=i._settings.client_secret;return i._revoke(t,s,a,e,o)}if(r)throw n.Log.error(\"TokenRevocationClient.revoke: Revocation not supported\"),new Error(\"Revocation not supported\")}))},t.prototype._revoke=function t(e,r,i,o,s){var a=this;return new Promise((function(t,u){var c=new a._XMLHttpRequestCtor;c.open(\"POST\",e),c.onload=function(){n.Log.debug(\"TokenRevocationClient.revoke: HTTP response received, status\",c.status),200===c.status?t():u(Error(c.statusText+\" (\"+c.status+\")\"))},c.onerror=function(){n.Log.debug(\"TokenRevocationClient.revoke: Network Error.\"),u(\"Network Error\")};var h=\"client_id=\"+encodeURIComponent(r);i&&(h+=\"&client_secret=\"+encodeURIComponent(i)),h+=\"&token_type_hint=\"+encodeURIComponent(s),h+=\"&token=\"+encodeURIComponent(o),c.setRequestHeader(\"Content-Type\",\"application/x-www-form-urlencoded\"),c.send(h)}))},t}()},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CordovaPopupWindow=void 0;var n=function(){function t(t,e){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:o.MetadataService,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:s.UserInfoService,u=arguments.length>3&&void 0!==arguments[3]?arguments[3]:c.JoseUtil,l=arguments.length>4&&void 0!==arguments[4]?arguments[4]:a.TokenClient;if(h(this,t),!e)throw i.Log.error(\"ResponseValidator.ctor: No settings passed to ResponseValidator\"),new Error(\"settings\");this._settings=e,this._metadataService=new r(this._settings),this._userInfoService=new n(this._settings),this._joseUtil=u,this._tokenClient=new l(this._settings)}return t.prototype.validateSigninResponse=function t(e,r){var n=this;return i.Log.debug(\"ResponseValidator.validateSigninResponse\"),this._processSigninParams(e,r).then((function(t){return i.Log.debug(\"ResponseValidator.validateSigninResponse: state processed\"),n._validateTokens(e,t).then((function(t){return i.Log.debug(\"ResponseValidator.validateSigninResponse: tokens validated\"),n._processClaims(e,t).then((function(t){return i.Log.debug(\"ResponseValidator.validateSigninResponse: claims processed\"),t}))}))}))},t.prototype.validateSignoutResponse=function t(e,r){return e.id!==r.state?(i.Log.error(\"ResponseValidator.validateSignoutResponse: State does not match\"),Promise.reject(new Error(\"State does not match\"))):(i.Log.debug(\"ResponseValidator.validateSignoutResponse: state validated\"),r.state=e.data,r.error?(i.Log.warn(\"ResponseValidator.validateSignoutResponse: Response was error\",r.error),Promise.reject(new u.ErrorResponse(r))):Promise.resolve(r))},t.prototype._processSigninParams=function t(e,r){if(e.id!==r.state)return i.Log.error(\"ResponseValidator._processSigninParams: State does not match\"),Promise.reject(new Error(\"State does not match\"));if(!e.client_id)return i.Log.error(\"ResponseValidator._processSigninParams: No client_id on state\"),Promise.reject(new Error(\"No client_id on state\"));if(!e.authority)return i.Log.error(\"ResponseValidator._processSigninParams: No authority on state\"),Promise.reject(new Error(\"No authority on state\"));if(this._settings.authority){if(this._settings.authority&&this._settings.authority!==e.authority)return i.Log.error(\"ResponseValidator._processSigninParams: authority mismatch on settings vs. signin state\"),Promise.reject(new Error(\"authority mismatch on settings vs. signin state\"))}else this._settings.authority=e.authority;if(this._settings.client_id){if(this._settings.client_id&&this._settings.client_id!==e.client_id)return i.Log.error(\"ResponseValidator._processSigninParams: client_id mismatch on settings vs. signin state\"),Promise.reject(new Error(\"client_id mismatch on settings vs. signin state\"))}else this._settings.client_id=e.client_id;return i.Log.debug(\"ResponseValidator._processSigninParams: state validated\"),r.state=e.data,r.error?(i.Log.warn(\"ResponseValidator._processSigninParams: Response was error\",r.error),Promise.reject(new u.ErrorResponse(r))):e.nonce&&!r.id_token?(i.Log.error(\"ResponseValidator._processSigninParams: Expecting id_token in response\"),Promise.reject(new Error(\"No id_token in response\"))):!e.nonce&&r.id_token?(i.Log.error(\"ResponseValidator._processSigninParams: Not expecting id_token in response\"),Promise.reject(new Error(\"Unexpected id_token in response\"))):e.code_verifier&&!r.code?(i.Log.error(\"ResponseValidator._processSigninParams: Expecting code in response\"),Promise.reject(new Error(\"No code in response\"))):!e.code_verifier&&r.code?(i.Log.error(\"ResponseValidator._processSigninParams: Not expecting code in response\"),Promise.reject(new Error(\"Unexpected code in response\"))):(r.scope||(r.scope=e.scope),Promise.resolve(r))},t.prototype._processClaims=function t(e,r){var n=this;if(r.isOpenIdConnect){if(i.Log.debug(\"ResponseValidator._processClaims: response is OIDC, processing claims\"),r.profile=this._filterProtocolClaims(r.profile),!0!==e.skipUserInfo&&this._settings.loadUserInfo&&r.access_token)return i.Log.debug(\"ResponseValidator._processClaims: loading user info\"),this._userInfoService.getClaims(r.access_token).then((function(t){return i.Log.debug(\"ResponseValidator._processClaims: user info claims received from user info endpoint\"),t.sub!==r.profile.sub?(i.Log.error(\"ResponseValidator._processClaims: sub from user info endpoint does not match sub in id_token\"),Promise.reject(new Error(\"sub from user info endpoint does not match sub in id_token\"))):(r.profile=n._mergeClaims(r.profile,t),i.Log.debug(\"ResponseValidator._processClaims: user info claims received, updated profile:\",r.profile),r)}));i.Log.debug(\"ResponseValidator._processClaims: not loading user info\")}else i.Log.debug(\"ResponseValidator._processClaims: response is not OIDC, not processing claims\");return Promise.resolve(r)},t.prototype._mergeClaims=function t(e,r){var i=Object.assign({},e);for(var o in r){var s=r[o];Array.isArray(s)||(s=[s]);for(var a=0;a1)return i.Log.error(\"ResponseValidator._validateIdToken: No kid found in id_token and more than one key found in metadata\"),Promise.reject(new Error(\"No kid found in id_token and more than one key found in metadata\"));o=t[0]}return Promise.resolve(o)}))},t.prototype._getSigningKeyForJwtWithSingleRetry=function t(e){var r=this;return this._getSigningKeyForJwt(e).then((function(t){return t?Promise.resolve(t):(r._metadataService.resetSigningKeys(),r._getSigningKeyForJwt(e))}))},t.prototype._validateIdToken=function t(e,r){var n=this;if(!e.nonce)return i.Log.error(\"ResponseValidator._validateIdToken: No nonce on state\"),Promise.reject(new Error(\"No nonce on state\"));var o=this._joseUtil.parseJwt(r.id_token);return o&&o.header&&o.payload?e.nonce!==o.payload.nonce?(i.Log.error(\"ResponseValidator._validateIdToken: Invalid nonce in id_token\"),Promise.reject(new Error(\"Invalid nonce in id_token\"))):this._metadataService.getIssuer().then((function(t){return i.Log.debug(\"ResponseValidator._validateIdToken: Received issuer\"),n._getSigningKeyForJwtWithSingleRetry(o).then((function(s){if(!s)return i.Log.error(\"ResponseValidator._validateIdToken: No key matching kid or alg found in signing keys\"),Promise.reject(new Error(\"No key matching kid or alg found in signing keys\"));var a=e.client_id,u=n._settings.clockSkew;return i.Log.debug(\"ResponseValidator._validateIdToken: Validaing JWT; using clock skew (in seconds) of: \",u),n._joseUtil.validateJwt(r.id_token,s,t,a,u).then((function(){return i.Log.debug(\"ResponseValidator._validateIdToken: JWT validation successful\"),o.payload.sub?(r.profile=o.payload,r):(i.Log.error(\"ResponseValidator._validateIdToken: No sub present in id_token\"),Promise.reject(new Error(\"No sub present in id_token\")))}))}))})):(i.Log.error(\"ResponseValidator._validateIdToken: Failed to parse id_token\",o),Promise.reject(new Error(\"Failed to parse id_token\")))},t.prototype._filterByAlg=function t(e,r){var n=null;if(r.startsWith(\"RS\"))n=\"RSA\";else if(r.startsWith(\"PS\"))n=\"PS\";else{if(!r.startsWith(\"ES\"))return i.Log.debug(\"ResponseValidator._filterByAlg: alg not supported: \",r),[];n=\"EC\"}return i.Log.debug(\"ResponseValidator._filterByAlg: Looking for keys that match kty: \",n),e=e.filter((function(t){return t.kty===n})),i.Log.debug(\"ResponseValidator._filterByAlg: Number of keys that match kty: \",n,e.length),e},t.prototype._validateAccessToken=function t(e){if(!e.profile)return i.Log.error(\"ResponseValidator._validateAccessToken: No profile loaded from id_token\"),Promise.reject(new Error(\"No profile loaded from id_token\"));if(!e.profile.at_hash)return i.Log.error(\"ResponseValidator._validateAccessToken: No at_hash in id_token\"),Promise.reject(new Error(\"No at_hash in id_token\"));if(!e.id_token)return i.Log.error(\"ResponseValidator._validateAccessToken: No id_token\"),Promise.reject(new Error(\"No id_token\"));var r=this._joseUtil.parseJwt(e.id_token);if(!r||!r.header)return i.Log.error(\"ResponseValidator._validateAccessToken: Failed to parse id_token\",r),Promise.reject(new Error(\"Failed to parse id_token\"));var n=r.header.alg;if(!n||5!==n.length)return i.Log.error(\"ResponseValidator._validateAccessToken: Unsupported alg:\",n),Promise.reject(new Error(\"Unsupported alg: \"+n));var o=n.substr(2,3);if(!o)return i.Log.error(\"ResponseValidator._validateAccessToken: Unsupported alg:\",n,o),Promise.reject(new Error(\"Unsupported alg: \"+n));if(256!==(o=parseInt(o))&&384!==o&&512!==o)return i.Log.error(\"ResponseValidator._validateAccessToken: Unsupported alg:\",n,o),Promise.reject(new Error(\"Unsupported alg: \"+n));var s=\"sha\"+o,a=this._joseUtil.hashString(e.access_token,s);if(!a)return i.Log.error(\"ResponseValidator._validateAccessToken: access_token hash failed:\",s),Promise.reject(new Error(\"Failed to validate at_hash\"));var u=a.substr(0,a.length/2),c=this._joseUtil.hexToBase64Url(u);return c!==e.profile.at_hash?(i.Log.error(\"ResponseValidator._validateAccessToken: Failed to validate at_hash\",c,e.profile.at_hash),Promise.reject(new Error(\"Failed to validate at_hash\"))):(i.Log.debug(\"ResponseValidator._validateAccessToken: success\"),Promise.resolve(e))},t}()},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.UserInfoService=void 0;var n=r(7),i=r(2),o=r(0),s=r(4);function a(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}e.UserInfoService=function(){function t(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.JsonService,u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.MetadataService,c=arguments.length>3&&void 0!==arguments[3]?arguments[3]:s.JoseUtil;if(a(this,t),!e)throw o.Log.error(\"UserInfoService.ctor: No settings passed\"),new Error(\"settings\");this._settings=e,this._jsonService=new r(void 0,void 0,this._getClaimsFromJwt.bind(this)),this._metadataService=new u(this._settings),this._joseUtil=c}return t.prototype.getClaims=function t(e){var r=this;return e?this._metadataService.getUserInfoEndpoint().then((function(t){return o.Log.debug(\"UserInfoService.getClaims: received userinfo url\",t),r._jsonService.getJson(t,e).then((function(t){return o.Log.debug(\"UserInfoService.getClaims: claims received\",t),t}))})):(o.Log.error(\"UserInfoService.getClaims: No token passed\"),Promise.reject(new Error(\"A token is required\")))},t.prototype._getClaimsFromJwt=function t(e){var r=this;try{var n=this._joseUtil.parseJwt(e.responseText);if(!n||!n.header||!n.payload)return o.Log.error(\"UserInfoService._getClaimsFromJwt: Failed to parse JWT\",n),Promise.reject(new Error(\"Failed to parse id_token\"));var i=n.header.kid,s=void 0;switch(this._settings.userInfoJwtIssuer){case\"OP\":s=this._metadataService.getIssuer();break;case\"ANY\":s=Promise.resolve(n.payload.iss);break;default:s=Promise.resolve(this._settings.userInfoJwtIssuer)}return s.then((function(t){return o.Log.debug(\"UserInfoService._getClaimsFromJwt: Received issuer:\"+t),r._metadataService.getSigningKeys().then((function(s){if(!s)return o.Log.error(\"UserInfoService._getClaimsFromJwt: No signing keys from metadata\"),Promise.reject(new Error(\"No signing keys from metadata\"));o.Log.debug(\"UserInfoService._getClaimsFromJwt: Received signing keys\");var a=void 0;if(i)a=s.filter((function(t){return t.kid===i}))[0];else{if((s=r._filterByAlg(s,n.header.alg)).length>1)return o.Log.error(\"UserInfoService._getClaimsFromJwt: No kid found in id_token and more than one key found in metadata\"),Promise.reject(new Error(\"No kid found in id_token and more than one key found in metadata\"));a=s[0]}if(!a)return o.Log.error(\"UserInfoService._getClaimsFromJwt: No key matching kid or alg found in signing keys\"),Promise.reject(new Error(\"No key matching kid or alg found in signing keys\"));var u=r._settings.client_id,c=r._settings.clockSkew;return o.Log.debug(\"UserInfoService._getClaimsFromJwt: Validaing JWT; using clock skew (in seconds) of: \",c),r._joseUtil.validateJwt(e.responseText,a,t,u,c,void 0,!0).then((function(){return o.Log.debug(\"UserInfoService._getClaimsFromJwt: JWT validation successful\"),n.payload}))}))}))}catch(t){return o.Log.error(\"UserInfoService._getClaimsFromJwt: Error parsing JWT response\",t.message),void reject(t)}},t.prototype._filterByAlg=function t(e,r){var n=null;if(r.startsWith(\"RS\"))n=\"RSA\";else if(r.startsWith(\"PS\"))n=\"PS\";else{if(!r.startsWith(\"ES\"))return o.Log.debug(\"UserInfoService._filterByAlg: alg not supported: \",r),[];n=\"EC\"}return o.Log.debug(\"UserInfoService._filterByAlg: Looking for keys that match kty: \",n),e=e.filter((function(t){return t.kty===n})),o.Log.debug(\"UserInfoService._filterByAlg: Number of keys that match kty: \",n,e.length),e},t}()},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AllowedSigningAlgs=e.b64tohex=e.hextob64u=e.crypto=e.X509=e.KeyUtil=e.jws=void 0;var n=r(27);e.jws=n.jws,e.KeyUtil=n.KEYUTIL,e.X509=n.X509,e.crypto=n.crypto,e.hextob64u=n.hextob64u,e.b64tohex=n.b64tohex,e.AllowedSigningAlgs=[\"RS256\",\"RS384\",\"RS512\",\"PS256\",\"PS384\",\"PS512\",\"ES256\",\"ES384\",\"ES512\"]},function(t,e,r){\"use strict\";(function(t){Object.defineProperty(e,\"__esModule\",{value:!0});var r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},n={userAgent:!1},i={};\n/*!\nCopyright (c) 2011, Yahoo! Inc. All rights reserved.\nCode licensed under the BSD License:\nhttp://developer.yahoo.com/yui/license.html\nversion: 2.9.0\n*/\nif(void 0===o)var o={};o.lang={extend:function t(e,r,i){if(!r||!e)throw new Error(\"YAHOO.lang.extend failed, please check that all dependencies are included.\");var o=function t(){};if(o.prototype=r.prototype,e.prototype=new o,e.prototype.constructor=e,e.superclass=r.prototype,r.prototype.constructor==Object.prototype.constructor&&(r.prototype.constructor=r),i){var s;for(s in i)e.prototype[s]=i[s];var a=function t(){},u=[\"toString\",\"valueOf\"];try{/MSIE/.test(n.userAgent)&&(a=function t(e,r){for(s=0;s>>2]>>>24-s%4*8&255;r[i+s>>>2]|=a<<24-(i+s)%4*8}else for(s=0;s>>2]=n[s>>>2];return this.sigBytes+=o,this},clamp:function t(){var e=this.words,r=this.sigBytes;e[r>>>2]&=4294967295<<32-r%4*8,e.length=s.ceil(r/4)},clone:function t(){var e=c.clone.call(this);return e.words=this.words.slice(0),e},random:function t(e){for(var r=[],n=0;n>>2]>>>24-o%4*8&255;i.push((s>>>4).toString(16)),i.push((15&s).toString(16))}return i.join(\"\")},parse:function t(e){for(var r=e.length,n=[],i=0;i>>3]|=parseInt(e.substr(i,2),16)<<24-i%8*4;return new h.init(n,r/2)}},g=l.Latin1={stringify:function t(e){for(var r=e.words,n=e.sigBytes,i=[],o=0;o>>2]>>>24-o%4*8&255;i.push(String.fromCharCode(s))}return i.join(\"\")},parse:function t(e){for(var r=e.length,n=[],i=0;i>>2]|=(255&e.charCodeAt(i))<<24-i%4*8;return new h.init(n,r)}},d=l.Utf8={stringify:function t(e){try{return decodeURIComponent(escape(g.stringify(e)))}catch(t){throw new Error(\"Malformed UTF-8 data\")}},parse:function t(e){return g.parse(unescape(encodeURIComponent(e)))}},p=u.BufferedBlockAlgorithm=c.extend({reset:function t(){this._data=new h.init,this._nDataBytes=0},_append:function t(e){\"string\"==typeof e&&(e=d.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function t(e){var r=this._data,n=r.words,i=r.sigBytes,o=this.blockSize,a=i/(4*o),u=(a=e?s.ceil(a):s.max((0|a)-this._minBufferSize,0))*o,c=s.min(4*u,i);if(u){for(var l=0;l>>2]>>>24-o%4*8&255)<<16|(r[o+1>>>2]>>>24-(o+1)%4*8&255)<<8|r[o+2>>>2]>>>24-(o+2)%4*8&255,a=0;4>a&&o+.75*a>>6*(3-a)&63));if(r=i.charAt(64))for(;e.length%4;)e.push(r);return e.join(\"\")},parse:function t(r){var n=r.length,i=this._map;(o=i.charAt(64))&&(-1!=(o=r.indexOf(o))&&(n=o));for(var o=[],s=0,a=0;a>>6-a%4*2;o[s>>>2]|=(u|c)<<24-s%4*8,s++}return e.create(o,s)},_map:\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\"}}(),function(t){for(var e=y,r=(i=e.lib).WordArray,n=i.Hasher,i=e.algo,o=[],s=[],a=function t(e){return 4294967296*(e-(0|e))|0},u=2,c=0;64>c;){var h;t:{h=u;for(var l=t.sqrt(h),f=2;f<=l;f++)if(!(h%f)){h=!1;break t}h=!0}h&&(8>c&&(o[c]=a(t.pow(u,.5))),s[c]=a(t.pow(u,1/3)),c++),u++}var g=[];i=i.SHA256=n.extend({_doReset:function t(){this._hash=new r.init(o.slice(0))},_doProcessBlock:function t(e,r){for(var n=this._hash.words,i=n[0],o=n[1],a=n[2],u=n[3],c=n[4],h=n[5],l=n[6],f=n[7],d=0;64>d;d++){if(16>d)g[d]=0|e[r+d];else{var p=g[d-15],v=g[d-2];g[d]=((p<<25|p>>>7)^(p<<14|p>>>18)^p>>>3)+g[d-7]+((v<<15|v>>>17)^(v<<13|v>>>19)^v>>>10)+g[d-16]}p=f+((c<<26|c>>>6)^(c<<21|c>>>11)^(c<<7|c>>>25))+(c&h^~c&l)+s[d]+g[d],v=((i<<30|i>>>2)^(i<<19|i>>>13)^(i<<10|i>>>22))+(i&o^i&a^o&a),f=l,l=h,h=c,c=u+p|0,u=a,a=o,o=i,i=p+v|0}n[0]=n[0]+i|0,n[1]=n[1]+o|0,n[2]=n[2]+a|0,n[3]=n[3]+u|0,n[4]=n[4]+c|0,n[5]=n[5]+h|0,n[6]=n[6]+l|0,n[7]=n[7]+f|0},_doFinalize:function e(){var r=this._data,n=r.words,i=8*this._nDataBytes,o=8*r.sigBytes;return n[o>>>5]|=128<<24-o%32,n[14+(o+64>>>9<<4)]=t.floor(i/4294967296),n[15+(o+64>>>9<<4)]=i,r.sigBytes=4*n.length,this._process(),this._hash},clone:function t(){var e=n.clone.call(this);return e._hash=this._hash.clone(),e}});e.SHA256=n._createHelper(i),e.HmacSHA256=n._createHmacHelper(i)}(Math),function(){function t(){return n.create.apply(n,arguments)}for(var e=y,r=e.lib.Hasher,n=(o=e.x64).Word,i=o.WordArray,o=e.algo,s=[t(1116352408,3609767458),t(1899447441,602891725),t(3049323471,3964484399),t(3921009573,2173295548),t(961987163,4081628472),t(1508970993,3053834265),t(2453635748,2937671579),t(2870763221,3664609560),t(3624381080,2734883394),t(310598401,1164996542),t(607225278,1323610764),t(1426881987,3590304994),t(1925078388,4068182383),t(2162078206,991336113),t(2614888103,633803317),t(3248222580,3479774868),t(3835390401,2666613458),t(4022224774,944711139),t(264347078,2341262773),t(604807628,2007800933),t(770255983,1495990901),t(1249150122,1856431235),t(1555081692,3175218132),t(1996064986,2198950837),t(2554220882,3999719339),t(2821834349,766784016),t(2952996808,2566594879),t(3210313671,3203337956),t(3336571891,1034457026),t(3584528711,2466948901),t(113926993,3758326383),t(338241895,168717936),t(666307205,1188179964),t(773529912,1546045734),t(1294757372,1522805485),t(1396182291,2643833823),t(1695183700,2343527390),t(1986661051,1014477480),t(2177026350,1206759142),t(2456956037,344077627),t(2730485921,1290863460),t(2820302411,3158454273),t(3259730800,3505952657),t(3345764771,106217008),t(3516065817,3606008344),t(3600352804,1432725776),t(4094571909,1467031594),t(275423344,851169720),t(430227734,3100823752),t(506948616,1363258195),t(659060556,3750685593),t(883997877,3785050280),t(958139571,3318307427),t(1322822218,3812723403),t(1537002063,2003034995),t(1747873779,3602036899),t(1955562222,1575990012),t(2024104815,1125592928),t(2227730452,2716904306),t(2361852424,442776044),t(2428436474,593698344),t(2756734187,3733110249),t(3204031479,2999351573),t(3329325298,3815920427),t(3391569614,3928383900),t(3515267271,566280711),t(3940187606,3454069534),t(4118630271,4000239992),t(116418474,1914138554),t(174292421,2731055270),t(289380356,3203993006),t(460393269,320620315),t(685471733,587496836),t(852142971,1086792851),t(1017036298,365543100),t(1126000580,2618297676),t(1288033470,3409855158),t(1501505948,4234509866),t(1607167915,987167468),t(1816402316,1246189591)],a=[],u=0;80>u;u++)a[u]=t();o=o.SHA512=r.extend({_doReset:function t(){this._hash=new i.init([new n.init(1779033703,4089235720),new n.init(3144134277,2227873595),new n.init(1013904242,4271175723),new n.init(2773480762,1595750129),new n.init(1359893119,2917565137),new n.init(2600822924,725511199),new n.init(528734635,4215389547),new n.init(1541459225,327033209)])},_doProcessBlock:function t(e,r){for(var n=(f=this._hash.words)[0],i=f[1],o=f[2],u=f[3],c=f[4],h=f[5],l=f[6],f=f[7],g=n.high,d=n.low,p=i.high,v=i.low,y=o.high,m=o.low,_=u.high,S=u.low,b=c.high,w=c.low,F=h.high,E=h.low,x=l.high,A=l.low,k=f.high,P=f.low,C=g,T=d,R=p,I=v,D=y,L=m,N=_,U=S,B=b,O=w,j=F,M=E,H=x,V=A,K=k,q=P,J=0;80>J;J++){var W=a[J];if(16>J)var z=W.high=0|e[r+2*J],Y=W.low=0|e[r+2*J+1];else{z=((Y=(z=a[J-15]).high)>>>1|(G=z.low)<<31)^(Y>>>8|G<<24)^Y>>>7;var G=(G>>>1|Y<<31)^(G>>>8|Y<<24)^(G>>>7|Y<<25),X=((Y=(X=a[J-2]).high)>>>19|($=X.low)<<13)^(Y<<3|$>>>29)^Y>>>6,$=($>>>19|Y<<13)^($<<3|Y>>>29)^($>>>6|Y<<26),Q=(Y=a[J-7]).high,Z=(tt=a[J-16]).high,tt=tt.low;z=(z=(z=z+Q+((Y=G+Y.low)>>>0>>0?1:0))+X+((Y=Y+$)>>>0<$>>>0?1:0))+Z+((Y=Y+tt)>>>0>>0?1:0);W.high=z,W.low=Y}Q=B&j^~B&H,tt=O&M^~O&V,W=C&R^C&D^R&D;var et=T&I^T&L^I&L,rt=(G=(C>>>28|T<<4)^(C<<30|T>>>2)^(C<<25|T>>>7),X=(T>>>28|C<<4)^(T<<30|C>>>2)^(T<<25|C>>>7),($=s[J]).high),nt=$.low;Z=K+((B>>>14|O<<18)^(B>>>18|O<<14)^(B<<23|O>>>9))+(($=q+((O>>>14|B<<18)^(O>>>18|B<<14)^(O<<23|B>>>9)))>>>0>>0?1:0),K=H,q=V,H=j,V=M,j=B,M=O,B=N+(Z=(Z=(Z=Z+Q+(($=$+tt)>>>0>>0?1:0))+rt+(($=$+nt)>>>0>>0?1:0))+z+(($=$+Y)>>>0>>0?1:0))+((O=U+$|0)>>>0>>0?1:0)|0,N=D,U=L,D=R,L=I,R=C,I=T,C=Z+(W=G+W+((Y=X+et)>>>0>>0?1:0))+((T=$+Y|0)>>>0<$>>>0?1:0)|0}d=n.low=d+T,n.high=g+C+(d>>>0>>0?1:0),v=i.low=v+I,i.high=p+R+(v>>>0>>0?1:0),m=o.low=m+L,o.high=y+D+(m>>>0>>0?1:0),S=u.low=S+U,u.high=_+N+(S>>>0>>0?1:0),w=c.low=w+O,c.high=b+B+(w>>>0>>0?1:0),E=h.low=E+M,h.high=F+j+(E>>>0>>0?1:0),A=l.low=A+V,l.high=x+H+(A>>>0>>0?1:0),P=f.low=P+q,f.high=k+K+(P>>>0>>0?1:0)},_doFinalize:function t(){var e=this._data,r=e.words,n=8*this._nDataBytes,i=8*e.sigBytes;return r[i>>>5]|=128<<24-i%32,r[30+(i+128>>>10<<5)]=Math.floor(n/4294967296),r[31+(i+128>>>10<<5)]=n,e.sigBytes=4*r.length,this._process(),this._hash.toX32()},clone:function t(){var e=r.clone.call(this);return e._hash=this._hash.clone(),e},blockSize:32}),e.SHA512=r._createHelper(o),e.HmacSHA512=r._createHmacHelper(o)}(),function(){var t=y,e=(i=t.x64).Word,r=i.WordArray,n=(i=t.algo).SHA512,i=i.SHA384=n.extend({_doReset:function t(){this._hash=new r.init([new e.init(3418070365,3238371032),new e.init(1654270250,914150663),new e.init(2438529370,812702999),new e.init(355462360,4144912697),new e.init(1731405415,4290775857),new e.init(2394180231,1750603025),new e.init(3675008525,1694076839),new e.init(1203062813,3204075428)])},_doFinalize:function t(){var e=n._doFinalize.call(this);return e.sigBytes-=16,e}});t.SHA384=n._createHelper(i),t.HmacSHA384=n._createHmacHelper(i)}();\n/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/\n */\nvar m,_=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";function S(t){var e,r,n=\"\";for(e=0;e+3<=t.length;e+=3)r=parseInt(t.substring(e,e+3),16),n+=_.charAt(r>>6)+_.charAt(63&r);for(e+1==t.length?(r=parseInt(t.substring(e,e+1),16),n+=_.charAt(r<<2)):e+2==t.length&&(r=parseInt(t.substring(e,e+2),16),n+=_.charAt(r>>2)+_.charAt((3&r)<<4)),\"=\";(3&n.length)>0;)n+=\"=\";return n}function b(t){var e,r,n,i=\"\",o=0;for(e=0;e>2),r=3&n,o=1):1==o?(i+=R(r<<2|n>>4),r=15&n,o=2):2==o?(i+=R(r),i+=R(n>>2),r=3&n,o=3):(i+=R(r<<2|n>>4),i+=R(15&n),o=0));return 1==o&&(i+=R(r<<2)),i}function w(t){var e,r=b(t),n=new Array;for(e=0;2*e>15;--o>=0;){var u=32767&this[t],c=this[t++]>>15,h=a*u+c*s;i=((u=s*u+((32767&h)<<15)+r[n]+(1073741823&i))>>>30)+(h>>>15)+a*c+(i>>>30),r[n++]=1073741823&u}return i},m=30):\"Netscape\"!=n.appName?(F.prototype.am=function A(t,e,r,n,i,o){for(;--o>=0;){var s=e*this[t++]+r[n]+i;i=Math.floor(s/67108864),r[n++]=67108863&s}return i},m=26):(F.prototype.am=function k(t,e,r,n,i,o){for(var s=16383&e,a=e>>14;--o>=0;){var u=16383&this[t],c=this[t++]>>14,h=a*u+c*s;i=((u=s*u+((16383&h)<<14)+r[n]+i)>>28)+(h>>14)+a*c,r[n++]=268435455&u}return i},m=28),F.prototype.DB=m,F.prototype.DM=(1<>>16)&&(t=e,r+=16),0!=(e=t>>8)&&(t=e,r+=8),0!=(e=t>>4)&&(t=e,r+=4),0!=(e=t>>2)&&(t=e,r+=2),0!=(e=t>>1)&&(t=e,r+=1),r}function N(t){this.m=t}function U(t){this.m=t,this.mp=t.invDigit(),this.mpl=32767&this.mp,this.mph=this.mp>>15,this.um=(1<>=16,e+=16),0==(255&t)&&(t>>=8,e+=8),0==(15&t)&&(t>>=4,e+=4),0==(3&t)&&(t>>=2,e+=2),0==(1&t)&&++e,e}function V(t){for(var e=0;0!=t;)t&=t-1,++e;return e}function K(){}function q(t){return t}function J(t){this.r2=E(),this.q3=E(),F.ONE.dlShiftTo(2*t.t,this.r2),this.mu=this.r2.divide(t),this.m=t}N.prototype.convert=function W(t){return t.s<0||t.compareTo(this.m)>=0?t.mod(this.m):t},N.prototype.revert=function z(t){return t},N.prototype.reduce=function Y(t){t.divRemTo(this.m,null,t)},N.prototype.mulTo=function G(t,e,r){t.multiplyTo(e,r),this.reduce(r)},N.prototype.sqrTo=function X(t,e){t.squareTo(e),this.reduce(e)},U.prototype.convert=function $(t){var e=E();return t.abs().dlShiftTo(this.m.t,e),e.divRemTo(this.m,null,e),t.s<0&&e.compareTo(F.ZERO)>0&&this.m.subTo(e,e),e},U.prototype.revert=function Q(t){var e=E();return t.copyTo(e),this.reduce(e),e},U.prototype.reduce=function Z(t){for(;t.t<=this.mt2;)t[t.t++]=0;for(var e=0;e>15)*this.mpl&this.um)<<15)&t.DM;for(t[r=e+this.m.t]+=this.m.am(0,n,t,e,0,this.m.t);t[r]>=t.DV;)t[r]-=t.DV,t[++r]++}t.clamp(),t.drShiftTo(this.m.t,t),t.compareTo(this.m)>=0&&t.subTo(this.m,t)},U.prototype.mulTo=function tt(t,e,r){t.multiplyTo(e,r),this.reduce(r)},U.prototype.sqrTo=function et(t,e){t.squareTo(e),this.reduce(e)},F.prototype.copyTo=function rt(t){for(var e=this.t-1;e>=0;--e)t[e]=this[e];t.t=this.t,t.s=this.s},F.prototype.fromInt=function nt(t){this.t=1,this.s=t<0?-1:0,t>0?this[0]=t:t<-1?this[0]=t+this.DV:this.t=0},F.prototype.fromString=function it(t,e){var r;if(16==e)r=4;else if(8==e)r=3;else if(256==e)r=8;else if(2==e)r=1;else if(32==e)r=5;else{if(4!=e)return void this.fromRadix(t,e);r=2}this.t=0,this.s=0;for(var n=t.length,i=!1,o=0;--n>=0;){var s=8==r?255&t[n]:I(t,n);s<0?\"-\"==t.charAt(n)&&(i=!0):(i=!1,0==o?this[this.t++]=s:o+r>this.DB?(this[this.t-1]|=(s&(1<>this.DB-o):this[this.t-1]|=s<=this.DB&&(o-=this.DB))}8==r&&0!=(128&t[0])&&(this.s=-1,o>0&&(this[this.t-1]|=(1<0&&this[this.t-1]==t;)--this.t},F.prototype.dlShiftTo=function st(t,e){var r;for(r=this.t-1;r>=0;--r)e[r+t]=this[r];for(r=t-1;r>=0;--r)e[r]=0;e.t=this.t+t,e.s=this.s},F.prototype.drShiftTo=function at(t,e){for(var r=t;r=0;--r)e[r+s+1]=this[r]>>i|a,a=(this[r]&o)<=0;--r)e[r]=0;e[s]=a,e.t=this.t+s+1,e.s=this.s,e.clamp()},F.prototype.rShiftTo=function ct(t,e){e.s=this.s;var r=Math.floor(t/this.DB);if(r>=this.t)e.t=0;else{var n=t%this.DB,i=this.DB-n,o=(1<>n;for(var s=r+1;s>n;n>0&&(e[this.t-r-1]|=(this.s&o)<>=this.DB;if(t.t>=this.DB;n+=this.s}else{for(n+=this.s;r>=this.DB;n-=t.s}e.s=n<0?-1:0,n<-1?e[r++]=this.DV+n:n>0&&(e[r++]=n),e.t=r,e.clamp()},F.prototype.multiplyTo=function lt(t,e){var r=this.abs(),n=t.abs(),i=r.t;for(e.t=i+n.t;--i>=0;)e[i]=0;for(i=0;i=0;)t[r]=0;for(r=0;r=e.DV&&(t[r+e.t]-=e.DV,t[r+e.t+1]=1)}t.t>0&&(t[t.t-1]+=e.am(r,e[r],t,2*r,0,1)),t.s=0,t.clamp()},F.prototype.divRemTo=function gt(t,e,r){var n=t.abs();if(!(n.t<=0)){var i=this.abs();if(i.t0?(n.lShiftTo(u,o),i.lShiftTo(u,r)):(n.copyTo(o),i.copyTo(r));var c=o.t,h=o[c-1];if(0!=h){var l=h*(1<1?o[c-2]>>this.F2:0),f=this.FV/l,g=(1<=0&&(r[r.t++]=1,r.subTo(y,r)),F.ONE.dlShiftTo(c,y),y.subTo(o,o);o.t=0;){var m=r[--p]==h?this.DM:Math.floor(r[p]*f+(r[p-1]+d)*g);if((r[p]+=o.am(0,m,r,v,0,c))0&&r.rShiftTo(u,r),s<0&&F.ZERO.subTo(r,r)}}},F.prototype.invDigit=function dt(){if(this.t<1)return 0;var t=this[0];if(0==(1&t))return 0;var e=3&t;return(e=(e=(e=(e=e*(2-(15&t)*e)&15)*(2-(255&t)*e)&255)*(2-((65535&t)*e&65535))&65535)*(2-t*e%this.DV)%this.DV)>0?this.DV-e:-e},F.prototype.isEven=function pt(){return 0==(this.t>0?1&this[0]:this.s)},F.prototype.exp=function vt(t,e){if(t>4294967295||t<1)return F.ONE;var r=E(),n=E(),i=e.convert(this),o=L(t)-1;for(i.copyTo(r);--o>=0;)if(e.sqrTo(r,n),(t&1<0)e.mulTo(n,i,r);else{var s=r;r=n,n=s}return e.revert(r)},F.prototype.toString=function yt(t){if(this.s<0)return\"-\"+this.negate().toString(t);var e;if(16==t)e=4;else if(8==t)e=3;else if(2==t)e=1;else if(32==t)e=5;else{if(4!=t)return this.toRadix(t);e=2}var r,n=(1<0)for(a>a)>0&&(i=!0,o=R(r));s>=0;)a>(a+=this.DB-e)):(r=this[s]>>(a-=e)&n,a<=0&&(a+=this.DB,--s)),r>0&&(i=!0),i&&(o+=R(r));return i?o:\"0\"},F.prototype.negate=function mt(){var t=E();return F.ZERO.subTo(this,t),t},F.prototype.abs=function _t(){return this.s<0?this.negate():this},F.prototype.compareTo=function St(t){var e=this.s-t.s;if(0!=e)return e;var r=this.t;if(0!=(e=r-t.t))return this.s<0?-e:e;for(;--r>=0;)if(0!=(e=this[r]-t[r]))return e;return 0},F.prototype.bitLength=function bt(){return this.t<=0?0:this.DB*(this.t-1)+L(this[this.t-1]^this.s&this.DM)},F.prototype.mod=function wt(t){var e=E();return this.abs().divRemTo(t,null,e),this.s<0&&e.compareTo(F.ZERO)>0&&t.subTo(e,e),e},F.prototype.modPowInt=function Ft(t,e){var r;return r=t<256||e.isEven()?new N(e):new U(e),this.exp(t,r)},F.ZERO=D(0),F.ONE=D(1),K.prototype.convert=q,K.prototype.revert=q,K.prototype.mulTo=function Et(t,e,r){t.multiplyTo(e,r)},K.prototype.sqrTo=function xt(t,e){t.squareTo(e)},J.prototype.convert=function At(t){if(t.s<0||t.t>2*this.m.t)return t.mod(this.m);if(t.compareTo(this.m)<0)return t;var e=E();return t.copyTo(e),this.reduce(e),e},J.prototype.revert=function kt(t){return t},J.prototype.reduce=function Pt(t){for(t.drShiftTo(this.m.t-1,this.r2),t.t>this.m.t+1&&(t.t=this.m.t+1,t.clamp()),this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3),this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);t.compareTo(this.r2)<0;)t.dAddOffset(1,this.m.t+1);for(t.subTo(this.r2,t);t.compareTo(this.m)>=0;)t.subTo(this.m,t)},J.prototype.mulTo=function Ct(t,e,r){t.multiplyTo(e,r),this.reduce(r)},J.prototype.sqrTo=function Tt(t,e){t.squareTo(e),this.reduce(e)};var Rt=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997],It=(1<<26)/Rt[Rt.length-1];\n/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/\n */\nfunction Dt(){this.i=0,this.j=0,this.S=new Array}F.prototype.chunkSize=function Lt(t){return Math.floor(Math.LN2*this.DB/Math.log(t))},F.prototype.toRadix=function Nt(t){if(null==t&&(t=10),0==this.signum()||t<2||t>36)return\"0\";var e=this.chunkSize(t),r=Math.pow(t,e),n=D(r),i=E(),o=E(),s=\"\";for(this.divRemTo(n,i,o);i.signum()>0;)s=(r+o.intValue()).toString(t).substr(1)+s,i.divRemTo(n,i,o);return o.intValue().toString(t)+s},F.prototype.fromRadix=function Ut(t,e){this.fromInt(0),null==e&&(e=10);for(var r=this.chunkSize(e),n=Math.pow(e,r),i=!1,o=0,s=0,a=0;a=r&&(this.dMultiply(n),this.dAddOffset(s,0),o=0,s=0))}o>0&&(this.dMultiply(Math.pow(e,o)),this.dAddOffset(s,0)),i&&F.ZERO.subTo(this,this)},F.prototype.fromNumber=function Bt(t,e,r){if(\"number\"==typeof e)if(t<2)this.fromInt(1);else for(this.fromNumber(t,r),this.testBit(t-1)||this.bitwiseTo(F.ONE.shiftLeft(t-1),O,this),this.isEven()&&this.dAddOffset(1,0);!this.isProbablePrime(e);)this.dAddOffset(2,0),this.bitLength()>t&&this.subTo(F.ONE.shiftLeft(t-1),this);else{var n=new Array,i=7&t;n.length=1+(t>>3),e.nextBytes(n),i>0?n[0]&=(1<>=this.DB;if(t.t>=this.DB;n+=this.s}else{for(n+=this.s;r>=this.DB;n+=t.s}e.s=n<0?-1:0,n>0?e[r++]=n:n<-1&&(e[r++]=this.DV+n),e.t=r,e.clamp()},F.prototype.dMultiply=function Ht(t){this[this.t]=this.am(0,t-1,this,0,0,this.t),++this.t,this.clamp()},F.prototype.dAddOffset=function Vt(t,e){if(0!=t){for(;this.t<=e;)this[this.t++]=0;for(this[e]+=t;this[e]>=this.DV;)this[e]-=this.DV,++e>=this.t&&(this[this.t++]=0),++this[e]}},F.prototype.multiplyLowerTo=function Kt(t,e,r){var n,i=Math.min(this.t+t.t,e);for(r.s=0,r.t=i;i>0;)r[--i]=0;for(n=r.t-this.t;i=0;)r[n]=0;for(n=Math.max(e-this.t,0);n0)if(0==e)r=this[0]%t;else for(var n=this.t-1;n>=0;--n)r=(e*r+this[n])%t;return r},F.prototype.millerRabin=function Wt(t){var e=this.subtract(F.ONE),r=e.getLowestSetBit();if(r<=0)return!1;var n=e.shiftRight(r);(t=t+1>>1)>Rt.length&&(t=Rt.length);for(var i=E(),o=0;o>24},F.prototype.shortValue=function Xt(){return 0==this.t?this.s:this[0]<<16>>16},F.prototype.signum=function $t(){return this.s<0?-1:this.t<=0||1==this.t&&this[0]<=0?0:1},F.prototype.toByteArray=function Qt(){var t=this.t,e=new Array;e[0]=this.s;var r,n=this.DB-t*this.DB%8,i=0;if(t-- >0)for(n>n)!=(this.s&this.DM)>>n&&(e[i++]=r|this.s<=0;)n<8?(r=(this[t]&(1<>(n+=this.DB-8)):(r=this[t]>>(n-=8)&255,n<=0&&(n+=this.DB,--t)),0!=(128&r)&&(r|=-256),0==i&&(128&this.s)!=(128&r)&&++i,(i>0||r!=this.s)&&(e[i++]=r);return e},F.prototype.equals=function Zt(t){return 0==this.compareTo(t)},F.prototype.min=function te(t){return this.compareTo(t)<0?this:t},F.prototype.max=function ee(t){return this.compareTo(t)>0?this:t},F.prototype.and=function re(t){var e=E();return this.bitwiseTo(t,B,e),e},F.prototype.or=function ne(t){var e=E();return this.bitwiseTo(t,O,e),e},F.prototype.xor=function ie(t){var e=E();return this.bitwiseTo(t,j,e),e},F.prototype.andNot=function oe(t){var e=E();return this.bitwiseTo(t,M,e),e},F.prototype.not=function se(){for(var t=E(),e=0;e=this.t?0!=this.s:0!=(this[e]&1<1){var h=E();for(n.sqrTo(s[1],h);a<=c;)s[a]=E(),n.mulTo(h,s[a-2],s[a]),a+=2}var l,f,g=t.t-1,d=!0,p=E();for(i=L(t[g])-1;g>=0;){for(i>=u?l=t[g]>>i-u&c:(l=(t[g]&(1<0&&(l|=t[g-1]>>this.DB+i-u)),a=r;0==(1&l);)l>>=1,--a;if((i-=a)<0&&(i+=this.DB,--g),d)s[l].copyTo(o),d=!1;else{for(;a>1;)n.sqrTo(o,p),n.sqrTo(p,o),a-=2;a>0?n.sqrTo(o,p):(f=o,o=p,p=f),n.mulTo(p,s[l],o)}for(;g>=0&&0==(t[g]&1<=0?(r.subTo(n,r),e&&i.subTo(s,i),o.subTo(a,o)):(n.subTo(r,n),e&&s.subTo(i,s),a.subTo(o,a))}return 0!=n.compareTo(F.ONE)?F.ZERO:a.compareTo(t)>=0?a.subtract(t):a.signum()<0?(a.addTo(t,a),a.signum()<0?a.add(t):a):a},F.prototype.pow=function Fe(t){return this.exp(t,new K)},F.prototype.gcd=function Ee(t){var e=this.s<0?this.negate():this.clone(),r=t.s<0?t.negate():t.clone();if(e.compareTo(r)<0){var n=e;e=r,r=n}var i=e.getLowestSetBit(),o=r.getLowestSetBit();if(o<0)return e;for(i0&&(e.rShiftTo(o,e),r.rShiftTo(o,r));e.signum()>0;)(i=e.getLowestSetBit())>0&&e.rShiftTo(i,e),(i=r.getLowestSetBit())>0&&r.rShiftTo(i,r),e.compareTo(r)>=0?(e.subTo(r,e),e.rShiftTo(1,e)):(r.subTo(e,r),r.rShiftTo(1,r));return o>0&&r.lShiftTo(o,r),r},F.prototype.isProbablePrime=function xe(t){var e,r=this.abs();if(1==r.t&&r[0]<=Rt[Rt.length-1]){for(e=0;e>8&255,Te[Re++]^=e>>16&255,Te[Re++]^=e>>24&255,Re>=256&&(Re-=256)}((new Date).getTime())}if(null==Te){var De;if(Te=new Array,Re=0,void 0!==i&&(void 0!==i.crypto||void 0!==i.msCrypto)){var Le=i.crypto||i.msCrypto;if(Le.getRandomValues){var Ne=new Uint8Array(32);for(Le.getRandomValues(Ne),De=0;De<32;++De)Te[Re++]=Ne[De]}else if(\"Netscape\"==n.appName&&n.appVersion<\"5\"){var Ue=i.crypto.random(32);for(De=0;De>>8,Te[Re++]=255&De;Re=0,Ie()}function Be(){if(null==Ce){for(Ie(),(Ce=function t(){return new Dt}()).init(Te),Re=0;Re>24,(16711680&i)>>16,(65280&i)>>8,255&i]))),i+=1;return n}function He(){this.n=null,this.e=0,this.d=null,this.p=null,this.q=null,this.dmp1=null,this.dmq1=null,this.coeff=null}\n/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/\n */\nfunction Ve(t,e){this.x=e,this.q=t}function Ke(t,e,r,n){this.curve=t,this.x=e,this.y=r,this.z=null==n?F.ONE:n,this.zinv=null}function qe(t,e,r){this.q=t,this.a=this.fromBigInteger(e),this.b=this.fromBigInteger(r),this.infinity=new Ke(this,null,null)}Oe.prototype.nextBytes=function Je(t){var e;for(e=0;e0&&e.length>0))throw\"Invalid RSA public key\";this.n=je(t,16),this.e=parseInt(e,16)}},He.prototype.encrypt=function Ye(t){var e=function r(t,e){if(e=0&&e>0;){var i=t.charCodeAt(n--);i<128?r[--e]=i:i>127&&i<2048?(r[--e]=63&i|128,r[--e]=i>>6|192):(r[--e]=63&i|128,r[--e]=i>>6&63|128,r[--e]=i>>12|224)}r[--e]=0;for(var o=new Oe,s=new Array;e>2;){for(s[0]=0;0==s[0];)o.nextBytes(s);r[--e]=s[0]}return r[--e]=2,r[--e]=0,new F(r)}(t,this.n.bitLength()+7>>3);if(null==e)return null;var n=this.doPublic(e);if(null==n)return null;var i=n.toString(16);return 0==(1&i.length)?i:\"0\"+i},He.prototype.encryptOAEP=function Ge(t,e,r){var n=function i(t,e,r,n){var i=br.crypto.MessageDigest,o=br.crypto.Util,s=null;if(r||(r=\"sha1\"),\"string\"==typeof r&&(s=i.getCanonicalAlgName(r),n=i.getHashLength(s),r=function t(e){return Nr(o.hashHex(Ur(e),s))}),t.length+2*n+2>e)throw\"Message too long for RSA\";var a,u=\"\";for(a=0;a>3,e,r);if(null==n)return null;var o=this.doPublic(n);if(null==o)return null;var s=o.toString(16);return 0==(1&s.length)?s:\"0\"+s},He.prototype.type=\"RSA\",Ve.prototype.equals=function Xe(t){return t==this||this.q.equals(t.q)&&this.x.equals(t.x)},Ve.prototype.toBigInteger=function $e(){return this.x},Ve.prototype.negate=function Qe(){return new Ve(this.q,this.x.negate().mod(this.q))},Ve.prototype.add=function Ze(t){return new Ve(this.q,this.x.add(t.toBigInteger()).mod(this.q))},Ve.prototype.subtract=function tr(t){return new Ve(this.q,this.x.subtract(t.toBigInteger()).mod(this.q))},Ve.prototype.multiply=function er(t){return new Ve(this.q,this.x.multiply(t.toBigInteger()).mod(this.q))},Ve.prototype.square=function rr(){return new Ve(this.q,this.x.square().mod(this.q))},Ve.prototype.divide=function nr(t){return new Ve(this.q,this.x.multiply(t.toBigInteger().modInverse(this.q)).mod(this.q))},Ke.prototype.getX=function ir(){return null==this.zinv&&(this.zinv=this.z.modInverse(this.curve.q)),this.curve.fromBigInteger(this.x.toBigInteger().multiply(this.zinv).mod(this.curve.q))},Ke.prototype.getY=function or(){return null==this.zinv&&(this.zinv=this.z.modInverse(this.curve.q)),this.curve.fromBigInteger(this.y.toBigInteger().multiply(this.zinv).mod(this.curve.q))},Ke.prototype.equals=function sr(t){return t==this||(this.isInfinity()?t.isInfinity():t.isInfinity()?this.isInfinity():!!t.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(t.z)).mod(this.curve.q).equals(F.ZERO)&&t.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(t.z)).mod(this.curve.q).equals(F.ZERO))},Ke.prototype.isInfinity=function ar(){return null==this.x&&null==this.y||this.z.equals(F.ZERO)&&!this.y.toBigInteger().equals(F.ZERO)},Ke.prototype.negate=function ur(){return new Ke(this.curve,this.x,this.y.negate(),this.z)},Ke.prototype.add=function cr(t){if(this.isInfinity())return t;if(t.isInfinity())return this;var e=t.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(t.z)).mod(this.curve.q),r=t.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(t.z)).mod(this.curve.q);if(F.ZERO.equals(r))return F.ZERO.equals(e)?this.twice():this.curve.getInfinity();var n=new F(\"3\"),i=this.x.toBigInteger(),o=this.y.toBigInteger(),s=(t.x.toBigInteger(),t.y.toBigInteger(),r.square()),a=s.multiply(r),u=i.multiply(s),c=e.square().multiply(this.z),h=c.subtract(u.shiftLeft(1)).multiply(t.z).subtract(a).multiply(r).mod(this.curve.q),l=u.multiply(n).multiply(e).subtract(o.multiply(a)).subtract(c.multiply(e)).multiply(t.z).add(e.multiply(a)).mod(this.curve.q),f=a.multiply(this.z).multiply(t.z).mod(this.curve.q);return new Ke(this.curve,this.curve.fromBigInteger(h),this.curve.fromBigInteger(l),f)},Ke.prototype.twice=function hr(){if(this.isInfinity())return this;if(0==this.y.toBigInteger().signum())return this.curve.getInfinity();var t=new F(\"3\"),e=this.x.toBigInteger(),r=this.y.toBigInteger(),n=r.multiply(this.z),i=n.multiply(r).mod(this.curve.q),o=this.curve.a.toBigInteger(),s=e.square().multiply(t);F.ZERO.equals(o)||(s=s.add(this.z.square().multiply(o)));var a=(s=s.mod(this.curve.q)).square().subtract(e.shiftLeft(3).multiply(i)).shiftLeft(1).multiply(n).mod(this.curve.q),u=s.multiply(t).multiply(e).subtract(i.shiftLeft(1)).shiftLeft(2).multiply(i).subtract(s.square().multiply(s)).mod(this.curve.q),c=n.square().multiply(n).shiftLeft(3).mod(this.curve.q);return new Ke(this.curve,this.curve.fromBigInteger(a),this.curve.fromBigInteger(u),c)},Ke.prototype.multiply=function lr(t){if(this.isInfinity())return this;if(0==t.signum())return this.curve.getInfinity();var e,r=t,n=r.multiply(new F(\"3\")),i=this.negate(),o=this,s=this.curve.q.subtract(t),a=s.multiply(new F(\"3\")),u=new Ke(this.curve,this.x,this.y),c=u.negate();for(e=n.bitLength()-2;e>0;--e){o=o.twice();var h=n.testBit(e);h!=r.testBit(e)&&(o=o.add(h?this:i))}for(e=a.bitLength()-2;e>0;--e){u=u.twice();var l=a.testBit(e);l!=s.testBit(e)&&(u=u.add(l?u:c))}return o},Ke.prototype.multiplyTwo=function fr(t,e,r){var n;n=t.bitLength()>r.bitLength()?t.bitLength()-1:r.bitLength()-1;for(var i=this.curve.getInfinity(),o=this.add(e);n>=0;)i=i.twice(),t.testBit(n)?i=r.testBit(n)?i.add(o):i.add(this):r.testBit(n)&&(i=i.add(e)),--n;return i},qe.prototype.getQ=function gr(){return this.q},qe.prototype.getA=function dr(){return this.a},qe.prototype.getB=function pr(){return this.b},qe.prototype.equals=function vr(t){return t==this||this.q.equals(t.q)&&this.a.equals(t.a)&&this.b.equals(t.b)},qe.prototype.getInfinity=function yr(){return this.infinity},qe.prototype.fromBigInteger=function mr(t){return new Ve(this.q,t)},qe.prototype.decodePointHex=function _r(t){switch(parseInt(t.substr(0,2),16)){case 0:return this.infinity;case 2:case 3:return null;case 4:case 6:case 7:var e=(t.length-2)/2,r=t.substr(2,e),n=t.substr(e+2,e);return new Ke(this,this.fromBigInteger(new F(r,16)),this.fromBigInteger(new F(n,16)));default:return null}},\n/*! (c) Stefan Thomas | https://github.com/bitcoinjs/bitcoinjs-lib\n */\nVe.prototype.getByteLength=function(){return Math.floor((this.toBigInteger().bitLength()+7)/8)},Ke.prototype.getEncoded=function(t){var e=function t(e,r){var n=e.toByteArrayUnsigned();if(rn.length;)n.unshift(0);return n},r=this.getX().toBigInteger(),n=this.getY().toBigInteger(),i=e(r,32);return t?n.isEven()?i.unshift(2):i.unshift(3):(i.unshift(4),i=i.concat(e(n,32))),i},Ke.decodeFrom=function(t,e){e[0];var r=e.length-1,n=e.slice(1,1+r/2),i=e.slice(1+r/2,1+r);n.unshift(0),i.unshift(0);var o=new F(n),s=new F(i);return new Ke(t,t.fromBigInteger(o),t.fromBigInteger(s))},Ke.decodeFromHex=function(t,e){e.substr(0,2);var r=e.length-2,n=e.substr(2,r/2),i=e.substr(2+r/2,r/2),o=new F(n,16),s=new F(i,16);return new Ke(t,t.fromBigInteger(o),t.fromBigInteger(s))},Ke.prototype.add2D=function(t){if(this.isInfinity())return t;if(t.isInfinity())return this;if(this.x.equals(t.x))return this.y.equals(t.y)?this.twice():this.curve.getInfinity();var e=t.x.subtract(this.x),r=t.y.subtract(this.y).divide(e),n=r.square().subtract(this.x).subtract(t.x),i=r.multiply(this.x.subtract(n)).subtract(this.y);return new Ke(this.curve,n,i)},Ke.prototype.twice2D=function(){if(this.isInfinity())return this;if(0==this.y.toBigInteger().signum())return this.curve.getInfinity();var t=this.curve.fromBigInteger(F.valueOf(2)),e=this.curve.fromBigInteger(F.valueOf(3)),r=this.x.square().multiply(e).add(this.curve.a).divide(this.y.multiply(t)),n=r.square().subtract(this.x.multiply(t)),i=r.multiply(this.x.subtract(n)).subtract(this.y);return new Ke(this.curve,n,i)},Ke.prototype.multiply2D=function(t){if(this.isInfinity())return this;if(0==t.signum())return this.curve.getInfinity();var e,r=t,n=r.multiply(new F(\"3\")),i=this.negate(),o=this;for(e=n.bitLength()-2;e>0;--e){o=o.twice();var s=n.testBit(e);s!=r.testBit(e)&&(o=o.add2D(s?this:i))}return o},Ke.prototype.isOnCurve=function(){var t=this.getX().toBigInteger(),e=this.getY().toBigInteger(),r=this.curve.getA().toBigInteger(),n=this.curve.getB().toBigInteger(),i=this.curve.getQ(),o=e.multiply(e).mod(i),s=t.multiply(t).multiply(t).add(r.multiply(t)).add(n).mod(i);return o.equals(s)},Ke.prototype.toString=function(){return\"(\"+this.getX().toBigInteger().toString()+\",\"+this.getY().toBigInteger().toString()+\")\"},Ke.prototype.validate=function(){var t=this.curve.getQ();if(this.isInfinity())throw new Error(\"Point is at infinity.\");var e=this.getX().toBigInteger(),r=this.getY().toBigInteger();if(e.compareTo(F.ONE)<0||e.compareTo(t.subtract(F.ONE))>0)throw new Error(\"x coordinate out of bounds\");if(r.compareTo(F.ONE)<0||r.compareTo(t.subtract(F.ONE))>0)throw new Error(\"y coordinate out of bounds\");if(!this.isOnCurve())throw new Error(\"Point is not on the curve.\");if(this.multiply(t).isInfinity())throw new Error(\"Point is not a scalar multiple of G.\");return!0};\n/*! Mike Samuel (c) 2009 | code.google.com/p/json-sans-eval\n */\nvar Sr=function(){var t=new RegExp('(?:false|true|null|[\\\\{\\\\}\\\\[\\\\]]|(?:-?\\\\b(?:0|[1-9][0-9]*)(?:\\\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?\\\\b)|(?:\"(?:[^\\\\0-\\\\x08\\\\x0a-\\\\x1f\"\\\\\\\\]|\\\\\\\\(?:[\"/\\\\\\\\bfnrt]|u[0-9A-Fa-f]{4}))*\"))',\"g\"),e=new RegExp(\"\\\\\\\\(?:([^u])|u(.{4}))\",\"g\"),n={'\"':'\"',\"/\":\"/\",\"\\\\\":\"\\\\\",b:\"\\b\",f:\"\\f\",n:\"\\n\",r:\"\\r\",t:\"\\t\"};function i(t,e,r){return e?n[e]:String.fromCharCode(parseInt(r,16))}var o=new String(\"\"),s=Object.hasOwnProperty;return function(n,a){var u,c,h=n.match(t),l=h[0],f=!1;\"{\"===l?u={}:\"[\"===l?u=[]:(u=[],f=!0);for(var g=[u],d=1-f,p=h.length;d=0;)delete i[o[h]]}return a.call(e,n,i)}({\"\":u},\"\")}return u}}();void 0!==br&&br||(e.KJUR=br={}),void 0!==br.asn1&&br.asn1||(br.asn1={}),br.asn1.ASN1Util=new function(){this.integerToByteHex=function(t){var e=t.toString(16);return e.length%2==1&&(e=\"0\"+e),e},this.bigIntToMinTwosComplementsHex=function(t){var e=t.toString(16);if(\"-\"!=e.substr(0,1))e.length%2==1?e=\"0\"+e:e.match(/^[0-7]/)||(e=\"00\"+e);else{var r=e.substr(1).length;r%2==1?r+=1:e.match(/^[0-7]/)||(r+=2);for(var n=\"\",i=0;i15)throw\"ASN.1 length too long to represent by 8x: n = \"+t.toString(16);return(128+r).toString(16)+e},this.getEncodedHex=function(){return(null==this.hTLV||this.isModified)&&(this.hV=this.getFreshValueHex(),this.hL=this.getLengthHexFromValue(),this.hTLV=this.hT+this.hL+this.hV,this.isModified=!1),this.hTLV},this.getValueHex=function(){return this.getEncodedHex(),this.hV},this.getFreshValueHex=function(){return\"\"},this.setByParam=function(t){this.params=t},null!=t&&null!=t.tlv&&(this.hTLV=t.tlv,this.isModified=!1)},br.asn1.DERAbstractString=function(t){br.asn1.DERAbstractString.superclass.constructor.call(this);this.getString=function(){return this.s},this.setString=function(t){this.hTLV=null,this.isModified=!0,this.s=t,this.hV=Dr(this.s).toLowerCase()},this.setStringHex=function(t){this.hTLV=null,this.isModified=!0,this.s=null,this.hV=t},this.getFreshValueHex=function(){return this.hV},void 0!==t&&(\"string\"==typeof t?this.setString(t):void 0!==t.str?this.setString(t.str):void 0!==t.hex&&this.setStringHex(t.hex))},o.lang.extend(br.asn1.DERAbstractString,br.asn1.ASN1Object),br.asn1.DERAbstractTime=function(t){br.asn1.DERAbstractTime.superclass.constructor.call(this);this.localDateToUTC=function(t){var e=t.getTime()+6e4*t.getTimezoneOffset();return new Date(e)},this.formatDate=function(t,e,r){var n=this.zeroPadding,i=this.localDateToUTC(t),o=String(i.getFullYear());\"utc\"==e&&(o=o.substr(2,2));var s=o+n(String(i.getMonth()+1),2)+n(String(i.getDate()),2)+n(String(i.getHours()),2)+n(String(i.getMinutes()),2)+n(String(i.getSeconds()),2);if(!0===r){var a=i.getMilliseconds();if(0!=a){var u=n(String(a),3);s=s+\".\"+(u=u.replace(/[0]+$/,\"\"))}}return s+\"Z\"},this.zeroPadding=function(t,e){return t.length>=e?t:new Array(e-t.length+1).join(\"0\")+t},this.getString=function(){return this.s},this.setString=function(t){this.hTLV=null,this.isModified=!0,this.s=t,this.hV=Pr(t)},this.setByDateValue=function(t,e,r,n,i,o){var s=new Date(Date.UTC(t,e-1,r,n,i,o,0));this.setByDate(s)},this.getFreshValueHex=function(){return this.hV}},o.lang.extend(br.asn1.DERAbstractTime,br.asn1.ASN1Object),br.asn1.DERAbstractStructured=function(t){br.asn1.DERAbstractString.superclass.constructor.call(this);this.setByASN1ObjectArray=function(t){this.hTLV=null,this.isModified=!0,this.asn1Array=t},this.appendASN1Object=function(t){this.hTLV=null,this.isModified=!0,this.asn1Array.push(t)},this.asn1Array=new Array,void 0!==t&&void 0!==t.array&&(this.asn1Array=t.array)},o.lang.extend(br.asn1.DERAbstractStructured,br.asn1.ASN1Object),br.asn1.DERBoolean=function(t){br.asn1.DERBoolean.superclass.constructor.call(this),this.hT=\"01\",this.hTLV=0==t?\"010100\":\"0101ff\"},o.lang.extend(br.asn1.DERBoolean,br.asn1.ASN1Object),br.asn1.DERInteger=function(t){br.asn1.DERInteger.superclass.constructor.call(this),this.hT=\"02\",this.setByBigInteger=function(t){this.hTLV=null,this.isModified=!0,this.hV=br.asn1.ASN1Util.bigIntToMinTwosComplementsHex(t)},this.setByInteger=function(t){var e=new F(String(t),10);this.setByBigInteger(e)},this.setValueHex=function(t){this.hV=t},this.getFreshValueHex=function(){return this.hV},void 0!==t&&(void 0!==t.bigint?this.setByBigInteger(t.bigint):void 0!==t.int?this.setByInteger(t.int):\"number\"==typeof t?this.setByInteger(t):void 0!==t.hex&&this.setValueHex(t.hex))},o.lang.extend(br.asn1.DERInteger,br.asn1.ASN1Object),br.asn1.DERBitString=function(t){if(void 0!==t&&void 0!==t.obj){var e=br.asn1.ASN1Util.newObject(t.obj);t.hex=\"00\"+e.getEncodedHex()}br.asn1.DERBitString.superclass.constructor.call(this),this.hT=\"03\",this.setHexValueIncludingUnusedBits=function(t){this.hTLV=null,this.isModified=!0,this.hV=t},this.setUnusedBitsAndHexValue=function(t,e){if(t<0||7i.length&&(i=n[r]);return(t=t.replace(i,\"::\")).slice(1,-1)}function Yr(t){var e=\"malformed hex value\";if(!t.match(/^([0-9A-Fa-f][0-9A-Fa-f]){1,}$/))throw e;if(8!=t.length)return 32==t.length?zr(t):t;try{return parseInt(t.substr(0,2),16)+\".\"+parseInt(t.substr(2,2),16)+\".\"+parseInt(t.substr(4,2),16)+\".\"+parseInt(t.substr(6,2),16)}catch(t){throw e}}function Gr(t){for(var e=encodeURIComponent(t),r=\"\",n=0;n\"7\"?\"00\"+t:t}Er.getLblen=function(t,e){if(\"8\"!=t.substr(e+2,1))return 1;var r=parseInt(t.substr(e+3,1));return 0==r?-1:0=n)break}return s},Er.getNthChildIdx=function(t,e,r){return Er.getChildIdx(t,e)[r]},Er.getIdxbyList=function(t,e,r,n){var i,o,s=Er;return 0==r.length?void 0!==n&&t.substr(e,2)!==n?-1:e:(i=r.shift())>=(o=s.getChildIdx(t,e)).length?-1:s.getIdxbyList(t,o[i],r,n)},Er.getIdxbyListEx=function(t,e,r,n){var i,o,s=Er;if(0==r.length)return void 0!==n&&t.substr(e,2)!==n?-1:e;i=r.shift(),o=s.getChildIdx(t,e);for(var a=0,u=0;u=t.length?null:i.getTLV(t,o)},Er.getTLVbyListEx=function(t,e,r,n){var i=Er,o=i.getIdxbyListEx(t,e,r,n);return-1==o?null:i.getTLV(t,o)},Er.getVbyList=function(t,e,r,n,i){var o,s,a=Er;return-1==(o=a.getIdxbyList(t,e,r,n))||o>=t.length?null:(s=a.getV(t,o),!0===i&&(s=s.substr(2)),s)},Er.getVbyListEx=function(t,e,r,n,i){var o,s,a=Er;return-1==(o=a.getIdxbyListEx(t,e,r,n))?null:(s=a.getV(t,o),\"03\"==t.substr(o,2)&&!1!==i&&(s=s.substr(2)),s)},Er.getInt=function(t,e,r){null==r&&(r=-1);try{var n=t.substr(e,2);if(\"02\"!=n&&\"03\"!=n)return r;var i=Er.getV(t,e);return\"02\"==n?parseInt(i,16):function o(t){try{var e=t.substr(0,2);if(\"00\"==e)return parseInt(t.substr(2),16);var r=parseInt(e,16),n=t.substr(2),i=parseInt(n,16).toString(2);return\"0\"==i&&(i=\"00000000\"),i=i.slice(0,0-r),parseInt(i,2)}catch(t){return-1}}(i)}catch(t){return r}},Er.getOID=function(t,e,r){null==r&&(r=null);try{return\"06\"!=t.substr(e,2)?r:function n(t){if(!Xr(t))return null;try{var e=[],r=t.substr(0,2),n=parseInt(r,16);e[0]=new String(Math.floor(n/40)),e[1]=new String(n%40);for(var i=t.substr(2),o=[],s=0;s0&&(c=c+\".\"+a.join(\".\")),c}catch(t){return null}}(Er.getV(t,e))}catch(t){return r}},Er.getOIDName=function(t,e,r){null==r&&(r=null);try{var n=Er.getOID(t,e,r);if(n==r)return r;var i=br.asn1.x509.OID.oid2name(n);return\"\"==i?n:i}catch(t){return r}},Er.getString=function(t,e,r){null==r&&(r=null);try{return Nr(Er.getV(t,e))}catch(t){return r}},Er.hextooidstr=function(t){var e=function t(e,r){return e.length>=r?e:new Array(r-e.length+1).join(\"0\")+e},r=[],n=t.substr(0,2),i=parseInt(n,16);r[0]=new String(Math.floor(i/40)),r[1]=new String(i%40);for(var o=t.substr(2),s=[],a=0;a0&&(h=h+\".\"+u.join(\".\")),h},Er.dump=function(t,e,r,n){var i=Er,o=i.getV,s=i.dump,a=i.getChildIdx,u=t;t instanceof br.asn1.ASN1Object&&(u=t.getEncodedHex());var c=function t(e,r){return e.length<=2*r?e:e.substr(0,r)+\"..(total \"+e.length/2+\"bytes)..\"+e.substr(e.length-r,r)};void 0===e&&(e={ommit_long_octet:32}),void 0===r&&(r=0),void 0===n&&(n=\"\");var h,l=e.ommit_long_octet;if(\"01\"==(h=u.substr(r,2)))return\"00\"==(f=o(u,r))?n+\"BOOLEAN FALSE\\n\":n+\"BOOLEAN TRUE\\n\";if(\"02\"==h)return n+\"INTEGER \"+c(f=o(u,r),l)+\"\\n\";if(\"03\"==h){var f=o(u,r);if(i.isASN1HEX(f.substr(2))){var g=n+\"BITSTRING, encapsulates\\n\";return g+=s(f.substr(2),e,0,n+\" \")}return n+\"BITSTRING \"+c(f,l)+\"\\n\"}if(\"04\"==h){f=o(u,r);if(i.isASN1HEX(f)){g=n+\"OCTETSTRING, encapsulates\\n\";return g+=s(f,e,0,n+\" \")}return n+\"OCTETSTRING \"+c(f,l)+\"\\n\"}if(\"05\"==h)return n+\"NULL\\n\";if(\"06\"==h){var d=o(u,r),p=br.asn1.ASN1Util.oidHexToInt(d),v=br.asn1.x509.OID.oid2name(p),y=p.replace(/\\./g,\" \");return\"\"!=v?n+\"ObjectIdentifier \"+v+\" (\"+y+\")\\n\":n+\"ObjectIdentifier (\"+y+\")\\n\"}if(\"0a\"==h)return n+\"ENUMERATED \"+parseInt(o(u,r))+\"\\n\";if(\"0c\"==h)return n+\"UTF8String '\"+Lr(o(u,r))+\"'\\n\";if(\"13\"==h)return n+\"PrintableString '\"+Lr(o(u,r))+\"'\\n\";if(\"14\"==h)return n+\"TeletexString '\"+Lr(o(u,r))+\"'\\n\";if(\"16\"==h)return n+\"IA5String '\"+Lr(o(u,r))+\"'\\n\";if(\"17\"==h)return n+\"UTCTime \"+Lr(o(u,r))+\"\\n\";if(\"18\"==h)return n+\"GeneralizedTime \"+Lr(o(u,r))+\"\\n\";if(\"1a\"==h)return n+\"VisualString '\"+Lr(o(u,r))+\"'\\n\";if(\"1e\"==h)return n+\"BMPString '\"+Lr(o(u,r))+\"'\\n\";if(\"30\"==h){if(\"3000\"==u.substr(r,4))return n+\"SEQUENCE {}\\n\";g=n+\"SEQUENCE\\n\";var m=e;if((2==(b=a(u,r)).length||3==b.length)&&\"06\"==u.substr(b[0],2)&&\"04\"==u.substr(b[b.length-1],2)){v=i.oidname(o(u,b[0]));var _=JSON.parse(JSON.stringify(e));_.x509ExtName=v,m=_}for(var S=0;S31)&&(128==(192&r)&&(31&r)==n))}catch(t){return!1}},Er.isASN1HEX=function(t){var e=Er;if(t.length%2==1)return!1;var r=e.getVblen(t,0),n=t.substr(0,2),i=e.getL(t,0);return t.length-n.length-i.length==2*r},Er.checkStrictDER=function(t,e,r,n,i){var o=Er;if(void 0===r){if(\"string\"!=typeof t)throw new Error(\"not hex string\");if(t=t.toLowerCase(),!br.lang.String.isHex(t))throw new Error(\"not hex string\");r=t.length,i=(n=t.length/2)<128?1:Math.ceil(n.toString(16))+1}if(o.getL(t,e).length>2*i)throw new Error(\"L of TLV too long: idx=\"+e);var s=o.getVblen(t,e);if(s>n)throw new Error(\"value of L too long than hex: idx=\"+e);var a=o.getTLV(t,e),u=a.length-2-o.getL(t,e).length;if(u!==2*s)throw new Error(\"V string length and L's value not the same:\"+u+\"/\"+2*s);if(0===e&&t.length!=a.length)throw new Error(\"total length and TLV length unmatch:\"+t.length+\"!=\"+a.length);var c=t.substr(e,2);if(\"02\"===c){var h=o.getVidx(t,e);if(\"00\"==t.substr(h,2)&&t.charCodeAt(h+2)<56)throw new Error(\"not least zeros for DER INTEGER\")}if(32&parseInt(c,16)){for(var l=o.getVblen(t,e),f=0,g=o.getChildIdx(t,e),d=0;d=r?e:new Array(r-e.length+1).join(n)+e};void 0!==br&&br||(e.KJUR=br={}),void 0!==br.crypto&&br.crypto||(br.crypto={}),br.crypto.Util=new function(){this.DIGESTINFOHEAD={sha1:\"3021300906052b0e03021a05000414\",sha224:\"302d300d06096086480165030402040500041c\",sha256:\"3031300d060960864801650304020105000420\",sha384:\"3041300d060960864801650304020205000430\",sha512:\"3051300d060960864801650304020305000440\",md2:\"3020300c06082a864886f70d020205000410\",md5:\"3020300c06082a864886f70d020505000410\",ripemd160:\"3021300906052b2403020105000414\"},this.DEFAULTPROVIDER={md5:\"cryptojs\",sha1:\"cryptojs\",sha224:\"cryptojs\",sha256:\"cryptojs\",sha384:\"cryptojs\",sha512:\"cryptojs\",ripemd160:\"cryptojs\",hmacmd5:\"cryptojs\",hmacsha1:\"cryptojs\",hmacsha224:\"cryptojs\",hmacsha256:\"cryptojs\",hmacsha384:\"cryptojs\",hmacsha512:\"cryptojs\",hmacripemd160:\"cryptojs\",MD5withRSA:\"cryptojs/jsrsa\",SHA1withRSA:\"cryptojs/jsrsa\",SHA224withRSA:\"cryptojs/jsrsa\",SHA256withRSA:\"cryptojs/jsrsa\",SHA384withRSA:\"cryptojs/jsrsa\",SHA512withRSA:\"cryptojs/jsrsa\",RIPEMD160withRSA:\"cryptojs/jsrsa\",MD5withECDSA:\"cryptojs/jsrsa\",SHA1withECDSA:\"cryptojs/jsrsa\",SHA224withECDSA:\"cryptojs/jsrsa\",SHA256withECDSA:\"cryptojs/jsrsa\",SHA384withECDSA:\"cryptojs/jsrsa\",SHA512withECDSA:\"cryptojs/jsrsa\",RIPEMD160withECDSA:\"cryptojs/jsrsa\",SHA1withDSA:\"cryptojs/jsrsa\",SHA224withDSA:\"cryptojs/jsrsa\",SHA256withDSA:\"cryptojs/jsrsa\",MD5withRSAandMGF1:\"cryptojs/jsrsa\",SHAwithRSAandMGF1:\"cryptojs/jsrsa\",SHA1withRSAandMGF1:\"cryptojs/jsrsa\",SHA224withRSAandMGF1:\"cryptojs/jsrsa\",SHA256withRSAandMGF1:\"cryptojs/jsrsa\",SHA384withRSAandMGF1:\"cryptojs/jsrsa\",SHA512withRSAandMGF1:\"cryptojs/jsrsa\",RIPEMD160withRSAandMGF1:\"cryptojs/jsrsa\"},this.CRYPTOJSMESSAGEDIGESTNAME={md5:y.algo.MD5,sha1:y.algo.SHA1,sha224:y.algo.SHA224,sha256:y.algo.SHA256,sha384:y.algo.SHA384,sha512:y.algo.SHA512,ripemd160:y.algo.RIPEMD160},this.getDigestInfoHex=function(t,e){if(void 0===this.DIGESTINFOHEAD[e])throw\"alg not supported in Util.DIGESTINFOHEAD: \"+e;return this.DIGESTINFOHEAD[e]+t},this.getPaddedDigestInfoHex=function(t,e,r){var n=this.getDigestInfoHex(t,e),i=r/4;if(n.length+22>i)throw\"key is too short for SigAlg: keylen=\"+r+\",\"+e;for(var o=\"0001\",s=\"00\"+n,a=\"\",u=i-o.length-s.length,c=0;c=0)return!1;if(r.compareTo(n.ONE)<0||r.compareTo(o)>=0)return!1;var a=r.modInverse(o),u=t.multiply(a).mod(o),c=e.multiply(a).mod(o);return s.multiply(u).add(i.multiply(c)).getX().toBigInteger().mod(o).equals(e)},this.serializeSig=function(t,e){var r=t.toByteArraySigned(),n=e.toByteArraySigned(),i=[];return i.push(2),i.push(r.length),(i=i.concat(r)).push(2),i.push(n.length),(i=i.concat(n)).unshift(i.length),i.unshift(48),i},this.parseSig=function(t){var e;if(48!=t[0])throw new Error(\"Signature not a valid DERSequence\");if(2!=t[e=2])throw new Error(\"First element in signature must be a DERInteger\");var r=t.slice(e+2,e+2+t[e+1]);if(2!=t[e+=2+t[e+1]])throw new Error(\"Second element in signature must be a DERInteger\");var i=t.slice(e+2,e+2+t[e+1]);return e+=2+t[e+1],{r:n.fromByteArrayUnsigned(r),s:n.fromByteArrayUnsigned(i)}},this.parseSigCompact=function(t){if(65!==t.length)throw\"Signature has the wrong length\";var e=t[0]-27;if(e<0||e>7)throw\"Invalid signature type\";var r=this.ecparams.n;return{r:n.fromByteArrayUnsigned(t.slice(1,33)).mod(r),s:n.fromByteArrayUnsigned(t.slice(33,65)).mod(r),i:e}},this.readPKCS5PrvKeyHex=function(t){if(!1===h(t))throw new Error(\"not ASN.1 hex string\");var e,r,n;try{e=c(t,0,[\"[0]\",0],\"06\"),r=c(t,0,[1],\"04\");try{n=c(t,0,[\"[1]\",0],\"03\")}catch(t){}}catch(t){throw new Error(\"malformed PKCS#1/5 plain ECC private key\")}if(this.curveName=a(e),void 0===this.curveName)throw\"unsupported curve name\";this.setNamedCurve(this.curveName),this.setPublicKeyHex(n),this.setPrivateKeyHex(r),this.isPublic=!1},this.readPKCS8PrvKeyHex=function(t){if(!1===h(t))throw new e(\"not ASN.1 hex string\");var r,n,i;try{c(t,0,[1,0],\"06\"),r=c(t,0,[1,1],\"06\"),n=c(t,0,[2,0,1],\"04\");try{i=c(t,0,[2,0,\"[1]\",0],\"03\")}catch(t){}}catch(t){throw new e(\"malformed PKCS#8 plain ECC private key\")}if(this.curveName=a(r),void 0===this.curveName)throw new e(\"unsupported curve name\");this.setNamedCurve(this.curveName),this.setPublicKeyHex(i),this.setPrivateKeyHex(n),this.isPublic=!1},this.readPKCS8PubKeyHex=function(t){if(!1===h(t))throw new e(\"not ASN.1 hex string\");var r,n;try{c(t,0,[0,0],\"06\"),r=c(t,0,[0,1],\"06\"),n=c(t,0,[1],\"03\")}catch(t){throw new e(\"malformed PKCS#8 ECC public key\")}if(this.curveName=a(r),null===this.curveName)throw new e(\"unsupported curve name\");this.setNamedCurve(this.curveName),this.setPublicKeyHex(n)},this.readCertPubKeyHex=function(t,r){if(!1===h(t))throw new e(\"not ASN.1 hex string\");var n,i;try{n=c(t,0,[0,5,0,1],\"06\"),i=c(t,0,[0,5,1],\"03\")}catch(t){throw new e(\"malformed X.509 certificate ECC public key\")}if(this.curveName=a(n),null===this.curveName)throw new e(\"unsupported curve name\");this.setNamedCurve(this.curveName),this.setPublicKeyHex(i)},void 0!==t&&void 0!==t.curve&&(this.curveName=t.curve),void 0===this.curveName&&(this.curveName=\"secp256r1\"),this.setNamedCurve(this.curveName),void 0!==t&&(void 0!==t.prv&&this.setPrivateKeyHex(t.prv),void 0!==t.pub&&this.setPublicKeyHex(t.pub))},br.crypto.ECDSA.parseSigHex=function(t){var e=br.crypto.ECDSA.parseSigHexInHexRS(t);return{r:new F(e.r,16),s:new F(e.s,16)}},br.crypto.ECDSA.parseSigHexInHexRS=function(t){var e=Er,r=e.getChildIdx,n=e.getV;if(e.checkStrictDER(t,0),\"30\"!=t.substr(0,2))throw new Error(\"signature is not a ASN.1 sequence\");var i=r(t,0);if(2!=i.length)throw new Error(\"signature shall have two elements\");var o=i[0],s=i[1];if(\"02\"!=t.substr(o,2))throw new Error(\"1st item not ASN.1 integer\");if(\"02\"!=t.substr(s,2))throw new Error(\"2nd item not ASN.1 integer\");return{r:n(t,o),s:n(t,s)}},br.crypto.ECDSA.asn1SigToConcatSig=function(t){var e=br.crypto.ECDSA.parseSigHexInHexRS(t),r=e.r,n=e.s;if(\"00\"==r.substr(0,2)&&r.length%32==2&&(r=r.substr(2)),\"00\"==n.substr(0,2)&&n.length%32==2&&(n=n.substr(2)),r.length%32==30&&(r=\"00\"+r),n.length%32==30&&(n=\"00\"+n),r.length%32!=0)throw\"unknown ECDSA sig r length error\";if(n.length%32!=0)throw\"unknown ECDSA sig s length error\";return r+n},br.crypto.ECDSA.concatSigToASN1Sig=function(t){if(t.length/2*8%128!=0)throw\"unknown ECDSA concatinated r-s sig length error\";var e=t.substr(0,t.length/2),r=t.substr(t.length/2);return br.crypto.ECDSA.hexRSSigToASN1Sig(e,r)},br.crypto.ECDSA.hexRSSigToASN1Sig=function(t,e){var r=new F(t,16),n=new F(e,16);return br.crypto.ECDSA.biRSSigToASN1Sig(r,n)},br.crypto.ECDSA.biRSSigToASN1Sig=function(t,e){var r=br.asn1,n=new r.DERInteger({bigint:t}),i=new r.DERInteger({bigint:e});return new r.DERSequence({array:[n,i]}).getEncodedHex()},br.crypto.ECDSA.getName=function(t){return\"2b8104001f\"===t?\"secp192k1\":\"2a8648ce3d030107\"===t?\"secp256r1\":\"2b8104000a\"===t?\"secp256k1\":\"2b81040021\"===t?\"secp224r1\":\"2b81040022\"===t?\"secp384r1\":-1!==\"|secp256r1|NIST P-256|P-256|prime256v1|\".indexOf(t)?\"secp256r1\":-1!==\"|secp256k1|\".indexOf(t)?\"secp256k1\":-1!==\"|secp224r1|NIST P-224|P-224|\".indexOf(t)?\"secp224r1\":-1!==\"|secp384r1|NIST P-384|P-384|\".indexOf(t)?\"secp384r1\":null},void 0!==br&&br||(e.KJUR=br={}),void 0!==br.crypto&&br.crypto||(br.crypto={}),br.crypto.ECParameterDB=new function(){var t={},e={};function r(t){return new F(t,16)}this.getByName=function(r){var n=r;if(void 0!==e[n]&&(n=e[r]),void 0!==t[n])return t[n];throw\"unregistered EC curve name: \"+n},this.regist=function(n,i,o,s,a,u,c,h,l,f,g,d){t[n]={};var p=r(o),v=r(s),y=r(a),m=r(u),_=r(c),S=new qe(p,v,y),b=S.decodePointHex(\"04\"+h+l);t[n].name=n,t[n].keylen=i,t[n].curve=S,t[n].G=b,t[n].n=m,t[n].h=_,t[n].oid=g,t[n].info=d;for(var w=0;w=2*u)break}var f={};return f.keyhex=c.substr(0,2*i[e].keylen),f.ivhex=c.substr(2*i[e].keylen,2*i[e].ivlen),f},a=function t(e,r,n,o){var s=y.enc.Base64.parse(e),a=y.enc.Hex.stringify(s);return(0,i[r].proc)(a,n,o)};return{version:\"1.0.0\",parsePKCS5PEM:function t(e){return o(e)},getKeyAndUnusedIvByPasscodeAndIvsalt:function t(e,r,n){return s(e,r,n)},decryptKeyB64:function t(e,r,n,i){return a(e,r,n,i)},getDecryptedKeyHex:function t(e,r){var n=o(e),i=(n.type,n.cipher),u=n.ivsalt,c=n.data,h=s(i,r,u).keyhex;return a(c,i,h,u)},getEncryptedPKCS5PEMFromPrvKeyHex:function t(e,r,n,o,a){var u=\"\";if(void 0!==o&&null!=o||(o=\"AES-256-CBC\"),void 0===i[o])throw\"KEYUTIL unsupported algorithm: \"+o;void 0!==a&&null!=a||(a=function t(e){var r=y.lib.WordArray.random(e);return y.enc.Hex.stringify(r)}(i[o].ivlen).toUpperCase());var c=function t(e,r,n,o){return(0,i[r].eproc)(e,n,o)}(r,o,s(o,n,a).keyhex,a);u=\"-----BEGIN \"+e+\" PRIVATE KEY-----\\r\\n\";return u+=\"Proc-Type: 4,ENCRYPTED\\r\\n\",u+=\"DEK-Info: \"+o+\",\"+a+\"\\r\\n\",u+=\"\\r\\n\",u+=c.replace(/(.{64})/g,\"$1\\r\\n\"),u+=\"\\r\\n-----END \"+e+\" PRIVATE KEY-----\\r\\n\"},parseHexOfEncryptedPKCS8:function t(e){var r=Er,n=r.getChildIdx,i=r.getV,o={},s=n(e,0);if(2!=s.length)throw\"malformed format: SEQUENCE(0).items != 2: \"+s.length;o.ciphertext=i(e,s[1]);var a=n(e,s[0]);if(2!=a.length)throw\"malformed format: SEQUENCE(0.0).items != 2: \"+a.length;if(\"2a864886f70d01050d\"!=i(e,a[0]))throw\"this only supports pkcs5PBES2\";var u=n(e,a[1]);if(2!=a.length)throw\"malformed format: SEQUENCE(0.0.1).items != 2: \"+u.length;var c=n(e,u[1]);if(2!=c.length)throw\"malformed format: SEQUENCE(0.0.1.1).items != 2: \"+c.length;if(\"2a864886f70d0307\"!=i(e,c[0]))throw\"this only supports TripleDES\";o.encryptionSchemeAlg=\"TripleDES\",o.encryptionSchemeIV=i(e,c[1]);var h=n(e,u[0]);if(2!=h.length)throw\"malformed format: SEQUENCE(0.0.1.0).items != 2: \"+h.length;if(\"2a864886f70d01050c\"!=i(e,h[0]))throw\"this only supports pkcs5PBKDF2\";var l=n(e,h[1]);if(l.length<2)throw\"malformed format: SEQUENCE(0.0.1.0.1).items < 2: \"+l.length;o.pbkdf2Salt=i(e,l[0]);var f=i(e,l[1]);try{o.pbkdf2Iter=parseInt(f,16)}catch(t){throw\"malformed format pbkdf2Iter: \"+f}return o},getPBKDF2KeyHexFromParam:function t(e,r){var n=y.enc.Hex.parse(e.pbkdf2Salt),i=e.pbkdf2Iter,o=y.PBKDF2(r,n,{keySize:6,iterations:i});return y.enc.Hex.stringify(o)},_getPlainPKCS8HexFromEncryptedPKCS8PEM:function t(e,r){var n=Hr(e,\"ENCRYPTED PRIVATE KEY\"),i=this.parseHexOfEncryptedPKCS8(n),o=Zr.getPBKDF2KeyHexFromParam(i,r),s={};s.ciphertext=y.enc.Hex.parse(i.ciphertext);var a=y.enc.Hex.parse(o),u=y.enc.Hex.parse(i.encryptionSchemeIV),c=y.TripleDES.decrypt(s,a,{iv:u});return y.enc.Hex.stringify(c)},getKeyFromEncryptedPKCS8PEM:function t(e,r){var n=this._getPlainPKCS8HexFromEncryptedPKCS8PEM(e,r);return this.getKeyFromPlainPrivatePKCS8Hex(n)},parsePlainPrivatePKCS8Hex:function t(e){var r=Er,n=r.getChildIdx,i=r.getV,o={algparam:null};if(\"30\"!=e.substr(0,2))throw\"malformed plain PKCS8 private key(code:001)\";var s=n(e,0);if(3!=s.length)throw\"malformed plain PKCS8 private key(code:002)\";if(\"30\"!=e.substr(s[1],2))throw\"malformed PKCS8 private key(code:003)\";var a=n(e,s[1]);if(2!=a.length)throw\"malformed PKCS8 private key(code:004)\";if(\"06\"!=e.substr(a[0],2))throw\"malformed PKCS8 private key(code:005)\";if(o.algoid=i(e,a[0]),\"06\"==e.substr(a[1],2)&&(o.algparam=i(e,a[1])),\"04\"!=e.substr(s[2],2))throw\"malformed PKCS8 private key(code:006)\";return o.keyidx=r.getVidx(e,s[2]),o},getKeyFromPlainPrivatePKCS8PEM:function t(e){var r=Hr(e,\"PRIVATE KEY\");return this.getKeyFromPlainPrivatePKCS8Hex(r)},getKeyFromPlainPrivatePKCS8Hex:function t(e){var r,n=this.parsePlainPrivatePKCS8Hex(e);if(\"2a864886f70d010101\"==n.algoid)r=new He;else if(\"2a8648ce380401\"==n.algoid)r=new br.crypto.DSA;else{if(\"2a8648ce3d0201\"!=n.algoid)throw\"unsupported private key algorithm\";r=new br.crypto.ECDSA}return r.readPKCS8PrvKeyHex(e),r},_getKeyFromPublicPKCS8Hex:function t(e){var r,n=Er.getVbyList(e,0,[0,0],\"06\");if(\"2a864886f70d010101\"===n)r=new He;else if(\"2a8648ce380401\"===n)r=new br.crypto.DSA;else{if(\"2a8648ce3d0201\"!==n)throw\"unsupported PKCS#8 public key hex\";r=new br.crypto.ECDSA}return r.readPKCS8PubKeyHex(e),r},parsePublicRawRSAKeyHex:function t(e){var r=Er,n=r.getChildIdx,i=r.getV,o={};if(\"30\"!=e.substr(0,2))throw\"malformed RSA key(code:001)\";var s=n(e,0);if(2!=s.length)throw\"malformed RSA key(code:002)\";if(\"02\"!=e.substr(s[0],2))throw\"malformed RSA key(code:003)\";if(o.n=i(e,s[0]),\"02\"!=e.substr(s[1],2))throw\"malformed RSA key(code:004)\";return o.e=i(e,s[1]),o},parsePublicPKCS8Hex:function t(e){var r=Er,n=r.getChildIdx,i=r.getV,o={algparam:null},s=n(e,0);if(2!=s.length)throw\"outer DERSequence shall have 2 elements: \"+s.length;var a=s[0];if(\"30\"!=e.substr(a,2))throw\"malformed PKCS8 public key(code:001)\";var u=n(e,a);if(2!=u.length)throw\"malformed PKCS8 public key(code:002)\";if(\"06\"!=e.substr(u[0],2))throw\"malformed PKCS8 public key(code:003)\";if(o.algoid=i(e,u[0]),\"06\"==e.substr(u[1],2)?o.algparam=i(e,u[1]):\"30\"==e.substr(u[1],2)&&(o.algparam={},o.algparam.p=r.getVbyList(e,u[1],[0],\"02\"),o.algparam.q=r.getVbyList(e,u[1],[1],\"02\"),o.algparam.g=r.getVbyList(e,u[1],[2],\"02\")),\"03\"!=e.substr(s[1],2))throw\"malformed PKCS8 public key(code:004)\";return o.key=i(e,s[1]).substr(2),o}}}();Zr.getKey=function(t,e,r){var n=(v=Er).getChildIdx,i=(v.getV,v.getVbyList),o=br.crypto,s=o.ECDSA,a=o.DSA,u=He,c=Hr,h=Zr;if(void 0!==u&&t instanceof u)return t;if(void 0!==s&&t instanceof s)return t;if(void 0!==a&&t instanceof a)return t;if(void 0!==t.curve&&void 0!==t.xy&&void 0===t.d)return new s({pub:t.xy,curve:t.curve});if(void 0!==t.curve&&void 0!==t.d)return new s({prv:t.d,curve:t.curve});if(void 0===t.kty&&void 0!==t.n&&void 0!==t.e&&void 0===t.d)return(P=new u).setPublic(t.n,t.e),P;if(void 0===t.kty&&void 0!==t.n&&void 0!==t.e&&void 0!==t.d&&void 0!==t.p&&void 0!==t.q&&void 0!==t.dp&&void 0!==t.dq&&void 0!==t.co&&void 0===t.qi)return(P=new u).setPrivateEx(t.n,t.e,t.d,t.p,t.q,t.dp,t.dq,t.co),P;if(void 0===t.kty&&void 0!==t.n&&void 0!==t.e&&void 0!==t.d&&void 0===t.p)return(P=new u).setPrivate(t.n,t.e,t.d),P;if(void 0!==t.p&&void 0!==t.q&&void 0!==t.g&&void 0!==t.y&&void 0===t.x)return(P=new a).setPublic(t.p,t.q,t.g,t.y),P;if(void 0!==t.p&&void 0!==t.q&&void 0!==t.g&&void 0!==t.y&&void 0!==t.x)return(P=new a).setPrivate(t.p,t.q,t.g,t.y,t.x),P;if(\"RSA\"===t.kty&&void 0!==t.n&&void 0!==t.e&&void 0===t.d)return(P=new u).setPublic(Ir(t.n),Ir(t.e)),P;if(\"RSA\"===t.kty&&void 0!==t.n&&void 0!==t.e&&void 0!==t.d&&void 0!==t.p&&void 0!==t.q&&void 0!==t.dp&&void 0!==t.dq&&void 0!==t.qi)return(P=new u).setPrivateEx(Ir(t.n),Ir(t.e),Ir(t.d),Ir(t.p),Ir(t.q),Ir(t.dp),Ir(t.dq),Ir(t.qi)),P;if(\"RSA\"===t.kty&&void 0!==t.n&&void 0!==t.e&&void 0!==t.d)return(P=new u).setPrivate(Ir(t.n),Ir(t.e),Ir(t.d)),P;if(\"EC\"===t.kty&&void 0!==t.crv&&void 0!==t.x&&void 0!==t.y&&void 0===t.d){var l=(k=new s({curve:t.crv})).ecparams.keylen/4,f=\"04\"+(\"0000000000\"+Ir(t.x)).slice(-l)+(\"0000000000\"+Ir(t.y)).slice(-l);return k.setPublicKeyHex(f),k}if(\"EC\"===t.kty&&void 0!==t.crv&&void 0!==t.x&&void 0!==t.y&&void 0!==t.d){l=(k=new s({curve:t.crv})).ecparams.keylen/4,f=\"04\"+(\"0000000000\"+Ir(t.x)).slice(-l)+(\"0000000000\"+Ir(t.y)).slice(-l);var g=(\"0000000000\"+Ir(t.d)).slice(-l);return k.setPublicKeyHex(f),k.setPrivateKeyHex(g),k}if(\"pkcs5prv\"===r){var d,p=t,v=Er;if(9===(d=n(p,0)).length)(P=new u).readPKCS5PrvKeyHex(p);else if(6===d.length)(P=new a).readPKCS5PrvKeyHex(p);else{if(!(d.length>2&&\"04\"===p.substr(d[1],2)))throw\"unsupported PKCS#1/5 hexadecimal key\";(P=new s).readPKCS5PrvKeyHex(p)}return P}if(\"pkcs8prv\"===r)return P=h.getKeyFromPlainPrivatePKCS8Hex(t);if(\"pkcs8pub\"===r)return h._getKeyFromPublicPKCS8Hex(t);if(\"x509pub\"===r)return on.getPublicKeyFromCertHex(t);if(-1!=t.indexOf(\"-END CERTIFICATE-\",0)||-1!=t.indexOf(\"-END X509 CERTIFICATE-\",0)||-1!=t.indexOf(\"-END TRUSTED CERTIFICATE-\",0))return on.getPublicKeyFromCertPEM(t);if(-1!=t.indexOf(\"-END PUBLIC KEY-\")){var y=Hr(t,\"PUBLIC KEY\");return h._getKeyFromPublicPKCS8Hex(y)}if(-1!=t.indexOf(\"-END RSA PRIVATE KEY-\")&&-1==t.indexOf(\"4,ENCRYPTED\")){var m=c(t,\"RSA PRIVATE KEY\");return h.getKey(m,null,\"pkcs5prv\")}if(-1!=t.indexOf(\"-END DSA PRIVATE KEY-\")&&-1==t.indexOf(\"4,ENCRYPTED\")){var _=i(R=c(t,\"DSA PRIVATE KEY\"),0,[1],\"02\"),S=i(R,0,[2],\"02\"),b=i(R,0,[3],\"02\"),w=i(R,0,[4],\"02\"),E=i(R,0,[5],\"02\");return(P=new a).setPrivate(new F(_,16),new F(S,16),new F(b,16),new F(w,16),new F(E,16)),P}if(-1!=t.indexOf(\"-END EC PRIVATE KEY-\")&&-1==t.indexOf(\"4,ENCRYPTED\")){m=c(t,\"EC PRIVATE KEY\");return h.getKey(m,null,\"pkcs5prv\")}if(-1!=t.indexOf(\"-END PRIVATE KEY-\"))return h.getKeyFromPlainPrivatePKCS8PEM(t);if(-1!=t.indexOf(\"-END RSA PRIVATE KEY-\")&&-1!=t.indexOf(\"4,ENCRYPTED\")){var x=h.getDecryptedKeyHex(t,e),A=new He;return A.readPKCS5PrvKeyHex(x),A}if(-1!=t.indexOf(\"-END EC PRIVATE KEY-\")&&-1!=t.indexOf(\"4,ENCRYPTED\")){var k,P=i(R=h.getDecryptedKeyHex(t,e),0,[1],\"04\"),C=i(R,0,[2,0],\"06\"),T=i(R,0,[3,0],\"03\").substr(2);if(void 0===br.crypto.OID.oidhex2name[C])throw\"undefined OID(hex) in KJUR.crypto.OID: \"+C;return(k=new s({curve:br.crypto.OID.oidhex2name[C]})).setPublicKeyHex(T),k.setPrivateKeyHex(P),k.isPublic=!1,k}if(-1!=t.indexOf(\"-END DSA PRIVATE KEY-\")&&-1!=t.indexOf(\"4,ENCRYPTED\")){var R;_=i(R=h.getDecryptedKeyHex(t,e),0,[1],\"02\"),S=i(R,0,[2],\"02\"),b=i(R,0,[3],\"02\"),w=i(R,0,[4],\"02\"),E=i(R,0,[5],\"02\");return(P=new a).setPrivate(new F(_,16),new F(S,16),new F(b,16),new F(w,16),new F(E,16)),P}if(-1!=t.indexOf(\"-END ENCRYPTED PRIVATE KEY-\"))return h.getKeyFromEncryptedPKCS8PEM(t,e);throw new Error(\"not supported argument\")},Zr.generateKeypair=function(t,e){if(\"RSA\"==t){var r=e;(s=new He).generate(r,\"10001\"),s.isPrivate=!0,s.isPublic=!0;var n=new He,i=s.n.toString(16),o=s.e.toString(16);return n.setPublic(i,o),n.isPrivate=!1,n.isPublic=!0,(a={}).prvKeyObj=s,a.pubKeyObj=n,a}if(\"EC\"==t){var s,a,u=e,c=new br.crypto.ECDSA({curve:u}).generateKeyPairHex();return(s=new br.crypto.ECDSA({curve:u})).setPublicKeyHex(c.ecpubhex),s.setPrivateKeyHex(c.ecprvhex),s.isPrivate=!0,s.isPublic=!1,(n=new br.crypto.ECDSA({curve:u})).setPublicKeyHex(c.ecpubhex),n.isPrivate=!1,n.isPublic=!0,(a={}).prvKeyObj=s,a.pubKeyObj=n,a}throw\"unknown algorithm: \"+t},Zr.getPEM=function(t,e,r,n,i,o){var s=br,a=s.asn1,u=a.DERObjectIdentifier,c=a.DERInteger,h=a.ASN1Util.newObject,l=a.x509.SubjectPublicKeyInfo,f=s.crypto,g=f.DSA,d=f.ECDSA,p=He;function v(t){return h({seq:[{int:0},{int:{bigint:t.n}},{int:t.e},{int:{bigint:t.d}},{int:{bigint:t.p}},{int:{bigint:t.q}},{int:{bigint:t.dmp1}},{int:{bigint:t.dmq1}},{int:{bigint:t.coeff}}]})}function m(t){return h({seq:[{int:1},{octstr:{hex:t.prvKeyHex}},{tag:[\"a0\",!0,{oid:{name:t.curveName}}]},{tag:[\"a1\",!0,{bitstr:{hex:\"00\"+t.pubKeyHex}}]}]})}function _(t){return h({seq:[{int:0},{int:{bigint:t.p}},{int:{bigint:t.q}},{int:{bigint:t.g}},{int:{bigint:t.y}},{int:{bigint:t.x}}]})}if((void 0!==p&&t instanceof p||void 0!==g&&t instanceof g||void 0!==d&&t instanceof d)&&1==t.isPublic&&(void 0===e||\"PKCS8PUB\"==e))return Mr(F=new l(t).getEncodedHex(),\"PUBLIC KEY\");if(\"PKCS1PRV\"==e&&void 0!==p&&t instanceof p&&(void 0===r||null==r)&&1==t.isPrivate)return Mr(F=v(t).getEncodedHex(),\"RSA PRIVATE KEY\");if(\"PKCS1PRV\"==e&&void 0!==d&&t instanceof d&&(void 0===r||null==r)&&1==t.isPrivate){var S=new u({name:t.curveName}).getEncodedHex(),b=m(t).getEncodedHex(),w=\"\";return w+=Mr(S,\"EC PARAMETERS\"),w+=Mr(b,\"EC PRIVATE KEY\")}if(\"PKCS1PRV\"==e&&void 0!==g&&t instanceof g&&(void 0===r||null==r)&&1==t.isPrivate)return Mr(F=_(t).getEncodedHex(),\"DSA PRIVATE KEY\");if(\"PKCS5PRV\"==e&&void 0!==p&&t instanceof p&&void 0!==r&&null!=r&&1==t.isPrivate){var F=v(t).getEncodedHex();return void 0===n&&(n=\"DES-EDE3-CBC\"),this.getEncryptedPKCS5PEMFromPrvKeyHex(\"RSA\",F,r,n,o)}if(\"PKCS5PRV\"==e&&void 0!==d&&t instanceof d&&void 0!==r&&null!=r&&1==t.isPrivate){F=m(t).getEncodedHex();return void 0===n&&(n=\"DES-EDE3-CBC\"),this.getEncryptedPKCS5PEMFromPrvKeyHex(\"EC\",F,r,n,o)}if(\"PKCS5PRV\"==e&&void 0!==g&&t instanceof g&&void 0!==r&&null!=r&&1==t.isPrivate){F=_(t).getEncodedHex();return void 0===n&&(n=\"DES-EDE3-CBC\"),this.getEncryptedPKCS5PEMFromPrvKeyHex(\"DSA\",F,r,n,o)}var E=function t(e,r){var n=x(e,r);return new h({seq:[{seq:[{oid:{name:\"pkcs5PBES2\"}},{seq:[{seq:[{oid:{name:\"pkcs5PBKDF2\"}},{seq:[{octstr:{hex:n.pbkdf2Salt}},{int:n.pbkdf2Iter}]}]},{seq:[{oid:{name:\"des-EDE3-CBC\"}},{octstr:{hex:n.encryptionSchemeIV}}]}]}]},{octstr:{hex:n.ciphertext}}]}).getEncodedHex()},x=function t(e,r){var n=y.lib.WordArray.random(8),i=y.lib.WordArray.random(8),o=y.PBKDF2(r,n,{keySize:6,iterations:100}),s=y.enc.Hex.parse(e),a=y.TripleDES.encrypt(s,o,{iv:i})+\"\",u={};return u.ciphertext=a,u.pbkdf2Salt=y.enc.Hex.stringify(n),u.pbkdf2Iter=100,u.encryptionSchemeAlg=\"DES-EDE3-CBC\",u.encryptionSchemeIV=y.enc.Hex.stringify(i),u};if(\"PKCS8PRV\"==e&&null!=p&&t instanceof p&&1==t.isPrivate){var A=v(t).getEncodedHex();F=h({seq:[{int:0},{seq:[{oid:{name:\"rsaEncryption\"}},{null:!0}]},{octstr:{hex:A}}]}).getEncodedHex();return void 0===r||null==r?Mr(F,\"PRIVATE KEY\"):Mr(b=E(F,r),\"ENCRYPTED PRIVATE KEY\")}if(\"PKCS8PRV\"==e&&void 0!==d&&t instanceof d&&1==t.isPrivate){A=new h({seq:[{int:1},{octstr:{hex:t.prvKeyHex}},{tag:[\"a1\",!0,{bitstr:{hex:\"00\"+t.pubKeyHex}}]}]}).getEncodedHex(),F=h({seq:[{int:0},{seq:[{oid:{name:\"ecPublicKey\"}},{oid:{name:t.curveName}}]},{octstr:{hex:A}}]}).getEncodedHex();return void 0===r||null==r?Mr(F,\"PRIVATE KEY\"):Mr(b=E(F,r),\"ENCRYPTED PRIVATE KEY\")}if(\"PKCS8PRV\"==e&&void 0!==g&&t instanceof g&&1==t.isPrivate){A=new c({bigint:t.x}).getEncodedHex(),F=h({seq:[{int:0},{seq:[{oid:{name:\"dsa\"}},{seq:[{int:{bigint:t.p}},{int:{bigint:t.q}},{int:{bigint:t.g}}]}]},{octstr:{hex:A}}]}).getEncodedHex();return void 0===r||null==r?Mr(F,\"PRIVATE KEY\"):Mr(b=E(F,r),\"ENCRYPTED PRIVATE KEY\")}throw new Error(\"unsupported object nor format\")},Zr.getKeyFromCSRPEM=function(t){var e=Hr(t,\"CERTIFICATE REQUEST\");return Zr.getKeyFromCSRHex(e)},Zr.getKeyFromCSRHex=function(t){var e=Zr.parseCSRHex(t);return Zr.getKey(e.p8pubkeyhex,null,\"pkcs8pub\")},Zr.parseCSRHex=function(t){var e=Er,r=e.getChildIdx,n=e.getTLV,i={},o=t;if(\"30\"!=o.substr(0,2))throw\"malformed CSR(code:001)\";var s=r(o,0);if(s.length<1)throw\"malformed CSR(code:002)\";if(\"30\"!=o.substr(s[0],2))throw\"malformed CSR(code:003)\";var a=r(o,s[0]);if(a.length<3)throw\"malformed CSR(code:004)\";return i.p8pubkeyhex=n(o,a[2]),i},Zr.getKeyID=function(t){var e=Zr,r=Er;\"string\"==typeof t&&-1!=t.indexOf(\"BEGIN \")&&(t=e.getKey(t));var n=Hr(e.getPEM(t)),i=r.getIdxbyList(n,0,[1]),o=r.getV(n,i).substring(2);return br.crypto.Util.hashHex(o,\"sha1\")},Zr.getJWKFromKey=function(t){var e={};if(t instanceof He&&t.isPrivate)return e.kty=\"RSA\",e.n=Rr(t.n.toString(16)),e.e=Rr(t.e.toString(16)),e.d=Rr(t.d.toString(16)),e.p=Rr(t.p.toString(16)),e.q=Rr(t.q.toString(16)),e.dp=Rr(t.dmp1.toString(16)),e.dq=Rr(t.dmq1.toString(16)),e.qi=Rr(t.coeff.toString(16)),e;if(t instanceof He&&t.isPublic)return e.kty=\"RSA\",e.n=Rr(t.n.toString(16)),e.e=Rr(t.e.toString(16)),e;if(t instanceof br.crypto.ECDSA&&t.isPrivate){if(\"P-256\"!==(n=t.getShortNISTPCurveName())&&\"P-384\"!==n)throw\"unsupported curve name for JWT: \"+n;var r=t.getPublicKeyXYHex();return e.kty=\"EC\",e.crv=n,e.x=Rr(r.x),e.y=Rr(r.y),e.d=Rr(t.prvKeyHex),e}if(t instanceof br.crypto.ECDSA&&t.isPublic){var n;if(\"P-256\"!==(n=t.getShortNISTPCurveName())&&\"P-384\"!==n)throw\"unsupported curve name for JWT: \"+n;r=t.getPublicKeyXYHex();return e.kty=\"EC\",e.crv=n,e.x=Rr(r.x),e.y=Rr(r.y),e}throw\"not supported key object\"},He.getPosArrayOfChildrenFromHex=function(t){return Er.getChildIdx(t,0)},He.getHexValueArrayOfChildrenFromHex=function(t){var e,r=Er.getV,n=r(t,(e=He.getPosArrayOfChildrenFromHex(t))[0]),i=r(t,e[1]),o=r(t,e[2]),s=r(t,e[3]),a=r(t,e[4]),u=r(t,e[5]),c=r(t,e[6]),h=r(t,e[7]),l=r(t,e[8]);return(e=new Array).push(n,i,o,s,a,u,c,h,l),e},He.prototype.readPrivateKeyFromPEMString=function(t){var e=Hr(t),r=He.getHexValueArrayOfChildrenFromHex(e);this.setPrivateEx(r[1],r[2],r[3],r[4],r[5],r[6],r[7],r[8])},He.prototype.readPKCS5PrvKeyHex=function(t){var e=He.getHexValueArrayOfChildrenFromHex(t);this.setPrivateEx(e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8])},He.prototype.readPKCS8PrvKeyHex=function(t){var e,r,n,i,o,s,a,u,c=Er,h=c.getVbyListEx;if(!1===c.isASN1HEX(t))throw new Error(\"not ASN.1 hex string\");try{e=h(t,0,[2,0,1],\"02\"),r=h(t,0,[2,0,2],\"02\"),n=h(t,0,[2,0,3],\"02\"),i=h(t,0,[2,0,4],\"02\"),o=h(t,0,[2,0,5],\"02\"),s=h(t,0,[2,0,6],\"02\"),a=h(t,0,[2,0,7],\"02\"),u=h(t,0,[2,0,8],\"02\")}catch(t){throw new Error(\"malformed PKCS#8 plain RSA private key\")}this.setPrivateEx(e,r,n,i,o,s,a,u)},He.prototype.readPKCS5PubKeyHex=function(t){var e=Er,r=e.getV;if(!1===e.isASN1HEX(t))throw new Error(\"keyHex is not ASN.1 hex string\");var n=e.getChildIdx(t,0);if(2!==n.length||\"02\"!==t.substr(n[0],2)||\"02\"!==t.substr(n[1],2))throw new Error(\"wrong hex for PKCS#5 public key\");var i=r(t,n[0]),o=r(t,n[1]);this.setPublic(i,o)},He.prototype.readPKCS8PubKeyHex=function(t){var e=Er;if(!1===e.isASN1HEX(t))throw new Error(\"not ASN.1 hex string\");if(\"06092a864886f70d010101\"!==e.getTLVbyListEx(t,0,[0,0]))throw new Error(\"not PKCS8 RSA public key\");var r=e.getTLVbyListEx(t,0,[1,0]);this.readPKCS5PubKeyHex(r)},He.prototype.readCertPubKeyHex=function(t,e){var r,n;(r=new on).readCertHex(t),n=r.getPublicKeyHex(),this.readPKCS8PubKeyHex(n)};var tn=new RegExp(\"[^0-9a-f]\",\"gi\");function en(t,e){for(var r=\"\",n=e/4-t.length,i=0;i>24,(16711680&i)>>16,(65280&i)>>8,255&i])))),i+=1;return n}function nn(t){for(var e in br.crypto.Util.DIGESTINFOHEAD){var r=br.crypto.Util.DIGESTINFOHEAD[e],n=r.length;if(t.substring(0,n)==r)return[e,t.substring(n)]}return[]}function on(t){var e,r=Er,n=r.getChildIdx,i=r.getV,o=r.getTLV,s=r.getVbyList,a=r.getVbyListEx,u=r.getTLVbyList,c=r.getTLVbyListEx,h=r.getIdxbyList,l=r.getIdxbyListEx,f=r.getVidx,g=r.oidname,d=r.hextooidstr,p=on,v=Hr;try{e=br.asn1.x509.AlgorithmIdentifier.PSSNAME2ASN1TLV}catch(t){}this.HEX2STAG={\"0c\":\"utf8\",13:\"prn\",16:\"ia5\",\"1a\":\"vis\",\"1e\":\"bmp\"},this.hex=null,this.version=0,this.foffset=0,this.aExtInfo=null,this.getVersion=function(){return null===this.hex||0!==this.version?this.version:\"a003020102\"!==u(this.hex,0,[0,0])?(this.version=1,this.foffset=-1,1):(this.version=3,3)},this.getSerialNumberHex=function(){return a(this.hex,0,[0,0],\"02\")},this.getSignatureAlgorithmField=function(){var t=c(this.hex,0,[0,1]);return this.getAlgorithmIdentifierName(t)},this.getAlgorithmIdentifierName=function(t){for(var r in e)if(t===e[r])return r;return g(a(t,0,[0],\"06\"))},this.getIssuer=function(){return this.getX500Name(this.getIssuerHex())},this.getIssuerHex=function(){return u(this.hex,0,[0,3+this.foffset],\"30\")},this.getIssuerString=function(){return p.hex2dn(this.getIssuerHex())},this.getSubject=function(){return this.getX500Name(this.getSubjectHex())},this.getSubjectHex=function(){return u(this.hex,0,[0,5+this.foffset],\"30\")},this.getSubjectString=function(){return p.hex2dn(this.getSubjectHex())},this.getNotBefore=function(){var t=s(this.hex,0,[0,4+this.foffset,0]);return t=t.replace(/(..)/g,\"%$1\"),t=decodeURIComponent(t)},this.getNotAfter=function(){var t=s(this.hex,0,[0,4+this.foffset,1]);return t=t.replace(/(..)/g,\"%$1\"),t=decodeURIComponent(t)},this.getPublicKeyHex=function(){return r.getTLVbyList(this.hex,0,[0,6+this.foffset],\"30\")},this.getPublicKeyIdx=function(){return h(this.hex,0,[0,6+this.foffset],\"30\")},this.getPublicKeyContentIdx=function(){var t=this.getPublicKeyIdx();return h(this.hex,t,[1,0],\"30\")},this.getPublicKey=function(){return Zr.getKey(this.getPublicKeyHex(),null,\"pkcs8pub\")},this.getSignatureAlgorithmName=function(){var t=u(this.hex,0,[1],\"30\");return this.getAlgorithmIdentifierName(t)},this.getSignatureValueHex=function(){return s(this.hex,0,[2],\"03\",!0)},this.verifySignature=function(t){var e=this.getSignatureAlgorithmField(),r=this.getSignatureValueHex(),n=u(this.hex,0,[0],\"30\"),i=new br.crypto.Signature({alg:e});return i.init(t),i.updateHex(n),i.verify(r)},this.parseExt=function(t){var e,o,a;if(void 0===t){if(a=this.hex,3!==this.version)return-1;e=h(a,0,[0,7,0],\"30\"),o=n(a,e)}else{a=Hr(t);var u=h(a,0,[0,3,0,0],\"06\");if(\"2a864886f70d01090e\"!=i(a,u))return void(this.aExtInfo=new Array);e=h(a,0,[0,3,0,1,0],\"30\"),o=n(a,e),this.hex=a}this.aExtInfo=new Array;for(var c=0;c1){var a=o(t,s[1]),u=this.getGeneralName(a);null!=u.uri&&(i.uri=u.uri)}if(s.length>2){var c=o(t,s[2]);\"0101ff\"==c&&(i.reqauth=!0),\"010100\"==c&&(i.reqauth=!1)}return i},this.getX500NameRule=function(t){for(var e=null,r=[],n=0;n0&&(t.ext=this.getExtParamArray()),t.sighex=this.getSignatureValueHex(),t},this.getExtParamArray=function(t){null==t&&(-1!=l(this.hex,0,[0,\"[3]\"])&&(t=c(this.hex,0,[0,\"[3]\",0],\"30\")));for(var e=[],r=n(t,0),i=0;i0&&(c=new Array(r),(new Oe).nextBytes(c),c=String.fromCharCode.apply(String,c));var h=Nr(u(Ur(\"\\0\\0\\0\\0\\0\\0\\0\\0\"+i+c))),l=[];for(n=0;n>8*a-s&255;for(d[0]&=~p,n=0;nthis.n.bitLength())return 0;var n=nn(this.doPublic(r).toString(16).replace(/^1f+00/,\"\"));if(0==n.length)return!1;var i=n[0];return n[1]==function t(e){return br.crypto.Util.hashString(e,i)}(t)},He.prototype.verifyWithMessageHash=function(t,e){if(e.length!=Math.ceil(this.n.bitLength()/4))return!1;var r=je(e,16);if(r.bitLength()>this.n.bitLength())return 0;var n=nn(this.doPublic(r).toString(16).replace(/^1f+00/,\"\"));if(0==n.length)return!1;n[0];return n[1]==t},He.prototype.verifyPSS=function(t,e,r,n){var i=function t(e){return br.crypto.Util.hashHex(e,r)}(Ur(t));return void 0===n&&(n=-1),this.verifyWithMessageHashPSS(i,e,r,n)},He.prototype.verifyWithMessageHashPSS=function(t,e,r,n){if(e.length!=Math.ceil(this.n.bitLength()/4))return!1;var i,o=new F(e,16),s=function t(e){return br.crypto.Util.hashHex(e,r)},a=Nr(t),u=a.length,c=this.n.bitLength()-1,h=Math.ceil(c/8);if(-1===n||void 0===n)n=u;else if(-2===n)n=h-u-2;else if(n<-2)throw new Error(\"invalid salt length\");if(h>8*h-c&255;if(0!=(f.charCodeAt(0)&d))throw new Error(\"bits beyond keysize not zero\");var p=rn(g,f.length,s),v=[];for(i=0;i0)&&-1==(\":\"+n.join(\":\")+\":\").indexOf(\":\"+v+\":\"))throw\"algorithm '\"+v+\"' not accepted in the list\";if(\"none\"!=v&&null===e)throw\"key shall be specified to verify.\";if(\"string\"==typeof e&&-1!=e.indexOf(\"-----BEGIN \")&&(e=Zr.getKey(e)),!(\"RS\"!=y&&\"PS\"!=y||e instanceof i))throw\"key shall be a RSAKey obj for RS* and PS* algs\";if(\"ES\"==y&&!(e instanceof c))throw\"key shall be a ECDSA obj for ES* algs\";var m=null;if(void 0===s.jwsalg2sigalg[p.alg])throw\"unsupported alg name: \"+v;if(\"none\"==(m=s.jwsalg2sigalg[v]))throw\"not supported\";if(\"Hmac\"==m.substr(0,4)){if(void 0===e)throw\"hexadecimal key shall be specified for HMAC\";var _=new h({alg:m,pass:e});return _.updateString(g),d==_.doFinal()}if(-1!=m.indexOf(\"withECDSA\")){var S,b=null;try{b=c.concatSigToASN1Sig(d)}catch(t){return!1}return(S=new l({alg:m})).init(e),S.updateString(g),S.verify(b)}return(S=new l({alg:m})).init(e),S.updateString(g),S.verify(d)},br.jws.JWS.parse=function(t){var e,r,n,i=t.split(\".\"),o={};if(2!=i.length&&3!=i.length)throw\"malformed sJWS: wrong number of '.' splitted elements\";return e=i[0],r=i[1],3==i.length&&(n=i[2]),o.headerObj=br.jws.JWS.readSafeJSONString(Fr(e)),o.payloadObj=br.jws.JWS.readSafeJSONString(Fr(r)),o.headerPP=JSON.stringify(o.headerObj,null,\" \"),null==o.payloadObj?o.payloadPP=Fr(r):o.payloadPP=JSON.stringify(o.payloadObj,null,\" \"),void 0!==n&&(o.sigHex=Ir(n)),o},br.jws.JWS.verifyJWT=function(t,e,n){var i=br.jws,o=i.JWS,s=o.readSafeJSONString,a=o.inArray,u=o.includedArray,c=t.split(\".\"),h=c[0],l=c[1],f=(Ir(c[2]),s(Fr(h))),g=s(Fr(l));if(void 0===f.alg)return!1;if(void 0===n.alg)throw\"acceptField.alg shall be specified\";if(!a(f.alg,n.alg))return!1;if(void 0!==g.iss&&\"object\"===r(n.iss)&&!a(g.iss,n.iss))return!1;if(void 0!==g.sub&&\"object\"===r(n.sub)&&!a(g.sub,n.sub))return!1;if(void 0!==g.aud&&\"object\"===r(n.aud))if(\"string\"==typeof g.aud){if(!a(g.aud,n.aud))return!1}else if(\"object\"==r(g.aud)&&!u(g.aud,n.aud))return!1;var d=i.IntDate.getNow();return void 0!==n.verifyAt&&\"number\"==typeof n.verifyAt&&(d=n.verifyAt),void 0!==n.gracePeriod&&\"number\"==typeof n.gracePeriod||(n.gracePeriod=0),!(void 0!==g.exp&&\"number\"==typeof g.exp&&g.exp+n.gracePeriodr.length&&(n=r.length);for(var i=0;i\n * @license MIT\n */\nvar n=r(30),i=r(31),o=r(32);function s(){return u.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function a(t,e){if(s()=s())throw new RangeError(\"Attempt to allocate Buffer larger than maximum size: 0x\"+s().toString(16)+\" bytes\");return 0|t}function d(t,e){if(u.isBuffer(t))return t.length;if(\"undefined\"!=typeof ArrayBuffer&&\"function\"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;\"string\"!=typeof t&&(t=\"\"+t);var r=t.length;if(0===r)return 0;for(var n=!1;;)switch(e){case\"ascii\":case\"latin1\":case\"binary\":return r;case\"utf8\":case\"utf-8\":case void 0:return K(t).length;case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return 2*r;case\"hex\":return r>>>1;case\"base64\":return q(t).length;default:if(n)return K(t).length;e=(\"\"+e).toLowerCase(),n=!0}}function p(t,e,r){var n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return\"\";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return\"\";if((r>>>=0)<=(e>>>=0))return\"\";for(t||(t=\"utf8\");;)switch(t){case\"hex\":return I(this,e,r);case\"utf8\":case\"utf-8\":return A(this,e,r);case\"ascii\":return T(this,e,r);case\"latin1\":case\"binary\":return R(this,e,r);case\"base64\":return x(this,e,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return D(this,e,r);default:if(n)throw new TypeError(\"Unknown encoding: \"+t);t=(t+\"\").toLowerCase(),n=!0}}function v(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function y(t,e,r,n,i){if(0===t.length)return-1;if(\"string\"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if(\"string\"==typeof e&&(e=u.from(e,n)),u.isBuffer(e))return 0===e.length?-1:m(t,e,r,n,i);if(\"number\"==typeof e)return e&=255,u.TYPED_ARRAY_SUPPORT&&\"function\"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):m(t,[e],r,n,i);throw new TypeError(\"val must be string, number or Buffer\")}function m(t,e,r,n,i){var o,s=1,a=t.length,u=e.length;if(void 0!==n&&(\"ucs2\"===(n=String(n).toLowerCase())||\"ucs-2\"===n||\"utf16le\"===n||\"utf-16le\"===n)){if(t.length<2||e.length<2)return-1;s=2,a/=2,u/=2,r/=2}function c(t,e){return 1===s?t[e]:t.readUInt16BE(e*s)}if(i){var h=-1;for(o=r;oa&&(r=a-u),o=r;o>=0;o--){for(var l=!0,f=0;fi&&(n=i):n=i;var o=e.length;if(o%2!=0)throw new TypeError(\"Invalid hex string\");n>o/2&&(n=o/2);for(var s=0;s>8,i=r%256,o.push(i),o.push(n);return o}(e,t.length-r),t,r,n)}function x(t,e,r){return 0===e&&r===t.length?n.fromByteArray(t):n.fromByteArray(t.slice(e,r))}function A(t,e,r){r=Math.min(t.length,r);for(var n=[],i=e;i239?4:c>223?3:c>191?2:1;if(i+l<=r)switch(l){case 1:c<128&&(h=c);break;case 2:128==(192&(o=t[i+1]))&&(u=(31&c)<<6|63&o)>127&&(h=u);break;case 3:o=t[i+1],s=t[i+2],128==(192&o)&&128==(192&s)&&(u=(15&c)<<12|(63&o)<<6|63&s)>2047&&(u<55296||u>57343)&&(h=u);break;case 4:o=t[i+1],s=t[i+2],a=t[i+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(u=(15&c)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&u<1114112&&(h=u)}null===h?(h=65533,l=1):h>65535&&(h-=65536,n.push(h>>>10&1023|55296),h=56320|1023&h),n.push(h),i+=l}return function f(t){var e=t.length;if(e<=C)return String.fromCharCode.apply(String,t);var r=\"\",n=0;for(;n0&&(r=this.toString(\"hex\",0,n).match(/.{2}/g).join(\" \"),this.length>n&&(r+=\" ... \")),\"\"},u.prototype.compare=function t(e,r,n,i,o){if(!u.isBuffer(e))throw new TypeError(\"Argument must be a Buffer\");if(void 0===r&&(r=0),void 0===n&&(n=e?e.length:0),void 0===i&&(i=0),void 0===o&&(o=this.length),r<0||n>e.length||i<0||o>this.length)throw new RangeError(\"out of range index\");if(i>=o&&r>=n)return 0;if(i>=o)return-1;if(r>=n)return 1;if(this===e)return 0;for(var s=(o>>>=0)-(i>>>=0),a=(n>>>=0)-(r>>>=0),c=Math.min(s,a),h=this.slice(i,o),l=e.slice(r,n),f=0;fo)&&(n=o),e.length>0&&(n<0||r<0)||r>this.length)throw new RangeError(\"Attempt to write outside buffer bounds\");i||(i=\"utf8\");for(var s=!1;;)switch(i){case\"hex\":return _(this,e,r,n);case\"utf8\":case\"utf-8\":return S(this,e,r,n);case\"ascii\":return b(this,e,r,n);case\"latin1\":case\"binary\":return w(this,e,r,n);case\"base64\":return F(this,e,r,n);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return E(this,e,r,n);default:if(s)throw new TypeError(\"Unknown encoding: \"+i);i=(\"\"+i).toLowerCase(),s=!0}},u.prototype.toJSON=function t(){return{type:\"Buffer\",data:Array.prototype.slice.call(this._arr||this,0)}};var C=4096;function T(t,e,r){var n=\"\";r=Math.min(t.length,r);for(var i=e;in)&&(r=n);for(var i=\"\",o=e;or)throw new RangeError(\"Trying to access beyond buffer length\")}function N(t,e,r,n,i,o){if(!u.isBuffer(t))throw new TypeError('\"buffer\" argument must be a Buffer instance');if(e>i||et.length)throw new RangeError(\"Index out of range\")}function U(t,e,r,n){e<0&&(e=65535+e+1);for(var i=0,o=Math.min(t.length-r,2);i>>8*(n?i:1-i)}function B(t,e,r,n){e<0&&(e=4294967295+e+1);for(var i=0,o=Math.min(t.length-r,4);i>>8*(n?i:3-i)&255}function O(t,e,r,n,i,o){if(r+n>t.length)throw new RangeError(\"Index out of range\");if(r<0)throw new RangeError(\"Index out of range\")}function j(t,e,r,n,o){return o||O(t,0,r,4),i.write(t,e,r,n,23,4),r+4}function M(t,e,r,n,o){return o||O(t,0,r,8),i.write(t,e,r,n,52,8),r+8}u.prototype.slice=function t(e,r){var n,i=this.length;if((e=~~e)<0?(e+=i)<0&&(e=0):e>i&&(e=i),(r=void 0===r?i:~~r)<0?(r+=i)<0&&(r=0):r>i&&(r=i),r0&&(o*=256);)i+=this[e+--r]*o;return i},u.prototype.readUInt8=function t(e,r){return r||L(e,1,this.length),this[e]},u.prototype.readUInt16LE=function t(e,r){return r||L(e,2,this.length),this[e]|this[e+1]<<8},u.prototype.readUInt16BE=function t(e,r){return r||L(e,2,this.length),this[e]<<8|this[e+1]},u.prototype.readUInt32LE=function t(e,r){return r||L(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},u.prototype.readUInt32BE=function t(e,r){return r||L(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},u.prototype.readIntLE=function t(e,r,n){e|=0,r|=0,n||L(e,r,this.length);for(var i=this[e],o=1,s=0;++s=(o*=128)&&(i-=Math.pow(2,8*r)),i},u.prototype.readIntBE=function t(e,r,n){e|=0,r|=0,n||L(e,r,this.length);for(var i=r,o=1,s=this[e+--i];i>0&&(o*=256);)s+=this[e+--i]*o;return s>=(o*=128)&&(s-=Math.pow(2,8*r)),s},u.prototype.readInt8=function t(e,r){return r||L(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},u.prototype.readInt16LE=function t(e,r){r||L(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},u.prototype.readInt16BE=function t(e,r){r||L(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},u.prototype.readInt32LE=function t(e,r){return r||L(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},u.prototype.readInt32BE=function t(e,r){return r||L(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},u.prototype.readFloatLE=function t(e,r){return r||L(e,4,this.length),i.read(this,e,!0,23,4)},u.prototype.readFloatBE=function t(e,r){return r||L(e,4,this.length),i.read(this,e,!1,23,4)},u.prototype.readDoubleLE=function t(e,r){return r||L(e,8,this.length),i.read(this,e,!0,52,8)},u.prototype.readDoubleBE=function t(e,r){return r||L(e,8,this.length),i.read(this,e,!1,52,8)},u.prototype.writeUIntLE=function t(e,r,n,i){(e=+e,r|=0,n|=0,i)||N(this,e,r,n,Math.pow(2,8*n)-1,0);var o=1,s=0;for(this[r]=255&e;++s=0&&(s*=256);)this[r+o]=e/s&255;return r+n},u.prototype.writeUInt8=function t(e,r,n){return e=+e,r|=0,n||N(this,e,r,1,255,0),u.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[r]=255&e,r+1},u.prototype.writeUInt16LE=function t(e,r,n){return e=+e,r|=0,n||N(this,e,r,2,65535,0),u.TYPED_ARRAY_SUPPORT?(this[r]=255&e,this[r+1]=e>>>8):U(this,e,r,!0),r+2},u.prototype.writeUInt16BE=function t(e,r,n){return e=+e,r|=0,n||N(this,e,r,2,65535,0),u.TYPED_ARRAY_SUPPORT?(this[r]=e>>>8,this[r+1]=255&e):U(this,e,r,!1),r+2},u.prototype.writeUInt32LE=function t(e,r,n){return e=+e,r|=0,n||N(this,e,r,4,4294967295,0),u.TYPED_ARRAY_SUPPORT?(this[r+3]=e>>>24,this[r+2]=e>>>16,this[r+1]=e>>>8,this[r]=255&e):B(this,e,r,!0),r+4},u.prototype.writeUInt32BE=function t(e,r,n){return e=+e,r|=0,n||N(this,e,r,4,4294967295,0),u.TYPED_ARRAY_SUPPORT?(this[r]=e>>>24,this[r+1]=e>>>16,this[r+2]=e>>>8,this[r+3]=255&e):B(this,e,r,!1),r+4},u.prototype.writeIntLE=function t(e,r,n,i){if(e=+e,r|=0,!i){var o=Math.pow(2,8*n-1);N(this,e,r,n,o-1,-o)}var s=0,a=1,u=0;for(this[r]=255&e;++s>0)-u&255;return r+n},u.prototype.writeIntBE=function t(e,r,n,i){if(e=+e,r|=0,!i){var o=Math.pow(2,8*n-1);N(this,e,r,n,o-1,-o)}var s=n-1,a=1,u=0;for(this[r+s]=255&e;--s>=0&&(a*=256);)e<0&&0===u&&0!==this[r+s+1]&&(u=1),this[r+s]=(e/a>>0)-u&255;return r+n},u.prototype.writeInt8=function t(e,r,n){return e=+e,r|=0,n||N(this,e,r,1,127,-128),u.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[r]=255&e,r+1},u.prototype.writeInt16LE=function t(e,r,n){return e=+e,r|=0,n||N(this,e,r,2,32767,-32768),u.TYPED_ARRAY_SUPPORT?(this[r]=255&e,this[r+1]=e>>>8):U(this,e,r,!0),r+2},u.prototype.writeInt16BE=function t(e,r,n){return e=+e,r|=0,n||N(this,e,r,2,32767,-32768),u.TYPED_ARRAY_SUPPORT?(this[r]=e>>>8,this[r+1]=255&e):U(this,e,r,!1),r+2},u.prototype.writeInt32LE=function t(e,r,n){return e=+e,r|=0,n||N(this,e,r,4,2147483647,-2147483648),u.TYPED_ARRAY_SUPPORT?(this[r]=255&e,this[r+1]=e>>>8,this[r+2]=e>>>16,this[r+3]=e>>>24):B(this,e,r,!0),r+4},u.prototype.writeInt32BE=function t(e,r,n){return e=+e,r|=0,n||N(this,e,r,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),u.TYPED_ARRAY_SUPPORT?(this[r]=e>>>24,this[r+1]=e>>>16,this[r+2]=e>>>8,this[r+3]=255&e):B(this,e,r,!1),r+4},u.prototype.writeFloatLE=function t(e,r,n){return j(this,e,r,!0,n)},u.prototype.writeFloatBE=function t(e,r,n){return j(this,e,r,!1,n)},u.prototype.writeDoubleLE=function t(e,r,n){return M(this,e,r,!0,n)},u.prototype.writeDoubleBE=function t(e,r,n){return M(this,e,r,!1,n)},u.prototype.copy=function t(e,r,n,i){if(n||(n=0),i||0===i||(i=this.length),r>=e.length&&(r=e.length),r||(r=0),i>0&&i=this.length)throw new RangeError(\"sourceStart out of bounds\");if(i<0)throw new RangeError(\"sourceEnd out of bounds\");i>this.length&&(i=this.length),e.length-r=0;--o)e[o+r]=this[o+n];else if(s<1e3||!u.TYPED_ARRAY_SUPPORT)for(o=0;o>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),\"number\"==typeof e)for(s=r;s55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===n){(e-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;o.push(r)}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error(\"Invalid code point\");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function q(t){return n.toByteArray(function e(t){if((t=function e(t){return t.trim?t.trim():t.replace(/^\\s+|\\s+$/g,\"\")}(t).replace(H,\"\")).length<2)return\"\";for(;t.length%4!=0;)t+=\"=\";return t}(t))}function J(t,e,r,n){for(var i=0;i=e.length||i>=t.length);++i)e[i+r]=t[i];return i}}).call(this,r(29))},function(t,e){var r;r=function(){return this}();try{r=r||new Function(\"return this\")()}catch(t){\"object\"==typeof window&&(r=window)}t.exports=r},function(t,e,r){\"use strict\";e.byteLength=function n(t){var e=f(t),r=e[0],n=e[1];return 3*(r+n)/4-n},e.toByteArray=function i(t){var e,r,n=f(t),i=n[0],o=n[1],s=new u(function c(t,e,r){return 3*(e+r)/4-r}(0,i,o)),h=0,l=o>0?i-4:i;for(r=0;r>16&255,s[h++]=e>>8&255,s[h++]=255&e;2===o&&(e=a[t.charCodeAt(r)]<<2|a[t.charCodeAt(r+1)]>>4,s[h++]=255&e);1===o&&(e=a[t.charCodeAt(r)]<<10|a[t.charCodeAt(r+1)]<<4|a[t.charCodeAt(r+2)]>>2,s[h++]=e>>8&255,s[h++]=255&e);return s},e.fromByteArray=function o(t){for(var e,r=t.length,n=r%3,i=[],o=16383,a=0,u=r-n;au?u:a+o));1===n?(e=t[r-1],i.push(s[e>>2]+s[e<<4&63]+\"==\")):2===n&&(e=(t[r-2]<<8)+t[r-1],i.push(s[e>>10]+s[e>>4&63]+s[e<<2&63]+\"=\"));return i.join(\"\")};for(var s=[],a=[],u=\"undefined\"!=typeof Uint8Array?Uint8Array:Array,c=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",h=0,l=c.length;h0)throw new Error(\"Invalid string. Length must be a multiple of 4\");var r=t.indexOf(\"=\");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function g(t,e,r){for(var n,i,o=[],a=e;a>18&63]+s[i>>12&63]+s[i>>6&63]+s[63&i]);return o.join(\"\")}a[\"-\".charCodeAt(0)]=62,a[\"_\".charCodeAt(0)]=63},function(t,e){\n/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\ne.read=function(t,e,r,n,i){var o,s,a=8*i-n-1,u=(1<>1,h=-7,l=r?i-1:0,f=r?-1:1,g=t[e+l];for(l+=f,o=g&(1<<-h)-1,g>>=-h,h+=a;h>0;o=256*o+t[e+l],l+=f,h-=8);for(s=o&(1<<-h)-1,o>>=-h,h+=n;h>0;s=256*s+t[e+l],l+=f,h-=8);if(0===o)o=1-c;else{if(o===u)return s?NaN:1/0*(g?-1:1);s+=Math.pow(2,n),o-=c}return(g?-1:1)*s*Math.pow(2,o-n)},e.write=function(t,e,r,n,i,o){var s,a,u,c=8*o-i-1,h=(1<>1,f=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,g=n?0:o-1,d=n?1:-1,p=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=h):(s=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-s))<1&&(s--,u*=2),(e+=s+l>=1?f/u:f*Math.pow(2,1-l))*u>=2&&(s++,u/=2),s+l>=h?(a=0,s=h):s+l>=1?(a=(e*u-1)*Math.pow(2,i),s+=l):(a=e*Math.pow(2,l-1)*Math.pow(2,i),s=0));i>=8;t[r+g]=255&a,g+=d,a/=256,i-=8);for(s=s<0;t[r+g]=255&s,g+=d,s/=256,c-=8);t[r+g-d]|=128*p}},function(t,e){var r={}.toString;t.exports=Array.isArray||function(t){return\"[object Array]\"==r.call(t)}},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function n(t){var e=t.jws,r=t.KeyUtil,n=t.X509,o=t.crypto,s=t.hextob64u,a=t.b64tohex,u=t.AllowedSigningAlgs;return function(){function t(){!function e(t,r){if(!(t instanceof r))throw new TypeError(\"Cannot call a class as a function\")}(this,t)}return t.parseJwt=function t(r){i.Log.debug(\"JoseUtil.parseJwt\");try{var n=e.JWS.parse(r);return{header:n.headerObj,payload:n.payloadObj}}catch(t){i.Log.error(t)}},t.validateJwt=function e(o,s,u,c,h,l,f){i.Log.debug(\"JoseUtil.validateJwt\");try{if(\"RSA\"===s.kty)if(s.e&&s.n)s=r.getKey(s);else{if(!s.x5c||!s.x5c.length)return i.Log.error(\"JoseUtil.validateJwt: RSA key missing key material\",s),Promise.reject(new Error(\"RSA key missing key material\"));var g=a(s.x5c[0]);s=n.getPublicKeyFromCertHex(g)}else{if(\"EC\"!==s.kty)return i.Log.error(\"JoseUtil.validateJwt: Unsupported key type\",s&&s.kty),Promise.reject(new Error(s.kty));if(!(s.crv&&s.x&&s.y))return i.Log.error(\"JoseUtil.validateJwt: EC key missing key material\",s),Promise.reject(new Error(\"EC key missing key material\"));s=r.getKey(s)}return t._validateJwt(o,s,u,c,h,l,f)}catch(t){return i.Log.error(t&&t.message||t),Promise.reject(\"JWT validation failed\")}},t.validateJwtAttributes=function e(r,n,o,s,a,u){s||(s=0),a||(a=parseInt(Date.now()/1e3));var c=t.parseJwt(r).payload;if(!c.iss)return i.Log.error(\"JoseUtil._validateJwt: issuer was not provided\"),Promise.reject(new Error(\"issuer was not provided\"));if(c.iss!==n)return i.Log.error(\"JoseUtil._validateJwt: Invalid issuer in token\",c.iss),Promise.reject(new Error(\"Invalid issuer in token: \"+c.iss));if(!c.aud)return i.Log.error(\"JoseUtil._validateJwt: aud was not provided\"),Promise.reject(new Error(\"aud was not provided\"));if(!(c.aud===o||Array.isArray(c.aud)&&c.aud.indexOf(o)>=0))return i.Log.error(\"JoseUtil._validateJwt: Invalid audience in token\",c.aud),Promise.reject(new Error(\"Invalid audience in token: \"+c.aud));if(c.azp&&c.azp!==o)return i.Log.error(\"JoseUtil._validateJwt: Invalid azp in token\",c.azp),Promise.reject(new Error(\"Invalid azp in token: \"+c.azp));if(!u){var h=a+s,l=a-s;if(!c.iat)return i.Log.error(\"JoseUtil._validateJwt: iat was not provided\"),Promise.reject(new Error(\"iat was not provided\"));if(h1&&void 0!==arguments[1]?arguments[1]:\"#\";o(this,t);var n=i.UrlUtility.parseUrlFragment(e,r);this.error=n.error,this.error_description=n.error_description,this.error_uri=n.error_uri,this.code=n.code,this.state=n.state,this.id_token=n.id_token,this.session_state=n.session_state,this.access_token=n.access_token,this.token_type=n.token_type,this.scope=n.scope,this.profile=void 0,this.expires_in=n.expires_in}return n(t,[{key:\"expires_in\",get:function t(){if(this.expires_at){var e=parseInt(Date.now()/1e3);return this.expires_at-e}},set:function t(e){var r=parseInt(e);if(\"number\"==typeof r&&r>0){var n=parseInt(Date.now()/1e3);this.expires_at=n+r}}},{key:\"expired\",get:function t(){var e=this.expires_in;if(void 0!==e)return e<=0}},{key:\"scopes\",get:function t(){return(this.scope||\"\").split(\" \")}},{key:\"isOpenIdConnect\",get:function t(){return this.scopes.indexOf(\"openid\")>=0||!!this.id_token}}]),t}()},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.SignoutRequest=void 0;var n=r(0),i=r(3),o=r(9);e.SignoutRequest=function t(e){var r=e.url,s=e.id_token_hint,a=e.post_logout_redirect_uri,u=e.data,c=e.extraQueryParams,h=e.request_type;if(function l(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),!r)throw n.Log.error(\"SignoutRequest.ctor: No url passed\"),new Error(\"url\");for(var f in s&&(r=i.UrlUtility.addQueryParam(r,\"id_token_hint\",s)),a&&(r=i.UrlUtility.addQueryParam(r,\"post_logout_redirect_uri\",a),u&&(this.state=new o.State({data:u,request_type:h}),r=i.UrlUtility.addQueryParam(r,\"state\",this.state.id))),c)r=i.UrlUtility.addQueryParam(r,f,c[f]);this.url=r}},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.SignoutResponse=void 0;var n=r(3);e.SignoutResponse=function t(e){!function r(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var i=n.UrlUtility.parseUrlFragment(e,\"?\");this.error=i.error,this.error_description=i.error_description,this.error_uri=i.error_uri,this.state=i.state}},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.InMemoryWebStorage=void 0;var n=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:c.SilentRenewService,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:h.SessionMonitor,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:f.TokenRevocationClient,l=arguments.length>4&&void 0!==arguments[4]?arguments[4]:g.TokenClient,y=arguments.length>5&&void 0!==arguments[5]?arguments[5]:d.JoseUtil;p(this,e),r instanceof s.UserManagerSettings||(r=new s.UserManagerSettings(r));var m=v(this,t.call(this,r));return m._events=new u.UserManagerEvents(r),m._silentRenewService=new n(m),m.settings.automaticSilentRenew&&(i.Log.debug(\"UserManager.ctor: automaticSilentRenew is configured, setting up silent renew\"),m.startSilentRenew()),m.settings.monitorSession&&(i.Log.debug(\"UserManager.ctor: monitorSession is configured, setting up session monitor\"),m._sessionMonitor=new o(m)),m._tokenRevocationClient=new a(m._settings),m._tokenClient=new l(m._settings),m._joseUtil=y,m}return function r(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e.prototype.getUser=function t(){var e=this;return this._loadUser().then((function(t){return t?(i.Log.info(\"UserManager.getUser: user loaded\"),e._events.load(t,!1),t):(i.Log.info(\"UserManager.getUser: user not found in storage\"),null)}))},e.prototype.removeUser=function t(){var e=this;return this.storeUser(null).then((function(){i.Log.info(\"UserManager.removeUser: user removed from storage\"),e._events.unload()}))},e.prototype.signinRedirect=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type=\"si:r\";var r={useReplaceToNavigate:e.useReplaceToNavigate};return this._signinStart(e,this._redirectNavigator,r).then((function(){i.Log.info(\"UserManager.signinRedirect: successful\")}))},e.prototype.signinRedirectCallback=function t(e){return this._signinEnd(e||this._redirectNavigator.url).then((function(t){return t.profile&&t.profile.sub?i.Log.info(\"UserManager.signinRedirectCallback: successful, signed in sub: \",t.profile.sub):i.Log.info(\"UserManager.signinRedirectCallback: no sub\"),t}))},e.prototype.signinPopup=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type=\"si:p\";var r=e.redirect_uri||this.settings.popup_redirect_uri||this.settings.redirect_uri;return r?(e.redirect_uri=r,e.display=\"popup\",this._signin(e,this._popupNavigator,{startUrl:r,popupWindowFeatures:e.popupWindowFeatures||this.settings.popupWindowFeatures,popupWindowTarget:e.popupWindowTarget||this.settings.popupWindowTarget}).then((function(t){return t&&(t.profile&&t.profile.sub?i.Log.info(\"UserManager.signinPopup: signinPopup successful, signed in sub: \",t.profile.sub):i.Log.info(\"UserManager.signinPopup: no sub\")),t}))):(i.Log.error(\"UserManager.signinPopup: No popup_redirect_uri or redirect_uri configured\"),Promise.reject(new Error(\"No popup_redirect_uri or redirect_uri configured\")))},e.prototype.signinPopupCallback=function t(e){return this._signinCallback(e,this._popupNavigator).then((function(t){return t&&(t.profile&&t.profile.sub?i.Log.info(\"UserManager.signinPopupCallback: successful, signed in sub: \",t.profile.sub):i.Log.info(\"UserManager.signinPopupCallback: no sub\")),t})).catch((function(t){i.Log.error(t.message)}))},e.prototype.signinSilent=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return r=Object.assign({},r),this._loadUser().then((function(t){return t&&t.refresh_token?(r.refresh_token=t.refresh_token,e._useRefreshToken(r)):(r.request_type=\"si:s\",r.id_token_hint=r.id_token_hint||e.settings.includeIdTokenInSilentRenew&&t&&t.id_token,t&&e._settings.validateSubOnSilentRenew&&(i.Log.debug(\"UserManager.signinSilent, subject prior to silent renew: \",t.profile.sub),r.current_sub=t.profile.sub),e._signinSilentIframe(r))}))},e.prototype._useRefreshToken=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this._tokenClient.exchangeRefreshToken(r).then((function(t){return t?t.access_token?e._loadUser().then((function(r){if(r){var n=Promise.resolve();return t.id_token&&(n=e._validateIdTokenFromTokenRefreshToken(r.profile,t.id_token)),n.then((function(){return i.Log.debug(\"UserManager._useRefreshToken: refresh token response success\"),r.id_token=t.id_token||r.id_token,r.access_token=t.access_token,r.refresh_token=t.refresh_token||r.refresh_token,r.expires_in=t.expires_in,e.storeUser(r).then((function(){return e._events.load(r),r}))}))}return null})):(i.Log.error(\"UserManager._useRefreshToken: No access token returned from token endpoint\"),Promise.reject(\"No access token returned from token endpoint\")):(i.Log.error(\"UserManager._useRefreshToken: No response returned from token endpoint\"),Promise.reject(\"No response returned from token endpoint\"))}))},e.prototype._validateIdTokenFromTokenRefreshToken=function t(e,r){var n=this;return this._metadataService.getIssuer().then((function(t){return n.settings.getEpochTime().then((function(o){return n._joseUtil.validateJwtAttributes(r,t,n._settings.client_id,n._settings.clockSkew,o).then((function(t){return t?t.sub!==e.sub?(i.Log.error(\"UserManager._validateIdTokenFromTokenRefreshToken: sub in id_token does not match current sub\"),Promise.reject(new Error(\"sub in id_token does not match current sub\"))):t.auth_time&&t.auth_time!==e.auth_time?(i.Log.error(\"UserManager._validateIdTokenFromTokenRefreshToken: auth_time in id_token does not match original auth_time\"),Promise.reject(new Error(\"auth_time in id_token does not match original auth_time\"))):t.azp&&t.azp!==e.azp?(i.Log.error(\"UserManager._validateIdTokenFromTokenRefreshToken: azp in id_token does not match original azp\"),Promise.reject(new Error(\"azp in id_token does not match original azp\"))):!t.azp&&e.azp?(i.Log.error(\"UserManager._validateIdTokenFromTokenRefreshToken: azp not in id_token, but present in original id_token\"),Promise.reject(new Error(\"azp not in id_token, but present in original id_token\"))):void 0:(i.Log.error(\"UserManager._validateIdTokenFromTokenRefreshToken: Failed to validate id_token\"),Promise.reject(new Error(\"Failed to validate id_token\")))}))}))}))},e.prototype._signinSilentIframe=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.redirect_uri||this.settings.silent_redirect_uri||this.settings.redirect_uri;return r?(e.redirect_uri=r,e.prompt=e.prompt||\"none\",this._signin(e,this._iframeNavigator,{startUrl:r,silentRequestTimeout:e.silentRequestTimeout||this.settings.silentRequestTimeout}).then((function(t){return t&&(t.profile&&t.profile.sub?i.Log.info(\"UserManager.signinSilent: successful, signed in sub: \",t.profile.sub):i.Log.info(\"UserManager.signinSilent: no sub\")),t}))):(i.Log.error(\"UserManager.signinSilent: No silent_redirect_uri configured\"),Promise.reject(new Error(\"No silent_redirect_uri configured\")))},e.prototype.signinSilentCallback=function t(e){return this._signinCallback(e,this._iframeNavigator).then((function(t){return t&&(t.profile&&t.profile.sub?i.Log.info(\"UserManager.signinSilentCallback: successful, signed in sub: \",t.profile.sub):i.Log.info(\"UserManager.signinSilentCallback: no sub\")),t}))},e.prototype.signinCallback=function t(e){var r=this;return this.readSigninResponseState(e).then((function(t){var n=t.state;t.response;return\"si:r\"===n.request_type?r.signinRedirectCallback(e):\"si:p\"===n.request_type?r.signinPopupCallback(e):\"si:s\"===n.request_type?r.signinSilentCallback(e):Promise.reject(new Error(\"invalid response_type in state\"))}))},e.prototype.signoutCallback=function t(e,r){var n=this;return this.readSignoutResponseState(e).then((function(t){var i=t.state,o=t.response;return i?\"so:r\"===i.request_type?n.signoutRedirectCallback(e):\"so:p\"===i.request_type?n.signoutPopupCallback(e,r):Promise.reject(new Error(\"invalid response_type in state\")):o}))},e.prototype.querySessionStatus=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(r=Object.assign({},r)).request_type=\"si:s\";var n=r.redirect_uri||this.settings.silent_redirect_uri||this.settings.redirect_uri;return n?(r.redirect_uri=n,r.prompt=\"none\",r.response_type=r.response_type||this.settings.query_status_response_type,r.scope=r.scope||\"openid\",r.skipUserInfo=!0,this._signinStart(r,this._iframeNavigator,{startUrl:n,silentRequestTimeout:r.silentRequestTimeout||this.settings.silentRequestTimeout}).then((function(t){return e.processSigninResponse(t.url).then((function(t){if(i.Log.debug(\"UserManager.querySessionStatus: got signin response\"),t.session_state&&t.profile.sub)return i.Log.info(\"UserManager.querySessionStatus: querySessionStatus success for sub: \",t.profile.sub),{session_state:t.session_state,sub:t.profile.sub,sid:t.profile.sid};i.Log.info(\"querySessionStatus successful, user not authenticated\")})).catch((function(t){if(t.session_state&&e.settings.monitorAnonymousSession&&(\"login_required\"==t.message||\"consent_required\"==t.message||\"interaction_required\"==t.message||\"account_selection_required\"==t.message))return i.Log.info(\"UserManager.querySessionStatus: querySessionStatus success for anonymous user\"),{session_state:t.session_state};throw t}))}))):(i.Log.error(\"UserManager.querySessionStatus: No silent_redirect_uri configured\"),Promise.reject(new Error(\"No silent_redirect_uri configured\")))},e.prototype._signin=function t(e,r){var n=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._signinStart(e,r,i).then((function(t){return n._signinEnd(t.url,e)}))},e.prototype._signinStart=function t(e,r){var n=this,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return r.prepare(o).then((function(t){return i.Log.debug(\"UserManager._signinStart: got navigator window handle\"),n.createSigninRequest(e).then((function(e){return i.Log.debug(\"UserManager._signinStart: got signin request\"),o.url=e.url,o.id=e.state.id,t.navigate(o)})).catch((function(e){throw t.close&&(i.Log.debug(\"UserManager._signinStart: Error after preparing navigator, closing navigator window\"),t.close()),e}))}))},e.prototype._signinEnd=function t(e){var r=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.processSigninResponse(e).then((function(t){i.Log.debug(\"UserManager._signinEnd: got signin response\");var e=new a.User(t);if(n.current_sub){if(n.current_sub!==e.profile.sub)return i.Log.debug(\"UserManager._signinEnd: current user does not match user returned from signin. sub from signin: \",e.profile.sub),Promise.reject(new Error(\"login_required\"));i.Log.debug(\"UserManager._signinEnd: current user matches user returned from signin\")}return r.storeUser(e).then((function(){return i.Log.debug(\"UserManager._signinEnd: user stored\"),r._events.load(e),e}))}))},e.prototype._signinCallback=function t(e,r){i.Log.debug(\"UserManager._signinCallback\");var n=\"query\"===this._settings.response_mode||!this._settings.response_mode&&l.SigninRequest.isCode(this._settings.response_type)?\"?\":\"#\";return r.callback(e,void 0,n)},e.prototype.signoutRedirect=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type=\"so:r\";var r=e.post_logout_redirect_uri||this.settings.post_logout_redirect_uri;r&&(e.post_logout_redirect_uri=r);var n={useReplaceToNavigate:e.useReplaceToNavigate};return this._signoutStart(e,this._redirectNavigator,n).then((function(){i.Log.info(\"UserManager.signoutRedirect: successful\")}))},e.prototype.signoutRedirectCallback=function t(e){return this._signoutEnd(e||this._redirectNavigator.url).then((function(t){return i.Log.info(\"UserManager.signoutRedirectCallback: successful\"),t}))},e.prototype.signoutPopup=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type=\"so:p\";var r=e.post_logout_redirect_uri||this.settings.popup_post_logout_redirect_uri||this.settings.post_logout_redirect_uri;return e.post_logout_redirect_uri=r,e.display=\"popup\",e.post_logout_redirect_uri&&(e.state=e.state||{}),this._signout(e,this._popupNavigator,{startUrl:r,popupWindowFeatures:e.popupWindowFeatures||this.settings.popupWindowFeatures,popupWindowTarget:e.popupWindowTarget||this.settings.popupWindowTarget}).then((function(){i.Log.info(\"UserManager.signoutPopup: successful\")}))},e.prototype.signoutPopupCallback=function t(e,r){void 0===r&&\"boolean\"==typeof e&&(r=e,e=null);return this._popupNavigator.callback(e,r,\"?\").then((function(){i.Log.info(\"UserManager.signoutPopupCallback: successful\")}))},e.prototype._signout=function t(e,r){var n=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._signoutStart(e,r,i).then((function(t){return n._signoutEnd(t.url)}))},e.prototype._signoutStart=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=this,n=arguments[1],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return n.prepare(o).then((function(t){return i.Log.debug(\"UserManager._signoutStart: got navigator window handle\"),r._loadUser().then((function(n){return i.Log.debug(\"UserManager._signoutStart: loaded current user from storage\"),(r._settings.revokeAccessTokenOnSignout?r._revokeInternal(n):Promise.resolve()).then((function(){var s=e.id_token_hint||n&&n.id_token;return s&&(i.Log.debug(\"UserManager._signoutStart: Setting id_token into signout request\"),e.id_token_hint=s),r.removeUser().then((function(){return i.Log.debug(\"UserManager._signoutStart: user removed, creating signout request\"),r.createSignoutRequest(e).then((function(e){return i.Log.debug(\"UserManager._signoutStart: got signout request\"),o.url=e.url,e.state&&(o.id=e.state.id),t.navigate(o)}))}))}))})).catch((function(e){throw t.close&&(i.Log.debug(\"UserManager._signoutStart: Error after preparing navigator, closing navigator window\"),t.close()),e}))}))},e.prototype._signoutEnd=function t(e){return this.processSignoutResponse(e).then((function(t){return i.Log.debug(\"UserManager._signoutEnd: got signout response\"),t}))},e.prototype.revokeAccessToken=function t(){var e=this;return this._loadUser().then((function(t){return e._revokeInternal(t,!0).then((function(r){if(r)return i.Log.debug(\"UserManager.revokeAccessToken: removing token properties from user and re-storing\"),t.access_token=null,t.refresh_token=null,t.expires_at=null,t.token_type=null,e.storeUser(t).then((function(){i.Log.debug(\"UserManager.revokeAccessToken: user stored\"),e._events.load(t)}))}))})).then((function(){i.Log.info(\"UserManager.revokeAccessToken: access token revoked successfully\")}))},e.prototype._revokeInternal=function t(e,r){var n=this;if(e){var o=e.access_token,s=e.refresh_token;return this._revokeAccessTokenInternal(o,r).then((function(t){return n._revokeRefreshTokenInternal(s,r).then((function(e){return t||e||i.Log.debug(\"UserManager.revokeAccessToken: no need to revoke due to no token(s), or JWT format\"),t||e}))}))}return Promise.resolve(!1)},e.prototype._revokeAccessTokenInternal=function t(e,r){return!e||e.indexOf(\".\")>=0?Promise.resolve(!1):this._tokenRevocationClient.revoke(e,r).then((function(){return!0}))},e.prototype._revokeRefreshTokenInternal=function t(e,r){return e?this._tokenRevocationClient.revoke(e,r,\"refresh_token\").then((function(){return!0})):Promise.resolve(!1)},e.prototype.startSilentRenew=function t(){this._silentRenewService.start()},e.prototype.stopSilentRenew=function t(){this._silentRenewService.stop()},e.prototype._loadUser=function t(){return this._userStore.get(this._userStoreKey).then((function(t){return t?(i.Log.debug(\"UserManager._loadUser: user storageString loaded\"),a.User.fromStorageString(t)):(i.Log.debug(\"UserManager._loadUser: no user storageString\"),null)}))},e.prototype.storeUser=function t(e){if(e){i.Log.debug(\"UserManager.storeUser: storing user\");var r=e.toStorageString();return this._userStore.set(this._userStoreKey,r)}return i.Log.debug(\"storeUser.storeUser: removing user\"),this._userStore.remove(this._userStoreKey)},n(e,[{key:\"_redirectNavigator\",get:function t(){return this.settings.redirectNavigator}},{key:\"_popupNavigator\",get:function t(){return this.settings.popupNavigator}},{key:\"_iframeNavigator\",get:function t(){return this.settings.iframeNavigator}},{key:\"_userStore\",get:function t(){return this.settings.userStore}},{key:\"events\",get:function t(){return this._events}},{key:\"_userStoreKey\",get:function t(){return\"user:\"+this.settings.authority+\":\"+this.settings.client_id}}]),e}(o.OidcClient)},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.UserManagerSettings=void 0;var n=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},n=r.popup_redirect_uri,i=r.popup_post_logout_redirect_uri,g=r.popupWindowFeatures,d=r.popupWindowTarget,p=r.silent_redirect_uri,v=r.silentRequestTimeout,y=r.automaticSilentRenew,m=void 0!==y&&y,_=r.validateSubOnSilentRenew,S=void 0!==_&&_,b=r.includeIdTokenInSilentRenew,w=void 0===b||b,F=r.monitorSession,E=void 0===F||F,x=r.monitorAnonymousSession,A=void 0!==x&&x,k=r.checkSessionInterval,P=void 0===k?2e3:k,C=r.stopCheckSessionOnError,T=void 0===C||C,R=r.query_status_response_type,I=r.revokeAccessTokenOnSignout,D=void 0!==I&&I,L=r.accessTokenExpiringNotificationTime,N=void 0===L?60:L,U=r.redirectNavigator,B=void 0===U?new o.RedirectNavigator:U,O=r.popupNavigator,j=void 0===O?new s.PopupNavigator:O,M=r.iframeNavigator,H=void 0===M?new a.IFrameNavigator:M,V=r.userStore,K=void 0===V?new u.WebStorageStateStore({store:c.Global.sessionStorage}):V;l(this,e);var q=f(this,t.call(this,arguments[0]));return q._popup_redirect_uri=n,q._popup_post_logout_redirect_uri=i,q._popupWindowFeatures=g,q._popupWindowTarget=d,q._silent_redirect_uri=p,q._silentRequestTimeout=v,q._automaticSilentRenew=m,q._validateSubOnSilentRenew=S,q._includeIdTokenInSilentRenew=w,q._accessTokenExpiringNotificationTime=N,q._monitorSession=E,q._monitorAnonymousSession=A,q._checkSessionInterval=P,q._stopCheckSessionOnError=T,R?q._query_status_response_type=R:arguments[0]&&arguments[0].response_type?q._query_status_response_type=h.SigninRequest.isOidc(arguments[0].response_type)?\"id_token\":\"code\":q._query_status_response_type=\"id_token\",q._revokeAccessTokenOnSignout=D,q._redirectNavigator=B,q._popupNavigator=j,q._iframeNavigator=H,q._userStore=K,q}return function r(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),n(e,[{key:\"popup_redirect_uri\",get:function t(){return this._popup_redirect_uri}},{key:\"popup_post_logout_redirect_uri\",get:function t(){return this._popup_post_logout_redirect_uri}},{key:\"popupWindowFeatures\",get:function t(){return this._popupWindowFeatures}},{key:\"popupWindowTarget\",get:function t(){return this._popupWindowTarget}},{key:\"silent_redirect_uri\",get:function t(){return this._silent_redirect_uri}},{key:\"silentRequestTimeout\",get:function t(){return this._silentRequestTimeout}},{key:\"automaticSilentRenew\",get:function t(){return this._automaticSilentRenew}},{key:\"validateSubOnSilentRenew\",get:function t(){return this._validateSubOnSilentRenew}},{key:\"includeIdTokenInSilentRenew\",get:function t(){return this._includeIdTokenInSilentRenew}},{key:\"accessTokenExpiringNotificationTime\",get:function t(){return this._accessTokenExpiringNotificationTime}},{key:\"monitorSession\",get:function t(){return this._monitorSession}},{key:\"monitorAnonymousSession\",get:function t(){return this._monitorAnonymousSession}},{key:\"checkSessionInterval\",get:function t(){return this._checkSessionInterval}},{key:\"stopCheckSessionOnError\",get:function t(){return this._stopCheckSessionOnError}},{key:\"query_status_response_type\",get:function t(){return this._query_status_response_type}},{key:\"revokeAccessTokenOnSignout\",get:function t(){return this._revokeAccessTokenOnSignout}},{key:\"redirectNavigator\",get:function t(){return this._redirectNavigator}},{key:\"popupNavigator\",get:function t(){return this._popupNavigator}},{key:\"iframeNavigator\",get:function t(){return this._iframeNavigator}},{key:\"userStore\",get:function t(){return this._userStore}}]),e}(i.OidcClientSettings)},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.RedirectNavigator=void 0;var n=function(){function t(t,e){for(var r=0;r1&&void 0!==arguments[1])||arguments[1];n.Log.debug(\"UserManagerEvents.load\"),t.prototype.load.call(this,r),i&&this._userLoaded.raise(r)},e.prototype.unload=function e(){n.Log.debug(\"UserManagerEvents.unload\"),t.prototype.unload.call(this),this._userUnloaded.raise()},e.prototype.addUserLoaded=function t(e){this._userLoaded.addHandler(e)},e.prototype.removeUserLoaded=function t(e){this._userLoaded.removeHandler(e)},e.prototype.addUserUnloaded=function t(e){this._userUnloaded.addHandler(e)},e.prototype.removeUserUnloaded=function t(e){this._userUnloaded.removeHandler(e)},e.prototype.addSilentRenewError=function t(e){this._silentRenewError.addHandler(e)},e.prototype.removeSilentRenewError=function t(e){this._silentRenewError.removeHandler(e)},e.prototype._raiseSilentRenewError=function t(e){n.Log.debug(\"UserManagerEvents._raiseSilentRenewError\",e.message),this._silentRenewError.raise(e)},e.prototype.addUserSignedIn=function t(e){this._userSignedIn.addHandler(e)},e.prototype.removeUserSignedIn=function t(e){this._userSignedIn.removeHandler(e)},e.prototype._raiseUserSignedIn=function t(){n.Log.debug(\"UserManagerEvents._raiseUserSignedIn\"),this._userSignedIn.raise()},e.prototype.addUserSignedOut=function t(e){this._userSignedOut.addHandler(e)},e.prototype.removeUserSignedOut=function t(e){this._userSignedOut.removeHandler(e)},e.prototype._raiseUserSignedOut=function t(){n.Log.debug(\"UserManagerEvents._raiseUserSignedOut\"),this._userSignedOut.raise()},e.prototype.addUserSessionChanged=function t(e){this._userSessionChanged.addHandler(e)},e.prototype.removeUserSessionChanged=function t(e){this._userSessionChanged.removeHandler(e)},e.prototype._raiseUserSessionChanged=function t(){n.Log.debug(\"UserManagerEvents._raiseUserSessionChanged\"),this._userSessionChanged.raise()},e}(i.AccessTokenEvents)},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Timer=void 0;var n=function(){function t(t,e){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:o.Global.timer,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;a(this,e);var s=u(this,t.call(this,r));return s._timer=n,s._nowFunc=i||function(){return Date.now()/1e3},s}return function r(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e.prototype.init=function t(e){e<=0&&(e=1),e=parseInt(e);var r=this.now+e;if(this.expiration===r&&this._timerHandle)i.Log.debug(\"Timer.init timer \"+this._name+\" skipping initialization since already initialized for expiration:\",this.expiration);else{this.cancel(),i.Log.debug(\"Timer.init timer \"+this._name+\" for duration:\",e),this._expiration=r;var n=5;e value === null || value === undefined;\n\nfunction encoderForArrayFormat(options) {\n\tswitch (options.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tconst index = result.length;\n\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, [encode(key, options), '[', index, ']'].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t...result,\n\t\t\t\t\t[encode(key, options), '[', encode(index, options), ']=', encode(value, options)].join('')\n\t\t\t\t];\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, [encode(key, options), '[]'].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [...result, [encode(key, options), '[]=', encode(value, options)].join('')];\n\t\t\t};\n\n\t\tcase 'comma':\n\t\tcase 'separator':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (value === null || value === undefined || value.length === 0) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (result.length === 0) {\n\t\t\t\t\treturn [[encode(key, options), '=', encode(value, options)].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [[result, encode(value, options)].join(options.arrayFormatSeparator)];\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, encode(key, options)];\n\t\t\t\t}\n\n\t\t\t\treturn [...result, [encode(key, options), '=', encode(value, options)].join('')];\n\t\t\t};\n\t}\n}\n\nfunction parserForArrayFormat(options) {\n\tlet result;\n\n\tswitch (options.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /\\[(\\d*)\\]$/.exec(key);\n\n\t\t\t\tkey = key.replace(/\\[\\d*\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = {};\n\t\t\t\t}\n\n\t\t\t\taccumulator[key][result[1]] = value;\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /(\\[\\])$/.exec(key);\n\t\t\t\tkey = key.replace(/\\[\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = [value];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\n\t\tcase 'comma':\n\t\tcase 'separator':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tconst isArray = typeof value === 'string' && value.includes(options.arrayFormatSeparator);\n\t\t\t\tconst isEncodedArray = (typeof value === 'string' && !isArray && decode(value, options).includes(options.arrayFormatSeparator));\n\t\t\t\tvalue = isEncodedArray ? decode(value, options) : value;\n\t\t\t\tconst newValue = isArray || isEncodedArray ? value.split(options.arrayFormatSeparator).map(item => decode(item, options)) : value === null ? value : decode(value, options);\n\t\t\t\taccumulator[key] = newValue;\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\t}\n}\n\nfunction validateArrayFormatSeparator(value) {\n\tif (typeof value !== 'string' || value.length !== 1) {\n\t\tthrow new TypeError('arrayFormatSeparator must be single character string');\n\t}\n}\n\nfunction encode(value, options) {\n\tif (options.encode) {\n\t\treturn options.strict ? strictUriEncode(value) : encodeURIComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction decode(value, options) {\n\tif (options.decode) {\n\t\treturn decodeComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction keysSorter(input) {\n\tif (Array.isArray(input)) {\n\t\treturn input.sort();\n\t}\n\n\tif (typeof input === 'object') {\n\t\treturn keysSorter(Object.keys(input))\n\t\t\t.sort((a, b) => Number(a) - Number(b))\n\t\t\t.map(key => input[key]);\n\t}\n\n\treturn input;\n}\n\nfunction removeHash(input) {\n\tconst hashStart = input.indexOf('#');\n\tif (hashStart !== -1) {\n\t\tinput = input.slice(0, hashStart);\n\t}\n\n\treturn input;\n}\n\nfunction getHash(url) {\n\tlet hash = '';\n\tconst hashStart = url.indexOf('#');\n\tif (hashStart !== -1) {\n\t\thash = url.slice(hashStart);\n\t}\n\n\treturn hash;\n}\n\nfunction extract(input) {\n\tinput = removeHash(input);\n\tconst queryStart = input.indexOf('?');\n\tif (queryStart === -1) {\n\t\treturn '';\n\t}\n\n\treturn input.slice(queryStart + 1);\n}\n\nfunction parseValue(value, options) {\n\tif (options.parseNumbers && !Number.isNaN(Number(value)) && (typeof value === 'string' && value.trim() !== '')) {\n\t\tvalue = Number(value);\n\t} else if (options.parseBooleans && value !== null && (value.toLowerCase() === 'true' || value.toLowerCase() === 'false')) {\n\t\tvalue = value.toLowerCase() === 'true';\n\t}\n\n\treturn value;\n}\n\nfunction parse(query, options) {\n\toptions = Object.assign({\n\t\tdecode: true,\n\t\tsort: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ',',\n\t\tparseNumbers: false,\n\t\tparseBooleans: false\n\t}, options);\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst formatter = parserForArrayFormat(options);\n\n\t// Create an object with no prototype\n\tconst ret = Object.create(null);\n\n\tif (typeof query !== 'string') {\n\t\treturn ret;\n\t}\n\n\tquery = query.trim().replace(/^[?#&]/, '');\n\n\tif (!query) {\n\t\treturn ret;\n\t}\n\n\tfor (const param of query.split('&')) {\n\t\tif (param === '') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet [key, value] = splitOnFirst(options.decode ? param.replace(/\\+/g, ' ') : param, '=');\n\n\t\t// Missing `=` should be `null`:\n\t\t// http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n\t\tvalue = value === undefined ? null : ['comma', 'separator'].includes(options.arrayFormat) ? value : decode(value, options);\n\t\tformatter(decode(key, options), value, ret);\n\t}\n\n\tfor (const key of Object.keys(ret)) {\n\t\tconst value = ret[key];\n\t\tif (typeof value === 'object' && value !== null) {\n\t\t\tfor (const k of Object.keys(value)) {\n\t\t\t\tvalue[k] = parseValue(value[k], options);\n\t\t\t}\n\t\t} else {\n\t\t\tret[key] = parseValue(value, options);\n\t\t}\n\t}\n\n\tif (options.sort === false) {\n\t\treturn ret;\n\t}\n\n\treturn (options.sort === true ? Object.keys(ret).sort() : Object.keys(ret).sort(options.sort)).reduce((result, key) => {\n\t\tconst value = ret[key];\n\t\tif (Boolean(value) && typeof value === 'object' && !Array.isArray(value)) {\n\t\t\t// Sort object keys, not values\n\t\t\tresult[key] = keysSorter(value);\n\t\t} else {\n\t\t\tresult[key] = value;\n\t\t}\n\n\t\treturn result;\n\t}, Object.create(null));\n}\n\nexports.extract = extract;\nexports.parse = parse;\n\nexports.stringify = (object, options) => {\n\tif (!object) {\n\t\treturn '';\n\t}\n\n\toptions = Object.assign({\n\t\tencode: true,\n\t\tstrict: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ','\n\t}, options);\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst shouldFilter = key => (\n\t\t(options.skipNull && isNullOrUndefined(object[key])) ||\n\t\t(options.skipEmptyString && object[key] === '')\n\t);\n\n\tconst formatter = encoderForArrayFormat(options);\n\n\tconst objectCopy = {};\n\n\tfor (const key of Object.keys(object)) {\n\t\tif (!shouldFilter(key)) {\n\t\t\tobjectCopy[key] = object[key];\n\t\t}\n\t}\n\n\tconst keys = Object.keys(objectCopy);\n\n\tif (options.sort !== false) {\n\t\tkeys.sort(options.sort);\n\t}\n\n\treturn keys.map(key => {\n\t\tconst value = object[key];\n\n\t\tif (value === undefined) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (value === null) {\n\t\t\treturn encode(key, options);\n\t\t}\n\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value\n\t\t\t\t.reduce(formatter(key), [])\n\t\t\t\t.join('&');\n\t\t}\n\n\t\treturn encode(key, options) + '=' + encode(value, options);\n\t}).filter(x => x.length > 0).join('&');\n};\n\nexports.parseUrl = (url, options) => {\n\toptions = Object.assign({\n\t\tdecode: true\n\t}, options);\n\n\tconst [url_, hash] = splitOnFirst(url, '#');\n\n\treturn Object.assign(\n\t\t{\n\t\t\turl: url_.split('?')[0] || '',\n\t\t\tquery: parse(extract(url), options)\n\t\t},\n\t\toptions && options.parseFragmentIdentifier && hash ? {fragmentIdentifier: decode(hash, options)} : {}\n\t);\n};\n\nexports.stringifyUrl = (object, options) => {\n\toptions = Object.assign({\n\t\tencode: true,\n\t\tstrict: true\n\t}, options);\n\n\tconst url = removeHash(object.url).split('?')[0] || '';\n\tconst queryFromUrl = exports.extract(object.url);\n\tconst parsedQueryFromUrl = exports.parse(queryFromUrl, {sort: false});\n\n\tconst query = Object.assign(parsedQueryFromUrl, object.query);\n\tlet queryString = exports.stringify(query, options);\n\tif (queryString) {\n\t\tqueryString = `?${queryString}`;\n\t}\n\n\tlet hash = getHash(object.url);\n\tif (object.fragmentIdentifier) {\n\t\thash = `#${encode(object.fragmentIdentifier, options)}`;\n\t}\n\n\treturn `${url}${queryString}${hash}`;\n};\n\nexports.pick = (input, filter, options) => {\n\toptions = Object.assign({\n\t\tparseFragmentIdentifier: true\n\t}, options);\n\n\tconst {url, query, fragmentIdentifier} = exports.parseUrl(input, options);\n\treturn exports.stringifyUrl({\n\t\turl,\n\t\tquery: filterObject(query, filter),\n\t\tfragmentIdentifier\n\t}, options);\n};\n\nexports.exclude = (input, filter, options) => {\n\tconst exclusionFilter = Array.isArray(filter) ? key => !filter.includes(key) : (key, value) => !filter(key, value);\n\n\treturn exports.pick(input, exclusionFilter, options);\n};\n","var now = require('performance-now')\n , root = typeof window === 'undefined' ? global : window\n , vendors = ['moz', 'webkit']\n , suffix = 'AnimationFrame'\n , raf = root['request' + suffix]\n , caf = root['cancel' + suffix] || root['cancelRequest' + suffix]\n\nfor(var i = 0; !raf && i < vendors.length; i++) {\n raf = root[vendors[i] + 'Request' + suffix]\n caf = root[vendors[i] + 'Cancel' + suffix]\n || root[vendors[i] + 'CancelRequest' + suffix]\n}\n\n// Some versions of FF have rAF but not cAF\nif(!raf || !caf) {\n var last = 0\n , id = 0\n , queue = []\n , frameDuration = 1000 / 60\n\n raf = function(callback) {\n if(queue.length === 0) {\n var _now = now()\n , next = Math.max(0, frameDuration - (_now - last))\n last = next + _now\n setTimeout(function() {\n var cp = queue.slice(0)\n // Clear queue here to prevent\n // callbacks from appending listeners\n // to the current frame's queue\n queue.length = 0\n for(var i = 0; i < cp.length; i++) {\n if(!cp[i].cancelled) {\n try{\n cp[i].callback(last)\n } catch(e) {\n setTimeout(function() { throw e }, 0)\n }\n }\n }\n }, Math.round(next))\n }\n queue.push({\n handle: ++id,\n callback: callback,\n cancelled: false\n })\n return id\n }\n\n caf = function(handle) {\n for(var i = 0; i < queue.length; i++) {\n if(queue[i].handle === handle) {\n queue[i].cancelled = true\n }\n }\n }\n}\n\nmodule.exports = function(fn) {\n // Wrap in a new function to prevent\n // `cancel` potentially being assigned\n // to the native rAF function\n return raf.call(root, fn)\n}\nmodule.exports.cancel = function() {\n caf.apply(root, arguments)\n}\nmodule.exports.polyfill = function(object) {\n if (!object) {\n object = root;\n }\n object.requestAnimationFrame = raf\n object.cancelAnimationFrame = caf\n}\n","// eslint-disable-next-line import/no-unresolved\nmodule.exports = require('./lib');\n","// eslint-disable-next-line import/no-unresolved\nrequire('./lib/initialize');\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = exports.PureCalendarDay = void 0;\n\nvar _enzymeShallowEqual = _interopRequireDefault(require(\"enzyme-shallow-equal\"));\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _assertThisInitialized2 = _interopRequireDefault(require(\"@babel/runtime/helpers/assertThisInitialized\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _reactMomentProptypes = _interopRequireDefault(require(\"react-moment-proptypes\"));\n\nvar _airbnbPropTypes = require(\"airbnb-prop-types\");\n\nvar _reactWithStyles = require(\"react-with-styles\");\n\nvar _moment = _interopRequireDefault(require(\"moment\"));\n\nvar _raf = _interopRequireDefault(require(\"raf\"));\n\nvar _defaultPhrases = require(\"../defaultPhrases\");\n\nvar _getPhrasePropTypes = _interopRequireDefault(require(\"../utils/getPhrasePropTypes\"));\n\nvar _getCalendarDaySettings = _interopRequireDefault(require(\"../utils/getCalendarDaySettings\"));\n\nvar _ModifiersShape = _interopRequireDefault(require(\"../shapes/ModifiersShape\"));\n\nvar _constants = require(\"../constants\");\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nvar propTypes = process.env.NODE_ENV !== \"production\" ? (0, _airbnbPropTypes.forbidExtraProps)(_objectSpread({}, _reactWithStyles.withStylesPropTypes, {\n day: _reactMomentProptypes[\"default\"].momentObj,\n daySize: _airbnbPropTypes.nonNegativeInteger,\n isOutsideDay: _propTypes[\"default\"].bool,\n modifiers: _ModifiersShape[\"default\"],\n isFocused: _propTypes[\"default\"].bool,\n tabIndex: _propTypes[\"default\"].oneOf([0, -1]),\n onDayClick: _propTypes[\"default\"].func,\n onDayMouseEnter: _propTypes[\"default\"].func,\n onDayMouseLeave: _propTypes[\"default\"].func,\n renderDayContents: _propTypes[\"default\"].func,\n ariaLabelFormat: _propTypes[\"default\"].string,\n // internationalization\n phrases: _propTypes[\"default\"].shape((0, _getPhrasePropTypes[\"default\"])(_defaultPhrases.CalendarDayPhrases))\n})) : {};\nvar defaultProps = {\n day: (0, _moment[\"default\"])(),\n daySize: _constants.DAY_SIZE,\n isOutsideDay: false,\n modifiers: new Set(),\n isFocused: false,\n tabIndex: -1,\n onDayClick: function onDayClick() {},\n onDayMouseEnter: function onDayMouseEnter() {},\n onDayMouseLeave: function onDayMouseLeave() {},\n renderDayContents: null,\n ariaLabelFormat: 'dddd, LL',\n // internationalization\n phrases: _defaultPhrases.CalendarDayPhrases\n};\n\nvar CalendarDay =\n/*#__PURE__*/\nfunction (_ref) {\n (0, _inheritsLoose2[\"default\"])(CalendarDay, _ref);\n var _proto = CalendarDay.prototype;\n\n _proto[!_react[\"default\"].PureComponent && \"shouldComponentUpdate\"] = function (nextProps, nextState) {\n return !(0, _enzymeShallowEqual[\"default\"])(this.props, nextProps) || !(0, _enzymeShallowEqual[\"default\"])(this.state, nextState);\n };\n\n function CalendarDay() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _ref.call.apply(_ref, [this].concat(args)) || this;\n _this.setButtonRef = _this.setButtonRef.bind((0, _assertThisInitialized2[\"default\"])(_this));\n return _this;\n }\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var _this2 = this;\n\n var _this$props = this.props,\n isFocused = _this$props.isFocused,\n tabIndex = _this$props.tabIndex;\n\n if (tabIndex === 0) {\n if (isFocused || tabIndex !== prevProps.tabIndex) {\n (0, _raf[\"default\"])(function () {\n if (_this2.buttonRef) {\n _this2.buttonRef.focus();\n }\n });\n }\n }\n };\n\n _proto.onDayClick = function onDayClick(day, e) {\n var onDayClick = this.props.onDayClick;\n onDayClick(day, e);\n };\n\n _proto.onDayMouseEnter = function onDayMouseEnter(day, e) {\n var onDayMouseEnter = this.props.onDayMouseEnter;\n onDayMouseEnter(day, e);\n };\n\n _proto.onDayMouseLeave = function onDayMouseLeave(day, e) {\n var onDayMouseLeave = this.props.onDayMouseLeave;\n onDayMouseLeave(day, e);\n };\n\n _proto.onKeyDown = function onKeyDown(day, e) {\n var onDayClick = this.props.onDayClick;\n var key = e.key;\n\n if (key === 'Enter' || key === ' ') {\n onDayClick(day, e);\n }\n };\n\n _proto.setButtonRef = function setButtonRef(ref) {\n this.buttonRef = ref;\n };\n\n _proto.render = function render() {\n var _this3 = this;\n\n var _this$props2 = this.props,\n day = _this$props2.day,\n ariaLabelFormat = _this$props2.ariaLabelFormat,\n daySize = _this$props2.daySize,\n isOutsideDay = _this$props2.isOutsideDay,\n modifiers = _this$props2.modifiers,\n renderDayContents = _this$props2.renderDayContents,\n tabIndex = _this$props2.tabIndex,\n styles = _this$props2.styles,\n phrases = _this$props2.phrases;\n if (!day) return _react[\"default\"].createElement(\"td\", null);\n\n var _getCalendarDaySettin = (0, _getCalendarDaySettings[\"default\"])(day, ariaLabelFormat, daySize, modifiers, phrases),\n daySizeStyles = _getCalendarDaySettin.daySizeStyles,\n useDefaultCursor = _getCalendarDaySettin.useDefaultCursor,\n selected = _getCalendarDaySettin.selected,\n hoveredSpan = _getCalendarDaySettin.hoveredSpan,\n isOutsideRange = _getCalendarDaySettin.isOutsideRange,\n ariaLabel = _getCalendarDaySettin.ariaLabel;\n\n return _react[\"default\"].createElement(\"td\", (0, _extends2[\"default\"])({}, (0, _reactWithStyles.css)(styles.CalendarDay, useDefaultCursor && styles.CalendarDay__defaultCursor, styles.CalendarDay__default, isOutsideDay && styles.CalendarDay__outside, modifiers.has('today') && styles.CalendarDay__today, modifiers.has('first-day-of-week') && styles.CalendarDay__firstDayOfWeek, modifiers.has('last-day-of-week') && styles.CalendarDay__lastDayOfWeek, modifiers.has('hovered-offset') && styles.CalendarDay__hovered_offset, modifiers.has('hovered-start-first-possible-end') && styles.CalendarDay__hovered_start_first_possible_end, modifiers.has('hovered-start-blocked-minimum-nights') && styles.CalendarDay__hovered_start_blocked_min_nights, modifiers.has('highlighted-calendar') && styles.CalendarDay__highlighted_calendar, modifiers.has('blocked-minimum-nights') && styles.CalendarDay__blocked_minimum_nights, modifiers.has('blocked-calendar') && styles.CalendarDay__blocked_calendar, hoveredSpan && styles.CalendarDay__hovered_span, modifiers.has('after-hovered-start') && styles.CalendarDay__after_hovered_start, modifiers.has('selected-span') && styles.CalendarDay__selected_span, modifiers.has('selected-start') && styles.CalendarDay__selected_start, modifiers.has('selected-end') && styles.CalendarDay__selected_end, selected && !modifiers.has('selected-span') && styles.CalendarDay__selected, modifiers.has('before-hovered-end') && styles.CalendarDay__before_hovered_end, modifiers.has('no-selected-start-before-selected-end') && styles.CalendarDay__no_selected_start_before_selected_end, modifiers.has('selected-start-in-hovered-span') && styles.CalendarDay__selected_start_in_hovered_span, modifiers.has('selected-end-in-hovered-span') && styles.CalendarDay__selected_end_in_hovered_span, modifiers.has('selected-start-no-selected-end') && styles.CalendarDay__selected_start_no_selected_end, modifiers.has('selected-end-no-selected-start') && styles.CalendarDay__selected_end_no_selected_start, isOutsideRange && styles.CalendarDay__blocked_out_of_range, daySizeStyles), {\n role: \"button\" // eslint-disable-line jsx-a11y/no-noninteractive-element-to-interactive-role\n ,\n ref: this.setButtonRef,\n \"aria-disabled\": modifiers.has('blocked'),\n \"aria-label\": ariaLabel,\n onMouseEnter: function onMouseEnter(e) {\n _this3.onDayMouseEnter(day, e);\n },\n onMouseLeave: function onMouseLeave(e) {\n _this3.onDayMouseLeave(day, e);\n },\n onMouseUp: function onMouseUp(e) {\n e.currentTarget.blur();\n },\n onClick: function onClick(e) {\n _this3.onDayClick(day, e);\n },\n onKeyDown: function onKeyDown(e) {\n _this3.onKeyDown(day, e);\n },\n tabIndex: tabIndex\n }), renderDayContents ? renderDayContents(day, modifiers) : day.format('D'));\n };\n\n return CalendarDay;\n}(_react[\"default\"].PureComponent || _react[\"default\"].Component);\n\nexports.PureCalendarDay = CalendarDay;\nCalendarDay.propTypes = process.env.NODE_ENV !== \"production\" ? propTypes : {};\nCalendarDay.defaultProps = defaultProps;\n\nvar _default = (0, _reactWithStyles.withStyles)(function (_ref2) {\n var _ref2$reactDates = _ref2.reactDates,\n color = _ref2$reactDates.color,\n font = _ref2$reactDates.font;\n return {\n CalendarDay: {\n boxSizing: 'border-box',\n cursor: 'pointer',\n fontSize: font.size,\n textAlign: 'center',\n ':active': {\n outline: 0\n }\n },\n CalendarDay__defaultCursor: {\n cursor: 'default'\n },\n CalendarDay__default: {\n border: \"1px solid \".concat(color.core.borderLight),\n color: color.text,\n background: color.background,\n ':hover': {\n background: color.core.borderLight,\n border: \"1px solid \".concat(color.core.borderLight),\n color: 'inherit'\n }\n },\n CalendarDay__hovered_offset: {\n background: color.core.borderBright,\n border: \"1px double \".concat(color.core.borderLight),\n color: 'inherit'\n },\n CalendarDay__outside: {\n border: 0,\n background: color.outside.backgroundColor,\n color: color.outside.color,\n ':hover': {\n border: 0\n }\n },\n CalendarDay__blocked_minimum_nights: {\n background: color.minimumNights.backgroundColor,\n border: \"1px solid \".concat(color.minimumNights.borderColor),\n color: color.minimumNights.color,\n ':hover': {\n background: color.minimumNights.backgroundColor_hover,\n color: color.minimumNights.color_active\n },\n ':active': {\n background: color.minimumNights.backgroundColor_active,\n color: color.minimumNights.color_active\n }\n },\n CalendarDay__highlighted_calendar: {\n background: color.highlighted.backgroundColor,\n color: color.highlighted.color,\n ':hover': {\n background: color.highlighted.backgroundColor_hover,\n color: color.highlighted.color_active\n },\n ':active': {\n background: color.highlighted.backgroundColor_active,\n color: color.highlighted.color_active\n }\n },\n CalendarDay__selected_span: {\n background: color.selectedSpan.backgroundColor,\n border: \"1px double \".concat(color.selectedSpan.borderColor),\n color: color.selectedSpan.color,\n ':hover': {\n background: color.selectedSpan.backgroundColor_hover,\n border: \"1px double \".concat(color.selectedSpan.borderColor),\n color: color.selectedSpan.color_active\n },\n ':active': {\n background: color.selectedSpan.backgroundColor_active,\n border: \"1px double \".concat(color.selectedSpan.borderColor),\n color: color.selectedSpan.color_active\n }\n },\n CalendarDay__selected: {\n background: color.selected.backgroundColor,\n border: \"1px double \".concat(color.selected.borderColor),\n color: color.selected.color,\n ':hover': {\n background: color.selected.backgroundColor_hover,\n border: \"1px double \".concat(color.selected.borderColor),\n color: color.selected.color_active\n },\n ':active': {\n background: color.selected.backgroundColor_active,\n border: \"1px double \".concat(color.selected.borderColor),\n color: color.selected.color_active\n }\n },\n CalendarDay__hovered_span: {\n background: color.hoveredSpan.backgroundColor,\n border: \"1px double \".concat(color.hoveredSpan.borderColor),\n color: color.hoveredSpan.color,\n ':hover': {\n background: color.hoveredSpan.backgroundColor_hover,\n border: \"1px double \".concat(color.hoveredSpan.borderColor),\n color: color.hoveredSpan.color_active\n },\n ':active': {\n background: color.hoveredSpan.backgroundColor_active,\n border: \"1px double \".concat(color.hoveredSpan.borderColor),\n color: color.hoveredSpan.color_active\n }\n },\n CalendarDay__blocked_calendar: {\n background: color.blocked_calendar.backgroundColor,\n border: \"1px solid \".concat(color.blocked_calendar.borderColor),\n color: color.blocked_calendar.color,\n ':hover': {\n background: color.blocked_calendar.backgroundColor_hover,\n border: \"1px solid \".concat(color.blocked_calendar.borderColor),\n color: color.blocked_calendar.color_active\n },\n ':active': {\n background: color.blocked_calendar.backgroundColor_active,\n border: \"1px solid \".concat(color.blocked_calendar.borderColor),\n color: color.blocked_calendar.color_active\n }\n },\n CalendarDay__blocked_out_of_range: {\n background: color.blocked_out_of_range.backgroundColor,\n border: \"1px solid \".concat(color.blocked_out_of_range.borderColor),\n color: color.blocked_out_of_range.color,\n ':hover': {\n background: color.blocked_out_of_range.backgroundColor_hover,\n border: \"1px solid \".concat(color.blocked_out_of_range.borderColor),\n color: color.blocked_out_of_range.color_active\n },\n ':active': {\n background: color.blocked_out_of_range.backgroundColor_active,\n border: \"1px solid \".concat(color.blocked_out_of_range.borderColor),\n color: color.blocked_out_of_range.color_active\n }\n },\n CalendarDay__hovered_start_first_possible_end: {\n background: color.core.borderLighter,\n border: \"1px double \".concat(color.core.borderLighter)\n },\n CalendarDay__hovered_start_blocked_min_nights: {\n background: color.core.borderLighter,\n border: \"1px double \".concat(color.core.borderLight)\n },\n CalendarDay__selected_start: {},\n CalendarDay__selected_end: {},\n CalendarDay__today: {},\n CalendarDay__firstDayOfWeek: {},\n CalendarDay__lastDayOfWeek: {},\n CalendarDay__after_hovered_start: {},\n CalendarDay__before_hovered_end: {},\n CalendarDay__no_selected_start_before_selected_end: {},\n CalendarDay__selected_start_in_hovered_span: {},\n CalendarDay__selected_end_in_hovered_span: {},\n CalendarDay__selected_start_no_selected_end: {},\n CalendarDay__selected_end_no_selected_start: {}\n };\n}, {\n pureComponent: typeof _react[\"default\"].PureComponent !== 'undefined'\n})(CalendarDay);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar CalendarIcon = function CalendarIcon(props) {\n return _react[\"default\"].createElement(\"svg\", props, _react[\"default\"].createElement(\"path\", {\n d: \"m107 1393h241v-241h-241zm295 0h268v-241h-268zm-295-295h241v-268h-241zm295 0h268v-268h-268zm-295-321h241v-241h-241zm616 616h268v-241h-268zm-321-616h268v-241h-268zm643 616h241v-241h-241zm-322-295h268v-268h-268zm-294-723v-241c0-7-3-14-8-19-6-5-12-8-19-8h-54c-7 0-13 3-19 8-5 5-8 12-8 19v241c0 7 3 14 8 19 6 5 12 8 19 8h54c7 0 13-3 19-8 5-5 8-12 8-19zm616 723h241v-268h-241zm-322-321h268v-241h-268zm322 0h241v-241h-241zm27-402v-241c0-7-3-14-8-19-6-5-12-8-19-8h-54c-7 0-13 3-19 8-5 5-8 12-8 19v241c0 7 3 14 8 19 6 5 12 8 19 8h54c7 0 13-3 19-8 5-5 8-12 8-19zm321-54v1072c0 29-11 54-32 75s-46 32-75 32h-1179c-29 0-54-11-75-32s-32-46-32-75v-1072c0-29 11-54 32-75s46-32 75-32h107v-80c0-37 13-68 40-95s57-39 94-39h54c37 0 68 13 95 39 26 26 39 58 39 95v80h321v-80c0-37 13-69 40-95 26-26 57-39 94-39h54c37 0 68 13 94 39s40 58 40 95v80h107c29 0 54 11 75 32s32 46 32 75z\"\n }));\n};\n\nCalendarIcon.defaultProps = {\n focusable: \"false\",\n viewBox: \"0 0 1393.1 1500\"\n};\nvar _default = CalendarIcon;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _enzymeShallowEqual = _interopRequireDefault(require(\"enzyme-shallow-equal\"));\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _assertThisInitialized2 = _interopRequireDefault(require(\"@babel/runtime/helpers/assertThisInitialized\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _reactMomentProptypes = _interopRequireDefault(require(\"react-moment-proptypes\"));\n\nvar _airbnbPropTypes = require(\"airbnb-prop-types\");\n\nvar _reactWithStyles = require(\"react-with-styles\");\n\nvar _moment = _interopRequireDefault(require(\"moment\"));\n\nvar _defaultPhrases = require(\"../defaultPhrases\");\n\nvar _getPhrasePropTypes = _interopRequireDefault(require(\"../utils/getPhrasePropTypes\"));\n\nvar _CalendarWeek = _interopRequireDefault(require(\"./CalendarWeek\"));\n\nvar _CalendarDay = _interopRequireDefault(require(\"./CalendarDay\"));\n\nvar _calculateDimension = _interopRequireDefault(require(\"../utils/calculateDimension\"));\n\nvar _getCalendarMonthWeeks = _interopRequireDefault(require(\"../utils/getCalendarMonthWeeks\"));\n\nvar _isSameDay = _interopRequireDefault(require(\"../utils/isSameDay\"));\n\nvar _toISODateString = _interopRequireDefault(require(\"../utils/toISODateString\"));\n\nvar _ModifiersShape = _interopRequireDefault(require(\"../shapes/ModifiersShape\"));\n\nvar _ScrollableOrientationShape = _interopRequireDefault(require(\"../shapes/ScrollableOrientationShape\"));\n\nvar _DayOfWeekShape = _interopRequireDefault(require(\"../shapes/DayOfWeekShape\"));\n\nvar _constants = require(\"../constants\");\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nvar propTypes = process.env.NODE_ENV !== \"production\" ? (0, _airbnbPropTypes.forbidExtraProps)(_objectSpread({}, _reactWithStyles.withStylesPropTypes, {\n month: _reactMomentProptypes[\"default\"].momentObj,\n horizontalMonthPadding: _airbnbPropTypes.nonNegativeInteger,\n isVisible: _propTypes[\"default\"].bool,\n enableOutsideDays: _propTypes[\"default\"].bool,\n modifiers: _propTypes[\"default\"].objectOf(_ModifiersShape[\"default\"]),\n orientation: _ScrollableOrientationShape[\"default\"],\n daySize: _airbnbPropTypes.nonNegativeInteger,\n onDayClick: _propTypes[\"default\"].func,\n onDayMouseEnter: _propTypes[\"default\"].func,\n onDayMouseLeave: _propTypes[\"default\"].func,\n onMonthSelect: _propTypes[\"default\"].func,\n onYearSelect: _propTypes[\"default\"].func,\n renderMonthText: (0, _airbnbPropTypes.mutuallyExclusiveProps)(_propTypes[\"default\"].func, 'renderMonthText', 'renderMonthElement'),\n renderCalendarDay: _propTypes[\"default\"].func,\n renderDayContents: _propTypes[\"default\"].func,\n renderMonthElement: (0, _airbnbPropTypes.mutuallyExclusiveProps)(_propTypes[\"default\"].func, 'renderMonthText', 'renderMonthElement'),\n firstDayOfWeek: _DayOfWeekShape[\"default\"],\n setMonthTitleHeight: _propTypes[\"default\"].func,\n verticalBorderSpacing: _airbnbPropTypes.nonNegativeInteger,\n focusedDate: _reactMomentProptypes[\"default\"].momentObj,\n // indicates focusable day\n isFocused: _propTypes[\"default\"].bool,\n // indicates whether or not to move focus to focusable day\n // i18n\n monthFormat: _propTypes[\"default\"].string,\n phrases: _propTypes[\"default\"].shape((0, _getPhrasePropTypes[\"default\"])(_defaultPhrases.CalendarDayPhrases)),\n dayAriaLabelFormat: _propTypes[\"default\"].string\n})) : {};\nvar defaultProps = {\n month: (0, _moment[\"default\"])(),\n horizontalMonthPadding: 13,\n isVisible: true,\n enableOutsideDays: false,\n modifiers: {},\n orientation: _constants.HORIZONTAL_ORIENTATION,\n daySize: _constants.DAY_SIZE,\n onDayClick: function onDayClick() {},\n onDayMouseEnter: function onDayMouseEnter() {},\n onDayMouseLeave: function onDayMouseLeave() {},\n onMonthSelect: function onMonthSelect() {},\n onYearSelect: function onYearSelect() {},\n renderMonthText: null,\n renderCalendarDay: function renderCalendarDay(props) {\n return _react[\"default\"].createElement(_CalendarDay[\"default\"], props);\n },\n renderDayContents: null,\n renderMonthElement: null,\n firstDayOfWeek: null,\n setMonthTitleHeight: null,\n focusedDate: null,\n isFocused: false,\n // i18n\n monthFormat: 'MMMM YYYY',\n // english locale\n phrases: _defaultPhrases.CalendarDayPhrases,\n dayAriaLabelFormat: undefined,\n verticalBorderSpacing: undefined\n};\n\nvar CalendarMonth =\n/*#__PURE__*/\nfunction (_ref) {\n (0, _inheritsLoose2[\"default\"])(CalendarMonth, _ref);\n var _proto = CalendarMonth.prototype;\n\n _proto[!_react[\"default\"].PureComponent && \"shouldComponentUpdate\"] = function (nextProps, nextState) {\n return !(0, _enzymeShallowEqual[\"default\"])(this.props, nextProps) || !(0, _enzymeShallowEqual[\"default\"])(this.state, nextState);\n };\n\n function CalendarMonth(props) {\n var _this;\n\n _this = _ref.call(this, props) || this;\n _this.state = {\n weeks: (0, _getCalendarMonthWeeks[\"default\"])(props.month, props.enableOutsideDays, props.firstDayOfWeek == null ? _moment[\"default\"].localeData().firstDayOfWeek() : props.firstDayOfWeek)\n };\n _this.setCaptionRef = _this.setCaptionRef.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.setMonthTitleHeight = _this.setMonthTitleHeight.bind((0, _assertThisInitialized2[\"default\"])(_this));\n return _this;\n }\n\n _proto.componentDidMount = function componentDidMount() {\n this.setMonthTitleHeightTimeout = setTimeout(this.setMonthTitleHeight, 0);\n };\n\n _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n var month = nextProps.month,\n enableOutsideDays = nextProps.enableOutsideDays,\n firstDayOfWeek = nextProps.firstDayOfWeek;\n var _this$props = this.props,\n prevMonth = _this$props.month,\n prevEnableOutsideDays = _this$props.enableOutsideDays,\n prevFirstDayOfWeek = _this$props.firstDayOfWeek;\n\n if (!month.isSame(prevMonth) || enableOutsideDays !== prevEnableOutsideDays || firstDayOfWeek !== prevFirstDayOfWeek) {\n this.setState({\n weeks: (0, _getCalendarMonthWeeks[\"default\"])(month, enableOutsideDays, firstDayOfWeek == null ? _moment[\"default\"].localeData().firstDayOfWeek() : firstDayOfWeek)\n });\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.setMonthTitleHeightTimeout) {\n clearTimeout(this.setMonthTitleHeightTimeout);\n }\n };\n\n _proto.setMonthTitleHeight = function setMonthTitleHeight() {\n var setMonthTitleHeight = this.props.setMonthTitleHeight;\n\n if (setMonthTitleHeight) {\n var captionHeight = (0, _calculateDimension[\"default\"])(this.captionRef, 'height', true, true);\n setMonthTitleHeight(captionHeight);\n }\n };\n\n _proto.setCaptionRef = function setCaptionRef(ref) {\n this.captionRef = ref;\n };\n\n _proto.render = function render() {\n var _this$props2 = this.props,\n dayAriaLabelFormat = _this$props2.dayAriaLabelFormat,\n daySize = _this$props2.daySize,\n focusedDate = _this$props2.focusedDate,\n horizontalMonthPadding = _this$props2.horizontalMonthPadding,\n isFocused = _this$props2.isFocused,\n isVisible = _this$props2.isVisible,\n modifiers = _this$props2.modifiers,\n month = _this$props2.month,\n monthFormat = _this$props2.monthFormat,\n onDayClick = _this$props2.onDayClick,\n onDayMouseEnter = _this$props2.onDayMouseEnter,\n onDayMouseLeave = _this$props2.onDayMouseLeave,\n onMonthSelect = _this$props2.onMonthSelect,\n onYearSelect = _this$props2.onYearSelect,\n orientation = _this$props2.orientation,\n phrases = _this$props2.phrases,\n renderCalendarDay = _this$props2.renderCalendarDay,\n renderDayContents = _this$props2.renderDayContents,\n renderMonthElement = _this$props2.renderMonthElement,\n renderMonthText = _this$props2.renderMonthText,\n styles = _this$props2.styles,\n verticalBorderSpacing = _this$props2.verticalBorderSpacing;\n var weeks = this.state.weeks;\n var monthTitle = renderMonthText ? renderMonthText(month) : month.format(monthFormat);\n var verticalScrollable = orientation === _constants.VERTICAL_SCROLLABLE;\n return _react[\"default\"].createElement(\"div\", (0, _extends2[\"default\"])({}, (0, _reactWithStyles.css)(styles.CalendarMonth, {\n padding: \"0 \".concat(horizontalMonthPadding, \"px\")\n }), {\n \"data-visible\": isVisible\n }), _react[\"default\"].createElement(\"div\", (0, _extends2[\"default\"])({\n ref: this.setCaptionRef\n }, (0, _reactWithStyles.css)(styles.CalendarMonth_caption, verticalScrollable && styles.CalendarMonth_caption__verticalScrollable)), renderMonthElement ? renderMonthElement({\n month: month,\n onMonthSelect: onMonthSelect,\n onYearSelect: onYearSelect,\n isVisible: isVisible\n }) : _react[\"default\"].createElement(\"strong\", null, monthTitle)), _react[\"default\"].createElement(\"table\", (0, _extends2[\"default\"])({}, (0, _reactWithStyles.css)(!verticalBorderSpacing && styles.CalendarMonth_table, verticalBorderSpacing && styles.CalendarMonth_verticalSpacing, verticalBorderSpacing && {\n borderSpacing: \"0px \".concat(verticalBorderSpacing, \"px\")\n }), {\n role: \"presentation\"\n }), _react[\"default\"].createElement(\"tbody\", null, weeks.map(function (week, i) {\n return _react[\"default\"].createElement(_CalendarWeek[\"default\"], {\n key: i\n }, week.map(function (day, dayOfWeek) {\n return renderCalendarDay({\n key: dayOfWeek,\n day: day,\n daySize: daySize,\n isOutsideDay: !day || day.month() !== month.month(),\n tabIndex: isVisible && (0, _isSameDay[\"default\"])(day, focusedDate) ? 0 : -1,\n isFocused: isFocused,\n onDayMouseEnter: onDayMouseEnter,\n onDayMouseLeave: onDayMouseLeave,\n onDayClick: onDayClick,\n renderDayContents: renderDayContents,\n phrases: phrases,\n modifiers: modifiers[(0, _toISODateString[\"default\"])(day)],\n ariaLabelFormat: dayAriaLabelFormat\n });\n }));\n }))));\n };\n\n return CalendarMonth;\n}(_react[\"default\"].PureComponent || _react[\"default\"].Component);\n\nCalendarMonth.propTypes = process.env.NODE_ENV !== \"production\" ? propTypes : {};\nCalendarMonth.defaultProps = defaultProps;\n\nvar _default = (0, _reactWithStyles.withStyles)(function (_ref2) {\n var _ref2$reactDates = _ref2.reactDates,\n color = _ref2$reactDates.color,\n font = _ref2$reactDates.font,\n spacing = _ref2$reactDates.spacing;\n return {\n CalendarMonth: {\n background: color.background,\n textAlign: 'center',\n verticalAlign: 'top',\n userSelect: 'none'\n },\n CalendarMonth_table: {\n borderCollapse: 'collapse',\n borderSpacing: 0\n },\n CalendarMonth_verticalSpacing: {\n borderCollapse: 'separate'\n },\n CalendarMonth_caption: {\n color: color.text,\n fontSize: font.captionSize,\n textAlign: 'center',\n paddingTop: spacing.captionPaddingTop,\n paddingBottom: spacing.captionPaddingBottom,\n captionSide: 'initial'\n },\n CalendarMonth_caption__verticalScrollable: {\n paddingTop: 12,\n paddingBottom: 7\n }\n };\n}, {\n pureComponent: typeof _react[\"default\"].PureComponent !== 'undefined'\n})(CalendarMonth);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _enzymeShallowEqual = _interopRequireDefault(require(\"enzyme-shallow-equal\"));\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _assertThisInitialized2 = _interopRequireDefault(require(\"@babel/runtime/helpers/assertThisInitialized\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _reactMomentProptypes = _interopRequireDefault(require(\"react-moment-proptypes\"));\n\nvar _airbnbPropTypes = require(\"airbnb-prop-types\");\n\nvar _reactWithStyles = require(\"react-with-styles\");\n\nvar _moment = _interopRequireDefault(require(\"moment\"));\n\nvar _consolidatedEvents = require(\"consolidated-events\");\n\nvar _defaultPhrases = require(\"../defaultPhrases\");\n\nvar _getPhrasePropTypes = _interopRequireDefault(require(\"../utils/getPhrasePropTypes\"));\n\nvar _noflip = _interopRequireDefault(require(\"../utils/noflip\"));\n\nvar _CalendarMonth = _interopRequireDefault(require(\"./CalendarMonth\"));\n\nvar _isTransitionEndSupported = _interopRequireDefault(require(\"../utils/isTransitionEndSupported\"));\n\nvar _getTransformStyles = _interopRequireDefault(require(\"../utils/getTransformStyles\"));\n\nvar _getCalendarMonthWidth = _interopRequireDefault(require(\"../utils/getCalendarMonthWidth\"));\n\nvar _toISOMonthString = _interopRequireDefault(require(\"../utils/toISOMonthString\"));\n\nvar _isPrevMonth = _interopRequireDefault(require(\"../utils/isPrevMonth\"));\n\nvar _isNextMonth = _interopRequireDefault(require(\"../utils/isNextMonth\"));\n\nvar _ModifiersShape = _interopRequireDefault(require(\"../shapes/ModifiersShape\"));\n\nvar _ScrollableOrientationShape = _interopRequireDefault(require(\"../shapes/ScrollableOrientationShape\"));\n\nvar _DayOfWeekShape = _interopRequireDefault(require(\"../shapes/DayOfWeekShape\"));\n\nvar _constants = require(\"../constants\");\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nvar propTypes = process.env.NODE_ENV !== \"production\" ? (0, _airbnbPropTypes.forbidExtraProps)(_objectSpread({}, _reactWithStyles.withStylesPropTypes, {\n enableOutsideDays: _propTypes[\"default\"].bool,\n firstVisibleMonthIndex: _propTypes[\"default\"].number,\n horizontalMonthPadding: _airbnbPropTypes.nonNegativeInteger,\n initialMonth: _reactMomentProptypes[\"default\"].momentObj,\n isAnimating: _propTypes[\"default\"].bool,\n numberOfMonths: _propTypes[\"default\"].number,\n modifiers: _propTypes[\"default\"].objectOf(_propTypes[\"default\"].objectOf(_ModifiersShape[\"default\"])),\n orientation: _ScrollableOrientationShape[\"default\"],\n onDayClick: _propTypes[\"default\"].func,\n onDayMouseEnter: _propTypes[\"default\"].func,\n onDayMouseLeave: _propTypes[\"default\"].func,\n onMonthTransitionEnd: _propTypes[\"default\"].func,\n onMonthChange: _propTypes[\"default\"].func,\n onYearChange: _propTypes[\"default\"].func,\n renderMonthText: (0, _airbnbPropTypes.mutuallyExclusiveProps)(_propTypes[\"default\"].func, 'renderMonthText', 'renderMonthElement'),\n renderCalendarDay: _propTypes[\"default\"].func,\n renderDayContents: _propTypes[\"default\"].func,\n translationValue: _propTypes[\"default\"].number,\n renderMonthElement: (0, _airbnbPropTypes.mutuallyExclusiveProps)(_propTypes[\"default\"].func, 'renderMonthText', 'renderMonthElement'),\n daySize: _airbnbPropTypes.nonNegativeInteger,\n focusedDate: _reactMomentProptypes[\"default\"].momentObj,\n // indicates focusable day\n isFocused: _propTypes[\"default\"].bool,\n // indicates whether or not to move focus to focusable day\n firstDayOfWeek: _DayOfWeekShape[\"default\"],\n setMonthTitleHeight: _propTypes[\"default\"].func,\n isRTL: _propTypes[\"default\"].bool,\n transitionDuration: _airbnbPropTypes.nonNegativeInteger,\n verticalBorderSpacing: _airbnbPropTypes.nonNegativeInteger,\n // i18n\n monthFormat: _propTypes[\"default\"].string,\n phrases: _propTypes[\"default\"].shape((0, _getPhrasePropTypes[\"default\"])(_defaultPhrases.CalendarDayPhrases)),\n dayAriaLabelFormat: _propTypes[\"default\"].string\n})) : {};\nvar defaultProps = {\n enableOutsideDays: false,\n firstVisibleMonthIndex: 0,\n horizontalMonthPadding: 13,\n initialMonth: (0, _moment[\"default\"])(),\n isAnimating: false,\n numberOfMonths: 1,\n modifiers: {},\n orientation: _constants.HORIZONTAL_ORIENTATION,\n onDayClick: function onDayClick() {},\n onDayMouseEnter: function onDayMouseEnter() {},\n onDayMouseLeave: function onDayMouseLeave() {},\n onMonthChange: function onMonthChange() {},\n onYearChange: function onYearChange() {},\n onMonthTransitionEnd: function onMonthTransitionEnd() {},\n renderMonthText: null,\n renderCalendarDay: undefined,\n renderDayContents: null,\n translationValue: null,\n renderMonthElement: null,\n daySize: _constants.DAY_SIZE,\n focusedDate: null,\n isFocused: false,\n firstDayOfWeek: null,\n setMonthTitleHeight: null,\n isRTL: false,\n transitionDuration: 200,\n verticalBorderSpacing: undefined,\n // i18n\n monthFormat: 'MMMM YYYY',\n // english locale\n phrases: _defaultPhrases.CalendarDayPhrases,\n dayAriaLabelFormat: undefined\n};\n\nfunction getMonths(initialMonth, numberOfMonths, withoutTransitionMonths) {\n var month = initialMonth.clone();\n if (!withoutTransitionMonths) month = month.subtract(1, 'month');\n var months = [];\n\n for (var i = 0; i < (withoutTransitionMonths ? numberOfMonths : numberOfMonths + 2); i += 1) {\n months.push(month);\n month = month.clone().add(1, 'month');\n }\n\n return months;\n}\n\nvar CalendarMonthGrid =\n/*#__PURE__*/\nfunction (_ref) {\n (0, _inheritsLoose2[\"default\"])(CalendarMonthGrid, _ref);\n var _proto = CalendarMonthGrid.prototype;\n\n _proto[!_react[\"default\"].PureComponent && \"shouldComponentUpdate\"] = function (nextProps, nextState) {\n return !(0, _enzymeShallowEqual[\"default\"])(this.props, nextProps) || !(0, _enzymeShallowEqual[\"default\"])(this.state, nextState);\n };\n\n function CalendarMonthGrid(props) {\n var _this;\n\n _this = _ref.call(this, props) || this;\n var withoutTransitionMonths = props.orientation === _constants.VERTICAL_SCROLLABLE;\n _this.state = {\n months: getMonths(props.initialMonth, props.numberOfMonths, withoutTransitionMonths)\n };\n _this.isTransitionEndSupported = (0, _isTransitionEndSupported[\"default\"])();\n _this.onTransitionEnd = _this.onTransitionEnd.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.setContainerRef = _this.setContainerRef.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.locale = _moment[\"default\"].locale();\n _this.onMonthSelect = _this.onMonthSelect.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.onYearSelect = _this.onYearSelect.bind((0, _assertThisInitialized2[\"default\"])(_this));\n return _this;\n }\n\n _proto.componentDidMount = function componentDidMount() {\n this.removeEventListener = (0, _consolidatedEvents.addEventListener)(this.container, 'transitionend', this.onTransitionEnd);\n };\n\n _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n var _this2 = this;\n\n var initialMonth = nextProps.initialMonth,\n numberOfMonths = nextProps.numberOfMonths,\n orientation = nextProps.orientation;\n var months = this.state.months;\n var _this$props = this.props,\n prevInitialMonth = _this$props.initialMonth,\n prevNumberOfMonths = _this$props.numberOfMonths;\n var hasMonthChanged = !prevInitialMonth.isSame(initialMonth, 'month');\n var hasNumberOfMonthsChanged = prevNumberOfMonths !== numberOfMonths;\n var newMonths = months;\n\n if (hasMonthChanged && !hasNumberOfMonthsChanged) {\n if ((0, _isNextMonth[\"default\"])(prevInitialMonth, initialMonth)) {\n newMonths = months.slice(1);\n newMonths.push(months[months.length - 1].clone().add(1, 'month'));\n } else if ((0, _isPrevMonth[\"default\"])(prevInitialMonth, initialMonth)) {\n newMonths = months.slice(0, months.length - 1);\n newMonths.unshift(months[0].clone().subtract(1, 'month'));\n } else {\n var withoutTransitionMonths = orientation === _constants.VERTICAL_SCROLLABLE;\n newMonths = getMonths(initialMonth, numberOfMonths, withoutTransitionMonths);\n }\n }\n\n if (hasNumberOfMonthsChanged) {\n var _withoutTransitionMonths = orientation === _constants.VERTICAL_SCROLLABLE;\n\n newMonths = getMonths(initialMonth, numberOfMonths, _withoutTransitionMonths);\n }\n\n var momentLocale = _moment[\"default\"].locale();\n\n if (this.locale !== momentLocale) {\n this.locale = momentLocale;\n newMonths = newMonths.map(function (m) {\n return m.locale(_this2.locale);\n });\n }\n\n this.setState({\n months: newMonths\n });\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n var _this$props2 = this.props,\n isAnimating = _this$props2.isAnimating,\n transitionDuration = _this$props2.transitionDuration,\n onMonthTransitionEnd = _this$props2.onMonthTransitionEnd; // For IE9, immediately call onMonthTransitionEnd instead of\n // waiting for the animation to complete. Similarly, if transitionDuration\n // is set to 0, also immediately invoke the onMonthTransitionEnd callback\n\n if ((!this.isTransitionEndSupported || !transitionDuration) && isAnimating) {\n onMonthTransitionEnd();\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.removeEventListener) this.removeEventListener();\n };\n\n _proto.onTransitionEnd = function onTransitionEnd() {\n var onMonthTransitionEnd = this.props.onMonthTransitionEnd;\n onMonthTransitionEnd();\n };\n\n _proto.onMonthSelect = function onMonthSelect(currentMonth, newMonthVal) {\n var newMonth = currentMonth.clone();\n var _this$props3 = this.props,\n onMonthChange = _this$props3.onMonthChange,\n orientation = _this$props3.orientation;\n var months = this.state.months;\n var withoutTransitionMonths = orientation === _constants.VERTICAL_SCROLLABLE;\n var initialMonthSubtraction = months.indexOf(currentMonth);\n\n if (!withoutTransitionMonths) {\n initialMonthSubtraction -= 1;\n }\n\n newMonth.set('month', newMonthVal).subtract(initialMonthSubtraction, 'months');\n onMonthChange(newMonth);\n };\n\n _proto.onYearSelect = function onYearSelect(currentMonth, newYearVal) {\n var newMonth = currentMonth.clone();\n var _this$props4 = this.props,\n onYearChange = _this$props4.onYearChange,\n orientation = _this$props4.orientation;\n var months = this.state.months;\n var withoutTransitionMonths = orientation === _constants.VERTICAL_SCROLLABLE;\n var initialMonthSubtraction = months.indexOf(currentMonth);\n\n if (!withoutTransitionMonths) {\n initialMonthSubtraction -= 1;\n }\n\n newMonth.set('year', newYearVal).subtract(initialMonthSubtraction, 'months');\n onYearChange(newMonth);\n };\n\n _proto.setContainerRef = function setContainerRef(ref) {\n this.container = ref;\n };\n\n _proto.render = function render() {\n var _this3 = this;\n\n var _this$props5 = this.props,\n enableOutsideDays = _this$props5.enableOutsideDays,\n firstVisibleMonthIndex = _this$props5.firstVisibleMonthIndex,\n horizontalMonthPadding = _this$props5.horizontalMonthPadding,\n isAnimating = _this$props5.isAnimating,\n modifiers = _this$props5.modifiers,\n numberOfMonths = _this$props5.numberOfMonths,\n monthFormat = _this$props5.monthFormat,\n orientation = _this$props5.orientation,\n translationValue = _this$props5.translationValue,\n daySize = _this$props5.daySize,\n onDayMouseEnter = _this$props5.onDayMouseEnter,\n onDayMouseLeave = _this$props5.onDayMouseLeave,\n onDayClick = _this$props5.onDayClick,\n renderMonthText = _this$props5.renderMonthText,\n renderCalendarDay = _this$props5.renderCalendarDay,\n renderDayContents = _this$props5.renderDayContents,\n renderMonthElement = _this$props5.renderMonthElement,\n onMonthTransitionEnd = _this$props5.onMonthTransitionEnd,\n firstDayOfWeek = _this$props5.firstDayOfWeek,\n focusedDate = _this$props5.focusedDate,\n isFocused = _this$props5.isFocused,\n isRTL = _this$props5.isRTL,\n styles = _this$props5.styles,\n phrases = _this$props5.phrases,\n dayAriaLabelFormat = _this$props5.dayAriaLabelFormat,\n transitionDuration = _this$props5.transitionDuration,\n verticalBorderSpacing = _this$props5.verticalBorderSpacing,\n setMonthTitleHeight = _this$props5.setMonthTitleHeight;\n var months = this.state.months;\n var isVertical = orientation === _constants.VERTICAL_ORIENTATION;\n var isVerticalScrollable = orientation === _constants.VERTICAL_SCROLLABLE;\n var isHorizontal = orientation === _constants.HORIZONTAL_ORIENTATION;\n var calendarMonthWidth = (0, _getCalendarMonthWidth[\"default\"])(daySize, horizontalMonthPadding);\n var width = isVertical || isVerticalScrollable ? calendarMonthWidth : (numberOfMonths + 2) * calendarMonthWidth;\n var transformType = isVertical || isVerticalScrollable ? 'translateY' : 'translateX';\n var transformValue = \"\".concat(transformType, \"(\").concat(translationValue, \"px)\");\n return _react[\"default\"].createElement(\"div\", (0, _extends2[\"default\"])({}, (0, _reactWithStyles.css)(styles.CalendarMonthGrid, isHorizontal && styles.CalendarMonthGrid__horizontal, isVertical && styles.CalendarMonthGrid__vertical, isVerticalScrollable && styles.CalendarMonthGrid__vertical_scrollable, isAnimating && styles.CalendarMonthGrid__animating, isAnimating && transitionDuration && {\n transition: \"transform \".concat(transitionDuration, \"ms ease-in-out\")\n }, _objectSpread({}, (0, _getTransformStyles[\"default\"])(transformValue), {\n width: width\n })), {\n ref: this.setContainerRef,\n onTransitionEnd: onMonthTransitionEnd\n }), months.map(function (month, i) {\n var isVisible = i >= firstVisibleMonthIndex && i < firstVisibleMonthIndex + numberOfMonths;\n var hideForAnimation = i === 0 && !isVisible;\n var showForAnimation = i === 0 && isAnimating && isVisible;\n var monthString = (0, _toISOMonthString[\"default\"])(month);\n return _react[\"default\"].createElement(\"div\", (0, _extends2[\"default\"])({\n key: monthString\n }, (0, _reactWithStyles.css)(isHorizontal && styles.CalendarMonthGrid_month__horizontal, hideForAnimation && styles.CalendarMonthGrid_month__hideForAnimation, showForAnimation && !isVertical && !isRTL && {\n position: 'absolute',\n left: -calendarMonthWidth\n }, showForAnimation && !isVertical && isRTL && {\n position: 'absolute',\n right: 0\n }, showForAnimation && isVertical && {\n position: 'absolute',\n top: -translationValue\n }, !isVisible && !isAnimating && styles.CalendarMonthGrid_month__hidden)), _react[\"default\"].createElement(_CalendarMonth[\"default\"], {\n month: month,\n isVisible: isVisible,\n enableOutsideDays: enableOutsideDays,\n modifiers: modifiers[monthString],\n monthFormat: monthFormat,\n orientation: orientation,\n onDayMouseEnter: onDayMouseEnter,\n onDayMouseLeave: onDayMouseLeave,\n onDayClick: onDayClick,\n onMonthSelect: _this3.onMonthSelect,\n onYearSelect: _this3.onYearSelect,\n renderMonthText: renderMonthText,\n renderCalendarDay: renderCalendarDay,\n renderDayContents: renderDayContents,\n renderMonthElement: renderMonthElement,\n firstDayOfWeek: firstDayOfWeek,\n daySize: daySize,\n focusedDate: isVisible ? focusedDate : null,\n isFocused: isFocused,\n phrases: phrases,\n setMonthTitleHeight: setMonthTitleHeight,\n dayAriaLabelFormat: dayAriaLabelFormat,\n verticalBorderSpacing: verticalBorderSpacing,\n horizontalMonthPadding: horizontalMonthPadding\n }));\n }));\n };\n\n return CalendarMonthGrid;\n}(_react[\"default\"].PureComponent || _react[\"default\"].Component);\n\nCalendarMonthGrid.propTypes = process.env.NODE_ENV !== \"production\" ? propTypes : {};\nCalendarMonthGrid.defaultProps = defaultProps;\n\nvar _default = (0, _reactWithStyles.withStyles)(function (_ref2) {\n var _ref2$reactDates = _ref2.reactDates,\n color = _ref2$reactDates.color,\n spacing = _ref2$reactDates.spacing,\n zIndex = _ref2$reactDates.zIndex;\n return {\n CalendarMonthGrid: {\n background: color.background,\n textAlign: (0, _noflip[\"default\"])('left'),\n zIndex: zIndex\n },\n CalendarMonthGrid__animating: {\n zIndex: zIndex + 1\n },\n CalendarMonthGrid__horizontal: {\n position: 'absolute',\n left: (0, _noflip[\"default\"])(spacing.dayPickerHorizontalPadding)\n },\n CalendarMonthGrid__vertical: {\n margin: '0 auto'\n },\n CalendarMonthGrid__vertical_scrollable: {\n margin: '0 auto'\n },\n CalendarMonthGrid_month__horizontal: {\n display: 'inline-block',\n verticalAlign: 'top',\n minHeight: '100%'\n },\n CalendarMonthGrid_month__hideForAnimation: {\n position: 'absolute',\n zIndex: zIndex - 1,\n opacity: 0,\n pointerEvents: 'none'\n },\n CalendarMonthGrid_month__hidden: {\n visibility: 'hidden'\n }\n };\n}, {\n pureComponent: typeof _react[\"default\"].PureComponent !== 'undefined'\n})(CalendarMonthGrid);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = CalendarWeek;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _airbnbPropTypes = require(\"airbnb-prop-types\");\n\nvar propTypes = process.env.NODE_ENV !== \"production\" ? (0, _airbnbPropTypes.forbidExtraProps)({\n children: _propTypes[\"default\"].node.isRequired\n}) : {};\n\nfunction CalendarWeek(_ref) {\n var children = _ref.children;\n return _react[\"default\"].createElement(\"tr\", null, children);\n}\n\nCalendarWeek.propTypes = process.env.NODE_ENV !== \"production\" ? propTypes : {};","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar ChevronDown = function ChevronDown(props) {\n return _react[\"default\"].createElement(\"svg\", props, _react[\"default\"].createElement(\"path\", {\n d: \"M968 289L514 741c-11 11-21 11-32 0L29 289c-4-5-6-11-6-16 0-13 10-23 23-23 6 0 11 2 15 7l437 436 438-436c4-5 9-7 16-7 6 0 11 2 16 7 9 10 9 21 0 32z\"\n }));\n};\n\nChevronDown.defaultProps = {\n focusable: \"false\",\n viewBox: \"0 0 1000 1000\"\n};\nvar _default = ChevronDown;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar ChevronUp = function ChevronUp(props) {\n return _react[\"default\"].createElement(\"svg\", props, _react[\"default\"].createElement(\"path\", {\n d: \"M32 713l453-453c11-11 21-11 32 0l453 453c5 5 7 10 7 16 0 13-10 23-22 23-7 0-12-2-16-7L501 309 64 745c-4 5-9 7-15 7-7 0-12-2-17-7-9-11-9-21 0-32z\"\n }));\n};\n\nChevronUp.defaultProps = {\n focusable: \"false\",\n viewBox: \"0 0 1000 1000\"\n};\nvar _default = ChevronUp;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar CloseButton = function CloseButton(props) {\n return _react[\"default\"].createElement(\"svg\", props, _react[\"default\"].createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M11.53.47a.75.75 0 0 0-1.061 0l-4.47 4.47L1.529.47A.75.75 0 1 0 .468 1.531l4.47 4.47-4.47 4.47a.75.75 0 1 0 1.061 1.061l4.47-4.47 4.47 4.47a.75.75 0 1 0 1.061-1.061l-4.47-4.47 4.47-4.47a.75.75 0 0 0 0-1.061z\"\n }));\n};\n\nCloseButton.defaultProps = {\n focusable: \"false\",\n viewBox: \"0 0 12 12\"\n};\nvar _default = CloseButton;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _enzymeShallowEqual = _interopRequireDefault(require(\"enzyme-shallow-equal\"));\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _assertThisInitialized2 = _interopRequireDefault(require(\"@babel/runtime/helpers/assertThisInitialized\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _airbnbPropTypes = require(\"airbnb-prop-types\");\n\nvar _reactWithStyles = require(\"react-with-styles\");\n\nvar _throttle = _interopRequireDefault(require(\"lodash/throttle\"));\n\nvar _isTouchDevice = _interopRequireDefault(require(\"is-touch-device\"));\n\nvar _noflip = _interopRequireDefault(require(\"../utils/noflip\"));\n\nvar _getInputHeight = _interopRequireDefault(require(\"../utils/getInputHeight\"));\n\nvar _OpenDirectionShape = _interopRequireDefault(require(\"../shapes/OpenDirectionShape\"));\n\nvar _constants = require(\"../constants\");\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nvar FANG_PATH_TOP = \"M0,\".concat(_constants.FANG_HEIGHT_PX, \" \").concat(_constants.FANG_WIDTH_PX, \",\").concat(_constants.FANG_HEIGHT_PX, \" \").concat(_constants.FANG_WIDTH_PX / 2, \",0z\");\nvar FANG_STROKE_TOP = \"M0,\".concat(_constants.FANG_HEIGHT_PX, \" \").concat(_constants.FANG_WIDTH_PX / 2, \",0 \").concat(_constants.FANG_WIDTH_PX, \",\").concat(_constants.FANG_HEIGHT_PX);\nvar FANG_PATH_BOTTOM = \"M0,0 \".concat(_constants.FANG_WIDTH_PX, \",0 \").concat(_constants.FANG_WIDTH_PX / 2, \",\").concat(_constants.FANG_HEIGHT_PX, \"z\");\nvar FANG_STROKE_BOTTOM = \"M0,0 \".concat(_constants.FANG_WIDTH_PX / 2, \",\").concat(_constants.FANG_HEIGHT_PX, \" \").concat(_constants.FANG_WIDTH_PX, \",0\");\nvar propTypes = process.env.NODE_ENV !== \"production\" ? (0, _airbnbPropTypes.forbidExtraProps)(_objectSpread({}, _reactWithStyles.withStylesPropTypes, {\n id: _propTypes[\"default\"].string.isRequired,\n placeholder: _propTypes[\"default\"].string,\n displayValue: _propTypes[\"default\"].string,\n ariaLabel: _propTypes[\"default\"].string,\n screenReaderMessage: _propTypes[\"default\"].string,\n focused: _propTypes[\"default\"].bool,\n disabled: _propTypes[\"default\"].bool,\n required: _propTypes[\"default\"].bool,\n readOnly: _propTypes[\"default\"].bool,\n openDirection: _OpenDirectionShape[\"default\"],\n showCaret: _propTypes[\"default\"].bool,\n verticalSpacing: _airbnbPropTypes.nonNegativeInteger,\n small: _propTypes[\"default\"].bool,\n block: _propTypes[\"default\"].bool,\n regular: _propTypes[\"default\"].bool,\n onChange: _propTypes[\"default\"].func,\n onFocus: _propTypes[\"default\"].func,\n onKeyDownShiftTab: _propTypes[\"default\"].func,\n onKeyDownTab: _propTypes[\"default\"].func,\n onKeyDownArrowDown: _propTypes[\"default\"].func,\n onKeyDownQuestionMark: _propTypes[\"default\"].func,\n // accessibility\n isFocused: _propTypes[\"default\"].bool // describes actual DOM focus\n\n})) : {};\nvar defaultProps = {\n placeholder: 'Select Date',\n displayValue: '',\n ariaLabel: undefined,\n screenReaderMessage: '',\n focused: false,\n disabled: false,\n required: false,\n readOnly: null,\n openDirection: _constants.OPEN_DOWN,\n showCaret: false,\n verticalSpacing: _constants.DEFAULT_VERTICAL_SPACING,\n small: false,\n block: false,\n regular: false,\n onChange: function onChange() {},\n onFocus: function onFocus() {},\n onKeyDownShiftTab: function onKeyDownShiftTab() {},\n onKeyDownTab: function onKeyDownTab() {},\n onKeyDownArrowDown: function onKeyDownArrowDown() {},\n onKeyDownQuestionMark: function onKeyDownQuestionMark() {},\n // accessibility\n isFocused: false\n};\n\nvar DateInput =\n/*#__PURE__*/\nfunction (_ref) {\n (0, _inheritsLoose2[\"default\"])(DateInput, _ref);\n var _proto = DateInput.prototype;\n\n _proto[!_react[\"default\"].PureComponent && \"shouldComponentUpdate\"] = function (nextProps, nextState) {\n return !(0, _enzymeShallowEqual[\"default\"])(this.props, nextProps) || !(0, _enzymeShallowEqual[\"default\"])(this.state, nextState);\n };\n\n function DateInput(props) {\n var _this;\n\n _this = _ref.call(this, props) || this;\n _this.state = {\n dateString: '',\n isTouchDevice: false\n };\n _this.onChange = _this.onChange.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.onKeyDown = _this.onKeyDown.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.setInputRef = _this.setInputRef.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.throttledKeyDown = (0, _throttle[\"default\"])(_this.onFinalKeyDown, 300, {\n trailing: false\n });\n return _this;\n }\n\n _proto.componentDidMount = function componentDidMount() {\n this.setState({\n isTouchDevice: (0, _isTouchDevice[\"default\"])()\n });\n };\n\n _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n var dateString = this.state.dateString;\n\n if (dateString && nextProps.displayValue) {\n this.setState({\n dateString: ''\n });\n }\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var _this$props = this.props,\n focused = _this$props.focused,\n isFocused = _this$props.isFocused;\n if (prevProps.focused === focused && prevProps.isFocused === isFocused) return;\n\n if (focused && isFocused) {\n this.inputRef.focus();\n }\n };\n\n _proto.onChange = function onChange(e) {\n var _this$props2 = this.props,\n onChange = _this$props2.onChange,\n onKeyDownQuestionMark = _this$props2.onKeyDownQuestionMark;\n var dateString = e.target.value; // In Safari, onKeyDown does not consistently fire ahead of onChange. As a result, we need to\n // special case the `?` key so that it always triggers the appropriate callback, instead of\n // modifying the input value\n\n if (dateString[dateString.length - 1] === '?') {\n onKeyDownQuestionMark(e);\n } else {\n this.setState({\n dateString: dateString\n }, function () {\n return onChange(dateString);\n });\n }\n };\n\n _proto.onKeyDown = function onKeyDown(e) {\n e.stopPropagation();\n\n if (!_constants.MODIFIER_KEY_NAMES.has(e.key)) {\n this.throttledKeyDown(e);\n }\n };\n\n _proto.onFinalKeyDown = function onFinalKeyDown(e) {\n var _this$props3 = this.props,\n onKeyDownShiftTab = _this$props3.onKeyDownShiftTab,\n onKeyDownTab = _this$props3.onKeyDownTab,\n onKeyDownArrowDown = _this$props3.onKeyDownArrowDown,\n onKeyDownQuestionMark = _this$props3.onKeyDownQuestionMark;\n var key = e.key;\n\n if (key === 'Tab') {\n if (e.shiftKey) {\n onKeyDownShiftTab(e);\n } else {\n onKeyDownTab(e);\n }\n } else if (key === 'ArrowDown') {\n onKeyDownArrowDown(e);\n } else if (key === '?') {\n e.preventDefault();\n onKeyDownQuestionMark(e);\n }\n };\n\n _proto.setInputRef = function setInputRef(ref) {\n this.inputRef = ref;\n };\n\n _proto.render = function render() {\n var _this$state = this.state,\n dateString = _this$state.dateString,\n isTouch = _this$state.isTouchDevice;\n var _this$props4 = this.props,\n id = _this$props4.id,\n placeholder = _this$props4.placeholder,\n ariaLabel = _this$props4.ariaLabel,\n displayValue = _this$props4.displayValue,\n screenReaderMessage = _this$props4.screenReaderMessage,\n focused = _this$props4.focused,\n showCaret = _this$props4.showCaret,\n onFocus = _this$props4.onFocus,\n disabled = _this$props4.disabled,\n required = _this$props4.required,\n readOnly = _this$props4.readOnly,\n openDirection = _this$props4.openDirection,\n verticalSpacing = _this$props4.verticalSpacing,\n small = _this$props4.small,\n regular = _this$props4.regular,\n block = _this$props4.block,\n styles = _this$props4.styles,\n reactDates = _this$props4.theme.reactDates;\n var value = dateString || displayValue || '';\n var screenReaderMessageId = \"DateInput__screen-reader-message-\".concat(id);\n var withFang = showCaret && focused;\n var inputHeight = (0, _getInputHeight[\"default\"])(reactDates, small);\n return _react[\"default\"].createElement(\"div\", (0, _reactWithStyles.css)(styles.DateInput, small && styles.DateInput__small, block && styles.DateInput__block, withFang && styles.DateInput__withFang, disabled && styles.DateInput__disabled, withFang && openDirection === _constants.OPEN_DOWN && styles.DateInput__openDown, withFang && openDirection === _constants.OPEN_UP && styles.DateInput__openUp), _react[\"default\"].createElement(\"input\", (0, _extends2[\"default\"])({}, (0, _reactWithStyles.css)(styles.DateInput_input, small && styles.DateInput_input__small, regular && styles.DateInput_input__regular, readOnly && styles.DateInput_input__readOnly, focused && styles.DateInput_input__focused, disabled && styles.DateInput_input__disabled), {\n \"aria-label\": ariaLabel === undefined ? placeholder : ariaLabel,\n type: \"text\",\n id: id,\n name: id,\n ref: this.setInputRef,\n value: value,\n onChange: this.onChange,\n onKeyDown: this.onKeyDown,\n onFocus: onFocus,\n placeholder: placeholder,\n autoComplete: \"off\",\n disabled: disabled,\n readOnly: typeof readOnly === 'boolean' ? readOnly : isTouch,\n required: required,\n \"aria-describedby\": screenReaderMessage && screenReaderMessageId\n })), withFang && _react[\"default\"].createElement(\"svg\", (0, _extends2[\"default\"])({\n role: \"presentation\",\n focusable: \"false\"\n }, (0, _reactWithStyles.css)(styles.DateInput_fang, openDirection === _constants.OPEN_DOWN && {\n top: inputHeight + verticalSpacing - _constants.FANG_HEIGHT_PX - 1\n }, openDirection === _constants.OPEN_UP && {\n bottom: inputHeight + verticalSpacing - _constants.FANG_HEIGHT_PX - 1\n })), _react[\"default\"].createElement(\"path\", (0, _extends2[\"default\"])({}, (0, _reactWithStyles.css)(styles.DateInput_fangShape), {\n d: openDirection === _constants.OPEN_DOWN ? FANG_PATH_TOP : FANG_PATH_BOTTOM\n })), _react[\"default\"].createElement(\"path\", (0, _extends2[\"default\"])({}, (0, _reactWithStyles.css)(styles.DateInput_fangStroke), {\n d: openDirection === _constants.OPEN_DOWN ? FANG_STROKE_TOP : FANG_STROKE_BOTTOM\n }))), screenReaderMessage && _react[\"default\"].createElement(\"p\", (0, _extends2[\"default\"])({}, (0, _reactWithStyles.css)(styles.DateInput_screenReaderMessage), {\n id: screenReaderMessageId\n }), screenReaderMessage));\n };\n\n return DateInput;\n}(_react[\"default\"].PureComponent || _react[\"default\"].Component);\n\nDateInput.propTypes = process.env.NODE_ENV !== \"production\" ? propTypes : {};\nDateInput.defaultProps = defaultProps;\n\nvar _default = (0, _reactWithStyles.withStyles)(function (_ref2) {\n var _ref2$reactDates = _ref2.reactDates,\n border = _ref2$reactDates.border,\n color = _ref2$reactDates.color,\n sizing = _ref2$reactDates.sizing,\n spacing = _ref2$reactDates.spacing,\n font = _ref2$reactDates.font,\n zIndex = _ref2$reactDates.zIndex;\n return {\n DateInput: {\n margin: 0,\n padding: spacing.inputPadding,\n background: color.background,\n position: 'relative',\n display: 'inline-block',\n width: sizing.inputWidth,\n verticalAlign: 'middle'\n },\n DateInput__small: {\n width: sizing.inputWidth_small\n },\n DateInput__block: {\n width: '100%'\n },\n DateInput__disabled: {\n background: color.disabled,\n color: color.textDisabled\n },\n DateInput_input: {\n fontWeight: font.input.weight,\n fontSize: font.input.size,\n lineHeight: font.input.lineHeight,\n color: color.text,\n backgroundColor: color.background,\n width: '100%',\n padding: \"\".concat(spacing.displayTextPaddingVertical, \"px \").concat(spacing.displayTextPaddingHorizontal, \"px\"),\n paddingTop: spacing.displayTextPaddingTop,\n paddingBottom: spacing.displayTextPaddingBottom,\n paddingLeft: (0, _noflip[\"default\"])(spacing.displayTextPaddingLeft),\n paddingRight: (0, _noflip[\"default\"])(spacing.displayTextPaddingRight),\n border: border.input.border,\n borderTop: border.input.borderTop,\n borderRight: (0, _noflip[\"default\"])(border.input.borderRight),\n borderBottom: border.input.borderBottom,\n borderLeft: (0, _noflip[\"default\"])(border.input.borderLeft),\n borderRadius: border.input.borderRadius\n },\n DateInput_input__small: {\n fontSize: font.input.size_small,\n lineHeight: font.input.lineHeight_small,\n letterSpacing: font.input.letterSpacing_small,\n padding: \"\".concat(spacing.displayTextPaddingVertical_small, \"px \").concat(spacing.displayTextPaddingHorizontal_small, \"px\"),\n paddingTop: spacing.displayTextPaddingTop_small,\n paddingBottom: spacing.displayTextPaddingBottom_small,\n paddingLeft: (0, _noflip[\"default\"])(spacing.displayTextPaddingLeft_small),\n paddingRight: (0, _noflip[\"default\"])(spacing.displayTextPaddingRight_small)\n },\n DateInput_input__regular: {\n fontWeight: 'auto'\n },\n DateInput_input__readOnly: {\n userSelect: 'none'\n },\n DateInput_input__focused: {\n outline: border.input.outlineFocused,\n background: color.backgroundFocused,\n border: border.input.borderFocused,\n borderTop: border.input.borderTopFocused,\n borderRight: (0, _noflip[\"default\"])(border.input.borderRightFocused),\n borderBottom: border.input.borderBottomFocused,\n borderLeft: (0, _noflip[\"default\"])(border.input.borderLeftFocused)\n },\n DateInput_input__disabled: {\n background: color.disabled,\n fontStyle: font.input.styleDisabled\n },\n DateInput_screenReaderMessage: {\n border: 0,\n clip: 'rect(0, 0, 0, 0)',\n height: 1,\n margin: -1,\n overflow: 'hidden',\n padding: 0,\n position: 'absolute',\n width: 1\n },\n DateInput_fang: {\n position: 'absolute',\n width: _constants.FANG_WIDTH_PX,\n height: _constants.FANG_HEIGHT_PX,\n left: 22,\n // TODO: should be noflip wrapped and handled by an isRTL prop\n zIndex: zIndex + 2\n },\n DateInput_fangShape: {\n fill: color.background\n },\n DateInput_fangStroke: {\n stroke: color.core.border,\n fill: 'transparent'\n }\n };\n}, {\n pureComponent: typeof _react[\"default\"].PureComponent !== 'undefined'\n})(DateInput);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = exports.PureDateRangePicker = void 0;\n\nvar _enzymeShallowEqual = _interopRequireDefault(require(\"enzyme-shallow-equal\"));\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _assertThisInitialized2 = _interopRequireDefault(require(\"@babel/runtime/helpers/assertThisInitialized\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _moment = _interopRequireDefault(require(\"moment\"));\n\nvar _reactWithStyles = require(\"react-with-styles\");\n\nvar _reactPortal = require(\"react-portal\");\n\nvar _airbnbPropTypes = require(\"airbnb-prop-types\");\n\nvar _consolidatedEvents = require(\"consolidated-events\");\n\nvar _isTouchDevice = _interopRequireDefault(require(\"is-touch-device\"));\n\nvar _reactOutsideClickHandler = _interopRequireDefault(require(\"react-outside-click-handler\"));\n\nvar _DateRangePickerShape = _interopRequireDefault(require(\"../shapes/DateRangePickerShape\"));\n\nvar _defaultPhrases = require(\"../defaultPhrases\");\n\nvar _getResponsiveContainerStyles = _interopRequireDefault(require(\"../utils/getResponsiveContainerStyles\"));\n\nvar _getDetachedContainerStyles = _interopRequireDefault(require(\"../utils/getDetachedContainerStyles\"));\n\nvar _getInputHeight = _interopRequireDefault(require(\"../utils/getInputHeight\"));\n\nvar _isInclusivelyAfterDay = _interopRequireDefault(require(\"../utils/isInclusivelyAfterDay\"));\n\nvar _disableScroll2 = _interopRequireDefault(require(\"../utils/disableScroll\"));\n\nvar _noflip = _interopRequireDefault(require(\"../utils/noflip\"));\n\nvar _DateRangePickerInputController = _interopRequireDefault(require(\"./DateRangePickerInputController\"));\n\nvar _DayPickerRangeController = _interopRequireDefault(require(\"./DayPickerRangeController\"));\n\nvar _CloseButton = _interopRequireDefault(require(\"./CloseButton\"));\n\nvar _constants = require(\"../constants\");\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nvar propTypes = process.env.NODE_ENV !== \"production\" ? (0, _airbnbPropTypes.forbidExtraProps)(_objectSpread({}, _reactWithStyles.withStylesPropTypes, {}, _DateRangePickerShape[\"default\"])) : {};\nvar defaultProps = {\n // required props for a functional interactive DateRangePicker\n startDate: null,\n endDate: null,\n focusedInput: null,\n // input related props\n startDatePlaceholderText: 'Start Date',\n endDatePlaceholderText: 'End Date',\n startDateAriaLabel: undefined,\n endDateAriaLabel: undefined,\n startDateOffset: undefined,\n endDateOffset: undefined,\n disabled: false,\n required: false,\n readOnly: false,\n screenReaderInputMessage: '',\n showClearDates: false,\n showDefaultInputIcon: false,\n inputIconPosition: _constants.ICON_BEFORE_POSITION,\n customInputIcon: null,\n customArrowIcon: null,\n customCloseIcon: null,\n noBorder: false,\n block: false,\n small: false,\n regular: false,\n keepFocusOnInput: false,\n // calendar presentation and interaction related props\n renderMonthText: null,\n renderWeekHeaderElement: null,\n orientation: _constants.HORIZONTAL_ORIENTATION,\n anchorDirection: _constants.ANCHOR_LEFT,\n openDirection: _constants.OPEN_DOWN,\n horizontalMargin: 0,\n withPortal: false,\n withFullScreenPortal: false,\n appendToBody: false,\n disableScroll: false,\n initialVisibleMonth: null,\n numberOfMonths: 2,\n keepOpenOnDateSelect: false,\n reopenPickerOnClearDates: false,\n renderCalendarInfo: null,\n calendarInfoPosition: _constants.INFO_POSITION_BOTTOM,\n hideKeyboardShortcutsPanel: false,\n daySize: _constants.DAY_SIZE,\n isRTL: false,\n firstDayOfWeek: null,\n verticalHeight: null,\n transitionDuration: undefined,\n verticalSpacing: _constants.DEFAULT_VERTICAL_SPACING,\n horizontalMonthPadding: undefined,\n // navigation related props\n dayPickerNavigationInlineStyles: null,\n navPosition: _constants.NAV_POSITION_TOP,\n navPrev: null,\n navNext: null,\n renderNavPrevButton: null,\n renderNavNextButton: null,\n onPrevMonthClick: function onPrevMonthClick() {},\n onNextMonthClick: function onNextMonthClick() {},\n onClose: function onClose() {},\n // day presentation and interaction related props\n renderCalendarDay: undefined,\n renderDayContents: null,\n renderMonthElement: null,\n minimumNights: 1,\n enableOutsideDays: false,\n isDayBlocked: function isDayBlocked() {\n return false;\n },\n isOutsideRange: function isOutsideRange(day) {\n return !(0, _isInclusivelyAfterDay[\"default\"])(day, (0, _moment[\"default\"])());\n },\n isDayHighlighted: function isDayHighlighted() {\n return false;\n },\n minDate: undefined,\n maxDate: undefined,\n // internationalization\n displayFormat: function displayFormat() {\n return _moment[\"default\"].localeData().longDateFormat('L');\n },\n monthFormat: 'MMMM YYYY',\n weekDayFormat: 'dd',\n phrases: _defaultPhrases.DateRangePickerPhrases,\n dayAriaLabelFormat: undefined\n};\n\nvar DateRangePicker =\n/*#__PURE__*/\nfunction (_ref) {\n (0, _inheritsLoose2[\"default\"])(DateRangePicker, _ref);\n var _proto = DateRangePicker.prototype;\n\n _proto[!_react[\"default\"].PureComponent && \"shouldComponentUpdate\"] = function (nextProps, nextState) {\n return !(0, _enzymeShallowEqual[\"default\"])(this.props, nextProps) || !(0, _enzymeShallowEqual[\"default\"])(this.state, nextState);\n };\n\n function DateRangePicker(props) {\n var _this;\n\n _this = _ref.call(this, props) || this;\n _this.state = {\n dayPickerContainerStyles: {},\n isDateRangePickerInputFocused: false,\n isDayPickerFocused: false,\n showKeyboardShortcuts: false\n };\n _this.isTouchDevice = false;\n _this.onOutsideClick = _this.onOutsideClick.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.onDateRangePickerInputFocus = _this.onDateRangePickerInputFocus.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.onDayPickerFocus = _this.onDayPickerFocus.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.onDayPickerFocusOut = _this.onDayPickerFocusOut.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.onDayPickerBlur = _this.onDayPickerBlur.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.showKeyboardShortcutsPanel = _this.showKeyboardShortcutsPanel.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.responsivizePickerPosition = _this.responsivizePickerPosition.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.disableScroll = _this.disableScroll.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.setDayPickerContainerRef = _this.setDayPickerContainerRef.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.setContainerRef = _this.setContainerRef.bind((0, _assertThisInitialized2[\"default\"])(_this));\n return _this;\n }\n\n _proto.componentDidMount = function componentDidMount() {\n this.removeEventListener = (0, _consolidatedEvents.addEventListener)(window, 'resize', this.responsivizePickerPosition, {\n passive: true\n });\n this.responsivizePickerPosition();\n this.disableScroll();\n var focusedInput = this.props.focusedInput;\n\n if (focusedInput) {\n this.setState({\n isDateRangePickerInputFocused: true\n });\n }\n\n this.isTouchDevice = (0, _isTouchDevice[\"default\"])();\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var focusedInput = this.props.focusedInput;\n\n if (!prevProps.focusedInput && focusedInput && this.isOpened()) {\n // The date picker just changed from being closed to being open.\n this.responsivizePickerPosition();\n this.disableScroll();\n } else if (prevProps.focusedInput && !focusedInput && !this.isOpened()) {\n // The date picker just changed from being open to being closed.\n if (this.enableScroll) this.enableScroll();\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.removeDayPickerEventListeners();\n if (this.removeEventListener) this.removeEventListener();\n if (this.enableScroll) this.enableScroll();\n };\n\n _proto.onOutsideClick = function onOutsideClick(event) {\n var _this$props = this.props,\n onFocusChange = _this$props.onFocusChange,\n onClose = _this$props.onClose,\n startDate = _this$props.startDate,\n endDate = _this$props.endDate,\n appendToBody = _this$props.appendToBody;\n if (!this.isOpened()) return;\n if (appendToBody && this.dayPickerContainer.contains(event.target)) return;\n this.setState({\n isDateRangePickerInputFocused: false,\n isDayPickerFocused: false,\n showKeyboardShortcuts: false\n });\n onFocusChange(null);\n onClose({\n startDate: startDate,\n endDate: endDate\n });\n };\n\n _proto.onDateRangePickerInputFocus = function onDateRangePickerInputFocus(focusedInput) {\n var _this$props2 = this.props,\n onFocusChange = _this$props2.onFocusChange,\n readOnly = _this$props2.readOnly,\n withPortal = _this$props2.withPortal,\n withFullScreenPortal = _this$props2.withFullScreenPortal,\n keepFocusOnInput = _this$props2.keepFocusOnInput;\n\n if (focusedInput) {\n var withAnyPortal = withPortal || withFullScreenPortal;\n var moveFocusToDayPicker = withAnyPortal || readOnly && !keepFocusOnInput || this.isTouchDevice && !keepFocusOnInput;\n\n if (moveFocusToDayPicker) {\n this.onDayPickerFocus();\n } else {\n this.onDayPickerBlur();\n }\n }\n\n onFocusChange(focusedInput);\n };\n\n _proto.onDayPickerFocus = function onDayPickerFocus() {\n var _this$props3 = this.props,\n focusedInput = _this$props3.focusedInput,\n onFocusChange = _this$props3.onFocusChange;\n if (!focusedInput) onFocusChange(_constants.START_DATE);\n this.setState({\n isDateRangePickerInputFocused: false,\n isDayPickerFocused: true,\n showKeyboardShortcuts: false\n });\n };\n\n _proto.onDayPickerFocusOut = function onDayPickerFocusOut(event) {\n // In cases where **relatedTarget** is not null, it points to the right\n // element here. However, in cases where it is null (such as clicking on a\n // specific day) or it is **document.body** (IE11), the appropriate value is **event.target**.\n //\n // We handle both situations here by using the ` || ` operator to fallback\n // to *event.target** when **relatedTarget** is not provided.\n var relatedTarget = event.relatedTarget === document.body ? event.target : event.relatedTarget || event.target;\n if (this.dayPickerContainer.contains(relatedTarget)) return;\n this.onOutsideClick(event);\n };\n\n _proto.onDayPickerBlur = function onDayPickerBlur() {\n this.setState({\n isDateRangePickerInputFocused: true,\n isDayPickerFocused: false,\n showKeyboardShortcuts: false\n });\n };\n\n _proto.setDayPickerContainerRef = function setDayPickerContainerRef(ref) {\n if (ref === this.dayPickerContainer) return;\n if (this.dayPickerContainer) this.removeDayPickerEventListeners();\n this.dayPickerContainer = ref;\n if (!ref) return;\n this.addDayPickerEventListeners();\n };\n\n _proto.setContainerRef = function setContainerRef(ref) {\n this.container = ref;\n };\n\n _proto.addDayPickerEventListeners = function addDayPickerEventListeners() {\n // NOTE: We are using a manual event listener here, because React doesn't\n // provide FocusOut, while blur and keydown don't provide the information\n // needed in order to know whether we have left focus or not.\n //\n // For reference, this issue is further described here:\n // - https://github.com/facebook/react/issues/6410\n this.removeDayPickerFocusOut = (0, _consolidatedEvents.addEventListener)(this.dayPickerContainer, 'focusout', this.onDayPickerFocusOut);\n };\n\n _proto.removeDayPickerEventListeners = function removeDayPickerEventListeners() {\n if (this.removeDayPickerFocusOut) this.removeDayPickerFocusOut();\n };\n\n _proto.isOpened = function isOpened() {\n var focusedInput = this.props.focusedInput;\n return focusedInput === _constants.START_DATE || focusedInput === _constants.END_DATE;\n };\n\n _proto.disableScroll = function disableScroll() {\n var _this$props4 = this.props,\n appendToBody = _this$props4.appendToBody,\n propDisableScroll = _this$props4.disableScroll;\n if (!appendToBody && !propDisableScroll) return;\n if (!this.isOpened()) return; // Disable scroll for every ancestor of this DateRangePicker up to the\n // document level. This ensures the input and the picker never move. Other\n // sibling elements or the picker itself can scroll.\n\n this.enableScroll = (0, _disableScroll2[\"default\"])(this.container);\n };\n\n _proto.responsivizePickerPosition = function responsivizePickerPosition() {\n // It's possible the portal props have been changed in response to window resizes\n // So let's ensure we reset this back to the base state each time\n var dayPickerContainerStyles = this.state.dayPickerContainerStyles;\n\n if (Object.keys(dayPickerContainerStyles).length > 0) {\n this.setState({\n dayPickerContainerStyles: {}\n });\n }\n\n if (!this.isOpened()) {\n return;\n }\n\n var _this$props5 = this.props,\n openDirection = _this$props5.openDirection,\n anchorDirection = _this$props5.anchorDirection,\n horizontalMargin = _this$props5.horizontalMargin,\n withPortal = _this$props5.withPortal,\n withFullScreenPortal = _this$props5.withFullScreenPortal,\n appendToBody = _this$props5.appendToBody;\n var isAnchoredLeft = anchorDirection === _constants.ANCHOR_LEFT;\n\n if (!withPortal && !withFullScreenPortal) {\n var containerRect = this.dayPickerContainer.getBoundingClientRect();\n var currentOffset = dayPickerContainerStyles[anchorDirection] || 0;\n var containerEdge = isAnchoredLeft ? containerRect[_constants.ANCHOR_RIGHT] : containerRect[_constants.ANCHOR_LEFT];\n this.setState({\n dayPickerContainerStyles: _objectSpread({}, (0, _getResponsiveContainerStyles[\"default\"])(anchorDirection, currentOffset, containerEdge, horizontalMargin), {}, appendToBody && (0, _getDetachedContainerStyles[\"default\"])(openDirection, anchorDirection, this.container))\n });\n }\n };\n\n _proto.showKeyboardShortcutsPanel = function showKeyboardShortcutsPanel() {\n this.setState({\n isDateRangePickerInputFocused: false,\n isDayPickerFocused: true,\n showKeyboardShortcuts: true\n });\n };\n\n _proto.maybeRenderDayPickerWithPortal = function maybeRenderDayPickerWithPortal() {\n var _this$props6 = this.props,\n withPortal = _this$props6.withPortal,\n withFullScreenPortal = _this$props6.withFullScreenPortal,\n appendToBody = _this$props6.appendToBody;\n\n if (!this.isOpened()) {\n return null;\n }\n\n if (withPortal || withFullScreenPortal || appendToBody) {\n return _react[\"default\"].createElement(_reactPortal.Portal, null, this.renderDayPicker());\n }\n\n return this.renderDayPicker();\n };\n\n _proto.renderDayPicker = function renderDayPicker() {\n var _this$props7 = this.props,\n anchorDirection = _this$props7.anchorDirection,\n openDirection = _this$props7.openDirection,\n isDayBlocked = _this$props7.isDayBlocked,\n isDayHighlighted = _this$props7.isDayHighlighted,\n isOutsideRange = _this$props7.isOutsideRange,\n numberOfMonths = _this$props7.numberOfMonths,\n orientation = _this$props7.orientation,\n monthFormat = _this$props7.monthFormat,\n renderMonthText = _this$props7.renderMonthText,\n renderWeekHeaderElement = _this$props7.renderWeekHeaderElement,\n dayPickerNavigationInlineStyles = _this$props7.dayPickerNavigationInlineStyles,\n navPosition = _this$props7.navPosition,\n navPrev = _this$props7.navPrev,\n navNext = _this$props7.navNext,\n renderNavPrevButton = _this$props7.renderNavPrevButton,\n renderNavNextButton = _this$props7.renderNavNextButton,\n onPrevMonthClick = _this$props7.onPrevMonthClick,\n onNextMonthClick = _this$props7.onNextMonthClick,\n onDatesChange = _this$props7.onDatesChange,\n onFocusChange = _this$props7.onFocusChange,\n withPortal = _this$props7.withPortal,\n withFullScreenPortal = _this$props7.withFullScreenPortal,\n daySize = _this$props7.daySize,\n enableOutsideDays = _this$props7.enableOutsideDays,\n focusedInput = _this$props7.focusedInput,\n startDate = _this$props7.startDate,\n startDateOffset = _this$props7.startDateOffset,\n endDate = _this$props7.endDate,\n endDateOffset = _this$props7.endDateOffset,\n minDate = _this$props7.minDate,\n maxDate = _this$props7.maxDate,\n minimumNights = _this$props7.minimumNights,\n keepOpenOnDateSelect = _this$props7.keepOpenOnDateSelect,\n renderCalendarDay = _this$props7.renderCalendarDay,\n renderDayContents = _this$props7.renderDayContents,\n renderCalendarInfo = _this$props7.renderCalendarInfo,\n renderMonthElement = _this$props7.renderMonthElement,\n calendarInfoPosition = _this$props7.calendarInfoPosition,\n firstDayOfWeek = _this$props7.firstDayOfWeek,\n initialVisibleMonth = _this$props7.initialVisibleMonth,\n hideKeyboardShortcutsPanel = _this$props7.hideKeyboardShortcutsPanel,\n customCloseIcon = _this$props7.customCloseIcon,\n onClose = _this$props7.onClose,\n phrases = _this$props7.phrases,\n dayAriaLabelFormat = _this$props7.dayAriaLabelFormat,\n isRTL = _this$props7.isRTL,\n weekDayFormat = _this$props7.weekDayFormat,\n styles = _this$props7.styles,\n verticalHeight = _this$props7.verticalHeight,\n transitionDuration = _this$props7.transitionDuration,\n verticalSpacing = _this$props7.verticalSpacing,\n horizontalMonthPadding = _this$props7.horizontalMonthPadding,\n small = _this$props7.small,\n disabled = _this$props7.disabled,\n reactDates = _this$props7.theme.reactDates;\n var _this$state = this.state,\n dayPickerContainerStyles = _this$state.dayPickerContainerStyles,\n isDayPickerFocused = _this$state.isDayPickerFocused,\n showKeyboardShortcuts = _this$state.showKeyboardShortcuts;\n var onOutsideClick = !withFullScreenPortal && withPortal ? this.onOutsideClick : undefined;\n\n var initialVisibleMonthThunk = initialVisibleMonth || function () {\n return startDate || endDate || (0, _moment[\"default\"])();\n };\n\n var closeIcon = customCloseIcon || _react[\"default\"].createElement(_CloseButton[\"default\"], (0, _reactWithStyles.css)(styles.DateRangePicker_closeButton_svg));\n\n var inputHeight = (0, _getInputHeight[\"default\"])(reactDates, small);\n var withAnyPortal = withPortal || withFullScreenPortal;\n /* eslint-disable jsx-a11y/no-static-element-interactions */\n\n /* eslint-disable jsx-a11y/click-events-have-key-events */\n\n return _react[\"default\"].createElement(\"div\", (0, _extends2[\"default\"])({\n ref: this.setDayPickerContainerRef\n }, (0, _reactWithStyles.css)(styles.DateRangePicker_picker, anchorDirection === _constants.ANCHOR_LEFT && styles.DateRangePicker_picker__directionLeft, anchorDirection === _constants.ANCHOR_RIGHT && styles.DateRangePicker_picker__directionRight, orientation === _constants.HORIZONTAL_ORIENTATION && styles.DateRangePicker_picker__horizontal, orientation === _constants.VERTICAL_ORIENTATION && styles.DateRangePicker_picker__vertical, !withAnyPortal && openDirection === _constants.OPEN_DOWN && {\n top: inputHeight + verticalSpacing\n }, !withAnyPortal && openDirection === _constants.OPEN_UP && {\n bottom: inputHeight + verticalSpacing\n }, withAnyPortal && styles.DateRangePicker_picker__portal, withFullScreenPortal && styles.DateRangePicker_picker__fullScreenPortal, isRTL && styles.DateRangePicker_picker__rtl, dayPickerContainerStyles), {\n onClick: onOutsideClick\n }), _react[\"default\"].createElement(_DayPickerRangeController[\"default\"], {\n orientation: orientation,\n enableOutsideDays: enableOutsideDays,\n numberOfMonths: numberOfMonths,\n onPrevMonthClick: onPrevMonthClick,\n onNextMonthClick: onNextMonthClick,\n onDatesChange: onDatesChange,\n onFocusChange: onFocusChange,\n onClose: onClose,\n focusedInput: focusedInput,\n startDate: startDate,\n startDateOffset: startDateOffset,\n endDate: endDate,\n endDateOffset: endDateOffset,\n minDate: minDate,\n maxDate: maxDate,\n monthFormat: monthFormat,\n renderMonthText: renderMonthText,\n renderWeekHeaderElement: renderWeekHeaderElement,\n withPortal: withAnyPortal,\n daySize: daySize,\n initialVisibleMonth: initialVisibleMonthThunk,\n hideKeyboardShortcutsPanel: hideKeyboardShortcutsPanel,\n dayPickerNavigationInlineStyles: dayPickerNavigationInlineStyles,\n navPosition: navPosition,\n navPrev: navPrev,\n navNext: navNext,\n renderNavPrevButton: renderNavPrevButton,\n renderNavNextButton: renderNavNextButton,\n minimumNights: minimumNights,\n isOutsideRange: isOutsideRange,\n isDayHighlighted: isDayHighlighted,\n isDayBlocked: isDayBlocked,\n keepOpenOnDateSelect: keepOpenOnDateSelect,\n renderCalendarDay: renderCalendarDay,\n renderDayContents: renderDayContents,\n renderCalendarInfo: renderCalendarInfo,\n renderMonthElement: renderMonthElement,\n calendarInfoPosition: calendarInfoPosition,\n isFocused: isDayPickerFocused,\n showKeyboardShortcuts: showKeyboardShortcuts,\n onBlur: this.onDayPickerBlur,\n phrases: phrases,\n dayAriaLabelFormat: dayAriaLabelFormat,\n isRTL: isRTL,\n firstDayOfWeek: firstDayOfWeek,\n weekDayFormat: weekDayFormat,\n verticalHeight: verticalHeight,\n transitionDuration: transitionDuration,\n disabled: disabled,\n horizontalMonthPadding: horizontalMonthPadding\n }), withFullScreenPortal && _react[\"default\"].createElement(\"button\", (0, _extends2[\"default\"])({}, (0, _reactWithStyles.css)(styles.DateRangePicker_closeButton), {\n type: \"button\",\n onClick: this.onOutsideClick,\n \"aria-label\": phrases.closeDatePicker\n }), closeIcon));\n /* eslint-enable jsx-a11y/no-static-element-interactions */\n\n /* eslint-enable jsx-a11y/click-events-have-key-events */\n };\n\n _proto.render = function render() {\n var _this$props8 = this.props,\n startDate = _this$props8.startDate,\n startDateId = _this$props8.startDateId,\n startDatePlaceholderText = _this$props8.startDatePlaceholderText,\n startDateAriaLabel = _this$props8.startDateAriaLabel,\n endDate = _this$props8.endDate,\n endDateId = _this$props8.endDateId,\n endDatePlaceholderText = _this$props8.endDatePlaceholderText,\n endDateAriaLabel = _this$props8.endDateAriaLabel,\n focusedInput = _this$props8.focusedInput,\n screenReaderInputMessage = _this$props8.screenReaderInputMessage,\n showClearDates = _this$props8.showClearDates,\n showDefaultInputIcon = _this$props8.showDefaultInputIcon,\n inputIconPosition = _this$props8.inputIconPosition,\n customInputIcon = _this$props8.customInputIcon,\n customArrowIcon = _this$props8.customArrowIcon,\n customCloseIcon = _this$props8.customCloseIcon,\n disabled = _this$props8.disabled,\n required = _this$props8.required,\n readOnly = _this$props8.readOnly,\n openDirection = _this$props8.openDirection,\n phrases = _this$props8.phrases,\n isOutsideRange = _this$props8.isOutsideRange,\n minimumNights = _this$props8.minimumNights,\n withPortal = _this$props8.withPortal,\n withFullScreenPortal = _this$props8.withFullScreenPortal,\n displayFormat = _this$props8.displayFormat,\n reopenPickerOnClearDates = _this$props8.reopenPickerOnClearDates,\n keepOpenOnDateSelect = _this$props8.keepOpenOnDateSelect,\n onDatesChange = _this$props8.onDatesChange,\n onClose = _this$props8.onClose,\n isRTL = _this$props8.isRTL,\n noBorder = _this$props8.noBorder,\n block = _this$props8.block,\n verticalSpacing = _this$props8.verticalSpacing,\n small = _this$props8.small,\n regular = _this$props8.regular,\n styles = _this$props8.styles;\n var isDateRangePickerInputFocused = this.state.isDateRangePickerInputFocused;\n var enableOutsideClick = !withPortal && !withFullScreenPortal;\n var hideFang = verticalSpacing < _constants.FANG_HEIGHT_PX;\n\n var input = _react[\"default\"].createElement(_DateRangePickerInputController[\"default\"], {\n startDate: startDate,\n startDateId: startDateId,\n startDatePlaceholderText: startDatePlaceholderText,\n isStartDateFocused: focusedInput === _constants.START_DATE,\n startDateAriaLabel: startDateAriaLabel,\n endDate: endDate,\n endDateId: endDateId,\n endDatePlaceholderText: endDatePlaceholderText,\n isEndDateFocused: focusedInput === _constants.END_DATE,\n endDateAriaLabel: endDateAriaLabel,\n displayFormat: displayFormat,\n showClearDates: showClearDates,\n showCaret: !withPortal && !withFullScreenPortal && !hideFang,\n showDefaultInputIcon: showDefaultInputIcon,\n inputIconPosition: inputIconPosition,\n customInputIcon: customInputIcon,\n customArrowIcon: customArrowIcon,\n customCloseIcon: customCloseIcon,\n disabled: disabled,\n required: required,\n readOnly: readOnly,\n openDirection: openDirection,\n reopenPickerOnClearDates: reopenPickerOnClearDates,\n keepOpenOnDateSelect: keepOpenOnDateSelect,\n isOutsideRange: isOutsideRange,\n minimumNights: minimumNights,\n withFullScreenPortal: withFullScreenPortal,\n onDatesChange: onDatesChange,\n onFocusChange: this.onDateRangePickerInputFocus,\n onKeyDownArrowDown: this.onDayPickerFocus,\n onKeyDownQuestionMark: this.showKeyboardShortcutsPanel,\n onClose: onClose,\n phrases: phrases,\n screenReaderMessage: screenReaderInputMessage,\n isFocused: isDateRangePickerInputFocused,\n isRTL: isRTL,\n noBorder: noBorder,\n block: block,\n small: small,\n regular: regular,\n verticalSpacing: verticalSpacing\n }, this.maybeRenderDayPickerWithPortal());\n\n return _react[\"default\"].createElement(\"div\", (0, _extends2[\"default\"])({\n ref: this.setContainerRef\n }, (0, _reactWithStyles.css)(styles.DateRangePicker, block && styles.DateRangePicker__block)), enableOutsideClick && _react[\"default\"].createElement(_reactOutsideClickHandler[\"default\"], {\n onOutsideClick: this.onOutsideClick\n }, input), enableOutsideClick || input);\n };\n\n return DateRangePicker;\n}(_react[\"default\"].PureComponent || _react[\"default\"].Component);\n\nexports.PureDateRangePicker = DateRangePicker;\nDateRangePicker.propTypes = process.env.NODE_ENV !== \"production\" ? propTypes : {};\nDateRangePicker.defaultProps = defaultProps;\n\nvar _default = (0, _reactWithStyles.withStyles)(function (_ref2) {\n var _ref2$reactDates = _ref2.reactDates,\n color = _ref2$reactDates.color,\n zIndex = _ref2$reactDates.zIndex;\n return {\n DateRangePicker: {\n position: 'relative',\n display: 'inline-block'\n },\n DateRangePicker__block: {\n display: 'block'\n },\n DateRangePicker_picker: {\n zIndex: zIndex + 1,\n backgroundColor: color.background,\n position: 'absolute'\n },\n DateRangePicker_picker__rtl: {\n direction: (0, _noflip[\"default\"])('rtl')\n },\n DateRangePicker_picker__directionLeft: {\n left: (0, _noflip[\"default\"])(0)\n },\n DateRangePicker_picker__directionRight: {\n right: (0, _noflip[\"default\"])(0)\n },\n DateRangePicker_picker__portal: {\n backgroundColor: 'rgba(0, 0, 0, 0.3)',\n position: 'fixed',\n top: 0,\n left: (0, _noflip[\"default\"])(0),\n height: '100%',\n width: '100%'\n },\n DateRangePicker_picker__fullScreenPortal: {\n backgroundColor: color.background\n },\n DateRangePicker_closeButton: {\n background: 'none',\n border: 0,\n color: 'inherit',\n font: 'inherit',\n lineHeight: 'normal',\n overflow: 'visible',\n cursor: 'pointer',\n position: 'absolute',\n top: 0,\n right: (0, _noflip[\"default\"])(0),\n padding: 15,\n zIndex: zIndex + 2,\n ':hover': {\n color: \"darken(\".concat(color.core.grayLighter, \", 10%)\"),\n textDecoration: 'none'\n },\n ':focus': {\n color: \"darken(\".concat(color.core.grayLighter, \", 10%)\"),\n textDecoration: 'none'\n }\n },\n DateRangePicker_closeButton_svg: {\n height: 15,\n width: 15,\n fill: color.core.grayLighter\n }\n };\n}, {\n pureComponent: typeof _react[\"default\"].PureComponent !== 'undefined'\n})(DateRangePicker);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _airbnbPropTypes = require(\"airbnb-prop-types\");\n\nvar _reactWithStyles = require(\"react-with-styles\");\n\nvar _defaultPhrases = require(\"../defaultPhrases\");\n\nvar _getPhrasePropTypes = _interopRequireDefault(require(\"../utils/getPhrasePropTypes\"));\n\nvar _noflip = _interopRequireDefault(require(\"../utils/noflip\"));\n\nvar _OpenDirectionShape = _interopRequireDefault(require(\"../shapes/OpenDirectionShape\"));\n\nvar _DateInput = _interopRequireDefault(require(\"./DateInput\"));\n\nvar _IconPositionShape = _interopRequireDefault(require(\"../shapes/IconPositionShape\"));\n\nvar _DisabledShape = _interopRequireDefault(require(\"../shapes/DisabledShape\"));\n\nvar _RightArrow = _interopRequireDefault(require(\"./RightArrow\"));\n\nvar _LeftArrow = _interopRequireDefault(require(\"./LeftArrow\"));\n\nvar _CloseButton = _interopRequireDefault(require(\"./CloseButton\"));\n\nvar _CalendarIcon = _interopRequireDefault(require(\"./CalendarIcon\"));\n\nvar _constants = require(\"../constants\");\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nvar propTypes = process.env.NODE_ENV !== \"production\" ? (0, _airbnbPropTypes.forbidExtraProps)(_objectSpread({}, _reactWithStyles.withStylesPropTypes, {\n children: _propTypes[\"default\"].node,\n startDateId: _propTypes[\"default\"].string,\n startDatePlaceholderText: _propTypes[\"default\"].string,\n startDateAriaLabel: _propTypes[\"default\"].string,\n screenReaderMessage: _propTypes[\"default\"].string,\n endDateId: _propTypes[\"default\"].string,\n endDatePlaceholderText: _propTypes[\"default\"].string,\n endDateAriaLabel: _propTypes[\"default\"].string,\n onStartDateFocus: _propTypes[\"default\"].func,\n onEndDateFocus: _propTypes[\"default\"].func,\n onStartDateChange: _propTypes[\"default\"].func,\n onEndDateChange: _propTypes[\"default\"].func,\n onStartDateShiftTab: _propTypes[\"default\"].func,\n onEndDateTab: _propTypes[\"default\"].func,\n onClearDates: _propTypes[\"default\"].func,\n onKeyDownArrowDown: _propTypes[\"default\"].func,\n onKeyDownQuestionMark: _propTypes[\"default\"].func,\n startDate: _propTypes[\"default\"].string,\n endDate: _propTypes[\"default\"].string,\n isStartDateFocused: _propTypes[\"default\"].bool,\n isEndDateFocused: _propTypes[\"default\"].bool,\n showClearDates: _propTypes[\"default\"].bool,\n disabled: _DisabledShape[\"default\"],\n required: _propTypes[\"default\"].bool,\n readOnly: _propTypes[\"default\"].bool,\n openDirection: _OpenDirectionShape[\"default\"],\n showCaret: _propTypes[\"default\"].bool,\n showDefaultInputIcon: _propTypes[\"default\"].bool,\n inputIconPosition: _IconPositionShape[\"default\"],\n customInputIcon: _propTypes[\"default\"].node,\n customArrowIcon: _propTypes[\"default\"].node,\n customCloseIcon: _propTypes[\"default\"].node,\n noBorder: _propTypes[\"default\"].bool,\n block: _propTypes[\"default\"].bool,\n small: _propTypes[\"default\"].bool,\n regular: _propTypes[\"default\"].bool,\n verticalSpacing: _airbnbPropTypes.nonNegativeInteger,\n // accessibility\n isFocused: _propTypes[\"default\"].bool,\n // describes actual DOM focus\n // i18n\n phrases: _propTypes[\"default\"].shape((0, _getPhrasePropTypes[\"default\"])(_defaultPhrases.DateRangePickerInputPhrases)),\n isRTL: _propTypes[\"default\"].bool\n})) : {};\nvar defaultProps = {\n children: null,\n startDateId: _constants.START_DATE,\n endDateId: _constants.END_DATE,\n startDatePlaceholderText: 'Start Date',\n endDatePlaceholderText: 'End Date',\n startDateAriaLabel: undefined,\n endDateAriaLabel: undefined,\n screenReaderMessage: '',\n onStartDateFocus: function onStartDateFocus() {},\n onEndDateFocus: function onEndDateFocus() {},\n onStartDateChange: function onStartDateChange() {},\n onEndDateChange: function onEndDateChange() {},\n onStartDateShiftTab: function onStartDateShiftTab() {},\n onEndDateTab: function onEndDateTab() {},\n onClearDates: function onClearDates() {},\n onKeyDownArrowDown: function onKeyDownArrowDown() {},\n onKeyDownQuestionMark: function onKeyDownQuestionMark() {},\n startDate: '',\n endDate: '',\n isStartDateFocused: false,\n isEndDateFocused: false,\n showClearDates: false,\n disabled: false,\n required: false,\n readOnly: false,\n openDirection: _constants.OPEN_DOWN,\n showCaret: false,\n showDefaultInputIcon: false,\n inputIconPosition: _constants.ICON_BEFORE_POSITION,\n customInputIcon: null,\n customArrowIcon: null,\n customCloseIcon: null,\n noBorder: false,\n block: false,\n small: false,\n regular: false,\n verticalSpacing: undefined,\n // accessibility\n isFocused: false,\n // i18n\n phrases: _defaultPhrases.DateRangePickerInputPhrases,\n isRTL: false\n};\n\nfunction DateRangePickerInput(_ref) {\n var children = _ref.children,\n startDate = _ref.startDate,\n startDateId = _ref.startDateId,\n startDatePlaceholderText = _ref.startDatePlaceholderText,\n screenReaderMessage = _ref.screenReaderMessage,\n isStartDateFocused = _ref.isStartDateFocused,\n onStartDateChange = _ref.onStartDateChange,\n onStartDateFocus = _ref.onStartDateFocus,\n onStartDateShiftTab = _ref.onStartDateShiftTab,\n startDateAriaLabel = _ref.startDateAriaLabel,\n endDate = _ref.endDate,\n endDateId = _ref.endDateId,\n endDatePlaceholderText = _ref.endDatePlaceholderText,\n isEndDateFocused = _ref.isEndDateFocused,\n onEndDateChange = _ref.onEndDateChange,\n onEndDateFocus = _ref.onEndDateFocus,\n onEndDateTab = _ref.onEndDateTab,\n endDateAriaLabel = _ref.endDateAriaLabel,\n onKeyDownArrowDown = _ref.onKeyDownArrowDown,\n onKeyDownQuestionMark = _ref.onKeyDownQuestionMark,\n onClearDates = _ref.onClearDates,\n showClearDates = _ref.showClearDates,\n disabled = _ref.disabled,\n required = _ref.required,\n readOnly = _ref.readOnly,\n showCaret = _ref.showCaret,\n openDirection = _ref.openDirection,\n showDefaultInputIcon = _ref.showDefaultInputIcon,\n inputIconPosition = _ref.inputIconPosition,\n customInputIcon = _ref.customInputIcon,\n customArrowIcon = _ref.customArrowIcon,\n customCloseIcon = _ref.customCloseIcon,\n isFocused = _ref.isFocused,\n phrases = _ref.phrases,\n isRTL = _ref.isRTL,\n noBorder = _ref.noBorder,\n block = _ref.block,\n verticalSpacing = _ref.verticalSpacing,\n small = _ref.small,\n regular = _ref.regular,\n styles = _ref.styles;\n\n var calendarIcon = customInputIcon || _react[\"default\"].createElement(_CalendarIcon[\"default\"], (0, _reactWithStyles.css)(styles.DateRangePickerInput_calendarIcon_svg));\n\n var arrowIcon = customArrowIcon || _react[\"default\"].createElement(_RightArrow[\"default\"], (0, _reactWithStyles.css)(styles.DateRangePickerInput_arrow_svg));\n\n if (isRTL) arrowIcon = _react[\"default\"].createElement(_LeftArrow[\"default\"], (0, _reactWithStyles.css)(styles.DateRangePickerInput_arrow_svg));\n if (small) arrowIcon = '-';\n\n var closeIcon = customCloseIcon || _react[\"default\"].createElement(_CloseButton[\"default\"], (0, _reactWithStyles.css)(styles.DateRangePickerInput_clearDates_svg, small && styles.DateRangePickerInput_clearDates_svg__small));\n\n var screenReaderStartDateText = screenReaderMessage || phrases.keyboardForwardNavigationInstructions;\n var screenReaderEndDateText = screenReaderMessage || phrases.keyboardBackwardNavigationInstructions;\n\n var inputIcon = (showDefaultInputIcon || customInputIcon !== null) && _react[\"default\"].createElement(\"button\", (0, _extends2[\"default\"])({}, (0, _reactWithStyles.css)(styles.DateRangePickerInput_calendarIcon), {\n type: \"button\",\n disabled: disabled,\n \"aria-label\": phrases.focusStartDate,\n onClick: onKeyDownArrowDown\n }), calendarIcon);\n\n var startDateDisabled = disabled === _constants.START_DATE || disabled === true;\n var endDateDisabled = disabled === _constants.END_DATE || disabled === true;\n return _react[\"default\"].createElement(\"div\", (0, _reactWithStyles.css)(styles.DateRangePickerInput, disabled && styles.DateRangePickerInput__disabled, isRTL && styles.DateRangePickerInput__rtl, !noBorder && styles.DateRangePickerInput__withBorder, block && styles.DateRangePickerInput__block, showClearDates && styles.DateRangePickerInput__showClearDates), inputIconPosition === _constants.ICON_BEFORE_POSITION && inputIcon, _react[\"default\"].createElement(_DateInput[\"default\"], {\n id: startDateId,\n placeholder: startDatePlaceholderText,\n ariaLabel: startDateAriaLabel,\n displayValue: startDate,\n screenReaderMessage: screenReaderStartDateText,\n focused: isStartDateFocused,\n isFocused: isFocused,\n disabled: startDateDisabled,\n required: required,\n readOnly: readOnly,\n showCaret: showCaret,\n openDirection: openDirection,\n onChange: onStartDateChange,\n onFocus: onStartDateFocus,\n onKeyDownShiftTab: onStartDateShiftTab,\n onKeyDownArrowDown: onKeyDownArrowDown,\n onKeyDownQuestionMark: onKeyDownQuestionMark,\n verticalSpacing: verticalSpacing,\n small: small,\n regular: regular\n }), children, _react[\"default\"].createElement(\"div\", (0, _extends2[\"default\"])({}, (0, _reactWithStyles.css)(styles.DateRangePickerInput_arrow), {\n \"aria-hidden\": \"true\",\n role: \"presentation\"\n }), arrowIcon), _react[\"default\"].createElement(_DateInput[\"default\"], {\n id: endDateId,\n placeholder: endDatePlaceholderText,\n ariaLabel: endDateAriaLabel,\n displayValue: endDate,\n screenReaderMessage: screenReaderEndDateText,\n focused: isEndDateFocused,\n isFocused: isFocused,\n disabled: endDateDisabled,\n required: required,\n readOnly: readOnly,\n showCaret: showCaret,\n openDirection: openDirection,\n onChange: onEndDateChange,\n onFocus: onEndDateFocus,\n onKeyDownArrowDown: onKeyDownArrowDown,\n onKeyDownQuestionMark: onKeyDownQuestionMark,\n onKeyDownTab: onEndDateTab,\n verticalSpacing: verticalSpacing,\n small: small,\n regular: regular\n }), showClearDates && _react[\"default\"].createElement(\"button\", (0, _extends2[\"default\"])({\n type: \"button\",\n \"aria-label\": phrases.clearDates\n }, (0, _reactWithStyles.css)(styles.DateRangePickerInput_clearDates, small && styles.DateRangePickerInput_clearDates__small, !customCloseIcon && styles.DateRangePickerInput_clearDates_default, !(startDate || endDate) && styles.DateRangePickerInput_clearDates__hide), {\n onClick: onClearDates,\n disabled: disabled\n }), closeIcon), inputIconPosition === _constants.ICON_AFTER_POSITION && inputIcon);\n}\n\nDateRangePickerInput.propTypes = process.env.NODE_ENV !== \"production\" ? propTypes : {};\nDateRangePickerInput.defaultProps = defaultProps;\n\nvar _default = (0, _reactWithStyles.withStyles)(function (_ref2) {\n var _ref2$reactDates = _ref2.reactDates,\n border = _ref2$reactDates.border,\n color = _ref2$reactDates.color,\n sizing = _ref2$reactDates.sizing;\n return {\n DateRangePickerInput: {\n backgroundColor: color.background,\n display: 'inline-block'\n },\n DateRangePickerInput__disabled: {\n background: color.disabled\n },\n DateRangePickerInput__withBorder: {\n borderColor: color.border,\n borderWidth: border.pickerInput.borderWidth,\n borderStyle: border.pickerInput.borderStyle,\n borderRadius: border.pickerInput.borderRadius\n },\n DateRangePickerInput__rtl: {\n direction: (0, _noflip[\"default\"])('rtl')\n },\n DateRangePickerInput__block: {\n display: 'block'\n },\n DateRangePickerInput__showClearDates: {\n paddingRight: 30 // TODO: should be noflip wrapped and handled by an isRTL prop\n\n },\n DateRangePickerInput_arrow: {\n display: 'inline-block',\n verticalAlign: 'middle',\n color: color.text\n },\n DateRangePickerInput_arrow_svg: {\n verticalAlign: 'middle',\n fill: color.text,\n height: sizing.arrowWidth,\n width: sizing.arrowWidth\n },\n DateRangePickerInput_clearDates: {\n background: 'none',\n border: 0,\n color: 'inherit',\n font: 'inherit',\n lineHeight: 'normal',\n overflow: 'visible',\n cursor: 'pointer',\n padding: 10,\n margin: '0 10px 0 5px',\n // TODO: should be noflip wrapped and handled by an isRTL prop\n position: 'absolute',\n right: 0,\n // TODO: should be noflip wrapped and handled by an isRTL prop\n top: '50%',\n transform: 'translateY(-50%)'\n },\n DateRangePickerInput_clearDates__small: {\n padding: 6\n },\n DateRangePickerInput_clearDates_default: {\n ':focus': {\n background: color.core.border,\n borderRadius: '50%'\n },\n ':hover': {\n background: color.core.border,\n borderRadius: '50%'\n }\n },\n DateRangePickerInput_clearDates__hide: {\n visibility: 'hidden'\n },\n DateRangePickerInput_clearDates_svg: {\n fill: color.core.grayLight,\n height: 12,\n width: 15,\n verticalAlign: 'middle'\n },\n DateRangePickerInput_clearDates_svg__small: {\n height: 9\n },\n DateRangePickerInput_calendarIcon: {\n background: 'none',\n border: 0,\n color: 'inherit',\n font: 'inherit',\n lineHeight: 'normal',\n overflow: 'visible',\n cursor: 'pointer',\n display: 'inline-block',\n verticalAlign: 'middle',\n padding: 10,\n margin: '0 5px 0 10px' // TODO: should be noflip wrapped and handled by an isRTL prop\n\n },\n DateRangePickerInput_calendarIcon_svg: {\n fill: color.core.grayLight,\n height: 15,\n width: 14,\n verticalAlign: 'middle'\n }\n };\n}, {\n pureComponent: typeof _react[\"default\"].PureComponent !== 'undefined'\n})(DateRangePickerInput);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _enzymeShallowEqual = _interopRequireDefault(require(\"enzyme-shallow-equal\"));\n\nvar _assertThisInitialized2 = _interopRequireDefault(require(\"@babel/runtime/helpers/assertThisInitialized\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _moment = _interopRequireDefault(require(\"moment\"));\n\nvar _reactMomentProptypes = _interopRequireDefault(require(\"react-moment-proptypes\"));\n\nvar _airbnbPropTypes = require(\"airbnb-prop-types\");\n\nvar _OpenDirectionShape = _interopRequireDefault(require(\"../shapes/OpenDirectionShape\"));\n\nvar _defaultPhrases = require(\"../defaultPhrases\");\n\nvar _getPhrasePropTypes = _interopRequireDefault(require(\"../utils/getPhrasePropTypes\"));\n\nvar _DateRangePickerInput = _interopRequireDefault(require(\"./DateRangePickerInput\"));\n\nvar _IconPositionShape = _interopRequireDefault(require(\"../shapes/IconPositionShape\"));\n\nvar _DisabledShape = _interopRequireDefault(require(\"../shapes/DisabledShape\"));\n\nvar _toMomentObject = _interopRequireDefault(require(\"../utils/toMomentObject\"));\n\nvar _toLocalizedDateString = _interopRequireDefault(require(\"../utils/toLocalizedDateString\"));\n\nvar _isInclusivelyAfterDay = _interopRequireDefault(require(\"../utils/isInclusivelyAfterDay\"));\n\nvar _isBeforeDay = _interopRequireDefault(require(\"../utils/isBeforeDay\"));\n\nvar _constants = require(\"../constants\");\n\nvar propTypes = process.env.NODE_ENV !== \"production\" ? (0, _airbnbPropTypes.forbidExtraProps)({\n children: _propTypes[\"default\"].node,\n startDate: _reactMomentProptypes[\"default\"].momentObj,\n startDateId: _propTypes[\"default\"].string,\n startDatePlaceholderText: _propTypes[\"default\"].string,\n isStartDateFocused: _propTypes[\"default\"].bool,\n startDateAriaLabel: _propTypes[\"default\"].string,\n endDate: _reactMomentProptypes[\"default\"].momentObj,\n endDateId: _propTypes[\"default\"].string,\n endDatePlaceholderText: _propTypes[\"default\"].string,\n isEndDateFocused: _propTypes[\"default\"].bool,\n endDateAriaLabel: _propTypes[\"default\"].string,\n screenReaderMessage: _propTypes[\"default\"].string,\n showClearDates: _propTypes[\"default\"].bool,\n showCaret: _propTypes[\"default\"].bool,\n showDefaultInputIcon: _propTypes[\"default\"].bool,\n inputIconPosition: _IconPositionShape[\"default\"],\n disabled: _DisabledShape[\"default\"],\n required: _propTypes[\"default\"].bool,\n readOnly: _propTypes[\"default\"].bool,\n openDirection: _OpenDirectionShape[\"default\"],\n noBorder: _propTypes[\"default\"].bool,\n block: _propTypes[\"default\"].bool,\n small: _propTypes[\"default\"].bool,\n regular: _propTypes[\"default\"].bool,\n verticalSpacing: _airbnbPropTypes.nonNegativeInteger,\n keepOpenOnDateSelect: _propTypes[\"default\"].bool,\n reopenPickerOnClearDates: _propTypes[\"default\"].bool,\n withFullScreenPortal: _propTypes[\"default\"].bool,\n minimumNights: _airbnbPropTypes.nonNegativeInteger,\n isOutsideRange: _propTypes[\"default\"].func,\n displayFormat: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].string, _propTypes[\"default\"].func]),\n onFocusChange: _propTypes[\"default\"].func,\n onClose: _propTypes[\"default\"].func,\n onDatesChange: _propTypes[\"default\"].func,\n onKeyDownArrowDown: _propTypes[\"default\"].func,\n onKeyDownQuestionMark: _propTypes[\"default\"].func,\n customInputIcon: _propTypes[\"default\"].node,\n customArrowIcon: _propTypes[\"default\"].node,\n customCloseIcon: _propTypes[\"default\"].node,\n // accessibility\n isFocused: _propTypes[\"default\"].bool,\n // i18n\n phrases: _propTypes[\"default\"].shape((0, _getPhrasePropTypes[\"default\"])(_defaultPhrases.DateRangePickerInputPhrases)),\n isRTL: _propTypes[\"default\"].bool\n}) : {};\nvar defaultProps = {\n children: null,\n startDate: null,\n startDateId: _constants.START_DATE,\n startDatePlaceholderText: 'Start Date',\n isStartDateFocused: false,\n startDateAriaLabel: undefined,\n endDate: null,\n endDateId: _constants.END_DATE,\n endDatePlaceholderText: 'End Date',\n isEndDateFocused: false,\n endDateAriaLabel: undefined,\n screenReaderMessage: '',\n showClearDates: false,\n showCaret: false,\n showDefaultInputIcon: false,\n inputIconPosition: _constants.ICON_BEFORE_POSITION,\n disabled: false,\n required: false,\n readOnly: false,\n openDirection: _constants.OPEN_DOWN,\n noBorder: false,\n block: false,\n small: false,\n regular: false,\n verticalSpacing: undefined,\n keepOpenOnDateSelect: false,\n reopenPickerOnClearDates: false,\n withFullScreenPortal: false,\n minimumNights: 1,\n isOutsideRange: function isOutsideRange(day) {\n return !(0, _isInclusivelyAfterDay[\"default\"])(day, (0, _moment[\"default\"])());\n },\n displayFormat: function displayFormat() {\n return _moment[\"default\"].localeData().longDateFormat('L');\n },\n onFocusChange: function onFocusChange() {},\n onClose: function onClose() {},\n onDatesChange: function onDatesChange() {},\n onKeyDownArrowDown: function onKeyDownArrowDown() {},\n onKeyDownQuestionMark: function onKeyDownQuestionMark() {},\n customInputIcon: null,\n customArrowIcon: null,\n customCloseIcon: null,\n // accessibility\n isFocused: false,\n // i18n\n phrases: _defaultPhrases.DateRangePickerInputPhrases,\n isRTL: false\n};\n\nvar DateRangePickerInputController =\n/*#__PURE__*/\nfunction (_ref) {\n (0, _inheritsLoose2[\"default\"])(DateRangePickerInputController, _ref);\n var _proto = DateRangePickerInputController.prototype;\n\n _proto[!_react[\"default\"].PureComponent && \"shouldComponentUpdate\"] = function (nextProps, nextState) {\n return !(0, _enzymeShallowEqual[\"default\"])(this.props, nextProps) || !(0, _enzymeShallowEqual[\"default\"])(this.state, nextState);\n };\n\n function DateRangePickerInputController(props) {\n var _this;\n\n _this = _ref.call(this, props) || this;\n _this.onClearFocus = _this.onClearFocus.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.onStartDateChange = _this.onStartDateChange.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.onStartDateFocus = _this.onStartDateFocus.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.onEndDateChange = _this.onEndDateChange.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.onEndDateFocus = _this.onEndDateFocus.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.clearDates = _this.clearDates.bind((0, _assertThisInitialized2[\"default\"])(_this));\n return _this;\n }\n\n _proto.onClearFocus = function onClearFocus() {\n var _this$props = this.props,\n onFocusChange = _this$props.onFocusChange,\n onClose = _this$props.onClose,\n startDate = _this$props.startDate,\n endDate = _this$props.endDate;\n onFocusChange(null);\n onClose({\n startDate: startDate,\n endDate: endDate\n });\n };\n\n _proto.onEndDateChange = function onEndDateChange(endDateString) {\n var _this$props2 = this.props,\n startDate = _this$props2.startDate,\n isOutsideRange = _this$props2.isOutsideRange,\n minimumNights = _this$props2.minimumNights,\n keepOpenOnDateSelect = _this$props2.keepOpenOnDateSelect,\n onDatesChange = _this$props2.onDatesChange;\n var endDate = (0, _toMomentObject[\"default\"])(endDateString, this.getDisplayFormat());\n var isEndDateValid = endDate && !isOutsideRange(endDate) && !(startDate && (0, _isBeforeDay[\"default\"])(endDate, startDate.clone().add(minimumNights, 'days')));\n\n if (isEndDateValid) {\n onDatesChange({\n startDate: startDate,\n endDate: endDate\n });\n if (!keepOpenOnDateSelect) this.onClearFocus();\n } else {\n onDatesChange({\n startDate: startDate,\n endDate: null\n });\n }\n };\n\n _proto.onEndDateFocus = function onEndDateFocus() {\n var _this$props3 = this.props,\n startDate = _this$props3.startDate,\n onFocusChange = _this$props3.onFocusChange,\n withFullScreenPortal = _this$props3.withFullScreenPortal,\n disabled = _this$props3.disabled;\n\n if (!startDate && withFullScreenPortal && (!disabled || disabled === _constants.END_DATE)) {\n // When the datepicker is full screen, we never want to focus the end date first\n // because there's no indication that that is the case once the datepicker is open and it\n // might confuse the user\n onFocusChange(_constants.START_DATE);\n } else if (!disabled || disabled === _constants.START_DATE) {\n onFocusChange(_constants.END_DATE);\n }\n };\n\n _proto.onStartDateChange = function onStartDateChange(startDateString) {\n var endDate = this.props.endDate;\n var _this$props4 = this.props,\n isOutsideRange = _this$props4.isOutsideRange,\n minimumNights = _this$props4.minimumNights,\n onDatesChange = _this$props4.onDatesChange,\n onFocusChange = _this$props4.onFocusChange,\n disabled = _this$props4.disabled;\n var startDate = (0, _toMomentObject[\"default\"])(startDateString, this.getDisplayFormat());\n var isEndDateBeforeStartDate = startDate && (0, _isBeforeDay[\"default\"])(endDate, startDate.clone().add(minimumNights, 'days'));\n var isStartDateValid = startDate && !isOutsideRange(startDate) && !(disabled === _constants.END_DATE && isEndDateBeforeStartDate);\n\n if (isStartDateValid) {\n if (isEndDateBeforeStartDate) {\n endDate = null;\n }\n\n onDatesChange({\n startDate: startDate,\n endDate: endDate\n });\n onFocusChange(_constants.END_DATE);\n } else {\n onDatesChange({\n startDate: null,\n endDate: endDate\n });\n }\n };\n\n _proto.onStartDateFocus = function onStartDateFocus() {\n var _this$props5 = this.props,\n disabled = _this$props5.disabled,\n onFocusChange = _this$props5.onFocusChange;\n\n if (!disabled || disabled === _constants.END_DATE) {\n onFocusChange(_constants.START_DATE);\n }\n };\n\n _proto.getDisplayFormat = function getDisplayFormat() {\n var displayFormat = this.props.displayFormat;\n return typeof displayFormat === 'string' ? displayFormat : displayFormat();\n };\n\n _proto.getDateString = function getDateString(date) {\n var displayFormat = this.getDisplayFormat();\n\n if (date && displayFormat) {\n return date && date.format(displayFormat);\n }\n\n return (0, _toLocalizedDateString[\"default\"])(date);\n };\n\n _proto.clearDates = function clearDates() {\n var _this$props6 = this.props,\n onDatesChange = _this$props6.onDatesChange,\n reopenPickerOnClearDates = _this$props6.reopenPickerOnClearDates,\n onFocusChange = _this$props6.onFocusChange;\n onDatesChange({\n startDate: null,\n endDate: null\n });\n\n if (reopenPickerOnClearDates) {\n onFocusChange(_constants.START_DATE);\n }\n };\n\n _proto.render = function render() {\n var _this$props7 = this.props,\n children = _this$props7.children,\n startDate = _this$props7.startDate,\n startDateId = _this$props7.startDateId,\n startDatePlaceholderText = _this$props7.startDatePlaceholderText,\n isStartDateFocused = _this$props7.isStartDateFocused,\n startDateAriaLabel = _this$props7.startDateAriaLabel,\n endDate = _this$props7.endDate,\n endDateId = _this$props7.endDateId,\n endDatePlaceholderText = _this$props7.endDatePlaceholderText,\n endDateAriaLabel = _this$props7.endDateAriaLabel,\n isEndDateFocused = _this$props7.isEndDateFocused,\n screenReaderMessage = _this$props7.screenReaderMessage,\n showClearDates = _this$props7.showClearDates,\n showCaret = _this$props7.showCaret,\n showDefaultInputIcon = _this$props7.showDefaultInputIcon,\n inputIconPosition = _this$props7.inputIconPosition,\n customInputIcon = _this$props7.customInputIcon,\n customArrowIcon = _this$props7.customArrowIcon,\n customCloseIcon = _this$props7.customCloseIcon,\n disabled = _this$props7.disabled,\n required = _this$props7.required,\n readOnly = _this$props7.readOnly,\n openDirection = _this$props7.openDirection,\n isFocused = _this$props7.isFocused,\n phrases = _this$props7.phrases,\n onKeyDownArrowDown = _this$props7.onKeyDownArrowDown,\n onKeyDownQuestionMark = _this$props7.onKeyDownQuestionMark,\n isRTL = _this$props7.isRTL,\n noBorder = _this$props7.noBorder,\n block = _this$props7.block,\n small = _this$props7.small,\n regular = _this$props7.regular,\n verticalSpacing = _this$props7.verticalSpacing;\n var startDateString = this.getDateString(startDate);\n var endDateString = this.getDateString(endDate);\n return _react[\"default\"].createElement(_DateRangePickerInput[\"default\"], {\n startDate: startDateString,\n startDateId: startDateId,\n startDatePlaceholderText: startDatePlaceholderText,\n isStartDateFocused: isStartDateFocused,\n startDateAriaLabel: startDateAriaLabel,\n endDate: endDateString,\n endDateId: endDateId,\n endDatePlaceholderText: endDatePlaceholderText,\n isEndDateFocused: isEndDateFocused,\n endDateAriaLabel: endDateAriaLabel,\n isFocused: isFocused,\n disabled: disabled,\n required: required,\n readOnly: readOnly,\n openDirection: openDirection,\n showCaret: showCaret,\n showDefaultInputIcon: showDefaultInputIcon,\n inputIconPosition: inputIconPosition,\n customInputIcon: customInputIcon,\n customArrowIcon: customArrowIcon,\n customCloseIcon: customCloseIcon,\n phrases: phrases,\n onStartDateChange: this.onStartDateChange,\n onStartDateFocus: this.onStartDateFocus,\n onStartDateShiftTab: this.onClearFocus,\n onEndDateChange: this.onEndDateChange,\n onEndDateFocus: this.onEndDateFocus,\n showClearDates: showClearDates,\n onClearDates: this.clearDates,\n screenReaderMessage: screenReaderMessage,\n onKeyDownArrowDown: onKeyDownArrowDown,\n onKeyDownQuestionMark: onKeyDownQuestionMark,\n isRTL: isRTL,\n noBorder: noBorder,\n block: block,\n small: small,\n regular: regular,\n verticalSpacing: verticalSpacing\n }, children);\n };\n\n return DateRangePickerInputController;\n}(_react[\"default\"].PureComponent || _react[\"default\"].Component);\n\nexports[\"default\"] = DateRangePickerInputController;\nDateRangePickerInputController.propTypes = process.env.NODE_ENV !== \"production\" ? propTypes : {};\nDateRangePickerInputController.defaultProps = defaultProps;","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = exports.PureDayPicker = exports.defaultProps = void 0;\n\nvar _enzymeShallowEqual = _interopRequireDefault(require(\"enzyme-shallow-equal\"));\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _toConsumableArray2 = _interopRequireDefault(require(\"@babel/runtime/helpers/toConsumableArray\"));\n\nvar _assertThisInitialized2 = _interopRequireDefault(require(\"@babel/runtime/helpers/assertThisInitialized\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _airbnbPropTypes = require(\"airbnb-prop-types\");\n\nvar _reactWithStyles = require(\"react-with-styles\");\n\nvar _moment = _interopRequireDefault(require(\"moment\"));\n\nvar _throttle = _interopRequireDefault(require(\"lodash/throttle\"));\n\nvar _isTouchDevice = _interopRequireDefault(require(\"is-touch-device\"));\n\nvar _reactOutsideClickHandler = _interopRequireDefault(require(\"react-outside-click-handler\"));\n\nvar _defaultPhrases = require(\"../defaultPhrases\");\n\nvar _getPhrasePropTypes = _interopRequireDefault(require(\"../utils/getPhrasePropTypes\"));\n\nvar _noflip = _interopRequireDefault(require(\"../utils/noflip\"));\n\nvar _CalendarMonthGrid = _interopRequireDefault(require(\"./CalendarMonthGrid\"));\n\nvar _DayPickerNavigation = _interopRequireDefault(require(\"./DayPickerNavigation\"));\n\nvar _DayPickerKeyboardShortcuts = _interopRequireWildcard(require(\"./DayPickerKeyboardShortcuts\"));\n\nvar _getNumberOfCalendarMonthWeeks = _interopRequireDefault(require(\"../utils/getNumberOfCalendarMonthWeeks\"));\n\nvar _getCalendarMonthWidth = _interopRequireDefault(require(\"../utils/getCalendarMonthWidth\"));\n\nvar _calculateDimension = _interopRequireDefault(require(\"../utils/calculateDimension\"));\n\nvar _getActiveElement = _interopRequireDefault(require(\"../utils/getActiveElement\"));\n\nvar _isDayVisible = _interopRequireDefault(require(\"../utils/isDayVisible\"));\n\nvar _isSameMonth = _interopRequireDefault(require(\"../utils/isSameMonth\"));\n\nvar _ModifiersShape = _interopRequireDefault(require(\"../shapes/ModifiersShape\"));\n\nvar _NavPositionShape = _interopRequireDefault(require(\"../shapes/NavPositionShape\"));\n\nvar _ScrollableOrientationShape = _interopRequireDefault(require(\"../shapes/ScrollableOrientationShape\"));\n\nvar _DayOfWeekShape = _interopRequireDefault(require(\"../shapes/DayOfWeekShape\"));\n\nvar _CalendarInfoPositionShape = _interopRequireDefault(require(\"../shapes/CalendarInfoPositionShape\"));\n\nvar _constants = require(\"../constants\");\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nvar MONTH_PADDING = 23;\nvar PREV_TRANSITION = 'prev';\nvar NEXT_TRANSITION = 'next';\nvar MONTH_SELECTION_TRANSITION = 'month_selection';\nvar YEAR_SELECTION_TRANSITION = 'year_selection';\nvar PREV_NAV = 'prev_nav';\nvar NEXT_NAV = 'next_nav';\nvar propTypes = process.env.NODE_ENV !== \"production\" ? (0, _airbnbPropTypes.forbidExtraProps)(_objectSpread({}, _reactWithStyles.withStylesPropTypes, {\n // calendar presentation props\n enableOutsideDays: _propTypes[\"default\"].bool,\n numberOfMonths: _propTypes[\"default\"].number,\n orientation: _ScrollableOrientationShape[\"default\"],\n withPortal: _propTypes[\"default\"].bool,\n onOutsideClick: _propTypes[\"default\"].func,\n hidden: _propTypes[\"default\"].bool,\n initialVisibleMonth: _propTypes[\"default\"].func,\n firstDayOfWeek: _DayOfWeekShape[\"default\"],\n renderCalendarInfo: _propTypes[\"default\"].func,\n calendarInfoPosition: _CalendarInfoPositionShape[\"default\"],\n hideKeyboardShortcutsPanel: _propTypes[\"default\"].bool,\n daySize: _airbnbPropTypes.nonNegativeInteger,\n isRTL: _propTypes[\"default\"].bool,\n verticalHeight: _airbnbPropTypes.nonNegativeInteger,\n noBorder: _propTypes[\"default\"].bool,\n transitionDuration: _airbnbPropTypes.nonNegativeInteger,\n verticalBorderSpacing: _airbnbPropTypes.nonNegativeInteger,\n horizontalMonthPadding: _airbnbPropTypes.nonNegativeInteger,\n renderKeyboardShortcutsButton: _propTypes[\"default\"].func,\n renderKeyboardShortcutsPanel: _propTypes[\"default\"].func,\n // navigation props\n dayPickerNavigationInlineStyles: _propTypes[\"default\"].object,\n disablePrev: _propTypes[\"default\"].bool,\n disableNext: _propTypes[\"default\"].bool,\n navPosition: _NavPositionShape[\"default\"],\n navPrev: _propTypes[\"default\"].node,\n navNext: _propTypes[\"default\"].node,\n renderNavPrevButton: _propTypes[\"default\"].func,\n renderNavNextButton: _propTypes[\"default\"].func,\n noNavButtons: _propTypes[\"default\"].bool,\n noNavNextButton: _propTypes[\"default\"].bool,\n noNavPrevButton: _propTypes[\"default\"].bool,\n onPrevMonthClick: _propTypes[\"default\"].func,\n onNextMonthClick: _propTypes[\"default\"].func,\n onMonthChange: _propTypes[\"default\"].func,\n onYearChange: _propTypes[\"default\"].func,\n onGetNextScrollableMonths: _propTypes[\"default\"].func,\n // VERTICAL_SCROLLABLE daypickers only\n onGetPrevScrollableMonths: _propTypes[\"default\"].func,\n // VERTICAL_SCROLLABLE daypickers only\n // month props\n renderMonthText: (0, _airbnbPropTypes.mutuallyExclusiveProps)(_propTypes[\"default\"].func, 'renderMonthText', 'renderMonthElement'),\n renderMonthElement: (0, _airbnbPropTypes.mutuallyExclusiveProps)(_propTypes[\"default\"].func, 'renderMonthText', 'renderMonthElement'),\n renderWeekHeaderElement: _propTypes[\"default\"].func,\n // day props\n modifiers: _propTypes[\"default\"].objectOf(_propTypes[\"default\"].objectOf(_ModifiersShape[\"default\"])),\n renderCalendarDay: _propTypes[\"default\"].func,\n renderDayContents: _propTypes[\"default\"].func,\n onDayClick: _propTypes[\"default\"].func,\n onDayMouseEnter: _propTypes[\"default\"].func,\n onDayMouseLeave: _propTypes[\"default\"].func,\n // accessibility props\n isFocused: _propTypes[\"default\"].bool,\n getFirstFocusableDay: _propTypes[\"default\"].func,\n onBlur: _propTypes[\"default\"].func,\n showKeyboardShortcuts: _propTypes[\"default\"].bool,\n onTab: _propTypes[\"default\"].func,\n onShiftTab: _propTypes[\"default\"].func,\n // internationalization\n monthFormat: _propTypes[\"default\"].string,\n weekDayFormat: _propTypes[\"default\"].string,\n phrases: _propTypes[\"default\"].shape((0, _getPhrasePropTypes[\"default\"])(_defaultPhrases.DayPickerPhrases)),\n dayAriaLabelFormat: _propTypes[\"default\"].string\n})) : {};\nvar defaultProps = {\n // calendar presentation props\n enableOutsideDays: false,\n numberOfMonths: 2,\n orientation: _constants.HORIZONTAL_ORIENTATION,\n withPortal: false,\n onOutsideClick: function onOutsideClick() {},\n hidden: false,\n initialVisibleMonth: function initialVisibleMonth() {\n return (0, _moment[\"default\"])();\n },\n firstDayOfWeek: null,\n renderCalendarInfo: null,\n calendarInfoPosition: _constants.INFO_POSITION_BOTTOM,\n hideKeyboardShortcutsPanel: false,\n daySize: _constants.DAY_SIZE,\n isRTL: false,\n verticalHeight: null,\n noBorder: false,\n transitionDuration: undefined,\n verticalBorderSpacing: undefined,\n horizontalMonthPadding: 13,\n renderKeyboardShortcutsButton: undefined,\n renderKeyboardShortcutsPanel: undefined,\n // navigation props\n dayPickerNavigationInlineStyles: null,\n disablePrev: false,\n disableNext: false,\n navPosition: _constants.NAV_POSITION_TOP,\n navPrev: null,\n navNext: null,\n renderNavPrevButton: null,\n renderNavNextButton: null,\n noNavButtons: false,\n noNavNextButton: false,\n noNavPrevButton: false,\n onPrevMonthClick: function onPrevMonthClick() {},\n onNextMonthClick: function onNextMonthClick() {},\n onMonthChange: function onMonthChange() {},\n onYearChange: function onYearChange() {},\n onGetNextScrollableMonths: function onGetNextScrollableMonths() {},\n onGetPrevScrollableMonths: function onGetPrevScrollableMonths() {},\n // month props\n renderMonthText: null,\n renderMonthElement: null,\n renderWeekHeaderElement: null,\n // day props\n modifiers: {},\n renderCalendarDay: undefined,\n renderDayContents: null,\n onDayClick: function onDayClick() {},\n onDayMouseEnter: function onDayMouseEnter() {},\n onDayMouseLeave: function onDayMouseLeave() {},\n // accessibility props\n isFocused: false,\n getFirstFocusableDay: null,\n onBlur: function onBlur() {},\n showKeyboardShortcuts: false,\n onTab: function onTab() {},\n onShiftTab: function onShiftTab() {},\n // internationalization\n monthFormat: 'MMMM YYYY',\n weekDayFormat: 'dd',\n phrases: _defaultPhrases.DayPickerPhrases,\n dayAriaLabelFormat: undefined\n};\nexports.defaultProps = defaultProps;\n\nvar DayPicker =\n/*#__PURE__*/\nfunction (_ref) {\n (0, _inheritsLoose2[\"default\"])(DayPicker, _ref);\n var _proto = DayPicker.prototype;\n\n _proto[!_react[\"default\"].PureComponent && \"shouldComponentUpdate\"] = function (nextProps, nextState) {\n return !(0, _enzymeShallowEqual[\"default\"])(this.props, nextProps) || !(0, _enzymeShallowEqual[\"default\"])(this.state, nextState);\n };\n\n function DayPicker(props) {\n var _this;\n\n _this = _ref.call(this, props) || this;\n var currentMonth = props.hidden ? (0, _moment[\"default\"])() : props.initialVisibleMonth();\n var focusedDate = currentMonth.clone().startOf('month');\n\n if (props.getFirstFocusableDay) {\n focusedDate = props.getFirstFocusableDay(currentMonth);\n }\n\n var horizontalMonthPadding = props.horizontalMonthPadding;\n var translationValue = props.isRTL && _this.isHorizontal() ? -(0, _getCalendarMonthWidth[\"default\"])(props.daySize, horizontalMonthPadding) : 0;\n _this.hasSetInitialVisibleMonth = !props.hidden;\n _this.state = {\n currentMonthScrollTop: null,\n currentMonth: currentMonth,\n monthTransition: null,\n translationValue: translationValue,\n scrollableMonthMultiple: 1,\n calendarMonthWidth: (0, _getCalendarMonthWidth[\"default\"])(props.daySize, horizontalMonthPadding),\n focusedDate: !props.hidden || props.isFocused ? focusedDate : null,\n nextFocusedDate: null,\n showKeyboardShortcuts: props.showKeyboardShortcuts,\n onKeyboardShortcutsPanelClose: function onKeyboardShortcutsPanelClose() {},\n isTouchDevice: (0, _isTouchDevice[\"default\"])(),\n withMouseInteractions: true,\n calendarInfoWidth: 0,\n monthTitleHeight: null,\n hasSetHeight: false\n };\n\n _this.setCalendarMonthWeeks(currentMonth);\n\n _this.calendarMonthGridHeight = 0;\n _this.setCalendarInfoWidthTimeout = null;\n _this.setCalendarMonthGridHeightTimeout = null;\n _this.onKeyDown = _this.onKeyDown.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.throttledKeyDown = (0, _throttle[\"default\"])(_this.onFinalKeyDown, 200, {\n trailing: false\n });\n _this.onPrevMonthClick = _this.onPrevMonthClick.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.onPrevMonthTransition = _this.onPrevMonthTransition.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.onNextMonthClick = _this.onNextMonthClick.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.onNextMonthTransition = _this.onNextMonthTransition.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.onMonthChange = _this.onMonthChange.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.onYearChange = _this.onYearChange.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.getNextScrollableMonths = _this.getNextScrollableMonths.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.getPrevScrollableMonths = _this.getPrevScrollableMonths.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.updateStateAfterMonthTransition = _this.updateStateAfterMonthTransition.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.openKeyboardShortcutsPanel = _this.openKeyboardShortcutsPanel.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.closeKeyboardShortcutsPanel = _this.closeKeyboardShortcutsPanel.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.setCalendarInfoRef = _this.setCalendarInfoRef.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.setContainerRef = _this.setContainerRef.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.setTransitionContainerRef = _this.setTransitionContainerRef.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.setMonthTitleHeight = _this.setMonthTitleHeight.bind((0, _assertThisInitialized2[\"default\"])(_this));\n return _this;\n }\n\n _proto.componentDidMount = function componentDidMount() {\n var orientation = this.props.orientation;\n var currentMonth = this.state.currentMonth;\n var calendarInfoWidth = this.calendarInfo ? (0, _calculateDimension[\"default\"])(this.calendarInfo, 'width', true, true) : 0;\n var currentMonthScrollTop = this.transitionContainer && orientation === _constants.VERTICAL_SCROLLABLE ? this.transitionContainer.scrollHeight - this.transitionContainer.scrollTop : null;\n this.setState({\n isTouchDevice: (0, _isTouchDevice[\"default\"])(),\n calendarInfoWidth: calendarInfoWidth,\n currentMonthScrollTop: currentMonthScrollTop\n });\n this.setCalendarMonthWeeks(currentMonth);\n };\n\n _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps, nextState) {\n var hidden = nextProps.hidden,\n isFocused = nextProps.isFocused,\n showKeyboardShortcuts = nextProps.showKeyboardShortcuts,\n onBlur = nextProps.onBlur,\n orientation = nextProps.orientation,\n renderMonthText = nextProps.renderMonthText,\n horizontalMonthPadding = nextProps.horizontalMonthPadding;\n var currentMonth = this.state.currentMonth;\n var nextCurrentMonth = nextState.currentMonth;\n\n if (!hidden) {\n if (!this.hasSetInitialVisibleMonth) {\n this.hasSetInitialVisibleMonth = true;\n this.setState({\n currentMonth: nextProps.initialVisibleMonth()\n });\n }\n }\n\n var _this$props = this.props,\n daySize = _this$props.daySize,\n prevIsFocused = _this$props.isFocused,\n prevRenderMonthText = _this$props.renderMonthText;\n\n if (nextProps.daySize !== daySize) {\n this.setState({\n calendarMonthWidth: (0, _getCalendarMonthWidth[\"default\"])(nextProps.daySize, horizontalMonthPadding)\n });\n }\n\n if (isFocused !== prevIsFocused) {\n if (isFocused) {\n var focusedDate = this.getFocusedDay(currentMonth);\n var onKeyboardShortcutsPanelClose = this.state.onKeyboardShortcutsPanelClose;\n\n if (nextProps.showKeyboardShortcuts) {\n // the ? shortcut came from the input and we should return input there once it is close\n onKeyboardShortcutsPanelClose = onBlur;\n }\n\n this.setState({\n showKeyboardShortcuts: showKeyboardShortcuts,\n onKeyboardShortcutsPanelClose: onKeyboardShortcutsPanelClose,\n focusedDate: focusedDate,\n withMouseInteractions: false\n });\n } else {\n this.setState({\n focusedDate: null\n });\n }\n }\n\n if (renderMonthText !== prevRenderMonthText) {\n this.setState({\n monthTitleHeight: null\n });\n } // Capture the scroll position so when previous months are rendered above the current month\n // we can adjust scroll after the component has updated and the previous current month\n // stays in view.\n\n\n if (orientation === _constants.VERTICAL_SCROLLABLE && this.transitionContainer && !(0, _isSameMonth[\"default\"])(currentMonth, nextCurrentMonth)) {\n this.setState({\n currentMonthScrollTop: this.transitionContainer.scrollHeight - this.transitionContainer.scrollTop\n });\n }\n };\n\n _proto.componentWillUpdate = function componentWillUpdate() {\n var _this2 = this;\n\n var transitionDuration = this.props.transitionDuration; // Calculating the dimensions trigger a DOM repaint which\n // breaks the CSS transition.\n // The setTimeout will wait until the transition ends.\n\n if (this.calendarInfo) {\n this.setCalendarInfoWidthTimeout = setTimeout(function () {\n var calendarInfoWidth = _this2.state.calendarInfoWidth;\n var calendarInfoPanelWidth = (0, _calculateDimension[\"default\"])(_this2.calendarInfo, 'width', true, true);\n\n if (calendarInfoWidth !== calendarInfoPanelWidth) {\n _this2.setState({\n calendarInfoWidth: calendarInfoPanelWidth\n });\n }\n }, transitionDuration);\n }\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n var _this$props2 = this.props,\n orientation = _this$props2.orientation,\n daySize = _this$props2.daySize,\n isFocused = _this$props2.isFocused,\n numberOfMonths = _this$props2.numberOfMonths;\n var _this$state = this.state,\n currentMonth = _this$state.currentMonth,\n currentMonthScrollTop = _this$state.currentMonthScrollTop,\n focusedDate = _this$state.focusedDate,\n monthTitleHeight = _this$state.monthTitleHeight;\n\n if (this.isHorizontal() && (orientation !== prevProps.orientation || daySize !== prevProps.daySize)) {\n var visibleCalendarWeeks = this.calendarMonthWeeks.slice(1, numberOfMonths + 1);\n var calendarMonthWeeksHeight = Math.max.apply(Math, [0].concat((0, _toConsumableArray2[\"default\"])(visibleCalendarWeeks))) * (daySize - 1);\n var newMonthHeight = monthTitleHeight + calendarMonthWeeksHeight + 1;\n this.adjustDayPickerHeight(newMonthHeight);\n }\n\n if (!prevProps.isFocused && isFocused && !focusedDate) {\n this.container.focus();\n } // If orientation is VERTICAL_SCROLLABLE and currentMonth has changed adjust scrollTop so the\n // new months rendered above the current month don't push the current month out of view.\n\n\n if (orientation === _constants.VERTICAL_SCROLLABLE && !(0, _isSameMonth[\"default\"])(prevState.currentMonth, currentMonth) && currentMonthScrollTop && this.transitionContainer) {\n this.transitionContainer.scrollTop = this.transitionContainer.scrollHeight - currentMonthScrollTop;\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n clearTimeout(this.setCalendarInfoWidthTimeout);\n clearTimeout(this.setCalendarMonthGridHeightTimeout);\n };\n\n _proto.onKeyDown = function onKeyDown(e) {\n e.stopPropagation();\n\n if (!_constants.MODIFIER_KEY_NAMES.has(e.key)) {\n this.throttledKeyDown(e);\n }\n };\n\n _proto.onFinalKeyDown = function onFinalKeyDown(e) {\n this.setState({\n withMouseInteractions: false\n });\n var _this$props3 = this.props,\n onBlur = _this$props3.onBlur,\n onTab = _this$props3.onTab,\n onShiftTab = _this$props3.onShiftTab,\n isRTL = _this$props3.isRTL;\n var _this$state2 = this.state,\n focusedDate = _this$state2.focusedDate,\n showKeyboardShortcuts = _this$state2.showKeyboardShortcuts;\n if (!focusedDate) return;\n var newFocusedDate = focusedDate.clone();\n var didTransitionMonth = false; // focus might be anywhere when the keyboard shortcuts panel is opened so we want to\n // return it to wherever it was before when the panel was opened\n\n var activeElement = (0, _getActiveElement[\"default\"])();\n\n var onKeyboardShortcutsPanelClose = function onKeyboardShortcutsPanelClose() {\n if (activeElement) activeElement.focus();\n };\n\n switch (e.key) {\n case 'ArrowUp':\n e.preventDefault();\n newFocusedDate.subtract(1, 'week');\n didTransitionMonth = this.maybeTransitionPrevMonth(newFocusedDate);\n break;\n\n case 'ArrowLeft':\n e.preventDefault();\n\n if (isRTL) {\n newFocusedDate.add(1, 'day');\n } else {\n newFocusedDate.subtract(1, 'day');\n }\n\n didTransitionMonth = this.maybeTransitionPrevMonth(newFocusedDate);\n break;\n\n case 'Home':\n e.preventDefault();\n newFocusedDate.startOf('week');\n didTransitionMonth = this.maybeTransitionPrevMonth(newFocusedDate);\n break;\n\n case 'PageUp':\n e.preventDefault();\n newFocusedDate.subtract(1, 'month');\n didTransitionMonth = this.maybeTransitionPrevMonth(newFocusedDate);\n break;\n\n case 'ArrowDown':\n e.preventDefault();\n newFocusedDate.add(1, 'week');\n didTransitionMonth = this.maybeTransitionNextMonth(newFocusedDate);\n break;\n\n case 'ArrowRight':\n e.preventDefault();\n\n if (isRTL) {\n newFocusedDate.subtract(1, 'day');\n } else {\n newFocusedDate.add(1, 'day');\n }\n\n didTransitionMonth = this.maybeTransitionNextMonth(newFocusedDate);\n break;\n\n case 'End':\n e.preventDefault();\n newFocusedDate.endOf('week');\n didTransitionMonth = this.maybeTransitionNextMonth(newFocusedDate);\n break;\n\n case 'PageDown':\n e.preventDefault();\n newFocusedDate.add(1, 'month');\n didTransitionMonth = this.maybeTransitionNextMonth(newFocusedDate);\n break;\n\n case '?':\n this.openKeyboardShortcutsPanel(onKeyboardShortcutsPanelClose);\n break;\n\n case 'Escape':\n if (showKeyboardShortcuts) {\n this.closeKeyboardShortcutsPanel();\n } else {\n onBlur(e);\n }\n\n break;\n\n case 'Tab':\n if (e.shiftKey) {\n onShiftTab();\n } else {\n onTab(e);\n }\n\n break;\n\n default:\n break;\n } // If there was a month transition, do not update the focused date until the transition has\n // completed. Otherwise, attempting to focus on a DOM node may interrupt the CSS animation. If\n // didTransitionMonth is true, the focusedDate gets updated in #updateStateAfterMonthTransition\n\n\n if (!didTransitionMonth) {\n this.setState({\n focusedDate: newFocusedDate\n });\n }\n };\n\n _proto.onPrevMonthClick = function onPrevMonthClick(e) {\n if (e) e.preventDefault();\n this.onPrevMonthTransition();\n };\n\n _proto.onPrevMonthTransition = function onPrevMonthTransition(nextFocusedDate) {\n var _this$props4 = this.props,\n daySize = _this$props4.daySize,\n isRTL = _this$props4.isRTL,\n numberOfMonths = _this$props4.numberOfMonths;\n var _this$state3 = this.state,\n calendarMonthWidth = _this$state3.calendarMonthWidth,\n monthTitleHeight = _this$state3.monthTitleHeight;\n var translationValue;\n\n if (this.isVertical()) {\n var calendarMonthWeeksHeight = this.calendarMonthWeeks[0] * (daySize - 1);\n translationValue = monthTitleHeight + calendarMonthWeeksHeight + 1;\n } else if (this.isHorizontal()) {\n translationValue = calendarMonthWidth;\n\n if (isRTL) {\n translationValue = -2 * calendarMonthWidth;\n }\n\n var visibleCalendarWeeks = this.calendarMonthWeeks.slice(0, numberOfMonths);\n\n var _calendarMonthWeeksHeight = Math.max.apply(Math, [0].concat((0, _toConsumableArray2[\"default\"])(visibleCalendarWeeks))) * (daySize - 1);\n\n var newMonthHeight = monthTitleHeight + _calendarMonthWeeksHeight + 1;\n this.adjustDayPickerHeight(newMonthHeight);\n }\n\n this.setState({\n monthTransition: PREV_TRANSITION,\n translationValue: translationValue,\n focusedDate: null,\n nextFocusedDate: nextFocusedDate\n });\n };\n\n _proto.onMonthChange = function onMonthChange(currentMonth) {\n this.setCalendarMonthWeeks(currentMonth);\n this.calculateAndSetDayPickerHeight(); // Translation value is a hack to force an invisible transition that\n // properly rerenders the CalendarMonthGrid\n\n this.setState({\n monthTransition: MONTH_SELECTION_TRANSITION,\n translationValue: 0.00001,\n focusedDate: null,\n nextFocusedDate: currentMonth,\n currentMonth: currentMonth\n });\n };\n\n _proto.onYearChange = function onYearChange(currentMonth) {\n this.setCalendarMonthWeeks(currentMonth);\n this.calculateAndSetDayPickerHeight(); // Translation value is a hack to force an invisible transition that\n // properly rerenders the CalendarMonthGrid\n\n this.setState({\n monthTransition: YEAR_SELECTION_TRANSITION,\n translationValue: 0.0001,\n focusedDate: null,\n nextFocusedDate: currentMonth,\n currentMonth: currentMonth\n });\n };\n\n _proto.onNextMonthClick = function onNextMonthClick(e) {\n if (e) e.preventDefault();\n this.onNextMonthTransition();\n };\n\n _proto.onNextMonthTransition = function onNextMonthTransition(nextFocusedDate) {\n var _this$props5 = this.props,\n isRTL = _this$props5.isRTL,\n numberOfMonths = _this$props5.numberOfMonths,\n daySize = _this$props5.daySize;\n var _this$state4 = this.state,\n calendarMonthWidth = _this$state4.calendarMonthWidth,\n monthTitleHeight = _this$state4.monthTitleHeight;\n var translationValue;\n\n if (this.isVertical()) {\n var firstVisibleMonthWeeks = this.calendarMonthWeeks[1];\n var calendarMonthWeeksHeight = firstVisibleMonthWeeks * (daySize - 1);\n translationValue = -(monthTitleHeight + calendarMonthWeeksHeight + 1);\n }\n\n if (this.isHorizontal()) {\n translationValue = -calendarMonthWidth;\n\n if (isRTL) {\n translationValue = 0;\n }\n\n var visibleCalendarWeeks = this.calendarMonthWeeks.slice(2, numberOfMonths + 2);\n\n var _calendarMonthWeeksHeight2 = Math.max.apply(Math, [0].concat((0, _toConsumableArray2[\"default\"])(visibleCalendarWeeks))) * (daySize - 1);\n\n var newMonthHeight = monthTitleHeight + _calendarMonthWeeksHeight2 + 1;\n this.adjustDayPickerHeight(newMonthHeight);\n }\n\n this.setState({\n monthTransition: NEXT_TRANSITION,\n translationValue: translationValue,\n focusedDate: null,\n nextFocusedDate: nextFocusedDate\n });\n };\n\n _proto.getFirstDayOfWeek = function getFirstDayOfWeek() {\n var firstDayOfWeek = this.props.firstDayOfWeek;\n\n if (firstDayOfWeek == null) {\n return _moment[\"default\"].localeData().firstDayOfWeek();\n }\n\n return firstDayOfWeek;\n };\n\n _proto.getWeekHeaders = function getWeekHeaders() {\n var weekDayFormat = this.props.weekDayFormat;\n var currentMonth = this.state.currentMonth;\n var firstDayOfWeek = this.getFirstDayOfWeek();\n var weekHeaders = [];\n\n for (var i = 0; i < 7; i += 1) {\n weekHeaders.push(currentMonth.clone().day((i + firstDayOfWeek) % 7).format(weekDayFormat));\n }\n\n return weekHeaders;\n };\n\n _proto.getFirstVisibleIndex = function getFirstVisibleIndex() {\n var orientation = this.props.orientation;\n var monthTransition = this.state.monthTransition;\n if (orientation === _constants.VERTICAL_SCROLLABLE) return 0;\n var firstVisibleMonthIndex = 1;\n\n if (monthTransition === PREV_TRANSITION) {\n firstVisibleMonthIndex -= 1;\n } else if (monthTransition === NEXT_TRANSITION) {\n firstVisibleMonthIndex += 1;\n }\n\n return firstVisibleMonthIndex;\n };\n\n _proto.getFocusedDay = function getFocusedDay(newMonth) {\n var _this$props6 = this.props,\n getFirstFocusableDay = _this$props6.getFirstFocusableDay,\n numberOfMonths = _this$props6.numberOfMonths;\n var focusedDate;\n\n if (getFirstFocusableDay) {\n focusedDate = getFirstFocusableDay(newMonth);\n }\n\n if (newMonth && (!focusedDate || !(0, _isDayVisible[\"default\"])(focusedDate, newMonth, numberOfMonths))) {\n focusedDate = newMonth.clone().startOf('month');\n }\n\n return focusedDate;\n };\n\n _proto.setMonthTitleHeight = function setMonthTitleHeight(monthTitleHeight) {\n var _this3 = this;\n\n this.setState({\n monthTitleHeight: monthTitleHeight\n }, function () {\n _this3.calculateAndSetDayPickerHeight();\n });\n };\n\n _proto.setCalendarMonthWeeks = function setCalendarMonthWeeks(currentMonth) {\n var numberOfMonths = this.props.numberOfMonths;\n this.calendarMonthWeeks = [];\n var month = currentMonth.clone().subtract(1, 'months');\n var firstDayOfWeek = this.getFirstDayOfWeek();\n\n for (var i = 0; i < numberOfMonths + 2; i += 1) {\n var numberOfWeeks = (0, _getNumberOfCalendarMonthWeeks[\"default\"])(month, firstDayOfWeek);\n this.calendarMonthWeeks.push(numberOfWeeks);\n month = month.add(1, 'months');\n }\n };\n\n _proto.setContainerRef = function setContainerRef(ref) {\n this.container = ref;\n };\n\n _proto.setCalendarInfoRef = function setCalendarInfoRef(ref) {\n this.calendarInfo = ref;\n };\n\n _proto.setTransitionContainerRef = function setTransitionContainerRef(ref) {\n this.transitionContainer = ref;\n };\n\n _proto.getNextScrollableMonths = function getNextScrollableMonths(e) {\n var onGetNextScrollableMonths = this.props.onGetNextScrollableMonths;\n if (e) e.preventDefault();\n if (onGetNextScrollableMonths) onGetNextScrollableMonths(e);\n this.setState(function (_ref2) {\n var scrollableMonthMultiple = _ref2.scrollableMonthMultiple;\n return {\n scrollableMonthMultiple: scrollableMonthMultiple + 1\n };\n });\n };\n\n _proto.getPrevScrollableMonths = function getPrevScrollableMonths(e) {\n var _this$props7 = this.props,\n numberOfMonths = _this$props7.numberOfMonths,\n onGetPrevScrollableMonths = _this$props7.onGetPrevScrollableMonths;\n if (e) e.preventDefault();\n if (onGetPrevScrollableMonths) onGetPrevScrollableMonths(e);\n this.setState(function (_ref3) {\n var currentMonth = _ref3.currentMonth,\n scrollableMonthMultiple = _ref3.scrollableMonthMultiple;\n return {\n currentMonth: currentMonth.clone().subtract(numberOfMonths, 'month'),\n scrollableMonthMultiple: scrollableMonthMultiple + 1\n };\n });\n };\n\n _proto.maybeTransitionNextMonth = function maybeTransitionNextMonth(newFocusedDate) {\n var numberOfMonths = this.props.numberOfMonths;\n var _this$state5 = this.state,\n currentMonth = _this$state5.currentMonth,\n focusedDate = _this$state5.focusedDate;\n var newFocusedDateMonth = newFocusedDate.month();\n var focusedDateMonth = focusedDate.month();\n var isNewFocusedDateVisible = (0, _isDayVisible[\"default\"])(newFocusedDate, currentMonth, numberOfMonths);\n\n if (newFocusedDateMonth !== focusedDateMonth && !isNewFocusedDateVisible) {\n this.onNextMonthTransition(newFocusedDate);\n return true;\n }\n\n return false;\n };\n\n _proto.maybeTransitionPrevMonth = function maybeTransitionPrevMonth(newFocusedDate) {\n var numberOfMonths = this.props.numberOfMonths;\n var _this$state6 = this.state,\n currentMonth = _this$state6.currentMonth,\n focusedDate = _this$state6.focusedDate;\n var newFocusedDateMonth = newFocusedDate.month();\n var focusedDateMonth = focusedDate.month();\n var isNewFocusedDateVisible = (0, _isDayVisible[\"default\"])(newFocusedDate, currentMonth, numberOfMonths);\n\n if (newFocusedDateMonth !== focusedDateMonth && !isNewFocusedDateVisible) {\n this.onPrevMonthTransition(newFocusedDate);\n return true;\n }\n\n return false;\n };\n\n _proto.isHorizontal = function isHorizontal() {\n var orientation = this.props.orientation;\n return orientation === _constants.HORIZONTAL_ORIENTATION;\n };\n\n _proto.isVertical = function isVertical() {\n var orientation = this.props.orientation;\n return orientation === _constants.VERTICAL_ORIENTATION || orientation === _constants.VERTICAL_SCROLLABLE;\n };\n\n _proto.updateStateAfterMonthTransition = function updateStateAfterMonthTransition() {\n var _this4 = this;\n\n var _this$props8 = this.props,\n onPrevMonthClick = _this$props8.onPrevMonthClick,\n onNextMonthClick = _this$props8.onNextMonthClick,\n numberOfMonths = _this$props8.numberOfMonths,\n onMonthChange = _this$props8.onMonthChange,\n onYearChange = _this$props8.onYearChange,\n isRTL = _this$props8.isRTL;\n var _this$state7 = this.state,\n currentMonth = _this$state7.currentMonth,\n monthTransition = _this$state7.monthTransition,\n focusedDate = _this$state7.focusedDate,\n nextFocusedDate = _this$state7.nextFocusedDate,\n withMouseInteractions = _this$state7.withMouseInteractions,\n calendarMonthWidth = _this$state7.calendarMonthWidth;\n if (!monthTransition) return;\n var newMonth = currentMonth.clone();\n var firstDayOfWeek = this.getFirstDayOfWeek();\n\n if (monthTransition === PREV_TRANSITION) {\n newMonth.subtract(1, 'month');\n if (onPrevMonthClick) onPrevMonthClick(newMonth);\n var newInvisibleMonth = newMonth.clone().subtract(1, 'month');\n var numberOfWeeks = (0, _getNumberOfCalendarMonthWeeks[\"default\"])(newInvisibleMonth, firstDayOfWeek);\n this.calendarMonthWeeks = [numberOfWeeks].concat((0, _toConsumableArray2[\"default\"])(this.calendarMonthWeeks.slice(0, -1)));\n } else if (monthTransition === NEXT_TRANSITION) {\n newMonth.add(1, 'month');\n if (onNextMonthClick) onNextMonthClick(newMonth);\n\n var _newInvisibleMonth = newMonth.clone().add(numberOfMonths, 'month');\n\n var _numberOfWeeks = (0, _getNumberOfCalendarMonthWeeks[\"default\"])(_newInvisibleMonth, firstDayOfWeek);\n\n this.calendarMonthWeeks = [].concat((0, _toConsumableArray2[\"default\"])(this.calendarMonthWeeks.slice(1)), [_numberOfWeeks]);\n } else if (monthTransition === MONTH_SELECTION_TRANSITION) {\n if (onMonthChange) onMonthChange(newMonth);\n } else if (monthTransition === YEAR_SELECTION_TRANSITION) {\n if (onYearChange) onYearChange(newMonth);\n }\n\n var newFocusedDate = null;\n\n if (nextFocusedDate) {\n newFocusedDate = nextFocusedDate;\n } else if (!focusedDate && !withMouseInteractions) {\n newFocusedDate = this.getFocusedDay(newMonth);\n }\n\n this.setState({\n currentMonth: newMonth,\n monthTransition: null,\n translationValue: isRTL && this.isHorizontal() ? -calendarMonthWidth : 0,\n nextFocusedDate: null,\n focusedDate: newFocusedDate\n }, function () {\n // we don't want to focus on the relevant calendar day after a month transition\n // if the user is navigating around using a mouse\n if (withMouseInteractions) {\n var activeElement = (0, _getActiveElement[\"default\"])();\n\n if (activeElement && activeElement !== document.body && _this4.container.contains(activeElement) && activeElement.blur) {\n activeElement.blur();\n }\n }\n });\n };\n\n _proto.adjustDayPickerHeight = function adjustDayPickerHeight(newMonthHeight) {\n var _this5 = this;\n\n var monthHeight = newMonthHeight + MONTH_PADDING;\n\n if (monthHeight !== this.calendarMonthGridHeight) {\n this.transitionContainer.style.height = \"\".concat(monthHeight, \"px\");\n\n if (!this.calendarMonthGridHeight) {\n this.setCalendarMonthGridHeightTimeout = setTimeout(function () {\n _this5.setState({\n hasSetHeight: true\n });\n }, 0);\n }\n\n this.calendarMonthGridHeight = monthHeight;\n }\n };\n\n _proto.calculateAndSetDayPickerHeight = function calculateAndSetDayPickerHeight() {\n var _this$props9 = this.props,\n daySize = _this$props9.daySize,\n numberOfMonths = _this$props9.numberOfMonths;\n var monthTitleHeight = this.state.monthTitleHeight;\n var visibleCalendarWeeks = this.calendarMonthWeeks.slice(1, numberOfMonths + 1);\n var calendarMonthWeeksHeight = Math.max.apply(Math, [0].concat((0, _toConsumableArray2[\"default\"])(visibleCalendarWeeks))) * (daySize - 1);\n var newMonthHeight = monthTitleHeight + calendarMonthWeeksHeight + 1;\n\n if (this.isHorizontal()) {\n this.adjustDayPickerHeight(newMonthHeight);\n }\n };\n\n _proto.openKeyboardShortcutsPanel = function openKeyboardShortcutsPanel(onCloseCallBack) {\n this.setState({\n showKeyboardShortcuts: true,\n onKeyboardShortcutsPanelClose: onCloseCallBack\n });\n };\n\n _proto.closeKeyboardShortcutsPanel = function closeKeyboardShortcutsPanel() {\n var onKeyboardShortcutsPanelClose = this.state.onKeyboardShortcutsPanelClose;\n\n if (onKeyboardShortcutsPanelClose) {\n onKeyboardShortcutsPanelClose();\n }\n\n this.setState({\n onKeyboardShortcutsPanelClose: null,\n showKeyboardShortcuts: false\n });\n };\n\n _proto.renderNavigation = function renderNavigation(navDirection) {\n var _this$props10 = this.props,\n dayPickerNavigationInlineStyles = _this$props10.dayPickerNavigationInlineStyles,\n disablePrev = _this$props10.disablePrev,\n disableNext = _this$props10.disableNext,\n navPosition = _this$props10.navPosition,\n navPrev = _this$props10.navPrev,\n navNext = _this$props10.navNext,\n noNavButtons = _this$props10.noNavButtons,\n noNavNextButton = _this$props10.noNavNextButton,\n noNavPrevButton = _this$props10.noNavPrevButton,\n orientation = _this$props10.orientation,\n phrases = _this$props10.phrases,\n renderNavPrevButton = _this$props10.renderNavPrevButton,\n renderNavNextButton = _this$props10.renderNavNextButton,\n isRTL = _this$props10.isRTL;\n\n if (noNavButtons) {\n return null;\n }\n\n var onPrevMonthClick = orientation === _constants.VERTICAL_SCROLLABLE ? this.getPrevScrollableMonths : this.onPrevMonthClick;\n var onNextMonthClick = orientation === _constants.VERTICAL_SCROLLABLE ? this.getNextScrollableMonths : this.onNextMonthClick;\n return _react[\"default\"].createElement(_DayPickerNavigation[\"default\"], {\n disablePrev: disablePrev,\n disableNext: disableNext,\n inlineStyles: dayPickerNavigationInlineStyles,\n onPrevMonthClick: onPrevMonthClick,\n onNextMonthClick: onNextMonthClick,\n navPosition: navPosition,\n navPrev: navPrev,\n navNext: navNext,\n renderNavPrevButton: renderNavPrevButton,\n renderNavNextButton: renderNavNextButton,\n orientation: orientation,\n phrases: phrases,\n isRTL: isRTL,\n showNavNextButton: !(noNavNextButton || orientation === _constants.VERTICAL_SCROLLABLE && navDirection === PREV_NAV),\n showNavPrevButton: !(noNavPrevButton || orientation === _constants.VERTICAL_SCROLLABLE && navDirection === NEXT_NAV)\n });\n };\n\n _proto.renderWeekHeader = function renderWeekHeader(index) {\n var _this$props11 = this.props,\n daySize = _this$props11.daySize,\n horizontalMonthPadding = _this$props11.horizontalMonthPadding,\n orientation = _this$props11.orientation,\n renderWeekHeaderElement = _this$props11.renderWeekHeaderElement,\n styles = _this$props11.styles;\n var calendarMonthWidth = this.state.calendarMonthWidth;\n var verticalScrollable = orientation === _constants.VERTICAL_SCROLLABLE;\n var horizontalStyle = {\n left: index * calendarMonthWidth\n };\n var verticalStyle = {\n marginLeft: -calendarMonthWidth / 2\n };\n var weekHeaderStyle = {}; // no styles applied to the vertical-scrollable orientation\n\n if (this.isHorizontal()) {\n weekHeaderStyle = horizontalStyle;\n } else if (this.isVertical() && !verticalScrollable) {\n weekHeaderStyle = verticalStyle;\n }\n\n var weekHeaders = this.getWeekHeaders();\n var header = weekHeaders.map(function (day) {\n return _react[\"default\"].createElement(\"li\", (0, _extends2[\"default\"])({\n key: day\n }, (0, _reactWithStyles.css)(styles.DayPicker_weekHeader_li, {\n width: daySize\n })), renderWeekHeaderElement ? renderWeekHeaderElement(day) : _react[\"default\"].createElement(\"small\", null, day));\n });\n return _react[\"default\"].createElement(\"div\", (0, _extends2[\"default\"])({}, (0, _reactWithStyles.css)(styles.DayPicker_weekHeader, this.isVertical() && styles.DayPicker_weekHeader__vertical, verticalScrollable && styles.DayPicker_weekHeader__verticalScrollable, weekHeaderStyle, {\n padding: \"0 \".concat(horizontalMonthPadding, \"px\")\n }), {\n key: \"week-\".concat(index)\n }), _react[\"default\"].createElement(\"ul\", (0, _reactWithStyles.css)(styles.DayPicker_weekHeader_ul), header));\n };\n\n _proto.render = function render() {\n var _this6 = this;\n\n var _this$state8 = this.state,\n calendarMonthWidth = _this$state8.calendarMonthWidth,\n currentMonth = _this$state8.currentMonth,\n monthTransition = _this$state8.monthTransition,\n translationValue = _this$state8.translationValue,\n scrollableMonthMultiple = _this$state8.scrollableMonthMultiple,\n focusedDate = _this$state8.focusedDate,\n showKeyboardShortcuts = _this$state8.showKeyboardShortcuts,\n isTouch = _this$state8.isTouchDevice,\n hasSetHeight = _this$state8.hasSetHeight,\n calendarInfoWidth = _this$state8.calendarInfoWidth,\n monthTitleHeight = _this$state8.monthTitleHeight;\n var _this$props12 = this.props,\n enableOutsideDays = _this$props12.enableOutsideDays,\n numberOfMonths = _this$props12.numberOfMonths,\n orientation = _this$props12.orientation,\n modifiers = _this$props12.modifiers,\n withPortal = _this$props12.withPortal,\n onDayClick = _this$props12.onDayClick,\n onDayMouseEnter = _this$props12.onDayMouseEnter,\n onDayMouseLeave = _this$props12.onDayMouseLeave,\n firstDayOfWeek = _this$props12.firstDayOfWeek,\n renderMonthText = _this$props12.renderMonthText,\n renderCalendarDay = _this$props12.renderCalendarDay,\n renderDayContents = _this$props12.renderDayContents,\n renderCalendarInfo = _this$props12.renderCalendarInfo,\n renderMonthElement = _this$props12.renderMonthElement,\n renderKeyboardShortcutsButton = _this$props12.renderKeyboardShortcutsButton,\n renderKeyboardShortcutsPanel = _this$props12.renderKeyboardShortcutsPanel,\n calendarInfoPosition = _this$props12.calendarInfoPosition,\n hideKeyboardShortcutsPanel = _this$props12.hideKeyboardShortcutsPanel,\n onOutsideClick = _this$props12.onOutsideClick,\n monthFormat = _this$props12.monthFormat,\n daySize = _this$props12.daySize,\n isFocused = _this$props12.isFocused,\n isRTL = _this$props12.isRTL,\n styles = _this$props12.styles,\n theme = _this$props12.theme,\n phrases = _this$props12.phrases,\n verticalHeight = _this$props12.verticalHeight,\n dayAriaLabelFormat = _this$props12.dayAriaLabelFormat,\n noBorder = _this$props12.noBorder,\n transitionDuration = _this$props12.transitionDuration,\n verticalBorderSpacing = _this$props12.verticalBorderSpacing,\n horizontalMonthPadding = _this$props12.horizontalMonthPadding,\n navPosition = _this$props12.navPosition;\n var dayPickerHorizontalPadding = theme.reactDates.spacing.dayPickerHorizontalPadding;\n var isHorizontal = this.isHorizontal();\n var numOfWeekHeaders = this.isVertical() ? 1 : numberOfMonths;\n var weekHeaders = [];\n\n for (var i = 0; i < numOfWeekHeaders; i += 1) {\n weekHeaders.push(this.renderWeekHeader(i));\n }\n\n var verticalScrollable = orientation === _constants.VERTICAL_SCROLLABLE;\n var height;\n\n if (isHorizontal) {\n height = this.calendarMonthGridHeight;\n } else if (this.isVertical() && !verticalScrollable && !withPortal) {\n // If the user doesn't set a desired height,\n // we default back to this kind of made-up value that generally looks good\n height = verticalHeight || 1.75 * calendarMonthWidth;\n }\n\n var isCalendarMonthGridAnimating = monthTransition !== null;\n var shouldFocusDate = !isCalendarMonthGridAnimating && isFocused;\n var keyboardShortcutButtonLocation = _DayPickerKeyboardShortcuts.BOTTOM_RIGHT;\n\n if (this.isVertical()) {\n keyboardShortcutButtonLocation = withPortal ? _DayPickerKeyboardShortcuts.TOP_LEFT : _DayPickerKeyboardShortcuts.TOP_RIGHT;\n }\n\n var shouldAnimateHeight = isHorizontal && hasSetHeight;\n var calendarInfoPositionTop = calendarInfoPosition === _constants.INFO_POSITION_TOP;\n var calendarInfoPositionBottom = calendarInfoPosition === _constants.INFO_POSITION_BOTTOM;\n var calendarInfoPositionBefore = calendarInfoPosition === _constants.INFO_POSITION_BEFORE;\n var calendarInfoPositionAfter = calendarInfoPosition === _constants.INFO_POSITION_AFTER;\n var calendarInfoIsInline = calendarInfoPositionBefore || calendarInfoPositionAfter;\n\n var calendarInfo = renderCalendarInfo && _react[\"default\"].createElement(\"div\", (0, _extends2[\"default\"])({\n ref: this.setCalendarInfoRef\n }, (0, _reactWithStyles.css)(calendarInfoIsInline && styles.DayPicker_calendarInfo__horizontal)), renderCalendarInfo());\n\n var calendarInfoPanelWidth = renderCalendarInfo && calendarInfoIsInline ? calendarInfoWidth : 0;\n var firstVisibleMonthIndex = this.getFirstVisibleIndex();\n var wrapperHorizontalWidth = calendarMonthWidth * numberOfMonths + 2 * dayPickerHorizontalPadding; // Adding `1px` because of whitespace between 2 inline-block\n\n var fullHorizontalWidth = wrapperHorizontalWidth + calendarInfoPanelWidth + 1;\n var transitionContainerStyle = {\n width: isHorizontal && wrapperHorizontalWidth,\n height: height\n };\n var dayPickerWrapperStyle = {\n width: isHorizontal && wrapperHorizontalWidth\n };\n var dayPickerStyle = {\n width: isHorizontal && fullHorizontalWidth,\n // These values are to center the datepicker (approximately) on the page\n marginLeft: isHorizontal && withPortal ? -fullHorizontalWidth / 2 : null,\n marginTop: isHorizontal && withPortal ? -calendarMonthWidth / 2 : null\n };\n return _react[\"default\"].createElement(\"div\", (0, _reactWithStyles.css)(styles.DayPicker, isHorizontal && styles.DayPicker__horizontal, verticalScrollable && styles.DayPicker__verticalScrollable, isHorizontal && withPortal && styles.DayPicker_portal__horizontal, this.isVertical() && withPortal && styles.DayPicker_portal__vertical, dayPickerStyle, !monthTitleHeight && styles.DayPicker__hidden, !noBorder && styles.DayPicker__withBorder), _react[\"default\"].createElement(_reactOutsideClickHandler[\"default\"], {\n onOutsideClick: onOutsideClick\n }, (calendarInfoPositionTop || calendarInfoPositionBefore) && calendarInfo, _react[\"default\"].createElement(\"div\", (0, _reactWithStyles.css)(dayPickerWrapperStyle, calendarInfoIsInline && isHorizontal && styles.DayPicker_wrapper__horizontal), _react[\"default\"].createElement(\"div\", (0, _extends2[\"default\"])({}, (0, _reactWithStyles.css)(styles.DayPicker_weekHeaders, isHorizontal && styles.DayPicker_weekHeaders__horizontal), {\n \"aria-hidden\": \"true\",\n role: \"presentation\"\n }), weekHeaders), _react[\"default\"].createElement(\"div\", (0, _extends2[\"default\"])({}, (0, _reactWithStyles.css)(styles.DayPicker_focusRegion), {\n ref: this.setContainerRef,\n onClick: function onClick(e) {\n e.stopPropagation();\n },\n onKeyDown: this.onKeyDown,\n onMouseUp: function onMouseUp() {\n _this6.setState({\n withMouseInteractions: true\n });\n },\n tabIndex: -1,\n role: \"application\",\n \"aria-roledescription\": phrases.roleDescription,\n \"aria-label\": phrases.calendarLabel\n }), !verticalScrollable && navPosition === _constants.NAV_POSITION_TOP && this.renderNavigation(), _react[\"default\"].createElement(\"div\", (0, _extends2[\"default\"])({}, (0, _reactWithStyles.css)(styles.DayPicker_transitionContainer, shouldAnimateHeight && styles.DayPicker_transitionContainer__horizontal, this.isVertical() && styles.DayPicker_transitionContainer__vertical, verticalScrollable && styles.DayPicker_transitionContainer__verticalScrollable, transitionContainerStyle), {\n ref: this.setTransitionContainerRef\n }), verticalScrollable && this.renderNavigation(PREV_NAV), _react[\"default\"].createElement(_CalendarMonthGrid[\"default\"], {\n setMonthTitleHeight: !monthTitleHeight ? this.setMonthTitleHeight : undefined,\n translationValue: translationValue,\n enableOutsideDays: enableOutsideDays,\n firstVisibleMonthIndex: firstVisibleMonthIndex,\n initialMonth: currentMonth,\n isAnimating: isCalendarMonthGridAnimating,\n modifiers: modifiers,\n orientation: orientation,\n numberOfMonths: numberOfMonths * scrollableMonthMultiple,\n onDayClick: onDayClick,\n onDayMouseEnter: onDayMouseEnter,\n onDayMouseLeave: onDayMouseLeave,\n onMonthChange: this.onMonthChange,\n onYearChange: this.onYearChange,\n renderMonthText: renderMonthText,\n renderCalendarDay: renderCalendarDay,\n renderDayContents: renderDayContents,\n renderMonthElement: renderMonthElement,\n onMonthTransitionEnd: this.updateStateAfterMonthTransition,\n monthFormat: monthFormat,\n daySize: daySize,\n firstDayOfWeek: firstDayOfWeek,\n isFocused: shouldFocusDate,\n focusedDate: focusedDate,\n phrases: phrases,\n isRTL: isRTL,\n dayAriaLabelFormat: dayAriaLabelFormat,\n transitionDuration: transitionDuration,\n verticalBorderSpacing: verticalBorderSpacing,\n horizontalMonthPadding: horizontalMonthPadding\n }), verticalScrollable && this.renderNavigation(NEXT_NAV)), !verticalScrollable && navPosition === _constants.NAV_POSITION_BOTTOM && this.renderNavigation(), !isTouch && !hideKeyboardShortcutsPanel && _react[\"default\"].createElement(_DayPickerKeyboardShortcuts[\"default\"], {\n block: this.isVertical() && !withPortal,\n buttonLocation: keyboardShortcutButtonLocation,\n showKeyboardShortcutsPanel: showKeyboardShortcuts,\n openKeyboardShortcutsPanel: this.openKeyboardShortcutsPanel,\n closeKeyboardShortcutsPanel: this.closeKeyboardShortcutsPanel,\n phrases: phrases,\n renderKeyboardShortcutsButton: renderKeyboardShortcutsButton,\n renderKeyboardShortcutsPanel: renderKeyboardShortcutsPanel\n }))), (calendarInfoPositionBottom || calendarInfoPositionAfter) && calendarInfo));\n };\n\n return DayPicker;\n}(_react[\"default\"].PureComponent || _react[\"default\"].Component);\n\nexports.PureDayPicker = DayPicker;\nDayPicker.propTypes = process.env.NODE_ENV !== \"production\" ? propTypes : {};\nDayPicker.defaultProps = defaultProps;\n\nvar _default = (0, _reactWithStyles.withStyles)(function (_ref4) {\n var _ref4$reactDates = _ref4.reactDates,\n color = _ref4$reactDates.color,\n font = _ref4$reactDates.font,\n noScrollBarOnVerticalScrollable = _ref4$reactDates.noScrollBarOnVerticalScrollable,\n spacing = _ref4$reactDates.spacing,\n zIndex = _ref4$reactDates.zIndex;\n return {\n DayPicker: {\n background: color.background,\n position: 'relative',\n textAlign: (0, _noflip[\"default\"])('left')\n },\n DayPicker__horizontal: {\n background: color.background\n },\n DayPicker__verticalScrollable: {\n height: '100%'\n },\n DayPicker__hidden: {\n visibility: 'hidden'\n },\n DayPicker__withBorder: {\n boxShadow: (0, _noflip[\"default\"])('0 2px 6px rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.07)'),\n borderRadius: 3\n },\n DayPicker_portal__horizontal: {\n boxShadow: 'none',\n position: 'absolute',\n left: (0, _noflip[\"default\"])('50%'),\n top: '50%'\n },\n DayPicker_portal__vertical: {\n position: 'initial'\n },\n DayPicker_focusRegion: {\n outline: 'none'\n },\n DayPicker_calendarInfo__horizontal: {\n display: 'inline-block',\n verticalAlign: 'top'\n },\n DayPicker_wrapper__horizontal: {\n display: 'inline-block',\n verticalAlign: 'top'\n },\n DayPicker_weekHeaders: {\n position: 'relative'\n },\n DayPicker_weekHeaders__horizontal: {\n marginLeft: (0, _noflip[\"default\"])(spacing.dayPickerHorizontalPadding)\n },\n DayPicker_weekHeader: {\n color: color.placeholderText,\n position: 'absolute',\n top: 62,\n zIndex: zIndex + 2,\n textAlign: (0, _noflip[\"default\"])('left')\n },\n DayPicker_weekHeader__vertical: {\n left: (0, _noflip[\"default\"])('50%')\n },\n DayPicker_weekHeader__verticalScrollable: {\n top: 0,\n display: 'table-row',\n borderBottom: \"1px solid \".concat(color.core.border),\n background: color.background,\n marginLeft: (0, _noflip[\"default\"])(0),\n left: (0, _noflip[\"default\"])(0),\n width: '100%',\n textAlign: 'center'\n },\n DayPicker_weekHeader_ul: {\n listStyle: 'none',\n margin: '1px 0',\n paddingLeft: (0, _noflip[\"default\"])(0),\n paddingRight: (0, _noflip[\"default\"])(0),\n fontSize: font.size\n },\n DayPicker_weekHeader_li: {\n display: 'inline-block',\n textAlign: 'center'\n },\n DayPicker_transitionContainer: {\n position: 'relative',\n overflow: 'hidden',\n borderRadius: 3\n },\n DayPicker_transitionContainer__horizontal: {\n transition: 'height 0.2s ease-in-out'\n },\n DayPicker_transitionContainer__vertical: {\n width: '100%'\n },\n DayPicker_transitionContainer__verticalScrollable: _objectSpread({\n paddingTop: 20,\n height: '100%',\n position: 'absolute',\n top: 0,\n bottom: 0,\n right: (0, _noflip[\"default\"])(0),\n left: (0, _noflip[\"default\"])(0),\n overflowY: 'scroll'\n }, noScrollBarOnVerticalScrollable && {\n '-webkitOverflowScrolling': 'touch',\n '::-webkit-scrollbar': {\n '-webkit-appearance': 'none',\n display: 'none'\n }\n })\n };\n}, {\n pureComponent: typeof _react[\"default\"].PureComponent !== 'undefined'\n})(DayPicker);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = exports.BOTTOM_RIGHT = exports.TOP_RIGHT = exports.TOP_LEFT = void 0;\n\nvar _enzymeShallowEqual = _interopRequireDefault(require(\"enzyme-shallow-equal\"));\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _assertThisInitialized2 = _interopRequireDefault(require(\"@babel/runtime/helpers/assertThisInitialized\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _airbnbPropTypes = require(\"airbnb-prop-types\");\n\nvar _reactWithStyles = require(\"react-with-styles\");\n\nvar _defaultPhrases = require(\"../defaultPhrases\");\n\nvar _getPhrasePropTypes = _interopRequireDefault(require(\"../utils/getPhrasePropTypes\"));\n\nvar _KeyboardShortcutRow = _interopRequireDefault(require(\"./KeyboardShortcutRow\"));\n\nvar _CloseButton = _interopRequireDefault(require(\"./CloseButton\"));\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nvar TOP_LEFT = 'top-left';\nexports.TOP_LEFT = TOP_LEFT;\nvar TOP_RIGHT = 'top-right';\nexports.TOP_RIGHT = TOP_RIGHT;\nvar BOTTOM_RIGHT = 'bottom-right';\nexports.BOTTOM_RIGHT = BOTTOM_RIGHT;\nvar propTypes = process.env.NODE_ENV !== \"production\" ? (0, _airbnbPropTypes.forbidExtraProps)(_objectSpread({}, _reactWithStyles.withStylesPropTypes, {\n block: _propTypes[\"default\"].bool,\n // TODO: rename button location to be direction-agnostic\n buttonLocation: _propTypes[\"default\"].oneOf([TOP_LEFT, TOP_RIGHT, BOTTOM_RIGHT]),\n showKeyboardShortcutsPanel: _propTypes[\"default\"].bool,\n openKeyboardShortcutsPanel: _propTypes[\"default\"].func,\n closeKeyboardShortcutsPanel: _propTypes[\"default\"].func,\n phrases: _propTypes[\"default\"].shape((0, _getPhrasePropTypes[\"default\"])(_defaultPhrases.DayPickerKeyboardShortcutsPhrases)),\n renderKeyboardShortcutsButton: _propTypes[\"default\"].func,\n renderKeyboardShortcutsPanel: _propTypes[\"default\"].func\n})) : {};\nvar defaultProps = {\n block: false,\n buttonLocation: BOTTOM_RIGHT,\n showKeyboardShortcutsPanel: false,\n openKeyboardShortcutsPanel: function openKeyboardShortcutsPanel() {},\n closeKeyboardShortcutsPanel: function closeKeyboardShortcutsPanel() {},\n phrases: _defaultPhrases.DayPickerKeyboardShortcutsPhrases,\n renderKeyboardShortcutsButton: undefined,\n renderKeyboardShortcutsPanel: undefined\n};\n\nfunction getKeyboardShortcuts(phrases) {\n return [{\n unicode: '↵',\n label: phrases.enterKey,\n action: phrases.selectFocusedDate\n }, {\n unicode: '←/→',\n label: phrases.leftArrowRightArrow,\n action: phrases.moveFocusByOneDay\n }, {\n unicode: '↑/↓',\n label: phrases.upArrowDownArrow,\n action: phrases.moveFocusByOneWeek\n }, {\n unicode: 'PgUp/PgDn',\n label: phrases.pageUpPageDown,\n action: phrases.moveFocusByOneMonth\n }, {\n unicode: 'Home/End',\n label: phrases.homeEnd,\n action: phrases.moveFocustoStartAndEndOfWeek\n }, {\n unicode: 'Esc',\n label: phrases.escape,\n action: phrases.returnFocusToInput\n }, {\n unicode: '?',\n label: phrases.questionMark,\n action: phrases.openThisPanel\n }];\n}\n\nvar DayPickerKeyboardShortcuts =\n/*#__PURE__*/\nfunction (_ref) {\n (0, _inheritsLoose2[\"default\"])(DayPickerKeyboardShortcuts, _ref);\n var _proto = DayPickerKeyboardShortcuts.prototype;\n\n _proto[!_react[\"default\"].PureComponent && \"shouldComponentUpdate\"] = function (nextProps, nextState) {\n return !(0, _enzymeShallowEqual[\"default\"])(this.props, nextProps) || !(0, _enzymeShallowEqual[\"default\"])(this.state, nextState);\n };\n\n function DayPickerKeyboardShortcuts() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _ref.call.apply(_ref, [this].concat(args)) || this;\n var phrases = _this.props.phrases;\n _this.keyboardShortcuts = getKeyboardShortcuts(phrases);\n _this.onShowKeyboardShortcutsButtonClick = _this.onShowKeyboardShortcutsButtonClick.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.setShowKeyboardShortcutsButtonRef = _this.setShowKeyboardShortcutsButtonRef.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.setHideKeyboardShortcutsButtonRef = _this.setHideKeyboardShortcutsButtonRef.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.handleFocus = _this.handleFocus.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.onKeyDown = _this.onKeyDown.bind((0, _assertThisInitialized2[\"default\"])(_this));\n return _this;\n }\n\n _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n var phrases = this.props.phrases;\n\n if (nextProps.phrases !== phrases) {\n this.keyboardShortcuts = getKeyboardShortcuts(nextProps.phrases);\n }\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n this.handleFocus();\n };\n\n _proto.onKeyDown = function onKeyDown(e) {\n e.stopPropagation();\n var closeKeyboardShortcutsPanel = this.props.closeKeyboardShortcutsPanel; // Because the close button is the only focusable element inside of the panel, this\n // amounts to a very basic focus trap. The user can exit the panel by \"pressing\" the\n // close button or hitting escape\n\n switch (e.key) {\n case 'Escape':\n closeKeyboardShortcutsPanel();\n break;\n // do nothing - this allows the up and down arrows continue their\n // default behavior of scrolling the content of the Keyboard Shortcuts Panel\n // which is needed when only a single month is shown for instance.\n\n case 'ArrowUp':\n case 'ArrowDown':\n break;\n // completely block the rest of the keys that have functionality outside of this panel\n\n case 'Tab':\n case 'Home':\n case 'End':\n case 'PageUp':\n case 'PageDown':\n case 'ArrowLeft':\n case 'ArrowRight':\n e.preventDefault();\n break;\n\n default:\n break;\n }\n };\n\n _proto.onShowKeyboardShortcutsButtonClick = function onShowKeyboardShortcutsButtonClick() {\n var _this2 = this;\n\n var openKeyboardShortcutsPanel = this.props.openKeyboardShortcutsPanel; // we want to return focus to this button after closing the keyboard shortcuts panel\n\n openKeyboardShortcutsPanel(function () {\n _this2.showKeyboardShortcutsButton.focus();\n });\n };\n\n _proto.setShowKeyboardShortcutsButtonRef = function setShowKeyboardShortcutsButtonRef(ref) {\n this.showKeyboardShortcutsButton = ref;\n };\n\n _proto.setHideKeyboardShortcutsButtonRef = function setHideKeyboardShortcutsButtonRef(ref) {\n this.hideKeyboardShortcutsButton = ref;\n };\n\n _proto.handleFocus = function handleFocus() {\n if (this.hideKeyboardShortcutsButton) {\n // automatically move focus into the dialog by moving\n // to the only interactive element, the hide button\n this.hideKeyboardShortcutsButton.focus();\n }\n };\n\n _proto.render = function render() {\n var _this$props = this.props,\n block = _this$props.block,\n buttonLocation = _this$props.buttonLocation,\n showKeyboardShortcutsPanel = _this$props.showKeyboardShortcutsPanel,\n closeKeyboardShortcutsPanel = _this$props.closeKeyboardShortcutsPanel,\n styles = _this$props.styles,\n phrases = _this$props.phrases,\n renderKeyboardShortcutsButton = _this$props.renderKeyboardShortcutsButton,\n renderKeyboardShortcutsPanel = _this$props.renderKeyboardShortcutsPanel;\n var toggleButtonText = showKeyboardShortcutsPanel ? phrases.hideKeyboardShortcutsPanel : phrases.showKeyboardShortcutsPanel;\n var bottomRight = buttonLocation === BOTTOM_RIGHT;\n var topRight = buttonLocation === TOP_RIGHT;\n var topLeft = buttonLocation === TOP_LEFT;\n return _react[\"default\"].createElement(\"div\", null, renderKeyboardShortcutsButton && renderKeyboardShortcutsButton({\n // passing in context-specific props\n ref: this.setShowKeyboardShortcutsButtonRef,\n onClick: this.onShowKeyboardShortcutsButtonClick,\n ariaLabel: toggleButtonText\n }), !renderKeyboardShortcutsButton && _react[\"default\"].createElement(\"button\", (0, _extends2[\"default\"])({\n ref: this.setShowKeyboardShortcutsButtonRef\n }, (0, _reactWithStyles.css)(styles.DayPickerKeyboardShortcuts_buttonReset, styles.DayPickerKeyboardShortcuts_show, bottomRight && styles.DayPickerKeyboardShortcuts_show__bottomRight, topRight && styles.DayPickerKeyboardShortcuts_show__topRight, topLeft && styles.DayPickerKeyboardShortcuts_show__topLeft), {\n type: \"button\",\n \"aria-label\": toggleButtonText,\n onClick: this.onShowKeyboardShortcutsButtonClick,\n onMouseUp: function onMouseUp(e) {\n e.currentTarget.blur();\n }\n }), _react[\"default\"].createElement(\"span\", (0, _reactWithStyles.css)(styles.DayPickerKeyboardShortcuts_showSpan, bottomRight && styles.DayPickerKeyboardShortcuts_showSpan__bottomRight, topRight && styles.DayPickerKeyboardShortcuts_showSpan__topRight, topLeft && styles.DayPickerKeyboardShortcuts_showSpan__topLeft), \"?\")), showKeyboardShortcutsPanel && (renderKeyboardShortcutsPanel ? renderKeyboardShortcutsPanel({\n closeButtonAriaLabel: phrases.hideKeyboardShortcutsPanel,\n keyboardShortcuts: this.keyboardShortcuts,\n onCloseButtonClick: closeKeyboardShortcutsPanel,\n onKeyDown: this.onKeyDown,\n title: phrases.keyboardShortcuts\n }) : _react[\"default\"].createElement(\"div\", (0, _extends2[\"default\"])({}, (0, _reactWithStyles.css)(styles.DayPickerKeyboardShortcuts_panel), {\n role: \"dialog\",\n \"aria-labelledby\": \"DayPickerKeyboardShortcuts_title\",\n \"aria-describedby\": \"DayPickerKeyboardShortcuts_description\"\n }), _react[\"default\"].createElement(\"div\", (0, _extends2[\"default\"])({}, (0, _reactWithStyles.css)(styles.DayPickerKeyboardShortcuts_title), {\n id: \"DayPickerKeyboardShortcuts_title\"\n }), phrases.keyboardShortcuts), _react[\"default\"].createElement(\"button\", (0, _extends2[\"default\"])({\n ref: this.setHideKeyboardShortcutsButtonRef\n }, (0, _reactWithStyles.css)(styles.DayPickerKeyboardShortcuts_buttonReset, styles.DayPickerKeyboardShortcuts_close), {\n type: \"button\",\n tabIndex: \"0\",\n \"aria-label\": phrases.hideKeyboardShortcutsPanel,\n onClick: closeKeyboardShortcutsPanel,\n onKeyDown: this.onKeyDown\n }), _react[\"default\"].createElement(_CloseButton[\"default\"], (0, _reactWithStyles.css)(styles.DayPickerKeyboardShortcuts_closeSvg))), _react[\"default\"].createElement(\"ul\", (0, _extends2[\"default\"])({}, (0, _reactWithStyles.css)(styles.DayPickerKeyboardShortcuts_list), {\n id: \"DayPickerKeyboardShortcuts_description\"\n }), this.keyboardShortcuts.map(function (_ref2) {\n var unicode = _ref2.unicode,\n label = _ref2.label,\n action = _ref2.action;\n return _react[\"default\"].createElement(_KeyboardShortcutRow[\"default\"], {\n key: label,\n unicode: unicode,\n label: label,\n action: action,\n block: block\n });\n })))));\n };\n\n return DayPickerKeyboardShortcuts;\n}(_react[\"default\"].PureComponent || _react[\"default\"].Component);\n\nDayPickerKeyboardShortcuts.propTypes = process.env.NODE_ENV !== \"production\" ? propTypes : {};\nDayPickerKeyboardShortcuts.defaultProps = defaultProps;\n\nvar _default = (0, _reactWithStyles.withStyles)(function (_ref3) {\n var _ref3$reactDates = _ref3.reactDates,\n color = _ref3$reactDates.color,\n font = _ref3$reactDates.font,\n zIndex = _ref3$reactDates.zIndex;\n return {\n DayPickerKeyboardShortcuts_buttonReset: {\n background: 'none',\n border: 0,\n borderRadius: 0,\n color: 'inherit',\n font: 'inherit',\n lineHeight: 'normal',\n overflow: 'visible',\n padding: 0,\n cursor: 'pointer',\n fontSize: font.size,\n ':active': {\n outline: 'none'\n }\n },\n DayPickerKeyboardShortcuts_show: {\n width: 33,\n height: 26,\n position: 'absolute',\n zIndex: zIndex + 2,\n '::before': {\n content: '\"\"',\n display: 'block',\n position: 'absolute'\n }\n },\n DayPickerKeyboardShortcuts_show__bottomRight: {\n bottom: 0,\n right: 0,\n '::before': {\n borderTop: '26px solid transparent',\n borderRight: \"33px solid \".concat(color.core.primary),\n bottom: 0,\n right: 0\n },\n ':hover::before': {\n borderRight: \"33px solid \".concat(color.core.primary_dark)\n }\n },\n DayPickerKeyboardShortcuts_show__topRight: {\n top: 0,\n right: 0,\n '::before': {\n borderBottom: '26px solid transparent',\n borderRight: \"33px solid \".concat(color.core.primary),\n top: 0,\n right: 0\n },\n ':hover::before': {\n borderRight: \"33px solid \".concat(color.core.primary_dark)\n }\n },\n DayPickerKeyboardShortcuts_show__topLeft: {\n top: 0,\n left: 0,\n '::before': {\n borderBottom: '26px solid transparent',\n borderLeft: \"33px solid \".concat(color.core.primary),\n top: 0,\n left: 0\n },\n ':hover::before': {\n borderLeft: \"33px solid \".concat(color.core.primary_dark)\n }\n },\n DayPickerKeyboardShortcuts_showSpan: {\n color: color.core.white,\n position: 'absolute'\n },\n DayPickerKeyboardShortcuts_showSpan__bottomRight: {\n bottom: 0,\n right: 5\n },\n DayPickerKeyboardShortcuts_showSpan__topRight: {\n top: 1,\n right: 5\n },\n DayPickerKeyboardShortcuts_showSpan__topLeft: {\n top: 1,\n left: 5\n },\n DayPickerKeyboardShortcuts_panel: {\n overflow: 'auto',\n background: color.background,\n border: \"1px solid \".concat(color.core.border),\n borderRadius: 2,\n position: 'absolute',\n top: 0,\n bottom: 0,\n right: 0,\n left: 0,\n zIndex: zIndex + 2,\n padding: 22,\n margin: 33,\n textAlign: 'left' // TODO: investigate use of text-align throughout the library\n\n },\n DayPickerKeyboardShortcuts_title: {\n fontSize: 16,\n fontWeight: 'bold',\n margin: 0\n },\n DayPickerKeyboardShortcuts_list: {\n listStyle: 'none',\n padding: 0,\n fontSize: font.size\n },\n DayPickerKeyboardShortcuts_close: {\n position: 'absolute',\n right: 22,\n top: 22,\n zIndex: zIndex + 2,\n ':active': {\n outline: 'none'\n }\n },\n DayPickerKeyboardShortcuts_closeSvg: {\n height: 15,\n width: 15,\n fill: color.core.grayLighter,\n ':hover': {\n fill: color.core.grayLight\n },\n ':focus': {\n fill: color.core.grayLight\n }\n }\n };\n}, {\n pureComponent: typeof _react[\"default\"].PureComponent !== 'undefined'\n})(DayPickerKeyboardShortcuts);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _enzymeShallowEqual = _interopRequireDefault(require(\"enzyme-shallow-equal\"));\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _toConsumableArray2 = _interopRequireDefault(require(\"@babel/runtime/helpers/toConsumableArray\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _airbnbPropTypes = require(\"airbnb-prop-types\");\n\nvar _reactWithStyles = require(\"react-with-styles\");\n\nvar _defaultPhrases = require(\"../defaultPhrases\");\n\nvar _getPhrasePropTypes = _interopRequireDefault(require(\"../utils/getPhrasePropTypes\"));\n\nvar _noflip = _interopRequireDefault(require(\"../utils/noflip\"));\n\nvar _LeftArrow = _interopRequireDefault(require(\"./LeftArrow\"));\n\nvar _RightArrow = _interopRequireDefault(require(\"./RightArrow\"));\n\nvar _ChevronUp = _interopRequireDefault(require(\"./ChevronUp\"));\n\nvar _ChevronDown = _interopRequireDefault(require(\"./ChevronDown\"));\n\nvar _NavPositionShape = _interopRequireDefault(require(\"../shapes/NavPositionShape\"));\n\nvar _ScrollableOrientationShape = _interopRequireDefault(require(\"../shapes/ScrollableOrientationShape\"));\n\nvar _constants = require(\"../constants\");\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nvar propTypes = process.env.NODE_ENV !== \"production\" ? (0, _airbnbPropTypes.forbidExtraProps)(_objectSpread({}, _reactWithStyles.withStylesPropTypes, {\n disablePrev: _propTypes[\"default\"].bool,\n disableNext: _propTypes[\"default\"].bool,\n inlineStyles: _propTypes[\"default\"].object,\n isRTL: _propTypes[\"default\"].bool,\n navPosition: _NavPositionShape[\"default\"],\n navPrev: _propTypes[\"default\"].node,\n navNext: _propTypes[\"default\"].node,\n orientation: _ScrollableOrientationShape[\"default\"],\n onPrevMonthClick: _propTypes[\"default\"].func,\n onNextMonthClick: _propTypes[\"default\"].func,\n // internationalization\n phrases: _propTypes[\"default\"].shape((0, _getPhrasePropTypes[\"default\"])(_defaultPhrases.DayPickerNavigationPhrases)),\n renderNavPrevButton: _propTypes[\"default\"].func,\n renderNavNextButton: _propTypes[\"default\"].func,\n showNavPrevButton: _propTypes[\"default\"].bool,\n showNavNextButton: _propTypes[\"default\"].bool\n})) : {};\nvar defaultProps = {\n disablePrev: false,\n disableNext: false,\n inlineStyles: null,\n isRTL: false,\n navPosition: _constants.NAV_POSITION_TOP,\n navPrev: null,\n navNext: null,\n orientation: _constants.HORIZONTAL_ORIENTATION,\n onPrevMonthClick: function onPrevMonthClick() {},\n onNextMonthClick: function onNextMonthClick() {},\n // internationalization\n phrases: _defaultPhrases.DayPickerNavigationPhrases,\n renderNavPrevButton: null,\n renderNavNextButton: null,\n showNavPrevButton: true,\n showNavNextButton: true\n};\n\nvar DayPickerNavigation =\n/*#__PURE__*/\nfunction (_ref) {\n (0, _inheritsLoose2[\"default\"])(DayPickerNavigation, _ref);\n\n function DayPickerNavigation() {\n return _ref.apply(this, arguments) || this;\n }\n\n var _proto = DayPickerNavigation.prototype;\n\n _proto[!_react[\"default\"].PureComponent && \"shouldComponentUpdate\"] = function (nextProps, nextState) {\n return !(0, _enzymeShallowEqual[\"default\"])(this.props, nextProps) || !(0, _enzymeShallowEqual[\"default\"])(this.state, nextState);\n };\n\n _proto.render = function render() {\n var _this$props = this.props,\n inlineStyles = _this$props.inlineStyles,\n isRTL = _this$props.isRTL,\n disablePrev = _this$props.disablePrev,\n disableNext = _this$props.disableNext,\n navPosition = _this$props.navPosition,\n navPrev = _this$props.navPrev,\n navNext = _this$props.navNext,\n onPrevMonthClick = _this$props.onPrevMonthClick,\n onNextMonthClick = _this$props.onNextMonthClick,\n orientation = _this$props.orientation,\n phrases = _this$props.phrases,\n renderNavPrevButton = _this$props.renderNavPrevButton,\n renderNavNextButton = _this$props.renderNavNextButton,\n showNavPrevButton = _this$props.showNavPrevButton,\n showNavNextButton = _this$props.showNavNextButton,\n styles = _this$props.styles;\n\n if (!showNavNextButton && !showNavPrevButton) {\n return null;\n }\n\n var isHorizontal = orientation === _constants.HORIZONTAL_ORIENTATION;\n var isVertical = orientation !== _constants.HORIZONTAL_ORIENTATION;\n var isVerticalScrollable = orientation === _constants.VERTICAL_SCROLLABLE;\n var isBottomNavPosition = navPosition === _constants.NAV_POSITION_BOTTOM;\n var hasInlineStyles = !!inlineStyles;\n var navPrevIcon = navPrev;\n var navNextIcon = navNext;\n var isDefaultNavPrev = false;\n var isDefaultNavNext = false;\n var navPrevTabIndex = {};\n var navNextTabIndex = {};\n\n if (!navPrevIcon && !renderNavPrevButton && showNavPrevButton) {\n navPrevTabIndex = {\n tabIndex: '0'\n };\n isDefaultNavPrev = true;\n var Icon = isVertical ? _ChevronUp[\"default\"] : _LeftArrow[\"default\"];\n\n if (isRTL && !isVertical) {\n Icon = _RightArrow[\"default\"];\n }\n\n navPrevIcon = _react[\"default\"].createElement(Icon, (0, _reactWithStyles.css)(isHorizontal && styles.DayPickerNavigation_svg__horizontal, isVertical && styles.DayPickerNavigation_svg__vertical, disablePrev && styles.DayPickerNavigation_svg__disabled));\n }\n\n if (!navNextIcon && !renderNavNextButton && showNavNextButton) {\n navNextTabIndex = {\n tabIndex: '0'\n };\n isDefaultNavNext = true;\n\n var _Icon = isVertical ? _ChevronDown[\"default\"] : _RightArrow[\"default\"];\n\n if (isRTL && !isVertical) {\n _Icon = _LeftArrow[\"default\"];\n }\n\n navNextIcon = _react[\"default\"].createElement(_Icon, (0, _reactWithStyles.css)(isHorizontal && styles.DayPickerNavigation_svg__horizontal, isVertical && styles.DayPickerNavigation_svg__vertical, disableNext && styles.DayPickerNavigation_svg__disabled));\n }\n\n var isDefaultNav = isDefaultNavNext || isDefaultNavPrev;\n return _react[\"default\"].createElement(\"div\", _reactWithStyles.css.apply(void 0, [styles.DayPickerNavigation, isHorizontal && styles.DayPickerNavigation__horizontal].concat((0, _toConsumableArray2[\"default\"])(isVertical ? [styles.DayPickerNavigation__vertical, isDefaultNav && styles.DayPickerNavigation__verticalDefault] : []), (0, _toConsumableArray2[\"default\"])(isVerticalScrollable ? [styles.DayPickerNavigation__verticalScrollable, isDefaultNav && styles.DayPickerNavigation__verticalScrollableDefault, showNavPrevButton && styles.DayPickerNavigation__verticalScrollable_prevNav] : []), (0, _toConsumableArray2[\"default\"])(isBottomNavPosition ? [styles.DayPickerNavigation__bottom, isDefaultNav && styles.DayPickerNavigation__bottomDefault] : []), [hasInlineStyles && inlineStyles])), showNavPrevButton && (renderNavPrevButton ? renderNavPrevButton({\n ariaLabel: phrases.jumpToPrevMonth,\n disabled: disablePrev,\n onClick: disablePrev ? undefined : onPrevMonthClick,\n onKeyUp: disablePrev ? undefined : function (e) {\n var key = e.key;\n\n if (key === 'Enter' || key === ' ') {\n onPrevMonthClick(e);\n }\n },\n onMouseUp: disablePrev ? undefined : function (e) {\n e.currentTarget.blur();\n }\n }) : _react[\"default\"].createElement(\"div\", (0, _extends2[\"default\"])({\n // eslint-disable-line jsx-a11y/interactive-supports-focus\n role: \"button\"\n }, navPrevTabIndex, _reactWithStyles.css.apply(void 0, [styles.DayPickerNavigation_button, isDefaultNavPrev && styles.DayPickerNavigation_button__default, disablePrev && styles.DayPickerNavigation_button__disabled].concat((0, _toConsumableArray2[\"default\"])(isHorizontal ? [styles.DayPickerNavigation_button__horizontal].concat((0, _toConsumableArray2[\"default\"])(isDefaultNavPrev ? [styles.DayPickerNavigation_button__horizontalDefault, isBottomNavPosition && styles.DayPickerNavigation_bottomButton__horizontalDefault, !isRTL && styles.DayPickerNavigation_leftButton__horizontalDefault, isRTL && styles.DayPickerNavigation_rightButton__horizontalDefault] : [])) : []), (0, _toConsumableArray2[\"default\"])(isVertical ? [styles.DayPickerNavigation_button__vertical].concat((0, _toConsumableArray2[\"default\"])(isDefaultNavPrev ? [styles.DayPickerNavigation_button__verticalDefault, styles.DayPickerNavigation_prevButton__verticalDefault, isVerticalScrollable && styles.DayPickerNavigation_prevButton__verticalScrollableDefault] : [])) : []))), {\n \"aria-disabled\": disablePrev ? true : undefined,\n \"aria-label\": phrases.jumpToPrevMonth,\n onClick: disablePrev ? undefined : onPrevMonthClick,\n onKeyUp: disablePrev ? undefined : function (e) {\n var key = e.key;\n\n if (key === 'Enter' || key === ' ') {\n onPrevMonthClick(e);\n }\n },\n onMouseUp: disablePrev ? undefined : function (e) {\n e.currentTarget.blur();\n }\n }), navPrevIcon)), showNavNextButton && (renderNavNextButton ? renderNavNextButton({\n ariaLabel: phrases.jumpToNextMonth,\n disabled: disableNext,\n onClick: disableNext ? undefined : onNextMonthClick,\n onKeyUp: disableNext ? undefined : function (e) {\n var key = e.key;\n\n if (key === 'Enter' || key === ' ') {\n onNextMonthClick(e);\n }\n },\n onMouseUp: disableNext ? undefined : function (e) {\n e.currentTarget.blur();\n }\n }) : _react[\"default\"].createElement(\"div\", (0, _extends2[\"default\"])({\n // eslint-disable-line jsx-a11y/interactive-supports-focus\n role: \"button\"\n }, navNextTabIndex, _reactWithStyles.css.apply(void 0, [styles.DayPickerNavigation_button, isDefaultNavNext && styles.DayPickerNavigation_button__default, disableNext && styles.DayPickerNavigation_button__disabled].concat((0, _toConsumableArray2[\"default\"])(isHorizontal ? [styles.DayPickerNavigation_button__horizontal].concat((0, _toConsumableArray2[\"default\"])(isDefaultNavNext ? [styles.DayPickerNavigation_button__horizontalDefault, isBottomNavPosition && styles.DayPickerNavigation_bottomButton__horizontalDefault, isRTL && styles.DayPickerNavigation_leftButton__horizontalDefault, !isRTL && styles.DayPickerNavigation_rightButton__horizontalDefault] : [])) : []), (0, _toConsumableArray2[\"default\"])(isVertical ? [styles.DayPickerNavigation_button__vertical].concat((0, _toConsumableArray2[\"default\"])(isDefaultNavNext ? [styles.DayPickerNavigation_button__verticalDefault, styles.DayPickerNavigation_nextButton__verticalDefault, isVerticalScrollable && styles.DayPickerNavigation_nextButton__verticalScrollableDefault] : [])) : []))), {\n \"aria-disabled\": disableNext ? true : undefined,\n \"aria-label\": phrases.jumpToNextMonth,\n onClick: disableNext ? undefined : onNextMonthClick,\n onKeyUp: disableNext ? undefined : function (e) {\n var key = e.key;\n\n if (key === 'Enter' || key === ' ') {\n onNextMonthClick(e);\n }\n },\n onMouseUp: disableNext ? undefined : function (e) {\n e.currentTarget.blur();\n }\n }), navNextIcon)));\n };\n\n return DayPickerNavigation;\n}(_react[\"default\"].PureComponent || _react[\"default\"].Component);\n\nDayPickerNavigation.propTypes = process.env.NODE_ENV !== \"production\" ? propTypes : {};\nDayPickerNavigation.defaultProps = defaultProps;\n\nvar _default = (0, _reactWithStyles.withStyles)(function (_ref2) {\n var _ref2$reactDates = _ref2.reactDates,\n color = _ref2$reactDates.color,\n zIndex = _ref2$reactDates.zIndex;\n return {\n DayPickerNavigation: {\n position: 'relative',\n zIndex: zIndex + 2\n },\n DayPickerNavigation__horizontal: {\n height: 0\n },\n DayPickerNavigation__vertical: {},\n DayPickerNavigation__verticalScrollable: {},\n DayPickerNavigation__verticalScrollable_prevNav: {\n zIndex: zIndex + 1 // zIndex + 2 causes the button to show on top of the day of week headers\n\n },\n DayPickerNavigation__verticalDefault: {\n position: 'absolute',\n width: '100%',\n height: 52,\n bottom: 0,\n left: (0, _noflip[\"default\"])(0)\n },\n DayPickerNavigation__verticalScrollableDefault: {\n position: 'relative'\n },\n DayPickerNavigation__bottom: {\n height: 'auto'\n },\n DayPickerNavigation__bottomDefault: {\n display: 'flex',\n justifyContent: 'space-between'\n },\n DayPickerNavigation_button: {\n cursor: 'pointer',\n userSelect: 'none',\n border: 0,\n padding: 0,\n margin: 0\n },\n DayPickerNavigation_button__default: {\n border: \"1px solid \".concat(color.core.borderLight),\n backgroundColor: color.background,\n color: color.placeholderText,\n ':focus': {\n border: \"1px solid \".concat(color.core.borderMedium)\n },\n ':hover': {\n border: \"1px solid \".concat(color.core.borderMedium)\n },\n ':active': {\n background: color.backgroundDark\n }\n },\n DayPickerNavigation_button__disabled: {\n cursor: 'default',\n border: \"1px solid \".concat(color.disabled),\n ':focus': {\n border: \"1px solid \".concat(color.disabled)\n },\n ':hover': {\n border: \"1px solid \".concat(color.disabled)\n },\n ':active': {\n background: 'none'\n }\n },\n DayPickerNavigation_button__horizontal: {},\n DayPickerNavigation_button__horizontalDefault: {\n position: 'absolute',\n top: 18,\n lineHeight: 0.78,\n borderRadius: 3,\n padding: '6px 9px'\n },\n DayPickerNavigation_bottomButton__horizontalDefault: {\n position: 'static',\n marginLeft: 22,\n marginRight: 22,\n marginBottom: 30,\n marginTop: -10\n },\n DayPickerNavigation_leftButton__horizontalDefault: {\n left: (0, _noflip[\"default\"])(22)\n },\n DayPickerNavigation_rightButton__horizontalDefault: {\n right: (0, _noflip[\"default\"])(22)\n },\n DayPickerNavigation_button__vertical: {},\n DayPickerNavigation_button__verticalDefault: {\n padding: 5,\n background: color.background,\n boxShadow: (0, _noflip[\"default\"])('0 0 5px 2px rgba(0, 0, 0, 0.1)'),\n position: 'relative',\n display: 'inline-block',\n textAlign: 'center',\n height: '100%',\n width: '50%'\n },\n DayPickerNavigation_prevButton__verticalDefault: {},\n DayPickerNavigation_nextButton__verticalDefault: {\n borderLeft: (0, _noflip[\"default\"])(0)\n },\n DayPickerNavigation_nextButton__verticalScrollableDefault: {\n width: '100%'\n },\n DayPickerNavigation_prevButton__verticalScrollableDefault: {\n width: '100%'\n },\n DayPickerNavigation_svg__horizontal: {\n height: 19,\n width: 19,\n fill: color.core.grayLight,\n display: 'block'\n },\n DayPickerNavigation_svg__vertical: {\n height: 42,\n width: 42,\n fill: color.text\n },\n DayPickerNavigation_svg__disabled: {\n fill: color.disabled\n }\n };\n}, {\n pureComponent: typeof _react[\"default\"].PureComponent !== 'undefined'\n})(DayPickerNavigation);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _enzymeShallowEqual = _interopRequireDefault(require(\"enzyme-shallow-equal\"));\n\nvar _slicedToArray2 = _interopRequireDefault(require(\"@babel/runtime/helpers/slicedToArray\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _assertThisInitialized2 = _interopRequireDefault(require(\"@babel/runtime/helpers/assertThisInitialized\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _reactMomentProptypes = _interopRequireDefault(require(\"react-moment-proptypes\"));\n\nvar _airbnbPropTypes = require(\"airbnb-prop-types\");\n\nvar _moment = _interopRequireDefault(require(\"moment\"));\n\nvar _object = _interopRequireDefault(require(\"object.values\"));\n\nvar _isTouchDevice = _interopRequireDefault(require(\"is-touch-device\"));\n\nvar _defaultPhrases = require(\"../defaultPhrases\");\n\nvar _getPhrasePropTypes = _interopRequireDefault(require(\"../utils/getPhrasePropTypes\"));\n\nvar _isInclusivelyAfterDay = _interopRequireDefault(require(\"../utils/isInclusivelyAfterDay\"));\n\nvar _isNextDay = _interopRequireDefault(require(\"../utils/isNextDay\"));\n\nvar _isSameDay = _interopRequireDefault(require(\"../utils/isSameDay\"));\n\nvar _isAfterDay = _interopRequireDefault(require(\"../utils/isAfterDay\"));\n\nvar _isBeforeDay = _interopRequireDefault(require(\"../utils/isBeforeDay\"));\n\nvar _isPreviousDay = _interopRequireDefault(require(\"../utils/isPreviousDay\"));\n\nvar _getVisibleDays = _interopRequireDefault(require(\"../utils/getVisibleDays\"));\n\nvar _isDayVisible = _interopRequireDefault(require(\"../utils/isDayVisible\"));\n\nvar _getSelectedDateOffset = _interopRequireDefault(require(\"../utils/getSelectedDateOffset\"));\n\nvar _toISODateString = _interopRequireDefault(require(\"../utils/toISODateString\"));\n\nvar _modifiers = require(\"../utils/modifiers\");\n\nvar _DisabledShape = _interopRequireDefault(require(\"../shapes/DisabledShape\"));\n\nvar _FocusedInputShape = _interopRequireDefault(require(\"../shapes/FocusedInputShape\"));\n\nvar _ScrollableOrientationShape = _interopRequireDefault(require(\"../shapes/ScrollableOrientationShape\"));\n\nvar _DayOfWeekShape = _interopRequireDefault(require(\"../shapes/DayOfWeekShape\"));\n\nvar _CalendarInfoPositionShape = _interopRequireDefault(require(\"../shapes/CalendarInfoPositionShape\"));\n\nvar _NavPositionShape = _interopRequireDefault(require(\"../shapes/NavPositionShape\"));\n\nvar _constants = require(\"../constants\");\n\nvar _DayPicker = _interopRequireDefault(require(\"./DayPicker\"));\n\nvar _getPooledMoment = _interopRequireDefault(require(\"../utils/getPooledMoment\"));\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nvar propTypes = process.env.NODE_ENV !== \"production\" ? (0, _airbnbPropTypes.forbidExtraProps)({\n startDate: _reactMomentProptypes[\"default\"].momentObj,\n endDate: _reactMomentProptypes[\"default\"].momentObj,\n onDatesChange: _propTypes[\"default\"].func,\n startDateOffset: _propTypes[\"default\"].func,\n endDateOffset: _propTypes[\"default\"].func,\n minDate: _reactMomentProptypes[\"default\"].momentObj,\n maxDate: _reactMomentProptypes[\"default\"].momentObj,\n focusedInput: _FocusedInputShape[\"default\"],\n onFocusChange: _propTypes[\"default\"].func,\n onClose: _propTypes[\"default\"].func,\n keepOpenOnDateSelect: _propTypes[\"default\"].bool,\n minimumNights: _propTypes[\"default\"].number,\n disabled: _DisabledShape[\"default\"],\n isOutsideRange: _propTypes[\"default\"].func,\n isDayBlocked: _propTypes[\"default\"].func,\n isDayHighlighted: _propTypes[\"default\"].func,\n getMinNightsForHoverDate: _propTypes[\"default\"].func,\n daysViolatingMinNightsCanBeClicked: _propTypes[\"default\"].bool,\n // DayPicker props\n renderMonthText: (0, _airbnbPropTypes.mutuallyExclusiveProps)(_propTypes[\"default\"].func, 'renderMonthText', 'renderMonthElement'),\n renderMonthElement: (0, _airbnbPropTypes.mutuallyExclusiveProps)(_propTypes[\"default\"].func, 'renderMonthText', 'renderMonthElement'),\n renderWeekHeaderElement: _propTypes[\"default\"].func,\n enableOutsideDays: _propTypes[\"default\"].bool,\n numberOfMonths: _propTypes[\"default\"].number,\n orientation: _ScrollableOrientationShape[\"default\"],\n withPortal: _propTypes[\"default\"].bool,\n initialVisibleMonth: _propTypes[\"default\"].func,\n hideKeyboardShortcutsPanel: _propTypes[\"default\"].bool,\n daySize: _airbnbPropTypes.nonNegativeInteger,\n noBorder: _propTypes[\"default\"].bool,\n verticalBorderSpacing: _airbnbPropTypes.nonNegativeInteger,\n horizontalMonthPadding: _airbnbPropTypes.nonNegativeInteger,\n dayPickerNavigationInlineStyles: _propTypes[\"default\"].object,\n navPosition: _NavPositionShape[\"default\"],\n navPrev: _propTypes[\"default\"].node,\n navNext: _propTypes[\"default\"].node,\n renderNavPrevButton: _propTypes[\"default\"].func,\n renderNavNextButton: _propTypes[\"default\"].func,\n noNavButtons: _propTypes[\"default\"].bool,\n noNavNextButton: _propTypes[\"default\"].bool,\n noNavPrevButton: _propTypes[\"default\"].bool,\n onPrevMonthClick: _propTypes[\"default\"].func,\n onNextMonthClick: _propTypes[\"default\"].func,\n onOutsideClick: _propTypes[\"default\"].func,\n renderCalendarDay: _propTypes[\"default\"].func,\n renderDayContents: _propTypes[\"default\"].func,\n renderCalendarInfo: _propTypes[\"default\"].func,\n renderKeyboardShortcutsButton: _propTypes[\"default\"].func,\n renderKeyboardShortcutsPanel: _propTypes[\"default\"].func,\n calendarInfoPosition: _CalendarInfoPositionShape[\"default\"],\n firstDayOfWeek: _DayOfWeekShape[\"default\"],\n verticalHeight: _airbnbPropTypes.nonNegativeInteger,\n transitionDuration: _airbnbPropTypes.nonNegativeInteger,\n // accessibility\n onBlur: _propTypes[\"default\"].func,\n isFocused: _propTypes[\"default\"].bool,\n showKeyboardShortcuts: _propTypes[\"default\"].bool,\n onTab: _propTypes[\"default\"].func,\n onShiftTab: _propTypes[\"default\"].func,\n // i18n\n monthFormat: _propTypes[\"default\"].string,\n weekDayFormat: _propTypes[\"default\"].string,\n phrases: _propTypes[\"default\"].shape((0, _getPhrasePropTypes[\"default\"])(_defaultPhrases.DayPickerPhrases)),\n dayAriaLabelFormat: _propTypes[\"default\"].string,\n isRTL: _propTypes[\"default\"].bool\n}) : {};\nvar defaultProps = {\n startDate: undefined,\n // TODO: use null\n endDate: undefined,\n // TODO: use null\n minDate: null,\n maxDate: null,\n onDatesChange: function onDatesChange() {},\n startDateOffset: undefined,\n endDateOffset: undefined,\n focusedInput: null,\n onFocusChange: function onFocusChange() {},\n onClose: function onClose() {},\n keepOpenOnDateSelect: false,\n minimumNights: 1,\n disabled: false,\n isOutsideRange: function isOutsideRange() {},\n isDayBlocked: function isDayBlocked() {},\n isDayHighlighted: function isDayHighlighted() {},\n getMinNightsForHoverDate: function getMinNightsForHoverDate() {},\n daysViolatingMinNightsCanBeClicked: false,\n // DayPicker props\n renderMonthText: null,\n renderWeekHeaderElement: null,\n enableOutsideDays: false,\n numberOfMonths: 1,\n orientation: _constants.HORIZONTAL_ORIENTATION,\n withPortal: false,\n hideKeyboardShortcutsPanel: false,\n initialVisibleMonth: null,\n daySize: _constants.DAY_SIZE,\n dayPickerNavigationInlineStyles: null,\n navPosition: _constants.NAV_POSITION_TOP,\n navPrev: null,\n navNext: null,\n renderNavPrevButton: null,\n renderNavNextButton: null,\n noNavButtons: false,\n noNavNextButton: false,\n noNavPrevButton: false,\n onPrevMonthClick: function onPrevMonthClick() {},\n onNextMonthClick: function onNextMonthClick() {},\n onOutsideClick: function onOutsideClick() {},\n renderCalendarDay: undefined,\n renderDayContents: null,\n renderCalendarInfo: null,\n renderMonthElement: null,\n renderKeyboardShortcutsButton: undefined,\n renderKeyboardShortcutsPanel: undefined,\n calendarInfoPosition: _constants.INFO_POSITION_BOTTOM,\n firstDayOfWeek: null,\n verticalHeight: null,\n noBorder: false,\n transitionDuration: undefined,\n verticalBorderSpacing: undefined,\n horizontalMonthPadding: 13,\n // accessibility\n onBlur: function onBlur() {},\n isFocused: false,\n showKeyboardShortcuts: false,\n onTab: function onTab() {},\n onShiftTab: function onShiftTab() {},\n // i18n\n monthFormat: 'MMMM YYYY',\n weekDayFormat: 'dd',\n phrases: _defaultPhrases.DayPickerPhrases,\n dayAriaLabelFormat: undefined,\n isRTL: false\n};\n\nvar getChooseAvailableDatePhrase = function getChooseAvailableDatePhrase(phrases, focusedInput) {\n if (focusedInput === _constants.START_DATE) {\n return phrases.chooseAvailableStartDate;\n }\n\n if (focusedInput === _constants.END_DATE) {\n return phrases.chooseAvailableEndDate;\n }\n\n return phrases.chooseAvailableDate;\n};\n\nvar DayPickerRangeController =\n/*#__PURE__*/\nfunction (_ref) {\n (0, _inheritsLoose2[\"default\"])(DayPickerRangeController, _ref);\n var _proto = DayPickerRangeController.prototype;\n\n _proto[!_react[\"default\"].PureComponent && \"shouldComponentUpdate\"] = function (nextProps, nextState) {\n return !(0, _enzymeShallowEqual[\"default\"])(this.props, nextProps) || !(0, _enzymeShallowEqual[\"default\"])(this.state, nextState);\n };\n\n function DayPickerRangeController(props) {\n var _this;\n\n _this = _ref.call(this, props) || this;\n _this.isTouchDevice = (0, _isTouchDevice[\"default\"])();\n _this.today = (0, _moment[\"default\"])();\n _this.modifiers = {\n today: function today(day) {\n return _this.isToday(day);\n },\n blocked: function blocked(day) {\n return _this.isBlocked(day);\n },\n 'blocked-calendar': function blockedCalendar(day) {\n return props.isDayBlocked(day);\n },\n 'blocked-out-of-range': function blockedOutOfRange(day) {\n return props.isOutsideRange(day);\n },\n 'highlighted-calendar': function highlightedCalendar(day) {\n return props.isDayHighlighted(day);\n },\n valid: function valid(day) {\n return !_this.isBlocked(day);\n },\n 'selected-start': function selectedStart(day) {\n return _this.isStartDate(day);\n },\n 'selected-end': function selectedEnd(day) {\n return _this.isEndDate(day);\n },\n 'blocked-minimum-nights': function blockedMinimumNights(day) {\n return _this.doesNotMeetMinimumNights(day);\n },\n 'selected-span': function selectedSpan(day) {\n return _this.isInSelectedSpan(day);\n },\n 'last-in-range': function lastInRange(day) {\n return _this.isLastInRange(day);\n },\n hovered: function hovered(day) {\n return _this.isHovered(day);\n },\n 'hovered-span': function hoveredSpan(day) {\n return _this.isInHoveredSpan(day);\n },\n 'hovered-offset': function hoveredOffset(day) {\n return _this.isInHoveredSpan(day);\n },\n 'after-hovered-start': function afterHoveredStart(day) {\n return _this.isDayAfterHoveredStartDate(day);\n },\n 'first-day-of-week': function firstDayOfWeek(day) {\n return _this.isFirstDayOfWeek(day);\n },\n 'last-day-of-week': function lastDayOfWeek(day) {\n return _this.isLastDayOfWeek(day);\n },\n 'hovered-start-first-possible-end': function hoveredStartFirstPossibleEnd(day, hoverDate) {\n return _this.isFirstPossibleEndDateForHoveredStartDate(day, hoverDate);\n },\n 'hovered-start-blocked-minimum-nights': function hoveredStartBlockedMinimumNights(day, hoverDate) {\n return _this.doesNotMeetMinNightsForHoveredStartDate(day, hoverDate);\n },\n 'before-hovered-end': function beforeHoveredEnd(day) {\n return _this.isDayBeforeHoveredEndDate(day);\n },\n 'no-selected-start-before-selected-end': function noSelectedStartBeforeSelectedEnd(day) {\n return _this.beforeSelectedEnd(day) && !props.startDate;\n },\n 'selected-start-in-hovered-span': function selectedStartInHoveredSpan(day, hoverDate) {\n return _this.isStartDate(day) && (0, _isAfterDay[\"default\"])(hoverDate, day);\n },\n 'selected-start-no-selected-end': function selectedStartNoSelectedEnd(day) {\n return _this.isStartDate(day) && !props.endDate;\n },\n 'selected-end-no-selected-start': function selectedEndNoSelectedStart(day) {\n return _this.isEndDate(day) && !props.startDate;\n }\n };\n\n var _this$getStateForNewM = _this.getStateForNewMonth(props),\n currentMonth = _this$getStateForNewM.currentMonth,\n visibleDays = _this$getStateForNewM.visibleDays; // initialize phrases\n // set the appropriate CalendarDay phrase based on focusedInput\n\n\n var chooseAvailableDate = getChooseAvailableDatePhrase(props.phrases, props.focusedInput);\n _this.state = {\n hoverDate: null,\n currentMonth: currentMonth,\n phrases: _objectSpread({}, props.phrases, {\n chooseAvailableDate: chooseAvailableDate\n }),\n visibleDays: visibleDays,\n disablePrev: _this.shouldDisableMonthNavigation(props.minDate, currentMonth),\n disableNext: _this.shouldDisableMonthNavigation(props.maxDate, currentMonth)\n };\n _this.onDayClick = _this.onDayClick.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.onDayMouseEnter = _this.onDayMouseEnter.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.onDayMouseLeave = _this.onDayMouseLeave.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.onPrevMonthClick = _this.onPrevMonthClick.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.onNextMonthClick = _this.onNextMonthClick.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.onMonthChange = _this.onMonthChange.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.onYearChange = _this.onYearChange.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.onGetNextScrollableMonths = _this.onGetNextScrollableMonths.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.onGetPrevScrollableMonths = _this.onGetPrevScrollableMonths.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.getFirstFocusableDay = _this.getFirstFocusableDay.bind((0, _assertThisInitialized2[\"default\"])(_this));\n return _this;\n }\n\n _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n var _this2 = this;\n\n var startDate = nextProps.startDate,\n endDate = nextProps.endDate,\n focusedInput = nextProps.focusedInput,\n getMinNightsForHoverDate = nextProps.getMinNightsForHoverDate,\n minimumNights = nextProps.minimumNights,\n isOutsideRange = nextProps.isOutsideRange,\n isDayBlocked = nextProps.isDayBlocked,\n isDayHighlighted = nextProps.isDayHighlighted,\n phrases = nextProps.phrases,\n initialVisibleMonth = nextProps.initialVisibleMonth,\n numberOfMonths = nextProps.numberOfMonths,\n enableOutsideDays = nextProps.enableOutsideDays;\n var _this$props = this.props,\n prevStartDate = _this$props.startDate,\n prevEndDate = _this$props.endDate,\n prevFocusedInput = _this$props.focusedInput,\n prevMinimumNights = _this$props.minimumNights,\n prevIsOutsideRange = _this$props.isOutsideRange,\n prevIsDayBlocked = _this$props.isDayBlocked,\n prevIsDayHighlighted = _this$props.isDayHighlighted,\n prevPhrases = _this$props.phrases,\n prevInitialVisibleMonth = _this$props.initialVisibleMonth,\n prevNumberOfMonths = _this$props.numberOfMonths,\n prevEnableOutsideDays = _this$props.enableOutsideDays;\n var hoverDate = this.state.hoverDate;\n var visibleDays = this.state.visibleDays;\n var recomputeOutsideRange = false;\n var recomputeDayBlocked = false;\n var recomputeDayHighlighted = false;\n\n if (isOutsideRange !== prevIsOutsideRange) {\n this.modifiers['blocked-out-of-range'] = function (day) {\n return isOutsideRange(day);\n };\n\n recomputeOutsideRange = true;\n }\n\n if (isDayBlocked !== prevIsDayBlocked) {\n this.modifiers['blocked-calendar'] = function (day) {\n return isDayBlocked(day);\n };\n\n recomputeDayBlocked = true;\n }\n\n if (isDayHighlighted !== prevIsDayHighlighted) {\n this.modifiers['highlighted-calendar'] = function (day) {\n return isDayHighlighted(day);\n };\n\n recomputeDayHighlighted = true;\n }\n\n var recomputePropModifiers = recomputeOutsideRange || recomputeDayBlocked || recomputeDayHighlighted;\n var didStartDateChange = startDate !== prevStartDate;\n var didEndDateChange = endDate !== prevEndDate;\n var didFocusChange = focusedInput !== prevFocusedInput;\n\n if (numberOfMonths !== prevNumberOfMonths || enableOutsideDays !== prevEnableOutsideDays || initialVisibleMonth !== prevInitialVisibleMonth && !prevFocusedInput && didFocusChange) {\n var newMonthState = this.getStateForNewMonth(nextProps);\n var currentMonth = newMonthState.currentMonth;\n visibleDays = newMonthState.visibleDays;\n this.setState({\n currentMonth: currentMonth,\n visibleDays: visibleDays\n });\n }\n\n var modifiers = {};\n\n if (didStartDateChange) {\n modifiers = this.deleteModifier(modifiers, prevStartDate, 'selected-start');\n modifiers = this.addModifier(modifiers, startDate, 'selected-start');\n\n if (prevStartDate) {\n var startSpan = prevStartDate.clone().add(1, 'day');\n var endSpan = prevStartDate.clone().add(prevMinimumNights + 1, 'days');\n modifiers = this.deleteModifierFromRange(modifiers, startSpan, endSpan, 'after-hovered-start');\n\n if (!endDate || !prevEndDate) {\n modifiers = this.deleteModifier(modifiers, prevStartDate, 'selected-start-no-selected-end');\n }\n }\n\n if (!prevStartDate && endDate && startDate) {\n modifiers = this.deleteModifier(modifiers, endDate, 'selected-end-no-selected-start');\n modifiers = this.deleteModifier(modifiers, endDate, 'selected-end-in-hovered-span');\n (0, _object[\"default\"])(visibleDays).forEach(function (days) {\n Object.keys(days).forEach(function (day) {\n var momentObj = (0, _moment[\"default\"])(day);\n modifiers = _this2.deleteModifier(modifiers, momentObj, 'no-selected-start-before-selected-end');\n });\n });\n }\n }\n\n if (didEndDateChange) {\n modifiers = this.deleteModifier(modifiers, prevEndDate, 'selected-end');\n modifiers = this.addModifier(modifiers, endDate, 'selected-end');\n\n if (prevEndDate && (!startDate || !prevStartDate)) {\n modifiers = this.deleteModifier(modifiers, prevEndDate, 'selected-end-no-selected-start');\n }\n }\n\n if (didStartDateChange || didEndDateChange) {\n if (prevStartDate && prevEndDate) {\n modifiers = this.deleteModifierFromRange(modifiers, prevStartDate, prevEndDate.clone().add(1, 'day'), 'selected-span');\n }\n\n if (startDate && endDate) {\n modifiers = this.deleteModifierFromRange(modifiers, startDate, endDate.clone().add(1, 'day'), 'hovered-span');\n modifiers = this.addModifierToRange(modifiers, startDate.clone().add(1, 'day'), endDate, 'selected-span');\n }\n\n if (startDate && !endDate) {\n modifiers = this.addModifier(modifiers, startDate, 'selected-start-no-selected-end');\n }\n\n if (endDate && !startDate) {\n modifiers = this.addModifier(modifiers, endDate, 'selected-end-no-selected-start');\n }\n\n if (!startDate && endDate) {\n (0, _object[\"default\"])(visibleDays).forEach(function (days) {\n Object.keys(days).forEach(function (day) {\n var momentObj = (0, _moment[\"default\"])(day);\n\n if ((0, _isBeforeDay[\"default\"])(momentObj, endDate)) {\n modifiers = _this2.addModifier(modifiers, momentObj, 'no-selected-start-before-selected-end');\n }\n });\n });\n }\n }\n\n if (!this.isTouchDevice && didStartDateChange && startDate && !endDate) {\n var _startSpan = startDate.clone().add(1, 'day');\n\n var _endSpan = startDate.clone().add(minimumNights + 1, 'days');\n\n modifiers = this.addModifierToRange(modifiers, _startSpan, _endSpan, 'after-hovered-start');\n }\n\n if (!this.isTouchDevice && didEndDateChange && !startDate && endDate) {\n var _startSpan2 = endDate.clone().subtract(minimumNights, 'days');\n\n var _endSpan2 = endDate.clone();\n\n modifiers = this.addModifierToRange(modifiers, _startSpan2, _endSpan2, 'before-hovered-end');\n }\n\n if (prevMinimumNights > 0) {\n if (didFocusChange || didStartDateChange || minimumNights !== prevMinimumNights) {\n var _startSpan3 = prevStartDate || this.today;\n\n modifiers = this.deleteModifierFromRange(modifiers, _startSpan3, _startSpan3.clone().add(prevMinimumNights, 'days'), 'blocked-minimum-nights');\n modifiers = this.deleteModifierFromRange(modifiers, _startSpan3, _startSpan3.clone().add(prevMinimumNights, 'days'), 'blocked');\n }\n }\n\n if (didFocusChange || recomputePropModifiers) {\n (0, _object[\"default\"])(visibleDays).forEach(function (days) {\n Object.keys(days).forEach(function (day) {\n var momentObj = (0, _getPooledMoment[\"default\"])(day);\n var isBlocked = false;\n\n if (didFocusChange || recomputeOutsideRange) {\n if (isOutsideRange(momentObj)) {\n modifiers = _this2.addModifier(modifiers, momentObj, 'blocked-out-of-range');\n isBlocked = true;\n } else {\n modifiers = _this2.deleteModifier(modifiers, momentObj, 'blocked-out-of-range');\n }\n }\n\n if (didFocusChange || recomputeDayBlocked) {\n if (isDayBlocked(momentObj)) {\n modifiers = _this2.addModifier(modifiers, momentObj, 'blocked-calendar');\n isBlocked = true;\n } else {\n modifiers = _this2.deleteModifier(modifiers, momentObj, 'blocked-calendar');\n }\n }\n\n if (isBlocked) {\n modifiers = _this2.addModifier(modifiers, momentObj, 'blocked');\n } else {\n modifiers = _this2.deleteModifier(modifiers, momentObj, 'blocked');\n }\n\n if (didFocusChange || recomputeDayHighlighted) {\n if (isDayHighlighted(momentObj)) {\n modifiers = _this2.addModifier(modifiers, momentObj, 'highlighted-calendar');\n } else {\n modifiers = _this2.deleteModifier(modifiers, momentObj, 'highlighted-calendar');\n }\n }\n });\n });\n }\n\n if (!this.isTouchDevice && didFocusChange && hoverDate && !this.isBlocked(hoverDate)) {\n var minNightsForHoverDate = getMinNightsForHoverDate(hoverDate);\n\n if (minNightsForHoverDate > 0 && focusedInput === _constants.END_DATE) {\n modifiers = this.deleteModifierFromRange(modifiers, hoverDate.clone().add(1, 'days'), hoverDate.clone().add(minNightsForHoverDate, 'days'), 'hovered-start-blocked-minimum-nights');\n modifiers = this.deleteModifier(modifiers, hoverDate.clone().add(minNightsForHoverDate, 'days'), 'hovered-start-first-possible-end');\n }\n\n if (minNightsForHoverDate > 0 && focusedInput === _constants.START_DATE) {\n modifiers = this.addModifierToRange(modifiers, hoverDate.clone().add(1, 'days'), hoverDate.clone().add(minNightsForHoverDate, 'days'), 'hovered-start-blocked-minimum-nights');\n modifiers = this.addModifier(modifiers, hoverDate.clone().add(minNightsForHoverDate, 'days'), 'hovered-start-first-possible-end');\n }\n }\n\n if (minimumNights > 0 && startDate && focusedInput === _constants.END_DATE) {\n modifiers = this.addModifierToRange(modifiers, startDate, startDate.clone().add(minimumNights, 'days'), 'blocked-minimum-nights');\n modifiers = this.addModifierToRange(modifiers, startDate, startDate.clone().add(minimumNights, 'days'), 'blocked');\n }\n\n var today = (0, _moment[\"default\"])();\n\n if (!(0, _isSameDay[\"default\"])(this.today, today)) {\n modifiers = this.deleteModifier(modifiers, this.today, 'today');\n modifiers = this.addModifier(modifiers, today, 'today');\n this.today = today;\n }\n\n if (Object.keys(modifiers).length > 0) {\n this.setState({\n visibleDays: _objectSpread({}, visibleDays, {}, modifiers)\n });\n }\n\n if (didFocusChange || phrases !== prevPhrases) {\n // set the appropriate CalendarDay phrase based on focusedInput\n var chooseAvailableDate = getChooseAvailableDatePhrase(phrases, focusedInput);\n this.setState({\n phrases: _objectSpread({}, phrases, {\n chooseAvailableDate: chooseAvailableDate\n })\n });\n }\n };\n\n _proto.onDayClick = function onDayClick(day, e) {\n var _this$props2 = this.props,\n keepOpenOnDateSelect = _this$props2.keepOpenOnDateSelect,\n minimumNights = _this$props2.minimumNights,\n onBlur = _this$props2.onBlur,\n focusedInput = _this$props2.focusedInput,\n onFocusChange = _this$props2.onFocusChange,\n onClose = _this$props2.onClose,\n onDatesChange = _this$props2.onDatesChange,\n startDateOffset = _this$props2.startDateOffset,\n endDateOffset = _this$props2.endDateOffset,\n disabled = _this$props2.disabled,\n daysViolatingMinNightsCanBeClicked = _this$props2.daysViolatingMinNightsCanBeClicked;\n if (e) e.preventDefault();\n if (this.isBlocked(day, !daysViolatingMinNightsCanBeClicked)) return;\n var _this$props3 = this.props,\n startDate = _this$props3.startDate,\n endDate = _this$props3.endDate;\n\n if (startDateOffset || endDateOffset) {\n startDate = (0, _getSelectedDateOffset[\"default\"])(startDateOffset, day);\n endDate = (0, _getSelectedDateOffset[\"default\"])(endDateOffset, day);\n\n if (this.isBlocked(startDate) || this.isBlocked(endDate)) {\n return;\n }\n\n onDatesChange({\n startDate: startDate,\n endDate: endDate\n });\n\n if (!keepOpenOnDateSelect) {\n onFocusChange(null);\n onClose({\n startDate: startDate,\n endDate: endDate\n });\n }\n } else if (focusedInput === _constants.START_DATE) {\n var lastAllowedStartDate = endDate && endDate.clone().subtract(minimumNights, 'days');\n var isStartDateAfterEndDate = (0, _isBeforeDay[\"default\"])(lastAllowedStartDate, day) || (0, _isAfterDay[\"default\"])(startDate, endDate);\n var isEndDateDisabled = disabled === _constants.END_DATE;\n\n if (!isEndDateDisabled || !isStartDateAfterEndDate) {\n startDate = day;\n\n if (isStartDateAfterEndDate) {\n endDate = null;\n }\n }\n\n onDatesChange({\n startDate: startDate,\n endDate: endDate\n });\n\n if (isEndDateDisabled && !isStartDateAfterEndDate) {\n onFocusChange(null);\n onClose({\n startDate: startDate,\n endDate: endDate\n });\n } else if (!isEndDateDisabled) {\n onFocusChange(_constants.END_DATE);\n }\n } else if (focusedInput === _constants.END_DATE) {\n var firstAllowedEndDate = startDate && startDate.clone().add(minimumNights, 'days');\n\n if (!startDate) {\n endDate = day;\n onDatesChange({\n startDate: startDate,\n endDate: endDate\n });\n onFocusChange(_constants.START_DATE);\n } else if ((0, _isInclusivelyAfterDay[\"default\"])(day, firstAllowedEndDate)) {\n endDate = day;\n onDatesChange({\n startDate: startDate,\n endDate: endDate\n });\n\n if (!keepOpenOnDateSelect) {\n onFocusChange(null);\n onClose({\n startDate: startDate,\n endDate: endDate\n });\n }\n } else if (daysViolatingMinNightsCanBeClicked && this.doesNotMeetMinimumNights(day)) {\n endDate = day;\n onDatesChange({\n startDate: startDate,\n endDate: endDate\n });\n } else if (disabled !== _constants.START_DATE) {\n startDate = day;\n endDate = null;\n onDatesChange({\n startDate: startDate,\n endDate: endDate\n });\n } else {\n onDatesChange({\n startDate: startDate,\n endDate: endDate\n });\n }\n } else {\n onDatesChange({\n startDate: startDate,\n endDate: endDate\n });\n }\n\n onBlur();\n };\n\n _proto.onDayMouseEnter = function onDayMouseEnter(day) {\n /* eslint react/destructuring-assignment: 1 */\n if (this.isTouchDevice) return;\n var _this$props4 = this.props,\n startDate = _this$props4.startDate,\n endDate = _this$props4.endDate,\n focusedInput = _this$props4.focusedInput,\n getMinNightsForHoverDate = _this$props4.getMinNightsForHoverDate,\n minimumNights = _this$props4.minimumNights,\n startDateOffset = _this$props4.startDateOffset,\n endDateOffset = _this$props4.endDateOffset;\n var _this$state = this.state,\n hoverDate = _this$state.hoverDate,\n visibleDays = _this$state.visibleDays,\n dateOffset = _this$state.dateOffset;\n var nextDateOffset = null;\n\n if (focusedInput) {\n var hasOffset = startDateOffset || endDateOffset;\n var modifiers = {};\n\n if (hasOffset) {\n var start = (0, _getSelectedDateOffset[\"default\"])(startDateOffset, day);\n var end = (0, _getSelectedDateOffset[\"default\"])(endDateOffset, day, function (rangeDay) {\n return rangeDay.add(1, 'day');\n });\n nextDateOffset = {\n start: start,\n end: end\n }; // eslint-disable-next-line react/destructuring-assignment\n\n if (dateOffset && dateOffset.start && dateOffset.end) {\n modifiers = this.deleteModifierFromRange(modifiers, dateOffset.start, dateOffset.end, 'hovered-offset');\n }\n\n modifiers = this.addModifierToRange(modifiers, start, end, 'hovered-offset');\n }\n\n if (!hasOffset) {\n modifiers = this.deleteModifier(modifiers, hoverDate, 'hovered');\n modifiers = this.addModifier(modifiers, day, 'hovered');\n\n if (startDate && !endDate && focusedInput === _constants.END_DATE) {\n if ((0, _isAfterDay[\"default\"])(hoverDate, startDate)) {\n var endSpan = hoverDate.clone().add(1, 'day');\n modifiers = this.deleteModifierFromRange(modifiers, startDate, endSpan, 'hovered-span');\n }\n\n if ((0, _isBeforeDay[\"default\"])(day, startDate) || (0, _isSameDay[\"default\"])(day, startDate)) {\n modifiers = this.deleteModifier(modifiers, startDate, 'selected-start-in-hovered-span');\n }\n\n if (!this.isBlocked(day) && (0, _isAfterDay[\"default\"])(day, startDate)) {\n var _endSpan3 = day.clone().add(1, 'day');\n\n modifiers = this.addModifierToRange(modifiers, startDate, _endSpan3, 'hovered-span');\n modifiers = this.addModifier(modifiers, startDate, 'selected-start-in-hovered-span');\n }\n }\n\n if (!startDate && endDate && focusedInput === _constants.START_DATE) {\n if ((0, _isBeforeDay[\"default\"])(hoverDate, endDate)) {\n modifiers = this.deleteModifierFromRange(modifiers, hoverDate, endDate, 'hovered-span');\n }\n\n if ((0, _isAfterDay[\"default\"])(day, endDate) || (0, _isSameDay[\"default\"])(day, endDate)) {\n modifiers = this.deleteModifier(modifiers, endDate, 'selected-end-in-hovered-span');\n }\n\n if (!this.isBlocked(day) && (0, _isBeforeDay[\"default\"])(day, endDate)) {\n modifiers = this.addModifierToRange(modifiers, day, endDate, 'hovered-span');\n modifiers = this.addModifier(modifiers, endDate, 'selected-end-in-hovered-span');\n }\n }\n\n if (startDate) {\n var startSpan = startDate.clone().add(1, 'day');\n\n var _endSpan4 = startDate.clone().add(minimumNights + 1, 'days');\n\n modifiers = this.deleteModifierFromRange(modifiers, startSpan, _endSpan4, 'after-hovered-start');\n\n if ((0, _isSameDay[\"default\"])(day, startDate)) {\n var newStartSpan = startDate.clone().add(1, 'day');\n var newEndSpan = startDate.clone().add(minimumNights + 1, 'days');\n modifiers = this.addModifierToRange(modifiers, newStartSpan, newEndSpan, 'after-hovered-start');\n }\n }\n\n if (endDate) {\n var _startSpan4 = endDate.clone().subtract(minimumNights, 'days');\n\n modifiers = this.deleteModifierFromRange(modifiers, _startSpan4, endDate, 'before-hovered-end');\n\n if ((0, _isSameDay[\"default\"])(day, endDate)) {\n var _newStartSpan = endDate.clone().subtract(minimumNights, 'days');\n\n modifiers = this.addModifierToRange(modifiers, _newStartSpan, endDate, 'before-hovered-end');\n }\n }\n\n if (hoverDate && !this.isBlocked(hoverDate)) {\n var minNightsForPrevHoverDate = getMinNightsForHoverDate(hoverDate);\n\n if (minNightsForPrevHoverDate > 0 && focusedInput === _constants.START_DATE) {\n modifiers = this.deleteModifierFromRange(modifiers, hoverDate.clone().add(1, 'days'), hoverDate.clone().add(minNightsForPrevHoverDate, 'days'), 'hovered-start-blocked-minimum-nights');\n modifiers = this.deleteModifier(modifiers, hoverDate.clone().add(minNightsForPrevHoverDate, 'days'), 'hovered-start-first-possible-end');\n }\n }\n\n if (!this.isBlocked(day)) {\n var minNightsForHoverDate = getMinNightsForHoverDate(day);\n\n if (minNightsForHoverDate > 0 && focusedInput === _constants.START_DATE) {\n modifiers = this.addModifierToRange(modifiers, day.clone().add(1, 'days'), day.clone().add(minNightsForHoverDate, 'days'), 'hovered-start-blocked-minimum-nights');\n modifiers = this.addModifier(modifiers, day.clone().add(minNightsForHoverDate, 'days'), 'hovered-start-first-possible-end');\n }\n }\n }\n\n this.setState({\n hoverDate: day,\n dateOffset: nextDateOffset,\n visibleDays: _objectSpread({}, visibleDays, {}, modifiers)\n });\n }\n };\n\n _proto.onDayMouseLeave = function onDayMouseLeave(day) {\n var _this$props5 = this.props,\n startDate = _this$props5.startDate,\n endDate = _this$props5.endDate,\n focusedInput = _this$props5.focusedInput,\n getMinNightsForHoverDate = _this$props5.getMinNightsForHoverDate,\n minimumNights = _this$props5.minimumNights;\n var _this$state2 = this.state,\n hoverDate = _this$state2.hoverDate,\n visibleDays = _this$state2.visibleDays,\n dateOffset = _this$state2.dateOffset;\n if (this.isTouchDevice || !hoverDate) return;\n var modifiers = {};\n modifiers = this.deleteModifier(modifiers, hoverDate, 'hovered');\n\n if (dateOffset) {\n modifiers = this.deleteModifierFromRange(modifiers, dateOffset.start, dateOffset.end, 'hovered-offset');\n }\n\n if (startDate && !endDate) {\n if ((0, _isAfterDay[\"default\"])(hoverDate, startDate)) {\n var endSpan = hoverDate.clone().add(1, 'day');\n modifiers = this.deleteModifierFromRange(modifiers, startDate, endSpan, 'hovered-span');\n }\n\n if ((0, _isAfterDay[\"default\"])(day, startDate)) {\n modifiers = this.deleteModifier(modifiers, startDate, 'selected-start-in-hovered-span');\n }\n }\n\n if (!startDate && endDate) {\n if ((0, _isAfterDay[\"default\"])(endDate, hoverDate)) {\n modifiers = this.deleteModifierFromRange(modifiers, hoverDate, endDate, 'hovered-span');\n }\n\n if ((0, _isBeforeDay[\"default\"])(day, endDate)) {\n modifiers = this.deleteModifier(modifiers, endDate, 'selected-end-in-hovered-span');\n }\n }\n\n if (startDate && (0, _isSameDay[\"default\"])(day, startDate)) {\n var startSpan = startDate.clone().add(1, 'day');\n\n var _endSpan5 = startDate.clone().add(minimumNights + 1, 'days');\n\n modifiers = this.deleteModifierFromRange(modifiers, startSpan, _endSpan5, 'after-hovered-start');\n }\n\n if (endDate && (0, _isSameDay[\"default\"])(day, endDate)) {\n var _startSpan5 = endDate.clone().subtract(minimumNights, 'days');\n\n modifiers = this.deleteModifierFromRange(modifiers, _startSpan5, endDate, 'before-hovered-end');\n }\n\n if (!this.isBlocked(hoverDate)) {\n var minNightsForHoverDate = getMinNightsForHoverDate(hoverDate);\n\n if (minNightsForHoverDate > 0 && focusedInput === _constants.START_DATE) {\n modifiers = this.deleteModifierFromRange(modifiers, hoverDate.clone().add(1, 'days'), hoverDate.clone().add(minNightsForHoverDate, 'days'), 'hovered-start-blocked-minimum-nights');\n modifiers = this.deleteModifier(modifiers, hoverDate.clone().add(minNightsForHoverDate, 'days'), 'hovered-start-first-possible-end');\n }\n }\n\n this.setState({\n hoverDate: null,\n visibleDays: _objectSpread({}, visibleDays, {}, modifiers)\n });\n };\n\n _proto.onPrevMonthClick = function onPrevMonthClick() {\n var _this$props6 = this.props,\n enableOutsideDays = _this$props6.enableOutsideDays,\n maxDate = _this$props6.maxDate,\n minDate = _this$props6.minDate,\n numberOfMonths = _this$props6.numberOfMonths,\n onPrevMonthClick = _this$props6.onPrevMonthClick;\n var _this$state3 = this.state,\n currentMonth = _this$state3.currentMonth,\n visibleDays = _this$state3.visibleDays;\n var newVisibleDays = {};\n Object.keys(visibleDays).sort().slice(0, numberOfMonths + 1).forEach(function (month) {\n newVisibleDays[month] = visibleDays[month];\n });\n var prevMonth = currentMonth.clone().subtract(2, 'months');\n var prevMonthVisibleDays = (0, _getVisibleDays[\"default\"])(prevMonth, 1, enableOutsideDays, true);\n var newCurrentMonth = currentMonth.clone().subtract(1, 'month');\n this.setState({\n currentMonth: newCurrentMonth,\n disablePrev: this.shouldDisableMonthNavigation(minDate, newCurrentMonth),\n disableNext: this.shouldDisableMonthNavigation(maxDate, newCurrentMonth),\n visibleDays: _objectSpread({}, newVisibleDays, {}, this.getModifiers(prevMonthVisibleDays))\n }, function () {\n onPrevMonthClick(newCurrentMonth.clone());\n });\n };\n\n _proto.onNextMonthClick = function onNextMonthClick() {\n var _this$props7 = this.props,\n enableOutsideDays = _this$props7.enableOutsideDays,\n maxDate = _this$props7.maxDate,\n minDate = _this$props7.minDate,\n numberOfMonths = _this$props7.numberOfMonths,\n onNextMonthClick = _this$props7.onNextMonthClick;\n var _this$state4 = this.state,\n currentMonth = _this$state4.currentMonth,\n visibleDays = _this$state4.visibleDays;\n var newVisibleDays = {};\n Object.keys(visibleDays).sort().slice(1).forEach(function (month) {\n newVisibleDays[month] = visibleDays[month];\n });\n var nextMonth = currentMonth.clone().add(numberOfMonths + 1, 'month');\n var nextMonthVisibleDays = (0, _getVisibleDays[\"default\"])(nextMonth, 1, enableOutsideDays, true);\n var newCurrentMonth = currentMonth.clone().add(1, 'month');\n this.setState({\n currentMonth: newCurrentMonth,\n disablePrev: this.shouldDisableMonthNavigation(minDate, newCurrentMonth),\n disableNext: this.shouldDisableMonthNavigation(maxDate, newCurrentMonth),\n visibleDays: _objectSpread({}, newVisibleDays, {}, this.getModifiers(nextMonthVisibleDays))\n }, function () {\n onNextMonthClick(newCurrentMonth.clone());\n });\n };\n\n _proto.onMonthChange = function onMonthChange(newMonth) {\n var _this$props8 = this.props,\n numberOfMonths = _this$props8.numberOfMonths,\n enableOutsideDays = _this$props8.enableOutsideDays,\n orientation = _this$props8.orientation;\n var withoutTransitionMonths = orientation === _constants.VERTICAL_SCROLLABLE;\n var newVisibleDays = (0, _getVisibleDays[\"default\"])(newMonth, numberOfMonths, enableOutsideDays, withoutTransitionMonths);\n this.setState({\n currentMonth: newMonth.clone(),\n visibleDays: this.getModifiers(newVisibleDays)\n });\n };\n\n _proto.onYearChange = function onYearChange(newMonth) {\n var _this$props9 = this.props,\n numberOfMonths = _this$props9.numberOfMonths,\n enableOutsideDays = _this$props9.enableOutsideDays,\n orientation = _this$props9.orientation;\n var withoutTransitionMonths = orientation === _constants.VERTICAL_SCROLLABLE;\n var newVisibleDays = (0, _getVisibleDays[\"default\"])(newMonth, numberOfMonths, enableOutsideDays, withoutTransitionMonths);\n this.setState({\n currentMonth: newMonth.clone(),\n visibleDays: this.getModifiers(newVisibleDays)\n });\n };\n\n _proto.onGetNextScrollableMonths = function onGetNextScrollableMonths() {\n var _this$props10 = this.props,\n numberOfMonths = _this$props10.numberOfMonths,\n enableOutsideDays = _this$props10.enableOutsideDays;\n var _this$state5 = this.state,\n currentMonth = _this$state5.currentMonth,\n visibleDays = _this$state5.visibleDays;\n var numberOfVisibleMonths = Object.keys(visibleDays).length;\n var nextMonth = currentMonth.clone().add(numberOfVisibleMonths, 'month');\n var newVisibleDays = (0, _getVisibleDays[\"default\"])(nextMonth, numberOfMonths, enableOutsideDays, true);\n this.setState({\n visibleDays: _objectSpread({}, visibleDays, {}, this.getModifiers(newVisibleDays))\n });\n };\n\n _proto.onGetPrevScrollableMonths = function onGetPrevScrollableMonths() {\n var _this$props11 = this.props,\n numberOfMonths = _this$props11.numberOfMonths,\n enableOutsideDays = _this$props11.enableOutsideDays;\n var _this$state6 = this.state,\n currentMonth = _this$state6.currentMonth,\n visibleDays = _this$state6.visibleDays;\n var firstPreviousMonth = currentMonth.clone().subtract(numberOfMonths, 'month');\n var newVisibleDays = (0, _getVisibleDays[\"default\"])(firstPreviousMonth, numberOfMonths, enableOutsideDays, true);\n this.setState({\n currentMonth: firstPreviousMonth.clone(),\n visibleDays: _objectSpread({}, visibleDays, {}, this.getModifiers(newVisibleDays))\n });\n };\n\n _proto.getFirstFocusableDay = function getFirstFocusableDay(newMonth) {\n var _this3 = this;\n\n var _this$props12 = this.props,\n startDate = _this$props12.startDate,\n endDate = _this$props12.endDate,\n focusedInput = _this$props12.focusedInput,\n minimumNights = _this$props12.minimumNights,\n numberOfMonths = _this$props12.numberOfMonths;\n var focusedDate = newMonth.clone().startOf('month');\n\n if (focusedInput === _constants.START_DATE && startDate) {\n focusedDate = startDate.clone();\n } else if (focusedInput === _constants.END_DATE && !endDate && startDate) {\n focusedDate = startDate.clone().add(minimumNights, 'days');\n } else if (focusedInput === _constants.END_DATE && endDate) {\n focusedDate = endDate.clone();\n }\n\n if (this.isBlocked(focusedDate)) {\n var days = [];\n var lastVisibleDay = newMonth.clone().add(numberOfMonths - 1, 'months').endOf('month');\n var currentDay = focusedDate.clone();\n\n while (!(0, _isAfterDay[\"default\"])(currentDay, lastVisibleDay)) {\n currentDay = currentDay.clone().add(1, 'day');\n days.push(currentDay);\n }\n\n var viableDays = days.filter(function (day) {\n return !_this3.isBlocked(day);\n });\n\n if (viableDays.length > 0) {\n var _viableDays = (0, _slicedToArray2[\"default\"])(viableDays, 1);\n\n focusedDate = _viableDays[0];\n }\n }\n\n return focusedDate;\n };\n\n _proto.getModifiers = function getModifiers(visibleDays) {\n var _this4 = this;\n\n var modifiers = {};\n Object.keys(visibleDays).forEach(function (month) {\n modifiers[month] = {};\n visibleDays[month].forEach(function (day) {\n modifiers[month][(0, _toISODateString[\"default\"])(day)] = _this4.getModifiersForDay(day);\n });\n });\n return modifiers;\n };\n\n _proto.getModifiersForDay = function getModifiersForDay(day) {\n var _this5 = this;\n\n return new Set(Object.keys(this.modifiers).filter(function (modifier) {\n return _this5.modifiers[modifier](day);\n }));\n };\n\n _proto.getStateForNewMonth = function getStateForNewMonth(nextProps) {\n var _this6 = this;\n\n var initialVisibleMonth = nextProps.initialVisibleMonth,\n numberOfMonths = nextProps.numberOfMonths,\n enableOutsideDays = nextProps.enableOutsideDays,\n orientation = nextProps.orientation,\n startDate = nextProps.startDate;\n var initialVisibleMonthThunk = initialVisibleMonth || (startDate ? function () {\n return startDate;\n } : function () {\n return _this6.today;\n });\n var currentMonth = initialVisibleMonthThunk();\n var withoutTransitionMonths = orientation === _constants.VERTICAL_SCROLLABLE;\n var visibleDays = this.getModifiers((0, _getVisibleDays[\"default\"])(currentMonth, numberOfMonths, enableOutsideDays, withoutTransitionMonths));\n return {\n currentMonth: currentMonth,\n visibleDays: visibleDays\n };\n };\n\n _proto.shouldDisableMonthNavigation = function shouldDisableMonthNavigation(date, visibleMonth) {\n if (!date) return false;\n var _this$props13 = this.props,\n numberOfMonths = _this$props13.numberOfMonths,\n enableOutsideDays = _this$props13.enableOutsideDays;\n return (0, _isDayVisible[\"default\"])(date, visibleMonth, numberOfMonths, enableOutsideDays);\n };\n\n _proto.addModifier = function addModifier(updatedDays, day, modifier) {\n return (0, _modifiers.addModifier)(updatedDays, day, modifier, this.props, this.state);\n };\n\n _proto.addModifierToRange = function addModifierToRange(updatedDays, start, end, modifier) {\n var days = updatedDays;\n var spanStart = start.clone();\n\n while ((0, _isBeforeDay[\"default\"])(spanStart, end)) {\n days = this.addModifier(days, spanStart, modifier);\n spanStart = spanStart.clone().add(1, 'day');\n }\n\n return days;\n };\n\n _proto.deleteModifier = function deleteModifier(updatedDays, day, modifier) {\n return (0, _modifiers.deleteModifier)(updatedDays, day, modifier, this.props, this.state);\n };\n\n _proto.deleteModifierFromRange = function deleteModifierFromRange(updatedDays, start, end, modifier) {\n var days = updatedDays;\n var spanStart = start.clone();\n\n while ((0, _isBeforeDay[\"default\"])(spanStart, end)) {\n days = this.deleteModifier(days, spanStart, modifier);\n spanStart = spanStart.clone().add(1, 'day');\n }\n\n return days;\n };\n\n _proto.doesNotMeetMinimumNights = function doesNotMeetMinimumNights(day) {\n var _this$props14 = this.props,\n startDate = _this$props14.startDate,\n isOutsideRange = _this$props14.isOutsideRange,\n focusedInput = _this$props14.focusedInput,\n minimumNights = _this$props14.minimumNights;\n if (focusedInput !== _constants.END_DATE) return false;\n\n if (startDate) {\n var dayDiff = day.diff(startDate.clone().startOf('day').hour(12), 'days');\n return dayDiff < minimumNights && dayDiff >= 0;\n }\n\n return isOutsideRange((0, _moment[\"default\"])(day).subtract(minimumNights, 'days'));\n };\n\n _proto.doesNotMeetMinNightsForHoveredStartDate = function doesNotMeetMinNightsForHoveredStartDate(day, hoverDate) {\n var _this$props15 = this.props,\n focusedInput = _this$props15.focusedInput,\n getMinNightsForHoverDate = _this$props15.getMinNightsForHoverDate;\n if (focusedInput !== _constants.END_DATE) return false;\n\n if (hoverDate && !this.isBlocked(hoverDate)) {\n var minNights = getMinNightsForHoverDate(hoverDate);\n var dayDiff = day.diff(hoverDate.clone().startOf('day').hour(12), 'days');\n return dayDiff < minNights && dayDiff >= 0;\n }\n\n return false;\n };\n\n _proto.isDayAfterHoveredStartDate = function isDayAfterHoveredStartDate(day) {\n var _this$props16 = this.props,\n startDate = _this$props16.startDate,\n endDate = _this$props16.endDate,\n minimumNights = _this$props16.minimumNights;\n\n var _ref2 = this.state || {},\n hoverDate = _ref2.hoverDate;\n\n return !!startDate && !endDate && !this.isBlocked(day) && (0, _isNextDay[\"default\"])(hoverDate, day) && minimumNights > 0 && (0, _isSameDay[\"default\"])(hoverDate, startDate);\n };\n\n _proto.isEndDate = function isEndDate(day) {\n var endDate = this.props.endDate;\n return (0, _isSameDay[\"default\"])(day, endDate);\n };\n\n _proto.isHovered = function isHovered(day) {\n var _ref3 = this.state || {},\n hoverDate = _ref3.hoverDate;\n\n var focusedInput = this.props.focusedInput;\n return !!focusedInput && (0, _isSameDay[\"default\"])(day, hoverDate);\n };\n\n _proto.isInHoveredSpan = function isInHoveredSpan(day) {\n var _this$props17 = this.props,\n startDate = _this$props17.startDate,\n endDate = _this$props17.endDate;\n\n var _ref4 = this.state || {},\n hoverDate = _ref4.hoverDate;\n\n var isForwardRange = !!startDate && !endDate && (day.isBetween(startDate, hoverDate) || (0, _isSameDay[\"default\"])(hoverDate, day));\n var isBackwardRange = !!endDate && !startDate && (day.isBetween(hoverDate, endDate) || (0, _isSameDay[\"default\"])(hoverDate, day));\n var isValidDayHovered = hoverDate && !this.isBlocked(hoverDate);\n return (isForwardRange || isBackwardRange) && isValidDayHovered;\n };\n\n _proto.isInSelectedSpan = function isInSelectedSpan(day) {\n var _this$props18 = this.props,\n startDate = _this$props18.startDate,\n endDate = _this$props18.endDate;\n return day.isBetween(startDate, endDate, 'days');\n };\n\n _proto.isLastInRange = function isLastInRange(day) {\n var endDate = this.props.endDate;\n return this.isInSelectedSpan(day) && (0, _isNextDay[\"default\"])(day, endDate);\n };\n\n _proto.isStartDate = function isStartDate(day) {\n var startDate = this.props.startDate;\n return (0, _isSameDay[\"default\"])(day, startDate);\n };\n\n _proto.isBlocked = function isBlocked(day) {\n var blockDaysViolatingMinNights = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var _this$props19 = this.props,\n isDayBlocked = _this$props19.isDayBlocked,\n isOutsideRange = _this$props19.isOutsideRange;\n return isDayBlocked(day) || isOutsideRange(day) || blockDaysViolatingMinNights && this.doesNotMeetMinimumNights(day);\n };\n\n _proto.isToday = function isToday(day) {\n return (0, _isSameDay[\"default\"])(day, this.today);\n };\n\n _proto.isFirstDayOfWeek = function isFirstDayOfWeek(day) {\n var firstDayOfWeek = this.props.firstDayOfWeek;\n return day.day() === (firstDayOfWeek || _moment[\"default\"].localeData().firstDayOfWeek());\n };\n\n _proto.isLastDayOfWeek = function isLastDayOfWeek(day) {\n var firstDayOfWeek = this.props.firstDayOfWeek;\n return day.day() === ((firstDayOfWeek || _moment[\"default\"].localeData().firstDayOfWeek()) + 6) % 7;\n };\n\n _proto.isFirstPossibleEndDateForHoveredStartDate = function isFirstPossibleEndDateForHoveredStartDate(day, hoverDate) {\n var _this$props20 = this.props,\n focusedInput = _this$props20.focusedInput,\n getMinNightsForHoverDate = _this$props20.getMinNightsForHoverDate;\n if (focusedInput !== _constants.END_DATE || !hoverDate || this.isBlocked(hoverDate)) return false;\n var minNights = getMinNightsForHoverDate(hoverDate);\n var firstAvailableEndDate = hoverDate.clone().add(minNights, 'days');\n return (0, _isSameDay[\"default\"])(day, firstAvailableEndDate);\n };\n\n _proto.beforeSelectedEnd = function beforeSelectedEnd(day) {\n var endDate = this.props.endDate;\n return (0, _isBeforeDay[\"default\"])(day, endDate);\n };\n\n _proto.isDayBeforeHoveredEndDate = function isDayBeforeHoveredEndDate(day) {\n var _this$props21 = this.props,\n startDate = _this$props21.startDate,\n endDate = _this$props21.endDate,\n minimumNights = _this$props21.minimumNights;\n\n var _ref5 = this.state || {},\n hoverDate = _ref5.hoverDate;\n\n return !!endDate && !startDate && !this.isBlocked(day) && (0, _isPreviousDay[\"default\"])(hoverDate, day) && minimumNights > 0 && (0, _isSameDay[\"default\"])(hoverDate, endDate);\n };\n\n _proto.render = function render() {\n var _this$props22 = this.props,\n numberOfMonths = _this$props22.numberOfMonths,\n orientation = _this$props22.orientation,\n monthFormat = _this$props22.monthFormat,\n renderMonthText = _this$props22.renderMonthText,\n renderWeekHeaderElement = _this$props22.renderWeekHeaderElement,\n dayPickerNavigationInlineStyles = _this$props22.dayPickerNavigationInlineStyles,\n navPosition = _this$props22.navPosition,\n navPrev = _this$props22.navPrev,\n navNext = _this$props22.navNext,\n renderNavPrevButton = _this$props22.renderNavPrevButton,\n renderNavNextButton = _this$props22.renderNavNextButton,\n noNavButtons = _this$props22.noNavButtons,\n noNavNextButton = _this$props22.noNavNextButton,\n noNavPrevButton = _this$props22.noNavPrevButton,\n onOutsideClick = _this$props22.onOutsideClick,\n withPortal = _this$props22.withPortal,\n enableOutsideDays = _this$props22.enableOutsideDays,\n firstDayOfWeek = _this$props22.firstDayOfWeek,\n renderKeyboardShortcutsButton = _this$props22.renderKeyboardShortcutsButton,\n renderKeyboardShortcutsPanel = _this$props22.renderKeyboardShortcutsPanel,\n hideKeyboardShortcutsPanel = _this$props22.hideKeyboardShortcutsPanel,\n daySize = _this$props22.daySize,\n focusedInput = _this$props22.focusedInput,\n renderCalendarDay = _this$props22.renderCalendarDay,\n renderDayContents = _this$props22.renderDayContents,\n renderCalendarInfo = _this$props22.renderCalendarInfo,\n renderMonthElement = _this$props22.renderMonthElement,\n calendarInfoPosition = _this$props22.calendarInfoPosition,\n onBlur = _this$props22.onBlur,\n onShiftTab = _this$props22.onShiftTab,\n onTab = _this$props22.onTab,\n isFocused = _this$props22.isFocused,\n showKeyboardShortcuts = _this$props22.showKeyboardShortcuts,\n isRTL = _this$props22.isRTL,\n weekDayFormat = _this$props22.weekDayFormat,\n dayAriaLabelFormat = _this$props22.dayAriaLabelFormat,\n verticalHeight = _this$props22.verticalHeight,\n noBorder = _this$props22.noBorder,\n transitionDuration = _this$props22.transitionDuration,\n verticalBorderSpacing = _this$props22.verticalBorderSpacing,\n horizontalMonthPadding = _this$props22.horizontalMonthPadding;\n var _this$state7 = this.state,\n currentMonth = _this$state7.currentMonth,\n phrases = _this$state7.phrases,\n visibleDays = _this$state7.visibleDays,\n disablePrev = _this$state7.disablePrev,\n disableNext = _this$state7.disableNext;\n return _react[\"default\"].createElement(_DayPicker[\"default\"], {\n orientation: orientation,\n enableOutsideDays: enableOutsideDays,\n modifiers: visibleDays,\n numberOfMonths: numberOfMonths,\n onDayClick: this.onDayClick,\n onDayMouseEnter: this.onDayMouseEnter,\n onDayMouseLeave: this.onDayMouseLeave,\n onPrevMonthClick: this.onPrevMonthClick,\n onNextMonthClick: this.onNextMonthClick,\n onMonthChange: this.onMonthChange,\n onTab: onTab,\n onShiftTab: onShiftTab,\n onYearChange: this.onYearChange,\n onGetNextScrollableMonths: this.onGetNextScrollableMonths,\n onGetPrevScrollableMonths: this.onGetPrevScrollableMonths,\n monthFormat: monthFormat,\n renderMonthText: renderMonthText,\n renderWeekHeaderElement: renderWeekHeaderElement,\n withPortal: withPortal,\n hidden: !focusedInput,\n initialVisibleMonth: function initialVisibleMonth() {\n return currentMonth;\n },\n daySize: daySize,\n onOutsideClick: onOutsideClick,\n disablePrev: disablePrev,\n disableNext: disableNext,\n dayPickerNavigationInlineStyles: dayPickerNavigationInlineStyles,\n navPosition: navPosition,\n navPrev: navPrev,\n navNext: navNext,\n renderNavPrevButton: renderNavPrevButton,\n renderNavNextButton: renderNavNextButton,\n noNavButtons: noNavButtons,\n noNavPrevButton: noNavPrevButton,\n noNavNextButton: noNavNextButton,\n renderCalendarDay: renderCalendarDay,\n renderDayContents: renderDayContents,\n renderCalendarInfo: renderCalendarInfo,\n renderMonthElement: renderMonthElement,\n renderKeyboardShortcutsButton: renderKeyboardShortcutsButton,\n renderKeyboardShortcutsPanel: renderKeyboardShortcutsPanel,\n calendarInfoPosition: calendarInfoPosition,\n firstDayOfWeek: firstDayOfWeek,\n hideKeyboardShortcutsPanel: hideKeyboardShortcutsPanel,\n isFocused: isFocused,\n getFirstFocusableDay: this.getFirstFocusableDay,\n onBlur: onBlur,\n showKeyboardShortcuts: showKeyboardShortcuts,\n phrases: phrases,\n isRTL: isRTL,\n weekDayFormat: weekDayFormat,\n dayAriaLabelFormat: dayAriaLabelFormat,\n verticalHeight: verticalHeight,\n verticalBorderSpacing: verticalBorderSpacing,\n noBorder: noBorder,\n transitionDuration: transitionDuration,\n horizontalMonthPadding: horizontalMonthPadding\n });\n };\n\n return DayPickerRangeController;\n}(_react[\"default\"].PureComponent || _react[\"default\"].Component);\n\nexports[\"default\"] = DayPickerRangeController;\nDayPickerRangeController.propTypes = process.env.NODE_ENV !== \"production\" ? propTypes : {};\nDayPickerRangeController.defaultProps = defaultProps;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _enzymeShallowEqual = _interopRequireDefault(require(\"enzyme-shallow-equal\"));\n\nvar _slicedToArray2 = _interopRequireDefault(require(\"@babel/runtime/helpers/slicedToArray\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _assertThisInitialized2 = _interopRequireDefault(require(\"@babel/runtime/helpers/assertThisInitialized\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _reactMomentProptypes = _interopRequireDefault(require(\"react-moment-proptypes\"));\n\nvar _airbnbPropTypes = require(\"airbnb-prop-types\");\n\nvar _moment = _interopRequireDefault(require(\"moment\"));\n\nvar _object = _interopRequireDefault(require(\"object.values\"));\n\nvar _isTouchDevice = _interopRequireDefault(require(\"is-touch-device\"));\n\nvar _defaultPhrases = require(\"../defaultPhrases\");\n\nvar _getPhrasePropTypes = _interopRequireDefault(require(\"../utils/getPhrasePropTypes\"));\n\nvar _isSameDay = _interopRequireDefault(require(\"../utils/isSameDay\"));\n\nvar _isAfterDay = _interopRequireDefault(require(\"../utils/isAfterDay\"));\n\nvar _getVisibleDays = _interopRequireDefault(require(\"../utils/getVisibleDays\"));\n\nvar _toISODateString = _interopRequireDefault(require(\"../utils/toISODateString\"));\n\nvar _modifiers = require(\"../utils/modifiers\");\n\nvar _ScrollableOrientationShape = _interopRequireDefault(require(\"../shapes/ScrollableOrientationShape\"));\n\nvar _DayOfWeekShape = _interopRequireDefault(require(\"../shapes/DayOfWeekShape\"));\n\nvar _CalendarInfoPositionShape = _interopRequireDefault(require(\"../shapes/CalendarInfoPositionShape\"));\n\nvar _NavPositionShape = _interopRequireDefault(require(\"../shapes/NavPositionShape\"));\n\nvar _constants = require(\"../constants\");\n\nvar _DayPicker = _interopRequireDefault(require(\"./DayPicker\"));\n\nvar _getPooledMoment = _interopRequireDefault(require(\"../utils/getPooledMoment\"));\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nvar propTypes = process.env.NODE_ENV !== \"production\" ? (0, _airbnbPropTypes.forbidExtraProps)({\n date: _reactMomentProptypes[\"default\"].momentObj,\n onDateChange: _propTypes[\"default\"].func,\n focused: _propTypes[\"default\"].bool,\n onFocusChange: _propTypes[\"default\"].func,\n onClose: _propTypes[\"default\"].func,\n keepOpenOnDateSelect: _propTypes[\"default\"].bool,\n isOutsideRange: _propTypes[\"default\"].func,\n isDayBlocked: _propTypes[\"default\"].func,\n isDayHighlighted: _propTypes[\"default\"].func,\n // DayPicker props\n renderMonthText: (0, _airbnbPropTypes.mutuallyExclusiveProps)(_propTypes[\"default\"].func, 'renderMonthText', 'renderMonthElement'),\n renderMonthElement: (0, _airbnbPropTypes.mutuallyExclusiveProps)(_propTypes[\"default\"].func, 'renderMonthText', 'renderMonthElement'),\n renderWeekHeaderElement: _propTypes[\"default\"].func,\n enableOutsideDays: _propTypes[\"default\"].bool,\n numberOfMonths: _propTypes[\"default\"].number,\n orientation: _ScrollableOrientationShape[\"default\"],\n withPortal: _propTypes[\"default\"].bool,\n initialVisibleMonth: _propTypes[\"default\"].func,\n firstDayOfWeek: _DayOfWeekShape[\"default\"],\n hideKeyboardShortcutsPanel: _propTypes[\"default\"].bool,\n daySize: _airbnbPropTypes.nonNegativeInteger,\n verticalHeight: _airbnbPropTypes.nonNegativeInteger,\n noBorder: _propTypes[\"default\"].bool,\n verticalBorderSpacing: _airbnbPropTypes.nonNegativeInteger,\n transitionDuration: _airbnbPropTypes.nonNegativeInteger,\n horizontalMonthPadding: _airbnbPropTypes.nonNegativeInteger,\n dayPickerNavigationInlineStyles: _propTypes[\"default\"].object,\n navPosition: _NavPositionShape[\"default\"],\n navPrev: _propTypes[\"default\"].node,\n navNext: _propTypes[\"default\"].node,\n renderNavPrevButton: _propTypes[\"default\"].func,\n renderNavNextButton: _propTypes[\"default\"].func,\n noNavButtons: _propTypes[\"default\"].bool,\n noNavNextButton: _propTypes[\"default\"].bool,\n noNavPrevButton: _propTypes[\"default\"].bool,\n onPrevMonthClick: _propTypes[\"default\"].func,\n onNextMonthClick: _propTypes[\"default\"].func,\n onOutsideClick: _propTypes[\"default\"].func,\n renderCalendarDay: _propTypes[\"default\"].func,\n renderDayContents: _propTypes[\"default\"].func,\n renderCalendarInfo: _propTypes[\"default\"].func,\n calendarInfoPosition: _CalendarInfoPositionShape[\"default\"],\n // accessibility\n onBlur: _propTypes[\"default\"].func,\n isFocused: _propTypes[\"default\"].bool,\n showKeyboardShortcuts: _propTypes[\"default\"].bool,\n onTab: _propTypes[\"default\"].func,\n onShiftTab: _propTypes[\"default\"].func,\n // i18n\n monthFormat: _propTypes[\"default\"].string,\n weekDayFormat: _propTypes[\"default\"].string,\n phrases: _propTypes[\"default\"].shape((0, _getPhrasePropTypes[\"default\"])(_defaultPhrases.DayPickerPhrases)),\n dayAriaLabelFormat: _propTypes[\"default\"].string,\n isRTL: _propTypes[\"default\"].bool\n}) : {};\nvar defaultProps = {\n date: undefined,\n // TODO: use null\n onDateChange: function onDateChange() {},\n focused: false,\n onFocusChange: function onFocusChange() {},\n onClose: function onClose() {},\n keepOpenOnDateSelect: false,\n isOutsideRange: function isOutsideRange() {},\n isDayBlocked: function isDayBlocked() {},\n isDayHighlighted: function isDayHighlighted() {},\n // DayPicker props\n renderMonthText: null,\n renderWeekHeaderElement: null,\n enableOutsideDays: false,\n numberOfMonths: 1,\n orientation: _constants.HORIZONTAL_ORIENTATION,\n withPortal: false,\n hideKeyboardShortcutsPanel: false,\n initialVisibleMonth: null,\n firstDayOfWeek: null,\n daySize: _constants.DAY_SIZE,\n verticalHeight: null,\n noBorder: false,\n verticalBorderSpacing: undefined,\n transitionDuration: undefined,\n horizontalMonthPadding: 13,\n dayPickerNavigationInlineStyles: null,\n navPosition: _constants.NAV_POSITION_TOP,\n navPrev: null,\n navNext: null,\n renderNavPrevButton: null,\n renderNavNextButton: null,\n noNavButtons: false,\n noNavNextButton: false,\n noNavPrevButton: false,\n onPrevMonthClick: function onPrevMonthClick() {},\n onNextMonthClick: function onNextMonthClick() {},\n onOutsideClick: function onOutsideClick() {},\n renderCalendarDay: undefined,\n renderDayContents: null,\n renderCalendarInfo: null,\n renderMonthElement: null,\n calendarInfoPosition: _constants.INFO_POSITION_BOTTOM,\n // accessibility\n onBlur: function onBlur() {},\n isFocused: false,\n showKeyboardShortcuts: false,\n onTab: function onTab() {},\n onShiftTab: function onShiftTab() {},\n // i18n\n monthFormat: 'MMMM YYYY',\n weekDayFormat: 'dd',\n phrases: _defaultPhrases.DayPickerPhrases,\n dayAriaLabelFormat: undefined,\n isRTL: false\n};\n\nvar DayPickerSingleDateController =\n/*#__PURE__*/\nfunction (_ref) {\n (0, _inheritsLoose2[\"default\"])(DayPickerSingleDateController, _ref);\n var _proto = DayPickerSingleDateController.prototype;\n\n _proto[!_react[\"default\"].PureComponent && \"shouldComponentUpdate\"] = function (nextProps, nextState) {\n return !(0, _enzymeShallowEqual[\"default\"])(this.props, nextProps) || !(0, _enzymeShallowEqual[\"default\"])(this.state, nextState);\n };\n\n function DayPickerSingleDateController(props) {\n var _this;\n\n _this = _ref.call(this, props) || this;\n _this.isTouchDevice = false;\n _this.today = (0, _moment[\"default\"])();\n _this.modifiers = {\n today: function today(day) {\n return _this.isToday(day);\n },\n blocked: function blocked(day) {\n return _this.isBlocked(day);\n },\n 'blocked-calendar': function blockedCalendar(day) {\n return props.isDayBlocked(day);\n },\n 'blocked-out-of-range': function blockedOutOfRange(day) {\n return props.isOutsideRange(day);\n },\n 'highlighted-calendar': function highlightedCalendar(day) {\n return props.isDayHighlighted(day);\n },\n valid: function valid(day) {\n return !_this.isBlocked(day);\n },\n hovered: function hovered(day) {\n return _this.isHovered(day);\n },\n selected: function selected(day) {\n return _this.isSelected(day);\n },\n 'first-day-of-week': function firstDayOfWeek(day) {\n return _this.isFirstDayOfWeek(day);\n },\n 'last-day-of-week': function lastDayOfWeek(day) {\n return _this.isLastDayOfWeek(day);\n }\n };\n\n var _this$getStateForNewM = _this.getStateForNewMonth(props),\n currentMonth = _this$getStateForNewM.currentMonth,\n visibleDays = _this$getStateForNewM.visibleDays;\n\n _this.state = {\n hoverDate: null,\n currentMonth: currentMonth,\n visibleDays: visibleDays\n };\n _this.onDayMouseEnter = _this.onDayMouseEnter.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.onDayMouseLeave = _this.onDayMouseLeave.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.onDayClick = _this.onDayClick.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.onPrevMonthClick = _this.onPrevMonthClick.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.onNextMonthClick = _this.onNextMonthClick.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.onMonthChange = _this.onMonthChange.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.onYearChange = _this.onYearChange.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.onGetNextScrollableMonths = _this.onGetNextScrollableMonths.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.onGetPrevScrollableMonths = _this.onGetPrevScrollableMonths.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.getFirstFocusableDay = _this.getFirstFocusableDay.bind((0, _assertThisInitialized2[\"default\"])(_this));\n return _this;\n }\n\n _proto.componentDidMount = function componentDidMount() {\n this.isTouchDevice = (0, _isTouchDevice[\"default\"])();\n };\n\n _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n var _this2 = this;\n\n var date = nextProps.date,\n focused = nextProps.focused,\n isOutsideRange = nextProps.isOutsideRange,\n isDayBlocked = nextProps.isDayBlocked,\n isDayHighlighted = nextProps.isDayHighlighted,\n initialVisibleMonth = nextProps.initialVisibleMonth,\n numberOfMonths = nextProps.numberOfMonths,\n enableOutsideDays = nextProps.enableOutsideDays;\n var _this$props = this.props,\n prevIsOutsideRange = _this$props.isOutsideRange,\n prevIsDayBlocked = _this$props.isDayBlocked,\n prevIsDayHighlighted = _this$props.isDayHighlighted,\n prevNumberOfMonths = _this$props.numberOfMonths,\n prevEnableOutsideDays = _this$props.enableOutsideDays,\n prevInitialVisibleMonth = _this$props.initialVisibleMonth,\n prevFocused = _this$props.focused,\n prevDate = _this$props.date;\n var visibleDays = this.state.visibleDays;\n var recomputeOutsideRange = false;\n var recomputeDayBlocked = false;\n var recomputeDayHighlighted = false;\n\n if (isOutsideRange !== prevIsOutsideRange) {\n this.modifiers['blocked-out-of-range'] = function (day) {\n return isOutsideRange(day);\n };\n\n recomputeOutsideRange = true;\n }\n\n if (isDayBlocked !== prevIsDayBlocked) {\n this.modifiers['blocked-calendar'] = function (day) {\n return isDayBlocked(day);\n };\n\n recomputeDayBlocked = true;\n }\n\n if (isDayHighlighted !== prevIsDayHighlighted) {\n this.modifiers['highlighted-calendar'] = function (day) {\n return isDayHighlighted(day);\n };\n\n recomputeDayHighlighted = true;\n }\n\n var recomputePropModifiers = recomputeOutsideRange || recomputeDayBlocked || recomputeDayHighlighted;\n\n if (numberOfMonths !== prevNumberOfMonths || enableOutsideDays !== prevEnableOutsideDays || initialVisibleMonth !== prevInitialVisibleMonth && !prevFocused && focused) {\n var newMonthState = this.getStateForNewMonth(nextProps);\n var currentMonth = newMonthState.currentMonth;\n visibleDays = newMonthState.visibleDays;\n this.setState({\n currentMonth: currentMonth,\n visibleDays: visibleDays\n });\n }\n\n var didDateChange = date !== prevDate;\n var didFocusChange = focused !== prevFocused;\n var modifiers = {};\n\n if (didDateChange) {\n modifiers = this.deleteModifier(modifiers, prevDate, 'selected');\n modifiers = this.addModifier(modifiers, date, 'selected');\n }\n\n if (didFocusChange || recomputePropModifiers) {\n (0, _object[\"default\"])(visibleDays).forEach(function (days) {\n Object.keys(days).forEach(function (day) {\n var momentObj = (0, _getPooledMoment[\"default\"])(day);\n\n if (_this2.isBlocked(momentObj)) {\n modifiers = _this2.addModifier(modifiers, momentObj, 'blocked');\n } else {\n modifiers = _this2.deleteModifier(modifiers, momentObj, 'blocked');\n }\n\n if (didFocusChange || recomputeOutsideRange) {\n if (isOutsideRange(momentObj)) {\n modifiers = _this2.addModifier(modifiers, momentObj, 'blocked-out-of-range');\n } else {\n modifiers = _this2.deleteModifier(modifiers, momentObj, 'blocked-out-of-range');\n }\n }\n\n if (didFocusChange || recomputeDayBlocked) {\n if (isDayBlocked(momentObj)) {\n modifiers = _this2.addModifier(modifiers, momentObj, 'blocked-calendar');\n } else {\n modifiers = _this2.deleteModifier(modifiers, momentObj, 'blocked-calendar');\n }\n }\n\n if (didFocusChange || recomputeDayHighlighted) {\n if (isDayHighlighted(momentObj)) {\n modifiers = _this2.addModifier(modifiers, momentObj, 'highlighted-calendar');\n } else {\n modifiers = _this2.deleteModifier(modifiers, momentObj, 'highlighted-calendar');\n }\n }\n });\n });\n }\n\n var today = (0, _moment[\"default\"])();\n\n if (!(0, _isSameDay[\"default\"])(this.today, today)) {\n modifiers = this.deleteModifier(modifiers, this.today, 'today');\n modifiers = this.addModifier(modifiers, today, 'today');\n this.today = today;\n }\n\n if (Object.keys(modifiers).length > 0) {\n this.setState({\n visibleDays: _objectSpread({}, visibleDays, {}, modifiers)\n });\n }\n };\n\n _proto.componentWillUpdate = function componentWillUpdate() {\n this.today = (0, _moment[\"default\"])();\n };\n\n _proto.onDayClick = function onDayClick(day, e) {\n if (e) e.preventDefault();\n if (this.isBlocked(day)) return;\n var _this$props2 = this.props,\n onDateChange = _this$props2.onDateChange,\n keepOpenOnDateSelect = _this$props2.keepOpenOnDateSelect,\n onFocusChange = _this$props2.onFocusChange,\n onClose = _this$props2.onClose;\n onDateChange(day);\n\n if (!keepOpenOnDateSelect) {\n onFocusChange({\n focused: false\n });\n onClose({\n date: day\n });\n }\n };\n\n _proto.onDayMouseEnter = function onDayMouseEnter(day) {\n if (this.isTouchDevice) return;\n var _this$state = this.state,\n hoverDate = _this$state.hoverDate,\n visibleDays = _this$state.visibleDays;\n var modifiers = this.deleteModifier({}, hoverDate, 'hovered');\n modifiers = this.addModifier(modifiers, day, 'hovered');\n this.setState({\n hoverDate: day,\n visibleDays: _objectSpread({}, visibleDays, {}, modifiers)\n });\n };\n\n _proto.onDayMouseLeave = function onDayMouseLeave() {\n var _this$state2 = this.state,\n hoverDate = _this$state2.hoverDate,\n visibleDays = _this$state2.visibleDays;\n if (this.isTouchDevice || !hoverDate) return;\n var modifiers = this.deleteModifier({}, hoverDate, 'hovered');\n this.setState({\n hoverDate: null,\n visibleDays: _objectSpread({}, visibleDays, {}, modifiers)\n });\n };\n\n _proto.onPrevMonthClick = function onPrevMonthClick() {\n var _this$props3 = this.props,\n onPrevMonthClick = _this$props3.onPrevMonthClick,\n numberOfMonths = _this$props3.numberOfMonths,\n enableOutsideDays = _this$props3.enableOutsideDays;\n var _this$state3 = this.state,\n currentMonth = _this$state3.currentMonth,\n visibleDays = _this$state3.visibleDays;\n var newVisibleDays = {};\n Object.keys(visibleDays).sort().slice(0, numberOfMonths + 1).forEach(function (month) {\n newVisibleDays[month] = visibleDays[month];\n });\n var prevMonth = currentMonth.clone().subtract(1, 'month');\n var prevMonthVisibleDays = (0, _getVisibleDays[\"default\"])(prevMonth, 1, enableOutsideDays);\n this.setState({\n currentMonth: prevMonth,\n visibleDays: _objectSpread({}, newVisibleDays, {}, this.getModifiers(prevMonthVisibleDays))\n }, function () {\n onPrevMonthClick(prevMonth.clone());\n });\n };\n\n _proto.onNextMonthClick = function onNextMonthClick() {\n var _this$props4 = this.props,\n onNextMonthClick = _this$props4.onNextMonthClick,\n numberOfMonths = _this$props4.numberOfMonths,\n enableOutsideDays = _this$props4.enableOutsideDays;\n var _this$state4 = this.state,\n currentMonth = _this$state4.currentMonth,\n visibleDays = _this$state4.visibleDays;\n var newVisibleDays = {};\n Object.keys(visibleDays).sort().slice(1).forEach(function (month) {\n newVisibleDays[month] = visibleDays[month];\n });\n var nextMonth = currentMonth.clone().add(numberOfMonths, 'month');\n var nextMonthVisibleDays = (0, _getVisibleDays[\"default\"])(nextMonth, 1, enableOutsideDays);\n var newCurrentMonth = currentMonth.clone().add(1, 'month');\n this.setState({\n currentMonth: newCurrentMonth,\n visibleDays: _objectSpread({}, newVisibleDays, {}, this.getModifiers(nextMonthVisibleDays))\n }, function () {\n onNextMonthClick(newCurrentMonth.clone());\n });\n };\n\n _proto.onMonthChange = function onMonthChange(newMonth) {\n var _this$props5 = this.props,\n numberOfMonths = _this$props5.numberOfMonths,\n enableOutsideDays = _this$props5.enableOutsideDays,\n orientation = _this$props5.orientation;\n var withoutTransitionMonths = orientation === _constants.VERTICAL_SCROLLABLE;\n var newVisibleDays = (0, _getVisibleDays[\"default\"])(newMonth, numberOfMonths, enableOutsideDays, withoutTransitionMonths);\n this.setState({\n currentMonth: newMonth.clone(),\n visibleDays: this.getModifiers(newVisibleDays)\n });\n };\n\n _proto.onYearChange = function onYearChange(newMonth) {\n var _this$props6 = this.props,\n numberOfMonths = _this$props6.numberOfMonths,\n enableOutsideDays = _this$props6.enableOutsideDays,\n orientation = _this$props6.orientation;\n var withoutTransitionMonths = orientation === _constants.VERTICAL_SCROLLABLE;\n var newVisibleDays = (0, _getVisibleDays[\"default\"])(newMonth, numberOfMonths, enableOutsideDays, withoutTransitionMonths);\n this.setState({\n currentMonth: newMonth.clone(),\n visibleDays: this.getModifiers(newVisibleDays)\n });\n };\n\n _proto.onGetNextScrollableMonths = function onGetNextScrollableMonths() {\n var _this$props7 = this.props,\n numberOfMonths = _this$props7.numberOfMonths,\n enableOutsideDays = _this$props7.enableOutsideDays;\n var _this$state5 = this.state,\n currentMonth = _this$state5.currentMonth,\n visibleDays = _this$state5.visibleDays;\n var numberOfVisibleMonths = Object.keys(visibleDays).length;\n var nextMonth = currentMonth.clone().add(numberOfVisibleMonths, 'month');\n var newVisibleDays = (0, _getVisibleDays[\"default\"])(nextMonth, numberOfMonths, enableOutsideDays, true);\n this.setState({\n visibleDays: _objectSpread({}, visibleDays, {}, this.getModifiers(newVisibleDays))\n });\n };\n\n _proto.onGetPrevScrollableMonths = function onGetPrevScrollableMonths() {\n var _this$props8 = this.props,\n numberOfMonths = _this$props8.numberOfMonths,\n enableOutsideDays = _this$props8.enableOutsideDays;\n var _this$state6 = this.state,\n currentMonth = _this$state6.currentMonth,\n visibleDays = _this$state6.visibleDays;\n var firstPreviousMonth = currentMonth.clone().subtract(numberOfMonths, 'month');\n var newVisibleDays = (0, _getVisibleDays[\"default\"])(firstPreviousMonth, numberOfMonths, enableOutsideDays, true);\n this.setState({\n currentMonth: firstPreviousMonth.clone(),\n visibleDays: _objectSpread({}, visibleDays, {}, this.getModifiers(newVisibleDays))\n });\n };\n\n _proto.getFirstFocusableDay = function getFirstFocusableDay(newMonth) {\n var _this3 = this;\n\n var _this$props9 = this.props,\n date = _this$props9.date,\n numberOfMonths = _this$props9.numberOfMonths;\n var focusedDate = newMonth.clone().startOf('month');\n\n if (date) {\n focusedDate = date.clone();\n }\n\n if (this.isBlocked(focusedDate)) {\n var days = [];\n var lastVisibleDay = newMonth.clone().add(numberOfMonths - 1, 'months').endOf('month');\n var currentDay = focusedDate.clone();\n\n while (!(0, _isAfterDay[\"default\"])(currentDay, lastVisibleDay)) {\n currentDay = currentDay.clone().add(1, 'day');\n days.push(currentDay);\n }\n\n var viableDays = days.filter(function (day) {\n return !_this3.isBlocked(day) && (0, _isAfterDay[\"default\"])(day, focusedDate);\n });\n\n if (viableDays.length > 0) {\n var _viableDays = (0, _slicedToArray2[\"default\"])(viableDays, 1);\n\n focusedDate = _viableDays[0];\n }\n }\n\n return focusedDate;\n };\n\n _proto.getModifiers = function getModifiers(visibleDays) {\n var _this4 = this;\n\n var modifiers = {};\n Object.keys(visibleDays).forEach(function (month) {\n modifiers[month] = {};\n visibleDays[month].forEach(function (day) {\n modifiers[month][(0, _toISODateString[\"default\"])(day)] = _this4.getModifiersForDay(day);\n });\n });\n return modifiers;\n };\n\n _proto.getModifiersForDay = function getModifiersForDay(day) {\n var _this5 = this;\n\n return new Set(Object.keys(this.modifiers).filter(function (modifier) {\n return _this5.modifiers[modifier](day);\n }));\n };\n\n _proto.getStateForNewMonth = function getStateForNewMonth(nextProps) {\n var _this6 = this;\n\n var initialVisibleMonth = nextProps.initialVisibleMonth,\n date = nextProps.date,\n numberOfMonths = nextProps.numberOfMonths,\n orientation = nextProps.orientation,\n enableOutsideDays = nextProps.enableOutsideDays;\n var initialVisibleMonthThunk = initialVisibleMonth || (date ? function () {\n return date;\n } : function () {\n return _this6.today;\n });\n var currentMonth = initialVisibleMonthThunk();\n var withoutTransitionMonths = orientation === _constants.VERTICAL_SCROLLABLE;\n var visibleDays = this.getModifiers((0, _getVisibleDays[\"default\"])(currentMonth, numberOfMonths, enableOutsideDays, withoutTransitionMonths));\n return {\n currentMonth: currentMonth,\n visibleDays: visibleDays\n };\n };\n\n _proto.addModifier = function addModifier(updatedDays, day, modifier) {\n return (0, _modifiers.addModifier)(updatedDays, day, modifier, this.props, this.state);\n };\n\n _proto.deleteModifier = function deleteModifier(updatedDays, day, modifier) {\n return (0, _modifiers.deleteModifier)(updatedDays, day, modifier, this.props, this.state);\n };\n\n _proto.isBlocked = function isBlocked(day) {\n var _this$props10 = this.props,\n isDayBlocked = _this$props10.isDayBlocked,\n isOutsideRange = _this$props10.isOutsideRange;\n return isDayBlocked(day) || isOutsideRange(day);\n };\n\n _proto.isHovered = function isHovered(day) {\n var _ref2 = this.state || {},\n hoverDate = _ref2.hoverDate;\n\n return (0, _isSameDay[\"default\"])(day, hoverDate);\n };\n\n _proto.isSelected = function isSelected(day) {\n var date = this.props.date;\n return (0, _isSameDay[\"default\"])(day, date);\n };\n\n _proto.isToday = function isToday(day) {\n return (0, _isSameDay[\"default\"])(day, this.today);\n };\n\n _proto.isFirstDayOfWeek = function isFirstDayOfWeek(day) {\n var firstDayOfWeek = this.props.firstDayOfWeek;\n return day.day() === (firstDayOfWeek || _moment[\"default\"].localeData().firstDayOfWeek());\n };\n\n _proto.isLastDayOfWeek = function isLastDayOfWeek(day) {\n var firstDayOfWeek = this.props.firstDayOfWeek;\n return day.day() === ((firstDayOfWeek || _moment[\"default\"].localeData().firstDayOfWeek()) + 6) % 7;\n };\n\n _proto.render = function render() {\n var _this$props11 = this.props,\n numberOfMonths = _this$props11.numberOfMonths,\n orientation = _this$props11.orientation,\n monthFormat = _this$props11.monthFormat,\n renderMonthText = _this$props11.renderMonthText,\n renderWeekHeaderElement = _this$props11.renderWeekHeaderElement,\n dayPickerNavigationInlineStyles = _this$props11.dayPickerNavigationInlineStyles,\n navPosition = _this$props11.navPosition,\n navPrev = _this$props11.navPrev,\n navNext = _this$props11.navNext,\n renderNavPrevButton = _this$props11.renderNavPrevButton,\n renderNavNextButton = _this$props11.renderNavNextButton,\n noNavButtons = _this$props11.noNavButtons,\n noNavPrevButton = _this$props11.noNavPrevButton,\n noNavNextButton = _this$props11.noNavNextButton,\n onOutsideClick = _this$props11.onOutsideClick,\n onShiftTab = _this$props11.onShiftTab,\n onTab = _this$props11.onTab,\n withPortal = _this$props11.withPortal,\n focused = _this$props11.focused,\n enableOutsideDays = _this$props11.enableOutsideDays,\n hideKeyboardShortcutsPanel = _this$props11.hideKeyboardShortcutsPanel,\n daySize = _this$props11.daySize,\n firstDayOfWeek = _this$props11.firstDayOfWeek,\n renderCalendarDay = _this$props11.renderCalendarDay,\n renderDayContents = _this$props11.renderDayContents,\n renderCalendarInfo = _this$props11.renderCalendarInfo,\n renderMonthElement = _this$props11.renderMonthElement,\n calendarInfoPosition = _this$props11.calendarInfoPosition,\n isFocused = _this$props11.isFocused,\n isRTL = _this$props11.isRTL,\n phrases = _this$props11.phrases,\n dayAriaLabelFormat = _this$props11.dayAriaLabelFormat,\n onBlur = _this$props11.onBlur,\n showKeyboardShortcuts = _this$props11.showKeyboardShortcuts,\n weekDayFormat = _this$props11.weekDayFormat,\n verticalHeight = _this$props11.verticalHeight,\n noBorder = _this$props11.noBorder,\n transitionDuration = _this$props11.transitionDuration,\n verticalBorderSpacing = _this$props11.verticalBorderSpacing,\n horizontalMonthPadding = _this$props11.horizontalMonthPadding;\n var _this$state7 = this.state,\n currentMonth = _this$state7.currentMonth,\n visibleDays = _this$state7.visibleDays;\n return _react[\"default\"].createElement(_DayPicker[\"default\"], {\n orientation: orientation,\n enableOutsideDays: enableOutsideDays,\n modifiers: visibleDays,\n numberOfMonths: numberOfMonths,\n onDayClick: this.onDayClick,\n onDayMouseEnter: this.onDayMouseEnter,\n onDayMouseLeave: this.onDayMouseLeave,\n onPrevMonthClick: this.onPrevMonthClick,\n onNextMonthClick: this.onNextMonthClick,\n onMonthChange: this.onMonthChange,\n onYearChange: this.onYearChange,\n onGetNextScrollableMonths: this.onGetNextScrollableMonths,\n onGetPrevScrollableMonths: this.onGetPrevScrollableMonths,\n monthFormat: monthFormat,\n withPortal: withPortal,\n hidden: !focused,\n hideKeyboardShortcutsPanel: hideKeyboardShortcutsPanel,\n initialVisibleMonth: function initialVisibleMonth() {\n return currentMonth;\n },\n firstDayOfWeek: firstDayOfWeek,\n onOutsideClick: onOutsideClick,\n dayPickerNavigationInlineStyles: dayPickerNavigationInlineStyles,\n navPosition: navPosition,\n navPrev: navPrev,\n navNext: navNext,\n renderNavPrevButton: renderNavPrevButton,\n renderNavNextButton: renderNavNextButton,\n noNavButtons: noNavButtons,\n noNavNextButton: noNavNextButton,\n noNavPrevButton: noNavPrevButton,\n renderMonthText: renderMonthText,\n renderWeekHeaderElement: renderWeekHeaderElement,\n renderCalendarDay: renderCalendarDay,\n renderDayContents: renderDayContents,\n renderCalendarInfo: renderCalendarInfo,\n renderMonthElement: renderMonthElement,\n calendarInfoPosition: calendarInfoPosition,\n isFocused: isFocused,\n getFirstFocusableDay: this.getFirstFocusableDay,\n onBlur: onBlur,\n onTab: onTab,\n onShiftTab: onShiftTab,\n phrases: phrases,\n daySize: daySize,\n isRTL: isRTL,\n showKeyboardShortcuts: showKeyboardShortcuts,\n weekDayFormat: weekDayFormat,\n dayAriaLabelFormat: dayAriaLabelFormat,\n verticalHeight: verticalHeight,\n noBorder: noBorder,\n transitionDuration: transitionDuration,\n verticalBorderSpacing: verticalBorderSpacing,\n horizontalMonthPadding: horizontalMonthPadding\n });\n };\n\n return DayPickerSingleDateController;\n}(_react[\"default\"].PureComponent || _react[\"default\"].Component);\n\nexports[\"default\"] = DayPickerSingleDateController;\nDayPickerSingleDateController.propTypes = process.env.NODE_ENV !== \"production\" ? propTypes : {};\nDayPickerSingleDateController.defaultProps = defaultProps;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _airbnbPropTypes = require(\"airbnb-prop-types\");\n\nvar _reactWithStyles = require(\"react-with-styles\");\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nvar propTypes = process.env.NODE_ENV !== \"production\" ? (0, _airbnbPropTypes.forbidExtraProps)(_objectSpread({}, _reactWithStyles.withStylesPropTypes, {\n unicode: _propTypes[\"default\"].string.isRequired,\n label: _propTypes[\"default\"].string.isRequired,\n action: _propTypes[\"default\"].string.isRequired,\n block: _propTypes[\"default\"].bool\n})) : {};\nvar defaultProps = {\n block: false\n};\n\nfunction KeyboardShortcutRow(_ref) {\n var unicode = _ref.unicode,\n label = _ref.label,\n action = _ref.action,\n block = _ref.block,\n styles = _ref.styles;\n return _react[\"default\"].createElement(\"li\", (0, _reactWithStyles.css)(styles.KeyboardShortcutRow, block && styles.KeyboardShortcutRow__block), _react[\"default\"].createElement(\"div\", (0, _reactWithStyles.css)(styles.KeyboardShortcutRow_keyContainer, block && styles.KeyboardShortcutRow_keyContainer__block), _react[\"default\"].createElement(\"span\", (0, _extends2[\"default\"])({}, (0, _reactWithStyles.css)(styles.KeyboardShortcutRow_key), {\n role: \"img\",\n \"aria-label\": \"\".concat(label, \",\") // add comma so screen readers will pause before reading action\n\n }), unicode)), _react[\"default\"].createElement(\"div\", (0, _reactWithStyles.css)(styles.KeyboardShortcutRow_action), action));\n}\n\nKeyboardShortcutRow.propTypes = process.env.NODE_ENV !== \"production\" ? propTypes : {};\nKeyboardShortcutRow.defaultProps = defaultProps;\n\nvar _default = (0, _reactWithStyles.withStyles)(function (_ref2) {\n var color = _ref2.reactDates.color;\n return {\n KeyboardShortcutRow: {\n listStyle: 'none',\n margin: '6px 0'\n },\n KeyboardShortcutRow__block: {\n marginBottom: 16\n },\n KeyboardShortcutRow_keyContainer: {\n display: 'inline-block',\n whiteSpace: 'nowrap',\n textAlign: 'right',\n // is not handled by isRTL\n marginRight: 6 // is not handled by isRTL\n\n },\n KeyboardShortcutRow_keyContainer__block: {\n textAlign: 'left',\n // is not handled by isRTL\n display: 'inline'\n },\n KeyboardShortcutRow_key: {\n fontFamily: 'monospace',\n fontSize: 12,\n textTransform: 'uppercase',\n background: color.core.grayLightest,\n padding: '2px 6px'\n },\n KeyboardShortcutRow_action: {\n display: 'inline',\n wordBreak: 'break-word',\n marginLeft: 8 // is not handled by isRTL\n\n }\n };\n}, {\n pureComponent: typeof _react[\"default\"].PureComponent !== 'undefined'\n})(KeyboardShortcutRow);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar LeftArrow = function LeftArrow(props) {\n return _react[\"default\"].createElement(\"svg\", props, _react[\"default\"].createElement(\"path\", {\n d: \"M336 275L126 485h806c13 0 23 10 23 23s-10 23-23 23H126l210 210c11 11 11 21 0 32-5 5-10 7-16 7s-11-2-16-7L55 524c-11-11-11-21 0-32l249-249c21-22 53 10 32 32z\"\n }));\n};\n\nLeftArrow.defaultProps = {\n focusable: \"false\",\n viewBox: \"0 0 1000 1000\"\n};\nvar _default = LeftArrow;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar RightArrow = function RightArrow(props) {\n return _react[\"default\"].createElement(\"svg\", props, _react[\"default\"].createElement(\"path\", {\n d: \"M694 242l249 250c12 11 12 21 1 32L694 773c-5 5-10 7-16 7s-11-2-16-7c-11-11-11-21 0-32l210-210H68c-13 0-23-10-23-23s10-23 23-23h806L662 275c-21-22 11-54 32-33z\"\n }));\n};\n\nRightArrow.defaultProps = {\n focusable: \"false\",\n viewBox: \"0 0 1000 1000\"\n};\nvar _default = RightArrow;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = exports.PureSingleDatePicker = void 0;\n\nvar _enzymeShallowEqual = _interopRequireDefault(require(\"enzyme-shallow-equal\"));\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _assertThisInitialized2 = _interopRequireDefault(require(\"@babel/runtime/helpers/assertThisInitialized\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _moment = _interopRequireDefault(require(\"moment\"));\n\nvar _reactWithStyles = require(\"react-with-styles\");\n\nvar _reactPortal = require(\"react-portal\");\n\nvar _airbnbPropTypes = require(\"airbnb-prop-types\");\n\nvar _consolidatedEvents = require(\"consolidated-events\");\n\nvar _isTouchDevice = _interopRequireDefault(require(\"is-touch-device\"));\n\nvar _reactOutsideClickHandler = _interopRequireDefault(require(\"react-outside-click-handler\"));\n\nvar _SingleDatePickerShape = _interopRequireDefault(require(\"../shapes/SingleDatePickerShape\"));\n\nvar _defaultPhrases = require(\"../defaultPhrases\");\n\nvar _getResponsiveContainerStyles = _interopRequireDefault(require(\"../utils/getResponsiveContainerStyles\"));\n\nvar _getDetachedContainerStyles = _interopRequireDefault(require(\"../utils/getDetachedContainerStyles\"));\n\nvar _getInputHeight = _interopRequireDefault(require(\"../utils/getInputHeight\"));\n\nvar _isInclusivelyAfterDay = _interopRequireDefault(require(\"../utils/isInclusivelyAfterDay\"));\n\nvar _disableScroll2 = _interopRequireDefault(require(\"../utils/disableScroll\"));\n\nvar _noflip = _interopRequireDefault(require(\"../utils/noflip\"));\n\nvar _SingleDatePickerInputController = _interopRequireDefault(require(\"./SingleDatePickerInputController\"));\n\nvar _DayPickerSingleDateController = _interopRequireDefault(require(\"./DayPickerSingleDateController\"));\n\nvar _CloseButton = _interopRequireDefault(require(\"./CloseButton\"));\n\nvar _constants = require(\"../constants\");\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nvar propTypes = process.env.NODE_ENV !== \"production\" ? (0, _airbnbPropTypes.forbidExtraProps)(_objectSpread({}, _reactWithStyles.withStylesPropTypes, {}, _SingleDatePickerShape[\"default\"])) : {};\nvar defaultProps = {\n // required props for a functional interactive SingleDatePicker\n date: null,\n focused: false,\n // input related props\n id: 'date',\n placeholder: 'Date',\n ariaLabel: undefined,\n disabled: false,\n required: false,\n readOnly: false,\n screenReaderInputMessage: '',\n showClearDate: false,\n showDefaultInputIcon: false,\n inputIconPosition: _constants.ICON_BEFORE_POSITION,\n customInputIcon: null,\n customCloseIcon: null,\n noBorder: false,\n block: false,\n small: false,\n regular: false,\n verticalSpacing: _constants.DEFAULT_VERTICAL_SPACING,\n keepFocusOnInput: false,\n // calendar presentation and interaction related props\n orientation: _constants.HORIZONTAL_ORIENTATION,\n anchorDirection: _constants.ANCHOR_LEFT,\n openDirection: _constants.OPEN_DOWN,\n horizontalMargin: 0,\n withPortal: false,\n withFullScreenPortal: false,\n appendToBody: false,\n disableScroll: false,\n initialVisibleMonth: null,\n firstDayOfWeek: null,\n numberOfMonths: 2,\n keepOpenOnDateSelect: false,\n reopenPickerOnClearDate: false,\n renderCalendarInfo: null,\n calendarInfoPosition: _constants.INFO_POSITION_BOTTOM,\n hideKeyboardShortcutsPanel: false,\n daySize: _constants.DAY_SIZE,\n isRTL: false,\n verticalHeight: null,\n transitionDuration: undefined,\n horizontalMonthPadding: 13,\n // navigation related props\n dayPickerNavigationInlineStyles: null,\n navPosition: _constants.NAV_POSITION_TOP,\n navPrev: null,\n navNext: null,\n renderNavPrevButton: null,\n renderNavNextButton: null,\n onPrevMonthClick: function onPrevMonthClick() {},\n onNextMonthClick: function onNextMonthClick() {},\n onClose: function onClose() {},\n // month presentation and interaction related props\n renderMonthText: null,\n renderWeekHeaderElement: null,\n // day presentation and interaction related props\n renderCalendarDay: undefined,\n renderDayContents: null,\n renderMonthElement: null,\n enableOutsideDays: false,\n isDayBlocked: function isDayBlocked() {\n return false;\n },\n isOutsideRange: function isOutsideRange(day) {\n return !(0, _isInclusivelyAfterDay[\"default\"])(day, (0, _moment[\"default\"])());\n },\n isDayHighlighted: function isDayHighlighted() {},\n // internationalization props\n displayFormat: function displayFormat() {\n return _moment[\"default\"].localeData().longDateFormat('L');\n },\n monthFormat: 'MMMM YYYY',\n weekDayFormat: 'dd',\n phrases: _defaultPhrases.SingleDatePickerPhrases,\n dayAriaLabelFormat: undefined\n};\n\nvar SingleDatePicker =\n/*#__PURE__*/\nfunction (_ref) {\n (0, _inheritsLoose2[\"default\"])(SingleDatePicker, _ref);\n var _proto = SingleDatePicker.prototype;\n\n _proto[!_react[\"default\"].PureComponent && \"shouldComponentUpdate\"] = function (nextProps, nextState) {\n return !(0, _enzymeShallowEqual[\"default\"])(this.props, nextProps) || !(0, _enzymeShallowEqual[\"default\"])(this.state, nextState);\n };\n\n function SingleDatePicker(props) {\n var _this;\n\n _this = _ref.call(this, props) || this;\n _this.isTouchDevice = false;\n _this.state = {\n dayPickerContainerStyles: {},\n isDayPickerFocused: false,\n isInputFocused: false,\n showKeyboardShortcuts: false\n };\n _this.onFocusOut = _this.onFocusOut.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.onOutsideClick = _this.onOutsideClick.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.onInputFocus = _this.onInputFocus.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.onDayPickerFocus = _this.onDayPickerFocus.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.onDayPickerBlur = _this.onDayPickerBlur.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.showKeyboardShortcutsPanel = _this.showKeyboardShortcutsPanel.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.responsivizePickerPosition = _this.responsivizePickerPosition.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.disableScroll = _this.disableScroll.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.setDayPickerContainerRef = _this.setDayPickerContainerRef.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.setContainerRef = _this.setContainerRef.bind((0, _assertThisInitialized2[\"default\"])(_this));\n return _this;\n }\n /* istanbul ignore next */\n\n\n _proto.componentDidMount = function componentDidMount() {\n this.removeResizeEventListener = (0, _consolidatedEvents.addEventListener)(window, 'resize', this.responsivizePickerPosition, {\n passive: true\n });\n this.responsivizePickerPosition();\n this.disableScroll();\n var focused = this.props.focused;\n\n if (focused) {\n this.setState({\n isInputFocused: true\n });\n }\n\n this.isTouchDevice = (0, _isTouchDevice[\"default\"])();\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var focused = this.props.focused;\n\n if (!prevProps.focused && focused) {\n this.responsivizePickerPosition();\n this.disableScroll();\n } else if (prevProps.focused && !focused) {\n if (this.enableScroll) this.enableScroll();\n }\n }\n /* istanbul ignore next */\n ;\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.removeResizeEventListener) this.removeResizeEventListener();\n if (this.removeFocusOutEventListener) this.removeFocusOutEventListener();\n if (this.enableScroll) this.enableScroll();\n };\n\n _proto.onOutsideClick = function onOutsideClick(event) {\n var _this$props = this.props,\n focused = _this$props.focused,\n onFocusChange = _this$props.onFocusChange,\n onClose = _this$props.onClose,\n date = _this$props.date,\n appendToBody = _this$props.appendToBody;\n if (!focused) return;\n if (appendToBody && this.dayPickerContainer.contains(event.target)) return;\n this.setState({\n isInputFocused: false,\n isDayPickerFocused: false,\n showKeyboardShortcuts: false\n });\n onFocusChange({\n focused: false\n });\n onClose({\n date: date\n });\n };\n\n _proto.onInputFocus = function onInputFocus(_ref2) {\n var focused = _ref2.focused;\n var _this$props2 = this.props,\n onFocusChange = _this$props2.onFocusChange,\n readOnly = _this$props2.readOnly,\n withPortal = _this$props2.withPortal,\n withFullScreenPortal = _this$props2.withFullScreenPortal,\n keepFocusOnInput = _this$props2.keepFocusOnInput;\n\n if (focused) {\n var withAnyPortal = withPortal || withFullScreenPortal;\n var moveFocusToDayPicker = withAnyPortal || readOnly && !keepFocusOnInput || this.isTouchDevice && !keepFocusOnInput;\n\n if (moveFocusToDayPicker) {\n this.onDayPickerFocus();\n } else {\n this.onDayPickerBlur();\n }\n }\n\n onFocusChange({\n focused: focused\n });\n };\n\n _proto.onDayPickerFocus = function onDayPickerFocus() {\n this.setState({\n isInputFocused: false,\n isDayPickerFocused: true,\n showKeyboardShortcuts: false\n });\n };\n\n _proto.onDayPickerBlur = function onDayPickerBlur() {\n this.setState({\n isInputFocused: true,\n isDayPickerFocused: false,\n showKeyboardShortcuts: false\n });\n };\n\n _proto.onFocusOut = function onFocusOut(e) {\n var onFocusChange = this.props.onFocusChange; // In cases where **relatedTarget** is not null, it points to the right\n // element here. However, in cases where it is null (such as clicking on a\n // specific day) or it is **document.body** (IE11), the appropriate value is **event.target**.\n //\n // We handle both situations here by using the ` || ` operator to fallback\n // to *event.target** when **relatedTarget** is not provided.\n\n var relatedTarget = e.relatedTarget === document.body ? e.target : e.relatedTarget || e.target;\n if (this.dayPickerContainer.contains(relatedTarget)) return;\n onFocusChange({\n focused: false\n });\n };\n\n _proto.setDayPickerContainerRef = function setDayPickerContainerRef(ref) {\n if (ref === this.dayPickerContainer) return;\n this.removeEventListeners();\n this.dayPickerContainer = ref;\n if (!ref) return;\n this.addEventListeners();\n };\n\n _proto.setContainerRef = function setContainerRef(ref) {\n this.container = ref;\n };\n\n _proto.addEventListeners = function addEventListeners() {\n // We manually set event because React has not implemented onFocusIn/onFocusOut.\n // Keep an eye on https://github.com/facebook/react/issues/6410 for updates\n // We use \"blur w/ useCapture param\" vs \"onfocusout\" for FF browser support\n this.removeFocusOutEventListener = (0, _consolidatedEvents.addEventListener)(this.dayPickerContainer, 'focusout', this.onFocusOut);\n };\n\n _proto.removeEventListeners = function removeEventListeners() {\n if (this.removeFocusOutEventListener) this.removeFocusOutEventListener();\n };\n\n _proto.disableScroll = function disableScroll() {\n var _this$props3 = this.props,\n appendToBody = _this$props3.appendToBody,\n propDisableScroll = _this$props3.disableScroll,\n focused = _this$props3.focused;\n if (!appendToBody && !propDisableScroll) return;\n if (!focused) return; // Disable scroll for every ancestor of this up to the\n // document level. This ensures the input and the picker never move. Other\n // sibling elements or the picker itself can scroll.\n\n this.enableScroll = (0, _disableScroll2[\"default\"])(this.container);\n }\n /* istanbul ignore next */\n ;\n\n _proto.responsivizePickerPosition = function responsivizePickerPosition() {\n // It's possible the portal props have been changed in response to window resizes\n // So let's ensure we reset this back to the base state each time\n this.setState({\n dayPickerContainerStyles: {}\n });\n var _this$props4 = this.props,\n openDirection = _this$props4.openDirection,\n anchorDirection = _this$props4.anchorDirection,\n horizontalMargin = _this$props4.horizontalMargin,\n withPortal = _this$props4.withPortal,\n withFullScreenPortal = _this$props4.withFullScreenPortal,\n appendToBody = _this$props4.appendToBody,\n focused = _this$props4.focused;\n var dayPickerContainerStyles = this.state.dayPickerContainerStyles;\n\n if (!focused) {\n return;\n }\n\n var isAnchoredLeft = anchorDirection === _constants.ANCHOR_LEFT;\n\n if (!withPortal && !withFullScreenPortal) {\n var containerRect = this.dayPickerContainer.getBoundingClientRect();\n var currentOffset = dayPickerContainerStyles[anchorDirection] || 0;\n var containerEdge = isAnchoredLeft ? containerRect[_constants.ANCHOR_RIGHT] : containerRect[_constants.ANCHOR_LEFT];\n this.setState({\n dayPickerContainerStyles: _objectSpread({}, (0, _getResponsiveContainerStyles[\"default\"])(anchorDirection, currentOffset, containerEdge, horizontalMargin), {}, appendToBody && (0, _getDetachedContainerStyles[\"default\"])(openDirection, anchorDirection, this.container))\n });\n }\n };\n\n _proto.showKeyboardShortcutsPanel = function showKeyboardShortcutsPanel() {\n this.setState({\n isInputFocused: false,\n isDayPickerFocused: true,\n showKeyboardShortcuts: true\n });\n };\n\n _proto.maybeRenderDayPickerWithPortal = function maybeRenderDayPickerWithPortal() {\n var _this$props5 = this.props,\n focused = _this$props5.focused,\n withPortal = _this$props5.withPortal,\n withFullScreenPortal = _this$props5.withFullScreenPortal,\n appendToBody = _this$props5.appendToBody;\n\n if (!focused) {\n return null;\n }\n\n if (withPortal || withFullScreenPortal || appendToBody) {\n return _react[\"default\"].createElement(_reactPortal.Portal, null, this.renderDayPicker());\n }\n\n return this.renderDayPicker();\n };\n\n _proto.renderDayPicker = function renderDayPicker() {\n var _this$props6 = this.props,\n anchorDirection = _this$props6.anchorDirection,\n openDirection = _this$props6.openDirection,\n onDateChange = _this$props6.onDateChange,\n date = _this$props6.date,\n onFocusChange = _this$props6.onFocusChange,\n focused = _this$props6.focused,\n enableOutsideDays = _this$props6.enableOutsideDays,\n numberOfMonths = _this$props6.numberOfMonths,\n orientation = _this$props6.orientation,\n monthFormat = _this$props6.monthFormat,\n dayPickerNavigationInlineStyles = _this$props6.dayPickerNavigationInlineStyles,\n navPosition = _this$props6.navPosition,\n navPrev = _this$props6.navPrev,\n navNext = _this$props6.navNext,\n renderNavPrevButton = _this$props6.renderNavPrevButton,\n renderNavNextButton = _this$props6.renderNavNextButton,\n onPrevMonthClick = _this$props6.onPrevMonthClick,\n onNextMonthClick = _this$props6.onNextMonthClick,\n onClose = _this$props6.onClose,\n withPortal = _this$props6.withPortal,\n withFullScreenPortal = _this$props6.withFullScreenPortal,\n keepOpenOnDateSelect = _this$props6.keepOpenOnDateSelect,\n initialVisibleMonth = _this$props6.initialVisibleMonth,\n renderMonthText = _this$props6.renderMonthText,\n renderWeekHeaderElement = _this$props6.renderWeekHeaderElement,\n renderCalendarDay = _this$props6.renderCalendarDay,\n renderDayContents = _this$props6.renderDayContents,\n renderCalendarInfo = _this$props6.renderCalendarInfo,\n renderMonthElement = _this$props6.renderMonthElement,\n calendarInfoPosition = _this$props6.calendarInfoPosition,\n hideKeyboardShortcutsPanel = _this$props6.hideKeyboardShortcutsPanel,\n firstDayOfWeek = _this$props6.firstDayOfWeek,\n customCloseIcon = _this$props6.customCloseIcon,\n phrases = _this$props6.phrases,\n dayAriaLabelFormat = _this$props6.dayAriaLabelFormat,\n daySize = _this$props6.daySize,\n isRTL = _this$props6.isRTL,\n isOutsideRange = _this$props6.isOutsideRange,\n isDayBlocked = _this$props6.isDayBlocked,\n isDayHighlighted = _this$props6.isDayHighlighted,\n weekDayFormat = _this$props6.weekDayFormat,\n styles = _this$props6.styles,\n verticalHeight = _this$props6.verticalHeight,\n transitionDuration = _this$props6.transitionDuration,\n verticalSpacing = _this$props6.verticalSpacing,\n horizontalMonthPadding = _this$props6.horizontalMonthPadding,\n small = _this$props6.small,\n reactDates = _this$props6.theme.reactDates;\n var _this$state = this.state,\n dayPickerContainerStyles = _this$state.dayPickerContainerStyles,\n isDayPickerFocused = _this$state.isDayPickerFocused,\n showKeyboardShortcuts = _this$state.showKeyboardShortcuts;\n var onOutsideClick = !withFullScreenPortal && withPortal ? this.onOutsideClick : undefined;\n\n var closeIcon = customCloseIcon || _react[\"default\"].createElement(_CloseButton[\"default\"], null);\n\n var inputHeight = (0, _getInputHeight[\"default\"])(reactDates, small);\n var withAnyPortal = withPortal || withFullScreenPortal;\n /* eslint-disable jsx-a11y/no-static-element-interactions */\n\n /* eslint-disable jsx-a11y/click-events-have-key-events */\n\n return _react[\"default\"].createElement(\"div\", (0, _extends2[\"default\"])({\n ref: this.setDayPickerContainerRef\n }, (0, _reactWithStyles.css)(styles.SingleDatePicker_picker, anchorDirection === _constants.ANCHOR_LEFT && styles.SingleDatePicker_picker__directionLeft, anchorDirection === _constants.ANCHOR_RIGHT && styles.SingleDatePicker_picker__directionRight, openDirection === _constants.OPEN_DOWN && styles.SingleDatePicker_picker__openDown, openDirection === _constants.OPEN_UP && styles.SingleDatePicker_picker__openUp, !withAnyPortal && openDirection === _constants.OPEN_DOWN && {\n top: inputHeight + verticalSpacing\n }, !withAnyPortal && openDirection === _constants.OPEN_UP && {\n bottom: inputHeight + verticalSpacing\n }, orientation === _constants.HORIZONTAL_ORIENTATION && styles.SingleDatePicker_picker__horizontal, orientation === _constants.VERTICAL_ORIENTATION && styles.SingleDatePicker_picker__vertical, withAnyPortal && styles.SingleDatePicker_picker__portal, withFullScreenPortal && styles.SingleDatePicker_picker__fullScreenPortal, isRTL && styles.SingleDatePicker_picker__rtl, dayPickerContainerStyles), {\n onClick: onOutsideClick\n }), _react[\"default\"].createElement(_DayPickerSingleDateController[\"default\"], {\n date: date,\n onDateChange: onDateChange,\n onFocusChange: onFocusChange,\n orientation: orientation,\n enableOutsideDays: enableOutsideDays,\n numberOfMonths: numberOfMonths,\n monthFormat: monthFormat,\n withPortal: withAnyPortal,\n focused: focused,\n keepOpenOnDateSelect: keepOpenOnDateSelect,\n hideKeyboardShortcutsPanel: hideKeyboardShortcutsPanel,\n initialVisibleMonth: initialVisibleMonth,\n dayPickerNavigationInlineStyles: dayPickerNavigationInlineStyles,\n navPosition: navPosition,\n navPrev: navPrev,\n navNext: navNext,\n renderNavPrevButton: renderNavPrevButton,\n renderNavNextButton: renderNavNextButton,\n onPrevMonthClick: onPrevMonthClick,\n onNextMonthClick: onNextMonthClick,\n onClose: onClose,\n renderMonthText: renderMonthText,\n renderWeekHeaderElement: renderWeekHeaderElement,\n renderCalendarDay: renderCalendarDay,\n renderDayContents: renderDayContents,\n renderCalendarInfo: renderCalendarInfo,\n renderMonthElement: renderMonthElement,\n calendarInfoPosition: calendarInfoPosition,\n isFocused: isDayPickerFocused,\n showKeyboardShortcuts: showKeyboardShortcuts,\n onBlur: this.onDayPickerBlur,\n phrases: phrases,\n dayAriaLabelFormat: dayAriaLabelFormat,\n daySize: daySize,\n isRTL: isRTL,\n isOutsideRange: isOutsideRange,\n isDayBlocked: isDayBlocked,\n isDayHighlighted: isDayHighlighted,\n firstDayOfWeek: firstDayOfWeek,\n weekDayFormat: weekDayFormat,\n verticalHeight: verticalHeight,\n transitionDuration: transitionDuration,\n horizontalMonthPadding: horizontalMonthPadding\n }), withFullScreenPortal && _react[\"default\"].createElement(\"button\", (0, _extends2[\"default\"])({}, (0, _reactWithStyles.css)(styles.SingleDatePicker_closeButton), {\n \"aria-label\": phrases.closeDatePicker,\n type: \"button\",\n onClick: this.onOutsideClick\n }), _react[\"default\"].createElement(\"div\", (0, _reactWithStyles.css)(styles.SingleDatePicker_closeButton_svg), closeIcon)));\n /* eslint-enable jsx-a11y/no-static-element-interactions */\n\n /* eslint-enable jsx-a11y/click-events-have-key-events */\n };\n\n _proto.render = function render() {\n var _this$props7 = this.props,\n id = _this$props7.id,\n placeholder = _this$props7.placeholder,\n ariaLabel = _this$props7.ariaLabel,\n disabled = _this$props7.disabled,\n focused = _this$props7.focused,\n required = _this$props7.required,\n readOnly = _this$props7.readOnly,\n openDirection = _this$props7.openDirection,\n showClearDate = _this$props7.showClearDate,\n showDefaultInputIcon = _this$props7.showDefaultInputIcon,\n inputIconPosition = _this$props7.inputIconPosition,\n customCloseIcon = _this$props7.customCloseIcon,\n customInputIcon = _this$props7.customInputIcon,\n date = _this$props7.date,\n onDateChange = _this$props7.onDateChange,\n displayFormat = _this$props7.displayFormat,\n phrases = _this$props7.phrases,\n withPortal = _this$props7.withPortal,\n withFullScreenPortal = _this$props7.withFullScreenPortal,\n screenReaderInputMessage = _this$props7.screenReaderInputMessage,\n isRTL = _this$props7.isRTL,\n noBorder = _this$props7.noBorder,\n block = _this$props7.block,\n small = _this$props7.small,\n regular = _this$props7.regular,\n verticalSpacing = _this$props7.verticalSpacing,\n reopenPickerOnClearDate = _this$props7.reopenPickerOnClearDate,\n keepOpenOnDateSelect = _this$props7.keepOpenOnDateSelect,\n styles = _this$props7.styles,\n isOutsideRange = _this$props7.isOutsideRange;\n var isInputFocused = this.state.isInputFocused;\n var enableOutsideClick = !withPortal && !withFullScreenPortal;\n var hideFang = verticalSpacing < _constants.FANG_HEIGHT_PX;\n\n var input = _react[\"default\"].createElement(_SingleDatePickerInputController[\"default\"], {\n id: id,\n placeholder: placeholder,\n ariaLabel: ariaLabel,\n focused: focused,\n isFocused: isInputFocused,\n disabled: disabled,\n required: required,\n readOnly: readOnly,\n openDirection: openDirection,\n showCaret: !withPortal && !withFullScreenPortal && !hideFang,\n showClearDate: showClearDate,\n showDefaultInputIcon: showDefaultInputIcon,\n inputIconPosition: inputIconPosition,\n isOutsideRange: isOutsideRange,\n customCloseIcon: customCloseIcon,\n customInputIcon: customInputIcon,\n date: date,\n onDateChange: onDateChange,\n displayFormat: displayFormat,\n onFocusChange: this.onInputFocus,\n onKeyDownArrowDown: this.onDayPickerFocus,\n onKeyDownQuestionMark: this.showKeyboardShortcutsPanel,\n screenReaderMessage: screenReaderInputMessage,\n phrases: phrases,\n isRTL: isRTL,\n noBorder: noBorder,\n block: block,\n small: small,\n regular: regular,\n verticalSpacing: verticalSpacing,\n reopenPickerOnClearDate: reopenPickerOnClearDate,\n keepOpenOnDateSelect: keepOpenOnDateSelect\n }, this.maybeRenderDayPickerWithPortal());\n\n return _react[\"default\"].createElement(\"div\", (0, _extends2[\"default\"])({\n ref: this.setContainerRef\n }, (0, _reactWithStyles.css)(styles.SingleDatePicker, block && styles.SingleDatePicker__block)), enableOutsideClick && _react[\"default\"].createElement(_reactOutsideClickHandler[\"default\"], {\n onOutsideClick: this.onOutsideClick\n }, input), enableOutsideClick || input);\n };\n\n return SingleDatePicker;\n}(_react[\"default\"].PureComponent || _react[\"default\"].Component);\n\nexports.PureSingleDatePicker = SingleDatePicker;\nSingleDatePicker.propTypes = process.env.NODE_ENV !== \"production\" ? propTypes : {};\nSingleDatePicker.defaultProps = defaultProps;\n\nvar _default = (0, _reactWithStyles.withStyles)(function (_ref3) {\n var _ref3$reactDates = _ref3.reactDates,\n color = _ref3$reactDates.color,\n zIndex = _ref3$reactDates.zIndex;\n return {\n SingleDatePicker: {\n position: 'relative',\n display: 'inline-block'\n },\n SingleDatePicker__block: {\n display: 'block'\n },\n SingleDatePicker_picker: {\n zIndex: zIndex + 1,\n backgroundColor: color.background,\n position: 'absolute'\n },\n SingleDatePicker_picker__rtl: {\n direction: (0, _noflip[\"default\"])('rtl')\n },\n SingleDatePicker_picker__directionLeft: {\n left: (0, _noflip[\"default\"])(0)\n },\n SingleDatePicker_picker__directionRight: {\n right: (0, _noflip[\"default\"])(0)\n },\n SingleDatePicker_picker__portal: {\n backgroundColor: 'rgba(0, 0, 0, 0.3)',\n position: 'fixed',\n top: 0,\n left: (0, _noflip[\"default\"])(0),\n height: '100%',\n width: '100%'\n },\n SingleDatePicker_picker__fullScreenPortal: {\n backgroundColor: color.background\n },\n SingleDatePicker_closeButton: {\n background: 'none',\n border: 0,\n color: 'inherit',\n font: 'inherit',\n lineHeight: 'normal',\n overflow: 'visible',\n cursor: 'pointer',\n position: 'absolute',\n top: 0,\n right: (0, _noflip[\"default\"])(0),\n padding: 15,\n zIndex: zIndex + 2,\n ':hover': {\n color: \"darken(\".concat(color.core.grayLighter, \", 10%)\"),\n textDecoration: 'none'\n },\n ':focus': {\n color: \"darken(\".concat(color.core.grayLighter, \", 10%)\"),\n textDecoration: 'none'\n }\n },\n SingleDatePicker_closeButton_svg: {\n height: 15,\n width: 15,\n fill: color.core.grayLighter\n }\n };\n}, {\n pureComponent: typeof _react[\"default\"].PureComponent !== 'undefined'\n})(SingleDatePicker);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _airbnbPropTypes = require(\"airbnb-prop-types\");\n\nvar _reactWithStyles = require(\"react-with-styles\");\n\nvar _defaultPhrases = require(\"../defaultPhrases\");\n\nvar _getPhrasePropTypes = _interopRequireDefault(require(\"../utils/getPhrasePropTypes\"));\n\nvar _noflip = _interopRequireDefault(require(\"../utils/noflip\"));\n\nvar _DateInput = _interopRequireDefault(require(\"./DateInput\"));\n\nvar _IconPositionShape = _interopRequireDefault(require(\"../shapes/IconPositionShape\"));\n\nvar _CloseButton = _interopRequireDefault(require(\"./CloseButton\"));\n\nvar _CalendarIcon = _interopRequireDefault(require(\"./CalendarIcon\"));\n\nvar _OpenDirectionShape = _interopRequireDefault(require(\"../shapes/OpenDirectionShape\"));\n\nvar _constants = require(\"../constants\");\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nvar propTypes = process.env.NODE_ENV !== \"production\" ? (0, _airbnbPropTypes.forbidExtraProps)(_objectSpread({}, _reactWithStyles.withStylesPropTypes, {\n id: _propTypes[\"default\"].string.isRequired,\n children: _propTypes[\"default\"].node,\n placeholder: _propTypes[\"default\"].string,\n ariaLabel: _propTypes[\"default\"].string,\n displayValue: _propTypes[\"default\"].string,\n screenReaderMessage: _propTypes[\"default\"].string,\n focused: _propTypes[\"default\"].bool,\n isFocused: _propTypes[\"default\"].bool,\n // describes actual DOM focus\n disabled: _propTypes[\"default\"].bool,\n required: _propTypes[\"default\"].bool,\n readOnly: _propTypes[\"default\"].bool,\n openDirection: _OpenDirectionShape[\"default\"],\n showCaret: _propTypes[\"default\"].bool,\n showClearDate: _propTypes[\"default\"].bool,\n customCloseIcon: _propTypes[\"default\"].node,\n showDefaultInputIcon: _propTypes[\"default\"].bool,\n inputIconPosition: _IconPositionShape[\"default\"],\n customInputIcon: _propTypes[\"default\"].node,\n isRTL: _propTypes[\"default\"].bool,\n noBorder: _propTypes[\"default\"].bool,\n block: _propTypes[\"default\"].bool,\n small: _propTypes[\"default\"].bool,\n regular: _propTypes[\"default\"].bool,\n verticalSpacing: _airbnbPropTypes.nonNegativeInteger,\n onChange: _propTypes[\"default\"].func,\n onClearDate: _propTypes[\"default\"].func,\n onFocus: _propTypes[\"default\"].func,\n onKeyDownShiftTab: _propTypes[\"default\"].func,\n onKeyDownTab: _propTypes[\"default\"].func,\n onKeyDownArrowDown: _propTypes[\"default\"].func,\n onKeyDownQuestionMark: _propTypes[\"default\"].func,\n // i18n\n phrases: _propTypes[\"default\"].shape((0, _getPhrasePropTypes[\"default\"])(_defaultPhrases.SingleDatePickerInputPhrases))\n})) : {};\nvar defaultProps = {\n children: null,\n placeholder: 'Select Date',\n ariaLabel: undefined,\n displayValue: '',\n screenReaderMessage: '',\n focused: false,\n isFocused: false,\n disabled: false,\n required: false,\n readOnly: false,\n openDirection: _constants.OPEN_DOWN,\n showCaret: false,\n showClearDate: false,\n showDefaultInputIcon: false,\n inputIconPosition: _constants.ICON_BEFORE_POSITION,\n customCloseIcon: null,\n customInputIcon: null,\n isRTL: false,\n noBorder: false,\n block: false,\n small: false,\n regular: false,\n verticalSpacing: undefined,\n onChange: function onChange() {},\n onClearDate: function onClearDate() {},\n onFocus: function onFocus() {},\n onKeyDownShiftTab: function onKeyDownShiftTab() {},\n onKeyDownTab: function onKeyDownTab() {},\n onKeyDownArrowDown: function onKeyDownArrowDown() {},\n onKeyDownQuestionMark: function onKeyDownQuestionMark() {},\n // i18n\n phrases: _defaultPhrases.SingleDatePickerInputPhrases\n};\n\nfunction SingleDatePickerInput(_ref) {\n var id = _ref.id,\n children = _ref.children,\n placeholder = _ref.placeholder,\n ariaLabel = _ref.ariaLabel,\n displayValue = _ref.displayValue,\n focused = _ref.focused,\n isFocused = _ref.isFocused,\n disabled = _ref.disabled,\n required = _ref.required,\n readOnly = _ref.readOnly,\n showCaret = _ref.showCaret,\n showClearDate = _ref.showClearDate,\n showDefaultInputIcon = _ref.showDefaultInputIcon,\n inputIconPosition = _ref.inputIconPosition,\n phrases = _ref.phrases,\n onClearDate = _ref.onClearDate,\n onChange = _ref.onChange,\n onFocus = _ref.onFocus,\n onKeyDownShiftTab = _ref.onKeyDownShiftTab,\n onKeyDownTab = _ref.onKeyDownTab,\n onKeyDownArrowDown = _ref.onKeyDownArrowDown,\n onKeyDownQuestionMark = _ref.onKeyDownQuestionMark,\n screenReaderMessage = _ref.screenReaderMessage,\n customCloseIcon = _ref.customCloseIcon,\n customInputIcon = _ref.customInputIcon,\n openDirection = _ref.openDirection,\n isRTL = _ref.isRTL,\n noBorder = _ref.noBorder,\n block = _ref.block,\n small = _ref.small,\n regular = _ref.regular,\n verticalSpacing = _ref.verticalSpacing,\n styles = _ref.styles;\n\n var calendarIcon = customInputIcon || _react[\"default\"].createElement(_CalendarIcon[\"default\"], (0, _reactWithStyles.css)(styles.SingleDatePickerInput_calendarIcon_svg));\n\n var closeIcon = customCloseIcon || _react[\"default\"].createElement(_CloseButton[\"default\"], (0, _reactWithStyles.css)(styles.SingleDatePickerInput_clearDate_svg, small && styles.SingleDatePickerInput_clearDate_svg__small));\n\n var screenReaderText = screenReaderMessage || phrases.keyboardForwardNavigationInstructions;\n\n var inputIcon = (showDefaultInputIcon || customInputIcon !== null) && _react[\"default\"].createElement(\"button\", (0, _extends2[\"default\"])({}, (0, _reactWithStyles.css)(styles.SingleDatePickerInput_calendarIcon), {\n type: \"button\",\n disabled: disabled,\n \"aria-label\": phrases.focusStartDate,\n onClick: onFocus\n }), calendarIcon);\n\n return _react[\"default\"].createElement(\"div\", (0, _reactWithStyles.css)(styles.SingleDatePickerInput, disabled && styles.SingleDatePickerInput__disabled, isRTL && styles.SingleDatePickerInput__rtl, !noBorder && styles.SingleDatePickerInput__withBorder, block && styles.SingleDatePickerInput__block, showClearDate && styles.SingleDatePickerInput__showClearDate), inputIconPosition === _constants.ICON_BEFORE_POSITION && inputIcon, _react[\"default\"].createElement(_DateInput[\"default\"], {\n id: id,\n placeholder: placeholder,\n ariaLabel: ariaLabel,\n displayValue: displayValue,\n screenReaderMessage: screenReaderText,\n focused: focused,\n isFocused: isFocused,\n disabled: disabled,\n required: required,\n readOnly: readOnly,\n showCaret: showCaret,\n onChange: onChange,\n onFocus: onFocus,\n onKeyDownShiftTab: onKeyDownShiftTab,\n onKeyDownTab: onKeyDownTab,\n onKeyDownArrowDown: onKeyDownArrowDown,\n onKeyDownQuestionMark: onKeyDownQuestionMark,\n openDirection: openDirection,\n verticalSpacing: verticalSpacing,\n small: small,\n regular: regular,\n block: block\n }), children, showClearDate && _react[\"default\"].createElement(\"button\", (0, _extends2[\"default\"])({}, (0, _reactWithStyles.css)(styles.SingleDatePickerInput_clearDate, small && styles.SingleDatePickerInput_clearDate__small, !customCloseIcon && styles.SingleDatePickerInput_clearDate__default, !displayValue && styles.SingleDatePickerInput_clearDate__hide), {\n type: \"button\",\n \"aria-label\": phrases.clearDate,\n disabled: disabled,\n onClick: onClearDate\n }), closeIcon), inputIconPosition === _constants.ICON_AFTER_POSITION && inputIcon);\n}\n\nSingleDatePickerInput.propTypes = process.env.NODE_ENV !== \"production\" ? propTypes : {};\nSingleDatePickerInput.defaultProps = defaultProps;\n\nvar _default = (0, _reactWithStyles.withStyles)(function (_ref2) {\n var _ref2$reactDates = _ref2.reactDates,\n border = _ref2$reactDates.border,\n color = _ref2$reactDates.color;\n return {\n SingleDatePickerInput: {\n display: 'inline-block',\n backgroundColor: color.background\n },\n SingleDatePickerInput__withBorder: {\n borderColor: color.border,\n borderWidth: border.pickerInput.borderWidth,\n borderStyle: border.pickerInput.borderStyle,\n borderRadius: border.pickerInput.borderRadius\n },\n SingleDatePickerInput__rtl: {\n direction: (0, _noflip[\"default\"])('rtl')\n },\n SingleDatePickerInput__disabled: {\n backgroundColor: color.disabled\n },\n SingleDatePickerInput__block: {\n display: 'block'\n },\n SingleDatePickerInput__showClearDate: {\n paddingRight: 30 // TODO: should be noflip wrapped and handled by an isRTL prop\n\n },\n SingleDatePickerInput_clearDate: {\n background: 'none',\n border: 0,\n color: 'inherit',\n font: 'inherit',\n lineHeight: 'normal',\n overflow: 'visible',\n cursor: 'pointer',\n padding: 10,\n margin: '0 10px 0 5px',\n // TODO: should be noflip wrapped and handled by an isRTL prop\n position: 'absolute',\n right: 0,\n // TODO: should be noflip wrapped and handled by an isRTL prop\n top: '50%',\n transform: 'translateY(-50%)'\n },\n SingleDatePickerInput_clearDate__default: {\n ':focus': {\n background: color.core.border,\n borderRadius: '50%'\n },\n ':hover': {\n background: color.core.border,\n borderRadius: '50%'\n }\n },\n SingleDatePickerInput_clearDate__small: {\n padding: 6\n },\n SingleDatePickerInput_clearDate__hide: {\n visibility: 'hidden'\n },\n SingleDatePickerInput_clearDate_svg: {\n fill: color.core.grayLight,\n height: 12,\n width: 15,\n verticalAlign: 'middle'\n },\n SingleDatePickerInput_clearDate_svg__small: {\n height: 9\n },\n SingleDatePickerInput_calendarIcon: {\n background: 'none',\n border: 0,\n color: 'inherit',\n font: 'inherit',\n lineHeight: 'normal',\n overflow: 'visible',\n cursor: 'pointer',\n display: 'inline-block',\n verticalAlign: 'middle',\n padding: 10,\n margin: '0 5px 0 10px' // TODO: should be noflip wrapped and handled by an isRTL prop\n\n },\n SingleDatePickerInput_calendarIcon_svg: {\n fill: color.core.grayLight,\n height: 15,\n width: 14,\n verticalAlign: 'middle'\n }\n };\n}, {\n pureComponent: typeof _react[\"default\"].PureComponent !== 'undefined'\n})(SingleDatePickerInput);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _enzymeShallowEqual = _interopRequireDefault(require(\"enzyme-shallow-equal\"));\n\nvar _assertThisInitialized2 = _interopRequireDefault(require(\"@babel/runtime/helpers/assertThisInitialized\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _moment = _interopRequireDefault(require(\"moment\"));\n\nvar _reactMomentProptypes = _interopRequireDefault(require(\"react-moment-proptypes\"));\n\nvar _airbnbPropTypes = require(\"airbnb-prop-types\");\n\nvar _OpenDirectionShape = _interopRequireDefault(require(\"../shapes/OpenDirectionShape\"));\n\nvar _defaultPhrases = require(\"../defaultPhrases\");\n\nvar _getPhrasePropTypes = _interopRequireDefault(require(\"../utils/getPhrasePropTypes\"));\n\nvar _SingleDatePickerInput = _interopRequireDefault(require(\"./SingleDatePickerInput\"));\n\nvar _IconPositionShape = _interopRequireDefault(require(\"../shapes/IconPositionShape\"));\n\nvar _DisabledShape = _interopRequireDefault(require(\"../shapes/DisabledShape\"));\n\nvar _toMomentObject = _interopRequireDefault(require(\"../utils/toMomentObject\"));\n\nvar _toLocalizedDateString = _interopRequireDefault(require(\"../utils/toLocalizedDateString\"));\n\nvar _isInclusivelyAfterDay = _interopRequireDefault(require(\"../utils/isInclusivelyAfterDay\"));\n\nvar _constants = require(\"../constants\");\n\nvar propTypes = process.env.NODE_ENV !== \"production\" ? (0, _airbnbPropTypes.forbidExtraProps)({\n children: _propTypes[\"default\"].node,\n date: _reactMomentProptypes[\"default\"].momentObj,\n onDateChange: _propTypes[\"default\"].func.isRequired,\n focused: _propTypes[\"default\"].bool,\n onFocusChange: _propTypes[\"default\"].func.isRequired,\n id: _propTypes[\"default\"].string.isRequired,\n placeholder: _propTypes[\"default\"].string,\n ariaLabel: _propTypes[\"default\"].string,\n screenReaderMessage: _propTypes[\"default\"].string,\n showClearDate: _propTypes[\"default\"].bool,\n showCaret: _propTypes[\"default\"].bool,\n showDefaultInputIcon: _propTypes[\"default\"].bool,\n inputIconPosition: _IconPositionShape[\"default\"],\n disabled: _DisabledShape[\"default\"],\n required: _propTypes[\"default\"].bool,\n readOnly: _propTypes[\"default\"].bool,\n openDirection: _OpenDirectionShape[\"default\"],\n noBorder: _propTypes[\"default\"].bool,\n block: _propTypes[\"default\"].bool,\n small: _propTypes[\"default\"].bool,\n regular: _propTypes[\"default\"].bool,\n verticalSpacing: _airbnbPropTypes.nonNegativeInteger,\n keepOpenOnDateSelect: _propTypes[\"default\"].bool,\n reopenPickerOnClearDate: _propTypes[\"default\"].bool,\n isOutsideRange: _propTypes[\"default\"].func,\n displayFormat: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].string, _propTypes[\"default\"].func]),\n onClose: _propTypes[\"default\"].func,\n onKeyDownArrowDown: _propTypes[\"default\"].func,\n onKeyDownQuestionMark: _propTypes[\"default\"].func,\n customInputIcon: _propTypes[\"default\"].node,\n customCloseIcon: _propTypes[\"default\"].node,\n // accessibility\n isFocused: _propTypes[\"default\"].bool,\n // i18n\n phrases: _propTypes[\"default\"].shape((0, _getPhrasePropTypes[\"default\"])(_defaultPhrases.SingleDatePickerInputPhrases)),\n isRTL: _propTypes[\"default\"].bool\n}) : {};\nvar defaultProps = {\n children: null,\n date: null,\n focused: false,\n placeholder: '',\n ariaLabel: undefined,\n screenReaderMessage: 'Date',\n showClearDate: false,\n showCaret: false,\n showDefaultInputIcon: false,\n inputIconPosition: _constants.ICON_BEFORE_POSITION,\n disabled: false,\n required: false,\n readOnly: false,\n openDirection: _constants.OPEN_DOWN,\n noBorder: false,\n block: false,\n small: false,\n regular: false,\n verticalSpacing: undefined,\n keepOpenOnDateSelect: false,\n reopenPickerOnClearDate: false,\n isOutsideRange: function isOutsideRange(day) {\n return !(0, _isInclusivelyAfterDay[\"default\"])(day, (0, _moment[\"default\"])());\n },\n displayFormat: function displayFormat() {\n return _moment[\"default\"].localeData().longDateFormat('L');\n },\n onClose: function onClose() {},\n onKeyDownArrowDown: function onKeyDownArrowDown() {},\n onKeyDownQuestionMark: function onKeyDownQuestionMark() {},\n customInputIcon: null,\n customCloseIcon: null,\n // accessibility\n isFocused: false,\n // i18n\n phrases: _defaultPhrases.SingleDatePickerInputPhrases,\n isRTL: false\n};\n\nvar SingleDatePickerInputController =\n/*#__PURE__*/\nfunction (_ref) {\n (0, _inheritsLoose2[\"default\"])(SingleDatePickerInputController, _ref);\n var _proto = SingleDatePickerInputController.prototype;\n\n _proto[!_react[\"default\"].PureComponent && \"shouldComponentUpdate\"] = function (nextProps, nextState) {\n return !(0, _enzymeShallowEqual[\"default\"])(this.props, nextProps) || !(0, _enzymeShallowEqual[\"default\"])(this.state, nextState);\n };\n\n function SingleDatePickerInputController(props) {\n var _this;\n\n _this = _ref.call(this, props) || this;\n _this.onChange = _this.onChange.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.onFocus = _this.onFocus.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.onClearFocus = _this.onClearFocus.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.clearDate = _this.clearDate.bind((0, _assertThisInitialized2[\"default\"])(_this));\n return _this;\n }\n\n _proto.onChange = function onChange(dateString) {\n var _this$props = this.props,\n isOutsideRange = _this$props.isOutsideRange,\n keepOpenOnDateSelect = _this$props.keepOpenOnDateSelect,\n onDateChange = _this$props.onDateChange,\n onFocusChange = _this$props.onFocusChange,\n onClose = _this$props.onClose;\n var newDate = (0, _toMomentObject[\"default\"])(dateString, this.getDisplayFormat());\n var isValid = newDate && !isOutsideRange(newDate);\n\n if (isValid) {\n onDateChange(newDate);\n\n if (!keepOpenOnDateSelect) {\n onFocusChange({\n focused: false\n });\n onClose({\n date: newDate\n });\n }\n } else {\n onDateChange(null);\n }\n };\n\n _proto.onFocus = function onFocus() {\n var _this$props2 = this.props,\n onFocusChange = _this$props2.onFocusChange,\n disabled = _this$props2.disabled;\n\n if (!disabled) {\n onFocusChange({\n focused: true\n });\n }\n };\n\n _proto.onClearFocus = function onClearFocus() {\n var _this$props3 = this.props,\n focused = _this$props3.focused,\n onFocusChange = _this$props3.onFocusChange,\n onClose = _this$props3.onClose,\n date = _this$props3.date;\n if (!focused) return;\n onFocusChange({\n focused: false\n });\n onClose({\n date: date\n });\n };\n\n _proto.getDisplayFormat = function getDisplayFormat() {\n var displayFormat = this.props.displayFormat;\n return typeof displayFormat === 'string' ? displayFormat : displayFormat();\n };\n\n _proto.getDateString = function getDateString(date) {\n var displayFormat = this.getDisplayFormat();\n\n if (date && displayFormat) {\n return date && date.format(displayFormat);\n }\n\n return (0, _toLocalizedDateString[\"default\"])(date);\n };\n\n _proto.clearDate = function clearDate() {\n var _this$props4 = this.props,\n onDateChange = _this$props4.onDateChange,\n reopenPickerOnClearDate = _this$props4.reopenPickerOnClearDate,\n onFocusChange = _this$props4.onFocusChange;\n onDateChange(null);\n\n if (reopenPickerOnClearDate) {\n onFocusChange({\n focused: true\n });\n }\n };\n\n _proto.render = function render() {\n var _this$props5 = this.props,\n children = _this$props5.children,\n id = _this$props5.id,\n placeholder = _this$props5.placeholder,\n ariaLabel = _this$props5.ariaLabel,\n disabled = _this$props5.disabled,\n focused = _this$props5.focused,\n isFocused = _this$props5.isFocused,\n required = _this$props5.required,\n readOnly = _this$props5.readOnly,\n openDirection = _this$props5.openDirection,\n showClearDate = _this$props5.showClearDate,\n showCaret = _this$props5.showCaret,\n showDefaultInputIcon = _this$props5.showDefaultInputIcon,\n inputIconPosition = _this$props5.inputIconPosition,\n customCloseIcon = _this$props5.customCloseIcon,\n customInputIcon = _this$props5.customInputIcon,\n date = _this$props5.date,\n phrases = _this$props5.phrases,\n onKeyDownArrowDown = _this$props5.onKeyDownArrowDown,\n onKeyDownQuestionMark = _this$props5.onKeyDownQuestionMark,\n screenReaderMessage = _this$props5.screenReaderMessage,\n isRTL = _this$props5.isRTL,\n noBorder = _this$props5.noBorder,\n block = _this$props5.block,\n small = _this$props5.small,\n regular = _this$props5.regular,\n verticalSpacing = _this$props5.verticalSpacing;\n var displayValue = this.getDateString(date);\n return _react[\"default\"].createElement(_SingleDatePickerInput[\"default\"], {\n id: id,\n placeholder: placeholder,\n ariaLabel: ariaLabel,\n focused: focused,\n isFocused: isFocused,\n disabled: disabled,\n required: required,\n readOnly: readOnly,\n openDirection: openDirection,\n showCaret: showCaret,\n onClearDate: this.clearDate,\n showClearDate: showClearDate,\n showDefaultInputIcon: showDefaultInputIcon,\n inputIconPosition: inputIconPosition,\n customCloseIcon: customCloseIcon,\n customInputIcon: customInputIcon,\n displayValue: displayValue,\n onChange: this.onChange,\n onFocus: this.onFocus,\n onKeyDownShiftTab: this.onClearFocus,\n onKeyDownArrowDown: onKeyDownArrowDown,\n onKeyDownQuestionMark: onKeyDownQuestionMark,\n screenReaderMessage: screenReaderMessage,\n phrases: phrases,\n isRTL: isRTL,\n noBorder: noBorder,\n block: block,\n small: small,\n regular: regular,\n verticalSpacing: verticalSpacing\n }, children);\n };\n\n return SingleDatePickerInputController;\n}(_react[\"default\"].PureComponent || _react[\"default\"].Component);\n\nexports[\"default\"] = SingleDatePickerInputController;\nSingleDatePickerInputController.propTypes = process.env.NODE_ENV !== \"production\" ? propTypes : {};\nSingleDatePickerInputController.defaultProps = defaultProps;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.MODIFIER_KEY_NAMES = exports.DEFAULT_VERTICAL_SPACING = exports.FANG_HEIGHT_PX = exports.FANG_WIDTH_PX = exports.WEEKDAYS = exports.BLOCKED_MODIFIER = exports.DAY_SIZE = exports.OPEN_UP = exports.OPEN_DOWN = exports.ANCHOR_RIGHT = exports.ANCHOR_LEFT = exports.INFO_POSITION_AFTER = exports.INFO_POSITION_BEFORE = exports.INFO_POSITION_BOTTOM = exports.INFO_POSITION_TOP = exports.ICON_AFTER_POSITION = exports.ICON_BEFORE_POSITION = exports.NAV_POSITION_TOP = exports.NAV_POSITION_BOTTOM = exports.VERTICAL_SCROLLABLE = exports.VERTICAL_ORIENTATION = exports.HORIZONTAL_ORIENTATION = exports.END_DATE = exports.START_DATE = exports.ISO_MONTH_FORMAT = exports.ISO_FORMAT = exports.DISPLAY_FORMAT = void 0;\nvar DISPLAY_FORMAT = 'L';\nexports.DISPLAY_FORMAT = DISPLAY_FORMAT;\nvar ISO_FORMAT = 'YYYY-MM-DD';\nexports.ISO_FORMAT = ISO_FORMAT;\nvar ISO_MONTH_FORMAT = 'YYYY-MM'; // TODO delete this line of dead code on next breaking change\n\nexports.ISO_MONTH_FORMAT = ISO_MONTH_FORMAT;\nvar START_DATE = 'startDate';\nexports.START_DATE = START_DATE;\nvar END_DATE = 'endDate';\nexports.END_DATE = END_DATE;\nvar HORIZONTAL_ORIENTATION = 'horizontal';\nexports.HORIZONTAL_ORIENTATION = HORIZONTAL_ORIENTATION;\nvar VERTICAL_ORIENTATION = 'vertical';\nexports.VERTICAL_ORIENTATION = VERTICAL_ORIENTATION;\nvar VERTICAL_SCROLLABLE = 'verticalScrollable';\nexports.VERTICAL_SCROLLABLE = VERTICAL_SCROLLABLE;\nvar NAV_POSITION_BOTTOM = 'navPositionBottom';\nexports.NAV_POSITION_BOTTOM = NAV_POSITION_BOTTOM;\nvar NAV_POSITION_TOP = 'navPositionTop';\nexports.NAV_POSITION_TOP = NAV_POSITION_TOP;\nvar ICON_BEFORE_POSITION = 'before';\nexports.ICON_BEFORE_POSITION = ICON_BEFORE_POSITION;\nvar ICON_AFTER_POSITION = 'after';\nexports.ICON_AFTER_POSITION = ICON_AFTER_POSITION;\nvar INFO_POSITION_TOP = 'top';\nexports.INFO_POSITION_TOP = INFO_POSITION_TOP;\nvar INFO_POSITION_BOTTOM = 'bottom';\nexports.INFO_POSITION_BOTTOM = INFO_POSITION_BOTTOM;\nvar INFO_POSITION_BEFORE = 'before';\nexports.INFO_POSITION_BEFORE = INFO_POSITION_BEFORE;\nvar INFO_POSITION_AFTER = 'after';\nexports.INFO_POSITION_AFTER = INFO_POSITION_AFTER;\nvar ANCHOR_LEFT = 'left';\nexports.ANCHOR_LEFT = ANCHOR_LEFT;\nvar ANCHOR_RIGHT = 'right';\nexports.ANCHOR_RIGHT = ANCHOR_RIGHT;\nvar OPEN_DOWN = 'down';\nexports.OPEN_DOWN = OPEN_DOWN;\nvar OPEN_UP = 'up';\nexports.OPEN_UP = OPEN_UP;\nvar DAY_SIZE = 39;\nexports.DAY_SIZE = DAY_SIZE;\nvar BLOCKED_MODIFIER = 'blocked';\nexports.BLOCKED_MODIFIER = BLOCKED_MODIFIER;\nvar WEEKDAYS = [0, 1, 2, 3, 4, 5, 6];\nexports.WEEKDAYS = WEEKDAYS;\nvar FANG_WIDTH_PX = 20;\nexports.FANG_WIDTH_PX = FANG_WIDTH_PX;\nvar FANG_HEIGHT_PX = 10;\nexports.FANG_HEIGHT_PX = FANG_HEIGHT_PX;\nvar DEFAULT_VERTICAL_SPACING = 22;\nexports.DEFAULT_VERTICAL_SPACING = DEFAULT_VERTICAL_SPACING;\nvar MODIFIER_KEY_NAMES = new Set(['Shift', 'Control', 'Alt', 'Meta']);\nexports.MODIFIER_KEY_NAMES = MODIFIER_KEY_NAMES;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.CalendarDayPhrases = exports.DayPickerNavigationPhrases = exports.DayPickerKeyboardShortcutsPhrases = exports.DayPickerPhrases = exports.SingleDatePickerInputPhrases = exports.SingleDatePickerPhrases = exports.DateRangePickerInputPhrases = exports.DateRangePickerPhrases = exports[\"default\"] = void 0;\nvar calendarLabel = 'Calendar';\nvar roleDescription = 'datepicker';\nvar closeDatePicker = 'Close';\nvar focusStartDate = 'Interact with the calendar and add the check-in date for your trip.';\nvar clearDate = 'Clear Date';\nvar clearDates = 'Clear Dates';\nvar jumpToPrevMonth = 'Move backward to switch to the previous month.';\nvar jumpToNextMonth = 'Move forward to switch to the next month.';\nvar keyboardShortcuts = 'Keyboard Shortcuts';\nvar showKeyboardShortcutsPanel = 'Open the keyboard shortcuts panel.';\nvar hideKeyboardShortcutsPanel = 'Close the shortcuts panel.';\nvar openThisPanel = 'Open this panel.';\nvar enterKey = 'Enter key';\nvar leftArrowRightArrow = 'Right and left arrow keys';\nvar upArrowDownArrow = 'up and down arrow keys';\nvar pageUpPageDown = 'page up and page down keys';\nvar homeEnd = 'Home and end keys';\nvar escape = 'Escape key';\nvar questionMark = 'Question mark';\nvar selectFocusedDate = 'Select the date in focus.';\nvar moveFocusByOneDay = 'Move backward (left) and forward (right) by one day.';\nvar moveFocusByOneWeek = 'Move backward (up) and forward (down) by one week.';\nvar moveFocusByOneMonth = 'Switch months.';\nvar moveFocustoStartAndEndOfWeek = 'Go to the first or last day of a week.';\nvar returnFocusToInput = 'Return to the date input field.';\nvar keyboardForwardNavigationInstructions = 'Navigate forward to interact with the calendar and select a date. Press the question mark key to get the keyboard shortcuts for changing dates.';\nvar keyboardBackwardNavigationInstructions = 'Navigate backward to interact with the calendar and select a date. Press the question mark key to get the keyboard shortcuts for changing dates.';\n\nvar chooseAvailableStartDate = function chooseAvailableStartDate(_ref) {\n var date = _ref.date;\n return \"Choose \".concat(date, \" as your check-in date. It\\u2019s available.\");\n};\n\nvar chooseAvailableEndDate = function chooseAvailableEndDate(_ref2) {\n var date = _ref2.date;\n return \"Choose \".concat(date, \" as your check-out date. It\\u2019s available.\");\n};\n\nvar chooseAvailableDate = function chooseAvailableDate(_ref3) {\n var date = _ref3.date;\n return date;\n};\n\nvar dateIsUnavailable = function dateIsUnavailable(_ref4) {\n var date = _ref4.date;\n return \"Not available. \".concat(date);\n};\n\nvar dateIsSelected = function dateIsSelected(_ref5) {\n var date = _ref5.date;\n return \"Selected. \".concat(date);\n};\n\nvar dateIsSelectedAsStartDate = function dateIsSelectedAsStartDate(_ref6) {\n var date = _ref6.date;\n return \"Selected as start date. \".concat(date);\n};\n\nvar dateIsSelectedAsEndDate = function dateIsSelectedAsEndDate(_ref7) {\n var date = _ref7.date;\n return \"Selected as end date. \".concat(date);\n};\n\nvar _default = {\n calendarLabel: calendarLabel,\n roleDescription: roleDescription,\n closeDatePicker: closeDatePicker,\n focusStartDate: focusStartDate,\n clearDate: clearDate,\n clearDates: clearDates,\n jumpToPrevMonth: jumpToPrevMonth,\n jumpToNextMonth: jumpToNextMonth,\n keyboardShortcuts: keyboardShortcuts,\n showKeyboardShortcutsPanel: showKeyboardShortcutsPanel,\n hideKeyboardShortcutsPanel: hideKeyboardShortcutsPanel,\n openThisPanel: openThisPanel,\n enterKey: enterKey,\n leftArrowRightArrow: leftArrowRightArrow,\n upArrowDownArrow: upArrowDownArrow,\n pageUpPageDown: pageUpPageDown,\n homeEnd: homeEnd,\n escape: escape,\n questionMark: questionMark,\n selectFocusedDate: selectFocusedDate,\n moveFocusByOneDay: moveFocusByOneDay,\n moveFocusByOneWeek: moveFocusByOneWeek,\n moveFocusByOneMonth: moveFocusByOneMonth,\n moveFocustoStartAndEndOfWeek: moveFocustoStartAndEndOfWeek,\n returnFocusToInput: returnFocusToInput,\n keyboardForwardNavigationInstructions: keyboardForwardNavigationInstructions,\n keyboardBackwardNavigationInstructions: keyboardBackwardNavigationInstructions,\n chooseAvailableStartDate: chooseAvailableStartDate,\n chooseAvailableEndDate: chooseAvailableEndDate,\n dateIsUnavailable: dateIsUnavailable,\n dateIsSelected: dateIsSelected,\n dateIsSelectedAsStartDate: dateIsSelectedAsStartDate,\n dateIsSelectedAsEndDate: dateIsSelectedAsEndDate\n};\nexports[\"default\"] = _default;\nvar DateRangePickerPhrases = {\n calendarLabel: calendarLabel,\n roleDescription: roleDescription,\n closeDatePicker: closeDatePicker,\n clearDates: clearDates,\n focusStartDate: focusStartDate,\n jumpToPrevMonth: jumpToPrevMonth,\n jumpToNextMonth: jumpToNextMonth,\n keyboardShortcuts: keyboardShortcuts,\n showKeyboardShortcutsPanel: showKeyboardShortcutsPanel,\n hideKeyboardShortcutsPanel: hideKeyboardShortcutsPanel,\n openThisPanel: openThisPanel,\n enterKey: enterKey,\n leftArrowRightArrow: leftArrowRightArrow,\n upArrowDownArrow: upArrowDownArrow,\n pageUpPageDown: pageUpPageDown,\n homeEnd: homeEnd,\n escape: escape,\n questionMark: questionMark,\n selectFocusedDate: selectFocusedDate,\n moveFocusByOneDay: moveFocusByOneDay,\n moveFocusByOneWeek: moveFocusByOneWeek,\n moveFocusByOneMonth: moveFocusByOneMonth,\n moveFocustoStartAndEndOfWeek: moveFocustoStartAndEndOfWeek,\n returnFocusToInput: returnFocusToInput,\n keyboardForwardNavigationInstructions: keyboardForwardNavigationInstructions,\n keyboardBackwardNavigationInstructions: keyboardBackwardNavigationInstructions,\n chooseAvailableStartDate: chooseAvailableStartDate,\n chooseAvailableEndDate: chooseAvailableEndDate,\n dateIsUnavailable: dateIsUnavailable,\n dateIsSelected: dateIsSelected,\n dateIsSelectedAsStartDate: dateIsSelectedAsStartDate,\n dateIsSelectedAsEndDate: dateIsSelectedAsEndDate\n};\nexports.DateRangePickerPhrases = DateRangePickerPhrases;\nvar DateRangePickerInputPhrases = {\n focusStartDate: focusStartDate,\n clearDates: clearDates,\n keyboardForwardNavigationInstructions: keyboardForwardNavigationInstructions,\n keyboardBackwardNavigationInstructions: keyboardBackwardNavigationInstructions\n};\nexports.DateRangePickerInputPhrases = DateRangePickerInputPhrases;\nvar SingleDatePickerPhrases = {\n calendarLabel: calendarLabel,\n roleDescription: roleDescription,\n closeDatePicker: closeDatePicker,\n clearDate: clearDate,\n jumpToPrevMonth: jumpToPrevMonth,\n jumpToNextMonth: jumpToNextMonth,\n keyboardShortcuts: keyboardShortcuts,\n showKeyboardShortcutsPanel: showKeyboardShortcutsPanel,\n hideKeyboardShortcutsPanel: hideKeyboardShortcutsPanel,\n openThisPanel: openThisPanel,\n enterKey: enterKey,\n leftArrowRightArrow: leftArrowRightArrow,\n upArrowDownArrow: upArrowDownArrow,\n pageUpPageDown: pageUpPageDown,\n homeEnd: homeEnd,\n escape: escape,\n questionMark: questionMark,\n selectFocusedDate: selectFocusedDate,\n moveFocusByOneDay: moveFocusByOneDay,\n moveFocusByOneWeek: moveFocusByOneWeek,\n moveFocusByOneMonth: moveFocusByOneMonth,\n moveFocustoStartAndEndOfWeek: moveFocustoStartAndEndOfWeek,\n returnFocusToInput: returnFocusToInput,\n keyboardForwardNavigationInstructions: keyboardForwardNavigationInstructions,\n keyboardBackwardNavigationInstructions: keyboardBackwardNavigationInstructions,\n chooseAvailableDate: chooseAvailableDate,\n dateIsUnavailable: dateIsUnavailable,\n dateIsSelected: dateIsSelected\n};\nexports.SingleDatePickerPhrases = SingleDatePickerPhrases;\nvar SingleDatePickerInputPhrases = {\n clearDate: clearDate,\n keyboardForwardNavigationInstructions: keyboardForwardNavigationInstructions,\n keyboardBackwardNavigationInstructions: keyboardBackwardNavigationInstructions\n};\nexports.SingleDatePickerInputPhrases = SingleDatePickerInputPhrases;\nvar DayPickerPhrases = {\n calendarLabel: calendarLabel,\n roleDescription: roleDescription,\n jumpToPrevMonth: jumpToPrevMonth,\n jumpToNextMonth: jumpToNextMonth,\n keyboardShortcuts: keyboardShortcuts,\n showKeyboardShortcutsPanel: showKeyboardShortcutsPanel,\n hideKeyboardShortcutsPanel: hideKeyboardShortcutsPanel,\n openThisPanel: openThisPanel,\n enterKey: enterKey,\n leftArrowRightArrow: leftArrowRightArrow,\n upArrowDownArrow: upArrowDownArrow,\n pageUpPageDown: pageUpPageDown,\n homeEnd: homeEnd,\n escape: escape,\n questionMark: questionMark,\n selectFocusedDate: selectFocusedDate,\n moveFocusByOneDay: moveFocusByOneDay,\n moveFocusByOneWeek: moveFocusByOneWeek,\n moveFocusByOneMonth: moveFocusByOneMonth,\n moveFocustoStartAndEndOfWeek: moveFocustoStartAndEndOfWeek,\n returnFocusToInput: returnFocusToInput,\n chooseAvailableStartDate: chooseAvailableStartDate,\n chooseAvailableEndDate: chooseAvailableEndDate,\n chooseAvailableDate: chooseAvailableDate,\n dateIsUnavailable: dateIsUnavailable,\n dateIsSelected: dateIsSelected,\n dateIsSelectedAsStartDate: dateIsSelectedAsStartDate,\n dateIsSelectedAsEndDate: dateIsSelectedAsEndDate\n};\nexports.DayPickerPhrases = DayPickerPhrases;\nvar DayPickerKeyboardShortcutsPhrases = {\n keyboardShortcuts: keyboardShortcuts,\n showKeyboardShortcutsPanel: showKeyboardShortcutsPanel,\n hideKeyboardShortcutsPanel: hideKeyboardShortcutsPanel,\n openThisPanel: openThisPanel,\n enterKey: enterKey,\n leftArrowRightArrow: leftArrowRightArrow,\n upArrowDownArrow: upArrowDownArrow,\n pageUpPageDown: pageUpPageDown,\n homeEnd: homeEnd,\n escape: escape,\n questionMark: questionMark,\n selectFocusedDate: selectFocusedDate,\n moveFocusByOneDay: moveFocusByOneDay,\n moveFocusByOneWeek: moveFocusByOneWeek,\n moveFocusByOneMonth: moveFocusByOneMonth,\n moveFocustoStartAndEndOfWeek: moveFocustoStartAndEndOfWeek,\n returnFocusToInput: returnFocusToInput\n};\nexports.DayPickerKeyboardShortcutsPhrases = DayPickerKeyboardShortcutsPhrases;\nvar DayPickerNavigationPhrases = {\n jumpToPrevMonth: jumpToPrevMonth,\n jumpToNextMonth: jumpToNextMonth\n};\nexports.DayPickerNavigationPhrases = DayPickerNavigationPhrases;\nvar CalendarDayPhrases = {\n chooseAvailableDate: chooseAvailableDate,\n dateIsUnavailable: dateIsUnavailable,\n dateIsSelected: dateIsSelected,\n dateIsSelectedAsStartDate: dateIsSelectedAsStartDate,\n dateIsSelectedAsEndDate: dateIsSelectedAsEndDate\n};\nexports.CalendarDayPhrases = CalendarDayPhrases;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"CalendarDay\", {\n enumerable: true,\n get: function get() {\n return _CalendarDay[\"default\"];\n }\n});\nObject.defineProperty(exports, \"CalendarMonth\", {\n enumerable: true,\n get: function get() {\n return _CalendarMonth[\"default\"];\n }\n});\nObject.defineProperty(exports, \"CalendarMonthGrid\", {\n enumerable: true,\n get: function get() {\n return _CalendarMonthGrid[\"default\"];\n }\n});\nObject.defineProperty(exports, \"DateRangePicker\", {\n enumerable: true,\n get: function get() {\n return _DateRangePicker[\"default\"];\n }\n});\nObject.defineProperty(exports, \"DateRangePickerInput\", {\n enumerable: true,\n get: function get() {\n return _DateRangePickerInput[\"default\"];\n }\n});\nObject.defineProperty(exports, \"DateRangePickerInputController\", {\n enumerable: true,\n get: function get() {\n return _DateRangePickerInputController[\"default\"];\n }\n});\nObject.defineProperty(exports, \"DateRangePickerShape\", {\n enumerable: true,\n get: function get() {\n return _DateRangePickerShape[\"default\"];\n }\n});\nObject.defineProperty(exports, \"DayPicker\", {\n enumerable: true,\n get: function get() {\n return _DayPicker[\"default\"];\n }\n});\nObject.defineProperty(exports, \"DayPickerRangeController\", {\n enumerable: true,\n get: function get() {\n return _DayPickerRangeController[\"default\"];\n }\n});\nObject.defineProperty(exports, \"DayPickerSingleDateController\", {\n enumerable: true,\n get: function get() {\n return _DayPickerSingleDateController[\"default\"];\n }\n});\nObject.defineProperty(exports, \"SingleDatePicker\", {\n enumerable: true,\n get: function get() {\n return _SingleDatePicker[\"default\"];\n }\n});\nObject.defineProperty(exports, \"SingleDatePickerInput\", {\n enumerable: true,\n get: function get() {\n return _SingleDatePickerInput[\"default\"];\n }\n});\nObject.defineProperty(exports, \"SingleDatePickerShape\", {\n enumerable: true,\n get: function get() {\n return _SingleDatePickerShape[\"default\"];\n }\n});\nObject.defineProperty(exports, \"isInclusivelyAfterDay\", {\n enumerable: true,\n get: function get() {\n return _isInclusivelyAfterDay[\"default\"];\n }\n});\nObject.defineProperty(exports, \"isInclusivelyBeforeDay\", {\n enumerable: true,\n get: function get() {\n return _isInclusivelyBeforeDay[\"default\"];\n }\n});\nObject.defineProperty(exports, \"isNextDay\", {\n enumerable: true,\n get: function get() {\n return _isNextDay[\"default\"];\n }\n});\nObject.defineProperty(exports, \"isSameDay\", {\n enumerable: true,\n get: function get() {\n return _isSameDay[\"default\"];\n }\n});\nObject.defineProperty(exports, \"toISODateString\", {\n enumerable: true,\n get: function get() {\n return _toISODateString[\"default\"];\n }\n});\nObject.defineProperty(exports, \"toLocalizedDateString\", {\n enumerable: true,\n get: function get() {\n return _toLocalizedDateString[\"default\"];\n }\n});\nObject.defineProperty(exports, \"toMomentObject\", {\n enumerable: true,\n get: function get() {\n return _toMomentObject[\"default\"];\n }\n});\n\nvar _CalendarDay = _interopRequireDefault(require(\"./components/CalendarDay\"));\n\nvar _CalendarMonth = _interopRequireDefault(require(\"./components/CalendarMonth\"));\n\nvar _CalendarMonthGrid = _interopRequireDefault(require(\"./components/CalendarMonthGrid\"));\n\nvar _DateRangePicker = _interopRequireDefault(require(\"./components/DateRangePicker\"));\n\nvar _DateRangePickerInput = _interopRequireDefault(require(\"./components/DateRangePickerInput\"));\n\nvar _DateRangePickerInputController = _interopRequireDefault(require(\"./components/DateRangePickerInputController\"));\n\nvar _DateRangePickerShape = _interopRequireDefault(require(\"./shapes/DateRangePickerShape\"));\n\nvar _DayPicker = _interopRequireDefault(require(\"./components/DayPicker\"));\n\nvar _DayPickerRangeController = _interopRequireDefault(require(\"./components/DayPickerRangeController\"));\n\nvar _DayPickerSingleDateController = _interopRequireDefault(require(\"./components/DayPickerSingleDateController\"));\n\nvar _SingleDatePicker = _interopRequireDefault(require(\"./components/SingleDatePicker\"));\n\nvar _SingleDatePickerInput = _interopRequireDefault(require(\"./components/SingleDatePickerInput\"));\n\nvar _SingleDatePickerShape = _interopRequireDefault(require(\"./shapes/SingleDatePickerShape\"));\n\nvar _isInclusivelyAfterDay = _interopRequireDefault(require(\"./utils/isInclusivelyAfterDay\"));\n\nvar _isInclusivelyBeforeDay = _interopRequireDefault(require(\"./utils/isInclusivelyBeforeDay\"));\n\nvar _isNextDay = _interopRequireDefault(require(\"./utils/isNextDay\"));\n\nvar _isSameDay = _interopRequireDefault(require(\"./utils/isSameDay\"));\n\nvar _toISODateString = _interopRequireDefault(require(\"./utils/toISODateString\"));\n\nvar _toLocalizedDateString = _interopRequireDefault(require(\"./utils/toLocalizedDateString\"));\n\nvar _toMomentObject = _interopRequireDefault(require(\"./utils/toMomentObject\"));","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _registerCSSInterfaceWithDefaultTheme = _interopRequireDefault(require(\"./utils/registerCSSInterfaceWithDefaultTheme\"));\n\n(0, _registerCSSInterfaceWithDefaultTheme[\"default\"])();","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _constants = require(\"../constants\");\n\nvar _default = _propTypes[\"default\"].oneOf([_constants.ANCHOR_LEFT, _constants.ANCHOR_RIGHT]);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _constants = require(\"../constants\");\n\nvar _default = _propTypes[\"default\"].oneOf([_constants.INFO_POSITION_TOP, _constants.INFO_POSITION_BOTTOM, _constants.INFO_POSITION_BEFORE, _constants.INFO_POSITION_AFTER]);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _reactMomentProptypes = _interopRequireDefault(require(\"react-moment-proptypes\"));\n\nvar _airbnbPropTypes = require(\"airbnb-prop-types\");\n\nvar _defaultPhrases = require(\"../defaultPhrases\");\n\nvar _getPhrasePropTypes = _interopRequireDefault(require(\"../utils/getPhrasePropTypes\"));\n\nvar _FocusedInputShape = _interopRequireDefault(require(\"./FocusedInputShape\"));\n\nvar _IconPositionShape = _interopRequireDefault(require(\"./IconPositionShape\"));\n\nvar _OrientationShape = _interopRequireDefault(require(\"./OrientationShape\"));\n\nvar _DisabledShape = _interopRequireDefault(require(\"./DisabledShape\"));\n\nvar _AnchorDirectionShape = _interopRequireDefault(require(\"./AnchorDirectionShape\"));\n\nvar _OpenDirectionShape = _interopRequireDefault(require(\"./OpenDirectionShape\"));\n\nvar _DayOfWeekShape = _interopRequireDefault(require(\"./DayOfWeekShape\"));\n\nvar _CalendarInfoPositionShape = _interopRequireDefault(require(\"./CalendarInfoPositionShape\"));\n\nvar _NavPositionShape = _interopRequireDefault(require(\"./NavPositionShape\"));\n\nvar _default = {\n // required props for a functional interactive DateRangePicker\n startDate: _reactMomentProptypes[\"default\"].momentObj,\n endDate: _reactMomentProptypes[\"default\"].momentObj,\n onDatesChange: _propTypes[\"default\"].func.isRequired,\n focusedInput: _FocusedInputShape[\"default\"],\n onFocusChange: _propTypes[\"default\"].func.isRequired,\n onClose: _propTypes[\"default\"].func,\n // input related props\n startDateId: _propTypes[\"default\"].string.isRequired,\n startDatePlaceholderText: _propTypes[\"default\"].string,\n startDateOffset: _propTypes[\"default\"].func,\n endDateOffset: _propTypes[\"default\"].func,\n endDateId: _propTypes[\"default\"].string.isRequired,\n endDatePlaceholderText: _propTypes[\"default\"].string,\n startDateAriaLabel: _propTypes[\"default\"].string,\n endDateAriaLabel: _propTypes[\"default\"].string,\n disabled: _DisabledShape[\"default\"],\n required: _propTypes[\"default\"].bool,\n readOnly: _propTypes[\"default\"].bool,\n screenReaderInputMessage: _propTypes[\"default\"].string,\n showClearDates: _propTypes[\"default\"].bool,\n showDefaultInputIcon: _propTypes[\"default\"].bool,\n inputIconPosition: _IconPositionShape[\"default\"],\n customInputIcon: _propTypes[\"default\"].node,\n customArrowIcon: _propTypes[\"default\"].node,\n customCloseIcon: _propTypes[\"default\"].node,\n noBorder: _propTypes[\"default\"].bool,\n block: _propTypes[\"default\"].bool,\n small: _propTypes[\"default\"].bool,\n regular: _propTypes[\"default\"].bool,\n keepFocusOnInput: _propTypes[\"default\"].bool,\n // calendar presentation and interaction related props\n renderMonthText: (0, _airbnbPropTypes.mutuallyExclusiveProps)(_propTypes[\"default\"].func, 'renderMonthText', 'renderMonthElement'),\n renderMonthElement: (0, _airbnbPropTypes.mutuallyExclusiveProps)(_propTypes[\"default\"].func, 'renderMonthText', 'renderMonthElement'),\n renderWeekHeaderElement: _propTypes[\"default\"].func,\n orientation: _OrientationShape[\"default\"],\n anchorDirection: _AnchorDirectionShape[\"default\"],\n openDirection: _OpenDirectionShape[\"default\"],\n horizontalMargin: _propTypes[\"default\"].number,\n withPortal: _propTypes[\"default\"].bool,\n withFullScreenPortal: _propTypes[\"default\"].bool,\n appendToBody: _propTypes[\"default\"].bool,\n disableScroll: _propTypes[\"default\"].bool,\n daySize: _airbnbPropTypes.nonNegativeInteger,\n isRTL: _propTypes[\"default\"].bool,\n firstDayOfWeek: _DayOfWeekShape[\"default\"],\n initialVisibleMonth: _propTypes[\"default\"].func,\n numberOfMonths: _propTypes[\"default\"].number,\n keepOpenOnDateSelect: _propTypes[\"default\"].bool,\n reopenPickerOnClearDates: _propTypes[\"default\"].bool,\n renderCalendarInfo: _propTypes[\"default\"].func,\n calendarInfoPosition: _CalendarInfoPositionShape[\"default\"],\n hideKeyboardShortcutsPanel: _propTypes[\"default\"].bool,\n verticalHeight: _airbnbPropTypes.nonNegativeInteger,\n transitionDuration: _airbnbPropTypes.nonNegativeInteger,\n verticalSpacing: _airbnbPropTypes.nonNegativeInteger,\n horizontalMonthPadding: _airbnbPropTypes.nonNegativeInteger,\n // navigation related props\n dayPickerNavigationInlineStyles: _propTypes[\"default\"].object,\n navPosition: _NavPositionShape[\"default\"],\n navPrev: _propTypes[\"default\"].node,\n navNext: _propTypes[\"default\"].node,\n renderNavPrevButton: _propTypes[\"default\"].func,\n renderNavNextButton: _propTypes[\"default\"].func,\n onPrevMonthClick: _propTypes[\"default\"].func,\n onNextMonthClick: _propTypes[\"default\"].func,\n // day presentation and interaction related props\n renderCalendarDay: _propTypes[\"default\"].func,\n renderDayContents: _propTypes[\"default\"].func,\n minimumNights: _propTypes[\"default\"].number,\n minDate: _reactMomentProptypes[\"default\"].momentObj,\n maxDate: _reactMomentProptypes[\"default\"].momentObj,\n enableOutsideDays: _propTypes[\"default\"].bool,\n isDayBlocked: _propTypes[\"default\"].func,\n isOutsideRange: _propTypes[\"default\"].func,\n isDayHighlighted: _propTypes[\"default\"].func,\n // internationalization props\n displayFormat: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].string, _propTypes[\"default\"].func]),\n monthFormat: _propTypes[\"default\"].string,\n weekDayFormat: _propTypes[\"default\"].string,\n phrases: _propTypes[\"default\"].shape((0, _getPhrasePropTypes[\"default\"])(_defaultPhrases.DateRangePickerPhrases)),\n dayAriaLabelFormat: _propTypes[\"default\"].string\n};\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _constants = require(\"../constants\");\n\nvar _default = _propTypes[\"default\"].oneOf(_constants.WEEKDAYS);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _constants = require(\"../constants\");\n\nvar _default = _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].bool, _propTypes[\"default\"].oneOf([_constants.START_DATE, _constants.END_DATE])]);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _constants = require(\"../constants\");\n\nvar _default = _propTypes[\"default\"].oneOf([_constants.START_DATE, _constants.END_DATE]);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _constants = require(\"../constants\");\n\nvar _default = _propTypes[\"default\"].oneOf([_constants.ICON_BEFORE_POSITION, _constants.ICON_AFTER_POSITION]);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _toConsumableArray2 = _interopRequireDefault(require(\"@babel/runtime/helpers/toConsumableArray\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _airbnbPropTypes = require(\"airbnb-prop-types\");\n\nvar _default = (0, _airbnbPropTypes.and)([_propTypes[\"default\"].instanceOf(Set), function modifiers(props, propName) {\n for (var _len = arguments.length, rest = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n rest[_key - 2] = arguments[_key];\n }\n\n var propValue = props[propName];\n var firstError;\n (0, _toConsumableArray2[\"default\"])(propValue).some(function (v, i) {\n var _PropTypes$string;\n\n var fakePropName = \"\".concat(propName, \": index \").concat(i);\n firstError = (_PropTypes$string = _propTypes[\"default\"].string).isRequired.apply(_PropTypes$string, [(0, _defineProperty2[\"default\"])({}, fakePropName, v), fakePropName].concat(rest));\n return firstError != null;\n });\n return firstError == null ? null : firstError;\n}], 'Modifiers (Set of Strings)');\n\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _constants = require(\"../constants\");\n\nvar _default = _propTypes[\"default\"].oneOf([_constants.NAV_POSITION_BOTTOM, _constants.NAV_POSITION_TOP]);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _constants = require(\"../constants\");\n\nvar _default = _propTypes[\"default\"].oneOf([_constants.OPEN_DOWN, _constants.OPEN_UP]);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _constants = require(\"../constants\");\n\nvar _default = _propTypes[\"default\"].oneOf([_constants.HORIZONTAL_ORIENTATION, _constants.VERTICAL_ORIENTATION]);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _constants = require(\"../constants\");\n\nvar _default = _propTypes[\"default\"].oneOf([_constants.HORIZONTAL_ORIENTATION, _constants.VERTICAL_ORIENTATION, _constants.VERTICAL_SCROLLABLE]);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _reactMomentProptypes = _interopRequireDefault(require(\"react-moment-proptypes\"));\n\nvar _airbnbPropTypes = require(\"airbnb-prop-types\");\n\nvar _defaultPhrases = require(\"../defaultPhrases\");\n\nvar _getPhrasePropTypes = _interopRequireDefault(require(\"../utils/getPhrasePropTypes\"));\n\nvar _IconPositionShape = _interopRequireDefault(require(\"./IconPositionShape\"));\n\nvar _OrientationShape = _interopRequireDefault(require(\"./OrientationShape\"));\n\nvar _AnchorDirectionShape = _interopRequireDefault(require(\"./AnchorDirectionShape\"));\n\nvar _OpenDirectionShape = _interopRequireDefault(require(\"./OpenDirectionShape\"));\n\nvar _DayOfWeekShape = _interopRequireDefault(require(\"./DayOfWeekShape\"));\n\nvar _CalendarInfoPositionShape = _interopRequireDefault(require(\"./CalendarInfoPositionShape\"));\n\nvar _NavPositionShape = _interopRequireDefault(require(\"./NavPositionShape\"));\n\nvar _default = {\n // required props for a functional interactive SingleDatePicker\n date: _reactMomentProptypes[\"default\"].momentObj,\n onDateChange: _propTypes[\"default\"].func.isRequired,\n focused: _propTypes[\"default\"].bool,\n onFocusChange: _propTypes[\"default\"].func.isRequired,\n // input related props\n id: _propTypes[\"default\"].string.isRequired,\n placeholder: _propTypes[\"default\"].string,\n ariaLabel: _propTypes[\"default\"].string,\n disabled: _propTypes[\"default\"].bool,\n required: _propTypes[\"default\"].bool,\n readOnly: _propTypes[\"default\"].bool,\n screenReaderInputMessage: _propTypes[\"default\"].string,\n showClearDate: _propTypes[\"default\"].bool,\n customCloseIcon: _propTypes[\"default\"].node,\n showDefaultInputIcon: _propTypes[\"default\"].bool,\n inputIconPosition: _IconPositionShape[\"default\"],\n customInputIcon: _propTypes[\"default\"].node,\n noBorder: _propTypes[\"default\"].bool,\n block: _propTypes[\"default\"].bool,\n small: _propTypes[\"default\"].bool,\n regular: _propTypes[\"default\"].bool,\n verticalSpacing: _airbnbPropTypes.nonNegativeInteger,\n keepFocusOnInput: _propTypes[\"default\"].bool,\n // calendar presentation and interaction related props\n renderMonthText: (0, _airbnbPropTypes.mutuallyExclusiveProps)(_propTypes[\"default\"].func, 'renderMonthText', 'renderMonthElement'),\n renderMonthElement: (0, _airbnbPropTypes.mutuallyExclusiveProps)(_propTypes[\"default\"].func, 'renderMonthText', 'renderMonthElement'),\n renderWeekHeaderElement: _propTypes[\"default\"].func,\n orientation: _OrientationShape[\"default\"],\n anchorDirection: _AnchorDirectionShape[\"default\"],\n openDirection: _OpenDirectionShape[\"default\"],\n horizontalMargin: _propTypes[\"default\"].number,\n withPortal: _propTypes[\"default\"].bool,\n withFullScreenPortal: _propTypes[\"default\"].bool,\n appendToBody: _propTypes[\"default\"].bool,\n disableScroll: _propTypes[\"default\"].bool,\n initialVisibleMonth: _propTypes[\"default\"].func,\n firstDayOfWeek: _DayOfWeekShape[\"default\"],\n numberOfMonths: _propTypes[\"default\"].number,\n keepOpenOnDateSelect: _propTypes[\"default\"].bool,\n reopenPickerOnClearDate: _propTypes[\"default\"].bool,\n renderCalendarInfo: _propTypes[\"default\"].func,\n calendarInfoPosition: _CalendarInfoPositionShape[\"default\"],\n hideKeyboardShortcutsPanel: _propTypes[\"default\"].bool,\n daySize: _airbnbPropTypes.nonNegativeInteger,\n isRTL: _propTypes[\"default\"].bool,\n verticalHeight: _airbnbPropTypes.nonNegativeInteger,\n transitionDuration: _airbnbPropTypes.nonNegativeInteger,\n horizontalMonthPadding: _airbnbPropTypes.nonNegativeInteger,\n // navigation related props\n dayPickerNavigationInlineStyles: _propTypes[\"default\"].object,\n navPosition: _NavPositionShape[\"default\"],\n navPrev: _propTypes[\"default\"].node,\n navNext: _propTypes[\"default\"].node,\n renderNavPrevButton: _propTypes[\"default\"].func,\n renderNavNextButton: _propTypes[\"default\"].func,\n onPrevMonthClick: _propTypes[\"default\"].func,\n onNextMonthClick: _propTypes[\"default\"].func,\n onClose: _propTypes[\"default\"].func,\n // day presentation and interaction related props\n renderCalendarDay: _propTypes[\"default\"].func,\n renderDayContents: _propTypes[\"default\"].func,\n enableOutsideDays: _propTypes[\"default\"].bool,\n isDayBlocked: _propTypes[\"default\"].func,\n isOutsideRange: _propTypes[\"default\"].func,\n isDayHighlighted: _propTypes[\"default\"].func,\n // internationalization props\n displayFormat: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].string, _propTypes[\"default\"].func]),\n monthFormat: _propTypes[\"default\"].string,\n weekDayFormat: _propTypes[\"default\"].string,\n phrases: _propTypes[\"default\"].shape((0, _getPhrasePropTypes[\"default\"])(_defaultPhrases.SingleDatePickerPhrases)),\n dayAriaLabelFormat: _propTypes[\"default\"].string\n};\nexports[\"default\"] = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\nvar core = {\n white: '#fff',\n gray: '#484848',\n grayLight: '#82888a',\n grayLighter: '#cacccd',\n grayLightest: '#f2f2f2',\n borderMedium: '#c4c4c4',\n border: '#dbdbdb',\n borderLight: '#e4e7e7',\n borderLighter: '#eceeee',\n borderBright: '#f4f5f5',\n primary: '#00a699',\n primaryShade_1: '#33dacd',\n primaryShade_2: '#66e2da',\n primaryShade_3: '#80e8e0',\n primaryShade_4: '#b2f1ec',\n primary_dark: '#008489',\n secondary: '#007a87',\n yellow: '#ffe8bc',\n yellow_dark: '#ffce71'\n};\nvar _default = {\n reactDates: {\n zIndex: 0,\n border: {\n input: {\n border: 0,\n borderTop: 0,\n borderRight: 0,\n borderBottom: '2px solid transparent',\n borderLeft: 0,\n outlineFocused: 0,\n borderFocused: 0,\n borderTopFocused: 0,\n borderLeftFocused: 0,\n borderBottomFocused: \"2px solid \".concat(core.primary_dark),\n borderRightFocused: 0,\n borderRadius: 0\n },\n pickerInput: {\n borderWidth: 1,\n borderStyle: 'solid',\n borderRadius: 2\n }\n },\n color: {\n core: core,\n disabled: core.grayLightest,\n background: core.white,\n backgroundDark: '#f2f2f2',\n backgroundFocused: core.white,\n border: 'rgb(219, 219, 219)',\n text: core.gray,\n textDisabled: core.border,\n textFocused: '#007a87',\n placeholderText: '#757575',\n outside: {\n backgroundColor: core.white,\n backgroundColor_active: core.white,\n backgroundColor_hover: core.white,\n color: core.gray,\n color_active: core.gray,\n color_hover: core.gray\n },\n highlighted: {\n backgroundColor: core.yellow,\n backgroundColor_active: core.yellow_dark,\n backgroundColor_hover: core.yellow_dark,\n color: core.gray,\n color_active: core.gray,\n color_hover: core.gray\n },\n minimumNights: {\n backgroundColor: core.white,\n backgroundColor_active: core.white,\n backgroundColor_hover: core.white,\n borderColor: core.borderLighter,\n color: core.grayLighter,\n color_active: core.grayLighter,\n color_hover: core.grayLighter\n },\n hoveredSpan: {\n backgroundColor: core.primaryShade_4,\n backgroundColor_active: core.primaryShade_3,\n backgroundColor_hover: core.primaryShade_4,\n borderColor: core.primaryShade_3,\n borderColor_active: core.primaryShade_3,\n borderColor_hover: core.primaryShade_3,\n color: core.secondary,\n color_active: core.secondary,\n color_hover: core.secondary\n },\n selectedSpan: {\n backgroundColor: core.primaryShade_2,\n backgroundColor_active: core.primaryShade_1,\n backgroundColor_hover: core.primaryShade_1,\n borderColor: core.primaryShade_1,\n borderColor_active: core.primary,\n borderColor_hover: core.primary,\n color: core.white,\n color_active: core.white,\n color_hover: core.white\n },\n selected: {\n backgroundColor: core.primary,\n backgroundColor_active: core.primary,\n backgroundColor_hover: core.primary,\n borderColor: core.primary,\n borderColor_active: core.primary,\n borderColor_hover: core.primary,\n color: core.white,\n color_active: core.white,\n color_hover: core.white\n },\n blocked_calendar: {\n backgroundColor: core.grayLighter,\n backgroundColor_active: core.grayLighter,\n backgroundColor_hover: core.grayLighter,\n borderColor: core.grayLighter,\n borderColor_active: core.grayLighter,\n borderColor_hover: core.grayLighter,\n color: core.grayLight,\n color_active: core.grayLight,\n color_hover: core.grayLight\n },\n blocked_out_of_range: {\n backgroundColor: core.white,\n backgroundColor_active: core.white,\n backgroundColor_hover: core.white,\n borderColor: core.borderLight,\n borderColor_active: core.borderLight,\n borderColor_hover: core.borderLight,\n color: core.grayLighter,\n color_active: core.grayLighter,\n color_hover: core.grayLighter\n }\n },\n spacing: {\n dayPickerHorizontalPadding: 9,\n captionPaddingTop: 22,\n captionPaddingBottom: 37,\n inputPadding: 0,\n displayTextPaddingVertical: undefined,\n displayTextPaddingTop: 11,\n displayTextPaddingBottom: 9,\n displayTextPaddingHorizontal: undefined,\n displayTextPaddingLeft: 11,\n displayTextPaddingRight: 11,\n displayTextPaddingVertical_small: undefined,\n displayTextPaddingTop_small: 7,\n displayTextPaddingBottom_small: 5,\n displayTextPaddingHorizontal_small: undefined,\n displayTextPaddingLeft_small: 7,\n displayTextPaddingRight_small: 7\n },\n sizing: {\n inputWidth: 130,\n inputWidth_small: 97,\n arrowWidth: 24\n },\n noScrollBarOnVerticalScrollable: false,\n font: {\n size: 14,\n captionSize: 18,\n input: {\n size: 19,\n weight: 200,\n lineHeight: '24px',\n size_small: 15,\n lineHeight_small: '18px',\n letterSpacing_small: '0.2px',\n styleDisabled: 'italic'\n }\n }\n }\n};\nexports[\"default\"] = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = calculateDimension;\n\nfunction calculateDimension(el, axis) {\n var borderBox = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var withMargin = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n if (!el) {\n return 0;\n }\n\n var axisStart = axis === 'width' ? 'Left' : 'Top';\n var axisEnd = axis === 'width' ? 'Right' : 'Bottom'; // Only read styles if we need to\n\n var style = !borderBox || withMargin ? window.getComputedStyle(el) : null; // Offset includes border and padding\n\n var offsetWidth = el.offsetWidth,\n offsetHeight = el.offsetHeight;\n var size = axis === 'width' ? offsetWidth : offsetHeight; // Get the inner size\n\n if (!borderBox) {\n size -= parseFloat(style[\"padding\".concat(axisStart)]) + parseFloat(style[\"padding\".concat(axisEnd)]) + parseFloat(style[\"border\".concat(axisStart, \"Width\")]) + parseFloat(style[\"border\".concat(axisEnd, \"Width\")]);\n } // Apply margin\n\n\n if (withMargin) {\n size += parseFloat(style[\"margin\".concat(axisStart)]) + parseFloat(style[\"margin\".concat(axisEnd)]);\n }\n\n return size;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getScrollParent = getScrollParent;\nexports.getScrollAncestorsOverflowY = getScrollAncestorsOverflowY;\nexports[\"default\"] = disableScroll;\n\nvar getScrollingRoot = function getScrollingRoot() {\n return document.scrollingElement || document.documentElement;\n};\n/**\n * Recursively finds the scroll parent of a node. The scroll parrent of a node\n * is the closest node that is scrollable. A node is scrollable if:\n * - it is allowed to scroll via CSS ('overflow-y' not visible or hidden);\n * - and its children/content are \"bigger\" than the node's box height.\n *\n * The root of the document always scrolls by default.\n *\n * @param {HTMLElement} node Any DOM element.\n * @return {HTMLElement} The scroll parent element.\n */\n\n\nfunction getScrollParent(node) {\n var parent = node.parentElement;\n if (parent == null) return getScrollingRoot();\n\n var _window$getComputedSt = window.getComputedStyle(parent),\n overflowY = _window$getComputedSt.overflowY;\n\n var canScroll = overflowY !== 'visible' && overflowY !== 'hidden';\n\n if (canScroll && parent.scrollHeight > parent.clientHeight) {\n return parent;\n }\n\n return getScrollParent(parent);\n}\n/**\n * Recursively traverses the tree upwards from the given node, capturing all\n * ancestor nodes that scroll along with their current 'overflow-y' CSS\n * property.\n *\n * @param {HTMLElement} node Any DOM element.\n * @param {Map} [acc] Accumulator map.\n * @return {Map} Map of ancestors with their 'overflow-y' value.\n */\n\n\nfunction getScrollAncestorsOverflowY(node) {\n var acc = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Map();\n var scrollingRoot = getScrollingRoot();\n var scrollParent = getScrollParent(node);\n acc.set(scrollParent, scrollParent.style.overflowY);\n if (scrollParent === scrollingRoot) return acc;\n return getScrollAncestorsOverflowY(scrollParent, acc);\n}\n/**\n * Disabling the scroll on a node involves finding all the scrollable ancestors\n * and set their 'overflow-y' CSS property to 'hidden'. When all ancestors have\n * 'overflow-y: hidden' (up to the document element) there is no scroll\n * container, thus all the scroll outside of the node is disabled. In order to\n * enable scroll again, we store the previous value of the 'overflow-y' for\n * every ancestor in a closure and reset it back.\n *\n * @param {HTMLElement} node Any DOM element.\n */\n\n\nfunction disableScroll(node) {\n var scrollAncestorsOverflowY = getScrollAncestorsOverflowY(node);\n\n var toggle = function toggle(on) {\n return scrollAncestorsOverflowY.forEach(function (overflowY, ancestor) {\n ancestor.style.setProperty('overflow-y', on ? 'hidden' : overflowY);\n });\n };\n\n toggle(true);\n return function () {\n return toggle(false);\n };\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = getActiveElement;\n\nfunction getActiveElement() {\n return typeof document !== 'undefined' && document.activeElement;\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = getCalendarDaySettings;\n\nvar _getPhrase = _interopRequireDefault(require(\"./getPhrase\"));\n\nvar _constants = require(\"../constants\");\n\nfunction isSelected(modifiers) {\n return modifiers.has('selected') || modifiers.has('selected-span') || modifiers.has('selected-start') || modifiers.has('selected-end');\n}\n\nfunction shouldUseDefaultCursor(modifiers) {\n return modifiers.has('blocked-minimum-nights') || modifiers.has('blocked-calendar') || modifiers.has('blocked-out-of-range');\n}\n\nfunction isHoveredSpan(modifiers) {\n if (isSelected(modifiers)) return false;\n return modifiers.has('hovered-span') || modifiers.has('after-hovered-start') || modifiers.has('before-hovered-end');\n}\n\nfunction getAriaLabel(phrases, modifiers, day, ariaLabelFormat) {\n var chooseAvailableDate = phrases.chooseAvailableDate,\n dateIsUnavailable = phrases.dateIsUnavailable,\n dateIsSelected = phrases.dateIsSelected,\n dateIsSelectedAsStartDate = phrases.dateIsSelectedAsStartDate,\n dateIsSelectedAsEndDate = phrases.dateIsSelectedAsEndDate;\n var formattedDate = {\n date: day.format(ariaLabelFormat)\n };\n\n if (modifiers.has('selected-start') && dateIsSelectedAsStartDate) {\n return (0, _getPhrase[\"default\"])(dateIsSelectedAsStartDate, formattedDate);\n }\n\n if (modifiers.has('selected-end') && dateIsSelectedAsEndDate) {\n return (0, _getPhrase[\"default\"])(dateIsSelectedAsEndDate, formattedDate);\n }\n\n if (isSelected(modifiers) && dateIsSelected) {\n return (0, _getPhrase[\"default\"])(dateIsSelected, formattedDate);\n }\n\n if (modifiers.has(_constants.BLOCKED_MODIFIER)) {\n return (0, _getPhrase[\"default\"])(dateIsUnavailable, formattedDate);\n }\n\n return (0, _getPhrase[\"default\"])(chooseAvailableDate, formattedDate);\n}\n\nfunction getCalendarDaySettings(day, ariaLabelFormat, daySize, modifiers, phrases) {\n return {\n ariaLabel: getAriaLabel(phrases, modifiers, day, ariaLabelFormat),\n hoveredSpan: isHoveredSpan(modifiers),\n isOutsideRange: modifiers.has('blocked-out-of-range'),\n selected: isSelected(modifiers),\n useDefaultCursor: shouldUseDefaultCursor(modifiers),\n daySizeStyles: {\n width: daySize,\n height: daySize - 1\n }\n };\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = getCalendarMonthWeeks;\n\nvar _moment = _interopRequireDefault(require(\"moment\"));\n\nvar _constants = require(\"../constants\");\n\nfunction getCalendarMonthWeeks(month, enableOutsideDays) {\n var firstDayOfWeek = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _moment[\"default\"].localeData().firstDayOfWeek();\n\n if (!_moment[\"default\"].isMoment(month) || !month.isValid()) {\n throw new TypeError('`month` must be a valid moment object');\n }\n\n if (_constants.WEEKDAYS.indexOf(firstDayOfWeek) === -1) {\n throw new TypeError('`firstDayOfWeek` must be an integer between 0 and 6');\n } // set utc offset to get correct dates in future (when timezone changes)\n\n\n var firstOfMonth = month.clone().startOf('month').hour(12);\n var lastOfMonth = month.clone().endOf('month').hour(12); // calculate the exact first and last days to fill the entire matrix\n // (considering days outside month)\n\n var prevDays = (firstOfMonth.day() + 7 - firstDayOfWeek) % 7;\n var nextDays = (firstDayOfWeek + 6 - lastOfMonth.day()) % 7;\n var firstDay = firstOfMonth.clone().subtract(prevDays, 'day');\n var lastDay = lastOfMonth.clone().add(nextDays, 'day');\n var totalDays = lastDay.diff(firstDay, 'days') + 1;\n var currentDay = firstDay.clone();\n var weeksInMonth = [];\n\n for (var i = 0; i < totalDays; i += 1) {\n if (i % 7 === 0) {\n weeksInMonth.push([]);\n }\n\n var day = null;\n\n if (i >= prevDays && i < totalDays - nextDays || enableOutsideDays) {\n day = currentDay.clone();\n }\n\n weeksInMonth[weeksInMonth.length - 1].push(day);\n currentDay.add(1, 'day');\n }\n\n return weeksInMonth;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = getCalendarMonthWidth;\n\nfunction getCalendarMonthWidth(daySize) {\n var calendarMonthPadding = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n return 7 * daySize + 2 * calendarMonthPadding + 1;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = getDetachedContainerStyles;\n\nvar _constants = require(\"../constants\");\n\n/**\n * Calculate and return a CSS transform style to position a detached element\n * next to a reference element. The open and anchor direction indicate wether\n * it should be positioned above/below and/or to the left/right of the\n * reference element.\n *\n * Assuming r(0,0), r(1,1), d(0,0), d(1,1) for the bottom-left and top-right\n * corners of the reference and detached elements, respectively:\n * - openDirection = DOWN, anchorDirection = LEFT => d(0,1) == r(0,1)\n * - openDirection = UP, anchorDirection = LEFT => d(0,0) == r(0,0)\n * - openDirection = DOWN, anchorDirection = RIGHT => d(1,1) == r(1,1)\n * - openDirection = UP, anchorDirection = RIGHT => d(1,0) == r(1,0)\n *\n * By using a CSS transform, we allow to further position it using\n * top/bottom CSS properties for the anchor gutter.\n *\n * @param {string} openDirection The vertical positioning of the popup\n * @param {string} anchorDirection The horizontal position of the popup\n * @param {HTMLElement} referenceEl The reference element\n */\nfunction getDetachedContainerStyles(openDirection, anchorDirection, referenceEl) {\n var referenceRect = referenceEl.getBoundingClientRect();\n var offsetX = referenceRect.left;\n var offsetY = referenceRect.top;\n\n if (openDirection === _constants.OPEN_UP) {\n offsetY = -(window.innerHeight - referenceRect.bottom);\n }\n\n if (anchorDirection === _constants.ANCHOR_RIGHT) {\n offsetX = -(window.innerWidth - referenceRect.right);\n }\n\n return {\n transform: \"translate3d(\".concat(Math.round(offsetX), \"px, \").concat(Math.round(offsetY), \"px, 0)\")\n };\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = getInputHeight;\n\n/* eslint-disable camelcase */\nfunction getPadding(vertical, top, bottom) {\n var isTopDefined = typeof top === 'number';\n var isBottomDefined = typeof bottom === 'number';\n var isVerticalDefined = typeof vertical === 'number';\n\n if (isTopDefined && isBottomDefined) {\n return top + bottom;\n }\n\n if (isTopDefined && isVerticalDefined) {\n return top + vertical;\n }\n\n if (isTopDefined) {\n return top;\n }\n\n if (isBottomDefined && isVerticalDefined) {\n return bottom + vertical;\n }\n\n if (isBottomDefined) {\n return bottom;\n }\n\n if (isVerticalDefined) {\n return 2 * vertical;\n }\n\n return 0;\n}\n\nfunction getInputHeight(_ref, small) {\n var _ref$font$input = _ref.font.input,\n lineHeight = _ref$font$input.lineHeight,\n lineHeight_small = _ref$font$input.lineHeight_small,\n _ref$spacing = _ref.spacing,\n inputPadding = _ref$spacing.inputPadding,\n displayTextPaddingVertical = _ref$spacing.displayTextPaddingVertical,\n displayTextPaddingTop = _ref$spacing.displayTextPaddingTop,\n displayTextPaddingBottom = _ref$spacing.displayTextPaddingBottom,\n displayTextPaddingVertical_small = _ref$spacing.displayTextPaddingVertical_small,\n displayTextPaddingTop_small = _ref$spacing.displayTextPaddingTop_small,\n displayTextPaddingBottom_small = _ref$spacing.displayTextPaddingBottom_small;\n var calcLineHeight = small ? lineHeight_small : lineHeight;\n var padding = small ? getPadding(displayTextPaddingVertical_small, displayTextPaddingTop_small, displayTextPaddingBottom_small) : getPadding(displayTextPaddingVertical, displayTextPaddingTop, displayTextPaddingBottom);\n return parseInt(calcLineHeight, 10) + 2 * inputPadding + padding;\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = getNumberOfCalendarMonthWeeks;\n\nvar _moment = _interopRequireDefault(require(\"moment\"));\n\nfunction getBlankDaysBeforeFirstDay(firstDayOfMonth, firstDayOfWeek) {\n var weekDayDiff = firstDayOfMonth.day() - firstDayOfWeek;\n return (weekDayDiff + 7) % 7;\n}\n\nfunction getNumberOfCalendarMonthWeeks(month) {\n var firstDayOfWeek = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _moment[\"default\"].localeData().firstDayOfWeek();\n var firstDayOfMonth = month.clone().startOf('month');\n var numBlankDays = getBlankDaysBeforeFirstDay(firstDayOfMonth, firstDayOfWeek);\n return Math.ceil((numBlankDays + month.daysInMonth()) / 7);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = getPhrase;\n\nfunction getPhrase(phrase, args) {\n if (typeof phrase === 'string') return phrase;\n\n if (typeof phrase === 'function') {\n return phrase(args);\n }\n\n return '';\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = getPhrasePropTypes;\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction getPhrasePropTypes(defaultPhrases) {\n return Object.keys(defaultPhrases).reduce(function (phrases, key) {\n return _objectSpread({}, phrases, (0, _defineProperty2[\"default\"])({}, key, _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].string, _propTypes[\"default\"].func, _propTypes[\"default\"].node])));\n }, {});\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = getPooledMoment;\n\nvar _moment = _interopRequireDefault(require(\"moment\"));\n\nvar momentPool = new Map();\n\nfunction getPooledMoment(dayString) {\n if (!momentPool.has(dayString)) {\n momentPool.set(dayString, (0, _moment[\"default\"])(dayString));\n }\n\n return momentPool.get(dayString);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = getPreviousMonthMemoLast;\nvar getPreviousMonthMemoKey;\nvar getPreviousMonthMemoValue;\n\nfunction getPreviousMonthMemoLast(month) {\n if (month !== getPreviousMonthMemoKey) {\n getPreviousMonthMemoKey = month;\n getPreviousMonthMemoValue = month.clone().subtract(1, 'month');\n }\n\n return getPreviousMonthMemoValue;\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = getResponsiveContainerStyles;\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _constants = require(\"../constants\");\n\nfunction getResponsiveContainerStyles(anchorDirection, currentOffset, containerEdge, margin) {\n var windowWidth = typeof window !== 'undefined' ? window.innerWidth : 0;\n var calculatedOffset = anchorDirection === _constants.ANCHOR_LEFT ? windowWidth - containerEdge : containerEdge;\n var calculatedMargin = margin || 0;\n return (0, _defineProperty2[\"default\"])({}, anchorDirection, Math.min(currentOffset + calculatedOffset - calculatedMargin, 0));\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = getSelectedDateOffset;\n\nvar defaultModifier = function defaultModifier(day) {\n return day;\n};\n\nfunction getSelectedDateOffset(fn, day) {\n var modifier = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultModifier;\n if (!fn) return day;\n return modifier(fn(day.clone()));\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = getTransformStyles;\n\nfunction getTransformStyles(transformValue) {\n return {\n transform: transformValue,\n msTransform: transformValue,\n MozTransform: transformValue,\n WebkitTransform: transformValue\n };\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = getVisibleDays;\n\nvar _moment = _interopRequireDefault(require(\"moment\"));\n\nvar _toISOMonthString = _interopRequireDefault(require(\"./toISOMonthString\"));\n\nfunction getVisibleDays(month, numberOfMonths, enableOutsideDays, withoutTransitionMonths) {\n if (!_moment[\"default\"].isMoment(month)) return {};\n var visibleDaysByMonth = {};\n var currentMonth = withoutTransitionMonths ? month.clone() : month.clone().subtract(1, 'month');\n\n for (var i = 0; i < (withoutTransitionMonths ? numberOfMonths : numberOfMonths + 2); i += 1) {\n var visibleDays = []; // set utc offset to get correct dates in future (when timezone changes)\n\n var baseDate = currentMonth.clone();\n var firstOfMonth = baseDate.clone().startOf('month').hour(12);\n var lastOfMonth = baseDate.clone().endOf('month').hour(12);\n var currentDay = firstOfMonth.clone(); // days belonging to the previous month\n\n if (enableOutsideDays) {\n for (var j = 0; j < currentDay.weekday(); j += 1) {\n var prevDay = currentDay.clone().subtract(j + 1, 'day');\n visibleDays.unshift(prevDay);\n }\n }\n\n while (currentDay < lastOfMonth) {\n visibleDays.push(currentDay.clone());\n currentDay.add(1, 'day');\n }\n\n if (enableOutsideDays) {\n // weekday() returns the index of the day of the week according to the locale\n // this means if the week starts on Monday, weekday() will return 0 for a Monday date, not 1\n if (currentDay.weekday() !== 0) {\n // days belonging to the next month\n for (var k = currentDay.weekday(), count = 0; k < 7; k += 1, count += 1) {\n var nextDay = currentDay.clone().add(count, 'day');\n visibleDays.push(nextDay);\n }\n }\n }\n\n visibleDaysByMonth[(0, _toISOMonthString[\"default\"])(currentMonth)] = visibleDays;\n currentMonth = currentMonth.clone().add(1, 'month');\n }\n\n return visibleDaysByMonth;\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = isAfterDay;\n\nvar _moment = _interopRequireDefault(require(\"moment\"));\n\nvar _isBeforeDay = _interopRequireDefault(require(\"./isBeforeDay\"));\n\nvar _isSameDay = _interopRequireDefault(require(\"./isSameDay\"));\n\nfunction isAfterDay(a, b) {\n if (!_moment[\"default\"].isMoment(a) || !_moment[\"default\"].isMoment(b)) return false;\n return !(0, _isBeforeDay[\"default\"])(a, b) && !(0, _isSameDay[\"default\"])(a, b);\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = isBeforeDay;\n\nvar _moment = _interopRequireDefault(require(\"moment\"));\n\nfunction isBeforeDay(a, b) {\n if (!_moment[\"default\"].isMoment(a) || !_moment[\"default\"].isMoment(b)) return false;\n var aYear = a.year();\n var aMonth = a.month();\n var bYear = b.year();\n var bMonth = b.month();\n var isSameYear = aYear === bYear;\n var isSameMonth = aMonth === bMonth;\n if (isSameYear && isSameMonth) return a.date() < b.date();\n if (isSameYear) return aMonth < bMonth;\n return aYear < bYear;\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = isDayVisible;\n\nvar _moment = _interopRequireDefault(require(\"moment\"));\n\nvar _isBeforeDay = _interopRequireDefault(require(\"./isBeforeDay\"));\n\nvar _isAfterDay = _interopRequireDefault(require(\"./isAfterDay\"));\n\nvar _toISOMonthString = _interopRequireDefault(require(\"./toISOMonthString\"));\n\nvar startCacheOutsideDays = new Map();\nvar endCacheOutsideDays = new Map();\nvar startCacheInsideDays = new Map();\nvar endCacheInsideDays = new Map();\n\nfunction isDayVisible(day, month, numberOfMonths, enableOutsideDays) {\n if (!_moment[\"default\"].isMoment(day)) return false; // Cloning is a little expensive, so we want to do it as little as possible.\n\n var startKey = (0, _toISOMonthString[\"default\"])(month); // eslint-disable-next-line prefer-template\n\n var endKey = startKey + '+' + numberOfMonths;\n\n if (enableOutsideDays) {\n if (!startCacheOutsideDays.has(startKey)) {\n startCacheOutsideDays.set(startKey, month.clone().startOf('month').startOf('week'));\n }\n\n if ((0, _isBeforeDay[\"default\"])(day, startCacheOutsideDays.get(startKey))) return false;\n\n if (!endCacheOutsideDays.has(endKey)) {\n endCacheOutsideDays.set(endKey, month.clone().endOf('week').add(numberOfMonths - 1, 'months').endOf('month').endOf('week'));\n }\n\n return !(0, _isAfterDay[\"default\"])(day, endCacheOutsideDays.get(endKey));\n } // !enableOutsideDays\n\n\n if (!startCacheInsideDays.has(startKey)) {\n startCacheInsideDays.set(startKey, month.clone().startOf('month'));\n }\n\n if ((0, _isBeforeDay[\"default\"])(day, startCacheInsideDays.get(startKey))) return false;\n\n if (!endCacheInsideDays.has(endKey)) {\n endCacheInsideDays.set(endKey, month.clone().add(numberOfMonths - 1, 'months').endOf('month'));\n }\n\n return !(0, _isAfterDay[\"default\"])(day, endCacheInsideDays.get(endKey));\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = isInclusivelyAfterDay;\n\nvar _moment = _interopRequireDefault(require(\"moment\"));\n\nvar _isBeforeDay = _interopRequireDefault(require(\"./isBeforeDay\"));\n\nfunction isInclusivelyAfterDay(a, b) {\n if (!_moment[\"default\"].isMoment(a) || !_moment[\"default\"].isMoment(b)) return false;\n return !(0, _isBeforeDay[\"default\"])(a, b);\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = isInclusivelyBeforeDay;\n\nvar _moment = _interopRequireDefault(require(\"moment\"));\n\nvar _isAfterDay = _interopRequireDefault(require(\"./isAfterDay\"));\n\nfunction isInclusivelyBeforeDay(a, b) {\n if (!_moment[\"default\"].isMoment(a) || !_moment[\"default\"].isMoment(b)) return false;\n return !(0, _isAfterDay[\"default\"])(a, b);\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = isNextDay;\n\nvar _moment = _interopRequireDefault(require(\"moment\"));\n\nvar _isSameDay = _interopRequireDefault(require(\"./isSameDay\"));\n\nfunction isNextDay(a, b) {\n if (!_moment[\"default\"].isMoment(a) || !_moment[\"default\"].isMoment(b)) return false;\n var nextDay = (0, _moment[\"default\"])(a).add(1, 'day');\n return (0, _isSameDay[\"default\"])(nextDay, b);\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = isNextMonth;\n\nvar _moment = _interopRequireDefault(require(\"moment\"));\n\nvar _isSameMonth = _interopRequireDefault(require(\"./isSameMonth\"));\n\nfunction isNextMonth(a, b) {\n if (!_moment[\"default\"].isMoment(a) || !_moment[\"default\"].isMoment(b)) return false;\n return (0, _isSameMonth[\"default\"])(a.clone().add(1, 'month'), b);\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = isPrevMonth;\n\nvar _moment = _interopRequireDefault(require(\"moment\"));\n\nvar _isSameMonth = _interopRequireDefault(require(\"./isSameMonth\"));\n\nfunction isPrevMonth(a, b) {\n if (!_moment[\"default\"].isMoment(a) || !_moment[\"default\"].isMoment(b)) return false;\n return (0, _isSameMonth[\"default\"])(a.clone().subtract(1, 'month'), b);\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = isPreviousDay;\n\nvar _moment = _interopRequireDefault(require(\"moment\"));\n\nvar _isSameDay = _interopRequireDefault(require(\"./isSameDay\"));\n\nfunction isPreviousDay(a, b) {\n if (!_moment[\"default\"].isMoment(a) || !_moment[\"default\"].isMoment(b)) return false;\n var dayBefore = (0, _moment[\"default\"])(a).subtract(1, 'day');\n return (0, _isSameDay[\"default\"])(dayBefore, b);\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = isSameDay;\n\nvar _moment = _interopRequireDefault(require(\"moment\"));\n\nfunction isSameDay(a, b) {\n if (!_moment[\"default\"].isMoment(a) || !_moment[\"default\"].isMoment(b)) return false; // Compare least significant, most likely to change units first\n // Moment's isSame clones moment inputs and is a tad slow\n\n return a.date() === b.date() && a.month() === b.month() && a.year() === b.year();\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = isSameMonth;\n\nvar _moment = _interopRequireDefault(require(\"moment\"));\n\nfunction isSameMonth(a, b) {\n if (!_moment[\"default\"].isMoment(a) || !_moment[\"default\"].isMoment(b)) return false; // Compare least significant, most likely to change units first\n // Moment's isSame clones moment inputs and is a tad slow\n\n return a.month() === b.month() && a.year() === b.year();\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = isTransitionEndSupported;\n\nfunction isTransitionEndSupported() {\n return !!(typeof window !== 'undefined' && 'TransitionEvent' in window);\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.addModifier = addModifier;\nexports.deleteModifier = deleteModifier;\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _isDayVisible = _interopRequireDefault(require(\"./isDayVisible\"));\n\nvar _toISODateString = _interopRequireDefault(require(\"./toISODateString\"));\n\nvar _toISOMonthString = _interopRequireDefault(require(\"./toISOMonthString\"));\n\nvar _getPreviousMonthMemoLast = _interopRequireDefault(require(\"./getPreviousMonthMemoLast\"));\n\nvar _constants = require(\"../constants\");\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction addModifier(updatedDays, day, modifier, props, state) {\n var numberOfVisibleMonths = props.numberOfMonths,\n enableOutsideDays = props.enableOutsideDays,\n orientation = props.orientation;\n var firstVisibleMonth = state.currentMonth,\n visibleDays = state.visibleDays;\n var currentMonth = firstVisibleMonth;\n var numberOfMonths = numberOfVisibleMonths;\n\n if (orientation === _constants.VERTICAL_SCROLLABLE) {\n numberOfMonths = Object.keys(visibleDays).length;\n } else {\n currentMonth = (0, _getPreviousMonthMemoLast[\"default\"])(currentMonth);\n numberOfMonths += 2;\n }\n\n if (!day || !(0, _isDayVisible[\"default\"])(day, currentMonth, numberOfMonths, enableOutsideDays)) {\n return updatedDays;\n }\n\n var iso = (0, _toISODateString[\"default\"])(day);\n\n var updatedDaysAfterAddition = _objectSpread({}, updatedDays);\n\n if (enableOutsideDays) {\n var monthsToUpdate = Object.keys(visibleDays).filter(function (monthKey) {\n return Object.keys(visibleDays[monthKey]).indexOf(iso) > -1;\n });\n updatedDaysAfterAddition = monthsToUpdate.reduce(function (acc, monthIso) {\n var month = updatedDays[monthIso] || visibleDays[monthIso];\n\n if (!month[iso] || !month[iso].has(modifier)) {\n var modifiers = new Set(month[iso]);\n modifiers.add(modifier);\n acc[monthIso] = _objectSpread({}, month, (0, _defineProperty2[\"default\"])({}, iso, modifiers));\n }\n\n return acc;\n }, updatedDaysAfterAddition);\n } else {\n var monthIso = (0, _toISOMonthString[\"default\"])(day);\n var month = updatedDays[monthIso] || visibleDays[monthIso] || {};\n\n if (!month[iso] || !month[iso].has(modifier)) {\n var modifiers = new Set(month[iso]);\n modifiers.add(modifier);\n updatedDaysAfterAddition[monthIso] = _objectSpread({}, month, (0, _defineProperty2[\"default\"])({}, iso, modifiers));\n }\n }\n\n return updatedDaysAfterAddition;\n}\n\nfunction deleteModifier(updatedDays, day, modifier, props, state) {\n var numberOfVisibleMonths = props.numberOfMonths,\n enableOutsideDays = props.enableOutsideDays,\n orientation = props.orientation;\n var firstVisibleMonth = state.currentMonth,\n visibleDays = state.visibleDays;\n var currentMonth = firstVisibleMonth;\n var numberOfMonths = numberOfVisibleMonths;\n\n if (orientation === _constants.VERTICAL_SCROLLABLE) {\n numberOfMonths = Object.keys(visibleDays).length;\n } else {\n currentMonth = (0, _getPreviousMonthMemoLast[\"default\"])(currentMonth);\n numberOfMonths += 2;\n }\n\n if (!day || !(0, _isDayVisible[\"default\"])(day, currentMonth, numberOfMonths, enableOutsideDays)) {\n return updatedDays;\n }\n\n var iso = (0, _toISODateString[\"default\"])(day);\n\n var updatedDaysAfterDeletion = _objectSpread({}, updatedDays);\n\n if (enableOutsideDays) {\n var monthsToUpdate = Object.keys(visibleDays).filter(function (monthKey) {\n return Object.keys(visibleDays[monthKey]).indexOf(iso) > -1;\n });\n updatedDaysAfterDeletion = monthsToUpdate.reduce(function (acc, monthIso) {\n var month = updatedDays[monthIso] || visibleDays[monthIso];\n\n if (month[iso] && month[iso].has(modifier)) {\n var modifiers = new Set(month[iso]);\n modifiers[\"delete\"](modifier);\n acc[monthIso] = _objectSpread({}, month, (0, _defineProperty2[\"default\"])({}, iso, modifiers));\n }\n\n return acc;\n }, updatedDaysAfterDeletion);\n } else {\n var monthIso = (0, _toISOMonthString[\"default\"])(day);\n var month = updatedDays[monthIso] || visibleDays[monthIso] || {};\n\n if (month[iso] && month[iso].has(modifier)) {\n var modifiers = new Set(month[iso]);\n modifiers[\"delete\"](modifier);\n updatedDaysAfterDeletion[monthIso] = _objectSpread({}, month, (0, _defineProperty2[\"default\"])({}, iso, modifiers));\n }\n }\n\n return updatedDaysAfterDeletion;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = noflip;\nvar NOFLIP = '/* @noflip */'; // Appends a noflip comment to a style rule in order to prevent it from being automatically\n// flipped in RTL contexts. This should be used only in situations where the style must remain\n// unflipped regardless of direction context. See: https://github.com/kentcdodds/rtl-css-js#usage\n\nfunction noflip(value) {\n if (typeof value === 'number') return \"\".concat(value, \"px \").concat(NOFLIP);\n if (typeof value === 'string') return \"\".concat(value, \" \").concat(NOFLIP);\n throw new TypeError('noflip expects a string or a number');\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = registerCSSInterfaceWithDefaultTheme;\n\nvar _reactWithStylesInterfaceCss = _interopRequireDefault(require(\"react-with-styles-interface-css\"));\n\nvar _registerInterfaceWithDefaultTheme = _interopRequireDefault(require(\"./registerInterfaceWithDefaultTheme\"));\n\nfunction registerCSSInterfaceWithDefaultTheme() {\n (0, _registerInterfaceWithDefaultTheme[\"default\"])(_reactWithStylesInterfaceCss[\"default\"]);\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = registerInterfaceWithDefaultTheme;\n\nvar _ThemedStyleSheet = _interopRequireDefault(require(\"react-with-styles/lib/ThemedStyleSheet\"));\n\nvar _DefaultTheme = _interopRequireDefault(require(\"../theme/DefaultTheme\"));\n\nfunction registerInterfaceWithDefaultTheme(reactWithStylesInterface) {\n _ThemedStyleSheet[\"default\"].registerInterface(reactWithStylesInterface);\n\n _ThemedStyleSheet[\"default\"].registerTheme(_DefaultTheme[\"default\"]);\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = toISODateString;\n\nvar _moment = _interopRequireDefault(require(\"moment\"));\n\nvar _toMomentObject = _interopRequireDefault(require(\"./toMomentObject\"));\n\nfunction toISODateString(date, currentFormat) {\n var dateObj = _moment[\"default\"].isMoment(date) ? date : (0, _toMomentObject[\"default\"])(date, currentFormat);\n if (!dateObj) return null; // Template strings compiled in strict mode uses concat, which is slow. Since\n // this code is in a hot path and we want it to be as fast as possible, we\n // want to use old-fashioned +.\n // eslint-disable-next-line prefer-template\n\n return dateObj.year() + '-' + String(dateObj.month() + 1).padStart(2, '0') + '-' + String(dateObj.date()).padStart(2, '0');\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = toISOMonthString;\n\nvar _moment = _interopRequireDefault(require(\"moment\"));\n\nvar _toMomentObject = _interopRequireDefault(require(\"./toMomentObject\"));\n\nfunction toISOMonthString(date, currentFormat) {\n var dateObj = _moment[\"default\"].isMoment(date) ? date : (0, _toMomentObject[\"default\"])(date, currentFormat);\n if (!dateObj) return null; // Template strings compiled in strict mode uses concat, which is slow. Since\n // this code is in a hot path and we want it to be as fast as possible, we\n // want to use old-fashioned +.\n // eslint-disable-next-line prefer-template\n\n return dateObj.year() + '-' + String(dateObj.month() + 1).padStart(2, '0');\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = toLocalizedDateString;\n\nvar _moment = _interopRequireDefault(require(\"moment\"));\n\nvar _toMomentObject = _interopRequireDefault(require(\"./toMomentObject\"));\n\nvar _constants = require(\"../constants\");\n\nfunction toLocalizedDateString(date, currentFormat) {\n var dateObj = _moment[\"default\"].isMoment(date) ? date : (0, _toMomentObject[\"default\"])(date, currentFormat);\n if (!dateObj) return null;\n return dateObj.format(_constants.DISPLAY_FORMAT);\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = toMomentObject;\n\nvar _moment = _interopRequireDefault(require(\"moment\"));\n\nvar _constants = require(\"../constants\");\n\nfunction toMomentObject(dateString, customFormat) {\n var dateFormats = customFormat ? [customFormat, _constants.DISPLAY_FORMAT, _constants.ISO_FORMAT] : [_constants.DISPLAY_FORMAT, _constants.ISO_FORMAT];\n var date = (0, _moment[\"default\"])(dateString, dateFormats, true);\n return date.isValid() ? date.hour(12) : null;\n}","/** @license React v17.0.2\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),m=require(\"object-assign\"),r=require(\"scheduler\");function y(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;cb}return!1}function B(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}var D={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){D[a]=new B(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];D[b]=new B(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){D[a]=new B(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){D[a]=new B(a,2,!1,a,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){D[a]=new B(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){D[a]=new B(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){D[a]=new B(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){D[a]=new B(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){D[a]=new B(a,5,!1,a.toLowerCase(),null,!1,!1)});var oa=/[\\-:]([a-z])/g;function pa(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(oa,\npa);D[b]=new B(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(oa,pa);D[b]=new B(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(oa,pa);D[b]=new B(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){D[a]=new B(a,1,!1,a.toLowerCase(),null,!1,!1)});\nD.xlinkHref=new B(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){D[a]=new B(a,1,!1,a.toLowerCase(),null,!0,!0)});\nfunction qa(a,b,c,d){var e=D.hasOwnProperty(b)?D[b]:null;var f=null!==e?0===e.type:d?!1:!(2h||e[g]!==f[h])return\"\\n\"+e[g].replace(\" at new \",\" at \");while(1<=g&&0<=h)}break}}}finally{Oa=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:\"\")?Na(a):\"\"}\nfunction Qa(a){switch(a.tag){case 5:return Na(a.type);case 16:return Na(\"Lazy\");case 13:return Na(\"Suspense\");case 19:return Na(\"SuspenseList\");case 0:case 2:case 15:return a=Pa(a.type,!1),a;case 11:return a=Pa(a.type.render,!1),a;case 22:return a=Pa(a.type._render,!1),a;case 1:return a=Pa(a.type,!0),a;default:return\"\"}}\nfunction Ra(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ua:return\"Fragment\";case ta:return\"Portal\";case xa:return\"Profiler\";case wa:return\"StrictMode\";case Ba:return\"Suspense\";case Ca:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case za:return(a.displayName||\"Context\")+\".Consumer\";case ya:return(a._context.displayName||\"Context\")+\".Provider\";case Aa:var b=a.render;b=b.displayName||b.name||\"\";\nreturn a.displayName||(\"\"!==b?\"ForwardRef(\"+b+\")\":\"ForwardRef\");case Da:return Ra(a.type);case Fa:return Ra(a._render);case Ea:b=a._payload;a=a._init;try{return Ra(a(b))}catch(c){}}return null}function Sa(a){switch(typeof a){case \"boolean\":case \"number\":case \"object\":case \"string\":case \"undefined\":return a;default:return\"\"}}function Ta(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ua(a){var b=Ta(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function Va(a){a._valueTracker||(a._valueTracker=Ua(a))}function Wa(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=Ta(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Xa(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}\nfunction Ya(a,b){var c=b.checked;return m({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Za(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Sa(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function $a(a,b){b=b.checked;null!=b&&qa(a,\"checked\",b,!1)}\nfunction ab(a,b){$a(a,b);var c=Sa(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?bb(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&bb(a,b.type,Sa(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction cb(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction bb(a,b,c){if(\"number\"!==b||Xa(a.ownerDocument)!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}function db(a){var b=\"\";aa.Children.forEach(a,function(a){null!=a&&(b+=a)});return b}function eb(a,b){a=m({children:void 0},b);if(b=db(b.children))a.children=b;return a}\nfunction fb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e=c.length))throw Error(y(93));c=c[0]}b=c}null==b&&(b=\"\");c=b}a._wrapperState={initialValue:Sa(c)}}\nfunction ib(a,b){var c=Sa(b.value),d=Sa(b.defaultValue);null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==c&&(a.defaultValue=c));null!=d&&(a.defaultValue=\"\"+d)}function jb(a){var b=a.textContent;b===a._wrapperState.initialValue&&\"\"!==b&&null!==b&&(a.value=b)}var kb={html:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"};\nfunction lb(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}function mb(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?lb(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar nb,ob=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(a.namespaceURI!==kb.svg||\"innerHTML\"in a)a.innerHTML=b;else{nb=nb||document.createElement(\"div\");nb.innerHTML=\"\"+b.valueOf().toString()+\"\";for(b=nb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction pb(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar qb={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,\nfloodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},rb=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(qb).forEach(function(a){rb.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);qb[b]=qb[a]})});function sb(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||qb.hasOwnProperty(a)&&qb[a]?(\"\"+b).trim():b+\"px\"}\nfunction tb(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=sb(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var ub=m({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction vb(a,b){if(b){if(ub[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(y(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(y(60));if(!(\"object\"===typeof b.dangerouslySetInnerHTML&&\"__html\"in b.dangerouslySetInnerHTML))throw Error(y(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(y(62));}}\nfunction wb(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}function xb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var yb=null,zb=null,Ab=null;\nfunction Bb(a){if(a=Cb(a)){if(\"function\"!==typeof yb)throw Error(y(280));var b=a.stateNode;b&&(b=Db(b),yb(a.stateNode,a.type,b))}}function Eb(a){zb?Ab?Ab.push(a):Ab=[a]:zb=a}function Fb(){if(zb){var a=zb,b=Ab;Ab=zb=null;Bb(a);if(b)for(a=0;ad?0:1<c;c++)b.push(a);return b}\nfunction $c(a,b,c){a.pendingLanes|=b;var d=b-1;a.suspendedLanes&=d;a.pingedLanes&=d;a=a.eventTimes;b=31-Vc(b);a[b]=c}var Vc=Math.clz32?Math.clz32:ad,bd=Math.log,cd=Math.LN2;function ad(a){return 0===a?32:31-(bd(a)/cd|0)|0}var dd=r.unstable_UserBlockingPriority,ed=r.unstable_runWithPriority,fd=!0;function gd(a,b,c,d){Kb||Ib();var e=hd,f=Kb;Kb=!0;try{Hb(e,a,b,c,d)}finally{(Kb=f)||Mb()}}function id(a,b,c,d){ed(dd,hd.bind(null,a,b,c,d))}\nfunction hd(a,b,c,d){if(fd){var e;if((e=0===(b&4))&&0=be),ee=String.fromCharCode(32),fe=!1;\nfunction ge(a,b){switch(a){case \"keyup\":return-1!==$d.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"focusout\":return!0;default:return!1}}function he(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var ie=!1;function je(a,b){switch(a){case \"compositionend\":return he(b);case \"keypress\":if(32!==b.which)return null;fe=!0;return ee;case \"textInput\":return a=b.data,a===ee&&fe?null:a;default:return null}}\nfunction ke(a,b){if(ie)return\"compositionend\"===a||!ae&&ge(a,b)?(a=nd(),md=ld=kd=null,ie=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Ke(c)}}function Me(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Me(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Ne(){for(var a=window,b=Xa();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Xa(a.document)}return b}function Oe(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nvar Pe=fa&&\"documentMode\"in document&&11>=document.documentMode,Qe=null,Re=null,Se=null,Te=!1;\nfunction Ue(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;Te||null==Qe||Qe!==Xa(d)||(d=Qe,\"selectionStart\"in d&&Oe(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Se&&Je(Se,d)||(Se=d,d=oe(Re,\"onSelect\"),0Af||(a.current=zf[Af],zf[Af]=null,Af--)}function I(a,b){Af++;zf[Af]=a.current;a.current=b}var Cf={},M=Bf(Cf),N=Bf(!1),Df=Cf;\nfunction Ef(a,b){var c=a.type.contextTypes;if(!c)return Cf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function Ff(a){a=a.childContextTypes;return null!==a&&void 0!==a}function Gf(){H(N);H(M)}function Hf(a,b,c){if(M.current!==Cf)throw Error(y(168));I(M,b);I(N,c)}\nfunction If(a,b,c){var d=a.stateNode;a=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in a))throw Error(y(108,Ra(b)||\"Unknown\",e));return m({},c,d)}function Jf(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Cf;Df=M.current;I(M,a);I(N,N.current);return!0}function Kf(a,b,c){var d=a.stateNode;if(!d)throw Error(y(169));c?(a=If(a,b,Df),d.__reactInternalMemoizedMergedChildContext=a,H(N),H(M),I(M,a)):H(N);I(N,c)}\nvar Lf=null,Mf=null,Nf=r.unstable_runWithPriority,Of=r.unstable_scheduleCallback,Pf=r.unstable_cancelCallback,Qf=r.unstable_shouldYield,Rf=r.unstable_requestPaint,Sf=r.unstable_now,Tf=r.unstable_getCurrentPriorityLevel,Uf=r.unstable_ImmediatePriority,Vf=r.unstable_UserBlockingPriority,Wf=r.unstable_NormalPriority,Xf=r.unstable_LowPriority,Yf=r.unstable_IdlePriority,Zf={},$f=void 0!==Rf?Rf:function(){},ag=null,bg=null,cg=!1,dg=Sf(),O=1E4>dg?Sf:function(){return Sf()-dg};\nfunction eg(){switch(Tf()){case Uf:return 99;case Vf:return 98;case Wf:return 97;case Xf:return 96;case Yf:return 95;default:throw Error(y(332));}}function fg(a){switch(a){case 99:return Uf;case 98:return Vf;case 97:return Wf;case 96:return Xf;case 95:return Yf;default:throw Error(y(332));}}function gg(a,b){a=fg(a);return Nf(a,b)}function hg(a,b,c){a=fg(a);return Of(a,b,c)}function ig(){if(null!==bg){var a=bg;bg=null;Pf(a)}jg()}\nfunction jg(){if(!cg&&null!==ag){cg=!0;var a=0;try{var b=ag;gg(99,function(){for(;az?(q=u,u=null):q=u.sibling;var n=p(e,u,h[z],k);if(null===n){null===u&&(u=q);break}a&&u&&null===\nn.alternate&&b(e,u);g=f(n,g,z);null===t?l=n:t.sibling=n;t=n;u=q}if(z===h.length)return c(e,u),l;if(null===u){for(;zz?(q=u,u=null):q=u.sibling;var w=p(e,u,n.value,k);if(null===w){null===u&&(u=q);break}a&&u&&null===w.alternate&&b(e,u);g=f(w,g,z);null===t?l=w:t.sibling=w;t=w;u=q}if(n.done)return c(e,u),l;if(null===u){for(;!n.done;z++,n=h.next())n=A(e,n.value,k),null!==n&&(g=f(n,g,z),null===t?l=n:t.sibling=n,t=n);return l}for(u=d(e,u);!n.done;z++,n=h.next())n=C(u,e,z,n.value,k),null!==n&&(a&&null!==n.alternate&&\nu.delete(null===n.key?z:n.key),g=f(n,g,z),null===t?l=n:t.sibling=n,t=n);a&&u.forEach(function(a){return b(e,a)});return l}return function(a,d,f,h){var k=\"object\"===typeof f&&null!==f&&f.type===ua&&null===f.key;k&&(f=f.props.children);var l=\"object\"===typeof f&&null!==f;if(l)switch(f.$$typeof){case sa:a:{l=f.key;for(k=d;null!==k;){if(k.key===l){switch(k.tag){case 7:if(f.type===ua){c(a,k.sibling);d=e(k,f.props.children);d.return=a;a=d;break a}break;default:if(k.elementType===f.type){c(a,k.sibling);\nd=e(k,f.props);d.ref=Qg(a,k,f);d.return=a;a=d;break a}}c(a,k);break}else b(a,k);k=k.sibling}f.type===ua?(d=Xg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Vg(f.type,f.key,f.props,null,a.mode,h),h.ref=Qg(a,d,f),h.return=a,a=h)}return g(a);case ta:a:{for(k=f.key;null!==d;){if(d.key===k)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=\nWg(f,a.mode,h);d.return=a;a=d}return g(a)}if(\"string\"===typeof f||\"number\"===typeof f)return f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):(c(a,d),d=Ug(f,a.mode,h),d.return=a,a=d),g(a);if(Pg(f))return x(a,d,f,h);if(La(f))return w(a,d,f,h);l&&Rg(a,f);if(\"undefined\"===typeof f&&!k)switch(a.tag){case 1:case 22:case 0:case 11:case 15:throw Error(y(152,Ra(a.type)||\"Component\"));}return c(a,d)}}var Yg=Sg(!0),Zg=Sg(!1),$g={},ah=Bf($g),bh=Bf($g),ch=Bf($g);\nfunction dh(a){if(a===$g)throw Error(y(174));return a}function eh(a,b){I(ch,b);I(bh,a);I(ah,$g);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:mb(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=mb(b,a)}H(ah);I(ah,b)}function fh(){H(ah);H(bh);H(ch)}function gh(a){dh(ch.current);var b=dh(ah.current);var c=mb(b,a.type);b!==c&&(I(bh,a),I(ah,c))}function hh(a){bh.current===a&&(H(ah),H(bh))}var P=Bf(0);\nfunction ih(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||\"$?\"===c.data||\"$!\"===c.data))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.flags&64))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}var jh=null,kh=null,lh=!1;\nfunction mh(a,b){var c=nh(5,null,null,0);c.elementType=\"DELETED\";c.type=\"DELETED\";c.stateNode=b;c.return=a;c.flags=8;null!==a.lastEffect?(a.lastEffect.nextEffect=c,a.lastEffect=c):a.firstEffect=a.lastEffect=c}function oh(a,b){switch(a.tag){case 5:var c=a.type;b=1!==b.nodeType||c.toLowerCase()!==b.nodeName.toLowerCase()?null:b;return null!==b?(a.stateNode=b,!0):!1;case 6:return b=\"\"===a.pendingProps||3!==b.nodeType?null:b,null!==b?(a.stateNode=b,!0):!1;case 13:return!1;default:return!1}}\nfunction ph(a){if(lh){var b=kh;if(b){var c=b;if(!oh(a,b)){b=rf(c.nextSibling);if(!b||!oh(a,b)){a.flags=a.flags&-1025|2;lh=!1;jh=a;return}mh(jh,c)}jh=a;kh=rf(b.firstChild)}else a.flags=a.flags&-1025|2,lh=!1,jh=a}}function qh(a){for(a=a.return;null!==a&&5!==a.tag&&3!==a.tag&&13!==a.tag;)a=a.return;jh=a}\nfunction rh(a){if(a!==jh)return!1;if(!lh)return qh(a),lh=!0,!1;var b=a.type;if(5!==a.tag||\"head\"!==b&&\"body\"!==b&&!nf(b,a.memoizedProps))for(b=kh;b;)mh(a,b),b=rf(b.nextSibling);qh(a);if(13===a.tag){a=a.memoizedState;a=null!==a?a.dehydrated:null;if(!a)throw Error(y(317));a:{a=a.nextSibling;for(b=0;a;){if(8===a.nodeType){var c=a.data;if(\"/$\"===c){if(0===b){kh=rf(a.nextSibling);break a}b--}else\"$\"!==c&&\"$!\"!==c&&\"$?\"!==c||b++}a=a.nextSibling}kh=null}}else kh=jh?rf(a.stateNode.nextSibling):null;return!0}\nfunction sh(){kh=jh=null;lh=!1}var th=[];function uh(){for(var a=0;af))throw Error(y(301));f+=1;T=S=null;b.updateQueue=null;vh.current=Fh;a=c(d,e)}while(zh)}vh.current=Gh;b=null!==S&&null!==S.next;xh=0;T=S=R=null;yh=!1;if(b)throw Error(y(300));return a}function Hh(){var a={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};null===T?R.memoizedState=T=a:T=T.next=a;return T}\nfunction Ih(){if(null===S){var a=R.alternate;a=null!==a?a.memoizedState:null}else a=S.next;var b=null===T?R.memoizedState:T.next;if(null!==b)T=b,S=a;else{if(null===a)throw Error(y(310));S=a;a={memoizedState:S.memoizedState,baseState:S.baseState,baseQueue:S.baseQueue,queue:S.queue,next:null};null===T?R.memoizedState=T=a:T=T.next=a}return T}function Jh(a,b){return\"function\"===typeof b?b(a):b}\nfunction Kh(a){var b=Ih(),c=b.queue;if(null===c)throw Error(y(311));c.lastRenderedReducer=a;var d=S,e=d.baseQueue,f=c.pending;if(null!==f){if(null!==e){var g=e.next;e.next=f.next;f.next=g}d.baseQueue=e=f;c.pending=null}if(null!==e){e=e.next;d=d.baseState;var h=g=f=null,k=e;do{var l=k.lane;if((xh&l)===l)null!==h&&(h=h.next={lane:0,action:k.action,eagerReducer:k.eagerReducer,eagerState:k.eagerState,next:null}),d=k.eagerReducer===a?k.eagerState:a(d,k.action);else{var n={lane:l,action:k.action,eagerReducer:k.eagerReducer,\neagerState:k.eagerState,next:null};null===h?(g=h=n,f=d):h=h.next=n;R.lanes|=l;Dg|=l}k=k.next}while(null!==k&&k!==e);null===h?f=d:h.next=g;He(d,b.memoizedState)||(ug=!0);b.memoizedState=d;b.baseState=f;b.baseQueue=h;c.lastRenderedState=d}return[b.memoizedState,c.dispatch]}\nfunction Lh(a){var b=Ih(),c=b.queue;if(null===c)throw Error(y(311));c.lastRenderedReducer=a;var d=c.dispatch,e=c.pending,f=b.memoizedState;if(null!==e){c.pending=null;var g=e=e.next;do f=a(f,g.action),g=g.next;while(g!==e);He(f,b.memoizedState)||(ug=!0);b.memoizedState=f;null===b.baseQueue&&(b.baseState=f);c.lastRenderedState=f}return[f,d]}\nfunction Mh(a,b,c){var d=b._getVersion;d=d(b._source);var e=b._workInProgressVersionPrimary;if(null!==e)a=e===d;else if(a=a.mutableReadLanes,a=(xh&a)===a)b._workInProgressVersionPrimary=d,th.push(b);if(a)return c(b._source);th.push(b);throw Error(y(350));}\nfunction Nh(a,b,c,d){var e=U;if(null===e)throw Error(y(349));var f=b._getVersion,g=f(b._source),h=vh.current,k=h.useState(function(){return Mh(e,b,c)}),l=k[1],n=k[0];k=T;var A=a.memoizedState,p=A.refs,C=p.getSnapshot,x=A.source;A=A.subscribe;var w=R;a.memoizedState={refs:p,source:b,subscribe:d};h.useEffect(function(){p.getSnapshot=c;p.setSnapshot=l;var a=f(b._source);if(!He(g,a)){a=c(b._source);He(n,a)||(l(a),a=Ig(w),e.mutableReadLanes|=a&e.pendingLanes);a=e.mutableReadLanes;e.entangledLanes|=a;for(var d=\ne.entanglements,h=a;0c?98:c,function(){a(!0)});gg(97\\x3c/script>\",a=a.removeChild(a.firstChild)):\"string\"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),\"select\"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[wf]=b;a[xf]=d;Bi(a,b,!1,!1);b.stateNode=a;g=wb(c,d);switch(c){case \"dialog\":G(\"cancel\",a);G(\"close\",a);\ne=d;break;case \"iframe\":case \"object\":case \"embed\":G(\"load\",a);e=d;break;case \"video\":case \"audio\":for(e=0;eJi&&(b.flags|=64,f=!0,Fi(d,!1),b.lanes=33554432)}else{if(!f)if(a=ih(g),null!==a){if(b.flags|=64,f=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Fi(d,!0),null===d.tail&&\"hidden\"===d.tailMode&&!g.alternate&&!lh)return b=b.lastEffect=d.lastEffect,null!==b&&(b.nextEffect=null),null}else 2*O()-d.renderingStartTime>Ji&&1073741824!==c&&(b.flags|=\n64,f=!0,Fi(d,!1),b.lanes=33554432);d.isBackwards?(g.sibling=b.child,b.child=g):(c=d.last,null!==c?c.sibling=g:b.child=g,d.last=g)}return null!==d.tail?(c=d.tail,d.rendering=c,d.tail=c.sibling,d.lastEffect=b.lastEffect,d.renderingStartTime=O(),c.sibling=null,b=P.current,I(P,f?b&1|2:b&1),c):null;case 23:case 24:return Ki(),null!==a&&null!==a.memoizedState!==(null!==b.memoizedState)&&\"unstable-defer-without-hiding\"!==d.mode&&(b.flags|=4),null}throw Error(y(156,b.tag));}\nfunction Li(a){switch(a.tag){case 1:Ff(a.type)&&Gf();var b=a.flags;return b&4096?(a.flags=b&-4097|64,a):null;case 3:fh();H(N);H(M);uh();b=a.flags;if(0!==(b&64))throw Error(y(285));a.flags=b&-4097|64;return a;case 5:return hh(a),null;case 13:return H(P),b=a.flags,b&4096?(a.flags=b&-4097|64,a):null;case 19:return H(P),null;case 4:return fh(),null;case 10:return rg(a),null;case 23:case 24:return Ki(),null;default:return null}}\nfunction Mi(a,b){try{var c=\"\",d=b;do c+=Qa(d),d=d.return;while(d);var e=c}catch(f){e=\"\\nError generating stack: \"+f.message+\"\\n\"+f.stack}return{value:a,source:b,stack:e}}function Ni(a,b){try{console.error(b.value)}catch(c){setTimeout(function(){throw c;})}}var Oi=\"function\"===typeof WeakMap?WeakMap:Map;function Pi(a,b,c){c=zg(-1,c);c.tag=3;c.payload={element:null};var d=b.value;c.callback=function(){Qi||(Qi=!0,Ri=d);Ni(a,b)};return c}\nfunction Si(a,b,c){c=zg(-1,c);c.tag=3;var d=a.type.getDerivedStateFromError;if(\"function\"===typeof d){var e=b.value;c.payload=function(){Ni(a,b);return d(e)}}var f=a.stateNode;null!==f&&\"function\"===typeof f.componentDidCatch&&(c.callback=function(){\"function\"!==typeof d&&(null===Ti?Ti=new Set([this]):Ti.add(this),Ni(a,b));var c=b.stack;this.componentDidCatch(b.value,{componentStack:null!==c?c:\"\"})});return c}var Ui=\"function\"===typeof WeakSet?WeakSet:Set;\nfunction Vi(a){var b=a.ref;if(null!==b)if(\"function\"===typeof b)try{b(null)}catch(c){Wi(a,c)}else b.current=null}function Xi(a,b){switch(b.tag){case 0:case 11:case 15:case 22:return;case 1:if(b.flags&256&&null!==a){var c=a.memoizedProps,d=a.memoizedState;a=b.stateNode;b=a.getSnapshotBeforeUpdate(b.elementType===b.type?c:lg(b.type,c),d);a.__reactInternalSnapshotBeforeUpdate=b}return;case 3:b.flags&256&&qf(b.stateNode.containerInfo);return;case 5:case 6:case 4:case 17:return}throw Error(y(163));}\nfunction Yi(a,b,c){switch(c.tag){case 0:case 11:case 15:case 22:b=c.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){a=b=b.next;do{if(3===(a.tag&3)){var d=a.create;a.destroy=d()}a=a.next}while(a!==b)}b=c.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){a=b=b.next;do{var e=a;d=e.next;e=e.tag;0!==(e&4)&&0!==(e&1)&&(Zi(c,a),$i(c,a));a=d}while(a!==b)}return;case 1:a=c.stateNode;c.flags&4&&(null===b?a.componentDidMount():(d=c.elementType===c.type?b.memoizedProps:lg(c.type,b.memoizedProps),a.componentDidUpdate(d,\nb.memoizedState,a.__reactInternalSnapshotBeforeUpdate)));b=c.updateQueue;null!==b&&Eg(c,b,a);return;case 3:b=c.updateQueue;if(null!==b){a=null;if(null!==c.child)switch(c.child.tag){case 5:a=c.child.stateNode;break;case 1:a=c.child.stateNode}Eg(c,b,a)}return;case 5:a=c.stateNode;null===b&&c.flags&4&&mf(c.type,c.memoizedProps)&&a.focus();return;case 6:return;case 4:return;case 12:return;case 13:null===c.memoizedState&&(c=c.alternate,null!==c&&(c=c.memoizedState,null!==c&&(c=c.dehydrated,null!==c&&Cc(c))));\nreturn;case 19:case 17:case 20:case 21:case 23:case 24:return}throw Error(y(163));}\nfunction aj(a,b){for(var c=a;;){if(5===c.tag){var d=c.stateNode;if(b)d=d.style,\"function\"===typeof d.setProperty?d.setProperty(\"display\",\"none\",\"important\"):d.display=\"none\";else{d=c.stateNode;var e=c.memoizedProps.style;e=void 0!==e&&null!==e&&e.hasOwnProperty(\"display\")?e.display:null;d.style.display=sb(\"display\",e)}}else if(6===c.tag)c.stateNode.nodeValue=b?\"\":c.memoizedProps;else if((23!==c.tag&&24!==c.tag||null===c.memoizedState||c===a)&&null!==c.child){c.child.return=c;c=c.child;continue}if(c===\na)break;for(;null===c.sibling;){if(null===c.return||c.return===a)return;c=c.return}c.sibling.return=c.return;c=c.sibling}}\nfunction bj(a,b){if(Mf&&\"function\"===typeof Mf.onCommitFiberUnmount)try{Mf.onCommitFiberUnmount(Lf,b)}catch(f){}switch(b.tag){case 0:case 11:case 14:case 15:case 22:a=b.updateQueue;if(null!==a&&(a=a.lastEffect,null!==a)){var c=a=a.next;do{var d=c,e=d.destroy;d=d.tag;if(void 0!==e)if(0!==(d&4))Zi(b,c);else{d=b;try{e()}catch(f){Wi(d,f)}}c=c.next}while(c!==a)}break;case 1:Vi(b);a=b.stateNode;if(\"function\"===typeof a.componentWillUnmount)try{a.props=b.memoizedProps,a.state=b.memoizedState,a.componentWillUnmount()}catch(f){Wi(b,\nf)}break;case 5:Vi(b);break;case 4:cj(a,b)}}function dj(a){a.alternate=null;a.child=null;a.dependencies=null;a.firstEffect=null;a.lastEffect=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.return=null;a.updateQueue=null}function ej(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction fj(a){a:{for(var b=a.return;null!==b;){if(ej(b))break a;b=b.return}throw Error(y(160));}var c=b;b=c.stateNode;switch(c.tag){case 5:var d=!1;break;case 3:b=b.containerInfo;d=!0;break;case 4:b=b.containerInfo;d=!0;break;default:throw Error(y(161));}c.flags&16&&(pb(b,\"\"),c.flags&=-17);a:b:for(c=a;;){for(;null===c.sibling;){if(null===c.return||ej(c.return)){c=null;break a}c=c.return}c.sibling.return=c.return;for(c=c.sibling;5!==c.tag&&6!==c.tag&&18!==c.tag;){if(c.flags&2)continue b;if(null===\nc.child||4===c.tag)continue b;else c.child.return=c,c=c.child}if(!(c.flags&2)){c=c.stateNode;break a}}d?gj(a,c,b):hj(a,c,b)}\nfunction gj(a,b,c){var d=a.tag,e=5===d||6===d;if(e)a=e?a.stateNode:a.stateNode.instance,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=jf));else if(4!==d&&(a=a.child,null!==a))for(gj(a,b,c),a=a.sibling;null!==a;)gj(a,b,c),a=a.sibling}\nfunction hj(a,b,c){var d=a.tag,e=5===d||6===d;if(e)a=e?a.stateNode:a.stateNode.instance,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(hj(a,b,c),a=a.sibling;null!==a;)hj(a,b,c),a=a.sibling}\nfunction cj(a,b){for(var c=b,d=!1,e,f;;){if(!d){d=c.return;a:for(;;){if(null===d)throw Error(y(160));e=d.stateNode;switch(d.tag){case 5:f=!1;break a;case 3:e=e.containerInfo;f=!0;break a;case 4:e=e.containerInfo;f=!0;break a}d=d.return}d=!0}if(5===c.tag||6===c.tag){a:for(var g=a,h=c,k=h;;)if(bj(g,k),null!==k.child&&4!==k.tag)k.child.return=k,k=k.child;else{if(k===h)break a;for(;null===k.sibling;){if(null===k.return||k.return===h)break a;k=k.return}k.sibling.return=k.return;k=k.sibling}f?(g=e,h=c.stateNode,\n8===g.nodeType?g.parentNode.removeChild(h):g.removeChild(h)):e.removeChild(c.stateNode)}else if(4===c.tag){if(null!==c.child){e=c.stateNode.containerInfo;f=!0;c.child.return=c;c=c.child;continue}}else if(bj(a,c),null!==c.child){c.child.return=c;c=c.child;continue}if(c===b)break;for(;null===c.sibling;){if(null===c.return||c.return===b)return;c=c.return;4===c.tag&&(d=!1)}c.sibling.return=c.return;c=c.sibling}}\nfunction ij(a,b){switch(b.tag){case 0:case 11:case 14:case 15:case 22:var c=b.updateQueue;c=null!==c?c.lastEffect:null;if(null!==c){var d=c=c.next;do 3===(d.tag&3)&&(a=d.destroy,d.destroy=void 0,void 0!==a&&a()),d=d.next;while(d!==c)}return;case 1:return;case 5:c=b.stateNode;if(null!=c){d=b.memoizedProps;var e=null!==a?a.memoizedProps:d;a=b.type;var f=b.updateQueue;b.updateQueue=null;if(null!==f){c[xf]=d;\"input\"===a&&\"radio\"===d.type&&null!=d.name&&$a(c,d);wb(a,e);b=wb(a,d);for(e=0;ee&&(e=g);c&=~f}c=e;c=O()-c;c=(120>c?120:480>c?480:1080>c?1080:1920>c?1920:3E3>c?3E3:4320>\nc?4320:1960*nj(c/1960))-c;if(10 component higher in the tree to provide a loading indicator or placeholder to display.\")}5!==V&&(V=2);k=Mi(k,h);p=\ng;do{switch(p.tag){case 3:f=k;p.flags|=4096;b&=-b;p.lanes|=b;var J=Pi(p,f,b);Bg(p,J);break a;case 1:f=k;var K=p.type,Q=p.stateNode;if(0===(p.flags&64)&&(\"function\"===typeof K.getDerivedStateFromError||null!==Q&&\"function\"===typeof Q.componentDidCatch&&(null===Ti||!Ti.has(Q)))){p.flags|=4096;b&=-b;p.lanes|=b;var L=Si(p,f,b);Bg(p,L);break a}}p=p.return}while(null!==p)}Zj(c)}catch(va){b=va;Y===c&&null!==c&&(Y=c=c.return);continue}break}while(1)}\nfunction Pj(){var a=oj.current;oj.current=Gh;return null===a?Gh:a}function Tj(a,b){var c=X;X|=16;var d=Pj();U===a&&W===b||Qj(a,b);do try{ak();break}catch(e){Sj(a,e)}while(1);qg();X=c;oj.current=d;if(null!==Y)throw Error(y(261));U=null;W=0;return V}function ak(){for(;null!==Y;)bk(Y)}function Rj(){for(;null!==Y&&!Qf();)bk(Y)}function bk(a){var b=ck(a.alternate,a,qj);a.memoizedProps=a.pendingProps;null===b?Zj(a):Y=b;pj.current=null}\nfunction Zj(a){var b=a;do{var c=b.alternate;a=b.return;if(0===(b.flags&2048)){c=Gi(c,b,qj);if(null!==c){Y=c;return}c=b;if(24!==c.tag&&23!==c.tag||null===c.memoizedState||0!==(qj&1073741824)||0===(c.mode&4)){for(var d=0,e=c.child;null!==e;)d|=e.lanes|e.childLanes,e=e.sibling;c.childLanes=d}null!==a&&0===(a.flags&2048)&&(null===a.firstEffect&&(a.firstEffect=b.firstEffect),null!==b.lastEffect&&(null!==a.lastEffect&&(a.lastEffect.nextEffect=b.firstEffect),a.lastEffect=b.lastEffect),1g&&(h=g,g=J,J=h),h=Le(t,J),f=Le(t,g),h&&f&&(1!==v.rangeCount||v.anchorNode!==h.node||v.anchorOffset!==h.offset||v.focusNode!==f.node||v.focusOffset!==f.offset)&&(q=q.createRange(),q.setStart(h.node,h.offset),v.removeAllRanges(),J>g?(v.addRange(q),v.extend(f.node,f.offset)):(q.setEnd(f.node,f.offset),v.addRange(q))))));q=[];for(v=t;v=v.parentNode;)1===v.nodeType&&q.push({element:v,left:v.scrollLeft,top:v.scrollTop});\"function\"===typeof t.focus&&t.focus();for(t=\n0;tO()-jj?Qj(a,0):uj|=c);Mj(a,b)}function lj(a,b){var c=a.stateNode;null!==c&&c.delete(b);b=0;0===b&&(b=a.mode,0===(b&2)?b=1:0===(b&4)?b=99===eg()?1:2:(0===Gj&&(Gj=tj),b=Yc(62914560&~Gj),0===b&&(b=4194304)));c=Hg();a=Kj(a,b);null!==a&&($c(a,b,c),Mj(a,c))}var ck;\nck=function(a,b,c){var d=b.lanes;if(null!==a)if(a.memoizedProps!==b.pendingProps||N.current)ug=!0;else if(0!==(c&d))ug=0!==(a.flags&16384)?!0:!1;else{ug=!1;switch(b.tag){case 3:ri(b);sh();break;case 5:gh(b);break;case 1:Ff(b.type)&&Jf(b);break;case 4:eh(b,b.stateNode.containerInfo);break;case 10:d=b.memoizedProps.value;var e=b.type._context;I(mg,e._currentValue);e._currentValue=d;break;case 13:if(null!==b.memoizedState){if(0!==(c&b.child.childLanes))return ti(a,b,c);I(P,P.current&1);b=hi(a,b,c);return null!==\nb?b.sibling:null}I(P,P.current&1);break;case 19:d=0!==(c&b.childLanes);if(0!==(a.flags&64)){if(d)return Ai(a,b,c);b.flags|=64}e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null,e.lastEffect=null);I(P,P.current);if(d)break;else return null;case 23:case 24:return b.lanes=0,mi(a,b,c)}return hi(a,b,c)}else ug=!1;b.lanes=0;switch(b.tag){case 2:d=b.type;null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2);a=b.pendingProps;e=Ef(b,M.current);tg(b,c);e=Ch(null,b,d,a,e,c);b.flags|=1;if(\"object\"===\ntypeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof){b.tag=1;b.memoizedState=null;b.updateQueue=null;if(Ff(d)){var f=!0;Jf(b)}else f=!1;b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null;xg(b);var g=d.getDerivedStateFromProps;\"function\"===typeof g&&Gg(b,d,g,a);e.updater=Kg;b.stateNode=e;e._reactInternals=b;Og(b,d,a,c);b=qi(null,b,d,!0,f,c)}else b.tag=0,fi(null,b,e,c),b=b.child;return b;case 16:e=b.elementType;a:{null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2);\na=b.pendingProps;f=e._init;e=f(e._payload);b.type=e;f=b.tag=hk(e);a=lg(e,a);switch(f){case 0:b=li(null,b,e,a,c);break a;case 1:b=pi(null,b,e,a,c);break a;case 11:b=gi(null,b,e,a,c);break a;case 14:b=ii(null,b,e,lg(e.type,a),d,c);break a}throw Error(y(306,e,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:lg(d,e),li(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:lg(d,e),pi(a,b,d,e,c);case 3:ri(b);d=b.updateQueue;if(null===a||null===d)throw Error(y(282));\nd=b.pendingProps;e=b.memoizedState;e=null!==e?e.element:null;yg(a,b);Cg(b,d,null,c);d=b.memoizedState.element;if(d===e)sh(),b=hi(a,b,c);else{e=b.stateNode;if(f=e.hydrate)kh=rf(b.stateNode.containerInfo.firstChild),jh=b,f=lh=!0;if(f){a=e.mutableSourceEagerHydrationData;if(null!=a)for(e=0;e= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function () { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n//\n// Define \n//\nvar Draggable = /*#__PURE__*/function (_React$Component) {\n _inherits(Draggable, _React$Component);\n\n var _super = _createSuper(Draggable);\n\n _createClass(Draggable, null, [{\n key: \"getDerivedStateFromProps\",\n // React 16.3+\n // Arity (props, state)\n value: function getDerivedStateFromProps(_ref, _ref2) {\n var position = _ref.position;\n var prevPropsPosition = _ref2.prevPropsPosition;\n\n // Set x/y if a new position is provided in props that is different than the previous.\n if (position && (!prevPropsPosition || position.x !== prevPropsPosition.x || position.y !== prevPropsPosition.y)) {\n (0, _log.default)('Draggable: getDerivedStateFromProps %j', {\n position: position,\n prevPropsPosition: prevPropsPosition\n });\n return {\n x: position.x,\n y: position.y,\n prevPropsPosition: _objectSpread({}, position)\n };\n }\n\n return null;\n }\n }]);\n\n function Draggable(props\n /*: DraggableProps*/\n ) {\n var _this;\n\n _classCallCheck(this, Draggable);\n\n _this = _super.call(this, props);\n\n _defineProperty(_assertThisInitialized(_this), \"onDragStart\", function (e, coreData) {\n (0, _log.default)('Draggable: onDragStart: %j', coreData); // Short-circuit if user's callback killed it.\n\n var shouldStart = _this.props.onStart(e, (0, _positionFns.createDraggableData)(_assertThisInitialized(_this), coreData)); // Kills start event on core as well, so move handlers are never bound.\n\n\n if (shouldStart === false) return false;\n\n _this.setState({\n dragging: true,\n dragged: true\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onDrag\", function (e, coreData) {\n if (!_this.state.dragging) return false;\n (0, _log.default)('Draggable: onDrag: %j', coreData);\n var uiData = (0, _positionFns.createDraggableData)(_assertThisInitialized(_this), coreData);\n var newState\n /*: $Shape*/\n = {\n x: uiData.x,\n y: uiData.y\n }; // Keep within bounds.\n\n if (_this.props.bounds) {\n // Save original x and y.\n var x = newState.x,\n y = newState.y; // Add slack to the values used to calculate bound position. This will ensure that if\n // we start removing slack, the element won't react to it right away until it's been\n // completely removed.\n\n newState.x += _this.state.slackX;\n newState.y += _this.state.slackY; // Get bound position. This will ceil/floor the x and y within the boundaries.\n\n var _getBoundPosition = (0, _positionFns.getBoundPosition)(_assertThisInitialized(_this), newState.x, newState.y),\n _getBoundPosition2 = _slicedToArray(_getBoundPosition, 2),\n newStateX = _getBoundPosition2[0],\n newStateY = _getBoundPosition2[1];\n\n newState.x = newStateX;\n newState.y = newStateY; // Recalculate slack by noting how much was shaved by the boundPosition handler.\n\n newState.slackX = _this.state.slackX + (x - newState.x);\n newState.slackY = _this.state.slackY + (y - newState.y); // Update the event we fire to reflect what really happened after bounds took effect.\n\n uiData.x = newState.x;\n uiData.y = newState.y;\n uiData.deltaX = newState.x - _this.state.x;\n uiData.deltaY = newState.y - _this.state.y;\n } // Short-circuit if user's callback killed it.\n\n\n var shouldUpdate = _this.props.onDrag(e, uiData);\n\n if (shouldUpdate === false) return false;\n\n _this.setState(newState);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onDragStop\", function (e, coreData) {\n if (!_this.state.dragging) return false; // Short-circuit if user's callback killed it.\n\n var shouldContinue = _this.props.onStop(e, (0, _positionFns.createDraggableData)(_assertThisInitialized(_this), coreData));\n\n if (shouldContinue === false) return false;\n (0, _log.default)('Draggable: onDragStop: %j', coreData);\n var newState\n /*: $Shape*/\n = {\n dragging: false,\n slackX: 0,\n slackY: 0\n }; // If this is a controlled component, the result of this operation will be to\n // revert back to the old position. We expect a handler on `onDragStop`, at the least.\n\n var controlled = Boolean(_this.props.position);\n\n if (controlled) {\n var _this$props$position = _this.props.position,\n x = _this$props$position.x,\n y = _this$props$position.y;\n newState.x = x;\n newState.y = y;\n }\n\n _this.setState(newState);\n });\n\n _this.state = {\n // Whether or not we are currently dragging.\n dragging: false,\n // Whether or not we have been dragged before.\n dragged: false,\n // Current transform x and y.\n x: props.position ? props.position.x : props.defaultPosition.x,\n y: props.position ? props.position.y : props.defaultPosition.y,\n prevPropsPosition: _objectSpread({}, props.position),\n // Used for compensating for out-of-bounds drags\n slackX: 0,\n slackY: 0,\n // Can only determine if SVG after mounting\n isElementSVG: false\n };\n\n if (props.position && !(props.onDrag || props.onStop)) {\n // eslint-disable-next-line no-console\n console.warn('A `position` was applied to this , without drag handlers. This will make this ' + 'component effectively undraggable. Please attach `onDrag` or `onStop` handlers so you can adjust the ' + '`position` of this element.');\n }\n\n return _this;\n }\n\n _createClass(Draggable, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n // Check to see if the element passed is an instanceof SVGElement\n if (typeof window.SVGElement !== 'undefined' && this.findDOMNode() instanceof window.SVGElement) {\n this.setState({\n isElementSVG: true\n });\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.setState({\n dragging: false\n }); // prevents invariant if unmounted while dragging\n } // React Strict Mode compatibility: if `nodeRef` is passed, we will use it instead of trying to find\n // the underlying DOM node ourselves. See the README for more information.\n\n }, {\n key: \"findDOMNode\",\n value: function findDOMNode()\n /*: ?HTMLElement*/\n {\n return this.props.nodeRef ? this.props.nodeRef.current : _reactDom.default.findDOMNode(this);\n }\n }, {\n key: \"render\",\n value: function render()\n /*: ReactElement*/\n {\n var _classNames;\n\n var _this$props = this.props,\n axis = _this$props.axis,\n bounds = _this$props.bounds,\n children = _this$props.children,\n defaultPosition = _this$props.defaultPosition,\n defaultClassName = _this$props.defaultClassName,\n defaultClassNameDragging = _this$props.defaultClassNameDragging,\n defaultClassNameDragged = _this$props.defaultClassNameDragged,\n position = _this$props.position,\n positionOffset = _this$props.positionOffset,\n scale = _this$props.scale,\n draggableCoreProps = _objectWithoutProperties(_this$props, [\"axis\", \"bounds\", \"children\", \"defaultPosition\", \"defaultClassName\", \"defaultClassNameDragging\", \"defaultClassNameDragged\", \"position\", \"positionOffset\", \"scale\"]);\n\n var style = {};\n var svgTransform = null; // If this is controlled, we don't want to move it - unless it's dragging.\n\n var controlled = Boolean(position);\n var draggable = !controlled || this.state.dragging;\n var validPosition = position || defaultPosition;\n var transformOpts = {\n // Set left if horizontal drag is enabled\n x: (0, _positionFns.canDragX)(this) && draggable ? this.state.x : validPosition.x,\n // Set top if vertical drag is enabled\n y: (0, _positionFns.canDragY)(this) && draggable ? this.state.y : validPosition.y\n }; // If this element was SVG, we use the `transform` attribute.\n\n if (this.state.isElementSVG) {\n svgTransform = (0, _domFns.createSVGTransform)(transformOpts, positionOffset);\n } else {\n // Add a CSS transform to move the element around. This allows us to move the element around\n // without worrying about whether or not it is relatively or absolutely positioned.\n // If the item you are dragging already has a transform set, wrap it in a so \n // has a clean slate.\n style = (0, _domFns.createCSSTransform)(transformOpts, positionOffset);\n } // Mark with class while dragging\n\n\n var className = (0, _classnames.default)(children.props.className || '', defaultClassName, (_classNames = {}, _defineProperty(_classNames, defaultClassNameDragging, this.state.dragging), _defineProperty(_classNames, defaultClassNameDragged, this.state.dragged), _classNames)); // Reuse the child provided\n // This makes it flexible to use whatever element is wanted (div, ul, etc)\n\n return /*#__PURE__*/React.createElement(_DraggableCore.default, _extends({}, draggableCoreProps, {\n onStart: this.onDragStart,\n onDrag: this.onDrag,\n onStop: this.onDragStop\n }), React.cloneElement(React.Children.only(children), {\n className: className,\n style: _objectSpread(_objectSpread({}, children.props.style), style),\n transform: svgTransform\n }));\n }\n }]);\n\n return Draggable;\n}(React.Component);\n\nexports.default = Draggable;\n\n_defineProperty(Draggable, \"displayName\", 'Draggable');\n\n_defineProperty(Draggable, \"propTypes\", _objectSpread(_objectSpread({}, _DraggableCore.default.propTypes), {}, {\n /**\n * `axis` determines which axis the draggable can move.\n *\n * Note that all callbacks will still return data as normal. This only\n * controls flushing to the DOM.\n *\n * 'both' allows movement horizontally and vertically.\n * 'x' limits movement to horizontal axis.\n * 'y' limits movement to vertical axis.\n * 'none' limits all movement.\n *\n * Defaults to 'both'.\n */\n axis: _propTypes.default.oneOf(['both', 'x', 'y', 'none']),\n\n /**\n * `bounds` determines the range of movement available to the element.\n * Available values are:\n *\n * 'parent' restricts movement within the Draggable's parent node.\n *\n * Alternatively, pass an object with the following properties, all of which are optional:\n *\n * {left: LEFT_BOUND, right: RIGHT_BOUND, bottom: BOTTOM_BOUND, top: TOP_BOUND}\n *\n * All values are in px.\n *\n * Example:\n *\n * ```jsx\n * let App = React.createClass({\n * render: function () {\n * return (\n * \n *
Content
\n *
\n * );\n * }\n * });\n * ```\n */\n bounds: _propTypes.default.oneOfType([_propTypes.default.shape({\n left: _propTypes.default.number,\n right: _propTypes.default.number,\n top: _propTypes.default.number,\n bottom: _propTypes.default.number\n }), _propTypes.default.string, _propTypes.default.oneOf([false])]),\n defaultClassName: _propTypes.default.string,\n defaultClassNameDragging: _propTypes.default.string,\n defaultClassNameDragged: _propTypes.default.string,\n\n /**\n * `defaultPosition` specifies the x and y that the dragged item should start at\n *\n * Example:\n *\n * ```jsx\n * let App = React.createClass({\n * render: function () {\n * return (\n * \n *
I start with transformX: 25px and transformY: 25px;
\n *
\n * );\n * }\n * });\n * ```\n */\n defaultPosition: _propTypes.default.shape({\n x: _propTypes.default.number,\n y: _propTypes.default.number\n }),\n positionOffset: _propTypes.default.shape({\n x: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),\n y: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string])\n }),\n\n /**\n * `position`, if present, defines the current position of the element.\n *\n * This is similar to how form elements in React work - if no `position` is supplied, the component\n * is uncontrolled.\n *\n * Example:\n *\n * ```jsx\n * let App = React.createClass({\n * render: function () {\n * return (\n * \n *
I start with transformX: 25px and transformY: 25px;
\n *
\n * );\n * }\n * });\n * ```\n */\n position: _propTypes.default.shape({\n x: _propTypes.default.number,\n y: _propTypes.default.number\n }),\n\n /**\n * These properties should be defined on the child, not here.\n */\n className: _shims.dontSetMe,\n style: _shims.dontSetMe,\n transform: _shims.dontSetMe\n}));\n\n_defineProperty(Draggable, \"defaultProps\", _objectSpread(_objectSpread({}, _DraggableCore.default.defaultProps), {}, {\n axis: 'both',\n bounds: false,\n defaultClassName: 'react-draggable',\n defaultClassNameDragging: 'react-draggable-dragging',\n defaultClassNameDragged: 'react-draggable-dragged',\n defaultPosition: {\n x: 0,\n y: 0\n },\n position: null,\n scale: 1\n}));","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\n\nvar _domFns = require(\"./utils/domFns\");\n\nvar _positionFns = require(\"./utils/positionFns\");\n\nvar _shims = require(\"./utils/shims\");\n\nvar _log = _interopRequireDefault(require(\"./utils/log\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function () { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// Simple abstraction for dragging events names.\nvar eventsFor = {\n touch: {\n start: 'touchstart',\n move: 'touchmove',\n stop: 'touchend'\n },\n mouse: {\n start: 'mousedown',\n move: 'mousemove',\n stop: 'mouseup'\n }\n}; // Default to mouse events.\n\nvar dragEventFor = eventsFor.mouse;\n/*:: type DraggableCoreState = {\n dragging: boolean,\n lastX: number,\n lastY: number,\n touchIdentifier: ?number\n};*/\n\n/*:: export type DraggableData = {\n node: HTMLElement,\n x: number, y: number,\n deltaX: number, deltaY: number,\n lastX: number, lastY: number,\n};*/\n\n/*:: export type DraggableEventHandler = (e: MouseEvent, data: DraggableData) => void;*/\n\n/*:: export type ControlPosition = {x: number, y: number};*/\n\n/*:: export type PositionOffsetControlPosition = {x: number|string, y: number|string};*/\n\n/*:: export type DraggableCoreProps = {\n allowAnyClick: boolean,\n cancel: string,\n children: ReactElement,\n disabled: boolean,\n enableUserSelectHack: boolean,\n offsetParent: HTMLElement,\n grid: [number, number],\n handle: string,\n nodeRef?: ?React.ElementRef,\n onStart: DraggableEventHandler,\n onDrag: DraggableEventHandler,\n onStop: DraggableEventHandler,\n onMouseDown: (e: MouseEvent) => void,\n scale: number,\n};*/\n\n//\n// Define .\n//\n// is for advanced usage of . It maintains minimal internal state so it can\n// work well with libraries that require more control over the element.\n//\nvar DraggableCore = /*#__PURE__*/function (_React$Component) {\n _inherits(DraggableCore, _React$Component);\n\n var _super = _createSuper(DraggableCore);\n\n function DraggableCore() {\n var _this;\n\n _classCallCheck(this, DraggableCore);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"state\", {\n dragging: false,\n // Used while dragging to determine deltas.\n lastX: NaN,\n lastY: NaN,\n touchIdentifier: null\n });\n\n _defineProperty(_assertThisInitialized(_this), \"mounted\", false);\n\n _defineProperty(_assertThisInitialized(_this), \"handleDragStart\", function (e) {\n // Make it possible to attach event handlers on top of this one.\n _this.props.onMouseDown(e); // Only accept left-clicks.\n\n\n if (!_this.props.allowAnyClick && typeof e.button === 'number' && e.button !== 0) return false; // Get nodes. Be sure to grab relative document (could be iframed)\n\n var thisNode = _this.findDOMNode();\n\n if (!thisNode || !thisNode.ownerDocument || !thisNode.ownerDocument.body) {\n throw new Error(' not mounted on DragStart!');\n }\n\n var ownerDocument = thisNode.ownerDocument; // Short circuit if handle or cancel prop was provided and selector doesn't match.\n\n if (_this.props.disabled || !(e.target instanceof ownerDocument.defaultView.Node) || _this.props.handle && !(0, _domFns.matchesSelectorAndParentsTo)(e.target, _this.props.handle, thisNode) || _this.props.cancel && (0, _domFns.matchesSelectorAndParentsTo)(e.target, _this.props.cancel, thisNode)) {\n return;\n } // Prevent scrolling on mobile devices, like ipad/iphone.\n // Important that this is after handle/cancel.\n\n\n if (e.type === 'touchstart') e.preventDefault(); // Set touch identifier in component state if this is a touch event. This allows us to\n // distinguish between individual touches on multitouch screens by identifying which\n // touchpoint was set to this element.\n\n var touchIdentifier = (0, _domFns.getTouchIdentifier)(e);\n\n _this.setState({\n touchIdentifier: touchIdentifier\n }); // Get the current drag point from the event. This is used as the offset.\n\n\n var position = (0, _positionFns.getControlPosition)(e, touchIdentifier, _assertThisInitialized(_this));\n if (position == null) return; // not possible but satisfies flow\n\n var x = position.x,\n y = position.y; // Create an event object with all the data parents need to make a decision here.\n\n var coreEvent = (0, _positionFns.createCoreData)(_assertThisInitialized(_this), x, y);\n (0, _log.default)('DraggableCore: handleDragStart: %j', coreEvent); // Call event handler. If it returns explicit false, cancel.\n\n (0, _log.default)('calling', _this.props.onStart);\n\n var shouldUpdate = _this.props.onStart(e, coreEvent);\n\n if (shouldUpdate === false || _this.mounted === false) return; // Add a style to the body to disable user-select. This prevents text from\n // being selected all over the page.\n\n if (_this.props.enableUserSelectHack) (0, _domFns.addUserSelectStyles)(ownerDocument); // Initiate dragging. Set the current x and y as offsets\n // so we know how much we've moved during the drag. This allows us\n // to drag elements around even if they have been moved, without issue.\n\n _this.setState({\n dragging: true,\n lastX: x,\n lastY: y\n }); // Add events to the document directly so we catch when the user's mouse/touch moves outside of\n // this element. We use different events depending on whether or not we have detected that this\n // is a touch-capable device.\n\n\n (0, _domFns.addEvent)(ownerDocument, dragEventFor.move, _this.handleDrag);\n (0, _domFns.addEvent)(ownerDocument, dragEventFor.stop, _this.handleDragStop);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"handleDrag\", function (e) {\n // Get the current drag point from the event. This is used as the offset.\n var position = (0, _positionFns.getControlPosition)(e, _this.state.touchIdentifier, _assertThisInitialized(_this));\n if (position == null) return;\n var x = position.x,\n y = position.y; // Snap to grid if prop has been provided\n\n if (Array.isArray(_this.props.grid)) {\n var deltaX = x - _this.state.lastX,\n deltaY = y - _this.state.lastY;\n\n var _snapToGrid = (0, _positionFns.snapToGrid)(_this.props.grid, deltaX, deltaY);\n\n var _snapToGrid2 = _slicedToArray(_snapToGrid, 2);\n\n deltaX = _snapToGrid2[0];\n deltaY = _snapToGrid2[1];\n if (!deltaX && !deltaY) return; // skip useless drag\n\n x = _this.state.lastX + deltaX, y = _this.state.lastY + deltaY;\n }\n\n var coreEvent = (0, _positionFns.createCoreData)(_assertThisInitialized(_this), x, y);\n (0, _log.default)('DraggableCore: handleDrag: %j', coreEvent); // Call event handler. If it returns explicit false, trigger end.\n\n var shouldUpdate = _this.props.onDrag(e, coreEvent);\n\n if (shouldUpdate === false || _this.mounted === false) {\n try {\n // $FlowIgnore\n _this.handleDragStop(new MouseEvent('mouseup'));\n } catch (err) {\n // Old browsers\n var event = ((document.createEvent('MouseEvents')\n /*: any*/\n )\n /*: MouseTouchEvent*/\n ); // I see why this insanity was deprecated\n // $FlowIgnore\n\n event.initMouseEvent('mouseup', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n\n _this.handleDragStop(event);\n }\n\n return;\n }\n\n _this.setState({\n lastX: x,\n lastY: y\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"handleDragStop\", function (e) {\n if (!_this.state.dragging) return;\n var position = (0, _positionFns.getControlPosition)(e, _this.state.touchIdentifier, _assertThisInitialized(_this));\n if (position == null) return;\n var x = position.x,\n y = position.y;\n var coreEvent = (0, _positionFns.createCoreData)(_assertThisInitialized(_this), x, y); // Call event handler\n\n var shouldContinue = _this.props.onStop(e, coreEvent);\n\n if (shouldContinue === false || _this.mounted === false) return false;\n\n var thisNode = _this.findDOMNode();\n\n if (thisNode) {\n // Remove user-select hack\n if (_this.props.enableUserSelectHack) (0, _domFns.removeUserSelectStyles)(thisNode.ownerDocument);\n }\n\n (0, _log.default)('DraggableCore: handleDragStop: %j', coreEvent); // Reset the el.\n\n _this.setState({\n dragging: false,\n lastX: NaN,\n lastY: NaN\n });\n\n if (thisNode) {\n // Remove event handlers\n (0, _log.default)('DraggableCore: Removing handlers');\n (0, _domFns.removeEvent)(thisNode.ownerDocument, dragEventFor.move, _this.handleDrag);\n (0, _domFns.removeEvent)(thisNode.ownerDocument, dragEventFor.stop, _this.handleDragStop);\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onMouseDown\", function (e) {\n dragEventFor = eventsFor.mouse; // on touchscreen laptops we could switch back to mouse\n\n return _this.handleDragStart(e);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onMouseUp\", function (e) {\n dragEventFor = eventsFor.mouse;\n return _this.handleDragStop(e);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onTouchStart\", function (e) {\n // We're on a touch device now, so change the event handlers\n dragEventFor = eventsFor.touch;\n return _this.handleDragStart(e);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onTouchEnd\", function (e) {\n // We're on a touch device now, so change the event handlers\n dragEventFor = eventsFor.touch;\n return _this.handleDragStop(e);\n });\n\n return _this;\n }\n\n _createClass(DraggableCore, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.mounted = true; // Touch handlers must be added with {passive: false} to be cancelable.\n // https://developers.google.com/web/updates/2017/01/scrolling-intervention\n\n var thisNode = this.findDOMNode();\n\n if (thisNode) {\n (0, _domFns.addEvent)(thisNode, eventsFor.touch.start, this.onTouchStart, {\n passive: false\n });\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.mounted = false; // Remove any leftover event handlers. Remove both touch and mouse handlers in case\n // some browser quirk caused a touch event to fire during a mouse move, or vice versa.\n\n var thisNode = this.findDOMNode();\n\n if (thisNode) {\n var ownerDocument = thisNode.ownerDocument;\n (0, _domFns.removeEvent)(ownerDocument, eventsFor.mouse.move, this.handleDrag);\n (0, _domFns.removeEvent)(ownerDocument, eventsFor.touch.move, this.handleDrag);\n (0, _domFns.removeEvent)(ownerDocument, eventsFor.mouse.stop, this.handleDragStop);\n (0, _domFns.removeEvent)(ownerDocument, eventsFor.touch.stop, this.handleDragStop);\n (0, _domFns.removeEvent)(thisNode, eventsFor.touch.start, this.onTouchStart, {\n passive: false\n });\n if (this.props.enableUserSelectHack) (0, _domFns.removeUserSelectStyles)(ownerDocument);\n }\n } // React Strict Mode compatibility: if `nodeRef` is passed, we will use it instead of trying to find\n // the underlying DOM node ourselves. See the README for more information.\n\n }, {\n key: \"findDOMNode\",\n value: function findDOMNode()\n /*: ?HTMLElement*/\n {\n return this.props.nodeRef ? this.props.nodeRef.current : _reactDom.default.findDOMNode(this);\n }\n }, {\n key: \"render\",\n value: function render() {\n // Reuse the child provided\n // This makes it flexible to use whatever element is wanted (div, ul, etc)\n return React.cloneElement(React.Children.only(this.props.children), {\n // Note: mouseMove handler is attached to document so it will still function\n // when the user drags quickly and leaves the bounds of the element.\n onMouseDown: this.onMouseDown,\n onMouseUp: this.onMouseUp,\n // onTouchStart is added on `componentDidMount` so they can be added with\n // {passive: false}, which allows it to cancel. See \n // https://developers.google.com/web/updates/2017/01/scrolling-intervention\n onTouchEnd: this.onTouchEnd\n });\n }\n }]);\n\n return DraggableCore;\n}(React.Component);\n\nexports.default = DraggableCore;\n\n_defineProperty(DraggableCore, \"displayName\", 'DraggableCore');\n\n_defineProperty(DraggableCore, \"propTypes\", {\n /**\n * `allowAnyClick` allows dragging using any mouse button.\n * By default, we only accept the left button.\n *\n * Defaults to `false`.\n */\n allowAnyClick: _propTypes.default.bool,\n\n /**\n * `disabled`, if true, stops the from dragging. All handlers,\n * with the exception of `onMouseDown`, will not fire.\n */\n disabled: _propTypes.default.bool,\n\n /**\n * By default, we add 'user-select:none' attributes to the document body\n * to prevent ugly text selection during drag. If this is causing problems\n * for your app, set this to `false`.\n */\n enableUserSelectHack: _propTypes.default.bool,\n\n /**\n * `offsetParent`, if set, uses the passed DOM node to compute drag offsets\n * instead of using the parent node.\n */\n offsetParent: function offsetParent(props\n /*: DraggableCoreProps*/\n , propName\n /*: $Keys*/\n ) {\n if (props[propName] && props[propName].nodeType !== 1) {\n throw new Error('Draggable\\'s offsetParent must be a DOM Node.');\n }\n },\n\n /**\n * `grid` specifies the x and y that dragging should snap to.\n */\n grid: _propTypes.default.arrayOf(_propTypes.default.number),\n\n /**\n * `handle` specifies a selector to be used as the handle that initiates drag.\n *\n * Example:\n *\n * ```jsx\n * let App = React.createClass({\n * render: function () {\n * return (\n * \n *
\n *
Click me to drag
\n *
This is some other content
\n *
\n *
\n * );\n * }\n * });\n * ```\n */\n handle: _propTypes.default.string,\n\n /**\n * `cancel` specifies a selector to be used to prevent drag initialization.\n *\n * Example:\n *\n * ```jsx\n * let App = React.createClass({\n * render: function () {\n * return(\n * \n *
\n *
You can't drag from here
\n *
Dragging here works fine
\n *
\n *
\n * );\n * }\n * });\n * ```\n */\n cancel: _propTypes.default.string,\n\n /* If running in React Strict mode, ReactDOM.findDOMNode() is deprecated.\n * Unfortunately, in order for to work properly, we need raw access\n * to the underlying DOM node. If you want to avoid the warning, pass a `nodeRef`\n * as in this example:\n *\n * function MyComponent() {\n * const nodeRef = React.useRef(null);\n * return (\n * \n *
Example Target
\n *
\n * );\n * }\n *\n * This can be used for arbitrarily nested components, so long as the ref ends up\n * pointing to the actual child DOM node and not a custom component.\n */\n nodeRef: _propTypes.default.object,\n\n /**\n * Called when dragging starts.\n * If this function returns the boolean false, dragging will be canceled.\n */\n onStart: _propTypes.default.func,\n\n /**\n * Called while dragging.\n * If this function returns the boolean false, dragging will be canceled.\n */\n onDrag: _propTypes.default.func,\n\n /**\n * Called when dragging stops.\n * If this function returns the boolean false, the drag will remain active.\n */\n onStop: _propTypes.default.func,\n\n /**\n * A workaround option which can be passed if onMouseDown needs to be accessed,\n * since it'll always be blocked (as there is internal use of onMouseDown)\n */\n onMouseDown: _propTypes.default.func,\n\n /**\n * `scale`, if set, applies scaling while dragging an element\n */\n scale: _propTypes.default.number,\n\n /**\n * These properties should be defined on the child, not here.\n */\n className: _shims.dontSetMe,\n style: _shims.dontSetMe,\n transform: _shims.dontSetMe\n});\n\n_defineProperty(DraggableCore, \"defaultProps\", {\n allowAnyClick: false,\n // by default only accept left click\n cancel: null,\n disabled: false,\n enableUserSelectHack: true,\n offsetParent: null,\n handle: null,\n grid: null,\n transform: null,\n onStart: function onStart() {},\n onDrag: function onDrag() {},\n onStop: function onStop() {},\n onMouseDown: function onMouseDown() {},\n scale: 1\n});","\"use strict\";\n\nvar _require = require('./Draggable'),\n Draggable = _require.default,\n DraggableCore = _require.DraggableCore; // Previous versions of this lib exported as the root export. As to no-// them, or TypeScript, we export *both* as the root and as 'default'.\n// See https://github.com/mzabriskie/react-draggable/pull/254\n// and https://github.com/mzabriskie/react-draggable/issues/266\n\n\nmodule.exports = Draggable;\nmodule.exports.default = Draggable;\nmodule.exports.DraggableCore = DraggableCore;","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.matchesSelector = matchesSelector;\nexports.matchesSelectorAndParentsTo = matchesSelectorAndParentsTo;\nexports.addEvent = addEvent;\nexports.removeEvent = removeEvent;\nexports.outerHeight = outerHeight;\nexports.outerWidth = outerWidth;\nexports.innerHeight = innerHeight;\nexports.innerWidth = innerWidth;\nexports.offsetXYFromParent = offsetXYFromParent;\nexports.createCSSTransform = createCSSTransform;\nexports.createSVGTransform = createSVGTransform;\nexports.getTranslation = getTranslation;\nexports.getTouch = getTouch;\nexports.getTouchIdentifier = getTouchIdentifier;\nexports.addUserSelectStyles = addUserSelectStyles;\nexports.removeUserSelectStyles = removeUserSelectStyles;\nexports.addClassName = addClassName;\nexports.removeClassName = removeClassName;\n\nvar _shims = require(\"./shims\");\n\nvar _getPrefix = _interopRequireWildcard(require(\"./getPrefix\"));\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar matchesSelectorFunc = '';\n\nfunction matchesSelector(el\n/*: Node*/\n, selector\n/*: string*/\n)\n/*: boolean*/\n{\n if (!matchesSelectorFunc) {\n matchesSelectorFunc = (0, _shims.findInArray)(['matches', 'webkitMatchesSelector', 'mozMatchesSelector', 'msMatchesSelector', 'oMatchesSelector'], function (method) {\n // $FlowIgnore: Doesn't think elements are indexable\n return (0, _shims.isFunction)(el[method]);\n });\n } // Might not be found entirely (not an Element?) - in that case, bail\n // $FlowIgnore: Doesn't think elements are indexable\n\n\n if (!(0, _shims.isFunction)(el[matchesSelectorFunc])) return false; // $FlowIgnore: Doesn't think elements are indexable\n\n return el[matchesSelectorFunc](selector);\n} // Works up the tree to the draggable itself attempting to match selector.\n\n\nfunction matchesSelectorAndParentsTo(el\n/*: Node*/\n, selector\n/*: string*/\n, baseNode\n/*: Node*/\n)\n/*: boolean*/\n{\n var node = el;\n\n do {\n if (matchesSelector(node, selector)) return true;\n if (node === baseNode) return false;\n node = node.parentNode;\n } while (node);\n\n return false;\n}\n\nfunction addEvent(el\n/*: ?Node*/\n, event\n/*: string*/\n, handler\n/*: Function*/\n, inputOptions\n/*: Object*/\n)\n/*: void*/\n{\n if (!el) return;\n\n var options = _objectSpread({\n capture: true\n }, inputOptions);\n\n if (el.addEventListener) {\n el.addEventListener(event, handler, options);\n } else if (el.attachEvent) {\n el.attachEvent('on' + event, handler);\n } else {\n // $FlowIgnore: Doesn't think elements are indexable\n el['on' + event] = handler;\n }\n}\n\nfunction removeEvent(el\n/*: ?Node*/\n, event\n/*: string*/\n, handler\n/*: Function*/\n, inputOptions\n/*: Object*/\n)\n/*: void*/\n{\n if (!el) return;\n\n var options = _objectSpread({\n capture: true\n }, inputOptions);\n\n if (el.removeEventListener) {\n el.removeEventListener(event, handler, options);\n } else if (el.detachEvent) {\n el.detachEvent('on' + event, handler);\n } else {\n // $FlowIgnore: Doesn't think elements are indexable\n el['on' + event] = null;\n }\n}\n\nfunction outerHeight(node\n/*: HTMLElement*/\n)\n/*: number*/\n{\n // This is deliberately excluding margin for our calculations, since we are using\n // offsetTop which is including margin. See getBoundPosition\n var height = node.clientHeight;\n var computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n height += (0, _shims.int)(computedStyle.borderTopWidth);\n height += (0, _shims.int)(computedStyle.borderBottomWidth);\n return height;\n}\n\nfunction outerWidth(node\n/*: HTMLElement*/\n)\n/*: number*/\n{\n // This is deliberately excluding margin for our calculations, since we are using\n // offsetLeft which is including margin. See getBoundPosition\n var width = node.clientWidth;\n var computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n width += (0, _shims.int)(computedStyle.borderLeftWidth);\n width += (0, _shims.int)(computedStyle.borderRightWidth);\n return width;\n}\n\nfunction innerHeight(node\n/*: HTMLElement*/\n)\n/*: number*/\n{\n var height = node.clientHeight;\n var computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n height -= (0, _shims.int)(computedStyle.paddingTop);\n height -= (0, _shims.int)(computedStyle.paddingBottom);\n return height;\n}\n\nfunction innerWidth(node\n/*: HTMLElement*/\n)\n/*: number*/\n{\n var width = node.clientWidth;\n var computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n width -= (0, _shims.int)(computedStyle.paddingLeft);\n width -= (0, _shims.int)(computedStyle.paddingRight);\n return width;\n} // Get from offsetParent\n\n\nfunction offsetXYFromParent(evt\n/*: {clientX: number, clientY: number}*/\n, offsetParent\n/*: HTMLElement*/\n, scale\n/*: number*/\n)\n/*: ControlPosition*/\n{\n var isBody = offsetParent === offsetParent.ownerDocument.body;\n var offsetParentRect = isBody ? {\n left: 0,\n top: 0\n } : offsetParent.getBoundingClientRect();\n var x = (evt.clientX + offsetParent.scrollLeft - offsetParentRect.left) / scale;\n var y = (evt.clientY + offsetParent.scrollTop - offsetParentRect.top) / scale;\n return {\n x: x,\n y: y\n };\n}\n\nfunction createCSSTransform(controlPos\n/*: ControlPosition*/\n, positionOffset\n/*: PositionOffsetControlPosition*/\n)\n/*: Object*/\n{\n var translation = getTranslation(controlPos, positionOffset, 'px');\n return _defineProperty({}, (0, _getPrefix.browserPrefixToKey)('transform', _getPrefix.default), translation);\n}\n\nfunction createSVGTransform(controlPos\n/*: ControlPosition*/\n, positionOffset\n/*: PositionOffsetControlPosition*/\n)\n/*: string*/\n{\n var translation = getTranslation(controlPos, positionOffset, '');\n return translation;\n}\n\nfunction getTranslation(_ref2, positionOffset\n/*: PositionOffsetControlPosition*/\n, unitSuffix\n/*: string*/\n)\n/*: string*/\n{\n var x = _ref2.x,\n y = _ref2.y;\n var translation = \"translate(\".concat(x).concat(unitSuffix, \",\").concat(y).concat(unitSuffix, \")\");\n\n if (positionOffset) {\n var defaultX = \"\".concat(typeof positionOffset.x === 'string' ? positionOffset.x : positionOffset.x + unitSuffix);\n var defaultY = \"\".concat(typeof positionOffset.y === 'string' ? positionOffset.y : positionOffset.y + unitSuffix);\n translation = \"translate(\".concat(defaultX, \", \").concat(defaultY, \")\") + translation;\n }\n\n return translation;\n}\n\nfunction getTouch(e\n/*: MouseTouchEvent*/\n, identifier\n/*: number*/\n)\n/*: ?{clientX: number, clientY: number}*/\n{\n return e.targetTouches && (0, _shims.findInArray)(e.targetTouches, function (t) {\n return identifier === t.identifier;\n }) || e.changedTouches && (0, _shims.findInArray)(e.changedTouches, function (t) {\n return identifier === t.identifier;\n });\n}\n\nfunction getTouchIdentifier(e\n/*: MouseTouchEvent*/\n)\n/*: ?number*/\n{\n if (e.targetTouches && e.targetTouches[0]) return e.targetTouches[0].identifier;\n if (e.changedTouches && e.changedTouches[0]) return e.changedTouches[0].identifier;\n} // User-select Hacks:\n//\n// Useful for preventing blue highlights all over everything when dragging.\n// Note we're passing `document` b/c we could be iframed\n\n\nfunction addUserSelectStyles(doc\n/*: ?Document*/\n) {\n if (!doc) return;\n var styleEl = doc.getElementById('react-draggable-style-el');\n\n if (!styleEl) {\n styleEl = doc.createElement('style');\n styleEl.type = 'text/css';\n styleEl.id = 'react-draggable-style-el';\n styleEl.innerHTML = '.react-draggable-transparent-selection *::-moz-selection {all: inherit;}\\n';\n styleEl.innerHTML += '.react-draggable-transparent-selection *::selection {all: inherit;}\\n';\n doc.getElementsByTagName('head')[0].appendChild(styleEl);\n }\n\n if (doc.body) addClassName(doc.body, 'react-draggable-transparent-selection');\n}\n\nfunction removeUserSelectStyles(doc\n/*: ?Document*/\n) {\n if (!doc) return;\n\n try {\n if (doc.body) removeClassName(doc.body, 'react-draggable-transparent-selection'); // $FlowIgnore: IE\n\n if (doc.selection) {\n // $FlowIgnore: IE\n doc.selection.empty();\n } else {\n // Remove selection caused by scroll, unless it's a focused input\n // (we use doc.defaultView in case we're in an iframe)\n var selection = (doc.defaultView || window).getSelection();\n\n if (selection && selection.type !== 'Caret') {\n selection.removeAllRanges();\n }\n }\n } catch (e) {// probably IE\n }\n}\n\nfunction addClassName(el\n/*: HTMLElement*/\n, className\n/*: string*/\n) {\n if (el.classList) {\n el.classList.add(className);\n } else {\n if (!el.className.match(new RegExp(\"(?:^|\\\\s)\".concat(className, \"(?!\\\\S)\")))) {\n el.className += \" \".concat(className);\n }\n }\n}\n\nfunction removeClassName(el\n/*: HTMLElement*/\n, className\n/*: string*/\n) {\n if (el.classList) {\n el.classList.remove(className);\n } else {\n el.className = el.className.replace(new RegExp(\"(?:^|\\\\s)\".concat(className, \"(?!\\\\S)\"), 'g'), '');\n }\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getPrefix = getPrefix;\nexports.browserPrefixToKey = browserPrefixToKey;\nexports.browserPrefixToStyle = browserPrefixToStyle;\nexports.default = void 0;\nvar prefixes = ['Moz', 'Webkit', 'O', 'ms'];\n\nfunction getPrefix()\n/*: string*/\n{\n var prop\n /*: string*/\n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'transform';\n // Checking specifically for 'window.document' is for pseudo-browser server-side\n // environments that define 'window' as the global context.\n // E.g. React-rails (see https://github.com/reactjs/react-rails/pull/84)\n if (typeof window === 'undefined' || typeof window.document === 'undefined') return '';\n var style = window.document.documentElement.style;\n if (prop in style) return '';\n\n for (var i = 0; i < prefixes.length; i++) {\n if (browserPrefixToKey(prop, prefixes[i]) in style) return prefixes[i];\n }\n\n return '';\n}\n\nfunction browserPrefixToKey(prop\n/*: string*/\n, prefix\n/*: string*/\n)\n/*: string*/\n{\n return prefix ? \"\".concat(prefix).concat(kebabToTitleCase(prop)) : prop;\n}\n\nfunction browserPrefixToStyle(prop\n/*: string*/\n, prefix\n/*: string*/\n)\n/*: string*/\n{\n return prefix ? \"-\".concat(prefix.toLowerCase(), \"-\").concat(prop) : prop;\n}\n\nfunction kebabToTitleCase(str\n/*: string*/\n)\n/*: string*/\n{\n var out = '';\n var shouldCapitalize = true;\n\n for (var i = 0; i < str.length; i++) {\n if (shouldCapitalize) {\n out += str[i].toUpperCase();\n shouldCapitalize = false;\n } else if (str[i] === '-') {\n shouldCapitalize = true;\n } else {\n out += str[i];\n }\n }\n\n return out;\n} // Default export is the prefix itself, like 'Moz', 'Webkit', etc\n// Note that you may have to re-test for certain things; for instance, Chrome 50\n// can handle unprefixed `transform`, but not unprefixed `user-select`\n\n\nvar _default = getPrefix();\n\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = log;\n\n/*eslint no-console:0*/\nfunction log() {\n var _console;\n\n if (undefined) (_console = console).log.apply(_console, arguments);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getBoundPosition = getBoundPosition;\nexports.snapToGrid = snapToGrid;\nexports.canDragX = canDragX;\nexports.canDragY = canDragY;\nexports.getControlPosition = getControlPosition;\nexports.createCoreData = createCoreData;\nexports.createDraggableData = createDraggableData;\n\nvar _shims = require(\"./shims\");\n\nvar _domFns = require(\"./domFns\");\n\nfunction getBoundPosition(draggable\n/*: Draggable*/\n, x\n/*: number*/\n, y\n/*: number*/\n)\n/*: [number, number]*/\n{\n // If no bounds, short-circuit and move on\n if (!draggable.props.bounds) return [x, y]; // Clone new bounds\n\n var bounds = draggable.props.bounds;\n bounds = typeof bounds === 'string' ? bounds : cloneBounds(bounds);\n var node = findDOMNode(draggable);\n\n if (typeof bounds === 'string') {\n var ownerDocument = node.ownerDocument;\n var ownerWindow = ownerDocument.defaultView;\n var boundNode;\n\n if (bounds === 'parent') {\n boundNode = node.parentNode;\n } else {\n boundNode = ownerDocument.querySelector(bounds);\n }\n\n if (!(boundNode instanceof ownerWindow.HTMLElement)) {\n throw new Error('Bounds selector \"' + bounds + '\" could not find an element.');\n }\n\n var nodeStyle = ownerWindow.getComputedStyle(node);\n var boundNodeStyle = ownerWindow.getComputedStyle(boundNode); // Compute bounds. This is a pain with padding and offsets but this gets it exactly right.\n\n bounds = {\n left: -node.offsetLeft + (0, _shims.int)(boundNodeStyle.paddingLeft) + (0, _shims.int)(nodeStyle.marginLeft),\n top: -node.offsetTop + (0, _shims.int)(boundNodeStyle.paddingTop) + (0, _shims.int)(nodeStyle.marginTop),\n right: (0, _domFns.innerWidth)(boundNode) - (0, _domFns.outerWidth)(node) - node.offsetLeft + (0, _shims.int)(boundNodeStyle.paddingRight) - (0, _shims.int)(nodeStyle.marginRight),\n bottom: (0, _domFns.innerHeight)(boundNode) - (0, _domFns.outerHeight)(node) - node.offsetTop + (0, _shims.int)(boundNodeStyle.paddingBottom) - (0, _shims.int)(nodeStyle.marginBottom)\n };\n } // Keep x and y below right and bottom limits...\n\n\n if ((0, _shims.isNum)(bounds.right)) x = Math.min(x, bounds.right);\n if ((0, _shims.isNum)(bounds.bottom)) y = Math.min(y, bounds.bottom); // But above left and top limits.\n\n if ((0, _shims.isNum)(bounds.left)) x = Math.max(x, bounds.left);\n if ((0, _shims.isNum)(bounds.top)) y = Math.max(y, bounds.top);\n return [x, y];\n}\n\nfunction snapToGrid(grid\n/*: [number, number]*/\n, pendingX\n/*: number*/\n, pendingY\n/*: number*/\n)\n/*: [number, number]*/\n{\n var x = Math.round(pendingX / grid[0]) * grid[0];\n var y = Math.round(pendingY / grid[1]) * grid[1];\n return [x, y];\n}\n\nfunction canDragX(draggable\n/*: Draggable*/\n)\n/*: boolean*/\n{\n return draggable.props.axis === 'both' || draggable.props.axis === 'x';\n}\n\nfunction canDragY(draggable\n/*: Draggable*/\n)\n/*: boolean*/\n{\n return draggable.props.axis === 'both' || draggable.props.axis === 'y';\n} // Get {x, y} positions from event.\n\n\nfunction getControlPosition(e\n/*: MouseTouchEvent*/\n, touchIdentifier\n/*: ?number*/\n, draggableCore\n/*: DraggableCore*/\n)\n/*: ?ControlPosition*/\n{\n var touchObj = typeof touchIdentifier === 'number' ? (0, _domFns.getTouch)(e, touchIdentifier) : null;\n if (typeof touchIdentifier === 'number' && !touchObj) return null; // not the right touch\n\n var node = findDOMNode(draggableCore); // User can provide an offsetParent if desired.\n\n var offsetParent = draggableCore.props.offsetParent || node.offsetParent || node.ownerDocument.body;\n return (0, _domFns.offsetXYFromParent)(touchObj || e, offsetParent, draggableCore.props.scale);\n} // Create an data object exposed by 's events\n\n\nfunction createCoreData(draggable\n/*: DraggableCore*/\n, x\n/*: number*/\n, y\n/*: number*/\n)\n/*: DraggableData*/\n{\n var state = draggable.state;\n var isStart = !(0, _shims.isNum)(state.lastX);\n var node = findDOMNode(draggable);\n\n if (isStart) {\n // If this is our first move, use the x and y as last coords.\n return {\n node: node,\n deltaX: 0,\n deltaY: 0,\n lastX: x,\n lastY: y,\n x: x,\n y: y\n };\n } else {\n // Otherwise calculate proper values.\n return {\n node: node,\n deltaX: x - state.lastX,\n deltaY: y - state.lastY,\n lastX: state.lastX,\n lastY: state.lastY,\n x: x,\n y: y\n };\n }\n} // Create an data exposed by 's events\n\n\nfunction createDraggableData(draggable\n/*: Draggable*/\n, coreData\n/*: DraggableData*/\n)\n/*: DraggableData*/\n{\n var scale = draggable.props.scale;\n return {\n node: coreData.node,\n x: draggable.state.x + coreData.deltaX / scale,\n y: draggable.state.y + coreData.deltaY / scale,\n deltaX: coreData.deltaX / scale,\n deltaY: coreData.deltaY / scale,\n lastX: draggable.state.x,\n lastY: draggable.state.y\n };\n} // A lot faster than stringify/parse\n\n\nfunction cloneBounds(bounds\n/*: Bounds*/\n)\n/*: Bounds*/\n{\n return {\n left: bounds.left,\n top: bounds.top,\n right: bounds.right,\n bottom: bounds.bottom\n };\n}\n\nfunction findDOMNode(draggable\n/*: Draggable | DraggableCore*/\n)\n/*: HTMLElement*/\n{\n var node = draggable.findDOMNode();\n\n if (!node) {\n throw new Error(': Unmounted during event!');\n } // $FlowIgnore we can't assert on HTMLElement due to tests... FIXME\n\n\n return node;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.findInArray = findInArray;\nexports.isFunction = isFunction;\nexports.isNum = isNum;\nexports.int = int;\nexports.dontSetMe = dontSetMe;\n\n// @credits https://gist.github.com/rogozhnikoff/a43cfed27c41e4e68cdc\nfunction findInArray(array\n/*: Array | TouchList*/\n, callback\n/*: Function*/\n)\n/*: any*/\n{\n for (var i = 0, length = array.length; i < length; i++) {\n if (callback.apply(callback, [array[i], i, array])) return array[i];\n }\n}\n\nfunction isFunction(func\n/*: any*/\n)\n/*: boolean %checks*/\n{\n return typeof func === 'function' || Object.prototype.toString.call(func) === '[object Function]';\n}\n\nfunction isNum(num\n/*: any*/\n)\n/*: boolean %checks*/\n{\n return typeof num === 'number' && !isNaN(num);\n}\n\nfunction int(a\n/*: string*/\n)\n/*: number*/\n{\n return parseInt(a, 10);\n}\n\nfunction dontSetMe(props\n/*: Object*/\n, propName\n/*: string*/\n, componentName\n/*: string*/\n) {\n if (props[propName]) {\n return new Error(\"Invalid prop \".concat(propName, \" passed to \").concat(componentName, \" - do not set this, set it on the child.\"));\n }\n}","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport React from 'react';\nvar defaultOptions = {\n bindI18n: 'languageChanging languageChanged',\n bindI18nStore: '',\n // nsMode: 'fallback' // loop through all namespaces given to hook, HOC, render prop for key lookup\n transEmptyNodeValue: '',\n transSupportBasicHtmlNodes: true,\n transKeepBasicHtmlNodesFor: ['br', 'strong', 'i', 'p'],\n // hashTransKey: key => key // calculate a key for Trans component based on defaultValue\n useSuspense: true\n};\nvar i18nInstance;\nvar hasUsedI18nextProvider;\nexport var I18nContext = React.createContext();\nexport function usedI18nextProvider(used) {\n hasUsedI18nextProvider = used;\n}\nexport function getHasUsedI18nextProvider() {\n return hasUsedI18nextProvider;\n}\nexport function setDefaults() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n defaultOptions = _objectSpread({}, defaultOptions, {}, options);\n}\nexport function getDefaults() {\n return defaultOptions;\n}\nexport var ReportNamespaces =\n/*#__PURE__*/\nfunction () {\n function ReportNamespaces() {\n _classCallCheck(this, ReportNamespaces);\n\n this.usedNamespaces = {};\n }\n\n _createClass(ReportNamespaces, [{\n key: \"addUsedNamespaces\",\n value: function addUsedNamespaces(namespaces) {\n var _this = this;\n\n namespaces.forEach(function (ns) {\n if (!_this.usedNamespaces[ns]) _this.usedNamespaces[ns] = true;\n });\n }\n }, {\n key: \"getUsedNamespaces\",\n value: function getUsedNamespaces() {\n return Object.keys(this.usedNamespaces);\n }\n }]);\n\n return ReportNamespaces;\n}();\nexport function setI18n(instance) {\n i18nInstance = instance;\n}\nexport function getI18n() {\n return i18nInstance;\n}\nexport var initReactI18next = {\n type: '3rdParty',\n init: function init(instance) {\n setDefaults(instance.options.react);\n setI18n(instance);\n }\n};\nexport function composeInitialProps(ForComponent) {\n return function (ctx) {\n return new Promise(function (resolve) {\n var i18nInitialProps = getInitialProps();\n\n if (ForComponent.getInitialProps) {\n ForComponent.getInitialProps(ctx).then(function (componentsInitialProps) {\n resolve(_objectSpread({}, componentsInitialProps, {}, i18nInitialProps));\n });\n } else {\n resolve(i18nInitialProps);\n }\n });\n }; // Avoid async for now - so we do not need to pull in regenerator\n // return async ctx => {\n // const componentsInitialProps = ForComponent.getInitialProps\n // ? await ForComponent.getInitialProps(ctx)\n // : {};\n // const i18nInitialProps = getInitialProps();\n // return {\n // ...componentsInitialProps,\n // ...i18nInitialProps,\n // };\n // };\n}\nexport function getInitialProps() {\n var i18n = getI18n();\n var namespaces = i18n.reportNamespaces ? i18n.reportNamespaces.getUsedNamespaces() : [];\n var ret = {};\n var initialI18nStore = {};\n i18n.languages.forEach(function (l) {\n initialI18nStore[l] = {};\n namespaces.forEach(function (ns) {\n initialI18nStore[l][ns] = i18n.getResourceBundle(l, ns) || {};\n });\n });\n ret.initialI18nStore = initialI18nStore;\n ret.initialLanguage = i18n.language;\n return ret;\n}","export function warn() {\n if (console && console.warn) {\n var _console;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (typeof args[0] === 'string') args[0] = \"react-i18next:: \".concat(args[0]);\n\n (_console = console).warn.apply(_console, args);\n }\n}\nvar alreadyWarned = {};\nexport function warnOnce() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n if (typeof args[0] === 'string' && alreadyWarned[args[0]]) return;\n if (typeof args[0] === 'string') alreadyWarned[args[0]] = new Date();\n warn.apply(void 0, args);\n} // not needed right now\n//\n// export function deprecated(...args) {\n// if (process && process.env && (!process.env.NODE_ENV || process.env.NODE_ENV === 'development')) {\n// if (typeof args[0] === 'string') args[0] = `deprecation warning -> ${args[0]}`;\n// warnOnce(...args);\n// }\n// }\n\nexport function loadNamespaces(i18n, ns, cb) {\n i18n.loadNamespaces(ns, function () {\n // delay ready if not yet initialized i18n instance\n if (i18n.isInitialized) {\n cb();\n } else {\n var initialized = function initialized() {\n // due to emitter removing issue in i18next we need to delay remove\n setTimeout(function () {\n i18n.off('initialized', initialized);\n }, 0);\n cb();\n };\n\n i18n.on('initialized', initialized);\n }\n });\n}\nexport function hasLoadedNamespace(ns, i18n) {\n if (!i18n.languages || !i18n.languages.length) {\n warnOnce('i18n.languages were undefined or empty', i18n.languages);\n return true;\n }\n\n var lng = i18n.languages[0];\n var fallbackLng = i18n.options ? i18n.options.fallbackLng : false;\n var lastLng = i18n.languages[i18n.languages.length - 1]; // we're in cimode so this shall pass\n\n if (lng.toLowerCase() === 'cimode') return true;\n\n var loadNotPending = function loadNotPending(l, n) {\n var loadState = i18n.services.backendConnector.state[\"\".concat(l, \"|\").concat(n)];\n return loadState === -1 || loadState === 2;\n }; // loaded -> SUCCESS\n\n\n if (i18n.hasResourceBundle(lng, ns)) return true; // were not loading at all -> SEMI SUCCESS\n\n if (!i18n.services.backendConnector.backend) return true; // failed loading ns - but at least fallback is not pending -> SEMI SUCCESS\n\n if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;\n return false;\n}\nexport function getDisplayName(Component) {\n return Component.displayName || Component.name || (typeof Component === 'string' && Component.length > 0 ? Component : 'Unknown');\n}","import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport { useState, useEffect, useContext } from 'react';\nimport { getI18n, getDefaults, ReportNamespaces, getHasUsedI18nextProvider, I18nContext } from './context';\nimport { warnOnce, loadNamespaces, hasLoadedNamespace } from './utils';\nexport function useTranslation(ns) {\n var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n // assert we have the needed i18nInstance\n var i18nFromProps = props.i18n;\n var ReactI18nContext = useContext(I18nContext);\n\n var _ref = getHasUsedI18nextProvider() ? ReactI18nContext || {} : {},\n i18nFromContext = _ref.i18n,\n defaultNSFromContext = _ref.defaultNS;\n\n var i18n = i18nFromProps || i18nFromContext || getI18n();\n if (i18n && !i18n.reportNamespaces) i18n.reportNamespaces = new ReportNamespaces();\n\n if (!i18n) {\n warnOnce('You will need pass in an i18next instance by using initReactI18next');\n var retNotReady = [function (k) {\n return k;\n }, {}, false];\n\n retNotReady.t = function (k) {\n return k;\n };\n\n retNotReady.i18n = {};\n retNotReady.ready = false;\n return retNotReady;\n }\n\n var i18nOptions = _objectSpread({}, getDefaults(), {}, i18n.options.react);\n\n var _props$useSuspense = props.useSuspense,\n useSuspense = _props$useSuspense === void 0 ? i18nOptions.useSuspense : _props$useSuspense; // prepare having a namespace\n\n var namespaces = ns || defaultNSFromContext || i18n.options && i18n.options.defaultNS;\n namespaces = typeof namespaces === 'string' ? [namespaces] : namespaces || ['translation']; // report namespaces as used\n\n if (i18n.reportNamespaces.addUsedNamespaces) i18n.reportNamespaces.addUsedNamespaces(namespaces); // are we ready? yes if all namespaces in first language are loaded already (either with data or empty object on failed load)\n\n var ready = (i18n.isInitialized || i18n.initializedStoreOnce) && namespaces.every(function (n) {\n return hasLoadedNamespace(n, i18n);\n }); // binding t function to namespace (acts also as rerender trigger)\n\n function getT() {\n return {\n t: i18n.getFixedT(null, i18nOptions.nsMode === 'fallback' ? namespaces : namespaces[0])\n };\n }\n\n var _useState = useState(getT()),\n _useState2 = _slicedToArray(_useState, 2),\n t = _useState2[0],\n setT = _useState2[1]; // seems we can't have functions as value -> wrap it in obj\n\n\n useEffect(function () {\n var isMounted = true;\n var bindI18n = i18nOptions.bindI18n,\n bindI18nStore = i18nOptions.bindI18nStore; // if not ready and not using suspense load the namespaces\n // in side effect and do not call resetT if unmounted\n\n if (!ready && !useSuspense) {\n loadNamespaces(i18n, namespaces, function () {\n if (isMounted) setT(getT());\n });\n }\n\n function boundReset() {\n if (isMounted) setT(getT());\n } // bind events to trigger change, like languageChanged\n\n\n if (bindI18n && i18n) i18n.on(bindI18n, boundReset);\n if (bindI18nStore && i18n) i18n.store.on(bindI18nStore, boundReset); // unbinding on unmount\n\n return function () {\n isMounted = false;\n if (bindI18n && i18n) bindI18n.split(' ').forEach(function (e) {\n return i18n.off(e, boundReset);\n });\n if (bindI18nStore && i18n) bindI18nStore.split(' ').forEach(function (e) {\n return i18n.store.off(e, boundReset);\n });\n };\n }, [namespaces.join()]); // re-run effect whenever list of namespaces changes\n\n var ret = [t.t, i18n, ready];\n ret.t = t.t;\n ret.i18n = i18n;\n ret.ready = ready; // return hook stuff if ready\n\n if (ready) return ret; // not yet loaded namespaces -> load them -> and return if useSuspense option set false\n\n if (!ready && !useSuspense) return ret; // not yet loaded namespaces -> load them -> and trigger suspense\n\n throw new Promise(function (resolve) {\n loadNamespaces(i18n, namespaces, function () {\n setT(getT());\n resolve();\n });\n });\n}","import React from 'react';\nimport { I18nContext, usedI18nextProvider } from './context';\nexport function I18nextProvider(_ref) {\n var i18n = _ref.i18n,\n defaultNS = _ref.defaultNS,\n children = _ref.children;\n usedI18nextProvider(true);\n return React.createElement(I18nContext.Provider, {\n value: {\n i18n: i18n,\n defaultNS: defaultNS\n }\n }, children);\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar sizerStyle = {\n\tposition: 'absolute',\n\ttop: 0,\n\tleft: 0,\n\tvisibility: 'hidden',\n\theight: 0,\n\toverflow: 'scroll',\n\twhiteSpace: 'pre'\n};\n\nvar INPUT_PROPS_BLACKLIST = ['extraWidth', 'injectStyles', 'inputClassName', 'inputRef', 'inputStyle', 'minWidth', 'onAutosize', 'placeholderIsMinWidth'];\n\nvar cleanInputProps = function cleanInputProps(inputProps) {\n\tINPUT_PROPS_BLACKLIST.forEach(function (field) {\n\t\treturn delete inputProps[field];\n\t});\n\treturn inputProps;\n};\n\nvar copyStyles = function copyStyles(styles, node) {\n\tnode.style.fontSize = styles.fontSize;\n\tnode.style.fontFamily = styles.fontFamily;\n\tnode.style.fontWeight = styles.fontWeight;\n\tnode.style.fontStyle = styles.fontStyle;\n\tnode.style.letterSpacing = styles.letterSpacing;\n\tnode.style.textTransform = styles.textTransform;\n};\n\nvar isIE = typeof window !== 'undefined' && window.navigator ? /MSIE |Trident\\/|Edge\\//.test(window.navigator.userAgent) : false;\n\nvar generateId = function generateId() {\n\t// we only need an auto-generated ID for stylesheet injection, which is only\n\t// used for IE. so if the browser is not IE, this should return undefined.\n\treturn isIE ? '_' + Math.random().toString(36).substr(2, 12) : undefined;\n};\n\nvar AutosizeInput = function (_Component) {\n\t_inherits(AutosizeInput, _Component);\n\n\tfunction AutosizeInput(props) {\n\t\t_classCallCheck(this, AutosizeInput);\n\n\t\tvar _this = _possibleConstructorReturn(this, (AutosizeInput.__proto__ || Object.getPrototypeOf(AutosizeInput)).call(this, props));\n\n\t\t_this.inputRef = function (el) {\n\t\t\t_this.input = el;\n\t\t\tif (typeof _this.props.inputRef === 'function') {\n\t\t\t\t_this.props.inputRef(el);\n\t\t\t}\n\t\t};\n\n\t\t_this.placeHolderSizerRef = function (el) {\n\t\t\t_this.placeHolderSizer = el;\n\t\t};\n\n\t\t_this.sizerRef = function (el) {\n\t\t\t_this.sizer = el;\n\t\t};\n\n\t\t_this.state = {\n\t\t\tinputWidth: props.minWidth,\n\t\t\tinputId: props.id || generateId()\n\t\t};\n\t\treturn _this;\n\t}\n\n\t_createClass(AutosizeInput, [{\n\t\tkey: 'componentDidMount',\n\t\tvalue: function componentDidMount() {\n\t\t\tthis.mounted = true;\n\t\t\tthis.copyInputStyles();\n\t\t\tthis.updateInputWidth();\n\t\t}\n\t}, {\n\t\tkey: 'UNSAFE_componentWillReceiveProps',\n\t\tvalue: function UNSAFE_componentWillReceiveProps(nextProps) {\n\t\t\tvar id = nextProps.id;\n\n\t\t\tif (id !== this.props.id) {\n\t\t\t\tthis.setState({ inputId: id || generateId() });\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'componentDidUpdate',\n\t\tvalue: function componentDidUpdate(prevProps, prevState) {\n\t\t\tif (prevState.inputWidth !== this.state.inputWidth) {\n\t\t\t\tif (typeof this.props.onAutosize === 'function') {\n\t\t\t\t\tthis.props.onAutosize(this.state.inputWidth);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.updateInputWidth();\n\t\t}\n\t}, {\n\t\tkey: 'componentWillUnmount',\n\t\tvalue: function componentWillUnmount() {\n\t\t\tthis.mounted = false;\n\t\t}\n\t}, {\n\t\tkey: 'copyInputStyles',\n\t\tvalue: function copyInputStyles() {\n\t\t\tif (!this.mounted || !window.getComputedStyle) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar inputStyles = this.input && window.getComputedStyle(this.input);\n\t\t\tif (!inputStyles) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcopyStyles(inputStyles, this.sizer);\n\t\t\tif (this.placeHolderSizer) {\n\t\t\t\tcopyStyles(inputStyles, this.placeHolderSizer);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'updateInputWidth',\n\t\tvalue: function updateInputWidth() {\n\t\t\tif (!this.mounted || !this.sizer || typeof this.sizer.scrollWidth === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar newInputWidth = void 0;\n\t\t\tif (this.props.placeholder && (!this.props.value || this.props.value && this.props.placeholderIsMinWidth)) {\n\t\t\t\tnewInputWidth = Math.max(this.sizer.scrollWidth, this.placeHolderSizer.scrollWidth) + 2;\n\t\t\t} else {\n\t\t\t\tnewInputWidth = this.sizer.scrollWidth + 2;\n\t\t\t}\n\t\t\t// add extraWidth to the detected width. for number types, this defaults to 16 to allow for the stepper UI\n\t\t\tvar extraWidth = this.props.type === 'number' && this.props.extraWidth === undefined ? 16 : parseInt(this.props.extraWidth) || 0;\n\t\t\tnewInputWidth += extraWidth;\n\t\t\tif (newInputWidth < this.props.minWidth) {\n\t\t\t\tnewInputWidth = this.props.minWidth;\n\t\t\t}\n\t\t\tif (newInputWidth !== this.state.inputWidth) {\n\t\t\t\tthis.setState({\n\t\t\t\t\tinputWidth: newInputWidth\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'getInput',\n\t\tvalue: function getInput() {\n\t\t\treturn this.input;\n\t\t}\n\t}, {\n\t\tkey: 'focus',\n\t\tvalue: function focus() {\n\t\t\tthis.input.focus();\n\t\t}\n\t}, {\n\t\tkey: 'blur',\n\t\tvalue: function blur() {\n\t\t\tthis.input.blur();\n\t\t}\n\t}, {\n\t\tkey: 'select',\n\t\tvalue: function select() {\n\t\t\tthis.input.select();\n\t\t}\n\t}, {\n\t\tkey: 'renderStyles',\n\t\tvalue: function renderStyles() {\n\t\t\t// this method injects styles to hide IE's clear indicator, which messes\n\t\t\t// with input size detection. the stylesheet is only injected when the\n\t\t\t// browser is IE, and can also be disabled by the `injectStyles` prop.\n\t\t\tvar injectStyles = this.props.injectStyles;\n\n\t\t\treturn isIE && injectStyles ? _react2.default.createElement('style', { dangerouslySetInnerHTML: {\n\t\t\t\t\t__html: 'input#' + this.state.inputId + '::-ms-clear {display: none;}'\n\t\t\t\t} }) : null;\n\t\t}\n\t}, {\n\t\tkey: 'render',\n\t\tvalue: function render() {\n\t\t\tvar sizerValue = [this.props.defaultValue, this.props.value, ''].reduce(function (previousValue, currentValue) {\n\t\t\t\tif (previousValue !== null && previousValue !== undefined) {\n\t\t\t\t\treturn previousValue;\n\t\t\t\t}\n\t\t\t\treturn currentValue;\n\t\t\t});\n\n\t\t\tvar wrapperStyle = _extends({}, this.props.style);\n\t\t\tif (!wrapperStyle.display) wrapperStyle.display = 'inline-block';\n\n\t\t\tvar inputStyle = _extends({\n\t\t\t\tboxSizing: 'content-box',\n\t\t\t\twidth: this.state.inputWidth + 'px'\n\t\t\t}, this.props.inputStyle);\n\n\t\t\tvar inputProps = _objectWithoutProperties(this.props, []);\n\n\t\t\tcleanInputProps(inputProps);\n\t\t\tinputProps.className = this.props.inputClassName;\n\t\t\tinputProps.id = this.state.inputId;\n\t\t\tinputProps.style = inputStyle;\n\n\t\t\treturn _react2.default.createElement(\n\t\t\t\t'div',\n\t\t\t\t{ className: this.props.className, style: wrapperStyle },\n\t\t\t\tthis.renderStyles(),\n\t\t\t\t_react2.default.createElement('input', _extends({}, inputProps, { ref: this.inputRef })),\n\t\t\t\t_react2.default.createElement(\n\t\t\t\t\t'div',\n\t\t\t\t\t{ ref: this.sizerRef, style: sizerStyle },\n\t\t\t\t\tsizerValue\n\t\t\t\t),\n\t\t\t\tthis.props.placeholder ? _react2.default.createElement(\n\t\t\t\t\t'div',\n\t\t\t\t\t{ ref: this.placeHolderSizerRef, style: sizerStyle },\n\t\t\t\t\tthis.props.placeholder\n\t\t\t\t) : null\n\t\t\t);\n\t\t}\n\t}]);\n\n\treturn AutosizeInput;\n}(_react.Component);\n\nAutosizeInput.propTypes = {\n\tclassName: _propTypes2.default.string, // className for the outer element\n\tdefaultValue: _propTypes2.default.any, // default field value\n\textraWidth: _propTypes2.default.oneOfType([// additional width for input element\n\t_propTypes2.default.number, _propTypes2.default.string]),\n\tid: _propTypes2.default.string, // id to use for the input, can be set for consistent snapshots\n\tinjectStyles: _propTypes2.default.bool, // inject the custom stylesheet to hide clear UI, defaults to true\n\tinputClassName: _propTypes2.default.string, // className for the input element\n\tinputRef: _propTypes2.default.func, // ref callback for the input element\n\tinputStyle: _propTypes2.default.object, // css styles for the input element\n\tminWidth: _propTypes2.default.oneOfType([// minimum width for input element\n\t_propTypes2.default.number, _propTypes2.default.string]),\n\tonAutosize: _propTypes2.default.func, // onAutosize handler: function(newWidth) {}\n\tonChange: _propTypes2.default.func, // onChange handler: function(event) {}\n\tplaceholder: _propTypes2.default.string, // placeholder text\n\tplaceholderIsMinWidth: _propTypes2.default.bool, // don't collapse size to less than the placeholder\n\tstyle: _propTypes2.default.object, // css styles for the outer element\n\tvalue: _propTypes2.default.any // field value\n};\nAutosizeInput.defaultProps = {\n\tminWidth: 1,\n\tinjectStyles: true\n};\n\nexports.default = AutosizeInput;","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nfunction componentWillMount() {\n // Call this.constructor.gDSFP to support sub-classes.\n var state = this.constructor.getDerivedStateFromProps(this.props, this.state);\n if (state !== null && state !== undefined) {\n this.setState(state);\n }\n}\n\nfunction componentWillReceiveProps(nextProps) {\n // Call this.constructor.gDSFP to support sub-classes.\n // Use the setState() updater to ensure state isn't stale in certain edge cases.\n function updater(prevState) {\n var state = this.constructor.getDerivedStateFromProps(nextProps, prevState);\n return state !== null && state !== undefined ? state : null;\n }\n // Binding \"this\" is important for shallow renderer support.\n this.setState(updater.bind(this));\n}\n\nfunction componentWillUpdate(nextProps, nextState) {\n try {\n var prevProps = this.props;\n var prevState = this.state;\n this.props = nextProps;\n this.state = nextState;\n this.__reactInternalSnapshotFlag = true;\n this.__reactInternalSnapshot = this.getSnapshotBeforeUpdate(\n prevProps,\n prevState\n );\n } finally {\n this.props = prevProps;\n this.state = prevState;\n }\n}\n\n// React may warn about cWM/cWRP/cWU methods being deprecated.\n// Add a flag to suppress these warnings for this special case.\ncomponentWillMount.__suppressDeprecationWarning = true;\ncomponentWillReceiveProps.__suppressDeprecationWarning = true;\ncomponentWillUpdate.__suppressDeprecationWarning = true;\n\nfunction polyfill(Component) {\n var prototype = Component.prototype;\n\n if (!prototype || !prototype.isReactComponent) {\n throw new Error('Can only polyfill class components');\n }\n\n if (\n typeof Component.getDerivedStateFromProps !== 'function' &&\n typeof prototype.getSnapshotBeforeUpdate !== 'function'\n ) {\n return Component;\n }\n\n // If new component APIs are defined, \"unsafe\" lifecycles won't be called.\n // Error if any of these lifecycles are present,\n // Because they would work differently between older and newer (16.3+) versions of React.\n var foundWillMountName = null;\n var foundWillReceivePropsName = null;\n var foundWillUpdateName = null;\n if (typeof prototype.componentWillMount === 'function') {\n foundWillMountName = 'componentWillMount';\n } else if (typeof prototype.UNSAFE_componentWillMount === 'function') {\n foundWillMountName = 'UNSAFE_componentWillMount';\n }\n if (typeof prototype.componentWillReceiveProps === 'function') {\n foundWillReceivePropsName = 'componentWillReceiveProps';\n } else if (typeof prototype.UNSAFE_componentWillReceiveProps === 'function') {\n foundWillReceivePropsName = 'UNSAFE_componentWillReceiveProps';\n }\n if (typeof prototype.componentWillUpdate === 'function') {\n foundWillUpdateName = 'componentWillUpdate';\n } else if (typeof prototype.UNSAFE_componentWillUpdate === 'function') {\n foundWillUpdateName = 'UNSAFE_componentWillUpdate';\n }\n if (\n foundWillMountName !== null ||\n foundWillReceivePropsName !== null ||\n foundWillUpdateName !== null\n ) {\n var componentName = Component.displayName || Component.name;\n var newApiName =\n typeof Component.getDerivedStateFromProps === 'function'\n ? 'getDerivedStateFromProps()'\n : 'getSnapshotBeforeUpdate()';\n\n throw Error(\n 'Unsafe legacy lifecycles will not be called for components using new component APIs.\\n\\n' +\n componentName +\n ' uses ' +\n newApiName +\n ' but also contains the following legacy lifecycles:' +\n (foundWillMountName !== null ? '\\n ' + foundWillMountName : '') +\n (foundWillReceivePropsName !== null\n ? '\\n ' + foundWillReceivePropsName\n : '') +\n (foundWillUpdateName !== null ? '\\n ' + foundWillUpdateName : '') +\n '\\n\\nThe above lifecycles should be removed. Learn more about this warning here:\\n' +\n 'https://fb.me/react-async-component-lifecycle-hooks'\n );\n }\n\n // React <= 16.2 does not support static getDerivedStateFromProps.\n // As a workaround, use cWM and cWRP to invoke the new static lifecycle.\n // Newer versions of React will ignore these lifecycles if gDSFP exists.\n if (typeof Component.getDerivedStateFromProps === 'function') {\n prototype.componentWillMount = componentWillMount;\n prototype.componentWillReceiveProps = componentWillReceiveProps;\n }\n\n // React <= 16.2 does not support getSnapshotBeforeUpdate.\n // As a workaround, use cWU to invoke the new lifecycle.\n // Newer versions of React will ignore that lifecycle if gSBU exists.\n if (typeof prototype.getSnapshotBeforeUpdate === 'function') {\n if (typeof prototype.componentDidUpdate !== 'function') {\n throw new Error(\n 'Cannot polyfill getSnapshotBeforeUpdate() for components that do not define componentDidUpdate() on the prototype'\n );\n }\n\n prototype.componentWillUpdate = componentWillUpdate;\n\n var componentDidUpdate = prototype.componentDidUpdate;\n\n prototype.componentDidUpdate = function componentDidUpdatePolyfill(\n prevProps,\n prevState,\n maybeSnapshot\n ) {\n // 16.3+ will not execute our will-update method;\n // It will pass a snapshot value to did-update though.\n // Older versions will require our polyfilled will-update value.\n // We need to handle both cases, but can't just check for the presence of \"maybeSnapshot\",\n // Because for <= 15.x versions this might be a \"prevContext\" object.\n // We also can't just check \"__reactInternalSnapshot\",\n // Because get-snapshot might return a falsy value.\n // So check for the explicit __reactInternalSnapshotFlag flag to determine behavior.\n var snapshot = this.__reactInternalSnapshotFlag\n ? this.__reactInternalSnapshot\n : maybeSnapshot;\n\n componentDidUpdate.call(this, prevProps, prevState, snapshot);\n };\n }\n\n return Component;\n}\n\nexport { polyfill };\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.bodyOpenClassName = exports.portalClassName = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require(\"react-dom\");\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _propTypes = require(\"prop-types\");\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _ModalPortal = require(\"./ModalPortal\");\n\nvar _ModalPortal2 = _interopRequireDefault(_ModalPortal);\n\nvar _ariaAppHider = require(\"../helpers/ariaAppHider\");\n\nvar ariaAppHider = _interopRequireWildcard(_ariaAppHider);\n\nvar _safeHTMLElement = require(\"../helpers/safeHTMLElement\");\n\nvar _safeHTMLElement2 = _interopRequireDefault(_safeHTMLElement);\n\nvar _reactLifecyclesCompat = require(\"react-lifecycles-compat\");\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar portalClassName = exports.portalClassName = \"ReactModalPortal\";\nvar bodyOpenClassName = exports.bodyOpenClassName = \"ReactModal__Body--open\";\n\nvar isReact16 = _reactDom2.default.createPortal !== undefined;\n\nvar getCreatePortal = function getCreatePortal() {\n return isReact16 ? _reactDom2.default.createPortal : _reactDom2.default.unstable_renderSubtreeIntoContainer;\n};\n\nfunction getParentElement(parentSelector) {\n return parentSelector();\n}\n\nvar Modal = function (_Component) {\n _inherits(Modal, _Component);\n\n function Modal() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, Modal);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Modal.__proto__ || Object.getPrototypeOf(Modal)).call.apply(_ref, [this].concat(args))), _this), _this.removePortal = function () {\n !isReact16 && _reactDom2.default.unmountComponentAtNode(_this.node);\n var parent = getParentElement(_this.props.parentSelector);\n if (parent) {\n parent.removeChild(_this.node);\n } else {\n // eslint-disable-next-line no-console\n console.warn('React-Modal: \"parentSelector\" prop did not returned any DOM ' + \"element. Make sure that the parent element is unmounted to \" + \"avoid any memory leaks.\");\n }\n }, _this.portalRef = function (ref) {\n _this.portal = ref;\n }, _this.renderPortal = function (props) {\n var createPortal = getCreatePortal();\n var portal = createPortal(_this, _react2.default.createElement(_ModalPortal2.default, _extends({ defaultStyles: Modal.defaultStyles }, props)), _this.node);\n _this.portalRef(portal);\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(Modal, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n if (!_safeHTMLElement.canUseDOM) return;\n\n if (!isReact16) {\n this.node = document.createElement(\"div\");\n }\n this.node.className = this.props.portalClassName;\n\n var parent = getParentElement(this.props.parentSelector);\n parent.appendChild(this.node);\n\n !isReact16 && this.renderPortal(this.props);\n }\n }, {\n key: \"getSnapshotBeforeUpdate\",\n value: function getSnapshotBeforeUpdate(prevProps) {\n var prevParent = getParentElement(prevProps.parentSelector);\n var nextParent = getParentElement(this.props.parentSelector);\n return { prevParent: prevParent, nextParent: nextParent };\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps, _, snapshot) {\n if (!_safeHTMLElement.canUseDOM) return;\n var _props = this.props,\n isOpen = _props.isOpen,\n portalClassName = _props.portalClassName;\n\n\n if (prevProps.portalClassName !== portalClassName) {\n this.node.className = portalClassName;\n }\n\n var prevParent = snapshot.prevParent,\n nextParent = snapshot.nextParent;\n\n if (nextParent !== prevParent) {\n prevParent.removeChild(this.node);\n nextParent.appendChild(this.node);\n }\n\n // Stop unnecessary renders if modal is remaining closed\n if (!prevProps.isOpen && !isOpen) return;\n\n !isReact16 && this.renderPortal(this.props);\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n if (!_safeHTMLElement.canUseDOM || !this.node || !this.portal) return;\n\n var state = this.portal.state;\n var now = Date.now();\n var closesAt = state.isOpen && this.props.closeTimeoutMS && (state.closesAt || now + this.props.closeTimeoutMS);\n\n if (closesAt) {\n if (!state.beforeClose) {\n this.portal.closeWithTimeout();\n }\n\n setTimeout(this.removePortal, closesAt - now);\n } else {\n this.removePortal();\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n if (!_safeHTMLElement.canUseDOM || !isReact16) {\n return null;\n }\n\n if (!this.node && isReact16) {\n this.node = document.createElement(\"div\");\n }\n\n var createPortal = getCreatePortal();\n return createPortal(_react2.default.createElement(_ModalPortal2.default, _extends({\n ref: this.portalRef,\n defaultStyles: Modal.defaultStyles\n }, this.props)), this.node);\n }\n }], [{\n key: \"setAppElement\",\n value: function setAppElement(element) {\n ariaAppHider.setElement(element);\n }\n\n /* eslint-disable react/no-unused-prop-types */\n\n /* eslint-enable react/no-unused-prop-types */\n\n }]);\n\n return Modal;\n}(_react.Component);\n\nModal.propTypes = {\n isOpen: _propTypes2.default.bool.isRequired,\n style: _propTypes2.default.shape({\n content: _propTypes2.default.object,\n overlay: _propTypes2.default.object\n }),\n portalClassName: _propTypes2.default.string,\n bodyOpenClassName: _propTypes2.default.string,\n htmlOpenClassName: _propTypes2.default.string,\n className: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.shape({\n base: _propTypes2.default.string.isRequired,\n afterOpen: _propTypes2.default.string.isRequired,\n beforeClose: _propTypes2.default.string.isRequired\n })]),\n overlayClassName: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.shape({\n base: _propTypes2.default.string.isRequired,\n afterOpen: _propTypes2.default.string.isRequired,\n beforeClose: _propTypes2.default.string.isRequired\n })]),\n appElement: _propTypes2.default.instanceOf(_safeHTMLElement2.default),\n onAfterOpen: _propTypes2.default.func,\n onRequestClose: _propTypes2.default.func,\n closeTimeoutMS: _propTypes2.default.number,\n ariaHideApp: _propTypes2.default.bool,\n shouldFocusAfterRender: _propTypes2.default.bool,\n shouldCloseOnOverlayClick: _propTypes2.default.bool,\n shouldReturnFocusAfterClose: _propTypes2.default.bool,\n parentSelector: _propTypes2.default.func,\n aria: _propTypes2.default.object,\n data: _propTypes2.default.object,\n role: _propTypes2.default.string,\n contentLabel: _propTypes2.default.string,\n shouldCloseOnEsc: _propTypes2.default.bool,\n overlayRef: _propTypes2.default.func,\n contentRef: _propTypes2.default.func\n};\nModal.defaultProps = {\n isOpen: false,\n portalClassName: portalClassName,\n bodyOpenClassName: bodyOpenClassName,\n role: \"dialog\",\n ariaHideApp: true,\n closeTimeoutMS: 0,\n shouldFocusAfterRender: true,\n shouldCloseOnEsc: true,\n shouldCloseOnOverlayClick: true,\n shouldReturnFocusAfterClose: true,\n parentSelector: function parentSelector() {\n return document.body;\n }\n};\nModal.defaultStyles = {\n overlay: {\n position: \"fixed\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: \"rgba(255, 255, 255, 0.75)\"\n },\n content: {\n position: \"absolute\",\n top: \"40px\",\n left: \"40px\",\n right: \"40px\",\n bottom: \"40px\",\n border: \"1px solid #ccc\",\n background: \"#fff\",\n overflow: \"auto\",\n WebkitOverflowScrolling: \"touch\",\n borderRadius: \"4px\",\n outline: \"none\",\n padding: \"20px\"\n }\n};\n\n\n(0, _reactLifecyclesCompat.polyfill)(Modal);\n\nexports.default = Modal;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require(\"prop-types\");\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _focusManager = require(\"../helpers/focusManager\");\n\nvar focusManager = _interopRequireWildcard(_focusManager);\n\nvar _scopeTab = require(\"../helpers/scopeTab\");\n\nvar _scopeTab2 = _interopRequireDefault(_scopeTab);\n\nvar _ariaAppHider = require(\"../helpers/ariaAppHider\");\n\nvar ariaAppHider = _interopRequireWildcard(_ariaAppHider);\n\nvar _classList = require(\"../helpers/classList\");\n\nvar classList = _interopRequireWildcard(_classList);\n\nvar _safeHTMLElement = require(\"../helpers/safeHTMLElement\");\n\nvar _safeHTMLElement2 = _interopRequireDefault(_safeHTMLElement);\n\nvar _portalOpenInstances = require(\"../helpers/portalOpenInstances\");\n\nvar _portalOpenInstances2 = _interopRequireDefault(_portalOpenInstances);\n\nrequire(\"../helpers/bodyTrap\");\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n// so that our CSS is statically analyzable\nvar CLASS_NAMES = {\n overlay: \"ReactModal__Overlay\",\n content: \"ReactModal__Content\"\n};\n\nvar TAB_KEY = 9;\nvar ESC_KEY = 27;\n\nvar ariaHiddenInstances = 0;\n\nvar ModalPortal = function (_Component) {\n _inherits(ModalPortal, _Component);\n\n function ModalPortal(props) {\n _classCallCheck(this, ModalPortal);\n\n var _this = _possibleConstructorReturn(this, (ModalPortal.__proto__ || Object.getPrototypeOf(ModalPortal)).call(this, props));\n\n _this.setOverlayRef = function (overlay) {\n _this.overlay = overlay;\n _this.props.overlayRef && _this.props.overlayRef(overlay);\n };\n\n _this.setContentRef = function (content) {\n _this.content = content;\n _this.props.contentRef && _this.props.contentRef(content);\n };\n\n _this.afterClose = function () {\n var _this$props = _this.props,\n appElement = _this$props.appElement,\n ariaHideApp = _this$props.ariaHideApp,\n htmlOpenClassName = _this$props.htmlOpenClassName,\n bodyOpenClassName = _this$props.bodyOpenClassName;\n\n // Remove classes.\n\n bodyOpenClassName && classList.remove(document.body, bodyOpenClassName);\n\n htmlOpenClassName && classList.remove(document.getElementsByTagName(\"html\")[0], htmlOpenClassName);\n\n // Reset aria-hidden attribute if all modals have been removed\n if (ariaHideApp && ariaHiddenInstances > 0) {\n ariaHiddenInstances -= 1;\n\n if (ariaHiddenInstances === 0) {\n ariaAppHider.show(appElement);\n }\n }\n\n if (_this.props.shouldFocusAfterRender) {\n if (_this.props.shouldReturnFocusAfterClose) {\n focusManager.returnFocus();\n focusManager.teardownScopedFocus();\n } else {\n focusManager.popWithoutFocus();\n }\n }\n\n if (_this.props.onAfterClose) {\n _this.props.onAfterClose();\n }\n\n _portalOpenInstances2.default.deregister(_this);\n };\n\n _this.open = function () {\n _this.beforeOpen();\n if (_this.state.afterOpen && _this.state.beforeClose) {\n clearTimeout(_this.closeTimer);\n _this.setState({ beforeClose: false });\n } else {\n if (_this.props.shouldFocusAfterRender) {\n focusManager.setupScopedFocus(_this.node);\n focusManager.markForFocusLater();\n }\n\n _this.setState({ isOpen: true }, function () {\n _this.setState({ afterOpen: true });\n\n if (_this.props.isOpen && _this.props.onAfterOpen) {\n _this.props.onAfterOpen({\n overlayEl: _this.overlay,\n contentEl: _this.content\n });\n }\n });\n }\n };\n\n _this.close = function () {\n if (_this.props.closeTimeoutMS > 0) {\n _this.closeWithTimeout();\n } else {\n _this.closeWithoutTimeout();\n }\n };\n\n _this.focusContent = function () {\n return _this.content && !_this.contentHasFocus() && _this.content.focus();\n };\n\n _this.closeWithTimeout = function () {\n var closesAt = Date.now() + _this.props.closeTimeoutMS;\n _this.setState({ beforeClose: true, closesAt: closesAt }, function () {\n _this.closeTimer = setTimeout(_this.closeWithoutTimeout, _this.state.closesAt - Date.now());\n });\n };\n\n _this.closeWithoutTimeout = function () {\n _this.setState({\n beforeClose: false,\n isOpen: false,\n afterOpen: false,\n closesAt: null\n }, _this.afterClose);\n };\n\n _this.handleKeyDown = function (event) {\n if (event.keyCode === TAB_KEY) {\n (0, _scopeTab2.default)(_this.content, event);\n }\n\n if (_this.props.shouldCloseOnEsc && event.keyCode === ESC_KEY) {\n event.stopPropagation();\n _this.requestClose(event);\n }\n };\n\n _this.handleOverlayOnClick = function (event) {\n if (_this.shouldClose === null) {\n _this.shouldClose = true;\n }\n\n if (_this.shouldClose && _this.props.shouldCloseOnOverlayClick) {\n if (_this.ownerHandlesClose()) {\n _this.requestClose(event);\n } else {\n _this.focusContent();\n }\n }\n _this.shouldClose = null;\n };\n\n _this.handleContentOnMouseUp = function () {\n _this.shouldClose = false;\n };\n\n _this.handleOverlayOnMouseDown = function (event) {\n if (!_this.props.shouldCloseOnOverlayClick && event.target == _this.overlay) {\n event.preventDefault();\n }\n };\n\n _this.handleContentOnClick = function () {\n _this.shouldClose = false;\n };\n\n _this.handleContentOnMouseDown = function () {\n _this.shouldClose = false;\n };\n\n _this.requestClose = function (event) {\n return _this.ownerHandlesClose() && _this.props.onRequestClose(event);\n };\n\n _this.ownerHandlesClose = function () {\n return _this.props.onRequestClose;\n };\n\n _this.shouldBeClosed = function () {\n return !_this.state.isOpen && !_this.state.beforeClose;\n };\n\n _this.contentHasFocus = function () {\n return document.activeElement === _this.content || _this.content.contains(document.activeElement);\n };\n\n _this.buildClassName = function (which, additional) {\n var classNames = (typeof additional === \"undefined\" ? \"undefined\" : _typeof(additional)) === \"object\" ? additional : {\n base: CLASS_NAMES[which],\n afterOpen: CLASS_NAMES[which] + \"--after-open\",\n beforeClose: CLASS_NAMES[which] + \"--before-close\"\n };\n var className = classNames.base;\n if (_this.state.afterOpen) {\n className = className + \" \" + classNames.afterOpen;\n }\n if (_this.state.beforeClose) {\n className = className + \" \" + classNames.beforeClose;\n }\n return typeof additional === \"string\" && additional ? className + \" \" + additional : className;\n };\n\n _this.attributesFromObject = function (prefix, items) {\n return Object.keys(items).reduce(function (acc, name) {\n acc[prefix + \"-\" + name] = items[name];\n return acc;\n }, {});\n };\n\n _this.state = {\n afterOpen: false,\n beforeClose: false\n };\n\n _this.shouldClose = null;\n _this.moveFromContentToOverlay = null;\n return _this;\n }\n\n _createClass(ModalPortal, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n if (this.props.isOpen) {\n this.open();\n }\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps, prevState) {\n if (process.env.NODE_ENV !== \"production\") {\n if (prevProps.bodyOpenClassName !== this.props.bodyOpenClassName) {\n // eslint-disable-next-line no-console\n console.warn('React-Modal: \"bodyOpenClassName\" prop has been modified. ' + \"This may cause unexpected behavior when multiple modals are open.\");\n }\n if (prevProps.htmlOpenClassName !== this.props.htmlOpenClassName) {\n // eslint-disable-next-line no-console\n console.warn('React-Modal: \"htmlOpenClassName\" prop has been modified. ' + \"This may cause unexpected behavior when multiple modals are open.\");\n }\n }\n\n if (this.props.isOpen && !prevProps.isOpen) {\n this.open();\n } else if (!this.props.isOpen && prevProps.isOpen) {\n this.close();\n }\n\n // Focus only needs to be set once when the modal is being opened\n if (this.props.shouldFocusAfterRender && this.state.isOpen && !prevState.isOpen) {\n this.focusContent();\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n if (this.state.isOpen) {\n this.afterClose();\n }\n clearTimeout(this.closeTimer);\n }\n }, {\n key: \"beforeOpen\",\n value: function beforeOpen() {\n var _props = this.props,\n appElement = _props.appElement,\n ariaHideApp = _props.ariaHideApp,\n htmlOpenClassName = _props.htmlOpenClassName,\n bodyOpenClassName = _props.bodyOpenClassName;\n\n // Add classes.\n\n bodyOpenClassName && classList.add(document.body, bodyOpenClassName);\n\n htmlOpenClassName && classList.add(document.getElementsByTagName(\"html\")[0], htmlOpenClassName);\n\n if (ariaHideApp) {\n ariaHiddenInstances += 1;\n ariaAppHider.hide(appElement);\n }\n\n _portalOpenInstances2.default.register(this);\n }\n\n // Don't steal focus from inner elements\n\n }, {\n key: \"render\",\n value: function render() {\n var _props2 = this.props,\n id = _props2.id,\n className = _props2.className,\n overlayClassName = _props2.overlayClassName,\n defaultStyles = _props2.defaultStyles;\n\n var contentStyles = className ? {} : defaultStyles.content;\n var overlayStyles = overlayClassName ? {} : defaultStyles.overlay;\n\n return this.shouldBeClosed() ? null : _react2.default.createElement(\n \"div\",\n {\n ref: this.setOverlayRef,\n className: this.buildClassName(\"overlay\", overlayClassName),\n style: _extends({}, overlayStyles, this.props.style.overlay),\n onClick: this.handleOverlayOnClick,\n onMouseDown: this.handleOverlayOnMouseDown\n },\n _react2.default.createElement(\n \"div\",\n _extends({\n id: id,\n ref: this.setContentRef,\n style: _extends({}, contentStyles, this.props.style.content),\n className: this.buildClassName(\"content\", className),\n tabIndex: \"-1\",\n onKeyDown: this.handleKeyDown,\n onMouseDown: this.handleContentOnMouseDown,\n onMouseUp: this.handleContentOnMouseUp,\n onClick: this.handleContentOnClick,\n role: this.props.role,\n \"aria-label\": this.props.contentLabel\n }, this.attributesFromObject(\"aria\", this.props.aria || {}), this.attributesFromObject(\"data\", this.props.data || {}), {\n \"data-testid\": this.props.testId\n }),\n this.props.children\n )\n );\n }\n }]);\n\n return ModalPortal;\n}(_react.Component);\n\nModalPortal.defaultProps = {\n style: {\n overlay: {},\n content: {}\n },\n defaultStyles: {}\n};\nModalPortal.propTypes = {\n isOpen: _propTypes2.default.bool.isRequired,\n defaultStyles: _propTypes2.default.shape({\n content: _propTypes2.default.object,\n overlay: _propTypes2.default.object\n }),\n style: _propTypes2.default.shape({\n content: _propTypes2.default.object,\n overlay: _propTypes2.default.object\n }),\n className: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.object]),\n overlayClassName: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.object]),\n bodyOpenClassName: _propTypes2.default.string,\n htmlOpenClassName: _propTypes2.default.string,\n ariaHideApp: _propTypes2.default.bool,\n appElement: _propTypes2.default.instanceOf(_safeHTMLElement2.default),\n onAfterOpen: _propTypes2.default.func,\n onAfterClose: _propTypes2.default.func,\n onRequestClose: _propTypes2.default.func,\n closeTimeoutMS: _propTypes2.default.number,\n shouldFocusAfterRender: _propTypes2.default.bool,\n shouldCloseOnOverlayClick: _propTypes2.default.bool,\n shouldReturnFocusAfterClose: _propTypes2.default.bool,\n role: _propTypes2.default.string,\n contentLabel: _propTypes2.default.string,\n aria: _propTypes2.default.object,\n data: _propTypes2.default.object,\n children: _propTypes2.default.node,\n shouldCloseOnEsc: _propTypes2.default.bool,\n overlayRef: _propTypes2.default.func,\n contentRef: _propTypes2.default.func,\n id: _propTypes2.default.string,\n testId: _propTypes2.default.string\n};\nexports.default = ModalPortal;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.assertNodeList = assertNodeList;\nexports.setElement = setElement;\nexports.validateElement = validateElement;\nexports.hide = hide;\nexports.show = show;\nexports.documentNotReadyOrSSRTesting = documentNotReadyOrSSRTesting;\nexports.resetForTesting = resetForTesting;\n\nvar _warning = require(\"warning\");\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _safeHTMLElement = require(\"./safeHTMLElement\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar globalElement = null;\n\nfunction assertNodeList(nodeList, selector) {\n if (!nodeList || !nodeList.length) {\n throw new Error(\"react-modal: No elements were found for selector \" + selector + \".\");\n }\n}\n\nfunction setElement(element) {\n var useElement = element;\n if (typeof useElement === \"string\" && _safeHTMLElement.canUseDOM) {\n var el = document.querySelectorAll(useElement);\n assertNodeList(el, useElement);\n useElement = \"length\" in el ? el[0] : el;\n }\n globalElement = useElement || globalElement;\n return globalElement;\n}\n\nfunction validateElement(appElement) {\n if (!appElement && !globalElement) {\n (0, _warning2.default)(false, [\"react-modal: App element is not defined.\", \"Please use `Modal.setAppElement(el)` or set `appElement={el}`.\", \"This is needed so screen readers don't see main content\", \"when modal is opened. It is not recommended, but you can opt-out\", \"by setting `ariaHideApp={false}`.\"].join(\" \"));\n\n return false;\n }\n\n return true;\n}\n\nfunction hide(appElement) {\n if (validateElement(appElement)) {\n (appElement || globalElement).setAttribute(\"aria-hidden\", \"true\");\n }\n}\n\nfunction show(appElement) {\n if (validateElement(appElement)) {\n (appElement || globalElement).removeAttribute(\"aria-hidden\");\n }\n}\n\nfunction documentNotReadyOrSSRTesting() {\n globalElement = null;\n}\n\nfunction resetForTesting() {\n globalElement = null;\n}","\"use strict\";\n\nvar _portalOpenInstances = require(\"./portalOpenInstances\");\n\nvar _portalOpenInstances2 = _interopRequireDefault(_portalOpenInstances);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// Body focus trap see Issue #742\n\nvar before = void 0,\n after = void 0,\n instances = [];\n\nfunction focusContent() {\n if (instances.length === 0) {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\"React-Modal: Open instances > 0 expected\");\n }\n return;\n }\n instances[instances.length - 1].focusContent();\n}\n\nfunction bodyTrap(eventType, openInstances) {\n if (!before || !after) {\n before = document.createElement(\"div\");\n before.setAttribute(\"data-react-modal-body-trap\", \"\");\n before.style.position = \"absolute\";\n before.style.opacity = \"0\";\n before.setAttribute(\"tabindex\", \"0\");\n before.addEventListener(\"focus\", focusContent);\n after = before.cloneNode();\n after.addEventListener(\"focus\", focusContent);\n }\n\n instances = openInstances;\n\n if (instances.length > 0) {\n // Add focus trap\n if (document.body.firstChild !== before) {\n document.body.insertBefore(before, document.body.firstChild);\n }\n if (document.body.lastChild !== after) {\n document.body.appendChild(after);\n }\n } else {\n // Remove focus trap\n if (before.parentElement) {\n before.parentElement.removeChild(before);\n }\n if (after.parentElement) {\n after.parentElement.removeChild(after);\n }\n }\n}\n\n_portalOpenInstances2.default.subscribe(bodyTrap);","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.dumpClassLists = dumpClassLists;\nvar htmlClassList = {};\nvar docBodyClassList = {};\n\nfunction dumpClassLists() {\n if (process.env.NODE_ENV !== \"production\") {\n var classes = document.getElementsByTagName(\"html\")[0].className;\n var buffer = \"Show tracked classes:\\n\\n\";\n\n buffer += \" (\" + classes + \"):\\n\";\n for (var x in htmlClassList) {\n buffer += \" \" + x + \" \" + htmlClassList[x] + \"\\n\";\n }\n\n classes = document.body.className;\n\n // eslint-disable-next-line max-len\n buffer += \"\\n\\ndoc.body (\" + classes + \"):\\n\";\n for (var _x in docBodyClassList) {\n buffer += \" \" + _x + \" \" + docBodyClassList[_x] + \"\\n\";\n }\n\n buffer += \"\\n\";\n\n // eslint-disable-next-line no-console\n console.log(buffer);\n }\n}\n\n/**\n * Track the number of reference of a class.\n * @param {object} poll The poll to receive the reference.\n * @param {string} className The class name.\n * @return {string}\n */\nvar incrementReference = function incrementReference(poll, className) {\n if (!poll[className]) {\n poll[className] = 0;\n }\n poll[className] += 1;\n return className;\n};\n\n/**\n * Drop the reference of a class.\n * @param {object} poll The poll to receive the reference.\n * @param {string} className The class name.\n * @return {string}\n */\nvar decrementReference = function decrementReference(poll, className) {\n if (poll[className]) {\n poll[className] -= 1;\n }\n return className;\n};\n\n/**\n * Track a class and add to the given class list.\n * @param {Object} classListRef A class list of an element.\n * @param {Object} poll The poll to be used.\n * @param {Array} classes The list of classes to be tracked.\n */\nvar trackClass = function trackClass(classListRef, poll, classes) {\n classes.forEach(function (className) {\n incrementReference(poll, className);\n classListRef.add(className);\n });\n};\n\n/**\n * Untrack a class and remove from the given class list if the reference\n * reaches 0.\n * @param {Object} classListRef A class list of an element.\n * @param {Object} poll The poll to be used.\n * @param {Array} classes The list of classes to be untracked.\n */\nvar untrackClass = function untrackClass(classListRef, poll, classes) {\n classes.forEach(function (className) {\n decrementReference(poll, className);\n poll[className] === 0 && classListRef.remove(className);\n });\n};\n\n/**\n * Public inferface to add classes to the document.body.\n * @param {string} bodyClass The class string to be added.\n * It may contain more then one class\n * with ' ' as separator.\n */\nvar add = exports.add = function add(element, classString) {\n return trackClass(element.classList, element.nodeName.toLowerCase() == \"html\" ? htmlClassList : docBodyClassList, classString.split(\" \"));\n};\n\n/**\n * Public inferface to remove classes from the document.body.\n * @param {string} bodyClass The class string to be added.\n * It may contain more then one class\n * with ' ' as separator.\n */\nvar remove = exports.remove = function remove(element, classString) {\n return untrackClass(element.classList, element.nodeName.toLowerCase() == \"html\" ? htmlClassList : docBodyClassList, classString.split(\" \"));\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.handleBlur = handleBlur;\nexports.handleFocus = handleFocus;\nexports.markForFocusLater = markForFocusLater;\nexports.returnFocus = returnFocus;\nexports.popWithoutFocus = popWithoutFocus;\nexports.setupScopedFocus = setupScopedFocus;\nexports.teardownScopedFocus = teardownScopedFocus;\n\nvar _tabbable = require(\"../helpers/tabbable\");\n\nvar _tabbable2 = _interopRequireDefault(_tabbable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar focusLaterElements = [];\nvar modalElement = null;\nvar needToFocus = false;\n\nfunction handleBlur() {\n needToFocus = true;\n}\n\nfunction handleFocus() {\n if (needToFocus) {\n needToFocus = false;\n if (!modalElement) {\n return;\n }\n // need to see how jQuery shims document.on('focusin') so we don't need the\n // setTimeout, firefox doesn't support focusin, if it did, we could focus\n // the element outside of a setTimeout. Side-effect of this implementation\n // is that the document.body gets focus, and then we focus our element right\n // after, seems fine.\n setTimeout(function () {\n if (modalElement.contains(document.activeElement)) {\n return;\n }\n var el = (0, _tabbable2.default)(modalElement)[0] || modalElement;\n el.focus();\n }, 0);\n }\n}\n\nfunction markForFocusLater() {\n focusLaterElements.push(document.activeElement);\n}\n\n/* eslint-disable no-console */\nfunction returnFocus() {\n var toFocus = null;\n try {\n if (focusLaterElements.length !== 0) {\n toFocus = focusLaterElements.pop();\n toFocus.focus();\n }\n return;\n } catch (e) {\n console.warn([\"You tried to return focus to\", toFocus, \"but it is not in the DOM anymore\"].join(\" \"));\n }\n}\n/* eslint-enable no-console */\n\nfunction popWithoutFocus() {\n focusLaterElements.length > 0 && focusLaterElements.pop();\n}\n\nfunction setupScopedFocus(element) {\n modalElement = element;\n\n if (window.addEventListener) {\n window.addEventListener(\"blur\", handleBlur, false);\n document.addEventListener(\"focus\", handleFocus, true);\n } else {\n window.attachEvent(\"onBlur\", handleBlur);\n document.attachEvent(\"onFocus\", handleFocus);\n }\n}\n\nfunction teardownScopedFocus() {\n modalElement = null;\n\n if (window.addEventListener) {\n window.removeEventListener(\"blur\", handleBlur);\n document.removeEventListener(\"focus\", handleFocus);\n } else {\n window.detachEvent(\"onBlur\", handleBlur);\n document.detachEvent(\"onFocus\", handleFocus);\n }\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n// Tracks portals that are open and emits events to subscribers\n\nvar PortalOpenInstances = function PortalOpenInstances() {\n var _this = this;\n\n _classCallCheck(this, PortalOpenInstances);\n\n this.register = function (openInstance) {\n if (_this.openInstances.indexOf(openInstance) !== -1) {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\"React-Modal: Cannot register modal instance that's already open\");\n }\n return;\n }\n _this.openInstances.push(openInstance);\n _this.emit(\"register\");\n };\n\n this.deregister = function (openInstance) {\n var index = _this.openInstances.indexOf(openInstance);\n if (index === -1) {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\"React-Modal: Unable to deregister \" + openInstance + \" as \" + \"it was never registered\");\n }\n return;\n }\n _this.openInstances.splice(index, 1);\n _this.emit(\"deregister\");\n };\n\n this.subscribe = function (callback) {\n _this.subscribers.push(callback);\n };\n\n this.emit = function (eventType) {\n _this.subscribers.forEach(function (subscriber) {\n return subscriber(eventType,\n // shallow copy to avoid accidental mutation\n _this.openInstances.slice());\n });\n };\n\n this.openInstances = [];\n this.subscribers = [];\n};\n\nvar portalOpenInstances = new PortalOpenInstances();\n\nexports.default = portalOpenInstances;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.canUseDOM = undefined;\n\nvar _exenv = require(\"exenv\");\n\nvar _exenv2 = _interopRequireDefault(_exenv);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar EE = _exenv2.default;\n\nvar SafeHTMLElement = EE.canUseDOM ? window.HTMLElement : {};\n\nvar canUseDOM = exports.canUseDOM = EE.canUseDOM;\n\nexports.default = SafeHTMLElement;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = scopeTab;\n\nvar _tabbable = require(\"./tabbable\");\n\nvar _tabbable2 = _interopRequireDefault(_tabbable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction scopeTab(node, event) {\n var tabbable = (0, _tabbable2.default)(node);\n\n if (!tabbable.length) {\n // Do nothing, since there are no elements that can receive focus.\n event.preventDefault();\n return;\n }\n\n var target = void 0;\n\n var shiftKey = event.shiftKey;\n var head = tabbable[0];\n var tail = tabbable[tabbable.length - 1];\n\n // proceed with default browser behavior on tab.\n // Focus on last element on shift + tab.\n if (node === document.activeElement) {\n if (!shiftKey) return;\n target = tail;\n }\n\n if (tail === document.activeElement && !shiftKey) {\n target = head;\n }\n\n if (head === document.activeElement && shiftKey) {\n target = tail;\n }\n\n if (target) {\n event.preventDefault();\n target.focus();\n return;\n }\n\n // Safari radio issue.\n //\n // Safari does not move the focus to the radio button,\n // so we need to force it to really walk through all elements.\n //\n // This is very error prone, since we are trying to guess\n // if it is a safari browser from the first occurence between\n // chrome or safari.\n //\n // The chrome user agent contains the first ocurrence\n // as the 'chrome/version' and later the 'safari/version'.\n var checkSafari = /(\\bChrome\\b|\\bSafari\\b)\\//.exec(navigator.userAgent);\n var isSafariDesktop = checkSafari != null && checkSafari[1] != \"Chrome\" && /\\biPod\\b|\\biPad\\b/g.exec(navigator.userAgent) == null;\n\n // If we are not in safari desktop, let the browser control\n // the focus\n if (!isSafariDesktop) return;\n\n var x = tabbable.indexOf(document.activeElement);\n\n if (x > -1) {\n x += shiftKey ? -1 : 1;\n }\n\n target = tabbable[x];\n\n // If the tabbable element does not exist,\n // focus head/tail based on shiftKey\n if (typeof target === \"undefined\") {\n event.preventDefault();\n target = shiftKey ? tail : head;\n target.focus();\n return;\n }\n\n event.preventDefault();\n\n target.focus();\n}\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = findTabbableDescendants;\n/*!\n * Adapted from jQuery UI core\n *\n * http://jqueryui.com\n *\n * Copyright 2014 jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/category/ui-core/\n */\n\nvar tabbableNode = /input|select|textarea|button|object/;\n\nfunction hidesContents(element) {\n var zeroSize = element.offsetWidth <= 0 && element.offsetHeight <= 0;\n\n // If the node is empty, this is good enough\n if (zeroSize && !element.innerHTML) return true;\n\n // Otherwise we need to check some styles\n var style = window.getComputedStyle(element);\n return zeroSize ? style.getPropertyValue(\"overflow\") !== \"visible\" ||\n // if 'overflow: visible' set, check if there is actually any overflow\n element.scrollWidth <= 0 && element.scrollHeight <= 0 : style.getPropertyValue(\"display\") == \"none\";\n}\n\nfunction visible(element) {\n var parentElement = element;\n while (parentElement) {\n if (parentElement === document.body) break;\n if (hidesContents(parentElement)) return false;\n parentElement = parentElement.parentNode;\n }\n return true;\n}\n\nfunction focusable(element, isTabIndexNotNaN) {\n var nodeName = element.nodeName.toLowerCase();\n var res = tabbableNode.test(nodeName) && !element.disabled || (nodeName === \"a\" ? element.href || isTabIndexNotNaN : isTabIndexNotNaN);\n return res && visible(element);\n}\n\nfunction tabbable(element) {\n var tabIndex = element.getAttribute(\"tabindex\");\n if (tabIndex === null) tabIndex = undefined;\n var isTabIndexNaN = isNaN(tabIndex);\n return (isTabIndexNaN || tabIndex >= 0) && focusable(element, !isTabIndexNaN);\n}\n\nfunction findTabbableDescendants(element) {\n return [].slice.call(element.querySelectorAll(\"*\"), 0).filter(tabbable);\n}\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _Modal = require(\"./components/Modal\");\n\nvar _Modal2 = _interopRequireDefault(_Modal);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Modal2.default;\nmodule.exports = exports[\"default\"];","var messages = {\n invalidPredicate: '`predicate` must be a function',\n invalidPropValidator: '`propValidator` must be a function',\n requiredCore: 'is marked as required',\n invalidTypeCore: 'Invalid input type',\n predicateFailureCore: 'Failed to succeed with predicate',\n anonymousMessage: '<>',\n baseInvalidMessage: 'Invalid ',\n};\n\nfunction constructPropValidatorVariations(propValidator) {\n if (typeof propValidator !== 'function') {\n throw new Error(messages.invalidPropValidator);\n }\n\n var requiredPropValidator = propValidator.bind(null, false, null);\n requiredPropValidator.isRequired = propValidator.bind(null, true, null);\n\n requiredPropValidator.withPredicate = function predicateApplication(predicate) {\n if (typeof predicate !== 'function') {\n throw new Error(messages.invalidPredicate);\n }\n var basePropValidator = propValidator.bind(null, false, predicate);\n basePropValidator.isRequired = propValidator.bind(null, true, predicate);\n return basePropValidator;\n };\n\n return requiredPropValidator;\n}\n\nfunction createInvalidRequiredErrorMessage(propName, componentName, value) {\n return new Error(\n 'The prop `' + propName + '` ' + messages.requiredCore +\n ' in `' + componentName + '`, but its value is `' + value + '`.'\n );\n}\n\nvar independentGuardianValue = -1;\n\nfunction preValidationRequireCheck(isRequired, componentName, propFullName, propValue) {\n var isPropValueUndefined = typeof propValue === 'undefined';\n var isPropValueNull = propValue === null;\n\n if (isRequired) {\n if (isPropValueUndefined) {\n return createInvalidRequiredErrorMessage(propFullName, componentName, 'undefined');\n } else if (isPropValueNull) {\n return createInvalidRequiredErrorMessage(propFullName, componentName, 'null');\n }\n }\n\n if (isPropValueUndefined || isPropValueNull) {\n return null;\n }\n\n return independentGuardianValue;\n}\n\nfunction createMomentChecker(type, typeValidator, validator, momentType) {\n\n function propValidator(\n isRequired, // Bound parameter to indicate with the propType is required\n predicate, // Bound parameter to allow user to add dynamic validation\n props,\n propName,\n componentName,\n location,\n propFullName\n ) {\n var propValue = props[ propName ];\n var propType = typeof propValue;\n\n componentName = componentName || messages.anonymousMessage;\n propFullName = propFullName || propName;\n\n var preValidationRequireCheckValue = preValidationRequireCheck(\n isRequired, componentName, propFullName, propValue\n );\n\n if (preValidationRequireCheckValue !== independentGuardianValue) {\n return preValidationRequireCheckValue;\n }\n\n if (typeValidator && !typeValidator(propValue)) {\n return new Error(\n messages.invalidTypeCore + ': `' + propName + '` of type `' + propType + '` ' +\n 'supplied to `' + componentName + '`, expected `' + type + '`.'\n );\n }\n\n if (!validator(propValue)) {\n return new Error(\n messages.baseInvalidMessage + location + ' `' + propName + '` of type `' + propType + '` ' +\n 'supplied to `' + componentName + '`, expected `' + momentType + '`.'\n );\n }\n\n if (predicate && !predicate(propValue)) {\n var predicateName = predicate.name || messages.anonymousMessage;\n return new Error(\n messages.baseInvalidMessage + location + ' `' + propName + '` of type `' + propType + '` ' +\n 'supplied to `' + componentName + '`. ' + messages.predicateFailureCore + ' `' +\n predicateName + '`.'\n );\n }\n\n return null;\n\n }\n\n return constructPropValidatorVariations(propValidator);\n\n}\n\nmodule.exports = {\n constructPropValidatorVariations: constructPropValidatorVariations,\n createMomentChecker: createMomentChecker,\n messages: messages,\n};\n","var moment = require('moment');\nvar momentValidationWrapper = require('./moment-validation-wrapper');\nvar core = require('./core');\n\nmodule.exports = {\n\n momentObj : core.createMomentChecker(\n 'object',\n function(obj) {\n return typeof obj === 'object';\n },\n function isValid(value) {\n return momentValidationWrapper.isValidMoment(value);\n },\n 'Moment'\n ),\n\n momentString : core.createMomentChecker(\n 'string',\n function(str) {\n return typeof str === 'string';\n },\n function isValid(value) {\n return momentValidationWrapper.isValidMoment(moment(value));\n },\n 'Moment'\n ),\n\n momentDurationObj : core.createMomentChecker(\n 'object',\n function(obj) {\n return typeof obj === 'object';\n },\n function isValid(value) {\n return moment.isDuration(value);\n },\n 'Duration'\n ),\n\n};\n","var moment = require('moment');\n\nfunction isValidMoment(testMoment) {\n if (typeof moment.isMoment === 'function' && !moment.isMoment(testMoment)) {\n return false;\n }\n\n /* istanbul ignore else */\n if (typeof testMoment.isValid === 'function') {\n // moment 1.7.0+\n return testMoment.isValid();\n }\n\n /* istanbul ignore next */\n return !isNaN(testMoment);\n}\n\nmodule.exports = {\n isValidMoment : isValidMoment,\n};\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _airbnbPropTypes = require('airbnb-prop-types');\n\nvar _consolidatedEvents = require('consolidated-events');\n\nvar _object = require('object.values');\n\nvar _object2 = _interopRequireDefault(_object);\n\nvar _document = require('document.contains');\n\nvar _document2 = _interopRequireDefault(_document);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar DISPLAY = {\n BLOCK: 'block',\n FLEX: 'flex',\n INLINE: 'inline',\n INLINE_BLOCK: 'inline-block',\n CONTENTS: 'contents'\n};\n\nvar propTypes = (0, _airbnbPropTypes.forbidExtraProps)({\n children: _propTypes2['default'].node.isRequired,\n onOutsideClick: _propTypes2['default'].func.isRequired,\n disabled: _propTypes2['default'].bool,\n useCapture: _propTypes2['default'].bool,\n display: _propTypes2['default'].oneOf((0, _object2['default'])(DISPLAY))\n});\n\nvar defaultProps = {\n disabled: false,\n\n // `useCapture` is set to true by default so that a `stopPropagation` in the\n // children will not prevent all outside click handlers from firing - maja\n useCapture: true,\n display: DISPLAY.BLOCK\n};\n\nvar OutsideClickHandler = function (_React$Component) {\n _inherits(OutsideClickHandler, _React$Component);\n\n function OutsideClickHandler() {\n var _ref;\n\n _classCallCheck(this, OutsideClickHandler);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var _this = _possibleConstructorReturn(this, (_ref = OutsideClickHandler.__proto__ || Object.getPrototypeOf(OutsideClickHandler)).call.apply(_ref, [this].concat(args)));\n\n _this.onMouseDown = _this.onMouseDown.bind(_this);\n _this.onMouseUp = _this.onMouseUp.bind(_this);\n _this.setChildNodeRef = _this.setChildNodeRef.bind(_this);\n return _this;\n }\n\n _createClass(OutsideClickHandler, [{\n key: 'componentDidMount',\n value: function () {\n function componentDidMount() {\n var _props = this.props,\n disabled = _props.disabled,\n useCapture = _props.useCapture;\n\n\n if (!disabled) this.addMouseDownEventListener(useCapture);\n }\n\n return componentDidMount;\n }()\n }, {\n key: 'componentDidUpdate',\n value: function () {\n function componentDidUpdate(_ref2) {\n var prevDisabled = _ref2.disabled;\n var _props2 = this.props,\n disabled = _props2.disabled,\n useCapture = _props2.useCapture;\n\n if (prevDisabled !== disabled) {\n if (disabled) {\n this.removeEventListeners();\n } else {\n this.addMouseDownEventListener(useCapture);\n }\n }\n }\n\n return componentDidUpdate;\n }()\n }, {\n key: 'componentWillUnmount',\n value: function () {\n function componentWillUnmount() {\n this.removeEventListeners();\n }\n\n return componentWillUnmount;\n }()\n\n // Use mousedown/mouseup to enforce that clicks remain outside the root's\n // descendant tree, even when dragged. This should also get triggered on\n // touch devices.\n\n }, {\n key: 'onMouseDown',\n value: function () {\n function onMouseDown(e) {\n var useCapture = this.props.useCapture;\n\n\n var isDescendantOfRoot = this.childNode && (0, _document2['default'])(this.childNode, e.target);\n if (!isDescendantOfRoot) {\n if (this.removeMouseUp) {\n this.removeMouseUp();\n this.removeMouseUp = null;\n }\n this.removeMouseUp = (0, _consolidatedEvents.addEventListener)(document, 'mouseup', this.onMouseUp, { capture: useCapture });\n }\n }\n\n return onMouseDown;\n }()\n\n // Use mousedown/mouseup to enforce that clicks remain outside the root's\n // descendant tree, even when dragged. This should also get triggered on\n // touch devices.\n\n }, {\n key: 'onMouseUp',\n value: function () {\n function onMouseUp(e) {\n var onOutsideClick = this.props.onOutsideClick;\n\n\n var isDescendantOfRoot = this.childNode && (0, _document2['default'])(this.childNode, e.target);\n if (this.removeMouseUp) {\n this.removeMouseUp();\n this.removeMouseUp = null;\n }\n\n if (!isDescendantOfRoot) {\n onOutsideClick(e);\n }\n }\n\n return onMouseUp;\n }()\n }, {\n key: 'setChildNodeRef',\n value: function () {\n function setChildNodeRef(ref) {\n this.childNode = ref;\n }\n\n return setChildNodeRef;\n }()\n }, {\n key: 'addMouseDownEventListener',\n value: function () {\n function addMouseDownEventListener(useCapture) {\n this.removeMouseDown = (0, _consolidatedEvents.addEventListener)(document, 'mousedown', this.onMouseDown, { capture: useCapture });\n }\n\n return addMouseDownEventListener;\n }()\n }, {\n key: 'removeEventListeners',\n value: function () {\n function removeEventListeners() {\n if (this.removeMouseDown) this.removeMouseDown();\n if (this.removeMouseUp) this.removeMouseUp();\n }\n\n return removeEventListeners;\n }()\n }, {\n key: 'render',\n value: function () {\n function render() {\n var _props3 = this.props,\n children = _props3.children,\n display = _props3.display;\n\n\n return _react2['default'].createElement(\n 'div',\n {\n ref: this.setChildNodeRef,\n style: display !== DISPLAY.BLOCK && (0, _object2['default'])(DISPLAY).includes(display) ? { display: display } : undefined\n },\n children\n );\n }\n\n return render;\n }()\n }]);\n\n return OutsideClickHandler;\n}(_react2['default'].Component);\n\nexports['default'] = OutsideClickHandler;\n\n\nOutsideClickHandler.propTypes = propTypes;\nOutsideClickHandler.defaultProps = defaultProps;","// eslint-disable-next-line import/no-unresolved\nmodule.exports = require('./build/OutsideClickHandler');\n","export var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport ReactDOM from 'react-dom';\nimport { canUseDOM } from './utils';\n\nvar Portal = function (_React$Component) {\n _inherits(Portal, _React$Component);\n\n function Portal() {\n _classCallCheck(this, Portal);\n\n return _possibleConstructorReturn(this, (Portal.__proto__ || Object.getPrototypeOf(Portal)).apply(this, arguments));\n }\n\n _createClass(Portal, [{\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n if (this.defaultNode) {\n document.body.removeChild(this.defaultNode);\n }\n this.defaultNode = null;\n }\n }, {\n key: 'render',\n value: function render() {\n if (!canUseDOM) {\n return null;\n }\n if (!this.props.node && !this.defaultNode) {\n this.defaultNode = document.createElement('div');\n document.body.appendChild(this.defaultNode);\n }\n return ReactDOM.createPortal(this.props.children, this.props.node || this.defaultNode);\n }\n }]);\n\n return Portal;\n}(React.Component);\n\nPortal.propTypes = {\n children: PropTypes.node.isRequired,\n node: PropTypes.any\n};\n\nexport default Portal;","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n// This file is a fallback for a consumer who is not yet on React 16\n// as createPortal was introduced in React 16\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\n\nvar Portal = function (_React$Component) {\n _inherits(Portal, _React$Component);\n\n function Portal() {\n _classCallCheck(this, Portal);\n\n return _possibleConstructorReturn(this, (Portal.__proto__ || Object.getPrototypeOf(Portal)).apply(this, arguments));\n }\n\n _createClass(Portal, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.renderPortal();\n }\n }, {\n key: 'componentDidUpdate',\n value: function componentDidUpdate(props) {\n this.renderPortal();\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n ReactDOM.unmountComponentAtNode(this.defaultNode || this.props.node);\n if (this.defaultNode) {\n document.body.removeChild(this.defaultNode);\n }\n this.defaultNode = null;\n this.portal = null;\n }\n }, {\n key: 'renderPortal',\n value: function renderPortal(props) {\n if (!this.props.node && !this.defaultNode) {\n this.defaultNode = document.createElement('div');\n document.body.appendChild(this.defaultNode);\n }\n\n var children = this.props.children;\n // https://gist.github.com/jimfb/d99e0678e9da715ccf6454961ef04d1b\n if (typeof this.props.children.type === 'function') {\n children = React.cloneElement(this.props.children);\n }\n\n this.portal = ReactDOM.unstable_renderSubtreeIntoContainer(this, children, this.props.node || this.defaultNode);\n }\n }, {\n key: 'render',\n value: function render() {\n return null;\n }\n }]);\n\n return Portal;\n}(React.Component);\n\nexport default Portal;\n\n\nPortal.propTypes = {\n children: PropTypes.node.isRequired,\n node: PropTypes.any\n};","import ReactDOM from 'react-dom';\n\nimport Portalv4 from './Portal';\nimport LegacyPortal from './LegacyPortal';\n\nvar Portal = void 0;\n\nif (ReactDOM.createPortal) {\n Portal = Portalv4;\n} else {\n Portal = LegacyPortal;\n}\n\nexport default Portal;","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport Portal from './PortalCompat';\n\nvar KEYCODES = {\n ESCAPE: 27\n};\n\nvar PortalWithState = function (_React$Component) {\n _inherits(PortalWithState, _React$Component);\n\n function PortalWithState(props) {\n _classCallCheck(this, PortalWithState);\n\n var _this = _possibleConstructorReturn(this, (PortalWithState.__proto__ || Object.getPrototypeOf(PortalWithState)).call(this, props));\n\n _this.portalNode = null;\n _this.state = { active: !!props.defaultOpen };\n _this.openPortal = _this.openPortal.bind(_this);\n _this.closePortal = _this.closePortal.bind(_this);\n _this.wrapWithPortal = _this.wrapWithPortal.bind(_this);\n _this.handleOutsideMouseClick = _this.handleOutsideMouseClick.bind(_this);\n _this.handleKeydown = _this.handleKeydown.bind(_this);\n return _this;\n }\n\n _createClass(PortalWithState, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n if (this.props.closeOnEsc) {\n document.addEventListener('keydown', this.handleKeydown);\n }\n if (this.props.closeOnOutsideClick) {\n document.addEventListener('click', this.handleOutsideMouseClick);\n }\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n if (this.props.closeOnEsc) {\n document.removeEventListener('keydown', this.handleKeydown);\n }\n if (this.props.closeOnOutsideClick) {\n document.removeEventListener('click', this.handleOutsideMouseClick);\n }\n }\n }, {\n key: 'openPortal',\n value: function openPortal(e) {\n if (this.state.active) {\n return;\n }\n if (e && e.nativeEvent) {\n e.nativeEvent.stopImmediatePropagation();\n }\n this.setState({ active: true }, this.props.onOpen);\n }\n }, {\n key: 'closePortal',\n value: function closePortal() {\n if (!this.state.active) {\n return;\n }\n this.setState({ active: false }, this.props.onClose);\n }\n }, {\n key: 'wrapWithPortal',\n value: function wrapWithPortal(children) {\n var _this2 = this;\n\n if (!this.state.active) {\n return null;\n }\n return React.createElement(\n Portal,\n {\n node: this.props.node,\n key: 'react-portal',\n ref: function ref(portalNode) {\n return _this2.portalNode = portalNode;\n }\n },\n children\n );\n }\n }, {\n key: 'handleOutsideMouseClick',\n value: function handleOutsideMouseClick(e) {\n if (!this.state.active) {\n return;\n }\n var root = this.portalNode && (this.portalNode.props.node || this.portalNode.defaultNode);\n if (!root || root.contains(e.target) || e.button && e.button !== 0) {\n return;\n }\n this.closePortal();\n }\n }, {\n key: 'handleKeydown',\n value: function handleKeydown(e) {\n if (e.keyCode === KEYCODES.ESCAPE && this.state.active) {\n this.closePortal();\n }\n }\n }, {\n key: 'render',\n value: function render() {\n return this.props.children({\n openPortal: this.openPortal,\n closePortal: this.closePortal,\n portal: this.wrapWithPortal,\n isOpen: this.state.active\n });\n }\n }]);\n\n return PortalWithState;\n}(React.Component);\n\nPortalWithState.propTypes = {\n children: PropTypes.func.isRequired,\n defaultOpen: PropTypes.bool,\n node: PropTypes.any,\n closeOnEsc: PropTypes.bool,\n closeOnOutsideClick: PropTypes.bool,\n onOpen: PropTypes.func,\n onClose: PropTypes.func\n};\n\nPortalWithState.defaultProps = {\n onOpen: function onOpen() {},\n onClose: function onClose() {}\n};\n\nexport default PortalWithState;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar CHANNEL = exports.CHANNEL = '__direction__';\n\nvar DIRECTIONS = exports.DIRECTIONS = {\n LTR: 'ltr',\n RTL: 'rtl'\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _propTypes2['default'].shape({\n getState: _propTypes2['default'].func,\n setState: _propTypes2['default'].func,\n subscribe: _propTypes2['default'].func\n});","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _object = require('object.values');\n\nvar _object2 = _interopRequireDefault(_object);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _constants = require('../constants');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _propTypes2['default'].oneOf((0, _object2['default'])(_constants.DIRECTIONS));","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.withDirectionPropTypes = exports.DIRECTIONS = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nexports['default'] = withDirection;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _hoistNonReactStatics = require('hoist-non-react-statics');\n\nvar _hoistNonReactStatics2 = _interopRequireDefault(_hoistNonReactStatics);\n\nvar _deepmerge = require('deepmerge');\n\nvar _deepmerge2 = _interopRequireDefault(_deepmerge);\n\nvar _getComponentName = require('airbnb-prop-types/build/helpers/getComponentName');\n\nvar _getComponentName2 = _interopRequireDefault(_getComponentName);\n\nvar _constants = require('./constants');\n\nvar _brcast = require('./proptypes/brcast');\n\nvar _brcast2 = _interopRequireDefault(_brcast);\n\nvar _direction = require('./proptypes/direction');\n\nvar _direction2 = _interopRequireDefault(_direction);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } /* eslint-disable react/forbid-foreign-prop-types */\n// This higher-order component consumes a string from React context that is\n// provided by the DirectionProvider component.\n// We can use this to conditionally switch layout/direction for right-to-left layouts.\n\nvar contextTypes = _defineProperty({}, _constants.CHANNEL, _brcast2['default']);\n\nexports.DIRECTIONS = _constants.DIRECTIONS;\n\n// set a default direction so that a component wrapped with this HOC can be\n// used even without a DirectionProvider ancestor in its react tree.\n\nvar defaultDirection = _constants.DIRECTIONS.LTR;\n\n// export for convenience, in order for components to spread these onto their propTypes\nvar withDirectionPropTypes = exports.withDirectionPropTypes = {\n direction: _direction2['default'].isRequired\n};\n\nfunction withDirection(WrappedComponent) {\n var WithDirection = function (_React$Component) {\n _inherits(WithDirection, _React$Component);\n\n function WithDirection(props, context) {\n _classCallCheck(this, WithDirection);\n\n var _this = _possibleConstructorReturn(this, (WithDirection.__proto__ || Object.getPrototypeOf(WithDirection)).call(this, props, context));\n\n _this.state = {\n direction: context[_constants.CHANNEL] ? context[_constants.CHANNEL].getState() : defaultDirection\n };\n return _this;\n }\n\n _createClass(WithDirection, [{\n key: 'componentDidMount',\n value: function () {\n function componentDidMount() {\n var _this2 = this;\n\n if (this.context[_constants.CHANNEL]) {\n // subscribe to future direction changes\n this.channelUnsubscribe = this.context[_constants.CHANNEL].subscribe(function (direction) {\n _this2.setState({ direction: direction });\n });\n }\n }\n\n return componentDidMount;\n }()\n }, {\n key: 'componentWillUnmount',\n value: function () {\n function componentWillUnmount() {\n if (this.channelUnsubscribe) {\n this.channelUnsubscribe();\n }\n }\n\n return componentWillUnmount;\n }()\n }, {\n key: 'render',\n value: function () {\n function render() {\n var direction = this.state.direction;\n\n\n return _react2['default'].createElement(WrappedComponent, _extends({}, this.props, {\n direction: direction\n }));\n }\n\n return render;\n }()\n }]);\n\n return WithDirection;\n }(_react2['default'].Component);\n\n var wrappedComponentName = (0, _getComponentName2['default'])(WrappedComponent) || 'Component';\n\n WithDirection.WrappedComponent = WrappedComponent;\n WithDirection.contextTypes = contextTypes;\n WithDirection.displayName = 'withDirection(' + String(wrappedComponentName) + ')';\n if (WrappedComponent.propTypes) {\n WithDirection.propTypes = (0, _deepmerge2['default'])({}, WrappedComponent.propTypes);\n delete WithDirection.propTypes.direction;\n }\n if (WrappedComponent.defaultProps) {\n WithDirection.defaultProps = (0, _deepmerge2['default'])({}, WrappedComponent.defaultProps);\n }\n\n return (0, _hoistNonReactStatics2['default'])(WithDirection, WrappedComponent);\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _arrayPrototype = _interopRequireDefault(require(\"array.prototype.flat\"));\n\nvar _globalCache = _interopRequireDefault(require(\"global-cache\"));\n\nvar _constants = require(\"./utils/constants\");\n\nvar _getClassName = _interopRequireDefault(require(\"./utils/getClassName\"));\n\nvar _separateStyles2 = _interopRequireDefault(require(\"./utils/separateStyles\"));\n\n/**\n * Function required as part of the react-with-styles interface. Parses the styles provided by\n * react-with-styles to produce class names based on the style name and optionally the namespace if\n * available.\n *\n * stylesObject {Object} The styles object passed to withStyles.\n *\n * Return an object mapping style names to class names.\n */\nfunction create(stylesObject) {\n var stylesToClasses = {};\n var styleNames = Object.keys(stylesObject);\n var sharedState = _globalCache[\"default\"].get(_constants.GLOBAL_CACHE_KEY) || {};\n var _sharedState$namespac = sharedState.namespace,\n namespace = _sharedState$namespac === void 0 ? '' : _sharedState$namespac;\n styleNames.forEach(function (styleName) {\n var className = (0, _getClassName[\"default\"])(namespace, styleName);\n stylesToClasses[styleName] = className;\n });\n return stylesToClasses;\n}\n/**\n * Process styles to be consumed by a component.\n *\n * stylesArray {Array} Array of the following: values returned by create, plain JavaScript objects\n * representing inline styles, or arrays thereof.\n *\n * Return an object with optional className and style properties to be spread on a component.\n */\n\n\nfunction resolve(stylesArray) {\n var flattenedStyles = (0, _arrayPrototype[\"default\"])(stylesArray, Infinity);\n\n var _separateStyles = (0, _separateStyles2[\"default\"])(flattenedStyles),\n classNames = _separateStyles.classNames,\n hasInlineStyles = _separateStyles.hasInlineStyles,\n inlineStyles = _separateStyles.inlineStyles;\n\n var specificClassNames = classNames.map(function (name, index) {\n return \"\".concat(name, \" \").concat(name, \"_\").concat(index + 1);\n });\n var className = specificClassNames.join(' ');\n var result = {\n className: className\n };\n if (hasInlineStyles) result.style = inlineStyles;\n return result;\n}\n\nvar _default = {\n create: create,\n resolve: resolve\n};\nexports[\"default\"] = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.MAX_SPECIFICITY = exports.GLOBAL_CACHE_KEY = void 0;\nvar GLOBAL_CACHE_KEY = 'reactWithStylesInterfaceCSS';\nexports.GLOBAL_CACHE_KEY = GLOBAL_CACHE_KEY;\nvar MAX_SPECIFICITY = 20;\nexports.MAX_SPECIFICITY = MAX_SPECIFICITY;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = getClassName;\n\n/**\n * Construct a class name.\n *\n * namespace {String} Used to construct unique class names.\n * styleName {String} Name identifying the specific style.\n *\n * Return the class name.\n */\nfunction getClassName(namespace, styleName) {\n var namespaceSegment = namespace.length > 0 ? \"\".concat(namespace, \"__\") : '';\n return \"\".concat(namespaceSegment).concat(styleName);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\n// This function takes an array of styles and separates them into styles that\n// are handled by Aphrodite and inline styles.\nfunction separateStyles(stylesArray) {\n var classNames = []; // Since determining if an Object is empty requires collecting all of its\n // keys, and we want the best performance in this code because we are in the\n // render path, we are going to do a little bookkeeping ourselves.\n\n var hasInlineStyles = false;\n var inlineStyles = {}; // This is run on potentially every node in the tree when rendering, where\n // performance is critical. Normally we would prefer using `forEach`, but\n // old-fashioned for loops are faster so that's what we have chosen here.\n\n for (var i = 0; i < stylesArray.length; i++) {\n // eslint-disable-line no-plusplus\n var style = stylesArray[i]; // If this style is falsy, we just want to disregard it. This allows for\n // syntax like:\n //\n // css(isFoo && styles.foo)\n\n if (style) {\n if (typeof style === 'string') {\n classNames.push(style);\n } else {\n Object.assign(inlineStyles, style);\n hasInlineStyles = true;\n }\n }\n }\n\n return {\n classNames: classNames,\n hasInlineStyles: hasInlineStyles,\n inlineStyles: inlineStyles\n };\n}\n\nvar _default = separateStyles;\nexports[\"default\"] = _default;","// eslint-disable-next-line import/no-unresolved\nmodule.exports = require('./dist/index.js').default;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports._getInterface = _getInterface;\nexports._getTheme = get;\nexports[\"default\"] = void 0;\nvar styleInterface;\nvar styleTheme;\nvar START_MARK = 'react-with-styles.resolve.start';\nvar END_MARK = 'react-with-styles.resolve.end';\nvar MEASURE_MARK = \"\\uD83D\\uDC69\\u200D\\uD83C\\uDFA8 [resolve]\";\n\nfunction registerTheme(theme) {\n styleTheme = theme;\n}\n\nfunction registerInterface(interfaceToRegister) {\n styleInterface = interfaceToRegister;\n}\n\nfunction create(makeFromTheme, createWithDirection) {\n var styles = createWithDirection(makeFromTheme(styleTheme));\n return function () {\n return styles;\n };\n}\n\nfunction createLTR(makeFromTheme) {\n return create(makeFromTheme, styleInterface.createLTR || styleInterface.create);\n}\n\nfunction createRTL(makeFromTheme) {\n return create(makeFromTheme, styleInterface.createRTL || styleInterface.create);\n}\n\nfunction get() {\n return styleTheme;\n}\n\nfunction resolve() {\n if (process.env.NODE_ENV !== 'production' && typeof performance !== 'undefined' && performance.mark !== undefined && typeof performance.clearMarks === 'function') {\n performance.clearMarks(START_MARK);\n performance.mark(START_MARK);\n }\n\n for (var _len = arguments.length, styles = new Array(_len), _key = 0; _key < _len; _key++) {\n styles[_key] = arguments[_key];\n }\n\n var result = styleInterface.resolve(styles);\n\n if (process.env.NODE_ENV !== 'production' && typeof performance !== 'undefined' && performance.mark !== undefined && typeof performance.clearMarks === 'function') {\n performance.clearMarks(END_MARK);\n performance.mark(END_MARK);\n performance.measure(MEASURE_MARK, START_MARK, END_MARK);\n performance.clearMarks(MEASURE_MARK);\n }\n\n return result;\n}\n\nfunction resolveLTR() {\n for (var _len2 = arguments.length, styles = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n styles[_key2] = arguments[_key2];\n }\n\n if (styleInterface.resolveLTR) {\n return styleInterface.resolveLTR(styles);\n }\n\n return resolve(styles);\n}\n\nfunction resolveRTL() {\n for (var _len3 = arguments.length, styles = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n styles[_key3] = arguments[_key3];\n }\n\n if (styleInterface.resolveRTL) {\n return styleInterface.resolveRTL(styles);\n }\n\n return resolve(styles);\n}\n\nfunction flush() {\n if (styleInterface.flush) {\n styleInterface.flush();\n }\n} // Exported until we deprecate this API completely\n// eslint-disable-next-line no-underscore-dangle\n\n\nfunction _getInterface() {\n return styleInterface;\n} // Exported until we deprecate this API completely\n\n\nvar _default = {\n registerTheme: registerTheme,\n registerInterface: registerInterface,\n create: createLTR,\n createLTR: createLTR,\n createRTL: createRTL,\n get: get,\n resolve: resolveLTR,\n resolveLTR: resolveLTR,\n resolveRTL: resolveRTL,\n flush: flush\n};\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"DIRECTIONS\", {\n enumerable: true,\n get: function get() {\n return _reactWithDirection.DIRECTIONS;\n }\n});\nexports[\"default\"] = void 0;\n\nvar _react = require(\"react\");\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _reactWithDirection = require(\"react-with-direction\");\n\nfunction detectAndCreateContext(defaultValue) {\n if (_react.createContext) {\n return /*#__PURE__*/(0, _react.createContext)(defaultValue);\n }\n\n return {\n Provider: function Provider() {\n throw new ReferenceError('WithStylesContext requires React 16.3 or later');\n },\n Consumer: function Consumer() {\n throw new ReferenceError('WithStylesContext requires React 16.3 or later');\n }\n };\n}\n\nvar WithStylesContext = detectAndCreateContext({\n stylesInterface: null,\n stylesTheme: null,\n direction: null\n});\nWithStylesContext.Provider.propTypes = {\n stylesInterface: _propTypes[\"default\"].object,\n // eslint-disable-line react/forbid-prop-types\n stylesTheme: _propTypes[\"default\"].object,\n // eslint-disable-line react/forbid-prop-types\n direction: _propTypes[\"default\"].oneOf([_reactWithDirection.DIRECTIONS.LTR, _reactWithDirection.DIRECTIONS.RTL])\n};\nvar _default = WithStylesContext;\nexports[\"default\"] = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\nvar EMPTY_STYLES = {};\n\nvar EMPTY_STYLES_FN = function EMPTY_STYLES_FN() {\n return EMPTY_STYLES;\n};\n\nvar _default = EMPTY_STYLES_FN;\nexports[\"default\"] = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.perfStart = perfStart;\nexports.perfEnd = perfEnd;\nexports[\"default\"] = withPerf;\n\nfunction perfStart(startMark) {\n if (typeof performance !== 'undefined' && performance.mark !== undefined && typeof performance.clearMarks === 'function' && startMark) {\n performance.clearMarks(startMark);\n performance.mark(startMark);\n }\n}\n\nfunction perfEnd(startMark, endMark, measureName) {\n if (typeof performance !== 'undefined' && performance.mark !== undefined && typeof performance.clearMarks === 'function') {\n performance.clearMarks(endMark);\n performance.mark(endMark);\n performance.measure(measureName, startMark, endMark);\n performance.clearMarks(measureName);\n }\n}\n\nfunction withPerf(methodName) {\n var startMark = \"react-with-styles.\".concat(methodName, \".start\");\n var endMark = \"react-with-styles.\".concat(methodName, \".end\");\n var measureName = \"\\uD83D\\uDC69\\u200D\\uD83C\\uDFA8 [\".concat(methodName, \"]\");\n return function (fn) {\n return function () {\n if (process.env.NODE_ENV !== 'production') {\n perfStart(startMark);\n }\n\n var result = fn.apply(void 0, arguments);\n\n if (process.env.NODE_ENV !== 'production') {\n perfEnd(startMark, endMark, measureName);\n }\n\n return result;\n };\n };\n}","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.withStyles = withStyles;\nObject.defineProperty(exports, \"withStylesPropTypes\", {\n enumerable: true,\n get: function get() {\n return _withStylesPropTypes.withStylesPropTypes;\n }\n});\nexports.css = exports[\"default\"] = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _hoistNonReactStatics = _interopRequireDefault(require(\"hoist-non-react-statics\"));\n\nvar _getComponentName = _interopRequireDefault(require(\"airbnb-prop-types/build/helpers/getComponentName\"));\n\nvar _ref3 = _interopRequireDefault(require(\"airbnb-prop-types/build/ref\"));\n\nvar _emptyStylesFn = _interopRequireDefault(require(\"./utils/emptyStylesFn\"));\n\nvar _perf = _interopRequireDefault(require(\"./utils/perf\"));\n\nvar _WithStylesContext = _interopRequireWildcard(require(\"./WithStylesContext\"));\n\nvar _ThemedStyleSheet = _interopRequireWildcard(require(\"./ThemedStyleSheet\"));\n\nvar _withStylesPropTypes = require(\"./withStylesPropTypes\");\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\n/**\n * A higher order function that returns a higher order class component that injects\n * CSS-in-JS props derived from the react-with-styles theme, interface, and\n * direction provided through the WithStylesContext provider.\n *\n * The function should be used as follows:\n * `withStyles((theme) => styles, options)(Component)`\n *\n * Options can be used to rename the injected props, memoize the component, and flush\n * the styles to the styles tag (or whatever the interface implements as flush) before\n * rendering.\n *\n * @export\n * @param {Function|null|undefined} [stylesFn=EMPTY_STYLES_FN]\n * @param {Object} [{\n * stylesPropName = 'styles',\n * themePropName = 'theme',\n * cssPropName = 'css',\n * flushBefore = false,\n * pureComponent = false,\n * }={}]\n * @returns a higher order component that wraps the provided component and injects\n * the react-with-styles css, styles, and theme props.\n */\nfunction withStyles() {\n var stylesFn = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _emptyStylesFn[\"default\"];\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref$stylesPropName = _ref.stylesPropName,\n stylesPropName = _ref$stylesPropName === void 0 ? 'styles' : _ref$stylesPropName,\n _ref$themePropName = _ref.themePropName,\n themePropName = _ref$themePropName === void 0 ? 'theme' : _ref$themePropName,\n _ref$cssPropName = _ref.cssPropName,\n cssPropName = _ref$cssPropName === void 0 ? 'css' : _ref$cssPropName,\n _ref$flushBefore = _ref.flushBefore,\n flushBefore = _ref$flushBefore === void 0 ? false : _ref$flushBefore,\n _ref$pureComponent = _ref.pureComponent,\n pureComponent = _ref$pureComponent === void 0 ? false : _ref$pureComponent;\n\n stylesFn = stylesFn || _emptyStylesFn[\"default\"];\n var BaseClass = pureComponent ? _react[\"default\"].PureComponent : _react[\"default\"].Component;\n /** Cache for storing the result of stylesFn(theme) for all themes. */\n\n var stylesFnResultCacheMap = typeof WeakMap === 'undefined' ? new Map() : new WeakMap();\n\n function getOrCreateStylesFnResultCache(theme) {\n // Get and store the result in the stylesFnResultsCache for the component\n // -- not the instance -- so we only apply the theme to the stylesFn\n // once per theme for this component.\n var cachedResultForTheme = stylesFnResultCacheMap.get(theme);\n var stylesFnResult = cachedResultForTheme || stylesFn(theme) || {};\n stylesFnResultCacheMap.set(theme, stylesFnResult); // cache the result of stylesFn(theme)\n\n return stylesFnResult;\n }\n /**\n * Cache for storing the results of computations:\n * `WeakMap>`\n * Falling back to `Map` whenever `WeakMap` is not supported\n */\n\n\n var withStylesCache = typeof WeakMap === 'undefined' ? new Map() : new WeakMap();\n\n function getComponentCache(theme, component, direction) {\n var themeCache = withStylesCache.get(theme);\n\n if (!themeCache) {\n return null;\n }\n\n var componentCache = themeCache.get(component);\n\n if (!componentCache) {\n return null;\n }\n\n return componentCache[direction];\n }\n\n function updateComponentCache(theme, component, direction, results) {\n var themeCache = withStylesCache.get(theme);\n\n if (!themeCache) {\n themeCache = typeof WeakMap === 'undefined' ? new Map() : new WeakMap();\n withStylesCache.set(theme, themeCache);\n }\n\n var componentCache = themeCache.get(component);\n\n if (!componentCache) {\n componentCache = {\n ltr: {},\n rtl: {}\n };\n themeCache.set(component, componentCache);\n }\n\n componentCache[direction] = results;\n }\n /** Derive the create function from the interface and direction */\n\n\n function makeCreateFn(direction, stylesInterface) {\n var directionSelector = direction === _WithStylesContext.DIRECTIONS.RTL ? 'RTL' : 'LTR';\n var create = stylesInterface[\"create\".concat(directionSelector)] || stylesInterface.create;\n var original = create;\n\n if (process.env.NODE_ENV !== 'production') {\n create = (0, _perf[\"default\"])('create')(create);\n }\n\n return {\n create: create,\n original: original\n };\n }\n /** Derive the resolve function from the interface and direction */\n\n\n function makeResolveFn(direction, stylesInterface) {\n var directionSelector = direction === _WithStylesContext.DIRECTIONS.RTL ? 'RTL' : 'LTR';\n var resolve = stylesInterface[\"resolve\".concat(directionSelector)] || stylesInterface.resolve;\n var original = resolve;\n\n if (process.env.NODE_ENV !== 'production') {\n resolve = (0, _perf[\"default\"])('resolve')(resolve);\n }\n\n return {\n resolve: resolve,\n original: original\n };\n } // The function that wraps the provided component in a wrapper\n // component that injects the withStyles props\n\n\n return function withStylesHOC(WrappedComponent) {\n var wrappedComponentName = (0, _getComponentName[\"default\"])(WrappedComponent); // The wrapper component that injects the withStyles props\n\n var WithStyles = /*#__PURE__*/function (_BaseClass) {\n (0, _inheritsLoose2[\"default\"])(WithStyles, _BaseClass);\n\n function WithStyles() {\n return _BaseClass.apply(this, arguments) || this;\n }\n\n var _proto = WithStyles.prototype;\n\n _proto.getCurrentInterface = function getCurrentInterface() {\n // Fallback to the singleton implementation\n return this.context && this.context.stylesInterface || (0, _ThemedStyleSheet._getInterface)();\n };\n\n _proto.getCurrentTheme = function getCurrentTheme() {\n // Fallback to the singleton implementation\n return this.context && this.context.stylesTheme || (0, _ThemedStyleSheet._getTheme)();\n };\n\n _proto.getCurrentDirection = function getCurrentDirection() {\n return this.context && this.context.direction || _WithStylesContext.DIRECTIONS.LTR;\n };\n\n _proto.getProps = function getProps() {\n // Get the styles interface, theme, and direction from context\n var stylesInterface = this.getCurrentInterface();\n var theme = this.getCurrentTheme();\n var direction = this.getCurrentDirection(); // Use a cache to store the interface methods and created styles by direction.\n // This way, if the theme and the interface don't change, we do not recalculate\n // styles or any other interface derivations. They are effectively only calculated\n // once per direction, until the theme or interface change.\n // Assume: always an object.\n\n var componentCache = getComponentCache(theme, WithStyles, direction); // Determine what's changed\n\n var interfaceChanged = !componentCache || !componentCache.stylesInterface || stylesInterface && componentCache.stylesInterface !== stylesInterface;\n var themeChanged = !componentCache || componentCache.theme !== theme; // If the interface and theme haven't changed for this direction,\n // we return the cached props immediately.\n\n if (!interfaceChanged && !themeChanged) {\n return componentCache.props;\n } // If the theme or the interface changed, then there are some values\n // we need to recalculate. We avoid recalculating the ones we already\n // calculated in the past if the objects they're derived from have not\n // changed.\n\n\n var createFn = interfaceChanged && makeCreateFn(direction, stylesInterface) || componentCache.create;\n var resolveFn = interfaceChanged && makeResolveFn(direction, stylesInterface) || componentCache.resolve;\n var create = createFn.create;\n var resolve = resolveFn.resolve; // Determine if create or resolve functions have changed, which will then\n // determine if we need to create new styles or css props\n\n var createChanged = !componentCache || !componentCache.create || createFn.original !== componentCache.create.original;\n var resolveChanged = !componentCache || !componentCache.resolve || resolveFn.original !== componentCache.resolve.original; // Derive the css function prop: recalculate it if resolve changed\n\n var css = resolveChanged && function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return resolve(args);\n } || componentCache.props.css; // Get or calculate the themed styles from the stylesFn:\n // Uses a separate cache at the component level, not at the instance level,\n // to only apply the theme to the stylesFn once per component class per theme.\n\n\n var stylesFnResult = getOrCreateStylesFnResultCache(theme); // Derive the styles prop: recalculate it if create changed, or stylesFnResult changed\n\n var styles = (createChanged || stylesFnResult !== componentCache.stylesFnResult) && create(stylesFnResult) || componentCache.props.styles; // Put the new props together\n\n var props = {\n css: css,\n styles: styles,\n theme: theme\n }; // Update the cache with all the new values\n\n updateComponentCache(theme, WithStyles, direction, {\n stylesInterface: stylesInterface,\n theme: theme,\n create: createFn,\n resolve: resolveFn,\n stylesFnResult: stylesFnResult,\n props: props\n });\n return props;\n };\n\n _proto.flush = function flush() {\n var stylesInterface = this.getCurrentInterface();\n\n if (stylesInterface && stylesInterface.flush) {\n stylesInterface.flush();\n }\n };\n\n _proto.render = function render() {\n var _ref2;\n\n // We only want to re-render if the theme, stylesInterface, or direction change.\n // These values are in context so we're listening for their updates.\n // this.getProps() derives the props from the theme, stylesInterface, and direction in\n // context, and memoizes them on the instance per direction.\n var _this$getProps = this.getProps(),\n theme = _this$getProps.theme,\n styles = _this$getProps.styles,\n css = _this$getProps.css; // Flush if specified\n\n\n if (flushBefore) {\n this.flush();\n }\n\n var _this$props = this.props,\n forwardedRef = _this$props.forwardedRef,\n rest = (0, _objectWithoutProperties2[\"default\"])(_this$props, [\"forwardedRef\"]);\n return /*#__PURE__*/_react[\"default\"].createElement(WrappedComponent // TODO: remove conditional once breaking change to only support React 16.3+\n // ref: https://github.com/airbnb/react-with-styles/pull/240#discussion_r533497857\n , (0, _extends2[\"default\"])({\n ref: typeof _react[\"default\"].forwardRef === 'undefined' ? undefined : forwardedRef\n }, typeof _react[\"default\"].forwardRef === 'undefined' ? this.props : rest, (_ref2 = {}, (0, _defineProperty2[\"default\"])(_ref2, themePropName, theme), (0, _defineProperty2[\"default\"])(_ref2, stylesPropName, styles), (0, _defineProperty2[\"default\"])(_ref2, cssPropName, css), _ref2)));\n };\n\n return WithStyles;\n }(BaseClass); // TODO: remove conditional once breaking change to only support React 16.3+\n // ref: https://github.com/airbnb/react-with-styles/pull/240#discussion_r533497857\n\n\n if (typeof _react[\"default\"].forwardRef !== 'undefined') {\n WithStyles.propTypes = {\n forwardedRef: (0, _ref3[\"default\"])()\n };\n } // TODO: remove conditional once breaking change to only support React 16.3+\n // ref: https://github.com/airbnb/react-with-styles/pull/240#discussion_r533497857\n\n\n var ForwardedWithStyles = typeof _react[\"default\"].forwardRef === 'undefined' ? WithStyles : /*#__PURE__*/_react[\"default\"].forwardRef(function (props, forwardedRef) {\n return /*#__PURE__*/_react[\"default\"].createElement(WithStyles, (0, _extends2[\"default\"])({}, props, {\n forwardedRef: forwardedRef\n }));\n }); // Copy the wrapped component's prop types and default props on WithStyles\n\n if (WrappedComponent.propTypes) {\n ForwardedWithStyles.propTypes = _objectSpread({}, WrappedComponent.propTypes);\n delete ForwardedWithStyles.propTypes[stylesPropName];\n delete ForwardedWithStyles.propTypes[themePropName];\n delete ForwardedWithStyles.propTypes[cssPropName];\n }\n\n if (WrappedComponent.defaultProps) {\n ForwardedWithStyles.defaultProps = _objectSpread({}, WrappedComponent.defaultProps);\n }\n\n WithStyles.contextType = _WithStylesContext[\"default\"];\n ForwardedWithStyles.WrappedComponent = WrappedComponent;\n ForwardedWithStyles.displayName = \"withStyles(\".concat(wrappedComponentName, \")\");\n return (0, _hoistNonReactStatics[\"default\"])(ForwardedWithStyles, WrappedComponent);\n };\n}\n\nvar _default = withStyles;\n/**\n * Deprecated: Do not use directly. Please wrap your component in `withStyles` and use the `css`\n * prop injected via props instead.\n */\n\nexports[\"default\"] = _default;\nvar css = _ThemedStyleSheet[\"default\"].resolveLTR;\nexports.css = css;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = exports.withStylesPropTypes = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar withStylesPropTypes = {\n styles: _propTypes[\"default\"].object.isRequired,\n theme: _propTypes[\"default\"].object.isRequired,\n css: _propTypes[\"default\"].func.isRequired\n};\nexports.withStylesPropTypes = withStylesPropTypes;\nvar _default = withStylesPropTypes;\nexports[\"default\"] = _default;","/** @license React v17.0.2\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';require(\"object-assign\");var f=require(\"react\"),g=60103;exports.Fragment=60107;if(\"function\"===typeof Symbol&&Symbol.for){var h=Symbol.for;g=h(\"react.element\");exports.Fragment=h(\"react.fragment\")}var m=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,n=Object.prototype.hasOwnProperty,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,k){var b,d={},e=null,l=null;void 0!==k&&(e=\"\"+k);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(l=a.ref);for(b in a)n.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:g,type:c,key:e,ref:l,props:d,_owner:m.current}}exports.jsx=q;exports.jsxs=q;\n","/** @license React v17.0.2\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var l=require(\"object-assign\"),n=60103,p=60106;exports.Fragment=60107;exports.StrictMode=60108;exports.Profiler=60114;var q=60109,r=60110,t=60112;exports.Suspense=60113;var u=60115,v=60116;\nif(\"function\"===typeof Symbol&&Symbol.for){var w=Symbol.for;n=w(\"react.element\");p=w(\"react.portal\");exports.Fragment=w(\"react.fragment\");exports.StrictMode=w(\"react.strict_mode\");exports.Profiler=w(\"react.profiler\");q=w(\"react.provider\");r=w(\"react.context\");t=w(\"react.forward_ref\");exports.Suspense=w(\"react.suspense\");u=w(\"react.memo\");v=w(\"react.lazy\")}var x=\"function\"===typeof Symbol&&Symbol.iterator;\nfunction y(a){if(null===a||\"object\"!==typeof a)return null;a=x&&a[x]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}function z(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;c result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","/** @license React v0.20.2\n * scheduler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f,g,h,k;if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}\nif(\"undefined\"===typeof window||\"function\"!==typeof MessageChannel){var t=null,u=null,w=function(){if(null!==t)try{var a=exports.unstable_now();t(!0,a);t=null}catch(b){throw setTimeout(w,0),b;}};f=function(a){null!==t?setTimeout(f,0,a):(t=a,setTimeout(w,0))};g=function(a,b){u=setTimeout(a,b)};h=function(){clearTimeout(u)};exports.unstable_shouldYield=function(){return!1};k=exports.unstable_forceFrameRate=function(){}}else{var x=window.setTimeout,y=window.clearTimeout;if(\"undefined\"!==typeof console){var z=\nwindow.cancelAnimationFrame;\"function\"!==typeof window.requestAnimationFrame&&console.error(\"This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills\");\"function\"!==typeof z&&console.error(\"This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills\")}var A=!1,B=null,C=-1,D=5,E=0;exports.unstable_shouldYield=function(){return exports.unstable_now()>=\nE};k=function(){};exports.unstable_forceFrameRate=function(a){0>a||125>>1,e=a[d];if(void 0!==e&&0I(n,c))void 0!==r&&0>I(r,n)?(a[d]=r,a[v]=c,d=v):(a[d]=n,a[m]=c,d=m);else if(void 0!==r&&0>I(r,c))a[d]=r,a[v]=c,d=v;else break a}}return b}return null}function I(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}var L=[],M=[],N=1,O=null,P=3,Q=!1,R=!1,S=!1;\nfunction T(a){for(var b=J(M);null!==b;){if(null===b.callback)K(M);else if(b.startTime<=a)K(M),b.sortIndex=b.expirationTime,H(L,b);else break;b=J(M)}}function U(a){S=!1;T(a);if(!R)if(null!==J(L))R=!0,f(V);else{var b=J(M);null!==b&&g(U,b.startTime-a)}}\nfunction V(a,b){R=!1;S&&(S=!1,h());Q=!0;var c=P;try{T(b);for(O=J(L);null!==O&&(!(O.expirationTime>b)||a&&!exports.unstable_shouldYield());){var d=O.callback;if(\"function\"===typeof d){O.callback=null;P=O.priorityLevel;var e=d(O.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?O.callback=e:O===J(L)&&K(L);T(b)}else K(L);O=J(L)}if(null!==O)var m=!0;else{var n=J(M);null!==n&&g(U,n.startTime-b);m=!1}return m}finally{O=null,P=c,Q=!1}}var W=k;exports.unstable_IdlePriority=5;\nexports.unstable_ImmediatePriority=1;exports.unstable_LowPriority=4;exports.unstable_NormalPriority=3;exports.unstable_Profiling=null;exports.unstable_UserBlockingPriority=2;exports.unstable_cancelCallback=function(a){a.callback=null};exports.unstable_continueExecution=function(){R||Q||(R=!0,f(V))};exports.unstable_getCurrentPriorityLevel=function(){return P};exports.unstable_getFirstCallbackNode=function(){return J(L)};\nexports.unstable_next=function(a){switch(P){case 1:case 2:case 3:var b=3;break;default:b=P}var c=P;P=b;try{return a()}finally{P=c}};exports.unstable_pauseExecution=function(){};exports.unstable_requestPaint=W;exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=P;P=a;try{return b()}finally{P=c}};\nexports.unstable_scheduleCallback=function(a,b,c){var d=exports.unstable_now();\"object\"===typeof c&&null!==c?(c=c.delay,c=\"number\"===typeof c&&0d?(a.sortIndex=c,H(M,a),null===J(L)&&a===J(M)&&(S?h():S=!0,g(U,c-d))):(a.sortIndex=e,H(L,a),R||Q||(R=!0,f(V)));return a};\nexports.unstable_wrapCallback=function(a){var b=P;return function(){var c=P;P=b;try{return a.apply(this,arguments)}finally{P=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","// A library of seedable RNGs implemented in Javascript.\n//\n// Usage:\n//\n// var seedrandom = require('seedrandom');\n// var random = seedrandom(1); // or any seed.\n// var x = random(); // 0 <= x < 1. Every bit is random.\n// var x = random.quick(); // 0 <= x < 1. 32 bits of randomness.\n\n// alea, a 53-bit multiply-with-carry generator by Johannes Baagøe.\n// Period: ~2^116\n// Reported to pass all BigCrush tests.\nvar alea = require('./lib/alea');\n\n// xor128, a pure xor-shift generator by George Marsaglia.\n// Period: 2^128-1.\n// Reported to fail: MatrixRank and LinearComp.\nvar xor128 = require('./lib/xor128');\n\n// xorwow, George Marsaglia's 160-bit xor-shift combined plus weyl.\n// Period: 2^192-2^32\n// Reported to fail: CollisionOver, SimpPoker, and LinearComp.\nvar xorwow = require('./lib/xorwow');\n\n// xorshift7, by François Panneton and Pierre L'ecuyer, takes\n// a different approach: it adds robustness by allowing more shifts\n// than Marsaglia's original three. It is a 7-shift generator\n// with 256 bits, that passes BigCrush with no systmatic failures.\n// Period 2^256-1.\n// No systematic BigCrush failures reported.\nvar xorshift7 = require('./lib/xorshift7');\n\n// xor4096, by Richard Brent, is a 4096-bit xor-shift with a\n// very long period that also adds a Weyl generator. It also passes\n// BigCrush with no systematic failures. Its long period may\n// be useful if you have many generators and need to avoid\n// collisions.\n// Period: 2^4128-2^32.\n// No systematic BigCrush failures reported.\nvar xor4096 = require('./lib/xor4096');\n\n// Tyche-i, by Samuel Neves and Filipe Araujo, is a bit-shifting random\n// number generator derived from ChaCha, a modern stream cipher.\n// https://eden.dei.uc.pt/~sneves/pubs/2011-snfa2.pdf\n// Period: ~2^127\n// No systematic BigCrush failures reported.\nvar tychei = require('./lib/tychei');\n\n// The original ARC4-based prng included in this library.\n// Period: ~2^1600\nvar sr = require('./seedrandom');\n\nsr.alea = alea;\nsr.xor128 = xor128;\nsr.xorwow = xorwow;\nsr.xorshift7 = xorshift7;\nsr.xor4096 = xor4096;\nsr.tychei = tychei;\n\nmodule.exports = sr;\n","// A port of an algorithm by Johannes Baagøe , 2010\n// http://baagoe.com/en/RandomMusings/javascript/\n// https://github.com/nquinlan/better-random-numbers-for-javascript-mirror\n// Original work is under MIT license -\n\n// Copyright (C) 2010 by Johannes Baagøe \n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n\n\n(function(global, module, define) {\n\nfunction Alea(seed) {\n var me = this, mash = Mash();\n\n me.next = function() {\n var t = 2091639 * me.s0 + me.c * 2.3283064365386963e-10; // 2^-32\n me.s0 = me.s1;\n me.s1 = me.s2;\n return me.s2 = t - (me.c = t | 0);\n };\n\n // Apply the seeding algorithm from Baagoe.\n me.c = 1;\n me.s0 = mash(' ');\n me.s1 = mash(' ');\n me.s2 = mash(' ');\n me.s0 -= mash(seed);\n if (me.s0 < 0) { me.s0 += 1; }\n me.s1 -= mash(seed);\n if (me.s1 < 0) { me.s1 += 1; }\n me.s2 -= mash(seed);\n if (me.s2 < 0) { me.s2 += 1; }\n mash = null;\n}\n\nfunction copy(f, t) {\n t.c = f.c;\n t.s0 = f.s0;\n t.s1 = f.s1;\n t.s2 = f.s2;\n return t;\n}\n\nfunction impl(seed, opts) {\n var xg = new Alea(seed),\n state = opts && opts.state,\n prng = xg.next;\n prng.int32 = function() { return (xg.next() * 0x100000000) | 0; }\n prng.double = function() {\n return prng() + (prng() * 0x200000 | 0) * 1.1102230246251565e-16; // 2^-53\n };\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nfunction Mash() {\n var n = 0xefc8249d;\n\n var mash = function(data) {\n data = String(data);\n for (var i = 0; i < data.length; i++) {\n n += data.charCodeAt(i);\n var h = 0.02519603282416938 * n;\n n = h >>> 0;\n h -= n;\n h *= n;\n n = h >>> 0;\n h -= n;\n n += h * 0x100000000; // 2^32\n }\n return (n >>> 0) * 2.3283064365386963e-10; // 2^-32\n };\n\n return mash;\n}\n\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.alea = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n","// A Javascript implementaion of the \"Tyche-i\" prng algorithm by\n// Samuel Neves and Filipe Araujo.\n// See https://eden.dei.uc.pt/~sneves/pubs/2011-snfa2.pdf\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this, strseed = '';\n\n // Set up generator function.\n me.next = function() {\n var b = me.b, c = me.c, d = me.d, a = me.a;\n b = (b << 25) ^ (b >>> 7) ^ c;\n c = (c - d) | 0;\n d = (d << 24) ^ (d >>> 8) ^ a;\n a = (a - b) | 0;\n me.b = b = (b << 20) ^ (b >>> 12) ^ c;\n me.c = c = (c - d) | 0;\n me.d = (d << 16) ^ (c >>> 16) ^ a;\n return me.a = (a - b) | 0;\n };\n\n /* The following is non-inverted tyche, which has better internal\n * bit diffusion, but which is about 25% slower than tyche-i in JS.\n me.next = function() {\n var a = me.a, b = me.b, c = me.c, d = me.d;\n a = (me.a + me.b | 0) >>> 0;\n d = me.d ^ a; d = d << 16 ^ d >>> 16;\n c = me.c + d | 0;\n b = me.b ^ c; b = b << 12 ^ d >>> 20;\n me.a = a = a + b | 0;\n d = d ^ a; me.d = d = d << 8 ^ d >>> 24;\n me.c = c = c + d | 0;\n b = b ^ c;\n return me.b = (b << 7 ^ b >>> 25);\n }\n */\n\n me.a = 0;\n me.b = 0;\n me.c = 2654435769 | 0;\n me.d = 1367130551;\n\n if (seed === Math.floor(seed)) {\n // Integer seed.\n me.a = (seed / 0x100000000) | 0;\n me.b = seed | 0;\n } else {\n // String seed.\n strseed += seed;\n }\n\n // Mix in string seed, then discard an initial batch of 64 values.\n for (var k = 0; k < strseed.length + 20; k++) {\n me.b ^= strseed.charCodeAt(k) | 0;\n me.next();\n }\n}\n\nfunction copy(f, t) {\n t.a = f.a;\n t.b = f.b;\n t.c = f.c;\n t.d = f.d;\n return t;\n};\n\nfunction impl(seed, opts) {\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.tychei = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n","// A Javascript implementaion of the \"xor128\" prng algorithm by\n// George Marsaglia. See http://www.jstatsoft.org/v08/i14/paper\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this, strseed = '';\n\n me.x = 0;\n me.y = 0;\n me.z = 0;\n me.w = 0;\n\n // Set up generator function.\n me.next = function() {\n var t = me.x ^ (me.x << 11);\n me.x = me.y;\n me.y = me.z;\n me.z = me.w;\n return me.w ^= (me.w >>> 19) ^ t ^ (t >>> 8);\n };\n\n if (seed === (seed | 0)) {\n // Integer seed.\n me.x = seed;\n } else {\n // String seed.\n strseed += seed;\n }\n\n // Mix in string seed, then discard an initial batch of 64 values.\n for (var k = 0; k < strseed.length + 64; k++) {\n me.x ^= strseed.charCodeAt(k) | 0;\n me.next();\n }\n}\n\nfunction copy(f, t) {\n t.x = f.x;\n t.y = f.y;\n t.z = f.z;\n t.w = f.w;\n return t;\n}\n\nfunction impl(seed, opts) {\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xor128 = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n","// A Javascript implementaion of Richard Brent's Xorgens xor4096 algorithm.\n//\n// This fast non-cryptographic random number generator is designed for\n// use in Monte-Carlo algorithms. It combines a long-period xorshift\n// generator with a Weyl generator, and it passes all common batteries\n// of stasticial tests for randomness while consuming only a few nanoseconds\n// for each prng generated. For background on the generator, see Brent's\n// paper: \"Some long-period random number generators using shifts and xors.\"\n// http://arxiv.org/pdf/1004.3115v1.pdf\n//\n// Usage:\n//\n// var xor4096 = require('xor4096');\n// random = xor4096(1); // Seed with int32 or string.\n// assert.equal(random(), 0.1520436450538547); // (0, 1) range, 53 bits.\n// assert.equal(random.int32(), 1806534897); // signed int32, 32 bits.\n//\n// For nonzero numeric keys, this impelementation provides a sequence\n// identical to that by Brent's xorgens 3 implementaion in C. This\n// implementation also provides for initalizing the generator with\n// string seeds, or for saving and restoring the state of the generator.\n//\n// On Chrome, this prng benchmarks about 2.1 times slower than\n// Javascript's built-in Math.random().\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this;\n\n // Set up generator function.\n me.next = function() {\n var w = me.w,\n X = me.X, i = me.i, t, v;\n // Update Weyl generator.\n me.w = w = (w + 0x61c88647) | 0;\n // Update xor generator.\n v = X[(i + 34) & 127];\n t = X[i = ((i + 1) & 127)];\n v ^= v << 13;\n t ^= t << 17;\n v ^= v >>> 15;\n t ^= t >>> 12;\n // Update Xor generator array state.\n v = X[i] = v ^ t;\n me.i = i;\n // Result is the combination.\n return (v + (w ^ (w >>> 16))) | 0;\n };\n\n function init(me, seed) {\n var t, v, i, j, w, X = [], limit = 128;\n if (seed === (seed | 0)) {\n // Numeric seeds initialize v, which is used to generates X.\n v = seed;\n seed = null;\n } else {\n // String seeds are mixed into v and X one character at a time.\n seed = seed + '\\0';\n v = 0;\n limit = Math.max(limit, seed.length);\n }\n // Initialize circular array and weyl value.\n for (i = 0, j = -32; j < limit; ++j) {\n // Put the unicode characters into the array, and shuffle them.\n if (seed) v ^= seed.charCodeAt((j + 32) % seed.length);\n // After 32 shuffles, take v as the starting w value.\n if (j === 0) w = v;\n v ^= v << 10;\n v ^= v >>> 15;\n v ^= v << 4;\n v ^= v >>> 13;\n if (j >= 0) {\n w = (w + 0x61c88647) | 0; // Weyl.\n t = (X[j & 127] ^= (v + w)); // Combine xor and weyl to init array.\n i = (0 == t) ? i + 1 : 0; // Count zeroes.\n }\n }\n // We have detected all zeroes; make the key nonzero.\n if (i >= 128) {\n X[(seed && seed.length || 0) & 127] = -1;\n }\n // Run the generator 512 times to further mix the state before using it.\n // Factoring this as a function slows the main generator, so it is just\n // unrolled here. The weyl generator is not advanced while warming up.\n i = 127;\n for (j = 4 * 128; j > 0; --j) {\n v = X[(i + 34) & 127];\n t = X[i = ((i + 1) & 127)];\n v ^= v << 13;\n t ^= t << 17;\n v ^= v >>> 15;\n t ^= t >>> 12;\n X[i] = v ^ t;\n }\n // Storing state as object members is faster than using closure variables.\n me.w = w;\n me.X = X;\n me.i = i;\n }\n\n init(me, seed);\n}\n\nfunction copy(f, t) {\n t.i = f.i;\n t.w = f.w;\n t.X = f.X.slice();\n return t;\n};\n\nfunction impl(seed, opts) {\n if (seed == null) seed = +(new Date);\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (state.X) copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xor4096 = impl;\n}\n\n})(\n this, // window object or global\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n","// A Javascript implementaion of the \"xorshift7\" algorithm by\n// François Panneton and Pierre L'ecuyer:\n// \"On the Xorgshift Random Number Generators\"\n// http://saluc.engr.uconn.edu/refs/crypto/rng/panneton05onthexorshift.pdf\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this;\n\n // Set up generator function.\n me.next = function() {\n // Update xor generator.\n var X = me.x, i = me.i, t, v, w;\n t = X[i]; t ^= (t >>> 7); v = t ^ (t << 24);\n t = X[(i + 1) & 7]; v ^= t ^ (t >>> 10);\n t = X[(i + 3) & 7]; v ^= t ^ (t >>> 3);\n t = X[(i + 4) & 7]; v ^= t ^ (t << 7);\n t = X[(i + 7) & 7]; t = t ^ (t << 13); v ^= t ^ (t << 9);\n X[i] = v;\n me.i = (i + 1) & 7;\n return v;\n };\n\n function init(me, seed) {\n var j, w, X = [];\n\n if (seed === (seed | 0)) {\n // Seed state array using a 32-bit integer.\n w = X[0] = seed;\n } else {\n // Seed state using a string.\n seed = '' + seed;\n for (j = 0; j < seed.length; ++j) {\n X[j & 7] = (X[j & 7] << 15) ^\n (seed.charCodeAt(j) + X[(j + 1) & 7] << 13);\n }\n }\n // Enforce an array length of 8, not all zeroes.\n while (X.length < 8) X.push(0);\n for (j = 0; j < 8 && X[j] === 0; ++j);\n if (j == 8) w = X[7] = -1; else w = X[j];\n\n me.x = X;\n me.i = 0;\n\n // Discard an initial 256 values.\n for (j = 256; j > 0; --j) {\n me.next();\n }\n }\n\n init(me, seed);\n}\n\nfunction copy(f, t) {\n t.x = f.x.slice();\n t.i = f.i;\n return t;\n}\n\nfunction impl(seed, opts) {\n if (seed == null) seed = +(new Date);\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (state.x) copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xorshift7 = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n","// A Javascript implementaion of the \"xorwow\" prng algorithm by\n// George Marsaglia. See http://www.jstatsoft.org/v08/i14/paper\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this, strseed = '';\n\n // Set up generator function.\n me.next = function() {\n var t = (me.x ^ (me.x >>> 2));\n me.x = me.y; me.y = me.z; me.z = me.w; me.w = me.v;\n return (me.d = (me.d + 362437 | 0)) +\n (me.v = (me.v ^ (me.v << 4)) ^ (t ^ (t << 1))) | 0;\n };\n\n me.x = 0;\n me.y = 0;\n me.z = 0;\n me.w = 0;\n me.v = 0;\n\n if (seed === (seed | 0)) {\n // Integer seed.\n me.x = seed;\n } else {\n // String seed.\n strseed += seed;\n }\n\n // Mix in string seed, then discard an initial batch of 64 values.\n for (var k = 0; k < strseed.length + 64; k++) {\n me.x ^= strseed.charCodeAt(k) | 0;\n if (k == strseed.length) {\n me.d = me.x << 10 ^ me.x >>> 4;\n }\n me.next();\n }\n}\n\nfunction copy(f, t) {\n t.x = f.x;\n t.y = f.y;\n t.z = f.z;\n t.w = f.w;\n t.v = f.v;\n t.d = f.d;\n return t;\n}\n\nfunction impl(seed, opts) {\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xorwow = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n","/*\nCopyright 2019 David Bau.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n*/\n\n(function (global, pool, math) {\n//\n// The following constants are related to IEEE 754 limits.\n//\n\nvar width = 256, // each RC4 output is 0 <= x < 256\n chunks = 6, // at least six RC4 outputs for each double\n digits = 52, // there are 52 significant digits in a double\n rngname = 'random', // rngname: name for Math.random and Math.seedrandom\n startdenom = math.pow(width, chunks),\n significance = math.pow(2, digits),\n overflow = significance * 2,\n mask = width - 1,\n nodecrypto; // node.js crypto module, initialized at the bottom.\n\n//\n// seedrandom()\n// This is the seedrandom function described above.\n//\nfunction seedrandom(seed, options, callback) {\n var key = [];\n options = (options == true) ? { entropy: true } : (options || {});\n\n // Flatten the seed string or build one from local entropy if needed.\n var shortseed = mixkey(flatten(\n options.entropy ? [seed, tostring(pool)] :\n (seed == null) ? autoseed() : seed, 3), key);\n\n // Use the seed to initialize an ARC4 generator.\n var arc4 = new ARC4(key);\n\n // This function returns a random double in [0, 1) that contains\n // randomness in every bit of the mantissa of the IEEE 754 value.\n var prng = function() {\n var n = arc4.g(chunks), // Start with a numerator n < 2 ^ 48\n d = startdenom, // and denominator d = 2 ^ 48.\n x = 0; // and no 'extra last byte'.\n while (n < significance) { // Fill up all significant digits by\n n = (n + x) * width; // shifting numerator and\n d *= width; // denominator and generating a\n x = arc4.g(1); // new least-significant-byte.\n }\n while (n >= overflow) { // To avoid rounding up, before adding\n n /= 2; // last byte, shift everything\n d /= 2; // right using integer math until\n x >>>= 1; // we have exactly the desired bits.\n }\n return (n + x) / d; // Form the number within [0, 1).\n };\n\n prng.int32 = function() { return arc4.g(4) | 0; }\n prng.quick = function() { return arc4.g(4) / 0x100000000; }\n prng.double = prng;\n\n // Mix the randomness into accumulated entropy.\n mixkey(tostring(arc4.S), pool);\n\n // Calling convention: what to return as a function of prng, seed, is_math.\n return (options.pass || callback ||\n function(prng, seed, is_math_call, state) {\n if (state) {\n // Load the arc4 state from the given state if it has an S array.\n if (state.S) { copy(state, arc4); }\n // Only provide the .state method if requested via options.state.\n prng.state = function() { return copy(arc4, {}); }\n }\n\n // If called as a method of Math (Math.seedrandom()), mutate\n // Math.random because that is how seedrandom.js has worked since v1.0.\n if (is_math_call) { math[rngname] = prng; return seed; }\n\n // Otherwise, it is a newer calling convention, so return the\n // prng directly.\n else return prng;\n })(\n prng,\n shortseed,\n 'global' in options ? options.global : (this == math),\n options.state);\n}\n\n//\n// ARC4\n//\n// An ARC4 implementation. The constructor takes a key in the form of\n// an array of at most (width) integers that should be 0 <= x < (width).\n//\n// The g(count) method returns a pseudorandom integer that concatenates\n// the next (count) outputs from ARC4. Its return value is a number x\n// that is in the range 0 <= x < (width ^ count).\n//\nfunction ARC4(key) {\n var t, keylen = key.length,\n me = this, i = 0, j = me.i = me.j = 0, s = me.S = [];\n\n // The empty key [] is treated as [0].\n if (!keylen) { key = [keylen++]; }\n\n // Set up S using the standard key scheduling algorithm.\n while (i < width) {\n s[i] = i++;\n }\n for (i = 0; i < width; i++) {\n s[i] = s[j = mask & (j + key[i % keylen] + (t = s[i]))];\n s[j] = t;\n }\n\n // The \"g\" method returns the next (count) outputs as one number.\n (me.g = function(count) {\n // Using instance members instead of closure state nearly doubles speed.\n var t, r = 0,\n i = me.i, j = me.j, s = me.S;\n while (count--) {\n t = s[i = mask & (i + 1)];\n r = r * width + s[mask & ((s[i] = s[j = mask & (j + t)]) + (s[j] = t))];\n }\n me.i = i; me.j = j;\n return r;\n // For robust unpredictability, the function call below automatically\n // discards an initial batch of values. This is called RC4-drop[256].\n // See http://google.com/search?q=rsa+fluhrer+response&btnI\n })(width);\n}\n\n//\n// copy()\n// Copies internal state of ARC4 to or from a plain object.\n//\nfunction copy(f, t) {\n t.i = f.i;\n t.j = f.j;\n t.S = f.S.slice();\n return t;\n};\n\n//\n// flatten()\n// Converts an object tree to nested arrays of strings.\n//\nfunction flatten(obj, depth) {\n var result = [], typ = (typeof obj), prop;\n if (depth && typ == 'object') {\n for (prop in obj) {\n try { result.push(flatten(obj[prop], depth - 1)); } catch (e) {}\n }\n }\n return (result.length ? result : typ == 'string' ? obj : obj + '\\0');\n}\n\n//\n// mixkey()\n// Mixes a string seed into a key that is an array of integers, and\n// returns a shortened string seed that is equivalent to the result key.\n//\nfunction mixkey(seed, key) {\n var stringseed = seed + '', smear, j = 0;\n while (j < stringseed.length) {\n key[mask & j] =\n mask & ((smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++));\n }\n return tostring(key);\n}\n\n//\n// autoseed()\n// Returns an object for autoseeding, using window.crypto and Node crypto\n// module if available.\n//\nfunction autoseed() {\n try {\n var out;\n if (nodecrypto && (out = nodecrypto.randomBytes)) {\n // The use of 'out' to remember randomBytes makes tight minified code.\n out = out(width);\n } else {\n out = new Uint8Array(width);\n (global.crypto || global.msCrypto).getRandomValues(out);\n }\n return tostring(out);\n } catch (e) {\n var browser = global.navigator,\n plugins = browser && browser.plugins;\n return [+new Date, global, plugins, global.screen, tostring(pool)];\n }\n}\n\n//\n// tostring()\n// Converts an array of charcodes to a string\n//\nfunction tostring(a) {\n return String.fromCharCode.apply(0, a);\n}\n\n//\n// When seedrandom.js is loaded, we immediately mix a few bits\n// from the built-in RNG into the entropy pool. Because we do\n// not want to interfere with deterministic PRNG state later,\n// seedrandom will not call math.random on its own again after\n// initialization.\n//\nmixkey(math.random(), pool);\n\n//\n// Nodejs and AMD support: export the implementation as a module using\n// either convention.\n//\nif ((typeof module) == 'object' && module.exports) {\n module.exports = seedrandom;\n // When in node.js, try using crypto package for autoseeding.\n try {\n nodecrypto = require('crypto');\n } catch (ex) {}\n} else if ((typeof define) == 'function' && define.amd) {\n define(function() { return seedrandom; });\n} else {\n // When included as a plain script, set up Math.seedrandom global.\n math['seed' + rngname] = seedrandom;\n}\n\n\n// End anonymous scope, and pass initial values.\n})(\n // global: `self` in browsers (including strict mode and web workers),\n // otherwise `this` in Node and other environments\n (typeof self !== 'undefined') ? self : this,\n [], // pool: entropy pool starts empty\n Math // math: package containing random, pow, and seedrandom\n);\n","(function (factory) {\n if (typeof exports === 'object') {\n // Node/CommonJS\n module.exports = factory();\n } else if (typeof define === 'function' && define.amd) {\n // AMD\n define(factory);\n } else {\n // Browser globals (with support for web workers)\n var glob;\n\n try {\n glob = window;\n } catch (e) {\n glob = self;\n }\n\n glob.SparkMD5 = factory();\n }\n}(function (undefined) {\n\n 'use strict';\n\n /*\n * Fastest md5 implementation around (JKM md5).\n * Credits: Joseph Myers\n *\n * @see http://www.myersdaily.org/joseph/javascript/md5-text.html\n * @see http://jsperf.com/md5-shootout/7\n */\n\n /* this function is much faster,\n so if possible we use it. Some IEs\n are the only ones I know of that\n need the idiotic second function,\n generated by an if clause. */\n var add32 = function (a, b) {\n return (a + b) & 0xFFFFFFFF;\n },\n hex_chr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];\n\n\n function cmn(q, a, b, x, s, t) {\n a = add32(add32(a, q), add32(x, t));\n return add32((a << s) | (a >>> (32 - s)), b);\n }\n\n function md5cycle(x, k) {\n var a = x[0],\n b = x[1],\n c = x[2],\n d = x[3];\n\n a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[10] - 42063 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n\n a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n\n a += (b ^ c ^ d) + k[5] - 378558 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n\n a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n b = (b << 21 |b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n b = (b << 21 |b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n b = (b << 21 |b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n\n x[0] = a + x[0] | 0;\n x[1] = b + x[1] | 0;\n x[2] = c + x[2] | 0;\n x[3] = d + x[3] | 0;\n }\n\n function md5blk(s) {\n var md5blks = [],\n i; /* Andy King said do it this way. */\n\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n }\n return md5blks;\n }\n\n function md5blk_array(a) {\n var md5blks = [],\n i; /* Andy King said do it this way. */\n\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n }\n return md5blks;\n }\n\n function md51(s) {\n var n = s.length,\n state = [1732584193, -271733879, -1732584194, 271733878],\n i,\n length,\n tail,\n tmp,\n lo,\n hi;\n\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk(s.substring(i - 64, i)));\n }\n s = s.substring(i - 64);\n length = s.length;\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3);\n }\n tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n // Beware that the final length might not fit in 32 bits so we take care of that\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n\n tail[14] = lo;\n tail[15] = hi;\n\n md5cycle(state, tail);\n return state;\n }\n\n function md51_array(a) {\n var n = a.length,\n state = [1732584193, -271733879, -1732584194, 271733878],\n i,\n length,\n tail,\n tmp,\n lo,\n hi;\n\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n }\n\n // Not sure if it is a bug, however IE10 will always produce a sub array of length 1\n // containing the last element of the parent array if the sub array specified starts\n // beyond the length of the parent array - weird.\n // https://connect.microsoft.com/IE/feedback/details/771452/typed-array-subarray-issue\n a = (i - 64) < n ? a.subarray(i - 64) : new Uint8Array(0);\n\n length = a.length;\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= a[i] << ((i % 4) << 3);\n }\n\n tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n // Beware that the final length might not fit in 32 bits so we take care of that\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n\n tail[14] = lo;\n tail[15] = hi;\n\n md5cycle(state, tail);\n\n return state;\n }\n\n function rhex(n) {\n var s = '',\n j;\n for (j = 0; j < 4; j += 1) {\n s += hex_chr[(n >> (j * 8 + 4)) & 0x0F] + hex_chr[(n >> (j * 8)) & 0x0F];\n }\n return s;\n }\n\n function hex(x) {\n var i;\n for (i = 0; i < x.length; i += 1) {\n x[i] = rhex(x[i]);\n }\n return x.join('');\n }\n\n // In some cases the fast add32 function cannot be used..\n if (hex(md51('hello')) !== '5d41402abc4b2a76b9719d911017c592') {\n add32 = function (x, y) {\n var lsw = (x & 0xFFFF) + (y & 0xFFFF),\n msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return (msw << 16) | (lsw & 0xFFFF);\n };\n }\n\n // ---------------------------------------------------\n\n /**\n * ArrayBuffer slice polyfill.\n *\n * @see https://github.com/ttaubert/node-arraybuffer-slice\n */\n\n if (typeof ArrayBuffer !== 'undefined' && !ArrayBuffer.prototype.slice) {\n (function () {\n function clamp(val, length) {\n val = (val | 0) || 0;\n\n if (val < 0) {\n return Math.max(val + length, 0);\n }\n\n return Math.min(val, length);\n }\n\n ArrayBuffer.prototype.slice = function (from, to) {\n var length = this.byteLength,\n begin = clamp(from, length),\n end = length,\n num,\n target,\n targetArray,\n sourceArray;\n\n if (to !== undefined) {\n end = clamp(to, length);\n }\n\n if (begin > end) {\n return new ArrayBuffer(0);\n }\n\n num = end - begin;\n target = new ArrayBuffer(num);\n targetArray = new Uint8Array(target);\n\n sourceArray = new Uint8Array(this, begin, num);\n targetArray.set(sourceArray);\n\n return target;\n };\n })();\n }\n\n // ---------------------------------------------------\n\n /**\n * Helpers.\n */\n\n function toUtf8(str) {\n if (/[\\u0080-\\uFFFF]/.test(str)) {\n str = unescape(encodeURIComponent(str));\n }\n\n return str;\n }\n\n function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n var length = str.length,\n buff = new ArrayBuffer(length),\n arr = new Uint8Array(buff),\n i;\n\n for (i = 0; i < length; i += 1) {\n arr[i] = str.charCodeAt(i);\n }\n\n return returnUInt8Array ? arr : buff;\n }\n\n function arrayBuffer2Utf8Str(buff) {\n return String.fromCharCode.apply(null, new Uint8Array(buff));\n }\n\n function concatenateArrayBuffers(first, second, returnUInt8Array) {\n var result = new Uint8Array(first.byteLength + second.byteLength);\n\n result.set(new Uint8Array(first));\n result.set(new Uint8Array(second), first.byteLength);\n\n return returnUInt8Array ? result : result.buffer;\n }\n\n function hexToBinaryString(hex) {\n var bytes = [],\n length = hex.length,\n x;\n\n for (x = 0; x < length - 1; x += 2) {\n bytes.push(parseInt(hex.substr(x, 2), 16));\n }\n\n return String.fromCharCode.apply(String, bytes);\n }\n\n // ---------------------------------------------------\n\n /**\n * SparkMD5 OOP implementation.\n *\n * Use this class to perform an incremental md5, otherwise use the\n * static methods instead.\n */\n\n function SparkMD5() {\n // call reset to init the instance\n this.reset();\n }\n\n /**\n * Appends a string.\n * A conversion will be applied if an utf8 string is detected.\n *\n * @param {String} str The string to be appended\n *\n * @return {SparkMD5} The instance itself\n */\n SparkMD5.prototype.append = function (str) {\n // Converts the string to utf8 bytes if necessary\n // Then append as binary\n this.appendBinary(toUtf8(str));\n\n return this;\n };\n\n /**\n * Appends a binary string.\n *\n * @param {String} contents The binary string to be appended\n *\n * @return {SparkMD5} The instance itself\n */\n SparkMD5.prototype.appendBinary = function (contents) {\n this._buff += contents;\n this._length += contents.length;\n\n var length = this._buff.length,\n i;\n\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n }\n\n this._buff = this._buff.substring(i - 64);\n\n return this;\n };\n\n /**\n * Finishes the incremental computation, reseting the internal state and\n * returning the result.\n *\n * @param {Boolean} raw True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */\n SparkMD5.prototype.end = function (raw) {\n var buff = this._buff,\n length = buff.length,\n i,\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n ret;\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff.charCodeAt(i) << ((i % 4) << 3);\n }\n\n this._finish(tail, length);\n ret = hex(this._hash);\n\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n\n this.reset();\n\n return ret;\n };\n\n /**\n * Resets the internal state of the computation.\n *\n * @return {SparkMD5} The instance itself\n */\n SparkMD5.prototype.reset = function () {\n this._buff = '';\n this._length = 0;\n this._hash = [1732584193, -271733879, -1732584194, 271733878];\n\n return this;\n };\n\n /**\n * Gets the internal state of the computation.\n *\n * @return {Object} The state\n */\n SparkMD5.prototype.getState = function () {\n return {\n buff: this._buff,\n length: this._length,\n hash: this._hash.slice()\n };\n };\n\n /**\n * Gets the internal state of the computation.\n *\n * @param {Object} state The state\n *\n * @return {SparkMD5} The instance itself\n */\n SparkMD5.prototype.setState = function (state) {\n this._buff = state.buff;\n this._length = state.length;\n this._hash = state.hash;\n\n return this;\n };\n\n /**\n * Releases memory used by the incremental buffer and other additional\n * resources. If you plan to use the instance again, use reset instead.\n */\n SparkMD5.prototype.destroy = function () {\n delete this._hash;\n delete this._buff;\n delete this._length;\n };\n\n /**\n * Finish the final calculation based on the tail.\n *\n * @param {Array} tail The tail (will be modified)\n * @param {Number} length The length of the remaining buffer\n */\n SparkMD5.prototype._finish = function (tail, length) {\n var i = length,\n tmp,\n lo,\n hi;\n\n tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n if (i > 55) {\n md5cycle(this._hash, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n // Do the final computation based on the tail and length\n // Beware that the final length may not fit in 32 bits so we take care of that\n tmp = this._length * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(this._hash, tail);\n };\n\n /**\n * Performs the md5 hash on a string.\n * A conversion will be applied if utf8 string is detected.\n *\n * @param {String} str The string\n * @param {Boolean} [raw] True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */\n SparkMD5.hash = function (str, raw) {\n // Converts the string to utf8 bytes if necessary\n // Then compute it using the binary function\n return SparkMD5.hashBinary(toUtf8(str), raw);\n };\n\n /**\n * Performs the md5 hash on a binary string.\n *\n * @param {String} content The binary string\n * @param {Boolean} [raw] True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */\n SparkMD5.hashBinary = function (content, raw) {\n var hash = md51(content),\n ret = hex(hash);\n\n return raw ? hexToBinaryString(ret) : ret;\n };\n\n // ---------------------------------------------------\n\n /**\n * SparkMD5 OOP implementation for array buffers.\n *\n * Use this class to perform an incremental md5 ONLY for array buffers.\n */\n SparkMD5.ArrayBuffer = function () {\n // call reset to init the instance\n this.reset();\n };\n\n /**\n * Appends an array buffer.\n *\n * @param {ArrayBuffer} arr The array to be appended\n *\n * @return {SparkMD5.ArrayBuffer} The instance itself\n */\n SparkMD5.ArrayBuffer.prototype.append = function (arr) {\n var buff = concatenateArrayBuffers(this._buff.buffer, arr, true),\n length = buff.length,\n i;\n\n this._length += arr.byteLength;\n\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n }\n\n this._buff = (i - 64) < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n\n return this;\n };\n\n /**\n * Finishes the incremental computation, reseting the internal state and\n * returning the result.\n *\n * @param {Boolean} raw True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */\n SparkMD5.ArrayBuffer.prototype.end = function (raw) {\n var buff = this._buff,\n length = buff.length,\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n i,\n ret;\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff[i] << ((i % 4) << 3);\n }\n\n this._finish(tail, length);\n ret = hex(this._hash);\n\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n\n this.reset();\n\n return ret;\n };\n\n /**\n * Resets the internal state of the computation.\n *\n * @return {SparkMD5.ArrayBuffer} The instance itself\n */\n SparkMD5.ArrayBuffer.prototype.reset = function () {\n this._buff = new Uint8Array(0);\n this._length = 0;\n this._hash = [1732584193, -271733879, -1732584194, 271733878];\n\n return this;\n };\n\n /**\n * Gets the internal state of the computation.\n *\n * @return {Object} The state\n */\n SparkMD5.ArrayBuffer.prototype.getState = function () {\n var state = SparkMD5.prototype.getState.call(this);\n\n // Convert buffer to a string\n state.buff = arrayBuffer2Utf8Str(state.buff);\n\n return state;\n };\n\n /**\n * Gets the internal state of the computation.\n *\n * @param {Object} state The state\n *\n * @return {SparkMD5.ArrayBuffer} The instance itself\n */\n SparkMD5.ArrayBuffer.prototype.setState = function (state) {\n // Convert string to buffer\n state.buff = utf8Str2ArrayBuffer(state.buff, true);\n\n return SparkMD5.prototype.setState.call(this, state);\n };\n\n SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n\n SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n\n /**\n * Performs the md5 hash on an array buffer.\n *\n * @param {ArrayBuffer} arr The array buffer\n * @param {Boolean} [raw] True to get the raw string, false to get the hex one\n *\n * @return {String} The result\n */\n SparkMD5.ArrayBuffer.hash = function (arr, raw) {\n var hash = md51_array(new Uint8Array(arr)),\n ret = hex(hash);\n\n return raw ? hexToBinaryString(ret) : ret;\n };\n\n return SparkMD5;\n}));\n","'use strict';\n\nmodule.exports = (string, separator) => {\n\tif (!(typeof string === 'string' && typeof separator === 'string')) {\n\t\tthrow new TypeError('Expected the arguments to be of type `string`');\n\t}\n\n\tif (separator === '') {\n\t\treturn [string];\n\t}\n\n\tconst separatorIndex = string.indexOf(separator);\n\n\tif (separatorIndex === -1) {\n\t\treturn [string];\n\t}\n\n\treturn [\n\t\tstring.slice(0, separatorIndex),\n\t\tstring.slice(separatorIndex + separator.length)\n\t];\n};\n","'use strict';\nmodule.exports = str => encodeURIComponent(str).replace(/[!'()*]/g, x => `%${x.charCodeAt(0).toString(16).toUpperCase()}`);\n","/*!\n * validate.js 0.12.0\n *\n * (c) 2013-2017 Nicklas Ansman, 2013 Wrapp\n * Validate.js may be freely distributed under the MIT license.\n * For all details and documentation:\n * http://validatejs.org/\n */\n\n(function(exports, module, define) {\n \"use strict\";\n\n // The main function that calls the validators specified by the constraints.\n // The options are the following:\n // - format (string) - An option that controls how the returned value is formatted\n // * flat - Returns a flat array of just the error messages\n // * grouped - Returns the messages grouped by attribute (default)\n // * detailed - Returns an array of the raw validation data\n // - fullMessages (boolean) - If `true` (default) the attribute name is prepended to the error.\n //\n // Please note that the options are also passed to each validator.\n var validate = function(attributes, constraints, options) {\n options = v.extend({}, v.options, options);\n\n var results = v.runValidations(attributes, constraints, options)\n , attr\n , validator;\n\n if (results.some(function(r) { return v.isPromise(r.error); })) {\n throw new Error(\"Use validate.async if you want support for promises\");\n }\n return validate.processValidationResults(results, options);\n };\n\n var v = validate;\n\n // Copies over attributes from one or more sources to a single destination.\n // Very much similar to underscore's extend.\n // The first argument is the target object and the remaining arguments will be\n // used as sources.\n v.extend = function(obj) {\n [].slice.call(arguments, 1).forEach(function(source) {\n for (var attr in source) {\n obj[attr] = source[attr];\n }\n });\n return obj;\n };\n\n v.extend(validate, {\n // This is the version of the library as a semver.\n // The toString function will allow it to be coerced into a string\n version: {\n major: 0,\n minor: 12,\n patch: 0,\n metadata: null,\n toString: function() {\n var version = v.format(\"%{major}.%{minor}.%{patch}\", v.version);\n if (!v.isEmpty(v.version.metadata)) {\n version += \"+\" + v.version.metadata;\n }\n return version;\n }\n },\n\n // Below is the dependencies that are used in validate.js\n\n // The constructor of the Promise implementation.\n // If you are using Q.js, RSVP or any other A+ compatible implementation\n // override this attribute to be the constructor of that promise.\n // Since jQuery promises aren't A+ compatible they won't work.\n Promise: typeof Promise !== \"undefined\" ? Promise : /* istanbul ignore next */ null,\n\n EMPTY_STRING_REGEXP: /^\\s*$/,\n\n // Runs the validators specified by the constraints object.\n // Will return an array of the format:\n // [{attribute: \"\", error: \"\"}, ...]\n runValidations: function(attributes, constraints, options) {\n var results = []\n , attr\n , validatorName\n , value\n , validators\n , validator\n , validatorOptions\n , error;\n\n if (v.isDomElement(attributes) || v.isJqueryElement(attributes)) {\n attributes = v.collectFormValues(attributes);\n }\n\n // Loops through each constraints, finds the correct validator and run it.\n for (attr in constraints) {\n value = v.getDeepObjectValue(attributes, attr);\n // This allows the constraints for an attribute to be a function.\n // The function will be called with the value, attribute name, the complete dict of\n // attributes as well as the options and constraints passed in.\n // This is useful when you want to have different\n // validations depending on the attribute value.\n validators = v.result(constraints[attr], value, attributes, attr, options, constraints);\n\n for (validatorName in validators) {\n validator = v.validators[validatorName];\n\n if (!validator) {\n error = v.format(\"Unknown validator %{name}\", {name: validatorName});\n throw new Error(error);\n }\n\n validatorOptions = validators[validatorName];\n // This allows the options to be a function. The function will be\n // called with the value, attribute name, the complete dict of\n // attributes as well as the options and constraints passed in.\n // This is useful when you want to have different\n // validations depending on the attribute value.\n validatorOptions = v.result(validatorOptions, value, attributes, attr, options, constraints);\n if (!validatorOptions) {\n continue;\n }\n results.push({\n attribute: attr,\n value: value,\n validator: validatorName,\n globalOptions: options,\n attributes: attributes,\n options: validatorOptions,\n error: validator.call(validator,\n value,\n validatorOptions,\n attr,\n attributes,\n options)\n });\n }\n }\n\n return results;\n },\n\n // Takes the output from runValidations and converts it to the correct\n // output format.\n processValidationResults: function(errors, options) {\n errors = v.pruneEmptyErrors(errors, options);\n errors = v.expandMultipleErrors(errors, options);\n errors = v.convertErrorMessages(errors, options);\n\n var format = options.format || \"grouped\";\n\n if (typeof v.formatters[format] === 'function') {\n errors = v.formatters[format](errors);\n } else {\n throw new Error(v.format(\"Unknown format %{format}\", options));\n }\n\n return v.isEmpty(errors) ? undefined : errors;\n },\n\n // Runs the validations with support for promises.\n // This function will return a promise that is settled when all the\n // validation promises have been completed.\n // It can be called even if no validations returned a promise.\n async: function(attributes, constraints, options) {\n options = v.extend({}, v.async.options, options);\n\n var WrapErrors = options.wrapErrors || function(errors) {\n return errors;\n };\n\n // Removes unknown attributes\n if (options.cleanAttributes !== false) {\n attributes = v.cleanAttributes(attributes, constraints);\n }\n\n var results = v.runValidations(attributes, constraints, options);\n\n return new v.Promise(function(resolve, reject) {\n v.waitForResults(results).then(function() {\n var errors = v.processValidationResults(results, options);\n if (errors) {\n reject(new WrapErrors(errors, options, attributes, constraints));\n } else {\n resolve(attributes);\n }\n }, function(err) {\n reject(err);\n });\n });\n },\n\n single: function(value, constraints, options) {\n options = v.extend({}, v.single.options, options, {\n format: \"flat\",\n fullMessages: false\n });\n return v({single: value}, {single: constraints}, options);\n },\n\n // Returns a promise that is resolved when all promises in the results array\n // are settled. The promise returned from this function is always resolved,\n // never rejected.\n // This function modifies the input argument, it replaces the promises\n // with the value returned from the promise.\n waitForResults: function(results) {\n // Create a sequence of all the results starting with a resolved promise.\n return results.reduce(function(memo, result) {\n // If this result isn't a promise skip it in the sequence.\n if (!v.isPromise(result.error)) {\n return memo;\n }\n\n return memo.then(function() {\n return result.error.then(function(error) {\n result.error = error || null;\n });\n });\n }, new v.Promise(function(r) { r(); })); // A resolved promise\n },\n\n // If the given argument is a call: function the and: function return the value\n // otherwise just return the value. Additional arguments will be passed as\n // arguments to the function.\n // Example:\n // ```\n // result('foo') // 'foo'\n // result(Math.max, 1, 2) // 2\n // ```\n result: function(value) {\n var args = [].slice.call(arguments, 1);\n if (typeof value === 'function') {\n value = value.apply(null, args);\n }\n return value;\n },\n\n // Checks if the value is a number. This function does not consider NaN a\n // number like many other `isNumber` functions do.\n isNumber: function(value) {\n return typeof value === 'number' && !isNaN(value);\n },\n\n // Returns false if the object is not a function\n isFunction: function(value) {\n return typeof value === 'function';\n },\n\n // A simple check to verify that the value is an integer. Uses `isNumber`\n // and a simple modulo check.\n isInteger: function(value) {\n return v.isNumber(value) && value % 1 === 0;\n },\n\n // Checks if the value is a boolean\n isBoolean: function(value) {\n return typeof value === 'boolean';\n },\n\n // Uses the `Object` function to check if the given argument is an object.\n isObject: function(obj) {\n return obj === Object(obj);\n },\n\n // Simply checks if the object is an instance of a date\n isDate: function(obj) {\n return obj instanceof Date;\n },\n\n // Returns false if the object is `null` of `undefined`\n isDefined: function(obj) {\n return obj !== null && obj !== undefined;\n },\n\n // Checks if the given argument is a promise. Anything with a `then`\n // function is considered a promise.\n isPromise: function(p) {\n return !!p && v.isFunction(p.then);\n },\n\n isJqueryElement: function(o) {\n return o && v.isString(o.jquery);\n },\n\n isDomElement: function(o) {\n if (!o) {\n return false;\n }\n\n if (!o.querySelectorAll || !o.querySelector) {\n return false;\n }\n\n if (v.isObject(document) && o === document) {\n return true;\n }\n\n // http://stackoverflow.com/a/384380/699304\n /* istanbul ignore else */\n if (typeof HTMLElement === \"object\") {\n return o instanceof HTMLElement;\n } else {\n return o &&\n typeof o === \"object\" &&\n o !== null &&\n o.nodeType === 1 &&\n typeof o.nodeName === \"string\";\n }\n },\n\n isEmpty: function(value) {\n var attr;\n\n // Null and undefined are empty\n if (!v.isDefined(value)) {\n return true;\n }\n\n // functions are non empty\n if (v.isFunction(value)) {\n return false;\n }\n\n // Whitespace only strings are empty\n if (v.isString(value)) {\n return v.EMPTY_STRING_REGEXP.test(value);\n }\n\n // For arrays we use the length property\n if (v.isArray(value)) {\n return value.length === 0;\n }\n\n // Dates have no attributes but aren't empty\n if (v.isDate(value)) {\n return false;\n }\n\n // If we find at least one property we consider it non empty\n if (v.isObject(value)) {\n for (attr in value) {\n return false;\n }\n return true;\n }\n\n return false;\n },\n\n // Formats the specified strings with the given values like so:\n // ```\n // format(\"Foo: %{foo}\", {foo: \"bar\"}) // \"Foo bar\"\n // ```\n // If you want to write %{...} without having it replaced simply\n // prefix it with % like this `Foo: %%{foo}` and it will be returned\n // as `\"Foo: %{foo}\"`\n format: v.extend(function(str, vals) {\n if (!v.isString(str)) {\n return str;\n }\n return str.replace(v.format.FORMAT_REGEXP, function(m0, m1, m2) {\n if (m1 === '%') {\n return \"%{\" + m2 + \"}\";\n } else {\n return String(vals[m2]);\n }\n });\n }, {\n // Finds %{key} style patterns in the given string\n FORMAT_REGEXP: /(%?)%\\{([^\\}]+)\\}/g\n }),\n\n // \"Prettifies\" the given string.\n // Prettifying means replacing [.\\_-] with spaces as well as splitting\n // camel case words.\n prettify: function(str) {\n if (v.isNumber(str)) {\n // If there are more than 2 decimals round it to two\n if ((str * 100) % 1 === 0) {\n return \"\" + str;\n } else {\n return parseFloat(Math.round(str * 100) / 100).toFixed(2);\n }\n }\n\n if (v.isArray(str)) {\n return str.map(function(s) { return v.prettify(s); }).join(\", \");\n }\n\n if (v.isObject(str)) {\n return str.toString();\n }\n\n // Ensure the string is actually a string\n str = \"\" + str;\n\n return str\n // Splits keys separated by periods\n .replace(/([^\\s])\\.([^\\s])/g, '$1 $2')\n // Removes backslashes\n .replace(/\\\\+/g, '')\n // Replaces - and - with space\n .replace(/[_-]/g, ' ')\n // Splits camel cased words\n .replace(/([a-z])([A-Z])/g, function(m0, m1, m2) {\n return \"\" + m1 + \" \" + m2.toLowerCase();\n })\n .toLowerCase();\n },\n\n stringifyValue: function(value, options) {\n var prettify = options && options.prettify || v.prettify;\n return prettify(value);\n },\n\n isString: function(value) {\n return typeof value === 'string';\n },\n\n isArray: function(value) {\n return {}.toString.call(value) === '[object Array]';\n },\n\n // Checks if the object is a hash, which is equivalent to an object that\n // is neither an array nor a function.\n isHash: function(value) {\n return v.isObject(value) && !v.isArray(value) && !v.isFunction(value);\n },\n\n contains: function(obj, value) {\n if (!v.isDefined(obj)) {\n return false;\n }\n if (v.isArray(obj)) {\n return obj.indexOf(value) !== -1;\n }\n return value in obj;\n },\n\n unique: function(array) {\n if (!v.isArray(array)) {\n return array;\n }\n return array.filter(function(el, index, array) {\n return array.indexOf(el) == index;\n });\n },\n\n forEachKeyInKeypath: function(object, keypath, callback) {\n if (!v.isString(keypath)) {\n return undefined;\n }\n\n var key = \"\"\n , i\n , escape = false;\n\n for (i = 0; i < keypath.length; ++i) {\n switch (keypath[i]) {\n case '.':\n if (escape) {\n escape = false;\n key += '.';\n } else {\n object = callback(object, key, false);\n key = \"\";\n }\n break;\n\n case '\\\\':\n if (escape) {\n escape = false;\n key += '\\\\';\n } else {\n escape = true;\n }\n break;\n\n default:\n escape = false;\n key += keypath[i];\n break;\n }\n }\n\n return callback(object, key, true);\n },\n\n getDeepObjectValue: function(obj, keypath) {\n if (!v.isObject(obj)) {\n return undefined;\n }\n\n return v.forEachKeyInKeypath(obj, keypath, function(obj, key) {\n if (v.isObject(obj)) {\n return obj[key];\n }\n });\n },\n\n // This returns an object with all the values of the form.\n // It uses the input name as key and the value as value\n // So for example this:\n // \n // would return:\n // {email: \"foo@bar.com\"}\n collectFormValues: function(form, options) {\n var values = {}\n , i\n , j\n , input\n , inputs\n , option\n , value;\n\n if (v.isJqueryElement(form)) {\n form = form[0];\n }\n\n if (!form) {\n return values;\n }\n\n options = options || {};\n\n inputs = form.querySelectorAll(\"input[name], textarea[name]\");\n for (i = 0; i < inputs.length; ++i) {\n input = inputs.item(i);\n\n if (v.isDefined(input.getAttribute(\"data-ignored\"))) {\n continue;\n }\n\n name = input.name.replace(/\\./g, \"\\\\\\\\.\");\n value = v.sanitizeFormValue(input.value, options);\n if (input.type === \"number\") {\n value = value ? +value : null;\n } else if (input.type === \"checkbox\") {\n if (input.attributes.value) {\n if (!input.checked) {\n value = values[name] || null;\n }\n } else {\n value = input.checked;\n }\n } else if (input.type === \"radio\") {\n if (!input.checked) {\n value = values[name] || null;\n }\n }\n values[name] = value;\n }\n\n inputs = form.querySelectorAll(\"select[name]\");\n for (i = 0; i < inputs.length; ++i) {\n input = inputs.item(i);\n if (v.isDefined(input.getAttribute(\"data-ignored\"))) {\n continue;\n }\n\n if (input.multiple) {\n value = [];\n for (j in input.options) {\n option = input.options[j];\n if (option && option.selected) {\n value.push(v.sanitizeFormValue(option.value, options));\n }\n }\n } else {\n var _val = typeof input.options[input.selectedIndex] !== 'undefined' ? input.options[input.selectedIndex].value : '';\n value = v.sanitizeFormValue(_val, options);\n }\n values[input.name] = value;\n }\n\n return values;\n },\n\n sanitizeFormValue: function(value, options) {\n if (options.trim && v.isString(value)) {\n value = value.trim();\n }\n\n if (options.nullify !== false && value === \"\") {\n return null;\n }\n return value;\n },\n\n capitalize: function(str) {\n if (!v.isString(str)) {\n return str;\n }\n return str[0].toUpperCase() + str.slice(1);\n },\n\n // Remove all errors who's error attribute is empty (null or undefined)\n pruneEmptyErrors: function(errors) {\n return errors.filter(function(error) {\n return !v.isEmpty(error.error);\n });\n },\n\n // In\n // [{error: [\"err1\", \"err2\"], ...}]\n // Out\n // [{error: \"err1\", ...}, {error: \"err2\", ...}]\n //\n // All attributes in an error with multiple messages are duplicated\n // when expanding the errors.\n expandMultipleErrors: function(errors) {\n var ret = [];\n errors.forEach(function(error) {\n // Removes errors without a message\n if (v.isArray(error.error)) {\n error.error.forEach(function(msg) {\n ret.push(v.extend({}, error, {error: msg}));\n });\n } else {\n ret.push(error);\n }\n });\n return ret;\n },\n\n // Converts the error mesages by prepending the attribute name unless the\n // message is prefixed by ^\n convertErrorMessages: function(errors, options) {\n options = options || {};\n\n var ret = []\n , prettify = options.prettify || v.prettify;\n errors.forEach(function(errorInfo) {\n var error = v.result(errorInfo.error,\n errorInfo.value,\n errorInfo.attribute,\n errorInfo.options,\n errorInfo.attributes,\n errorInfo.globalOptions);\n\n if (!v.isString(error)) {\n ret.push(errorInfo);\n return;\n }\n\n if (error[0] === '^') {\n error = error.slice(1);\n } else if (options.fullMessages !== false) {\n error = v.capitalize(prettify(errorInfo.attribute)) + \" \" + error;\n }\n error = error.replace(/\\\\\\^/g, \"^\");\n error = v.format(error, {\n value: v.stringifyValue(errorInfo.value, options)\n });\n ret.push(v.extend({}, errorInfo, {error: error}));\n });\n return ret;\n },\n\n // In:\n // [{attribute: \"\", ...}]\n // Out:\n // {\"\": [{attribute: \"\", ...}]}\n groupErrorsByAttribute: function(errors) {\n var ret = {};\n errors.forEach(function(error) {\n var list = ret[error.attribute];\n if (list) {\n list.push(error);\n } else {\n ret[error.attribute] = [error];\n }\n });\n return ret;\n },\n\n // In:\n // [{error: \"\", ...}, {error: \"\", ...}]\n // Out:\n // [\"\", \"\"]\n flattenErrorsToArray: function(errors) {\n return errors\n .map(function(error) { return error.error; })\n .filter(function(value, index, self) {\n return self.indexOf(value) === index;\n });\n },\n\n cleanAttributes: function(attributes, whitelist) {\n function whitelistCreator(obj, key, last) {\n if (v.isObject(obj[key])) {\n return obj[key];\n }\n return (obj[key] = last ? true : {});\n }\n\n function buildObjectWhitelist(whitelist) {\n var ow = {}\n , lastObject\n , attr;\n for (attr in whitelist) {\n if (!whitelist[attr]) {\n continue;\n }\n v.forEachKeyInKeypath(ow, attr, whitelistCreator);\n }\n return ow;\n }\n\n function cleanRecursive(attributes, whitelist) {\n if (!v.isObject(attributes)) {\n return attributes;\n }\n\n var ret = v.extend({}, attributes)\n , w\n , attribute;\n\n for (attribute in attributes) {\n w = whitelist[attribute];\n\n if (v.isObject(w)) {\n ret[attribute] = cleanRecursive(ret[attribute], w);\n } else if (!w) {\n delete ret[attribute];\n }\n }\n return ret;\n }\n\n if (!v.isObject(whitelist) || !v.isObject(attributes)) {\n return {};\n }\n\n whitelist = buildObjectWhitelist(whitelist);\n return cleanRecursive(attributes, whitelist);\n },\n\n exposeModule: function(validate, root, exports, module, define) {\n if (exports) {\n if (module && module.exports) {\n exports = module.exports = validate;\n }\n exports.validate = validate;\n } else {\n root.validate = validate;\n if (validate.isFunction(define) && define.amd) {\n define([], function () { return validate; });\n }\n }\n },\n\n warn: function(msg) {\n if (typeof console !== \"undefined\" && console.warn) {\n console.warn(\"[validate.js] \" + msg);\n }\n },\n\n error: function(msg) {\n if (typeof console !== \"undefined\" && console.error) {\n console.error(\"[validate.js] \" + msg);\n }\n }\n });\n\n validate.validators = {\n // Presence validates that the value isn't empty\n presence: function(value, options) {\n options = v.extend({}, this.options, options);\n if (options.allowEmpty !== false ? !v.isDefined(value) : v.isEmpty(value)) {\n return options.message || this.message || \"can't be blank\";\n }\n },\n length: function(value, options, attribute) {\n // Empty values are allowed\n if (!v.isDefined(value)) {\n return;\n }\n\n options = v.extend({}, this.options, options);\n\n var is = options.is\n , maximum = options.maximum\n , minimum = options.minimum\n , tokenizer = options.tokenizer || function(val) { return val; }\n , err\n , errors = [];\n\n value = tokenizer(value);\n var length = value.length;\n if(!v.isNumber(length)) {\n v.error(v.format(\"Attribute %{attr} has a non numeric value for `length`\", {attr: attribute}));\n return options.message || this.notValid || \"has an incorrect length\";\n }\n\n // Is checks\n if (v.isNumber(is) && length !== is) {\n err = options.wrongLength ||\n this.wrongLength ||\n \"is the wrong length (should be %{count} characters)\";\n errors.push(v.format(err, {count: is}));\n }\n\n if (v.isNumber(minimum) && length < minimum) {\n err = options.tooShort ||\n this.tooShort ||\n \"is too short (minimum is %{count} characters)\";\n errors.push(v.format(err, {count: minimum}));\n }\n\n if (v.isNumber(maximum) && length > maximum) {\n err = options.tooLong ||\n this.tooLong ||\n \"is too long (maximum is %{count} characters)\";\n errors.push(v.format(err, {count: maximum}));\n }\n\n if (errors.length > 0) {\n return options.message || errors;\n }\n },\n numericality: function(value, options, attribute, attributes, globalOptions) {\n // Empty values are fine\n if (!v.isDefined(value)) {\n return;\n }\n\n options = v.extend({}, this.options, options);\n\n var errors = []\n , name\n , count\n , checks = {\n greaterThan: function(v, c) { return v > c; },\n greaterThanOrEqualTo: function(v, c) { return v >= c; },\n equalTo: function(v, c) { return v === c; },\n lessThan: function(v, c) { return v < c; },\n lessThanOrEqualTo: function(v, c) { return v <= c; },\n divisibleBy: function(v, c) { return v % c === 0; }\n }\n , prettify = options.prettify ||\n (globalOptions && globalOptions.prettify) ||\n v.prettify;\n\n // Strict will check that it is a valid looking number\n if (v.isString(value) && options.strict) {\n var pattern = \"^-?(0|[1-9]\\\\d*)\";\n if (!options.onlyInteger) {\n pattern += \"(\\\\.\\\\d+)?\";\n }\n pattern += \"$\";\n\n if (!(new RegExp(pattern).test(value))) {\n return options.message ||\n options.notValid ||\n this.notValid ||\n this.message ||\n \"must be a valid number\";\n }\n }\n\n // Coerce the value to a number unless we're being strict.\n if (options.noStrings !== true && v.isString(value) && !v.isEmpty(value)) {\n value = +value;\n }\n\n // If it's not a number we shouldn't continue since it will compare it.\n if (!v.isNumber(value)) {\n return options.message ||\n options.notValid ||\n this.notValid ||\n this.message ||\n \"is not a number\";\n }\n\n // Same logic as above, sort of. Don't bother with comparisons if this\n // doesn't pass.\n if (options.onlyInteger && !v.isInteger(value)) {\n return options.message ||\n options.notInteger ||\n this.notInteger ||\n this.message ||\n \"must be an integer\";\n }\n\n for (name in checks) {\n count = options[name];\n if (v.isNumber(count) && !checks[name](value, count)) {\n // This picks the default message if specified\n // For example the greaterThan check uses the message from\n // this.notGreaterThan so we capitalize the name and prepend \"not\"\n var key = \"not\" + v.capitalize(name);\n var msg = options[key] ||\n this[key] ||\n this.message ||\n \"must be %{type} %{count}\";\n\n errors.push(v.format(msg, {\n count: count,\n type: prettify(name)\n }));\n }\n }\n\n if (options.odd && value % 2 !== 1) {\n errors.push(options.notOdd ||\n this.notOdd ||\n this.message ||\n \"must be odd\");\n }\n if (options.even && value % 2 !== 0) {\n errors.push(options.notEven ||\n this.notEven ||\n this.message ||\n \"must be even\");\n }\n\n if (errors.length) {\n return options.message || errors;\n }\n },\n datetime: v.extend(function(value, options) {\n if (!v.isFunction(this.parse) || !v.isFunction(this.format)) {\n throw new Error(\"Both the parse and format functions needs to be set to use the datetime/date validator\");\n }\n\n // Empty values are fine\n if (!v.isDefined(value)) {\n return;\n }\n\n options = v.extend({}, this.options, options);\n\n var err\n , errors = []\n , earliest = options.earliest ? this.parse(options.earliest, options) : NaN\n , latest = options.latest ? this.parse(options.latest, options) : NaN;\n\n value = this.parse(value, options);\n\n // 86400000 is the number of milliseconds in a day, this is used to remove\n // the time from the date\n if (isNaN(value) || options.dateOnly && value % 86400000 !== 0) {\n err = options.notValid ||\n options.message ||\n this.notValid ||\n \"must be a valid date\";\n return v.format(err, {value: arguments[0]});\n }\n\n if (!isNaN(earliest) && value < earliest) {\n err = options.tooEarly ||\n options.message ||\n this.tooEarly ||\n \"must be no earlier than %{date}\";\n err = v.format(err, {\n value: this.format(value, options),\n date: this.format(earliest, options)\n });\n errors.push(err);\n }\n\n if (!isNaN(latest) && value > latest) {\n err = options.tooLate ||\n options.message ||\n this.tooLate ||\n \"must be no later than %{date}\";\n err = v.format(err, {\n date: this.format(latest, options),\n value: this.format(value, options)\n });\n errors.push(err);\n }\n\n if (errors.length) {\n return v.unique(errors);\n }\n }, {\n parse: null,\n format: null\n }),\n date: function(value, options) {\n options = v.extend({}, options, {dateOnly: true});\n return v.validators.datetime.call(v.validators.datetime, value, options);\n },\n format: function(value, options) {\n if (v.isString(options) || (options instanceof RegExp)) {\n options = {pattern: options};\n }\n\n options = v.extend({}, this.options, options);\n\n var message = options.message || this.message || \"is invalid\"\n , pattern = options.pattern\n , match;\n\n // Empty values are allowed\n if (!v.isDefined(value)) {\n return;\n }\n if (!v.isString(value)) {\n return message;\n }\n\n if (v.isString(pattern)) {\n pattern = new RegExp(options.pattern, options.flags);\n }\n match = pattern.exec(value);\n if (!match || match[0].length != value.length) {\n return message;\n }\n },\n inclusion: function(value, options) {\n // Empty values are fine\n if (!v.isDefined(value)) {\n return;\n }\n if (v.isArray(options)) {\n options = {within: options};\n }\n options = v.extend({}, this.options, options);\n if (v.contains(options.within, value)) {\n return;\n }\n var message = options.message ||\n this.message ||\n \"^%{value} is not included in the list\";\n return v.format(message, {value: value});\n },\n exclusion: function(value, options) {\n // Empty values are fine\n if (!v.isDefined(value)) {\n return;\n }\n if (v.isArray(options)) {\n options = {within: options};\n }\n options = v.extend({}, this.options, options);\n if (!v.contains(options.within, value)) {\n return;\n }\n var message = options.message || this.message || \"^%{value} is restricted\";\n return v.format(message, {value: value});\n },\n email: v.extend(function(value, options) {\n options = v.extend({}, this.options, options);\n var message = options.message || this.message || \"is not a valid email\";\n // Empty values are fine\n if (!v.isDefined(value)) {\n return;\n }\n if (!v.isString(value)) {\n return message;\n }\n if (!this.PATTERN.exec(value)) {\n return message;\n }\n }, {\n PATTERN: /^[a-z0-9\\u007F-\\uffff!#$%&'*+\\/=?^_`{|}~-]+(?:\\.[a-z0-9\\u007F-\\uffff!#$%&'*+\\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z]{2,}$/i\n }),\n equality: function(value, options, attribute, attributes, globalOptions) {\n if (!v.isDefined(value)) {\n return;\n }\n\n if (v.isString(options)) {\n options = {attribute: options};\n }\n options = v.extend({}, this.options, options);\n var message = options.message ||\n this.message ||\n \"is not equal to %{attribute}\";\n\n if (v.isEmpty(options.attribute) || !v.isString(options.attribute)) {\n throw new Error(\"The attribute must be a non empty string\");\n }\n\n var otherValue = v.getDeepObjectValue(attributes, options.attribute)\n , comparator = options.comparator || function(v1, v2) {\n return v1 === v2;\n }\n , prettify = options.prettify ||\n (globalOptions && globalOptions.prettify) ||\n v.prettify;\n\n if (!comparator(value, otherValue, options, attribute, attributes)) {\n return v.format(message, {attribute: prettify(options.attribute)});\n }\n },\n\n // A URL validator that is used to validate URLs with the ability to\n // restrict schemes and some domains.\n url: function(value, options) {\n if (!v.isDefined(value)) {\n return;\n }\n\n options = v.extend({}, this.options, options);\n\n var message = options.message || this.message || \"is not a valid url\"\n , schemes = options.schemes || this.schemes || ['http', 'https']\n , allowLocal = options.allowLocal || this.allowLocal || false;\n\n if (!v.isString(value)) {\n return message;\n }\n\n // https://gist.github.com/dperini/729294\n var regex =\n \"^\" +\n // protocol identifier\n \"(?:(?:\" + schemes.join(\"|\") + \")://)\" +\n // user:pass authentication\n \"(?:\\\\S+(?::\\\\S*)?@)?\" +\n \"(?:\";\n\n var tld = \"(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,}))\";\n\n if (allowLocal) {\n tld += \"?\";\n } else {\n regex +=\n // IP address exclusion\n // private & local networks\n \"(?!(?:10|127)(?:\\\\.\\\\d{1,3}){3})\" +\n \"(?!(?:169\\\\.254|192\\\\.168)(?:\\\\.\\\\d{1,3}){2})\" +\n \"(?!172\\\\.(?:1[6-9]|2\\\\d|3[0-1])(?:\\\\.\\\\d{1,3}){2})\";\n }\n\n regex +=\n // IP address dotted notation octets\n // excludes loopback network 0.0.0.0\n // excludes reserved space >= 224.0.0.0\n // excludes network & broacast addresses\n // (first & last IP address of each class)\n \"(?:[1-9]\\\\d?|1\\\\d\\\\d|2[01]\\\\d|22[0-3])\" +\n \"(?:\\\\.(?:1?\\\\d{1,2}|2[0-4]\\\\d|25[0-5])){2}\" +\n \"(?:\\\\.(?:[1-9]\\\\d?|1\\\\d\\\\d|2[0-4]\\\\d|25[0-4]))\" +\n \"|\" +\n // host name\n \"(?:(?:[a-z\\\\u00a1-\\\\uffff0-9]-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)\" +\n // domain name\n \"(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)*\" +\n tld +\n \")\" +\n // port number\n \"(?::\\\\d{2,5})?\" +\n // resource path\n \"(?:[/?#]\\\\S*)?\" +\n \"$\";\n\n var PATTERN = new RegExp(regex, 'i');\n if (!PATTERN.exec(value)) {\n return message;\n }\n }\n };\n\n validate.formatters = {\n detailed: function(errors) {return errors;},\n flat: v.flattenErrorsToArray,\n grouped: function(errors) {\n var attr;\n\n errors = v.groupErrorsByAttribute(errors);\n for (attr in errors) {\n errors[attr] = v.flattenErrorsToArray(errors[attr]);\n }\n return errors;\n },\n constraint: function(errors) {\n var attr;\n errors = v.groupErrorsByAttribute(errors);\n for (attr in errors) {\n errors[attr] = errors[attr].map(function(result) {\n return result.validator;\n }).sort();\n }\n return errors;\n }\n };\n\n validate.exposeModule(validate, this, exports, module, define);\n}).call(this,\n typeof exports !== 'undefined' ? /* istanbul ignore next */ exports : null,\n typeof module !== 'undefined' ? /* istanbul ignore next */ module : null,\n typeof define !== 'undefined' ? /* istanbul ignore next */ define : null);\n","/**\n * This file automatically generated from `pre-publish.js`.\n * Do not manually edit.\n */\n\nmodule.exports = {\n \"area\": true,\n \"base\": true,\n \"br\": true,\n \"col\": true,\n \"embed\": true,\n \"hr\": true,\n \"img\": true,\n \"input\": true,\n \"keygen\": true,\n \"link\": true,\n \"menuitem\": true,\n \"meta\": true,\n \"param\": true,\n \"source\": true,\n \"track\": true,\n \"wbr\": true\n};\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar __DEV__ = process.env.NODE_ENV !== 'production';\n\nvar warning = function() {};\n\nif (__DEV__) {\n var printWarning = function printWarning(format, args) {\n var len = arguments.length;\n args = new Array(len > 1 ? len - 1 : 0);\n for (var key = 1; key < len; key++) {\n args[key - 1] = arguments[key];\n }\n var argIndex = 0;\n var message = 'Warning: ' +\n format.replace(/%s/g, function() {\n return args[argIndex++];\n });\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n }\n\n warning = function(condition, format, args) {\n var len = arguments.length;\n args = new Array(len > 2 ? len - 2 : 0);\n for (var key = 2; key < len; key++) {\n args[key - 2] = arguments[key];\n }\n if (format === undefined) {\n throw new Error(\n '`warning(condition, format, ...args)` requires a warning ' +\n 'message argument'\n );\n }\n if (!condition) {\n printWarning.apply(null, [format].concat(args));\n }\n };\n}\n\nmodule.exports = warning;\n","import { __assign } from './_virtual/_tslib.js';\nimport { symbolObservable, toInvokeSource, mapContext, isMachine } from './utils.js';\nimport { provide } from './serviceScope.js';\n\nfunction createNullActor(id) {\n var _a;\n\n return _a = {\n id: id,\n send: function () {\n return void 0;\n },\n subscribe: function () {\n return {\n unsubscribe: function () {\n return void 0;\n }\n };\n },\n getSnapshot: function () {\n return undefined;\n },\n toJSON: function () {\n return {\n id: id\n };\n }\n }, _a[symbolObservable] = function () {\n return this;\n }, _a;\n}\n/**\r\n * Creates a deferred actor that is able to be invoked given the provided\r\n * invocation information in its `.meta` value.\r\n *\r\n * @param invokeDefinition The meta information needed to invoke the actor.\r\n */\n\nfunction createInvocableActor(invokeDefinition, machine, context, _event) {\n var _a;\n\n var invokeSrc = toInvokeSource(invokeDefinition.src);\n var serviceCreator = (_a = machine === null || machine === void 0 ? void 0 : machine.options.services) === null || _a === void 0 ? void 0 : _a[invokeSrc.type];\n var resolvedData = invokeDefinition.data ? mapContext(invokeDefinition.data, context, _event) : undefined;\n var tempActor = serviceCreator ? createDeferredActor(serviceCreator, invokeDefinition.id, resolvedData) : createNullActor(invokeDefinition.id); // @ts-ignore\n\n tempActor.meta = invokeDefinition;\n return tempActor;\n}\nfunction createDeferredActor(entity, id, data) {\n var tempActor = createNullActor(id); // @ts-ignore\n\n tempActor.deferred = true;\n\n if (isMachine(entity)) {\n // \"mute\" the existing service scope so potential spawned actors within the `.initialState` stay deferred here\n var initialState_1 = tempActor.state = provide(undefined, function () {\n return (data ? entity.withContext(data) : entity).initialState;\n });\n\n tempActor.getSnapshot = function () {\n return initialState_1;\n };\n }\n\n return tempActor;\n}\nfunction isActor(item) {\n try {\n return typeof item.send === 'function';\n } catch (e) {\n return false;\n }\n}\nfunction isSpawnedActor(item) {\n return isActor(item) && 'id' in item;\n} // TODO: refactor the return type, this could be written in a better way but it's best to avoid unneccessary breaking changes now\n\nfunction toActorRef(actorRefLike) {\n var _a;\n\n return __assign((_a = {\n subscribe: function () {\n return {\n unsubscribe: function () {\n return void 0;\n }\n };\n },\n id: 'anonymous',\n getSnapshot: function () {\n return undefined;\n }\n }, _a[symbolObservable] = function () {\n return this;\n }, _a), actorRefLike);\n}\n\nexport { createDeferredActor, createInvocableActor, createNullActor, isActor, isSpawnedActor, toActorRef };\n","import { StateNode } from './StateNode.js';\n\nfunction Machine(config, options, initialContext) {\n if (initialContext === void 0) {\n initialContext = config.context;\n }\n\n return new StateNode(config, options, initialContext);\n}\nfunction createMachine(config, options) {\n return new StateNode(config, options);\n}\n\nexport { Machine, createMachine };\n","import { __assign, __spreadArray, __read, __rest } from './_virtual/_tslib.js';\nimport { EMPTY_ACTIVITY_MAP } from './constants.js';\nimport { isString, matchesState, warn } from './utils.js';\nimport { getMeta, nextEvents } from './stateUtils.js';\nimport { initEvent } from './actions.js';\nimport { IS_PRODUCTION } from './environment.js';\n\nfunction stateValuesEqual(a, b) {\n if (a === b) {\n return true;\n }\n\n if (a === undefined || b === undefined) {\n return false;\n }\n\n if (isString(a) || isString(b)) {\n return a === b;\n }\n\n var aKeys = Object.keys(a);\n var bKeys = Object.keys(b);\n return aKeys.length === bKeys.length && aKeys.every(function (key) {\n return stateValuesEqual(a[key], b[key]);\n });\n}\nfunction isStateConfig(state) {\n if (typeof state !== 'object' || state === null) {\n return false;\n }\n\n return 'value' in state && '_event' in state;\n}\n/**\r\n * @deprecated Use `isStateConfig(object)` or `state instanceof State` instead.\r\n */\n\nvar isState = isStateConfig;\nfunction bindActionToState(action, state) {\n var exec = action.exec;\n\n var boundAction = __assign(__assign({}, action), {\n exec: exec !== undefined ? function () {\n return exec(state.context, state.event, {\n action: action,\n state: state,\n _event: state._event\n });\n } : undefined\n });\n\n return boundAction;\n}\n\nvar State =\n/*#__PURE__*/\n\n/** @class */\nfunction () {\n /**\r\n * Creates a new State instance.\r\n * @param value The state value\r\n * @param context The extended state\r\n * @param historyValue The tree representing historical values of the state nodes\r\n * @param history The previous state\r\n * @param actions An array of action objects to execute as side-effects\r\n * @param activities A mapping of activities and whether they are started (`true`) or stopped (`false`).\r\n * @param meta\r\n * @param events Internal event queue. Should be empty with run-to-completion semantics.\r\n * @param configuration\r\n */\n function State(config) {\n var _this = this;\n\n var _a;\n\n this.actions = [];\n this.activities = EMPTY_ACTIVITY_MAP;\n this.meta = {};\n this.events = [];\n this.value = config.value;\n this.context = config.context;\n this._event = config._event;\n this._sessionid = config._sessionid;\n this.event = this._event.data;\n this.historyValue = config.historyValue;\n this.history = config.history;\n this.actions = config.actions || [];\n this.activities = config.activities || EMPTY_ACTIVITY_MAP;\n this.meta = getMeta(config.configuration);\n this.events = config.events || [];\n this.matches = this.matches.bind(this);\n this.toStrings = this.toStrings.bind(this);\n this.configuration = config.configuration;\n this.transitions = config.transitions;\n this.children = config.children;\n this.done = !!config.done;\n this.tags = (_a = Array.isArray(config.tags) ? new Set(config.tags) : config.tags) !== null && _a !== void 0 ? _a : new Set();\n this.machine = config.machine;\n Object.defineProperty(this, 'nextEvents', {\n get: function () {\n return nextEvents(_this.configuration);\n }\n });\n }\n /**\r\n * Creates a new State instance for the given `stateValue` and `context`.\r\n * @param stateValue\r\n * @param context\r\n */\n\n\n State.from = function (stateValue, context) {\n if (stateValue instanceof State) {\n if (stateValue.context !== context) {\n return new State({\n value: stateValue.value,\n context: context,\n _event: stateValue._event,\n _sessionid: null,\n historyValue: stateValue.historyValue,\n history: stateValue.history,\n actions: [],\n activities: stateValue.activities,\n meta: {},\n events: [],\n configuration: [],\n transitions: [],\n children: {}\n });\n }\n\n return stateValue;\n }\n\n var _event = initEvent;\n return new State({\n value: stateValue,\n context: context,\n _event: _event,\n _sessionid: null,\n historyValue: undefined,\n history: undefined,\n actions: [],\n activities: undefined,\n meta: undefined,\n events: [],\n configuration: [],\n transitions: [],\n children: {}\n });\n };\n /**\r\n * Creates a new State instance for the given `config`.\r\n * @param config The state config\r\n */\n\n\n State.create = function (config) {\n return new State(config);\n };\n /**\r\n * Creates a new `State` instance for the given `stateValue` and `context` with no actions (side-effects).\r\n * @param stateValue\r\n * @param context\r\n */\n\n\n State.inert = function (stateValue, context) {\n if (stateValue instanceof State) {\n if (!stateValue.actions.length) {\n return stateValue;\n }\n\n var _event = initEvent;\n return new State({\n value: stateValue.value,\n context: context,\n _event: _event,\n _sessionid: null,\n historyValue: stateValue.historyValue,\n history: stateValue.history,\n activities: stateValue.activities,\n configuration: stateValue.configuration,\n transitions: [],\n children: {}\n });\n }\n\n return State.from(stateValue, context);\n };\n /**\r\n * Returns an array of all the string leaf state node paths.\r\n * @param stateValue\r\n * @param delimiter The character(s) that separate each subpath in the string state node path.\r\n */\n\n\n State.prototype.toStrings = function (stateValue, delimiter) {\n var _this = this;\n\n if (stateValue === void 0) {\n stateValue = this.value;\n }\n\n if (delimiter === void 0) {\n delimiter = '.';\n }\n\n if (isString(stateValue)) {\n return [stateValue];\n }\n\n var valueKeys = Object.keys(stateValue);\n return valueKeys.concat.apply(valueKeys, __spreadArray([], __read(valueKeys.map(function (key) {\n return _this.toStrings(stateValue[key], delimiter).map(function (s) {\n return key + delimiter + s;\n });\n })), false));\n };\n\n State.prototype.toJSON = function () {\n var _a = this;\n _a.configuration;\n _a.transitions;\n var tags = _a.tags;\n _a.machine;\n var jsonValues = __rest(_a, [\"configuration\", \"transitions\", \"tags\", \"machine\"]);\n\n return __assign(__assign({}, jsonValues), {\n tags: Array.from(tags)\n });\n };\n\n State.prototype.matches = function (parentStateValue) {\n return matchesState(parentStateValue, this.value);\n };\n /**\r\n * Whether the current state configuration has a state node with the specified `tag`.\r\n * @param tag\r\n */\n\n\n State.prototype.hasTag = function (tag) {\n return this.tags.has(tag);\n };\n /**\r\n * Determines whether sending the `event` will cause a non-forbidden transition\r\n * to be selected, even if the transitions have no actions nor\r\n * change the state value.\r\n *\r\n * @param event The event to test\r\n * @returns Whether the event will cause a transition\r\n */\n\n\n State.prototype.can = function (event) {\n var _a;\n\n if (IS_PRODUCTION) {\n warn(!!this.machine, \"state.can(...) used outside of a machine-created State object; this will always return false.\");\n }\n\n var transitionData = (_a = this.machine) === null || _a === void 0 ? void 0 : _a.getTransitionData(this, event);\n return !!(transitionData === null || transitionData === void 0 ? void 0 : transitionData.transitions.length) && // Check that at least one transition is not forbidden\n transitionData.transitions.some(function (t) {\n return t.target !== undefined || t.actions.length;\n });\n };\n\n return State;\n}();\n\nexport { State, bindActionToState, isState, isStateConfig, stateValuesEqual };\n","import { __assign, __rest } from './_virtual/_tslib.js';\nimport './types.js';\nimport { invoke } from './actionTypes.js';\nimport './utils.js';\nimport './environment.js';\n\nfunction toInvokeSource(src) {\n if (typeof src === 'string') {\n var simpleSrc = {\n type: src\n };\n\n simpleSrc.toString = function () {\n return src;\n }; // v4 compat - TODO: remove in v5\n\n\n return simpleSrc;\n }\n\n return src;\n}\nfunction toInvokeDefinition(invokeConfig) {\n return __assign(__assign({\n type: invoke\n }, invokeConfig), {\n toJSON: function () {\n invokeConfig.onDone;\n invokeConfig.onError;\n var invokeDef = __rest(invokeConfig, [\"onDone\", \"onError\"]);\n\n return __assign(__assign({}, invokeDef), {\n type: invoke,\n src: toInvokeSource(invokeConfig.src)\n });\n }\n });\n}\n\nexport { toInvokeDefinition, toInvokeSource };\n","import { __assign, __spreadArray, __read, __values, __rest } from './_virtual/_tslib.js';\nimport { isFunction, mapValues, isArray, flatten, toArray, toStateValue, isString, getEventType, toSCXMLEvent, matchesState, path, evaluateGuard, mapContext, pathToStateValue, isBuiltInEvent, partition, updateHistoryValue, toStatePath, mapFilterValues, warn, toStatePaths, nestedPath, normalizeTarget, toGuard, toTransitionConfigArray, isMachine, createInvokeId } from './utils.js';\nimport { SpecialTargets } from './types.js';\nimport { State, stateValuesEqual } from './State.js';\nimport { start as start$1, stop as stop$1, raise as raise$1, send, invoke, update, nullEvent } from './actionTypes.js';\nimport { done, start, raise, stop, toActionObjects, resolveActions, doneInvoke, error, toActionObject, toActivityDefinition, after, send as send$1, cancel, initEvent } from './actions.js';\nimport { IS_PRODUCTION } from './environment.js';\nimport { STATE_DELIMITER } from './constants.js';\nimport { getAllStateNodes, getConfiguration, isInFinalState, getTagsFromConfiguration, has, getChildren, getValue, isLeafNode } from './stateUtils.js';\nimport { createInvocableActor } from './Actor.js';\nimport { toInvokeDefinition } from './invokeUtils.js';\n\nvar NULL_EVENT = '';\nvar STATE_IDENTIFIER = '#';\nvar WILDCARD = '*';\nvar EMPTY_OBJECT = {};\n\nvar isStateId = function (str) {\n return str[0] === STATE_IDENTIFIER;\n};\n\nvar createDefaultOptions = function () {\n return {\n actions: {},\n guards: {},\n services: {},\n activities: {},\n delays: {}\n };\n};\n\nvar validateArrayifiedTransitions = function (stateNode, event, transitions) {\n var hasNonLastUnguardedTarget = transitions.slice(0, -1).some(function (transition) {\n return !('cond' in transition) && !('in' in transition) && (isString(transition.target) || isMachine(transition.target));\n });\n var eventText = event === NULL_EVENT ? 'the transient event' : \"event '\".concat(event, \"'\");\n warn(!hasNonLastUnguardedTarget, \"One or more transitions for \".concat(eventText, \" on state '\").concat(stateNode.id, \"' are unreachable. \") + \"Make sure that the default transition is the last one defined.\");\n};\n\nvar StateNode =\n/*#__PURE__*/\n\n/** @class */\nfunction () {\n function StateNode(\n /**\r\n * The raw config used to create the machine.\r\n */\n config, options,\n /**\r\n * The initial extended state\r\n */\n _context, // TODO: this is unsafe, but we're removing it in v5 anyway\n _stateInfo) {\n var _this = this;\n\n if (_context === void 0) {\n _context = 'context' in config ? config.context : undefined;\n }\n\n var _a;\n\n this.config = config;\n this._context = _context;\n /**\r\n * The order this state node appears. Corresponds to the implicit SCXML document order.\r\n */\n\n this.order = -1;\n this.__xstatenode = true;\n this.__cache = {\n events: undefined,\n relativeValue: new Map(),\n initialStateValue: undefined,\n initialState: undefined,\n on: undefined,\n transitions: undefined,\n candidates: {},\n delayedTransitions: undefined\n };\n this.idMap = {};\n this.tags = [];\n this.options = Object.assign(createDefaultOptions(), options);\n this.parent = _stateInfo === null || _stateInfo === void 0 ? void 0 : _stateInfo.parent;\n this.key = this.config.key || (_stateInfo === null || _stateInfo === void 0 ? void 0 : _stateInfo.key) || this.config.id || '(machine)';\n this.machine = this.parent ? this.parent.machine : this;\n this.path = this.parent ? this.parent.path.concat(this.key) : [];\n this.delimiter = this.config.delimiter || (this.parent ? this.parent.delimiter : STATE_DELIMITER);\n this.id = this.config.id || __spreadArray([this.machine.key], __read(this.path), false).join(this.delimiter);\n this.version = this.parent ? this.parent.version : this.config.version;\n this.type = this.config.type || (this.config.parallel ? 'parallel' : this.config.states && Object.keys(this.config.states).length ? 'compound' : this.config.history ? 'history' : 'atomic');\n this.schema = this.parent ? this.machine.schema : (_a = this.config.schema) !== null && _a !== void 0 ? _a : {};\n this.description = this.config.description;\n\n if (!IS_PRODUCTION) {\n warn(!('parallel' in this.config), \"The \\\"parallel\\\" property is deprecated and will be removed in version 4.1. \".concat(this.config.parallel ? \"Replace with `type: 'parallel'`\" : \"Use `type: '\".concat(this.type, \"'`\"), \" in the config for state node '\").concat(this.id, \"' instead.\"));\n }\n\n this.initial = this.config.initial;\n this.states = this.config.states ? mapValues(this.config.states, function (stateConfig, key) {\n var _a;\n\n var stateNode = new StateNode(stateConfig, {}, undefined, {\n parent: _this,\n key: key\n });\n Object.assign(_this.idMap, __assign((_a = {}, _a[stateNode.id] = stateNode, _a), stateNode.idMap));\n return stateNode;\n }) : EMPTY_OBJECT; // Document order\n\n var order = 0;\n\n function dfs(stateNode) {\n var e_1, _a;\n\n stateNode.order = order++;\n\n try {\n for (var _b = __values(getChildren(stateNode)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var child = _c.value;\n dfs(child);\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n }\n\n dfs(this); // History config\n\n this.history = this.config.history === true ? 'shallow' : this.config.history || false;\n this._transient = !!this.config.always || (!this.config.on ? false : Array.isArray(this.config.on) ? this.config.on.some(function (_a) {\n var event = _a.event;\n return event === NULL_EVENT;\n }) : NULL_EVENT in this.config.on);\n this.strict = !!this.config.strict; // TODO: deprecate (entry)\n\n this.onEntry = toArray(this.config.entry || this.config.onEntry).map(function (action) {\n return toActionObject(action);\n }); // TODO: deprecate (exit)\n\n this.onExit = toArray(this.config.exit || this.config.onExit).map(function (action) {\n return toActionObject(action);\n });\n this.meta = this.config.meta;\n this.doneData = this.type === 'final' ? this.config.data : undefined;\n this.invoke = toArray(this.config.invoke).map(function (invokeConfig, i) {\n var _a, _b;\n\n if (isMachine(invokeConfig)) {\n var invokeId = createInvokeId(_this.id, i);\n _this.machine.options.services = __assign((_a = {}, _a[invokeId] = invokeConfig, _a), _this.machine.options.services);\n return toInvokeDefinition({\n src: invokeId,\n id: invokeId\n });\n } else if (isString(invokeConfig.src)) {\n var invokeId = invokeConfig.id || createInvokeId(_this.id, i);\n return toInvokeDefinition(__assign(__assign({}, invokeConfig), {\n id: invokeId,\n src: invokeConfig.src\n }));\n } else if (isMachine(invokeConfig.src) || isFunction(invokeConfig.src)) {\n var invokeId = invokeConfig.id || createInvokeId(_this.id, i);\n _this.machine.options.services = __assign((_b = {}, _b[invokeId] = invokeConfig.src, _b), _this.machine.options.services);\n return toInvokeDefinition(__assign(__assign({\n id: invokeId\n }, invokeConfig), {\n src: invokeId\n }));\n } else {\n var invokeSource = invokeConfig.src;\n return toInvokeDefinition(__assign(__assign({\n id: createInvokeId(_this.id, i)\n }, invokeConfig), {\n src: invokeSource\n }));\n }\n });\n this.activities = toArray(this.config.activities).concat(this.invoke).map(function (activity) {\n return toActivityDefinition(activity);\n });\n this.transition = this.transition.bind(this);\n this.tags = toArray(this.config.tags); // TODO: this is the real fix for initialization once\n // state node getters are deprecated\n // if (!this.parent) {\n // this._init();\n // }\n }\n\n StateNode.prototype._init = function () {\n if (this.__cache.transitions) {\n return;\n }\n\n getAllStateNodes(this).forEach(function (stateNode) {\n return stateNode.on;\n });\n };\n /**\r\n * Clones this state machine with custom options and context.\r\n *\r\n * @param options Options (actions, guards, activities, services) to recursively merge with the existing options.\r\n * @param context Custom context (will override predefined context)\r\n */\n\n\n StateNode.prototype.withConfig = function (options, context) {\n var _a = this.options,\n actions = _a.actions,\n activities = _a.activities,\n guards = _a.guards,\n services = _a.services,\n delays = _a.delays;\n return new StateNode(this.config, {\n actions: __assign(__assign({}, actions), options.actions),\n activities: __assign(__assign({}, activities), options.activities),\n guards: __assign(__assign({}, guards), options.guards),\n services: __assign(__assign({}, services), options.services),\n delays: __assign(__assign({}, delays), options.delays)\n }, context !== null && context !== void 0 ? context : this.context);\n };\n /**\r\n * Clones this state machine with custom context.\r\n *\r\n * @param context Custom context (will override predefined context, not recursive)\r\n */\n\n\n StateNode.prototype.withContext = function (context) {\n return new StateNode(this.config, this.options, context);\n };\n\n Object.defineProperty(StateNode.prototype, \"context\", {\n get: function () {\n return isFunction(this._context) ? this._context() : this._context;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(StateNode.prototype, \"definition\", {\n /**\r\n * The well-structured state node definition.\r\n */\n get: function () {\n return {\n id: this.id,\n key: this.key,\n version: this.version,\n context: this.context,\n type: this.type,\n initial: this.initial,\n history: this.history,\n states: mapValues(this.states, function (state) {\n return state.definition;\n }),\n on: this.on,\n transitions: this.transitions,\n entry: this.onEntry,\n exit: this.onExit,\n activities: this.activities || [],\n meta: this.meta,\n order: this.order || -1,\n data: this.doneData,\n invoke: this.invoke,\n description: this.description,\n tags: this.tags\n };\n },\n enumerable: false,\n configurable: true\n });\n\n StateNode.prototype.toJSON = function () {\n return this.definition;\n };\n\n Object.defineProperty(StateNode.prototype, \"on\", {\n /**\r\n * The mapping of events to transitions.\r\n */\n get: function () {\n if (this.__cache.on) {\n return this.__cache.on;\n }\n\n var transitions = this.transitions;\n return this.__cache.on = transitions.reduce(function (map, transition) {\n map[transition.eventType] = map[transition.eventType] || [];\n map[transition.eventType].push(transition);\n return map;\n }, {});\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(StateNode.prototype, \"after\", {\n get: function () {\n return this.__cache.delayedTransitions || (this.__cache.delayedTransitions = this.getDelayedTransitions(), this.__cache.delayedTransitions);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(StateNode.prototype, \"transitions\", {\n /**\r\n * All the transitions that can be taken from this state node.\r\n */\n get: function () {\n return this.__cache.transitions || (this.__cache.transitions = this.formatTransitions(), this.__cache.transitions);\n },\n enumerable: false,\n configurable: true\n });\n\n StateNode.prototype.getCandidates = function (eventName) {\n if (this.__cache.candidates[eventName]) {\n return this.__cache.candidates[eventName];\n }\n\n var transient = eventName === NULL_EVENT;\n var candidates = this.transitions.filter(function (transition) {\n var sameEventType = transition.eventType === eventName; // null events should only match against eventless transitions\n\n return transient ? sameEventType : sameEventType || transition.eventType === WILDCARD;\n });\n this.__cache.candidates[eventName] = candidates;\n return candidates;\n };\n /**\r\n * All delayed transitions from the config.\r\n */\n\n\n StateNode.prototype.getDelayedTransitions = function () {\n var _this = this;\n\n var afterConfig = this.config.after;\n\n if (!afterConfig) {\n return [];\n }\n\n var mutateEntryExit = function (delay, i) {\n var delayRef = isFunction(delay) ? \"\".concat(_this.id, \":delay[\").concat(i, \"]\") : delay;\n var eventType = after(delayRef, _this.id);\n\n _this.onEntry.push(send$1(eventType, {\n delay: delay\n }));\n\n _this.onExit.push(cancel(eventType));\n\n return eventType;\n };\n\n var delayedTransitions = isArray(afterConfig) ? afterConfig.map(function (transition, i) {\n var eventType = mutateEntryExit(transition.delay, i);\n return __assign(__assign({}, transition), {\n event: eventType\n });\n }) : flatten(Object.keys(afterConfig).map(function (delay, i) {\n var configTransition = afterConfig[delay];\n var resolvedTransition = isString(configTransition) ? {\n target: configTransition\n } : configTransition;\n var resolvedDelay = !isNaN(+delay) ? +delay : delay;\n var eventType = mutateEntryExit(resolvedDelay, i);\n return toArray(resolvedTransition).map(function (transition) {\n return __assign(__assign({}, transition), {\n event: eventType,\n delay: resolvedDelay\n });\n });\n }));\n return delayedTransitions.map(function (delayedTransition) {\n var delay = delayedTransition.delay;\n return __assign(__assign({}, _this.formatTransition(delayedTransition)), {\n delay: delay\n });\n });\n };\n /**\r\n * Returns the state nodes represented by the current state value.\r\n *\r\n * @param state The state value or State instance\r\n */\n\n\n StateNode.prototype.getStateNodes = function (state) {\n var _a;\n\n var _this = this;\n\n if (!state) {\n return [];\n }\n\n var stateValue = state instanceof State ? state.value : toStateValue(state, this.delimiter);\n\n if (isString(stateValue)) {\n var initialStateValue = this.getStateNode(stateValue).initial;\n return initialStateValue !== undefined ? this.getStateNodes((_a = {}, _a[stateValue] = initialStateValue, _a)) : [this, this.states[stateValue]];\n }\n\n var subStateKeys = Object.keys(stateValue);\n var subStateNodes = [this];\n subStateNodes.push.apply(subStateNodes, __spreadArray([], __read(flatten(subStateKeys.map(function (subStateKey) {\n return _this.getStateNode(subStateKey).getStateNodes(stateValue[subStateKey]);\n }))), false));\n return subStateNodes;\n };\n /**\r\n * Returns `true` if this state node explicitly handles the given event.\r\n *\r\n * @param event The event in question\r\n */\n\n\n StateNode.prototype.handles = function (event) {\n var eventType = getEventType(event);\n return this.events.includes(eventType);\n };\n /**\r\n * Resolves the given `state` to a new `State` instance relative to this machine.\r\n *\r\n * This ensures that `.events` and `.nextEvents` represent the correct values.\r\n *\r\n * @param state The state to resolve\r\n */\n\n\n StateNode.prototype.resolveState = function (state) {\n var stateFromConfig = state instanceof State ? state : State.create(state);\n var configuration = Array.from(getConfiguration([], this.getStateNodes(stateFromConfig.value)));\n return new State(__assign(__assign({}, stateFromConfig), {\n value: this.resolve(stateFromConfig.value),\n configuration: configuration,\n done: isInFinalState(configuration, this),\n tags: getTagsFromConfiguration(configuration),\n machine: this.machine\n }));\n };\n\n StateNode.prototype.transitionLeafNode = function (stateValue, state, _event) {\n var stateNode = this.getStateNode(stateValue);\n var next = stateNode.next(state, _event);\n\n if (!next || !next.transitions.length) {\n return this.next(state, _event);\n }\n\n return next;\n };\n\n StateNode.prototype.transitionCompoundNode = function (stateValue, state, _event) {\n var subStateKeys = Object.keys(stateValue);\n var stateNode = this.getStateNode(subStateKeys[0]);\n\n var next = stateNode._transition(stateValue[subStateKeys[0]], state, _event);\n\n if (!next || !next.transitions.length) {\n return this.next(state, _event);\n }\n\n return next;\n };\n\n StateNode.prototype.transitionParallelNode = function (stateValue, state, _event) {\n var e_2, _a;\n\n var transitionMap = {};\n\n try {\n for (var _b = __values(Object.keys(stateValue)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var subStateKey = _c.value;\n var subStateValue = stateValue[subStateKey];\n\n if (!subStateValue) {\n continue;\n }\n\n var subStateNode = this.getStateNode(subStateKey);\n\n var next = subStateNode._transition(subStateValue, state, _event);\n\n if (next) {\n transitionMap[subStateKey] = next;\n }\n }\n } catch (e_2_1) {\n e_2 = {\n error: e_2_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_2) throw e_2.error;\n }\n }\n\n var stateTransitions = Object.keys(transitionMap).map(function (key) {\n return transitionMap[key];\n });\n var enabledTransitions = flatten(stateTransitions.map(function (st) {\n return st.transitions;\n }));\n var willTransition = stateTransitions.some(function (st) {\n return st.transitions.length > 0;\n });\n\n if (!willTransition) {\n return this.next(state, _event);\n }\n\n var entryNodes = flatten(stateTransitions.map(function (t) {\n return t.entrySet;\n }));\n var configuration = flatten(Object.keys(transitionMap).map(function (key) {\n return transitionMap[key].configuration;\n }));\n return {\n transitions: enabledTransitions,\n entrySet: entryNodes,\n exitSet: flatten(stateTransitions.map(function (t) {\n return t.exitSet;\n })),\n configuration: configuration,\n source: state,\n actions: flatten(Object.keys(transitionMap).map(function (key) {\n return transitionMap[key].actions;\n }))\n };\n };\n\n StateNode.prototype._transition = function (stateValue, state, _event) {\n // leaf node\n if (isString(stateValue)) {\n return this.transitionLeafNode(stateValue, state, _event);\n } // hierarchical node\n\n\n if (Object.keys(stateValue).length === 1) {\n return this.transitionCompoundNode(stateValue, state, _event);\n } // orthogonal node\n\n\n return this.transitionParallelNode(stateValue, state, _event);\n };\n\n StateNode.prototype.getTransitionData = function (state, event) {\n return this._transition(state.value, state, toSCXMLEvent(event));\n };\n\n StateNode.prototype.next = function (state, _event) {\n var e_3, _a;\n\n var _this = this;\n\n var eventName = _event.name;\n var actions = [];\n var nextStateNodes = [];\n var selectedTransition;\n\n try {\n for (var _b = __values(this.getCandidates(eventName)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var candidate = _c.value;\n var cond = candidate.cond,\n stateIn = candidate.in;\n var resolvedContext = state.context;\n var isInState = stateIn ? isString(stateIn) && isStateId(stateIn) ? // Check if in state by ID\n state.matches(toStateValue(this.getStateNodeById(stateIn).path, this.delimiter)) : // Check if in state by relative grandparent\n matchesState(toStateValue(stateIn, this.delimiter), path(this.path.slice(0, -2))(state.value)) : true;\n var guardPassed = false;\n\n try {\n guardPassed = !cond || evaluateGuard(this.machine, cond, resolvedContext, _event, state);\n } catch (err) {\n throw new Error(\"Unable to evaluate guard '\".concat(cond.name || cond.type, \"' in transition for event '\").concat(eventName, \"' in state node '\").concat(this.id, \"':\\n\").concat(err.message));\n }\n\n if (guardPassed && isInState) {\n if (candidate.target !== undefined) {\n nextStateNodes = candidate.target;\n }\n\n actions.push.apply(actions, __spreadArray([], __read(candidate.actions), false));\n selectedTransition = candidate;\n break;\n }\n }\n } catch (e_3_1) {\n e_3 = {\n error: e_3_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_3) throw e_3.error;\n }\n }\n\n if (!selectedTransition) {\n return undefined;\n }\n\n if (!nextStateNodes.length) {\n return {\n transitions: [selectedTransition],\n entrySet: [],\n exitSet: [],\n configuration: state.value ? [this] : [],\n source: state,\n actions: actions\n };\n }\n\n var allNextStateNodes = flatten(nextStateNodes.map(function (stateNode) {\n return _this.getRelativeStateNodes(stateNode, state.historyValue);\n }));\n var isInternal = !!selectedTransition.internal;\n var reentryNodes = isInternal ? [] : flatten(allNextStateNodes.map(function (n) {\n return _this.nodesFromChild(n);\n }));\n return {\n transitions: [selectedTransition],\n entrySet: reentryNodes,\n exitSet: isInternal ? [] : [this],\n configuration: allNextStateNodes,\n source: state,\n actions: actions\n };\n };\n\n StateNode.prototype.nodesFromChild = function (childStateNode) {\n if (childStateNode.escapes(this)) {\n return [];\n }\n\n var nodes = [];\n var marker = childStateNode;\n\n while (marker && marker !== this) {\n nodes.push(marker);\n marker = marker.parent;\n }\n\n nodes.push(this); // inclusive\n\n return nodes;\n };\n /**\r\n * Whether the given state node \"escapes\" this state node. If the `stateNode` is equal to or the parent of\r\n * this state node, it does not escape.\r\n */\n\n\n StateNode.prototype.escapes = function (stateNode) {\n if (this === stateNode) {\n return false;\n }\n\n var parent = this.parent;\n\n while (parent) {\n if (parent === stateNode) {\n return false;\n }\n\n parent = parent.parent;\n }\n\n return true;\n };\n\n StateNode.prototype.getActions = function (transition, currentContext, _event, prevState) {\n var e_4, _a, e_5, _b;\n\n var prevConfig = getConfiguration([], prevState ? this.getStateNodes(prevState.value) : [this]);\n var resolvedConfig = transition.configuration.length ? getConfiguration(prevConfig, transition.configuration) : prevConfig;\n\n try {\n for (var resolvedConfig_1 = __values(resolvedConfig), resolvedConfig_1_1 = resolvedConfig_1.next(); !resolvedConfig_1_1.done; resolvedConfig_1_1 = resolvedConfig_1.next()) {\n var sn = resolvedConfig_1_1.value;\n\n if (!has(prevConfig, sn)) {\n transition.entrySet.push(sn);\n }\n }\n } catch (e_4_1) {\n e_4 = {\n error: e_4_1\n };\n } finally {\n try {\n if (resolvedConfig_1_1 && !resolvedConfig_1_1.done && (_a = resolvedConfig_1.return)) _a.call(resolvedConfig_1);\n } finally {\n if (e_4) throw e_4.error;\n }\n }\n\n try {\n for (var prevConfig_1 = __values(prevConfig), prevConfig_1_1 = prevConfig_1.next(); !prevConfig_1_1.done; prevConfig_1_1 = prevConfig_1.next()) {\n var sn = prevConfig_1_1.value;\n\n if (!has(resolvedConfig, sn) || has(transition.exitSet, sn.parent)) {\n transition.exitSet.push(sn);\n }\n }\n } catch (e_5_1) {\n e_5 = {\n error: e_5_1\n };\n } finally {\n try {\n if (prevConfig_1_1 && !prevConfig_1_1.done && (_b = prevConfig_1.return)) _b.call(prevConfig_1);\n } finally {\n if (e_5) throw e_5.error;\n }\n }\n\n var doneEvents = flatten(transition.entrySet.map(function (sn) {\n var events = [];\n\n if (sn.type !== 'final') {\n return events;\n }\n\n var parent = sn.parent;\n\n if (!parent.parent) {\n return events;\n }\n\n events.push(done(sn.id, sn.doneData), // TODO: deprecate - final states should not emit done events for their own state.\n done(parent.id, sn.doneData ? mapContext(sn.doneData, currentContext, _event) : undefined));\n var grandparent = parent.parent;\n\n if (grandparent.type === 'parallel') {\n if (getChildren(grandparent).every(function (parentNode) {\n return isInFinalState(transition.configuration, parentNode);\n })) {\n events.push(done(grandparent.id));\n }\n }\n\n return events;\n }));\n transition.exitSet.sort(function (a, b) {\n return b.order - a.order;\n });\n transition.entrySet.sort(function (a, b) {\n return a.order - b.order;\n });\n var entryStates = new Set(transition.entrySet);\n var exitStates = new Set(transition.exitSet);\n\n var _c = __read([flatten(Array.from(entryStates).map(function (stateNode) {\n return __spreadArray(__spreadArray([], __read(stateNode.activities.map(function (activity) {\n return start(activity);\n })), false), __read(stateNode.onEntry), false);\n })).concat(doneEvents.map(raise)), flatten(Array.from(exitStates).map(function (stateNode) {\n return __spreadArray(__spreadArray([], __read(stateNode.onExit), false), __read(stateNode.activities.map(function (activity) {\n return stop(activity);\n })), false);\n }))], 2),\n entryActions = _c[0],\n exitActions = _c[1];\n\n var actions = toActionObjects(exitActions.concat(transition.actions).concat(entryActions), this.machine.options.actions);\n return actions;\n };\n /**\r\n * Determines the next state given the current `state` and sent `event`.\r\n *\r\n * @param state The current State instance or state value\r\n * @param event The event that was sent at the current state\r\n * @param context The current context (extended state) of the current state\r\n */\n\n\n StateNode.prototype.transition = function (state, event, context) {\n if (state === void 0) {\n state = this.initialState;\n }\n\n var _event = toSCXMLEvent(event);\n\n var currentState;\n\n if (state instanceof State) {\n currentState = context === undefined ? state : this.resolveState(State.from(state, context));\n } else {\n var resolvedStateValue = isString(state) ? this.resolve(pathToStateValue(this.getResolvedPath(state))) : this.resolve(state);\n var resolvedContext = context !== null && context !== void 0 ? context : this.machine.context;\n currentState = this.resolveState(State.from(resolvedStateValue, resolvedContext));\n }\n\n if (!IS_PRODUCTION && _event.name === WILDCARD) {\n throw new Error(\"An event cannot have the wildcard type ('\".concat(WILDCARD, \"')\"));\n }\n\n if (this.strict) {\n if (!this.events.includes(_event.name) && !isBuiltInEvent(_event.name)) {\n throw new Error(\"Machine '\".concat(this.id, \"' does not accept event '\").concat(_event.name, \"'\"));\n }\n }\n\n var stateTransition = this._transition(currentState.value, currentState, _event) || {\n transitions: [],\n configuration: [],\n entrySet: [],\n exitSet: [],\n source: currentState,\n actions: []\n };\n var prevConfig = getConfiguration([], this.getStateNodes(currentState.value));\n var resolvedConfig = stateTransition.configuration.length ? getConfiguration(prevConfig, stateTransition.configuration) : prevConfig;\n stateTransition.configuration = __spreadArray([], __read(resolvedConfig), false);\n return this.resolveTransition(stateTransition, currentState, currentState.context, _event);\n };\n\n StateNode.prototype.resolveRaisedTransition = function (state, _event, originalEvent) {\n var _a;\n\n var currentActions = state.actions;\n state = this.transition(state, _event); // Save original event to state\n // TODO: this should be the raised event! Delete in V5 (breaking)\n\n state._event = originalEvent;\n state.event = originalEvent.data;\n\n (_a = state.actions).unshift.apply(_a, __spreadArray([], __read(currentActions), false));\n\n return state;\n };\n\n StateNode.prototype.resolveTransition = function (stateTransition, currentState, context, _event) {\n var e_6, _a;\n\n var _this = this;\n\n if (_event === void 0) {\n _event = initEvent;\n }\n\n var configuration = stateTransition.configuration; // Transition will \"apply\" if:\n // - this is the initial state (there is no current state)\n // - OR there are transitions\n\n var willTransition = !currentState || stateTransition.transitions.length > 0;\n var resolvedStateValue = willTransition ? getValue(this.machine, configuration) : undefined;\n var historyValue = currentState ? currentState.historyValue ? currentState.historyValue : stateTransition.source ? this.machine.historyValue(currentState.value) : undefined : undefined;\n var actions = this.getActions(stateTransition, context, _event, currentState);\n var activities = currentState ? __assign({}, currentState.activities) : {};\n\n try {\n for (var actions_1 = __values(actions), actions_1_1 = actions_1.next(); !actions_1_1.done; actions_1_1 = actions_1.next()) {\n var action = actions_1_1.value;\n\n if (action.type === start$1) {\n activities[action.activity.id || action.activity.type] = action;\n } else if (action.type === stop$1) {\n activities[action.activity.id || action.activity.type] = false;\n }\n }\n } catch (e_6_1) {\n e_6 = {\n error: e_6_1\n };\n } finally {\n try {\n if (actions_1_1 && !actions_1_1.done && (_a = actions_1.return)) _a.call(actions_1);\n } finally {\n if (e_6) throw e_6.error;\n }\n }\n\n var _b = __read(resolveActions(this, currentState, context, _event, actions, this.machine.config.preserveActionOrder), 2),\n resolvedActions = _b[0],\n updatedContext = _b[1];\n\n var _c = __read(partition(resolvedActions, function (action) {\n return action.type === raise$1 || action.type === send && action.to === SpecialTargets.Internal;\n }), 2),\n raisedEvents = _c[0],\n nonRaisedActions = _c[1];\n\n var invokeActions = resolvedActions.filter(function (action) {\n var _a;\n\n return action.type === start$1 && ((_a = action.activity) === null || _a === void 0 ? void 0 : _a.type) === invoke;\n });\n var children = invokeActions.reduce(function (acc, action) {\n acc[action.activity.id] = createInvocableActor(action.activity, _this.machine, updatedContext, _event);\n return acc;\n }, currentState ? __assign({}, currentState.children) : {});\n var resolvedConfiguration = willTransition ? stateTransition.configuration : currentState ? currentState.configuration : [];\n var isDone = isInFinalState(resolvedConfiguration, this);\n var nextState = new State({\n value: resolvedStateValue || currentState.value,\n context: updatedContext,\n _event: _event,\n // Persist _sessionid between states\n _sessionid: currentState ? currentState._sessionid : null,\n historyValue: resolvedStateValue ? historyValue ? updateHistoryValue(historyValue, resolvedStateValue) : undefined : currentState ? currentState.historyValue : undefined,\n history: !resolvedStateValue || stateTransition.source ? currentState : undefined,\n actions: resolvedStateValue ? nonRaisedActions : [],\n activities: resolvedStateValue ? activities : currentState ? currentState.activities : {},\n events: [],\n configuration: resolvedConfiguration,\n transitions: stateTransition.transitions,\n children: children,\n done: isDone,\n tags: getTagsFromConfiguration(resolvedConfiguration),\n machine: this\n });\n var didUpdateContext = context !== updatedContext;\n nextState.changed = _event.name === update || didUpdateContext; // Dispose of penultimate histories to prevent memory leaks\n\n var history = nextState.history;\n\n if (history) {\n delete history.history;\n } // There are transient transitions if the machine is not in a final state\n // and if some of the state nodes have transient (\"always\") transitions.\n\n\n var isTransient = !isDone && (this._transient || configuration.some(function (stateNode) {\n return stateNode._transient;\n })); // If there are no enabled transitions, check if there are transient transitions.\n // If there are transient transitions, continue checking for more transitions\n // because an transient transition should be triggered even if there are no\n // enabled transitions.\n //\n // If we're already working on an transient transition (by checking\n // if the event is a NULL_EVENT), then stop to prevent an infinite loop.\n //\n // Otherwise, if there are no enabled nor transient transitions, we are done.\n\n if (!willTransition && (!isTransient || _event.name === NULL_EVENT)) {\n return nextState;\n }\n\n var maybeNextState = nextState;\n\n if (!isDone) {\n if (isTransient) {\n maybeNextState = this.resolveRaisedTransition(maybeNextState, {\n type: nullEvent\n }, _event);\n }\n\n while (raisedEvents.length) {\n var raisedEvent = raisedEvents.shift();\n maybeNextState = this.resolveRaisedTransition(maybeNextState, raisedEvent._event, _event);\n }\n } // Detect if state changed\n\n\n var changed = maybeNextState.changed || (history ? !!maybeNextState.actions.length || didUpdateContext || typeof history.value !== typeof maybeNextState.value || !stateValuesEqual(maybeNextState.value, history.value) : undefined);\n maybeNextState.changed = changed; // Preserve original history after raised events\n\n maybeNextState.history = history;\n return maybeNextState;\n };\n /**\r\n * Returns the child state node from its relative `stateKey`, or throws.\r\n */\n\n\n StateNode.prototype.getStateNode = function (stateKey) {\n if (isStateId(stateKey)) {\n return this.machine.getStateNodeById(stateKey);\n }\n\n if (!this.states) {\n throw new Error(\"Unable to retrieve child state '\".concat(stateKey, \"' from '\").concat(this.id, \"'; no child states exist.\"));\n }\n\n var result = this.states[stateKey];\n\n if (!result) {\n throw new Error(\"Child state '\".concat(stateKey, \"' does not exist on '\").concat(this.id, \"'\"));\n }\n\n return result;\n };\n /**\r\n * Returns the state node with the given `stateId`, or throws.\r\n *\r\n * @param stateId The state ID. The prefix \"#\" is removed.\r\n */\n\n\n StateNode.prototype.getStateNodeById = function (stateId) {\n var resolvedStateId = isStateId(stateId) ? stateId.slice(STATE_IDENTIFIER.length) : stateId;\n\n if (resolvedStateId === this.id) {\n return this;\n }\n\n var stateNode = this.machine.idMap[resolvedStateId];\n\n if (!stateNode) {\n throw new Error(\"Child state node '#\".concat(resolvedStateId, \"' does not exist on machine '\").concat(this.id, \"'\"));\n }\n\n return stateNode;\n };\n /**\r\n * Returns the relative state node from the given `statePath`, or throws.\r\n *\r\n * @param statePath The string or string array relative path to the state node.\r\n */\n\n\n StateNode.prototype.getStateNodeByPath = function (statePath) {\n if (typeof statePath === 'string' && isStateId(statePath)) {\n try {\n return this.getStateNodeById(statePath.slice(1));\n } catch (e) {// try individual paths\n // throw e;\n }\n }\n\n var arrayStatePath = toStatePath(statePath, this.delimiter).slice();\n var currentStateNode = this;\n\n while (arrayStatePath.length) {\n var key = arrayStatePath.shift();\n\n if (!key.length) {\n break;\n }\n\n currentStateNode = currentStateNode.getStateNode(key);\n }\n\n return currentStateNode;\n };\n /**\r\n * Resolves a partial state value with its full representation in this machine.\r\n *\r\n * @param stateValue The partial state value to resolve.\r\n */\n\n\n StateNode.prototype.resolve = function (stateValue) {\n var _a;\n\n var _this = this;\n\n if (!stateValue) {\n return this.initialStateValue || EMPTY_OBJECT; // TODO: type-specific properties\n }\n\n switch (this.type) {\n case 'parallel':\n return mapValues(this.initialStateValue, function (subStateValue, subStateKey) {\n return subStateValue ? _this.getStateNode(subStateKey).resolve(stateValue[subStateKey] || subStateValue) : EMPTY_OBJECT;\n });\n\n case 'compound':\n if (isString(stateValue)) {\n var subStateNode = this.getStateNode(stateValue);\n\n if (subStateNode.type === 'parallel' || subStateNode.type === 'compound') {\n return _a = {}, _a[stateValue] = subStateNode.initialStateValue, _a;\n }\n\n return stateValue;\n }\n\n if (!Object.keys(stateValue).length) {\n return this.initialStateValue || {};\n }\n\n return mapValues(stateValue, function (subStateValue, subStateKey) {\n return subStateValue ? _this.getStateNode(subStateKey).resolve(subStateValue) : EMPTY_OBJECT;\n });\n\n default:\n return stateValue || EMPTY_OBJECT;\n }\n };\n\n StateNode.prototype.getResolvedPath = function (stateIdentifier) {\n if (isStateId(stateIdentifier)) {\n var stateNode = this.machine.idMap[stateIdentifier.slice(STATE_IDENTIFIER.length)];\n\n if (!stateNode) {\n throw new Error(\"Unable to find state node '\".concat(stateIdentifier, \"'\"));\n }\n\n return stateNode.path;\n }\n\n return toStatePath(stateIdentifier, this.delimiter);\n };\n\n Object.defineProperty(StateNode.prototype, \"initialStateValue\", {\n get: function () {\n var _a;\n\n if (this.__cache.initialStateValue) {\n return this.__cache.initialStateValue;\n }\n\n var initialStateValue;\n\n if (this.type === 'parallel') {\n initialStateValue = mapFilterValues(this.states, function (state) {\n return state.initialStateValue || EMPTY_OBJECT;\n }, function (stateNode) {\n return !(stateNode.type === 'history');\n });\n } else if (this.initial !== undefined) {\n if (!this.states[this.initial]) {\n throw new Error(\"Initial state '\".concat(this.initial, \"' not found on '\").concat(this.key, \"'\"));\n }\n\n initialStateValue = isLeafNode(this.states[this.initial]) ? this.initial : (_a = {}, _a[this.initial] = this.states[this.initial].initialStateValue, _a);\n } else {\n // The finite state value of a machine without child states is just an empty object\n initialStateValue = {};\n }\n\n this.__cache.initialStateValue = initialStateValue;\n return this.__cache.initialStateValue;\n },\n enumerable: false,\n configurable: true\n });\n\n StateNode.prototype.getInitialState = function (stateValue, context) {\n this._init(); // TODO: this should be in the constructor (see note in constructor)\n\n\n var configuration = this.getStateNodes(stateValue);\n return this.resolveTransition({\n configuration: configuration,\n entrySet: configuration,\n exitSet: [],\n transitions: [],\n source: undefined,\n actions: []\n }, undefined, context !== null && context !== void 0 ? context : this.machine.context, undefined);\n };\n\n Object.defineProperty(StateNode.prototype, \"initialState\", {\n /**\r\n * The initial State instance, which includes all actions to be executed from\r\n * entering the initial state.\r\n */\n get: function () {\n var initialStateValue = this.initialStateValue;\n\n if (!initialStateValue) {\n throw new Error(\"Cannot retrieve initial state from simple state '\".concat(this.id, \"'.\"));\n }\n\n return this.getInitialState(initialStateValue);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(StateNode.prototype, \"target\", {\n /**\r\n * The target state value of the history state node, if it exists. This represents the\r\n * default state value to transition to if no history value exists yet.\r\n */\n get: function () {\n var target;\n\n if (this.type === 'history') {\n var historyConfig = this.config;\n\n if (isString(historyConfig.target)) {\n target = isStateId(historyConfig.target) ? pathToStateValue(this.machine.getStateNodeById(historyConfig.target).path.slice(this.path.length - 1)) : historyConfig.target;\n } else {\n target = historyConfig.target;\n }\n }\n\n return target;\n },\n enumerable: false,\n configurable: true\n });\n /**\r\n * Returns the leaf nodes from a state path relative to this state node.\r\n *\r\n * @param relativeStateId The relative state path to retrieve the state nodes\r\n * @param history The previous state to retrieve history\r\n * @param resolve Whether state nodes should resolve to initial child state nodes\r\n */\n\n StateNode.prototype.getRelativeStateNodes = function (relativeStateId, historyValue, resolve) {\n if (resolve === void 0) {\n resolve = true;\n }\n\n return resolve ? relativeStateId.type === 'history' ? relativeStateId.resolveHistory(historyValue) : relativeStateId.initialStateNodes : [relativeStateId];\n };\n\n Object.defineProperty(StateNode.prototype, \"initialStateNodes\", {\n get: function () {\n var _this = this;\n\n if (isLeafNode(this)) {\n return [this];\n } // Case when state node is compound but no initial state is defined\n\n\n if (this.type === 'compound' && !this.initial) {\n if (!IS_PRODUCTION) {\n warn(false, \"Compound state node '\".concat(this.id, \"' has no initial state.\"));\n }\n\n return [this];\n }\n\n var initialStateNodePaths = toStatePaths(this.initialStateValue);\n return flatten(initialStateNodePaths.map(function (initialPath) {\n return _this.getFromRelativePath(initialPath);\n }));\n },\n enumerable: false,\n configurable: true\n });\n /**\r\n * Retrieves state nodes from a relative path to this state node.\r\n *\r\n * @param relativePath The relative path from this state node\r\n * @param historyValue\r\n */\n\n StateNode.prototype.getFromRelativePath = function (relativePath) {\n if (!relativePath.length) {\n return [this];\n }\n\n var _a = __read(relativePath),\n stateKey = _a[0],\n childStatePath = _a.slice(1);\n\n if (!this.states) {\n throw new Error(\"Cannot retrieve subPath '\".concat(stateKey, \"' from node with no states\"));\n }\n\n var childStateNode = this.getStateNode(stateKey);\n\n if (childStateNode.type === 'history') {\n return childStateNode.resolveHistory();\n }\n\n if (!this.states[stateKey]) {\n throw new Error(\"Child state '\".concat(stateKey, \"' does not exist on '\").concat(this.id, \"'\"));\n }\n\n return this.states[stateKey].getFromRelativePath(childStatePath);\n };\n\n StateNode.prototype.historyValue = function (relativeStateValue) {\n if (!Object.keys(this.states).length) {\n return undefined;\n }\n\n return {\n current: relativeStateValue || this.initialStateValue,\n states: mapFilterValues(this.states, function (stateNode, key) {\n if (!relativeStateValue) {\n return stateNode.historyValue();\n }\n\n var subStateValue = isString(relativeStateValue) ? undefined : relativeStateValue[key];\n return stateNode.historyValue(subStateValue || stateNode.initialStateValue);\n }, function (stateNode) {\n return !stateNode.history;\n })\n };\n };\n /**\r\n * Resolves to the historical value(s) of the parent state node,\r\n * represented by state nodes.\r\n *\r\n * @param historyValue\r\n */\n\n\n StateNode.prototype.resolveHistory = function (historyValue) {\n var _this = this;\n\n if (this.type !== 'history') {\n return [this];\n }\n\n var parent = this.parent;\n\n if (!historyValue) {\n var historyTarget = this.target;\n return historyTarget ? flatten(toStatePaths(historyTarget).map(function (relativeChildPath) {\n return parent.getFromRelativePath(relativeChildPath);\n })) : parent.initialStateNodes;\n }\n\n var subHistoryValue = nestedPath(parent.path, 'states')(historyValue).current;\n\n if (isString(subHistoryValue)) {\n return [parent.getStateNode(subHistoryValue)];\n }\n\n return flatten(toStatePaths(subHistoryValue).map(function (subStatePath) {\n return _this.history === 'deep' ? parent.getFromRelativePath(subStatePath) : [parent.states[subStatePath[0]]];\n }));\n };\n\n Object.defineProperty(StateNode.prototype, \"stateIds\", {\n /**\r\n * All the state node IDs of this state node and its descendant state nodes.\r\n */\n get: function () {\n var _this = this;\n\n var childStateIds = flatten(Object.keys(this.states).map(function (stateKey) {\n return _this.states[stateKey].stateIds;\n }));\n return [this.id].concat(childStateIds);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(StateNode.prototype, \"events\", {\n /**\r\n * All the event types accepted by this state node and its descendants.\r\n */\n get: function () {\n var e_7, _a, e_8, _b;\n\n if (this.__cache.events) {\n return this.__cache.events;\n }\n\n var states = this.states;\n var events = new Set(this.ownEvents);\n\n if (states) {\n try {\n for (var _c = __values(Object.keys(states)), _d = _c.next(); !_d.done; _d = _c.next()) {\n var stateId = _d.value;\n var state = states[stateId];\n\n if (state.states) {\n try {\n for (var _e = (e_8 = void 0, __values(state.events)), _f = _e.next(); !_f.done; _f = _e.next()) {\n var event_1 = _f.value;\n events.add(\"\".concat(event_1));\n }\n } catch (e_8_1) {\n e_8 = {\n error: e_8_1\n };\n } finally {\n try {\n if (_f && !_f.done && (_b = _e.return)) _b.call(_e);\n } finally {\n if (e_8) throw e_8.error;\n }\n }\n }\n }\n } catch (e_7_1) {\n e_7 = {\n error: e_7_1\n };\n } finally {\n try {\n if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n } finally {\n if (e_7) throw e_7.error;\n }\n }\n }\n\n return this.__cache.events = Array.from(events);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(StateNode.prototype, \"ownEvents\", {\n /**\r\n * All the events that have transitions directly from this state node.\r\n *\r\n * Excludes any inert events.\r\n */\n get: function () {\n var events = new Set(this.transitions.filter(function (transition) {\n return !(!transition.target && !transition.actions.length && transition.internal);\n }).map(function (transition) {\n return transition.eventType;\n }));\n return Array.from(events);\n },\n enumerable: false,\n configurable: true\n });\n\n StateNode.prototype.resolveTarget = function (_target) {\n var _this = this;\n\n if (_target === undefined) {\n // an undefined target signals that the state node should not transition from that state when receiving that event\n return undefined;\n }\n\n return _target.map(function (target) {\n if (!isString(target)) {\n return target;\n }\n\n var isInternalTarget = target[0] === _this.delimiter; // If internal target is defined on machine,\n // do not include machine key on target\n\n if (isInternalTarget && !_this.parent) {\n return _this.getStateNodeByPath(target.slice(1));\n }\n\n var resolvedTarget = isInternalTarget ? _this.key + target : target;\n\n if (_this.parent) {\n try {\n var targetStateNode = _this.parent.getStateNodeByPath(resolvedTarget);\n\n return targetStateNode;\n } catch (err) {\n throw new Error(\"Invalid transition definition for state node '\".concat(_this.id, \"':\\n\").concat(err.message));\n }\n } else {\n return _this.getStateNodeByPath(resolvedTarget);\n }\n });\n };\n\n StateNode.prototype.formatTransition = function (transitionConfig) {\n var _this = this;\n\n var normalizedTarget = normalizeTarget(transitionConfig.target);\n var internal = 'internal' in transitionConfig ? transitionConfig.internal : normalizedTarget ? normalizedTarget.some(function (_target) {\n return isString(_target) && _target[0] === _this.delimiter;\n }) : true;\n var guards = this.machine.options.guards;\n var target = this.resolveTarget(normalizedTarget);\n\n var transition = __assign(__assign({}, transitionConfig), {\n actions: toActionObjects(toArray(transitionConfig.actions)),\n cond: toGuard(transitionConfig.cond, guards),\n target: target,\n source: this,\n internal: internal,\n eventType: transitionConfig.event,\n toJSON: function () {\n return __assign(__assign({}, transition), {\n target: transition.target ? transition.target.map(function (t) {\n return \"#\".concat(t.id);\n }) : undefined,\n source: \"#\".concat(_this.id)\n });\n }\n });\n\n return transition;\n };\n\n StateNode.prototype.formatTransitions = function () {\n var e_9, _a;\n\n var _this = this;\n\n var onConfig;\n\n if (!this.config.on) {\n onConfig = [];\n } else if (Array.isArray(this.config.on)) {\n onConfig = this.config.on;\n } else {\n var _b = this.config.on,\n _c = WILDCARD,\n _d = _b[_c],\n wildcardConfigs = _d === void 0 ? [] : _d,\n strictTransitionConfigs_1 = __rest(_b, [typeof _c === \"symbol\" ? _c : _c + \"\"]);\n\n onConfig = flatten(Object.keys(strictTransitionConfigs_1).map(function (key) {\n if (!IS_PRODUCTION && key === NULL_EVENT) {\n warn(false, \"Empty string transition configs (e.g., `{ on: { '': ... }}`) for transient transitions are deprecated. Specify the transition in the `{ always: ... }` property instead. \" + \"Please check the `on` configuration for \\\"#\".concat(_this.id, \"\\\".\"));\n }\n\n var transitionConfigArray = toTransitionConfigArray(key, strictTransitionConfigs_1[key]);\n\n if (!IS_PRODUCTION) {\n validateArrayifiedTransitions(_this, key, transitionConfigArray);\n }\n\n return transitionConfigArray;\n }).concat(toTransitionConfigArray(WILDCARD, wildcardConfigs)));\n }\n\n var eventlessConfig = this.config.always ? toTransitionConfigArray('', this.config.always) : [];\n var doneConfig = this.config.onDone ? toTransitionConfigArray(String(done(this.id)), this.config.onDone) : [];\n\n if (!IS_PRODUCTION) {\n warn(!(this.config.onDone && !this.parent), \"Root nodes cannot have an \\\".onDone\\\" transition. Please check the config of \\\"\".concat(this.id, \"\\\".\"));\n }\n\n var invokeConfig = flatten(this.invoke.map(function (invokeDef) {\n var settleTransitions = [];\n\n if (invokeDef.onDone) {\n settleTransitions.push.apply(settleTransitions, __spreadArray([], __read(toTransitionConfigArray(String(doneInvoke(invokeDef.id)), invokeDef.onDone)), false));\n }\n\n if (invokeDef.onError) {\n settleTransitions.push.apply(settleTransitions, __spreadArray([], __read(toTransitionConfigArray(String(error(invokeDef.id)), invokeDef.onError)), false));\n }\n\n return settleTransitions;\n }));\n var delayedTransitions = this.after;\n var formattedTransitions = flatten(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], __read(doneConfig), false), __read(invokeConfig), false), __read(onConfig), false), __read(eventlessConfig), false).map(function (transitionConfig) {\n return toArray(transitionConfig).map(function (transition) {\n return _this.formatTransition(transition);\n });\n }));\n\n try {\n for (var delayedTransitions_1 = __values(delayedTransitions), delayedTransitions_1_1 = delayedTransitions_1.next(); !delayedTransitions_1_1.done; delayedTransitions_1_1 = delayedTransitions_1.next()) {\n var delayedTransition = delayedTransitions_1_1.value;\n formattedTransitions.push(delayedTransition);\n }\n } catch (e_9_1) {\n e_9 = {\n error: e_9_1\n };\n } finally {\n try {\n if (delayedTransitions_1_1 && !delayedTransitions_1_1.done && (_a = delayedTransitions_1.return)) _a.call(delayedTransitions_1);\n } finally {\n if (e_9) throw e_9.error;\n }\n }\n\n return formattedTransitions;\n };\n\n return StateNode;\n}();\n\nexport { StateNode };\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nfunction __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nfunction __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nfunction __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\n\nexport { __assign, __read, __rest, __spreadArray, __values };\n","import { ActionTypes } from './types.js';\n\nvar start = ActionTypes.Start;\nvar stop = ActionTypes.Stop;\nvar raise = ActionTypes.Raise;\nvar send = ActionTypes.Send;\nvar cancel = ActionTypes.Cancel;\nvar nullEvent = ActionTypes.NullEvent;\nvar assign = ActionTypes.Assign;\nvar after = ActionTypes.After;\nvar doneState = ActionTypes.DoneState;\nvar log = ActionTypes.Log;\nvar init = ActionTypes.Init;\nvar invoke = ActionTypes.Invoke;\nvar errorExecution = ActionTypes.ErrorExecution;\nvar errorPlatform = ActionTypes.ErrorPlatform;\nvar error = ActionTypes.ErrorCustom;\nvar update = ActionTypes.Update;\nvar choose = ActionTypes.Choose;\nvar pure = ActionTypes.Pure;\n\nexport { after, assign, cancel, choose, doneState, error, errorExecution, errorPlatform, init, invoke, log, nullEvent, pure, raise, send, start, stop, update };\n","import { __assign, __read, __spreadArray } from './_virtual/_tslib.js';\nimport { SpecialTargets, ActionTypes } from './types.js';\nimport { init, send as send$1, raise as raise$1, update, log as log$1, cancel as cancel$1, assign as assign$1, error as error$1, stop as stop$1, pure as pure$1, choose as choose$1 } from './actionTypes.js';\nimport * as actionTypes from './actionTypes.js';\nexport { actionTypes };\nimport { toSCXMLEvent, isString, isFunction, toEventObject, getEventType, partition, updateContext, flatten, toArray, toGuard, evaluateGuard, warn, isArray } from './utils.js';\nimport { IS_PRODUCTION } from './environment.js';\n\nvar initEvent = /*#__PURE__*/toSCXMLEvent({\n type: init\n});\nfunction getActionFunction(actionType, actionFunctionMap) {\n return actionFunctionMap ? actionFunctionMap[actionType] || undefined : undefined;\n}\nfunction toActionObject(action, actionFunctionMap) {\n var actionObject;\n\n if (isString(action) || typeof action === 'number') {\n var exec = getActionFunction(action, actionFunctionMap);\n\n if (isFunction(exec)) {\n actionObject = {\n type: action,\n exec: exec\n };\n } else if (exec) {\n actionObject = exec;\n } else {\n actionObject = {\n type: action,\n exec: undefined\n };\n }\n } else if (isFunction(action)) {\n actionObject = {\n // Convert action to string if unnamed\n type: action.name || action.toString(),\n exec: action\n };\n } else {\n var exec = getActionFunction(action.type, actionFunctionMap);\n\n if (isFunction(exec)) {\n actionObject = __assign(__assign({}, action), {\n exec: exec\n });\n } else if (exec) {\n var actionType = exec.type || action.type;\n actionObject = __assign(__assign(__assign({}, exec), action), {\n type: actionType\n });\n } else {\n actionObject = action;\n }\n }\n\n return actionObject;\n}\nvar toActionObjects = function (action, actionFunctionMap) {\n if (!action) {\n return [];\n }\n\n var actions = isArray(action) ? action : [action];\n return actions.map(function (subAction) {\n return toActionObject(subAction, actionFunctionMap);\n });\n};\nfunction toActivityDefinition(action) {\n var actionObject = toActionObject(action);\n return __assign(__assign({\n id: isString(action) ? action : actionObject.id\n }, actionObject), {\n type: actionObject.type\n });\n}\n/**\r\n * Raises an event. This places the event in the internal event queue, so that\r\n * the event is immediately consumed by the machine in the current step.\r\n *\r\n * @param eventType The event to raise.\r\n */\n\nfunction raise(event) {\n if (!isString(event)) {\n return send(event, {\n to: SpecialTargets.Internal\n });\n }\n\n return {\n type: raise$1,\n event: event\n };\n}\nfunction resolveRaise(action) {\n return {\n type: raise$1,\n _event: toSCXMLEvent(action.event)\n };\n}\n/**\r\n * Sends an event. This returns an action that will be read by an interpreter to\r\n * send the event in the next step, after the current step is finished executing.\r\n *\r\n * @param event The event to send.\r\n * @param options Options to pass into the send event:\r\n * - `id` - The unique send event identifier (used with `cancel()`).\r\n * - `delay` - The number of milliseconds to delay the sending of the event.\r\n * - `to` - The target of this event (by default, the machine the event was sent from).\r\n */\n\nfunction send(event, options) {\n return {\n to: options ? options.to : undefined,\n type: send$1,\n event: isFunction(event) ? event : toEventObject(event),\n delay: options ? options.delay : undefined,\n id: options && options.id !== undefined ? options.id : isFunction(event) ? event.name : getEventType(event)\n };\n}\nfunction resolveSend(action, ctx, _event, delaysMap) {\n var meta = {\n _event: _event\n }; // TODO: helper function for resolving Expr\n\n var resolvedEvent = toSCXMLEvent(isFunction(action.event) ? action.event(ctx, _event.data, meta) : action.event);\n var resolvedDelay;\n\n if (isString(action.delay)) {\n var configDelay = delaysMap && delaysMap[action.delay];\n resolvedDelay = isFunction(configDelay) ? configDelay(ctx, _event.data, meta) : configDelay;\n } else {\n resolvedDelay = isFunction(action.delay) ? action.delay(ctx, _event.data, meta) : action.delay;\n }\n\n var resolvedTarget = isFunction(action.to) ? action.to(ctx, _event.data, meta) : action.to;\n return __assign(__assign({}, action), {\n to: resolvedTarget,\n _event: resolvedEvent,\n event: resolvedEvent.data,\n delay: resolvedDelay\n });\n}\n/**\r\n * Sends an event to this machine's parent.\r\n *\r\n * @param event The event to send to the parent machine.\r\n * @param options Options to pass into the send event.\r\n */\n\nfunction sendParent(event, options) {\n return send(event, __assign(__assign({}, options), {\n to: SpecialTargets.Parent\n }));\n}\n/**\r\n * Sends an event to an actor.\r\n *\r\n * @param actor The `ActorRef` to send the event to.\r\n * @param event The event to send, or an expression that evaluates to the event to send\r\n * @param options Send action options\r\n * @returns An XState send action object\r\n */\n\nfunction sendTo(actor, event, options) {\n return send(event, __assign(__assign({}, options), {\n to: actor\n }));\n}\n/**\r\n * Sends an update event to this machine's parent.\r\n */\n\nfunction sendUpdate() {\n return sendParent(update);\n}\n/**\r\n * Sends an event back to the sender of the original event.\r\n *\r\n * @param event The event to send back to the sender\r\n * @param options Options to pass into the send event\r\n */\n\nfunction respond(event, options) {\n return send(event, __assign(__assign({}, options), {\n to: function (_, __, _a) {\n var _event = _a._event;\n return _event.origin; // TODO: handle when _event.origin is undefined\n }\n }));\n}\n\nvar defaultLogExpr = function (context, event) {\n return {\n context: context,\n event: event\n };\n};\n/**\r\n *\r\n * @param expr The expression function to evaluate which will be logged.\r\n * Takes in 2 arguments:\r\n * - `ctx` - the current state context\r\n * - `event` - the event that caused this action to be executed.\r\n * @param label The label to give to the logged expression.\r\n */\n\n\nfunction log(expr, label) {\n if (expr === void 0) {\n expr = defaultLogExpr;\n }\n\n return {\n type: log$1,\n label: label,\n expr: expr\n };\n}\nvar resolveLog = function (action, ctx, _event) {\n return __assign(__assign({}, action), {\n value: isString(action.expr) ? action.expr : action.expr(ctx, _event.data, {\n _event: _event\n })\n });\n};\n/**\r\n * Cancels an in-flight `send(...)` action. A canceled sent action will not\r\n * be executed, nor will its event be sent, unless it has already been sent\r\n * (e.g., if `cancel(...)` is called after the `send(...)` action's `delay`).\r\n *\r\n * @param sendId The `id` of the `send(...)` action to cancel.\r\n */\n\nvar cancel = function (sendId) {\n return {\n type: cancel$1,\n sendId: sendId\n };\n};\n/**\r\n * Starts an activity.\r\n *\r\n * @param activity The activity to start.\r\n */\n\nfunction start(activity) {\n var activityDef = toActivityDefinition(activity);\n return {\n type: ActionTypes.Start,\n activity: activityDef,\n exec: undefined\n };\n}\n/**\r\n * Stops an activity.\r\n *\r\n * @param actorRef The activity to stop.\r\n */\n\nfunction stop(actorRef) {\n var activity = isFunction(actorRef) ? actorRef : toActivityDefinition(actorRef);\n return {\n type: ActionTypes.Stop,\n activity: activity,\n exec: undefined\n };\n}\nfunction resolveStop(action, context, _event) {\n var actorRefOrString = isFunction(action.activity) ? action.activity(context, _event.data) : action.activity;\n var resolvedActorRef = typeof actorRefOrString === 'string' ? {\n id: actorRefOrString\n } : actorRefOrString;\n var actionObject = {\n type: ActionTypes.Stop,\n activity: resolvedActorRef\n };\n return actionObject;\n}\n/**\r\n * Updates the current context of the machine.\r\n *\r\n * @param assignment An object that represents the partial context to update.\r\n */\n\nvar assign = function (assignment) {\n return {\n type: assign$1,\n assignment: assignment\n };\n};\nfunction isActionObject(action) {\n return typeof action === 'object' && 'type' in action;\n}\n/**\r\n * Returns an event type that represents an implicit event that\r\n * is sent after the specified `delay`.\r\n *\r\n * @param delayRef The delay in milliseconds\r\n * @param id The state node ID where this event is handled\r\n */\n\nfunction after(delayRef, id) {\n var idSuffix = id ? \"#\".concat(id) : '';\n return \"\".concat(ActionTypes.After, \"(\").concat(delayRef, \")\").concat(idSuffix);\n}\n/**\r\n * Returns an event that represents that a final state node\r\n * has been reached in the parent state node.\r\n *\r\n * @param id The final state node's parent state node `id`\r\n * @param data The data to pass into the event\r\n */\n\nfunction done(id, data) {\n var type = \"\".concat(ActionTypes.DoneState, \".\").concat(id);\n var eventObject = {\n type: type,\n data: data\n };\n\n eventObject.toString = function () {\n return type;\n };\n\n return eventObject;\n}\n/**\r\n * Returns an event that represents that an invoked service has terminated.\r\n *\r\n * An invoked service is terminated when it has reached a top-level final state node,\r\n * but not when it is canceled.\r\n *\r\n * @param id The final state node ID\r\n * @param data The data to pass into the event\r\n */\n\nfunction doneInvoke(id, data) {\n var type = \"\".concat(ActionTypes.DoneInvoke, \".\").concat(id);\n var eventObject = {\n type: type,\n data: data\n };\n\n eventObject.toString = function () {\n return type;\n };\n\n return eventObject;\n}\nfunction error(id, data) {\n var type = \"\".concat(ActionTypes.ErrorPlatform, \".\").concat(id);\n var eventObject = {\n type: type,\n data: data\n };\n\n eventObject.toString = function () {\n return type;\n };\n\n return eventObject;\n}\nfunction pure(getActions) {\n return {\n type: ActionTypes.Pure,\n get: getActions\n };\n}\n/**\r\n * Forwards (sends) an event to a specified service.\r\n *\r\n * @param target The target service to forward the event to.\r\n * @param options Options to pass into the send action creator.\r\n */\n\nfunction forwardTo(target, options) {\n return send(function (_, event) {\n return event;\n }, __assign(__assign({}, options), {\n to: target\n }));\n}\n/**\r\n * Escalates an error by sending it as an event to this machine's parent.\r\n *\r\n * @param errorData The error data to send, or the expression function that\r\n * takes in the `context`, `event`, and `meta`, and returns the error data to send.\r\n * @param options Options to pass into the send action creator.\r\n */\n\nfunction escalate(errorData, options) {\n return sendParent(function (context, event, meta) {\n return {\n type: error$1,\n data: isFunction(errorData) ? errorData(context, event, meta) : errorData\n };\n }, __assign(__assign({}, options), {\n to: SpecialTargets.Parent\n }));\n}\nfunction choose(conds) {\n return {\n type: ActionTypes.Choose,\n conds: conds\n };\n}\nfunction resolveActions(machine, currentState, currentContext, _event, actions, preserveActionOrder) {\n if (preserveActionOrder === void 0) {\n preserveActionOrder = false;\n }\n\n var _a = __read(preserveActionOrder ? [[], actions] : partition(actions, function (action) {\n return action.type === assign$1;\n }), 2),\n assignActions = _a[0],\n otherActions = _a[1];\n\n var updatedContext = assignActions.length ? updateContext(currentContext, _event, assignActions, currentState) : currentContext;\n var preservedContexts = preserveActionOrder ? [currentContext] : undefined;\n var resolvedActions = flatten(otherActions.map(function (actionObject) {\n var _a;\n\n switch (actionObject.type) {\n case raise$1:\n return resolveRaise(actionObject);\n\n case send$1:\n var sendAction = resolveSend(actionObject, updatedContext, _event, machine.options.delays); // TODO: fix ActionTypes.Init\n\n if (!IS_PRODUCTION) {\n // warn after resolving as we can create better contextual message here\n warn(!isString(actionObject.delay) || typeof sendAction.delay === 'number', // tslint:disable-next-line:max-line-length\n \"No delay reference for delay expression '\".concat(actionObject.delay, \"' was found on machine '\").concat(machine.id, \"'\"));\n }\n\n return sendAction;\n\n case log$1:\n return resolveLog(actionObject, updatedContext, _event);\n\n case choose$1:\n {\n var chooseAction = actionObject;\n var matchedActions = (_a = chooseAction.conds.find(function (condition) {\n var guard = toGuard(condition.cond, machine.options.guards);\n return !guard || evaluateGuard(machine, guard, updatedContext, _event, currentState);\n })) === null || _a === void 0 ? void 0 : _a.actions;\n\n if (!matchedActions) {\n return [];\n }\n\n var _b = __read(resolveActions(machine, currentState, updatedContext, _event, toActionObjects(toArray(matchedActions), machine.options.actions), preserveActionOrder), 2),\n resolvedActionsFromChoose = _b[0],\n resolvedContextFromChoose = _b[1];\n\n updatedContext = resolvedContextFromChoose;\n preservedContexts === null || preservedContexts === void 0 ? void 0 : preservedContexts.push(updatedContext);\n return resolvedActionsFromChoose;\n }\n\n case pure$1:\n {\n var matchedActions = actionObject.get(updatedContext, _event.data);\n\n if (!matchedActions) {\n return [];\n }\n\n var _c = __read(resolveActions(machine, currentState, updatedContext, _event, toActionObjects(toArray(matchedActions), machine.options.actions), preserveActionOrder), 2),\n resolvedActionsFromPure = _c[0],\n resolvedContext = _c[1];\n\n updatedContext = resolvedContext;\n preservedContexts === null || preservedContexts === void 0 ? void 0 : preservedContexts.push(updatedContext);\n return resolvedActionsFromPure;\n }\n\n case stop$1:\n {\n return resolveStop(actionObject, updatedContext, _event);\n }\n\n case assign$1:\n {\n updatedContext = updateContext(updatedContext, _event, [actionObject], currentState);\n preservedContexts === null || preservedContexts === void 0 ? void 0 : preservedContexts.push(updatedContext);\n break;\n }\n\n default:\n var resolvedActionObject = toActionObject(actionObject, machine.options.actions);\n var exec_1 = resolvedActionObject.exec;\n\n if (exec_1 && preservedContexts) {\n var contextIndex_1 = preservedContexts.length - 1;\n resolvedActionObject = __assign(__assign({}, resolvedActionObject), {\n exec: function (_ctx) {\n var args = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n\n exec_1.apply(void 0, __spreadArray([preservedContexts[contextIndex_1]], __read(args), false));\n }\n });\n }\n\n return resolvedActionObject;\n }\n }).filter(function (a) {\n return !!a;\n }));\n return [resolvedActions, updatedContext];\n}\n\nexport { after, assign, cancel, choose, done, doneInvoke, error, escalate, forwardTo, getActionFunction, initEvent, isActionObject, log, pure, raise, resolveActions, resolveLog, resolveRaise, resolveSend, resolveStop, respond, send, sendParent, sendTo, sendUpdate, start, stop, toActionObject, toActionObjects, toActivityDefinition };\n","var STATE_DELIMITER = '.';\nvar EMPTY_ACTIVITY_MAP = {};\nvar DEFAULT_GUARD_TYPE = 'xstate.guard';\nvar TARGETLESS_KEY = '';\n\nexport { DEFAULT_GUARD_TYPE, EMPTY_ACTIVITY_MAP, STATE_DELIMITER, TARGETLESS_KEY };\n","var IS_PRODUCTION = process.env.NODE_ENV === 'production';\n\nexport { IS_PRODUCTION };\n","import { __assign } from './_virtual/_tslib.js';\n\nvar defaultOptions = {\n deferEvents: false\n};\n\nvar Scheduler =\n/*#__PURE__*/\n\n/** @class */\nfunction () {\n function Scheduler(options) {\n this.processingEvent = false;\n this.queue = [];\n this.initialized = false;\n this.options = __assign(__assign({}, defaultOptions), options);\n }\n\n Scheduler.prototype.initialize = function (callback) {\n this.initialized = true;\n\n if (callback) {\n if (!this.options.deferEvents) {\n this.schedule(callback);\n return;\n }\n\n this.process(callback);\n }\n\n this.flushEvents();\n };\n\n Scheduler.prototype.schedule = function (task) {\n if (!this.initialized || this.processingEvent) {\n this.queue.push(task);\n return;\n }\n\n if (this.queue.length !== 0) {\n throw new Error('Event queue should be empty when it is not processing events');\n }\n\n this.process(task);\n this.flushEvents();\n };\n\n Scheduler.prototype.clear = function () {\n this.queue = [];\n };\n\n Scheduler.prototype.flushEvents = function () {\n var nextCallback = this.queue.shift();\n\n while (nextCallback) {\n this.process(nextCallback);\n nextCallback = this.queue.shift();\n }\n };\n\n Scheduler.prototype.process = function (callback) {\n this.processingEvent = true;\n\n try {\n callback();\n } catch (e) {\n // there is no use to keep the future events\n // as the situation is not anymore the same\n this.clear();\n throw e;\n } finally {\n this.processingEvent = false;\n }\n };\n\n return Scheduler;\n}();\n\nexport { Scheduler };\n","var children = /*#__PURE__*/new Map();\nvar sessionIdIndex = 0;\nvar registry = {\n bookId: function () {\n return \"x:\".concat(sessionIdIndex++);\n },\n register: function (id, actor) {\n children.set(id, actor);\n return id;\n },\n get: function (id) {\n return children.get(id);\n },\n free: function (id) {\n children.delete(id);\n }\n};\n\nexport { registry };\n","import { IS_PRODUCTION } from './environment.js';\n\nfunction getGlobal() {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n\n if (typeof self !== 'undefined') {\n return self;\n }\n\n if (typeof window !== 'undefined') {\n return window;\n }\n\n if (typeof global !== 'undefined') {\n return global;\n }\n\n if (!IS_PRODUCTION) {\n console.warn('XState could not find a global object in this environment. Please let the maintainers know and raise an issue here: https://github.com/statelyai/xstate/issues');\n }\n}\n\nfunction getDevTools() {\n var global = getGlobal();\n\n if (global && '__xstate__' in global) {\n return global.__xstate__;\n }\n\n return undefined;\n}\n\nfunction registerService(service) {\n if (!getGlobal()) {\n return;\n }\n\n var devTools = getDevTools();\n\n if (devTools) {\n devTools.register(service);\n }\n}\n\nexport { getGlobal, registerService };\n","import { error, doneInvoke } from './actions.js';\nimport { toActorRef } from './Actor.js';\nimport { toObserver } from './utils.js';\n\n/**\r\n * Returns an actor behavior from a reducer and its initial state.\r\n *\r\n * @param transition The pure reducer that returns the next state given the current state and event.\r\n * @param initialState The initial state of the reducer.\r\n * @returns An actor behavior\r\n */\n\nfunction fromReducer(transition, initialState) {\n return {\n transition: transition,\n initialState: initialState\n };\n}\nfunction fromPromise(promiseFn) {\n var initialState = {\n error: undefined,\n data: undefined,\n status: 'pending'\n };\n return {\n transition: function (state, event, _a) {\n var parent = _a.parent,\n id = _a.id,\n observers = _a.observers;\n\n switch (event.type) {\n case 'fulfill':\n parent === null || parent === void 0 ? void 0 : parent.send(doneInvoke(id, event.data));\n return {\n error: undefined,\n data: event.data,\n status: 'fulfilled'\n };\n\n case 'reject':\n parent === null || parent === void 0 ? void 0 : parent.send(error(id, event.error));\n observers.forEach(function (observer) {\n observer.error(event.error);\n });\n return {\n error: event.error,\n data: undefined,\n status: 'rejected'\n };\n\n default:\n return state;\n }\n },\n initialState: initialState,\n start: function (_a) {\n var self = _a.self;\n promiseFn().then(function (data) {\n self.send({\n type: 'fulfill',\n data: data\n });\n }, function (reason) {\n self.send({\n type: 'reject',\n error: reason\n });\n });\n return initialState;\n }\n };\n}\nfunction spawnBehavior(behavior, options) {\n if (options === void 0) {\n options = {};\n }\n\n var state = behavior.initialState;\n var observers = new Set();\n var mailbox = [];\n var flushing = false;\n\n var flush = function () {\n if (flushing) {\n return;\n }\n\n flushing = true;\n\n while (mailbox.length > 0) {\n var event_1 = mailbox.shift();\n state = behavior.transition(state, event_1, actorCtx);\n observers.forEach(function (observer) {\n return observer.next(state);\n });\n }\n\n flushing = false;\n };\n\n var actor = toActorRef({\n id: options.id,\n send: function (event) {\n mailbox.push(event);\n flush();\n },\n getSnapshot: function () {\n return state;\n },\n subscribe: function (next, handleError, complete) {\n var observer = toObserver(next, handleError, complete);\n observers.add(observer);\n observer.next(state);\n return {\n unsubscribe: function () {\n observers.delete(observer);\n }\n };\n }\n });\n var actorCtx = {\n parent: options.parent,\n self: actor,\n id: options.id || 'anonymous',\n observers: observers\n };\n state = behavior.start ? behavior.start(actorCtx) : state;\n return actor;\n}\n\nexport { fromPromise, fromReducer, spawnBehavior };\n","import { __values, __spreadArray, __read, __assign } from './_virtual/_tslib.js';\nimport { ActionTypes, SpecialTargets } from './types.js';\nimport { isStateConfig, State, bindActionToState } from './State.js';\nimport { errorPlatform, log, stop, start, cancel, send, update, error as error$1 } from './actionTypes.js';\nimport { doneInvoke, initEvent, getActionFunction, error } from './actions.js';\nimport { IS_PRODUCTION } from './environment.js';\nimport { warn, mapContext, isFunction, toSCXMLEvent, toInvokeSource, isMachine, isPromiseLike, isObservable, isBehavior, reportUnhandledExceptionOnInvocation, symbolObservable, isArray, toEventObject, isString, isActor, uniqueId, toObserver } from './utils.js';\nimport { Scheduler } from './scheduler.js';\nimport { isSpawnedActor, createDeferredActor } from './Actor.js';\nimport { isInFinalState } from './stateUtils.js';\nimport { registry } from './registry.js';\nimport { getGlobal, registerService } from './devTools.js';\nimport { provide, consume } from './serviceScope.js';\nimport { spawnBehavior } from './behaviors.js';\n\nvar DEFAULT_SPAWN_OPTIONS = {\n sync: false,\n autoForward: false\n};\nvar InterpreterStatus;\n\n(function (InterpreterStatus) {\n InterpreterStatus[InterpreterStatus[\"NotStarted\"] = 0] = \"NotStarted\";\n InterpreterStatus[InterpreterStatus[\"Running\"] = 1] = \"Running\";\n InterpreterStatus[InterpreterStatus[\"Stopped\"] = 2] = \"Stopped\";\n})(InterpreterStatus || (InterpreterStatus = {}));\n\nvar Interpreter =\n/*#__PURE__*/\n\n/** @class */\nfunction () {\n /**\r\n * Creates a new Interpreter instance (i.e., service) for the given machine with the provided options, if any.\r\n *\r\n * @param machine The machine to be interpreted\r\n * @param options Interpreter options\r\n */\n function Interpreter(machine, options) {\n var _this = this;\n\n if (options === void 0) {\n options = Interpreter.defaultOptions;\n }\n\n this.machine = machine;\n this.delayedEventsMap = {};\n this.listeners = new Set();\n this.contextListeners = new Set();\n this.stopListeners = new Set();\n this.doneListeners = new Set();\n this.eventListeners = new Set();\n this.sendListeners = new Set();\n /**\r\n * Whether the service is started.\r\n */\n\n this.initialized = false;\n this.status = InterpreterStatus.NotStarted;\n this.children = new Map();\n this.forwardTo = new Set();\n /**\r\n * Alias for Interpreter.prototype.start\r\n */\n\n this.init = this.start;\n /**\r\n * Sends an event to the running interpreter to trigger a transition.\r\n *\r\n * An array of events (batched) can be sent as well, which will send all\r\n * batched events to the running interpreter. The listeners will be\r\n * notified only **once** when all events are processed.\r\n *\r\n * @param event The event(s) to send\r\n */\n\n this.send = function (event, payload) {\n if (isArray(event)) {\n _this.batch(event);\n\n return _this.state;\n }\n\n var _event = toSCXMLEvent(toEventObject(event, payload));\n\n if (_this.status === InterpreterStatus.Stopped) {\n // do nothing\n if (!IS_PRODUCTION) {\n warn(false, \"Event \\\"\".concat(_event.name, \"\\\" was sent to stopped service \\\"\").concat(_this.machine.id, \"\\\". This service has already reached its final state, and will not transition.\\nEvent: \").concat(JSON.stringify(_event.data)));\n }\n\n return _this.state;\n }\n\n if (_this.status !== InterpreterStatus.Running && !_this.options.deferEvents) {\n throw new Error(\"Event \\\"\".concat(_event.name, \"\\\" was sent to uninitialized service \\\"\").concat(_this.machine.id // tslint:disable-next-line:max-line-length\n , \"\\\". Make sure .start() is called for this service, or set { deferEvents: true } in the service options.\\nEvent: \").concat(JSON.stringify(_event.data)));\n }\n\n _this.scheduler.schedule(function () {\n // Forward copy of event to child actors\n _this.forward(_event);\n\n var nextState = _this.nextState(_event);\n\n _this.update(nextState, _event);\n });\n\n return _this._state; // TODO: deprecate (should return void)\n // tslint:disable-next-line:semicolon\n };\n\n this.sendTo = function (event, to) {\n var isParent = _this.parent && (to === SpecialTargets.Parent || _this.parent.id === to);\n var target = isParent ? _this.parent : isString(to) ? _this.children.get(to) || registry.get(to) : isActor(to) ? to : undefined;\n\n if (!target) {\n if (!isParent) {\n throw new Error(\"Unable to send event to child '\".concat(to, \"' from service '\").concat(_this.id, \"'.\"));\n } // tslint:disable-next-line:no-console\n\n\n if (!IS_PRODUCTION) {\n warn(false, \"Service '\".concat(_this.id, \"' has no parent: unable to send event \").concat(event.type));\n }\n\n return;\n }\n\n if ('machine' in target) {\n // Send SCXML events to machines\n target.send(__assign(__assign({}, event), {\n name: event.name === error$1 ? \"\".concat(error(_this.id)) : event.name,\n origin: _this.sessionId\n }));\n } else {\n // Send normal events to other targets\n target.send(event.data);\n }\n };\n\n var resolvedOptions = __assign(__assign({}, Interpreter.defaultOptions), options);\n\n var clock = resolvedOptions.clock,\n logger = resolvedOptions.logger,\n parent = resolvedOptions.parent,\n id = resolvedOptions.id;\n var resolvedId = id !== undefined ? id : machine.id;\n this.id = resolvedId;\n this.logger = logger;\n this.clock = clock;\n this.parent = parent;\n this.options = resolvedOptions;\n this.scheduler = new Scheduler({\n deferEvents: this.options.deferEvents\n });\n this.sessionId = registry.bookId();\n }\n\n Object.defineProperty(Interpreter.prototype, \"initialState\", {\n get: function () {\n var _this = this;\n\n if (this._initialState) {\n return this._initialState;\n }\n\n return provide(this, function () {\n _this._initialState = _this.machine.initialState;\n return _this._initialState;\n });\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Interpreter.prototype, \"state\", {\n get: function () {\n if (!IS_PRODUCTION) {\n warn(this.status !== InterpreterStatus.NotStarted, \"Attempted to read state from uninitialized service '\".concat(this.id, \"'. Make sure the service is started first.\"));\n }\n\n return this._state;\n },\n enumerable: false,\n configurable: true\n });\n /**\r\n * Executes the actions of the given state, with that state's `context` and `event`.\r\n *\r\n * @param state The state whose actions will be executed\r\n * @param actionsConfig The action implementations to use\r\n */\n\n Interpreter.prototype.execute = function (state, actionsConfig) {\n var e_1, _a;\n\n try {\n for (var _b = __values(state.actions), _c = _b.next(); !_c.done; _c = _b.next()) {\n var action = _c.value;\n this.exec(action, state, actionsConfig);\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n };\n\n Interpreter.prototype.update = function (state, _event) {\n var e_2, _a, e_3, _b, e_4, _c, e_5, _d;\n\n var _this = this; // Attach session ID to state\n\n\n state._sessionid = this.sessionId; // Update state\n\n this._state = state; // Execute actions\n\n if (this.options.execute) {\n this.execute(this.state);\n } // Update children\n\n\n this.children.forEach(function (child) {\n _this.state.children[child.id] = child;\n }); // Dev tools\n\n if (this.devTools) {\n this.devTools.send(_event.data, state);\n } // Execute listeners\n\n\n if (state.event) {\n try {\n for (var _e = __values(this.eventListeners), _f = _e.next(); !_f.done; _f = _e.next()) {\n var listener = _f.value;\n listener(state.event);\n }\n } catch (e_2_1) {\n e_2 = {\n error: e_2_1\n };\n } finally {\n try {\n if (_f && !_f.done && (_a = _e.return)) _a.call(_e);\n } finally {\n if (e_2) throw e_2.error;\n }\n }\n }\n\n try {\n for (var _g = __values(this.listeners), _h = _g.next(); !_h.done; _h = _g.next()) {\n var listener = _h.value;\n listener(state, state.event);\n }\n } catch (e_3_1) {\n e_3 = {\n error: e_3_1\n };\n } finally {\n try {\n if (_h && !_h.done && (_b = _g.return)) _b.call(_g);\n } finally {\n if (e_3) throw e_3.error;\n }\n }\n\n try {\n for (var _j = __values(this.contextListeners), _k = _j.next(); !_k.done; _k = _j.next()) {\n var contextListener = _k.value;\n contextListener(this.state.context, this.state.history ? this.state.history.context : undefined);\n }\n } catch (e_4_1) {\n e_4 = {\n error: e_4_1\n };\n } finally {\n try {\n if (_k && !_k.done && (_c = _j.return)) _c.call(_j);\n } finally {\n if (e_4) throw e_4.error;\n }\n }\n\n var isDone = isInFinalState(state.configuration || [], this.machine);\n\n if (this.state.configuration && isDone) {\n // get final child state node\n var finalChildStateNode = state.configuration.find(function (sn) {\n return sn.type === 'final' && sn.parent === _this.machine;\n });\n var doneData = finalChildStateNode && finalChildStateNode.doneData ? mapContext(finalChildStateNode.doneData, state.context, _event) : undefined;\n\n try {\n for (var _l = __values(this.doneListeners), _m = _l.next(); !_m.done; _m = _l.next()) {\n var listener = _m.value;\n listener(doneInvoke(this.id, doneData));\n }\n } catch (e_5_1) {\n e_5 = {\n error: e_5_1\n };\n } finally {\n try {\n if (_m && !_m.done && (_d = _l.return)) _d.call(_l);\n } finally {\n if (e_5) throw e_5.error;\n }\n }\n\n this.stop();\n }\n };\n /*\r\n * Adds a listener that is notified whenever a state transition happens. The listener is called with\r\n * the next state and the event object that caused the state transition.\r\n *\r\n * @param listener The state listener\r\n */\n\n\n Interpreter.prototype.onTransition = function (listener) {\n this.listeners.add(listener); // Send current state to listener\n\n if (this.status === InterpreterStatus.Running) {\n listener(this.state, this.state.event);\n }\n\n return this;\n };\n\n Interpreter.prototype.subscribe = function (nextListenerOrObserver, _, // TODO: error listener\n completeListener) {\n var _this = this;\n\n if (!nextListenerOrObserver) {\n return {\n unsubscribe: function () {\n return void 0;\n }\n };\n }\n\n var listener;\n var resolvedCompleteListener = completeListener;\n\n if (typeof nextListenerOrObserver === 'function') {\n listener = nextListenerOrObserver;\n } else {\n listener = nextListenerOrObserver.next.bind(nextListenerOrObserver);\n resolvedCompleteListener = nextListenerOrObserver.complete.bind(nextListenerOrObserver);\n }\n\n this.listeners.add(listener); // Send current state to listener\n\n if (this.status !== InterpreterStatus.NotStarted) {\n listener(this.state);\n }\n\n if (resolvedCompleteListener) {\n if (this.status === InterpreterStatus.Stopped) {\n resolvedCompleteListener();\n } else {\n this.onDone(resolvedCompleteListener);\n }\n }\n\n return {\n unsubscribe: function () {\n listener && _this.listeners.delete(listener);\n resolvedCompleteListener && _this.doneListeners.delete(resolvedCompleteListener);\n }\n };\n };\n /**\r\n * Adds an event listener that is notified whenever an event is sent to the running interpreter.\r\n * @param listener The event listener\r\n */\n\n\n Interpreter.prototype.onEvent = function (listener) {\n this.eventListeners.add(listener);\n return this;\n };\n /**\r\n * Adds an event listener that is notified whenever a `send` event occurs.\r\n * @param listener The event listener\r\n */\n\n\n Interpreter.prototype.onSend = function (listener) {\n this.sendListeners.add(listener);\n return this;\n };\n /**\r\n * Adds a context listener that is notified whenever the state context changes.\r\n * @param listener The context listener\r\n */\n\n\n Interpreter.prototype.onChange = function (listener) {\n this.contextListeners.add(listener);\n return this;\n };\n /**\r\n * Adds a listener that is notified when the machine is stopped.\r\n * @param listener The listener\r\n */\n\n\n Interpreter.prototype.onStop = function (listener) {\n this.stopListeners.add(listener);\n return this;\n };\n /**\r\n * Adds a state listener that is notified when the statechart has reached its final state.\r\n * @param listener The state listener\r\n */\n\n\n Interpreter.prototype.onDone = function (listener) {\n this.doneListeners.add(listener);\n return this;\n };\n /**\r\n * Removes a listener.\r\n * @param listener The listener to remove\r\n */\n\n\n Interpreter.prototype.off = function (listener) {\n this.listeners.delete(listener);\n this.eventListeners.delete(listener);\n this.sendListeners.delete(listener);\n this.stopListeners.delete(listener);\n this.doneListeners.delete(listener);\n this.contextListeners.delete(listener);\n return this;\n };\n /**\r\n * Starts the interpreter from the given state, or the initial state.\r\n * @param initialState The state to start the statechart from\r\n */\n\n\n Interpreter.prototype.start = function (initialState) {\n var _this = this;\n\n if (this.status === InterpreterStatus.Running) {\n // Do not restart the service if it is already started\n return this;\n } // yes, it's a hack but we need the related cache to be populated for some things to work (like delayed transitions)\n // this is usually called by `machine.getInitialState` but if we rehydrate from a state we might bypass this call\n // we also don't want to call this method here as it resolves the full initial state which might involve calling assign actions\n // and that could potentially lead to some unwanted side-effects (even such as creating some rogue actors)\n\n\n this.machine._init();\n\n registry.register(this.sessionId, this);\n this.initialized = true;\n this.status = InterpreterStatus.Running;\n var resolvedState = initialState === undefined ? this.initialState : provide(this, function () {\n return isStateConfig(initialState) ? _this.machine.resolveState(initialState) : _this.machine.resolveState(State.from(initialState, _this.machine.context));\n });\n\n if (this.options.devTools) {\n this.attachDev();\n }\n\n this.scheduler.initialize(function () {\n _this.update(resolvedState, initEvent);\n });\n return this;\n };\n /**\r\n * Stops the interpreter and unsubscribe all listeners.\r\n *\r\n * This will also notify the `onStop` listeners.\r\n */\n\n\n Interpreter.prototype.stop = function () {\n var e_6, _a, e_7, _b, e_8, _c, e_9, _d, e_10, _e;\n\n var _this = this;\n\n try {\n for (var _f = __values(this.listeners), _g = _f.next(); !_g.done; _g = _f.next()) {\n var listener = _g.value;\n this.listeners.delete(listener);\n }\n } catch (e_6_1) {\n e_6 = {\n error: e_6_1\n };\n } finally {\n try {\n if (_g && !_g.done && (_a = _f.return)) _a.call(_f);\n } finally {\n if (e_6) throw e_6.error;\n }\n }\n\n try {\n for (var _h = __values(this.stopListeners), _j = _h.next(); !_j.done; _j = _h.next()) {\n var listener = _j.value; // call listener, then remove\n\n listener();\n this.stopListeners.delete(listener);\n }\n } catch (e_7_1) {\n e_7 = {\n error: e_7_1\n };\n } finally {\n try {\n if (_j && !_j.done && (_b = _h.return)) _b.call(_h);\n } finally {\n if (e_7) throw e_7.error;\n }\n }\n\n try {\n for (var _k = __values(this.contextListeners), _l = _k.next(); !_l.done; _l = _k.next()) {\n var listener = _l.value;\n this.contextListeners.delete(listener);\n }\n } catch (e_8_1) {\n e_8 = {\n error: e_8_1\n };\n } finally {\n try {\n if (_l && !_l.done && (_c = _k.return)) _c.call(_k);\n } finally {\n if (e_8) throw e_8.error;\n }\n }\n\n try {\n for (var _m = __values(this.doneListeners), _o = _m.next(); !_o.done; _o = _m.next()) {\n var listener = _o.value;\n this.doneListeners.delete(listener);\n }\n } catch (e_9_1) {\n e_9 = {\n error: e_9_1\n };\n } finally {\n try {\n if (_o && !_o.done && (_d = _m.return)) _d.call(_m);\n } finally {\n if (e_9) throw e_9.error;\n }\n }\n\n if (!this.initialized) {\n // Interpreter already stopped; do nothing\n return this;\n }\n\n __spreadArray([], __read(this.state.configuration), false).sort(function (a, b) {\n return b.order - a.order;\n }).forEach(function (stateNode) {\n var e_11, _a;\n\n try {\n for (var _b = __values(stateNode.definition.exit), _c = _b.next(); !_c.done; _c = _b.next()) {\n var action = _c.value;\n\n _this.exec(action, _this.state);\n }\n } catch (e_11_1) {\n e_11 = {\n error: e_11_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_11) throw e_11.error;\n }\n }\n }); // Stop all children\n\n\n this.children.forEach(function (child) {\n if (isFunction(child.stop)) {\n child.stop();\n }\n });\n this.children.clear();\n\n try {\n // Cancel all delayed events\n for (var _p = __values(Object.keys(this.delayedEventsMap)), _q = _p.next(); !_q.done; _q = _p.next()) {\n var key = _q.value;\n this.clock.clearTimeout(this.delayedEventsMap[key]);\n }\n } catch (e_10_1) {\n e_10 = {\n error: e_10_1\n };\n } finally {\n try {\n if (_q && !_q.done && (_e = _p.return)) _e.call(_p);\n } finally {\n if (e_10) throw e_10.error;\n }\n }\n\n this.scheduler.clear();\n this.scheduler = new Scheduler({\n deferEvents: this.options.deferEvents\n });\n this.initialized = false;\n this.status = InterpreterStatus.Stopped;\n this._initialState = undefined;\n registry.free(this.sessionId);\n return this;\n };\n\n Interpreter.prototype.batch = function (events) {\n var _this = this;\n\n if (this.status === InterpreterStatus.NotStarted && this.options.deferEvents) {\n // tslint:disable-next-line:no-console\n if (!IS_PRODUCTION) {\n warn(false, \"\".concat(events.length, \" event(s) were sent to uninitialized service \\\"\").concat(this.machine.id, \"\\\" and are deferred. Make sure .start() is called for this service.\\nEvent: \").concat(JSON.stringify(event)));\n }\n } else if (this.status !== InterpreterStatus.Running) {\n throw new Error( // tslint:disable-next-line:max-line-length\n \"\".concat(events.length, \" event(s) were sent to uninitialized service \\\"\").concat(this.machine.id, \"\\\". Make sure .start() is called for this service, or set { deferEvents: true } in the service options.\"));\n }\n\n this.scheduler.schedule(function () {\n var e_12, _a;\n\n var nextState = _this.state;\n var batchChanged = false;\n var batchedActions = [];\n\n var _loop_1 = function (event_1) {\n var _event = toSCXMLEvent(event_1);\n\n _this.forward(_event);\n\n nextState = provide(_this, function () {\n return _this.machine.transition(nextState, _event);\n });\n batchedActions.push.apply(batchedActions, __spreadArray([], __read(nextState.actions.map(function (a) {\n return bindActionToState(a, nextState);\n })), false));\n batchChanged = batchChanged || !!nextState.changed;\n };\n\n try {\n for (var events_1 = __values(events), events_1_1 = events_1.next(); !events_1_1.done; events_1_1 = events_1.next()) {\n var event_1 = events_1_1.value;\n\n _loop_1(event_1);\n }\n } catch (e_12_1) {\n e_12 = {\n error: e_12_1\n };\n } finally {\n try {\n if (events_1_1 && !events_1_1.done && (_a = events_1.return)) _a.call(events_1);\n } finally {\n if (e_12) throw e_12.error;\n }\n }\n\n nextState.changed = batchChanged;\n nextState.actions = batchedActions;\n\n _this.update(nextState, toSCXMLEvent(events[events.length - 1]));\n });\n };\n /**\r\n * Returns a send function bound to this interpreter instance.\r\n *\r\n * @param event The event to be sent by the sender.\r\n */\n\n\n Interpreter.prototype.sender = function (event) {\n return this.send.bind(this, event);\n };\n /**\r\n * Returns the next state given the interpreter's current state and the event.\r\n *\r\n * This is a pure method that does _not_ update the interpreter's state.\r\n *\r\n * @param event The event to determine the next state\r\n */\n\n\n Interpreter.prototype.nextState = function (event) {\n var _this = this;\n\n var _event = toSCXMLEvent(event);\n\n if (_event.name.indexOf(errorPlatform) === 0 && !this.state.nextEvents.some(function (nextEvent) {\n return nextEvent.indexOf(errorPlatform) === 0;\n })) {\n throw _event.data.data;\n }\n\n var nextState = provide(this, function () {\n return _this.machine.transition(_this.state, _event);\n });\n return nextState;\n };\n\n Interpreter.prototype.forward = function (event) {\n var e_13, _a;\n\n try {\n for (var _b = __values(this.forwardTo), _c = _b.next(); !_c.done; _c = _b.next()) {\n var id = _c.value;\n var child = this.children.get(id);\n\n if (!child) {\n throw new Error(\"Unable to forward event '\".concat(event, \"' from interpreter '\").concat(this.id, \"' to nonexistant child '\").concat(id, \"'.\"));\n }\n\n child.send(event);\n }\n } catch (e_13_1) {\n e_13 = {\n error: e_13_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_13) throw e_13.error;\n }\n }\n };\n\n Interpreter.prototype.defer = function (sendAction) {\n var _this = this;\n\n this.delayedEventsMap[sendAction.id] = this.clock.setTimeout(function () {\n if (sendAction.to) {\n _this.sendTo(sendAction._event, sendAction.to);\n } else {\n _this.send(sendAction._event);\n }\n }, sendAction.delay);\n };\n\n Interpreter.prototype.cancel = function (sendId) {\n this.clock.clearTimeout(this.delayedEventsMap[sendId]);\n delete this.delayedEventsMap[sendId];\n };\n\n Interpreter.prototype.exec = function (action, state, actionFunctionMap) {\n if (actionFunctionMap === void 0) {\n actionFunctionMap = this.machine.options.actions;\n }\n\n var context = state.context,\n _event = state._event;\n var actionOrExec = action.exec || getActionFunction(action.type, actionFunctionMap);\n var exec = isFunction(actionOrExec) ? actionOrExec : actionOrExec ? actionOrExec.exec : action.exec;\n\n if (exec) {\n try {\n return exec(context, _event.data, {\n action: action,\n state: this.state,\n _event: _event\n });\n } catch (err) {\n if (this.parent) {\n this.parent.send({\n type: 'xstate.error',\n data: err\n });\n }\n\n throw err;\n }\n }\n\n switch (action.type) {\n case send:\n var sendAction = action;\n\n if (typeof sendAction.delay === 'number') {\n this.defer(sendAction);\n return;\n } else {\n if (sendAction.to) {\n this.sendTo(sendAction._event, sendAction.to);\n } else {\n this.send(sendAction._event);\n }\n }\n\n break;\n\n case cancel:\n this.cancel(action.sendId);\n break;\n\n case start:\n {\n if (this.status !== InterpreterStatus.Running) {\n return;\n }\n\n var activity = action.activity; // If the activity will be stopped right after it's started\n // (such as in transient states)\n // don't bother starting the activity.\n\n if (!this.state.activities[activity.id || activity.type]) {\n break;\n } // Invoked services\n\n\n if (activity.type === ActionTypes.Invoke) {\n var invokeSource = toInvokeSource(activity.src);\n var serviceCreator = this.machine.options.services ? this.machine.options.services[invokeSource.type] : undefined;\n var id = activity.id,\n data = activity.data;\n\n if (!IS_PRODUCTION) {\n warn(!('forward' in activity), // tslint:disable-next-line:max-line-length\n \"`forward` property is deprecated (found in invocation of '\".concat(activity.src, \"' in in machine '\").concat(this.machine.id, \"'). \") + \"Please use `autoForward` instead.\");\n }\n\n var autoForward = 'autoForward' in activity ? activity.autoForward : !!activity.forward;\n\n if (!serviceCreator) {\n // tslint:disable-next-line:no-console\n if (!IS_PRODUCTION) {\n warn(false, \"No service found for invocation '\".concat(activity.src, \"' in machine '\").concat(this.machine.id, \"'.\"));\n }\n\n return;\n }\n\n var resolvedData = data ? mapContext(data, context, _event) : undefined;\n\n if (typeof serviceCreator === 'string') {\n // TODO: warn\n return;\n }\n\n var source = isFunction(serviceCreator) ? serviceCreator(context, _event.data, {\n data: resolvedData,\n src: invokeSource,\n meta: activity.meta\n }) : serviceCreator;\n\n if (!source) {\n // TODO: warn?\n return;\n }\n\n var options = void 0;\n\n if (isMachine(source)) {\n source = resolvedData ? source.withContext(resolvedData) : source;\n options = {\n autoForward: autoForward\n };\n }\n\n this.spawn(source, id, options);\n } else {\n this.spawnActivity(activity);\n }\n\n break;\n }\n\n case stop:\n {\n this.stopChild(action.activity.id);\n break;\n }\n\n case log:\n var label = action.label,\n value = action.value;\n\n if (label) {\n this.logger(label, value);\n } else {\n this.logger(value);\n }\n\n break;\n\n default:\n if (!IS_PRODUCTION) {\n warn(false, \"No implementation found for action type '\".concat(action.type, \"'\"));\n }\n\n break;\n }\n\n return undefined;\n };\n\n Interpreter.prototype.removeChild = function (childId) {\n var _a;\n\n this.children.delete(childId);\n this.forwardTo.delete(childId); // this.state might not exist at the time this is called,\n // such as when a child is added then removed while initializing the state\n\n (_a = this.state) === null || _a === void 0 ? true : delete _a.children[childId];\n };\n\n Interpreter.prototype.stopChild = function (childId) {\n var child = this.children.get(childId);\n\n if (!child) {\n return;\n }\n\n this.removeChild(childId);\n\n if (isFunction(child.stop)) {\n child.stop();\n }\n };\n\n Interpreter.prototype.spawn = function (entity, name, options) {\n if (isPromiseLike(entity)) {\n return this.spawnPromise(Promise.resolve(entity), name);\n } else if (isFunction(entity)) {\n return this.spawnCallback(entity, name);\n } else if (isSpawnedActor(entity)) {\n return this.spawnActor(entity, name);\n } else if (isObservable(entity)) {\n return this.spawnObservable(entity, name);\n } else if (isMachine(entity)) {\n return this.spawnMachine(entity, __assign(__assign({}, options), {\n id: name\n }));\n } else if (isBehavior(entity)) {\n return this.spawnBehavior(entity, name);\n } else {\n throw new Error(\"Unable to spawn entity \\\"\".concat(name, \"\\\" of type \\\"\").concat(typeof entity, \"\\\".\"));\n }\n };\n\n Interpreter.prototype.spawnMachine = function (machine, options) {\n var _this = this;\n\n if (options === void 0) {\n options = {};\n }\n\n var childService = new Interpreter(machine, __assign(__assign({}, this.options), {\n parent: this,\n id: options.id || machine.id\n }));\n\n var resolvedOptions = __assign(__assign({}, DEFAULT_SPAWN_OPTIONS), options);\n\n if (resolvedOptions.sync) {\n childService.onTransition(function (state) {\n _this.send(update, {\n state: state,\n id: childService.id\n });\n });\n }\n\n var actor = childService;\n this.children.set(childService.id, actor);\n\n if (resolvedOptions.autoForward) {\n this.forwardTo.add(childService.id);\n }\n\n childService.onDone(function (doneEvent) {\n _this.removeChild(childService.id);\n\n _this.send(toSCXMLEvent(doneEvent, {\n origin: childService.id\n }));\n }).start();\n return actor;\n };\n\n Interpreter.prototype.spawnBehavior = function (behavior, id) {\n var actorRef = spawnBehavior(behavior, {\n id: id,\n parent: this\n });\n this.children.set(id, actorRef);\n return actorRef;\n };\n\n Interpreter.prototype.spawnPromise = function (promise, id) {\n var _a;\n\n var _this = this;\n\n var canceled = false;\n var resolvedData;\n promise.then(function (response) {\n if (!canceled) {\n resolvedData = response;\n\n _this.removeChild(id);\n\n _this.send(toSCXMLEvent(doneInvoke(id, response), {\n origin: id\n }));\n }\n }, function (errorData) {\n if (!canceled) {\n _this.removeChild(id);\n\n var errorEvent = error(id, errorData);\n\n try {\n // Send \"error.platform.id\" to this (parent).\n _this.send(toSCXMLEvent(errorEvent, {\n origin: id\n }));\n } catch (error) {\n reportUnhandledExceptionOnInvocation(errorData, error, id);\n\n if (_this.devTools) {\n _this.devTools.send(errorEvent, _this.state);\n }\n\n if (_this.machine.strict) {\n // it would be better to always stop the state machine if unhandled\n // exception/promise rejection happens but because we don't want to\n // break existing code so enforce it on strict mode only especially so\n // because documentation says that onError is optional\n _this.stop();\n }\n }\n }\n });\n var actor = (_a = {\n id: id,\n send: function () {\n return void 0;\n },\n subscribe: function (next, handleError, complete) {\n var observer = toObserver(next, handleError, complete);\n var unsubscribed = false;\n promise.then(function (response) {\n if (unsubscribed) {\n return;\n }\n\n observer.next(response);\n\n if (unsubscribed) {\n return;\n }\n\n observer.complete();\n }, function (err) {\n if (unsubscribed) {\n return;\n }\n\n observer.error(err);\n });\n return {\n unsubscribe: function () {\n return unsubscribed = true;\n }\n };\n },\n stop: function () {\n canceled = true;\n },\n toJSON: function () {\n return {\n id: id\n };\n },\n getSnapshot: function () {\n return resolvedData;\n }\n }, _a[symbolObservable] = function () {\n return this;\n }, _a);\n this.children.set(id, actor);\n return actor;\n };\n\n Interpreter.prototype.spawnCallback = function (callback, id) {\n var _a;\n\n var _this = this;\n\n var canceled = false;\n var receivers = new Set();\n var listeners = new Set();\n var emitted;\n\n var receive = function (e) {\n emitted = e;\n listeners.forEach(function (listener) {\n return listener(e);\n });\n\n if (canceled) {\n return;\n }\n\n _this.send(toSCXMLEvent(e, {\n origin: id\n }));\n };\n\n var callbackStop;\n\n try {\n callbackStop = callback(receive, function (newListener) {\n receivers.add(newListener);\n });\n } catch (err) {\n this.send(error(id, err));\n }\n\n if (isPromiseLike(callbackStop)) {\n // it turned out to be an async function, can't reliably check this before calling `callback`\n // because transpiled async functions are not recognizable\n return this.spawnPromise(callbackStop, id);\n }\n\n var actor = (_a = {\n id: id,\n send: function (event) {\n return receivers.forEach(function (receiver) {\n return receiver(event);\n });\n },\n subscribe: function (next) {\n var observer = toObserver(next);\n listeners.add(observer.next);\n return {\n unsubscribe: function () {\n listeners.delete(observer.next);\n }\n };\n },\n stop: function () {\n canceled = true;\n\n if (isFunction(callbackStop)) {\n callbackStop();\n }\n },\n toJSON: function () {\n return {\n id: id\n };\n },\n getSnapshot: function () {\n return emitted;\n }\n }, _a[symbolObservable] = function () {\n return this;\n }, _a);\n this.children.set(id, actor);\n return actor;\n };\n\n Interpreter.prototype.spawnObservable = function (source, id) {\n var _a;\n\n var _this = this;\n\n var emitted;\n var subscription = source.subscribe(function (value) {\n emitted = value;\n\n _this.send(toSCXMLEvent(value, {\n origin: id\n }));\n }, function (err) {\n _this.removeChild(id);\n\n _this.send(toSCXMLEvent(error(id, err), {\n origin: id\n }));\n }, function () {\n _this.removeChild(id);\n\n _this.send(toSCXMLEvent(doneInvoke(id), {\n origin: id\n }));\n });\n var actor = (_a = {\n id: id,\n send: function () {\n return void 0;\n },\n subscribe: function (next, handleError, complete) {\n return source.subscribe(next, handleError, complete);\n },\n stop: function () {\n return subscription.unsubscribe();\n },\n getSnapshot: function () {\n return emitted;\n },\n toJSON: function () {\n return {\n id: id\n };\n }\n }, _a[symbolObservable] = function () {\n return this;\n }, _a);\n this.children.set(id, actor);\n return actor;\n };\n\n Interpreter.prototype.spawnActor = function (actor, name) {\n this.children.set(name, actor);\n return actor;\n };\n\n Interpreter.prototype.spawnActivity = function (activity) {\n var implementation = this.machine.options && this.machine.options.activities ? this.machine.options.activities[activity.type] : undefined;\n\n if (!implementation) {\n if (!IS_PRODUCTION) {\n warn(false, \"No implementation found for activity '\".concat(activity.type, \"'\"));\n } // tslint:disable-next-line:no-console\n\n\n return;\n } // Start implementation\n\n\n var dispose = implementation(this.state.context, activity);\n this.spawnEffect(activity.id, dispose);\n };\n\n Interpreter.prototype.spawnEffect = function (id, dispose) {\n var _a;\n\n this.children.set(id, (_a = {\n id: id,\n send: function () {\n return void 0;\n },\n subscribe: function () {\n return {\n unsubscribe: function () {\n return void 0;\n }\n };\n },\n stop: dispose || undefined,\n getSnapshot: function () {\n return undefined;\n },\n toJSON: function () {\n return {\n id: id\n };\n }\n }, _a[symbolObservable] = function () {\n return this;\n }, _a));\n };\n\n Interpreter.prototype.attachDev = function () {\n var global = getGlobal();\n\n if (this.options.devTools && global) {\n if (global.__REDUX_DEVTOOLS_EXTENSION__) {\n var devToolsOptions = typeof this.options.devTools === 'object' ? this.options.devTools : undefined;\n this.devTools = global.__REDUX_DEVTOOLS_EXTENSION__.connect(__assign(__assign({\n name: this.id,\n autoPause: true,\n stateSanitizer: function (state) {\n return {\n value: state.value,\n context: state.context,\n actions: state.actions\n };\n }\n }, devToolsOptions), {\n features: __assign({\n jump: false,\n skip: false\n }, devToolsOptions ? devToolsOptions.features : undefined)\n }), this.machine);\n this.devTools.init(this.state);\n } // add XState-specific dev tooling hook\n\n\n registerService(this);\n }\n };\n\n Interpreter.prototype.toJSON = function () {\n return {\n id: this.id\n };\n };\n\n Interpreter.prototype[symbolObservable] = function () {\n return this;\n };\n\n Interpreter.prototype.getSnapshot = function () {\n if (this.status === InterpreterStatus.NotStarted) {\n return this.initialState;\n }\n\n return this._state;\n };\n /**\r\n * The default interpreter options:\r\n *\r\n * - `clock` uses the global `setTimeout` and `clearTimeout` functions\r\n * - `logger` uses the global `console.log()` method\r\n */\n\n\n Interpreter.defaultOptions = {\n execute: true,\n deferEvents: true,\n clock: {\n setTimeout: function (fn, ms) {\n return setTimeout(fn, ms);\n },\n clearTimeout: function (id) {\n return clearTimeout(id);\n }\n },\n logger: /*#__PURE__*/console.log.bind(console),\n devTools: false\n };\n Interpreter.interpret = interpret;\n return Interpreter;\n}();\n\nvar resolveSpawnOptions = function (nameOrOptions) {\n if (isString(nameOrOptions)) {\n return __assign(__assign({}, DEFAULT_SPAWN_OPTIONS), {\n name: nameOrOptions\n });\n }\n\n return __assign(__assign(__assign({}, DEFAULT_SPAWN_OPTIONS), {\n name: uniqueId()\n }), nameOrOptions);\n};\n\nfunction spawn(entity, nameOrOptions) {\n var resolvedOptions = resolveSpawnOptions(nameOrOptions);\n return consume(function (service) {\n if (!IS_PRODUCTION) {\n var isLazyEntity = isMachine(entity) || isFunction(entity);\n warn(!!service || isLazyEntity, \"Attempted to spawn an Actor (ID: \\\"\".concat(isMachine(entity) ? entity.id : 'undefined', \"\\\") outside of a service. This will have no effect.\"));\n }\n\n if (service) {\n return service.spawn(entity, resolvedOptions.name, resolvedOptions);\n } else {\n return createDeferredActor(entity, resolvedOptions.name);\n }\n });\n}\n/**\r\n * Creates a new Interpreter instance for the given machine with the provided options, if any.\r\n *\r\n * @param machine The machine to interpret\r\n * @param options Interpreter options\r\n */\n\nfunction interpret(machine, options) {\n var interpreter = new Interpreter(machine, options);\n return interpreter;\n}\n\nexport { Interpreter, InterpreterStatus, interpret, spawn };\n","import { __values } from './_virtual/_tslib.js';\nimport { matchesState } from './utils.js';\n\nfunction mapState(stateMap, stateId) {\n var e_1, _a;\n\n var foundStateId;\n\n try {\n for (var _b = __values(Object.keys(stateMap)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var mappedStateId = _c.value;\n\n if (matchesState(mappedStateId, stateId) && (!foundStateId || stateId.length > foundStateId.length)) {\n foundStateId = mappedStateId;\n }\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n\n return stateMap[foundStateId];\n}\n\nexport { mapState };\n","import { __values, __read } from './_virtual/_tslib.js';\nimport { State } from './State.js';\n\nfunction matchState(state, patterns, defaultValue) {\n var e_1, _a;\n\n var resolvedState = State.from(state, state instanceof State ? state.context : undefined);\n\n try {\n for (var patterns_1 = __values(patterns), patterns_1_1 = patterns_1.next(); !patterns_1_1.done; patterns_1_1 = patterns_1.next()) {\n var _b = __read(patterns_1_1.value, 2),\n stateValue = _b[0],\n getValue = _b[1];\n\n if (resolvedState.matches(stateValue)) {\n return getValue(resolvedState);\n }\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (patterns_1_1 && !patterns_1_1.done && (_a = patterns_1.return)) _a.call(patterns_1);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n\n return defaultValue(resolvedState);\n}\n\nexport { matchState };\n","function createSchema(schema) {\n return schema;\n}\nvar t = createSchema;\n\nexport { createSchema, t };\n","import { assign as assign$1, send as send$1, sendParent as sendParent$1, sendUpdate as sendUpdate$1, forwardTo as forwardTo$1, doneInvoke as doneInvoke$1 } from './actions.js';\nimport * as actions from './actions.js';\nexport { actions };\nexport { toActorRef } from './Actor.js';\nexport { Interpreter, InterpreterStatus, interpret, spawn } from './interpreter.js';\nexport { Machine, createMachine } from './Machine.js';\nexport { mapState } from './mapState.js';\nexport { matchState } from './match.js';\nexport { createSchema, t } from './schema.js';\nexport { State } from './State.js';\nexport { StateNode } from './StateNode.js';\nexport { spawnBehavior } from './behaviors.js';\nexport { ActionTypes, SpecialTargets } from './types.js';\nexport { matchesState, toEventObject, toObserver, toSCXMLEvent } from './utils.js';\n\nvar assign = assign$1,\n send = send$1,\n sendParent = sendParent$1,\n sendUpdate = sendUpdate$1,\n forwardTo = forwardTo$1,\n doneInvoke = doneInvoke$1;\n\nexport { assign, doneInvoke, forwardTo, send, sendParent, sendUpdate };\n","/**\r\n * Maintains a stack of the current service in scope.\r\n * This is used to provide the correct service to spawn().\r\n */\nvar serviceStack = [];\nvar provide = function (service, fn) {\n serviceStack.push(service);\n var result = fn(service);\n serviceStack.pop();\n return result;\n};\nvar consume = function (fn) {\n return fn(serviceStack[serviceStack.length - 1]);\n};\n\nexport { consume, provide };\n","import { __values, __spreadArray, __read } from './_virtual/_tslib.js';\nimport { flatten } from './utils.js';\n\nvar isLeafNode = function (stateNode) {\n return stateNode.type === 'atomic' || stateNode.type === 'final';\n};\nfunction getChildren(stateNode) {\n return Object.keys(stateNode.states).map(function (key) {\n return stateNode.states[key];\n }).filter(function (sn) {\n return sn.type !== 'history';\n });\n}\nfunction getAllStateNodes(stateNode) {\n var stateNodes = [stateNode];\n\n if (isLeafNode(stateNode)) {\n return stateNodes;\n }\n\n return stateNodes.concat(flatten(getChildren(stateNode).map(getAllStateNodes)));\n}\nfunction getConfiguration(prevStateNodes, stateNodes) {\n var e_1, _a, e_2, _b, e_3, _c, e_4, _d;\n\n var prevConfiguration = new Set(prevStateNodes);\n var prevAdjList = getAdjList(prevConfiguration);\n var configuration = new Set(stateNodes);\n\n try {\n // add all ancestors\n for (var configuration_1 = __values(configuration), configuration_1_1 = configuration_1.next(); !configuration_1_1.done; configuration_1_1 = configuration_1.next()) {\n var s = configuration_1_1.value;\n var m = s.parent;\n\n while (m && !configuration.has(m)) {\n configuration.add(m);\n m = m.parent;\n }\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (configuration_1_1 && !configuration_1_1.done && (_a = configuration_1.return)) _a.call(configuration_1);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n\n var adjList = getAdjList(configuration);\n\n try {\n // add descendants\n for (var configuration_2 = __values(configuration), configuration_2_1 = configuration_2.next(); !configuration_2_1.done; configuration_2_1 = configuration_2.next()) {\n var s = configuration_2_1.value; // if previously active, add existing child nodes\n\n if (s.type === 'compound' && (!adjList.get(s) || !adjList.get(s).length)) {\n if (prevAdjList.get(s)) {\n prevAdjList.get(s).forEach(function (sn) {\n return configuration.add(sn);\n });\n } else {\n s.initialStateNodes.forEach(function (sn) {\n return configuration.add(sn);\n });\n }\n } else {\n if (s.type === 'parallel') {\n try {\n for (var _e = (e_3 = void 0, __values(getChildren(s))), _f = _e.next(); !_f.done; _f = _e.next()) {\n var child = _f.value;\n\n if (!configuration.has(child)) {\n configuration.add(child);\n\n if (prevAdjList.get(child)) {\n prevAdjList.get(child).forEach(function (sn) {\n return configuration.add(sn);\n });\n } else {\n child.initialStateNodes.forEach(function (sn) {\n return configuration.add(sn);\n });\n }\n }\n }\n } catch (e_3_1) {\n e_3 = {\n error: e_3_1\n };\n } finally {\n try {\n if (_f && !_f.done && (_c = _e.return)) _c.call(_e);\n } finally {\n if (e_3) throw e_3.error;\n }\n }\n }\n }\n }\n } catch (e_2_1) {\n e_2 = {\n error: e_2_1\n };\n } finally {\n try {\n if (configuration_2_1 && !configuration_2_1.done && (_b = configuration_2.return)) _b.call(configuration_2);\n } finally {\n if (e_2) throw e_2.error;\n }\n }\n\n try {\n // add all ancestors\n for (var configuration_3 = __values(configuration), configuration_3_1 = configuration_3.next(); !configuration_3_1.done; configuration_3_1 = configuration_3.next()) {\n var s = configuration_3_1.value;\n var m = s.parent;\n\n while (m && !configuration.has(m)) {\n configuration.add(m);\n m = m.parent;\n }\n }\n } catch (e_4_1) {\n e_4 = {\n error: e_4_1\n };\n } finally {\n try {\n if (configuration_3_1 && !configuration_3_1.done && (_d = configuration_3.return)) _d.call(configuration_3);\n } finally {\n if (e_4) throw e_4.error;\n }\n }\n\n return configuration;\n}\n\nfunction getValueFromAdj(baseNode, adjList) {\n var childStateNodes = adjList.get(baseNode);\n\n if (!childStateNodes) {\n return {}; // todo: fix?\n }\n\n if (baseNode.type === 'compound') {\n var childStateNode = childStateNodes[0];\n\n if (childStateNode) {\n if (isLeafNode(childStateNode)) {\n return childStateNode.key;\n }\n } else {\n return {};\n }\n }\n\n var stateValue = {};\n childStateNodes.forEach(function (csn) {\n stateValue[csn.key] = getValueFromAdj(csn, adjList);\n });\n return stateValue;\n}\n\nfunction getAdjList(configuration) {\n var e_5, _a;\n\n var adjList = new Map();\n\n try {\n for (var configuration_4 = __values(configuration), configuration_4_1 = configuration_4.next(); !configuration_4_1.done; configuration_4_1 = configuration_4.next()) {\n var s = configuration_4_1.value;\n\n if (!adjList.has(s)) {\n adjList.set(s, []);\n }\n\n if (s.parent) {\n if (!adjList.has(s.parent)) {\n adjList.set(s.parent, []);\n }\n\n adjList.get(s.parent).push(s);\n }\n }\n } catch (e_5_1) {\n e_5 = {\n error: e_5_1\n };\n } finally {\n try {\n if (configuration_4_1 && !configuration_4_1.done && (_a = configuration_4.return)) _a.call(configuration_4);\n } finally {\n if (e_5) throw e_5.error;\n }\n }\n\n return adjList;\n}\nfunction getValue(rootNode, configuration) {\n var config = getConfiguration([rootNode], configuration);\n return getValueFromAdj(rootNode, getAdjList(config));\n}\nfunction has(iterable, item) {\n if (Array.isArray(iterable)) {\n return iterable.some(function (member) {\n return member === item;\n });\n }\n\n if (iterable instanceof Set) {\n return iterable.has(item);\n }\n\n return false; // TODO: fix\n}\nfunction nextEvents(configuration) {\n return __spreadArray([], __read(new Set(flatten(__spreadArray([], __read(configuration.map(function (sn) {\n return sn.ownEvents;\n })), false)))), false);\n}\nfunction isInFinalState(configuration, stateNode) {\n if (stateNode.type === 'compound') {\n return getChildren(stateNode).some(function (s) {\n return s.type === 'final' && has(configuration, s);\n });\n }\n\n if (stateNode.type === 'parallel') {\n return getChildren(stateNode).every(function (sn) {\n return isInFinalState(configuration, sn);\n });\n }\n\n return false;\n}\nfunction getMeta(configuration) {\n if (configuration === void 0) {\n configuration = [];\n }\n\n return configuration.reduce(function (acc, stateNode) {\n if (stateNode.meta !== undefined) {\n acc[stateNode.id] = stateNode.meta;\n }\n\n return acc;\n }, {});\n}\nfunction getTagsFromConfiguration(configuration) {\n return new Set(flatten(configuration.map(function (sn) {\n return sn.tags;\n })));\n}\n\nexport { getAdjList, getAllStateNodes, getChildren, getConfiguration, getMeta, getTagsFromConfiguration, getValue, has, isInFinalState, isLeafNode, nextEvents };\n","var ActionTypes;\n\n(function (ActionTypes) {\n ActionTypes[\"Start\"] = \"xstate.start\";\n ActionTypes[\"Stop\"] = \"xstate.stop\";\n ActionTypes[\"Raise\"] = \"xstate.raise\";\n ActionTypes[\"Send\"] = \"xstate.send\";\n ActionTypes[\"Cancel\"] = \"xstate.cancel\";\n ActionTypes[\"NullEvent\"] = \"\";\n ActionTypes[\"Assign\"] = \"xstate.assign\";\n ActionTypes[\"After\"] = \"xstate.after\";\n ActionTypes[\"DoneState\"] = \"done.state\";\n ActionTypes[\"DoneInvoke\"] = \"done.invoke\";\n ActionTypes[\"Log\"] = \"xstate.log\";\n ActionTypes[\"Init\"] = \"xstate.init\";\n ActionTypes[\"Invoke\"] = \"xstate.invoke\";\n ActionTypes[\"ErrorExecution\"] = \"error.execution\";\n ActionTypes[\"ErrorCommunication\"] = \"error.communication\";\n ActionTypes[\"ErrorPlatform\"] = \"error.platform\";\n ActionTypes[\"ErrorCustom\"] = \"xstate.error\";\n ActionTypes[\"Update\"] = \"xstate.update\";\n ActionTypes[\"Pure\"] = \"xstate.pure\";\n ActionTypes[\"Choose\"] = \"xstate.choose\";\n})(ActionTypes || (ActionTypes = {}));\n\nvar SpecialTargets;\n\n(function (SpecialTargets) {\n SpecialTargets[\"Parent\"] = \"#_parent\";\n SpecialTargets[\"Internal\"] = \"#_internal\";\n})(SpecialTargets || (SpecialTargets = {}));\n\nexport { ActionTypes, SpecialTargets };\n","import { __values, __spreadArray, __read, __assign } from './_virtual/_tslib.js';\nimport { DEFAULT_GUARD_TYPE, TARGETLESS_KEY, STATE_DELIMITER } from './constants.js';\nimport { IS_PRODUCTION } from './environment.js';\n\nvar _a;\nfunction keys(value) {\n return Object.keys(value);\n}\nfunction matchesState(parentStateId, childStateId, delimiter) {\n if (delimiter === void 0) {\n delimiter = STATE_DELIMITER;\n }\n\n var parentStateValue = toStateValue(parentStateId, delimiter);\n var childStateValue = toStateValue(childStateId, delimiter);\n\n if (isString(childStateValue)) {\n if (isString(parentStateValue)) {\n return childStateValue === parentStateValue;\n } // Parent more specific than child\n\n\n return false;\n }\n\n if (isString(parentStateValue)) {\n return parentStateValue in childStateValue;\n }\n\n return Object.keys(parentStateValue).every(function (key) {\n if (!(key in childStateValue)) {\n return false;\n }\n\n return matchesState(parentStateValue[key], childStateValue[key]);\n });\n}\nfunction getEventType(event) {\n try {\n return isString(event) || typeof event === 'number' ? \"\".concat(event) : event.type;\n } catch (e) {\n throw new Error('Events must be strings or objects with a string event.type property.');\n }\n}\nfunction getActionType(action) {\n try {\n return isString(action) || typeof action === 'number' ? \"\".concat(action) : isFunction(action) ? action.name : action.type;\n } catch (e) {\n throw new Error('Actions must be strings or objects with a string action.type property.');\n }\n}\nfunction toStatePath(stateId, delimiter) {\n try {\n if (isArray(stateId)) {\n return stateId;\n }\n\n return stateId.toString().split(delimiter);\n } catch (e) {\n throw new Error(\"'\".concat(stateId, \"' is not a valid state path.\"));\n }\n}\nfunction isStateLike(state) {\n return typeof state === 'object' && 'value' in state && 'context' in state && 'event' in state && '_event' in state;\n}\nfunction toStateValue(stateValue, delimiter) {\n if (isStateLike(stateValue)) {\n return stateValue.value;\n }\n\n if (isArray(stateValue)) {\n return pathToStateValue(stateValue);\n }\n\n if (typeof stateValue !== 'string') {\n return stateValue;\n }\n\n var statePath = toStatePath(stateValue, delimiter);\n return pathToStateValue(statePath);\n}\nfunction pathToStateValue(statePath) {\n if (statePath.length === 1) {\n return statePath[0];\n }\n\n var value = {};\n var marker = value;\n\n for (var i = 0; i < statePath.length - 1; i++) {\n if (i === statePath.length - 2) {\n marker[statePath[i]] = statePath[i + 1];\n } else {\n marker[statePath[i]] = {};\n marker = marker[statePath[i]];\n }\n }\n\n return value;\n}\nfunction mapValues(collection, iteratee) {\n var result = {};\n var collectionKeys = Object.keys(collection);\n\n for (var i = 0; i < collectionKeys.length; i++) {\n var key = collectionKeys[i];\n result[key] = iteratee(collection[key], key, collection, i);\n }\n\n return result;\n}\nfunction mapFilterValues(collection, iteratee, predicate) {\n var e_1, _a;\n\n var result = {};\n\n try {\n for (var _b = __values(Object.keys(collection)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var key = _c.value;\n var item = collection[key];\n\n if (!predicate(item)) {\n continue;\n }\n\n result[key] = iteratee(item, key, collection);\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n\n return result;\n}\n/**\r\n * Retrieves a value at the given path.\r\n * @param props The deep path to the prop of the desired value\r\n */\n\nvar path = function (props) {\n return function (object) {\n var e_2, _a;\n\n var result = object;\n\n try {\n for (var props_1 = __values(props), props_1_1 = props_1.next(); !props_1_1.done; props_1_1 = props_1.next()) {\n var prop = props_1_1.value;\n result = result[prop];\n }\n } catch (e_2_1) {\n e_2 = {\n error: e_2_1\n };\n } finally {\n try {\n if (props_1_1 && !props_1_1.done && (_a = props_1.return)) _a.call(props_1);\n } finally {\n if (e_2) throw e_2.error;\n }\n }\n\n return result;\n };\n};\n/**\r\n * Retrieves a value at the given path via the nested accessor prop.\r\n * @param props The deep path to the prop of the desired value\r\n */\n\nfunction nestedPath(props, accessorProp) {\n return function (object) {\n var e_3, _a;\n\n var result = object;\n\n try {\n for (var props_2 = __values(props), props_2_1 = props_2.next(); !props_2_1.done; props_2_1 = props_2.next()) {\n var prop = props_2_1.value;\n result = result[accessorProp][prop];\n }\n } catch (e_3_1) {\n e_3 = {\n error: e_3_1\n };\n } finally {\n try {\n if (props_2_1 && !props_2_1.done && (_a = props_2.return)) _a.call(props_2);\n } finally {\n if (e_3) throw e_3.error;\n }\n }\n\n return result;\n };\n}\nfunction toStatePaths(stateValue) {\n if (!stateValue) {\n return [[]];\n }\n\n if (isString(stateValue)) {\n return [[stateValue]];\n }\n\n var result = flatten(Object.keys(stateValue).map(function (key) {\n var subStateValue = stateValue[key];\n\n if (typeof subStateValue !== 'string' && (!subStateValue || !Object.keys(subStateValue).length)) {\n return [[key]];\n }\n\n return toStatePaths(stateValue[key]).map(function (subPath) {\n return [key].concat(subPath);\n });\n }));\n return result;\n}\nfunction pathsToStateValue(paths) {\n var e_4, _a;\n\n var result = {};\n\n if (paths && paths.length === 1 && paths[0].length === 1) {\n return paths[0][0];\n }\n\n try {\n for (var paths_1 = __values(paths), paths_1_1 = paths_1.next(); !paths_1_1.done; paths_1_1 = paths_1.next()) {\n var currentPath = paths_1_1.value;\n var marker = result; // tslint:disable-next-line:prefer-for-of\n\n for (var i = 0; i < currentPath.length; i++) {\n var subPath = currentPath[i];\n\n if (i === currentPath.length - 2) {\n marker[subPath] = currentPath[i + 1];\n break;\n }\n\n marker[subPath] = marker[subPath] || {};\n marker = marker[subPath];\n }\n }\n } catch (e_4_1) {\n e_4 = {\n error: e_4_1\n };\n } finally {\n try {\n if (paths_1_1 && !paths_1_1.done && (_a = paths_1.return)) _a.call(paths_1);\n } finally {\n if (e_4) throw e_4.error;\n }\n }\n\n return result;\n}\nfunction flatten(array) {\n var _a;\n\n return (_a = []).concat.apply(_a, __spreadArray([], __read(array), false));\n}\nfunction toArrayStrict(value) {\n if (isArray(value)) {\n return value;\n }\n\n return [value];\n}\nfunction toArray(value) {\n if (value === undefined) {\n return [];\n }\n\n return toArrayStrict(value);\n}\nfunction mapContext(mapper, context, _event) {\n var e_5, _a;\n\n if (isFunction(mapper)) {\n return mapper(context, _event.data);\n }\n\n var result = {};\n\n try {\n for (var _b = __values(Object.keys(mapper)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var key = _c.value;\n var subMapper = mapper[key];\n\n if (isFunction(subMapper)) {\n result[key] = subMapper(context, _event.data);\n } else {\n result[key] = subMapper;\n }\n }\n } catch (e_5_1) {\n e_5 = {\n error: e_5_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_5) throw e_5.error;\n }\n }\n\n return result;\n}\nfunction isBuiltInEvent(eventType) {\n return /^(done|error)\\./.test(eventType);\n}\nfunction isPromiseLike(value) {\n if (value instanceof Promise) {\n return true;\n } // Check if shape matches the Promise/A+ specification for a \"thenable\".\n\n\n if (value !== null && (isFunction(value) || typeof value === 'object') && isFunction(value.then)) {\n return true;\n }\n\n return false;\n}\nfunction isBehavior(value) {\n return value !== null && typeof value === 'object' && 'transition' in value && typeof value.transition === 'function';\n}\nfunction partition(items, predicate) {\n var e_6, _a;\n\n var _b = __read([[], []], 2),\n truthy = _b[0],\n falsy = _b[1];\n\n try {\n for (var items_1 = __values(items), items_1_1 = items_1.next(); !items_1_1.done; items_1_1 = items_1.next()) {\n var item = items_1_1.value;\n\n if (predicate(item)) {\n truthy.push(item);\n } else {\n falsy.push(item);\n }\n }\n } catch (e_6_1) {\n e_6 = {\n error: e_6_1\n };\n } finally {\n try {\n if (items_1_1 && !items_1_1.done && (_a = items_1.return)) _a.call(items_1);\n } finally {\n if (e_6) throw e_6.error;\n }\n }\n\n return [truthy, falsy];\n}\nfunction updateHistoryStates(hist, stateValue) {\n return mapValues(hist.states, function (subHist, key) {\n if (!subHist) {\n return undefined;\n }\n\n var subStateValue = (isString(stateValue) ? undefined : stateValue[key]) || (subHist ? subHist.current : undefined);\n\n if (!subStateValue) {\n return undefined;\n }\n\n return {\n current: subStateValue,\n states: updateHistoryStates(subHist, subStateValue)\n };\n });\n}\nfunction updateHistoryValue(hist, stateValue) {\n return {\n current: stateValue,\n states: updateHistoryStates(hist, stateValue)\n };\n}\nfunction updateContext(context, _event, assignActions, state) {\n if (!IS_PRODUCTION) {\n warn(!!context, 'Attempting to update undefined context');\n }\n\n var updatedContext = context ? assignActions.reduce(function (acc, assignAction) {\n var e_7, _a;\n\n var assignment = assignAction.assignment;\n var meta = {\n state: state,\n action: assignAction,\n _event: _event\n };\n var partialUpdate = {};\n\n if (isFunction(assignment)) {\n partialUpdate = assignment(acc, _event.data, meta);\n } else {\n try {\n for (var _b = __values(Object.keys(assignment)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var key = _c.value;\n var propAssignment = assignment[key];\n partialUpdate[key] = isFunction(propAssignment) ? propAssignment(acc, _event.data, meta) : propAssignment;\n }\n } catch (e_7_1) {\n e_7 = {\n error: e_7_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_7) throw e_7.error;\n }\n }\n }\n\n return Object.assign({}, acc, partialUpdate);\n }, context) : context;\n return updatedContext;\n} // tslint:disable-next-line:no-empty\n\nvar warn = function () {};\n\nif (!IS_PRODUCTION) {\n warn = function (condition, message) {\n var error = condition instanceof Error ? condition : undefined;\n\n if (!error && condition) {\n return;\n }\n\n if (console !== undefined) {\n var args = [\"Warning: \".concat(message)];\n\n if (error) {\n args.push(error);\n } // tslint:disable-next-line:no-console\n\n\n console.warn.apply(console, args);\n }\n };\n}\nfunction isArray(value) {\n return Array.isArray(value);\n} // tslint:disable-next-line:ban-types\n\nfunction isFunction(value) {\n return typeof value === 'function';\n}\nfunction isString(value) {\n return typeof value === 'string';\n}\nfunction toGuard(condition, guardMap) {\n if (!condition) {\n return undefined;\n }\n\n if (isString(condition)) {\n return {\n type: DEFAULT_GUARD_TYPE,\n name: condition,\n predicate: guardMap ? guardMap[condition] : undefined\n };\n }\n\n if (isFunction(condition)) {\n return {\n type: DEFAULT_GUARD_TYPE,\n name: condition.name,\n predicate: condition\n };\n }\n\n return condition;\n}\nfunction isObservable(value) {\n try {\n return 'subscribe' in value && isFunction(value.subscribe);\n } catch (e) {\n return false;\n }\n}\nvar symbolObservable = /*#__PURE__*/function () {\n return typeof Symbol === 'function' && Symbol.observable || '@@observable';\n}(); // TODO: to be removed in v5, left it out just to minimize the scope of the change and maintain compatibility with older versions of integration paackages\n\nvar interopSymbols = (_a = {}, _a[symbolObservable] = function () {\n return this;\n}, _a[Symbol.observable] = function () {\n return this;\n}, _a);\nfunction isMachine(value) {\n return !!value && '__xstatenode' in value;\n}\nfunction isActor(value) {\n return !!value && typeof value.send === 'function';\n}\nvar uniqueId = /*#__PURE__*/function () {\n var currentId = 0;\n return function () {\n currentId++;\n return currentId.toString(16);\n };\n}();\nfunction toEventObject(event, payload // id?: TEvent['type']\n) {\n if (isString(event) || typeof event === 'number') {\n return __assign({\n type: event\n }, payload);\n }\n\n return event;\n}\nfunction toSCXMLEvent(event, scxmlEvent) {\n if (!isString(event) && '$$type' in event && event.$$type === 'scxml') {\n return event;\n }\n\n var eventObject = toEventObject(event);\n return __assign({\n name: eventObject.type,\n data: eventObject,\n $$type: 'scxml',\n type: 'external'\n }, scxmlEvent);\n}\nfunction toTransitionConfigArray(event, configLike) {\n var transitions = toArrayStrict(configLike).map(function (transitionLike) {\n if (typeof transitionLike === 'undefined' || typeof transitionLike === 'string' || isMachine(transitionLike)) {\n return {\n target: transitionLike,\n event: event\n };\n }\n\n return __assign(__assign({}, transitionLike), {\n event: event\n });\n });\n return transitions;\n}\nfunction normalizeTarget(target) {\n if (target === undefined || target === TARGETLESS_KEY) {\n return undefined;\n }\n\n return toArray(target);\n}\nfunction reportUnhandledExceptionOnInvocation(originalError, currentError, id) {\n if (!IS_PRODUCTION) {\n var originalStackTrace = originalError.stack ? \" Stacktrace was '\".concat(originalError.stack, \"'\") : '';\n\n if (originalError === currentError) {\n // tslint:disable-next-line:no-console\n console.error(\"Missing onError handler for invocation '\".concat(id, \"', error was '\").concat(originalError, \"'.\").concat(originalStackTrace));\n } else {\n var stackTrace = currentError.stack ? \" Stacktrace was '\".concat(currentError.stack, \"'\") : ''; // tslint:disable-next-line:no-console\n\n console.error(\"Missing onError handler and/or unhandled exception/promise rejection for invocation '\".concat(id, \"'. \") + \"Original error: '\".concat(originalError, \"'. \").concat(originalStackTrace, \" Current error is '\").concat(currentError, \"'.\").concat(stackTrace));\n }\n }\n}\nfunction evaluateGuard(machine, guard, context, _event, state) {\n var guards = machine.options.guards;\n var guardMeta = {\n state: state,\n cond: guard,\n _event: _event\n }; // TODO: do not hardcode!\n\n if (guard.type === DEFAULT_GUARD_TYPE) {\n return ((guards === null || guards === void 0 ? void 0 : guards[guard.name]) || guard.predicate)(context, _event.data, guardMeta);\n }\n\n var condFn = guards === null || guards === void 0 ? void 0 : guards[guard.type];\n\n if (!condFn) {\n throw new Error(\"Guard '\".concat(guard.type, \"' is not implemented on machine '\").concat(machine.id, \"'.\"));\n }\n\n return condFn(context, _event.data, guardMeta);\n}\nfunction toInvokeSource(src) {\n if (typeof src === 'string') {\n return {\n type: src\n };\n }\n\n return src;\n}\nfunction toObserver(nextHandler, errorHandler, completionHandler) {\n if (typeof nextHandler === 'object') {\n return nextHandler;\n }\n\n var noop = function () {\n return void 0;\n };\n\n return {\n next: nextHandler,\n error: errorHandler || noop,\n complete: completionHandler || noop\n };\n}\nfunction createInvokeId(stateNodeId, index) {\n return \"\".concat(stateNodeId, \":invocation[\").concat(index, \"]\");\n}\n\nexport { createInvokeId, evaluateGuard, flatten, getActionType, getEventType, interopSymbols, isActor, isArray, isBehavior, isBuiltInEvent, isFunction, isMachine, isObservable, isPromiseLike, isStateLike, isString, keys, mapContext, mapFilterValues, mapValues, matchesState, nestedPath, normalizeTarget, partition, path, pathToStateValue, pathsToStateValue, reportUnhandledExceptionOnInvocation, symbolObservable, toArray, toArrayStrict, toEventObject, toGuard, toInvokeSource, toObserver, toSCXMLEvent, toStatePath, toStatePaths, toStateValue, toTransitionConfigArray, uniqueId, updateContext, updateHistoryStates, updateHistoryValue, warn };\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $ArrayPrototype = GetIntrinsic('%Array.prototype%');\nvar $RangeError = GetIntrinsic('%RangeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsIntegralNumber = require('./IsIntegralNumber');\n\nvar MAX_ARRAY_LENGTH = Math.pow(2, 32) - 1;\n\nvar $setProto = GetIntrinsic('%Object.setPrototypeOf%', true) || (\n\t// eslint-disable-next-line no-proto, no-negated-condition\n\t[].__proto__ !== $ArrayPrototype\n\t\t? null\n\t\t: function (O, proto) {\n\t\t\tO.__proto__ = proto; // eslint-disable-line no-proto, no-param-reassign\n\t\t\treturn O;\n\t\t}\n);\n\n// https://www.ecma-international.org/ecma-262/12.0/#sec-arraycreate\n\nmodule.exports = function ArrayCreate(length) {\n\tif (!IsIntegralNumber(length) || length < 0) {\n\t\tthrow new $TypeError('Assertion failed: `length` must be an integer Number >= 0');\n\t}\n\tif (length > MAX_ARRAY_LENGTH) {\n\t\tthrow new $RangeError('length is greater than (2**32 - 1)');\n\t}\n\tvar proto = arguments.length > 1 ? arguments[1] : $ArrayPrototype;\n\tvar A = []; // steps 3, 5\n\tif (proto !== $ArrayPrototype) { // step 4\n\t\tif (!$setProto) {\n\t\t\tthrow new $SyntaxError('ArrayCreate: a `proto` argument that is not `Array.prototype` is not supported in an environment that does not support setting the [[Prototype]]');\n\t\t}\n\t\t$setProto(A, proto);\n\t}\n\tif (length !== 0) { // bypasses the need for step 6\n\t\tA.length = length;\n\t}\n\t/* step 6, the above as a shortcut for the below\n\tOrdinaryDefineOwnProperty(A, 'length', {\n\t\t'[[Configurable]]': false,\n\t\t'[[Enumerable]]': false,\n\t\t'[[Value]]': length,\n\t\t'[[Writable]]': true\n\t});\n\t*/\n\treturn A;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $species = GetIntrinsic('%Symbol.species%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar ArrayCreate = require('./ArrayCreate');\nvar Get = require('./Get');\nvar IsArray = require('./IsArray');\nvar IsConstructor = require('./IsConstructor');\nvar IsIntegralNumber = require('./IsIntegralNumber');\nvar Type = require('./Type');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-arrayspeciescreate\n\nmodule.exports = function ArraySpeciesCreate(originalArray, length) {\n\tif (!IsIntegralNumber(length) || length < 0) {\n\t\tthrow new $TypeError('Assertion failed: length must be an integer >= 0');\n\t}\n\n\tvar isArray = IsArray(originalArray);\n\tif (!isArray) {\n\t\treturn ArrayCreate(length);\n\t}\n\n\tvar C = Get(originalArray, 'constructor');\n\t// TODO: figure out how to make a cross-realm normal Array, a same-realm Array\n\t// if (IsConstructor(C)) {\n\t// \tif C is another realm's Array, C = undefined\n\t// \tObject.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Array))) === null ?\n\t// }\n\tif ($species && Type(C) === 'Object') {\n\t\tC = Get(C, $species);\n\t\tif (C === null) {\n\t\t\tC = void 0;\n\t\t}\n\t}\n\n\tif (typeof C === 'undefined') {\n\t\treturn ArrayCreate(length);\n\t}\n\tif (!IsConstructor(C)) {\n\t\tthrow new $TypeError('C must be a constructor');\n\t}\n\treturn new C(length); // Construct(C, length);\n};\n\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bind/callBound');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsArray = require('./IsArray');\n\nvar $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-call\n\nmodule.exports = function Call(F, V) {\n\tvar argumentsList = arguments.length > 2 ? arguments[2] : [];\n\tif (!IsArray(argumentsList)) {\n\t\tthrow new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');\n\t}\n\treturn $apply(F, V, argumentsList);\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar DefineOwnProperty = require('../helpers/DefineOwnProperty');\n\nvar FromPropertyDescriptor = require('./FromPropertyDescriptor');\nvar OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty');\nvar IsDataDescriptor = require('./IsDataDescriptor');\nvar IsExtensible = require('./IsExtensible');\nvar IsPropertyKey = require('./IsPropertyKey');\nvar SameValue = require('./SameValue');\nvar Type = require('./Type');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createdataproperty\n\nmodule.exports = function CreateDataProperty(O, P, V) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\tvar oldDesc = OrdinaryGetOwnProperty(O, P);\n\tvar extensible = !oldDesc || IsExtensible(O);\n\tvar nonConfigurable = oldDesc && !oldDesc['[[Configurable]]'];\n\tif (nonConfigurable || !extensible) {\n\t\treturn false;\n\t}\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\t{\n\t\t\t'[[Configurable]]': true,\n\t\t\t'[[Enumerable]]': true,\n\t\t\t'[[Value]]': V,\n\t\t\t'[[Writable]]': true\n\t\t}\n\t);\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar CreateDataProperty = require('./CreateDataProperty');\nvar IsPropertyKey = require('./IsPropertyKey');\nvar Type = require('./Type');\n\n// // https://ecma-international.org/ecma-262/6.0/#sec-createdatapropertyorthrow\n\nmodule.exports = function CreateDataPropertyOrThrow(O, P, V) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\tvar success = CreateDataProperty(O, P, V);\n\tif (!success) {\n\t\tthrow new $TypeError('unable to create data property');\n\t}\n\treturn success;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar isPropertyDescriptor = require('../helpers/isPropertyDescriptor');\nvar DefineOwnProperty = require('../helpers/DefineOwnProperty');\n\nvar FromPropertyDescriptor = require('./FromPropertyDescriptor');\nvar IsAccessorDescriptor = require('./IsAccessorDescriptor');\nvar IsDataDescriptor = require('./IsDataDescriptor');\nvar IsPropertyKey = require('./IsPropertyKey');\nvar SameValue = require('./SameValue');\nvar ToPropertyDescriptor = require('./ToPropertyDescriptor');\nvar Type = require('./Type');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow\n\nmodule.exports = function DefinePropertyOrThrow(O, P, desc) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar Desc = isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, desc) ? desc : ToPropertyDescriptor(desc);\n\tif (!isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, Desc)) {\n\t\tthrow new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');\n\t}\n\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tDesc\n\t);\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger');\n\nvar Call = require('./Call');\nvar CreateDataPropertyOrThrow = require('./CreateDataPropertyOrThrow');\nvar Get = require('./Get');\nvar HasProperty = require('./HasProperty');\nvar IsArray = require('./IsArray');\nvar LengthOfArrayLike = require('./LengthOfArrayLike');\nvar ToString = require('./ToString');\n\n// https://262.ecma-international.org/11.0/#sec-flattenintoarray\n\n// eslint-disable-next-line max-params\nmodule.exports = function FlattenIntoArray(target, source, sourceLen, start, depth) {\n\tvar mapperFunction;\n\tif (arguments.length > 5) {\n\t\tmapperFunction = arguments[5];\n\t}\n\n\tvar targetIndex = start;\n\tvar sourceIndex = 0;\n\twhile (sourceIndex < sourceLen) {\n\t\tvar P = ToString(sourceIndex);\n\t\tvar exists = HasProperty(source, P);\n\t\tif (exists === true) {\n\t\t\tvar element = Get(source, P);\n\t\t\tif (typeof mapperFunction !== 'undefined') {\n\t\t\t\tif (arguments.length <= 6) {\n\t\t\t\t\tthrow new $TypeError('Assertion failed: thisArg is required when mapperFunction is provided');\n\t\t\t\t}\n\t\t\t\telement = Call(mapperFunction, arguments[6], [element, sourceIndex, source]);\n\t\t\t}\n\t\t\tvar shouldFlatten = false;\n\t\t\tif (depth > 0) {\n\t\t\t\tshouldFlatten = IsArray(element);\n\t\t\t}\n\t\t\tif (shouldFlatten) {\n\t\t\t\tvar elementLen = LengthOfArrayLike(element);\n\t\t\t\ttargetIndex = FlattenIntoArray(target, element, elementLen, targetIndex, depth - 1);\n\t\t\t} else {\n\t\t\t\tif (targetIndex >= MAX_SAFE_INTEGER) {\n\t\t\t\t\tthrow new $TypeError('index too large');\n\t\t\t\t}\n\t\t\t\tCreateDataPropertyOrThrow(target, ToString(targetIndex), element);\n\t\t\t\ttargetIndex += 1;\n\t\t\t}\n\t\t}\n\t\tsourceIndex += 1;\n\t}\n\n\treturn targetIndex;\n};\n","'use strict';\n\nvar assertRecord = require('../helpers/assertRecord');\nvar fromPropertyDescriptor = require('../helpers/fromPropertyDescriptor');\n\nvar Type = require('./Type');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor\n\nmodule.exports = function FromPropertyDescriptor(Desc) {\n\tif (typeof Desc !== 'undefined') {\n\t\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\t}\n\n\treturn fromPropertyDescriptor(Desc);\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar inspect = require('object-inspect');\n\nvar IsPropertyKey = require('./IsPropertyKey');\nvar Type = require('./Type');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-get-o-p\n\nmodule.exports = function Get(O, P) {\n\t// 7.3.1.1\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\t// 7.3.1.2\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P));\n\t}\n\t// 7.3.1.3\n\treturn O[P];\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = require('./IsPropertyKey');\nvar Type = require('./Type');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-hasproperty\n\nmodule.exports = function HasProperty(O, P) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `O` must be an Object');\n\t}\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: `P` must be a Property Key');\n\t}\n\treturn P in O;\n};\n","'use strict';\n\nvar has = require('has');\n\nvar assertRecord = require('../helpers/assertRecord');\n\nvar Type = require('./Type');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor\n\nmodule.exports = function IsAccessorDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n","'use strict';\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\nmodule.exports = require('../helpers/IsArray');\n","'use strict';\n\n// http://262.ecma-international.org/5.1/#sec-9.11\n\nmodule.exports = require('is-callable');\n","'use strict';\n\nvar GetIntrinsic = require('../GetIntrinsic.js');\n\nvar $construct = GetIntrinsic('%Reflect.construct%', true);\n\nvar DefinePropertyOrThrow = require('./DefinePropertyOrThrow');\ntry {\n\tDefinePropertyOrThrow({}, '', { '[[Get]]': function () {} });\n} catch (e) {\n\t// Accessor properties aren't supported\n\tDefinePropertyOrThrow = null;\n}\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor\n\nif (DefinePropertyOrThrow && $construct) {\n\tvar isConstructorMarker = {};\n\tvar badArrayLike = {};\n\tDefinePropertyOrThrow(badArrayLike, 'length', {\n\t\t'[[Get]]': function () {\n\t\t\tthrow isConstructorMarker;\n\t\t},\n\t\t'[[Enumerable]]': true\n\t});\n\n\tmodule.exports = function IsConstructor(argument) {\n\t\ttry {\n\t\t\t// `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`:\n\t\t\t$construct(argument, badArrayLike);\n\t\t} catch (err) {\n\t\t\treturn err === isConstructorMarker;\n\t\t}\n\t};\n} else {\n\tmodule.exports = function IsConstructor(argument) {\n\t\t// unfortunately there's no way to truly check this without try/catch `new argument` in old environments\n\t\treturn typeof argument === 'function' && !!argument.prototype;\n\t};\n}\n","'use strict';\n\nvar has = require('has');\n\nvar assertRecord = require('../helpers/assertRecord');\n\nvar Type = require('./Type');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor\n\nmodule.exports = function IsDataDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $preventExtensions = GetIntrinsic('%Object.preventExtensions%', true);\nvar $isExtensible = GetIntrinsic('%Object.isExtensible%', true);\n\nvar isPrimitive = require('../helpers/isPrimitive');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isextensible-o\n\nmodule.exports = $preventExtensions\n\t? function IsExtensible(obj) {\n\t\treturn !isPrimitive(obj) && $isExtensible(obj);\n\t}\n\t: function IsExtensible(obj) {\n\t\treturn !isPrimitive(obj);\n\t};\n","'use strict';\n\nvar abs = require('./abs');\nvar floor = require('./floor');\nvar Type = require('./Type');\n\nvar $isNaN = require('../helpers/isNaN');\nvar $isFinite = require('../helpers/isFinite');\n\n// https://tc39.es/ecma262/#sec-isintegralnumber\n\nmodule.exports = function IsIntegralNumber(argument) {\n\tif (Type(argument) !== 'Number' || $isNaN(argument) || !$isFinite(argument)) {\n\t\treturn false;\n\t}\n\tvar absValue = abs(argument);\n\treturn floor(absValue) === absValue;\n};\n","'use strict';\n\n// https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey\n\nmodule.exports = function IsPropertyKey(argument) {\n\treturn typeof argument === 'string' || typeof argument === 'symbol';\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $match = GetIntrinsic('%Symbol.match%', true);\n\nvar hasRegExpMatcher = require('is-regex');\n\nvar ToBoolean = require('./ToBoolean');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isregexp\n\nmodule.exports = function IsRegExp(argument) {\n\tif (!argument || typeof argument !== 'object') {\n\t\treturn false;\n\t}\n\tif ($match) {\n\t\tvar isRegExp = argument[$match];\n\t\tif (typeof isRegExp !== 'undefined') {\n\t\t\treturn ToBoolean(isRegExp);\n\t\t}\n\t}\n\treturn hasRegExpMatcher(argument);\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Get = require('./Get');\nvar ToLength = require('./ToLength');\nvar Type = require('./Type');\n\n// https://262.ecma-international.org/11.0/#sec-lengthofarraylike\n\nmodule.exports = function LengthOfArrayLike(obj) {\n\tif (Type(obj) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `obj` must be an Object');\n\t}\n\treturn ToLength(Get(obj, 'length'));\n};\n\n// TODO: use this all over\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $gOPD = require('../helpers/getOwnPropertyDescriptor');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar callBound = require('call-bind/callBound');\n\nvar $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');\n\nvar has = require('has');\n\nvar IsArray = require('./IsArray');\nvar IsPropertyKey = require('./IsPropertyKey');\nvar IsRegExp = require('./IsRegExp');\nvar ToPropertyDescriptor = require('./ToPropertyDescriptor');\nvar Type = require('./Type');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-ordinarygetownproperty\n\nmodule.exports = function OrdinaryGetOwnProperty(O, P) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: O must be an Object');\n\t}\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: P must be a Property Key');\n\t}\n\tif (!has(O, P)) {\n\t\treturn void 0;\n\t}\n\tif (!$gOPD) {\n\t\t// ES3 / IE 8 fallback\n\t\tvar arrayLength = IsArray(O) && P === 'length';\n\t\tvar regexLastIndex = IsRegExp(O) && P === 'lastIndex';\n\t\treturn {\n\t\t\t'[[Configurable]]': !(arrayLength || regexLastIndex),\n\t\t\t'[[Enumerable]]': $isEnumerable(O, P),\n\t\t\t'[[Value]]': O[P],\n\t\t\t'[[Writable]]': true\n\t\t};\n\t}\n\treturn ToPropertyDescriptor($gOPD(O, P));\n};\n","'use strict';\n\nmodule.exports = require('../5/CheckObjectCoercible');\n","'use strict';\n\nvar $isNaN = require('../helpers/isNaN');\n\n// http://262.ecma-international.org/5.1/#sec-9.12\n\nmodule.exports = function SameValue(x, y) {\n\tif (x === y) { // 0 === -0, but they are not identical.\n\t\tif (x === 0) { return 1 / x === 1 / y; }\n\t\treturn true;\n\t}\n\treturn $isNaN(x) && $isNaN(y);\n};\n","'use strict';\n\n// http://262.ecma-international.org/5.1/#sec-9.2\n\nmodule.exports = function ToBoolean(value) { return !!value; };\n","'use strict';\n\nvar abs = require('./abs');\nvar floor = require('./floor');\nvar ToNumber = require('./ToNumber');\n\nvar $isNaN = require('../helpers/isNaN');\nvar $isFinite = require('../helpers/isFinite');\nvar $sign = require('../helpers/sign');\n\n// https://262.ecma-international.org/12.0/#sec-tointegerorinfinity\n\nmodule.exports = function ToIntegerOrInfinity(value) {\n\tvar number = ToNumber(value);\n\tif ($isNaN(number) || number === 0) { return 0; }\n\tif (!$isFinite(number)) { return number; }\n\treturn $sign(number) * floor(abs(number));\n};\n","'use strict';\n\nvar MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger');\n\nvar ToIntegerOrInfinity = require('./ToIntegerOrInfinity');\n\nmodule.exports = function ToLength(argument) {\n\tvar len = ToIntegerOrInfinity(argument);\n\tif (len <= 0) { return 0; } // includes converting -0 to +0\n\tif (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }\n\treturn len;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $Number = GetIntrinsic('%Number%');\nvar $RegExp = GetIntrinsic('%RegExp%');\nvar $parseInteger = GetIntrinsic('%parseInt%');\n\nvar callBound = require('call-bind/callBound');\nvar regexTester = require('../helpers/regexTester');\nvar isPrimitive = require('../helpers/isPrimitive');\n\nvar $strSlice = callBound('String.prototype.slice');\nvar isBinary = regexTester(/^0b[01]+$/i);\nvar isOctal = regexTester(/^0o[0-7]+$/i);\nvar isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);\nvar nonWS = ['\\u0085', '\\u200b', '\\ufffe'].join('');\nvar nonWSregex = new $RegExp('[' + nonWS + ']', 'g');\nvar hasNonWS = regexTester(nonWSregex);\n\n// whitespace from: https://es5.github.io/#x15.5.4.20\n// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324\nvar ws = [\n\t'\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003',\n\t'\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028',\n\t'\\u2029\\uFEFF'\n].join('');\nvar trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');\nvar $replace = callBound('String.prototype.replace');\nvar $trim = function (value) {\n\treturn $replace(value, trimRegex, '');\n};\n\nvar ToPrimitive = require('./ToPrimitive');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tonumber\n\nmodule.exports = function ToNumber(argument) {\n\tvar value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);\n\tif (typeof value === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a number');\n\t}\n\tif (typeof value === 'bigint') {\n\t\tthrow new $TypeError('Conversion from \\'BigInt\\' to \\'number\\' is not allowed.');\n\t}\n\tif (typeof value === 'string') {\n\t\tif (isBinary(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 2));\n\t\t} else if (isOctal(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 8));\n\t\t} else if (hasNonWS(value) || isInvalidHexLiteral(value)) {\n\t\t\treturn NaN;\n\t\t}\n\t\tvar trimmed = $trim(value);\n\t\tif (trimmed !== value) {\n\t\t\treturn ToNumber(trimmed);\n\t\t}\n\n\t}\n\treturn $Number(value);\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $Object = GetIntrinsic('%Object%');\n\nvar RequireObjectCoercible = require('./RequireObjectCoercible');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toobject\n\nmodule.exports = function ToObject(value) {\n\tRequireObjectCoercible(value);\n\treturn $Object(value);\n};\n","'use strict';\n\nvar toPrimitive = require('es-to-primitive/es2015');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toprimitive\n\nmodule.exports = function ToPrimitive(input) {\n\tif (arguments.length > 1) {\n\t\treturn toPrimitive(input, arguments[1]);\n\t}\n\treturn toPrimitive(input);\n};\n","'use strict';\n\nvar has = require('has');\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = require('./Type');\nvar ToBoolean = require('./ToBoolean');\nvar IsCallable = require('./IsCallable');\n\n// https://262.ecma-international.org/5.1/#sec-8.10.5\n\nmodule.exports = function ToPropertyDescriptor(Obj) {\n\tif (Type(Obj) !== 'Object') {\n\t\tthrow new $TypeError('ToPropertyDescriptor requires an object');\n\t}\n\n\tvar desc = {};\n\tif (has(Obj, 'enumerable')) {\n\t\tdesc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);\n\t}\n\tif (has(Obj, 'configurable')) {\n\t\tdesc['[[Configurable]]'] = ToBoolean(Obj.configurable);\n\t}\n\tif (has(Obj, 'value')) {\n\t\tdesc['[[Value]]'] = Obj.value;\n\t}\n\tif (has(Obj, 'writable')) {\n\t\tdesc['[[Writable]]'] = ToBoolean(Obj.writable);\n\t}\n\tif (has(Obj, 'get')) {\n\t\tvar getter = Obj.get;\n\t\tif (typeof getter !== 'undefined' && !IsCallable(getter)) {\n\t\t\tthrow new $TypeError('getter must be a function');\n\t\t}\n\t\tdesc['[[Get]]'] = getter;\n\t}\n\tif (has(Obj, 'set')) {\n\t\tvar setter = Obj.set;\n\t\tif (typeof setter !== 'undefined' && !IsCallable(setter)) {\n\t\t\tthrow new $TypeError('setter must be a function');\n\t\t}\n\t\tdesc['[[Set]]'] = setter;\n\t}\n\n\tif ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {\n\t\tthrow new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');\n\t}\n\treturn desc;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $String = GetIntrinsic('%String%');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tostring\n\nmodule.exports = function ToString(argument) {\n\tif (typeof argument === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a string');\n\t}\n\treturn $String(argument);\n};\n","'use strict';\n\nvar ES5Type = require('../5/Type');\n\n// https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values\n\nmodule.exports = function Type(x) {\n\tif (typeof x === 'symbol') {\n\t\treturn 'Symbol';\n\t}\n\tif (typeof x === 'bigint') {\n\t\treturn 'BigInt';\n\t}\n\treturn ES5Type(x);\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n","'use strict';\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// http://262.ecma-international.org/5.1/#sec-9.10\n\nmodule.exports = function CheckObjectCoercible(value, optMessage) {\n\tif (value == null) {\n\t\tthrow new $TypeError(optMessage || ('Cannot call method on ' + value));\n\t}\n\treturn value;\n};\n","'use strict';\n\n// https://262.ecma-international.org/5.1/#sec-8\n\nmodule.exports = function Type(x) {\n\tif (x === null) {\n\t\treturn 'Null';\n\t}\n\tif (typeof x === 'undefined') {\n\t\treturn 'Undefined';\n\t}\n\tif (typeof x === 'function' || typeof x === 'object') {\n\t\treturn 'Object';\n\t}\n\tif (typeof x === 'number') {\n\t\treturn 'Number';\n\t}\n\tif (typeof x === 'boolean') {\n\t\treturn 'Boolean';\n\t}\n\tif (typeof x === 'string') {\n\t\treturn 'String';\n\t}\n};\n","'use strict';\n\n// TODO: remove, semver-major\n\nmodule.exports = require('get-intrinsic');\n","'use strict';\n\nvar hasPropertyDescriptors = require('has-property-descriptors');\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $defineProperty = hasPropertyDescriptors() && GetIntrinsic('%Object.defineProperty%', true);\n\nvar hasArrayLengthDefineBug = hasPropertyDescriptors.hasArrayLengthDefineBug();\n\n// eslint-disable-next-line global-require\nvar isArray = hasArrayLengthDefineBug && require('../helpers/IsArray');\n\nvar callBound = require('call-bind/callBound');\n\nvar $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');\n\n// eslint-disable-next-line max-params\nmodule.exports = function DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, desc) {\n\tif (!$defineProperty) {\n\t\tif (!IsDataDescriptor(desc)) {\n\t\t\t// ES3 does not support getters/setters\n\t\t\treturn false;\n\t\t}\n\t\tif (!desc['[[Configurable]]'] || !desc['[[Writable]]']) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// fallback for ES3\n\t\tif (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) {\n\t\t\t// a non-enumerable existing property\n\t\t\treturn false;\n\t\t}\n\n\t\t// property does not exist at all, or exists but is enumerable\n\t\tvar V = desc['[[Value]]'];\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO[P] = V; // will use [[Define]]\n\t\treturn SameValue(O[P], V);\n\t}\n\tif (\n\t\thasArrayLengthDefineBug\n\t\t&& P === 'length'\n\t\t&& '[[Value]]' in desc\n\t\t&& isArray(O)\n\t\t&& O.length !== desc['[[Value]]']\n\t) {\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO.length = desc['[[Value]]'];\n\t\treturn O.length === desc['[[Value]]'];\n\t}\n\n\t$defineProperty(O, P, FromPropertyDescriptor(desc));\n\treturn true;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && require('call-bind/callBound')('Object.prototype.toString');\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar has = require('has');\n\nvar isMatchRecord = require('./isMatchRecord');\n\nvar predicates = {\n\t// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type\n\t'Property Descriptor': function isPropertyDescriptor(Desc) {\n\t\tvar allowed = {\n\t\t\t'[[Configurable]]': true,\n\t\t\t'[[Enumerable]]': true,\n\t\t\t'[[Get]]': true,\n\t\t\t'[[Set]]': true,\n\t\t\t'[[Value]]': true,\n\t\t\t'[[Writable]]': true\n\t\t};\n\n\t\tfor (var key in Desc) { // eslint-disable-line\n\t\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tvar isData = has(Desc, '[[Value]]');\n\t\tvar IsAccessor = has(Desc, '[[Get]]') || has(Desc, '[[Set]]');\n\t\tif (isData && IsAccessor) {\n\t\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t\t}\n\t\treturn true;\n\t},\n\t// https://262.ecma-international.org/13.0/#sec-match-records\n\t'Match Record': isMatchRecord\n};\n\nmodule.exports = function assertRecord(Type, recordType, argumentName, value) {\n\tvar predicate = predicates[recordType];\n\tif (typeof predicate !== 'function') {\n\t\tthrow new $SyntaxError('unknown record type: ' + recordType);\n\t}\n\tif (Type(value) !== 'Object' || !predicate(value)) {\n\t\tthrow new $TypeError(argumentName + ' must be a ' + recordType);\n\t}\n};\n","'use strict';\n\nmodule.exports = function fromPropertyDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn Desc;\n\t}\n\tvar obj = {};\n\tif ('[[Value]]' in Desc) {\n\t\tobj.value = Desc['[[Value]]'];\n\t}\n\tif ('[[Writable]]' in Desc) {\n\t\tobj.writable = !!Desc['[[Writable]]'];\n\t}\n\tif ('[[Get]]' in Desc) {\n\t\tobj.get = Desc['[[Get]]'];\n\t}\n\tif ('[[Set]]' in Desc) {\n\t\tobj.set = Desc['[[Set]]'];\n\t}\n\tif ('[[Enumerable]]' in Desc) {\n\t\tobj.enumerable = !!Desc['[[Enumerable]]'];\n\t}\n\tif ('[[Configurable]]' in Desc) {\n\t\tobj.configurable = !!Desc['[[Configurable]]'];\n\t}\n\treturn obj;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n","'use strict';\n\nvar $isNaN = Number.isNaN || function (a) { return a !== a; };\n\nmodule.exports = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; };\n","'use strict';\n\nvar has = require('has');\n\n// https://262.ecma-international.org/13.0/#sec-match-records\n\nmodule.exports = function isMatchRecord(record) {\n\treturn (\n\t\thas(record, '[[StartIndex]]')\n && has(record, '[[EndIndex]]')\n && record['[[StartIndex]]'] >= 0\n && record['[[EndIndex]]'] >= record['[[StartIndex]]']\n && String(parseInt(record['[[StartIndex]]'], 10)) === String(record['[[StartIndex]]'])\n && String(parseInt(record['[[EndIndex]]'], 10)) === String(record['[[EndIndex]]'])\n\t);\n};\n","'use strict';\n\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n","'use strict';\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar has = require('has');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nmodule.exports = function IsPropertyDescriptor(ES, Desc) {\n\tif (ES.Type(Desc) !== 'Object') {\n\t\treturn false;\n\t}\n\tvar allowed = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': true,\n\t\t'[[Get]]': true,\n\t\t'[[Set]]': true,\n\t\t'[[Value]]': true,\n\t\t'[[Writable]]': true\n\t};\n\n\tfor (var key in Desc) { // eslint-disable-line no-restricted-syntax\n\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (ES.IsDataDescriptor(Desc) && ES.IsAccessorDescriptor(Desc)) {\n\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t}\n\treturn true;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $Math = GetIntrinsic('%Math%');\nvar $Number = GetIntrinsic('%Number%');\n\nmodule.exports = $Number.MAX_SAFE_INTEGER || $Math.pow(2, 53) - 1;\n","'use strict';\n\nvar callBound = require('call-bind/callBound');\n\nvar $exec = callBound('RegExp.prototype.exec');\n\nmodule.exports = function regexTester(regex) {\n\treturn function test(s) { return $exec(regex, s) !== null; };\n};\n","'use strict';\n\nmodule.exports = function sign(number) {\n\treturn number >= 0 ? 1 : -1;\n};\n","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","export default function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","import defineProperty from \"./defineProperty.js\";\nexport default function _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? Object(arguments[i]) : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys.push.apply(ownKeys, Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n}","import _typeof from \"@babel/runtime/helpers/typeof\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n\n return assertThisInitialized(self);\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var inProgress = {};\n// data-webpack is not used as build has no uniqueName\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","var createStylesheet = function(chunkId, fullhref, resolve, reject) {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tvar onLinkComplete = function(event) {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tlinkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\tdocument.head.appendChild(linkTag);\n\treturn linkTag;\n};\nvar findStylesheet = function(href, fullhref) {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = function(chunkId) {\n\treturn new Promise(function(resolve, reject) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t143: 0\n};\n\n__webpack_require__.f.miniCss = function(chunkId, promises) {\n\tvar cssChunks = {\"365\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(function() {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, function(e) {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","__webpack_require__.F = {};\n__webpack_require__.E = function(chunkId) {\n\tObject.keys(__webpack_require__.F).map(function(key) {\n\t\t__webpack_require__.F[key](chunkId);\n\t});\n}","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".bundle.\" + {\"205\":\"89155e0eacfb8efa042a\",\"295\":\"e0f1160b465b6ccc903c\",\"365\":\"19b2f551ebb505a4a54d\",\"569\":\"5c809f7a1b9a80e0a01e\",\"799\":\"2ef6f5cf10afff0b9cec\",\"953\":\"4f8ebdb6dbbe345ef09d\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"./\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t143: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n__webpack_require__.F.j = function(chunkId) {\n\tif((!__webpack_require__.o(installedChunks, chunkId) || installedChunks[chunkId] === undefined) && true) {\n\t\tinstalledChunks[chunkId] = null;\n\t\tvar link = document.createElement('link');\n\n\t\tif (__webpack_require__.nc) {\n\t\t\tlink.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tlink.rel = \"prefetch\";\n\t\tlink.as = \"script\";\n\t\tlink.href = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\tdocument.head.appendChild(link);\n\t}\n};\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunk\"] = self[\"webpackChunk\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.O(0, [143], function() {\n\t[365,799,953,295,205,569].map(__webpack_require__.E);\n}, 5);","import _typeof from '@babel/runtime/helpers/esm/typeof';\nimport _objectSpread from '@babel/runtime/helpers/esm/objectSpread';\nimport _classCallCheck from '@babel/runtime/helpers/esm/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/esm/createClass';\nimport _possibleConstructorReturn from '@babel/runtime/helpers/esm/possibleConstructorReturn';\nimport _getPrototypeOf from '@babel/runtime/helpers/esm/getPrototypeOf';\nimport _assertThisInitialized from '@babel/runtime/helpers/esm/assertThisInitialized';\nimport _inherits from '@babel/runtime/helpers/esm/inherits';\nimport _toConsumableArray from '@babel/runtime/helpers/esm/toConsumableArray';\nimport _slicedToArray from '@babel/runtime/helpers/esm/slicedToArray';\n\nvar consoleLogger = {\n type: 'logger',\n log: function log(args) {\n this.output('log', args);\n },\n warn: function warn(args) {\n this.output('warn', args);\n },\n error: function error(args) {\n this.output('error', args);\n },\n output: function output(type, args) {\n var _console;\n\n /* eslint no-console: 0 */\n if (console && console[type]) (_console = console)[type].apply(_console, _toConsumableArray(args));\n }\n};\n\nvar Logger =\n/*#__PURE__*/\nfunction () {\n function Logger(concreteLogger) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, Logger);\n\n this.init(concreteLogger, options);\n }\n\n _createClass(Logger, [{\n key: \"init\",\n value: function init(concreteLogger) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.prefix = options.prefix || 'i18next:';\n this.logger = concreteLogger || consoleLogger;\n this.options = options;\n this.debug = options.debug;\n }\n }, {\n key: \"setDebug\",\n value: function setDebug(bool) {\n this.debug = bool;\n }\n }, {\n key: \"log\",\n value: function log() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return this.forward(args, 'log', '', true);\n }\n }, {\n key: \"warn\",\n value: function warn() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return this.forward(args, 'warn', '', true);\n }\n }, {\n key: \"error\",\n value: function error() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n return this.forward(args, 'error', '');\n }\n }, {\n key: \"deprecate\",\n value: function deprecate() {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n return this.forward(args, 'warn', 'WARNING DEPRECATED: ', true);\n }\n }, {\n key: \"forward\",\n value: function forward(args, lvl, prefix, debugOnly) {\n if (debugOnly && !this.debug) return null;\n if (typeof args[0] === 'string') args[0] = \"\".concat(prefix).concat(this.prefix, \" \").concat(args[0]);\n return this.logger[lvl](args);\n }\n }, {\n key: \"create\",\n value: function create(moduleName) {\n return new Logger(this.logger, _objectSpread({}, {\n prefix: \"\".concat(this.prefix, \":\").concat(moduleName, \":\")\n }, this.options));\n }\n }]);\n\n return Logger;\n}();\n\nvar baseLogger = new Logger();\n\nvar EventEmitter =\n/*#__PURE__*/\nfunction () {\n function EventEmitter() {\n _classCallCheck(this, EventEmitter);\n\n this.observers = {};\n }\n\n _createClass(EventEmitter, [{\n key: \"on\",\n value: function on(events, listener) {\n var _this = this;\n\n events.split(' ').forEach(function (event) {\n _this.observers[event] = _this.observers[event] || [];\n\n _this.observers[event].push(listener);\n });\n return this;\n }\n }, {\n key: \"off\",\n value: function off(event, listener) {\n if (!this.observers[event]) return;\n\n if (!listener) {\n delete this.observers[event];\n return;\n }\n\n this.observers[event] = this.observers[event].filter(function (l) {\n return l !== listener;\n });\n }\n }, {\n key: \"emit\",\n value: function emit(event) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n if (this.observers[event]) {\n var cloned = [].concat(this.observers[event]);\n cloned.forEach(function (observer) {\n observer.apply(void 0, args);\n });\n }\n\n if (this.observers['*']) {\n var _cloned = [].concat(this.observers['*']);\n\n _cloned.forEach(function (observer) {\n observer.apply(observer, [event].concat(args));\n });\n }\n }\n }]);\n\n return EventEmitter;\n}();\n\n// http://lea.verou.me/2016/12/resolve-promises-externally-with-this-one-weird-trick/\nfunction defer() {\n var res;\n var rej;\n var promise = new Promise(function (resolve, reject) {\n res = resolve;\n rej = reject;\n });\n promise.resolve = res;\n promise.reject = rej;\n return promise;\n}\nfunction makeString(object) {\n if (object == null) return '';\n /* eslint prefer-template: 0 */\n\n return '' + object;\n}\nfunction copy(a, s, t) {\n a.forEach(function (m) {\n if (s[m]) t[m] = s[m];\n });\n}\n\nfunction getLastOfPath(object, path, Empty) {\n function cleanKey(key) {\n return key && key.indexOf('###') > -1 ? key.replace(/###/g, '.') : key;\n }\n\n function canNotTraverseDeeper() {\n return !object || typeof object === 'string';\n }\n\n var stack = typeof path !== 'string' ? [].concat(path) : path.split('.');\n\n while (stack.length > 1) {\n if (canNotTraverseDeeper()) return {};\n var key = cleanKey(stack.shift());\n if (!object[key] && Empty) object[key] = new Empty();\n object = object[key];\n }\n\n if (canNotTraverseDeeper()) return {};\n return {\n obj: object,\n k: cleanKey(stack.shift())\n };\n}\n\nfunction setPath(object, path, newValue) {\n var _getLastOfPath = getLastOfPath(object, path, Object),\n obj = _getLastOfPath.obj,\n k = _getLastOfPath.k;\n\n obj[k] = newValue;\n}\nfunction pushPath(object, path, newValue, concat) {\n var _getLastOfPath2 = getLastOfPath(object, path, Object),\n obj = _getLastOfPath2.obj,\n k = _getLastOfPath2.k;\n\n obj[k] = obj[k] || [];\n if (concat) obj[k] = obj[k].concat(newValue);\n if (!concat) obj[k].push(newValue);\n}\nfunction getPath(object, path) {\n var _getLastOfPath3 = getLastOfPath(object, path),\n obj = _getLastOfPath3.obj,\n k = _getLastOfPath3.k;\n\n if (!obj) return undefined;\n return obj[k];\n}\nfunction getPathWithDefaults(data, defaultData, key) {\n var value = getPath(data, key);\n\n if (value !== undefined) {\n return value;\n } // Fallback to default values\n\n\n return getPath(defaultData, key);\n}\nfunction deepExtend(target, source, overwrite) {\n /* eslint no-restricted-syntax: 0 */\n for (var prop in source) {\n if (prop in target) {\n // If we reached a leaf string in target or source then replace with source or skip depending on the 'overwrite' switch\n if (typeof target[prop] === 'string' || target[prop] instanceof String || typeof source[prop] === 'string' || source[prop] instanceof String) {\n if (overwrite) target[prop] = source[prop];\n } else {\n deepExtend(target[prop], source[prop], overwrite);\n }\n } else {\n target[prop] = source[prop];\n }\n }\n\n return target;\n}\nfunction regexEscape(str) {\n /* eslint no-useless-escape: 0 */\n return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n}\n/* eslint-disable */\n\nvar _entityMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n};\n/* eslint-enable */\n\nfunction escape(data) {\n if (typeof data === 'string') {\n return data.replace(/[&<>\"'\\/]/g, function (s) {\n return _entityMap[s];\n });\n }\n\n return data;\n}\n\nvar ResourceStore =\n/*#__PURE__*/\nfunction (_EventEmitter) {\n _inherits(ResourceStore, _EventEmitter);\n\n function ResourceStore(data) {\n var _this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n ns: ['translation'],\n defaultNS: 'translation'\n };\n\n _classCallCheck(this, ResourceStore);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(ResourceStore).call(this));\n EventEmitter.call(_assertThisInitialized(_this)); // <=IE10 fix (unable to call parent constructor)\n\n _this.data = data || {};\n _this.options = options;\n\n if (_this.options.keySeparator === undefined) {\n _this.options.keySeparator = '.';\n }\n\n return _this;\n }\n\n _createClass(ResourceStore, [{\n key: \"addNamespaces\",\n value: function addNamespaces(ns) {\n if (this.options.ns.indexOf(ns) < 0) {\n this.options.ns.push(ns);\n }\n }\n }, {\n key: \"removeNamespaces\",\n value: function removeNamespaces(ns) {\n var index = this.options.ns.indexOf(ns);\n\n if (index > -1) {\n this.options.ns.splice(index, 1);\n }\n }\n }, {\n key: \"getResource\",\n value: function getResource(lng, ns, key) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n var path = [lng, ns];\n if (key && typeof key !== 'string') path = path.concat(key);\n if (key && typeof key === 'string') path = path.concat(keySeparator ? key.split(keySeparator) : key);\n\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n }\n\n return getPath(this.data, path);\n }\n }, {\n key: \"addResource\",\n value: function addResource(lng, ns, key, value) {\n var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {\n silent: false\n };\n var keySeparator = this.options.keySeparator;\n if (keySeparator === undefined) keySeparator = '.';\n var path = [lng, ns];\n if (key) path = path.concat(keySeparator ? key.split(keySeparator) : key);\n\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n value = ns;\n ns = path[1];\n }\n\n this.addNamespaces(ns);\n setPath(this.data, path, value);\n if (!options.silent) this.emit('added', lng, ns, key, value);\n }\n }, {\n key: \"addResources\",\n value: function addResources(lng, ns, resources) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {\n silent: false\n };\n\n /* eslint no-restricted-syntax: 0 */\n for (var m in resources) {\n if (typeof resources[m] === 'string' || Object.prototype.toString.apply(resources[m]) === '[object Array]') this.addResource(lng, ns, m, resources[m], {\n silent: true\n });\n }\n\n if (!options.silent) this.emit('added', lng, ns, resources);\n }\n }, {\n key: \"addResourceBundle\",\n value: function addResourceBundle(lng, ns, resources, deep, overwrite) {\n var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {\n silent: false\n };\n var path = [lng, ns];\n\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n deep = resources;\n resources = ns;\n ns = path[1];\n }\n\n this.addNamespaces(ns);\n var pack = getPath(this.data, path) || {};\n\n if (deep) {\n deepExtend(pack, resources, overwrite);\n } else {\n pack = _objectSpread({}, pack, resources);\n }\n\n setPath(this.data, path, pack);\n if (!options.silent) this.emit('added', lng, ns, resources);\n }\n }, {\n key: \"removeResourceBundle\",\n value: function removeResourceBundle(lng, ns) {\n if (this.hasResourceBundle(lng, ns)) {\n delete this.data[lng][ns];\n }\n\n this.removeNamespaces(ns);\n this.emit('removed', lng, ns);\n }\n }, {\n key: \"hasResourceBundle\",\n value: function hasResourceBundle(lng, ns) {\n return this.getResource(lng, ns) !== undefined;\n }\n }, {\n key: \"getResourceBundle\",\n value: function getResourceBundle(lng, ns) {\n if (!ns) ns = this.options.defaultNS; // COMPATIBILITY: remove extend in v2.1.0\n\n if (this.options.compatibilityAPI === 'v1') return _objectSpread({}, {}, this.getResource(lng, ns));\n return this.getResource(lng, ns);\n }\n }, {\n key: \"getDataByLanguage\",\n value: function getDataByLanguage(lng) {\n return this.data[lng];\n }\n }, {\n key: \"toJSON\",\n value: function toJSON() {\n return this.data;\n }\n }]);\n\n return ResourceStore;\n}(EventEmitter);\n\nvar postProcessor = {\n processors: {},\n addPostProcessor: function addPostProcessor(module) {\n this.processors[module.name] = module;\n },\n handle: function handle(processors, value, key, options, translator) {\n var _this = this;\n\n processors.forEach(function (processor) {\n if (_this.processors[processor]) value = _this.processors[processor].process(value, key, options, translator);\n });\n return value;\n }\n};\n\nvar Translator =\n/*#__PURE__*/\nfunction (_EventEmitter) {\n _inherits(Translator, _EventEmitter);\n\n function Translator(services) {\n var _this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, Translator);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(Translator).call(this));\n EventEmitter.call(_assertThisInitialized(_this)); // <=IE10 fix (unable to call parent constructor)\n\n copy(['resourceStore', 'languageUtils', 'pluralResolver', 'interpolator', 'backendConnector', 'i18nFormat', 'utils'], services, _assertThisInitialized(_this));\n _this.options = options;\n\n if (_this.options.keySeparator === undefined) {\n _this.options.keySeparator = '.';\n }\n\n _this.logger = baseLogger.create('translator');\n return _this;\n }\n\n _createClass(Translator, [{\n key: \"changeLanguage\",\n value: function changeLanguage(lng) {\n if (lng) this.language = lng;\n }\n }, {\n key: \"exists\",\n value: function exists(key) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n interpolation: {}\n };\n var resolved = this.resolve(key, options);\n return resolved && resolved.res !== undefined;\n }\n }, {\n key: \"extractFromKey\",\n value: function extractFromKey(key, options) {\n var nsSeparator = options.nsSeparator || this.options.nsSeparator;\n if (nsSeparator === undefined) nsSeparator = ':';\n var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n var namespaces = options.ns || this.options.defaultNS;\n\n if (nsSeparator && key.indexOf(nsSeparator) > -1) {\n var parts = key.split(nsSeparator);\n if (nsSeparator !== keySeparator || nsSeparator === keySeparator && this.options.ns.indexOf(parts[0]) > -1) namespaces = parts.shift();\n key = parts.join(keySeparator);\n }\n\n if (typeof namespaces === 'string') namespaces = [namespaces];\n return {\n key: key,\n namespaces: namespaces\n };\n }\n }, {\n key: \"translate\",\n value: function translate(keys, options) {\n var _this2 = this;\n\n if (_typeof(options) !== 'object' && this.options.overloadTranslationOptionHandler) {\n /* eslint prefer-rest-params: 0 */\n options = this.options.overloadTranslationOptionHandler(arguments);\n }\n\n if (!options) options = {}; // non valid keys handling\n\n if (keys === undefined || keys === null) return '';\n if (!Array.isArray(keys)) keys = [String(keys)]; // separators\n\n var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator; // get namespace(s)\n\n var _this$extractFromKey = this.extractFromKey(keys[keys.length - 1], options),\n key = _this$extractFromKey.key,\n namespaces = _this$extractFromKey.namespaces;\n\n var namespace = namespaces[namespaces.length - 1]; // return key on CIMode\n\n var lng = options.lng || this.language;\n var appendNamespaceToCIMode = options.appendNamespaceToCIMode || this.options.appendNamespaceToCIMode;\n\n if (lng && lng.toLowerCase() === 'cimode') {\n if (appendNamespaceToCIMode) {\n var nsSeparator = options.nsSeparator || this.options.nsSeparator;\n return namespace + nsSeparator + key;\n }\n\n return key;\n } // resolve from store\n\n\n var resolved = this.resolve(keys, options);\n var res = resolved && resolved.res;\n var resUsedKey = resolved && resolved.usedKey || key;\n var resExactUsedKey = resolved && resolved.exactUsedKey || key;\n var resType = Object.prototype.toString.apply(res);\n var noObject = ['[object Number]', '[object Function]', '[object RegExp]'];\n var joinArrays = options.joinArrays !== undefined ? options.joinArrays : this.options.joinArrays; // object\n\n var handleAsObjectInI18nFormat = !this.i18nFormat || this.i18nFormat.handleAsObject;\n var handleAsObject = typeof res !== 'string' && typeof res !== 'boolean' && typeof res !== 'number';\n\n if (handleAsObjectInI18nFormat && res && handleAsObject && noObject.indexOf(resType) < 0 && !(typeof joinArrays === 'string' && resType === '[object Array]')) {\n if (!options.returnObjects && !this.options.returnObjects) {\n this.logger.warn('accessing an object - but returnObjects options is not enabled!');\n return this.options.returnedObjectHandler ? this.options.returnedObjectHandler(resUsedKey, res, options) : \"key '\".concat(key, \" (\").concat(this.language, \")' returned an object instead of string.\");\n } // if we got a separator we loop over children - else we just return object as is\n // as having it set to false means no hierarchy so no lookup for nested values\n\n\n if (keySeparator) {\n var resTypeIsArray = resType === '[object Array]';\n var copy$$1 = resTypeIsArray ? [] : {}; // apply child translation on a copy\n\n /* eslint no-restricted-syntax: 0 */\n\n var newKeyToUse = resTypeIsArray ? resExactUsedKey : resUsedKey;\n\n for (var m in res) {\n if (Object.prototype.hasOwnProperty.call(res, m)) {\n var deepKey = \"\".concat(newKeyToUse).concat(keySeparator).concat(m);\n copy$$1[m] = this.translate(deepKey, _objectSpread({}, options, {\n joinArrays: false,\n ns: namespaces\n }));\n if (copy$$1[m] === deepKey) copy$$1[m] = res[m]; // if nothing found use orginal value as fallback\n }\n }\n\n res = copy$$1;\n }\n } else if (handleAsObjectInI18nFormat && typeof joinArrays === 'string' && resType === '[object Array]') {\n // array special treatment\n res = res.join(joinArrays);\n if (res) res = this.extendTranslation(res, keys, options);\n } else {\n // string, empty or null\n var usedDefault = false;\n var usedKey = false; // fallback value\n\n if (!this.isValidLookup(res) && options.defaultValue !== undefined) {\n usedDefault = true;\n\n if (options.count !== undefined) {\n var suffix = this.pluralResolver.getSuffix(lng, options.count);\n res = options[\"defaultValue\".concat(suffix)];\n }\n\n if (!res) res = options.defaultValue;\n }\n\n if (!this.isValidLookup(res)) {\n usedKey = true;\n res = key;\n } // save missing\n\n\n var updateMissing = options.defaultValue && options.defaultValue !== res && this.options.updateMissing;\n\n if (usedKey || usedDefault || updateMissing) {\n this.logger.log(updateMissing ? 'updateKey' : 'missingKey', lng, namespace, key, updateMissing ? options.defaultValue : res);\n var lngs = [];\n var fallbackLngs = this.languageUtils.getFallbackCodes(this.options.fallbackLng, options.lng || this.language);\n\n if (this.options.saveMissingTo === 'fallback' && fallbackLngs && fallbackLngs[0]) {\n for (var i = 0; i < fallbackLngs.length; i++) {\n lngs.push(fallbackLngs[i]);\n }\n } else if (this.options.saveMissingTo === 'all') {\n lngs = this.languageUtils.toResolveHierarchy(options.lng || this.language);\n } else {\n lngs.push(options.lng || this.language);\n }\n\n var send = function send(l, k) {\n if (_this2.options.missingKeyHandler) {\n _this2.options.missingKeyHandler(l, namespace, k, updateMissing ? options.defaultValue : res, updateMissing, options);\n } else if (_this2.backendConnector && _this2.backendConnector.saveMissing) {\n _this2.backendConnector.saveMissing(l, namespace, k, updateMissing ? options.defaultValue : res, updateMissing, options);\n }\n\n _this2.emit('missingKey', l, namespace, k, res);\n };\n\n if (this.options.saveMissing) {\n var needsPluralHandling = options.count !== undefined && typeof options.count !== 'string';\n\n if (this.options.saveMissingPlurals && needsPluralHandling) {\n lngs.forEach(function (l) {\n var plurals = _this2.pluralResolver.getPluralFormsOfKey(l, key);\n\n plurals.forEach(function (p) {\n return send([l], p);\n });\n });\n } else {\n send(lngs, key);\n }\n }\n } // extend\n\n\n res = this.extendTranslation(res, keys, options, resolved); // append namespace if still key\n\n if (usedKey && res === key && this.options.appendNamespaceToMissingKey) res = \"\".concat(namespace, \":\").concat(key); // parseMissingKeyHandler\n\n if (usedKey && this.options.parseMissingKeyHandler) res = this.options.parseMissingKeyHandler(res);\n } // return\n\n\n return res;\n }\n }, {\n key: \"extendTranslation\",\n value: function extendTranslation(res, key, options, resolved) {\n var _this3 = this;\n\n if (this.i18nFormat && this.i18nFormat.parse) {\n res = this.i18nFormat.parse(res, options, resolved.usedLng, resolved.usedNS, resolved.usedKey, {\n resolved: resolved\n });\n } else if (!options.skipInterpolation) {\n // i18next.parsing\n if (options.interpolation) this.interpolator.init(_objectSpread({}, options, {\n interpolation: _objectSpread({}, this.options.interpolation, options.interpolation)\n })); // interpolate\n\n var data = options.replace && typeof options.replace !== 'string' ? options.replace : options;\n if (this.options.interpolation.defaultVariables) data = _objectSpread({}, this.options.interpolation.defaultVariables, data);\n res = this.interpolator.interpolate(res, data, options.lng || this.language, options); // nesting\n\n if (options.nest !== false) res = this.interpolator.nest(res, function () {\n return _this3.translate.apply(_this3, arguments);\n }, options);\n if (options.interpolation) this.interpolator.reset();\n } // post process\n\n\n var postProcess = options.postProcess || this.options.postProcess;\n var postProcessorNames = typeof postProcess === 'string' ? [postProcess] : postProcess;\n\n if (res !== undefined && res !== null && postProcessorNames && postProcessorNames.length && options.applyPostProcessor !== false) {\n res = postProcessor.handle(postProcessorNames, res, key, this.options && this.options.postProcessPassResolved ? _objectSpread({\n i18nResolved: resolved\n }, options) : options, this);\n }\n\n return res;\n }\n }, {\n key: \"resolve\",\n value: function resolve(keys) {\n var _this4 = this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var found;\n var usedKey; // plain key\n\n var exactUsedKey; // key with context / plural\n\n var usedLng;\n var usedNS;\n if (typeof keys === 'string') keys = [keys]; // forEach possible key\n\n keys.forEach(function (k) {\n if (_this4.isValidLookup(found)) return;\n\n var extracted = _this4.extractFromKey(k, options);\n\n var key = extracted.key;\n usedKey = key;\n var namespaces = extracted.namespaces;\n if (_this4.options.fallbackNS) namespaces = namespaces.concat(_this4.options.fallbackNS);\n var needsPluralHandling = options.count !== undefined && typeof options.count !== 'string';\n var needsContextHandling = options.context !== undefined && typeof options.context === 'string' && options.context !== '';\n var codes = options.lngs ? options.lngs : _this4.languageUtils.toResolveHierarchy(options.lng || _this4.language, options.fallbackLng);\n namespaces.forEach(function (ns) {\n if (_this4.isValidLookup(found)) return;\n usedNS = ns;\n\n if (_this4.utils && _this4.utils.hasLoadedNamespace && !_this4.utils.hasLoadedNamespace(usedNS)) {\n _this4.logger.warn(\"key \\\"\".concat(usedKey, \"\\\" for namespace \\\"\").concat(usedNS, \"\\\" won't get resolved as namespace was not yet loaded\"), 'This means something IS WRONG in your application setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n }\n\n codes.forEach(function (code) {\n if (_this4.isValidLookup(found)) return;\n usedLng = code;\n var finalKey = key;\n var finalKeys = [finalKey];\n\n if (_this4.i18nFormat && _this4.i18nFormat.addLookupKeys) {\n _this4.i18nFormat.addLookupKeys(finalKeys, key, code, ns, options);\n } else {\n var pluralSuffix;\n if (needsPluralHandling) pluralSuffix = _this4.pluralResolver.getSuffix(code, options.count); // fallback for plural if context not found\n\n if (needsPluralHandling && needsContextHandling) finalKeys.push(finalKey + pluralSuffix); // get key for context if needed\n\n if (needsContextHandling) finalKeys.push(finalKey += \"\".concat(_this4.options.contextSeparator).concat(options.context)); // get key for plural if needed\n\n if (needsPluralHandling) finalKeys.push(finalKey += pluralSuffix);\n } // iterate over finalKeys starting with most specific pluralkey (-> contextkey only) -> singularkey only\n\n\n var possibleKey;\n /* eslint no-cond-assign: 0 */\n\n while (possibleKey = finalKeys.pop()) {\n if (!_this4.isValidLookup(found)) {\n exactUsedKey = possibleKey;\n found = _this4.getResource(code, ns, possibleKey, options);\n }\n }\n });\n });\n });\n return {\n res: found,\n usedKey: usedKey,\n exactUsedKey: exactUsedKey,\n usedLng: usedLng,\n usedNS: usedNS\n };\n }\n }, {\n key: \"isValidLookup\",\n value: function isValidLookup(res) {\n return res !== undefined && !(!this.options.returnNull && res === null) && !(!this.options.returnEmptyString && res === '');\n }\n }, {\n key: \"getResource\",\n value: function getResource(code, ns, key) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n if (this.i18nFormat && this.i18nFormat.getResource) return this.i18nFormat.getResource(code, ns, key, options);\n return this.resourceStore.getResource(code, ns, key, options);\n }\n }]);\n\n return Translator;\n}(EventEmitter);\n\nfunction capitalize(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nvar LanguageUtil =\n/*#__PURE__*/\nfunction () {\n function LanguageUtil(options) {\n _classCallCheck(this, LanguageUtil);\n\n this.options = options;\n this.whitelist = this.options.whitelist || false;\n this.logger = baseLogger.create('languageUtils');\n }\n\n _createClass(LanguageUtil, [{\n key: \"getScriptPartFromCode\",\n value: function getScriptPartFromCode(code) {\n if (!code || code.indexOf('-') < 0) return null;\n var p = code.split('-');\n if (p.length === 2) return null;\n p.pop();\n return this.formatLanguageCode(p.join('-'));\n }\n }, {\n key: \"getLanguagePartFromCode\",\n value: function getLanguagePartFromCode(code) {\n if (!code || code.indexOf('-') < 0) return code;\n var p = code.split('-');\n return this.formatLanguageCode(p[0]);\n }\n }, {\n key: \"formatLanguageCode\",\n value: function formatLanguageCode(code) {\n // http://www.iana.org/assignments/language-tags/language-tags.xhtml\n if (typeof code === 'string' && code.indexOf('-') > -1) {\n var specialCases = ['hans', 'hant', 'latn', 'cyrl', 'cans', 'mong', 'arab'];\n var p = code.split('-');\n\n if (this.options.lowerCaseLng) {\n p = p.map(function (part) {\n return part.toLowerCase();\n });\n } else if (p.length === 2) {\n p[0] = p[0].toLowerCase();\n p[1] = p[1].toUpperCase();\n if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n } else if (p.length === 3) {\n p[0] = p[0].toLowerCase(); // if lenght 2 guess it's a country\n\n if (p[1].length === 2) p[1] = p[1].toUpperCase();\n if (p[0] !== 'sgn' && p[2].length === 2) p[2] = p[2].toUpperCase();\n if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n if (specialCases.indexOf(p[2].toLowerCase()) > -1) p[2] = capitalize(p[2].toLowerCase());\n }\n\n return p.join('-');\n }\n\n return this.options.cleanCode || this.options.lowerCaseLng ? code.toLowerCase() : code;\n }\n }, {\n key: \"isWhitelisted\",\n value: function isWhitelisted(code) {\n if (this.options.load === 'languageOnly' || this.options.nonExplicitWhitelist) {\n code = this.getLanguagePartFromCode(code);\n }\n\n return !this.whitelist || !this.whitelist.length || this.whitelist.indexOf(code) > -1;\n }\n }, {\n key: \"getFallbackCodes\",\n value: function getFallbackCodes(fallbacks, code) {\n if (!fallbacks) return [];\n if (typeof fallbacks === 'string') fallbacks = [fallbacks];\n if (Object.prototype.toString.apply(fallbacks) === '[object Array]') return fallbacks;\n if (!code) return fallbacks[\"default\"] || []; // asume we have an object defining fallbacks\n\n var found = fallbacks[code];\n if (!found) found = fallbacks[this.getScriptPartFromCode(code)];\n if (!found) found = fallbacks[this.formatLanguageCode(code)];\n if (!found) found = fallbacks[\"default\"];\n return found || [];\n }\n }, {\n key: \"toResolveHierarchy\",\n value: function toResolveHierarchy(code, fallbackCode) {\n var _this = this;\n\n var fallbackCodes = this.getFallbackCodes(fallbackCode || this.options.fallbackLng || [], code);\n var codes = [];\n\n var addCode = function addCode(c) {\n if (!c) return;\n\n if (_this.isWhitelisted(c)) {\n codes.push(c);\n } else {\n _this.logger.warn(\"rejecting non-whitelisted language code: \".concat(c));\n }\n };\n\n if (typeof code === 'string' && code.indexOf('-') > -1) {\n if (this.options.load !== 'languageOnly') addCode(this.formatLanguageCode(code));\n if (this.options.load !== 'languageOnly' && this.options.load !== 'currentOnly') addCode(this.getScriptPartFromCode(code));\n if (this.options.load !== 'currentOnly') addCode(this.getLanguagePartFromCode(code));\n } else if (typeof code === 'string') {\n addCode(this.formatLanguageCode(code));\n }\n\n fallbackCodes.forEach(function (fc) {\n if (codes.indexOf(fc) < 0) addCode(_this.formatLanguageCode(fc));\n });\n return codes;\n }\n }]);\n\n return LanguageUtil;\n}();\n\n/* eslint-disable */\n\nvar sets = [{\n lngs: ['ach', 'ak', 'am', 'arn', 'br', 'fil', 'gun', 'ln', 'mfe', 'mg', 'mi', 'oc', 'pt', 'pt-BR', 'tg', 'ti', 'tr', 'uz', 'wa'],\n nr: [1, 2],\n fc: 1\n}, {\n lngs: ['af', 'an', 'ast', 'az', 'bg', 'bn', 'ca', 'da', 'de', 'dev', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fi', 'fo', 'fur', 'fy', 'gl', 'gu', 'ha', 'hi', 'hu', 'hy', 'ia', 'it', 'kn', 'ku', 'lb', 'mai', 'ml', 'mn', 'mr', 'nah', 'nap', 'nb', 'ne', 'nl', 'nn', 'no', 'nso', 'pa', 'pap', 'pms', 'ps', 'pt-PT', 'rm', 'sco', 'se', 'si', 'so', 'son', 'sq', 'sv', 'sw', 'ta', 'te', 'tk', 'ur', 'yo'],\n nr: [1, 2],\n fc: 2\n}, {\n lngs: ['ay', 'bo', 'cgg', 'fa', 'id', 'ja', 'jbo', 'ka', 'kk', 'km', 'ko', 'ky', 'lo', 'ms', 'sah', 'su', 'th', 'tt', 'ug', 'vi', 'wo', 'zh'],\n nr: [1],\n fc: 3\n}, {\n lngs: ['be', 'bs', 'cnr', 'dz', 'hr', 'ru', 'sr', 'uk'],\n nr: [1, 2, 5],\n fc: 4\n}, {\n lngs: ['ar'],\n nr: [0, 1, 2, 3, 11, 100],\n fc: 5\n}, {\n lngs: ['cs', 'sk'],\n nr: [1, 2, 5],\n fc: 6\n}, {\n lngs: ['csb', 'pl'],\n nr: [1, 2, 5],\n fc: 7\n}, {\n lngs: ['cy'],\n nr: [1, 2, 3, 8],\n fc: 8\n}, {\n lngs: ['fr'],\n nr: [1, 2],\n fc: 9\n}, {\n lngs: ['ga'],\n nr: [1, 2, 3, 7, 11],\n fc: 10\n}, {\n lngs: ['gd'],\n nr: [1, 2, 3, 20],\n fc: 11\n}, {\n lngs: ['is'],\n nr: [1, 2],\n fc: 12\n}, {\n lngs: ['jv'],\n nr: [0, 1],\n fc: 13\n}, {\n lngs: ['kw'],\n nr: [1, 2, 3, 4],\n fc: 14\n}, {\n lngs: ['lt'],\n nr: [1, 2, 10],\n fc: 15\n}, {\n lngs: ['lv'],\n nr: [1, 2, 0],\n fc: 16\n}, {\n lngs: ['mk'],\n nr: [1, 2],\n fc: 17\n}, {\n lngs: ['mnk'],\n nr: [0, 1, 2],\n fc: 18\n}, {\n lngs: ['mt'],\n nr: [1, 2, 11, 20],\n fc: 19\n}, {\n lngs: ['or'],\n nr: [2, 1],\n fc: 2\n}, {\n lngs: ['ro'],\n nr: [1, 2, 20],\n fc: 20\n}, {\n lngs: ['sl'],\n nr: [5, 1, 2, 3],\n fc: 21\n}, {\n lngs: ['he'],\n nr: [1, 2, 20, 21],\n fc: 22\n}];\nvar _rulesPluralsTypes = {\n 1: function _(n) {\n return Number(n > 1);\n },\n 2: function _(n) {\n return Number(n != 1);\n },\n 3: function _(n) {\n return 0;\n },\n 4: function _(n) {\n return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n },\n 5: function _(n) {\n return Number(n === 0 ? 0 : n == 1 ? 1 : n == 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5);\n },\n 6: function _(n) {\n return Number(n == 1 ? 0 : n >= 2 && n <= 4 ? 1 : 2);\n },\n 7: function _(n) {\n return Number(n == 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n },\n 8: function _(n) {\n return Number(n == 1 ? 0 : n == 2 ? 1 : n != 8 && n != 11 ? 2 : 3);\n },\n 9: function _(n) {\n return Number(n >= 2);\n },\n 10: function _(n) {\n return Number(n == 1 ? 0 : n == 2 ? 1 : n < 7 ? 2 : n < 11 ? 3 : 4);\n },\n 11: function _(n) {\n return Number(n == 1 || n == 11 ? 0 : n == 2 || n == 12 ? 1 : n > 2 && n < 20 ? 2 : 3);\n },\n 12: function _(n) {\n return Number(n % 10 != 1 || n % 100 == 11);\n },\n 13: function _(n) {\n return Number(n !== 0);\n },\n 14: function _(n) {\n return Number(n == 1 ? 0 : n == 2 ? 1 : n == 3 ? 2 : 3);\n },\n 15: function _(n) {\n return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n },\n 16: function _(n) {\n return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n !== 0 ? 1 : 2);\n },\n 17: function _(n) {\n return Number(n == 1 || n % 10 == 1 ? 0 : 1);\n },\n 18: function _(n) {\n return Number(n == 0 ? 0 : n == 1 ? 1 : 2);\n },\n 19: function _(n) {\n return Number(n == 1 ? 0 : n === 0 || n % 100 > 1 && n % 100 < 11 ? 1 : n % 100 > 10 && n % 100 < 20 ? 2 : 3);\n },\n 20: function _(n) {\n return Number(n == 1 ? 0 : n === 0 || n % 100 > 0 && n % 100 < 20 ? 1 : 2);\n },\n 21: function _(n) {\n return Number(n % 100 == 1 ? 1 : n % 100 == 2 ? 2 : n % 100 == 3 || n % 100 == 4 ? 3 : 0);\n },\n 22: function _(n) {\n return Number(n === 1 ? 0 : n === 2 ? 1 : (n < 0 || n > 10) && n % 10 == 0 ? 2 : 3);\n }\n};\n/* eslint-enable */\n\nfunction createRules() {\n var rules = {};\n sets.forEach(function (set) {\n set.lngs.forEach(function (l) {\n rules[l] = {\n numbers: set.nr,\n plurals: _rulesPluralsTypes[set.fc]\n };\n });\n });\n return rules;\n}\n\nvar PluralResolver =\n/*#__PURE__*/\nfunction () {\n function PluralResolver(languageUtils) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, PluralResolver);\n\n this.languageUtils = languageUtils;\n this.options = options;\n this.logger = baseLogger.create('pluralResolver');\n this.rules = createRules();\n }\n\n _createClass(PluralResolver, [{\n key: \"addRule\",\n value: function addRule(lng, obj) {\n this.rules[lng] = obj;\n }\n }, {\n key: \"getRule\",\n value: function getRule(code) {\n return this.rules[code] || this.rules[this.languageUtils.getLanguagePartFromCode(code)];\n }\n }, {\n key: \"needsPlural\",\n value: function needsPlural(code) {\n var rule = this.getRule(code);\n return rule && rule.numbers.length > 1;\n }\n }, {\n key: \"getPluralFormsOfKey\",\n value: function getPluralFormsOfKey(code, key) {\n var _this = this;\n\n var ret = [];\n var rule = this.getRule(code);\n if (!rule) return ret;\n rule.numbers.forEach(function (n) {\n var suffix = _this.getSuffix(code, n);\n\n ret.push(\"\".concat(key).concat(suffix));\n });\n return ret;\n }\n }, {\n key: \"getSuffix\",\n value: function getSuffix(code, count) {\n var _this2 = this;\n\n var rule = this.getRule(code);\n\n if (rule) {\n // if (rule.numbers.length === 1) return ''; // only singular\n var idx = rule.noAbs ? rule.plurals(count) : rule.plurals(Math.abs(count));\n var suffix = rule.numbers[idx]; // special treatment for lngs only having singular and plural\n\n if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n if (suffix === 2) {\n suffix = 'plural';\n } else if (suffix === 1) {\n suffix = '';\n }\n }\n\n var returnSuffix = function returnSuffix() {\n return _this2.options.prepend && suffix.toString() ? _this2.options.prepend + suffix.toString() : suffix.toString();\n }; // COMPATIBILITY JSON\n // v1\n\n\n if (this.options.compatibilityJSON === 'v1') {\n if (suffix === 1) return '';\n if (typeof suffix === 'number') return \"_plural_\".concat(suffix.toString());\n return returnSuffix();\n } else if (\n /* v2 */\n this.options.compatibilityJSON === 'v2') {\n return returnSuffix();\n } else if (\n /* v3 - gettext index */\n this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n return returnSuffix();\n }\n\n return this.options.prepend && idx.toString() ? this.options.prepend + idx.toString() : idx.toString();\n }\n\n this.logger.warn(\"no plural rule found for: \".concat(code));\n return '';\n }\n }]);\n\n return PluralResolver;\n}();\n\nvar Interpolator =\n/*#__PURE__*/\nfunction () {\n function Interpolator() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, Interpolator);\n\n this.logger = baseLogger.create('interpolator');\n this.options = options;\n\n this.format = options.interpolation && options.interpolation.format || function (value) {\n return value;\n };\n\n this.init(options);\n }\n /* eslint no-param-reassign: 0 */\n\n\n _createClass(Interpolator, [{\n key: \"init\",\n value: function init() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (!options.interpolation) options.interpolation = {\n escapeValue: true\n };\n var iOpts = options.interpolation;\n this.escape = iOpts.escape !== undefined ? iOpts.escape : escape;\n this.escapeValue = iOpts.escapeValue !== undefined ? iOpts.escapeValue : true;\n this.useRawValueToEscape = iOpts.useRawValueToEscape !== undefined ? iOpts.useRawValueToEscape : false;\n this.prefix = iOpts.prefix ? regexEscape(iOpts.prefix) : iOpts.prefixEscaped || '{{';\n this.suffix = iOpts.suffix ? regexEscape(iOpts.suffix) : iOpts.suffixEscaped || '}}';\n this.formatSeparator = iOpts.formatSeparator ? iOpts.formatSeparator : iOpts.formatSeparator || ',';\n this.unescapePrefix = iOpts.unescapeSuffix ? '' : iOpts.unescapePrefix || '-';\n this.unescapeSuffix = this.unescapePrefix ? '' : iOpts.unescapeSuffix || '';\n this.nestingPrefix = iOpts.nestingPrefix ? regexEscape(iOpts.nestingPrefix) : iOpts.nestingPrefixEscaped || regexEscape('$t(');\n this.nestingSuffix = iOpts.nestingSuffix ? regexEscape(iOpts.nestingSuffix) : iOpts.nestingSuffixEscaped || regexEscape(')');\n this.maxReplaces = iOpts.maxReplaces ? iOpts.maxReplaces : 1000; // the regexp\n\n this.resetRegExp();\n }\n }, {\n key: \"reset\",\n value: function reset() {\n if (this.options) this.init(this.options);\n }\n }, {\n key: \"resetRegExp\",\n value: function resetRegExp() {\n // the regexp\n var regexpStr = \"\".concat(this.prefix, \"(.+?)\").concat(this.suffix);\n this.regexp = new RegExp(regexpStr, 'g');\n var regexpUnescapeStr = \"\".concat(this.prefix).concat(this.unescapePrefix, \"(.+?)\").concat(this.unescapeSuffix).concat(this.suffix);\n this.regexpUnescape = new RegExp(regexpUnescapeStr, 'g');\n var nestingRegexpStr = \"\".concat(this.nestingPrefix, \"(.+?)\").concat(this.nestingSuffix);\n this.nestingRegexp = new RegExp(nestingRegexpStr, 'g');\n }\n }, {\n key: \"interpolate\",\n value: function interpolate(str, data, lng, options) {\n var _this = this;\n\n var match;\n var value;\n var replaces;\n var defaultData = this.options && this.options.interpolation && this.options.interpolation.defaultVariables || {};\n\n function regexSafe(val) {\n return val.replace(/\\$/g, '$$$$');\n }\n\n var handleFormat = function handleFormat(key) {\n if (key.indexOf(_this.formatSeparator) < 0) {\n return getPathWithDefaults(data, defaultData, key);\n }\n\n var p = key.split(_this.formatSeparator);\n var k = p.shift().trim();\n var f = p.join(_this.formatSeparator).trim();\n return _this.format(getPathWithDefaults(data, defaultData, k), f, lng);\n };\n\n this.resetRegExp();\n var missingInterpolationHandler = options && options.missingInterpolationHandler || this.options.missingInterpolationHandler;\n replaces = 0; // unescape if has unescapePrefix/Suffix\n\n /* eslint no-cond-assign: 0 */\n\n while (match = this.regexpUnescape.exec(str)) {\n value = handleFormat(match[1].trim());\n\n if (value === undefined) {\n if (typeof missingInterpolationHandler === 'function') {\n var temp = missingInterpolationHandler(str, match, options);\n value = typeof temp === 'string' ? temp : '';\n } else {\n this.logger.warn(\"missed to pass in variable \".concat(match[1], \" for interpolating \").concat(str));\n value = '';\n }\n } else if (typeof value !== 'string' && !this.useRawValueToEscape) {\n value = makeString(value);\n }\n\n str = str.replace(match[0], regexSafe(value));\n this.regexpUnescape.lastIndex = 0;\n replaces++;\n\n if (replaces >= this.maxReplaces) {\n break;\n }\n }\n\n replaces = 0; // regular escape on demand\n\n while (match = this.regexp.exec(str)) {\n value = handleFormat(match[1].trim());\n\n if (value === undefined) {\n if (typeof missingInterpolationHandler === 'function') {\n var _temp = missingInterpolationHandler(str, match, options);\n\n value = typeof _temp === 'string' ? _temp : '';\n } else {\n this.logger.warn(\"missed to pass in variable \".concat(match[1], \" for interpolating \").concat(str));\n value = '';\n }\n } else if (typeof value !== 'string' && !this.useRawValueToEscape) {\n value = makeString(value);\n }\n\n value = this.escapeValue ? regexSafe(this.escape(value)) : regexSafe(value);\n str = str.replace(match[0], value);\n this.regexp.lastIndex = 0;\n replaces++;\n\n if (replaces >= this.maxReplaces) {\n break;\n }\n }\n\n return str;\n }\n }, {\n key: \"nest\",\n value: function nest(str, fc) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var match;\n var value;\n\n var clonedOptions = _objectSpread({}, options);\n\n clonedOptions.applyPostProcessor = false; // avoid post processing on nested lookup\n\n delete clonedOptions.defaultValue; // assert we do not get a endless loop on interpolating defaultValue again and again\n // if value is something like \"myKey\": \"lorem $(anotherKey, { \"count\": {{aValueInOptions}} })\"\n\n function handleHasOptions(key, inheritedOptions) {\n if (key.indexOf(',') < 0) return key;\n var p = key.split(',');\n key = p.shift();\n var optionsString = p.join(',');\n optionsString = this.interpolate(optionsString, clonedOptions);\n optionsString = optionsString.replace(/'/g, '\"');\n\n try {\n clonedOptions = JSON.parse(optionsString);\n if (inheritedOptions) clonedOptions = _objectSpread({}, inheritedOptions, clonedOptions);\n } catch (e) {\n this.logger.error(\"failed parsing options string in nesting for key \".concat(key), e);\n } // assert we do not get a endless loop on interpolating defaultValue again and again\n\n\n delete clonedOptions.defaultValue;\n return key;\n } // regular escape on demand\n\n\n while (match = this.nestingRegexp.exec(str)) {\n value = fc(handleHasOptions.call(this, match[1].trim(), clonedOptions), clonedOptions); // is only the nesting key (key1 = '$(key2)') return the value without stringify\n\n if (value && match[0] === str && typeof value !== 'string') return value; // no string to include or empty\n\n if (typeof value !== 'string') value = makeString(value);\n\n if (!value) {\n this.logger.warn(\"missed to resolve \".concat(match[1], \" for nesting \").concat(str));\n value = '';\n } // Nested keys should not be escaped by default #854\n // value = this.escapeValue ? regexSafe(utils.escape(value)) : regexSafe(value);\n\n\n str = str.replace(match[0], value);\n this.regexp.lastIndex = 0;\n }\n\n return str;\n }\n }]);\n\n return Interpolator;\n}();\n\nfunction remove(arr, what) {\n var found = arr.indexOf(what);\n\n while (found !== -1) {\n arr.splice(found, 1);\n found = arr.indexOf(what);\n }\n}\n\nvar Connector =\n/*#__PURE__*/\nfunction (_EventEmitter) {\n _inherits(Connector, _EventEmitter);\n\n function Connector(backend, store, services) {\n var _this;\n\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n _classCallCheck(this, Connector);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(Connector).call(this));\n EventEmitter.call(_assertThisInitialized(_this)); // <=IE10 fix (unable to call parent constructor)\n\n _this.backend = backend;\n _this.store = store;\n _this.services = services;\n _this.languageUtils = services.languageUtils;\n _this.options = options;\n _this.logger = baseLogger.create('backendConnector');\n _this.state = {};\n _this.queue = [];\n\n if (_this.backend && _this.backend.init) {\n _this.backend.init(services, options.backend, options);\n }\n\n return _this;\n }\n\n _createClass(Connector, [{\n key: \"queueLoad\",\n value: function queueLoad(languages, namespaces, options, callback) {\n var _this2 = this;\n\n // find what needs to be loaded\n var toLoad = [];\n var pending = [];\n var toLoadLanguages = [];\n var toLoadNamespaces = [];\n languages.forEach(function (lng) {\n var hasAllNamespaces = true;\n namespaces.forEach(function (ns) {\n var name = \"\".concat(lng, \"|\").concat(ns);\n\n if (!options.reload && _this2.store.hasResourceBundle(lng, ns)) {\n _this2.state[name] = 2; // loaded\n } else if (_this2.state[name] < 0) ; else if (_this2.state[name] === 1) {\n if (pending.indexOf(name) < 0) pending.push(name);\n } else {\n _this2.state[name] = 1; // pending\n\n hasAllNamespaces = false;\n if (pending.indexOf(name) < 0) pending.push(name);\n if (toLoad.indexOf(name) < 0) toLoad.push(name);\n if (toLoadNamespaces.indexOf(ns) < 0) toLoadNamespaces.push(ns);\n }\n });\n if (!hasAllNamespaces) toLoadLanguages.push(lng);\n });\n\n if (toLoad.length || pending.length) {\n this.queue.push({\n pending: pending,\n loaded: {},\n errors: [],\n callback: callback\n });\n }\n\n return {\n toLoad: toLoad,\n pending: pending,\n toLoadLanguages: toLoadLanguages,\n toLoadNamespaces: toLoadNamespaces\n };\n }\n }, {\n key: \"loaded\",\n value: function loaded(name, err, data) {\n var _name$split = name.split('|'),\n _name$split2 = _slicedToArray(_name$split, 2),\n lng = _name$split2[0],\n ns = _name$split2[1];\n\n if (err) this.emit('failedLoading', lng, ns, err);\n\n if (data) {\n this.store.addResourceBundle(lng, ns, data);\n } // set loaded\n\n\n this.state[name] = err ? -1 : 2; // consolidated loading done in this run - only emit once for a loaded namespace\n\n var loaded = {}; // callback if ready\n\n this.queue.forEach(function (q) {\n pushPath(q.loaded, [lng], ns);\n remove(q.pending, name);\n if (err) q.errors.push(err);\n\n if (q.pending.length === 0 && !q.done) {\n // only do once per loaded -> this.emit('loaded', q.loaded);\n Object.keys(q.loaded).forEach(function (l) {\n if (!loaded[l]) loaded[l] = [];\n\n if (q.loaded[l].length) {\n q.loaded[l].forEach(function (ns) {\n if (loaded[l].indexOf(ns) < 0) loaded[l].push(ns);\n });\n }\n });\n /* eslint no-param-reassign: 0 */\n\n q.done = true;\n\n if (q.errors.length) {\n q.callback(q.errors);\n } else {\n q.callback();\n }\n }\n }); // emit consolidated loaded event\n\n this.emit('loaded', loaded); // remove done load requests\n\n this.queue = this.queue.filter(function (q) {\n return !q.done;\n });\n }\n }, {\n key: \"read\",\n value: function read(lng, ns, fcName) {\n var _this3 = this;\n\n var tried = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var wait = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 250;\n var callback = arguments.length > 5 ? arguments[5] : undefined;\n if (!lng.length) return callback(null, {}); // noting to load\n\n return this.backend[fcName](lng, ns, function (err, data) {\n if (err && data\n /* = retryFlag */\n && tried < 5) {\n setTimeout(function () {\n _this3.read.call(_this3, lng, ns, fcName, tried + 1, wait * 2, callback);\n }, wait);\n return;\n }\n\n callback(err, data);\n });\n }\n /* eslint consistent-return: 0 */\n\n }, {\n key: \"prepareLoading\",\n value: function prepareLoading(languages, namespaces) {\n var _this4 = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var callback = arguments.length > 3 ? arguments[3] : undefined;\n\n if (!this.backend) {\n this.logger.warn('No backend was added via i18next.use. Will not load resources.');\n return callback && callback();\n }\n\n if (typeof languages === 'string') languages = this.languageUtils.toResolveHierarchy(languages);\n if (typeof namespaces === 'string') namespaces = [namespaces];\n var toLoad = this.queueLoad(languages, namespaces, options, callback);\n\n if (!toLoad.toLoad.length) {\n if (!toLoad.pending.length) callback(); // nothing to load and no pendings...callback now\n\n return null; // pendings will trigger callback\n }\n\n toLoad.toLoad.forEach(function (name) {\n _this4.loadOne(name);\n });\n }\n }, {\n key: \"load\",\n value: function load(languages, namespaces, callback) {\n this.prepareLoading(languages, namespaces, {}, callback);\n }\n }, {\n key: \"reload\",\n value: function reload(languages, namespaces, callback) {\n this.prepareLoading(languages, namespaces, {\n reload: true\n }, callback);\n }\n }, {\n key: \"loadOne\",\n value: function loadOne(name) {\n var _this5 = this;\n\n var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n var _name$split3 = name.split('|'),\n _name$split4 = _slicedToArray(_name$split3, 2),\n lng = _name$split4[0],\n ns = _name$split4[1];\n\n this.read(lng, ns, 'read', null, null, function (err, data) {\n if (err) _this5.logger.warn(\"\".concat(prefix, \"loading namespace \").concat(ns, \" for language \").concat(lng, \" failed\"), err);\n if (!err && data) _this5.logger.log(\"\".concat(prefix, \"loaded namespace \").concat(ns, \" for language \").concat(lng), data);\n\n _this5.loaded(name, err, data);\n });\n }\n }, {\n key: \"saveMissing\",\n value: function saveMissing(languages, namespace, key, fallbackValue, isUpdate) {\n var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n\n if (this.services.utils && this.services.utils.hasLoadedNamespace && !this.services.utils.hasLoadedNamespace(namespace)) {\n this.logger.warn(\"did not save key \\\"\".concat(key, \"\\\" for namespace \\\"\").concat(namespace, \"\\\" as the namespace was not yet loaded\"), 'This means something IS WRONG in your application setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n return;\n }\n\n if (this.backend && this.backend.create) {\n this.backend.create(languages, namespace, key, fallbackValue, null\n /* unused callback */\n , _objectSpread({}, options, {\n isUpdate: isUpdate\n }));\n } // write to store to avoid resending\n\n\n if (!languages || !languages[0]) return;\n this.store.addResource(languages[0], namespace, key, fallbackValue);\n }\n }]);\n\n return Connector;\n}(EventEmitter);\n\nfunction get() {\n return {\n debug: false,\n initImmediate: true,\n ns: ['translation'],\n defaultNS: ['translation'],\n fallbackLng: ['dev'],\n fallbackNS: false,\n // string or array of namespaces\n whitelist: false,\n // array with whitelisted languages\n nonExplicitWhitelist: false,\n load: 'all',\n // | currentOnly | languageOnly\n preload: false,\n // array with preload languages\n simplifyPluralSuffix: true,\n keySeparator: '.',\n nsSeparator: ':',\n pluralSeparator: '_',\n contextSeparator: '_',\n partialBundledLanguages: false,\n // allow bundling certain languages that are not remotely fetched\n saveMissing: false,\n // enable to send missing values\n updateMissing: false,\n // enable to update default values if different from translated value (only useful on initial development, or when keeping code as source of truth)\n saveMissingTo: 'fallback',\n // 'current' || 'all'\n saveMissingPlurals: true,\n // will save all forms not only singular key\n missingKeyHandler: false,\n // function(lng, ns, key, fallbackValue) -> override if prefer on handling\n missingInterpolationHandler: false,\n // function(str, match)\n postProcess: false,\n // string or array of postProcessor names\n postProcessPassResolved: false,\n // pass resolved object into 'options.i18nResolved' for postprocessor\n returnNull: true,\n // allows null value as valid translation\n returnEmptyString: true,\n // allows empty string value as valid translation\n returnObjects: false,\n joinArrays: false,\n // or string to join array\n returnedObjectHandler: false,\n // function(key, value, options) triggered if key returns object but returnObjects is set to false\n parseMissingKeyHandler: false,\n // function(key) parsed a key that was not found in t() before returning\n appendNamespaceToMissingKey: false,\n appendNamespaceToCIMode: false,\n overloadTranslationOptionHandler: function handle(args) {\n var ret = {};\n if (_typeof(args[1]) === 'object') ret = args[1];\n if (typeof args[1] === 'string') ret.defaultValue = args[1];\n if (typeof args[2] === 'string') ret.tDescription = args[2];\n\n if (_typeof(args[2]) === 'object' || _typeof(args[3]) === 'object') {\n var options = args[3] || args[2];\n Object.keys(options).forEach(function (key) {\n ret[key] = options[key];\n });\n }\n\n return ret;\n },\n interpolation: {\n escapeValue: true,\n format: function format(value, _format, lng) {\n return value;\n },\n prefix: '{{',\n suffix: '}}',\n formatSeparator: ',',\n // prefixEscaped: '{{',\n // suffixEscaped: '}}',\n // unescapeSuffix: '',\n unescapePrefix: '-',\n nestingPrefix: '$t(',\n nestingSuffix: ')',\n // nestingPrefixEscaped: '$t(',\n // nestingSuffixEscaped: ')',\n // defaultVariables: undefined // object that can have values to interpolate on - extends passed in interpolation data\n maxReplaces: 1000 // max replaces to prevent endless loop\n\n }\n };\n}\n/* eslint no-param-reassign: 0 */\n\nfunction transformOptions(options) {\n // create namespace object if namespace is passed in as string\n if (typeof options.ns === 'string') options.ns = [options.ns];\n if (typeof options.fallbackLng === 'string') options.fallbackLng = [options.fallbackLng];\n if (typeof options.fallbackNS === 'string') options.fallbackNS = [options.fallbackNS]; // extend whitelist with cimode\n\n if (options.whitelist && options.whitelist.indexOf('cimode') < 0) {\n options.whitelist = options.whitelist.concat(['cimode']);\n }\n\n return options;\n}\n\nfunction noop() {}\n\nvar I18n =\n/*#__PURE__*/\nfunction (_EventEmitter) {\n _inherits(I18n, _EventEmitter);\n\n function I18n() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var callback = arguments.length > 1 ? arguments[1] : undefined;\n\n _classCallCheck(this, I18n);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(I18n).call(this));\n EventEmitter.call(_assertThisInitialized(_this)); // <=IE10 fix (unable to call parent constructor)\n\n _this.options = transformOptions(options);\n _this.services = {};\n _this.logger = baseLogger;\n _this.modules = {\n external: []\n };\n\n if (callback && !_this.isInitialized && !options.isClone) {\n // https://github.com/i18next/i18next/issues/879\n if (!_this.options.initImmediate) {\n _this.init(options, callback);\n\n return _possibleConstructorReturn(_this, _assertThisInitialized(_this));\n }\n\n setTimeout(function () {\n _this.init(options, callback);\n }, 0);\n }\n\n return _this;\n }\n\n _createClass(I18n, [{\n key: \"init\",\n value: function init() {\n var _this2 = this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var callback = arguments.length > 1 ? arguments[1] : undefined;\n\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n\n this.options = _objectSpread({}, get(), this.options, transformOptions(options));\n this.format = this.options.interpolation.format;\n if (!callback) callback = noop;\n\n function createClassOnDemand(ClassOrObject) {\n if (!ClassOrObject) return null;\n if (typeof ClassOrObject === 'function') return new ClassOrObject();\n return ClassOrObject;\n } // init services\n\n\n if (!this.options.isClone) {\n if (this.modules.logger) {\n baseLogger.init(createClassOnDemand(this.modules.logger), this.options);\n } else {\n baseLogger.init(null, this.options);\n }\n\n var lu = new LanguageUtil(this.options);\n this.store = new ResourceStore(this.options.resources, this.options);\n var s = this.services;\n s.logger = baseLogger;\n s.resourceStore = this.store;\n s.languageUtils = lu;\n s.pluralResolver = new PluralResolver(lu, {\n prepend: this.options.pluralSeparator,\n compatibilityJSON: this.options.compatibilityJSON,\n simplifyPluralSuffix: this.options.simplifyPluralSuffix\n });\n s.interpolator = new Interpolator(this.options);\n s.utils = {\n hasLoadedNamespace: this.hasLoadedNamespace.bind(this)\n };\n s.backendConnector = new Connector(createClassOnDemand(this.modules.backend), s.resourceStore, s, this.options); // pipe events from backendConnector\n\n s.backendConnector.on('*', function (event) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n _this2.emit.apply(_this2, [event].concat(args));\n });\n\n if (this.modules.languageDetector) {\n s.languageDetector = createClassOnDemand(this.modules.languageDetector);\n s.languageDetector.init(s, this.options.detection, this.options);\n }\n\n if (this.modules.i18nFormat) {\n s.i18nFormat = createClassOnDemand(this.modules.i18nFormat);\n if (s.i18nFormat.init) s.i18nFormat.init(this);\n }\n\n this.translator = new Translator(this.services, this.options); // pipe events from translator\n\n this.translator.on('*', function (event) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n _this2.emit.apply(_this2, [event].concat(args));\n });\n this.modules.external.forEach(function (m) {\n if (m.init) m.init(_this2);\n });\n } // append api\n\n\n var storeApi = ['getResource', 'addResource', 'addResources', 'addResourceBundle', 'removeResourceBundle', 'hasResourceBundle', 'getResourceBundle', 'getDataByLanguage'];\n storeApi.forEach(function (fcName) {\n _this2[fcName] = function () {\n var _this2$store;\n\n return (_this2$store = _this2.store)[fcName].apply(_this2$store, arguments);\n };\n });\n var deferred = defer();\n\n var load = function load() {\n _this2.changeLanguage(_this2.options.lng, function (err, t) {\n _this2.isInitialized = true;\n\n _this2.logger.log('initialized', _this2.options);\n\n _this2.emit('initialized', _this2.options);\n\n deferred.resolve(t); // not rejecting on err (as err is only a loading translation failed warning)\n\n callback(err, t);\n });\n };\n\n if (this.options.resources || !this.options.initImmediate) {\n load();\n } else {\n setTimeout(load, 0);\n }\n\n return deferred;\n }\n /* eslint consistent-return: 0 */\n\n }, {\n key: \"loadResources\",\n value: function loadResources() {\n var _this3 = this;\n\n var callback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : noop;\n\n if (!this.options.resources || this.options.partialBundledLanguages) {\n if (this.language && this.language.toLowerCase() === 'cimode') return callback(); // avoid loading resources for cimode\n\n var toLoad = [];\n\n var append = function append(lng) {\n if (!lng) return;\n\n var lngs = _this3.services.languageUtils.toResolveHierarchy(lng);\n\n lngs.forEach(function (l) {\n if (toLoad.indexOf(l) < 0) toLoad.push(l);\n });\n };\n\n if (!this.language) {\n // at least load fallbacks in this case\n var fallbacks = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n fallbacks.forEach(function (l) {\n return append(l);\n });\n } else {\n append(this.language);\n }\n\n if (this.options.preload) {\n this.options.preload.forEach(function (l) {\n return append(l);\n });\n }\n\n this.services.backendConnector.load(toLoad, this.options.ns, callback);\n } else {\n callback(null);\n }\n }\n }, {\n key: \"reloadResources\",\n value: function reloadResources(lngs, ns, callback) {\n var deferred = defer();\n if (!lngs) lngs = this.languages;\n if (!ns) ns = this.options.ns;\n if (!callback) callback = noop;\n this.services.backendConnector.reload(lngs, ns, function (err) {\n deferred.resolve(); // not rejecting on err (as err is only a loading translation failed warning)\n\n callback(err);\n });\n return deferred;\n }\n }, {\n key: \"use\",\n value: function use(module) {\n if (module.type === 'backend') {\n this.modules.backend = module;\n }\n\n if (module.type === 'logger' || module.log && module.warn && module.error) {\n this.modules.logger = module;\n }\n\n if (module.type === 'languageDetector') {\n this.modules.languageDetector = module;\n }\n\n if (module.type === 'i18nFormat') {\n this.modules.i18nFormat = module;\n }\n\n if (module.type === 'postProcessor') {\n postProcessor.addPostProcessor(module);\n }\n\n if (module.type === '3rdParty') {\n this.modules.external.push(module);\n }\n\n return this;\n }\n }, {\n key: \"changeLanguage\",\n value: function changeLanguage(lng, callback) {\n var _this4 = this;\n\n var deferred = defer();\n this.emit('languageChanging', lng);\n\n var done = function done(err, l) {\n _this4.translator.changeLanguage(l);\n\n if (l) {\n _this4.emit('languageChanged', l);\n\n _this4.logger.log('languageChanged', l);\n }\n\n deferred.resolve(function () {\n return _this4.t.apply(_this4, arguments);\n });\n if (callback) callback(err, function () {\n return _this4.t.apply(_this4, arguments);\n });\n };\n\n var setLng = function setLng(l) {\n if (l) {\n _this4.language = l;\n _this4.languages = _this4.services.languageUtils.toResolveHierarchy(l);\n if (!_this4.translator.language) _this4.translator.changeLanguage(l);\n if (_this4.services.languageDetector) _this4.services.languageDetector.cacheUserLanguage(l);\n }\n\n _this4.loadResources(function (err) {\n done(err, l);\n });\n };\n\n if (!lng && this.services.languageDetector && !this.services.languageDetector.async) {\n setLng(this.services.languageDetector.detect());\n } else if (!lng && this.services.languageDetector && this.services.languageDetector.async) {\n this.services.languageDetector.detect(setLng);\n } else {\n setLng(lng);\n }\n\n return deferred;\n }\n }, {\n key: \"getFixedT\",\n value: function getFixedT(lng, ns) {\n var _this5 = this;\n\n var fixedT = function fixedT(key, opts) {\n var options;\n\n if (_typeof(opts) !== 'object') {\n for (var _len3 = arguments.length, rest = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {\n rest[_key3 - 2] = arguments[_key3];\n }\n\n options = _this5.options.overloadTranslationOptionHandler([key, opts].concat(rest));\n } else {\n options = _objectSpread({}, opts);\n }\n\n options.lng = options.lng || fixedT.lng;\n options.lngs = options.lngs || fixedT.lngs;\n options.ns = options.ns || fixedT.ns;\n return _this5.t(key, options);\n };\n\n if (typeof lng === 'string') {\n fixedT.lng = lng;\n } else {\n fixedT.lngs = lng;\n }\n\n fixedT.ns = ns;\n return fixedT;\n }\n }, {\n key: \"t\",\n value: function t() {\n var _this$translator;\n\n return this.translator && (_this$translator = this.translator).translate.apply(_this$translator, arguments);\n }\n }, {\n key: \"exists\",\n value: function exists() {\n var _this$translator2;\n\n return this.translator && (_this$translator2 = this.translator).exists.apply(_this$translator2, arguments);\n }\n }, {\n key: \"setDefaultNamespace\",\n value: function setDefaultNamespace(ns) {\n this.options.defaultNS = ns;\n }\n }, {\n key: \"hasLoadedNamespace\",\n value: function hasLoadedNamespace(ns) {\n var _this6 = this;\n\n if (!this.isInitialized) {\n this.logger.warn('hasLoadedNamespace: i18next was not initialized', this.languages);\n return false;\n }\n\n if (!this.languages || !this.languages.length) {\n this.logger.warn('hasLoadedNamespace: i18n.languages were undefined or empty', this.languages);\n return false;\n }\n\n var lng = this.languages[0];\n var fallbackLng = this.options ? this.options.fallbackLng : false;\n var lastLng = this.languages[this.languages.length - 1]; // we're in cimode so this shall pass\n\n if (lng.toLowerCase() === 'cimode') return true;\n\n var loadNotPending = function loadNotPending(l, n) {\n var loadState = _this6.services.backendConnector.state[\"\".concat(l, \"|\").concat(n)];\n\n return loadState === -1 || loadState === 2;\n }; // loaded -> SUCCESS\n\n\n if (this.hasResourceBundle(lng, ns)) return true; // were not loading at all -> SEMI SUCCESS\n\n if (!this.services.backendConnector.backend) return true; // failed loading ns - but at least fallback is not pending -> SEMI SUCCESS\n\n if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;\n return false;\n }\n }, {\n key: \"loadNamespaces\",\n value: function loadNamespaces(ns, callback) {\n var _this7 = this;\n\n var deferred = defer();\n\n if (!this.options.ns) {\n callback && callback();\n return Promise.resolve();\n }\n\n if (typeof ns === 'string') ns = [ns];\n ns.forEach(function (n) {\n if (_this7.options.ns.indexOf(n) < 0) _this7.options.ns.push(n);\n });\n this.loadResources(function (err) {\n deferred.resolve();\n if (callback) callback(err);\n });\n return deferred;\n }\n }, {\n key: \"loadLanguages\",\n value: function loadLanguages(lngs, callback) {\n var deferred = defer();\n if (typeof lngs === 'string') lngs = [lngs];\n var preloaded = this.options.preload || [];\n var newLngs = lngs.filter(function (lng) {\n return preloaded.indexOf(lng) < 0;\n }); // Exit early if all given languages are already preloaded\n\n if (!newLngs.length) {\n if (callback) callback();\n return Promise.resolve();\n }\n\n this.options.preload = preloaded.concat(newLngs);\n this.loadResources(function (err) {\n deferred.resolve();\n if (callback) callback(err);\n });\n return deferred;\n }\n }, {\n key: \"dir\",\n value: function dir(lng) {\n if (!lng) lng = this.languages && this.languages.length > 0 ? this.languages[0] : this.language;\n if (!lng) return 'rtl';\n var rtlLngs = ['ar', 'shu', 'sqr', 'ssh', 'xaa', 'yhd', 'yud', 'aao', 'abh', 'abv', 'acm', 'acq', 'acw', 'acx', 'acy', 'adf', 'ads', 'aeb', 'aec', 'afb', 'ajp', 'apc', 'apd', 'arb', 'arq', 'ars', 'ary', 'arz', 'auz', 'avl', 'ayh', 'ayl', 'ayn', 'ayp', 'bbz', 'pga', 'he', 'iw', 'ps', 'pbt', 'pbu', 'pst', 'prp', 'prd', 'ur', 'ydd', 'yds', 'yih', 'ji', 'yi', 'hbo', 'men', 'xmn', 'fa', 'jpr', 'peo', 'pes', 'prs', 'dv', 'sam'];\n return rtlLngs.indexOf(this.services.languageUtils.getLanguagePartFromCode(lng)) >= 0 ? 'rtl' : 'ltr';\n }\n /* eslint class-methods-use-this: 0 */\n\n }, {\n key: \"createInstance\",\n value: function createInstance() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var callback = arguments.length > 1 ? arguments[1] : undefined;\n return new I18n(options, callback);\n }\n }, {\n key: \"cloneInstance\",\n value: function cloneInstance() {\n var _this8 = this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n\n var mergedOptions = _objectSpread({}, this.options, options, {\n isClone: true\n });\n\n var clone = new I18n(mergedOptions);\n var membersToCopy = ['store', 'services', 'language'];\n membersToCopy.forEach(function (m) {\n clone[m] = _this8[m];\n });\n clone.translator = new Translator(clone.services, clone.options);\n clone.translator.on('*', function (event) {\n for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n clone.emit.apply(clone, [event].concat(args));\n });\n clone.init(mergedOptions, callback);\n clone.translator.options = clone.options; // sync options\n\n return clone;\n }\n }]);\n\n return I18n;\n}(EventEmitter);\n\nvar i18next = new I18n();\n\nexport default i18next;\n","import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';\nimport _classCallCheck from '@babel/runtime/helpers/esm/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/esm/createClass';\n\nfunction debounce(func, wait, immediate) {\n var timeout;\n return function () {\n var context = this,\n args = arguments;\n\n var later = function later() {\n timeout = null;\n if (!immediate) func.apply(context, args);\n };\n\n var callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) func.apply(context, args);\n };\n}\n\nfunction getLastOfPath(object, path, Empty) {\n function cleanKey(key) {\n return key && key.indexOf('###') > -1 ? key.replace(/###/g, '.') : key;\n }\n\n var stack = typeof path !== 'string' ? [].concat(path) : path.split('.');\n\n while (stack.length > 1) {\n if (!object) return {};\n var key = cleanKey(stack.shift());\n if (!object[key] && Empty) object[key] = new Empty();\n object = object[key];\n }\n\n if (!object) return {};\n return {\n obj: object,\n k: cleanKey(stack.shift())\n };\n}\n\nfunction setPath(object, path, newValue) {\n var _getLastOfPath = getLastOfPath(object, path, Object),\n obj = _getLastOfPath.obj,\n k = _getLastOfPath.k;\n\n obj[k] = newValue;\n}\nfunction pushPath(object, path, newValue, concat) {\n var _getLastOfPath2 = getLastOfPath(object, path, Object),\n obj = _getLastOfPath2.obj,\n k = _getLastOfPath2.k;\n\n obj[k] = obj[k] || [];\n if (concat) obj[k] = obj[k].concat(newValue);\n if (!concat) obj[k].push(newValue);\n}\nfunction getPath(object, path) {\n var _getLastOfPath3 = getLastOfPath(object, path),\n obj = _getLastOfPath3.obj,\n k = _getLastOfPath3.k;\n\n if (!obj) return undefined;\n return obj[k];\n}\nvar regexp = new RegExp('\\{\\{(.+?)\\}\\}', 'g');\n\nfunction makeString(object) {\n if (object == null) return '';\n return '' + object;\n}\n\nfunction interpolate(str, data, lng) {\n var match, value;\n\n function regexSafe(val) {\n return val.replace(/\\$/g, '$$$$');\n } // regular escape on demand\n\n\n while (match = regexp.exec(str)) {\n value = match[1].trim();\n if (typeof value !== 'string') value = makeString(value);\n if (!value) value = '';\n value = regexSafe(value);\n str = str.replace(match[0], data[value] || value);\n regexp.lastIndex = 0;\n }\n\n return str;\n}\nfunction isMissingOption(obj, props) {\n return props.reduce(function (mem, p) {\n if (mem) return mem;\n\n if (!obj || !obj[p] || typeof obj[p] !== 'string' || !obj[p].toLowerCase() === p.toLowerCase()) {\n var err = \"i18next-locize-backend :: got \\\"\".concat(obj[p], \"\\\" in options for \").concat(p, \" which is invalid.\");\n console.warn(err);\n return err;\n }\n\n return false;\n }, false);\n}\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction ajax(url, options, callback, data, cache) {\n try {\n var x = new (XMLHttpRequest || ActiveXObject)('MSXML2.XMLHTTP.3.0');\n x.open(data ? 'POST' : 'GET', url, 1);\n\n if (!options.crossDomain) {\n x.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n }\n\n if (options.authorize && options.apiKey) {\n x.setRequestHeader('Authorization', options.apiKey);\n }\n\n if (data || options.setContentTypeJSON) {\n x.setRequestHeader('Content-type', 'application/json');\n }\n\n x.onreadystatechange = function () {\n x.readyState > 3 && callback && callback(x.responseText, x);\n };\n\n x.send(JSON.stringify(data));\n } catch (e) {\n typeof window !== 'undefined' && window.console && console.log(e);\n }\n}\n\nfunction getDefaults() {\n return {\n loadPath: 'https://api.locize.io/{{projectId}}/{{version}}/{{lng}}/{{ns}}',\n privatePath: 'https://api.locize.io/private/{{projectId}}/{{version}}/{{lng}}/{{ns}}',\n pullPath: 'https://api.locize.io/pull/{{projectId}}/{{version}}/{{lng}}/{{ns}}',\n getLanguagesPath: 'https://api.locize.io/languages/{{projectId}}',\n addPath: 'https://api.locize.io/missing/{{projectId}}/{{version}}/{{lng}}/{{ns}}',\n updatePath: 'https://api.locize.io/update/{{projectId}}/{{version}}/{{lng}}/{{ns}}',\n referenceLng: 'en',\n crossDomain: true,\n setContentTypeJSON: false,\n version: 'latest',\n pull: false,\n \"private\": false,\n whitelistThreshold: 0.9,\n failLoadingOnEmptyJSON: false,\n // useful if using chained backend\n allowedAddOrUpdateHosts: ['localhost'],\n onSaved: false\n };\n}\n\nvar I18NextLocizeBackend =\n/*#__PURE__*/\nfunction () {\n function I18NextLocizeBackend(services, options, callback) {\n _classCallCheck(this, I18NextLocizeBackend);\n\n if (services && services.projectId) {\n this.init(null, services, {}, options);\n } else {\n this.init(null, options, {}, callback);\n }\n\n this.type = 'backend';\n }\n\n _createClass(I18NextLocizeBackend, [{\n key: \"init\",\n value: function init(services) {\n var _this = this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var i18nextOptions = arguments.length > 2 ? arguments[2] : undefined;\n var callback = arguments.length > 3 ? arguments[3] : undefined;\n this.options = _objectSpread({}, getDefaults(), {}, this.options, {}, options); // initial\n\n this.services = services;\n if (this.options.pull) console.warn('deprecated: pull will be removed in future versions and should be replaced with locize private versions');\n var hostname = typeof window !== 'undefined' && window.location && window.location.hostname;\n\n if (hostname) {\n this.isAddOrUpdateAllowed = typeof this.options.allowedAddOrUpdateHosts === 'function' ? this.options.allowedAddOrUpdateHosts(hostname) : this.options.allowedAddOrUpdateHosts.indexOf(hostname) > -1;\n if (i18nextOptions.saveMissing && !this.isAddOrUpdateAllowed) services && services.logger && services.logger.warn(\"locize-backend: will not save missings because the host \\\"\".concat(hostname, \"\\\" was not in the list of allowedAddOrUpdateHosts: \").concat(this.options.allowedAddOrUpdateHosts.join(', '), \" (matches need to be exact).\"));\n } else {\n this.isAddOrUpdateAllowed = true;\n }\n\n if (typeof callback === 'function') {\n this.getOptions(function (err, opts) {\n if (err) return callback(err);\n _this.options.referenceLng = options.referenceLng || opts.referenceLng || _this.options.referenceLng;\n callback(null, opts);\n });\n }\n\n this.queuedWrites = {};\n this.debouncedProcess = debounce(this.process, 10000);\n }\n }, {\n key: \"getLanguages\",\n value: function getLanguages(callback) {\n var isMissing = isMissingOption(this.options, ['projectId']);\n if (isMissing) return callback(new Error(isMissing));\n var url = interpolate(this.options.getLanguagesPath, {\n projectId: this.options.projectId\n });\n this.loadUrl(url, {}, callback);\n }\n }, {\n key: \"getOptions\",\n value: function getOptions(callback) {\n var _this2 = this;\n\n this.getLanguages(function (err, data) {\n if (err) return callback(err);\n var keys = Object.keys(data);\n if (!keys.length) return callback(new Error('was unable to load languages via API'));\n var referenceLng = keys.reduce(function (mem, k) {\n var item = data[k];\n if (item.isReferenceLanguage) mem = k;\n return mem;\n }, '');\n var whitelist = keys.reduce(function (mem, k) {\n var item = data[k];\n if (item.translated[_this2.options.version] && item.translated[_this2.options.version] >= _this2.options.whitelistThreshold) mem.push(k);\n return mem;\n }, []);\n var hasRegion = keys.reduce(function (mem, k) {\n if (k.indexOf('-') > -1) return true;\n return mem;\n }, false);\n callback(null, {\n fallbackLng: referenceLng,\n referenceLng: referenceLng,\n whitelist: whitelist,\n load: hasRegion ? 'all' : 'languageOnly'\n });\n });\n }\n }, {\n key: \"read\",\n value: function read(language, namespace, callback) {\n var url;\n var options = {};\n\n if (this.options[\"private\"]) {\n var isMissing = isMissingOption(this.options, ['projectId', 'version', 'apiKey']);\n if (isMissing) return callback(new Error(isMissing), false);\n url = interpolate(this.options.privatePath, {\n lng: language,\n ns: namespace,\n projectId: this.options.projectId,\n version: this.options.version\n });\n options = {\n authorize: true\n };\n } else if (this.options.pull) {\n var _isMissing = isMissingOption(this.options, ['projectId', 'version', 'apiKey']);\n\n if (_isMissing) return callback(new Error(_isMissing), false);\n url = interpolate(this.options.pullPath, {\n lng: language,\n ns: namespace,\n projectId: this.options.projectId,\n version: this.options.version\n });\n options = {\n authorize: true\n };\n } else {\n var _isMissing2 = isMissingOption(this.options, ['projectId', 'version']);\n\n if (_isMissing2) return callback(new Error(_isMissing2), false);\n url = interpolate(this.options.loadPath, {\n lng: language,\n ns: namespace,\n projectId: this.options.projectId,\n version: this.options.version\n });\n }\n\n this.loadUrl(url, options, callback);\n }\n }, {\n key: \"loadUrl\",\n value: function loadUrl(url, options, callback) {\n var _this3 = this;\n\n ajax(url, _objectSpread({}, this.options, {}, options), function (data, xhr) {\n if (xhr.status >= 500 && xhr.status < 600) return callback('failed loading ' + url, true\n /* retry */\n );\n if (xhr.status >= 400 && xhr.status < 500) return callback('failed loading ' + url, false\n /* no retry */\n );\n var ret, err;\n\n try {\n ret = JSON.parse(data);\n } catch (e) {\n err = 'failed parsing ' + url + ' to json';\n }\n\n if (err) return callback(err, false);\n if (_this3.options.failLoadingOnEmptyJSON && !Object.keys(ret).length) return callback('loaded result empty for ' + url, false);\n callback(null, ret);\n });\n }\n }, {\n key: \"create\",\n value: function create(languages, namespace, key, fallbackValue, callback, options) {\n var _this4 = this;\n\n if (!callback) callback = function callback() {}; // missing options\n\n var isMissing = isMissingOption(this.options, ['projectId', 'version', 'apiKey', 'referenceLng']);\n if (isMissing) return callback(new Error(isMissing)); // unallowed host\n\n if (!this.isAddOrUpdateAllowed) return callback('host is not allowed to create key.');\n if (typeof languages === 'string') languages = [languages];\n\n if (languages.filter(function (l) {\n return l === _this4.options.referenceLng;\n }).length < 1) {\n this.services && this.services.logger && this.services.logger.warn(\"locize-backend: will not save missings because the reference language \\\"\".concat(this.options.referenceLng, \"\\\" was not in the list of to save languages: \").concat(languages.join(', '), \" (open your site in the reference language to save missings).\"));\n }\n\n languages.forEach(function (lng) {\n if (lng === _this4.options.referenceLng) _this4.queue.call(_this4, _this4.options.referenceLng, namespace, key, fallbackValue, callback, options);\n });\n }\n }, {\n key: \"update\",\n value: function update(languages, namespace, key, fallbackValue, callback, options) {\n var _this5 = this;\n\n if (!callback) callback = function callback() {}; // missing options\n\n var isMissing = isMissingOption(this.options, ['projectId', 'version', 'apiKey', 'referenceLng']);\n if (isMissing) return callback(new Error(isMissing));\n if (!this.isAddOrUpdateAllowed) return callback('host is not allowed to update key.');\n if (!options) options = {};\n if (typeof languages === 'string') languages = [languages]; // mark as update\n\n options.isUpdate = true;\n languages.forEach(function (lng) {\n if (lng === _this5.options.referenceLng) _this5.queue.call(_this5, _this5.options.referenceLng, namespace, key, fallbackValue, callback, options);\n });\n }\n }, {\n key: \"write\",\n value: function write(lng, namespace) {\n var _this6 = this;\n\n var lock = getPath(this.queuedWrites, ['locks', lng, namespace]);\n if (lock) return;\n var missingUrl = interpolate(this.options.addPath, {\n lng: lng,\n ns: namespace,\n projectId: this.options.projectId,\n version: this.options.version\n });\n var updatesUrl = interpolate(this.options.updatePath, {\n lng: lng,\n ns: namespace,\n projectId: this.options.projectId,\n version: this.options.version\n });\n var missings = getPath(this.queuedWrites, [lng, namespace]);\n setPath(this.queuedWrites, [lng, namespace], []);\n\n if (missings.length) {\n // lock\n setPath(this.queuedWrites, ['locks', lng, namespace], true);\n var hasMissing = false;\n var hasUpdates = false;\n var payloadMissing = {};\n var payloadUpdate = {};\n missings.forEach(function (item) {\n var value = item.options && item.options.tDescription ? {\n value: item.fallbackValue || '',\n context: {\n text: item.options.tDescription\n }\n } : item.fallbackValue || '';\n\n if (item.options && item.options.isUpdate) {\n if (!hasUpdates) hasUpdates = true;\n payloadUpdate[item.key] = value;\n } else {\n if (!hasMissing) hasMissing = true;\n payloadMissing[item.key] = value;\n }\n });\n var todo = 0;\n if (hasMissing) todo++;\n if (hasUpdates) todo++;\n\n var doneOne = function doneOne() {\n todo--;\n\n if (!todo) {\n // unlock\n setPath(_this6.queuedWrites, ['locks', lng, namespace], false);\n missings.forEach(function (missing) {\n if (missing.callback) missing.callback();\n }); // emit notification onSaved\n\n if (_this6.options.onSaved) _this6.options.onSaved(lng, namespace); // rerun\n\n _this6.debouncedProcess(lng, namespace);\n }\n };\n\n if (!todo) doneOne();\n\n if (hasMissing) {\n ajax(missingUrl, _objectSpread({}, {\n authorize: true\n }, {}, this.options), function (data, xhr) {\n //const statusCode = xhr.status.toString();\n // TODO: if statusCode === 4xx do log\n doneOne();\n }, payloadMissing);\n }\n\n if (hasUpdates) {\n ajax(updatesUrl, _objectSpread({}, {\n authorize: true\n }, {}, this.options), function (data, xhr) {\n //const statusCode = xhr.status.toString();\n // TODO: if statusCode === 4xx do log\n doneOne();\n }, payloadUpdate);\n }\n }\n }\n }, {\n key: \"process\",\n value: function process() {\n var _this7 = this;\n\n Object.keys(this.queuedWrites).forEach(function (lng) {\n if (lng === 'locks') return;\n Object.keys(_this7.queuedWrites[lng]).forEach(function (ns) {\n var todo = _this7.queuedWrites[lng][ns];\n\n if (todo.length) {\n _this7.write(lng, ns);\n }\n });\n });\n }\n }, {\n key: \"queue\",\n value: function queue(lng, namespace, key, fallbackValue, callback, options) {\n pushPath(this.queuedWrites, [lng, namespace], {\n key: key,\n fallbackValue: fallbackValue || '',\n callback: callback,\n options: options\n });\n this.debouncedProcess();\n }\n }]);\n\n return I18NextLocizeBackend;\n}();\n\nI18NextLocizeBackend.type = 'backend';\n\nexport default I18NextLocizeBackend;\n","export function debounce(func, wait, immediate) {\n\tvar timeout;\n\treturn function () {\n\t\tvar context = this,\n\t\t args = arguments;\n\t\tvar later = function later() {\n\t\t\ttimeout = null;\n\t\t\tif (!immediate) func.apply(context, args);\n\t\t};\n\t\tvar callNow = immediate && !timeout;\n\t\tclearTimeout(timeout);\n\t\ttimeout = setTimeout(later, wait);\n\t\tif (callNow) func.apply(context, args);\n\t};\n};\n\nexport function replaceIn(str, arr, options) {\n\tvar ret = str;\n\tarr.forEach(function (s) {\n\t\tvar regexp = new RegExp('{{' + s + '}}', 'g');\n\t\tret = ret.replace(regexp, options[s]);\n\t});\n\n\treturn ret;\n}\n\nexport function isMissingOption(obj, props) {\n\treturn props.reduce(function (mem, p) {\n\t\tif (mem) return mem;\n\t\tif (!obj || !obj[p] || typeof obj[p] !== 'string' || !obj[p].toLowerCase() === p.toLowerCase()) {\n\t\t\tvar err = 'i18next-lastused :: got \"' + obj[p] + '\" in options for ' + p + ' which is invalid.';\n\t\t\tconsole.warn(err);\n\t\t\treturn err;\n\t\t}\n\t\treturn false;\n\t}, false);\n}\n\nexport function optionExist(obj, props) {\n\treturn !isMissingOption(obj, props);\n}","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nimport * as utils from './utils';\n\n// https://gist.github.com/Xeoncross/7663273\nfunction ajax(url, options, callback, data, cache) {\n try {\n var x = new (XMLHttpRequest || ActiveXObject)('MSXML2.XMLHTTP.3.0');\n x.open(data ? 'POST' : 'GET', url, 1);\n if (!options.crossDomain) {\n x.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n }\n if (options.authorize && options.apiKey) {\n x.setRequestHeader('Authorization', options.apiKey);\n }\n if (data || options.setContentTypeJSON) {\n x.setRequestHeader('Content-type', 'application/json');\n }\n x.onreadystatechange = function () {\n x.readyState > 3 && callback && callback(x.responseText, x);\n };\n x.send(JSON.stringify(data));\n } catch (e) {\n window.console && window.console.log(e);\n }\n};\n\nfunction getDefaults() {\n return {\n lastUsedPath: 'https://api.locize.io/used/{{projectId}}/{{version}}/{{lng}}/{{ns}}',\n referenceLng: 'en',\n crossDomain: true,\n setContentTypeJSON: false,\n version: 'latest',\n debounceSubmit: 90000,\n allowedHosts: ['localhost']\n };\n}\n\nvar locizeLastUsed = {\n init: function init(options) {\n var isI18next = options.t && typeof options.t === 'function';\n\n this.options = isI18next ? _extends({}, getDefaults(), this.options, options.options.locizeLastUsed) : _extends({}, getDefaults(), this.options, options);\n\n var hostname = window.location && window.location.hostname;\n if (hostname) {\n this.isAllowed = this.options.allowedHosts.indexOf(hostname) > -1;\n } else {\n this.isAllowed = true;\n }\n\n this.submitting = null;\n this.pending = {};\n this.done = {};\n\n this.submit = utils.debounce(this.submit, this.options.debounceSubmit);\n\n // intercept\n if (isI18next) this.interceptI18next(options);\n },\n\n interceptI18next: function interceptI18next(i18next) {\n var _this = this;\n\n var origGetResource = i18next.services.resourceStore.getResource;\n\n i18next.services.resourceStore.getResource = function (lng, ns, key, options) {\n // call last used\n if (key) _this.used(ns, key);\n\n // by pass orginal call\n return origGetResource.call(i18next.services.resourceStore, lng, ns, key, options);\n };\n },\n\n used: function used(ns, key) {\n var _this2 = this;\n\n ['pending', 'done'].forEach(function (k) {\n if (_this2.done[ns] && _this2.done[ns][key]) return;\n if (!_this2[k][ns]) _this2[k][ns] = {};\n _this2[k][ns][key] = true;\n });\n\n this.submit();\n },\n\n submit: function submit() {\n var _this3 = this;\n\n if (!this.isAllowed) return;\n if (this.submitting) return this.submit();\n\n // missing options\n var isMissing = utils.isMissingOption(this.options, ['projectId', 'version', 'apiKey', 'referenceLng']);\n if (isMissing) return callback(new Error(isMissing));\n\n this.submitting = this.pending;\n this.pending = {};\n\n var namespaces = Object.keys(this.submitting);\n\n var todo = namespaces.length;\n var doneOne = function doneOne() {\n todo--;\n\n if (!todo) {\n _this3.submitting = null;\n }\n };\n namespaces.forEach(function (ns) {\n var keys = Object.keys(_this3.submitting[ns]);\n var url = utils.replaceIn(_this3.options.lastUsedPath, ['projectId', 'version', 'lng', 'ns'], _extends({}, _this3.options, { lng: _this3.options.referenceLng, ns: ns }));\n\n if (keys.length) {\n ajax(url, _extends({ authorize: true }, _this3.options), function (data, xhr) {\n doneOne();\n }, keys);\n } else {\n doneOne();\n }\n });\n }\n};\n\nlocizeLastUsed.type = '3rdParty';\n\nexport default locizeLastUsed;","import _objectSpread from '@babel/runtime/helpers/esm/objectSpread';\nimport _typeof from '@babel/runtime/helpers/esm/typeof';\n\nfunction isWindow(obj) {\n return obj != null && obj === obj.window;\n}\nfunction getWindow(elem) {\n return isWindow(elem) ? elem : elem.nodeType === 9 && elem.defaultView;\n}\nfunction offset(elem) {\n var docElem,\n win,\n box = {\n top: 0,\n left: 0,\n right: 0,\n bottom: 0\n },\n doc = elem && elem.ownerDocument;\n docElem = doc && doc.documentElement;\n if (!docElem) return box;\n\n if (_typeof(elem.getBoundingClientRect) !== (\"undefined\")) {\n box = elem.getBoundingClientRect();\n }\n\n win = getWindow(doc);\n var top = box.top + win.pageYOffset - docElem.clientTop;\n var left = box.left + win.pageXOffset - docElem.clientLeft;\n return {\n top: top,\n left: left,\n right: left + (box.right - box.left),\n bottom: top + (box.bottom - box.top)\n };\n}\nfunction getClickedElement(e) {\n // clicked input\n if (e.srcElement && e.srcElement.nodeType === 1) {\n if (e.srcElement.getAttribute && e.srcElement.getAttribute('ignorelocizeeditor') === '') return null;\n return e.srcElement;\n }\n\n var el;\n\n if (e.originalEvent && e.originalEvent.explicitOriginalTarget) {\n el = e.originalEvent.explicitOriginalTarget;\n } else {\n var parent = e.srcElement;\n if (parent.getAttribute && parent.getAttribute('ignorelocizeeditor') === '') return null;\n var left = e.pageX;\n var top = e.pageY;\n var pOffset = offset(parent); // console.warn('click', top, left);\n // console.warn('parent', parent, pOffset, parent.clientHeight, parent.offsetHeight);\n\n var topStartsAt = 0;\n var topBreaksAt;\n\n for (var i = 0; i < parent.childNodes.length; i++) {\n var n = parent.childNodes[i];\n var nOffset = offset(n); // console.warn('child', n, nOffset, n.clientHeight, n.offsetHeight)\n // if a node is with the bottom over the top click set the next child as start index\n\n if (n.nodeType === 1 && nOffset.bottom < top) topStartsAt = i + 1; // if node is below top click set end index to this node\n\n if (!topBreaksAt && nOffset.top + (n.clientHeight || 0) > top) topBreaksAt = i;\n } // check we are inside children lenght\n\n\n if (topStartsAt + 1 > parent.childNodes.length) topStartsAt = parent.childNodes.length - 1;\n if (!topBreaksAt) topBreaksAt = parent.childNodes.length; // console.warn('bound', topStartsAt, topBreaksAt)\n // inside our boundaries check when left is to big and out of clicks left\n\n for (var y = topStartsAt; y < topBreaksAt; y++) {\n var _n = parent.childNodes[y];\n\n var _nOffset = offset(_n);\n\n if (_nOffset.left > left) {\n break;\n }\n\n if (_n && _n.nodeType !== 8) el = _n;\n }\n }\n\n return el;\n}\nfunction removeNamespace(str, i18next) {\n var res = str;\n var nsSeparator = i18next.options.nsSeparator !== undefined ? i18next.options.nsSeparator : ':';\n\n if (str.indexOf(nsSeparator) > -1) {\n var p = str.split(nsSeparator);\n p.shift();\n res = p.join(nsSeparator);\n }\n\n return res;\n}\nfunction getElementNamespace(str, el, i18next) {\n var namespace = i18next.options.defaultNS;\n var nsSeparator = i18next.options.nsSeparator || ':';\n\n if (str.indexOf(nsSeparator) > -1) {\n namespace = str.split(nsSeparator)[0];\n } else {\n var found;\n\n var find = function find(el) {\n var opts = el.getAttribute && el.getAttribute('i18next-options');\n if (!opts) opts = el.getAttribute && el.getAttribute('data-i18next-options');\n if (!opts) opts = el.getAttribute && el.getAttribute('i18n-options');\n if (!opts) opts = el.getAttribute && el.getAttribute('data-i18n-options');\n\n if (opts) {\n var jsonData = {};\n\n try {\n jsonData = JSON.parse(opts);\n } catch (e) {// not our problem here in editor\n }\n\n if (jsonData.ns) found = jsonData.ns;\n }\n\n if (!found) found = el.getAttribute && el.getAttribute('i18next-ns');\n if (!found) found = el.getAttribute && el.getAttribute('data-i18next-ns');\n if (!found) found = el.getAttribute && el.getAttribute('i18n-ns');\n if (!found) found = el.getAttribute && el.getAttribute('data-i18n-ns');\n if (!found && el.parentElement) find(el.parentElement);\n };\n\n find(el);\n if (found) namespace = found;\n }\n\n return namespace;\n}\nfunction getQueryVariable(variable) {\n var query = window.location.search.substring(1);\n var vars = query.split('&');\n\n for (var i = 0; i < vars.length; i++) {\n var pair = vars[i].split('=');\n\n if (pair[0] == variable) {\n return pair[1];\n }\n }\n\n return false;\n}\n\nvar baseBtn = 'font-family: \"Helvetica\", \"Arial\", sans-serif; font-size: 14px; color: #fff; border: none; font-weight: 300; height: 30px; line-height: 30px; padding: 0; text-align: center; min-width: 90px; text-decoration: none; text-transform: uppercase; text-overflow: ellipsis; white-space: nowrap; outline: none; cursor: pointer;';\nfunction initUI(on, off, options) {\n var cont = document.createElement(\"div\");\n cont.setAttribute('style', 'z-index: 2147483647; font-family: \"Helvetica\", \"Arial\", sans-serif; position: fixed; bottom: 20px; right: 20px; padding: 10px; background-color: #fff; border: solid 1px #1976d2; box-shadow: 0px 1px 2px 0px rgba(0,0,0,0.5);');\n cont.setAttribute('ignorelocizeeditor', '');\n cont.setAttribute('translated', '');\n var title = document.createElement(\"h4\");\n title.id = \"locize-title\";\n title.innerHTML = \"locize editor\";\n title.setAttribute('style', 'font-family: \"Helvetica\", \"Arial\", sans-serif; font-size: 14px; margin: 0 0 5px 0; color: #1976d2; font-weight: 300;');\n title.setAttribute('ignorelocizeeditor', '');\n cont.appendChild(title);\n var turnOff = document.createElement(\"button\");\n turnOff.innerHTML = \"On\";\n turnOff.setAttribute('style', \"\".concat(baseBtn, \" display: none; background-color: #54A229;\"));\n turnOff.onclick = off;\n turnOff.setAttribute('ignorelocizeeditor', '');\n cont.appendChild(turnOff);\n var turnOn = document.createElement(\"button\");\n turnOn.innerHTML = \"Off\";\n turnOn.setAttribute('style', \"\".concat(baseBtn, \" display: none; background-color: #D50000;\"));\n turnOn.onclick = on;\n turnOn.setAttribute('ignorelocizeeditor', '');\n cont.appendChild(turnOn);\n document.body.appendChild(cont);\n\n var toggle = function toggle(on) {\n turnOff.style.display = on ? 'block' : 'none';\n turnOn.style.display = !on ? 'block' : 'none';\n };\n\n return toggle;\n}\nfunction appendIframe(url, options) {\n var cont = document.createElement(\"div\");\n cont.setAttribute('style', options.iframeContainerStyle);\n cont.setAttribute('ignorelocizeeditor', '');\n cont.setAttribute('translated', '');\n var iframe = document.createElement(\"iframe\");\n iframe.setAttribute('style', options.iframeStyle);\n iframe.setAttribute('ignorelocizeeditor', '');\n iframe.setAttribute('translated', '');\n iframe.setAttribute('src', url);\n cont.appendChild(iframe);\n document.body.appendChild(cont);\n var bodyStyle = document.body.getAttribute('style');\n document.body.setAttribute('style', \"\".concat(bodyStyle, \"; \").concat(options.bodyStyle));\n return iframe.contentWindow;\n}\n\nvar defaultOptions = {\n url: 'https://www.locize.io',\n openDashboard: false,\n enabled: false,\n enableByQS: 'locize',\n toggleKeyCode: 24,\n toggleKeyModifier: 'ctrlKey',\n lngOverrideQS: 'useLng',\n lngOverride: null,\n hasNamespacePrefixed: false,\n autoOpen: true,\n onEditorSaved: function onEditorSaved(lng, ns) {},\n mode: getQueryVariable('locizeMode') || 'iframe',\n iframeContainerStyle: 'z-index: 2147480000; position: fixed; top: 0; right: 0; bottom: 0; width: 600px; box-shadow: -3px 0 5px 0 rgba(0,0,0,0.5);',\n iframeStyle: 'height: 100%; width: 600px; border: none;',\n bodyStyle: 'margin-right: 605px;'\n};\n\nfunction convertOptionsToI18next(opts) {\n return {\n languages: [opts.lng],\n nsSeparator: opts.nsSeparator || ':',\n options: {\n editor: opts,\n backend: opts,\n defaultNS: opts.defaultNS\n }\n };\n}\n\nvar editor = {\n type: '3rdParty',\n init: function init(i18next) {\n var _this = this;\n\n // convert standalone options\n if (i18next && !i18next.init) i18next = convertOptionsToI18next(i18next);\n this.enabled = false;\n this.i18next = i18next;\n this.options = _objectSpread({}, defaultOptions, i18next.options.editor); //this.locizeUrl = (i18next.options.editor && i18next.options.editor.url) || 'https://www.locize.io';\n\n this.handler = this.handler.bind(this);\n this.handleSavedMissing = this.handleSavedMissing.bind(this);\n\n if (this.options.enabled || this.options.enableByQS && getQueryVariable(this.options.enableByQS) === 'true') {\n setTimeout(function () {\n if (_this.options.autoOpen) _this.open();\n }, 500);\n }\n\n document.addEventListener('keypress', function (e) {\n if (e[_this.options.toggleKeyModifier] && e.which === _this.options.toggleKeyCode) _this.enabled ? _this.off() : _this.on();\n }); // listen to key press on locize service to disable\n\n window.addEventListener('message', function (e) {\n if (e.data[_this.options.toggleKeyModifier] && e.data.which === _this.options.toggleKeyCode) _this.enabled ? _this.off() : _this.on();\n\n if (e.data.type === 'savedSegments') {\n _this.options.onEditorSaved(e.data.lng, e.data.ns);\n }\n });\n },\n handler: function handler(e) {\n var _this2 = this;\n\n var el = getClickedElement(e);\n if (!el) return;\n e.preventDefault();\n e.stopPropagation();\n var str = el.textContent || el.text && el.text.innerText || el.placeholder;\n if (typeof str !== 'string') return;\n var res = str.replace(/\\n +/g, '').trim();\n\n var send = function send() {\n // consume\n // window.addEventListener('message', function(ev) {\n // if (ev.data.message === 'searchForKey') {\n // console.warn(ev.data);\n // }\n // });\n var payload = {\n message: 'searchForKey',\n projectId: _this2.i18next.options.backend.projectId,\n version: _this2.i18next.options.backend.version || 'latest',\n lng: getQueryVariable(_this2.options.lngOverrideQS) || _this2.options.lngOverride || _this2.i18next.languages[0],\n ns: getElementNamespace(res, el, _this2.i18next),\n token: _this2.options.hasNamespacePrefixed ? removeNamespace(res, _this2.i18next) : res\n };\n if (!payload.lng || payload.lng.toLowerCase() === 'cimode') payload.lng = _this2.i18next.options.backend.referenceLng;\n if (_this2.options.handler) return _this2.options.handler(payload);\n\n _this2.locizeInstance.postMessage(payload, _this2.options.url);\n\n _this2.locizeInstance.focus();\n }; // assert the locizeInstance is still open\n\n\n if (this.options.autoOpen && (this.options.mode !== 'iframe' && !this.locizeInstance || this.locizeInstance.closed)) {\n this.open();\n setTimeout(function () {\n send();\n }, 3000);\n } else {\n send();\n }\n },\n handleSavedMissing: function handleSavedMissing(lng, ns) {\n if (!this.locizeInstance || this.locizeInstance.closed) return;\n var payload = {\n message: 'savedMissings',\n projectId: this.i18next.options.backend.projectId,\n version: this.i18next.options.backend.version || 'latest',\n lng: lng,\n ns: ns\n };\n this.locizeInstance.postMessage(payload, this.options.url);\n },\n open: function open() {\n var url = this.options.url;\n if (!this.options.openDashboard) url = \"\".concat(url, \"/pid/\").concat(this.options.projectId || this.i18next.options.backend.projectId, \"/v/\").concat(this.i18next.options.backend.version || 'latest');\n\n if (this.options.mode === 'iframe') {\n this.locizeInstance = appendIframe(url, this.options);\n } else {\n this.locizeInstance = window.open(url);\n } // bind toggle UI\n\n\n this.toggleUI = initUI(this.on.bind(this), this.off.bind(this), this.options); // start listening\n\n this.on();\n },\n on: function on() {\n document.body.addEventListener('click', this.handler, true);\n this.toggleUI(true);\n this.enabled = true;\n },\n off: function off() {\n document.body.removeEventListener('click', this.handler, true);\n this.toggleUI(false);\n this.enabled = false;\n }\n};\n\nexport default editor;\n","const debugMode = !!(\n process.env.NODE_ENV !== 'production' && process.env.REACT_APP_I18N_DEBUG\n);\n\nconst detectionOptions = {\n // order and from where user language should be detected\n order: ['querystring', 'cookie', 'localStorage', 'navigator', 'htmlTag', 'path', 'subdomain'],\n\n // keys or params to lookup language from\n lookupQuerystring: 'lng',\n lookupCookie: 'i18next',\n lookupLocalStorage: 'i18nextLng',\n lookupFromPathIndex: 0,\n lookupFromSubdomainIndex: 0,\n\n // cache user language on\n caches: ['localStorage', 'cookie'],\n excludeCacheFor: ['cimode'], // languages to not persist (cookie, localStorage)\n\n // optional htmlTag with lang attribute, the default is:\n htmlTag: document.documentElement\n};\n\nexport { debugMode, detectionOptions };\n","const languagesMap = {\n ar: 'Arabic',\n am: 'Amharic',\n bg: 'Bulgarian',\n bn: 'Bengali',\n ca: 'Catalan',\n cs: 'Czech',\n da: 'Danish',\n de: 'German',\n el: 'Greek',\n en: 'English',\n 'en-GB': 'English (Great Britain)',\n 'en-US': 'English (USA)',\n es: 'Spanish',\n et: 'Estonian',\n fa: 'Persian',\n fi: 'Finnish',\n fil: 'Filipino',\n fr: 'French',\n gu: 'Gujarati',\n he: 'Hebrew',\n hi: 'Hindi',\n hr: 'Croatian',\n hu: 'Hungarian',\n id: 'Indonesian',\n it: 'Italian',\n ja: 'Japanese',\n 'ja-JP': 'Japanese (Japan)',\n kn: 'Kannada',\n ko: 'Korean',\n lt: 'Lithuanian',\n lv: 'Latvian',\n ml: 'Malayalam',\n mr: 'Marathi',\n ms: 'Malay',\n nl: 'Dutch',\n no: 'Norwegian',\n pl: 'Polish',\n 'pt-BR': 'Portuguese (Brazil)',\n 'pt-PT': 'Portuguese (Portugal)',\n ro: 'Romanian',\n ru: 'Russian',\n sk: 'Slovak',\n sl: 'Slovenian',\n sr: 'Serbian',\n sv: 'Swedish',\n sw: 'Swahili',\n ta: 'Tamil',\n te: 'Telugu',\n th: 'Thai',\n tr: 'Turkish',\n uk: 'Ukrainian',\n vi: 'Vietnamese',\n zh: 'Chinese',\n 'zh-CN': 'Chinese (China)',\n 'zh-TW': 'Chinese (Taiwan)',\n 'test-LNG': 'Test Language',\n};\n\nconst getLanguageLabel = (language) => {\n return languagesMap[language];\n};\n\nexport default function getAvailableLanguagesInfo(locales) {\n const availableLanguagesInfo = [];\n\n Object.keys(locales).forEach(key => {\n availableLanguagesInfo.push({\n value: key,\n label: getLanguageLabel(key) || key,\n });\n });\n\n return availableLanguagesInfo;\n}\n\nexport { getAvailableLanguagesInfo, getLanguageLabel };\n","import UserPreferencesModal from './UserPreferencesModal.json';\n\nexport default {\n ar: {\n UserPreferencesModal,\n },\n};\n","import AboutModal from './AboutModal.json';\nimport Buttons from './Buttons.json';\nimport CineDialog from './CineDialog.json';\nimport Common from './Common.json';\nimport DatePicker from './DatePicker.json';\nimport Header from './Header.json';\nimport MeasurementTable from './MeasurementTable.json';\nimport StudyList from './StudyList.json';\nimport UserPreferencesModal from './UserPreferencesModal.json';\nimport ViewportDownloadForm from './ViewportDownloadForm.json';\n\nexport default {\n 'en-US': {\n AboutModal,\n Buttons,\n CineDialog,\n Common,\n DatePicker,\n Header,\n MeasurementTable,\n StudyList,\n UserPreferencesModal,\n ViewportDownloadForm,\n },\n};\n","import Buttons from './Buttons.json';\nimport CineDialog from './CineDialog.json';\nimport Common from './Common.json';\nimport Header from './Header.json';\nimport MeasurementTable from './MeasurementTable.json';\nimport StudyList from './StudyList.json';\nimport UserPreferencesModal from './UserPreferencesModal.json';\n\nexport default {\n es: {\n Buttons,\n CineDialog,\n Common,\n Header,\n MeasurementTable,\n StudyList,\n UserPreferencesModal,\n },\n};\n","import Buttons from './Buttons.json';\nimport CineDialog from './CineDialog.json';\nimport Common from './Common.json';\nimport Header from './Header.json';\nimport UserPreferencesModal from './UserPreferencesModal.json';\n\nexport default {\n fr: {\n Buttons,\n CineDialog,\n Common,\n Header,\n UserPreferencesModal,\n },\n};\n","import Buttons from './Buttons.json';\nimport CineDialog from './CineDialog.json';\nimport Common from './Common.json';\nimport Header from './Header.json';\nimport UserPreferencesModal from './UserPreferencesModal.json';\n\nexport default {\n 'ja-JP': {\n Buttons,\n CineDialog,\n Common,\n Header,\n UserPreferencesModal,\n },\n};\n","import Buttons from './Buttons.json';\nimport Common from './Common.json';\nimport Header from './Header.json';\n\nexport default {\n nl: {\n Buttons,\n Common,\n Header,\n },\n};\n","import AboutModal from './AboutModal.json';\nimport Buttons from './Buttons.json';\nimport CineDialog from './CineDialog.json';\nimport Common from './Common.json';\nimport DatePicker from './DatePicker.json';\nimport Header from './Header.json';\nimport UserPreferencesModal from './UserPreferencesModal.json';\nimport MeasurementTable from './MeasurementTable.json';\n\nexport default {\n 'pt-BR': {\n AboutModal,\n Buttons,\n CineDialog,\n Common,\n DatePicker,\n Header,\n UserPreferencesModal,\n MeasurementTable,\n },\n};\n","import Buttons from './Buttons.json';\nimport CineDialog from './CineDialog.json';\nimport Common from './Common.json';\nimport Header from './Header.json';\nimport StudyList from './StudyList.json';\nimport UserPreferencesModal from './UserPreferencesModal.json';\n\nexport default {\n vi: {\n Buttons,\n CineDialog,\n Common,\n Header,\n StudyList,\n UserPreferencesModal,\n },\n};\n","import Buttons from './Buttons.json';\nimport CineDialog from './CineDialog.json';\nimport Common from './Common.json';\nimport Header from './Header.json';\nimport MeasurementTable from './MeasurementTable.json';\nimport StudyList from './StudyList.json';\nimport UserPreferencesModal from './UserPreferencesModal.json';\n\nexport default {\n zh: {\n Buttons,\n CineDialog,\n Common,\n Header,\n MeasurementTable,\n StudyList,\n UserPreferencesModal,\n },\n};\n","import AboutModal from './AboutModal.json';\nimport Buttons from './Buttons.json';\nimport CineDialog from './CineDialog.json';\nimport Common from './Common.json';\nimport DatePicker from './DatePicker.json';\nimport Header from './Header.json';\nimport MeasurementTable from './MeasurementTable.json';\nimport StudyList from './StudyList.json';\nimport UserPreferencesModal from './UserPreferencesModal.json';\nimport ViewportDownloadForm from './ViewportDownloadForm.json';\nimport ToolTip from './ToolTip.json';\nimport StudyBrowser from './StudyBrowser.json';\nimport SidePanel from './SidePanel.json';\nimport PatientInfo from './PatientInfo.json';\nimport Modes from './Modes.json';\nimport Modals from './Modals.json';\n\nexport default {\n 'test-LNG': {\n AboutModal,\n Buttons,\n CineDialog,\n Common,\n DatePicker,\n Header,\n MeasurementTable,\n StudyList,\n UserPreferencesModal,\n ViewportDownloadForm,\n ToolTip,\n StudyBrowser,\n PatientInfo,\n Modes,\n SidePanel,\n Modals\n },\n};\n","import ar from './ar/';\nimport en_US from './en-US/';\nimport es from './es/';\nimport fr from './fr/';\nimport ja_JP from './ja-JP/';\nimport nl from './nl/';\nimport pt_BR from './pt-BR/';\nimport vi from './vi/';\nimport zh from './zh/';\nimport test_lng from './test-LNG/';\n\nexport default {\n ...ar,\n ...en_US,\n ...es,\n ...fr,\n ...ja_JP,\n ...nl,\n ...pt_BR,\n ...vi,\n ...zh,\n ...test_lng\n};\n","import i18n from 'i18next';\nimport Backend from 'i18next-locize-backend';\nimport LastUsed from 'locize-lastused';\nimport Editor from 'locize-editor';\nimport LanguageDetector from 'i18next-browser-languagedetector';\nimport { initReactI18next } from 'react-i18next';\nimport customDebug from './debugger';\nimport pkg from '../package.json';\nimport { debugMode, detectionOptions } from './config';\nimport { getLanguageLabel, getAvailableLanguagesInfo } from './utils.js';\n\n// Note: The index.js files inside src/locales are dynamically generated\n// by the pullTranslations.sh script\nimport locales from './locales';\n\nfunction addLocales(newLocales) {\n customDebug(`Adding locales ${newLocales}`, 'info');\n\n let resourceBundle = [];\n\n Object.keys(newLocales).map(key => {\n Object.keys(newLocales[key]).map(namespace => {\n const locale = newLocales[key][namespace];\n resourceBundle.push({ key, namespace, locale });\n i18n.addResourceBundle(key, namespace, locale, true, true);\n });\n });\n\n customDebug(`Locales added successfully`, 'info');\n customDebug(resourceBundle, 'info');\n}\n\n/*\n * Note: Developers can add the API key to use the\n * in-context editor using environment variables.\n * (DO NOT commit the API key)\n */\nconst locizeOptions = {\n projectId: process.env.LOCIZE_PROJECTID,\n apiKey: process.env.LOCIZE_API_KEY,\n referenceLng: 'en-US',\n fallbacklng: 'en-US',\n};\n\nconst envUseLocize = !!process.env.USE_LOCIZE;\nconst envApiKeyAvailable = !!process.env.LOCIZE_API_KEY;\nconst DEFAULT_LANGUAGE = 'en-US';\n\nfunction initI18n(\n detection = detectionOptions,\n useLocize = envUseLocize,\n apiKeyAvailable = envApiKeyAvailable\n) {\n let initialized;\n\n if (useLocize) {\n customDebug(`Using Locize for translation files`, 'info');\n initialized = i18n\n // i18next-locize-backend\n // loads translations from your project, saves new keys to it (saveMissing: true)\n // https://github.com/locize/i18next-locize-backend\n .use(Backend)\n // locize-lastused\n // sets a timestamp of last access on every translation segment on locize\n // -> safely remove the ones not being touched for weeks/months\n // https://github.com/locize/locize-lastused\n .use(LastUsed)\n // locize-editor\n // InContext Editor of locize ?locize=true to show it\n // https://github.com/locize/locize-editor\n .use(Editor)\n // detect user language\n // learn more: https://github.com/i18next/i18next-browser-languageDetector\n .use(LanguageDetector)\n // pass the i18n instance to react-i18next.\n .use(initReactI18next)\n // init i18next\n // for all options read: https://www.i18next.com/overview/configuration-options\n .init({\n fallbackLng: DEFAULT_LANGUAGE,\n saveMissing: apiKeyAvailable,\n debug: debugMode,\n keySeparator: false,\n interpolation: {\n escapeValue: false, // not needed for react as it escapes by default\n },\n detection,\n backend: locizeOptions,\n locizeLastUsed: locizeOptions,\n editor: {\n ...locizeOptions,\n onEditorSaved: async (lng, ns) => {\n // reload that namespace in given language\n await i18n.reloadResources(lng, ns);\n // trigger an event on i18n which triggers a rerender\n // based on bindI18n below in react options\n i18n.emit('editorSaved');\n },\n },\n react: {\n useSuspense: false, // TODO: Was seeing weird errors without this\n wait: true,\n bindI18n: 'languageChanged editorSaved',\n },\n });\n } else {\n customDebug(`Using local translation files`, 'info');\n initialized = i18n\n // detect user language\n // learn more: https://github.com/i18next/i18next-browser-languageDetector\n .use(LanguageDetector)\n // pass the i18n instance to react-i18next.\n .use(initReactI18next)\n // init i18next\n // for all options read: https://www.i18next.com/overview/configuration-options\n .init({\n fallbackLng: DEFAULT_LANGUAGE,\n resources: locales,\n debug: debugMode,\n keySeparator: false,\n interpolation: {\n escapeValue: false, // not needed for react as it escapes by default\n },\n detection,\n react: {\n wait: true,\n },\n });\n }\n\n return initialized.then(function (t) {\n i18n.T = t;\n customDebug(`T function available.`, 'info');\n });\n}\n\ncustomDebug(`version ${pkg.version} loaded.`, 'info');\n\ni18n.initializing = initI18n();\ni18n.initI18n = initI18n;\ni18n.addLocales = addLocales;\ni18n.availableLanguages = getAvailableLanguagesInfo(locales);\ni18n.defaultLanguage = { label: getLanguageLabel(DEFAULT_LANGUAGE), value: DEFAULT_LANGUAGE };\ni18n.currentLanguage = () => ({ label: getLanguageLabel(i18n.language), value: i18n.language });\n\nexport default i18n;\n","import _extends from '@babel/runtime/helpers/esm/extends';\n\n/**\r\n * Actions represent the type of change to a location value.\r\n *\r\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#action\r\n */\nvar Action;\n\n(function (Action) {\n /**\r\n * A POP indicates a change to an arbitrary index in the history stack, such\r\n * as a back or forward navigation. It does not describe the direction of the\r\n * navigation, only that the current index changed.\r\n *\r\n * Note: This is the default action for newly created history objects.\r\n */\n Action[\"Pop\"] = \"POP\";\n /**\r\n * A PUSH indicates a new entry being added to the history stack, such as when\r\n * a link is clicked and a new page loads. When this happens, all subsequent\r\n * entries in the stack are lost.\r\n */\n\n Action[\"Push\"] = \"PUSH\";\n /**\r\n * A REPLACE indicates the entry at the current index in the history stack\r\n * being replaced by a new one.\r\n */\n\n Action[\"Replace\"] = \"REPLACE\";\n})(Action || (Action = {}));\n\nvar readOnly = process.env.NODE_ENV !== \"production\" ? function (obj) {\n return Object.freeze(obj);\n} : function (obj) {\n return obj;\n};\n\nfunction warning(cond, message) {\n if (!cond) {\n // eslint-disable-next-line no-console\n if (typeof console !== 'undefined') console.warn(message);\n\n try {\n // Welcome to debugging history!\n //\n // This error is thrown as a convenience so you can more easily\n // find the source for a warning that appears in the console by\n // enabling \"pause on exceptions\" in your JavaScript debugger.\n throw new Error(message); // eslint-disable-next-line no-empty\n } catch (e) {}\n }\n}\n\nvar BeforeUnloadEventType = 'beforeunload';\nvar HashChangeEventType = 'hashchange';\nvar PopStateEventType = 'popstate';\n/**\r\n * Browser history stores the location in regular URLs. This is the standard for\r\n * most web apps, but it requires some configuration on the server to ensure you\r\n * serve the same app at multiple URLs.\r\n *\r\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createbrowserhistory\r\n */\n\nfunction createBrowserHistory(options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$window = _options.window,\n window = _options$window === void 0 ? document.defaultView : _options$window;\n var globalHistory = window.history;\n\n function getIndexAndLocation() {\n var _window$location = window.location,\n pathname = _window$location.pathname,\n search = _window$location.search,\n hash = _window$location.hash;\n var state = globalHistory.state || {};\n return [state.idx, readOnly({\n pathname: pathname,\n search: search,\n hash: hash,\n state: state.usr || null,\n key: state.key || 'default'\n })];\n }\n\n var blockedPopTx = null;\n\n function handlePop() {\n if (blockedPopTx) {\n blockers.call(blockedPopTx);\n blockedPopTx = null;\n } else {\n var nextAction = Action.Pop;\n\n var _getIndexAndLocation = getIndexAndLocation(),\n nextIndex = _getIndexAndLocation[0],\n nextLocation = _getIndexAndLocation[1];\n\n if (blockers.length) {\n if (nextIndex != null) {\n var delta = index - nextIndex;\n\n if (delta) {\n // Revert the POP\n blockedPopTx = {\n action: nextAction,\n location: nextLocation,\n retry: function retry() {\n go(delta * -1);\n }\n };\n go(delta);\n }\n } else {\n // Trying to POP to a location with no index. We did not create\n // this location, so we can't effectively block the navigation.\n process.env.NODE_ENV !== \"production\" ? warning(false, // TODO: Write up a doc that explains our blocking strategy in\n // detail and link to it here so people can understand better what\n // is going on and how to avoid it.\n \"You are trying to block a POP navigation to a location that was not \" + \"created by the history library. The block will fail silently in \" + \"production, but in general you should do all navigation with the \" + \"history library (instead of using window.history.pushState directly) \" + \"to avoid this situation.\") : void 0;\n }\n } else {\n applyTx(nextAction);\n }\n }\n }\n\n window.addEventListener(PopStateEventType, handlePop);\n var action = Action.Pop;\n\n var _getIndexAndLocation2 = getIndexAndLocation(),\n index = _getIndexAndLocation2[0],\n location = _getIndexAndLocation2[1];\n\n var listeners = createEvents();\n var blockers = createEvents();\n\n if (index == null) {\n index = 0;\n globalHistory.replaceState(_extends({}, globalHistory.state, {\n idx: index\n }), '');\n }\n\n function createHref(to) {\n return typeof to === 'string' ? to : createPath(to);\n } // state defaults to `null` because `window.history.state` does\n\n\n function getNextLocation(to, state) {\n if (state === void 0) {\n state = null;\n }\n\n return readOnly(_extends({\n pathname: location.pathname,\n hash: '',\n search: ''\n }, typeof to === 'string' ? parsePath(to) : to, {\n state: state,\n key: createKey()\n }));\n }\n\n function getHistoryStateAndUrl(nextLocation, index) {\n return [{\n usr: nextLocation.state,\n key: nextLocation.key,\n idx: index\n }, createHref(nextLocation)];\n }\n\n function allowTx(action, location, retry) {\n return !blockers.length || (blockers.call({\n action: action,\n location: location,\n retry: retry\n }), false);\n }\n\n function applyTx(nextAction) {\n action = nextAction;\n\n var _getIndexAndLocation3 = getIndexAndLocation();\n\n index = _getIndexAndLocation3[0];\n location = _getIndexAndLocation3[1];\n listeners.call({\n action: action,\n location: location\n });\n }\n\n function push(to, state) {\n var nextAction = Action.Push;\n var nextLocation = getNextLocation(to, state);\n\n function retry() {\n push(to, state);\n }\n\n if (allowTx(nextAction, nextLocation, retry)) {\n var _getHistoryStateAndUr = getHistoryStateAndUrl(nextLocation, index + 1),\n historyState = _getHistoryStateAndUr[0],\n url = _getHistoryStateAndUr[1]; // TODO: Support forced reloading\n // try...catch because iOS limits us to 100 pushState calls :/\n\n\n try {\n globalHistory.pushState(historyState, '', url);\n } catch (error) {\n // They are going to lose state here, but there is no real\n // way to warn them about it since the page will refresh...\n window.location.assign(url);\n }\n\n applyTx(nextAction);\n }\n }\n\n function replace(to, state) {\n var nextAction = Action.Replace;\n var nextLocation = getNextLocation(to, state);\n\n function retry() {\n replace(to, state);\n }\n\n if (allowTx(nextAction, nextLocation, retry)) {\n var _getHistoryStateAndUr2 = getHistoryStateAndUrl(nextLocation, index),\n historyState = _getHistoryStateAndUr2[0],\n url = _getHistoryStateAndUr2[1]; // TODO: Support forced reloading\n\n\n globalHistory.replaceState(historyState, '', url);\n applyTx(nextAction);\n }\n }\n\n function go(delta) {\n globalHistory.go(delta);\n }\n\n var history = {\n get action() {\n return action;\n },\n\n get location() {\n return location;\n },\n\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n back: function back() {\n go(-1);\n },\n forward: function forward() {\n go(1);\n },\n listen: function listen(listener) {\n return listeners.push(listener);\n },\n block: function block(blocker) {\n var unblock = blockers.push(blocker);\n\n if (blockers.length === 1) {\n window.addEventListener(BeforeUnloadEventType, promptBeforeUnload);\n }\n\n return function () {\n unblock(); // Remove the beforeunload listener so the document may\n // still be salvageable in the pagehide event.\n // See https://html.spec.whatwg.org/#unloading-documents\n\n if (!blockers.length) {\n window.removeEventListener(BeforeUnloadEventType, promptBeforeUnload);\n }\n };\n }\n };\n return history;\n}\n/**\r\n * Hash history stores the location in window.location.hash. This makes it ideal\r\n * for situations where you don't want to send the location to the server for\r\n * some reason, either because you do cannot configure it or the URL space is\r\n * reserved for something else.\r\n *\r\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createhashhistory\r\n */\n\nfunction createHashHistory(options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options2 = options,\n _options2$window = _options2.window,\n window = _options2$window === void 0 ? document.defaultView : _options2$window;\n var globalHistory = window.history;\n\n function getIndexAndLocation() {\n var _parsePath = parsePath(window.location.hash.substr(1)),\n _parsePath$pathname = _parsePath.pathname,\n pathname = _parsePath$pathname === void 0 ? '/' : _parsePath$pathname,\n _parsePath$search = _parsePath.search,\n search = _parsePath$search === void 0 ? '' : _parsePath$search,\n _parsePath$hash = _parsePath.hash,\n hash = _parsePath$hash === void 0 ? '' : _parsePath$hash;\n\n var state = globalHistory.state || {};\n return [state.idx, readOnly({\n pathname: pathname,\n search: search,\n hash: hash,\n state: state.usr || null,\n key: state.key || 'default'\n })];\n }\n\n var blockedPopTx = null;\n\n function handlePop() {\n if (blockedPopTx) {\n blockers.call(blockedPopTx);\n blockedPopTx = null;\n } else {\n var nextAction = Action.Pop;\n\n var _getIndexAndLocation4 = getIndexAndLocation(),\n nextIndex = _getIndexAndLocation4[0],\n nextLocation = _getIndexAndLocation4[1];\n\n if (blockers.length) {\n if (nextIndex != null) {\n var delta = index - nextIndex;\n\n if (delta) {\n // Revert the POP\n blockedPopTx = {\n action: nextAction,\n location: nextLocation,\n retry: function retry() {\n go(delta * -1);\n }\n };\n go(delta);\n }\n } else {\n // Trying to POP to a location with no index. We did not create\n // this location, so we can't effectively block the navigation.\n process.env.NODE_ENV !== \"production\" ? warning(false, // TODO: Write up a doc that explains our blocking strategy in\n // detail and link to it here so people can understand better\n // what is going on and how to avoid it.\n \"You are trying to block a POP navigation to a location that was not \" + \"created by the history library. The block will fail silently in \" + \"production, but in general you should do all navigation with the \" + \"history library (instead of using window.history.pushState directly) \" + \"to avoid this situation.\") : void 0;\n }\n } else {\n applyTx(nextAction);\n }\n }\n }\n\n window.addEventListener(PopStateEventType, handlePop); // popstate does not fire on hashchange in IE 11 and old (trident) Edge\n // https://developer.mozilla.org/de/docs/Web/API/Window/popstate_event\n\n window.addEventListener(HashChangeEventType, function () {\n var _getIndexAndLocation5 = getIndexAndLocation(),\n nextLocation = _getIndexAndLocation5[1]; // Ignore extraneous hashchange events.\n\n\n if (createPath(nextLocation) !== createPath(location)) {\n handlePop();\n }\n });\n var action = Action.Pop;\n\n var _getIndexAndLocation6 = getIndexAndLocation(),\n index = _getIndexAndLocation6[0],\n location = _getIndexAndLocation6[1];\n\n var listeners = createEvents();\n var blockers = createEvents();\n\n if (index == null) {\n index = 0;\n globalHistory.replaceState(_extends({}, globalHistory.state, {\n idx: index\n }), '');\n }\n\n function getBaseHref() {\n var base = document.querySelector('base');\n var href = '';\n\n if (base && base.getAttribute('href')) {\n var url = window.location.href;\n var hashIndex = url.indexOf('#');\n href = hashIndex === -1 ? url : url.slice(0, hashIndex);\n }\n\n return href;\n }\n\n function createHref(to) {\n return getBaseHref() + '#' + (typeof to === 'string' ? to : createPath(to));\n }\n\n function getNextLocation(to, state) {\n if (state === void 0) {\n state = null;\n }\n\n return readOnly(_extends({\n pathname: location.pathname,\n hash: '',\n search: ''\n }, typeof to === 'string' ? parsePath(to) : to, {\n state: state,\n key: createKey()\n }));\n }\n\n function getHistoryStateAndUrl(nextLocation, index) {\n return [{\n usr: nextLocation.state,\n key: nextLocation.key,\n idx: index\n }, createHref(nextLocation)];\n }\n\n function allowTx(action, location, retry) {\n return !blockers.length || (blockers.call({\n action: action,\n location: location,\n retry: retry\n }), false);\n }\n\n function applyTx(nextAction) {\n action = nextAction;\n\n var _getIndexAndLocation7 = getIndexAndLocation();\n\n index = _getIndexAndLocation7[0];\n location = _getIndexAndLocation7[1];\n listeners.call({\n action: action,\n location: location\n });\n }\n\n function push(to, state) {\n var nextAction = Action.Push;\n var nextLocation = getNextLocation(to, state);\n\n function retry() {\n push(to, state);\n }\n\n process.env.NODE_ENV !== \"production\" ? warning(nextLocation.pathname.charAt(0) === '/', \"Relative pathnames are not supported in hash history.push(\" + JSON.stringify(to) + \")\") : void 0;\n\n if (allowTx(nextAction, nextLocation, retry)) {\n var _getHistoryStateAndUr3 = getHistoryStateAndUrl(nextLocation, index + 1),\n historyState = _getHistoryStateAndUr3[0],\n url = _getHistoryStateAndUr3[1]; // TODO: Support forced reloading\n // try...catch because iOS limits us to 100 pushState calls :/\n\n\n try {\n globalHistory.pushState(historyState, '', url);\n } catch (error) {\n // They are going to lose state here, but there is no real\n // way to warn them about it since the page will refresh...\n window.location.assign(url);\n }\n\n applyTx(nextAction);\n }\n }\n\n function replace(to, state) {\n var nextAction = Action.Replace;\n var nextLocation = getNextLocation(to, state);\n\n function retry() {\n replace(to, state);\n }\n\n process.env.NODE_ENV !== \"production\" ? warning(nextLocation.pathname.charAt(0) === '/', \"Relative pathnames are not supported in hash history.replace(\" + JSON.stringify(to) + \")\") : void 0;\n\n if (allowTx(nextAction, nextLocation, retry)) {\n var _getHistoryStateAndUr4 = getHistoryStateAndUrl(nextLocation, index),\n historyState = _getHistoryStateAndUr4[0],\n url = _getHistoryStateAndUr4[1]; // TODO: Support forced reloading\n\n\n globalHistory.replaceState(historyState, '', url);\n applyTx(nextAction);\n }\n }\n\n function go(delta) {\n globalHistory.go(delta);\n }\n\n var history = {\n get action() {\n return action;\n },\n\n get location() {\n return location;\n },\n\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n back: function back() {\n go(-1);\n },\n forward: function forward() {\n go(1);\n },\n listen: function listen(listener) {\n return listeners.push(listener);\n },\n block: function block(blocker) {\n var unblock = blockers.push(blocker);\n\n if (blockers.length === 1) {\n window.addEventListener(BeforeUnloadEventType, promptBeforeUnload);\n }\n\n return function () {\n unblock(); // Remove the beforeunload listener so the document may\n // still be salvageable in the pagehide event.\n // See https://html.spec.whatwg.org/#unloading-documents\n\n if (!blockers.length) {\n window.removeEventListener(BeforeUnloadEventType, promptBeforeUnload);\n }\n };\n }\n };\n return history;\n}\n/**\r\n * Memory history stores the current location in memory. It is designed for use\r\n * in stateful non-browser environments like tests and React Native.\r\n *\r\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#creatememoryhistory\r\n */\n\nfunction createMemoryHistory(options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options3 = options,\n _options3$initialEntr = _options3.initialEntries,\n initialEntries = _options3$initialEntr === void 0 ? ['/'] : _options3$initialEntr,\n initialIndex = _options3.initialIndex;\n var entries = initialEntries.map(function (entry) {\n var location = readOnly(_extends({\n pathname: '/',\n search: '',\n hash: '',\n state: null,\n key: createKey()\n }, typeof entry === 'string' ? parsePath(entry) : entry));\n process.env.NODE_ENV !== \"production\" ? warning(location.pathname.charAt(0) === '/', \"Relative pathnames are not supported in createMemoryHistory({ initialEntries }) (invalid entry: \" + JSON.stringify(entry) + \")\") : void 0;\n return location;\n });\n var index = clamp(initialIndex == null ? entries.length - 1 : initialIndex, 0, entries.length - 1);\n var action = Action.Pop;\n var location = entries[index];\n var listeners = createEvents();\n var blockers = createEvents();\n\n function createHref(to) {\n return typeof to === 'string' ? to : createPath(to);\n }\n\n function getNextLocation(to, state) {\n if (state === void 0) {\n state = null;\n }\n\n return readOnly(_extends({\n pathname: location.pathname,\n search: '',\n hash: ''\n }, typeof to === 'string' ? parsePath(to) : to, {\n state: state,\n key: createKey()\n }));\n }\n\n function allowTx(action, location, retry) {\n return !blockers.length || (blockers.call({\n action: action,\n location: location,\n retry: retry\n }), false);\n }\n\n function applyTx(nextAction, nextLocation) {\n action = nextAction;\n location = nextLocation;\n listeners.call({\n action: action,\n location: location\n });\n }\n\n function push(to, state) {\n var nextAction = Action.Push;\n var nextLocation = getNextLocation(to, state);\n\n function retry() {\n push(to, state);\n }\n\n process.env.NODE_ENV !== \"production\" ? warning(location.pathname.charAt(0) === '/', \"Relative pathnames are not supported in memory history.push(\" + JSON.stringify(to) + \")\") : void 0;\n\n if (allowTx(nextAction, nextLocation, retry)) {\n index += 1;\n entries.splice(index, entries.length, nextLocation);\n applyTx(nextAction, nextLocation);\n }\n }\n\n function replace(to, state) {\n var nextAction = Action.Replace;\n var nextLocation = getNextLocation(to, state);\n\n function retry() {\n replace(to, state);\n }\n\n process.env.NODE_ENV !== \"production\" ? warning(location.pathname.charAt(0) === '/', \"Relative pathnames are not supported in memory history.replace(\" + JSON.stringify(to) + \")\") : void 0;\n\n if (allowTx(nextAction, nextLocation, retry)) {\n entries[index] = nextLocation;\n applyTx(nextAction, nextLocation);\n }\n }\n\n function go(delta) {\n var nextIndex = clamp(index + delta, 0, entries.length - 1);\n var nextAction = Action.Pop;\n var nextLocation = entries[nextIndex];\n\n function retry() {\n go(delta);\n }\n\n if (allowTx(nextAction, nextLocation, retry)) {\n index = nextIndex;\n applyTx(nextAction, nextLocation);\n }\n }\n\n var history = {\n get index() {\n return index;\n },\n\n get action() {\n return action;\n },\n\n get location() {\n return location;\n },\n\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n back: function back() {\n go(-1);\n },\n forward: function forward() {\n go(1);\n },\n listen: function listen(listener) {\n return listeners.push(listener);\n },\n block: function block(blocker) {\n return blockers.push(blocker);\n }\n };\n return history;\n} ////////////////////////////////////////////////////////////////////////////////\n// UTILS\n////////////////////////////////////////////////////////////////////////////////\n\nfunction clamp(n, lowerBound, upperBound) {\n return Math.min(Math.max(n, lowerBound), upperBound);\n}\n\nfunction promptBeforeUnload(event) {\n // Cancel the event.\n event.preventDefault(); // Chrome (and legacy IE) requires returnValue to be set.\n\n event.returnValue = '';\n}\n\nfunction createEvents() {\n var handlers = [];\n return {\n get length() {\n return handlers.length;\n },\n\n push: function push(fn) {\n handlers.push(fn);\n return function () {\n handlers = handlers.filter(function (handler) {\n return handler !== fn;\n });\n };\n },\n call: function call(arg) {\n handlers.forEach(function (fn) {\n return fn && fn(arg);\n });\n }\n };\n}\n\nfunction createKey() {\n return Math.random().toString(36).substr(2, 8);\n}\n/**\r\n * Creates a string URL path from the given pathname, search, and hash components.\r\n *\r\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createpath\r\n */\n\n\nfunction createPath(_ref) {\n var _ref$pathname = _ref.pathname,\n pathname = _ref$pathname === void 0 ? '/' : _ref$pathname,\n _ref$search = _ref.search,\n search = _ref$search === void 0 ? '' : _ref$search,\n _ref$hash = _ref.hash,\n hash = _ref$hash === void 0 ? '' : _ref$hash;\n if (search && search !== '?') pathname += search.charAt(0) === '?' ? search : '?' + search;\n if (hash && hash !== '#') pathname += hash.charAt(0) === '#' ? hash : '#' + hash;\n return pathname;\n}\n/**\r\n * Parses a string URL path into its separate pathname, search, and hash components.\r\n *\r\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#parsepath\r\n */\n\nfunction parsePath(path) {\n var parsedPath = {};\n\n if (path) {\n var hashIndex = path.indexOf('#');\n\n if (hashIndex >= 0) {\n parsedPath.hash = path.substr(hashIndex);\n path = path.substr(0, hashIndex);\n }\n\n var searchIndex = path.indexOf('?');\n\n if (searchIndex >= 0) {\n parsedPath.search = path.substr(searchIndex);\n path = path.substr(0, searchIndex);\n }\n\n if (path) {\n parsedPath.pathname = path;\n }\n }\n\n return parsedPath;\n}\n\nexport { Action, createBrowserHistory, createHashHistory, createMemoryHistory, createPath, parsePath };\n//# sourceMappingURL=index.js.map\n","/**\n * React Router v6.3.0\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport { parsePath, createMemoryHistory, Action } from 'history';\nexport { Action as NavigationType, createPath, parsePath } from 'history';\nimport { createContext, useContext, useMemo, useRef, useEffect, useCallback, createElement, useState, useLayoutEffect, Children, isValidElement, Fragment } from 'react';\n\nconst NavigationContext = /*#__PURE__*/createContext(null);\n\nif (process.env.NODE_ENV !== \"production\") {\n NavigationContext.displayName = \"Navigation\";\n}\n\nconst LocationContext = /*#__PURE__*/createContext(null);\n\nif (process.env.NODE_ENV !== \"production\") {\n LocationContext.displayName = \"Location\";\n}\n\nconst RouteContext = /*#__PURE__*/createContext({\n outlet: null,\n matches: []\n});\n\nif (process.env.NODE_ENV !== \"production\") {\n RouteContext.displayName = \"Route\";\n}\n\nfunction invariant(cond, message) {\n if (!cond) throw new Error(message);\n}\nfunction warning(cond, message) {\n if (!cond) {\n // eslint-disable-next-line no-console\n if (typeof console !== \"undefined\") console.warn(message);\n\n try {\n // Welcome to debugging React Router!\n //\n // This error is thrown as a convenience so you can more easily\n // find the source for a warning that appears in the console by\n // enabling \"pause on exceptions\" in your JavaScript debugger.\n throw new Error(message); // eslint-disable-next-line no-empty\n } catch (e) {}\n }\n}\nconst alreadyWarned = {};\nfunction warningOnce(key, cond, message) {\n if (!cond && !alreadyWarned[key]) {\n alreadyWarned[key] = true;\n process.env.NODE_ENV !== \"production\" ? warning(false, message) : void 0;\n }\n}\n\n/**\n * Returns a path with params interpolated.\n *\n * @see https://reactrouter.com/docs/en/v6/api#generatepath\n */\nfunction generatePath(path, params) {\n if (params === void 0) {\n params = {};\n }\n\n return path.replace(/:(\\w+)/g, (_, key) => {\n !(params[key] != null) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Missing \\\":\" + key + \"\\\" param\") : invariant(false) : void 0;\n return params[key];\n }).replace(/\\/*\\*$/, _ => params[\"*\"] == null ? \"\" : params[\"*\"].replace(/^\\/*/, \"/\"));\n}\n/**\n * A RouteMatch contains info about how a route matched a URL.\n */\n\n/**\n * Matches the given routes to a location and returns the match data.\n *\n * @see https://reactrouter.com/docs/en/v6/api#matchroutes\n */\nfunction matchRoutes(routes, locationArg, basename) {\n if (basename === void 0) {\n basename = \"/\";\n }\n\n let location = typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n let pathname = stripBasename(location.pathname || \"/\", basename);\n\n if (pathname == null) {\n return null;\n }\n\n let branches = flattenRoutes(routes);\n rankRouteBranches(branches);\n let matches = null;\n\n for (let i = 0; matches == null && i < branches.length; ++i) {\n matches = matchRouteBranch(branches[i], pathname);\n }\n\n return matches;\n}\n\nfunction flattenRoutes(routes, branches, parentsMeta, parentPath) {\n if (branches === void 0) {\n branches = [];\n }\n\n if (parentsMeta === void 0) {\n parentsMeta = [];\n }\n\n if (parentPath === void 0) {\n parentPath = \"\";\n }\n\n routes.forEach((route, index) => {\n let meta = {\n relativePath: route.path || \"\",\n caseSensitive: route.caseSensitive === true,\n childrenIndex: index,\n route\n };\n\n if (meta.relativePath.startsWith(\"/\")) {\n !meta.relativePath.startsWith(parentPath) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Absolute route path \\\"\" + meta.relativePath + \"\\\" nested under path \" + (\"\\\"\" + parentPath + \"\\\" is not valid. An absolute child route path \") + \"must start with the combined path of all its parent routes.\") : invariant(false) : void 0;\n meta.relativePath = meta.relativePath.slice(parentPath.length);\n }\n\n let path = joinPaths([parentPath, meta.relativePath]);\n let routesMeta = parentsMeta.concat(meta); // Add the children before adding this route to the array so we traverse the\n // route tree depth-first and child routes appear before their parents in\n // the \"flattened\" version.\n\n if (route.children && route.children.length > 0) {\n !(route.index !== true) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Index routes must not have child routes. Please remove \" + (\"all child routes from route path \\\"\" + path + \"\\\".\")) : invariant(false) : void 0;\n flattenRoutes(route.children, branches, routesMeta, path);\n } // Routes without a path shouldn't ever match by themselves unless they are\n // index routes, so don't add them to the list of possible branches.\n\n\n if (route.path == null && !route.index) {\n return;\n }\n\n branches.push({\n path,\n score: computeScore(path, route.index),\n routesMeta\n });\n });\n return branches;\n}\n\nfunction rankRouteBranches(branches) {\n branches.sort((a, b) => a.score !== b.score ? b.score - a.score // Higher score first\n : compareIndexes(a.routesMeta.map(meta => meta.childrenIndex), b.routesMeta.map(meta => meta.childrenIndex)));\n}\n\nconst paramRe = /^:\\w+$/;\nconst dynamicSegmentValue = 3;\nconst indexRouteValue = 2;\nconst emptySegmentValue = 1;\nconst staticSegmentValue = 10;\nconst splatPenalty = -2;\n\nconst isSplat = s => s === \"*\";\n\nfunction computeScore(path, index) {\n let segments = path.split(\"/\");\n let initialScore = segments.length;\n\n if (segments.some(isSplat)) {\n initialScore += splatPenalty;\n }\n\n if (index) {\n initialScore += indexRouteValue;\n }\n\n return segments.filter(s => !isSplat(s)).reduce((score, segment) => score + (paramRe.test(segment) ? dynamicSegmentValue : segment === \"\" ? emptySegmentValue : staticSegmentValue), initialScore);\n}\n\nfunction compareIndexes(a, b) {\n let siblings = a.length === b.length && a.slice(0, -1).every((n, i) => n === b[i]);\n return siblings ? // If two routes are siblings, we should try to match the earlier sibling\n // first. This allows people to have fine-grained control over the matching\n // behavior by simply putting routes with identical paths in the order they\n // want them tried.\n a[a.length - 1] - b[b.length - 1] : // Otherwise, it doesn't really make sense to rank non-siblings by index,\n // so they sort equally.\n 0;\n}\n\nfunction matchRouteBranch(branch, pathname) {\n let {\n routesMeta\n } = branch;\n let matchedParams = {};\n let matchedPathname = \"/\";\n let matches = [];\n\n for (let i = 0; i < routesMeta.length; ++i) {\n let meta = routesMeta[i];\n let end = i === routesMeta.length - 1;\n let remainingPathname = matchedPathname === \"/\" ? pathname : pathname.slice(matchedPathname.length) || \"/\";\n let match = matchPath({\n path: meta.relativePath,\n caseSensitive: meta.caseSensitive,\n end\n }, remainingPathname);\n if (!match) return null;\n Object.assign(matchedParams, match.params);\n let route = meta.route;\n matches.push({\n params: matchedParams,\n pathname: joinPaths([matchedPathname, match.pathname]),\n pathnameBase: normalizePathname(joinPaths([matchedPathname, match.pathnameBase])),\n route\n });\n\n if (match.pathnameBase !== \"/\") {\n matchedPathname = joinPaths([matchedPathname, match.pathnameBase]);\n }\n }\n\n return matches;\n}\n/**\n * A PathPattern is used to match on some portion of a URL pathname.\n */\n\n\n/**\n * Performs pattern matching on a URL pathname and returns information about\n * the match.\n *\n * @see https://reactrouter.com/docs/en/v6/api#matchpath\n */\nfunction matchPath(pattern, pathname) {\n if (typeof pattern === \"string\") {\n pattern = {\n path: pattern,\n caseSensitive: false,\n end: true\n };\n }\n\n let [matcher, paramNames] = compilePath(pattern.path, pattern.caseSensitive, pattern.end);\n let match = pathname.match(matcher);\n if (!match) return null;\n let matchedPathname = match[0];\n let pathnameBase = matchedPathname.replace(/(.)\\/+$/, \"$1\");\n let captureGroups = match.slice(1);\n let params = paramNames.reduce((memo, paramName, index) => {\n // We need to compute the pathnameBase here using the raw splat value\n // instead of using params[\"*\"] later because it will be decoded then\n if (paramName === \"*\") {\n let splatValue = captureGroups[index] || \"\";\n pathnameBase = matchedPathname.slice(0, matchedPathname.length - splatValue.length).replace(/(.)\\/+$/, \"$1\");\n }\n\n memo[paramName] = safelyDecodeURIComponent(captureGroups[index] || \"\", paramName);\n return memo;\n }, {});\n return {\n params,\n pathname: matchedPathname,\n pathnameBase,\n pattern\n };\n}\n\nfunction compilePath(path, caseSensitive, end) {\n if (caseSensitive === void 0) {\n caseSensitive = false;\n }\n\n if (end === void 0) {\n end = true;\n }\n\n process.env.NODE_ENV !== \"production\" ? warning(path === \"*\" || !path.endsWith(\"*\") || path.endsWith(\"/*\"), \"Route path \\\"\" + path + \"\\\" will be treated as if it were \" + (\"\\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\" because the `*` character must \") + \"always follow a `/` in the pattern. To get rid of this warning, \" + (\"please change the route path to \\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\".\")) : void 0;\n let paramNames = [];\n let regexpSource = \"^\" + path.replace(/\\/*\\*?$/, \"\") // Ignore trailing / and /*, we'll handle it below\n .replace(/^\\/*/, \"/\") // Make sure it has a leading /\n .replace(/[\\\\.*+^$?{}|()[\\]]/g, \"\\\\$&\") // Escape special regex chars\n .replace(/:(\\w+)/g, (_, paramName) => {\n paramNames.push(paramName);\n return \"([^\\\\/]+)\";\n });\n\n if (path.endsWith(\"*\")) {\n paramNames.push(\"*\");\n regexpSource += path === \"*\" || path === \"/*\" ? \"(.*)$\" // Already matched the initial /, just match the rest\n : \"(?:\\\\/(.+)|\\\\/*)$\"; // Don't include the / in params[\"*\"]\n } else {\n regexpSource += end ? \"\\\\/*$\" // When matching to the end, ignore trailing slashes\n : // Otherwise, match a word boundary or a proceeding /. The word boundary restricts\n // parent routes to matching only their own words and nothing more, e.g. parent\n // route \"/home\" should not match \"/home2\".\n // Additionally, allow paths starting with `.`, `-`, `~`, and url-encoded entities,\n // but do not consume the character in the matched path so they can match against\n // nested paths.\n \"(?:(?=[.~-]|%[0-9A-F]{2})|\\\\b|\\\\/|$)\";\n }\n\n let matcher = new RegExp(regexpSource, caseSensitive ? undefined : \"i\");\n return [matcher, paramNames];\n}\n\nfunction safelyDecodeURIComponent(value, paramName) {\n try {\n return decodeURIComponent(value);\n } catch (error) {\n process.env.NODE_ENV !== \"production\" ? warning(false, \"The value for the URL param \\\"\" + paramName + \"\\\" will not be decoded because\" + (\" the string \\\"\" + value + \"\\\" is a malformed URL segment. This is probably\") + (\" due to a bad percent encoding (\" + error + \").\")) : void 0;\n return value;\n }\n}\n/**\n * Returns a resolved path object relative to the given pathname.\n *\n * @see https://reactrouter.com/docs/en/v6/api#resolvepath\n */\n\n\nfunction resolvePath(to, fromPathname) {\n if (fromPathname === void 0) {\n fromPathname = \"/\";\n }\n\n let {\n pathname: toPathname,\n search = \"\",\n hash = \"\"\n } = typeof to === \"string\" ? parsePath(to) : to;\n let pathname = toPathname ? toPathname.startsWith(\"/\") ? toPathname : resolvePathname(toPathname, fromPathname) : fromPathname;\n return {\n pathname,\n search: normalizeSearch(search),\n hash: normalizeHash(hash)\n };\n}\n\nfunction resolvePathname(relativePath, fromPathname) {\n let segments = fromPathname.replace(/\\/+$/, \"\").split(\"/\");\n let relativeSegments = relativePath.split(\"/\");\n relativeSegments.forEach(segment => {\n if (segment === \"..\") {\n // Keep the root \"\" segment so the pathname starts at /\n if (segments.length > 1) segments.pop();\n } else if (segment !== \".\") {\n segments.push(segment);\n }\n });\n return segments.length > 1 ? segments.join(\"/\") : \"/\";\n}\n\nfunction resolveTo(toArg, routePathnames, locationPathname) {\n let to = typeof toArg === \"string\" ? parsePath(toArg) : toArg;\n let toPathname = toArg === \"\" || to.pathname === \"\" ? \"/\" : to.pathname; // If a pathname is explicitly provided in `to`, it should be relative to the\n // route context. This is explained in `Note on `` values` in our\n // migration guide from v5 as a means of disambiguation between `to` values\n // that begin with `/` and those that do not. However, this is problematic for\n // `to` values that do not provide a pathname. `to` can simply be a search or\n // hash string, in which case we should assume that the navigation is relative\n // to the current location's pathname and *not* the route pathname.\n\n let from;\n\n if (toPathname == null) {\n from = locationPathname;\n } else {\n let routePathnameIndex = routePathnames.length - 1;\n\n if (toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\"); // Each leading .. segment means \"go up one route\" instead of \"go up one\n // URL segment\". This is a key difference from how works and a\n // major reason we call this a \"to\" value instead of a \"href\".\n\n while (toSegments[0] === \"..\") {\n toSegments.shift();\n routePathnameIndex -= 1;\n }\n\n to.pathname = toSegments.join(\"/\");\n } // If there are more \"..\" segments than parent routes, resolve relative to\n // the root / URL.\n\n\n from = routePathnameIndex >= 0 ? routePathnames[routePathnameIndex] : \"/\";\n }\n\n let path = resolvePath(to, from); // Ensure the pathname has a trailing slash if the original to value had one.\n\n if (toPathname && toPathname !== \"/\" && toPathname.endsWith(\"/\") && !path.pathname.endsWith(\"/\")) {\n path.pathname += \"/\";\n }\n\n return path;\n}\nfunction getToPathname(to) {\n // Empty strings should be treated the same as / paths\n return to === \"\" || to.pathname === \"\" ? \"/\" : typeof to === \"string\" ? parsePath(to).pathname : to.pathname;\n}\nfunction stripBasename(pathname, basename) {\n if (basename === \"/\") return pathname;\n\n if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n return null;\n }\n\n let nextChar = pathname.charAt(basename.length);\n\n if (nextChar && nextChar !== \"/\") {\n // pathname does not start with basename/\n return null;\n }\n\n return pathname.slice(basename.length) || \"/\";\n}\nconst joinPaths = paths => paths.join(\"/\").replace(/\\/\\/+/g, \"/\");\nconst normalizePathname = pathname => pathname.replace(/\\/+$/, \"\").replace(/^\\/*/, \"/\");\n\nconst normalizeSearch = search => !search || search === \"?\" ? \"\" : search.startsWith(\"?\") ? search : \"?\" + search;\n\nconst normalizeHash = hash => !hash || hash === \"#\" ? \"\" : hash.startsWith(\"#\") ? hash : \"#\" + hash;\n\n/**\n * Returns the full href for the given \"to\" value. This is useful for building\n * custom links that are also accessible and preserve right-click behavior.\n *\n * @see https://reactrouter.com/docs/en/v6/api#usehref\n */\n\nfunction useHref(to) {\n !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n \"useHref() may be used only in the context of a component.\") : invariant(false) : void 0;\n let {\n basename,\n navigator\n } = useContext(NavigationContext);\n let {\n hash,\n pathname,\n search\n } = useResolvedPath(to);\n let joinedPathname = pathname;\n\n if (basename !== \"/\") {\n let toPathname = getToPathname(to);\n let endsWithSlash = toPathname != null && toPathname.endsWith(\"/\");\n joinedPathname = pathname === \"/\" ? basename + (endsWithSlash ? \"/\" : \"\") : joinPaths([basename, pathname]);\n }\n\n return navigator.createHref({\n pathname: joinedPathname,\n search,\n hash\n });\n}\n/**\n * Returns true if this component is a descendant of a .\n *\n * @see https://reactrouter.com/docs/en/v6/api#useinroutercontext\n */\n\nfunction useInRouterContext() {\n return useContext(LocationContext) != null;\n}\n/**\n * Returns the current location object, which represents the current URL in web\n * browsers.\n *\n * Note: If you're using this it may mean you're doing some of your own\n * \"routing\" in your app, and we'd like to know what your use case is. We may\n * be able to provide something higher-level to better suit your needs.\n *\n * @see https://reactrouter.com/docs/en/v6/api#uselocation\n */\n\nfunction useLocation() {\n !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n \"useLocation() may be used only in the context of a component.\") : invariant(false) : void 0;\n return useContext(LocationContext).location;\n}\n/**\n * Returns the current navigation action which describes how the router came to\n * the current location, either by a pop, push, or replace on the history stack.\n *\n * @see https://reactrouter.com/docs/en/v6/api#usenavigationtype\n */\n\nfunction useNavigationType() {\n return useContext(LocationContext).navigationType;\n}\n/**\n * Returns true if the URL for the given \"to\" value matches the current URL.\n * This is useful for components that need to know \"active\" state, e.g.\n * .\n *\n * @see https://reactrouter.com/docs/en/v6/api#usematch\n */\n\nfunction useMatch(pattern) {\n !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n \"useMatch() may be used only in the context of a component.\") : invariant(false) : void 0;\n let {\n pathname\n } = useLocation();\n return useMemo(() => matchPath(pattern, pathname), [pathname, pattern]);\n}\n/**\n * The interface for the navigate() function returned from useNavigate().\n */\n\n/**\n * Returns an imperative method for changing the location. Used by s, but\n * may also be used by other elements to change the location.\n *\n * @see https://reactrouter.com/docs/en/v6/api#usenavigate\n */\nfunction useNavigate() {\n !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n \"useNavigate() may be used only in the context of a component.\") : invariant(false) : void 0;\n let {\n basename,\n navigator\n } = useContext(NavigationContext);\n let {\n matches\n } = useContext(RouteContext);\n let {\n pathname: locationPathname\n } = useLocation();\n let routePathnamesJson = JSON.stringify(matches.map(match => match.pathnameBase));\n let activeRef = useRef(false);\n useEffect(() => {\n activeRef.current = true;\n });\n let navigate = useCallback(function (to, options) {\n if (options === void 0) {\n options = {};\n }\n\n process.env.NODE_ENV !== \"production\" ? warning(activeRef.current, \"You should call navigate() in a React.useEffect(), not when \" + \"your component is first rendered.\") : void 0;\n if (!activeRef.current) return;\n\n if (typeof to === \"number\") {\n navigator.go(to);\n return;\n }\n\n let path = resolveTo(to, JSON.parse(routePathnamesJson), locationPathname);\n\n if (basename !== \"/\") {\n path.pathname = joinPaths([basename, path.pathname]);\n }\n\n (!!options.replace ? navigator.replace : navigator.push)(path, options.state);\n }, [basename, navigator, routePathnamesJson, locationPathname]);\n return navigate;\n}\nconst OutletContext = /*#__PURE__*/createContext(null);\n/**\n * Returns the context (if provided) for the child route at this level of the route\n * hierarchy.\n * @see https://reactrouter.com/docs/en/v6/api#useoutletcontext\n */\n\nfunction useOutletContext() {\n return useContext(OutletContext);\n}\n/**\n * Returns the element for the child route at this level of the route\n * hierarchy. Used internally by to render child routes.\n *\n * @see https://reactrouter.com/docs/en/v6/api#useoutlet\n */\n\nfunction useOutlet(context) {\n let outlet = useContext(RouteContext).outlet;\n\n if (outlet) {\n return /*#__PURE__*/createElement(OutletContext.Provider, {\n value: context\n }, outlet);\n }\n\n return outlet;\n}\n/**\n * Returns an object of key/value pairs of the dynamic params from the current\n * URL that were matched by the route path.\n *\n * @see https://reactrouter.com/docs/en/v6/api#useparams\n */\n\nfunction useParams() {\n let {\n matches\n } = useContext(RouteContext);\n let routeMatch = matches[matches.length - 1];\n return routeMatch ? routeMatch.params : {};\n}\n/**\n * Resolves the pathname of the given `to` value against the current location.\n *\n * @see https://reactrouter.com/docs/en/v6/api#useresolvedpath\n */\n\nfunction useResolvedPath(to) {\n let {\n matches\n } = useContext(RouteContext);\n let {\n pathname: locationPathname\n } = useLocation();\n let routePathnamesJson = JSON.stringify(matches.map(match => match.pathnameBase));\n return useMemo(() => resolveTo(to, JSON.parse(routePathnamesJson), locationPathname), [to, routePathnamesJson, locationPathname]);\n}\n/**\n * Returns the element of the route that matched the current location, prepared\n * with the correct context to render the remainder of the route tree. Route\n * elements in the tree must render an to render their child route's\n * element.\n *\n * @see https://reactrouter.com/docs/en/v6/api#useroutes\n */\n\nfunction useRoutes(routes, locationArg) {\n !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n \"useRoutes() may be used only in the context of a component.\") : invariant(false) : void 0;\n let {\n matches: parentMatches\n } = useContext(RouteContext);\n let routeMatch = parentMatches[parentMatches.length - 1];\n let parentParams = routeMatch ? routeMatch.params : {};\n let parentPathname = routeMatch ? routeMatch.pathname : \"/\";\n let parentPathnameBase = routeMatch ? routeMatch.pathnameBase : \"/\";\n let parentRoute = routeMatch && routeMatch.route;\n\n if (process.env.NODE_ENV !== \"production\") {\n // You won't get a warning about 2 different under a \n // without a trailing *, but this is a best-effort warning anyway since we\n // cannot even give the warning unless they land at the parent route.\n //\n // Example:\n //\n // \n // {/* This route path MUST end with /* because otherwise\n // it will never match /blog/post/123 */}\n // } />\n // } />\n // \n //\n // function Blog() {\n // return (\n // \n // } />\n // \n // );\n // }\n let parentPath = parentRoute && parentRoute.path || \"\";\n warningOnce(parentPathname, !parentRoute || parentPath.endsWith(\"*\"), \"You rendered descendant (or called `useRoutes()`) at \" + (\"\\\"\" + parentPathname + \"\\\" (under ) but the \") + \"parent route path has no trailing \\\"*\\\". This means if you navigate \" + \"deeper, the parent won't match anymore and therefore the child \" + \"routes will never render.\\n\\n\" + (\"Please change the parent to .\"));\n }\n\n let locationFromContext = useLocation();\n let location;\n\n if (locationArg) {\n var _parsedLocationArg$pa;\n\n let parsedLocationArg = typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n !(parentPathnameBase === \"/\" || ((_parsedLocationArg$pa = parsedLocationArg.pathname) == null ? void 0 : _parsedLocationArg$pa.startsWith(parentPathnameBase))) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"When overriding the location using `` or `useRoutes(routes, location)`, \" + \"the location pathname must begin with the portion of the URL pathname that was \" + (\"matched by all parent routes. The current pathname base is \\\"\" + parentPathnameBase + \"\\\" \") + (\"but pathname \\\"\" + parsedLocationArg.pathname + \"\\\" was given in the `location` prop.\")) : invariant(false) : void 0;\n location = parsedLocationArg;\n } else {\n location = locationFromContext;\n }\n\n let pathname = location.pathname || \"/\";\n let remainingPathname = parentPathnameBase === \"/\" ? pathname : pathname.slice(parentPathnameBase.length) || \"/\";\n let matches = matchRoutes(routes, {\n pathname: remainingPathname\n });\n\n if (process.env.NODE_ENV !== \"production\") {\n process.env.NODE_ENV !== \"production\" ? warning(parentRoute || matches != null, \"No routes matched location \\\"\" + location.pathname + location.search + location.hash + \"\\\" \") : void 0;\n process.env.NODE_ENV !== \"production\" ? warning(matches == null || matches[matches.length - 1].route.element !== undefined, \"Matched leaf route at location \\\"\" + location.pathname + location.search + location.hash + \"\\\" does not have an element. \" + \"This means it will render an with a null value by default resulting in an \\\"empty\\\" page.\") : void 0;\n }\n\n return _renderMatches(matches && matches.map(match => Object.assign({}, match, {\n params: Object.assign({}, parentParams, match.params),\n pathname: joinPaths([parentPathnameBase, match.pathname]),\n pathnameBase: match.pathnameBase === \"/\" ? parentPathnameBase : joinPaths([parentPathnameBase, match.pathnameBase])\n })), parentMatches);\n}\nfunction _renderMatches(matches, parentMatches) {\n if (parentMatches === void 0) {\n parentMatches = [];\n }\n\n if (matches == null) return null;\n return matches.reduceRight((outlet, match, index) => {\n return /*#__PURE__*/createElement(RouteContext.Provider, {\n children: match.route.element !== undefined ? match.route.element : outlet,\n value: {\n outlet,\n matches: parentMatches.concat(matches.slice(0, index + 1))\n }\n });\n }, null);\n}\n\n/**\n * A that stores all entries in memory.\n *\n * @see https://reactrouter.com/docs/en/v6/api#memoryrouter\n */\nfunction MemoryRouter(_ref) {\n let {\n basename,\n children,\n initialEntries,\n initialIndex\n } = _ref;\n let historyRef = useRef();\n\n if (historyRef.current == null) {\n historyRef.current = createMemoryHistory({\n initialEntries,\n initialIndex\n });\n }\n\n let history = historyRef.current;\n let [state, setState] = useState({\n action: history.action,\n location: history.location\n });\n useLayoutEffect(() => history.listen(setState), [history]);\n return /*#__PURE__*/createElement(Router, {\n basename: basename,\n children: children,\n location: state.location,\n navigationType: state.action,\n navigator: history\n });\n}\n\n/**\n * Changes the current location.\n *\n * Note: This API is mostly useful in React.Component subclasses that are not\n * able to use hooks. In functional components, we recommend you use the\n * `useNavigate` hook instead.\n *\n * @see https://reactrouter.com/docs/en/v6/api#navigate\n */\nfunction Navigate(_ref2) {\n let {\n to,\n replace,\n state\n } = _ref2;\n !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? invariant(false, // TODO: This error is probably because they somehow have 2 versions of\n // the router loaded. We can help them understand how to avoid that.\n \" may be used only in the context of a component.\") : invariant(false) : void 0;\n process.env.NODE_ENV !== \"production\" ? warning(!useContext(NavigationContext).static, \" must not be used on the initial render in a . \" + \"This is a no-op, but you should modify your code so the is \" + \"only ever rendered in response to some user interaction or state change.\") : void 0;\n let navigate = useNavigate();\n useEffect(() => {\n navigate(to, {\n replace,\n state\n });\n });\n return null;\n}\n\n/**\n * Renders the child route's element, if there is one.\n *\n * @see https://reactrouter.com/docs/en/v6/api#outlet\n */\nfunction Outlet(props) {\n return useOutlet(props.context);\n}\n\n/**\n * Declares an element that should be rendered at a certain URL path.\n *\n * @see https://reactrouter.com/docs/en/v6/api#route\n */\nfunction Route(_props) {\n process.env.NODE_ENV !== \"production\" ? invariant(false, \"A is only ever to be used as the child of element, \" + \"never rendered directly. Please wrap your in a .\") : invariant(false) ;\n}\n\n/**\n * Provides location context for the rest of the app.\n *\n * Note: You usually won't render a directly. Instead, you'll render a\n * router that is more specific to your environment such as a \n * in web browsers or a for server rendering.\n *\n * @see https://reactrouter.com/docs/en/v6/api#router\n */\nfunction Router(_ref3) {\n let {\n basename: basenameProp = \"/\",\n children = null,\n location: locationProp,\n navigationType = Action.Pop,\n navigator,\n static: staticProp = false\n } = _ref3;\n !!useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"You cannot render a inside another .\" + \" You should never have more than one in your app.\") : invariant(false) : void 0;\n let basename = normalizePathname(basenameProp);\n let navigationContext = useMemo(() => ({\n basename,\n navigator,\n static: staticProp\n }), [basename, navigator, staticProp]);\n\n if (typeof locationProp === \"string\") {\n locationProp = parsePath(locationProp);\n }\n\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n state = null,\n key = \"default\"\n } = locationProp;\n let location = useMemo(() => {\n let trailingPathname = stripBasename(pathname, basename);\n\n if (trailingPathname == null) {\n return null;\n }\n\n return {\n pathname: trailingPathname,\n search,\n hash,\n state,\n key\n };\n }, [basename, pathname, search, hash, state, key]);\n process.env.NODE_ENV !== \"production\" ? warning(location != null, \" is not able to match the URL \" + (\"\\\"\" + pathname + search + hash + \"\\\" because it does not start with the \") + \"basename, so the won't render anything.\") : void 0;\n\n if (location == null) {\n return null;\n }\n\n return /*#__PURE__*/createElement(NavigationContext.Provider, {\n value: navigationContext\n }, /*#__PURE__*/createElement(LocationContext.Provider, {\n children: children,\n value: {\n location,\n navigationType\n }\n }));\n}\n\n/**\n * A container for a nested tree of elements that renders the branch\n * that best matches the current location.\n *\n * @see https://reactrouter.com/docs/en/v6/api#routes\n */\nfunction Routes(_ref4) {\n let {\n children,\n location\n } = _ref4;\n return useRoutes(createRoutesFromChildren(children), location);\n} ///////////////////////////////////////////////////////////////////////////////\n// UTILS\n///////////////////////////////////////////////////////////////////////////////\n\n/**\n * Creates a route config from a React \"children\" object, which is usually\n * either a `` element or an array of them. Used internally by\n * `` to create a route config from its children.\n *\n * @see https://reactrouter.com/docs/en/v6/api#createroutesfromchildren\n */\n\nfunction createRoutesFromChildren(children) {\n let routes = [];\n Children.forEach(children, element => {\n if (! /*#__PURE__*/isValidElement(element)) {\n // Ignore non-elements. This allows people to more easily inline\n // conditionals in their route config.\n return;\n }\n\n if (element.type === Fragment) {\n // Transparently support React.Fragment and its children.\n routes.push.apply(routes, createRoutesFromChildren(element.props.children));\n return;\n }\n\n !(element.type === Route) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"[\" + (typeof element.type === \"string\" ? element.type : element.type.name) + \"] is not a component. All component children of must be a or \") : invariant(false) : void 0;\n let route = {\n caseSensitive: element.props.caseSensitive,\n element: element.props.element,\n index: element.props.index,\n path: element.props.path\n };\n\n if (element.props.children) {\n route.children = createRoutesFromChildren(element.props.children);\n }\n\n routes.push(route);\n });\n return routes;\n}\n/**\n * Renders the result of `matchRoutes()` into a React element.\n */\n\nfunction renderMatches(matches) {\n return _renderMatches(matches);\n}\n\nexport { MemoryRouter, Navigate, Outlet, Route, Router, Routes, LocationContext as UNSAFE_LocationContext, NavigationContext as UNSAFE_NavigationContext, RouteContext as UNSAFE_RouteContext, createRoutesFromChildren, generatePath, matchPath, matchRoutes, renderMatches, resolvePath, useHref, useInRouterContext, useLocation, useMatch, useNavigate, useNavigationType, useOutlet, useOutletContext, useParams, useResolvedPath, useRoutes };\n//# sourceMappingURL=index.js.map\n","/**\n * React Router DOM v6.3.0\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport { useRef, useState, useLayoutEffect, createElement, forwardRef, useCallback, useMemo } from 'react';\nimport { createBrowserHistory, createHashHistory } from 'history';\nimport { Router, useHref, createPath, useLocation, useResolvedPath, useNavigate } from 'react-router';\nexport { MemoryRouter, Navigate, NavigationType, Outlet, Route, Router, Routes, UNSAFE_LocationContext, UNSAFE_NavigationContext, UNSAFE_RouteContext, createPath, createRoutesFromChildren, generatePath, matchPath, matchRoutes, parsePath, renderMatches, resolvePath, useHref, useInRouterContext, useLocation, useMatch, useNavigate, useNavigationType, useOutlet, useOutletContext, useParams, useResolvedPath, useRoutes } from 'react-router';\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nconst _excluded = [\"onClick\", \"reloadDocument\", \"replace\", \"state\", \"target\", \"to\"],\n _excluded2 = [\"aria-current\", \"caseSensitive\", \"className\", \"end\", \"style\", \"to\", \"children\"];\n\nfunction warning(cond, message) {\n if (!cond) {\n // eslint-disable-next-line no-console\n if (typeof console !== \"undefined\") console.warn(message);\n\n try {\n // Welcome to debugging React Router!\n //\n // This error is thrown as a convenience so you can more easily\n // find the source for a warning that appears in the console by\n // enabling \"pause on exceptions\" in your JavaScript debugger.\n throw new Error(message); // eslint-disable-next-line no-empty\n } catch (e) {}\n }\n} ////////////////////////////////////////////////////////////////////////////////\n// COMPONENTS\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A `` for use in web browsers. Provides the cleanest URLs.\n */\nfunction BrowserRouter(_ref) {\n let {\n basename,\n children,\n window\n } = _ref;\n let historyRef = useRef();\n\n if (historyRef.current == null) {\n historyRef.current = createBrowserHistory({\n window\n });\n }\n\n let history = historyRef.current;\n let [state, setState] = useState({\n action: history.action,\n location: history.location\n });\n useLayoutEffect(() => history.listen(setState), [history]);\n return /*#__PURE__*/createElement(Router, {\n basename: basename,\n children: children,\n location: state.location,\n navigationType: state.action,\n navigator: history\n });\n}\n\n/**\n * A `` for use in web browsers. Stores the location in the hash\n * portion of the URL so it is not sent to the server.\n */\nfunction HashRouter(_ref2) {\n let {\n basename,\n children,\n window\n } = _ref2;\n let historyRef = useRef();\n\n if (historyRef.current == null) {\n historyRef.current = createHashHistory({\n window\n });\n }\n\n let history = historyRef.current;\n let [state, setState] = useState({\n action: history.action,\n location: history.location\n });\n useLayoutEffect(() => history.listen(setState), [history]);\n return /*#__PURE__*/createElement(Router, {\n basename: basename,\n children: children,\n location: state.location,\n navigationType: state.action,\n navigator: history\n });\n}\n\n/**\n * A `` that accepts a pre-instantiated history object. It's important\n * to note that using your own history object is highly discouraged and may add\n * two versions of the history library to your bundles unless you use the same\n * version of the history library that React Router uses internally.\n */\nfunction HistoryRouter(_ref3) {\n let {\n basename,\n children,\n history\n } = _ref3;\n const [state, setState] = useState({\n action: history.action,\n location: history.location\n });\n useLayoutEffect(() => history.listen(setState), [history]);\n return /*#__PURE__*/createElement(Router, {\n basename: basename,\n children: children,\n location: state.location,\n navigationType: state.action,\n navigator: history\n });\n}\n\nif (process.env.NODE_ENV !== \"production\") {\n HistoryRouter.displayName = \"unstable_HistoryRouter\";\n}\n\nfunction isModifiedEvent(event) {\n return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\n\n/**\n * The public API for rendering a history-aware .\n */\nconst Link = /*#__PURE__*/forwardRef(function LinkWithRef(_ref4, ref) {\n let {\n onClick,\n reloadDocument,\n replace = false,\n state,\n target,\n to\n } = _ref4,\n rest = _objectWithoutPropertiesLoose(_ref4, _excluded);\n\n let href = useHref(to);\n let internalOnClick = useLinkClickHandler(to, {\n replace,\n state,\n target\n });\n\n function handleClick(event) {\n if (onClick) onClick(event);\n\n if (!event.defaultPrevented && !reloadDocument) {\n internalOnClick(event);\n }\n }\n\n return (\n /*#__PURE__*/\n // eslint-disable-next-line jsx-a11y/anchor-has-content\n createElement(\"a\", _extends({}, rest, {\n href: href,\n onClick: handleClick,\n ref: ref,\n target: target\n }))\n );\n});\n\nif (process.env.NODE_ENV !== \"production\") {\n Link.displayName = \"Link\";\n}\n\n/**\n * A wrapper that knows if it's \"active\" or not.\n */\nconst NavLink = /*#__PURE__*/forwardRef(function NavLinkWithRef(_ref5, ref) {\n let {\n \"aria-current\": ariaCurrentProp = \"page\",\n caseSensitive = false,\n className: classNameProp = \"\",\n end = false,\n style: styleProp,\n to,\n children\n } = _ref5,\n rest = _objectWithoutPropertiesLoose(_ref5, _excluded2);\n\n let location = useLocation();\n let path = useResolvedPath(to);\n let locationPathname = location.pathname;\n let toPathname = path.pathname;\n\n if (!caseSensitive) {\n locationPathname = locationPathname.toLowerCase();\n toPathname = toPathname.toLowerCase();\n }\n\n let isActive = locationPathname === toPathname || !end && locationPathname.startsWith(toPathname) && locationPathname.charAt(toPathname.length) === \"/\";\n let ariaCurrent = isActive ? ariaCurrentProp : undefined;\n let className;\n\n if (typeof classNameProp === \"function\") {\n className = classNameProp({\n isActive\n });\n } else {\n // If the className prop is not a function, we use a default `active`\n // class for s that are active. In v5 `active` was the default\n // value for `activeClassName`, but we are removing that API and can still\n // use the old default behavior for a cleaner upgrade path and keep the\n // simple styling rules working as they currently do.\n className = [classNameProp, isActive ? \"active\" : null].filter(Boolean).join(\" \");\n }\n\n let style = typeof styleProp === \"function\" ? styleProp({\n isActive\n }) : styleProp;\n return /*#__PURE__*/createElement(Link, _extends({}, rest, {\n \"aria-current\": ariaCurrent,\n className: className,\n ref: ref,\n style: style,\n to: to\n }), typeof children === \"function\" ? children({\n isActive\n }) : children);\n});\n\nif (process.env.NODE_ENV !== \"production\") {\n NavLink.displayName = \"NavLink\";\n} ////////////////////////////////////////////////////////////////////////////////\n// HOOKS\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Handles the click behavior for router `` components. This is useful if\n * you need to create custom `` components with the same click behavior we\n * use in our exported ``.\n */\n\n\nfunction useLinkClickHandler(to, _temp) {\n let {\n target,\n replace: replaceProp,\n state\n } = _temp === void 0 ? {} : _temp;\n let navigate = useNavigate();\n let location = useLocation();\n let path = useResolvedPath(to);\n return useCallback(event => {\n if (event.button === 0 && ( // Ignore everything but left clicks\n !target || target === \"_self\") && // Let browser handle \"target=_blank\" etc.\n !isModifiedEvent(event) // Ignore clicks with modifier keys\n ) {\n event.preventDefault(); // If the URL hasn't changed, a regular will do a replace instead of\n // a push, so do the same here.\n\n let replace = !!replaceProp || createPath(location) === createPath(path);\n navigate(to, {\n replace,\n state\n });\n }\n }, [location, navigate, path, replaceProp, state, target, to]);\n}\n/**\n * A convenient wrapper for reading and writing search parameters via the\n * URLSearchParams interface.\n */\n\nfunction useSearchParams(defaultInit) {\n process.env.NODE_ENV !== \"production\" ? warning(typeof URLSearchParams !== \"undefined\", \"You cannot use the `useSearchParams` hook in a browser that does not \" + \"support the URLSearchParams API. If you need to support Internet \" + \"Explorer 11, we recommend you load a polyfill such as \" + \"https://github.com/ungap/url-search-params\\n\\n\" + \"If you're unsure how to load polyfills, we recommend you check out \" + \"https://polyfill.io/v3/ which provides some recommendations about how \" + \"to load polyfills only for users that need them, instead of for every \" + \"user.\") : void 0;\n let defaultSearchParamsRef = useRef(createSearchParams(defaultInit));\n let location = useLocation();\n let searchParams = useMemo(() => {\n let searchParams = createSearchParams(location.search);\n\n for (let key of defaultSearchParamsRef.current.keys()) {\n if (!searchParams.has(key)) {\n defaultSearchParamsRef.current.getAll(key).forEach(value => {\n searchParams.append(key, value);\n });\n }\n }\n\n return searchParams;\n }, [location.search]);\n let navigate = useNavigate();\n let setSearchParams = useCallback((nextInit, navigateOptions) => {\n navigate(\"?\" + createSearchParams(nextInit), navigateOptions);\n }, [navigate]);\n return [searchParams, setSearchParams];\n}\n\n/**\n * Creates a URLSearchParams object using the given initializer.\n *\n * This is identical to `new URLSearchParams(init)` except it also\n * supports arrays as values in the object form of the initializer\n * instead of just strings. This is convenient when you need multiple\n * values for a given key, but don't want to use an array initializer.\n *\n * For example, instead of:\n *\n * let searchParams = new URLSearchParams([\n * ['sort', 'name'],\n * ['sort', 'price']\n * ]);\n *\n * you can do:\n *\n * let searchParams = createSearchParams({\n * sort: ['name', 'price']\n * });\n */\nfunction createSearchParams(init) {\n if (init === void 0) {\n init = \"\";\n }\n\n return new URLSearchParams(typeof init === \"string\" || Array.isArray(init) || init instanceof URLSearchParams ? init : Object.keys(init).reduce((memo, key) => {\n let value = init[key];\n return memo.concat(Array.isArray(value) ? value.map(v => [key, v]) : [[key, value]]);\n }, []));\n}\n\nexport { BrowserRouter, HashRouter, Link, NavLink, createSearchParams, HistoryRouter as unstable_HistoryRouter, useLinkClickHandler, useSearchParams };\n//# sourceMappingURL=index.js.map\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\n/**\n * Nests React components as ordered in array. We use this to\n * simplify composition a Mode specify's in it's configuration\n * for React Contexts that should wrap a Mode Route.\n */\nexport default function Compose(props) {\n const { components = [], children } = props;\n\n return (\n \n {components.reduceRight((acc, curr) => {\n const [Comp, props] = Array.isArray(curr)\n ? [curr[0], curr[1]]\n : [curr, {}];\n return {acc};\n }, children)}\n \n );\n}\n\n// https://juliuskoronci.medium.com/avoid-a-long-list-of-react-providers-c45a269d80c1\nCompose.propTypes = {\n components: PropTypes.array,\n children: PropTypes.node.isRequired,\n};\n","import React, { useState, createContext, useContext } from 'react';\nimport PropTypes from 'prop-types';\n\nconst appConfigContext = createContext(null);\nconst { Provider } = appConfigContext;\n\nexport const useAppConfig = () => useContext(appConfigContext);\n\nexport function AppConfigProvider({ children, value: initAppConfig }) {\n const [appConfig, setAppConfig] = useState(initAppConfig);\n\n return {children};\n}\n\nAppConfigProvider.propTypes = {\n children: PropTypes.any,\n value: PropTypes.any,\n};\n\nexport default AppConfigProvider;\n","/* eslint-disable react/jsx-props-no-spreading */\nimport React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { MODULE_TYPES } from '@ohif/core';\n//\nimport { extensionManager } from '../App.tsx';\nimport { useParams, useLocation } from 'react-router';\n\n/**\n * Uses route properties to determine the data source that should be passed\n * to the child layout template. In some instances, initiates requests and\n * passes data as props.\n *\n * @param {object} props\n * @param {function} props.children - Layout Template React Component\n */\nfunction DataSourceWrapper(props) {\n const { children: LayoutTemplate, ...rest } = props;\n const params = useParams();\n const location = useLocation();\n\n // TODO: Fetch by type, name, etc?\n const dataSourceModules = extensionManager.modules[MODULE_TYPES.DATA_SOURCE];\n // TODO: Good usecase for flatmap?\n const webApiDataSources = dataSourceModules.reduce((acc, curr) => {\n const mods = [];\n curr.module.forEach(mod => {\n if (mod.type === 'webApi') {\n mods.push(mod);\n }\n });\n return acc.concat(mods);\n }, []);\n\n // Grabbing first defined for now - should get active\n // TODO: Why does this return an array?\n const dataSource = webApiDataSources\n .map(ds => extensionManager.getDataSources(ds.name)?.[0])\n .find(it => it !== undefined);\n if (!dataSource) {\n throw new Error(\n `No data source found for any of ${webApiDataSources.map(it => it.name)}`\n );\n }\n // Route props --> studies.mapParams\n // mapParams --> studies.search\n // studies.search --> studies.processResults\n // studies.processResults --> \n // But only for LayoutTemplate type of 'list'?\n // Or no data fetching here, and just hand down my source\n const STUDIES_LIMIT = 101;\n const [data, setData] = useState({\n studies: [],\n total: 0,\n resultsPerPage: 25,\n pageNumber: 1,\n location: 'Not a valid location, causes first load to occur',\n });\n const [isLoading, setIsLoading] = useState(false);\n\n useEffect(() => {\n const queryFilterValues = _getQueryFilterValues(\n location.search,\n STUDIES_LIMIT\n );\n\n // 204: no content\n async function getData() {\n setIsLoading(true);\n const studies = await dataSource.query.studies.search(queryFilterValues);\n\n setData({\n studies: studies || [],\n total: studies.length,\n resultsPerPage: queryFilterValues.resultsPerPage,\n pageNumber: queryFilterValues.pageNumber,\n location,\n });\n\n setIsLoading(false);\n }\n\n try {\n // Cache invalidation :thinking:\n // - Anytime change is not just next/previous page\n // - And we didn't cross a result offset range\n const isSamePage = data.pageNumber === queryFilterValues.pageNumber;\n const previousOffset =\n Math.floor((data.pageNumber * data.resultsPerPage) / STUDIES_LIMIT) *\n (STUDIES_LIMIT - 1);\n const newOffset =\n Math.floor(\n (queryFilterValues.pageNumber * queryFilterValues.resultsPerPage) /\n STUDIES_LIMIT\n ) *\n (STUDIES_LIMIT - 1);\n const isLocationUpdated = data.location !== location;\n const isDataInvalid =\n !isSamePage ||\n (!isLoading && (newOffset !== previousOffset || isLocationUpdated));\n\n if (isDataInvalid) {\n getData();\n }\n } catch (ex) {\n console.warn(ex);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [data, location, params, isLoading, setIsLoading]);\n // queryFilterValues\n\n // TODO: Better way to pass DataSource?\n return (\n \n );\n}\n\nDataSourceWrapper.propTypes = {\n /** Layout Component to wrap with a Data Source */\n children: PropTypes.oneOfType([PropTypes.element, PropTypes.func]).isRequired,\n};\n\nexport default DataSourceWrapper;\n\n/**\n * Duplicated in `workList`\n * Need generic that can be shared? Isn't this what qs is for?\n * @param {*} query\n */\nfunction _getQueryFilterValues(query, queryLimit) {\n query = new URLSearchParams(query);\n\n const pageNumber = _tryParseInt(query.get('pageNumber'), 1);\n const resultsPerPage = _tryParseInt(query.get('resultsPerPage'), 25);\n\n const queryFilterValues = {\n // DCM\n patientId: query.get('mrn'),\n patientName: query.get('patientName'),\n studyDescription: query.get('description'),\n modalitiesInStudy:\n query.get('modalities') && query.get('modalities').split(','),\n accessionNumber: query.get('accession'),\n //\n startDate: query.get('startDate'),\n endDate: query.get('endDate'),\n page: _tryParseInt(query.get('page'), undefined),\n pageNumber,\n resultsPerPage,\n // Rarely supported server-side\n sortBy: query.get('sortBy'),\n sortDirection: query.get('sortDirection'),\n // Offset...\n offset:\n Math.floor((pageNumber * resultsPerPage) / queryLimit) * (queryLimit - 1),\n // Config for dynamic config urls\n config: query.get('configUrl'),\n };\n\n // patientName: good\n // studyDescription: good\n // accessionNumber: good\n\n // Delete null/undefined keys\n Object.keys(queryFilterValues).forEach(\n key => queryFilterValues[key] == null && delete queryFilterValues[key]\n );\n\n return queryFilterValues;\n\n function _tryParseInt(str, defaultValue) {\n let retValue = defaultValue;\n if (str !== null) {\n if (str.length > 0) {\n if (!isNaN(str)) {\n retValue = parseInt(str);\n }\n }\n }\n return retValue;\n }\n}\n","const filtersMeta = [\n {\n name: 'patientName',\n displayName: 'Patient Name',\n inputType: 'Text',\n isSortable: true,\n gridCol: 4,\n },\n {\n name: 'mrn',\n displayName: 'MRN',\n inputType: 'Text',\n isSortable: true,\n gridCol: 3,\n },\n {\n name: 'studyDate',\n displayName: 'Study date',\n inputType: 'DateRange',\n isSortable: true,\n gridCol: 5,\n },\n {\n name: 'description',\n displayName: 'Description',\n inputType: 'Text',\n isSortable: true,\n gridCol: 4,\n },\n {\n name: 'modalities',\n displayName: 'Modality',\n inputType: 'MultiSelect',\n inputProps: {\n options: [\n { value: 'AR', label: 'AR' },\n { value: 'ASMT', label: 'ASMT' },\n { value: 'AU', label: 'AU' },\n { value: 'BDUS', label: 'BDUS' },\n { value: 'BI', label: 'BI' },\n { value: 'BMD', label: 'BMD' },\n { value: 'CR', label: 'CR' },\n { value: 'CT', label: 'CT' },\n { value: 'CTPROTOCOL', label: 'CTPROTOCOL' },\n { value: 'DG', label: 'DG' },\n { value: 'DOC', label: 'DOC' },\n { value: 'DX', label: 'DX' },\n { value: 'ECG', label: 'ECG' },\n { value: 'EPS', label: 'EPS' },\n { value: 'ES', label: 'ES' },\n { value: 'FID', label: 'FID' },\n { value: 'GM', label: 'GM' },\n { value: 'HC', label: 'HC' },\n { value: 'HD', label: 'HD' },\n { value: 'IO', label: 'IO' },\n { value: 'IOL', label: 'IOL' },\n { value: 'IVOCT', label: 'IVOCT' },\n { value: 'IVUS', label: 'IVUS' },\n { value: 'KER', label: 'KER' },\n { value: 'KO', label: 'KO' },\n { value: 'LEN', label: 'LEN' },\n { value: 'LS', label: 'LS' },\n { value: 'MG', label: 'MG' },\n { value: 'MR', label: 'MR' },\n { value: 'M3D', label: 'M3D' },\n { value: 'NM', label: 'NM' },\n { value: 'OAM', label: 'OAM' },\n { value: 'OCT', label: 'OCT' },\n { value: 'OP', label: 'OP' },\n { value: 'OPM', label: 'OPM' },\n { value: 'OPT', label: 'OPT' },\n { value: 'OPTBSV', label: 'OPTBSV' },\n { value: 'OPTENF', label: 'OPTENF' },\n { value: 'OPV', label: 'OPV' },\n { value: 'OSS', label: 'OSS' },\n { value: 'OT', label: 'OT' },\n { value: 'PLAN', label: 'PLAN' },\n { value: 'PR', label: 'PR' },\n { value: 'PT', label: 'PT' },\n { value: 'PX', label: 'PX' },\n { value: 'REG', label: 'REG' },\n { value: 'RESP', label: 'RESP' },\n { value: 'RF', label: 'RF' },\n { value: 'RG', label: 'RG' },\n { value: 'RTDOSE', label: 'RTDOSE' },\n { value: 'RTIMAGE', label: 'RTIMAGE' },\n { value: 'RTINTENT', label: 'RTINTENT' },\n { value: 'RTPLAN', label: 'RTPLAN' },\n { value: 'RTRAD', label: 'RTRAD' },\n { value: 'RTRECORD', label: 'RTRECORD' },\n { value: 'RTSEGANN', label: 'RTSEGANN' },\n { value: 'RTSTRUCT', label: 'RTSTRUCT' },\n { value: 'RWV', label: 'RWV' },\n { value: 'SEG', label: 'SEG' },\n { value: 'SM', label: 'SM' },\n { value: 'SMR', label: 'SMR' },\n { value: 'SR', label: 'SR' },\n { value: 'SRF', label: 'SRF' },\n { value: 'STAIN', label: 'STAIN' },\n { value: 'TEXTUREMAP', label: 'TEXTUREMAP' },\n { value: 'TG', label: 'TG' },\n { value: 'US', label: 'US' },\n { value: 'VA', label: 'VA' },\n { value: 'XA', label: 'XA' },\n { value: 'XC', label: 'XC' },\n ],\n },\n isSortable: true,\n gridCol: 3,\n },\n {\n name: 'accession',\n displayName: 'Accession',\n inputType: 'Text',\n isSortable: true,\n gridCol: 3,\n },\n {\n name: 'instances',\n displayName: 'Instances',\n inputType: 'None',\n isSortable: false,\n gridCol: 2,\n },\n];\n\nexport default filtersMeta;\n","import { useState, useEffect } from 'react';\n\n/**\n * See: https://usehooks.com/useDebounce/\n *\n * @param {*} value\n * @param {number} delay - delat in ms\n */\nexport default function useDebounce(value, delay) {\n // State and setters for debounced value\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(\n () => {\n // Update debounced value after delay\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n // Cancel the timeout if value changes (also on delay change or unmount)\n // This is how we prevent debounced value from updating if value is changed ...\n // .. within the delay period. Timeout gets cleared and restarted.\n return () => {\n clearTimeout(handler);\n };\n },\n [value, delay] // Only re-call effect if value or delay changes\n );\n\n return debouncedValue;\n}\n","import { useLocation } from 'react-router-dom';\n\nexport default function useQuery() {\n return new URLSearchParams(useLocation().search);\n}\n","import React, { useState, useEffect } from 'react';\nimport classnames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { Link, useNavigate } from 'react-router-dom';\nimport moment from 'moment';\nimport qs from 'query-string';\nimport isEqual from 'lodash.isequal';\nimport { useTranslation } from 'react-i18next';\n//\nimport filtersMeta from './filtersMeta.js';\nimport { useAppConfig } from '@state';\nimport { useDebounce, useQuery } from '@hooks';\nimport { utils, hotkeys } from '@ohif/core';\n\nimport {\n Icon,\n StudyListExpandedRow,\n Button,\n EmptyStudies,\n StudyListTable,\n StudyListPagination,\n StudyListFilter,\n TooltipClipboard,\n Header,\n useModal,\n AboutModal,\n UserPreferences,\n LoadingIndicatorProgress,\n} from '@ohif/ui';\n\nimport i18n from '@ohif/i18n';\n\nconst { sortBySeriesDate } = utils;\n\nconst { availableLanguages, defaultLanguage, currentLanguage } = i18n;\n\nconst seriesInStudiesMap = new Map();\n\n/**\n * TODO:\n * - debounce `setFilterValues` (150ms?)\n */\nfunction WorkList({\n data: studies,\n dataTotal: studiesTotal,\n isLoadingData,\n dataSource,\n hotkeysManager,\n}) {\n const { hotkeyDefinitions, hotkeyDefaults } = hotkeysManager;\n const { show, hide } = useModal();\n const { t } = useTranslation();\n // ~ Modes\n const [appConfig] = useAppConfig();\n // ~ Filters\n const query = useQuery();\n const navigate = useNavigate();\n const STUDIES_LIMIT = 101;\n const queryFilterValues = _getQueryFilterValues(query);\n const [filterValues, _setFilterValues] = useState({\n ...defaultFilterValues,\n ...queryFilterValues,\n });\n\n const debouncedFilterValues = useDebounce(filterValues, 200);\n const { resultsPerPage, pageNumber, sortBy, sortDirection } = filterValues;\n\n /*\n * The default sort value keep the filters synchronized with runtime conditional sorting\n * Only applied if no other sorting is specified and there are less than 101 studies\n */\n\n const canSort = studiesTotal < STUDIES_LIMIT;\n const shouldUseDefaultSort = sortBy === '' || !sortBy;\n const sortModifier = sortDirection === 'descending' ? 1 : -1;\n const defaultSortValues =\n shouldUseDefaultSort && canSort\n ? { sortBy: 'studyDate', sortDirection: 'ascending' }\n : {};\n const sortedStudies = studies;\n\n if (canSort) {\n studies.sort((s1, s2) => {\n if (shouldUseDefaultSort) {\n const ascendingSortModifier = -1;\n return _sortStringDates(s1, s2, ascendingSortModifier);\n }\n\n const s1Prop = s1[sortBy];\n const s2Prop = s2[sortBy];\n\n if (typeof s1Prop === 'string' && typeof s2Prop === 'string') {\n return s1Prop.localeCompare(s2Prop) * sortModifier;\n } else if (typeof s1Prop === 'number' && typeof s2Prop === 'number') {\n return (s1Prop > s2Prop ? 1 : -1) * sortModifier;\n } else if (!s1Prop && s2Prop) {\n return -1 * sortModifier;\n } else if (!s2Prop && s1Prop) {\n return 1 * sortModifier;\n } else if (sortBy === 'studyDate') {\n return _sortStringDates(s1, s2, sortModifier);\n }\n\n return 0;\n });\n }\n\n // ~ Rows & Studies\n const [expandedRows, setExpandedRows] = useState([]);\n const [studiesWithSeriesData, setStudiesWithSeriesData] = useState([]);\n const numOfStudies = studiesTotal;\n\n const setFilterValues = val => {\n if (filterValues.pageNumber === val.pageNumber) {\n val.pageNumber = 1;\n }\n _setFilterValues(val);\n setExpandedRows([]);\n };\n\n const onPageNumberChange = newPageNumber => {\n const oldPageNumber = filterValues.pageNumber;\n const rollingPageNumberMod = Math.floor(101 / filterValues.resultsPerPage);\n const rollingPageNumber = oldPageNumber % rollingPageNumberMod;\n const isNextPage = newPageNumber > oldPageNumber;\n const hasNextPage =\n Math.max(rollingPageNumber, 1) * resultsPerPage < numOfStudies;\n\n if (isNextPage && !hasNextPage) {\n return;\n }\n\n setFilterValues({ ...filterValues, pageNumber: newPageNumber });\n };\n\n const onResultsPerPageChange = newResultsPerPage => {\n setFilterValues({\n ...filterValues,\n pageNumber: 1,\n resultsPerPage: Number(newResultsPerPage),\n });\n };\n\n // Set body style\n useEffect(() => {\n document.body.classList.add('bg-black');\n return () => {\n document.body.classList.remove('bg-black');\n };\n }, []);\n\n // Sync URL query parameters with filters\n useEffect(() => {\n if (!debouncedFilterValues) {\n return;\n }\n\n const queryString = {};\n Object.keys(defaultFilterValues).forEach(key => {\n const defaultValue = defaultFilterValues[key];\n const currValue = debouncedFilterValues[key];\n\n // TODO: nesting/recursion?\n if (key === 'studyDate') {\n if (\n currValue.startDate &&\n defaultValue.startDate !== currValue.startDate\n ) {\n queryString.startDate = currValue.startDate;\n }\n if (currValue.endDate && defaultValue.endDate !== currValue.endDate) {\n queryString.endDate = currValue.endDate;\n }\n } else if (key === 'modalities' && currValue.length) {\n queryString.modalities = currValue.join(',');\n } else if (currValue !== defaultValue) {\n queryString[key] = currValue;\n }\n });\n\n const search = qs.stringify(queryString, {\n skipNull: true,\n skipEmptyString: true,\n });\n\n navigate({\n pathname: '/',\n search: search ? `?${search}` : undefined,\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [debouncedFilterValues]);\n\n // Query for series information\n useEffect(() => {\n const fetchSeries = async studyInstanceUid => {\n try {\n const series = await dataSource.query.series.search(studyInstanceUid);\n seriesInStudiesMap.set(studyInstanceUid, sortBySeriesDate(series));\n setStudiesWithSeriesData([...studiesWithSeriesData, studyInstanceUid]);\n } catch (ex) {\n // TODO: UI Notification Service\n console.warn(ex);\n }\n };\n\n // TODO: WHY WOULD YOU USE AN INDEX OF 1?!\n // Note: expanded rows index begins at 1\n for (let z = 0; z < expandedRows.length; z++) {\n const expandedRowIndex = expandedRows[z] - 1;\n const studyInstanceUid = sortedStudies[expandedRowIndex].studyInstanceUid;\n\n if (studiesWithSeriesData.includes(studyInstanceUid)) {\n continue;\n }\n\n fetchSeries(studyInstanceUid);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [expandedRows, studies]);\n\n const isFiltering = (filterValues, defaultFilterValues) => {\n return !isEqual(filterValues, defaultFilterValues);\n };\n\n const rollingPageNumberMod = Math.floor(101 / resultsPerPage);\n const rollingPageNumber = (pageNumber - 1) % rollingPageNumberMod;\n const offset = resultsPerPage * rollingPageNumber;\n const offsetAndTake = offset + resultsPerPage;\n const tableDataSource = sortedStudies.map((study, key) => {\n const rowKey = key + 1;\n const isExpanded = expandedRows.some(k => k === rowKey);\n const {\n studyInstanceUid,\n accession,\n modalities,\n instances,\n description,\n mrn,\n patientName,\n date,\n time,\n } = study;\n const studyDate =\n date &&\n moment(date, ['YYYYMMDD', 'YYYY.MM.DD'], true).isValid() &&\n moment(date, ['YYYYMMDD', 'YYYY.MM.DD']).format('MMM-DD-YYYY');\n const studyTime =\n time &&\n moment(time, ['HH', 'HHmm', 'HHmmss', 'HHmmss.SSS']).isValid() &&\n moment(time, ['HH', 'HHmm', 'HHmmss', 'HHmmss.SSS']).format('hh:mm A');\n\n return {\n row: [\n {\n key: 'patientName',\n content: patientName ? (\n {patientName}\n ) : (\n (Empty)\n ),\n gridCol: 4,\n },\n {\n key: 'mrn',\n content: {mrn},\n gridCol: 3,\n },\n {\n key: 'studyDate',\n content: (\n <>\n {studyDate && {studyDate}}\n {studyTime && {studyTime}}\n \n ),\n title: `${studyDate || ''} ${studyTime || ''}`,\n gridCol: 5,\n },\n {\n key: 'description',\n content: {description},\n gridCol: 4,\n },\n {\n key: 'modality',\n content: modalities,\n title: modalities,\n gridCol: 3,\n },\n {\n key: 'accession',\n content: {accession},\n gridCol: 3,\n },\n {\n key: 'instances',\n content: (\n <>\n \n {instances}\n \n ),\n title: (instances || 0).toString(),\n gridCol: 4,\n },\n ],\n // Todo: This is actually running for all rows, even if they are\n // not clicked on.\n expandedContent: (\n {\n return {\n description: s.description || '(empty)',\n seriesNumber: s.seriesNumber ?? '',\n modality: s.modality || '',\n instances: s.numSeriesInstances || '',\n };\n })\n : []\n }\n >\n {appConfig.modes.map((mode, i) => {\n const isFirst = i === 0;\n\n const isValidMode = mode.isValidMode({ modalities });\n // TODO: Modes need a default/target route? We mostly support a single one for now.\n // We should also be using the route path, but currently are not\n // mode.routeName\n // mode.routes[x].path\n // Don't specify default data source, and it should just be picked up... (this may not currently be the case)\n // How do we know which params to pass? Today, it's just StudyInstanceUIDs and configUrl if exists\n let query = new URLSearchParams();\n query.append('StudyInstanceUIDs', studyInstanceUid)\n if (filterValues.configUrl) {\n query.append('configUrl', filterValues.configUrl)\n }\n return (\n \n } // launch-arrow | launch-info\n className={classnames('font-medium\t', { 'ml-2': !isFirst })}\n onClick={() => {}}\n >\n {t(`Modes:${mode.displayName}`)}\n \n \n );\n })}\n \n ),\n onClickRow: () =>\n setExpandedRows(s =>\n isExpanded ? s.filter(n => rowKey !== n) : [...s, rowKey]\n ),\n isExpanded,\n };\n });\n\n const hasStudies = numOfStudies > 0;\n const versionNumber = process.env.VERSION_NUMBER;\n const buildNumber = process.env.BUILD_NUM;\n\n const menuOptions = [\n {\n title: t('Header:About'),\n icon: 'info',\n onClick: () =>\n show({\n content: AboutModal,\n title: 'About OHIF Viewer',\n contentProps: { versionNumber, buildNumber },\n }),\n },\n {\n title: t('Header:Preferences'),\n icon: 'settings',\n onClick: () =>\n show({\n title: t('UserPreferencesModal:User Preferences'),\n content: UserPreferences,\n contentProps: {\n hotkeyDefaults: hotkeysManager.getValidHotkeyDefinitions(\n hotkeyDefaults\n ),\n hotkeyDefinitions,\n onCancel: hide,\n currentLanguage: currentLanguage(),\n availableLanguages,\n defaultLanguage,\n onSubmit: state => {\n i18n.changeLanguage(state.language.value);\n hotkeysManager.setHotkeys(state.hotkeyDefinitions);\n hide();\n },\n onReset: () => hotkeysManager.restoreDefaultBindings(),\n hotkeysModule: hotkeys,\n },\n }),\n },\n ];\n\n if (appConfig.oidc) {\n menuOptions.push({\n icon: 'power-off',\n title: t('Header:Logout'),\n onClick: () => {\n navigate(\n `/logout?redirect_uri=${encodeURIComponent(window.location.href)}`\n );\n },\n });\n }\n\n return (\n \n \n 100 ? 101 : numOfStudies}\n filtersMeta={filtersMeta}\n filterValues={{ ...filterValues, ...defaultSortValues }}\n onChange={setFilterValues}\n clearFilters={() => setFilterValues(defaultFilterValues)}\n isFiltering={isFiltering(filterValues, defaultFilterValues)}\n />\n {hasStudies ? (\n <>\n \n \n \n ) : (\n
\n {appConfig.showLoadingIndicator && isLoadingData ? (\n \n ) : (\n \n )}\n
\n )}\n \n );\n}\n\nWorkList.propTypes = {\n data: PropTypes.array.isRequired,\n dataSource: PropTypes.shape({\n query: PropTypes.object.isRequired,\n }).isRequired,\n isLoadingData: PropTypes.bool.isRequired,\n};\n\nconst defaultFilterValues = {\n patientName: '',\n mrn: '',\n studyDate: {\n startDate: null,\n endDate: null,\n },\n description: '',\n modalities: [],\n accession: '',\n sortBy: '',\n sortDirection: 'none',\n pageNumber: 1,\n resultsPerPage: 25,\n configUrl: null,\n};\n\nfunction _tryParseInt(str, defaultValue) {\n let retValue = defaultValue;\n if (str !== null) {\n if (str.length > 0) {\n if (!isNaN(str)) {\n retValue = parseInt(str);\n }\n }\n }\n return retValue;\n}\n\nfunction _getQueryFilterValues(query) {\n const queryFilterValues = {\n patientName: query.get('patientName'),\n mrn: query.get('mrn'),\n studyDate: {\n startDate: query.get('startDate'),\n endDate: query.get('endDate'),\n },\n description: query.get('description'),\n modalities: query.get('modalities')\n ? query.get('modalities').split(',')\n : [],\n accession: query.get('accession'),\n sortBy: query.get('sortBy'),\n sortDirection: query.get('sortDirection'),\n pageNumber: _tryParseInt(query.get('pageNumber'), undefined),\n resultsPerPage: _tryParseInt(query.get('resultsPerPage'), undefined),\n configUrl: query.get('configUrl'),\n };\n\n // Delete null/undefined keys\n Object.keys(queryFilterValues).forEach(\n key => queryFilterValues[key] == null && delete queryFilterValues[key]\n );\n\n return queryFilterValues;\n}\n\nfunction _sortStringDates(s1, s2, sortModifier) {\n // TODO: Delimiters are non-standard. Should we support them?\n const s1Date = moment(s1.date, ['YYYYMMDD', 'YYYY.MM.DD'], true);\n const s2Date = moment(s2.date, ['YYYYMMDD', 'YYYY.MM.DD'], true);\n\n if (s1Date.isValid() && s2Date.isValid()) {\n return (\n (s1Date.toISOString() > s2Date.toISOString() ? 1 : -1) * sortModifier\n );\n } else if (s1Date.isValid()) {\n return sortModifier;\n } else if (s2Date.isValid()) {\n return -1 * sortModifier;\n }\n}\n\nexport default WorkList;\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","export var COMMON_MIME_TYPES = new Map([\n ['avi', 'video/avi'],\n ['gif', 'image/gif'],\n ['ico', 'image/x-icon'],\n ['jpeg', 'image/jpeg'],\n ['jpg', 'image/jpeg'],\n ['mkv', 'video/x-matroska'],\n ['mov', 'video/quicktime'],\n ['mp4', 'video/mp4'],\n ['pdf', 'application/pdf'],\n ['png', 'image/png'],\n ['zip', 'application/zip'],\n ['doc', 'application/msword'],\n ['docx', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document']\n]);\nexport function toFileWithPath(file, path) {\n var f = withMimeType(file);\n if (typeof f.path !== 'string') { // on electron, path is already set to the absolute path\n var webkitRelativePath = file.webkitRelativePath;\n Object.defineProperty(f, 'path', {\n value: typeof path === 'string'\n ? path\n // If is set,\n // the File will have a {webkitRelativePath} property\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/webkitdirectory\n : typeof webkitRelativePath === 'string' && webkitRelativePath.length > 0\n ? webkitRelativePath\n : file.name,\n writable: false,\n configurable: false,\n enumerable: true\n });\n }\n return f;\n}\nfunction withMimeType(file) {\n var name = file.name;\n var hasExtension = name && name.lastIndexOf('.') !== -1;\n if (hasExtension && !file.type) {\n var ext = name.split('.')\n .pop().toLowerCase();\n var type = COMMON_MIME_TYPES.get(ext);\n if (type) {\n Object.defineProperty(file, 'type', {\n value: type,\n writable: false,\n configurable: false,\n enumerable: true\n });\n }\n }\n return file;\n}\n//# sourceMappingURL=file.js.map","import { __awaiter, __generator, __read, __spread } from \"tslib\";\nimport { toFileWithPath } from './file';\nvar FILES_TO_IGNORE = [\n // Thumbnail cache files for macOS and Windows\n '.DS_Store',\n 'Thumbs.db' // Windows\n];\n/**\n * Convert a DragEvent's DataTrasfer object to a list of File objects\n * NOTE: If some of the items are folders,\n * everything will be flattened and placed in the same list but the paths will be kept as a {path} property.\n * @param evt\n */\nexport function fromEvent(evt) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, isDragEvt(evt) && evt.dataTransfer\n ? getDataTransferFiles(evt.dataTransfer, evt.type)\n : getInputFiles(evt)];\n });\n });\n}\nfunction isDragEvt(value) {\n return !!value.dataTransfer;\n}\nfunction getInputFiles(evt) {\n var files = isInput(evt.target)\n ? evt.target.files\n ? fromList(evt.target.files)\n : []\n : [];\n return files.map(function (file) { return toFileWithPath(file); });\n}\nfunction isInput(value) {\n return value !== null;\n}\nfunction getDataTransferFiles(dt, type) {\n return __awaiter(this, void 0, void 0, function () {\n var items, files;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!dt.items) return [3 /*break*/, 2];\n items = fromList(dt.items)\n .filter(function (item) { return item.kind === 'file'; });\n // According to https://html.spec.whatwg.org/multipage/dnd.html#dndevents,\n // only 'dragstart' and 'drop' has access to the data (source node)\n if (type !== 'drop') {\n return [2 /*return*/, items];\n }\n return [4 /*yield*/, Promise.all(items.map(toFilePromises))];\n case 1:\n files = _a.sent();\n return [2 /*return*/, noIgnoredFiles(flatten(files))];\n case 2: return [2 /*return*/, noIgnoredFiles(fromList(dt.files)\n .map(function (file) { return toFileWithPath(file); }))];\n }\n });\n });\n}\nfunction noIgnoredFiles(files) {\n return files.filter(function (file) { return FILES_TO_IGNORE.indexOf(file.name) === -1; });\n}\n// IE11 does not support Array.from()\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from#Browser_compatibility\n// https://developer.mozilla.org/en-US/docs/Web/API/FileList\n// https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItemList\nfunction fromList(items) {\n var files = [];\n // tslint:disable: prefer-for-of\n for (var i = 0; i < items.length; i++) {\n var file = items[i];\n files.push(file);\n }\n return files;\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItem\nfunction toFilePromises(item) {\n if (typeof item.webkitGetAsEntry !== 'function') {\n return fromDataTransferItem(item);\n }\n var entry = item.webkitGetAsEntry();\n // Safari supports dropping an image node from a different window and can be retrieved using\n // the DataTransferItem.getAsFile() API\n // NOTE: FileSystemEntry.file() throws if trying to get the file\n if (entry && entry.isDirectory) {\n return fromDirEntry(entry);\n }\n return fromDataTransferItem(item);\n}\nfunction flatten(items) {\n return items.reduce(function (acc, files) { return __spread(acc, (Array.isArray(files) ? flatten(files) : [files])); }, []);\n}\nfunction fromDataTransferItem(item) {\n var file = item.getAsFile();\n if (!file) {\n return Promise.reject(item + \" is not a File\");\n }\n var fwp = toFileWithPath(file);\n return Promise.resolve(fwp);\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/FileSystemEntry\nfunction fromEntry(entry) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, entry.isDirectory ? fromDirEntry(entry) : fromFileEntry(entry)];\n });\n });\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryEntry\nfunction fromDirEntry(entry) {\n var reader = entry.createReader();\n return new Promise(function (resolve, reject) {\n var entries = [];\n function readEntries() {\n var _this = this;\n // https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryEntry/createReader\n // https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryReader/readEntries\n reader.readEntries(function (batch) { return __awaiter(_this, void 0, void 0, function () {\n var files, err_1, items;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!!batch.length) return [3 /*break*/, 5];\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 4]);\n return [4 /*yield*/, Promise.all(entries)];\n case 2:\n files = _a.sent();\n resolve(files);\n return [3 /*break*/, 4];\n case 3:\n err_1 = _a.sent();\n reject(err_1);\n return [3 /*break*/, 4];\n case 4: return [3 /*break*/, 6];\n case 5:\n items = Promise.all(batch.map(fromEntry));\n entries.push(items);\n // Continue reading\n readEntries();\n _a.label = 6;\n case 6: return [2 /*return*/];\n }\n });\n }); }, function (err) {\n reject(err);\n });\n }\n readEntries();\n });\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/FileSystemFileEntry\nfunction fromFileEntry(entry) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (resolve, reject) {\n entry.file(function (file) {\n var fwp = toFileWithPath(file, entry.fullPath);\n resolve(fwp);\n }, function (err) {\n reject(err);\n });\n })];\n });\n });\n}\n//# sourceMappingURL=file-selector.js.map","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nimport accepts from 'attr-accept'; // Firefox versions prior to 53 return a bogus MIME type for every file drag, so dragovers with\n// that MIME type will always be accepted\n\nexport function fileAccepted(file, accept) {\n return file.type === 'application/x-moz-file' || accepts(file, accept);\n}\nexport function fileMatchSize(file, minSize, maxSize) {\n if (isDefined(file.size)) {\n if (isDefined(minSize) && isDefined(maxSize)) return file.size >= minSize && file.size <= maxSize;else if (isDefined(minSize)) return file.size >= minSize;else if (isDefined(maxSize)) return file.size <= maxSize;\n }\n\n return true;\n}\n\nfunction isDefined(value) {\n return value !== undefined && value !== null;\n}\n\nexport function allFilesAccepted(_ref) {\n var files = _ref.files,\n accept = _ref.accept,\n minSize = _ref.minSize,\n maxSize = _ref.maxSize,\n multiple = _ref.multiple;\n\n if (!multiple && files.length > 1) {\n return false;\n }\n\n return files.every(function (file) {\n return fileAccepted(file, accept) && fileMatchSize(file, minSize, maxSize);\n });\n} // React's synthetic events has event.isPropagationStopped,\n// but to remain compatibility with other libs (Preact) fall back\n// to check event.cancelBubble\n\nexport function isPropagationStopped(event) {\n if (typeof event.isPropagationStopped === 'function') {\n return event.isPropagationStopped();\n } else if (typeof event.cancelBubble !== 'undefined') {\n return event.cancelBubble;\n }\n\n return false;\n}\nexport function isEvtWithFiles(event) {\n if (!event.dataTransfer) {\n return !!event.target && !!event.target.files;\n } // https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/types\n // https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Recommended_drag_types#file\n\n\n return Array.prototype.some.call(event.dataTransfer.types, function (type) {\n return type === 'Files' || type === 'application/x-moz-file';\n });\n}\nexport function isKindFile(item) {\n return _typeof(item) === 'object' && item !== null && item.kind === 'file';\n} // allow the entire document to be a drag target\n\nexport function onDocumentDragOver(event) {\n event.preventDefault();\n}\n\nfunction isIe(userAgent) {\n return userAgent.indexOf('MSIE') !== -1 || userAgent.indexOf('Trident/') !== -1;\n}\n\nfunction isEdge(userAgent) {\n return userAgent.indexOf('Edge/') !== -1;\n}\n\nexport function isIeOrEdge() {\n var userAgent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.navigator.userAgent;\n return isIe(userAgent) || isEdge(userAgent);\n}\n/**\n * This is intended to be used to compose event handlers\n * They are executed in order until one of them calls `event.isPropagationStopped()`.\n * Note that the check is done on the first invoke too,\n * meaning that if propagation was stopped before invoking the fns,\n * no handlers will be executed.\n *\n * @param {Function} fns the event hanlder functions\n * @return {Function} the event handler to add to an element\n */\n\nexport function composeEventHandlers() {\n for (var _len = arguments.length, fns = new Array(_len), _key = 0; _key < _len; _key++) {\n fns[_key] = arguments[_key];\n }\n\n return function (event) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n return fns.some(function (fn) {\n if (!isPropagationStopped(event) && fn) {\n fn.apply(void 0, [event].concat(args));\n }\n\n return isPropagationStopped(event);\n });\n };\n}","function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* eslint prefer-template: 0 */\nimport React, { forwardRef, Fragment, useCallback, useEffect, useImperativeHandle, useMemo, useReducer, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { fromEvent } from 'file-selector';\nimport { allFilesAccepted, composeEventHandlers, fileAccepted, fileMatchSize, isEvtWithFiles, isIeOrEdge, isPropagationStopped, onDocumentDragOver } from './utils/index';\n/**\n * Convenience wrapper component for the `useDropzone` hook\n *\n * ```jsx\n * \n * {({getRootProps, getInputProps}) => (\n *
\n * \n *

Drag 'n' drop some files here, or click to select files

\n *
\n * )}\n *
\n * ```\n */\n\nvar Dropzone = forwardRef(function (_ref, ref) {\n var children = _ref.children,\n params = _objectWithoutProperties(_ref, [\"children\"]);\n\n var _useDropzone = useDropzone(params),\n open = _useDropzone.open,\n props = _objectWithoutProperties(_useDropzone, [\"open\"]);\n\n useImperativeHandle(ref, function () {\n return {\n open: open\n };\n }, [open]); // TODO: Figure out why react-styleguidist cannot create docs if we don't return a jsx element\n\n return React.createElement(Fragment, null, children(_objectSpread({}, props, {\n open: open\n })));\n});\nDropzone.displayName = 'Dropzone';\nDropzone.propTypes = {\n /**\n * Render function that exposes the dropzone state and prop getter fns\n *\n * @param {object} params\n * @param {Function} params.getRootProps Returns the props you should apply to the root drop container you render\n * @param {Function} params.getInputProps Returns the props you should apply to hidden file input you render\n * @param {Function} params.open Open the native file selection dialog\n * @param {boolean} params.isFocused Dropzone area is in focus\n * @param {boolean} params.isFileDialogActive File dialog is opened\n * @param {boolean} params.isDragActive Active drag is in progress\n * @param {boolean} params.isDragAccept Dragged files are accepted\n * @param {boolean} params.isDragReject Some dragged files are rejected\n * @param {File[]} params.draggedFiles Files in active drag\n * @param {File[]} params.acceptedFiles Accepted files\n * @param {File[]} params.rejectedFiles Rejected files\n */\n children: PropTypes.func,\n\n /**\n * Set accepted file types.\n * See https://github.com/okonet/attr-accept for more information.\n * Keep in mind that mime type determination is not reliable across platforms. CSV files,\n * for example, are reported as text/plain under macOS but as application/vnd.ms-excel under\n * Windows. In some cases there might not be a mime type set at all.\n * See: https://github.com/react-dropzone/react-dropzone/issues/276\n */\n accept: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.string)]),\n\n /**\n * Allow drag 'n' drop (or selection from the file dialog) of multiple files\n */\n multiple: PropTypes.bool,\n\n /**\n * If false, allow dropped items to take over the current browser window\n */\n preventDropOnDocument: PropTypes.bool,\n\n /**\n * If true, disables click to open the native file selection dialog\n */\n noClick: PropTypes.bool,\n\n /**\n * If true, disables SPACE/ENTER to open the native file selection dialog.\n * Note that it also stops tracking the focus state.\n */\n noKeyboard: PropTypes.bool,\n\n /**\n * If true, disables drag 'n' drop\n */\n noDrag: PropTypes.bool,\n\n /**\n * If true, stops drag event propagation to parents\n */\n noDragEventsBubbling: PropTypes.bool,\n\n /**\n * Minimum file size (in bytes)\n */\n minSize: PropTypes.number,\n\n /**\n * Maximum file size (in bytes)\n */\n maxSize: PropTypes.number,\n\n /**\n * Enable/disable the dropzone\n */\n disabled: PropTypes.bool,\n\n /**\n * Use this to provide a custom file aggregator\n *\n * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n */\n getFilesFromEvent: PropTypes.func,\n\n /**\n * Cb for when closing the file dialog with no selection\n */\n onFileDialogCancel: PropTypes.func,\n\n /**\n * Cb for when the `dragenter` event occurs.\n *\n * @param {DragEvent} event\n */\n onDragEnter: PropTypes.func,\n\n /**\n * Cb for when the `dragleave` event occurs\n *\n * @param {DragEvent} event\n */\n onDragLeave: PropTypes.func,\n\n /**\n * Cb for when the `dragover` event occurs\n *\n * @param {DragEvent} event\n */\n onDragOver: PropTypes.func,\n\n /**\n * Cb for when the `drop` event occurs.\n * Note that this callback is invoked after the `getFilesFromEvent` callback is done.\n *\n * Files are accepted or rejected based on the `accept`, `multiple`, `minSize` and `maxSize` props.\n * `accept` must be a valid [MIME type](http://www.iana.org/assignments/media-types/media-types.xhtml) according to [input element specification](https://www.w3.org/wiki/HTML/Elements/input/file) or a valid file extension.\n * If `multiple` is set to false and additional files are droppped,\n * all files besides the first will be rejected.\n * Any file which does not have a size in the [`minSize`, `maxSize`] range, will be rejected as well.\n *\n * Note that the `onDrop` callback will always be invoked regardless if the dropped files were accepted or rejected.\n * If you'd like to react to a specific scenario, use the `onDropAccepted`/`onDropRejected` props.\n *\n * `onDrop` will provide you with an array of [File](https://developer.mozilla.org/en-US/docs/Web/API/File) objects which you can then process and send to a server.\n * For example, with [SuperAgent](https://github.com/visionmedia/superagent) as a http/ajax library:\n *\n * ```js\n * function onDrop(acceptedFiles) {\n * const req = request.post('/upload')\n * acceptedFiles.forEach(file => {\n * req.attach(file.name, file)\n * })\n * req.end(callback)\n * }\n * ```\n *\n * @param {File[]} acceptedFiles\n * @param {File[]} rejectedFiles\n * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n */\n onDrop: PropTypes.func,\n\n /**\n * Cb for when the `drop` event occurs.\n * Note that if no files are accepted, this callback is not invoked.\n *\n * @param {File[]} files\n * @param {(DragEvent|Event)} event\n */\n onDropAccepted: PropTypes.func,\n\n /**\n * Cb for when the `drop` event occurs.\n * Note that if no files are rejected, this callback is not invoked.\n *\n * @param {object[]} files\n * @param {(DragEvent|Event)} event\n */\n onDropRejected: PropTypes.func\n};\nexport default Dropzone;\n/**\n * A function that is invoked for the `dragenter`,\n * `dragover` and `dragleave` events.\n * It is not invoked if the items are not files (such as link, text, etc.).\n *\n * @callback dragCb\n * @param {DragEvent} event\n */\n\n/**\n * A function that is invoked for the `drop` or input change event.\n * It is not invoked if the items are not files (such as link, text, etc.).\n *\n * @callback dropCb\n * @param {File[]} acceptedFiles List of accepted files\n * @param {File[]} rejectedFiles List of rejected files\n * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n */\n\n/**\n * A function that is invoked for the `drop` or input change event.\n * It is not invoked if the items are files (such as link, text, etc.).\n *\n * @callback dropAcceptedCb\n * @param {File[]} files List of accepted files that meet the given criteria\n * (`accept`, `multiple`, `minSize`, `maxSize`)\n * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n */\n\n/**\n * A function that is invoked for the `drop` or input change event.\n *\n * @callback dropRejectedCb\n * @param {File[]} files List of rejected files that do not meet the given criteria\n * (`accept`, `multiple`, `minSize`, `maxSize`)\n * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n */\n\n/**\n * A function that is used aggregate files,\n * in a asynchronous fashion, from drag or input change events.\n *\n * @callback getFilesFromEvent\n * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n * @returns {(File[]|Promise)}\n */\n\n/**\n * An object with the current dropzone state and some helper functions.\n *\n * @typedef {object} DropzoneState\n * @property {Function} getRootProps Returns the props you should apply to the root drop container you render\n * @property {Function} getInputProps Returns the props you should apply to hidden file input you render\n * @property {Function} open Open the native file selection dialog\n * @property {boolean} isFocused Dropzone area is in focus\n * @property {boolean} isFileDialogActive File dialog is opened\n * @property {boolean} isDragActive Active drag is in progress\n * @property {boolean} isDragAccept Dragged files are accepted\n * @property {boolean} isDragReject Some dragged files are rejected\n * @property {File[]} draggedFiles Files in active drag\n * @property {File[]} acceptedFiles Accepted files\n * @property {File[]} rejectedFiles Rejected files\n */\n\nvar initialState = {\n isFocused: false,\n isFileDialogActive: false,\n isDragActive: false,\n isDragAccept: false,\n isDragReject: false,\n draggedFiles: [],\n acceptedFiles: [],\n rejectedFiles: []\n};\n/**\n * A React hook that creates a drag 'n' drop area.\n *\n * ```jsx\n * function MyDropzone(props) {\n * const {getRootProps, getInputProps} = useDropzone({\n * onDrop: acceptedFiles => {\n * // do something with the File objects, e.g. upload to some server\n * }\n * });\n * return (\n *
\n * \n *

Drag and drop some files here, or click to select files

\n *
\n * )\n * }\n * ```\n *\n * @function useDropzone\n *\n * @param {object} props\n * @param {string|string[]} [props.accept] Set accepted file types.\n * See https://github.com/okonet/attr-accept for more information.\n * Keep in mind that mime type determination is not reliable across platforms. CSV files,\n * for example, are reported as text/plain under macOS but as application/vnd.ms-excel under\n * Windows. In some cases there might not be a mime type set at all.\n * See: https://github.com/react-dropzone/react-dropzone/issues/276\n * @param {boolean} [props.multiple=true] Allow drag 'n' drop (or selection from the file dialog) of multiple files\n * @param {boolean} [props.preventDropOnDocument=true] If false, allow dropped items to take over the current browser window\n * @param {boolean} [props.noClick=false] If true, disables click to open the native file selection dialog\n * @param {boolean} [props.noKeyboard=false] If true, disables SPACE/ENTER to open the native file selection dialog.\n * Note that it also stops tracking the focus state.\n * @param {boolean} [props.noDrag=false] If true, disables drag 'n' drop\n * @param {boolean} [props.noDragEventsBubbling=false] If true, stops drag event propagation to parents\n * @param {number} [props.minSize=0] Minimum file size (in bytes)\n * @param {number} [props.maxSize=Infinity] Maximum file size (in bytes)\n * @param {boolean} [props.disabled=false] Enable/disable the dropzone\n * @param {getFilesFromEvent} [props.getFilesFromEvent] Use this to provide a custom file aggregator\n * @param {Function} [props.onFileDialogCancel] Cb for when closing the file dialog with no selection\n * @param {dragCb} [props.onDragEnter] Cb for when the `dragenter` event occurs.\n * @param {dragCb} [props.onDragLeave] Cb for when the `dragleave` event occurs\n * @param {dragCb} [props.onDragOver] Cb for when the `dragover` event occurs\n * @param {dropCb} [props.onDrop] Cb for when the `drop` event occurs.\n * Note that this callback is invoked after the `getFilesFromEvent` callback is done.\n *\n * Files are accepted or rejected based on the `accept`, `multiple`, `minSize` and `maxSize` props.\n * `accept` must be a valid [MIME type](http://www.iana.org/assignments/media-types/media-types.xhtml) according to [input element specification](https://www.w3.org/wiki/HTML/Elements/input/file) or a valid file extension.\n * If `multiple` is set to false and additional files are droppped,\n * all files besides the first will be rejected.\n * Any file which does not have a size in the [`minSize`, `maxSize`] range, will be rejected as well.\n *\n * Note that the `onDrop` callback will always be invoked regardless if the dropped files were accepted or rejected.\n * If you'd like to react to a specific scenario, use the `onDropAccepted`/`onDropRejected` props.\n *\n * `onDrop` will provide you with an array of [File](https://developer.mozilla.org/en-US/docs/Web/API/File) objects which you can then process and send to a server.\n * For example, with [SuperAgent](https://github.com/visionmedia/superagent) as a http/ajax library:\n *\n * ```js\n * function onDrop(acceptedFiles) {\n * const req = request.post('/upload')\n * acceptedFiles.forEach(file => {\n * req.attach(file.name, file)\n * })\n * req.end(callback)\n * }\n * ```\n * @param {dropAcceptedCb} [props.onDropAccepted]\n * @param {dropRejectedCb} [props.onDropRejected]\n *\n * @returns {DropzoneState}\n */\n\nexport function useDropzone() {\n var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n accept = _ref2.accept,\n _ref2$disabled = _ref2.disabled,\n disabled = _ref2$disabled === void 0 ? false : _ref2$disabled,\n _ref2$getFilesFromEve = _ref2.getFilesFromEvent,\n getFilesFromEvent = _ref2$getFilesFromEve === void 0 ? fromEvent : _ref2$getFilesFromEve,\n _ref2$maxSize = _ref2.maxSize,\n maxSize = _ref2$maxSize === void 0 ? Infinity : _ref2$maxSize,\n _ref2$minSize = _ref2.minSize,\n minSize = _ref2$minSize === void 0 ? 0 : _ref2$minSize,\n _ref2$multiple = _ref2.multiple,\n multiple = _ref2$multiple === void 0 ? true : _ref2$multiple,\n onDragEnter = _ref2.onDragEnter,\n onDragLeave = _ref2.onDragLeave,\n onDragOver = _ref2.onDragOver,\n onDrop = _ref2.onDrop,\n onDropAccepted = _ref2.onDropAccepted,\n onDropRejected = _ref2.onDropRejected,\n onFileDialogCancel = _ref2.onFileDialogCancel,\n _ref2$preventDropOnDo = _ref2.preventDropOnDocument,\n preventDropOnDocument = _ref2$preventDropOnDo === void 0 ? true : _ref2$preventDropOnDo,\n _ref2$noClick = _ref2.noClick,\n noClick = _ref2$noClick === void 0 ? false : _ref2$noClick,\n _ref2$noKeyboard = _ref2.noKeyboard,\n noKeyboard = _ref2$noKeyboard === void 0 ? false : _ref2$noKeyboard,\n _ref2$noDrag = _ref2.noDrag,\n noDrag = _ref2$noDrag === void 0 ? false : _ref2$noDrag,\n _ref2$noDragEventsBub = _ref2.noDragEventsBubbling,\n noDragEventsBubbling = _ref2$noDragEventsBub === void 0 ? false : _ref2$noDragEventsBub;\n\n var rootRef = useRef(null);\n var inputRef = useRef(null);\n\n var _useReducer = useReducer(reducer, initialState),\n _useReducer2 = _slicedToArray(_useReducer, 2),\n state = _useReducer2[0],\n dispatch = _useReducer2[1];\n\n var isFocused = state.isFocused,\n isFileDialogActive = state.isFileDialogActive,\n draggedFiles = state.draggedFiles; // Fn for opening the file dialog programmatically\n\n var openFileDialog = useCallback(function () {\n if (inputRef.current) {\n dispatch({\n type: 'openDialog'\n });\n inputRef.current.value = null;\n inputRef.current.click();\n }\n }, [dispatch]); // Update file dialog active state when the window is focused on\n\n var onWindowFocus = function onWindowFocus() {\n // Execute the timeout only if the file dialog is opened in the browser\n if (isFileDialogActive) {\n setTimeout(function () {\n if (inputRef.current) {\n var files = inputRef.current.files;\n\n if (!files.length) {\n dispatch({\n type: 'closeDialog'\n });\n\n if (typeof onFileDialogCancel === 'function') {\n onFileDialogCancel();\n }\n }\n }\n }, 300);\n }\n };\n\n useEffect(function () {\n window.addEventListener('focus', onWindowFocus, false);\n return function () {\n window.removeEventListener('focus', onWindowFocus, false);\n };\n }, [inputRef, isFileDialogActive, onFileDialogCancel]); // Cb to open the file dialog when SPACE/ENTER occurs on the dropzone\n\n var onKeyDownCb = useCallback(function (event) {\n // Ignore keyboard events bubbling up the DOM tree\n if (!rootRef.current || !rootRef.current.isEqualNode(event.target)) {\n return;\n }\n\n if (event.keyCode === 32 || event.keyCode === 13) {\n event.preventDefault();\n openFileDialog();\n }\n }, [rootRef, inputRef]); // Update focus state for the dropzone\n\n var onFocusCb = useCallback(function () {\n dispatch({\n type: 'focus'\n });\n }, []);\n var onBlurCb = useCallback(function () {\n dispatch({\n type: 'blur'\n });\n }, []); // Cb to open the file dialog when click occurs on the dropzone\n\n var onClickCb = useCallback(function () {\n if (noClick) {\n return;\n } // In IE11/Edge the file-browser dialog is blocking, therefore, use setTimeout()\n // to ensure React can handle state changes\n // See: https://github.com/react-dropzone/react-dropzone/issues/450\n\n\n if (isIeOrEdge()) {\n setTimeout(openFileDialog, 0);\n } else {\n openFileDialog();\n }\n }, [inputRef, noClick]);\n var dragTargetsRef = useRef([]);\n\n var onDocumentDrop = function onDocumentDrop(event) {\n if (rootRef.current && rootRef.current.contains(event.target)) {\n // If we intercepted an event for our instance, let it propagate down to the instance's onDrop handler\n return;\n }\n\n event.preventDefault();\n dragTargetsRef.current = [];\n };\n\n useEffect(function () {\n if (preventDropOnDocument) {\n document.addEventListener('dragover', onDocumentDragOver, false);\n document.addEventListener('drop', onDocumentDrop, false);\n }\n\n return function () {\n if (preventDropOnDocument) {\n document.removeEventListener('dragover', onDocumentDragOver);\n document.removeEventListener('drop', onDocumentDrop);\n }\n };\n }, [rootRef, preventDropOnDocument]);\n var onDragEnterCb = useCallback(function (event) {\n event.preventDefault(); // Persist here because we need the event later after getFilesFromEvent() is done\n\n event.persist();\n stopPropagation(event); // Count the dropzone and any children that are entered.\n\n if (dragTargetsRef.current.indexOf(event.target) === -1) {\n dragTargetsRef.current = [].concat(_toConsumableArray(dragTargetsRef.current), [event.target]);\n }\n\n if (isEvtWithFiles(event)) {\n Promise.resolve(getFilesFromEvent(event)).then(function (draggedFiles) {\n if (isPropagationStopped(event) && !noDragEventsBubbling) {\n return;\n }\n\n dispatch({\n draggedFiles: draggedFiles,\n isDragActive: true,\n type: 'setDraggedFiles'\n });\n\n if (onDragEnter) {\n onDragEnter(event);\n }\n });\n }\n }, [getFilesFromEvent, onDragEnter, noDragEventsBubbling]);\n var onDragOverCb = useCallback(function (event) {\n event.preventDefault();\n event.persist();\n stopPropagation(event);\n\n if (event.dataTransfer) {\n try {\n event.dataTransfer.dropEffect = 'copy';\n } catch (_unused) {}\n /* eslint-disable-line no-empty */\n\n }\n\n if (isEvtWithFiles(event) && onDragOver) {\n onDragOver(event);\n }\n\n return false;\n }, [onDragOver, noDragEventsBubbling]);\n var onDragLeaveCb = useCallback(function (event) {\n event.preventDefault();\n event.persist();\n stopPropagation(event); // Only deactivate once the dropzone and all children have been left\n\n var targets = dragTargetsRef.current.filter(function (target) {\n return target !== event.target && rootRef.current && rootRef.current.contains(target);\n });\n dragTargetsRef.current = targets;\n\n if (targets.length > 0) {\n return;\n }\n\n dispatch({\n isDragActive: false,\n type: 'setDraggedFiles',\n draggedFiles: []\n });\n\n if (isEvtWithFiles(event) && onDragLeave) {\n onDragLeave(event);\n }\n }, [rootRef, onDragLeave, noDragEventsBubbling]);\n var onDropCb = useCallback(function (event) {\n event.preventDefault(); // Persist here because we need the event later after getFilesFromEvent() is done\n\n event.persist();\n stopPropagation(event);\n dragTargetsRef.current = [];\n\n if (isEvtWithFiles(event)) {\n Promise.resolve(getFilesFromEvent(event)).then(function (files) {\n if (isPropagationStopped(event) && !noDragEventsBubbling) {\n return;\n }\n\n var acceptedFiles = [];\n var rejectedFiles = [];\n files.forEach(function (file) {\n if (fileAccepted(file, accept) && fileMatchSize(file, minSize, maxSize)) {\n acceptedFiles.push(file);\n } else {\n rejectedFiles.push(file);\n }\n });\n\n if (!multiple && acceptedFiles.length > 1) {\n rejectedFiles.push.apply(rejectedFiles, _toConsumableArray(acceptedFiles.splice(0))); // Reject everything and empty accepted files\n }\n\n dispatch({\n acceptedFiles: acceptedFiles,\n rejectedFiles: rejectedFiles,\n type: 'setFiles'\n });\n\n if (onDrop) {\n onDrop(acceptedFiles, rejectedFiles, event);\n }\n\n if (rejectedFiles.length > 0 && onDropRejected) {\n onDropRejected(rejectedFiles, event);\n }\n\n if (acceptedFiles.length > 0 && onDropAccepted) {\n onDropAccepted(acceptedFiles, event);\n }\n });\n }\n\n dispatch({\n type: 'reset'\n });\n }, [multiple, accept, minSize, maxSize, getFilesFromEvent, onDrop, onDropAccepted, onDropRejected, noDragEventsBubbling]);\n\n var composeHandler = function composeHandler(fn) {\n return disabled ? null : fn;\n };\n\n var composeKeyboardHandler = function composeKeyboardHandler(fn) {\n return noKeyboard ? null : composeHandler(fn);\n };\n\n var composeDragHandler = function composeDragHandler(fn) {\n return noDrag ? null : composeHandler(fn);\n };\n\n var stopPropagation = function stopPropagation(event) {\n if (noDragEventsBubbling) {\n event.stopPropagation();\n }\n };\n\n var getRootProps = useMemo(function () {\n return function () {\n var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref3$refKey = _ref3.refKey,\n refKey = _ref3$refKey === void 0 ? 'ref' : _ref3$refKey,\n onKeyDown = _ref3.onKeyDown,\n onFocus = _ref3.onFocus,\n onBlur = _ref3.onBlur,\n onClick = _ref3.onClick,\n onDragEnter = _ref3.onDragEnter,\n onDragOver = _ref3.onDragOver,\n onDragLeave = _ref3.onDragLeave,\n onDrop = _ref3.onDrop,\n rest = _objectWithoutProperties(_ref3, [\"refKey\", \"onKeyDown\", \"onFocus\", \"onBlur\", \"onClick\", \"onDragEnter\", \"onDragOver\", \"onDragLeave\", \"onDrop\"]);\n\n return _objectSpread(_defineProperty({\n onKeyDown: composeKeyboardHandler(composeEventHandlers(onKeyDown, onKeyDownCb)),\n onFocus: composeKeyboardHandler(composeEventHandlers(onFocus, onFocusCb)),\n onBlur: composeKeyboardHandler(composeEventHandlers(onBlur, onBlurCb)),\n onClick: composeHandler(composeEventHandlers(onClick, onClickCb)),\n onDragEnter: composeDragHandler(composeEventHandlers(onDragEnter, onDragEnterCb)),\n onDragOver: composeDragHandler(composeEventHandlers(onDragOver, onDragOverCb)),\n onDragLeave: composeDragHandler(composeEventHandlers(onDragLeave, onDragLeaveCb)),\n onDrop: composeDragHandler(composeEventHandlers(onDrop, onDropCb))\n }, refKey, rootRef), !disabled && !noKeyboard ? {\n tabIndex: 0\n } : {}, {}, rest);\n };\n }, [rootRef, onKeyDownCb, onFocusCb, onBlurCb, onClickCb, onDragEnterCb, onDragOverCb, onDragLeaveCb, onDropCb, noKeyboard, noDrag, disabled]);\n var onInputElementClick = useCallback(function (event) {\n event.stopPropagation();\n }, []);\n var getInputProps = useMemo(function () {\n return function () {\n var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref4$refKey = _ref4.refKey,\n refKey = _ref4$refKey === void 0 ? 'ref' : _ref4$refKey,\n onChange = _ref4.onChange,\n onClick = _ref4.onClick,\n rest = _objectWithoutProperties(_ref4, [\"refKey\", \"onChange\", \"onClick\"]);\n\n var inputProps = _defineProperty({\n accept: accept,\n multiple: multiple,\n type: 'file',\n style: {\n display: 'none'\n },\n onChange: composeHandler(composeEventHandlers(onChange, onDropCb)),\n onClick: composeHandler(composeEventHandlers(onClick, onInputElementClick)),\n autoComplete: 'off',\n tabIndex: -1\n }, refKey, inputRef);\n\n return _objectSpread({}, inputProps, {}, rest);\n };\n }, [inputRef, accept, multiple, onDropCb, disabled]);\n var fileCount = draggedFiles.length;\n var isDragAccept = fileCount > 0 && allFilesAccepted({\n files: draggedFiles,\n accept: accept,\n minSize: minSize,\n maxSize: maxSize,\n multiple: multiple\n });\n var isDragReject = fileCount > 0 && !isDragAccept;\n return _objectSpread({}, state, {\n isDragAccept: isDragAccept,\n isDragReject: isDragReject,\n isFocused: isFocused && !disabled,\n getRootProps: getRootProps,\n getInputProps: getInputProps,\n rootRef: rootRef,\n inputRef: inputRef,\n open: composeHandler(openFileDialog)\n });\n}\n\nfunction reducer(state, action) {\n /* istanbul ignore next */\n switch (action.type) {\n case 'focus':\n return _objectSpread({}, state, {\n isFocused: true\n });\n\n case 'blur':\n return _objectSpread({}, state, {\n isFocused: false\n });\n\n case 'openDialog':\n return _objectSpread({}, state, {\n isFileDialogActive: true\n });\n\n case 'closeDialog':\n return _objectSpread({}, state, {\n isFileDialogActive: false\n });\n\n case 'setDraggedFiles':\n /* eslint no-case-declarations: 0 */\n var isDragActive = action.isDragActive,\n draggedFiles = action.draggedFiles;\n return _objectSpread({}, state, {\n draggedFiles: draggedFiles,\n isDragActive: isDragActive\n });\n\n case 'setFiles':\n return _objectSpread({}, state, {\n acceptedFiles: action.acceptedFiles,\n rejectedFiles: action.rejectedFiles\n });\n\n case 'reset':\n return _objectSpread({}, state, {\n isFileDialogActive: false,\n isDragActive: false,\n draggedFiles: [],\n acceptedFiles: [],\n rejectedFiles: []\n });\n\n default:\n return state;\n }\n}","export default class FileLoader {\n fileType;\n loadFile(file, imageId) { }\n getDataset(image, imageId) { }\n getStudies(dataset, imageId) { }\n}\n","import cornerstoneWADOImageLoader from 'cornerstone-wado-image-loader';\nimport FileLoader from './fileLoader';\n\nconst PDFFileLoader = new (class extends FileLoader {\n fileType = 'application/pdf';\n loadFile(file, imageId) {\n return cornerstoneWADOImageLoader.wadouri.loadFileRequest(imageId);\n }\n\n getDataset(image, imageId) {\n const dataset = {};\n dataset.imageId = image.imageId || imageId;\n return dataset;\n }\n})();\n\nexport default PDFFileLoader;\n","import dcmjs from 'dcmjs';\nimport cornerstoneWADOImageLoader from 'cornerstone-wado-image-loader';\nimport FileLoader from './fileLoader';\n\nconst DICOMFileLoader = new (class extends FileLoader {\n fileType = 'application/dicom';\n loadFile(file, imageId) {\n return cornerstoneWADOImageLoader.wadouri.loadFileRequest(imageId);\n }\n\n getDataset(image, imageId) {\n const dicomData = dcmjs.data.DicomMessage.readFile(image);\n\n const dataset = dcmjs.data.DicomMetaDictionary.naturalizeDataset(\n dicomData.dict\n );\n\n dataset.url = imageId;\n\n dataset._meta = dcmjs.data.DicomMetaDictionary.namifyDataset(\n dicomData.meta\n );\n\n return dataset;\n }\n})();\n\nexport default DICOMFileLoader;\n","import cornerstoneWADOImageLoader from 'cornerstone-wado-image-loader';\n\nimport FileLoader from './fileLoader';\nimport PDFFileLoader from './pdfFileLoader';\nimport DICOMFileLoader from './dicomFileLoader';\n\nclass FileLoaderService extends FileLoader {\n fileType;\n loader;\n constructor(file) {\n super();\n const fileType = file && file.type;\n this.loader = this.getLoader(fileType);\n this.fileType = this.loader.fileType;\n }\n\n addFile(file) {\n return cornerstoneWADOImageLoader.wadouri.fileManager.add(file);\n }\n\n loadFile(file, imageId) {\n return this.loader.loadFile(file, imageId);\n }\n\n getDataset(image, imageId) {\n return this.loader.getDataset(image, imageId);\n }\n\n getLoader(fileType) {\n if (fileType === 'application/pdf') {\n return PDFFileLoader;\n } else {\n // Default to dicom loader\n return DICOMFileLoader;\n }\n }\n}\n\nexport default FileLoaderService;\n","import FileLoaderService from './fileLoaderService';\nimport { DicomMetadataStore } from '@ohif/core';\n\nconst processFile = async file => {\n try {\n const fileLoaderService = new FileLoaderService(file);\n const imageId = fileLoaderService.addFile(file);\n const image = await fileLoaderService.loadFile(file, imageId);\n const dicomJSONDataset = await fileLoaderService.getDataset(image, imageId);\n\n DicomMetadataStore.addInstance(dicomJSONDataset);\n } catch (error) {\n console.log(\n error.name,\n ':Error when trying to load and process local files:',\n error.message\n );\n }\n};\n\nexport default async function filesToStudies(files) {\n const processFilesPromises = files.map(processFile);\n await Promise.all(processFilesPromises);\n\n return DicomMetadataStore.getStudyInstanceUIDs();\n}\n","import React, { useEffect, useRef } from 'react';\nimport classnames from 'classnames';\nimport { useNavigate } from 'react-router-dom';\nimport { MODULE_TYPES } from '@ohif/core';\n\nimport Dropzone from 'react-dropzone';\nimport filesToStudies from './filesToStudies';\n\nimport { extensionManager } from '../../App.tsx';\n\nimport { Icon, Button, LoadingIndicatorProgress } from '@ohif/ui';\n\nconst getLoadButton = (onDrop, text, isDir) => {\n return (\n \n {({ getRootProps, getInputProps }) => (\n
\n } // launch-arrow | launch-info\n className={classnames('font-medium', 'ml-2')}\n onClick={() => {}}\n >\n {text}\n {isDir ? (\n \n ) : (\n \n )}\n \n
\n )}\n
\n );\n};\n\nfunction Local() {\n const navigate = useNavigate();\n const dropzoneRef = useRef();\n const [dropInitiated, setDropInitiated] = React.useState(false);\n\n // Initializing the dicom local dataSource\n const dataSourceModules = extensionManager.modules[MODULE_TYPES.DATA_SOURCE];\n const localDataSources = dataSourceModules.reduce((acc, curr) => {\n const mods = [];\n curr.module.forEach(mod => {\n if (mod.type === 'localApi') {\n mods.push(mod);\n }\n });\n return acc.concat(mods);\n }, []);\n\n const firstLocalDataSource = localDataSources[0];\n const dataSource = firstLocalDataSource.createDataSource({});\n\n const onDrop = async acceptedFiles => {\n const studies = await filesToStudies(acceptedFiles, dataSource);\n // Todo: navigate to work list and let user select a mode\n const query = new URLSearchParams();\n studies.forEach(id => query.append('StudyInstanceUIDs', id));\n navigate(`/viewer/dicomlocal?${decodeURIComponent(query.toString())}`);\n };\n\n // Set body style\n useEffect(() => {\n document.body.classList.add('bg-black');\n return () => {\n document.body.classList.remove('bg-black');\n };\n }, []);\n\n return (\n {\n setDropInitiated(true);\n onDrop(acceptedFiles);\n }}\n noClick\n >\n {({ getRootProps }) => (\n
\n
\n
\n \n
\n {dropInitiated ? (\n
\n \n
\n ) : (\n
\n

\n Note: You data is not uploaded to any server, it will stay\n in your local browser application\n

\n

\n Drag and Drop DICOM files here to load them in the Viewer\n

\n

Or click to

\n
\n )}\n
\n
\n {getLoadButton(onDrop, 'Load files', false)}\n {getLoadButton(onDrop, 'Load folders', true)}\n
\n
\n
\n
\n )}\n \n );\n}\n\nexport default Local;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from 'react-router-dom';\n\nconst NotFound = ({\n message = 'Sorry, this page does not exist.',\n showGoBackButton = true,\n}) => {\n return (\n
\n
\n

{message}

\n {showGoBackButton && (\n
\n Go back to the Study List\n
\n )}\n
\n
\n );\n};\n\nNotFound.propTypes = {\n message: PropTypes.string,\n showGoBackButton: PropTypes.bool,\n};\n\nexport default NotFound;\n","import React from 'react';\n\nfunction EmptyViewport() {\n return
;\n}\n\nexport default EmptyViewport;\n","import React, { useEffect, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport { ViewportGrid, ViewportPane, useViewportGrid } from '@ohif/ui';\nimport { utils } from '@ohif/core';\nimport EmptyViewport from './EmptyViewport';\nimport classNames from 'classnames';\n\nconst { isEqualWithin } = utils;\n\nconst ORIENTATION_MAP = {\n axial: {\n viewPlaneNormal: [0, 0, -1],\n viewUp: [0, -1, 0],\n },\n sagittal: {\n viewPlaneNormal: [1, 0, 0],\n viewUp: [0, 0, 1],\n },\n coronal: {\n viewPlaneNormal: [0, 1, 0],\n viewUp: [0, 0, 1],\n },\n};\n\nfunction ViewerViewportGrid(props) {\n const {\n servicesManager,\n viewportComponents,\n dataSource,\n modeViewportPaneStyles = {},\n } = props;\n const [viewportGrid, viewportGridService] = useViewportGrid();\n\n const { numCols, numRows, activeViewportIndex, viewports } = viewportGrid;\n\n // TODO -> Need some way of selecting which displaySets hit the viewports.\n const {\n DisplaySetService,\n MeasurementService,\n HangingProtocolService,\n UINotificationService,\n } = servicesManager.services;\n\n /**\n * This callback runs only after displaySets have changed (created and added or modified)\n */\n const updateDisplaySetsForViewports = useCallback(\n availableDisplaySets => {\n if (!availableDisplaySets.length) {\n return;\n }\n\n const {\n viewportMatchDetails,\n hpAlreadyApplied,\n } = HangingProtocolService.getMatchDetails();\n\n if (!viewportMatchDetails.size) {\n return;\n }\n\n // Match each viewport individually\n const numViewports = viewportGrid.numRows * viewportGrid.numCols;\n for (\n let viewportIndex = 0;\n viewportIndex < numViewports;\n viewportIndex++\n ) {\n if (hpAlreadyApplied.get(viewportIndex)) {\n continue;\n }\n\n // if current viewport doesn't have a match\n if (viewportMatchDetails.get(viewportIndex) === undefined) {\n return;\n }\n\n const { displaySetsInfo, viewportOptions } = viewportMatchDetails.get(\n viewportIndex\n );\n\n const displaySetUIDsToHang = [];\n const displaySetUIDsToHangOptions = [];\n displaySetsInfo.forEach(\n ({ displaySetInstanceUID, displaySetOptions }) => {\n if (!displaySetInstanceUID) {\n return;\n }\n\n displaySetUIDsToHang.push(displaySetInstanceUID);\n displaySetUIDsToHangOptions.push(displaySetOptions);\n }\n );\n\n viewportGridService.setDisplaySetsForViewport({\n viewportIndex: viewportIndex,\n displaySetInstanceUIDs: displaySetUIDsToHang,\n viewportOptions,\n displaySetOptions: displaySetUIDsToHangOptions,\n });\n\n // During setting displaySets for viewport, we need to update the hanging protocol\n // but some viewports contain more than one display set (fusion), and their displaySet\n // will not be available at the time of setting displaySets for viewport. So we need to\n // update the hanging protocol after making sure all the matched display sets are available\n // and set on the viewport\n if (displaySetUIDsToHang.length === displaySetsInfo.length) {\n // The following will set the viewportsDisplaySetsMatched state\n\n const suppressEvent = true;\n const applied = true;\n HangingProtocolService.setHangingProtocolAppliedForViewport(\n viewportIndex,\n applied,\n suppressEvent\n );\n }\n }\n },\n [viewportGrid, numRows, numCols]\n );\n\n const _getUpdatedViewports = useCallback(\n (viewportIndex, displaySetInstanceUID) => {\n let updatedViewports = [];\n try {\n updatedViewports = HangingProtocolService.getViewportsRequireUpdate(\n viewportIndex,\n displaySetInstanceUID\n );\n } catch (error) {\n console.warn(error);\n UINotificationService.show({\n title: 'Drag and Drop',\n message:\n 'The selected display sets could not be added to the viewport due to a mismatch in the Hanging Protocol rules.',\n type: 'info',\n duration: 3000,\n });\n }\n\n return updatedViewports;\n },\n [HangingProtocolService, UINotificationService]\n );\n\n useEffect(() => {\n const displaySets = DisplaySetService.getActiveDisplaySets();\n updateDisplaySetsForViewports(displaySets);\n }, [numRows, numCols]);\n\n // Layout change based on hanging protocols\n useEffect(() => {\n const { unsubscribe } = HangingProtocolService.subscribe(\n HangingProtocolService.EVENTS.NEW_LAYOUT,\n ({ layoutType, numRows, numCols, layoutOptions }) => {\n viewportGridService.setLayout({\n numRows,\n numCols,\n layoutType,\n layoutOptions,\n });\n }\n );\n\n return () => {\n unsubscribe();\n };\n }, []);\n\n // Using Hanging protocol engine to match the displaySets\n useEffect(() => {\n const { unsubscribe } = HangingProtocolService.subscribe(\n HangingProtocolService.EVENTS.PROTOCOL_CHANGED,\n () => {\n const displaySets = DisplaySetService.getActiveDisplaySets();\n updateDisplaySetsForViewports(displaySets);\n }\n );\n\n return () => {\n unsubscribe();\n };\n }, [viewports]);\n\n useEffect(() => {\n const { unsubscribe } = MeasurementService.subscribe(\n MeasurementService.EVENTS.JUMP_TO_MEASUREMENT,\n ({ viewportIndex, measurement }) => {\n const {\n displaySetInstanceUID: referencedDisplaySetInstanceUID,\n metadata: { viewPlaneNormal },\n } = measurement;\n\n // if we already have the displaySet in one of the viewports\n // Todo: handle fusion display sets?\n for (const viewport of viewports) {\n const isMatch = viewport.displaySetInstanceUIDs.includes(\n referencedDisplaySetInstanceUID\n );\n if (isMatch) {\n return;\n }\n }\n\n const displaySet = DisplaySetService.getDisplaySetByUID(\n referencedDisplaySetInstanceUID\n );\n\n let imageIndex;\n // jump straight to the initial image index if we can\n if (displaySet.images && measurement.SOPInstanceUID) {\n imageIndex = displaySet.images.findIndex(\n image => image.SOPInstanceUID === measurement.SOPInstanceUID\n );\n }\n\n const updatedViewports = _getUpdatedViewports(\n viewportIndex,\n referencedDisplaySetInstanceUID\n );\n\n if (!updatedViewports || !updatedViewports.length) {\n return;\n }\n\n updatedViewports.forEach(vp => {\n const { orientation, viewportType } = vp.viewportOptions;\n let initialImageOptions;\n\n // For initial imageIndex to hang be careful for the volume viewport\n if (viewportType === 'stack') {\n initialImageOptions = {\n index: imageIndex,\n };\n } else if (viewportType === 'volume') {\n // For the volume viewports, be careful to not jump in the viewports\n // that are not in the same orientation.\n // Todo: this doesn't work for viewports that have custom orientation\n // vectors specified\n if (\n orientation &&\n viewPlaneNormal &&\n isEqualWithin(\n ORIENTATION_MAP[orientation]?.viewPlaneNormal,\n viewPlaneNormal\n )\n ) {\n initialImageOptions = {\n index: imageIndex,\n };\n }\n }\n\n vp.viewportOptions['initialImageOptions'] = initialImageOptions;\n });\n\n viewportGridService.setDisplaySetsForViewports(updatedViewports);\n }\n );\n\n return () => {\n unsubscribe();\n };\n }, [viewports]);\n\n /**\n const onDoubleClick = viewportIndex => {\n // TODO -> Disabled for now.\n // onNewImage on a cornerstone viewport is firing setDisplaySetsForViewport.\n // Which it really really shouldn't. We need a larger fix for jump to\n // measurements and all cornerstone \"imageIndex\" state to fix this.\n if (cachedLayout) {\n viewportGridService.set({\n numCols: cachedLayout.numCols,\n numRows: cachedLayout.numRows,\n activeViewportIndex: cachedLayout.activeViewportIndex,\n viewports: cachedLayout.viewports,\n cachedLayout: null,\n });\n\n return;\n }\n\n const cachedViewports = viewports.map(viewport => {\n return {\n displaySetInstanceUID: viewport.displaySetInstanceUID,\n };\n });\n\n viewportGridService.set({\n numCols: 1,\n numRows: 1,\n activeViewportIndex: 0,\n viewports: [\n {\n displaySetInstanceUID: viewports[viewportIndex].displaySetInstanceUID,\n imageIndex: undefined,\n },\n ],\n cachedLayout: {\n numCols,\n numRows,\n viewports: cachedViewports,\n activeViewportIndex: viewportIndex,\n },\n });\n };\n */\n\n const onDropHandler = (viewportIndex, { displaySetInstanceUID }) => {\n const updatedViewports = _getUpdatedViewports(\n viewportIndex,\n displaySetInstanceUID\n );\n viewportGridService.setDisplaySetsForViewports(updatedViewports);\n };\n\n const getViewportPanes = useCallback(() => {\n const viewportPanes = [];\n\n for (let i = 0; i < viewports.length; i++) {\n const viewportIndex = i;\n const isActive = activeViewportIndex === viewportIndex;\n const paneMetadata = viewports[i] || {};\n const {\n displaySetInstanceUIDs,\n viewportOptions,\n displaySetOptions, // array of options for each display set in the viewport\n x: viewportX,\n y: viewportY,\n width: viewportWidth,\n height: viewportHeight,\n viewportLabel,\n } = paneMetadata;\n\n const displaySetInstanceUIDsToUse = displaySetInstanceUIDs || [];\n\n // This is causing the viewport components re-render when the activeViewportIndex changes\n const displaySets = displaySetInstanceUIDsToUse.map(\n displaySetInstanceUID => {\n return (\n DisplaySetService.getDisplaySetByUID(displaySetInstanceUID) || {}\n );\n }\n );\n\n const ViewportComponent = _getViewportComponent(\n displaySets,\n viewportComponents,\n UINotificationService\n );\n\n // look inside displaySets to see if they need reRendering\n const displaySetsNeedsRerendering = displaySets.some(displaySet => {\n return displaySet.needsRerendering;\n });\n\n const onInteractionHandler = event => {\n if (isActive) return;\n\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n viewportGridService.setActiveViewportIndex(viewportIndex);\n };\n\n // TEMP -> Double click disabled for now\n // onDoubleClick={() => onDoubleClick(viewportIndex)}\n\n viewportPanes[i] = (\n \n \n 1 ? viewportLabel : ''}\n dataSource={dataSource}\n viewportOptions={viewportOptions}\n displaySetOptions={displaySetOptions}\n needsRerendering={displaySetsNeedsRerendering}\n />\n \n \n );\n }\n\n return viewportPanes;\n }, [viewports, activeViewportIndex, viewportComponents, dataSource]);\n\n /**\n * Loading indicator until numCols and numRows are gotten from the HangingProtocolService\n */\n if (!numRows || !numCols) {\n return null;\n }\n\n return (\n \n {/* {ViewportPanes} */}\n {getViewportPanes()}\n \n );\n}\n\nViewerViewportGrid.propTypes = {\n viewportComponents: PropTypes.array.isRequired,\n};\n\nViewerViewportGrid.defaultProps = {\n viewportComponents: [],\n};\n\nfunction _getViewportComponent(\n displaySets,\n viewportComponents,\n UINotificationService\n) {\n if (!displaySets || !displaySets.length) {\n return EmptyViewport;\n }\n\n // Todo: Do we have a viewport that has two different SOPClassHandlerIds?\n const SOPClassHandlerId = displaySets[0].SOPClassHandlerId;\n\n for (let i = 0; i < viewportComponents.length; i++) {\n if (!viewportComponents[i]) {\n throw new Error('viewport components not defined');\n }\n if (!viewportComponents[i].displaySetsToDisplay) {\n throw new Error('displaySetsToDisplay is null');\n }\n if (\n viewportComponents[i].displaySetsToDisplay.includes(SOPClassHandlerId)\n ) {\n const { component } = viewportComponents[i];\n return component;\n }\n }\n\n UINotificationService.show({\n title: 'Viewport Not Supported Yet',\n message: `Cannot display SOPClassId of ${displaySets[0].SOPClassUID} yet`,\n type: 'error',\n });\n\n return EmptyViewport;\n}\n\nexport default ViewerViewportGrid;\n","import React, { useEffect, useState, useRef } from 'react';\nimport { useParams, useLocation } from 'react-router';\n\nimport PropTypes from 'prop-types';\n// TODO: DicomMetadataStore should be injected?\nimport { DicomMetadataStore } from '@ohif/core';\nimport { DragAndDropProvider, ImageViewerProvider } from '@ohif/ui';\nimport { useQuery } from '@hooks';\nimport ViewportGrid from '@components/ViewportGrid';\nimport Compose from './Compose';\n\n/**\n * Initialize the route.\n *\n * @param props.servicesManager to read services from\n * @param props.studyInstanceUIDs for a list of studies to read\n * @param props.dataSource to read the data from\n * @param props.filters filters from query params to read the data from\n * @returns array of subscriptions to cancel\n */\nfunction defaultRouteInit(\n {\n servicesManager,\n studyInstanceUIDs,\n dataSource,\n seriesInstanceUIDs,\n filters,\n sortCriteria,\n sortFunction,\n },\n hangingProtocol\n) {\n const {\n DisplaySetService,\n HangingProtocolService,\n } = servicesManager.services;\n\n const unsubscriptions = [];\n const {\n unsubscribe: instanceAddedUnsubscribe,\n } = DicomMetadataStore.subscribe(\n DicomMetadataStore.EVENTS.INSTANCES_ADDED,\n function({ StudyInstanceUID, SeriesInstanceUID, madeInClient = false }) {\n const seriesMetadata = DicomMetadataStore.getSeries(\n StudyInstanceUID,\n SeriesInstanceUID\n );\n\n DisplaySetService.makeDisplaySets(seriesMetadata.instances, madeInClient);\n }\n );\n\n unsubscriptions.push(instanceAddedUnsubscribe);\n\n let allRetrieves = studyInstanceUIDs.map(StudyInstanceUID => {\n seriesInstanceUIDs = seriesInstanceUIDs || [];\n filters = filters || {};\n\n let retrievedSeries;\n\n // if (seriesInstanceUIDs.length) {\n // retrievedSeries = seriesInstanceUIDs.map(seriesInstanceUID => {\n // filters.seriesInstanceUID = seriesInstanceUID;\n\n // return dataSource.retrieve.series.metadata({\n // StudyInstanceUID,\n // filters,\n // sortCriteria,\n // sortFunction,\n // });\n // });\n // } else {\n // retrievedSeries = dataSource.retrieve.series.metadata({\n // StudyInstanceUID,\n // filters,\n // sortCriteria,\n // sortFunction,\n // });\n // }\n retrievedSeries = dataSource.retrieve.series.metadata({\n StudyInstanceUID,\n filters,\n sortCriteria,\n sortFunction,\n });\n\n return retrievedSeries;\n });\n\n allRetrieves = allRetrieves.flat();\n\n // The hanging protocol matching service is fairly expensive to run multiple\n // times, and doesn't allow partial matches to be made (it will simply fail\n // to display anything if a required match fails), so we wait here until all metadata\n // is retrieved (which will synchronously trigger the display set creation)\n // until we run the hanging protocol matching service.\n\n HangingProtocolService.addCustomAttribute(\n 'frameOfReferenceIsMatching', // attributeId\n 'frameOfReferenceIsMatching', // attributeName\n metaData => {\n const FrameOfReferenceUID =\n metaData['FrameOfReferenceUID'] ??\n ((metaData.images || metaData.others || [])[0] || {})[\n 'FrameOfReferenceUID'\n ];\n return FrameOfReferenceUID === seriesInstanceUIDs[0];\n }\n );\n\n HangingProtocolService.addCustomAttribute(\n 'seriesInstanceUidIsMatching', // attributeId\n 'seriesInstanceUidIsMatching', // attributeName\n metaData => {\n const seriesInstanceUid =\n metaData['SeriesInstanceUID'] ??\n ((metaData.images || metaData.others || [])[0] || {})[\n 'SeriesInstanceUID'\n ];\n return seriesInstanceUid === seriesInstanceUIDs[0];\n }\n );\n\n Promise.allSettled(allRetrieves).then(() => {\n const displaySets = DisplaySetService.getActiveDisplaySets();\n\n if (!displaySets || !displaySets.length) {\n return;\n }\n\n const studyMap = {};\n\n // Prior studies don't quite work properly yet, but the studies list\n // is at least being generated and passed in.\n const studies = displaySets.reduce((prev, curr) => {\n const { StudyInstanceUID } = curr;\n if (!studyMap[StudyInstanceUID]) {\n const study = DicomMetadataStore.getStudy(StudyInstanceUID);\n studyMap[StudyInstanceUID] = study;\n prev.push(study);\n }\n return prev;\n }, []);\n\n // The assumption is that the display set at position 0 is the first\n // study being displayed, and is thus the \"active\" study.\n const activeStudy = studies[0];\n\n // run the hanging protocol matching on the displaySets with the predefined\n // hanging protocol in the mode configuration\n HangingProtocolService.run(\n { studies, activeStudy, displaySets },\n hangingProtocol\n );\n });\n\n return unsubscriptions;\n}\n\nexport default function ModeRoute({\n mode,\n dataSourceName,\n extensionManager,\n servicesManager,\n commandsManager,\n hotkeysManager,\n}) {\n // Parse route params/querystring\n const location = useLocation();\n const query = useQuery();\n const params = useParams();\n\n const [\n {\n studyInstanceUIDs,\n seriesInstanceUIDs,\n filters,\n sortCriteria,\n sortFunction,\n },\n setStudyInstanceUIDs,\n ] = useState({});\n\n const [refresh, setRefresh] = useState(false);\n const layoutTemplateData = useRef(false);\n const locationRef = useRef(null);\n const isMounted = useRef(false);\n\n if (location !== locationRef.current) {\n layoutTemplateData.current = null;\n locationRef.current = location;\n }\n\n const {\n DisplaySetService,\n HangingProtocolService: hangingProtocolService,\n } = servicesManager.services;\n\n const { extensions, sopClassHandlers, hotkeys, hangingProtocol } = mode;\n\n if (dataSourceName === undefined) {\n dataSourceName = extensionManager.defaultDataSourceName;\n }\n\n extensionManager.setActiveDataSource(dataSourceName);\n\n const dataSources = extensionManager.getActiveDataSource();\n\n // Only handling one instance of the datasource type (E.g. one DICOMWeb server)\n const dataSource = dataSources[0];\n // Only handling one route per mode for now\n const route = mode.routes[0];\n\n // For each extension, look up their context modules\n // TODO: move to extension manager.\n let contextModules = [];\n\n Object.keys(extensions).forEach(extensionId => {\n const allRegisteredModuleIds = Object.keys(extensionManager.modulesMap);\n const moduleIds = allRegisteredModuleIds.filter(id =>\n id.includes(`${extensionId}.contextModule.`)\n );\n\n if (!moduleIds || !moduleIds.length) {\n return;\n }\n\n const modules = moduleIds.map(extensionManager.getModuleEntry);\n contextModules = contextModules.concat(modules);\n });\n\n const contextModuleProviders = contextModules.map(a => a.provider);\n const CombinedContextProvider = ({ children }) =>\n Compose({ components: contextModuleProviders, children });\n\n function ViewportGridWithDataSourceFactory(customViewportGridProps) {\n return props =>\n ViewportGrid({ ...props, dataSource, ...customViewportGridProps });\n }\n\n useEffect(() => {\n // Preventing state update for unmounted component\n isMounted.current = true;\n return () => {\n isMounted.current = false;\n };\n }, []);\n\n useEffect(() => {\n // Todo: this should not be here, data source should not care about params\n const initializeDataSource = async (params, query) => {\n const {\n studyInstanceUIDs,\n seriesInstanceUIDs,\n filters,\n sortCriteria,\n sortFunction,\n } = await dataSource.initialize({\n params,\n query,\n });\n setStudyInstanceUIDs({\n studyInstanceUIDs,\n seriesInstanceUIDs,\n filters,\n sortCriteria,\n sortFunction,\n });\n };\n\n initializeDataSource(params, query);\n return () => {\n layoutTemplateData.current = null;\n };\n }, [location]);\n\n useEffect(() => {\n if (dataSource.onNewStudy) {\n dataSource.onNewStudy(({ studyInstanceUIDs, seriesInstanceUIDs }) => {\n setStudyInstanceUIDs({\n studyInstanceUIDs,\n seriesInstanceUIDs,\n filters,\n sortCriteria,\n sortFunction,\n });\n });\n }\n }, [location]);\n\n useEffect(() => {\n const retrieveLayoutData = async () => {\n const layoutData = await route.layoutTemplate({\n location,\n servicesManager,\n studyInstanceUIDs,\n });\n if (isMounted.current) {\n layoutTemplateData.current = layoutData;\n setRefresh(!refresh);\n }\n };\n if (studyInstanceUIDs?.length && studyInstanceUIDs[0] !== undefined) {\n retrieveLayoutData();\n }\n return () => {\n layoutTemplateData.current = null;\n };\n }, [studyInstanceUIDs]);\n\n useEffect(() => {\n if (!hotkeys) {\n return;\n }\n\n hotkeysManager.setDefaultHotKeys(hotkeys);\n\n const userPreferredHotkeys = JSON.parse(\n localStorage.getItem('hotkey-definitions')\n );\n\n if (userPreferredHotkeys?.length) {\n hotkeysManager.setHotkeys(userPreferredHotkeys);\n } else {\n hotkeysManager.setHotkeys(hotkeys);\n }\n\n return () => {\n hotkeysManager.destroy();\n };\n }, []);\n\n useEffect(() => {\n if (!layoutTemplateData.current) {\n return;\n }\n\n // TODO: For some reason this is running before the Providers\n // are calling setServiceImplementation\n // TODO -> iterate through services.\n\n // Extension\n\n // Add SOPClassHandlers to a new SOPClassManager.\n DisplaySetService.init(extensionManager, sopClassHandlers);\n\n extensionManager.onModeEnter({\n servicesManager,\n extensionManager,\n commandsManager,\n });\n // Sets the active hanging protocols - if hangingProtocol is undefined,\n // resets to default. Done before the onModeEnter to allow the onModeEnter\n // to perform custom hanging protocol actions\n hangingProtocolService.setActiveProtocols(hangingProtocol);\n mode?.onModeEnter({ servicesManager, extensionManager, commandsManager });\n\n const setupRouteInit = async () => {\n /**\n * The next line should get all the query parameters provided by the URL\n * - except the StudyInstaceUIDs - and create an object called filters\n * used to filtering the study as the user wants otherwise it will return\n * a empty object.\n *\n * Example:\n * const filters = {\n * seriesInstaceUID: 1.2.276.0.7230010.3.1.3.1791068887.5412.1620253993.114611\n * }\n */\n // const filters =\n // Array.from(query.keys()).reduce(\n // (acc: Record, val: string) => {\n // if (val !== 'StudyInstanceUIDs') {\n // if (['seriesInstanceUID', 'SeriesInstanceUID'].includes(val)) {\n // return { ...acc, seriesInstanceUID: query.get(val) };\n // }\n\n // return { ...acc, [val]: query.get(val) };\n // }\n // },\n // {}\n // ) ?? {};\n\n if (route.init) {\n return await route.init(\n {\n servicesManager,\n extensionManager,\n hotkeysManager,\n dataSource,\n },\n hangingProtocol\n );\n }\n\n return defaultRouteInit(\n {\n servicesManager,\n studyInstanceUIDs,\n dataSource,\n seriesInstanceUIDs,\n filters,\n sortCriteria,\n sortFunction,\n },\n hangingProtocol\n );\n };\n\n let unsubscriptions;\n setupRouteInit().then(unsubs => {\n unsubscriptions = unsubs;\n });\n\n return () => {\n extensionManager.onModeExit();\n mode?.onModeExit({ servicesManager, extensionManager });\n unsubscriptions.forEach(unsub => {\n unsub();\n });\n };\n }, [\n mode,\n dataSourceName,\n location,\n route,\n servicesManager,\n extensionManager,\n hotkeysManager,\n studyInstanceUIDs,\n refresh,\n ]);\n\n const renderLayoutData = props => {\n const layoutTemplateModuleEntry = extensionManager.getModuleEntry(\n layoutTemplateData.current.id\n );\n const LayoutComponent = layoutTemplateModuleEntry.component;\n\n return ;\n };\n\n return (\n \n \n \n {layoutTemplateData.current &&\n studyInstanceUIDs?.length &&\n studyInstanceUIDs[0] !== undefined &&\n renderLayoutData({\n ...layoutTemplateData.current.props,\n ViewportGridComp: ViewportGridWithDataSourceFactory(\n layoutTemplateData.current?.props?.viewportGridProps\n ),\n })}\n \n \n \n );\n}\n\nModeRoute.propTypes = {\n mode: PropTypes.object.isRequired,\n dataSourceName: PropTypes.string,\n extensionManager: PropTypes.object,\n servicesManager: PropTypes.object,\n hotkeysManager: PropTypes.object,\n};\n","import React from 'react';\nimport ModeRoute from '@routes/Mode';\nimport checkExtensionDependencies from './checkExtensionDependencies';\n\n/*\n Routes uniquely define an entry point to:\n - A mode\n - Linked to a data source\n - With a specified data set.\n\n The full route template is:\n\n /:modeId/:modeRoute/:sourceType/?queryParameters=example\n\n Where:\n :modeId - Is the mode selected.\n :modeRoute - Is the route within the mode to select.\n :sourceType - Is the data source identifier, which specifies which DataSource to use.\n ?queryParameters - Are query parameters as defined by data source.\n\n A default source can be specified at the app level configuration, and then that source is used if :sourceType is omitted:\n\n /:modeId/:modeRoute/?queryParameters=example\n */\nexport default function buildModeRoutes({\n modes,\n dataSources,\n extensionManager,\n servicesManager,\n commandsManager,\n hotkeysManager,\n}) {\n const routes = [];\n\n // const dataSources = Object.keys(extensionManager.dataSourceMap).map(a =>\n // extensionManager.getDataSources(a)\n // );\n\n const dataSourceNames = [];\n\n dataSources.forEach(dataSource => {\n const { sourceName } = dataSource;\n if (!dataSourceNames.includes(sourceName)) {\n dataSourceNames.push(sourceName);\n }\n });\n\n modes.forEach(mode => {\n checkExtensionDependencies(mode, extensionManager);\n\n // todo: for each route. add route to path.\n dataSourceNames.forEach(dataSourceName => {\n const path = `/${mode.routeName}/${dataSourceName}`;\n\n // TODO move up.\n const children = () => (\n \n );\n\n routes.push({\n path,\n children,\n });\n });\n\n const defaultDataSourceName = extensionManager.defaultDataSourceName;\n\n // Add default DataSource route.\n const path = `/${mode.routeName}`;\n\n // TODO move up.\n const children = () => (\n \n );\n\n routes.push({\n path,\n children,\n private: true, // todo: all mode routes are private for now\n });\n });\n\n return routes;\n}\n","export default function checkExtensionDependencies(mode, extensionManager) {\n const extensionDependencies = mode.extensions;\n\n const dependencyString = `Unmet extension dependency in mode: ${mode.id}`;\n\n Object.keys(extensionDependencies).forEach(extensionId => {\n const extensionInstalled = extensionManager.registeredExtensionIds.includes(\n extensionId\n );\n\n if (!extensionInstalled) {\n throw new Error(\n `${dependencyString}: extension ${extensionId} not found`\n );\n }\n });\n}\n\nfunction areVersionsCompatible(semanticVersion, installedVersion) {\n if (semanticVersion.includes('^')) {\n // Major must match\n const versionLessCaret = semanticVersion.split('^')[1];\n\n // Index 0 is the major version.\n return versionLessCaret[0] === installedVersion[0];\n } else if (semanticVersion.includes('~')) {\n // Major and minor must match\n const versionLessTilde = semanticVersion.split('~')[1];\n\n // Index 0 is the major version.\n // Index 2 is the minor version.\n return (\n versionLessTilde[0] === installedVersion[0] &&\n versionLessTilde[2] === installedVersion[2]\n );\n } else {\n return semanticVersion === installedVersion;\n }\n}\n","import React from 'react';\nimport { useUserAuthentication } from '@ohif/ui';\n\nexport const PrivateRoute = ({ children, handleUnauthenticated }) => {\n const [{ user, enabled }] = useUserAuthentication();\n\n if (enabled && !user) {\n return handleUnauthenticated();\n }\n\n return children;\n};\n\nexport default PrivateRoute;\n","import React from 'react';\nimport { Routes, Route } from 'react-router-dom';\nimport { ErrorBoundary } from '@ohif/ui';\n\n// Route Components\nimport DataSourceWrapper from './DataSourceWrapper';\nimport WorkList from './WorkList';\nimport Local from './Local';\nimport NotFound from './NotFound';\nimport buildModeRoutes from './buildModeRoutes';\nimport PrivateRoute from './PrivateRoute';\n\n// TODO: Make these configurable\n// TODO: Include \"routes\" debug route if dev build\nconst bakedInRoutes = [\n // WORK LIST\n {\n path: '/',\n children: DataSourceWrapper,\n private: true,\n props: { children: WorkList },\n },\n {\n path: '/local',\n children: Local,\n },\n // NOT FOUND (404)\n { component: NotFound },\n];\n\nconst createRoutes = ({\n modes,\n dataSources,\n extensionManager,\n servicesManager,\n commandsManager,\n hotkeysManager,\n routerBasename,\n}) => {\n const routes =\n buildModeRoutes({\n modes,\n dataSources,\n extensionManager,\n servicesManager,\n commandsManager,\n hotkeysManager,\n }) || [];\n\n const allRoutes = [...routes, ...bakedInRoutes];\n\n function RouteWithErrorBoundary({ route, ...rest }) {\n // eslint-disable-next-line react/jsx-props-no-spreading\n return (\n \n \n \n );\n }\n\n const { UserAuthenticationService } = servicesManager.services;\n\n // Note: PrivateRoutes in react-router-dom 6.x should be defined within\n // a Route element\n return (\n \n {allRoutes.map((route, i) => {\n return route.private === true ? (\n \n \n \n }\n >\n ) : (\n }\n />\n );\n })}\n \n );\n};\n\nexport default createRoutes;\n","import {\n CommandsManager,\n ExtensionManager,\n ServicesManager,\n HotkeysManager,\n UINotificationService,\n UIModalService,\n UIDialogService,\n UIViewportDialogService,\n MeasurementService,\n DisplaySetService,\n ToolBarService,\n ViewportGridService,\n HangingProtocolService,\n CineService,\n UserAuthenticationService,\n errorHandler,\n // utils,\n} from '@ohif/core';\n\n/**\n * @param {object|func} appConfigOrFunc - application configuration, or a function that returns application configuration\n * @param {object[]} defaultExtensions - array of extension objects\n */\nasync function appInit(appConfigOrFunc, defaultExtensions, defaultModes) {\n const appConfig = {\n ...(typeof appConfigOrFunc === 'function'\n ? appConfigOrFunc({ servicesManager })\n : appConfigOrFunc),\n };\n\n const commandsManagerConfig = {\n getAppState: () => {},\n };\n\n const commandsManager = new CommandsManager(commandsManagerConfig);\n const servicesManager = new ServicesManager(commandsManager);\n const hotkeysManager = new HotkeysManager(commandsManager, servicesManager);\n const extensionManager = new ExtensionManager({\n commandsManager,\n servicesManager,\n hotkeysManager,\n appConfig,\n });\n\n servicesManager.registerServices([\n UINotificationService,\n UIModalService,\n UIDialogService,\n UIViewportDialogService,\n MeasurementService,\n DisplaySetService,\n ToolBarService,\n ViewportGridService,\n HangingProtocolService,\n CineService,\n UserAuthenticationService,\n ]);\n\n errorHandler.getHTTPErrorHandler = () => {\n if (typeof appConfig.httpErrorHandler === 'function') {\n return appConfig.httpErrorHandler;\n }\n };\n\n /**\n * Example: [ext1, ext2, ext3]\n * Example2: [[ext1, config], ext2, [ext3, config]]\n */\n await extensionManager.registerExtensions(\n [...defaultExtensions, ...appConfig.extensions],\n appConfig.dataSources\n );\n\n // TODO: We no longer use `utils.addServer`\n // TODO: We no longer init webWorkers at app level\n // TODO: We no longer init the user Manager\n\n if (!appConfig.modes) {\n throw new Error('No modes are defined! Check your app-config.js');\n }\n\n for (let i = 0; i < defaultModes.length; i++) {\n const { modeFactory, id } = defaultModes[i];\n\n // If the appConfig contains configuration for this mode, use it.\n const modeConfig =\n appConfig.modeConfig && appConfig.modeConfig[i]\n ? appConfig.modeConfig[id]\n : {};\n\n const mode = modeFactory(modeConfig);\n\n appConfig.modes.push(mode);\n }\n\n return {\n appConfig,\n commandsManager,\n extensionManager,\n servicesManager,\n hotkeysManager,\n };\n}\n\nexport default appInit;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nfunction CallbackPage({ userManager, onRedirectSuccess }) {\n const onRedirectError = error => {\n throw new Error(error);\n };\n\n userManager\n .signinRedirectCallback()\n .then(user => onRedirectSuccess(user))\n .catch(error => onRedirectError(error));\n\n return null;\n}\n\nCallbackPage.propTypes = {\n userManager: PropTypes.object.isRequired,\n};\n\nexport default CallbackPage;\n","import React from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport PropTypes from 'prop-types';\n\nfunction SignoutCallbackComponent({ userManager }) {\n const navigate = useNavigate();\n\n const onRedirectSuccess = (/* user */) => {\n const { pathname, search = '' } = JSON.parse(\n sessionStorage.getItem('ohif-redirect-to')\n );\n\n navigate(`${pathname}?${search}`);\n };\n\n const onRedirectError = error => {\n throw new Error(error);\n };\n\n userManager\n .signoutRedirectCallback()\n .then(user => onRedirectSuccess(user))\n .catch(error => onRedirectError(error));\n\n return null;\n}\n\nSignoutCallbackComponent.propTypes = {\n userManager: PropTypes.object.isRequired,\n};\n\nexport default SignoutCallbackComponent;\n","import React from 'react';\nimport { useEffect } from 'react';\nimport { Route, Routes, useLocation, useNavigate } from 'react-router';\nimport CallbackPage from '../routes/CallbackPage';\nimport SignoutCallbackComponent from '../routes/SignoutCallbackComponent';\nimport getUserManagerForOpenIdConnectClient from './getUserManagerForOpenIdConnectClient.js';\n\nfunction _isAbsoluteUrl(url) {\n return url.includes('http://') || url.includes('https://');\n}\n\nfunction _makeAbsoluteIfNecessary(url, base_url) {\n if (_isAbsoluteUrl(url)) {\n return url;\n }\n\n /*\n * Make sure base_url and url are not duplicating slashes.\n */\n if (base_url[base_url.length - 1] === '/') {\n base_url = base_url.slice(0, base_url.length - 1);\n }\n\n return base_url + url;\n}\n\nconst initUserManager = (oidc, routerBasename) => {\n if (!oidc || !oidc.length) {\n return;\n }\n\n const firstOpenIdClient = oidc[0];\n const { protocol, host } = window.location;\n const baseUri = `${protocol}//${host}${routerBasename}`;\n\n const redirect_uri = firstOpenIdClient.redirect_uri || '/callback';\n const silent_redirect_uri =\n firstOpenIdClient.silent_redirect_uri || '/silent-refresh.html';\n const post_logout_redirect_uri =\n firstOpenIdClient.post_logout_redirect_uri || '/';\n\n const openIdConnectConfiguration = Object.assign({}, firstOpenIdClient, {\n redirect_uri: _makeAbsoluteIfNecessary(redirect_uri, baseUri),\n silent_redirect_uri: _makeAbsoluteIfNecessary(silent_redirect_uri, baseUri),\n post_logout_redirect_uri: _makeAbsoluteIfNecessary(\n post_logout_redirect_uri,\n baseUri\n ),\n });\n\n return getUserManagerForOpenIdConnectClient(openIdConnectConfiguration);\n};\n\nfunction LogoutComponent(props) {\n const { userManager } = props;\n localStorage.setItem('signoutEvent', 'true');\n const location = useLocation();\n const query = new URLSearchParams(location.search);\n userManager.signoutRedirect({\n post_logout_redirect_uri: query.get('redirect_uri'),\n });\n return null;\n}\n\nfunction LoginComponent(userManager) {\n const queryParams = new URLSearchParams(location.search);\n const iss = queryParams.get('iss');\n const loginHint = queryParams.get('login_hint');\n const targetLinkUri = queryParams.get('target_link_uri');\n if (iss !== oidcAuthority) {\n console.error('iss of /login does not match the oidc authority');\n return null;\n }\n\n userManager.removeUser().then(() => {\n if (targetLinkUri !== null) {\n const ohifRedirectTo = {\n pathname: new URL(targetLinkUri).pathname,\n };\n sessionStorage.setItem(\n 'ohif-redirect-to',\n JSON.stringify(ohifRedirectTo)\n );\n } else {\n const ohifRedirectTo = {\n pathname: '/',\n };\n sessionStorage.setItem(\n 'ohif-redirect-to',\n JSON.stringify(ohifRedirectTo)\n );\n }\n\n if (loginHint !== null) {\n userManager.signinRedirect({ login_hint: loginHint });\n } else {\n userManager.signinRedirect();\n }\n });\n\n return null;\n}\n\nfunction OpenIdConnectRoutes({\n oidc,\n routerBasename,\n UserAuthenticationService,\n}) {\n const userManager = initUserManager(oidc, routerBasename);\n\n const getAuthorizationHeader = () => {\n const user = UserAuthenticationService.getUser();\n\n return {\n Authorization: `Bearer ${user.access_token}`,\n };\n };\n\n const handleUnauthenticated = () => {\n userManager.signinRedirect();\n\n // return null because this is used in a react component\n return null;\n };\n\n const navigate = useNavigate();\n\n //for multi-tab logout\n useEffect(() => {\n localStorage.removeItem('signoutEvent');\n const storageEventListener = event => {\n const signOutEvent = localStorage.getItem('signoutEvent');\n if (signOutEvent) {\n navigate(\n `/logout?redirect_uri=${encodeURIComponent(window.location.href)}`\n );\n }\n };\n\n window.addEventListener('storage', storageEventListener);\n\n return () => {\n window.removeEventListener('storage', storageEventListener);\n };\n }, []);\n\n useEffect(() => {\n UserAuthenticationService.set({ enabled: true });\n\n UserAuthenticationService.setServiceImplementation({\n getAuthorizationHeader,\n handleUnauthenticated,\n });\n }, []);\n\n const oidcAuthority = oidc[0].authority;\n\n const location = useLocation();\n const { pathname, search } = location;\n\n const redirect_uri = new URL(userManager.settings._redirect_uri).pathname; //.replace(routerBasename,'')\n const silent_refresh_uri = new URL(userManager.settings._silent_redirect_uri)\n .pathname; //.replace(routerBasename,'')\n const post_logout_redirect_uri = new URL(\n userManager.settings._post_logout_redirect_uri\n ).pathname; //.replace(routerBasename,'');\n\n // const pathnameRelative = pathname.replace(routerBasename,'');\n\n if (pathname !== redirect_uri) {\n sessionStorage.setItem(\n 'ohif-redirect-to',\n JSON.stringify({ pathname, search })\n );\n }\n\n return (\n \n \n console.log('Signout successful')}\n errorCallback={error => {\n console.warn(error);\n console.warn('Signout failed');\n }}\n />\n }\n />\n {\n const { pathname, search = '' } = JSON.parse(\n sessionStorage.getItem('ohif-redirect-to')\n );\n\n UserAuthenticationService.setUser(user);\n\n navigate({\n pathname,\n search,\n });\n }}\n />\n }\n />\n \n }\n />\n }\n />\n \n );\n}\n\nexport default OpenIdConnectRoutes;\n","import { UserManager } from 'oidc-client';\n\n/**\n * Creates a userManager from oidcSettings\n * LINK: https://github.com/IdentityModel/oidc-client-js/wiki#configuration\n *\n * @param {Object} oidcSettings\n * @param {string} oidcSettings.authServerUrl,\n * @param {string} oidcSettings.clientId,\n * @param {string} oidcSettings.authRedirectUri,\n * @param {string} oidcSettings.postLogoutRedirectUri,\n * @param {string} oidcSettings.responseType,\n * @param {string} oidcSettings.extraQueryParams,\n */\nexport default function getUserManagerForOpenIdConnectClient(oidcSettings) {\n if (!oidcSettings) {\n return;\n }\n\n const settings = {\n ...oidcSettings,\n automaticSilentRenew: true,\n revokeAccessTokenOnSignout: true,\n filterProtocolClaims: true,\n loadUserInfo: true,\n };\n\n const userManager = new UserManager(settings);\n\n return userManager;\n}\n","// External\nimport React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport i18n from '@ohif/i18n';\nimport { I18nextProvider } from 'react-i18next';\nimport { HashRouter } from 'react-router-dom';\nimport Compose from './routes/Mode/Compose';\n\nimport {\n DialogProvider,\n Modal,\n ModalProvider,\n SnackbarProvider,\n ThemeWrapper,\n ViewportDialogProvider,\n ViewportGridProvider,\n CineProvider,\n UserAuthenticationProvider,\n} from '@ohif/ui';\n// Viewer Project\n// TODO: Should this influence study list?\nimport { AppConfigProvider } from '@state';\nimport createRoutes from './routes';\nimport appInit from './appInit.js';\nimport OpenIdConnectRoutes from './utils/OpenIdConnectRoutes';\n\nlet commandsManager, extensionManager, servicesManager, hotkeysManager;\n\nfunction App({ config, defaultExtensions, defaultModes }) {\n const [init, setInit] = useState(null);\n useEffect(() => {\n const run = async () => {\n appInit(config, defaultExtensions, defaultModes)\n .then(setInit)\n .catch(console.error);\n };\n\n run();\n }, []);\n\n if (!init) {\n return null;\n }\n\n // Set above for named export\n commandsManager = init.commandsManager;\n extensionManager = init.extensionManager;\n servicesManager = init.servicesManager;\n hotkeysManager = init.hotkeysManager;\n\n // Set appConfig\n const appConfigState = init.appConfig;\n const { routerBasename, modes, dataSources, oidc } = appConfigState;\n\n // Use config to create routes\n const appRoutes = createRoutes({\n modes,\n dataSources,\n extensionManager,\n servicesManager,\n commandsManager,\n hotkeysManager,\n routerBasename,\n });\n const {\n UIDialogService,\n UIModalService,\n UINotificationService,\n UIViewportDialogService,\n ViewportGridService,\n CineService,\n UserAuthenticationService,\n } = servicesManager.services;\n\n const providers = [\n [AppConfigProvider, { value: appConfigState }],\n [UserAuthenticationProvider, { service: UserAuthenticationService }],\n [I18nextProvider, { i18n }],\n [ThemeWrapper],\n [ViewportGridProvider, { service: ViewportGridService }],\n [ViewportDialogProvider, { service: UIViewportDialogService }],\n [CineProvider, { service: CineService }],\n [SnackbarProvider, { service: UINotificationService }],\n [DialogProvider, { service: UIDialogService }],\n [ModalProvider, { service: UIModalService, modal: Modal }],\n ];\n const CombinedProviders = ({ children }) =>\n Compose({ components: providers, children });\n\n let authRoutes = null;\n\n if (oidc) {\n authRoutes = (\n \n );\n }\n\n return (\n \n \n {authRoutes}\n {appRoutes}\n \n \n );\n}\n\nApp.propTypes = {\n config: PropTypes.oneOfType([\n PropTypes.func,\n PropTypes.shape({\n routerBasename: PropTypes.string.isRequired,\n oidc: PropTypes.array,\n whiteLabeling: PropTypes.shape({\n createLogoComponentFn: PropTypes.func,\n }),\n extensions: PropTypes.array,\n }),\n ]).isRequired,\n /* Extensions that are \"bundled\" or \"baked-in\" to the application.\n * These would be provided at build time as part of they entry point. */\n defaultExtensions: PropTypes.array,\n};\n\nApp.defaultProps = {\n config: {\n /**\n * Relative route from domain root that OHIF instance is installed at.\n * For example:\n *\n * Hosted at: https://ohif.org/where-i-host-the/viewer/\n * Value: `/where-i-host-the/viewer/`\n * */\n routerBaseName: '/',\n /**\n *\n */\n showLoadingIndicator: true,\n showStudyList: true,\n oidc: [],\n extensions: [],\n },\n defaultExtensions: [],\n};\n\nexport default App;\n\nexport { commandsManager, extensionManager, servicesManager };\n",null,null,null,"function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","import macro from '../../macros.js';\n\nvar DEFAULT_VIEW_API = navigator.gpu ? 'WebGPU' : 'WebGL';\nvar VIEW_CONSTRUCTORS = Object.create(null); // ----------------------------------------------------------------------------\n// static methods\n// ----------------------------------------------------------------------------\n\nfunction registerViewConstructor(name, constructor) {\n VIEW_CONSTRUCTORS[name] = constructor;\n}\nfunction listViewAPIs() {\n return Object.keys(VIEW_CONSTRUCTORS);\n}\nfunction newAPISpecificView(name) {\n var initialValues = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return VIEW_CONSTRUCTORS[name] && VIEW_CONSTRUCTORS[name](initialValues);\n} // ----------------------------------------------------------------------------\n// vtkRenderWindow methods\n// ----------------------------------------------------------------------------\n\nfunction vtkRenderWindow(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkRenderWindow'); // Add renderer\n\n publicAPI.addRenderer = function (renderer) {\n if (publicAPI.hasRenderer(renderer)) {\n return;\n }\n\n renderer.setRenderWindow(publicAPI);\n model.renderers.push(renderer); // for (this->Renderers->InitTraversal(rsit);\n // (aren = this->Renderers->GetNextRenderer(rsit)); )\n // {\n // aren->SetAllocatedRenderTime\n // (1.0/(this->DesiredUpdateRate*this->Renderers->GetNumberOfItems()));\n // }\n\n publicAPI.modified();\n }; // Remove renderer\n\n\n publicAPI.removeRenderer = function (renderer) {\n model.renderers = model.renderers.filter(function (r) {\n return r !== renderer;\n });\n publicAPI.modified();\n };\n\n publicAPI.hasRenderer = function (ren) {\n return model.renderers.indexOf(ren) !== -1;\n }; // get an API specific view of this data\n\n\n publicAPI.newAPISpecificView = function (name) {\n var initialValues = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return newAPISpecificView(name || model.defaultViewAPI, initialValues);\n }; // Add renderer\n\n\n publicAPI.addView = function (view) {\n if (publicAPI.hasView(view)) {\n return;\n }\n\n view.setRenderable(publicAPI);\n model.views.push(view);\n publicAPI.modified();\n }; // Remove renderer\n\n\n publicAPI.removeView = function (view) {\n model.views = model.views.filter(function (r) {\n return r !== view;\n });\n publicAPI.modified();\n };\n\n publicAPI.hasView = function (view) {\n return model.views.indexOf(view) !== -1;\n }; // handle any pre render initializations\n\n\n publicAPI.preRender = function () {\n model.renderers.forEach(function (ren) {\n // make sure we have a camera\n if (!ren.isActiveCameraCreated()) {\n ren.resetCamera();\n }\n });\n };\n\n publicAPI.render = function () {\n publicAPI.preRender();\n\n if (model.interactor) {\n model.interactor.render();\n } else {\n model.views.forEach(function (view) {\n return view.traverseAllPasses();\n });\n }\n };\n\n publicAPI.getStatistics = function () {\n var results = {\n propCount: 0,\n invisiblePropCount: 0\n };\n model.renderers.forEach(function (ren) {\n var props = ren.getViewProps();\n props.forEach(function (prop) {\n if (prop.getVisibility()) {\n results.propCount += 1;\n var mpr = prop.getMapper && prop.getMapper();\n\n if (mpr && mpr.getPrimitiveCount) {\n var pcount = mpr.getPrimitiveCount();\n Object.keys(pcount).forEach(function (keyName) {\n if (!results[keyName]) {\n results[keyName] = 0;\n }\n\n results[keyName] += pcount[keyName];\n });\n }\n } else {\n results.invisiblePropCount += 1;\n }\n });\n });\n results.str = Object.keys(results).map(function (keyName) {\n return \"\".concat(keyName, \": \").concat(results[keyName]);\n }).join('\\n');\n return results;\n };\n\n publicAPI.captureImages = function () {\n var format = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'image/png';\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n macro.setImmediate(publicAPI.render);\n return model.views.map(function (view) {\n return view.captureNextImage ? view.captureNextImage(format, opts) : undefined;\n }).filter(function (i) {\n return !!i;\n });\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n defaultViewAPI: DEFAULT_VIEW_API,\n renderers: [],\n views: [],\n interactor: null,\n neverRendered: true,\n numberOfLayers: 1\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Build VTK API\n\n macro.obj(publicAPI, model);\n macro.setGet(publicAPI, model, ['interactor', 'numberOfLayers', 'views', 'defaultViewAPI']);\n macro.get(publicAPI, model, ['neverRendered']);\n macro.getArray(publicAPI, model, ['renderers']);\n macro.event(publicAPI, model, 'completion'); // Object methods\n\n vtkRenderWindow(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkRenderWindow'); // ----------------------------------------------------------------------------\n\nvar vtkRenderWindow$1 = {\n newInstance: newInstance,\n extend: extend,\n registerViewConstructor: registerViewConstructor,\n listViewAPIs: listViewAPIs,\n newAPISpecificView: newAPISpecificView\n};\n\nexport { vtkRenderWindow$1 as default, extend, listViewAPIs, newAPISpecificView, newInstance, registerViewConstructor };\n","import macro from '../../macros.js';\n\nfunction vtkRenderPass(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkRenderPass');\n\n publicAPI.getOperation = function () {\n return model.currentOperation;\n };\n\n publicAPI.setCurrentOperation = function (val) {\n model.currentOperation = val;\n model.currentTraverseOperation = \"traverse\".concat(macro.capitalize(model.currentOperation));\n };\n\n publicAPI.getTraverseOperation = function () {\n return model.currentTraverseOperation;\n }; // by default this class will traverse all of its\n // preDelegateOperations, then call its delegate render passes\n // the traverse all of its postDelegateOperations\n // any of those three arrays can be empty\n\n\n publicAPI.traverse = function (viewNode) {\n var parent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n if (model.deleted) {\n return;\n } // we just render our delegates in order\n\n\n model.currentParent = parent;\n model.preDelegateOperations.forEach(function (val) {\n publicAPI.setCurrentOperation(val);\n viewNode.traverse(publicAPI);\n });\n model.delegates.forEach(function (val) {\n val.traverse(viewNode, publicAPI);\n });\n model.postDelegateOperations.forEach(function (val) {\n publicAPI.setCurrentOperation(val);\n viewNode.traverse(publicAPI);\n });\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n delegates: [],\n currentOperation: null,\n preDelegateOperations: [],\n postDelegateOperations: [],\n currentParent: null\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Build VTK API\n\n macro.obj(publicAPI, model);\n macro.get(publicAPI, model, ['currentOperation']);\n macro.setGet(publicAPI, model, ['delegates', 'currentParent', 'preDelegateOperations', 'postDelegateOperations']); // Object methods\n\n vtkRenderPass(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkRenderPass'); // ----------------------------------------------------------------------------\n\nvar vtkRenderPass$1 = {\n newInstance: newInstance,\n extend: extend\n};\n\nexport { vtkRenderPass$1 as default, extend, newInstance };\n","import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';\nimport macro from '../../macros.js';\nimport vtkOpenGLTexture from './Texture.js';\nimport vtkOpenGLFramebuffer from './Framebuffer.js';\nimport vtkRenderPass from '../SceneGraph/RenderPass.js';\nimport vtkDataArray from '../../Common/Core/DataArray.js';\nimport vtkHelper from './Helper.js';\nimport vtkProperty from '../Core/Property.js';\nimport vtkShaderProgram from './ShaderProgram.js';\nimport vtkVertexArrayObject from './VertexArrayObject.js';\n\nvar Representation = vtkProperty.Representation;\nvar vtkErrorMacro = macro.vtkErrorMacro; // ----------------------------------------------------------------------------\n\nfunction translucentShaderReplacement(shaders) {\n var substituteRes = vtkShaderProgram.substitute(shaders.Fragment, '//VTK::RenderPassFragmentShader::Impl', \"\\n float weight = gl_FragData[0].a * pow(max(1.1 - gl_FragCoord.z, 0.0), 2.0);\\n gl_FragData[0] = vec4(gl_FragData[0].rgb*weight, gl_FragData[0].a);\\n gl_FragData[1].r = weight;\\n \", false);\n shaders.Fragment = substituteRes.result;\n}\n\nvar oitpFragTemplate = \"//VTK::System::Dec\\n\\nin vec2 tcoord;\\n\\nuniform sampler2D translucentRTexture;\\nuniform sampler2D translucentRGBATexture;\\n\\n// the output of this shader\\n//VTK::Output::Dec\\n\\nvoid main()\\n{\\n vec4 t1Color = texture(translucentRGBATexture, tcoord);\\n float t2Color = texture(translucentRTexture, tcoord).r;\\n gl_FragData[0] = vec4(t1Color.rgb/max(t2Color,0.01), 1.0 - t1Color.a);\\n}\\n\";\n\nfunction vtkOpenGLOrderIndependentTranslucentPass(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkOpenGLOrderIndependentTranslucentPass'); // build vertices etc\n\n publicAPI.createVertexBuffer = function () {\n // 4 corner points in clipping space in order (x, y, z) where z is always set to -1\n // prettier-ignore\n var ptsArray = new Float32Array([-1, -1, -1, 1, -1, -1, -1, 1, -1, 1, 1, -1]); // 4 corresponding corner points in texture space in order (x, y)\n\n var tcoordArray = new Float32Array([0, 0, 1, 0, 0, 1, 1, 1]); // a square defined as cell relation ship in order (cell_size, v1, v2, v3, v4)\n\n var cellArray = new Uint16Array([4, 0, 1, 3, 2]);\n var points = vtkDataArray.newInstance({\n numberOfComponents: 3,\n values: ptsArray\n });\n points.setName('points');\n var tcoords = vtkDataArray.newInstance({\n numberOfComponents: 2,\n values: tcoordArray\n });\n tcoords.setName('tcoords');\n var cells = vtkDataArray.newInstance({\n numberOfComponents: 1,\n values: cellArray\n });\n model.tris.getCABO().createVBO(cells, 'polys', Representation.SURFACE, {\n points: points,\n tcoords: tcoords,\n cellOffset: 0\n });\n model.VBOBuildTime.modified();\n };\n\n publicAPI.createFramebuffer = function (viewNode) {\n var _model$framebuffer;\n\n var size = viewNode.getSize();\n var gl = viewNode.getContext();\n model.framebuffer = vtkOpenGLFramebuffer.newInstance();\n model.framebuffer.setOpenGLRenderWindow(viewNode);\n\n (_model$framebuffer = model.framebuffer).create.apply(_model$framebuffer, _toConsumableArray(size));\n\n model.framebuffer.saveCurrentBindingsAndBuffers();\n model.framebuffer.bind();\n model.translucentRGBATexture = vtkOpenGLTexture.newInstance();\n model.translucentRGBATexture.setInternalFormat(gl.RGBA16F);\n model.translucentRGBATexture.setFormat(gl.RGBA);\n model.translucentRGBATexture.setOpenGLDataType(gl.HALF_FLOAT);\n model.translucentRGBATexture.setOpenGLRenderWindow(viewNode);\n model.translucentRGBATexture.create2DFromRaw(size[0], size[1], 4, 'Float32Array', null);\n model.translucentRTexture = vtkOpenGLTexture.newInstance();\n model.translucentRTexture.setInternalFormat(gl.R16F);\n model.translucentRTexture.setFormat(gl.RED);\n model.translucentRTexture.setOpenGLDataType(gl.HALF_FLOAT);\n model.translucentRTexture.setOpenGLRenderWindow(viewNode);\n model.translucentRTexture.create2DFromRaw(size[0], size[1], 1, 'Float32Array', null);\n model.translucentZTexture = vtkOpenGLTexture.newInstance();\n model.translucentZTexture.setOpenGLRenderWindow(viewNode);\n model.translucentZTexture.createDepthFromRaw(size[0], size[1], 'Float32Array', null);\n model.framebuffer.setColorBuffer(model.translucentRGBATexture, 0);\n model.framebuffer.setColorBuffer(model.translucentRTexture, 1);\n model.framebuffer.setDepthBuffer(model.translucentZTexture);\n };\n\n publicAPI.createCopyShader = function (viewNode) {\n model.copyShader = viewNode.getShaderCache().readyShaderProgramArray(['//VTK::System::Dec', 'attribute vec4 vertexDC;', 'attribute vec2 tcoordTC;', 'varying vec2 tcoord;', 'void main() { tcoord = tcoordTC; gl_Position = vertexDC; }'].join('\\n'), oitpFragTemplate, '');\n };\n\n publicAPI.createVBO = function (viewNode) {\n var gl = viewNode.getContext();\n model.tris.setOpenGLRenderWindow(viewNode);\n publicAPI.createVertexBuffer();\n var program = model.copyShader; // prepare the vertex and triangle data for the image plane to render to\n\n model.tris.getCABO().bind();\n\n if (!model.copyVAO.addAttributeArray(program, model.tris.getCABO(), 'vertexDC', model.tris.getCABO().getVertexOffset(), model.tris.getCABO().getStride(), gl.FLOAT, 3, gl.FALSE)) {\n vtkErrorMacro('Error setting vertexDC in copy shader VAO.');\n }\n\n if (!model.copyVAO.addAttributeArray(program, model.tris.getCABO(), 'tcoordTC', model.tris.getCABO().getTCoordOffset(), model.tris.getCABO().getStride(), gl.FLOAT, 2, gl.FALSE)) {\n vtkErrorMacro('Error setting vertexDC in copy shader VAO.');\n }\n };\n\n publicAPI.traverse = function (viewNode, renNode, forwardPass) {\n if (model.deleted) {\n return;\n }\n\n var size = viewNode.getSize();\n var gl = viewNode.getContext(); // if we lack the webgl2 and half floatsupport just do\n // basic alpha blending\n\n model._supported = false;\n\n if (renNode.getSelector() || !gl || !viewNode.getWebgl2() || !gl.getExtension('EXT_color_buffer_half_float') && !gl.getExtension('EXT_color_buffer_float')) {\n publicAPI.setCurrentOperation('translucentPass');\n renNode.traverse(publicAPI);\n return;\n }\n\n model._supported = true; // prepare framebuffer // allocate framebuffer if needed and bind it\n\n if (model.framebuffer === null) {\n publicAPI.createFramebuffer(viewNode);\n } else {\n var fbSize = model.framebuffer.getSize();\n\n if (fbSize === null || fbSize[0] !== size[0] || fbSize[1] !== size[1]) {\n model.framebuffer.releaseGraphicsResources();\n model.translucentRGBATexture.releaseGraphicsResources(viewNode);\n model.translucentRTexture.releaseGraphicsResources(viewNode);\n model.translucentZTexture.releaseGraphicsResources(viewNode);\n publicAPI.createFramebuffer(viewNode);\n } else {\n // store framebuffer bindings to restore them later\n model.framebuffer.saveCurrentBindingsAndBuffers();\n model.framebuffer.bind();\n }\n }\n\n gl.drawBuffers([gl.COLOR_ATTACHMENT0]);\n gl.clearBufferfv(gl.COLOR, 0, [0.0, 0.0, 0.0, 0.0]);\n gl.clearBufferfv(gl.DEPTH, 0, [1.0]);\n gl.colorMask(false, false, false, false); // rerender the opaque pass to set the depth buffer\n // TODO remove when webgl1 is deprecated and instead\n // have the forward pass use a texture backed zbuffer\n\n if (forwardPass.getOpaqueActorCount() > 0) {\n forwardPass.setCurrentOperation('opaquePass');\n renNode.traverse(forwardPass);\n }\n\n gl.colorMask(true, true, true, true);\n gl.drawBuffers([gl.COLOR_ATTACHMENT0, gl.COLOR_ATTACHMENT1]); // make sure to clear the entire framebuffer as we will\n // be blitting the entire thing all of it needs good initial values\n\n gl.viewport(0, 0, size[0], size[1]);\n gl.scissor(0, 0, size[0], size[1]);\n gl.clearBufferfv(gl.COLOR, 0, [0.0, 0.0, 0.0, 1.0]);\n gl.clearBufferfv(gl.COLOR, 1, [0.0, 0.0, 0.0, 0.0]);\n gl.enable(gl.DEPTH_TEST);\n gl.enable(gl.BLEND); // basic gist is we accumulate color into RGB We compute final opacity\n // into A We store accumulated opacity into R of the R texture.\n\n gl.blendFuncSeparate(gl.ONE, gl.ONE, gl.ZERO, gl.ONE_MINUS_SRC_ALPHA); // now do the translucent rendering\n\n publicAPI.setCurrentOperation('translucentPass');\n renNode.traverse(publicAPI);\n gl.drawBuffers([gl.NONE]);\n model.framebuffer.restorePreviousBindingsAndBuffers(); // gl.drawBuffers([gl.BACK]);\n // make sure the copy shader is ready\n\n if (model.copyShader === null) {\n publicAPI.createCopyShader(viewNode);\n } else {\n viewNode.getShaderCache().readyShaderProgram(model.copyShader);\n } // make sure we have a VAO\n\n\n if (!model.copyVAO) {\n model.copyVAO = vtkVertexArrayObject.newInstance();\n model.copyVAO.setOpenGLRenderWindow(viewNode);\n }\n\n model.copyVAO.bind(); // make sure the VBO is up to date\n\n if (model.VBOBuildTime.getMTime() < publicAPI.getMTime()) {\n publicAPI.createVBO(viewNode);\n }\n\n gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n gl.depthMask(false);\n gl.depthFunc(gl.ALWAYS);\n gl.viewport(0, 0, size[0], size[1]);\n gl.scissor(0, 0, size[0], size[1]); // activate texture\n\n model.translucentRGBATexture.activate();\n model.copyShader.setUniformi('translucentRGBATexture', model.translucentRGBATexture.getTextureUnit());\n model.translucentRTexture.activate();\n model.copyShader.setUniformi('translucentRTexture', model.translucentRTexture.getTextureUnit()); // render quad\n\n gl.drawArrays(gl.TRIANGLES, 0, model.tris.getCABO().getElementCount());\n gl.depthMask(true);\n gl.depthFunc(gl.LEQUAL);\n model.translucentRGBATexture.deactivate();\n model.translucentRTexture.deactivate();\n };\n\n publicAPI.getShaderReplacement = function () {\n if (model._supported) {\n return translucentShaderReplacement;\n }\n\n return null;\n };\n\n publicAPI.releaseGraphicsResources = function (viewNode) {\n if (model.framebuffer) {\n model.framebuffer.releaseGraphicsResources(viewNode);\n model.framebuffer = null;\n }\n\n if (model.translucentRGBATexture) {\n model.translucentRGBATexture.releaseGraphicsResources(viewNode);\n model.translucentRGBATexture = null;\n }\n\n if (model.translucentRTexture) {\n model.translucentRTexture.releaseGraphicsResources(viewNode);\n model.translucentRTexture = null;\n }\n\n if (model.translucentZTexture) {\n model.translucentZTexture.releaseGraphicsResources(viewNode);\n model.translucentZTexture = null;\n }\n\n if (model.copyVAO) {\n model.copyVAO.releaseGraphicsResources(viewNode);\n model.copyVAO = null;\n }\n\n if (model.copyShader) {\n model.copyShader.releaseGraphicsResources(viewNode);\n model.copyShader = null;\n }\n\n if (model.tris) {\n model.tris.releaseGraphicsResources(viewNode);\n model.tris = null;\n }\n\n publicAPI.modified();\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n framebuffer: null,\n copyShader: null,\n tris: null\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Build VTK API\n\n vtkRenderPass.extend(publicAPI, model, initialValues);\n model.VBOBuildTime = {};\n macro.obj(model.VBOBuildTime, {\n mtime: 0\n });\n model.tris = vtkHelper.newInstance();\n macro.get(publicAPI, model, ['framebuffer']); // Object methods\n\n vtkOpenGLOrderIndependentTranslucentPass(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkOpenGLOrderIndependentTranslucentPass'); // ----------------------------------------------------------------------------\n\nvar vtkOpenGLOrderIndependentTranslucentPass$1 = {\n newInstance: newInstance,\n extend: extend\n};\n\nexport { vtkOpenGLOrderIndependentTranslucentPass$1 as default, extend, newInstance };\n","import macro from '../../macros.js';\nimport vtkOpenGLFramebuffer from './Framebuffer.js';\nimport vtkRenderPass from '../SceneGraph/RenderPass.js';\nimport vtkOpenGLOrderIndependentTranslucentPass from './OrderIndependentTranslucentPass.js';\n\nfunction vtkForwardPass(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkForwardPass'); // this pass implements a forward rendering pipeline\n // if both volumes and opaque geometry are present\n // it will mix the two together by capturing a zbuffer\n // first\n\n publicAPI.traverse = function (viewNode) {\n var parent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n if (model.deleted) {\n return;\n } // we just render our delegates in order\n\n\n model.currentParent = parent; // build\n\n publicAPI.setCurrentOperation('buildPass');\n viewNode.traverse(publicAPI);\n var numlayers = viewNode.getRenderable().getNumberOfLayers(); // iterate over renderers\n\n var renderers = viewNode.getChildren();\n\n for (var i = 0; i < numlayers; i++) {\n for (var index = 0; index < renderers.length; index++) {\n var renNode = renderers[index];\n var ren = viewNode.getRenderable().getRenderers()[index];\n\n if (ren.getDraw() && ren.getLayer() === i) {\n // check for both opaque and volume actors\n model.opaqueActorCount = 0;\n model.translucentActorCount = 0;\n model.volumeCount = 0;\n model.overlayActorCount = 0;\n publicAPI.setCurrentOperation('queryPass');\n renNode.traverse(publicAPI); // do we need to capture a zbuffer?\n\n if (model.opaqueActorCount > 0 && model.volumeCount > 0 || model.depthRequested) {\n var size = viewNode.getFramebufferSize(); // make sure the framebuffer is setup\n\n if (model.framebuffer === null) {\n model.framebuffer = vtkOpenGLFramebuffer.newInstance();\n }\n\n model.framebuffer.setOpenGLRenderWindow(viewNode);\n model.framebuffer.saveCurrentBindingsAndBuffers();\n var fbSize = model.framebuffer.getSize();\n\n if (fbSize === null || fbSize[0] !== size[0] || fbSize[1] !== size[1]) {\n model.framebuffer.create(size[0], size[1]);\n model.framebuffer.populateFramebuffer();\n }\n\n model.framebuffer.bind();\n publicAPI.setCurrentOperation('opaqueZBufferPass');\n renNode.traverse(publicAPI);\n model.framebuffer.restorePreviousBindingsAndBuffers(); // reset now that we have done it\n\n model.depthRequested = false;\n }\n\n publicAPI.setCurrentOperation('cameraPass');\n renNode.traverse(publicAPI);\n\n if (model.opaqueActorCount > 0) {\n publicAPI.setCurrentOperation('opaquePass');\n renNode.traverse(publicAPI);\n }\n\n if (model.translucentActorCount > 0) {\n if (!model.translucentPass) {\n model.translucentPass = vtkOpenGLOrderIndependentTranslucentPass.newInstance();\n }\n\n model.translucentPass.traverse(viewNode, renNode, publicAPI);\n }\n\n if (model.volumeCount > 0) {\n publicAPI.setCurrentOperation('volumePass');\n renNode.traverse(publicAPI);\n }\n\n if (model.overlayActorCount > 0) {\n publicAPI.setCurrentOperation('overlayPass');\n renNode.traverse(publicAPI);\n }\n }\n }\n }\n };\n\n publicAPI.getZBufferTexture = function () {\n if (model.framebuffer) {\n return model.framebuffer.getColorTexture();\n }\n\n return null;\n };\n\n publicAPI.requestDepth = function () {\n model.depthRequested = true;\n };\n\n publicAPI.incrementOpaqueActorCount = function () {\n return model.opaqueActorCount++;\n };\n\n publicAPI.incrementTranslucentActorCount = function () {\n return model.translucentActorCount++;\n };\n\n publicAPI.incrementVolumeCount = function () {\n return model.volumeCount++;\n };\n\n publicAPI.incrementOverlayActorCount = function () {\n return model.overlayActorCount++;\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n opaqueActorCount: 0,\n translucentActorCount: 0,\n volumeCount: 0,\n overlayActorCount: 0,\n framebuffer: null,\n depthRequested: false\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Build VTK API\n\n vtkRenderPass.extend(publicAPI, model, initialValues);\n macro.get(publicAPI, model, ['framebuffer', 'opaqueActorCount', 'translucentActorCount', 'volumeCount']); // Object methods\n\n vtkForwardPass(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkForwardPass'); // ----------------------------------------------------------------------------\n\nvar vtkForwardPass$1 = {\n newInstance: newInstance,\n extend: extend\n};\n\nexport { vtkForwardPass$1 as default, extend, newInstance };\n","var PassTypes = {\n MIN_KNOWN_PASS: 0,\n ACTOR_PASS: 0,\n COMPOSITE_INDEX_PASS: 1,\n ID_LOW24: 2,\n ID_HIGH24: 3,\n MAX_KNOWN_PASS: 3\n};\nvar Constants = {\n PassTypes: PassTypes\n};\n\nexport { PassTypes, Constants as default };\n","import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';\nimport _regeneratorRuntime from '@babel/runtime/regenerator';\nimport macro from '../../macros.js';\nimport vtkDataSet from '../../Common/DataModel/DataSet.js';\n\nvar FieldAssociations = vtkDataSet.FieldAssociations; // ----------------------------------------------------------------------------\n// vtkHardwareSelector methods\n// ----------------------------------------------------------------------------\n\nfunction vtkHardwareSelector(publicAPI, model) {\n model.classHierarchy.push('vtkHardwareSelector'); // get the source data that is used for generating a selection. This\n // must be called at least once before calling generateSelection. In\n // raster based backends this method will capture the buffers. You can\n // call this once and then make multiple calls to generateSelection.\n\n publicAPI.getSourceDataAsync = /*#__PURE__*/function () {\n var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(renderer, fx1, fy1, fx2, fy2) {\n return _regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee);\n }));\n\n return function (_x, _x2, _x3, _x4, _x5) {\n return _ref.apply(this, arguments);\n };\n }();\n\n publicAPI.selectAsync = /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(renderer, fx1, fy1, fx2, fy2) {\n var srcData;\n return _regeneratorRuntime.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n _context2.next = 2;\n return publicAPI.getSourceDataAsync(renderer, fx1, fy1, fx2, fy2);\n\n case 2:\n srcData = _context2.sent;\n\n if (!srcData) {\n _context2.next = 5;\n break;\n }\n\n return _context2.abrupt(\"return\", srcData.generateSelection(fx1, fy1, fx2, fy2));\n\n case 5:\n return _context2.abrupt(\"return\", []);\n\n case 6:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2);\n }));\n\n return function (_x6, _x7, _x8, _x9, _x10) {\n return _ref2.apply(this, arguments);\n };\n }();\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n fieldAssociation: FieldAssociations.FIELD_ASSOCIATION_CELLS,\n captureZValues: false\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Inheritance\n\n macro.obj(publicAPI, model);\n macro.setGet(publicAPI, model, ['fieldAssociation', 'captureZValues']); // Object methods\n\n vtkHardwareSelector(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkHardwareSelector'); // ----------------------------------------------------------------------------\n\nvar vtkHardwareSelector$1 = {\n newInstance: newInstance,\n extend: extend\n};\n\nexport { vtkHardwareSelector$1 as default, extend, newInstance };\n","/**\n * The (primary) property that describes the content of a selection\n * node's data. Other auxiliary description properties follow.\n * GLOBALIDS means that the selection list contains values from the\n * vtkDataSetAttribute array of the same name.\n * PEDIGREEIDS means that the selection list contains values from the\n * vtkDataSetAttribute array of the same name.\n * VALUES means the the selection list contains values from an\n * arbitrary attribute array (ignores any globalids attribute)\n * INDICES means that the selection list contains indexes into the\n * cell or point arrays.\n * FRUSTUM means the set of points and cells inside a frustum\n * LOCATIONS means the set of points and cells near a set of positions\n * THRESHOLDS means the points and cells with values within a set of ranges\n * getContentType() returns -1 if the content type is not set.\n */\n// Specify how data arrays can be used by data objects\nvar SelectionContent = {\n GLOBALIDS: 0,\n PEDIGREEIDS: 1,\n VALUES: 2,\n INDICES: 3,\n FRUSTUM: 4,\n LOCATIONS: 5,\n THRESHOLDS: 6,\n BLOCKS: 7,\n QUERY: 8\n};\nvar SelectionField = {\n CELL: 0,\n POINT: 1,\n FIELD: 2,\n VERTEX: 3,\n EDGE: 4,\n ROW: 5\n};\nvar Constants = {\n SelectionContent: SelectionContent,\n SelectionField: SelectionField\n};\n\nexport { SelectionContent, SelectionField, Constants as default };\n","import _defineProperty from '@babel/runtime/helpers/defineProperty';\nimport macro from '../../macros.js';\nimport Constants from './SelectionNode/Constants.js';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n// vtkSelectionNode methods\n// ----------------------------------------------------------------------------\n\nfunction vtkSelectionNode(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkSelectionNode');\n\n publicAPI.getBounds = function () {\n return model.points.getBounds();\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n contentType: -1,\n fieldType: -1,\n properties: null,\n selectionList: []\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Inheritance\n\n macro.obj(publicAPI, model);\n model.properties = {};\n macro.setGet(publicAPI, model, ['contentType', 'fieldType', 'properties', 'selectionList']); // Object specific methods\n\n vtkSelectionNode(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkSelectionNode'); // ----------------------------------------------------------------------------\n\nvar vtkSelectionNode$1 = _objectSpread({\n newInstance: newInstance,\n extend: extend\n}, Constants);\n\nexport { vtkSelectionNode$1 as default, extend, newInstance };\n","import _defineProperty from '@babel/runtime/helpers/defineProperty';\nimport _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';\nimport _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';\nimport _regeneratorRuntime from '@babel/runtime/regenerator';\nimport macro from '../../macros.js';\nimport Constants from './HardwareSelector/Constants.js';\nimport vtkHardwareSelector$1 from '../Core/HardwareSelector.js';\nimport vtkOpenGLFramebuffer from './Framebuffer.js';\nimport vtkSelectionNode from '../../Common/DataModel/SelectionNode.js';\nimport vtkDataSet from '../../Common/DataModel/DataSet.js';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nvar PassTypes = Constants.PassTypes;\nvar SelectionContent = vtkSelectionNode.SelectionContent,\n SelectionField = vtkSelectionNode.SelectionField;\nvar FieldAssociations = vtkDataSet.FieldAssociations;\nvar vtkErrorMacro = macro.vtkErrorMacro;\nvar idOffset = 1;\n\nfunction getInfoHash(info) {\n return \"\".concat(info.propID, \" \").concat(info.compositeID);\n}\n\nfunction getAlpha(xx, yy, pb, area) {\n if (!pb) {\n return 0;\n }\n\n var offset = (yy * (area[2] - area[0] + 1) + xx) * 4;\n return pb[offset + 3];\n}\n\nfunction convert(xx, yy, pb, area) {\n if (!pb) {\n return 0;\n }\n\n var offset = (yy * (area[2] - area[0] + 1) + xx) * 4;\n var r = pb[offset];\n var g = pb[offset + 1];\n var b = pb[offset + 2];\n return (b * 256 + g) * 256 + r;\n}\n\nfunction getID(low24, high8) {\n /* eslint-disable no-bitwise */\n var val = high8;\n val <<= 24;\n val |= low24;\n return val;\n /* eslint-enable no-bitwise */\n}\n\nfunction getPixelInformationWithData(buffdata, inDisplayPosition, maxDistance, outSelectedPosition) {\n // Base case\n var maxDist = maxDistance < 0 ? 0 : maxDistance;\n\n if (maxDist === 0) {\n outSelectedPosition[0] = inDisplayPosition[0];\n outSelectedPosition[1] = inDisplayPosition[1];\n\n if (inDisplayPosition[0] < buffdata.area[0] || inDisplayPosition[0] > buffdata.area[2] || inDisplayPosition[1] < buffdata.area[1] || inDisplayPosition[1] > buffdata.area[3]) {\n return null;\n } // offset inDisplayPosition based on the lower-left-corner of the Area.\n\n\n var displayPosition = [inDisplayPosition[0] - buffdata.area[0], inDisplayPosition[1] - buffdata.area[1]];\n var actorid = convert(displayPosition[0], displayPosition[1], buffdata.pixBuffer[PassTypes.ACTOR_PASS], buffdata.area);\n\n if (actorid <= 0 || actorid - idOffset >= buffdata.props.length) {\n // the pixel did not hit any actor.\n return null;\n }\n\n var _info = {};\n _info.valid = true;\n _info.propID = actorid - idOffset;\n _info.prop = buffdata.props[_info.propID];\n var compositeID = convert(displayPosition[0], displayPosition[1], buffdata.pixBuffer[PassTypes.COMPOSITE_INDEX_PASS], buffdata.area);\n\n if (compositeID < 0 || compositeID > 0xffffff) {\n compositeID = 0;\n }\n\n _info.compositeID = compositeID - idOffset;\n\n if (buffdata.captureZValues) {\n var offset = (displayPosition[1] * (buffdata.area[2] - buffdata.area[0] + 1) + displayPosition[0]) * 4;\n _info.zValue = (256 * buffdata.zBuffer[offset] + buffdata.zBuffer[offset + 1]) / 65535.0;\n _info.displayPosition = inDisplayPosition;\n }\n\n if (buffdata.pixBuffer[PassTypes.ID_LOW24]) {\n if (getAlpha(displayPosition[0], displayPosition[1], buffdata.pixBuffer[PassTypes.ID_LOW24], buffdata.area) === 0.0) {\n return _info;\n }\n }\n\n var low24 = convert(displayPosition[0], displayPosition[1], buffdata.pixBuffer[PassTypes.ID_LOW24], buffdata.area);\n var high24 = convert(displayPosition[0], displayPosition[1], buffdata.pixBuffer[PassTypes.ID_HIGH24], buffdata.area);\n _info.attributeID = getID(low24, high24);\n return _info;\n } // Iterate over successively growing boxes.\n // They recursively call the base case to handle single pixels.\n\n\n var dispPos = [inDisplayPosition[0], inDisplayPosition[1]];\n var curPos = [0, 0];\n var info = getPixelInformationWithData(buffdata, inDisplayPosition, 0, outSelectedPosition);\n\n if (info && info.valid) {\n return info;\n }\n\n for (var dist = 1; dist < maxDist; ++dist) {\n // Vertical sides of box.\n for (var y = dispPos[1] > dist ? dispPos[1] - dist : 0; y <= dispPos[1] + dist; ++y) {\n curPos[1] = y;\n\n if (dispPos[0] >= dist) {\n curPos[0] = dispPos[0] - dist;\n info = getPixelInformationWithData(buffdata, curPos, 0, outSelectedPosition);\n\n if (info && info.valid) {\n return info;\n }\n }\n\n curPos[0] = dispPos[0] + dist;\n info = getPixelInformationWithData(buffdata, curPos, 0, outSelectedPosition);\n\n if (info && info.valid) {\n return info;\n }\n } // Horizontal sides of box.\n\n\n for (var x = dispPos[0] >= dist ? dispPos[0] - (dist - 1) : 0; x <= dispPos[0] + (dist - 1); ++x) {\n curPos[0] = x;\n\n if (dispPos[1] >= dist) {\n curPos[1] = dispPos[1] - dist;\n info = getPixelInformationWithData(buffdata, curPos, 0, outSelectedPosition);\n\n if (info && info.valid) {\n return info;\n }\n }\n\n curPos[1] = dispPos[1] + dist;\n info = getPixelInformationWithData(buffdata, curPos, 0, outSelectedPosition);\n\n if (info && info.valid) {\n return info;\n }\n }\n } // nothing hit.\n\n\n outSelectedPosition[0] = inDisplayPosition[0];\n outSelectedPosition[1] = inDisplayPosition[1];\n return null;\n} //-----------------------------------------------------------------------------\n\n\nfunction convertSelection(fieldassociation, dataMap, captureZValues, renderer, openGLRenderWindow) {\n var sel = [];\n var count = 0;\n dataMap.forEach(function (value, key) {\n var child = vtkSelectionNode.newInstance();\n child.setContentType(SelectionContent.INDICES);\n\n switch (fieldassociation) {\n case FieldAssociations.FIELD_ASSOCIATION_CELLS:\n child.setFieldType(SelectionField.CELL);\n break;\n\n case FieldAssociations.FIELD_ASSOCIATION_POINTS:\n child.setFieldType(SelectionField.POINT);\n break;\n\n default:\n vtkErrorMacro('Unknown field association');\n }\n\n child.getProperties().propID = value.info.propID;\n child.getProperties().prop = value.info.prop;\n child.getProperties().compositeID = value.info.compositeID;\n child.getProperties().attributeID = value.info.attributeID;\n child.getProperties().pixelCount = value.pixelCount;\n\n if (captureZValues) {\n child.getProperties().displayPosition = [value.info.displayPosition[0], value.info.displayPosition[1], value.info.zValue];\n child.getProperties().worldPosition = openGLRenderWindow.displayToWorld(value.info.displayPosition[0], value.info.displayPosition[1], value.info.zValue, renderer);\n }\n\n child.setSelectionList(value.attributeIDs);\n sel[count] = child;\n count++;\n });\n return sel;\n} //----------------------------------------------------------------------------\n\n\nfunction generateSelectionWithData(buffdata, fx1, fy1, fx2, fy2) {\n var x1 = Math.floor(fx1);\n var y1 = Math.floor(fy1);\n var x2 = Math.floor(fx2);\n var y2 = Math.floor(fy2);\n var dataMap = new Map();\n var outSelectedPosition = [0, 0];\n\n for (var yy = y1; yy <= y2; yy++) {\n for (var xx = x1; xx <= x2; xx++) {\n var pos = [xx, yy];\n var info = getPixelInformationWithData(buffdata, pos, 0, outSelectedPosition);\n\n if (info && info.valid) {\n var hash = getInfoHash(info);\n\n if (!dataMap.has(hash)) {\n dataMap.set(hash, {\n info: info,\n pixelCount: 1,\n attributeIDs: [info.attributeID]\n });\n } else {\n var dmv = dataMap.get(hash);\n dmv.pixelCount++;\n\n if (buffdata.captureZValues) {\n if (info.zValue < dmv.info.zValue) {\n dmv.info = info;\n }\n }\n\n if (dmv.attributeIDs.indexOf(info.attributeID) === -1) {\n dmv.attributeIDs.push(info.attributeID);\n }\n }\n }\n }\n }\n\n return convertSelection(buffdata.fieldAssociation, dataMap, buffdata.captureZValues, buffdata.renderer, buffdata.openGLRenderWindow);\n} // ----------------------------------------------------------------------------\n// vtkOpenGLHardwareSelector methods\n// ----------------------------------------------------------------------------\n\n\nfunction vtkOpenGLHardwareSelector(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkOpenGLHardwareSelector'); //----------------------------------------------------------------------------\n\n publicAPI.releasePixBuffers = function () {\n model.rawPixBuffer = [];\n model.pixBuffer = [];\n model.zBuffer = null;\n }; //----------------------------------------------------------------------------\n\n\n publicAPI.beginSelection = function () {\n model._openGLRenderer = model._openGLRenderWindow.getViewNodeFor(model._renderer);\n model.maxAttributeId = 0;\n\n var size = model._openGLRenderWindow.getSize();\n\n if (!model.framebuffer) {\n model.framebuffer = vtkOpenGLFramebuffer.newInstance();\n model.framebuffer.setOpenGLRenderWindow(model._openGLRenderWindow);\n model.framebuffer.saveCurrentBindingsAndBuffers();\n model.framebuffer.create(size[0], size[1]); // this calls model.framebuffer.bind()\n\n model.framebuffer.populateFramebuffer();\n } else {\n model.framebuffer.setOpenGLRenderWindow(model._openGLRenderWindow);\n model.framebuffer.saveCurrentBindingsAndBuffers();\n var fbSize = model.framebuffer.getSize();\n\n if (fbSize[0] !== size[0] || fbSize[1] !== size[1]) {\n model.framebuffer.create(size[0], size[1]); // this calls model.framebuffer.bind()\n\n model.framebuffer.populateFramebuffer();\n } else {\n model.framebuffer.bind();\n }\n }\n\n model._openGLRenderer.clear();\n\n model._openGLRenderer.setSelector(publicAPI);\n\n model.hitProps = {};\n model.propPixels = {};\n model.props = [];\n publicAPI.releasePixBuffers();\n\n if (model.fieldAssociation === FieldAssociations.FIELD_ASSOCIATION_POINTS) {\n var gl = model._openGLRenderWindow.getContext();\n\n var originalBlending = gl.isEnabled(gl.BLEND);\n gl.disable(gl.BLEND);\n\n model._openGLRenderWindow.traverseAllPasses();\n\n model._renderer.setPreserveDepthBuffer(true);\n\n if (originalBlending) {\n gl.enable(gl.BLEND);\n }\n }\n }; //----------------------------------------------------------------------------\n\n\n publicAPI.endSelection = function () {\n model.hitProps = {};\n\n model._openGLRenderer.setSelector(null);\n\n model.framebuffer.restorePreviousBindingsAndBuffers();\n\n model._renderer.setPreserveDepthBuffer(false);\n };\n\n publicAPI.preCapturePass = function () {\n var gl = model._openGLRenderWindow.getContext(); // Disable blending\n\n\n model.originalBlending = gl.isEnabled(gl.BLEND);\n gl.disable(gl.BLEND);\n };\n\n publicAPI.postCapturePass = function () {\n var gl = model._openGLRenderWindow.getContext(); // Restore blending if it was enabled prior to the capture\n\n\n if (model.originalBlending) {\n gl.enable(gl.BLEND);\n }\n }; //----------------------------------------------------------------------------\n\n\n publicAPI.select = function () {\n var sel = null;\n\n if (publicAPI.captureBuffers()) {\n sel = publicAPI.generateSelection(model.area[0], model.area[1], model.area[2], model.area[3]);\n publicAPI.releasePixBuffers();\n }\n\n return sel;\n };\n\n publicAPI.getSourceDataAsync = /*#__PURE__*/function () {\n var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(renderer, fx1, fy1, fx2, fy2) {\n var size, result;\n return _regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n // assign the renderer\n model._renderer = renderer; // set area to all if no arguments provided\n\n if (fx1 === undefined) {\n size = model._openGLRenderWindow.getSize();\n publicAPI.setArea(0, 0, size[0] - 1, size[1] - 1);\n } else {\n publicAPI.setArea(fx1, fy1, fx2, fy2);\n } // just do capture buffers and package up the result\n\n\n if (publicAPI.captureBuffers()) {\n _context.next = 4;\n break;\n }\n\n return _context.abrupt(\"return\", false);\n\n case 4:\n result = {\n area: _toConsumableArray(model.area),\n pixBuffer: _toConsumableArray(model.pixBuffer),\n captureZValues: model.captureZValues,\n zBuffer: model.zBuffer,\n props: _toConsumableArray(model.props),\n fieldAssociation: model.fieldAssociation,\n renderer: renderer,\n openGLRenderWindow: model._openGLRenderWindow\n };\n\n result.generateSelection = function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return generateSelectionWithData.apply(void 0, [result].concat(args));\n };\n\n return _context.abrupt(\"return\", result);\n\n case 7:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee);\n }));\n\n return function (_x, _x2, _x3, _x4, _x5) {\n return _ref.apply(this, arguments);\n };\n }(); //----------------------------------------------------------------------------\n\n\n publicAPI.captureBuffers = function () {\n if (!model._renderer || !model._openGLRenderWindow) {\n vtkErrorMacro('Renderer and view must be set before calling Select.');\n return false;\n }\n\n model._openGLRenderer = model._openGLRenderWindow.getViewNodeFor(model._renderer); // todo revisit making selection part of core\n // then we can do this in core\n\n model._openGLRenderWindow.getRenderable().preRender(); // int rgba[4];\n // rwin.getColorBufferSizes(rgba);\n // if (rgba[0] < 8 || rgba[1] < 8 || rgba[2] < 8) {\n // vtkErrorMacro(\"Color buffer depth must be at least 8 bit. \"\n // \"Currently: \" << rgba[0] << \", \" << rgba[1] << \", \" < 0x00ffffff;\n }\n\n if (model.fieldAssociation === FieldAssociations.FIELD_ASSOCIATION_CELLS) {\n return model.maximumCellId > 0x00ffffff;\n }\n }\n\n return true;\n }; //----------------------------------------------------------------------------\n\n\n publicAPI.savePixelBuffer = function (passNo) {\n model.pixBuffer[passNo] = model._openGLRenderWindow.getPixelData(model.area[0], model.area[1], model.area[2], model.area[3]);\n\n if (!model.rawPixBuffer[passNo]) {\n var size = (model.area[2] - model.area[0] + 1) * (model.area[3] - model.area[1] + 1) * 4;\n model.rawPixBuffer[passNo] = new Uint8Array(size);\n model.rawPixBuffer[passNo].set(model.pixBuffer[passNo]);\n }\n\n if (passNo === PassTypes.ACTOR_PASS) {\n if (model.captureZValues) {\n var rpasses = model._openGLRenderWindow.getRenderPasses();\n\n if (typeof rpasses[0].requestDepth === 'function' && typeof rpasses[0].getFramebuffer === 'function') {\n var fb = rpasses[0].getFramebuffer();\n fb.saveCurrentBindingsAndBuffers();\n fb.bind();\n model.zBuffer = model._openGLRenderWindow.getPixelData(model.area[0], model.area[1], model.area[2], model.area[3]);\n fb.restorePreviousBindingsAndBuffers();\n }\n }\n\n publicAPI.buildPropHitList(model.rawPixBuffer[passNo]);\n }\n }; //----------------------------------------------------------------------------\n\n\n publicAPI.buildPropHitList = function (pixelbuffer) {\n var offset = 0;\n\n for (var yy = 0; yy <= model.area[3] - model.area[1]; yy++) {\n for (var xx = 0; xx <= model.area[2] - model.area[0]; xx++) {\n var val = convert(xx, yy, pixelbuffer, model.area);\n\n if (val > 0) {\n val--;\n\n if (!(val in model.hitProps)) {\n model.hitProps[val] = true;\n model.propPixels[val] = [];\n }\n\n model.propPixels[val].push(offset * 4);\n }\n\n ++offset;\n }\n }\n }; //----------------------------------------------------------------------------\n\n\n publicAPI.renderProp = function (prop) {\n if (model.currentPass === PassTypes.ACTOR_PASS) {\n publicAPI.setPropColorValueFromInt(model.props.length + idOffset);\n model.props.push(prop);\n }\n }; //----------------------------------------------------------------------------\n\n\n publicAPI.renderCompositeIndex = function (index) {\n if (model.currentPass === PassTypes.COMPOSITE_INDEX_PASS) {\n publicAPI.setPropColorValueFromInt(index + idOffset);\n }\n }; //----------------------------------------------------------------------------\n // TODO: make inline\n\n\n publicAPI.renderAttributeId = function (attribid) {\n if (attribid < 0) {\n // negative attribid is valid. It happens when rendering higher order\n // elements where new points are added for rendering smooth surfaces.\n return;\n }\n\n model.maxAttributeId = attribid > model.maxAttributeId ? attribid : model.maxAttributeId; // if (model.currentPass < PassTypes.ID_LOW24) {\n // return; // useless...\n // }\n }; //----------------------------------------------------------------------------\n\n\n publicAPI.passTypeToString = function (type) {\n return macro.enumToString(PassTypes, type);\n }; //----------------------------------------------------------------------------\n\n\n publicAPI.isPropHit = function (id) {\n return Boolean(model.hitProps[id]);\n };\n\n publicAPI.setPropColorValueFromInt = function (val) {\n model.propColorValue[0] = val % 256 / 255.0;\n model.propColorValue[1] = Math.floor(val / 256) % 256 / 255.0;\n model.propColorValue[2] = Math.floor(val / 65536) % 256 / 255.0;\n }; // info has\n // valid\n // propId\n // prop\n // compositeID\n // attributeID\n //----------------------------------------------------------------------------\n\n\n publicAPI.getPixelInformation = function (inDisplayPosition, maxDistance, outSelectedPosition) {\n // Base case\n var maxDist = maxDistance < 0 ? 0 : maxDistance;\n\n if (maxDist === 0) {\n outSelectedPosition[0] = inDisplayPosition[0];\n outSelectedPosition[1] = inDisplayPosition[1];\n\n if (inDisplayPosition[0] < model.area[0] || inDisplayPosition[0] > model.area[2] || inDisplayPosition[1] < model.area[1] || inDisplayPosition[1] > model.area[3]) {\n return null;\n } // offset inDisplayPosition based on the lower-left-corner of the Area.\n\n\n var displayPosition = [inDisplayPosition[0] - model.area[0], inDisplayPosition[1] - model.area[1]];\n var actorid = convert(displayPosition[0], displayPosition[1], model.pixBuffer[PassTypes.ACTOR_PASS], model.area);\n\n if (actorid <= 0 || actorid - idOffset >= model.props.length) {\n // the pixel did not hit any actor.\n return null;\n }\n\n var _info2 = {};\n _info2.valid = true;\n _info2.propID = actorid - idOffset;\n _info2.prop = model.props[_info2.propID];\n var compositeID = convert(displayPosition[0], displayPosition[1], model.pixBuffer[PassTypes.COMPOSITE_INDEX_PASS], model.area);\n\n if (compositeID < 0 || compositeID > 0xffffff) {\n compositeID = 0;\n }\n\n _info2.compositeID = compositeID - idOffset;\n\n if (model.captureZValues) {\n var offset = (displayPosition[1] * (model.area[2] - model.area[0] + 1) + displayPosition[0]) * 4;\n _info2.zValue = (256 * model.zBuffer[offset] + model.zBuffer[offset + 1]) / 65535.0;\n _info2.displayPosition = inDisplayPosition;\n } // Skip attribute ids if alpha is zero (missed)\n\n\n if (model.pixBuffer[PassTypes.ID_LOW24]) {\n if (getAlpha(displayPosition[0], displayPosition[1], model.pixBuffer[PassTypes.ID_LOW24], model.area) === 0.0) {\n return _info2;\n }\n }\n\n var low24 = convert(displayPosition[0], displayPosition[1], model.pixBuffer[PassTypes.ID_LOW24], model.area);\n var high24 = convert(displayPosition[0], displayPosition[1], model.pixBuffer[PassTypes.ID_HIGH24], model.area);\n _info2.attributeID = getID(low24, high24);\n return _info2;\n } // Iterate over successively growing boxes.\n // They recursively call the base case to handle single pixels.\n\n\n var dispPos = [inDisplayPosition[0], inDisplayPosition[1]];\n var curPos = [0, 0];\n var info = publicAPI.getPixelInformation(inDisplayPosition, 0, outSelectedPosition);\n\n if (info && info.valid) {\n return info;\n }\n\n for (var dist = 1; dist < maxDist; ++dist) {\n // Vertical sides of box.\n for (var y = dispPos[1] > dist ? dispPos[1] - dist : 0; y <= dispPos[1] + dist; ++y) {\n curPos[1] = y;\n\n if (dispPos[0] >= dist) {\n curPos[0] = dispPos[0] - dist;\n info = publicAPI.getPixelInformation(curPos, 0, outSelectedPosition);\n\n if (info && info.valid) {\n return info;\n }\n }\n\n curPos[0] = dispPos[0] + dist;\n info = publicAPI.getPixelInformation(curPos, 0, outSelectedPosition);\n\n if (info && info.valid) {\n return info;\n }\n } // Horizontal sides of box.\n\n\n for (var x = dispPos[0] >= dist ? dispPos[0] - (dist - 1) : 0; x <= dispPos[0] + (dist - 1); ++x) {\n curPos[0] = x;\n\n if (dispPos[1] >= dist) {\n curPos[1] = dispPos[1] - dist;\n info = publicAPI.getPixelInformation(curPos, 0, outSelectedPosition);\n\n if (info && info.valid) {\n return info;\n }\n }\n\n curPos[1] = dispPos[1] + dist;\n info = publicAPI.getPixelInformation(curPos, 0, outSelectedPosition);\n\n if (info && info.valid) {\n return info;\n }\n }\n } // nothing hit.\n\n\n outSelectedPosition[0] = inDisplayPosition[0];\n outSelectedPosition[1] = inDisplayPosition[1];\n return null;\n }; //----------------------------------------------------------------------------\n\n\n publicAPI.generateSelection = function (fx1, fy1, fx2, fy2) {\n var x1 = Math.floor(fx1);\n var y1 = Math.floor(fy1);\n var x2 = Math.floor(fx2);\n var y2 = Math.floor(fy2);\n var dataMap = new Map();\n var outSelectedPosition = [0, 0];\n\n for (var yy = y1; yy <= y2; yy++) {\n for (var xx = x1; xx <= x2; xx++) {\n var pos = [xx, yy];\n var info = publicAPI.getPixelInformation(pos, 0, outSelectedPosition);\n\n if (info && info.valid) {\n var hash = getInfoHash(info);\n\n if (!dataMap.has(hash)) {\n dataMap.set(hash, {\n info: info,\n pixelCount: 1,\n attributeIDs: [info.attributeID]\n });\n } else {\n var dmv = dataMap.get(hash);\n dmv.pixelCount++;\n\n if (model.captureZValues) {\n if (info.zValue < dmv.info.zValue) {\n dmv.info = info;\n }\n }\n\n if (dmv.attributeIDs.indexOf(info.attributeID) === -1) {\n dmv.attributeIDs.push(info.attributeID);\n }\n }\n }\n }\n }\n\n return convertSelection(model.fieldAssociation, dataMap, model.captureZValues, model._renderer, model._openGLRenderWindow);\n };\n\n publicAPI.getRawPixelBuffer = function (passNo) {\n return model.rawPixBuffer[passNo];\n };\n\n publicAPI.getPixelBuffer = function (passNo) {\n return model.pixBuffer[passNo];\n }; //----------------------------------------------------------------------------\n\n\n publicAPI.attach = function (w, r) {\n model._openGLRenderWindow = w;\n model._renderer = r;\n }; // override\n\n\n var superSetArea = publicAPI.setArea;\n\n publicAPI.setArea = function () {\n if (superSetArea.apply(void 0, arguments)) {\n model.area[0] = Math.floor(model.area[0]);\n model.area[1] = Math.floor(model.area[1]);\n model.area[2] = Math.floor(model.area[2]);\n model.area[3] = Math.floor(model.area[3]);\n return true;\n }\n\n return false;\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n area: undefined,\n // _renderer: null,\n // _openGLRenderWindow: null,\n // _openGLRenderer: null,\n currentPass: -1,\n propColorValue: null,\n props: null,\n maximumPointId: 0,\n maximumCellId: 0,\n idOffset: 1\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Build VTK API\n\n vtkHardwareSelector$1.extend(publicAPI, model, initialValues);\n model.propColorValue = [0, 0, 0];\n model.props = [];\n\n if (!model.area) {\n model.area = [0, 0, 0, 0];\n }\n\n macro.setGetArray(publicAPI, model, ['area'], 4);\n macro.setGet(publicAPI, model, ['_renderer', 'currentPass', '_openGLRenderWindow', 'maximumPointId', 'maximumCellId']);\n macro.setGetArray(publicAPI, model, ['propColorValue'], 3);\n macro.moveToProtected(publicAPI, model, ['renderer', 'openGLRenderWindow']);\n macro.event(publicAPI, model, 'event'); // Object methods\n\n vtkOpenGLHardwareSelector(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkOpenGLHardwareSelector'); // ----------------------------------------------------------------------------\n\nvar vtkHardwareSelector = _objectSpread({\n newInstance: newInstance,\n extend: extend\n}, Constants);\n\nexport { vtkHardwareSelector as default, extend, newInstance };\n","import Md5 from 'spark-md5';\nimport macro from '../../macros.js';\nimport vtkShaderProgram from './ShaderProgram.js';\n\nvar SET_GET_FIELDS = ['lastShaderBound', 'context', '_openGLRenderWindow']; // ----------------------------------------------------------------------------\n// vtkShaderCache methods\n// ----------------------------------------------------------------------------\n\nfunction vtkShaderCache(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkShaderCache');\n\n publicAPI.replaceShaderValues = function (VSSource, FSSource, GSSource) {\n // first handle renaming any Fragment shader inputs\n // if we have a geometry shader. By default fragment shaders\n // assume their inputs come from a Vertex Shader. When we\n // have a Geometry shader we rename the frament shader inputs\n // to come from the geometry shader\n var nFSSource = FSSource;\n\n if (GSSource.length > 0) {\n nFSSource = vtkShaderProgram.substitute(nFSSource, 'VSOut', 'GSOut').result;\n }\n\n var gl2 = model._openGLRenderWindow.getWebgl2();\n\n var fragDepthString = '\\n';\n var version = '#version 100\\n';\n\n if (gl2) {\n version = '#version 300 es\\n' + '#define attribute in\\n' + '#define textureCube texture\\n' + '#define texture2D texture\\n' + '#define textureCubeLod textureLod\\n' + '#define texture2DLod textureLod\\n';\n } else {\n model.context.getExtension('OES_standard_derivatives');\n\n if (model.context.getExtension('EXT_frag_depth')) {\n fragDepthString = '#extension GL_EXT_frag_depth : enable\\n';\n }\n\n if (model.context.getExtension('EXT_shader_texture_lod')) {\n fragDepthString += '#extension GL_EXT_shader_texture_lod : enable\\n' + '#define textureCubeLod textureCubeLodEXT\\n' + '#define texture2DLod texture2DLodEXT';\n }\n }\n\n nFSSource = vtkShaderProgram.substitute(nFSSource, '//VTK::System::Dec', [\"\".concat(version, \"\\n\"), gl2 ? '' : '#extension GL_OES_standard_derivatives : enable\\n', fragDepthString, '#ifdef GL_FRAGMENT_PRECISION_HIGH', 'precision highp float;', 'precision highp int;', '#else', 'precision mediump float;', 'precision mediump int;', '#endif']).result;\n var nVSSource = vtkShaderProgram.substitute(VSSource, '//VTK::System::Dec', [\"\".concat(version, \"\\n\"), '#ifdef GL_FRAGMENT_PRECISION_HIGH', 'precision highp float;', 'precision highp int;', '#else', 'precision mediump float;', 'precision mediump int;', '#endif']).result;\n\n if (gl2) {\n nVSSource = vtkShaderProgram.substitute(nVSSource, 'varying', 'out').result;\n nFSSource = vtkShaderProgram.substitute(nFSSource, 'varying', 'in').result;\n var shaderOutputs = '';\n var outputCount = 0;\n\n while (nFSSource.includes(\"gl_FragData[\".concat(outputCount, \"]\"))) {\n nFSSource = vtkShaderProgram.substitute(nFSSource, \"gl_FragData\\\\[\".concat(outputCount, \"\\\\]\"), \"fragOutput\".concat(outputCount)).result;\n shaderOutputs += \"layout(location = \".concat(outputCount, \") out vec4 fragOutput\").concat(outputCount, \";\\n\");\n outputCount++;\n }\n\n nFSSource = vtkShaderProgram.substitute(nFSSource, '//VTK::Output::Dec', shaderOutputs).result;\n } // nFSSource = ShaderProgram.substitute(nFSSource, 'gl_FragData\\\\[0\\\\]',\n // 'gl_FragColor').result;\n\n\n var nGSSource = vtkShaderProgram.substitute(GSSource, '//VTK::System::Dec', version).result;\n return {\n VSSource: nVSSource,\n FSSource: nFSSource,\n GSSource: nGSSource\n };\n }; // return NULL if there is an issue\n\n\n publicAPI.readyShaderProgramArray = function (vertexCode, fragmentCode, geometryCode) {\n var data = publicAPI.replaceShaderValues(vertexCode, fragmentCode, geometryCode);\n var shader = publicAPI.getShaderProgram(data.VSSource, data.FSSource, data.GSSource);\n return publicAPI.readyShaderProgram(shader);\n };\n\n publicAPI.readyShaderProgram = function (shader) {\n if (!shader) {\n return null;\n } // compile if needed\n\n\n if (!shader.getCompiled() && !shader.compileShader()) {\n return null;\n } // bind if needed\n\n\n if (!publicAPI.bindShader(shader)) {\n return null;\n }\n\n return shader;\n };\n\n publicAPI.getShaderProgram = function (vertexCode, fragmentCode, geometryCode) {\n // compute the MD5 and the check the map\n var hashInput = \"\".concat(vertexCode).concat(fragmentCode).concat(geometryCode);\n var result = Md5.hash(hashInput); // does it already exist?\n\n if (!(result in model.shaderPrograms)) {\n // create one\n var sps = vtkShaderProgram.newInstance();\n sps.setContext(model.context);\n sps.getVertexShader().setSource(vertexCode);\n sps.getFragmentShader().setSource(fragmentCode);\n\n if (geometryCode) {\n sps.getGeometryShader().setSource(geometryCode);\n }\n\n sps.setMd5Hash(result);\n model.shaderPrograms[result] = sps;\n return sps;\n }\n\n return model.shaderPrograms[result];\n };\n\n publicAPI.releaseGraphicsResources = function (win) {\n // NOTE:\n // In the current implementation as of October 26th, if a shader\n // program is created by ShaderCache then it should make sure\n // that it releases the graphics resources used by these programs.\n // It is not wisely for callers to do that since then they would\n // have to loop over all the programs were in use and invoke\n // release graphics resources individually.\n publicAPI.releaseCurrentShader();\n Object.keys(model.shaderPrograms).map(function (key) {\n return model.shaderPrograms[key];\n }).forEach(function (sp) {\n return sp.releaseGraphicsResources(win);\n });\n };\n\n publicAPI.releaseGraphicsResources = function () {\n // release prior shader\n if (model.astShaderBound) {\n model.lastShaderBound.release();\n model.lastShaderBound = null;\n }\n };\n\n publicAPI.bindShader = function (shader) {\n if (model.lastShaderBound === shader) {\n return 1;\n } // release prior shader\n\n\n if (model.lastShaderBound) {\n model.lastShaderBound.release();\n }\n\n shader.bind();\n model.lastShaderBound = shader;\n return 1;\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n lastShaderBound: null,\n shaderPrograms: null,\n context: null // _openGLRenderWindow: null,\n\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Internal objects\n\n model.shaderPrograms = {}; // Build VTK API\n\n macro.obj(publicAPI, model);\n macro.setGet(publicAPI, model, SET_GET_FIELDS);\n macro.moveToProtected(publicAPI, model, ['openGLRenderWindow']); // Object methods\n\n vtkShaderCache(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkShaderCache'); // ----------------------------------------------------------------------------\n\nvar vtkShaderCache$1 = {\n newInstance: newInstance,\n extend: extend\n};\n\nexport { vtkShaderCache$1 as default, extend, newInstance };\n","import macro from '../../macros.js';\n\nvar vtkErrorMacro = macro.vtkErrorMacro; // ----------------------------------------------------------------------------\n// vtkOpenGLTextureUnitManager methods\n// ----------------------------------------------------------------------------\n\nfunction vtkOpenGLTextureUnitManager(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkOpenGLTextureUnitManager'); // ----------------------------------------------------------------------------\n // Description:\n // Delete the allocation table and check if it is not called before\n // all the texture units have been released.\n\n publicAPI.deleteTable = function () {\n for (var i = 0; i < model.numberOfTextureUnits; ++i) {\n if (model.textureUnits[i] === true) {\n vtkErrorMacro('some texture units were not properly released');\n }\n }\n\n model.textureUnits = [];\n model.numberOfTextureUnits = 0;\n }; // ----------------------------------------------------------------------------\n\n\n publicAPI.setContext = function (ctx) {\n if (model.context !== ctx) {\n if (model.context !== 0) {\n publicAPI.deleteTable();\n }\n\n model.context = ctx;\n\n if (model.context) {\n model.numberOfTextureUnits = ctx.getParameter(ctx.MAX_TEXTURE_IMAGE_UNITS);\n\n for (var i = 0; i < model.numberOfTextureUnits; ++i) {\n model.textureUnits[i] = false;\n }\n }\n\n publicAPI.modified();\n }\n }; // ----------------------------------------------------------------------------\n // Description:\n // Reserve a texture unit. It returns its number.\n // It returns -1 if the allocation failed (because there are no more\n // texture units left).\n // \\post valid_result: result==-1 || result>=0 && resultGetNumberOfTextureUnits())\n // \\post allocated: result==-1 || this->IsAllocated(result)\n\n\n publicAPI.allocate = function () {\n for (var i = 0; i < model.numberOfTextureUnits; i++) {\n if (!publicAPI.isAllocated(i)) {\n model.textureUnits[i] = true;\n return i;\n }\n }\n\n return -1;\n };\n\n publicAPI.allocateUnit = function (unit) {\n if (publicAPI.isAllocated(unit)) {\n return -1;\n }\n\n model.textureUnits[unit] = true;\n return unit;\n }; // ----------------------------------------------------------------------------\n // Description:\n // Tell if texture unit `textureUnitId' is already allocated.\n // \\pre valid_id_range : textureUnitId>=0 && textureUnitIdGetNumberOfTextureUnits()\n\n\n publicAPI.isAllocated = function (textureUnitId) {\n return model.textureUnits[textureUnitId];\n }; // ----------------------------------------------------------------------------\n // Description:\n // Release a texture unit.\n // \\pre valid_id: textureUnitId>=0 && textureUnitIdGetNumberOfTextureUnits()\n // \\pre allocated_id: this->IsAllocated(textureUnitId)\n\n\n publicAPI.free = function (val) {\n model.textureUnits[val] = false;\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n context: null,\n numberOfTextureUnits: 0,\n textureUnits: 0\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues);\n macro.obj(publicAPI, model);\n model.textureUnits = []; // Build VTK API\n\n macro.get(publicAPI, model, ['numberOfTextureUnits']);\n macro.setGet(publicAPI, model, ['context']); // Object methods\n\n vtkOpenGLTextureUnitManager(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkOpenGLTextureUnitManager'); // ----------------------------------------------------------------------------\n\nvar vtkTextureUnitManager = {\n newInstance: newInstance,\n extend: extend\n};\n\nexport { vtkTextureUnitManager as default, extend, newInstance };\n","import macro from '../../macros.js';\nimport vtkViewNode from './ViewNode.js';\n\n// vtkRenderWindowViewNode is intended to be a superclass for all api specific\n// RenderWindows. It is intended to define a common API that can be invoked\n// upon an api specific render window and provide some common method\n// implementations. If your application requires communicating with an api specific\n// view try to limit such interactions to methods defined in this class.\n// ----------------------------------------------------------------------------\n// ----------------------------------------------------------------------------\n// vtkRenderWindowViewNode methods\n// ----------------------------------------------------------------------------\n\nfunction vtkRenderWindowViewNode(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkRenderWindowViewNode');\n\n publicAPI.getViewNodeFactory = function () {\n return null;\n };\n\n publicAPI.getAspectRatio = function () {\n return model.size[0] / model.size[1];\n };\n\n publicAPI.getAspectRatioForRenderer = function (renderer) {\n var viewport = renderer.getViewportByReference();\n return model.size[0] * (viewport[2] - viewport[0]) / ((viewport[3] - viewport[1]) * model.size[1]);\n };\n\n publicAPI.isInViewport = function (x, y, viewport) {\n var vCoords = viewport.getViewportByReference();\n var size = publicAPI.getFramebufferSize();\n\n if (vCoords[0] * size[0] <= x && vCoords[2] * size[0] >= x && vCoords[1] * size[1] <= y && vCoords[3] * size[1] >= y) {\n return true;\n }\n\n return false;\n };\n\n publicAPI.getViewportSize = function (viewport) {\n var vCoords = viewport.getViewportByReference();\n var size = publicAPI.getFramebufferSize();\n return [(vCoords[2] - vCoords[0]) * size[0], (vCoords[3] - vCoords[1]) * size[1]];\n };\n\n publicAPI.getViewportCenter = function (viewport) {\n var size = publicAPI.getViewportSize(viewport);\n return [size[0] * 0.5, size[1] * 0.5];\n };\n\n publicAPI.displayToNormalizedDisplay = function (x, y, z) {\n var size = publicAPI.getFramebufferSize();\n return [x / size[0], y / size[1], z];\n };\n\n publicAPI.normalizedDisplayToDisplay = function (x, y, z) {\n var size = publicAPI.getFramebufferSize();\n return [x * size[0], y * size[1], z];\n };\n\n publicAPI.worldToView = function (x, y, z, renderer) {\n return renderer.worldToView(x, y, z);\n };\n\n publicAPI.viewToWorld = function (x, y, z, renderer) {\n return renderer.viewToWorld(x, y, z);\n };\n\n publicAPI.worldToDisplay = function (x, y, z, renderer) {\n var val = renderer.worldToView(x, y, z);\n var dims = publicAPI.getViewportSize(renderer);\n var val2 = renderer.viewToProjection(val[0], val[1], val[2], dims[0] / dims[1]);\n var val3 = renderer.projectionToNormalizedDisplay(val2[0], val2[1], val2[2]);\n return publicAPI.normalizedDisplayToDisplay(val3[0], val3[1], val3[2]);\n };\n\n publicAPI.displayToWorld = function (x, y, z, renderer) {\n var val = publicAPI.displayToNormalizedDisplay(x, y, z);\n var val2 = renderer.normalizedDisplayToProjection(val[0], val[1], val[2]);\n var dims = publicAPI.getViewportSize(renderer);\n var val3 = renderer.projectionToView(val2[0], val2[1], val2[2], dims[0] / dims[1]);\n return renderer.viewToWorld(val3[0], val3[1], val3[2]);\n };\n\n publicAPI.normalizedDisplayToViewport = function (x, y, z, renderer) {\n var vCoords = renderer.getViewportByReference();\n vCoords = publicAPI.normalizedDisplayToDisplay(vCoords[0], vCoords[1], 0.0);\n var coords = publicAPI.normalizedDisplayToDisplay(x, y, z);\n return [coords[0] - vCoords[0] - 0.5, coords[1] - vCoords[1] - 0.5, z];\n };\n\n publicAPI.viewportToNormalizedViewport = function (x, y, z, renderer) {\n var size = publicAPI.getViewportSize(renderer);\n\n if (size && size[0] !== 0 && size[1] !== 0) {\n return [x / (size[0] - 1.0), y / (size[1] - 1.0), z];\n }\n\n return [x, y, z];\n };\n\n publicAPI.normalizedViewportToViewport = function (x, y, z, renderer) {\n var size = publicAPI.getViewportSize(renderer);\n return [x * (size[0] - 1.0), y * (size[1] - 1.0), z];\n };\n\n publicAPI.displayToLocalDisplay = function (x, y, z) {\n var size = publicAPI.getFramebufferSize();\n return [x, size[1] - y - 1, z];\n };\n\n publicAPI.viewportToNormalizedDisplay = function (x, y, z, renderer) {\n var vCoords = renderer.getViewportByReference();\n vCoords = publicAPI.normalizedDisplayToDisplay(vCoords[0], vCoords[1], 0.0);\n var x2 = x + vCoords[0] + 0.5;\n var y2 = y + vCoords[1] + 0.5;\n return publicAPI.displayToNormalizedDisplay(x2, y2, z);\n };\n\n publicAPI.getPixelData = function (x1, y1, x2, y2) {\n macro.vtkErrorMacro('not implemented');\n return undefined;\n };\n\n publicAPI.createSelector = function () {\n macro.vtkErrorMacro('not implemented');\n return undefined;\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n size: undefined,\n selector: undefined\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues);\n\n if (!model.size) {\n model.size = [300, 300];\n }\n\n macro.getArray(publicAPI, model, ['size'], 2);\n macro.get(publicAPI, model, ['selector']); // Inheritance\n\n vtkViewNode.extend(publicAPI, model, initialValues); // Object methods\n\n vtkRenderWindowViewNode(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkRenderWindowViewNode'); // ----------------------------------------------------------------------------\n\nvar vtkRenderWindowViewNode$1 = {\n newInstance: newInstance,\n extend: extend\n};\n\nexport { vtkRenderWindowViewNode$1 as default, extend, newInstance };\n","function createContextProxyHandler() {\n var cache = new Map();\n var getParameterHandler = {\n apply: function apply(target, gl, args) {\n if (cache.has(args[0])) {\n return cache.get(args[0]);\n }\n\n return target.apply(gl, args);\n }\n }; // only supports single-value setters\n\n function cachedSetterHandler(key) {\n return {\n apply: function apply(target, gl, args) {\n cache.set(key, args[0]);\n return target.apply(gl, args);\n }\n };\n } // When a property is accessed on the webgl context proxy,\n // it's accessed is intercepted. If the property name matches\n // any of the keys of `propHandlers`, then that handler is called\n // with the following arguments: (gl, prop, receiver, propValue)\n // - gl (WebGL2RenderingContext): the underlying webgl context\n // - propName (string): the property name\n // - receiver (Proxy): the webgl context proxy\n // - propValue (unknown): the value of `gl[propName]`\n\n\n var propHandlers = Object.create(null); // Sets getParameter(property) as a cached getter proxy.\n // propValue.bind(gl) is to avoid Illegal Invocation errors.\n\n propHandlers.getParameter = function (gl, prop, receiver, propValue) {\n return new Proxy(propValue.bind(gl), getParameterHandler);\n }; // Sets depthMask(flag) as a cached setter proxy.\n\n\n propHandlers.depthMask = function (gl, prop, receiver, propValue) {\n return new Proxy(propValue.bind(gl), cachedSetterHandler(gl.DEPTH_WRITEMASK));\n };\n\n return {\n get: function get(gl, prop, receiver) {\n var value = Reflect.get(gl, prop, gl);\n\n if (value instanceof Function) {\n // prevents Illegal Invocation errors\n value = value.bind(gl);\n }\n\n var propHandler = propHandlers[prop];\n\n if (propHandler) {\n return propHandler(gl, prop, receiver, value);\n }\n\n return value;\n }\n };\n}\nvar ContextProxy = {\n createContextProxyHandler: createContextProxyHandler\n};\n\nexport { createContextProxyHandler, ContextProxy as default };\n","import _slicedToArray from '@babel/runtime/helpers/slicedToArray';\nimport _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';\nimport _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';\nimport _regeneratorRuntime from '@babel/runtime/regenerator';\nimport { VtkDataTypes } from '../../Common/Core/DataArray/Constants.js';\nimport macro from '../../macros.js';\nimport { registerViewConstructor } from '../Core/RenderWindow.js';\nimport vtkForwardPass from './ForwardPass.js';\nimport vtkHardwareSelector from './HardwareSelector.js';\nimport vtkShaderCache from './ShaderCache.js';\nimport vtkTextureUnitManager from './TextureUnitManager.js';\nimport vtkViewNodeFactory from './ViewNodeFactory.js';\nimport vtkRenderPass from '../SceneGraph/RenderPass.js';\nimport vtkRenderWindowViewNode from '../SceneGraph/RenderWindowViewNode.js';\nimport { createContextProxyHandler } from './RenderWindow/ContextProxy.js';\n\nvar vtkDebugMacro = macro.vtkDebugMacro,\n vtkErrorMacro = macro.vtkErrorMacro;\nvar SCREENSHOT_PLACEHOLDER = {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%'\n};\nvar DEFAULT_RESET_FACTORS = {\n vr: {\n rescaleFactor: 1.0,\n translateZ: -0.7 // 0.7 m forward from the camera\n\n },\n ar: {\n rescaleFactor: 0.25,\n // scale down AR for viewing comfort by default\n translateZ: -0.5 // 0.5 m forward from the camera\n\n }\n};\n\nfunction checkRenderTargetSupport(gl, format, type) {\n // create temporary frame buffer and texture\n var framebuffer = gl.createFramebuffer();\n var texture = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texImage2D(gl.TEXTURE_2D, 0, format, 2, 2, 0, format, type, null);\n gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0); // check frame buffer status\n\n var status = gl.checkFramebufferStatus(gl.FRAMEBUFFER); // clean up\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.bindTexture(gl.TEXTURE_2D, null);\n return status === gl.FRAMEBUFFER_COMPLETE;\n} // ----------------------------------------------------------------------------\n// Monitor the usage of GL context across vtkOpenGLRenderWindow instances\n// ----------------------------------------------------------------------------\n\n\nvar GL_CONTEXT_COUNT = 0;\nvar GL_CONTEXT_LISTENERS = [];\n\nfunction createGLContext() {\n GL_CONTEXT_COUNT++;\n GL_CONTEXT_LISTENERS.forEach(function (cb) {\n return cb(GL_CONTEXT_COUNT);\n });\n}\n\nfunction deleteGLContext() {\n GL_CONTEXT_COUNT--;\n GL_CONTEXT_LISTENERS.forEach(function (cb) {\n return cb(GL_CONTEXT_COUNT);\n });\n}\n\nfunction pushMonitorGLContextCount(cb) {\n GL_CONTEXT_LISTENERS.push(cb);\n}\nfunction popMonitorGLContextCount(cb) {\n return GL_CONTEXT_LISTENERS.pop();\n} // ----------------------------------------------------------------------------\n// vtkOpenGLRenderWindow methods\n// ----------------------------------------------------------------------------\n\nfunction vtkOpenGLRenderWindow(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkOpenGLRenderWindow');\n var cachingContextHandler = createContextProxyHandler();\n\n publicAPI.getViewNodeFactory = function () {\n return model.myFactory;\n }; // prevent default context lost handler\n\n\n model.canvas.addEventListener('webglcontextlost', function (event) {\n event.preventDefault();\n }, false);\n model.canvas.addEventListener('webglcontextrestored', publicAPI.restoreContext, false); // Cache the value here as calling it on each frame is expensive\n\n var isImmersiveVrSupported = navigator.xr !== undefined && navigator.xr.isSessionSupported('immersive-vr'); // Auto update style\n\n var previousSize = [0, 0];\n\n function updateWindow() {\n // Canvas size\n if (model.renderable) {\n if (model.size[0] !== previousSize[0] || model.size[1] !== previousSize[1]) {\n previousSize[0] = model.size[0];\n previousSize[1] = model.size[1];\n model.canvas.setAttribute('width', model.size[0]);\n model.canvas.setAttribute('height', model.size[1]);\n }\n } // ImageStream size\n\n\n if (model.viewStream) {\n // If same size that's a NoOp\n model.viewStream.setSize(model.size[0], model.size[1]);\n } // Offscreen ?\n\n\n model.canvas.style.display = model.useOffScreen ? 'none' : 'block'; // Cursor type\n\n if (model.el) {\n model.el.style.cursor = model.cursorVisibility ? model.cursor : 'none';\n } // Invalidate cached DOM container size\n\n\n model.containerSize = null;\n }\n\n publicAPI.onModified(updateWindow); // Builds myself.\n\n publicAPI.buildPass = function (prepass) {\n if (prepass) {\n if (!model.renderable) {\n return;\n }\n\n publicAPI.prepareNodes();\n publicAPI.addMissingNodes(model.renderable.getRenderersByReference());\n publicAPI.removeUnusedNodes();\n publicAPI.initialize();\n model.children.forEach(function (child) {\n child.setOpenGLRenderWindow(publicAPI);\n });\n }\n };\n\n publicAPI.initialize = function () {\n if (!model.initialized) {\n model.context = publicAPI.get3DContext();\n model.textureUnitManager = vtkTextureUnitManager.newInstance();\n model.textureUnitManager.setContext(model.context);\n model.shaderCache.setContext(model.context); // initialize blending for transparency\n\n var gl = model.context;\n gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n gl.depthFunc(gl.LEQUAL);\n gl.enable(gl.BLEND);\n model.initialized = true;\n }\n };\n\n publicAPI.makeCurrent = function () {\n model.context.makeCurrent();\n };\n\n publicAPI.setContainer = function (el) {\n if (model.el && model.el !== el) {\n if (model.canvas.parentNode !== model.el) {\n vtkErrorMacro('Error: canvas parent node does not match container');\n } // Remove canvas from previous container\n\n\n model.el.removeChild(model.canvas); // If the renderer has previously added\n // a background image, remove it from the DOM.\n\n if (model.el.contains(model.bgImage)) {\n model.el.removeChild(model.bgImage);\n }\n }\n\n if (model.el !== el) {\n model.el = el;\n\n if (model.el) {\n model.el.appendChild(model.canvas); // If the renderer is set to use a background\n // image, attach it to the DOM.\n\n if (model.useBackgroundImage) {\n model.el.appendChild(model.bgImage);\n }\n } // Trigger modified()\n\n\n publicAPI.modified();\n }\n };\n\n publicAPI.getContainer = function () {\n return model.el;\n };\n\n publicAPI.getContainerSize = function () {\n if (!model.containerSize && model.el) {\n var _model$el$getBounding = model.el.getBoundingClientRect(),\n width = _model$el$getBounding.width,\n height = _model$el$getBounding.height;\n\n model.containerSize = [width, height];\n }\n\n return model.containerSize || model.size;\n };\n\n publicAPI.getFramebufferSize = function () {\n if (model.activeFramebuffer) {\n return model.activeFramebuffer.getSize();\n }\n\n return model.size;\n };\n\n publicAPI.getPixelData = function (x1, y1, x2, y2) {\n var pixels = new Uint8Array((x2 - x1 + 1) * (y2 - y1 + 1) * 4);\n model.context.readPixels(x1, y1, x2 - x1 + 1, y2 - y1 + 1, model.context.RGBA, model.context.UNSIGNED_BYTE, pixels);\n return pixels;\n };\n\n publicAPI.get3DContext = function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n preserveDrawingBuffer: false,\n depth: true,\n alpha: true,\n powerPreference: 'high-performance'\n };\n var result = null; // Do we have webxr support\n\n if (isImmersiveVrSupported) {\n publicAPI.invokeHaveVRDisplay();\n }\n\n var webgl2Supported = typeof WebGL2RenderingContext !== 'undefined';\n model.webgl2 = false;\n\n if (model.defaultToWebgl2 && webgl2Supported) {\n result = model.canvas.getContext('webgl2', options);\n\n if (result) {\n model.webgl2 = true;\n vtkDebugMacro('using webgl2');\n }\n }\n\n if (!result) {\n vtkDebugMacro('using webgl1');\n result = model.canvas.getContext('webgl', options) || model.canvas.getContext('experimental-webgl', options);\n }\n\n return new Proxy(result, cachingContextHandler);\n }; // Request an XR session on the user device with WebXR,\n // typically in response to a user request such as a button press\n\n\n publicAPI.startXR = function (isAR) {\n if (navigator.xr === undefined) {\n throw new Error('WebXR is not available');\n }\n\n model.xrSessionIsAR = isAR;\n var sessionType = isAR ? 'immersive-ar' : 'immersive-vr';\n\n if (!navigator.xr.isSessionSupported(sessionType)) {\n if (isAR) {\n throw new Error('Device does not support AR session');\n } else {\n throw new Error('VR display is not available');\n }\n }\n\n if (model.xrSession === null) {\n navigator.xr.requestSession(sessionType).then(publicAPI.enterXR, function () {\n throw new Error('Failed to create XR session!');\n });\n } else {\n throw new Error('XR Session already exists!');\n }\n }; // When an XR session is available, set up the XRWebGLLayer\n // and request the first animation frame for the device\n\n\n publicAPI.enterXR = /*#__PURE__*/function () {\n var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(xrSession) {\n var gl, glLayer;\n return _regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n model.xrSession = xrSession;\n model.oldCanvasSize = model.size.slice();\n\n if (!(model.xrSession !== null)) {\n _context.next = 15;\n break;\n }\n\n gl = publicAPI.get3DContext();\n _context.next = 6;\n return gl.makeXRCompatible();\n\n case 6:\n glLayer = new global.XRWebGLLayer(model.xrSession, gl);\n publicAPI.setSize(glLayer.framebufferWidth, glLayer.framebufferHeight);\n model.xrSession.updateRenderState({\n baseLayer: glLayer\n });\n model.xrSession.requestReferenceSpace('local').then(function (refSpace) {\n model.xrReferenceSpace = refSpace;\n });\n publicAPI.resetXRScene();\n model.renderable.getInteractor().switchToXRAnimation();\n model.xrSceneFrame = model.xrSession.requestAnimationFrame(publicAPI.xrRender);\n _context.next = 16;\n break;\n\n case 15:\n throw new Error('Failed to enter VR with a null xrSession.');\n\n case 16:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee);\n }));\n\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }();\n\n publicAPI.resetXRScene = function () {\n var inputRescaleFactor = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_RESET_FACTORS.vr.rescaleFactor;\n var inputTranslateZ = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_RESET_FACTORS.vr.translateZ;\n // Adjust world-to-physical parameters for different modalities\n // Default parameter values are for VR (model.xrSessionIsAR == false)\n var rescaleFactor = inputRescaleFactor;\n var translateZ = inputTranslateZ;\n\n if (model.xrSessionIsAR && rescaleFactor === DEFAULT_RESET_FACTORS.vr.rescaleFactor) {\n // Scale down by default in AR\n rescaleFactor = DEFAULT_RESET_FACTORS.ar.rescaleFactor;\n }\n\n if (model.xrSessionIsAR && translateZ === DEFAULT_RESET_FACTORS.vr.translateZ) {\n // Default closer to the camera in AR\n translateZ = DEFAULT_RESET_FACTORS.ar.translateZ;\n }\n\n var ren = model.renderable.getRenderers()[0];\n ren.resetCamera();\n var camera = ren.getActiveCamera();\n var physicalScale = camera.getPhysicalScale();\n var physicalTranslation = camera.getPhysicalTranslation();\n physicalScale /= rescaleFactor;\n translateZ *= physicalScale;\n physicalTranslation[2] += translateZ;\n camera.setPhysicalScale(physicalScale);\n camera.setPhysicalTranslation(physicalTranslation); // Clip at 0.1m, 100.0m in physical space by default\n\n camera.setClippingRange(0.1 * physicalScale, 100.0 * physicalScale);\n };\n\n publicAPI.stopXR = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {\n var gl, ren;\n return _regeneratorRuntime.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n if (!(navigator.xr === undefined)) {\n _context2.next = 2;\n break;\n }\n\n return _context2.abrupt(\"return\");\n\n case 2:\n if (!(model.xrSession !== null)) {\n _context2.next = 10;\n break;\n }\n\n model.xrSession.cancelAnimationFrame(model.xrSceneFrame);\n model.renderable.getInteractor().returnFromXRAnimation();\n gl = publicAPI.get3DContext();\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n _context2.next = 9;\n return model.xrSession.end().catch(function (error) {\n if (!(error instanceof DOMException)) {\n throw error;\n }\n });\n\n case 9:\n model.xrSession = null;\n\n case 10:\n if (model.oldCanvasSize !== undefined) {\n publicAPI.setSize.apply(publicAPI, _toConsumableArray(model.oldCanvasSize));\n } // Reset to default canvas\n\n\n ren = model.renderable.getRenderers()[0];\n ren.getActiveCamera().setProjectionMatrix(null);\n ren.resetCamera();\n ren.setViewport(0.0, 0, 1.0, 1.0);\n publicAPI.traverseAllPasses();\n\n case 16:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2);\n }));\n\n publicAPI.xrRender = /*#__PURE__*/function () {\n var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(t, frame) {\n var xrSession, xrPose, gl, glLayer, ren;\n return _regeneratorRuntime.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n xrSession = frame.session;\n model.renderable.getInteractor().updateXRGamepads(xrSession, frame, model.xrReferenceSpace);\n model.xrSceneFrame = model.xrSession.requestAnimationFrame(publicAPI.xrRender);\n xrPose = frame.getViewerPose(model.xrReferenceSpace);\n\n if (xrPose) {\n gl = publicAPI.get3DContext();\n\n if (model.xrSessionIsAR && model.oldCanvasSize !== undefined) {\n gl.canvas.width = model.oldCanvasSize[0];\n gl.canvas.height = model.oldCanvasSize[1];\n }\n\n glLayer = xrSession.renderState.baseLayer;\n gl.bindFramebuffer(gl.FRAMEBUFFER, glLayer.framebuffer);\n gl.clear(gl.COLOR_BUFFER_BIT);\n gl.clear(gl.DEPTH_BUFFER_BIT); // get the first renderer\n\n ren = model.renderable.getRenderers()[0]; // Do a render pass for each eye\n\n xrPose.views.forEach(function (view) {\n var viewport = glLayer.getViewport(view);\n gl.viewport(viewport.x, viewport.y, viewport.width, viewport.height); // TODO: Appropriate handling for AR passthrough on HMDs\n // with two eyes will require further investigation.\n\n if (!model.xrSessionIsAR) {\n if (view.eye === 'left') {\n ren.setViewport(0, 0, 0.5, 1.0);\n } else if (view.eye === 'right') {\n ren.setViewport(0.5, 0, 1.0, 1.0);\n } else {\n // No handling for non-eye viewport\n return;\n }\n }\n\n ren.getActiveCamera().computeViewParametersFromPhysicalMatrix(view.transform.inverse.matrix);\n ren.getActiveCamera().setProjectionMatrix(view.projectionMatrix);\n publicAPI.traverseAllPasses();\n });\n }\n\n case 5:\n case \"end\":\n return _context3.stop();\n }\n }\n }, _callee3);\n }));\n\n return function (_x2, _x3) {\n return _ref3.apply(this, arguments);\n };\n }();\n\n publicAPI.restoreContext = function () {\n var rp = vtkRenderPass.newInstance();\n rp.setCurrentOperation('Release');\n rp.traverse(publicAPI, null);\n };\n\n publicAPI.activateTexture = function (texture) {\n // Only add if it isn't already there\n var result = model._textureResourceIds.get(texture);\n\n if (result !== undefined) {\n model.context.activeTexture(model.context.TEXTURE0 + result);\n return;\n }\n\n var activeUnit = publicAPI.getTextureUnitManager().allocate();\n\n if (activeUnit < 0) {\n vtkErrorMacro('Hardware does not support the number of textures defined.');\n return;\n }\n\n model._textureResourceIds.set(texture, activeUnit);\n\n model.context.activeTexture(model.context.TEXTURE0 + activeUnit);\n };\n\n publicAPI.deactivateTexture = function (texture) {\n // Only deactivate if it isn't already there\n var result = model._textureResourceIds.get(texture);\n\n if (result !== undefined) {\n publicAPI.getTextureUnitManager().free(result);\n\n model._textureResourceIds.delete(texture);\n }\n };\n\n publicAPI.getTextureUnitForTexture = function (texture) {\n var result = model._textureResourceIds.get(texture);\n\n if (result !== undefined) {\n return result;\n }\n\n return -1;\n };\n\n publicAPI.getDefaultTextureInternalFormat = function (vtktype, numComps, useFloat) {\n if (model.webgl2) {\n switch (vtktype) {\n case VtkDataTypes.UNSIGNED_CHAR:\n switch (numComps) {\n case 1:\n return model.context.R8;\n\n case 2:\n return model.context.RG8;\n\n case 3:\n return model.context.RGB8;\n\n case 4:\n default:\n return model.context.RGBA8;\n }\n\n case VtkDataTypes.FLOAT:\n default:\n switch (numComps) {\n case 1:\n return model.context.R16F;\n\n case 2:\n return model.context.RG16F;\n\n case 3:\n return model.context.RGB16F;\n\n case 4:\n default:\n return model.context.RGBA16F;\n }\n\n }\n } // webgl1 only supports four types\n\n\n switch (numComps) {\n case 1:\n return model.context.LUMINANCE;\n\n case 2:\n return model.context.LUMINANCE_ALPHA;\n\n case 3:\n return model.context.RGB;\n\n case 4:\n default:\n return model.context.RGBA;\n }\n };\n\n publicAPI.setBackgroundImage = function (img) {\n model.bgImage.src = img.src;\n };\n\n publicAPI.setUseBackgroundImage = function (value) {\n model.useBackgroundImage = value; // Add or remove the background image from the\n // DOM as specified.\n\n if (model.useBackgroundImage && !model.el.contains(model.bgImage)) {\n model.el.appendChild(model.bgImage);\n } else if (!model.useBackgroundImage && model.el.contains(model.bgImage)) {\n model.el.removeChild(model.bgImage);\n }\n };\n\n function getCanvasDataURL() {\n var format = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : model.imageFormat;\n // Copy current canvas to not modify the original\n var temporaryCanvas = document.createElement('canvas');\n var temporaryContext = temporaryCanvas.getContext('2d');\n temporaryCanvas.width = model.canvas.width;\n temporaryCanvas.height = model.canvas.height;\n temporaryContext.drawImage(model.canvas, 0, 0); // Get current client rect to place canvas\n\n var mainBoundingClientRect = model.canvas.getBoundingClientRect();\n var renderWindow = model.renderable;\n var renderers = renderWindow.getRenderers();\n renderers.forEach(function (renderer) {\n var viewProps = renderer.getViewProps();\n viewProps.forEach(function (viewProp) {\n // Check if the prop has a container that should have canvas\n if (viewProp.getContainer) {\n var container = viewProp.getContainer();\n var canvasList = container.getElementsByTagName('canvas'); // Go throughout all canvas and copy it into temporary main canvas\n\n for (var i = 0; i < canvasList.length; i++) {\n var currentCanvas = canvasList[i];\n var boundingClientRect = currentCanvas.getBoundingClientRect();\n var newXPosition = boundingClientRect.x - mainBoundingClientRect.x;\n var newYPosition = boundingClientRect.y - mainBoundingClientRect.y;\n temporaryContext.drawImage(currentCanvas, newXPosition, newYPosition);\n }\n }\n });\n });\n var screenshot = temporaryCanvas.toDataURL(format);\n temporaryCanvas.remove();\n publicAPI.invokeImageReady(screenshot);\n }\n\n publicAPI.captureNextImage = function () {\n var format = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'image/png';\n\n var _ref4 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref4$resetCamera = _ref4.resetCamera,\n resetCamera = _ref4$resetCamera === void 0 ? false : _ref4$resetCamera,\n _ref4$size = _ref4.size,\n size = _ref4$size === void 0 ? null : _ref4$size,\n _ref4$scale = _ref4.scale,\n scale = _ref4$scale === void 0 ? 1 : _ref4$scale;\n\n if (model.deleted) {\n return null;\n }\n\n model.imageFormat = format;\n var previous = model.notifyStartCaptureImage;\n model.notifyStartCaptureImage = true;\n model._screenshot = {\n size: !!size || scale !== 1 ? size || model.size.map(function (val) {\n return val * scale;\n }) : null\n };\n return new Promise(function (resolve, reject) {\n var subscription = publicAPI.onImageReady(function (imageURL) {\n if (model._screenshot.size === null) {\n model.notifyStartCaptureImage = previous;\n subscription.unsubscribe();\n\n if (model._screenshot.placeHolder) {\n // resize the main canvas back to its original size and show it\n model.size = model._screenshot.originalSize; // process the resize\n\n publicAPI.modified(); // restore the saved camera parameters, if applicable\n\n if (model._screenshot.cameras) {\n model._screenshot.cameras.forEach(function (_ref5) {\n var restoreParamsFn = _ref5.restoreParamsFn,\n arg = _ref5.arg;\n return restoreParamsFn(arg);\n });\n } // Trigger a render at the original size\n\n\n publicAPI.traverseAllPasses(); // Remove and clean up the placeholder, revealing the original\n\n model.el.removeChild(model._screenshot.placeHolder);\n\n model._screenshot.placeHolder.remove();\n\n model._screenshot = null;\n }\n\n resolve(imageURL);\n } else {\n // Create a placeholder image overlay while we resize and render\n var tmpImg = document.createElement('img');\n tmpImg.style = SCREENSHOT_PLACEHOLDER;\n tmpImg.src = imageURL;\n model._screenshot.placeHolder = model.el.appendChild(tmpImg); // hide the main canvas\n\n model.canvas.style.display = 'none'; // remember the main canvas original size, then resize it\n\n model._screenshot.originalSize = model.size;\n model.size = model._screenshot.size;\n model._screenshot.size = null; // process the resize\n\n publicAPI.modified();\n\n if (resetCamera) {\n var isUserResetCamera = resetCamera !== true; // If resetCamera was requested, we first save camera parameters\n // from all the renderers, so we can restore them later\n\n model._screenshot.cameras = model.renderable.getRenderers().map(function (renderer) {\n var camera = renderer.getActiveCamera();\n var params = camera.get('focalPoint', 'position', 'parallelScale');\n return {\n resetCameraArgs: isUserResetCamera ? {\n renderer: renderer\n } : undefined,\n resetCameraFn: isUserResetCamera ? resetCamera : renderer.resetCamera,\n restoreParamsFn: camera.set,\n // \"clone\" the params so we don't keep refs to properties\n arg: JSON.parse(JSON.stringify(params))\n };\n }); // Perform the resetCamera() on each renderer only after capturing\n // the params from all active cameras, in case there happen to be\n // linked cameras among the renderers.\n\n model._screenshot.cameras.forEach(function (_ref6) {\n var resetCameraFn = _ref6.resetCameraFn,\n resetCameraArgs = _ref6.resetCameraArgs;\n return resetCameraFn(resetCameraArgs);\n });\n } // Trigger a render at the custom size\n\n\n publicAPI.traverseAllPasses();\n }\n });\n });\n };\n\n var hardwareMaximumLineWidth;\n\n publicAPI.getHardwareMaximumLineWidth = function () {\n // We cache the result of this function because `getParameter` is slow\n if (hardwareMaximumLineWidth != null) {\n return hardwareMaximumLineWidth;\n }\n\n var gl = publicAPI.get3DContext();\n var lineWidthRange = gl.getParameter(gl.ALIASED_LINE_WIDTH_RANGE);\n hardwareMaximumLineWidth = lineWidthRange[1];\n return lineWidthRange[1];\n };\n\n publicAPI.getGLInformations = function () {\n var gl = publicAPI.get3DContext();\n var glTextureFloat = gl.getExtension('OES_texture_float');\n var glTextureHalfFloat = gl.getExtension('OES_texture_half_float');\n var glDebugRendererInfo = gl.getExtension('WEBGL_debug_renderer_info');\n var glDrawBuffers = gl.getExtension('WEBGL_draw_buffers');\n var glAnisotropic = gl.getExtension('EXT_texture_filter_anisotropic') || gl.getExtension('WEBKIT_EXT_texture_filter_anisotropic');\n var params = [['Max Vertex Attributes', 'MAX_VERTEX_ATTRIBS', gl.getParameter(gl.MAX_VERTEX_ATTRIBS)], ['Max Varying Vectors', 'MAX_VARYING_VECTORS', gl.getParameter(gl.MAX_VARYING_VECTORS)], ['Max Vertex Uniform Vectors', 'MAX_VERTEX_UNIFORM_VECTORS', gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS)], ['Max Fragment Uniform Vectors', 'MAX_FRAGMENT_UNIFORM_VECTORS', gl.getParameter(gl.MAX_FRAGMENT_UNIFORM_VECTORS)], ['Max Fragment Texture Image Units', 'MAX_TEXTURE_IMAGE_UNITS', gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS)], ['Max Vertex Texture Image Units', 'MAX_VERTEX_TEXTURE_IMAGE_UNITS', gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS)], ['Max Combined Texture Image Units', 'MAX_COMBINED_TEXTURE_IMAGE_UNITS', gl.getParameter(gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS)], ['Max 2D Texture Size', 'MAX_TEXTURE_SIZE', gl.getParameter(gl.MAX_TEXTURE_SIZE)], ['Max Cube Texture Size', 'MAX_CUBE_MAP_TEXTURE_SIZE', gl.getParameter(gl.MAX_CUBE_MAP_TEXTURE_SIZE)], ['Max Texture Anisotropy', 'MAX_TEXTURE_MAX_ANISOTROPY_EXT', glAnisotropic && gl.getParameter(glAnisotropic.MAX_TEXTURE_MAX_ANISOTROPY_EXT)], ['Point Size Range', 'ALIASED_POINT_SIZE_RANGE', gl.getParameter(gl.ALIASED_POINT_SIZE_RANGE).join(' - ')], ['Line Width Range', 'ALIASED_LINE_WIDTH_RANGE', gl.getParameter(gl.ALIASED_LINE_WIDTH_RANGE).join(' - ')], ['Max Viewport Dimensions', 'MAX_VIEWPORT_DIMS', gl.getParameter(gl.MAX_VIEWPORT_DIMS).join(' - ')], ['Max Renderbuffer Size', 'MAX_RENDERBUFFER_SIZE', gl.getParameter(gl.MAX_RENDERBUFFER_SIZE)], ['Framebuffer Red Bits', 'RED_BITS', gl.getParameter(gl.RED_BITS)], ['Framebuffer Green Bits', 'GREEN_BITS', gl.getParameter(gl.GREEN_BITS)], ['Framebuffer Blue Bits', 'BLUE_BITS', gl.getParameter(gl.BLUE_BITS)], ['Framebuffer Alpha Bits', 'ALPHA_BITS', gl.getParameter(gl.ALPHA_BITS)], ['Framebuffer Depth Bits', 'DEPTH_BITS', gl.getParameter(gl.DEPTH_BITS)], ['Framebuffer Stencil Bits', 'STENCIL_BITS', gl.getParameter(gl.STENCIL_BITS)], ['Framebuffer Subpixel Bits', 'SUBPIXEL_BITS', gl.getParameter(gl.SUBPIXEL_BITS)], ['MSAA Samples', 'SAMPLES', gl.getParameter(gl.SAMPLES)], ['MSAA Sample Buffers', 'SAMPLE_BUFFERS', gl.getParameter(gl.SAMPLE_BUFFERS)], ['Supported Formats for UByte Render Targets ', 'UNSIGNED_BYTE RENDER TARGET FORMATS', [glTextureFloat && checkRenderTargetSupport(gl, gl.RGBA, gl.UNSIGNED_BYTE) ? 'RGBA' : '', glTextureFloat && checkRenderTargetSupport(gl, gl.RGB, gl.UNSIGNED_BYTE) ? 'RGB' : '', glTextureFloat && checkRenderTargetSupport(gl, gl.LUMINANCE, gl.UNSIGNED_BYTE) ? 'LUMINANCE' : '', glTextureFloat && checkRenderTargetSupport(gl, gl.ALPHA, gl.UNSIGNED_BYTE) ? 'ALPHA' : '', glTextureFloat && checkRenderTargetSupport(gl, gl.LUMINANCE_ALPHA, gl.UNSIGNED_BYTE) ? 'LUMINANCE_ALPHA' : ''].join(' ')], ['Supported Formats for Half Float Render Targets', 'HALF FLOAT RENDER TARGET FORMATS', [glTextureHalfFloat && checkRenderTargetSupport(gl, gl.RGBA, glTextureHalfFloat.HALF_FLOAT_OES) ? 'RGBA' : '', glTextureHalfFloat && checkRenderTargetSupport(gl, gl.RGB, glTextureHalfFloat.HALF_FLOAT_OES) ? 'RGB' : '', glTextureHalfFloat && checkRenderTargetSupport(gl, gl.LUMINANCE, glTextureHalfFloat.HALF_FLOAT_OES) ? 'LUMINANCE' : '', glTextureHalfFloat && checkRenderTargetSupport(gl, gl.ALPHA, glTextureHalfFloat.HALF_FLOAT_OES) ? 'ALPHA' : '', glTextureHalfFloat && checkRenderTargetSupport(gl, gl.LUMINANCE_ALPHA, glTextureHalfFloat.HALF_FLOAT_OES) ? 'LUMINANCE_ALPHA' : ''].join(' ')], ['Supported Formats for Full Float Render Targets', 'FLOAT RENDER TARGET FORMATS', [glTextureFloat && checkRenderTargetSupport(gl, gl.RGBA, gl.FLOAT) ? 'RGBA' : '', glTextureFloat && checkRenderTargetSupport(gl, gl.RGB, gl.FLOAT) ? 'RGB' : '', glTextureFloat && checkRenderTargetSupport(gl, gl.LUMINANCE, gl.FLOAT) ? 'LUMINANCE' : '', glTextureFloat && checkRenderTargetSupport(gl, gl.ALPHA, gl.FLOAT) ? 'ALPHA' : '', glTextureFloat && checkRenderTargetSupport(gl, gl.LUMINANCE_ALPHA, gl.FLOAT) ? 'LUMINANCE_ALPHA' : ''].join(' ')], ['Max Multiple Render Targets Buffers', 'MAX_DRAW_BUFFERS_WEBGL', glDrawBuffers ? gl.getParameter(glDrawBuffers.MAX_DRAW_BUFFERS_WEBGL) : 0], ['High Float Precision in Vertex Shader', 'HIGH_FLOAT VERTEX_SHADER', [gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_FLOAT).precision, ' (-2', gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_FLOAT).rangeMin, ' - 2', gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_FLOAT).rangeMax, ')'].join('')], ['Medium Float Precision in Vertex Shader', 'MEDIUM_FLOAT VERTEX_SHADER', [gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.MEDIUM_FLOAT).precision, ' (-2', gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.MEDIUM_FLOAT).rangeMin, ' - 2', gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.MEDIUM_FLOAT).rangeMax, ')'].join('')], ['Low Float Precision in Vertex Shader', 'LOW_FLOAT VERTEX_SHADER', [gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.LOW_FLOAT).precision, ' (-2', gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.LOW_FLOAT).rangeMin, ' - 2', gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.LOW_FLOAT).rangeMax, ')'].join('')], ['High Float Precision in Fragment Shader', 'HIGH_FLOAT FRAGMENT_SHADER', [gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT).precision, ' (-2', gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT).rangeMin, ' - 2', gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT).rangeMax, ')'].join('')], ['Medium Float Precision in Fragment Shader', 'MEDIUM_FLOAT FRAGMENT_SHADER', [gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT).precision, ' (-2', gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT).rangeMin, ' - 2', gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT).rangeMax, ')'].join('')], ['Low Float Precision in Fragment Shader', 'LOW_FLOAT FRAGMENT_SHADER', [gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.LOW_FLOAT).precision, ' (-2', gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.LOW_FLOAT).rangeMin, ' - 2', gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.LOW_FLOAT).rangeMax, ')'].join('')], ['High Int Precision in Vertex Shader', 'HIGH_INT VERTEX_SHADER', [gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_INT).precision, ' (-2', gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_INT).rangeMin, ' - 2', gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_INT).rangeMax, ')'].join('')], ['Medium Int Precision in Vertex Shader', 'MEDIUM_INT VERTEX_SHADER', [gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.MEDIUM_INT).precision, ' (-2', gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.MEDIUM_INT).rangeMin, ' - 2', gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.MEDIUM_INT).rangeMax, ')'].join('')], ['Low Int Precision in Vertex Shader', 'LOW_INT VERTEX_SHADER', [gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.LOW_INT).precision, ' (-2', gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.LOW_INT).rangeMin, ' - 2', gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.LOW_INT).rangeMax, ')'].join('')], ['High Int Precision in Fragment Shader', 'HIGH_INT FRAGMENT_SHADER', [gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_INT).precision, ' (-2', gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_INT).rangeMin, ' - 2', gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_INT).rangeMax, ')'].join('')], ['Medium Int Precision in Fragment Shader', 'MEDIUM_INT FRAGMENT_SHADER', [gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.MEDIUM_INT).precision, ' (-2', gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.MEDIUM_INT).rangeMin, ' - 2', gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.MEDIUM_INT).rangeMax, ')'].join('')], ['Low Int Precision in Fragment Shader', 'LOW_INT FRAGMENT_SHADER', [gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.LOW_INT).precision, ' (-2', gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.LOW_INT).rangeMin, ' - 2', gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.LOW_INT).rangeMax, ')'].join('')], ['Supported Extensions', 'EXTENSIONS', gl.getSupportedExtensions().join('
\\t\\t\\t\\t\\t ')], ['WebGL Renderer', 'RENDERER', gl.getParameter(gl.RENDERER)], ['WebGL Vendor', 'VENDOR', gl.getParameter(gl.VENDOR)], ['WebGL Version', 'VERSION', gl.getParameter(gl.VERSION)], ['Shading Language Version', 'SHADING_LANGUAGE_VERSION', gl.getParameter(gl.SHADING_LANGUAGE_VERSION)], ['Unmasked Renderer', 'UNMASKED_RENDERER', glDebugRendererInfo && gl.getParameter(glDebugRendererInfo.UNMASKED_RENDERER_WEBGL)], ['Unmasked Vendor', 'UNMASKED_VENDOR', glDebugRendererInfo && gl.getParameter(glDebugRendererInfo.UNMASKED_VENDOR_WEBGL)], ['WebGL Version', 'WEBGL_VERSION', model.webgl2 ? 2 : 1]];\n var result = {};\n\n while (params.length) {\n var _params$pop = params.pop(),\n _params$pop2 = _slicedToArray(_params$pop, 3),\n label = _params$pop2[0],\n key = _params$pop2[1],\n value = _params$pop2[2];\n\n if (key) {\n result[key] = {\n label: label,\n value: value\n };\n }\n }\n\n return result;\n };\n\n publicAPI.traverseAllPasses = function () {\n if (model.renderPasses) {\n for (var index = 0; index < model.renderPasses.length; ++index) {\n model.renderPasses[index].traverse(publicAPI, null);\n }\n }\n\n if (model.notifyStartCaptureImage) {\n getCanvasDataURL();\n }\n };\n\n publicAPI.disableCullFace = function () {\n if (model.cullFaceEnabled) {\n model.context.disable(model.context.CULL_FACE);\n model.cullFaceEnabled = false;\n }\n };\n\n publicAPI.enableCullFace = function () {\n if (!model.cullFaceEnabled) {\n model.context.enable(model.context.CULL_FACE);\n model.cullFaceEnabled = true;\n }\n };\n\n publicAPI.setViewStream = function (stream) {\n if (model.viewStream === stream) {\n return false;\n }\n\n if (model.subscription) {\n model.subscription.unsubscribe();\n model.subscription = null;\n }\n\n model.viewStream = stream;\n\n if (model.viewStream) {\n // Force background to be transparent + render\n var mainRenderer = model.renderable.getRenderers()[0];\n mainRenderer.getBackgroundByReference()[3] = 0; // Enable display of the background image\n\n publicAPI.setUseBackgroundImage(true); // Bind to remote stream\n\n model.subscription = model.viewStream.onImageReady(function (e) {\n return publicAPI.setBackgroundImage(e.image);\n });\n model.viewStream.setSize(model.size[0], model.size[1]);\n model.viewStream.invalidateCache();\n model.viewStream.render();\n publicAPI.modified();\n }\n\n return true;\n };\n\n publicAPI.createSelector = function () {\n var ret = vtkHardwareSelector.newInstance();\n ret.setOpenGLRenderWindow(publicAPI);\n return ret;\n };\n\n publicAPI.delete = macro.chain(publicAPI.delete, publicAPI.setViewStream, deleteGLContext);\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n cullFaceEnabled: false,\n shaderCache: null,\n initialized: false,\n context: null,\n canvas: null,\n cursorVisibility: true,\n cursor: 'pointer',\n textureUnitManager: null,\n textureResourceIds: null,\n containerSize: null,\n renderPasses: [],\n notifyStartCaptureImage: false,\n webgl2: false,\n defaultToWebgl2: true,\n // attempt webgl2 on by default\n activeFramebuffer: null,\n xrSession: null,\n xrSessionIsAR: false,\n xrReferenceSpace: null,\n xrSupported: true,\n imageFormat: 'image/png',\n useOffScreen: false,\n useBackgroundImage: false\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Inheritance\n\n vtkRenderWindowViewNode.extend(publicAPI, model, initialValues); // Create internal instances\n\n model.canvas = document.createElement('canvas');\n model.canvas.style.width = '100%';\n createGLContext();\n\n if (!model.selector) {\n model.selector = vtkHardwareSelector.newInstance();\n model.selector.setOpenGLRenderWindow(publicAPI);\n } // Create internal bgImage\n\n\n model.bgImage = new Image();\n model.bgImage.style.position = 'absolute';\n model.bgImage.style.left = '0';\n model.bgImage.style.top = '0';\n model.bgImage.style.width = '100%';\n model.bgImage.style.height = '100%';\n model.bgImage.style.zIndex = '-1';\n model._textureResourceIds = new Map();\n model.myFactory = vtkViewNodeFactory.newInstance();\n /* eslint-disable no-use-before-define */\n\n model.myFactory.registerOverride('vtkRenderWindow', newInstance);\n /* eslint-enable no-use-before-define */\n\n model.shaderCache = vtkShaderCache.newInstance();\n model.shaderCache.setOpenGLRenderWindow(publicAPI); // setup default forward pass rendering\n\n model.renderPasses[0] = vtkForwardPass.newInstance();\n macro.event(publicAPI, model, 'imageReady');\n macro.event(publicAPI, model, 'haveVRDisplay'); // Build VTK API\n\n macro.get(publicAPI, model, ['shaderCache', 'textureUnitManager', 'webgl2', 'vrDisplay', 'useBackgroundImage', 'xrSupported']);\n macro.setGet(publicAPI, model, ['initialized', 'context', 'canvas', 'renderPasses', 'notifyStartCaptureImage', 'defaultToWebgl2', 'cursor', 'useOffScreen', // might want to make this not call modified as\n // we change the active framebuffer a lot. Or maybe\n // only mark modified if the size or depth\n // of the buffer has changed\n 'activeFramebuffer']);\n macro.setGetArray(publicAPI, model, ['size'], 2); // Object methods\n\n vtkOpenGLRenderWindow(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkOpenGLRenderWindow'); // ----------------------------------------------------------------------------\n// Register API specific RenderWindow implementation\n// ----------------------------------------------------------------------------\n\nregisterViewConstructor('WebGL', newInstance); // ----------------------------------------------------------------------------\n\nvar vtkRenderWindow = {\n newInstance: newInstance,\n extend: extend,\n pushMonitorGLContextCount: pushMonitorGLContextCount,\n popMonitorGLContextCount: popMonitorGLContextCount\n};\n\nexport { vtkRenderWindow as default, extend, newInstance, popMonitorGLContextCount, pushMonitorGLContextCount };\n","import { mat3, mat4 } from 'gl-matrix';\nimport { newInstance as newInstance$1, obj, setGet, get } from '../../macros.js';\nimport vtkViewNode from '../SceneGraph/ViewNode.js';\nimport { registerOverride } from './ViewNodeFactory.js';\n\n// vtkOpenGLActor methods\n// ----------------------------------------------------------------------------\n\nfunction vtkOpenGLActor(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkOpenGLActor'); // Builds myself.\n\n publicAPI.buildPass = function (prepass) {\n if (prepass) {\n model._openGLRenderWindow = publicAPI.getFirstAncestorOfType('vtkOpenGLRenderWindow');\n model.openGLRenderer = publicAPI.getFirstAncestorOfType('vtkOpenGLRenderer');\n model.context = model._openGLRenderWindow.getContext();\n publicAPI.prepareNodes();\n publicAPI.addMissingNodes(model.renderable.getTextures());\n publicAPI.addMissingNode(model.renderable.getMapper());\n publicAPI.removeUnusedNodes(); // we store textures and mapper\n\n model.ogltextures = null;\n model.activeTextures = null;\n\n for (var index = 0; index < model.children.length; index++) {\n var child = model.children[index];\n\n if (child.isA('vtkOpenGLTexture')) {\n if (!model.ogltextures) {\n model.ogltextures = [];\n }\n\n model.ogltextures.push(child);\n } else {\n model.oglmapper = child;\n }\n }\n }\n };\n\n publicAPI.traverseOpaqueZBufferPass = function (renderPass) {\n if (!model.renderable || !model.renderable.getNestedVisibility() || model.openGLRenderer.getSelector() && !model.renderable.getNestedPickable()) {\n return;\n }\n\n publicAPI.apply(renderPass, true);\n model.oglmapper.traverse(renderPass);\n publicAPI.apply(renderPass, false);\n }; // we draw textures, then mapper, then post pass textures\n\n\n publicAPI.traverseOpaquePass = function (renderPass) {\n if (!model.renderable || !model.renderable.getNestedVisibility() || !model.renderable.getIsOpaque() || model.openGLRenderer.getSelector() && !model.renderable.getNestedPickable()) {\n return;\n }\n\n publicAPI.apply(renderPass, true);\n model.oglmapper.traverse(renderPass);\n publicAPI.apply(renderPass, false);\n }; // we draw textures, then mapper, then post pass textures\n\n\n publicAPI.traverseTranslucentPass = function (renderPass) {\n if (!model.renderable || !model.renderable.getNestedVisibility() || model.renderable.getIsOpaque() || model.openGLRenderer.getSelector() && !model.renderable.getNestedPickable()) {\n return;\n }\n\n publicAPI.apply(renderPass, true);\n model.oglmapper.traverse(renderPass);\n publicAPI.apply(renderPass, false);\n };\n\n publicAPI.activateTextures = function () {\n // always traverse textures first, then mapper\n if (!model.ogltextures) {\n return;\n }\n\n model.activeTextures = [];\n\n for (var index = 0; index < model.ogltextures.length; index++) {\n var child = model.ogltextures[index];\n child.render();\n\n if (child.getHandle()) {\n model.activeTextures.push(child);\n }\n }\n };\n\n publicAPI.queryPass = function (prepass, renderPass) {\n if (prepass) {\n if (!model.renderable || !model.renderable.getVisibility()) {\n return;\n }\n\n if (model.renderable.getIsOpaque()) {\n renderPass.incrementOpaqueActorCount();\n } else {\n renderPass.incrementTranslucentActorCount();\n }\n }\n };\n\n publicAPI.opaqueZBufferPass = function (prepass, renderPass) {\n return publicAPI.opaquePass(prepass, renderPass);\n };\n\n publicAPI.opaquePass = function (prepass, renderPass) {\n if (prepass) {\n model.context.depthMask(true);\n publicAPI.activateTextures();\n } else if (model.activeTextures) {\n for (var index = 0; index < model.activeTextures.length; index++) {\n model.activeTextures[index].deactivate();\n }\n }\n }; // Renders myself\n\n\n publicAPI.translucentPass = function (prepass, renderPass) {\n if (prepass) {\n model.context.depthMask(false);\n publicAPI.activateTextures();\n } else if (model.activeTextures) {\n for (var index = 0; index < model.activeTextures.length; index++) {\n model.activeTextures[index].deactivate();\n }\n }\n };\n\n publicAPI.getKeyMatrices = function () {\n // has the actor changed?\n if (model.renderable.getMTime() > model.keyMatrixTime.getMTime()) {\n model.renderable.computeMatrix();\n mat4.copy(model.keyMatrices.mcwc, model.renderable.getMatrix());\n mat4.transpose(model.keyMatrices.mcwc, model.keyMatrices.mcwc);\n\n if (model.renderable.getIsIdentity()) {\n mat3.identity(model.keyMatrices.normalMatrix);\n } else {\n mat3.fromMat4(model.keyMatrices.normalMatrix, model.keyMatrices.mcwc);\n mat3.invert(model.keyMatrices.normalMatrix, model.keyMatrices.normalMatrix);\n mat3.transpose(model.keyMatrices.normalMatrix, model.keyMatrices.normalMatrix);\n }\n\n model.keyMatrixTime.modified();\n }\n\n return model.keyMatrices;\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n context: null,\n keyMatrixTime: null,\n keyMatrices: null,\n activeTextures: null\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Inheritance\n\n vtkViewNode.extend(publicAPI, model, initialValues);\n model.keyMatrixTime = {};\n obj(model.keyMatrixTime, {\n mtime: 0\n });\n model.keyMatrices = {\n normalMatrix: mat3.identity(new Float64Array(9)),\n mcwc: mat4.identity(new Float64Array(16))\n }; // Build VTK API\n\n setGet(publicAPI, model, ['context']);\n get(publicAPI, model, ['activeTextures']); // Object methods\n\n vtkOpenGLActor(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = newInstance$1(extend); // ----------------------------------------------------------------------------\n\nvar vtkActor = {\n newInstance: newInstance,\n extend: extend\n}; // Register ourself to OpenGL backend if imported\n\nregisterOverride('vtkActor', newInstance);\n\nexport { vtkActor as default, extend, newInstance };\n","import { newInstance as newInstance$1, setGet, get } from '../../macros.js';\nimport vtkViewNode from '../SceneGraph/ViewNode.js';\nimport { registerOverride } from './ViewNodeFactory.js';\n\n// vtkOpenGLActor methods\n// ----------------------------------------------------------------------------\n\nfunction vtkOpenGLActor2D(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkOpenGLActor2D'); // Builds myself.\n\n publicAPI.buildPass = function (prepass) {\n if (prepass) {\n if (!model.renderable) {\n return;\n }\n\n model._openGLRenderWindow = publicAPI.getFirstAncestorOfType('vtkOpenGLRenderWindow');\n model.openGLRenderer = publicAPI.getFirstAncestorOfType('vtkOpenGLRenderer');\n model.context = model._openGLRenderWindow.getContext();\n publicAPI.prepareNodes();\n publicAPI.addMissingNodes(model.renderable.getTextures());\n publicAPI.addMissingNode(model.renderable.getMapper());\n publicAPI.removeUnusedNodes(); // we store textures and mapper\n\n model.ogltextures = null;\n model.activeTextures = null;\n\n for (var index = 0; index < model.children.length; index++) {\n var child = model.children[index];\n\n if (child.isA('vtkOpenGLTexture')) {\n if (!model.ogltextures) {\n model.ogltextures = [];\n }\n\n model.ogltextures.push(child);\n } else {\n model.oglmapper = child;\n }\n }\n }\n };\n\n publicAPI.queryPass = function (prepass, renderPass) {\n if (prepass) {\n if (!model.renderable || !model.renderable.getVisibility()) {\n return;\n }\n\n renderPass.incrementOverlayActorCount();\n }\n }; // we draw textures, then mapper, then post pass textures\n\n\n publicAPI.traverseOpaquePass = function (renderPass) {\n if (!model.oglmapper || !model.renderable || !model.renderable.getNestedVisibility() || !model.renderable.getIsOpaque() || model.openGLRenderer.getSelector() && !model.renderable.getNestedPickable()) {\n return;\n }\n\n publicAPI.apply(renderPass, true);\n model.oglmapper.traverse(renderPass);\n publicAPI.apply(renderPass, false);\n }; // we draw textures, then mapper, then post pass textures\n\n\n publicAPI.traverseTranslucentPass = function (renderPass) {\n if (!model.oglmapper || !model.renderable || !model.renderable.getNestedVisibility() || model.renderable.getIsOpaque() || model.openGLRenderer.getSelector() && !model.renderable.getNestedPickable()) {\n return;\n }\n\n publicAPI.apply(renderPass, true);\n model.oglmapper.traverse(renderPass);\n publicAPI.apply(renderPass, false);\n };\n\n publicAPI.traverseOverlayPass = function (renderPass) {\n if (!model.oglmapper || !model.renderable || !model.renderable.getNestedVisibility() || model.openGLRenderer.getSelector() && !model.renderable.getNestedPickable) {\n return;\n }\n\n publicAPI.apply(renderPass, true);\n model.oglmapper.traverse(renderPass);\n publicAPI.apply(renderPass, false);\n };\n\n publicAPI.activateTextures = function () {\n // always traverse textures first, then mapper\n if (!model.ogltextures) {\n return;\n }\n\n model.activeTextures = [];\n\n for (var index = 0; index < model.ogltextures.length; index++) {\n var child = model.ogltextures[index];\n child.render();\n\n if (child.getHandle()) {\n model.activeTextures.push(child);\n }\n }\n }; // Renders myself\n\n\n publicAPI.opaquePass = function (prepass, renderPass) {\n if (prepass) {\n model.context.depthMask(true);\n publicAPI.activateTextures();\n } else if (model.activeTextures) {\n // deactivate textures\n for (var index = 0; index < model.activeTextures.length; index++) {\n model.activeTextures[index].deactivate();\n }\n }\n }; // Renders myself\n\n\n publicAPI.translucentPass = function (prepass, renderPass) {\n if (prepass) {\n model.context.depthMask(false);\n publicAPI.activateTextures();\n } else if (model.activeTextures) {\n for (var index = 0; index < model.activeTextures.length; index++) {\n model.activeTextures[index].deactivate();\n }\n }\n }; // Renders myself\n\n\n publicAPI.overlayPass = function (prepass, renderPass) {\n if (prepass) {\n model.context.depthMask(true);\n publicAPI.activateTextures();\n } else if (model.activeTextures) {\n // deactivate textures\n for (var index = 0; index < model.activeTextures.length; index++) {\n model.activeTextures[index].deactivate();\n }\n }\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n context: null,\n activeTextures: null\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Inheritance\n\n vtkViewNode.extend(publicAPI, model, initialValues); // Build VTK API\n\n setGet(publicAPI, model, ['context']);\n get(publicAPI, model, ['activeTextures']); // Object methods\n\n vtkOpenGLActor2D(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = newInstance$1(extend); // ----------------------------------------------------------------------------\n\nvar vtkActor2D = {\n newInstance: newInstance,\n extend: extend\n}; // Register ourself to OpenGL backend if imported\n\nregisterOverride('vtkActor2D', newInstance);\n\nexport { vtkActor2D as default, extend, newInstance };\n","import vtkAbstractMapper from './AbstractMapper.js';\nimport { u as uninitializeBounds } from '../../Common/Core/Math/index.js';\n\n// vtkAbstractMapper methods\n// ----------------------------------------------------------------------------\n\nfunction vtkAbstractMapper3D(publicAPI, model) {\n publicAPI.getBounds = function () {\n return 0;\n };\n\n publicAPI.getBounds = function (bounds) {\n publicAPI.getBounds();\n\n for (var i = 0; i < 6; i++) {\n bounds[i] = model.bounds[i];\n }\n };\n\n publicAPI.getCenter = function () {\n publicAPI.getBounds();\n\n for (var i = 0; i < 3; i++) {\n model.center[i] = (model.bounds[2 * i + 1] + model.bounds[2 * i]) / 2.0;\n }\n\n return model.center.slice();\n };\n\n publicAPI.getLength = function () {\n var diff = 0.0;\n var l = 0.0;\n publicAPI.getBounds();\n\n for (var i = 0; i < 3; i++) {\n diff = model.bounds[2 * i + 1] - model.bounds[2 * i];\n l += diff * diff;\n }\n\n return Math.sqrt(l);\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n bounds: [1, -1, 1, -1, 1, -1],\n center: [0, 0, 0]\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Inheritance\n\n vtkAbstractMapper.extend(publicAPI, model, initialValues);\n\n if (!model.bounds) {\n uninitializeBounds(model.bounds);\n }\n\n if (!model.center) {\n model.center = [0.0, 0.0, 0.0];\n }\n\n vtkAbstractMapper3D(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar vtkAbstractMapper3D$1 = {\n extend: extend\n};\n\nexport { vtkAbstractMapper3D$1 as default, extend };\n","import macro from '../../macros.js';\nimport { i as isNan, h as hsv2rgb } from './Math/index.js';\nimport vtkScalarsToColors from './ScalarsToColors.js';\nimport { ScalarMappingTarget } from './ScalarsToColors/Constants.js';\nimport { VtkDataTypes } from './DataArray/Constants.js';\n\nvar vtkErrorMacro = macro.vtkErrorMacro; // ----------------------------------------------------------------------------\n// Global methods\n// ----------------------------------------------------------------------------\n// Add module-level functions or api that you want to expose statically via\n// the next section...\n// ----------------------------------------------------------------------------\n// Static API\n// ----------------------------------------------------------------------------\n\nvar BELOW_RANGE_COLOR_INDEX = 0;\nvar ABOVE_RANGE_COLOR_INDEX = 1;\nvar NAN_COLOR_INDEX = 2; // ----------------------------------------------------------------------------\n// vtkMyClass methods\n// ----------------------------------------------------------------------------\n\nfunction vtkLookupTable(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkLookupTable'); //----------------------------------------------------------------------------\n // Description:\n // Return true if all of the values defining the mapping have an opacity\n // equal to 1. Default implementation return true.\n\n publicAPI.isOpaque = function () {\n if (model.opaqueFlagBuildTime.getMTime() < publicAPI.getMTime()) {\n var opaque = true;\n\n if (model.nanColor[3] < 1.0) {\n opaque = 0;\n }\n\n if (model.useBelowRangeColor && model.belowRangeColor[3] < 1.0) {\n opaque = 0;\n }\n\n if (model.useAboveRangeColor && model.aboveRangeColor[3] < 1.0) {\n opaque = 0;\n }\n\n for (var i = 3; i < model.table.length && opaque; i += 4) {\n if (model.table[i] < 255) {\n opaque = false;\n }\n }\n\n model.opaqueFlag = opaque;\n model.opaqueFlagBuildTime.modified();\n }\n\n return model.opaqueFlag;\n };\n\n publicAPI.usingLogScale = function () {\n return false;\n }; //----------------------------------------------------------------------------\n\n\n publicAPI.getNumberOfAvailableColors = function () {\n return model.table.length;\n }; //----------------------------------------------------------------------------\n // Apply shift/scale to the scalar value v and return the index.\n\n\n publicAPI.linearIndexLookup = function (v, p) {\n var dIndex = 0;\n\n if (v < p.range[0]) {\n dIndex = p.maxIndex + BELOW_RANGE_COLOR_INDEX + 1.5;\n } else if (v > p.range[1]) {\n dIndex = p.maxIndex + ABOVE_RANGE_COLOR_INDEX + 1.5;\n } else {\n dIndex = (v + p.shift) * p.scale; // This conditional is needed because when v is very close to\n // p.Range[1], it may map above p.MaxIndex in the linear mapping\n // above.\n\n dIndex = dIndex < p.maxIndex ? dIndex : p.maxIndex;\n }\n\n return Math.floor(dIndex);\n };\n\n publicAPI.linearLookup = function (v, table, p) {\n var index = 0;\n\n if (isNan(v)) {\n index = Math.floor(p.maxIndex + 1.5 + NAN_COLOR_INDEX);\n } else {\n index = publicAPI.linearIndexLookup(v, p);\n }\n\n var offset = 4 * index;\n return [table[offset], table[offset + 1], table[offset + 2], table[offset + 3]];\n };\n\n publicAPI.indexedLookupFunction = function (v, table, p) {\n var index = publicAPI.getAnnotatedValueIndexInternal(v);\n\n if (index === -1) {\n index = model.numberOfColors + NAN_COLOR_INDEX;\n }\n\n var offset = 4 * index;\n return [table[offset], table[offset + 1], table[offset + 2], table[offset + 3]];\n }; //----------------------------------------------------------------------------\n\n\n publicAPI.lookupShiftAndScale = function (range, p) {\n p.shift = -range[0];\n p.scale = Number.MAX_VALUE;\n\n if (range[1] > range[0]) {\n p.scale = (p.maxIndex + 1) / (range[1] - range[0]);\n }\n }; // Public API methods\n\n\n publicAPI.mapScalarsThroughTable = function (input, output, outFormat, inputOffset) {\n var lookupFunc = publicAPI.linearLookup;\n\n if (model.indexedLookup) {\n lookupFunc = publicAPI.indexedLookupFunction;\n }\n\n var trange = publicAPI.getMappingRange();\n var p = {\n maxIndex: publicAPI.getNumberOfColors() - 1,\n range: trange,\n shift: 0.0,\n scale: 0.0\n };\n publicAPI.lookupShiftAndScale(trange, p);\n var alpha = publicAPI.getAlpha();\n var length = input.getNumberOfTuples();\n var inIncr = input.getNumberOfComponents();\n var outputV = output.getData();\n var inputV = input.getData();\n\n if (alpha >= 1.0) {\n if (outFormat === ScalarMappingTarget.RGBA) {\n for (var i = 0; i < length; i++) {\n var cptr = lookupFunc(inputV[i * inIncr + inputOffset], model.table, p);\n outputV[i * 4] = cptr[0];\n outputV[i * 4 + 1] = cptr[1];\n outputV[i * 4 + 2] = cptr[2];\n outputV[i * 4 + 3] = cptr[3];\n }\n }\n } else {\n /* eslint-disable no-lonely-if */\n if (outFormat === ScalarMappingTarget.RGBA) {\n for (var _i = 0; _i < length; _i++) {\n var _cptr = lookupFunc(inputV[_i * inIncr + inputOffset], model.table, p);\n\n outputV[_i * 4] = _cptr[0];\n outputV[_i * 4 + 1] = _cptr[1];\n outputV[_i * 4 + 2] = _cptr[2];\n outputV[_i * 4 + 3] = Math.floor(_cptr[3] * alpha + 0.5);\n }\n }\n } // alpha blending\n\n };\n\n publicAPI.forceBuild = function () {\n var hinc = 0.0;\n var sinc = 0.0;\n var vinc = 0.0;\n var ainc = 0.0;\n var maxIndex = model.numberOfColors - 1;\n\n if (maxIndex) {\n hinc = (model.hueRange[1] - model.hueRange[0]) / maxIndex;\n sinc = (model.saturationRange[1] - model.saturationRange[0]) / maxIndex;\n vinc = (model.valueRange[1] - model.valueRange[0]) / maxIndex;\n ainc = (model.alphaRange[1] - model.alphaRange[0]) / maxIndex;\n }\n\n var hsv = [];\n var rgba = [];\n\n for (var i = 0; i <= maxIndex; i++) {\n hsv[0] = model.hueRange[0] + i * hinc;\n hsv[1] = model.saturationRange[0] + i * sinc;\n hsv[2] = model.valueRange[0] + i * vinc;\n hsv2rgb(hsv, rgba);\n rgba[3] = model.alphaRange[0] + i * ainc; // case VTK_RAMP_LINEAR:\n\n model.table[i * 4] = rgba[0] * 255.0 + 0.5;\n model.table[i * 4 + 1] = rgba[1] * 255.0 + 0.5;\n model.table[i * 4 + 2] = rgba[2] * 255.0 + 0.5;\n model.table[i * 4 + 3] = rgba[3] * 255.0 + 0.5;\n }\n\n publicAPI.buildSpecialColors();\n model.buildTime.modified();\n };\n\n publicAPI.setTable = function (table) {\n if (table.getNumberOfComponents() !== 4) {\n vtkErrorMacro('Expected 4 components for RGBA colors');\n return;\n }\n\n if (table.getDataType() !== VtkDataTypes.UNSIGNED_CHAR) {\n vtkErrorMacro('Expected unsigned char values for RGBA colors');\n return;\n }\n\n model.numberOfColors = table.getNumberOfTuples();\n var data = table.getData();\n\n for (var i = 0; i < data.length; i++) {\n model.table[i] = data[i];\n }\n\n publicAPI.buildSpecialColors();\n model.insertTime.modified();\n publicAPI.modified();\n };\n\n publicAPI.buildSpecialColors = function () {\n // Add \"special\" colors (NaN, below range, above range) to table here.\n var numberOfColors = model.numberOfColors;\n var tptr = model.table;\n var base = (numberOfColors + BELOW_RANGE_COLOR_INDEX) * 4; // Below range color\n\n if (model.useBelowRangeColor || numberOfColors === 0) {\n tptr[base] = model.belowRangeColor[0] * 255.0 + 0.5;\n tptr[base + 1] = model.belowRangeColor[1] * 255.0 + 0.5;\n tptr[base + 2] = model.belowRangeColor[2] * 255.0 + 0.5;\n tptr[base + 3] = model.belowRangeColor[3] * 255.0 + 0.5;\n } else {\n // Duplicate the first color in the table.\n tptr[base] = tptr[0];\n tptr[base + 1] = tptr[1];\n tptr[base + 2] = tptr[2];\n tptr[base + 3] = tptr[3];\n } // Above range color\n\n\n base = (numberOfColors + ABOVE_RANGE_COLOR_INDEX) * 4;\n\n if (model.useAboveRangeColor || numberOfColors === 0) {\n tptr[base] = model.aboveRangeColor[0] * 255.0 + 0.5;\n tptr[base + 1] = model.aboveRangeColor[1] * 255.0 + 0.5;\n tptr[base + 2] = model.aboveRangeColor[2] * 255.0 + 0.5;\n tptr[base + 3] = model.aboveRangeColor[3] * 255.0 + 0.5;\n } else {\n // Duplicate the last color in the table.\n tptr[base] = tptr[4 * (numberOfColors - 1) + 0];\n tptr[base + 1] = tptr[4 * (numberOfColors - 1) + 1];\n tptr[base + 2] = tptr[4 * (numberOfColors - 1) + 2];\n tptr[base + 3] = tptr[4 * (numberOfColors - 1) + 3];\n } // Always use NanColor\n\n\n base = (numberOfColors + NAN_COLOR_INDEX) * 4;\n tptr[base] = model.nanColor[0] * 255.0 + 0.5;\n tptr[base + 1] = model.nanColor[1] * 255.0 + 0.5;\n tptr[base + 2] = model.nanColor[2] * 255.0 + 0.5;\n tptr[base + 3] = model.nanColor[3] * 255.0 + 0.5;\n };\n\n publicAPI.build = function () {\n if (model.table.length < 1 || publicAPI.getMTime() > model.buildTime.getMTime() && model.insertTime.getMTime() <= model.buildTime.getMTime()) {\n publicAPI.forceBuild();\n }\n };\n\n if (model.table.length > 0) {\n // ensure insertTime is more recently modified than buildTime if\n // a table is provided via the constructor\n model.insertTime.modified();\n }\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n numberOfColors: 256,\n // table: null,\n hueRange: [0.0, 0.66667],\n saturationRange: [1.0, 1.0],\n valueRange: [1.0, 1.0],\n alphaRange: [1.0, 1.0],\n nanColor: [0.5, 0.0, 0.0, 1.0],\n belowRangeColor: [0.0, 0.0, 0.0, 1.0],\n aboveRangeColor: [1.0, 1.0, 1.0, 1.0],\n useAboveRangeColor: false,\n useBelowRangeColor: false,\n alpha: 1.0 // buildTime: null,\n // opaqueFlagBuildTime: null,\n // insertTime: null,\n\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Inheritance\n\n vtkScalarsToColors.extend(publicAPI, model, initialValues); // Internal objects initialization\n\n if (!model.table) {\n model.table = [];\n }\n\n model.buildTime = {};\n macro.obj(model.buildTime);\n model.opaqueFlagBuildTime = {};\n macro.obj(model.opaqueFlagBuildTime, {\n mtime: 0\n });\n model.insertTime = {};\n macro.obj(model.insertTime, {\n mtime: 0\n }); // Create get-only macros\n\n macro.get(publicAPI, model, ['buildTime']); // Create get-set macros\n\n macro.setGet(publicAPI, model, ['numberOfColors', 'useAboveRangeColor', 'useBelowRangeColor']); // Create set macros for array (needs to know size)\n\n macro.setArray(publicAPI, model, ['alphaRange', 'hueRange', 'saturationRange', 'valueRange'], 2);\n macro.setArray(publicAPI, model, ['nanColor', 'belowRangeColor', 'aboveRangeColor'], 4); // Create get macros for array\n\n macro.getArray(publicAPI, model, ['hueRange', 'saturationRange', 'valueRange', 'alphaRange', 'nanColor', 'belowRangeColor', 'aboveRangeColor']); // For more macro methods, see \"Sources/macros.js\"\n // Object specific methods\n\n vtkLookupTable(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkLookupTable'); // ----------------------------------------------------------------------------\n\nvar vtkLookupTable$1 = {\n newInstance: newInstance,\n extend: extend\n};\n\nexport { vtkLookupTable$1 as default, extend, newInstance };\n","import _defineProperty from '@babel/runtime/helpers/defineProperty';\nimport macro from '../../macros.js';\nimport vtkAbstractMapper3D from './AbstractMapper3D.js';\nimport vtkDataArray from '../../Common/Core/DataArray.js';\nimport vtkImageData from '../../Common/DataModel/ImageData.js';\nimport vtkLookupTable from '../../Common/Core/LookupTable.js';\nimport { O as createUninitializedBounds, i as isNan } from '../../Common/Core/Math/index.js';\nimport vtkScalarsToColors from '../../Common/Core/ScalarsToColors/Constants.js';\nimport CoincidentTopologyHelper from './Mapper/CoincidentTopologyHelper.js';\nimport Constants from './Mapper/Constants.js';\nimport vtkDataSet from '../../Common/DataModel/DataSet.js';\nimport { PassTypes } from '../OpenGL/HardwareSelector/Constants.js';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nvar FieldAssociations = vtkDataSet.FieldAssociations;\nvar staticOffsetAPI = CoincidentTopologyHelper.staticOffsetAPI,\n otherStaticMethods = CoincidentTopologyHelper.otherStaticMethods;\nvar ColorMode = Constants.ColorMode,\n ScalarMode = Constants.ScalarMode,\n GetArray = Constants.GetArray;\nvar VectorMode = vtkScalarsToColors.VectorMode;\nvar VtkDataTypes = vtkDataArray.VtkDataTypes; // ----------------------------------------------------------------------------\n\nfunction notImplemented(method) {\n return function () {\n return macro.vtkErrorMacro(\"vtkMapper::\".concat(method, \" - NOT IMPLEMENTED\"));\n };\n} // ----------------------------------------------------------------------------\n// vtkMapper methods\n// ----------------------------------------------------------------------------\n\n\nfunction vtkMapper(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkMapper');\n\n publicAPI.getBounds = function () {\n var input = publicAPI.getInputData();\n\n if (!input) {\n model.bounds = createUninitializedBounds();\n } else {\n if (!model.static) {\n publicAPI.update();\n }\n\n model.bounds = input.getBounds();\n }\n\n return model.bounds;\n };\n\n publicAPI.setForceCompileOnly = function (v) {\n model.forceCompileOnly = v; // make sure we do NOT call modified()\n };\n\n publicAPI.createDefaultLookupTable = function () {\n model.lookupTable = vtkLookupTable.newInstance();\n };\n\n publicAPI.getColorModeAsString = function () {\n return macro.enumToString(ColorMode, model.colorMode);\n };\n\n publicAPI.setColorModeToDefault = function () {\n return publicAPI.setColorMode(0);\n };\n\n publicAPI.setColorModeToMapScalars = function () {\n return publicAPI.setColorMode(1);\n };\n\n publicAPI.setColorModeToDirectScalars = function () {\n return publicAPI.setColorMode(2);\n };\n\n publicAPI.getScalarModeAsString = function () {\n return macro.enumToString(ScalarMode, model.scalarMode);\n };\n\n publicAPI.setScalarModeToDefault = function () {\n return publicAPI.setScalarMode(0);\n };\n\n publicAPI.setScalarModeToUsePointData = function () {\n return publicAPI.setScalarMode(1);\n };\n\n publicAPI.setScalarModeToUseCellData = function () {\n return publicAPI.setScalarMode(2);\n };\n\n publicAPI.setScalarModeToUsePointFieldData = function () {\n return publicAPI.setScalarMode(3);\n };\n\n publicAPI.setScalarModeToUseCellFieldData = function () {\n return publicAPI.setScalarMode(4);\n };\n\n publicAPI.setScalarModeToUseFieldData = function () {\n return publicAPI.setScalarMode(5);\n };\n\n publicAPI.getAbstractScalars = function (input, scalarMode, arrayAccessMode, arrayId, arrayName) {\n // make sure we have an input\n if (!input || !model.scalarVisibility) {\n return {\n scalars: null,\n cellFLag: false\n };\n }\n\n var scalars = null;\n var cellFlag = false; // get and scalar data according to scalar mode\n\n if (scalarMode === ScalarMode.DEFAULT) {\n scalars = input.getPointData().getScalars();\n\n if (!scalars) {\n scalars = input.getCellData().getScalars();\n cellFlag = true;\n }\n } else if (scalarMode === ScalarMode.USE_POINT_DATA) {\n scalars = input.getPointData().getScalars();\n } else if (scalarMode === ScalarMode.USE_CELL_DATA) {\n scalars = input.getCellData().getScalars();\n cellFlag = true;\n } else if (scalarMode === ScalarMode.USE_POINT_FIELD_DATA) {\n var pd = input.getPointData();\n\n if (arrayAccessMode === GetArray.BY_ID) {\n scalars = pd.getArrayByIndex(arrayId);\n } else {\n scalars = pd.getArrayByName(arrayName);\n }\n } else if (scalarMode === ScalarMode.USE_CELL_FIELD_DATA) {\n var cd = input.getCellData();\n cellFlag = true;\n\n if (arrayAccessMode === GetArray.BY_ID) {\n scalars = cd.getArrayByIndex(arrayId);\n } else {\n scalars = cd.getArrayByName(arrayName);\n }\n } else if (scalarMode === ScalarMode.USE_FIELD_DATA) {\n var fd = input.getFieldData();\n\n if (arrayAccessMode === GetArray.BY_ID) {\n scalars = fd.getArrayByIndex(arrayId);\n } else {\n scalars = fd.getArrayByName(arrayName);\n }\n }\n\n return {\n scalars: scalars,\n cellFlag: cellFlag\n };\n };\n\n publicAPI.mapScalars = function (input, alpha) {\n var scalars = publicAPI.getAbstractScalars(input, model.scalarMode, model.arrayAccessMode, model.arrayId, model.colorByArrayName).scalars;\n\n if (!scalars) {\n model.colorCoordinates = null;\n model.colorTextureMap = null;\n model.colorMapColors = null;\n return;\n } // we want to only recompute when something has changed\n\n\n var toString = \"\".concat(publicAPI.getMTime()).concat(scalars.getMTime()).concat(alpha);\n if (model.colorBuildString === toString) return;\n\n if (!model.useLookupTableScalarRange) {\n publicAPI.getLookupTable().setRange(model.scalarRange[0], model.scalarRange[1]);\n } // Decide between texture color or vertex color.\n // Cell data always uses vertex color.\n // Only point data can use both texture and vertex coloring.\n\n\n if (publicAPI.canUseTextureMapForColoring(input)) {\n publicAPI.mapScalarsToTexture(scalars, alpha);\n } else {\n model.colorCoordinates = null;\n model.colorTextureMap = null;\n var lut = publicAPI.getLookupTable();\n\n if (lut) {\n // Ensure that the lookup table is built\n lut.build();\n model.colorMapColors = lut.mapScalars(scalars, model.colorMode, model.fieldDataTupleId);\n }\n }\n\n model.colorBuildString = \"\".concat(publicAPI.getMTime()).concat(scalars.getMTime()).concat(alpha);\n }; //-----------------------------------------------------------------------------\n\n\n publicAPI.scalarToTextureCoordinate = function (scalarValue, // Input scalar\n rangeMin, // range[0]\n invRangeWidth) {\n // 1/(range[1]-range[0])\n var texCoordS = 0.5; // Scalar value is arbitrary when NaN\n\n var texCoordT = 1.0; // 1.0 in t coordinate means NaN\n\n if (!isNan(scalarValue)) {\n // 0.0 in t coordinate means not NaN. So why am I setting it to 0.49?\n // Because when you are mapping scalars and you have a NaN adjacent to\n // anything else, the interpolation everywhere should be NaN. Thus, I\n // want the NaN color everywhere except right on the non-NaN neighbors.\n // To simulate this, I set the t coord for the real numbers close to\n // the threshold so that the interpolation almost immediately looks up\n // the NaN value.\n texCoordT = 0.49;\n texCoordS = (scalarValue - rangeMin) * invRangeWidth; // Some implementations apparently don't handle relatively large\n // numbers (compared to the range [0.0, 1.0]) very well. In fact,\n // values above 1122.0f appear to cause texture wrap-around on\n // some systems even when edge clamping is enabled. Why 1122.0f? I\n // don't know. For safety, we'll clamp at +/- 1000. This will\n // result in incorrect images when the texture value should be\n // above or below 1000, but I don't have a better solution.\n\n if (texCoordS > 1000.0) {\n texCoordS = 1000.0;\n } else if (texCoordS < -1000.0) {\n texCoordS = -1000.0;\n }\n }\n\n return {\n texCoordS: texCoordS,\n texCoordT: texCoordT\n };\n }; //-----------------------------------------------------------------------------\n\n\n publicAPI.createColorTextureCoordinates = function (input, output, numScalars, numComps, component, range, tableRange, tableNumberOfColors, useLogScale) {\n // We have to change the range used for computing texture\n // coordinates slightly to accommodate the special above- and\n // below-range colors that are the first and last texels,\n // respectively.\n var scalarTexelWidth = (range[1] - range[0]) / tableNumberOfColors;\n var paddedRange = [];\n paddedRange[0] = range[0] - scalarTexelWidth;\n paddedRange[1] = range[1] + scalarTexelWidth;\n var invRangeWidth = 1.0 / (paddedRange[1] - paddedRange[0]);\n var outputV = output.getData();\n var inputV = input.getData();\n var count = 0;\n var outputCount = 0;\n\n if (component < 0 || component >= numComps) {\n for (var scalarIdx = 0; scalarIdx < numScalars; ++scalarIdx) {\n var sum = 0;\n\n for (var compIdx = 0; compIdx < numComps; ++compIdx) {\n sum += inputV[count] * inputV[count];\n count++;\n }\n\n var magnitude = Math.sqrt(sum);\n\n if (useLogScale) {\n magnitude = vtkLookupTable.applyLogScale(magnitude, tableRange, range);\n }\n\n var outputs = publicAPI.scalarToTextureCoordinate(magnitude, paddedRange[0], invRangeWidth);\n outputV[outputCount] = outputs.texCoordS;\n outputV[outputCount + 1] = outputs.texCoordT;\n outputCount += 2;\n }\n } else {\n count += component;\n\n for (var _scalarIdx = 0; _scalarIdx < numScalars; ++_scalarIdx) {\n var inputValue = inputV[count];\n\n if (useLogScale) {\n inputValue = vtkLookupTable.applyLogScale(inputValue, tableRange, range);\n }\n\n var _outputs = publicAPI.scalarToTextureCoordinate(inputValue, paddedRange[0], invRangeWidth);\n\n outputV[outputCount] = _outputs.texCoordS;\n outputV[outputCount + 1] = _outputs.texCoordT;\n outputCount += 2;\n count += numComps;\n }\n }\n };\n\n publicAPI.mapScalarsToTexture = function (scalars, alpha) {\n var range = model.lookupTable.getRange();\n var useLogScale = model.lookupTable.usingLogScale();\n\n if (useLogScale) {\n // convert range to log.\n vtkLookupTable.getLogRange(range, range);\n }\n\n var origAlpha = model.lookupTable.getAlpha(); // Get rid of vertex color array. Only texture or vertex coloring\n // can be active at one time. The existence of the array is the\n // signal to use that technique.\n\n model.colorMapColors = null; // If the lookup table has changed, then recreate the color texture map.\n // Set a new lookup table changes this->MTime.\n\n if (model.colorTextureMap == null || publicAPI.getMTime() > model.colorTextureMap.getMTime() || model.lookupTable.getMTime() > model.colorTextureMap.getMTime() || model.lookupTable.getAlpha() !== alpha) {\n model.lookupTable.setAlpha(alpha);\n model.colorTextureMap = null; // Get the texture map from the lookup table.\n // Create a dummy ramp of scalars.\n // In the future, we could extend vtkScalarsToColors.\n\n model.lookupTable.build();\n var numberOfColors = model.lookupTable.getNumberOfAvailableColors();\n\n if (numberOfColors > 4094) {\n numberOfColors = 4094;\n }\n\n numberOfColors += 2;\n var k = (range[1] - range[0]) / (numberOfColors - 1 - 2);\n var newArray = new Float64Array(numberOfColors * 2);\n\n for (var i = 0; i < numberOfColors; ++i) {\n newArray[i] = range[0] + i * k - k; // minus k to start at below range color\n\n if (useLogScale) {\n newArray[i] = Math.pow(10.0, newArray[i]);\n }\n } // Dimension on NaN.\n\n\n for (var _i = 0; _i < numberOfColors; ++_i) {\n newArray[_i + numberOfColors] = NaN;\n }\n\n model.colorTextureMap = vtkImageData.newInstance();\n model.colorTextureMap.setExtent(0, numberOfColors - 1, 0, 1, 0, 0);\n var tmp = vtkDataArray.newInstance({\n numberOfComponents: 1,\n values: newArray\n });\n model.colorTextureMap.getPointData().setScalars(model.lookupTable.mapScalars(tmp, model.colorMode, 0));\n model.lookupTable.setAlpha(origAlpha);\n } // Create new coordinates if necessary.\n // Need to compare lookup table in case the range has changed.\n\n\n if (!model.colorCoordinates || publicAPI.getMTime() > model.colorCoordinates.getMTime() || publicAPI.getInputData(0).getMTime() > model.colorCoordinates.getMTime() || model.lookupTable.getMTime() > model.colorCoordinates.getMTime()) {\n // Get rid of old colors\n model.colorCoordinates = null; // Now create the color texture coordinates.\n\n var numComps = scalars.getNumberOfComponents();\n var num = scalars.getNumberOfTuples(); // const fArray = new FloatArray(num * 2);\n\n model.colorCoordinates = vtkDataArray.newInstance({\n numberOfComponents: 2,\n values: new Float32Array(num * 2)\n });\n var scalarComponent = model.lookupTable.getVectorComponent(); // Although I like the feature of applying magnitude to single component\n // scalars, it is not how the old MapScalars for vertex coloring works.\n\n if (model.lookupTable.getVectorMode() === VectorMode.MAGNITUDE && scalars.getNumberOfComponents() > 1) {\n scalarComponent = -1;\n }\n\n publicAPI.createColorTextureCoordinates(scalars, model.colorCoordinates, num, numComps, scalarComponent, range, model.lookupTable.getRange(), model.colorTextureMap.getPointData().getScalars().getNumberOfTuples() / 2 - 2, useLogScale);\n }\n };\n\n publicAPI.getIsOpaque = function () {\n var lut = publicAPI.getLookupTable();\n\n if (lut) {\n // Ensure that the lookup table is built\n lut.build();\n return lut.isOpaque();\n }\n\n return true;\n };\n\n publicAPI.canUseTextureMapForColoring = function (input) {\n if (!model.interpolateScalarsBeforeMapping) {\n return false; // user doesn't want us to use texture maps at all.\n } // index color does not use textures\n\n\n if (model.lookupTable && model.lookupTable.getIndexedLookup()) {\n return false;\n }\n\n var gasResult = publicAPI.getAbstractScalars(input, model.scalarMode, model.arrayAccessMode, model.arrayId, model.colorByArrayName);\n var scalars = gasResult.scalars;\n\n if (!scalars) {\n // no scalars on this dataset, we don't care if texture is used at all.\n return false;\n }\n\n if (gasResult.cellFlag) {\n return false; // cell data colors, don't use textures.\n }\n\n if (model.colorMode === ColorMode.DEFAULT && scalars.getDataType() === VtkDataTypes.UNSIGNED_CHAR || model.colorMode === ColorMode.DIRECT_SCALARS) {\n // Don't use texture is direct coloring using RGB unsigned chars is\n // requested.\n return false;\n }\n\n return true;\n };\n\n publicAPI.clearColorArrays = function () {\n model.colorMapColors = null;\n model.colorCoordinates = null;\n model.colorTextureMap = null;\n };\n\n publicAPI.getLookupTable = function () {\n if (!model.lookupTable) {\n publicAPI.createDefaultLookupTable();\n }\n\n return model.lookupTable;\n };\n\n publicAPI.getMTime = function () {\n var mt = model.mtime;\n\n if (model.lookupTable !== null) {\n var time = model.lookupTable.getMTime();\n mt = time > mt ? time : mt;\n }\n\n return mt;\n };\n\n publicAPI.getPrimitiveCount = function () {\n var input = publicAPI.getInputData();\n var pcount = {\n points: input.getPoints().getNumberOfValues() / 3,\n verts: input.getVerts().getNumberOfValues() - input.getVerts().getNumberOfCells(),\n lines: input.getLines().getNumberOfValues() - 2 * input.getLines().getNumberOfCells(),\n triangles: input.getPolys().getNumberOfValues() - 3 * input.getPolys().getNumberOfCells()\n };\n return pcount;\n };\n\n publicAPI.acquireInvertibleLookupTable = notImplemented('AcquireInvertibleLookupTable');\n publicAPI.valueToColor = notImplemented('ValueToColor');\n publicAPI.colorToValue = notImplemented('ColorToValue');\n publicAPI.useInvertibleColorFor = notImplemented('UseInvertibleColorFor');\n publicAPI.clearInvertibleColor = notImplemented('ClearInvertibleColor');\n\n publicAPI.processSelectorPixelBuffers = function (selector, pixelOffsets) {\n /* eslint-disable no-bitwise */\n if (!selector || !model.selectionWebGLIdsToVTKIds || !model.populateSelectionSettings) {\n return;\n }\n\n var rawLowData = selector.getRawPixelBuffer(PassTypes.ID_LOW24);\n var rawHighData = selector.getRawPixelBuffer(PassTypes.ID_HIGH24);\n var currentPass = selector.getCurrentPass();\n var fieldAssociation = selector.getFieldAssociation();\n var idMap = null;\n\n if (fieldAssociation === FieldAssociations.FIELD_ASSOCIATION_POINTS) {\n idMap = model.selectionWebGLIdsToVTKIds.points;\n } else if (fieldAssociation === FieldAssociations.FIELD_ASSOCIATION_CELLS) {\n idMap = model.selectionWebGLIdsToVTKIds.cells;\n }\n\n if (!idMap) {\n return;\n }\n\n pixelOffsets.forEach(function (pos) {\n if (currentPass === PassTypes.ID_LOW24) {\n var inValue = 0;\n\n if (rawHighData) {\n inValue += rawHighData[pos];\n inValue *= 256;\n }\n\n inValue += rawLowData[pos + 2];\n inValue *= 256;\n inValue += rawLowData[pos + 1];\n inValue *= 256;\n inValue += rawLowData[pos];\n var outValue = idMap[inValue];\n var lowData = selector.getPixelBuffer(PassTypes.ID_LOW24);\n lowData[pos] = outValue & 0xff;\n lowData[pos + 1] = (outValue & 0xff00) >> 8;\n lowData[pos + 2] = (outValue & 0xff0000) >> 16;\n } else if (currentPass === PassTypes.ID_HIGH24 && rawHighData) {\n var _inValue = 0;\n _inValue += rawHighData[pos];\n _inValue *= 256;\n _inValue += rawLowData[pos];\n _inValue *= 256;\n _inValue += rawLowData[pos + 1];\n _inValue *= 256;\n _inValue += rawLowData[pos + 2];\n var _outValue = idMap[_inValue];\n var highData = selector.getPixelBuffer(PassTypes.ID_HIGH24);\n highData[pos] = (_outValue & 0xff000000) >> 24;\n }\n });\n /* eslint-enable no-bitwise */\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n colorMapColors: null,\n // Same as this->Colors\n static: false,\n lookupTable: null,\n scalarVisibility: true,\n scalarRange: [0, 1],\n useLookupTableScalarRange: false,\n colorMode: 0,\n scalarMode: 0,\n arrayAccessMode: 1,\n // By_NAME\n renderTime: 0,\n colorByArrayName: null,\n fieldDataTupleId: -1,\n populateSelectionSettings: true,\n selectionWebGLIdsToVTKIds: null,\n interpolateScalarsBeforeMapping: false,\n colorCoordinates: null,\n colorTextureMap: null,\n forceCompileOnly: 0,\n useInvertibleColors: false,\n invertibleScalars: null,\n viewSpecificProperties: null,\n customShaderAttributes: []\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Inheritance\n\n vtkAbstractMapper3D.extend(publicAPI, model, initialValues);\n macro.get(publicAPI, model, ['colorCoordinates', 'colorMapColors', 'colorTextureMap']);\n macro.setGet(publicAPI, model, ['colorByArrayName', 'arrayAccessMode', 'colorMode', 'fieldDataTupleId', 'interpolateScalarsBeforeMapping', 'lookupTable', 'populateSelectionSettings', 'renderTime', 'scalarMode', 'scalarVisibility', 'selectionWebGLIdsToVTKIds', 'static', 'useLookupTableScalarRange', 'viewSpecificProperties', 'customShaderAttributes' // point data array names that will be transferred to the VBO\n ]);\n macro.setGetArray(publicAPI, model, ['scalarRange'], 2);\n\n if (!model.viewSpecificProperties) {\n model.viewSpecificProperties = {};\n }\n\n CoincidentTopologyHelper.implementCoincidentTopologyMethods(publicAPI, model); // Object methods\n\n vtkMapper(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkMapper'); // ----------------------------------------------------------------------------\n\nvar vtkMapper$1 = _objectSpread(_objectSpread(_objectSpread({\n newInstance: newInstance,\n extend: extend\n}, staticOffsetAPI), otherStaticMethods), Constants);\n\nexport { vtkMapper$1 as default, extend, newInstance };\n","import _defineProperty from '@babel/runtime/helpers/defineProperty';\nimport _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';\nimport { mat3, mat4, vec3 } from 'gl-matrix';\nimport { newInstance as newInstance$1, setGet, obj, vtkErrorMacro as vtkErrorMacro$1 } from '../../macros.js';\nimport vtkHelper from './Helper.js';\nimport vtkMapper from '../Core/Mapper.js';\nimport { m as normalize, u as uninitializeBounds } from '../../Common/Core/Math/index.js';\nimport vtkOpenGLTexture from './Texture.js';\nimport vtkProp from '../Core/Prop.js';\nimport vtkProperty from '../Core/Property.js';\nimport vtkShaderProgram from './ShaderProgram.js';\nimport vtkViewNode from '../SceneGraph/ViewNode.js';\nimport { v as vtkPolyDataVS } from './glsl/vtkPolyDataVS.glsl.js';\nimport { v as vtkPolyDataFS } from './glsl/vtkPolyDataFS.glsl.js';\nimport vtkReplacementShaderMapper from './ReplacementShaderMapper.js';\nimport { registerOverride } from './ViewNodeFactory.js';\nimport { PassTypes } from './HardwareSelector/Constants.js';\nimport vtkDataSet from '../../Common/DataModel/DataSet.js';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nvar FieldAssociations = vtkDataSet.FieldAssociations;\n/* eslint-disable no-lonely-if */\n\nvar primTypes = vtkHelper.primTypes;\nvar Representation = vtkProperty.Representation,\n Shading = vtkProperty.Shading;\nvar ScalarMode = vtkMapper.ScalarMode;\nvar Filter = vtkOpenGLTexture.Filter,\n Wrap = vtkOpenGLTexture.Wrap;\nvar vtkErrorMacro = vtkErrorMacro$1;\nvar StartEvent = {\n type: 'StartEvent'\n};\nvar EndEvent = {\n type: 'EndEvent'\n};\nvar CoordinateSystem = vtkProp.CoordinateSystem; // ----------------------------------------------------------------------------\n// vtkOpenGLPolyDataMapper methods\n// ----------------------------------------------------------------------------\n\nfunction getPickState(renderer) {\n var selector = renderer.getSelector();\n\n if (selector) {\n return selector.getCurrentPass();\n }\n\n return PassTypes.MIN_KNOWN_PASS - 1;\n}\n\nfunction vtkOpenGLPolyDataMapper(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkOpenGLPolyDataMapper');\n\n publicAPI.buildPass = function (prepass) {\n if (prepass) {\n model.currentRenderPass = null;\n model.openGLActor = publicAPI.getFirstAncestorOfType('vtkOpenGLActor');\n model.openGLRenderer = model.openGLActor.getFirstAncestorOfType('vtkOpenGLRenderer');\n model._openGLRenderWindow = model.openGLRenderer.getParent();\n model.openGLCamera = model.openGLRenderer.getViewNodeFor(model.openGLRenderer.getRenderable().getActiveCamera());\n }\n }; // Renders myself\n\n\n publicAPI.translucentPass = function (prepass, renderPass) {\n if (prepass) {\n model.currentRenderPass = renderPass;\n publicAPI.render();\n }\n };\n\n publicAPI.opaqueZBufferPass = function (prepass) {\n if (prepass) {\n model.haveSeenDepthRequest = true;\n model.renderDepth = true;\n publicAPI.render();\n model.renderDepth = false;\n }\n };\n\n publicAPI.opaquePass = function (prepass) {\n if (prepass) {\n publicAPI.render();\n }\n };\n\n publicAPI.render = function () {\n var ctx = model._openGLRenderWindow.getContext();\n\n if (model.context !== ctx) {\n model.context = ctx;\n\n for (var i = primTypes.Start; i < primTypes.End; i++) {\n model.primitives[i].setOpenGLRenderWindow(model._openGLRenderWindow);\n }\n }\n\n var actor = model.openGLActor.getRenderable();\n var ren = model.openGLRenderer.getRenderable();\n publicAPI.renderPiece(ren, actor);\n };\n\n publicAPI.buildShaders = function (shaders, ren, actor) {\n publicAPI.getShaderTemplate(shaders, ren, actor); // apply any renderPassReplacements\n\n if (model.lastRenderPassShaderReplacement) {\n model.lastRenderPassShaderReplacement(shaders);\n } // user specified pre replacements\n\n\n var openGLSpec = model.renderable.getViewSpecificProperties().OpenGL;\n var shaderReplacements = null;\n\n if (openGLSpec) {\n shaderReplacements = openGLSpec.ShaderReplacements;\n }\n\n if (shaderReplacements) {\n for (var i = 0; i < shaderReplacements.length; i++) {\n var currReplacement = shaderReplacements[i];\n\n if (currReplacement.replaceFirst) {\n var shaderType = currReplacement.shaderType;\n var ssrc = shaders[shaderType];\n var substituteRes = vtkShaderProgram.substitute(ssrc, currReplacement.originalValue, currReplacement.replacementValue, currReplacement.replaceAll);\n shaders[shaderType] = substituteRes.result;\n }\n }\n }\n\n publicAPI.replaceShaderValues(shaders, ren, actor); // user specified post replacements\n\n if (shaderReplacements) {\n for (var _i = 0; _i < shaderReplacements.length; _i++) {\n var _currReplacement = shaderReplacements[_i];\n\n if (!_currReplacement.replaceFirst) {\n var _shaderType = _currReplacement.shaderType;\n var _ssrc = shaders[_shaderType];\n\n var _substituteRes = vtkShaderProgram.substitute(_ssrc, _currReplacement.originalValue, _currReplacement.replacementValue, _currReplacement.replaceAll);\n\n shaders[_shaderType] = _substituteRes.result;\n }\n }\n }\n };\n\n publicAPI.getShaderTemplate = function (shaders, ren, actor) {\n var openGLSpecProp = model.renderable.getViewSpecificProperties().OpenGL;\n var vertexShaderCode = vtkPolyDataVS;\n\n if (openGLSpecProp) {\n var vertexSpecProp = openGLSpecProp.VertexShaderCode;\n\n if (vertexSpecProp !== undefined && vertexSpecProp !== '') {\n vertexShaderCode = vertexSpecProp;\n }\n }\n\n shaders.Vertex = vertexShaderCode;\n var fragmentShaderCode = vtkPolyDataFS;\n\n if (openGLSpecProp) {\n var fragmentSpecProp = openGLSpecProp.FragmentShaderCode;\n\n if (fragmentSpecProp !== undefined && fragmentSpecProp !== '') {\n fragmentShaderCode = fragmentSpecProp;\n }\n }\n\n shaders.Fragment = fragmentShaderCode;\n var geometryShaderCode = '';\n\n if (openGLSpecProp) {\n var geometrySpecProp = openGLSpecProp.GeometryShaderCode;\n\n if (geometrySpecProp !== undefined) {\n geometryShaderCode = geometrySpecProp;\n }\n }\n\n shaders.Geometry = geometryShaderCode;\n };\n\n publicAPI.replaceShaderColor = function (shaders, ren, actor) {\n var VSSource = shaders.Vertex;\n var GSSource = shaders.Geometry;\n var FSSource = shaders.Fragment;\n var lastLightComplexity = model.lastBoundBO.getReferenceByName('lastLightComplexity'); // create the material/color property declarations, and VS implementation\n // these are always defined\n\n var colorDec = ['uniform float ambient;', 'uniform float diffuse;', 'uniform float specular;', 'uniform float opacityUniform; // the fragment opacity', 'uniform vec3 ambientColorUniform;', 'uniform vec3 diffuseColorUniform;']; // add more for specular\n\n if (lastLightComplexity) {\n colorDec = colorDec.concat(['uniform vec3 specularColorUniform;', 'uniform float specularPowerUniform;']);\n } // now handle the more complex fragment shader implementation\n // the following are always defined variables. We start\n // by assigning a default value from the uniform\n\n\n var colorImpl = ['vec3 ambientColor;', ' vec3 diffuseColor;', ' float opacity;'];\n\n if (lastLightComplexity) {\n colorImpl = colorImpl.concat([' vec3 specularColor;', ' float specularPower;']);\n }\n\n colorImpl = colorImpl.concat([' ambientColor = ambientColorUniform;', ' diffuseColor = diffuseColorUniform;', ' opacity = opacityUniform;']);\n\n if (lastLightComplexity) {\n colorImpl = colorImpl.concat([' specularColor = specularColorUniform;', ' specularPower = specularPowerUniform;']);\n } // add scalar vertex coloring\n\n\n if (model.lastBoundBO.getCABO().getColorComponents() !== 0 && !model.drawingEdges) {\n colorDec = colorDec.concat(['varying vec4 vertexColorVSOutput;']);\n VSSource = vtkShaderProgram.substitute(VSSource, '//VTK::Color::Dec', ['attribute vec4 scalarColor;', 'varying vec4 vertexColorVSOutput;']).result;\n VSSource = vtkShaderProgram.substitute(VSSource, '//VTK::Color::Impl', ['vertexColorVSOutput = scalarColor;']).result;\n GSSource = vtkShaderProgram.substitute(GSSource, '//VTK::Color::Dec', ['in vec4 vertexColorVSOutput[];', 'out vec4 vertexColorGSOutput;']).result;\n GSSource = vtkShaderProgram.substitute(GSSource, '//VTK::Color::Impl', ['vertexColorGSOutput = vertexColorVSOutput[i];']).result;\n }\n\n if (model.lastBoundBO.getCABO().getColorComponents() !== 0 && !model.drawingEdges) {\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Color::Impl', colorImpl.concat([' diffuseColor = vertexColorVSOutput.rgb;', ' ambientColor = vertexColorVSOutput.rgb;', ' opacity = opacity*vertexColorVSOutput.a;'])).result;\n } else {\n if (model.renderable.getInterpolateScalarsBeforeMapping() && model.renderable.getColorCoordinates() && !model.drawingEdges) {\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Color::Impl', colorImpl.concat([' vec4 texColor = texture2D(texture1, tcoordVCVSOutput.st);', ' diffuseColor = texColor.rgb;', ' ambientColor = texColor.rgb;', ' opacity = opacity*texColor.a;'])).result;\n } else {\n if (actor.getBackfaceProperty() && !model.drawingEdges) {\n colorDec = colorDec.concat(['uniform float opacityUniformBF; // the fragment opacity', 'uniform float ambientIntensityBF; // the material ambient', 'uniform float diffuseIntensityBF; // the material diffuse', 'uniform vec3 ambientColorUniformBF; // ambient material color', 'uniform vec3 diffuseColorUniformBF; // diffuse material color']);\n\n if (lastLightComplexity) {\n colorDec = colorDec.concat(['uniform float specularIntensityBF; // the material specular intensity', 'uniform vec3 specularColorUniformBF; // intensity weighted color', 'uniform float specularPowerUniformBF;']);\n colorImpl = colorImpl.concat(['if (gl_FrontFacing == false) {', ' ambientColor = ambientIntensityBF * ambientColorUniformBF;', ' diffuseColor = diffuseIntensityBF * diffuseColorUniformBF;', ' specularColor = specularIntensityBF * specularColorUniformBF;', ' specularPower = specularPowerUniformBF;', ' opacity = opacityUniformBF; }']);\n } else {\n colorImpl = colorImpl.concat(['if (gl_FrontFacing == false) {', ' ambientColor = ambientIntensityBF * ambientColorUniformBF;', ' diffuseColor = diffuseIntensityBF * diffuseColorUniformBF;', ' opacity = opacityUniformBF; }']);\n }\n }\n\n if (model.haveCellScalars && !model.drawingEdges) {\n colorDec = colorDec.concat(['uniform samplerBuffer texture1;']);\n }\n\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Color::Impl', colorImpl).result;\n }\n }\n\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Color::Dec', colorDec).result;\n shaders.Vertex = VSSource;\n shaders.Geometry = GSSource;\n shaders.Fragment = FSSource;\n };\n\n publicAPI.replaceShaderLight = function (shaders, ren, actor) {\n var FSSource = shaders.Fragment; // check for shadow maps\n\n var shadowFactor = '';\n var lastLightComplexity = model.lastBoundBO.getReferenceByName('lastLightComplexity');\n var lastLightCount = model.lastBoundBO.getReferenceByName('lastLightCount');\n var sstring = [];\n\n switch (lastLightComplexity) {\n case 0:\n // no lighting or RENDER_VALUES\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Light::Impl', [' gl_FragData[0] = vec4(ambientColor * ambient + diffuseColor * diffuse, opacity);', ' //VTK::Light::Impl'], false).result;\n break;\n\n case 1:\n // headlight\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Light::Impl', [' float df = max(0.0, normalVCVSOutput.z);', ' float sf = pow(df, specularPower);', ' vec3 diffuseL = df * diffuseColor;', ' vec3 specularL = sf * specularColor;', ' gl_FragData[0] = vec4(ambientColor * ambient + diffuseL * diffuse + specularL * specular, opacity);', ' //VTK::Light::Impl'], false).result;\n break;\n\n case 2:\n // light kit\n for (var lc = 0; lc < lastLightCount; ++lc) {\n sstring = sstring.concat([\"uniform vec3 lightColor\".concat(lc, \";\"), \"uniform vec3 lightDirectionVC\".concat(lc, \"; // normalized\"), \"uniform vec3 lightHalfAngleVC\".concat(lc, \"; // normalized\")]);\n }\n\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Light::Dec', sstring).result;\n sstring = ['vec3 diffuseL = vec3(0,0,0);', ' vec3 specularL = vec3(0,0,0);', ' float df;'];\n\n for (var _lc = 0; _lc < lastLightCount; ++_lc) {\n sstring = sstring.concat([\" df = max(0.0, dot(normalVCVSOutput, -lightDirectionVC\".concat(_lc, \"));\"), \" diffuseL += ((df\".concat(shadowFactor, \") * lightColor\").concat(_lc, \");\"), \" if (dot(normalVCVSOutput, lightDirectionVC\".concat(_lc, \") < 0.0)\"), ' {', \" float sf = pow( max(0.0, dot(lightHalfAngleVC\".concat(_lc, \",normalVCVSOutput)), specularPower);\"), \" specularL += ((sf\".concat(shadowFactor, \") * lightColor\").concat(_lc, \");\"), ' }']);\n }\n\n sstring = sstring.concat([' diffuseL = diffuseL * diffuseColor;', ' specularL = specularL * specularColor;', ' gl_FragData[0] = vec4(ambientColor * ambient + diffuseL * diffuse + specularL * specular, opacity);', ' //VTK::Light::Impl']);\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Light::Impl', sstring, false).result;\n break;\n\n case 3:\n // positional\n for (var _lc2 = 0; _lc2 < lastLightCount; ++_lc2) {\n sstring = sstring.concat([\"uniform vec3 lightColor\".concat(_lc2, \";\"), \"uniform vec3 lightDirectionVC\".concat(_lc2, \"; // normalized\"), \"uniform vec3 lightHalfAngleVC\".concat(_lc2, \"; // normalized\"), \"uniform vec3 lightPositionVC\".concat(_lc2, \";\"), \"uniform vec3 lightAttenuation\".concat(_lc2, \";\"), \"uniform float lightConeAngle\".concat(_lc2, \";\"), \"uniform float lightExponent\".concat(_lc2, \";\"), \"uniform int lightPositional\".concat(_lc2, \";\")]);\n }\n\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Light::Dec', sstring).result;\n sstring = ['vec3 diffuseL = vec3(0,0,0);', ' vec3 specularL = vec3(0,0,0);', ' vec3 vertLightDirectionVC;', ' float attenuation;', ' float df;'];\n\n for (var _lc3 = 0; _lc3 < lastLightCount; ++_lc3) {\n sstring = sstring.concat([' attenuation = 1.0;', \" if (lightPositional\".concat(_lc3, \" == 0)\"), ' {', \" vertLightDirectionVC = lightDirectionVC\".concat(_lc3, \";\"), ' }', ' else', ' {', \" vertLightDirectionVC = vertexVC.xyz - lightPositionVC\".concat(_lc3, \";\"), ' float distanceVC = length(vertLightDirectionVC);', ' vertLightDirectionVC = normalize(vertLightDirectionVC);', ' attenuation = 1.0 /', \" (lightAttenuation\".concat(_lc3, \".x\"), \" + lightAttenuation\".concat(_lc3, \".y * distanceVC\"), \" + lightAttenuation\".concat(_lc3, \".z * distanceVC * distanceVC);\"), ' // per OpenGL standard cone angle is 90 or less for a spot light', \" if (lightConeAngle\".concat(_lc3, \" <= 90.0)\"), ' {', \" float coneDot = dot(vertLightDirectionVC, lightDirectionVC\".concat(_lc3, \");\"), ' // if inside the cone', \" if (coneDot >= cos(radians(lightConeAngle\".concat(_lc3, \")))\"), ' {', \" attenuation = attenuation * pow(coneDot, lightExponent\".concat(_lc3, \");\"), ' }', ' else', ' {', ' attenuation = 0.0;', ' }', ' }', ' }', ' df = max(0.0, attenuation*dot(normalVCVSOutput, -vertLightDirectionVC));', \" diffuseL += ((df\".concat(shadowFactor, \") * lightColor\").concat(_lc3, \");\"), ' if (dot(normalVCVSOutput, vertLightDirectionVC) < 0.0)', ' {', \" float sf = attenuation*pow( max(0.0, dot(lightHalfAngleVC\".concat(_lc3, \",normalVCVSOutput)), specularPower);\"), \" specularL += ((sf\".concat(shadowFactor, \") * lightColor\").concat(_lc3, \");\"), ' }']);\n }\n\n sstring = sstring.concat([' diffuseL = diffuseL * diffuseColor;', ' specularL = specularL * specularColor;', ' gl_FragData[0] = vec4(ambientColor * ambient + diffuseL * diffuse + specularL * specular, opacity);', ' //VTK::Light::Impl']);\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Light::Impl', sstring, false).result;\n break;\n\n default:\n vtkErrorMacro('bad light complexity');\n }\n\n shaders.Fragment = FSSource;\n };\n\n publicAPI.replaceShaderNormal = function (shaders, ren, actor) {\n var lastLightComplexity = model.lastBoundBO.getReferenceByName('lastLightComplexity');\n\n if (lastLightComplexity > 0) {\n var VSSource = shaders.Vertex;\n var GSSource = shaders.Geometry;\n var FSSource = shaders.Fragment;\n\n if (model.lastBoundBO.getCABO().getNormalOffset()) {\n VSSource = vtkShaderProgram.substitute(VSSource, '//VTK::Normal::Dec', ['attribute vec3 normalMC;', 'uniform mat3 normalMatrix;', 'varying vec3 normalVCVSOutput;']).result;\n VSSource = vtkShaderProgram.substitute(VSSource, '//VTK::Normal::Impl', ['normalVCVSOutput = normalMatrix * normalMC;']).result;\n GSSource = vtkShaderProgram.substitute(GSSource, '//VTK::Normal::Dec', ['in vec3 normalVCVSOutput[];', 'out vec3 normalVCGSOutput;']).result;\n GSSource = vtkShaderProgram.substitute(GSSource, '//VTK::Normal::Impl', ['normalVCGSOutput = normalVCVSOutput[i];']).result;\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Normal::Dec', ['varying vec3 normalVCVSOutput;']).result;\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Normal::Impl', ['vec3 normalVCVSOutput = normalize(normalVCVSOutput);', // if (!gl_FrontFacing) does not work in intel hd4000 mac\n // if (int(gl_FrontFacing) == 0) does not work on mesa\n ' if (gl_FrontFacing == false) { normalVCVSOutput = -normalVCVSOutput; }']).result;\n } else {\n if (model.haveCellNormals) {\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Normal::Dec', ['uniform mat3 normalMatrix;', 'uniform samplerBuffer textureN;']).result;\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Normal::Impl', ['vec3 normalVCVSOutput = normalize(normalMatrix *', ' texelFetchBuffer(textureN, gl_PrimitiveID + PrimitiveIDOffset).xyz);', ' if (gl_FrontFacing == false) { normalVCVSOutput = -normalVCVSOutput; }']).result;\n } else {\n if (model.lastBoundBO.getOpenGLMode(actor.getProperty().getRepresentation()) === model.context.LINES) {\n // generate a normal for lines, it will be perpendicular to the line\n // and maximally aligned with the camera view direction\n // no clue if this is the best way to do this.\n // the code below has been optimized a bit so what follows is\n // an explanation of the basic approach. Compute the gradient of the line\n // with respect to x and y, the the larger of the two\n // cross that with the camera view direction. That gives a vector\n // orthogonal to the camera view and the line. Note that the line and the camera\n // view are probably not orthogonal. Which is why when we cross result that with\n // the line gradient again we get a reasonable normal. It will be othogonal to\n // the line (which is a plane but maximally aligned with the camera view.\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::UniformFlow::Impl', [' vec3 fdx = dFdx(vertexVC.xyz);', ' vec3 fdy = dFdy(vertexVC.xyz);', ' //VTK::UniformFlow::Impl'] // For further replacements\n ).result;\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Normal::Impl', ['vec3 normalVCVSOutput;', ' if (abs(fdx.x) > 0.0)', ' { fdx = normalize(fdx); normalVCVSOutput = normalize(cross(vec3(fdx.y, -fdx.x, 0.0), fdx)); }', ' else { fdy = normalize(fdy); normalVCVSOutput = normalize(cross(vec3(fdy.y, -fdy.x, 0.0), fdy));}']).result;\n } else {\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Normal::Dec', ['uniform int cameraParallel;']).result;\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::UniformFlow::Impl', [// ' vec3 fdx = vec3(dFdx(vertexVC.x),dFdx(vertexVC.y),dFdx(vertexVC.z));',\n // ' vec3 fdy = vec3(dFdy(vertexVC.x),dFdy(vertexVC.y),dFdy(vertexVC.z));',\n ' vec3 fdx = dFdx(vertexVC.xyz);', ' vec3 fdy = dFdy(vertexVC.xyz);', ' //VTK::UniformFlow::Impl'] // For further replacements\n ).result;\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Normal::Impl', [' fdx = normalize(fdx);', ' fdy = normalize(fdy);', ' vec3 normalVCVSOutput = normalize(cross(fdx,fdy));', // the code below is faster, but does not work on some devices\n // 'vec3 normalVC = normalize(cross(dFdx(vertexVC.xyz), dFdy(vertexVC.xyz)));',\n ' if (cameraParallel == 1 && normalVCVSOutput.z < 0.0) { normalVCVSOutput = -1.0*normalVCVSOutput; }', ' if (cameraParallel == 0 && dot(normalVCVSOutput,vertexVC.xyz) > 0.0) { normalVCVSOutput = -1.0*normalVCVSOutput; }']).result;\n }\n }\n }\n\n shaders.Vertex = VSSource;\n shaders.Geometry = GSSource;\n shaders.Fragment = FSSource;\n }\n };\n\n publicAPI.replaceShaderPositionVC = function (shaders, ren, actor) {\n // replace common shader code\n model.lastBoundBO.replaceShaderPositionVC(shaders, ren, actor);\n var VSSource = shaders.Vertex;\n var GSSource = shaders.Geometry;\n var FSSource = shaders.Fragment; // do we need the vertex in the shader in View Coordinates\n\n var lastLightComplexity = model.lastBoundBO.getReferenceByName('lastLightComplexity');\n\n if (lastLightComplexity > 0) {\n VSSource = vtkShaderProgram.substitute(VSSource, '//VTK::PositionVC::Dec', ['varying vec4 vertexVCVSOutput;']).result;\n VSSource = vtkShaderProgram.substitute(VSSource, '//VTK::PositionVC::Impl', ['vertexVCVSOutput = MCVCMatrix * vertexMC;', ' gl_Position = MCPCMatrix * vertexMC;']).result;\n VSSource = vtkShaderProgram.substitute(VSSource, '//VTK::Camera::Dec', ['uniform mat4 MCPCMatrix;', 'uniform mat4 MCVCMatrix;']).result;\n GSSource = vtkShaderProgram.substitute(GSSource, '//VTK::PositionVC::Dec', ['in vec4 vertexVCVSOutput[];', 'out vec4 vertexVCGSOutput;']).result;\n GSSource = vtkShaderProgram.substitute(GSSource, '//VTK::PositionVC::Impl', ['vertexVCGSOutput = vertexVCVSOutput[i];']).result;\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::PositionVC::Dec', ['varying vec4 vertexVCVSOutput;']).result;\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::PositionVC::Impl', ['vec4 vertexVC = vertexVCVSOutput;']).result;\n } else {\n VSSource = vtkShaderProgram.substitute(VSSource, '//VTK::Camera::Dec', ['uniform mat4 MCPCMatrix;']).result;\n VSSource = vtkShaderProgram.substitute(VSSource, '//VTK::PositionVC::Impl', [' gl_Position = MCPCMatrix * vertexMC;']).result;\n }\n\n shaders.Vertex = VSSource;\n shaders.Geometry = GSSource;\n shaders.Fragment = FSSource;\n };\n\n publicAPI.replaceShaderTCoord = function (shaders, ren, actor) {\n if (model.lastBoundBO.getCABO().getTCoordOffset()) {\n var VSSource = shaders.Vertex;\n var GSSource = shaders.Geometry;\n var FSSource = shaders.Fragment;\n\n if (model.drawingEdges) {\n return;\n }\n\n VSSource = vtkShaderProgram.substitute(VSSource, '//VTK::TCoord::Impl', 'tcoordVCVSOutput = tcoordMC;').result; // we only handle the first texture by default\n // additional textures are activated and we set the uniform\n // for the texture unit they are assigned to, but you have to\n // add in the shader code to do something with them\n\n var tus = model.openGLActor.getActiveTextures();\n var tNumComp = 2;\n var tcdim = 2;\n\n if (tus && tus.length > 0) {\n tNumComp = tus[0].getComponents();\n\n if (tus[0].getTarget() === model.context.TEXTURE_CUBE_MAP) {\n tcdim = 3;\n }\n }\n\n if (model.renderable.getColorTextureMap()) {\n tNumComp = model.renderable.getColorTextureMap().getPointData().getScalars().getNumberOfComponents();\n tcdim = 2;\n }\n\n if (tcdim === 2) {\n VSSource = vtkShaderProgram.substitute(VSSource, '//VTK::TCoord::Dec', 'attribute vec2 tcoordMC; varying vec2 tcoordVCVSOutput;').result;\n GSSource = vtkShaderProgram.substitute(GSSource, '//VTK::TCoord::Dec', ['in vec2 tcoordVCVSOutput[];', 'out vec2 tcoordVCGSOutput;']).result;\n GSSource = vtkShaderProgram.substitute(GSSource, '//VTK::TCoord::Impl', 'tcoordVCGSOutput = tcoordVCVSOutput[i];').result;\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::TCoord::Dec', ['varying vec2 tcoordVCVSOutput;', 'uniform sampler2D texture1;']).result;\n\n if (tus && tus.length >= 1) {\n switch (tNumComp) {\n case 1:\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::TCoord::Impl', [' vec4 tcolor = texture2D(texture1, tcoordVCVSOutput);', ' ambientColor = ambientColor*tcolor.r;', ' diffuseColor = diffuseColor*tcolor.r;']).result;\n break;\n\n case 2:\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::TCoord::Impl', [' vec4 tcolor = texture2D(texture1, tcoordVCVSOutput);', ' ambientColor = ambientColor*tcolor.r;', ' diffuseColor = diffuseColor*tcolor.r;', ' opacity = opacity * tcolor.g;']).result;\n break;\n\n default:\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::TCoord::Impl', [' vec4 tcolor = texture2D(texture1, tcoordVCVSOutput);', ' ambientColor = ambientColor*tcolor.rgb;', ' diffuseColor = diffuseColor*tcolor.rgb;', ' opacity = opacity * tcolor.a;']).result;\n }\n }\n } else {\n VSSource = vtkShaderProgram.substitute(VSSource, '//VTK::TCoord::Dec', 'attribute vec3 tcoordMC; varying vec3 tcoordVCVSOutput;').result;\n GSSource = vtkShaderProgram.substitute(GSSource, '//VTK::TCoord::Dec', ['in vec3 tcoordVCVSOutput[];', 'out vec3 tcoordVCGSOutput;']).result;\n GSSource = vtkShaderProgram.substitute(GSSource, '//VTK::TCoord::Impl', 'tcoordVCGSOutput = tcoordVCVSOutput[i];').result;\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::TCoord::Dec', ['varying vec3 tcoordVCVSOutput;', 'uniform samplerCube texture1;']).result;\n\n switch (tNumComp) {\n case 1:\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::TCoord::Impl', [' vec4 tcolor = textureCube(texture1, tcoordVCVSOutput);', ' ambientColor = ambientColor*tcolor.r;', ' diffuseColor = diffuseColor*tcolor.r;']).result;\n break;\n\n case 2:\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::TCoord::Impl', [' vec4 tcolor = textureCube(texture1, tcoordVCVSOutput);', ' ambientColor = ambientColor*tcolor.r;', ' diffuseColor = diffuseColor*tcolor.r;', ' opacity = opacity * tcolor.g;']).result;\n break;\n\n default:\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::TCoord::Impl', [' vec4 tcolor = textureCube(texture1, tcoordVCVSOutput);', ' ambientColor = ambientColor*tcolor.rgb;', ' diffuseColor = diffuseColor*tcolor.rgb;', ' opacity = opacity * tcolor.a;']).result;\n }\n }\n\n shaders.Vertex = VSSource;\n shaders.Geometry = GSSource;\n shaders.Fragment = FSSource;\n }\n };\n\n publicAPI.replaceShaderClip = function (shaders, ren, actor) {\n var VSSource = shaders.Vertex;\n var FSSource = shaders.Fragment;\n\n if (model.renderable.getNumberOfClippingPlanes()) {\n var numClipPlanes = model.renderable.getNumberOfClippingPlanes();\n VSSource = vtkShaderProgram.substitute(VSSource, '//VTK::Clip::Dec', ['uniform int numClipPlanes;', \"uniform vec4 clipPlanes[\".concat(numClipPlanes, \"];\"), \"varying float clipDistancesVSOutput[\".concat(numClipPlanes, \"];\")]).result;\n VSSource = vtkShaderProgram.substitute(VSSource, '//VTK::Clip::Impl', [\"for (int planeNum = 0; planeNum < \".concat(numClipPlanes, \"; planeNum++)\"), ' {', ' if (planeNum >= numClipPlanes)', ' {', ' break;', ' }', ' clipDistancesVSOutput[planeNum] = dot(clipPlanes[planeNum], vertexMC);', ' }']).result;\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Clip::Dec', ['uniform int numClipPlanes;', \"varying float clipDistancesVSOutput[\".concat(numClipPlanes, \"];\")]).result;\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Clip::Impl', [\"for (int planeNum = 0; planeNum < \".concat(numClipPlanes, \"; planeNum++)\"), ' {', ' if (planeNum >= numClipPlanes)', ' {', ' break;', ' }', ' if (clipDistancesVSOutput[planeNum] < 0.0) discard;', ' }']).result;\n }\n\n shaders.Vertex = VSSource;\n shaders.Fragment = FSSource;\n };\n\n publicAPI.getCoincidentParameters = function (ren, actor) {\n // 1. ResolveCoincidentTopology is On and non zero for this primitive\n // type\n var cp = {\n factor: 0.0,\n offset: 0.0\n };\n var prop = actor.getProperty();\n\n if (model.renderable.getResolveCoincidentTopology() || prop.getEdgeVisibility() && prop.getRepresentation() === Representation.SURFACE) {\n var primType = model.lastBoundBO.getPrimitiveType();\n\n if (primType === primTypes.Points || prop.getRepresentation() === Representation.POINTS) {\n cp = model.renderable.getCoincidentTopologyPointOffsetParameter();\n } else if (primType === primTypes.Lines || prop.getRepresentation() === Representation.WIREFRAME) {\n cp = model.renderable.getCoincidentTopologyLineOffsetParameters();\n } else if (primType === primTypes.Tris || primType === primTypes.TriStrips) {\n cp = model.renderable.getCoincidentTopologyPolygonOffsetParameters();\n }\n\n if (primType === primTypes.TrisEdges || primType === primTypes.TriStripsEdges) {\n cp = model.renderable.getCoincidentTopologyPolygonOffsetParameters();\n cp.factor /= 2.0;\n cp.offset /= 2.0;\n }\n } // hardware picking always offset due to saved zbuffer\n // This gets you above the saved surface depth buffer.\n\n\n var selector = model.openGLRenderer.getSelector();\n\n if (selector && selector.getFieldAssociation() === FieldAssociations.FIELD_ASSOCIATION_POINTS) {\n cp.offset -= 2.0;\n }\n\n return cp;\n };\n\n publicAPI.replaceShaderPicking = function (shaders, ren, actor) {\n var FSSource = shaders.Fragment;\n var VSSource = shaders.Vertex;\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Picking::Dec', ['uniform int picking;', '//VTK::Picking::Dec']).result;\n\n if (!model.openGLRenderer.getSelector()) {\n return;\n }\n\n if (model.lastSelectionState === PassTypes.ID_LOW24 || model.lastSelectionState === PassTypes.ID_HIGH24) {\n VSSource = vtkShaderProgram.substitute(VSSource, '//VTK::Picking::Dec', ['flat out int vertexIDVSOutput;\\n', 'uniform int VertexIDOffset;\\n']).result;\n VSSource = vtkShaderProgram.substitute(VSSource, '//VTK::Picking::Impl', ' vertexIDVSOutput = gl_VertexID + VertexIDOffset;\\n').result;\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Picking::Dec', 'flat in int vertexIDVSOutput;\\n').result;\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Picking::Impl', [' int idx = vertexIDVSOutput;', '//VTK::Picking::Impl']).result;\n }\n\n switch (model.lastSelectionState) {\n case PassTypes.ID_LOW24:\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Picking::Impl', ' gl_FragData[0] = vec4(float(idx%256)/255.0, float((idx/256)%256)/255.0, float((idx/65536)%256)/255.0, 1.0);').result;\n break;\n\n case PassTypes.ID_HIGH24:\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Picking::Impl', ' gl_FragData[0] = vec4(float(idx)/255.0, 0.0, 0.0, 1.0);').result;\n break;\n\n default:\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Picking::Dec', 'uniform vec3 mapperIndex;').result;\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Picking::Impl', ' gl_FragData[0] = picking != 0 ? vec4(mapperIndex,1.0) : gl_FragData[0];').result;\n }\n\n shaders.Fragment = FSSource;\n shaders.Vertex = VSSource;\n };\n\n publicAPI.replaceShaderValues = function (shaders, ren, actor) {\n publicAPI.replaceShaderColor(shaders, ren, actor);\n publicAPI.replaceShaderNormal(shaders, ren, actor);\n publicAPI.replaceShaderLight(shaders, ren, actor);\n publicAPI.replaceShaderTCoord(shaders, ren, actor);\n publicAPI.replaceShaderPicking(shaders, ren, actor);\n publicAPI.replaceShaderClip(shaders, ren, actor);\n publicAPI.replaceShaderCoincidentOffset(shaders, ren, actor);\n publicAPI.replaceShaderPositionVC(shaders, ren, actor);\n\n if (model.haveSeenDepthRequest) {\n var FSSource = shaders.Fragment;\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::ZBuffer::Dec', 'uniform int depthRequest;').result;\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::ZBuffer::Impl', ['if (depthRequest == 1) {', 'float iz = floor(gl_FragCoord.z*65535.0 + 0.1);', 'float rf = floor(iz/256.0)/255.0;', 'float gf = mod(iz,256.0)/255.0;', 'gl_FragData[0] = vec4(rf, gf, 0.0, 1.0); }']).result;\n shaders.Fragment = FSSource;\n }\n };\n\n publicAPI.getNeedToRebuildShaders = function (cellBO, ren, actor) {\n var lightComplexity = 0;\n var numberOfLights = 0;\n var primType = cellBO.getPrimitiveType();\n var poly = model.currentInput; // different algo from C++ as of 5/2019\n\n var needLighting = false;\n var pointNormals = poly.getPointData().getNormals();\n var cellNormals = poly.getCellData().getNormals();\n var flat = actor.getProperty().getInterpolation() === Shading.FLAT;\n var representation = actor.getProperty().getRepresentation();\n var mode = cellBO.getOpenGLMode(representation, primType); // 1) all surfaces need lighting\n\n if (mode === model.context.TRIANGLES) {\n needLighting = true; // 2) all cell normals without point normals need lighting\n } else if (cellNormals && !pointNormals) {\n needLighting = true; // 3) Phong + pointNormals need lighting\n } else if (!flat && pointNormals) {\n needLighting = true; // 4) Phong Lines need lighting\n } else if (!flat && mode === model.context.LINES) {\n needLighting = true;\n } // 5) everything else is unlit\n // do we need lighting?\n\n\n if (actor.getProperty().getLighting() && needLighting) {\n // consider the lighting complexity to determine which case applies\n // simple headlight, Light Kit, the whole feature set of VTK\n lightComplexity = 0;\n var lights = ren.getLightsByReference();\n\n for (var index = 0; index < lights.length; ++index) {\n var light = lights[index];\n var status = light.getSwitch();\n\n if (status > 0) {\n numberOfLights++;\n\n if (lightComplexity === 0) {\n lightComplexity = 1;\n }\n }\n\n if (lightComplexity === 1 && (numberOfLights > 1 || light.getIntensity() !== 1.0 || !light.lightTypeIsHeadLight())) {\n lightComplexity = 2;\n }\n\n if (lightComplexity < 3 && light.getPositional()) {\n lightComplexity = 3;\n }\n }\n }\n\n var needRebuild = false;\n var lastLightComplexity = model.lastBoundBO.getReferenceByName('lastLightComplexity');\n var lastLightCount = model.lastBoundBO.getReferenceByName('lastLightCount');\n\n if (lastLightComplexity !== lightComplexity || lastLightCount !== numberOfLights) {\n model.lastBoundBO.set({\n lastLightComplexity: lightComplexity\n }, true);\n model.lastBoundBO.set({\n lastLightCount: numberOfLights\n }, true);\n needRebuild = true;\n } // has the render pass shader replacement changed? Two options\n\n\n if (!model.currentRenderPass && model.lastRenderPassShaderReplacement) {\n needRebuild = true;\n model.lastRenderPassShaderReplacement = null;\n }\n\n if (model.currentRenderPass && model.currentRenderPass.getShaderReplacement() !== model.lastRenderPassShaderReplacement) {\n model.lastRenderPassShaderReplacement = model.currentRenderPass.getShaderReplacement();\n needRebuild = true;\n } // has something changed that would require us to recreate the shader?\n // candidates are\n // property modified (representation interpolation and lighting)\n // input modified\n // light complexity changed\n\n\n if (model.lastHaveSeenDepthRequest !== model.haveSeenDepthRequest || cellBO.getShaderSourceTime().getMTime() < model.renderable.getMTime() || cellBO.getShaderSourceTime().getMTime() < model.currentInput.getMTime() || cellBO.getShaderSourceTime().getMTime() < model.selectionStateChanged.getMTime() || needRebuild) {\n model.lastHaveSeenDepthRequest = model.haveSeenDepthRequest;\n return true;\n }\n\n return false;\n };\n\n publicAPI.invokeShaderCallbacks = function (cellBO, ren, actor) {\n var listCallbacks = model.renderable.getViewSpecificProperties().ShadersCallbacks;\n\n if (listCallbacks) {\n listCallbacks.forEach(function (object) {\n object.callback(object.userData, cellBO, ren, actor);\n });\n }\n };\n\n publicAPI.setMapperShaderParameters = function (cellBO, ren, actor) {\n // Now to update the VAO too, if necessary.\n if (cellBO.getProgram().isUniformUsed('PrimitiveIDOffset')) {\n cellBO.getProgram().setUniformi('PrimitiveIDOffset', model.primitiveIDOffset);\n }\n\n if (cellBO.getProgram().isUniformUsed('VertexIDOffset')) {\n cellBO.getProgram().setUniformi('VertexIDOffset', model.vertexIDOffset);\n }\n\n if (cellBO.getCABO().getElementCount() && (model.VBOBuildTime.getMTime() > cellBO.getAttributeUpdateTime().getMTime() || cellBO.getShaderSourceTime().getMTime() > cellBO.getAttributeUpdateTime().getMTime())) {\n var lastLightComplexity = model.lastBoundBO.getReferenceByName('lastLightComplexity');\n\n if (cellBO.getProgram().isAttributeUsed('vertexMC')) {\n if (!cellBO.getVAO().addAttributeArray(cellBO.getProgram(), cellBO.getCABO(), 'vertexMC', cellBO.getCABO().getVertexOffset(), cellBO.getCABO().getStride(), model.context.FLOAT, 3, false)) {\n vtkErrorMacro('Error setting vertexMC in shader VAO.');\n }\n }\n\n if (cellBO.getProgram().isAttributeUsed('normalMC') && cellBO.getCABO().getNormalOffset() && lastLightComplexity > 0) {\n if (!cellBO.getVAO().addAttributeArray(cellBO.getProgram(), cellBO.getCABO(), 'normalMC', cellBO.getCABO().getNormalOffset(), cellBO.getCABO().getStride(), model.context.FLOAT, 3, false)) {\n vtkErrorMacro('Error setting normalMC in shader VAO.');\n }\n } else {\n cellBO.getVAO().removeAttributeArray('normalMC');\n }\n\n model.renderable.getCustomShaderAttributes().forEach(function (attrName, idx) {\n if (cellBO.getProgram().isAttributeUsed(\"\".concat(attrName, \"MC\"))) {\n if (!cellBO.getVAO().addAttributeArray(cellBO.getProgram(), cellBO.getCABO(), \"\".concat(attrName, \"MC\"), cellBO.getCABO().getCustomData()[idx].offset, cellBO.getCABO().getStride(), model.context.FLOAT, cellBO.getCABO().getCustomData()[idx].components, false)) {\n vtkErrorMacro(\"Error setting \".concat(attrName, \"MC in shader VAO.\"));\n }\n }\n });\n\n if (cellBO.getProgram().isAttributeUsed('tcoordMC') && cellBO.getCABO().getTCoordOffset()) {\n if (!cellBO.getVAO().addAttributeArray(cellBO.getProgram(), cellBO.getCABO(), 'tcoordMC', cellBO.getCABO().getTCoordOffset(), cellBO.getCABO().getStride(), model.context.FLOAT, cellBO.getCABO().getTCoordComponents(), false)) {\n vtkErrorMacro('Error setting tcoordMC in shader VAO.');\n }\n } else {\n cellBO.getVAO().removeAttributeArray('tcoordMC');\n }\n\n if (cellBO.getProgram().isAttributeUsed('scalarColor') && cellBO.getCABO().getColorComponents()) {\n if (!cellBO.getVAO().addAttributeArray(cellBO.getProgram(), cellBO.getCABO().getColorBO(), 'scalarColor', cellBO.getCABO().getColorOffset(), cellBO.getCABO().getColorBOStride(), model.context.UNSIGNED_BYTE, 4, true)) {\n vtkErrorMacro('Error setting scalarColor in shader VAO.');\n }\n } else {\n cellBO.getVAO().removeAttributeArray('scalarColor');\n }\n\n cellBO.getAttributeUpdateTime().modified();\n }\n\n if (model.renderable.getNumberOfClippingPlanes()) {\n // add all the clipping planes\n var numClipPlanes = model.renderable.getNumberOfClippingPlanes();\n var planeEquations = [];\n var shiftScaleEnabled = cellBO.getCABO().getCoordShiftAndScaleEnabled();\n var inverseShiftScaleMatrix = shiftScaleEnabled ? cellBO.getCABO().getInverseShiftAndScaleMatrix() : null;\n var mat = inverseShiftScaleMatrix ? mat4.copy(model.tmpMat4, actor.getMatrix()) : actor.getMatrix();\n\n if (inverseShiftScaleMatrix) {\n mat4.transpose(mat, mat);\n mat4.multiply(mat, mat, inverseShiftScaleMatrix);\n mat4.transpose(mat, mat);\n }\n\n for (var i = 0; i < numClipPlanes; i++) {\n var planeEquation = [];\n model.renderable.getClippingPlaneInDataCoords(mat, i, planeEquation);\n\n for (var j = 0; j < 4; j++) {\n planeEquations.push(planeEquation[j]);\n }\n }\n\n cellBO.getProgram().setUniformi('numClipPlanes', numClipPlanes);\n cellBO.getProgram().setUniform4fv('clipPlanes', planeEquations);\n }\n\n if (model.internalColorTexture && cellBO.getProgram().isUniformUsed('texture1')) {\n cellBO.getProgram().setUniformi('texture1', model.internalColorTexture.getTextureUnit());\n }\n\n var tus = model.openGLActor.getActiveTextures();\n\n if (tus) {\n for (var index = 0; index < tus.length; ++index) {\n var tex = tus[index];\n var texUnit = tex.getTextureUnit();\n var tname = \"texture\".concat(texUnit + 1);\n\n if (cellBO.getProgram().isUniformUsed(tname)) {\n cellBO.getProgram().setUniformi(tname, texUnit);\n }\n }\n } // handle depth requests\n\n\n if (model.haveSeenDepthRequest) {\n cellBO.getProgram().setUniformi('depthRequest', model.renderDepth ? 1 : 0);\n } // handle coincident\n\n\n if (cellBO.getProgram().isUniformUsed('coffset')) {\n var cp = publicAPI.getCoincidentParameters(ren, actor);\n cellBO.getProgram().setUniformf('coffset', cp.offset); // cfactor isn't always used when coffset is.\n\n if (cellBO.getProgram().isUniformUsed('cfactor')) {\n cellBO.getProgram().setUniformf('cfactor', cp.factor);\n }\n } // handle wide lines\n\n\n cellBO.setMapperShaderParameters(ren, actor, model.openGLRenderer.getTiledSizeAndOrigin());\n var selector = model.openGLRenderer.getSelector();\n cellBO.getProgram().setUniform3fArray('mapperIndex', selector ? selector.getPropColorValue() : [0.0, 0.0, 0.0]);\n cellBO.getProgram().setUniformi('picking', selector ? selector.getCurrentPass() + 1 : 0);\n };\n\n publicAPI.setLightingShaderParameters = function (cellBO, ren, actor) {\n // for unlit and headlight there are no lighting parameters\n var lastLightComplexity = model.lastBoundBO.getReferenceByName('lastLightComplexity');\n\n if (lastLightComplexity < 2) {\n return;\n }\n\n var program = cellBO.getProgram(); // bind some light settings\n\n var numberOfLights = 0;\n var lights = ren.getLightsByReference();\n\n for (var index = 0; index < lights.length; ++index) {\n var light = lights[index];\n var status = light.getSwitch();\n\n if (status > 0.0) {\n var dColor = light.getColorByReference();\n var intensity = light.getIntensity();\n model.lightColor[0] = dColor[0] * intensity;\n model.lightColor[1] = dColor[1] * intensity;\n model.lightColor[2] = dColor[2] * intensity; // get required info from light\n\n var ld = light.getDirection();\n var transform = ren.getActiveCamera().getViewMatrix();\n\n var newLightDirection = _toConsumableArray(ld);\n\n if (light.lightTypeIsSceneLight()) {\n newLightDirection[0] = transform[0] * ld[0] + transform[1] * ld[1] + transform[2] * ld[2];\n newLightDirection[1] = transform[4] * ld[0] + transform[5] * ld[1] + transform[6] * ld[2];\n newLightDirection[2] = transform[8] * ld[0] + transform[9] * ld[1] + transform[10] * ld[2];\n normalize(newLightDirection);\n }\n\n model.lightDirection[0] = newLightDirection[0];\n model.lightDirection[1] = newLightDirection[1];\n model.lightDirection[2] = newLightDirection[2];\n model.lightHalfAngle[0] = -model.lightDirection[0];\n model.lightHalfAngle[1] = -model.lightDirection[1];\n model.lightHalfAngle[2] = -model.lightDirection[2] + 1.0;\n normalize(model.lightDirection);\n program.setUniform3fArray(\"lightColor\".concat(numberOfLights), model.lightColor);\n program.setUniform3fArray(\"lightDirectionVC\".concat(numberOfLights), model.lightDirection);\n program.setUniform3fArray(\"lightHalfAngleVC\".concat(numberOfLights), model.lightHalfAngle);\n numberOfLights++;\n }\n } // we are done unless we have positional lights\n\n\n if (lastLightComplexity < 3) {\n return;\n } // for lightkit case there are some parameters to set\n\n\n var cam = ren.getActiveCamera();\n var viewTF = cam.getViewMatrix();\n mat4.transpose(viewTF, viewTF);\n numberOfLights = 0;\n\n for (var _index = 0; _index < lights.length; ++_index) {\n var _light = lights[_index];\n\n var _status = _light.getSwitch();\n\n if (_status > 0.0) {\n var lp = _light.getTransformedPosition();\n\n var np = new Float64Array(3);\n vec3.transformMat4(np, lp, viewTF);\n program.setUniform3fArray(\"lightAttenuation\".concat(numberOfLights), _light.getAttenuationValuesByReference());\n program.setUniformi(\"lightPositional\".concat(numberOfLights), _light.getPositional());\n program.setUniformf(\"lightExponent\".concat(numberOfLights), _light.getExponent());\n program.setUniformf(\"lightConeAngle\".concat(numberOfLights), _light.getConeAngle());\n program.setUniform3fArray(\"lightPositionVC\".concat(numberOfLights), [np[0], np[1], np[2]]);\n numberOfLights++;\n }\n }\n };\n\n function safeMatrixMultiply(matrixArray, matrixType, tmpMat) {\n matrixType.identity(tmpMat);\n return matrixArray.reduce(function (res, matrix, index) {\n if (index === 0) {\n return matrix ? matrixType.copy(res, matrix) : matrixType.identity(res);\n }\n\n return matrix ? matrixType.multiply(res, res, matrix) : res;\n }, tmpMat);\n }\n\n publicAPI.setCameraShaderParameters = function (cellBO, ren, actor) {\n var program = cellBO.getProgram(); // [WMVP]C == {world, model, view, projection} coordinates\n // E.g., WCPC == world to projection coordinate transformation\n\n var keyMats = model.openGLCamera.getKeyMatrices(ren);\n var cam = ren.getActiveCamera();\n var camm = model.openGLCamera.getKeyMatrixTime().getMTime();\n var progm = program.getLastCameraMTime();\n var shiftScaleEnabled = cellBO.getCABO().getCoordShiftAndScaleEnabled();\n var inverseShiftScaleMatrix = shiftScaleEnabled ? cellBO.getCABO().getInverseShiftAndScaleMatrix() : null;\n var actorIsIdentity = actor.getIsIdentity();\n var actMats = actorIsIdentity ? {\n mcwc: null,\n normalMatrix: null\n } : model.openGLActor.getKeyMatrices();\n\n if (actor.getCoordinateSystem() === CoordinateSystem.DISPLAY) {\n var size = model.openGLRenderer.getTiledSizeAndOrigin();\n mat4.identity(model.tmpMat4);\n model.tmpMat4[0] = 2.0 / size.usize;\n model.tmpMat4[12] = -1.0;\n model.tmpMat4[5] = 2.0 / size.vsize;\n model.tmpMat4[13] = -1.0;\n mat4.multiply(model.tmpMat4, model.tmpMat4, inverseShiftScaleMatrix);\n program.setUniformMatrix('MCPCMatrix', model.tmpMat4);\n } else {\n program.setUniformMatrix('MCPCMatrix', safeMatrixMultiply([keyMats.wcpc, actMats.mcwc, inverseShiftScaleMatrix], mat4, model.tmpMat4));\n }\n\n if (program.isUniformUsed('MCVCMatrix')) {\n program.setUniformMatrix('MCVCMatrix', safeMatrixMultiply([keyMats.wcvc, actMats.mcwc, inverseShiftScaleMatrix], mat4, model.tmpMat4));\n }\n\n if (program.isUniformUsed('normalMatrix')) {\n program.setUniformMatrix3x3('normalMatrix', safeMatrixMultiply([keyMats.normalMatrix, actMats.normalMatrix], mat3, model.tmpMat3));\n }\n\n if (progm !== camm) {\n if (program.isUniformUsed('cameraParallel')) {\n program.setUniformi('cameraParallel', cam.getParallelProjection());\n }\n\n program.setLastCameraMTime(camm);\n }\n\n if (!actorIsIdentity) {\n // reset the cam mtime as actor modified the shader values\n program.setLastCameraMTime(0);\n }\n };\n\n publicAPI.setPropertyShaderParameters = function (cellBO, ren, actor) {\n var program = cellBO.getProgram();\n var ppty = actor.getProperty();\n var opacity = ppty.getOpacity();\n var aColor = model.drawingEdges ? ppty.getEdgeColorByReference() : ppty.getAmbientColorByReference();\n var dColor = model.drawingEdges ? ppty.getEdgeColorByReference() : ppty.getDiffuseColorByReference();\n var aIntensity = model.drawingEdges ? 1.0 : ppty.getAmbient();\n var dIntensity = model.drawingEdges ? 0.0 : ppty.getDiffuse();\n var sIntensity = model.drawingEdges ? 0.0 : ppty.getSpecular();\n var specularPower = ppty.getSpecularPower();\n program.setUniformf('opacityUniform', opacity);\n program.setUniform3fArray('ambientColorUniform', aColor);\n program.setUniform3fArray('diffuseColorUniform', dColor);\n program.setUniformf('ambient', aIntensity);\n program.setUniformf('diffuse', dIntensity); // we are done unless we have lighting\n\n var lastLightComplexity = model.lastBoundBO.getReferenceByName('lastLightComplexity');\n\n if (lastLightComplexity < 1) {\n return;\n }\n\n var sColor = ppty.getSpecularColorByReference();\n program.setUniform3fArray('specularColorUniform', sColor);\n program.setUniformf('specularPowerUniform', specularPower);\n program.setUniformf('specular', sIntensity); // now set the backface properties if we have them\n\n if (program.isUniformUsed('ambientIntensityBF')) {\n ppty = actor.getBackfaceProperty();\n opacity = ppty.getOpacity();\n aColor = ppty.getAmbientColor();\n aIntensity = ppty.getAmbient();\n dColor = ppty.getDiffuseColor();\n dIntensity = ppty.getDiffuse();\n sColor = ppty.getSpecularColor();\n sIntensity = ppty.getSpecular();\n program.setUniformf('ambientIntensityBF', aIntensity);\n program.setUniformf('diffuseIntensityBF', dIntensity);\n program.setUniformf('opacityUniformBF', opacity);\n program.setUniform3fArray('ambientColorUniformBF', aColor);\n program.setUniform3fArray('diffuseColorUniformBF', dColor); // we are done unless we have lighting\n\n if (lastLightComplexity < 1) {\n return;\n }\n\n program.setUniformf('specularIntensityBF', sIntensity);\n program.setUniform3fArray('specularColorUniformBF', sColor);\n program.setUniformf('specularPowerUniformBF', specularPower);\n }\n };\n\n publicAPI.updateMaximumPointCellIds = function (ren, actor) {\n var _model$selectionWebGL, _model$selectionWebGL2, _model$selectionWebGL3, _model$selectionWebGL4;\n\n var selector = model.openGLRenderer.getSelector();\n\n if (!selector) {\n return;\n }\n\n if ((_model$selectionWebGL = model.selectionWebGLIdsToVTKIds) !== null && _model$selectionWebGL !== void 0 && (_model$selectionWebGL2 = _model$selectionWebGL.points) !== null && _model$selectionWebGL2 !== void 0 && _model$selectionWebGL2.length) {\n var length = model.selectionWebGLIdsToVTKIds.points.length;\n selector.setMaximumPointId(length - 1);\n }\n\n if ((_model$selectionWebGL3 = model.selectionWebGLIdsToVTKIds) !== null && _model$selectionWebGL3 !== void 0 && (_model$selectionWebGL4 = _model$selectionWebGL3.cells) !== null && _model$selectionWebGL4 !== void 0 && _model$selectionWebGL4.length) {\n var _length = model.selectionWebGLIdsToVTKIds.cells.length;\n selector.setMaximumCellId(_length - 1);\n }\n\n var fieldAssociation = selector.getFieldAssociation();\n\n if (fieldAssociation === FieldAssociations.FIELD_ASSOCIATION_POINTS) {\n model.pointPicking = true;\n }\n };\n\n publicAPI.renderPieceStart = function (ren, actor) {\n model.primitiveIDOffset = 0;\n model.vertexIDOffset = 0;\n var picking = getPickState(model.openGLRenderer);\n\n if (model.lastSelectionState !== picking) {\n model.selectionStateChanged.modified();\n model.lastSelectionState = picking;\n }\n\n if (model.openGLRenderer.getSelector()) {\n switch (picking) {\n default:\n model.openGLRenderer.getSelector().renderProp(actor);\n }\n } // make sure the BOs are up to date\n\n\n publicAPI.updateBufferObjects(ren, actor); // If we are coloring by texture, then load the texture map.\n // Use Map as indicator, because texture hangs around.\n\n if (model.renderable.getColorTextureMap()) {\n model.internalColorTexture.activate();\n } // Bind the OpenGL, this is shared between the different primitive/cell types.\n\n\n model.lastBoundBO = null;\n };\n\n publicAPI.renderPieceDraw = function (ren, actor) {\n var representation = actor.getProperty().getRepresentation();\n var drawSurfaceWithEdges = actor.getProperty().getEdgeVisibility() && representation === Representation.SURFACE;\n var selector = model.openGLRenderer.getSelector(); // If we are picking points, we need to tell it to the helper\n\n var pointPicking = selector && selector.getFieldAssociation() === FieldAssociations.FIELD_ASSOCIATION_POINTS && (model.lastSelectionState === PassTypes.ID_LOW24 || model.lastSelectionState === PassTypes.ID_HIGH24); // for every primitive type\n\n for (var i = primTypes.Start; i < primTypes.End; i++) {\n model.primitives[i].setPointPicking(pointPicking);\n var cabo = model.primitives[i].getCABO();\n\n if (cabo.getElementCount()) {\n // are we drawing edges\n model.drawingEdges = drawSurfaceWithEdges && (i === primTypes.TrisEdges || i === primTypes.TriStripsEdges);\n\n if (!model.drawingEdges || !model.renderDepth) {\n model.lastBoundBO = model.primitives[i];\n model.primitiveIDOffset += model.primitives[i].drawArrays(ren, actor, representation, publicAPI);\n model.vertexIDOffset += model.primitives[i].getCABO().getElementCount();\n }\n }\n }\n };\n\n publicAPI.renderPieceFinish = function (ren, actor) {\n if (model.LastBoundBO) {\n model.LastBoundBO.getVAO().release();\n }\n\n if (model.renderable.getColorTextureMap()) {\n model.internalColorTexture.deactivate();\n }\n };\n\n publicAPI.renderPiece = function (ren, actor) {\n // Make sure that we have been properly initialized.\n // if (ren.getRenderWindow().checkAbortStatus()) {\n // return;\n // }\n publicAPI.invokeEvent(StartEvent);\n\n if (!model.renderable.getStatic()) {\n model.renderable.update();\n }\n\n model.currentInput = model.renderable.getInputData();\n publicAPI.invokeEvent(EndEvent);\n\n if (!model.currentInput) {\n vtkErrorMacro('No input!');\n return;\n } // if there are no points then we are done\n\n\n if (!model.currentInput.getPoints || !model.currentInput.getPoints().getNumberOfValues()) {\n return;\n } // apply faceCulling\n\n\n var gl = model.context;\n var backfaceCulling = actor.getProperty().getBackfaceCulling();\n var frontfaceCulling = actor.getProperty().getFrontfaceCulling();\n\n if (!backfaceCulling && !frontfaceCulling) {\n model._openGLRenderWindow.disableCullFace();\n } else if (frontfaceCulling) {\n model._openGLRenderWindow.enableCullFace();\n\n gl.cullFace(gl.FRONT);\n } else {\n model._openGLRenderWindow.enableCullFace();\n\n gl.cullFace(gl.BACK);\n }\n\n publicAPI.renderPieceStart(ren, actor);\n publicAPI.renderPieceDraw(ren, actor);\n publicAPI.renderPieceFinish(ren, actor);\n };\n\n publicAPI.computeBounds = function (ren, actor) {\n if (!publicAPI.getInput()) {\n uninitializeBounds(model.bounds);\n return;\n }\n\n model.bounds = publicAPI.getInput().getBounds();\n };\n\n publicAPI.updateBufferObjects = function (ren, actor) {\n // Rebuild buffers if needed\n if (publicAPI.getNeedToRebuildBufferObjects(ren, actor)) {\n publicAPI.buildBufferObjects(ren, actor);\n }\n };\n\n publicAPI.getNeedToRebuildBufferObjects = function (ren, actor) {\n // first do a coarse check\n // Note that the actor's mtime includes it's properties mtime\n var vmtime = model.VBOBuildTime.getMTime();\n\n if (vmtime < publicAPI.getMTime() || vmtime < model.renderable.getMTime() || vmtime < actor.getMTime() || vmtime < model.currentInput.getMTime()) {\n return true;\n }\n\n return false;\n };\n\n publicAPI.buildBufferObjects = function (ren, actor) {\n var poly = model.currentInput;\n\n if (poly === null) {\n return;\n }\n\n model.renderable.mapScalars(poly, 1.0);\n var c = model.renderable.getColorMapColors();\n model.haveCellScalars = false;\n var scalarMode = model.renderable.getScalarMode();\n\n if (model.renderable.getScalarVisibility()) {\n // We must figure out how the scalars should be mapped to the polydata.\n if ((scalarMode === ScalarMode.USE_CELL_DATA || scalarMode === ScalarMode.USE_CELL_FIELD_DATA || scalarMode === ScalarMode.USE_FIELD_DATA || !poly.getPointData().getScalars()) && scalarMode !== ScalarMode.USE_POINT_FIELD_DATA && c) {\n model.haveCellScalars = true;\n }\n } // Do we have normals?\n\n\n var n = actor.getProperty().getInterpolation() !== Shading.FLAT ? poly.getPointData().getNormals() : null;\n\n if (n === null && poly.getCellData().getNormals()) {\n model.haveCellNormals = true;\n n = poly.getCellData().getNormals();\n } // rebuild the VBO if the data has changed we create a string for the VBO what\n // can change the VBO? points normals tcoords colors so what can change those?\n // the input data is clearly one as it can change all four items tcoords may\n // haveTextures or not colors may change based on quite a few mapping\n // parameters in the mapper\n\n\n var representation = actor.getProperty().getRepresentation();\n var tcoords = poly.getPointData().getTCoords();\n\n if (!model.openGLActor.getActiveTextures()) {\n tcoords = null;\n } // handle color mapping via texture\n\n\n if (model.renderable.getColorCoordinates()) {\n tcoords = model.renderable.getColorCoordinates();\n\n if (!model.internalColorTexture) {\n model.internalColorTexture = vtkOpenGLTexture.newInstance();\n }\n\n var tex = model.internalColorTexture; // the following 4 lines allow for NPOT textures\n\n tex.setMinificationFilter(Filter.NEAREST);\n tex.setMagnificationFilter(Filter.NEAREST);\n tex.setWrapS(Wrap.CLAMP_TO_EDGE);\n tex.setWrapT(Wrap.CLAMP_TO_EDGE);\n tex.setOpenGLRenderWindow(model._openGLRenderWindow);\n var input = model.renderable.getColorTextureMap();\n var ext = input.getExtent();\n var inScalars = input.getPointData().getScalars();\n tex.create2DFromRaw(ext[1] - ext[0] + 1, ext[3] - ext[2] + 1, inScalars.getNumberOfComponents(), inScalars.getDataType(), inScalars.getData());\n tex.activate();\n tex.sendParameters();\n tex.deactivate();\n }\n\n var toString = \"\".concat(poly.getMTime(), \"A\").concat(representation, \"B\").concat(poly.getMTime()) + \"C\".concat(n ? n.getMTime() : 1, \"D\").concat(c ? c.getMTime() : 1) + \"E\".concat(actor.getProperty().getEdgeVisibility()) + \"F\".concat(tcoords ? tcoords.getMTime() : 1);\n\n if (model.VBOBuildString !== toString) {\n // Build the VBOs\n var points = poly.getPoints();\n var options = {\n points: points,\n normals: n,\n tcoords: tcoords,\n colors: c,\n cellOffset: 0,\n vertexOffset: 0,\n // Used to keep track of vertex ids across primitives for selection\n haveCellScalars: model.haveCellScalars,\n haveCellNormals: model.haveCellNormals,\n customAttributes: model.renderable.getCustomShaderAttributes().map(function (arrayName) {\n return poly.getPointData().getArrayByName(arrayName);\n })\n };\n\n if (model.renderable.getPopulateSelectionSettings()) {\n model.selectionWebGLIdsToVTKIds = {\n points: null,\n cells: null\n };\n }\n\n var primitives = [{\n inRep: 'verts',\n cells: poly.getVerts()\n }, {\n inRep: 'lines',\n cells: poly.getLines()\n }, {\n inRep: 'polys',\n cells: poly.getPolys()\n }, {\n inRep: 'strips',\n cells: poly.getStrips()\n }, {\n inRep: 'polys',\n cells: poly.getPolys()\n }, {\n inRep: 'strips',\n cells: poly.getStrips()\n }];\n var drawSurfaceWithEdges = // TODO: false if picking\n actor.getProperty().getEdgeVisibility() && representation === Representation.SURFACE;\n\n for (var i = primTypes.Start; i < primTypes.End; i++) {\n if (i !== primTypes.TrisEdges && i !== primTypes.TriStripsEdges) {\n options.cellOffset += model.primitives[i].getCABO().createVBO(primitives[i].cells, primitives[i].inRep, representation, options, model.selectionWebGLIdsToVTKIds);\n options.vertexOffset += model.primitives[i].getCABO().getElementCount();\n } else {\n // if we have edge visibility build the edge VBOs\n if (drawSurfaceWithEdges) {\n options.cellOffset += model.primitives[i].getCABO().createVBO(primitives[i].cells, primitives[i].inRep, Representation.WIREFRAME, _objectSpread(_objectSpread({}, options), {}, {\n tcoords: null,\n colors: null,\n haveCellScalars: false,\n haveCellNormals: false\n }), model.selectionWebGLIdsToVTKIds);\n options.vertexOffset += model.primitives[i].getCABO().getElementCount();\n } else {\n // otherwise free them\n model.primitives[i].releaseGraphicsResources();\n }\n }\n }\n\n if (model.renderable.getPopulateSelectionSettings()) {\n model.renderable.setSelectionWebGLIdsToVTKIds(model.selectionWebGLIdsToVTKIds);\n publicAPI.updateMaximumPointCellIds();\n }\n\n model.VBOBuildTime.modified();\n model.VBOBuildString = toString;\n }\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n context: null,\n VBOBuildTime: 0,\n VBOBuildString: null,\n primitives: null,\n primTypes: null,\n shaderRebuildString: null,\n tmpMat4: null,\n ambientColor: [],\n // used internally\n diffuseColor: [],\n // used internally\n specularColor: [],\n // used internally\n lightColor: [],\n // used internally\n lightHalfAngle: [],\n // used internally\n lightDirection: [],\n // used internally\n lastHaveSeenDepthRequest: false,\n haveSeenDepthRequest: false,\n lastSelectionState: PassTypes.MIN_KNOWN_PASS - 1,\n selectionStateChanged: null,\n selectionWebGLIdsToVTKIds: null,\n pointPicking: false\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Inheritance\n\n vtkViewNode.extend(publicAPI, model, initialValues);\n vtkReplacementShaderMapper.implementReplaceShaderCoincidentOffset(publicAPI, model, initialValues);\n model.primitives = [];\n model.primTypes = primTypes;\n model.tmpMat3 = mat3.identity(new Float64Array(9));\n model.tmpMat4 = mat4.identity(new Float64Array(16));\n\n for (var i = primTypes.Start; i < primTypes.End; i++) {\n model.primitives[i] = vtkHelper.newInstance();\n model.primitives[i].setPrimitiveType(i);\n model.primitives[i].set({\n lastLightComplexity: 0,\n lastLightCount: 0,\n lastSelectionPass: false\n }, true);\n } // Build VTK API\n\n\n setGet(publicAPI, model, ['context']);\n model.VBOBuildTime = {};\n obj(model.VBOBuildTime, {\n mtime: 0\n });\n model.selectionStateChanged = {};\n obj(model.selectionStateChanged, {\n mtime: 0\n }); // Object methods\n\n vtkOpenGLPolyDataMapper(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = newInstance$1(extend, 'vtkOpenGLPolyDataMapper'); // ----------------------------------------------------------------------------\n\nvar vtkOpenGLPolyDataMapper$1 = {\n newInstance: newInstance,\n extend: extend\n}; // Register ourself to OpenGL backend if imported\n\nregisterOverride('vtkMapper', newInstance);\n\nexport { vtkOpenGLPolyDataMapper$1 as default, extend, newInstance };\n","import _defineProperty from '@babel/runtime/helpers/defineProperty';\nimport { mat3, mat4 } from 'gl-matrix';\nimport { newInstance as newInstance$1, obj, vtkErrorMacro as vtkErrorMacro$1 } from '../../macros.js';\nimport vtkBufferObject from './BufferObject.js';\nimport vtkHardwareSelector from './HardwareSelector.js';\nimport vtkProperty from '../Core/Property.js';\nimport vtkOpenGLPolyDataMapper from './PolyDataMapper.js';\nimport vtkShaderProgram from './ShaderProgram.js';\nimport { registerOverride } from './ViewNodeFactory.js';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nvar vtkErrorMacro = vtkErrorMacro$1;\nvar Representation = vtkProperty.Representation;\nvar ObjectType = vtkBufferObject.ObjectType;\nvar PassTypes = vtkHardwareSelector.PassTypes;\nvar StartEvent = {\n type: 'StartEvent'\n};\nvar EndEvent = {\n type: 'EndEvent'\n}; // ----------------------------------------------------------------------------\n// vtkOpenGLSphereMapper methods\n// ----------------------------------------------------------------------------\n\nfunction vtkOpenGLGlyph3DMapper(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkOpenGLGlyph3DMapper'); // Capture 'parentClass' api for internal use\n\n var superClass = _objectSpread({}, publicAPI);\n\n publicAPI.renderPiece = function (ren, actor) {\n publicAPI.invokeEvent(StartEvent);\n\n if (!model.renderable.getStatic()) {\n model.renderable.update();\n }\n\n model.currentInput = model.renderable.getInputData(1);\n publicAPI.invokeEvent(EndEvent);\n\n if (!model.currentInput) {\n vtkErrorMacro('No input!');\n return;\n } // if there are no points then we are done\n\n\n if (!model.currentInput.getPoints || !model.currentInput.getPoints().getNumberOfValues()) {\n return;\n } // apply faceCulling\n\n\n var gl = model.context;\n\n if (model._openGLRenderWindow.getWebgl2()) {\n model.hardwareSupport = true;\n model.extension = null;\n } else if (!model.extension) {\n model.extension = model.context.getExtension('ANGLE_instanced_arrays');\n model.hardwareSupport = !!model.extension;\n } // to test without extension support uncomment the next two lines\n // model.extension = null;\n // model.hardwareSupport = !!model.extension;\n\n\n var backfaceCulling = actor.getProperty().getBackfaceCulling();\n var frontfaceCulling = actor.getProperty().getFrontfaceCulling();\n\n if (!backfaceCulling && !frontfaceCulling) {\n model._openGLRenderWindow.disableCullFace();\n } else if (frontfaceCulling) {\n model._openGLRenderWindow.enableCullFace();\n\n gl.cullFace(gl.FRONT);\n } else {\n model._openGLRenderWindow.enableCullFace();\n\n gl.cullFace(gl.BACK);\n }\n\n publicAPI.renderPieceStart(ren, actor);\n publicAPI.renderPieceDraw(ren, actor);\n publicAPI.renderPieceFinish(ren, actor);\n };\n\n publicAPI.multiply4x4WithOffset = function (out, a, b, off) {\n var a00 = a[0];\n var a01 = a[1];\n var a02 = a[2];\n var a03 = a[3];\n var a10 = a[4];\n var a11 = a[5];\n var a12 = a[6];\n var a13 = a[7];\n var a20 = a[8];\n var a21 = a[9];\n var a22 = a[10];\n var a23 = a[11];\n var a30 = a[12];\n var a31 = a[13];\n var a32 = a[14];\n var a33 = a[15]; // Cache only the current line of the second matrix\n\n var b0 = b[off];\n var b1 = b[off + 1];\n var b2 = b[off + 2];\n var b3 = b[off + 3];\n out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[off + 4];\n b1 = b[off + 5];\n b2 = b[off + 6];\n b3 = b[off + 7];\n out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[off + 8];\n b1 = b[off + 9];\n b2 = b[off + 10];\n b3 = b[off + 11];\n out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[off + 12];\n b1 = b[off + 13];\n b2 = b[off + 14];\n b3 = b[off + 15];\n out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n };\n\n publicAPI.replaceShaderNormal = function (shaders, ren, actor) {\n if (model.hardwareSupport) {\n var lastLightComplexity = model.lastBoundBO.getReferenceByName('lastLightComplexity');\n\n if (lastLightComplexity > 0) {\n var VSSource = shaders.Vertex;\n\n if (model.lastBoundBO.getCABO().getNormalOffset()) {\n VSSource = vtkShaderProgram.substitute(VSSource, '//VTK::Normal::Dec', ['attribute vec3 normalMC;', 'attribute mat3 gNormal;', 'uniform mat3 normalMatrix;', 'varying vec3 normalVCVSOutput;']).result;\n VSSource = vtkShaderProgram.substitute(VSSource, '//VTK::Normal::Impl', ['normalVCVSOutput = normalMatrix * gNormal * normalMC;']).result;\n }\n\n shaders.Vertex = VSSource;\n }\n }\n\n superClass.replaceShaderNormal(shaders, ren, actor);\n };\n\n publicAPI.replaceShaderColor = function (shaders, ren, actor) {\n if (model.hardwareSupport && model.renderable.getColorArray()) {\n var VSSource = shaders.Vertex;\n var GSSource = shaders.Geometry;\n var FSSource = shaders.Fragment;\n var lastLightComplexity = model.lastBoundBO.getReferenceByName('lastLightComplexity'); // create the material/color property declarations, and VS implementation\n // these are always defined\n\n var colorDec = ['uniform float ambient;', 'uniform float diffuse;', 'uniform float specular;', 'uniform float opacityUniform; // the fragment opacity']; // add more for specular\n\n if (lastLightComplexity) {\n colorDec = colorDec.concat(['uniform vec3 specularColorUniform;', 'uniform float specularPowerUniform;']);\n } // now handle the more complex fragment shader implementation\n // the following are always defined variables. We start\n // by assigning a default value from the uniform\n\n\n var colorImpl = ['vec3 ambientColor;', ' vec3 diffuseColor;', ' float opacity;'];\n\n if (lastLightComplexity) {\n colorImpl = colorImpl.concat([' vec3 specularColor;', ' float specularPower;']);\n }\n\n colorImpl = colorImpl.concat([' opacity = opacityUniform;']);\n\n if (lastLightComplexity) {\n colorImpl = colorImpl.concat([' specularColor = specularColorUniform;', ' specularPower = specularPowerUniform;']);\n }\n\n if (!model.drawingEdges) {\n colorDec = colorDec.concat(['varying vec4 vertexColorVSOutput;']);\n VSSource = vtkShaderProgram.substitute(VSSource, '//VTK::Color::Dec', ['attribute vec4 gColor;', 'varying vec4 vertexColorVSOutput;']).result;\n VSSource = vtkShaderProgram.substitute(VSSource, '//VTK::Color::Impl', ['vertexColorVSOutput = gColor;']).result;\n GSSource = vtkShaderProgram.substitute(GSSource, '//VTK::Color::Dec', ['in vec4 vertexColorVSOutput[];', 'out vec4 vertexColorGSOutput;']).result;\n GSSource = vtkShaderProgram.substitute(GSSource, '//VTK::Color::Impl', ['vertexColorGSOutput = vertexColorVSOutput[i];']).result;\n colorImpl = colorImpl.concat([' diffuseColor = vertexColorVSOutput.rgb;', ' ambientColor = vertexColorVSOutput.rgb;', ' opacity = opacity*vertexColorVSOutput.a;']);\n }\n\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Color::Impl', colorImpl).result;\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Color::Dec', colorDec).result;\n shaders.Vertex = VSSource;\n shaders.Geometry = GSSource;\n shaders.Fragment = FSSource;\n }\n\n superClass.replaceShaderColor(shaders, ren, actor);\n };\n\n publicAPI.replaceShaderPositionVC = function (shaders, ren, actor) {\n if (model.hardwareSupport) {\n var VSSource = shaders.Vertex; // do we need the vertex in the shader in View Coordinates\n\n var lastLightComplexity = model.lastBoundBO.getReferenceByName('lastLightComplexity');\n\n if (lastLightComplexity > 0) {\n VSSource = vtkShaderProgram.substitute(VSSource, '//VTK::PositionVC::Impl', ['vec4 gVertexMC = gMatrix * vertexMC;', 'vertexVCVSOutput = MCVCMatrix * gVertexMC;', ' gl_Position = MCPCMatrix * gVertexMC;']).result;\n VSSource = vtkShaderProgram.substitute(VSSource, '//VTK::Camera::Dec', ['attribute mat4 gMatrix;', 'uniform mat4 MCPCMatrix;', 'uniform mat4 MCVCMatrix;']).result;\n } else {\n VSSource = vtkShaderProgram.substitute(VSSource, '//VTK::Camera::Dec', ['attribute mat4 gMatrix;', 'uniform mat4 MCPCMatrix;']).result;\n VSSource = vtkShaderProgram.substitute(VSSource, '//VTK::PositionVC::Impl', ['vec4 gVertexMC = gMatrix * vertexMC;', ' gl_Position = MCPCMatrix * gVertexMC;']).result;\n }\n\n shaders.Vertex = VSSource;\n }\n\n superClass.replaceShaderPositionVC(shaders, ren, actor);\n };\n\n publicAPI.replaceShaderPicking = function (shaders, ren, actor) {\n if (model.hardwareSupport) {\n var FSSource = shaders.Fragment;\n var VSSource = shaders.Vertex;\n VSSource = vtkShaderProgram.substitute(VSSource, '//VTK::Picking::Dec', ['attribute vec3 mapperIndexVS;', 'varying vec3 mapperIndexVSOutput;']).result;\n VSSource = vtkShaderProgram.substitute(VSSource, '//VTK::Picking::Impl', ' mapperIndexVSOutput = mapperIndexVS;').result;\n shaders.Vertex = VSSource;\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Picking::Dec', ['varying vec3 mapperIndexVSOutput;', 'uniform vec3 mapperIndex;', 'uniform int picking;']).result;\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Picking::Impl', [' vec4 pickColor = picking == 2 ? vec4(mapperIndexVSOutput,1.0) : vec4(mapperIndex,1.0);', ' gl_FragData[0] = picking != 0 ? pickColor : gl_FragData[0];']).result;\n shaders.Fragment = FSSource;\n } else {\n superClass.replaceShaderPicking(shaders, ren, actor);\n }\n };\n\n publicAPI.updateGlyphShaderParameters = function (normalMatrixUsed, mcvcMatrixUsed, cellBO, carray, garray, narray, p, selector) {\n var program = cellBO.getProgram();\n\n if (normalMatrixUsed) {\n var a = model.normalMatrix;\n var b = narray;\n var ofs = p * 9;\n var out = model.tmpMat3;\n var a00 = a[0];\n var a01 = a[1];\n var a02 = a[2];\n var a10 = a[3];\n var a11 = a[4];\n var a12 = a[5];\n var a20 = a[6];\n var a21 = a[7];\n var a22 = a[8];\n var b00 = b[ofs];\n var b01 = b[ofs + 1];\n var b02 = b[ofs + 2];\n var b10 = b[ofs + 3];\n var b11 = b[ofs + 4];\n var b12 = b[ofs + 5];\n var b20 = b[ofs + 6];\n var b21 = b[ofs + 7];\n var b22 = b[ofs + 8];\n out[0] = b00 * a00 + b01 * a10 + b02 * a20;\n out[1] = b00 * a01 + b01 * a11 + b02 * a21;\n out[2] = b00 * a02 + b01 * a12 + b02 * a22;\n out[3] = b10 * a00 + b11 * a10 + b12 * a20;\n out[4] = b10 * a01 + b11 * a11 + b12 * a21;\n out[5] = b10 * a02 + b11 * a12 + b12 * a22;\n out[6] = b20 * a00 + b21 * a10 + b22 * a20;\n out[7] = b20 * a01 + b21 * a11 + b22 * a21;\n out[8] = b20 * a02 + b21 * a12 + b22 * a22;\n program.setUniformMatrix3x3('normalMatrix', model.tmpMat3);\n }\n\n publicAPI.multiply4x4WithOffset(model.tmpMat4, model.mcpcMatrix, garray, p * 16);\n program.setUniformMatrix('MCPCMatrix', model.tmpMat4);\n\n if (mcvcMatrixUsed) {\n publicAPI.multiply4x4WithOffset(model.tmpMat4, model.mcvcMatrix, garray, p * 16);\n program.setUniformMatrix('MCVCMatrix', model.tmpMat4);\n } // set color\n\n\n if (carray) {\n var cdata = carray.getData();\n model.tmpColor[0] = cdata[p * 4] / 255.0;\n model.tmpColor[1] = cdata[p * 4 + 1] / 255.0;\n model.tmpColor[2] = cdata[p * 4 + 2] / 255.0;\n program.setUniform3fArray('ambientColorUniform', model.tmpColor);\n program.setUniform3fArray('diffuseColorUniform', model.tmpColor);\n }\n\n if (selector) {\n program.setUniform3fArray('mapperIndex', selector.getPropColorValue());\n }\n };\n\n publicAPI.renderPieceDraw = function (ren, actor) {\n var representation = actor.getProperty().getRepresentation();\n var gl = model.context;\n var drawSurfaceWithEdges = actor.getProperty().getEdgeVisibility() && representation === Representation.SURFACE; // [WMVP]C == {world, model, view, projection} coordinates\n // E.g., WCPC == world to projection coordinate transformation\n\n var keyMats = model.openGLCamera.getKeyMatrices(ren);\n var actMats = model.openGLActor.getKeyMatrices(); // precompute the actor+camera mats once\n\n mat3.multiply(model.normalMatrix, keyMats.normalMatrix, actMats.normalMatrix);\n mat4.multiply(model.mcpcMatrix, keyMats.wcpc, actMats.mcwc);\n mat4.multiply(model.mcvcMatrix, keyMats.wcvc, actMats.mcwc);\n var garray = model.renderable.getMatrixArray();\n var narray = model.renderable.getNormalArray();\n var carray = model.renderable.getColorArray();\n var numPts = garray.length / 16;\n var compositePass = false;\n\n if (model.openGLRenderer.getSelector()) {\n if (model.openGLRenderer.getSelector().getCurrentPass() === PassTypes.COMPOSITE_INDEX_PASS) {\n compositePass = true;\n }\n } // for every primitive type\n\n\n for (var i = model.primTypes.Start; i < model.primTypes.End; i++) {\n // if there are entries\n var cabo = model.primitives[i].getCABO();\n\n if (cabo.getElementCount()) {\n // are we drawing edges\n model.drawingEdges = drawSurfaceWithEdges && (i === model.primTypes.TrisEdges || i === model.primTypes.TriStripsEdges);\n model.lastBoundBO = model.primitives[i];\n model.primitives[i].updateShaders(ren, actor, publicAPI);\n var program = model.primitives[i].getProgram();\n var mode = model.primitives[i].getOpenGLMode(representation);\n var normalMatrixUsed = program.isUniformUsed('normalMatrix');\n var mcvcMatrixUsed = program.isUniformUsed('MCVCMatrix');\n\n if (model.hardwareSupport) {\n if (model.extension) {\n model.extension.drawArraysInstancedANGLE(mode, 0, cabo.getElementCount(), numPts);\n } else {\n gl.drawArraysInstanced(mode, 0, cabo.getElementCount(), numPts);\n }\n } else {\n // draw the array multiple times with different cam matrix\n for (var p = 0; p < numPts; ++p) {\n if (compositePass) {\n model.openGLRenderer.getSelector().renderCompositeIndex(p);\n }\n\n publicAPI.updateGlyphShaderParameters(normalMatrixUsed, mcvcMatrixUsed, model.primitives[i], carray, garray, narray, p, compositePass ? model.openGLRenderer.getSelector() : null);\n gl.drawArrays(mode, 0, cabo.getElementCount());\n }\n }\n }\n }\n };\n\n publicAPI.setMapperShaderParameters = function (cellBO, ren, actor) {\n if (cellBO.getCABO().getElementCount() && (model.glyphBOBuildTime.getMTime() > cellBO.getAttributeUpdateTime().getMTime() || cellBO.getShaderSourceTime().getMTime() > cellBO.getAttributeUpdateTime().getMTime())) {\n if (cellBO.getProgram().isAttributeUsed('gMatrix')) {\n if (!cellBO.getVAO().addAttributeMatrixWithDivisor(cellBO.getProgram(), model.matrixBuffer, 'gMatrix', 0, 64, model.context.FLOAT, 4, false, 1)) {\n vtkErrorMacro('Error setting gMatrix in shader VAO.');\n }\n } else {\n cellBO.getVAO().removeAttributeArray('gMatrix');\n }\n\n if (cellBO.getProgram().isAttributeUsed('gNormal')) {\n if (!cellBO.getVAO().addAttributeMatrixWithDivisor(cellBO.getProgram(), model.normalBuffer, 'gNormal', 0, 36, model.context.FLOAT, 3, false, 1)) {\n vtkErrorMacro('Error setting gNormal in shader VAO.');\n }\n } else {\n cellBO.getVAO().removeAttributeArray('gNormal');\n }\n\n if (cellBO.getProgram().isAttributeUsed('gColor')) {\n if (!cellBO.getVAO().addAttributeArrayWithDivisor(cellBO.getProgram(), model.colorBuffer, 'gColor', 0, 4, model.context.UNSIGNED_BYTE, 4, true, 1, false)) {\n vtkErrorMacro('Error setting gColor in shader VAO.');\n }\n } else {\n cellBO.getVAO().removeAttributeArray('gColor');\n }\n\n if (cellBO.getProgram().isAttributeUsed('mapperIndexVS')) {\n if (!cellBO.getVAO().addAttributeArrayWithDivisor(cellBO.getProgram(), model.pickBuffer, 'mapperIndexVS', 0, 4, model.context.UNSIGNED_BYTE, 4, true, 1, false)) {\n vtkErrorMacro('Error setting mapperIndexVS in shader VAO.');\n }\n } else {\n cellBO.getVAO().removeAttributeArray('mapperIndexVS');\n }\n\n superClass.setMapperShaderParameters(cellBO, ren, actor);\n cellBO.getAttributeUpdateTime().modified();\n return;\n }\n\n superClass.setMapperShaderParameters(cellBO, ren, actor);\n };\n\n publicAPI.getNeedToRebuildBufferObjects = function (ren, actor) {\n model.renderable.buildArrays(); // first do a coarse check\n // Note that the actor's mtime includes it's properties mtime\n\n var vmtime = model.VBOBuildTime.getMTime();\n\n if (vmtime < model.renderable.getBuildTime().getMTime()) {\n return true;\n }\n\n return superClass.getNeedToRebuildBufferObjects(ren, actor);\n };\n\n publicAPI.getNeedToRebuildShaders = function (cellBO, ren, actor) {\n if (superClass.getNeedToRebuildShaders(cellBO, ren, actor) || cellBO.getShaderSourceTime().getMTime() < model.renderable.getMTime() || cellBO.getShaderSourceTime().getMTime() < model.currentInput.getMTime()) {\n return true;\n }\n\n return false;\n };\n\n publicAPI.buildBufferObjects = function (ren, actor) {\n if (model.hardwareSupport) {\n // update the buffer objects if needed\n var garray = model.renderable.getMatrixArray();\n var narray = model.renderable.getNormalArray();\n var carray = model.renderable.getColorArray();\n\n if (!model.matrixBuffer) {\n model.matrixBuffer = vtkBufferObject.newInstance();\n model.matrixBuffer.setOpenGLRenderWindow(model._openGLRenderWindow);\n model.normalBuffer = vtkBufferObject.newInstance();\n model.normalBuffer.setOpenGLRenderWindow(model._openGLRenderWindow);\n model.colorBuffer = vtkBufferObject.newInstance();\n model.colorBuffer.setOpenGLRenderWindow(model._openGLRenderWindow);\n model.pickBuffer = vtkBufferObject.newInstance();\n model.pickBuffer.setOpenGLRenderWindow(model._openGLRenderWindow);\n }\n\n if (model.renderable.getBuildTime().getMTime() > model.glyphBOBuildTime.getMTime()) {\n model.matrixBuffer.upload(garray, ObjectType.ARRAY_BUFFER);\n model.normalBuffer.upload(narray, ObjectType.ARRAY_BUFFER);\n\n if (carray) {\n model.colorBuffer.upload(carray.getData(), ObjectType.ARRAY_BUFFER);\n } else {\n model.colorBuffer.releaseGraphicsResources();\n }\n\n var numPts = garray.length / 16;\n var parray = new Uint8Array(4 * numPts);\n\n for (var i = 0; i < numPts; ++i) {\n var value = i + 1;\n var offset = i * 4;\n parray[offset] = value % 256;\n value -= parray[offset];\n value /= 256;\n parray[offset + 1] = value % 256;\n value -= parray[offset + 1];\n value /= 256;\n parray[offset + 2] = value % 256;\n parray[offset + 3] = 255;\n }\n\n model.pickBuffer.upload(parray, ObjectType.ARRAY_BUFFER);\n model.glyphBOBuildTime.modified();\n }\n }\n\n return superClass.buildBufferObjects(ren, actor);\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n normalMatrix: null,\n mcpcMatrix: null,\n mcwcMatrix: null\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Inheritance\n\n vtkOpenGLPolyDataMapper.extend(publicAPI, model, initialValues);\n model.tmpMat3 = mat3.identity(new Float64Array(9));\n model.normalMatrix = mat3.identity(new Float64Array(9));\n model.mcpcMatrix = mat4.identity(new Float64Array(16));\n model.mcvcMatrix = mat4.identity(new Float64Array(16));\n model.tmpColor = [];\n model.glyphBOBuildTime = {};\n obj(model.glyphBOBuildTime, {\n mtime: 0\n }); // Object methods\n\n vtkOpenGLGlyph3DMapper(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = newInstance$1(extend, 'vtkOpenGLGlyph3DMapper'); // ----------------------------------------------------------------------------\n\nvar vtkGlyph3DMapper = {\n newInstance: newInstance,\n extend: extend\n}; // Register ourself to OpenGL backend if imported\n\nregisterOverride('vtkGlyph3DMapper', newInstance);\n\nexport { vtkGlyph3DMapper as default, extend, newInstance };\n","import { mat3, mat4 } from 'gl-matrix';\nimport { newInstance as newInstance$1, obj, setGet, get, vtkErrorMacro as vtkErrorMacro$1 } from '../../macros.js';\nimport vtkDataArray from '../../Common/Core/DataArray.js';\nimport vtkHelper from './Helper.js';\nimport vtkViewNode from '../SceneGraph/ViewNode.js';\nimport vtkOpenGLTexture from './Texture.js';\nimport { Representation } from '../Core/Property/Constants.js';\nimport { registerOverride } from './ViewNodeFactory.js';\n\nvar vtkErrorMacro = vtkErrorMacro$1; // ----------------------------------------------------------------------------\n// vtkOpenGLSkybox methods\n// ----------------------------------------------------------------------------\n\nfunction vtkOpenGLSkybox(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkOpenGLSkybox'); // Builds myself.\n\n publicAPI.buildPass = function (prepass) {\n if (prepass) {\n model.openGLRenderer = publicAPI.getFirstAncestorOfType('vtkOpenGLRenderer');\n model._openGLRenderWindow = model.openGLRenderer.getParent();\n model.context = model._openGLRenderWindow.getContext();\n model.tris.setOpenGLRenderWindow(model._openGLRenderWindow);\n model.openGLTexture.setOpenGLRenderWindow(model._openGLRenderWindow);\n var ren = model.openGLRenderer.getRenderable();\n model.openGLCamera = model.openGLRenderer.getViewNodeFor(ren.getActiveCamera());\n }\n };\n\n publicAPI.queryPass = function (prepass, renderPass) {\n if (prepass) {\n if (!model.renderable || !model.renderable.getVisibility()) {\n return;\n }\n\n renderPass.incrementOpaqueActorCount();\n }\n };\n\n publicAPI.opaquePass = function (prepass, renderPass) {\n if (prepass && !model.openGLRenderer.getSelector()) {\n publicAPI.updateBufferObjects();\n model.context.depthMask(true);\n\n model._openGLRenderWindow.getShaderCache().readyShaderProgram(model.tris.getProgram());\n\n model.openGLTexture.render(model._openGLRenderWindow);\n var texUnit = model.openGLTexture.getTextureUnit();\n model.tris.getProgram().setUniformi('sbtexture', texUnit);\n var ren = model.openGLRenderer.getRenderable();\n var keyMats = model.openGLCamera.getKeyMatrices(ren);\n var imat = new Float64Array(16);\n mat4.invert(imat, keyMats.wcpc);\n model.tris.getProgram().setUniformMatrix('IMCPCMatrix', imat);\n\n if (model.lastFormat === 'box') {\n var camPos = ren.getActiveCamera().getPosition();\n model.tris.getProgram().setUniform3f('camPos', camPos[0], camPos[1], camPos[2]);\n }\n\n model.tris.getVAO().bind(); // draw polygons\n\n model.context.drawArrays(model.context.TRIANGLES, 0, model.tris.getCABO().getElementCount());\n model.tris.getVAO().release();\n model.openGLTexture.deactivate();\n }\n };\n\n publicAPI.updateBufferObjects = function () {\n // build the VBO if needed, only happens once\n if (!model.tris.getCABO().getElementCount()) {\n var ptsArray = new Float32Array(12);\n\n for (var i = 0; i < 4; i++) {\n ptsArray[i * 3] = i % 2 * 2 - 1.0;\n ptsArray[i * 3 + 1] = i > 1 ? 1.0 : -1.0;\n ptsArray[i * 3 + 2] = 1.0;\n }\n\n var points = vtkDataArray.newInstance({\n numberOfComponents: 3,\n values: ptsArray\n });\n points.setName('points');\n var cellArray = new Uint16Array(8);\n cellArray[0] = 3;\n cellArray[1] = 0;\n cellArray[2] = 1;\n cellArray[3] = 3;\n cellArray[4] = 3;\n cellArray[5] = 0;\n cellArray[6] = 3;\n cellArray[7] = 2;\n var cells = vtkDataArray.newInstance({\n numberOfComponents: 1,\n values: cellArray\n });\n model.tris.getCABO().createVBO(cells, 'polys', Representation.SURFACE, {\n points: points,\n cellOffset: 0\n });\n } // update the program?\n\n\n if (model.renderable.getFormat() !== model.lastFormat) {\n model.lastFormat = model.renderable.getFormat();\n\n if (model.lastFormat === 'box') {\n // we invert Y below because opengl is messed up!\n // Cube Maps have been specified to follow the RenderMan\n // specification (for whatever reason), and RenderMan\n // assumes the images' origin being in the upper left,\n // contrary to the usual OpenGL behaviour of having the\n // image origin in the lower left. That's why things get\n // swapped in the Y direction. It totally breaks with the usual\n // OpenGL semantics and doesn't make sense at all.\n // But now we're stuck with it. From\n // https://stackoverflow.com/questions/11685608/convention-of-faces-in-opengl-cubemapping\n //\n model.tris.setProgram(model._openGLRenderWindow.getShaderCache().readyShaderProgramArray(\"//VTK::System::Dec\\n attribute vec3 vertexMC;\\n uniform mat4 IMCPCMatrix;\\n varying vec3 TexCoords;\\n void main () {\\n gl_Position = vec4(vertexMC.xyz, 1.0);\\n vec4 wpos = IMCPCMatrix * gl_Position;\\n TexCoords = wpos.xyz/wpos.w;\\n }\", \"//VTK::System::Dec\\n //VTK::Output::Dec\\n varying vec3 TexCoords;\\n uniform samplerCube sbtexture;\\n uniform vec3 camPos;\\n void main () {\\n // skybox looks from inside out\\n // which means we have to adjust\\n // our tcoords. Otherwise text would\\n // be flipped\\n vec3 tc = normalize(TexCoords - camPos);\\n if (abs(tc.z) < max(abs(tc.x),abs(tc.y)))\\n {\\n tc = vec3(1.0, 1.0, -1.0) * tc;\\n }\\n else\\n {\\n tc = vec3(-1.0, 1.0, 1.0) * tc;\\n }\\n gl_FragData[0] = textureCube(sbtexture, tc);\\n }\", ''));\n }\n\n if (model.lastFormat === 'background') {\n // maps the texture to the window\n model.tris.setProgram(model._openGLRenderWindow.getShaderCache().readyShaderProgramArray(\"//VTK::System::Dec\\n attribute vec3 vertexMC;\\n uniform mat4 IMCPCMatrix;\\n varying vec2 TexCoords;\\n void main () {\\n gl_Position = vec4(vertexMC.xyz, 1.0);\\n vec4 wpos = IMCPCMatrix * gl_Position;\\n TexCoords = vec2(vertexMC.x, vertexMC.y)*0.5 + 0.5;\\n }\", \"//VTK::System::Dec\\n //VTK::Output::Dec\\n varying vec2 TexCoords;\\n uniform sampler2D sbtexture;\\n void main () {\\n gl_FragData[0] = texture2D(sbtexture, TexCoords);\\n }\", ''));\n }\n\n model.tris.getShaderSourceTime().modified();\n model.tris.getVAO().bind();\n\n if (!model.tris.getVAO().addAttributeArray(model.tris.getProgram(), model.tris.getCABO(), 'vertexMC', model.tris.getCABO().getVertexOffset(), model.tris.getCABO().getStride(), model.context.FLOAT, 3, model.context.FALSE)) {\n vtkErrorMacro('Error setting vertexMC in shader VAO.');\n }\n } // set/update the texture map if needed\n\n\n var tmaps = model.renderable.getTextures();\n\n if (!tmaps.length) {\n vtkErrorMacro('vtkSkybox requires a texture map');\n }\n\n if (model.openGLTexture.getRenderable() !== tmaps[0]) {\n model.openGLTexture.releaseGraphicsResources(model._openGLRenderWindow);\n model.openGLTexture.setRenderable(tmaps[0]);\n }\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n context: null\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Inheritance\n\n vtkViewNode.extend(publicAPI, model, initialValues);\n model.openGLTexture = vtkOpenGLTexture.newInstance();\n model.tris = vtkHelper.newInstance();\n model.keyMatrixTime = {};\n obj(model.keyMatrixTime, {\n mtime: 0\n });\n model.keyMatrices = {\n normalMatrix: mat3.identity(new Float64Array(9)),\n mcwc: mat4.identity(new Float64Array(16))\n }; // Build VTK API\n\n setGet(publicAPI, model, ['context']);\n get(publicAPI, model, ['activeTextures']); // Object methods\n\n vtkOpenGLSkybox(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = newInstance$1(extend); // ----------------------------------------------------------------------------\n\nvar vtkSkybox = {\n newInstance: newInstance,\n extend: extend\n}; // Register ourself to OpenGL backend if imported\n\nregisterOverride('vtkSkybox', newInstance);\n\nexport { vtkSkybox as default, extend, newInstance };\n","import _defineProperty from '@babel/runtime/helpers/defineProperty';\nimport { mat4 } from 'gl-matrix';\nimport { ObjectType } from './BufferObject/Constants.js';\nimport { newInstance as newInstance$1, vtkErrorMacro as vtkErrorMacro$1 } from '../../macros.js';\nimport vtkBufferObject from './BufferObject.js';\nimport { r as radiansFromDegrees } from '../../Common/Core/Math/index.js';\nimport vtkShaderProgram from './ShaderProgram.js';\nimport vtkOpenGLPolyDataMapper from './PolyDataMapper.js';\nimport { v as vtkSphereMapperVS } from './glsl/vtkSphereMapperVS.glsl.js';\nimport { v as vtkPolyDataFS } from './glsl/vtkPolyDataFS.glsl.js';\nimport { registerOverride } from './ViewNodeFactory.js';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nvar vtkErrorMacro = vtkErrorMacro$1; // ----------------------------------------------------------------------------\n// vtkOpenGLSphereMapper methods\n// ----------------------------------------------------------------------------\n\nfunction vtkOpenGLSphereMapper(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkOpenGLSphereMapper'); // Capture 'parentClass' api for internal use\n\n var superClass = _objectSpread({}, publicAPI);\n\n publicAPI.getShaderTemplate = function (shaders, ren, actor) {\n shaders.Vertex = vtkSphereMapperVS;\n shaders.Fragment = vtkPolyDataFS;\n shaders.Geometry = '';\n };\n\n publicAPI.replaceShaderValues = function (shaders, ren, actor) {\n var VSSource = shaders.Vertex;\n var FSSource = shaders.Fragment;\n VSSource = vtkShaderProgram.substitute(VSSource, '//VTK::Camera::Dec', ['uniform mat4 VCPCMatrix;\\n', 'uniform mat4 MCVCMatrix;']).result;\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::PositionVC::Dec', ['varying vec4 vertexVCVSOutput;']).result; // we create vertexVC below, so turn off the default\n // implementation\n\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::PositionVC::Impl', ['vec4 vertexVC = vertexVCVSOutput;\\n']).result; // for lights kit and positional the VCPC matrix is already defined\n // so don't redefine it\n\n var replacement = ['uniform float invertedDepth;\\n', 'uniform int cameraParallel;\\n', 'varying float radiusVCVSOutput;\\n', 'varying vec3 centerVCVSOutput;\\n', 'uniform mat4 VCPCMatrix;\\n'];\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Normal::Dec', replacement).result;\n var fragString = '';\n\n if (model.context.getExtension('EXT_frag_depth')) {\n fragString = 'gl_FragDepthEXT = (pos.z / pos.w + 1.0) / 2.0;\\n';\n }\n\n if (model._openGLRenderWindow.getWebgl2()) {\n fragString = 'gl_FragDepth = (pos.z / pos.w + 1.0) / 2.0;\\n';\n }\n\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Depth::Impl', [// compute the eye position and unit direction\n ' vec3 EyePos;\\n', ' vec3 EyeDir;\\n', ' if (cameraParallel != 0) {\\n', ' EyePos = vec3(vertexVC.x, vertexVC.y, vertexVC.z + 3.0*radiusVCVSOutput);\\n', ' EyeDir = vec3(0.0,0.0,-1.0); }\\n', ' else {\\n', ' EyeDir = vertexVC.xyz;\\n', ' EyePos = vec3(0.0,0.0,0.0);\\n', ' float lengthED = length(EyeDir);\\n', ' EyeDir = normalize(EyeDir);\\n', // we adjust the EyePos to be closer if it is too far away\n // to prevent floating point precision noise\n ' if (lengthED > radiusVCVSOutput*3.0) {\\n', ' EyePos = vertexVC.xyz - EyeDir*3.0*radiusVCVSOutput; }\\n', ' }\\n', // translate to Sphere center\n ' EyePos = EyePos - centerVCVSOutput;\\n', // scale to radius 1.0\n ' EyePos = EyePos/radiusVCVSOutput;\\n', // find the intersection\n ' float b = 2.0*dot(EyePos,EyeDir);\\n', ' float c = dot(EyePos,EyePos) - 1.0;\\n', ' float d = b*b - 4.0*c;\\n', ' vec3 normalVCVSOutput = vec3(0.0,0.0,1.0);\\n', ' if (d < 0.0) { discard; }\\n', ' else {\\n', ' float t = (-b - invertedDepth*sqrt(d))*0.5;\\n', // compute the normal, for unit sphere this is just\n // the intersection point\n ' normalVCVSOutput = invertedDepth*normalize(EyePos + t*EyeDir);\\n', // compute the intersection point in VC\n ' vertexVC.xyz = normalVCVSOutput*radiusVCVSOutput + centerVCVSOutput;\\n', ' }\\n', // compute the pixel's depth\n // ' normalVCVSOutput = vec3(0,0,1);\\n'\n ' vec4 pos = VCPCMatrix * vertexVC;\\n', fragString]).result; // Strip out the normal line -- the normal is computed as part of the depth\n\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Normal::Impl', '').result;\n\n if (model.haveSeenDepthRequest) {\n // special depth impl\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::ZBuffer::Impl', ['if (depthRequest == 1) {', 'float computedZ = (pos.z / pos.w + 1.0) / 2.0;', 'float iz = floor(computedZ * 65535.0 + 0.1);', 'float rf = floor(iz/256.0)/255.0;', 'float gf = mod(iz,256.0)/255.0;', 'gl_FragData[0] = vec4(rf, gf, 0.0, 1.0); }']).result;\n }\n\n shaders.Vertex = VSSource;\n shaders.Fragment = FSSource;\n superClass.replaceShaderValues(shaders, ren, actor);\n };\n\n publicAPI.setMapperShaderParameters = function (cellBO, ren, actor) {\n if (cellBO.getCABO().getElementCount() && (model.VBOBuildTime > cellBO.getAttributeUpdateTime().getMTime() || cellBO.getShaderSourceTime().getMTime() > cellBO.getAttributeUpdateTime().getMTime()) && cellBO.getProgram().isAttributeUsed('offsetMC')) {\n if (!cellBO.getVAO().addAttributeArray(cellBO.getProgram(), cellBO.getCABO(), 'offsetMC', 12, // 12:this->VBO->ColorOffset+sizeof(float)\n cellBO.getCABO().getStride(), model.context.FLOAT, 2, false)) {\n vtkErrorMacro(\"Error setting 'offsetMC' in shader VAO.\");\n }\n }\n\n if (cellBO.getProgram().isUniformUsed('invertedDepth')) {\n cellBO.getProgram().setUniformf('invertedDepth', model.invert ? -1.0 : 1.0);\n }\n\n superClass.setMapperShaderParameters(cellBO, ren, actor);\n };\n\n publicAPI.setCameraShaderParameters = function (cellBO, ren, actor) {\n var program = cellBO.getProgram();\n var cam = ren.getActiveCamera();\n var keyMats = model.openGLCamera.getKeyMatrices(ren);\n\n if (program.isUniformUsed('VCPCMatrix')) {\n program.setUniformMatrix('VCPCMatrix', keyMats.vcpc);\n }\n\n if (program.isUniformUsed('MCVCMatrix')) {\n if (!actor.getIsIdentity()) {\n var actMats = model.openGLActor.getKeyMatrices();\n var tmp4 = new Float64Array(16);\n mat4.multiply(tmp4, keyMats.wcvc, actMats.mcwc);\n program.setUniformMatrix('MCVCMatrix', tmp4);\n } else {\n program.setUniformMatrix('MCVCMatrix', keyMats.wcvc);\n }\n }\n\n if (program.isUniformUsed('cameraParallel')) {\n cellBO.getProgram().setUniformi('cameraParallel', cam.getParallelProjection());\n }\n };\n\n publicAPI.getOpenGLMode = function (rep, type) {\n return model.context.TRIANGLES;\n };\n\n publicAPI.buildBufferObjects = function (ren, actor) {\n var poly = model.currentInput;\n\n if (poly === null) {\n return;\n }\n\n model.renderable.mapScalars(poly, 1.0);\n var c = model.renderable.getColorMapColors();\n var vbo = model.primitives[model.primTypes.Tris].getCABO();\n var pointData = poly.getPointData();\n var points = poly.getPoints();\n var numPoints = points.getNumberOfPoints();\n var pointArray = points.getData();\n var pointSize = 5; // x,y,z,orientation1,orientation2\n\n var scales = null;\n\n if (model.renderable.getScaleArray() != null && pointData.hasArray(model.renderable.getScaleArray())) {\n scales = pointData.getArray(model.renderable.getScaleArray()).getData();\n }\n\n var colorData = null;\n var colorComponents = 0;\n var packedUCVBO = null;\n\n if (c) {\n colorComponents = c.getNumberOfComponents();\n vbo.setColorOffset(0);\n vbo.setColorBOStride(4);\n colorData = c.getData();\n packedUCVBO = new Uint8Array(3 * numPoints * 4);\n\n if (!vbo.getColorBO()) {\n vbo.setColorBO(vtkBufferObject.newInstance());\n }\n\n vbo.getColorBO().setOpenGLRenderWindow(model._openGLRenderWindow);\n } else if (vbo.getColorBO()) {\n vbo.setColorBO(null);\n }\n\n vbo.setColorComponents(colorComponents);\n var packedVBO = new Float32Array(pointSize * numPoints * 3);\n vbo.setStride(pointSize * 4);\n var cos30 = Math.cos(radiansFromDegrees(30.0));\n var pointIdx = 0;\n var colorIdx = 0; //\n // Generate points and point data for sides\n //\n\n var vboIdx = 0;\n var ucIdx = 0;\n\n for (var i = 0; i < numPoints; ++i) {\n var radius = model.renderable.getRadius();\n\n if (scales) {\n radius = scales[i];\n }\n\n pointIdx = i * 3;\n packedVBO[vboIdx++] = pointArray[pointIdx++];\n packedVBO[vboIdx++] = pointArray[pointIdx++];\n packedVBO[vboIdx++] = pointArray[pointIdx++];\n packedVBO[vboIdx++] = -2.0 * radius * cos30;\n packedVBO[vboIdx++] = -radius;\n\n if (colorData) {\n colorIdx = i * colorComponents;\n packedUCVBO[ucIdx++] = colorData[colorIdx];\n packedUCVBO[ucIdx++] = colorData[colorIdx + 1];\n packedUCVBO[ucIdx++] = colorData[colorIdx + 2];\n packedUCVBO[ucIdx++] = colorData[colorIdx + 3];\n }\n\n pointIdx = i * 3;\n packedVBO[vboIdx++] = pointArray[pointIdx++];\n packedVBO[vboIdx++] = pointArray[pointIdx++];\n packedVBO[vboIdx++] = pointArray[pointIdx++];\n packedVBO[vboIdx++] = 2.0 * radius * cos30;\n packedVBO[vboIdx++] = -radius;\n\n if (colorData) {\n packedUCVBO[ucIdx++] = colorData[colorIdx];\n packedUCVBO[ucIdx++] = colorData[colorIdx + 1];\n packedUCVBO[ucIdx++] = colorData[colorIdx + 2];\n packedUCVBO[ucIdx++] = colorData[colorIdx + 3];\n }\n\n pointIdx = i * 3;\n packedVBO[vboIdx++] = pointArray[pointIdx++];\n packedVBO[vboIdx++] = pointArray[pointIdx++];\n packedVBO[vboIdx++] = pointArray[pointIdx++];\n packedVBO[vboIdx++] = 0.0;\n packedVBO[vboIdx++] = 2.0 * radius;\n\n if (colorData) {\n packedUCVBO[ucIdx++] = colorData[colorIdx];\n packedUCVBO[ucIdx++] = colorData[colorIdx + 1];\n packedUCVBO[ucIdx++] = colorData[colorIdx + 2];\n packedUCVBO[ucIdx++] = colorData[colorIdx + 3];\n }\n }\n\n vbo.setElementCount(vboIdx / pointSize);\n vbo.upload(packedVBO, ObjectType.ARRAY_BUFFER);\n\n if (c) {\n vbo.getColorBO().upload(packedUCVBO, ObjectType.ARRAY_BUFFER);\n }\n\n model.VBOBuildTime.modified();\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Inheritance\n\n vtkOpenGLPolyDataMapper.extend(publicAPI, model, initialValues); // Object methods\n\n vtkOpenGLSphereMapper(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = newInstance$1(extend, 'vtkOpenGLSphereMapper'); // ----------------------------------------------------------------------------\n\nvar vtkSphereMapper = {\n newInstance: newInstance,\n extend: extend\n}; // Register ourself to OpenGL backend if imported\n\nregisterOverride('vtkSphereMapper', newInstance);\n\nexport { vtkSphereMapper as default, extend, newInstance };\n","var vtkSphereMapperVS = \"//VTK::System::Dec\\n\\n/*=========================================================================\\n\\n Program: Visualization Toolkit\\n Module: vtkSphereMapperVS.glsl\\n\\n Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen\\n All rights reserved.\\n See Copyright.txt or http://www.kitware.com/Copyright.htm for details.\\n\\n This software is distributed WITHOUT ANY WARRANTY; without even\\n the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR\\n PURPOSE. See the above copyright notice for more information.\\n\\n=========================================================================*/\\n// this shader implements imposters in OpenGL for Spheres\\n\\nattribute vec4 vertexMC;\\nattribute vec2 offsetMC;\\n\\n// optional normal declaration\\n//VTK::Normal::Dec\\n\\n// Texture coordinates\\n//VTK::TCoord::Dec\\n\\nuniform mat3 normalMatrix; // transform model coordinate directions to view coordinates\\n\\n// material property values\\n//VTK::Color::Dec\\n\\n// clipping plane vars\\n//VTK::Clip::Dec\\n\\n// camera and actor matrix values\\n//VTK::Camera::Dec\\n\\nvarying vec4 vertexVCVSOutput;\\nvarying float radiusVCVSOutput;\\nvarying vec3 centerVCVSOutput;\\n\\nuniform int cameraParallel;\\n\\nvoid main()\\n{\\n //VTK::Color::Impl\\n\\n //VTK::Normal::Impl\\n\\n //VTK::TCoord::Impl\\n\\n //VTK::Clip::Impl\\n\\n // compute the projected vertex position\\n vertexVCVSOutput = MCVCMatrix * vertexMC;\\n centerVCVSOutput = vertexVCVSOutput.xyz;\\n radiusVCVSOutput = length(offsetMC)*0.5;\\n\\n // make the triangle face the camera\\n if (cameraParallel == 0)\\n {\\n vec3 dir = normalize(-vertexVCVSOutput.xyz);\\n vec3 base2 = normalize(cross(dir,vec3(1.0,0.0,0.0)));\\n vec3 base1 = cross(base2,dir);\\n vertexVCVSOutput.xyz = vertexVCVSOutput.xyz + offsetMC.x*base1 + offsetMC.y*base2;\\n }\\n else\\n {\\n // add in the offset\\n vertexVCVSOutput.xy = vertexVCVSOutput.xy + offsetMC;\\n }\\n\\n gl_Position = VCPCMatrix * vertexVCVSOutput;\\n}\\n\";\n\nexport { vtkSphereMapperVS as v };\n","import _defineProperty from '@babel/runtime/helpers/defineProperty';\nimport { mat4, mat3 } from 'gl-matrix';\nimport { ObjectType } from './BufferObject/Constants.js';\nimport { newInstance as newInstance$1, vtkErrorMacro as vtkErrorMacro$1 } from '../../macros.js';\nimport vtkBufferObject from './BufferObject.js';\nimport { v as vtkStickMapperVS } from './glsl/vtkStickMapperVS.glsl.js';\nimport { v as vtkPolyDataFS } from './glsl/vtkPolyDataFS.glsl.js';\nimport vtkShaderProgram from './ShaderProgram.js';\nimport vtkOpenGLPolyDataMapper from './PolyDataMapper.js';\nimport { registerOverride } from './ViewNodeFactory.js';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nvar vtkErrorMacro = vtkErrorMacro$1; // ----------------------------------------------------------------------------\n// vtkOpenGLStickMapper methods\n// ----------------------------------------------------------------------------\n\nfunction vtkOpenGLStickMapper(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkOpenGLStickMapper'); // Capture 'parentClass' api for internal use\n\n var superClass = _objectSpread({}, publicAPI);\n\n publicAPI.getShaderTemplate = function (shaders, ren, actor) {\n shaders.Vertex = vtkStickMapperVS;\n shaders.Fragment = vtkPolyDataFS;\n shaders.Geometry = '';\n };\n\n publicAPI.replaceShaderValues = function (shaders, ren, actor) {\n var VSSource = shaders.Vertex;\n var FSSource = shaders.Fragment;\n VSSource = vtkShaderProgram.substitute(VSSource, '//VTK::Camera::Dec', ['uniform mat4 VCPCMatrix;\\n', 'uniform mat4 MCVCMatrix;']).result;\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::PositionVC::Dec', 'varying vec4 vertexVCVSOutput;').result; // we create vertexVC below, so turn off the default\n // implementation\n\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::PositionVC::Impl', ' vec4 vertexVC = vertexVCVSOutput;\\n').result; // for lights kit and positional the VCPC matrix is already defined\n // so don't redefine it\n\n var replacement = ['uniform int cameraParallel;\\n', 'varying float radiusVCVSOutput;\\n', 'varying vec3 orientVCVSOutput;\\n', 'varying float lengthVCVSOutput;\\n', 'varying vec3 centerVCVSOutput;\\n', 'uniform mat4 VCPCMatrix;\\n'];\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Normal::Dec', replacement).result;\n var fragString = '';\n\n if (model.context.getExtension('EXT_frag_depth')) {\n fragString = ' gl_FragDepthEXT = (pos.z / pos.w + 1.0) / 2.0;\\n';\n }\n\n if (model._openGLRenderWindow.getWebgl2()) {\n fragString = 'gl_FragDepth = (pos.z / pos.w + 1.0) / 2.0;\\n';\n } // see https://www.cl.cam.ac.uk/teaching/1999/AGraphHCI/SMAG/node2.html\n\n\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Depth::Impl', [// compute the eye position and unit direction\n ' vec3 EyePos;\\n', ' vec3 EyeDir;\\n', ' if (cameraParallel != 0) {\\n', ' EyePos = vec3(vertexVC.x, vertexVC.y, vertexVC.z + 3.0*radiusVCVSOutput);\\n', ' EyeDir = vec3(0.0,0.0,-1.0); }\\n', ' else {\\n', ' EyeDir = vertexVC.xyz;\\n', ' EyePos = vec3(0.0,0.0,0.0);\\n', ' float lengthED = length(EyeDir);\\n', ' EyeDir = normalize(EyeDir);\\n', // we adjust the EyePos to be closer if it is too far away\n // to prevent floating point precision noise\n ' if (lengthED > radiusVCVSOutput*3.0) {\\n', ' EyePos = vertexVC.xyz - EyeDir*3.0*radiusVCVSOutput; }\\n', ' }\\n', // translate to Stick center\n ' EyePos = EyePos - centerVCVSOutput;\\n', // rotate to new basis\n // base1, base2, orientVC\n ' vec3 base1;\\n', ' if (abs(orientVCVSOutput.z) < 0.99) {\\n', ' base1 = normalize(cross(orientVCVSOutput,vec3(0.0,0.0,1.0))); }\\n', ' else {\\n', ' base1 = normalize(cross(orientVCVSOutput,vec3(0.0,1.0,0.0))); }\\n', ' vec3 base2 = cross(orientVCVSOutput,base1);\\n', ' EyePos = vec3(dot(EyePos,base1),dot(EyePos,base2),dot(EyePos,orientVCVSOutput));\\n', ' EyeDir = vec3(dot(EyeDir,base1),dot(EyeDir,base2),dot(EyeDir,orientVCVSOutput));\\n', // scale by radius\n ' EyePos = EyePos/radiusVCVSOutput;\\n', // find the intersection\n ' float a = EyeDir.x*EyeDir.x + EyeDir.y*EyeDir.y;\\n', ' float b = 2.0*(EyePos.x*EyeDir.x + EyePos.y*EyeDir.y);\\n', ' float c = EyePos.x*EyePos.x + EyePos.y*EyePos.y - 1.0;\\n', ' float d = b*b - 4.0*a*c;\\n', ' vec3 normalVCVSOutput = vec3(0.0,0.0,1.0);\\n', ' if (d < 0.0) { discard; }\\n', ' else {\\n', ' float t = (-b - sqrt(d))/(2.0*a);\\n', ' float tz = EyePos.z + t*EyeDir.z;\\n', ' vec3 iPoint = EyePos + t*EyeDir;\\n', ' if (abs(iPoint.z)*radiusVCVSOutput > lengthVCVSOutput*0.5) {\\n', // test for end cap\n ' float t2 = (-b + sqrt(d))/(2.0*a);\\n', ' float tz2 = EyePos.z + t2*EyeDir.z;\\n', ' if (tz2*radiusVCVSOutput > lengthVCVSOutput*0.5 || tz*radiusVCVSOutput < -0.5*lengthVCVSOutput) { discard; }\\n', ' else {\\n', ' normalVCVSOutput = orientVCVSOutput;\\n', ' float t3 = (lengthVCVSOutput*0.5/radiusVCVSOutput - EyePos.z)/EyeDir.z;\\n', ' iPoint = EyePos + t3*EyeDir;\\n', ' vertexVC.xyz = radiusVCVSOutput*(iPoint.x*base1 + iPoint.y*base2 + iPoint.z*orientVCVSOutput) + centerVCVSOutput;\\n', ' }\\n', ' }\\n', ' else {\\n', // The normal is the iPoint.xy rotated back into VC\n ' normalVCVSOutput = iPoint.x*base1 + iPoint.y*base2;\\n', // rescale rerotate and translate\n ' vertexVC.xyz = radiusVCVSOutput*(normalVCVSOutput + iPoint.z*orientVCVSOutput) + centerVCVSOutput;\\n', ' }\\n', ' }\\n', // ' vec3 normalVC = vec3(0.0,0.0,1.0);\\n'\n // compute the pixel's depth\n ' vec4 pos = VCPCMatrix * vertexVC;\\n', fragString]).result; // Strip out the normal line -- the normal is computed as part of the depth\n\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Normal::Impl', '').result;\n\n if (model.haveSeenDepthRequest) {\n // special depth impl\n FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::ZBuffer::Impl', ['if (depthRequest == 1) {', 'float computedZ = (pos.z / pos.w + 1.0) / 2.0;', 'float iz = floor(computedZ * 65535.0 + 0.1);', 'float rf = floor(iz/256.0)/255.0;', 'float gf = mod(iz,256.0)/255.0;', 'gl_FragData[0] = vec4(rf, gf, 0.0, 1.0); }']).result;\n }\n\n shaders.Vertex = VSSource;\n shaders.Fragment = FSSource;\n superClass.replaceShaderValues(shaders, ren, actor);\n };\n\n publicAPI.setMapperShaderParameters = function (cellBO, ren, actor) {\n if (cellBO.getCABO().getElementCount() && (model.VBOBuildTime > cellBO.getAttributeUpdateTime().getMTime() || cellBO.getShaderSourceTime().getMTime() > cellBO.getAttributeUpdateTime().getMTime())) {\n if (cellBO.getProgram().isAttributeUsed('orientMC')) {\n if (!cellBO.getVAO().addAttributeArray(cellBO.getProgram(), cellBO.getCABO(), 'orientMC', 12, // after X Y Z\n cellBO.getCABO().getStride(), model.context.FLOAT, 3, false)) {\n vtkErrorMacro(\"Error setting 'orientMC' in shader VAO.\");\n }\n }\n\n if (cellBO.getProgram().isAttributeUsed('offsetMC')) {\n if (!cellBO.getVAO().addAttributeArray(cellBO.getProgram(), cellBO.getCABO().getColorBO(), 'offsetMC', 0, cellBO.getCABO().getColorBOStride(), model.context.UNSIGNED_BYTE, 3, true)) {\n vtkErrorMacro(\"Error setting 'offsetMC' in shader VAO.\");\n }\n }\n\n if (cellBO.getProgram().isAttributeUsed('radiusMC')) {\n if (!cellBO.getVAO().addAttributeArray(cellBO.getProgram(), cellBO.getCABO(), 'radiusMC', 24, // X Y Z OX OY OZ\n cellBO.getCABO().getStride(), model.context.FLOAT, 1, false)) {\n vtkErrorMacro(\"Error setting 'radiusMC' in shader VAO.\");\n }\n }\n }\n\n superClass.setMapperShaderParameters(cellBO, ren, actor);\n };\n\n publicAPI.setCameraShaderParameters = function (cellBO, ren, actor) {\n var program = cellBO.getProgram();\n var cam = ren.getActiveCamera();\n var keyMats = model.openGLCamera.getKeyMatrices(ren);\n\n if (program.isUniformUsed('VCPCMatrix')) {\n program.setUniformMatrix('VCPCMatrix', keyMats.vcpc);\n }\n\n if (!actor.getIsIdentity()) {\n var actMats = model.openGLActor.getKeyMatrices();\n\n if (program.isUniformUsed('MCVCMatrix')) {\n var tmp4 = new Float64Array(16);\n mat4.multiply(tmp4, keyMats.wcvc, actMats.mcwc);\n program.setUniformMatrix('MCVCMatrix', tmp4);\n }\n\n if (program.isUniformUsed('normalMatrix')) {\n var anorms = new Float64Array(9);\n mat3.multiply(anorms, keyMats.normalMatrix, actMats.normalMatrix);\n program.setUniformMatrix3x3('normalMatrix', anorms);\n }\n } else {\n if (program.isUniformUsed('MCVCMatrix')) {\n program.setUniformMatrix('MCVCMatrix', keyMats.wcvc);\n }\n\n if (program.isUniformUsed('normalMatrix')) {\n program.setUniformMatrix3x3('normalMatrix', keyMats.normalMatrix);\n }\n }\n\n if (program.isUniformUsed('cameraParallel')) {\n cellBO.getProgram().setUniformi('cameraParallel', cam.getParallelProjection());\n }\n };\n\n publicAPI.getOpenGLMode = function (rep, type) {\n return model.context.TRIANGLES;\n };\n\n publicAPI.buildBufferObjects = function (ren, actor) {\n var poly = model.currentInput;\n\n if (poly === null) {\n return;\n }\n\n model.renderable.mapScalars(poly, 1.0);\n var c = model.renderable.getColorMapColors();\n var vbo = model.primitives[model.primTypes.Tris].getCABO();\n var pointData = poly.getPointData();\n var points = poly.getPoints();\n var numPoints = points.getNumberOfPoints();\n var pointArray = points.getData();\n var pointSize = 3; // x,y,z\n // three more floats for orientation + 1 for radius\n\n pointSize += 4;\n var colorData = null;\n var colorComponents = 0;\n vbo.setColorBOStride(4);\n\n if (!vbo.getColorBO()) {\n vbo.setColorBO(vtkBufferObject.newInstance());\n }\n\n vbo.getColorBO().setOpenGLRenderWindow(model._openGLRenderWindow);\n\n if (c) {\n colorComponents = c.getNumberOfComponents();\n vbo.setColorOffset(4);\n colorData = c.getData();\n vbo.setColorBOStride(8);\n }\n\n vbo.setColorComponents(colorComponents);\n vbo.setStride(pointSize * 4); // Create a buffer, and copy the data over.\n\n var packedVBO = new Float32Array(pointSize * numPoints * 12);\n var packedUCVBO = new Uint8Array(12 * numPoints * (colorData ? 8 : 4));\n var scales = null;\n var orientationArray = null; //\n // Generate points and point data for sides\n //\n\n if (model.renderable.getScaleArray() != null && pointData.hasArray(model.renderable.getScaleArray())) {\n scales = pointData.getArray(model.renderable.getScaleArray()).getData();\n }\n\n if (model.renderable.getOrientationArray() != null && pointData.hasArray(model.renderable.getOrientationArray())) {\n orientationArray = pointData.getArray(model.renderable.getOrientationArray()).getData();\n } else {\n vtkErrorMacro(['Error setting orientationArray.\\n', 'You have to specify the stick orientation']);\n } // Vertices\n // 013 - 032 - 324 - 453\n //\n // _.4---_.5\n // .-* .-*\n // 2-----3\n // | /|\n // | / |\n // | / |\n // | / |\n // |/ |\n // 0-----1\n //\n // coord for each points\n // 0: 000\n // 1: 100\n // 2: 001\n // 3: 101\n // 4: 011\n // 5: 111\n // prettier-ignore\n\n\n var verticesArray = [0, 1, 3, 0, 3, 2, 2, 3, 5, 2, 5, 4];\n var pointIdx = 0;\n var colorIdx = 0;\n var vboIdx = 0;\n var ucIdx = 0;\n\n for (var i = 0; i < numPoints; ++i) {\n var length = model.renderable.getLength();\n var radius = model.renderable.getRadius();\n\n if (scales) {\n length = scales[i * 2];\n radius = scales[i * 2 + 1];\n }\n\n for (var j = 0; j < verticesArray.length; ++j) {\n pointIdx = i * 3;\n packedVBO[vboIdx++] = pointArray[pointIdx++];\n packedVBO[vboIdx++] = pointArray[pointIdx++];\n packedVBO[vboIdx++] = pointArray[pointIdx++];\n pointIdx = i * 3;\n packedVBO[vboIdx++] = orientationArray[pointIdx++] * length;\n packedVBO[vboIdx++] = orientationArray[pointIdx++] * length;\n packedVBO[vboIdx++] = orientationArray[pointIdx++] * length;\n packedVBO[vboIdx++] = radius;\n packedUCVBO[ucIdx++] = 255 * (verticesArray[j] % 2);\n packedUCVBO[ucIdx++] = verticesArray[j] >= 4 ? 255 : 0;\n packedUCVBO[ucIdx++] = verticesArray[j] >= 2 ? 255 : 0;\n packedUCVBO[ucIdx++] = 255;\n colorIdx = i * colorComponents;\n\n if (colorData) {\n packedUCVBO[ucIdx++] = colorData[colorIdx];\n packedUCVBO[ucIdx++] = colorData[colorIdx + 1];\n packedUCVBO[ucIdx++] = colorData[colorIdx + 2];\n packedUCVBO[ucIdx++] = colorData[colorIdx + 3];\n }\n }\n }\n\n vbo.setElementCount(vboIdx / pointSize);\n vbo.upload(packedVBO, ObjectType.ARRAY_BUFFER);\n vbo.getColorBO().upload(packedUCVBO, ObjectType.ARRAY_BUFFER);\n model.VBOBuildTime.modified();\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Inheritance\n\n vtkOpenGLPolyDataMapper.extend(publicAPI, model, initialValues); // Object methods\n\n vtkOpenGLStickMapper(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = newInstance$1(extend, 'vtkOpenGLStickMapper'); // ----------------------------------------------------------------------------\n\nvar vtkStickMapper = {\n newInstance: newInstance,\n extend: extend\n}; // Register ourself to OpenGL backend if imported\n\nregisterOverride('vtkStickMapper', newInstance);\n\nexport { vtkStickMapper as default, extend, newInstance };\n","var vtkStickMapperVS = \"//VTK::System::Dec\\n\\n/*=========================================================================\\n\\n Program: Visualization Toolkit\\n Module: vtkStickMapperVS.glsl\\n\\n Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen\\n All rights reserved.\\n See Copyright.txt or http://www.kitware.com/Copyright.htm for details.\\n\\n This software is distributed WITHOUT ANY WARRANTY; without even\\n the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR\\n PURPOSE. See the above copyright notice for more information.\\n\\n=========================================================================*/\\n// this shader implements imposters in OpenGL for Sticks\\n\\nattribute vec4 vertexMC;\\nattribute vec3 orientMC;\\nattribute vec4 offsetMC;\\nattribute float radiusMC;\\n\\n// optional normal declaration\\n//VTK::Normal::Dec\\n\\n//VTK::Picking::Dec\\n\\n// Texture coordinates\\n//VTK::TCoord::Dec\\n\\nuniform mat3 normalMatrix; // transform model coordinate directions to view coordinates\\n\\n// material property values\\n//VTK::Color::Dec\\n\\n// clipping plane vars\\n//VTK::Clip::Dec\\n\\n// camera and actor matrix values\\n//VTK::Camera::Dec\\n\\nvarying vec4 vertexVCVSOutput;\\nvarying float radiusVCVSOutput;\\nvarying float lengthVCVSOutput;\\nvarying vec3 centerVCVSOutput;\\nvarying vec3 orientVCVSOutput;\\n\\nuniform int cameraParallel;\\n\\nvoid main()\\n{\\n //VTK::Picking::Impl\\n\\n //VTK::Color::Impl\\n\\n //VTK::Normal::Impl\\n\\n //VTK::TCoord::Impl\\n\\n //VTK::Clip::Impl\\n\\n vertexVCVSOutput = MCVCMatrix * vertexMC;\\n centerVCVSOutput = vertexVCVSOutput.xyz;\\n radiusVCVSOutput = radiusMC;\\n lengthVCVSOutput = length(orientMC);\\n orientVCVSOutput = normalMatrix * normalize(orientMC);\\n\\n // make sure it is pointing out of the screen\\n if (orientVCVSOutput.z < 0.0)\\n {\\n orientVCVSOutput = -orientVCVSOutput;\\n }\\n\\n // make the basis\\n vec3 xbase;\\n vec3 ybase;\\n vec3 dir = vec3(0.0,0.0,1.0);\\n if (cameraParallel == 0)\\n {\\n dir = normalize(-vertexVCVSOutput.xyz);\\n }\\n if (abs(dot(dir,orientVCVSOutput)) == 1.0)\\n {\\n xbase = normalize(cross(vec3(0.0,1.0,0.0),orientVCVSOutput));\\n ybase = cross(xbase,orientVCVSOutput);\\n }\\n else\\n {\\n xbase = normalize(cross(orientVCVSOutput,dir));\\n ybase = cross(orientVCVSOutput,xbase);\\n }\\n\\n vec3 offsets = offsetMC.xyz*2.0-1.0;\\n vertexVCVSOutput.xyz = vertexVCVSOutput.xyz +\\n radiusVCVSOutput*offsets.x*xbase +\\n radiusVCVSOutput*offsets.y*ybase +\\n 0.5*lengthVCVSOutput*offsets.z*orientVCVSOutput;\\n\\n gl_Position = VCPCMatrix * vertexVCVSOutput;\\n}\\n\";\n\nexport { vtkStickMapperVS as v };\n",null,null,null,"import macro from '../../macros.js';\nimport { m as normalize, r as radiansFromDegrees } from '../../Common/Core/Math/index.js';\nimport { vec3 } from 'gl-matrix';\n\nvar LIGHT_TYPES = ['HeadLight', 'CameraLight', 'SceneLight']; // ----------------------------------------------------------------------------\n// vtkLight methods\n// ----------------------------------------------------------------------------\n\nfunction vtkLight(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkLight');\n var tmpVec = new Float64Array(3);\n\n publicAPI.getTransformedPosition = function () {\n if (model.transformMatrix) {\n vec3.transformMat4(tmpVec, model.position, model.transformMatrix);\n } else {\n vec3.set(tmpVec, model.position[0], model.position[1], model.position[2]);\n }\n\n return tmpVec;\n };\n\n publicAPI.getTransformedFocalPoint = function () {\n if (model.transformMatrix) {\n vec3.transformMat4(tmpVec, model.focalPoint, model.transformMatrix);\n } else {\n vec3.set(tmpVec, model.focalPoint[0], model.focalPoint[1], model.focalPoint[2]);\n }\n\n return tmpVec;\n };\n\n publicAPI.getDirection = function () {\n if (model.directionMTime < model.mtime) {\n vec3.sub(model.direction, model.focalPoint, model.position);\n normalize(model.direction);\n model.directionMTime = model.mtime;\n }\n\n return model.direction;\n }; // Sets the direction from a vec3 instead of a focal point\n\n\n publicAPI.setDirection = function (directionVector) {\n var newFocalPoint = new Float64Array(3);\n vec3.sub(newFocalPoint, model.position, directionVector);\n model.focalPoint = newFocalPoint;\n };\n\n publicAPI.setDirectionAngle = function (elevation, azimuth) {\n var elevationRadians = radiansFromDegrees(elevation);\n var azimuthRadians = radiansFromDegrees(azimuth);\n publicAPI.setPosition(Math.cos(elevationRadians) * Math.sin(azimuthRadians), Math.sin(elevationRadians), Math.cos(elevationRadians) * Math.cos(azimuthRadians));\n publicAPI.setFocalPoint(0, 0, 0);\n publicAPI.setPositional(0);\n };\n\n publicAPI.setLightTypeToHeadLight = function () {\n publicAPI.setLightType('HeadLight');\n };\n\n publicAPI.setLightTypeToCameraLight = function () {\n publicAPI.setLightType('CameraLight');\n };\n\n publicAPI.setLightTypeToSceneLight = function () {\n publicAPI.setTransformMatrix(null);\n publicAPI.setLightType('SceneLight');\n };\n\n publicAPI.lightTypeIsHeadLight = function () {\n return model.lightType === 'HeadLight';\n };\n\n publicAPI.lightTypeIsSceneLight = function () {\n return model.lightType === 'SceneLight';\n };\n\n publicAPI.lightTypeIsCameraLight = function () {\n return model.lightType === 'CameraLight';\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n switch: true,\n intensity: 1,\n color: [1, 1, 1],\n position: [0, 0, 1],\n focalPoint: [0, 0, 0],\n positional: false,\n exponent: 1,\n coneAngle: 30,\n coneFalloff: 5,\n attenuationValues: [1, 0, 0],\n transformMatrix: null,\n lightType: 'SceneLight',\n shadowAttenuation: 1,\n direction: [0, 0, 0],\n directionMTime: 0\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Build VTK API\n\n macro.obj(publicAPI, model);\n macro.setGet(publicAPI, model, ['intensity', 'switch', 'positional', 'exponent', 'coneAngle', 'coneFalloff', 'transformMatrix', 'lightType', 'shadowAttenuation', 'attenuationValues']);\n macro.setGetArray(publicAPI, model, ['color', 'position', 'focalPoint', 'attenuationValues'], 3); // Object methods\n\n vtkLight(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkLight'); // ----------------------------------------------------------------------------\n\nvar vtkLight$1 = {\n newInstance: newInstance,\n extend: extend,\n LIGHT_TYPES: LIGHT_TYPES\n};\n\nexport { LIGHT_TYPES, vtkLight$1 as default, extend, newInstance };\n","import macro from '../../macros.js';\n\nvar vtkErrorMacro = macro.vtkErrorMacro;\n\nfunction notImplemented(method) {\n return function () {\n return vtkErrorMacro(\"vtkViewport::\".concat(method, \" - NOT IMPLEMENTED\"));\n };\n} // ----------------------------------------------------------------------------\n// vtkViewport methods\n// ----------------------------------------------------------------------------\n\n\nfunction vtkViewport(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkViewport'); // Public API methods\n\n publicAPI.getViewProps = function () {\n return model.props;\n };\n\n publicAPI.hasViewProp = function (prop) {\n return !!model.props.filter(function (item) {\n return item === prop;\n }).length;\n };\n\n publicAPI.addViewProp = function (prop) {\n if (prop && !publicAPI.hasViewProp(prop)) {\n model.props = model.props.concat(prop);\n }\n };\n\n publicAPI.removeViewProp = function (prop) {\n var newPropList = model.props.filter(function (item) {\n return item !== prop;\n });\n\n if (model.props.length !== newPropList.length) {\n model.props = newPropList;\n }\n };\n\n publicAPI.removeAllViewProps = function () {\n model.props = [];\n }; // this method get all the props including any nested props\n\n\n function gatherProps(prop) {\n var allProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n allProps.push(prop);\n var children = prop.getNestedProps();\n\n if (children && children.length) {\n for (var i = 0; i < children.length; i++) {\n gatherProps(children[i], allProps);\n }\n }\n\n return allProps;\n }\n\n publicAPI.getViewPropsWithNestedProps = function () {\n var allPropsArray = [];\n\n for (var i = 0; i < model.props.length; i++) {\n gatherProps(model.props[i], allPropsArray);\n }\n\n return allPropsArray;\n };\n\n publicAPI.addActor2D = publicAPI.addViewProp;\n\n publicAPI.removeActor2D = function (prop) {\n // VTK way: model.actors2D.RemoveItem(prop);\n publicAPI.removeViewProp(prop);\n };\n\n publicAPI.getActors2D = function () {\n model.actors2D = [];\n model.props.forEach(function (prop) {\n model.actors2D = model.actors2D.concat(prop.getActors2D());\n });\n return model.actors2D;\n };\n\n publicAPI.displayToView = function () {\n return vtkErrorMacro('call displayToView on your view instead');\n };\n\n publicAPI.viewToDisplay = function () {\n return vtkErrorMacro('callviewtodisplay on your view instead');\n };\n\n publicAPI.getSize = function () {\n return vtkErrorMacro('call getSize on your View instead');\n };\n\n publicAPI.normalizedDisplayToProjection = function (x, y, z) {\n // first to normalized viewport\n var nvp = publicAPI.normalizedDisplayToNormalizedViewport(x, y, z); // then to view\n\n return publicAPI.normalizedViewportToProjection(nvp[0], nvp[1], nvp[2]);\n };\n\n publicAPI.normalizedDisplayToNormalizedViewport = function (x, y, z) {\n var scale = [model.viewport[2] - model.viewport[0], model.viewport[3] - model.viewport[1]];\n return [(x - model.viewport[0]) / scale[0], (y - model.viewport[1]) / scale[1], z];\n };\n\n publicAPI.normalizedViewportToProjection = function (x, y, z) {\n return [x * 2.0 - 1.0, y * 2.0 - 1.0, z * 2.0 - 1.0];\n };\n\n publicAPI.projectionToNormalizedDisplay = function (x, y, z) {\n // first to nvp\n var nvp = publicAPI.projectionToNormalizedViewport(x, y, z); // then to ndp\n\n return publicAPI.normalizedViewportToNormalizedDisplay(nvp[0], nvp[1], nvp[2]);\n };\n\n publicAPI.normalizedViewportToNormalizedDisplay = function (x, y, z) {\n var scale = [model.viewport[2] - model.viewport[0], model.viewport[3] - model.viewport[1]];\n return [x * scale[0] + model.viewport[0], y * scale[1] + model.viewport[1], z];\n };\n\n publicAPI.projectionToNormalizedViewport = function (x, y, z) {\n return [(x + 1.0) * 0.5, (y + 1.0) * 0.5, (z + 1.0) * 0.5];\n };\n\n publicAPI.PickPropFrom = notImplemented('PickPropFrom');\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n // _vtkWindow: null,\n background: [0, 0, 0],\n background2: [0.2, 0.2, 0.2],\n gradientBackground: false,\n viewport: [0, 0, 1, 1],\n aspect: [1, 1],\n pixelAspect: [1, 1],\n props: [],\n actors2D: []\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Build VTK API\n\n macro.obj(publicAPI, model);\n macro.event(publicAPI, model, 'event');\n macro.setGetArray(publicAPI, model, ['viewport'], 4);\n macro.setGetArray(publicAPI, model, ['background', 'background2'], 3);\n vtkViewport(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkViewport'); // ----------------------------------------------------------------------------\n\nvar vtkViewport$1 = {\n newInstance: newInstance,\n extend: extend\n};\n\nexport { vtkViewport$1 as default, extend, newInstance };\n","import { mat4, vec3 } from 'gl-matrix';\nimport { newInstance as newInstance$1, get, setGet, getArray, setGetArray, moveToProtected, vtkDebugMacro as vtkDebugMacro$1, vtkErrorMacro as vtkErrorMacro$1, vtkWarningMacro as vtkWarningMacro$1 } from '../../macros.js';\nimport vtkCamera from './Camera.js';\nimport vtkLight from './Light.js';\nimport { Q as areBoundsInitialized, u as uninitializeBounds, r as radiansFromDegrees, d as dot, O as createUninitializedBounds } from '../../Common/Core/Math/index.js';\nimport vtkViewport from './Viewport.js';\nimport vtkBoundingBox from '../../Common/DataModel/BoundingBox.js';\n\nvar vtkDebugMacro = vtkDebugMacro$1,\n vtkErrorMacro = vtkErrorMacro$1,\n vtkWarningMacro = vtkWarningMacro$1;\n\nfunction notImplemented(method) {\n return function () {\n return vtkErrorMacro(\"vtkRenderer::\".concat(method, \" - NOT IMPLEMENTED\"));\n };\n} // ----------------------------------------------------------------------------\n// vtkRenderer methods\n// ----------------------------------------------------------------------------\n\n\nfunction vtkRenderer(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkRenderer'); // Events\n\n var COMPUTE_VISIBLE_PROP_BOUNDS_EVENT = {\n type: 'ComputeVisiblePropBoundsEvent',\n renderer: publicAPI\n };\n var RESET_CAMERA_CLIPPING_RANGE_EVENT = {\n type: 'ResetCameraClippingRangeEvent',\n renderer: publicAPI\n };\n var RESET_CAMERA_EVENT = {\n type: 'ResetCameraEvent',\n renderer: publicAPI\n };\n\n publicAPI.updateCamera = function () {\n if (!model.activeCamera) {\n vtkDebugMacro('No cameras are on, creating one.'); // the get method will automagically create a camera\n // and reset it since one hasn't been specified yet.\n\n publicAPI.getActiveCameraAndResetIfCreated();\n } // update the viewing transformation\n\n\n model.activeCamera.render(publicAPI);\n return true;\n };\n\n publicAPI.updateLightsGeometryToFollowCamera = function () {\n // only update the light's geometry if this Renderer is tracking\n // this lights. That allows one renderer to view the lights that\n // another renderer is setting up.\n var camera = publicAPI.getActiveCameraAndResetIfCreated();\n model.lights.forEach(function (light) {\n if (light.lightTypeIsSceneLight()) ; else if (light.lightTypeIsHeadLight()) {\n // update position and orientation of light to match camera.\n light.setPositionFrom(camera.getPositionByReference());\n light.setFocalPointFrom(camera.getFocalPointByReference());\n light.modified(camera.getMTime());\n } else if (light.lightTypeIsCameraLight()) {\n light.setTransformMatrix(camera.getCameraLightTransformMatrix(mat4.create()));\n } else {\n vtkErrorMacro('light has unknown light type', light.get());\n }\n });\n };\n\n publicAPI.updateLightGeometry = function () {\n if (model.lightFollowCamera) {\n // only update the light's geometry if this Renderer is tracking\n // this lights. That allows one renderer to view the lights that\n // another renderer is setting up.\n return publicAPI.updateLightsGeometryToFollowCamera();\n }\n\n return true;\n };\n\n publicAPI.allocateTime = notImplemented('allocateTime');\n publicAPI.updateGeometry = notImplemented('updateGeometry');\n\n publicAPI.getVTKWindow = function () {\n return model._renderWindow;\n };\n\n publicAPI.setLayer = function (layer) {\n vtkDebugMacro(publicAPI.getClassName(), publicAPI, 'setting Layer to ', layer);\n\n if (model.layer !== layer) {\n model.layer = layer;\n publicAPI.modified();\n }\n\n publicAPI.setPreserveColorBuffer(!!layer);\n };\n\n publicAPI.setActiveCamera = function (camera) {\n if (model.activeCamera === camera) {\n return false;\n }\n\n model.activeCamera = camera;\n publicAPI.modified();\n publicAPI.invokeEvent({\n type: 'ActiveCameraEvent',\n camera: camera\n });\n return true;\n };\n\n publicAPI.makeCamera = function () {\n var camera = vtkCamera.newInstance();\n publicAPI.invokeEvent({\n type: 'CreateCameraEvent',\n camera: camera\n });\n return camera;\n }; // Replace the set/get macro method\n\n\n publicAPI.getActiveCamera = function () {\n if (!model.activeCamera) {\n model.activeCamera = publicAPI.makeCamera();\n }\n\n return model.activeCamera;\n };\n\n publicAPI.getActiveCameraAndResetIfCreated = function () {\n if (!model.activeCamera) {\n publicAPI.getActiveCamera();\n publicAPI.resetCamera();\n }\n\n return model.activeCamera;\n };\n\n publicAPI.getActors = function () {\n model.actors = [];\n model.props.forEach(function (prop) {\n model.actors = model.actors.concat(prop.getActors());\n });\n return model.actors;\n };\n\n publicAPI.addActor = publicAPI.addViewProp;\n\n publicAPI.removeActor = function (actor) {\n model.actors = model.actors.filter(function (a) {\n return a !== actor;\n });\n publicAPI.removeViewProp(actor);\n publicAPI.modified();\n };\n\n publicAPI.removeAllActors = function () {\n var actors = publicAPI.getActors();\n actors.forEach(function (actor) {\n publicAPI.removeViewProp(actor);\n });\n model.actors = [];\n publicAPI.modified();\n };\n\n publicAPI.getVolumes = function () {\n model.volumes = [];\n model.props.forEach(function (prop) {\n model.volumes = model.volumes.concat(prop.getVolumes());\n });\n return model.volumes;\n };\n\n publicAPI.addVolume = publicAPI.addViewProp;\n\n publicAPI.removeVolume = function (volume) {\n model.volumes = model.volumes.filter(function (v) {\n return v !== volume;\n });\n publicAPI.removeViewProp(volume);\n publicAPI.modified();\n };\n\n publicAPI.removeAllVolumes = function () {\n var volumes = publicAPI.getVolumes();\n volumes.forEach(function (volume) {\n publicAPI.removeViewProp(volume);\n });\n model.volumes = [];\n publicAPI.modified();\n };\n\n publicAPI.addLight = function (light) {\n model.lights = [].concat(model.lights, light);\n publicAPI.modified();\n };\n\n publicAPI.removeLight = function (light) {\n model.lights = model.lights.filter(function (l) {\n return l !== light;\n });\n publicAPI.modified();\n };\n\n publicAPI.removeAllLights = function () {\n model.lights = [];\n publicAPI.modified();\n };\n\n publicAPI.setLightCollection = function (lights) {\n model.lights = lights;\n publicAPI.modified();\n };\n\n publicAPI.makeLight = vtkLight.newInstance;\n\n publicAPI.createLight = function () {\n if (!model.automaticLightCreation) {\n return;\n }\n\n if (model._createdLight) {\n publicAPI.removeLight(model._createdLight);\n\n model._createdLight.delete();\n\n model._createdLight = null;\n }\n\n model._createdLight = publicAPI.makeLight();\n publicAPI.addLight(model._createdLight);\n\n model._createdLight.setLightTypeToHeadLight(); // set these values just to have a good default should LightFollowCamera\n // be turned off.\n\n\n model._createdLight.setPosition(publicAPI.getActiveCamera().getPosition());\n\n model._createdLight.setFocalPoint(publicAPI.getActiveCamera().getFocalPoint());\n }; // requires the aspect ratio of the viewport as X/Y\n\n\n publicAPI.normalizedDisplayToWorld = function (x, y, z, aspect) {\n var vpd = publicAPI.normalizedDisplayToProjection(x, y, z);\n vpd = publicAPI.projectionToView(vpd[0], vpd[1], vpd[2], aspect);\n return publicAPI.viewToWorld(vpd[0], vpd[1], vpd[2]);\n }; // requires the aspect ratio of the viewport as X/Y\n\n\n publicAPI.worldToNormalizedDisplay = function (x, y, z, aspect) {\n var vpd = publicAPI.worldToView(x, y, z);\n vpd = publicAPI.viewToProjection(vpd[0], vpd[1], vpd[2], aspect);\n return publicAPI.projectionToNormalizedDisplay(vpd[0], vpd[1], vpd[2]);\n }; // requires the aspect ratio of the viewport as X/Y\n\n\n publicAPI.viewToWorld = function (x, y, z) {\n if (model.activeCamera === null) {\n vtkErrorMacro('ViewToWorld: no active camera, cannot compute view to world, returning 0,0,0');\n return [0, 0, 0];\n } // get the view matrix from the active camera\n\n\n var matrix = model.activeCamera.getViewMatrix();\n mat4.invert(matrix, matrix);\n mat4.transpose(matrix, matrix); // Transform point to world coordinates\n\n var result = new Float64Array([x, y, z]);\n vec3.transformMat4(result, result, matrix);\n return result;\n };\n\n publicAPI.projectionToView = function (x, y, z, aspect) {\n if (model.activeCamera === null) {\n vtkErrorMacro('ProjectionToView: no active camera, cannot compute projection to view, returning 0,0,0');\n return [0, 0, 0];\n } // get the projection transformation from the active camera\n\n\n var matrix = model.activeCamera.getProjectionMatrix(aspect, -1.0, 1.0);\n mat4.invert(matrix, matrix);\n mat4.transpose(matrix, matrix); // Transform point to world coordinates\n\n var result = new Float64Array([x, y, z]);\n vec3.transformMat4(result, result, matrix);\n return result;\n }; // Convert world point coordinates to view coordinates.\n\n\n publicAPI.worldToView = function (x, y, z) {\n if (model.activeCamera === null) {\n vtkErrorMacro('WorldToView: no active camera, cannot compute view to world, returning 0,0,0');\n return [0, 0, 0];\n } // get the view transformation from the active camera\n\n\n var matrix = model.activeCamera.getViewMatrix();\n mat4.transpose(matrix, matrix);\n var result = new Float64Array([x, y, z]);\n vec3.transformMat4(result, result, matrix);\n return result;\n }; // Convert world point coordinates to view coordinates.\n // requires the aspect ratio of the viewport as X/Y\n\n\n publicAPI.viewToProjection = function (x, y, z, aspect) {\n if (model.activeCamera === null) {\n vtkErrorMacro('ViewToProjection: no active camera, cannot compute view to projection, returning 0,0,0');\n return [0, 0, 0];\n } // get the projeciton transformation from the active camera\n\n\n var matrix = model.activeCamera.getProjectionMatrix(aspect, -1.0, 1.0);\n mat4.transpose(matrix, matrix);\n var result = new Float64Array([x, y, z]);\n vec3.transformMat4(result, result, matrix);\n return result;\n };\n\n publicAPI.computeVisiblePropBounds = function () {\n model.allBounds[0] = vtkBoundingBox.INIT_BOUNDS[0];\n model.allBounds[1] = vtkBoundingBox.INIT_BOUNDS[1];\n model.allBounds[2] = vtkBoundingBox.INIT_BOUNDS[2];\n model.allBounds[3] = vtkBoundingBox.INIT_BOUNDS[3];\n model.allBounds[4] = vtkBoundingBox.INIT_BOUNDS[4];\n model.allBounds[5] = vtkBoundingBox.INIT_BOUNDS[5];\n var nothingVisible = true;\n publicAPI.invokeEvent(COMPUTE_VISIBLE_PROP_BOUNDS_EVENT); // loop through all props\n\n for (var index = 0; index < model.props.length; ++index) {\n var prop = model.props[index];\n\n if (prop.getVisibility() && prop.getUseBounds()) {\n var bounds = prop.getBounds();\n\n if (bounds && areBoundsInitialized(bounds)) {\n nothingVisible = false;\n\n if (bounds[0] < model.allBounds[0]) {\n model.allBounds[0] = bounds[0];\n }\n\n if (bounds[1] > model.allBounds[1]) {\n model.allBounds[1] = bounds[1];\n }\n\n if (bounds[2] < model.allBounds[2]) {\n model.allBounds[2] = bounds[2];\n }\n\n if (bounds[3] > model.allBounds[3]) {\n model.allBounds[3] = bounds[3];\n }\n\n if (bounds[4] < model.allBounds[4]) {\n model.allBounds[4] = bounds[4];\n }\n\n if (bounds[5] > model.allBounds[5]) {\n model.allBounds[5] = bounds[5];\n }\n }\n }\n }\n\n if (nothingVisible) {\n uninitializeBounds(model.allBounds);\n vtkDebugMacro(\"Can't compute bounds, no 3D props are visible\");\n }\n\n return model.allBounds;\n };\n\n publicAPI.resetCamera = function () {\n var bounds = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var boundsToUse = bounds || publicAPI.computeVisiblePropBounds();\n var center = [0, 0, 0];\n\n if (!areBoundsInitialized(boundsToUse)) {\n vtkDebugMacro('Cannot reset camera!');\n return false;\n }\n\n var vn = null;\n\n if (publicAPI.getActiveCamera()) {\n vn = model.activeCamera.getViewPlaneNormal();\n } else {\n vtkErrorMacro('Trying to reset non-existent camera');\n return false;\n } // Reset the perspective zoom factors, otherwise subsequent zooms will cause\n // the view angle to become very small and cause bad depth sorting.\n\n\n model.activeCamera.setViewAngle(30.0);\n center[0] = (boundsToUse[0] + boundsToUse[1]) / 2.0;\n center[1] = (boundsToUse[2] + boundsToUse[3]) / 2.0;\n center[2] = (boundsToUse[4] + boundsToUse[5]) / 2.0;\n var w1 = boundsToUse[1] - boundsToUse[0];\n var w2 = boundsToUse[3] - boundsToUse[2];\n var w3 = boundsToUse[5] - boundsToUse[4];\n w1 *= w1;\n w2 *= w2;\n w3 *= w3;\n var radius = w1 + w2 + w3; // If we have just a single point, pick a radius of 1.0\n\n radius = radius === 0 ? 1.0 : radius; // compute the radius of the enclosing sphere\n\n radius = Math.sqrt(radius) * 0.5; // default so that the bounding sphere fits within the view fustrum\n // compute the distance from the intersection of the view frustum with the\n // bounding sphere. Basically in 2D draw a circle representing the bounding\n // sphere in 2D then draw a horizontal line going out from the center of\n // the circle. That is the camera view. Then draw a line from the camera\n // position to the point where it intersects the circle. (it will be tangent\n // to the circle at this point, this is important, only go to the tangent\n // point, do not draw all the way to the view plane). Then draw the radius\n // from the tangent point to the center of the circle. You will note that\n // this forms a right triangle with one side being the radius, another being\n // the target distance for the camera, then just find the target dist using\n // a sin.\n\n var angle = radiansFromDegrees(model.activeCamera.getViewAngle());\n var parallelScale = radius;\n var distance = radius / Math.sin(angle * 0.5); // check view-up vector against view plane normal\n\n var vup = model.activeCamera.getViewUp();\n\n if (Math.abs(dot(vup, vn)) > 0.999) {\n vtkWarningMacro('Resetting view-up since view plane normal is parallel');\n model.activeCamera.setViewUp(-vup[2], vup[0], vup[1]);\n } // update the camera\n\n\n model.activeCamera.setFocalPoint(center[0], center[1], center[2]);\n model.activeCamera.setPosition(center[0] + distance * vn[0], center[1] + distance * vn[1], center[2] + distance * vn[2]);\n publicAPI.resetCameraClippingRange(boundsToUse); // setup default parallel scale\n\n model.activeCamera.setParallelScale(parallelScale); // update reasonable world to physical values\n\n model.activeCamera.setPhysicalScale(radius);\n model.activeCamera.setPhysicalTranslation(-center[0], -center[1], -center[2]); // Here to let parallel/distributed compositing intercept\n // and do the right thing.\n\n publicAPI.invokeEvent(RESET_CAMERA_EVENT);\n return true;\n };\n\n publicAPI.resetCameraClippingRange = function () {\n var bounds = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var boundsToUse = bounds || publicAPI.computeVisiblePropBounds();\n\n if (!areBoundsInitialized(boundsToUse)) {\n vtkDebugMacro('Cannot reset camera clipping range!');\n return false;\n } // Make sure we have an active camera\n\n\n publicAPI.getActiveCameraAndResetIfCreated();\n\n if (!model.activeCamera) {\n vtkErrorMacro('Trying to reset clipping range of non-existent camera');\n return false;\n } // Get the exact range for the bounds\n\n\n var range = model.activeCamera.computeClippingRange(boundsToUse); // do not let far - near be less than 0.1 of the window height\n // this is for cases such as 2D images which may have zero range\n\n var minGap = 0.0;\n\n if (model.activeCamera.getParallelProjection()) {\n minGap = 0.2 * model.activeCamera.getParallelScale();\n } else {\n var angle = radiansFromDegrees(model.activeCamera.getViewAngle());\n minGap = 0.2 * Math.tan(angle / 2.0) * range[1];\n }\n\n if (range[1] - range[0] < minGap) {\n minGap = minGap - range[1] + range[0];\n range[1] += minGap / 2.0;\n range[0] -= minGap / 2.0;\n } // Do not let the range behind the camera throw off the calculation.\n\n\n if (range[0] < 0.0) {\n range[0] = 0.0;\n } // Give ourselves a little breathing room\n\n\n range[0] = 0.99 * range[0] - (range[1] - range[0]) * model.clippingRangeExpansion;\n range[1] = 1.01 * range[1] + (range[1] - range[0]) * model.clippingRangeExpansion; // Make sure near is not bigger than far\n\n range[0] = range[0] >= range[1] ? 0.01 * range[1] : range[0]; // Make sure near is at least some fraction of far - this prevents near\n // from being behind the camera or too close in front. How close is too\n // close depends on the resolution of the depth buffer\n\n if (!model.nearClippingPlaneTolerance) {\n model.nearClippingPlaneTolerance = 0.01;\n } // make sure the front clipping range is not too far from the far clippnig\n // range, this is to make sure that the zbuffer resolution is effectively\n // used\n\n\n if (range[0] < model.nearClippingPlaneTolerance * range[1]) {\n range[0] = model.nearClippingPlaneTolerance * range[1];\n }\n\n model.activeCamera.setClippingRange(range[0], range[1]); // Here to let parallel/distributed compositing intercept\n // and do the right thing.\n\n publicAPI.invokeEvent(RESET_CAMERA_CLIPPING_RANGE_EVENT);\n return false;\n };\n\n publicAPI.setRenderWindow = function (renderWindow) {\n if (renderWindow !== model._renderWindow) {\n model._vtkWindow = renderWindow;\n model._renderWindow = renderWindow;\n }\n };\n\n publicAPI.visibleActorCount = function () {\n return model.props.filter(function (prop) {\n return prop.getVisibility();\n }).length;\n };\n\n publicAPI.visibleVolumeCount = publicAPI.visibleActorCount;\n\n publicAPI.getMTime = function () {\n var m1 = model.mtime;\n var m2 = model.activeCamera ? model.activeCamera.getMTime() : 0;\n\n if (m2 > m1) {\n m1 = m2;\n }\n\n var m3 = model._createdLight ? model._createdLight.getMTime() : 0;\n\n if (m3 > m1) {\n m1 = m3;\n }\n\n return m1;\n };\n\n publicAPI.getTransparent = function () {\n return !!model.preserveColorBuffer;\n };\n\n publicAPI.isActiveCameraCreated = function () {\n return !!model.activeCamera;\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n pickedProp: null,\n activeCamera: null,\n allBounds: [],\n ambient: [1, 1, 1],\n allocatedRenderTime: 100,\n timeFactor: 1,\n automaticLightCreation: true,\n twoSidedLighting: true,\n lastRenderTimeInSeconds: -1,\n renderWindow: null,\n lights: [],\n actors: [],\n volumes: [],\n lightFollowCamera: true,\n numberOfPropsRendered: 0,\n propArray: null,\n pathArray: null,\n layer: 0,\n preserveColorBuffer: false,\n preserveDepthBuffer: false,\n computeVisiblePropBounds: createUninitializedBounds(),\n interactive: true,\n nearClippingPlaneTolerance: 0,\n clippingRangeExpansion: 0.05,\n erase: true,\n draw: true,\n useShadows: false,\n useDepthPeeling: false,\n occlusionRatio: 0,\n maximumNumberOfPeels: 4,\n selector: null,\n delegate: null,\n texturedBackground: false,\n backgroundTexture: null,\n environmentTexture: null,\n environmentTextureDiffuseStrength: 1,\n environmentTextureSpecularStrength: 1,\n useEnvironmentTextureAsBackground: false,\n pass: 0\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Inheritance\n\n vtkViewport.extend(publicAPI, model, initialValues); // make sure background has 4 entries. Default to opaque black\n\n if (!model.background) model.background = [0, 0, 0, 1];\n\n while (model.background.length < 3) {\n model.background.push(0);\n }\n\n if (model.background.length === 3) model.background.push(1); // Build VTK API\n\n get(publicAPI, model, ['_renderWindow', 'allocatedRenderTime', 'timeFactor', 'lastRenderTimeInSeconds', 'numberOfPropsRendered', 'lastRenderingUsedDepthPeeling', 'selector']);\n setGet(publicAPI, model, ['twoSidedLighting', 'lightFollowCamera', 'automaticLightCreation', 'erase', 'draw', 'nearClippingPlaneTolerance', 'clippingRangeExpansion', 'backingStore', 'interactive', 'layer', 'preserveColorBuffer', 'preserveDepthBuffer', 'useDepthPeeling', 'occlusionRatio', 'maximumNumberOfPeels', 'delegate', 'backgroundTexture', 'texturedBackground', 'environmentTexture', 'environmentTextureDiffuseStrength', 'environmentTextureSpecularStrength', 'useEnvironmentTextureAsBackground', 'useShadows', 'pass']);\n getArray(publicAPI, model, ['actors', 'volumes', 'lights']);\n setGetArray(publicAPI, model, ['background'], 4, 1.0);\n moveToProtected(publicAPI, model, ['renderWindow']); // Object methods\n\n vtkRenderer(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = newInstance$1(extend, 'vtkRenderer'); // ----------------------------------------------------------------------------\n\nvar vtkRenderer$1 = {\n newInstance: newInstance,\n extend: extend\n};\n\nexport { vtkRenderer$1 as default, extend, newInstance };\n","var Device = {\n Unknown: 0,\n LeftController: 1,\n RightController: 2\n};\nvar Input = {\n Unknown: 0,\n Trigger: 1,\n TrackPad: 2,\n Grip: 3,\n Thumbstick: 4,\n A: 5,\n B: 6,\n ApplicationMenu: 7 // Not exposed in WebXR API\n\n};\nvar Axis = {\n Unknown: 0,\n TouchpadX: 1,\n TouchpadY: 2,\n ThumbstickX: 3,\n ThumbstickY: 4\n};\nvar Constants = {\n Device: Device,\n Input: Input,\n Axis: Axis\n};\n\nexport { Axis, Device, Input, Constants as default };\n","import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';\nimport _defineProperty from '@babel/runtime/helpers/defineProperty';\nimport macro from '../../macros.js';\nimport { B as degreesFromRadians } from '../../Common/Core/Math/index.js';\nimport Constants from './RenderWindowInteractor/Constants.js';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nvar Device = Constants.Device,\n Input = Constants.Input;\nvar vtkWarningMacro = macro.vtkWarningMacro,\n vtkErrorMacro = macro.vtkErrorMacro,\n normalizeWheel = macro.normalizeWheel,\n vtkOnceErrorMacro = macro.vtkOnceErrorMacro; // ----------------------------------------------------------------------------\n// Global methods\n// ----------------------------------------------------------------------------\n\nvar EMPTY_MOUSE_EVENT = new MouseEvent('');\nvar deviceInputMap = {\n 'xr-standard': [Input.Trigger, Input.Grip, Input.TrackPad, Input.Thumbstick, Input.A, Input.B]\n};\nvar handledEvents = ['StartAnimation', 'Animation', 'EndAnimation', 'PointerEnter', 'PointerLeave', 'MouseEnter', 'MouseLeave', 'StartMouseMove', 'MouseMove', 'EndMouseMove', 'LeftButtonPress', 'LeftButtonRelease', 'MiddleButtonPress', 'MiddleButtonRelease', 'RightButtonPress', 'RightButtonRelease', 'KeyPress', 'KeyDown', 'KeyUp', 'StartMouseWheel', 'MouseWheel', 'EndMouseWheel', 'StartPinch', 'Pinch', 'EndPinch', 'StartPan', 'Pan', 'EndPan', 'StartRotate', 'Rotate', 'EndRotate', 'Button3D', 'Move3D', 'StartPointerLock', 'EndPointerLock', 'StartInteraction', 'Interaction', 'EndInteraction', 'AnimationFrameRateUpdate'];\n\nfunction preventDefault(event) {\n if (event.cancelable) {\n event.preventDefault();\n }\n}\n\nfunction pointerCacheToPositions(cache) {\n var positions = Object.create(null);\n cache.forEach(function (_ref) {\n var pointerId = _ref.pointerId,\n position = _ref.position;\n positions[pointerId] = position;\n });\n return positions;\n} // ----------------------------------------------------------------------------\n// vtkRenderWindowInteractor methods\n// ----------------------------------------------------------------------------\n\n\nfunction vtkRenderWindowInteractor(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkRenderWindowInteractor'); // Initialize list of requesters\n\n var animationRequesters = new Set(); // map from pointerId to { pointerId: number, position: [x, y] }\n\n var pointerCache = new Map(); // Public API methods\n //----------------------------------------------------------------------\n\n publicAPI.start = function () {\n // Let the compositing handle the event loop if it wants to.\n // if (publicAPI.HasObserver(vtkCommand::StartEvent) && !publicAPI.HandleEventLoop) {\n // publicAPI.invokeEvent({ type: 'StartEvent' });\n // return;\n // }\n // As a convenience, initialize if we aren't initialized yet.\n if (!model.initialized) {\n publicAPI.initialize();\n\n if (!model.initialized) {\n return;\n }\n } // Pass execution to the subclass which will run the event loop,\n // this will not return until TerminateApp is called.\n\n\n publicAPI.startEventLoop();\n }; //----------------------------------------------------------------------\n\n\n publicAPI.setRenderWindow = function (aren) {\n vtkErrorMacro('you want to call setView(view) instead of setRenderWindow on a vtk.js interactor');\n }; //----------------------------------------------------------------------\n\n\n publicAPI.setInteractorStyle = function (style) {\n if (model.interactorStyle !== style) {\n if (model.interactorStyle != null) {\n model.interactorStyle.setInteractor(null);\n }\n\n model.interactorStyle = style;\n\n if (model.interactorStyle != null) {\n if (model.interactorStyle.getInteractor() !== publicAPI) {\n model.interactorStyle.setInteractor(publicAPI);\n }\n }\n }\n }; //---------------------------------------------------------------------\n\n\n publicAPI.initialize = function () {\n model.initialized = true;\n publicAPI.enable();\n publicAPI.render();\n };\n\n publicAPI.enable = function () {\n return publicAPI.setEnabled(true);\n };\n\n publicAPI.disable = function () {\n return publicAPI.setEnabled(false);\n };\n\n publicAPI.startEventLoop = function () {\n return vtkWarningMacro('empty event loop');\n };\n\n function updateCurrentRenderer(x, y) {\n if (!model._forcedRenderer) {\n model.currentRenderer = publicAPI.findPokedRenderer(x, y);\n }\n }\n\n publicAPI.getCurrentRenderer = function () {\n if (model.currentRenderer) {\n return model.currentRenderer;\n }\n\n updateCurrentRenderer(0, 0);\n return model.currentRenderer;\n };\n\n function getScreenEventPositionFor(source) {\n var canvas = model._view.getCanvas();\n\n var bounds = canvas.getBoundingClientRect();\n var scaleX = canvas.width / bounds.width;\n var scaleY = canvas.height / bounds.height;\n var position = {\n x: scaleX * (source.clientX - bounds.left),\n y: scaleY * (bounds.height - source.clientY + bounds.top),\n z: 0\n }; // if multitouch, do not update the current renderer\n\n if (pointerCache.size <= 1 || !model.currentRenderer) {\n updateCurrentRenderer(position.x, position.y);\n }\n\n return position;\n }\n\n function getModifierKeysFor(event) {\n return {\n controlKey: event.ctrlKey,\n altKey: event.altKey,\n shiftKey: event.shiftKey\n };\n }\n\n function getKeysFor(event) {\n var modifierKeys = getModifierKeysFor(event);\n\n var keys = _objectSpread({\n key: event.key,\n keyCode: event.charCode\n }, modifierKeys);\n\n return keys;\n }\n\n function getDeviceTypeFor(event) {\n return event.pointerType || '';\n }\n\n publicAPI.bindEvents = function (container) {\n model.container = container;\n container.addEventListener('contextmenu', preventDefault);\n container.addEventListener('wheel', publicAPI.handleWheel);\n container.addEventListener('DOMMouseScroll', publicAPI.handleWheel);\n container.addEventListener('pointerenter', publicAPI.handlePointerEnter);\n container.addEventListener('pointerleave', publicAPI.handlePointerLeave);\n container.addEventListener('pointermove', publicAPI.handlePointerMove, {\n passive: false\n });\n container.addEventListener('pointerdown', publicAPI.handlePointerDown, {\n passive: false\n });\n container.addEventListener('pointerup', publicAPI.handlePointerUp);\n container.addEventListener('pointercancel', publicAPI.handlePointerCancel);\n document.addEventListener('keypress', publicAPI.handleKeyPress);\n document.addEventListener('keydown', publicAPI.handleKeyDown);\n document.addEventListener('keyup', publicAPI.handleKeyUp);\n document.addEventListener('pointerlockchange', publicAPI.handlePointerLockChange); // using touchAction is more performant than preventDefault\n // in a touchstart handler.\n\n container.style.touchAction = 'none';\n container.style.userSelect = 'none'; // disables tap highlight for when cursor is pointer\n\n container.style.webkitTapHighlightColor = 'rgba(0,0,0,0)';\n };\n\n publicAPI.unbindEvents = function () {\n var container = model.container;\n container.removeEventListener('contextmenu', preventDefault);\n container.removeEventListener('wheel', publicAPI.handleWheel);\n container.removeEventListener('DOMMouseScroll', publicAPI.handleWheel);\n container.removeEventListener('pointerenter', publicAPI.handlePointerEnter);\n container.removeEventListener('pointerleave', publicAPI.handlePointerLeave);\n container.removeEventListener('pointermove', publicAPI.handlePointerMove, {\n passive: false\n });\n container.removeEventListener('pointerdown', publicAPI.handlePointerDown, {\n passive: false\n });\n container.removeEventListener('pointerup', publicAPI.handlePointerUp);\n container.removeEventListener('pointercancel', publicAPI.handlePointerCancel);\n document.removeEventListener('keypress', publicAPI.handleKeyPress);\n document.removeEventListener('keydown', publicAPI.handleKeyDown);\n document.removeEventListener('keyup', publicAPI.handleKeyUp);\n document.removeEventListener('pointerlockchange', publicAPI.handlePointerLockChange);\n model.container = null;\n pointerCache.clear();\n };\n\n publicAPI.handleKeyPress = function (event) {\n var data = getKeysFor(event);\n publicAPI.keyPressEvent(data);\n };\n\n publicAPI.handleKeyDown = function (event) {\n var data = getKeysFor(event);\n publicAPI.keyDownEvent(data);\n };\n\n publicAPI.handleKeyUp = function (event) {\n var data = getKeysFor(event);\n publicAPI.keyUpEvent(data);\n };\n\n publicAPI.handlePointerEnter = function (event) {\n var callData = _objectSpread(_objectSpread({}, getModifierKeysFor(event)), {}, {\n position: getScreenEventPositionFor(event),\n deviceType: getDeviceTypeFor(event)\n });\n\n publicAPI.pointerEnterEvent(callData);\n\n if (callData.deviceType === 'mouse') {\n publicAPI.mouseEnterEvent(callData);\n }\n };\n\n publicAPI.handlePointerLeave = function (event) {\n var callData = _objectSpread(_objectSpread({}, getModifierKeysFor(event)), {}, {\n position: getScreenEventPositionFor(event),\n deviceType: getDeviceTypeFor(event)\n });\n\n publicAPI.pointerLeaveEvent(callData);\n\n if (callData.deviceType === 'mouse') {\n publicAPI.mouseLeaveEvent(callData);\n }\n };\n\n publicAPI.handlePointerDown = function (event) {\n if (event.button > 2 || publicAPI.isPointerLocked()) {\n // ignore events from extra mouse buttons such as `back` and `forward`\n return;\n }\n\n if (model.preventDefaultOnPointerDown) {\n preventDefault(event);\n }\n\n if (event.target.hasPointerCapture(event.pointerId)) {\n event.target.releasePointerCapture(event.pointerId);\n }\n\n model.container.setPointerCapture(event.pointerId);\n\n if (pointerCache.has(event.pointerId)) {\n vtkWarningMacro('[RenderWindowInteractor] duplicate pointerId detected');\n }\n\n pointerCache.set(event.pointerId, {\n pointerId: event.pointerId,\n position: getScreenEventPositionFor(event)\n });\n\n switch (event.pointerType) {\n case 'pen':\n case 'touch':\n publicAPI.handleTouchStart(event);\n break;\n\n case 'mouse':\n default:\n publicAPI.handleMouseDown(event);\n break;\n }\n };\n\n publicAPI.handlePointerUp = function (event) {\n if (pointerCache.has(event.pointerId)) {\n if (model.preventDefaultOnPointerUp) {\n preventDefault(event);\n }\n\n pointerCache.delete(event.pointerId);\n model.container.releasePointerCapture(event.pointerId);\n\n switch (event.pointerType) {\n case 'pen':\n case 'touch':\n publicAPI.handleTouchEnd(event);\n break;\n\n case 'mouse':\n default:\n publicAPI.handleMouseUp(event);\n break;\n }\n }\n };\n\n publicAPI.handlePointerCancel = function (event) {\n if (pointerCache.has(event.pointerId)) {\n pointerCache.delete(event.pointerId);\n\n switch (event.pointerType) {\n case 'pen':\n case 'touch':\n publicAPI.handleTouchEnd(event);\n break;\n\n case 'mouse':\n default:\n publicAPI.handleMouseUp(event);\n break;\n }\n }\n };\n\n publicAPI.handlePointerMove = function (event) {\n if (pointerCache.has(event.pointerId)) {\n var pointer = pointerCache.get(event.pointerId);\n pointer.position = getScreenEventPositionFor(event);\n }\n\n switch (event.pointerType) {\n case 'pen':\n case 'touch':\n publicAPI.handleTouchMove(event);\n break;\n\n case 'mouse':\n default:\n publicAPI.handleMouseMove(event);\n break;\n }\n };\n\n publicAPI.handleMouseDown = function (event) {\n var callData = _objectSpread(_objectSpread({}, getModifierKeysFor(event)), {}, {\n position: getScreenEventPositionFor(event),\n deviceType: getDeviceTypeFor(event)\n });\n\n switch (event.button) {\n case 0:\n publicAPI.leftButtonPressEvent(callData);\n break;\n\n case 1:\n publicAPI.middleButtonPressEvent(callData);\n break;\n\n case 2:\n publicAPI.rightButtonPressEvent(callData);\n break;\n\n default:\n vtkErrorMacro(\"Unknown mouse button pressed: \".concat(event.button));\n break;\n }\n }; //----------------------------------------------------------------------\n\n\n publicAPI.requestPointerLock = function () {\n if (model.container) {\n model.container.requestPointerLock();\n }\n }; //----------------------------------------------------------------------\n\n\n publicAPI.exitPointerLock = function () {\n return document.exitPointerLock();\n }; //----------------------------------------------------------------------\n\n\n publicAPI.isPointerLocked = function () {\n return !!model.container && document.pointerLockElement === model.container;\n }; //----------------------------------------------------------------------\n\n\n publicAPI.handlePointerLockChange = function () {\n if (publicAPI.isPointerLocked()) {\n publicAPI.startPointerLockEvent();\n } else {\n publicAPI.endPointerLockEvent();\n }\n }; //----------------------------------------------------------------------\n\n\n function forceRender() {\n if (model._view && model.enabled && model.enableRender) {\n model.inRender = true;\n\n model._view.traverseAllPasses();\n\n model.inRender = false;\n } // outside the above test so that third-party code can redirect\n // the render to the appropriate class\n\n\n publicAPI.invokeRenderEvent();\n }\n\n publicAPI.requestAnimation = function (requestor) {\n if (requestor === undefined) {\n vtkErrorMacro(\"undefined requester, can not start animating\");\n return;\n }\n\n if (animationRequesters.has(requestor)) {\n vtkWarningMacro(\"requester is already registered for animating\");\n return;\n }\n\n animationRequesters.add(requestor);\n\n if (!model.animationRequest && animationRequesters.size === 1 && !model.xrAnimation) {\n model._animationStartTime = Date.now();\n model._animationFrameCount = 0;\n model.animationRequest = requestAnimationFrame(publicAPI.handleAnimation);\n publicAPI.startAnimationEvent();\n }\n }; // continue animating for at least the specified duration of\n // milliseconds.\n\n\n publicAPI.extendAnimation = function (duration) {\n var newEnd = Date.now() + duration;\n model._animationExtendedEnd = Math.max(model._animationExtendedEnd, newEnd);\n\n if (!model.animationRequest && animationRequesters.size === 0 && !model.xrAnimation) {\n model._animationStartTime = Date.now();\n model._animationFrameCount = 0;\n model.animationRequest = requestAnimationFrame(publicAPI.handleAnimation);\n publicAPI.startAnimationEvent();\n }\n };\n\n publicAPI.isAnimating = function () {\n return model.xrAnimation || model.animationRequest !== null;\n };\n\n publicAPI.cancelAnimation = function (requestor) {\n var skipWarning = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n if (!animationRequesters.has(requestor)) {\n if (!skipWarning) {\n var requestStr = requestor && requestor.getClassName ? requestor.getClassName() : requestor;\n vtkWarningMacro(\"\".concat(requestStr, \" did not request an animation\"));\n }\n\n return;\n }\n\n animationRequesters.delete(requestor);\n\n if (model.animationRequest && animationRequesters.size === 0 && Date.now() > model._animationExtendedEnd) {\n cancelAnimationFrame(model.animationRequest);\n model.animationRequest = null;\n publicAPI.endAnimationEvent();\n publicAPI.render();\n }\n };\n\n publicAPI.switchToXRAnimation = function () {\n // cancel existing animation if any\n if (model.animationRequest) {\n cancelAnimationFrame(model.animationRequest);\n model.animationRequest = null;\n }\n\n model.xrAnimation = true;\n };\n\n publicAPI.returnFromXRAnimation = function () {\n model.xrAnimation = false;\n\n if (animationRequesters.size !== 0) {\n model.recentAnimationFrameRate = 10.0;\n model.animationRequest = requestAnimationFrame(publicAPI.handleAnimation);\n }\n };\n\n publicAPI.updateXRGamepads = function (xrSession, xrFrame, xrRefSpace) {\n // watch for when buttons change state and fire events\n xrSession.inputSources.forEach(function (inputSource) {\n var gripPose = inputSource.gripSpace == null ? null : xrFrame.getPose(inputSource.gripSpace, xrRefSpace);\n var gp = inputSource.gamepad;\n var hand = inputSource.handedness;\n\n if (gp) {\n if (!(gp.index in model.lastGamepadValues)) {\n model.lastGamepadValues[gp.index] = {\n left: {\n buttons: {}\n },\n right: {\n buttons: {}\n },\n none: {\n buttons: {}\n }\n };\n }\n\n for (var b = 0; b < gp.buttons.length; ++b) {\n if (!(b in model.lastGamepadValues[gp.index][hand].buttons)) {\n model.lastGamepadValues[gp.index][hand].buttons[b] = false;\n }\n\n if (model.lastGamepadValues[gp.index][hand].buttons[b] !== gp.buttons[b].pressed && gripPose != null) {\n publicAPI.button3DEvent({\n gamepad: gp,\n position: gripPose.transform.position,\n orientation: gripPose.transform.orientation,\n pressed: gp.buttons[b].pressed,\n device: inputSource.handedness === 'left' ? Device.LeftController : Device.RightController,\n input: deviceInputMap[gp.mapping] && deviceInputMap[gp.mapping][b] ? deviceInputMap[gp.mapping][b] : Input.Trigger\n });\n model.lastGamepadValues[gp.index][hand].buttons[b] = gp.buttons[b].pressed;\n }\n\n if (model.lastGamepadValues[gp.index][hand].buttons[b] && gripPose != null) {\n publicAPI.move3DEvent({\n gamepad: gp,\n position: gripPose.transform.position,\n orientation: gripPose.transform.orientation,\n device: inputSource.handedness === 'left' ? Device.LeftController : Device.RightController\n });\n }\n }\n }\n });\n };\n\n publicAPI.handleMouseMove = function (event) {\n var callData = _objectSpread(_objectSpread({}, getModifierKeysFor(event)), {}, {\n position: getScreenEventPositionFor(event),\n deviceType: getDeviceTypeFor(event)\n });\n\n if (model.moveTimeoutID === 0) {\n publicAPI.startMouseMoveEvent(callData);\n } else {\n publicAPI.mouseMoveEvent(callData);\n clearTimeout(model.moveTimeoutID);\n } // start a timer to keep us animating while we get mouse move events\n\n\n model.moveTimeoutID = setTimeout(function () {\n publicAPI.endMouseMoveEvent();\n model.moveTimeoutID = 0;\n }, 200);\n };\n\n publicAPI.handleAnimation = function () {\n var currTime = Date.now();\n model._animationFrameCount++;\n\n if (currTime - model._animationStartTime > 1000.0 && model._animationFrameCount > 1) {\n model.recentAnimationFrameRate = 1000.0 * (model._animationFrameCount - 1) / (currTime - model._animationStartTime);\n model.lastFrameTime = 1.0 / model.recentAnimationFrameRate;\n publicAPI.animationFrameRateUpdateEvent();\n model._animationStartTime = currTime;\n model._animationFrameCount = 1;\n }\n\n publicAPI.animationEvent();\n forceRender();\n\n if (animationRequesters.size > 0 || Date.now() < model._animationExtendedEnd) {\n model.animationRequest = requestAnimationFrame(publicAPI.handleAnimation);\n } else {\n cancelAnimationFrame(model.animationRequest);\n model.animationRequest = null;\n publicAPI.endAnimationEvent();\n publicAPI.render();\n }\n };\n\n publicAPI.handleWheel = function (event) {\n preventDefault(event);\n /**\n * wheel event values can vary significantly across browsers, platforms\n * and devices [1]. `normalizeWheel` uses facebook's solution from their\n * fixed-data-table repository [2].\n *\n * [1] https://developer.mozilla.org/en-US/docs/Web/Events/mousewheel\n * [2] https://github.com/facebookarchive/fixed-data-table/blob/master/src/vendor_upstream/dom/normalizeWheel.js\n *\n * This code will return an object with properties:\n *\n * spinX -- normalized spin speed (use for zoom) - x plane\n * spinY -- \" - y plane\n * pixelX -- normalized distance (to pixels) - x plane\n * pixelY -- \" - y plane\n *\n */\n\n var callData = _objectSpread(_objectSpread(_objectSpread({}, normalizeWheel(event)), getModifierKeysFor(event)), {}, {\n position: getScreenEventPositionFor(event),\n deviceType: getDeviceTypeFor(event)\n });\n\n if (model.wheelTimeoutID === 0) {\n publicAPI.startMouseWheelEvent(callData);\n } else {\n publicAPI.mouseWheelEvent(callData);\n clearTimeout(model.wheelTimeoutID);\n } // start a timer to keep us animating while we get wheel events\n\n\n model.wheelTimeoutID = setTimeout(function () {\n publicAPI.extendAnimation(600);\n publicAPI.endMouseWheelEvent();\n model.wheelTimeoutID = 0;\n }, 200);\n };\n\n publicAPI.handleMouseUp = function (event) {\n var callData = _objectSpread(_objectSpread({}, getModifierKeysFor(event)), {}, {\n position: getScreenEventPositionFor(event),\n deviceType: getDeviceTypeFor(event)\n });\n\n switch (event.button) {\n case 0:\n publicAPI.leftButtonReleaseEvent(callData);\n break;\n\n case 1:\n publicAPI.middleButtonReleaseEvent(callData);\n break;\n\n case 2:\n publicAPI.rightButtonReleaseEvent(callData);\n break;\n\n default:\n vtkErrorMacro(\"Unknown mouse button released: \".concat(event.button));\n break;\n }\n };\n\n publicAPI.handleTouchStart = function (event) {\n var pointers = _toConsumableArray(pointerCache.values()); // If multitouch\n\n\n if (model.recognizeGestures && pointers.length > 1) {\n var positions = pointerCacheToPositions(pointerCache); // did we just transition to multitouch?\n\n if (pointers.length === 2) {\n var callData = _objectSpread(_objectSpread({}, getModifierKeysFor(EMPTY_MOUSE_EVENT)), {}, {\n position: pointers[0].position,\n deviceType: getDeviceTypeFor(event)\n });\n\n publicAPI.leftButtonReleaseEvent(callData);\n } // handle the gesture\n\n\n publicAPI.recognizeGesture('TouchStart', positions);\n } else if (pointers.length === 1) {\n var _callData = _objectSpread(_objectSpread({}, getModifierKeysFor(EMPTY_MOUSE_EVENT)), {}, {\n position: getScreenEventPositionFor(event),\n deviceType: getDeviceTypeFor(event)\n });\n\n publicAPI.leftButtonPressEvent(_callData);\n }\n };\n\n publicAPI.handleTouchMove = function (event) {\n var pointers = _toConsumableArray(pointerCache.values());\n\n if (model.recognizeGestures && pointers.length > 1) {\n var positions = pointerCacheToPositions(pointerCache);\n publicAPI.recognizeGesture('TouchMove', positions);\n } else if (pointers.length === 1) {\n var callData = _objectSpread(_objectSpread({}, getModifierKeysFor(EMPTY_MOUSE_EVENT)), {}, {\n position: pointers[0].position,\n deviceType: getDeviceTypeFor(event)\n });\n\n publicAPI.mouseMoveEvent(callData);\n }\n };\n\n publicAPI.handleTouchEnd = function (event) {\n var pointers = _toConsumableArray(pointerCache.values());\n\n if (model.recognizeGestures) {\n // No more fingers down\n if (pointers.length === 0) {\n var callData = _objectSpread(_objectSpread({}, getModifierKeysFor(EMPTY_MOUSE_EVENT)), {}, {\n position: getScreenEventPositionFor(event),\n deviceType: getDeviceTypeFor(event)\n });\n\n publicAPI.leftButtonReleaseEvent(callData);\n } else if (pointers.length === 1) {\n // If one finger left, end touch and start button press\n var positions = pointerCacheToPositions(pointerCache);\n publicAPI.recognizeGesture('TouchEnd', positions);\n\n var _callData2 = _objectSpread(_objectSpread({}, getModifierKeysFor(EMPTY_MOUSE_EVENT)), {}, {\n position: pointers[0].position,\n deviceType: getDeviceTypeFor(event)\n });\n\n publicAPI.leftButtonPressEvent(_callData2);\n } else {\n // If more than one finger left, keep touch move\n var _positions = pointerCacheToPositions(pointerCache);\n\n publicAPI.recognizeGesture('TouchMove', _positions);\n }\n } else if (pointers.length === 1) {\n var _callData3 = _objectSpread(_objectSpread({}, getModifierKeysFor(EMPTY_MOUSE_EVENT)), {}, {\n position: pointers[0].position,\n deviceType: getDeviceTypeFor(event)\n });\n\n publicAPI.leftButtonReleaseEvent(_callData3);\n }\n };\n\n publicAPI.setView = function (val) {\n if (model._view === val) {\n return;\n }\n\n model._view = val;\n\n model._view.getRenderable().setInteractor(publicAPI);\n\n publicAPI.modified();\n };\n\n publicAPI.getFirstRenderer = function () {\n var _model$_view, _model$_view$getRende, _model$_view$getRende2;\n\n return (_model$_view = model._view) === null || _model$_view === void 0 ? void 0 : (_model$_view$getRende = _model$_view.getRenderable()) === null || _model$_view$getRende === void 0 ? void 0 : (_model$_view$getRende2 = _model$_view$getRende.getRenderersByReference()) === null || _model$_view$getRende2 === void 0 ? void 0 : _model$_view$getRende2[0];\n };\n\n publicAPI.findPokedRenderer = function () {\n var _model$_view2, _model$_view2$getRend;\n\n var x = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n if (!model._view) {\n return null;\n } // The original order of renderers needs to remain as\n // the first one is the one we want to manipulate the camera on.\n\n\n var rc = (_model$_view2 = model._view) === null || _model$_view2 === void 0 ? void 0 : (_model$_view2$getRend = _model$_view2.getRenderable()) === null || _model$_view2$getRend === void 0 ? void 0 : _model$_view2$getRend.getRenderers();\n\n if (!rc) {\n return null;\n }\n\n rc.sort(function (a, b) {\n return a.getLayer() - b.getLayer();\n });\n var interactiveren = null;\n var viewportren = null;\n var currentRenderer = null;\n var count = rc.length;\n\n while (count--) {\n var aren = rc[count];\n\n if (model._view.isInViewport(x, y, aren) && aren.getInteractive()) {\n currentRenderer = aren;\n break;\n }\n\n if (interactiveren === null && aren.getInteractive()) {\n // Save this renderer in case we can't find one in the viewport that\n // is interactive.\n interactiveren = aren;\n }\n\n if (viewportren === null && model._view.isInViewport(x, y, aren)) {\n // Save this renderer in case we can't find one in the viewport that\n // is interactive.\n viewportren = aren;\n }\n } // We must have a value. If we found an interactive renderer before, that's\n // better than a non-interactive renderer.\n\n\n if (currentRenderer === null) {\n currentRenderer = interactiveren;\n } // We must have a value. If we found a renderer that is in the viewport,\n // that is better than any old viewport (but not as good as an interactive\n // one).\n\n\n if (currentRenderer === null) {\n currentRenderer = viewportren;\n } // We must have a value - take anything.\n\n\n if (currentRenderer == null) {\n currentRenderer = rc[0];\n }\n\n return currentRenderer;\n }; // only render if we are not animating. If we are animating\n // then renders will happen naturally anyhow and we definitely\n // do not want extra renders as the make the apparent interaction\n // rate slower.\n\n\n publicAPI.render = function () {\n if (!publicAPI.isAnimating() && !model.inRender) {\n forceRender();\n }\n }; // create the generic Event methods\n\n\n handledEvents.forEach(function (eventName) {\n var lowerFirst = eventName.charAt(0).toLowerCase() + eventName.slice(1);\n\n publicAPI[\"\".concat(lowerFirst, \"Event\")] = function (arg) {\n // Check that interactor enabled\n if (!model.enabled) {\n return;\n } // Check that a poked renderer exists\n\n\n var renderer = publicAPI.getCurrentRenderer();\n\n if (!renderer) {\n vtkOnceErrorMacro(\"\\n Can not forward events without a current renderer on the interactor.\\n \");\n return;\n } // Pass the eventName and the poked renderer\n\n\n var callData = _objectSpread({\n type: eventName,\n pokedRenderer: model.currentRenderer,\n firstRenderer: publicAPI.getFirstRenderer()\n }, arg); // Call invoke\n\n\n publicAPI[\"invoke\".concat(eventName)](callData);\n };\n }); // we know we are in multitouch now, so start recognizing\n\n publicAPI.recognizeGesture = function (event, positions) {\n // more than two pointers we ignore\n if (Object.keys(positions).length > 2) {\n return;\n }\n\n if (!model.startingEventPositions) {\n model.startingEventPositions = {};\n } // store the initial positions\n\n\n if (event === 'TouchStart') {\n Object.keys(positions).forEach(function (key) {\n model.startingEventPositions[key] = positions[key];\n }); // we do not know what the gesture is yet\n\n model.currentGesture = 'Start';\n return;\n } // end the gesture if needed\n\n\n if (event === 'TouchEnd') {\n if (model.currentGesture === 'Pinch') {\n publicAPI.render();\n publicAPI.endPinchEvent();\n }\n\n if (model.currentGesture === 'Rotate') {\n publicAPI.render();\n publicAPI.endRotateEvent();\n }\n\n if (model.currentGesture === 'Pan') {\n publicAPI.render();\n publicAPI.endPanEvent();\n }\n\n model.currentGesture = 'Start';\n model.startingEventPositions = {};\n return;\n } // what are the two pointers we are working with\n\n\n var count = 0;\n var posVals = [];\n var startVals = [];\n Object.keys(positions).forEach(function (key) {\n posVals[count] = positions[key];\n startVals[count] = model.startingEventPositions[key];\n count++;\n }); // The meat of the algorithm\n // on move events we analyze them to determine what type\n // of movement it is and then deal with it.\n // calculate the distances\n\n var originalDistance = Math.sqrt((startVals[0].x - startVals[1].x) * (startVals[0].x - startVals[1].x) + (startVals[0].y - startVals[1].y) * (startVals[0].y - startVals[1].y));\n var newDistance = Math.sqrt((posVals[0].x - posVals[1].x) * (posVals[0].x - posVals[1].x) + (posVals[0].y - posVals[1].y) * (posVals[0].y - posVals[1].y)); // calculate rotations\n\n var originalAngle = degreesFromRadians(Math.atan2(startVals[1].y - startVals[0].y, startVals[1].x - startVals[0].x));\n var newAngle = degreesFromRadians(Math.atan2(posVals[1].y - posVals[0].y, posVals[1].x - posVals[0].x)); // angles are cyclic so watch for that, 1 and 359 are only 2 apart :)\n\n var angleDeviation = newAngle - originalAngle;\n newAngle = newAngle + 180.0 >= 360.0 ? newAngle - 180.0 : newAngle + 180.0;\n originalAngle = originalAngle + 180.0 >= 360.0 ? originalAngle - 180.0 : originalAngle + 180.0;\n\n if (Math.abs(newAngle - originalAngle) < Math.abs(angleDeviation)) {\n angleDeviation = newAngle - originalAngle;\n } // calculate the translations\n\n\n var trans = [];\n trans[0] = (posVals[0].x - startVals[0].x + posVals[1].x - startVals[1].x) / 2.0;\n trans[1] = (posVals[0].y - startVals[0].y + posVals[1].y - startVals[1].y) / 2.0;\n\n if (event === 'TouchMove') {\n // OK we want to\n // - immediately respond to the user\n // - allow the user to zoom without panning (saves focal point)\n // - allow the user to rotate without panning (saves focal point)\n // do we know what gesture we are doing yet? If not\n // see if we can figure it out\n if (model.currentGesture === 'Start') {\n // pinch is a move to/from the center point\n // rotate is a move along the circumference\n // pan is a move of the center point\n // compute the distance along each of these axes in pixels\n // the first to break thresh wins\n var thresh = 0.01 * Math.sqrt(model.container.clientWidth * model.container.clientWidth + model.container.clientHeight * model.container.clientHeight);\n\n if (thresh < 15.0) {\n thresh = 15.0;\n }\n\n var pinchDistance = Math.abs(newDistance - originalDistance);\n var rotateDistance = newDistance * 3.1415926 * Math.abs(angleDeviation) / 360.0;\n var panDistance = Math.sqrt(trans[0] * trans[0] + trans[1] * trans[1]);\n\n if (pinchDistance > thresh && pinchDistance > rotateDistance && pinchDistance > panDistance) {\n model.currentGesture = 'Pinch';\n var callData = {\n scale: 1.0,\n touches: positions\n };\n publicAPI.startPinchEvent(callData);\n } else if (rotateDistance > thresh && rotateDistance > panDistance) {\n model.currentGesture = 'Rotate';\n var _callData4 = {\n rotation: 0.0,\n touches: positions\n };\n publicAPI.startRotateEvent(_callData4);\n } else if (panDistance > thresh) {\n model.currentGesture = 'Pan';\n var _callData5 = {\n translation: [0, 0],\n touches: positions\n };\n publicAPI.startPanEvent(_callData5);\n }\n } else {\n // if we have found a specific type of movement then\n // handle it\n if (model.currentGesture === 'Rotate') {\n var _callData6 = {\n rotation: angleDeviation,\n touches: positions\n };\n publicAPI.rotateEvent(_callData6);\n }\n\n if (model.currentGesture === 'Pinch') {\n var _callData7 = {\n scale: newDistance / originalDistance,\n touches: positions\n };\n publicAPI.pinchEvent(_callData7);\n }\n\n if (model.currentGesture === 'Pan') {\n var _callData8 = {\n translation: trans,\n touches: positions\n };\n publicAPI.panEvent(_callData8);\n }\n }\n }\n };\n\n publicAPI.handleVisibilityChange = function () {\n model._animationStartTime = Date.now();\n model._animationFrameCount = 0;\n };\n\n publicAPI.setCurrentRenderer = function (r) {\n model._forcedRenderer = !!r;\n model.currentRenderer = r;\n }; // Stop animating if the renderWindowInteractor is deleted.\n\n\n var superDelete = publicAPI.delete;\n\n publicAPI.delete = function () {\n while (animationRequesters.size) {\n publicAPI.cancelAnimation(animationRequesters.values().next().value);\n }\n\n if (typeof document.hidden !== 'undefined') {\n document.removeEventListener('visibilitychange', publicAPI.handleVisibilityChange);\n }\n\n superDelete();\n }; // Use the Page Visibility API to detect when we switch away from or back to\n // this tab, and reset the animationFrameStart. When tabs are not active, browsers\n // will stop calling requestAnimationFrame callbacks.\n\n\n if (typeof document.hidden !== 'undefined') {\n document.addEventListener('visibilitychange', publicAPI.handleVisibilityChange, false);\n }\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n renderWindow: null,\n interactorStyle: null,\n picker: null,\n pickingManager: null,\n initialized: false,\n enabled: false,\n enableRender: true,\n currentRenderer: null,\n lightFollowCamera: true,\n desiredUpdateRate: 30.0,\n stillUpdateRate: 2.0,\n container: null,\n // _view: null,\n recognizeGestures: true,\n currentGesture: 'Start',\n animationRequest: null,\n lastFrameTime: 0.1,\n recentAnimationFrameRate: 10.0,\n wheelTimeoutID: 0,\n moveTimeoutID: 0,\n lastGamepadValues: {},\n preventDefaultOnPointerDown: false,\n preventDefaultOnPointerUp: false\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Object methods\n\n macro.obj(publicAPI, model); // run animation at least until this time\n\n model._animationExtendedEnd = 0;\n macro.event(publicAPI, model, 'RenderEvent');\n handledEvents.forEach(function (eventName) {\n return macro.event(publicAPI, model, eventName);\n }); // Create get-only macros\n\n macro.get(publicAPI, model, ['initialized', 'container', 'interactorStyle', 'lastFrameTime', 'recentAnimationFrameRate', '_view']); // Create get-set macros\n\n macro.setGet(publicAPI, model, ['lightFollowCamera', 'enabled', 'enableRender', 'recognizeGestures', 'desiredUpdateRate', 'stillUpdateRate', 'picker', 'preventDefaultOnPointerDown', 'preventDefaultOnPointerUp']);\n macro.moveToProtected(publicAPI, model, ['view']); // For more macro methods, see \"Sources/macros.js\"\n // Object specific methods\n\n vtkRenderWindowInteractor(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkRenderWindowInteractor'); // ----------------------------------------------------------------------------\n\nvar vtkRenderWindowInteractor$1 = _objectSpread({\n newInstance: newInstance,\n extend: extend,\n handledEvents: handledEvents\n}, Constants);\n\nexport { vtkRenderWindowInteractor$1 as default, extend, newInstance };\n","import macro from '../../macros.js';\nimport vtkDataArray from './DataArray.js';\nimport { VtkDataTypes } from './DataArray/Constants.js';\n\nvar vtkErrorMacro = macro.vtkErrorMacro;\nvar INVALID_BOUNDS = [1, -1, 1, -1, 1, -1]; // ----------------------------------------------------------------------------\n// vtkPoints methods\n// ----------------------------------------------------------------------------\n\nfunction vtkPoints(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkPoints'); // Forwarding methods\n\n publicAPI.getNumberOfPoints = publicAPI.getNumberOfTuples;\n\n publicAPI.setNumberOfPoints = function (nbPoints) {\n var dimension = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 3;\n\n if (publicAPI.getNumberOfPoints() !== nbPoints) {\n model.size = nbPoints * dimension;\n model.values = macro.newTypedArray(model.dataType, model.size);\n publicAPI.setNumberOfComponents(dimension);\n publicAPI.modified();\n }\n };\n\n publicAPI.setPoint = function (idx) {\n for (var _len = arguments.length, xyz = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n xyz[_key - 1] = arguments[_key];\n }\n\n publicAPI.setTuple(idx, xyz);\n };\n\n publicAPI.getPoint = publicAPI.getTuple;\n\n publicAPI.insertNextPoint = function (x, y, z) {\n return publicAPI.insertNextTuple([x, y, z]);\n };\n\n publicAPI.getBounds = function () {\n if (publicAPI.getNumberOfComponents() === 3) {\n var _xRange = publicAPI.getRange(0);\n\n model.bounds[0] = _xRange[0];\n model.bounds[1] = _xRange[1];\n\n var _yRange = publicAPI.getRange(1);\n\n model.bounds[2] = _yRange[0];\n model.bounds[3] = _yRange[1];\n var zRange = publicAPI.getRange(2);\n model.bounds[4] = zRange[0];\n model.bounds[5] = zRange[1];\n return model.bounds;\n }\n\n if (publicAPI.getNumberOfComponents() !== 2) {\n vtkErrorMacro(\"getBounds called on an array with components of\\n \".concat(publicAPI.getNumberOfComponents()));\n return INVALID_BOUNDS;\n }\n\n var xRange = publicAPI.getRange(0);\n model.bounds[0] = xRange[0];\n model.bounds[1] = xRange[1];\n var yRange = publicAPI.getRange(1);\n model.bounds[2] = yRange[0];\n model.bounds[3] = yRange[1];\n model.bounds[4] = 0;\n model.bounds[5] = 0;\n return model.bounds;\n }; // Trigger the computation of bounds\n\n\n publicAPI.computeBounds = publicAPI.getBounds; // Initialize\n\n publicAPI.setNumberOfComponents(model.numberOfComponents < 2 ? 3 : model.numberOfComponents);\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n empty: true,\n numberOfComponents: 3,\n dataType: VtkDataTypes.FLOAT,\n bounds: [1, -1, 1, -1, 1, -1]\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues);\n vtkDataArray.extend(publicAPI, model, initialValues);\n vtkPoints(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkPoints'); // ----------------------------------------------------------------------------\n\nvar vtkPoints$1 = {\n newInstance: newInstance,\n extend: extend\n};\n\nexport { vtkPoints$1 as default, extend, newInstance };\n","import _defineProperty from '@babel/runtime/helpers/defineProperty';\nimport _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';\nimport macro from '../../macros.js';\nimport vtkDataArray from './DataArray.js';\nimport { VtkDataTypes } from './DataArray/Constants.js';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n// Global methods\n// ----------------------------------------------------------------------------\n\nfunction extractCellSizes(cellArray) {\n var currentIdx = 0;\n return cellArray.filter(function (value, index) {\n if (index === currentIdx) {\n currentIdx += value + 1;\n return true;\n }\n\n return false;\n });\n}\n\nfunction getNumberOfCells(cellArray) {\n var cellId = 0;\n\n for (var cellArrayIndex = 0; cellArrayIndex < cellArray.length;) {\n cellArrayIndex += cellArray[cellArrayIndex] + 1;\n cellId++;\n }\n\n return cellId;\n} // ----------------------------------------------------------------------------\n// Static API\n// ----------------------------------------------------------------------------\n\n\nvar STATIC = {\n extractCellSizes: extractCellSizes,\n getNumberOfCells: getNumberOfCells\n}; // ----------------------------------------------------------------------------\n// vtkCellArray methods\n// ----------------------------------------------------------------------------\n\nfunction vtkCellArray(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkCellArray');\n\n publicAPI.getNumberOfCells = function (recompute) {\n if (model.numberOfCells !== undefined && !recompute) {\n return model.numberOfCells;\n }\n\n if (model.cellSizes) {\n model.numberOfCells = model.cellSizes.length;\n } else {\n model.numberOfCells = getNumberOfCells(publicAPI.getData());\n }\n\n return model.numberOfCells;\n };\n\n publicAPI.getCellSizes = function (recompute) {\n if (model.cellSizes !== undefined && !recompute) {\n return model.cellSizes;\n }\n\n model.cellSizes = extractCellSizes(publicAPI.getData());\n return model.cellSizes;\n };\n\n var superSetData = publicAPI.setData;\n\n publicAPI.setData = function (typedArray) {\n superSetData(typedArray, 1);\n model.numberOfCells = undefined;\n model.cellSizes = undefined;\n };\n\n publicAPI.getCell = function (loc) {\n var cellLoc = loc;\n var numberOfPoints = model.values[cellLoc++];\n return model.values.subarray(cellLoc, cellLoc + numberOfPoints);\n };\n\n var superInitialize = publicAPI.initialize;\n\n publicAPI.initialize = function () {\n superInitialize(); // Set to undefined to ensure insertNextCell works correctly\n\n model.numberOfCells = undefined;\n model.cellSizes = undefined;\n };\n\n publicAPI.insertNextCell = function (cellPointIds) {\n var cellId = publicAPI.getNumberOfCells();\n publicAPI.insertNextTuples([cellPointIds.length].concat(_toConsumableArray(cellPointIds))); // By computing the number of cells earlier, we made sure that numberOfCells is defined\n\n ++model.numberOfCells;\n\n if (model.cellSizes != null) {\n model.cellSizes.push(cellPointIds.length);\n }\n\n return cellId;\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nfunction defaultValues(initialValues) {\n return _objectSpread({\n empty: true,\n numberOfComponents: 1,\n dataType: VtkDataTypes.UNSIGNED_INT\n }, initialValues);\n} // ----------------------------------------------------------------------------\n\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n vtkDataArray.extend(publicAPI, model, defaultValues(initialValues));\n vtkCellArray(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkCellArray'); // ----------------------------------------------------------------------------\n\nvar vtkCellArray$1 = _objectSpread({\n newInstance: newInstance,\n extend: extend\n}, STATIC);\n\nexport { STATIC, vtkCellArray$1 as default, extend, newInstance };\n","import macro from '../../macros.js';\nimport { u as uninitializeBounds } from '../Core/Math/index.js';\nimport vtkPoints from '../Core/Points.js';\n\n// vtkCell methods\n// ----------------------------------------------------------------------------\n\nfunction vtkCell(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkCell');\n\n publicAPI.initialize = function (points) {\n var pointIdsList = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n if (!pointIdsList) {\n model.points = points;\n model.pointsIds = new Array(points.getNumberOfPoints());\n\n for (var i = points.getNumberOfPoints() - 1; i >= 0; --i) {\n model.pointsIds[i] = i;\n }\n } else {\n model.pointsIds = pointIdsList;\n var triangleData = model.points.getData();\n\n if (triangleData.length !== 3 * model.pointsIds.length) {\n triangleData = macro.newTypedArray(points.getDataType(), 3 * model.pointsIds.length);\n }\n\n var pointsData = points.getData();\n model.pointsIds.forEach(function (pointId, index) {\n // const start = 3 * pointId;\n // pointsData.set(p.subarray(start, start + 3), 3 * index);\n var pointOffset = 3 * pointId;\n var trianglePointOffset = 3 * index;\n triangleData[trianglePointOffset] = pointsData[pointOffset];\n triangleData[++trianglePointOffset] = pointsData[++pointOffset];\n triangleData[++trianglePointOffset] = pointsData[++pointOffset];\n });\n model.points.setData(triangleData);\n }\n };\n\n publicAPI.getBounds = function () {\n var nbPoints = model.points.getNumberOfPoints();\n var x = [];\n\n if (nbPoints) {\n model.points.getPoint(0, x);\n model.bounds[0] = x[0];\n model.bounds[1] = x[0];\n model.bounds[2] = x[1];\n model.bounds[3] = x[1];\n model.bounds[4] = x[2];\n model.bounds[5] = x[2];\n\n for (var i = 1; i < nbPoints; i++) {\n model.points.getPoint(i, x);\n model.bounds[0] = x[0] < model.bounds[0] ? x[0] : model.bounds[0];\n model.bounds[1] = x[0] > model.bounds[1] ? x[0] : model.bounds[1];\n model.bounds[2] = x[1] < model.bounds[2] ? x[1] : model.bounds[2];\n model.bounds[3] = x[1] > model.bounds[3] ? x[1] : model.bounds[3];\n model.bounds[4] = x[2] < model.bounds[4] ? x[2] : model.bounds[4];\n model.bounds[5] = x[2] > model.bounds[5] ? x[2] : model.bounds[5];\n }\n } else {\n uninitializeBounds(model.bounds);\n }\n\n return model.bounds;\n };\n\n publicAPI.getLength2 = function () {\n publicAPI.getBounds();\n var length = 0.0;\n var diff = 0;\n\n for (var i = 0; i < 3; i++) {\n diff = model.bounds[2 * i + 1] - model.bounds[2 * i];\n length += diff * diff;\n }\n\n return length;\n };\n\n publicAPI.getParametricDistance = function (pcoords) {\n var pDist;\n var pDistMax = 0.0;\n\n for (var i = 0; i < 3; i++) {\n if (pcoords[i] < 0.0) {\n pDist = -pcoords[i];\n } else if (pcoords[i] > 1.0) {\n pDist = pcoords[i] - 1.0;\n } else {\n // inside the cell in the parametric direction\n pDist = 0.0;\n }\n\n if (pDist > pDistMax) {\n pDistMax = pDist;\n }\n }\n\n return pDistMax;\n };\n\n publicAPI.getNumberOfPoints = function () {\n return model.points.getNumberOfPoints();\n };\n\n publicAPI.deepCopy = function (cell) {\n cell.initialize(model.points, model.pointsIds);\n };\n\n publicAPI.getCellDimension = function () {}; // virtual\n\n\n publicAPI.intersectWithLine = function (p1, p2, tol, t, x, pcoords, subId) {}; // virtual\n\n\n publicAPI.evaluatePosition = function (x, closestPoint, subId, pcoords, dist2, weights) {\n macro.vtkErrorMacro('vtkCell.evaluatePosition is not implemented.');\n }; // virtual\n\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n bounds: [-1, -1, -1, -1, -1, -1],\n pointsIds: []\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues);\n macro.obj(publicAPI, model);\n\n if (!model.points) {\n model.points = vtkPoints.newInstance();\n }\n\n macro.get(publicAPI, model, ['points', 'pointsIds']);\n vtkCell(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkCell'); // ----------------------------------------------------------------------------\n\nvar vtkCell$1 = {\n newInstance: newInstance,\n extend: extend\n};\n\nexport { vtkCell$1 as default, extend, newInstance };\n","import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';\nimport macro from '../../macros.js';\nimport vtkCell from './Cell.js';\n\n// Global methods\n// ----------------------------------------------------------------------------\n\nvar InitLink = {\n ncells: 0,\n cells: null\n};\n\nfunction resize(model, sz) {\n var newSize = sz;\n\n if (sz >= model.array.length) {\n newSize += model.array.length;\n }\n\n while (newSize > model.array.length) {\n model.array.push({\n ncells: 0,\n cells: null\n });\n }\n\n model.array.length = newSize;\n} // ----------------------------------------------------------------------------\n// vtkCellLinks methods\n// ----------------------------------------------------------------------------\n\n\nfunction vtkCellLinks(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkCellLinks');\n /**\n * Build the link list array. All subclasses of vtkAbstractCellLinks\n * must support this method.\n */\n\n publicAPI.buildLinks = function (data) {\n var numPts = data.getPoints().getNumberOfPoints();\n var numCells = data.getNumberOfCells(); // fill out lists with number of references to cells\n\n var linkLoc = new Uint32Array(numPts); // Use fast path if polydata\n\n if (data.isA('vtkPolyData')) {\n // traverse data to determine number of uses of each point\n for (var cellId = 0; cellId < numCells; ++cellId) {\n var _data$getCellPoints = data.getCellPoints(cellId),\n cellPointIds = _data$getCellPoints.cellPointIds;\n\n cellPointIds.forEach(function (cellPointId) {\n publicAPI.incrementLinkCount(cellPointId);\n });\n } // now allocate storage for the links\n\n\n publicAPI.allocateLinks(numPts);\n model.maxId = numPts - 1;\n\n var _loop = function _loop(_cellId) {\n var _data$getCellPoints2 = data.getCellPoints(_cellId),\n cellPointIds = _data$getCellPoints2.cellPointIds;\n\n cellPointIds.forEach(function (cellPointId) {\n publicAPI.insertCellReference(cellPointId, linkLoc[cellPointId]++, _cellId);\n });\n };\n\n for (var _cellId = 0; _cellId < numCells; ++_cellId) {\n _loop(_cellId);\n }\n } // any other type of dataset\n else {\n // traverse data to determine number of uses of each point\n for (var _cellId2 = 0; _cellId2 < numCells; _cellId2++) {\n // TODO: Currently not supported: const cell = data.getCell(cellId);\n var cell = vtkCell.newInstance();\n cell.getPointsIds().forEach(function (cellPointId) {\n publicAPI.incrementLinkCount(cellPointId);\n });\n } // now allocate storage for the links\n\n\n publicAPI.allocateLinks(numPts);\n model.maxId = numPts - 1;\n\n var _loop2 = function _loop2(_cellId3) {\n // TODO: Currently not supported: const cell = data.getCell(cellId);\n var cell = vtkCell.newInstance();\n cell.getPointsIds().forEach(function (cellPointId) {\n publicAPI.insertCellReference(cellPointId, linkLoc[cellPointId]++, _cellId3);\n });\n };\n\n for (var _cellId3 = 0; _cellId3 < numCells; ++_cellId3) {\n _loop2(_cellId3);\n }\n } // end else\n\n };\n /**\n * Build the link list array with a provided connectivity array.\n */\n // publicAPI.buildLinks = (data, connectivity) => {};\n\n /**\n * Allocate the specified number of links (i.e., number of points) that\n * will be built.\n */\n\n\n publicAPI.allocate = function (numLinks) {\n var ext = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;\n model.array = Array(numLinks).fill().map(function () {\n return {\n ncells: 0,\n cells: null\n };\n });\n model.extend = ext;\n model.maxId = -1;\n };\n\n publicAPI.initialize = function () {\n model.array = null;\n };\n /**\n * Get a link structure given a point id.\n */\n\n\n publicAPI.getLink = function (ptId) {\n return model.array[ptId];\n };\n /**\n * Get the number of cells using the point specified by ptId.\n */\n\n\n publicAPI.getNcells = function (ptId) {\n return model.array[ptId].ncells;\n };\n /**\n * Return a list of cell ids using the point.\n */\n\n\n publicAPI.getCells = function (ptId) {\n return model.array[ptId].cells;\n };\n /**\n * Insert a new point into the cell-links data structure. The size parameter\n * is the initial size of the list.\n */\n\n\n publicAPI.insertNextPoint = function (numLinks) {\n model.array.push({\n ncells: numLinks,\n cells: Array(numLinks)\n });\n ++model.maxId;\n };\n /**\n * Insert a cell id into the list of cells (at the end) using the cell id\n * provided. (Make sure to extend the link list (if necessary) using the\n * method resizeCellList().)\n */\n\n\n publicAPI.insertNextCellReference = function (ptId, cellId) {\n model.array[ptId].cells[model.array[ptId].ncells++] = cellId;\n };\n /**\n * Delete point (and storage) by destroying links to using cells.\n */\n\n\n publicAPI.deletePoint = function (ptId) {\n model.array[ptId].ncells = 0;\n model.array[ptId].cells = null;\n };\n /**\n * Delete the reference to the cell (cellId) from the point (ptId). This\n * removes the reference to the cellId from the cell list, but does not\n * resize the list (recover memory with resizeCellList(), if necessary).\n */\n\n\n publicAPI.removeCellReference = function (cellId, ptId) {\n model.array[ptId].cells = model.array[ptId].cells.filter(function (cell) {\n return cell !== cellId;\n });\n model.array[ptId].ncells = model.array[ptId].cells.length;\n };\n /**\n * Add the reference to the cell (cellId) from the point (ptId). This\n * adds a reference to the cellId from the cell list, but does not resize\n * the list (extend memory with resizeCellList(), if necessary).\n */\n\n\n publicAPI.addCellReference = function (cellId, ptId) {\n model.array[ptId].cells[model.array[ptId].ncells++] = cellId;\n };\n /**\n * Change the length of a point's link list (i.e., list of cells using a\n * point) by the size specified.\n */\n\n\n publicAPI.resizeCellList = function (ptId, size) {\n model.array[ptId].cells.length = size;\n };\n /**\n * Reclaim any unused memory.\n */\n\n\n publicAPI.squeeze = function () {\n resize(model, model.maxId + 1);\n };\n /**\n * Reset to a state of no entries without freeing the memory.\n */\n\n\n publicAPI.reset = function () {\n model.maxId = -1;\n };\n /**\n * Standard DeepCopy method. Since this object contains no reference\n * to other objects, there is no ShallowCopy.\n */\n\n\n publicAPI.deepCopy = function (src) {\n model.array = _toConsumableArray(src.array);\n model.extend = src.extend;\n model.maxId = src.maxId;\n };\n /**\n * Increment the count of the number of cells using the point.\n */\n\n\n publicAPI.incrementLinkCount = function (ptId) {\n ++model.array[ptId].ncells;\n };\n\n publicAPI.allocateLinks = function (n) {\n for (var i = 0; i < n; ++i) {\n model.array[i].cells = new Array(model.array[i].ncells);\n }\n };\n /**\n * Insert a cell id into the list of cells using the point.\n */\n\n\n publicAPI.insertCellReference = function (ptId, pos, cellId) {\n model.array[ptId].cells[pos] = cellId;\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n array: null,\n // pointer to data\n maxId: 0,\n // maximum index inserted thus far\n extend: 0 // grow array by this point\n\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues);\n macro.obj(publicAPI, model);\n vtkCellLinks(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkCellLinks'); // ----------------------------------------------------------------------------\n\nvar vtkCellLinks$1 = {\n newInstance: newInstance,\n extend: extend\n};\n\nexport { InitLink, vtkCellLinks$1 as default, extend, newInstance };\n","var CellType = {\n // Linear cells\n VTK_EMPTY_CELL: 0,\n VTK_VERTEX: 1,\n VTK_POLY_VERTEX: 2,\n VTK_LINE: 3,\n VTK_POLY_LINE: 4,\n VTK_TRIANGLE: 5,\n VTK_TRIANGLE_STRIP: 6,\n VTK_POLYGON: 7,\n VTK_PIXEL: 8,\n VTK_QUAD: 9,\n VTK_TETRA: 10,\n VTK_VOXEL: 11,\n VTK_HEXAHEDRON: 12,\n VTK_WEDGE: 13,\n VTK_PYRAMID: 14,\n VTK_PENTAGONAL_PRISM: 15,\n VTK_HEXAGONAL_PRISM: 16,\n // Quadratic, isoparametric cells\n VTK_QUADRATIC_EDGE: 21,\n VTK_QUADRATIC_TRIANGLE: 22,\n VTK_QUADRATIC_QUAD: 23,\n VTK_QUADRATIC_POLYGON: 36,\n VTK_QUADRATIC_TETRA: 24,\n VTK_QUADRATIC_HEXAHEDRON: 25,\n VTK_QUADRATIC_WEDGE: 26,\n VTK_QUADRATIC_PYRAMID: 27,\n VTK_BIQUADRATIC_QUAD: 28,\n VTK_TRIQUADRATIC_HEXAHEDRON: 29,\n VTK_QUADRATIC_LINEAR_QUAD: 30,\n VTK_QUADRATIC_LINEAR_WEDGE: 31,\n VTK_BIQUADRATIC_QUADRATIC_WEDGE: 32,\n VTK_BIQUADRATIC_QUADRATIC_HEXAHEDRON: 33,\n VTK_BIQUADRATIC_TRIANGLE: 34,\n // Cubic, isoparametric cell\n VTK_CUBIC_LINE: 35,\n // Special class of cells formed by convex group of points\n VTK_CONVEX_POINT_SET: 41,\n // Polyhedron cell (consisting of polygonal faces)\n VTK_POLYHEDRON: 42,\n // Higher order cells in parametric form\n VTK_PARAMETRIC_CURVE: 51,\n VTK_PARAMETRIC_SURFACE: 52,\n VTK_PARAMETRIC_TRI_SURFACE: 53,\n VTK_PARAMETRIC_QUAD_SURFACE: 54,\n VTK_PARAMETRIC_TETRA_REGION: 55,\n VTK_PARAMETRIC_HEX_REGION: 56,\n // Higher order cells\n VTK_HIGHER_ORDER_EDGE: 60,\n VTK_HIGHER_ORDER_TRIANGLE: 61,\n VTK_HIGHER_ORDER_QUAD: 62,\n VTK_HIGHER_ORDER_POLYGON: 63,\n VTK_HIGHER_ORDER_TETRAHEDRON: 64,\n VTK_HIGHER_ORDER_WEDGE: 65,\n VTK_HIGHER_ORDER_PYRAMID: 66,\n VTK_HIGHER_ORDER_HEXAHEDRON: 67,\n // Arbitrary order Lagrange elements (formulated separated from generic higher order cells)\n VTK_LAGRANGE_CURVE: 68,\n VTK_LAGRANGE_TRIANGLE: 69,\n VTK_LAGRANGE_QUADRILATERAL: 70,\n VTK_LAGRANGE_TETRAHEDRON: 71,\n VTK_LAGRANGE_HEXAHEDRON: 72,\n VTK_LAGRANGE_WEDGE: 73,\n VTK_LAGRANGE_PYRAMID: 74,\n VTK_NUMBER_OF_CELL_TYPES: 75\n}; // This list should contain the cell class names in\n// the same order as in CellType.\n\nvar CellTypesStrings = ['vtkEmptyCell', 'vtkVertex', 'vtkPolyVertex', 'vtkLine', 'vtkPolyLine', 'vtkTriangle', 'vtkTriangleStrip', 'vtkPolygon', 'vtkPixel', 'vtkQuad', 'vtkTetra', 'vtkVoxel', 'vtkHexahedron', 'vtkWedge', 'vtkPyramid', 'vtkPentagonalPrism', 'vtkHexagonalPrism', 'UnknownClass', 'UnknownClass', 'UnknownClass', 'UnknownClass', 'vtkQuadraticEdge', 'vtkQuadraticTriangle', 'vtkQuadraticQuad', 'vtkQuadraticTetra', 'vtkQuadraticHexahedron', 'vtkQuadraticWedge', 'vtkQuadraticPyramid', 'vtkBiQuadraticQuad', 'vtkTriQuadraticHexahedron', 'vtkQuadraticLinearQuad', 'vtkQuadraticLinearWedge', 'vtkBiQuadraticQuadraticWedge', 'vtkBiQuadraticQuadraticHexahedron', 'vtkBiQuadraticTriangle', 'vtkCubicLine', 'vtkQuadraticPolygon', 'UnknownClass', 'UnknownClass', 'UnknownClass', 'UnknownClass', 'vtkConvexPointSet', 'UnknownClass', 'UnknownClass', 'UnknownClass', 'UnknownClass', 'UnknownClass', 'UnknownClass', 'UnknownClass', 'UnknownClass', 'UnknownClass', 'vtkParametricCurve', 'vtkParametricSurface', 'vtkParametricTriSurface', 'vtkParametricQuadSurface', 'vtkParametricTetraRegion', 'vtkParametricHexRegion', 'UnknownClass', 'UnknownClass', 'UnknownClass', 'vtkHigherOrderEdge', 'vtkHigherOrderTriangle', 'vtkHigherOrderQuad', 'vtkHigherOrderPolygon', 'vtkHigherOrderTetrahedron', 'vtkHigherOrderWedge', 'vtkHigherOrderPyramid', 'vtkHigherOrderHexahedron'];\nvar Constants = {\n CellType: CellType,\n CellTypesStrings: CellTypesStrings\n};\n\nexport { CellType, CellTypesStrings, Constants as default };\n","import _defineProperty from '@babel/runtime/helpers/defineProperty';\nimport macro from '../../macros.js';\nimport { CellTypesStrings, CellType } from './CellTypes/Constants.js';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n// Global methods\n// ----------------------------------------------------------------------------\n\n/**\n * Given an int (as defined in vtkCellType.h) identifier for a class\n * return it's classname.\n */\n\nfunction getClassNameFromTypeId(typeId) {\n return typeId < CellTypesStrings.length ? CellTypesStrings[typeId] : 'UnknownClass';\n}\n/**\n * Given a data object classname, return it's int identified (as\n * defined in vtkCellType.h)\n */\n\n\nfunction getTypeIdFromClassName(cellTypeString) {\n return CellTypesStrings.findIndex(cellTypeString);\n}\n/**\n * This convenience method is a fast check to determine if a cell type\n * represents a linear or nonlinear cell. This is generally much more\n * efficient than getting the appropriate vtkCell and checking its IsLinear\n * method.\n */\n\n\nfunction isLinear(type) {\n return type < CellType.VTK_QUADRATIC_EDGE || type === CellType.VTK_CONVEX_POINT_SET || type === CellType.VTK_POLYHEDRON;\n}\n\nfunction hasSubCells(cellType) {\n return cellType === CellType.VTK_TRIANGLE_STRIP || cellType === CellType.VTK_POLY_LINE || cellType === CellType.VTK_POLY_VERTEX;\n} // ----------------------------------------------------------------------------\n// Static API\n// ----------------------------------------------------------------------------\n\n\nvar STATIC = {\n getClassNameFromTypeId: getClassNameFromTypeId,\n getTypeIdFromClassName: getTypeIdFromClassName,\n isLinear: isLinear,\n hasSubCells: hasSubCells\n}; // ----------------------------------------------------------------------------\n// vtkCellTypes methods\n// ----------------------------------------------------------------------------\n\nfunction vtkCellTypes(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkCellTypes');\n /**\n * Allocate memory for this array. Delete old storage only if necessary.\n */\n\n publicAPI.allocate = function () {\n var sz = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 512;\n var ext = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;\n model.size = sz > 0 ? sz : 1;\n model.extend = ext > 0 ? ext : 1;\n model.maxId = -1;\n model.typeArray = new Uint8Array(sz);\n model.locationArray = new Uint32Array(sz);\n };\n /**\n * Add a cell at specified id.\n */\n\n\n publicAPI.insertCell = function (cellId, type, loc) {\n model.typeArray[cellId] = type;\n model.locationArray[cellId] = loc;\n\n if (cellId > model.maxId) {\n model.maxId = cellId;\n }\n };\n /**\n * Add a cell to the object in the next available slot.\n */\n\n\n publicAPI.insertNextCell = function (type, loc) {\n publicAPI.insertCell(++model.maxId, type, loc);\n return model.maxId;\n };\n /**\n * Specify a group of cell types. This version is provided to maintain\n * backwards compatibility and does a copy of the cellLocations\n */\n\n\n publicAPI.setCellTypes = function (ncells, cellTypes, cellLocations) {\n model.size = ncells;\n model.typeArray = cellTypes;\n model.locationArray = cellLocations;\n model.maxId = ncells - 1;\n };\n /**\n * Return the location of the cell in the associated vtkCellArray.\n */\n\n\n publicAPI.getCellLocation = function (cellId) {\n return model.locationArray[cellId];\n };\n /**\n * Delete cell by setting to nullptr cell type.\n */\n\n\n publicAPI.deleteCell = function (cellId) {\n model.typeArray[cellId] = CellType.VTK_EMPTY_CELL;\n };\n /**\n * Return the number of types in the list.\n */\n\n\n publicAPI.getNumberOfTypes = function () {\n return model.maxId + 1;\n };\n /**\n * Return true if type specified is contained in list; false otherwise.\n */\n\n\n publicAPI.isType = function (type) {\n var numTypes = publicAPI.getNumberOfTypes();\n\n for (var i = 0; i < numTypes; ++i) {\n if (type === publicAPI.getCellType(i)) {\n return true;\n }\n }\n\n return false;\n };\n /**\n * Add the type specified to the end of the list. Range checking is performed.\n */\n\n\n publicAPI.insertNextType = function (type) {\n return publicAPI.insertNextCell(type, -1);\n };\n /**\n * Return the type of cell.\n */\n\n\n publicAPI.getCellType = function (cellId) {\n return model.typeArray[cellId];\n };\n /**\n * Reclaim any extra memory.\n */\n // TODO: publicAPI.squeeze = () => {};\n\n /**\n * Initialize object without releasing memory.\n */\n\n\n publicAPI.reset = function () {\n model.maxId = -1;\n };\n /**\n * Standard DeepCopy method. Since this object contains no reference\n * to other objects, there is no ShallowCopy.\n */\n\n\n publicAPI.deepCopy = function (src) {\n publicAPI.allocate(src.getSize(), src.getExtend());\n model.typeArray.set(src.getTypeArray());\n model.locationArray.set(src.getLocationArray());\n model.maxId = src.getMaxId();\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n // typeArray: null, // pointer to types array\n // locationArray: null; // pointer to array of offsets\n size: 0,\n // allocated size of data\n maxId: -1,\n // maximum index inserted thus far\n extend: 1000 // grow array by this point\n\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues);\n macro.obj(publicAPI, model);\n macro.get(publicAPI, model, ['size', 'maxId', 'extend']);\n macro.getArray(publicAPI, model, ['typeArray', 'locationArray']);\n vtkCellTypes(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkCellTypes'); // ----------------------------------------------------------------------------\n\nvar vtkCellTypes$1 = _objectSpread({\n newInstance: newInstance,\n extend: extend\n}, STATIC);\n\nexport { STATIC, vtkCellTypes$1 as default, extend, newInstance };\n","var IntersectionState = {\n NO_INTERSECTION: 0,\n YES_INTERSECTION: 1,\n ON_LINE: 2\n};\nvar Constants = {\n IntersectionState: IntersectionState\n};\n\nexport { IntersectionState, Constants as default };\n","import _defineProperty from '@babel/runtime/helpers/defineProperty';\nimport macro from '../../macros.js';\nimport Constants from './Line/Constants.js';\nimport vtkCell from './Cell.js';\nimport { d as dot, f as distance2BetweenPoints, s as subtract, j as solveLinearSystem } from '../Core/Math/index.js';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nvar IntersectionState = Constants.IntersectionState; // ----------------------------------------------------------------------------\n// Global methods\n// ----------------------------------------------------------------------------\n\nfunction distanceToLine(x, p1, p2) {\n var closestPoint = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n var outObj = {\n t: Number.MIN_VALUE,\n distance: 0\n };\n var p21 = [];\n var closest; // Determine appropriate vector\n\n p21[0] = p2[0] - p1[0];\n p21[1] = p2[1] - p1[1];\n p21[2] = p2[2] - p1[2]; // Get parametric location\n\n var num = p21[0] * (x[0] - p1[0]) + p21[1] * (x[1] - p1[1]) + p21[2] * (x[2] - p1[2]);\n var denom = dot(p21, p21); // trying to avoid an expensive fabs\n\n var tolerance = 1e-5 * num;\n\n if (denom !== 0.0) {\n outObj.t = num / denom;\n }\n\n if (tolerance < 0.0) {\n tolerance = -tolerance;\n }\n\n if (-tolerance < denom && denom < tolerance) {\n closest = p1;\n } else if (denom <= 0.0 || outObj.t < 0.0) {\n // If parametric coordinate is within 0<=p<=1, then the point is closest to\n // the line. Otherwise, it's closest to a point at the end of the line.\n closest = p1;\n } else if (outObj.t > 1.0) {\n closest = p2;\n } else {\n closest = p21;\n p21[0] = p1[0] + outObj.t * p21[0];\n p21[1] = p1[1] + outObj.t * p21[1];\n p21[2] = p1[2] + outObj.t * p21[2];\n }\n\n if (closestPoint) {\n closestPoint[0] = closest[0];\n closestPoint[1] = closest[1];\n closestPoint[2] = closest[2];\n }\n\n outObj.distance = distance2BetweenPoints(closest, x);\n return outObj;\n}\n\nfunction intersection(a1, a2, b1, b2, u, v) {\n var a21 = [];\n var b21 = [];\n var b1a1 = [];\n u[0] = 0.0;\n v[0] = 0.0; // Determine line vectors.\n\n subtract(a2, a1, a21);\n subtract(b2, b1, b21);\n subtract(b1, a1, b1a1); // Compute the system (least squares) matrix.\n\n var A = [dot(a21, a21), -dot(a21, b21), -dot(a21, b21), dot(b21, b21)]; // Compute the least squares system constant term.\n\n var c = [];\n c[0] = dot(a21, b1a1);\n c[1] = -dot(b21, b1a1); // Solve the system of equations\n\n if (solveLinearSystem(A, c, 2) === 0) {\n // The lines are colinear. Therefore, one of the four endpoints is the\n // point of closest approach\n var minDist = Number.MAX_VALUE;\n var p = [a1, a2, b1, b2];\n var l1 = [b1, b1, a1, a1];\n var l2 = [b2, b2, a2, a2];\n var uv1 = [v[0], v[0], u[0], u[0]];\n var uv2 = [u[0], u[0], v[0], v[0]];\n var obj;\n\n for (var i = 0; i < 4; i++) {\n obj = distanceToLine(p[i], l1[i], l2[i]);\n\n if (obj.distance < minDist) {\n minDist = obj.distance;\n uv1[i] = obj.t;\n uv2[i] = i % 2;\n }\n }\n\n return IntersectionState.ON_LINE;\n }\n\n u[0] = c[0];\n v[0] = c[1]; // Check parametric coordinates for intersection.\n\n if (u[0] >= 0.0 && u[0] <= 1.0 && v[0] >= 0.0 && v[0] <= 1.0) {\n return IntersectionState.YES_INTERSECTION;\n }\n\n return IntersectionState.NO_INTERSECTION;\n} // ----------------------------------------------------------------------------\n// Static API\n// ----------------------------------------------------------------------------\n\n\nvar STATIC = {\n distanceToLine: distanceToLine,\n intersection: intersection\n}; // ----------------------------------------------------------------------------\n// vtkLine methods\n// ----------------------------------------------------------------------------\n\nfunction vtkLine(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkLine');\n\n function isBetweenPoints(t) {\n return t >= 0.0 && t <= 1.0;\n }\n\n publicAPI.getCellDimension = function () {\n return 1;\n };\n\n publicAPI.intersectWithLine = function (p1, p2, tol, x, pcoords) {\n var outObj = {\n intersect: 0,\n t: Number.MAX_VALUE,\n subId: 0,\n betweenPoints: null\n };\n pcoords[1] = 0.0;\n pcoords[2] = 0.0;\n var projXYZ = [];\n var a1 = [];\n var a2 = [];\n model.points.getPoint(0, a1);\n model.points.getPoint(1, a2);\n var u = [];\n var v = [];\n var intersect = intersection(p1, p2, a1, a2, u, v);\n outObj.t = u[0];\n outObj.betweenPoints = isBetweenPoints(outObj.t);\n pcoords[0] = v[0];\n\n if (intersect === IntersectionState.YES_INTERSECTION) {\n // make sure we are within tolerance\n for (var i = 0; i < 3; i++) {\n x[i] = a1[i] + pcoords[0] * (a2[i] - a1[i]);\n projXYZ[i] = p1[i] + outObj.t * (p2[i] - p1[i]);\n }\n\n if (distance2BetweenPoints(x, projXYZ) <= tol * tol) {\n outObj.intersect = 1;\n return outObj;\n }\n } else {\n var outDistance; // check to see if it lies within tolerance\n // one of the parametric coords must be outside 0-1\n\n if (outObj.t < 0.0) {\n outDistance = distanceToLine(p1, a1, a2, x);\n\n if (outDistance.distance <= tol * tol) {\n outObj.t = 0.0;\n outObj.intersect = 1;\n outObj.betweenPoints = true; // Intersection is near p1\n\n return outObj;\n }\n\n return outObj;\n }\n\n if (outObj.t > 1.0) {\n outDistance = distanceToLine(p2, a1, a2, x);\n\n if (outDistance.distance <= tol * tol) {\n outObj.t = 1.0;\n outObj.intersect = 1;\n outObj.betweenPoints = true; // Intersection is near p2\n\n return outObj;\n }\n\n return outObj;\n }\n\n if (pcoords[0] < 0.0) {\n pcoords[0] = 0.0;\n outDistance = distanceToLine(a1, p1, p2, x);\n outObj.t = outDistance.t;\n\n if (outDistance.distance <= tol * tol) {\n outObj.intersect = 1;\n return outObj;\n }\n\n return outObj;\n }\n\n if (pcoords[0] > 1.0) {\n pcoords[0] = 1.0;\n outDistance = distanceToLine(a2, p1, p2, x);\n outObj.t = outDistance.t;\n\n if (outDistance.distance <= tol * tol) {\n outObj.intersect = 1;\n return outObj;\n }\n\n return outObj;\n }\n }\n\n return outObj;\n };\n\n publicAPI.evaluateLocation = function (pcoords, x, weights) {\n var a1 = [];\n var a2 = [];\n model.points.getPoint(0, a1);\n model.points.getPoint(1, a2);\n\n for (var i = 0; i < 3; i++) {\n x[i] = a1[i] + pcoords[0] * (a2[i] - a1[i]);\n }\n\n weights[0] = 1.0 - pcoords[0];\n weights[1] = pcoords[0];\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues);\n vtkCell.extend(publicAPI, model, initialValues);\n vtkLine(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkLine'); // ----------------------------------------------------------------------------\n\nvar vtkLine$1 = _objectSpread(_objectSpread({\n newInstance: newInstance,\n extend: extend\n}, STATIC), Constants);\n\nexport { STATIC, vtkLine$1 as default, extend, newInstance };\n","import vtk from '../../vtk.js';\nimport macro from '../../macros.js';\nimport vtkDataSet from './DataSet.js';\nimport vtkPoints from '../Core/Points.js';\n\n// Global methods\n// ----------------------------------------------------------------------------\n// ----------------------------------------------------------------------------\n// vtkPointSet methods\n// ----------------------------------------------------------------------------\n\nfunction vtkPointSet(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkPointSet'); // Create empty points\n\n if (!model.points) {\n model.points = vtkPoints.newInstance();\n } else {\n model.points = vtk(model.points);\n }\n\n publicAPI.getNumberOfPoints = function () {\n return model.points.getNumberOfPoints();\n };\n\n publicAPI.getBounds = function () {\n return model.points.getBounds();\n };\n\n publicAPI.computeBounds = function () {\n publicAPI.getBounds();\n };\n\n var superShallowCopy = publicAPI.shallowCopy;\n\n publicAPI.shallowCopy = function (other) {\n var debug = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n superShallowCopy(other, debug);\n model.points = vtkPoints.newInstance();\n model.points.shallowCopy(other.getPoints());\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {// points: null,\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Inheritance\n\n vtkDataSet.extend(publicAPI, model, initialValues);\n macro.setGet(publicAPI, model, ['points']); // Object specific methods\n\n vtkPointSet(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkPointSet'); // ----------------------------------------------------------------------------\n\nvar vtkPointSet$1 = {\n newInstance: newInstance,\n extend: extend\n};\n\nexport { vtkPointSet$1 as default, extend, newInstance };\n","import _defineProperty from '@babel/runtime/helpers/defineProperty';\nimport macro from '../../macros.js';\nimport vtkCell from './Cell.js';\nimport { d as dot, k as cross, m as normalize, o as multiplyAccumulate, f as distance2BetweenPoints, p as determinant2x2 } from '../Core/Math/index.js';\nimport vtkLine from './Line.js';\nimport vtkPlane from './Plane.js';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n// Global methods\n// ----------------------------------------------------------------------------\n\nfunction computeNormalDirection(v1, v2, v3, n) {\n // order is important!!! maintain consistency with triangle vertex order\n var ax = v3[0] - v2[0];\n var ay = v3[1] - v2[1];\n var az = v3[2] - v2[2];\n var bx = v1[0] - v2[0];\n var by = v1[1] - v2[1];\n var bz = v1[2] - v2[2];\n n[0] = ay * bz - az * by;\n n[1] = az * bx - ax * bz;\n n[2] = ax * by - ay * bx;\n}\n\nfunction computeNormal(v1, v2, v3, n) {\n computeNormalDirection(v1, v2, v3, n);\n var length = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n\n if (length !== 0.0) {\n n[0] /= length;\n n[1] /= length;\n n[2] /= length;\n }\n}\n\nfunction intersectWithTriangle(p1, q1, r1, p2, q2, r2) {\n var tolerance = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 1e-6;\n var coplanar = false;\n var pt1 = [];\n var pt2 = [];\n var surfaceId = [];\n var n1 = [];\n var n2 = []; // Compute supporting plane normals.\n\n computeNormal(p1, q1, r1, n1);\n computeNormal(p2, q2, r2, n2);\n var s1 = -dot(n1, p1);\n var s2 = -dot(n2, p2); // Compute signed distances of points p1, q1, r1 from supporting\n // plane of second triangle.\n\n var dist1 = [dot(n2, p1) + s2, dot(n2, q1) + s2, dot(n2, r1) + s2]; // If signs of all points are the same, all the points lie on the\n // same side of the supporting plane, and we can exit early.\n\n if (dist1[0] * dist1[1] > tolerance && dist1[0] * dist1[2] > tolerance) {\n // vtkDebugMacro(<<\"Same side supporting plane 1!\");\n return {\n intersect: false,\n coplanar: coplanar,\n pt1: pt1,\n pt2: pt2,\n surfaceId: surfaceId\n };\n } // Do the same for p2, q2, r2 and supporting plane of first\n // triangle.\n\n\n var dist2 = [dot(n1, p2) + s1, dot(n1, q2) + s1, dot(n1, r2) + s1]; // If signs of all points are the same, all the points lie on the\n // same side of the supporting plane, and we can exit early.\n\n if (dist2[0] * dist2[1] > tolerance && dist2[0] * dist2[2] > tolerance) {\n // vtkDebugMacro(<<\"Same side supporting plane 2!\");\n return {\n intersect: false,\n coplanar: coplanar,\n pt1: pt1,\n pt2: pt2,\n surfaceId: surfaceId\n };\n } // Check for coplanarity of the supporting planes.\n\n\n if (Math.abs(n1[0] - n2[0]) < 1e-9 && Math.abs(n1[1] - n2[1]) < 1e-9 && Math.abs(n1[2] - n2[2]) < 1e-9 && Math.abs(s1 - s2) < 1e-9) {\n coplanar = true; // vtkDebugMacro(<<\"Coplanar!\");\n\n return {\n intersect: false,\n coplanar: coplanar,\n pt1: pt1,\n pt2: pt2,\n surfaceId: surfaceId\n };\n } // There are more efficient ways to find the intersection line (if\n // it exists), but this is clear enough.\n\n\n var pts1 = [p1, q1, r1];\n var pts2 = [p2, q2, r2]; // Find line of intersection (L = p + t*v) between two planes.\n\n var n1n2 = dot(n1, n2);\n var a = (s1 - s2 * n1n2) / (n1n2 * n1n2 - 1.0);\n var b = (s2 - s1 * n1n2) / (n1n2 * n1n2 - 1.0);\n var p = [a * n1[0] + b * n2[0], a * n1[1] + b * n2[1], a * n1[2] + b * n2[2]];\n var v = cross(n1, n2, []);\n normalize(v);\n var index1 = 0;\n var index2 = 0;\n var t1 = [];\n var t2 = [];\n var ts1 = 50;\n var ts2 = 50;\n\n for (var i = 0; i < 3; i++) {\n var id1 = i;\n var id2 = (i + 1) % 3; // Find t coordinate on line of intersection between two planes.\n\n var val1 = vtkPlane.intersectWithLine(pts1[id1], pts1[id2], p2, n2);\n\n if (val1.intersection && val1.t > 0 - tolerance && val1.t < 1 + tolerance) {\n if (val1.t < 1 + tolerance && val1.t > 1 - tolerance) {\n ts1 = index1;\n }\n\n t1[index1++] = dot(val1.x, v) - dot(p, v);\n }\n\n var val2 = vtkPlane.intersectWithLine(pts2[id1], pts2[id2], p1, n1);\n\n if (val2.intersection && val2.t > 0 - tolerance && val2.t < 1 + tolerance) {\n if (val2.t < 1 + tolerance && val2.t > 1 - tolerance) {\n ts2 = index2;\n }\n\n t2[index2++] = dot(val2.x, v) - dot(p, v);\n }\n } // If the value of the index is greater than 2, the intersecting point\n // actually is intersected by all three edges. In this case, set the two\n // edges to the two edges where the intersecting point is not the end point\n\n\n if (index1 > 2) {\n index1--; // swap\n\n var t12 = t1[2];\n t1[2] = t1[ts1];\n t1[ts1] = t12;\n }\n\n if (index2 > 2) {\n index2--;\n var t22 = t2[2];\n t2[2] = t2[ts2];\n t2[ts2] = t22;\n } // Check if only one edge or all edges intersect the supporting\n // planes intersection.\n\n\n if (index1 !== 2 || index2 !== 2) {\n // vtkDebugMacro(<<\"Only one edge intersecting!\");\n return {\n intersect: false,\n coplanar: coplanar,\n pt1: pt1,\n pt2: pt2,\n surfaceId: surfaceId\n };\n } // Check for NaNs\n\n\n if (Number.isNaN(t1[0]) || Number.isNaN(t1[1]) || Number.isNaN(t2[0]) || Number.isNaN(t2[1])) {\n // vtkWarningMacro(<<\"NaNs!\");\n return {\n intersect: false,\n coplanar: coplanar,\n pt1: pt1,\n pt2: pt2,\n surfaceId: surfaceId\n };\n }\n\n if (t1[0] > t1[1]) {\n // swap\n var t11 = t1[1];\n t1[1] = t1[0];\n t1[0] = t11;\n }\n\n if (t2[0] > t2[1]) {\n // swap\n var t21 = t2[1];\n t2[1] = t2[0];\n t2[0] = t21;\n } // Handle the different interval configuration cases.\n\n\n var tt1;\n var tt2;\n\n if (t1[1] < t2[0] || t2[1] < t1[0]) {\n // vtkDebugMacro(<<\"No Overlap!\");\n return {\n intersect: false,\n coplanar: coplanar,\n pt1: pt1,\n pt2: pt2,\n surfaceId: surfaceId\n }; // No overlap\n }\n\n if (t1[0] < t2[0]) {\n if (t1[1] < t2[1]) {\n // First point on surface 2, second point on surface 1\n surfaceId[0] = 2;\n surfaceId[1] = 1;\n tt1 = t2[0];\n tt2 = t1[1];\n } else {\n // Both points belong to lines on surface 2\n surfaceId[0] = 2;\n surfaceId[1] = 2;\n tt1 = t2[0];\n tt2 = t2[1];\n }\n } // t1[0] >= t2[0]\n else if (t1[1] < t2[1]) {\n // Both points belong to lines on surface 1\n surfaceId[0] = 1;\n surfaceId[1] = 1;\n tt1 = t1[0];\n tt2 = t1[1];\n } else {\n // First point on surface 1, second point on surface 2\n surfaceId[0] = 1;\n surfaceId[1] = 2;\n tt1 = t1[0];\n tt2 = t2[1];\n } // Create actual intersection points.\n\n\n multiplyAccumulate(p, v, tt1, pt1);\n multiplyAccumulate(p, v, tt2, pt2);\n return {\n intersect: true,\n coplanar: coplanar,\n pt1: pt1,\n pt2: pt2,\n surfaceId: surfaceId\n };\n} // ----------------------------------------------------------------------------\n// Static API\n// ----------------------------------------------------------------------------\n\n\nvar STATIC = {\n computeNormalDirection: computeNormalDirection,\n computeNormal: computeNormal,\n intersectWithTriangle: intersectWithTriangle\n}; // ----------------------------------------------------------------------------\n// vtkTriangle methods\n// ----------------------------------------------------------------------------\n\nfunction vtkTriangle(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkTriangle');\n\n publicAPI.getCellDimension = function () {\n return 2;\n };\n\n publicAPI.intersectWithLine = function (p1, p2, tol, x, pcoords) {\n var outObj = {\n subId: 0,\n t: Number.MAX_VALUE,\n intersect: 0,\n betweenPoints: false\n };\n pcoords[2] = 0.0;\n var closestPoint = [];\n var tol2 = tol * tol; // Get normal for triangle\n\n var pt1 = [];\n var pt2 = [];\n var pt3 = [];\n model.points.getPoint(0, pt1);\n model.points.getPoint(1, pt2);\n model.points.getPoint(2, pt3);\n var n = [];\n var weights = [];\n computeNormal(pt1, pt2, pt3, n);\n\n if (n[0] !== 0 || n[1] !== 0 || n[2] !== 0) {\n // Intersect plane of triangle with line\n var plane = vtkPlane.intersectWithLine(p1, p2, pt1, n);\n outObj.betweenPoints = plane.betweenPoints;\n outObj.t = plane.t;\n x[0] = plane.x[0];\n x[1] = plane.x[1];\n x[2] = plane.x[2];\n\n if (!plane.intersection) {\n pcoords[0] = 0.0;\n pcoords[1] = 0.0;\n outObj.intersect = 0;\n return outObj;\n } // Evaluate position\n\n\n var inside = publicAPI.evaluatePosition(x, closestPoint, pcoords, weights);\n\n if (inside.evaluation >= 0) {\n if (inside.dist2 <= tol2) {\n outObj.intersect = 1;\n return outObj;\n }\n\n outObj.intersect = inside.evaluation;\n return outObj;\n }\n } // Normals are null, so the triangle is degenerated and\n // we still need to check intersection between line and\n // the longest edge.\n\n\n var dist2Pt1Pt2 = distance2BetweenPoints(pt1, pt2);\n var dist2Pt2Pt3 = distance2BetweenPoints(pt2, pt3);\n var dist2Pt3Pt1 = distance2BetweenPoints(pt3, pt1);\n\n if (!model.line) {\n model.line = vtkLine.newInstance();\n }\n\n if (dist2Pt1Pt2 > dist2Pt2Pt3 && dist2Pt1Pt2 > dist2Pt3Pt1) {\n model.line.getPoints().setPoint(0, pt1);\n model.line.getPoints().setPoint(1, pt2);\n } else if (dist2Pt2Pt3 > dist2Pt3Pt1 && dist2Pt2Pt3 > dist2Pt1Pt2) {\n model.line.getPoints().setPoint(0, pt2);\n model.line.getPoints().setPoint(1, pt3);\n } else {\n model.line.getPoints().setPoint(0, pt3);\n model.line.getPoints().setPoint(1, pt1);\n }\n\n var intersectLine = model.line.intersectWithLine(p1, p2, tol, x, pcoords);\n outObj.betweenPoints = intersectLine.betweenPoints;\n outObj.t = intersectLine.t;\n\n if (intersectLine.intersect) {\n var pt3Pt1 = [];\n var pt3Pt2 = [];\n var pt3X = []; // Compute r and s manually, using dot and norm.\n\n for (var i = 0; i < 3; i++) {\n pt3Pt1[i] = pt1[i] - pt3[i];\n pt3Pt2[i] = pt2[i] - pt3[i];\n pt3X[i] = x[i] - pt3[i];\n }\n\n pcoords[0] = dot(pt3X, pt3Pt1) / dist2Pt3Pt1;\n pcoords[1] = dot(pt3X, pt3Pt2) / dist2Pt2Pt3;\n outObj.intersect = 1;\n return outObj;\n }\n\n pcoords[0] = 0.0;\n pcoords[1] = 0.0;\n outObj.intersect = 0;\n return outObj;\n };\n\n publicAPI.evaluatePosition = function (x, closestPoint, pcoords, weights) {\n // will return obj\n var outObj = {\n subId: 0,\n dist2: 0,\n evaluation: -1\n };\n var i;\n var j;\n var pt1 = [];\n var pt2 = [];\n var pt3 = [];\n var n = [];\n var fabsn;\n var rhs = [];\n var c1 = [];\n var c2 = [];\n var det = 0;\n var idx = 0;\n var indices = [];\n var dist2Point;\n var dist2Line1;\n var dist2Line2;\n var closest = [];\n var closestPoint1 = [];\n var closestPoint2 = [];\n var cp = [];\n outObj.subId = 0;\n pcoords[2] = 0.0; // Get normal for triangle, only the normal direction is needed, i.e. the\n // normal need not be normalized (unit length)\n //\n\n model.points.getPoint(1, pt1);\n model.points.getPoint(2, pt2);\n model.points.getPoint(0, pt3);\n computeNormalDirection(pt1, pt2, pt3, n); // Project point to plane\n\n vtkPlane.generalizedProjectPoint(x, pt1, n, cp); // Construct matrices. Since we have over determined system, need to find\n // which 2 out of 3 equations to use to develop equations. (Any 2 should\n // work since we've projected point to plane.)\n\n var maxComponent = 0.0;\n\n for (i = 0; i < 3; i++) {\n // trying to avoid an expensive call to fabs()\n if (n[i] < 0) {\n fabsn = -n[i];\n } else {\n fabsn = n[i];\n }\n\n if (fabsn > maxComponent) {\n maxComponent = fabsn;\n idx = i;\n }\n }\n\n for (j = 0, i = 0; i < 3; i++) {\n if (i !== idx) {\n indices[j++] = i;\n }\n }\n\n for (i = 0; i < 2; i++) {\n rhs[i] = cp[indices[i]] - pt3[indices[i]];\n c1[i] = pt1[indices[i]] - pt3[indices[i]];\n c2[i] = pt2[indices[i]] - pt3[indices[i]];\n }\n\n det = determinant2x2(c1, c2);\n\n if (det === 0.0) {\n pcoords[0] = 0.0;\n pcoords[1] = 0.0;\n outObj.evaluation = -1;\n return outObj;\n }\n\n pcoords[0] = determinant2x2(rhs, c2) / det;\n pcoords[1] = determinant2x2(c1, rhs) / det; // Okay, now find closest point to element\n\n weights[0] = 1 - (pcoords[0] + pcoords[1]);\n weights[1] = pcoords[0];\n weights[2] = pcoords[1];\n\n if (weights[0] >= 0.0 && weights[0] <= 1.0 && weights[1] >= 0.0 && weights[1] <= 1.0 && weights[2] >= 0.0 && weights[2] <= 1.0) {\n // projection distance\n if (closestPoint) {\n outObj.dist2 = distance2BetweenPoints(cp, x);\n closestPoint[0] = cp[0];\n closestPoint[1] = cp[1];\n closestPoint[2] = cp[2];\n }\n\n outObj.evaluation = 1;\n } else {\n var t;\n\n if (closestPoint) {\n if (weights[1] < 0.0 && weights[2] < 0.0) {\n dist2Point = distance2BetweenPoints(x, pt3);\n dist2Line1 = vtkLine.distanceToLine(x, pt1, pt3, t, closestPoint1);\n dist2Line2 = vtkLine.distanceToLine(x, pt3, pt2, t, closestPoint2);\n\n if (dist2Point < dist2Line1) {\n outObj.dist2 = dist2Point;\n closest = pt3;\n } else {\n outObj.dist2 = dist2Line1;\n closest = closestPoint1;\n }\n\n if (dist2Line2 < outObj.dist2) {\n outObj.dist2 = dist2Line2;\n closest = closestPoint2;\n }\n\n for (i = 0; i < 3; i++) {\n closestPoint[i] = closest[i];\n }\n } else if (weights[2] < 0.0 && weights[0] < 0.0) {\n dist2Point = distance2BetweenPoints(x, pt1);\n dist2Line1 = vtkLine.distanceToLine(x, pt1, pt3, t, closestPoint1);\n dist2Line2 = vtkLine.distanceToLine(x, pt1, pt2, t, closestPoint2);\n\n if (dist2Point < dist2Line1) {\n outObj.dist2 = dist2Point;\n closest = pt1;\n } else {\n outObj.dist2 = dist2Line1;\n closest = closestPoint1;\n }\n\n if (dist2Line2 < outObj.dist2) {\n outObj.dist2 = dist2Line2;\n closest = closestPoint2;\n }\n\n for (i = 0; i < 3; i++) {\n closestPoint[i] = closest[i];\n }\n } else if (weights[1] < 0.0 && weights[0] < 0.0) {\n dist2Point = distance2BetweenPoints(x, pt2);\n dist2Line1 = vtkLine.distanceToLine(x, pt2, pt3, t, closestPoint1);\n dist2Line2 = vtkLine.distanceToLine(x, pt1, pt2, t, closestPoint2);\n\n if (dist2Point < dist2Line1) {\n outObj.dist2 = dist2Point;\n closest = pt2;\n } else {\n outObj.dist2 = dist2Line1;\n closest = closestPoint1;\n }\n\n if (dist2Line2 < outObj.dist2) {\n outObj.dist2 = dist2Line2;\n closest = closestPoint2;\n }\n\n for (i = 0; i < 3; i++) {\n closestPoint[i] = closest[i];\n }\n } else if (weights[0] < 0.0) {\n var lineDistance = vtkLine.distanceToLine(x, pt1, pt2, closestPoint);\n outObj.dist2 = lineDistance.distance;\n } else if (weights[1] < 0.0) {\n var _lineDistance = vtkLine.distanceToLine(x, pt2, pt3, closestPoint);\n\n outObj.dist2 = _lineDistance.distance;\n } else if (weights[2] < 0.0) {\n var _lineDistance2 = vtkLine.distanceToLine(x, pt1, pt3, closestPoint);\n\n outObj.dist2 = _lineDistance2.distance;\n }\n }\n\n outObj.evaluation = 0;\n }\n\n return outObj;\n };\n\n publicAPI.evaluateLocation = function (pcoords, x, weights) {\n var p0 = [];\n var p1 = [];\n var p2 = [];\n model.points.getPoint(0, p0);\n model.points.getPoint(1, p1);\n model.points.getPoint(2, p2);\n var u3 = 1.0 - pcoords[0] - pcoords[1];\n\n for (var i = 0; i < 3; i++) {\n x[i] = p0[i] * u3 + p1[i] * pcoords[0] + p2[i] * pcoords[1];\n }\n\n weights[0] = u3;\n weights[1] = pcoords[0];\n weights[2] = pcoords[1];\n };\n\n publicAPI.getParametricDistance = function (pcoords) {\n var pDist;\n var pDistMax = 0.0;\n var pc = [];\n pc[0] = pcoords[0];\n pc[1] = pcoords[1];\n pc[2] = 1.0 - pcoords[0] - pcoords[1];\n\n for (var i = 0; i < 3; i++) {\n if (pc[i] < 0.0) {\n pDist = -pc[i];\n } else if (pc[i] > 1.0) {\n pDist = pc[i] - 1.0;\n } else {\n // inside the cell in the parametric direction\n pDist = 0.0;\n }\n\n if (pDist > pDistMax) {\n pDistMax = pDist;\n }\n }\n\n return pDistMax;\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues);\n vtkCell.extend(publicAPI, model, initialValues);\n vtkTriangle(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkTriangle'); // ----------------------------------------------------------------------------\n\nvar vtkTriangle$1 = _objectSpread({\n newInstance: newInstance,\n extend: extend\n}, STATIC);\n\nexport { STATIC, vtkTriangle$1 as default, extend, newInstance };\n","import _defineProperty from '@babel/runtime/helpers/defineProperty';\nimport macro from '../../macros.js';\nimport vtk from '../../vtk.js';\nimport vtkCellArray from '../Core/CellArray.js';\nimport vtkCellLinks from './CellLinks.js';\nimport vtkCellTypes from './CellTypes.js';\nimport vtkLine from './Line.js';\nimport vtkPointSet from './PointSet.js';\nimport vtkTriangle from './Triangle.js';\nimport { CellType } from './CellTypes/Constants.js';\nimport { POLYDATA_FIELDS } from './PolyData/Constants.js';\n\nvar _CELL_FACTORY;\nvar vtkWarningMacro = macro.vtkWarningMacro;\nvar CELL_FACTORY = (_CELL_FACTORY = {}, _defineProperty(_CELL_FACTORY, CellType.VTK_LINE, vtkLine), _defineProperty(_CELL_FACTORY, CellType.VTK_POLY_LINE, vtkLine), _defineProperty(_CELL_FACTORY, CellType.VTK_TRIANGLE, vtkTriangle), _CELL_FACTORY); // ----------------------------------------------------------------------------\n// vtkPolyData methods\n// ----------------------------------------------------------------------------\n\nfunction vtkPolyData(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkPolyData');\n\n function camelize(str) {\n return str.replace(/(?:^\\w|[A-Z]|\\b\\w)/g, function (letter) {\n return letter.toUpperCase();\n }).replace(/\\s+/g, '');\n } // build empty cell arrays and set methods\n\n\n POLYDATA_FIELDS.forEach(function (type) {\n publicAPI[\"getNumberOf\".concat(camelize(type))] = function () {\n return model[type].getNumberOfCells();\n };\n\n if (!model[type]) {\n model[type] = vtkCellArray.newInstance();\n } else {\n model[type] = vtk(model[type]);\n }\n });\n\n publicAPI.getNumberOfCells = function () {\n return POLYDATA_FIELDS.reduce(function (num, cellType) {\n return num + model[cellType].getNumberOfCells();\n }, 0);\n };\n\n var superShallowCopy = publicAPI.shallowCopy;\n\n publicAPI.shallowCopy = function (other) {\n var debug = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n superShallowCopy(other, debug);\n POLYDATA_FIELDS.forEach(function (type) {\n model[type] = vtkCellArray.newInstance();\n model[type].shallowCopy(other.getReferenceByName(type));\n });\n };\n\n publicAPI.buildCells = function () {\n // here are the number of cells we have\n var nVerts = publicAPI.getNumberOfVerts();\n var nLines = publicAPI.getNumberOfLines();\n var nPolys = publicAPI.getNumberOfPolys();\n var nStrips = publicAPI.getNumberOfStrips(); // pre-allocate the space we need\n\n var nCells = nVerts + nLines + nPolys + nStrips;\n var types = new Uint8Array(nCells);\n var pTypes = types;\n var locs = new Uint32Array(nCells);\n var pLocs = locs; // record locations and type of each cell.\n // verts\n\n if (nVerts) {\n var nextCellPts = 0;\n model.verts.getCellSizes().forEach(function (numCellPts, index) {\n pLocs[index] = nextCellPts;\n pTypes[index] = numCellPts > 1 ? CellType.VTK_POLY_VERTEX : CellType.VTK_VERTEX;\n nextCellPts += numCellPts + 1;\n });\n pLocs = pLocs.subarray(nVerts);\n pTypes = pTypes.subarray(nVerts);\n } // lines\n\n\n if (nLines) {\n var _nextCellPts = 0;\n model.lines.getCellSizes().forEach(function (numCellPts, index) {\n pLocs[index] = _nextCellPts;\n pTypes[index] = numCellPts > 2 ? CellType.VTK_POLY_LINE : CellType.VTK_LINE;\n\n if (numCellPts === 1) {\n vtkWarningMacro('Building VTK_LINE ', index, ' with only one point, but VTK_LINE needs at least two points. Check the input.');\n }\n\n _nextCellPts += numCellPts + 1;\n });\n pLocs = pLocs.subarray(nLines);\n pTypes = pTypes.subarray(nLines);\n } // polys\n\n\n if (nPolys) {\n var _nextCellPts2 = 0;\n model.polys.getCellSizes().forEach(function (numCellPts, index) {\n pLocs[index] = _nextCellPts2;\n\n switch (numCellPts) {\n case 3:\n pTypes[index] = CellType.VTK_TRIANGLE;\n break;\n\n case 4:\n pTypes[index] = CellType.VTK_QUAD;\n break;\n\n default:\n pTypes[index] = CellType.VTK_POLYGON;\n break;\n }\n\n if (numCellPts < 3) {\n vtkWarningMacro('Building VTK_TRIANGLE ', index, ' with less than three points, but VTK_TRIANGLE needs at least three points. Check the input.');\n }\n\n _nextCellPts2 += numCellPts + 1;\n });\n pLocs += pLocs.subarray(nPolys);\n pTypes += pTypes.subarray(nPolys);\n } // strips\n\n\n if (nStrips) {\n var _nextCellPts3 = 0;\n pTypes.fill(CellType.VTK_TRIANGLE_STRIP, 0, nStrips);\n model.strips.getCellSizes().forEach(function (numCellPts, index) {\n pLocs[index] = _nextCellPts3;\n _nextCellPts3 += numCellPts + 1;\n });\n } // set up the cell types data structure\n\n\n model.cells = vtkCellTypes.newInstance();\n model.cells.setCellTypes(nCells, types, locs);\n };\n /**\n * Create upward links from points to cells that use each point. Enables\n * topologically complex queries.\n */\n\n\n publicAPI.buildLinks = function () {\n var initialSize = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n if (model.cells === undefined) {\n publicAPI.buildCells();\n }\n\n model.links = vtkCellLinks.newInstance();\n\n if (initialSize > 0) {\n model.links.allocate(initialSize);\n } else {\n model.links.allocate(publicAPI.getPoints().getNumberOfPoints());\n }\n\n model.links.buildLinks(publicAPI);\n };\n\n publicAPI.getCellType = function (cellId) {\n return model.cells.getCellType(cellId);\n };\n\n publicAPI.getCellPoints = function (cellId) {\n var cellType = publicAPI.getCellType(cellId);\n var cells = null;\n\n switch (cellType) {\n case CellType.VTK_VERTEX:\n case CellType.VTK_POLY_VERTEX:\n cells = model.verts;\n break;\n\n case CellType.VTK_LINE:\n case CellType.VTK_POLY_LINE:\n cells = model.lines;\n break;\n\n case CellType.VTK_TRIANGLE:\n case CellType.VTK_QUAD:\n case CellType.VTK_POLYGON:\n cells = model.polys;\n break;\n\n case CellType.VTK_TRIANGLE_STRIP:\n cells = model.strips;\n break;\n\n default:\n cells = null;\n return {\n type: 0,\n cellPointIds: null\n };\n }\n\n var loc = model.cells.getCellLocation(cellId);\n var cellPointIds = cells.getCell(loc);\n return {\n cellType: cellType,\n cellPointIds: cellPointIds\n };\n };\n\n publicAPI.getPointCells = function (ptId) {\n return model.links.getCells(ptId);\n };\n\n publicAPI.getCellEdgeNeighbors = function (cellId, point1, point2) {\n var link1 = model.links.getLink(point1);\n var link2 = model.links.getLink(point2);\n return link1.cells.filter(function (cell) {\n return cell !== cellId && link2.cells.indexOf(cell) !== -1;\n });\n };\n /**\n * If you know the type of cell, you may provide it to improve performances.\n */\n\n\n publicAPI.getCell = function (cellId) {\n var cellHint = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var cellInfo = publicAPI.getCellPoints(cellId);\n var cell = cellHint || CELL_FACTORY[cellInfo.cellType].newInstance();\n cell.initialize(publicAPI.getPoints(), cellInfo.cellPointIds);\n return cell;\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {// verts: null,\n // lines: null,\n // polys: null,\n // strips: null,\n // cells: null,\n // links: null,\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Inheritance\n\n vtkPointSet.extend(publicAPI, model, initialValues);\n macro.get(publicAPI, model, ['cells', 'links']);\n macro.setGet(publicAPI, model, ['verts', 'lines', 'polys', 'strips']); // Object specific methods\n\n vtkPolyData(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkPolyData'); // ----------------------------------------------------------------------------\n\nvar vtkPolyData$1 = {\n newInstance: newInstance,\n extend: extend\n};\n\nexport { CELL_FACTORY, vtkPolyData$1 as default, extend, newInstance };\n","var POLYDATA_FIELDS = ['verts', 'lines', 'polys', 'strips'];\nvar Constants = {\n POLYDATA_FIELDS: POLYDATA_FIELDS\n};\n\nexport { POLYDATA_FIELDS, Constants as default };\n","import _defineProperty from '@babel/runtime/helpers/defineProperty';\nimport { mat4, vec3 } from 'gl-matrix';\nimport macro from '../../macros.js';\nimport vtkBoundingBox from '../../Common/DataModel/BoundingBox.js';\nimport vtkProp3D from './Prop3D.js';\nimport vtkProperty from './Property.js';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nvar vtkDebugMacro = macro.vtkDebugMacro; // ----------------------------------------------------------------------------\n// vtkActor methods\n// ----------------------------------------------------------------------------\n\nfunction vtkActor(publicAPI, model) {\n // Set our className\n model.classHierarchy.push('vtkActor'); // Capture 'parentClass' api for internal use\n\n var superClass = _objectSpread({}, publicAPI);\n\n publicAPI.getActors = function () {\n return [publicAPI];\n };\n\n publicAPI.getIsOpaque = function () {\n if (model.forceOpaque) {\n return true;\n }\n\n if (model.forceTranslucent) {\n return false;\n } // make sure we have a property\n\n\n if (!model.property) {\n // force creation of a property\n publicAPI.getProperty();\n }\n\n var isOpaque = model.property.getOpacity() >= 1.0; // are we using an opaque texture, if any?\n\n isOpaque = isOpaque && (!model.texture || !model.texture.isTranslucent()); // are we using an opaque scalar array, if any?\n\n isOpaque = isOpaque && (!model.mapper || model.mapper.getIsOpaque());\n return isOpaque;\n };\n\n publicAPI.hasTranslucentPolygonalGeometry = function () {\n if (model.mapper === null) {\n return false;\n } // make sure we have a property\n\n\n if (model.property === null) {\n // force creation of a property\n publicAPI.setProperty(publicAPI.makeProperty());\n } // is this actor opaque ?\n\n\n return !publicAPI.getIsOpaque();\n };\n\n publicAPI.makeProperty = vtkProperty.newInstance;\n\n publicAPI.getProperty = function () {\n if (model.property === null) {\n model.property = publicAPI.makeProperty();\n }\n\n return model.property;\n };\n\n publicAPI.getBounds = function () {\n if (model.mapper === null) {\n return model.bounds;\n } // Check for the special case when the mapper's bounds are unknown\n\n\n var bds = model.mapper.getBounds();\n\n if (!bds || bds.length !== 6) {\n return bds;\n } // Check for the special case when the actor is empty.\n\n\n if (bds[0] > bds[1]) {\n model.mapperBounds = bds.concat(); // copy the mapper's bounds\n\n model.bounds = [1, -1, 1, -1, 1, -1];\n model.boundsMTime.modified();\n return bds;\n } // Check if we have cached values for these bounds - we cache the\n // values returned by model.mapper.getBounds() and we store the time\n // of caching. If the values returned this time are different, or\n // the modified time of this class is newer than the cached time,\n // then we need to rebuild.\n\n\n if (!model.mapperBounds || bds[0] !== model.mapperBounds[0] || bds[1] !== model.mapperBounds[1] || bds[2] !== model.mapperBounds[2] || bds[3] !== model.mapperBounds[3] || bds[4] !== model.mapperBounds[4] || bds[5] !== model.mapperBounds[5] || publicAPI.getMTime() > model.boundsMTime.getMTime()) {\n vtkDebugMacro('Recomputing bounds...');\n model.mapperBounds = bds.concat(); // copy the mapper's bounds\n\n var bbox = [];\n vtkBoundingBox.getCorners(bds, bbox);\n publicAPI.computeMatrix();\n var tmp4 = new Float64Array(16);\n mat4.transpose(tmp4, model.matrix);\n bbox.forEach(function (pt) {\n return vec3.transformMat4(pt, pt, tmp4);\n });\n /* eslint-disable no-multi-assign */\n\n model.bounds[0] = model.bounds[2] = model.bounds[4] = Number.MAX_VALUE;\n model.bounds[1] = model.bounds[3] = model.bounds[5] = -Number.MAX_VALUE;\n /* eslint-enable no-multi-assign */\n\n model.bounds = model.bounds.map(function (d, i) {\n return i % 2 === 0 ? bbox.reduce(function (a, b) {\n return a > b[i / 2] ? b[i / 2] : a;\n }, d) : bbox.reduce(function (a, b) {\n return a < b[(i - 1) / 2] ? b[(i - 1) / 2] : a;\n }, d);\n });\n model.boundsMTime.modified();\n }\n\n return model.bounds;\n };\n\n publicAPI.getMTime = function () {\n var mt = superClass.getMTime();\n\n if (model.property !== null) {\n var time = model.property.getMTime();\n mt = time > mt ? time : mt;\n }\n\n if (model.backfaceProperty !== null) {\n var _time = model.backfaceProperty.getMTime();\n\n mt = _time > mt ? _time : mt;\n }\n\n return mt;\n };\n\n publicAPI.getRedrawMTime = function () {\n var mt = model.mtime;\n\n if (model.mapper !== null) {\n var time = model.mapper.getMTime();\n mt = time > mt ? time : mt;\n\n if (model.mapper.getInput() !== null) {\n // FIXME !!! getInputAlgorithm / getInput\n model.mapper.getInputAlgorithm().update();\n time = model.mapper.getInput().getMTime();\n mt = time > mt ? time : mt;\n }\n }\n\n return mt;\n };\n\n publicAPI.getSupportsSelection = function () {\n return model.mapper ? model.mapper.getSupportsSelection() : false;\n };\n\n publicAPI.processSelectorPixelBuffers = function (selector, pixelOffsets) {\n if (model.mapper && model.mapper.processSelectorPixelBuffers) {\n model.mapper.processSelectorPixelBuffers(selector, pixelOffsets);\n }\n };\n} // ----------------------------------------------------------------------------\n// Object factory\n// ----------------------------------------------------------------------------\n\n\nvar DEFAULT_VALUES = {\n mapper: null,\n property: null,\n backfaceProperty: null,\n forceOpaque: false,\n forceTranslucent: false,\n bounds: [1, -1, 1, -1, 1, -1]\n}; // ----------------------------------------------------------------------------\n\nfunction extend(publicAPI, model) {\n var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.assign(model, DEFAULT_VALUES, initialValues); // Inheritance\n\n vtkProp3D.extend(publicAPI, model, initialValues); // vtkTimeStamp\n\n model.boundsMTime = {};\n macro.obj(model.boundsMTime); // Build VTK API\n\n macro.set(publicAPI, model, ['property']);\n macro.setGet(publicAPI, model, ['backfaceProperty', 'forceOpaque', 'forceTranslucent', 'mapper']); // Object methods\n\n vtkActor(publicAPI, model);\n} // ----------------------------------------------------------------------------\n\nvar newInstance = macro.newInstance(extend, 'vtkActor'); // ----------------------------------------------------------------------------\n\nvar vtkActor$1 = {\n newInstance: newInstance,\n extend: extend\n};\n\nexport { vtkActor$1 as default, extend, newInstance };\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"import { vec3 } from 'gl-matrix';\nexport default function areViewportsCoplanar(viewport1, viewport2) {\n const { viewPlaneNormal: viewPlaneNormal1 } = viewport1.getCamera();\n const { viewPlaneNormal: viewPlaneNormal2 } = viewport2.getCamera();\n const dotProducts = vec3.dot(viewPlaneNormal1, viewPlaneNormal2);\n return Math.abs(dotProducts) > 0.9;\n}\n//# sourceMappingURL=areViewportsCoplanar%20.js.map",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default function(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n}\n","import min from \"./min.js\";\n\nexport default function transpose(matrix) {\n if (!(n = matrix.length)) return [];\n for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {\n for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {\n row[j] = matrix[j][i];\n }\n }\n return transpose;\n}\n\nfunction length(d) {\n return d.length;\n}\n","export default function min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n","import transpose from \"./transpose.js\";\n\nexport default function zip() {\n return transpose(arguments);\n}\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"import * as cornerstone from '@cornerstonejs/core';\nimport { volumeLoader } from '@cornerstonejs/core';\nimport { cornerstoneStreamingImageVolumeLoader } from '@cornerstonejs/streaming-image-volume-loader';\nimport cornerstoneWADOImageLoader, {\n webWorkerManager,\n} from 'cornerstone-wado-image-loader';\nimport dicomParser from 'dicom-parser';\nimport { errorHandler } from '@ohif/core';\n\nconst { registerVolumeLoader } = volumeLoader;\n\nlet initialized = false;\n\nfunction initWebWorkers(appConfig) {\n const config = {\n maxWebWorkers: Math.min(\n Math.max(navigator.hardwareConcurrency - 1, 1),\n appConfig.maxNumberOfWebWorkers\n ),\n startWebWorkersOnDemand: true,\n taskConfiguration: {\n decodeTask: {\n initializeCodecsOnStartup: false,\n usePDFJS: false,\n strict: false,\n },\n },\n };\n\n if (!initialized) {\n cornerstoneWADOImageLoader.webWorkerManager.initialize(config);\n initialized = true;\n }\n}\n\nexport default function initWADOImageLoader(\n UserAuthenticationService,\n appConfig\n) {\n cornerstoneWADOImageLoader.external.cornerstone = cornerstone;\n cornerstoneWADOImageLoader.external.dicomParser = dicomParser;\n\n registerVolumeLoader(\n 'cornerstoneStreamingImageVolume',\n cornerstoneStreamingImageVolumeLoader\n );\n\n cornerstoneWADOImageLoader.configure({\n decodeConfig: {\n // !! IMPORTANT !!\n // We should set this flag to false, since, by default cornerstone-wado-image-loader\n // will convert everything to integers (to be able to work with cornerstone-2d).\n // Until the default is set to true (which is the case for cornerstone3D),\n // we should set this flag to false.\n convertFloatPixelDataToInt: false,\n use16BitDataType: true,\n },\n beforeSend: function(xhr) {\n const headers = UserAuthenticationService.getAuthorizationHeader();\n\n // Request:\n // JPEG-LS Lossless (1.2.840.10008.1.2.4.80) if available, otherwise accept\n // whatever transfer-syntax the origin server provides.\n // For now we use image/jls and image/x-jls because some servers still use the old type\n // http://dicom.nema.org/medical/dicom/current/output/html/part18.html\n const xhrRequestHeaders = {\n Accept: appConfig.omitQuotationForMultipartRequest\n ? 'multipart/related; type=application/octet-stream'\n : 'multipart/related; type=\"application/octet-stream\"',\n // 'multipart/related; type=\"image/x-jls\", multipart/related; type=\"image/jls\"; transfer-syntax=\"1.2.840.10008.1.2.4.80\", multipart/related; type=\"image/x-jls\", multipart/related; type=\"application/octet-stream\"; transfer-syntax=*',\n };\n\n if (headers && headers.Authorization) {\n xhrRequestHeaders.Authorization = headers.Authorization;\n }\n\n return xhrRequestHeaders;\n },\n errorInterceptor: error => {\n errorHandler.getHTTPErrorHandler(error);\n },\n });\n\n initWebWorkers(appConfig);\n}\n\nexport function destroy() {\n // Note: we don't want to call .terminate on the webWorkerManager since\n // that resets the config\n const webWorkers = webWorkerManager.webWorkers;\n for (let i = 0; i < webWorkers.length; i++) {\n webWorkers[i].worker.terminate();\n }\n webWorkers.length = 0;\n}\n","import {\n PanTool,\n WindowLevelTool,\n StackScrollTool,\n StackScrollMouseWheelTool,\n ZoomTool,\n VolumeRotateMouseWheelTool,\n MIPJumpToClickTool,\n LengthTool,\n RectangleROITool,\n EllipticalROITool,\n BidirectionalTool,\n ArrowAnnotateTool,\n DragProbeTool,\n ProbeTool,\n AngleTool,\n MagnifyTool,\n CrosshairsTool,\n SegmentationDisplayTool,\n init,\n addTool,\n annotation,\n ReferenceLinesTool,\n} from '@cornerstonejs/tools';\n\nexport default function initCornerstoneTools(configuration = {}) {\n init(configuration);\n addTool(PanTool);\n addTool(WindowLevelTool);\n addTool(StackScrollMouseWheelTool);\n addTool(StackScrollTool);\n addTool(ZoomTool);\n addTool(ProbeTool);\n addTool(VolumeRotateMouseWheelTool);\n addTool(MIPJumpToClickTool);\n addTool(LengthTool);\n addTool(RectangleROITool);\n addTool(EllipticalROITool);\n addTool(BidirectionalTool);\n addTool(ArrowAnnotateTool);\n addTool(DragProbeTool);\n addTool(AngleTool);\n addTool(MagnifyTool);\n addTool(CrosshairsTool);\n addTool(SegmentationDisplayTool);\n addTool(ReferenceLinesTool);\n\n // Modify annotation tools to use dashed lines on SR\n const annotationStyle = {\n textBoxFontSize: '15px',\n lineWidth: '1.5',\n };\n\n const defaultStyles = annotation.config.style.getDefaultToolStyles();\n annotation.config.style.setDefaultToolStyles({\n global: {\n ...defaultStyles.global,\n ...annotationStyle,\n },\n });\n}\n\nconst toolNames = {\n Pan: PanTool.toolName,\n ArrowAnnotate: ArrowAnnotateTool.toolName,\n WindowLevel: WindowLevelTool.toolName,\n StackScroll: StackScrollTool.toolName,\n StackScrollMouseWheel: StackScrollMouseWheelTool.toolName,\n Zoom: ZoomTool.toolName,\n VolumeRotateMouseWheel: VolumeRotateMouseWheelTool.toolName,\n MipJumpToClick: MIPJumpToClickTool.toolName,\n Length: LengthTool.toolName,\n DragProbe: DragProbeTool.toolName,\n Probe: ProbeTool.toolName,\n RectangleROI: RectangleROITool.toolName,\n EllipticalROI: EllipticalROITool.toolName,\n Bidirectional: BidirectionalTool.toolName,\n Angle: AngleTool.toolName,\n Magnify: MagnifyTool.toolName,\n Crosshairs: CrosshairsTool.toolName,\n SegmentationDisplay: SegmentationDisplayTool.toolName,\n ReferenceLines: ReferenceLinesTool.toolName,\n};\n\nexport { toolNames };\n","export default ['Length', 'EllipticalROI', 'Bidirectional', 'ArrowAnnotate'];\n","import SUPPORTED_TOOLS from './constants/supportedTools';\nimport getSOPInstanceAttributes from './utils/getSOPInstanceAttributes';\nimport { DisplaySetService, utils } from '@ohif/core';\n\nconst Length = {\n toAnnotation: measurement => {},\n\n /**\n * Maps cornerstone annotation event data to measurement service format.\n *\n * @param {Object} cornerstone Cornerstone event data\n * @return {Measurement} Measurement instance\n */\n toMeasurement: (\n csToolsEventDetail,\n DisplaySetService,\n CornerstoneViewportService,\n getValueTypeFromToolType\n ) => {\n const { annotation, viewportId } = csToolsEventDetail;\n const { metadata, data, annotationUID } = annotation;\n\n if (!metadata || !data) {\n console.warn('Length tool: Missing metadata or data');\n return null;\n }\n\n const { toolName, referencedImageId, FrameOfReferenceUID } = metadata;\n const validToolType = SUPPORTED_TOOLS.includes(toolName);\n\n if (!validToolType) {\n throw new Error('Tool not supported');\n }\n\n const {\n SOPInstanceUID,\n SeriesInstanceUID,\n StudyInstanceUID,\n } = getSOPInstanceAttributes(\n referencedImageId,\n CornerstoneViewportService,\n viewportId\n );\n\n let displaySet;\n\n if (SOPInstanceUID) {\n displaySet = DisplaySetService.getDisplaySetForSOPInstanceUID(\n SOPInstanceUID,\n SeriesInstanceUID\n );\n } else {\n displaySet = DisplaySetService.getDisplaySetsForSeries(SeriesInstanceUID);\n }\n\n const { points } = data.handles;\n\n const mappedAnnotations = getMappedAnnotations(\n annotation,\n DisplaySetService\n );\n\n const displayText = getDisplayText(mappedAnnotations, displaySet);\n const getReport = () =>\n _getReport(mappedAnnotations, points, FrameOfReferenceUID);\n\n return {\n uid: annotationUID,\n SOPInstanceUID,\n FrameOfReferenceUID,\n points,\n metadata,\n referenceSeriesUID: SeriesInstanceUID,\n referenceStudyUID: StudyInstanceUID,\n frameNumber: mappedAnnotations[0]?.frameNumber || 1,\n toolName: metadata.toolName,\n displaySetInstanceUID: displaySet.displaySetInstanceUID,\n label: data.label,\n displayText: displayText,\n data: data.cachedStats,\n type: getValueTypeFromToolType(toolName),\n getReport,\n };\n },\n};\n\nfunction getMappedAnnotations(annotation, DisplaySetService) {\n const { metadata, data } = annotation;\n const { cachedStats } = data;\n const { referencedImageId } = metadata;\n const targets = Object.keys(cachedStats);\n\n if (!targets.length) {\n return;\n }\n\n const annotations = [];\n Object.keys(cachedStats).forEach(targetId => {\n const targetStats = cachedStats[targetId];\n\n if (!referencedImageId) {\n throw new Error(\n 'Non-acquisition plane measurement mapping not supported'\n );\n }\n\n const {\n SOPInstanceUID,\n SeriesInstanceUID,\n frameNumber,\n } = getSOPInstanceAttributes(referencedImageId);\n\n const displaySet = DisplaySetService.getDisplaySetForSOPInstanceUID(\n SOPInstanceUID,\n SeriesInstanceUID,\n frameNumber\n );\n\n const { SeriesNumber } = displaySet;\n const { length } = targetStats;\n const unit = 'mm';\n\n annotations.push({\n SeriesInstanceUID,\n SOPInstanceUID,\n SeriesNumber,\n frameNumber,\n unit,\n length,\n });\n });\n\n return annotations;\n}\n\n/*\nThis function is used to convert the measurement data to a format that is\nsuitable for the report generation (e.g. for the csv report). The report\nreturns a list of columns and corresponding values.\n*/\nfunction _getReport(mappedAnnotations, points, FrameOfReferenceUID) {\n const columns = [];\n const values = [];\n\n // Add Type\n columns.push('AnnotationType');\n values.push('Cornerstone:Length');\n\n mappedAnnotations.forEach(annotation => {\n const { length } = annotation;\n columns.push(`Length (mm)`);\n values.push(length);\n });\n\n if (FrameOfReferenceUID) {\n columns.push('FrameOfReferenceUID');\n values.push(FrameOfReferenceUID);\n }\n\n if (points) {\n columns.push('points');\n // points has the form of [[x1, y1, z1], [x2, y2, z2], ...]\n // convert it to string of [[x1 y1 z1];[x2 y2 z2];...]\n // so that it can be used in the csv report\n values.push(points.map(p => p.join(' ')).join(';'));\n }\n\n return {\n columns,\n values,\n };\n}\n\nfunction getDisplayText(mappedAnnotations, displaySet) {\n if (!mappedAnnotations || !mappedAnnotations.length) {\n return '';\n }\n\n const displayText = [];\n\n // Area is the same for all series\n const {\n length,\n SeriesNumber,\n SOPInstanceUID,\n frameNumber,\n } = mappedAnnotations[0];\n\n const instance = displaySet.images.find(\n image => image.SOPInstanceUID === SOPInstanceUID\n );\n\n let InstanceNumber;\n if (instance) {\n InstanceNumber = instance.InstanceNumber;\n }\n\n const instanceText = InstanceNumber ? ` I: ${InstanceNumber}` : '';\n const frameText = displaySet.isMultiFrame ? ` F: ${frameNumber}` : '';\n\n const roundedLength = utils.roundNumber(length, 2);\n displayText.push(\n `${roundedLength} mm (S: ${SeriesNumber}${instanceText}${frameText})`\n );\n\n return displayText;\n}\n\nexport default Length;\n","import { annotation } from '@cornerstonejs/tools';\n\nimport SUPPORTED_TOOLS from './constants/supportedTools';\nimport getSOPInstanceAttributes from './utils/getSOPInstanceAttributes';\nimport { utils } from '@ohif/core';\n\nconst Bidirectional = {\n toAnnotation: measurement => {},\n toMeasurement: (\n csToolsEventDetail,\n DisplaySetService,\n CornerstoneViewportService,\n getValueTypeFromToolType\n ) => {\n const { annotation, viewportId } = csToolsEventDetail;\n const { metadata, data, annotationUID } = annotation;\n\n if (!metadata || !data) {\n console.warn('Length tool: Missing metadata or data');\n return null;\n }\n\n const { toolName, referencedImageId, FrameOfReferenceUID } = metadata;\n const validToolType = SUPPORTED_TOOLS.includes(toolName);\n\n if (!validToolType) {\n throw new Error('Tool not supported');\n }\n\n const {\n SOPInstanceUID,\n SeriesInstanceUID,\n StudyInstanceUID,\n } = getSOPInstanceAttributes(\n referencedImageId,\n CornerstoneViewportService,\n viewportId\n );\n\n let displaySet;\n\n if (SOPInstanceUID) {\n displaySet = DisplaySetService.getDisplaySetForSOPInstanceUID(\n SOPInstanceUID,\n SeriesInstanceUID\n );\n } else {\n displaySet = DisplaySetService.getDisplaySetsForSeries(SeriesInstanceUID);\n }\n\n const { points } = data.handles;\n\n const mappedAnnotations = getMappedAnnotations(\n annotation,\n DisplaySetService\n );\n\n const displayText = getDisplayText(mappedAnnotations, displaySet);\n const getReport = () =>\n _getReport(mappedAnnotations, points, FrameOfReferenceUID);\n\n return {\n uid: annotationUID,\n SOPInstanceUID,\n FrameOfReferenceUID,\n points,\n metadata,\n referenceSeriesUID: SeriesInstanceUID,\n referenceStudyUID: StudyInstanceUID,\n frameNumber: mappedAnnotations[0]?.frameNumber || 1,\n toolName: metadata.toolName,\n displaySetInstanceUID: displaySet.displaySetInstanceUID,\n label: data.label,\n displayText: displayText,\n data: data.cachedStats,\n type: getValueTypeFromToolType(toolName),\n getReport,\n };\n },\n};\n\nfunction getMappedAnnotations(annotation, DisplaySetService) {\n const { metadata, data } = annotation;\n const { cachedStats } = data;\n const { referencedImageId, referencedSeriesInstanceUID } = metadata;\n const targets = Object.keys(cachedStats);\n\n if (!targets.length) {\n return;\n }\n\n const annotations = [];\n Object.keys(cachedStats).forEach(targetId => {\n const targetStats = cachedStats[targetId];\n\n if (!referencedImageId) {\n throw new Error(\n 'Non-acquisition plane measurement mapping not supported'\n );\n }\n\n const {\n SOPInstanceUID,\n SeriesInstanceUID,\n frameNumber,\n } = getSOPInstanceAttributes(referencedImageId);\n\n const displaySet = DisplaySetService.getDisplaySetForSOPInstanceUID(\n SOPInstanceUID,\n SeriesInstanceUID,\n frameNumber\n );\n\n const { SeriesNumber } = displaySet;\n const { length, width } = targetStats;\n const unit = 'mm';\n\n annotations.push({\n SeriesInstanceUID,\n SOPInstanceUID,\n SeriesNumber,\n frameNumber,\n unit,\n length,\n width,\n });\n });\n\n return annotations;\n}\n\n/*\nThis function is used to convert the measurement data to a format that is\nsuitable for the report generation (e.g. for the csv report). The report\nreturns a list of columns and corresponding values.\n*/\nfunction _getReport(mappedAnnotations, points, FrameOfReferenceUID) {\n const columns = [];\n const values = [];\n\n // Add Type\n columns.push('AnnotationType');\n values.push('Cornerstone:Bidirectional');\n\n mappedAnnotations.forEach(annotation => {\n const { length, width } = annotation;\n columns.push(`Length (mm)`, `Width (mm)`);\n values.push(length, width);\n });\n\n if (FrameOfReferenceUID) {\n columns.push('FrameOfReferenceUID');\n values.push(FrameOfReferenceUID);\n }\n\n if (points) {\n columns.push('points');\n // points has the form of [[x1, y1, z1], [x2, y2, z2], ...]\n // convert it to string of [[x1 y1 z1];[x2 y2 z2];...]\n // so that it can be used in the csv report\n values.push(points.map(p => p.join(' ')).join(';'));\n }\n\n return {\n columns,\n values,\n };\n}\n\nfunction getDisplayText(mappedAnnotations, displaySet) {\n if (!mappedAnnotations || !mappedAnnotations.length) {\n return '';\n }\n\n const displayText = [];\n\n // Area is the same for all series\n const {\n length,\n width,\n SeriesNumber,\n SOPInstanceUID,\n frameNumber,\n } = mappedAnnotations[0];\n const roundedLength = utils.roundNumber(length, 2);\n const roundedWidth = utils.roundNumber(width, 2);\n\n const instance = displaySet.images.find(\n image => image.SOPInstanceUID === SOPInstanceUID\n );\n\n let InstanceNumber;\n if (instance) {\n InstanceNumber = instance.InstanceNumber;\n }\n\n const instanceText = InstanceNumber ? ` I: ${InstanceNumber}` : '';\n const frameText = displaySet.isMultiFrame ? ` F: ${frameNumber}` : '';\n\n displayText.push(\n `L: ${roundedLength} mm (S: ${SeriesNumber}${instanceText}${frameText})`\n );\n displayText.push(`W: ${roundedWidth} mm`);\n\n return displayText;\n}\n\nexport default Bidirectional;\n","function getModalityUnit(modality) {\n if (modality === 'CT') {\n return 'HU';\n } else if (modality === 'PT') {\n return 'SUV';\n } else {\n return '';\n }\n}\n\nexport default getModalityUnit;\n","import SUPPORTED_TOOLS from './constants/supportedTools';\nimport getSOPInstanceAttributes from './utils/getSOPInstanceAttributes';\nimport getModalityUnit from './utils/getModalityUnit';\nimport { utils } from '@ohif/core';\n\nconst EllipticalROI = {\n toAnnotation: measurement => {},\n toMeasurement: (\n csToolsEventDetail,\n DisplaySetService,\n CornerstoneViewportService,\n getValueTypeFromToolType\n ) => {\n const { annotation, viewportId } = csToolsEventDetail;\n const { metadata, data, annotationUID } = annotation;\n\n if (!metadata || !data) {\n console.warn('Length tool: Missing metadata or data');\n return null;\n }\n\n const { toolName, referencedImageId, FrameOfReferenceUID } = metadata;\n const validToolType = SUPPORTED_TOOLS.includes(toolName);\n\n if (!validToolType) {\n throw new Error('Tool not supported');\n }\n\n const {\n SOPInstanceUID,\n SeriesInstanceUID,\n StudyInstanceUID,\n } = getSOPInstanceAttributes(\n referencedImageId,\n CornerstoneViewportService,\n viewportId\n );\n\n let displaySet;\n\n if (SOPInstanceUID) {\n displaySet = DisplaySetService.getDisplaySetForSOPInstanceUID(\n SOPInstanceUID,\n SeriesInstanceUID\n );\n } else {\n displaySet = DisplaySetService.getDisplaySetsForSeries(SeriesInstanceUID);\n }\n\n const { points } = data.handles;\n\n const mappedAnnotations = getMappedAnnotations(\n annotation,\n DisplaySetService\n );\n\n const displayText = getDisplayText(mappedAnnotations, displaySet);\n const getReport = () =>\n _getReport(mappedAnnotations, points, FrameOfReferenceUID);\n\n return {\n uid: annotationUID,\n SOPInstanceUID,\n FrameOfReferenceUID,\n points,\n metadata,\n referenceSeriesUID: SeriesInstanceUID,\n referenceStudyUID: StudyInstanceUID,\n frameNumber: mappedAnnotations[0]?.frameNumber || 1,\n toolName: metadata.toolName,\n displaySetInstanceUID: displaySet.displaySetInstanceUID,\n label: data.label,\n displayText: displayText,\n data: data.cachedStats,\n type: getValueTypeFromToolType(toolName),\n getReport,\n };\n },\n};\n\nfunction getMappedAnnotations(annotation, DisplaySetService) {\n const { metadata, data } = annotation;\n const { cachedStats } = data;\n const { referencedImageId } = metadata;\n const targets = Object.keys(cachedStats);\n\n if (!targets.length) {\n return;\n }\n\n const annotations = [];\n Object.keys(cachedStats).forEach(targetId => {\n const targetStats = cachedStats[targetId];\n\n if (!referencedImageId) {\n // Todo: Non-acquisition plane measurement mapping not supported yet\n throw new Error(\n 'Non-acquisition plane measurement mapping not supported'\n );\n }\n\n const {\n SOPInstanceUID,\n SeriesInstanceUID,\n frameNumber,\n } = getSOPInstanceAttributes(referencedImageId);\n\n const displaySet = DisplaySetService.getDisplaySetForSOPInstanceUID(\n SOPInstanceUID,\n SeriesInstanceUID,\n frameNumber\n );\n\n const { SeriesNumber } = displaySet;\n const { mean, stdDev, max, area, Modality } = targetStats;\n const unit = getModalityUnit(Modality);\n\n annotations.push({\n SeriesInstanceUID,\n SOPInstanceUID,\n SeriesNumber,\n frameNumber,\n Modality,\n unit,\n mean,\n stdDev,\n max,\n area,\n });\n });\n\n return annotations;\n}\n\n/*\nThis function is used to convert the measurement data to a format that is\nsuitable for the report generation (e.g. for the csv report). The report\nreturns a list of columns and corresponding values.\n*/\nfunction _getReport(mappedAnnotations, points, FrameOfReferenceUID) {\n const columns = [];\n const values = [];\n\n // Add Type\n columns.push('AnnotationType');\n values.push('Cornerstone:EllipticalROI');\n\n mappedAnnotations.forEach(annotation => {\n const { mean, stdDev, max, area, unit } = annotation;\n\n if (!mean || !unit || !max || !area) {\n return;\n }\n\n columns.push(\n `max (${unit})`,\n `mean (${unit})`,\n `std (${unit})`,\n `area (mm2)`\n );\n values.push(max, mean, stdDev, area);\n });\n\n if (FrameOfReferenceUID) {\n columns.push('FrameOfReferenceUID');\n values.push(FrameOfReferenceUID);\n }\n\n if (points) {\n columns.push('points');\n // points has the form of [[x1, y1, z1], [x2, y2, z2], ...]\n // convert it to string of [[x1 y1 z1];[x2 y2 z2];...]\n // so that it can be used in the csv report\n values.push(points.map(p => p.join(' ')).join(';'));\n }\n\n return {\n columns,\n values,\n };\n}\n\nfunction getDisplayText(mappedAnnotations, displaySet) {\n if (!mappedAnnotations || !mappedAnnotations.length) {\n return '';\n }\n\n const displayText = [];\n\n // Area is the same for all series\n const { area, SOPInstanceUID, frameNumber } = mappedAnnotations[0];\n\n const instance = displaySet.images.find(\n image => image.SOPInstanceUID === SOPInstanceUID\n );\n\n let InstanceNumber;\n if (instance) {\n InstanceNumber = instance.InstanceNumber;\n }\n\n const instanceText = InstanceNumber ? ` I: ${InstanceNumber}` : '';\n const frameText = displaySet.isMultiFrame ? ` F: ${frameNumber}` : '';\n\n const roundedArea = utils.roundNumber(area, 2);\n displayText.push(`${roundedArea} mm2`);\n\n // Todo: we need a better UI for displaying all these information\n mappedAnnotations.forEach(mappedAnnotation => {\n const { unit, max, SeriesNumber } = mappedAnnotation;\n\n let maxStr = '';\n if (max) {\n const roundedMax = utils.roundNumber(max, 2);\n maxStr = `Max: ${roundedMax} ${unit} `;\n }\n\n const str = `${maxStr}(S:${SeriesNumber}${instanceText}${frameText})`;\n if (!displayText.includes(str)) {\n displayText.push(str);\n }\n });\n\n return displayText;\n}\n\nexport default EllipticalROI;\n","import SUPPORTED_TOOLS from './constants/supportedTools';\nimport getSOPInstanceAttributes from './utils/getSOPInstanceAttributes';\n\nconst Length = {\n toAnnotation: measurement => {},\n\n /**\n * Maps cornerstone annotation event data to measurement service format.\n *\n * @param {Object} cornerstone Cornerstone event data\n * @return {Measurement} Measurement instance\n */\n toMeasurement: (\n csToolsEventDetail,\n DisplaySetService,\n CornerstoneViewportService,\n getValueTypeFromToolType\n ) => {\n const { annotation, viewportId } = csToolsEventDetail;\n const { metadata, data, annotationUID } = annotation;\n\n if (!metadata || !data) {\n console.warn('Length tool: Missing metadata or data');\n return null;\n }\n\n const { toolName, referencedImageId, FrameOfReferenceUID } = metadata;\n const validToolType = SUPPORTED_TOOLS.includes(toolName);\n\n if (!validToolType) {\n throw new Error('Tool not supported');\n }\n\n const {\n SOPInstanceUID,\n SeriesInstanceUID,\n StudyInstanceUID,\n } = getSOPInstanceAttributes(\n referencedImageId,\n CornerstoneViewportService,\n viewportId\n );\n\n let displaySet;\n\n if (SOPInstanceUID) {\n displaySet = DisplaySetService.getDisplaySetForSOPInstanceUID(\n SOPInstanceUID,\n SeriesInstanceUID\n );\n } else {\n displaySet = DisplaySetService.getDisplaySetsForSeries(SeriesInstanceUID);\n }\n\n const { points } = data.handles;\n\n const mappedAnnotations = getMappedAnnotations(\n annotation,\n DisplaySetService\n );\n\n const displayText = getDisplayText(mappedAnnotations, displaySet);\n\n return {\n uid: annotationUID,\n SOPInstanceUID,\n FrameOfReferenceUID,\n points,\n metadata,\n referenceSeriesUID: SeriesInstanceUID,\n referenceStudyUID: StudyInstanceUID,\n frameNumber: mappedAnnotations[0]?.frameNumber || 1,\n toolName: metadata.toolName,\n displaySetInstanceUID: displaySet.displaySetInstanceUID,\n label: data.text,\n text: data.text,\n displayText: displayText,\n data: data.cachedStats,\n type: getValueTypeFromToolType(toolName),\n getReport: () => {\n throw new Error('Not implemented');\n },\n };\n },\n};\n\nfunction getMappedAnnotations(annotation, DisplaySetService) {\n const { metadata, data } = annotation;\n const { text } = data;\n const { referencedImageId } = metadata;\n\n const annotations = [];\n\n const {\n SOPInstanceUID,\n SeriesInstanceUID,\n frameNumber,\n } = getSOPInstanceAttributes(referencedImageId);\n\n const displaySet = DisplaySetService.getDisplaySetForSOPInstanceUID(\n SOPInstanceUID,\n SeriesInstanceUID,\n frameNumber\n );\n\n const { SeriesNumber } = displaySet;\n\n annotations.push({\n SeriesInstanceUID,\n SOPInstanceUID,\n SeriesNumber,\n frameNumber,\n text,\n });\n\n return annotations;\n}\n\nfunction getDisplayText(mappedAnnotations, displaySet) {\n if (!mappedAnnotations) {\n return '';\n }\n\n const displayText = [];\n\n // Area is the same for all series\n const { SeriesNumber, SOPInstanceUID, frameNumber } = mappedAnnotations[0];\n\n const instance = displaySet.images.find(\n image => image.SOPInstanceUID === SOPInstanceUID\n );\n\n let InstanceNumber;\n if (instance) {\n InstanceNumber = instance.InstanceNumber;\n }\n\n const instanceText = InstanceNumber ? ` I: ${InstanceNumber}` : '';\n const frameText = displaySet.isMultiFrame ? ` F: ${frameNumber}` : '';\n\n displayText.push(`(S: ${SeriesNumber}${instanceText}${frameText})`);\n\n return displayText;\n}\n\nexport default Length;\n","import Length from './Length';\nimport Bidirectional from './Bidirectional';\nimport EllipticalROI from './EllipticalROI';\nimport ArrowAnnotate from './ArrowAnnotate';\n\nconst measurementServiceMappingsFactory = (\n MeasurementService,\n DisplaySetService,\n CornerstoneViewportService\n) => {\n /**\n * Maps measurement service format object to cornerstone annotation object.\n *\n * @param {Measurement} measurement The measurement instance\n * @param {string} definition The source definition\n * @return {Object} Cornerstone annotation data\n */\n\n const _getValueTypeFromToolType = toolType => {\n const {\n POLYLINE,\n ELLIPSE,\n RECTANGLE,\n BIDIRECTIONAL,\n POINT,\n } = MeasurementService.VALUE_TYPES;\n\n // TODO -> I get why this was attempted, but its not nearly flexible enough.\n // A single measurement may have an ellipse + a bidirectional measurement, for instances.\n // You can't define a bidirectional tool as a single type..\n const TOOL_TYPE_TO_VALUE_TYPE = {\n Length: POLYLINE,\n EllipticalROI: ELLIPSE,\n RectangleROI: RECTANGLE,\n Bidirectional: BIDIRECTIONAL,\n ArrowAnnotate: POINT,\n };\n\n return TOOL_TYPE_TO_VALUE_TYPE[toolType];\n };\n\n return {\n Length: {\n toAnnotation: Length.toAnnotation,\n toMeasurement: csToolsAnnotation =>\n Length.toMeasurement(\n csToolsAnnotation,\n DisplaySetService,\n CornerstoneViewportService,\n _getValueTypeFromToolType\n ),\n matchingCriteria: [\n {\n valueType: MeasurementService.VALUE_TYPES.POLYLINE,\n points: 2,\n },\n ],\n },\n Bidirectional: {\n toAnnotation: Bidirectional.toAnnotation,\n toMeasurement: csToolsAnnotation =>\n Bidirectional.toMeasurement(\n csToolsAnnotation,\n DisplaySetService,\n CornerstoneViewportService,\n _getValueTypeFromToolType\n ),\n matchingCriteria: [\n // TODO -> We should eventually do something like shortAxis + longAxis,\n // But its still a little unclear how these automatic interpretations will work.\n {\n valueType: MeasurementService.VALUE_TYPES.POLYLINE,\n points: 2,\n },\n {\n valueType: MeasurementService.VALUE_TYPES.POLYLINE,\n points: 2,\n },\n ],\n },\n EllipticalROI: {\n toAnnotation: EllipticalROI.toAnnotation,\n toMeasurement: csToolsAnnotation =>\n EllipticalROI.toMeasurement(\n csToolsAnnotation,\n DisplaySetService,\n CornerstoneViewportService,\n _getValueTypeFromToolType\n ),\n matchingCriteria: [\n {\n valueType: MeasurementService.VALUE_TYPES.ELLIPSE,\n },\n ],\n },\n ArrowAnnotate: {\n toAnnotation: ArrowAnnotate.toAnnotation,\n toMeasurement: csToolsAnnotation =>\n ArrowAnnotate.toMeasurement(\n csToolsAnnotation,\n DisplaySetService,\n CornerstoneViewportService,\n _getValueTypeFromToolType\n ),\n matchingCriteria: [\n {\n valueType: MeasurementService.VALUE_TYPES.POINT,\n points: 1,\n },\n ],\n },\n };\n};\n\nexport default measurementServiceMappingsFactory;\n","import { eventTarget } from '@cornerstonejs/core';\nimport { Enums, annotation } from '@cornerstonejs/tools';\nimport { DicomMetadataStore } from '@ohif/core';\n\nimport measurementServiceMappingsFactory from './utils/measurementServiceMappings/measurementServiceMappingsFactory';\nimport getSOPInstanceAttributes from './utils/measurementServiceMappings/utils/getSOPInstanceAttributes';\n\nconst { removeAnnotation } = annotation.state;\n\nconst csToolsEvents = Enums.Events;\n\nconst CORNERSTONE_3D_TOOLS_SOURCE_NAME = 'Cornerstone3DTools';\nconst CORNERSTONE_3D_TOOLS_SOURCE_VERSION = '0.1';\n\nconst initMeasurementService = (\n MeasurementService,\n DisplaySetService,\n CornerstoneViewportService\n) => {\n /* Initialization */\n const {\n Length,\n Bidirectional,\n EllipticalROI,\n ArrowAnnotate,\n } = measurementServiceMappingsFactory(\n MeasurementService,\n DisplaySetService,\n CornerstoneViewportService\n );\n const csTools3DVer1MeasurementSource = MeasurementService.createSource(\n CORNERSTONE_3D_TOOLS_SOURCE_NAME,\n CORNERSTONE_3D_TOOLS_SOURCE_VERSION\n );\n\n /* Mappings */\n MeasurementService.addMapping(\n csTools3DVer1MeasurementSource,\n 'Length',\n Length.matchingCriteria,\n Length.toAnnotation,\n Length.toMeasurement\n );\n\n MeasurementService.addMapping(\n csTools3DVer1MeasurementSource,\n 'Bidirectional',\n Bidirectional.matchingCriteria,\n Bidirectional.toAnnotation,\n Bidirectional.toMeasurement\n );\n\n MeasurementService.addMapping(\n csTools3DVer1MeasurementSource,\n 'EllipticalROI',\n EllipticalROI.matchingCriteria,\n EllipticalROI.toAnnotation,\n EllipticalROI.toMeasurement\n );\n\n MeasurementService.addMapping(\n csTools3DVer1MeasurementSource,\n 'ArrowAnnotate',\n ArrowAnnotate.matchingCriteria,\n ArrowAnnotate.toAnnotation,\n ArrowAnnotate.toMeasurement\n );\n\n return csTools3DVer1MeasurementSource;\n};\n\nconst connectToolsToMeasurementService = (\n MeasurementService,\n DisplaySetService,\n CornerstoneViewportService\n) => {\n const csTools3DVer1MeasurementSource = initMeasurementService(\n MeasurementService,\n DisplaySetService,\n CornerstoneViewportService\n );\n connectMeasurementServiceToTools(\n MeasurementService,\n CornerstoneViewportService,\n csTools3DVer1MeasurementSource\n );\n const { annotationToMeasurement, remove } = csTools3DVer1MeasurementSource;\n\n //\n function addMeasurement(csToolsEvent) {\n try {\n const annotationAddedEventDetail = csToolsEvent.detail;\n const {\n annotation: { metadata, annotationUID },\n } = annotationAddedEventDetail;\n const { toolName } = metadata;\n\n // To force the measurementUID be the same as the annotationUID\n // Todo: this should be changed when a measurement can include multiple annotations\n // in the future\n annotationAddedEventDetail.uid = annotationUID;\n annotationToMeasurement(toolName, annotationAddedEventDetail);\n } catch (error) {\n console.warn('Failed to update measurement:', error);\n }\n }\n function updateMeasurement(csToolsEvent) {\n try {\n const annotationModifiedEventDetail = csToolsEvent.detail;\n\n const {\n annotation: { metadata, annotationUID },\n } = annotationModifiedEventDetail;\n\n // If the measurement hasn't been added, don't modify it\n const measurement = MeasurementService.getMeasurement(annotationUID);\n\n if (!measurement) {\n return;\n }\n const { toolName } = metadata;\n\n annotationModifiedEventDetail.uid = annotationUID;\n annotationToMeasurement(toolName, annotationModifiedEventDetail);\n } catch (error) {\n console.warn('Failed to update measurement:', error);\n }\n }\n\n /**\n * When csTools fires a removed event, remove the same measurement\n * from the measurement service\n *\n * @param {*} csToolsEvent\n */\n function removeMeasurement(csToolsEvent) {\n try {\n try {\n const annotationRemovedEventDetail = csToolsEvent.detail;\n const {\n annotation: { annotationUID },\n } = annotationRemovedEventDetail;\n\n const measurement = MeasurementService.getMeasurement(annotationUID);\n\n if (measurement) {\n console.log('~~ removeEvt', csToolsEvent);\n remove(annotationUID, annotationRemovedEventDetail);\n }\n } catch (error) {\n console.warn('Failed to update measurement:', error);\n }\n } catch (error) {\n console.warn('Failed to remove measurement:', error);\n }\n }\n\n // on display sets added, check if there are any measurements in measurement service that need to be\n // put into cornerstone tools\n const completedEvt = csToolsEvents.ANNOTATION_COMPLETED;\n const updatedEvt = csToolsEvents.ANNOTATION_MODIFIED;\n const removedEvt = csToolsEvents.ANNOTATION_REMOVED;\n\n eventTarget.addEventListener(completedEvt, addMeasurement);\n eventTarget.addEventListener(updatedEvt, updateMeasurement);\n eventTarget.addEventListener(removedEvt, removeMeasurement);\n\n return csTools3DVer1MeasurementSource;\n};\n\nconst connectMeasurementServiceToTools = (\n MeasurementService,\n CornerstoneViewportService,\n measurementSource\n) => {\n const {\n MEASUREMENT_REMOVED,\n MEASUREMENTS_CLEARED,\n MEASUREMENT_UPDATED,\n RAW_MEASUREMENT_ADDED,\n } = MeasurementService.EVENTS;\n\n const csTools3DVer1MeasurementSource = MeasurementService.getSource(\n CORNERSTONE_3D_TOOLS_SOURCE_NAME,\n CORNERSTONE_3D_TOOLS_SOURCE_VERSION\n );\n\n MeasurementService.subscribe(MEASUREMENTS_CLEARED, ({ measurements }) => {\n if (!Object.keys(measurements).length) {\n return;\n }\n\n for (const measurement of Object.values(measurements)) {\n const { uid, source } = measurement;\n if (source.name !== CORNERSTONE_3D_TOOLS_SOURCE_NAME) {\n continue;\n }\n\n removeAnnotation(uid);\n }\n });\n\n MeasurementService.subscribe(\n MEASUREMENT_UPDATED,\n ({ source, measurement, notYetUpdatedAtSource }) => {\n if (source.name !== CORNERSTONE_3D_TOOLS_SOURCE_NAME) {\n return;\n }\n\n if (notYetUpdatedAtSource === false) {\n // This event was fired by cornerstone telling the measurement service to sync.\n // Already in sync.\n return;\n }\n\n const { uid, label } = measurement;\n\n const sourceAnnotation = annotation.state.getAnnotation(uid);\n const { data, metadata } = sourceAnnotation;\n\n if (!data) {\n return;\n }\n\n if (data.label !== label) {\n data.label = label;\n }\n\n if (metadata.toolName === 'ArrowAnnotate') {\n data.text = label;\n }\n\n // Todo: trigger render for annotation\n }\n );\n\n MeasurementService.subscribe(\n RAW_MEASUREMENT_ADDED,\n ({ source, measurement, data, dataSource }) => {\n if (source.name !== CORNERSTONE_3D_TOOLS_SOURCE_NAME) {\n return;\n }\n\n const {\n referenceSeriesUID,\n referenceStudyUID,\n SOPInstanceUID,\n } = measurement;\n\n const instance = DicomMetadataStore.getInstance(\n referenceStudyUID,\n referenceSeriesUID,\n SOPInstanceUID\n );\n\n let imageId;\n let frameNumber = 1;\n\n if (measurement?.metadata?.referencedImageId) {\n imageId = measurement.metadata.referencedImageId;\n frameNumber = getSOPInstanceAttributes(\n measurement.metadata.referencedImageId\n ).frameNumber;\n } else {\n imageId = dataSource.getImageIdsForInstance({ instance });\n }\n\n const annotationManager = annotation.state.getDefaultAnnotationManager();\n annotationManager.addAnnotation({\n annotationUID: measurement.uid,\n highlighted: false,\n isLocked: false,\n invalidated: false,\n metadata: {\n toolName: measurement.toolName,\n FrameOfReferenceUID: measurement.FrameOfReferenceUID,\n referencedImageId: imageId,\n },\n data: {\n text: data.annotation.data.text,\n handles: { ...data.annotation.data.handles },\n cachedStats: { ...data.annotation.data.cachedStats },\n label: data.annotation.data.label,\n frameNumber: frameNumber,\n },\n });\n }\n );\n\n MeasurementService.subscribe(\n MEASUREMENT_REMOVED,\n ({ source, measurement: removedMeasurementId }) => {\n if (source?.name && source.name !== CORNERSTONE_3D_TOOLS_SOURCE_NAME) {\n return;\n }\n removeAnnotation(removedMeasurementId);\n const renderingEngine = CornerstoneViewportService.getRenderingEngine();\n // Note: We could do a better job by triggering the render on the\n // viewport itself, but the removeAnnotation does not include that info...\n renderingEngine.render();\n }\n );\n};\n\nexport {\n initMeasurementService,\n connectToolsToMeasurementService,\n connectMeasurementServiceToTools,\n};\n","import React from 'react';\nimport { Input, Dialog } from '@ohif/ui';\n\n/**\n *\n * @param {*} data\n * @param {*} data.text\n * @param {*} data.label\n * @param {*} event\n * @param {*} callback\n * @param {*} isArrowAnnotateInputDialog\n */\nfunction callInputDialog(\n UIDialogService,\n data,\n callback,\n isArrowAnnotateInputDialog = true\n) {\n const dialogId = 'enter-annotation';\n const label = data\n ? isArrowAnnotateInputDialog\n ? data.text\n : data.label\n : '';\n\n const onSubmitHandler = ({ action, value }) => {\n switch (action.id) {\n case 'save':\n callback(value.label, action.id);\n break;\n case 'cancel':\n callback('', action.id);\n break;\n }\n UIDialogService.dismiss({ id: dialogId });\n };\n\n if (UIDialogService) {\n UIDialogService.create({\n id: dialogId,\n centralize: true,\n isDraggable: false,\n showOverlay: true,\n content: Dialog,\n contentProps: {\n title: 'Enter your annotation',\n value: { label },\n noCloseButton: true,\n onClose: () => UIDialogService.dismiss({ id: dialogId }),\n actions: [\n { id: 'cancel', text: 'Cancel', type: 'primary' },\n { id: 'save', text: 'Save', type: 'secondary' },\n ],\n onSubmit: onSubmitHandler,\n body: ({ value, setValue }) => {\n return (\n
\n {\n event.persist();\n setValue(value => ({ ...value, label: event.target.value }));\n }}\n onKeyPress={event => {\n if (event.key === 'Enter') {\n onSubmitHandler({ value, action: { id: 'save' } });\n }\n }}\n />\n
\n );\n },\n },\n });\n }\n}\n\nexport default callInputDialog;\n","import { utilities } from '@cornerstonejs/tools';\n\nfunction initCineService(CineService) {\n const playClip = (element, playClipOptions) => {\n return utilities.cine.playClip(element, playClipOptions);\n };\n\n const stopClip = element => {\n return utilities.cine.stopClip(element);\n };\n\n CineService.setServiceImplementation({ playClip, stopClip });\n}\n\nexport default initCineService;\n","import { cache, imageLoadPoolManager, Enums } from '@cornerstonejs/core';\nimport getInterleavedFrames from './getInterleavedFrames';\nimport { compact, flatten, zip } from 'lodash';\n\n// Map of volumeId and SeriesInstanceId\nconst volumeIdMapsToLoad = new Map();\nconst viewportIdVolumeInputArrayMap = new Map();\n\n/**\n * This function caches the volumeUIDs until all the volumes inside the\n * hanging protocol are initialized. Then it goes through the imageIds\n * of the volumes, and interleave them, in order for the volumes to be loaded\n * together from middle to the start and the end.\n * @param {Object} props image loading properties from Cornerstone ViewportService\n * @returns\n */\nexport default function interleaveCenterLoader({\n data: { viewportId, volumeInputArray },\n displaySetsMatchDetails,\n viewportMatchDetails: matchDetails,\n}) {\n viewportIdVolumeInputArrayMap.set(viewportId, volumeInputArray);\n\n // Based on the volumeInputs store the volumeIds and SeriesInstanceIds\n // to keep track of the volumes being loaded\n for (const volumeInput of volumeInputArray) {\n const { volumeId } = volumeInput;\n const volume = cache.getVolume(volumeId);\n\n if (!volume) {\n return;\n }\n\n // if the volumeUID is not in the volumeUIDs array, add it\n if (!volumeIdMapsToLoad.has(volumeId)) {\n const { metadata } = volume;\n volumeIdMapsToLoad.set(volumeId, metadata.SeriesInstanceUID);\n }\n }\n\n /**\n * The following is checking if all the viewports that were matched in the HP has been\n * successfully created their cornerstone viewport or not. Todo: This can be\n * improved by not checking it, and as soon as the matched DisplaySets have their\n * volume loaded, we start the loading, but that comes at the cost of viewports\n * not being created yet (e.g., in a 10 viewport ptCT fusion, when one ct viewport and one\n * pt viewport are created we have a guarantee that the volumes are created in the cache\n * but the rest of the viewports (fusion, mip etc.) are not created yet. So\n * we can't initiate setting the volumes for those viewports. One solution can be\n * to add an event when a viewport is created (not enabled element event) and then\n * listen to it and as the other viewports are created we can set the volumes for them\n * since volumes are already started loading.\n */\n if (matchDetails.size !== viewportIdVolumeInputArrayMap.size) {\n return;\n }\n\n // Check if all the matched volumes are loaded\n for (const [_, details] of displaySetsMatchDetails.entries()) {\n const { SeriesInstanceUID } = details;\n\n // HangingProtocol has matched, but don't have all the volumes created yet, so return\n if (!Array.from(volumeIdMapsToLoad.values()).includes(SeriesInstanceUID)) {\n return;\n }\n }\n\n const volumeIds = Array.from(volumeIdMapsToLoad.keys()).slice();\n // get volumes from cache\n const volumes = volumeIds.map(volumeId => {\n return cache.getVolume(volumeId);\n });\n\n // iterate over all volumes, and get their imageIds, and interleave\n // the imageIds and save them in AllRequests for later use\n const AllRequests = [];\n volumes.forEach(volume => {\n const requests = volume.getImageLoadRequests();\n\n if (!requests.length || !requests[0] || !requests[0].imageId) {\n return;\n }\n\n const requestImageIds = requests\n .filter(request => {\n return request?.imageId;\n })\n .map(request => {\n return request.imageId;\n });\n\n const imageIds = getInterleavedFrames(requestImageIds);\n\n const reOrderedRequests = imageIds.map(({ imageId }) => {\n const request = requests.find(req => req.imageId === imageId);\n return request;\n });\n\n AllRequests.push(reOrderedRequests);\n });\n\n // flatten the AllRequests array, which will result in a list of all the\n // imageIds for all the volumes but interleaved\n const interleavedRequests = compact(flatten(zip(...AllRequests)));\n\n // set the finalRequests to the imageLoadPoolManager\n const finalRequests = [];\n interleavedRequests.forEach(request => {\n const { imageId } = request;\n\n AllRequests.forEach(volumeRequests => {\n const volumeImageIdRequest = volumeRequests.find(\n req => req.imageId === imageId\n );\n if (volumeImageIdRequest) {\n finalRequests.push(volumeImageIdRequest);\n }\n });\n });\n\n const requestType = Enums.RequestType.Prefetch;\n const priority = 0;\n\n finalRequests.forEach(\n ({ callLoadImage, additionalDetails, imageId, imageIdIndex, options }) => {\n const callLoadImageBound = callLoadImage.bind(\n null,\n imageId,\n imageIdIndex,\n options\n );\n\n imageLoadPoolManager.addRequest(\n callLoadImageBound,\n requestType,\n additionalDetails,\n priority\n );\n }\n );\n\n // clear the volumeIdMapsToLoad\n volumeIdMapsToLoad.clear();\n\n // copy the viewportIdVolumeInputArrayMap\n const viewportIdVolumeInputArrayMapCopy = new Map(\n viewportIdVolumeInputArrayMap\n );\n\n // reset the viewportIdVolumeInputArrayMap\n viewportIdVolumeInputArrayMap.clear();\n\n return viewportIdVolumeInputArrayMapCopy;\n}\n","export default function getInterleavedFrames(imageIds) {\n const minImageIdIndex = 0;\n const maxImageIdIndex = imageIds.length - 1;\n\n const middleImageIdIndex = Math.floor(imageIds.length / 2);\n\n let lowerImageIdIndex = middleImageIdIndex;\n let upperImageIdIndex = middleImageIdIndex;\n\n // Build up an array of images to prefetch, starting with the current image.\n const imageIdsToPrefetch = [\n { imageId: imageIds[middleImageIdIndex], imageIdIndex: middleImageIdIndex },\n ];\n\n const prefetchQueuedFilled = {\n currentPositionDownToMinimum: false,\n currentPositionUpToMaximum: false,\n };\n\n // Check if on edges and some criteria is already fulfilled\n\n if (middleImageIdIndex === minImageIdIndex) {\n prefetchQueuedFilled.currentPositionDownToMinimum = true;\n } else if (middleImageIdIndex === maxImageIdIndex) {\n prefetchQueuedFilled.currentPositionUpToMaximum = true;\n }\n\n while (\n !prefetchQueuedFilled.currentPositionDownToMinimum ||\n !prefetchQueuedFilled.currentPositionUpToMaximum\n ) {\n if (!prefetchQueuedFilled.currentPositionDownToMinimum) {\n // Add imageId bellow\n lowerImageIdIndex--;\n imageIdsToPrefetch.push({\n imageId: imageIds[lowerImageIdIndex],\n imageIdIndex: lowerImageIdIndex,\n });\n\n if (lowerImageIdIndex === minImageIdIndex) {\n prefetchQueuedFilled.currentPositionDownToMinimum = true;\n }\n }\n\n if (!prefetchQueuedFilled.currentPositionUpToMaximum) {\n // Add imageId above\n upperImageIdIndex++;\n imageIdsToPrefetch.push({\n imageId: imageIds[upperImageIdIndex],\n imageIdIndex: upperImageIdIndex,\n });\n\n if (upperImageIdIndex === maxImageIdIndex) {\n prefetchQueuedFilled.currentPositionUpToMaximum = true;\n }\n }\n }\n\n return imageIdsToPrefetch;\n}\n","import { cache, imageLoadPoolManager, Enums } from '@cornerstonejs/core';\nimport { compact, flatten, zip } from 'lodash';\n\n// Map of volumeId and SeriesInstanceId\nconst volumeIdMapsToLoad = new Map();\nconst viewportIdVolumeInputArrayMap = new Map();\n\n/**\n * This function caches the volumeIds until all the volumes inside the\n * hanging protocol are initialized. Then it goes through the imageIds\n * of the volumes, and interleave them, in order for the volumes to be loaded\n * together from middle to the start and the end.\n * @param {Object} {viewportData, displaySetMatchDetails}\n * @returns\n */\nexport default function interleaveTopToBottom({\n data: { viewportId, volumeInputArray },\n displaySetsMatchDetails,\n viewportMatchDetails: matchDetails,\n}) {\n viewportIdVolumeInputArrayMap.set(viewportId, volumeInputArray);\n\n // Based on the volumeInputs store the volumeIds and SeriesInstanceIds\n // to keep track of the volumes being loaded\n for (const volumeInput of volumeInputArray) {\n const { volumeId } = volumeInput;\n const volume = cache.getVolume(volumeId);\n\n if (!volume) {\n return;\n }\n\n // if the volumeUID is not in the volumeUIDs array, add it\n if (!volumeIdMapsToLoad.has(volumeId)) {\n const { metadata } = volume;\n volumeIdMapsToLoad.set(volumeId, metadata.SeriesInstanceUID);\n }\n }\n\n /**\n * The following is checking if all the viewports that were matched in the HP has been\n * successfully created their cornerstone viewport or not. Todo: This can be\n * improved by not checking it, and as soon as the matched DisplaySets have their\n * volume loaded, we start the loading, but that comes at the cost of viewports\n * not being created yet (e.g., in a 10 viewport ptCT fusion, when one ct viewport and one\n * pt viewport are created we have a guarantee that the volumes are created in the cache\n * but the rest of the viewports (fusion, mip etc.) are not created yet. So\n * we can't initiate setting the volumes for those viewports. One solution can be\n * to add an event when a viewport is created (not enabled element event) and then\n * listen to it and as the other viewports are created we can set the volumes for them\n * since volumes are already started loading.\n */\n if (matchDetails.size !== viewportIdVolumeInputArrayMap.size) {\n return;\n }\n\n // Check if all the matched volumes are loaded\n for (const [_, details] of displaySetsMatchDetails.entries()) {\n const { SeriesInstanceUID } = details;\n\n // HangingProtocol has matched, but don't have all the volumes created yet, so return\n if (!Array.from(volumeIdMapsToLoad.values()).includes(SeriesInstanceUID)) {\n return;\n }\n }\n\n const volumeIds = Array.from(volumeIdMapsToLoad.keys()).slice();\n // get volumes from cache\n const volumes = volumeIds.map(volumeId => {\n return cache.getVolume(volumeId);\n });\n\n // iterate over all volumes, and get their imageIds, and interleave\n // the imageIds and save them in AllRequests for later use\n const AllRequests = [];\n volumes.forEach(volume => {\n const requests = volume.getImageLoadRequests();\n\n if (!requests.length || !requests[0] || !requests[0].imageId) {\n return;\n }\n\n // reverse the requests\n AllRequests.push(requests.reverse());\n });\n\n // flatten the AllRequests array, which will result in a list of all the\n // imageIds for all the volumes but interleaved\n const interleavedRequests = compact(flatten(zip(...AllRequests)));\n\n // set the finalRequests to the imageLoadPoolManager\n const finalRequests = [];\n interleavedRequests.forEach(request => {\n const { imageId } = request;\n\n AllRequests.forEach(volumeRequests => {\n const volumeImageIdRequest = volumeRequests.find(\n req => req.imageId === imageId\n );\n if (volumeImageIdRequest) {\n finalRequests.push(volumeImageIdRequest);\n }\n });\n });\n\n const requestType = Enums.RequestType.Prefetch;\n const priority = 0;\n\n finalRequests.forEach(\n ({ callLoadImage, additionalDetails, imageId, imageIdIndex, options }) => {\n const callLoadImageBound = callLoadImage.bind(\n null,\n imageId,\n imageIdIndex,\n options\n );\n\n imageLoadPoolManager.addRequest(\n callLoadImageBound,\n requestType,\n additionalDetails,\n priority\n );\n }\n );\n\n // clear the volumeIdMapsToLoad\n volumeIdMapsToLoad.clear();\n\n // copy the viewportIdVolumeInputArrayMap\n const viewportIdVolumeInputArrayMapCopy = new Map(\n viewportIdVolumeInputArrayMap\n );\n\n // reset the viewportIdVolumeInputArrayMap\n viewportIdVolumeInputArrayMap.clear();\n\n return viewportIdVolumeInputArrayMapCopy;\n}\n","import OHIF from '@ohif/core';\nimport React from 'react';\nimport { ContextMenuMeasurements } from '@ohif/ui';\n\nimport * as cornerstone from '@cornerstonejs/core';\nimport * as cornerstoneTools from '@cornerstonejs/tools';\nimport {\n init as cs3DInit,\n eventTarget,\n EVENTS,\n metaData,\n volumeLoader,\n imageLoader,\n imageLoadPoolManager,\n Settings,\n} from '@cornerstonejs/core';\nimport { Enums, utilities, ReferenceLinesTool } from '@cornerstonejs/tools';\nimport {\n cornerstoneStreamingImageVolumeLoader,\n sharedArrayBufferImageLoader,\n} from '@cornerstonejs/streaming-image-volume-loader';\n\nimport initWADOImageLoader from './initWADOImageLoader';\nimport initCornerstoneTools from './initCornerstoneTools';\n\nimport { connectToolsToMeasurementService } from './initMeasurementService';\nimport callInputDialog from './utils/callInputDialog';\nimport initCineService from './initCineService';\nimport interleaveCenterLoader from './utils/interleaveCenterLoader';\nimport interleaveTopToBottom from './utils/interleaveTopToBottom';\n\nconst cs3DToolsEvents = Enums.Events;\n\nlet CONTEXT_MENU_OPEN = false;\n\n// TODO: Cypress tests are currently grabbing this from the window?\nwindow.cornerstone = cornerstone;\nwindow.cornerstoneTools = cornerstoneTools;\n/**\n *\n */\nexport default async function init({\n servicesManager,\n commandsManager,\n configuration,\n appConfig,\n}) {\n await cs3DInit();\n\n // For debugging e2e tests that are failing on CI\n cornerstone.setUseCPURendering(Boolean(appConfig.useCPURendering));\n\n // For debugging large datasets\n const MAX_CACHE_SIZE_1GB = 1073741824;\n const maxCacheSize = appConfig.maxCacheSize;\n cornerstone.cache.setMaxCacheSize(\n maxCacheSize ? maxCacheSize : MAX_CACHE_SIZE_1GB\n );\n\n initCornerstoneTools();\n\n Settings.getRuntimeSettings().set(\n 'useCursors',\n Boolean(appConfig.useCursors)\n );\n\n const {\n UserAuthenticationService,\n MeasurementService,\n DisplaySetService,\n UIDialogService,\n UIModalService,\n CineService,\n CornerstoneViewportService,\n HangingProtocolService,\n ToolGroupService,\n SegmentationService,\n ViewportGridService,\n } = servicesManager.services;\n\n window.SegmentationService = SegmentationService;\n window.DisplaySetService = DisplaySetService;\n window.services = servicesManager.services;\n\n if (cornerstone.getShouldUseCPURendering()) {\n _showCPURenderingModal(UIModalService, HangingProtocolService);\n }\n\n const labelmapRepresentation =\n cornerstoneTools.Enums.SegmentationRepresentations.Labelmap;\n\n cornerstoneTools.segmentation.config.setGlobalRepresentationConfig(\n labelmapRepresentation,\n {\n fillAlpha: 0.3,\n fillAlphaInactive: 0.2,\n outlineOpacity: 1,\n outlineOpacityInactive: 0.65,\n }\n );\n\n const metadataProvider = OHIF.classes.MetadataProvider;\n\n volumeLoader.registerVolumeLoader(\n 'cornerstoneStreamingImageVolume',\n cornerstoneStreamingImageVolumeLoader\n );\n\n HangingProtocolService.registerImageLoadStrategy(\n 'interleaveCenter',\n interleaveCenterLoader\n );\n HangingProtocolService.registerImageLoadStrategy(\n 'interleaveTopToBottom',\n interleaveTopToBottom\n );\n\n imageLoader.registerImageLoader(\n 'streaming-wadors',\n sharedArrayBufferImageLoader\n );\n\n metaData.addProvider(metadataProvider.get.bind(metadataProvider), 9999);\n\n imageLoadPoolManager.maxNumRequests = {\n interaction: appConfig?.maxNumRequests?.interaction || 100,\n thumbnail: appConfig?.maxNumRequests?.thumbnail || 75,\n prefetch: appConfig?.maxNumRequests?.prefetch || 10,\n };\n\n initWADOImageLoader(UserAuthenticationService, appConfig);\n\n /* Measurement Service */\n const measurementServiceSource = connectToolsToMeasurementService(\n MeasurementService,\n DisplaySetService,\n CornerstoneViewportService\n );\n\n initCineService(CineService);\n\n const _getDefaultPosition = event => ({\n x: (event && event.currentPoints.client[0]) || 0,\n y: (event && event.currentPoints.client[1]) || 0,\n });\n\n const onRightClick = event => {\n if (!UIDialogService) {\n console.warn('Unable to show dialog; no UI Dialog Service available.');\n return;\n }\n\n const onGetMenuItems = defaultMenuItems => {\n const { element, currentPoints } = event.detail;\n\n const nearbyToolData = utilities.getAnnotationNearPoint(\n element,\n currentPoints.canvas\n );\n\n const menuItems = [];\n if (nearbyToolData && nearbyToolData.metadata.toolName !== 'Crosshairs') {\n defaultMenuItems.forEach(item => {\n item.value = nearbyToolData;\n item.element = element;\n menuItems.push(item);\n });\n }\n\n return menuItems;\n };\n\n CONTEXT_MENU_OPEN = true;\n\n UIDialogService.dismiss({ id: 'context-menu' });\n UIDialogService.create({\n id: 'context-menu',\n isDraggable: false,\n preservePosition: false,\n defaultPosition: _getDefaultPosition(event.detail),\n content: ContextMenuMeasurements,\n onClickOutside: () => {\n UIDialogService.dismiss({ id: 'context-menu' });\n CONTEXT_MENU_OPEN = false;\n },\n contentProps: {\n onGetMenuItems,\n eventData: event.detail,\n onDelete: item => {\n const { annotationUID } = item.value;\n\n const uid = annotationUID;\n // Sync'd w/ Measurement Service\n if (uid) {\n measurementServiceSource.remove(uid, {\n element: item.element,\n });\n }\n CONTEXT_MENU_OPEN = false;\n },\n onClose: () => {\n CONTEXT_MENU_OPEN = false;\n UIDialogService.dismiss({ id: 'context-menu' });\n },\n onSetLabel: item => {\n const { annotationUID } = item.value;\n\n const measurement = MeasurementService.getMeasurement(annotationUID);\n\n callInputDialog(\n UIDialogService,\n measurement,\n (label, actionId) => {\n if (actionId === 'cancel') {\n return;\n }\n\n const updatedMeasurement = Object.assign({}, measurement, {\n label,\n });\n\n MeasurementService.update(\n updatedMeasurement.uid,\n updatedMeasurement,\n true\n );\n },\n false\n );\n\n CONTEXT_MENU_OPEN = false;\n },\n },\n });\n };\n\n const resetContextMenu = () => {\n if (!UIDialogService) {\n console.warn('Unable to show dialog; no UI Dialog Service available.');\n return;\n }\n\n CONTEXT_MENU_OPEN = false;\n\n UIDialogService.dismiss({ id: 'context-menu' });\n };\n\n // When a custom image load is performed, update the relevant viewports\n HangingProtocolService.subscribe(\n HangingProtocolService.EVENTS.CUSTOM_IMAGE_LOAD_PERFORMED,\n volumeInputArrayMap => {\n for (const entry of volumeInputArrayMap.entries()) {\n const [viewportId, volumeInputArray] = entry;\n const viewport = CornerstoneViewportService.getCornerstoneViewport(\n viewportId\n );\n\n CornerstoneViewportService.setVolumesForViewport(\n viewport,\n volumeInputArray\n );\n }\n }\n );\n\n /*\n * Because click gives us the native \"mouse up\", buttons will always be `0`\n * Need to fallback to event.which;\n *\n */\n const contextMenuHandleClick = evt => {\n const mouseUpEvent = evt.detail.event;\n const isRightClick = mouseUpEvent.which === 3;\n\n const clickMethodHandler = isRightClick ? onRightClick : resetContextMenu;\n clickMethodHandler(evt);\n };\n\n // const cancelContextMenuIfOpen = evt => {\n // if (CONTEXT_MENU_OPEN) {\n // resetContextMenu();\n // }\n // };\n\n const newStackCallback = evt => {\n const { element } = evt.detail;\n utilities.stackPrefetch.enable(element);\n };\n\n const resetCrosshairs = evt => {\n const { element } = evt.detail;\n const { viewportId, renderingEngineId } = cornerstone.getEnabledElement(\n element\n );\n\n const toolGroup = cornerstoneTools.ToolGroupManager.getToolGroupForViewport(\n viewportId,\n renderingEngineId\n );\n\n if (!toolGroup || !toolGroup._toolInstances?.['Crosshairs']) {\n return;\n }\n\n const mode = toolGroup._toolInstances['Crosshairs'].mode;\n\n if (mode === Enums.ToolModes.Active) {\n toolGroup.setToolActive('Crosshairs');\n } else if (mode === Enums.ToolModes.Passive) {\n toolGroup.setToolPassive('Crosshairs');\n } else if (mode === Enums.ToolModes.Enabled) {\n toolGroup.setToolEnabled('Crosshairs');\n }\n };\n\n function elementEnabledHandler(evt) {\n const { element } = evt.detail;\n\n element.addEventListener(\n cs3DToolsEvents.MOUSE_CLICK,\n contextMenuHandleClick\n );\n\n element.addEventListener(EVENTS.CAMERA_RESET, resetCrosshairs);\n\n eventTarget.addEventListener(\n EVENTS.STACK_VIEWPORT_NEW_STACK,\n newStackCallback\n );\n }\n\n function elementDisabledHandler(evt) {\n const { element } = evt.detail;\n\n element.removeEventListener(\n cs3DToolsEvents.MOUSE_CLICK,\n contextMenuHandleClick\n );\n\n element.removeEventListener(EVENTS.CAMERA_RESET, resetCrosshairs);\n\n // TODO - consider removing the callback when all elements are gone\n // eventTarget.removeEventListener(\n // EVENTS.STACK_VIEWPORT_NEW_STACK,\n // newStackCallback\n // );\n }\n\n eventTarget.addEventListener(\n EVENTS.ELEMENT_ENABLED,\n elementEnabledHandler.bind(null)\n );\n\n eventTarget.addEventListener(\n EVENTS.ELEMENT_DISABLED,\n elementDisabledHandler.bind(null)\n );\n\n ViewportGridService.subscribe(\n ViewportGridService.EVENTS.ACTIVE_VIEWPORT_INDEX_CHANGED,\n ({ viewportIndex }) => {\n const viewportId = `viewport-${viewportIndex}`;\n const toolGroup = ToolGroupService.getToolGroupForViewport(viewportId);\n\n if (!toolGroup) {\n return;\n }\n\n // check if reference lines are active\n const referenceLinesEnabled =\n toolGroup._toolInstances?.['ReferenceLines']?.mode ===\n Enums.ToolModes.Enabled;\n\n if (!referenceLinesEnabled) {\n return;\n }\n\n toolGroup.setToolConfiguration(\n ReferenceLinesTool.toolName,\n {\n sourceViewportId: viewportId,\n },\n true // overwrite\n );\n\n // make sure to set it to enabled again since we want to recalculate\n // the source-target lines\n toolGroup.setToolEnabled(ReferenceLinesTool.toolName);\n }\n );\n}\n\nfunction CPUModal() {\n return (\n
\n

\n Your computer does not have enough GPU power to support the default GPU\n rendering mode. OHIF has switched to CPU rendering mode. Please note\n that CPU rendering does not support all features such as Volume\n Rendering, Multiplanar Reconstruction, and Segmentation Overlays.\n

\n
\n );\n}\n\nfunction _showCPURenderingModal(UIModalService, HangingProtocolService) {\n const callback = progress => {\n if (progress === 100) {\n UIModalService.show({\n content: CPUModal,\n title: 'OHIF Fell Back to CPU Rendering',\n });\n\n return true;\n }\n };\n\n const { unsubscribe } = HangingProtocolService.subscribe(\n HangingProtocolService.EVENTS.HANGING_PROTOCOL_APPLIED_FOR_VIEWPORT,\n ({ progress }) => {\n const done = callback(progress);\n\n if (done) {\n unsubscribe();\n }\n }\n );\n}\n","/*!\n * html2canvas 1.4.1 \n * Copyright (c) 2022 Niklas von Hertzen \n * Released under MIT License\n */\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nfunction __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nfunction __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || from);\r\n}\n\nvar Bounds = /** @class */ (function () {\n function Bounds(left, top, width, height) {\n this.left = left;\n this.top = top;\n this.width = width;\n this.height = height;\n }\n Bounds.prototype.add = function (x, y, w, h) {\n return new Bounds(this.left + x, this.top + y, this.width + w, this.height + h);\n };\n Bounds.fromClientRect = function (context, clientRect) {\n return new Bounds(clientRect.left + context.windowBounds.left, clientRect.top + context.windowBounds.top, clientRect.width, clientRect.height);\n };\n Bounds.fromDOMRectList = function (context, domRectList) {\n var domRect = Array.from(domRectList).find(function (rect) { return rect.width !== 0; });\n return domRect\n ? new Bounds(domRect.left + context.windowBounds.left, domRect.top + context.windowBounds.top, domRect.width, domRect.height)\n : Bounds.EMPTY;\n };\n Bounds.EMPTY = new Bounds(0, 0, 0, 0);\n return Bounds;\n}());\nvar parseBounds = function (context, node) {\n return Bounds.fromClientRect(context, node.getBoundingClientRect());\n};\nvar parseDocumentSize = function (document) {\n var body = document.body;\n var documentElement = document.documentElement;\n if (!body || !documentElement) {\n throw new Error(\"Unable to get document size\");\n }\n var width = Math.max(Math.max(body.scrollWidth, documentElement.scrollWidth), Math.max(body.offsetWidth, documentElement.offsetWidth), Math.max(body.clientWidth, documentElement.clientWidth));\n var height = Math.max(Math.max(body.scrollHeight, documentElement.scrollHeight), Math.max(body.offsetHeight, documentElement.offsetHeight), Math.max(body.clientHeight, documentElement.clientHeight));\n return new Bounds(0, 0, width, height);\n};\n\n/*\n * css-line-break 2.1.0 \n * Copyright (c) 2022 Niklas von Hertzen \n * Released under MIT License\n */\nvar toCodePoints$1 = function (str) {\n var codePoints = [];\n var i = 0;\n var length = str.length;\n while (i < length) {\n var value = str.charCodeAt(i++);\n if (value >= 0xd800 && value <= 0xdbff && i < length) {\n var extra = str.charCodeAt(i++);\n if ((extra & 0xfc00) === 0xdc00) {\n codePoints.push(((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000);\n }\n else {\n codePoints.push(value);\n i--;\n }\n }\n else {\n codePoints.push(value);\n }\n }\n return codePoints;\n};\nvar fromCodePoint$1 = function () {\n var codePoints = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n codePoints[_i] = arguments[_i];\n }\n if (String.fromCodePoint) {\n return String.fromCodePoint.apply(String, codePoints);\n }\n var length = codePoints.length;\n if (!length) {\n return '';\n }\n var codeUnits = [];\n var index = -1;\n var result = '';\n while (++index < length) {\n var codePoint = codePoints[index];\n if (codePoint <= 0xffff) {\n codeUnits.push(codePoint);\n }\n else {\n codePoint -= 0x10000;\n codeUnits.push((codePoint >> 10) + 0xd800, (codePoint % 0x400) + 0xdc00);\n }\n if (index + 1 === length || codeUnits.length > 0x4000) {\n result += String.fromCharCode.apply(String, codeUnits);\n codeUnits.length = 0;\n }\n }\n return result;\n};\nvar chars$2 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nvar lookup$2 = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (var i$2 = 0; i$2 < chars$2.length; i$2++) {\n lookup$2[chars$2.charCodeAt(i$2)] = i$2;\n}\n\n/*\n * utrie 1.0.2 \n * Copyright (c) 2022 Niklas von Hertzen \n * Released under MIT License\n */\nvar chars$1$1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nvar lookup$1$1 = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (var i$1$1 = 0; i$1$1 < chars$1$1.length; i$1$1++) {\n lookup$1$1[chars$1$1.charCodeAt(i$1$1)] = i$1$1;\n}\nvar decode$1 = function (base64) {\n var bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;\n if (base64[base64.length - 1] === '=') {\n bufferLength--;\n if (base64[base64.length - 2] === '=') {\n bufferLength--;\n }\n }\n var buffer = typeof ArrayBuffer !== 'undefined' &&\n typeof Uint8Array !== 'undefined' &&\n typeof Uint8Array.prototype.slice !== 'undefined'\n ? new ArrayBuffer(bufferLength)\n : new Array(bufferLength);\n var bytes = Array.isArray(buffer) ? buffer : new Uint8Array(buffer);\n for (i = 0; i < len; i += 4) {\n encoded1 = lookup$1$1[base64.charCodeAt(i)];\n encoded2 = lookup$1$1[base64.charCodeAt(i + 1)];\n encoded3 = lookup$1$1[base64.charCodeAt(i + 2)];\n encoded4 = lookup$1$1[base64.charCodeAt(i + 3)];\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n return buffer;\n};\nvar polyUint16Array$1 = function (buffer) {\n var length = buffer.length;\n var bytes = [];\n for (var i = 0; i < length; i += 2) {\n bytes.push((buffer[i + 1] << 8) | buffer[i]);\n }\n return bytes;\n};\nvar polyUint32Array$1 = function (buffer) {\n var length = buffer.length;\n var bytes = [];\n for (var i = 0; i < length; i += 4) {\n bytes.push((buffer[i + 3] << 24) | (buffer[i + 2] << 16) | (buffer[i + 1] << 8) | buffer[i]);\n }\n return bytes;\n};\n\n/** Shift size for getting the index-2 table offset. */\nvar UTRIE2_SHIFT_2$1 = 5;\n/** Shift size for getting the index-1 table offset. */\nvar UTRIE2_SHIFT_1$1 = 6 + 5;\n/**\n * Shift size for shifting left the index array values.\n * Increases possible data size with 16-bit index values at the cost\n * of compactability.\n * This requires data blocks to be aligned by UTRIE2_DATA_GRANULARITY.\n */\nvar UTRIE2_INDEX_SHIFT$1 = 2;\n/**\n * Difference between the two shift sizes,\n * for getting an index-1 offset from an index-2 offset. 6=11-5\n */\nvar UTRIE2_SHIFT_1_2$1 = UTRIE2_SHIFT_1$1 - UTRIE2_SHIFT_2$1;\n/**\n * The part of the index-2 table for U+D800..U+DBFF stores values for\n * lead surrogate code _units_ not code _points_.\n * Values for lead surrogate code _points_ are indexed with this portion of the table.\n * Length=32=0x20=0x400>>UTRIE2_SHIFT_2. (There are 1024=0x400 lead surrogates.)\n */\nvar UTRIE2_LSCP_INDEX_2_OFFSET$1 = 0x10000 >> UTRIE2_SHIFT_2$1;\n/** Number of entries in a data block. 32=0x20 */\nvar UTRIE2_DATA_BLOCK_LENGTH$1 = 1 << UTRIE2_SHIFT_2$1;\n/** Mask for getting the lower bits for the in-data-block offset. */\nvar UTRIE2_DATA_MASK$1 = UTRIE2_DATA_BLOCK_LENGTH$1 - 1;\nvar UTRIE2_LSCP_INDEX_2_LENGTH$1 = 0x400 >> UTRIE2_SHIFT_2$1;\n/** Count the lengths of both BMP pieces. 2080=0x820 */\nvar UTRIE2_INDEX_2_BMP_LENGTH$1 = UTRIE2_LSCP_INDEX_2_OFFSET$1 + UTRIE2_LSCP_INDEX_2_LENGTH$1;\n/**\n * The 2-byte UTF-8 version of the index-2 table follows at offset 2080=0x820.\n * Length 32=0x20 for lead bytes C0..DF, regardless of UTRIE2_SHIFT_2.\n */\nvar UTRIE2_UTF8_2B_INDEX_2_OFFSET$1 = UTRIE2_INDEX_2_BMP_LENGTH$1;\nvar UTRIE2_UTF8_2B_INDEX_2_LENGTH$1 = 0x800 >> 6; /* U+0800 is the first code point after 2-byte UTF-8 */\n/**\n * The index-1 table, only used for supplementary code points, at offset 2112=0x840.\n * Variable length, for code points up to highStart, where the last single-value range starts.\n * Maximum length 512=0x200=0x100000>>UTRIE2_SHIFT_1.\n * (For 0x100000 supplementary code points U+10000..U+10ffff.)\n *\n * The part of the index-2 table for supplementary code points starts\n * after this index-1 table.\n *\n * Both the index-1 table and the following part of the index-2 table\n * are omitted completely if there is only BMP data.\n */\nvar UTRIE2_INDEX_1_OFFSET$1 = UTRIE2_UTF8_2B_INDEX_2_OFFSET$1 + UTRIE2_UTF8_2B_INDEX_2_LENGTH$1;\n/**\n * Number of index-1 entries for the BMP. 32=0x20\n * This part of the index-1 table is omitted from the serialized form.\n */\nvar UTRIE2_OMITTED_BMP_INDEX_1_LENGTH$1 = 0x10000 >> UTRIE2_SHIFT_1$1;\n/** Number of entries in an index-2 block. 64=0x40 */\nvar UTRIE2_INDEX_2_BLOCK_LENGTH$1 = 1 << UTRIE2_SHIFT_1_2$1;\n/** Mask for getting the lower bits for the in-index-2-block offset. */\nvar UTRIE2_INDEX_2_MASK$1 = UTRIE2_INDEX_2_BLOCK_LENGTH$1 - 1;\nvar slice16$1 = function (view, start, end) {\n if (view.slice) {\n return view.slice(start, end);\n }\n return new Uint16Array(Array.prototype.slice.call(view, start, end));\n};\nvar slice32$1 = function (view, start, end) {\n if (view.slice) {\n return view.slice(start, end);\n }\n return new Uint32Array(Array.prototype.slice.call(view, start, end));\n};\nvar createTrieFromBase64$1 = function (base64, _byteLength) {\n var buffer = decode$1(base64);\n var view32 = Array.isArray(buffer) ? polyUint32Array$1(buffer) : new Uint32Array(buffer);\n var view16 = Array.isArray(buffer) ? polyUint16Array$1(buffer) : new Uint16Array(buffer);\n var headerLength = 24;\n var index = slice16$1(view16, headerLength / 2, view32[4] / 2);\n var data = view32[5] === 2\n ? slice16$1(view16, (headerLength + view32[4]) / 2)\n : slice32$1(view32, Math.ceil((headerLength + view32[4]) / 4));\n return new Trie$1(view32[0], view32[1], view32[2], view32[3], index, data);\n};\nvar Trie$1 = /** @class */ (function () {\n function Trie(initialValue, errorValue, highStart, highValueIndex, index, data) {\n this.initialValue = initialValue;\n this.errorValue = errorValue;\n this.highStart = highStart;\n this.highValueIndex = highValueIndex;\n this.index = index;\n this.data = data;\n }\n /**\n * Get the value for a code point as stored in the Trie.\n *\n * @param codePoint the code point\n * @return the value\n */\n Trie.prototype.get = function (codePoint) {\n var ix;\n if (codePoint >= 0) {\n if (codePoint < 0x0d800 || (codePoint > 0x0dbff && codePoint <= 0x0ffff)) {\n // Ordinary BMP code point, excluding leading surrogates.\n // BMP uses a single level lookup. BMP index starts at offset 0 in the Trie2 index.\n // 16 bit data is stored in the index array itself.\n ix = this.index[codePoint >> UTRIE2_SHIFT_2$1];\n ix = (ix << UTRIE2_INDEX_SHIFT$1) + (codePoint & UTRIE2_DATA_MASK$1);\n return this.data[ix];\n }\n if (codePoint <= 0xffff) {\n // Lead Surrogate Code Point. A Separate index section is stored for\n // lead surrogate code units and code points.\n // The main index has the code unit data.\n // For this function, we need the code point data.\n // Note: this expression could be refactored for slightly improved efficiency, but\n // surrogate code points will be so rare in practice that it's not worth it.\n ix = this.index[UTRIE2_LSCP_INDEX_2_OFFSET$1 + ((codePoint - 0xd800) >> UTRIE2_SHIFT_2$1)];\n ix = (ix << UTRIE2_INDEX_SHIFT$1) + (codePoint & UTRIE2_DATA_MASK$1);\n return this.data[ix];\n }\n if (codePoint < this.highStart) {\n // Supplemental code point, use two-level lookup.\n ix = UTRIE2_INDEX_1_OFFSET$1 - UTRIE2_OMITTED_BMP_INDEX_1_LENGTH$1 + (codePoint >> UTRIE2_SHIFT_1$1);\n ix = this.index[ix];\n ix += (codePoint >> UTRIE2_SHIFT_2$1) & UTRIE2_INDEX_2_MASK$1;\n ix = this.index[ix];\n ix = (ix << UTRIE2_INDEX_SHIFT$1) + (codePoint & UTRIE2_DATA_MASK$1);\n return this.data[ix];\n }\n if (codePoint <= 0x10ffff) {\n return this.data[this.highValueIndex];\n }\n }\n // Fall through. The code point is outside of the legal range of 0..0x10ffff.\n return this.errorValue;\n };\n return Trie;\n}());\n\n/*\n * base64-arraybuffer 1.0.2 \n * Copyright (c) 2022 Niklas von Hertzen \n * Released under MIT License\n */\nvar chars$3 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nvar lookup$3 = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (var i$3 = 0; i$3 < chars$3.length; i$3++) {\n lookup$3[chars$3.charCodeAt(i$3)] = i$3;\n}\n\nvar base64$1 = 'KwAAAAAAAAAACA4AUD0AADAgAAACAAAAAAAIABAAGABAAEgAUABYAGAAaABgAGgAYgBqAF8AZwBgAGgAcQB5AHUAfQCFAI0AlQCdAKIAqgCyALoAYABoAGAAaABgAGgAwgDKAGAAaADGAM4A0wDbAOEA6QDxAPkAAQEJAQ8BFwF1AH0AHAEkASwBNAE6AUIBQQFJAVEBWQFhAWgBcAF4ATAAgAGGAY4BlQGXAZ8BpwGvAbUBvQHFAc0B0wHbAeMB6wHxAfkBAQIJAvEBEQIZAiECKQIxAjgCQAJGAk4CVgJeAmQCbAJ0AnwCgQKJApECmQKgAqgCsAK4ArwCxAIwAMwC0wLbAjAA4wLrAvMC+AIAAwcDDwMwABcDHQMlAy0DNQN1AD0DQQNJA0kDSQNRA1EDVwNZA1kDdQB1AGEDdQBpA20DdQN1AHsDdQCBA4kDkQN1AHUAmQOhA3UAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AKYDrgN1AHUAtgO+A8YDzgPWAxcD3gPjA+sD8wN1AHUA+wMDBAkEdQANBBUEHQQlBCoEFwMyBDgEYABABBcDSARQBFgEYARoBDAAcAQzAXgEgASIBJAEdQCXBHUAnwSnBK4EtgS6BMIEyAR1AHUAdQB1AHUAdQCVANAEYABgAGAAYABgAGAAYABgANgEYADcBOQEYADsBPQE/AQEBQwFFAUcBSQFLAU0BWQEPAVEBUsFUwVbBWAAYgVgAGoFcgV6BYIFigWRBWAAmQWfBaYFYABgAGAAYABgAKoFYACxBbAFuQW6BcEFwQXHBcEFwQXPBdMF2wXjBeoF8gX6BQIGCgYSBhoGIgYqBjIGOgZgAD4GRgZMBmAAUwZaBmAAYABgAGAAYABgAGAAYABgAGAAYABgAGIGYABpBnAGYABgAGAAYABgAGAAYABgAGAAYAB4Bn8GhQZgAGAAYAB1AHcDFQSLBmAAYABgAJMGdQA9A3UAmwajBqsGqwaVALMGuwbDBjAAywbSBtIG1QbSBtIG0gbSBtIG0gbdBuMG6wbzBvsGAwcLBxMHAwcbByMHJwcsBywHMQcsB9IGOAdAB0gHTgfSBkgHVgfSBtIG0gbSBtIG0gbSBtIG0gbSBiwHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAdgAGAALAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAdbB2MHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsB2kH0gZwB64EdQB1AHUAdQB1AHUAdQB1AHUHfQdgAIUHjQd1AHUAlQedB2AAYAClB6sHYACzB7YHvgfGB3UAzgfWBzMB3gfmB1EB7gf1B/0HlQENAQUIDQh1ABUIHQglCBcDLQg1CD0IRQhNCEEDUwh1AHUAdQBbCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIcAh3CHoIMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIgggwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAALAcsBywHLAcsBywHLAcsBywHLAcsB4oILAcsB44I0gaWCJ4Ipgh1AHUAqgiyCHUAdQB1AHUAdQB1AHUAdQB1AHUAtwh8AXUAvwh1AMUIyQjRCNkI4AjoCHUAdQB1AO4I9gj+CAYJDgkTCS0HGwkjCYIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiAAIAAAAFAAYABgAGIAXwBgAHEAdQBFAJUAogCyAKAAYABgAEIA4ABGANMA4QDxAMEBDwE1AFwBLAE6AQEBUQF4QkhCmEKoQrhCgAHIQsAB0MLAAcABwAHAAeDC6ABoAHDCwMMAAcABwAHAAdDDGMMAAcAB6MM4wwjDWMNow3jDaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAEjDqABWw6bDqABpg6gAaABoAHcDvwOPA+gAaABfA/8DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DpcPAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcAB9cPKwkyCToJMAB1AHUAdQBCCUoJTQl1AFUJXAljCWcJawkwADAAMAAwAHMJdQB2CX4JdQCECYoJjgmWCXUAngkwAGAAYABxAHUApgn3A64JtAl1ALkJdQDACTAAMAAwADAAdQB1AHUAdQB1AHUAdQB1AHUAowYNBMUIMAAwADAAMADICcsJ0wnZCRUE4QkwAOkJ8An4CTAAMAB1AAAKvwh1AAgKDwoXCh8KdQAwACcKLgp1ADYKqAmICT4KRgowADAAdQB1AE4KMAB1AFYKdQBeCnUAZQowADAAMAAwADAAMAAwADAAMAAVBHUAbQowADAAdQC5CXUKMAAwAHwBxAijBogEMgF9CoQKiASMCpQKmgqIBKIKqgquCogEDQG2Cr4KxgrLCjAAMADTCtsKCgHjCusK8Qr5CgELMAAwADAAMAB1AIsECQsRC3UANAEZCzAAMAAwADAAMAB1ACELKQswAHUANAExCzkLdQBBC0kLMABRC1kLMAAwADAAMAAwADAAdQBhCzAAMAAwAGAAYABpC3ELdwt/CzAAMACHC4sLkwubC58Lpwt1AK4Ltgt1APsDMAAwADAAMAAwADAAMAAwAL4LwwvLC9IL1wvdCzAAMADlC+kL8Qv5C/8LSQswADAAMAAwADAAMAAwADAAMAAHDDAAMAAwADAAMAAODBYMHgx1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1ACYMMAAwADAAdQB1AHUALgx1AHUAdQB1AHUAdQA2DDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AD4MdQBGDHUAdQB1AHUAdQB1AEkMdQB1AHUAdQB1AFAMMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQBYDHUAdQB1AF8MMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUA+wMVBGcMMAAwAHwBbwx1AHcMfwyHDI8MMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAYABgAJcMMAAwADAAdQB1AJ8MlQClDDAAMACtDCwHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsB7UMLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AA0EMAC9DDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAsBywHLAcsBywHLAcsBywHLQcwAMEMyAwsBywHLAcsBywHLAcsBywHLAcsBywHzAwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1ANQM2QzhDDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMABgAGAAYABgAGAAYABgAOkMYADxDGAA+AwADQYNYABhCWAAYAAODTAAMAAwADAAFg1gAGAAHg37AzAAMAAwADAAYABgACYNYAAsDTQNPA1gAEMNPg1LDWAAYABgAGAAYABgAGAAYABgAGAAUg1aDYsGVglhDV0NcQBnDW0NdQ15DWAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAlQCBDZUAiA2PDZcNMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAnw2nDTAAMAAwADAAMAAwAHUArw23DTAAMAAwADAAMAAwADAAMAAwADAAMAB1AL8NMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAB1AHUAdQB1AHUAdQDHDTAAYABgAM8NMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAA1w11ANwNMAAwAD0B5A0wADAAMAAwADAAMADsDfQN/A0EDgwOFA4wABsOMAAwADAAMAAwADAAMAAwANIG0gbSBtIG0gbSBtIG0gYjDigOwQUuDsEFMw7SBjoO0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGQg5KDlIOVg7SBtIGXg5lDm0OdQ7SBtIGfQ6EDooOjQ6UDtIGmg6hDtIG0gaoDqwO0ga0DrwO0gZgAGAAYADEDmAAYAAkBtIGzA5gANIOYADaDokO0gbSBt8O5w7SBu8O0gb1DvwO0gZgAGAAxA7SBtIG0gbSBtIGYABgAGAAYAAED2AAsAUMD9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGFA8sBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAccD9IGLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHJA8sBywHLAcsBywHLAccDywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywPLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAc0D9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAccD9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGFA8sBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHPA/SBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gYUD0QPlQCVAJUAMAAwADAAMACVAJUAlQCVAJUAlQCVAEwPMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAA//8EAAQABAAEAAQABAAEAAQABAANAAMAAQABAAIABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQACgATABcAHgAbABoAHgAXABYAEgAeABsAGAAPABgAHABLAEsASwBLAEsASwBLAEsASwBLABgAGAAeAB4AHgATAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYAGwASAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAWAA0AEQAeAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAFAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJABYAGgAbABsAGwAeAB0AHQAeAE8AFwAeAA0AHgAeABoAGwBPAE8ADgBQAB0AHQAdAE8ATwAXAE8ATwBPABYAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAFAATwBAAE8ATwBPAEAATwBQAFAATwBQAB4AHgAeAB4AHgAeAB0AHQAdAB0AHgAdAB4ADgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgBQAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkACQAJAAkACQAJAAkABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAFAAHgAeAB4AKwArAFAAUABQAFAAGABQACsAKwArACsAHgAeAFAAHgBQAFAAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUAAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAYAA0AKwArAB4AHgAbACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAB4ABAAEAB4ABAAEABMABAArACsAKwArACsAKwArACsAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAKwArACsAKwBWAFYAVgBWAB4AHgArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AGgAaABoAGAAYAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQAEwAEACsAEwATAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABLAEsASwBLAEsASwBLAEsASwBLABoAGQAZAB4AUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABMAUAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABABQAFAABAAEAB4ABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUAAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAFAABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQAUABQAB4AHgAYABMAUAArACsABAAbABsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAFAABAAEAAQABAAEAFAABAAEAAQAUAAEAAQABAAEAAQAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArACsAHgArAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAUAAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEAA0ADQBLAEsASwBLAEsASwBLAEsASwBLAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUAArACsAKwBQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABABQACsAKwArACsAKwArACsAKwAEACsAKwArACsAUABQACsAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUAAaABoAUABQAFAAUABQAEwAHgAbAFAAHgAEACsAKwAEAAQABAArAFAAUABQAFAAUABQACsAKwArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQACsAUABQACsAKwAEACsABAAEAAQABAAEACsAKwArACsABAAEACsAKwAEAAQABAArACsAKwAEACsAKwArACsAKwArACsAUABQAFAAUAArAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLAAQABABQAFAAUAAEAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAArACsAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAB4AGwArACsAKwArACsAKwArAFAABAAEAAQABAAEAAQAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAKwArACsAKwArAAQABAAEACsAKwArACsAUABQACsAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAB4AUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAAQAUAArAFAAUABQAFAAUABQACsAKwArAFAAUABQACsAUABQAFAAUAArACsAKwBQAFAAKwBQACsAUABQACsAKwArAFAAUAArACsAKwBQAFAAUAArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAAQABAAEAAQABAArACsAKwAEAAQABAArAAQABAAEAAQAKwArAFAAKwArACsAKwArACsABAArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAHgAeAB4AHgAeAB4AGwAeACsAKwArACsAKwAEAAQABAAEAAQAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAUAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAAEACsAKwArACsAKwArACsABAAEACsAUABQAFAAKwArACsAKwArAFAAUAAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwAOAFAAUABQAFAAUABQAFAAHgBQAAQABAAEAA4AUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAKwArAAQAUAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAAEACsAKwArACsAKwArACsABAAEACsAKwArACsAKwArACsAUAArAFAAUAAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwBQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABABQAB4AKwArACsAKwBQAFAAUAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQABoAUABQAFAAUABQAFAAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQACsAUAArACsAUABQAFAAUABQAFAAUAArACsAKwAEACsAKwArACsABAAEAAQABAAEAAQAKwAEACsABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgAqACsAKwArACsAGwBcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAeAEsASwBLAEsASwBLAEsASwBLAEsADQANACsAKwArACsAKwBcAFwAKwBcACsAXABcAFwAXABcACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAXAArAFwAXABcAFwAXABcAFwAXABcAFwAKgBcAFwAKgAqACoAKgAqACoAKgAqACoAXAArACsAXABcAFwAXABcACsAXAArACoAKgAqACoAKgAqACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwBcAFwAXABcAFAADgAOAA4ADgAeAA4ADgAJAA4ADgANAAkAEwATABMAEwATAAkAHgATAB4AHgAeAAQABAAeAB4AHgAeAB4AHgBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQAFAADQAEAB4ABAAeAAQAFgARABYAEQAEAAQAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAAQABAAEAAQADQAEAAQAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAA0ADQAeAB4AHgAeAB4AHgAEAB4AHgAeAB4AHgAeACsAHgAeAA4ADgANAA4AHgAeAB4AHgAeAAkACQArACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgBcAEsASwBLAEsASwBLAEsASwBLAEsADQANAB4AHgAeAB4AXABcAFwAXABcAFwAKgAqACoAKgBcAFwAXABcACoAKgAqAFwAKgAqACoAXABcACoAKgAqACoAKgAqACoAXABcAFwAKgAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKgAqAFwAKgBLAEsASwBLAEsASwBLAEsASwBLACoAKgAqACoAKgAqAFAAUABQAFAAUABQACsAUAArACsAKwArACsAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgBQAFAAUABQAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAKwBQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsABAAEAAQAHgANAB4AHgAeAB4AHgAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUAArACsADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAWABEAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAA0ADQANAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAANAA0AKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUAArAAQABAArACsAKwArACsAKwArACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqAA0ADQAVAFwADQAeAA0AGwBcACoAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwAeAB4AEwATAA0ADQAOAB4AEwATAB4ABAAEAAQACQArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUAAEAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAHgArACsAKwATABMASwBLAEsASwBLAEsASwBLAEsASwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAXABcAFwAXABcACsAKwArACsAKwArACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAXAArACsAKwAqACoAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsAHgAeAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKwAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKwArAAQASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACoAKgAqACoAKgAqACoAXAAqACoAKgAqACoAKgArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABABQAFAAUABQAFAAUABQACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwANAA0AHgANAA0ADQANAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AKwArACsABAAEAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwAeAB4AHgAeAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArAA0ADQANAA0ADQBLAEsASwBLAEsASwBLAEsASwBLACsAKwArAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAA0ADQBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUAAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArAAQABAAEAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAAQAUABQAFAAUABQAFAABABQAFAABAAEAAQAUAArACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAKwBQACsAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQACsAKwAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQACsAHgAeAB4AHgAeAB4AHgAOAB4AKwANAA0ADQANAA0ADQANAAkADQANAA0ACAAEAAsABAAEAA0ACQANAA0ADAAdAB0AHgAXABcAFgAXABcAFwAWABcAHQAdAB4AHgAUABQAFAANAAEAAQAEAAQABAAEAAQACQAaABoAGgAaABoAGgAaABoAHgAXABcAHQAVABUAHgAeAB4AHgAeAB4AGAAWABEAFQAVABUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ADQAeAA0ADQANAA0AHgANAA0ADQAHAB4AHgAeAB4AKwAEAAQABAAEAAQABAAEAAQABAAEAFAAUAArACsATwBQAFAAUABQAFAAHgAeAB4AFgARAE8AUABPAE8ATwBPAFAAUABQAFAAUAAeAB4AHgAWABEAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArABsAGwAbABsAGwAbABsAGgAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGgAbABsAGwAbABoAGwAbABoAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAHgAeAFAAGgAeAB0AHgBQAB4AGgAeAB4AHgAeAB4AHgAeAB4AHgBPAB4AUAAbAB4AHgBQAFAAUABQAFAAHgAeAB4AHQAdAB4AUAAeAFAAHgBQAB4AUABPAFAAUAAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAHgBQAFAAUABQAE8ATwBQAFAAUABQAFAATwBQAFAATwBQAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAFAAUABQAFAATwBPAE8ATwBPAE8ATwBPAE8ATwBQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABPAB4AHgArACsAKwArAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHQAdAB4AHgAeAB0AHQAeAB4AHQAeAB4AHgAdAB4AHQAbABsAHgAdAB4AHgAeAB4AHQAeAB4AHQAdAB0AHQAeAB4AHQAeAB0AHgAdAB0AHQAdAB0AHQAeAB0AHgAeAB4AHgAeAB0AHQAdAB0AHgAeAB4AHgAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB0AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAdAB0AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAWABEAHgAeAB4AHgAeAB4AHQAeAB4AHgAeAB4AHgAeACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAFAAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeAB4AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AHQAdAB0AHgAeAB0AHgAeAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlAB4AHQAdAB4AHgAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AJQAlAB0AHQAlAB4AJQAlACUAIAAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAeAB4AHgAeAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAdAB0AHQAeAB0AJQAdAB0AHgAdAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAdAB0AHQAdACUAHgAlACUAJQAdACUAJQAdAB0AHQAlACUAHQAdACUAHQAdACUAJQAlAB4AHQAeAB4AHgAeAB0AHQAlAB0AHQAdAB0AHQAdACUAJQAlACUAJQAdACUAJQAgACUAHQAdACUAJQAlACUAJQAlACUAJQAeAB4AHgAlACUAIAAgACAAIAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AFwAXABcAFwAXABcAHgATABMAJQAeAB4AHgAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARABYAEQAWABEAFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAeAB4AKwArACsAKwArABMADQANAA0AUAATAA0AUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUAANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAA0ADQANAA0ADQANAA0ADQAeAA0AFgANAB4AHgAXABcAHgAeABcAFwAWABEAFgARABYAEQAWABEADQANAA0ADQATAFAADQANAB4ADQANAB4AHgAeAB4AHgAMAAwADQANAA0AHgANAA0AFgANAA0ADQANAA0ADQANAA0AHgANAB4ADQANAB4AHgAeACsAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArAA0AEQARACUAJQBHAFcAVwAWABEAFgARABYAEQAWABEAFgARACUAJQAWABEAFgARABYAEQAWABEAFQAWABEAEQAlAFcAVwBXAFcAVwBXAFcAVwBXAAQABAAEAAQABAAEACUAVwBXAFcAVwA2ACUAJQBXAFcAVwBHAEcAJQAlACUAKwBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBRAFcAUQBXAFEAVwBXAFcAVwBXAFcAUQBXAFcAVwBXAFcAVwBRAFEAKwArAAQABAAVABUARwBHAFcAFQBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBRAFcAVwBXAFcAVwBXAFEAUQBXAFcAVwBXABUAUQBHAEcAVwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwAlACUAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACsAKwArACsAKwArACsAKwArACsAKwArAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBPAE8ATwBPAE8ATwBPAE8AJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADQATAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQAHgBQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAeAA0ADQANAA0ADQArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAAQAUABQAFAABABQAFAAUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAeAB4AHgAeAAQAKwArACsAUABQAFAAUABQAFAAHgAeABoAHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADgAOABMAEwArACsAKwArACsAKwArACsABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUAAeAB4AHgBQAA4AUABQAAQAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAB4AWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYACsAKwArAAQAHgAeAB4AHgAeAB4ADQANAA0AHgAeAB4AHgArAFAASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArAB4AHgBcAFwAXABcAFwAKgBcAFwAXABcAFwAXABcAFwAXABcAEsASwBLAEsASwBLAEsASwBLAEsAXABcAFwAXABcACsAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAFAAUABQAAQAUABQAFAAUABQAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAHgANAA0ADQBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAKgAqACoAXABcACoAKgBcAFwAXABcAFwAKgAqAFwAKgBcACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAA0ADQBQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQADQAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAVABVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBUAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVACsAKwArACsAKwArACsAKwArACsAKwArAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAKwArACsAKwBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAKwArACsAKwAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArACsAKwArAFYABABWAFYAVgBWAFYAVgBWAFYAVgBWAB4AVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgArAFYAVgBWAFYAVgArAFYAKwBWAFYAKwBWAFYAKwBWAFYAVgBWAFYAVgBWAFYAVgBWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAEQAWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAaAB4AKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAGAARABEAGAAYABMAEwAWABEAFAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACUAJQAlACUAJQAWABEAFgARABYAEQAWABEAFgARABYAEQAlACUAFgARACUAJQAlACUAJQAlACUAEQAlABEAKwAVABUAEwATACUAFgARABYAEQAWABEAJQAlACUAJQAlACUAJQAlACsAJQAbABoAJQArACsAKwArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAcAKwATACUAJQAbABoAJQAlABYAEQAlACUAEQAlABEAJQBXAFcAVwBXAFcAVwBXAFcAVwBXABUAFQAlACUAJQATACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXABYAJQARACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAWACUAEQAlABYAEQARABYAEQARABUAVwBRAFEAUQBRAFEAUQBRAFEAUQBRAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcARwArACsAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXACsAKwBXAFcAVwBXAFcAVwArACsAVwBXAFcAKwArACsAGgAbACUAJQAlABsAGwArAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAAQAB0AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsADQANAA0AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAAQAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAA0AUABQAFAAUAArACsAKwArAFAAUABQAFAAUABQAFAAUAANAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAKwArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArACsAKwBQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAUABQAFAAUABQAAQABAAEACsABAAEACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAKwBQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAA0ADQANAA0ADQANAA0ADQAeACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAArACsAKwArAFAAUABQAFAAUAANAA0ADQANAA0ADQAUACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsADQANAA0ADQANAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAAQABAAEAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArAAQABAANACsAKwBQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAB4AHgAeAB4AHgArACsAKwArACsAKwAEAAQABAAEAAQABAAEAA0ADQAeAB4AHgAeAB4AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwAeACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsASwBLAEsASwBLAEsASwBLAEsASwANAA0ADQANAFAABAAEAFAAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAeAA4AUAArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAADQANAB4ADQAEAAQABAAEAB4ABAAEAEsASwBLAEsASwBLAEsASwBLAEsAUAAOAFAADQANAA0AKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAA0AHgANAA0AHgAEACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAA0AKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQACsABAAEAFAABAAEAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAUAArACsAKwArACsAKwAEACsAKwArACsAKwBQAFAAUABQAFAABAAEACsAKwAEAAQABAAEAAQABAAEACsAKwArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABABQAFAAUABQAA0ADQANAA0AHgBLAEsASwBLAEsASwBLAEsASwBLAA0ADQArAB4ABABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAFAAUAAeAFAAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABAAEAAQADgANAA0AEwATAB4AHgAeAA0ADQANAA0ADQANAA0ADQANAA0ADQANAA0ADQANAFAAUABQAFAABAAEACsAKwAEAA0ADQAeAFAAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKwArACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBcAFwADQANAA0AKgBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQAKwAEAAQAKwArAAQABAAEAAQAUAAEAFAABAAEAA0ADQANACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABABQAA4AUAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAOAB4ADQANAA0ADQAOAB4ABAArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAA0ADQANAFAADgAOAA4ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAFAADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAOABMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAArACsAKwAEACsABAAEACsABAAEAAQABAAEAAQABABQAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwAEAAQAKwAEAAQABAAEAAQAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAaABoAGgAaAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABIAEgAQwBDAEMAUABQAFAAUABDAFAAUABQAEgAQwBIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABDAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAJAAkACQAJAAkACQAJABYAEQArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwANAA0AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAANACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQANAB4AHgAeAB4AHgAeAFAAUABQAFAADQAeACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAA0AHgAeACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAARwBHABUARwAJACsAKwArACsAKwArACsAKwArACsAKwAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUQBRAFEAKwArACsAKwArACsAKwArACsAKwArACsAKwBRAFEAUQBRACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArACsAHgAEAAQADQAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAAQABAAEAAQABAAeAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQAHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQAFAAKwArAFAAKwArAFAAUAArACsAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUAArAFAAUABQAFAAUABQAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAHgAeAFAAUABQAFAAUAArAFAAKwArACsAUABQAFAAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeACsAKwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4ABAAeAB4AHgAeAB4AHgAeAB4AHgAeAAQAHgAeAA0ADQANAA0AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAAQAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArAAQABAAEAAQABAAEAAQAKwAEAAQAKwAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwBQAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArABsAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAB4AHgAeAB4ABAAEAAQABAAEAAQABABQACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArABYAFgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAGgBQAFAAUAAaAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQACsAKwBQACsAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwBQACsAUAArACsAKwArACsAKwBQACsAKwArACsAUAArAFAAKwBQACsAUABQAFAAKwBQAFAAKwBQACsAKwBQACsAUAArAFAAKwBQACsAUAArAFAAUAArAFAAKwArAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUAArAFAAUABQAFAAKwBQACsAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAKwBQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AJQAlACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeACUAJQAlAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAlACUAJQAlACUAHgAlACUAJQAlACUAIAAgACAAJQAlACAAJQAlACAAIAAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACEAIQAhACEAIQAlACUAIAAgACUAJQAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAIAAlACUAJQAlACAAIAAgACUAIAAgACAAJQAlACUAJQAlACUAJQAgACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAlAB4AJQAeACUAJQAlACUAJQAgACUAJQAlACUAHgAlAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACAAIAAgACUAJQAlACAAIAAgACAAIAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABcAFwAXABUAFQAVAB4AHgAeAB4AJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAgACUAJQAgACUAJQAlACUAJQAlACUAJQAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAgACAAIAAgACAAIAAgACAAIAAgACUAJQAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAlACAAIAAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAgACAAIAAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAA==';\n\nvar LETTER_NUMBER_MODIFIER = 50;\n// Non-tailorable Line Breaking Classes\nvar BK = 1; // Cause a line break (after)\nvar CR$1 = 2; // Cause a line break (after), except between CR and LF\nvar LF$1 = 3; // Cause a line break (after)\nvar CM = 4; // Prohibit a line break between the character and the preceding character\nvar NL = 5; // Cause a line break (after)\nvar WJ = 7; // Prohibit line breaks before and after\nvar ZW = 8; // Provide a break opportunity\nvar GL = 9; // Prohibit line breaks before and after\nvar SP = 10; // Enable indirect line breaks\nvar ZWJ$1 = 11; // Prohibit line breaks within joiner sequences\n// Break Opportunities\nvar B2 = 12; // Provide a line break opportunity before and after the character\nvar BA = 13; // Generally provide a line break opportunity after the character\nvar BB = 14; // Generally provide a line break opportunity before the character\nvar HY = 15; // Provide a line break opportunity after the character, except in numeric context\nvar CB = 16; // Provide a line break opportunity contingent on additional information\n// Characters Prohibiting Certain Breaks\nvar CL = 17; // Prohibit line breaks before\nvar CP = 18; // Prohibit line breaks before\nvar EX = 19; // Prohibit line breaks before\nvar IN = 20; // Allow only indirect line breaks between pairs\nvar NS = 21; // Allow only indirect line breaks before\nvar OP = 22; // Prohibit line breaks after\nvar QU = 23; // Act like they are both opening and closing\n// Numeric Context\nvar IS = 24; // Prevent breaks after any and before numeric\nvar NU = 25; // Form numeric expressions for line breaking purposes\nvar PO = 26; // Do not break following a numeric expression\nvar PR = 27; // Do not break in front of a numeric expression\nvar SY = 28; // Prevent a break before; and allow a break after\n// Other Characters\nvar AI = 29; // Act like AL when the resolvedEAW is N; otherwise; act as ID\nvar AL = 30; // Are alphabetic characters or symbols that are used with alphabetic characters\nvar CJ = 31; // Treat as NS or ID for strict or normal breaking.\nvar EB = 32; // Do not break from following Emoji Modifier\nvar EM = 33; // Do not break from preceding Emoji Base\nvar H2 = 34; // Form Korean syllable blocks\nvar H3 = 35; // Form Korean syllable blocks\nvar HL = 36; // Do not break around a following hyphen; otherwise act as Alphabetic\nvar ID = 37; // Break before or after; except in some numeric context\nvar JL = 38; // Form Korean syllable blocks\nvar JV = 39; // Form Korean syllable blocks\nvar JT = 40; // Form Korean syllable blocks\nvar RI$1 = 41; // Keep pairs together. For pairs; break before and after other classes\nvar SA = 42; // Provide a line break opportunity contingent on additional, language-specific context analysis\nvar XX = 43; // Have as yet unknown line breaking behavior or unassigned code positions\nvar ea_OP = [0x2329, 0xff08];\nvar BREAK_MANDATORY = '!';\nvar BREAK_NOT_ALLOWED$1 = '×';\nvar BREAK_ALLOWED$1 = '÷';\nvar UnicodeTrie$1 = createTrieFromBase64$1(base64$1);\nvar ALPHABETICS = [AL, HL];\nvar HARD_LINE_BREAKS = [BK, CR$1, LF$1, NL];\nvar SPACE$1 = [SP, ZW];\nvar PREFIX_POSTFIX = [PR, PO];\nvar LINE_BREAKS = HARD_LINE_BREAKS.concat(SPACE$1);\nvar KOREAN_SYLLABLE_BLOCK = [JL, JV, JT, H2, H3];\nvar HYPHEN = [HY, BA];\nvar codePointsToCharacterClasses = function (codePoints, lineBreak) {\n if (lineBreak === void 0) { lineBreak = 'strict'; }\n var types = [];\n var indices = [];\n var categories = [];\n codePoints.forEach(function (codePoint, index) {\n var classType = UnicodeTrie$1.get(codePoint);\n if (classType > LETTER_NUMBER_MODIFIER) {\n categories.push(true);\n classType -= LETTER_NUMBER_MODIFIER;\n }\n else {\n categories.push(false);\n }\n if (['normal', 'auto', 'loose'].indexOf(lineBreak) !== -1) {\n // U+2010, – U+2013, 〜 U+301C, ゠ U+30A0\n if ([0x2010, 0x2013, 0x301c, 0x30a0].indexOf(codePoint) !== -1) {\n indices.push(index);\n return types.push(CB);\n }\n }\n if (classType === CM || classType === ZWJ$1) {\n // LB10 Treat any remaining combining mark or ZWJ as AL.\n if (index === 0) {\n indices.push(index);\n return types.push(AL);\n }\n // LB9 Do not break a combining character sequence; treat it as if it has the line breaking class of\n // the base character in all of the following rules. Treat ZWJ as if it were CM.\n var prev = types[index - 1];\n if (LINE_BREAKS.indexOf(prev) === -1) {\n indices.push(indices[index - 1]);\n return types.push(prev);\n }\n indices.push(index);\n return types.push(AL);\n }\n indices.push(index);\n if (classType === CJ) {\n return types.push(lineBreak === 'strict' ? NS : ID);\n }\n if (classType === SA) {\n return types.push(AL);\n }\n if (classType === AI) {\n return types.push(AL);\n }\n // For supplementary characters, a useful default is to treat characters in the range 10000..1FFFD as AL\n // and characters in the ranges 20000..2FFFD and 30000..3FFFD as ID, until the implementation can be revised\n // to take into account the actual line breaking properties for these characters.\n if (classType === XX) {\n if ((codePoint >= 0x20000 && codePoint <= 0x2fffd) || (codePoint >= 0x30000 && codePoint <= 0x3fffd)) {\n return types.push(ID);\n }\n else {\n return types.push(AL);\n }\n }\n types.push(classType);\n });\n return [indices, types, categories];\n};\nvar isAdjacentWithSpaceIgnored = function (a, b, currentIndex, classTypes) {\n var current = classTypes[currentIndex];\n if (Array.isArray(a) ? a.indexOf(current) !== -1 : a === current) {\n var i = currentIndex;\n while (i <= classTypes.length) {\n i++;\n var next = classTypes[i];\n if (next === b) {\n return true;\n }\n if (next !== SP) {\n break;\n }\n }\n }\n if (current === SP) {\n var i = currentIndex;\n while (i > 0) {\n i--;\n var prev = classTypes[i];\n if (Array.isArray(a) ? a.indexOf(prev) !== -1 : a === prev) {\n var n = currentIndex;\n while (n <= classTypes.length) {\n n++;\n var next = classTypes[n];\n if (next === b) {\n return true;\n }\n if (next !== SP) {\n break;\n }\n }\n }\n if (prev !== SP) {\n break;\n }\n }\n }\n return false;\n};\nvar previousNonSpaceClassType = function (currentIndex, classTypes) {\n var i = currentIndex;\n while (i >= 0) {\n var type = classTypes[i];\n if (type === SP) {\n i--;\n }\n else {\n return type;\n }\n }\n return 0;\n};\nvar _lineBreakAtIndex = function (codePoints, classTypes, indicies, index, forbiddenBreaks) {\n if (indicies[index] === 0) {\n return BREAK_NOT_ALLOWED$1;\n }\n var currentIndex = index - 1;\n if (Array.isArray(forbiddenBreaks) && forbiddenBreaks[currentIndex] === true) {\n return BREAK_NOT_ALLOWED$1;\n }\n var beforeIndex = currentIndex - 1;\n var afterIndex = currentIndex + 1;\n var current = classTypes[currentIndex];\n // LB4 Always break after hard line breaks.\n // LB5 Treat CR followed by LF, as well as CR, LF, and NL as hard line breaks.\n var before = beforeIndex >= 0 ? classTypes[beforeIndex] : 0;\n var next = classTypes[afterIndex];\n if (current === CR$1 && next === LF$1) {\n return BREAK_NOT_ALLOWED$1;\n }\n if (HARD_LINE_BREAKS.indexOf(current) !== -1) {\n return BREAK_MANDATORY;\n }\n // LB6 Do not break before hard line breaks.\n if (HARD_LINE_BREAKS.indexOf(next) !== -1) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB7 Do not break before spaces or zero width space.\n if (SPACE$1.indexOf(next) !== -1) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB8 Break before any character following a zero-width space, even if one or more spaces intervene.\n if (previousNonSpaceClassType(currentIndex, classTypes) === ZW) {\n return BREAK_ALLOWED$1;\n }\n // LB8a Do not break after a zero width joiner.\n if (UnicodeTrie$1.get(codePoints[currentIndex]) === ZWJ$1) {\n return BREAK_NOT_ALLOWED$1;\n }\n // zwj emojis\n if ((current === EB || current === EM) && UnicodeTrie$1.get(codePoints[afterIndex]) === ZWJ$1) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB11 Do not break before or after Word joiner and related characters.\n if (current === WJ || next === WJ) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB12 Do not break after NBSP and related characters.\n if (current === GL) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB12a Do not break before NBSP and related characters, except after spaces and hyphens.\n if ([SP, BA, HY].indexOf(current) === -1 && next === GL) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB13 Do not break before ‘]’ or ‘!’ or ‘;’ or ‘/’, even after spaces.\n if ([CL, CP, EX, IS, SY].indexOf(next) !== -1) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB14 Do not break after ‘[’, even after spaces.\n if (previousNonSpaceClassType(currentIndex, classTypes) === OP) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB15 Do not break within ‘”[’, even with intervening spaces.\n if (isAdjacentWithSpaceIgnored(QU, OP, currentIndex, classTypes)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB16 Do not break between closing punctuation and a nonstarter (lb=NS), even with intervening spaces.\n if (isAdjacentWithSpaceIgnored([CL, CP], NS, currentIndex, classTypes)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB17 Do not break within ‘——’, even with intervening spaces.\n if (isAdjacentWithSpaceIgnored(B2, B2, currentIndex, classTypes)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB18 Break after spaces.\n if (current === SP) {\n return BREAK_ALLOWED$1;\n }\n // LB19 Do not break before or after quotation marks, such as ‘ ” ’.\n if (current === QU || next === QU) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB20 Break before and after unresolved CB.\n if (next === CB || current === CB) {\n return BREAK_ALLOWED$1;\n }\n // LB21 Do not break before hyphen-minus, other hyphens, fixed-width spaces, small kana, and other non-starters, or after acute accents.\n if ([BA, HY, NS].indexOf(next) !== -1 || current === BB) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB21a Don't break after Hebrew + Hyphen.\n if (before === HL && HYPHEN.indexOf(current) !== -1) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB21b Don’t break between Solidus and Hebrew letters.\n if (current === SY && next === HL) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB22 Do not break before ellipsis.\n if (next === IN) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB23 Do not break between digits and letters.\n if ((ALPHABETICS.indexOf(next) !== -1 && current === NU) || (ALPHABETICS.indexOf(current) !== -1 && next === NU)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB23a Do not break between numeric prefixes and ideographs, or between ideographs and numeric postfixes.\n if ((current === PR && [ID, EB, EM].indexOf(next) !== -1) ||\n ([ID, EB, EM].indexOf(current) !== -1 && next === PO)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB24 Do not break between numeric prefix/postfix and letters, or between letters and prefix/postfix.\n if ((ALPHABETICS.indexOf(current) !== -1 && PREFIX_POSTFIX.indexOf(next) !== -1) ||\n (PREFIX_POSTFIX.indexOf(current) !== -1 && ALPHABETICS.indexOf(next) !== -1)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB25 Do not break between the following pairs of classes relevant to numbers:\n if (\n // (PR | PO) × ( OP | HY )? NU\n ([PR, PO].indexOf(current) !== -1 &&\n (next === NU || ([OP, HY].indexOf(next) !== -1 && classTypes[afterIndex + 1] === NU))) ||\n // ( OP | HY ) × NU\n ([OP, HY].indexOf(current) !== -1 && next === NU) ||\n // NU ×\t(NU | SY | IS)\n (current === NU && [NU, SY, IS].indexOf(next) !== -1)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // NU (NU | SY | IS)* × (NU | SY | IS | CL | CP)\n if ([NU, SY, IS, CL, CP].indexOf(next) !== -1) {\n var prevIndex = currentIndex;\n while (prevIndex >= 0) {\n var type = classTypes[prevIndex];\n if (type === NU) {\n return BREAK_NOT_ALLOWED$1;\n }\n else if ([SY, IS].indexOf(type) !== -1) {\n prevIndex--;\n }\n else {\n break;\n }\n }\n }\n // NU (NU | SY | IS)* (CL | CP)? × (PO | PR))\n if ([PR, PO].indexOf(next) !== -1) {\n var prevIndex = [CL, CP].indexOf(current) !== -1 ? beforeIndex : currentIndex;\n while (prevIndex >= 0) {\n var type = classTypes[prevIndex];\n if (type === NU) {\n return BREAK_NOT_ALLOWED$1;\n }\n else if ([SY, IS].indexOf(type) !== -1) {\n prevIndex--;\n }\n else {\n break;\n }\n }\n }\n // LB26 Do not break a Korean syllable.\n if ((JL === current && [JL, JV, H2, H3].indexOf(next) !== -1) ||\n ([JV, H2].indexOf(current) !== -1 && [JV, JT].indexOf(next) !== -1) ||\n ([JT, H3].indexOf(current) !== -1 && next === JT)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB27 Treat a Korean Syllable Block the same as ID.\n if ((KOREAN_SYLLABLE_BLOCK.indexOf(current) !== -1 && [IN, PO].indexOf(next) !== -1) ||\n (KOREAN_SYLLABLE_BLOCK.indexOf(next) !== -1 && current === PR)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB28 Do not break between alphabetics (“at”).\n if (ALPHABETICS.indexOf(current) !== -1 && ALPHABETICS.indexOf(next) !== -1) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB29 Do not break between numeric punctuation and alphabetics (“e.g.”).\n if (current === IS && ALPHABETICS.indexOf(next) !== -1) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB30 Do not break between letters, numbers, or ordinary symbols and opening or closing parentheses.\n if ((ALPHABETICS.concat(NU).indexOf(current) !== -1 &&\n next === OP &&\n ea_OP.indexOf(codePoints[afterIndex]) === -1) ||\n (ALPHABETICS.concat(NU).indexOf(next) !== -1 && current === CP)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB30a Break between two regional indicator symbols if and only if there are an even number of regional\n // indicators preceding the position of the break.\n if (current === RI$1 && next === RI$1) {\n var i = indicies[currentIndex];\n var count = 1;\n while (i > 0) {\n i--;\n if (classTypes[i] === RI$1) {\n count++;\n }\n else {\n break;\n }\n }\n if (count % 2 !== 0) {\n return BREAK_NOT_ALLOWED$1;\n }\n }\n // LB30b Do not break between an emoji base and an emoji modifier.\n if (current === EB && next === EM) {\n return BREAK_NOT_ALLOWED$1;\n }\n return BREAK_ALLOWED$1;\n};\nvar cssFormattedClasses = function (codePoints, options) {\n if (!options) {\n options = { lineBreak: 'normal', wordBreak: 'normal' };\n }\n var _a = codePointsToCharacterClasses(codePoints, options.lineBreak), indicies = _a[0], classTypes = _a[1], isLetterNumber = _a[2];\n if (options.wordBreak === 'break-all' || options.wordBreak === 'break-word') {\n classTypes = classTypes.map(function (type) { return ([NU, AL, SA].indexOf(type) !== -1 ? ID : type); });\n }\n var forbiddenBreakpoints = options.wordBreak === 'keep-all'\n ? isLetterNumber.map(function (letterNumber, i) {\n return letterNumber && codePoints[i] >= 0x4e00 && codePoints[i] <= 0x9fff;\n })\n : undefined;\n return [indicies, classTypes, forbiddenBreakpoints];\n};\nvar Break = /** @class */ (function () {\n function Break(codePoints, lineBreak, start, end) {\n this.codePoints = codePoints;\n this.required = lineBreak === BREAK_MANDATORY;\n this.start = start;\n this.end = end;\n }\n Break.prototype.slice = function () {\n return fromCodePoint$1.apply(void 0, this.codePoints.slice(this.start, this.end));\n };\n return Break;\n}());\nvar LineBreaker = function (str, options) {\n var codePoints = toCodePoints$1(str);\n var _a = cssFormattedClasses(codePoints, options), indicies = _a[0], classTypes = _a[1], forbiddenBreakpoints = _a[2];\n var length = codePoints.length;\n var lastEnd = 0;\n var nextIndex = 0;\n return {\n next: function () {\n if (nextIndex >= length) {\n return { done: true, value: null };\n }\n var lineBreak = BREAK_NOT_ALLOWED$1;\n while (nextIndex < length &&\n (lineBreak = _lineBreakAtIndex(codePoints, classTypes, indicies, ++nextIndex, forbiddenBreakpoints)) ===\n BREAK_NOT_ALLOWED$1) { }\n if (lineBreak !== BREAK_NOT_ALLOWED$1 || nextIndex === length) {\n var value = new Break(codePoints, lineBreak, lastEnd, nextIndex);\n lastEnd = nextIndex;\n return { value: value, done: false };\n }\n return { done: true, value: null };\n },\n };\n};\n\n// https://www.w3.org/TR/css-syntax-3\nvar FLAG_UNRESTRICTED = 1 << 0;\nvar FLAG_ID = 1 << 1;\nvar FLAG_INTEGER = 1 << 2;\nvar FLAG_NUMBER = 1 << 3;\nvar LINE_FEED = 0x000a;\nvar SOLIDUS = 0x002f;\nvar REVERSE_SOLIDUS = 0x005c;\nvar CHARACTER_TABULATION = 0x0009;\nvar SPACE = 0x0020;\nvar QUOTATION_MARK = 0x0022;\nvar EQUALS_SIGN = 0x003d;\nvar NUMBER_SIGN = 0x0023;\nvar DOLLAR_SIGN = 0x0024;\nvar PERCENTAGE_SIGN = 0x0025;\nvar APOSTROPHE = 0x0027;\nvar LEFT_PARENTHESIS = 0x0028;\nvar RIGHT_PARENTHESIS = 0x0029;\nvar LOW_LINE = 0x005f;\nvar HYPHEN_MINUS = 0x002d;\nvar EXCLAMATION_MARK = 0x0021;\nvar LESS_THAN_SIGN = 0x003c;\nvar GREATER_THAN_SIGN = 0x003e;\nvar COMMERCIAL_AT = 0x0040;\nvar LEFT_SQUARE_BRACKET = 0x005b;\nvar RIGHT_SQUARE_BRACKET = 0x005d;\nvar CIRCUMFLEX_ACCENT = 0x003d;\nvar LEFT_CURLY_BRACKET = 0x007b;\nvar QUESTION_MARK = 0x003f;\nvar RIGHT_CURLY_BRACKET = 0x007d;\nvar VERTICAL_LINE = 0x007c;\nvar TILDE = 0x007e;\nvar CONTROL = 0x0080;\nvar REPLACEMENT_CHARACTER = 0xfffd;\nvar ASTERISK = 0x002a;\nvar PLUS_SIGN = 0x002b;\nvar COMMA = 0x002c;\nvar COLON = 0x003a;\nvar SEMICOLON = 0x003b;\nvar FULL_STOP = 0x002e;\nvar NULL = 0x0000;\nvar BACKSPACE = 0x0008;\nvar LINE_TABULATION = 0x000b;\nvar SHIFT_OUT = 0x000e;\nvar INFORMATION_SEPARATOR_ONE = 0x001f;\nvar DELETE = 0x007f;\nvar EOF = -1;\nvar ZERO = 0x0030;\nvar a = 0x0061;\nvar e = 0x0065;\nvar f = 0x0066;\nvar u = 0x0075;\nvar z = 0x007a;\nvar A = 0x0041;\nvar E = 0x0045;\nvar F = 0x0046;\nvar U = 0x0055;\nvar Z = 0x005a;\nvar isDigit = function (codePoint) { return codePoint >= ZERO && codePoint <= 0x0039; };\nvar isSurrogateCodePoint = function (codePoint) { return codePoint >= 0xd800 && codePoint <= 0xdfff; };\nvar isHex = function (codePoint) {\n return isDigit(codePoint) || (codePoint >= A && codePoint <= F) || (codePoint >= a && codePoint <= f);\n};\nvar isLowerCaseLetter = function (codePoint) { return codePoint >= a && codePoint <= z; };\nvar isUpperCaseLetter = function (codePoint) { return codePoint >= A && codePoint <= Z; };\nvar isLetter = function (codePoint) { return isLowerCaseLetter(codePoint) || isUpperCaseLetter(codePoint); };\nvar isNonASCIICodePoint = function (codePoint) { return codePoint >= CONTROL; };\nvar isWhiteSpace = function (codePoint) {\n return codePoint === LINE_FEED || codePoint === CHARACTER_TABULATION || codePoint === SPACE;\n};\nvar isNameStartCodePoint = function (codePoint) {\n return isLetter(codePoint) || isNonASCIICodePoint(codePoint) || codePoint === LOW_LINE;\n};\nvar isNameCodePoint = function (codePoint) {\n return isNameStartCodePoint(codePoint) || isDigit(codePoint) || codePoint === HYPHEN_MINUS;\n};\nvar isNonPrintableCodePoint = function (codePoint) {\n return ((codePoint >= NULL && codePoint <= BACKSPACE) ||\n codePoint === LINE_TABULATION ||\n (codePoint >= SHIFT_OUT && codePoint <= INFORMATION_SEPARATOR_ONE) ||\n codePoint === DELETE);\n};\nvar isValidEscape = function (c1, c2) {\n if (c1 !== REVERSE_SOLIDUS) {\n return false;\n }\n return c2 !== LINE_FEED;\n};\nvar isIdentifierStart = function (c1, c2, c3) {\n if (c1 === HYPHEN_MINUS) {\n return isNameStartCodePoint(c2) || isValidEscape(c2, c3);\n }\n else if (isNameStartCodePoint(c1)) {\n return true;\n }\n else if (c1 === REVERSE_SOLIDUS && isValidEscape(c1, c2)) {\n return true;\n }\n return false;\n};\nvar isNumberStart = function (c1, c2, c3) {\n if (c1 === PLUS_SIGN || c1 === HYPHEN_MINUS) {\n if (isDigit(c2)) {\n return true;\n }\n return c2 === FULL_STOP && isDigit(c3);\n }\n if (c1 === FULL_STOP) {\n return isDigit(c2);\n }\n return isDigit(c1);\n};\nvar stringToNumber = function (codePoints) {\n var c = 0;\n var sign = 1;\n if (codePoints[c] === PLUS_SIGN || codePoints[c] === HYPHEN_MINUS) {\n if (codePoints[c] === HYPHEN_MINUS) {\n sign = -1;\n }\n c++;\n }\n var integers = [];\n while (isDigit(codePoints[c])) {\n integers.push(codePoints[c++]);\n }\n var int = integers.length ? parseInt(fromCodePoint$1.apply(void 0, integers), 10) : 0;\n if (codePoints[c] === FULL_STOP) {\n c++;\n }\n var fraction = [];\n while (isDigit(codePoints[c])) {\n fraction.push(codePoints[c++]);\n }\n var fracd = fraction.length;\n var frac = fracd ? parseInt(fromCodePoint$1.apply(void 0, fraction), 10) : 0;\n if (codePoints[c] === E || codePoints[c] === e) {\n c++;\n }\n var expsign = 1;\n if (codePoints[c] === PLUS_SIGN || codePoints[c] === HYPHEN_MINUS) {\n if (codePoints[c] === HYPHEN_MINUS) {\n expsign = -1;\n }\n c++;\n }\n var exponent = [];\n while (isDigit(codePoints[c])) {\n exponent.push(codePoints[c++]);\n }\n var exp = exponent.length ? parseInt(fromCodePoint$1.apply(void 0, exponent), 10) : 0;\n return sign * (int + frac * Math.pow(10, -fracd)) * Math.pow(10, expsign * exp);\n};\nvar LEFT_PARENTHESIS_TOKEN = {\n type: 2 /* LEFT_PARENTHESIS_TOKEN */\n};\nvar RIGHT_PARENTHESIS_TOKEN = {\n type: 3 /* RIGHT_PARENTHESIS_TOKEN */\n};\nvar COMMA_TOKEN = { type: 4 /* COMMA_TOKEN */ };\nvar SUFFIX_MATCH_TOKEN = { type: 13 /* SUFFIX_MATCH_TOKEN */ };\nvar PREFIX_MATCH_TOKEN = { type: 8 /* PREFIX_MATCH_TOKEN */ };\nvar COLUMN_TOKEN = { type: 21 /* COLUMN_TOKEN */ };\nvar DASH_MATCH_TOKEN = { type: 9 /* DASH_MATCH_TOKEN */ };\nvar INCLUDE_MATCH_TOKEN = { type: 10 /* INCLUDE_MATCH_TOKEN */ };\nvar LEFT_CURLY_BRACKET_TOKEN = {\n type: 11 /* LEFT_CURLY_BRACKET_TOKEN */\n};\nvar RIGHT_CURLY_BRACKET_TOKEN = {\n type: 12 /* RIGHT_CURLY_BRACKET_TOKEN */\n};\nvar SUBSTRING_MATCH_TOKEN = { type: 14 /* SUBSTRING_MATCH_TOKEN */ };\nvar BAD_URL_TOKEN = { type: 23 /* BAD_URL_TOKEN */ };\nvar BAD_STRING_TOKEN = { type: 1 /* BAD_STRING_TOKEN */ };\nvar CDO_TOKEN = { type: 25 /* CDO_TOKEN */ };\nvar CDC_TOKEN = { type: 24 /* CDC_TOKEN */ };\nvar COLON_TOKEN = { type: 26 /* COLON_TOKEN */ };\nvar SEMICOLON_TOKEN = { type: 27 /* SEMICOLON_TOKEN */ };\nvar LEFT_SQUARE_BRACKET_TOKEN = {\n type: 28 /* LEFT_SQUARE_BRACKET_TOKEN */\n};\nvar RIGHT_SQUARE_BRACKET_TOKEN = {\n type: 29 /* RIGHT_SQUARE_BRACKET_TOKEN */\n};\nvar WHITESPACE_TOKEN = { type: 31 /* WHITESPACE_TOKEN */ };\nvar EOF_TOKEN = { type: 32 /* EOF_TOKEN */ };\nvar Tokenizer = /** @class */ (function () {\n function Tokenizer() {\n this._value = [];\n }\n Tokenizer.prototype.write = function (chunk) {\n this._value = this._value.concat(toCodePoints$1(chunk));\n };\n Tokenizer.prototype.read = function () {\n var tokens = [];\n var token = this.consumeToken();\n while (token !== EOF_TOKEN) {\n tokens.push(token);\n token = this.consumeToken();\n }\n return tokens;\n };\n Tokenizer.prototype.consumeToken = function () {\n var codePoint = this.consumeCodePoint();\n switch (codePoint) {\n case QUOTATION_MARK:\n return this.consumeStringToken(QUOTATION_MARK);\n case NUMBER_SIGN:\n var c1 = this.peekCodePoint(0);\n var c2 = this.peekCodePoint(1);\n var c3 = this.peekCodePoint(2);\n if (isNameCodePoint(c1) || isValidEscape(c2, c3)) {\n var flags = isIdentifierStart(c1, c2, c3) ? FLAG_ID : FLAG_UNRESTRICTED;\n var value = this.consumeName();\n return { type: 5 /* HASH_TOKEN */, value: value, flags: flags };\n }\n break;\n case DOLLAR_SIGN:\n if (this.peekCodePoint(0) === EQUALS_SIGN) {\n this.consumeCodePoint();\n return SUFFIX_MATCH_TOKEN;\n }\n break;\n case APOSTROPHE:\n return this.consumeStringToken(APOSTROPHE);\n case LEFT_PARENTHESIS:\n return LEFT_PARENTHESIS_TOKEN;\n case RIGHT_PARENTHESIS:\n return RIGHT_PARENTHESIS_TOKEN;\n case ASTERISK:\n if (this.peekCodePoint(0) === EQUALS_SIGN) {\n this.consumeCodePoint();\n return SUBSTRING_MATCH_TOKEN;\n }\n break;\n case PLUS_SIGN:\n if (isNumberStart(codePoint, this.peekCodePoint(0), this.peekCodePoint(1))) {\n this.reconsumeCodePoint(codePoint);\n return this.consumeNumericToken();\n }\n break;\n case COMMA:\n return COMMA_TOKEN;\n case HYPHEN_MINUS:\n var e1 = codePoint;\n var e2 = this.peekCodePoint(0);\n var e3 = this.peekCodePoint(1);\n if (isNumberStart(e1, e2, e3)) {\n this.reconsumeCodePoint(codePoint);\n return this.consumeNumericToken();\n }\n if (isIdentifierStart(e1, e2, e3)) {\n this.reconsumeCodePoint(codePoint);\n return this.consumeIdentLikeToken();\n }\n if (e2 === HYPHEN_MINUS && e3 === GREATER_THAN_SIGN) {\n this.consumeCodePoint();\n this.consumeCodePoint();\n return CDC_TOKEN;\n }\n break;\n case FULL_STOP:\n if (isNumberStart(codePoint, this.peekCodePoint(0), this.peekCodePoint(1))) {\n this.reconsumeCodePoint(codePoint);\n return this.consumeNumericToken();\n }\n break;\n case SOLIDUS:\n if (this.peekCodePoint(0) === ASTERISK) {\n this.consumeCodePoint();\n while (true) {\n var c = this.consumeCodePoint();\n if (c === ASTERISK) {\n c = this.consumeCodePoint();\n if (c === SOLIDUS) {\n return this.consumeToken();\n }\n }\n if (c === EOF) {\n return this.consumeToken();\n }\n }\n }\n break;\n case COLON:\n return COLON_TOKEN;\n case SEMICOLON:\n return SEMICOLON_TOKEN;\n case LESS_THAN_SIGN:\n if (this.peekCodePoint(0) === EXCLAMATION_MARK &&\n this.peekCodePoint(1) === HYPHEN_MINUS &&\n this.peekCodePoint(2) === HYPHEN_MINUS) {\n this.consumeCodePoint();\n this.consumeCodePoint();\n return CDO_TOKEN;\n }\n break;\n case COMMERCIAL_AT:\n var a1 = this.peekCodePoint(0);\n var a2 = this.peekCodePoint(1);\n var a3 = this.peekCodePoint(2);\n if (isIdentifierStart(a1, a2, a3)) {\n var value = this.consumeName();\n return { type: 7 /* AT_KEYWORD_TOKEN */, value: value };\n }\n break;\n case LEFT_SQUARE_BRACKET:\n return LEFT_SQUARE_BRACKET_TOKEN;\n case REVERSE_SOLIDUS:\n if (isValidEscape(codePoint, this.peekCodePoint(0))) {\n this.reconsumeCodePoint(codePoint);\n return this.consumeIdentLikeToken();\n }\n break;\n case RIGHT_SQUARE_BRACKET:\n return RIGHT_SQUARE_BRACKET_TOKEN;\n case CIRCUMFLEX_ACCENT:\n if (this.peekCodePoint(0) === EQUALS_SIGN) {\n this.consumeCodePoint();\n return PREFIX_MATCH_TOKEN;\n }\n break;\n case LEFT_CURLY_BRACKET:\n return LEFT_CURLY_BRACKET_TOKEN;\n case RIGHT_CURLY_BRACKET:\n return RIGHT_CURLY_BRACKET_TOKEN;\n case u:\n case U:\n var u1 = this.peekCodePoint(0);\n var u2 = this.peekCodePoint(1);\n if (u1 === PLUS_SIGN && (isHex(u2) || u2 === QUESTION_MARK)) {\n this.consumeCodePoint();\n this.consumeUnicodeRangeToken();\n }\n this.reconsumeCodePoint(codePoint);\n return this.consumeIdentLikeToken();\n case VERTICAL_LINE:\n if (this.peekCodePoint(0) === EQUALS_SIGN) {\n this.consumeCodePoint();\n return DASH_MATCH_TOKEN;\n }\n if (this.peekCodePoint(0) === VERTICAL_LINE) {\n this.consumeCodePoint();\n return COLUMN_TOKEN;\n }\n break;\n case TILDE:\n if (this.peekCodePoint(0) === EQUALS_SIGN) {\n this.consumeCodePoint();\n return INCLUDE_MATCH_TOKEN;\n }\n break;\n case EOF:\n return EOF_TOKEN;\n }\n if (isWhiteSpace(codePoint)) {\n this.consumeWhiteSpace();\n return WHITESPACE_TOKEN;\n }\n if (isDigit(codePoint)) {\n this.reconsumeCodePoint(codePoint);\n return this.consumeNumericToken();\n }\n if (isNameStartCodePoint(codePoint)) {\n this.reconsumeCodePoint(codePoint);\n return this.consumeIdentLikeToken();\n }\n return { type: 6 /* DELIM_TOKEN */, value: fromCodePoint$1(codePoint) };\n };\n Tokenizer.prototype.consumeCodePoint = function () {\n var value = this._value.shift();\n return typeof value === 'undefined' ? -1 : value;\n };\n Tokenizer.prototype.reconsumeCodePoint = function (codePoint) {\n this._value.unshift(codePoint);\n };\n Tokenizer.prototype.peekCodePoint = function (delta) {\n if (delta >= this._value.length) {\n return -1;\n }\n return this._value[delta];\n };\n Tokenizer.prototype.consumeUnicodeRangeToken = function () {\n var digits = [];\n var codePoint = this.consumeCodePoint();\n while (isHex(codePoint) && digits.length < 6) {\n digits.push(codePoint);\n codePoint = this.consumeCodePoint();\n }\n var questionMarks = false;\n while (codePoint === QUESTION_MARK && digits.length < 6) {\n digits.push(codePoint);\n codePoint = this.consumeCodePoint();\n questionMarks = true;\n }\n if (questionMarks) {\n var start_1 = parseInt(fromCodePoint$1.apply(void 0, digits.map(function (digit) { return (digit === QUESTION_MARK ? ZERO : digit); })), 16);\n var end = parseInt(fromCodePoint$1.apply(void 0, digits.map(function (digit) { return (digit === QUESTION_MARK ? F : digit); })), 16);\n return { type: 30 /* UNICODE_RANGE_TOKEN */, start: start_1, end: end };\n }\n var start = parseInt(fromCodePoint$1.apply(void 0, digits), 16);\n if (this.peekCodePoint(0) === HYPHEN_MINUS && isHex(this.peekCodePoint(1))) {\n this.consumeCodePoint();\n codePoint = this.consumeCodePoint();\n var endDigits = [];\n while (isHex(codePoint) && endDigits.length < 6) {\n endDigits.push(codePoint);\n codePoint = this.consumeCodePoint();\n }\n var end = parseInt(fromCodePoint$1.apply(void 0, endDigits), 16);\n return { type: 30 /* UNICODE_RANGE_TOKEN */, start: start, end: end };\n }\n else {\n return { type: 30 /* UNICODE_RANGE_TOKEN */, start: start, end: start };\n }\n };\n Tokenizer.prototype.consumeIdentLikeToken = function () {\n var value = this.consumeName();\n if (value.toLowerCase() === 'url' && this.peekCodePoint(0) === LEFT_PARENTHESIS) {\n this.consumeCodePoint();\n return this.consumeUrlToken();\n }\n else if (this.peekCodePoint(0) === LEFT_PARENTHESIS) {\n this.consumeCodePoint();\n return { type: 19 /* FUNCTION_TOKEN */, value: value };\n }\n return { type: 20 /* IDENT_TOKEN */, value: value };\n };\n Tokenizer.prototype.consumeUrlToken = function () {\n var value = [];\n this.consumeWhiteSpace();\n if (this.peekCodePoint(0) === EOF) {\n return { type: 22 /* URL_TOKEN */, value: '' };\n }\n var next = this.peekCodePoint(0);\n if (next === APOSTROPHE || next === QUOTATION_MARK) {\n var stringToken = this.consumeStringToken(this.consumeCodePoint());\n if (stringToken.type === 0 /* STRING_TOKEN */) {\n this.consumeWhiteSpace();\n if (this.peekCodePoint(0) === EOF || this.peekCodePoint(0) === RIGHT_PARENTHESIS) {\n this.consumeCodePoint();\n return { type: 22 /* URL_TOKEN */, value: stringToken.value };\n }\n }\n this.consumeBadUrlRemnants();\n return BAD_URL_TOKEN;\n }\n while (true) {\n var codePoint = this.consumeCodePoint();\n if (codePoint === EOF || codePoint === RIGHT_PARENTHESIS) {\n return { type: 22 /* URL_TOKEN */, value: fromCodePoint$1.apply(void 0, value) };\n }\n else if (isWhiteSpace(codePoint)) {\n this.consumeWhiteSpace();\n if (this.peekCodePoint(0) === EOF || this.peekCodePoint(0) === RIGHT_PARENTHESIS) {\n this.consumeCodePoint();\n return { type: 22 /* URL_TOKEN */, value: fromCodePoint$1.apply(void 0, value) };\n }\n this.consumeBadUrlRemnants();\n return BAD_URL_TOKEN;\n }\n else if (codePoint === QUOTATION_MARK ||\n codePoint === APOSTROPHE ||\n codePoint === LEFT_PARENTHESIS ||\n isNonPrintableCodePoint(codePoint)) {\n this.consumeBadUrlRemnants();\n return BAD_URL_TOKEN;\n }\n else if (codePoint === REVERSE_SOLIDUS) {\n if (isValidEscape(codePoint, this.peekCodePoint(0))) {\n value.push(this.consumeEscapedCodePoint());\n }\n else {\n this.consumeBadUrlRemnants();\n return BAD_URL_TOKEN;\n }\n }\n else {\n value.push(codePoint);\n }\n }\n };\n Tokenizer.prototype.consumeWhiteSpace = function () {\n while (isWhiteSpace(this.peekCodePoint(0))) {\n this.consumeCodePoint();\n }\n };\n Tokenizer.prototype.consumeBadUrlRemnants = function () {\n while (true) {\n var codePoint = this.consumeCodePoint();\n if (codePoint === RIGHT_PARENTHESIS || codePoint === EOF) {\n return;\n }\n if (isValidEscape(codePoint, this.peekCodePoint(0))) {\n this.consumeEscapedCodePoint();\n }\n }\n };\n Tokenizer.prototype.consumeStringSlice = function (count) {\n var SLICE_STACK_SIZE = 50000;\n var value = '';\n while (count > 0) {\n var amount = Math.min(SLICE_STACK_SIZE, count);\n value += fromCodePoint$1.apply(void 0, this._value.splice(0, amount));\n count -= amount;\n }\n this._value.shift();\n return value;\n };\n Tokenizer.prototype.consumeStringToken = function (endingCodePoint) {\n var value = '';\n var i = 0;\n do {\n var codePoint = this._value[i];\n if (codePoint === EOF || codePoint === undefined || codePoint === endingCodePoint) {\n value += this.consumeStringSlice(i);\n return { type: 0 /* STRING_TOKEN */, value: value };\n }\n if (codePoint === LINE_FEED) {\n this._value.splice(0, i);\n return BAD_STRING_TOKEN;\n }\n if (codePoint === REVERSE_SOLIDUS) {\n var next = this._value[i + 1];\n if (next !== EOF && next !== undefined) {\n if (next === LINE_FEED) {\n value += this.consumeStringSlice(i);\n i = -1;\n this._value.shift();\n }\n else if (isValidEscape(codePoint, next)) {\n value += this.consumeStringSlice(i);\n value += fromCodePoint$1(this.consumeEscapedCodePoint());\n i = -1;\n }\n }\n }\n i++;\n } while (true);\n };\n Tokenizer.prototype.consumeNumber = function () {\n var repr = [];\n var type = FLAG_INTEGER;\n var c1 = this.peekCodePoint(0);\n if (c1 === PLUS_SIGN || c1 === HYPHEN_MINUS) {\n repr.push(this.consumeCodePoint());\n }\n while (isDigit(this.peekCodePoint(0))) {\n repr.push(this.consumeCodePoint());\n }\n c1 = this.peekCodePoint(0);\n var c2 = this.peekCodePoint(1);\n if (c1 === FULL_STOP && isDigit(c2)) {\n repr.push(this.consumeCodePoint(), this.consumeCodePoint());\n type = FLAG_NUMBER;\n while (isDigit(this.peekCodePoint(0))) {\n repr.push(this.consumeCodePoint());\n }\n }\n c1 = this.peekCodePoint(0);\n c2 = this.peekCodePoint(1);\n var c3 = this.peekCodePoint(2);\n if ((c1 === E || c1 === e) && (((c2 === PLUS_SIGN || c2 === HYPHEN_MINUS) && isDigit(c3)) || isDigit(c2))) {\n repr.push(this.consumeCodePoint(), this.consumeCodePoint());\n type = FLAG_NUMBER;\n while (isDigit(this.peekCodePoint(0))) {\n repr.push(this.consumeCodePoint());\n }\n }\n return [stringToNumber(repr), type];\n };\n Tokenizer.prototype.consumeNumericToken = function () {\n var _a = this.consumeNumber(), number = _a[0], flags = _a[1];\n var c1 = this.peekCodePoint(0);\n var c2 = this.peekCodePoint(1);\n var c3 = this.peekCodePoint(2);\n if (isIdentifierStart(c1, c2, c3)) {\n var unit = this.consumeName();\n return { type: 15 /* DIMENSION_TOKEN */, number: number, flags: flags, unit: unit };\n }\n if (c1 === PERCENTAGE_SIGN) {\n this.consumeCodePoint();\n return { type: 16 /* PERCENTAGE_TOKEN */, number: number, flags: flags };\n }\n return { type: 17 /* NUMBER_TOKEN */, number: number, flags: flags };\n };\n Tokenizer.prototype.consumeEscapedCodePoint = function () {\n var codePoint = this.consumeCodePoint();\n if (isHex(codePoint)) {\n var hex = fromCodePoint$1(codePoint);\n while (isHex(this.peekCodePoint(0)) && hex.length < 6) {\n hex += fromCodePoint$1(this.consumeCodePoint());\n }\n if (isWhiteSpace(this.peekCodePoint(0))) {\n this.consumeCodePoint();\n }\n var hexCodePoint = parseInt(hex, 16);\n if (hexCodePoint === 0 || isSurrogateCodePoint(hexCodePoint) || hexCodePoint > 0x10ffff) {\n return REPLACEMENT_CHARACTER;\n }\n return hexCodePoint;\n }\n if (codePoint === EOF) {\n return REPLACEMENT_CHARACTER;\n }\n return codePoint;\n };\n Tokenizer.prototype.consumeName = function () {\n var result = '';\n while (true) {\n var codePoint = this.consumeCodePoint();\n if (isNameCodePoint(codePoint)) {\n result += fromCodePoint$1(codePoint);\n }\n else if (isValidEscape(codePoint, this.peekCodePoint(0))) {\n result += fromCodePoint$1(this.consumeEscapedCodePoint());\n }\n else {\n this.reconsumeCodePoint(codePoint);\n return result;\n }\n }\n };\n return Tokenizer;\n}());\n\nvar Parser = /** @class */ (function () {\n function Parser(tokens) {\n this._tokens = tokens;\n }\n Parser.create = function (value) {\n var tokenizer = new Tokenizer();\n tokenizer.write(value);\n return new Parser(tokenizer.read());\n };\n Parser.parseValue = function (value) {\n return Parser.create(value).parseComponentValue();\n };\n Parser.parseValues = function (value) {\n return Parser.create(value).parseComponentValues();\n };\n Parser.prototype.parseComponentValue = function () {\n var token = this.consumeToken();\n while (token.type === 31 /* WHITESPACE_TOKEN */) {\n token = this.consumeToken();\n }\n if (token.type === 32 /* EOF_TOKEN */) {\n throw new SyntaxError(\"Error parsing CSS component value, unexpected EOF\");\n }\n this.reconsumeToken(token);\n var value = this.consumeComponentValue();\n do {\n token = this.consumeToken();\n } while (token.type === 31 /* WHITESPACE_TOKEN */);\n if (token.type === 32 /* EOF_TOKEN */) {\n return value;\n }\n throw new SyntaxError(\"Error parsing CSS component value, multiple values found when expecting only one\");\n };\n Parser.prototype.parseComponentValues = function () {\n var values = [];\n while (true) {\n var value = this.consumeComponentValue();\n if (value.type === 32 /* EOF_TOKEN */) {\n return values;\n }\n values.push(value);\n values.push();\n }\n };\n Parser.prototype.consumeComponentValue = function () {\n var token = this.consumeToken();\n switch (token.type) {\n case 11 /* LEFT_CURLY_BRACKET_TOKEN */:\n case 28 /* LEFT_SQUARE_BRACKET_TOKEN */:\n case 2 /* LEFT_PARENTHESIS_TOKEN */:\n return this.consumeSimpleBlock(token.type);\n case 19 /* FUNCTION_TOKEN */:\n return this.consumeFunction(token);\n }\n return token;\n };\n Parser.prototype.consumeSimpleBlock = function (type) {\n var block = { type: type, values: [] };\n var token = this.consumeToken();\n while (true) {\n if (token.type === 32 /* EOF_TOKEN */ || isEndingTokenFor(token, type)) {\n return block;\n }\n this.reconsumeToken(token);\n block.values.push(this.consumeComponentValue());\n token = this.consumeToken();\n }\n };\n Parser.prototype.consumeFunction = function (functionToken) {\n var cssFunction = {\n name: functionToken.value,\n values: [],\n type: 18 /* FUNCTION */\n };\n while (true) {\n var token = this.consumeToken();\n if (token.type === 32 /* EOF_TOKEN */ || token.type === 3 /* RIGHT_PARENTHESIS_TOKEN */) {\n return cssFunction;\n }\n this.reconsumeToken(token);\n cssFunction.values.push(this.consumeComponentValue());\n }\n };\n Parser.prototype.consumeToken = function () {\n var token = this._tokens.shift();\n return typeof token === 'undefined' ? EOF_TOKEN : token;\n };\n Parser.prototype.reconsumeToken = function (token) {\n this._tokens.unshift(token);\n };\n return Parser;\n}());\nvar isDimensionToken = function (token) { return token.type === 15 /* DIMENSION_TOKEN */; };\nvar isNumberToken = function (token) { return token.type === 17 /* NUMBER_TOKEN */; };\nvar isIdentToken = function (token) { return token.type === 20 /* IDENT_TOKEN */; };\nvar isStringToken = function (token) { return token.type === 0 /* STRING_TOKEN */; };\nvar isIdentWithValue = function (token, value) {\n return isIdentToken(token) && token.value === value;\n};\nvar nonWhiteSpace = function (token) { return token.type !== 31 /* WHITESPACE_TOKEN */; };\nvar nonFunctionArgSeparator = function (token) {\n return token.type !== 31 /* WHITESPACE_TOKEN */ && token.type !== 4 /* COMMA_TOKEN */;\n};\nvar parseFunctionArgs = function (tokens) {\n var args = [];\n var arg = [];\n tokens.forEach(function (token) {\n if (token.type === 4 /* COMMA_TOKEN */) {\n if (arg.length === 0) {\n throw new Error(\"Error parsing function args, zero tokens for arg\");\n }\n args.push(arg);\n arg = [];\n return;\n }\n if (token.type !== 31 /* WHITESPACE_TOKEN */) {\n arg.push(token);\n }\n });\n if (arg.length) {\n args.push(arg);\n }\n return args;\n};\nvar isEndingTokenFor = function (token, type) {\n if (type === 11 /* LEFT_CURLY_BRACKET_TOKEN */ && token.type === 12 /* RIGHT_CURLY_BRACKET_TOKEN */) {\n return true;\n }\n if (type === 28 /* LEFT_SQUARE_BRACKET_TOKEN */ && token.type === 29 /* RIGHT_SQUARE_BRACKET_TOKEN */) {\n return true;\n }\n return type === 2 /* LEFT_PARENTHESIS_TOKEN */ && token.type === 3 /* RIGHT_PARENTHESIS_TOKEN */;\n};\n\nvar isLength = function (token) {\n return token.type === 17 /* NUMBER_TOKEN */ || token.type === 15 /* DIMENSION_TOKEN */;\n};\n\nvar isLengthPercentage = function (token) {\n return token.type === 16 /* PERCENTAGE_TOKEN */ || isLength(token);\n};\nvar parseLengthPercentageTuple = function (tokens) {\n return tokens.length > 1 ? [tokens[0], tokens[1]] : [tokens[0]];\n};\nvar ZERO_LENGTH = {\n type: 17 /* NUMBER_TOKEN */,\n number: 0,\n flags: FLAG_INTEGER\n};\nvar FIFTY_PERCENT = {\n type: 16 /* PERCENTAGE_TOKEN */,\n number: 50,\n flags: FLAG_INTEGER\n};\nvar HUNDRED_PERCENT = {\n type: 16 /* PERCENTAGE_TOKEN */,\n number: 100,\n flags: FLAG_INTEGER\n};\nvar getAbsoluteValueForTuple = function (tuple, width, height) {\n var x = tuple[0], y = tuple[1];\n return [getAbsoluteValue(x, width), getAbsoluteValue(typeof y !== 'undefined' ? y : x, height)];\n};\nvar getAbsoluteValue = function (token, parent) {\n if (token.type === 16 /* PERCENTAGE_TOKEN */) {\n return (token.number / 100) * parent;\n }\n if (isDimensionToken(token)) {\n switch (token.unit) {\n case 'rem':\n case 'em':\n return 16 * token.number; // TODO use correct font-size\n case 'px':\n default:\n return token.number;\n }\n }\n return token.number;\n};\n\nvar DEG = 'deg';\nvar GRAD = 'grad';\nvar RAD = 'rad';\nvar TURN = 'turn';\nvar angle = {\n name: 'angle',\n parse: function (_context, value) {\n if (value.type === 15 /* DIMENSION_TOKEN */) {\n switch (value.unit) {\n case DEG:\n return (Math.PI * value.number) / 180;\n case GRAD:\n return (Math.PI / 200) * value.number;\n case RAD:\n return value.number;\n case TURN:\n return Math.PI * 2 * value.number;\n }\n }\n throw new Error(\"Unsupported angle type\");\n }\n};\nvar isAngle = function (value) {\n if (value.type === 15 /* DIMENSION_TOKEN */) {\n if (value.unit === DEG || value.unit === GRAD || value.unit === RAD || value.unit === TURN) {\n return true;\n }\n }\n return false;\n};\nvar parseNamedSide = function (tokens) {\n var sideOrCorner = tokens\n .filter(isIdentToken)\n .map(function (ident) { return ident.value; })\n .join(' ');\n switch (sideOrCorner) {\n case 'to bottom right':\n case 'to right bottom':\n case 'left top':\n case 'top left':\n return [ZERO_LENGTH, ZERO_LENGTH];\n case 'to top':\n case 'bottom':\n return deg(0);\n case 'to bottom left':\n case 'to left bottom':\n case 'right top':\n case 'top right':\n return [ZERO_LENGTH, HUNDRED_PERCENT];\n case 'to right':\n case 'left':\n return deg(90);\n case 'to top left':\n case 'to left top':\n case 'right bottom':\n case 'bottom right':\n return [HUNDRED_PERCENT, HUNDRED_PERCENT];\n case 'to bottom':\n case 'top':\n return deg(180);\n case 'to top right':\n case 'to right top':\n case 'left bottom':\n case 'bottom left':\n return [HUNDRED_PERCENT, ZERO_LENGTH];\n case 'to left':\n case 'right':\n return deg(270);\n }\n return 0;\n};\nvar deg = function (deg) { return (Math.PI * deg) / 180; };\n\nvar color$1 = {\n name: 'color',\n parse: function (context, value) {\n if (value.type === 18 /* FUNCTION */) {\n var colorFunction = SUPPORTED_COLOR_FUNCTIONS[value.name];\n if (typeof colorFunction === 'undefined') {\n throw new Error(\"Attempting to parse an unsupported color function \\\"\" + value.name + \"\\\"\");\n }\n return colorFunction(context, value.values);\n }\n if (value.type === 5 /* HASH_TOKEN */) {\n if (value.value.length === 3) {\n var r = value.value.substring(0, 1);\n var g = value.value.substring(1, 2);\n var b = value.value.substring(2, 3);\n return pack(parseInt(r + r, 16), parseInt(g + g, 16), parseInt(b + b, 16), 1);\n }\n if (value.value.length === 4) {\n var r = value.value.substring(0, 1);\n var g = value.value.substring(1, 2);\n var b = value.value.substring(2, 3);\n var a = value.value.substring(3, 4);\n return pack(parseInt(r + r, 16), parseInt(g + g, 16), parseInt(b + b, 16), parseInt(a + a, 16) / 255);\n }\n if (value.value.length === 6) {\n var r = value.value.substring(0, 2);\n var g = value.value.substring(2, 4);\n var b = value.value.substring(4, 6);\n return pack(parseInt(r, 16), parseInt(g, 16), parseInt(b, 16), 1);\n }\n if (value.value.length === 8) {\n var r = value.value.substring(0, 2);\n var g = value.value.substring(2, 4);\n var b = value.value.substring(4, 6);\n var a = value.value.substring(6, 8);\n return pack(parseInt(r, 16), parseInt(g, 16), parseInt(b, 16), parseInt(a, 16) / 255);\n }\n }\n if (value.type === 20 /* IDENT_TOKEN */) {\n var namedColor = COLORS[value.value.toUpperCase()];\n if (typeof namedColor !== 'undefined') {\n return namedColor;\n }\n }\n return COLORS.TRANSPARENT;\n }\n};\nvar isTransparent = function (color) { return (0xff & color) === 0; };\nvar asString = function (color) {\n var alpha = 0xff & color;\n var blue = 0xff & (color >> 8);\n var green = 0xff & (color >> 16);\n var red = 0xff & (color >> 24);\n return alpha < 255 ? \"rgba(\" + red + \",\" + green + \",\" + blue + \",\" + alpha / 255 + \")\" : \"rgb(\" + red + \",\" + green + \",\" + blue + \")\";\n};\nvar pack = function (r, g, b, a) {\n return ((r << 24) | (g << 16) | (b << 8) | (Math.round(a * 255) << 0)) >>> 0;\n};\nvar getTokenColorValue = function (token, i) {\n if (token.type === 17 /* NUMBER_TOKEN */) {\n return token.number;\n }\n if (token.type === 16 /* PERCENTAGE_TOKEN */) {\n var max = i === 3 ? 1 : 255;\n return i === 3 ? (token.number / 100) * max : Math.round((token.number / 100) * max);\n }\n return 0;\n};\nvar rgb = function (_context, args) {\n var tokens = args.filter(nonFunctionArgSeparator);\n if (tokens.length === 3) {\n var _a = tokens.map(getTokenColorValue), r = _a[0], g = _a[1], b = _a[2];\n return pack(r, g, b, 1);\n }\n if (tokens.length === 4) {\n var _b = tokens.map(getTokenColorValue), r = _b[0], g = _b[1], b = _b[2], a = _b[3];\n return pack(r, g, b, a);\n }\n return 0;\n};\nfunction hue2rgb(t1, t2, hue) {\n if (hue < 0) {\n hue += 1;\n }\n if (hue >= 1) {\n hue -= 1;\n }\n if (hue < 1 / 6) {\n return (t2 - t1) * hue * 6 + t1;\n }\n else if (hue < 1 / 2) {\n return t2;\n }\n else if (hue < 2 / 3) {\n return (t2 - t1) * 6 * (2 / 3 - hue) + t1;\n }\n else {\n return t1;\n }\n}\nvar hsl = function (context, args) {\n var tokens = args.filter(nonFunctionArgSeparator);\n var hue = tokens[0], saturation = tokens[1], lightness = tokens[2], alpha = tokens[3];\n var h = (hue.type === 17 /* NUMBER_TOKEN */ ? deg(hue.number) : angle.parse(context, hue)) / (Math.PI * 2);\n var s = isLengthPercentage(saturation) ? saturation.number / 100 : 0;\n var l = isLengthPercentage(lightness) ? lightness.number / 100 : 0;\n var a = typeof alpha !== 'undefined' && isLengthPercentage(alpha) ? getAbsoluteValue(alpha, 1) : 1;\n if (s === 0) {\n return pack(l * 255, l * 255, l * 255, 1);\n }\n var t2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n var t1 = l * 2 - t2;\n var r = hue2rgb(t1, t2, h + 1 / 3);\n var g = hue2rgb(t1, t2, h);\n var b = hue2rgb(t1, t2, h - 1 / 3);\n return pack(r * 255, g * 255, b * 255, a);\n};\nvar SUPPORTED_COLOR_FUNCTIONS = {\n hsl: hsl,\n hsla: hsl,\n rgb: rgb,\n rgba: rgb\n};\nvar parseColor = function (context, value) {\n return color$1.parse(context, Parser.create(value).parseComponentValue());\n};\nvar COLORS = {\n ALICEBLUE: 0xf0f8ffff,\n ANTIQUEWHITE: 0xfaebd7ff,\n AQUA: 0x00ffffff,\n AQUAMARINE: 0x7fffd4ff,\n AZURE: 0xf0ffffff,\n BEIGE: 0xf5f5dcff,\n BISQUE: 0xffe4c4ff,\n BLACK: 0x000000ff,\n BLANCHEDALMOND: 0xffebcdff,\n BLUE: 0x0000ffff,\n BLUEVIOLET: 0x8a2be2ff,\n BROWN: 0xa52a2aff,\n BURLYWOOD: 0xdeb887ff,\n CADETBLUE: 0x5f9ea0ff,\n CHARTREUSE: 0x7fff00ff,\n CHOCOLATE: 0xd2691eff,\n CORAL: 0xff7f50ff,\n CORNFLOWERBLUE: 0x6495edff,\n CORNSILK: 0xfff8dcff,\n CRIMSON: 0xdc143cff,\n CYAN: 0x00ffffff,\n DARKBLUE: 0x00008bff,\n DARKCYAN: 0x008b8bff,\n DARKGOLDENROD: 0xb886bbff,\n DARKGRAY: 0xa9a9a9ff,\n DARKGREEN: 0x006400ff,\n DARKGREY: 0xa9a9a9ff,\n DARKKHAKI: 0xbdb76bff,\n DARKMAGENTA: 0x8b008bff,\n DARKOLIVEGREEN: 0x556b2fff,\n DARKORANGE: 0xff8c00ff,\n DARKORCHID: 0x9932ccff,\n DARKRED: 0x8b0000ff,\n DARKSALMON: 0xe9967aff,\n DARKSEAGREEN: 0x8fbc8fff,\n DARKSLATEBLUE: 0x483d8bff,\n DARKSLATEGRAY: 0x2f4f4fff,\n DARKSLATEGREY: 0x2f4f4fff,\n DARKTURQUOISE: 0x00ced1ff,\n DARKVIOLET: 0x9400d3ff,\n DEEPPINK: 0xff1493ff,\n DEEPSKYBLUE: 0x00bfffff,\n DIMGRAY: 0x696969ff,\n DIMGREY: 0x696969ff,\n DODGERBLUE: 0x1e90ffff,\n FIREBRICK: 0xb22222ff,\n FLORALWHITE: 0xfffaf0ff,\n FORESTGREEN: 0x228b22ff,\n FUCHSIA: 0xff00ffff,\n GAINSBORO: 0xdcdcdcff,\n GHOSTWHITE: 0xf8f8ffff,\n GOLD: 0xffd700ff,\n GOLDENROD: 0xdaa520ff,\n GRAY: 0x808080ff,\n GREEN: 0x008000ff,\n GREENYELLOW: 0xadff2fff,\n GREY: 0x808080ff,\n HONEYDEW: 0xf0fff0ff,\n HOTPINK: 0xff69b4ff,\n INDIANRED: 0xcd5c5cff,\n INDIGO: 0x4b0082ff,\n IVORY: 0xfffff0ff,\n KHAKI: 0xf0e68cff,\n LAVENDER: 0xe6e6faff,\n LAVENDERBLUSH: 0xfff0f5ff,\n LAWNGREEN: 0x7cfc00ff,\n LEMONCHIFFON: 0xfffacdff,\n LIGHTBLUE: 0xadd8e6ff,\n LIGHTCORAL: 0xf08080ff,\n LIGHTCYAN: 0xe0ffffff,\n LIGHTGOLDENRODYELLOW: 0xfafad2ff,\n LIGHTGRAY: 0xd3d3d3ff,\n LIGHTGREEN: 0x90ee90ff,\n LIGHTGREY: 0xd3d3d3ff,\n LIGHTPINK: 0xffb6c1ff,\n LIGHTSALMON: 0xffa07aff,\n LIGHTSEAGREEN: 0x20b2aaff,\n LIGHTSKYBLUE: 0x87cefaff,\n LIGHTSLATEGRAY: 0x778899ff,\n LIGHTSLATEGREY: 0x778899ff,\n LIGHTSTEELBLUE: 0xb0c4deff,\n LIGHTYELLOW: 0xffffe0ff,\n LIME: 0x00ff00ff,\n LIMEGREEN: 0x32cd32ff,\n LINEN: 0xfaf0e6ff,\n MAGENTA: 0xff00ffff,\n MAROON: 0x800000ff,\n MEDIUMAQUAMARINE: 0x66cdaaff,\n MEDIUMBLUE: 0x0000cdff,\n MEDIUMORCHID: 0xba55d3ff,\n MEDIUMPURPLE: 0x9370dbff,\n MEDIUMSEAGREEN: 0x3cb371ff,\n MEDIUMSLATEBLUE: 0x7b68eeff,\n MEDIUMSPRINGGREEN: 0x00fa9aff,\n MEDIUMTURQUOISE: 0x48d1ccff,\n MEDIUMVIOLETRED: 0xc71585ff,\n MIDNIGHTBLUE: 0x191970ff,\n MINTCREAM: 0xf5fffaff,\n MISTYROSE: 0xffe4e1ff,\n MOCCASIN: 0xffe4b5ff,\n NAVAJOWHITE: 0xffdeadff,\n NAVY: 0x000080ff,\n OLDLACE: 0xfdf5e6ff,\n OLIVE: 0x808000ff,\n OLIVEDRAB: 0x6b8e23ff,\n ORANGE: 0xffa500ff,\n ORANGERED: 0xff4500ff,\n ORCHID: 0xda70d6ff,\n PALEGOLDENROD: 0xeee8aaff,\n PALEGREEN: 0x98fb98ff,\n PALETURQUOISE: 0xafeeeeff,\n PALEVIOLETRED: 0xdb7093ff,\n PAPAYAWHIP: 0xffefd5ff,\n PEACHPUFF: 0xffdab9ff,\n PERU: 0xcd853fff,\n PINK: 0xffc0cbff,\n PLUM: 0xdda0ddff,\n POWDERBLUE: 0xb0e0e6ff,\n PURPLE: 0x800080ff,\n REBECCAPURPLE: 0x663399ff,\n RED: 0xff0000ff,\n ROSYBROWN: 0xbc8f8fff,\n ROYALBLUE: 0x4169e1ff,\n SADDLEBROWN: 0x8b4513ff,\n SALMON: 0xfa8072ff,\n SANDYBROWN: 0xf4a460ff,\n SEAGREEN: 0x2e8b57ff,\n SEASHELL: 0xfff5eeff,\n SIENNA: 0xa0522dff,\n SILVER: 0xc0c0c0ff,\n SKYBLUE: 0x87ceebff,\n SLATEBLUE: 0x6a5acdff,\n SLATEGRAY: 0x708090ff,\n SLATEGREY: 0x708090ff,\n SNOW: 0xfffafaff,\n SPRINGGREEN: 0x00ff7fff,\n STEELBLUE: 0x4682b4ff,\n TAN: 0xd2b48cff,\n TEAL: 0x008080ff,\n THISTLE: 0xd8bfd8ff,\n TOMATO: 0xff6347ff,\n TRANSPARENT: 0x00000000,\n TURQUOISE: 0x40e0d0ff,\n VIOLET: 0xee82eeff,\n WHEAT: 0xf5deb3ff,\n WHITE: 0xffffffff,\n WHITESMOKE: 0xf5f5f5ff,\n YELLOW: 0xffff00ff,\n YELLOWGREEN: 0x9acd32ff\n};\n\nvar backgroundClip = {\n name: 'background-clip',\n initialValue: 'border-box',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n return tokens.map(function (token) {\n if (isIdentToken(token)) {\n switch (token.value) {\n case 'padding-box':\n return 1 /* PADDING_BOX */;\n case 'content-box':\n return 2 /* CONTENT_BOX */;\n }\n }\n return 0 /* BORDER_BOX */;\n });\n }\n};\n\nvar backgroundColor = {\n name: \"background-color\",\n initialValue: 'transparent',\n prefix: false,\n type: 3 /* TYPE_VALUE */,\n format: 'color'\n};\n\nvar parseColorStop = function (context, args) {\n var color = color$1.parse(context, args[0]);\n var stop = args[1];\n return stop && isLengthPercentage(stop) ? { color: color, stop: stop } : { color: color, stop: null };\n};\nvar processColorStops = function (stops, lineLength) {\n var first = stops[0];\n var last = stops[stops.length - 1];\n if (first.stop === null) {\n first.stop = ZERO_LENGTH;\n }\n if (last.stop === null) {\n last.stop = HUNDRED_PERCENT;\n }\n var processStops = [];\n var previous = 0;\n for (var i = 0; i < stops.length; i++) {\n var stop_1 = stops[i].stop;\n if (stop_1 !== null) {\n var absoluteValue = getAbsoluteValue(stop_1, lineLength);\n if (absoluteValue > previous) {\n processStops.push(absoluteValue);\n }\n else {\n processStops.push(previous);\n }\n previous = absoluteValue;\n }\n else {\n processStops.push(null);\n }\n }\n var gapBegin = null;\n for (var i = 0; i < processStops.length; i++) {\n var stop_2 = processStops[i];\n if (stop_2 === null) {\n if (gapBegin === null) {\n gapBegin = i;\n }\n }\n else if (gapBegin !== null) {\n var gapLength = i - gapBegin;\n var beforeGap = processStops[gapBegin - 1];\n var gapValue = (stop_2 - beforeGap) / (gapLength + 1);\n for (var g = 1; g <= gapLength; g++) {\n processStops[gapBegin + g - 1] = gapValue * g;\n }\n gapBegin = null;\n }\n }\n return stops.map(function (_a, i) {\n var color = _a.color;\n return { color: color, stop: Math.max(Math.min(1, processStops[i] / lineLength), 0) };\n });\n};\nvar getAngleFromCorner = function (corner, width, height) {\n var centerX = width / 2;\n var centerY = height / 2;\n var x = getAbsoluteValue(corner[0], width) - centerX;\n var y = centerY - getAbsoluteValue(corner[1], height);\n return (Math.atan2(y, x) + Math.PI * 2) % (Math.PI * 2);\n};\nvar calculateGradientDirection = function (angle, width, height) {\n var radian = typeof angle === 'number' ? angle : getAngleFromCorner(angle, width, height);\n var lineLength = Math.abs(width * Math.sin(radian)) + Math.abs(height * Math.cos(radian));\n var halfWidth = width / 2;\n var halfHeight = height / 2;\n var halfLineLength = lineLength / 2;\n var yDiff = Math.sin(radian - Math.PI / 2) * halfLineLength;\n var xDiff = Math.cos(radian - Math.PI / 2) * halfLineLength;\n return [lineLength, halfWidth - xDiff, halfWidth + xDiff, halfHeight - yDiff, halfHeight + yDiff];\n};\nvar distance = function (a, b) { return Math.sqrt(a * a + b * b); };\nvar findCorner = function (width, height, x, y, closest) {\n var corners = [\n [0, 0],\n [0, height],\n [width, 0],\n [width, height]\n ];\n return corners.reduce(function (stat, corner) {\n var cx = corner[0], cy = corner[1];\n var d = distance(x - cx, y - cy);\n if (closest ? d < stat.optimumDistance : d > stat.optimumDistance) {\n return {\n optimumCorner: corner,\n optimumDistance: d\n };\n }\n return stat;\n }, {\n optimumDistance: closest ? Infinity : -Infinity,\n optimumCorner: null\n }).optimumCorner;\n};\nvar calculateRadius = function (gradient, x, y, width, height) {\n var rx = 0;\n var ry = 0;\n switch (gradient.size) {\n case 0 /* CLOSEST_SIDE */:\n // The ending shape is sized so that that it exactly meets the side of the gradient box closest to the gradient’s center.\n // If the shape is an ellipse, it exactly meets the closest side in each dimension.\n if (gradient.shape === 0 /* CIRCLE */) {\n rx = ry = Math.min(Math.abs(x), Math.abs(x - width), Math.abs(y), Math.abs(y - height));\n }\n else if (gradient.shape === 1 /* ELLIPSE */) {\n rx = Math.min(Math.abs(x), Math.abs(x - width));\n ry = Math.min(Math.abs(y), Math.abs(y - height));\n }\n break;\n case 2 /* CLOSEST_CORNER */:\n // The ending shape is sized so that that it passes through the corner of the gradient box closest to the gradient’s center.\n // If the shape is an ellipse, the ending shape is given the same aspect-ratio it would have if closest-side were specified.\n if (gradient.shape === 0 /* CIRCLE */) {\n rx = ry = Math.min(distance(x, y), distance(x, y - height), distance(x - width, y), distance(x - width, y - height));\n }\n else if (gradient.shape === 1 /* ELLIPSE */) {\n // Compute the ratio ry/rx (which is to be the same as for \"closest-side\")\n var c = Math.min(Math.abs(y), Math.abs(y - height)) / Math.min(Math.abs(x), Math.abs(x - width));\n var _a = findCorner(width, height, x, y, true), cx = _a[0], cy = _a[1];\n rx = distance(cx - x, (cy - y) / c);\n ry = c * rx;\n }\n break;\n case 1 /* FARTHEST_SIDE */:\n // Same as closest-side, except the ending shape is sized based on the farthest side(s)\n if (gradient.shape === 0 /* CIRCLE */) {\n rx = ry = Math.max(Math.abs(x), Math.abs(x - width), Math.abs(y), Math.abs(y - height));\n }\n else if (gradient.shape === 1 /* ELLIPSE */) {\n rx = Math.max(Math.abs(x), Math.abs(x - width));\n ry = Math.max(Math.abs(y), Math.abs(y - height));\n }\n break;\n case 3 /* FARTHEST_CORNER */:\n // Same as closest-corner, except the ending shape is sized based on the farthest corner.\n // If the shape is an ellipse, the ending shape is given the same aspect ratio it would have if farthest-side were specified.\n if (gradient.shape === 0 /* CIRCLE */) {\n rx = ry = Math.max(distance(x, y), distance(x, y - height), distance(x - width, y), distance(x - width, y - height));\n }\n else if (gradient.shape === 1 /* ELLIPSE */) {\n // Compute the ratio ry/rx (which is to be the same as for \"farthest-side\")\n var c = Math.max(Math.abs(y), Math.abs(y - height)) / Math.max(Math.abs(x), Math.abs(x - width));\n var _b = findCorner(width, height, x, y, false), cx = _b[0], cy = _b[1];\n rx = distance(cx - x, (cy - y) / c);\n ry = c * rx;\n }\n break;\n }\n if (Array.isArray(gradient.size)) {\n rx = getAbsoluteValue(gradient.size[0], width);\n ry = gradient.size.length === 2 ? getAbsoluteValue(gradient.size[1], height) : rx;\n }\n return [rx, ry];\n};\n\nvar linearGradient = function (context, tokens) {\n var angle$1 = deg(180);\n var stops = [];\n parseFunctionArgs(tokens).forEach(function (arg, i) {\n if (i === 0) {\n var firstToken = arg[0];\n if (firstToken.type === 20 /* IDENT_TOKEN */ && firstToken.value === 'to') {\n angle$1 = parseNamedSide(arg);\n return;\n }\n else if (isAngle(firstToken)) {\n angle$1 = angle.parse(context, firstToken);\n return;\n }\n }\n var colorStop = parseColorStop(context, arg);\n stops.push(colorStop);\n });\n return { angle: angle$1, stops: stops, type: 1 /* LINEAR_GRADIENT */ };\n};\n\nvar prefixLinearGradient = function (context, tokens) {\n var angle$1 = deg(180);\n var stops = [];\n parseFunctionArgs(tokens).forEach(function (arg, i) {\n if (i === 0) {\n var firstToken = arg[0];\n if (firstToken.type === 20 /* IDENT_TOKEN */ &&\n ['top', 'left', 'right', 'bottom'].indexOf(firstToken.value) !== -1) {\n angle$1 = parseNamedSide(arg);\n return;\n }\n else if (isAngle(firstToken)) {\n angle$1 = (angle.parse(context, firstToken) + deg(270)) % deg(360);\n return;\n }\n }\n var colorStop = parseColorStop(context, arg);\n stops.push(colorStop);\n });\n return {\n angle: angle$1,\n stops: stops,\n type: 1 /* LINEAR_GRADIENT */\n };\n};\n\nvar webkitGradient = function (context, tokens) {\n var angle = deg(180);\n var stops = [];\n var type = 1 /* LINEAR_GRADIENT */;\n var shape = 0 /* CIRCLE */;\n var size = 3 /* FARTHEST_CORNER */;\n var position = [];\n parseFunctionArgs(tokens).forEach(function (arg, i) {\n var firstToken = arg[0];\n if (i === 0) {\n if (isIdentToken(firstToken) && firstToken.value === 'linear') {\n type = 1 /* LINEAR_GRADIENT */;\n return;\n }\n else if (isIdentToken(firstToken) && firstToken.value === 'radial') {\n type = 2 /* RADIAL_GRADIENT */;\n return;\n }\n }\n if (firstToken.type === 18 /* FUNCTION */) {\n if (firstToken.name === 'from') {\n var color = color$1.parse(context, firstToken.values[0]);\n stops.push({ stop: ZERO_LENGTH, color: color });\n }\n else if (firstToken.name === 'to') {\n var color = color$1.parse(context, firstToken.values[0]);\n stops.push({ stop: HUNDRED_PERCENT, color: color });\n }\n else if (firstToken.name === 'color-stop') {\n var values = firstToken.values.filter(nonFunctionArgSeparator);\n if (values.length === 2) {\n var color = color$1.parse(context, values[1]);\n var stop_1 = values[0];\n if (isNumberToken(stop_1)) {\n stops.push({\n stop: { type: 16 /* PERCENTAGE_TOKEN */, number: stop_1.number * 100, flags: stop_1.flags },\n color: color\n });\n }\n }\n }\n }\n });\n return type === 1 /* LINEAR_GRADIENT */\n ? {\n angle: (angle + deg(180)) % deg(360),\n stops: stops,\n type: type\n }\n : { size: size, shape: shape, stops: stops, position: position, type: type };\n};\n\nvar CLOSEST_SIDE = 'closest-side';\nvar FARTHEST_SIDE = 'farthest-side';\nvar CLOSEST_CORNER = 'closest-corner';\nvar FARTHEST_CORNER = 'farthest-corner';\nvar CIRCLE = 'circle';\nvar ELLIPSE = 'ellipse';\nvar COVER = 'cover';\nvar CONTAIN = 'contain';\nvar radialGradient = function (context, tokens) {\n var shape = 0 /* CIRCLE */;\n var size = 3 /* FARTHEST_CORNER */;\n var stops = [];\n var position = [];\n parseFunctionArgs(tokens).forEach(function (arg, i) {\n var isColorStop = true;\n if (i === 0) {\n var isAtPosition_1 = false;\n isColorStop = arg.reduce(function (acc, token) {\n if (isAtPosition_1) {\n if (isIdentToken(token)) {\n switch (token.value) {\n case 'center':\n position.push(FIFTY_PERCENT);\n return acc;\n case 'top':\n case 'left':\n position.push(ZERO_LENGTH);\n return acc;\n case 'right':\n case 'bottom':\n position.push(HUNDRED_PERCENT);\n return acc;\n }\n }\n else if (isLengthPercentage(token) || isLength(token)) {\n position.push(token);\n }\n }\n else if (isIdentToken(token)) {\n switch (token.value) {\n case CIRCLE:\n shape = 0 /* CIRCLE */;\n return false;\n case ELLIPSE:\n shape = 1 /* ELLIPSE */;\n return false;\n case 'at':\n isAtPosition_1 = true;\n return false;\n case CLOSEST_SIDE:\n size = 0 /* CLOSEST_SIDE */;\n return false;\n case COVER:\n case FARTHEST_SIDE:\n size = 1 /* FARTHEST_SIDE */;\n return false;\n case CONTAIN:\n case CLOSEST_CORNER:\n size = 2 /* CLOSEST_CORNER */;\n return false;\n case FARTHEST_CORNER:\n size = 3 /* FARTHEST_CORNER */;\n return false;\n }\n }\n else if (isLength(token) || isLengthPercentage(token)) {\n if (!Array.isArray(size)) {\n size = [];\n }\n size.push(token);\n return false;\n }\n return acc;\n }, isColorStop);\n }\n if (isColorStop) {\n var colorStop = parseColorStop(context, arg);\n stops.push(colorStop);\n }\n });\n return { size: size, shape: shape, stops: stops, position: position, type: 2 /* RADIAL_GRADIENT */ };\n};\n\nvar prefixRadialGradient = function (context, tokens) {\n var shape = 0 /* CIRCLE */;\n var size = 3 /* FARTHEST_CORNER */;\n var stops = [];\n var position = [];\n parseFunctionArgs(tokens).forEach(function (arg, i) {\n var isColorStop = true;\n if (i === 0) {\n isColorStop = arg.reduce(function (acc, token) {\n if (isIdentToken(token)) {\n switch (token.value) {\n case 'center':\n position.push(FIFTY_PERCENT);\n return false;\n case 'top':\n case 'left':\n position.push(ZERO_LENGTH);\n return false;\n case 'right':\n case 'bottom':\n position.push(HUNDRED_PERCENT);\n return false;\n }\n }\n else if (isLengthPercentage(token) || isLength(token)) {\n position.push(token);\n return false;\n }\n return acc;\n }, isColorStop);\n }\n else if (i === 1) {\n isColorStop = arg.reduce(function (acc, token) {\n if (isIdentToken(token)) {\n switch (token.value) {\n case CIRCLE:\n shape = 0 /* CIRCLE */;\n return false;\n case ELLIPSE:\n shape = 1 /* ELLIPSE */;\n return false;\n case CONTAIN:\n case CLOSEST_SIDE:\n size = 0 /* CLOSEST_SIDE */;\n return false;\n case FARTHEST_SIDE:\n size = 1 /* FARTHEST_SIDE */;\n return false;\n case CLOSEST_CORNER:\n size = 2 /* CLOSEST_CORNER */;\n return false;\n case COVER:\n case FARTHEST_CORNER:\n size = 3 /* FARTHEST_CORNER */;\n return false;\n }\n }\n else if (isLength(token) || isLengthPercentage(token)) {\n if (!Array.isArray(size)) {\n size = [];\n }\n size.push(token);\n return false;\n }\n return acc;\n }, isColorStop);\n }\n if (isColorStop) {\n var colorStop = parseColorStop(context, arg);\n stops.push(colorStop);\n }\n });\n return { size: size, shape: shape, stops: stops, position: position, type: 2 /* RADIAL_GRADIENT */ };\n};\n\nvar isLinearGradient = function (background) {\n return background.type === 1 /* LINEAR_GRADIENT */;\n};\nvar isRadialGradient = function (background) {\n return background.type === 2 /* RADIAL_GRADIENT */;\n};\nvar image = {\n name: 'image',\n parse: function (context, value) {\n if (value.type === 22 /* URL_TOKEN */) {\n var image_1 = { url: value.value, type: 0 /* URL */ };\n context.cache.addImage(value.value);\n return image_1;\n }\n if (value.type === 18 /* FUNCTION */) {\n var imageFunction = SUPPORTED_IMAGE_FUNCTIONS[value.name];\n if (typeof imageFunction === 'undefined') {\n throw new Error(\"Attempting to parse an unsupported image function \\\"\" + value.name + \"\\\"\");\n }\n return imageFunction(context, value.values);\n }\n throw new Error(\"Unsupported image type \" + value.type);\n }\n};\nfunction isSupportedImage(value) {\n return (!(value.type === 20 /* IDENT_TOKEN */ && value.value === 'none') &&\n (value.type !== 18 /* FUNCTION */ || !!SUPPORTED_IMAGE_FUNCTIONS[value.name]));\n}\nvar SUPPORTED_IMAGE_FUNCTIONS = {\n 'linear-gradient': linearGradient,\n '-moz-linear-gradient': prefixLinearGradient,\n '-ms-linear-gradient': prefixLinearGradient,\n '-o-linear-gradient': prefixLinearGradient,\n '-webkit-linear-gradient': prefixLinearGradient,\n 'radial-gradient': radialGradient,\n '-moz-radial-gradient': prefixRadialGradient,\n '-ms-radial-gradient': prefixRadialGradient,\n '-o-radial-gradient': prefixRadialGradient,\n '-webkit-radial-gradient': prefixRadialGradient,\n '-webkit-gradient': webkitGradient\n};\n\nvar backgroundImage = {\n name: 'background-image',\n initialValue: 'none',\n type: 1 /* LIST */,\n prefix: false,\n parse: function (context, tokens) {\n if (tokens.length === 0) {\n return [];\n }\n var first = tokens[0];\n if (first.type === 20 /* IDENT_TOKEN */ && first.value === 'none') {\n return [];\n }\n return tokens\n .filter(function (value) { return nonFunctionArgSeparator(value) && isSupportedImage(value); })\n .map(function (value) { return image.parse(context, value); });\n }\n};\n\nvar backgroundOrigin = {\n name: 'background-origin',\n initialValue: 'border-box',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n return tokens.map(function (token) {\n if (isIdentToken(token)) {\n switch (token.value) {\n case 'padding-box':\n return 1 /* PADDING_BOX */;\n case 'content-box':\n return 2 /* CONTENT_BOX */;\n }\n }\n return 0 /* BORDER_BOX */;\n });\n }\n};\n\nvar backgroundPosition = {\n name: 'background-position',\n initialValue: '0% 0%',\n type: 1 /* LIST */,\n prefix: false,\n parse: function (_context, tokens) {\n return parseFunctionArgs(tokens)\n .map(function (values) { return values.filter(isLengthPercentage); })\n .map(parseLengthPercentageTuple);\n }\n};\n\nvar backgroundRepeat = {\n name: 'background-repeat',\n initialValue: 'repeat',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n return parseFunctionArgs(tokens)\n .map(function (values) {\n return values\n .filter(isIdentToken)\n .map(function (token) { return token.value; })\n .join(' ');\n })\n .map(parseBackgroundRepeat);\n }\n};\nvar parseBackgroundRepeat = function (value) {\n switch (value) {\n case 'no-repeat':\n return 1 /* NO_REPEAT */;\n case 'repeat-x':\n case 'repeat no-repeat':\n return 2 /* REPEAT_X */;\n case 'repeat-y':\n case 'no-repeat repeat':\n return 3 /* REPEAT_Y */;\n case 'repeat':\n default:\n return 0 /* REPEAT */;\n }\n};\n\nvar BACKGROUND_SIZE;\n(function (BACKGROUND_SIZE) {\n BACKGROUND_SIZE[\"AUTO\"] = \"auto\";\n BACKGROUND_SIZE[\"CONTAIN\"] = \"contain\";\n BACKGROUND_SIZE[\"COVER\"] = \"cover\";\n})(BACKGROUND_SIZE || (BACKGROUND_SIZE = {}));\nvar backgroundSize = {\n name: 'background-size',\n initialValue: '0',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n return parseFunctionArgs(tokens).map(function (values) { return values.filter(isBackgroundSizeInfoToken); });\n }\n};\nvar isBackgroundSizeInfoToken = function (value) {\n return isIdentToken(value) || isLengthPercentage(value);\n};\n\nvar borderColorForSide = function (side) { return ({\n name: \"border-\" + side + \"-color\",\n initialValue: 'transparent',\n prefix: false,\n type: 3 /* TYPE_VALUE */,\n format: 'color'\n}); };\nvar borderTopColor = borderColorForSide('top');\nvar borderRightColor = borderColorForSide('right');\nvar borderBottomColor = borderColorForSide('bottom');\nvar borderLeftColor = borderColorForSide('left');\n\nvar borderRadiusForSide = function (side) { return ({\n name: \"border-radius-\" + side,\n initialValue: '0 0',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n return parseLengthPercentageTuple(tokens.filter(isLengthPercentage));\n }\n}); };\nvar borderTopLeftRadius = borderRadiusForSide('top-left');\nvar borderTopRightRadius = borderRadiusForSide('top-right');\nvar borderBottomRightRadius = borderRadiusForSide('bottom-right');\nvar borderBottomLeftRadius = borderRadiusForSide('bottom-left');\n\nvar borderStyleForSide = function (side) { return ({\n name: \"border-\" + side + \"-style\",\n initialValue: 'solid',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, style) {\n switch (style) {\n case 'none':\n return 0 /* NONE */;\n case 'dashed':\n return 2 /* DASHED */;\n case 'dotted':\n return 3 /* DOTTED */;\n case 'double':\n return 4 /* DOUBLE */;\n }\n return 1 /* SOLID */;\n }\n}); };\nvar borderTopStyle = borderStyleForSide('top');\nvar borderRightStyle = borderStyleForSide('right');\nvar borderBottomStyle = borderStyleForSide('bottom');\nvar borderLeftStyle = borderStyleForSide('left');\n\nvar borderWidthForSide = function (side) { return ({\n name: \"border-\" + side + \"-width\",\n initialValue: '0',\n type: 0 /* VALUE */,\n prefix: false,\n parse: function (_context, token) {\n if (isDimensionToken(token)) {\n return token.number;\n }\n return 0;\n }\n}); };\nvar borderTopWidth = borderWidthForSide('top');\nvar borderRightWidth = borderWidthForSide('right');\nvar borderBottomWidth = borderWidthForSide('bottom');\nvar borderLeftWidth = borderWidthForSide('left');\n\nvar color = {\n name: \"color\",\n initialValue: 'transparent',\n prefix: false,\n type: 3 /* TYPE_VALUE */,\n format: 'color'\n};\n\nvar direction = {\n name: 'direction',\n initialValue: 'ltr',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, direction) {\n switch (direction) {\n case 'rtl':\n return 1 /* RTL */;\n case 'ltr':\n default:\n return 0 /* LTR */;\n }\n }\n};\n\nvar display = {\n name: 'display',\n initialValue: 'inline-block',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n return tokens.filter(isIdentToken).reduce(function (bit, token) {\n return bit | parseDisplayValue(token.value);\n }, 0 /* NONE */);\n }\n};\nvar parseDisplayValue = function (display) {\n switch (display) {\n case 'block':\n case '-webkit-box':\n return 2 /* BLOCK */;\n case 'inline':\n return 4 /* INLINE */;\n case 'run-in':\n return 8 /* RUN_IN */;\n case 'flow':\n return 16 /* FLOW */;\n case 'flow-root':\n return 32 /* FLOW_ROOT */;\n case 'table':\n return 64 /* TABLE */;\n case 'flex':\n case '-webkit-flex':\n return 128 /* FLEX */;\n case 'grid':\n case '-ms-grid':\n return 256 /* GRID */;\n case 'ruby':\n return 512 /* RUBY */;\n case 'subgrid':\n return 1024 /* SUBGRID */;\n case 'list-item':\n return 2048 /* LIST_ITEM */;\n case 'table-row-group':\n return 4096 /* TABLE_ROW_GROUP */;\n case 'table-header-group':\n return 8192 /* TABLE_HEADER_GROUP */;\n case 'table-footer-group':\n return 16384 /* TABLE_FOOTER_GROUP */;\n case 'table-row':\n return 32768 /* TABLE_ROW */;\n case 'table-cell':\n return 65536 /* TABLE_CELL */;\n case 'table-column-group':\n return 131072 /* TABLE_COLUMN_GROUP */;\n case 'table-column':\n return 262144 /* TABLE_COLUMN */;\n case 'table-caption':\n return 524288 /* TABLE_CAPTION */;\n case 'ruby-base':\n return 1048576 /* RUBY_BASE */;\n case 'ruby-text':\n return 2097152 /* RUBY_TEXT */;\n case 'ruby-base-container':\n return 4194304 /* RUBY_BASE_CONTAINER */;\n case 'ruby-text-container':\n return 8388608 /* RUBY_TEXT_CONTAINER */;\n case 'contents':\n return 16777216 /* CONTENTS */;\n case 'inline-block':\n return 33554432 /* INLINE_BLOCK */;\n case 'inline-list-item':\n return 67108864 /* INLINE_LIST_ITEM */;\n case 'inline-table':\n return 134217728 /* INLINE_TABLE */;\n case 'inline-flex':\n return 268435456 /* INLINE_FLEX */;\n case 'inline-grid':\n return 536870912 /* INLINE_GRID */;\n }\n return 0 /* NONE */;\n};\n\nvar float = {\n name: 'float',\n initialValue: 'none',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, float) {\n switch (float) {\n case 'left':\n return 1 /* LEFT */;\n case 'right':\n return 2 /* RIGHT */;\n case 'inline-start':\n return 3 /* INLINE_START */;\n case 'inline-end':\n return 4 /* INLINE_END */;\n }\n return 0 /* NONE */;\n }\n};\n\nvar letterSpacing = {\n name: 'letter-spacing',\n initialValue: '0',\n prefix: false,\n type: 0 /* VALUE */,\n parse: function (_context, token) {\n if (token.type === 20 /* IDENT_TOKEN */ && token.value === 'normal') {\n return 0;\n }\n if (token.type === 17 /* NUMBER_TOKEN */) {\n return token.number;\n }\n if (token.type === 15 /* DIMENSION_TOKEN */) {\n return token.number;\n }\n return 0;\n }\n};\n\nvar LINE_BREAK;\n(function (LINE_BREAK) {\n LINE_BREAK[\"NORMAL\"] = \"normal\";\n LINE_BREAK[\"STRICT\"] = \"strict\";\n})(LINE_BREAK || (LINE_BREAK = {}));\nvar lineBreak = {\n name: 'line-break',\n initialValue: 'normal',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, lineBreak) {\n switch (lineBreak) {\n case 'strict':\n return LINE_BREAK.STRICT;\n case 'normal':\n default:\n return LINE_BREAK.NORMAL;\n }\n }\n};\n\nvar lineHeight = {\n name: 'line-height',\n initialValue: 'normal',\n prefix: false,\n type: 4 /* TOKEN_VALUE */\n};\nvar computeLineHeight = function (token, fontSize) {\n if (isIdentToken(token) && token.value === 'normal') {\n return 1.2 * fontSize;\n }\n else if (token.type === 17 /* NUMBER_TOKEN */) {\n return fontSize * token.number;\n }\n else if (isLengthPercentage(token)) {\n return getAbsoluteValue(token, fontSize);\n }\n return fontSize;\n};\n\nvar listStyleImage = {\n name: 'list-style-image',\n initialValue: 'none',\n type: 0 /* VALUE */,\n prefix: false,\n parse: function (context, token) {\n if (token.type === 20 /* IDENT_TOKEN */ && token.value === 'none') {\n return null;\n }\n return image.parse(context, token);\n }\n};\n\nvar listStylePosition = {\n name: 'list-style-position',\n initialValue: 'outside',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, position) {\n switch (position) {\n case 'inside':\n return 0 /* INSIDE */;\n case 'outside':\n default:\n return 1 /* OUTSIDE */;\n }\n }\n};\n\nvar listStyleType = {\n name: 'list-style-type',\n initialValue: 'none',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, type) {\n switch (type) {\n case 'disc':\n return 0 /* DISC */;\n case 'circle':\n return 1 /* CIRCLE */;\n case 'square':\n return 2 /* SQUARE */;\n case 'decimal':\n return 3 /* DECIMAL */;\n case 'cjk-decimal':\n return 4 /* CJK_DECIMAL */;\n case 'decimal-leading-zero':\n return 5 /* DECIMAL_LEADING_ZERO */;\n case 'lower-roman':\n return 6 /* LOWER_ROMAN */;\n case 'upper-roman':\n return 7 /* UPPER_ROMAN */;\n case 'lower-greek':\n return 8 /* LOWER_GREEK */;\n case 'lower-alpha':\n return 9 /* LOWER_ALPHA */;\n case 'upper-alpha':\n return 10 /* UPPER_ALPHA */;\n case 'arabic-indic':\n return 11 /* ARABIC_INDIC */;\n case 'armenian':\n return 12 /* ARMENIAN */;\n case 'bengali':\n return 13 /* BENGALI */;\n case 'cambodian':\n return 14 /* CAMBODIAN */;\n case 'cjk-earthly-branch':\n return 15 /* CJK_EARTHLY_BRANCH */;\n case 'cjk-heavenly-stem':\n return 16 /* CJK_HEAVENLY_STEM */;\n case 'cjk-ideographic':\n return 17 /* CJK_IDEOGRAPHIC */;\n case 'devanagari':\n return 18 /* DEVANAGARI */;\n case 'ethiopic-numeric':\n return 19 /* ETHIOPIC_NUMERIC */;\n case 'georgian':\n return 20 /* GEORGIAN */;\n case 'gujarati':\n return 21 /* GUJARATI */;\n case 'gurmukhi':\n return 22 /* GURMUKHI */;\n case 'hebrew':\n return 22 /* HEBREW */;\n case 'hiragana':\n return 23 /* HIRAGANA */;\n case 'hiragana-iroha':\n return 24 /* HIRAGANA_IROHA */;\n case 'japanese-formal':\n return 25 /* JAPANESE_FORMAL */;\n case 'japanese-informal':\n return 26 /* JAPANESE_INFORMAL */;\n case 'kannada':\n return 27 /* KANNADA */;\n case 'katakana':\n return 28 /* KATAKANA */;\n case 'katakana-iroha':\n return 29 /* KATAKANA_IROHA */;\n case 'khmer':\n return 30 /* KHMER */;\n case 'korean-hangul-formal':\n return 31 /* KOREAN_HANGUL_FORMAL */;\n case 'korean-hanja-formal':\n return 32 /* KOREAN_HANJA_FORMAL */;\n case 'korean-hanja-informal':\n return 33 /* KOREAN_HANJA_INFORMAL */;\n case 'lao':\n return 34 /* LAO */;\n case 'lower-armenian':\n return 35 /* LOWER_ARMENIAN */;\n case 'malayalam':\n return 36 /* MALAYALAM */;\n case 'mongolian':\n return 37 /* MONGOLIAN */;\n case 'myanmar':\n return 38 /* MYANMAR */;\n case 'oriya':\n return 39 /* ORIYA */;\n case 'persian':\n return 40 /* PERSIAN */;\n case 'simp-chinese-formal':\n return 41 /* SIMP_CHINESE_FORMAL */;\n case 'simp-chinese-informal':\n return 42 /* SIMP_CHINESE_INFORMAL */;\n case 'tamil':\n return 43 /* TAMIL */;\n case 'telugu':\n return 44 /* TELUGU */;\n case 'thai':\n return 45 /* THAI */;\n case 'tibetan':\n return 46 /* TIBETAN */;\n case 'trad-chinese-formal':\n return 47 /* TRAD_CHINESE_FORMAL */;\n case 'trad-chinese-informal':\n return 48 /* TRAD_CHINESE_INFORMAL */;\n case 'upper-armenian':\n return 49 /* UPPER_ARMENIAN */;\n case 'disclosure-open':\n return 50 /* DISCLOSURE_OPEN */;\n case 'disclosure-closed':\n return 51 /* DISCLOSURE_CLOSED */;\n case 'none':\n default:\n return -1 /* NONE */;\n }\n }\n};\n\nvar marginForSide = function (side) { return ({\n name: \"margin-\" + side,\n initialValue: '0',\n prefix: false,\n type: 4 /* TOKEN_VALUE */\n}); };\nvar marginTop = marginForSide('top');\nvar marginRight = marginForSide('right');\nvar marginBottom = marginForSide('bottom');\nvar marginLeft = marginForSide('left');\n\nvar overflow = {\n name: 'overflow',\n initialValue: 'visible',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n return tokens.filter(isIdentToken).map(function (overflow) {\n switch (overflow.value) {\n case 'hidden':\n return 1 /* HIDDEN */;\n case 'scroll':\n return 2 /* SCROLL */;\n case 'clip':\n return 3 /* CLIP */;\n case 'auto':\n return 4 /* AUTO */;\n case 'visible':\n default:\n return 0 /* VISIBLE */;\n }\n });\n }\n};\n\nvar overflowWrap = {\n name: 'overflow-wrap',\n initialValue: 'normal',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, overflow) {\n switch (overflow) {\n case 'break-word':\n return \"break-word\" /* BREAK_WORD */;\n case 'normal':\n default:\n return \"normal\" /* NORMAL */;\n }\n }\n};\n\nvar paddingForSide = function (side) { return ({\n name: \"padding-\" + side,\n initialValue: '0',\n prefix: false,\n type: 3 /* TYPE_VALUE */,\n format: 'length-percentage'\n}); };\nvar paddingTop = paddingForSide('top');\nvar paddingRight = paddingForSide('right');\nvar paddingBottom = paddingForSide('bottom');\nvar paddingLeft = paddingForSide('left');\n\nvar textAlign = {\n name: 'text-align',\n initialValue: 'left',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, textAlign) {\n switch (textAlign) {\n case 'right':\n return 2 /* RIGHT */;\n case 'center':\n case 'justify':\n return 1 /* CENTER */;\n case 'left':\n default:\n return 0 /* LEFT */;\n }\n }\n};\n\nvar position = {\n name: 'position',\n initialValue: 'static',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, position) {\n switch (position) {\n case 'relative':\n return 1 /* RELATIVE */;\n case 'absolute':\n return 2 /* ABSOLUTE */;\n case 'fixed':\n return 3 /* FIXED */;\n case 'sticky':\n return 4 /* STICKY */;\n }\n return 0 /* STATIC */;\n }\n};\n\nvar textShadow = {\n name: 'text-shadow',\n initialValue: 'none',\n type: 1 /* LIST */,\n prefix: false,\n parse: function (context, tokens) {\n if (tokens.length === 1 && isIdentWithValue(tokens[0], 'none')) {\n return [];\n }\n return parseFunctionArgs(tokens).map(function (values) {\n var shadow = {\n color: COLORS.TRANSPARENT,\n offsetX: ZERO_LENGTH,\n offsetY: ZERO_LENGTH,\n blur: ZERO_LENGTH\n };\n var c = 0;\n for (var i = 0; i < values.length; i++) {\n var token = values[i];\n if (isLength(token)) {\n if (c === 0) {\n shadow.offsetX = token;\n }\n else if (c === 1) {\n shadow.offsetY = token;\n }\n else {\n shadow.blur = token;\n }\n c++;\n }\n else {\n shadow.color = color$1.parse(context, token);\n }\n }\n return shadow;\n });\n }\n};\n\nvar textTransform = {\n name: 'text-transform',\n initialValue: 'none',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, textTransform) {\n switch (textTransform) {\n case 'uppercase':\n return 2 /* UPPERCASE */;\n case 'lowercase':\n return 1 /* LOWERCASE */;\n case 'capitalize':\n return 3 /* CAPITALIZE */;\n }\n return 0 /* NONE */;\n }\n};\n\nvar transform$1 = {\n name: 'transform',\n initialValue: 'none',\n prefix: true,\n type: 0 /* VALUE */,\n parse: function (_context, token) {\n if (token.type === 20 /* IDENT_TOKEN */ && token.value === 'none') {\n return null;\n }\n if (token.type === 18 /* FUNCTION */) {\n var transformFunction = SUPPORTED_TRANSFORM_FUNCTIONS[token.name];\n if (typeof transformFunction === 'undefined') {\n throw new Error(\"Attempting to parse an unsupported transform function \\\"\" + token.name + \"\\\"\");\n }\n return transformFunction(token.values);\n }\n return null;\n }\n};\nvar matrix = function (args) {\n var values = args.filter(function (arg) { return arg.type === 17 /* NUMBER_TOKEN */; }).map(function (arg) { return arg.number; });\n return values.length === 6 ? values : null;\n};\n// doesn't support 3D transforms at the moment\nvar matrix3d = function (args) {\n var values = args.filter(function (arg) { return arg.type === 17 /* NUMBER_TOKEN */; }).map(function (arg) { return arg.number; });\n var a1 = values[0], b1 = values[1]; values[2]; values[3]; var a2 = values[4], b2 = values[5]; values[6]; values[7]; values[8]; values[9]; values[10]; values[11]; var a4 = values[12], b4 = values[13]; values[14]; values[15];\n return values.length === 16 ? [a1, b1, a2, b2, a4, b4] : null;\n};\nvar SUPPORTED_TRANSFORM_FUNCTIONS = {\n matrix: matrix,\n matrix3d: matrix3d\n};\n\nvar DEFAULT_VALUE = {\n type: 16 /* PERCENTAGE_TOKEN */,\n number: 50,\n flags: FLAG_INTEGER\n};\nvar DEFAULT = [DEFAULT_VALUE, DEFAULT_VALUE];\nvar transformOrigin = {\n name: 'transform-origin',\n initialValue: '50% 50%',\n prefix: true,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n var origins = tokens.filter(isLengthPercentage);\n if (origins.length !== 2) {\n return DEFAULT;\n }\n return [origins[0], origins[1]];\n }\n};\n\nvar visibility = {\n name: 'visible',\n initialValue: 'none',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, visibility) {\n switch (visibility) {\n case 'hidden':\n return 1 /* HIDDEN */;\n case 'collapse':\n return 2 /* COLLAPSE */;\n case 'visible':\n default:\n return 0 /* VISIBLE */;\n }\n }\n};\n\nvar WORD_BREAK;\n(function (WORD_BREAK) {\n WORD_BREAK[\"NORMAL\"] = \"normal\";\n WORD_BREAK[\"BREAK_ALL\"] = \"break-all\";\n WORD_BREAK[\"KEEP_ALL\"] = \"keep-all\";\n})(WORD_BREAK || (WORD_BREAK = {}));\nvar wordBreak = {\n name: 'word-break',\n initialValue: 'normal',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, wordBreak) {\n switch (wordBreak) {\n case 'break-all':\n return WORD_BREAK.BREAK_ALL;\n case 'keep-all':\n return WORD_BREAK.KEEP_ALL;\n case 'normal':\n default:\n return WORD_BREAK.NORMAL;\n }\n }\n};\n\nvar zIndex = {\n name: 'z-index',\n initialValue: 'auto',\n prefix: false,\n type: 0 /* VALUE */,\n parse: function (_context, token) {\n if (token.type === 20 /* IDENT_TOKEN */) {\n return { auto: true, order: 0 };\n }\n if (isNumberToken(token)) {\n return { auto: false, order: token.number };\n }\n throw new Error(\"Invalid z-index number parsed\");\n }\n};\n\nvar time = {\n name: 'time',\n parse: function (_context, value) {\n if (value.type === 15 /* DIMENSION_TOKEN */) {\n switch (value.unit.toLowerCase()) {\n case 's':\n return 1000 * value.number;\n case 'ms':\n return value.number;\n }\n }\n throw new Error(\"Unsupported time type\");\n }\n};\n\nvar opacity = {\n name: 'opacity',\n initialValue: '1',\n type: 0 /* VALUE */,\n prefix: false,\n parse: function (_context, token) {\n if (isNumberToken(token)) {\n return token.number;\n }\n return 1;\n }\n};\n\nvar textDecorationColor = {\n name: \"text-decoration-color\",\n initialValue: 'transparent',\n prefix: false,\n type: 3 /* TYPE_VALUE */,\n format: 'color'\n};\n\nvar textDecorationLine = {\n name: 'text-decoration-line',\n initialValue: 'none',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n return tokens\n .filter(isIdentToken)\n .map(function (token) {\n switch (token.value) {\n case 'underline':\n return 1 /* UNDERLINE */;\n case 'overline':\n return 2 /* OVERLINE */;\n case 'line-through':\n return 3 /* LINE_THROUGH */;\n case 'none':\n return 4 /* BLINK */;\n }\n return 0 /* NONE */;\n })\n .filter(function (line) { return line !== 0 /* NONE */; });\n }\n};\n\nvar fontFamily = {\n name: \"font-family\",\n initialValue: '',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n var accumulator = [];\n var results = [];\n tokens.forEach(function (token) {\n switch (token.type) {\n case 20 /* IDENT_TOKEN */:\n case 0 /* STRING_TOKEN */:\n accumulator.push(token.value);\n break;\n case 17 /* NUMBER_TOKEN */:\n accumulator.push(token.number.toString());\n break;\n case 4 /* COMMA_TOKEN */:\n results.push(accumulator.join(' '));\n accumulator.length = 0;\n break;\n }\n });\n if (accumulator.length) {\n results.push(accumulator.join(' '));\n }\n return results.map(function (result) { return (result.indexOf(' ') === -1 ? result : \"'\" + result + \"'\"); });\n }\n};\n\nvar fontSize = {\n name: \"font-size\",\n initialValue: '0',\n prefix: false,\n type: 3 /* TYPE_VALUE */,\n format: 'length'\n};\n\nvar fontWeight = {\n name: 'font-weight',\n initialValue: 'normal',\n type: 0 /* VALUE */,\n prefix: false,\n parse: function (_context, token) {\n if (isNumberToken(token)) {\n return token.number;\n }\n if (isIdentToken(token)) {\n switch (token.value) {\n case 'bold':\n return 700;\n case 'normal':\n default:\n return 400;\n }\n }\n return 400;\n }\n};\n\nvar fontVariant = {\n name: 'font-variant',\n initialValue: 'none',\n type: 1 /* LIST */,\n prefix: false,\n parse: function (_context, tokens) {\n return tokens.filter(isIdentToken).map(function (token) { return token.value; });\n }\n};\n\nvar fontStyle = {\n name: 'font-style',\n initialValue: 'normal',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, overflow) {\n switch (overflow) {\n case 'oblique':\n return \"oblique\" /* OBLIQUE */;\n case 'italic':\n return \"italic\" /* ITALIC */;\n case 'normal':\n default:\n return \"normal\" /* NORMAL */;\n }\n }\n};\n\nvar contains = function (bit, value) { return (bit & value) !== 0; };\n\nvar content = {\n name: 'content',\n initialValue: 'none',\n type: 1 /* LIST */,\n prefix: false,\n parse: function (_context, tokens) {\n if (tokens.length === 0) {\n return [];\n }\n var first = tokens[0];\n if (first.type === 20 /* IDENT_TOKEN */ && first.value === 'none') {\n return [];\n }\n return tokens;\n }\n};\n\nvar counterIncrement = {\n name: 'counter-increment',\n initialValue: 'none',\n prefix: true,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n if (tokens.length === 0) {\n return null;\n }\n var first = tokens[0];\n if (first.type === 20 /* IDENT_TOKEN */ && first.value === 'none') {\n return null;\n }\n var increments = [];\n var filtered = tokens.filter(nonWhiteSpace);\n for (var i = 0; i < filtered.length; i++) {\n var counter = filtered[i];\n var next = filtered[i + 1];\n if (counter.type === 20 /* IDENT_TOKEN */) {\n var increment = next && isNumberToken(next) ? next.number : 1;\n increments.push({ counter: counter.value, increment: increment });\n }\n }\n return increments;\n }\n};\n\nvar counterReset = {\n name: 'counter-reset',\n initialValue: 'none',\n prefix: true,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n if (tokens.length === 0) {\n return [];\n }\n var resets = [];\n var filtered = tokens.filter(nonWhiteSpace);\n for (var i = 0; i < filtered.length; i++) {\n var counter = filtered[i];\n var next = filtered[i + 1];\n if (isIdentToken(counter) && counter.value !== 'none') {\n var reset = next && isNumberToken(next) ? next.number : 0;\n resets.push({ counter: counter.value, reset: reset });\n }\n }\n return resets;\n }\n};\n\nvar duration = {\n name: 'duration',\n initialValue: '0s',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (context, tokens) {\n return tokens.filter(isDimensionToken).map(function (token) { return time.parse(context, token); });\n }\n};\n\nvar quotes = {\n name: 'quotes',\n initialValue: 'none',\n prefix: true,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n if (tokens.length === 0) {\n return null;\n }\n var first = tokens[0];\n if (first.type === 20 /* IDENT_TOKEN */ && first.value === 'none') {\n return null;\n }\n var quotes = [];\n var filtered = tokens.filter(isStringToken);\n if (filtered.length % 2 !== 0) {\n return null;\n }\n for (var i = 0; i < filtered.length; i += 2) {\n var open_1 = filtered[i].value;\n var close_1 = filtered[i + 1].value;\n quotes.push({ open: open_1, close: close_1 });\n }\n return quotes;\n }\n};\nvar getQuote = function (quotes, depth, open) {\n if (!quotes) {\n return '';\n }\n var quote = quotes[Math.min(depth, quotes.length - 1)];\n if (!quote) {\n return '';\n }\n return open ? quote.open : quote.close;\n};\n\nvar boxShadow = {\n name: 'box-shadow',\n initialValue: 'none',\n type: 1 /* LIST */,\n prefix: false,\n parse: function (context, tokens) {\n if (tokens.length === 1 && isIdentWithValue(tokens[0], 'none')) {\n return [];\n }\n return parseFunctionArgs(tokens).map(function (values) {\n var shadow = {\n color: 0x000000ff,\n offsetX: ZERO_LENGTH,\n offsetY: ZERO_LENGTH,\n blur: ZERO_LENGTH,\n spread: ZERO_LENGTH,\n inset: false\n };\n var c = 0;\n for (var i = 0; i < values.length; i++) {\n var token = values[i];\n if (isIdentWithValue(token, 'inset')) {\n shadow.inset = true;\n }\n else if (isLength(token)) {\n if (c === 0) {\n shadow.offsetX = token;\n }\n else if (c === 1) {\n shadow.offsetY = token;\n }\n else if (c === 2) {\n shadow.blur = token;\n }\n else {\n shadow.spread = token;\n }\n c++;\n }\n else {\n shadow.color = color$1.parse(context, token);\n }\n }\n return shadow;\n });\n }\n};\n\nvar paintOrder = {\n name: 'paint-order',\n initialValue: 'normal',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n var DEFAULT_VALUE = [0 /* FILL */, 1 /* STROKE */, 2 /* MARKERS */];\n var layers = [];\n tokens.filter(isIdentToken).forEach(function (token) {\n switch (token.value) {\n case 'stroke':\n layers.push(1 /* STROKE */);\n break;\n case 'fill':\n layers.push(0 /* FILL */);\n break;\n case 'markers':\n layers.push(2 /* MARKERS */);\n break;\n }\n });\n DEFAULT_VALUE.forEach(function (value) {\n if (layers.indexOf(value) === -1) {\n layers.push(value);\n }\n });\n return layers;\n }\n};\n\nvar webkitTextStrokeColor = {\n name: \"-webkit-text-stroke-color\",\n initialValue: 'currentcolor',\n prefix: false,\n type: 3 /* TYPE_VALUE */,\n format: 'color'\n};\n\nvar webkitTextStrokeWidth = {\n name: \"-webkit-text-stroke-width\",\n initialValue: '0',\n type: 0 /* VALUE */,\n prefix: false,\n parse: function (_context, token) {\n if (isDimensionToken(token)) {\n return token.number;\n }\n return 0;\n }\n};\n\nvar CSSParsedDeclaration = /** @class */ (function () {\n function CSSParsedDeclaration(context, declaration) {\n var _a, _b;\n this.animationDuration = parse(context, duration, declaration.animationDuration);\n this.backgroundClip = parse(context, backgroundClip, declaration.backgroundClip);\n this.backgroundColor = parse(context, backgroundColor, declaration.backgroundColor);\n this.backgroundImage = parse(context, backgroundImage, declaration.backgroundImage);\n this.backgroundOrigin = parse(context, backgroundOrigin, declaration.backgroundOrigin);\n this.backgroundPosition = parse(context, backgroundPosition, declaration.backgroundPosition);\n this.backgroundRepeat = parse(context, backgroundRepeat, declaration.backgroundRepeat);\n this.backgroundSize = parse(context, backgroundSize, declaration.backgroundSize);\n this.borderTopColor = parse(context, borderTopColor, declaration.borderTopColor);\n this.borderRightColor = parse(context, borderRightColor, declaration.borderRightColor);\n this.borderBottomColor = parse(context, borderBottomColor, declaration.borderBottomColor);\n this.borderLeftColor = parse(context, borderLeftColor, declaration.borderLeftColor);\n this.borderTopLeftRadius = parse(context, borderTopLeftRadius, declaration.borderTopLeftRadius);\n this.borderTopRightRadius = parse(context, borderTopRightRadius, declaration.borderTopRightRadius);\n this.borderBottomRightRadius = parse(context, borderBottomRightRadius, declaration.borderBottomRightRadius);\n this.borderBottomLeftRadius = parse(context, borderBottomLeftRadius, declaration.borderBottomLeftRadius);\n this.borderTopStyle = parse(context, borderTopStyle, declaration.borderTopStyle);\n this.borderRightStyle = parse(context, borderRightStyle, declaration.borderRightStyle);\n this.borderBottomStyle = parse(context, borderBottomStyle, declaration.borderBottomStyle);\n this.borderLeftStyle = parse(context, borderLeftStyle, declaration.borderLeftStyle);\n this.borderTopWidth = parse(context, borderTopWidth, declaration.borderTopWidth);\n this.borderRightWidth = parse(context, borderRightWidth, declaration.borderRightWidth);\n this.borderBottomWidth = parse(context, borderBottomWidth, declaration.borderBottomWidth);\n this.borderLeftWidth = parse(context, borderLeftWidth, declaration.borderLeftWidth);\n this.boxShadow = parse(context, boxShadow, declaration.boxShadow);\n this.color = parse(context, color, declaration.color);\n this.direction = parse(context, direction, declaration.direction);\n this.display = parse(context, display, declaration.display);\n this.float = parse(context, float, declaration.cssFloat);\n this.fontFamily = parse(context, fontFamily, declaration.fontFamily);\n this.fontSize = parse(context, fontSize, declaration.fontSize);\n this.fontStyle = parse(context, fontStyle, declaration.fontStyle);\n this.fontVariant = parse(context, fontVariant, declaration.fontVariant);\n this.fontWeight = parse(context, fontWeight, declaration.fontWeight);\n this.letterSpacing = parse(context, letterSpacing, declaration.letterSpacing);\n this.lineBreak = parse(context, lineBreak, declaration.lineBreak);\n this.lineHeight = parse(context, lineHeight, declaration.lineHeight);\n this.listStyleImage = parse(context, listStyleImage, declaration.listStyleImage);\n this.listStylePosition = parse(context, listStylePosition, declaration.listStylePosition);\n this.listStyleType = parse(context, listStyleType, declaration.listStyleType);\n this.marginTop = parse(context, marginTop, declaration.marginTop);\n this.marginRight = parse(context, marginRight, declaration.marginRight);\n this.marginBottom = parse(context, marginBottom, declaration.marginBottom);\n this.marginLeft = parse(context, marginLeft, declaration.marginLeft);\n this.opacity = parse(context, opacity, declaration.opacity);\n var overflowTuple = parse(context, overflow, declaration.overflow);\n this.overflowX = overflowTuple[0];\n this.overflowY = overflowTuple[overflowTuple.length > 1 ? 1 : 0];\n this.overflowWrap = parse(context, overflowWrap, declaration.overflowWrap);\n this.paddingTop = parse(context, paddingTop, declaration.paddingTop);\n this.paddingRight = parse(context, paddingRight, declaration.paddingRight);\n this.paddingBottom = parse(context, paddingBottom, declaration.paddingBottom);\n this.paddingLeft = parse(context, paddingLeft, declaration.paddingLeft);\n this.paintOrder = parse(context, paintOrder, declaration.paintOrder);\n this.position = parse(context, position, declaration.position);\n this.textAlign = parse(context, textAlign, declaration.textAlign);\n this.textDecorationColor = parse(context, textDecorationColor, (_a = declaration.textDecorationColor) !== null && _a !== void 0 ? _a : declaration.color);\n this.textDecorationLine = parse(context, textDecorationLine, (_b = declaration.textDecorationLine) !== null && _b !== void 0 ? _b : declaration.textDecoration);\n this.textShadow = parse(context, textShadow, declaration.textShadow);\n this.textTransform = parse(context, textTransform, declaration.textTransform);\n this.transform = parse(context, transform$1, declaration.transform);\n this.transformOrigin = parse(context, transformOrigin, declaration.transformOrigin);\n this.visibility = parse(context, visibility, declaration.visibility);\n this.webkitTextStrokeColor = parse(context, webkitTextStrokeColor, declaration.webkitTextStrokeColor);\n this.webkitTextStrokeWidth = parse(context, webkitTextStrokeWidth, declaration.webkitTextStrokeWidth);\n this.wordBreak = parse(context, wordBreak, declaration.wordBreak);\n this.zIndex = parse(context, zIndex, declaration.zIndex);\n }\n CSSParsedDeclaration.prototype.isVisible = function () {\n return this.display > 0 && this.opacity > 0 && this.visibility === 0 /* VISIBLE */;\n };\n CSSParsedDeclaration.prototype.isTransparent = function () {\n return isTransparent(this.backgroundColor);\n };\n CSSParsedDeclaration.prototype.isTransformed = function () {\n return this.transform !== null;\n };\n CSSParsedDeclaration.prototype.isPositioned = function () {\n return this.position !== 0 /* STATIC */;\n };\n CSSParsedDeclaration.prototype.isPositionedWithZIndex = function () {\n return this.isPositioned() && !this.zIndex.auto;\n };\n CSSParsedDeclaration.prototype.isFloating = function () {\n return this.float !== 0 /* NONE */;\n };\n CSSParsedDeclaration.prototype.isInlineLevel = function () {\n return (contains(this.display, 4 /* INLINE */) ||\n contains(this.display, 33554432 /* INLINE_BLOCK */) ||\n contains(this.display, 268435456 /* INLINE_FLEX */) ||\n contains(this.display, 536870912 /* INLINE_GRID */) ||\n contains(this.display, 67108864 /* INLINE_LIST_ITEM */) ||\n contains(this.display, 134217728 /* INLINE_TABLE */));\n };\n return CSSParsedDeclaration;\n}());\nvar CSSParsedPseudoDeclaration = /** @class */ (function () {\n function CSSParsedPseudoDeclaration(context, declaration) {\n this.content = parse(context, content, declaration.content);\n this.quotes = parse(context, quotes, declaration.quotes);\n }\n return CSSParsedPseudoDeclaration;\n}());\nvar CSSParsedCounterDeclaration = /** @class */ (function () {\n function CSSParsedCounterDeclaration(context, declaration) {\n this.counterIncrement = parse(context, counterIncrement, declaration.counterIncrement);\n this.counterReset = parse(context, counterReset, declaration.counterReset);\n }\n return CSSParsedCounterDeclaration;\n}());\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nvar parse = function (context, descriptor, style) {\n var tokenizer = new Tokenizer();\n var value = style !== null && typeof style !== 'undefined' ? style.toString() : descriptor.initialValue;\n tokenizer.write(value);\n var parser = new Parser(tokenizer.read());\n switch (descriptor.type) {\n case 2 /* IDENT_VALUE */:\n var token = parser.parseComponentValue();\n return descriptor.parse(context, isIdentToken(token) ? token.value : descriptor.initialValue);\n case 0 /* VALUE */:\n return descriptor.parse(context, parser.parseComponentValue());\n case 1 /* LIST */:\n return descriptor.parse(context, parser.parseComponentValues());\n case 4 /* TOKEN_VALUE */:\n return parser.parseComponentValue();\n case 3 /* TYPE_VALUE */:\n switch (descriptor.format) {\n case 'angle':\n return angle.parse(context, parser.parseComponentValue());\n case 'color':\n return color$1.parse(context, parser.parseComponentValue());\n case 'image':\n return image.parse(context, parser.parseComponentValue());\n case 'length':\n var length_1 = parser.parseComponentValue();\n return isLength(length_1) ? length_1 : ZERO_LENGTH;\n case 'length-percentage':\n var value_1 = parser.parseComponentValue();\n return isLengthPercentage(value_1) ? value_1 : ZERO_LENGTH;\n case 'time':\n return time.parse(context, parser.parseComponentValue());\n }\n break;\n }\n};\n\nvar elementDebuggerAttribute = 'data-html2canvas-debug';\nvar getElementDebugType = function (element) {\n var attribute = element.getAttribute(elementDebuggerAttribute);\n switch (attribute) {\n case 'all':\n return 1 /* ALL */;\n case 'clone':\n return 2 /* CLONE */;\n case 'parse':\n return 3 /* PARSE */;\n case 'render':\n return 4 /* RENDER */;\n default:\n return 0 /* NONE */;\n }\n};\nvar isDebugging = function (element, type) {\n var elementType = getElementDebugType(element);\n return elementType === 1 /* ALL */ || type === elementType;\n};\n\nvar ElementContainer = /** @class */ (function () {\n function ElementContainer(context, element) {\n this.context = context;\n this.textNodes = [];\n this.elements = [];\n this.flags = 0;\n if (isDebugging(element, 3 /* PARSE */)) {\n debugger;\n }\n this.styles = new CSSParsedDeclaration(context, window.getComputedStyle(element, null));\n if (isHTMLElementNode(element)) {\n if (this.styles.animationDuration.some(function (duration) { return duration > 0; })) {\n element.style.animationDuration = '0s';\n }\n if (this.styles.transform !== null) {\n // getBoundingClientRect takes transforms into account\n element.style.transform = 'none';\n }\n }\n this.bounds = parseBounds(this.context, element);\n if (isDebugging(element, 4 /* RENDER */)) {\n this.flags |= 16 /* DEBUG_RENDER */;\n }\n }\n return ElementContainer;\n}());\n\n/*\n * text-segmentation 1.0.3 \n * Copyright (c) 2022 Niklas von Hertzen \n * Released under MIT License\n */\nvar base64 = 'AAAAAAAAAAAAEA4AGBkAAFAaAAACAAAAAAAIABAAGAAwADgACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAAQABIAEQATAAIABAACAAQAAgAEAAIABAAVABcAAgAEAAIABAACAAQAGAAaABwAHgAgACIAI4AlgAIABAAmwCjAKgAsAC2AL4AvQDFAMoA0gBPAVYBWgEIAAgACACMANoAYgFkAWwBdAF8AX0BhQGNAZUBlgGeAaMBlQGWAasBswF8AbsBwwF0AcsBYwHTAQgA2wG/AOMBdAF8AekB8QF0AfkB+wHiAHQBfAEIAAMC5gQIAAsCEgIIAAgAFgIeAggAIgIpAggAMQI5AkACygEIAAgASAJQAlgCYAIIAAgACAAKBQoFCgUTBRMFGQUrBSsFCAAIAAgACAAIAAgACAAIAAgACABdAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABoAmgCrwGvAQgAbgJ2AggAHgEIAAgACADnAXsCCAAIAAgAgwIIAAgACAAIAAgACACKAggAkQKZAggAPADJAAgAoQKkAqwCsgK6AsICCADJAggA0AIIAAgACAAIANYC3gIIAAgACAAIAAgACABAAOYCCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAkASoB+QIEAAgACAA8AEMCCABCBQgACABJBVAFCAAIAAgACAAIAAgACAAIAAgACABTBVoFCAAIAFoFCABfBWUFCAAIAAgACAAIAAgAbQUIAAgACAAIAAgACABzBXsFfQWFBYoFigWKBZEFigWKBYoFmAWfBaYFrgWxBbkFCAAIAAgACAAIAAgACAAIAAgACAAIAMEFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAMgFCADQBQgACAAIAAgACAAIAAgACAAIAAgACAAIAO4CCAAIAAgAiQAIAAgACABAAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAD0AggACAD8AggACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIANYFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAMDvwAIAAgAJAIIAAgACAAIAAgACAAIAAgACwMTAwgACAB9BOsEGwMjAwgAKwMyAwsFYgE3A/MEPwMIAEUDTQNRAwgAWQOsAGEDCAAIAAgACAAIAAgACABpAzQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFIQUoBSwFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABtAwgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABMAEwACAAIAAgACAAIABgACAAIAAgACAC/AAgACAAyAQgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACAAIAAwAAgACAAIAAgACAAIAAgACAAIAAAARABIAAgACAAIABQASAAIAAgAIABwAEAAjgCIABsAqAC2AL0AigDQAtwC+IJIQqVAZUBWQqVAZUBlQGVAZUBlQGrC5UBlQGVAZUBlQGVAZUBlQGVAXsKlQGVAbAK6wsrDGUMpQzlDJUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAfAKAAuZA64AtwCJALoC6ADwAAgAuACgA/oEpgO6AqsD+AAIAAgAswMIAAgACAAIAIkAuwP5AfsBwwPLAwgACAAIAAgACADRA9kDCAAIAOED6QMIAAgACAAIAAgACADuA/YDCAAIAP4DyQAIAAgABgQIAAgAXQAOBAgACAAIAAgACAAIABMECAAIAAgACAAIAAgACAD8AAQBCAAIAAgAGgQiBCoECAExBAgAEAEIAAgACAAIAAgACAAIAAgACAAIAAgACAA4BAgACABABEYECAAIAAgATAQYAQgAVAQIAAgACAAIAAgACAAIAAgACAAIAFoECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAOQEIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAB+BAcACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAEABhgSMBAgACAAIAAgAlAQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAwAEAAQABAADAAMAAwADAAQABAAEAAQABAAEAAQABHATAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAdQMIAAgACAAIAAgACAAIAMkACAAIAAgAfQMIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACFA4kDCAAIAAgACAAIAOcBCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAIcDCAAIAAgACAAIAAgACAAIAAgACAAIAJEDCAAIAAgACADFAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABgBAgAZgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAbAQCBXIECAAIAHkECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABAAJwEQACjBKoEsgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAC6BMIECAAIAAgACAAIAAgACABmBAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAxwQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAGYECAAIAAgAzgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBd0FXwUIAOIF6gXxBYoF3gT5BQAGCAaKBYoFigWKBYoFigWKBYoFigWKBYoFigXWBIoFigWKBYoFigWKBYoFigWKBYsFEAaKBYoFigWKBYoFigWKBRQGCACKBYoFigWKBQgACAAIANEECAAIABgGigUgBggAJgYIAC4GMwaKBYoF0wQ3Bj4GigWKBYoFigWKBYoFigWKBYoFigWKBYoFigUIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWLBf///////wQABAAEAAQABAAEAAQABAAEAAQAAwAEAAQAAgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAQADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUAAAAFAAUAAAAFAAUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAQAAAAUABQAFAAUABQAFAAAAAAAFAAUAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAFAAUAAQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAAABwAHAAcAAAAHAAcABwAFAAEAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAcABwAFAAUAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAQABAAAAAAAAAAAAAAAFAAUABQAFAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAHAAcAAAAHAAcAAAAAAAUABQAHAAUAAQAHAAEABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwABAAUABQAFAAUAAAAAAAAAAAAAAAEAAQABAAEAAQABAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABQANAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAABQAHAAUABQAFAAAAAAAAAAcABQAFAAUABQAFAAQABAAEAAQABAAEAAQABAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUAAAAFAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAUAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAcABwAFAAcABwAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUABwAHAAUABQAFAAUAAAAAAAcABwAAAAAABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAAAAAAAAAAABQAFAAAAAAAFAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAFAAUABQAFAAUAAAAFAAUABwAAAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABwAFAAUABQAFAAAAAAAHAAcAAAAAAAcABwAFAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAAAAAAAAAHAAcABwAAAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAUABQAFAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAHAAcABQAHAAcAAAAFAAcABwAAAAcABwAFAAUAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAcABwAFAAUABQAAAAUAAAAHAAcABwAHAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAHAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUAAAAFAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAUAAAAFAAUAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABwAFAAUABQAFAAUABQAAAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABQAFAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAFAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAHAAUABQAFAAUABQAFAAUABwAHAAcABwAHAAcABwAHAAUABwAHAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABwAHAAcABwAFAAUABwAHAAcAAAAAAAAAAAAHAAcABQAHAAcABwAHAAcABwAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAUABQAFAAUABQAFAAUAAAAFAAAABQAAAAAABQAFAAUABQAFAAUABQAFAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAUABQAFAAUABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABwAFAAcABwAHAAcABwAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAUABQAFAAUABwAHAAUABQAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABQAFAAcABwAHAAUABwAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAcABQAFAAUABQAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAAAAAABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAUABQAHAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAFAAUABQAFAAcABwAFAAUABwAHAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAcABwAFAAUABwAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABQAAAAAABQAFAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAcABwAAAAAAAAAAAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAcABwAFAAcABwAAAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAFAAUABQAAAAUABQAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABwAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAHAAcABQAHAAUABQAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAAABwAHAAAAAAAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAFAAUABwAFAAcABwAFAAcABQAFAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAAAAAABwAHAAcABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAFAAcABwAFAAUABQAFAAUABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAUABQAFAAcABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABQAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAAAAAAFAAUABwAHAAcABwAFAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAHAAUABQAFAAUABQAFAAUABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAABQAAAAUABQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAHAAcAAAAFAAUAAAAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABQAFAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAABQAFAAUABQAFAAUABQAAAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAFAAUABQAFAAUADgAOAA4ADgAOAA4ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAMAAwADAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAAAAAAAAAAAAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAAAAAAAAAAAAsADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwACwAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAADgAOAA4AAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAAAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4AAAAOAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAAAAAAAAAAAA4AAAAOAAAAAAAAAAAADgAOAA4AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAA=';\n\n/*\n * utrie 1.0.2 \n * Copyright (c) 2022 Niklas von Hertzen \n * Released under MIT License\n */\nvar chars$1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nvar lookup$1 = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (var i$1 = 0; i$1 < chars$1.length; i$1++) {\n lookup$1[chars$1.charCodeAt(i$1)] = i$1;\n}\nvar decode = function (base64) {\n var bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;\n if (base64[base64.length - 1] === '=') {\n bufferLength--;\n if (base64[base64.length - 2] === '=') {\n bufferLength--;\n }\n }\n var buffer = typeof ArrayBuffer !== 'undefined' &&\n typeof Uint8Array !== 'undefined' &&\n typeof Uint8Array.prototype.slice !== 'undefined'\n ? new ArrayBuffer(bufferLength)\n : new Array(bufferLength);\n var bytes = Array.isArray(buffer) ? buffer : new Uint8Array(buffer);\n for (i = 0; i < len; i += 4) {\n encoded1 = lookup$1[base64.charCodeAt(i)];\n encoded2 = lookup$1[base64.charCodeAt(i + 1)];\n encoded3 = lookup$1[base64.charCodeAt(i + 2)];\n encoded4 = lookup$1[base64.charCodeAt(i + 3)];\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n return buffer;\n};\nvar polyUint16Array = function (buffer) {\n var length = buffer.length;\n var bytes = [];\n for (var i = 0; i < length; i += 2) {\n bytes.push((buffer[i + 1] << 8) | buffer[i]);\n }\n return bytes;\n};\nvar polyUint32Array = function (buffer) {\n var length = buffer.length;\n var bytes = [];\n for (var i = 0; i < length; i += 4) {\n bytes.push((buffer[i + 3] << 24) | (buffer[i + 2] << 16) | (buffer[i + 1] << 8) | buffer[i]);\n }\n return bytes;\n};\n\n/** Shift size for getting the index-2 table offset. */\nvar UTRIE2_SHIFT_2 = 5;\n/** Shift size for getting the index-1 table offset. */\nvar UTRIE2_SHIFT_1 = 6 + 5;\n/**\n * Shift size for shifting left the index array values.\n * Increases possible data size with 16-bit index values at the cost\n * of compactability.\n * This requires data blocks to be aligned by UTRIE2_DATA_GRANULARITY.\n */\nvar UTRIE2_INDEX_SHIFT = 2;\n/**\n * Difference between the two shift sizes,\n * for getting an index-1 offset from an index-2 offset. 6=11-5\n */\nvar UTRIE2_SHIFT_1_2 = UTRIE2_SHIFT_1 - UTRIE2_SHIFT_2;\n/**\n * The part of the index-2 table for U+D800..U+DBFF stores values for\n * lead surrogate code _units_ not code _points_.\n * Values for lead surrogate code _points_ are indexed with this portion of the table.\n * Length=32=0x20=0x400>>UTRIE2_SHIFT_2. (There are 1024=0x400 lead surrogates.)\n */\nvar UTRIE2_LSCP_INDEX_2_OFFSET = 0x10000 >> UTRIE2_SHIFT_2;\n/** Number of entries in a data block. 32=0x20 */\nvar UTRIE2_DATA_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_2;\n/** Mask for getting the lower bits for the in-data-block offset. */\nvar UTRIE2_DATA_MASK = UTRIE2_DATA_BLOCK_LENGTH - 1;\nvar UTRIE2_LSCP_INDEX_2_LENGTH = 0x400 >> UTRIE2_SHIFT_2;\n/** Count the lengths of both BMP pieces. 2080=0x820 */\nvar UTRIE2_INDEX_2_BMP_LENGTH = UTRIE2_LSCP_INDEX_2_OFFSET + UTRIE2_LSCP_INDEX_2_LENGTH;\n/**\n * The 2-byte UTF-8 version of the index-2 table follows at offset 2080=0x820.\n * Length 32=0x20 for lead bytes C0..DF, regardless of UTRIE2_SHIFT_2.\n */\nvar UTRIE2_UTF8_2B_INDEX_2_OFFSET = UTRIE2_INDEX_2_BMP_LENGTH;\nvar UTRIE2_UTF8_2B_INDEX_2_LENGTH = 0x800 >> 6; /* U+0800 is the first code point after 2-byte UTF-8 */\n/**\n * The index-1 table, only used for supplementary code points, at offset 2112=0x840.\n * Variable length, for code points up to highStart, where the last single-value range starts.\n * Maximum length 512=0x200=0x100000>>UTRIE2_SHIFT_1.\n * (For 0x100000 supplementary code points U+10000..U+10ffff.)\n *\n * The part of the index-2 table for supplementary code points starts\n * after this index-1 table.\n *\n * Both the index-1 table and the following part of the index-2 table\n * are omitted completely if there is only BMP data.\n */\nvar UTRIE2_INDEX_1_OFFSET = UTRIE2_UTF8_2B_INDEX_2_OFFSET + UTRIE2_UTF8_2B_INDEX_2_LENGTH;\n/**\n * Number of index-1 entries for the BMP. 32=0x20\n * This part of the index-1 table is omitted from the serialized form.\n */\nvar UTRIE2_OMITTED_BMP_INDEX_1_LENGTH = 0x10000 >> UTRIE2_SHIFT_1;\n/** Number of entries in an index-2 block. 64=0x40 */\nvar UTRIE2_INDEX_2_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_1_2;\n/** Mask for getting the lower bits for the in-index-2-block offset. */\nvar UTRIE2_INDEX_2_MASK = UTRIE2_INDEX_2_BLOCK_LENGTH - 1;\nvar slice16 = function (view, start, end) {\n if (view.slice) {\n return view.slice(start, end);\n }\n return new Uint16Array(Array.prototype.slice.call(view, start, end));\n};\nvar slice32 = function (view, start, end) {\n if (view.slice) {\n return view.slice(start, end);\n }\n return new Uint32Array(Array.prototype.slice.call(view, start, end));\n};\nvar createTrieFromBase64 = function (base64, _byteLength) {\n var buffer = decode(base64);\n var view32 = Array.isArray(buffer) ? polyUint32Array(buffer) : new Uint32Array(buffer);\n var view16 = Array.isArray(buffer) ? polyUint16Array(buffer) : new Uint16Array(buffer);\n var headerLength = 24;\n var index = slice16(view16, headerLength / 2, view32[4] / 2);\n var data = view32[5] === 2\n ? slice16(view16, (headerLength + view32[4]) / 2)\n : slice32(view32, Math.ceil((headerLength + view32[4]) / 4));\n return new Trie(view32[0], view32[1], view32[2], view32[3], index, data);\n};\nvar Trie = /** @class */ (function () {\n function Trie(initialValue, errorValue, highStart, highValueIndex, index, data) {\n this.initialValue = initialValue;\n this.errorValue = errorValue;\n this.highStart = highStart;\n this.highValueIndex = highValueIndex;\n this.index = index;\n this.data = data;\n }\n /**\n * Get the value for a code point as stored in the Trie.\n *\n * @param codePoint the code point\n * @return the value\n */\n Trie.prototype.get = function (codePoint) {\n var ix;\n if (codePoint >= 0) {\n if (codePoint < 0x0d800 || (codePoint > 0x0dbff && codePoint <= 0x0ffff)) {\n // Ordinary BMP code point, excluding leading surrogates.\n // BMP uses a single level lookup. BMP index starts at offset 0 in the Trie2 index.\n // 16 bit data is stored in the index array itself.\n ix = this.index[codePoint >> UTRIE2_SHIFT_2];\n ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK);\n return this.data[ix];\n }\n if (codePoint <= 0xffff) {\n // Lead Surrogate Code Point. A Separate index section is stored for\n // lead surrogate code units and code points.\n // The main index has the code unit data.\n // For this function, we need the code point data.\n // Note: this expression could be refactored for slightly improved efficiency, but\n // surrogate code points will be so rare in practice that it's not worth it.\n ix = this.index[UTRIE2_LSCP_INDEX_2_OFFSET + ((codePoint - 0xd800) >> UTRIE2_SHIFT_2)];\n ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK);\n return this.data[ix];\n }\n if (codePoint < this.highStart) {\n // Supplemental code point, use two-level lookup.\n ix = UTRIE2_INDEX_1_OFFSET - UTRIE2_OMITTED_BMP_INDEX_1_LENGTH + (codePoint >> UTRIE2_SHIFT_1);\n ix = this.index[ix];\n ix += (codePoint >> UTRIE2_SHIFT_2) & UTRIE2_INDEX_2_MASK;\n ix = this.index[ix];\n ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK);\n return this.data[ix];\n }\n if (codePoint <= 0x10ffff) {\n return this.data[this.highValueIndex];\n }\n }\n // Fall through. The code point is outside of the legal range of 0..0x10ffff.\n return this.errorValue;\n };\n return Trie;\n}());\n\n/*\n * base64-arraybuffer 1.0.2 \n * Copyright (c) 2022 Niklas von Hertzen \n * Released under MIT License\n */\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nvar lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (var i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\n\nvar Prepend = 1;\nvar CR = 2;\nvar LF = 3;\nvar Control = 4;\nvar Extend = 5;\nvar SpacingMark = 7;\nvar L = 8;\nvar V = 9;\nvar T = 10;\nvar LV = 11;\nvar LVT = 12;\nvar ZWJ = 13;\nvar Extended_Pictographic = 14;\nvar RI = 15;\nvar toCodePoints = function (str) {\n var codePoints = [];\n var i = 0;\n var length = str.length;\n while (i < length) {\n var value = str.charCodeAt(i++);\n if (value >= 0xd800 && value <= 0xdbff && i < length) {\n var extra = str.charCodeAt(i++);\n if ((extra & 0xfc00) === 0xdc00) {\n codePoints.push(((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000);\n }\n else {\n codePoints.push(value);\n i--;\n }\n }\n else {\n codePoints.push(value);\n }\n }\n return codePoints;\n};\nvar fromCodePoint = function () {\n var codePoints = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n codePoints[_i] = arguments[_i];\n }\n if (String.fromCodePoint) {\n return String.fromCodePoint.apply(String, codePoints);\n }\n var length = codePoints.length;\n if (!length) {\n return '';\n }\n var codeUnits = [];\n var index = -1;\n var result = '';\n while (++index < length) {\n var codePoint = codePoints[index];\n if (codePoint <= 0xffff) {\n codeUnits.push(codePoint);\n }\n else {\n codePoint -= 0x10000;\n codeUnits.push((codePoint >> 10) + 0xd800, (codePoint % 0x400) + 0xdc00);\n }\n if (index + 1 === length || codeUnits.length > 0x4000) {\n result += String.fromCharCode.apply(String, codeUnits);\n codeUnits.length = 0;\n }\n }\n return result;\n};\nvar UnicodeTrie = createTrieFromBase64(base64);\nvar BREAK_NOT_ALLOWED = '×';\nvar BREAK_ALLOWED = '÷';\nvar codePointToClass = function (codePoint) { return UnicodeTrie.get(codePoint); };\nvar _graphemeBreakAtIndex = function (_codePoints, classTypes, index) {\n var prevIndex = index - 2;\n var prev = classTypes[prevIndex];\n var current = classTypes[index - 1];\n var next = classTypes[index];\n // GB3 Do not break between a CR and LF\n if (current === CR && next === LF) {\n return BREAK_NOT_ALLOWED;\n }\n // GB4 Otherwise, break before and after controls.\n if (current === CR || current === LF || current === Control) {\n return BREAK_ALLOWED;\n }\n // GB5\n if (next === CR || next === LF || next === Control) {\n return BREAK_ALLOWED;\n }\n // Do not break Hangul syllable sequences.\n // GB6\n if (current === L && [L, V, LV, LVT].indexOf(next) !== -1) {\n return BREAK_NOT_ALLOWED;\n }\n // GB7\n if ((current === LV || current === V) && (next === V || next === T)) {\n return BREAK_NOT_ALLOWED;\n }\n // GB8\n if ((current === LVT || current === T) && next === T) {\n return BREAK_NOT_ALLOWED;\n }\n // GB9 Do not break before extending characters or ZWJ.\n if (next === ZWJ || next === Extend) {\n return BREAK_NOT_ALLOWED;\n }\n // Do not break before SpacingMarks, or after Prepend characters.\n // GB9a\n if (next === SpacingMark) {\n return BREAK_NOT_ALLOWED;\n }\n // GB9a\n if (current === Prepend) {\n return BREAK_NOT_ALLOWED;\n }\n // GB11 Do not break within emoji modifier sequences or emoji zwj sequences.\n if (current === ZWJ && next === Extended_Pictographic) {\n while (prev === Extend) {\n prev = classTypes[--prevIndex];\n }\n if (prev === Extended_Pictographic) {\n return BREAK_NOT_ALLOWED;\n }\n }\n // GB12 Do not break within emoji flag sequences.\n // That is, do not break between regional indicator (RI) symbols\n // if there is an odd number of RI characters before the break point.\n if (current === RI && next === RI) {\n var countRI = 0;\n while (prev === RI) {\n countRI++;\n prev = classTypes[--prevIndex];\n }\n if (countRI % 2 === 0) {\n return BREAK_NOT_ALLOWED;\n }\n }\n return BREAK_ALLOWED;\n};\nvar GraphemeBreaker = function (str) {\n var codePoints = toCodePoints(str);\n var length = codePoints.length;\n var index = 0;\n var lastEnd = 0;\n var classTypes = codePoints.map(codePointToClass);\n return {\n next: function () {\n if (index >= length) {\n return { done: true, value: null };\n }\n var graphemeBreak = BREAK_NOT_ALLOWED;\n while (index < length &&\n (graphemeBreak = _graphemeBreakAtIndex(codePoints, classTypes, ++index)) === BREAK_NOT_ALLOWED) { }\n if (graphemeBreak !== BREAK_NOT_ALLOWED || index === length) {\n var value = fromCodePoint.apply(null, codePoints.slice(lastEnd, index));\n lastEnd = index;\n return { value: value, done: false };\n }\n return { done: true, value: null };\n },\n };\n};\nvar splitGraphemes = function (str) {\n var breaker = GraphemeBreaker(str);\n var graphemes = [];\n var bk;\n while (!(bk = breaker.next()).done) {\n if (bk.value) {\n graphemes.push(bk.value.slice());\n }\n }\n return graphemes;\n};\n\nvar testRangeBounds = function (document) {\n var TEST_HEIGHT = 123;\n if (document.createRange) {\n var range = document.createRange();\n if (range.getBoundingClientRect) {\n var testElement = document.createElement('boundtest');\n testElement.style.height = TEST_HEIGHT + \"px\";\n testElement.style.display = 'block';\n document.body.appendChild(testElement);\n range.selectNode(testElement);\n var rangeBounds = range.getBoundingClientRect();\n var rangeHeight = Math.round(rangeBounds.height);\n document.body.removeChild(testElement);\n if (rangeHeight === TEST_HEIGHT) {\n return true;\n }\n }\n }\n return false;\n};\nvar testIOSLineBreak = function (document) {\n var testElement = document.createElement('boundtest');\n testElement.style.width = '50px';\n testElement.style.display = 'block';\n testElement.style.fontSize = '12px';\n testElement.style.letterSpacing = '0px';\n testElement.style.wordSpacing = '0px';\n document.body.appendChild(testElement);\n var range = document.createRange();\n testElement.innerHTML = typeof ''.repeat === 'function' ? '👨'.repeat(10) : '';\n var node = testElement.firstChild;\n var textList = toCodePoints$1(node.data).map(function (i) { return fromCodePoint$1(i); });\n var offset = 0;\n var prev = {};\n // ios 13 does not handle range getBoundingClientRect line changes correctly #2177\n var supports = textList.every(function (text, i) {\n range.setStart(node, offset);\n range.setEnd(node, offset + text.length);\n var rect = range.getBoundingClientRect();\n offset += text.length;\n var boundAhead = rect.x > prev.x || rect.y > prev.y;\n prev = rect;\n if (i === 0) {\n return true;\n }\n return boundAhead;\n });\n document.body.removeChild(testElement);\n return supports;\n};\nvar testCORS = function () { return typeof new Image().crossOrigin !== 'undefined'; };\nvar testResponseType = function () { return typeof new XMLHttpRequest().responseType === 'string'; };\nvar testSVG = function (document) {\n var img = new Image();\n var canvas = document.createElement('canvas');\n var ctx = canvas.getContext('2d');\n if (!ctx) {\n return false;\n }\n img.src = \"data:image/svg+xml,\";\n try {\n ctx.drawImage(img, 0, 0);\n canvas.toDataURL();\n }\n catch (e) {\n return false;\n }\n return true;\n};\nvar isGreenPixel = function (data) {\n return data[0] === 0 && data[1] === 255 && data[2] === 0 && data[3] === 255;\n};\nvar testForeignObject = function (document) {\n var canvas = document.createElement('canvas');\n var size = 100;\n canvas.width = size;\n canvas.height = size;\n var ctx = canvas.getContext('2d');\n if (!ctx) {\n return Promise.reject(false);\n }\n ctx.fillStyle = 'rgb(0, 255, 0)';\n ctx.fillRect(0, 0, size, size);\n var img = new Image();\n var greenImageSrc = canvas.toDataURL();\n img.src = greenImageSrc;\n var svg = createForeignObjectSVG(size, size, 0, 0, img);\n ctx.fillStyle = 'red';\n ctx.fillRect(0, 0, size, size);\n return loadSerializedSVG$1(svg)\n .then(function (img) {\n ctx.drawImage(img, 0, 0);\n var data = ctx.getImageData(0, 0, size, size).data;\n ctx.fillStyle = 'red';\n ctx.fillRect(0, 0, size, size);\n var node = document.createElement('div');\n node.style.backgroundImage = \"url(\" + greenImageSrc + \")\";\n node.style.height = size + \"px\";\n // Firefox 55 does not render inline tags\n return isGreenPixel(data)\n ? loadSerializedSVG$1(createForeignObjectSVG(size, size, 0, 0, node))\n : Promise.reject(false);\n })\n .then(function (img) {\n ctx.drawImage(img, 0, 0);\n // Edge does not render background-images\n return isGreenPixel(ctx.getImageData(0, 0, size, size).data);\n })\n .catch(function () { return false; });\n};\nvar createForeignObjectSVG = function (width, height, x, y, node) {\n var xmlns = 'http://www.w3.org/2000/svg';\n var svg = document.createElementNS(xmlns, 'svg');\n var foreignObject = document.createElementNS(xmlns, 'foreignObject');\n svg.setAttributeNS(null, 'width', width.toString());\n svg.setAttributeNS(null, 'height', height.toString());\n foreignObject.setAttributeNS(null, 'width', '100%');\n foreignObject.setAttributeNS(null, 'height', '100%');\n foreignObject.setAttributeNS(null, 'x', x.toString());\n foreignObject.setAttributeNS(null, 'y', y.toString());\n foreignObject.setAttributeNS(null, 'externalResourcesRequired', 'true');\n svg.appendChild(foreignObject);\n foreignObject.appendChild(node);\n return svg;\n};\nvar loadSerializedSVG$1 = function (svg) {\n return new Promise(function (resolve, reject) {\n var img = new Image();\n img.onload = function () { return resolve(img); };\n img.onerror = reject;\n img.src = \"data:image/svg+xml;charset=utf-8,\" + encodeURIComponent(new XMLSerializer().serializeToString(svg));\n });\n};\nvar FEATURES = {\n get SUPPORT_RANGE_BOUNDS() {\n var value = testRangeBounds(document);\n Object.defineProperty(FEATURES, 'SUPPORT_RANGE_BOUNDS', { value: value });\n return value;\n },\n get SUPPORT_WORD_BREAKING() {\n var value = FEATURES.SUPPORT_RANGE_BOUNDS && testIOSLineBreak(document);\n Object.defineProperty(FEATURES, 'SUPPORT_WORD_BREAKING', { value: value });\n return value;\n },\n get SUPPORT_SVG_DRAWING() {\n var value = testSVG(document);\n Object.defineProperty(FEATURES, 'SUPPORT_SVG_DRAWING', { value: value });\n return value;\n },\n get SUPPORT_FOREIGNOBJECT_DRAWING() {\n var value = typeof Array.from === 'function' && typeof window.fetch === 'function'\n ? testForeignObject(document)\n : Promise.resolve(false);\n Object.defineProperty(FEATURES, 'SUPPORT_FOREIGNOBJECT_DRAWING', { value: value });\n return value;\n },\n get SUPPORT_CORS_IMAGES() {\n var value = testCORS();\n Object.defineProperty(FEATURES, 'SUPPORT_CORS_IMAGES', { value: value });\n return value;\n },\n get SUPPORT_RESPONSE_TYPE() {\n var value = testResponseType();\n Object.defineProperty(FEATURES, 'SUPPORT_RESPONSE_TYPE', { value: value });\n return value;\n },\n get SUPPORT_CORS_XHR() {\n var value = 'withCredentials' in new XMLHttpRequest();\n Object.defineProperty(FEATURES, 'SUPPORT_CORS_XHR', { value: value });\n return value;\n },\n get SUPPORT_NATIVE_TEXT_SEGMENTATION() {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = !!(typeof Intl !== 'undefined' && Intl.Segmenter);\n Object.defineProperty(FEATURES, 'SUPPORT_NATIVE_TEXT_SEGMENTATION', { value: value });\n return value;\n }\n};\n\nvar TextBounds = /** @class */ (function () {\n function TextBounds(text, bounds) {\n this.text = text;\n this.bounds = bounds;\n }\n return TextBounds;\n}());\nvar parseTextBounds = function (context, value, styles, node) {\n var textList = breakText(value, styles);\n var textBounds = [];\n var offset = 0;\n textList.forEach(function (text) {\n if (styles.textDecorationLine.length || text.trim().length > 0) {\n if (FEATURES.SUPPORT_RANGE_BOUNDS) {\n var clientRects = createRange(node, offset, text.length).getClientRects();\n if (clientRects.length > 1) {\n var subSegments = segmentGraphemes(text);\n var subOffset_1 = 0;\n subSegments.forEach(function (subSegment) {\n textBounds.push(new TextBounds(subSegment, Bounds.fromDOMRectList(context, createRange(node, subOffset_1 + offset, subSegment.length).getClientRects())));\n subOffset_1 += subSegment.length;\n });\n }\n else {\n textBounds.push(new TextBounds(text, Bounds.fromDOMRectList(context, clientRects)));\n }\n }\n else {\n var replacementNode = node.splitText(text.length);\n textBounds.push(new TextBounds(text, getWrapperBounds(context, node)));\n node = replacementNode;\n }\n }\n else if (!FEATURES.SUPPORT_RANGE_BOUNDS) {\n node = node.splitText(text.length);\n }\n offset += text.length;\n });\n return textBounds;\n};\nvar getWrapperBounds = function (context, node) {\n var ownerDocument = node.ownerDocument;\n if (ownerDocument) {\n var wrapper = ownerDocument.createElement('html2canvaswrapper');\n wrapper.appendChild(node.cloneNode(true));\n var parentNode = node.parentNode;\n if (parentNode) {\n parentNode.replaceChild(wrapper, node);\n var bounds = parseBounds(context, wrapper);\n if (wrapper.firstChild) {\n parentNode.replaceChild(wrapper.firstChild, wrapper);\n }\n return bounds;\n }\n }\n return Bounds.EMPTY;\n};\nvar createRange = function (node, offset, length) {\n var ownerDocument = node.ownerDocument;\n if (!ownerDocument) {\n throw new Error('Node has no owner document');\n }\n var range = ownerDocument.createRange();\n range.setStart(node, offset);\n range.setEnd(node, offset + length);\n return range;\n};\nvar segmentGraphemes = function (value) {\n if (FEATURES.SUPPORT_NATIVE_TEXT_SEGMENTATION) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var segmenter = new Intl.Segmenter(void 0, { granularity: 'grapheme' });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return Array.from(segmenter.segment(value)).map(function (segment) { return segment.segment; });\n }\n return splitGraphemes(value);\n};\nvar segmentWords = function (value, styles) {\n if (FEATURES.SUPPORT_NATIVE_TEXT_SEGMENTATION) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var segmenter = new Intl.Segmenter(void 0, {\n granularity: 'word'\n });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return Array.from(segmenter.segment(value)).map(function (segment) { return segment.segment; });\n }\n return breakWords(value, styles);\n};\nvar breakText = function (value, styles) {\n return styles.letterSpacing !== 0 ? segmentGraphemes(value) : segmentWords(value, styles);\n};\n// https://drafts.csswg.org/css-text/#word-separator\nvar wordSeparators = [0x0020, 0x00a0, 0x1361, 0x10100, 0x10101, 0x1039, 0x1091];\nvar breakWords = function (str, styles) {\n var breaker = LineBreaker(str, {\n lineBreak: styles.lineBreak,\n wordBreak: styles.overflowWrap === \"break-word\" /* BREAK_WORD */ ? 'break-word' : styles.wordBreak\n });\n var words = [];\n var bk;\n var _loop_1 = function () {\n if (bk.value) {\n var value = bk.value.slice();\n var codePoints = toCodePoints$1(value);\n var word_1 = '';\n codePoints.forEach(function (codePoint) {\n if (wordSeparators.indexOf(codePoint) === -1) {\n word_1 += fromCodePoint$1(codePoint);\n }\n else {\n if (word_1.length) {\n words.push(word_1);\n }\n words.push(fromCodePoint$1(codePoint));\n word_1 = '';\n }\n });\n if (word_1.length) {\n words.push(word_1);\n }\n }\n };\n while (!(bk = breaker.next()).done) {\n _loop_1();\n }\n return words;\n};\n\nvar TextContainer = /** @class */ (function () {\n function TextContainer(context, node, styles) {\n this.text = transform(node.data, styles.textTransform);\n this.textBounds = parseTextBounds(context, this.text, styles, node);\n }\n return TextContainer;\n}());\nvar transform = function (text, transform) {\n switch (transform) {\n case 1 /* LOWERCASE */:\n return text.toLowerCase();\n case 3 /* CAPITALIZE */:\n return text.replace(CAPITALIZE, capitalize);\n case 2 /* UPPERCASE */:\n return text.toUpperCase();\n default:\n return text;\n }\n};\nvar CAPITALIZE = /(^|\\s|:|-|\\(|\\))([a-z])/g;\nvar capitalize = function (m, p1, p2) {\n if (m.length > 0) {\n return p1 + p2.toUpperCase();\n }\n return m;\n};\n\nvar ImageElementContainer = /** @class */ (function (_super) {\n __extends(ImageElementContainer, _super);\n function ImageElementContainer(context, img) {\n var _this = _super.call(this, context, img) || this;\n _this.src = img.currentSrc || img.src;\n _this.intrinsicWidth = img.naturalWidth;\n _this.intrinsicHeight = img.naturalHeight;\n _this.context.cache.addImage(_this.src);\n return _this;\n }\n return ImageElementContainer;\n}(ElementContainer));\n\nvar CanvasElementContainer = /** @class */ (function (_super) {\n __extends(CanvasElementContainer, _super);\n function CanvasElementContainer(context, canvas) {\n var _this = _super.call(this, context, canvas) || this;\n _this.canvas = canvas;\n _this.intrinsicWidth = canvas.width;\n _this.intrinsicHeight = canvas.height;\n return _this;\n }\n return CanvasElementContainer;\n}(ElementContainer));\n\nvar SVGElementContainer = /** @class */ (function (_super) {\n __extends(SVGElementContainer, _super);\n function SVGElementContainer(context, img) {\n var _this = _super.call(this, context, img) || this;\n var s = new XMLSerializer();\n var bounds = parseBounds(context, img);\n img.setAttribute('width', bounds.width + \"px\");\n img.setAttribute('height', bounds.height + \"px\");\n _this.svg = \"data:image/svg+xml,\" + encodeURIComponent(s.serializeToString(img));\n _this.intrinsicWidth = img.width.baseVal.value;\n _this.intrinsicHeight = img.height.baseVal.value;\n _this.context.cache.addImage(_this.svg);\n return _this;\n }\n return SVGElementContainer;\n}(ElementContainer));\n\nvar LIElementContainer = /** @class */ (function (_super) {\n __extends(LIElementContainer, _super);\n function LIElementContainer(context, element) {\n var _this = _super.call(this, context, element) || this;\n _this.value = element.value;\n return _this;\n }\n return LIElementContainer;\n}(ElementContainer));\n\nvar OLElementContainer = /** @class */ (function (_super) {\n __extends(OLElementContainer, _super);\n function OLElementContainer(context, element) {\n var _this = _super.call(this, context, element) || this;\n _this.start = element.start;\n _this.reversed = typeof element.reversed === 'boolean' && element.reversed === true;\n return _this;\n }\n return OLElementContainer;\n}(ElementContainer));\n\nvar CHECKBOX_BORDER_RADIUS = [\n {\n type: 15 /* DIMENSION_TOKEN */,\n flags: 0,\n unit: 'px',\n number: 3\n }\n];\nvar RADIO_BORDER_RADIUS = [\n {\n type: 16 /* PERCENTAGE_TOKEN */,\n flags: 0,\n number: 50\n }\n];\nvar reformatInputBounds = function (bounds) {\n if (bounds.width > bounds.height) {\n return new Bounds(bounds.left + (bounds.width - bounds.height) / 2, bounds.top, bounds.height, bounds.height);\n }\n else if (bounds.width < bounds.height) {\n return new Bounds(bounds.left, bounds.top + (bounds.height - bounds.width) / 2, bounds.width, bounds.width);\n }\n return bounds;\n};\nvar getInputValue = function (node) {\n var value = node.type === PASSWORD ? new Array(node.value.length + 1).join('\\u2022') : node.value;\n return value.length === 0 ? node.placeholder || '' : value;\n};\nvar CHECKBOX = 'checkbox';\nvar RADIO = 'radio';\nvar PASSWORD = 'password';\nvar INPUT_COLOR = 0x2a2a2aff;\nvar InputElementContainer = /** @class */ (function (_super) {\n __extends(InputElementContainer, _super);\n function InputElementContainer(context, input) {\n var _this = _super.call(this, context, input) || this;\n _this.type = input.type.toLowerCase();\n _this.checked = input.checked;\n _this.value = getInputValue(input);\n if (_this.type === CHECKBOX || _this.type === RADIO) {\n _this.styles.backgroundColor = 0xdededeff;\n _this.styles.borderTopColor =\n _this.styles.borderRightColor =\n _this.styles.borderBottomColor =\n _this.styles.borderLeftColor =\n 0xa5a5a5ff;\n _this.styles.borderTopWidth =\n _this.styles.borderRightWidth =\n _this.styles.borderBottomWidth =\n _this.styles.borderLeftWidth =\n 1;\n _this.styles.borderTopStyle =\n _this.styles.borderRightStyle =\n _this.styles.borderBottomStyle =\n _this.styles.borderLeftStyle =\n 1 /* SOLID */;\n _this.styles.backgroundClip = [0 /* BORDER_BOX */];\n _this.styles.backgroundOrigin = [0 /* BORDER_BOX */];\n _this.bounds = reformatInputBounds(_this.bounds);\n }\n switch (_this.type) {\n case CHECKBOX:\n _this.styles.borderTopRightRadius =\n _this.styles.borderTopLeftRadius =\n _this.styles.borderBottomRightRadius =\n _this.styles.borderBottomLeftRadius =\n CHECKBOX_BORDER_RADIUS;\n break;\n case RADIO:\n _this.styles.borderTopRightRadius =\n _this.styles.borderTopLeftRadius =\n _this.styles.borderBottomRightRadius =\n _this.styles.borderBottomLeftRadius =\n RADIO_BORDER_RADIUS;\n break;\n }\n return _this;\n }\n return InputElementContainer;\n}(ElementContainer));\n\nvar SelectElementContainer = /** @class */ (function (_super) {\n __extends(SelectElementContainer, _super);\n function SelectElementContainer(context, element) {\n var _this = _super.call(this, context, element) || this;\n var option = element.options[element.selectedIndex || 0];\n _this.value = option ? option.text || '' : '';\n return _this;\n }\n return SelectElementContainer;\n}(ElementContainer));\n\nvar TextareaElementContainer = /** @class */ (function (_super) {\n __extends(TextareaElementContainer, _super);\n function TextareaElementContainer(context, element) {\n var _this = _super.call(this, context, element) || this;\n _this.value = element.value;\n return _this;\n }\n return TextareaElementContainer;\n}(ElementContainer));\n\nvar IFrameElementContainer = /** @class */ (function (_super) {\n __extends(IFrameElementContainer, _super);\n function IFrameElementContainer(context, iframe) {\n var _this = _super.call(this, context, iframe) || this;\n _this.src = iframe.src;\n _this.width = parseInt(iframe.width, 10) || 0;\n _this.height = parseInt(iframe.height, 10) || 0;\n _this.backgroundColor = _this.styles.backgroundColor;\n try {\n if (iframe.contentWindow &&\n iframe.contentWindow.document &&\n iframe.contentWindow.document.documentElement) {\n _this.tree = parseTree(context, iframe.contentWindow.document.documentElement);\n // http://www.w3.org/TR/css3-background/#special-backgrounds\n var documentBackgroundColor = iframe.contentWindow.document.documentElement\n ? parseColor(context, getComputedStyle(iframe.contentWindow.document.documentElement).backgroundColor)\n : COLORS.TRANSPARENT;\n var bodyBackgroundColor = iframe.contentWindow.document.body\n ? parseColor(context, getComputedStyle(iframe.contentWindow.document.body).backgroundColor)\n : COLORS.TRANSPARENT;\n _this.backgroundColor = isTransparent(documentBackgroundColor)\n ? isTransparent(bodyBackgroundColor)\n ? _this.styles.backgroundColor\n : bodyBackgroundColor\n : documentBackgroundColor;\n }\n }\n catch (e) { }\n return _this;\n }\n return IFrameElementContainer;\n}(ElementContainer));\n\nvar LIST_OWNERS = ['OL', 'UL', 'MENU'];\nvar parseNodeTree = function (context, node, parent, root) {\n for (var childNode = node.firstChild, nextNode = void 0; childNode; childNode = nextNode) {\n nextNode = childNode.nextSibling;\n if (isTextNode(childNode) && childNode.data.trim().length > 0) {\n parent.textNodes.push(new TextContainer(context, childNode, parent.styles));\n }\n else if (isElementNode(childNode)) {\n if (isSlotElement(childNode) && childNode.assignedNodes) {\n childNode.assignedNodes().forEach(function (childNode) { return parseNodeTree(context, childNode, parent, root); });\n }\n else {\n var container = createContainer(context, childNode);\n if (container.styles.isVisible()) {\n if (createsRealStackingContext(childNode, container, root)) {\n container.flags |= 4 /* CREATES_REAL_STACKING_CONTEXT */;\n }\n else if (createsStackingContext(container.styles)) {\n container.flags |= 2 /* CREATES_STACKING_CONTEXT */;\n }\n if (LIST_OWNERS.indexOf(childNode.tagName) !== -1) {\n container.flags |= 8 /* IS_LIST_OWNER */;\n }\n parent.elements.push(container);\n childNode.slot;\n if (childNode.shadowRoot) {\n parseNodeTree(context, childNode.shadowRoot, container, root);\n }\n else if (!isTextareaElement(childNode) &&\n !isSVGElement(childNode) &&\n !isSelectElement(childNode)) {\n parseNodeTree(context, childNode, container, root);\n }\n }\n }\n }\n }\n};\nvar createContainer = function (context, element) {\n if (isImageElement(element)) {\n return new ImageElementContainer(context, element);\n }\n if (isCanvasElement(element)) {\n return new CanvasElementContainer(context, element);\n }\n if (isSVGElement(element)) {\n return new SVGElementContainer(context, element);\n }\n if (isLIElement(element)) {\n return new LIElementContainer(context, element);\n }\n if (isOLElement(element)) {\n return new OLElementContainer(context, element);\n }\n if (isInputElement(element)) {\n return new InputElementContainer(context, element);\n }\n if (isSelectElement(element)) {\n return new SelectElementContainer(context, element);\n }\n if (isTextareaElement(element)) {\n return new TextareaElementContainer(context, element);\n }\n if (isIFrameElement(element)) {\n return new IFrameElementContainer(context, element);\n }\n return new ElementContainer(context, element);\n};\nvar parseTree = function (context, element) {\n var container = createContainer(context, element);\n container.flags |= 4 /* CREATES_REAL_STACKING_CONTEXT */;\n parseNodeTree(context, element, container, container);\n return container;\n};\nvar createsRealStackingContext = function (node, container, root) {\n return (container.styles.isPositionedWithZIndex() ||\n container.styles.opacity < 1 ||\n container.styles.isTransformed() ||\n (isBodyElement(node) && root.styles.isTransparent()));\n};\nvar createsStackingContext = function (styles) { return styles.isPositioned() || styles.isFloating(); };\nvar isTextNode = function (node) { return node.nodeType === Node.TEXT_NODE; };\nvar isElementNode = function (node) { return node.nodeType === Node.ELEMENT_NODE; };\nvar isHTMLElementNode = function (node) {\n return isElementNode(node) && typeof node.style !== 'undefined' && !isSVGElementNode(node);\n};\nvar isSVGElementNode = function (element) {\n return typeof element.className === 'object';\n};\nvar isLIElement = function (node) { return node.tagName === 'LI'; };\nvar isOLElement = function (node) { return node.tagName === 'OL'; };\nvar isInputElement = function (node) { return node.tagName === 'INPUT'; };\nvar isHTMLElement = function (node) { return node.tagName === 'HTML'; };\nvar isSVGElement = function (node) { return node.tagName === 'svg'; };\nvar isBodyElement = function (node) { return node.tagName === 'BODY'; };\nvar isCanvasElement = function (node) { return node.tagName === 'CANVAS'; };\nvar isVideoElement = function (node) { return node.tagName === 'VIDEO'; };\nvar isImageElement = function (node) { return node.tagName === 'IMG'; };\nvar isIFrameElement = function (node) { return node.tagName === 'IFRAME'; };\nvar isStyleElement = function (node) { return node.tagName === 'STYLE'; };\nvar isScriptElement = function (node) { return node.tagName === 'SCRIPT'; };\nvar isTextareaElement = function (node) { return node.tagName === 'TEXTAREA'; };\nvar isSelectElement = function (node) { return node.tagName === 'SELECT'; };\nvar isSlotElement = function (node) { return node.tagName === 'SLOT'; };\n// https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name\nvar isCustomElement = function (node) { return node.tagName.indexOf('-') > 0; };\n\nvar CounterState = /** @class */ (function () {\n function CounterState() {\n this.counters = {};\n }\n CounterState.prototype.getCounterValue = function (name) {\n var counter = this.counters[name];\n if (counter && counter.length) {\n return counter[counter.length - 1];\n }\n return 1;\n };\n CounterState.prototype.getCounterValues = function (name) {\n var counter = this.counters[name];\n return counter ? counter : [];\n };\n CounterState.prototype.pop = function (counters) {\n var _this = this;\n counters.forEach(function (counter) { return _this.counters[counter].pop(); });\n };\n CounterState.prototype.parse = function (style) {\n var _this = this;\n var counterIncrement = style.counterIncrement;\n var counterReset = style.counterReset;\n var canReset = true;\n if (counterIncrement !== null) {\n counterIncrement.forEach(function (entry) {\n var counter = _this.counters[entry.counter];\n if (counter && entry.increment !== 0) {\n canReset = false;\n if (!counter.length) {\n counter.push(1);\n }\n counter[Math.max(0, counter.length - 1)] += entry.increment;\n }\n });\n }\n var counterNames = [];\n if (canReset) {\n counterReset.forEach(function (entry) {\n var counter = _this.counters[entry.counter];\n counterNames.push(entry.counter);\n if (!counter) {\n counter = _this.counters[entry.counter] = [];\n }\n counter.push(entry.reset);\n });\n }\n return counterNames;\n };\n return CounterState;\n}());\nvar ROMAN_UPPER = {\n integers: [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1],\n values: ['M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I']\n};\nvar ARMENIAN = {\n integers: [\n 9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, 900, 800, 700, 600, 500, 400, 300, 200, 100, 90, 80, 70,\n 60, 50, 40, 30, 20, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1\n ],\n values: [\n 'Ք',\n 'Փ',\n 'Ւ',\n 'Ց',\n 'Ր',\n 'Տ',\n 'Վ',\n 'Ս',\n 'Ռ',\n 'Ջ',\n 'Պ',\n 'Չ',\n 'Ո',\n 'Շ',\n 'Ն',\n 'Յ',\n 'Մ',\n 'Ճ',\n 'Ղ',\n 'Ձ',\n 'Հ',\n 'Կ',\n 'Ծ',\n 'Խ',\n 'Լ',\n 'Ի',\n 'Ժ',\n 'Թ',\n 'Ը',\n 'Է',\n 'Զ',\n 'Ե',\n 'Դ',\n 'Գ',\n 'Բ',\n 'Ա'\n ]\n};\nvar HEBREW = {\n integers: [\n 10000, 9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, 400, 300, 200, 100, 90, 80, 70, 60, 50, 40, 30, 20,\n 19, 18, 17, 16, 15, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1\n ],\n values: [\n 'י׳',\n 'ט׳',\n 'ח׳',\n 'ז׳',\n 'ו׳',\n 'ה׳',\n 'ד׳',\n 'ג׳',\n 'ב׳',\n 'א׳',\n 'ת',\n 'ש',\n 'ר',\n 'ק',\n 'צ',\n 'פ',\n 'ע',\n 'ס',\n 'נ',\n 'מ',\n 'ל',\n 'כ',\n 'יט',\n 'יח',\n 'יז',\n 'טז',\n 'טו',\n 'י',\n 'ט',\n 'ח',\n 'ז',\n 'ו',\n 'ה',\n 'ד',\n 'ג',\n 'ב',\n 'א'\n ]\n};\nvar GEORGIAN = {\n integers: [\n 10000, 9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, 900, 800, 700, 600, 500, 400, 300, 200, 100, 90,\n 80, 70, 60, 50, 40, 30, 20, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1\n ],\n values: [\n 'ჵ',\n 'ჰ',\n 'ჯ',\n 'ჴ',\n 'ხ',\n 'ჭ',\n 'წ',\n 'ძ',\n 'ც',\n 'ჩ',\n 'შ',\n 'ყ',\n 'ღ',\n 'ქ',\n 'ფ',\n 'ჳ',\n 'ტ',\n 'ს',\n 'რ',\n 'ჟ',\n 'პ',\n 'ო',\n 'ჲ',\n 'ნ',\n 'მ',\n 'ლ',\n 'კ',\n 'ი',\n 'თ',\n 'ჱ',\n 'ზ',\n 'ვ',\n 'ე',\n 'დ',\n 'გ',\n 'ბ',\n 'ა'\n ]\n};\nvar createAdditiveCounter = function (value, min, max, symbols, fallback, suffix) {\n if (value < min || value > max) {\n return createCounterText(value, fallback, suffix.length > 0);\n }\n return (symbols.integers.reduce(function (string, integer, index) {\n while (value >= integer) {\n value -= integer;\n string += symbols.values[index];\n }\n return string;\n }, '') + suffix);\n};\nvar createCounterStyleWithSymbolResolver = function (value, codePointRangeLength, isNumeric, resolver) {\n var string = '';\n do {\n if (!isNumeric) {\n value--;\n }\n string = resolver(value) + string;\n value /= codePointRangeLength;\n } while (value * codePointRangeLength >= codePointRangeLength);\n return string;\n};\nvar createCounterStyleFromRange = function (value, codePointRangeStart, codePointRangeEnd, isNumeric, suffix) {\n var codePointRangeLength = codePointRangeEnd - codePointRangeStart + 1;\n return ((value < 0 ? '-' : '') +\n (createCounterStyleWithSymbolResolver(Math.abs(value), codePointRangeLength, isNumeric, function (codePoint) {\n return fromCodePoint$1(Math.floor(codePoint % codePointRangeLength) + codePointRangeStart);\n }) +\n suffix));\n};\nvar createCounterStyleFromSymbols = function (value, symbols, suffix) {\n if (suffix === void 0) { suffix = '. '; }\n var codePointRangeLength = symbols.length;\n return (createCounterStyleWithSymbolResolver(Math.abs(value), codePointRangeLength, false, function (codePoint) { return symbols[Math.floor(codePoint % codePointRangeLength)]; }) + suffix);\n};\nvar CJK_ZEROS = 1 << 0;\nvar CJK_TEN_COEFFICIENTS = 1 << 1;\nvar CJK_TEN_HIGH_COEFFICIENTS = 1 << 2;\nvar CJK_HUNDRED_COEFFICIENTS = 1 << 3;\nvar createCJKCounter = function (value, numbers, multipliers, negativeSign, suffix, flags) {\n if (value < -9999 || value > 9999) {\n return createCounterText(value, 4 /* CJK_DECIMAL */, suffix.length > 0);\n }\n var tmp = Math.abs(value);\n var string = suffix;\n if (tmp === 0) {\n return numbers[0] + string;\n }\n for (var digit = 0; tmp > 0 && digit <= 4; digit++) {\n var coefficient = tmp % 10;\n if (coefficient === 0 && contains(flags, CJK_ZEROS) && string !== '') {\n string = numbers[coefficient] + string;\n }\n else if (coefficient > 1 ||\n (coefficient === 1 && digit === 0) ||\n (coefficient === 1 && digit === 1 && contains(flags, CJK_TEN_COEFFICIENTS)) ||\n (coefficient === 1 && digit === 1 && contains(flags, CJK_TEN_HIGH_COEFFICIENTS) && value > 100) ||\n (coefficient === 1 && digit > 1 && contains(flags, CJK_HUNDRED_COEFFICIENTS))) {\n string = numbers[coefficient] + (digit > 0 ? multipliers[digit - 1] : '') + string;\n }\n else if (coefficient === 1 && digit > 0) {\n string = multipliers[digit - 1] + string;\n }\n tmp = Math.floor(tmp / 10);\n }\n return (value < 0 ? negativeSign : '') + string;\n};\nvar CHINESE_INFORMAL_MULTIPLIERS = '十百千萬';\nvar CHINESE_FORMAL_MULTIPLIERS = '拾佰仟萬';\nvar JAPANESE_NEGATIVE = 'マイナス';\nvar KOREAN_NEGATIVE = '마이너스';\nvar createCounterText = function (value, type, appendSuffix) {\n var defaultSuffix = appendSuffix ? '. ' : '';\n var cjkSuffix = appendSuffix ? '、' : '';\n var koreanSuffix = appendSuffix ? ', ' : '';\n var spaceSuffix = appendSuffix ? ' ' : '';\n switch (type) {\n case 0 /* DISC */:\n return '•' + spaceSuffix;\n case 1 /* CIRCLE */:\n return '◦' + spaceSuffix;\n case 2 /* SQUARE */:\n return '◾' + spaceSuffix;\n case 5 /* DECIMAL_LEADING_ZERO */:\n var string = createCounterStyleFromRange(value, 48, 57, true, defaultSuffix);\n return string.length < 4 ? \"0\" + string : string;\n case 4 /* CJK_DECIMAL */:\n return createCounterStyleFromSymbols(value, '〇一二三四五六七八九', cjkSuffix);\n case 6 /* LOWER_ROMAN */:\n return createAdditiveCounter(value, 1, 3999, ROMAN_UPPER, 3 /* DECIMAL */, defaultSuffix).toLowerCase();\n case 7 /* UPPER_ROMAN */:\n return createAdditiveCounter(value, 1, 3999, ROMAN_UPPER, 3 /* DECIMAL */, defaultSuffix);\n case 8 /* LOWER_GREEK */:\n return createCounterStyleFromRange(value, 945, 969, false, defaultSuffix);\n case 9 /* LOWER_ALPHA */:\n return createCounterStyleFromRange(value, 97, 122, false, defaultSuffix);\n case 10 /* UPPER_ALPHA */:\n return createCounterStyleFromRange(value, 65, 90, false, defaultSuffix);\n case 11 /* ARABIC_INDIC */:\n return createCounterStyleFromRange(value, 1632, 1641, true, defaultSuffix);\n case 12 /* ARMENIAN */:\n case 49 /* UPPER_ARMENIAN */:\n return createAdditiveCounter(value, 1, 9999, ARMENIAN, 3 /* DECIMAL */, defaultSuffix);\n case 35 /* LOWER_ARMENIAN */:\n return createAdditiveCounter(value, 1, 9999, ARMENIAN, 3 /* DECIMAL */, defaultSuffix).toLowerCase();\n case 13 /* BENGALI */:\n return createCounterStyleFromRange(value, 2534, 2543, true, defaultSuffix);\n case 14 /* CAMBODIAN */:\n case 30 /* KHMER */:\n return createCounterStyleFromRange(value, 6112, 6121, true, defaultSuffix);\n case 15 /* CJK_EARTHLY_BRANCH */:\n return createCounterStyleFromSymbols(value, '子丑寅卯辰巳午未申酉戌亥', cjkSuffix);\n case 16 /* CJK_HEAVENLY_STEM */:\n return createCounterStyleFromSymbols(value, '甲乙丙丁戊己庚辛壬癸', cjkSuffix);\n case 17 /* CJK_IDEOGRAPHIC */:\n case 48 /* TRAD_CHINESE_INFORMAL */:\n return createCJKCounter(value, '零一二三四五六七八九', CHINESE_INFORMAL_MULTIPLIERS, '負', cjkSuffix, CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS);\n case 47 /* TRAD_CHINESE_FORMAL */:\n return createCJKCounter(value, '零壹貳參肆伍陸柒捌玖', CHINESE_FORMAL_MULTIPLIERS, '負', cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS);\n case 42 /* SIMP_CHINESE_INFORMAL */:\n return createCJKCounter(value, '零一二三四五六七八九', CHINESE_INFORMAL_MULTIPLIERS, '负', cjkSuffix, CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS);\n case 41 /* SIMP_CHINESE_FORMAL */:\n return createCJKCounter(value, '零壹贰叁肆伍陆柒捌玖', CHINESE_FORMAL_MULTIPLIERS, '负', cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS);\n case 26 /* JAPANESE_INFORMAL */:\n return createCJKCounter(value, '〇一二三四五六七八九', '十百千万', JAPANESE_NEGATIVE, cjkSuffix, 0);\n case 25 /* JAPANESE_FORMAL */:\n return createCJKCounter(value, '零壱弐参四伍六七八九', '拾百千万', JAPANESE_NEGATIVE, cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS);\n case 31 /* KOREAN_HANGUL_FORMAL */:\n return createCJKCounter(value, '영일이삼사오육칠팔구', '십백천만', KOREAN_NEGATIVE, koreanSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS);\n case 33 /* KOREAN_HANJA_INFORMAL */:\n return createCJKCounter(value, '零一二三四五六七八九', '十百千萬', KOREAN_NEGATIVE, koreanSuffix, 0);\n case 32 /* KOREAN_HANJA_FORMAL */:\n return createCJKCounter(value, '零壹貳參四五六七八九', '拾百千', KOREAN_NEGATIVE, koreanSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS);\n case 18 /* DEVANAGARI */:\n return createCounterStyleFromRange(value, 0x966, 0x96f, true, defaultSuffix);\n case 20 /* GEORGIAN */:\n return createAdditiveCounter(value, 1, 19999, GEORGIAN, 3 /* DECIMAL */, defaultSuffix);\n case 21 /* GUJARATI */:\n return createCounterStyleFromRange(value, 0xae6, 0xaef, true, defaultSuffix);\n case 22 /* GURMUKHI */:\n return createCounterStyleFromRange(value, 0xa66, 0xa6f, true, defaultSuffix);\n case 22 /* HEBREW */:\n return createAdditiveCounter(value, 1, 10999, HEBREW, 3 /* DECIMAL */, defaultSuffix);\n case 23 /* HIRAGANA */:\n return createCounterStyleFromSymbols(value, 'あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをん');\n case 24 /* HIRAGANA_IROHA */:\n return createCounterStyleFromSymbols(value, 'いろはにほへとちりぬるをわかよたれそつねならむうゐのおくやまけふこえてあさきゆめみしゑひもせす');\n case 27 /* KANNADA */:\n return createCounterStyleFromRange(value, 0xce6, 0xcef, true, defaultSuffix);\n case 28 /* KATAKANA */:\n return createCounterStyleFromSymbols(value, 'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲン', cjkSuffix);\n case 29 /* KATAKANA_IROHA */:\n return createCounterStyleFromSymbols(value, 'イロハニホヘトチリヌルヲワカヨタレソツネナラムウヰノオクヤマケフコエテアサキユメミシヱヒモセス', cjkSuffix);\n case 34 /* LAO */:\n return createCounterStyleFromRange(value, 0xed0, 0xed9, true, defaultSuffix);\n case 37 /* MONGOLIAN */:\n return createCounterStyleFromRange(value, 0x1810, 0x1819, true, defaultSuffix);\n case 38 /* MYANMAR */:\n return createCounterStyleFromRange(value, 0x1040, 0x1049, true, defaultSuffix);\n case 39 /* ORIYA */:\n return createCounterStyleFromRange(value, 0xb66, 0xb6f, true, defaultSuffix);\n case 40 /* PERSIAN */:\n return createCounterStyleFromRange(value, 0x6f0, 0x6f9, true, defaultSuffix);\n case 43 /* TAMIL */:\n return createCounterStyleFromRange(value, 0xbe6, 0xbef, true, defaultSuffix);\n case 44 /* TELUGU */:\n return createCounterStyleFromRange(value, 0xc66, 0xc6f, true, defaultSuffix);\n case 45 /* THAI */:\n return createCounterStyleFromRange(value, 0xe50, 0xe59, true, defaultSuffix);\n case 46 /* TIBETAN */:\n return createCounterStyleFromRange(value, 0xf20, 0xf29, true, defaultSuffix);\n case 3 /* DECIMAL */:\n default:\n return createCounterStyleFromRange(value, 48, 57, true, defaultSuffix);\n }\n};\n\nvar IGNORE_ATTRIBUTE = 'data-html2canvas-ignore';\nvar DocumentCloner = /** @class */ (function () {\n function DocumentCloner(context, element, options) {\n this.context = context;\n this.options = options;\n this.scrolledElements = [];\n this.referenceElement = element;\n this.counters = new CounterState();\n this.quoteDepth = 0;\n if (!element.ownerDocument) {\n throw new Error('Cloned element does not have an owner document');\n }\n this.documentElement = this.cloneNode(element.ownerDocument.documentElement, false);\n }\n DocumentCloner.prototype.toIFrame = function (ownerDocument, windowSize) {\n var _this = this;\n var iframe = createIFrameContainer(ownerDocument, windowSize);\n if (!iframe.contentWindow) {\n return Promise.reject(\"Unable to find iframe window\");\n }\n var scrollX = ownerDocument.defaultView.pageXOffset;\n var scrollY = ownerDocument.defaultView.pageYOffset;\n var cloneWindow = iframe.contentWindow;\n var documentClone = cloneWindow.document;\n /* Chrome doesn't detect relative background-images assigned in inline + + + + + + + + + + + + + + + + + diff --git a/platform/viewer/public/assets/example.json b/platform/viewer/public/assets/example.json new file mode 100644 index 00000000000..1f8dc704826 --- /dev/null +++ b/platform/viewer/public/assets/example.json @@ -0,0 +1,216 @@ +{ + "routerBasename": "/", + "extensions": [], + "modes": [], + "showStudyList": true, + "maxNumberOfWebWorkers": 6, + "maxNumRequests": { + "interaction": 100, + "thumbnail": 75, + "prefetch": 10 + }, + "dataSources": [ + { + "friendlyName": "dcmjs DICOMWeb Server", + "namespace": "@ohif/extension-default.dataSourcesModule.dicomweb", + "sourceName": "dicomweb", + "configuration": { + "name": "DCM4CHEE", + "wadoUriRoot": "https://domvja9iplmyu.cloudfront.net/dicomweb", + "qidoRoot": "https://domvja9iplmyu.cloudfront.net/dicomweb", + "wadoRoot": "https://domvja9iplmyu.cloudfront.net/dicomweb", + "qidoSupportsIncludeField": false, + "supportsReject": false, + "imageRendering": "wadors", + "thumbnailRendering": "wadors", + "enableStudyLazyLoad": true, + "supportsFuzzyMatching": false, + "supportsWildcard": true, + "staticWado": true, + "singlepart": "bulkdata,video,pdf" + } + }, + { + "friendlyName": "dicom json", + "namespace": "@ohif/extension-default.dataSourcesModule.dicomjson", + "sourceName": "dicomjson", + "configuration": { + "name": "json" + } + }, + { + "friendlyName": "dicom local", + "namespace": "@ohif/extension-default.dataSourcesModule.dicomlocal", + "sourceName": "dicomlocal", + "configuration": {} + } + ], + "defaultDataSourceName": "dicomweb", + "hotkeys": [ + { + "commandName": "incrementActiveViewport", + "label": "Next Viewport", + "keys": [ + "right" + ] + }, + { + "commandName": "decrementActiveViewport", + "label": "Previous Viewport", + "keys": [ + "left" + ] + }, + { + "commandName": "rotateViewportCW", + "label": "Rotate Right", + "keys": [ + "r" + ] + }, + { + "commandName": "rotateViewportCCW", + "label": "Rotate Left", + "keys": [ + "l" + ] + }, + { + "commandName": "invertViewport", + "label": "Invert", + "keys": [ + "i" + ] + }, + { + "commandName": "flipViewportHorizontal", + "label": "Flip Horizontally", + "keys": [ + "h" + ] + }, + { + "commandName": "flipViewportVertical", + "label": "Flip Vertically", + "keys": [ + "v" + ] + }, + { + "commandName": "scaleUpViewport", + "label": "Zoom In", + "keys": [ + "+" + ] + }, + { + "commandName": "scaleDownViewport", + "label": "Zoom Out", + "keys": [ + "-" + ] + }, + { + "commandName": "fitViewportToWindow", + "label": "Zoom to Fit", + "keys": [ + "=" + ] + }, + { + "commandName": "resetViewport", + "label": "Reset", + "keys": [ + "space" + ] + }, + { + "commandName": "nextImage", + "label": "Next Image", + "keys": [ + "down" + ] + }, + { + "commandName": "previousImage", + "label": "Previous Image", + "keys": [ + "up" + ] + }, + { + "commandName": "setToolActive", + "commandOptions": { + "toolName": "Zoom" + }, + "label": "Zoom", + "keys": [ + "z" + ] + }, + { + "commandName": "windowLevelPreset1", + "label": "W/L Preset 1", + "keys": [ + "1" + ] + }, + { + "commandName": "windowLevelPreset2", + "label": "W/L Preset 2", + "keys": [ + "2" + ] + }, + { + "commandName": "windowLevelPreset3", + "label": "W/L Preset 3", + "keys": [ + "3" + ] + }, + { + "commandName": "windowLevelPreset4", + "label": "W/L Preset 4", + "keys": [ + "4" + ] + }, + { + "commandName": "windowLevelPreset5", + "label": "W/L Preset 5", + "keys": [ + "5" + ] + }, + { + "commandName": "windowLevelPreset6", + "label": "W/L Preset 6", + "keys": [ + "6" + ] + }, + { + "commandName": "windowLevelPreset7", + "label": "W/L Preset 7", + "keys": [ + "7" + ] + }, + { + "commandName": "windowLevelPreset8", + "label": "W/L Preset 8", + "keys": [ + "8" + ] + }, + { + "commandName": "windowLevelPreset9", + "label": "W/L Preset 9", + "keys": [ + "9" + ] + } + ] + } + \ No newline at end of file diff --git a/platform/viewer/public/assets/favicon-16x16.png b/platform/viewer/public/assets/favicon-16x16.png index 0dbb01b5c30..0c9264fbb97 100644 Binary files a/platform/viewer/public/assets/favicon-16x16.png and b/platform/viewer/public/assets/favicon-16x16.png differ diff --git a/platform/viewer/public/assets/favicon-32x32.png b/platform/viewer/public/assets/favicon-32x32.png index 2e71deeb0ce..5e174771147 100644 Binary files a/platform/viewer/public/assets/favicon-32x32.png and b/platform/viewer/public/assets/favicon-32x32.png differ diff --git a/platform/viewer/public/assets/favicon.ico b/platform/viewer/public/assets/favicon.ico index faaa2cf9c10..dc5db01851a 100644 Binary files a/platform/viewer/public/assets/favicon.ico and b/platform/viewer/public/assets/favicon.ico differ diff --git a/platform/viewer/public/assets/loader.gif b/platform/viewer/public/assets/loader.gif new file mode 100644 index 00000000000..3df85c80080 Binary files /dev/null and b/platform/viewer/public/assets/loader.gif differ diff --git a/platform/viewer/public/config/default.js b/platform/viewer/public/config/default.js index c0de3708a98..19cf68e8bd2 100644 --- a/platform/viewer/public/config/default.js +++ b/platform/viewer/public/config/default.js @@ -9,12 +9,14 @@ window.config = { }, showStudyList: true, // some windows systems have issues with more than 3 web workers - maxNumberOfWebWorkers: 3, + maxNumberOfWebWorkers: 2, // below flag is for performance reasons, but it might not work for all servers omitQuotationForMultipartRequest: true, showWarningMessageForCrossOrigin: true, showCPUFallbackMessage: true, showLoadingIndicator: true, + maxCacheSize: 1024 * 1024 * 300, + //maxNumberOfWebWorkers: 2,x`x` maxNumRequests: { interaction: 100, thumbnail: 75, @@ -28,14 +30,12 @@ window.config = { sourceName: 'dicomweb', configuration: { name: 'aws', - // old server - // wadoUriRoot: 'https://server.dcmjs.org/dcm4chee-arc/aets/DCM4CHEE/wado', - // qidoRoot: 'https://server.dcmjs.org/dcm4chee-arc/aets/DCM4CHEE/rs', - // wadoRoot: 'https://server.dcmjs.org/dcm4chee-arc/aets/DCM4CHEE/rs', - // new server - wadoUriRoot: 'https://domvja9iplmyu.cloudfront.net/dicomweb', - qidoRoot: 'https://domvja9iplmyu.cloudfront.net/dicomweb', - wadoRoot: 'https://domvja9iplmyu.cloudfront.net/dicomweb', + // wadoUriRoot: '{siteUrl}', + // qidoRoot: '{siteUrl}', + // wadoRoot: '{siteUrl}', + wadoUriRoot: 'https://d1zt0lkqsoz8si.cloudfront.net/dicomweb', + qidoRoot: 'https://d1zt0lkqsoz8si.cloudfront.net/dicomweb', + wadoRoot: 'https://d1zt0lkqsoz8si.cloudfront.net/dicomweb', qidoSupportsIncludeField: false, supportsReject: false, imageRendering: 'wadors', @@ -45,6 +45,7 @@ window.config = { supportsWildcard: true, staticWado: true, singlepart: 'bulkdata,video,pdf', + withCredentials: false }, }, { @@ -69,25 +70,24 @@ window.config = { // Could use services manager here to bring up a dialog/modal if needed. console.warn('test, navigate to https://ohif.org/'); }, - // whiteLabeling: { - // /* Optional: Should return a React component to be rendered in the "Logo" section of the application's Top Navigation bar */ - // createLogoComponentFn: function (React) { - // return React.createElement( - // 'a', - // { - // target: '_self', - // rel: 'noopener noreferrer', - // className: 'text-purple-600 line-through', - // href: '/', - // }, - // React.createElement('img', - // { - // src: './customLogo.svg', - // className: 'w-8 h-8', - // } - // )) - // }, - // }, + whiteLabeling: { + /* Optional: Should return a React component to be rendered in the "Logo" section of the application's Top Navigation bar */ + createLogoComponentFn: function(React) { + return React.createElement( + 'a', + { + target: '_self', + rel: 'noopener noreferrer', + className: 'text-purple-600 line-through', + href: '/', + }, + React.createElement('img', { + src: './logo.svg', + className: 'w-12', + }) + ); + }, + }, defaultDataSourceName: 'dicomweb', hotkeys: [ { diff --git a/platform/viewer/public/config/example.json b/platform/viewer/public/config/example.json new file mode 100644 index 00000000000..10fcb1fa3d0 --- /dev/null +++ b/platform/viewer/public/config/example.json @@ -0,0 +1,213 @@ +{ + "routerBasename": "/", + "extensions": [], + "modes": [], + "showStudyList": true, + "maxNumberOfWebWorkers": 6, + "maxNumRequests": { + "interaction": 100, + "thumbnail": 75, + "prefetch": 10 + }, + "dataSources": [ + { + "friendlyName": "dcmjs DICOMWeb Server", + "namespace": "@ohif/extension-default.dataSourcesModule.dicomweb", + "sourceName": "dicomweb", + "configuration": { + "name": "DCM4CHEE", + "wadoUriRoot": "https://server.dcmjs.org/dcm4chee-arc/aets/DCM4CHEE/wado", + "qidoRoot": "https://server.dcmjs.org/dcm4chee-arc/aets/DCM4CHEE/rs", + "wadoRoot": "https://server.dcmjs.org/dcm4chee-arc/aets/DCM4CHEE/rs", + "qidoSupportsIncludeField": true, + "supportsReject": true, + "imageRendering": "wadors", + "thumbnailRendering": "wadors", + "enableStudyLazyLoad": true, + "supportsFuzzyMatching": true, + "supportsWildcard": true + } + }, + { + "friendlyName": "dicom json", + "namespace": "@ohif/extension-default.dataSourcesModule.dicomjson", + "sourceName": "dicomjson", + "configuration": { + "name": "json" + } + }, + { + "friendlyName": "dicom local", + "namespace": "@ohif/extension-default.dataSourcesModule.dicomlocal", + "sourceName": "dicomlocal", + "configuration": {} + } + ], + "defaultDataSourceName": "dicomweb", + "hotkeys": [ + { + "commandName": "incrementActiveViewport", + "label": "Next Viewport", + "keys": [ + "right" + ] + }, + { + "commandName": "decrementActiveViewport", + "label": "Previous Viewport", + "keys": [ + "left" + ] + }, + { + "commandName": "rotateViewportCW", + "label": "Rotate Right", + "keys": [ + "r" + ] + }, + { + "commandName": "rotateViewportCCW", + "label": "Rotate Left", + "keys": [ + "l" + ] + }, + { + "commandName": "invertViewport", + "label": "Invert", + "keys": [ + "i" + ] + }, + { + "commandName": "flipViewportHorizontal", + "label": "Flip Horizontally", + "keys": [ + "h" + ] + }, + { + "commandName": "flipViewportVertical", + "label": "Flip Vertically", + "keys": [ + "v" + ] + }, + { + "commandName": "scaleUpViewport", + "label": "Zoom In", + "keys": [ + "+" + ] + }, + { + "commandName": "scaleDownViewport", + "label": "Zoom Out", + "keys": [ + "-" + ] + }, + { + "commandName": "fitViewportToWindow", + "label": "Zoom to Fit", + "keys": [ + "=" + ] + }, + { + "commandName": "resetViewport", + "label": "Reset", + "keys": [ + "space" + ] + }, + { + "commandName": "nextImage", + "label": "Next Image", + "keys": [ + "down" + ] + }, + { + "commandName": "previousImage", + "label": "Previous Image", + "keys": [ + "up" + ] + }, + { + "commandName": "setToolActive", + "commandOptions": { + "toolName": "Zoom" + }, + "label": "Zoom", + "keys": [ + "z" + ] + }, + { + "commandName": "windowLevelPreset1", + "label": "W/L Preset 1", + "keys": [ + "1" + ] + }, + { + "commandName": "windowLevelPreset2", + "label": "W/L Preset 2", + "keys": [ + "2" + ] + }, + { + "commandName": "windowLevelPreset3", + "label": "W/L Preset 3", + "keys": [ + "3" + ] + }, + { + "commandName": "windowLevelPreset4", + "label": "W/L Preset 4", + "keys": [ + "4" + ] + }, + { + "commandName": "windowLevelPreset5", + "label": "W/L Preset 5", + "keys": [ + "5" + ] + }, + { + "commandName": "windowLevelPreset6", + "label": "W/L Preset 6", + "keys": [ + "6" + ] + }, + { + "commandName": "windowLevelPreset7", + "label": "W/L Preset 7", + "keys": [ + "7" + ] + }, + { + "commandName": "windowLevelPreset8", + "label": "W/L Preset 8", + "keys": [ + "8" + ] + }, + { + "commandName": "windowLevelPreset9", + "label": "W/L Preset 9", + "keys": [ + "9" + ] + } + ] +} diff --git a/platform/viewer/public/html-templates/index.html b/platform/viewer/public/html-templates/index.html index 9bdc95e0318..69fc57f81fb 100644 --- a/platform/viewer/public/html-templates/index.html +++ b/platform/viewer/public/html-templates/index.html @@ -4,7 +4,7 @@ @@ -175,7 +175,7 @@ src="<%= PUBLIC_URL %>init-service-worker.js" > - OHIF Viewer + RapidAI Viewer @@ -202,7 +202,7 @@ --> - +
diff --git a/platform/viewer/public/html-templates/rollbar.html b/platform/viewer/public/html-templates/rollbar.html index e8899fe74be..077148e9c1c 100644 --- a/platform/viewer/public/html-templates/rollbar.html +++ b/platform/viewer/public/html-templates/rollbar.html @@ -3,20 +3,20 @@ - + - - + + - + @@ -72,7 +72,7 @@ - OHIF Viewer + RapidAI Rollbar Viewer @@ -93,7 +93,7 @@ --> - +
diff --git a/platform/viewer/public/logo.svg b/platform/viewer/public/logo.svg new file mode 100644 index 00000000000..0569018855c --- /dev/null +++ b/platform/viewer/public/logo.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/platform/viewer/src/App.tsx b/platform/viewer/src/App.tsx index f0f6d669d0b..a505ff620dd 100644 --- a/platform/viewer/src/App.tsx +++ b/platform/viewer/src/App.tsx @@ -3,7 +3,7 @@ import React, { useEffect, useState } from 'react'; import PropTypes from 'prop-types'; import i18n from '@ohif/i18n'; import { I18nextProvider } from 'react-i18next'; -import { BrowserRouter } from 'react-router-dom'; +import { HashRouter } from 'react-router-dom'; import Compose from './routes/Mode/Compose'; import { @@ -113,10 +113,10 @@ function App({ config, defaultExtensions, defaultModes }) { return ( - + {authRoutes} {appRoutes} - + ); } diff --git a/platform/viewer/src/components/ViewportGrid.tsx b/platform/viewer/src/components/ViewportGrid.tsx index 0c3d09fb92f..bf97caa6c2a 100644 --- a/platform/viewer/src/components/ViewportGrid.tsx +++ b/platform/viewer/src/components/ViewportGrid.tsx @@ -23,7 +23,12 @@ const ORIENTATION_MAP = { }; function ViewerViewportGrid(props) { - const { servicesManager, viewportComponents, dataSource } = props; + const { + servicesManager, + viewportComponents, + dataSource, + modeViewportPaneStyles = {}, + } = props; const [viewportGrid, viewportGridService] = useViewportGrid(); const { numCols, numRows, activeViewportIndex, viewports } = viewportGrid; @@ -134,7 +139,7 @@ function ViewerViewportGrid(props) { const displaySetsNotInGrid = availableDisplaySets.filter( displaySet => gridDisplaySetUIDs.indexOf(displaySet.displaySetInstanceUID) === - -1 && + -1 && ['SEG', 'SR', 'RTSTRUCT'].indexOf(displaySet.Modality) === -1 ); @@ -406,8 +411,7 @@ function ViewerViewportGrid(props) { const onInteractionHandler = event => { if (isActive) return; - - if (event) { + if (event && event.type !== 'touchstart') { event.preventDefault(); event.stopPropagation(); } @@ -430,14 +434,12 @@ function ViewerViewportGrid(props) { left: viewportX * 100 + 0.2 + '%', width: viewportWidth * 100 - 0.3 + '%', height: viewportHeight * 100 - 0.3 + '%', + ohifDisableBorder: numViewports === 1, + ...modeViewportPaneStyles, }} isActive={isActive} > -
+
{ + /** + * Combine our appConfiguration with installed extensions and modes. + * In the future appConfiguration may contain modes added at runtime. + * */ + const [_, config_json] = arr; + if (config_json !== null) { + /** + * Whitelabeling is passed via app config because it is a react + * component. It may be better to simply take in a uri path to an asset + * instead to simplify the API + */ + const whiteLabeling = window.config.whiteLabeling; + window.config = config_json; + window.config.whiteLabeling = whiteLabeling; + } -loadDynamicImports().then(() => { loadRuntimeImports(window.config).then(() => { /** * Combine our appConfiguration with installed extensions and modes. diff --git a/platform/viewer/src/loadDynamicConfig.js b/platform/viewer/src/loadDynamicConfig.js new file mode 100644 index 00000000000..c2a7fa6f2c0 --- /dev/null +++ b/platform/viewer/src/loadDynamicConfig.js @@ -0,0 +1,18 @@ +export default async () => { + let query = new URLSearchParams(window.location.search); + let configUrl = query.get('configUrl'); + + if (!configUrl) { + // Handle OIDC redirects + const obj = JSON.parse(sessionStorage.getItem('ohif-redirect-to')); + if (obj) { + const query = new URLSearchParams(obj.search); + configUrl = query.get('configUrl'); + } + } else { + const response = await fetch(configUrl); + return response.json(); + } + + return null; +}; diff --git a/platform/viewer/src/routes/DataSourceWrapper.tsx b/platform/viewer/src/routes/DataSourceWrapper.tsx index 51fa05d954c..4fad6a2b851 100644 --- a/platform/viewer/src/routes/DataSourceWrapper.tsx +++ b/platform/viewer/src/routes/DataSourceWrapper.tsx @@ -98,7 +98,7 @@ function DataSourceWrapper(props) { const newOffset = Math.floor( (queryFilterValues.pageNumber * queryFilterValues.resultsPerPage) / - STUDIES_LIMIT + STUDIES_LIMIT ) * (STUDIES_LIMIT - 1); const isLocationUpdated = data.location !== location; @@ -167,6 +167,8 @@ function _getQueryFilterValues(query, queryLimit) { // Offset... offset: Math.floor((pageNumber * resultsPerPage) / queryLimit) * (queryLimit - 1), + // Config for dynamic config urls + config: query.get('configUrl'), }; // patientName: good diff --git a/platform/viewer/src/routes/Local/Local.tsx b/platform/viewer/src/routes/Local/Local.tsx index af0dea0701c..ea0b3bed5ba 100644 --- a/platform/viewer/src/routes/Local/Local.tsx +++ b/platform/viewer/src/routes/Local/Local.tsx @@ -91,8 +91,8 @@ function Local() {
OHIF
{dropInitiated ? ( diff --git a/platform/viewer/src/routes/Mode/Mode.tsx b/platform/viewer/src/routes/Mode/Mode.tsx index ad110902cea..09fbd81b8d1 100644 --- a/platform/viewer/src/routes/Mode/Mode.tsx +++ b/platform/viewer/src/routes/Mode/Mode.tsx @@ -19,7 +19,15 @@ import Compose from './Compose'; * @returns array of subscriptions to cancel */ function defaultRouteInit( - { servicesManager, studyInstanceUIDs, dataSource, filters }, + { + servicesManager, + studyInstanceUIDs, + dataSource, + seriesInstanceUIDs, + filters, + sortCriteria, + sortFunction, + }, hangingProtocolId ) { const { @@ -32,7 +40,7 @@ function defaultRouteInit( unsubscribe: instanceAddedUnsubscribe, } = DicomMetadataStore.subscribe( DicomMetadataStore.EVENTS.INSTANCES_ADDED, - function({ StudyInstanceUID, SeriesInstanceUID, madeInClient = false }) { + function ({ StudyInstanceUID, SeriesInstanceUID, madeInClient = false }) { const seriesMetadata = DicomMetadataStore.getSeries( StudyInstanceUID, SeriesInstanceUID @@ -44,12 +52,42 @@ function defaultRouteInit( unsubscriptions.push(instanceAddedUnsubscribe); - const allRetrieves = studyInstanceUIDs.map(StudyInstanceUID => - dataSource.retrieve.series.metadata({ + let allRetrieves = studyInstanceUIDs.map(StudyInstanceUID => { + seriesInstanceUIDs = seriesInstanceUIDs || []; + filters = filters || {}; + + let retrievedSeries; + + // if (seriesInstanceUIDs.length) { + // retrievedSeries = seriesInstanceUIDs.map(seriesInstanceUID => { + // filters.seriesInstanceUID = seriesInstanceUID; + + // return dataSource.retrieve.series.metadata({ + // StudyInstanceUID, + // filters, + // sortCriteria, + // sortFunction, + // }); + // }); + // } else { + // retrievedSeries = dataSource.retrieve.series.metadata({ + // StudyInstanceUID, + // filters, + // sortCriteria, + // sortFunction, + // }); + // } + retrievedSeries = dataSource.retrieve.series.metadata({ StudyInstanceUID, filters, - }) - ); + sortCriteria, + sortFunction, + }); + + return retrievedSeries; + }); + + allRetrieves = allRetrieves.flat(); // The hanging protocol matching service is fairly expensive to run multiple // times, and doesn't allow partial matches to be made (it will simply fail @@ -57,6 +95,32 @@ function defaultRouteInit( // is retrieved (which will synchronously trigger the display set creation) // until we run the hanging protocol matching service. + hangingProtocolService.addCustomAttribute( + 'frameOfReferenceIsMatching', // attributeId + 'frameOfReferenceIsMatching', // attributeName + metaData => { + const FrameOfReferenceUID = + metaData['FrameOfReferenceUID'] ?? + ((metaData.images || metaData.others || [])[0] || {})[ + 'FrameOfReferenceUID' + ]; + return FrameOfReferenceUID === seriesInstanceUIDs[0]; + } + ); + + hangingProtocolService.addCustomAttribute( + 'seriesInstanceUidIsMatching', // attributeId + 'seriesInstanceUidIsMatching', // attributeName + metaData => { + const seriesInstanceUid = + metaData['SeriesInstanceUID'] ?? + ((metaData.images || metaData.others || [])[0] || {})[ + 'SeriesInstanceUID' + ]; + return seriesInstanceUid === seriesInstanceUIDs[0]; + } + ); + Promise.allSettled(allRetrieves).then(() => { const displaySets = displaySetService.getActiveDisplaySets(); @@ -107,8 +171,17 @@ export default function ModeRoute({ const params = useParams(); const searchParams = useSearchParams(); - const runTimeHangingProtocolId = searchParams.get('hangingprotocolid'); - const [studyInstanceUIDs, setStudyInstanceUIDs] = useState(); +const runTimeHangingProtocolId = searchParams.get('hangingprotocolid'); + const [ + { + studyInstanceUIDs, + seriesInstanceUIDs, + filters, + sortCriteria, + sortFunction, + }, + setStudyInstanceUIDs, + ] = useState({}); const [refresh, setRefresh] = useState(false); const layoutTemplateData = useRef(false); @@ -162,8 +235,9 @@ export default function ModeRoute({ const CombinedContextProvider = ({ children }) => Compose({ components: contextModuleProviders, children }); - function ViewportGridWithDataSource(props) { - return ViewportGrid({ ...props, dataSource }); + function ViewportGridWithDataSourceFactory(customViewportGridProps) { + return props => + ViewportGrid({ ...props, dataSource, ...customViewportGridProps }); } useEffect(() => { @@ -177,11 +251,23 @@ export default function ModeRoute({ useEffect(() => { // Todo: this should not be here, data source should not care about params const initializeDataSource = async (params, query) => { - const studyInstanceUIDs = await dataSource.initialize({ + const { + studyInstanceUIDs, + seriesInstanceUIDs, + filters, + sortCriteria, + sortFunction, + } = await dataSource.initialize({ params, query, }); - setStudyInstanceUIDs(studyInstanceUIDs); + setStudyInstanceUIDs({ + studyInstanceUIDs, + seriesInstanceUIDs, + filters, + sortCriteria, + sortFunction, + }); }; initializeDataSource(params, query); @@ -190,6 +276,33 @@ export default function ModeRoute({ }; }, [location]); + useEffect(() => { + if (dataSource.onNewStudy) { + dataSource.onNewStudy(({ studyInstanceUIDs }) => { + setStudyInstanceUIDs(studyInstanceUIDs); + }) + } + }, [location]); + + useEffect(() => { + if (dataSource.onNewStudy) { + dataSource.onNewStudy(({ studyInstanceUIDs, seriesInstanceUIDs }) => { + setStudyInstanceUIDs({ + studyInstanceUIDs, + seriesInstanceUIDs, + filters, + sortCriteria, + sortFunction, + }); + }); + } + }, [location]); + + useEffect(() => { + const { ExternalInterfaceService } = servicesManager.services; + ExternalInterfaceService.sendViewerReady(); + }, []); + useEffect(() => { const retrieveLayoutData = async () => { const layoutData = await route.layoutTemplate({ @@ -283,22 +396,19 @@ export default function ModeRoute({ * seriesInstanceUID: 1.2.276.0.7230010.3.1.3.1791068887.5412.1620253993.114611 * } */ - const filters = - Array.from(query.keys()).reduce( - (acc: Record, val: string) => { - if (val !== 'StudyInstanceUIDs') { - if (['seriesInstanceUID', 'SeriesInstanceUID'].includes(val)) { - return { - ...acc, - seriesInstanceUID: query.get(val), - }; - } - - return { ...acc, [val]: query.get(val) }; - } - }, - {} - ) ?? {}; + // const filters = + // Array.from(query.keys()).reduce( + // (acc: Record, val: string) => { + // if (val !== 'StudyInstanceUIDs') { + // if (['seriesInstanceUID', 'SeriesInstanceUID'].includes(val)) { + // return { ...acc, seriesInstanceUID: query.get(val) }; + // } + + // return { ...acc, [val]: query.get(val) }; + // } + // }, + // {} + // ) ?? {}; if (route.init) { return await route.init( @@ -306,9 +416,7 @@ export default function ModeRoute({ servicesManager, extensionManager, hotkeysManager, - studyInstanceUIDs, dataSource, - filters, }, hangingProtocolIdToUse ); @@ -319,7 +427,10 @@ export default function ModeRoute({ servicesManager, studyInstanceUIDs, dataSource, + seriesInstanceUIDs, filters, + sortCriteria, + sortFunction, }, hangingProtocolIdToUse ); @@ -376,7 +487,7 @@ export default function ModeRoute({ @@ -385,7 +496,9 @@ export default function ModeRoute({ studyInstanceUIDs[0] !== undefined && renderLayoutData({ ...layoutTemplateData.current.props, - ViewportGridComp: ViewportGridWithDataSource, + ViewportGridComp: ViewportGridWithDataSourceFactory( + layoutTemplateData.current?.props?.viewportGridProps + ), })} diff --git a/platform/viewer/src/routes/WorkList/WorkList.tsx b/platform/viewer/src/routes/WorkList/WorkList.tsx index 0026e4db229..f0df7df153e 100644 --- a/platform/viewer/src/routes/WorkList/WorkList.tsx +++ b/platform/viewer/src/routes/WorkList/WorkList.tsx @@ -324,13 +324,13 @@ function WorkList({ seriesTableDataSource={ seriesInStudiesMap.has(studyInstanceUid) ? seriesInStudiesMap.get(studyInstanceUid).map(s => { - return { - description: s.description || '(empty)', - seriesNumber: s.seriesNumber ?? '', - modality: s.modality || '', - instances: s.numSeriesInstances || '', - }; - }) + return { + description: s.description || '(empty)', + seriesNumber: s.seriesNumber ?? '', + modality: s.modality || '', + instances: s.numSeriesInstances || '', + }; + }) : [] } > @@ -343,13 +343,18 @@ function WorkList({ // mode.routeName // mode.routes[x].path // Don't specify default data source, and it should just be picked up... (this may not currently be the case) - // How do we know which params to pass? Today, it's just StudyInstanceUIDs + // How do we know which params to pass? Today, it's just StudyInstanceUIDs and configUrl if exists + const query = new URLSearchParams(); + query.append('StudyInstanceUIDs', studyInstanceUid); + if (filterValues.configUrl) { + query.append('configUrl', filterValues.configUrl); + } return ( @@ -499,6 +504,7 @@ const defaultFilterValues = { pageNumber: 1, resultsPerPage: 25, datasources: '', + configUrl: null, }; function _tryParseInt(str, defaultValue) { @@ -531,6 +537,7 @@ function _getQueryFilterValues(params) { pageNumber: _tryParseInt(params.get('pagenumber'), undefined), resultsPerPage: _tryParseInt(params.get('resultsperpage'), undefined), datasources: params.get('datasources'), + configUrl: params.get('configurl'), }; // Delete null/undefined keys diff --git a/yarn.lock b/yarn.lock index 434106df8e6..5200f032629 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1308,7 +1308,7 @@ core-js-pure "^3.25.1" regenerator-runtime "^0.13.11" -"@babel/runtime@7.17.9", "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.6", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.6", "@babel/runtime@^7.20.13", "@babel/runtime@^7.20.7", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.4", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": +"@babel/runtime@7.17.9", "@babel/runtime@7.7.6", "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.6", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.6", "@babel/runtime@^7.20.13", "@babel/runtime@^7.20.7", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.4", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": version "7.20.13" resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.13.tgz#7055ab8a7cff2b8f6058bf6ae45ff84ad2aded4b" integrity sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA== @@ -2369,6 +2369,41 @@ resolved "https://registry.npmjs.org/@icons/material/-/material-0.2.4.tgz#e90c9f71768b3736e76d7dd6783fc6c2afa88bc8" integrity sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw== +"@ischemaview/dicom-neuro-rma@^0.0.2": + version "0.0.2" + resolved "https://nexus.infrastructure.rapid-sys.com/repository/isv-npm/@ischemaview/dicom-neuro-rma/-/dicom-neuro-rma-0.0.2.tgz#fb096d8cd80668f3ca39828e6bd7192bce3585c7" + integrity sha512-KbCmkQ+gk3Qcf80nhMwcpptPm/O0/HFYfDzgwRPXL2uwi3G+5Cdc0MOqEULo8Zps3Y0SoFdIvmWdE3LRxqreyA== + dependencies: + "@babel/runtime" "7.7.6" + +"@ischemaview/dicom-neuro-rwa@^0.0.3": + version "0.0.3" + resolved "https://nexus.infrastructure.rapid-sys.com/repository/isv-npm/@ischemaview/dicom-neuro-rwa/-/dicom-neuro-rwa-0.0.3.tgz#0503c28c91e27428e8d7ce97b034671e0f2adfd0" + integrity sha512-FRJjtBGyVT0A74Bs6CJUIlvl+/rOL0095jghOT//AaJcmbGrAK2NeJcXbiuDiZ3n0qVBHfU778amKN6shUgL8Q== + dependencies: + "@babel/runtime" "7.7.6" + +"@ischemaview/dicom-pulmonary-rma@^0.0.3": + version "0.0.3" + resolved "https://nexus.infrastructure.rapid-sys.com/repository/isv-npm/@ischemaview/dicom-pulmonary-rma/-/dicom-pulmonary-rma-0.0.3.tgz#81ca4310ce299f19f62047ec9a559c9911d16041" + integrity sha512-MXbuRbD/xrTOaKsEvjRlbEo+AbWfpLl0GrkSyXg1036XQcJaXctFdya4pESBJDxbP4pM5BfaEOOzhYF29EZRnQ== + dependencies: + "@babel/runtime" "7.7.6" + +"@ischemaview/dicom-pulmonary-rwa@^0.0.3": + version "0.0.3" + resolved "https://nexus.infrastructure.rapid-sys.com/repository/isv-npm/@ischemaview/dicom-pulmonary-rwa/-/dicom-pulmonary-rwa-0.0.3.tgz#a81ef29118cca560bd3cd27709b3694ff983776c" + integrity sha512-aZg0tEsQkRHOJLZhd/8B1ghcbqu3OijVT4LV9GsryRK0fIn18uRPRGhSvf4Nf3fsfUSDAZh5ng8PLDd0tCN0jg== + dependencies: + "@babel/runtime" "7.7.6" + +"@ischemaview/dicom-rapidai-extension@^0.0.1": + version "0.0.1" + resolved "https://nexus.infrastructure.rapid-sys.com/repository/isv-npm/@ischemaview/dicom-rapidai-extension/-/dicom-rapidai-extension-0.0.1.tgz#6bc4d87d18bc5be79da0bdc9416017c9b16d53f8" + integrity sha512-LKG0Jn+lyAkx4TnyVyVHel8g+arj1CcW+Q2GMzFbJiGD8n7Jt7BZst+GNIagZtq/C9DN0JmeX0Ez4tBdKZMrBQ== + dependencies: + "@babel/runtime" "7.7.6" + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced"